diff --git a/Dockerfile_whatsappmulti b/Dockerfile_whatsappmulti index 6db65fede1..66c15a8380 100644 --- a/Dockerfile_whatsappmulti +++ b/Dockerfile_whatsappmulti @@ -1,9 +1,9 @@ -FROM alpine AS builder +FROM golang:1.25-alpine AS builder COPY . /go/src/matterbridge -RUN apk --no-cache add go git \ +RUN apk --no-cache add git \ && cd /go/src/matterbridge \ - && CGO_ENABLED=0 go build -tags whatsappmulti -mod vendor -ldflags "-X github.com/42wim/matterbridge/version.GitHash=$(git log --pretty=format:'%h' -n 1)" -o /bin/matterbridge + && CGO_ENABLED=0 go build -mod=mod -tags whatsappmulti -ldflags "-X github.com/42wim/matterbridge/version.GitHash=$(git log --pretty=format:'%h' -n 1)" -o /bin/matterbridge FROM alpine RUN apk --no-cache add ca-certificates mailcap diff --git a/bridge/whatsappmulti/handlers.go b/bridge/whatsappmulti/handlers.go index 90a7c7a667..15b61057f0 100644 --- a/bridge/whatsappmulti/handlers.go +++ b/bridge/whatsappmulti/handlers.go @@ -4,6 +4,7 @@ package bwhatsapp import ( + "context" "fmt" "mime" "strings" @@ -149,7 +150,9 @@ func (b *Bwhatsapp) handleTextMessage(messageInfo types.MessageInfo, msg *proto. ci := msg.GetExtendedTextMessage().GetContextInfo() if senderJID == (types.JID{}) && ci.Participant != nil { - senderJID = types.NewJID(ci.GetParticipant(), types.DefaultUserServer) + if parsed, err := types.ParseJID(ci.GetParticipant()); err == nil { + senderJID = parsed + } } if ci.MentionedJID != nil { @@ -159,7 +162,13 @@ func (b *Bwhatsapp) handleTextMessage(messageInfo types.MessageInfo, msg *proto. // mentions comes as telephone numbers and we don't want to expose it to other bridges // replace it with something more meaninful to others - mention := b.getSenderNotify(types.NewJID(numberAndSuffix[0], types.DefaultUserServer)) + var mentionJID types.JID + if parsed, err := types.ParseJID(mentionedJID); err == nil { + mentionJID = parsed + } else { + mentionJID = types.NewJID(numberAndSuffix[0], types.DefaultUserServer) + } + mention := b.getSenderNotify(mentionJID) text = strings.Replace(text, "@"+numberAndSuffix[0], "@"+mention, 1) } @@ -203,7 +212,9 @@ func (b *Bwhatsapp) handleImageMessage(msg *events.Message) { ci := imsg.GetContextInfo() if senderJID == (types.JID{}) && ci.Participant != nil { - senderJID = types.NewJID(ci.GetParticipant(), types.DefaultUserServer) + if parsed, err := types.ParseJID(ci.GetParticipant()); err == nil { + senderJID = parsed + } } rmsg := config.Message{ @@ -242,7 +253,8 @@ func (b *Bwhatsapp) handleImageMessage(msg *events.Message) { b.Log.Debugf("Trying to download %s with type %s", filename, imsg.GetMimetype()) - data, err := b.wc.Download(imsg) + // Fix: Add context.Background() as first parameter + data, err := b.wc.Download(context.Background(), imsg) if err != nil { b.Log.Errorf("Download image failed: %s", err) @@ -267,7 +279,9 @@ func (b *Bwhatsapp) handleVideoMessage(msg *events.Message) { ci := imsg.GetContextInfo() if senderJID == (types.JID{}) && ci.Participant != nil { - senderJID = types.NewJID(ci.GetParticipant(), types.DefaultUserServer) + if parsed, err := types.ParseJID(ci.GetParticipant()); err == nil { + senderJID = parsed + } } rmsg := config.Message{ @@ -309,7 +323,8 @@ func (b *Bwhatsapp) handleVideoMessage(msg *events.Message) { b.Log.Debugf("Trying to download %s with size %#v and type %s", filename, imsg.GetFileLength(), imsg.GetMimetype()) - data, err := b.wc.Download(imsg) + // Fix: Add context.Background() as first parameter + data, err := b.wc.Download(context.Background(), imsg) if err != nil { b.Log.Errorf("Download video failed: %s", err) @@ -334,7 +349,9 @@ func (b *Bwhatsapp) handleAudioMessage(msg *events.Message) { ci := imsg.GetContextInfo() if senderJID == (types.JID{}) && ci.Participant != nil { - senderJID = types.NewJID(ci.GetParticipant(), types.DefaultUserServer) + if parsed, err := types.ParseJID(ci.GetParticipant()); err == nil { + senderJID = parsed + } } rmsg := config.Message{ UserID: senderJID.String(), @@ -366,7 +383,8 @@ func (b *Bwhatsapp) handleAudioMessage(msg *events.Message) { b.Log.Debugf("Trying to download %s with size %#v and type %s", filename, imsg.GetFileLength(), imsg.GetMimetype()) - data, err := b.wc.Download(imsg) + // Fix: Add context.Background() as first parameter + data, err := b.wc.Download(context.Background(), imsg) if err != nil { b.Log.Errorf("Download video failed: %s", err) @@ -391,7 +409,9 @@ func (b *Bwhatsapp) handleDocumentMessage(msg *events.Message) { ci := imsg.GetContextInfo() if senderJID == (types.JID{}) && ci.Participant != nil { - senderJID = types.NewJID(ci.GetParticipant(), types.DefaultUserServer) + if parsed, err := types.ParseJID(ci.GetParticipant()); err == nil { + senderJID = parsed + } } rmsg := config.Message{ @@ -420,7 +440,8 @@ func (b *Bwhatsapp) handleDocumentMessage(msg *events.Message) { b.Log.Debugf("Trying to download %s with extension %s and type %s", filename, fileExt, imsg.GetMimetype()) - data, err := b.wc.Download(imsg) + // Fix: Add context.Background() as first parameter + data, err := b.wc.Download(context.Background(), imsg) if err != nil { b.Log.Errorf("Download document message failed: %s", err) @@ -451,4 +472,4 @@ func (b *Bwhatsapp) handleDelete(messageInfo *proto.ProtocolMessage) { b.Log.Debugf("<= Sending message from %s to gateway", b.Account) b.Log.Debugf("<= Message is %#v", rmsg) b.Remote <- rmsg -} +} \ No newline at end of file diff --git a/bridge/whatsappmulti/helpers.go b/bridge/whatsappmulti/helpers.go index 5eac958e64..c7f9247bb4 100644 --- a/bridge/whatsappmulti/helpers.go +++ b/bridge/whatsappmulti/helpers.go @@ -4,6 +4,7 @@ package bwhatsapp import ( + "context" "fmt" "strings" @@ -14,6 +15,7 @@ import ( "go.mau.fi/whatsmeow/store" "go.mau.fi/whatsmeow/store/sqlstore" "go.mau.fi/whatsmeow/types" + waLog "go.mau.fi/whatsmeow/util/log" ) type ProfilePicInfo struct { @@ -23,11 +25,13 @@ type ProfilePicInfo struct { } func (b *Bwhatsapp) reloadContacts() { - if _, err := b.wc.Store.Contacts.GetAllContacts(); err != nil { + // Fix: Add context.Background() as first parameter + if _, err := b.wc.Store.Contacts.GetAllContacts(context.Background()); err != nil { b.Log.Errorf("error on update of contacts: %v", err) } - allcontacts, err := b.wc.Store.Contacts.GetAllContacts() + // Fix: Add context.Background() as first parameter + allcontacts, err := b.wc.Store.Contacts.GetAllContacts(context.Background()) if err != nil { b.Log.Errorf("error on update of contacts: %v", err) } @@ -117,7 +121,7 @@ func (b *Bwhatsapp) getSenderNotify(senderJid types.JID) string { func (b *Bwhatsapp) GetProfilePicThumb(jid string) (*types.ProfilePictureInfo, error) { pjid, _ := types.ParseJID(jid) - info, err := b.wc.GetProfilePictureInfo(pjid, &whatsmeow.GetProfilePictureParams{ + info, err := b.wc.GetProfilePictureInfo(context.Background(), pjid, &whatsmeow.GetProfilePictureParams{ Preview: true, }) if err != nil { @@ -133,15 +137,22 @@ func isGroupJid(identifier string) bool { strings.HasSuffix(identifier, "@broadcast") } +func isPrivateJid(identifier string) bool { + return strings.HasSuffix(identifier, "@"+types.DefaultUserServer) || + strings.HasSuffix(identifier, "@"+types.HiddenUserServer) +} + func (b *Bwhatsapp) getDevice() (*store.Device, error) { device := &store.Device{} - storeContainer, err := sqlstore.New("sqlite", "file:"+b.Config.GetString("sessionfile")+".db?_pragma=foreign_keys(1)&_pragma=busy_timeout=10000", nil) + // Fix: Add context.Background() as first parameter and waLog.Noop logger + storeContainer, err := sqlstore.New(context.Background(), "sqlite", "file:"+b.Config.GetString("sessionfile")+".db?_pragma=foreign_keys(1)&_pragma=busy_timeout=10000", waLog.Noop) if err != nil { return device, fmt.Errorf("failed to connect to database: %v", err) } - device, err = storeContainer.GetFirstDevice() + // Fix: Add context.Background() as first parameter + device, err = storeContainer.GetFirstDevice(context.Background()) if err != nil { return device, fmt.Errorf("failed to get device: %v", err) } @@ -206,4 +217,4 @@ func getMessageIdFormat(jid types.JID, messageID string) string { // we're crafting our own JID str as AD JID format messes with how stuff looks on a webclient jidStr := fmt.Sprintf("%s@%s", jid.User, jid.Server) return fmt.Sprintf("%s/%s", jidStr, messageID) -} +} \ No newline at end of file diff --git a/bridge/whatsappmulti/whatsapp.go b/bridge/whatsappmulti/whatsapp.go index e7c0f691a4..6707216de3 100644 --- a/bridge/whatsappmulti/whatsapp.go +++ b/bridge/whatsappmulti/whatsapp.go @@ -122,12 +122,13 @@ func (b *Bwhatsapp) Connect() error { b.Log.Infoln("WhatsApp connection successful") - b.contacts, err = b.wc.Store.Contacts.GetAllContacts() + // Fix: Add context.Background() as first parameter + b.contacts, err = b.wc.Store.Contacts.GetAllContacts(context.Background()) if err != nil { return errors.New("failed to get contacts: " + err.Error()) } - b.joinedGroups, err = b.wc.GetJoinedGroups() + b.joinedGroups, err = b.wc.GetJoinedGroups(context.Background()) if err != nil { return errors.New("failed to get list of joined groups: " + err.Error()) } @@ -171,10 +172,34 @@ func (b *Bwhatsapp) Disconnect() error { return nil } -// JoinChannel Join a WhatsApp group specified in gateway config as channel='number-id@g.us' or channel='Channel name' +// JoinChannel Join a WhatsApp group specified in gateway config as +// channel='number-id@g.us' or channel='Channel name' or channel='number@s.whatsapp.net' or channel='number@lid' // Required implementation of the Bridger interface // https://github.com/42wim/matterbridge/blob/2cfd880cdb0df29771bf8f31df8d990ab897889d/bridge/bridge.go#L11-L16 func (b *Bwhatsapp) JoinChannel(channel config.ChannelInfo) error { + // Skip status@broadcast - it's a special WhatsApp broadcast list, not a joinable group + if channel.Name == "status@broadcast" { + b.Log.Debugf("Skipping status@broadcast channel - not a joinable group") + return nil + } + + // Check if this is a private chat JID + if isPrivateJid(channel.Name) { + // For private chats, validate the JID format but don't require group membership + jid, err := types.ParseJID(channel.Name) + if err != nil { + return fmt.Errorf("invalid WhatsApp private chat JID format: %s", err) + } + + // Optionally verify that the contact exists in the contacts list + if _, exists := b.contacts[jid]; !exists { + b.Log.Warnf("Private chat contact %s not found in contacts list, but will attempt to bridge anyway", channel.Name) + } + + b.Log.Infof("Configured private chat channel: %s", channel.Name) + return nil + } + byJid := isGroupJid(channel.Name) // verify if we are member of the given group @@ -383,7 +408,7 @@ func (b *Bwhatsapp) Send(msg config.Message) (string, error) { return "", nil } - _, err := b.wc.RevokeMessage(groupJID, msg.ID) + _, err := b.wc.RevokeMessage(context.Background(), groupJID, msg.ID) return "", err } @@ -453,4 +478,4 @@ func (b *Bwhatsapp) sendMessage(rmsg config.Message, message *proto.Message) (st _, err := b.wc.SendMessage(context.Background(), groupJID, message, whatsmeow.SendRequestExtra{ID: ID}) return getMessageIdFormat(*b.wc.Store.ID, ID), err -} +} \ No newline at end of file diff --git a/go.mod b/go.mod index 39539ae539..c8b9575300 100644 --- a/go.mod +++ b/go.mod @@ -34,24 +34,24 @@ require ( github.com/nelsonken/gomf v0.0.0-20190423072027-c65cc0469e94 github.com/olahol/melody v1.2.1 github.com/paulrosania/go-charset v0.0.0-20190326053356-55c9d7a5834c - github.com/rs/xid v1.5.0 + github.com/rs/xid v1.6.0 github.com/russross/blackfriday v1.6.0 github.com/saintfish/chardet v0.0.0-20230101081208-5e3ef4b5456d github.com/shazow/ssh-chat v1.10.1 github.com/sirupsen/logrus v1.9.3 github.com/slack-go/slack v0.14.0 github.com/spf13/viper v1.19.0 - github.com/stretchr/testify v1.9.0 + github.com/stretchr/testify v1.11.1 github.com/vincent-petithory/dataurl v1.0.0 github.com/writeas/go-strip-markdown v2.0.1+incompatible github.com/yaegashi/msgraph.go v0.1.4 github.com/zfjagann/golang-ring v0.0.0-20220330170733-19bcea1b6289 - go.mau.fi/whatsmeow v0.0.0-20240821142752-3d63c6fcc1a7 + go.mau.fi/whatsmeow v0.0.0-20260218135554-9cbe80fb25a4 golang.org/x/image v0.19.0 golang.org/x/oauth2 v0.22.0 - golang.org/x/text v0.17.0 + golang.org/x/text v0.34.0 gomod.garykim.dev/nc-talk v0.3.0 - google.golang.org/protobuf v1.34.2 + google.golang.org/protobuf v1.36.11 layeh.com/gumble v0.0.0-20221205141517-d1df60a3cc14 modernc.org/sqlite v1.32.0 ) @@ -62,9 +62,12 @@ require ( github.com/Jeffail/gabs v1.4.0 // indirect github.com/apex/log v1.9.0 // indirect github.com/av-elier/go-decimal-to-rational v0.0.0-20191127152832-89e6aad02ecf // indirect + github.com/beeper/argo-go v1.1.2 // indirect github.com/blang/semver/v4 v4.0.0 // indirect + github.com/coder/websocket v1.8.14 // indirect github.com/dustin/go-humanize v1.0.1 // indirect github.com/dyatlov/go-opengraph/opengraph v0.0.0-20220524092352-606d7b1e5f8a // indirect + github.com/elliotchance/orderedmap/v3 v3.1.0 // indirect github.com/fatih/color v1.17.0 // indirect github.com/francoispqt/gojay v1.2.13 // indirect github.com/go-asn1-ber/asn1-ber v1.5.7 // indirect @@ -87,7 +90,7 @@ require ( github.com/mattermost/go-i18n v1.11.1-0.20211013152124-5c415071e404 // indirect github.com/mattermost/ldap v0.0.0-20231116144001-0f480c025956 // indirect github.com/mattermost/logr/v2 v2.0.21 // indirect - github.com/mattn/go-colorable v0.1.13 // indirect + github.com/mattn/go-colorable v0.1.14 // indirect github.com/mattn/go-isatty v0.0.20 // indirect github.com/mattn/go-runewidth v0.0.15 // indirect github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d // indirect @@ -99,6 +102,7 @@ require ( github.com/pborman/uuid v1.2.1 // indirect github.com/pelletier/go-toml v1.9.5 // indirect github.com/pelletier/go-toml/v2 v2.2.2 // indirect + github.com/petermattis/goid v0.0.0-20260113132338-7c7de50cc741 // indirect github.com/philhofer/fwd v1.1.3-0.20240612014219-fbbf4953d986 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect @@ -106,7 +110,7 @@ require ( github.com/rickb777/date v1.12.4 // indirect github.com/rickb777/plural v1.2.0 // indirect github.com/rivo/uniseg v0.4.7 // indirect - github.com/rs/zerolog v1.33.0 // indirect + github.com/rs/zerolog v1.34.0 // indirect github.com/sagikazarmark/locafero v0.4.0 // indirect github.com/sagikazarmark/slog-shim v0.1.0 // indirect github.com/shazow/rateio v0.0.0-20200113175441-4461efc8bdc4 // indirect @@ -120,18 +124,19 @@ require ( github.com/tinylib/msgp v1.2.0 // indirect github.com/valyala/bytebufferpool v1.0.0 // indirect github.com/valyala/fasttemplate v1.2.2 // indirect + github.com/vektah/gqlparser/v2 v2.5.27 // indirect github.com/vmihailenco/msgpack/v5 v5.4.1 // indirect github.com/vmihailenco/tagparser/v2 v2.0.0 // indirect github.com/wiggin77/merror v1.0.5 // indirect github.com/wiggin77/srslog v1.0.1 // indirect - go.mau.fi/libsignal v0.1.1 // indirect - go.mau.fi/util v0.6.0 // indirect + go.mau.fi/libsignal v0.2.1 // indirect + go.mau.fi/util v0.9.6 // indirect go.uber.org/multierr v1.11.0 // indirect - golang.org/x/crypto v0.25.0 // indirect - golang.org/x/exp v0.0.0-20240707233637-46b078467d37 // indirect - golang.org/x/net v0.27.0 // indirect - golang.org/x/sys v0.22.0 // indirect - golang.org/x/term v0.22.0 // indirect + golang.org/x/crypto v0.48.0 // indirect + golang.org/x/exp v0.0.0-20260212183809-81e46e3db34a // indirect + golang.org/x/net v0.50.0 // indirect + golang.org/x/sys v0.41.0 // indirect + golang.org/x/term v0.40.0 // indirect golang.org/x/time v0.5.0 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20240722135656-d784300faade // indirect google.golang.org/grpc v1.65.0 // indirect @@ -150,4 +155,4 @@ require ( //replace github.com/matrix-org/gomatrix => github.com/matterbridge/gomatrix v0.0.0-20220205235239-607eb9ee6419 -go 1.22.0 +go 1.25.0 diff --git a/go.sum b/go.sum index e2d6c6be3e..f1c45a1b3d 100644 --- a/go.sum +++ b/go.sum @@ -16,6 +16,8 @@ github.com/Benau/go_rlottie v0.0.0-20210807002906-98c1b2421989/go.mod h1:aDWSWjs github.com/Benau/tgsconverter v0.0.0-20210809170556-99f4a4f6337f h1:aUkwZDEMJIGRcWlSDifSLoKG37UCOH/DPeG52/xwois= github.com/Benau/tgsconverter v0.0.0-20210809170556-99f4a4f6337f/go.mod h1:AQiQKKI/YIIctvDt3hI3c1S05/JXMM7v/sQcRd0paVE= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/DATA-DOG/go-sqlmock v1.5.2 h1:OcvFkGmslmlZibjAjaHm3L//6LiuBgolP7OputlJIzU= +github.com/DATA-DOG/go-sqlmock v1.5.2/go.mod h1:88MAG/4G7SMwSE3CeA0ZKzrT5CiOU3OJ+JlNzwDqpNU= github.com/Jeffail/gabs v1.4.0 h1://5fYRRTq1edjfIrQGvdkcd22pkYUrHZ5YC/H2GJVAo= github.com/Jeffail/gabs v1.4.0/go.mod h1:6xMvQMK4k33lb7GUUpaAPh6nKMmemQeg5d4gn7/bOXc= github.com/Philipp15b/go-steam v1.0.1-0.20200727090957-6ae9b3c0a560 h1:ItnC9PEEMESzTbFayxrhKBbuFQOXDBI8yy7NudTcEWs= @@ -24,7 +26,11 @@ github.com/Rhymen/go-whatsapp v0.1.2-0.20211102134409-31a2e740845c h1:4mIZQXKYBy github.com/Rhymen/go-whatsapp v0.1.2-0.20211102134409-31a2e740845c/go.mod h1:DNSFRLFDFIqm2+0aJzSOVfn25020vldM4SRqz6YtLgI= github.com/SevereCloud/vksdk/v2 v2.17.0 h1:Wll63JSuBTdE0L7+V/PMn9PyhLrWSWIjX76XpWbXTFw= github.com/SevereCloud/vksdk/v2 v2.17.0/go.mod h1:y3q3XAdqnQ2Wf0B+Wi7qNdqJc5ZZsz4ve+DoSQsrChk= +github.com/agnivade/levenshtein v1.2.1 h1:EHBY3UOn1gwdy/VbFwgo4cxecRznFk7fKWN1KOX7eoM= +github.com/agnivade/levenshtein v1.2.1/go.mod h1:QVVI16kDrtSuwcpd0p1+xMC6Z/VfhtCyDIjcwga4/DU= github.com/alexcesaro/log v0.0.0-20150915221235-61e686294e58/go.mod h1:YNfsMyWSs+h+PaYkxGeMVmVCX75Zj/pqdjbu12ciCYE= +github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883 h1:bvNMNQO63//z+xNgfBlViaCIJKLlCJ6/fmUseuG0wVQ= +github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= github.com/apex/log v1.9.0 h1:FHtw/xuaM8AgmvDDTI9fiwoAL25Sq2cxojnZICUU8l0= github.com/apex/log v1.9.0/go.mod h1:m82fZlWIuiWzWP04XCTXmnX0xRkYYbCdYn8jbJeLBEA= @@ -35,6 +41,8 @@ github.com/av-elier/go-decimal-to-rational v0.0.0-20191127152832-89e6aad02ecf h1 github.com/av-elier/go-decimal-to-rational v0.0.0-20191127152832-89e6aad02ecf/go.mod h1:POPnOeaYF7U9o3PjLTb9icRfEOxjBNLRXh9BLximJGM= github.com/aws/aws-sdk-go v1.20.6/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= github.com/aybabtme/rgbterm v0.0.0-20170906152045-cc83f3b3ce59/go.mod h1:q/89r3U2H7sSsE2t6Kca0lfwTK8JdoNGS/yzM/4iH5I= +github.com/beeper/argo-go v1.1.2 h1:UQI2G8F+NLfGTOmTUI0254pGKx/HUU/etbUGTJv91Fs= +github.com/beeper/argo-go v1.1.2/go.mod h1:M+LJAnyowKVQ6Rdj6XYGEn+qcVFkb3R/MUpqkGR0hM4= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/blang/semver/v4 v4.0.0 h1:1PFHFE6yCCTv8C1TeyNNarDzntLi7wMI5i/pzqYIsAM= github.com/blang/semver/v4 v4.0.0/go.mod h1:IbckMUScFkM3pff0VJDNKRiT6TG/YpiHIM2yvyW5YoQ= @@ -46,6 +54,8 @@ github.com/bwmarrin/discordgo v0.28.1 h1:gXsuo2GBO7NbR6uqmrrBDplPUx2T3nzu775q/Rd github.com/bwmarrin/discordgo v0.28.1/go.mod h1:NJZpH+1AfhIcyQsPeuBKsUtYrRnjkyu0kIVMCHkZtRY= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= +github.com/coder/websocket v1.8.14 h1:9L0p0iKiNOibykf283eHkKUHHrpG7f65OE3BhhO7v9g= +github.com/coder/websocket v1.8.14/go.mod h1:NX3SzP+inril6yawo5CQXx8+fk145lPDC6pumgx0mVg= github.com/coreos/go-systemd v0.0.0-20181012123002-c6f51f82210d/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/d5/tengo/v2 v2.17.0 h1:BWUN9NoJzw48jZKiYDXDIF3QrIVZRm1uV1gTzeZ2lqM= @@ -60,6 +70,8 @@ github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkp github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= github.com/dyatlov/go-opengraph/opengraph v0.0.0-20220524092352-606d7b1e5f8a h1:etIrTD8BQqzColk9nKRusM9um5+1q0iOEJLqfBMIK64= github.com/dyatlov/go-opengraph/opengraph v0.0.0-20220524092352-606d7b1e5f8a/go.mod h1:emQhSYTXqB0xxjLITTw4EaWZ+8IIQYw+kx9GqNUKdLg= +github.com/elliotchance/orderedmap/v3 v3.1.0 h1:j4DJ5ObEmMBt/lcwIecKcoRxIQUEnw0L804lXYDt/pg= +github.com/elliotchance/orderedmap/v3 v3.1.0/go.mod h1:G+Hc2RwaZvJMcS4JpGCOyViCnGeKf0bTYCGTO4uhjSo= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= @@ -116,8 +128,8 @@ github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= -github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= -github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= +github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= github.com/google/go-github v17.0.0+incompatible/go.mod h1:zLgOLi98H3fifZn+44m+umXrS52loVEgC2AApnigrVQ= github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= github.com/google/gops v0.3.27 h1:BDdWfedShsBbeatZ820oA4DbVOC8yJ4NI8xAlDFWfgI= @@ -229,8 +241,9 @@ github.com/mattn/go-colorable v0.1.1/go.mod h1:FuOcm+DKB9mbwrcAfNl7/TZVBZ6rcncea github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= -github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= +github.com/mattn/go-colorable v0.1.14 h1:9A9LHSqF/7dyVVX6g0U9cwm9pG3kP9gSzcuIPHPsaIE= +github.com/mattn/go-colorable v0.1.14/go.mod h1:6LmQG8QLFO4G5z1gPvYEzlUgJ2wF+stgPZH1UqBm1s8= github.com/mattn/go-isatty v0.0.5/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= @@ -242,6 +255,8 @@ github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D github.com/mattn/go-runewidth v0.0.8/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= github.com/mattn/go-runewidth v0.0.15 h1:UNAjwbU9l54TA3KzvqLGxwWjHmMgBUVhBiTjelZgg3U= github.com/mattn/go-runewidth v0.0.15/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= +github.com/mattn/go-sqlite3 v1.14.34 h1:3NtcvcUnFBPsuRcno8pUtupspG/GM+9nZ88zgJcp6Zk= +github.com/mattn/go-sqlite3 v1.14.34/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y= github.com/mattn/godown v0.0.1 h1:39uk50ufLVQFs0eapIJVX5fCS74a1Fs2g5f1MVqIHdE= github.com/mattn/godown v0.0.1/go.mod h1:/ivCKurgV/bx6yqtP/Jtc2Xmrv3beCYBvlfAUl4X5g4= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= @@ -287,6 +302,8 @@ github.com/pelletier/go-toml v1.9.5 h1:4yBQzkHv+7BHq2PQUZF3Mx0IYxG7LsP222s7Agd3v github.com/pelletier/go-toml v1.9.5/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= github.com/pelletier/go-toml/v2 v2.2.2 h1:aYUidT7k73Pcl9nb2gScu7NSrKCSHIDE89b3+6Wq+LM= github.com/pelletier/go-toml/v2 v2.2.2/go.mod h1:1t835xjRzz80PqgE6HHgN2JOsmgYu/h4qDAS4n929Rs= +github.com/petermattis/goid v0.0.0-20260113132338-7c7de50cc741 h1:KPpdlQLZcHfTMQRi6bFQ7ogNO0ltFT4PmtwTLW4W+14= +github.com/petermattis/goid v0.0.0-20260113132338-7c7de50cc741/go.mod h1:pxMtw7cyUw6B2bRH0ZBANSPg+AoSud1I1iyJHI69jH4= github.com/philhofer/fwd v1.1.3-0.20240612014219-fbbf4953d986 h1:jYi87L8j62qkXzaYHAQAhEapgukhenIMZRBKTNRLHJ4= github.com/philhofer/fwd v1.1.3-0.20240612014219-fbbf4953d986/go.mod h1:RqIHx9QI14HlwKwm98g9Re5prTQ6LdeRQn+gXJFxsJM= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= @@ -312,10 +329,10 @@ github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUc github.com/rogpeppe/fastuuid v1.1.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ= github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog= -github.com/rs/xid v1.5.0 h1:mKX4bl4iPYJtEIxp6CYiUuLQ/8DYMoz0PUdtGgMFRVc= -github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= -github.com/rs/zerolog v1.33.0 h1:1cU2KZkvPxNyfgEmhHAz/1A9Bz+llsdYzklWFzgp0r8= -github.com/rs/zerolog v1.33.0/go.mod h1:/7mN4D5sKwJLZQ2b/znpjC3/GQWY/xaDXUM0kKWRHss= +github.com/rs/xid v1.6.0 h1:fV591PaemRlL6JfRxGDEPl69wICngIQ3shQtzfy2gxU= +github.com/rs/xid v1.6.0/go.mod h1:7XoLgs4eV+QndskICGsho+ADou8ySMSjJKDIan90Nz0= +github.com/rs/zerolog v1.34.0 h1:k43nTLIwcTVQAncfCw4KZ2VY6ukYoZaBPNOE8txlOeY= +github.com/rs/zerolog v1.34.0/go.mod h1:bJsvje4Z08ROH4Nhs5iH600c3IkWhwp44iRc54W6wYQ= github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/russross/blackfriday v1.6.0 h1:KqfZb0pUVN2lYqZUYRddxF4OR8ZMURnJIG5Y3VRLtww= github.com/russross/blackfriday v1.6.0/go.mod h1:ti0ldHuxg49ri4ksnFxlkCfN+hvslNlmVHqNRXXJNAY= @@ -326,6 +343,8 @@ github.com/sagikazarmark/slog-shim v0.1.0/go.mod h1:SrcSrq8aKtyuqEI1uvTDTK1arOWR github.com/saintfish/chardet v0.0.0-20230101081208-5e3ef4b5456d h1:hrujxIzL1woJ7AwssoOcM/tq5JjjG2yYOc8odClEiXA= github.com/saintfish/chardet v0.0.0-20230101081208-5e3ef4b5456d/go.mod h1:uugorj2VCxiV1x+LzaIdVa9b4S4qGAcH6cbhh4qVxOU= github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= +github.com/sergi/go-diff v1.3.1 h1:xkr+Oxo4BOQKmkn/B9eMK0g5Kg/983T9DqqPHwYqD+8= +github.com/sergi/go-diff v1.3.1/go.mod h1:aMJSSKb2lpPvRNec0+w3fl7LP9IOFzdc9Pa4NFbPK1I= github.com/shazow/rateio v0.0.0-20200113175441-4461efc8bdc4 h1:zwQ1HBo5FYwn1ksMd19qBCKO8JAWE9wmHivEpkw/DvE= github.com/shazow/rateio v0.0.0-20200113175441-4461efc8bdc4/go.mod h1:vt2jWY/3Qw1bIzle5thrJWucsLuuX9iUNnp20CqCciI= github.com/shazow/ssh-chat v1.10.1 h1:ePS+ngEYqm+yUuXegDPutysqLV2WoI22XDOeRgI6CE0= @@ -387,8 +406,9 @@ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1FQKckRals= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= -github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= +github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8= github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU= github.com/tarm/serial v0.0.0-20180830185346-98f6abe2eb07/go.mod h1:kDXzergiv9cbyO7IOYJZWg1U88JhDg3PB6klq9Hg2pA= @@ -405,6 +425,8 @@ github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6Kllzaw github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= github.com/valyala/fasttemplate v1.2.2 h1:lxLXG0uE3Qnshl9QyaK6XJxMXlQZELvChBOCmQD0Loo= github.com/valyala/fasttemplate v1.2.2/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= +github.com/vektah/gqlparser/v2 v2.5.27 h1:RHPD3JOplpk5mP5JGX8RKZkt2/Vwj/PZv0HxTdwFp0s= +github.com/vektah/gqlparser/v2 v2.5.27/go.mod h1:D1/VCZtV3LPnQrcPBeR/q5jkSQIPti0uYCP/RI0gIeo= github.com/viant/assertly v0.4.8/go.mod h1:aGifi++jvCrUaklKEKT0BU95igDNaqkvz+49uaYMPRU= github.com/viant/toolbox v0.24.0/go.mod h1:OxMCG57V0PXuIP2HNQrtJf2CjqdmbrOx5EkMILuUhzM= github.com/vincent-petithory/dataurl v1.0.0 h1:cXw+kPto8NLuJtlMsI152irrVw9fRDX8AbShPRpg2CI= @@ -428,12 +450,12 @@ github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9de github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/zfjagann/golang-ring v0.0.0-20220330170733-19bcea1b6289 h1:dEdcEes8Aki8XrgZFyrZvtazFlW4U7eNvX9NuyFJAtQ= github.com/zfjagann/golang-ring v0.0.0-20220330170733-19bcea1b6289/go.mod h1:0MsIttMJIF/8Y7x0XjonJP7K99t3sR6bjj4m5S4JmqU= -go.mau.fi/libsignal v0.1.1 h1:m/0PGBh4QKP/I1MQ44ti4C0fMbLMuHb95cmDw01FIpI= -go.mau.fi/libsignal v0.1.1/go.mod h1:QLs89F/OA3ThdSL2Wz2p+o+fi8uuQUz0e1BRa6ExdBw= -go.mau.fi/util v0.6.0 h1:W6SyB3Bm/GjenQ5iq8Z8WWdN85Gy2xS6L0wmnR7SVjg= -go.mau.fi/util v0.6.0/go.mod h1:ljYdq3sPfpICc3zMU+/mHV/sa4z0nKxc67hSBwnrk8U= -go.mau.fi/whatsmeow v0.0.0-20240821142752-3d63c6fcc1a7 h1:Aa4uov0rM0SQQ7Fc/TZZpmQEGksie2SVTv/UuCJwViI= -go.mau.fi/whatsmeow v0.0.0-20240821142752-3d63c6fcc1a7/go.mod h1:BhHKalSq0qNtSCuGIUIvoJyU5KbT4a7k8DQ5yw1Ssk4= +go.mau.fi/libsignal v0.2.1 h1:vRZG4EzTn70XY6Oh/pVKrQGuMHBkAWlGRC22/85m9L0= +go.mau.fi/libsignal v0.2.1/go.mod h1:iVvjrHyfQqWajOUaMEsIfo3IqgVMrhWcPiiEzk7NgoU= +go.mau.fi/util v0.9.6 h1:2nsvxm49KhI3wrFltr0+wSUBlnQ4CMtykuELjpIU+ts= +go.mau.fi/util v0.9.6/go.mod h1:sIJpRH7Iy5Ad1SBuxQoatxtIeErgzxCtjd/2hCMkYMI= +go.mau.fi/whatsmeow v0.0.0-20260218135554-9cbe80fb25a4 h1:+3FE6cq5NzELYVD7uxa0yDpbUB+poSQmJV8zENTjHZA= +go.mau.fi/whatsmeow v0.0.0-20260218135554-9cbe80fb25a4/go.mod h1:mXCRFyPEPn4jqWz6Afirn8vY7DpHCPnlKq6I2cWwFHM= go.opencensus.io v0.18.0/go.mod h1:vKdFvxhtzZ9onBp9VKHK8z/sRpBMnKAsufL7wlDrCOA= go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= @@ -447,11 +469,11 @@ golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20201016220609-9e8e0b390897/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= -golang.org/x/crypto v0.25.0 h1:ypSNr+bnYL2YhwoMt2zPxHFmbAN1KZs/njMG3hxUp30= -golang.org/x/crypto v0.25.0/go.mod h1:T+wALwcMOSE0kXgUAnPAHqTLW+XHgcELELW8VaDgm/M= +golang.org/x/crypto v0.48.0 h1:/VRzVqiRSggnhY7gNRxPauEQ5Drw9haKdM0jqfcCFts= +golang.org/x/crypto v0.48.0/go.mod h1:r0kV5h3qnFPlQnBSrULhlsRfryS2pmewsg+XfMgkVos= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20240707233637-46b078467d37 h1:uLDX+AfeFCct3a2C7uIWBKMJIR3CJMhcgfrUAqjRK6w= -golang.org/x/exp v0.0.0-20240707233637-46b078467d37/go.mod h1:M4RDyNAINzryxdtnbRXRL/OHtkFuWGRjvuhBJpk2IlY= +golang.org/x/exp v0.0.0-20260212183809-81e46e3db34a h1:ovFr6Z0MNmU7nH8VaX5xqw+05ST2uO1exVfZPVqRC5o= +golang.org/x/exp v0.0.0-20260212183809-81e46e3db34a/go.mod h1:K79w1Vqn7PoiZn+TkNpx3BUWUQksGO3JcVX6qIjytmA= golang.org/x/image v0.19.0 h1:D9FX4QWkLfkeqaC62SonffIIuYdOk/UE2XKUBgRIBIQ= golang.org/x/image v0.19.0/go.mod h1:y0zrRqlQRWQ5PXaYCOMLTW2fpsxZ8Qh9I/ohnInJEys= golang.org/x/lint v0.0.0-20180702182130-06c8688daad7/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -460,8 +482,8 @@ golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvx golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.19.0 h1:fEdghXQSo20giMthA7cd28ZC+jts4amQ3YMXiP5oMQ8= -golang.org/x/mod v0.19.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/mod v0.33.0 h1:tHFzIWbBifEmbwtGz65eaWyGiGZatSrT9prnU8DbVL8= +golang.org/x/mod v0.33.0/go.mod h1:swjeQEj+6r7fODbD2cqrnje9PnziFuw4bmLbBZFrQ5w= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -478,8 +500,8 @@ golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLL golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20220520000938-2e3eb7b945c2/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.27.0 h1:5K3Njcw06/l2y9vpGCSdcxWOYHOUk3dVNGDXN+FvAys= -golang.org/x/net v0.27.0/go.mod h1:dDi0PyhWNoiUOrAS8uXv/vnScO4wnHQO4mj9fn/RytE= +golang.org/x/net v0.50.0 h1:ucWh9eiCGyDR3vtzso0WMQinm2Dnt8cFMuQa9K33J60= +golang.org/x/net v0.50.0/go.mod h1:UgoSli3F/pBgdJBHCTc+tp3gmrU4XswgGRgtnwWTfyM= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20181017192945-9dcd33a902f4/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20181203162652-d668ce993890/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= @@ -495,8 +517,8 @@ golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ= -golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.19.0 h1:vV+1eWNmZ5geRlYjzm2adRgW2/mcpevXNg50YZtPCE4= +golang.org/x/sync v0.19.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181029174526-d69651ed3497/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -519,20 +541,20 @@ golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.22.0 h1:RI27ohtqKCnwULzJLqkv897zojh5/DwS/ENaMzUOaWI= -golang.org/x/sys v0.22.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.41.0 h1:Ivj+2Cp/ylzLiEU89QhWblYnOE9zerudt9Ftecq2C6k= +golang.org/x/sys v0.41.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.22.0 h1:BbsgPEJULsl2fV/AT3v15Mjva5yXKQDyKf+TbDz7QJk= -golang.org/x/term v0.22.0/go.mod h1:F3qCibpT5AMpCRfhfT53vVJwhLtIVHhB9XDjfFvnMI4= +golang.org/x/term v0.40.0 h1:36e4zGLqU4yhjlmxEaagx2KuYbJq3EwY8K943ZsHcvg= +golang.org/x/term v0.40.0/go.mod h1:w2P8uVp06p2iyKKuvXIm7N/y0UCRt3UfJTfZ7oOpglM= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.17.0 h1:XtiM5bkSOt+ewxlOE/aE/AKEHibwj/6gvWMl9Rsh0Qc= -golang.org/x/text v0.17.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= +golang.org/x/text v0.34.0 h1:oL/Qq0Kdaqxa1KbNeMKwQq0reLCCaFtqu2eNuSeNHbk= +golang.org/x/text v0.34.0/go.mod h1:homfLqTYRFyVYemLBFl5GgL/DWEiH5wcsQ5gSh1yziA= golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk= @@ -547,8 +569,8 @@ golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBn golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20200529172331-a64b76657301/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200731060945-b5fad4ed8dd6/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.23.0 h1:SGsXPZ+2l4JsgaCKkx+FQ9YZ5XEtA1GZYuoDjenLjvg= -golang.org/x/tools v0.23.0/go.mod h1:pnu6ufv6vQkll6szChhK3C3L/ruaIv5eBeztNG8wtsI= +golang.org/x/tools v0.42.0 h1:uNgphsn75Tdz5Ji2q36v/nsFSfR/9BRFvqhGBaJGd5k= +golang.org/x/tools v0.42.0/go.mod h1:Ma6lCIwGZvHK6XtgbswSoWroEkhugApmsXyrUmBhfr0= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -591,8 +613,8 @@ google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlba google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg= -google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw= +google.golang.org/protobuf v1.36.11 h1:fV6ZwhNocDyBLK0dj+fg8ektcVegBBuEolpbTQyBNVE= +google.golang.org/protobuf v1.36.11/go.mod h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= diff --git a/vendor/github.com/beeper/argo-go/LICENSE b/vendor/github.com/beeper/argo-go/LICENSE new file mode 100644 index 0000000000..1472229f5d --- /dev/null +++ b/vendor/github.com/beeper/argo-go/LICENSE @@ -0,0 +1,9 @@ + + +Copyright 2025 Automattic Inc. + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/vendor/github.com/beeper/argo-go/block/blockreader.go b/vendor/github.com/beeper/argo-go/block/blockreader.go new file mode 100644 index 0000000000..03d6bfbf57 --- /dev/null +++ b/vendor/github.com/beeper/argo-go/block/blockreader.go @@ -0,0 +1,329 @@ +// Package block provides reader and writer types for processing Argo data blocks. +// These types handle different encoding strategies such as length-prefixing (with or without deduplication), +// fixed-size data, and unlabeled varints. +package block + +import ( + "fmt" + "io" // For io.EOF, io.ErrUnexpectedEOF + + "github.com/beeper/argo-go/label" + "github.com/beeper/argo-go/pkg/buf" +) + +// FromBytesFunc is a generic function type that defines a conversion from a byte slice +// to a specific output type `Out`. It is used by various block readers to transform +// raw bytes read from a block into the desired data type. +// This corresponds to the `(bytes: Uint8Array) => Out` callback in the TypeScript Argo implementation. +type FromBytesFunc[Out any] func(bytes []byte) Out + +// CommonState holds shared state for block readers, primarily the `DataBuf` from which +// block data is read. It also provides a default `AfterNewRead` hook. +// Embedding CommonState allows concrete reader types to share this buffer and default hook. +type CommonState struct { + // DataBuf is the buffer from which the actual data for this block is read. + // This is distinct from any "parent" buffer that might contain labels or references. + DataBuf buf.Read +} + +// AfterNewRead is a hook method called by some block readers after successfully reading +// and processing a new value from the block. The default implementation is a no-op. +// Concrete block reader types can provide their own `AfterNewRead` implementation if specific +// post-read actions are needed (e.g., updating internal state for deduplication). +func (cs *CommonState) AfterNewRead() { + // Default no-op, can be overridden by embedding types. +} + +// LabelBlockReader reads values from its `DataBuf` where each value is preceded by a +// length-determining label read from a separate `parentBuf`. +// It is used for types where each instance in the block is individually length-prefixed. +// `Out` is the target type of the values read. +type LabelBlockReader[Out any] struct { + CommonState // Embeds DataBuf and default AfterNewRead. + fromBytes FromBytesFunc[Out] // Function to convert raw bytes to Out type. + readNullTerminator bool // Flag indicating if a null terminator should be read after the data. +} + +// NewLabelBlockReader creates and returns a new LabelBlockReader. +// - dataBuf: The buffer from which the actual value data is read (corresponds to `this.buf` in some TS implementations). +// - fromBytes: A function to convert the raw bytes (read according to the label) into the target type `Out`. +// - readNullTerminator: If true, an extra null byte is read and discarded from `dataBuf` after reading the value's data (used for null-terminated strings). +func NewLabelBlockReader[Out any](dataBuf buf.Read, fromBytes FromBytesFunc[Out], readNullTerminator bool) *LabelBlockReader[Out] { + return &LabelBlockReader[Out]{ + CommonState: CommonState{DataBuf: dataBuf}, + fromBytes: fromBytes, + readNullTerminator: readNullTerminator, + } +} + +// Read decodes a single value. It first reads a label from `parentBuf` to determine the length +// of the data. Then, it reads that many bytes from its internal `DataBuf`, converts these bytes +// to the `Out` type using `fromBytes`, and optionally reads a null terminator. +// It returns the decoded value and an error if any step fails. +// This reader expects the label to indicate a length; it cannot handle backreferences, null, absent, or error labels directly. +func (r *LabelBlockReader[Out]) Read(parentBuf buf.Read) (Out, error) { + var zero Out // Zero value of Out to return on error + + l, err := label.Read(parentBuf) + if err != nil { + return zero, fmt.Errorf("LabelBlockReader: failed to read label from parentBuf: %w", err) + } + + switch l.Kind() { + case label.LabelKindBackreference: + return zero, fmt.Errorf("programmer error: LabelBlockReader: this type must not use backreferences (label: %s)", l) + case label.LabelKindLength: + lengthVal := l.Value().Int64() + if lengthVal < 0 { + // label.IsLength() implies non-negative, so this should be an internal inconsistency. + return zero, fmt.Errorf("programmer error: LabelBlockReader: negative length (%d) from label %s which has KindLength", lengthVal, l) + } + + if r.DataBuf == nil { + return zero, fmt.Errorf("programmer error: LabelBlockReader: DataBuf is nil") + } + + var bytesToRead []byte + if lengthVal == 0 { + bytesToRead = []byte{} // Empty slice for zero length + } else { + bytesToRead = make([]byte, int(lengthVal)) // Allocate slice for data + n, readErr := r.DataBuf.Read(bytesToRead) + if readErr != nil && readErr != io.EOF { // Any error other than EOF is immediately problematic + return zero, fmt.Errorf("LabelBlockReader: DataBuf.Read failed for %d bytes: %w", lengthVal, readErr) + } + // If EOF was encountered or no error, ensure all requested bytes were actually read. + if n != int(lengthVal) { + // This indicates a short read, which is an error here. + return zero, fmt.Errorf("LabelBlockReader: expected to read %d bytes from DataBuf, but read %d (read error: %v)", lengthVal, n, readErr) + } + } + + if r.readNullTerminator { + _, err := r.DataBuf.ReadByte() + if err != nil { + return zero, fmt.Errorf("LabelBlockReader: failed to read null terminator: %w", err) + } + } + + value := r.fromBytes(bytesToRead) + r.AfterNewRead() // Call the AfterNewRead hook (defined on CommonState by default) + return value, nil + case label.LabelKindNull: + return zero, fmt.Errorf("programmer error: LabelBlockReader: reader cannot handle null labels (label: %s)", l) + case label.LabelKindAbsent: + return zero, fmt.Errorf("programmer error: LabelBlockReader: reader cannot handle absent labels (label: %s)", l) + case label.LabelKindError: + return zero, fmt.Errorf("programmer error: LabelBlockReader: reader cannot handle error labels (label: %s)", l) + default: + return zero, fmt.Errorf("programmer error: LabelBlockReader: unhandled label kind %s (label: %s)", l.Kind(), l) + } +} + +// DeduplicatingLabelBlockReader is similar to LabelBlockReader but adds support for deduplication. +// It reads values from its `DataBuf` that are preceded by a label (read from `parentBuf`). +// This label can either specify the length of a new value or be a backreference to a previously read value. +// New values are stored internally to be targets for future backreferences. +// `Out` is the target type of the values read. +type DeduplicatingLabelBlockReader[Out any] struct { + CommonState // Embeds DataBuf and default AfterNewRead. + fromBytes FromBytesFunc[Out] // Function to convert raw bytes to Out type. + values []Out // Stores previously seen values for backreferencing. + readNullTerminator bool // Flag indicating if a null terminator should be read after new data. +} + +// NewDeduplicatingLabelBlockReader creates and returns a new DeduplicatingLabelBlockReader. +// - dataBuf: The buffer for reading actual value data. +// - fromBytes: Function to convert raw bytes to the `Out` type. +// - values: An initial slice of values; typically empty, will be populated as new unique values are read. +// - readNullTerminator: If true, an extra null byte is read from `dataBuf` after new string data. +func NewDeduplicatingLabelBlockReader[Out any](dataBuf buf.Read, fromBytes FromBytesFunc[Out], readNullTerminator bool) *DeduplicatingLabelBlockReader[Out] { + return &DeduplicatingLabelBlockReader[Out]{ + CommonState: CommonState{DataBuf: dataBuf}, + fromBytes: fromBytes, + values: make([]Out, 0), // Initialize empty slice for values + readNullTerminator: readNullTerminator, + } +} + +// Read decodes a single value, handling potential backreferences. +// It reads a label from `parentBuf`. If the label is a backreference, it returns the previously stored value. +// If the label indicates a length, it reads the data from `DataBuf`, converts it, stores it for future +// backreferences, and returns it. Optionally reads a null terminator for new string data. +// Returns the decoded value and an error if any step fails. +// This reader cannot handle null, absent, or error labels directly. +func (r *DeduplicatingLabelBlockReader[Out]) Read(parentBuf buf.Read) (Out, error) { + var zero Out + + l, err := label.Read(parentBuf) + if err != nil { + return zero, fmt.Errorf("DeduplicatingLabelBlockReader: failed to read label from parentBuf: %w", err) + } + + switch l.Kind() { + case label.LabelKindBackreference: + offset, offsetErr := l.ToOffset() // Converts label to backreference offset + if offsetErr != nil { + // l.ToOffset() already validates if it's a proper backreference kind. + return zero, fmt.Errorf("DeduplicatingLabelBlockReader: invalid backreference label %s: %w", l, offsetErr) + } + + idx := int(offset) + if idx < 0 || idx >= len(r.values) { + return zero, fmt.Errorf("DeduplicatingLabelBlockReader: invalid backreference offset %d (label: %s), current values count: %d", offset, l, len(r.values)) + } + // The TS `if (value == undefined)` check is implicitly handled by Go's slice indexing: + // if the index is valid, a value (possibly zero-value) exists. + value := r.values[idx] + return value, nil + + case label.LabelKindLength: + lengthVal := l.Value().Int64() + if lengthVal < 0 { + return zero, fmt.Errorf("programmer error: DeduplicatingLabelBlockReader: negative length (%d) from label %s which has KindLength", lengthVal, l) + } + + if r.DataBuf == nil { + return zero, fmt.Errorf("programmer error: DeduplicatingLabelBlockReader: DataBuf is nil") + } + + var bytesToRead []byte + if lengthVal == 0 { + bytesToRead = []byte{} + } else { + bytesToRead = make([]byte, int(lengthVal)) + n, readErr := r.DataBuf.Read(bytesToRead) + if readErr != nil && readErr != io.EOF { + return zero, fmt.Errorf("DeduplicatingLabelBlockReader: DataBuf.Read failed for %d bytes: %w", lengthVal, readErr) + } + if n != int(lengthVal) { + return zero, fmt.Errorf("DeduplicatingLabelBlockReader: expected to read %d bytes from DataBuf, but read %d (read error: %v)", lengthVal, n, readErr) + } + } + + if r.readNullTerminator { + nul, err := r.DataBuf.ReadByte() + if err != nil { + return zero, fmt.Errorf("DeduplicatingLabelBlockReader: failed to read null terminator: %w", err) + } + if nul != '\000' { + return zero, fmt.Errorf("DeduplicatingLabelBlockReader: null terminator was not null: %b", nul) + } + } + + value := r.fromBytes(bytesToRead) + r.values = append(r.values, value) // Store the new value for future backreferences + r.AfterNewRead() + return value, nil + + case label.LabelKindNull: + return zero, fmt.Errorf("programmer error: DeduplicatingLabelBlockReader: reader cannot handle null labels (label: %s)", l) + case label.LabelKindAbsent: + return zero, fmt.Errorf("programmer error: DeduplicatingLabelBlockReader: reader cannot handle absent labels (label: %s)", l) + case label.LabelKindError: + return zero, fmt.Errorf("programmer error: DeduplicatingLabelBlockReader: reader cannot handle error labels (label: %s)", l) + default: + return zero, fmt.Errorf("programmer error: DeduplicatingLabelBlockReader: unhandled label kind %s (label: %s)", l.Kind(), l) + } +} + +// FixedSizeBlockReader reads values of a predetermined fixed byte length from its `DataBuf`. +// It does not use labels from a `parentBuf` to determine length, as the length is constant. +// `Out` is the target type of the values read. +type FixedSizeBlockReader[Out any] struct { + CommonState // Embeds DataBuf. + fromBytes FromBytesFunc[Out] // Function to convert raw bytes to Out type. + ByteLength int // The fixed number of bytes for each value. +} + +// NewFixedSizeBlockReader creates and returns a new FixedSizeBlockReader. +// - dataBuf: The buffer from which fixed-size data chunks are read. +// - fromBytes: Function to convert the fixed-size byte chunks to the `Out` type. +// - byteLength: The exact number of bytes that constitutes one value. Must be non-negative, or it panics. +func NewFixedSizeBlockReader[Out any](dataBuf buf.Read, fromBytes FromBytesFunc[Out], byteLength int) *FixedSizeBlockReader[Out] { + if byteLength < 0 { + panic(fmt.Sprintf("FixedSizeBlockReader: byteLength cannot be negative, got %d", byteLength)) + } + return &FixedSizeBlockReader[Out]{ + CommonState: CommonState{DataBuf: dataBuf}, + fromBytes: fromBytes, + ByteLength: byteLength, + } +} + +// Read decodes a fixed-size block from r.DataBuf. +// parentBuf is ignored by this implementation but included in the signature to potentially +// match a common interface derived from the abstract BlockReader. +func (r *FixedSizeBlockReader[Out]) Read(parentBuf buf.Read) (Out, error) { + _ = parentBuf // Explicitly acknowledge and ignore parentBuf. + var zero Out + + if r.ByteLength < 0 { + // This state should ideally be prevented by constructor validation. + return zero, fmt.Errorf("FixedSizeBlockReader: invalid ByteLength %d", r.ByteLength) + } + if r.DataBuf == nil { + return zero, fmt.Errorf("programmer error: FixedSizeBlockReader: DataBuf is nil") + } + + var bytesToRead []byte + if r.ByteLength == 0 { + bytesToRead = []byte{} + } else { + bytesToRead = make([]byte, r.ByteLength) + n, readErr := r.DataBuf.Read(bytesToRead) + if readErr != nil && readErr != io.EOF { + return zero, fmt.Errorf("FixedSizeBlockReader: DataBuf.Read failed for %d bytes: %w", r.ByteLength, readErr) + } + if n != r.ByteLength { + return zero, fmt.Errorf("FixedSizeBlockReader: expected to read %d bytes from DataBuf, but read %d (read error: %v)", r.ByteLength, n, readErr) + } + } + + // The TS comment `// aligned reads` for `new Uint8Array(bytes, bytes.byteOffset, this.byteLength)` + // is generally not a direct concern for Go's `make([]byte, ...)` which provides a new slice. + value := r.fromBytes(bytesToRead) + // No AfterNewRead call in the original TS for this reader. + return value, nil +} + +// UnlabeledVarIntBlockReader reads varint-encoded integers directly from its `DataBuf`. +// It does not use labels from a `parentBuf` as varints are self-delimiting. +// This reader is specifically for `int64` values after ZigZag decoding. +type UnlabeledVarIntBlockReader struct { + CommonState // Embeds DataBuf. +} + +// NewUnlabeledVarIntBlockReader creates and returns a new UnlabeledVarIntBlockReader. +// - dataBuf: The buffer from which varint-encoded data is read. +func NewUnlabeledVarIntBlockReader(dataBuf buf.Read) *UnlabeledVarIntBlockReader { + return &UnlabeledVarIntBlockReader{ + CommonState: CommonState{DataBuf: dataBuf}, + } +} + +// Read decodes a single varint-encoded integer from `DataBuf` (ignoring `parentBuf`). +// It performs ZigZag decoding to convert the unsigned varint read from the buffer +// into a signed `int64`. +// Returns the decoded `int64` and an error if reading or decoding fails. +func (r *UnlabeledVarIntBlockReader) Read(parentBuf buf.Read) (int64, error) { + _ = parentBuf // Explicitly acknowledge and ignore parentBuf. + + if r.DataBuf == nil { + return 0, fmt.Errorf("programmer error: UnlabeledVarIntBlockReader: DataBuf is nil") + } + + l, err := label.Read(r.DataBuf) // Label (varint) read from r.DataBuf + if err != nil { + return 0, fmt.Errorf("UnlabeledVarIntBlockReader: failed to read label from DataBuf: %w", err) + } + + // TS: `Number(Label.read(this.buf))`. This implies getting the numerical value of the label. + // `l.Value()` returns a *big.Int. Convert to int64. + // `IsInt64()` checks if the value fits in int64 without loss. + if !l.Value().IsInt64() { + return 0, fmt.Errorf("UnlabeledVarIntBlockReader: label value '%s' cannot be represented as int64", l.Value().String()) + } + // No AfterNewRead call in the original TS for this reader. + return l.Value().Int64(), nil +} diff --git a/vendor/github.com/beeper/argo-go/block/blockwriter.go b/vendor/github.com/beeper/argo-go/block/blockwriter.go new file mode 100644 index 0000000000..e8635a47d4 --- /dev/null +++ b/vendor/github.com/beeper/argo-go/block/blockwriter.go @@ -0,0 +1,417 @@ +// Package block provides BlockWriter and DeduplicatingBlockWriter types for +// preparing Argo data blocks. These writers manage the conversion of values +// to their byte representations and the generation of corresponding labels, +// which are essential for the Argo binary format. +package block + +import ( + "fmt" + "math/big" + "reflect" // For robust nil checking in DeduplicatingBlockWriter + + "github.com/beeper/argo-go/label" + "github.com/beeper/argo-go/pkg/buf" + "github.com/elliotchance/orderedmap/v3" // Added for deterministic maps +) + +// MakeLabelFunc defines a function signature for creating a Label for a given input value +// and its byte representation. It returns a pointer to a label, or nil if no +// label should be generated. It can also return an error if label creation fails. +type MakeLabelFunc[In any] func(value In, data []byte) (l *label.Label, err error) + +// ValueToBytesFunc defines a function signature for converting an input value to its byte representation. +// It returns the byte data or an error if the conversion fails. +type ValueToBytesFunc[In any] func(value In) (data []byte, err error) + +// BlockWriter is responsible for converting input values of type `In` into their byte +// representations and generating corresponding labels using provided functions. +// It accumulates the byte representations internally. The actual writing of labels +// and byte data to output streams is typically handled by the caller. +type BlockWriter[In any] struct { + makeLabelFunc MakeLabelFunc[In] + valueToBytesFunc ValueToBytesFunc[In] + valuesAsBytes [][]byte // valuesAsBytes stores the byte representations of all values processed by the Write method. +} + +// NewBlockWriter creates and returns a new BlockWriter configured with the +// provided makeLabel and valueToBytes functions. +// If either function is nil, the Write method will subsequently fail. +func NewBlockWriter[In any]( + makeLabel MakeLabelFunc[In], + valueToBytes ValueToBytesFunc[In], +) *BlockWriter[In] { + // Note: Write methods will check for nil makeLabelFunc or valueToBytesFunc. + return &BlockWriter[In]{ + makeLabelFunc: makeLabel, + valueToBytesFunc: valueToBytes, + valuesAsBytes: make([][]byte, 0), + } +} + +// NewLengthOfBytesBlockWriter creates a BlockWriter that generates labels +// representing the length (in bytes) of each value's binary representation. +func NewLengthOfBytesBlockWriter[In any](valueToBytes ValueToBytesFunc[In]) *BlockWriter[In] { + makeLabel := func(v In, data []byte) (*label.Label, error) { + l := label.NewFromInt64(int64(len(data))) + return &l, nil + } + return NewBlockWriter(makeLabel, valueToBytes) +} + +// NewNoLabelBlockWriter creates a BlockWriter that does not generate any labels. +// Its makeLabelFunc will always return (nil, nil). +func NewNoLabelBlockWriter[In comparable](valueToBytes ValueToBytesFunc[In]) *BlockWriter[In] { + makeLabel := func(v In, data []byte) (*label.Label, error) { + return nil, nil + } + return NewBlockWriter(makeLabel, valueToBytes) +} + +// AfterNewWrite is a hook method called by Write after a new value's byte +// representation has been successfully generated and stored. +// Its default implementation is a no-op. +func (bw *BlockWriter[In]) AfterNewWrite() { + // Default no-op +} + +// Write converts the given value `v` to its byte representation using valueToBytesFunc, +// stores these bytes internally, and then generates a label using makeLabelFunc. +// It returns the generated label (or nil if no label is to be generated) and any +// error encountered during the process. This method calls AfterNewWrite after +// successfully storing the bytes. +func (bw *BlockWriter[In]) Write(v In) (*label.Label, error) { + if bw.valueToBytesFunc == nil { + return nil, fmt.Errorf("BlockWriter.Write: valueToBytesFunc is nil") + } + bytes, err := bw.valueToBytesFunc(v) + if err != nil { + return nil, fmt.Errorf("BlockWriter.Write: valueToBytesFunc failed: %w", err) + } + + bw.valuesAsBytes = append(bw.valuesAsBytes, bytes) + bw.AfterNewWrite() // Call hook after new bytes are stored. + + if bw.makeLabelFunc == nil { + return nil, fmt.Errorf("BlockWriter.Write: makeLabelFunc is nil") + } + l, err := bw.makeLabelFunc(v, bytes) + if err != nil { + return nil, fmt.Errorf("BlockWriter.Write: makeLabelFunc failed: %w", err) + } + return l, nil +} + +// WriteLastToBuf writes the byte representation of the most recently processed value +// to the provided buf.Write buffer. This method is primarily intended for scenarios +// like "noBlocks" mode where values are written directly. It does not remove the value +// from its internal store. For block construction, AllValuesAsBytes is typically used. +func (bw *BlockWriter[In]) WriteLastToBuf(buf buf.Write) error { + if len(bw.valuesAsBytes) == 0 { + return fmt.Errorf("BlockWriter.WriteLastToBuf: called on empty BlockWriter") + } + + lastValueIndex := len(bw.valuesAsBytes) - 1 + lastValueBytes := bw.valuesAsBytes[lastValueIndex] + // The value is not popped from bw.valuesAsBytes, to support modes like InlineEverything. + + // buf.Write(nil) is typically a no-op or writes 0 bytes. + _, err := buf.Write(lastValueBytes) + if err != nil { + // Note: The original value remains in valuesAsBytes even if this write fails. + // This behavior is simpler than attempting to revert internal state on write failure. + return fmt.Errorf("BlockWriter.WriteLastToBuf: buf.Write failed: %w", err) + } + return nil +} + +// AllValuesAsBytes returns a new slice containing all byte arrays accumulated by the BlockWriter. +// This is typically used when constructing a final value block from all processed items. +// The returned slice is a copy of the slice header, but the underlying byte arrays are shared. +func (bw *BlockWriter[In]) AllValuesAsBytes() [][]byte { + vals := make([][]byte, len(bw.valuesAsBytes)) + copy(vals, bw.valuesAsBytes) + return vals +} + +// DeduplicatingBlockWriter embeds BlockWriter and extends its functionality to support +// value deduplication. When a value is processed, if it has been seen before, a +// backreference label is returned. For new values, a unique ID is assigned (and used +// for future backreferences), and then a label is generated using its labelForNew function. +// The input type `In` must be comparable to be used as a key for tracking seen values. +type DeduplicatingBlockWriter[In comparable] struct { + // Embeds BlockWriter. The embedded `makeLabelFunc` is not used by DeduplicatingBlockWriter's `Write` method. + // `valueToBytesFunc`, `valuesAsBytes`, and `AfterNewWrite` are inherited and used. + BlockWriter[In] + + seen *orderedmap.OrderedMap[In, label.Label] // Stores seen values and their assigned backreference labels. + lastIDValue *big.Int // Stores the numeric value of the last assigned backreference ID. + labelForNew MakeLabelFunc[In] // Function to generate labels for new, non-backreferenced items. +} + +// NewDeduplicatingBlockWriter creates and returns a new DeduplicatingBlockWriter. +// It requires a `labelForNew` function (to generate labels for unique items) and +// a `valueToBytes` function (to convert values to bytes). +// Backreference IDs are initialized based on label.LowestReservedValue. +// If either function is nil, the Write method will subsequently fail. +func NewDeduplicatingBlockWriter[In comparable]( + labelForNew MakeLabelFunc[In], + valueToBytes ValueToBytesFunc[In], +) *DeduplicatingBlockWriter[In] { + // Note: Write methods will check for nil labelForNew or valueToBytesFunc. + initialIDVal := new(big.Int).Set(label.LowestReservedValue.Value()) + + return &DeduplicatingBlockWriter[In]{ + BlockWriter: BlockWriter[In]{ + valueToBytesFunc: valueToBytes, + valuesAsBytes: make([][]byte, 0), + // The embedded makeLabelFunc is not used by DeduplicatingBlockWriter's Write method; + // it could be set to nil, as DeduplicatingBlockWriter uses its own labelForNew. + makeLabelFunc: nil, + }, + seen: orderedmap.NewOrderedMap[In, label.Label](), + lastIDValue: initialIDVal, + labelForNew: labelForNew, + } +} + +// NewLengthOfBytesDeduplicatingBlockWriter creates a DeduplicatingBlockWriter +// where labels for new (non-duplicate) values are generated based on the length +// of their byte representation. +func NewLengthOfBytesDeduplicatingBlockWriter[In comparable]( + valueToBytes ValueToBytesFunc[In], +) *DeduplicatingBlockWriter[In] { + labelForNew := func(v In, data []byte) (*label.Label, error) { + l := label.NewFromInt64(int64(len(data))) + return &l, nil + } + return NewDeduplicatingBlockWriter[In](labelForNew, valueToBytes) +} + +// nextID generates and returns the next sequential backreference ID. +// IDs are generated by decrementing from label.LowestReservedValue. +func (dbw *DeduplicatingBlockWriter[In]) nextID() label.Label { + one := big.NewInt(1) + dbw.lastIDValue.Sub(dbw.lastIDValue, one) + idCopy := new(big.Int).Set(dbw.lastIDValue) // Use a copy for the new Label. + return label.New(idCopy) +} + +// labelForValue determines the appropriate label for a given value `v` *before* its byte conversion. +// It handles three cases: +// 1. If `v` is nil (checked robustly using reflection), it returns label.NullMarker. +// 2. If `v` has been seen before, it returns the stored backreference label. +// 3. If `v` is new and not nil, it assigns a new backreference ID, stores it with `v` in the seen map, +// and returns (nil, nil) to signal that the main Write method should proceed with byte conversion +// and new-item label generation via `labelForNew`. +func (dbw *DeduplicatingBlockWriter[In]) labelForValue(v In) (*label.Label, error) { + // Check if 'v' is a nil pointer or nil interface using reflection for robustness. + valOfV := reflect.ValueOf(v) + isConsideredNil := false + switch valOfV.Kind() { + case reflect.Ptr, reflect.Interface, reflect.Map, reflect.Slice, reflect.Chan, reflect.Func: + isConsideredNil = valOfV.IsNil() + } + + if isConsideredNil { + lm := label.NullMarker // label.NullMarker is a value, return its address. + return &lm, nil + } + + // Check if the non-nil value has been seen before. + if savedLabel, found := dbw.seen.Get(v); found { + return &savedLabel, nil // Return pointer to the copy of the stored label from Get. + } + + // Value is new and not nil. Assign a new ID and store it. + newID := dbw.nextID() + dbw.seen.Set(v, newID) + return nil, nil // Indicates it's new; Write method will continue processing. +} + +// Write processes the value `v` for the DeduplicatingBlockWriter. +// It first calls `labelForValue` to check if `v` is nil or a duplicate. +// - If `labelForValue` returns a non-nil label (NullMarker or backreference), Write returns that label immediately. +// - If `labelForValue` returns `(nil, nil)` (indicating `v` is new, non-nil, and has been assigned a new +// backreference ID in the `seen` map), Write then converts `v` to bytes, stores the bytes (appending to +// the embedded BlockWriter's `valuesAsBytes`), calls `AfterNewWrite`, and finally generates a label for this +// new item using `dbw.labelForNew`. +// +// This method effectively overrides the Write method of the embedded BlockWriter. +func (dbw *DeduplicatingBlockWriter[In]) Write(v In) (*label.Label, error) { + // Determine if 'v' is nil, a backreference, or new. + // labelForValue handles nil check, seen map lookup, and registers new items in seen map. + existingLabel, err := dbw.labelForValue(v) + if err != nil { + // This error typically indicates an internal issue within labelForValue. + return nil, fmt.Errorf("DeduplicatingBlockWriter.Write: labelForValue failed: %w", err) + } + + if existingLabel != nil { + // If existingLabel is not nil, it's either Label.NullMarker or a backreference. + return existingLabel, nil + } + + // If existingLabel is nil, 'v' is a new, non-nil value. + // It has already been added to dbw.seen with a new ID by labelForValue. + // Now, convert to bytes, store them, and generate the "new item" label. + if dbw.valueToBytesFunc == nil { + return nil, fmt.Errorf("DeduplicatingBlockWriter.Write: valueToBytesFunc is nil (from embedded BlockWriter)") + } + bytes, err := dbw.valueToBytesFunc(v) + if err != nil { + // If conversion to bytes fails, the ID was already assigned in `seen`. + // This order (ID assignment before byte conversion) is consistent with the reference + // implementation and is maintained here. + return nil, fmt.Errorf("DeduplicatingBlockWriter.Write: valueToBytesFunc failed: %w", err) + } + + // Use the inherited valuesAsBytes and AfterNewWrite + dbw.valuesAsBytes = append(dbw.valuesAsBytes, bytes) + dbw.AfterNewWrite() // Calls the AfterNewWrite method of the embedded BlockWriter. + + if dbw.labelForNew == nil { + return nil, fmt.Errorf("DeduplicatingBlockWriter.Write: labelForNew is nil") + } + finalLabel, err := dbw.labelForNew(v, bytes) + if err != nil { + return nil, fmt.Errorf("DeduplicatingBlockWriter.Write: labelForNew failed: %w", err) + } + // If `labelForNew` returns `(nil, nil)`, that's the equivalent of returning no label for the new item. + return finalLabel, nil +} + +// ToDeduplicating on a DeduplicatingBlockWriter returns the receiver `dbw` itself, +// as it's already a deduplicating writer. +func (dbw *DeduplicatingBlockWriter[In]) ToDeduplicating() *DeduplicatingBlockWriter[In] { + return dbw +} + +// ToDeduplicatingWriter is a package-level utility function that converts a given +// BlockWriter[In] to a DeduplicatingBlockWriter[In]. The type parameter `In` for +// the input BlockWriter must be `comparable`. +// It initializes the new DeduplicatingBlockWriter using the `makeLabelFunc` (as `labelForNew`) +// and `valueToBytesFunc` from the original BlockWriter. +func ToDeduplicatingWriter[In comparable]( + bw *BlockWriter[In], // The input BlockWriter's type parameter must be comparable. +) *DeduplicatingBlockWriter[In] { + // This conversion is type-safe because the Go compiler ensures that 'In' + // for 'bw' satisfies 'comparable' at the call site of this function. + // Thus, 'In' can be used for DeduplicatingBlockWriter's type parameter. + return NewDeduplicatingBlockWriter[In]( + bw.makeLabelFunc, // Use original BlockWriter's makeLabel as labelForNew. + bw.valueToBytesFunc, + ) +} + +// AnyBlockWriter defines an interface for block writers that accept `interface{}` (any) values. +// This allows for type-erased handling of block writing operations, useful in contexts +// where the specific type of values being written is not known at compile time or varies. +// Implementations typically wrap a generic BlockWriter[T] or DeduplicatingBlockWriter[T] +// and perform a type assertion before delegating to the underlying writer. +type AnyBlockWriter interface { + // Write processes a value `v` of any type. It attempts to assert `v` to the + // concrete type expected by the underlying block writer. If successful, it delegates + // to the underlying writer's Write method. It returns the generated label and any error. + Write(v interface{}) (*label.Label, error) + // AllValuesAsBytes returns all accumulated byte arrays from the underlying writer. + AllValuesAsBytes() [][]byte + // WriteLastToBuf writes the byte representation of the most recently processed value + // to the provided buffer, by delegating to the underlying writer. + WriteLastToBuf(buf buf.Write) error +} + +// --- Non-Deduplicating Adapter --- + +// nonDeduplicatingAdapter adapts a generic BlockWriter[T] to the AnyBlockWriter interface. +// The type parameter T can be any type. This adapter allows a type-specific BlockWriter +// to be used in contexts requiring an AnyBlockWriter. +type nonDeduplicatingAdapter[T any] struct { + coreWriter *BlockWriter[T] +} + +// Write attempts to assert the input `v` to type T and then calls the underlying coreWriter.Write. +// If the type assertion fails, it returns a type mismatch error. +func (a *nonDeduplicatingAdapter[T]) Write(v interface{}) (*label.Label, error) { + val, ok := v.(T) + if !ok { + // This error occurs if T is a concrete type and v is not assignable to it (e.g., T is string, v is int). + // If T is interface{}, this assertion will always succeed. + return nil, fmt.Errorf("type mismatch for block writer: value of type %T cannot be asserted to the writer's target type. Value: %v", v, v) + } + return a.coreWriter.Write(val) +} + +// AllValuesAsBytes delegates to the underlying coreWriter. +func (a *nonDeduplicatingAdapter[T]) AllValuesAsBytes() [][]byte { + return a.coreWriter.AllValuesAsBytes() +} + +// WriteLastToBuf delegates to the underlying coreWriter. +func (a *nonDeduplicatingAdapter[T]) WriteLastToBuf(buf buf.Write) error { + return a.coreWriter.WriteLastToBuf(buf) +} + +// NewAnyBlockWriter creates an AnyBlockWriter by wrapping a given generic BlockWriter[T]. +// This allows the specifically typed BlockWriter to be used through the type-erased AnyBlockWriter interface. +func NewAnyBlockWriter[T any](bw *BlockWriter[T]) AnyBlockWriter { + return &nonDeduplicatingAdapter[T]{coreWriter: bw} +} + +// --- Deduplicating Adapter --- + +// deduplicatingAdapter adapts a generic DeduplicatingBlockWriter[T] to the AnyBlockWriter interface. +// The type parameter T must be comparable for the underlying DeduplicatingBlockWriter. +// This adapter allows a type-specific, comparable DeduplicatingBlockWriter to be used as an AnyBlockWriter. +type deduplicatingAdapter[T comparable] struct { + coreWriter *DeduplicatingBlockWriter[T] +} + +// Write attempts to assert the input `v` to type T (which must be comparable) and then +// calls the underlying coreWriter.Write. If the type assertion fails, it returns a type mismatch error. +func (a *deduplicatingAdapter[T]) Write(v interface{}) (*label.Label, error) { + val, ok := v.(T) + if !ok { + var zeroT T // Used to get a string representation of type T for the error message. + return nil, fmt.Errorf("type mismatch for deduplicating block writer: expected %T, got %T for value %v", zeroT, v, v) + } + return a.coreWriter.Write(val) +} + +// AllValuesAsBytes delegates to the underlying coreWriter. +func (a *deduplicatingAdapter[T]) AllValuesAsBytes() [][]byte { + return a.coreWriter.AllValuesAsBytes() +} + +// WriteLastToBuf delegates to the underlying coreWriter. +func (a *deduplicatingAdapter[T]) WriteLastToBuf(buf buf.Write) error { + return a.coreWriter.WriteLastToBuf(buf) +} + +// NewAnyDeduplicatingBlockWriter creates an AnyBlockWriter by wrapping a given generic DeduplicatingBlockWriter[T]. +// The type T must be comparable. This allows the specifically typed DeduplicatingBlockWriter +// to be used through the type-erased AnyBlockWriter interface. +func NewAnyDeduplicatingBlockWriter[T comparable](dbw *DeduplicatingBlockWriter[T]) AnyBlockWriter { + return &deduplicatingAdapter[T]{coreWriter: dbw} +} + +// --- Specialized Constructors returning AnyBlockWriter --- + +// NewAnyNoLabelBlockWriter creates a BlockWriter specifically for `interface{}` values (T is interface{}) +// that generates no labels, and then wraps it as an AnyBlockWriter. +// This is a convenience constructor for a common use case. +func NewAnyNoLabelBlockWriter(valueToBytes ValueToBytesFunc[interface{}]) AnyBlockWriter { + // The underlying BlockWriter is instantiated with T as interface{}. + bw := NewNoLabelBlockWriter[interface{}](valueToBytes) + // This is then wrapped by the nonDeduplicatingAdapter, which also expects T as interface{}. + return NewAnyBlockWriter[interface{}](bw) +} + +// NewAnyLengthOfBytesBlockWriter creates a BlockWriter specifically for `interface{}` values (T is interface{}) +// that generates labels based on byte length, and then wraps it as an AnyBlockWriter. +// This is a convenience constructor for another common use case. +func NewAnyLengthOfBytesBlockWriter(valueToBytes ValueToBytesFunc[interface{}]) AnyBlockWriter { + // The underlying BlockWriter is instantiated with T as interface{}. + bw := NewLengthOfBytesBlockWriter[interface{}](valueToBytes) + // This is then wrapped by the nonDeduplicatingAdapter, which also expects T as interface{}. + return NewAnyBlockWriter[interface{}](bw) +} diff --git a/vendor/github.com/beeper/argo-go/codec/decoder.go b/vendor/github.com/beeper/argo-go/codec/decoder.go new file mode 100644 index 0000000000..e98916f221 --- /dev/null +++ b/vendor/github.com/beeper/argo-go/codec/decoder.go @@ -0,0 +1,652 @@ +// Package codec provides the tools for encoding and decoding Argo data. +// This file focuses on the ArgoDecoder, which is responsible for parsing +// Argo binary messages and reconstructing them into Go data structures, +// typically an ordered map representing a GraphQL ExecutionResult. +package codec + +import ( + "encoding/binary" + "fmt" + "io" + "math" + "strconv" + + "github.com/elliotchance/orderedmap/v3" + "github.com/vektah/gqlparser/v2/ast" + + "github.com/beeper/argo-go/block" + "github.com/beeper/argo-go/header" + "github.com/beeper/argo-go/internal/util" + "github.com/beeper/argo-go/label" + "github.com/beeper/argo-go/pkg/buf" + "github.com/beeper/argo-go/wire" +) + +// anyBlockReader defines an interface for a generic block reader. +// Implementations of this interface are responsible for reading a specific +// type of data (e.g., string, varint) from a block within an Argo message. +// The Read method takes the parent buffer (which might be the core message buffer +// or a buffer for a specific record/array context) and returns the decoded data +// as an interface{} value, along with any error encountered. +type anyBlockReader interface { + Read(parentBuf buf.Read) (interface{}, error) +} + +// argoError represents a structured error encountered during Argo decoding. +// It includes the path within the data structure where the error occurred, +// a descriptive message, and the byte position in the input buffer. +type argoError struct { + Path ast.Path + Msg string + Pos int64 +} + +// Error implements the error interface for argoError. +func (e *argoError) Error() string { + return fmt.Sprintf("Argo decoding error at path %s (pos %d): %s", util.FormatPath(e.Path), e.Pos, e.Msg) +} + +// newArgoError creates a new argoError with the given path, position, and formatted message. +func newArgoError(path ast.Path, pos int64, format string, args ...interface{}) error { + return &argoError{Path: path, Pos: pos, Msg: fmt.Errorf(format, args...).Error()} +} + +// ArgoDecoder decodes an Argo binary message into a Go data structure. +// It uses a MessageSlicer to access different parts of the Argo message (header, blocks, core) +// and maintains a map of block readers to efficiently decode block data. +type ArgoDecoder struct { + slicer *MessageSlicer + readers map[wire.BlockKey]anyBlockReader // Caches block readers by their key. +} + +// NewArgoDecoder creates and initializes a new ArgoDecoder. +// messageBuf should contain the entire Argo message to be decoded. +// It returns an error if the message slicer cannot be initialized (e.g., due to header read issues). +func NewArgoDecoder(messageBuf buf.Read) (*ArgoDecoder, error) { + slicer, err := NewMessageSlicer(messageBuf) + if err != nil { + return nil, fmt.Errorf("failed to initialize message slicer: %w", err) + } + return &ArgoDecoder{ + slicer: slicer, + readers: make(map[wire.BlockKey]anyBlockReader), + }, nil +} + +// ArgoToMap decodes the entire Argo message into an ordered map, which typically +// represents a GraphQL ExecutionResult. The wire.Type `wt` specifies the expected +// structure of the data. If the Argo message header indicates it is self-describing, +// the provided `wt` is overridden by `wire.Desc`. +func (ad *ArgoDecoder) ArgoToMap(wt wire.Type) (*orderedmap.OrderedMap[string, interface{}], error) { + finalWt := wt + + if _, wantDesc := wt.(wire.DescType); wantDesc && ad.slicer.Header().GetFlag(header.HeaderSelfDescribingFlag) { + finalWt = wire.Desc + } + + if p, ok := ad.slicer.Core().(buf.BufPosition); ok { + p.SetPosition(0) + } + result, err := ad.readArgo(ad.slicer.Core(), nil, finalWt, nil) + if err != nil { + return nil, err + } + if m, ok := result.(*orderedmap.OrderedMap[string, interface{}]); ok { + return m, nil + } + return nil, fmt.Errorf("decoded result is not an ordered map, got %T", result) +} + +func (ad *ArgoDecoder) readArgo(b buf.Read, currentPath ast.Path, wt wire.Type, currentBlock *wire.BlockType) (interface{}, error) { + switch typedWt := wt.(type) { + case wire.BlockType: + trackVal := orderedmap.NewOrderedMap[string, interface{}]() + trackVal.Set("key", typedWt.Key) + trackVal.Set("dedupe", typedWt.Dedupe) + return ad.readArgo(b, currentPath, typedWt.Of, &typedWt) + + case wire.NullableType: + peekBytes, err := b.Peek(1) + if err != nil { + if err == io.EOF { // EOF here means the buffer ended before a nullable marker could be read. + return nil, newArgoError(currentPath, b.Position(), "unexpected EOF while peeking for nullable type marker") + } + return nil, newArgoError(currentPath, b.Position(), "failed to peek for nullable type marker: %w", err) + } + peekLabelByte := peekBytes[0] + + if peekLabelByte == label.Null[0] { // Compare the first byte of the pre-encoded Null label. + _, _ = b.ReadByte() // Consume the null label byte. + return nil, nil + } + if peekLabelByte == label.Absent[0] { // Compare the first byte of the pre-encoded Absent label. + _, _ = b.ReadByte() // Consume the absent label byte. + return wire.AbsentValue, nil // Return a special marker for absent, to be handled by RECORD logic. + } + if peekLabelByte == label.Error[0] { // Compare the first byte of the pre-encoded Error label. + _, _ = b.ReadByte() // Consume the error label byte. + + lengthLabel, err := label.Read(b) + if err != nil { + return nil, newArgoError(currentPath, b.Position(), "failed to read error array length: %w", err) + } + length := int(lengthLabel.Value().Int64()) + if length < 0 { + return nil, newArgoError(currentPath, b.Position(), "invalid negative error array length: %d", length) + } + + // Argo Spec: Field errors propagate to the nearest nullable field. + // The errors are then written. The `path` field in these errors is relative. + // "implementations should make full path easily available to users." + // The spec also says: "return null // simple for compatibility, but up to implementations what to do with inline errors" + // We collect the errors and then return nil for the field value itself, as per spec. + // The collected `errors` are not directly returned by this function but could be logged + // or otherwise handled by the calling application if needed. + errors := make([]interface{}, length) + for i := 0; i < length; i++ { + var errItem interface{} + errPath := util.AddPathIndex(currentPath, i) + if ad.slicer.Header().GetFlag(header.HeaderSelfDescribingErrorsFlag) { + errItem, err = ad.readSelfDescribing(b, errPath) + } else { + errItem, err = ad.readArgo(b, errPath, wire.Error, nil) // currentBlock is nil for Error type + } + if err != nil { + return nil, newArgoError(errPath, b.Position(), "failed to read error item %d: %w", i, err) + } + errors[i] = errItem + } + // The value of the field is null when there's an inline error. + // The collected `errors` array here is for potential side-channel processing (e.g. logging) + // but is not part of the main decoded result for this field. + return nil, nil + } + + if !wire.IsLabeled(typedWt.Of) { + // For non-labeled types within a Nullable, expect a NonNullMarker (value 0) if not null/absent/error. + marker, err := label.Read(b) + if err != nil { + return nil, newArgoError(currentPath, b.Position(), "failed to read non-null marker: %w", err) + } + if !label.NonNullMarker.Is(marker) { + return nil, newArgoError(currentPath, b.Position(), + "invalid non-null marker %s for %s. Path: %s, Pos: %d", + marker.Value().String(), wire.Print(wt), util.FormatPath(currentPath), b.Position()) + } + } + // If labeled, no non-null marker is read here; the underlying type's label reading handles it. + // Proceed to read the actual underlying type. + return ad.readArgo(b, currentPath, typedWt.Of, currentBlock) + + case wire.RecordType: + obj := orderedmap.NewOrderedMapWithCapacity[string, interface{}](len(typedWt.Fields)) + + for _, field := range typedWt.Fields { + fieldPath := util.AddPathName(currentPath, field.Name) + + var fieldValue interface{} + var err error + + if field.Omittable { + peekBytes, errPeek := b.Peek(1) + if errPeek != nil { + return nil, newArgoError(fieldPath, b.Position(), "failed to peek for omittable field %s: %w", field.Name, errPeek) + } + labelPeekByte := peekBytes[0] + + // Regarding Error labels for omittable fields: + // The Argo spec states: "Nullable fields are the only valid location for Field errors". + // If field.Of is Nullable, the wire.NullableType case in this function will handle any Error labels. + // If field.Of is not Nullable, an Error label should not appear here according to the spec. + // The reference JS implementation's check for `labelPeek == Label.Error[0]` in this context + // might be for a slightly different interpretation or an older version of the spec. + // This Go implementation adheres to "Error labels only on Nullable". + + if !wire.IsLabeled(field.Of) && labelPeekByte == label.NonNull[0] { + _, _ = b.ReadByte() // Consume non-null marker. + fieldValue, err = ad.readArgo(b, fieldPath, field.Of, currentBlock) + } else if labelPeekByte == label.Absent[0] { + _, _ = b.ReadByte() // Consume absent marker. + fieldValue = wire.AbsentValue + } else { + // Neither NonNull (for unlabeled types) nor Absent. + // Proceed to read normally: + // - If field.Of is labeled, its own label will be read by the recursive call. + // - If field.Of is unlabeled (and we didn't see a NonNull marker), it's a direct value. + fieldValue, err = ad.readArgo(b, fieldPath, field.Of, currentBlock) + } + } else { // Not omittable. + fieldValue, err = ad.readArgo(b, fieldPath, field.Of, currentBlock) + } + + if err != nil { + return nil, err // Error already contextualized by recursive call + } + + if fieldValue != wire.AbsentValue { + obj.Set(field.Name, fieldValue) + } + } + return obj, nil + + case wire.ArrayType: + lengthLabel, err := label.Read(b) + if err != nil { + return nil, newArgoError(currentPath, b.Position(), "failed to read array length: %w", err) + } + length := int(lengthLabel.Value().Int64()) + if length < 0 { + return nil, newArgoError(currentPath, b.Position(), "invalid negative array length: %d", length) + } + + arr := make([]interface{}, length) // This is a slice, not a map. + for i := 0; i < length; i++ { + itemPath := util.AddPathIndex(currentPath, i) + item, err := ad.readArgo(b, itemPath, typedWt.Of, currentBlock) + if err != nil { + return nil, newArgoError(itemPath, b.Position(), "failed to read array item %d: %w", i, err) + } + if item == wire.AbsentValue { + // JSON arrays don't have "absent" elements, they'd be null. + // For now, treat absent as null in an array. + arr[i] = nil + } else { + arr[i] = item + } + } + return arr, nil + + case wire.BooleanType: + l, err := label.Read(b) + if err != nil { + return nil, newArgoError(currentPath, b.Position(), "failed to read boolean label: %w", err) + } + if label.FalseMarker.Is(l) { + return false, nil + } + if label.TrueMarker.Is(l) { + return true, nil + } + return nil, newArgoError(currentPath, b.Position(), "invalid boolean label %s", l.Value().String()) + + case wire.StringType, wire.BytesType, wire.VarintType, wire.Float64Type, wire.FixedType: + if currentBlock == nil { + return nil, newArgoError(currentPath, b.Position(), "programmer error: need block for %s", wire.Print(wt)) + } + reader, err := ad.getBlockReader(*currentBlock, wt) + if err != nil { + return nil, newArgoError(currentPath, b.Position(), "failed to get block reader for %s (key %s): %w", wire.Print(wt), currentBlock.Key, err) + } + value, err := reader.Read(b) // `b` is the parent buffer (core or record/array context) + if err != nil { + return nil, newArgoError(currentPath, b.Position(), "block reader failed for %s (key %s): %w", wire.Print(wt), currentBlock.Key, err) + } + + return value, nil + + case wire.DescType: + return ad.readSelfDescribing(b, currentPath) + + case wire.PathType: // Path type is usually part of Error structure. + // Decoding a raw PATH here would mean reading an ARRAY of VARINT. + // This is essentially ArrayType{Of: Varint} + return ad.readArgo(b, currentPath, wire.ArrayType{Of: wire.Varint}, currentBlock) + + default: + return nil, newArgoError(currentPath, b.Position(), "unsupported wire type %T: %s", wt, wire.Print(wt)) + } +} + +func (ad *ArgoDecoder) readSelfDescribing(b buf.Read, currentPath ast.Path) (interface{}, error) { + typeMarkerLabel, err := label.Read(b) + if err != nil { + return nil, newArgoError(currentPath, b.Position(), "failed to read self-describing type marker: %w", err) + } + + switch { + case wire.SelfDescribingTypeMarkerNull.Is(typeMarkerLabel): + return nil, nil + case wire.SelfDescribingTypeMarkerFalse.Is(typeMarkerLabel): + return false, nil + case wire.SelfDescribingTypeMarkerTrue.Is(typeMarkerLabel): + return true, nil + case wire.SelfDescribingTypeMarkerObject.Is(typeMarkerLabel): + lengthLabel, err := label.Read(b) + if err != nil { + return nil, newArgoError(currentPath, b.Position(), "failed to read self-describing object length: %w", err) + } + length := int(lengthLabel.Value().Int64()) + if length < 0 { + return nil, newArgoError(currentPath, b.Position(), "invalid negative self-describing object length: %d", length) + } + obj := orderedmap.NewOrderedMapWithCapacity[string, interface{}](length) + + for i := 0; i < length; i++ { + // Field name is a string, using the self-describing string block + fieldNamePath := util.AddPathName(currentPath, strconv.Itoa(i)+"_key") // Path for the key itself + + // Construct the String BlockType for self-describing field names + stringBlockKey := wire.BlockKey("String") + stringElementType, ok := wire.SelfDescribingBlocks[stringBlockKey] + if !ok { + return nil, newArgoError(fieldNamePath, b.Position(), "self-describing string block key not found in map") + } + selfDescribingStringBlock := wire.NewBlockType(stringElementType, stringBlockKey, wire.MustDeduplicateByDefault(stringElementType)) + + fieldNameVal, err := ad.readArgo(b, fieldNamePath, wire.String, &selfDescribingStringBlock) + if err != nil { + return nil, newArgoError(fieldNamePath, b.Position(), "failed to read self-describing object field name %d: %w", i, err) + } + fieldName, ok := fieldNameVal.(string) + if !ok { + return nil, newArgoError(fieldNamePath, b.Position(), "self-describing object field name %d is not a string", i) + } + + // Field value is recursively self-describing + fieldValuePath := util.AddPathName(currentPath, fieldName) // Path for the value + value, err := ad.readSelfDescribing(b, fieldValuePath) + if err != nil { + return nil, newArgoError(fieldValuePath, b.Position(), "failed to read self-describing object field value for '%s': %w", fieldName, err) + } + obj.Set(fieldName, value) + } + return obj, nil + + case wire.SelfDescribingTypeMarkerList.Is(typeMarkerLabel): + lengthLabel, err := label.Read(b) + if err != nil { + return nil, newArgoError(currentPath, b.Position(), "failed to read self-describing list length: %w", err) + } + length := int(lengthLabel.Value().Int64()) + if length < 0 { + return nil, newArgoError(currentPath, b.Position(), "invalid negative self-describing list length: %d", length) + } + + list := make([]interface{}, length) // This is a slice, not a map. + for i := 0; i < length; i++ { + itemPath := util.AddPathIndex(currentPath, i) + item, err := ad.readSelfDescribing(b, itemPath) + if err != nil { + return nil, newArgoError(itemPath, b.Position(), "failed to read self-describing list item %d: %w", i, err) + } + list[i] = item + } + return list, nil + + case wire.SelfDescribingTypeMarkerString.Is(typeMarkerLabel): + stringBlockKey := wire.BlockKey("String") + stringElementType, ok := wire.SelfDescribingBlocks[stringBlockKey] + if !ok { + return nil, newArgoError(currentPath, b.Position(), "self-describing string block key not found in map") + } + selfDescribingStringBlock := wire.NewBlockType(stringElementType, stringBlockKey, wire.MustDeduplicateByDefault(stringElementType)) + return ad.readArgo(b, currentPath, wire.String, &selfDescribingStringBlock) + case wire.SelfDescribingTypeMarkerBytes.Is(typeMarkerLabel): + bytesBlockKey := wire.BlockKey("Bytes") + bytesElementType, ok := wire.SelfDescribingBlocks[bytesBlockKey] + if !ok { + return nil, newArgoError(currentPath, b.Position(), "self-describing bytes block key not found in map") + } + selfDescribingBytesBlock := wire.NewBlockType(bytesElementType, bytesBlockKey, wire.MustDeduplicateByDefault(bytesElementType)) + return ad.readArgo(b, currentPath, wire.Bytes, &selfDescribingBytesBlock) + case wire.SelfDescribingTypeMarkerInt.Is(typeMarkerLabel): + varintBlockKey := wire.BlockKey("Int") // As defined in wire/wire.go init for VarintBlock + varintElementType, ok := wire.SelfDescribingBlocks[varintBlockKey] + if !ok { + return nil, newArgoError(currentPath, b.Position(), "self-describing varint block key ('Int') not found in map") + } + selfDescribingVarintBlock := wire.NewBlockType(varintElementType, varintBlockKey, wire.MustDeduplicateByDefault(varintElementType)) + return ad.readArgo(b, currentPath, wire.Varint, &selfDescribingVarintBlock) + case wire.SelfDescribingTypeMarkerFloat.Is(typeMarkerLabel): + // The reference JS implementation uses "Float" as the key for self-describing float blocks. + // Ensure wire.SelfDescribingBlocks is populated with this key if this path is taken. + // Currently, wire.go's init for SelfDescribingBlocks does not include a "Float" block. + // This might indicate a mismatch or an untested path. + // For now, we assume "Float" is the intended key. + floatBlockKey := wire.BlockKey("Float") + floatElementType, ok := wire.SelfDescribingBlocks[floatBlockKey] + if !ok { + // Let's add a more specific error, and check wire.go's SelfDescribingBlocks initialization. + return nil, newArgoError(currentPath, b.Position(), "self-describing float block key ('Float') not found in wire.SelfDescribingBlocks map. Check wire.go.") + } + selfDescribingFloatBlock := wire.NewBlockType(floatElementType, floatBlockKey, wire.MustDeduplicateByDefault(floatElementType)) + return ad.readArgo(b, currentPath, wire.Float64, &selfDescribingFloatBlock) + default: + return nil, newArgoError(currentPath, b.Position(), "invalid self-describing type marker: %s", typeMarkerLabel.Value().String()) + } +} + +// getBlockReader retrieves or creates and caches a block reader for a given block definition. +func (ad *ArgoDecoder) getBlockReader(blockDef wire.BlockType, valueWireType wire.Type) (anyBlockReader, error) { + if reader, found := ad.readers[blockDef.Key]; found { + return reader, nil + } + reader, err := ad.makeBlockReader(valueWireType, blockDef.Dedupe, blockDef.Key) + if err != nil { + return nil, err + } + ad.readers[blockDef.Key] = reader + return reader, nil +} + +// and handles type-specific post-processing. +type genericBlockReaderWrapper struct { + // coreRead is the underlying block-specific read function. + // It's typically a method from a block.Reader implementation (e.g., block.LabelBlockReader.Read). + coreRead func(parentBuf buf.Read) (interface{}, error) + // blockDataBuffer is the buffer specific to this block's data. + // It's used by some block readers that need to manage their own data consumption + // (e.g., for null termination checks, though this is now handled internally by block readers). + blockDataBuffer buf.Read +} + +func (g *genericBlockReaderWrapper) Read(parentBuf buf.Read) (interface{}, error) { + val, err := g.coreRead(parentBuf) + if err != nil { + return nil, err + } + // Null termination for strings is handled by the underlying block.Reader implementations + // (e.g., LabelBlockReader) themselves, so no additional logic is needed here. + return val, nil +} + +// makeBlockReader creates a new block reader (wrapped by genericBlockReaderWrapper) +// based on the value's wire type, deduplication flag, and block key. +// It sources the block's data buffer from the MessageSlicer. +func (ad *ArgoDecoder) makeBlockReader(valueWireType wire.Type, dedupe bool, key wire.BlockKey) (anyBlockReader, error) { + // Each new block type gets its own data buffer from the slicer, + // unless HeaderInlineEverythingFlag is set, in which case all readers use the core buffer. + blockDataForReader := ad.slicer.NextBlock() + if blockDataForReader == nil { + // This occurs if slicer.NextBlock() returns nil, meaning no more distinct blocks + // are available from the message segments. + if !ad.slicer.Header().GetFlag(header.HeaderInlineEverythingFlag) { + return nil, fmt.Errorf("no more blocks available in slicer for key %s; schema may expect more blocks than provided in message", key) + } + // If HeaderInlineEverythingFlag is true, all "block" data is part of the core buffer. + // The slicer.NextBlock() will return the coreBuffer in this mode. + // If it's still nil here, it means slicer.Core() itself is nil, which is unexpected. + // However, current slicer.NextBlock() logic should return slicer.Core() if the flag is set. + // Re-assign for clarity if HeaderInlineEverythingFlag is set and NextBlock() somehow wasn't core. + blockDataForReader = ad.slicer.Core() + if blockDataForReader == nil { + // This would be a critical issue with slicer initialization or logic. + return nil, fmt.Errorf("internal error: core buffer is nil in inline-everything mode for key %s", key) + } + } + + var coreReadFunc func(parentBuf buf.Read) (interface{}, error) + shouldReadNullTerminator := false + + switch t := valueWireType.(type) { + case wire.StringType: + shouldReadNullTerminator = ad.slicer.Header().GetFlag(header.HeaderNullTerminatedStringsFlag) + fromBytes := func(b []byte) string { return string(b) } + if dedupe { + r := block.NewDeduplicatingLabelBlockReader[string](blockDataForReader, fromBytes, shouldReadNullTerminator) + coreReadFunc = func(pbuf buf.Read) (interface{}, error) { return r.Read(pbuf) } + } else { + r := block.NewLabelBlockReader[string](blockDataForReader, fromBytes, shouldReadNullTerminator) + coreReadFunc = func(pbuf buf.Read) (interface{}, error) { return r.Read(pbuf) } + } + case wire.BytesType: + fromBytes := func(b []byte) []byte { return b } // No copy, direct use + if dedupe { + // BytesType never has null termination, so pass false + r := block.NewDeduplicatingLabelBlockReader[[]byte](blockDataForReader, fromBytes, false) + coreReadFunc = func(pbuf buf.Read) (interface{}, error) { return r.Read(pbuf) } + } else { + // BytesType never has null termination, so pass false + r := block.NewLabelBlockReader[[]byte](blockDataForReader, fromBytes, false) + coreReadFunc = func(pbuf buf.Read) (interface{}, error) { return r.Read(pbuf) } + } + case wire.VarintType: + // Deduping VARINT not typically done this way via LabelBlockReader. + if dedupe { + return nil, fmt.Errorf("unimplemented: deduping VARINT with LabelBlockReader for key %s", key) + } + // UnlabeledVarIntBlockReader reads varint directly from its data buffer (blockDataForReader). + // The parentBuf (core context) is not used by its Read method for label. + r := block.NewUnlabeledVarIntBlockReader(blockDataForReader) + coreReadFunc = func(pbuf buf.Read) (interface{}, error) { return r.Read(pbuf) } + case wire.Float64Type: + if dedupe { + return nil, fmt.Errorf("unimplemented: deduping FLOAT64 for key %s", key) + } + // FixedSizeBlockReader for FLOAT64 reads from its data buffer. No label in parentBuf. + fromBytes := func(b []byte) float64 { return math.Float64frombits(binary.LittleEndian.Uint64(b)) } + r := block.NewFixedSizeBlockReader[float64](blockDataForReader, fromBytes, 8) // Float64 is 8 bytes + coreReadFunc = func(pbuf buf.Read) (interface{}, error) { return r.Read(pbuf) } + + case wire.FixedType: + if dedupe { + return nil, fmt.Errorf("unimplemented: deduping FIXED for key %s", key) + } + // FixedSizeBlockReader for FIXED reads from its data buffer. No label in parentBuf. + fromBytes := func(b []byte) []byte { return b } + r := block.NewFixedSizeBlockReader[[]byte](blockDataForReader, fromBytes, t.Length) + coreReadFunc = func(pbuf buf.Read) (interface{}, error) { return r.Read(pbuf) } + default: + return nil, fmt.Errorf("unsupported block value type %s for key %s", wire.Print(valueWireType), key) + } + + return &genericBlockReaderWrapper{ + coreRead: coreReadFunc, + blockDataBuffer: blockDataForReader, + }, nil +} + +// MessageSlicer is responsible for parsing an Argo message into its constituent parts: +// the header, data blocks (if any), and the core data. +// It provides buffered views (buf.Read) into these parts without copying the underlying message data. +type MessageSlicer struct { + hdr *header.Header + coreBuffer buf.Read + allSegments [][]byte // Stores all byte slices: data blocks first, then the core data as the last segment. + nextBlockIndex int // Tracks the next data block to be vended by NextBlock(). +} + +// NewMessageSlicer creates a MessageSlicer from a buffer containing the entire Argo message. +// It reads the header and then parses out the block segments and the final core data segment +// based on length prefixes, unless the HeaderInlineEverythingFlag is set. +func NewMessageSlicer(fullMessageBuf buf.Read) (*MessageSlicer, error) { + s := &MessageSlicer{} + + s.hdr = header.NewHeader() + if err := s.hdr.Read(fullMessageBuf); err != nil { + return nil, fmt.Errorf("failed to read header: %w", err) + } + + if s.hdr.GetFlag(header.HeaderInlineEverythingFlag) { + // The rest of the buffer is the core. There are no separate blocks. + remainingBytes := make([]byte, fullMessageBuf.Len()-int(fullMessageBuf.Position())) + _, err := io.ReadFull(fullMessageBuf, remainingBytes) + if err != nil { + return nil, fmt.Errorf("failed to read inline core data: %w", err) + } + s.allSegments = [][]byte{remainingBytes} + s.coreBuffer = buf.NewBufReadonly(remainingBytes) + + } else { + // Read all length-prefixed segments. The last one is the core. + var segments [][]byte + // fullMessageBuf is now positioned after the header. + for fullMessageBuf.Position() < int64(fullMessageBuf.Len()) { + lengthLabel, err := label.Read(fullMessageBuf) + if err != nil { + // If EOF and we expected more segments, or segments is empty, it's an error. + if err == io.EOF && len(segments) > 0 { // EOF after reading some blocks, means core might be missing length + return nil, fmt.Errorf("unexpected EOF after reading %d blocks, expecting core: %w", len(segments), err) + } + return nil, fmt.Errorf("failed to read segment length label: %w", err) + } + + blockLengthVal := lengthLabel.Value().Int64() + if blockLengthVal < 0 { + return nil, fmt.Errorf("invalid negative segment length: %d", blockLengthVal) + } + blockLength := int(blockLengthVal) + + if fullMessageBuf.Position()+int64(blockLength) > int64(fullMessageBuf.Len()) { + return nil, fmt.Errorf("segment length %d exceeds remaining buffer size %d", blockLength, int64(fullMessageBuf.Len())-fullMessageBuf.Position()) + } + + segmentBytes := make([]byte, blockLength) + n, err := io.ReadFull(fullMessageBuf, segmentBytes) + if err != nil { + return nil, fmt.Errorf("failed to read segment data (expected %d, got %d): %w", blockLength, n, err) + } + segments = append(segments, segmentBytes) + } + + if len(segments) == 0 { + // This implies header was read, but no blocks and no core followed. + // The spec implies at least a core (even if empty) prefixed by its length. + return nil, fmt.Errorf("no blocks or core data found after header") + } + s.allSegments = segments + s.coreBuffer = buf.NewBufReadonly(s.allSegments[len(s.allSegments)-1]) + } + + return s, nil +} + +// Header returns the parsed message header. +func (s *MessageSlicer) Header() *header.Header { + return s.hdr +} + +// Core returns a read buffer for the core data part of the message. +// This buffer contains the main payload after all block definitions. +func (s *MessageSlicer) Core() buf.Read { + return s.coreBuffer +} + +// NextBlock returns a read buffer for the next data block in the message. +// If the HeaderInlineEverythingFlag is set in the header, this method +// will repeatedly return the coreBuffer, as all data is considered inline. +// Otherwise, it iterates through the pre-parsed data block segments. +// It returns nil if all data blocks have been vended or if in inline mode +// and no more distinct blocks were expected by the schema logic. +func (s *MessageSlicer) NextBlock() buf.Read { + if s.hdr.GetFlag(header.HeaderInlineEverythingFlag) { + // In inline mode, the "block" is the core itself. + // The same coreBuffer instance is returned. Reads from this buffer + // will advance its position, which is the expected behavior for inline scalar values. + return s.coreBuffer + } + + // Not inlineEverything: vend distinct block segments from allSegments. + // allSegments contains data blocks followed by the core data as the last element. + // We only vend actual data blocks here (i.e., segments before the final core segment). + if s.nextBlockIndex < len(s.allSegments)-1 { + blockData := s.allSegments[s.nextBlockIndex] + s.nextBlockIndex++ + return buf.NewBufReadonly(blockData) + } + + // All distinct data blocks have been vended. + // Subsequent calls for new block types (if the schema expects more than were in the message) + // will receive nil. + return nil +} diff --git a/vendor/github.com/beeper/argo-go/codec/encoder.go b/vendor/github.com/beeper/argo-go/codec/encoder.go new file mode 100644 index 0000000000..d86f2418ba --- /dev/null +++ b/vendor/github.com/beeper/argo-go/codec/encoder.go @@ -0,0 +1,985 @@ +package codec + +import ( + "encoding/binary" + "encoding/json" + "fmt" + "math" + "math/big" + "os" + "reflect" + "sort" + + "github.com/beeper/argo-go/block" + "github.com/beeper/argo-go/header" + "github.com/beeper/argo-go/internal/util" + "github.com/beeper/argo-go/label" + "github.com/beeper/argo-go/pkg/buf" + "github.com/beeper/argo-go/pkg/varint" + "github.com/beeper/argo-go/wire" + "github.com/elliotchance/orderedmap/v3" + "github.com/vektah/gqlparser/v2/ast" +) + +// writerEntry stores an association between a block.AnyBlockWriter and the +// original wire.Type of the values it's intended to write. This is important for +// type-specific operations, such as determining if null termination is needed for string blocks. +type writerEntry struct { + Writer block.AnyBlockWriter // The type-erased block writer instance. + OriginalValueType wire.Type // The original wire type this writer was created for (e.g., wire.String, wire.Bytes). +} + +// ArgoEncoder handles the conversion of Go data structures, typically representing +// GraphQL query results, into the Argo binary message format. It manages a core +// buffer for labels and inline data, a collection of block writers for scalar +// values that are not inlined, and an Argo header. +// The encoder supports various Argo features like deduplication, different block types, +// and self-describing values, controlled by header flags and wire type definitions. +type ArgoEncoder struct { + coreBuf *buf.Buf // Buffer for the core message data, primarily labels and inlined scalar values. + // writers stores block writers, keyed by their wire.BlockKey. Each entry contains the + // AnyBlockWriter and the original wire.Type for which it was created. + writers *orderedmap.OrderedMap[wire.BlockKey, writerEntry] + header *header.Header // The Argo header for the message being encoded. + + // Debug fields, used when ArgoEncoder.Debug is true. + Debug bool // If true, enables tracking of encoding steps. + // tracked stores a log of encoding operations when Debug is true. + // Each entry is an ordered map representing a single tracked step. + tracked []*orderedmap.OrderedMap[string, interface{}] +} + +// NewArgoEncoder initializes and returns a new ArgoEncoder. +// It sets up the core buffer, the map for block writers, and a new Argo header. +func NewArgoEncoder() *ArgoEncoder { + // Initial capacity for coreBuf; it will grow as needed. + // The final message buffer is constructed in GetResult by combining the header, + // block data (if not inlined), and the core buffer contents. + coreBuffer := buf.NewBuf(1024) // Default initial capacity. + hdr := header.NewHeader() + + return &ArgoEncoder{ + coreBuf: coreBuffer, + writers: orderedmap.NewOrderedMap[wire.BlockKey, writerEntry](), + header: hdr, + tracked: []*orderedmap.OrderedMap[string, interface{}]{}, // Initialize an empty slice for tracking. + } +} + +// Header returns the encoder's *header.Header instance, allowing the caller +// to set Argo header flags or other header properties before finalizing the message. +func (ae *ArgoEncoder) Header() *header.Header { + return ae.header +} + +// Track records an encoding step for debugging purposes if ae.Debug is true. +// It captures the GraphQL path, a descriptive message, the current buffer (if any), +// and the value being processed. +func (ae *ArgoEncoder) Track(path ast.Path, msg string, b buf.Write, value interface{}) { + if ae.Debug { + entry := orderedmap.NewOrderedMap[string, interface{}]() + entry.Set("path", util.FormatPath(path)) + entry.Set("msg", msg) + if b != nil { // Buffer might be nil for some tracking events (e.g., header bytes) + entry.Set("pos", b.Position()) + } else { + entry.Set("pos", -1) // Indicate no buffer position + } + + // Avoid deep copying complex values or handle them carefully + if s, ok := value.(string); ok && len(s) > 100 { + entry.Set("value", s[:100]+"...") + } else if b, ok := value.([]byte); ok && len(b) > 100 { + entry.Set("value", fmt.Sprintf("bytes[%d]", len(b))) + } else { + entry.Set("value", value) + } + ae.tracked = append(ae.tracked, entry) + } +} + +// Log provides a more generic logging mechanism for debugging, used when ae.Debug is true. +// It records the current position in the core buffer and a message or detailed object. +func (ae *ArgoEncoder) Log(msg interface{}) { + if ae.Debug { + entry := orderedmap.NewOrderedMap[string, interface{}]() + entry.Set("pos", ae.coreBuf.Position()) + + if s, ok := msg.(string); ok { + entry.Set("msg", s) + } else if om, ok := msg.(*orderedmap.OrderedMap[string, interface{}]); ok { + // If msg is an OrderedMap, merge its fields. + for el := om.Front(); el != nil; el = el.Next() { + entry.Set(el.Key, el.Value) + } + } else { + entry.Set("detail", msg) + } + ae.tracked = append(ae.tracked, entry) + } +} + +// nullTerminator is a pre-allocated byte slice for null-terminating strings. +var nullTerminator = []byte{0x00} + +// makeBlockWriter creates and returns a block.AnyBlockWriter suitable for the given wire.Type `t` +// and deduplication setting. It handles various scalar types by configuring appropriate +// ValueToBytesFunc and MakeLabelFunc for the underlying block.BlockWriter or +// block.DeduplicatingBlockWriter. +// For BytesType with deduplication, it uses a specialized bytesDeduplicatingAdapter. +func (ae *ArgoEncoder) makeBlockWriter(t wire.Type, dedupe bool) (block.AnyBlockWriter, error) { + switch t.(type) { + case wire.StringType: + stringVTB := func(s string) ([]byte, error) { // ValueToBytesFunc for string + return []byte(s), nil + } + if dedupe { + // For strings, deduplication uses the string itself as the key. + dbw := block.NewLengthOfBytesDeduplicatingBlockWriter[string](stringVTB) + return block.NewAnyDeduplicatingBlockWriter(dbw), nil + } + // Non-deduplicating string writer also uses length-based labels. + bw := block.NewLengthOfBytesBlockWriter[string](stringVTB) + return block.NewAnyBlockWriter(bw), nil + + case wire.BytesType: + bytesVTB := func(b []byte) ([]byte, error) { // ValueToBytesFunc for []byte + return b, nil + } + if dedupe { + // For BytesType with deduplication, the underlying DeduplicatingBlockWriter[string] + // uses string(originalBytes) as the deduplication key. + // The bytesDeduplicatingAdapter handles the conversion from []byte input (in its Write method) + // to the string key expected by the core writer. + dedupeKeyedVTB := func(sKey string) ([]byte, error) { // ValueToBytes for the string-keyed deduplicator + return []byte(sKey), nil + } + dbw := block.NewLengthOfBytesDeduplicatingBlockWriter[string](dedupeKeyedVTB) + return &bytesDeduplicatingAdapter{dbw}, nil // Specialized adapter for []byte with string-keyed dedupe. + } + // Non-deduplicating bytes writer. + bw := block.NewLengthOfBytesBlockWriter[[]byte](bytesVTB) + return block.NewAnyBlockWriter(bw), nil + + case wire.VarintType: + if dedupe { // Deduplication for Varint is not standard/implemented. + return nil, fmt.Errorf("unimplemented: deduping VARINT") + } + // Varint values are written without length labels by default (label is nil from NewAnyNoLabelBlockWriter). + // The actual Varint encoding happens in this ValueToBytesFunc. + varintVTB := func(v interface{}) ([]byte, error) { + switch val := v.(type) { + case int: + return varint.ZigZagEncodeInt64(int64(val)), nil + case int64: + return varint.ZigZagEncodeInt64(val), nil + case *big.Int: + return varint.ZigZagEncode(val), nil + case float64: + // Check if float64 is a whole number + if val == math.Trunc(val) { + return varint.ZigZagEncodeInt64(int64(val)), nil + } + return nil, fmt.Errorf("float64 value %v is not a whole number for VarintType block", val) + default: + return nil, fmt.Errorf("expected int, int64, *big.Int or whole float64 for VarintType block, got %T for value %v", v, v) + } + } + // Varints are not labeled with their length; their encoding is self-terminating. + return block.NewAnyNoLabelBlockWriter(varintVTB), nil + + case wire.Float64Type: + if dedupe { // Deduplication for Float64 is not standard/implemented. + return nil, fmt.Errorf("unimplemented: deduping FLOAT64") + } + // Float64 values are written without length labels by default. + floatVTB := func(v interface{}) ([]byte, error) { + var f float64 + switch val := v.(type) { + case float64: + f = val + case float32: + f = float64(val) + case int: + f = float64(val) + case int64: + f = float64(val) + default: + return nil, fmt.Errorf("expected float64 compatible type for Float64Type block, got %T for value %v", v, v) + } + var b [8]byte // Float64 is 8 bytes. + binary.LittleEndian.PutUint64(b[:], math.Float64bits(f)) + return b[:], nil + } + // Floats are fixed-width, so no length label is needed. + return block.NewAnyNoLabelBlockWriter(floatVTB), nil + + case wire.FixedType: + fixedType := t.(wire.FixedType) + if dedupe { // Deduplication for FixedType is not standard/implemented. + return nil, fmt.Errorf("unimplemented: deduping FIXED") + } + fixedVTB := func(v interface{}) ([]byte, error) { + b, ok := v.([]byte) + if !ok { + return nil, fmt.Errorf("expected []byte for FixedType block, got %T for value %v", v, v) + } + if len(b) != fixedType.Length { + return nil, fmt.Errorf("fixedType expected %d bytes, got %d for value %v", fixedType.Length, len(b), b) + } + return b, nil + } + // Fixed-length types do not need length labels. + return block.NewAnyNoLabelBlockWriter(fixedVTB), nil + + default: + return nil, fmt.Errorf("unsupported block writer type %s (underlying Go type: %T)", wire.Print(t), t) + } +} + +// bytesDeduplicatingAdapter is a specialized AnyBlockWriter adapter for BytesType when deduplication is enabled. +// It wraps a DeduplicatingBlockWriter[string] and handles the conversion of input []byte values +// to string keys for the underlying deduplicator. +type bytesDeduplicatingAdapter struct { + coreWriter *block.DeduplicatingBlockWriter[string] // Underlying writer uses string keys for deduplication. +} + +// Write converts the input value `v` (expected to be []byte or string) to a string key +// and passes it to the underlying string-keyed DeduplicatingBlockWriter. +func (a *bytesDeduplicatingAdapter) Write(v interface{}) (*label.Label, error) { + bytesVal, ok := v.([]byte) + if !ok { + // Allow string input as well, interpreting it as bytes. + if strVal, okStr := v.(string); okStr { + bytesVal = []byte(strVal) + } else { + return nil, fmt.Errorf("bytesDeduplicatingAdapter expected []byte or string, got %T for value %v", v, v) + } + } + // The coreWriter expects a string for deduplication; string(bytesVal) serves as the key. + return a.coreWriter.Write(string(bytesVal)) +} + +// AllValuesAsBytes delegates to the underlying coreWriter. +func (a *bytesDeduplicatingAdapter) AllValuesAsBytes() [][]byte { + return a.coreWriter.AllValuesAsBytes() +} + +// WriteLastToBuf delegates to the underlying coreWriter. +func (a *bytesDeduplicatingAdapter) WriteLastToBuf(buf buf.Write) error { + return a.coreWriter.WriteLastToBuf(buf) +} + +// getWriter retrieves an existing block.AnyBlockWriter for the given blockDef.Key, or creates +// a new one if it doesn't exist. Created writers are stored in ae.writers for reuse. +// `valueWireType` is typically the `Of` type of the `blockDef` (e.g., wire.String for a block of strings). +func (ae *ArgoEncoder) getWriter(blockDef wire.BlockType, valueWireType wire.Type) (block.AnyBlockWriter, error) { + if entry, found := ae.writers.Get(blockDef.Key); found { + return entry.Writer, nil + } + // Create a new writer if one doesn't exist for this block key. + writer, err := ae.makeBlockWriter(valueWireType, blockDef.Dedupe) + if err != nil { + return nil, fmt.Errorf("failed to make block writer for key '%s' (value type %s): %w", blockDef.Key, wire.Print(valueWireType), err) + } + ae.writers.Set(blockDef.Key, writerEntry{Writer: writer, OriginalValueType: valueWireType}) + return writer, nil +} + +// Write is a core method for handling scalar values that are part of a block. +// It retrieves or creates the appropriate block writer for `blockDef`, +// writes the value `v` to this writer (which generates a label and stores bytes), +// and then writes the label (if any) to the encoder's coreBuf. +// If the `HeaderInlineEverythingFlag` is set, it also writes the value's bytes directly +// to the coreBuf for certain types of labels (e.g., length labels, non-null markers for unlabeled types). +func (ae *ArgoEncoder) Write(blockDef wire.BlockType, valueWireType wire.Type, v interface{}) (*label.Label, error) { + writer, err := ae.getWriter(blockDef, valueWireType) + if err != nil { + return nil, err // Error from getWriter already has context. + } + + lbl, err := writer.Write(v) // Value `v` is written to the chosen block writer. + if err != nil { + return nil, fmt.Errorf("block writer for key '%s' (value type %s) failed: %w", blockDef.Key, wire.Print(valueWireType), err) + } + + // Part 1: Write the label to the core buffer. + // This happens regardless of InlineEverything, as labels are part of the core stream. + if lbl != nil { + encodedLabel := lbl.Encode() + if _, err := ae.coreBuf.Write(encodedLabel); err != nil { + // Error context for label writing. + mode := "non-inline" + if ae.header.GetFlag(header.HeaderInlineEverythingFlag) { + mode = "inline" + } + return nil, fmt.Errorf("failed to write label to core buffer (mode: %s): %w", mode, err) + } + } + + // Part 2: If InlineEverything is active, write the data bytes to coreBuf if appropriate. + if ae.header.GetFlag(header.HeaderInlineEverythingFlag) { + shouldWriteDataInline := false + if lbl == nil { + // For unlabeled types (e.g., FLOAT64, FIXED non-nullable), their data is always written inline. + shouldWriteDataInline = true + } else { + // For labeled types, data is written inline only if the label isn't a "standalone" one + // (i.e., if it implies data should follow, like a length or NonNull marker). + // Backreferences, Null, Absent, Error labels do not have following data in the core stream. + isStandaloneLabel := lbl.IsBackref() || lbl.IsNull() || lbl.IsAbsent() || lbl.IsError() + if !isStandaloneLabel { + shouldWriteDataInline = true + } + } + + if shouldWriteDataInline { + // WriteLastToBuf gets the most recent value from the block writer and writes it to coreBuf. + if err := writer.WriteLastToBuf(ae.coreBuf); err != nil { + return nil, fmt.Errorf("failed to write value data to core buffer in inline mode: %w", err) + } + } + } + // If not InlineEverything, value bytes remain in their respective block writers (writer.valuesAsBytes) + // and are assembled into the final message by GetResult(). + + return lbl, nil +} + +// ValueToArgoWithType is the primary entry point for encoding a Go data structure (typically from JSON-like input) +// into the Argo format based on a provided wire.Type schema. +// The `v` interface{} is expected to conform to the structure defined by `wt`. +// For example, if `wt` is a RecordType, `v` should be an *orderedmap.OrderedMap[string, interface{}]. +// If `wt` is an ArrayType, `v` should be a slice or array. +// Debugging information, if enabled, is written to "tmp-gowritelog.json". +func (ae *ArgoEncoder) ValueToArgoWithType(v interface{}, wt wire.Type) error { + // Start recursive encoding. currentPath is initially nil, currentBlock is initially nil. + err := ae.writeArgo(nil, v, wt, nil) + + // If debugging is enabled, write the tracked encoding steps to a JSON file. + if ae.Debug { + jsony := make([]*util.OrderedMapJSON[string, any], len(ae.tracked)) + for i, obj := range ae.tracked { + jsony[i] = util.NewOrderedMapJSON(obj) + } + trackedJSON, jsonErr := json.MarshalIndent(jsony, "", " ") + if jsonErr != nil { + // Log marshalling error, but don't let it hide the main encoding error. + fmt.Fprintf(os.Stderr, "Error marshalling debug tracking data: %v\n", jsonErr) + } else { + _ = os.WriteFile("tmp-gowritelog.json", trackedJSON, 0644) // Error is ignored for debug artifact. + } + } + return err +} + +// writeArgo is the main recursive workhorse for encoding. It traverses the input data `v` +// according to the structure defined by the wire.Type `wt`. +// `currentPath` tracks the path within the data structure for debugging. +// `currentBlock` points to the wire.BlockType definition if the current context is writing +// elements into a specific block (e.g., a block of strings or varints). +func (ae *ArgoEncoder) writeArgo(currentPath ast.Path, v interface{}, wt wire.Type, currentBlock *wire.BlockType) error { + ae.Track(currentPath, "writeArgo type: "+string(wt.GetTypeKey()), ae.coreBuf, v) + + switch typedWt := wt.(type) { + case wire.NullableType: + if v == nil { // Handle explicit Go nil for a nullable type. + ae.Track(currentPath, "null", ae.coreBuf, label.Null) + _, err := ae.coreBuf.Write(label.Null) + return err + } + + // Handle inline errors: if `v` is an error or []error, write Argo error representation. + // This needs to check various ways an error or slice of errors might be represented in `v`. + var errorArray []error + if errVal, ok := v.(error); ok { + errorArray = []error{errVal} // Single error. + } else if errSlice, ok := v.([]error); ok { + errorArray = errSlice // Already a slice of errors. + } else if interfaceSlice, ok := v.([]interface{}); ok { + // Check if []interface{} contains only errors. + canBeErrorArray := true + for _, item := range interfaceSlice { + if errVal, itemIsErr := item.(error); itemIsErr { + errorArray = append(errorArray, errVal) + } else { + canBeErrorArray = false // Found a non-error item. + break + } + } + if !canBeErrorArray { + errorArray = nil // Not a pure error array. + } + } + + if len(errorArray) > 0 { + // Value is an error or slice of errors, write it in Argo error format. + ae.Track(currentPath, "error value encountered", ae.coreBuf, v) + if _, err := ae.coreBuf.Write(label.Error); err != nil { // Write the Error marker label. + return err + } + // Write the number of errors as a length label. + lenLabel := label.NewFromInt64(int64(len(errorArray))) + if _, err := ae.coreBuf.Write(lenLabel.Encode()); err != nil { + return err + } + // Write each error. + for i, e := range errorArray { + errPath := util.AddPathIndex(currentPath, i) // Path for this specific error in the array. + if ae.header.GetFlag(header.HeaderSelfDescribingErrorsFlag) { + // Use self-describing format for errors. + if err := ae.writeSelfDescribing(errPath, e); err != nil { + return fmt.Errorf("failed to write self-describing error item at index %d: %w", i, err) + } + } else { + // Use structured Argo error format (defined by wire.Error type). + if err := ae.writeGoError(errPath, e); err != nil { + return fmt.Errorf("failed to write structured error item at index %d: %w", i, err) + } + } + } + return nil // Successfully wrote error(s). + } + + // If not nil and not an error, it's a non-null instance of the underlying type. + // If the underlying type is not intrinsically labeled (e.g. scalars in blocks often are), + // a NonNull marker is needed here before writing the actual value. + if !wire.IsLabeled(typedWt.Of) { + ae.Track(currentPath, "non-null marker for nullable type", ae.coreBuf, label.NonNull) + if _, err := ae.coreBuf.Write(label.NonNull); err != nil { + return err + } + } + // Continue writing with the underlying type. + return ae.writeArgo(currentPath, v, typedWt.Of, currentBlock) + + case wire.BlockType: + if currentBlock != nil { + // This should not happen if wire types are structured correctly (no nested blocks). + return fmt.Errorf("encoder error: already processing block '%s', cannot switch to new block '%s' at path %s. Wire type: %s", + currentBlock.Key, typedWt.Key, util.FormatPath(currentPath), wire.Print(wt)) + } + ae.Track(currentPath, "entering block with key", ae.coreBuf, typedWt.Key) + // Recursively call writeArgo with the block's element type (`typedWt.Of`) + // and pass `&typedWt` as the new `currentBlock` context. + return ae.writeArgo(currentPath, v, typedWt.Of, &typedWt) + + case wire.RecordType: + ae.Track(currentPath, "record with number of fields", ae.coreBuf, len(typedWt.Fields)) + // Expect v to be an *orderedmap.OrderedMap for records to maintain field order. + om, ok := v.(*orderedmap.OrderedMap[string, interface{}]) + if !ok && v != nil { // If v is not nil, it must be the correct map type. + return fmt.Errorf("type error: expected *orderedmap.OrderedMap[string, interface{}] for record, got %T at path %s", v, util.FormatPath(currentPath)) + } + + // Iterate through fields as defined in the wire.RecordType to ensure correct order and handling of all defined fields. + for _, field := range typedWt.Fields { + fieldPath := util.AddPathName(currentPath, field.Name) + var fieldValue interface{} + var fieldExists bool + if om != nil { // If input map is nil (because parent was nil), all fields are treated as absent. + fieldValue, fieldExists = om.Get(field.Name) + } else { + fieldValue = nil // Effectively absent. + fieldExists = false + } + + if fieldExists && fieldValue != nil && fieldValue != wire.AbsentValue { + // Field is present and has a non-nil, non-absent value. + // If omittable and its underlying type isn't self-labeling (like a BlockType often is), + // write a NonNull marker to indicate its presence. + if field.Omittable && !wire.IsLabeled(field.Of) { + ae.Track(fieldPath, "omittable record field present, writing NonNull marker", ae.coreBuf, field.Name) + if _, err := ae.coreBuf.Write(label.NonNull); err != nil { + return err + } + } + // Recursively write the field's value. + if err := ae.writeArgo(fieldPath, fieldValue, field.Of, currentBlock); err != nil { + return err + } + } else if field.Omittable && (!fieldExists || fieldValue == wire.AbsentValue) { + // Field is omittable and is effectively absent (either not in map or explicit AbsentValue). + ae.Track(fieldPath, "omittable record field absent, writing Absent marker", ae.coreBuf, field.Name) + if _, err := ae.coreBuf.Write(label.Absent); err != nil { + return err + } + } else if wire.IsNullable(field.Of) { + // Field is not omittable (or omittable but present as nil) AND its type is nullable. + // This handles cases where an explicit JSON null was provided for a nullable field, + // or a non-omittable field is nil (which is only valid if its type is nullable). + ae.Track(fieldPath, "record field is nil and type is nullable (or non-omittable field is nil), recursing", ae.coreBuf, field.Name) + // Recursively call writeArgo. If fieldValue is nil, this will correctly write a Null label via the NullableType case. + if err := ae.writeArgo(fieldPath, fieldValue, field.Of, currentBlock); err != nil { + return err + } + } else if wire.IsBlock(field.Of) && wire.IsDesc(field.Of.(wire.BlockType).Of) { + // Special case: field is a Block of SelfDescribing (DESC) type and is absent/nil. + // SelfDescribing types can represent null, so we recurse to let DESC handle the nil. + ae.Track(fieldPath, "record field is nil/absent but is Block, recursing for self-describing null", ae.coreBuf, field.Name) + if err := ae.writeArgo(fieldPath, nil, field.Of, currentBlock); err != nil { + return err + } + } else { + // Field is absent/nil, but it's not omittable, not nullable, and not Block. + // This is a data-schema mismatch. + return fmt.Errorf("schema error: record field '%s' is absent/nil but its type (%s) is not omittable, not nullable, and not Block at path %s", field.Name, wire.Print(field.Of), util.FormatPath(fieldPath)) + } + } + return nil + + case wire.ArrayType: + reflectVal := reflect.ValueOf(v) + if reflectVal.Kind() != reflect.Slice && reflectVal.Kind() != reflect.Array { + // If `v` is nil for an ArrayType, it's an error because ArrayType itself is not nullable. + // A nullable array would be NullableType{Of: ArrayType{...}}. + if v == nil { + return fmt.Errorf("type error: cannot encode Go nil as non-nullable Argo array at path %s. WireType: %s", util.FormatPath(currentPath), wire.Print(wt)) + } + return fmt.Errorf("type error: expected slice or array for ArrayType, got %T at path %s", v, util.FormatPath(currentPath)) + } + length := reflectVal.Len() + ae.Track(currentPath, "array with length", ae.coreBuf, length) + lenLabel := label.NewFromInt64(int64(length)) // Label for array length. + if _, err := ae.coreBuf.Write(lenLabel.Encode()); err != nil { + return err + } + // Recursively write each element of the array. + for i := 0; i < length; i++ { + itemPath := util.AddPathIndex(currentPath, i) + itemValue := reflectVal.Index(i).Interface() + if err := ae.writeArgo(itemPath, itemValue, typedWt.Of, currentBlock); err != nil { + return err + } + } + return nil + + case wire.BooleanType: + bVal, ok := v.(bool) + if !ok { + return fmt.Errorf("expected bool for BooleanType, got %T at path %s", v, util.FormatPath(currentPath)) + } + ae.Track(currentPath, "boolean", ae.coreBuf, bVal) + if bVal { + _, err := ae.coreBuf.Write(label.True) + return err + } + _, err := ae.coreBuf.Write(label.False) + return err + + case wire.StringType, wire.BytesType, wire.VarintType, wire.Float64Type, wire.FixedType: + // Logic for types which may use blocks for data + if currentBlock == nil { + return fmt.Errorf("programmer error: need block for %s at path %s", wire.Print(wt), util.FormatPath(currentPath)) + } + _, err := ae.Write(*currentBlock, wt, v) + if err != nil { + return err + } + ae.Track(currentPath, string(wt.GetTypeKey()), ae.coreBuf, v) + return nil + + case wire.DescType: + ae.Track(currentPath, "self-describing", ae.coreBuf, v) + return ae.writeSelfDescribing(currentPath, v) + + case wire.PathType: // Argo spec: PATH values ... encoded exactly as an ARRAY of VARINT values. + // This should be handled by the Error type definition, which includes a PATH field. + // If we encounter a raw PathType, treat it as Array{Of: Varint}. + pathSlice, ok := v.([]interface{}) + if !ok { + if intSlice, isIntSlice := v.([]int); isIntSlice { + pathSlice = make([]interface{}, len(intSlice)) + for i, v := range intSlice { + pathSlice[i] = v + } + ok = true + } else if int64Slice, isInt64Slice := v.([]int64); isInt64Slice { + pathSlice = make([]interface{}, len(int64Slice)) + for i, v := range int64Slice { + pathSlice[i] = v + } + ok = true + } else { + return fmt.Errorf("expected []interface{} or []int or []int64 for PathType, got %T at path %s", v, util.FormatPath(currentPath)) + } + } + // The actual transformation from GraphQL path to wire path (list of integers) happens + // before this point if we are encoding a structured Error. + // Here, we assume 'v' is already the list of integers for the wire. + return ae.writeArgo(currentPath, pathSlice, wire.ArrayType{Of: wire.Varint}, currentBlock) + + default: + return fmt.Errorf("unsupported wire type %T (%s) for encoding at path %s", wt, wire.Print(wt), util.FormatPath(currentPath)) + } +} + +// writeSelfDescribing writes a Go value in Argo's self-describing format. +// This format uses specific leading bytes to indicate the type of the following data. +// It's used for errors when HeaderSelfDescribingErrorsFlag is set, or for fields of type wire.Desc. +func (ae *ArgoEncoder) writeSelfDescribing(currentPath ast.Path, v interface{}) error { + ae.Track(currentPath, "writeSelfDescribing value", ae.coreBuf, v) + if v == nil { + _, err := ae.coreBuf.Write(wire.SelfDescribingNull) // Write the null marker. + return err + } + + // Optimized path for *orderedmap.OrderedMap (common for objects). + if om, ok := v.(*orderedmap.OrderedMap[string, interface{}]); ok { + if _, err := ae.coreBuf.Write(wire.SelfDescribingObject); err != nil { // Object marker. + return err + } + numFields := om.Len() + lenLabel := label.NewFromInt64(int64(numFields)) // Length of object (number of fields). + if _, err := ae.coreBuf.Write(lenLabel.Encode()); err != nil { + return err + } + + // Iterate through fields of the ordered map. + for el := om.Front(); el != nil; el = el.Next() { + k := el.Key // Field name + v := el.Value // Field value + fieldPath := util.AddPathName(currentPath, k) + + // Write field name (as a self-describing string). + stringBlockKey := wire.BlockKey("String") // Standard key for self-describing strings. + stringElementType, blockDefOk := wire.SelfDescribingBlocks[stringBlockKey] + if !blockDefOk { + return fmt.Errorf("internal error: self-describing string block key ('%s') not found in wire.SelfDescribingBlocks map for field name '%s'", stringBlockKey, k) + } + selfDescribingStringBlock := wire.NewBlockType(stringElementType, stringBlockKey, wire.MustDeduplicateByDefault(stringElementType)) + if _, err := ae.Write(selfDescribingStringBlock, wire.String, k); err != nil { + return fmt.Errorf("failed to write self-describing object field name '%s': %w", k, err) + } + + // Recursively write field value in self-describing format. + if err := ae.writeSelfDescribing(fieldPath, v); err != nil { + return fmt.Errorf("failed to write self-describing object field value for '%s': %w", k, err) + } + } + return nil + } + + // General path using reflection for other types. + val := reflect.ValueOf(v) + switch val.Kind() { + case reflect.Map: + // Handles native Go maps (e.g., map[string]interface{}). + // For determinism, these are converted to *orderedmap.OrderedMap before recursive call. + if val.Type().Key().Kind() != reflect.String { + return fmt.Errorf("type error: cannot encode map with non-string keys in self-describing object at path %s (type: %T)", util.FormatPath(currentPath), v) + } + + ae.Track(currentPath, "converting native map to OrderedMap for self-describing encoding", ae.coreBuf, v) + tempOM := orderedmap.NewOrderedMap[string, interface{}]() + var stringKeys []string + for _, kVal := range val.MapKeys() { + stringKeys = append(stringKeys, kVal.String()) + } + sort.Strings(stringKeys) // Sort keys for deterministic order in the temporary OrderedMap. + + for _, sk := range stringKeys { + mapValue := val.MapIndex(reflect.ValueOf(sk)).Interface() + tempOM.Set(sk, mapValue) + } + return ae.writeSelfDescribing(currentPath, tempOM) // Recurse with the ordered map. + + case reflect.Slice, reflect.Array: + // Handle []byte separately as SelfDescribingBytes. + if byteSlice, isBytes := v.([]byte); isBytes { + if _, err := ae.coreBuf.Write(wire.SelfDescribingBytes); err != nil { // Bytes marker. + return err + } + bytesBlockKey := wire.BlockKey("Bytes") // Standard key for self-describing byte arrays. + bytesElementType, blockDefOk := wire.SelfDescribingBlocks[bytesBlockKey] + if !blockDefOk { + return fmt.Errorf("internal error: self-describing bytes block key ('%s') not found in wire.SelfDescribingBlocks map", bytesBlockKey) + } + selfDescribingBytesBlock := wire.NewBlockType(bytesElementType, bytesBlockKey, wire.MustDeduplicateByDefault(bytesElementType)) + _, err := ae.Write(selfDescribingBytesBlock, wire.Bytes, byteSlice) + return err + } + + // Other slices/arrays are SelfDescribingList. + if _, err := ae.coreBuf.Write(wire.SelfDescribingList); err != nil { // List marker. + return err + } + length := val.Len() + lenLabel := label.NewFromInt64(int64(length)) // Length of list. + if _, err := ae.coreBuf.Write(lenLabel.Encode()); err != nil { + return err + } + // Recursively write each list item in self-describing format. + for i := 0; i < length; i++ { + itemPath := util.AddPathIndex(currentPath, i) + if err := ae.writeSelfDescribing(itemPath, val.Index(i).Interface()); err != nil { + return fmt.Errorf("error writing self-describing list item at index %d (path %s): %w", i, util.FormatPath(itemPath), err) + } + } + return nil + + case reflect.String: + if _, err := ae.coreBuf.Write(wire.SelfDescribingString); err != nil { // String marker. + return err + } + stringBlockKey := wire.BlockKey("String") + stringElementType, blockDefOk := wire.SelfDescribingBlocks[stringBlockKey] + if !blockDefOk { + return fmt.Errorf("internal error: self-describing string block key ('%s') not found in wire.SelfDescribingBlocks map", stringBlockKey) + } + selfDescribingStringBlock := wire.NewBlockType(stringElementType, stringBlockKey, wire.MustDeduplicateByDefault(stringElementType)) + _, err := ae.Write(selfDescribingStringBlock, wire.String, v.(string)) + return err + + case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: + if _, err := ae.coreBuf.Write(wire.SelfDescribingInt); err != nil { // Integer marker. + return err + } + varintBlockKey := wire.BlockKey("Int") // Standard key for self-describing integers. + varintElementType, blockDefOk := wire.SelfDescribingBlocks[varintBlockKey] + if !blockDefOk { + return fmt.Errorf("internal error: self-describing varint block key ('%s') not found in wire.SelfDescribingBlocks map", varintBlockKey) + } + selfDescribingVarintBlock := wire.NewBlockType(varintElementType, varintBlockKey, wire.MustDeduplicateByDefault(varintElementType)) + _, err := ae.Write(selfDescribingVarintBlock, wire.Varint, val.Int()) // val.Int() converts various int types to int64 for varint encoder. + return err + + case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64: + uVal := val.Uint() + if _, err := ae.coreBuf.Write(wire.SelfDescribingInt); err != nil { + return err + } + varintBlockKey := wire.BlockKey("Int") + varintElementType, blockDefOk := wire.SelfDescribingBlocks[varintBlockKey] + if !blockDefOk { + return fmt.Errorf("internal error: self-describing varint block key ('%s') not found for uint value", varintBlockKey) + } + selfDescribingVarintBlock := wire.NewBlockType(varintElementType, varintBlockKey, wire.MustDeduplicateByDefault(varintElementType)) + if uVal <= math.MaxInt64 { // If fits in int64, use that directly for varint encoder. + _, err := ae.Write(selfDescribingVarintBlock, wire.Varint, int64(uVal)) + return err + } + // Otherwise, use *big.Int for varint encoding. + bigUVal := new(big.Int).SetUint64(uVal) + _, err := ae.Write(selfDescribingVarintBlock, wire.Varint, bigUVal) + return err + + case reflect.Float32, reflect.Float64: + fVal := val.Float() + if fVal == math.Trunc(fVal) && fVal >= float64(math.MinInt64) && fVal <= float64(math.MaxInt64) { + // If float is a whole number and fits in int64, encode as SelfDescribingInt. + if _, err := ae.coreBuf.Write(wire.SelfDescribingInt); err != nil { + return err + } + varintBlockKey := wire.BlockKey("Int") + varintElementType, blockDefOk := wire.SelfDescribingBlocks[varintBlockKey] + if !blockDefOk { + return fmt.Errorf("internal error: self-describing varint block key ('%s') not found for whole float", varintBlockKey) + } + selfDescribingVarintBlock := wire.NewBlockType(varintElementType, varintBlockKey, wire.MustDeduplicateByDefault(varintElementType)) + _, err := ae.Write(selfDescribingVarintBlock, wire.Varint, int64(fVal)) + return err + } + // Otherwise, encode as SelfDescribingFloat. + if _, err := ae.coreBuf.Write(wire.SelfDescribingFloat); err != nil { // Float marker. + return err + } + floatBlockKey := wire.BlockKey("Float") // Standard key for self-describing floats. + floatElementType, blockDefOk := wire.SelfDescribingBlocks[floatBlockKey] + if !blockDefOk { + return fmt.Errorf("internal error: self-describing float block key ('%s') not found in wire.SelfDescribingBlocks map", floatBlockKey) + } + selfDescribingFloatBlock := wire.NewBlockType(floatElementType, floatBlockKey, wire.MustDeduplicateByDefault(floatElementType)) + _, err := ae.Write(selfDescribingFloatBlock, wire.Float64, fVal) + return err + + case reflect.Bool: + if v.(bool) { + _, err := ae.coreBuf.Write(wire.SelfDescribingTrue) // True marker. + return err + } + _, err := ae.coreBuf.Write(wire.SelfDescribingFalse) // False marker. + return err + + case reflect.Ptr, reflect.Interface: + if val.IsNil() { // Handle nil pointer or nil interface. + _, err := ae.coreBuf.Write(wire.SelfDescribingNull) + return err + } + // Dereference pointer/interface and recurse with the element. + return ae.writeSelfDescribing(currentPath, val.Elem().Interface()) + + default: + // Handle *big.Int specifically, as it's a common type for large integers not caught by reflect.Int types. + if bigIntValue, isBigInt := v.(*big.Int); isBigInt { + if _, err := ae.coreBuf.Write(wire.SelfDescribingInt); err != nil { + return err + } + varintBlockKey := wire.BlockKey("Int") + varintElementType, blockDefOk := wire.SelfDescribingBlocks[varintBlockKey] + if !blockDefOk { + return fmt.Errorf("internal error: self-describing varint block key ('%s') not found for *big.Int", varintBlockKey) + } + selfDescribingVarintBlock := wire.NewBlockType(varintElementType, varintBlockKey, wire.MustDeduplicateByDefault(varintElementType)) + _, err := ae.Write(selfDescribingVarintBlock, wire.Varint, bigIntValue) + return err + } + return fmt.Errorf("type error: cannot encode unsupported Go type %T (Kind: %s) in self-describing format at path %s", v, val.Kind(), util.FormatPath(currentPath)) + } +} + +// ArgoErrorValue defines the structure for representing GraphQL errors in Argo format when not using self-describing errors. +// It includes standard GraphQL error fields. The `Path` is transformed into a list of integers/strings for Argo. +type ArgoErrorValue struct { + Message string // The error message. + Locations []ArgoErrorLocation // Source locations of the error in the query. + Path []interface{} // Path to the field where the error occurred, as a list of string field names and integer indices. + Extensions *orderedmap.OrderedMap[string, interface{}] // Custom error data. +} + +// ArgoErrorLocation represents a single source location (line and column) for an error. +type ArgoErrorLocation struct { + Line int `json:"line"` // 1-indexed line number. + Column int `json:"column"` // 1-indexed column number. +} + +// writeGoError converts a standard Go `error` into an ArgoErrorValue (represented as an *orderedmap.OrderedMap for deterministic field order) +// and then writes this map using the structured `wire.Error` type definition. +// This is invoked when the `HeaderSelfDescribingErrorsFlag` is false. +// `currentPath` is the GraphQL path to where the error label itself is being written. +func (ae *ArgoEncoder) writeGoError(currentPath ast.Path, goErr error) error { + // Construct the ArgoErrorValue. + argoErrVal := ArgoErrorValue{ + Message: goErr.Error(), + // Locations and Path are typically not available from a generic Go error directly. + // These would need to be populated if `goErr` is a more structured error type + // that carries GraphQL-specific location/path information. + // For now, we add the Go error type to extensions for some context. + Extensions: orderedmap.NewOrderedMap[string, interface{}](), + } + argoErrVal.Extensions.Set("go_error_type", reflect.TypeOf(goErr).String()) + + // Convert ArgoErrorValue to an *orderedmap.OrderedMap for encoding with wire.Error type. + // The order of Set calls determines the field order in the Argo output if wire.Error is a RecordType. + errorMap := orderedmap.NewOrderedMap[string, interface{}]() + errorMap.Set("message", argoErrVal.Message) + if argoErrVal.Locations != nil { // Only include if present. + errorMap.Set("locations", argoErrVal.Locations) + } + if argoErrVal.Path != nil { // Only include if present. + errorMap.Set("path", argoErrVal.Path) + } + if argoErrVal.Extensions != nil && argoErrVal.Extensions.Len() > 0 { // Only include if non-empty. + errorMap.Set("extensions", argoErrVal.Extensions) + } + + // Write the errorMap using the predefined wire.Error schema. + // currentBlock is nil as errors are part of the core stream, not typically within other blocks. + return ae.writeArgo(currentPath, errorMap, wire.Error, nil) +} + +// GetResult finalizes the encoding process. It assembles the Argo header, +// data from all block writers (if not inlining everything), and the core buffer data +// into a single, final *buf.Buf containing the complete Argo message. +func (ae *ArgoEncoder) GetResult() (*buf.Buf, error) { + headerBytes, err := ae.header.AsBytes() // Serialize the header to bytes. + if err != nil { + return nil, fmt.Errorf("failed to serialize Argo header: %w", err) + } + ae.Track(nil, "header bytes written", nil, headerBytes) // For debugging, length of header. + + shouldWriteBlocks := !ae.header.GetFlag(header.HeaderInlineEverythingFlag) + totalDataBytesFromBlocks := 0 // Total size of content from all blocks. + blockLengthLabelBytesTotal := 0 // Total size of all block length labels. + + // blockToWrite temporarily stores data for each block before final assembly. + type blockToWrite struct { + key wire.BlockKey // The block's unique key. + lengthLabelData []byte // Encoded label for the total length of this block's content. + contentBytes [][]byte // Slice of byte slices, each representing a value in the block. + } + var blocksToWrite []blockToWrite // List of blocks to be written, in order. + + if shouldWriteBlocks { + // Iterate through writers in the order they were created (preserved by OrderedMap). + // This ensures blocks are written in a deterministic order, matching reference implementations. + for el := ae.writers.Front(); el != nil; el = el.Next() { + key := el.Key + entry := el.Value // writerEntry + writer := entry.Writer + originalValueType := entry.OriginalValueType // e.g. wire.String, wire.Bytes + + blockContentBytes := writer.AllValuesAsBytes() // Get all accumulated byte values for this block. + currentBlockTotalBytes := 0 + + isStringBlock := wire.IsString(originalValueType) + + processedBlockContentBytes := make([][]byte, 0, len(blockContentBytes)) + for _, valueBytes := range blockContentBytes { + currentBlockTotalBytes += len(valueBytes) + processedBlockContentBytes = append(processedBlockContentBytes, valueBytes) + // If it's a string block and null termination is enabled, add terminator. + if isStringBlock && ae.header.GetFlag(header.HeaderNullTerminatedStringsFlag) { + processedBlockContentBytes = append(processedBlockContentBytes, nullTerminator) + currentBlockTotalBytes += len(nullTerminator) + } + } + + lengthLabel := label.NewFromInt64(int64(currentBlockTotalBytes)) // Label for total length of this block. + encodedLengthLabel := lengthLabel.Encode() + + blocksToWrite = append(blocksToWrite, blockToWrite{ + key: key, + lengthLabelData: encodedLengthLabel, + contentBytes: processedBlockContentBytes, + }) + + totalDataBytesFromBlocks += currentBlockTotalBytes + blockLengthLabelBytesTotal += len(encodedLengthLabel) + } + } + + coreDataBytes := ae.coreBuf.Bytes() // Get all bytes from the core buffer (labels, inlined data). + coreDataLength := len(coreDataBytes) + var coreLengthLabelBytes []byte + if shouldWriteBlocks { // If blocks are written, the core data also needs a length label. + coreLengthLabel := label.NewFromInt64(int64(coreDataLength)) + coreLengthLabelBytes = coreLengthLabel.Encode() + } + + // Calculate the total size of the final Argo message. + finalSize := len(headerBytes) + if shouldWriteBlocks { + finalSize += blockLengthLabelBytesTotal // All block length labels. + finalSize += totalDataBytesFromBlocks // All block content. + finalSize += len(coreLengthLabelBytes) // Core data length label. + } + finalSize += coreDataLength // Core data itself. + + // Allocate the final buffer and write all parts in order. + finalBuf := buf.NewBuf(finalSize) + + _, _ = finalBuf.Write(headerBytes) // 1. Header + + if shouldWriteBlocks { + // 2. For each block: its length label, then its content. + for _, btw := range blocksToWrite { + _, _ = finalBuf.Write(btw.lengthLabelData) + for _, valueData := range btw.contentBytes { + _, _ = finalBuf.Write(valueData) + } + } + // 3. Core data length label. + _, _ = finalBuf.Write(coreLengthLabelBytes) + } + + // 4. Core data. + _, _ = finalBuf.Write(coreDataBytes) + + // Sanity check the final length. + if finalBuf.Len() != finalSize { + return nil, fmt.Errorf("internal encoder error: incorrect result length. Wrote %d, expected %d", finalBuf.Len(), finalSize) + } + + return finalBuf, nil +} diff --git a/vendor/github.com/beeper/argo-go/header/header.go b/vendor/github.com/beeper/argo-go/header/header.go new file mode 100644 index 0000000000..7e35379632 --- /dev/null +++ b/vendor/github.com/beeper/argo-go/header/header.go @@ -0,0 +1,135 @@ +package header + +import ( + "fmt" + + "github.com/beeper/argo-go/pkg/bitset" + "github.com/beeper/argo-go/pkg/buf" +) + +// Public constants for header flags +const ( + HeaderInlineEverythingFlag = 0 + HeaderSelfDescribingFlag = 1 + HeaderOutOfBandFieldErrorsFlag = 2 + HeaderSelfDescribingErrorsFlag = 3 + HeaderNullTerminatedStringsFlag = 4 + HeaderNoDeduplicationFlag = 5 + HeaderHasUserFlagsFlag = 6 +) + +// Header represents the Argo message header. +type Header struct { + flags *bitset.BitSet + userFlags *bitset.BitSet +} + +// NewHeader creates a new Header. +func NewHeader() *Header { + return &Header{ + flags: bitset.NewBitSet(), + } +} + +// GetFlag returns the boolean value of a given header flag. +func (h *Header) GetFlag(flag int) bool { + if h.flags == nil { + return false + } + return h.flags.GetBit(flag) +} + +// SetFlag sets the boolean value of a given header flag. +func (h *Header) SetFlag(flag int, value bool) { + if h.flags == nil { + h.flags = bitset.NewBitSet() + } + if value { + h.flags.SetBit(flag) + } else { + h.flags.UnsetBit(flag) + } +} + +// Read reads the header from the provided Read buffer. +// It updates the Header's internal state (flags, userFlags). +// It also advances the position of the buffer. +func (h *Header) Read(reader buf.Read) error { + if reader == nil { + return fmt.Errorf("reader is nil, cannot read header") + } + + var vbs bitset.VarBitSet + _, flags, err := vbs.Read(reader) // Read standard flags using VarBitSet.Read + if err != nil { + return fmt.Errorf("failed to read standard header flags: %w", err) + } + h.flags = flags + + // Check based on the just-read standard flags + if h.GetFlag(HeaderHasUserFlagsFlag) { // Use new GetFlag method + _, userFlags, err := vbs.Read(reader) // Read user flags using VarBitSet.Read + if err != nil { + return fmt.Errorf("failed to read user header flags: %w", err) + } + h.userFlags = userFlags + } else { + h.userFlags = nil // Ensure userFlags is nil if HasUserFlags is false + } + return nil +} + +// Write writes the header to the provided Write buffer. +func (h *Header) Write(writer buf.Write) error { + if writer == nil { + return fmt.Errorf("writer is nil, cannot write header") + } + flagBytes, err := (&bitset.VarBitSet{}).Write(h.flags, 0) + if err != nil { + return fmt.Errorf("failed to write flags: %w", err) + } + + var userFlagBytes []byte + if h.GetFlag(HeaderHasUserFlagsFlag) { // Use new GetFlag method + userFlagBytes, err = (&bitset.VarBitSet{}).Write(h.userFlags, 0) + if err != nil { + return fmt.Errorf("failed to write userFlags: %w", err) + } + } + + if _, err := writer.Write(flagBytes); err != nil { + return fmt.Errorf("buffer write error for flags: %w", err) + } + if userFlagBytes != nil { + if _, err := writer.Write(userFlagBytes); err != nil { + return fmt.Errorf("buffer write error for userFlags: %w", err) + } + } + return nil +} + +// AsBytes serializes the header to a byte slice. +func (h *Header) AsBytes() ([]byte, error) { + tempBuf := buf.NewBuf(0) // Use argo.Buf which implements Write + err := h.Write(tempBuf) + if err != nil { + return nil, err // Propagate error from Write + } + return tempBuf.Bytes(), nil +} + +// UserFlags returns the user flags BitSet. +func (h *Header) UserFlags() *bitset.BitSet { + return h.userFlags +} + +// SetUserFlags sets the user flags BitSet. +// This also sets or unsets the HeaderHasUserFlagsFlag bit accordingly. +func (h *Header) SetUserFlags(bs *bitset.BitSet) { + h.userFlags = bs + if h.flags == nil { // Ensure flags is initialized + h.flags = bitset.NewBitSet() + } + hasUserFlagsSet := bs != nil && len(bs.Bytes()) > 0 + h.SetFlag(HeaderHasUserFlagsFlag, hasUserFlagsSet) // Use new SetFlag method +} diff --git a/vendor/github.com/beeper/argo-go/internal/util/util.go b/vendor/github.com/beeper/argo-go/internal/util/util.go new file mode 100644 index 0000000000..dda56f2ac0 --- /dev/null +++ b/vendor/github.com/beeper/argo-go/internal/util/util.go @@ -0,0 +1,133 @@ +// Package util provides miscellaneous utility functions used across the argo-go library. +package util + +import ( + "bytes" + "encoding/json" + "fmt" + "strconv" + "strings" + + "github.com/elliotchance/orderedmap/v3" + "github.com/vektah/gqlparser/v2/ast" +) + +// GroupBy groups elements of a slice into a map based on a key extracted from each element. +func GroupBy[T any, K comparable](array []T, extract func(T) K) map[K][]T { + grouped := make(map[K][]T) + for _, element := range array { + key := extract(element) + grouped[key] = append(grouped[key], element) + } + return grouped +} + +// AddPathIndex appends an integer index to an ast.Path. +func AddPathIndex(p ast.Path, i int) ast.Path { + path := make(ast.Path, len(p), len(p)+1) + copy(path, p) + path = append(path, ast.PathIndex(i)) + return path +} + +// AddPathName appends a string name to an ast.Path. +func AddPathName(p ast.Path, s string) ast.Path { + path := make(ast.Path, len(p), len(p)+1) + copy(path, p) + path = append(path, ast.PathName(s)) + return path +} + +func FormatPath(p ast.Path) string { + if p == nil { + return "" + } + var parts []string + for _, el := range p { + switch v := el.(type) { + case ast.PathName: + parts = append(parts, string(v)) + case ast.PathIndex: + parts = append(parts, strconv.Itoa(int(v))) + default: + parts = append(parts, fmt.Sprintf("%v", v)) + } + } + return strings.Join(parts, ".") +} + +// NewOrderedMapJSON creates a new OrderedMapJSON wrapper. +func NewOrderedMapJSON[K comparable, V any](om *orderedmap.OrderedMap[K, V]) *OrderedMapJSON[K, V] { + return &OrderedMapJSON[K, V]{om} +} + +// OrderedMapJSON is a wrapper around orderedmap.OrderedMap to allow custom JSON marshalling. +// It needs to be generic to match the orderedmap.OrderedMap it wraps. +type OrderedMapJSON[K comparable, V any] struct { + *orderedmap.OrderedMap[K, V] +} + +// MarshalJSON implements the json.Marshaler interface. +// This method will be called by json.Marshal and json.MarshalIndent. +func (omj OrderedMapJSON[K, V]) MarshalJSON() ([]byte, error) { + if omj.OrderedMap == nil { + return []byte("null"), nil + } + + var buf bytes.Buffer + buf.WriteString("{") + + first := true + for key := range omj.Keys() { // Keys() returns keys in order + value, _ := omj.Get(key) + + if !first { + buf.WriteString(",") + } + first = false + + // Marshal key + keyBytes, keyErr := json.Marshal(key) + if keyErr != nil { + return nil, fmt.Errorf("failed to marshal ordered map key (%v): %w", key, keyErr) + } + buf.Write(keyBytes) + + buf.WriteString(":") + + // Marshal value + var valBytes []byte + var valErr error + + // Convert value (type V) to interface{} to perform dynamic type assertion + valAsInterface := interface{}(value) + + // Check if the value is specifically an *orderedmap.OrderedMap[string, any] + if subMap, ok := valAsInterface.(*orderedmap.OrderedMap[string, any]); ok { + // For this specific project structure where maps are *orderedmap.OrderedMap[string, any], + // we can create a new wrapper for the sub-map. + wrappedSubMap := NewOrderedMapJSON[string, any](subMap) + valBytes, valErr = wrappedSubMap.MarshalJSON() // Recursive call to our MarshalJSON + } else { + // Standard marshalling for other types + valBytes, valErr = json.Marshal(valAsInterface) + } + + if valErr != nil { + return nil, fmt.Errorf("failed to marshal ordered map value for key (%v): %w", key, valErr) + } + buf.Write(valBytes) + } + + buf.WriteString("}") + return buf.Bytes(), nil +} + +// MustMarshalJSON calls MarshalJSON and panics if an error occurs. +func (omj OrderedMapJSON[K, V]) MustMarshalJSON() []byte { + data, err := omj.MarshalJSON() + if err != nil { + panic(fmt.Errorf("failed to marshal OrderedMapJSON to JSON: %w", err)) + } + return data +} diff --git a/vendor/github.com/beeper/argo-go/label/label.go b/vendor/github.com/beeper/argo-go/label/label.go new file mode 100644 index 0000000000..01e3f7c7a8 --- /dev/null +++ b/vendor/github.com/beeper/argo-go/label/label.go @@ -0,0 +1,384 @@ +// Package label defines the Label type and its associated operations for Argo. +// Labels are signed variable-length integers (encoded using ZigZag ULEB128) +// that serve multiple purposes in the Argo binary format: +// - Encoding lengths of data segments (e.g., string length, array size). +// - Representing special marker values like Null, Absent, or Error. +// - Encoding backreferences to previously seen values for data deduplication. +// +// The package provides constants for common marker labels (Null, Absent, True, False, etc.), +// functions to create labels from integer values, methods to determine a label's kind +// (Length, Null, Backreference, etc.), and functions for encoding labels to and +// decoding labels from byte streams. +package label + +import ( + "errors" + "fmt" + "math/big" + + "github.com/beeper/argo-go/pkg/buf" + "github.com/beeper/argo-go/pkg/varint" +) + +// LabelKind categorizes a Label based on its numerical value and Argo semantics. +// Different kinds determine how the label (and potentially associated data) is interpreted. +type LabelKind int + +const ( + // LabelKindNull (-1) indicates a null or missing value where the field itself is present. + LabelKindNull LabelKind = iota + // LabelKindAbsent (-2) indicates a field or array entry that is entirely absent or omitted. + LabelKindAbsent + // LabelKindError (-3) indicates that an error occurred at this position in the data structure. + // The error details may follow or be found in a separate error list. + LabelKindError + // LabelKindBackreference (negative, < -3) indicates a reference to a previously encountered value. + // The specific negative value is used to calculate an offset to the original value. + LabelKindBackreference + // LabelKindLength (non-negative, >= 0) indicates the length of a subsequent data value (e.g., string bytes, array elements). + // It can also represent boolean true (1) or false/non-null marker (0) in specific contexts. + LabelKindLength +) + +// String returns a human-readable name for the LabelKind. +func (lk LabelKind) String() string { + switch lk { + case LabelKindNull: + return "Null" + case LabelKindAbsent: + return "Absent" + case LabelKindError: + return "Error" + case LabelKindBackreference: + return "Backreference" + case LabelKindLength: + // This covers lengths, true (1), false (0), and non-null (0). + return "Length/Boolean/Marker" + default: + return fmt.Sprintf("UnknownLabelKind(%d)", int(lk)) + } +} + +// Label wraps a *big.Int to represent an Argo label. +// Its value determines its kind (length, null, backreference, etc.) and specific meaning. +// Labels are immutable once created; their underlying *big.Int should not be modified +// after creation, especially for the global Label constants. +type Label struct { + value *big.Int +} + +// New creates a new Label from the provided *big.Int. +// The caller should not modify `val` after passing it to New, especially if it's +// not a fresh *big.Int, to avoid unintended side effects on the Label. +// If `val` is nil, a Label with a *big.Int value of 0 is created. +func New(val *big.Int) Label { + if val == nil { + // Ensure value is never nil internally to prevent panics on method calls. + // Default to 0 if nil is passed; callers should ideally avoid passing nil. + return Label{value: big.NewInt(0)} + } + return Label{value: val} +} + +// NewFromInt64 creates a new Label from an int64 value. +// This is a convenience constructor for creating labels from standard integer types. +func NewFromInt64(val int64) Label { + return Label{value: big.NewInt(val)} +} + +// Value returns the underlying *big.Int of the Label. +// Callers must not modify the returned *big.Int, as it may be shared by +// predefined Label constants (e.g., NullMarker, TrueMarker) or other Label instances. +// To perform arithmetic, create a new *big.Int (e.g., `new(big.Int).Set(l.Value())`). +func (l Label) Value() *big.Int { + return l.value +} + +// String returns the decimal string representation of the Label's underlying *big.Int value. +func (l Label) String() string { + if l.value == nil { + // This case should ideally not be reached if constructors always ensure a non-nil l.value. + return "" + } + return l.value.String() +} + +// --- Internal *big.Int constants for special label values --- +// These are unexported and used to initialize the exported Label constants and for comparisons. +var ( + trueMarkerBigInt *big.Int // Represents boolean True (value 1) + falseMarkerBigInt *big.Int // Represents boolean False (value 0), also used as NonNull marker + nonNullMarkerBigInt *big.Int // Represents a NonNull marker (value 0), indicating presence for non-labeled types + nullMarkerBigInt *big.Int // Represents a Null value (value -1) + absentMarkerBigInt *big.Int // Represents an Absent field/item (value -2) + errorMarkerBigInt *big.Int // Represents an Error marker (value -3) + + // lowestReservedBigInt is the numerically largest (i.e., closest to zero) negative *big.Int + // that has a special, non-backreference meaning. Values numerically smaller than this + // (e.g., -4, -5, ...) are considered backreferences. + lowestReservedBigInt *big.Int +) + +// --- Exported Label constants --- +// These provide convenient access to common, predefined label values. +var ( + TrueMarker Label // Label for boolean True (value 1). + FalseMarker Label // Label for boolean False (value 0). + NonNullMarker Label // Label for NonNull marker (value 0); alias for FalseMarker. + NullMarker Label // Label for Null (value -1). + AbsentMarker Label // Label for Absent (value -2). + ErrorMarker Label // Label for Error (value -3). + LowestReservedValue Label // Label instance for the lowest reserved non-backreference value (-3). +) + +// --- Exported pre-encoded byte slices for common Label values --- +// These are the ZigZag ULEB128 encoded forms of the marker labels. +var ( + Null []byte // Encoded form of NullMarker (-1). + Absent []byte // Encoded form of AbsentMarker (-2). + Error []byte // Encoded form of ErrorMarker (-3). + Zero []byte // Encoded form of 0 (used for FalseMarker, NonNullMarker, and length 0). + NonNull []byte // Encoded form of NonNullMarker (0); alias for Zero. + False []byte // Encoded form of FalseMarker (0); alias for Zero. + True []byte // Encoded form of TrueMarker (1). +) + +// labelToOffsetFactor is used in the calculation of backreference offsets. +// It is derived from `lowestReservedBigInt` and ensures that backreference IDs +// map correctly to array/slice offsets. +// Specifically, offset = -NumericValue(backreference_label) + labelToOffsetFactor. +// If lowestReservedBigInt is -3, factor is -3 - 1 = -4. +var labelToOffsetFactor int64 + +func init() { + // Initialize *big.Int marker values. + trueMarkerBigInt = big.NewInt(1) + falseMarkerBigInt = big.NewInt(0) + nonNullMarkerBigInt = big.NewInt(0) // By spec, NonNull is 0, same as False. + nullMarkerBigInt = big.NewInt(-1) + absentMarkerBigInt = big.NewInt(-2) + errorMarkerBigInt = big.NewInt(-3) + // lowestReservedBigInt is set to errorMarkerBigInt (-3). Values less than this are backrefs. + lowestReservedBigInt = new(big.Int).Set(errorMarkerBigInt) // Use a copy for safety, though *big.Ints from NewInt are new. + + // Initialize exported Label struct constants using the *big.Int markers. + TrueMarker = New(trueMarkerBigInt) + FalseMarker = New(falseMarkerBigInt) + NonNullMarker = New(nonNullMarkerBigInt) // Effectively New(big.NewInt(0)) + NullMarker = New(nullMarkerBigInt) + AbsentMarker = New(absentMarkerBigInt) + ErrorMarker = New(errorMarkerBigInt) + LowestReservedValue = New(lowestReservedBigInt) // Label for -3 + + // Initialize pre-encoded byte slices for common labels. + Null = varint.ZigZagEncode(nullMarkerBigInt) // ZigZag(-1) + Absent = varint.ZigZagEncode(absentMarkerBigInt) // ZigZag(-2) + Error = varint.ZigZagEncode(errorMarkerBigInt) // ZigZag(-3) + Zero = varint.ZigZagEncode(big.NewInt(0)) // ZigZag(0) + NonNull = Zero // NonNull is 0. + False = Zero // False is 0. + True = varint.ZigZagEncode(big.NewInt(1)) // ZigZag(1) + + // Calculate labelToOffsetFactor for backreference processing. + // This factor adjusts the negated backreference label value to yield a 0-indexed offset. + // Argo JS: labelToOffsetFactor = Number(LowestReservedValue) - 1 + // Since LowestReservedValue is -3, labelToOffsetFactor becomes -3 - 1 = -4. + if !lowestReservedBigInt.IsInt64() { + // This should not happen as -3 is well within int64 range. + panic("label: internal error - lowestReservedBigInt cannot be represented as int64 during init") + } + labelToOffsetFactor = lowestReservedBigInt.Int64() - 1 +} + +// Kind determines and returns the semantic LabelKind of the Label (e.g., Null, Length, Backreference). +// The kind is derived from the label's numerical value according to Argo rules. +func (l Label) Kind() LabelKind { + if l.value == nil { // Should ideally not occur due to constructors ensuring non-nil. + // Consider this an internal error or undefined state. + // Returning LabelKindError or panicking might be alternatives. + // For now, assuming it implies an error state if reached. + return LabelKindError + } + if l.value.Sign() >= 0 { // Non-negative values (0, 1, lengths) are LabelKindLength. + return LabelKindLength + } + + // Negative values: compare with specific marker *big.Int values. + if l.value.Cmp(nullMarkerBigInt) == 0 { // -1 + return LabelKindNull + } + if l.value.Cmp(absentMarkerBigInt) == 0 { // -2 + return LabelKindAbsent + } + if l.value.Cmp(errorMarkerBigInt) == 0 { // -3 + return LabelKindError + } + // Any other negative value (i.e., value < -3) is a backreference. + return LabelKindBackreference +} + +// IsNull checks if the label represents a Null value (i.e., its value is -1). +func (l Label) IsNull() bool { + if l.value == nil { + return false // An uninitialized label is not NullMarker. + } + return l.value.Cmp(nullMarkerBigInt) == 0 +} + +// IsAbsent checks if the label represents an Absent value (i.e., its value is -2). +func (l Label) IsAbsent() bool { + if l.value == nil { + return false // An uninitialized label is not AbsentMarker. + } + return l.value.Cmp(absentMarkerBigInt) == 0 +} + +// IsError checks if the label represents an Error marker (i.e., its value is -3). +func (l Label) IsError() bool { + if l.value == nil { + return false // An uninitialized label is not ErrorMarker. + } + return l.value.Cmp(errorMarkerBigInt) == 0 +} + +// IsLength checks if the label represents a length or a non-negative marker (i.e., its value >= 0). +// This includes actual lengths, TrueMarker (1), FalseMarker (0), and NonNullMarker (0). +func (l Label) IsLength() bool { + if l.value == nil { + return false // An uninitialized label is not a length. + } + return l.value.Sign() >= 0 +} + +// IsBackref checks if the label represents a backreference. +// A backreference label has a value numerically less than `lowestReservedBigInt` (i.e., < -3). +func (l Label) IsBackref() bool { + if l.value == nil { + return false // An uninitialized label is not a backreference. + } + // A label is a backreference if its value is negative and not one of the special + // negative markers (Null, Absent, Error). This is equivalent to being < lowestReservedBigInt. + return l.value.Cmp(lowestReservedBigInt) < 0 +} + +// Encode converts the Label into its ZigZag ULEB128 encoded byte representation. +// For common marker labels (Null, Absent, Error), it returns their pre-encoded global byte slices. +// Otherwise, it performs ZigZag encoding on the label's *big.Int value. +func (l Label) Encode() []byte { + if l.value == nil { + // This handles the case of an uninitialized Label struct (e.g. var lbl Label). + // Defaulting to encoding Null seems a reasonable, albeit potentially masking, behavior. + // A stricter approach might panic or return an error. + return Null + } + + // Use the label's Kind to efficiently select pre-encoded values for markers. + switch l.Kind() { + case LabelKindNull: + return Null // Use pre-encoded global constant. + case LabelKindAbsent: + return Absent // Use pre-encoded global constant. + case LabelKindError: + return Error // Use pre-encoded global constant. + case LabelKindLength, LabelKindBackreference: + // This path handles positive numbers (lengths), zero (False/NonNull/Length 0), + // and true backreferences (negative values numerically smaller than errorMarkerBigInt). + // If l.value was, for example, exactly nullMarkerBigInt, l.Kind() would be LabelKindNull, + // correctly taking that path to use the pre-encoded `Null` slice. + return varint.ZigZagEncode(l.value) + default: + // This case should ideally not be reached if Kind() is comprehensive and l.value is valid. + // If an unknown or unexpected Kind were somehow produced, panicking might be appropriate + // as it indicates an internal logic inconsistency. + // For robustness in unexpected scenarios, falling back to direct encoding could be done, + // but it implies an issue that should be investigated. + // Assuming Kind() correctly categorizes all valid label values, this default is defensive. + // Consider logging an internal error if this path is ever taken in a production system. + // As a fallback, encode the raw value. This might occur if l.value was somehow + // set to nil *after* construction and Kind() returned an unexpected default. + fmt.Printf("label.Encode: warning - unexpected LabelKind, falling back to direct ZigZagEncode for value: %s\n", l.String()) + return varint.ZigZagEncode(l.value) + } +} + +// Read decodes a label from a buffer `b` that implements the `buf.Read` interface. +// It reads a ZigZag ULEB128 encoded number from the buffer at its current position, +// advances the buffer's position by the number of bytes read, and returns the decoded Label. +// Any errors encountered during varint decoding are propagated. +func Read(b buf.Read) (Label, error) { + bufferBytes := b.Bytes() + currentPosition := b.Position() + + if currentPosition < 0 { + return Label{value: big.NewInt(0)}, errors.New("label: buffer position is negative, cannot read") + } + + // Ensure currentPosition is int for slice indexing, though ZigZagDecode expects int offset. + // This cast is safe if b.Position() is within typical buffer size ranges. + // varint.ZigZagDecode will handle bounds checking against len(bufferBytes). + decodedBigInt, numBytesRead, err := varint.ZigZagDecode(bufferBytes, int(currentPosition)) + if err != nil { + // Return a zero-value Label on error, along with the error itself. + return Label{value: big.NewInt(0)}, fmt.Errorf("label.Read: failed to decode varint: %w", err) + } + + b.IncrementPosition(int64(numBytesRead)) + return New(decodedBigInt), nil +} + +// ToOffset converts a backreference Label into a 0-indexed array/slice offset. +// The Label must represent a valid backreference (i.e., its Kind must be LabelKindBackreference). +// An error is returned if the Label is not a valid backreference (e.g., it's non-negative +// or one of the special markers like Null, Absent, Error), or if its value is too large +// to be represented as an int64 after transformation (highly unlikely for practical offsets). +// The formula used is: offset = -NumericValue(label) + labelToOffsetFactor. +// For example, if labelToOffsetFactor is -4: +// - A label of -4 (smallest valid backref value) gives offset: -(-4) + (-4) = 4 - 4 = 0. +// - A label of -5 gives offset: -(-5) + (-4) = 5 - 4 = 1. +func (l Label) ToOffset() (int64, error) { + if l.value == nil { + return 0, errors.New("label: ToOffset called on uninitialized Label") + } + // A label must be a true backreference to be converted to an offset. + // This means its value must be < lowestReservedBigInt (-3). + if l.Kind() != LabelKindBackreference { + return 0, fmt.Errorf("label: cannot convert label of kind '%s' (value %s) to offset; must be a backreference", l.Kind(), l.String()) + } + + // Perform the calculation: offset = -labelValue + labelToOffsetFactor + negatedLabelVal := new(big.Int).Neg(l.value) + + if !negatedLabelVal.IsInt64() { + // This is extremely unlikely for a backreference offset but check for safety. + return 0, fmt.Errorf("label: negated backreference value %s too large for int64 conversion in ToOffset", negatedLabelVal.String()) + } + + offset := negatedLabelVal.Int64() + labelToOffsetFactor + if offset < 0 { + // This would indicate an issue with labelToOffsetFactor or the input label value, + // as valid backreferences should produce non-negative offsets. + return 0, fmt.Errorf("label: calculated offset %d is negative for label %s; internal logic error or invalid backreference", offset, l.String()) + } + return offset, nil +} + +// Is checks if this label (l) has the same numerical value as another label (other). +// It compares their underlying *big.Int values. +// Handles cases where one or both labels might be uninitialized (value is nil), +// although constructors aim to prevent l.value from being nil. +func (l Label) Is(other Label) bool { + val1 := l.Value() // Use Value() to respect potential nil internal value. + val2 := other.Value() + + if val1 == nil && val2 == nil { + // Both are uninitialized (e.g. zero value Label struct not passed through New*). + // Or if New(nil) resulted in Label{value:nil} (though current New(nil) makes it 0). + return true + } + if val1 == nil || val2 == nil { + // One is initialized, the other is not (or became nil post-construction). + return false + } + // Both have non-nil *big.Int values, compare them. + return val1.Cmp(val2) == 0 +} diff --git a/vendor/github.com/beeper/argo-go/label/wiremarkers.go b/vendor/github.com/beeper/argo-go/label/wiremarkers.go new file mode 100644 index 0000000000..6b5bd092a4 --- /dev/null +++ b/vendor/github.com/beeper/argo-go/label/wiremarkers.go @@ -0,0 +1,37 @@ +package label + +var ( + WireTypeMarkerString Label + WireTypeMarkerBoolean Label + WireTypeMarkerVarint Label + WireTypeMarkerFloat64 Label + WireTypeMarkerBytes Label + WireTypeMarkerFixed Label + WireTypeMarkerBlock Label + WireTypeMarkerNullable Label + WireTypeMarkerArray Label + WireTypeMarkerRecord Label + WireTypeMarkerDesc Label + WireTypeMarkerError Label + WireTypeMarkerPath Label + WireTypeMarkerUnion Label + WireTypeMarkerExtensions Label +) + +func init() { + WireTypeMarkerString = NewFromInt64(-1) + WireTypeMarkerBoolean = NewFromInt64(-2) + WireTypeMarkerVarint = NewFromInt64(-3) + WireTypeMarkerFloat64 = NewFromInt64(-4) + WireTypeMarkerBytes = NewFromInt64(-5) + WireTypeMarkerFixed = NewFromInt64(-6) + WireTypeMarkerBlock = NewFromInt64(-7) + WireTypeMarkerNullable = NewFromInt64(-8) + WireTypeMarkerArray = NewFromInt64(-9) + WireTypeMarkerRecord = NewFromInt64(-10) + WireTypeMarkerDesc = NewFromInt64(-11) + WireTypeMarkerError = NewFromInt64(-12) + WireTypeMarkerPath = NewFromInt64(-13) + WireTypeMarkerUnion = NewFromInt64(-14) + WireTypeMarkerExtensions = NewFromInt64(-15) +} diff --git a/vendor/github.com/beeper/argo-go/pkg/bitset/bitset.go b/vendor/github.com/beeper/argo-go/pkg/bitset/bitset.go new file mode 100644 index 0000000000..7a7de1f690 --- /dev/null +++ b/vendor/github.com/beeper/argo-go/pkg/bitset/bitset.go @@ -0,0 +1,197 @@ +// Package bitset provides a BitSet data structure backed by *big.Int, +// along with helpers for reading and writing bitsets in variable-length +// (self-delimiting) and fixed-length formats. +package bitset + +import ( + "fmt" + "math/big" + + "github.com/beeper/argo-go/pkg/buf" +) + +// BitSet implements a growable set of bits, backed by a *big.Int. +// It provides methods to get, set, and unset individual bits. +// The zero value of a BitSet is not ready for use; always use NewBitSet. +type BitSet struct { + val *big.Int +} + +// NewBitSet creates and initializes a new BitSet to zero. +func NewBitSet() *BitSet { + return &BitSet{val: big.NewInt(0)} +} + +// GetBit returns the boolean value of the bit at the given index. +// It panics if the index is negative. +func (bs *BitSet) GetBit(index int) bool { + if index < 0 { + panic("Bitset index must be positive") + } + return bs.val.Bit(index) == 1 +} + +// SetBit sets the bit at the given index to 1 (true). +// It panics if the index is negative. +// Returns the BitSet pointer for chaining. +func (bs *BitSet) SetBit(index int) *BitSet { + if index < 0 { + panic("Bitset index must be positive") + } + bs.val.SetBit(bs.val, index, 1) + return bs +} + +// UnsetBit sets the bit at the given index to 0 (false). +// It panics if the index is negative. +// Returns the BitSet pointer for chaining. +func (bs *BitSet) UnsetBit(index int) *BitSet { + if index < 0 { + panic("Bitset index must be positive") + } + bs.val.SetBit(bs.val, index, 0) + return bs +} + +// Bytes returns the raw byte representation of the BitSet's underlying *big.Int. +// The bytes are in big-endian order. Returns nil if the BitSet or its internal value is nil. +func (bs *BitSet) Bytes() []byte { + if bs == nil || bs.val == nil { + return nil + } + return bs.val.Bytes() +} + +// VarBitSet provides methods for reading and writing variable-length, self-delimiting bitsets. +// In this format, each byte encodes 7 bits of data, with the least significant bit (LSB) +// acting as a continuation flag (1 means more bytes follow, 0 means this is the last byte). +type VarBitSet struct{} + +// Read reads a variable-length, self-delimiting bitset from a buf.Read. +// It reconstructs the BitSet from bytes where each byte contributes 7 data bits +// and 1 continuation bit. It returns the number of bytes read, the resulting BitSet, +// and any error encountered during reading. +func (v *VarBitSet) Read(buf buf.Read) (int, *BitSet, error) { + bytesRead := 0 + bitset := NewBitSet() + more := true + bitPos := 0 + for more { + byteVal, err := buf.ReadByte() + if err != nil { + return bytesRead, nil, fmt.Errorf("failed to read byte for var bitset: %w", err) + } + bytesRead++ + // byteVal is already a byte, no need to check if <0 or >255 + shiftedVal := new(big.Int).Lsh(big.NewInt(int64((byteVal&0xff)>>1)), uint(bitPos)) + bitset.val.Or(bitset.val, shiftedVal) + bitPos += 7 + more = (byteVal & 1) == 1 + } + return bytesRead, bitset, nil +} + +// Write encodes a BitSet into a variable-length, self-delimiting byte slice. +// Each byte in the output slice contains 7 bits of data from the BitSet and one +// continuation bit (LSB). If the LSB is 1, more bytes follow; if 0, it's the last byte. +// The 'padToLength' argument ensures the output byte slice has at least that many bytes, +// padding with zero bytes (0x00, which represents zero value and no continuation) if necessary. +// Returns an error if the BitSet contains negative values (which is not typical for bitsets). +func (v *VarBitSet) Write(bs *BitSet, padToLength int) ([]byte, error) { + if bs.val.Sign() < 0 { + return nil, fmt.Errorf("Bitsets must only contain positive values") + } + var bytes []byte + // Make a copy to avoid modifying the original + valCopy := new(big.Int).Set(bs.val) + more := valCopy.Sign() > 0 + + for more { + byteValBig := new(big.Int).And(valCopy, big.NewInt(0x7f)) // Get the lowest 7 bits + byteVal := byteValBig.Int64() << 1 // Shift left to make space for the 'more' bit + + valCopy.Rsh(valCopy, 7) // Shift right by 7 bits + more = valCopy.Sign() > 0 + if more { + byteVal = byteVal | 1 // Set the 'more' bit + } + bytes = append(bytes, byte(byteVal)) + } + + if len(bytes) == 0 { // If original value was 0, loop didn't run. + bytes = append(bytes, 0x00) + } + + if padToLength > len(bytes) { + padding := make([]byte, padToLength-len(bytes)) + bytes = append(bytes, padding...) + } + return bytes, nil +} + +// FixedBitSet provides methods for reading and writing fixed-length, undelimited bitsets. +// In this format, all 8 bits of each byte are used for data. +// The total length of the bitset in bytes must be known beforehand for reading. +type FixedBitSet struct{} + +// Write encodes a BitSet into a fixed-length, undelimited byte slice. +// All 8 bits of each byte in the output are used for data from the BitSet. +// The 'padToLength' argument ensures the output byte slice has at least that many bytes, +// padding with zero bytes if necessary. The least significant bytes of the BitSet appear first. +// Returns an error if the BitSet contains negative values. +func (f *FixedBitSet) Write(bs *BitSet, padToLength int) ([]byte, error) { + if bs.val.Sign() < 0 { + return nil, fmt.Errorf("Bitsets must only contain positive values") + } + var bytes []byte + valCopy := new(big.Int).Set(bs.val) + more := valCopy.Sign() > 0 + + for more { + byteValBig := new(big.Int).And(valCopy, big.NewInt(0xff)) // Get the lowest 8 bits + byteVal := byteValBig.Uint64() + valCopy.Rsh(valCopy, 8) // Shift right by 8 bits + more = valCopy.Sign() > 0 + bytes = append(bytes, byte(byteVal)) + } + + if len(bytes) == 0 && padToLength > 0 { // Handle case where bitset is 0 + bytes = append(bytes, 0) + } + + if padToLength > len(bytes) { + padding := make([]byte, padToLength-len(bytes)) + bytes = append(bytes, padding...) + } + return bytes, nil +} + +// Read reconstructs a BitSet from a fixed-length, undelimited sequence of bytes +// within a larger byte slice. 'pos' specifies the starting position in 'bytes', +// and 'length' specifies how many bytes to read to form the bitset. +// All 8 bits of each read byte contribute to the BitSet. +func (f *FixedBitSet) Read(bytes []byte, pos int, length int) (*BitSet, error) { + if pos+length > len(bytes) { + return nil, fmt.Errorf("not enough bytes to read fixed bitset of length %d from pos %d", length, pos) + } + + bitset := NewBitSet() + bitPos := 0 + for i := 0; i < length; i++ { + byteVal := bytes[pos+i] + shiftedVal := new(big.Int).Lsh(big.NewInt(int64(byteVal&0xff)), uint(bitPos)) + bitset.val.Or(bitset.val, shiftedVal) + bitPos += 8 + } + return bitset, nil +} + +// BytesNeededForNumBits calculates the minimum number of bytes required to store +// a fixed-length bitset containing 'numBits' of information. +// This is equivalent to ceil(numBits / 8). +func (f *FixedBitSet) BytesNeededForNumBits(numBits int) int { + if numBits <= 0 { + return 0 + } + return (numBits + 7) / 8 // Equivalent to Math.ceil(numBits / 8) +} diff --git a/vendor/github.com/beeper/argo-go/pkg/buf/buf.go b/vendor/github.com/beeper/argo-go/pkg/buf/buf.go new file mode 100644 index 0000000000..563cbd38a3 --- /dev/null +++ b/vendor/github.com/beeper/argo-go/pkg/buf/buf.go @@ -0,0 +1,420 @@ +package buf + +import ( + "errors" + "io" +) + +// BufPosition defines an interface for types that track a position. +type BufPosition interface { + Position() int64 + SetPosition(position int64) + IncrementPosition(numBytes int64) +} + +// Read defines an interface for readable buffers. +type Read interface { + BufPosition + io.Reader + io.ByteReader + Get(position int64) (byte, error) + Bytes() []byte + Len() int + Peek(n int) ([]byte, error) +} + +// Write defines an interface for writable buffers. +type Write interface { + BufPosition + io.Writer + io.ByteWriter + Cap() int +} + +// Buf is a dynamically-sized byte buffer, wrapping a []byte. +// It manages its own position, logical length, and capacity growth. +type Buf struct { + data []byte // Underlying byte slice + pos int64 // Current read/write position + length int64 // Logical length of the data written (number of valid bytes in data) +} + +const defaultInitialBufferSize = 32 // Or a reasonable default like 16, 32, etc. + +// NewBuf creates a new Buf with an initial capacity. +func NewBuf(initialCapacity int) *Buf { + if initialCapacity < 0 { + initialCapacity = defaultInitialBufferSize + } + return &Buf{ + data: make([]byte, 0, initialCapacity), + pos: 0, + length: 0, + } +} + +// Reset resets the buffer to be empty, +// but it retains the underlying storage for use by future writes by slicing data to zero length. +// Reset also resets the position and logical length to 0. +func (b *Buf) Reset() { + b.data = b.data[:0] // Keeps capacity, sets len to 0 + b.pos = 0 + b.length = 0 +} + +// Position returns the current position in the buffer. +func (b *Buf) Position() int64 { + return b.pos +} + +// SetPosition sets the current position in the buffer. +// No bounds checking is performed on the position value itself, +// but subsequent operations (Read/Write) will handle boundaries. +func (b *Buf) SetPosition(position int64) { + b.pos = position +} + +// IncrementPosition increments the current position by numBytes. +func (b *Buf) IncrementPosition(numBytes int64) { + b.pos += numBytes +} + +// ensureCapacity ensures that the buffer has at least minCapacity. +// If the current capacity is insufficient, it grows the buffer, +// preserving the existing content up to b.length. +// After this call, cap(b.data) will be at least minCapacity, +// and len(b.data) will remain b.length (the old logical length). +func (b *Buf) ensureCapacity(minCapacity int64) { + currentCap := int64(cap(b.data)) + if currentCap >= minCapacity { + return + } + + newActualCap := currentCap + if newActualCap == 0 { + // If starting from zero capacity, choose a small default or minCapacity. + // Using a small default (e.g., 16) avoids too many small allocations + // if minCapacity is also very small. + if minCapacity < 16 { + newActualCap = 16 + } else { + newActualCap = minCapacity + } + } + + // Grow similar to Go's append strategy: double capacity until it's sufficient. + for newActualCap < minCapacity { + if newActualCap == 0 { // Should have been handled by initial assignment if currentCap was 0 + newActualCap = minCapacity // Fallback if somehow 0 + break + } + newActualCap *= 2 + if newActualCap < 0 { // Overflow check + newActualCap = minCapacity // Max possible if overflow + break + } + } + // Final check if doubling overshot significantly but minCapacity is larger. + if newActualCap < minCapacity { + newActualCap = minCapacity + } + + // Create new slice with new capacity, copy content up to current logical length (b.length). + // len of newData will be b.length. + newData := make([]byte, b.length, newActualCap) + if b.length > 0 { + copy(newData, b.data[:b.length]) + } + b.data = newData +} + +// Read reads up to len(p) bytes into p from the current position. +// It returns the number of bytes read and any error encountered. +// EOF is returned when no more bytes are available from the current position within the logical length. +func (b *Buf) Read(p []byte) (n int, err error) { + if b.pos < 0 { + // Reading from a negative position is invalid. + return 0, io.EOF // Or a specific error like "invalid position" + } + + // Per io.Reader contract, if len(p) == 0, Read should return n == 0 and err == nil. + if len(p) == 0 { + return 0, nil + } + + if b.pos >= b.length { + // Position is at or beyond the logical end of the buffer. + return 0, io.EOF + } + + readableBytes := b.length - b.pos + numToRead := int64(len(p)) + + if numToRead > readableBytes { + numToRead = readableBytes + } + + // This check is now effectively for numToRead > 0 after potentially being capped by readableBytes. + // If readableBytes was 0, b.pos >= b.length would have caught it. + // If len(p) was initially > 0 but numToRead became 0 due to readableBytes, it implies EOF. + if numToRead <= 0 { + return 0, io.EOF + } + + copy(p, b.data[b.pos:b.pos+numToRead]) + b.pos += numToRead + return int(numToRead), nil +} + +// WriteBuf writes the content of bb into b at the current position. +// It updates b's position and length accordingly. +// Returns the number of bytes written from bb and any error encountered. +func (b *Buf) WriteBuf(bb *Buf) (n int, err error) { + return b.Write(bb.Bytes()) +} + +// Write writes len(p) bytes from p to the buffer at the current position. +// It returns the number of bytes written and any error encountered. +// If the write extends beyond the current logical length, the buffer's logical length is updated. +// If the write starts beyond the current logical length, the gap is filled with zeros. +func (b *Buf) Write(p []byte) (n int, err error) { + numBytesToWrite := len(p) + if numBytesToWrite == 0 { + return 0, nil + } + + if b.pos < 0 { + // Writing to a negative position is invalid. + // Consider returning an error or panicking, as this indicates misuse. + return 0, errors.New("argo.Buf.Write: negative position") + } + + endPos := b.pos + int64(numBytesToWrite) + + newLogicalLength := b.length + if endPos > newLogicalLength { + newLogicalLength = endPos + } + + if newLogicalLength > int64(cap(b.data)) { + b.ensureCapacity(newLogicalLength) + // After ensureCapacity, cap(b.data) >= newLogicalLength, + // and len(b.data) == b.length (the old logical length). + } + + // Ensure len(b.data) is sufficient for the newLogicalLength. + // Reslicing b.data up to newLogicalLength will zero-fill any new bytes + // between the old b.length and newLogicalLength if newLogicalLength > len(b.data). + // This handles padding if b.pos > old b.length. + if newLogicalLength > int64(len(b.data)) { + b.data = b.data[:newLogicalLength] + } + // Now len(b.data) == newLogicalLength, and any extended parts are zero-initialized. + + copy(b.data[b.pos:], p) + + b.length = newLogicalLength + b.pos = endPos + + return numBytesToWrite, nil +} + +// ReadByte reads and returns the next byte from the current position. +// If no byte is available, it returns error io.EOF. +func (b *Buf) ReadByte() (byte, error) { + if b.pos < 0 { + return 0, io.EOF + } + if b.pos >= b.length { + return 0, io.EOF + } + val := b.data[b.pos] + b.pos++ + return val, nil +} + +// WriteByte writes a single byte to the buffer at the current position. +func (b *Buf) WriteByte(c byte) error { + if b.pos < 0 { + return errors.New("argo.Buf.WriteByte: negative position") + } + + endPos := b.pos + 1 + newLogicalLength := b.length + if endPos > newLogicalLength { + newLogicalLength = endPos + } + + if newLogicalLength > int64(cap(b.data)) { + b.ensureCapacity(newLogicalLength) + } + if newLogicalLength > int64(len(b.data)) { + b.data = b.data[:newLogicalLength] + } + + b.data[b.pos] = c + + b.length = newLogicalLength + b.pos = endPos + return nil +} + +// Get returns the byte at the given absolute position in the buffer, +// without advancing the current position. +// Position is relative to the start of the buffer's logical content. +func (b *Buf) Get(position int64) (byte, error) { + if position < 0 || position >= b.length { + return 0, io.EOF + } + return b.data[position], nil +} + +// Bytes returns a slice of all logical bytes currently in the buffer. +// The returned slice is valid until the next write operation that might cause reallocation. +func (b *Buf) Bytes() []byte { + return b.data[:b.length] +} + +// Len returns the current logical length of the buffer (number of bytes written). +func (b *Buf) Len() int { + return int(b.length) +} + +// Cap returns the current capacity of the buffer's underlying storage. +func (b *Buf) Cap() int { + return cap(b.data) +} + +// Peek returns the next n bytes from the current position without advancing the reader. +// The returned slice shares the underlying array of the buffer. +// If n is larger than the available bytes, Peek returns all available bytes. +func (b *Buf) Peek(n int) ([]byte, error) { + if n < 0 { + return nil, errors.New("argo.Buf.Peek: count cannot be negative") + } + if n == 0 { + return []byte{}, nil + } + + if b.pos < 0 || b.pos >= b.length { + return nil, io.EOF // No bytes to peek if position is invalid or at/past end. + } + + available := b.length - b.pos + + if int64(n) > available { + return b.data[b.pos : b.pos+available], nil + } + return b.data[b.pos : b.pos+int64(n)], nil +} + +// BufReadonly is a read-only wrapper around a byte slice. +// It's analogous to TypeScript's BufReadonly class. +type BufReadonly struct { + bytes []byte + pos int64 +} + +// NewBufReadonly creates a new BufReadonly wrapping the given byte slice. +// The provided slice is used directly and should not be modified externally +// if read-only behavior is to be guaranteed. +func NewBufReadonly(data []byte) *BufReadonly { + return &BufReadonly{bytes: data, pos: 0} // Initialize pos to 0 +} + +// Position returns the current position in the buffer. +func (br *BufReadonly) Position() int64 { + return br.pos +} + +// SetPosition sets the current position in the buffer. +func (br *BufReadonly) SetPosition(position int64) { + br.pos = position +} + +// IncrementPosition increments the current position by numBytes. +func (br *BufReadonly) IncrementPosition(numBytes int64) { + br.pos += numBytes +} + +// Read reads up to len(p) bytes into p. It returns the number of bytes +// read (0 <= n <= len(p)) and any error encountered. +// If the buffer's read position is negative, it returns (0, io.EOF). +func (br *BufReadonly) Read(p []byte) (n int, err error) { + if br.pos < 0 { + return 0, io.EOF + } + if br.pos >= int64(len(br.bytes)) { + return 0, io.EOF + } + copied := copy(p, br.bytes[br.pos:]) + br.pos += int64(copied) + return copied, nil +} + +// ReadByte reads and returns the next byte from the buffer. +// If no byte is available, it returns error io.EOF. +// If the buffer's read position is negative, it returns (0, io.EOF). +func (br *BufReadonly) ReadByte() (byte, error) { + if br.pos < 0 { + return 0, io.EOF + } + if br.pos >= int64(len(br.bytes)) { + return 0, io.EOF + } + val := br.bytes[br.pos] + br.pos++ + return val, nil +} + +// Get returns the byte at the given absolute position in the buffer, +// without advancing the current position. +func (br *BufReadonly) Get(position int64) (byte, error) { + if position < 0 || position >= int64(len(br.bytes)) { + return 0, io.EOF + } + return br.bytes[position], nil +} + +// Bytes returns all bytes in the buffer, regardless of position. +func (br *BufReadonly) Bytes() []byte { + return br.bytes +} + +// Len returns the total length of the underlying byte slice. +func (br *BufReadonly) Len() int { + return len(br.bytes) +} + +// Peek returns the next n bytes without advancing the reader. +// If n is negative, an error is returned. If n is 0, Peek returns an empty slice and no error. +// If the buffer's read position is out of bounds (negative or >= len(br.bytes)), it returns (nil, io.EOF). +// If n is larger than the available bytes from br.pos, Peek returns all available bytes and no error. +func (br *BufReadonly) Peek(n int) ([]byte, error) { + if n < 0 { + return nil, errors.New("argo.BufReadonly.Peek: count cannot be negative") + } + if n == 0 { + return []byte{}, nil + } + if br.pos < 0 || br.pos >= int64(len(br.bytes)) { + return nil, io.EOF + } + + available := int64(len(br.bytes)) - br.pos + if available <= 0 { // Should be covered by above check, but good for safety. + return nil, io.EOF + } + + if int64(n) > available { + return br.bytes[br.pos : br.pos+available], nil + } + return br.bytes[br.pos : br.pos+int64(n)], nil +} + +// Make sure Buf implements Read and Write +var _ Read = (*Buf)(nil) +var _ Write = (*Buf)(nil) + +// Make sure BufReadonly implements Read +var _ Read = (*BufReadonly)(nil) diff --git a/vendor/github.com/beeper/argo-go/pkg/varint/varint.go b/vendor/github.com/beeper/argo-go/pkg/varint/varint.go new file mode 100644 index 0000000000..167834ef92 --- /dev/null +++ b/vendor/github.com/beeper/argo-go/pkg/varint/varint.go @@ -0,0 +1,246 @@ +// Package varint implements ULEB128 (Unsigned Little Endian Base 128) +// and ZigZag encoding/decoding for arbitrary-precision integers (*big.Int) +// and standard integer types (uint64, int64). +// ULEB128 is a variable-length encoding for unsigned integers. +// ZigZag encoding maps signed integers to unsigned integers so they +// can be efficiently encoded using ULEB128. +package varint + +import ( + "errors" + "math/big" +) + +// Pre-allocate common big.Int values to reduce allocations in loops/checks. +var ( + big0 = big.NewInt(0) + big1 = big.NewInt(1) + big7f = big.NewInt(0x7f) // 127 + big80 = big.NewInt(0x80) // 128 + bigNeg1 = big.NewInt(-1) // Used for ~0 equivalent in Xor + + // Constants for BytesNeeded + uMax1 = big.NewInt(0x7f) + uMax2 = big.NewInt(0x3fff) + uMax3 = big.NewInt(0x1fffff) + uMax4 = big.NewInt(0xfffffff) + uMax5 = big.NewInt(0x7ffffffff) + uMax6 = big.NewInt(0x3ffffffffff) + uMax7 = big.NewInt(0x1ffffffffffff) + uMax8 = big.NewInt(0xffffffffffffff) + uMax9 = big.NewInt(0x7fffffffffffffff) // This is MaxInt64, last one before needing more than 9 bytes for typical uint64 range +) + +// UnsignedBytesNeeded calculates the number of bytes required to ULEB128 encode n. +func UnsignedBytesNeeded(n *big.Int) int { + if n.Cmp(uMax1) <= 0 { + return 1 + } + if n.Cmp(uMax2) <= 0 { + return 2 + } + if n.Cmp(uMax3) <= 0 { + return 3 + } + if n.Cmp(uMax4) <= 0 { + return 4 + } + if n.Cmp(uMax5) <= 0 { + return 5 + } + if n.Cmp(uMax6) <= 0 { + return 6 + } + if n.Cmp(uMax7) <= 0 { + return 7 + } + if n.Cmp(uMax8) <= 0 { + return 8 + } + if n.Cmp(uMax9) <= 0 { + return 9 + } // Max value for 9 bytes is 2^63-1 + + // General case for numbers larger than 2^63-1 + needed := 0 + // Create a copy to avoid modifying the input n + tempN := new(big.Int).Set(n) + for tempN.Cmp(big0) > 0 { + needed++ + tempN.Rsh(tempN, 7) + } + return needed +} + +// UnsignedEncode ULEB128 encodes n into a new byte slice. +func UnsignedEncode(n *big.Int) []byte { + length := UnsignedBytesNeeded(n) + buf := make([]byte, length) + UnsignedEncodeInto(n, buf, 0) + return buf +} + +// UnsignedEncodeInto ULEB128 encodes n into the provided buffer buf starting at offset. +// It returns the number of bytes written. +// Panics if the buffer is too small. Callers should ensure buf has enough space, +// e.g., by using UnsignedBytesNeeded. +func UnsignedEncodeInto(n *big.Int, buf []byte, offset int) int { + // Create a copy to avoid modifying the input n + tempN := new(big.Int).Set(n) + pos := offset + + // Use a temporary big.Int for calculations to avoid allocations in the loop + octet := new(big.Int) + + for { + octet.And(tempN, big7f) // octet = tempN & 0x7f + tempN.Rsh(tempN, 7) // tempN = tempN >> 7 + + if pos >= len(buf) { + panic("varint: buffer too small for UnsignedEncodeInto") + } + + if tempN.Cmp(big0) == 0 { // No more bits to encode + buf[pos] = byte(octet.Uint64()) // No continuation bit + pos++ + break + } else { + // There are more bits, so set the continuation bit (0x80) + octet.Or(octet, big80) + buf[pos] = byte(octet.Uint64()) + pos++ + } + } + return pos - offset +} + +// UnsignedDecode ULEB128 decodes a number from buf starting at offset. +// It returns the decoded number, the number of bytes read, and an error if any. +func UnsignedDecode(buf []byte, offset int) (result *big.Int, length int, err error) { + result = big.NewInt(0) + var shift uint = 0 + pos := offset + + // Use a temporary big.Int for calculations to avoid allocations in the loop + octetVal := new(big.Int) + + for { + if pos >= len(buf) { + return nil, 0, errors.New("varint: buffer too short for UnsignedDecode") + } + octet := buf[pos] + pos++ + + // Get the 7-bit value part + octetVal.SetInt64(int64(octet & 0x7F)) + + // Shift it and OR into the result + octetVal.Lsh(octetVal, shift) + result.Or(result, octetVal) + + if (octet & 0x80) == 0 { // Check continuation bit + return result, pos - offset, nil + } + + shift += 7 + // Protect against varints that are too long for a 256-bit number (max 37 bytes). + // Max shift for data in the 37th byte is (37-1)*7 = 252. + // shift > 252 indicates processing beyond the 37th byte. + // (pos - offset) > 37 indicates more than 37 bytes read. + if shift > 63 && (pos-offset) > 9 { + return nil, 0, errors.New("varint: varint too large for 64-bit") + } + } +} + +// --- ZigZag Encoding --- + +// toZigZag converts a signed integer n to an unsigned integer suitable for ULEB128 encoding. +func toZigZag(n *big.Int) *big.Int { + if n.BitLen() > 63 { // keep parity with Erlang’s 64-bit limit + panic("varint: value out of int64 range") + } + res := new(big.Int).Lsh(n, 1) + if n.Sign() < 0 { + res.Xor(res, bigNeg1) + } + return res.And(res, big.NewInt(0).SetUint64(^uint64(0))) // mask 64 bits +} + +// fromZigZag converts an unsigned integer n (decoded from ULEB128) back to a signed integer. +func fromZigZag(n *big.Int) *big.Int { + res := new(big.Int) + temp := new(big.Int).And(n, big1) + + res.Rsh(n, 1) + if temp.Cmp(big1) == 0 { // If the last bit of n is 1 (sign bit for negative original) + // ^ (~0) which is XOR with -1 for big.Int + res.Xor(res, bigNeg1) + } + return res +} + +// ZigZagEncode encodes a signed integer n using ZigZag and ULEB128. +func ZigZagEncode(n *big.Int) []byte { + zz := toZigZag(n) + return UnsignedEncode(zz) +} + +// ZigZagEncodeInto encodes a signed integer n into buf using ZigZag and ULEB128. +// Returns the number of bytes written. +// Panics if the buffer is too small. +func ZigZagEncodeInto(n *big.Int, buf []byte, offset int) int { + zz := toZigZag(n) + return UnsignedEncodeInto(zz, buf, offset) +} + +// ZigZagDecode decodes a ZigZag-ULEB128 encoded number from buf. +// Returns the decoded signed number, bytes read, and an error. +func ZigZagDecode(buf []byte, offset int) (result *big.Int, length int, err error) { + unsignedVal, l, err := UnsignedDecode(buf, offset) + if err != nil { + return nil, 0, err + } + return fromZigZag(unsignedVal), l, nil +} + +// --- Convenience functions for int64/uint64 if needed --- +// These are often useful as big.Int can be overkill for common integer sizes. + +// UnsignedEncodeUint64 ULEB128 encodes a uint64. +func UnsignedEncodeUint64(val uint64) []byte { + n := new(big.Int).SetUint64(val) + return UnsignedEncode(n) +} + +// UnsignedDecodeToUint64 ULEB128 decodes to a uint64. +// Returns an error if the decoded value overflows uint64. +func UnsignedDecodeToUint64(buf []byte, offset int) (result uint64, length int, err error) { + bn, l, err := UnsignedDecode(buf, offset) + if err != nil { + return 0, 0, err + } + if !bn.IsUint64() { + return 0, l, errors.New("varint: value overflows uint64") + } + return bn.Uint64(), l, nil +} + +// ZigZagEncodeInt64 encodes an int64 using ZigZag and ULEB128. +func ZigZagEncodeInt64(val int64) []byte { + n := big.NewInt(val) + return ZigZagEncode(n) +} + +// ZigZagDecodeToInt64 decodes a ZigZag-ULEB128 encoded number to int64. +// Returns an error if the decoded value overflows int64. +func ZigZagDecodeToInt64(buf []byte, offset int) (result int64, length int, err error) { + bn, l, err := ZigZagDecode(buf, offset) + if err != nil { + return 0, 0, err + } + if !bn.IsInt64() { + return 0, l, errors.New("varint: value overflows int64") + } + return bn.Int64(), l, nil +} diff --git a/vendor/github.com/beeper/argo-go/wire/wire.go b/vendor/github.com/beeper/argo-go/wire/wire.go new file mode 100644 index 0000000000..19649acdd5 --- /dev/null +++ b/vendor/github.com/beeper/argo-go/wire/wire.go @@ -0,0 +1,614 @@ +// Package wire defines the fundamental Argo wire types, such as String, Varint, Record, Array, etc., +// and provides utilities for working with these types. It forms the basis for how Argo data +// is structured and represented before being encoded or after being decoded. +package wire + +import ( + "fmt" + "math/big" + "strings" + + "github.com/beeper/argo-go/label" +) + +// BlockKey is a type alias for string, representing a key used to identify a block +// in an Argo stream. This key is often used for deduplication and referencing. +// For example, a block of strings might have the key "String". +type BlockKey string + +// TypeKey is a string constant representing the kind of an Argo wire type. +// Each distinct wire type (e.g., StringType, ArrayType) has a unique TypeKey. +// This is used for type assertions and type-based dispatch. +type TypeKey string + +const ( + // Primitive types + + // TypeKeyString represents the wire type for UTF-8 encoded strings. + TypeKeyString TypeKey = "STRING" + // TypeKeyBoolean represents the wire type for boolean values (true or false). + TypeKeyBoolean TypeKey = "BOOLEAN" + // TypeKeyVarint represents the wire type for variable-length integers. + TypeKeyVarint TypeKey = "VARINT" + // TypeKeyFloat64 represents the wire type for 64-bit floating-point numbers (IEEE 754). + TypeKeyFloat64 TypeKey = "FLOAT64" + // TypeKeyBytes represents the wire type for opaque byte arrays. + TypeKeyBytes TypeKey = "BYTES" + // TypeKeyPath represents the wire type for GraphQL paths, used for referring to specific locations within a data structure. + TypeKeyPath TypeKey = "PATH" + + // Compound types + + // TypeKeyFixed represents the wire type for fixed-length byte arrays. + TypeKeyFixed TypeKey = "FIXED" + // TypeKeyBlock represents a block, which is a sequence of values of the same underlying type. + // Blocks can optionally be deduplicated. + TypeKeyBlock TypeKey = "BLOCK" + // TypeKeyNullable represents a wire type that can hold a value of another type or be explicitly null. + TypeKeyNullable TypeKey = "NULLABLE" + // TypeKeyArray represents an ordered sequence of values, all of the same underlying type. + TypeKeyArray TypeKey = "ARRAY" + // TypeKeyRecord represents a structured collection of named fields, where each field has its own wire type. + TypeKeyRecord TypeKey = "RECORD" + // TypeKeyDesc represents a self-describing value, where the value itself carries its type information. + TypeKeyDesc TypeKey = "DESC" + // TypeKeyExtensions represents an extension + TypeKeyExtensions TypeKey = "EXTENSIONS" +) + +// AbsentValue is a sentinel value used to indicate that an omittable field in a RecordType +// was not present during decoding. Functions that decode record fields can return +// (AbsentValue, nil) to signal this absence without it being an error. +// It is a pointer to an empty struct to ensure it's a unique, comparable value. +var AbsentValue interface{} = &struct{}{} + +// Type is the core interface implemented by all Argo wire types. +// It provides a way to get the TypeKey of the wire type and includes an unexported +// marker method (isWireType) to ensure that only types defined within this package +// can satisfy the interface. This helps maintain a closed set of known wire types. +type Type interface { + GetTypeKey() TypeKey + isWireType() // Unexported marker method to restrict implementations to this package. +} + +// --- Primitive Types --- + +// StringType represents the Argo wire type for UTF-8 encoded strings. +// It implements the Type interface. +// Use the global String instance for this type. +type StringType struct{} + +func (StringType) GetTypeKey() TypeKey { return TypeKeyString } +func (StringType) isWireType() {} + +// BooleanType represents the Argo wire type for boolean values (true or false). +// It implements the Type interface. +// Use the global Boolean instance for this type. +type BooleanType struct{} + +func (BooleanType) GetTypeKey() TypeKey { return TypeKeyBoolean } +func (BooleanType) isWireType() {} + +// VarintType represents the Argo wire type for variable-length integers. +// It implements the Type interface. +// Use the global Varint instance for this type. +type VarintType struct{} + +func (VarintType) GetTypeKey() TypeKey { return TypeKeyVarint } +func (VarintType) isWireType() {} + +// Float64Type represents the Argo wire type for 64-bit floating-point numbers (IEEE 754). +// It implements the Type interface. +// Use the global Float64 instance for this type. +type Float64Type struct{} + +func (Float64Type) GetTypeKey() TypeKey { return TypeKeyFloat64 } +func (Float64Type) isWireType() {} + +// BytesType represents the Argo wire type for opaque byte arrays. +// It implements the Type interface. +// Use the global Bytes instance for this type. +type BytesType struct{} + +func (BytesType) GetTypeKey() TypeKey { return TypeKeyBytes } +func (BytesType) isWireType() {} + +// PathType represents the Argo wire type for Argo paths. +// Paths are used for referring to specific locations within a data structure. +// It implements the Type interface. +// Use the global Path instance for this type. +type PathType struct{} + +func (PathType) GetTypeKey() TypeKey { return TypeKeyPath } +func (PathType) isWireType() {} + +// DescType represents the Argo wire type for self-describing values. +// A self-describing value carries its type information along with the data. +// It implements the Type interface. +// Use the global Desc instance for this type. +type DescType struct{} + +func (DescType) GetTypeKey() TypeKey { return TypeKeyDesc } +func (DescType) isWireType() {} + +// ExtensionsType represents the Argo wire type for extensions. +// It implements the Type interface. +// Use the global Extensions instance for this type. +type ExtensionsType struct{} + +func (ExtensionsType) GetTypeKey() TypeKey { return TypeKeyExtensions } +func (ExtensionsType) isWireType() {} + +// --- Global instances of primitive types --- + +// Global pre-allocated instances of primitive wire types. +// These should be used instead of creating new zero-value structs of these types. +var ( + String Type = StringType{} // String is the global instance of StringType. + Boolean Type = BooleanType{} // Boolean is the global instance of BooleanType. + Varint Type = VarintType{} // Varint is the global instance of VarintType. + Float64 Type = Float64Type{} // Float64 is the global instance of Float64Type. + Bytes Type = BytesType{} // Bytes is the global instance of BytesType. + Path Type = PathType{} // Path is the global instance of PathType. + Desc Type = DescType{} // Desc is the global instance of DescType. + Extensions Type = ExtensionsType{} +) + +// --- Compound Types --- + +// FixedType represents the Argo wire type for fixed-length byte arrays. +// The Length field specifies the exact number of bytes this type represents. +// It implements the Type interface. +type FixedType struct { + Length int +} + +func (FixedType) GetTypeKey() TypeKey { return TypeKeyFixed } +func (FixedType) isWireType() {} + +// BlockType represents an Argo block, which is a sequence of values all of the same underlying type (Of). +// Blocks have a Key for identification and potential deduplication. +// The Dedupe flag indicates whether values within this block are subject to deduplication. +// It implements the Type interface. +type BlockType struct { + Of Type + Key BlockKey + Dedupe bool +} + +func (BlockType) GetTypeKey() TypeKey { return TypeKeyBlock } +func (BlockType) isWireType() {} + +// ArrayType represents an Argo array, which is an ordered sequence of values, +// all of the same underlying type (Of). +// It implements the Type interface. +type ArrayType struct { + Of Type +} + +func (ArrayType) GetTypeKey() TypeKey { return TypeKeyArray } +func (ArrayType) isWireType() {} + +// NullableType represents an Argo wire type that can either hold a value of another type (Of) +// or be explicitly null. +// It implements the Type interface. +type NullableType struct { + Of Type +} + +func (NullableType) GetTypeKey() TypeKey { return TypeKeyNullable } +func (NullableType) isWireType() {} + +// Field defines a single field within a RecordType. +// It has a Name, an underlying wire Type (Of), and an Omittable flag. +// If Omittable is true, the field may be absent from an encoded record. +type Field struct { + Name string + Of Type + Omittable bool +} + +// RecordType represents an Argo record, a structured collection of named Fields. +// Each field has its own wire type. The order of fields in the Fields slice is significant. +// It implements the Type interface. +type RecordType struct { + Fields []Field +} + +func (RecordType) GetTypeKey() TypeKey { return TypeKeyRecord } +func (RecordType) isWireType() {} + +// --- Helper functions for creating types --- + +// NewBlockType is a constructor function that creates and returns a new BlockType. +// It initializes the BlockType with the specified underlying type (of), +// block key (key), and deduplication flag (dedupe). +func NewBlockType(of Type, key BlockKey, dedupe bool) BlockType { + return BlockType{Of: of, Key: key, Dedupe: dedupe} +} + +// NewNullableType is a constructor function that creates and returns a new NullableType. +// It initializes the NullableType with the specified underlying type (of) +// that can be made nullable. +func NewNullableType(of Type) NullableType { + return NullableType{Of: of} +} + +// DeduplicateByDefault determines whether a given wire type (t) should have +// its corresponding BlockType deduplicated by default. +// Primitive types like String and Bytes are typically deduplicated by default. +// Other types like numbers or booleans usually are not. +// This function returns an error for types like Array or Record, for which +// block-level deduplication is not directly applicable or meaningful in the same way. +func DeduplicateByDefault(t Type) (bool, error) { + switch t.GetTypeKey() { + case TypeKeyString, TypeKeyBytes: + return true, nil + case TypeKeyBoolean, TypeKeyVarint, TypeKeyFloat64, TypeKeyPath, TypeKeyFixed, TypeKeyDesc: + return false, nil + default: + return false, fmt.Errorf("programmer error: DeduplicateByDefault does not make sense for type %s", t.GetTypeKey()) + } +} + +// MustDeduplicateByDefault is a helper function that calls DeduplicateByDefault(t) +// and panics if an error occurs. This is intended for use during package initialization +// where an error from DeduplicateByDefault would indicate a programming error in defining +// default deduplication behavior for core types. +func MustDeduplicateByDefault(t Type) bool { + val, err := DeduplicateByDefault(t) + if err != nil { + panic(fmt.Sprintf("initialization error for DeduplicateByDefault: %v", err)) + } + return val +} + +// --- Global instances of commonly used complex types --- + +// Global pre-allocated instances of frequently used complex wire types. +// These are initialized in the init function. +var ( + // VarintBlock is a block of Varint values, keyed as "Int", with default deduplication. + VarintBlock Type + // Location is a RecordType representing a line and column, often used for error reporting. + // Both fields use VarintBlock. + Location Type + // Error is a RecordType representing a structured error, potentially including a message, + // locations, a path, and extensions. + Error Type +) + +// init initializes the global complex type instances like VarintBlock, Location, and Error. +// This ensures they are ready for use as soon as the package is imported. +func init() { + VarintBlock = NewBlockType(Varint, "Int", MustDeduplicateByDefault(Varint)) + + Location = RecordType{ + Fields: []Field{ + {Name: "line", Of: VarintBlock, Omittable: false}, + {Name: "column", Of: VarintBlock, Omittable: false}, + }, + } + + stringBlock := NewBlockType(String, "String", MustDeduplicateByDefault(String)) + locationArray := ArrayType{Of: Location} + + Error = RecordType{ + Fields: []Field{ + {Name: "message", Of: stringBlock, Omittable: false}, + {Name: "locations", Of: locationArray, Omittable: true}, + {Name: "path", Of: Path, Omittable: true}, + {Name: "extensions", Of: Desc, Omittable: true}, + }, + } +} + +// --- Type guard functions --- + +// IsString checks if the given Type is StringType. Returns true if it is, false otherwise. +func IsString(t Type) bool { return t.GetTypeKey() == TypeKeyString } + +// IsBoolean checks if the given Type is BooleanType. Returns true if it is, false otherwise. +func IsBoolean(t Type) bool { return t.GetTypeKey() == TypeKeyBoolean } + +// IsVarint checks if the given Type is VarintType. Returns true if it is, false otherwise. +func IsVarint(t Type) bool { return t.GetTypeKey() == TypeKeyVarint } + +// IsFloat64 checks if the given Type is Float64Type. Returns true if it is, false otherwise. +func IsFloat64(t Type) bool { return t.GetTypeKey() == TypeKeyFloat64 } + +// IsBytes checks if the given Type is BytesType. Returns true if it is, false otherwise. +func IsBytes(t Type) bool { return t.GetTypeKey() == TypeKeyBytes } + +// IsPath checks if the given Type is PathType. Returns true if it is, false otherwise. +func IsPath(t Type) bool { return t.GetTypeKey() == TypeKeyPath } + +// IsFixed checks if the given Type is FixedType. Returns true if it is, false otherwise. +func IsFixed(t Type) bool { return t.GetTypeKey() == TypeKeyFixed } + +// IsDesc checks if the given Type is DescType. Returns true if it is, false otherwise. +func IsDesc(t Type) bool { return t.GetTypeKey() == TypeKeyDesc } + +// IsBlock checks if the given Type is BlockType. Returns true if it is, false otherwise. +func IsBlock(t Type) bool { return t.GetTypeKey() == TypeKeyBlock } + +// IsArray checks if the given Type is ArrayType. Returns true if it is, false otherwise. +func IsArray(t Type) bool { return t.GetTypeKey() == TypeKeyArray } + +// IsNullable checks if the given Type is NullableType. Returns true if it is, false otherwise. +func IsNullable(t Type) bool { return t.GetTypeKey() == TypeKeyNullable } + +// IsRecord checks if the given Type is RecordType. Returns true if it is, false otherwise. +func IsRecord(t Type) bool { return t.GetTypeKey() == TypeKeyRecord } + +// IsLabeled checks if values of the given wire type (wt) are expected to start with a Label +// in the Argo binary encoding. This is true for types like Nullable, String, Boolean, Bytes, and Array. +// For a BlockType, it recursively checks if the underlying element type is labeled. +// It panics if it encounters a BlockType that doesn't conform to the expected structure +// (which indicates a programming error). +// Other types (e.g., Varint, Float64, Fixed, Path, Desc, Record) are not directly prefixed by a Label. +func IsLabeled(wt Type) bool { + switch wt.GetTypeKey() { + case TypeKeyNullable, TypeKeyString, TypeKeyBoolean, TypeKeyBytes, TypeKeyArray: + return true + case TypeKeyBlock: + if bt, ok := wt.(BlockType); ok { + return IsLabeled(bt.Of) + } + // Should not happen if type system is used correctly + panic(fmt.Sprintf("IsLabeled: expected BlockType, got %T", wt)) + default: + return false + } +} + +// Print generates a human-readable string representation of a wire type (wt). +// It formats the type structure with indentation for readability, useful for debugging +// or displaying type information. +// Example: +// RECORD ( +// +// "field1": STRING +// "field2": NULLABLE ( +// VARINT +// ) +// +// ) +func Print(wt Type) string { + return printRecursive(wt, 0) +} + +// printRecursive is a helper for Print. It recursively builds the string representation +// of a wire type, using the 'indent' parameter to manage nesting levels for compound types +// like Record, Array, Block, and Nullable. +func printRecursive(wt Type, indent int) string { + indentStr := func(plus int) string { + return strings.Repeat(" ", indent+plus) + } + + inner := func() string { + switch t := wt.(type) { + case StringType, VarintType, BooleanType, Float64Type, BytesType, PathType, DescType, ExtensionsType: + return string(t.GetTypeKey()) + case NullableType: + // The TS version `recurse(wt.of) + '?'` implies the recursed string includes its own indent. + return printRecursive(t.Of, indent+1) + "?" + case FixedType: + return fmt.Sprintf("%s(%d)", t.GetTypeKey(), t.Length) + case BlockType: + // The TS version `recurse(wt.of) + (wt.dedupe ? '<' : '{') + wt.key + (wt.dedupe ? '>' : '}')` + // implies the recursed string includes its own indent. + brackets := "{}" + if t.Dedupe { + brackets = "<>" + } + return printRecursive(t.Of, indent+1) + string(brackets[0]) + string(t.Key) + string(brackets[1]) + case ArrayType: + // The TS version `recurse(wt.of) + '[]'` implies the recursed string includes its own indent. + return printRecursive(t.Of, indent+1) + "[]" + case RecordType: + var fieldStrings []string + for _, field := range t.Fields { + omittableMarker := "" + if field.Omittable { + omittableMarker = "?" + } + // TS: `${name}${omittable ? '?' : ''}: ${recurse(type).trimStart()}` + // Here, trim the leading space from the recursive call to align field type info. + fieldTypeStr := strings.TrimSpace(printRecursive(field.Of, indent+1)) + fieldStrings = append(fieldStrings, + fmt.Sprintf("%s%s%s: %s", indentStr(1), field.Name, omittableMarker, fieldTypeStr), + ) + } + return "{\n" + strings.Join(fieldStrings, "\n") + "\n" + indentStr(0) + "}" + default: + panic(fmt.Sprintf("programmer error: printRecursive can't handle type %T with key %s", wt, wt.GetTypeKey())) + } + } + return indentStr(0) + inner() +} + +// PathToWirePath converts a human-readable path (a slice of strings and integers representing +// record field names and array indices) into a wire path (a slice of integers representing +// field/element indices) for a given wire type (wt). +// This is used to translate a user-friendly path into the compact numerical representation +// used in the Argo binary format (e.g., for error reporting or targeted data access). +// Returns an error if the path is invalid for the given wire type (e.g., a string field name +// used for an array, or an index out of bounds). +func PathToWirePath(wt Type, path []interface{}) ([]int, error) { + if len(path) == 0 { + return []int{}, nil + } + + current := path[0] + tail := path[1:] + + switch t := wt.(type) { + case BlockType: + return PathToWirePath(t.Of, path) // Pass full path, block doesn't consume a path element + case NullableType: + return PathToWirePath(t.Of, path) // Pass full path, nullable doesn't consume + case ArrayType: + arrayIdx, ok := current.(int) + if !ok { + return nil, fmt.Errorf("array index must be numeric, got: %v (type %T)", current, current) + } + if arrayIdx < 0 { + return nil, fmt.Errorf("array index must be non-negative, got: %d", arrayIdx) + } + subPath, err := PathToWirePath(t.Of, tail) + if err != nil { + return nil, err + } + return append([]int{arrayIdx}, subPath...), nil + case RecordType: + fieldName, ok := current.(string) + if !ok { + return nil, fmt.Errorf("record field name must be a string, got: %v (type %T)", current, current) + } + fieldIndex := -1 + for i, f := range t.Fields { + if f.Name == fieldName { + fieldIndex = i + break + } + } + if fieldIndex == -1 { + return nil, fmt.Errorf("encoding error: could not find record field: %s", fieldName) + } + field := t.Fields[fieldIndex] + subPath, err := PathToWirePath(field.Of, tail) + if err != nil { + return nil, err + } + return append([]int{fieldIndex}, subPath...), nil + case StringType, VarintType, BooleanType, Float64Type, BytesType, PathType, DescType, FixedType: + if len(path) > 0 { // Path is not empty, but primitive type cannot be indexed further + return nil, fmt.Errorf("encoding error: path %v attempts to index into primitive type %s", path, t.GetTypeKey()) + } + return []int{}, nil + default: + panic(fmt.Sprintf("programmer error: PathToWirePath can't handle type %T with key %s", wt, wt.GetTypeKey())) + } +} + +// WirePathToPath converts a wire path (a slice of integers representing field/element indices) +// back into a human-readable path (a slice of strings for record field names and integers for +// array indices) for a given wire type (wt). +// This is the reverse of PathToWirePath and is useful for presenting internal Argo paths +// in a more understandable format. +// Returns an error if the wire path is invalid for the given wire type (e.g., an index +// is out of bounds for a record or array). +func WirePathToPath(wt Type, wirePath []int) ([]interface{}, error) { + if len(wirePath) == 0 { + return []interface{}{}, nil + } + + currentIndex := wirePath[0] + tailPath := wirePath[1:] + + switch t := wt.(type) { + case BlockType: + return WirePathToPath(t.Of, wirePath) // Pass full wirePath + case NullableType: + return WirePathToPath(t.Of, wirePath) // Pass full wirePath + case ArrayType: + // Array index is directly the current wirePath element + subPath, err := WirePathToPath(t.Of, tailPath) + if err != nil { + return nil, err + } + return append([]interface{}{currentIndex}, subPath...), nil + case RecordType: + if currentIndex < 0 || currentIndex >= len(t.Fields) { + return nil, fmt.Errorf("encoding error: could not find record field by index: %d (record has %d fields)", currentIndex, len(t.Fields)) + } + field := t.Fields[currentIndex] + subPath, err := WirePathToPath(field.Of, tailPath) + if err != nil { + return nil, err + } + return append([]interface{}{field.Name}, subPath...), nil + case StringType, VarintType, BooleanType, Float64Type, BytesType, PathType, DescType, FixedType: + if len(wirePath) > 0 { // wirePath is not empty, but primitive type cannot be indexed further + return nil, fmt.Errorf("encoding error: wirePath %v attempts to index into primitive type %s", wirePath, t.GetTypeKey()) + } + return []interface{}{}, nil + default: + panic(fmt.Sprintf("programmer error: WirePathToPath can't handle type %T with key %s", wt, wt.GetTypeKey())) + } +} + +// --- SelfDescribing Namespace --- + +// SelfDescribingTypeMarkers are label.Label instances used to mark self-describing types. +var ( + SelfDescribingTypeMarkerNull = label.NullMarker + SelfDescribingTypeMarkerFalse = label.FalseMarker + SelfDescribingTypeMarkerTrue = label.TrueMarker + SelfDescribingTypeMarkerObject = label.NewFromInt64(2) + SelfDescribingTypeMarkerList = label.NewFromInt64(3) + SelfDescribingTypeMarkerString = label.NewFromInt64(4) + SelfDescribingTypeMarkerBytes = label.NewFromInt64(5) + SelfDescribingTypeMarkerInt = label.NewFromInt64(6) + SelfDescribingTypeMarkerFloat = label.NewFromInt64(7) +) + +// SelfDescribing is a collection of pre-encoded byte slices for self-describing type markers. +var ( + SelfDescribingNull = label.Null // From label package []byte + SelfDescribingFalse = label.False // From label package []byte + SelfDescribingTrue = label.True // From label package []byte + SelfDescribingObject = SelfDescribingTypeMarkerObject.Encode() + SelfDescribingList = SelfDescribingTypeMarkerList.Encode() + SelfDescribingString = SelfDescribingTypeMarkerString.Encode() + SelfDescribingBytes = SelfDescribingTypeMarkerBytes.Encode() + SelfDescribingInt = SelfDescribingTypeMarkerInt.Encode() + SelfDescribingFloat = SelfDescribingTypeMarkerFloat.Encode() +) + +// SelfDescribingBlocks is a map from BlockKey to the Type of the elements in that block. +// This is used when decoding self-describing values that are blocks, to know the type +// of the items within the block from its key. +// It's initialized in the second init function to ensure all base types are defined. +var SelfDescribingBlocks map[BlockKey]Type + +// init (the second one in this file) initializes SelfDescribingBlocks. +// It populates the map with common block types that might be used in self-describing contexts. +// This is done in a separate init to avoid initialization cycles, ensuring that all base types +// (like String, Varint) and compound types derived from them (like stringBlock, VarintBlock) +// are fully defined before being added to this map. +func init() { // Second init for SelfDescribingBlocks to ensure base types are ready + stringBlock := NewBlockType(String, "String", MustDeduplicateByDefault(String)) + bytesBlock := NewBlockType(Bytes, "Bytes", MustDeduplicateByDefault(Bytes)) + // Note: VarintBlock is already defined globally and initialized in the first init. + // Create a Float64 block type for self-describing floats. + float64Block := NewBlockType(Float64, "Float", MustDeduplicateByDefault(Float64)) + + SelfDescribingBlocks = map[BlockKey]Type{ + stringBlock.Key: stringBlock.Of, + bytesBlock.Key: bytesBlock.Of, + VarintBlock.(BlockType).Key: VarintBlock.(BlockType).Of, + float64Block.Key: float64Block.Of, + } +} + +// bigInt is a small utility function to create a *big.Int from an int64 value. +// Primarily used for testing or when *big.Int literals are needed. +func bigInt(val int64) *big.Int { + return big.NewInt(val) +} + +// Ensure all Type implementations satisfy the Type interface. +var _ Type = StringType{} +var _ Type = BooleanType{} +var _ Type = VarintType{} +var _ Type = Float64Type{} +var _ Type = BytesType{} +var _ Type = PathType{} +var _ Type = FixedType{} +var _ Type = BlockType{} +var _ Type = ArrayType{} +var _ Type = NullableType{} +var _ Type = RecordType{} +var _ Type = DescType{} diff --git a/vendor/github.com/beeper/argo-go/wirecodec/decode.go b/vendor/github.com/beeper/argo-go/wirecodec/decode.go new file mode 100644 index 0000000000..c7a1a55299 --- /dev/null +++ b/vendor/github.com/beeper/argo-go/wirecodec/decode.go @@ -0,0 +1,341 @@ +package wirecodec + +import ( + "encoding/binary" + "fmt" + "math" + + "github.com/beeper/argo-go/block" + "github.com/beeper/argo-go/codec" + "github.com/beeper/argo-go/header" + "github.com/beeper/argo-go/label" + "github.com/beeper/argo-go/pkg/buf" + "github.com/beeper/argo-go/wire" +) + +type anyBlockReader interface { + Read(parent buf.Read) (interface{}, error) +} + +type genericBlockReaderWrapper struct { + coreRead func(parentBuf buf.Read) (interface{}, error) + blockDataBuffer buf.Read +} + +func (g *genericBlockReaderWrapper) Read(parentBuf buf.Read) (interface{}, error) { + return g.coreRead(parentBuf) +} + +type Decoder struct { + r buf.Read + slicer *codec.MessageSlicer + readers map[wire.BlockKey]anyBlockReader +} + +func NewFromSlicer(s *codec.MessageSlicer) *Decoder { + return &Decoder{ + r: s.Core(), + slicer: s, + readers: make(map[wire.BlockKey]anyBlockReader), + } +} + +func (d *Decoder) DecodeWireType() (wire.Type, error) { + lbl, err := label.Read(d.r) + if err != nil { + return nil, err + } + + switch { + // ---------- scalars ---------- + case label.WireTypeMarkerString.Is(lbl): + return wire.String, nil + case label.WireTypeMarkerBoolean.Is(lbl): + return wire.Boolean, nil + case label.WireTypeMarkerVarint.Is(lbl): + return wire.Varint, nil + case label.WireTypeMarkerFloat64.Is(lbl): + return wire.Float64, nil + case label.WireTypeMarkerBytes.Is(lbl): + return wire.Bytes, nil + case label.WireTypeMarkerFixed.Is(lbl): + lengthLbl, err := label.Read(d.r) + if err != nil { + return nil, err + } + n := int(lengthLbl.Value().Int64()) + if n < 0 { + return nil, fmt.Errorf("wirecodec: negative FIXED length %d", n) + } + return wire.FixedType{Length: n}, nil + + // ---------- block ---------- + case label.WireTypeMarkerBlock.Is(lbl): + // Only scalar/desc allowed for block element + elem, err := d.decodeScalarWireType() + if err != nil { + return nil, err + } + key, err := d.readBlockString() + if err != nil { + return nil, err + } + dedupe, err := d.readBlockBool() + if err != nil { + return nil, err + } + return wire.NewBlockType(elem, wire.BlockKey(key), dedupe), nil + + // ---------- wrappers ---------- + case label.WireTypeMarkerNullable.Is(lbl): + of, err := d.DecodeWireType() + if err != nil { + return nil, err + } + return wire.NewNullableType(of), nil + + case label.WireTypeMarkerArray.Is(lbl): + of, err := d.DecodeWireType() + if err != nil { + return nil, err + } + return wire.ArrayType{Of: of}, nil + + // ---------- record ---------- + case label.WireTypeMarkerRecord.Is(lbl): + lenLbl, err := label.Read(d.r) + if err != nil { + return nil, err + } + n := int(lenLbl.Value().Int64()) + if n < 0 { + return nil, fmt.Errorf("wirecodec: negative record-field count %d", n) + } + return d.decodeRecord(n) + + // ---------- simple markers ---------- + case label.WireTypeMarkerDesc.Is(lbl): + return wire.Desc, nil + case label.WireTypeMarkerError.Is(lbl): + return wire.Error, nil + case label.WireTypeMarkerPath.Is(lbl): + return wire.Path, nil + case label.WireTypeMarkerExtensions.Is(lbl): + return wire.Extensions, nil + } + + return nil, fmt.Errorf("wirecodec: unknown wire-type label %s", lbl.Value().String()) +} + +func (d *Decoder) DecodeWireTypeStore() (map[string]wire.Type, error) { + objLbl, err := label.Read(d.r) + if err != nil { + return nil, err + } + if !wire.SelfDescribingTypeMarkerObject.Is(objLbl) { + return nil, fmt.Errorf("wirecodec: expected object marker, found %v", objLbl.Value()) + } + + cntLbl, err := label.Read(d.r) + if err != nil { + return nil, err + } + n := int(cntLbl.Value().Int64()) + if n < 0 { + return nil, fmt.Errorf("wirecodec: negative type-store length %d", n) + } + + out := make(map[string]wire.Type, n) + for i := 0; i < n; i++ { + name, err := d.readBlockString() + if err != nil { + return nil, fmt.Errorf("wirecodec: read store name: %w", err) + } + wt, err := d.DecodeWireType() + if err != nil { + return nil, fmt.Errorf("wirecodec: decode type %q: %w", name, err) + } + out[name] = wt + } + return out, nil +} + +func (d *Decoder) decodeScalarWireType() (wire.Type, error) { + lbl, err := label.Read(d.r) + if err != nil { + return nil, err + } + + switch { + case label.WireTypeMarkerString.Is(lbl): + return wire.String, nil + case label.WireTypeMarkerBoolean.Is(lbl): + return wire.Boolean, nil + case label.WireTypeMarkerVarint.Is(lbl): + return wire.Varint, nil + case label.WireTypeMarkerFloat64.Is(lbl): + return wire.Float64, nil + case label.WireTypeMarkerBytes.Is(lbl): + return wire.Bytes, nil + case label.WireTypeMarkerFixed.Is(lbl): + lenLbl, err := label.Read(d.r) + if err != nil { + return nil, err + } + n := int(lenLbl.Value().Int64()) + if n < 0 { + return nil, fmt.Errorf("wirecodec: negative FIXED length %d", n) + } + return wire.FixedType{Length: n}, nil + case label.WireTypeMarkerDesc.Is(lbl): + return wire.Desc, nil + } + return nil, fmt.Errorf("wirecodec: invalid scalar wire-type label %s", lbl.Value().String()) +} + +func (d *Decoder) decodeRecord(length int) (wire.Type, error) { + if length < 0 { + return nil, fmt.Errorf("wirecodec: negative record-field count %d", length) + } + fields := make([]wire.Field, 0, length) + for i := 0; i < length; i++ { + name, err := d.readBlockString() + if err != nil { + return nil, fmt.Errorf("record field %d name: %w", i, err) + } + ft, err := d.DecodeWireType() + if err != nil { + return nil, fmt.Errorf("record field %q type: %w", name, err) + } + omit, err := d.readBlockBool() + if err != nil { + return nil, fmt.Errorf("record field %q omittable: %w", name, err) + } + fields = append(fields, wire.Field{Name: name, Of: ft, Omittable: omit}) + } + return wire.RecordType{Fields: fields}, nil +} + +func (d *Decoder) readBlockString() (string, error) { + key := wire.BlockKey("String") + elem, ok := wire.SelfDescribingBlocks[key] + if !ok { + return "", fmt.Errorf("wirecodec: self-describing String block not found") + } + blk := wire.NewBlockType(elem, key, wire.MustDeduplicateByDefault(elem)) + + r, err := d.getBlockReader(blk, wire.String) + if err != nil { + return "", fmt.Errorf("wirecodec: get String block reader: %w", err) + } + v, err := r.Read(d.r) + if err != nil { + return "", fmt.Errorf("wirecodec: read String from block: %w", err) + } + s, ok := v.(string) + if !ok { + return "", fmt.Errorf("wirecodec: String block reader returned %T", v) + } + return s, nil +} + +func (d *Decoder) readBlockBool() (bool, error) { + lbl, err := label.Read(d.r) + if err != nil { + return false, err + } + switch { + case label.FalseMarker.Is(lbl): + return false, nil + case label.TrueMarker.Is(lbl): + return true, nil + default: + return false, fmt.Errorf("wirecodec: expected boolean marker got %v", lbl.Value()) + } +} + +func DecodeWireTypeStoreFile(msg []byte) (map[string]wire.Type, error) { + slicer, err := codec.NewMessageSlicer(buf.NewBufReadonly(msg)) + if err != nil { + return nil, err + } + return NewFromSlicer(slicer).DecodeWireTypeStore() +} + +func (d *Decoder) getBlockReader(blockDef wire.BlockType, valueWireType wire.Type) (anyBlockReader, error) { + if r, ok := d.readers[blockDef.Key]; ok { + return r, nil + } + r, err := d.makeBlockReader(valueWireType, blockDef.Dedupe, blockDef.Key) + if err != nil { + return nil, err + } + d.readers[blockDef.Key] = r + return r, nil +} + +func (d *Decoder) makeBlockReader(valueWireType wire.Type, dedupe bool, key wire.BlockKey) (anyBlockReader, error) { + blockData := d.slicer.NextBlock() + if blockData == nil { + if !d.slicer.Header().GetFlag(header.HeaderInlineEverythingFlag) { + return nil, fmt.Errorf("wirecodec: no more block segments for key %s", key) + } + blockData = d.slicer.Core() + if blockData == nil { + return nil, fmt.Errorf("wirecodec: core buffer nil in inline-everything mode for %s", key) + } + } + + var coreRead func(parentBuf buf.Read) (interface{}, error) + + switch t := valueWireType.(type) { + case wire.StringType: + nt := d.slicer.Header().GetFlag(header.HeaderNullTerminatedStringsFlag) + fromBytes := func(b []byte) string { return string(b) } + if dedupe { + r := block.NewDeduplicatingLabelBlockReader[string](blockData, fromBytes, nt) + coreRead = func(p buf.Read) (interface{}, error) { return r.Read(p) } + } else { + r := block.NewLabelBlockReader[string](blockData, fromBytes, nt) + coreRead = func(p buf.Read) (interface{}, error) { return r.Read(p) } + } + + case wire.BytesType: + fromBytes := func(b []byte) []byte { return b } + if dedupe { + r := block.NewDeduplicatingLabelBlockReader[[]byte](blockData, fromBytes, false) + coreRead = func(p buf.Read) (interface{}, error) { return r.Read(p) } + } else { + r := block.NewLabelBlockReader[[]byte](blockData, fromBytes, false) + coreRead = func(p buf.Read) (interface{}, error) { return r.Read(p) } + } + + case wire.VarintType: + if dedupe { + return nil, fmt.Errorf("wirecodec: deduping VARINT via label blocks not supported for %s", key) + } + r := block.NewUnlabeledVarIntBlockReader(blockData) + coreRead = func(p buf.Read) (interface{}, error) { return r.Read(p) } + + case wire.Float64Type: + if dedupe { + return nil, fmt.Errorf("wirecodec: deduping FLOAT64 not supported for %s", key) + } + fromBytes := func(b []byte) float64 { return math.Float64frombits(binary.LittleEndian.Uint64(b)) } + r := block.NewFixedSizeBlockReader[float64](blockData, fromBytes, 8) + coreRead = func(p buf.Read) (interface{}, error) { return r.Read(p) } + + case wire.FixedType: + if dedupe { + return nil, fmt.Errorf("wirecodec: deduping FIXED not supported for %s", key) + } + fromBytes := func(b []byte) []byte { return b } + r := block.NewFixedSizeBlockReader[[]byte](blockData, fromBytes, t.Length) + coreRead = func(p buf.Read) (interface{}, error) { return r.Read(p) } + + default: + return nil, fmt.Errorf("wirecodec: unsupported block value type %s for key %s", wire.Print(valueWireType), key) + } + + return &genericBlockReaderWrapper{coreRead: coreRead, blockDataBuffer: blockData}, nil +} diff --git a/vendor/github.com/coder/websocket/LICENSE.txt b/vendor/github.com/coder/websocket/LICENSE.txt new file mode 100644 index 0000000000..7e79329fc1 --- /dev/null +++ b/vendor/github.com/coder/websocket/LICENSE.txt @@ -0,0 +1,13 @@ +Copyright (c) 2025 Coder + +Permission to use, copy, modify, and distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/vendor/github.com/coder/websocket/Makefile b/vendor/github.com/coder/websocket/Makefile new file mode 100644 index 0000000000..a3e4a20d2e --- /dev/null +++ b/vendor/github.com/coder/websocket/Makefile @@ -0,0 +1,18 @@ +.PHONY: all +all: fmt lint test + +.PHONY: fmt +fmt: + ./ci/fmt.sh + +.PHONY: lint +lint: + ./ci/lint.sh + +.PHONY: test +test: + ./ci/test.sh + +.PHONY: bench +bench: + ./ci/bench.sh \ No newline at end of file diff --git a/vendor/github.com/coder/websocket/README.md b/vendor/github.com/coder/websocket/README.md new file mode 100644 index 0000000000..6e986897cb --- /dev/null +++ b/vendor/github.com/coder/websocket/README.md @@ -0,0 +1,162 @@ +# websocket + +[![Go Reference](https://pkg.go.dev/badge/github.com/coder/websocket.svg)](https://pkg.go.dev/github.com/coder/websocket) +[![Go Coverage](https://coder.github.io/websocket/coverage.svg)](https://coder.github.io/websocket/coverage.html) + +websocket is a minimal and idiomatic WebSocket library for Go. + +## Install + +```sh +go get github.com/coder/websocket +``` + +> [!NOTE] +> Coder now maintains this project as explained in [this blog post](https://coder.com/blog/websocket). +> We're grateful to [nhooyr](https://github.com/nhooyr) for authoring and maintaining this project from +> 2019 to 2024. + +## Highlights + +- Minimal and idiomatic API +- First class [context.Context](https://blog.golang.org/context) support +- Fully passes the WebSocket [autobahn-testsuite](https://github.com/crossbario/autobahn-testsuite) +- [Zero dependencies](https://pkg.go.dev/github.com/coder/websocket?tab=imports) +- JSON helpers in the [wsjson](https://pkg.go.dev/github.com/coder/websocket/wsjson) subpackage +- Zero alloc reads and writes +- Concurrent writes +- [Close handshake](https://pkg.go.dev/github.com/coder/websocket#Conn.Close) +- [net.Conn](https://pkg.go.dev/github.com/coder/websocket#NetConn) wrapper +- [Ping pong](https://pkg.go.dev/github.com/coder/websocket#Conn.Ping) API +- [RFC 7692](https://tools.ietf.org/html/rfc7692) permessage-deflate compression +- [CloseRead](https://pkg.go.dev/github.com/coder/websocket#Conn.CloseRead) helper for write only connections +- Compile to [Wasm](https://pkg.go.dev/github.com/coder/websocket#hdr-Wasm) + +## Roadmap + +See GitHub issues for minor issues but the major future enhancements are: + +- [ ] Perfect examples [#217](https://github.com/nhooyr/websocket/issues/217) +- [ ] wstest.Pipe for in memory testing [#340](https://github.com/nhooyr/websocket/issues/340) +- [ ] Ping pong heartbeat helper [#267](https://github.com/nhooyr/websocket/issues/267) +- [ ] Ping pong instrumentation callbacks [#246](https://github.com/nhooyr/websocket/issues/246) +- [ ] Graceful shutdown helpers [#209](https://github.com/nhooyr/websocket/issues/209) +- [ ] Assembly for WebSocket masking [#16](https://github.com/nhooyr/websocket/issues/16) + - WIP at [#326](https://github.com/nhooyr/websocket/pull/326), about 3x faster +- [ ] HTTP/2 [#4](https://github.com/nhooyr/websocket/issues/4) +- [ ] The holy grail [#402](https://github.com/nhooyr/websocket/issues/402) + +## Examples + +For a production quality example that demonstrates the complete API, see the +[echo example](./internal/examples/echo). + +For a full stack example, see the [chat example](./internal/examples/chat). + +### Server + +```go +http.HandlerFunc(func (w http.ResponseWriter, r *http.Request) { + c, err := websocket.Accept(w, r, nil) + if err != nil { + // ... + } + defer c.CloseNow() + + // Set the context as needed. Use of r.Context() is not recommended + // to avoid surprising behavior (see http.Hijacker). + ctx, cancel := context.WithTimeout(context.Background(), time.Second*10) + defer cancel() + + var v any + err = wsjson.Read(ctx, c, &v) + if err != nil { + // ... + } + + log.Printf("received: %v", v) + + c.Close(websocket.StatusNormalClosure, "") +}) +``` + +### Client + +```go +ctx, cancel := context.WithTimeout(context.Background(), time.Minute) +defer cancel() + +c, _, err := websocket.Dial(ctx, "ws://localhost:8080", nil) +if err != nil { + // ... +} +defer c.CloseNow() + +err = wsjson.Write(ctx, c, "hi") +if err != nil { + // ... +} + +c.Close(websocket.StatusNormalClosure, "") +``` + +## Comparison + +### gorilla/websocket + +Advantages of [gorilla/websocket](https://github.com/gorilla/websocket): + +- Mature and widely used +- [Prepared writes](https://pkg.go.dev/github.com/gorilla/websocket#PreparedMessage) +- Configurable [buffer sizes](https://pkg.go.dev/github.com/gorilla/websocket#hdr-Buffers) +- No extra goroutine per connection to support cancellation with context.Context. This costs github.com/coder/websocket 2 KB of memory per connection. + - Will be removed soon with [context.AfterFunc](https://github.com/golang/go/issues/57928). See [#411](https://github.com/nhooyr/websocket/issues/411) + +Advantages of github.com/coder/websocket: + +- Minimal and idiomatic API + - Compare godoc of [github.com/coder/websocket](https://pkg.go.dev/github.com/coder/websocket) with [gorilla/websocket](https://pkg.go.dev/github.com/gorilla/websocket) side by side. +- [net.Conn](https://pkg.go.dev/github.com/coder/websocket#NetConn) wrapper +- Zero alloc reads and writes ([gorilla/websocket#535](https://github.com/gorilla/websocket/issues/535)) +- Full [context.Context](https://blog.golang.org/context) support +- Dial uses [net/http.Client](https://golang.org/pkg/net/http/#Client) + - Will enable easy HTTP/2 support in the future + - Gorilla writes directly to a net.Conn and so duplicates features of net/http.Client. +- Concurrent writes +- Close handshake ([gorilla/websocket#448](https://github.com/gorilla/websocket/issues/448)) +- Idiomatic [ping pong](https://pkg.go.dev/github.com/coder/websocket#Conn.Ping) API + - Gorilla requires registering a pong callback before sending a Ping +- Can target Wasm ([gorilla/websocket#432](https://github.com/gorilla/websocket/issues/432)) +- Transparent message buffer reuse with [wsjson](https://pkg.go.dev/github.com/coder/websocket/wsjson) subpackage +- [1.75x](https://github.com/nhooyr/websocket/releases/tag/v1.7.4) faster WebSocket masking implementation in pure Go + - Gorilla's implementation is slower and uses [unsafe](https://golang.org/pkg/unsafe/). + Soon we'll have assembly and be 3x faster [#326](https://github.com/nhooyr/websocket/pull/326) +- Full [permessage-deflate](https://tools.ietf.org/html/rfc7692) compression extension support + - Gorilla only supports no context takeover mode +- [CloseRead](https://pkg.go.dev/github.com/coder/websocket#Conn.CloseRead) helper for write only connections ([gorilla/websocket#492](https://github.com/gorilla/websocket/issues/492)) + +#### golang.org/x/net/websocket + +[golang.org/x/net/websocket](https://pkg.go.dev/golang.org/x/net/websocket) is deprecated. +See [golang/go/issues/18152](https://github.com/golang/go/issues/18152). + +The [net.Conn](https://pkg.go.dev/github.com/coder/websocket#NetConn) can help in transitioning +to github.com/coder/websocket. + +#### gobwas/ws + +[gobwas/ws](https://github.com/gobwas/ws) has an extremely flexible API that allows it to be used +in an event driven style for performance. See the author's [blog post](https://medium.freecodecamp.org/million-websockets-and-go-cc58418460bb). + +However it is quite bloated. See https://pkg.go.dev/github.com/gobwas/ws + +When writing idiomatic Go, github.com/coder/websocket will be faster and easier to use. + +#### lesismal/nbio + +[lesismal/nbio](https://github.com/lesismal/nbio) is similar to gobwas/ws in that the API is +event driven for performance reasons. + +However it is quite bloated. See https://pkg.go.dev/github.com/lesismal/nbio + +When writing idiomatic Go, github.com/coder/websocket will be faster and easier to use. diff --git a/vendor/github.com/coder/websocket/accept.go b/vendor/github.com/coder/websocket/accept.go new file mode 100644 index 0000000000..cc9904282e --- /dev/null +++ b/vendor/github.com/coder/websocket/accept.go @@ -0,0 +1,378 @@ +//go:build !js + +package websocket + +import ( + "bytes" + "context" + "crypto/sha1" + "encoding/base64" + "errors" + "fmt" + "io" + "log" + "net/http" + "net/textproto" + "net/url" + "path" + "strings" + + "github.com/coder/websocket/internal/errd" +) + +// AcceptOptions represents Accept's options. +type AcceptOptions struct { + // Subprotocols lists the WebSocket subprotocols that Accept will negotiate with the client. + // The empty subprotocol will always be negotiated as per RFC 6455. If you would like to + // reject it, close the connection when c.Subprotocol() == "". + Subprotocols []string + + // InsecureSkipVerify is used to disable Accept's origin verification behaviour. + // + // You probably want to use OriginPatterns instead. + InsecureSkipVerify bool + + // OriginPatterns lists the host patterns for authorized origins. + // The request host is always authorized. + // Use this to enable cross origin WebSockets. + // + // i.e javascript running on example.com wants to access a WebSocket server at chat.example.com. + // In such a case, example.com is the origin and chat.example.com is the request host. + // One would set this field to []string{"example.com"} to authorize example.com to connect. + // + // Each pattern is matched case insensitively with path.Match (see + // https://golang.org/pkg/path/#Match). By default, it is matched + // against the request origin host. If the pattern contains a URI + // scheme ("://"), it will be matched against "scheme://host". + // + // Please ensure you understand the ramifications of enabling this. + // If used incorrectly your WebSocket server will be open to CSRF attacks. + // + // Do not use * as a pattern to allow any origin, prefer to use InsecureSkipVerify instead + // to bring attention to the danger of such a setting. + OriginPatterns []string + + // CompressionMode controls the compression mode. + // Defaults to CompressionDisabled. + // + // See docs on CompressionMode for details. + CompressionMode CompressionMode + + // CompressionThreshold controls the minimum size of a message before compression is applied. + // + // Defaults to 512 bytes for CompressionNoContextTakeover and 128 bytes + // for CompressionContextTakeover. + CompressionThreshold int + + // OnPingReceived is an optional callback invoked synchronously when a ping frame is received. + // + // The payload contains the application data of the ping frame. + // If the callback returns false, the subsequent pong frame will not be sent. + // To avoid blocking, any expensive processing should be performed asynchronously using a goroutine. + OnPingReceived func(ctx context.Context, payload []byte) bool + + // OnPongReceived is an optional callback invoked synchronously when a pong frame is received. + // + // The payload contains the application data of the pong frame. + // To avoid blocking, any expensive processing should be performed asynchronously using a goroutine. + // + // Unlike OnPingReceived, this callback does not return a value because a pong frame + // is a response to a ping and does not trigger any further frame transmission. + OnPongReceived func(ctx context.Context, payload []byte) +} + +func (opts *AcceptOptions) cloneWithDefaults() *AcceptOptions { + var o AcceptOptions + if opts != nil { + o = *opts + } + return &o +} + +// Accept accepts a WebSocket handshake from a client and upgrades the +// the connection to a WebSocket. +// +// Accept will not allow cross origin requests by default. +// See the InsecureSkipVerify and OriginPatterns options to allow cross origin requests. +// +// Accept will write a response to w on all errors. +// +// Note that using the http.Request Context after Accept returns may lead to +// unexpected behavior (see http.Hijacker). +func Accept(w http.ResponseWriter, r *http.Request, opts *AcceptOptions) (*Conn, error) { + return accept(w, r, opts) +} + +func accept(w http.ResponseWriter, r *http.Request, opts *AcceptOptions) (_ *Conn, err error) { + defer errd.Wrap(&err, "failed to accept WebSocket connection") + + errCode, err := verifyClientRequest(w, r) + if err != nil { + http.Error(w, err.Error(), errCode) + return nil, err + } + + opts = opts.cloneWithDefaults() + if !opts.InsecureSkipVerify { + err = authenticateOrigin(r, opts.OriginPatterns) + if err != nil { + if errors.Is(err, path.ErrBadPattern) { + log.Printf("websocket: %v", err) + err = errors.New(http.StatusText(http.StatusForbidden)) + } + http.Error(w, err.Error(), http.StatusForbidden) + return nil, err + } + } + + hj, ok := hijacker(w) + if !ok { + err = errors.New("http.ResponseWriter does not implement http.Hijacker") + http.Error(w, http.StatusText(http.StatusNotImplemented), http.StatusNotImplemented) + return nil, err + } + + w.Header().Set("Upgrade", "websocket") + w.Header().Set("Connection", "Upgrade") + + key := r.Header.Get("Sec-WebSocket-Key") + w.Header().Set("Sec-WebSocket-Accept", secWebSocketAccept(key)) + + subproto := selectSubprotocol(r, opts.Subprotocols) + if subproto != "" { + w.Header().Set("Sec-WebSocket-Protocol", subproto) + } + + copts, ok := selectDeflate(websocketExtensions(r.Header), opts.CompressionMode) + if ok { + w.Header().Set("Sec-WebSocket-Extensions", copts.String()) + } + + w.WriteHeader(http.StatusSwitchingProtocols) + // See https://github.com/nhooyr/websocket/issues/166 + if ginWriter, ok := w.(interface { + WriteHeaderNow() + }); ok { + ginWriter.WriteHeaderNow() + } + + netConn, brw, err := hj.Hijack() + if err != nil { + err = fmt.Errorf("failed to hijack connection: %w", err) + http.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError) + return nil, err + } + + // https://github.com/golang/go/issues/32314 + b, _ := brw.Reader.Peek(brw.Reader.Buffered()) + brw.Reader.Reset(io.MultiReader(bytes.NewReader(b), netConn)) + + return newConn(connConfig{ + subprotocol: w.Header().Get("Sec-WebSocket-Protocol"), + rwc: netConn, + client: false, + copts: copts, + flateThreshold: opts.CompressionThreshold, + onPingReceived: opts.OnPingReceived, + onPongReceived: opts.OnPongReceived, + + br: brw.Reader, + bw: brw.Writer, + }), nil +} + +func verifyClientRequest(w http.ResponseWriter, r *http.Request) (errCode int, _ error) { + if !r.ProtoAtLeast(1, 1) { + return http.StatusUpgradeRequired, fmt.Errorf("WebSocket protocol violation: handshake request must be at least HTTP/1.1: %q", r.Proto) + } + + if !headerContainsTokenIgnoreCase(r.Header, "Connection", "Upgrade") { + w.Header().Set("Connection", "Upgrade") + w.Header().Set("Upgrade", "websocket") + return http.StatusUpgradeRequired, fmt.Errorf("WebSocket protocol violation: Connection header %q does not contain Upgrade", r.Header.Get("Connection")) + } + + if !headerContainsTokenIgnoreCase(r.Header, "Upgrade", "websocket") { + w.Header().Set("Connection", "Upgrade") + w.Header().Set("Upgrade", "websocket") + return http.StatusUpgradeRequired, fmt.Errorf("WebSocket protocol violation: Upgrade header %q does not contain websocket", r.Header.Get("Upgrade")) + } + + if r.Method != "GET" { + return http.StatusMethodNotAllowed, fmt.Errorf("WebSocket protocol violation: handshake request method is not GET but %q", r.Method) + } + + if r.Header.Get("Sec-WebSocket-Version") != "13" { + w.Header().Set("Sec-WebSocket-Version", "13") + return http.StatusBadRequest, fmt.Errorf("unsupported WebSocket protocol version (only 13 is supported): %q", r.Header.Get("Sec-WebSocket-Version")) + } + + websocketSecKeys := r.Header.Values("Sec-WebSocket-Key") + if len(websocketSecKeys) == 0 { + return http.StatusBadRequest, errors.New("WebSocket protocol violation: missing Sec-WebSocket-Key") + } + + if len(websocketSecKeys) > 1 { + return http.StatusBadRequest, errors.New("WebSocket protocol violation: multiple Sec-WebSocket-Key headers") + } + + // The RFC states to remove any leading or trailing whitespace. + websocketSecKey := strings.TrimSpace(websocketSecKeys[0]) + if v, err := base64.StdEncoding.DecodeString(websocketSecKey); err != nil || len(v) != 16 { + return http.StatusBadRequest, fmt.Errorf("WebSocket protocol violation: invalid Sec-WebSocket-Key %q, must be a 16 byte base64 encoded string", websocketSecKey) + } + + return 0, nil +} + +func authenticateOrigin(r *http.Request, originHosts []string) error { + origin := r.Header.Get("Origin") + if origin == "" { + return nil + } + + u, err := url.Parse(origin) + if err != nil { + return fmt.Errorf("failed to parse Origin header %q: %w", origin, err) + } + + if strings.EqualFold(r.Host, u.Host) { + return nil + } + + for _, hostPattern := range originHosts { + target := u.Host + if strings.Contains(hostPattern, "://") { + target = u.Scheme + "://" + u.Host + } + matched, err := match(hostPattern, target) + if err != nil { + return fmt.Errorf("failed to parse path pattern %q: %w", hostPattern, err) + } + if matched { + return nil + } + } + if u.Host == "" { + return fmt.Errorf("request Origin %q is not a valid URL with a host", origin) + } + return fmt.Errorf("request Origin %q is not authorized for Host %q", u.Host, r.Host) +} + +func match(pattern, s string) (bool, error) { + return path.Match(strings.ToLower(pattern), strings.ToLower(s)) +} + +func selectSubprotocol(r *http.Request, subprotocols []string) string { + cps := headerTokens(r.Header, "Sec-WebSocket-Protocol") + for _, sp := range subprotocols { + for _, cp := range cps { + if strings.EqualFold(sp, cp) { + return cp + } + } + } + return "" +} + +func selectDeflate(extensions []websocketExtension, mode CompressionMode) (*compressionOptions, bool) { + if mode == CompressionDisabled { + return nil, false + } + for _, ext := range extensions { + switch ext.name { + // We used to implement x-webkit-deflate-frame too for Safari but Safari has bugs... + // See https://github.com/nhooyr/websocket/issues/218 + case "permessage-deflate": + copts, ok := acceptDeflate(ext, mode) + if ok { + return copts, true + } + } + } + return nil, false +} + +func acceptDeflate(ext websocketExtension, mode CompressionMode) (*compressionOptions, bool) { + copts := mode.opts() + for _, p := range ext.params { + switch p { + case "client_no_context_takeover": + copts.clientNoContextTakeover = true + continue + case "server_no_context_takeover": + copts.serverNoContextTakeover = true + continue + case "client_max_window_bits", + "server_max_window_bits=15": + continue + } + + if strings.HasPrefix(p, "client_max_window_bits=") { + // We can't adjust the deflate window, but decoding with a larger window is acceptable. + continue + } + return nil, false + } + return copts, true +} + +func headerContainsTokenIgnoreCase(h http.Header, key, token string) bool { + for _, t := range headerTokens(h, key) { + if strings.EqualFold(t, token) { + return true + } + } + return false +} + +type websocketExtension struct { + name string + params []string +} + +func websocketExtensions(h http.Header) []websocketExtension { + var exts []websocketExtension + extStrs := headerTokens(h, "Sec-WebSocket-Extensions") + for _, extStr := range extStrs { + if extStr == "" { + continue + } + + vals := strings.Split(extStr, ";") + for i := range vals { + vals[i] = strings.TrimSpace(vals[i]) + } + + e := websocketExtension{ + name: vals[0], + params: vals[1:], + } + + exts = append(exts, e) + } + return exts +} + +func headerTokens(h http.Header, key string) []string { + key = textproto.CanonicalMIMEHeaderKey(key) + var tokens []string + for _, v := range h[key] { + v = strings.TrimSpace(v) + for _, t := range strings.Split(v, ",") { + t = strings.TrimSpace(t) + tokens = append(tokens, t) + } + } + return tokens +} + +var keyGUID = []byte("258EAFA5-E914-47DA-95CA-C5AB0DC85B11") + +func secWebSocketAccept(secWebSocketKey string) string { + h := sha1.New() + h.Write([]byte(secWebSocketKey)) + h.Write(keyGUID) + + return base64.StdEncoding.EncodeToString(h.Sum(nil)) +} diff --git a/vendor/github.com/coder/websocket/close.go b/vendor/github.com/coder/websocket/close.go new file mode 100644 index 0000000000..fcc68065bc --- /dev/null +++ b/vendor/github.com/coder/websocket/close.go @@ -0,0 +1,335 @@ +//go:build !js + +package websocket + +import ( + "context" + "encoding/binary" + "errors" + "fmt" + "net" + "time" + + "github.com/coder/websocket/internal/errd" +) + +// StatusCode represents a WebSocket status code. +// https://tools.ietf.org/html/rfc6455#section-7.4 +type StatusCode int + +// https://www.iana.org/assignments/websocket/websocket.xhtml#close-code-number +// +// These are only the status codes defined by the protocol. +// +// You can define custom codes in the 3000-4999 range. +// The 3000-3999 range is reserved for use by libraries, frameworks and applications. +// The 4000-4999 range is reserved for private use. +const ( + StatusNormalClosure StatusCode = 1000 + StatusGoingAway StatusCode = 1001 + StatusProtocolError StatusCode = 1002 + StatusUnsupportedData StatusCode = 1003 + + // 1004 is reserved and so unexported. + statusReserved StatusCode = 1004 + + // StatusNoStatusRcvd cannot be sent in a close message. + // It is reserved for when a close message is received without + // a status code. + StatusNoStatusRcvd StatusCode = 1005 + + // StatusAbnormalClosure is exported for use only with Wasm. + // In non Wasm Go, the returned error will indicate whether the + // connection was closed abnormally. + StatusAbnormalClosure StatusCode = 1006 + + StatusInvalidFramePayloadData StatusCode = 1007 + StatusPolicyViolation StatusCode = 1008 + StatusMessageTooBig StatusCode = 1009 + StatusMandatoryExtension StatusCode = 1010 + StatusInternalError StatusCode = 1011 + StatusServiceRestart StatusCode = 1012 + StatusTryAgainLater StatusCode = 1013 + StatusBadGateway StatusCode = 1014 + + // StatusTLSHandshake is only exported for use with Wasm. + // In non Wasm Go, the returned error will indicate whether there was + // a TLS handshake failure. + StatusTLSHandshake StatusCode = 1015 +) + +// CloseError is returned when the connection is closed with a status and reason. +// +// Use Go 1.13's errors.As to check for this error. +// Also see the CloseStatus helper. +type CloseError struct { + Code StatusCode + Reason string +} + +func (ce CloseError) Error() string { + return fmt.Sprintf("status = %v and reason = %q", ce.Code, ce.Reason) +} + +// CloseStatus is a convenience wrapper around Go 1.13's errors.As to grab +// the status code from a CloseError. +// +// -1 will be returned if the passed error is nil or not a CloseError. +func CloseStatus(err error) StatusCode { + var ce CloseError + if errors.As(err, &ce) { + return ce.Code + } + return -1 +} + +// Close performs the WebSocket close handshake with the given status code and reason. +// +// It will write a WebSocket close frame with a timeout of 5s and then wait 5s for +// the peer to send a close frame. +// All data messages received from the peer during the close handshake will be discarded. +// +// The connection can only be closed once. Additional calls to Close +// are no-ops. +// +// The maximum length of reason must be 125 bytes. Avoid sending a dynamic reason. +// +// Close will unblock all goroutines interacting with the connection once +// complete. +func (c *Conn) Close(code StatusCode, reason string) (err error) { + defer errd.Wrap(&err, "failed to close WebSocket") + + if c.casClosing() { + err = c.waitGoroutines() + if err != nil { + return err + } + return net.ErrClosed + } + defer func() { + if errors.Is(err, net.ErrClosed) { + err = nil + } + }() + + err = c.closeHandshake(code, reason) + + err2 := c.close() + if err == nil && err2 != nil { + err = err2 + } + + err2 = c.waitGoroutines() + if err == nil && err2 != nil { + err = err2 + } + + return err +} + +// CloseNow closes the WebSocket connection without attempting a close handshake. +// Use when you do not want the overhead of the close handshake. +func (c *Conn) CloseNow() (err error) { + defer errd.Wrap(&err, "failed to immediately close WebSocket") + + if c.casClosing() { + err = c.waitGoroutines() + if err != nil { + return err + } + return net.ErrClosed + } + defer func() { + if errors.Is(err, net.ErrClosed) { + err = nil + } + }() + + err = c.close() + + err2 := c.waitGoroutines() + if err == nil && err2 != nil { + err = err2 + } + return err +} + +func (c *Conn) closeHandshake(code StatusCode, reason string) error { + err := c.writeClose(code, reason) + if err != nil { + return err + } + + err = c.waitCloseHandshake() + if CloseStatus(err) != code { + return err + } + return nil +} + +func (c *Conn) writeClose(code StatusCode, reason string) error { + ce := CloseError{ + Code: code, + Reason: reason, + } + + var p []byte + var err error + if ce.Code != StatusNoStatusRcvd { + p, err = ce.bytes() + if err != nil { + return err + } + } + + ctx, cancel := context.WithTimeout(context.Background(), time.Second*5) + defer cancel() + + err = c.writeControl(ctx, opClose, p) + // If the connection closed as we're writing we ignore the error as we might + // have written the close frame, the peer responded and then someone else read it + // and closed the connection. + if err != nil && !errors.Is(err, net.ErrClosed) { + return err + } + return nil +} + +func (c *Conn) waitCloseHandshake() error { + ctx, cancel := context.WithTimeout(context.Background(), time.Second*5) + defer cancel() + + err := c.readMu.lock(ctx) + if err != nil { + return err + } + defer c.readMu.unlock() + + for i := int64(0); i < c.msgReader.payloadLength; i++ { + _, err := c.br.ReadByte() + if err != nil { + return err + } + } + + for { + h, err := c.readLoop(ctx) + if err != nil { + return err + } + + for i := int64(0); i < h.payloadLength; i++ { + _, err := c.br.ReadByte() + if err != nil { + return err + } + } + } +} + +func (c *Conn) waitGoroutines() error { + t := time.NewTimer(time.Second * 15) + defer t.Stop() + + c.closeReadMu.Lock() + closeRead := c.closeReadCtx != nil + c.closeReadMu.Unlock() + if closeRead { + select { + case <-c.closeReadDone: + case <-t.C: + return errors.New("failed to wait for close read goroutine to exit") + } + } + + select { + case <-c.closed: + case <-t.C: + return errors.New("failed to wait for connection to be closed") + } + + return nil +} + +func parseClosePayload(p []byte) (CloseError, error) { + if len(p) == 0 { + return CloseError{ + Code: StatusNoStatusRcvd, + }, nil + } + + if len(p) < 2 { + return CloseError{}, fmt.Errorf("close payload %q too small, cannot even contain the 2 byte status code", p) + } + + ce := CloseError{ + Code: StatusCode(binary.BigEndian.Uint16(p)), + Reason: string(p[2:]), + } + + if !validWireCloseCode(ce.Code) { + return CloseError{}, fmt.Errorf("invalid status code %v", ce.Code) + } + + return ce, nil +} + +// See http://www.iana.org/assignments/websocket/websocket.xhtml#close-code-number +// and https://tools.ietf.org/html/rfc6455#section-7.4.1 +func validWireCloseCode(code StatusCode) bool { + switch code { + case statusReserved, StatusNoStatusRcvd, StatusAbnormalClosure, StatusTLSHandshake: + return false + } + + if code >= StatusNormalClosure && code <= StatusBadGateway { + return true + } + if code >= 3000 && code <= 4999 { + return true + } + + return false +} + +func (ce CloseError) bytes() ([]byte, error) { + p, err := ce.bytesErr() + if err != nil { + err = fmt.Errorf("failed to marshal close frame: %w", err) + ce = CloseError{ + Code: StatusInternalError, + } + p, _ = ce.bytesErr() + } + return p, err +} + +const maxCloseReason = maxControlPayload - 2 + +func (ce CloseError) bytesErr() ([]byte, error) { + if len(ce.Reason) > maxCloseReason { + return nil, fmt.Errorf("reason string max is %v but got %q with length %v", maxCloseReason, ce.Reason, len(ce.Reason)) + } + + if !validWireCloseCode(ce.Code) { + return nil, fmt.Errorf("status code %v cannot be set", ce.Code) + } + + buf := make([]byte, 2+len(ce.Reason)) + binary.BigEndian.PutUint16(buf, uint16(ce.Code)) + copy(buf[2:], ce.Reason) + return buf, nil +} + +func (c *Conn) casClosing() bool { + return c.closing.Swap(true) +} + +func (c *Conn) isClosed() bool { + select { + case <-c.closed: + return true + default: + return false + } +} diff --git a/vendor/github.com/coder/websocket/compress.go b/vendor/github.com/coder/websocket/compress.go new file mode 100644 index 0000000000..41bd5bdbbc --- /dev/null +++ b/vendor/github.com/coder/websocket/compress.go @@ -0,0 +1,234 @@ +//go:build !js + +package websocket + +import ( + "compress/flate" + "io" + "sync" +) + +// CompressionMode represents the modes available to the permessage-deflate extension. +// See https://tools.ietf.org/html/rfc7692 +// +// Works in all modern browsers except Safari which does not implement the permessage-deflate extension. +// +// Compression is only used if the peer supports the mode selected. +type CompressionMode int + +const ( + // CompressionDisabled disables the negotiation of the permessage-deflate extension. + // + // This is the default. Do not enable compression without benchmarking for your particular use case first. + CompressionDisabled CompressionMode = iota + + // CompressionContextTakeover compresses each message greater than 128 bytes reusing the 32 KB sliding window from + // previous messages. i.e compression context across messages is preserved. + // + // As most WebSocket protocols are text based and repetitive, this compression mode can be very efficient. + // + // The memory overhead is a fixed 32 KB sliding window, a fixed 1.2 MB flate.Writer and a sync.Pool of 40 KB flate.Reader's + // that are used when reading and then returned. + // + // Thus, it uses more memory than CompressionNoContextTakeover but compresses more efficiently. + // + // If the peer does not support CompressionContextTakeover then we will fall back to CompressionNoContextTakeover. + CompressionContextTakeover + + // CompressionNoContextTakeover compresses each message greater than 512 bytes. Each message is compressed with + // a new 1.2 MB flate.Writer pulled from a sync.Pool. Each message is read with a 40 KB flate.Reader pulled from + // a sync.Pool. + // + // This means less efficient compression as the sliding window from previous messages will not be used but the + // memory overhead will be lower as there will be no fixed cost for the flate.Writer nor the 32 KB sliding window. + // Especially if the connections are long lived and seldom written to. + // + // Thus, it uses less memory than CompressionContextTakeover but compresses less efficiently. + // + // If the peer does not support CompressionNoContextTakeover then we will fall back to CompressionDisabled. + CompressionNoContextTakeover +) + +func (m CompressionMode) opts() *compressionOptions { + return &compressionOptions{ + clientNoContextTakeover: m == CompressionNoContextTakeover, + serverNoContextTakeover: m == CompressionNoContextTakeover, + } +} + +type compressionOptions struct { + clientNoContextTakeover bool + serverNoContextTakeover bool +} + +func (copts *compressionOptions) String() string { + s := "permessage-deflate" + if copts.clientNoContextTakeover { + s += "; client_no_context_takeover" + } + if copts.serverNoContextTakeover { + s += "; server_no_context_takeover" + } + return s +} + +// These bytes are required to get flate.Reader to return. +// They are removed when sending to avoid the overhead as +// WebSocket framing tell's when the message has ended but then +// we need to add them back otherwise flate.Reader keeps +// trying to read more bytes. +const deflateMessageTail = "\x00\x00\xff\xff" + +type trimLastFourBytesWriter struct { + w io.Writer + tail []byte +} + +func (tw *trimLastFourBytesWriter) reset() { + if tw != nil && tw.tail != nil { + tw.tail = tw.tail[:0] + } +} + +func (tw *trimLastFourBytesWriter) Write(p []byte) (int, error) { + if tw.tail == nil { + tw.tail = make([]byte, 0, 4) + } + + extra := len(tw.tail) + len(p) - 4 + + if extra <= 0 { + tw.tail = append(tw.tail, p...) + return len(p), nil + } + + // Now we need to write as many extra bytes as we can from the previous tail. + if extra > len(tw.tail) { + extra = len(tw.tail) + } + if extra > 0 { + _, err := tw.w.Write(tw.tail[:extra]) + if err != nil { + return 0, err + } + + // Shift remaining bytes in tail over. + n := copy(tw.tail, tw.tail[extra:]) + tw.tail = tw.tail[:n] + } + + // If p is less than or equal to 4 bytes, + // all of it is is part of the tail. + if len(p) <= 4 { + tw.tail = append(tw.tail, p...) + return len(p), nil + } + + // Otherwise, only the last 4 bytes are. + tw.tail = append(tw.tail, p[len(p)-4:]...) + + p = p[:len(p)-4] + n, err := tw.w.Write(p) + return n + 4, err +} + +var flateReaderPool sync.Pool + +func getFlateReader(r io.Reader, dict []byte) io.Reader { + fr, ok := flateReaderPool.Get().(io.Reader) + if !ok { + return flate.NewReaderDict(r, dict) + } + fr.(flate.Resetter).Reset(r, dict) + return fr +} + +func putFlateReader(fr io.Reader) { + flateReaderPool.Put(fr) +} + +var flateWriterPool sync.Pool + +func getFlateWriter(w io.Writer) *flate.Writer { + fw, ok := flateWriterPool.Get().(*flate.Writer) + if !ok { + fw, _ = flate.NewWriter(w, flate.BestSpeed) + return fw + } + fw.Reset(w) + return fw +} + +func putFlateWriter(w *flate.Writer) { + flateWriterPool.Put(w) +} + +type slidingWindow struct { + buf []byte +} + +var ( + swPoolMu sync.RWMutex + swPool = map[int]*sync.Pool{} +) + +func slidingWindowPool(n int) *sync.Pool { + swPoolMu.RLock() + p, ok := swPool[n] + swPoolMu.RUnlock() + if ok { + return p + } + + p = &sync.Pool{} + + swPoolMu.Lock() + swPool[n] = p + swPoolMu.Unlock() + + return p +} + +func (sw *slidingWindow) init(n int) { + if sw.buf != nil { + return + } + + if n == 0 { + n = 32768 + } + + p := slidingWindowPool(n) + sw2, ok := p.Get().(*slidingWindow) + if ok { + *sw = *sw2 + } else { + sw.buf = make([]byte, 0, n) + } +} + +func (sw *slidingWindow) close() { + sw.buf = sw.buf[:0] + swPoolMu.Lock() + swPool[cap(sw.buf)].Put(sw) + swPoolMu.Unlock() +} + +func (sw *slidingWindow) write(p []byte) { + if len(p) >= cap(sw.buf) { + sw.buf = sw.buf[:cap(sw.buf)] + p = p[len(p)-cap(sw.buf):] + copy(sw.buf, p) + return + } + + left := cap(sw.buf) - len(sw.buf) + if left < len(p) { + // We need to shift spaceNeeded bytes from the end to make room for p at the end. + spaceNeeded := len(p) - left + copy(sw.buf, sw.buf[spaceNeeded:]) + sw.buf = sw.buf[:len(sw.buf)-spaceNeeded] + } + + sw.buf = append(sw.buf, p...) +} diff --git a/vendor/github.com/coder/websocket/conn.go b/vendor/github.com/coder/websocket/conn.go new file mode 100644 index 0000000000..092348712d --- /dev/null +++ b/vendor/github.com/coder/websocket/conn.go @@ -0,0 +1,306 @@ +//go:build !js + +package websocket + +import ( + "bufio" + "context" + "fmt" + "io" + "net" + "runtime" + "strconv" + "sync" + "sync/atomic" +) + +// MessageType represents the type of a WebSocket message. +// See https://tools.ietf.org/html/rfc6455#section-5.6 +type MessageType int + +// MessageType constants. +const ( + // MessageText is for UTF-8 encoded text messages like JSON. + MessageText MessageType = iota + 1 + // MessageBinary is for binary messages like protobufs. + MessageBinary +) + +// Conn represents a WebSocket connection. +// All methods may be called concurrently except for Reader and Read. +// +// You must always read from the connection. Otherwise control +// frames will not be handled. See Reader and CloseRead. +// +// Be sure to call Close on the connection when you +// are finished with it to release associated resources. +// +// On any error from any method, the connection is closed +// with an appropriate reason. +// +// This applies to context expirations as well unfortunately. +// See https://github.com/nhooyr/websocket/issues/242#issuecomment-633182220 +type Conn struct { + noCopy noCopy + + subprotocol string + rwc io.ReadWriteCloser + client bool + copts *compressionOptions + flateThreshold int + br *bufio.Reader + bw *bufio.Writer + + readTimeoutStop atomic.Pointer[func() bool] + writeTimeoutStop atomic.Pointer[func() bool] + + // Read state. + readMu *mu + readHeaderBuf [8]byte + readControlBuf [maxControlPayload]byte + msgReader *msgReader + + // Write state. + msgWriter *msgWriter + writeFrameMu *mu + writeBuf []byte + writeHeaderBuf [8]byte + writeHeader header + + // Close handshake state. + closeStateMu sync.RWMutex + closeReceivedErr error + closeSentErr error + + // CloseRead state. + closeReadMu sync.Mutex + closeReadCtx context.Context + closeReadDone chan struct{} + + closing atomic.Bool + closeMu sync.Mutex // Protects following. + closed chan struct{} + + pingCounter atomic.Int64 + activePingsMu sync.Mutex + activePings map[string]chan<- struct{} + onPingReceived func(context.Context, []byte) bool + onPongReceived func(context.Context, []byte) +} + +type connConfig struct { + subprotocol string + rwc io.ReadWriteCloser + client bool + copts *compressionOptions + flateThreshold int + onPingReceived func(context.Context, []byte) bool + onPongReceived func(context.Context, []byte) + + br *bufio.Reader + bw *bufio.Writer +} + +func newConn(cfg connConfig) *Conn { + c := &Conn{ + subprotocol: cfg.subprotocol, + rwc: cfg.rwc, + client: cfg.client, + copts: cfg.copts, + flateThreshold: cfg.flateThreshold, + + br: cfg.br, + bw: cfg.bw, + + closed: make(chan struct{}), + activePings: make(map[string]chan<- struct{}), + onPingReceived: cfg.onPingReceived, + onPongReceived: cfg.onPongReceived, + } + + c.readMu = newMu(c) + c.writeFrameMu = newMu(c) + + c.msgReader = newMsgReader(c) + + c.msgWriter = newMsgWriter(c) + if c.client { + c.writeBuf = extractBufioWriterBuf(c.bw, c.rwc) + } + + if c.flate() && c.flateThreshold == 0 { + c.flateThreshold = 128 + if !c.msgWriter.flateContextTakeover() { + c.flateThreshold = 512 + } + } + + runtime.SetFinalizer(c, func(c *Conn) { + c.close() + }) + + return c +} + +// Subprotocol returns the negotiated subprotocol. +// An empty string means the default protocol. +func (c *Conn) Subprotocol() string { + return c.subprotocol +} + +func (c *Conn) close() error { + c.closeMu.Lock() + defer c.closeMu.Unlock() + + if c.isClosed() { + return net.ErrClosed + } + runtime.SetFinalizer(c, nil) + close(c.closed) + + // Have to close after c.closed is closed to ensure any goroutine that wakes up + // from the connection being closed also sees that c.closed is closed and returns + // closeErr. + err := c.rwc.Close() + // With the close of rwc, these become safe to close. + c.msgWriter.close() + c.msgReader.close() + return err +} + +func (c *Conn) setupWriteTimeout(ctx context.Context) { + stop := context.AfterFunc(ctx, func() { + c.clearWriteTimeout() + c.close() + }) + swapTimeoutStop(&c.writeTimeoutStop, &stop) +} + +func (c *Conn) clearWriteTimeout() { + swapTimeoutStop(&c.writeTimeoutStop, nil) +} + +func (c *Conn) setupReadTimeout(ctx context.Context) { + stop := context.AfterFunc(ctx, func() { + c.clearReadTimeout() + c.close() + }) + swapTimeoutStop(&c.readTimeoutStop, &stop) +} + +func (c *Conn) clearReadTimeout() { + swapTimeoutStop(&c.readTimeoutStop, nil) +} + +func swapTimeoutStop(p *atomic.Pointer[func() bool], newStop *func() bool) { + oldStop := p.Swap(newStop) + if oldStop != nil { + (*oldStop)() + } +} + +func (c *Conn) flate() bool { + return c.copts != nil +} + +// Ping sends a ping to the peer and waits for a pong. +// Use this to measure latency or ensure the peer is responsive. +// Ping must be called concurrently with Reader as it does +// not read from the connection but instead waits for a Reader call +// to read the pong. +// +// TCP Keepalives should suffice for most use cases. +func (c *Conn) Ping(ctx context.Context) error { + p := c.pingCounter.Add(1) + + err := c.ping(ctx, strconv.FormatInt(p, 10)) + if err != nil { + return fmt.Errorf("failed to ping: %w", err) + } + return nil +} + +func (c *Conn) ping(ctx context.Context, p string) error { + pong := make(chan struct{}, 1) + + c.activePingsMu.Lock() + c.activePings[p] = pong + c.activePingsMu.Unlock() + + defer func() { + c.activePingsMu.Lock() + delete(c.activePings, p) + c.activePingsMu.Unlock() + }() + + err := c.writeControl(ctx, opPing, []byte(p)) + if err != nil { + return err + } + + select { + case <-c.closed: + return net.ErrClosed + case <-ctx.Done(): + return fmt.Errorf("failed to wait for pong: %w", ctx.Err()) + case <-pong: + return nil + } +} + +type mu struct { + c *Conn + ch chan struct{} +} + +func newMu(c *Conn) *mu { + return &mu{ + c: c, + ch: make(chan struct{}, 1), + } +} + +func (m *mu) forceLock() { + m.ch <- struct{}{} +} + +func (m *mu) tryLock() bool { + select { + case m.ch <- struct{}{}: + return true + default: + return false + } +} + +func (m *mu) lock(ctx context.Context) error { + select { + case <-m.c.closed: + return net.ErrClosed + case <-ctx.Done(): + return fmt.Errorf("failed to acquire lock: %w", ctx.Err()) + case m.ch <- struct{}{}: + // To make sure the connection is certainly alive. + // As it's possible the send on m.ch was selected + // over the receive on closed. + select { + case <-m.c.closed: + // Make sure to release. + m.unlock() + return net.ErrClosed + default: + } + return nil + } +} + +func (m *mu) unlock() { + select { + case <-m.ch: + default: + } +} + +type noCopy struct{} + +func (*noCopy) Lock() {} diff --git a/vendor/github.com/coder/websocket/dial.go b/vendor/github.com/coder/websocket/dial.go new file mode 100644 index 0000000000..f5e4544b43 --- /dev/null +++ b/vendor/github.com/coder/websocket/dial.go @@ -0,0 +1,347 @@ +//go:build !js + +package websocket + +import ( + "bufio" + "bytes" + "context" + "crypto/rand" + "encoding/base64" + "fmt" + "io" + "net/http" + "net/url" + "strings" + "sync" + "time" + + "github.com/coder/websocket/internal/errd" +) + +// DialOptions represents Dial's options. +type DialOptions struct { + // HTTPClient is used for the connection. + // Its Transport must return writable bodies for WebSocket handshakes. + // http.Transport does beginning with Go 1.12. + HTTPClient *http.Client + + // HTTPHeader specifies the HTTP headers included in the handshake request. + HTTPHeader http.Header + + // Host optionally overrides the Host HTTP header to send. If empty, the value + // of URL.Host will be used. + Host string + + // Subprotocols lists the WebSocket subprotocols to negotiate with the server. + Subprotocols []string + + // CompressionMode controls the compression mode. + // Defaults to CompressionDisabled. + // + // See docs on CompressionMode for details. + CompressionMode CompressionMode + + // CompressionThreshold controls the minimum size of a message before compression is applied. + // + // Defaults to 512 bytes for CompressionNoContextTakeover and 128 bytes + // for CompressionContextTakeover. + CompressionThreshold int + + // OnPingReceived is an optional callback invoked synchronously when a ping frame is received. + // + // The payload contains the application data of the ping frame. + // If the callback returns false, the subsequent pong frame will not be sent. + // To avoid blocking, any expensive processing should be performed asynchronously using a goroutine. + OnPingReceived func(ctx context.Context, payload []byte) bool + + // OnPongReceived is an optional callback invoked synchronously when a pong frame is received. + // + // The payload contains the application data of the pong frame. + // To avoid blocking, any expensive processing should be performed asynchronously using a goroutine. + // + // Unlike OnPingReceived, this callback does not return a value because a pong frame + // is a response to a ping and does not trigger any further frame transmission. + OnPongReceived func(ctx context.Context, payload []byte) +} + +func (opts *DialOptions) cloneWithDefaults(ctx context.Context) (context.Context, context.CancelFunc, *DialOptions) { + var cancel context.CancelFunc + + var o DialOptions + if opts != nil { + o = *opts + } + if o.HTTPClient == nil { + o.HTTPClient = http.DefaultClient + } + if o.HTTPClient.Timeout > 0 { + ctx, cancel = context.WithTimeout(ctx, o.HTTPClient.Timeout) + + newClient := *o.HTTPClient + newClient.Timeout = 0 + o.HTTPClient = &newClient + } + if o.HTTPHeader == nil { + o.HTTPHeader = http.Header{} + } + newClient := *o.HTTPClient + oldCheckRedirect := o.HTTPClient.CheckRedirect + newClient.CheckRedirect = func(req *http.Request, via []*http.Request) error { + switch req.URL.Scheme { + case "ws": + req.URL.Scheme = "http" + case "wss": + req.URL.Scheme = "https" + } + if oldCheckRedirect != nil { + return oldCheckRedirect(req, via) + } + return nil + } + o.HTTPClient = &newClient + + return ctx, cancel, &o +} + +// Dial performs a WebSocket handshake on url. +// +// The response is the WebSocket handshake response from the server. +// You never need to close resp.Body yourself. +// +// If an error occurs, the returned response may be non nil. +// However, you can only read the first 1024 bytes of the body. +// +// This function requires at least Go 1.12 as it uses a new feature +// in net/http to perform WebSocket handshakes. +// See docs on the HTTPClient option and https://github.com/golang/go/issues/26937#issuecomment-415855861 +// +// URLs with http/https schemes will work and are interpreted as ws/wss. +func Dial(ctx context.Context, u string, opts *DialOptions) (*Conn, *http.Response, error) { + return dial(ctx, u, opts, nil) +} + +func dial(ctx context.Context, urls string, opts *DialOptions, rand io.Reader) (_ *Conn, _ *http.Response, err error) { + defer errd.Wrap(&err, "failed to WebSocket dial") + + var cancel context.CancelFunc + ctx, cancel, opts = opts.cloneWithDefaults(ctx) + if cancel != nil { + defer cancel() + } + + secWebSocketKey, err := secWebSocketKey(rand) + if err != nil { + return nil, nil, fmt.Errorf("failed to generate Sec-WebSocket-Key: %w", err) + } + + var copts *compressionOptions + if opts.CompressionMode != CompressionDisabled { + copts = opts.CompressionMode.opts() + } + + resp, err := handshakeRequest(ctx, urls, opts, copts, secWebSocketKey) + if err != nil { + return nil, resp, err + } + respBody := resp.Body + resp.Body = nil + defer func() { + if err != nil { + // We read a bit of the body for easier debugging. + r := io.LimitReader(respBody, 1024) + + timer := time.AfterFunc(time.Second*3, func() { + respBody.Close() + }) + defer timer.Stop() + + b, _ := io.ReadAll(r) + respBody.Close() + resp.Body = io.NopCloser(bytes.NewReader(b)) + } + }() + + copts, err = verifyServerResponse(opts, copts, secWebSocketKey, resp) + if err != nil { + return nil, resp, err + } + + rwc, ok := respBody.(io.ReadWriteCloser) + if !ok { + return nil, resp, fmt.Errorf("response body is not a io.ReadWriteCloser: %T", respBody) + } + + return newConn(connConfig{ + subprotocol: resp.Header.Get("Sec-WebSocket-Protocol"), + rwc: rwc, + client: true, + copts: copts, + flateThreshold: opts.CompressionThreshold, + onPingReceived: opts.OnPingReceived, + onPongReceived: opts.OnPongReceived, + br: getBufioReader(rwc), + bw: getBufioWriter(rwc), + }), resp, nil +} + +func handshakeRequest(ctx context.Context, urls string, opts *DialOptions, copts *compressionOptions, secWebSocketKey string) (*http.Response, error) { + u, err := url.Parse(urls) + if err != nil { + return nil, fmt.Errorf("failed to parse url: %w", err) + } + + switch u.Scheme { + case "ws": + u.Scheme = "http" + case "wss": + u.Scheme = "https" + case "http", "https": + default: + return nil, fmt.Errorf("unexpected url scheme: %q", u.Scheme) + } + + req, err := http.NewRequestWithContext(ctx, "GET", u.String(), nil) + if err != nil { + return nil, fmt.Errorf("failed to create new http request: %w", err) + } + if len(opts.Host) > 0 { + req.Host = opts.Host + } + req.Header = opts.HTTPHeader.Clone() + req.Header.Set("Connection", "Upgrade") + req.Header.Set("Upgrade", "websocket") + req.Header.Set("Sec-WebSocket-Version", "13") + req.Header.Set("Sec-WebSocket-Key", secWebSocketKey) + if len(opts.Subprotocols) > 0 { + req.Header.Set("Sec-WebSocket-Protocol", strings.Join(opts.Subprotocols, ",")) + } + if copts != nil { + req.Header.Set("Sec-WebSocket-Extensions", copts.String()) + } + + resp, err := opts.HTTPClient.Do(req) + if err != nil { + return nil, fmt.Errorf("failed to send handshake request: %w", err) + } + return resp, nil +} + +func secWebSocketKey(rr io.Reader) (string, error) { + if rr == nil { + rr = rand.Reader + } + b := make([]byte, 16) + _, err := io.ReadFull(rr, b) + if err != nil { + return "", fmt.Errorf("failed to read random data from rand.Reader: %w", err) + } + return base64.StdEncoding.EncodeToString(b), nil +} + +func verifyServerResponse(opts *DialOptions, copts *compressionOptions, secWebSocketKey string, resp *http.Response) (*compressionOptions, error) { + if resp.StatusCode != http.StatusSwitchingProtocols { + return nil, fmt.Errorf("expected handshake response status code %v but got %v", http.StatusSwitchingProtocols, resp.StatusCode) + } + + if !headerContainsTokenIgnoreCase(resp.Header, "Connection", "Upgrade") { + return nil, fmt.Errorf("WebSocket protocol violation: Connection header %q does not contain Upgrade", resp.Header.Get("Connection")) + } + + if !headerContainsTokenIgnoreCase(resp.Header, "Upgrade", "WebSocket") { + return nil, fmt.Errorf("WebSocket protocol violation: Upgrade header %q does not contain websocket", resp.Header.Get("Upgrade")) + } + + if resp.Header.Get("Sec-WebSocket-Accept") != secWebSocketAccept(secWebSocketKey) { + return nil, fmt.Errorf("WebSocket protocol violation: invalid Sec-WebSocket-Accept %q, key %q", + resp.Header.Get("Sec-WebSocket-Accept"), + secWebSocketKey, + ) + } + + err := verifySubprotocol(opts.Subprotocols, resp) + if err != nil { + return nil, err + } + + return verifyServerExtensions(copts, resp.Header) +} + +func verifySubprotocol(subprotos []string, resp *http.Response) error { + proto := resp.Header.Get("Sec-WebSocket-Protocol") + if proto == "" { + return nil + } + + for _, sp2 := range subprotos { + if strings.EqualFold(sp2, proto) { + return nil + } + } + + return fmt.Errorf("WebSocket protocol violation: unexpected Sec-WebSocket-Protocol from server: %q", proto) +} + +func verifyServerExtensions(copts *compressionOptions, h http.Header) (*compressionOptions, error) { + exts := websocketExtensions(h) + if len(exts) == 0 { + return nil, nil + } + + ext := exts[0] + if ext.name != "permessage-deflate" || len(exts) > 1 || copts == nil { + return nil, fmt.Errorf("WebSocket protcol violation: unsupported extensions from server: %+v", exts[1:]) + } + + _copts := *copts + copts = &_copts + + for _, p := range ext.params { + switch p { + case "client_no_context_takeover": + copts.clientNoContextTakeover = true + continue + case "server_no_context_takeover": + copts.serverNoContextTakeover = true + continue + } + if strings.HasPrefix(p, "server_max_window_bits=") { + // We can't adjust the deflate window, but decoding with a larger window is acceptable. + continue + } + + return nil, fmt.Errorf("unsupported permessage-deflate parameter: %q", p) + } + + return copts, nil +} + +var bufioReaderPool sync.Pool + +func getBufioReader(r io.Reader) *bufio.Reader { + br, ok := bufioReaderPool.Get().(*bufio.Reader) + if !ok { + return bufio.NewReader(r) + } + br.Reset(r) + return br +} + +func putBufioReader(br *bufio.Reader) { + bufioReaderPool.Put(br) +} + +var bufioWriterPool sync.Pool + +func getBufioWriter(w io.Writer) *bufio.Writer { + bw, ok := bufioWriterPool.Get().(*bufio.Writer) + if !ok { + return bufio.NewWriter(w) + } + bw.Reset(w) + return bw +} + +func putBufioWriter(bw *bufio.Writer) { + bufioWriterPool.Put(bw) +} diff --git a/vendor/github.com/coder/websocket/doc.go b/vendor/github.com/coder/websocket/doc.go new file mode 100644 index 0000000000..0c7f8316e0 --- /dev/null +++ b/vendor/github.com/coder/websocket/doc.go @@ -0,0 +1,33 @@ +//go:build !js + +// Package websocket implements the RFC 6455 WebSocket protocol. +// +// https://tools.ietf.org/html/rfc6455 +// +// Use Dial to dial a WebSocket server. +// +// Use Accept to accept a WebSocket client. +// +// Conn represents the resulting WebSocket connection. +// +// The examples are the best way to understand how to correctly use the library. +// +// The wsjson subpackage contain helpers for JSON and protobuf messages. +// +// More documentation at https://github.com/coder/websocket. +// +// # Wasm +// +// The client side supports compiling to Wasm. +// It wraps the WebSocket browser API. +// +// See https://developer.mozilla.org/en-US/docs/Web/API/WebSocket +// +// Some important caveats to be aware of: +// +// - Accept always errors out +// - Conn.Ping is no-op +// - Conn.CloseNow is Close(StatusGoingAway, "") +// - HTTPClient, HTTPHeader and CompressionMode in DialOptions are no-op +// - *http.Response from Dial is &http.Response{} with a 101 status code on success +package websocket // import "github.com/coder/websocket" diff --git a/vendor/github.com/coder/websocket/errors.go b/vendor/github.com/coder/websocket/errors.go new file mode 100644 index 0000000000..bf4fc2b01e --- /dev/null +++ b/vendor/github.com/coder/websocket/errors.go @@ -0,0 +1,8 @@ +package websocket + +import ( + "errors" +) + +// ErrMessageTooBig is returned when a message exceeds the read limit. +var ErrMessageTooBig = errors.New("websocket: message too big") diff --git a/vendor/github.com/coder/websocket/frame.go b/vendor/github.com/coder/websocket/frame.go new file mode 100644 index 0000000000..e7ab76bedf --- /dev/null +++ b/vendor/github.com/coder/websocket/frame.go @@ -0,0 +1,173 @@ +//go:build !js + +package websocket + +import ( + "bufio" + "encoding/binary" + "fmt" + "io" + "math" + + "github.com/coder/websocket/internal/errd" +) + +// opcode represents a WebSocket opcode. +type opcode int + +// https://tools.ietf.org/html/rfc6455#section-11.8. +const ( + opContinuation opcode = iota + opText + opBinary + // 3 - 7 are reserved for further non-control frames. + _ + _ + _ + _ + _ + opClose + opPing + opPong + // 11-16 are reserved for further control frames. +) + +// header represents a WebSocket frame header. +// See https://tools.ietf.org/html/rfc6455#section-5.2. +type header struct { + fin bool + rsv1 bool + rsv2 bool + rsv3 bool + opcode opcode + + payloadLength int64 + + masked bool + maskKey uint32 +} + +// readFrameHeader reads a header from the reader. +// See https://tools.ietf.org/html/rfc6455#section-5.2. +func readFrameHeader(r *bufio.Reader, readBuf []byte) (h header, err error) { + defer errd.Wrap(&err, "failed to read frame header") + + b, err := r.ReadByte() + if err != nil { + return header{}, err + } + + h.fin = b&(1<<7) != 0 + h.rsv1 = b&(1<<6) != 0 + h.rsv2 = b&(1<<5) != 0 + h.rsv3 = b&(1<<4) != 0 + + h.opcode = opcode(b & 0xf) + + b, err = r.ReadByte() + if err != nil { + return header{}, err + } + + h.masked = b&(1<<7) != 0 + + payloadLength := b &^ (1 << 7) + switch { + case payloadLength < 126: + h.payloadLength = int64(payloadLength) + case payloadLength == 126: + _, err = io.ReadFull(r, readBuf[:2]) + h.payloadLength = int64(binary.BigEndian.Uint16(readBuf)) + case payloadLength == 127: + _, err = io.ReadFull(r, readBuf) + h.payloadLength = int64(binary.BigEndian.Uint64(readBuf)) + } + if err != nil { + return header{}, err + } + + if h.payloadLength < 0 { + return header{}, fmt.Errorf("received negative payload length: %v", h.payloadLength) + } + + if h.masked { + _, err = io.ReadFull(r, readBuf[:4]) + if err != nil { + return header{}, err + } + h.maskKey = binary.LittleEndian.Uint32(readBuf) + } + + return h, nil +} + +// maxControlPayload is the maximum length of a control frame payload. +// See https://tools.ietf.org/html/rfc6455#section-5.5. +const maxControlPayload = 125 + +// writeFrameHeader writes the bytes of the header to w. +// See https://tools.ietf.org/html/rfc6455#section-5.2 +func writeFrameHeader(h header, w *bufio.Writer, buf []byte) (err error) { + defer errd.Wrap(&err, "failed to write frame header") + + var b byte + if h.fin { + b |= 1 << 7 + } + if h.rsv1 { + b |= 1 << 6 + } + if h.rsv2 { + b |= 1 << 5 + } + if h.rsv3 { + b |= 1 << 4 + } + + b |= byte(h.opcode) + + err = w.WriteByte(b) + if err != nil { + return err + } + + lengthByte := byte(0) + if h.masked { + lengthByte |= 1 << 7 + } + + switch { + case h.payloadLength > math.MaxUint16: + lengthByte |= 127 + case h.payloadLength > 125: + lengthByte |= 126 + case h.payloadLength >= 0: + lengthByte |= byte(h.payloadLength) + } + err = w.WriteByte(lengthByte) + if err != nil { + return err + } + + switch { + case h.payloadLength > math.MaxUint16: + binary.BigEndian.PutUint64(buf, uint64(h.payloadLength)) + _, err = w.Write(buf) + case h.payloadLength > 125: + binary.BigEndian.PutUint16(buf, uint16(h.payloadLength)) + _, err = w.Write(buf[:2]) + } + if err != nil { + return err + } + + if h.masked { + binary.LittleEndian.PutUint32(buf, h.maskKey) + _, err = w.Write(buf[:4]) + if err != nil { + return err + } + } + + return nil +} diff --git a/vendor/github.com/coder/websocket/hijack.go b/vendor/github.com/coder/websocket/hijack.go new file mode 100644 index 0000000000..9cce45cad6 --- /dev/null +++ b/vendor/github.com/coder/websocket/hijack.go @@ -0,0 +1,33 @@ +//go:build !js + +package websocket + +import ( + "net/http" +) + +type rwUnwrapper interface { + Unwrap() http.ResponseWriter +} + +// hijacker returns the Hijacker interface of the http.ResponseWriter. +// It follows the Unwrap method of the http.ResponseWriter if available, +// matching the behavior of http.ResponseController. If the Hijacker +// interface is not found, it returns false. +// +// Since the http.ResponseController is not available in Go 1.19, and +// does not support checking the presence of the Hijacker interface, +// this function is used to provide a consistent way to check for the +// Hijacker interface across Go versions. +func hijacker(rw http.ResponseWriter) (http.Hijacker, bool) { + for { + switch t := rw.(type) { + case http.Hijacker: + return t, true + case rwUnwrapper: + rw = t.Unwrap() + default: + return nil, false + } + } +} diff --git a/vendor/github.com/coder/websocket/internal/bpool/bpool.go b/vendor/github.com/coder/websocket/internal/bpool/bpool.go new file mode 100644 index 0000000000..12cf577a9f --- /dev/null +++ b/vendor/github.com/coder/websocket/internal/bpool/bpool.go @@ -0,0 +1,25 @@ +package bpool + +import ( + "bytes" + "sync" +) + +var bpool = sync.Pool{ + New: func() any { + return &bytes.Buffer{} + }, +} + +// Get returns a buffer from the pool or creates a new one if +// the pool is empty. +func Get() *bytes.Buffer { + b := bpool.Get() + return b.(*bytes.Buffer) +} + +// Put returns a buffer into the pool. +func Put(b *bytes.Buffer) { + b.Reset() + bpool.Put(b) +} diff --git a/vendor/github.com/coder/websocket/internal/errd/wrap.go b/vendor/github.com/coder/websocket/internal/errd/wrap.go new file mode 100644 index 0000000000..c80d0a653f --- /dev/null +++ b/vendor/github.com/coder/websocket/internal/errd/wrap.go @@ -0,0 +1,14 @@ +package errd + +import ( + "fmt" +) + +// Wrap wraps err with fmt.Errorf if err is non nil. +// Intended for use with defer and a named error return. +// Inspired by https://github.com/golang/go/issues/32676. +func Wrap(err *error, f string, v ...any) { + if *err != nil { + *err = fmt.Errorf(f+": %w", append(v, *err)...) + } +} diff --git a/vendor/github.com/coder/websocket/internal/util/util.go b/vendor/github.com/coder/websocket/internal/util/util.go new file mode 100644 index 0000000000..aa21070313 --- /dev/null +++ b/vendor/github.com/coder/websocket/internal/util/util.go @@ -0,0 +1,15 @@ +package util + +// WriterFunc is used to implement one off io.Writers. +type WriterFunc func(p []byte) (int, error) + +func (f WriterFunc) Write(p []byte) (int, error) { + return f(p) +} + +// ReaderFunc is used to implement one off io.Readers. +type ReaderFunc func(p []byte) (int, error) + +func (f ReaderFunc) Read(p []byte) (int, error) { + return f(p) +} diff --git a/vendor/github.com/coder/websocket/internal/wsjs/wsjs_js.go b/vendor/github.com/coder/websocket/internal/wsjs/wsjs_js.go new file mode 100644 index 0000000000..45ecf49d38 --- /dev/null +++ b/vendor/github.com/coder/websocket/internal/wsjs/wsjs_js.go @@ -0,0 +1,169 @@ +//go:build js +// +build js + +// Package wsjs implements typed access to the browser javascript WebSocket API. +// +// https://developer.mozilla.org/en-US/docs/Web/API/WebSocket +package wsjs + +import ( + "syscall/js" +) + +func handleJSError(err *error, onErr func()) { + r := recover() + + if jsErr, ok := r.(js.Error); ok { + *err = jsErr + + if onErr != nil { + onErr() + } + return + } + + if r != nil { + panic(r) + } +} + +// New is a wrapper around the javascript WebSocket constructor. +func New(url string, protocols []string) (c WebSocket, err error) { + defer handleJSError(&err, func() { + c = WebSocket{} + }) + + jsProtocols := make([]any, len(protocols)) + for i, p := range protocols { + jsProtocols[i] = p + } + + c = WebSocket{ + v: js.Global().Get("WebSocket").New(url, jsProtocols), + } + + c.setBinaryType("arraybuffer") + + return c, nil +} + +// WebSocket is a wrapper around a javascript WebSocket object. +type WebSocket struct { + v js.Value +} + +func (c WebSocket) setBinaryType(typ string) { + c.v.Set("binaryType", string(typ)) +} + +func (c WebSocket) addEventListener(eventType string, fn func(e js.Value)) func() { + f := js.FuncOf(func(this js.Value, args []js.Value) any { + fn(args[0]) + return nil + }) + c.v.Call("addEventListener", eventType, f) + + return func() { + c.v.Call("removeEventListener", eventType, f) + f.Release() + } +} + +// CloseEvent is the type passed to a WebSocket close handler. +type CloseEvent struct { + Code uint16 + Reason string + WasClean bool +} + +// OnClose registers a function to be called when the WebSocket is closed. +func (c WebSocket) OnClose(fn func(CloseEvent)) (remove func()) { + return c.addEventListener("close", func(e js.Value) { + ce := CloseEvent{ + Code: uint16(e.Get("code").Int()), + Reason: e.Get("reason").String(), + WasClean: e.Get("wasClean").Bool(), + } + fn(ce) + }) +} + +// OnError registers a function to be called when there is an error +// with the WebSocket. +func (c WebSocket) OnError(fn func(e js.Value)) (remove func()) { + return c.addEventListener("error", fn) +} + +// MessageEvent is the type passed to a message handler. +type MessageEvent struct { + // string or []byte. + Data any + + // There are more fields to the interface but we don't use them. + // See https://developer.mozilla.org/en-US/docs/Web/API/MessageEvent +} + +// OnMessage registers a function to be called when the WebSocket receives a message. +func (c WebSocket) OnMessage(fn func(m MessageEvent)) (remove func()) { + return c.addEventListener("message", func(e js.Value) { + var data any + + arrayBuffer := e.Get("data") + if arrayBuffer.Type() == js.TypeString { + data = arrayBuffer.String() + } else { + data = extractArrayBuffer(arrayBuffer) + } + + me := MessageEvent{ + Data: data, + } + fn(me) + }) +} + +// Subprotocol returns the WebSocket subprotocol in use. +func (c WebSocket) Subprotocol() string { + return c.v.Get("protocol").String() +} + +// OnOpen registers a function to be called when the WebSocket is opened. +func (c WebSocket) OnOpen(fn func(e js.Value)) (remove func()) { + return c.addEventListener("open", fn) +} + +// Close closes the WebSocket with the given code and reason. +func (c WebSocket) Close(code int, reason string) (err error) { + defer handleJSError(&err, nil) + c.v.Call("close", code, reason) + return err +} + +// SendText sends the given string as a text message +// on the WebSocket. +func (c WebSocket) SendText(v string) (err error) { + defer handleJSError(&err, nil) + c.v.Call("send", v) + return err +} + +// SendBytes sends the given message as a binary message +// on the WebSocket. +func (c WebSocket) SendBytes(v []byte) (err error) { + defer handleJSError(&err, nil) + c.v.Call("send", uint8Array(v)) + return err +} + +func extractArrayBuffer(arrayBuffer js.Value) []byte { + uint8Array := js.Global().Get("Uint8Array").New(arrayBuffer) + dst := make([]byte, uint8Array.Length()) + js.CopyBytesToGo(dst, uint8Array) + return dst +} + +func uint8Array(src []byte) js.Value { + uint8Array := js.Global().Get("Uint8Array").New(len(src)) + js.CopyBytesToJS(uint8Array, src) + return uint8Array +} diff --git a/vendor/github.com/coder/websocket/mask.go b/vendor/github.com/coder/websocket/mask.go new file mode 100644 index 0000000000..7bc0c8d5f5 --- /dev/null +++ b/vendor/github.com/coder/websocket/mask.go @@ -0,0 +1,128 @@ +package websocket + +import ( + "encoding/binary" + "math/bits" +) + +// maskGo applies the WebSocket masking algorithm to p +// with the given key. +// See https://tools.ietf.org/html/rfc6455#section-5.3 +// +// The returned value is the correctly rotated key to +// to continue to mask/unmask the message. +// +// It is optimized for LittleEndian and expects the key +// to be in little endian. +// +// See https://github.com/golang/go/issues/31586 +func maskGo(b []byte, key uint32) uint32 { + if len(b) >= 8 { + key64 := uint64(key)<<32 | uint64(key) + + // At some point in the future we can clean these unrolled loops up. + // See https://github.com/golang/go/issues/31586#issuecomment-487436401 + + // Then we xor until b is less than 128 bytes. + for len(b) >= 128 { + v := binary.LittleEndian.Uint64(b) + binary.LittleEndian.PutUint64(b, v^key64) + v = binary.LittleEndian.Uint64(b[8:16]) + binary.LittleEndian.PutUint64(b[8:16], v^key64) + v = binary.LittleEndian.Uint64(b[16:24]) + binary.LittleEndian.PutUint64(b[16:24], v^key64) + v = binary.LittleEndian.Uint64(b[24:32]) + binary.LittleEndian.PutUint64(b[24:32], v^key64) + v = binary.LittleEndian.Uint64(b[32:40]) + binary.LittleEndian.PutUint64(b[32:40], v^key64) + v = binary.LittleEndian.Uint64(b[40:48]) + binary.LittleEndian.PutUint64(b[40:48], v^key64) + v = binary.LittleEndian.Uint64(b[48:56]) + binary.LittleEndian.PutUint64(b[48:56], v^key64) + v = binary.LittleEndian.Uint64(b[56:64]) + binary.LittleEndian.PutUint64(b[56:64], v^key64) + v = binary.LittleEndian.Uint64(b[64:72]) + binary.LittleEndian.PutUint64(b[64:72], v^key64) + v = binary.LittleEndian.Uint64(b[72:80]) + binary.LittleEndian.PutUint64(b[72:80], v^key64) + v = binary.LittleEndian.Uint64(b[80:88]) + binary.LittleEndian.PutUint64(b[80:88], v^key64) + v = binary.LittleEndian.Uint64(b[88:96]) + binary.LittleEndian.PutUint64(b[88:96], v^key64) + v = binary.LittleEndian.Uint64(b[96:104]) + binary.LittleEndian.PutUint64(b[96:104], v^key64) + v = binary.LittleEndian.Uint64(b[104:112]) + binary.LittleEndian.PutUint64(b[104:112], v^key64) + v = binary.LittleEndian.Uint64(b[112:120]) + binary.LittleEndian.PutUint64(b[112:120], v^key64) + v = binary.LittleEndian.Uint64(b[120:128]) + binary.LittleEndian.PutUint64(b[120:128], v^key64) + b = b[128:] + } + + // Then we xor until b is less than 64 bytes. + for len(b) >= 64 { + v := binary.LittleEndian.Uint64(b) + binary.LittleEndian.PutUint64(b, v^key64) + v = binary.LittleEndian.Uint64(b[8:16]) + binary.LittleEndian.PutUint64(b[8:16], v^key64) + v = binary.LittleEndian.Uint64(b[16:24]) + binary.LittleEndian.PutUint64(b[16:24], v^key64) + v = binary.LittleEndian.Uint64(b[24:32]) + binary.LittleEndian.PutUint64(b[24:32], v^key64) + v = binary.LittleEndian.Uint64(b[32:40]) + binary.LittleEndian.PutUint64(b[32:40], v^key64) + v = binary.LittleEndian.Uint64(b[40:48]) + binary.LittleEndian.PutUint64(b[40:48], v^key64) + v = binary.LittleEndian.Uint64(b[48:56]) + binary.LittleEndian.PutUint64(b[48:56], v^key64) + v = binary.LittleEndian.Uint64(b[56:64]) + binary.LittleEndian.PutUint64(b[56:64], v^key64) + b = b[64:] + } + + // Then we xor until b is less than 32 bytes. + for len(b) >= 32 { + v := binary.LittleEndian.Uint64(b) + binary.LittleEndian.PutUint64(b, v^key64) + v = binary.LittleEndian.Uint64(b[8:16]) + binary.LittleEndian.PutUint64(b[8:16], v^key64) + v = binary.LittleEndian.Uint64(b[16:24]) + binary.LittleEndian.PutUint64(b[16:24], v^key64) + v = binary.LittleEndian.Uint64(b[24:32]) + binary.LittleEndian.PutUint64(b[24:32], v^key64) + b = b[32:] + } + + // Then we xor until b is less than 16 bytes. + for len(b) >= 16 { + v := binary.LittleEndian.Uint64(b) + binary.LittleEndian.PutUint64(b, v^key64) + v = binary.LittleEndian.Uint64(b[8:16]) + binary.LittleEndian.PutUint64(b[8:16], v^key64) + b = b[16:] + } + + // Then we xor until b is less than 8 bytes. + for len(b) >= 8 { + v := binary.LittleEndian.Uint64(b) + binary.LittleEndian.PutUint64(b, v^key64) + b = b[8:] + } + } + + // Then we xor until b is less than 4 bytes. + for len(b) >= 4 { + v := binary.LittleEndian.Uint32(b) + binary.LittleEndian.PutUint32(b, v^key) + b = b[4:] + } + + // xor remaining bytes. + for i := range b { + b[i] ^= byte(key) + key = bits.RotateLeft32(key, -8) + } + + return key +} diff --git a/vendor/github.com/coder/websocket/mask_amd64.s b/vendor/github.com/coder/websocket/mask_amd64.s new file mode 100644 index 0000000000..bd42be31f1 --- /dev/null +++ b/vendor/github.com/coder/websocket/mask_amd64.s @@ -0,0 +1,127 @@ +#include "textflag.h" + +// func maskAsm(b *byte, len int, key uint32) +TEXT ·maskAsm(SB), NOSPLIT, $0-28 + // AX = b + // CX = len (left length) + // SI = key (uint32) + // DI = uint64(SI) | uint64(SI)<<32 + MOVQ b+0(FP), AX + MOVQ len+8(FP), CX + MOVL key+16(FP), SI + + // calculate the DI + // DI = SI<<32 | SI + MOVL SI, DI + MOVQ DI, DX + SHLQ $32, DI + ORQ DX, DI + + CMPQ CX, $15 + JLE less_than_16 + CMPQ CX, $63 + JLE less_than_64 + CMPQ CX, $128 + JLE sse + TESTQ $31, AX + JNZ unaligned + +unaligned_loop_1byte: + XORB SI, (AX) + INCQ AX + DECQ CX + ROLL $24, SI + TESTQ $7, AX + JNZ unaligned_loop_1byte + + // calculate DI again since SI was modified + // DI = SI<<32 | SI + MOVL SI, DI + MOVQ DI, DX + SHLQ $32, DI + ORQ DX, DI + + TESTQ $31, AX + JZ sse + +unaligned: + TESTQ $7, AX // AND $7 & len, if not zero jump to loop_1b. + JNZ unaligned_loop_1byte + +unaligned_loop: + // we don't need to check the CX since we know it's above 128 + XORQ DI, (AX) + ADDQ $8, AX + SUBQ $8, CX + TESTQ $31, AX + JNZ unaligned_loop + JMP sse + +sse: + CMPQ CX, $0x40 + JL less_than_64 + MOVQ DI, X0 + PUNPCKLQDQ X0, X0 + +sse_loop: + MOVOU 0*16(AX), X1 + MOVOU 1*16(AX), X2 + MOVOU 2*16(AX), X3 + MOVOU 3*16(AX), X4 + PXOR X0, X1 + PXOR X0, X2 + PXOR X0, X3 + PXOR X0, X4 + MOVOU X1, 0*16(AX) + MOVOU X2, 1*16(AX) + MOVOU X3, 2*16(AX) + MOVOU X4, 3*16(AX) + ADDQ $0x40, AX + SUBQ $0x40, CX + CMPQ CX, $0x40 + JAE sse_loop + +less_than_64: + TESTQ $32, CX + JZ less_than_32 + XORQ DI, (AX) + XORQ DI, 8(AX) + XORQ DI, 16(AX) + XORQ DI, 24(AX) + ADDQ $32, AX + +less_than_32: + TESTQ $16, CX + JZ less_than_16 + XORQ DI, (AX) + XORQ DI, 8(AX) + ADDQ $16, AX + +less_than_16: + TESTQ $8, CX + JZ less_than_8 + XORQ DI, (AX) + ADDQ $8, AX + +less_than_8: + TESTQ $4, CX + JZ less_than_4 + XORL SI, (AX) + ADDQ $4, AX + +less_than_4: + TESTQ $2, CX + JZ less_than_2 + XORW SI, (AX) + ROLL $16, SI + ADDQ $2, AX + +less_than_2: + TESTQ $1, CX + JZ done + XORB SI, (AX) + ROLL $24, SI + +done: + MOVL SI, ret+24(FP) + RET diff --git a/vendor/github.com/coder/websocket/mask_arm64.s b/vendor/github.com/coder/websocket/mask_arm64.s new file mode 100644 index 0000000000..e494b43ab9 --- /dev/null +++ b/vendor/github.com/coder/websocket/mask_arm64.s @@ -0,0 +1,72 @@ +#include "textflag.h" + +// func maskAsm(b *byte, len int, key uint32) +TEXT ·maskAsm(SB), NOSPLIT, $0-28 + // R0 = b + // R1 = len + // R3 = key (uint32) + // R2 = uint64(key)<<32 | uint64(key) + MOVD b_ptr+0(FP), R0 + MOVD b_len+8(FP), R1 + MOVWU key+16(FP), R3 + MOVD R3, R2 + ORR R2<<32, R2, R2 + VDUP R2, V0.D2 + CMP $64, R1 + BLT less_than_64 + +loop_64: + VLD1 (R0), [V1.B16, V2.B16, V3.B16, V4.B16] + VEOR V1.B16, V0.B16, V1.B16 + VEOR V2.B16, V0.B16, V2.B16 + VEOR V3.B16, V0.B16, V3.B16 + VEOR V4.B16, V0.B16, V4.B16 + VST1.P [V1.B16, V2.B16, V3.B16, V4.B16], 64(R0) + SUBS $64, R1 + CMP $64, R1 + BGE loop_64 + +less_than_64: + CBZ R1, end + TBZ $5, R1, less_than_32 + VLD1 (R0), [V1.B16, V2.B16] + VEOR V1.B16, V0.B16, V1.B16 + VEOR V2.B16, V0.B16, V2.B16 + VST1.P [V1.B16, V2.B16], 32(R0) + +less_than_32: + TBZ $4, R1, less_than_16 + LDP (R0), (R11, R12) + EOR R11, R2, R11 + EOR R12, R2, R12 + STP.P (R11, R12), 16(R0) + +less_than_16: + TBZ $3, R1, less_than_8 + MOVD (R0), R11 + EOR R2, R11, R11 + MOVD.P R11, 8(R0) + +less_than_8: + TBZ $2, R1, less_than_4 + MOVWU (R0), R11 + EORW R2, R11, R11 + MOVWU.P R11, 4(R0) + +less_than_4: + TBZ $1, R1, less_than_2 + MOVHU (R0), R11 + EORW R3, R11, R11 + MOVHU.P R11, 2(R0) + RORW $16, R3 + +less_than_2: + TBZ $0, R1, end + MOVBU (R0), R11 + EORW R3, R11, R11 + MOVBU.P R11, 1(R0) + RORW $8, R3 + +end: + MOVWU R3, ret+24(FP) + RET diff --git a/vendor/github.com/coder/websocket/mask_asm.go b/vendor/github.com/coder/websocket/mask_asm.go new file mode 100644 index 0000000000..f9484b5bc0 --- /dev/null +++ b/vendor/github.com/coder/websocket/mask_asm.go @@ -0,0 +1,26 @@ +//go:build amd64 || arm64 + +package websocket + +func mask(b []byte, key uint32) uint32 { + // TODO: Will enable in v1.9.0. + return maskGo(b, key) + /* + if len(b) > 0 { + return maskAsm(&b[0], len(b), key) + } + return key + */ +} + +// @nhooyr: I am not confident that the amd64 or the arm64 implementations of this +// function are perfect. There are almost certainly missing optimizations or +// opportunities for simplification. I'm confident there are no bugs though. +// For example, the arm64 implementation doesn't align memory like the amd64. +// Or the amd64 implementation could use AVX512 instead of just AVX2. +// The AVX2 code I had to disable anyway as it wasn't performing as expected. +// See https://github.com/nhooyr/websocket/pull/326#issuecomment-1771138049 +// +//go:noescape +//lint:ignore U1000 disabled till v1.9.0 +func maskAsm(b *byte, len int, key uint32) uint32 diff --git a/vendor/github.com/coder/websocket/mask_go.go b/vendor/github.com/coder/websocket/mask_go.go new file mode 100644 index 0000000000..b29435e956 --- /dev/null +++ b/vendor/github.com/coder/websocket/mask_go.go @@ -0,0 +1,7 @@ +//go:build !amd64 && !arm64 && !js + +package websocket + +func mask(b []byte, key uint32) uint32 { + return maskGo(b, key) +} diff --git a/vendor/github.com/coder/websocket/netconn.go b/vendor/github.com/coder/websocket/netconn.go new file mode 100644 index 0000000000..1f73b04be6 --- /dev/null +++ b/vendor/github.com/coder/websocket/netconn.go @@ -0,0 +1,233 @@ +package websocket + +import ( + "context" + "fmt" + "io" + "math" + "net" + "sync/atomic" + "time" +) + +// NetConn converts a *websocket.Conn into a net.Conn. +// +// It's for tunneling arbitrary protocols over WebSockets. +// Few users of the library will need this but it's tricky to implement +// correctly and so provided in the library. +// See https://github.com/nhooyr/websocket/issues/100. +// +// Every Write to the net.Conn will correspond to a message write of +// the given type on *websocket.Conn. +// +// The passed ctx bounds the lifetime of the net.Conn. If cancelled, +// all reads and writes on the net.Conn will be cancelled. +// +// If a message is read that is not of the correct type, the connection +// will be closed with StatusUnsupportedData and an error will be returned. +// +// Close will close the *websocket.Conn with StatusNormalClosure. +// +// When a deadline is hit and there is an active read or write goroutine, the +// connection will be closed. This is different from most net.Conn implementations +// where only the reading/writing goroutines are interrupted but the connection +// is kept alive. +// +// The Addr methods will return the real addresses for connections obtained +// from websocket.Accept. But for connections obtained from websocket.Dial, a mock net.Addr +// will be returned that gives "websocket" for Network() and "websocket/unknown-addr" for +// String(). This is because websocket.Dial only exposes a io.ReadWriteCloser instead of the +// full net.Conn to us. +// +// When running as WASM, the Addr methods will always return the mock address described above. +// +// A received StatusNormalClosure or StatusGoingAway close frame will be translated to +// io.EOF when reading. +// +// Furthermore, the ReadLimit is set to -1 to disable it. +func NetConn(ctx context.Context, c *Conn, msgType MessageType) net.Conn { + c.SetReadLimit(-1) + + nc := &netConn{ + c: c, + msgType: msgType, + readMu: newMu(c), + writeMu: newMu(c), + } + + nc.writeCtx, nc.writeCancel = context.WithCancel(ctx) + nc.readCtx, nc.readCancel = context.WithCancel(ctx) + + nc.writeTimer = time.AfterFunc(math.MaxInt64, func() { + if !nc.writeMu.tryLock() { + // If the lock cannot be acquired, then there is an + // active write goroutine and so we should cancel the context. + nc.writeCancel() + return + } + defer nc.writeMu.unlock() + + // Prevents future writes from writing until the deadline is reset. + nc.writeExpired.Store(1) + }) + if !nc.writeTimer.Stop() { + <-nc.writeTimer.C + } + + nc.readTimer = time.AfterFunc(math.MaxInt64, func() { + if !nc.readMu.tryLock() { + // If the lock cannot be acquired, then there is an + // active read goroutine and so we should cancel the context. + nc.readCancel() + return + } + defer nc.readMu.unlock() + + // Prevents future reads from reading until the deadline is reset. + nc.readExpired.Store(1) + }) + if !nc.readTimer.Stop() { + <-nc.readTimer.C + } + + return nc +} + +type netConn struct { + c *Conn + msgType MessageType + + writeTimer *time.Timer + writeMu *mu + writeExpired atomic.Int64 + writeCtx context.Context + writeCancel context.CancelFunc + + readTimer *time.Timer + readMu *mu + readExpired atomic.Int64 + readCtx context.Context + readCancel context.CancelFunc + readEOFed bool + reader io.Reader +} + +var _ net.Conn = &netConn{} + +func (nc *netConn) Close() error { + nc.writeTimer.Stop() + nc.writeCancel() + nc.readTimer.Stop() + nc.readCancel() + return nc.c.Close(StatusNormalClosure, "") +} + +func (nc *netConn) Write(p []byte) (int, error) { + nc.writeMu.forceLock() + defer nc.writeMu.unlock() + + if nc.writeExpired.Load() == 1 { + return 0, fmt.Errorf("failed to write: %w", context.DeadlineExceeded) + } + + err := nc.c.Write(nc.writeCtx, nc.msgType, p) + if err != nil { + return 0, err + } + return len(p), nil +} + +func (nc *netConn) Read(p []byte) (int, error) { + nc.readMu.forceLock() + defer nc.readMu.unlock() + + for { + n, err := nc.read(p) + if err != nil { + return n, err + } + if n == 0 { + continue + } + return n, nil + } +} + +func (nc *netConn) read(p []byte) (int, error) { + if nc.readExpired.Load() == 1 { + return 0, fmt.Errorf("failed to read: %w", context.DeadlineExceeded) + } + + if nc.readEOFed { + return 0, io.EOF + } + + if nc.reader == nil { + typ, r, err := nc.c.Reader(nc.readCtx) + if err != nil { + switch CloseStatus(err) { + case StatusNormalClosure, StatusGoingAway: + nc.readEOFed = true + return 0, io.EOF + } + return 0, err + } + if typ != nc.msgType { + err := fmt.Errorf("unexpected frame type read (expected %v): %v", nc.msgType, typ) + nc.c.Close(StatusUnsupportedData, err.Error()) + return 0, err + } + nc.reader = r + } + + n, err := nc.reader.Read(p) + if err == io.EOF { + nc.reader = nil + err = nil + } + return n, err +} + +type websocketAddr struct{} + +func (a websocketAddr) Network() string { + return "websocket" +} + +func (a websocketAddr) String() string { + return "websocket/unknown-addr" +} + +func (nc *netConn) SetDeadline(t time.Time) error { + nc.SetWriteDeadline(t) + nc.SetReadDeadline(t) + return nil +} + +func (nc *netConn) SetWriteDeadline(t time.Time) error { + nc.writeExpired.Store(0) + if t.IsZero() { + nc.writeTimer.Stop() + } else { + dur := time.Until(t) + if dur <= 0 { + dur = 1 + } + nc.writeTimer.Reset(dur) + } + return nil +} + +func (nc *netConn) SetReadDeadline(t time.Time) error { + nc.readExpired.Store(0) + if t.IsZero() { + nc.readTimer.Stop() + } else { + dur := time.Until(t) + if dur <= 0 { + dur = 1 + } + nc.readTimer.Reset(dur) + } + return nil +} diff --git a/vendor/github.com/coder/websocket/netconn_js.go b/vendor/github.com/coder/websocket/netconn_js.go new file mode 100644 index 0000000000..ccc8c89fb2 --- /dev/null +++ b/vendor/github.com/coder/websocket/netconn_js.go @@ -0,0 +1,11 @@ +package websocket + +import "net" + +func (nc *netConn) RemoteAddr() net.Addr { + return websocketAddr{} +} + +func (nc *netConn) LocalAddr() net.Addr { + return websocketAddr{} +} diff --git a/vendor/github.com/coder/websocket/netconn_notjs.go b/vendor/github.com/coder/websocket/netconn_notjs.go new file mode 100644 index 0000000000..cab7634928 --- /dev/null +++ b/vendor/github.com/coder/websocket/netconn_notjs.go @@ -0,0 +1,19 @@ +//go:build !js + +package websocket + +import "net" + +func (nc *netConn) RemoteAddr() net.Addr { + if unc, ok := nc.c.rwc.(net.Conn); ok { + return unc.RemoteAddr() + } + return websocketAddr{} +} + +func (nc *netConn) LocalAddr() net.Addr { + if unc, ok := nc.c.rwc.(net.Conn); ok { + return unc.LocalAddr() + } + return websocketAddr{} +} diff --git a/vendor/github.com/coder/websocket/read.go b/vendor/github.com/coder/websocket/read.go new file mode 100644 index 0000000000..6482251168 --- /dev/null +++ b/vendor/github.com/coder/websocket/read.go @@ -0,0 +1,540 @@ +//go:build !js + +package websocket + +import ( + "bufio" + "context" + "errors" + "fmt" + "io" + "net" + "strings" + "sync/atomic" + "time" + + "github.com/coder/websocket/internal/errd" + "github.com/coder/websocket/internal/util" +) + +// Reader reads from the connection until there is a WebSocket +// data message to be read. It will handle ping, pong and close frames as appropriate. +// +// It returns the type of the message and an io.Reader to read it. +// The passed context will also bound the reader. +// Ensure you read to EOF otherwise the connection will hang. +// +// Call CloseRead if you do not expect any data messages from the peer. +// +// Only one Reader may be open at a time. +// +// If you need a separate timeout on the Reader call and the Read itself, +// use time.AfterFunc to cancel the context passed in. +// See https://github.com/nhooyr/websocket/issues/87#issue-451703332 +// Most users should not need this. +func (c *Conn) Reader(ctx context.Context) (MessageType, io.Reader, error) { + return c.reader(ctx) +} + +// Read is a convenience method around Reader to read a single message +// from the connection. +func (c *Conn) Read(ctx context.Context) (MessageType, []byte, error) { + typ, r, err := c.Reader(ctx) + if err != nil { + return 0, nil, err + } + + b, err := io.ReadAll(r) + return typ, b, err +} + +// CloseRead starts a goroutine to read from the connection until it is closed +// or a data message is received. +// +// Once CloseRead is called you cannot read any messages from the connection. +// The returned context will be cancelled when the connection is closed. +// +// If a data message is received, the connection will be closed with StatusPolicyViolation. +// +// Call CloseRead when you do not expect to read any more messages. +// Since it actively reads from the connection, it will ensure that ping, pong and close +// frames are responded to. This means c.Ping and c.Close will still work as expected. +// +// This function is idempotent. +func (c *Conn) CloseRead(ctx context.Context) context.Context { + c.closeReadMu.Lock() + ctx2 := c.closeReadCtx + if ctx2 != nil { + c.closeReadMu.Unlock() + return ctx2 + } + ctx, cancel := context.WithCancel(ctx) + c.closeReadCtx = ctx + c.closeReadDone = make(chan struct{}) + c.closeReadMu.Unlock() + + go func() { + defer close(c.closeReadDone) + defer cancel() + defer c.close() + _, _, err := c.Reader(ctx) + if err == nil { + c.Close(StatusPolicyViolation, "unexpected data message") + } + }() + return ctx +} + +// SetReadLimit sets the max number of bytes to read for a single message. +// It applies to the Reader and Read methods. +// +// By default, the connection has a message read limit of 32768 bytes. +// +// When the limit is hit, reads return an error wrapping ErrMessageTooBig and +// the connection is closed with StatusMessageTooBig. +// +// Set to -1 to disable. +func (c *Conn) SetReadLimit(n int64) { + if n >= 0 { + // We read one more byte than the limit in case + // there is a fin frame that needs to be read. + n++ + } + + c.msgReader.limitReader.limit.Store(n) +} + +const defaultReadLimit = 32768 + +func newMsgReader(c *Conn) *msgReader { + mr := &msgReader{ + c: c, + fin: true, + } + mr.readFunc = mr.read + + mr.limitReader = newLimitReader(c, mr.readFunc, defaultReadLimit+1) + return mr +} + +func (mr *msgReader) resetFlate() { + if mr.flateContextTakeover() { + if mr.dict == nil { + mr.dict = &slidingWindow{} + } + mr.dict.init(32768) + } + if mr.flateBufio == nil { + mr.flateBufio = getBufioReader(mr.readFunc) + } + + if mr.flateContextTakeover() { + mr.flateReader = getFlateReader(mr.flateBufio, mr.dict.buf) + } else { + mr.flateReader = getFlateReader(mr.flateBufio, nil) + } + mr.limitReader.r = mr.flateReader + mr.flateTail.Reset(deflateMessageTail) +} + +func (mr *msgReader) putFlateReader() { + if mr.flateReader != nil { + putFlateReader(mr.flateReader) + mr.flateReader = nil + } +} + +func (mr *msgReader) close() { + mr.c.readMu.forceLock() + mr.putFlateReader() + if mr.dict != nil { + mr.dict.close() + mr.dict = nil + } + if mr.flateBufio != nil { + putBufioReader(mr.flateBufio) + } + + if mr.c.client { + putBufioReader(mr.c.br) + mr.c.br = nil + } +} + +func (mr *msgReader) flateContextTakeover() bool { + if mr.c.client { + return !mr.c.copts.serverNoContextTakeover + } + return !mr.c.copts.clientNoContextTakeover +} + +func (c *Conn) readRSV1Illegal(h header) bool { + // If compression is disabled, rsv1 is illegal. + if !c.flate() { + return true + } + // rsv1 is only allowed on data frames beginning messages. + if h.opcode != opText && h.opcode != opBinary { + return true + } + return false +} + +func (c *Conn) readLoop(ctx context.Context) (header, error) { + for { + h, err := c.readFrameHeader(ctx) + if err != nil { + return header{}, err + } + + if h.rsv1 && c.readRSV1Illegal(h) || h.rsv2 || h.rsv3 { + err := fmt.Errorf("received header with unexpected rsv bits set: %v:%v:%v", h.rsv1, h.rsv2, h.rsv3) + c.writeError(StatusProtocolError, err) + return header{}, err + } + + if !c.client && !h.masked { + return header{}, errors.New("received unmasked frame from client") + } + + switch h.opcode { + case opClose, opPing, opPong: + err = c.handleControl(ctx, h) + if err != nil { + // Pass through CloseErrors when receiving a close frame. + if h.opcode == opClose && CloseStatus(err) != -1 { + return header{}, err + } + return header{}, fmt.Errorf("failed to handle control frame %v: %w", h.opcode, err) + } + case opContinuation, opText, opBinary: + return h, nil + default: + err := fmt.Errorf("received unknown opcode %v", h.opcode) + c.writeError(StatusProtocolError, err) + return header{}, err + } + } +} + +// prepareRead sets the readTimeout context and returns a done function +// to be called after the read is done. It also returns an error if the +// connection is closed. The reference to the error is used to assign +// an error depending on if the connection closed or the context timed +// out during use. Typically, the referenced error is a named return +// variable of the function calling this method. +func (c *Conn) prepareRead(ctx context.Context, err *error) (func(), error) { + select { + case <-c.closed: + return nil, net.ErrClosed + default: + } + c.setupReadTimeout(ctx) + + done := func() { + c.clearReadTimeout() + select { + case <-c.closed: + if *err != nil { + *err = net.ErrClosed + } + default: + } + if *err != nil && ctx.Err() != nil { + *err = ctx.Err() + } + } + + c.closeStateMu.Lock() + closeReceivedErr := c.closeReceivedErr + c.closeStateMu.Unlock() + if closeReceivedErr != nil { + defer done() + return nil, closeReceivedErr + } + + return done, nil +} + +func (c *Conn) readFrameHeader(ctx context.Context) (_ header, err error) { + readDone, err := c.prepareRead(ctx, &err) + if err != nil { + return header{}, err + } + defer readDone() + + h, err := readFrameHeader(c.br, c.readHeaderBuf[:]) + if err != nil { + return header{}, err + } + + return h, nil +} + +func (c *Conn) readFramePayload(ctx context.Context, p []byte) (_ int, err error) { + readDone, err := c.prepareRead(ctx, &err) + if err != nil { + return 0, err + } + defer readDone() + + n, err := io.ReadFull(c.br, p) + if err != nil { + return n, fmt.Errorf("failed to read frame payload: %w", err) + } + + return n, nil +} + +func (c *Conn) handleControl(ctx context.Context, h header) (err error) { + if h.payloadLength < 0 || h.payloadLength > maxControlPayload { + err := fmt.Errorf("received control frame payload with invalid length: %d", h.payloadLength) + c.writeError(StatusProtocolError, err) + return err + } + + if !h.fin { + err := errors.New("received fragmented control frame") + c.writeError(StatusProtocolError, err) + return err + } + + ctx, cancel := context.WithTimeout(ctx, time.Second*5) + defer cancel() + + b := c.readControlBuf[:h.payloadLength] + _, err = c.readFramePayload(ctx, b) + if err != nil { + return err + } + + if h.masked { + mask(b, h.maskKey) + } + + switch h.opcode { + case opPing: + if c.onPingReceived != nil { + if !c.onPingReceived(ctx, b) { + return nil + } + } + return c.writeControl(ctx, opPong, b) + case opPong: + if c.onPongReceived != nil { + c.onPongReceived(ctx, b) + } + c.activePingsMu.Lock() + pong, ok := c.activePings[string(b)] + c.activePingsMu.Unlock() + if ok { + select { + case pong <- struct{}{}: + default: + } + } + return nil + } + + // opClose + + ce, err := parseClosePayload(b) + if err != nil { + err = fmt.Errorf("received invalid close payload: %w", err) + c.writeError(StatusProtocolError, err) + return err + } + + err = fmt.Errorf("received close frame: %w", ce) + c.closeStateMu.Lock() + c.closeReceivedErr = err + closeSent := c.closeSentErr != nil + c.closeStateMu.Unlock() + + // Only unlock readMu if this connection is being closed becaue + // c.close will try to acquire the readMu lock. We unlock for + // writeClose as well because it may also call c.close. + if !closeSent { + c.readMu.unlock() + _ = c.writeClose(ce.Code, ce.Reason) + } + if !c.casClosing() { + c.readMu.unlock() + _ = c.close() + } + return err +} + +func (c *Conn) reader(ctx context.Context) (_ MessageType, _ io.Reader, err error) { + defer errd.Wrap(&err, "failed to get reader") + + err = c.readMu.lock(ctx) + if err != nil { + return 0, nil, err + } + defer c.readMu.unlock() + + if !c.msgReader.fin { + return 0, nil, errors.New("previous message not read to completion") + } + + h, err := c.readLoop(ctx) + if err != nil { + return 0, nil, err + } + + if h.opcode == opContinuation { + err := errors.New("received continuation frame without text or binary frame") + c.writeError(StatusProtocolError, err) + return 0, nil, err + } + + c.msgReader.reset(ctx, h) + + return MessageType(h.opcode), c.msgReader, nil +} + +type msgReader struct { + c *Conn + + ctx context.Context + flate bool + flateReader io.Reader + flateBufio *bufio.Reader + flateTail strings.Reader + limitReader *limitReader + dict *slidingWindow + + fin bool + payloadLength int64 + maskKey uint32 + + // util.ReaderFunc(mr.Read) to avoid continuous allocations. + readFunc util.ReaderFunc +} + +func (mr *msgReader) reset(ctx context.Context, h header) { + mr.ctx = ctx + mr.flate = h.rsv1 + mr.limitReader.reset(mr.readFunc) + + if mr.flate { + mr.resetFlate() + } + + mr.setFrame(h) +} + +func (mr *msgReader) setFrame(h header) { + mr.fin = h.fin + mr.payloadLength = h.payloadLength + mr.maskKey = h.maskKey +} + +func (mr *msgReader) Read(p []byte) (n int, err error) { + err = mr.c.readMu.lock(mr.ctx) + if err != nil { + return 0, fmt.Errorf("failed to read: %w", err) + } + defer mr.c.readMu.unlock() + + n, err = mr.limitReader.Read(p) + if mr.flate && mr.flateContextTakeover() { + p = p[:n] + mr.dict.write(p) + } + if errors.Is(err, io.EOF) || errors.Is(err, io.ErrUnexpectedEOF) && mr.fin && mr.flate { + mr.putFlateReader() + return n, io.EOF + } + if err != nil { + return n, fmt.Errorf("failed to read: %w", err) + } + return n, nil +} + +func (mr *msgReader) read(p []byte) (int, error) { + for { + if mr.payloadLength == 0 { + if mr.fin { + if mr.flate { + return mr.flateTail.Read(p) + } + return 0, io.EOF + } + + h, err := mr.c.readLoop(mr.ctx) + if err != nil { + return 0, err + } + if h.opcode != opContinuation { + err := errors.New("received new data message without finishing the previous message") + mr.c.writeError(StatusProtocolError, err) + return 0, err + } + mr.setFrame(h) + + continue + } + + if int64(len(p)) > mr.payloadLength { + p = p[:mr.payloadLength] + } + + n, err := mr.c.readFramePayload(mr.ctx, p) + if err != nil { + return n, err + } + + mr.payloadLength -= int64(n) + + if !mr.c.client { + mr.maskKey = mask(p, mr.maskKey) + } + + return n, nil + } +} + +type limitReader struct { + c *Conn + r io.Reader + limit atomic.Int64 + n int64 +} + +func newLimitReader(c *Conn, r io.Reader, limit int64) *limitReader { + lr := &limitReader{ + c: c, + } + lr.limit.Store(limit) + lr.reset(r) + return lr +} + +func (lr *limitReader) reset(r io.Reader) { + lr.n = lr.limit.Load() + lr.r = r +} + +func (lr *limitReader) Read(p []byte) (int, error) { + if lr.n < 0 { + return lr.r.Read(p) + } + + if lr.n == 0 { + reason := fmt.Errorf("read limited at %d bytes", lr.limit.Load()) + lr.c.writeError(StatusMessageTooBig, reason) + return 0, fmt.Errorf("%w: %v", ErrMessageTooBig, reason) + } + + if int64(len(p)) > lr.n { + p = p[:lr.n] + } + n, err := lr.r.Read(p) + lr.n -= int64(n) + if lr.n < 0 { + lr.n = 0 + } + return n, err +} diff --git a/vendor/github.com/coder/websocket/stringer.go b/vendor/github.com/coder/websocket/stringer.go new file mode 100644 index 0000000000..5a66ba2907 --- /dev/null +++ b/vendor/github.com/coder/websocket/stringer.go @@ -0,0 +1,91 @@ +// Code generated by "stringer -type=opcode,MessageType,StatusCode -output=stringer.go"; DO NOT EDIT. + +package websocket + +import "strconv" + +func _() { + // An "invalid array index" compiler error signifies that the constant values have changed. + // Re-run the stringer command to generate them again. + var x [1]struct{} + _ = x[opContinuation-0] + _ = x[opText-1] + _ = x[opBinary-2] + _ = x[opClose-8] + _ = x[opPing-9] + _ = x[opPong-10] +} + +const ( + _opcode_name_0 = "opContinuationopTextopBinary" + _opcode_name_1 = "opCloseopPingopPong" +) + +var ( + _opcode_index_0 = [...]uint8{0, 14, 20, 28} + _opcode_index_1 = [...]uint8{0, 7, 13, 19} +) + +func (i opcode) String() string { + switch { + case 0 <= i && i <= 2: + return _opcode_name_0[_opcode_index_0[i]:_opcode_index_0[i+1]] + case 8 <= i && i <= 10: + i -= 8 + return _opcode_name_1[_opcode_index_1[i]:_opcode_index_1[i+1]] + default: + return "opcode(" + strconv.FormatInt(int64(i), 10) + ")" + } +} +func _() { + // An "invalid array index" compiler error signifies that the constant values have changed. + // Re-run the stringer command to generate them again. + var x [1]struct{} + _ = x[MessageText-1] + _ = x[MessageBinary-2] +} + +const _MessageType_name = "MessageTextMessageBinary" + +var _MessageType_index = [...]uint8{0, 11, 24} + +func (i MessageType) String() string { + i -= 1 + if i < 0 || i >= MessageType(len(_MessageType_index)-1) { + return "MessageType(" + strconv.FormatInt(int64(i+1), 10) + ")" + } + return _MessageType_name[_MessageType_index[i]:_MessageType_index[i+1]] +} +func _() { + // An "invalid array index" compiler error signifies that the constant values have changed. + // Re-run the stringer command to generate them again. + var x [1]struct{} + _ = x[StatusNormalClosure-1000] + _ = x[StatusGoingAway-1001] + _ = x[StatusProtocolError-1002] + _ = x[StatusUnsupportedData-1003] + _ = x[statusReserved-1004] + _ = x[StatusNoStatusRcvd-1005] + _ = x[StatusAbnormalClosure-1006] + _ = x[StatusInvalidFramePayloadData-1007] + _ = x[StatusPolicyViolation-1008] + _ = x[StatusMessageTooBig-1009] + _ = x[StatusMandatoryExtension-1010] + _ = x[StatusInternalError-1011] + _ = x[StatusServiceRestart-1012] + _ = x[StatusTryAgainLater-1013] + _ = x[StatusBadGateway-1014] + _ = x[StatusTLSHandshake-1015] +} + +const _StatusCode_name = "StatusNormalClosureStatusGoingAwayStatusProtocolErrorStatusUnsupportedDatastatusReservedStatusNoStatusRcvdStatusAbnormalClosureStatusInvalidFramePayloadDataStatusPolicyViolationStatusMessageTooBigStatusMandatoryExtensionStatusInternalErrorStatusServiceRestartStatusTryAgainLaterStatusBadGatewayStatusTLSHandshake" + +var _StatusCode_index = [...]uint16{0, 19, 34, 53, 74, 88, 106, 127, 156, 177, 196, 220, 239, 259, 278, 294, 312} + +func (i StatusCode) String() string { + i -= 1000 + if i < 0 || i >= StatusCode(len(_StatusCode_index)-1) { + return "StatusCode(" + strconv.FormatInt(int64(i+1000), 10) + ")" + } + return _StatusCode_name[_StatusCode_index[i]:_StatusCode_index[i+1]] +} diff --git a/vendor/github.com/coder/websocket/write.go b/vendor/github.com/coder/websocket/write.go new file mode 100644 index 0000000000..d7172a7b5e --- /dev/null +++ b/vendor/github.com/coder/websocket/write.go @@ -0,0 +1,384 @@ +//go:build !js + +package websocket + +import ( + "bufio" + "compress/flate" + "context" + "crypto/rand" + "encoding/binary" + "errors" + "fmt" + "io" + "net" + "time" + + "github.com/coder/websocket/internal/errd" + "github.com/coder/websocket/internal/util" +) + +// Writer returns a writer bounded by the context that will write +// a WebSocket message of type dataType to the connection. +// +// You must close the writer once you have written the entire message. +// +// Only one writer can be open at a time, multiple calls will block until the previous writer +// is closed. +func (c *Conn) Writer(ctx context.Context, typ MessageType) (io.WriteCloser, error) { + w, err := c.writer(ctx, typ) + if err != nil { + return nil, fmt.Errorf("failed to get writer: %w", err) + } + return w, nil +} + +// Write writes a message to the connection. +// +// See the Writer method if you want to stream a message. +// +// If compression is disabled or the compression threshold is not met, then it +// will write the message in a single frame. +func (c *Conn) Write(ctx context.Context, typ MessageType, p []byte) error { + _, err := c.write(ctx, typ, p) + if err != nil { + return fmt.Errorf("failed to write msg: %w", err) + } + return nil +} + +type msgWriter struct { + c *Conn + + mu *mu + writeMu *mu + closed bool + + ctx context.Context + opcode opcode + flate bool + + trimWriter *trimLastFourBytesWriter + flateWriter *flate.Writer +} + +func newMsgWriter(c *Conn) *msgWriter { + mw := &msgWriter{ + c: c, + mu: newMu(c), + writeMu: newMu(c), + } + return mw +} + +func (mw *msgWriter) ensureFlate() { + if mw.trimWriter == nil { + mw.trimWriter = &trimLastFourBytesWriter{ + w: util.WriterFunc(mw.write), + } + } + + if mw.flateWriter == nil { + mw.flateWriter = getFlateWriter(mw.trimWriter) + } + mw.flate = true +} + +func (mw *msgWriter) flateContextTakeover() bool { + if mw.c.client { + return !mw.c.copts.clientNoContextTakeover + } + return !mw.c.copts.serverNoContextTakeover +} + +func (c *Conn) writer(ctx context.Context, typ MessageType) (io.WriteCloser, error) { + err := c.msgWriter.reset(ctx, typ) + if err != nil { + return nil, err + } + return c.msgWriter, nil +} + +func (c *Conn) write(ctx context.Context, typ MessageType, p []byte) (int, error) { + mw, err := c.writer(ctx, typ) + if err != nil { + return 0, err + } + + if !c.flate() { + defer c.msgWriter.mu.unlock() + return c.writeFrame(ctx, true, false, c.msgWriter.opcode, p) + } + + n, err := mw.Write(p) + if err != nil { + return n, err + } + + err = mw.Close() + return n, err +} + +func (mw *msgWriter) reset(ctx context.Context, typ MessageType) error { + err := mw.mu.lock(ctx) + if err != nil { + return err + } + + mw.ctx = ctx + mw.opcode = opcode(typ) + mw.flate = false + mw.closed = false + + mw.trimWriter.reset() + + return nil +} + +func (mw *msgWriter) putFlateWriter() { + if mw.flateWriter != nil { + putFlateWriter(mw.flateWriter) + mw.flateWriter = nil + } +} + +// Write writes the given bytes to the WebSocket connection. +func (mw *msgWriter) Write(p []byte) (_ int, err error) { + err = mw.writeMu.lock(mw.ctx) + if err != nil { + return 0, fmt.Errorf("failed to write: %w", err) + } + defer mw.writeMu.unlock() + + if mw.closed { + return 0, errors.New("cannot use closed writer") + } + + defer func() { + if err != nil { + err = fmt.Errorf("failed to write: %w", err) + } + }() + + if mw.c.flate() { + // Only enables flate if the length crosses the + // threshold on the first frame + if mw.opcode != opContinuation && len(p) >= mw.c.flateThreshold { + mw.ensureFlate() + } + } + + if mw.flate { + return mw.flateWriter.Write(p) + } + + return mw.write(p) +} + +func (mw *msgWriter) write(p []byte) (int, error) { + n, err := mw.c.writeFrame(mw.ctx, false, mw.flate, mw.opcode, p) + if err != nil { + return n, fmt.Errorf("failed to write data frame: %w", err) + } + mw.opcode = opContinuation + return n, nil +} + +// Close flushes the frame to the connection. +func (mw *msgWriter) Close() (err error) { + defer errd.Wrap(&err, "failed to close writer") + + err = mw.writeMu.lock(mw.ctx) + if err != nil { + return err + } + defer mw.writeMu.unlock() + + if mw.closed { + return errors.New("writer already closed") + } + mw.closed = true + + if mw.flate { + err = mw.flateWriter.Flush() + if err != nil { + return fmt.Errorf("failed to flush flate: %w", err) + } + } + + _, err = mw.c.writeFrame(mw.ctx, true, mw.flate, mw.opcode, nil) + if err != nil { + return fmt.Errorf("failed to write fin frame: %w", err) + } + + if mw.flate && !mw.flateContextTakeover() { + mw.putFlateWriter() + } + mw.mu.unlock() + return nil +} + +func (mw *msgWriter) close() { + if mw.c.client { + mw.c.writeFrameMu.forceLock() + putBufioWriter(mw.c.bw) + } + + mw.writeMu.forceLock() + mw.putFlateWriter() +} + +func (c *Conn) writeControl(ctx context.Context, opcode opcode, p []byte) error { + ctx, cancel := context.WithTimeout(ctx, time.Second*5) + defer cancel() + + _, err := c.writeFrame(ctx, true, false, opcode, p) + if err != nil { + return fmt.Errorf("failed to write control frame %v: %w", opcode, err) + } + return nil +} + +// writeFrame handles all writes to the connection. +func (c *Conn) writeFrame(ctx context.Context, fin bool, flate bool, opcode opcode, p []byte) (_ int, err error) { + err = c.writeFrameMu.lock(ctx) + if err != nil { + return 0, err + } + defer c.writeFrameMu.unlock() + + defer func() { + if c.isClosed() && opcode == opClose { + err = nil + } + if err != nil { + if ctx.Err() != nil { + err = ctx.Err() + } else if c.isClosed() { + err = net.ErrClosed + } + err = fmt.Errorf("failed to write frame: %w", err) + } + }() + + c.closeStateMu.Lock() + closeSentErr := c.closeSentErr + c.closeStateMu.Unlock() + if closeSentErr != nil { + return 0, net.ErrClosed + } + + select { + case <-c.closed: + return 0, net.ErrClosed + default: + } + c.setupWriteTimeout(ctx) + defer c.clearWriteTimeout() + + c.writeHeader.fin = fin + c.writeHeader.opcode = opcode + c.writeHeader.payloadLength = int64(len(p)) + + if c.client { + c.writeHeader.masked = true + _, err = io.ReadFull(rand.Reader, c.writeHeaderBuf[:4]) + if err != nil { + return 0, fmt.Errorf("failed to generate masking key: %w", err) + } + c.writeHeader.maskKey = binary.LittleEndian.Uint32(c.writeHeaderBuf[:]) + } + + c.writeHeader.rsv1 = false + if flate && (opcode == opText || opcode == opBinary) { + c.writeHeader.rsv1 = true + } + + err = writeFrameHeader(c.writeHeader, c.bw, c.writeHeaderBuf[:]) + if err != nil { + return 0, err + } + + n, err := c.writeFramePayload(p) + if err != nil { + return n, err + } + + if c.writeHeader.fin { + err = c.bw.Flush() + if err != nil { + return n, fmt.Errorf("failed to flush: %w", err) + } + } + + if opcode == opClose { + c.closeStateMu.Lock() + c.closeSentErr = fmt.Errorf("sent close frame: %w", net.ErrClosed) + closeReceived := c.closeReceivedErr != nil + c.closeStateMu.Unlock() + + if closeReceived && !c.casClosing() { + c.writeFrameMu.unlock() + _ = c.close() + } + } + + return n, nil +} + +func (c *Conn) writeFramePayload(p []byte) (n int, err error) { + defer errd.Wrap(&err, "failed to write frame payload") + + if !c.writeHeader.masked { + return c.bw.Write(p) + } + + maskKey := c.writeHeader.maskKey + for len(p) > 0 { + // If the buffer is full, we need to flush. + if c.bw.Available() == 0 { + err = c.bw.Flush() + if err != nil { + return n, err + } + } + + // Start of next write in the buffer. + i := c.bw.Buffered() + + j := min(len(p), c.bw.Available()) + + _, err := c.bw.Write(p[:j]) + if err != nil { + return n, err + } + + maskKey = mask(c.writeBuf[i:c.bw.Buffered()], maskKey) + + p = p[j:] + n += j + } + + return n, nil +} + +// extractBufioWriterBuf grabs the []byte backing a *bufio.Writer +// and returns it. +func extractBufioWriterBuf(bw *bufio.Writer, w io.Writer) []byte { + var writeBuf []byte + bw.Reset(util.WriterFunc(func(p2 []byte) (int, error) { + writeBuf = p2[:cap(p2)] + return len(p2), nil + })) + + bw.WriteByte(0) + bw.Flush() + + bw.Reset(w) + + return writeBuf +} + +func (c *Conn) writeError(code StatusCode, err error) { + c.writeClose(code, err.Error()) +} diff --git a/vendor/github.com/coder/websocket/ws_js.go b/vendor/github.com/coder/websocket/ws_js.go new file mode 100644 index 0000000000..026b75fc21 --- /dev/null +++ b/vendor/github.com/coder/websocket/ws_js.go @@ -0,0 +1,598 @@ +package websocket // import "github.com/coder/websocket" + +import ( + "bytes" + "context" + "errors" + "fmt" + "io" + "net" + "net/http" + "reflect" + "runtime" + "strings" + "sync" + "sync/atomic" + "syscall/js" + + "github.com/coder/websocket/internal/bpool" + "github.com/coder/websocket/internal/wsjs" +) + +// opcode represents a WebSocket opcode. +type opcode int + +// https://tools.ietf.org/html/rfc6455#section-11.8. +const ( + opContinuation opcode = iota + opText + opBinary + // 3 - 7 are reserved for further non-control frames. + _ + _ + _ + _ + _ + opClose + opPing + opPong + // 11-16 are reserved for further control frames. +) + +// Conn provides a wrapper around the browser WebSocket API. +type Conn struct { + noCopy noCopy + ws wsjs.WebSocket + + // read limit for a message in bytes. + msgReadLimit atomic.Int64 + + closeReadMu sync.Mutex + closeReadCtx context.Context + + closingMu sync.Mutex + closeOnce sync.Once + closed chan struct{} + closeErrOnce sync.Once + closeErr error + closeWasClean bool + + releaseOnClose func() + releaseOnError func() + releaseOnMessage func() + + readSignal chan struct{} + readBufMu sync.Mutex + readBuf []wsjs.MessageEvent +} + +func (c *Conn) close(err error, wasClean bool) { + c.closeOnce.Do(func() { + runtime.SetFinalizer(c, nil) + + if !wasClean { + err = fmt.Errorf("unclean connection close: %w", err) + } + c.setCloseErr(err) + c.closeWasClean = wasClean + close(c.closed) + }) +} + +func (c *Conn) init() { + c.closed = make(chan struct{}) + c.readSignal = make(chan struct{}, 1) + + c.msgReadLimit.Store(32768) + + c.releaseOnClose = c.ws.OnClose(func(e wsjs.CloseEvent) { + err := CloseError{ + Code: StatusCode(e.Code), + Reason: e.Reason, + } + // We do not know if we sent or received this close as + // its possible the browser triggered it without us + // explicitly sending it. + c.close(err, e.WasClean) + + c.releaseOnClose() + c.releaseOnError() + c.releaseOnMessage() + }) + + c.releaseOnError = c.ws.OnError(func(v js.Value) { + c.setCloseErr(errors.New(v.Get("message").String())) + c.closeWithInternal() + }) + + c.releaseOnMessage = c.ws.OnMessage(func(e wsjs.MessageEvent) { + c.readBufMu.Lock() + defer c.readBufMu.Unlock() + + c.readBuf = append(c.readBuf, e) + + // Lets the read goroutine know there is definitely something in readBuf. + select { + case c.readSignal <- struct{}{}: + default: + } + }) + + runtime.SetFinalizer(c, func(c *Conn) { + c.setCloseErr(errors.New("connection garbage collected")) + c.closeWithInternal() + }) +} + +func (c *Conn) closeWithInternal() { + c.Close(StatusInternalError, "something went wrong") +} + +// Read attempts to read a message from the connection. +// The maximum time spent waiting is bounded by the context. +func (c *Conn) Read(ctx context.Context) (MessageType, []byte, error) { + c.closeReadMu.Lock() + closedRead := c.closeReadCtx != nil + c.closeReadMu.Unlock() + if closedRead { + return 0, nil, errors.New("WebSocket connection read closed") + } + + typ, p, err := c.read(ctx) + if err != nil { + return 0, nil, fmt.Errorf("failed to read: %w", err) + } + readLimit := c.msgReadLimit.Load() + if readLimit >= 0 && int64(len(p)) > readLimit { + reason := fmt.Errorf("read limited at %d bytes", c.msgReadLimit.Load()) + c.Close(StatusMessageTooBig, reason.Error()) + return 0, nil, fmt.Errorf("%w: %v", ErrMessageTooBig, reason) + } + return typ, p, nil +} + +func (c *Conn) read(ctx context.Context) (MessageType, []byte, error) { + select { + case <-ctx.Done(): + c.Close(StatusPolicyViolation, "read timed out") + return 0, nil, ctx.Err() + case <-c.readSignal: + case <-c.closed: + return 0, nil, net.ErrClosed + } + + c.readBufMu.Lock() + defer c.readBufMu.Unlock() + + me := c.readBuf[0] + // We copy the messages forward and decrease the size + // of the slice to avoid reallocating. + copy(c.readBuf, c.readBuf[1:]) + c.readBuf = c.readBuf[:len(c.readBuf)-1] + + if len(c.readBuf) > 0 { + // Next time we read, we'll grab the message. + select { + case c.readSignal <- struct{}{}: + default: + } + } + + switch p := me.Data.(type) { + case string: + return MessageText, []byte(p), nil + case []byte: + return MessageBinary, p, nil + default: + panic("websocket: unexpected data type from wsjs OnMessage: " + reflect.TypeOf(me.Data).String()) + } +} + +// Ping is mocked out for Wasm. +func (c *Conn) Ping(ctx context.Context) error { + return nil +} + +// Write writes a message of the given type to the connection. +// Always non blocking. +func (c *Conn) Write(ctx context.Context, typ MessageType, p []byte) error { + err := c.write(typ, p) + if err != nil { + // Have to ensure the WebSocket is closed after a write error + // to match the Go API. It can only error if the message type + // is unexpected or the passed bytes contain invalid UTF-8 for + // MessageText. + err := fmt.Errorf("failed to write: %w", err) + c.setCloseErr(err) + c.closeWithInternal() + return err + } + return nil +} + +func (c *Conn) write(typ MessageType, p []byte) error { + if c.isClosed() { + return net.ErrClosed + } + switch typ { + case MessageBinary: + return c.ws.SendBytes(p) + case MessageText: + return c.ws.SendText(string(p)) + default: + return fmt.Errorf("unexpected message type: %v", typ) + } +} + +// Close closes the WebSocket with the given code and reason. +// It will wait until the peer responds with a close frame +// or the connection is closed. +// It thus performs the full WebSocket close handshake. +func (c *Conn) Close(code StatusCode, reason string) error { + err := c.exportedClose(code, reason) + if err != nil { + return fmt.Errorf("failed to close WebSocket: %w", err) + } + return nil +} + +// CloseNow closes the WebSocket connection without attempting a close handshake. +// Use when you do not want the overhead of the close handshake. +// +// note: No different from Close(StatusGoingAway, "") in WASM as there is no way to close +// a WebSocket without the close handshake. +func (c *Conn) CloseNow() error { + return c.Close(StatusGoingAway, "") +} + +func (c *Conn) exportedClose(code StatusCode, reason string) error { + c.closingMu.Lock() + defer c.closingMu.Unlock() + + if c.isClosed() { + return net.ErrClosed + } + + ce := fmt.Errorf("sent close: %w", CloseError{ + Code: code, + Reason: reason, + }) + + c.setCloseErr(ce) + err := c.ws.Close(int(code), reason) + if err != nil { + return err + } + + <-c.closed + if !c.closeWasClean { + return c.closeErr + } + return nil +} + +// Subprotocol returns the negotiated subprotocol. +// An empty string means the default protocol. +func (c *Conn) Subprotocol() string { + return c.ws.Subprotocol() +} + +// DialOptions represents the options available to pass to Dial. +type DialOptions struct { + // Subprotocols lists the subprotocols to negotiate with the server. + Subprotocols []string +} + +// Dial creates a new WebSocket connection to the given url with the given options. +// The passed context bounds the maximum time spent waiting for the connection to open. +// The returned *http.Response is always nil or a mock. It's only in the signature +// to match the core API. +func Dial(ctx context.Context, url string, opts *DialOptions) (*Conn, *http.Response, error) { + c, resp, err := dial(ctx, url, opts) + if err != nil { + return nil, nil, fmt.Errorf("failed to WebSocket dial %q: %w", url, err) + } + return c, resp, nil +} + +func dial(ctx context.Context, url string, opts *DialOptions) (*Conn, *http.Response, error) { + if opts == nil { + opts = &DialOptions{} + } + + url = strings.Replace(url, "http://", "ws://", 1) + url = strings.Replace(url, "https://", "wss://", 1) + + ws, err := wsjs.New(url, opts.Subprotocols) + if err != nil { + return nil, nil, err + } + + c := &Conn{ + ws: ws, + } + c.init() + + opench := make(chan struct{}) + releaseOpen := ws.OnOpen(func(e js.Value) { + close(opench) + }) + defer releaseOpen() + + select { + case <-ctx.Done(): + c.Close(StatusPolicyViolation, "dial timed out") + return nil, nil, ctx.Err() + case <-opench: + return c, &http.Response{ + StatusCode: http.StatusSwitchingProtocols, + }, nil + case <-c.closed: + return nil, nil, net.ErrClosed + } +} + +// Reader attempts to read a message from the connection. +// The maximum time spent waiting is bounded by the context. +func (c *Conn) Reader(ctx context.Context) (MessageType, io.Reader, error) { + typ, p, err := c.Read(ctx) + if err != nil { + return 0, nil, err + } + return typ, bytes.NewReader(p), nil +} + +// Writer returns a writer to write a WebSocket data message to the connection. +// It buffers the entire message in memory and then sends it when the writer +// is closed. +func (c *Conn) Writer(ctx context.Context, typ MessageType) (io.WriteCloser, error) { + return &writer{ + c: c, + ctx: ctx, + typ: typ, + b: bpool.Get(), + }, nil +} + +type writer struct { + closed bool + + c *Conn + ctx context.Context + typ MessageType + + b *bytes.Buffer +} + +func (w *writer) Write(p []byte) (int, error) { + if w.closed { + return 0, errors.New("cannot write to closed writer") + } + n, err := w.b.Write(p) + if err != nil { + return n, fmt.Errorf("failed to write message: %w", err) + } + return n, nil +} + +func (w *writer) Close() error { + if w.closed { + return errors.New("cannot close closed writer") + } + w.closed = true + defer bpool.Put(w.b) + + err := w.c.Write(w.ctx, w.typ, w.b.Bytes()) + if err != nil { + return fmt.Errorf("failed to close writer: %w", err) + } + return nil +} + +// CloseRead implements *Conn.CloseRead for wasm. +func (c *Conn) CloseRead(ctx context.Context) context.Context { + c.closeReadMu.Lock() + ctx2 := c.closeReadCtx + if ctx2 != nil { + c.closeReadMu.Unlock() + return ctx2 + } + ctx, cancel := context.WithCancel(ctx) + c.closeReadCtx = ctx + c.closeReadMu.Unlock() + + go func() { + defer cancel() + defer c.CloseNow() + _, _, err := c.read(ctx) + if err != nil { + c.Close(StatusPolicyViolation, "unexpected data message") + } + }() + return ctx +} + +// SetReadLimit implements *Conn.SetReadLimit for wasm. +func (c *Conn) SetReadLimit(n int64) { + c.msgReadLimit.Store(n) +} + +func (c *Conn) setCloseErr(err error) { + c.closeErrOnce.Do(func() { + c.closeErr = fmt.Errorf("WebSocket closed: %w", err) + }) +} + +func (c *Conn) isClosed() bool { + select { + case <-c.closed: + return true + default: + return false + } +} + +// AcceptOptions represents Accept's options. +type AcceptOptions struct { + Subprotocols []string + InsecureSkipVerify bool + OriginPatterns []string + CompressionMode CompressionMode + CompressionThreshold int +} + +// Accept is stubbed out for Wasm. +func Accept(w http.ResponseWriter, r *http.Request, opts *AcceptOptions) (*Conn, error) { + return nil, errors.New("unimplemented") +} + +// StatusCode represents a WebSocket status code. +// https://tools.ietf.org/html/rfc6455#section-7.4 +type StatusCode int + +// https://www.iana.org/assignments/websocket/websocket.xhtml#close-code-number +// +// These are only the status codes defined by the protocol. +// +// You can define custom codes in the 3000-4999 range. +// The 3000-3999 range is reserved for use by libraries, frameworks and applications. +// The 4000-4999 range is reserved for private use. +const ( + StatusNormalClosure StatusCode = 1000 + StatusGoingAway StatusCode = 1001 + StatusProtocolError StatusCode = 1002 + StatusUnsupportedData StatusCode = 1003 + + // 1004 is reserved and so unexported. + statusReserved StatusCode = 1004 + + // StatusNoStatusRcvd cannot be sent in a close message. + // It is reserved for when a close message is received without + // a status code. + StatusNoStatusRcvd StatusCode = 1005 + + // StatusAbnormalClosure is exported for use only with Wasm. + // In non Wasm Go, the returned error will indicate whether the + // connection was closed abnormally. + StatusAbnormalClosure StatusCode = 1006 + + StatusInvalidFramePayloadData StatusCode = 1007 + StatusPolicyViolation StatusCode = 1008 + StatusMessageTooBig StatusCode = 1009 + StatusMandatoryExtension StatusCode = 1010 + StatusInternalError StatusCode = 1011 + StatusServiceRestart StatusCode = 1012 + StatusTryAgainLater StatusCode = 1013 + StatusBadGateway StatusCode = 1014 + + // StatusTLSHandshake is only exported for use with Wasm. + // In non Wasm Go, the returned error will indicate whether there was + // a TLS handshake failure. + StatusTLSHandshake StatusCode = 1015 +) + +// CloseError is returned when the connection is closed with a status and reason. +// +// Use Go 1.13's errors.As to check for this error. +// Also see the CloseStatus helper. +type CloseError struct { + Code StatusCode + Reason string +} + +func (ce CloseError) Error() string { + return fmt.Sprintf("status = %v and reason = %q", ce.Code, ce.Reason) +} + +// CloseStatus is a convenience wrapper around Go 1.13's errors.As to grab +// the status code from a CloseError. +// +// -1 will be returned if the passed error is nil or not a CloseError. +func CloseStatus(err error) StatusCode { + var ce CloseError + if errors.As(err, &ce) { + return ce.Code + } + return -1 +} + +// CompressionMode represents the modes available to the deflate extension. +// See https://tools.ietf.org/html/rfc7692 +// Works in all browsers except Safari which does not implement the deflate extension. +type CompressionMode int + +const ( + // CompressionNoContextTakeover grabs a new flate.Reader and flate.Writer as needed + // for every message. This applies to both server and client side. + // + // This means less efficient compression as the sliding window from previous messages + // will not be used but the memory overhead will be lower if the connections + // are long lived and seldom used. + // + // The message will only be compressed if greater than 512 bytes. + CompressionNoContextTakeover CompressionMode = iota + + // CompressionContextTakeover uses a flate.Reader and flate.Writer per connection. + // This enables reusing the sliding window from previous messages. + // As most WebSocket protocols are repetitive, this can be very efficient. + // It carries an overhead of 8 kB for every connection compared to CompressionNoContextTakeover. + // + // If the peer negotiates NoContextTakeover on the client or server side, it will be + // used instead as this is required by the RFC. + CompressionContextTakeover + + // CompressionDisabled disables the deflate extension. + // + // Use this if you are using a predominantly binary protocol with very + // little duplication in between messages or CPU and memory are more + // important than bandwidth. + CompressionDisabled +) + +// MessageType represents the type of a WebSocket message. +// See https://tools.ietf.org/html/rfc6455#section-5.6 +type MessageType int + +// MessageType constants. +const ( + // MessageText is for UTF-8 encoded text messages like JSON. + MessageText MessageType = iota + 1 + // MessageBinary is for binary messages like protobufs. + MessageBinary +) + +type mu struct { + c *Conn + ch chan struct{} +} + +func newMu(c *Conn) *mu { + return &mu{ + c: c, + ch: make(chan struct{}, 1), + } +} + +func (m *mu) forceLock() { + m.ch <- struct{}{} +} + +func (m *mu) tryLock() bool { + select { + case m.ch <- struct{}{}: + return true + default: + return false + } +} + +func (m *mu) unlock() { + select { + case <-m.ch: + default: + } +} + +type noCopy struct{} + +func (*noCopy) Lock() {} diff --git a/vendor/github.com/elliotchance/orderedmap/v3/LICENSE b/vendor/github.com/elliotchance/orderedmap/v3/LICENSE new file mode 100644 index 0000000000..852bb97fd9 --- /dev/null +++ b/vendor/github.com/elliotchance/orderedmap/v3/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020 Elliot Chance + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/vendor/github.com/elliotchance/orderedmap/v3/list.go b/vendor/github.com/elliotchance/orderedmap/v3/list.go new file mode 100644 index 0000000000..c2a571dcc9 --- /dev/null +++ b/vendor/github.com/elliotchance/orderedmap/v3/list.go @@ -0,0 +1,95 @@ +package orderedmap + +// Element is an element of a null terminated (non circular) intrusive doubly linked list that contains the key of the correspondent element in the ordered map too. +type Element[K comparable, V any] struct { + // Next and previous pointers in the doubly-linked list of elements. + // To simplify the implementation, internally a list l is implemented + // as a ring, such that &l.root is both the next element of the last + // list element (l.Back()) and the previous element of the first list + // element (l.Front()). + next, prev *Element[K, V] + + // The key that corresponds to this element in the ordered map. + Key K + + // The value stored with this element. + Value V +} + +// Next returns the next list element or nil. +func (e *Element[K, V]) Next() *Element[K, V] { + return e.next +} + +// Prev returns the previous list element or nil. +func (e *Element[K, V]) Prev() *Element[K, V] { + return e.prev +} + +// list represents a null terminated (non circular) intrusive doubly linked list. +// The list is immediately usable after instantiation without the need of a dedicated initialization. +type list[K comparable, V any] struct { + root Element[K, V] // list head and tail +} + +func (l *list[K, V]) IsEmpty() bool { + return l.root.next == nil +} + +// Front returns the first element of list l or nil if the list is empty. +func (l *list[K, V]) Front() *Element[K, V] { + return l.root.next +} + +// Back returns the last element of list l or nil if the list is empty. +func (l *list[K, V]) Back() *Element[K, V] { + return l.root.prev +} + +// Remove removes e from its list +func (l *list[K, V]) Remove(e *Element[K, V]) { + if e.prev == nil { + l.root.next = e.next + } else { + e.prev.next = e.next + } + if e.next == nil { + l.root.prev = e.prev + } else { + e.next.prev = e.prev + } + e.next = nil // avoid memory leaks + e.prev = nil // avoid memory leaks +} + +// PushFront inserts a new element e with value v at the front of list l and returns e. +func (l *list[K, V]) PushFront(key K, value V) *Element[K, V] { + e := &Element[K, V]{Key: key, Value: value} + if l.root.next == nil { + // It's the first element + l.root.next = e + l.root.prev = e + return e + } + + e.next = l.root.next + l.root.next.prev = e + l.root.next = e + return e +} + +// PushBack inserts a new element e with value v at the back of list l and returns e. +func (l *list[K, V]) PushBack(key K, value V) *Element[K, V] { + e := &Element[K, V]{Key: key, Value: value} + if l.root.prev == nil { + // It's the first element + l.root.next = e + l.root.prev = e + return e + } + + e.prev = l.root.prev + l.root.prev.next = e + l.root.prev = e + return e +} diff --git a/vendor/github.com/elliotchance/orderedmap/v3/orderedmap.go b/vendor/github.com/elliotchance/orderedmap/v3/orderedmap.go new file mode 100644 index 0000000000..2dc086f838 --- /dev/null +++ b/vendor/github.com/elliotchance/orderedmap/v3/orderedmap.go @@ -0,0 +1,187 @@ +package orderedmap + +import "iter" + +type OrderedMap[K comparable, V any] struct { + kv map[K]*Element[K, V] + ll list[K, V] +} + +func NewOrderedMap[K comparable, V any]() *OrderedMap[K, V] { + return &OrderedMap[K, V]{ + kv: make(map[K]*Element[K, V]), + } +} + +// NewOrderedMapWithCapacity creates a map with enough pre-allocated space to +// hold the specified number of elements. +func NewOrderedMapWithCapacity[K comparable, V any](capacity int) *OrderedMap[K, V] { + return &OrderedMap[K, V]{ + kv: make(map[K]*Element[K, V], capacity), + } +} + +func NewOrderedMapWithElements[K comparable, V any](els ...*Element[K, V]) *OrderedMap[K, V] { + om := NewOrderedMapWithCapacity[K, V](len(els)) + for _, el := range els { + om.Set(el.Key, el.Value) + } + return om +} + +// Get returns the value for a key. If the key does not exist, the second return +// parameter will be false and the value will be nil. +func (m *OrderedMap[K, V]) Get(key K) (value V, ok bool) { + v, ok := m.kv[key] + if ok { + value = v.Value + } + + return +} + +// Set will set (or replace) a value for a key. If the key was new, then true +// will be returned. The returned value will be false if the value was replaced +// (even if the value was the same). +func (m *OrderedMap[K, V]) Set(key K, value V) bool { + _, alreadyExist := m.kv[key] + if alreadyExist { + m.kv[key].Value = value + return false + } + + element := m.ll.PushBack(key, value) + m.kv[key] = element + return true +} + +// ReplaceKey replaces an existing key with a new key while preserving order of +// the value. This function will return true if the operation was successful, or +// false if 'originalKey' is not found OR 'newKey' already exists (which would be an overwrite). +func (m *OrderedMap[K, V]) ReplaceKey(originalKey, newKey K) bool { + element, originalExists := m.kv[originalKey] + _, newKeyExists := m.kv[newKey] + if originalExists && !newKeyExists { + delete(m.kv, originalKey) + m.kv[newKey] = element + element.Key = newKey + return true + } + return false +} + +// GetOrDefault returns the value for a key. If the key does not exist, returns +// the default value instead. +func (m *OrderedMap[K, V]) GetOrDefault(key K, defaultValue V) V { + if value, ok := m.kv[key]; ok { + return value.Value + } + + return defaultValue +} + +// GetElement returns the element for a key. If the key does not exist, the +// pointer will be nil. +func (m *OrderedMap[K, V]) GetElement(key K) *Element[K, V] { + element, ok := m.kv[key] + if ok { + return element + } + + return nil +} + +// Len returns the number of elements in the map. +func (m *OrderedMap[K, V]) Len() int { + return len(m.kv) +} + +// AllFromFront returns an iterator that yields all elements in the map starting +// at the front (oldest Set element). +func (m *OrderedMap[K, V]) AllFromFront() iter.Seq2[K, V] { + return func(yield func(key K, value V) bool) { + for el := m.Front(); el != nil; el = el.Next() { + if !yield(el.Key, el.Value) { + return + } + } + } +} + +// AllFromBack returns an iterator that yields all elements in the map starting +// at the back (most recent Set element). +func (m *OrderedMap[K, V]) AllFromBack() iter.Seq2[K, V] { + return func(yield func(key K, value V) bool) { + for el := m.Back(); el != nil; el = el.Prev() { + if !yield(el.Key, el.Value) { + return + } + } + } +} + +// Keys returns an iterator that yields all the keys in the map starting at the +// front (oldest Set element). To create a slice containing all the map keys, +// use the slices.Collect function on the returned iterator. +func (m *OrderedMap[K, V]) Keys() iter.Seq[K] { + return func(yield func(key K) bool) { + for el := m.Front(); el != nil; el = el.Next() { + if !yield(el.Key) { + return + } + } + } +} + +// Values returns an iterator that yields all the values in the map starting at +// the front (oldest Set element). To create a slice containing all the map +// values, use the slices.Collect function on the returned iterator. +func (m *OrderedMap[K, V]) Values() iter.Seq[V] { + return func(yield func(value V) bool) { + for el := m.Front(); el != nil; el = el.Next() { + if !yield(el.Value) { + return + } + } + } +} + +// Delete will remove a key from the map. It will return true if the key was +// removed (the key did exist). +func (m *OrderedMap[K, V]) Delete(key K) (didDelete bool) { + element, ok := m.kv[key] + if ok { + m.ll.Remove(element) + delete(m.kv, key) + } + + return ok +} + +// Front will return the element that is the first (oldest Set element). If +// there are no elements this will return nil. +func (m *OrderedMap[K, V]) Front() *Element[K, V] { + return m.ll.Front() +} + +// Back will return the element that is the last (most recent Set element). If +// there are no elements this will return nil. +func (m *OrderedMap[K, V]) Back() *Element[K, V] { + return m.ll.Back() +} + +// Copy returns a new OrderedMap with the same elements. +// Using Copy while there are concurrent writes may mangle the result. +func (m *OrderedMap[K, V]) Copy() *OrderedMap[K, V] { + m2 := NewOrderedMapWithCapacity[K, V](m.Len()) + for el := m.Front(); el != nil; el = el.Next() { + m2.Set(el.Key, el.Value) + } + return m2 +} + +// Has checks if a key exists in the map. +func (m *OrderedMap[K, V]) Has(key K) bool { + _, exists := m.kv[key] + return exists +} diff --git a/vendor/github.com/mattn/go-colorable/colorable_appengine.go b/vendor/github.com/mattn/go-colorable/colorable_appengine.go deleted file mode 100644 index 416d1bbbf8..0000000000 --- a/vendor/github.com/mattn/go-colorable/colorable_appengine.go +++ /dev/null @@ -1,38 +0,0 @@ -//go:build appengine -// +build appengine - -package colorable - -import ( - "io" - "os" - - _ "github.com/mattn/go-isatty" -) - -// NewColorable returns new instance of Writer which handles escape sequence. -func NewColorable(file *os.File) io.Writer { - if file == nil { - panic("nil passed instead of *os.File to NewColorable()") - } - - return file -} - -// NewColorableStdout returns new instance of Writer which handles escape sequence for stdout. -func NewColorableStdout() io.Writer { - return os.Stdout -} - -// NewColorableStderr returns new instance of Writer which handles escape sequence for stderr. -func NewColorableStderr() io.Writer { - return os.Stderr -} - -// EnableColorsStdout enable colors if possible. -func EnableColorsStdout(enabled *bool) func() { - if enabled != nil { - *enabled = true - } - return func() {} -} diff --git a/vendor/github.com/mattn/go-colorable/colorable_others.go b/vendor/github.com/mattn/go-colorable/colorable_others.go index 766d94603a..c1a78aa94d 100644 --- a/vendor/github.com/mattn/go-colorable/colorable_others.go +++ b/vendor/github.com/mattn/go-colorable/colorable_others.go @@ -1,5 +1,5 @@ -//go:build !windows && !appengine -// +build !windows,!appengine +//go:build !windows || appengine +// +build !windows appengine package colorable diff --git a/vendor/github.com/mattn/go-colorable/colorable_windows.go b/vendor/github.com/mattn/go-colorable/colorable_windows.go index 1846ad5ab4..2df7b8598a 100644 --- a/vendor/github.com/mattn/go-colorable/colorable_windows.go +++ b/vendor/github.com/mattn/go-colorable/colorable_windows.go @@ -11,7 +11,7 @@ import ( "strconv" "strings" "sync" - "syscall" + syscall "golang.org/x/sys/windows" "unsafe" "github.com/mattn/go-isatty" @@ -73,7 +73,7 @@ type consoleCursorInfo struct { } var ( - kernel32 = syscall.NewLazyDLL("kernel32.dll") + kernel32 = syscall.NewLazySystemDLL("kernel32.dll") procGetConsoleScreenBufferInfo = kernel32.NewProc("GetConsoleScreenBufferInfo") procSetConsoleTextAttribute = kernel32.NewProc("SetConsoleTextAttribute") procSetConsoleCursorPosition = kernel32.NewProc("SetConsoleCursorPosition") @@ -87,8 +87,8 @@ var ( procCreateConsoleScreenBuffer = kernel32.NewProc("CreateConsoleScreenBuffer") ) -// Writer provides colorable Writer to the console -type Writer struct { +// writer provides colorable Writer to the console +type writer struct { out io.Writer handle syscall.Handle althandle syscall.Handle @@ -98,7 +98,7 @@ type Writer struct { mutex sync.Mutex } -// NewColorable returns new instance of Writer which handles escape sequence from File. +// NewColorable returns new instance of writer which handles escape sequence from File. func NewColorable(file *os.File) io.Writer { if file == nil { panic("nil passed instead of *os.File to NewColorable()") @@ -112,17 +112,17 @@ func NewColorable(file *os.File) io.Writer { var csbi consoleScreenBufferInfo handle := syscall.Handle(file.Fd()) procGetConsoleScreenBufferInfo.Call(uintptr(handle), uintptr(unsafe.Pointer(&csbi))) - return &Writer{out: file, handle: handle, oldattr: csbi.attributes, oldpos: coord{0, 0}} + return &writer{out: file, handle: handle, oldattr: csbi.attributes, oldpos: coord{0, 0}} } return file } -// NewColorableStdout returns new instance of Writer which handles escape sequence for stdout. +// NewColorableStdout returns new instance of writer which handles escape sequence for stdout. func NewColorableStdout() io.Writer { return NewColorable(os.Stdout) } -// NewColorableStderr returns new instance of Writer which handles escape sequence for stderr. +// NewColorableStderr returns new instance of writer which handles escape sequence for stderr. func NewColorableStderr() io.Writer { return NewColorable(os.Stderr) } @@ -434,7 +434,7 @@ func atoiWithDefault(s string, def int) (int, error) { } // Write writes data on console -func (w *Writer) Write(data []byte) (n int, err error) { +func (w *writer) Write(data []byte) (n int, err error) { w.mutex.Lock() defer w.mutex.Unlock() var csbi consoleScreenBufferInfo @@ -560,7 +560,7 @@ loop: } procSetConsoleCursorPosition.Call(uintptr(handle), *(*uintptr)(unsafe.Pointer(&csbi.cursorPosition))) case 'E': - n, err = strconv.Atoi(buf.String()) + n, err = atoiWithDefault(buf.String(), 1) if err != nil { continue } @@ -569,7 +569,7 @@ loop: csbi.cursorPosition.y += short(n) procSetConsoleCursorPosition.Call(uintptr(handle), *(*uintptr)(unsafe.Pointer(&csbi.cursorPosition))) case 'F': - n, err = strconv.Atoi(buf.String()) + n, err = atoiWithDefault(buf.String(), 1) if err != nil { continue } diff --git a/vendor/github.com/petermattis/goid/.gitignore b/vendor/github.com/petermattis/goid/.gitignore new file mode 100644 index 0000000000..2b9d6b5528 --- /dev/null +++ b/vendor/github.com/petermattis/goid/.gitignore @@ -0,0 +1,4 @@ +*~ +*.test +.*.swp +.DS_Store diff --git a/vendor/github.com/petermattis/goid/LICENSE b/vendor/github.com/petermattis/goid/LICENSE new file mode 100644 index 0000000000..e06d208186 --- /dev/null +++ b/vendor/github.com/petermattis/goid/LICENSE @@ -0,0 +1,202 @@ +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright {yyyy} {name of copyright owner} + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + diff --git a/vendor/github.com/petermattis/goid/README.md b/vendor/github.com/petermattis/goid/README.md new file mode 100644 index 0000000000..3fd144c2c1 --- /dev/null +++ b/vendor/github.com/petermattis/goid/README.md @@ -0,0 +1,4 @@ +# goid ![Build Status](https://github.com/petermattis/goid/actions/workflows/go.yml/badge.svg) + +Programatically retrieve the current goroutine's ID. See [the CI +configuration](.github/workflows/go.yml) for supported Go versions. diff --git a/vendor/github.com/petermattis/goid/goid.go b/vendor/github.com/petermattis/goid/goid.go new file mode 100644 index 0000000000..408e619929 --- /dev/null +++ b/vendor/github.com/petermattis/goid/goid.go @@ -0,0 +1,35 @@ +// Copyright 2016 Peter Mattis. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. See the AUTHORS file +// for names of contributors. + +package goid + +import ( + "bytes" + "runtime" + "strconv" +) + +func ExtractGID(s []byte) int64 { + s = s[len("goroutine "):] + s = s[:bytes.IndexByte(s, ' ')] + gid, _ := strconv.ParseInt(string(s), 10, 64) + return gid +} + +// Parse the goid from runtime.Stack() output. Slow, but it works. +func getSlow() int64 { + var buf [64]byte + return ExtractGID(buf[:runtime.Stack(buf[:], false)]) +} diff --git a/vendor/github.com/petermattis/goid/goid_gccgo.go b/vendor/github.com/petermattis/goid/goid_gccgo.go new file mode 100644 index 0000000000..31c14d99a9 --- /dev/null +++ b/vendor/github.com/petermattis/goid/goid_gccgo.go @@ -0,0 +1,26 @@ +// Copyright 2018 Peter Mattis. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. See the AUTHORS file +// for names of contributors. + +//go:build gccgo +// +build gccgo + +package goid + +//extern runtime.getg +func getg() *g + +func Get() int64 { + return getg().goid +} diff --git a/vendor/github.com/petermattis/goid/goid_go1.3.c b/vendor/github.com/petermattis/goid/goid_go1.3.c new file mode 100644 index 0000000000..2e3f7ab79d --- /dev/null +++ b/vendor/github.com/petermattis/goid/goid_go1.3.c @@ -0,0 +1,23 @@ +// Copyright 2015 Peter Mattis. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. See the AUTHORS file +// for names of contributors. + +// +build !go1.4 + +#include + +void ·Get(int64 ret) { + ret = g->goid; + USED(&ret); +} diff --git a/vendor/github.com/petermattis/goid/goid_go1.3.go b/vendor/github.com/petermattis/goid/goid_go1.3.go new file mode 100644 index 0000000000..d73b699201 --- /dev/null +++ b/vendor/github.com/petermattis/goid/goid_go1.3.go @@ -0,0 +1,22 @@ +// Copyright 2015 Peter Mattis. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. See the AUTHORS file +// for names of contributors. + +//go:build !go1.4 +// +build !go1.4 + +package goid + +// Get returns the id of the current goroutine. +func Get() int64 diff --git a/vendor/github.com/petermattis/goid/goid_go1.4.go b/vendor/github.com/petermattis/goid/goid_go1.4.go new file mode 100644 index 0000000000..4798980b3f --- /dev/null +++ b/vendor/github.com/petermattis/goid/goid_go1.4.go @@ -0,0 +1,35 @@ +// Copyright 2015 Peter Mattis. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. See the AUTHORS file +// for names of contributors. + +//go:build go1.4 && !go1.5 +// +build go1.4,!go1.5 + +package goid + +import "unsafe" + +var pointerSize = unsafe.Sizeof(uintptr(0)) + +// Backdoor access to runtime·getg(). +func getg() uintptr // in goid_go1.4.s + +// Get returns the id of the current goroutine. +func Get() int64 { + // The goid is the 16th field in the G struct where each field is a + // pointer, uintptr or padded to that size. See runtime.h from the + // Go sources. I'm not aware of a cleaner way to determine the + // offset. + return *(*int64)(unsafe.Pointer(getg() + 16*pointerSize)) +} diff --git a/vendor/github.com/petermattis/goid/goid_go1.4.s b/vendor/github.com/petermattis/goid/goid_go1.4.s new file mode 100644 index 0000000000..21a07d6624 --- /dev/null +++ b/vendor/github.com/petermattis/goid/goid_go1.4.s @@ -0,0 +1,18 @@ +// Copyright 2014 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Assembly to get into package runtime without using exported symbols. +// See https://github.com/golang/go/blob/release-branch.go1.4/misc/cgo/test/backdoor/thunk.s + +// +build amd64 amd64p32 arm 386 +// +build go1.4,!go1.5 + +#include "textflag.h" + +#ifdef GOARCH_arm +#define JMP B +#endif + +TEXT ·getg(SB),NOSPLIT,$0-0 + JMP runtime·getg(SB) diff --git a/vendor/github.com/petermattis/goid/goid_go1.5.go b/vendor/github.com/petermattis/goid/goid_go1.5.go new file mode 100644 index 0000000000..4521f79201 --- /dev/null +++ b/vendor/github.com/petermattis/goid/goid_go1.5.go @@ -0,0 +1,28 @@ +// Copyright 2016 Peter Mattis. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. See the AUTHORS file +// for names of contributors. + +//go:build (386 || amd64 || amd64p32 || arm || arm64 || s390x) && gc && go1.5 +// +build 386 amd64 amd64p32 arm arm64 s390x +// +build gc +// +build go1.5 + +package goid + +// Defined in goid_go1.5.s. +func getg() *g + +func Get() int64 { + return getg().goid +} diff --git a/vendor/github.com/petermattis/goid/goid_go1.5.s b/vendor/github.com/petermattis/goid/goid_go1.5.s new file mode 100644 index 0000000000..c49333f14a --- /dev/null +++ b/vendor/github.com/petermattis/goid/goid_go1.5.s @@ -0,0 +1,44 @@ +// Copyright 2021 Peter Mattis. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. See the AUTHORS file +// for names of contributors. + +// Assembly to mimic runtime.getg. + +//go:build (386 || amd64 || amd64p32 || arm || arm64 || s390x) && gc && go1.5 +// +build 386 amd64 amd64p32 arm arm64 s390x +// +build gc +// +build go1.5 + +#include "textflag.h" + +// func getg() *g +TEXT ·getg(SB),NOSPLIT,$0-8 +#ifdef GOARCH_386 + MOVL (TLS), AX + MOVL AX, ret+0(FP) +#endif +#ifdef GOARCH_amd64 + MOVQ (TLS), AX + MOVQ AX, ret+0(FP) +#endif +#ifdef GOARCH_arm + MOVW g, ret+0(FP) +#endif +#ifdef GOARCH_arm64 + MOVD g, ret+0(FP) +#endif +#ifdef GOARCH_s390x + MOVD g, ret+0(FP) +#endif + RET diff --git a/vendor/github.com/petermattis/goid/goid_slow.go b/vendor/github.com/petermattis/goid/goid_slow.go new file mode 100644 index 0000000000..8bdb4357e0 --- /dev/null +++ b/vendor/github.com/petermattis/goid/goid_slow.go @@ -0,0 +1,24 @@ +// Copyright 2016 Peter Mattis. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. See the AUTHORS file +// for names of contributors. + +//go:build (go1.4 && !go1.5 && !amd64 && !amd64p32 && !arm && !386) || (go1.5 && !386 && !amd64 && !amd64p32 && !arm && !arm64 && !s390x) +// +build go1.4,!go1.5,!amd64,!amd64p32,!arm,!386 go1.5,!386,!amd64,!amd64p32,!arm,!arm64,!s390x + +package goid + +// Get returns the id of the current goroutine. +func Get() int64 { + return getSlow() +} diff --git a/vendor/github.com/petermattis/goid/runtime_gccgo_go1.8.go b/vendor/github.com/petermattis/goid/runtime_gccgo_go1.8.go new file mode 100644 index 0000000000..dfcb74e0c4 --- /dev/null +++ b/vendor/github.com/petermattis/goid/runtime_gccgo_go1.8.go @@ -0,0 +1,17 @@ +//go:build gccgo && go1.8 +// +build gccgo,go1.8 + +package goid + +// https://github.com/gcc-mirror/gcc/blob/releases/gcc-7/libgo/go/runtime/runtime2.go#L329-L354 + +type g struct { + _panic uintptr + _defer uintptr + m uintptr + syscallsp uintptr + syscallpc uintptr + param uintptr + atomicstatus uint32 + goid int64 // Here it is! +} diff --git a/vendor/github.com/petermattis/goid/runtime_go1.23.go b/vendor/github.com/petermattis/goid/runtime_go1.23.go new file mode 100644 index 0000000000..45da87379f --- /dev/null +++ b/vendor/github.com/petermattis/goid/runtime_go1.23.go @@ -0,0 +1,38 @@ +//go:build gc && go1.23 && !go1.25 +// +build gc,go1.23,!go1.25 + +package goid + +type stack struct { + lo uintptr + hi uintptr +} + +type gobuf struct { + sp uintptr + pc uintptr + g uintptr + ctxt uintptr + ret uintptr + lr uintptr + bp uintptr +} + +type g struct { + stack stack + stackguard0 uintptr + stackguard1 uintptr + + _panic uintptr + _defer uintptr + m uintptr + sched gobuf + syscallsp uintptr + syscallpc uintptr + syscallbp uintptr + stktopsp uintptr + param uintptr + atomicstatus uint32 + stackLock uint32 + goid int64 // Here it is! +} diff --git a/vendor/github.com/petermattis/goid/runtime_go1.25.go b/vendor/github.com/petermattis/goid/runtime_go1.25.go new file mode 100644 index 0000000000..ae3ce8319b --- /dev/null +++ b/vendor/github.com/petermattis/goid/runtime_go1.25.go @@ -0,0 +1,37 @@ +//go:build gc && go1.25 +// +build gc,go1.25 + +package goid + +type stack struct { + lo uintptr + hi uintptr +} + +type gobuf struct { + sp uintptr + pc uintptr + g uintptr + ctxt uintptr + lr uintptr + bp uintptr +} + +type g struct { + stack stack + stackguard0 uintptr + stackguard1 uintptr + + _panic uintptr + _defer uintptr + m uintptr + sched gobuf + syscallsp uintptr + syscallpc uintptr + syscallbp uintptr + stktopsp uintptr + param uintptr + atomicstatus uint32 + stackLock uint32 + goid int64 // Here it is! +} diff --git a/vendor/github.com/petermattis/goid/runtime_go1.5.go b/vendor/github.com/petermattis/goid/runtime_go1.5.go new file mode 100644 index 0000000000..6ce2ab8eee --- /dev/null +++ b/vendor/github.com/petermattis/goid/runtime_go1.5.go @@ -0,0 +1,57 @@ +// Copyright 2016 Peter Mattis. +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +// implied. See the License for the specific language governing +// permissions and limitations under the License. See the AUTHORS file +// for names of contributors. + +//go:build go1.5 && !go1.6 +// +build go1.5,!go1.6 + +package goid + +// Just enough of the structs from runtime/runtime2.go to get the offset to goid. +// See https://github.com/golang/go/blob/release-branch.go1.5/src/runtime/runtime2.go + +type stack struct { + lo uintptr + hi uintptr +} + +type gobuf struct { + sp uintptr + pc uintptr + g uintptr + ctxt uintptr + ret uintptr + lr uintptr + bp uintptr +} + +type g struct { + stack stack + stackguard0 uintptr + stackguard1 uintptr + + _panic uintptr + _defer uintptr + m uintptr + stackAlloc uintptr + sched gobuf + syscallsp uintptr + syscallpc uintptr + stkbar []uintptr + stkbarPos uintptr + param uintptr + atomicstatus uint32 + stackLock uint32 + goid int64 // Here it is! +} diff --git a/vendor/github.com/petermattis/goid/runtime_go1.6.go b/vendor/github.com/petermattis/goid/runtime_go1.6.go new file mode 100644 index 0000000000..983d55bc47 --- /dev/null +++ b/vendor/github.com/petermattis/goid/runtime_go1.6.go @@ -0,0 +1,43 @@ +//go:build gc && go1.6 && !go1.9 +// +build gc,go1.6,!go1.9 + +package goid + +// Just enough of the structs from runtime/runtime2.go to get the offset to goid. +// See https://github.com/golang/go/blob/release-branch.go1.6/src/runtime/runtime2.go + +type stack struct { + lo uintptr + hi uintptr +} + +type gobuf struct { + sp uintptr + pc uintptr + g uintptr + ctxt uintptr + ret uintptr + lr uintptr + bp uintptr +} + +type g struct { + stack stack + stackguard0 uintptr + stackguard1 uintptr + + _panic uintptr + _defer uintptr + m uintptr + stackAlloc uintptr + sched gobuf + syscallsp uintptr + syscallpc uintptr + stkbar []uintptr + stkbarPos uintptr + stktopsp uintptr + param uintptr + atomicstatus uint32 + stackLock uint32 + goid int64 // Here it is! +} diff --git a/vendor/github.com/petermattis/goid/runtime_go1.9.go b/vendor/github.com/petermattis/goid/runtime_go1.9.go new file mode 100644 index 0000000000..f9ef8f5ffe --- /dev/null +++ b/vendor/github.com/petermattis/goid/runtime_go1.9.go @@ -0,0 +1,37 @@ +//go:build gc && go1.9 && !go1.23 +// +build gc,go1.9,!go1.23 + +package goid + +type stack struct { + lo uintptr + hi uintptr +} + +type gobuf struct { + sp uintptr + pc uintptr + g uintptr + ctxt uintptr + ret uintptr + lr uintptr + bp uintptr +} + +type g struct { + stack stack + stackguard0 uintptr + stackguard1 uintptr + + _panic uintptr + _defer uintptr + m uintptr + sched gobuf + syscallsp uintptr + syscallpc uintptr + stktopsp uintptr + param uintptr + atomicstatus uint32 + stackLock uint32 + goid int64 // Here it is! +} diff --git a/vendor/github.com/rs/xid/.gitignore b/vendor/github.com/rs/xid/.gitignore new file mode 100644 index 0000000000..81be9277fc --- /dev/null +++ b/vendor/github.com/rs/xid/.gitignore @@ -0,0 +1,3 @@ +/.idea +/.vscode +.DS_Store \ No newline at end of file diff --git a/vendor/github.com/rs/xid/README.md b/vendor/github.com/rs/xid/README.md index 974e67d29b..1bf45bd11b 100644 --- a/vendor/github.com/rs/xid/README.md +++ b/vendor/github.com/rs/xid/README.md @@ -4,7 +4,7 @@ Package xid is a globally unique id generator library, ready to safely be used directly in your server code. -Xid uses the Mongo Object ID algorithm to generate globally unique ids with a different serialization (base64) to make it shorter when transported as a string: +Xid uses the Mongo Object ID algorithm to generate globally unique ids with a different serialization ([base32hex](https://datatracker.ietf.org/doc/html/rfc4648#page-10)) to make it shorter when transported as a string: https://docs.mongodb.org/manual/reference/object-id/ - 4-byte value representing the seconds since the Unix epoch, @@ -13,7 +13,7 @@ https://docs.mongodb.org/manual/reference/object-id/ - 3-byte counter, starting with a random value. The binary representation of the id is compatible with Mongo 12 bytes Object IDs. -The string representation is using base32 hex (w/o padding) for better space efficiency +The string representation is using [base32hex](https://datatracker.ietf.org/doc/html/rfc4648#page-10) (w/o padding) for better space efficiency when stored in that form (20 bytes). The hex variant of base32 is used to retain the sortable property of the id. @@ -71,8 +71,10 @@ References: - Java port by [0xShamil](https://github.com/0xShamil/): https://github.com/0xShamil/java-xid - Dart port by [Peter Bwire](https://github.com/pitabwire): https://pub.dev/packages/xid - PostgreSQL port by [Rasmus Holm](https://github.com/crholm): https://github.com/modfin/pg-xid -- Swift port by [Uditha Atukorala](https://github.com/uditha-atukorala): https://github.com/uditha-atukorala/swift-xid -- C++ port by [Uditha Atukorala](https://github.com/uditha-atukorala): https://github.com/uditha-atukorala/libxid +- Swift port by [Uditha Atukorala](https://github.com/uatuko): https://github.com/uatuko/swift-xid +- C++ port by [Uditha Atukorala](https://github.com/uatuko): https://github.com/uatuko/libxid +- Typescript & Javascript port by [Yiwen AI](https://github.com/yiwen-ai): https://github.com/yiwen-ai/xid-ts +- Gleam port by [Alexandre Del Vecchio](https://github.com/defgenx): https://github.com/defgenx/gxid ## Install diff --git a/vendor/github.com/rs/xid/hostid_darwin.go b/vendor/github.com/rs/xid/hostid_darwin.go index 08351ff72c..17351563a8 100644 --- a/vendor/github.com/rs/xid/hostid_darwin.go +++ b/vendor/github.com/rs/xid/hostid_darwin.go @@ -2,8 +2,33 @@ package xid -import "syscall" +import ( + "errors" + "os/exec" + "strings" +) func readPlatformMachineID() (string, error) { - return syscall.Sysctl("kern.uuid") + ioreg, err := exec.LookPath("ioreg") + if err != nil { + return "", err + } + + cmd := exec.Command(ioreg, "-rd1", "-c", "IOPlatformExpertDevice") + out, err := cmd.CombinedOutput() + if err != nil { + return "", err + } + + for _, line := range strings.Split(string(out), "\n") { + if strings.Contains(line, "IOPlatformUUID") { + parts := strings.SplitAfter(line, `" = "`) + if len(parts) == 2 { + uuid := strings.TrimRight(parts[1], `"`) + return strings.ToLower(uuid), nil + } + } + } + + return "", errors.New("cannot find host id") } diff --git a/vendor/github.com/rs/xid/hostid_windows.go b/vendor/github.com/rs/xid/hostid_windows.go index ec2593ee31..a4d98ab0e7 100644 --- a/vendor/github.com/rs/xid/hostid_windows.go +++ b/vendor/github.com/rs/xid/hostid_windows.go @@ -11,11 +11,17 @@ import ( func readPlatformMachineID() (string, error) { // source: https://github.com/shirou/gopsutil/blob/master/host/host_syscall.go var h syscall.Handle - err := syscall.RegOpenKeyEx(syscall.HKEY_LOCAL_MACHINE, syscall.StringToUTF16Ptr(`SOFTWARE\Microsoft\Cryptography`), 0, syscall.KEY_READ|syscall.KEY_WOW64_64KEY, &h) + + regKeyCryptoPtr, err := syscall.UTF16PtrFromString(`SOFTWARE\Microsoft\Cryptography`) + if err != nil { + return "", fmt.Errorf(`error reading registry key "SOFTWARE\Microsoft\Cryptography": %w`, err) + } + + err = syscall.RegOpenKeyEx(syscall.HKEY_LOCAL_MACHINE, regKeyCryptoPtr, 0, syscall.KEY_READ|syscall.KEY_WOW64_64KEY, &h) if err != nil { return "", err } - defer syscall.RegCloseKey(h) + defer func() { _ = syscall.RegCloseKey(h) }() const syscallRegBufLen = 74 // len(`{`) + len(`abcdefgh-1234-456789012-123345456671` * 2) + len(`}`) // 2 == bytes/UTF16 const uuidLen = 36 @@ -23,9 +29,15 @@ func readPlatformMachineID() (string, error) { var regBuf [syscallRegBufLen]uint16 bufLen := uint32(syscallRegBufLen) var valType uint32 - err = syscall.RegQueryValueEx(h, syscall.StringToUTF16Ptr(`MachineGuid`), nil, &valType, (*byte)(unsafe.Pointer(®Buf[0])), &bufLen) + + mGuidPtr, err := syscall.UTF16PtrFromString(`MachineGuid`) if err != nil { - return "", err + return "", fmt.Errorf("error reading machine GUID: %w", err) + } + + err = syscall.RegQueryValueEx(h, mGuidPtr, nil, &valType, (*byte)(unsafe.Pointer(®Buf[0])), &bufLen) + if err != nil { + return "", fmt.Errorf("error parsing ") } hostID := syscall.UTF16ToString(regBuf[:]) diff --git a/vendor/github.com/rs/xid/id.go b/vendor/github.com/rs/xid/id.go index fcd7a04135..e88984d9f1 100644 --- a/vendor/github.com/rs/xid/id.go +++ b/vendor/github.com/rs/xid/id.go @@ -54,7 +54,6 @@ import ( "sort" "sync/atomic" "time" - "unsafe" ) // Code inspired from mgo/bson ObjectId @@ -172,7 +171,7 @@ func FromString(id string) (ID, error) { func (id ID) String() string { text := make([]byte, encodedLen) encode(text, id[:]) - return *(*string)(unsafe.Pointer(&text)) + return string(text) } // Encode encodes the id using base32 encoding, writing 20 bytes to dst and return it. @@ -206,23 +205,23 @@ func encode(dst, id []byte) { dst[19] = encoding[(id[11]<<4)&0x1F] dst[18] = encoding[(id[11]>>1)&0x1F] - dst[17] = encoding[(id[11]>>6)&0x1F|(id[10]<<2)&0x1F] + dst[17] = encoding[(id[11]>>6)|(id[10]<<2)&0x1F] dst[16] = encoding[id[10]>>3] dst[15] = encoding[id[9]&0x1F] dst[14] = encoding[(id[9]>>5)|(id[8]<<3)&0x1F] dst[13] = encoding[(id[8]>>2)&0x1F] dst[12] = encoding[id[8]>>7|(id[7]<<1)&0x1F] - dst[11] = encoding[(id[7]>>4)&0x1F|(id[6]<<4)&0x1F] + dst[11] = encoding[(id[7]>>4)|(id[6]<<4)&0x1F] dst[10] = encoding[(id[6]>>1)&0x1F] - dst[9] = encoding[(id[6]>>6)&0x1F|(id[5]<<2)&0x1F] + dst[9] = encoding[(id[6]>>6)|(id[5]<<2)&0x1F] dst[8] = encoding[id[5]>>3] dst[7] = encoding[id[4]&0x1F] dst[6] = encoding[id[4]>>5|(id[3]<<3)&0x1F] dst[5] = encoding[(id[3]>>2)&0x1F] dst[4] = encoding[id[3]>>7|(id[2]<<1)&0x1F] - dst[3] = encoding[(id[2]>>4)&0x1F|(id[1]<<4)&0x1F] + dst[3] = encoding[(id[2]>>4)|(id[1]<<4)&0x1F] dst[2] = encoding[(id[1]>>1)&0x1F] - dst[1] = encoding[(id[1]>>6)&0x1F|(id[0]<<2)&0x1F] + dst[1] = encoding[(id[1]>>6)|(id[0]<<2)&0x1F] dst[0] = encoding[id[0]>>3] } diff --git a/vendor/github.com/rs/zerolog/CNAME b/vendor/github.com/rs/zerolog/CNAME deleted file mode 100644 index 9ce57a6ebe..0000000000 --- a/vendor/github.com/rs/zerolog/CNAME +++ /dev/null @@ -1 +0,0 @@ -zerolog.io \ No newline at end of file diff --git a/vendor/github.com/rs/zerolog/CONTRIBUTING.md b/vendor/github.com/rs/zerolog/CONTRIBUTING.md new file mode 100644 index 0000000000..a09e9e2197 --- /dev/null +++ b/vendor/github.com/rs/zerolog/CONTRIBUTING.md @@ -0,0 +1,43 @@ +# Contributing to Zerolog + +Thank you for your interest in contributing to **Zerolog**! + +Zerolog is a **feature-complete**, high-performance logging library designed to be **lean** and **non-bloated**. The focus of ongoing development is on **bug fixes**, **performance improvements**, and **modernization efforts** (such as keeping up with Go best practices and compatibility with newer Go versions). + +## What We're Looking For + +We welcome contributions in the following areas: + +- **Bug Fixes**: If you find an issue or unexpected behavior, please open an issue and/or submit a fix. +- **Performance Optimizations**: Improvements that reduce memory usage, allocation count, or CPU cycles without introducing complexity are appreciated. +- **Modernization**: Compatibility updates for newer Go versions or idiomatic improvements that do not increase library size or complexity. +- **Documentation Enhancements**: Corrections, clarifications, and improvements to documentation or code comments. + +## What We're *Not* Looking For + +Zerolog is intended to remain **minimalistic and efficient**. Therefore, we are **not accepting**: + +- New features that add optional behaviors or extend API surface area. +- Built-in support for frameworks or external systems (e.g., bindings, integrations). +- General-purpose abstractions or configuration helpers. + +If you're unsure whether a change aligns with the project's philosophy, feel free to open an issue for discussion before submitting a PR. + +## Contributing Guidelines + +1. **Fork the repository** +2. **Create a branch** for your fix or improvement +3. **Write tests** to cover your changes +4. Ensure `go test ./...` passes +5. Run `go fmt` and `go vet` to ensure code consistency +6. **Submit a pull request** with a clear explanation of the motivation and impact + +## Code Style + +- Keep the code simple, efficient, and idiomatic. +- Avoid introducing new dependencies. +- Preserve backwards compatibility unless explicitly discussed. + +--- + +We appreciate your effort in helping us keep Zerolog fast, minimal, and reliable! diff --git a/vendor/github.com/rs/zerolog/README.md b/vendor/github.com/rs/zerolog/README.md index 1306a6c1cd..9d4e8e8d2f 100644 --- a/vendor/github.com/rs/zerolog/README.md +++ b/vendor/github.com/rs/zerolog/README.md @@ -366,6 +366,37 @@ log.Info().Str("foo", "bar").Msg("Hello World") // Output: 2006-01-02T15:04:05Z07:00 | INFO | ***Hello World**** foo:BAR ``` +To use custom advanced formatting: + +```go +output := zerolog.ConsoleWriter{Out: os.Stdout, NoColor: true, + PartsOrder: []string{"level", "one", "two", "three", "message"}, + FieldsExclude: []string{"one", "two", "three"}} +output.FormatLevel = func(i interface{}) string { return strings.ToUpper(fmt.Sprintf("%-6s", i)) } +output.FormatFieldName = func(i interface{}) string { return fmt.Sprintf("%s:", i) } +output.FormatPartValueByName = func(i interface{}, s string) string { + var ret string + switch s { + case "one": + ret = strings.ToUpper(fmt.Sprintf("%s", i)) + case "two": + ret = strings.ToLower(fmt.Sprintf("%s", i)) + case "three": + ret = strings.ToLower(fmt.Sprintf("(%s)", i)) + } + return ret +} +log := zerolog.New(output) + +log.Info().Str("foo", "bar"). + Str("two", "TEST_TWO"). + Str("one", "test_one"). + Str("three", "test_three"). + Msg("Hello World") + +// Output: INFO TEST_ONE test_two (test_three) Hello World foo:bar +``` + ### Sub dictionary ```go diff --git a/vendor/github.com/rs/zerolog/_config.yml b/vendor/github.com/rs/zerolog/_config.yml deleted file mode 100644 index a1e896d7be..0000000000 --- a/vendor/github.com/rs/zerolog/_config.yml +++ /dev/null @@ -1 +0,0 @@ -remote_theme: rs/gh-readme diff --git a/vendor/github.com/rs/zerolog/console.go b/vendor/github.com/rs/zerolog/console.go index 7e65e86f93..6c881ef608 100644 --- a/vendor/github.com/rs/zerolog/console.go +++ b/vendor/github.com/rs/zerolog/console.go @@ -47,6 +47,10 @@ const ( // Formatter transforms the input into a formatted string. type Formatter func(interface{}) string +// FormatterByFieldName transforms the input into a formatted string, +// being able to differentiate formatting based on field name. +type FormatterByFieldName func(interface{}, string) string + // ConsoleWriter parses the JSON input and writes it in an // (optionally) colorized, human-friendly format to Out. type ConsoleWriter struct { @@ -85,6 +89,9 @@ type ConsoleWriter struct { FormatFieldValue Formatter FormatErrFieldName Formatter FormatErrFieldValue Formatter + // If this is configured it is used for "part" values and + // has precedence on FormatFieldValue + FormatPartValueByName FormatterByFieldName FormatExtra func(map[string]interface{}, *bytes.Buffer) error @@ -282,8 +289,9 @@ func (w ConsoleWriter) writeFields(evt map[string]interface{}, buf *bytes.Buffer // writePart appends a formatted part to buf. func (w ConsoleWriter) writePart(buf *bytes.Buffer, evt map[string]interface{}, p string) { var f Formatter + var fvn FormatterByFieldName - if w.PartsExclude != nil && len(w.PartsExclude) > 0 { + if len(w.PartsExclude) > 0 { for _, exclude := range w.PartsExclude { if exclude == p { return @@ -317,14 +325,21 @@ func (w ConsoleWriter) writePart(buf *bytes.Buffer, evt map[string]interface{}, f = w.FormatCaller } default: - if w.FormatFieldValue == nil { - f = consoleDefaultFormatFieldValue - } else { + if w.FormatPartValueByName != nil { + fvn = w.FormatPartValueByName + } else if w.FormatFieldValue != nil { f = w.FormatFieldValue + } else { + f = consoleDefaultFormatFieldValue } } - var s = f(evt[p]) + var s string + if f == nil { + s = fvn(evt[p], p) + } else { + s = f(evt[p]) + } if len(s) > 0 { if buf.Len() > 0 { diff --git a/vendor/github.com/rs/zerolog/log.go b/vendor/github.com/rs/zerolog/log.go index 6c1d4ead71..ea2cd62b59 100644 --- a/vendor/github.com/rs/zerolog/log.go +++ b/vendor/github.com/rs/zerolog/log.go @@ -494,7 +494,7 @@ func (l *Logger) newEvent(level Level, done func(string)) *Event { if level != NoLevel && LevelFieldName != "" { e.Str(LevelFieldName, LevelFieldMarshalFunc(level)) } - if l.context != nil && len(l.context) > 1 { + if len(l.context) > 1 { e.buf = enc.AppendObjectData(e.buf, l.context) } if l.stack { diff --git a/vendor/github.com/rs/zerolog/log/log.go b/vendor/github.com/rs/zerolog/log/log.go new file mode 100644 index 0000000000..a96ec5067f --- /dev/null +++ b/vendor/github.com/rs/zerolog/log/log.go @@ -0,0 +1,131 @@ +// Package log provides a global logger for zerolog. +package log + +import ( + "context" + "fmt" + "io" + "os" + + "github.com/rs/zerolog" +) + +// Logger is the global logger. +var Logger = zerolog.New(os.Stderr).With().Timestamp().Logger() + +// Output duplicates the global logger and sets w as its output. +func Output(w io.Writer) zerolog.Logger { + return Logger.Output(w) +} + +// With creates a child logger with the field added to its context. +func With() zerolog.Context { + return Logger.With() +} + +// Level creates a child logger with the minimum accepted level set to level. +func Level(level zerolog.Level) zerolog.Logger { + return Logger.Level(level) +} + +// Sample returns a logger with the s sampler. +func Sample(s zerolog.Sampler) zerolog.Logger { + return Logger.Sample(s) +} + +// Hook returns a logger with the h Hook. +func Hook(h zerolog.Hook) zerolog.Logger { + return Logger.Hook(h) +} + +// Err starts a new message with error level with err as a field if not nil or +// with info level if err is nil. +// +// You must call Msg on the returned event in order to send the event. +func Err(err error) *zerolog.Event { + return Logger.Err(err) +} + +// Trace starts a new message with trace level. +// +// You must call Msg on the returned event in order to send the event. +func Trace() *zerolog.Event { + return Logger.Trace() +} + +// Debug starts a new message with debug level. +// +// You must call Msg on the returned event in order to send the event. +func Debug() *zerolog.Event { + return Logger.Debug() +} + +// Info starts a new message with info level. +// +// You must call Msg on the returned event in order to send the event. +func Info() *zerolog.Event { + return Logger.Info() +} + +// Warn starts a new message with warn level. +// +// You must call Msg on the returned event in order to send the event. +func Warn() *zerolog.Event { + return Logger.Warn() +} + +// Error starts a new message with error level. +// +// You must call Msg on the returned event in order to send the event. +func Error() *zerolog.Event { + return Logger.Error() +} + +// Fatal starts a new message with fatal level. The os.Exit(1) function +// is called by the Msg method. +// +// You must call Msg on the returned event in order to send the event. +func Fatal() *zerolog.Event { + return Logger.Fatal() +} + +// Panic starts a new message with panic level. The message is also sent +// to the panic function. +// +// You must call Msg on the returned event in order to send the event. +func Panic() *zerolog.Event { + return Logger.Panic() +} + +// WithLevel starts a new message with level. +// +// You must call Msg on the returned event in order to send the event. +func WithLevel(level zerolog.Level) *zerolog.Event { + return Logger.WithLevel(level) +} + +// Log starts a new message with no level. Setting zerolog.GlobalLevel to +// zerolog.Disabled will still disable events produced by this method. +// +// You must call Msg on the returned event in order to send the event. +func Log() *zerolog.Event { + return Logger.Log() +} + +// Print sends a log event using debug level and no extra field. +// Arguments are handled in the manner of fmt.Print. +func Print(v ...interface{}) { + Logger.Debug().CallerSkipFrame(1).Msg(fmt.Sprint(v...)) +} + +// Printf sends a log event using debug level and no extra field. +// Arguments are handled in the manner of fmt.Printf. +func Printf(format string, v ...interface{}) { + Logger.Debug().CallerSkipFrame(1).Msgf(format, v...) +} + +// Ctx returns the Logger associated with the ctx. If no logger +// is associated, a disabled logger is returned. +func Ctx(ctx context.Context) *zerolog.Logger { + return zerolog.Ctx(ctx) +} diff --git a/vendor/github.com/rs/zerolog/sampler.go b/vendor/github.com/rs/zerolog/sampler.go index 83ce2ed3ad..19e04bd4b9 100644 --- a/vendor/github.com/rs/zerolog/sampler.go +++ b/vendor/github.com/rs/zerolog/sampler.go @@ -47,6 +47,9 @@ type BasicSampler struct { // Sample implements the Sampler interface. func (s *BasicSampler) Sample(lvl Level) bool { n := s.N + if n == 0 { + return false + } if n == 1 { return true } @@ -87,7 +90,7 @@ func (s *BurstSampler) inc() uint32 { now := TimestampFunc().UnixNano() resetAt := atomic.LoadInt64(&s.resetAt) var c uint32 - if now > resetAt { + if now >= resetAt { c = 1 atomic.StoreUint32(&s.counter, c) newResetAt := now + s.Period.Nanoseconds() diff --git a/vendor/github.com/rs/zerolog/writer.go b/vendor/github.com/rs/zerolog/writer.go index 41b394d71d..0fc5ff5971 100644 --- a/vendor/github.com/rs/zerolog/writer.go +++ b/vendor/github.com/rs/zerolog/writer.go @@ -213,6 +213,15 @@ func (w *FilteredLevelWriter) WriteLevel(level Level, p []byte) (int, error) { return len(p), nil } +// Call the underlying writer's Close method if it is an io.Closer. Otherwise +// does nothing. +func (w *FilteredLevelWriter) Close() error { + if closer, ok := w.Writer.(io.Closer); ok { + return closer.Close() + } + return nil +} + var triggerWriterPool = &sync.Pool{ New: func() interface{} { return bytes.NewBuffer(make([]byte, 0, 1024)) diff --git a/vendor/github.com/stretchr/testify/assert/assertion_compare.go b/vendor/github.com/stretchr/testify/assert/assertion_compare.go index 4d4b4aad6f..ffb24e8e31 100644 --- a/vendor/github.com/stretchr/testify/assert/assertion_compare.go +++ b/vendor/github.com/stretchr/testify/assert/assertion_compare.go @@ -7,10 +7,13 @@ import ( "time" ) -type CompareType int +// Deprecated: CompareType has only ever been for internal use and has accidentally been published since v1.6.0. Do not use it. +type CompareType = compareResult + +type compareResult int const ( - compareLess CompareType = iota - 1 + compareLess compareResult = iota - 1 compareEqual compareGreater ) @@ -39,7 +42,7 @@ var ( bytesType = reflect.TypeOf([]byte{}) ) -func compare(obj1, obj2 interface{}, kind reflect.Kind) (CompareType, bool) { +func compare(obj1, obj2 interface{}, kind reflect.Kind) (compareResult, bool) { obj1Value := reflect.ValueOf(obj1) obj2Value := reflect.ValueOf(obj2) @@ -325,7 +328,13 @@ func compare(obj1, obj2 interface{}, kind reflect.Kind) (CompareType, bool) { timeObj2 = obj2Value.Convert(timeType).Interface().(time.Time) } - return compare(timeObj1.UnixNano(), timeObj2.UnixNano(), reflect.Int64) + if timeObj1.Before(timeObj2) { + return compareLess, true + } + if timeObj1.Equal(timeObj2) { + return compareEqual, true + } + return compareGreater, true } case reflect.Slice: { @@ -345,7 +354,7 @@ func compare(obj1, obj2 interface{}, kind reflect.Kind) (CompareType, bool) { bytesObj2 = obj2Value.Convert(bytesType).Interface().([]byte) } - return CompareType(bytes.Compare(bytesObj1, bytesObj2)), true + return compareResult(bytes.Compare(bytesObj1, bytesObj2)), true } case reflect.Uintptr: { @@ -381,7 +390,8 @@ func Greater(t TestingT, e1 interface{}, e2 interface{}, msgAndArgs ...interface if h, ok := t.(tHelper); ok { h.Helper() } - return compareTwoValues(t, e1, e2, []CompareType{compareGreater}, "\"%v\" is not greater than \"%v\"", msgAndArgs...) + failMessage := fmt.Sprintf("\"%v\" is not greater than \"%v\"", e1, e2) + return compareTwoValues(t, e1, e2, []compareResult{compareGreater}, failMessage, msgAndArgs...) } // GreaterOrEqual asserts that the first element is greater than or equal to the second @@ -394,7 +404,8 @@ func GreaterOrEqual(t TestingT, e1 interface{}, e2 interface{}, msgAndArgs ...in if h, ok := t.(tHelper); ok { h.Helper() } - return compareTwoValues(t, e1, e2, []CompareType{compareGreater, compareEqual}, "\"%v\" is not greater than or equal to \"%v\"", msgAndArgs...) + failMessage := fmt.Sprintf("\"%v\" is not greater than or equal to \"%v\"", e1, e2) + return compareTwoValues(t, e1, e2, []compareResult{compareGreater, compareEqual}, failMessage, msgAndArgs...) } // Less asserts that the first element is less than the second @@ -406,7 +417,8 @@ func Less(t TestingT, e1 interface{}, e2 interface{}, msgAndArgs ...interface{}) if h, ok := t.(tHelper); ok { h.Helper() } - return compareTwoValues(t, e1, e2, []CompareType{compareLess}, "\"%v\" is not less than \"%v\"", msgAndArgs...) + failMessage := fmt.Sprintf("\"%v\" is not less than \"%v\"", e1, e2) + return compareTwoValues(t, e1, e2, []compareResult{compareLess}, failMessage, msgAndArgs...) } // LessOrEqual asserts that the first element is less than or equal to the second @@ -419,7 +431,8 @@ func LessOrEqual(t TestingT, e1 interface{}, e2 interface{}, msgAndArgs ...inter if h, ok := t.(tHelper); ok { h.Helper() } - return compareTwoValues(t, e1, e2, []CompareType{compareLess, compareEqual}, "\"%v\" is not less than or equal to \"%v\"", msgAndArgs...) + failMessage := fmt.Sprintf("\"%v\" is not less than or equal to \"%v\"", e1, e2) + return compareTwoValues(t, e1, e2, []compareResult{compareLess, compareEqual}, failMessage, msgAndArgs...) } // Positive asserts that the specified element is positive @@ -431,7 +444,8 @@ func Positive(t TestingT, e interface{}, msgAndArgs ...interface{}) bool { h.Helper() } zero := reflect.Zero(reflect.TypeOf(e)) - return compareTwoValues(t, e, zero.Interface(), []CompareType{compareGreater}, "\"%v\" is not positive", msgAndArgs...) + failMessage := fmt.Sprintf("\"%v\" is not positive", e) + return compareTwoValues(t, e, zero.Interface(), []compareResult{compareGreater}, failMessage, msgAndArgs...) } // Negative asserts that the specified element is negative @@ -443,10 +457,11 @@ func Negative(t TestingT, e interface{}, msgAndArgs ...interface{}) bool { h.Helper() } zero := reflect.Zero(reflect.TypeOf(e)) - return compareTwoValues(t, e, zero.Interface(), []CompareType{compareLess}, "\"%v\" is not negative", msgAndArgs...) + failMessage := fmt.Sprintf("\"%v\" is not negative", e) + return compareTwoValues(t, e, zero.Interface(), []compareResult{compareLess}, failMessage, msgAndArgs...) } -func compareTwoValues(t TestingT, e1 interface{}, e2 interface{}, allowedComparesResults []CompareType, failMessage string, msgAndArgs ...interface{}) bool { +func compareTwoValues(t TestingT, e1 interface{}, e2 interface{}, allowedComparesResults []compareResult, failMessage string, msgAndArgs ...interface{}) bool { if h, ok := t.(tHelper); ok { h.Helper() } @@ -459,17 +474,17 @@ func compareTwoValues(t TestingT, e1 interface{}, e2 interface{}, allowedCompare compareResult, isComparable := compare(e1, e2, e1Kind) if !isComparable { - return Fail(t, fmt.Sprintf("Can not compare type \"%s\"", reflect.TypeOf(e1)), msgAndArgs...) + return Fail(t, fmt.Sprintf(`Can not compare type "%T"`, e1), msgAndArgs...) } if !containsValue(allowedComparesResults, compareResult) { - return Fail(t, fmt.Sprintf(failMessage, e1, e2), msgAndArgs...) + return Fail(t, failMessage, msgAndArgs...) } return true } -func containsValue(values []CompareType, value CompareType) bool { +func containsValue(values []compareResult, value compareResult) bool { for _, v := range values { if v == value { return true diff --git a/vendor/github.com/stretchr/testify/assert/assertion_format.go b/vendor/github.com/stretchr/testify/assert/assertion_format.go index 3ddab109ad..c592f6ad5f 100644 --- a/vendor/github.com/stretchr/testify/assert/assertion_format.go +++ b/vendor/github.com/stretchr/testify/assert/assertion_format.go @@ -50,10 +50,19 @@ func ElementsMatchf(t TestingT, listA interface{}, listB interface{}, msg string return ElementsMatch(t, listA, listB, append([]interface{}{msg}, args...)...) } -// Emptyf asserts that the specified object is empty. I.e. nil, "", false, 0 or either -// a slice or a channel with len == 0. +// Emptyf asserts that the given value is "empty". +// +// [Zero values] are "empty". +// +// Arrays are "empty" if every element is the zero value of the type (stricter than "empty"). +// +// Slices, maps and channels with zero length are "empty". +// +// Pointer values are "empty" if the pointer is nil or if the pointed value is "empty". // // assert.Emptyf(t, obj, "error message %s", "formatted") +// +// [Zero values]: https://go.dev/ref/spec#The_zero_value func Emptyf(t TestingT, object interface{}, msg string, args ...interface{}) bool { if h, ok := t.(tHelper); ok { h.Helper() @@ -104,8 +113,8 @@ func EqualExportedValuesf(t TestingT, expected interface{}, actual interface{}, return EqualExportedValues(t, expected, actual, append([]interface{}{msg}, args...)...) } -// EqualValuesf asserts that two objects are equal or convertible to the same types -// and equal. +// EqualValuesf asserts that two objects are equal or convertible to the larger +// type and equal. // // assert.EqualValuesf(t, uint32(123), int32(123), "error message %s", "formatted") func EqualValuesf(t TestingT, expected interface{}, actual interface{}, msg string, args ...interface{}) bool { @@ -117,10 +126,8 @@ func EqualValuesf(t TestingT, expected interface{}, actual interface{}, msg stri // Errorf asserts that a function returned an error (i.e. not `nil`). // -// actualObj, err := SomeFunction() -// if assert.Errorf(t, err, "error message %s", "formatted") { -// assert.Equal(t, expectedErrorf, err) -// } +// actualObj, err := SomeFunction() +// assert.Errorf(t, err, "error message %s", "formatted") func Errorf(t TestingT, err error, msg string, args ...interface{}) bool { if h, ok := t.(tHelper); ok { h.Helper() @@ -186,7 +193,7 @@ func Eventuallyf(t TestingT, condition func() bool, waitFor time.Duration, tick // assert.EventuallyWithTf(t, func(c *assert.CollectT, "error message %s", "formatted") { // // add assertions as needed; any assertion failure will fail the current tick // assert.True(c, externalValue, "expected 'externalValue' to be true") -// }, 1*time.Second, 10*time.Second, "external state has not changed to 'true'; still false") +// }, 10*time.Second, 1*time.Second, "external state has not changed to 'true'; still false") func EventuallyWithTf(t TestingT, condition func(collect *CollectT), waitFor time.Duration, tick time.Duration, msg string, args ...interface{}) bool { if h, ok := t.(tHelper); ok { h.Helper() @@ -438,7 +445,19 @@ func IsNonIncreasingf(t TestingT, object interface{}, msg string, args ...interf return IsNonIncreasing(t, object, append([]interface{}{msg}, args...)...) } +// IsNotTypef asserts that the specified objects are not of the same type. +// +// assert.IsNotTypef(t, &NotMyStruct{}, &MyStruct{}, "error message %s", "formatted") +func IsNotTypef(t TestingT, theType interface{}, object interface{}, msg string, args ...interface{}) bool { + if h, ok := t.(tHelper); ok { + h.Helper() + } + return IsNotType(t, theType, object, append([]interface{}{msg}, args...)...) +} + // IsTypef asserts that the specified objects are of the same type. +// +// assert.IsTypef(t, &MyStruct{}, &MyStruct{}, "error message %s", "formatted") func IsTypef(t TestingT, expectedType interface{}, object interface{}, msg string, args ...interface{}) bool { if h, ok := t.(tHelper); ok { h.Helper() @@ -568,8 +587,24 @@ func NotContainsf(t TestingT, s interface{}, contains interface{}, msg string, a return NotContains(t, s, contains, append([]interface{}{msg}, args...)...) } -// NotEmptyf asserts that the specified object is NOT empty. I.e. not nil, "", false, 0 or either -// a slice or a channel with len == 0. +// NotElementsMatchf asserts that the specified listA(array, slice...) is NOT equal to specified +// listB(array, slice...) ignoring the order of the elements. If there are duplicate elements, +// the number of appearances of each of them in both lists should not match. +// This is an inverse of ElementsMatch. +// +// assert.NotElementsMatchf(t, [1, 1, 2, 3], [1, 1, 2, 3], "error message %s", "formatted") -> false +// +// assert.NotElementsMatchf(t, [1, 1, 2, 3], [1, 2, 3], "error message %s", "formatted") -> true +// +// assert.NotElementsMatchf(t, [1, 2, 3], [1, 2, 4], "error message %s", "formatted") -> true +func NotElementsMatchf(t TestingT, listA interface{}, listB interface{}, msg string, args ...interface{}) bool { + if h, ok := t.(tHelper); ok { + h.Helper() + } + return NotElementsMatch(t, listA, listB, append([]interface{}{msg}, args...)...) +} + +// NotEmptyf asserts that the specified object is NOT [Empty]. // // if assert.NotEmptyf(t, obj, "error message %s", "formatted") { // assert.Equal(t, "two", obj[1]) @@ -604,7 +639,16 @@ func NotEqualValuesf(t TestingT, expected interface{}, actual interface{}, msg s return NotEqualValues(t, expected, actual, append([]interface{}{msg}, args...)...) } -// NotErrorIsf asserts that at none of the errors in err's chain matches target. +// NotErrorAsf asserts that none of the errors in err's chain matches target, +// but if so, sets target to that error value. +func NotErrorAsf(t TestingT, err error, target interface{}, msg string, args ...interface{}) bool { + if h, ok := t.(tHelper); ok { + h.Helper() + } + return NotErrorAs(t, err, target, append([]interface{}{msg}, args...)...) +} + +// NotErrorIsf asserts that none of the errors in err's chain matches target. // This is a wrapper for errors.Is. func NotErrorIsf(t TestingT, err error, target error, msg string, args ...interface{}) bool { if h, ok := t.(tHelper); ok { @@ -667,12 +711,15 @@ func NotSamef(t TestingT, expected interface{}, actual interface{}, msg string, return NotSame(t, expected, actual, append([]interface{}{msg}, args...)...) } -// NotSubsetf asserts that the specified list(array, slice...) or map does NOT -// contain all elements given in the specified subset list(array, slice...) or -// map. +// NotSubsetf asserts that the list (array, slice, or map) does NOT contain all +// elements given in the subset (array, slice, or map). +// Map elements are key-value pairs unless compared with an array or slice where +// only the map key is evaluated. // // assert.NotSubsetf(t, [1, 3, 4], [1, 2], "error message %s", "formatted") // assert.NotSubsetf(t, {"x": 1, "y": 2}, {"z": 3}, "error message %s", "formatted") +// assert.NotSubsetf(t, [1, 3, 4], {1: "one", 2: "two"}, "error message %s", "formatted") +// assert.NotSubsetf(t, {"x": 1, "y": 2}, ["z"], "error message %s", "formatted") func NotSubsetf(t TestingT, list interface{}, subset interface{}, msg string, args ...interface{}) bool { if h, ok := t.(tHelper); ok { h.Helper() @@ -756,11 +803,15 @@ func Samef(t TestingT, expected interface{}, actual interface{}, msg string, arg return Same(t, expected, actual, append([]interface{}{msg}, args...)...) } -// Subsetf asserts that the specified list(array, slice...) or map contains all -// elements given in the specified subset list(array, slice...) or map. +// Subsetf asserts that the list (array, slice, or map) contains all elements +// given in the subset (array, slice, or map). +// Map elements are key-value pairs unless compared with an array or slice where +// only the map key is evaluated. // // assert.Subsetf(t, [1, 2, 3], [1, 2], "error message %s", "formatted") // assert.Subsetf(t, {"x": 1, "y": 2}, {"x": 1}, "error message %s", "formatted") +// assert.Subsetf(t, [1, 2, 3], {1: "one", 2: "two"}, "error message %s", "formatted") +// assert.Subsetf(t, {"x": 1, "y": 2}, ["x"], "error message %s", "formatted") func Subsetf(t TestingT, list interface{}, subset interface{}, msg string, args ...interface{}) bool { if h, ok := t.(tHelper); ok { h.Helper() diff --git a/vendor/github.com/stretchr/testify/assert/assertion_forward.go b/vendor/github.com/stretchr/testify/assert/assertion_forward.go index a84e09bd40..58db928450 100644 --- a/vendor/github.com/stretchr/testify/assert/assertion_forward.go +++ b/vendor/github.com/stretchr/testify/assert/assertion_forward.go @@ -92,10 +92,19 @@ func (a *Assertions) ElementsMatchf(listA interface{}, listB interface{}, msg st return ElementsMatchf(a.t, listA, listB, msg, args...) } -// Empty asserts that the specified object is empty. I.e. nil, "", false, 0 or either -// a slice or a channel with len == 0. +// Empty asserts that the given value is "empty". +// +// [Zero values] are "empty". +// +// Arrays are "empty" if every element is the zero value of the type (stricter than "empty"). +// +// Slices, maps and channels with zero length are "empty". +// +// Pointer values are "empty" if the pointer is nil or if the pointed value is "empty". // // a.Empty(obj) +// +// [Zero values]: https://go.dev/ref/spec#The_zero_value func (a *Assertions) Empty(object interface{}, msgAndArgs ...interface{}) bool { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -103,10 +112,19 @@ func (a *Assertions) Empty(object interface{}, msgAndArgs ...interface{}) bool { return Empty(a.t, object, msgAndArgs...) } -// Emptyf asserts that the specified object is empty. I.e. nil, "", false, 0 or either -// a slice or a channel with len == 0. +// Emptyf asserts that the given value is "empty". +// +// [Zero values] are "empty". +// +// Arrays are "empty" if every element is the zero value of the type (stricter than "empty"). +// +// Slices, maps and channels with zero length are "empty". +// +// Pointer values are "empty" if the pointer is nil or if the pointed value is "empty". // // a.Emptyf(obj, "error message %s", "formatted") +// +// [Zero values]: https://go.dev/ref/spec#The_zero_value func (a *Assertions) Emptyf(object interface{}, msg string, args ...interface{}) bool { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -186,8 +204,8 @@ func (a *Assertions) EqualExportedValuesf(expected interface{}, actual interface return EqualExportedValuesf(a.t, expected, actual, msg, args...) } -// EqualValues asserts that two objects are equal or convertible to the same types -// and equal. +// EqualValues asserts that two objects are equal or convertible to the larger +// type and equal. // // a.EqualValues(uint32(123), int32(123)) func (a *Assertions) EqualValues(expected interface{}, actual interface{}, msgAndArgs ...interface{}) bool { @@ -197,8 +215,8 @@ func (a *Assertions) EqualValues(expected interface{}, actual interface{}, msgAn return EqualValues(a.t, expected, actual, msgAndArgs...) } -// EqualValuesf asserts that two objects are equal or convertible to the same types -// and equal. +// EqualValuesf asserts that two objects are equal or convertible to the larger +// type and equal. // // a.EqualValuesf(uint32(123), int32(123), "error message %s", "formatted") func (a *Assertions) EqualValuesf(expected interface{}, actual interface{}, msg string, args ...interface{}) bool { @@ -224,10 +242,8 @@ func (a *Assertions) Equalf(expected interface{}, actual interface{}, msg string // Error asserts that a function returned an error (i.e. not `nil`). // -// actualObj, err := SomeFunction() -// if a.Error(err) { -// assert.Equal(t, expectedError, err) -// } +// actualObj, err := SomeFunction() +// a.Error(err) func (a *Assertions) Error(err error, msgAndArgs ...interface{}) bool { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -297,10 +313,8 @@ func (a *Assertions) ErrorIsf(err error, target error, msg string, args ...inter // Errorf asserts that a function returned an error (i.e. not `nil`). // -// actualObj, err := SomeFunction() -// if a.Errorf(err, "error message %s", "formatted") { -// assert.Equal(t, expectedErrorf, err) -// } +// actualObj, err := SomeFunction() +// a.Errorf(err, "error message %s", "formatted") func (a *Assertions) Errorf(err error, msg string, args ...interface{}) bool { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -336,7 +350,7 @@ func (a *Assertions) Eventually(condition func() bool, waitFor time.Duration, ti // a.EventuallyWithT(func(c *assert.CollectT) { // // add assertions as needed; any assertion failure will fail the current tick // assert.True(c, externalValue, "expected 'externalValue' to be true") -// }, 1*time.Second, 10*time.Second, "external state has not changed to 'true'; still false") +// }, 10*time.Second, 1*time.Second, "external state has not changed to 'true'; still false") func (a *Assertions) EventuallyWithT(condition func(collect *CollectT), waitFor time.Duration, tick time.Duration, msgAndArgs ...interface{}) bool { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -361,7 +375,7 @@ func (a *Assertions) EventuallyWithT(condition func(collect *CollectT), waitFor // a.EventuallyWithTf(func(c *assert.CollectT, "error message %s", "formatted") { // // add assertions as needed; any assertion failure will fail the current tick // assert.True(c, externalValue, "expected 'externalValue' to be true") -// }, 1*time.Second, 10*time.Second, "external state has not changed to 'true'; still false") +// }, 10*time.Second, 1*time.Second, "external state has not changed to 'true'; still false") func (a *Assertions) EventuallyWithTf(condition func(collect *CollectT), waitFor time.Duration, tick time.Duration, msg string, args ...interface{}) bool { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -868,7 +882,29 @@ func (a *Assertions) IsNonIncreasingf(object interface{}, msg string, args ...in return IsNonIncreasingf(a.t, object, msg, args...) } +// IsNotType asserts that the specified objects are not of the same type. +// +// a.IsNotType(&NotMyStruct{}, &MyStruct{}) +func (a *Assertions) IsNotType(theType interface{}, object interface{}, msgAndArgs ...interface{}) bool { + if h, ok := a.t.(tHelper); ok { + h.Helper() + } + return IsNotType(a.t, theType, object, msgAndArgs...) +} + +// IsNotTypef asserts that the specified objects are not of the same type. +// +// a.IsNotTypef(&NotMyStruct{}, &MyStruct{}, "error message %s", "formatted") +func (a *Assertions) IsNotTypef(theType interface{}, object interface{}, msg string, args ...interface{}) bool { + if h, ok := a.t.(tHelper); ok { + h.Helper() + } + return IsNotTypef(a.t, theType, object, msg, args...) +} + // IsType asserts that the specified objects are of the same type. +// +// a.IsType(&MyStruct{}, &MyStruct{}) func (a *Assertions) IsType(expectedType interface{}, object interface{}, msgAndArgs ...interface{}) bool { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -877,6 +913,8 @@ func (a *Assertions) IsType(expectedType interface{}, object interface{}, msgAnd } // IsTypef asserts that the specified objects are of the same type. +// +// a.IsTypef(&MyStruct{}, &MyStruct{}, "error message %s", "formatted") func (a *Assertions) IsTypef(expectedType interface{}, object interface{}, msg string, args ...interface{}) bool { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -1128,8 +1166,41 @@ func (a *Assertions) NotContainsf(s interface{}, contains interface{}, msg strin return NotContainsf(a.t, s, contains, msg, args...) } -// NotEmpty asserts that the specified object is NOT empty. I.e. not nil, "", false, 0 or either -// a slice or a channel with len == 0. +// NotElementsMatch asserts that the specified listA(array, slice...) is NOT equal to specified +// listB(array, slice...) ignoring the order of the elements. If there are duplicate elements, +// the number of appearances of each of them in both lists should not match. +// This is an inverse of ElementsMatch. +// +// a.NotElementsMatch([1, 1, 2, 3], [1, 1, 2, 3]) -> false +// +// a.NotElementsMatch([1, 1, 2, 3], [1, 2, 3]) -> true +// +// a.NotElementsMatch([1, 2, 3], [1, 2, 4]) -> true +func (a *Assertions) NotElementsMatch(listA interface{}, listB interface{}, msgAndArgs ...interface{}) bool { + if h, ok := a.t.(tHelper); ok { + h.Helper() + } + return NotElementsMatch(a.t, listA, listB, msgAndArgs...) +} + +// NotElementsMatchf asserts that the specified listA(array, slice...) is NOT equal to specified +// listB(array, slice...) ignoring the order of the elements. If there are duplicate elements, +// the number of appearances of each of them in both lists should not match. +// This is an inverse of ElementsMatch. +// +// a.NotElementsMatchf([1, 1, 2, 3], [1, 1, 2, 3], "error message %s", "formatted") -> false +// +// a.NotElementsMatchf([1, 1, 2, 3], [1, 2, 3], "error message %s", "formatted") -> true +// +// a.NotElementsMatchf([1, 2, 3], [1, 2, 4], "error message %s", "formatted") -> true +func (a *Assertions) NotElementsMatchf(listA interface{}, listB interface{}, msg string, args ...interface{}) bool { + if h, ok := a.t.(tHelper); ok { + h.Helper() + } + return NotElementsMatchf(a.t, listA, listB, msg, args...) +} + +// NotEmpty asserts that the specified object is NOT [Empty]. // // if a.NotEmpty(obj) { // assert.Equal(t, "two", obj[1]) @@ -1141,8 +1212,7 @@ func (a *Assertions) NotEmpty(object interface{}, msgAndArgs ...interface{}) boo return NotEmpty(a.t, object, msgAndArgs...) } -// NotEmptyf asserts that the specified object is NOT empty. I.e. not nil, "", false, 0 or either -// a slice or a channel with len == 0. +// NotEmptyf asserts that the specified object is NOT [Empty]. // // if a.NotEmptyf(obj, "error message %s", "formatted") { // assert.Equal(t, "two", obj[1]) @@ -1200,7 +1270,25 @@ func (a *Assertions) NotEqualf(expected interface{}, actual interface{}, msg str return NotEqualf(a.t, expected, actual, msg, args...) } -// NotErrorIs asserts that at none of the errors in err's chain matches target. +// NotErrorAs asserts that none of the errors in err's chain matches target, +// but if so, sets target to that error value. +func (a *Assertions) NotErrorAs(err error, target interface{}, msgAndArgs ...interface{}) bool { + if h, ok := a.t.(tHelper); ok { + h.Helper() + } + return NotErrorAs(a.t, err, target, msgAndArgs...) +} + +// NotErrorAsf asserts that none of the errors in err's chain matches target, +// but if so, sets target to that error value. +func (a *Assertions) NotErrorAsf(err error, target interface{}, msg string, args ...interface{}) bool { + if h, ok := a.t.(tHelper); ok { + h.Helper() + } + return NotErrorAsf(a.t, err, target, msg, args...) +} + +// NotErrorIs asserts that none of the errors in err's chain matches target. // This is a wrapper for errors.Is. func (a *Assertions) NotErrorIs(err error, target error, msgAndArgs ...interface{}) bool { if h, ok := a.t.(tHelper); ok { @@ -1209,7 +1297,7 @@ func (a *Assertions) NotErrorIs(err error, target error, msgAndArgs ...interface return NotErrorIs(a.t, err, target, msgAndArgs...) } -// NotErrorIsf asserts that at none of the errors in err's chain matches target. +// NotErrorIsf asserts that none of the errors in err's chain matches target. // This is a wrapper for errors.Is. func (a *Assertions) NotErrorIsf(err error, target error, msg string, args ...interface{}) bool { if h, ok := a.t.(tHelper); ok { @@ -1326,12 +1414,15 @@ func (a *Assertions) NotSamef(expected interface{}, actual interface{}, msg stri return NotSamef(a.t, expected, actual, msg, args...) } -// NotSubset asserts that the specified list(array, slice...) or map does NOT -// contain all elements given in the specified subset list(array, slice...) or -// map. +// NotSubset asserts that the list (array, slice, or map) does NOT contain all +// elements given in the subset (array, slice, or map). +// Map elements are key-value pairs unless compared with an array or slice where +// only the map key is evaluated. // // a.NotSubset([1, 3, 4], [1, 2]) // a.NotSubset({"x": 1, "y": 2}, {"z": 3}) +// a.NotSubset([1, 3, 4], {1: "one", 2: "two"}) +// a.NotSubset({"x": 1, "y": 2}, ["z"]) func (a *Assertions) NotSubset(list interface{}, subset interface{}, msgAndArgs ...interface{}) bool { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -1339,12 +1430,15 @@ func (a *Assertions) NotSubset(list interface{}, subset interface{}, msgAndArgs return NotSubset(a.t, list, subset, msgAndArgs...) } -// NotSubsetf asserts that the specified list(array, slice...) or map does NOT -// contain all elements given in the specified subset list(array, slice...) or -// map. +// NotSubsetf asserts that the list (array, slice, or map) does NOT contain all +// elements given in the subset (array, slice, or map). +// Map elements are key-value pairs unless compared with an array or slice where +// only the map key is evaluated. // // a.NotSubsetf([1, 3, 4], [1, 2], "error message %s", "formatted") // a.NotSubsetf({"x": 1, "y": 2}, {"z": 3}, "error message %s", "formatted") +// a.NotSubsetf([1, 3, 4], {1: "one", 2: "two"}, "error message %s", "formatted") +// a.NotSubsetf({"x": 1, "y": 2}, ["z"], "error message %s", "formatted") func (a *Assertions) NotSubsetf(list interface{}, subset interface{}, msg string, args ...interface{}) bool { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -1504,11 +1598,15 @@ func (a *Assertions) Samef(expected interface{}, actual interface{}, msg string, return Samef(a.t, expected, actual, msg, args...) } -// Subset asserts that the specified list(array, slice...) or map contains all -// elements given in the specified subset list(array, slice...) or map. +// Subset asserts that the list (array, slice, or map) contains all elements +// given in the subset (array, slice, or map). +// Map elements are key-value pairs unless compared with an array or slice where +// only the map key is evaluated. // // a.Subset([1, 2, 3], [1, 2]) // a.Subset({"x": 1, "y": 2}, {"x": 1}) +// a.Subset([1, 2, 3], {1: "one", 2: "two"}) +// a.Subset({"x": 1, "y": 2}, ["x"]) func (a *Assertions) Subset(list interface{}, subset interface{}, msgAndArgs ...interface{}) bool { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -1516,11 +1614,15 @@ func (a *Assertions) Subset(list interface{}, subset interface{}, msgAndArgs ... return Subset(a.t, list, subset, msgAndArgs...) } -// Subsetf asserts that the specified list(array, slice...) or map contains all -// elements given in the specified subset list(array, slice...) or map. +// Subsetf asserts that the list (array, slice, or map) contains all elements +// given in the subset (array, slice, or map). +// Map elements are key-value pairs unless compared with an array or slice where +// only the map key is evaluated. // // a.Subsetf([1, 2, 3], [1, 2], "error message %s", "formatted") // a.Subsetf({"x": 1, "y": 2}, {"x": 1}, "error message %s", "formatted") +// a.Subsetf([1, 2, 3], {1: "one", 2: "two"}, "error message %s", "formatted") +// a.Subsetf({"x": 1, "y": 2}, ["x"], "error message %s", "formatted") func (a *Assertions) Subsetf(list interface{}, subset interface{}, msg string, args ...interface{}) bool { if h, ok := a.t.(tHelper); ok { h.Helper() diff --git a/vendor/github.com/stretchr/testify/assert/assertion_order.go b/vendor/github.com/stretchr/testify/assert/assertion_order.go index 00df62a059..2fdf80fdd3 100644 --- a/vendor/github.com/stretchr/testify/assert/assertion_order.go +++ b/vendor/github.com/stretchr/testify/assert/assertion_order.go @@ -6,7 +6,7 @@ import ( ) // isOrdered checks that collection contains orderable elements. -func isOrdered(t TestingT, object interface{}, allowedComparesResults []CompareType, failMessage string, msgAndArgs ...interface{}) bool { +func isOrdered(t TestingT, object interface{}, allowedComparesResults []compareResult, failMessage string, msgAndArgs ...interface{}) bool { objKind := reflect.TypeOf(object).Kind() if objKind != reflect.Slice && objKind != reflect.Array { return false @@ -33,7 +33,7 @@ func isOrdered(t TestingT, object interface{}, allowedComparesResults []CompareT compareResult, isComparable := compare(prevValueInterface, valueInterface, firstValueKind) if !isComparable { - return Fail(t, fmt.Sprintf("Can not compare type \"%s\" and \"%s\"", reflect.TypeOf(value), reflect.TypeOf(prevValue)), msgAndArgs...) + return Fail(t, fmt.Sprintf(`Can not compare type "%T" and "%T"`, value, prevValue), msgAndArgs...) } if !containsValue(allowedComparesResults, compareResult) { @@ -50,7 +50,7 @@ func isOrdered(t TestingT, object interface{}, allowedComparesResults []CompareT // assert.IsIncreasing(t, []float{1, 2}) // assert.IsIncreasing(t, []string{"a", "b"}) func IsIncreasing(t TestingT, object interface{}, msgAndArgs ...interface{}) bool { - return isOrdered(t, object, []CompareType{compareLess}, "\"%v\" is not less than \"%v\"", msgAndArgs...) + return isOrdered(t, object, []compareResult{compareLess}, "\"%v\" is not less than \"%v\"", msgAndArgs...) } // IsNonIncreasing asserts that the collection is not increasing @@ -59,7 +59,7 @@ func IsIncreasing(t TestingT, object interface{}, msgAndArgs ...interface{}) boo // assert.IsNonIncreasing(t, []float{2, 1}) // assert.IsNonIncreasing(t, []string{"b", "a"}) func IsNonIncreasing(t TestingT, object interface{}, msgAndArgs ...interface{}) bool { - return isOrdered(t, object, []CompareType{compareEqual, compareGreater}, "\"%v\" is not greater than or equal to \"%v\"", msgAndArgs...) + return isOrdered(t, object, []compareResult{compareEqual, compareGreater}, "\"%v\" is not greater than or equal to \"%v\"", msgAndArgs...) } // IsDecreasing asserts that the collection is decreasing @@ -68,7 +68,7 @@ func IsNonIncreasing(t TestingT, object interface{}, msgAndArgs ...interface{}) // assert.IsDecreasing(t, []float{2, 1}) // assert.IsDecreasing(t, []string{"b", "a"}) func IsDecreasing(t TestingT, object interface{}, msgAndArgs ...interface{}) bool { - return isOrdered(t, object, []CompareType{compareGreater}, "\"%v\" is not greater than \"%v\"", msgAndArgs...) + return isOrdered(t, object, []compareResult{compareGreater}, "\"%v\" is not greater than \"%v\"", msgAndArgs...) } // IsNonDecreasing asserts that the collection is not decreasing @@ -77,5 +77,5 @@ func IsDecreasing(t TestingT, object interface{}, msgAndArgs ...interface{}) boo // assert.IsNonDecreasing(t, []float{1, 2}) // assert.IsNonDecreasing(t, []string{"a", "b"}) func IsNonDecreasing(t TestingT, object interface{}, msgAndArgs ...interface{}) bool { - return isOrdered(t, object, []CompareType{compareLess, compareEqual}, "\"%v\" is not less than or equal to \"%v\"", msgAndArgs...) + return isOrdered(t, object, []compareResult{compareLess, compareEqual}, "\"%v\" is not less than or equal to \"%v\"", msgAndArgs...) } diff --git a/vendor/github.com/stretchr/testify/assert/assertions.go b/vendor/github.com/stretchr/testify/assert/assertions.go index 0b7570f21c..de8de0cb6c 100644 --- a/vendor/github.com/stretchr/testify/assert/assertions.go +++ b/vendor/github.com/stretchr/testify/assert/assertions.go @@ -19,7 +19,9 @@ import ( "github.com/davecgh/go-spew/spew" "github.com/pmezard/go-difflib/difflib" - "gopkg.in/yaml.v3" + + // Wrapper around gopkg.in/yaml.v3 + "github.com/stretchr/testify/assert/yaml" ) //go:generate sh -c "cd ../_codegen && go build && cd - && ../_codegen/_codegen -output-package=assert -template=assertion_format.go.tmpl" @@ -45,6 +47,10 @@ type BoolAssertionFunc func(TestingT, bool, ...interface{}) bool // for table driven tests. type ErrorAssertionFunc func(TestingT, error, ...interface{}) bool +// PanicAssertionFunc is a common function prototype when validating a panic value. Can be useful +// for table driven tests. +type PanicAssertionFunc = func(t TestingT, f PanicTestFunc, msgAndArgs ...interface{}) bool + // Comparison is a custom function that returns true on success and false on failure type Comparison func() (success bool) @@ -204,59 +210,77 @@ the problem actually occurred in calling code.*/ // of each stack frame leading from the current test to the assert call that // failed. func CallerInfo() []string { - var pc uintptr - var ok bool var file string var line int var name string + const stackFrameBufferSize = 10 + pcs := make([]uintptr, stackFrameBufferSize) + callers := []string{} - for i := 0; ; i++ { - pc, file, line, ok = runtime.Caller(i) - if !ok { - // The breaks below failed to terminate the loop, and we ran off the - // end of the call stack. - break - } + offset := 1 - // This is a huge edge case, but it will panic if this is the case, see #180 - if file == "" { - break - } + for { + n := runtime.Callers(offset, pcs) - f := runtime.FuncForPC(pc) - if f == nil { - break - } - name = f.Name() - - // testing.tRunner is the standard library function that calls - // tests. Subtests are called directly by tRunner, without going through - // the Test/Benchmark/Example function that contains the t.Run calls, so - // with subtests we should break when we hit tRunner, without adding it - // to the list of callers. - if name == "testing.tRunner" { + if n == 0 { break } - parts := strings.Split(file, "/") - if len(parts) > 1 { - filename := parts[len(parts)-1] - dir := parts[len(parts)-2] - if (dir != "assert" && dir != "mock" && dir != "require") || filename == "mock_test.go" { - callers = append(callers, fmt.Sprintf("%s:%d", file, line)) + frames := runtime.CallersFrames(pcs[:n]) + + for { + frame, more := frames.Next() + pc = frame.PC + file = frame.File + line = frame.Line + + // This is a huge edge case, but it will panic if this is the case, see #180 + if file == "" { + break } - } - // Drop the package - segments := strings.Split(name, ".") - name = segments[len(segments)-1] - if isTest(name, "Test") || - isTest(name, "Benchmark") || - isTest(name, "Example") { - break + f := runtime.FuncForPC(pc) + if f == nil { + break + } + name = f.Name() + + // testing.tRunner is the standard library function that calls + // tests. Subtests are called directly by tRunner, without going through + // the Test/Benchmark/Example function that contains the t.Run calls, so + // with subtests we should break when we hit tRunner, without adding it + // to the list of callers. + if name == "testing.tRunner" { + break + } + + parts := strings.Split(file, "/") + if len(parts) > 1 { + filename := parts[len(parts)-1] + dir := parts[len(parts)-2] + if (dir != "assert" && dir != "mock" && dir != "require") || filename == "mock_test.go" { + callers = append(callers, fmt.Sprintf("%s:%d", file, line)) + } + } + + // Drop the package + dotPos := strings.LastIndexByte(name, '.') + name = name[dotPos+1:] + if isTest(name, "Test") || + isTest(name, "Benchmark") || + isTest(name, "Example") { + break + } + + if !more { + break + } } + + // Next batch + offset += cap(pcs) } return callers @@ -431,17 +455,34 @@ func NotImplements(t TestingT, interfaceObject interface{}, object interface{}, return true } +func isType(expectedType, object interface{}) bool { + return ObjectsAreEqual(reflect.TypeOf(object), reflect.TypeOf(expectedType)) +} + // IsType asserts that the specified objects are of the same type. -func IsType(t TestingT, expectedType interface{}, object interface{}, msgAndArgs ...interface{}) bool { +// +// assert.IsType(t, &MyStruct{}, &MyStruct{}) +func IsType(t TestingT, expectedType, object interface{}, msgAndArgs ...interface{}) bool { + if isType(expectedType, object) { + return true + } if h, ok := t.(tHelper); ok { h.Helper() } + return Fail(t, fmt.Sprintf("Object expected to be of type %T, but was %T", expectedType, object), msgAndArgs...) +} - if !ObjectsAreEqual(reflect.TypeOf(object), reflect.TypeOf(expectedType)) { - return Fail(t, fmt.Sprintf("Object expected to be of type %v, but was %v", reflect.TypeOf(expectedType), reflect.TypeOf(object)), msgAndArgs...) +// IsNotType asserts that the specified objects are not of the same type. +// +// assert.IsNotType(t, &NotMyStruct{}, &MyStruct{}) +func IsNotType(t TestingT, theType, object interface{}, msgAndArgs ...interface{}) bool { + if !isType(theType, object) { + return true } - - return true + if h, ok := t.(tHelper); ok { + h.Helper() + } + return Fail(t, fmt.Sprintf("Object type expected to be different than %T", theType), msgAndArgs...) } // Equal asserts that two objects are equal. @@ -469,7 +510,6 @@ func Equal(t TestingT, expected, actual interface{}, msgAndArgs ...interface{}) } return true - } // validateEqualArgs checks whether provided arguments can be safely used in the @@ -496,10 +536,17 @@ func Same(t TestingT, expected, actual interface{}, msgAndArgs ...interface{}) b h.Helper() } - if !samePointers(expected, actual) { + same, ok := samePointers(expected, actual) + if !ok { + return Fail(t, "Both arguments must be pointers", msgAndArgs...) + } + + if !same { + // both are pointers but not the same type & pointing to the same address return Fail(t, fmt.Sprintf("Not same: \n"+ - "expected: %p %#v\n"+ - "actual : %p %#v", expected, expected, actual, actual), msgAndArgs...) + "expected: %p %#[1]v\n"+ + "actual : %p %#[2]v", + expected, actual), msgAndArgs...) } return true @@ -516,29 +563,37 @@ func NotSame(t TestingT, expected, actual interface{}, msgAndArgs ...interface{} h.Helper() } - if samePointers(expected, actual) { + same, ok := samePointers(expected, actual) + if !ok { + // fails when the arguments are not pointers + return !(Fail(t, "Both arguments must be pointers", msgAndArgs...)) + } + + if same { return Fail(t, fmt.Sprintf( - "Expected and actual point to the same object: %p %#v", - expected, expected), msgAndArgs...) + "Expected and actual point to the same object: %p %#[1]v", + expected), msgAndArgs...) } return true } -// samePointers compares two generic interface objects and returns whether -// they point to the same object -func samePointers(first, second interface{}) bool { +// samePointers checks if two generic interface objects are pointers of the same +// type pointing to the same object. It returns two values: same indicating if +// they are the same type and point to the same object, and ok indicating that +// both inputs are pointers. +func samePointers(first, second interface{}) (same bool, ok bool) { firstPtr, secondPtr := reflect.ValueOf(first), reflect.ValueOf(second) if firstPtr.Kind() != reflect.Ptr || secondPtr.Kind() != reflect.Ptr { - return false + return false, false // not both are pointers } firstType, secondType := reflect.TypeOf(first), reflect.TypeOf(second) if firstType != secondType { - return false + return false, true // both are pointers, but of different types } // compare pointer addresses - return first == second + return first == second, true } // formatUnequalValues takes two values of arbitrary types and returns string @@ -572,8 +627,8 @@ func truncatingFormat(data interface{}) string { return value } -// EqualValues asserts that two objects are equal or convertible to the same types -// and equal. +// EqualValues asserts that two objects are equal or convertible to the larger +// type and equal. // // assert.EqualValues(t, uint32(123), int32(123)) func EqualValues(t TestingT, expected, actual interface{}, msgAndArgs ...interface{}) bool { @@ -590,7 +645,6 @@ func EqualValues(t TestingT, expected, actual interface{}, msgAndArgs ...interfa } return true - } // EqualExportedValues asserts that the types of two objects are equal and their public @@ -615,21 +669,6 @@ func EqualExportedValues(t TestingT, expected, actual interface{}, msgAndArgs .. return Fail(t, fmt.Sprintf("Types expected to match exactly\n\t%v != %v", aType, bType), msgAndArgs...) } - if aType.Kind() == reflect.Ptr { - aType = aType.Elem() - } - if bType.Kind() == reflect.Ptr { - bType = bType.Elem() - } - - if aType.Kind() != reflect.Struct { - return Fail(t, fmt.Sprintf("Types expected to both be struct or pointer to struct \n\t%v != %v", aType.Kind(), reflect.Struct), msgAndArgs...) - } - - if bType.Kind() != reflect.Struct { - return Fail(t, fmt.Sprintf("Types expected to both be struct or pointer to struct \n\t%v != %v", bType.Kind(), reflect.Struct), msgAndArgs...) - } - expected = copyExportedFields(expected) actual = copyExportedFields(actual) @@ -660,7 +699,6 @@ func Exactly(t TestingT, expected, actual interface{}, msgAndArgs ...interface{} } return Equal(t, expected, actual, msgAndArgs...) - } // NotNil asserts that the specified object is not nil. @@ -710,37 +748,45 @@ func Nil(t TestingT, object interface{}, msgAndArgs ...interface{}) bool { // isEmpty gets whether the specified object is considered empty or not. func isEmpty(object interface{}) bool { - // get nil case out of the way if object == nil { return true } - objValue := reflect.ValueOf(object) + return isEmptyValue(reflect.ValueOf(object)) +} +// isEmptyValue gets whether the specified reflect.Value is considered empty or not. +func isEmptyValue(objValue reflect.Value) bool { + if objValue.IsZero() { + return true + } + // Special cases of non-zero values that we consider empty switch objValue.Kind() { // collection types are empty when they have no element + // Note: array types are empty when they match their zero-initialized state. case reflect.Chan, reflect.Map, reflect.Slice: return objValue.Len() == 0 - // pointers are empty if nil or if the value they point to is empty + // non-nil pointers are empty if the value they point to is empty case reflect.Ptr: - if objValue.IsNil() { - return true - } - deref := objValue.Elem().Interface() - return isEmpty(deref) - // for all other types, compare against the zero value - // array types are empty when they match their zero-initialized state - default: - zero := reflect.Zero(objValue.Type()) - return reflect.DeepEqual(object, zero.Interface()) + return isEmptyValue(objValue.Elem()) } + return false } -// Empty asserts that the specified object is empty. I.e. nil, "", false, 0 or either -// a slice or a channel with len == 0. +// Empty asserts that the given value is "empty". +// +// [Zero values] are "empty". +// +// Arrays are "empty" if every element is the zero value of the type (stricter than "empty"). +// +// Slices, maps and channels with zero length are "empty". +// +// Pointer values are "empty" if the pointer is nil or if the pointed value is "empty". // // assert.Empty(t, obj) +// +// [Zero values]: https://go.dev/ref/spec#The_zero_value func Empty(t TestingT, object interface{}, msgAndArgs ...interface{}) bool { pass := isEmpty(object) if !pass { @@ -751,11 +797,9 @@ func Empty(t TestingT, object interface{}, msgAndArgs ...interface{}) bool { } return pass - } -// NotEmpty asserts that the specified object is NOT empty. I.e. not nil, "", false, 0 or either -// a slice or a channel with len == 0. +// NotEmpty asserts that the specified object is NOT [Empty]. // // if assert.NotEmpty(t, obj) { // assert.Equal(t, "two", obj[1]) @@ -770,7 +814,6 @@ func NotEmpty(t TestingT, object interface{}, msgAndArgs ...interface{}) bool { } return pass - } // getLen tries to get the length of an object. @@ -814,7 +857,6 @@ func True(t TestingT, value bool, msgAndArgs ...interface{}) bool { } return true - } // False asserts that the specified value is false. @@ -829,7 +871,6 @@ func False(t TestingT, value bool, msgAndArgs ...interface{}) bool { } return true - } // NotEqual asserts that the specified values are NOT equal. @@ -852,7 +893,6 @@ func NotEqual(t TestingT, expected, actual interface{}, msgAndArgs ...interface{ } return true - } // NotEqualValues asserts that two objects are not equal even when converted to the same type @@ -875,7 +915,6 @@ func NotEqualValues(t TestingT, expected, actual interface{}, msgAndArgs ...inte // return (true, false) if element was not found. // return (true, true) if element was found. func containsElement(list interface{}, element interface{}) (ok, found bool) { - listValue := reflect.ValueOf(list) listType := reflect.TypeOf(list) if listType == nil { @@ -910,7 +949,6 @@ func containsElement(list interface{}, element interface{}) (ok, found bool) { } } return true, false - } // Contains asserts that the specified string, list(array, slice...) or map contains the @@ -933,7 +971,6 @@ func Contains(t TestingT, s, contains interface{}, msgAndArgs ...interface{}) bo } return true - } // NotContains asserts that the specified string, list(array, slice...) or map does NOT contain the @@ -956,14 +993,17 @@ func NotContains(t TestingT, s, contains interface{}, msgAndArgs ...interface{}) } return true - } -// Subset asserts that the specified list(array, slice...) or map contains all -// elements given in the specified subset list(array, slice...) or map. +// Subset asserts that the list (array, slice, or map) contains all elements +// given in the subset (array, slice, or map). +// Map elements are key-value pairs unless compared with an array or slice where +// only the map key is evaluated. // // assert.Subset(t, [1, 2, 3], [1, 2]) // assert.Subset(t, {"x": 1, "y": 2}, {"x": 1}) +// assert.Subset(t, [1, 2, 3], {1: "one", 2: "two"}) +// assert.Subset(t, {"x": 1, "y": 2}, ["x"]) func Subset(t TestingT, list, subset interface{}, msgAndArgs ...interface{}) (ok bool) { if h, ok := t.(tHelper); ok { h.Helper() @@ -978,7 +1018,7 @@ func Subset(t TestingT, list, subset interface{}, msgAndArgs ...interface{}) (ok } subsetKind := reflect.TypeOf(subset).Kind() - if subsetKind != reflect.Array && subsetKind != reflect.Slice && listKind != reflect.Map { + if subsetKind != reflect.Array && subsetKind != reflect.Slice && subsetKind != reflect.Map { return Fail(t, fmt.Sprintf("%q has an unsupported type %s", subset, subsetKind), msgAndArgs...) } @@ -1002,6 +1042,13 @@ func Subset(t TestingT, list, subset interface{}, msgAndArgs ...interface{}) (ok } subsetList := reflect.ValueOf(subset) + if subsetKind == reflect.Map { + keys := make([]interface{}, subsetList.Len()) + for idx, key := range subsetList.MapKeys() { + keys[idx] = key.Interface() + } + subsetList = reflect.ValueOf(keys) + } for i := 0; i < subsetList.Len(); i++ { element := subsetList.Index(i).Interface() ok, found := containsElement(list, element) @@ -1016,12 +1063,15 @@ func Subset(t TestingT, list, subset interface{}, msgAndArgs ...interface{}) (ok return true } -// NotSubset asserts that the specified list(array, slice...) or map does NOT -// contain all elements given in the specified subset list(array, slice...) or -// map. +// NotSubset asserts that the list (array, slice, or map) does NOT contain all +// elements given in the subset (array, slice, or map). +// Map elements are key-value pairs unless compared with an array or slice where +// only the map key is evaluated. // // assert.NotSubset(t, [1, 3, 4], [1, 2]) // assert.NotSubset(t, {"x": 1, "y": 2}, {"z": 3}) +// assert.NotSubset(t, [1, 3, 4], {1: "one", 2: "two"}) +// assert.NotSubset(t, {"x": 1, "y": 2}, ["z"]) func NotSubset(t TestingT, list, subset interface{}, msgAndArgs ...interface{}) (ok bool) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1036,7 +1086,7 @@ func NotSubset(t TestingT, list, subset interface{}, msgAndArgs ...interface{}) } subsetKind := reflect.TypeOf(subset).Kind() - if subsetKind != reflect.Array && subsetKind != reflect.Slice && listKind != reflect.Map { + if subsetKind != reflect.Array && subsetKind != reflect.Slice && subsetKind != reflect.Map { return Fail(t, fmt.Sprintf("%q has an unsupported type %s", subset, subsetKind), msgAndArgs...) } @@ -1060,11 +1110,18 @@ func NotSubset(t TestingT, list, subset interface{}, msgAndArgs ...interface{}) } subsetList := reflect.ValueOf(subset) + if subsetKind == reflect.Map { + keys := make([]interface{}, subsetList.Len()) + for idx, key := range subsetList.MapKeys() { + keys[idx] = key.Interface() + } + subsetList = reflect.ValueOf(keys) + } for i := 0; i < subsetList.Len(); i++ { element := subsetList.Index(i).Interface() ok, found := containsElement(list, element) if !ok { - return Fail(t, fmt.Sprintf("\"%s\" could not be applied builtin len()", list), msgAndArgs...) + return Fail(t, fmt.Sprintf("%q could not be applied builtin len()", list), msgAndArgs...) } if !found { return true @@ -1170,6 +1227,39 @@ func formatListDiff(listA, listB interface{}, extraA, extraB []interface{}) stri return msg.String() } +// NotElementsMatch asserts that the specified listA(array, slice...) is NOT equal to specified +// listB(array, slice...) ignoring the order of the elements. If there are duplicate elements, +// the number of appearances of each of them in both lists should not match. +// This is an inverse of ElementsMatch. +// +// assert.NotElementsMatch(t, [1, 1, 2, 3], [1, 1, 2, 3]) -> false +// +// assert.NotElementsMatch(t, [1, 1, 2, 3], [1, 2, 3]) -> true +// +// assert.NotElementsMatch(t, [1, 2, 3], [1, 2, 4]) -> true +func NotElementsMatch(t TestingT, listA, listB interface{}, msgAndArgs ...interface{}) (ok bool) { + if h, ok := t.(tHelper); ok { + h.Helper() + } + if isEmpty(listA) && isEmpty(listB) { + return Fail(t, "listA and listB contain the same elements", msgAndArgs) + } + + if !isList(t, listA, msgAndArgs...) { + return Fail(t, "listA is not a list type", msgAndArgs...) + } + if !isList(t, listB, msgAndArgs...) { + return Fail(t, "listB is not a list type", msgAndArgs...) + } + + extraA, extraB := diffLists(listA, listB) + if len(extraA) == 0 && len(extraB) == 0 { + return Fail(t, "listA and listB contain the same elements", msgAndArgs) + } + + return true +} + // Condition uses a Comparison to assert a complex condition. func Condition(t TestingT, comp Comparison, msgAndArgs ...interface{}) bool { if h, ok := t.(tHelper); ok { @@ -1488,6 +1578,9 @@ func InEpsilon(t TestingT, expected, actual interface{}, epsilon float64, msgAnd if err != nil { return Fail(t, err.Error(), msgAndArgs...) } + if math.IsNaN(actualEpsilon) { + return Fail(t, "relative error is NaN", msgAndArgs...) + } if actualEpsilon > epsilon { return Fail(t, fmt.Sprintf("Relative error is too high: %#v (expected)\n"+ " < %#v (actual)", epsilon, actualEpsilon), msgAndArgs...) @@ -1550,10 +1643,8 @@ func NoError(t TestingT, err error, msgAndArgs ...interface{}) bool { // Error asserts that a function returned an error (i.e. not `nil`). // -// actualObj, err := SomeFunction() -// if assert.Error(t, err) { -// assert.Equal(t, expectedError, err) -// } +// actualObj, err := SomeFunction() +// assert.Error(t, err) func Error(t TestingT, err error, msgAndArgs ...interface{}) bool { if err == nil { if h, ok := t.(tHelper); ok { @@ -1611,7 +1702,6 @@ func ErrorContains(t TestingT, theError error, contains string, msgAndArgs ...in // matchRegexp return true if a specified regexp matches a string. func matchRegexp(rx interface{}, str interface{}) bool { - var r *regexp.Regexp if rr, ok := rx.(*regexp.Regexp); ok { r = rr @@ -1619,8 +1709,14 @@ func matchRegexp(rx interface{}, str interface{}) bool { r = regexp.MustCompile(fmt.Sprint(rx)) } - return (r.FindStringIndex(fmt.Sprint(str)) != nil) - + switch v := str.(type) { + case []byte: + return r.Match(v) + case string: + return r.MatchString(v) + default: + return r.MatchString(fmt.Sprint(v)) + } } // Regexp asserts that a specified regexp matches a string. @@ -1656,7 +1752,6 @@ func NotRegexp(t TestingT, rx interface{}, str interface{}, msgAndArgs ...interf } return !match - } // Zero asserts that i is the zero value for its type. @@ -1767,6 +1862,11 @@ func JSONEq(t TestingT, expected string, actual string, msgAndArgs ...interface{ return Fail(t, fmt.Sprintf("Expected value ('%s') is not valid json.\nJSON parsing error: '%s'", expected, err.Error()), msgAndArgs...) } + // Shortcut if same bytes + if actual == expected { + return true + } + if err := json.Unmarshal([]byte(actual), &actualJSONAsInterface); err != nil { return Fail(t, fmt.Sprintf("Input ('%s') needs to be valid json.\nJSON parsing error: '%s'", actual, err.Error()), msgAndArgs...) } @@ -1785,6 +1885,11 @@ func YAMLEq(t TestingT, expected string, actual string, msgAndArgs ...interface{ return Fail(t, fmt.Sprintf("Expected value ('%s') is not valid yaml.\nYAML parsing error: '%s'", expected, err.Error()), msgAndArgs...) } + // Shortcut if same bytes + if actual == expected { + return true + } + if err := yaml.Unmarshal([]byte(actual), &actualYAMLAsInterface); err != nil { return Fail(t, fmt.Sprintf("Input ('%s') needs to be valid yaml.\nYAML error: '%s'", actual, err.Error()), msgAndArgs...) } @@ -1872,7 +1977,7 @@ var spewConfigStringerEnabled = spew.ConfigState{ MaxDepth: 10, } -type tHelper interface { +type tHelper = interface { Helper() } @@ -1886,6 +1991,7 @@ func Eventually(t TestingT, condition func() bool, waitFor time.Duration, tick t } ch := make(chan bool, 1) + checkCond := func() { ch <- condition() } timer := time.NewTimer(waitFor) defer timer.Stop() @@ -1893,35 +1999,47 @@ func Eventually(t TestingT, condition func() bool, waitFor time.Duration, tick t ticker := time.NewTicker(tick) defer ticker.Stop() - for tick := ticker.C; ; { + var tickC <-chan time.Time + + // Check the condition once first on the initial call. + go checkCond() + + for { select { case <-timer.C: return Fail(t, "Condition never satisfied", msgAndArgs...) - case <-tick: - tick = nil - go func() { ch <- condition() }() + case <-tickC: + tickC = nil + go checkCond() case v := <-ch: if v { return true } - tick = ticker.C + tickC = ticker.C } } } // CollectT implements the TestingT interface and collects all errors. type CollectT struct { + // A slice of errors. Non-nil slice denotes a failure. + // If it's non-nil but len(c.errors) == 0, this is also a failure + // obtained by direct c.FailNow() call. errors []error } +// Helper is like [testing.T.Helper] but does nothing. +func (CollectT) Helper() {} + // Errorf collects the error. func (c *CollectT) Errorf(format string, args ...interface{}) { c.errors = append(c.errors, fmt.Errorf(format, args...)) } -// FailNow panics. -func (*CollectT) FailNow() { - panic("Assertion failed") +// FailNow stops execution by calling runtime.Goexit. +func (c *CollectT) FailNow() { + c.fail() + runtime.Goexit() } // Deprecated: That was a method for internal usage that should not have been published. Now just panics. @@ -1934,6 +2052,16 @@ func (*CollectT) Copy(TestingT) { panic("Copy() is deprecated") } +func (c *CollectT) fail() { + if !c.failed() { + c.errors = []error{} // Make it non-nil to mark a failure. + } +} + +func (c *CollectT) failed() bool { + return c.errors != nil +} + // EventuallyWithT asserts that given condition will be met in waitFor time, // periodically checking target function each tick. In contrast to Eventually, // it supplies a CollectT to the condition function, so that the condition @@ -1951,14 +2079,22 @@ func (*CollectT) Copy(TestingT) { // assert.EventuallyWithT(t, func(c *assert.CollectT) { // // add assertions as needed; any assertion failure will fail the current tick // assert.True(c, externalValue, "expected 'externalValue' to be true") -// }, 1*time.Second, 10*time.Second, "external state has not changed to 'true'; still false") +// }, 10*time.Second, 1*time.Second, "external state has not changed to 'true'; still false") func EventuallyWithT(t TestingT, condition func(collect *CollectT), waitFor time.Duration, tick time.Duration, msgAndArgs ...interface{}) bool { if h, ok := t.(tHelper); ok { h.Helper() } var lastFinishedTickErrs []error - ch := make(chan []error, 1) + ch := make(chan *CollectT, 1) + + checkCond := func() { + collect := new(CollectT) + defer func() { + ch <- collect + }() + condition(collect) + } timer := time.NewTimer(waitFor) defer timer.Stop() @@ -1966,29 +2102,28 @@ func EventuallyWithT(t TestingT, condition func(collect *CollectT), waitFor time ticker := time.NewTicker(tick) defer ticker.Stop() - for tick := ticker.C; ; { + var tickC <-chan time.Time + + // Check the condition once first on the initial call. + go checkCond() + + for { select { case <-timer.C: for _, err := range lastFinishedTickErrs { t.Errorf("%v", err) } return Fail(t, "Condition never satisfied", msgAndArgs...) - case <-tick: - tick = nil - go func() { - collect := new(CollectT) - defer func() { - ch <- collect.errors - }() - condition(collect) - }() - case errs := <-ch: - if len(errs) == 0 { + case <-tickC: + tickC = nil + go checkCond() + case collect := <-ch: + if !collect.failed() { return true } // Keep the errors from the last ended condition, so that they can be copied to t if timeout is reached. - lastFinishedTickErrs = errs - tick = ticker.C + lastFinishedTickErrs = collect.errors + tickC = ticker.C } } } @@ -2003,6 +2138,7 @@ func Never(t TestingT, condition func() bool, waitFor time.Duration, tick time.D } ch := make(chan bool, 1) + checkCond := func() { ch <- condition() } timer := time.NewTimer(waitFor) defer timer.Stop() @@ -2010,18 +2146,23 @@ func Never(t TestingT, condition func() bool, waitFor time.Duration, tick time.D ticker := time.NewTicker(tick) defer ticker.Stop() - for tick := ticker.C; ; { + var tickC <-chan time.Time + + // Check the condition once first on the initial call. + go checkCond() + + for { select { case <-timer.C: return true - case <-tick: - tick = nil - go func() { ch <- condition() }() + case <-tickC: + tickC = nil + go checkCond() case v := <-ch: if v { return Fail(t, "Condition satisfied", msgAndArgs...) } - tick = ticker.C + tickC = ticker.C } } } @@ -2039,9 +2180,12 @@ func ErrorIs(t TestingT, err, target error, msgAndArgs ...interface{}) bool { var expectedText string if target != nil { expectedText = target.Error() + if err == nil { + return Fail(t, fmt.Sprintf("Expected error with %q in chain but got nil.", expectedText), msgAndArgs...) + } } - chain := buildErrorChainString(err) + chain := buildErrorChainString(err, false) return Fail(t, fmt.Sprintf("Target error should be in err chain:\n"+ "expected: %q\n"+ @@ -2049,7 +2193,7 @@ func ErrorIs(t TestingT, err, target error, msgAndArgs ...interface{}) bool { ), msgAndArgs...) } -// NotErrorIs asserts that at none of the errors in err's chain matches target. +// NotErrorIs asserts that none of the errors in err's chain matches target. // This is a wrapper for errors.Is. func NotErrorIs(t TestingT, err, target error, msgAndArgs ...interface{}) bool { if h, ok := t.(tHelper); ok { @@ -2064,7 +2208,7 @@ func NotErrorIs(t TestingT, err, target error, msgAndArgs ...interface{}) bool { expectedText = target.Error() } - chain := buildErrorChainString(err) + chain := buildErrorChainString(err, false) return Fail(t, fmt.Sprintf("Target error should not be in err chain:\n"+ "found: %q\n"+ @@ -2082,24 +2226,70 @@ func ErrorAs(t TestingT, err error, target interface{}, msgAndArgs ...interface{ return true } - chain := buildErrorChainString(err) + expectedType := reflect.TypeOf(target).Elem().String() + if err == nil { + return Fail(t, fmt.Sprintf("An error is expected but got nil.\n"+ + "expected: %s", expectedType), msgAndArgs...) + } + + chain := buildErrorChainString(err, true) return Fail(t, fmt.Sprintf("Should be in error chain:\n"+ - "expected: %q\n"+ - "in chain: %s", target, chain, + "expected: %s\n"+ + "in chain: %s", expectedType, chain, ), msgAndArgs...) } -func buildErrorChainString(err error) string { +// NotErrorAs asserts that none of the errors in err's chain matches target, +// but if so, sets target to that error value. +func NotErrorAs(t TestingT, err error, target interface{}, msgAndArgs ...interface{}) bool { + if h, ok := t.(tHelper); ok { + h.Helper() + } + if !errors.As(err, target) { + return true + } + + chain := buildErrorChainString(err, true) + + return Fail(t, fmt.Sprintf("Target error should not be in err chain:\n"+ + "found: %s\n"+ + "in chain: %s", reflect.TypeOf(target).Elem().String(), chain, + ), msgAndArgs...) +} + +func unwrapAll(err error) (errs []error) { + errs = append(errs, err) + switch x := err.(type) { + case interface{ Unwrap() error }: + err = x.Unwrap() + if err == nil { + return + } + errs = append(errs, unwrapAll(err)...) + case interface{ Unwrap() []error }: + for _, err := range x.Unwrap() { + errs = append(errs, unwrapAll(err)...) + } + } + return +} + +func buildErrorChainString(err error, withType bool) string { if err == nil { return "" } - e := errors.Unwrap(err) - chain := fmt.Sprintf("%q", err.Error()) - for e != nil { - chain += fmt.Sprintf("\n\t%q", e.Error()) - e = errors.Unwrap(e) + var chain string + errs := unwrapAll(err) + for i := range errs { + if i != 0 { + chain += "\n\t" + } + chain += fmt.Sprintf("%q", errs[i].Error()) + if withType { + chain += fmt.Sprintf(" (%T)", errs[i]) + } } return chain } diff --git a/vendor/github.com/stretchr/testify/assert/doc.go b/vendor/github.com/stretchr/testify/assert/doc.go index 4953981d38..a0b953aa5c 100644 --- a/vendor/github.com/stretchr/testify/assert/doc.go +++ b/vendor/github.com/stretchr/testify/assert/doc.go @@ -1,5 +1,9 @@ // Package assert provides a set of comprehensive testing tools for use with the normal Go testing system. // +// # Note +// +// All functions in this package return a bool value indicating whether the assertion has passed. +// // # Example Usage // // The following is a complete example using assert in a standard test function: diff --git a/vendor/github.com/stretchr/testify/assert/http_assertions.go b/vendor/github.com/stretchr/testify/assert/http_assertions.go index 861ed4b7ce..5a6bb75f2c 100644 --- a/vendor/github.com/stretchr/testify/assert/http_assertions.go +++ b/vendor/github.com/stretchr/testify/assert/http_assertions.go @@ -138,7 +138,7 @@ func HTTPBodyContains(t TestingT, handler http.HandlerFunc, method, url string, contains := strings.Contains(body, fmt.Sprint(str)) if !contains { - Fail(t, fmt.Sprintf("Expected response body for \"%s\" to contain \"%s\" but found \"%s\"", url+"?"+values.Encode(), str, body), msgAndArgs...) + Fail(t, fmt.Sprintf("Expected response body for %q to contain %q but found %q", url+"?"+values.Encode(), str, body), msgAndArgs...) } return contains @@ -158,7 +158,7 @@ func HTTPBodyNotContains(t TestingT, handler http.HandlerFunc, method, url strin contains := strings.Contains(body, fmt.Sprint(str)) if contains { - Fail(t, fmt.Sprintf("Expected response body for \"%s\" to NOT contain \"%s\" but found \"%s\"", url+"?"+values.Encode(), str, body), msgAndArgs...) + Fail(t, fmt.Sprintf("Expected response body for %q to NOT contain %q but found %q", url+"?"+values.Encode(), str, body), msgAndArgs...) } return !contains diff --git a/vendor/github.com/stretchr/testify/assert/yaml/yaml_custom.go b/vendor/github.com/stretchr/testify/assert/yaml/yaml_custom.go new file mode 100644 index 0000000000..5a74c4f4d5 --- /dev/null +++ b/vendor/github.com/stretchr/testify/assert/yaml/yaml_custom.go @@ -0,0 +1,24 @@ +//go:build testify_yaml_custom && !testify_yaml_fail && !testify_yaml_default + +// Package yaml is an implementation of YAML functions that calls a pluggable implementation. +// +// This implementation is selected with the testify_yaml_custom build tag. +// +// go test -tags testify_yaml_custom +// +// This implementation can be used at build time to replace the default implementation +// to avoid linking with [gopkg.in/yaml.v3]. +// +// In your test package: +// +// import assertYaml "github.com/stretchr/testify/assert/yaml" +// +// func init() { +// assertYaml.Unmarshal = func (in []byte, out interface{}) error { +// // ... +// return nil +// } +// } +package yaml + +var Unmarshal func(in []byte, out interface{}) error diff --git a/vendor/github.com/stretchr/testify/assert/yaml/yaml_default.go b/vendor/github.com/stretchr/testify/assert/yaml/yaml_default.go new file mode 100644 index 0000000000..0bae80e34a --- /dev/null +++ b/vendor/github.com/stretchr/testify/assert/yaml/yaml_default.go @@ -0,0 +1,36 @@ +//go:build !testify_yaml_fail && !testify_yaml_custom + +// Package yaml is just an indirection to handle YAML deserialization. +// +// This package is just an indirection that allows the builder to override the +// indirection with an alternative implementation of this package that uses +// another implementation of YAML deserialization. This allows to not either not +// use YAML deserialization at all, or to use another implementation than +// [gopkg.in/yaml.v3] (for example for license compatibility reasons, see [PR #1120]). +// +// Alternative implementations are selected using build tags: +// +// - testify_yaml_fail: [Unmarshal] always fails with an error +// - testify_yaml_custom: [Unmarshal] is a variable. Caller must initialize it +// before calling any of [github.com/stretchr/testify/assert.YAMLEq] or +// [github.com/stretchr/testify/assert.YAMLEqf]. +// +// Usage: +// +// go test -tags testify_yaml_fail +// +// You can check with "go list" which implementation is linked: +// +// go list -f '{{.Imports}}' github.com/stretchr/testify/assert/yaml +// go list -tags testify_yaml_fail -f '{{.Imports}}' github.com/stretchr/testify/assert/yaml +// go list -tags testify_yaml_custom -f '{{.Imports}}' github.com/stretchr/testify/assert/yaml +// +// [PR #1120]: https://github.com/stretchr/testify/pull/1120 +package yaml + +import goyaml "gopkg.in/yaml.v3" + +// Unmarshal is just a wrapper of [gopkg.in/yaml.v3.Unmarshal]. +func Unmarshal(in []byte, out interface{}) error { + return goyaml.Unmarshal(in, out) +} diff --git a/vendor/github.com/stretchr/testify/assert/yaml/yaml_fail.go b/vendor/github.com/stretchr/testify/assert/yaml/yaml_fail.go new file mode 100644 index 0000000000..8041803fd2 --- /dev/null +++ b/vendor/github.com/stretchr/testify/assert/yaml/yaml_fail.go @@ -0,0 +1,17 @@ +//go:build testify_yaml_fail && !testify_yaml_custom && !testify_yaml_default + +// Package yaml is an implementation of YAML functions that always fail. +// +// This implementation can be used at build time to replace the default implementation +// to avoid linking with [gopkg.in/yaml.v3]: +// +// go test -tags testify_yaml_fail +package yaml + +import "errors" + +var errNotImplemented = errors.New("YAML functions are not available (see https://pkg.go.dev/github.com/stretchr/testify/assert/yaml)") + +func Unmarshal([]byte, interface{}) error { + return errNotImplemented +} diff --git a/vendor/github.com/stretchr/testify/require/doc.go b/vendor/github.com/stretchr/testify/require/doc.go index 9684347245..c8e3f94a80 100644 --- a/vendor/github.com/stretchr/testify/require/doc.go +++ b/vendor/github.com/stretchr/testify/require/doc.go @@ -23,6 +23,8 @@ // // The `require` package have same global functions as in the `assert` package, // but instead of returning a boolean result they call `t.FailNow()`. +// A consequence of this is that it must be called from the goroutine running +// the test function, not from other goroutines created during the test. // // Every assertion function also takes an optional string message as the final argument, // allowing custom error messages to be appended to the message the assertion method outputs. diff --git a/vendor/github.com/stretchr/testify/require/require.go b/vendor/github.com/stretchr/testify/require/require.go index 506a82f807..2d02f9bcef 100644 --- a/vendor/github.com/stretchr/testify/require/require.go +++ b/vendor/github.com/stretchr/testify/require/require.go @@ -34,9 +34,9 @@ func Conditionf(t TestingT, comp assert.Comparison, msg string, args ...interfac // Contains asserts that the specified string, list(array, slice...) or map contains the // specified substring or element. // -// assert.Contains(t, "Hello World", "World") -// assert.Contains(t, ["Hello", "World"], "World") -// assert.Contains(t, {"Hello": "World"}, "Hello") +// require.Contains(t, "Hello World", "World") +// require.Contains(t, ["Hello", "World"], "World") +// require.Contains(t, {"Hello": "World"}, "Hello") func Contains(t TestingT, s interface{}, contains interface{}, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -50,9 +50,9 @@ func Contains(t TestingT, s interface{}, contains interface{}, msgAndArgs ...int // Containsf asserts that the specified string, list(array, slice...) or map contains the // specified substring or element. // -// assert.Containsf(t, "Hello World", "World", "error message %s", "formatted") -// assert.Containsf(t, ["Hello", "World"], "World", "error message %s", "formatted") -// assert.Containsf(t, {"Hello": "World"}, "Hello", "error message %s", "formatted") +// require.Containsf(t, "Hello World", "World", "error message %s", "formatted") +// require.Containsf(t, ["Hello", "World"], "World", "error message %s", "formatted") +// require.Containsf(t, {"Hello": "World"}, "Hello", "error message %s", "formatted") func Containsf(t TestingT, s interface{}, contains interface{}, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -91,7 +91,7 @@ func DirExistsf(t TestingT, path string, msg string, args ...interface{}) { // listB(array, slice...) ignoring the order of the elements. If there are duplicate elements, // the number of appearances of each of them in both lists should match. // -// assert.ElementsMatch(t, [1, 3, 2, 3], [1, 3, 3, 2]) +// require.ElementsMatch(t, [1, 3, 2, 3], [1, 3, 3, 2]) func ElementsMatch(t TestingT, listA interface{}, listB interface{}, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -106,7 +106,7 @@ func ElementsMatch(t TestingT, listA interface{}, listB interface{}, msgAndArgs // listB(array, slice...) ignoring the order of the elements. If there are duplicate elements, // the number of appearances of each of them in both lists should match. // -// assert.ElementsMatchf(t, [1, 3, 2, 3], [1, 3, 3, 2], "error message %s", "formatted") +// require.ElementsMatchf(t, [1, 3, 2, 3], [1, 3, 3, 2], "error message %s", "formatted") func ElementsMatchf(t TestingT, listA interface{}, listB interface{}, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -117,10 +117,19 @@ func ElementsMatchf(t TestingT, listA interface{}, listB interface{}, msg string t.FailNow() } -// Empty asserts that the specified object is empty. I.e. nil, "", false, 0 or either -// a slice or a channel with len == 0. +// Empty asserts that the given value is "empty". // -// assert.Empty(t, obj) +// [Zero values] are "empty". +// +// Arrays are "empty" if every element is the zero value of the type (stricter than "empty"). +// +// Slices, maps and channels with zero length are "empty". +// +// Pointer values are "empty" if the pointer is nil or if the pointed value is "empty". +// +// require.Empty(t, obj) +// +// [Zero values]: https://go.dev/ref/spec#The_zero_value func Empty(t TestingT, object interface{}, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -131,10 +140,19 @@ func Empty(t TestingT, object interface{}, msgAndArgs ...interface{}) { t.FailNow() } -// Emptyf asserts that the specified object is empty. I.e. nil, "", false, 0 or either -// a slice or a channel with len == 0. +// Emptyf asserts that the given value is "empty". +// +// [Zero values] are "empty". +// +// Arrays are "empty" if every element is the zero value of the type (stricter than "empty"). +// +// Slices, maps and channels with zero length are "empty". +// +// Pointer values are "empty" if the pointer is nil or if the pointed value is "empty". +// +// require.Emptyf(t, obj, "error message %s", "formatted") // -// assert.Emptyf(t, obj, "error message %s", "formatted") +// [Zero values]: https://go.dev/ref/spec#The_zero_value func Emptyf(t TestingT, object interface{}, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -147,7 +165,7 @@ func Emptyf(t TestingT, object interface{}, msg string, args ...interface{}) { // Equal asserts that two objects are equal. // -// assert.Equal(t, 123, 123) +// require.Equal(t, 123, 123) // // Pointer variable equality is determined based on the equality of the // referenced values (as opposed to the memory addresses). Function equality @@ -166,7 +184,7 @@ func Equal(t TestingT, expected interface{}, actual interface{}, msgAndArgs ...i // and that it is equal to the provided error. // // actualObj, err := SomeFunction() -// assert.EqualError(t, err, expectedErrorString) +// require.EqualError(t, err, expectedErrorString) func EqualError(t TestingT, theError error, errString string, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -181,7 +199,7 @@ func EqualError(t TestingT, theError error, errString string, msgAndArgs ...inte // and that it is equal to the provided error. // // actualObj, err := SomeFunction() -// assert.EqualErrorf(t, err, expectedErrorString, "error message %s", "formatted") +// require.EqualErrorf(t, err, expectedErrorString, "error message %s", "formatted") func EqualErrorf(t TestingT, theError error, errString string, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -200,8 +218,8 @@ func EqualErrorf(t TestingT, theError error, errString string, msg string, args // Exported int // notExported int // } -// assert.EqualExportedValues(t, S{1, 2}, S{1, 3}) => true -// assert.EqualExportedValues(t, S{1, 2}, S{2, 3}) => false +// require.EqualExportedValues(t, S{1, 2}, S{1, 3}) => true +// require.EqualExportedValues(t, S{1, 2}, S{2, 3}) => false func EqualExportedValues(t TestingT, expected interface{}, actual interface{}, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -220,8 +238,8 @@ func EqualExportedValues(t TestingT, expected interface{}, actual interface{}, m // Exported int // notExported int // } -// assert.EqualExportedValuesf(t, S{1, 2}, S{1, 3}, "error message %s", "formatted") => true -// assert.EqualExportedValuesf(t, S{1, 2}, S{2, 3}, "error message %s", "formatted") => false +// require.EqualExportedValuesf(t, S{1, 2}, S{1, 3}, "error message %s", "formatted") => true +// require.EqualExportedValuesf(t, S{1, 2}, S{2, 3}, "error message %s", "formatted") => false func EqualExportedValuesf(t TestingT, expected interface{}, actual interface{}, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -232,10 +250,10 @@ func EqualExportedValuesf(t TestingT, expected interface{}, actual interface{}, t.FailNow() } -// EqualValues asserts that two objects are equal or convertible to the same types -// and equal. +// EqualValues asserts that two objects are equal or convertible to the larger +// type and equal. // -// assert.EqualValues(t, uint32(123), int32(123)) +// require.EqualValues(t, uint32(123), int32(123)) func EqualValues(t TestingT, expected interface{}, actual interface{}, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -246,10 +264,10 @@ func EqualValues(t TestingT, expected interface{}, actual interface{}, msgAndArg t.FailNow() } -// EqualValuesf asserts that two objects are equal or convertible to the same types -// and equal. +// EqualValuesf asserts that two objects are equal or convertible to the larger +// type and equal. // -// assert.EqualValuesf(t, uint32(123), int32(123), "error message %s", "formatted") +// require.EqualValuesf(t, uint32(123), int32(123), "error message %s", "formatted") func EqualValuesf(t TestingT, expected interface{}, actual interface{}, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -262,7 +280,7 @@ func EqualValuesf(t TestingT, expected interface{}, actual interface{}, msg stri // Equalf asserts that two objects are equal. // -// assert.Equalf(t, 123, 123, "error message %s", "formatted") +// require.Equalf(t, 123, 123, "error message %s", "formatted") // // Pointer variable equality is determined based on the equality of the // referenced values (as opposed to the memory addresses). Function equality @@ -279,10 +297,8 @@ func Equalf(t TestingT, expected interface{}, actual interface{}, msg string, ar // Error asserts that a function returned an error (i.e. not `nil`). // -// actualObj, err := SomeFunction() -// if assert.Error(t, err) { -// assert.Equal(t, expectedError, err) -// } +// actualObj, err := SomeFunction() +// require.Error(t, err) func Error(t TestingT, err error, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -321,7 +337,7 @@ func ErrorAsf(t TestingT, err error, target interface{}, msg string, args ...int // and that the error contains the specified substring. // // actualObj, err := SomeFunction() -// assert.ErrorContains(t, err, expectedErrorSubString) +// require.ErrorContains(t, err, expectedErrorSubString) func ErrorContains(t TestingT, theError error, contains string, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -336,7 +352,7 @@ func ErrorContains(t TestingT, theError error, contains string, msgAndArgs ...in // and that the error contains the specified substring. // // actualObj, err := SomeFunction() -// assert.ErrorContainsf(t, err, expectedErrorSubString, "error message %s", "formatted") +// require.ErrorContainsf(t, err, expectedErrorSubString, "error message %s", "formatted") func ErrorContainsf(t TestingT, theError error, contains string, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -373,10 +389,8 @@ func ErrorIsf(t TestingT, err error, target error, msg string, args ...interface // Errorf asserts that a function returned an error (i.e. not `nil`). // -// actualObj, err := SomeFunction() -// if assert.Errorf(t, err, "error message %s", "formatted") { -// assert.Equal(t, expectedErrorf, err) -// } +// actualObj, err := SomeFunction() +// require.Errorf(t, err, "error message %s", "formatted") func Errorf(t TestingT, err error, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -390,7 +404,7 @@ func Errorf(t TestingT, err error, msg string, args ...interface{}) { // Eventually asserts that given condition will be met in waitFor time, // periodically checking target function each tick. // -// assert.Eventually(t, func() bool { return true; }, time.Second, 10*time.Millisecond) +// require.Eventually(t, func() bool { return true; }, time.Second, 10*time.Millisecond) func Eventually(t TestingT, condition func() bool, waitFor time.Duration, tick time.Duration, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -415,10 +429,10 @@ func Eventually(t TestingT, condition func() bool, waitFor time.Duration, tick t // time.Sleep(8*time.Second) // externalValue = true // }() -// assert.EventuallyWithT(t, func(c *assert.CollectT) { +// require.EventuallyWithT(t, func(c *require.CollectT) { // // add assertions as needed; any assertion failure will fail the current tick -// assert.True(c, externalValue, "expected 'externalValue' to be true") -// }, 1*time.Second, 10*time.Second, "external state has not changed to 'true'; still false") +// require.True(c, externalValue, "expected 'externalValue' to be true") +// }, 10*time.Second, 1*time.Second, "external state has not changed to 'true'; still false") func EventuallyWithT(t TestingT, condition func(collect *assert.CollectT), waitFor time.Duration, tick time.Duration, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -443,10 +457,10 @@ func EventuallyWithT(t TestingT, condition func(collect *assert.CollectT), waitF // time.Sleep(8*time.Second) // externalValue = true // }() -// assert.EventuallyWithTf(t, func(c *assert.CollectT, "error message %s", "formatted") { +// require.EventuallyWithTf(t, func(c *require.CollectT, "error message %s", "formatted") { // // add assertions as needed; any assertion failure will fail the current tick -// assert.True(c, externalValue, "expected 'externalValue' to be true") -// }, 1*time.Second, 10*time.Second, "external state has not changed to 'true'; still false") +// require.True(c, externalValue, "expected 'externalValue' to be true") +// }, 10*time.Second, 1*time.Second, "external state has not changed to 'true'; still false") func EventuallyWithTf(t TestingT, condition func(collect *assert.CollectT), waitFor time.Duration, tick time.Duration, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -460,7 +474,7 @@ func EventuallyWithTf(t TestingT, condition func(collect *assert.CollectT), wait // Eventuallyf asserts that given condition will be met in waitFor time, // periodically checking target function each tick. // -// assert.Eventuallyf(t, func() bool { return true; }, time.Second, 10*time.Millisecond, "error message %s", "formatted") +// require.Eventuallyf(t, func() bool { return true; }, time.Second, 10*time.Millisecond, "error message %s", "formatted") func Eventuallyf(t TestingT, condition func() bool, waitFor time.Duration, tick time.Duration, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -473,7 +487,7 @@ func Eventuallyf(t TestingT, condition func() bool, waitFor time.Duration, tick // Exactly asserts that two objects are equal in value and type. // -// assert.Exactly(t, int32(123), int64(123)) +// require.Exactly(t, int32(123), int64(123)) func Exactly(t TestingT, expected interface{}, actual interface{}, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -486,7 +500,7 @@ func Exactly(t TestingT, expected interface{}, actual interface{}, msgAndArgs .. // Exactlyf asserts that two objects are equal in value and type. // -// assert.Exactlyf(t, int32(123), int64(123), "error message %s", "formatted") +// require.Exactlyf(t, int32(123), int64(123), "error message %s", "formatted") func Exactlyf(t TestingT, expected interface{}, actual interface{}, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -543,7 +557,7 @@ func Failf(t TestingT, failureMessage string, msg string, args ...interface{}) { // False asserts that the specified value is false. // -// assert.False(t, myBool) +// require.False(t, myBool) func False(t TestingT, value bool, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -556,7 +570,7 @@ func False(t TestingT, value bool, msgAndArgs ...interface{}) { // Falsef asserts that the specified value is false. // -// assert.Falsef(t, myBool, "error message %s", "formatted") +// require.Falsef(t, myBool, "error message %s", "formatted") func Falsef(t TestingT, value bool, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -593,9 +607,9 @@ func FileExistsf(t TestingT, path string, msg string, args ...interface{}) { // Greater asserts that the first element is greater than the second // -// assert.Greater(t, 2, 1) -// assert.Greater(t, float64(2), float64(1)) -// assert.Greater(t, "b", "a") +// require.Greater(t, 2, 1) +// require.Greater(t, float64(2), float64(1)) +// require.Greater(t, "b", "a") func Greater(t TestingT, e1 interface{}, e2 interface{}, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -608,10 +622,10 @@ func Greater(t TestingT, e1 interface{}, e2 interface{}, msgAndArgs ...interface // GreaterOrEqual asserts that the first element is greater than or equal to the second // -// assert.GreaterOrEqual(t, 2, 1) -// assert.GreaterOrEqual(t, 2, 2) -// assert.GreaterOrEqual(t, "b", "a") -// assert.GreaterOrEqual(t, "b", "b") +// require.GreaterOrEqual(t, 2, 1) +// require.GreaterOrEqual(t, 2, 2) +// require.GreaterOrEqual(t, "b", "a") +// require.GreaterOrEqual(t, "b", "b") func GreaterOrEqual(t TestingT, e1 interface{}, e2 interface{}, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -624,10 +638,10 @@ func GreaterOrEqual(t TestingT, e1 interface{}, e2 interface{}, msgAndArgs ...in // GreaterOrEqualf asserts that the first element is greater than or equal to the second // -// assert.GreaterOrEqualf(t, 2, 1, "error message %s", "formatted") -// assert.GreaterOrEqualf(t, 2, 2, "error message %s", "formatted") -// assert.GreaterOrEqualf(t, "b", "a", "error message %s", "formatted") -// assert.GreaterOrEqualf(t, "b", "b", "error message %s", "formatted") +// require.GreaterOrEqualf(t, 2, 1, "error message %s", "formatted") +// require.GreaterOrEqualf(t, 2, 2, "error message %s", "formatted") +// require.GreaterOrEqualf(t, "b", "a", "error message %s", "formatted") +// require.GreaterOrEqualf(t, "b", "b", "error message %s", "formatted") func GreaterOrEqualf(t TestingT, e1 interface{}, e2 interface{}, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -640,9 +654,9 @@ func GreaterOrEqualf(t TestingT, e1 interface{}, e2 interface{}, msg string, arg // Greaterf asserts that the first element is greater than the second // -// assert.Greaterf(t, 2, 1, "error message %s", "formatted") -// assert.Greaterf(t, float64(2), float64(1), "error message %s", "formatted") -// assert.Greaterf(t, "b", "a", "error message %s", "formatted") +// require.Greaterf(t, 2, 1, "error message %s", "formatted") +// require.Greaterf(t, float64(2), float64(1), "error message %s", "formatted") +// require.Greaterf(t, "b", "a", "error message %s", "formatted") func Greaterf(t TestingT, e1 interface{}, e2 interface{}, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -656,7 +670,7 @@ func Greaterf(t TestingT, e1 interface{}, e2 interface{}, msg string, args ...in // HTTPBodyContains asserts that a specified handler returns a // body that contains a string. // -// assert.HTTPBodyContains(t, myHandler, "GET", "www.google.com", nil, "I'm Feeling Lucky") +// require.HTTPBodyContains(t, myHandler, "GET", "www.google.com", nil, "I'm Feeling Lucky") // // Returns whether the assertion was successful (true) or not (false). func HTTPBodyContains(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, str interface{}, msgAndArgs ...interface{}) { @@ -672,7 +686,7 @@ func HTTPBodyContains(t TestingT, handler http.HandlerFunc, method string, url s // HTTPBodyContainsf asserts that a specified handler returns a // body that contains a string. // -// assert.HTTPBodyContainsf(t, myHandler, "GET", "www.google.com", nil, "I'm Feeling Lucky", "error message %s", "formatted") +// require.HTTPBodyContainsf(t, myHandler, "GET", "www.google.com", nil, "I'm Feeling Lucky", "error message %s", "formatted") // // Returns whether the assertion was successful (true) or not (false). func HTTPBodyContainsf(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, str interface{}, msg string, args ...interface{}) { @@ -688,7 +702,7 @@ func HTTPBodyContainsf(t TestingT, handler http.HandlerFunc, method string, url // HTTPBodyNotContains asserts that a specified handler returns a // body that does not contain a string. // -// assert.HTTPBodyNotContains(t, myHandler, "GET", "www.google.com", nil, "I'm Feeling Lucky") +// require.HTTPBodyNotContains(t, myHandler, "GET", "www.google.com", nil, "I'm Feeling Lucky") // // Returns whether the assertion was successful (true) or not (false). func HTTPBodyNotContains(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, str interface{}, msgAndArgs ...interface{}) { @@ -704,7 +718,7 @@ func HTTPBodyNotContains(t TestingT, handler http.HandlerFunc, method string, ur // HTTPBodyNotContainsf asserts that a specified handler returns a // body that does not contain a string. // -// assert.HTTPBodyNotContainsf(t, myHandler, "GET", "www.google.com", nil, "I'm Feeling Lucky", "error message %s", "formatted") +// require.HTTPBodyNotContainsf(t, myHandler, "GET", "www.google.com", nil, "I'm Feeling Lucky", "error message %s", "formatted") // // Returns whether the assertion was successful (true) or not (false). func HTTPBodyNotContainsf(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, str interface{}, msg string, args ...interface{}) { @@ -719,7 +733,7 @@ func HTTPBodyNotContainsf(t TestingT, handler http.HandlerFunc, method string, u // HTTPError asserts that a specified handler returns an error status code. // -// assert.HTTPError(t, myHandler, "POST", "/a/b/c", url.Values{"a": []string{"b", "c"}} +// require.HTTPError(t, myHandler, "POST", "/a/b/c", url.Values{"a": []string{"b", "c"}} // // Returns whether the assertion was successful (true) or not (false). func HTTPError(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, msgAndArgs ...interface{}) { @@ -734,7 +748,7 @@ func HTTPError(t TestingT, handler http.HandlerFunc, method string, url string, // HTTPErrorf asserts that a specified handler returns an error status code. // -// assert.HTTPErrorf(t, myHandler, "POST", "/a/b/c", url.Values{"a": []string{"b", "c"}} +// require.HTTPErrorf(t, myHandler, "POST", "/a/b/c", url.Values{"a": []string{"b", "c"}} // // Returns whether the assertion was successful (true) or not (false). func HTTPErrorf(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, msg string, args ...interface{}) { @@ -749,7 +763,7 @@ func HTTPErrorf(t TestingT, handler http.HandlerFunc, method string, url string, // HTTPRedirect asserts that a specified handler returns a redirect status code. // -// assert.HTTPRedirect(t, myHandler, "GET", "/a/b/c", url.Values{"a": []string{"b", "c"}} +// require.HTTPRedirect(t, myHandler, "GET", "/a/b/c", url.Values{"a": []string{"b", "c"}} // // Returns whether the assertion was successful (true) or not (false). func HTTPRedirect(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, msgAndArgs ...interface{}) { @@ -764,7 +778,7 @@ func HTTPRedirect(t TestingT, handler http.HandlerFunc, method string, url strin // HTTPRedirectf asserts that a specified handler returns a redirect status code. // -// assert.HTTPRedirectf(t, myHandler, "GET", "/a/b/c", url.Values{"a": []string{"b", "c"}} +// require.HTTPRedirectf(t, myHandler, "GET", "/a/b/c", url.Values{"a": []string{"b", "c"}} // // Returns whether the assertion was successful (true) or not (false). func HTTPRedirectf(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, msg string, args ...interface{}) { @@ -779,7 +793,7 @@ func HTTPRedirectf(t TestingT, handler http.HandlerFunc, method string, url stri // HTTPStatusCode asserts that a specified handler returns a specified status code. // -// assert.HTTPStatusCode(t, myHandler, "GET", "/notImplemented", nil, 501) +// require.HTTPStatusCode(t, myHandler, "GET", "/notImplemented", nil, 501) // // Returns whether the assertion was successful (true) or not (false). func HTTPStatusCode(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, statuscode int, msgAndArgs ...interface{}) { @@ -794,7 +808,7 @@ func HTTPStatusCode(t TestingT, handler http.HandlerFunc, method string, url str // HTTPStatusCodef asserts that a specified handler returns a specified status code. // -// assert.HTTPStatusCodef(t, myHandler, "GET", "/notImplemented", nil, 501, "error message %s", "formatted") +// require.HTTPStatusCodef(t, myHandler, "GET", "/notImplemented", nil, 501, "error message %s", "formatted") // // Returns whether the assertion was successful (true) or not (false). func HTTPStatusCodef(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, statuscode int, msg string, args ...interface{}) { @@ -809,7 +823,7 @@ func HTTPStatusCodef(t TestingT, handler http.HandlerFunc, method string, url st // HTTPSuccess asserts that a specified handler returns a success status code. // -// assert.HTTPSuccess(t, myHandler, "POST", "http://www.google.com", nil) +// require.HTTPSuccess(t, myHandler, "POST", "http://www.google.com", nil) // // Returns whether the assertion was successful (true) or not (false). func HTTPSuccess(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, msgAndArgs ...interface{}) { @@ -824,7 +838,7 @@ func HTTPSuccess(t TestingT, handler http.HandlerFunc, method string, url string // HTTPSuccessf asserts that a specified handler returns a success status code. // -// assert.HTTPSuccessf(t, myHandler, "POST", "http://www.google.com", nil, "error message %s", "formatted") +// require.HTTPSuccessf(t, myHandler, "POST", "http://www.google.com", nil, "error message %s", "formatted") // // Returns whether the assertion was successful (true) or not (false). func HTTPSuccessf(t TestingT, handler http.HandlerFunc, method string, url string, values url.Values, msg string, args ...interface{}) { @@ -839,7 +853,7 @@ func HTTPSuccessf(t TestingT, handler http.HandlerFunc, method string, url strin // Implements asserts that an object is implemented by the specified interface. // -// assert.Implements(t, (*MyInterface)(nil), new(MyObject)) +// require.Implements(t, (*MyInterface)(nil), new(MyObject)) func Implements(t TestingT, interfaceObject interface{}, object interface{}, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -852,7 +866,7 @@ func Implements(t TestingT, interfaceObject interface{}, object interface{}, msg // Implementsf asserts that an object is implemented by the specified interface. // -// assert.Implementsf(t, (*MyInterface)(nil), new(MyObject), "error message %s", "formatted") +// require.Implementsf(t, (*MyInterface)(nil), new(MyObject), "error message %s", "formatted") func Implementsf(t TestingT, interfaceObject interface{}, object interface{}, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -865,7 +879,7 @@ func Implementsf(t TestingT, interfaceObject interface{}, object interface{}, ms // InDelta asserts that the two numerals are within delta of each other. // -// assert.InDelta(t, math.Pi, 22/7.0, 0.01) +// require.InDelta(t, math.Pi, 22/7.0, 0.01) func InDelta(t TestingT, expected interface{}, actual interface{}, delta float64, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -922,7 +936,7 @@ func InDeltaSlicef(t TestingT, expected interface{}, actual interface{}, delta f // InDeltaf asserts that the two numerals are within delta of each other. // -// assert.InDeltaf(t, math.Pi, 22/7.0, 0.01, "error message %s", "formatted") +// require.InDeltaf(t, math.Pi, 22/7.0, 0.01, "error message %s", "formatted") func InDeltaf(t TestingT, expected interface{}, actual interface{}, delta float64, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -979,9 +993,9 @@ func InEpsilonf(t TestingT, expected interface{}, actual interface{}, epsilon fl // IsDecreasing asserts that the collection is decreasing // -// assert.IsDecreasing(t, []int{2, 1, 0}) -// assert.IsDecreasing(t, []float{2, 1}) -// assert.IsDecreasing(t, []string{"b", "a"}) +// require.IsDecreasing(t, []int{2, 1, 0}) +// require.IsDecreasing(t, []float{2, 1}) +// require.IsDecreasing(t, []string{"b", "a"}) func IsDecreasing(t TestingT, object interface{}, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -994,9 +1008,9 @@ func IsDecreasing(t TestingT, object interface{}, msgAndArgs ...interface{}) { // IsDecreasingf asserts that the collection is decreasing // -// assert.IsDecreasingf(t, []int{2, 1, 0}, "error message %s", "formatted") -// assert.IsDecreasingf(t, []float{2, 1}, "error message %s", "formatted") -// assert.IsDecreasingf(t, []string{"b", "a"}, "error message %s", "formatted") +// require.IsDecreasingf(t, []int{2, 1, 0}, "error message %s", "formatted") +// require.IsDecreasingf(t, []float{2, 1}, "error message %s", "formatted") +// require.IsDecreasingf(t, []string{"b", "a"}, "error message %s", "formatted") func IsDecreasingf(t TestingT, object interface{}, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1009,9 +1023,9 @@ func IsDecreasingf(t TestingT, object interface{}, msg string, args ...interface // IsIncreasing asserts that the collection is increasing // -// assert.IsIncreasing(t, []int{1, 2, 3}) -// assert.IsIncreasing(t, []float{1, 2}) -// assert.IsIncreasing(t, []string{"a", "b"}) +// require.IsIncreasing(t, []int{1, 2, 3}) +// require.IsIncreasing(t, []float{1, 2}) +// require.IsIncreasing(t, []string{"a", "b"}) func IsIncreasing(t TestingT, object interface{}, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1024,9 +1038,9 @@ func IsIncreasing(t TestingT, object interface{}, msgAndArgs ...interface{}) { // IsIncreasingf asserts that the collection is increasing // -// assert.IsIncreasingf(t, []int{1, 2, 3}, "error message %s", "formatted") -// assert.IsIncreasingf(t, []float{1, 2}, "error message %s", "formatted") -// assert.IsIncreasingf(t, []string{"a", "b"}, "error message %s", "formatted") +// require.IsIncreasingf(t, []int{1, 2, 3}, "error message %s", "formatted") +// require.IsIncreasingf(t, []float{1, 2}, "error message %s", "formatted") +// require.IsIncreasingf(t, []string{"a", "b"}, "error message %s", "formatted") func IsIncreasingf(t TestingT, object interface{}, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1039,9 +1053,9 @@ func IsIncreasingf(t TestingT, object interface{}, msg string, args ...interface // IsNonDecreasing asserts that the collection is not decreasing // -// assert.IsNonDecreasing(t, []int{1, 1, 2}) -// assert.IsNonDecreasing(t, []float{1, 2}) -// assert.IsNonDecreasing(t, []string{"a", "b"}) +// require.IsNonDecreasing(t, []int{1, 1, 2}) +// require.IsNonDecreasing(t, []float{1, 2}) +// require.IsNonDecreasing(t, []string{"a", "b"}) func IsNonDecreasing(t TestingT, object interface{}, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1054,9 +1068,9 @@ func IsNonDecreasing(t TestingT, object interface{}, msgAndArgs ...interface{}) // IsNonDecreasingf asserts that the collection is not decreasing // -// assert.IsNonDecreasingf(t, []int{1, 1, 2}, "error message %s", "formatted") -// assert.IsNonDecreasingf(t, []float{1, 2}, "error message %s", "formatted") -// assert.IsNonDecreasingf(t, []string{"a", "b"}, "error message %s", "formatted") +// require.IsNonDecreasingf(t, []int{1, 1, 2}, "error message %s", "formatted") +// require.IsNonDecreasingf(t, []float{1, 2}, "error message %s", "formatted") +// require.IsNonDecreasingf(t, []string{"a", "b"}, "error message %s", "formatted") func IsNonDecreasingf(t TestingT, object interface{}, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1069,9 +1083,9 @@ func IsNonDecreasingf(t TestingT, object interface{}, msg string, args ...interf // IsNonIncreasing asserts that the collection is not increasing // -// assert.IsNonIncreasing(t, []int{2, 1, 1}) -// assert.IsNonIncreasing(t, []float{2, 1}) -// assert.IsNonIncreasing(t, []string{"b", "a"}) +// require.IsNonIncreasing(t, []int{2, 1, 1}) +// require.IsNonIncreasing(t, []float{2, 1}) +// require.IsNonIncreasing(t, []string{"b", "a"}) func IsNonIncreasing(t TestingT, object interface{}, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1084,9 +1098,9 @@ func IsNonIncreasing(t TestingT, object interface{}, msgAndArgs ...interface{}) // IsNonIncreasingf asserts that the collection is not increasing // -// assert.IsNonIncreasingf(t, []int{2, 1, 1}, "error message %s", "formatted") -// assert.IsNonIncreasingf(t, []float{2, 1}, "error message %s", "formatted") -// assert.IsNonIncreasingf(t, []string{"b", "a"}, "error message %s", "formatted") +// require.IsNonIncreasingf(t, []int{2, 1, 1}, "error message %s", "formatted") +// require.IsNonIncreasingf(t, []float{2, 1}, "error message %s", "formatted") +// require.IsNonIncreasingf(t, []string{"b", "a"}, "error message %s", "formatted") func IsNonIncreasingf(t TestingT, object interface{}, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1097,7 +1111,35 @@ func IsNonIncreasingf(t TestingT, object interface{}, msg string, args ...interf t.FailNow() } +// IsNotType asserts that the specified objects are not of the same type. +// +// require.IsNotType(t, &NotMyStruct{}, &MyStruct{}) +func IsNotType(t TestingT, theType interface{}, object interface{}, msgAndArgs ...interface{}) { + if h, ok := t.(tHelper); ok { + h.Helper() + } + if assert.IsNotType(t, theType, object, msgAndArgs...) { + return + } + t.FailNow() +} + +// IsNotTypef asserts that the specified objects are not of the same type. +// +// require.IsNotTypef(t, &NotMyStruct{}, &MyStruct{}, "error message %s", "formatted") +func IsNotTypef(t TestingT, theType interface{}, object interface{}, msg string, args ...interface{}) { + if h, ok := t.(tHelper); ok { + h.Helper() + } + if assert.IsNotTypef(t, theType, object, msg, args...) { + return + } + t.FailNow() +} + // IsType asserts that the specified objects are of the same type. +// +// require.IsType(t, &MyStruct{}, &MyStruct{}) func IsType(t TestingT, expectedType interface{}, object interface{}, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1109,6 +1151,8 @@ func IsType(t TestingT, expectedType interface{}, object interface{}, msgAndArgs } // IsTypef asserts that the specified objects are of the same type. +// +// require.IsTypef(t, &MyStruct{}, &MyStruct{}, "error message %s", "formatted") func IsTypef(t TestingT, expectedType interface{}, object interface{}, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1121,7 +1165,7 @@ func IsTypef(t TestingT, expectedType interface{}, object interface{}, msg strin // JSONEq asserts that two JSON strings are equivalent. // -// assert.JSONEq(t, `{"hello": "world", "foo": "bar"}`, `{"foo": "bar", "hello": "world"}`) +// require.JSONEq(t, `{"hello": "world", "foo": "bar"}`, `{"foo": "bar", "hello": "world"}`) func JSONEq(t TestingT, expected string, actual string, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1134,7 +1178,7 @@ func JSONEq(t TestingT, expected string, actual string, msgAndArgs ...interface{ // JSONEqf asserts that two JSON strings are equivalent. // -// assert.JSONEqf(t, `{"hello": "world", "foo": "bar"}`, `{"foo": "bar", "hello": "world"}`, "error message %s", "formatted") +// require.JSONEqf(t, `{"hello": "world", "foo": "bar"}`, `{"foo": "bar", "hello": "world"}`, "error message %s", "formatted") func JSONEqf(t TestingT, expected string, actual string, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1148,7 +1192,7 @@ func JSONEqf(t TestingT, expected string, actual string, msg string, args ...int // Len asserts that the specified object has specific length. // Len also fails if the object has a type that len() not accept. // -// assert.Len(t, mySlice, 3) +// require.Len(t, mySlice, 3) func Len(t TestingT, object interface{}, length int, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1162,7 +1206,7 @@ func Len(t TestingT, object interface{}, length int, msgAndArgs ...interface{}) // Lenf asserts that the specified object has specific length. // Lenf also fails if the object has a type that len() not accept. // -// assert.Lenf(t, mySlice, 3, "error message %s", "formatted") +// require.Lenf(t, mySlice, 3, "error message %s", "formatted") func Lenf(t TestingT, object interface{}, length int, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1175,9 +1219,9 @@ func Lenf(t TestingT, object interface{}, length int, msg string, args ...interf // Less asserts that the first element is less than the second // -// assert.Less(t, 1, 2) -// assert.Less(t, float64(1), float64(2)) -// assert.Less(t, "a", "b") +// require.Less(t, 1, 2) +// require.Less(t, float64(1), float64(2)) +// require.Less(t, "a", "b") func Less(t TestingT, e1 interface{}, e2 interface{}, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1190,10 +1234,10 @@ func Less(t TestingT, e1 interface{}, e2 interface{}, msgAndArgs ...interface{}) // LessOrEqual asserts that the first element is less than or equal to the second // -// assert.LessOrEqual(t, 1, 2) -// assert.LessOrEqual(t, 2, 2) -// assert.LessOrEqual(t, "a", "b") -// assert.LessOrEqual(t, "b", "b") +// require.LessOrEqual(t, 1, 2) +// require.LessOrEqual(t, 2, 2) +// require.LessOrEqual(t, "a", "b") +// require.LessOrEqual(t, "b", "b") func LessOrEqual(t TestingT, e1 interface{}, e2 interface{}, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1206,10 +1250,10 @@ func LessOrEqual(t TestingT, e1 interface{}, e2 interface{}, msgAndArgs ...inter // LessOrEqualf asserts that the first element is less than or equal to the second // -// assert.LessOrEqualf(t, 1, 2, "error message %s", "formatted") -// assert.LessOrEqualf(t, 2, 2, "error message %s", "formatted") -// assert.LessOrEqualf(t, "a", "b", "error message %s", "formatted") -// assert.LessOrEqualf(t, "b", "b", "error message %s", "formatted") +// require.LessOrEqualf(t, 1, 2, "error message %s", "formatted") +// require.LessOrEqualf(t, 2, 2, "error message %s", "formatted") +// require.LessOrEqualf(t, "a", "b", "error message %s", "formatted") +// require.LessOrEqualf(t, "b", "b", "error message %s", "formatted") func LessOrEqualf(t TestingT, e1 interface{}, e2 interface{}, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1222,9 +1266,9 @@ func LessOrEqualf(t TestingT, e1 interface{}, e2 interface{}, msg string, args . // Lessf asserts that the first element is less than the second // -// assert.Lessf(t, 1, 2, "error message %s", "formatted") -// assert.Lessf(t, float64(1), float64(2), "error message %s", "formatted") -// assert.Lessf(t, "a", "b", "error message %s", "formatted") +// require.Lessf(t, 1, 2, "error message %s", "formatted") +// require.Lessf(t, float64(1), float64(2), "error message %s", "formatted") +// require.Lessf(t, "a", "b", "error message %s", "formatted") func Lessf(t TestingT, e1 interface{}, e2 interface{}, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1237,8 +1281,8 @@ func Lessf(t TestingT, e1 interface{}, e2 interface{}, msg string, args ...inter // Negative asserts that the specified element is negative // -// assert.Negative(t, -1) -// assert.Negative(t, -1.23) +// require.Negative(t, -1) +// require.Negative(t, -1.23) func Negative(t TestingT, e interface{}, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1251,8 +1295,8 @@ func Negative(t TestingT, e interface{}, msgAndArgs ...interface{}) { // Negativef asserts that the specified element is negative // -// assert.Negativef(t, -1, "error message %s", "formatted") -// assert.Negativef(t, -1.23, "error message %s", "formatted") +// require.Negativef(t, -1, "error message %s", "formatted") +// require.Negativef(t, -1.23, "error message %s", "formatted") func Negativef(t TestingT, e interface{}, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1266,7 +1310,7 @@ func Negativef(t TestingT, e interface{}, msg string, args ...interface{}) { // Never asserts that the given condition doesn't satisfy in waitFor time, // periodically checking the target function each tick. // -// assert.Never(t, func() bool { return false; }, time.Second, 10*time.Millisecond) +// require.Never(t, func() bool { return false; }, time.Second, 10*time.Millisecond) func Never(t TestingT, condition func() bool, waitFor time.Duration, tick time.Duration, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1280,7 +1324,7 @@ func Never(t TestingT, condition func() bool, waitFor time.Duration, tick time.D // Neverf asserts that the given condition doesn't satisfy in waitFor time, // periodically checking the target function each tick. // -// assert.Neverf(t, func() bool { return false; }, time.Second, 10*time.Millisecond, "error message %s", "formatted") +// require.Neverf(t, func() bool { return false; }, time.Second, 10*time.Millisecond, "error message %s", "formatted") func Neverf(t TestingT, condition func() bool, waitFor time.Duration, tick time.Duration, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1293,7 +1337,7 @@ func Neverf(t TestingT, condition func() bool, waitFor time.Duration, tick time. // Nil asserts that the specified object is nil. // -// assert.Nil(t, err) +// require.Nil(t, err) func Nil(t TestingT, object interface{}, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1306,7 +1350,7 @@ func Nil(t TestingT, object interface{}, msgAndArgs ...interface{}) { // Nilf asserts that the specified object is nil. // -// assert.Nilf(t, err, "error message %s", "formatted") +// require.Nilf(t, err, "error message %s", "formatted") func Nilf(t TestingT, object interface{}, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1344,8 +1388,8 @@ func NoDirExistsf(t TestingT, path string, msg string, args ...interface{}) { // NoError asserts that a function returned no error (i.e. `nil`). // // actualObj, err := SomeFunction() -// if assert.NoError(t, err) { -// assert.Equal(t, expectedObj, actualObj) +// if require.NoError(t, err) { +// require.Equal(t, expectedObj, actualObj) // } func NoError(t TestingT, err error, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { @@ -1360,8 +1404,8 @@ func NoError(t TestingT, err error, msgAndArgs ...interface{}) { // NoErrorf asserts that a function returned no error (i.e. `nil`). // // actualObj, err := SomeFunction() -// if assert.NoErrorf(t, err, "error message %s", "formatted") { -// assert.Equal(t, expectedObj, actualObj) +// if require.NoErrorf(t, err, "error message %s", "formatted") { +// require.Equal(t, expectedObj, actualObj) // } func NoErrorf(t TestingT, err error, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { @@ -1400,9 +1444,9 @@ func NoFileExistsf(t TestingT, path string, msg string, args ...interface{}) { // NotContains asserts that the specified string, list(array, slice...) or map does NOT contain the // specified substring or element. // -// assert.NotContains(t, "Hello World", "Earth") -// assert.NotContains(t, ["Hello", "World"], "Earth") -// assert.NotContains(t, {"Hello": "World"}, "Earth") +// require.NotContains(t, "Hello World", "Earth") +// require.NotContains(t, ["Hello", "World"], "Earth") +// require.NotContains(t, {"Hello": "World"}, "Earth") func NotContains(t TestingT, s interface{}, contains interface{}, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1416,9 +1460,9 @@ func NotContains(t TestingT, s interface{}, contains interface{}, msgAndArgs ... // NotContainsf asserts that the specified string, list(array, slice...) or map does NOT contain the // specified substring or element. // -// assert.NotContainsf(t, "Hello World", "Earth", "error message %s", "formatted") -// assert.NotContainsf(t, ["Hello", "World"], "Earth", "error message %s", "formatted") -// assert.NotContainsf(t, {"Hello": "World"}, "Earth", "error message %s", "formatted") +// require.NotContainsf(t, "Hello World", "Earth", "error message %s", "formatted") +// require.NotContainsf(t, ["Hello", "World"], "Earth", "error message %s", "formatted") +// require.NotContainsf(t, {"Hello": "World"}, "Earth", "error message %s", "formatted") func NotContainsf(t TestingT, s interface{}, contains interface{}, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1429,11 +1473,50 @@ func NotContainsf(t TestingT, s interface{}, contains interface{}, msg string, a t.FailNow() } -// NotEmpty asserts that the specified object is NOT empty. I.e. not nil, "", false, 0 or either -// a slice or a channel with len == 0. +// NotElementsMatch asserts that the specified listA(array, slice...) is NOT equal to specified +// listB(array, slice...) ignoring the order of the elements. If there are duplicate elements, +// the number of appearances of each of them in both lists should not match. +// This is an inverse of ElementsMatch. +// +// require.NotElementsMatch(t, [1, 1, 2, 3], [1, 1, 2, 3]) -> false +// +// require.NotElementsMatch(t, [1, 1, 2, 3], [1, 2, 3]) -> true +// +// require.NotElementsMatch(t, [1, 2, 3], [1, 2, 4]) -> true +func NotElementsMatch(t TestingT, listA interface{}, listB interface{}, msgAndArgs ...interface{}) { + if h, ok := t.(tHelper); ok { + h.Helper() + } + if assert.NotElementsMatch(t, listA, listB, msgAndArgs...) { + return + } + t.FailNow() +} + +// NotElementsMatchf asserts that the specified listA(array, slice...) is NOT equal to specified +// listB(array, slice...) ignoring the order of the elements. If there are duplicate elements, +// the number of appearances of each of them in both lists should not match. +// This is an inverse of ElementsMatch. +// +// require.NotElementsMatchf(t, [1, 1, 2, 3], [1, 1, 2, 3], "error message %s", "formatted") -> false +// +// require.NotElementsMatchf(t, [1, 1, 2, 3], [1, 2, 3], "error message %s", "formatted") -> true +// +// require.NotElementsMatchf(t, [1, 2, 3], [1, 2, 4], "error message %s", "formatted") -> true +func NotElementsMatchf(t TestingT, listA interface{}, listB interface{}, msg string, args ...interface{}) { + if h, ok := t.(tHelper); ok { + h.Helper() + } + if assert.NotElementsMatchf(t, listA, listB, msg, args...) { + return + } + t.FailNow() +} + +// NotEmpty asserts that the specified object is NOT [Empty]. // -// if assert.NotEmpty(t, obj) { -// assert.Equal(t, "two", obj[1]) +// if require.NotEmpty(t, obj) { +// require.Equal(t, "two", obj[1]) // } func NotEmpty(t TestingT, object interface{}, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { @@ -1445,11 +1528,10 @@ func NotEmpty(t TestingT, object interface{}, msgAndArgs ...interface{}) { t.FailNow() } -// NotEmptyf asserts that the specified object is NOT empty. I.e. not nil, "", false, 0 or either -// a slice or a channel with len == 0. +// NotEmptyf asserts that the specified object is NOT [Empty]. // -// if assert.NotEmptyf(t, obj, "error message %s", "formatted") { -// assert.Equal(t, "two", obj[1]) +// if require.NotEmptyf(t, obj, "error message %s", "formatted") { +// require.Equal(t, "two", obj[1]) // } func NotEmptyf(t TestingT, object interface{}, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { @@ -1463,7 +1545,7 @@ func NotEmptyf(t TestingT, object interface{}, msg string, args ...interface{}) // NotEqual asserts that the specified values are NOT equal. // -// assert.NotEqual(t, obj1, obj2) +// require.NotEqual(t, obj1, obj2) // // Pointer variable equality is determined based on the equality of the // referenced values (as opposed to the memory addresses). @@ -1479,7 +1561,7 @@ func NotEqual(t TestingT, expected interface{}, actual interface{}, msgAndArgs . // NotEqualValues asserts that two objects are not equal even when converted to the same type // -// assert.NotEqualValues(t, obj1, obj2) +// require.NotEqualValues(t, obj1, obj2) func NotEqualValues(t TestingT, expected interface{}, actual interface{}, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1492,7 +1574,7 @@ func NotEqualValues(t TestingT, expected interface{}, actual interface{}, msgAnd // NotEqualValuesf asserts that two objects are not equal even when converted to the same type // -// assert.NotEqualValuesf(t, obj1, obj2, "error message %s", "formatted") +// require.NotEqualValuesf(t, obj1, obj2, "error message %s", "formatted") func NotEqualValuesf(t TestingT, expected interface{}, actual interface{}, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1505,7 +1587,7 @@ func NotEqualValuesf(t TestingT, expected interface{}, actual interface{}, msg s // NotEqualf asserts that the specified values are NOT equal. // -// assert.NotEqualf(t, obj1, obj2, "error message %s", "formatted") +// require.NotEqualf(t, obj1, obj2, "error message %s", "formatted") // // Pointer variable equality is determined based on the equality of the // referenced values (as opposed to the memory addresses). @@ -1519,7 +1601,31 @@ func NotEqualf(t TestingT, expected interface{}, actual interface{}, msg string, t.FailNow() } -// NotErrorIs asserts that at none of the errors in err's chain matches target. +// NotErrorAs asserts that none of the errors in err's chain matches target, +// but if so, sets target to that error value. +func NotErrorAs(t TestingT, err error, target interface{}, msgAndArgs ...interface{}) { + if h, ok := t.(tHelper); ok { + h.Helper() + } + if assert.NotErrorAs(t, err, target, msgAndArgs...) { + return + } + t.FailNow() +} + +// NotErrorAsf asserts that none of the errors in err's chain matches target, +// but if so, sets target to that error value. +func NotErrorAsf(t TestingT, err error, target interface{}, msg string, args ...interface{}) { + if h, ok := t.(tHelper); ok { + h.Helper() + } + if assert.NotErrorAsf(t, err, target, msg, args...) { + return + } + t.FailNow() +} + +// NotErrorIs asserts that none of the errors in err's chain matches target. // This is a wrapper for errors.Is. func NotErrorIs(t TestingT, err error, target error, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { @@ -1531,7 +1637,7 @@ func NotErrorIs(t TestingT, err error, target error, msgAndArgs ...interface{}) t.FailNow() } -// NotErrorIsf asserts that at none of the errors in err's chain matches target. +// NotErrorIsf asserts that none of the errors in err's chain matches target. // This is a wrapper for errors.Is. func NotErrorIsf(t TestingT, err error, target error, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { @@ -1545,7 +1651,7 @@ func NotErrorIsf(t TestingT, err error, target error, msg string, args ...interf // NotImplements asserts that an object does not implement the specified interface. // -// assert.NotImplements(t, (*MyInterface)(nil), new(MyObject)) +// require.NotImplements(t, (*MyInterface)(nil), new(MyObject)) func NotImplements(t TestingT, interfaceObject interface{}, object interface{}, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1558,7 +1664,7 @@ func NotImplements(t TestingT, interfaceObject interface{}, object interface{}, // NotImplementsf asserts that an object does not implement the specified interface. // -// assert.NotImplementsf(t, (*MyInterface)(nil), new(MyObject), "error message %s", "formatted") +// require.NotImplementsf(t, (*MyInterface)(nil), new(MyObject), "error message %s", "formatted") func NotImplementsf(t TestingT, interfaceObject interface{}, object interface{}, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1571,7 +1677,7 @@ func NotImplementsf(t TestingT, interfaceObject interface{}, object interface{}, // NotNil asserts that the specified object is not nil. // -// assert.NotNil(t, err) +// require.NotNil(t, err) func NotNil(t TestingT, object interface{}, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1584,7 +1690,7 @@ func NotNil(t TestingT, object interface{}, msgAndArgs ...interface{}) { // NotNilf asserts that the specified object is not nil. // -// assert.NotNilf(t, err, "error message %s", "formatted") +// require.NotNilf(t, err, "error message %s", "formatted") func NotNilf(t TestingT, object interface{}, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1597,7 +1703,7 @@ func NotNilf(t TestingT, object interface{}, msg string, args ...interface{}) { // NotPanics asserts that the code inside the specified PanicTestFunc does NOT panic. // -// assert.NotPanics(t, func(){ RemainCalm() }) +// require.NotPanics(t, func(){ RemainCalm() }) func NotPanics(t TestingT, f assert.PanicTestFunc, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1610,7 +1716,7 @@ func NotPanics(t TestingT, f assert.PanicTestFunc, msgAndArgs ...interface{}) { // NotPanicsf asserts that the code inside the specified PanicTestFunc does NOT panic. // -// assert.NotPanicsf(t, func(){ RemainCalm() }, "error message %s", "formatted") +// require.NotPanicsf(t, func(){ RemainCalm() }, "error message %s", "formatted") func NotPanicsf(t TestingT, f assert.PanicTestFunc, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1623,8 +1729,8 @@ func NotPanicsf(t TestingT, f assert.PanicTestFunc, msg string, args ...interfac // NotRegexp asserts that a specified regexp does not match a string. // -// assert.NotRegexp(t, regexp.MustCompile("starts"), "it's starting") -// assert.NotRegexp(t, "^start", "it's not starting") +// require.NotRegexp(t, regexp.MustCompile("starts"), "it's starting") +// require.NotRegexp(t, "^start", "it's not starting") func NotRegexp(t TestingT, rx interface{}, str interface{}, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1637,8 +1743,8 @@ func NotRegexp(t TestingT, rx interface{}, str interface{}, msgAndArgs ...interf // NotRegexpf asserts that a specified regexp does not match a string. // -// assert.NotRegexpf(t, regexp.MustCompile("starts"), "it's starting", "error message %s", "formatted") -// assert.NotRegexpf(t, "^start", "it's not starting", "error message %s", "formatted") +// require.NotRegexpf(t, regexp.MustCompile("starts"), "it's starting", "error message %s", "formatted") +// require.NotRegexpf(t, "^start", "it's not starting", "error message %s", "formatted") func NotRegexpf(t TestingT, rx interface{}, str interface{}, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1651,7 +1757,7 @@ func NotRegexpf(t TestingT, rx interface{}, str interface{}, msg string, args .. // NotSame asserts that two pointers do not reference the same object. // -// assert.NotSame(t, ptr1, ptr2) +// require.NotSame(t, ptr1, ptr2) // // Both arguments must be pointer variables. Pointer variable sameness is // determined based on the equality of both type and value. @@ -1667,7 +1773,7 @@ func NotSame(t TestingT, expected interface{}, actual interface{}, msgAndArgs .. // NotSamef asserts that two pointers do not reference the same object. // -// assert.NotSamef(t, ptr1, ptr2, "error message %s", "formatted") +// require.NotSamef(t, ptr1, ptr2, "error message %s", "formatted") // // Both arguments must be pointer variables. Pointer variable sameness is // determined based on the equality of both type and value. @@ -1681,12 +1787,15 @@ func NotSamef(t TestingT, expected interface{}, actual interface{}, msg string, t.FailNow() } -// NotSubset asserts that the specified list(array, slice...) or map does NOT -// contain all elements given in the specified subset list(array, slice...) or -// map. +// NotSubset asserts that the list (array, slice, or map) does NOT contain all +// elements given in the subset (array, slice, or map). +// Map elements are key-value pairs unless compared with an array or slice where +// only the map key is evaluated. // -// assert.NotSubset(t, [1, 3, 4], [1, 2]) -// assert.NotSubset(t, {"x": 1, "y": 2}, {"z": 3}) +// require.NotSubset(t, [1, 3, 4], [1, 2]) +// require.NotSubset(t, {"x": 1, "y": 2}, {"z": 3}) +// require.NotSubset(t, [1, 3, 4], {1: "one", 2: "two"}) +// require.NotSubset(t, {"x": 1, "y": 2}, ["z"]) func NotSubset(t TestingT, list interface{}, subset interface{}, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1697,12 +1806,15 @@ func NotSubset(t TestingT, list interface{}, subset interface{}, msgAndArgs ...i t.FailNow() } -// NotSubsetf asserts that the specified list(array, slice...) or map does NOT -// contain all elements given in the specified subset list(array, slice...) or -// map. +// NotSubsetf asserts that the list (array, slice, or map) does NOT contain all +// elements given in the subset (array, slice, or map). +// Map elements are key-value pairs unless compared with an array or slice where +// only the map key is evaluated. // -// assert.NotSubsetf(t, [1, 3, 4], [1, 2], "error message %s", "formatted") -// assert.NotSubsetf(t, {"x": 1, "y": 2}, {"z": 3}, "error message %s", "formatted") +// require.NotSubsetf(t, [1, 3, 4], [1, 2], "error message %s", "formatted") +// require.NotSubsetf(t, {"x": 1, "y": 2}, {"z": 3}, "error message %s", "formatted") +// require.NotSubsetf(t, [1, 3, 4], {1: "one", 2: "two"}, "error message %s", "formatted") +// require.NotSubsetf(t, {"x": 1, "y": 2}, ["z"], "error message %s", "formatted") func NotSubsetf(t TestingT, list interface{}, subset interface{}, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1737,7 +1849,7 @@ func NotZerof(t TestingT, i interface{}, msg string, args ...interface{}) { // Panics asserts that the code inside the specified PanicTestFunc panics. // -// assert.Panics(t, func(){ GoCrazy() }) +// require.Panics(t, func(){ GoCrazy() }) func Panics(t TestingT, f assert.PanicTestFunc, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1752,7 +1864,7 @@ func Panics(t TestingT, f assert.PanicTestFunc, msgAndArgs ...interface{}) { // panics, and that the recovered panic value is an error that satisfies the // EqualError comparison. // -// assert.PanicsWithError(t, "crazy error", func(){ GoCrazy() }) +// require.PanicsWithError(t, "crazy error", func(){ GoCrazy() }) func PanicsWithError(t TestingT, errString string, f assert.PanicTestFunc, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1767,7 +1879,7 @@ func PanicsWithError(t TestingT, errString string, f assert.PanicTestFunc, msgAn // panics, and that the recovered panic value is an error that satisfies the // EqualError comparison. // -// assert.PanicsWithErrorf(t, "crazy error", func(){ GoCrazy() }, "error message %s", "formatted") +// require.PanicsWithErrorf(t, "crazy error", func(){ GoCrazy() }, "error message %s", "formatted") func PanicsWithErrorf(t TestingT, errString string, f assert.PanicTestFunc, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1781,7 +1893,7 @@ func PanicsWithErrorf(t TestingT, errString string, f assert.PanicTestFunc, msg // PanicsWithValue asserts that the code inside the specified PanicTestFunc panics, and that // the recovered panic value equals the expected panic value. // -// assert.PanicsWithValue(t, "crazy error", func(){ GoCrazy() }) +// require.PanicsWithValue(t, "crazy error", func(){ GoCrazy() }) func PanicsWithValue(t TestingT, expected interface{}, f assert.PanicTestFunc, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1795,7 +1907,7 @@ func PanicsWithValue(t TestingT, expected interface{}, f assert.PanicTestFunc, m // PanicsWithValuef asserts that the code inside the specified PanicTestFunc panics, and that // the recovered panic value equals the expected panic value. // -// assert.PanicsWithValuef(t, "crazy error", func(){ GoCrazy() }, "error message %s", "formatted") +// require.PanicsWithValuef(t, "crazy error", func(){ GoCrazy() }, "error message %s", "formatted") func PanicsWithValuef(t TestingT, expected interface{}, f assert.PanicTestFunc, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1808,7 +1920,7 @@ func PanicsWithValuef(t TestingT, expected interface{}, f assert.PanicTestFunc, // Panicsf asserts that the code inside the specified PanicTestFunc panics. // -// assert.Panicsf(t, func(){ GoCrazy() }, "error message %s", "formatted") +// require.Panicsf(t, func(){ GoCrazy() }, "error message %s", "formatted") func Panicsf(t TestingT, f assert.PanicTestFunc, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1821,8 +1933,8 @@ func Panicsf(t TestingT, f assert.PanicTestFunc, msg string, args ...interface{} // Positive asserts that the specified element is positive // -// assert.Positive(t, 1) -// assert.Positive(t, 1.23) +// require.Positive(t, 1) +// require.Positive(t, 1.23) func Positive(t TestingT, e interface{}, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1835,8 +1947,8 @@ func Positive(t TestingT, e interface{}, msgAndArgs ...interface{}) { // Positivef asserts that the specified element is positive // -// assert.Positivef(t, 1, "error message %s", "formatted") -// assert.Positivef(t, 1.23, "error message %s", "formatted") +// require.Positivef(t, 1, "error message %s", "formatted") +// require.Positivef(t, 1.23, "error message %s", "formatted") func Positivef(t TestingT, e interface{}, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1849,8 +1961,8 @@ func Positivef(t TestingT, e interface{}, msg string, args ...interface{}) { // Regexp asserts that a specified regexp matches a string. // -// assert.Regexp(t, regexp.MustCompile("start"), "it's starting") -// assert.Regexp(t, "start...$", "it's not starting") +// require.Regexp(t, regexp.MustCompile("start"), "it's starting") +// require.Regexp(t, "start...$", "it's not starting") func Regexp(t TestingT, rx interface{}, str interface{}, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1863,8 +1975,8 @@ func Regexp(t TestingT, rx interface{}, str interface{}, msgAndArgs ...interface // Regexpf asserts that a specified regexp matches a string. // -// assert.Regexpf(t, regexp.MustCompile("start"), "it's starting", "error message %s", "formatted") -// assert.Regexpf(t, "start...$", "it's not starting", "error message %s", "formatted") +// require.Regexpf(t, regexp.MustCompile("start"), "it's starting", "error message %s", "formatted") +// require.Regexpf(t, "start...$", "it's not starting", "error message %s", "formatted") func Regexpf(t TestingT, rx interface{}, str interface{}, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1877,7 +1989,7 @@ func Regexpf(t TestingT, rx interface{}, str interface{}, msg string, args ...in // Same asserts that two pointers reference the same object. // -// assert.Same(t, ptr1, ptr2) +// require.Same(t, ptr1, ptr2) // // Both arguments must be pointer variables. Pointer variable sameness is // determined based on the equality of both type and value. @@ -1893,7 +2005,7 @@ func Same(t TestingT, expected interface{}, actual interface{}, msgAndArgs ...in // Samef asserts that two pointers reference the same object. // -// assert.Samef(t, ptr1, ptr2, "error message %s", "formatted") +// require.Samef(t, ptr1, ptr2, "error message %s", "formatted") // // Both arguments must be pointer variables. Pointer variable sameness is // determined based on the equality of both type and value. @@ -1907,11 +2019,15 @@ func Samef(t TestingT, expected interface{}, actual interface{}, msg string, arg t.FailNow() } -// Subset asserts that the specified list(array, slice...) or map contains all -// elements given in the specified subset list(array, slice...) or map. +// Subset asserts that the list (array, slice, or map) contains all elements +// given in the subset (array, slice, or map). +// Map elements are key-value pairs unless compared with an array or slice where +// only the map key is evaluated. // -// assert.Subset(t, [1, 2, 3], [1, 2]) -// assert.Subset(t, {"x": 1, "y": 2}, {"x": 1}) +// require.Subset(t, [1, 2, 3], [1, 2]) +// require.Subset(t, {"x": 1, "y": 2}, {"x": 1}) +// require.Subset(t, [1, 2, 3], {1: "one", 2: "two"}) +// require.Subset(t, {"x": 1, "y": 2}, ["x"]) func Subset(t TestingT, list interface{}, subset interface{}, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1922,11 +2038,15 @@ func Subset(t TestingT, list interface{}, subset interface{}, msgAndArgs ...inte t.FailNow() } -// Subsetf asserts that the specified list(array, slice...) or map contains all -// elements given in the specified subset list(array, slice...) or map. +// Subsetf asserts that the list (array, slice, or map) contains all elements +// given in the subset (array, slice, or map). +// Map elements are key-value pairs unless compared with an array or slice where +// only the map key is evaluated. // -// assert.Subsetf(t, [1, 2, 3], [1, 2], "error message %s", "formatted") -// assert.Subsetf(t, {"x": 1, "y": 2}, {"x": 1}, "error message %s", "formatted") +// require.Subsetf(t, [1, 2, 3], [1, 2], "error message %s", "formatted") +// require.Subsetf(t, {"x": 1, "y": 2}, {"x": 1}, "error message %s", "formatted") +// require.Subsetf(t, [1, 2, 3], {1: "one", 2: "two"}, "error message %s", "formatted") +// require.Subsetf(t, {"x": 1, "y": 2}, ["x"], "error message %s", "formatted") func Subsetf(t TestingT, list interface{}, subset interface{}, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1939,7 +2059,7 @@ func Subsetf(t TestingT, list interface{}, subset interface{}, msg string, args // True asserts that the specified value is true. // -// assert.True(t, myBool) +// require.True(t, myBool) func True(t TestingT, value bool, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1952,7 +2072,7 @@ func True(t TestingT, value bool, msgAndArgs ...interface{}) { // Truef asserts that the specified value is true. // -// assert.Truef(t, myBool, "error message %s", "formatted") +// require.Truef(t, myBool, "error message %s", "formatted") func Truef(t TestingT, value bool, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1965,7 +2085,7 @@ func Truef(t TestingT, value bool, msg string, args ...interface{}) { // WithinDuration asserts that the two times are within duration delta of each other. // -// assert.WithinDuration(t, time.Now(), time.Now(), 10*time.Second) +// require.WithinDuration(t, time.Now(), time.Now(), 10*time.Second) func WithinDuration(t TestingT, expected time.Time, actual time.Time, delta time.Duration, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1978,7 +2098,7 @@ func WithinDuration(t TestingT, expected time.Time, actual time.Time, delta time // WithinDurationf asserts that the two times are within duration delta of each other. // -// assert.WithinDurationf(t, time.Now(), time.Now(), 10*time.Second, "error message %s", "formatted") +// require.WithinDurationf(t, time.Now(), time.Now(), 10*time.Second, "error message %s", "formatted") func WithinDurationf(t TestingT, expected time.Time, actual time.Time, delta time.Duration, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -1991,7 +2111,7 @@ func WithinDurationf(t TestingT, expected time.Time, actual time.Time, delta tim // WithinRange asserts that a time is within a time range (inclusive). // -// assert.WithinRange(t, time.Now(), time.Now().Add(-time.Second), time.Now().Add(time.Second)) +// require.WithinRange(t, time.Now(), time.Now().Add(-time.Second), time.Now().Add(time.Second)) func WithinRange(t TestingT, actual time.Time, start time.Time, end time.Time, msgAndArgs ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() @@ -2004,7 +2124,7 @@ func WithinRange(t TestingT, actual time.Time, start time.Time, end time.Time, m // WithinRangef asserts that a time is within a time range (inclusive). // -// assert.WithinRangef(t, time.Now(), time.Now().Add(-time.Second), time.Now().Add(time.Second), "error message %s", "formatted") +// require.WithinRangef(t, time.Now(), time.Now().Add(-time.Second), time.Now().Add(time.Second), "error message %s", "formatted") func WithinRangef(t TestingT, actual time.Time, start time.Time, end time.Time, msg string, args ...interface{}) { if h, ok := t.(tHelper); ok { h.Helper() diff --git a/vendor/github.com/stretchr/testify/require/require.go.tmpl b/vendor/github.com/stretchr/testify/require/require.go.tmpl index 55e42ddebd..8b32836850 100644 --- a/vendor/github.com/stretchr/testify/require/require.go.tmpl +++ b/vendor/github.com/stretchr/testify/require/require.go.tmpl @@ -1,4 +1,4 @@ -{{.Comment}} +{{ replace .Comment "assert." "require."}} func {{.DocInfo.Name}}(t TestingT, {{.Params}}) { if h, ok := t.(tHelper); ok { h.Helper() } if assert.{{.DocInfo.Name}}(t, {{.ForwardedParams}}) { return } diff --git a/vendor/github.com/stretchr/testify/require/require_forward.go b/vendor/github.com/stretchr/testify/require/require_forward.go index eee8310a5f..e6f7e94468 100644 --- a/vendor/github.com/stretchr/testify/require/require_forward.go +++ b/vendor/github.com/stretchr/testify/require/require_forward.go @@ -93,10 +93,19 @@ func (a *Assertions) ElementsMatchf(listA interface{}, listB interface{}, msg st ElementsMatchf(a.t, listA, listB, msg, args...) } -// Empty asserts that the specified object is empty. I.e. nil, "", false, 0 or either -// a slice or a channel with len == 0. +// Empty asserts that the given value is "empty". +// +// [Zero values] are "empty". +// +// Arrays are "empty" if every element is the zero value of the type (stricter than "empty"). +// +// Slices, maps and channels with zero length are "empty". +// +// Pointer values are "empty" if the pointer is nil or if the pointed value is "empty". // // a.Empty(obj) +// +// [Zero values]: https://go.dev/ref/spec#The_zero_value func (a *Assertions) Empty(object interface{}, msgAndArgs ...interface{}) { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -104,10 +113,19 @@ func (a *Assertions) Empty(object interface{}, msgAndArgs ...interface{}) { Empty(a.t, object, msgAndArgs...) } -// Emptyf asserts that the specified object is empty. I.e. nil, "", false, 0 or either -// a slice or a channel with len == 0. +// Emptyf asserts that the given value is "empty". +// +// [Zero values] are "empty". +// +// Arrays are "empty" if every element is the zero value of the type (stricter than "empty"). +// +// Slices, maps and channels with zero length are "empty". +// +// Pointer values are "empty" if the pointer is nil or if the pointed value is "empty". // // a.Emptyf(obj, "error message %s", "formatted") +// +// [Zero values]: https://go.dev/ref/spec#The_zero_value func (a *Assertions) Emptyf(object interface{}, msg string, args ...interface{}) { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -187,8 +205,8 @@ func (a *Assertions) EqualExportedValuesf(expected interface{}, actual interface EqualExportedValuesf(a.t, expected, actual, msg, args...) } -// EqualValues asserts that two objects are equal or convertible to the same types -// and equal. +// EqualValues asserts that two objects are equal or convertible to the larger +// type and equal. // // a.EqualValues(uint32(123), int32(123)) func (a *Assertions) EqualValues(expected interface{}, actual interface{}, msgAndArgs ...interface{}) { @@ -198,8 +216,8 @@ func (a *Assertions) EqualValues(expected interface{}, actual interface{}, msgAn EqualValues(a.t, expected, actual, msgAndArgs...) } -// EqualValuesf asserts that two objects are equal or convertible to the same types -// and equal. +// EqualValuesf asserts that two objects are equal or convertible to the larger +// type and equal. // // a.EqualValuesf(uint32(123), int32(123), "error message %s", "formatted") func (a *Assertions) EqualValuesf(expected interface{}, actual interface{}, msg string, args ...interface{}) { @@ -225,10 +243,8 @@ func (a *Assertions) Equalf(expected interface{}, actual interface{}, msg string // Error asserts that a function returned an error (i.e. not `nil`). // -// actualObj, err := SomeFunction() -// if a.Error(err) { -// assert.Equal(t, expectedError, err) -// } +// actualObj, err := SomeFunction() +// a.Error(err) func (a *Assertions) Error(err error, msgAndArgs ...interface{}) { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -298,10 +314,8 @@ func (a *Assertions) ErrorIsf(err error, target error, msg string, args ...inter // Errorf asserts that a function returned an error (i.e. not `nil`). // -// actualObj, err := SomeFunction() -// if a.Errorf(err, "error message %s", "formatted") { -// assert.Equal(t, expectedErrorf, err) -// } +// actualObj, err := SomeFunction() +// a.Errorf(err, "error message %s", "formatted") func (a *Assertions) Errorf(err error, msg string, args ...interface{}) { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -337,7 +351,7 @@ func (a *Assertions) Eventually(condition func() bool, waitFor time.Duration, ti // a.EventuallyWithT(func(c *assert.CollectT) { // // add assertions as needed; any assertion failure will fail the current tick // assert.True(c, externalValue, "expected 'externalValue' to be true") -// }, 1*time.Second, 10*time.Second, "external state has not changed to 'true'; still false") +// }, 10*time.Second, 1*time.Second, "external state has not changed to 'true'; still false") func (a *Assertions) EventuallyWithT(condition func(collect *assert.CollectT), waitFor time.Duration, tick time.Duration, msgAndArgs ...interface{}) { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -362,7 +376,7 @@ func (a *Assertions) EventuallyWithT(condition func(collect *assert.CollectT), w // a.EventuallyWithTf(func(c *assert.CollectT, "error message %s", "formatted") { // // add assertions as needed; any assertion failure will fail the current tick // assert.True(c, externalValue, "expected 'externalValue' to be true") -// }, 1*time.Second, 10*time.Second, "external state has not changed to 'true'; still false") +// }, 10*time.Second, 1*time.Second, "external state has not changed to 'true'; still false") func (a *Assertions) EventuallyWithTf(condition func(collect *assert.CollectT), waitFor time.Duration, tick time.Duration, msg string, args ...interface{}) { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -869,7 +883,29 @@ func (a *Assertions) IsNonIncreasingf(object interface{}, msg string, args ...in IsNonIncreasingf(a.t, object, msg, args...) } +// IsNotType asserts that the specified objects are not of the same type. +// +// a.IsNotType(&NotMyStruct{}, &MyStruct{}) +func (a *Assertions) IsNotType(theType interface{}, object interface{}, msgAndArgs ...interface{}) { + if h, ok := a.t.(tHelper); ok { + h.Helper() + } + IsNotType(a.t, theType, object, msgAndArgs...) +} + +// IsNotTypef asserts that the specified objects are not of the same type. +// +// a.IsNotTypef(&NotMyStruct{}, &MyStruct{}, "error message %s", "formatted") +func (a *Assertions) IsNotTypef(theType interface{}, object interface{}, msg string, args ...interface{}) { + if h, ok := a.t.(tHelper); ok { + h.Helper() + } + IsNotTypef(a.t, theType, object, msg, args...) +} + // IsType asserts that the specified objects are of the same type. +// +// a.IsType(&MyStruct{}, &MyStruct{}) func (a *Assertions) IsType(expectedType interface{}, object interface{}, msgAndArgs ...interface{}) { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -878,6 +914,8 @@ func (a *Assertions) IsType(expectedType interface{}, object interface{}, msgAnd } // IsTypef asserts that the specified objects are of the same type. +// +// a.IsTypef(&MyStruct{}, &MyStruct{}, "error message %s", "formatted") func (a *Assertions) IsTypef(expectedType interface{}, object interface{}, msg string, args ...interface{}) { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -1129,8 +1167,41 @@ func (a *Assertions) NotContainsf(s interface{}, contains interface{}, msg strin NotContainsf(a.t, s, contains, msg, args...) } -// NotEmpty asserts that the specified object is NOT empty. I.e. not nil, "", false, 0 or either -// a slice or a channel with len == 0. +// NotElementsMatch asserts that the specified listA(array, slice...) is NOT equal to specified +// listB(array, slice...) ignoring the order of the elements. If there are duplicate elements, +// the number of appearances of each of them in both lists should not match. +// This is an inverse of ElementsMatch. +// +// a.NotElementsMatch([1, 1, 2, 3], [1, 1, 2, 3]) -> false +// +// a.NotElementsMatch([1, 1, 2, 3], [1, 2, 3]) -> true +// +// a.NotElementsMatch([1, 2, 3], [1, 2, 4]) -> true +func (a *Assertions) NotElementsMatch(listA interface{}, listB interface{}, msgAndArgs ...interface{}) { + if h, ok := a.t.(tHelper); ok { + h.Helper() + } + NotElementsMatch(a.t, listA, listB, msgAndArgs...) +} + +// NotElementsMatchf asserts that the specified listA(array, slice...) is NOT equal to specified +// listB(array, slice...) ignoring the order of the elements. If there are duplicate elements, +// the number of appearances of each of them in both lists should not match. +// This is an inverse of ElementsMatch. +// +// a.NotElementsMatchf([1, 1, 2, 3], [1, 1, 2, 3], "error message %s", "formatted") -> false +// +// a.NotElementsMatchf([1, 1, 2, 3], [1, 2, 3], "error message %s", "formatted") -> true +// +// a.NotElementsMatchf([1, 2, 3], [1, 2, 4], "error message %s", "formatted") -> true +func (a *Assertions) NotElementsMatchf(listA interface{}, listB interface{}, msg string, args ...interface{}) { + if h, ok := a.t.(tHelper); ok { + h.Helper() + } + NotElementsMatchf(a.t, listA, listB, msg, args...) +} + +// NotEmpty asserts that the specified object is NOT [Empty]. // // if a.NotEmpty(obj) { // assert.Equal(t, "two", obj[1]) @@ -1142,8 +1213,7 @@ func (a *Assertions) NotEmpty(object interface{}, msgAndArgs ...interface{}) { NotEmpty(a.t, object, msgAndArgs...) } -// NotEmptyf asserts that the specified object is NOT empty. I.e. not nil, "", false, 0 or either -// a slice or a channel with len == 0. +// NotEmptyf asserts that the specified object is NOT [Empty]. // // if a.NotEmptyf(obj, "error message %s", "formatted") { // assert.Equal(t, "two", obj[1]) @@ -1201,7 +1271,25 @@ func (a *Assertions) NotEqualf(expected interface{}, actual interface{}, msg str NotEqualf(a.t, expected, actual, msg, args...) } -// NotErrorIs asserts that at none of the errors in err's chain matches target. +// NotErrorAs asserts that none of the errors in err's chain matches target, +// but if so, sets target to that error value. +func (a *Assertions) NotErrorAs(err error, target interface{}, msgAndArgs ...interface{}) { + if h, ok := a.t.(tHelper); ok { + h.Helper() + } + NotErrorAs(a.t, err, target, msgAndArgs...) +} + +// NotErrorAsf asserts that none of the errors in err's chain matches target, +// but if so, sets target to that error value. +func (a *Assertions) NotErrorAsf(err error, target interface{}, msg string, args ...interface{}) { + if h, ok := a.t.(tHelper); ok { + h.Helper() + } + NotErrorAsf(a.t, err, target, msg, args...) +} + +// NotErrorIs asserts that none of the errors in err's chain matches target. // This is a wrapper for errors.Is. func (a *Assertions) NotErrorIs(err error, target error, msgAndArgs ...interface{}) { if h, ok := a.t.(tHelper); ok { @@ -1210,7 +1298,7 @@ func (a *Assertions) NotErrorIs(err error, target error, msgAndArgs ...interface NotErrorIs(a.t, err, target, msgAndArgs...) } -// NotErrorIsf asserts that at none of the errors in err's chain matches target. +// NotErrorIsf asserts that none of the errors in err's chain matches target. // This is a wrapper for errors.Is. func (a *Assertions) NotErrorIsf(err error, target error, msg string, args ...interface{}) { if h, ok := a.t.(tHelper); ok { @@ -1327,12 +1415,15 @@ func (a *Assertions) NotSamef(expected interface{}, actual interface{}, msg stri NotSamef(a.t, expected, actual, msg, args...) } -// NotSubset asserts that the specified list(array, slice...) or map does NOT -// contain all elements given in the specified subset list(array, slice...) or -// map. +// NotSubset asserts that the list (array, slice, or map) does NOT contain all +// elements given in the subset (array, slice, or map). +// Map elements are key-value pairs unless compared with an array or slice where +// only the map key is evaluated. // // a.NotSubset([1, 3, 4], [1, 2]) // a.NotSubset({"x": 1, "y": 2}, {"z": 3}) +// a.NotSubset([1, 3, 4], {1: "one", 2: "two"}) +// a.NotSubset({"x": 1, "y": 2}, ["z"]) func (a *Assertions) NotSubset(list interface{}, subset interface{}, msgAndArgs ...interface{}) { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -1340,12 +1431,15 @@ func (a *Assertions) NotSubset(list interface{}, subset interface{}, msgAndArgs NotSubset(a.t, list, subset, msgAndArgs...) } -// NotSubsetf asserts that the specified list(array, slice...) or map does NOT -// contain all elements given in the specified subset list(array, slice...) or -// map. +// NotSubsetf asserts that the list (array, slice, or map) does NOT contain all +// elements given in the subset (array, slice, or map). +// Map elements are key-value pairs unless compared with an array or slice where +// only the map key is evaluated. // // a.NotSubsetf([1, 3, 4], [1, 2], "error message %s", "formatted") // a.NotSubsetf({"x": 1, "y": 2}, {"z": 3}, "error message %s", "formatted") +// a.NotSubsetf([1, 3, 4], {1: "one", 2: "two"}, "error message %s", "formatted") +// a.NotSubsetf({"x": 1, "y": 2}, ["z"], "error message %s", "formatted") func (a *Assertions) NotSubsetf(list interface{}, subset interface{}, msg string, args ...interface{}) { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -1505,11 +1599,15 @@ func (a *Assertions) Samef(expected interface{}, actual interface{}, msg string, Samef(a.t, expected, actual, msg, args...) } -// Subset asserts that the specified list(array, slice...) or map contains all -// elements given in the specified subset list(array, slice...) or map. +// Subset asserts that the list (array, slice, or map) contains all elements +// given in the subset (array, slice, or map). +// Map elements are key-value pairs unless compared with an array or slice where +// only the map key is evaluated. // // a.Subset([1, 2, 3], [1, 2]) // a.Subset({"x": 1, "y": 2}, {"x": 1}) +// a.Subset([1, 2, 3], {1: "one", 2: "two"}) +// a.Subset({"x": 1, "y": 2}, ["x"]) func (a *Assertions) Subset(list interface{}, subset interface{}, msgAndArgs ...interface{}) { if h, ok := a.t.(tHelper); ok { h.Helper() @@ -1517,11 +1615,15 @@ func (a *Assertions) Subset(list interface{}, subset interface{}, msgAndArgs ... Subset(a.t, list, subset, msgAndArgs...) } -// Subsetf asserts that the specified list(array, slice...) or map contains all -// elements given in the specified subset list(array, slice...) or map. +// Subsetf asserts that the list (array, slice, or map) contains all elements +// given in the subset (array, slice, or map). +// Map elements are key-value pairs unless compared with an array or slice where +// only the map key is evaluated. // // a.Subsetf([1, 2, 3], [1, 2], "error message %s", "formatted") // a.Subsetf({"x": 1, "y": 2}, {"x": 1}, "error message %s", "formatted") +// a.Subsetf([1, 2, 3], {1: "one", 2: "two"}, "error message %s", "formatted") +// a.Subsetf({"x": 1, "y": 2}, ["x"], "error message %s", "formatted") func (a *Assertions) Subsetf(list interface{}, subset interface{}, msg string, args ...interface{}) { if h, ok := a.t.(tHelper); ok { h.Helper() diff --git a/vendor/github.com/stretchr/testify/require/requirements.go b/vendor/github.com/stretchr/testify/require/requirements.go index 91772dfeb9..6b7ce929eb 100644 --- a/vendor/github.com/stretchr/testify/require/requirements.go +++ b/vendor/github.com/stretchr/testify/require/requirements.go @@ -6,7 +6,7 @@ type TestingT interface { FailNow() } -type tHelper interface { +type tHelper = interface { Helper() } diff --git a/vendor/github.com/stretchr/testify/suite/doc.go b/vendor/github.com/stretchr/testify/suite/doc.go index 8d55a3aa89..05a562f721 100644 --- a/vendor/github.com/stretchr/testify/suite/doc.go +++ b/vendor/github.com/stretchr/testify/suite/doc.go @@ -5,6 +5,8 @@ // or individual tests (depending on which interface(s) you // implement). // +// The suite package does not support parallel tests. See [issue 934]. +// // A testing suite is usually built by first extending the built-in // suite functionality from suite.Suite in testify. Alternatively, // you could reproduce that logic on your own if you wanted (you @@ -63,4 +65,6 @@ // func TestExampleTestSuite(t *testing.T) { // suite.Run(t, new(ExampleTestSuite)) // } +// +// [issue 934]: https://github.com/stretchr/testify/issues/934 package suite diff --git a/vendor/github.com/stretchr/testify/suite/stats.go b/vendor/github.com/stretchr/testify/suite/stats.go index 261da37f78..be4ccd6799 100644 --- a/vendor/github.com/stretchr/testify/suite/stats.go +++ b/vendor/github.com/stretchr/testify/suite/stats.go @@ -16,26 +16,30 @@ type TestInformation struct { } func newSuiteInformation() *SuiteInformation { - testStats := make(map[string]*TestInformation) - return &SuiteInformation{ - TestStats: testStats, + TestStats: make(map[string]*TestInformation), } } -func (s SuiteInformation) start(testName string) { +func (s *SuiteInformation) start(testName string) { + if s == nil { + return + } s.TestStats[testName] = &TestInformation{ TestName: testName, Start: time.Now(), } } -func (s SuiteInformation) end(testName string, passed bool) { +func (s *SuiteInformation) end(testName string, passed bool) { + if s == nil { + return + } s.TestStats[testName].End = time.Now() s.TestStats[testName].Passed = passed } -func (s SuiteInformation) Passed() bool { +func (s *SuiteInformation) Passed() bool { for _, stats := range s.TestStats { if !stats.Passed { return false diff --git a/vendor/github.com/stretchr/testify/suite/suite.go b/vendor/github.com/stretchr/testify/suite/suite.go index 18443a91c8..1b19be3bcd 100644 --- a/vendor/github.com/stretchr/testify/suite/suite.go +++ b/vendor/github.com/stretchr/testify/suite/suite.go @@ -7,6 +7,7 @@ import ( "reflect" "regexp" "runtime/debug" + "strings" "sync" "testing" "time" @@ -15,7 +16,6 @@ import ( "github.com/stretchr/testify/require" ) -var allTestsFilter = func(_, _ string) (bool, error) { return true, nil } var matchMethod = flag.String("testify.m", "", "regular expression to select tests of the testify suite to run") // Suite is a basic testing suite with methods for storing and @@ -116,6 +116,11 @@ func (suite *Suite) Run(name string, subtest func()) bool { }) } +type test = struct { + name string + run func(t *testing.T) +} + // Run takes a testing suite and runs all of the tests attached // to it. func Run(t *testing.T, suite TestingSuite) { @@ -124,45 +129,39 @@ func Run(t *testing.T, suite TestingSuite) { suite.SetT(t) suite.SetS(suite) - var suiteSetupDone bool - var stats *SuiteInformation if _, ok := suite.(WithStats); ok { stats = newSuiteInformation() } - tests := []testing.InternalTest{} + var tests []test methodFinder := reflect.TypeOf(suite) suiteName := methodFinder.Elem().Name() - for i := 0; i < methodFinder.NumMethod(); i++ { - method := methodFinder.Method(i) - - ok, err := methodFilter(method.Name) + var matchMethodRE *regexp.Regexp + if *matchMethod != "" { + var err error + matchMethodRE, err = regexp.Compile(*matchMethod) if err != nil { fmt.Fprintf(os.Stderr, "testify: invalid regexp for -m: %s\n", err) os.Exit(1) } + } - if !ok { + for i := 0; i < methodFinder.NumMethod(); i++ { + method := methodFinder.Method(i) + + if !strings.HasPrefix(method.Name, "Test") { continue } - - if !suiteSetupDone { - if stats != nil { - stats.Start = time.Now() - } - - if setupAllSuite, ok := suite.(SetupAllSuite); ok { - setupAllSuite.SetupSuite() - } - - suiteSetupDone = true + // Apply -testify.m filter + if matchMethodRE != nil && !matchMethodRE.MatchString(method.Name) { + continue } - test := testing.InternalTest{ - Name: method.Name, - F: func(t *testing.T) { + test := test{ + name: method.Name, + run: func(t *testing.T) { parentT := suite.T() suite.SetT(t) defer recoverAndFailOnPanic(t) @@ -171,10 +170,7 @@ func Run(t *testing.T, suite TestingSuite) { r := recover() - if stats != nil { - passed := !t.Failed() && r == nil - stats.end(method.Name, passed) - } + stats.end(method.Name, !t.Failed() && r == nil) if afterTestSuite, ok := suite.(AfterTest); ok { afterTestSuite.AfterTest(suiteName, method.Name) @@ -195,59 +191,47 @@ func Run(t *testing.T, suite TestingSuite) { beforeTestSuite.BeforeTest(methodFinder.Elem().Name(), method.Name) } - if stats != nil { - stats.start(method.Name) - } + stats.start(method.Name) method.Func.Call([]reflect.Value{reflect.ValueOf(suite)}) }, } tests = append(tests, test) } - if suiteSetupDone { - defer func() { - if tearDownAllSuite, ok := suite.(TearDownAllSuite); ok { - tearDownAllSuite.TearDownSuite() - } - - if suiteWithStats, measureStats := suite.(WithStats); measureStats { - stats.End = time.Now() - suiteWithStats.HandleStats(suiteName, stats) - } - }() + + if len(tests) == 0 { + return } - runTests(t, tests) -} + if stats != nil { + stats.Start = time.Now() + } -// Filtering method according to set regular expression -// specified command-line argument -m -func methodFilter(name string) (bool, error) { - if ok, _ := regexp.MatchString("^Test", name); !ok { - return false, nil + if setupAllSuite, ok := suite.(SetupAllSuite); ok { + setupAllSuite.SetupSuite() } - return regexp.MatchString(*matchMethod, name) + + defer func() { + if tearDownAllSuite, ok := suite.(TearDownAllSuite); ok { + tearDownAllSuite.TearDownSuite() + } + + if suiteWithStats, measureStats := suite.(WithStats); measureStats { + stats.End = time.Now() + suiteWithStats.HandleStats(suiteName, stats) + } + }() + + runTests(t, tests) } -func runTests(t testing.TB, tests []testing.InternalTest) { +func runTests(t *testing.T, tests []test) { if len(tests) == 0 { t.Log("warning: no tests to run") return } - r, ok := t.(runner) - if !ok { // backwards compatibility with Go 1.6 and below - if !testing.RunTests(allTestsFilter, tests) { - t.Fail() - } - return - } - for _, test := range tests { - r.Run(test.Name, test.F) + t.Run(test.name, test.run) } } - -type runner interface { - Run(name string, f func(t *testing.T)) bool -} diff --git a/vendor/github.com/vektah/gqlparser/v2/LICENSE b/vendor/github.com/vektah/gqlparser/v2/LICENSE new file mode 100644 index 0000000000..1221b9d389 --- /dev/null +++ b/vendor/github.com/vektah/gqlparser/v2/LICENSE @@ -0,0 +1,19 @@ +Copyright (c) 2018 Adam Scarr + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/vendor/github.com/vektah/gqlparser/v2/ast/argmap.go b/vendor/github.com/vektah/gqlparser/v2/ast/argmap.go new file mode 100644 index 0000000000..43f6a3d6fc --- /dev/null +++ b/vendor/github.com/vektah/gqlparser/v2/ast/argmap.go @@ -0,0 +1,37 @@ +package ast + +func arg2map(defs ArgumentDefinitionList, args ArgumentList, vars map[string]interface{}) map[string]interface{} { + result := map[string]interface{}{} + var err error + + for _, argDef := range defs { + var val interface{} + var hasValue bool + + if argValue := args.ForName(argDef.Name); argValue != nil { + if argValue.Value.Kind == Variable { + val, hasValue = vars[argValue.Value.Raw] + } else { + val, err = argValue.Value.Value(vars) + if err != nil { + panic(err) + } + hasValue = true + } + } + + if !hasValue && argDef.DefaultValue != nil { + val, err = argDef.DefaultValue.Value(vars) + if err != nil { + panic(err) + } + hasValue = true + } + + if hasValue { + result[argDef.Name] = val + } + } + + return result +} diff --git a/vendor/github.com/vektah/gqlparser/v2/ast/collections.go b/vendor/github.com/vektah/gqlparser/v2/ast/collections.go new file mode 100644 index 0000000000..94b800ee26 --- /dev/null +++ b/vendor/github.com/vektah/gqlparser/v2/ast/collections.go @@ -0,0 +1,148 @@ +package ast + +type FieldList []*FieldDefinition + +func (l FieldList) ForName(name string) *FieldDefinition { + for _, it := range l { + if it.Name == name { + return it + } + } + return nil +} + +type EnumValueList []*EnumValueDefinition + +func (l EnumValueList) ForName(name string) *EnumValueDefinition { + for _, it := range l { + if it.Name == name { + return it + } + } + return nil +} + +type DirectiveList []*Directive + +func (l DirectiveList) ForName(name string) *Directive { + for _, it := range l { + if it.Name == name { + return it + } + } + return nil +} + +func (l DirectiveList) ForNames(name string) []*Directive { + resp := []*Directive{} + for _, it := range l { + if it.Name == name { + resp = append(resp, it) + } + } + return resp +} + +type OperationList []*OperationDefinition + +func (l OperationList) ForName(name string) *OperationDefinition { + if name == "" && len(l) == 1 { + return l[0] + } + for _, it := range l { + if it.Name == name { + return it + } + } + return nil +} + +type FragmentDefinitionList []*FragmentDefinition + +func (l FragmentDefinitionList) ForName(name string) *FragmentDefinition { + for _, it := range l { + if it.Name == name { + return it + } + } + return nil +} + +type VariableDefinitionList []*VariableDefinition + +func (l VariableDefinitionList) ForName(name string) *VariableDefinition { + for _, it := range l { + if it.Variable == name { + return it + } + } + return nil +} + +type ArgumentList []*Argument + +func (l ArgumentList) ForName(name string) *Argument { + for _, it := range l { + if it.Name == name { + return it + } + } + return nil +} + +type ArgumentDefinitionList []*ArgumentDefinition + +func (l ArgumentDefinitionList) ForName(name string) *ArgumentDefinition { + for _, it := range l { + if it.Name == name { + return it + } + } + return nil +} + +type SchemaDefinitionList []*SchemaDefinition + +type DirectiveDefinitionList []*DirectiveDefinition + +func (l DirectiveDefinitionList) ForName(name string) *DirectiveDefinition { + for _, it := range l { + if it.Name == name { + return it + } + } + return nil +} + +type DefinitionList []*Definition + +func (l DefinitionList) ForName(name string) *Definition { + for _, it := range l { + if it.Name == name { + return it + } + } + return nil +} + +type OperationTypeDefinitionList []*OperationTypeDefinition + +func (l OperationTypeDefinitionList) ForType(name string) *OperationTypeDefinition { + for _, it := range l { + if it.Type == name { + return it + } + } + return nil +} + +type ChildValueList []*ChildValue + +func (v ChildValueList) ForName(name string) *Value { + for _, f := range v { + if f.Name == name { + return f.Value + } + } + return nil +} diff --git a/vendor/github.com/vektah/gqlparser/v2/ast/comment.go b/vendor/github.com/vektah/gqlparser/v2/ast/comment.go new file mode 100644 index 0000000000..8fcfda5813 --- /dev/null +++ b/vendor/github.com/vektah/gqlparser/v2/ast/comment.go @@ -0,0 +1,31 @@ +package ast + +import ( + "strconv" + "strings" +) + +type Comment struct { + Value string + Position *Position +} + +func (c *Comment) Text() string { + return strings.TrimPrefix(c.Value, "#") +} + +type CommentGroup struct { + List []*Comment +} + +func (c *CommentGroup) Dump() string { + if len(c.List) == 0 { + return "" + } + var builder strings.Builder + for _, comment := range c.List { + builder.WriteString(comment.Value) + builder.WriteString("\n") + } + return strconv.Quote(builder.String()) +} diff --git a/vendor/github.com/vektah/gqlparser/v2/ast/decode.go b/vendor/github.com/vektah/gqlparser/v2/ast/decode.go new file mode 100644 index 0000000000..c9966b2440 --- /dev/null +++ b/vendor/github.com/vektah/gqlparser/v2/ast/decode.go @@ -0,0 +1,216 @@ +package ast + +import ( + "encoding/json" +) + +func UnmarshalSelectionSet(b []byte) (SelectionSet, error) { + var tmp []json.RawMessage + + if err := json.Unmarshal(b, &tmp); err != nil { + return nil, err + } + + result := make([]Selection, 0) + for _, item := range tmp { + var field Field + if err := json.Unmarshal(item, &field); err == nil { + result = append(result, &field) + continue + } + var fragmentSpread FragmentSpread + if err := json.Unmarshal(item, &fragmentSpread); err == nil { + result = append(result, &fragmentSpread) + continue + } + var inlineFragment InlineFragment + if err := json.Unmarshal(item, &inlineFragment); err == nil { + result = append(result, &inlineFragment) + continue + } + } + + return result, nil +} + +func (f *FragmentDefinition) UnmarshalJSON(b []byte) error { + var tmp map[string]json.RawMessage + if err := json.Unmarshal(b, &tmp); err != nil { + return err + } + for k := range tmp { + switch k { + case "Name": + err := json.Unmarshal(tmp[k], &f.Name) + if err != nil { + return err + } + case "VariableDefinition": + err := json.Unmarshal(tmp[k], &f.VariableDefinition) + if err != nil { + return err + } + case "TypeCondition": + err := json.Unmarshal(tmp[k], &f.TypeCondition) + if err != nil { + return err + } + case "Directives": + err := json.Unmarshal(tmp[k], &f.Directives) + if err != nil { + return err + } + case "SelectionSet": + ss, err := UnmarshalSelectionSet(tmp[k]) + if err != nil { + return err + } + f.SelectionSet = ss + case "Definition": + err := json.Unmarshal(tmp[k], &f.Definition) + if err != nil { + return err + } + case "Position": + err := json.Unmarshal(tmp[k], &f.Position) + if err != nil { + return err + } + } + } + return nil +} + +func (f *InlineFragment) UnmarshalJSON(b []byte) error { + var tmp map[string]json.RawMessage + if err := json.Unmarshal(b, &tmp); err != nil { + return err + } + for k := range tmp { + switch k { + case "TypeCondition": + err := json.Unmarshal(tmp[k], &f.TypeCondition) + if err != nil { + return err + } + case "Directives": + err := json.Unmarshal(tmp[k], &f.Directives) + if err != nil { + return err + } + case "SelectionSet": + ss, err := UnmarshalSelectionSet(tmp[k]) + if err != nil { + return err + } + f.SelectionSet = ss + case "ObjectDefinition": + err := json.Unmarshal(tmp[k], &f.ObjectDefinition) + if err != nil { + return err + } + case "Position": + err := json.Unmarshal(tmp[k], &f.Position) + if err != nil { + return err + } + } + } + return nil +} + +func (f *OperationDefinition) UnmarshalJSON(b []byte) error { + var tmp map[string]json.RawMessage + if err := json.Unmarshal(b, &tmp); err != nil { + return err + } + for k := range tmp { + switch k { + case "Operation": + err := json.Unmarshal(tmp[k], &f.Operation) + if err != nil { + return err + } + case "Name": + err := json.Unmarshal(tmp[k], &f.Name) + if err != nil { + return err + } + case "VariableDefinitions": + err := json.Unmarshal(tmp[k], &f.VariableDefinitions) + if err != nil { + return err + } + case "Directives": + err := json.Unmarshal(tmp[k], &f.Directives) + if err != nil { + return err + } + case "SelectionSet": + ss, err := UnmarshalSelectionSet(tmp[k]) + if err != nil { + return err + } + f.SelectionSet = ss + case "Position": + err := json.Unmarshal(tmp[k], &f.Position) + if err != nil { + return err + } + } + } + return nil +} + +func (f *Field) UnmarshalJSON(b []byte) error { + var tmp map[string]json.RawMessage + if err := json.Unmarshal(b, &tmp); err != nil { + return err + } + for k := range tmp { + switch k { + case "Alias": + err := json.Unmarshal(tmp[k], &f.Alias) + if err != nil { + return err + } + case "Name": + err := json.Unmarshal(tmp[k], &f.Name) + if err != nil { + return err + } + case "Arguments": + err := json.Unmarshal(tmp[k], &f.Arguments) + if err != nil { + return err + } + case "Directives": + err := json.Unmarshal(tmp[k], &f.Directives) + if err != nil { + return err + } + case "SelectionSet": + ss, err := UnmarshalSelectionSet(tmp[k]) + if err != nil { + return err + } + f.SelectionSet = ss + case "Position": + err := json.Unmarshal(tmp[k], &f.Position) + if err != nil { + return err + } + case "Definition": + err := json.Unmarshal(tmp[k], &f.Definition) + if err != nil { + return err + } + case "ObjectDefinition": + err := json.Unmarshal(tmp[k], &f.ObjectDefinition) + if err != nil { + return err + } + } + } + return nil +} diff --git a/vendor/github.com/vektah/gqlparser/v2/ast/definition.go b/vendor/github.com/vektah/gqlparser/v2/ast/definition.go new file mode 100644 index 0000000000..9ceebf1bee --- /dev/null +++ b/vendor/github.com/vektah/gqlparser/v2/ast/definition.go @@ -0,0 +1,110 @@ +package ast + +type DefinitionKind string + +const ( + Scalar DefinitionKind = "SCALAR" + Object DefinitionKind = "OBJECT" + Interface DefinitionKind = "INTERFACE" + Union DefinitionKind = "UNION" + Enum DefinitionKind = "ENUM" + InputObject DefinitionKind = "INPUT_OBJECT" +) + +// Definition is the core type definition object, it includes all of the definable types +// but does *not* cover schema or directives. +// +// @vektah: Javascript implementation has different types for all of these, but they are +// more similar than different and don't define any behaviour. I think this style of +// "some hot" struct works better, at least for go. +// +// Type extensions are also represented by this same struct. +type Definition struct { + Kind DefinitionKind + Description string + Name string + Directives DirectiveList + Interfaces []string // object and input object + Fields FieldList // object and input object + Types []string // union + EnumValues EnumValueList // enum + + Position *Position `dump:"-" json:"-"` + BuiltIn bool `dump:"-"` + + BeforeDescriptionComment *CommentGroup + AfterDescriptionComment *CommentGroup + EndOfDefinitionComment *CommentGroup +} + +func (d *Definition) IsLeafType() bool { + return d.Kind == Enum || d.Kind == Scalar +} + +func (d *Definition) IsAbstractType() bool { + return d.Kind == Interface || d.Kind == Union +} + +func (d *Definition) IsCompositeType() bool { + return d.Kind == Object || d.Kind == Interface || d.Kind == Union +} + +func (d *Definition) IsInputType() bool { + return d.Kind == Scalar || d.Kind == Enum || d.Kind == InputObject +} + +func (d *Definition) OneOf(types ...string) bool { + for _, t := range types { + if d.Name == t { + return true + } + } + return false +} + +type FieldDefinition struct { + Description string + Name string + Arguments ArgumentDefinitionList // only for objects + DefaultValue *Value // only for input objects + Type *Type + Directives DirectiveList + Position *Position `dump:"-" json:"-"` + + BeforeDescriptionComment *CommentGroup + AfterDescriptionComment *CommentGroup +} + +type ArgumentDefinition struct { + Description string + Name string + DefaultValue *Value + Type *Type + Directives DirectiveList + Position *Position `dump:"-" json:"-"` + + BeforeDescriptionComment *CommentGroup + AfterDescriptionComment *CommentGroup +} + +type EnumValueDefinition struct { + Description string + Name string + Directives DirectiveList + Position *Position `dump:"-" json:"-"` + + BeforeDescriptionComment *CommentGroup + AfterDescriptionComment *CommentGroup +} + +type DirectiveDefinition struct { + Description string + Name string + Arguments ArgumentDefinitionList + Locations []DirectiveLocation + IsRepeatable bool + Position *Position `dump:"-" json:"-"` + + BeforeDescriptionComment *CommentGroup + AfterDescriptionComment *CommentGroup +} diff --git a/vendor/github.com/vektah/gqlparser/v2/ast/directive.go b/vendor/github.com/vektah/gqlparser/v2/ast/directive.go new file mode 100644 index 0000000000..b11867c2e4 --- /dev/null +++ b/vendor/github.com/vektah/gqlparser/v2/ast/directive.go @@ -0,0 +1,43 @@ +package ast + +type DirectiveLocation string + +const ( + // Executable + LocationQuery DirectiveLocation = `QUERY` + LocationMutation DirectiveLocation = `MUTATION` + LocationSubscription DirectiveLocation = `SUBSCRIPTION` + LocationField DirectiveLocation = `FIELD` + LocationFragmentDefinition DirectiveLocation = `FRAGMENT_DEFINITION` + LocationFragmentSpread DirectiveLocation = `FRAGMENT_SPREAD` + LocationInlineFragment DirectiveLocation = `INLINE_FRAGMENT` + + // Type System + LocationSchema DirectiveLocation = `SCHEMA` + LocationScalar DirectiveLocation = `SCALAR` + LocationObject DirectiveLocation = `OBJECT` + LocationFieldDefinition DirectiveLocation = `FIELD_DEFINITION` + LocationArgumentDefinition DirectiveLocation = `ARGUMENT_DEFINITION` + LocationInterface DirectiveLocation = `INTERFACE` + LocationUnion DirectiveLocation = `UNION` + LocationEnum DirectiveLocation = `ENUM` + LocationEnumValue DirectiveLocation = `ENUM_VALUE` + LocationInputObject DirectiveLocation = `INPUT_OBJECT` + LocationInputFieldDefinition DirectiveLocation = `INPUT_FIELD_DEFINITION` + LocationVariableDefinition DirectiveLocation = `VARIABLE_DEFINITION` +) + +type Directive struct { + Name string + Arguments ArgumentList + Position *Position `dump:"-" json:"-"` + + // Requires validation + ParentDefinition *Definition + Definition *DirectiveDefinition + Location DirectiveLocation +} + +func (d *Directive) ArgumentMap(vars map[string]interface{}) map[string]interface{} { + return arg2map(d.Definition.Arguments, d.Arguments, vars) +} diff --git a/vendor/github.com/vektah/gqlparser/v2/ast/document.go b/vendor/github.com/vektah/gqlparser/v2/ast/document.go new file mode 100644 index 0000000000..e2520ffb7c --- /dev/null +++ b/vendor/github.com/vektah/gqlparser/v2/ast/document.go @@ -0,0 +1,89 @@ +package ast + +type QueryDocument struct { + Operations OperationList + Fragments FragmentDefinitionList + Position *Position `dump:"-" json:"-"` + Comment *CommentGroup +} + +type SchemaDocument struct { + Schema SchemaDefinitionList + SchemaExtension SchemaDefinitionList + Directives DirectiveDefinitionList + Definitions DefinitionList + Extensions DefinitionList + Position *Position `dump:"-" json:"-"` + Comment *CommentGroup +} + +func (d *SchemaDocument) Merge(other *SchemaDocument) { + d.Schema = append(d.Schema, other.Schema...) + d.SchemaExtension = append(d.SchemaExtension, other.SchemaExtension...) + d.Directives = append(d.Directives, other.Directives...) + d.Definitions = append(d.Definitions, other.Definitions...) + d.Extensions = append(d.Extensions, other.Extensions...) +} + +type Schema struct { + Query *Definition + Mutation *Definition + Subscription *Definition + SchemaDirectives DirectiveList + + Types map[string]*Definition + Directives map[string]*DirectiveDefinition + + PossibleTypes map[string][]*Definition + Implements map[string][]*Definition + + Description string + + Comment *CommentGroup +} + +// AddTypes is the helper to add types definition to the schema +func (s *Schema) AddTypes(defs ...*Definition) { + if s.Types == nil { + s.Types = make(map[string]*Definition) + } + for _, def := range defs { + s.Types[def.Name] = def + } +} + +func (s *Schema) AddPossibleType(name string, def *Definition) { + s.PossibleTypes[name] = append(s.PossibleTypes[name], def) +} + +// GetPossibleTypes will enumerate all the definitions for a given interface or union +func (s *Schema) GetPossibleTypes(def *Definition) []*Definition { + return s.PossibleTypes[def.Name] +} + +func (s *Schema) AddImplements(name string, iface *Definition) { + s.Implements[name] = append(s.Implements[name], iface) +} + +// GetImplements returns all the interface and union definitions that the given definition satisfies +func (s *Schema) GetImplements(def *Definition) []*Definition { + return s.Implements[def.Name] +} + +type SchemaDefinition struct { + Description string + Directives DirectiveList + OperationTypes OperationTypeDefinitionList + Position *Position `dump:"-" json:"-"` + + BeforeDescriptionComment *CommentGroup + AfterDescriptionComment *CommentGroup + EndOfDefinitionComment *CommentGroup +} + +type OperationTypeDefinition struct { + Operation Operation + Type string + Position *Position `dump:"-" json:"-"` + Comment *CommentGroup +} diff --git a/vendor/github.com/vektah/gqlparser/v2/ast/dumper.go b/vendor/github.com/vektah/gqlparser/v2/ast/dumper.go new file mode 100644 index 0000000000..e9ea88a12a --- /dev/null +++ b/vendor/github.com/vektah/gqlparser/v2/ast/dumper.go @@ -0,0 +1,159 @@ +package ast + +import ( + "bytes" + "fmt" + "reflect" + "strconv" + "strings" +) + +// Dump turns ast into a stable string format for assertions in tests +func Dump(i interface{}) string { + v := reflect.ValueOf(i) + + d := dumper{Buffer: &bytes.Buffer{}} + d.dump(v) + + return d.String() +} + +type dumper struct { + *bytes.Buffer + indent int +} + +type Dumpable interface { + Dump() string +} + +func (d *dumper) dump(v reflect.Value) { + if dumpable, isDumpable := v.Interface().(Dumpable); isDumpable { + d.WriteString(dumpable.Dump()) + return + } + switch v.Kind() { + case reflect.Bool: + if v.Bool() { + d.WriteString("true") + } else { + d.WriteString("false") + } + case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: + fmt.Fprintf(d, "%d", v.Int()) + + case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64: + fmt.Fprintf(d, "%d", v.Uint()) + + case reflect.Float32, reflect.Float64: + fmt.Fprintf(d, "%.2f", v.Float()) + + case reflect.String: + if v.Type().Name() != "string" { + d.WriteString(v.Type().Name() + "(" + strconv.Quote(v.String()) + ")") + } else { + d.WriteString(strconv.Quote(v.String())) + } + + case reflect.Array, reflect.Slice: + d.dumpArray(v) + + case reflect.Interface, reflect.Ptr: + d.dumpPtr(v) + + case reflect.Struct: + d.dumpStruct(v) + + default: + panic(fmt.Errorf("unsupported kind: %s\n buf: %s", v.Kind().String(), d.String())) + } +} + +func (d *dumper) writeIndent() { + d.WriteString(strings.Repeat(" ", d.indent)) +} + +func (d *dumper) nl() { + d.WriteByte('\n') + d.writeIndent() +} + +func typeName(t reflect.Type) string { + if t.Kind() == reflect.Ptr { + return typeName(t.Elem()) + } + return t.Name() +} + +func (d *dumper) dumpArray(v reflect.Value) { + d.WriteString("[" + typeName(v.Type().Elem()) + "]") + + for i := 0; i < v.Len(); i++ { + d.nl() + d.WriteString("- ") + d.indent++ + d.dump(v.Index(i)) + d.indent-- + } +} + +func (d *dumper) dumpStruct(v reflect.Value) { + d.WriteString("<" + v.Type().Name() + ">") + d.indent++ + + typ := v.Type() + for i := 0; i < v.NumField(); i++ { + f := v.Field(i) + if typ.Field(i).Tag.Get("dump") == "-" { + continue + } + + if isZero(f) { + continue + } + d.nl() + d.WriteString(typ.Field(i).Name) + d.WriteString(": ") + d.dump(v.Field(i)) + } + + d.indent-- +} + +func isZero(v reflect.Value) bool { + switch v.Kind() { + case reflect.Ptr, reflect.Interface: + return v.IsNil() + case reflect.Func, reflect.Map: + return v.IsNil() + + case reflect.Array, reflect.Slice: + if v.IsNil() { + return true + } + z := true + for i := 0; i < v.Len(); i++ { + z = z && isZero(v.Index(i)) + } + return z + case reflect.Struct: + z := true + for i := 0; i < v.NumField(); i++ { + z = z && isZero(v.Field(i)) + } + return z + case reflect.String: + return v.String() == "" + } + + // Compare other types directly: + return reflect.DeepEqual(v.Interface(), reflect.Zero(v.Type())) +} + +func (d *dumper) dumpPtr(v reflect.Value) { + if v.IsNil() { + d.WriteString("nil") + return + } + d.dump(v.Elem()) +} diff --git a/vendor/github.com/vektah/gqlparser/v2/ast/fragment.go b/vendor/github.com/vektah/gqlparser/v2/ast/fragment.go new file mode 100644 index 0000000000..05805e1085 --- /dev/null +++ b/vendor/github.com/vektah/gqlparser/v2/ast/fragment.go @@ -0,0 +1,41 @@ +package ast + +type FragmentSpread struct { + Name string + Directives DirectiveList + + // Require validation + ObjectDefinition *Definition + Definition *FragmentDefinition + + Position *Position `dump:"-" json:"-"` + Comment *CommentGroup +} + +type InlineFragment struct { + TypeCondition string + Directives DirectiveList + SelectionSet SelectionSet + + // Require validation + ObjectDefinition *Definition + + Position *Position `dump:"-" json:"-"` + Comment *CommentGroup +} + +type FragmentDefinition struct { + Name string + // Note: fragment variable definitions are experimental and may be changed + // or removed in the future. + VariableDefinition VariableDefinitionList + TypeCondition string + Directives DirectiveList + SelectionSet SelectionSet + + // Require validation + Definition *Definition + + Position *Position `dump:"-" json:"-"` + Comment *CommentGroup +} diff --git a/vendor/github.com/vektah/gqlparser/v2/ast/operation.go b/vendor/github.com/vektah/gqlparser/v2/ast/operation.go new file mode 100644 index 0000000000..2efed025ba --- /dev/null +++ b/vendor/github.com/vektah/gqlparser/v2/ast/operation.go @@ -0,0 +1,32 @@ +package ast + +type Operation string + +const ( + Query Operation = "query" + Mutation Operation = "mutation" + Subscription Operation = "subscription" +) + +type OperationDefinition struct { + Operation Operation + Name string + VariableDefinitions VariableDefinitionList + Directives DirectiveList + SelectionSet SelectionSet + Position *Position `dump:"-" json:"-"` + Comment *CommentGroup +} + +type VariableDefinition struct { + Variable string + Type *Type + DefaultValue *Value + Directives DirectiveList + Position *Position `dump:"-" json:"-"` + Comment *CommentGroup + + // Requires validation + Definition *Definition + Used bool `dump:"-"` +} diff --git a/vendor/github.com/vektah/gqlparser/v2/ast/path.go b/vendor/github.com/vektah/gqlparser/v2/ast/path.go new file mode 100644 index 0000000000..f40aa953dd --- /dev/null +++ b/vendor/github.com/vektah/gqlparser/v2/ast/path.go @@ -0,0 +1,72 @@ +package ast + +import ( + "bytes" + "encoding/json" + "fmt" +) + +var _ json.Unmarshaler = (*Path)(nil) + +type Path []PathElement + +type PathElement interface { + isPathElement() +} + +var ( + _ PathElement = PathIndex(0) + _ PathElement = PathName("") +) + +func (path Path) String() string { + if path == nil { + return "" + } + var str bytes.Buffer + for i, v := range path { + switch v := v.(type) { + case PathIndex: + str.WriteString(fmt.Sprintf("[%d]", v)) + case PathName: + if i != 0 { + str.WriteByte('.') + } + str.WriteString(string(v)) + default: + panic(fmt.Sprintf("unknown type: %T", v)) + } + } + return str.String() +} + +func (path *Path) UnmarshalJSON(b []byte) error { + var vs []interface{} + err := json.Unmarshal(b, &vs) + if err != nil { + return err + } + + *path = make([]PathElement, 0, len(vs)) + for _, v := range vs { + switch v := v.(type) { + case string: + *path = append(*path, PathName(v)) + case int: + *path = append(*path, PathIndex(v)) + case float64: + *path = append(*path, PathIndex(int(v))) + default: + return fmt.Errorf("unknown path element type: %T", v) + } + } + return nil +} + +type PathIndex int + +func (PathIndex) isPathElement() {} + +type PathName string + +func (PathName) isPathElement() {} diff --git a/vendor/github.com/vektah/gqlparser/v2/ast/selection.go b/vendor/github.com/vektah/gqlparser/v2/ast/selection.go new file mode 100644 index 0000000000..1858dc2136 --- /dev/null +++ b/vendor/github.com/vektah/gqlparser/v2/ast/selection.go @@ -0,0 +1,41 @@ +package ast + +type SelectionSet []Selection + +type Selection interface { + isSelection() + GetPosition() *Position +} + +func (*Field) isSelection() {} +func (*FragmentSpread) isSelection() {} +func (*InlineFragment) isSelection() {} + +func (f *Field) GetPosition() *Position { return f.Position } +func (s *FragmentSpread) GetPosition() *Position { return s.Position } +func (f *InlineFragment) GetPosition() *Position { return f.Position } + +type Field struct { + Alias string + Name string + Arguments ArgumentList + Directives DirectiveList + SelectionSet SelectionSet + Position *Position `dump:"-" json:"-"` + Comment *CommentGroup + + // Require validation + Definition *FieldDefinition + ObjectDefinition *Definition +} + +type Argument struct { + Name string + Value *Value + Position *Position `dump:"-" json:"-"` + Comment *CommentGroup +} + +func (f *Field) ArgumentMap(vars map[string]interface{}) map[string]interface{} { + return arg2map(f.Definition.Arguments, f.Arguments, vars) +} diff --git a/vendor/github.com/vektah/gqlparser/v2/ast/source.go b/vendor/github.com/vektah/gqlparser/v2/ast/source.go new file mode 100644 index 0000000000..2949f83f7b --- /dev/null +++ b/vendor/github.com/vektah/gqlparser/v2/ast/source.go @@ -0,0 +1,19 @@ +package ast + +// Source covers a single *.graphql file +type Source struct { + // Name is the filename of the source + Name string + // Input is the actual contents of the source file + Input string + // BuiltIn indicate whether the source is a part of the specification + BuiltIn bool +} + +type Position struct { + Start int // The starting position, in runes, of this token in the input. + End int // The end position, in runes, of this token in the input. + Line int // The line number at the start of this item. + Column int // The column number at the start of this item. + Src *Source // The source document this token belongs to +} diff --git a/vendor/github.com/vektah/gqlparser/v2/ast/type.go b/vendor/github.com/vektah/gqlparser/v2/ast/type.go new file mode 100644 index 0000000000..669f1da57e --- /dev/null +++ b/vendor/github.com/vektah/gqlparser/v2/ast/type.go @@ -0,0 +1,68 @@ +package ast + +func NonNullNamedType(named string, pos *Position) *Type { + return &Type{NamedType: named, NonNull: true, Position: pos} +} + +func NamedType(named string, pos *Position) *Type { + return &Type{NamedType: named, NonNull: false, Position: pos} +} + +func NonNullListType(elem *Type, pos *Position) *Type { + return &Type{Elem: elem, NonNull: true, Position: pos} +} + +func ListType(elem *Type, pos *Position) *Type { + return &Type{Elem: elem, NonNull: false, Position: pos} +} + +type Type struct { + NamedType string + Elem *Type + NonNull bool + Position *Position `dump:"-" json:"-"` +} + +func (t *Type) Name() string { + if t.NamedType != "" { + return t.NamedType + } + + return t.Elem.Name() +} + +func (t *Type) String() string { + nn := "" + if t.NonNull { + nn = "!" + } + if t.NamedType != "" { + return t.NamedType + nn + } + + return "[" + t.Elem.String() + "]" + nn +} + +func (t *Type) IsCompatible(other *Type) bool { + if t.NamedType != other.NamedType { + return false + } + + if t.Elem != nil && other.Elem == nil { + return false + } + + if t.Elem != nil && !t.Elem.IsCompatible(other.Elem) { + return false + } + + if other.NonNull { + return t.NonNull + } + + return true +} + +func (t *Type) Dump() string { + return t.String() +} diff --git a/vendor/github.com/vektah/gqlparser/v2/ast/value.go b/vendor/github.com/vektah/gqlparser/v2/ast/value.go new file mode 100644 index 0000000000..45fa8016b5 --- /dev/null +++ b/vendor/github.com/vektah/gqlparser/v2/ast/value.go @@ -0,0 +1,122 @@ +package ast + +import ( + "fmt" + "strconv" + "strings" +) + +type ValueKind int + +const ( + Variable ValueKind = iota + IntValue + FloatValue + StringValue + BlockValue + BooleanValue + NullValue + EnumValue + ListValue + ObjectValue +) + +type Value struct { + Raw string + Children ChildValueList + Kind ValueKind + Position *Position `dump:"-" json:"-"` + Comment *CommentGroup + + // Require validation + Definition *Definition + VariableDefinition *VariableDefinition + ExpectedType *Type +} + +type ChildValue struct { + Name string + Value *Value + Position *Position `dump:"-" json:"-"` + Comment *CommentGroup +} + +func (v *Value) Value(vars map[string]interface{}) (interface{}, error) { + if v == nil { + return nil, nil + } + switch v.Kind { + case Variable: + if value, ok := vars[v.Raw]; ok { + return value, nil + } + if v.VariableDefinition != nil && v.VariableDefinition.DefaultValue != nil { + return v.VariableDefinition.DefaultValue.Value(vars) + } + return nil, nil + case IntValue: + return strconv.ParseInt(v.Raw, 10, 64) + case FloatValue: + return strconv.ParseFloat(v.Raw, 64) + case StringValue, BlockValue, EnumValue: + return v.Raw, nil + case BooleanValue: + return strconv.ParseBool(v.Raw) + case NullValue: + return nil, nil + case ListValue: + var val []interface{} + for _, elem := range v.Children { + elemVal, err := elem.Value.Value(vars) + if err != nil { + return val, err + } + val = append(val, elemVal) + } + return val, nil + case ObjectValue: + val := map[string]interface{}{} + for _, elem := range v.Children { + elemVal, err := elem.Value.Value(vars) + if err != nil { + return val, err + } + val[elem.Name] = elemVal + } + return val, nil + default: + panic(fmt.Errorf("unknown value kind %d", v.Kind)) + } +} + +func (v *Value) String() string { + if v == nil { + return "" + } + switch v.Kind { + case Variable: + return "$" + v.Raw + case IntValue, FloatValue, EnumValue, BooleanValue, NullValue: + return v.Raw + case StringValue, BlockValue: + return strconv.Quote(v.Raw) + case ListValue: + var val []string + for _, elem := range v.Children { + val = append(val, elem.Value.String()) + } + return "[" + strings.Join(val, ",") + "]" + case ObjectValue: + var val []string + for _, elem := range v.Children { + val = append(val, elem.Name+":"+elem.Value.String()) + } + return "{" + strings.Join(val, ",") + "}" + default: + panic(fmt.Errorf("unknown value kind %d", v.Kind)) + } +} + +func (v *Value) Dump() string { + return v.String() +} diff --git a/vendor/go.mau.fi/libsignal/groups/GroupCipher.go b/vendor/go.mau.fi/libsignal/groups/GroupCipher.go index b821f3c346..9c895dea9f 100644 --- a/vendor/go.mau.fi/libsignal/groups/GroupCipher.go +++ b/vendor/go.mau.fi/libsignal/groups/GroupCipher.go @@ -1,6 +1,7 @@ package groups import ( + "context" "fmt" "go.mau.fi/libsignal/cipher" @@ -34,9 +35,12 @@ type GroupCipher struct { } // Encrypt will take the given message in bytes and return encrypted bytes. -func (c *GroupCipher) Encrypt(plaintext []byte) (protocol.GroupCiphertextMessage, error) { +func (c *GroupCipher) Encrypt(ctx context.Context, plaintext []byte) (protocol.GroupCiphertextMessage, error) { // Load the sender key based on id from our store. - keyRecord := c.senderKeyStore.LoadSenderKey(c.senderKeyID) + keyRecord, err := c.senderKeyStore.LoadSenderKey(ctx, c.senderKeyID) + if err != nil { + return nil, err + } senderKeyState, err := keyRecord.SenderKeyState() if err != nil { return nil, err @@ -63,15 +67,20 @@ func (c *GroupCipher) Encrypt(plaintext []byte) (protocol.GroupCiphertextMessage ) senderKeyState.SetSenderChainKey(senderKeyState.SenderChainKey().Next()) - c.senderKeyStore.StoreSenderKey(c.senderKeyID, keyRecord) + if err := c.senderKeyStore.StoreSenderKey(ctx, c.senderKeyID, keyRecord); err != nil { + return nil, err + } return senderKeyMessage, nil } // Decrypt decrypts the given message using an existing session that // is stored in the senderKey store. -func (c *GroupCipher) Decrypt(senderKeyMessage *protocol.SenderKeyMessage) ([]byte, error) { - keyRecord := c.senderKeyStore.LoadSenderKey(c.senderKeyID) +func (c *GroupCipher) Decrypt(ctx context.Context, senderKeyMessage *protocol.SenderKeyMessage) ([]byte, error) { + keyRecord, err := c.senderKeyStore.LoadSenderKey(ctx, c.senderKeyID) + if err != nil { + return nil, err + } if keyRecord.IsEmpty() { return nil, fmt.Errorf("%w for %s in %s", signalerror.ErrNoSenderKeyForUser, c.senderKeyID.Sender().String(), c.senderKeyID.GroupID()) @@ -101,7 +110,9 @@ func (c *GroupCipher) Decrypt(senderKeyMessage *protocol.SenderKeyMessage) ([]by } // Store the sender key by id. - c.senderKeyStore.StoreSenderKey(c.senderKeyID, keyRecord) + if err := c.senderKeyStore.StoreSenderKey(ctx, c.senderKeyID, keyRecord); err != nil { + return nil, err + } return plaintext, nil } diff --git a/vendor/go.mau.fi/libsignal/groups/GroupSessionBuilder.go b/vendor/go.mau.fi/libsignal/groups/GroupSessionBuilder.go index 2a5569b7a0..3a00214b0f 100644 --- a/vendor/go.mau.fi/libsignal/groups/GroupSessionBuilder.go +++ b/vendor/go.mau.fi/libsignal/groups/GroupSessionBuilder.go @@ -9,6 +9,8 @@ package groups import ( + "context" + "go.mau.fi/libsignal/groups/state/record" "go.mau.fi/libsignal/groups/state/store" "go.mau.fi/libsignal/protocol" @@ -34,21 +36,27 @@ type SessionBuilder struct { // Process will process an incoming group message and set up the corresponding // session for it. -func (b *SessionBuilder) Process(senderKeyName *protocol.SenderKeyName, - msg *protocol.SenderKeyDistributionMessage) { +func (b *SessionBuilder) Process(ctx context.Context, senderKeyName *protocol.SenderKeyName, + msg *protocol.SenderKeyDistributionMessage) error { - senderKeyRecord := b.senderKeyStore.LoadSenderKey(senderKeyName) + senderKeyRecord, err := b.senderKeyStore.LoadSenderKey(ctx, senderKeyName) + if err != nil { + return err + } if senderKeyRecord == nil { senderKeyRecord = record.NewSenderKey(b.serializer.SenderKeyRecord, b.serializer.SenderKeyState) } senderKeyRecord.AddSenderKeyState(msg.ID(), msg.Iteration(), msg.ChainKey(), msg.SignatureKey()) - b.senderKeyStore.StoreSenderKey(senderKeyName, senderKeyRecord) + return b.senderKeyStore.StoreSenderKey(ctx, senderKeyName, senderKeyRecord) } // Create will create a new group session for the given name. -func (b *SessionBuilder) Create(senderKeyName *protocol.SenderKeyName) (*protocol.SenderKeyDistributionMessage, error) { +func (b *SessionBuilder) Create(ctx context.Context, senderKeyName *protocol.SenderKeyName) (*protocol.SenderKeyDistributionMessage, error) { // Load the senderkey by name - senderKeyRecord := b.senderKeyStore.LoadSenderKey(senderKeyName) + senderKeyRecord, err := b.senderKeyStore.LoadSenderKey(ctx, senderKeyName) + if err != nil { + return nil, err + } // If the record is empty, generate new keys. if senderKeyRecord == nil || senderKeyRecord.IsEmpty() { @@ -62,7 +70,9 @@ func (b *SessionBuilder) Create(senderKeyName *protocol.SenderKeyName) (*protoco keyhelper.GenerateSenderKey(), signingKey, ) - b.senderKeyStore.StoreSenderKey(senderKeyName, senderKeyRecord) + if err := b.senderKeyStore.StoreSenderKey(ctx, senderKeyName, senderKeyRecord); err != nil { + return nil, err + } } // Get the senderkey state. diff --git a/vendor/go.mau.fi/libsignal/groups/state/store/SenderKeyStore.go b/vendor/go.mau.fi/libsignal/groups/state/store/SenderKeyStore.go index a068df7cc7..e2f9079fd5 100644 --- a/vendor/go.mau.fi/libsignal/groups/state/store/SenderKeyStore.go +++ b/vendor/go.mau.fi/libsignal/groups/state/store/SenderKeyStore.go @@ -1,11 +1,13 @@ package store import ( + "context" + "go.mau.fi/libsignal/groups/state/record" "go.mau.fi/libsignal/protocol" ) type SenderKey interface { - StoreSenderKey(senderKeyName *protocol.SenderKeyName, keyRecord *record.SenderKey) - LoadSenderKey(senderKeyName *protocol.SenderKeyName) *record.SenderKey + StoreSenderKey(ctx context.Context, senderKeyName *protocol.SenderKeyName, keyRecord *record.SenderKey) error + LoadSenderKey(ctx context.Context, senderKeyName *protocol.SenderKeyName) (*record.SenderKey, error) } diff --git a/vendor/go.mau.fi/libsignal/keys/chain/ChainKey.go b/vendor/go.mau.fi/libsignal/keys/chain/ChainKey.go index 0a5125df62..8ed2a7cb98 100644 --- a/vendor/go.mau.fi/libsignal/keys/chain/ChainKey.go +++ b/vendor/go.mau.fi/libsignal/keys/chain/ChainKey.go @@ -4,6 +4,7 @@ package chain import ( "crypto/hmac" "crypto/sha256" + "go.mau.fi/libsignal/kdf" "go.mau.fi/libsignal/keys/message" ) diff --git a/vendor/go.mau.fi/libsignal/keys/identity/IdentityKey.go b/vendor/go.mau.fi/libsignal/keys/identity/IdentityKey.go index 127dbe16f4..9c690d0add 100644 --- a/vendor/go.mau.fi/libsignal/keys/identity/IdentityKey.go +++ b/vendor/go.mau.fi/libsignal/keys/identity/IdentityKey.go @@ -4,6 +4,7 @@ package identity import ( "encoding/hex" + "go.mau.fi/libsignal/ecc" ) diff --git a/vendor/go.mau.fi/libsignal/logger/DefaultLogger.go b/vendor/go.mau.fi/libsignal/logger/DefaultLogger.go index 62515bfffd..a0d43695bd 100644 --- a/vendor/go.mau.fi/libsignal/logger/DefaultLogger.go +++ b/vendor/go.mau.fi/libsignal/logger/DefaultLogger.go @@ -77,9 +77,9 @@ func (d *defaultLogger) Error(caller, msg string) { // allows granular logging of different go files. // // Example: -// logger.Configure("RootKey.go,Curve.go") -// logger.Configure("all") // +// logger.Configure("RootKey.go,Curve.go") +// logger.Configure("all") func (d *defaultLogger) Configure(settings string) { d.namespaces = strings.Split(settings, ",") } diff --git a/vendor/go.mau.fi/libsignal/serialize/FingerprintProtocol.pb.go b/vendor/go.mau.fi/libsignal/serialize/FingerprintProtocol.pb.go index 1e90caace3..7983ba7b72 100644 --- a/vendor/go.mau.fi/libsignal/serialize/FingerprintProtocol.pb.go +++ b/vendor/go.mau.fi/libsignal/serialize/FingerprintProtocol.pb.go @@ -9,10 +9,11 @@ package serialize import ( - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" sync "sync" + + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" ) const ( diff --git a/vendor/go.mau.fi/libsignal/serialize/LocalStorageProtocol.pb.go b/vendor/go.mau.fi/libsignal/serialize/LocalStorageProtocol.pb.go index e7097399bc..a504948186 100644 --- a/vendor/go.mau.fi/libsignal/serialize/LocalStorageProtocol.pb.go +++ b/vendor/go.mau.fi/libsignal/serialize/LocalStorageProtocol.pb.go @@ -9,10 +9,11 @@ package serialize import ( - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" sync "sync" + + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" ) const ( diff --git a/vendor/go.mau.fi/libsignal/serialize/WhisperTextProtocol.pb.go b/vendor/go.mau.fi/libsignal/serialize/WhisperTextProtocol.pb.go index 18143be5ed..0aea4c9357 100644 --- a/vendor/go.mau.fi/libsignal/serialize/WhisperTextProtocol.pb.go +++ b/vendor/go.mau.fi/libsignal/serialize/WhisperTextProtocol.pb.go @@ -9,10 +9,11 @@ package serialize import ( - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" sync "sync" + + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" ) const ( diff --git a/vendor/go.mau.fi/libsignal/session/Session.go b/vendor/go.mau.fi/libsignal/session/Session.go index 88e4276fad..471e0d2902 100644 --- a/vendor/go.mau.fi/libsignal/session/Session.go +++ b/vendor/go.mau.fi/libsignal/session/Session.go @@ -2,6 +2,7 @@ package session import ( + "context" "fmt" "go.mau.fi/libsignal/ecc" @@ -56,9 +57,9 @@ func NewBuilderFromSignal(signalStore store.SignalProtocol, // used to encrypt/decrypt messages in that session. // // Sessions are built from one of three different vectors: -// * PreKeyBundle retrieved from a server. -// * PreKeySignalMessage received from a client. -// * KeyExchangeMessage sent to or received from a client. +// - PreKeyBundle retrieved from a server. +// - PreKeySignalMessage received from a client. +// - KeyExchangeMessage sent to or received from a client. // // Sessions are constructed per recipientId + deviceId tuple. // Remote logical users are identified by their recipientId, @@ -75,22 +76,28 @@ type Builder struct { // Process builds a new session from a session record and pre // key signal message. -func (b *Builder) Process(sessionRecord *record.Session, message *protocol.PreKeySignalMessage) (unsignedPreKeyID *optional.Uint32, err error) { +func (b *Builder) Process(ctx context.Context, sessionRecord *record.Session, message *protocol.PreKeySignalMessage) (unsignedPreKeyID *optional.Uint32, err error) { // Check to see if the keys are trusted. theirIdentityKey := message.IdentityKey() - if !(b.identityKeyStore.IsTrustedIdentity(b.remoteAddress, theirIdentityKey)) { + trusted, err := b.identityKeyStore.IsTrustedIdentity(ctx, b.remoteAddress, theirIdentityKey) + if err != nil { + return nil, err + } + if !trusted { return nil, signalerror.ErrUntrustedIdentity } // Use version 3 of the signal/axolotl protocol. - unsignedPreKeyID, err = b.processV3(sessionRecord, message) + unsignedPreKeyID, err = b.processV3(ctx, sessionRecord, message) if err != nil { return nil, err } // Save the identity key to our identity store. - b.identityKeyStore.SaveIdentity(b.remoteAddress, theirIdentityKey) + if err := b.identityKeyStore.SaveIdentity(ctx, b.remoteAddress, theirIdentityKey); err != nil { + return nil, err + } // Return the unsignedPreKeyID return unsignedPreKeyID, nil @@ -99,7 +106,7 @@ func (b *Builder) Process(sessionRecord *record.Session, message *protocol.PreKe // ProcessV3 builds a new session from a session record and pre key // signal message. After a session is constructed in this way, the embedded // SignalMessage can be decrypted. -func (b *Builder) processV3(sessionRecord *record.Session, +func (b *Builder) processV3(ctx context.Context, sessionRecord *record.Session, message *protocol.PreKeySignalMessage) (unsignedPreKeyID *optional.Uint32, err error) { logger.Debug("Processing message with PreKeyID: ", message.PreKeyID()) @@ -114,7 +121,10 @@ func (b *Builder) processV3(sessionRecord *record.Session, } // Load our signed prekey from our signed prekey store. - ourSignedPreKeyRecord := b.signedPreKeyStore.LoadSignedPreKey(message.SignedPreKeyID()) + ourSignedPreKeyRecord, err := b.signedPreKeyStore.LoadSignedPreKey(ctx, message.SignedPreKeyID()) + if err != nil { + return nil, err + } if ourSignedPreKeyRecord == nil { return nil, fmt.Errorf("%w with ID %d", signalerror.ErrNoSignedPreKey, message.SignedPreKeyID()) } @@ -131,7 +141,10 @@ func (b *Builder) processV3(sessionRecord *record.Session, // Set our one time pre key with the one from our prekey store // if the message contains a valid pre key id if !message.PreKeyID().IsEmpty { - oneTimePreKey := b.preKeyStore.LoadPreKey(message.PreKeyID().Value) + oneTimePreKey, err := b.preKeyStore.LoadPreKey(ctx, message.PreKeyID().Value) + if err != nil { + return nil, err + } if oneTimePreKey == nil { return nil, fmt.Errorf("%w with ID %d", signalerror.ErrNoOneTimeKeyFound, message.PreKeyID().Value) } @@ -158,7 +171,7 @@ func (b *Builder) processV3(sessionRecord *record.Session, sessionState.SetRootKey(derivedKeys.RootKey) // Set the session's registration ids and base key - sessionState.SetLocalRegistrationID(b.identityKeyStore.GetLocalRegistrationId()) + sessionState.SetLocalRegistrationID(b.identityKeyStore.GetLocalRegistrationID()) sessionState.SetRemoteRegistrationID(message.RegistrationID()) sessionState.SetSenderBaseKey(message.BaseKey().Serialize()) @@ -171,9 +184,13 @@ func (b *Builder) processV3(sessionRecord *record.Session, // ProcessBundle builds a new session from a PreKeyBundle retrieved // from a server. -func (b *Builder) ProcessBundle(preKey *prekey.Bundle) error { +func (b *Builder) ProcessBundle(ctx context.Context, preKey *prekey.Bundle) error { // Check to see if the keys are trusted. - if !(b.identityKeyStore.IsTrustedIdentity(b.remoteAddress, preKey.IdentityKey())) { + trusted, err := b.identityKeyStore.IsTrustedIdentity(ctx, b.remoteAddress, preKey.IdentityKey()) + if err != nil { + return err + } + if !trusted { return signalerror.ErrUntrustedIdentity } @@ -191,7 +208,13 @@ func (b *Builder) ProcessBundle(preKey *prekey.Bundle) error { } // Load our session and generate keys. - sessionRecord := b.sessionStore.LoadSession(b.remoteAddress) + sessionRecord, err := b.sessionStore.LoadSession(ctx, b.remoteAddress) + if err != nil { + return err + } + if sessionRecord == nil { + return fmt.Errorf("LoadSession returned nil") + } ourBaseKey, err := ecc.GenerateKeyPair() if err != nil { return err @@ -251,7 +274,7 @@ func (b *Builder) ProcessBundle(preKey *prekey.Bundle) error { // Set the local registration ID based on the registration id in our identity key store. sessionState.SetLocalRegistrationID( - b.identityKeyStore.GetLocalRegistrationId(), + b.identityKeyStore.GetLocalRegistrationID(), ) // Set the remote registration ID based on the given prekey bundle registrationID. @@ -265,8 +288,12 @@ func (b *Builder) ProcessBundle(preKey *prekey.Bundle) error { ) // Store the session in our session store and save the identity in our identity store. - b.sessionStore.StoreSession(b.remoteAddress, sessionRecord) - b.identityKeyStore.SaveIdentity(b.remoteAddress, preKey.IdentityKey()) + if err := b.sessionStore.StoreSession(ctx, b.remoteAddress, sessionRecord); err != nil { + return err + } + if err := b.identityKeyStore.SaveIdentity(ctx, b.remoteAddress, preKey.IdentityKey()); err != nil { + return err + } return nil } diff --git a/vendor/go.mau.fi/libsignal/session/SessionCipher.go b/vendor/go.mau.fi/libsignal/session/SessionCipher.go index a70812b9b5..791ba16d72 100644 --- a/vendor/go.mau.fi/libsignal/session/SessionCipher.go +++ b/vendor/go.mau.fi/libsignal/session/SessionCipher.go @@ -1,6 +1,8 @@ package session import ( + "context" + "errors" "fmt" "go.mau.fi/libsignal/cipher" @@ -65,8 +67,14 @@ type Cipher struct { // Encrypt will take the given message in bytes and return an object that follows // the CiphertextMessage interface. -func (d *Cipher) Encrypt(plaintext []byte) (protocol.CiphertextMessage, error) { - sessionRecord := d.sessionStore.LoadSession(d.remoteAddress) +func (d *Cipher) Encrypt(ctx context.Context, plaintext []byte) (protocol.CiphertextMessage, error) { + sessionRecord, err := d.sessionStore.LoadSession(ctx, d.remoteAddress) + if err != nil { + return nil, err + } + if sessionRecord == nil { + return nil, fmt.Errorf("LoadSession returned nil") + } sessionState := sessionRecord.SessionState() chainKey := sessionState.SenderChainKey() messageKeys := chainKey.MessageKeys() @@ -122,73 +130,109 @@ func (d *Cipher) Encrypt(plaintext []byte) (protocol.CiphertextMessage, error) { } sessionState.SetSenderChainKey(chainKey.NextKey()) - if !d.identityKeyStore.IsTrustedIdentity(d.remoteAddress, sessionState.RemoteIdentityKey()) { - // return err + trusted, err := d.identityKeyStore.IsTrustedIdentity(ctx, d.remoteAddress, sessionState.RemoteIdentityKey()) + if err != nil { + return nil, err + } + if !trusted { + return nil, signalerror.ErrUntrustedIdentity + } + if err := d.identityKeyStore.SaveIdentity(ctx, d.remoteAddress, sessionState.RemoteIdentityKey()); err != nil { + return nil, err + } + if err := d.sessionStore.StoreSession(ctx, d.remoteAddress, sessionRecord); err != nil { + return nil, err } - d.identityKeyStore.SaveIdentity(d.remoteAddress, sessionState.RemoteIdentityKey()) - d.sessionStore.StoreSession(d.remoteAddress, sessionRecord) return ciphertextMessage, nil } // Decrypt decrypts the given message using an existing session that // is stored in the session store. -func (d *Cipher) Decrypt(ciphertextMessage *protocol.SignalMessage) ([]byte, error) { - plaintext, _, err := d.DecryptAndGetKey(ciphertextMessage) +func (d *Cipher) Decrypt(ctx context.Context, ciphertextMessage *protocol.SignalMessage) ([]byte, error) { + plaintext, _, err := d.DecryptAndGetKey(ctx, ciphertextMessage) return plaintext, err } // DecryptAndGetKey decrypts the given message using an existing session that // is stored in the session store and returns the message keys used for encryption. -func (d *Cipher) DecryptAndGetKey(ciphertextMessage *protocol.SignalMessage) ([]byte, *message.Keys, error) { - if !d.sessionStore.ContainsSession(d.remoteAddress) { +func (d *Cipher) DecryptAndGetKey(ctx context.Context, ciphertextMessage *protocol.SignalMessage) ([]byte, *message.Keys, error) { + contains, err := d.sessionStore.ContainsSession(ctx, d.remoteAddress) + if err != nil { + return nil, nil, err + } + if !contains { return nil, nil, fmt.Errorf("%w %s", signalerror.ErrNoSessionForUser, d.remoteAddress.String()) } // Load the session record from our session store and decrypt the message. - sessionRecord := d.sessionStore.LoadSession(d.remoteAddress) - plaintext, messageKeys, err := d.DecryptWithRecord(sessionRecord, ciphertextMessage) + sessionRecord, err := d.sessionStore.LoadSession(ctx, d.remoteAddress) + if err != nil { + return nil, nil, err + } + if sessionRecord == nil { + return nil, nil, fmt.Errorf("LoadSession returned nil") + } + plaintext, messageKeys, err := d.DecryptWithRecord(ctx, sessionRecord, ciphertextMessage) if err != nil { return nil, nil, err } - if !d.identityKeyStore.IsTrustedIdentity(d.remoteAddress, sessionRecord.SessionState().RemoteIdentityKey()) { - // return err + trusted, err := d.identityKeyStore.IsTrustedIdentity(ctx, d.remoteAddress, sessionRecord.SessionState().RemoteIdentityKey()) + if err != nil { + return nil, nil, err + } + if !trusted { + return nil, nil, signalerror.ErrUntrustedIdentity + } + if err := d.identityKeyStore.SaveIdentity(ctx, d.remoteAddress, sessionRecord.SessionState().RemoteIdentityKey()); err != nil { + return nil, nil, err } - d.identityKeyStore.SaveIdentity(d.remoteAddress, sessionRecord.SessionState().RemoteIdentityKey()) // Store the session record in our session store. - d.sessionStore.StoreSession(d.remoteAddress, sessionRecord) + if err := d.sessionStore.StoreSession(ctx, d.remoteAddress, sessionRecord); err != nil { + return nil, nil, err + } return plaintext, messageKeys, nil } -func (d *Cipher) DecryptMessage(ciphertextMessage *protocol.PreKeySignalMessage) ([]byte, error) { - plaintext, _, err := d.DecryptMessageReturnKey(ciphertextMessage) +func (d *Cipher) DecryptMessage(ctx context.Context, ciphertextMessage *protocol.PreKeySignalMessage) ([]byte, error) { + plaintext, _, err := d.DecryptMessageReturnKey(ctx, ciphertextMessage) return plaintext, err } -func (d *Cipher) DecryptMessageReturnKey(ciphertextMessage *protocol.PreKeySignalMessage) ([]byte, *message.Keys, error) { +func (d *Cipher) DecryptMessageReturnKey(ctx context.Context, ciphertextMessage *protocol.PreKeySignalMessage) ([]byte, *message.Keys, error) { // Load or create session record for this session. - sessionRecord := d.sessionStore.LoadSession(d.remoteAddress) - unsignedPreKeyID, err := d.builder.Process(sessionRecord, ciphertextMessage) + sessionRecord, err := d.sessionStore.LoadSession(ctx, d.remoteAddress) if err != nil { return nil, nil, err } - plaintext, keys, err := d.DecryptWithRecord(sessionRecord, ciphertextMessage.WhisperMessage()) + if sessionRecord == nil { + return nil, nil, fmt.Errorf("LoadSession returned nil") + } + unsignedPreKeyID, err := d.builder.Process(ctx, sessionRecord, ciphertextMessage) + if err != nil { + return nil, nil, err + } + plaintext, keys, err := d.DecryptWithRecord(ctx, sessionRecord, ciphertextMessage.WhisperMessage()) if err != nil { return nil, nil, err } // Store the session record in our session store. - d.sessionStore.StoreSession(d.remoteAddress, sessionRecord) + if err := d.sessionStore.StoreSession(ctx, d.remoteAddress, sessionRecord); err != nil { + return nil, nil, err + } if !unsignedPreKeyID.IsEmpty { - d.preKeyStore.RemovePreKey(unsignedPreKeyID.Value) + if err := d.preKeyStore.RemovePreKey(ctx, unsignedPreKeyID.Value); err != nil { + return nil, nil, err + } } return plaintext, keys, nil } // DecryptWithKey will decrypt the given message using the given symmetric key. This // can be used when decrypting messages at a later time if the message key was saved. -func (d *Cipher) DecryptWithKey(ciphertextMessage *protocol.SignalMessage, key *message.Keys) ([]byte, error) { +func (d *Cipher) DecryptWithKey(ctx context.Context, ciphertextMessage *protocol.SignalMessage, key *message.Keys) ([]byte, error) { logger.Debug("Decrypting ciphertext body: ", ciphertextMessage.Body()) plaintext, err := decrypt(key, ciphertextMessage.Body()) if err != nil { @@ -200,22 +244,26 @@ func (d *Cipher) DecryptWithKey(ciphertextMessage *protocol.SignalMessage, key * } // DecryptWithRecord decrypts the given message using the given session record. -func (d *Cipher) DecryptWithRecord(sessionRecord *record.Session, ciphertext *protocol.SignalMessage) ([]byte, *message.Keys, error) { +func (d *Cipher) DecryptWithRecord(ctx context.Context, sessionRecord *record.Session, ciphertext *protocol.SignalMessage) ([]byte, *message.Keys, error) { logger.Debug("Decrypting ciphertext with record: ", sessionRecord) previousStates := sessionRecord.PreviousSessionStates() sessionState := sessionRecord.SessionState() // Try and decrypt the message with the current session state. - plaintext, messageKeys, err := d.DecryptWithState(sessionState, ciphertext) + plaintext, messageKeys, err := d.DecryptWithState(ctx, sessionState, ciphertext) // If we received an error using the current session state, loop // through all previous states. - if err != nil { + if errors.Is(err, signalerror.ErrOldCounter) { + return nil, nil, err + } else if err != nil { logger.Warning(err) for i, state := range previousStates { // Try decrypting the message with previous states - plaintext, messageKeys, err = d.DecryptWithState(state, ciphertext) - if err != nil { + plaintext, messageKeys, err = d.DecryptWithState(ctx, state, ciphertext) + if errors.Is(err, signalerror.ErrOldCounter) { + return nil, nil, err + } else if err != nil { continue } @@ -236,7 +284,7 @@ func (d *Cipher) DecryptWithRecord(sessionRecord *record.Session, ciphertext *pr } // DecryptWithState decrypts the given message with the given session state. -func (d *Cipher) DecryptWithState(sessionState *record.State, ciphertextMessage *protocol.SignalMessage) ([]byte, *message.Keys, error) { +func (d *Cipher) DecryptWithState(ctx context.Context, sessionState *record.State, ciphertextMessage *protocol.SignalMessage) ([]byte, *message.Keys, error) { logger.Debug("Decrypting ciphertext with session state: ", sessionState) if !sessionState.HasSenderChain() { logger.Error("Unable to decrypt message with state: ", signalerror.ErrUninitializedSession) @@ -269,7 +317,7 @@ func (d *Cipher) DecryptWithState(sessionState *record.State, ciphertextMessage return nil, nil, fmt.Errorf("failed to verify ciphertext MAC: %w", err) } - plaintext, err := d.DecryptWithKey(ciphertextMessage, messageKeys) + plaintext, err := d.DecryptWithKey(ctx, ciphertextMessage, messageKeys) if err != nil { return nil, nil, err } diff --git a/vendor/go.mau.fi/libsignal/state/store/IdentityKeyStore.go b/vendor/go.mau.fi/libsignal/state/store/IdentityKeyStore.go index 05ad8d1eaf..877d3eab63 100644 --- a/vendor/go.mau.fi/libsignal/state/store/IdentityKeyStore.go +++ b/vendor/go.mau.fi/libsignal/state/store/IdentityKeyStore.go @@ -1,6 +1,8 @@ package store import ( + "context" + "go.mau.fi/libsignal/keys/identity" "go.mau.fi/libsignal/protocol" ) @@ -14,10 +16,10 @@ type IdentityKey interface { // // Clients should maintain a registration ID, a random number between 1 and 16380 // that's generated once at install time. - GetLocalRegistrationId() uint32 + GetLocalRegistrationID() uint32 // Save a remote client's identity key in our identity store. - SaveIdentity(address *protocol.SignalAddress, identityKey *identity.Key) + SaveIdentity(ctx context.Context, address *protocol.SignalAddress, identityKey *identity.Key) error // Verify a remote client's identity key. // @@ -25,5 +27,5 @@ type IdentityKey interface { // 'trust on first use'. This means that an identity key is considered 'trusted' // if there is no entry for the recipient in the local store, or if it matches the // saved key for a recipient in the local store. - IsTrustedIdentity(address *protocol.SignalAddress, identityKey *identity.Key) bool + IsTrustedIdentity(ctx context.Context, address *protocol.SignalAddress, identityKey *identity.Key) (bool, error) } diff --git a/vendor/go.mau.fi/libsignal/state/store/MessageKeyStore.go b/vendor/go.mau.fi/libsignal/state/store/MessageKeyStore.go index fea2eed093..73e1e554f2 100644 --- a/vendor/go.mau.fi/libsignal/state/store/MessageKeyStore.go +++ b/vendor/go.mau.fi/libsignal/state/store/MessageKeyStore.go @@ -1,6 +1,8 @@ package store import ( + "context" + "go.mau.fi/libsignal/keys/message" ) @@ -8,14 +10,14 @@ import ( // of message keys. type MessageKey interface { // Load a local message key by id - LoadMessageKey(keyID uint32) *message.Keys + LoadMessageKey(ctx context.Context, keyID uint32) (*message.Keys, error) // Store a local message key - StoreMessageKey(keyID uint32, key *message.Keys) + StoreMessageKey(ctx context.Context, keyID uint32, key *message.Keys) error // Check to see if the store contains a message key with id. - ContainsMessageKey(keyID uint32) bool + ContainsMessageKey(ctx context.Context, keyID uint32) (bool, error) // Delete a message key from local storage. - RemoveMessageKey(keyID uint32) + RemoveMessageKey(ctx context.Context, keyID uint32) error } diff --git a/vendor/go.mau.fi/libsignal/state/store/PreKeyStore.go b/vendor/go.mau.fi/libsignal/state/store/PreKeyStore.go index a132be65da..8bdedc76f7 100644 --- a/vendor/go.mau.fi/libsignal/state/store/PreKeyStore.go +++ b/vendor/go.mau.fi/libsignal/state/store/PreKeyStore.go @@ -1,6 +1,8 @@ package store import ( + "context" + "go.mau.fi/libsignal/state/record" ) @@ -8,14 +10,14 @@ import ( // of PreKeyRecords type PreKey interface { // Load a local PreKeyRecord - LoadPreKey(preKeyID uint32) *record.PreKey + LoadPreKey(ctx context.Context, preKeyID uint32) (*record.PreKey, error) // Store a local PreKeyRecord - StorePreKey(preKeyID uint32, preKeyRecord *record.PreKey) + StorePreKey(ctx context.Context, preKeyID uint32, preKeyRecord *record.PreKey) error // Check to see if the store contains a PreKeyRecord - ContainsPreKey(preKeyID uint32) bool + ContainsPreKey(ctx context.Context, preKeyID uint32) (bool, error) // Delete a PreKeyRecord from local storage. - RemovePreKey(preKeyID uint32) + RemovePreKey(ctx context.Context, preKeyID uint32) error } diff --git a/vendor/go.mau.fi/libsignal/state/store/SessionStore.go b/vendor/go.mau.fi/libsignal/state/store/SessionStore.go index e18fc02425..2cb8a52d9f 100644 --- a/vendor/go.mau.fi/libsignal/state/store/SessionStore.go +++ b/vendor/go.mau.fi/libsignal/state/store/SessionStore.go @@ -1,6 +1,8 @@ package store import ( + "context" + "go.mau.fi/libsignal/protocol" "go.mau.fi/libsignal/state/record" ) @@ -8,10 +10,10 @@ import ( // Session store is an interface for the persistent storage of session // state information for remote clients. type Session interface { - LoadSession(address *protocol.SignalAddress) *record.Session - GetSubDeviceSessions(name string) []uint32 - StoreSession(remoteAddress *protocol.SignalAddress, record *record.Session) - ContainsSession(remoteAddress *protocol.SignalAddress) bool - DeleteSession(remoteAddress *protocol.SignalAddress) - DeleteAllSessions() + LoadSession(ctx context.Context, address *protocol.SignalAddress) (*record.Session, error) + GetSubDeviceSessions(ctx context.Context, name string) ([]uint32, error) + StoreSession(ctx context.Context, remoteAddress *protocol.SignalAddress, record *record.Session) error + ContainsSession(ctx context.Context, remoteAddress *protocol.SignalAddress) (bool, error) + DeleteSession(ctx context.Context, remoteAddress *protocol.SignalAddress) error + DeleteAllSessions(ctx context.Context) error } diff --git a/vendor/go.mau.fi/libsignal/state/store/SignedPreKeyStore.go b/vendor/go.mau.fi/libsignal/state/store/SignedPreKeyStore.go index 058cd67065..7526dba352 100644 --- a/vendor/go.mau.fi/libsignal/state/store/SignedPreKeyStore.go +++ b/vendor/go.mau.fi/libsignal/state/store/SignedPreKeyStore.go @@ -1,6 +1,8 @@ package store import ( + "context" + "go.mau.fi/libsignal/state/record" ) @@ -8,17 +10,17 @@ import ( // store signed PreKeys. type SignedPreKey interface { // LoadSignedPreKey loads a local SignedPreKeyRecord - LoadSignedPreKey(signedPreKeyID uint32) *record.SignedPreKey + LoadSignedPreKey(ctx context.Context, signedPreKeyID uint32) (*record.SignedPreKey, error) // LoadSignedPreKeys loads all local SignedPreKeyRecords - LoadSignedPreKeys() []*record.SignedPreKey + LoadSignedPreKeys(ctx context.Context) ([]*record.SignedPreKey, error) // Store a local SignedPreKeyRecord - StoreSignedPreKey(signedPreKeyID uint32, record *record.SignedPreKey) + StoreSignedPreKey(ctx context.Context, signedPreKeyID uint32, record *record.SignedPreKey) error // Check to see if store contains the given record - ContainsSignedPreKey(signedPreKeyID uint32) bool + ContainsSignedPreKey(ctx context.Context, signedPreKeyID uint32) (bool, error) // Delete a SignedPreKeyRecord from local storage - RemoveSignedPreKey(signedPreKeyID uint32) + RemoveSignedPreKey(ctx context.Context, signedPreKeyID uint32) error } diff --git a/vendor/go.mau.fi/util/dbutil/connlog.go b/vendor/go.mau.fi/util/dbutil/connlog.go new file mode 100644 index 0000000000..bfd9f621e7 --- /dev/null +++ b/vendor/go.mau.fi/util/dbutil/connlog.go @@ -0,0 +1,257 @@ +// Copyright (c) 2022 Tulir Asokan +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. + +package dbutil + +import ( + "context" + "database/sql" + "errors" + "fmt" + "strconv" + "strings" + "time" +) + +// LoggingExecable is a wrapper for anything with database Exec methods (i.e. sql.Conn, sql.DB and sql.Tx) +// that can preprocess queries (e.g. replacing $ with ? on SQLite) and log query durations. +type LoggingExecable struct { + UnderlyingExecable UnderlyingExecable + db *Database +} + +type pqError interface { + Get(k byte) string +} + +type PQErrorWithLine struct { + Underlying error + Line string +} + +func (pqe *PQErrorWithLine) Error() string { + return pqe.Underlying.Error() +} + +func (pqe *PQErrorWithLine) Unwrap() error { + return pqe.Underlying +} + +func addErrorLine(query string, err error) error { + if err == nil { + return err + } + var pqe pqError + if !errors.As(err, &pqe) { + return err + } + pos, _ := strconv.Atoi(pqe.Get('P')) + pos-- + if pos <= 0 { + return err + } + lines := strings.Split(query, "\n") + for _, line := range lines { + lineRunes := []rune(line) + if pos < len(lineRunes)+1 { + return &PQErrorWithLine{Underlying: err, Line: line} + } + pos -= len(lineRunes) + 1 + } + return err +} + +func (le *LoggingExecable) ExecContext(ctx context.Context, query string, args ...any) (sql.Result, error) { + start := time.Now() + query = le.db.mutateQuery(query) + res, err := le.UnderlyingExecable.ExecContext(ctx, query, args...) + err = addErrorLine(query, err) + le.db.Log.QueryTiming(ctx, "Exec", query, args, -1, time.Since(start), err) + return res, err +} + +func (le *LoggingExecable) QueryContext(ctx context.Context, query string, args ...any) (Rows, error) { + start := time.Now() + query = le.db.mutateQuery(query) + rows, err := le.UnderlyingExecable.QueryContext(ctx, query, args...) + err = addErrorLine(query, err) + le.db.Log.QueryTiming(ctx, "Query", query, args, -1, time.Since(start), err) + return &LoggingRows{ + ctx: ctx, + db: le.db, + query: query, + args: args, + rs: rows, + start: start, + }, err +} + +func (le *LoggingExecable) QueryRowContext(ctx context.Context, query string, args ...any) *sql.Row { + start := time.Now() + query = le.db.mutateQuery(query) + row := le.UnderlyingExecable.QueryRowContext(ctx, query, args...) + le.db.Log.QueryTiming(ctx, "QueryRow", query, args, -1, time.Since(start), nil) + return row +} + +func (le *LoggingExecable) beginTx(ctx context.Context, opts *sql.TxOptions) (*sql.Tx, error) { + txBeginner, ok := le.UnderlyingExecable.(UnderlyingExecutableWithTx) + if !ok { + return nil, fmt.Errorf("can't start transaction with a %T", le.UnderlyingExecable) + } + return txBeginner.BeginTx(ctx, opts) +} + +// loggingDB is a wrapper for LoggingExecable that allows access to BeginTx. +// +// While LoggingExecable has a pointer to the database and could use BeginTx, it's not technically safe since +// the LoggingExecable could be for a transaction (where BeginTx wouldn't make sense). +type loggingDB struct { + LoggingExecable +} + +type internalTxnStarter interface { + beginTx(ctx context.Context, opts *sql.TxOptions) (*sql.Tx, error) +} + +type TxnOptions struct { + Isolation sql.IsolationLevel + ReadOnly bool + Conn Conn + RetryBegin func(error, int) bool +} + +func (ld *loggingDB) BeginTx(ctx context.Context, opts *TxnOptions) (*LoggingTxn, error) { + if opts == nil { + opts = &TxnOptions{} + } + sqlOpts := &sql.TxOptions{ + Isolation: opts.Isolation, + ReadOnly: opts.ReadOnly, + } + var tx *sql.Tx + var err error + start := time.Now() + for i := 0; ; i++ { + if opts.Conn != nil { + tx, err = opts.Conn.beginTx(ctx, sqlOpts) + } else { + targetDB := ld.db.RawDB + if opts.ReadOnly && ld.db.ReadOnlyDB != nil { + targetDB = ld.db.ReadOnlyDB + } + tx, err = targetDB.BeginTx(ctx, sqlOpts) + } + if opts.RetryBegin == nil || err == nil || !opts.RetryBegin(err, i) { + break + } + } + ld.db.Log.QueryTiming(ctx, "Begin", "", nil, -1, time.Since(start), err) + if err != nil { + return nil, err + } + return &LoggingTxn{ + LoggingExecable: LoggingExecable{UnderlyingExecable: tx, db: ld.db}, + UnderlyingTx: tx, + ctx: ctx, + StartTime: start, + }, nil +} + +type LoggingTxn struct { + LoggingExecable + UnderlyingTx *sql.Tx + ctx context.Context + + StartTime time.Time + EndTime time.Time + noTotalLog bool +} + +func (lt *LoggingTxn) Commit() error { + start := time.Now() + err := lt.UnderlyingTx.Commit() + lt.EndTime = time.Now() + if !lt.noTotalLog { + lt.db.Log.QueryTiming(lt.ctx, "", "", nil, -1, lt.EndTime.Sub(lt.StartTime), nil) + } + lt.db.Log.QueryTiming(lt.ctx, "Commit", "", nil, -1, time.Since(start), err) + return err +} + +func (lt *LoggingTxn) Rollback() error { + start := time.Now() + err := lt.UnderlyingTx.Rollback() + lt.EndTime = time.Now() + if !lt.noTotalLog { + lt.db.Log.QueryTiming(lt.ctx, "", "", nil, -1, lt.EndTime.Sub(lt.StartTime), nil) + } + lt.db.Log.QueryTiming(lt.ctx, "Rollback", "", nil, -1, time.Since(start), err) + return err +} + +type LoggingRows struct { + ctx context.Context + db *Database + query string + args []any + rs Rows + start time.Time + nrows int +} + +func (lrs *LoggingRows) stopTiming() { + if !lrs.start.IsZero() { + lrs.db.Log.QueryTiming(lrs.ctx, "EndRows", lrs.query, lrs.args, lrs.nrows, time.Since(lrs.start), lrs.rs.Err()) + lrs.start = time.Time{} + } +} + +func (lrs *LoggingRows) Close() error { + err := lrs.rs.Close() + lrs.stopTiming() + return err +} + +func (lrs *LoggingRows) ColumnTypes() ([]*sql.ColumnType, error) { + return lrs.rs.ColumnTypes() +} + +func (lrs *LoggingRows) Columns() ([]string, error) { + return lrs.rs.Columns() +} + +func (lrs *LoggingRows) Err() error { + return lrs.rs.Err() +} + +func (lrs *LoggingRows) Next() bool { + hasNext := lrs.rs.Next() + + if !hasNext { + lrs.stopTiming() + } else { + lrs.nrows++ + } + + return hasNext +} + +func (lrs *LoggingRows) NextResultSet() bool { + hasNext := lrs.rs.NextResultSet() + + if !hasNext { + lrs.stopTiming() + } else { + lrs.nrows++ + } + + return hasNext +} + +func (lrs *LoggingRows) Scan(dest ...any) error { + return lrs.rs.Scan(dest...) +} diff --git a/vendor/go.mau.fi/util/dbutil/database.go b/vendor/go.mau.fi/util/dbutil/database.go new file mode 100644 index 0000000000..a9960cecc7 --- /dev/null +++ b/vendor/go.mau.fi/util/dbutil/database.go @@ -0,0 +1,309 @@ +// Copyright (c) 2022 Tulir Asokan +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. + +package dbutil + +import ( + "context" + "database/sql" + "fmt" + "net/url" + "regexp" + "strings" + "time" + + "go.mau.fi/util/exsync" +) + +type Dialect int + +const ( + DialectUnknown Dialect = iota + Postgres + SQLite +) + +func (dialect Dialect) String() string { + switch dialect { + case Postgres: + return "postgres" + case SQLite: + return "sqlite3" + default: + return "" + } +} + +func ParseDialect(engine string) (Dialect, error) { + engine = strings.ToLower(engine) + + if strings.HasPrefix(engine, "postgres") || engine == "pgx" { + return Postgres, nil + } else if strings.HasPrefix(engine, "sqlite") || strings.HasPrefix(engine, "litestream") { + return SQLite, nil + } else { + return DialectUnknown, fmt.Errorf("unknown dialect '%s'", engine) + } +} + +type Rows interface { + Close() error + ColumnTypes() ([]*sql.ColumnType, error) + Columns() ([]string, error) + Err() error + Next() bool + NextResultSet() bool + Scan(...any) error +} + +type Scannable interface { + Scan(...any) error +} + +// Expected implementations of Scannable +var ( + _ Scannable = (*sql.Row)(nil) + _ Scannable = (Rows)(nil) +) + +type UnderlyingExecable interface { + ExecContext(ctx context.Context, query string, args ...any) (sql.Result, error) + QueryContext(ctx context.Context, query string, args ...any) (*sql.Rows, error) + QueryRowContext(ctx context.Context, query string, args ...any) *sql.Row +} + +type UnderlyingExecutableWithTx interface { + UnderlyingExecable + BeginTx(ctx context.Context, opts *sql.TxOptions) (*sql.Tx, error) +} + +type Execable interface { + ExecContext(ctx context.Context, query string, args ...any) (sql.Result, error) + QueryContext(ctx context.Context, query string, args ...any) (Rows, error) + QueryRowContext(ctx context.Context, query string, args ...any) *sql.Row +} + +type Conn interface { + Execable + internalTxnStarter +} + +type Transaction interface { + Execable + Commit() error + Rollback() error +} + +// Expected implementations of Execable +var ( + _ UnderlyingExecable = (*sql.Tx)(nil) + _ UnderlyingExecutableWithTx = (*sql.DB)(nil) + _ UnderlyingExecutableWithTx = (*sql.Conn)(nil) + _ Execable = (*LoggingExecable)(nil) + _ Transaction = (*LoggingTxn)(nil) +) + +type Database struct { + LoggingDB loggingDB + RawDB *sql.DB + ReadOnlyDB *sql.DB + Owner string + VersionTable string + Log DatabaseLogger + Dialect Dialect + UpgradeTable UpgradeTable + + txnCtxKey contextKey + txnDeadlockMap *exsync.Set[int64] + + IgnoreForeignTables bool + IgnoreUnsupportedDatabase bool + DeadlockDetection bool +} + +var ForceDeadlockDetection bool + +var positionalParamPattern = regexp.MustCompile(`\$(\d+)`) + +func (db *Database) mutateQuery(query string) string { + switch db.Dialect { + case SQLite: + return positionalParamPattern.ReplaceAllString(query, "?$1") + default: + return query + } +} + +func (db *Database) Child(versionTable string, upgradeTable UpgradeTable, log DatabaseLogger) *Database { + if log == nil { + log = db.Log + } + return &Database{ + RawDB: db.RawDB, + LoggingDB: db.LoggingDB, + Owner: "", + VersionTable: versionTable, + UpgradeTable: upgradeTable, + Log: log, + Dialect: db.Dialect, + + txnCtxKey: db.txnCtxKey, + txnDeadlockMap: db.txnDeadlockMap, + + IgnoreForeignTables: true, + IgnoreUnsupportedDatabase: db.IgnoreUnsupportedDatabase, + DeadlockDetection: db.DeadlockDetection, + } +} + +func NewWithDB(db *sql.DB, rawDialect string) (*Database, error) { + dialect, err := ParseDialect(rawDialect) + if err != nil { + return nil, err + } + wrappedDB := &Database{ + RawDB: db, + Dialect: dialect, + Log: NoopLogger, + + IgnoreForeignTables: true, + VersionTable: "version", + + txnCtxKey: contextKey(nextContextKeyDatabaseTransaction.Add(1)), + txnDeadlockMap: exsync.NewSet[int64](), + + DeadlockDetection: ForceDeadlockDetection, + } + wrappedDB.LoggingDB.UnderlyingExecable = db + wrappedDB.LoggingDB.db = wrappedDB + return wrappedDB, nil +} + +func NewWithDialect(uri, rawDialect string) (*Database, error) { + db, err := sql.Open(rawDialect, uri) + if err != nil { + return nil, err + } + + return NewWithDB(db, rawDialect) +} + +type PoolConfig struct { + Type string `yaml:"type"` + URI string `yaml:"uri"` + + MaxOpenConns int `yaml:"max_open_conns"` + MaxIdleConns int `yaml:"max_idle_conns"` + + ConnMaxIdleTime string `yaml:"conn_max_idle_time"` + ConnMaxLifetime string `yaml:"conn_max_lifetime"` +} + +type Config struct { + PoolConfig `yaml:",inline"` + ReadOnlyPool PoolConfig `yaml:"ro_pool"` + + DeadlockDetection bool `yaml:"deadlock_detection"` +} + +func (db *Database) Close() error { + err := db.RawDB.Close() + if db.ReadOnlyDB != nil { + if err2 := db.ReadOnlyDB.Close(); err2 != nil { + if err == nil { + err = fmt.Errorf("closing read-only db failed: %w", err2) + } else { + err = fmt.Errorf("%w (closing read-only db also failed: %v)", err, err2) + } + } + } + return err +} + +func (db *Database) Configure(cfg Config) error { + db.DeadlockDetection = cfg.DeadlockDetection || ForceDeadlockDetection + + if err := db.configure(db.ReadOnlyDB, cfg.ReadOnlyPool); err != nil { + return err + } + + return db.configure(db.RawDB, cfg.PoolConfig) +} + +func (db *Database) configure(rawDB *sql.DB, cfg PoolConfig) error { + if rawDB == nil { + return nil + } + + rawDB.SetMaxOpenConns(cfg.MaxOpenConns) + rawDB.SetMaxIdleConns(cfg.MaxIdleConns) + if len(cfg.ConnMaxIdleTime) > 0 { + maxIdleTimeDuration, err := time.ParseDuration(cfg.ConnMaxIdleTime) + if err != nil { + return fmt.Errorf("failed to parse max_conn_idle_time: %w", err) + } + rawDB.SetConnMaxIdleTime(maxIdleTimeDuration) + } + if len(cfg.ConnMaxLifetime) > 0 { + maxLifetimeDuration, err := time.ParseDuration(cfg.ConnMaxLifetime) + if err != nil { + return fmt.Errorf("failed to parse max_conn_idle_time: %w", err) + } + rawDB.SetConnMaxLifetime(maxLifetimeDuration) + } + return nil +} + +func NewFromConfig(owner string, cfg Config, logger DatabaseLogger) (*Database, error) { + wrappedDB, err := NewWithDialect(cfg.URI, cfg.Type) + if err != nil { + return nil, err + } + + wrappedDB.Owner = owner + if logger != nil { + wrappedDB.Log = logger + } + + if cfg.ReadOnlyPool.MaxOpenConns > 0 { + if cfg.ReadOnlyPool.Type == "" { + cfg.ReadOnlyPool.Type = cfg.Type + } + + roUri := cfg.ReadOnlyPool.URI + if roUri == "" { + uriParts := strings.Split(cfg.URI, "?") + + qs := url.Values{} + if len(uriParts) == 2 { + var err error + qs, err = url.ParseQuery(uriParts[1]) + if err != nil { + return nil, err + } + + qs.Del("_txlock") + qs.Del("_auto_vacuum") + qs.Del("_vacuum") + } + qs.Set("_query_only", "true") + + roUri = uriParts[0] + "?" + qs.Encode() + } + + wrappedDB.ReadOnlyDB, err = sql.Open(cfg.ReadOnlyPool.Type, roUri) + if err != nil { + return nil, err + } + } + + err = wrappedDB.Configure(cfg) + if err != nil { + return nil, err + } + + return wrappedDB, nil +} diff --git a/vendor/go.mau.fi/util/dbutil/iter.go b/vendor/go.mau.fi/util/dbutil/iter.go new file mode 100644 index 0000000000..05d5a17921 --- /dev/null +++ b/vendor/go.mau.fi/util/dbutil/iter.go @@ -0,0 +1,233 @@ +// Copyright (c) 2023 Sumner Evans +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. + +package dbutil + +import ( + "errors" + "fmt" + "runtime" + + "go.mau.fi/util/exzerolog" +) + +var ErrAlreadyIterated = errors.New("this iterator has been already iterated") + +// RowIter is a wrapper for [Rows] that allows conveniently iterating over rows +// with a predefined scanner function. +type RowIter[T any] interface { + // Iter iterates over the rows and calls the given function for each row. + // + // If the function returns false, the iteration is stopped. + // If the function returns an error, the iteration is stopped and the error is + // returned. + Iter(func(T) (bool, error)) error + + // AsList collects all rows into a slice. + AsList() ([]T, error) +} + +type ConvertRowFn[T any] func(Scannable) (T, error) + +// NewRowIter is a proxy for NewRowIterWithError for more convenient usage. +// +// For example: +// +// func exampleConvertRowFn(rows Scannable) (*YourType, error) { +// ... +// } +// func exampleFunction() { +// iter := dbutil.ConvertRowFn[*YourType](exampleConvertRowFn).NewRowIter( +// db.Query("SELECT ..."), +// ) +// } +func (crf ConvertRowFn[T]) NewRowIter(rows Rows, err error) RowIter[T] { + return newRowIterWithError(rows, crf, err) +} + +type rowIterImpl[T any] struct { + Rows + ConvertRow ConvertRowFn[T] + + iterated bool + caller string + err error +} + +// NewRowIter creates a new RowIter from the given Rows and scanner function. +// +// Deprecated: use NewRowIterWithError instead to avoid an unnecessary separate error check on the Query result. +// +// Instead of +// +// func DoQuery(...) (dbutil.RowIter, error) { +// rows, err := db.Query(...) +// if err != nil { +// return nil, err +// } +// return dbutil.NewRowIter(rows, convertFn), nil +// } +// +// you should use +// +// func DoQuery(...) dbutil.RowIter { +// rows, err := db.Query(...) +// return dbutil.NewRowIterWithError(rows, convertFn, err) +// } +// +// or alternatively pre-wrap the convertFn +// +// var converter = dbutil.ConvertRowFn(convertFn) +// func DoQuery(...) dbutil.RowIter { +// return converter.NewRowIter(db.Query(...)) +// } +// +// Embedding the error in the iterator allows the caller to do only one error check instead of two: +// +// iter, err := DoQuery(...) +// if err != nil { ... } +// result, err := iter.Iter(...) +// if err != nil { ... } +// +// vs +// +// result, err := DoQuery(...).Iter(...) +// if err != nil { ... } +func NewRowIter[T any](rows Rows, convertFn ConvertRowFn[T]) RowIter[T] { + return newRowIterWithError(rows, convertFn, nil) +} + +// NewRowIterWithError creates a new RowIter from the given Rows and scanner function with default error. If not nil, it will be returned without calling iterator function. +func NewRowIterWithError[T any](rows Rows, convertFn ConvertRowFn[T], err error) RowIter[T] { + return newRowIterWithError(rows, convertFn, err) +} + +func newRowIterWithError[T any](rows Rows, convertFn ConvertRowFn[T], err error) RowIter[T] { + ri := &rowIterImpl[T]{Rows: rows, ConvertRow: convertFn, err: err} + if err == nil { + callerSkip := 2 + if pc, file, line, ok := runtime.Caller(callerSkip); ok { + ri.caller = exzerolog.CallerWithFunctionName(pc, file, line) + } + runtime.SetFinalizer(ri, (*rowIterImpl[T]).destroy) + } + return ri +} + +func ScanSingleColumn[T any](rows Scannable) (val T, err error) { + err = rows.Scan(&val) + return +} + +type NewableDataStruct[T any] interface { + DataStruct[T] + New() T +} + +func ScanDataStruct[T NewableDataStruct[T]](rows Scannable) (T, error) { + var val T + return val.New().Scan(rows) +} + +func (i *rowIterImpl[T]) destroy() { + if !i.iterated { + panic(fmt.Errorf("RowIter created at %s wasn't iterated", i.caller)) + } +} + +func (i *rowIterImpl[T]) Iter(fn func(T) (bool, error)) error { + if i == nil { + return nil + } else if i.Rows == nil || i.err != nil { + return i.err + } + defer func() { + _ = i.Rows.Close() + i.iterated = true + }() + + for i.Rows.Next() { + if item, err := i.ConvertRow(i.Rows); err != nil { + i.err = err + return err + } else if cont, err := fn(item); err != nil { + i.err = err + return err + } else if !cont { + break + } + } + + err := i.Rows.Err() + if err != nil { + i.err = err + } else { + i.err = ErrAlreadyIterated + } + return err +} + +func (i *rowIterImpl[T]) AsList() (list []T, err error) { + err = i.Iter(func(item T) (bool, error) { + list = append(list, item) + return true, nil + }) + return +} + +func RowIterAsMap[T any, Key comparable, Value any](ri RowIter[T], getKeyValue func(T) (Key, Value)) (map[Key]Value, error) { + m := make(map[Key]Value) + err := ri.Iter(func(item T) (bool, error) { + k, v := getKeyValue(item) + m[k] = v + return true, nil + }) + return m, err +} + +type sliceIterImpl[T any] struct { + items []T + err error +} + +func NewSliceIter[T any](items []T) RowIter[T] { + return &sliceIterImpl[T]{items: items} +} + +func NewSliceIterWithError[T any](items []T, err error) RowIter[T] { + return &sliceIterImpl[T]{items: items, err: err} +} + +func (i *sliceIterImpl[T]) Iter(fn func(T) (bool, error)) error { + if i == nil { + return nil + } else if i.err != nil { + return i.err + } + + for _, item := range i.items { + if cont, err := fn(item); err != nil { + i.err = err + return err + } else if !cont { + break + } + } + + i.err = ErrAlreadyIterated + return nil +} + +func (i *sliceIterImpl[T]) AsList() ([]T, error) { + if i == nil { + return nil, nil + } else if i.err != nil { + return nil, i.err + } + + i.err = ErrAlreadyIterated + return i.items, nil +} diff --git a/vendor/go.mau.fi/util/dbutil/json.go b/vendor/go.mau.fi/util/dbutil/json.go new file mode 100644 index 0000000000..4f46c0b107 --- /dev/null +++ b/vendor/go.mau.fi/util/dbutil/json.go @@ -0,0 +1,47 @@ +package dbutil + +import ( + "database/sql/driver" + "encoding/json" + "fmt" + "unsafe" +) + +// JSON is a utility type for using arbitrary JSON data as values in database Exec and Scan calls. +type JSON struct { + Data any +} + +func (j JSON) Scan(i any) error { + switch value := i.(type) { + case nil: + return nil + case string: + return json.Unmarshal([]byte(value), j.Data) + case []byte: + return json.Unmarshal(value, j.Data) + default: + return fmt.Errorf("invalid type %T for dbutil.JSON.Scan", i) + } +} + +func (j JSON) Value() (driver.Value, error) { + if j.Data == nil { + return nil, nil + } + v, err := json.Marshal(j.Data) + return unsafe.String(unsafe.SliceData(v), len(v)), err +} + +// JSONPtr is a convenience function for wrapping a pointer to a value in the JSON utility, but removing typed nils +// (i.e. preventing nils from turning into the string "null" in the database). +func JSONPtr[T any](val *T) JSON { + return JSON{Data: UntypedNil(val)} +} + +func UntypedNil[T any](val *T) any { + if val == nil { + return nil + } + return val +} diff --git a/vendor/go.mau.fi/util/dbutil/log.go b/vendor/go.mau.fi/util/dbutil/log.go new file mode 100644 index 0000000000..017420f7eb --- /dev/null +++ b/vendor/go.mau.fi/util/dbutil/log.go @@ -0,0 +1,152 @@ +package dbutil + +import ( + "context" + "regexp" + "runtime" + "strings" + "time" + + "github.com/rs/zerolog" +) + +type DatabaseLogger interface { + QueryTiming(ctx context.Context, method, query string, args []any, nrows int, duration time.Duration, err error) + WarnUnsupportedVersion(current, compat, latest int) + PrepareUpgrade(current, compat, latest int) + DoUpgrade(from, to int, message string, txn TxnMode) + // Deprecated: legacy warning method, return errors instead + Warn(msg string, args ...any) +} + +type noopLogger struct{} + +var NoopLogger DatabaseLogger = &noopLogger{} + +func (n noopLogger) WarnUnsupportedVersion(_, _, _ int) {} +func (n noopLogger) PrepareUpgrade(_, _, _ int) {} +func (n noopLogger) DoUpgrade(_, _ int, _ string, _ TxnMode) {} +func (n noopLogger) Warn(msg string, args ...any) {} + +func (n noopLogger) QueryTiming(_ context.Context, _, _ string, _ []any, _ int, _ time.Duration, _ error) { +} + +type zeroLogger struct { + l *zerolog.Logger + ZeroLogSettings +} + +type ZeroLogSettings struct { + CallerSkipFrame int + Caller bool + + // TraceLogAllQueries specifies whether or not all queries should be logged + // at the TRACE level. + TraceLogAllQueries bool +} + +func ZeroLogger(log zerolog.Logger, cfg ...ZeroLogSettings) DatabaseLogger { + return ZeroLoggerPtr(&log, cfg...) +} + +func ZeroLoggerPtr(log *zerolog.Logger, cfg ...ZeroLogSettings) DatabaseLogger { + wrapped := &zeroLogger{l: log} + if len(cfg) > 0 { + wrapped.ZeroLogSettings = cfg[0] + } else { + wrapped.ZeroLogSettings = ZeroLogSettings{ + CallerSkipFrame: 2, // Skip LoggingExecable.ExecContext and zeroLogger.QueryTiming + Caller: true, + } + } + return wrapped +} + +func (z zeroLogger) WarnUnsupportedVersion(current, compat, latest int) { + z.l.Warn(). + Int("current_version", current). + Int("oldest_compatible_version", compat). + Int("latest_known_version", latest). + Msg("Unsupported database schema version, continuing anyway") +} + +func (z zeroLogger) PrepareUpgrade(current, compat, latest int) { + evt := z.l.Info(). + Int("current_version", current). + Int("oldest_compatible_version", compat). + Int("latest_known_version", latest) + if current >= latest { + evt.Msg("Database is up to date") + } else { + evt.Msg("Preparing to update database schema") + } +} + +func (z zeroLogger) DoUpgrade(from, to int, message string, txn TxnMode) { + z.l.Info(). + Int("from", from). + Int("to", to). + Str("txn_mode", string(txn)). + Str("description", message). + Msg("Upgrading database") +} + +var whitespaceRegex = regexp.MustCompile(`\s+`) + +var GlobalSafeQueryLog bool + +func (z zeroLogger) QueryTiming(ctx context.Context, method, query string, args []any, nrows int, duration time.Duration, err error) { + log := zerolog.Ctx(ctx) + if log.GetLevel() == zerolog.Disabled || log == zerolog.DefaultContextLogger { + log = z.l + } + if (!z.TraceLogAllQueries || log.GetLevel() != zerolog.TraceLevel) && !GlobalSafeQueryLog && duration < 1*time.Second { + return + } + if nrows > -1 { + rowLog := log.With().Int("rows", nrows).Logger() + log = &rowLog + } + query = strings.TrimSpace(whitespaceRegex.ReplaceAllLiteralString(query, " ")) + callerSkipFrame := z.CallerSkipFrame + if GlobalSafeQueryLog || duration > 1*time.Second { + for ; callerSkipFrame < 10; callerSkipFrame++ { + _, filename, _, _ := runtime.Caller(callerSkipFrame) + if !strings.Contains(filename, "/dbutil/") { + break + } + } + } + if GlobalSafeQueryLog { + log.Debug(). + Err(err). + Int64("duration_µs", duration.Microseconds()). + Str("method", method). + Str("query", query). + Caller(callerSkipFrame). + Msg("Query") + } else { + log.Trace(). + Err(err). + Int64("duration_µs", duration.Microseconds()). + Str("method", method). + Str("query", query). + Interface("query_args", args). + Msg("Query") + } + if duration >= 1*time.Second { + evt := log.Warn(). + Float64("duration_seconds", duration.Seconds()). + AnErr("result_error", err). + Str("method", method). + Str("query", query) + if z.Caller { + evt = evt.Caller(callerSkipFrame) + } + evt.Msg("Query took long") + } +} + +func (z zeroLogger) Warn(msg string, args ...any) { + z.l.Warn().Msgf(msg, args...) // zerolog-allow-msgf +} diff --git a/vendor/go.mau.fi/util/dbutil/massinsert.go b/vendor/go.mau.fi/util/dbutil/massinsert.go new file mode 100644 index 0000000000..497f9dfa05 --- /dev/null +++ b/vendor/go.mau.fi/util/dbutil/massinsert.go @@ -0,0 +1,164 @@ +// Copyright (c) 2024 Tulir Asokan +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. + +package dbutil + +import ( + "fmt" + "regexp" + "strings" +) + +// Array is an interface for small fixed-size arrays. +// It exists because generics can't specify array sizes: https://github.com/golang/go/issues/44253 +type Array interface { + [0]any | [1]any | [2]any | [3]any | [4]any | [5]any | [6]any | [7]any | [8]any | [9]any | + [10]any | [11]any | [12]any | [13]any | [14]any | [15]any | [16]any | [17]any | [18]any | [19]any | + [20]any | [21]any | [22]any | [23]any | [24]any | [25]any | [26]any | [27]any | [28]any | [29]any +} + +// MassInsertable represents a struct that contains dynamic values for a mass insert query. +type MassInsertable[T Array] interface { + GetMassInsertValues() T +} + +// MassInsertBuilder contains pre-validated templates for building mass insert SQL queries. +type MassInsertBuilder[Item MassInsertable[DynamicParams], StaticParams Array, DynamicParams Array] struct { + queryTemplate string + placeholderTemplate string +} + +// NewMassInsertBuilder creates a new MassInsertBuilder that can build mass insert database queries. +// +// Parameters in mass insert queries are split into two types: static parameters +// and dynamic parameters. Static parameters are the same for all items being +// inserted, while dynamic parameters are different for each item. +// +// The given query should be a normal INSERT query for a single row. It can also +// have ON CONFLICT clauses, as long as the clause uses `excluded` instead of +// positional parameters. +// +// The placeholder template is used to replace the `VALUES` part of the given +// query. It should contain a positional placeholder ($1, $2, ...) for each +// static placeholder, and a fmt directive (`$%d`) for each dynamic placeholder. +// +// The given query and placeholder template are validated here and the function +// will panic if they're invalid (e.g. if the `VALUES` part of the insert query +// can't be found, or if the placeholder template doesn't have the right things). +// The idea is to use this function to populate a global variable with the mass +// insert builder, so the panic will happen at startup if the query or +// placeholder template are invalid (instead of returning an error when trying +// to use the query later). +// +// Example: +// +// type Message struct { +// ChatID int +// RemoteID string +// MXID id.EventID +// Timestamp time.Time +// } +// +// func (msg *Message) GetMassInsertValues() [3]any { +// return [3]any{msg.RemoteID, msg.MXID, msg.Timestamp.UnixMilli()} +// } +// +// const insertMessageQuery = `INSERT INTO message (chat_id, remote_id, mxid, timestamp) VALUES ($1, $2, $3, $4)` +// var massInsertMessageBuilder = dbutil.NewMassInsertBuilder[Message, [2]any](insertMessageQuery, "($1, $%d, $%d, $%d, $%d)") +// +// func DoMassInsert(ctx context.Context, messages []*Message) error { +// query, params := massInsertMessageBuilder.Build([1]any{messages[0].ChatID}, messages) +// return db.Exec(ctx, query, params...) +// } +func NewMassInsertBuilder[Item MassInsertable[DynamicParams], StaticParams Array, DynamicParams Array]( + singleInsertQuery, placeholderTemplate string, +) *MassInsertBuilder[Item, StaticParams, DynamicParams] { + var dyn DynamicParams + var stat StaticParams + totalParams := len(dyn) + len(stat) + mainQueryVariablePlaceholderParts := make([]string, totalParams) + for i := 0; i < totalParams; i++ { + mainQueryVariablePlaceholderParts[i] = fmt.Sprintf(`\$%d`, i+1) + } + mainQueryVariablePlaceholderRegex := regexp.MustCompile(fmt.Sprintf(`\(\s*%s\s*\)`, strings.Join(mainQueryVariablePlaceholderParts, `\s*,\s*`))) + queryPlaceholders := mainQueryVariablePlaceholderRegex.FindAllString(singleInsertQuery, -1) + if len(queryPlaceholders) == 0 { + panic(fmt.Errorf("invalid insert query: placeholders not found")) + } else if len(queryPlaceholders) > 1 { + panic(fmt.Errorf("invalid insert query: multiple placeholders found")) + } + for i := 0; i < len(stat); i++ { + if !strings.Contains(placeholderTemplate, fmt.Sprintf("$%d", i+1)) { + panic(fmt.Errorf("invalid placeholder template: static placeholder $%d not found", i+1)) + } + } + if strings.Contains(placeholderTemplate, fmt.Sprintf("$%d", len(stat)+1)) { + panic(fmt.Errorf("invalid placeholder template: non-static placeholder $%d found", len(stat)+1)) + } + fmtParams := make([]any, len(dyn)) + for i := 0; i < len(dyn); i++ { + fmtParams[i] = fmt.Sprintf("$%d", len(stat)+i+1) + } + formattedPlaceholder := fmt.Sprintf(placeholderTemplate, fmtParams...) + if strings.Contains(formattedPlaceholder, "!(EXTRA string=") { + panic(fmt.Errorf("invalid placeholder template: extra string found")) + } + for i := 0; i < len(dyn); i++ { + if !strings.Contains(formattedPlaceholder, fmt.Sprintf("$%d", len(stat)+i+1)) { + panic(fmt.Errorf("invalid placeholder template: dynamic placeholder $%d not found", len(stat)+i+1)) + } + } + return &MassInsertBuilder[Item, StaticParams, DynamicParams]{ + queryTemplate: strings.Replace(singleInsertQuery, queryPlaceholders[0], "%s", 1), + placeholderTemplate: placeholderTemplate, + } +} + +// Build constructs a ready-to-use mass insert SQL query using the prepared templates in this builder. +// +// This method always only produces one query. If there are lots of items, +// chunking them beforehand may be required to avoid query parameter limits. +// For example, SQLite (3.32+) has a limit of 32766 parameters by default, +// while Postgres allows up to 65535. To find out if there are too many items, +// divide the maximum number of parameters by the number of dynamic columns in +// your data and subtract the number of static columns. +// +// Example of chunking input data: +// +// var mib dbutil.MassInsertBuilder +// var db *dbutil.Database +// func MassInsert(ctx context.Context, ..., data []T) error { +// return db.DoTxn(ctx, nil, func(ctx context.Context) error { +// for _, chunk := range exslices.Chunk(data, 100) { +// query, params := mib.Build(staticParams) +// _, err := db.Exec(ctx, query, params...) +// if err != nil { +// return err +// } +// } +// return nil +// } +// } +func (mib *MassInsertBuilder[Item, StaticParams, DynamicParams]) Build(static StaticParams, data []Item) (query string, params []any) { + var itemValues DynamicParams + params = make([]any, len(static)+len(itemValues)*len(data)) + placeholders := make([]string, len(data)) + for i := 0; i < len(static); i++ { + params[i] = static[i] + } + fmtParams := make([]any, len(itemValues)) + for i, item := range data { + baseIndex := len(static) + len(itemValues)*i + itemValues = item.GetMassInsertValues() + for j := 0; j < len(itemValues); j++ { + params[baseIndex+j] = itemValues[j] + fmtParams[j] = baseIndex + j + 1 + } + placeholders[i] = fmt.Sprintf(mib.placeholderTemplate, fmtParams...) + } + query = fmt.Sprintf(mib.queryTemplate, strings.Join(placeholders, ", ")) + return +} diff --git a/vendor/go.mau.fi/util/dbutil/module.go b/vendor/go.mau.fi/util/dbutil/module.go new file mode 100644 index 0000000000..c0c711932d --- /dev/null +++ b/vendor/go.mau.fi/util/dbutil/module.go @@ -0,0 +1,119 @@ +// Package dbutil provides a simple framework for in-process database +// migrations. You provide the SQL files and they are run to upgrade +// the database. A versions table is automatically created in the +// database to track which migrations have been applied. There is +// support for multiple migration pathways, for example v0->v2 versus +// v0->v1->v2, and the shorter one is prioritized if both are +// provided. +// +// Example usage from Go: +// +// package main +// +// import ( +// "context" +// "database/sql" +// "embed" +// +// "go.mau.fi/util/dbutil" +// ) +// +// //go:embed *.sql +// var upgrades embed.FS +// +// func mainE() error { +// ctx := context.Background() +// rawDB, err := sql.Open("sqlite3", "./hotdogs.db") +// if err != nil { +// return err +// } +// db, err := dbutil.NewWithDB(rawDB, "sqlite3") +// if err != nil { +// return err +// } +// table := dbutil.UpgradeTable{} +// table.RegisterFS(upgrades) +// err = db.Upgrade(ctx) +// if err != nil { +// return err +// } +// // db has been upgraded to latest version +// return nil +// } +// +// In dbutil, the database is understood to have a monotonic integer +// sequence of versions starting at v0, v1, v2, etc. By providing +// migrations you define a directed acyclic graph (DAG) that allows +// dbutil to find a path from the current recorded database version to +// the latest version available. +// +// Each SQL migration file has a mandatory comment header that +// identifies which database versions it upgrades between. For example +// this is a migration that upgrades from v0 to v2: +// +// -- v0 -> v2: Do some things +// +// You can omit the first version for the common case of upgrading to +// a version from the previous version. For example this is a +// migration that upgrades from v1 to v2: +// +// -- v2: Do fewer things +// +// By providing "v1" and "v2" migrations, a v0 database would be +// upgraded to v1 and then v2, while by providing an additional "v0 -> +// v2" migration a v0 database would be upgraded directly to v2 as it +// is a more direct path. With that migration provided the "v1" +// migration is no longer needed. +// +// By default, when running migrations, if a more recent database +// version is live than the current code knows about (for example, +// from running a previous version of the application), dbutil will +// error out. However, many database migrations are backwards +// compatible. You can therefore indicate this when writing a +// migration, and previous versions of the application will accept a +// database with that migration applied, even if they are unaware of +// its contents. For example, if the migration from v1 to v2 was +// backwards compatible, you could provide this migration: +// +// -- v2 (compatible with v1+): Do fewer things +// +// When applying the migration, the compatibility level (v1) is saved +// to the versions table in the database, so that older versions of +// the application which only know about v1 will see that v2 of the +// database is still OK to use. If the compatibility level is not set, +// then it defaults to the same as the target version for the +// migration, which achieves the default behavior described in the +// previous paragraph. +// +// You can provide additional flags immediately following the header +// line. To disable wrapping the upgrade in a single transaction, put +// "transaction: off" on the second line. +// +// -- v5: Upgrade without transaction +// -- transaction: off +// // do dangerous stuff +// +// Within migrations, there is special syntax that can be used to +// filter parts of the SQL to apply only with specific dialects. To +// limit the next line to one dialect: +// +// -- only: postgres +// +// To limit the next N lines: +// +// -- only: sqlite for next 123 lines +// +// To limit a block of code, fenced by another directive: +// +// -- only: sqlite until "end only" +// QUERY; +// ANOTHER QUERY; +// -- end only sqlite +// +// If the single-line limit is on the second line of the file, the +// whole file is limited to that dialect. +// +// If the filter ends with `(lines commented)`, then ALL lines chosen +// by the filter will be uncommented. The `--` comment prefix must be +// at the beginning of the line with no whitespace ahead of it. +package dbutil diff --git a/vendor/go.mau.fi/util/dbutil/queryhelper.go b/vendor/go.mau.fi/util/dbutil/queryhelper.go new file mode 100644 index 0000000000..fef4e80f5e --- /dev/null +++ b/vendor/go.mau.fi/util/dbutil/queryhelper.go @@ -0,0 +1,171 @@ +// Copyright (c) 2023 Tulir Asokan +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. + +package dbutil + +import ( + "context" + "database/sql" + "errors" + "reflect" + "time" + + "golang.org/x/exp/constraints" +) + +// DataStruct is an interface for structs that represent a single database row. +type DataStruct[T any] interface { + Scan(row Scannable) (T, error) +} + +// QueryHelper is a generic helper struct for SQL query execution boilerplate. +// +// After implementing the Scan and Init methods in a data struct, the query +// helper allows writing query functions in a single line. +type QueryHelper[T DataStruct[T]] struct { + db *Database + newFunc func(qh *QueryHelper[T]) T +} + +// MakeQueryHelperSimple is a form of MakeQueryHelper where the constructor function does not +// take parameters. It can be used to reduce boilerplate when not using an active record model. +// +// If the provided function is nil, the behavior is same as MakeQueryHelper. +func MakeQueryHelperSimple[T DataStruct[T]](db *Database, new func() T) *QueryHelper[T] { + if new == nil { + return MakeQueryHelper[T](db, nil) + } + return MakeQueryHelper(db, func(qh *QueryHelper[T]) T { + return new() + }) +} + +// MakeQueryHelperReflect is a form of MakeQueryHelper that uses reflection to +// create new instances of T. This requires that T is a pointer to a struct type. +func MakeQueryHelperReflect[T DataStruct[T]](db *Database) *QueryHelper[T] { + return MakeQueryHelper[T](db, nil) +} + +func reflectBuilder[T DataStruct[T]](ref reflect.Type) func(*QueryHelper[T]) T { + return func(_ *QueryHelper[T]) T { + return reflect.New(ref).Interface().(T) + } +} + +// MakeQueryHelper creates a new QueryHelper for the given type T, using the provided constructor function. +// +// If the constructor function is nil, it will be generated using reflection. +// This requires that T is a pointer to a struct type. +func MakeQueryHelper[T DataStruct[T]](db *Database, new func(qh *QueryHelper[T]) T) *QueryHelper[T] { + if new == nil { + var zero T + new = reflectBuilder[T](reflect.TypeOf(zero).Elem()) + } + return &QueryHelper[T]{db: db, newFunc: new} +} + +// ValueOrErr is a helper function that returns the value if err is nil, or +// returns nil and the error if err is not nil. It can be used to avoid +// `if err != nil { return nil, err }` boilerplate in certain cases like +// DataStruct.Scan implementations. +func ValueOrErr[T any](val *T, err error) (*T, error) { + if err != nil { + return nil, err + } + return val, nil +} + +// StrPtr returns a pointer to the given string, or nil if the string is empty. +func StrPtr[T ~string](val T) *string { + if val == "" { + return nil + } + strVal := string(val) + return &strVal +} + +// NumPtr returns a pointer to the given number, or nil if the number is zero. +func NumPtr[T constraints.Integer | constraints.Float](val T) *T { + if val == 0 { + return nil + } + return &val +} + +// UnixPtr returns a pointer to the given time as unix seconds, or nil if the time is zero. +func UnixPtr(val time.Time) *int64 { + return ConvertedPtr(val, time.Time.Unix) +} + +// UnixMilliPtr returns a pointer to the given time as unix milliseconds, or nil if the time is zero. +func UnixMilliPtr(val time.Time) *int64 { + return ConvertedPtr(val, time.Time.UnixMilli) +} + +type Zeroable interface { + IsZero() bool +} + +// ConvertedPtr returns a pointer to the converted version of the given value, or nil if the input is zero. +// +// This is primarily meant for time.Time, but it can be used with any type that has implements `IsZero() bool`. +// +// yourTime := time.Now() +// unixMSPtr := dbutil.TimePtr(yourTime, time.Time.UnixMilli) +func ConvertedPtr[Input Zeroable, Output any](val Input, converter func(Input) Output) *Output { + if val.IsZero() { + return nil + } + converted := converter(val) + return &converted +} + +func (qh *QueryHelper[T]) GetDB() *Database { + return qh.db +} + +func (qh *QueryHelper[T]) New() T { + return qh.newFunc(qh) +} + +// Exec executes a query with ExecContext and returns the error. +// +// It omits the sql.Result return value, as it is rarely used. When the result +// is wanted, use `qh.GetDB().Exec(...)` instead, which is +// otherwise equivalent. +func (qh *QueryHelper[T]) Exec(ctx context.Context, query string, args ...any) error { + _, err := qh.db.Exec(ctx, query, args...) + return err +} + +func (qh *QueryHelper[T]) scanNew(row Scannable) (T, error) { + return qh.New().Scan(row) +} + +// QueryOne executes a query with QueryRowContext, uses the associated DataStruct +// to scan it, and returns the value. If the query returns no rows, it returns nil +// and no error. +func (qh *QueryHelper[T]) QueryOne(ctx context.Context, query string, args ...any) (val T, err error) { + val, err = qh.scanNew(qh.db.QueryRow(ctx, query, args...)) + if errors.Is(err, sql.ErrNoRows) { + return *new(T), nil + } + return val, err +} + +// QueryMany executes a query with QueryContext, uses the associated DataStruct +// to scan each row, and returns the values. If the query returns no rows, it +// returns a non-nil zero-length slice and no error. +func (qh *QueryHelper[T]) QueryMany(ctx context.Context, query string, args ...any) ([]T, error) { + return qh.QueryManyIter(ctx, query, args...).AsList() +} + +// QueryManyIter executes a query with QueryContext and returns a RowIter +// that will use the associated DataStruct to scan each row. +func (qh *QueryHelper[T]) QueryManyIter(ctx context.Context, query string, args ...any) RowIter[T] { + rows, err := qh.db.Query(ctx, query, args...) + return NewRowIterWithError(rows, qh.scanNew, err) +} diff --git a/vendor/go.mau.fi/util/dbutil/reflectscan.go b/vendor/go.mau.fi/util/dbutil/reflectscan.go new file mode 100644 index 0000000000..77dc3ac5b6 --- /dev/null +++ b/vendor/go.mau.fi/util/dbutil/reflectscan.go @@ -0,0 +1,30 @@ +// Copyright (c) 2024 Tulir Asokan +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. + +package dbutil + +import ( + "reflect" +) + +func reflectScan[T any](row Scannable) (*T, error) { + t := new(T) + val := reflect.ValueOf(t).Elem() + fields := reflect.VisibleFields(val.Type()) + scanInto := make([]any, len(fields)) + for i, field := range fields { + scanInto[i] = val.FieldByIndex(field.Index).Addr().Interface() + } + err := row.Scan(scanInto...) + return t, err +} + +// NewSimpleReflectRowIter creates a new RowIter that uses reflection to scan rows into the given type. +// +// This is a simplified implementation that always scans to all struct fields. It does not support any kind of struct tags. +func NewSimpleReflectRowIter[T any](rows Rows, err error) RowIter[*T] { + return ConvertRowFn[*T](reflectScan[T]).NewRowIter(rows, err) +} diff --git a/vendor/go.mau.fi/util/dbutil/transaction.go b/vendor/go.mau.fi/util/dbutil/transaction.go new file mode 100644 index 0000000000..7abd329a42 --- /dev/null +++ b/vendor/go.mau.fi/util/dbutil/transaction.go @@ -0,0 +1,184 @@ +// Copyright (c) 2023 Tulir Asokan +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. + +package dbutil + +import ( + "context" + "database/sql" + "errors" + "fmt" + "runtime" + "sync/atomic" + "time" + + "github.com/petermattis/goid" + "github.com/rs/zerolog" + + "go.mau.fi/util/exerrors" + "go.mau.fi/util/random" +) + +var ( + ErrTxn = errors.New("transaction") + ErrTxnBegin = fmt.Errorf("%w: begin", ErrTxn) + ErrTxnCommit = fmt.Errorf("%w: commit", ErrTxn) +) + +type contextKey int64 + +const ( + ContextKeyDoTxnCallerSkip contextKey = 1 +) + +var nextContextKeyDatabaseTransaction atomic.Uint64 + +func init() { + nextContextKeyDatabaseTransaction.Store(1 << 61) +} + +func (db *Database) Exec(ctx context.Context, query string, args ...any) (sql.Result, error) { + return db.Execable(ctx).ExecContext(ctx, query, args...) +} + +func (db *Database) Query(ctx context.Context, query string, args ...any) (Rows, error) { + return db.Execable(ctx).QueryContext(ctx, query, args...) +} + +func (db *Database) QueryRow(ctx context.Context, query string, args ...any) *sql.Row { + return db.Execable(ctx).QueryRowContext(ctx, query, args...) +} + +var ErrTransactionDeadlock = errors.New("attempt to start new transaction in goroutine with transaction") +var ErrQueryDeadlock = errors.New("attempt to query without context in goroutine with transaction") +var ErrAcquireDeadlock = errors.New("attempt to acquire connection without context in goroutine with transaction") + +func (db *Database) BeginTx(ctx context.Context, opts *TxnOptions) (*LoggingTxn, error) { + if ctx == nil { + panic("BeginTx() called with nil ctx") + } + return db.LoggingDB.BeginTx(ctx, opts) +} + +func (db *Database) DoTxn(ctx context.Context, opts *TxnOptions, fn func(ctx context.Context) error) error { + if ctx == nil { + panic("DoTxn() called with nil ctx") + } + if ctx.Value(db.txnCtxKey) != nil { + zerolog.Ctx(ctx).Trace().Msg("Already in a transaction, not creating a new one") + return fn(ctx) + } else if db.DeadlockDetection { + goroutineID := goid.Get() + if !db.txnDeadlockMap.Add(goroutineID) { + panic(ErrTransactionDeadlock) + } + defer db.txnDeadlockMap.Remove(goroutineID) + } + + log := zerolog.Ctx(ctx).With().Str("db_txn_id", random.String(12)).Logger() + slowLog := log + + callerSkip := 1 + if val := ctx.Value(ContextKeyDoTxnCallerSkip); val != nil { + callerSkip += val.(int) + } + if pc, file, line, ok := runtime.Caller(callerSkip); ok { + slowLog = log.With().Str(zerolog.CallerFieldName, zerolog.CallerMarshalFunc(pc, file, line)).Logger() + } + + start := time.Now() + deadlockCh := make(chan struct{}) + go func() { + ticker := time.NewTicker(5 * time.Second) + defer ticker.Stop() + + for { + select { + case <-ticker.C: + slowLog.Warn(). + Float64("duration_seconds", time.Since(start).Seconds()). + Msg("Transaction still running") + case <-deadlockCh: + return + } + } + }() + defer func() { + close(deadlockCh) + dur := time.Since(start) + if dur > time.Second { + slowLog.Warn(). + Float64("duration_seconds", dur.Seconds()). + Msg("Transaction took long") + } + }() + tx, err := db.BeginTx(ctx, opts) + if err != nil { + log.Trace().Err(err).Msg("Failed to begin transaction") + return exerrors.NewDualError(ErrTxnBegin, err) + } + logLevel := zerolog.TraceLevel + if GlobalSafeQueryLog { + logLevel = zerolog.DebugLevel + } + log.WithLevel(logLevel).Msg("Transaction started") + tx.noTotalLog = true + ctx = log.WithContext(ctx) + ctx = context.WithValue(ctx, db.txnCtxKey, tx) + err = fn(ctx) + if err != nil { + log.Trace().Err(err).Msg("Database transaction failed, rolling back") + rollbackErr := tx.Rollback() + if rollbackErr != nil { + log.Warn().Err(rollbackErr).Msg("Rollback after transaction error failed") + } else { + log.WithLevel(logLevel).Msg("Rollback successful") + } + return err + } + err = tx.Commit() + if err != nil { + log.WithLevel(logLevel).Err(err).Msg("Commit failed") + return exerrors.NewDualError(ErrTxnCommit, err) + } + log.WithLevel(logLevel).Msg("Commit successful") + return nil +} + +func (db *Database) Execable(ctx context.Context) Execable { + if ctx == nil { + panic("Conn() called with nil ctx") + } + txn, ok := ctx.Value(db.txnCtxKey).(Transaction) + if ok { + return txn + } + if db.DeadlockDetection && db.txnDeadlockMap.Has(goid.Get()) { + panic(ErrQueryDeadlock) + } + return &db.LoggingDB +} + +func (db *Database) AcquireConn(ctx context.Context) (Conn, error) { + if ctx == nil { + return nil, fmt.Errorf("AcquireConn() called with nil ctx") + } + _, ok := ctx.Value(db.txnCtxKey).(Transaction) + if ok { + return nil, fmt.Errorf("cannot acquire connection while in a transaction") + } + if db.DeadlockDetection && db.txnDeadlockMap.Has(goid.Get()) { + panic(ErrAcquireDeadlock) + } + conn, err := db.RawDB.Conn(ctx) + if err != nil { + return nil, err + } + return &LoggingExecable{ + UnderlyingExecable: conn, + db: db, + }, nil +} diff --git a/vendor/go.mau.fi/util/dbutil/upgrades.go b/vendor/go.mau.fi/util/dbutil/upgrades.go new file mode 100644 index 0000000000..9536a2737c --- /dev/null +++ b/vendor/go.mau.fi/util/dbutil/upgrades.go @@ -0,0 +1,262 @@ +// Copyright (c) 2023 Tulir Asokan +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. + +package dbutil + +import ( + "context" + "database/sql" + "errors" + "fmt" +) + +type upgradeFunc func(context.Context, *Database) error + +type upgrade struct { + message string + fn upgradeFunc + + upgradesTo int + compatVersion int + transaction TxnMode +} + +func (u *upgrade) DangerouslyRun(ctx context.Context, db *Database) (upgradesTo, compat int, err error) { + return u.upgradesTo, u.compatVersion, u.fn(ctx, db) +} + +var ErrUnsupportedDatabaseVersion = errors.New("unsupported database schema version") +var ErrForeignTables = errors.New("the database contains foreign tables") +var ErrNotOwned = errors.New("the database is owned by") +var ErrUnsupportedDialect = errors.New("unsupported database dialect") + +type NotOwnedError struct { + Owner string +} + +func (e NotOwnedError) Error() string { + return fmt.Sprintf("%v %s", ErrNotOwned, e.Owner) +} + +func (e NotOwnedError) Unwrap() error { + return ErrNotOwned +} + +func DangerousInternalUpgradeVersionTable(ctx context.Context, db *Database) error { + return db.upgradeVersionTable(ctx) +} + +func (db *Database) upgradeVersionTable(ctx context.Context) error { + if compatColumnExists, err := db.ColumnExists(ctx, db.VersionTable, "compat"); err != nil { + return fmt.Errorf("failed to check if version table is up to date: %w", err) + } else if !compatColumnExists { + if tableExists, err := db.TableExists(ctx, db.VersionTable); err != nil { + return fmt.Errorf("failed to check if version table exists: %w", err) + } else if !tableExists { + _, err = db.Exec(ctx, fmt.Sprintf("CREATE TABLE %s (version INTEGER, compat INTEGER)", db.VersionTable)) + if err != nil { + return fmt.Errorf("failed to create version table: %w", err) + } + } else { + _, err = db.Exec(ctx, fmt.Sprintf("ALTER TABLE %s ADD COLUMN compat INTEGER", db.VersionTable)) + if err != nil { + return fmt.Errorf("failed to add compat column to version table: %w", err) + } + } + } + return nil +} + +func (db *Database) getVersion(ctx context.Context) (version, compat int, err error) { + if err = db.upgradeVersionTable(ctx); err != nil { + return + } + + var compatNull sql.NullInt32 + err = db.QueryRow(ctx, fmt.Sprintf("SELECT version, compat FROM %s LIMIT 1", db.VersionTable)).Scan(&version, &compatNull) + if errors.Is(err, sql.ErrNoRows) { + err = nil + } + if compatNull.Valid && compatNull.Int32 != 0 { + compat = int(compatNull.Int32) + } else { + compat = version + } + return +} + +const ( + tableExistsPostgres = "SELECT EXISTS(SELECT 1 FROM information_schema.tables WHERE table_name=$1)" + tableExistsSQLite = "SELECT EXISTS(SELECT 1 FROM sqlite_master WHERE type='table' AND tbl_name=?1)" +) + +func (db *Database) TableExists(ctx context.Context, table string) (exists bool, err error) { + switch db.Dialect { + case SQLite: + err = db.QueryRow(ctx, tableExistsSQLite, table).Scan(&exists) + case Postgres: + err = db.QueryRow(ctx, tableExistsPostgres, table).Scan(&exists) + default: + err = ErrUnsupportedDialect + } + return +} + +const ( + columnExistsPostgres = "SELECT EXISTS(SELECT 1 FROM information_schema.columns WHERE table_name=$1 AND column_name=$2)" + columnExistsSQLite = "SELECT EXISTS(SELECT 1 FROM pragma_table_info(?1) WHERE name=?2)" +) + +func (db *Database) ColumnExists(ctx context.Context, table, column string) (exists bool, err error) { + switch db.Dialect { + case SQLite: + err = db.QueryRow(ctx, columnExistsSQLite, table, column).Scan(&exists) + case Postgres: + err = db.QueryRow(ctx, columnExistsPostgres, table, column).Scan(&exists) + default: + err = ErrUnsupportedDialect + } + return +} + +const createOwnerTable = ` +CREATE TABLE IF NOT EXISTS database_owner ( + key INTEGER PRIMARY KEY DEFAULT 0, + owner TEXT NOT NULL +) +` + +func (db *Database) checkDatabaseOwner(ctx context.Context) error { + var owner string + if !db.IgnoreForeignTables { + if exists, err := db.TableExists(ctx, "state_groups_state"); err != nil { + return fmt.Errorf("failed to check if state_groups_state exists: %w", err) + } else if exists { + return fmt.Errorf("%w (found state_groups_state, likely belonging to Synapse)", ErrForeignTables) + } else if exists, err = db.TableExists(ctx, "roomserver_rooms"); err != nil { + return fmt.Errorf("failed to check if roomserver_rooms exists: %w", err) + } else if exists { + return fmt.Errorf("%w (found roomserver_rooms, likely belonging to Dendrite)", ErrForeignTables) + } + } + if db.Owner == "" { + return nil + } + if _, err := db.Exec(ctx, createOwnerTable); err != nil { + return fmt.Errorf("failed to ensure database owner table exists: %w", err) + } else if err = db.QueryRow(ctx, "SELECT owner FROM database_owner WHERE key=0").Scan(&owner); errors.Is(err, sql.ErrNoRows) { + _, err = db.Exec(ctx, "INSERT INTO database_owner (key, owner) VALUES (0, $1)", db.Owner) + if err != nil { + return fmt.Errorf("failed to insert database owner: %w", err) + } + } else if err != nil { + return fmt.Errorf("failed to check database owner: %w", err) + } else if owner != db.Owner { + return NotOwnedError{owner} + } + return nil +} + +func (db *Database) setVersion(ctx context.Context, version, compat int) error { + _, err := db.Exec(ctx, fmt.Sprintf("DELETE FROM %s", db.VersionTable)) + if err != nil { + return err + } + _, err = db.Exec(ctx, fmt.Sprintf("INSERT INTO %s (version, compat) VALUES ($1, $2)", db.VersionTable), version, compat) + return err +} + +func (db *Database) DoSQLiteTransactionWithoutForeignKeys(ctx context.Context, doUpgrade func(context.Context) error) error { + conn, err := db.AcquireConn(ctx) + if err != nil { + return fmt.Errorf("failed to acquire connection: %w", err) + } + _, err = conn.ExecContext(ctx, "PRAGMA foreign_keys=OFF") + if err != nil { + return fmt.Errorf("failed to disable foreign keys: %w", err) + } + err = db.DoTxn(ctx, &TxnOptions{Conn: conn}, func(ctx context.Context) error { + err := doUpgrade(ctx) + if err != nil { + return err + } + _, err = conn.ExecContext(ctx, "PRAGMA foreign_key_check") + if err != nil { + return fmt.Errorf("failed to check foreign keys after upgrade: %w", err) + } + return nil + }) + if err != nil { + _, _ = conn.ExecContext(ctx, "PRAGMA foreign_keys=ON") + return err + } + _, err = conn.ExecContext(ctx, "PRAGMA foreign_keys=ON") + if err != nil { + return fmt.Errorf("failed to enable foreign keys: %w", err) + } + return nil +} + +func (db *Database) Upgrade(ctx context.Context) error { + err := db.checkDatabaseOwner(ctx) + if err != nil { + return err + } + + version, compat, err := db.getVersion(ctx) + if err != nil { + return err + } + + if compat > len(db.UpgradeTable) { + if db.IgnoreUnsupportedDatabase { + db.Log.WarnUnsupportedVersion(version, compat, len(db.UpgradeTable)) + return nil + } + return fmt.Errorf("%w: currently on v%d (compatible down to v%d), latest known: v%d", ErrUnsupportedDatabaseVersion, version, compat, len(db.UpgradeTable)) + } + + db.Log.PrepareUpgrade(version, compat, len(db.UpgradeTable)) + logVersion := version + for version < len(db.UpgradeTable) { + upgradeItem := db.UpgradeTable[version] + if upgradeItem.fn == nil { + version++ + continue + } + doUpgrade := func(ctx context.Context) error { + err = upgradeItem.fn(ctx, db) + if err != nil { + return fmt.Errorf("failed to run upgrade v%d->v%d: %w", version, upgradeItem.upgradesTo, err) + } + version = upgradeItem.upgradesTo + logVersion = version + err = db.setVersion(ctx, version, upgradeItem.compatVersion) + if err != nil { + return err + } + return nil + } + db.Log.DoUpgrade(logVersion, upgradeItem.upgradesTo, upgradeItem.message, upgradeItem.transaction) + switch upgradeItem.transaction { + case TxnModeOff: + err = doUpgrade(ctx) + case TxnModeOn: + err = db.DoTxn(ctx, nil, doUpgrade) + case TxnModeSQLiteForeignKeysOff: + switch db.Dialect { + case SQLite: + err = db.DoSQLiteTransactionWithoutForeignKeys(ctx, doUpgrade) + default: + err = db.DoTxn(ctx, nil, doUpgrade) + } + } + if err != nil { + return err + } + } + return nil +} diff --git a/vendor/go.mau.fi/util/dbutil/upgradetable.go b/vendor/go.mau.fi/util/dbutil/upgradetable.go new file mode 100644 index 0000000000..0c415699d4 --- /dev/null +++ b/vendor/go.mau.fi/util/dbutil/upgradetable.go @@ -0,0 +1,300 @@ +// Copyright (c) 2023 Tulir Asokan +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. + +package dbutil + +import ( + "bytes" + "context" + "errors" + "fmt" + "io/fs" + "path/filepath" + "regexp" + "strconv" + "strings" +) + +type TxnMode string + +const ( + TxnModeOn TxnMode = "on" + TxnModeOff TxnMode = "off" + TxnModeSQLiteForeignKeysOff TxnMode = "sqlite-fkey-off" +) + +type UpgradeTable []upgrade + +func (ut *UpgradeTable) extend(toSize int) { + if cap(*ut) >= toSize { + *ut = (*ut)[:toSize] + } else { + resized := make([]upgrade, toSize) + copy(resized, *ut) + *ut = resized + } +} + +func (ut *UpgradeTable) Register(from, to, compat int, message string, txn TxnMode, fn upgradeFunc) { + if from < 0 { + from += to + } + if from < 0 { + panic("invalid from value in UpgradeTable.Register() call") + } + if compat <= 0 { + compat = to + } + upg := upgrade{message: message, fn: fn, upgradesTo: to, compatVersion: compat, transaction: txn} + if len(*ut) == from { + *ut = append(*ut, upg) + return + } else if len(*ut) < from { + ut.extend(from + 1) + } else if (*ut)[from].fn != nil { + panic(fmt.Errorf("tried to override upgrade at %d ('%s') with '%s'", from, (*ut)[from].message, upg.message)) + } + (*ut)[from] = upg +} + +var upgradeHeaderRegex = regexp.MustCompile(`^-- (?:v(\d+) -> )?v(\d+)(?: \(compatible with v(\d+)\+\))?: (.+)$`) + +var transactionDisableRegex = regexp.MustCompile(`^-- transaction: ([a-z-]*)`) + +func parseFileHeader(file []byte) (from, to, compat int, message string, txn TxnMode, lines [][]byte, err error) { + lines = bytes.Split(file, []byte("\n")) + if len(lines) < 2 { + err = errors.New("upgrade file too short") + return + } + var maybeFrom int + match := upgradeHeaderRegex.FindSubmatch(lines[0]) + lines = lines[1:] + if match == nil { + err = errors.New("header not found") + } else if len(match) != 5 { + err = errors.New("unexpected number of items in regex match") + } else if maybeFrom, err = strconv.Atoi(string(match[1])); len(match[1]) > 0 && err != nil { + err = fmt.Errorf("invalid source version: %w", err) + } else if to, err = strconv.Atoi(string(match[2])); err != nil { + err = fmt.Errorf("invalid target version: %w", err) + } else if compat, err = strconv.Atoi(string(match[3])); len(match[3]) > 0 && err != nil { + err = fmt.Errorf("invalid compatible version: %w", err) + } else { + err = nil + if len(match[1]) > 0 { + from = maybeFrom + } else { + from = -1 + } + message = string(match[4]) + txn = "on" + match = transactionDisableRegex.FindSubmatch(lines[0]) + if match != nil { + lines = lines[1:] + txn = TxnMode(match[1]) + switch txn { + case TxnModeOff, TxnModeOn, TxnModeSQLiteForeignKeysOff: + // ok + default: + err = fmt.Errorf("invalid value %q for transaction flag", match[1]) + } + } + } + return +} + +var dialectLineFilter = regexp.MustCompile(`^\s*-- only: (postgres|sqlite)(?: for next (\d+) lines| until "(end) only")?(?: \(lines? (commented)\))?`) + +// Constants used to make parseDialectFilter clearer +const ( + skipUntilEndTag = -1 + skipNothing = 0 + skipNextLine = 1 +) + +func (db *Database) parseDialectFilter(line []byte) (dialect Dialect, lineCount int, uncomment bool, err error) { + match := dialectLineFilter.FindSubmatch(line) + if match == nil { + return + } + dialect, err = ParseDialect(string(match[1])) + if err != nil { + return + } + uncomment = bytes.Equal(match[4], []byte("commented")) + if bytes.Equal(match[3], []byte("end")) { + lineCount = skipUntilEndTag + } else if len(match[2]) == 0 { + lineCount = skipNextLine + } else { + lineCount, err = strconv.Atoi(string(match[2])) + if err != nil { + err = fmt.Errorf("invalid line count %q: %w", match[2], err) + } + } + return +} + +var endLineFilter = regexp.MustCompile(`^\s*-- end only (postgres|sqlite)$`) + +func (db *Database) Internals() *publishDatabaseInternals { + return (*publishDatabaseInternals)(db) +} + +type publishDatabaseInternals Database + +func (di *publishDatabaseInternals) FilterSQLUpgrade(lines [][]byte) (string, error) { + return (*Database)(di).filterSQLUpgrade(lines) +} + +func (db *Database) filterSQLUpgrade(lines [][]byte) (string, error) { + output := make([][]byte, 0, len(lines)) + for i := 0; i < len(lines); i++ { + dialect, lineCount, uncomment, err := db.parseDialectFilter(lines[i]) + if err != nil { + return "", err + } else if lineCount == skipNothing { + output = append(output, lines[i]) + } else if lineCount == skipUntilEndTag { + startedAt := i + startedAtMatch := dialectLineFilter.FindSubmatch(lines[startedAt]) + // Skip filter start line + i++ + for ; i < len(lines); i++ { + if match := endLineFilter.FindSubmatch(lines[i]); match != nil { + if !bytes.Equal(match[1], startedAtMatch[1]) { + return "", fmt.Errorf(`unexpected end tag %q for %q start at line %d`, string(match[0]), string(startedAtMatch[1]), startedAt) + } + break + } + if dialect == db.Dialect { + if uncomment { + if !bytes.HasPrefix(lines[i], []byte("--")) { + return "", fmt.Errorf("line %d isn't commented even though the dialect filter claimed it is (-- must be at beginning of line)", i+1) + } + output = append(output, bytes.TrimPrefix(lines[i], []byte("--"))) + } else { + output = append(output, lines[i]) + } + } + } + if i == len(lines) { + return "", fmt.Errorf(`didn't get end tag matching start %q at line %d`, string(startedAtMatch[1]), startedAt) + } + } else if dialect != db.Dialect { + i += lineCount + } else { + // Skip current line, uncomment the specified number of lines + i++ + targetI := i + lineCount + for ; i < targetI; i++ { + if uncomment { + output = append(output, bytes.TrimPrefix(lines[i], []byte("--"))) + } else { + output = append(output, lines[i]) + } + } + // Decrement counter to avoid skipping the next line + i-- + } + } + return string(bytes.Join(output, []byte("\n"))), nil +} + +func sqlUpgradeFunc(fileName string, lines [][]byte) upgradeFunc { + return func(ctx context.Context, db *Database) error { + if dialect, skip, _, err := db.parseDialectFilter(lines[0]); err == nil && skip == skipNextLine && dialect != db.Dialect { + return nil + } else if upgradeSQL, err := db.filterSQLUpgrade(lines); err != nil { + panic(fmt.Errorf("failed to parse upgrade %s: %w", fileName, err)) + } else { + _, err = db.Exec(ctx, upgradeSQL) + return err + } + } +} + +func splitSQLUpgradeFunc(sqliteData, postgresData string) upgradeFunc { + return func(ctx context.Context, db *Database) (err error) { + switch db.Dialect { + case SQLite: + _, err = db.Exec(ctx, sqliteData) + case Postgres: + _, err = db.Exec(ctx, postgresData) + default: + err = fmt.Errorf("unknown dialect %s", db.Dialect) + } + return + } +} + +func parseSplitSQLUpgrade(name string, fs fullFS, skipNames map[string]struct{}) (from, to, compat int, message string, txn TxnMode, fn upgradeFunc) { + postgresName := fmt.Sprintf("%s.postgres.sql", name) + sqliteName := fmt.Sprintf("%s.sqlite.sql", name) + skipNames[postgresName] = struct{}{} + skipNames[sqliteName] = struct{}{} + postgresData, err := fs.ReadFile(postgresName) + if err != nil { + panic(err) + } + sqliteData, err := fs.ReadFile(sqliteName) + if err != nil { + panic(err) + } + from, to, compat, message, txn, _, err = parseFileHeader(postgresData) + if err != nil { + panic(fmt.Errorf("failed to parse header in %s: %w", postgresName, err)) + } + sqliteFrom, sqliteTo, sqliteCompat, sqliteMessage, sqliteTxn, _, err := parseFileHeader(sqliteData) + if err != nil { + panic(fmt.Errorf("failed to parse header in %s: %w", sqliteName, err)) + } + if from != sqliteFrom || to != sqliteTo || compat != sqliteCompat { + panic(fmt.Errorf("mismatching versions in postgres and sqlite versions of %s: %d/%d -> %d/%d", name, from, sqliteFrom, to, sqliteTo)) + } else if message != sqliteMessage { + panic(fmt.Errorf("mismatching message in postgres and sqlite versions of %s: %q != %q", name, message, sqliteMessage)) + } else if txn != sqliteTxn { + panic(fmt.Errorf("mismatching transaction flag in postgres and sqlite versions of %s: %s != %s", name, txn, sqliteTxn)) + } + fn = splitSQLUpgradeFunc(string(sqliteData), string(postgresData)) + return +} + +type fullFS interface { + fs.ReadFileFS + fs.ReadDirFS +} + +var splitFileNameRegex = regexp.MustCompile(`^(.+)\.(postgres|sqlite)\.sql$`) + +func (ut *UpgradeTable) RegisterFS(fs fullFS) { + ut.RegisterFSPath(fs, ".") +} + +func (ut *UpgradeTable) RegisterFSPath(fs fullFS, dir string) { + files, err := fs.ReadDir(dir) + if err != nil { + panic(err) + } + skipNames := map[string]struct{}{} + for _, file := range files { + if file.IsDir() || !strings.HasSuffix(file.Name(), ".sql") { + // do nothing + } else if _, skip := skipNames[file.Name()]; skip { + // also do nothing + } else if splitName := splitFileNameRegex.FindStringSubmatch(file.Name()); splitName != nil { + from, to, compat, message, txn, fn := parseSplitSQLUpgrade(splitName[1], fs, skipNames) + ut.Register(from, to, compat, message, txn, fn) + } else if data, err := fs.ReadFile(filepath.Join(dir, file.Name())); err != nil { + panic(err) + } else if from, to, compat, message, txn, lines, err := parseFileHeader(data); err != nil { + panic(fmt.Errorf("failed to parse header in %s: %w", file.Name(), err)) + } else { + ut.Register(from, to, compat, message, txn, sqlUpgradeFunc(file.Name(), lines)) + } + } +} diff --git a/vendor/go.mau.fi/util/exbytes/string.go b/vendor/go.mau.fi/util/exbytes/string.go new file mode 100644 index 0000000000..0888698aac --- /dev/null +++ b/vendor/go.mau.fi/util/exbytes/string.go @@ -0,0 +1,20 @@ +// Copyright (c) 2025 Tulir Asokan +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. + +package exbytes + +import ( + "unsafe" +) + +// UnsafeString returns a string that points to the same memory as the input byte slice. +// +// The input byte slice must not be modified after this function is called. +// +// See [go.mau.fi/util/exstrings.UnsafeBytes] for the reverse operation. +func UnsafeString(b []byte) string { + return unsafe.String(unsafe.SliceData(b), len(b)) +} diff --git a/vendor/go.mau.fi/util/exbytes/writer.go b/vendor/go.mau.fi/util/exbytes/writer.go new file mode 100644 index 0000000000..1a45837fbd --- /dev/null +++ b/vendor/go.mau.fi/util/exbytes/writer.go @@ -0,0 +1,78 @@ +// Copyright (c) 2024 Tulir Asokan +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. + +package exbytes + +import ( + "errors" + "fmt" + "io" +) + +// Writer is a simple byte writer that does not allow extending the buffer. +// +// Writes always go after the current len() and will fail if the slice capacity is too low. +// +// The correct way to use this is to create a slice with sufficient capacity and zero length: +// +// x := make([]byte, 0, 11) +// w := (*Writer)(&x) +// w.Write([]byte("hello")) +// w.WriteByte(' ') +// w.WriteString("world") +// fmt.Println(string(x)) // "hello world" +type Writer []byte + +var ErrWriterBufferFull = errors.New("exbytes.Writer: buffer full") + +var ( + _ io.Writer = (*Writer)(nil) + _ io.StringWriter = (*Writer)(nil) + _ io.ByteWriter = (*Writer)(nil) +) + +func (w *Writer) extendLen(n int) (int, error) { + ptr := len(*w) + if ptr+n > cap(*w) { + return 0, fmt.Errorf("%w (%d + %d > %d)", ErrWriterBufferFull, ptr, n, cap(*w)) + } + *w = (*w)[:ptr+n] + return ptr, nil +} + +func (w *Writer) Write(b []byte) (n int, err error) { + ptr, err := w.extendLen(len(b)) + if err != nil { + return 0, err + } + copy((*w)[ptr:], b) + return len(b), nil +} + +func (w *Writer) WriteString(s string) (n int, err error) { + ptr, err := w.extendLen(len(s)) + if err != nil { + return 0, err + } + copy((*w)[ptr:], s) + return len(s), nil +} + +func (w *Writer) WriteByte(r byte) error { + ptr, err := w.extendLen(1) + if err != nil { + return err + } + (*w)[ptr] = r + return nil +} + +func (w *Writer) String() string { + if w == nil { + return "" + } + return string(*w) +} diff --git a/vendor/go.mau.fi/util/exerrors/dualerror.go b/vendor/go.mau.fi/util/exerrors/dualerror.go new file mode 100644 index 0000000000..79acd06502 --- /dev/null +++ b/vendor/go.mau.fi/util/exerrors/dualerror.go @@ -0,0 +1,33 @@ +// Copyright (c) 2022 Tulir Asokan +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. + +package exerrors + +import ( + "errors" + "fmt" +) + +type DualError struct { + High error + Low error +} + +func NewDualError(high, low error) DualError { + return DualError{high, low} +} + +func (err DualError) Is(other error) bool { + return errors.Is(other, err.High) || errors.Is(other, err.Low) +} + +func (err DualError) Unwrap() error { + return err.Low +} + +func (err DualError) Error() string { + return fmt.Sprintf("%v: %v", err.High, err.Low) +} diff --git a/vendor/go.mau.fi/util/exerrors/must.go b/vendor/go.mau.fi/util/exerrors/must.go new file mode 100644 index 0000000000..2ffda30393 --- /dev/null +++ b/vendor/go.mau.fi/util/exerrors/must.go @@ -0,0 +1,23 @@ +// Copyright (c) 2024 Tulir Asokan +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. + +package exerrors + +func Must[T any](val T, err error) T { + PanicIfNotNil(err) + return val +} + +func Must2[T any, T2 any](val T, val2 T2, err error) (T, T2) { + PanicIfNotNil(err) + return val, val2 +} + +func PanicIfNotNil(err error) { + if err != nil { + panic(err) + } +} diff --git a/vendor/go.mau.fi/util/exhttp/config.go b/vendor/go.mau.fi/util/exhttp/config.go new file mode 100644 index 0000000000..334d0d730e --- /dev/null +++ b/vendor/go.mau.fi/util/exhttp/config.go @@ -0,0 +1,168 @@ +package exhttp + +import ( + "context" + "crypto/tls" + "fmt" + "net" + "net/http" + "net/url" + "time" + + "golang.org/x/net/proxy" +) + +type DialerFunc func(ctx context.Context, network, addr string) (net.Conn, error) + +func (df DialerFunc) Dial(network, addr string) (net.Conn, error) { + return df(context.Background(), network, addr) +} + +func (df DialerFunc) DialContext(ctx context.Context, network, addr string) (net.Conn, error) { + return df(ctx, network, addr) +} + +type ClientSettings struct { + Dial DialerFunc + innerDialer DialerFunc + HTTPProxy func(*http.Request) (*url.URL, error) + ProxyAddress string + + GlobalTimeout time.Duration + TLSHandshakeTimeout time.Duration + ResponseHeaderTimeout time.Duration + IdleConnTimeout time.Duration + + TLSConfig *tls.Config + InsecureTLS bool + DisableHTTP2 bool + + TransportOverride func(ClientSettings) http.RoundTripper +} + +var SensibleClientSettings = ClientSettings{ + GlobalTimeout: 5 * time.Minute, + TLSHandshakeTimeout: 10 * time.Second, + ResponseHeaderTimeout: 10 * time.Second, + IdleConnTimeout: 90 * time.Second, +}.WithDialTimeout(10 * time.Second) + +// WithDial sets a custom dialer function for the HTTP client settings. +func (cs ClientSettings) WithDial(dial DialerFunc) ClientSettings { + cs.Dial = dial + cs.innerDialer = dial + cs, _ = cs.WithProxy(cs.ProxyAddress) + return cs +} + +// WithDialTimeout sets a TCP dial timeout for the HTTP client. Resets any custom dialer. +func (cs ClientSettings) WithDialTimeout(timeout time.Duration) ClientSettings { + return cs.WithDial((&net.Dialer{Timeout: timeout}).DialContext) +} + +func (cs ClientSettings) WithTLSHandshakeTimeout(timeout time.Duration) ClientSettings { + cs.TLSHandshakeTimeout = timeout + return cs +} + +func (cs ClientSettings) WithResponseHeaderTimeout(timeout time.Duration) ClientSettings { + cs.ResponseHeaderTimeout = timeout + return cs +} + +func (cs ClientSettings) WithIdleConnTimeout(timeout time.Duration) ClientSettings { + cs.IdleConnTimeout = timeout + return cs +} + +func (cs ClientSettings) WithGlobalTimeout(timeout time.Duration) ClientSettings { + cs.GlobalTimeout = timeout + return cs +} + +func (cs ClientSettings) WithoutHTTP2() ClientSettings { + cs.DisableHTTP2 = true + return cs +} + +func (cs ClientSettings) WithTLSConfig(tlsConfig *tls.Config) ClientSettings { + cs.TLSConfig = tlsConfig + return cs +} + +// WithProxy sets a proxy for the HTTP client. This will preserve any custom dialer set previously. +func (cs ClientSettings) WithProxy(addr string) (ClientSettings, error) { + if addr == "" { + cs.ProxyAddress = addr + cs.HTTPProxy = nil + cs.Dial = cs.innerDialer + return cs, nil + } + parsedAddr, err := url.Parse(addr) + if err != nil { + return cs, err + } + switch parsedAddr.Scheme { + case "http", "https": + cs.HTTPProxy = http.ProxyURL(parsedAddr) + cs.Dial = cs.innerDialer + cs.ProxyAddress = addr + case "socks5", "socks5h": + socksProxy, err := proxy.FromURL(parsedAddr, cs.innerDialer) + if err != nil { + return cs, err + } + ctxDialer := socksProxy.(proxy.ContextDialer) + cs.Dial = ctxDialer.DialContext + cs.HTTPProxy = nil + cs.ProxyAddress = addr + default: + return cs, fmt.Errorf("unsupported proxy scheme %q", parsedAddr.Scheme) + } + return cs, nil +} + +// Configure configures the given HTTP transport with the settings in this struct. +// Note that the GlobalTimeout field is not applied on the transport level and needs to be set in the http.Client. +func (cs ClientSettings) Configure(transport *http.Transport) *http.Transport { + if cs.Dial != nil { + transport.DialContext = cs.Dial + } + if cs.HTTPProxy != nil { + transport.Proxy = cs.HTTPProxy + } + if cs.TLSHandshakeTimeout != 0 { + transport.TLSHandshakeTimeout = cs.TLSHandshakeTimeout + } + if cs.ResponseHeaderTimeout != 0 { + transport.ResponseHeaderTimeout = cs.ResponseHeaderTimeout + } + if cs.IdleConnTimeout != 0 { + transport.IdleConnTimeout = cs.IdleConnTimeout + } + if !cs.DisableHTTP2 { + transport.ForceAttemptHTTP2 = true + } + if cs.TLSConfig != nil { + transport.TLSClientConfig = cs.TLSConfig + } + if cs.InsecureTLS { + if transport.TLSClientConfig == nil { + transport.TLSClientConfig = &tls.Config{} + } + transport.TLSClientConfig.InsecureSkipVerify = true + } + return transport +} + +func (cs ClientSettings) Compile() (c *http.Client) { + c = &http.Client{ + Timeout: cs.GlobalTimeout, + } + if cs.TransportOverride != nil { + c.Transport = cs.TransportOverride(cs) + } else { + c.Transport = cs.Configure(&http.Transport{}) + } + return +} diff --git a/vendor/go.mau.fi/util/exhttp/cors.go b/vendor/go.mau.fi/util/exhttp/cors.go new file mode 100644 index 0000000000..a27bda22be --- /dev/null +++ b/vendor/go.mau.fi/util/exhttp/cors.go @@ -0,0 +1,32 @@ +// Copyright (c) 2024 Sumner Evans +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. + +package exhttp + +import "net/http" + +func AddCORSHeaders(w http.ResponseWriter) { + // Recommended CORS headers can be found in https://spec.matrix.org/v1.3/client-server-api/#web-browser-clients + w.Header().Set("Access-Control-Allow-Origin", "*") + w.Header().Set("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS") + w.Header().Set("Access-Control-Allow-Headers", "X-Requested-With, Content-Type, Authorization") + w.Header().Set("Content-Security-Policy", "sandbox; default-src 'none'; script-src 'none'; plugin-types application/pdf; style-src 'unsafe-inline'; object-src 'self';") + // Allow browsers to cache above for 1 day + w.Header().Set("Access-Control-Max-Age", "86400") +} + +// CORSMiddleware adds CORS headers to the response and handles OPTIONS +// requests by returning 200 OK immediately. +func CORSMiddleware(next http.Handler) http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + AddCORSHeaders(w) + if r.Method == http.MethodOptions { + w.WriteHeader(http.StatusOK) + return + } + next.ServeHTTP(w, r) + }) +} diff --git a/vendor/go.mau.fi/util/exhttp/handleerrors.go b/vendor/go.mau.fi/util/exhttp/handleerrors.go new file mode 100644 index 0000000000..03413d29f9 --- /dev/null +++ b/vendor/go.mau.fi/util/exhttp/handleerrors.go @@ -0,0 +1,98 @@ +// Copyright (c) 2024 Sumner Evans +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. + +package exhttp + +import ( + "bufio" + "encoding/json" + "fmt" + "net" + "net/http" +) + +type ErrorBodies struct { + NotFound json.RawMessage + MethodNotAllowed json.RawMessage +} + +func HandleErrors(gen ErrorBodies) func(http.Handler) http.Handler { + return func(next http.Handler) http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + next.ServeHTTP(&bodyOverrider{ + ResponseWriter: w, + statusNotFoundBody: gen.NotFound, + statusMethodNotAllowedBody: gen.MethodNotAllowed, + }, r) + }) + } +} + +type bodyOverrider struct { + http.ResponseWriter + + code int + override bool + written bool + + hijacked bool + + statusNotFoundBody json.RawMessage + statusMethodNotAllowedBody json.RawMessage +} + +var ( + _ http.ResponseWriter = (*bodyOverrider)(nil) + _ http.Flusher = (*bodyOverrider)(nil) + _ http.Hijacker = (*bodyOverrider)(nil) +) + +func (b *bodyOverrider) WriteHeader(code int) { + if !b.hijacked && + b.Header().Get("Content-Type") == "text/plain; charset=utf-8" && + (code == http.StatusNotFound || code == http.StatusMethodNotAllowed) { + + b.Header().Set("Content-Type", "application/json") + b.override = true + } + + b.code = code + b.ResponseWriter.WriteHeader(code) +} + +func (b *bodyOverrider) Write(body []byte) (n int, err error) { + if b.override { + n = len(body) + if !b.written { + switch b.code { + case http.StatusNotFound: + _, err = b.ResponseWriter.Write(b.statusNotFoundBody) + case http.StatusMethodNotAllowed: + _, err = b.ResponseWriter.Write(b.statusMethodNotAllowedBody) + } + } + b.written = true + return + } + + return b.ResponseWriter.Write(body) +} + +func (b *bodyOverrider) Hijack() (net.Conn, *bufio.ReadWriter, error) { + hijacker, ok := b.ResponseWriter.(http.Hijacker) + if !ok { + return nil, nil, fmt.Errorf("HandleErrors: %T does not implement http.Hijacker", b.ResponseWriter) + } + b.hijacked = true + return hijacker.Hijack() +} + +func (b *bodyOverrider) Flush() { + flusher, ok := b.ResponseWriter.(http.Flusher) + if ok { + flusher.Flush() + } +} diff --git a/vendor/go.mau.fi/util/exhttp/json.go b/vendor/go.mau.fi/util/exhttp/json.go new file mode 100644 index 0000000000..91d7f0e7a6 --- /dev/null +++ b/vendor/go.mau.fi/util/exhttp/json.go @@ -0,0 +1,36 @@ +// Copyright (c) 2024 Sumner Evans +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. + +package exhttp + +import ( + "encoding/json" + "net/http" +) + +var AutoAllowCORS = true + +func WriteJSONResponse(w http.ResponseWriter, httpStatusCode int, jsonData any) { + if AutoAllowCORS { + AddCORSHeaders(w) + } + w.Header().Set("Content-Type", "application/json") + w.WriteHeader(httpStatusCode) + _ = json.NewEncoder(w).Encode(jsonData) +} + +func WriteJSONData(w http.ResponseWriter, httpStatusCode int, data []byte) { + if AutoAllowCORS { + AddCORSHeaders(w) + } + w.Header().Set("Content-Type", "application/json") + w.WriteHeader(httpStatusCode) + _, _ = w.Write(data) +} + +func WriteEmptyJSONResponse(w http.ResponseWriter, httpStatusCode int) { + WriteJSONData(w, httpStatusCode, []byte("{}")) +} diff --git a/vendor/go.mau.fi/util/exhttp/middleware.go b/vendor/go.mau.fi/util/exhttp/middleware.go new file mode 100644 index 0000000000..fb1ab592f5 --- /dev/null +++ b/vendor/go.mau.fi/util/exhttp/middleware.go @@ -0,0 +1,30 @@ +// Copyright (c) 2024 Sumner Evans +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. + +package exhttp + +import "net/http" + +// Middleware represents a middleware that can be applied to an [http.Handler]. +type Middleware func(http.Handler) http.Handler + +// ApplyMiddleware applies the provided [Middleware] functions to the given +// router. The middlewares will be applied in the order they are provided. +func ApplyMiddleware(router http.Handler, middlewares ...Middleware) http.Handler { + // Apply middlewares in reverse order because the first middleware provided + // needs to be the outermost one. + for i := len(middlewares) - 1; i >= 0; i-- { + router = middlewares[i](router) + } + return router +} + +// StripPrefix is a wrapper for [http.StripPrefix] is compatible with the middleware pattern. +func StripPrefix(prefix string) Middleware { + return func(next http.Handler) http.Handler { + return http.StripPrefix(prefix, next) + } +} diff --git a/vendor/go.mau.fi/util/exhttp/networkerror.go b/vendor/go.mau.fi/util/exhttp/networkerror.go new file mode 100644 index 0000000000..fc3d098ada --- /dev/null +++ b/vendor/go.mau.fi/util/exhttp/networkerror.go @@ -0,0 +1,38 @@ +// Copyright (c) 2025 Toni Spets +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. + +package exhttp + +import ( + "errors" + "net" + "syscall" + + "golang.org/x/net/http2" +) + +func IsNetworkError(err error) bool { + if errno := syscall.Errno(0); errors.As(err, &errno) { + // common errnos for network related operations + return errno == syscall.ENETDOWN || + errno == syscall.ENETUNREACH || + errno == syscall.ENETRESET || + errno == syscall.ECONNABORTED || + errno == syscall.ECONNRESET || + errno == syscall.ENOBUFS || + errno == syscall.ETIMEDOUT || + errno == syscall.ECONNREFUSED || + errno == syscall.EHOSTDOWN || + errno == syscall.EHOSTUNREACH || + errno == syscall.EPIPE + } else if netError := net.Error(nil); errors.As(err, &netError) { + return true + } else if errors.As(err, &http2.StreamError{}) { + return true + } + + return false +} diff --git a/vendor/go.mau.fi/util/exmaps/clone.go b/vendor/go.mau.fi/util/exmaps/clone.go new file mode 100644 index 0000000000..4ae988157a --- /dev/null +++ b/vendor/go.mau.fi/util/exmaps/clone.go @@ -0,0 +1,19 @@ +// Copyright (c) 2025 Tulir Asokan +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. + +package exmaps + +import ( + "maps" +) + +// NonNilClone returns a copy of the given map, or an empty map if the input is nil. +func NonNilClone[Key comparable, Value any](m map[Key]Value) map[Key]Value { + if m == nil { + return make(map[Key]Value) + } + return maps.Clone(m) +} diff --git a/vendor/go.mau.fi/util/exmaps/set.go b/vendor/go.mau.fi/util/exmaps/set.go new file mode 100644 index 0000000000..45af230753 --- /dev/null +++ b/vendor/go.mau.fi/util/exmaps/set.go @@ -0,0 +1,89 @@ +// Copyright (c) 2025 Tulir Asokan +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. + +package exmaps + +import ( + "iter" +) + +// AbstractSet is an interface implemented by [Set] and [exsync.Set] +type AbstractSet[T comparable] interface { + Add(item T) bool + Has(item T) bool + Pop(item T) bool + Remove(item T) + Size() int + AsList() []T + Iter() iter.Seq[T] +} + +type empty = struct{} + +var emptyVal = empty{} + +// Set is a generic set type based on a map. It is not thread-safe, use [exsync.Set] for a thread-safe variant. +type Set[T comparable] map[T]empty + +var _ AbstractSet[int] = (Set[int])(nil) + +func NewSetWithItems[T comparable](items []T) Set[T] { + s := make(Set[T], len(items)) + for _, item := range items { + s[item] = emptyVal + } + return s +} + +func (s Set[T]) Size() int { + return len(s) +} + +func (s Set[T]) Add(item T) bool { + _, exists := s[item] + if !exists { + s[item] = emptyVal + return true + } + return false +} + +func (s Set[T]) Remove(item T) { + delete(s, item) +} + +func (s Set[T]) Pop(item T) bool { + _, exists := s[item] + if exists { + delete(s, item) + } + return exists +} + +func (s Set[T]) Has(item T) bool { + _, exists := s[item] + return exists +} + +func (s Set[T]) AsList() []T { + result := make([]T, len(s)) + i := 0 + for item := range s { + result[i] = item + i++ + } + return result +} + +func (s Set[T]) Iter() iter.Seq[T] { + return func(yield func(T) bool) { + for item := range s { + if !yield(item) { + return + } + } + } +} diff --git a/vendor/go.mau.fi/util/exslices/cast.go b/vendor/go.mau.fi/util/exslices/cast.go new file mode 100644 index 0000000000..2490087316 --- /dev/null +++ b/vendor/go.mau.fi/util/exslices/cast.go @@ -0,0 +1,42 @@ +// Copyright (c) 2024 Tulir Asokan +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. + +package exslices + +func CastFunc[To, From any](source []From, conv func(From) To) []To { + result := make([]To, len(source)) + for i, v := range source { + result[i] = conv(v) + } + return result +} + +func CastFuncFilter[To, From any](source []From, conv func(From) (To, bool)) []To { + result := make([]To, 0, len(source)) + for _, v := range source { + res, ok := conv(v) + if ok { + result = append(result, res) + } + } + return result +} + +func CastToString[To, From ~string](source []From) []To { + result := make([]To, len(source)) + for i, v := range source { + result[i] = To(v) + } + return result +} + +func CastToAny[From any](source []From) []any { + result := make([]any, len(source)) + for i, v := range source { + result[i] = v + } + return result +} diff --git a/vendor/go.mau.fi/util/exslices/chunk.go b/vendor/go.mau.fi/util/exslices/chunk.go new file mode 100644 index 0000000000..4b88f11d63 --- /dev/null +++ b/vendor/go.mau.fi/util/exslices/chunk.go @@ -0,0 +1,28 @@ +// Copyright (c) 2024 Tulir Asokan +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. + +package exslices + +// Chunk splits a slice into chunks of the given size. +// +// From https://github.com/golang/go/issues/53987#issuecomment-1224367139 +// +// TODO remove this after slices.Chunk can be used (it'll probably be added in Go 1.23, so it can be used after 1.22 is EOL) +func Chunk[T any](slice []T, size int) (chunks [][]T) { + if size < 1 { + panic("chunk size cannot be less than 1") + } + for i := 0; ; i++ { + next := i * size + if len(slice[next:]) > size { + end := next + size + chunks = append(chunks, slice[next:end:end]) + } else { + chunks = append(chunks, slice[i*size:]) + return + } + } +} diff --git a/vendor/go.mau.fi/util/exslices/deduplicate.go b/vendor/go.mau.fi/util/exslices/deduplicate.go new file mode 100644 index 0000000000..eb72d3821e --- /dev/null +++ b/vendor/go.mau.fi/util/exslices/deduplicate.go @@ -0,0 +1,67 @@ +// Copyright (c) 2024 Tulir Asokan +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. + +package exslices + +// DeduplicateUnsorted removes duplicates from the given slice without requiring that the input slice is sorted. +// The order of the output will be the same as the input. The input slice will not be modified. +// +// If you don't care about the order of the output, it's recommended to sort the list and then use [slices.Compact]. +func DeduplicateUnsorted[T comparable](s []T) []T { + return deduplicateUnsortedInto(s, make([]T, 0, len(s))) +} + +// DeduplicateUnsortedOverwrite removes duplicates from the given slice without requiring that the input slice is sorted. +// The input slice will be modified and used as the output slice to avoid extra allocations. +// +// If you don't care about the order of the output, it's recommended to sort the list and then use [slices.Compact]. +func DeduplicateUnsortedOverwrite[T comparable](s []T) []T { + out := deduplicateUnsortedInto(s, s[:0]) + clear(s[len(out):]) + return out +} + +func deduplicateUnsortedInto[T comparable](s, result []T) []T { + seen := make(map[T]struct{}, len(s)) + for _, item := range s { + if _, ok := seen[item]; !ok { + seen[item] = struct{}{} + result = append(result, item) + } + } + return result +} + +// DeduplicateUnsortedFunc removes duplicates from the given slice using the given key function without requiring +// that the input slice is sorted. The order of the output will be the same as the input. +// +// If you don't care about the order of the output, it's recommended to sort the list and then use [slices.CompactFunc]. +func DeduplicateUnsortedFunc[T any, K comparable](s []T, getKey func(T) K) []T { + return deduplicateUnsortedFuncInto(s, make([]T, 0, len(s)), getKey) +} + +// DeduplicateUnsortedOverwriteFunc removes duplicates from the given slice using the given key function +// without requiring that the input slice is sorted. The order of the output will be the same as the input. +// The input slice will be modified and used as the output slice to avoid extra allocations. +// +// If you don't care about the order of the output, it's recommended to sort the list and then use [slices.CompactFunc]. +func DeduplicateUnsortedOverwriteFunc[T any, K comparable](s []T, getKey func(T) K) []T { + out := deduplicateUnsortedFuncInto(s, s[:0], getKey) + clear(s[len(out):]) + return out +} + +func deduplicateUnsortedFuncInto[T any, K comparable](s, result []T, getKey func(T) K) []T { + seen := make(map[K]struct{}, len(s)) + for _, item := range s { + key := getKey(item) + if _, ok := seen[key]; !ok { + seen[key] = struct{}{} + result = append(result, item) + } + } + return result +} diff --git a/vendor/go.mau.fi/util/exslices/delete.go b/vendor/go.mau.fi/util/exslices/delete.go new file mode 100644 index 0000000000..877226b64b --- /dev/null +++ b/vendor/go.mau.fi/util/exslices/delete.go @@ -0,0 +1,38 @@ +// Copyright (c) 2025 Tulir Asokan +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. + +package exslices + +import ( + "slices" +) + +// FastDeleteIndex deletes the item at the given index without preserving slice order. +// This is faster than normal deletion, as it doesn't need to copy all elements after the deleted index. +func FastDeleteIndex[T any](s []T, index int) []T { + s[index] = s[len(s)-1] + clear(s[len(s)-1:]) + return s[:len(s)-1] +} + +// FastDeleteItem finds the first index of the given item in the slice and deletes it without preserving slice order. +// This is faster than normal deletion, as it doesn't need to copy all elements after the deleted index. +func FastDeleteItem[T comparable](s []T, item T) []T { + index := slices.Index(s, item) + if index < 0 { + return s + } + return FastDeleteIndex(s, index) +} + +// DeleteItem finds the first index of the given item in the slice and deletes it. +func DeleteItem[T comparable](s []T, item T) []T { + index := slices.Index(s, item) + if index < 0 { + return s + } + return slices.Delete(s, index, index+1) +} diff --git a/vendor/go.mau.fi/util/exslices/diff.go b/vendor/go.mau.fi/util/exslices/diff.go new file mode 100644 index 0000000000..957dbd6caf --- /dev/null +++ b/vendor/go.mau.fi/util/exslices/diff.go @@ -0,0 +1,63 @@ +// Copyright (c) 2023 Tulir Asokan +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. + +package exslices + +// SortedDiff returns the difference between two already-sorted slices, with the help of the given comparison function. +// The output will be in the same order as the input, which means it'll be sorted. +func SortedDiff[T any](a, b []T, compare func(a, b T) int) (uniqueToA, uniqueToB []T) { + uniqueToA = make([]T, 0, len(a)) + uniqueToB = make([]T, 0, len(b)) + + var i, j int + for { + if j >= len(b) { + uniqueToA = append(uniqueToA, a[i:]...) + break + } else if i >= len(a) { + uniqueToB = append(uniqueToB, b[j:]...) + break + } + c := compare(a[i], b[j]) + if c < 0 { + uniqueToA = append(uniqueToA, a[i]) + i++ + } else if c > 0 { + uniqueToB = append(uniqueToB, b[j]) + j++ + } else { + i++ + j++ + } + } + return +} + +// Diff returns the difference between two slices. The slices may contain duplicates and don't need to be sorted. +// The output will not be sorted, but is guaranteed to not contain any duplicates. +func Diff[T comparable](a, b []T) (uniqueToA, uniqueToB []T) { + maxLen := len(a) + if len(b) > maxLen { + maxLen = len(b) + } + collector := make(map[T]uint8, maxLen) + for _, item := range a { + collector[item] |= 0b01 + } + for _, item := range b { + collector[item] |= 0b10 + } + uniqueToA = make([]T, 0, maxLen) + uniqueToB = make([]T, 0, maxLen) + for item, mask := range collector { + if mask == 0b01 { + uniqueToA = append(uniqueToA, item) + } else if mask == 0b10 { + uniqueToB = append(uniqueToB, item) + } + } + return +} diff --git a/vendor/go.mau.fi/util/exslices/stack.go b/vendor/go.mau.fi/util/exslices/stack.go new file mode 100644 index 0000000000..ac0754c6c6 --- /dev/null +++ b/vendor/go.mau.fi/util/exslices/stack.go @@ -0,0 +1,80 @@ +// Copyright (c) 2024 Tulir Asokan +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. + +package exslices + +import ( + "iter" +) + +type Stack[T comparable] []T + +func (s *Stack[T]) Push(v ...T) { + *s = append(*s, v...) +} + +// Peek returns the top item from the stack without removing it. +func (s *Stack[T]) Peek() (v T, ok bool) { + return s.PeekN(1) +} + +// PeekN returns the nth item from the top of the stack (1-based). +func (s *Stack[T]) PeekN(n int) (v T, ok bool) { + if len(*s) < n { + return + } + v = (*s)[len(*s)-n] + ok = true + return +} + +// Pop removes and returns the top item from the stack. +func (s *Stack[T]) Pop() (v T, ok bool) { + v, ok = s.Peek() + if ok { + *s = (*s)[:len(*s)-1] + } + return +} + +func (s *Stack[T]) PeekValue() T { + v, _ := s.Peek() + return v +} + +func (s *Stack[T]) PopValue() T { + v, _ := s.Pop() + return v +} + +// Index returns the highest index of the given value in the stack, or -1 if not found. +func (s *Stack[T]) Index(val T) int { + for i := len(*s) - 1; i >= 0; i-- { + if (*s)[i] == val { + return i + } + } + return -1 +} + +// Has returns whether the given value is in the stack. +func (s *Stack[T]) Has(val T) bool { + return s.Index(val) != -1 +} + +func (s *Stack[T]) PopIter() iter.Seq[T] { + return func(yield func(T) bool) { + for { + v, ok := s.Pop() + if !ok { + return + } + if !yield(v) { + return + } + } + } +} diff --git a/vendor/go.mau.fi/util/exstrings/stringutil.go b/vendor/go.mau.fi/util/exstrings/stringutil.go new file mode 100644 index 0000000000..110f1c61e6 --- /dev/null +++ b/vendor/go.mau.fi/util/exstrings/stringutil.go @@ -0,0 +1,122 @@ +// Copyright (c) 2025 Tulir Asokan +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. + +package exstrings + +import ( + "crypto/sha256" + "crypto/subtle" + "slices" + "strings" + "unsafe" +) + +// UnsafeBytes returns a byte slice that points to the same memory as the input string. +// +// The returned byte slice must not be modified. +// +// See [go.mau.fi/util/exbytes.UnsafeString] for the reverse operation. +func UnsafeBytes(str string) []byte { + return unsafe.Slice(unsafe.StringData(str), len(str)) +} + +// SHA256 returns the SHA-256 hash of the input string without copying the string. +func SHA256(str string) [32]byte { + return sha256.Sum256(UnsafeBytes(str)) +} + +// ConstantTimeEqual compares two strings using [subtle.ConstantTimeCompare] without copying the strings. +// +// Note that ConstantTimeCompare is not constant time if the strings are of different length. +func ConstantTimeEqual(a, b string) bool { + return subtle.ConstantTimeCompare(UnsafeBytes(a), UnsafeBytes(b)) == 1 +} + +// LongestSequenceOf returns the length of the longest contiguous sequence of a single rune in a string. +func LongestSequenceOf(a string, b rune) int { + // IndexRune has some optimizations, so use it to find the starting point + firstIndex := strings.IndexRune(a, b) + if firstIndex == -1 { + return 0 + } + count := 0 + maxCount := 0 + for _, r := range a[firstIndex:] { + if r == b { + count++ + if count > maxCount { + maxCount = count + } + } else { + count = 0 + } + } + return maxCount +} + +// PrefixByteRunLength returns the number of the given byte at the start of a string. +func PrefixByteRunLength(s string, b byte) int { + count := 0 + for ; count < len(s) && s[count] == b; count++ { + } + return count +} + +// CollapseSpaces replaces all runs of multiple spaces (\x20) in a string with a single space. +func CollapseSpaces(s string) string { + doubleSpaceIdx := strings.Index(s, " ") + if doubleSpaceIdx < 0 { + return s + } + var buf strings.Builder + buf.Grow(len(s)) + for doubleSpaceIdx >= 0 { + buf.WriteString(s[:doubleSpaceIdx+1]) + spaceCount := PrefixByteRunLength(s[doubleSpaceIdx+2:], ' ') + 2 + s = s[doubleSpaceIdx+spaceCount:] + doubleSpaceIdx = strings.Index(s, " ") + } + buf.WriteString(s) + return buf.String() +} + +// LongestSequenceOfFunc returns the length of the longest contiguous sequence of runes in a string. +// +// If the provided function returns zero or higher, the return value is added to the current count. +// If the return value is negative, the count is reset to zero. +func LongestSequenceOfFunc(a string, fn func(b rune) int) int { + count := 0 + maxCount := 0 + for _, r := range a { + val := fn(r) + if val < 0 { + count = 0 + } else { + count += val + if count > maxCount { + maxCount = count + } + } + } + return maxCount +} + +func LongestCommonPrefix(in []string) string { + if len(in) == 0 { + return "" + } else if len(in) == 1 { + return in[0] + } + + minStr := slices.Min(in) + maxStr := slices.Max(in) + for i := 0; i < len(minStr) && i < len(maxStr); i++ { + if minStr[i] != maxStr[i] { + return minStr[:i] + } + } + return minStr +} diff --git a/vendor/go.mau.fi/util/exsync/event.go b/vendor/go.mau.fi/util/exsync/event.go new file mode 100644 index 0000000000..e5b0c2ae07 --- /dev/null +++ b/vendor/go.mau.fi/util/exsync/event.go @@ -0,0 +1,118 @@ +// Copyright (c) 2024 Tulir Asokan +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. + +package exsync + +import ( + "context" + "fmt" + "sync" + "time" +) + +// Event is a wrapper around a channel that can be used to notify multiple waiters that some event has happened. +// +// It's modelled after Python's asyncio.Event: https://docs.python.org/3/library/asyncio-sync.html#asyncio.Event +type Event struct { + ch chan empty + set bool + waiting bool + l sync.RWMutex +} + +// NewEvent creates a new event. It will initially be unset. +func NewEvent() *Event { + return &Event{ + ch: make(chan empty), + } +} + +type EventChan = <-chan empty + +// GetChan returns the channel that will be closed when the event is set. +func (e *Event) GetChan() EventChan { + e.l.RLock() + defer e.l.RUnlock() + e.waiting = true + return e.ch +} + +// Wait waits for either the event to happen or the given context to be done. +// If the context is done first, the error is returned, otherwise the return value is nil. +func (e *Event) Wait(ctx context.Context) error { + select { + case <-e.GetChan(): + return nil + case <-ctx.Done(): + return ctx.Err() + } +} + +// WaitTimeout waits for the event to happen within the given timeout. +// If the timeout expires first, the return value is false, otherwise it's true. +func (e *Event) WaitTimeout(timeout time.Duration) bool { + select { + case <-e.GetChan(): + return true + case <-time.After(timeout): + return false + } +} + +// WaitTimeoutCtx waits for the event to happen, the timeout to expire, or the given context to be done. +// If the context or timeout is done first, an error is returned, otherwise the return value is nil. +func (e *Event) WaitTimeoutCtx(ctx context.Context, timeout time.Duration) error { + select { + case <-e.GetChan(): + return nil + case <-ctx.Done(): + return ctx.Err() + case <-time.After(timeout): + return fmt.Errorf("exsync.Event: wait timeout") + } +} + +// IsSet returns true if the event has been set. +func (e *Event) IsSet() bool { + e.l.RLock() + defer e.l.RUnlock() + return e.set +} + +// Set sets the event, notifying all waiters. +func (e *Event) Set() { + e.l.Lock() + defer e.l.Unlock() + if !e.set { + close(e.ch) + e.set = true + } +} + +// Notify notifies all waiters, but doesn't set the event. +// +// Calling Notify when the event is already set is a no-op. +func (e *Event) Notify() { + e.l.Lock() + defer e.l.Unlock() + if !e.set && e.waiting { + close(e.ch) + e.ch = make(chan empty) + e.waiting = false + } +} + +// Clear clears the event, making it unset. Future calls to Wait will now block until Set is called again. +// If the event is not already set, this is a no-op and existing calls to Wait will keep working. +func (e *Event) Clear() { + e.l.Lock() + defer e.l.Unlock() + if e.set { + e.ch = make(chan empty) + e.set = false + e.waiting = false + } +} diff --git a/vendor/go.mau.fi/util/exsync/returnonce.go b/vendor/go.mau.fi/util/exsync/returnonce.go new file mode 100644 index 0000000000..f3f5ae7cc5 --- /dev/null +++ b/vendor/go.mau.fi/util/exsync/returnonce.go @@ -0,0 +1,25 @@ +// Copyright (c) 2023 Tulir Asokan +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. + +package exsync + +import "sync" + +// ReturnableOnce is a wrapper for sync.Once that can return a value +// +// Deprecated: Use [sync.OnceValues] instead. +type ReturnableOnce[Value any] struct { + once sync.Once + output Value + err error +} + +func (ronce *ReturnableOnce[Value]) Do(fn func() (Value, error)) (Value, error) { + ronce.once.Do(func() { + ronce.output, ronce.err = fn() + }) + return ronce.output, ronce.err +} diff --git a/vendor/go.mau.fi/util/exsync/ringbuffer.go b/vendor/go.mau.fi/util/exsync/ringbuffer.go new file mode 100644 index 0000000000..483098cdb2 --- /dev/null +++ b/vendor/go.mau.fi/util/exsync/ringbuffer.go @@ -0,0 +1,139 @@ +// Copyright (c) 2023 Tulir Asokan +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. + +package exsync + +import ( + "errors" + "sync" +) + +type pair[Key comparable, Value any] struct { + Set bool + Key Key + Value Value +} + +type RingBuffer[Key comparable, Value any] struct { + ptr int + data []pair[Key, Value] + lock sync.RWMutex + size int +} + +func NewRingBuffer[Key comparable, Value any](size int) *RingBuffer[Key, Value] { + return &RingBuffer[Key, Value]{ + data: make([]pair[Key, Value], size), + } +} + +var ( + // StopIteration can be returned by the RingBuffer.Iter or MapRingBuffer callbacks to stop iteration immediately. + StopIteration = errors.New("stop iteration") //lint:ignore ST1012 not an error + + // SkipItem can be returned by the MapRingBuffer callback to skip adding a specific item. + SkipItem = errors.New("skip item") //lint:ignore ST1012 not an error +) + +func (rb *RingBuffer[Key, Value]) unlockedIter(callback func(key Key, val Value) error) error { + end := rb.ptr + for i := clamp(end-1, len(rb.data)); i != end; i = clamp(i-1, len(rb.data)) { + entry := rb.data[i] + if !entry.Set { + break + } + err := callback(entry.Key, entry.Value) + if err != nil { + if errors.Is(err, StopIteration) { + return nil + } + return err + } + } + return nil +} + +func (rb *RingBuffer[Key, Value]) Iter(callback func(key Key, val Value) error) error { + rb.lock.RLock() + defer rb.lock.RUnlock() + return rb.unlockedIter(callback) +} + +func MapRingBuffer[Key comparable, Value, Output any](rb *RingBuffer[Key, Value], callback func(key Key, val Value) (Output, error)) ([]Output, error) { + rb.lock.RLock() + defer rb.lock.RUnlock() + output := make([]Output, 0, rb.size) + err := rb.unlockedIter(func(key Key, val Value) error { + item, err := callback(key, val) + if err != nil { + if errors.Is(err, SkipItem) { + return nil + } + return err + } + output = append(output, item) + return nil + }) + return output, err +} + +func (rb *RingBuffer[Key, Value]) Size() int { + rb.lock.RLock() + defer rb.lock.RUnlock() + return rb.size +} + +func (rb *RingBuffer[Key, Value]) Contains(val Key) bool { + _, ok := rb.Get(val) + return ok +} + +func (rb *RingBuffer[Key, Value]) Get(key Key) (val Value, found bool) { + rb.lock.RLock() + end := rb.ptr + for i := clamp(end-1, len(rb.data)); i != end; i = clamp(i-1, len(rb.data)) { + if rb.data[i].Key == key { + val = rb.data[i].Value + found = true + break + } + } + rb.lock.RUnlock() + return +} + +func (rb *RingBuffer[Key, Value]) Replace(key Key, val Value) bool { + rb.lock.Lock() + defer rb.lock.Unlock() + end := rb.ptr + for i := clamp(end-1, len(rb.data)); i != end; i = clamp(i-1, len(rb.data)) { + if rb.data[i].Key == key { + rb.data[i].Value = val + return true + } + } + return false +} + +func (rb *RingBuffer[Key, Value]) Push(key Key, val Value) { + rb.lock.Lock() + rb.data[rb.ptr] = pair[Key, Value]{Key: key, Value: val, Set: true} + rb.ptr = (rb.ptr + 1) % len(rb.data) + if rb.size < len(rb.data) { + rb.size++ + } + rb.lock.Unlock() +} + +func clamp(index, len int) int { + if index < 0 { + return len + index + } else if index >= len { + return len - index + } else { + return index + } +} diff --git a/vendor/go.mau.fi/util/exsync/syncmap.go b/vendor/go.mau.fi/util/exsync/syncmap.go new file mode 100644 index 0000000000..f49a57a82d --- /dev/null +++ b/vendor/go.mau.fi/util/exsync/syncmap.go @@ -0,0 +1,178 @@ +// Copyright (c) 2023 Tulir Asokan +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. + +package exsync + +import ( + "iter" + "maps" + "sync" +) + +// Map is a simple map with a built-in mutex. +type Map[Key comparable, Value any] struct { + data map[Key]Value + lock sync.RWMutex +} + +func NewMap[Key comparable, Value any]() *Map[Key, Value] { + return NewMapWithData(make(map[Key]Value)) +} + +// NewMapWithData constructs a Map with the given map as data. Accessing the map directly after passing it here is not safe. +func NewMapWithData[Key comparable, Value any](data map[Key]Value) *Map[Key, Value] { + return &Map[Key, Value]{ + data: data, + } +} + +// Set stores a value in the map. +func (sm *Map[Key, Value]) Set(key Key, value Value) { + sm.Swap(key, value) +} + +// Swap sets a value in the map and returns the old value. +// +// The boolean return parameter is true if the value already existed, false if not. +func (sm *Map[Key, Value]) Swap(key Key, value Value) (oldValue Value, wasReplaced bool) { + sm.lock.Lock() + oldValue, wasReplaced = sm.data[key] + sm.data[key] = value + sm.lock.Unlock() + return +} + +// Delete removes a key from the map. +func (sm *Map[Key, Value]) Delete(key Key) { + sm.Pop(key) +} + +// Pop removes a key from the map and returns the old value. +// +// The boolean return parameter is the same as with normal Go map access (true if the key exists, false if not). +func (sm *Map[Key, Value]) Pop(key Key) (value Value, ok bool) { + sm.lock.Lock() + value, ok = sm.data[key] + delete(sm.data, key) + sm.lock.Unlock() + return +} + +// Get gets a value in the map. +// +// The boolean return parameter is the same as with normal Go map access (true if the key exists, false if not). +func (sm *Map[Key, Value]) Get(key Key) (value Value, ok bool) { + sm.lock.RLock() + value, ok = sm.data[key] + sm.lock.RUnlock() + return +} + +// GetDefault gets a value in the map, or the given default value if there's no such key. +func (sm *Map[Key, Value]) GetDefault(key Key, def Value) Value { + sm.lock.RLock() + value, ok := sm.data[key] + sm.lock.RUnlock() + if ok { + return value + } + return def +} + +// GetOrSetFactory gets a value in the map if the key already exists, +// otherwise inserts a new value from the given function and returns it. +func (sm *Map[Key, Value]) GetOrSetFactory(key Key, def func() Value) Value { + val, ok := sm.Get(key) + if ok { + return val + } + sm.lock.Lock() + defer sm.lock.Unlock() + value, ok := sm.data[key] + if !ok { + value = def() + sm.data[key] = value + } + return value +} + +// GetOrSet gets a value in the map if the key already exists, otherwise inserts the given value and returns it. +// +// The boolean return parameter is true if the key already exists, and false if the given value was inserted. +func (sm *Map[Key, Value]) GetOrSet(key Key, value Value) (actual Value, wasGet bool) { + sm.lock.Lock() + defer sm.lock.Unlock() + actual, wasGet = sm.data[key] + if wasGet { + return + } + sm.data[key] = value + actual = value + return +} + +// Clear removes all items from the map. +func (sm *Map[Key, Value]) Clear() { + sm.lock.Lock() + clear(sm.data) + sm.lock.Unlock() +} + +// Len returns the number of items in the map. +func (sm *Map[Key, Value]) Len() int { + sm.lock.RLock() + l := len(sm.data) + sm.lock.RUnlock() + return l +} + +// CopyFrom copies all key/value pairs from the given map into this map, overriding any existing keys. +// Keys present in this map but not in the given map are not removed. +func (sm *Map[Key, Value]) CopyFrom(other map[Key]Value) { + sm.lock.Lock() + maps.Copy(sm.data, other) + sm.lock.Unlock() +} + +// SwapData replaces the internal map with the given map, returning the previous map. +// If the given map is nil, a new empty map is created. +// The given map must not be modified after passing it to this function. +func (sm *Map[Key, Value]) SwapData(other map[Key]Value) map[Key]Value { + sm.lock.Lock() + prev := sm.data + if other == nil { + sm.data = make(map[Key]Value) + } else { + sm.data = other + } + sm.lock.Unlock() + return prev +} + +// Clone returns a copy of the map. +func (sm *Map[Key, Value]) Clone() *Map[Key, Value] { + return NewMapWithData(sm.CopyData()) +} + +// CopyData returns a copy of the data in the map as a normal (non-atomic) map. +func (sm *Map[Key, Value]) CopyData() map[Key]Value { + sm.lock.RLock() + copied := maps.Clone(sm.data) + sm.lock.RUnlock() + return copied +} + +func (sm *Map[Key, Value]) Iter() iter.Seq2[Key, Value] { + return func(yield func(Key, Value) bool) { + sm.lock.RLock() + defer sm.lock.RUnlock() + for k, v := range sm.data { + if !yield(k, v) { + return + } + } + } +} diff --git a/vendor/go.mau.fi/util/exsync/syncset.go b/vendor/go.mau.fi/util/exsync/syncset.go new file mode 100644 index 0000000000..b6ff07a361 --- /dev/null +++ b/vendor/go.mau.fi/util/exsync/syncset.go @@ -0,0 +1,153 @@ +// Copyright (c) 2023 Tulir Asokan +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. + +package exsync + +import ( + "iter" + "sync" + + "go.mau.fi/util/exmaps" +) + +type empty struct{} + +var emptyVal = empty{} + +// Set is a wrapper around a map[T]struct{} with a built-in mutex. +type Set[T comparable] struct { + m map[T]empty + l sync.RWMutex +} + +var _ exmaps.AbstractSet[int] = (*Set[int])(nil) + +// NewSet constructs a Set with an empty map. +func NewSet[T comparable]() *Set[T] { + return NewSetWithMap[T](make(map[T]empty)) +} + +// NewSetWithSize constructs a Set with a map that has been allocated the given amount of space. +func NewSetWithSize[T comparable](size int) *Set[T] { + return NewSetWithMap[T](make(map[T]empty, size)) +} + +// NewSetWithMap constructs a Set with the given map. Accessing the map directly after passing it here is not safe. +func NewSetWithMap[T comparable](m map[T]empty) *Set[T] { + return &Set[T]{m: m} +} + +// NewSetWithItems constructs a Set with items from the given slice pre-filled. +// The slice is not modified or used after the function returns, so using it after this is safe. +func NewSetWithItems[T comparable](items []T) *Set[T] { + s := NewSetWithSize[T](len(items)) + for _, item := range items { + s.m[item] = emptyVal + } + return s +} + +// Add adds an item to the set. The return value is true if the item was added to the set, or false otherwise. +func (s *Set[T]) Add(item T) bool { + if s == nil { + return false + } + s.l.Lock() + _, exists := s.m[item] + if exists { + s.l.Unlock() + return false + } + s.m[item] = emptyVal + s.l.Unlock() + return true +} + +// Has checks if the given item is in the set. +func (s *Set[T]) Has(item T) bool { + if s == nil { + return false + } + s.l.RLock() + _, exists := s.m[item] + s.l.RUnlock() + return exists +} + +// Pop removes the given item from the set. The return value is true if the item was in the set, or false otherwise. +func (s *Set[T]) Pop(item T) bool { + if s == nil { + return false + } + s.l.Lock() + _, exists := s.m[item] + if exists { + delete(s.m, item) + } + s.l.Unlock() + return exists +} + +// Remove removes the given item from the set. +func (s *Set[T]) Remove(item T) { + if s == nil { + return + } + s.l.Lock() + delete(s.m, item) + s.l.Unlock() +} + +// ReplaceAll replaces this set with the given set. If the given set is nil, the set is cleared. +func (s *Set[T]) ReplaceAll(newSet *Set[T]) { + if s == nil { + return + } + s.l.Lock() + if newSet == nil { + s.m = make(map[T]empty) + } else { + s.m = newSet.m + } + s.l.Unlock() +} + +func (s *Set[T]) Size() int { + if s == nil { + return 0 + } + s.l.RLock() + size := len(s.m) + s.l.RUnlock() + return size +} + +func (s *Set[T]) AsList() []T { + if s == nil { + return nil + } + s.l.RLock() + list := make([]T, len(s.m)) + i := 0 + for item := range s.m { + list[i] = item + i++ + } + s.l.RUnlock() + return list +} + +func (s *Set[T]) Iter() iter.Seq[T] { + return func(yield func(T) bool) { + s.l.RLock() + defer s.l.RUnlock() + for item := range s.m { + if !yield(item) { + return + } + } + } +} diff --git a/vendor/go.mau.fi/util/exzerolog/callermarshal.go b/vendor/go.mau.fi/util/exzerolog/callermarshal.go new file mode 100644 index 0000000000..938a5e085f --- /dev/null +++ b/vendor/go.mau.fi/util/exzerolog/callermarshal.go @@ -0,0 +1,28 @@ +// Copyright (c) 2023 Tulir Asokan +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. + +package exzerolog + +import ( + "fmt" + "runtime" + "strings" +) + +// CallerWithFunctionName is an implementation for zerolog.CallerMarshalFunc that includes the caller function name +// in addition to the file and line number. +// +// Use as +// +// zerolog.CallerMarshalFunc = exzerolog.CallerWithFunctionName +func CallerWithFunctionName(pc uintptr, file string, line int) string { + files := strings.Split(file, "/") + file = files[len(files)-1] + name := runtime.FuncForPC(pc).Name() + fns := strings.Split(name, ".") + name = fns[len(fns)-1] + return fmt.Sprintf("%s:%d:%s()", file, line, name) +} diff --git a/vendor/go.mau.fi/util/exzerolog/defaults.go b/vendor/go.mau.fi/util/exzerolog/defaults.go new file mode 100644 index 0000000000..c8c3c8108f --- /dev/null +++ b/vendor/go.mau.fi/util/exzerolog/defaults.go @@ -0,0 +1,32 @@ +// Copyright (c) 2024 Tulir Asokan +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. + +package exzerolog + +import ( + "time" + + "github.com/rs/zerolog" + deflog "github.com/rs/zerolog/log" +) + +// SetupDefaults updates zerolog globals with sensible defaults. +// +// * [zerolog.TimeFieldFormat] is set to time.RFC3339Nano instead of time.RFC3339 +// * [zerolog.CallerMarshalFunc] is set to [CallerWithFunctionName] +// * [zerolog.DefaultContextLogger] is set to the given logger with default_context_log=true and caller info enabled +// * The global default [log.Logger] is set to the given logger with global_log=true and caller info enabled +// * [zerolog.LevelColors] are updated to swap trace and debug level colors +func SetupDefaults(log *zerolog.Logger) { + zerolog.TimeFieldFormat = time.RFC3339Nano + zerolog.CallerMarshalFunc = CallerWithFunctionName + defaultCtxLog := log.With().Bool("default_context_log", true).Caller().Logger() + zerolog.DefaultContextLogger = &defaultCtxLog + deflog.Logger = log.With().Bool("global_log", true).Caller().Logger() + // Swap trace and debug level colors so trace pops out the least + zerolog.LevelColors[zerolog.TraceLevel] = 0 + zerolog.LevelColors[zerolog.DebugLevel] = 34 // blue +} diff --git a/vendor/go.mau.fi/util/exzerolog/generics.go b/vendor/go.mau.fi/util/exzerolog/generics.go new file mode 100644 index 0000000000..ca1910b899 --- /dev/null +++ b/vendor/go.mau.fi/util/exzerolog/generics.go @@ -0,0 +1,45 @@ +// Copyright (c) 2023 Tulir Asokan +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. + +package exzerolog + +import ( + "fmt" + + "github.com/rs/zerolog" +) + +func ArrayOf[T any](slice []T, fn func(arr *zerolog.Array, item T)) *zerolog.Array { + arr := zerolog.Arr() + for _, item := range slice { + fn(arr, item) + } + return arr +} + +func AddObject[T zerolog.LogObjectMarshaler](arr *zerolog.Array, obj T) { + arr.Object(obj) +} + +func AddStringer[T fmt.Stringer](arr *zerolog.Array, str T) { + arr.Str(str.String()) +} + +func AddStr[T ~string](arr *zerolog.Array, str T) { + arr.Str(string(str)) +} + +func ArrayOfObjs[T zerolog.LogObjectMarshaler](slice []T) *zerolog.Array { + return ArrayOf(slice, AddObject[T]) +} + +func ArrayOfStringers[T fmt.Stringer](slice []T) *zerolog.Array { + return ArrayOf(slice, AddStringer[T]) +} + +func ArrayOfStrs[T ~string](slice []T) *zerolog.Array { + return ArrayOf(slice, AddStr[T]) +} diff --git a/vendor/go.mau.fi/util/exzerolog/writer.go b/vendor/go.mau.fi/util/exzerolog/writer.go new file mode 100644 index 0000000000..c5709853cd --- /dev/null +++ b/vendor/go.mau.fi/util/exzerolog/writer.go @@ -0,0 +1,81 @@ +// Copyright (c) 2023 Tulir Asokan +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. + +package exzerolog + +import ( + "bytes" + "sync" + + "github.com/rs/zerolog" +) + +// LogWriter wraps a zerolog.Logger and provides an io.Writer with buffering so each written line is logged separately. +type LogWriter struct { + log zerolog.Logger + level zerolog.Level + field string + mu sync.Mutex + buf bytes.Buffer +} + +func NewLogWriter(log zerolog.Logger) *LogWriter { + zerolog.Nop() + return &LogWriter{ + log: log, + level: zerolog.DebugLevel, + field: zerolog.MessageFieldName, + } +} + +func (lw *LogWriter) WithLevel(level zerolog.Level) *LogWriter { + return &LogWriter{ + log: lw.log, + level: level, + field: lw.field, + } +} + +func (lw *LogWriter) WithField(field string) *LogWriter { + return &LogWriter{ + log: lw.log, + level: lw.level, + field: field, + } +} + +func (lw *LogWriter) writeLine(data []byte) { + if len(data) == 0 { + return + } + if data[len(data)-1] == '\n' { + data = data[:len(data)-1] + } + if lw.buf.Len() > 0 { + lw.buf.Write(data) + data = lw.buf.Bytes() + lw.buf.Reset() + } + lw.log.WithLevel(lw.level).Bytes(lw.field, data).Send() +} + +func (lw *LogWriter) Write(data []byte) (n int, err error) { + lw.mu.Lock() + defer lw.mu.Unlock() + newline := bytes.IndexByte(data, '\n') + if newline == len(data)-1 { + lw.writeLine(data) + } else if newline < 0 { + lw.buf.Write(data) + } else { + lines := bytes.Split(data, []byte{'\n'}) + for _, line := range lines[:len(lines)-1] { + lw.writeLine(line) + } + lw.buf.Write(lines[len(lines)-1]) + } + return len(data), nil +} diff --git a/vendor/go.mau.fi/util/fallocate/doc.go b/vendor/go.mau.fi/util/fallocate/doc.go new file mode 100644 index 0000000000..8fccdcd618 --- /dev/null +++ b/vendor/go.mau.fi/util/fallocate/doc.go @@ -0,0 +1,9 @@ +// Copyright (C) 2024 Sumner Evans +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. + +// Package fallocate provides a unified interface for preallocating space for a +// file. +package fallocate diff --git a/vendor/go.mau.fi/util/fallocate/fallocate_darwin.go b/vendor/go.mau.fi/util/fallocate/fallocate_darwin.go new file mode 100644 index 0000000000..846910bebb --- /dev/null +++ b/vendor/go.mau.fi/util/fallocate/fallocate_darwin.go @@ -0,0 +1,29 @@ +// Copyright (C) 2024 Sumner Evans +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. + +//go:build darwin + +package fallocate + +import ( + "os" + + "golang.org/x/sys/unix" +) + +var ErrOutOfSpace error = unix.ENOSPC + +func Fallocate(file *os.File, size int) error { + if size <= 0 { + return nil + } + return unix.FcntlFstore(uintptr(file.Fd()), unix.F_PREALLOCATE, &unix.Fstore_t{ + Flags: unix.F_ALLOCATEALL, + Posmode: unix.F_PEOFPOSMODE, + Offset: 0, + Length: int64(size), + }) +} diff --git a/vendor/go.mau.fi/util/fallocate/fallocate_linux.go b/vendor/go.mau.fi/util/fallocate/fallocate_linux.go new file mode 100644 index 0000000000..5b137a63fe --- /dev/null +++ b/vendor/go.mau.fi/util/fallocate/fallocate_linux.go @@ -0,0 +1,24 @@ +// Copyright (C) 2024 Sumner Evans +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. + +//go:build linux + +package fallocate + +import ( + "os" + + "golang.org/x/sys/unix" +) + +var ErrOutOfSpace error = unix.ENOSPC + +func Fallocate(file *os.File, size int) error { + if size <= 0 { + return nil + } + return unix.Fallocate(int(file.Fd()), 0, 0, int64(size)) +} diff --git a/vendor/go.mau.fi/util/fallocate/fallocate_unknown.go b/vendor/go.mau.fi/util/fallocate/fallocate_unknown.go new file mode 100644 index 0000000000..3f7aacfb3a --- /dev/null +++ b/vendor/go.mau.fi/util/fallocate/fallocate_unknown.go @@ -0,0 +1,17 @@ +// Copyright (C) 2024 Sumner Evans +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. + +//go:build !linux && !android && !darwin + +package fallocate + +import "os" + +var ErrOutOfSpace error = nil + +func Fallocate(file *os.File, size int) error { + return nil +} diff --git a/vendor/go.mau.fi/util/jsontime/duration.go b/vendor/go.mau.fi/util/jsontime/duration.go new file mode 100644 index 0000000000..bfa9b6685d --- /dev/null +++ b/vendor/go.mau.fi/util/jsontime/duration.go @@ -0,0 +1,155 @@ +// Copyright (c) 2025 Tulir Asokan +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. + +package jsontime + +import ( + "database/sql/driver" + "strconv" + "time" +) + +func unmarshalDuration(into *time.Duration, jsonData []byte, unit time.Duration) error { + val, err := strconv.ParseInt(string(jsonData), 10, 64) + if err != nil { + return err + } + *into = time.Duration(val) * unit + return nil +} + +func anyIntegerToDuration(src any, unit time.Duration, into *time.Duration) error { + i64, err := anyIntegerTo64(src) + if err != nil { + return err + } + *into = time.Duration(i64) * unit + return nil +} + +type Seconds struct { + time.Duration +} + +func S(dur time.Duration) Seconds { + return Seconds{Duration: dur} +} + +func SInt(dur int) Seconds { + return Seconds{Duration: time.Duration(dur) * time.Second} +} + +func (s Seconds) MarshalJSON() ([]byte, error) { + return []byte(strconv.FormatInt(int64(s.Seconds()), 10)), nil +} + +func (s Seconds) Value() (driver.Value, error) { + return int64(s.Seconds()), nil +} + +func (s *Seconds) UnmarshalJSON(data []byte) error { + return unmarshalDuration(&s.Duration, data, time.Second) +} + +func (s *Seconds) Scan(src interface{}) error { + return anyIntegerToDuration(src, time.Second, &s.Duration) +} + +func (s *Seconds) Get() time.Duration { + if s == nil { + return 0 + } + return s.Duration +} + +type Milliseconds struct { + time.Duration +} + +func MS(dur time.Duration) Milliseconds { + return Milliseconds{Duration: dur} +} + +func MSInt(dur int64) Milliseconds { + return Milliseconds{Duration: time.Duration(dur) * time.Millisecond} +} + +func (s Milliseconds) MarshalJSON() ([]byte, error) { + return []byte(strconv.FormatInt(s.Milliseconds(), 10)), nil +} + +func (s Milliseconds) Value() (driver.Value, error) { + return s.Milliseconds(), nil +} + +func (s *Milliseconds) UnmarshalJSON(data []byte) error { + return unmarshalDuration(&s.Duration, data, time.Millisecond) +} + +func (s *Milliseconds) Scan(src interface{}) error { + return anyIntegerToDuration(src, time.Millisecond, &s.Duration) +} + +func (s *Milliseconds) Get() time.Duration { + if s == nil { + return 0 + } + return s.Duration +} + +type Microseconds struct { + time.Duration +} + +func (s Microseconds) MarshalJSON() ([]byte, error) { + return []byte(strconv.FormatInt(s.Microseconds(), 10)), nil +} + +func (s Microseconds) Value() (driver.Value, error) { + return s.Microseconds(), nil +} + +func (s *Microseconds) UnmarshalJSON(data []byte) error { + return unmarshalDuration(&s.Duration, data, time.Microsecond) +} + +func (s *Microseconds) Scan(src interface{}) error { + return anyIntegerToDuration(src, time.Microsecond, &s.Duration) +} + +func (s *Microseconds) Get() time.Duration { + if s == nil { + return 0 + } + return s.Duration +} + +type Nanoseconds struct { + time.Duration +} + +func (s Nanoseconds) MarshalJSON() ([]byte, error) { + return []byte(strconv.FormatInt(s.Nanoseconds(), 10)), nil +} + +func (s Nanoseconds) Value() (driver.Value, error) { + return s.Nanoseconds(), nil +} + +func (s *Nanoseconds) UnmarshalJSON(data []byte) error { + return unmarshalDuration(&s.Duration, data, time.Nanosecond) +} + +func (s *Nanoseconds) Scan(src interface{}) error { + return anyIntegerToDuration(src, time.Nanosecond, &s.Duration) +} + +func (s *Nanoseconds) Get() time.Duration { + if s == nil { + return 0 + } + return s.Duration +} diff --git a/vendor/go.mau.fi/util/jsontime/helpers.go b/vendor/go.mau.fi/util/jsontime/helpers.go index 35f4cc24df..b90461c6f1 100644 --- a/vendor/go.mau.fi/util/jsontime/helpers.go +++ b/vendor/go.mau.fi/util/jsontime/helpers.go @@ -10,12 +10,19 @@ import ( "time" ) +func zeroSafeUnixToTime(val int64, fn func(int64) time.Time) time.Time { + if val == 0 { + return time.Time{} + } + return fn(val) +} + func UM(time time.Time) UnixMilli { return UnixMilli{Time: time} } func UMInt(ts int64) UnixMilli { - return UM(time.UnixMilli(ts)) + return UM(zeroSafeUnixToTime(ts, time.UnixMilli)) } func UnixMilliNow() UnixMilli { @@ -26,8 +33,8 @@ func UMicro(time time.Time) UnixMicro { return UnixMicro{Time: time} } -func UMicroInto(ts int64) UnixMicro { - return UMicro(time.UnixMicro(ts)) +func UMicroInt(ts int64) UnixMicro { + return UMicro(zeroSafeUnixToTime(ts, time.UnixMicro)) } func UnixMicroNow() UnixMicro { @@ -39,7 +46,9 @@ func UN(time time.Time) UnixNano { } func UNInt(ts int64) UnixNano { - return UN(time.Unix(0, ts)) + return UN(zeroSafeUnixToTime(ts, func(i int64) time.Time { + return time.Unix(0, i) + })) } func UnixNanoNow() UnixNano { @@ -51,7 +60,9 @@ func U(time time.Time) Unix { } func UInt(ts int64) Unix { - return U(time.Unix(ts, 0)) + return U(zeroSafeUnixToTime(ts, func(i int64) time.Time { + return time.Unix(i, 0) + })) } func UnixNow() Unix { diff --git a/vendor/go.mau.fi/util/jsontime/integer.go b/vendor/go.mau.fi/util/jsontime/integer.go index 7d15d5d77a..56a4f2a5f0 100644 --- a/vendor/go.mau.fi/util/jsontime/integer.go +++ b/vendor/go.mau.fi/util/jsontime/integer.go @@ -31,25 +31,39 @@ func parseTime(data []byte, unixConv func(int64) time.Time, into *time.Time) err return nil } -func anyIntegerToTime(src any, unixConv func(int64) time.Time, into *time.Time) error { +func anyIntegerTo64(src any) (int64, error) { switch v := src.(type) { case int: - *into = unixConv(int64(v)) + return int64(v), nil case int8: - *into = unixConv(int64(v)) + return int64(v), nil case int16: - *into = unixConv(int64(v)) + return int64(v), nil case int32: - *into = unixConv(int64(v)) + return int64(v), nil case int64: - *into = unixConv(int64(v)) + return v, nil default: - return fmt.Errorf("%w: %T", ErrNotInteger, src) + return 0, fmt.Errorf("%w: %T", ErrNotInteger, src) } +} +func anyIntegerToTime(src any, unixConv func(int64) time.Time, into *time.Time) error { + i64, err := anyIntegerTo64(src) + if err != nil { + return err + } + *into = unixConv(i64) return nil } +func zeroSafeUnix(t time.Time, method func(time.Time) int64) int64 { + if t.IsZero() { + return 0 + } + return method(t) +} + var _ sql.Scanner = &UnixMilli{} var _ driver.Valuer = UnixMilli{} @@ -58,9 +72,6 @@ type UnixMilli struct { } func (um UnixMilli) MarshalJSON() ([]byte, error) { - if um.IsZero() { - return []byte{'0'}, nil - } return json.Marshal(um.UnixMilli()) } @@ -76,6 +87,11 @@ func (um *UnixMilli) Scan(src any) error { return anyIntegerToTime(src, time.UnixMilli, &um.Time) } +func (um UnixMilli) Unix() int64 { return zeroSafeUnix(um.Time, time.Time.Unix) } +func (um UnixMilli) UnixMilli() int64 { return zeroSafeUnix(um.Time, time.Time.UnixMilli) } +func (um UnixMilli) UnixMicro() int64 { return zeroSafeUnix(um.Time, time.Time.UnixMicro) } +func (um UnixMilli) UnixNano() int64 { return zeroSafeUnix(um.Time, time.Time.UnixNano) } + var _ sql.Scanner = &UnixMicro{} var _ driver.Valuer = UnixMicro{} @@ -84,9 +100,6 @@ type UnixMicro struct { } func (um UnixMicro) MarshalJSON() ([]byte, error) { - if um.IsZero() { - return []byte{'0'}, nil - } return json.Marshal(um.UnixMicro()) } @@ -102,6 +115,11 @@ func (um *UnixMicro) Scan(src any) error { return anyIntegerToTime(src, time.UnixMicro, &um.Time) } +func (um UnixMicro) Unix() int64 { return zeroSafeUnix(um.Time, time.Time.Unix) } +func (um UnixMicro) UnixMilli() int64 { return zeroSafeUnix(um.Time, time.Time.UnixMilli) } +func (um UnixMicro) UnixMicro() int64 { return zeroSafeUnix(um.Time, time.Time.UnixMicro) } +func (um UnixMicro) UnixNano() int64 { return zeroSafeUnix(um.Time, time.Time.UnixNano) } + var _ sql.Scanner = &UnixNano{} var _ driver.Valuer = UnixNano{} @@ -110,9 +128,6 @@ type UnixNano struct { } func (un UnixNano) MarshalJSON() ([]byte, error) { - if un.IsZero() { - return []byte{'0'}, nil - } return json.Marshal(un.UnixNano()) } @@ -132,14 +147,16 @@ func (un *UnixNano) Scan(src any) error { }, &un.Time) } +func (un UnixNano) Unix() int64 { return zeroSafeUnix(un.Time, time.Time.Unix) } +func (un UnixNano) UnixMilli() int64 { return zeroSafeUnix(un.Time, time.Time.UnixMilli) } +func (un UnixNano) UnixMicro() int64 { return zeroSafeUnix(un.Time, time.Time.UnixMicro) } +func (un UnixNano) UnixNano() int64 { return zeroSafeUnix(un.Time, time.Time.UnixNano) } + type Unix struct { time.Time } func (u Unix) MarshalJSON() ([]byte, error) { - if u.IsZero() { - return []byte{'0'}, nil - } return json.Marshal(u.Unix()) } @@ -161,3 +178,8 @@ func (u *Unix) Scan(src any) error { return time.Unix(i, 0) }, &u.Time) } + +func (u Unix) Unix() int64 { return zeroSafeUnix(u.Time, time.Time.Unix) } +func (u Unix) UnixMilli() int64 { return zeroSafeUnix(u.Time, time.Time.UnixMilli) } +func (u Unix) UnixMicro() int64 { return zeroSafeUnix(u.Time, time.Time.UnixMicro) } +func (u Unix) UnixNano() int64 { return zeroSafeUnix(u.Time, time.Time.UnixNano) } diff --git a/vendor/go.mau.fi/util/ptr/ptr.go b/vendor/go.mau.fi/util/ptr/ptr.go new file mode 100644 index 0000000000..b04fa1913b --- /dev/null +++ b/vendor/go.mau.fi/util/ptr/ptr.go @@ -0,0 +1,43 @@ +// Copyright (c) 2024 Tulir Asokan +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. + +package ptr + +// Clone creates a shallow copy of the given pointer. +func Clone[T any](val *T) *T { + if val == nil { + return nil + } + valCopy := *val + return &valCopy +} + +// Ptr returns a pointer to the given value. +func Ptr[T any](val T) *T { + return &val +} + +// NonZero returns a pointer to the given comparable value, unless the value is the type's zero value. +func NonZero[T comparable](val T) *T { + var zero T + return NonDefault(val, zero) +} + +// NonDefault returns a pointer to the first parameter, unless it is equal to the second parameter. +func NonDefault[T comparable](val, def T) *T { + if val == def { + return nil + } + return &val +} + +// Val returns the value of the given pointer, or the zero value of the type if the pointer is nil. +func Val[T any](ptr *T) (val T) { + if ptr != nil { + val = *ptr + } + return +} diff --git a/vendor/go.mau.fi/util/random/string.go b/vendor/go.mau.fi/util/random/string.go index b9cb0ae424..5285c7ef51 100644 --- a/vendor/go.mau.fi/util/random/string.go +++ b/vendor/go.mau.fi/util/random/string.go @@ -1,4 +1,4 @@ -// Copyright (c) 2023 Tulir Asokan +// Copyright (c) 2025 Tulir Asokan // // This Source Code Form is subject to the terms of the Mozilla Public // License, v. 2.0. If a copy of the MPL was not distributed with this @@ -10,20 +10,52 @@ import ( "encoding/binary" "hash/crc32" "strings" - "unsafe" + + "go.mau.fi/util/exbytes" ) const letters = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" // StringBytes generates a random string of the given length and returns it as a byte array. func StringBytes(n int) []byte { + return StringBytesCharset(n, letters) +} + +// AppendSequence generates a random sequence of the given length using the given character set +// and appends it to the given output slice. +func AppendSequence[T any](n int, charset, output []T) []T { + if n <= 0 { + return output + } + if output == nil { + output = make([]T, 0, n) + } + // If risk of modulo bias is too high, use 32-bit integers as source instead of 16-bit. + if 65536%len(charset) < 200 { + input := Bytes(n * 2) + for i := 0; i < n; i++ { + output = append(output, charset[binary.BigEndian.Uint16(input[i*2:])%uint16(len(charset))]) + } + } else { + input := Bytes(n * 4) + for i := 0; i < n; i++ { + output = append(output, charset[binary.BigEndian.Uint32(input[i*4:])%uint32(len(charset))]) + } + } + return output +} + +// StringBytesCharset generates a random string of the given length using the given character set and returns it as a byte array. +// Note that the character set must be ASCII. For arbitrary Unicode, use [AppendSequence] with a `[]rune`. +func StringBytesCharset(n int, charset string) []byte { if n <= 0 { return []byte{} } input := Bytes(n * 2) for i := 0; i < n; i++ { - // Risk of modulo bias is only 2 in 65535, values between 0 and 65533 are uniformly distributed - input[i] = letters[binary.BigEndian.Uint16(input[i*2:])%uint16(len(letters))] + // The risk of modulo bias is (65536 % len(charset)) / 65536. + // For the default charset, that's 2 in 65536 or 0.003 %. + input[i] = charset[binary.BigEndian.Uint16(input[i*2:])%uint16(len(charset))] } input = input[:n] return input @@ -34,8 +66,16 @@ func String(n int) string { if n <= 0 { return "" } - str := StringBytes(n) - return *(*string)(unsafe.Pointer(&str)) + return exbytes.UnsafeString(StringBytes(n)) +} + +// StringCharset generates a random string of the given length using the given character set. +// Note that the character set must be ASCII. For arbitrary Unicode, use [AppendSequence] with a `[]rune`. +func StringCharset(n int, charset string) string { + if n <= 0 { + return "" + } + return exbytes.UnsafeString(StringBytesCharset(n, charset)) } func base62Encode(val uint32, minWidth int) []byte { @@ -65,7 +105,7 @@ func Token(namespace string, randomLength int) string { token[len(namespace)+randomLength+1] = '_' checksum := base62Encode(crc32.ChecksumIEEE(token[:len(token)-7]), 6) copy(token[len(token)-6:], checksum) - return *(*string)(unsafe.Pointer(&token)) + return exbytes.UnsafeString(token) } // GetTokenPrefix parses the given token generated with Token, validates the checksum and returns the prefix namespace. diff --git a/vendor/go.mau.fi/whatsmeow/.gitattributes b/vendor/go.mau.fi/whatsmeow/.gitattributes index dfb4b8bfa7..f8256663f8 100644 --- a/vendor/go.mau.fi/whatsmeow/.gitattributes +++ b/vendor/go.mau.fi/whatsmeow/.gitattributes @@ -1,2 +1,3 @@ *.pb.go linguist-generated=true *.pb.raw binary linguist-generated=true +internals.go linguist-generated=true diff --git a/vendor/go.mau.fi/whatsmeow/.pre-commit-config.yaml b/vendor/go.mau.fi/whatsmeow/.pre-commit-config.yaml index 3050db5e12..bec963f3cd 100644 --- a/vendor/go.mau.fi/whatsmeow/.pre-commit-config.yaml +++ b/vendor/go.mau.fi/whatsmeow/.pre-commit-config.yaml @@ -1,18 +1,31 @@ repos: - repo: https://github.com/pre-commit/pre-commit-hooks - rev: v4.4.0 + rev: v6.0.0 hooks: - id: trailing-whitespace exclude_types: [markdown] - exclude: LICENSE|def.proto + exclude: LICENSE - id: end-of-file-fixer - exclude: LICENSE|def.proto + exclude: LICENSE - id: check-yaml - id: check-added-large-files - repo: https://github.com/tekwizely/pre-commit-golang - rev: v1.0.0-rc.1 + rev: v1.0.0-rc.4 hooks: - id: go-imports-repo - args: ["-w"] + args: + - "-local" + - "go.mau.fi/whatsmeow" + - "-w" - id: go-vet-repo-mod + # TODO enable this + #- id: go-staticcheck-repo-mod + - id: go-mod-tidy + + - repo: https://github.com/beeper/pre-commit-go + rev: v0.4.2 + hooks: + # TODO enable this + #- id: zerolog-ban-msgf + - id: zerolog-use-stringer diff --git a/vendor/go.mau.fi/whatsmeow/appstate.go b/vendor/go.mau.fi/whatsmeow/appstate.go index 9f4561e6f0..beacc44858 100644 --- a/vendor/go.mau.fi/whatsmeow/appstate.go +++ b/vendor/go.mau.fi/whatsmeow/appstate.go @@ -1,4 +1,4 @@ -// Copyright (c) 2022 Tulir Asokan +// Copyright (c) 2026 Tulir Asokan // // This Source Code Form is subject to the terms of the Mozilla Public // License, v. 2.0. If a copy of the MPL was not distributed with this @@ -13,9 +13,14 @@ import ( "fmt" "time" + "github.com/rs/zerolog" + "go.mau.fi/util/exslices" + "go.mau.fi/util/ptr" + "go.mau.fi/whatsmeow/appstate" waBinary "go.mau.fi/whatsmeow/binary" - waProto "go.mau.fi/whatsmeow/binary/proto" + "go.mau.fi/whatsmeow/proto/waE2E" + "go.mau.fi/whatsmeow/proto/waServerSync" "go.mau.fi/whatsmeow/store" "go.mau.fi/whatsmeow/types" "go.mau.fi/whatsmeow/types/events" @@ -23,66 +28,171 @@ import ( // FetchAppState fetches updates to the given type of app state. If fullSync is true, the current // cached state will be removed and all app state patches will be re-fetched from the server. -func (cli *Client) FetchAppState(name appstate.WAPatchName, fullSync, onlyIfNotSynced bool) error { +func (cli *Client) FetchAppState(ctx context.Context, name appstate.WAPatchName, fullSync, onlyIfNotSynced bool) error { + eventsToDispatch, err := cli.fetchAppState(ctx, name, fullSync, onlyIfNotSynced) + if err != nil { + return err + } + for _, evt := range eventsToDispatch { + cli.dispatchEvent(evt) + } + return nil +} + +func (cli *Client) fetchAppState(ctx context.Context, name appstate.WAPatchName, fullSync, onlyIfNotSynced bool) ([]any, error) { + if cli == nil { + return nil, ErrClientIsNil + } cli.appStateSyncLock.Lock() defer cli.appStateSyncLock.Unlock() if fullSync { - err := cli.Store.AppState.DeleteAppStateVersion(string(name)) + err := cli.Store.AppState.DeleteAppStateVersion(ctx, string(name)) if err != nil { - return fmt.Errorf("failed to reset app state %s version: %w", name, err) + return nil, fmt.Errorf("failed to reset app state %s version: %w", name, err) } } - version, hash, err := cli.Store.AppState.GetAppStateVersion(string(name)) + version, hash, err := cli.Store.AppState.GetAppStateVersion(ctx, string(name)) if err != nil { - return fmt.Errorf("failed to get app state %s version: %w", name, err) + return nil, fmt.Errorf("failed to get app state %s version: %w", name, err) } if version == 0 { fullSync = true } else if onlyIfNotSynced { - return nil + return nil, nil } state := appstate.HashState{Version: version, Hash: hash} hasMore := true wantSnapshot := fullSync + var eventsToDispatch []any + eventsToDispatchPtr := &eventsToDispatch + if fullSync && !cli.EmitAppStateEventsOnFullSync { + eventsToDispatchPtr = nil + } for hasMore { - patches, err := cli.fetchAppStatePatches(name, state.Version, wantSnapshot) - wantSnapshot = false + patches, err := cli.fetchAppStatePatches(ctx, name, state.Version, wantSnapshot) if err != nil { - return fmt.Errorf("failed to fetch app state %s patches: %w", name, err) + return nil, fmt.Errorf("failed to fetch app state %s patches: %w", name, err) + } else if !wantSnapshot && patches.Snapshot != nil { + return nil, fmt.Errorf("server unexpectedly returned snapshot for %s without asking", name) + } else if patches.Snapshot != nil && state != (appstate.HashState{}) { + return nil, fmt.Errorf("unexpected non-empty input state (v%d) for %s when applying snapshot", state.Version, name) } + wantSnapshot = false hasMore = patches.HasMorePatches - - mutations, newState, err := cli.appStateProc.DecodePatches(patches, state, true) + state, err = cli.applyAppStatePatches(ctx, name, state, patches, fullSync, eventsToDispatchPtr) if err != nil { - if errors.Is(err, appstate.ErrKeyNotFound) { - go cli.requestMissingAppStateKeys(context.TODO(), patches) - } - return fmt.Errorf("failed to decode app state %s patches: %w", name, err) - } - wasFullSync := state.Version == 0 && patches.Snapshot != nil - state = newState - if name == appstate.WAPatchCriticalUnblockLow && wasFullSync && !cli.EmitAppStateEventsOnFullSync { - var contacts []store.ContactEntry - mutations, contacts = cli.filterContacts(mutations) - cli.Log.Debugf("Mass inserting app state snapshot with %d contacts into the store", len(contacts)) - err = cli.Store.Contacts.PutAllContactNames(contacts) - if err != nil { - // This is a fairly serious failure, so just abort the whole thing - return fmt.Errorf("failed to update contact store with data from snapshot: %v", err) - } - } - for _, mutation := range mutations { - cli.dispatchAppState(mutation, fullSync, cli.EmitAppStateEventsOnFullSync) + cli.dispatchEvent(&events.AppStateSyncError{Name: name, FullSync: fullSync, Error: err}) + return nil, err } } if fullSync { cli.Log.Debugf("Full sync of app state %s completed. Current version: %d", name, state.Version) - cli.dispatchEvent(&events.AppStateSyncComplete{Name: name}) + eventsToDispatch = append(eventsToDispatch, &events.AppStateSyncComplete{Name: name, Version: state.Version}) } else { cli.Log.Debugf("Synced app state %s from version %d to %d", name, version, state.Version) } + return eventsToDispatch, nil +} + +func (cli *Client) handleAppStateRecovery( + ctx context.Context, + reqID types.MessageID, + result []*waE2E.PeerDataOperationRequestResponseMessage_PeerDataOperationResult, +) bool { + if len(result) == 0 || result[0].GetSyncdSnapshotFatalRecoveryResponse() == nil { + cli.Log.Warnf("No app state recovery data received for %s", reqID) + return true + } else if len(result) > 1 { + cli.Log.Warnf("Unexpected number of app state recovery results for %s: %d", reqID, len(result)) + } + var eventsToDispatch []any + eventsToDispatchPtr := &eventsToDispatch + if !cli.EmitAppStateEventsOnFullSync { + eventsToDispatchPtr = nil + } + snapshot, err := appstate.ParseRecovery(result[0].GetSyncdSnapshotFatalRecoveryResponse()) + if err != nil { + cli.Log.Warnf("Failed to parse app state recovery blob for %s: %v", reqID, err) + return true + } + name := appstate.WAPatchName(snapshot.GetCollectionName()) + version := snapshot.GetVersion().GetVersion() + currentVersion, _, err := cli.Store.AppState.GetAppStateVersion(ctx, string(name)) + if err != nil { + cli.Log.Errorf("Failed to get current app state %s version for %s: %v", name, reqID, err) + return true + } else if currentVersion >= version { + cli.Log.Infof("Ignoring app state recovery response for %s as current version %d is newer than or equal to recovery version %d", reqID, currentVersion, snapshot.GetVersion().GetVersion()) + return true + } + cli.Log.Debugf("Handling app state recovery response for %s", reqID) + mutations, err := cli.appStateProc.ProcessRecovery(ctx, snapshot) + if err != nil { + cli.Log.Warnf("Failed to parse app state recovery blob for %s: %v", reqID, err) + return true + } + err = cli.collectEventsToDispatch(ctx, name, mutations, true, eventsToDispatchPtr) + if err != nil { + cli.Log.Warnf("Failed to collect app state events for %s: %v", reqID, err) + return true + } + eventsToDispatch = append(eventsToDispatch, &events.AppStateSyncComplete{Name: name, Version: version, Recovery: true}) + for _, evt := range eventsToDispatch { + handlerFailed := cli.dispatchEvent(evt) + if handlerFailed { + return false + } + } + cli.Log.Debugf("Finished handling app state recovery response for %s (%s to v%d)", reqID, name, version) + return true +} + +func (cli *Client) applyAppStatePatches( + ctx context.Context, + name appstate.WAPatchName, + state appstate.HashState, + patches *appstate.PatchList, + fullSync bool, + eventsToDispatch *[]any, +) (appstate.HashState, error) { + mutations, newState, err := cli.appStateProc.DecodePatches(ctx, patches, state, true) + if err != nil { + if errors.Is(err, appstate.ErrKeyNotFound) { + go cli.requestMissingAppStateKeys(context.WithoutCancel(ctx), patches) + } + return state, fmt.Errorf("failed to decode app state %s patches: %w", name, err) + } + return newState, cli.collectEventsToDispatch(ctx, name, mutations, fullSync, eventsToDispatch) +} + +func (cli *Client) collectEventsToDispatch( + ctx context.Context, + name appstate.WAPatchName, + mutations []appstate.Mutation, + fullSync bool, + eventsToDispatch *[]any, +) error { + if name == appstate.WAPatchCriticalUnblockLow && fullSync && !cli.EmitAppStateEventsOnFullSync { + var contacts []store.ContactEntry + mutations, contacts = cli.filterContacts(mutations) + cli.Log.Debugf("Mass inserting app state snapshot with %d contacts into the store", len(contacts)) + err := cli.Store.Contacts.PutAllContactNames(ctx, contacts) + if err != nil { + // This is a fairly serious failure, so just abort the whole thing + return fmt.Errorf("failed to update contact store with data from snapshot: %v", err) + } + } + for _, mutation := range mutations { + if eventsToDispatch != nil && mutation.Operation == waServerSync.SyncdMutation_SET { + *eventsToDispatch = append(*eventsToDispatch, &events.AppState{Index: mutation.Index, SyncActionValue: mutation.Action}) + } + evt := cli.dispatchAppState(ctx, name, mutation, fullSync) + if eventsToDispatch != nil && evt != nil { + *eventsToDispatch = append(*eventsToDispatch, evt) + } + } return nil } @@ -105,16 +215,27 @@ func (cli *Client) filterContacts(mutations []appstate.Mutation) ([]appstate.Mut return filteredMutations, contacts } -func (cli *Client) dispatchAppState(mutation appstate.Mutation, fullSync bool, emitOnFullSync bool) { - - dispatchEvts := !fullSync || emitOnFullSync - - if mutation.Operation != waProto.SyncdMutation_SET { - return +func (cli *Client) dispatchAppState(ctx context.Context, name appstate.WAPatchName, mutation appstate.Mutation, fullSync bool) (eventToDispatch any) { + logLevel := zerolog.TraceLevel + log := zerolog.Ctx(ctx) + if cli.AppStateDebugLogs && log.GetLevel() != zerolog.TraceLevel { + logLevel = zerolog.DebugLevel + } + logEvt := log.WithLevel(logLevel). + Str("patch_name", string(name)). + Uint64("patch_version", mutation.PatchVersion). + Stringer("operation", mutation.Operation). + Int32("version", mutation.Version). + Strs("index", mutation.Index). + Hex("index_mac", mutation.IndexMAC). + Hex("value_mac", mutation.ValueMAC) + if logLevel == zerolog.TraceLevel { + logEvt.Any("action", mutation.Action) } + logEvt.Msg("Received app state mutation") - if dispatchEvts { - cli.dispatchEvent(&events.AppState{Index: mutation.Index, SyncActionValue: mutation.Action}) + if mutation.Operation != waServerSync.SyncdMutation_SET { + return } var jid types.JID @@ -124,42 +245,66 @@ func (cli *Client) dispatchAppState(mutation appstate.Mutation, fullSync bool, e ts := time.UnixMilli(mutation.Action.GetTimestamp()) var storeUpdateError error - var eventToDispatch interface{} switch mutation.Index[0] { case appstate.IndexMute: act := mutation.Action.GetMuteAction() eventToDispatch = &events.Mute{JID: jid, Timestamp: ts, Action: act, FromFullSync: fullSync} var mutedUntil time.Time if act.GetMuted() { - mutedUntil = time.UnixMilli(act.GetMuteEndTimestamp()) + if act.GetMuteEndTimestamp() < 0 { + mutedUntil = store.MutedForever + } else { + mutedUntil = time.UnixMilli(act.GetMuteEndTimestamp()) + } } if cli.Store.ChatSettings != nil { - storeUpdateError = cli.Store.ChatSettings.PutMutedUntil(jid, mutedUntil) + storeUpdateError = cli.Store.ChatSettings.PutMutedUntil(ctx, jid, mutedUntil) } case appstate.IndexPin: act := mutation.Action.GetPinAction() eventToDispatch = &events.Pin{JID: jid, Timestamp: ts, Action: act, FromFullSync: fullSync} if cli.Store.ChatSettings != nil { - storeUpdateError = cli.Store.ChatSettings.PutPinned(jid, act.GetPinned()) + storeUpdateError = cli.Store.ChatSettings.PutPinned(ctx, jid, act.GetPinned()) } case appstate.IndexArchive: act := mutation.Action.GetArchiveChatAction() eventToDispatch = &events.Archive{JID: jid, Timestamp: ts, Action: act, FromFullSync: fullSync} if cli.Store.ChatSettings != nil { - storeUpdateError = cli.Store.ChatSettings.PutArchived(jid, act.GetArchived()) + storeUpdateError = cli.Store.ChatSettings.PutArchived(ctx, jid, act.GetArchived()) } case appstate.IndexContact: act := mutation.Action.GetContactAction() eventToDispatch = &events.Contact{JID: jid, Timestamp: ts, Action: act, FromFullSync: fullSync} if cli.Store.Contacts != nil { - storeUpdateError = cli.Store.Contacts.PutContactName(jid, act.GetFirstName(), act.GetFullName()) + storeUpdateError = cli.Store.Contacts.PutContactName(ctx, jid, act.GetFirstName(), act.GetFullName()) } case appstate.IndexClearChat: act := mutation.Action.GetClearChatAction() - eventToDispatch = &events.ClearChat{JID: jid, Timestamp: ts, Action: act, FromFullSync: fullSync} + var deleteMedia bool + // TODO what's index 2 here? + if len(mutation.Index) > 3 && mutation.Index[3] == "1" { + deleteMedia = true + } + eventToDispatch = &events.ClearChat{ + JID: jid, + Timestamp: ts, + Action: act, + DeleteMedia: deleteMedia, + FromFullSync: fullSync, + } case appstate.IndexDeleteChat: act := mutation.Action.GetDeleteChatAction() - eventToDispatch = &events.DeleteChat{JID: jid, Timestamp: ts, Action: act, FromFullSync: fullSync} + var deleteMedia bool + if len(mutation.Index) > 2 && mutation.Index[2] == "1" { + deleteMedia = true + } + eventToDispatch = &events.DeleteChat{ + JID: jid, + Timestamp: ts, + Action: act, + DeleteMedia: deleteMedia, + FromFullSync: fullSync, + } case appstate.IndexStar: if len(mutation.Index) < 5 { return @@ -206,7 +351,7 @@ func (cli *Client) dispatchAppState(mutation appstate.Mutation, fullSync bool, e FromFullSync: fullSync, } cli.Store.PushName = mutation.Action.GetPushNameSetting().GetName() - err := cli.Store.Save() + err := cli.Store.Save(ctx) if err != nil { cli.Log.Errorf("Failed to save device store after updating push name: %v", err) } @@ -262,16 +407,14 @@ func (cli *Client) dispatchAppState(mutation appstate.Mutation, fullSync bool, e if storeUpdateError != nil { cli.Log.Errorf("Failed to update device store after app state mutation: %v", storeUpdateError) } - if dispatchEvts && eventToDispatch != nil { - cli.dispatchEvent(eventToDispatch) - } + return } -func (cli *Client) downloadExternalAppStateBlob(ref *waProto.ExternalBlobReference) ([]byte, error) { - return cli.Download(ref) +func (cli *Client) downloadExternalAppStateBlob(ctx context.Context, ref *waServerSync.ExternalBlobReference) ([]byte, error) { + return cli.Download(ctx, ref) } -func (cli *Client) fetchAppStatePatches(name appstate.WAPatchName, fromVersion uint64, snapshot bool) (*appstate.PatchList, error) { +func (cli *Client) fetchAppStatePatches(ctx context.Context, name appstate.WAPatchName, fromVersion uint64, snapshot bool) (*appstate.PatchList, error) { attrs := waBinary.Attrs{ "name": string(name), "return_snapshot": snapshot, @@ -279,7 +422,7 @@ func (cli *Client) fetchAppStatePatches(name appstate.WAPatchName, fromVersion u if !snapshot { attrs["version"] = fromVersion } - resp, err := cli.sendIQ(infoQuery{ + resp, err := cli.sendIQ(ctx, infoQuery{ Namespace: "w:sync:app:state", Type: "set", To: types.ServerJID, @@ -294,12 +437,16 @@ func (cli *Client) fetchAppStatePatches(name appstate.WAPatchName, fromVersion u if err != nil { return nil, err } - return appstate.ParsePatchList(resp, cli.downloadExternalAppStateBlob) + collection, ok := resp.GetOptionalChildByTag("sync", "collection") + if !ok { + return nil, &ElementMissingError{Tag: "collection", In: "app state patch response"} + } + return appstate.ParsePatchList(ctx, &collection, cli.downloadExternalAppStateBlob) } func (cli *Client) requestMissingAppStateKeys(ctx context.Context, patches *appstate.PatchList) { cli.appStateKeyRequestsLock.Lock() - rawKeyIDs := cli.appStateProc.GetMissingKeyIDs(patches) + rawKeyIDs := cli.appStateProc.GetMissingKeyIDs(ctx, patches) filteredKeyIDs := make([][]byte, 0, len(rawKeyIDs)) now := time.Now() for _, keyID := range rawKeyIDs { @@ -315,44 +462,50 @@ func (cli *Client) requestMissingAppStateKeys(ctx context.Context, patches *apps } func (cli *Client) requestAppStateKeys(ctx context.Context, rawKeyIDs [][]byte) { - keyIDs := make([]*waProto.AppStateSyncKeyId, len(rawKeyIDs)) + keyIDs := make([]*waE2E.AppStateSyncKeyId, len(rawKeyIDs)) debugKeyIDs := make([]string, len(rawKeyIDs)) for i, keyID := range rawKeyIDs { - keyIDs[i] = &waProto.AppStateSyncKeyId{KeyID: keyID} + keyIDs[i] = &waE2E.AppStateSyncKeyId{KeyID: keyID} debugKeyIDs[i] = hex.EncodeToString(keyID) } - msg := &waProto.Message{ - ProtocolMessage: &waProto.ProtocolMessage{ - Type: waProto.ProtocolMessage_APP_STATE_SYNC_KEY_REQUEST.Enum(), - AppStateSyncKeyRequest: &waProto.AppStateSyncKeyRequest{ + msg := &waE2E.Message{ + ProtocolMessage: &waE2E.ProtocolMessage{ + Type: waE2E.ProtocolMessage_APP_STATE_SYNC_KEY_REQUEST.Enum(), + AppStateSyncKeyRequest: &waE2E.AppStateSyncKeyRequest{ KeyIDs: keyIDs, }, }, } - ownID := cli.getOwnID().ToNonAD() - if ownID.IsEmpty() || len(debugKeyIDs) == 0 { + if len(debugKeyIDs) == 0 { return } cli.Log.Infof("Sending key request for app state keys %+v", debugKeyIDs) - _, err := cli.SendMessage(ctx, ownID, msg, SendRequestExtra{Peer: true}) + _, err := cli.SendPeerMessage(ctx, msg) if err != nil { cli.Log.Warnf("Failed to send app state key request: %v", err) } } -// SendAppState sends the given app state patch, then resyncs that app state type from the server +// SendAppState sends the given app state patch, then triggers a background resync of that app state type // to update local caches and send events for the updates. // // You can use the Build methods in the appstate package to build the parameter for this method, e.g. // -// cli.SendAppState(appstate.BuildMute(targetJID, true, 24 * time.Hour)) -func (cli *Client) SendAppState(patch appstate.PatchInfo) error { - version, hash, err := cli.Store.AppState.GetAppStateVersion(string(patch.Type)) +// cli.SendAppState(ctx, appstate.BuildMute(targetJID, true, 24 * time.Hour)) +func (cli *Client) SendAppState(ctx context.Context, patch appstate.PatchInfo) error { + return cli.sendAppState(ctx, patch, true) +} + +func (cli *Client) sendAppState(ctx context.Context, patch appstate.PatchInfo, allowRetry bool) error { + if cli == nil { + return ErrClientIsNil + } + version, hash, err := cli.Store.AppState.GetAppStateVersion(ctx, string(patch.Type)) if err != nil { return err } // TODO create new key instead of reusing the primary client's keys - latestKeyID, err := cli.Store.AppStateKeys.GetLatestAppStateSyncKeyID() + latestKeyID, err := cli.Store.AppStateKeys.GetLatestAppStateSyncKeyID(ctx) if err != nil { return fmt.Errorf("failed to get latest app state key ID: %w", err) } else if latestKeyID == nil { @@ -361,12 +514,12 @@ func (cli *Client) SendAppState(patch appstate.PatchInfo) error { state := appstate.HashState{Version: version, Hash: hash} - encodedPatch, err := cli.appStateProc.EncodePatch(latestKeyID, state, patch) + encodedPatch, err := cli.appStateProc.EncodePatch(ctx, latestKeyID, state, patch) if err != nil { return err } - resp, err := cli.sendIQ(infoQuery{ + resp, err := cli.sendIQ(ctx, infoQuery{ Namespace: "w:sync:app:state", Type: iqSet, To: types.ServerJID, @@ -390,12 +543,100 @@ func (cli *Client) SendAppState(patch appstate.PatchInfo) error { return err } - respCollection := resp.GetChildByTag("sync", "collection") + respCollection, ok := resp.GetOptionalChildByTag("sync", "collection") + if !ok { + return &ElementMissingError{Tag: "collection", In: "app state send response"} + } respCollectionAttr := respCollection.AttrGetter() if respCollectionAttr.OptionalString("type") == "error" { - // TODO parse error properly - return fmt.Errorf("%w: %s", ErrAppStateUpdate, respCollection.XMLString()) + errorTag, ok := respCollection.GetOptionalChildByTag("error") + + mainErr := fmt.Errorf("%w: %s", ErrAppStateUpdate, respCollection.XMLString()) + if ok { + mainErr = fmt.Errorf("%w (%s): %s", ErrAppStateUpdate, patch.Type, errorTag.XMLString()) + } + if ok && errorTag.AttrGetter().Int("code") == 409 && allowRetry { + zerolog.Ctx(ctx).Warn().Err(mainErr).Msg("Failed to update app state, trying to apply conflicts and retry") + var eventsToDispatch []any + patches, err := appstate.ParsePatchList(ctx, &respCollection, cli.downloadExternalAppStateBlob) + if err != nil { + return fmt.Errorf("%w (also, parsing patches in the response failed: %w)", mainErr, err) + } else if state, err = cli.applyAppStatePatches(ctx, patch.Type, state, patches, false, &eventsToDispatch); err != nil { + return fmt.Errorf("%w (also, applying patches in the response failed: %w)", mainErr, err) + } else { + zerolog.Ctx(ctx).Debug().Msg("Retrying app state send after applying conflicting patches") + go func() { + for _, evt := range eventsToDispatch { + cli.dispatchEvent(evt) + } + }() + return cli.sendAppState(ctx, patch, false) + } + } + return mainErr } + eventsToDispatch, err := cli.fetchAppState(ctx, patch.Type, false, false) + if err != nil { + return fmt.Errorf("failed to fetch app state after sending update: %w", err) + } + go func() { + for _, evt := range eventsToDispatch { + cli.dispatchEvent(evt) + } + }() + + return nil +} + +func (cli *Client) MarkNotDirty(ctx context.Context, cleanType string, ts time.Time) error { + _, err := cli.sendIQ(ctx, infoQuery{ + Namespace: "urn:xmpp:whatsapp:dirty", + Type: iqSet, + To: types.ServerJID, + Content: []waBinary.Node{{ + Tag: "clean", + Attrs: waBinary.Attrs{ + "type": cleanType, + "timestamp": ts.Unix(), + }, + }}, + }) + return err +} + +// BuildFatalAppStateExceptionNotification builds a message to request the user's primary device +// to reset specific app state collections. This will cause all linked devices to be logged out. +// +// The built message can be sent using Client.SendPeerMessage. +// There is no response, as the client will get logged out. +func BuildFatalAppStateExceptionNotification(collections ...appstate.WAPatchName) *waE2E.Message { + return &waE2E.Message{ + ProtocolMessage: &waE2E.ProtocolMessage{ + Type: waE2E.ProtocolMessage_APP_STATE_FATAL_EXCEPTION_NOTIFICATION.Enum(), + AppStateFatalExceptionNotification: &waE2E.AppStateFatalExceptionNotification{ + CollectionNames: exslices.CastToString[string](collections), + Timestamp: ptr.Ptr(time.Now().UnixMilli()), + }, + }, + } +} - return cli.FetchAppState(patch.Type, false, false) +// BuildAppStateRecoveryRequest builds a message to request the user's primary device to send +// an unencrypted copy of the given app state collection. +// +// The built message can be sent using Client.SendPeerMessage. +// The response will come as a ProtocolMessage with type `PEER_DATA_OPERATION_RESPONSE_MESSAGE`. +func BuildAppStateRecoveryRequest(collection appstate.WAPatchName) *waE2E.Message { + return &waE2E.Message{ + ProtocolMessage: &waE2E.ProtocolMessage{ + Type: waE2E.ProtocolMessage_PEER_DATA_OPERATION_REQUEST_MESSAGE.Enum(), + PeerDataOperationRequestMessage: &waE2E.PeerDataOperationRequestMessage{ + PeerDataOperationRequestType: waE2E.PeerDataOperationRequestType_COMPANION_SYNCD_SNAPSHOT_FATAL_RECOVERY.Enum(), + SyncdCollectionFatalRecoveryRequest: &waE2E.PeerDataOperationRequestMessage_SyncDCollectionFatalRecoveryRequest{ + CollectionName: (*string)(&collection), + Timestamp: ptr.Ptr(time.Now().Unix()), + }, + }, + }, + } } diff --git a/vendor/go.mau.fi/whatsmeow/appstate/decode.go b/vendor/go.mau.fi/whatsmeow/appstate/decode.go index 980c20de36..567f366211 100644 --- a/vendor/go.mau.fi/whatsmeow/appstate/decode.go +++ b/vendor/go.mau.fi/whatsmeow/appstate/decode.go @@ -8,14 +8,17 @@ package appstate import ( "bytes" + "context" "crypto/sha256" "encoding/json" "fmt" + "slices" "google.golang.org/protobuf/proto" waBinary "go.mau.fi/whatsmeow/binary" - waProto "go.mau.fi/whatsmeow/binary/proto" + "go.mau.fi/whatsmeow/proto/waServerSync" + "go.mau.fi/whatsmeow/proto/waSyncAction" "go.mau.fi/whatsmeow/store" "go.mau.fi/whatsmeow/util/cbcutil" ) @@ -24,30 +27,30 @@ import ( type PatchList struct { Name WAPatchName HasMorePatches bool - Patches []*waProto.SyncdPatch - Snapshot *waProto.SyncdSnapshot + Patches []*waServerSync.SyncdPatch + Snapshot *waServerSync.SyncdSnapshot } // DownloadExternalFunc is a function that can download a blob of external app state patches. -type DownloadExternalFunc func(*waProto.ExternalBlobReference) ([]byte, error) +type DownloadExternalFunc func(context.Context, *waServerSync.ExternalBlobReference) ([]byte, error) -func parseSnapshotInternal(collection *waBinary.Node, downloadExternal DownloadExternalFunc) (*waProto.SyncdSnapshot, error) { +func parseSnapshotInternal(ctx context.Context, collection *waBinary.Node, downloadExternal DownloadExternalFunc) (*waServerSync.SyncdSnapshot, error) { snapshotNode := collection.GetChildByTag("snapshot") rawSnapshot, ok := snapshotNode.Content.([]byte) if snapshotNode.Tag != "snapshot" || !ok { return nil, nil } - var snapshot waProto.ExternalBlobReference + var snapshot waServerSync.ExternalBlobReference err := proto.Unmarshal(rawSnapshot, &snapshot) if err != nil { return nil, fmt.Errorf("failed to unmarshal snapshot: %w", err) } var rawData []byte - rawData, err = downloadExternal(&snapshot) + rawData, err = downloadExternal(ctx, &snapshot) if err != nil { return nil, fmt.Errorf("failed to download external mutations: %w", err) } - var downloaded waProto.SyncdSnapshot + var downloaded waServerSync.SyncdSnapshot err = proto.Unmarshal(rawData, &downloaded) if err != nil { return nil, fmt.Errorf("failed to unmarshal mutation list: %w", err) @@ -55,27 +58,27 @@ func parseSnapshotInternal(collection *waBinary.Node, downloadExternal DownloadE return &downloaded, nil } -func parsePatchListInternal(collection *waBinary.Node, downloadExternal DownloadExternalFunc) ([]*waProto.SyncdPatch, error) { +func parsePatchListInternal(ctx context.Context, collection *waBinary.Node, downloadExternal DownloadExternalFunc) ([]*waServerSync.SyncdPatch, error) { patchesNode := collection.GetChildByTag("patches") patchNodes := patchesNode.GetChildren() - patches := make([]*waProto.SyncdPatch, 0, len(patchNodes)) + patches := make([]*waServerSync.SyncdPatch, 0, len(patchNodes)) for i, patchNode := range patchNodes { rawPatch, ok := patchNode.Content.([]byte) if patchNode.Tag != "patch" || !ok { continue } - var patch waProto.SyncdPatch + var patch waServerSync.SyncdPatch err := proto.Unmarshal(rawPatch, &patch) if err != nil { return nil, fmt.Errorf("failed to unmarshal patch #%d: %w", i+1, err) } if patch.GetExternalMutations() != nil && downloadExternal != nil { var rawData []byte - rawData, err = downloadExternal(patch.GetExternalMutations()) + rawData, err = downloadExternal(ctx, patch.GetExternalMutations()) if err != nil { return nil, fmt.Errorf("failed to download external mutations: %w", err) } - var downloaded waProto.SyncdMutations + var downloaded waServerSync.SyncdMutations err = proto.Unmarshal(rawData, &downloaded) if err != nil { return nil, fmt.Errorf("failed to unmarshal mutation list: %w", err) @@ -90,14 +93,13 @@ func parsePatchListInternal(collection *waBinary.Node, downloadExternal Download } // ParsePatchList will decode an XML node containing app state patches, including downloading any external blobs. -func ParsePatchList(node *waBinary.Node, downloadExternal DownloadExternalFunc) (*PatchList, error) { - collection := node.GetChildByTag("sync", "collection") +func ParsePatchList(ctx context.Context, collection *waBinary.Node, downloadExternal DownloadExternalFunc) (*PatchList, error) { ag := collection.AttrGetter() - snapshot, err := parseSnapshotInternal(&collection, downloadExternal) + snapshot, err := parseSnapshotInternal(ctx, collection, downloadExternal) if err != nil { return nil, err } - patches, err := parsePatchListInternal(&collection, downloadExternal) + patches, err := parsePatchListInternal(ctx, collection, downloadExternal) if err != nil { return nil, err } @@ -116,79 +118,131 @@ type patchOutput struct { Mutations []Mutation } -func (proc *Processor) decodeMutations(mutations []*waProto.SyncdMutation, out *patchOutput, validateMACs bool) error { - for i, mutation := range mutations { - keyID := mutation.GetRecord().GetKeyId().GetId() - keys, err := proc.getAppStateKey(keyID) - if err != nil { - return fmt.Errorf("failed to get key %X to decode mutation: %w", keyID, err) - } - content := mutation.GetRecord().GetValue().GetBlob() - content, valueMAC := content[:len(content)-32], content[len(content)-32:] - if validateMACs { - expectedValueMAC := generateContentMAC(mutation.GetOperation(), content, keyID, keys.ValueMAC) - if !bytes.Equal(expectedValueMAC, valueMAC) { - return fmt.Errorf("failed to verify mutation #%d: %w", i+1, ErrMismatchingContentMAC) - } +func (out *patchOutput) RemoveMAC(indexMAC []byte) { + out.RemovedMACs = append(out.RemovedMACs, indexMAC) + // If the mutation was previously added in this patch, remove it from AddedMACs + out.AddedMACs = slices.DeleteFunc(out.AddedMACs, func(mac store.AppStateMutationMAC) bool { + return bytes.Equal(mac.IndexMAC, indexMAC) + }) +} + +func (out *patchOutput) AddMAC(indexMAC, valueMAC []byte) { + out.AddedMACs = append(out.AddedMACs, store.AppStateMutationMAC{ + IndexMAC: indexMAC, + ValueMAC: valueMAC, + }) +} + +func (proc *Processor) decodeMutation( + ctx context.Context, + mutation *waServerSync.SyncdMutation, + i int, + validateMACs bool, +) (indexMAC, valueMAC []byte, index []string, syncAction *waSyncAction.SyncActionData, keys ExpandedAppStateKeys, err error) { + keyID := mutation.GetRecord().GetKeyID().GetID() + keys, err = proc.getAppStateKey(ctx, keyID) + if err != nil { + err = fmt.Errorf("failed to get key %X to decode mutation: %w", keyID, err) + return + } + content := bytes.Clone(mutation.GetRecord().GetValue().GetBlob()) + content, valueMAC = content[:len(content)-32], content[len(content)-32:] + if validateMACs { + expectedValueMAC := generateContentMAC(mutation.GetOperation(), content, keyID, keys.ValueMAC) + if !bytes.Equal(expectedValueMAC, valueMAC) { + err = fmt.Errorf("failed to verify mutation #%d: %w", i+1, ErrMismatchingContentMAC) + return } - iv, content := content[:16], content[16:] - plaintext, err := cbcutil.Decrypt(keys.ValueEncryption, iv, content) - if err != nil { - return fmt.Errorf("failed to decrypt mutation #%d: %w", i+1, err) + } + iv, content := content[:16], content[16:] + plaintext, err := cbcutil.Decrypt(keys.ValueEncryption, iv, content) + if err != nil { + err = fmt.Errorf("failed to decrypt mutation #%d: %w", i+1, err) + return + } + syncAction = &waSyncAction.SyncActionData{} + err = proto.Unmarshal(plaintext, syncAction) + if err != nil { + err = fmt.Errorf("failed to unmarshal mutation #%d: %w", i+1, err) + return + } + indexMAC = mutation.GetRecord().GetIndex().GetBlob() + if validateMACs { + expectedIndexMAC := concatAndHMAC(sha256.New, keys.Index, syncAction.Index) + if !bytes.Equal(expectedIndexMAC, indexMAC) { + err = fmt.Errorf("failed to verify mutation #%d: %w", i+1, ErrMismatchingIndexMAC) + return } - var syncAction waProto.SyncActionData - err = proto.Unmarshal(plaintext, &syncAction) + } + err = json.Unmarshal(syncAction.GetIndex(), &index) + if err != nil { + err = fmt.Errorf("failed to unmarshal index of mutation #%d: %w", i+1, err) + } + return +} + +func indexMACToArray(indexMAC []byte) [32]byte { + if len(indexMAC) != 32 { + return [32]byte{} + } + return *(*[32]byte)(indexMAC) +} + +func (proc *Processor) decodeMutations( + ctx context.Context, + mutations []*waServerSync.SyncdMutation, + out *patchOutput, + validateMACs bool, + patchVersion uint64, + fakeIndexesToRemove map[[32]byte][]byte, +) error { + for i, mutation := range mutations { + indexMAC, valueMAC, index, syncAction, _, err := proc.decodeMutation(ctx, mutation, i, validateMACs) if err != nil { - return fmt.Errorf("failed to unmarshal mutation #%d: %w", i+1, err) + return err } - indexMAC := mutation.GetRecord().GetIndex().GetBlob() - if validateMACs { - expectedIndexMAC := concatAndHMAC(sha256.New, keys.Index, syncAction.Index) - if !bytes.Equal(expectedIndexMAC, indexMAC) { - return fmt.Errorf("failed to verify mutation #%d: %w", i+1, ErrMismatchingIndexMAC) + if mutation.GetOperation() == waServerSync.SyncdMutation_REMOVE { + out.RemoveMAC(indexMAC) + altIndexMAC, ok := fakeIndexesToRemove[indexMACToArray(indexMAC)] + if ok && len(indexMAC) == 32 { + out.RemoveMAC(altIndexMAC) } - } - var index []string - err = json.Unmarshal(syncAction.GetIndex(), &index) - if err != nil { - return fmt.Errorf("failed to unmarshal index of mutation #%d: %w", i+1, err) - } - if mutation.GetOperation() == waProto.SyncdMutation_REMOVE { - out.RemovedMACs = append(out.RemovedMACs, indexMAC) - } else if mutation.GetOperation() == waProto.SyncdMutation_SET { - out.AddedMACs = append(out.AddedMACs, store.AppStateMutationMAC{ - IndexMAC: indexMAC, - ValueMAC: valueMAC, - }) + } else if mutation.GetOperation() == waServerSync.SyncdMutation_SET { + out.AddMAC(indexMAC, valueMAC) } out.Mutations = append(out.Mutations, Mutation{ + KeyID: mutation.GetRecord().GetKeyID().GetID(), Operation: mutation.GetOperation(), Action: syncAction.GetValue(), + Version: syncAction.GetVersion(), Index: index, IndexMAC: indexMAC, ValueMAC: valueMAC, + + PatchVersion: patchVersion, }) } return nil } -func (proc *Processor) storeMACs(name WAPatchName, currentState HashState, out *patchOutput) { - err := proc.Store.AppState.PutAppStateVersion(string(name), currentState.Version, currentState.Hash) +func (proc *Processor) storeMACs(ctx context.Context, name WAPatchName, currentState HashState, out *patchOutput) error { + err := proc.Store.AppState.PutAppStateVersion(ctx, string(name), currentState.Version, currentState.Hash) if err != nil { - proc.Log.Errorf("Failed to update app state version in the database: %v", err) + return fmt.Errorf("failed to update app state version in the database: %w", err) } - err = proc.Store.AppState.DeleteAppStateMutationMACs(string(name), out.RemovedMACs) + err = proc.Store.AppState.DeleteAppStateMutationMACs(ctx, string(name), out.RemovedMACs) if err != nil { - proc.Log.Errorf("Failed to remove deleted mutation MACs from the database: %v", err) + return fmt.Errorf("failed to remove deleted mutation MACs from the database: %w", err) } - err = proc.Store.AppState.PutAppStateMutationMACs(string(name), currentState.Version, out.AddedMACs) + err = proc.Store.AppState.PutAppStateMutationMACs(ctx, string(name), currentState.Version, out.AddedMACs) if err != nil { - proc.Log.Errorf("Failed to insert added mutation MACs to the database: %v", err) + return fmt.Errorf("failed to insert added mutation MACs to the database: %w", err) } + return nil } -func (proc *Processor) validateSnapshotMAC(name WAPatchName, currentState HashState, keyID, expectedSnapshotMAC []byte) (keys ExpandedAppStateKeys, err error) { - keys, err = proc.getAppStateKey(keyID) +func (proc *Processor) validateSnapshotMAC(ctx context.Context, name WAPatchName, currentState HashState, keyID, expectedSnapshotMAC []byte) (keys ExpandedAppStateKeys, err error) { + keys, err = proc.getAppStateKey(ctx, keyID) if err != nil { err = fmt.Errorf("failed to get key %X to verify patch v%d MACs: %w", keyID, currentState.Version, err) return @@ -200,51 +254,112 @@ func (proc *Processor) validateSnapshotMAC(name WAPatchName, currentState HashSt return } -func (proc *Processor) decodeSnapshot(name WAPatchName, ss *waProto.SyncdSnapshot, initialState HashState, validateMACs bool, newMutationsInput []Mutation) (newMutations []Mutation, currentState HashState, err error) { +func (proc *Processor) decodeSnapshot( + ctx context.Context, + name WAPatchName, + ss *waServerSync.SyncdSnapshot, + initialState HashState, + validateMACs bool, + newMutationsInput []Mutation, +) (newMutations []Mutation, currentState HashState, err error) { currentState = initialState currentState.Version = ss.GetVersion().GetVersion() - encryptedMutations := make([]*waProto.SyncdMutation, len(ss.GetRecords())) + encryptedMutations := make([]*waServerSync.SyncdMutation, len(ss.GetRecords())) for i, record := range ss.GetRecords() { - encryptedMutations[i] = &waProto.SyncdMutation{ - Operation: waProto.SyncdMutation_SET.Enum(), + encryptedMutations[i] = &waServerSync.SyncdMutation{ + Operation: waServerSync.SyncdMutation_SET.Enum(), Record: record, } } + var fakeIndexesToRemove map[[32]byte][]byte var warn []error warn, err = currentState.updateHash(encryptedMutations, func(indexMAC []byte, maxIndex int) ([]byte, error) { return nil, nil }) - if len(warn) > 0 { - proc.Log.Warnf("Warnings while updating hash for %s: %+v", name, warn) - } if err != nil { err = fmt.Errorf("failed to update state hash: %w", err) return } if validateMACs { - _, err = proc.validateSnapshotMAC(name, currentState, ss.GetKeyId().GetId(), ss.GetMac()) + _, err = proc.validateSnapshotMAC(ctx, name, currentState, ss.GetKeyID().GetID(), ss.GetMac()) if err != nil { + if len(warn) > 0 { + proc.Log.Warnf("Warnings while updating hash for %s: %+v", name, warn) + } + err = fmt.Errorf("failed to verify snapshot: %w", err) return } } var out patchOutput out.Mutations = newMutationsInput - err = proc.decodeMutations(encryptedMutations, &out, validateMACs) + err = proc.decodeMutations(ctx, encryptedMutations, &out, validateMACs, currentState.Version, fakeIndexesToRemove) if err != nil { err = fmt.Errorf("failed to decode snapshot of v%d: %w", currentState.Version, err) return } - proc.storeMACs(name, currentState, &out) + err = proc.storeMACs(ctx, name, currentState, &out) + if err != nil { + return + } newMutations = out.Mutations return } +func (proc *Processor) validatePatch( + ctx context.Context, + patchName WAPatchName, + patch *waServerSync.SyncdPatch, + currentState HashState, + validateMACs bool, +) (newState HashState, warn []error, err error) { + version := patch.GetVersion().GetVersion() + newState = currentState + newState.Version = version + warn, err = newState.updateHash(patch.GetMutations(), func(indexMAC []byte, maxIndex int) ([]byte, error) { + for i := maxIndex - 1; i >= 0; i-- { + if bytes.Equal(patch.Mutations[i].GetRecord().GetIndex().GetBlob(), indexMAC) { + if patch.Mutations[i].GetOperation() == waServerSync.SyncdMutation_SET { + value := patch.Mutations[i].GetRecord().GetValue().GetBlob() + return value[len(value)-32:], nil + } + // Found a REMOVE operation, no previous value + return nil, nil + } + } + // Previous value not found in current patch, look in the database + return proc.Store.AppState.GetAppStateMutationMAC(ctx, string(patchName), indexMAC) + }) + if err != nil { + err = fmt.Errorf("failed to update state hash: %w", err) + return + } + + if validateMACs { + var keys ExpandedAppStateKeys + keys, err = proc.validateSnapshotMAC(ctx, patchName, newState, patch.GetKeyID().GetID(), patch.GetSnapshotMAC()) + if err != nil { + return + } + patchMAC := generatePatchMAC(patch, patchName, keys.PatchMAC, patch.GetVersion().GetVersion()) + if !bytes.Equal(patchMAC, patch.GetPatchMAC()) { + err = fmt.Errorf("failed to verify patch v%d: %w", version, ErrMismatchingPatchMAC) + return + } + } + return +} + // DecodePatches will decode all the patches in a PatchList into a list of app state mutations. -func (proc *Processor) DecodePatches(list *PatchList, initialState HashState, validateMACs bool) (newMutations []Mutation, currentState HashState, err error) { +func (proc *Processor) DecodePatches( + ctx context.Context, + list *PatchList, + initialState HashState, + validateMACs bool, +) (newMutations []Mutation, currentState HashState, err error) { currentState = initialState var expectedLength int if list.Snapshot != nil { @@ -256,55 +371,36 @@ func (proc *Processor) DecodePatches(list *PatchList, initialState HashState, va newMutations = make([]Mutation, 0, expectedLength) if list.Snapshot != nil { - newMutations, currentState, err = proc.decodeSnapshot(list.Name, list.Snapshot, currentState, validateMACs, newMutations) + newMutations, currentState, err = proc.decodeSnapshot(ctx, list.Name, list.Snapshot, currentState, validateMACs, newMutations) if err != nil { return } } for _, patch := range list.Patches { - version := patch.GetVersion().GetVersion() - currentState.Version = version + var out patchOutput var warn []error - warn, err = currentState.updateHash(patch.GetMutations(), func(indexMAC []byte, maxIndex int) ([]byte, error) { - for i := maxIndex - 1; i >= 0; i-- { - if bytes.Equal(patch.Mutations[i].GetRecord().GetIndex().GetBlob(), indexMAC) { - value := patch.Mutations[i].GetRecord().GetValue().GetBlob() - return value[len(value)-32:], nil - } - } - // Previous value not found in current patch, look in the database - return proc.Store.AppState.GetAppStateMutationMAC(string(list.Name), indexMAC) - }) - if len(warn) > 0 { - proc.Log.Warnf("Warnings while updating hash for %s: %+v", list.Name, warn) - } + var newState HashState + var fakeIndexesToRemove map[[32]byte][]byte + newState, warn, err = proc.validatePatch(ctx, list.Name, patch, currentState, validateMACs) if err != nil { - err = fmt.Errorf("failed to update state hash: %w", err) - return - } - - if validateMACs { - var keys ExpandedAppStateKeys - keys, err = proc.validateSnapshotMAC(list.Name, currentState, patch.GetKeyId().GetId(), patch.GetSnapshotMac()) - if err != nil { - return - } - patchMAC := generatePatchMAC(patch, list.Name, keys.PatchMAC, patch.GetVersion().GetVersion()) - if !bytes.Equal(patchMAC, patch.GetPatchMac()) { - err = fmt.Errorf("failed to verify patch v%d: %w", version, ErrMismatchingPatchMAC) - return + if len(warn) > 0 { + proc.Log.Warnf("Warnings while updating hash for %s: %+v", list.Name, warn) } + return } - var out patchOutput out.Mutations = newMutations - err = proc.decodeMutations(patch.GetMutations(), &out, validateMACs) + err = proc.decodeMutations(ctx, patch.GetMutations(), &out, validateMACs, newState.Version, fakeIndexesToRemove) + if err != nil { + return + } + err = proc.storeMACs(ctx, list.Name, newState, &out) if err != nil { return } - proc.storeMACs(list.Name, currentState, &out) newMutations = out.Mutations + currentState = newState } return } diff --git a/vendor/go.mau.fi/whatsmeow/appstate/encode.go b/vendor/go.mau.fi/whatsmeow/appstate/encode.go index 859b5f83a4..c101a55c57 100644 --- a/vendor/go.mau.fi/whatsmeow/appstate/encode.go +++ b/vendor/go.mau.fi/whatsmeow/appstate/encode.go @@ -1,6 +1,7 @@ package appstate import ( + "context" "crypto/sha256" "encoding/json" "fmt" @@ -8,7 +9,9 @@ import ( "google.golang.org/protobuf/proto" - waProto "go.mau.fi/whatsmeow/binary/proto" + "go.mau.fi/whatsmeow/proto/waCommon" + "go.mau.fi/whatsmeow/proto/waServerSync" + "go.mau.fi/whatsmeow/proto/waSyncAction" "go.mau.fi/whatsmeow/types" "go.mau.fi/whatsmeow/util/cbcutil" ) @@ -20,7 +23,7 @@ type MutationInfo struct { // Version is a static number that depends on the thing being mutated. Version int32 // Value contains the data for the mutation. - Value *waProto.SyncActionValue + Value *waSyncAction.SyncActionValue } // PatchInfo contains information about a patch to the app state. @@ -42,14 +45,21 @@ func BuildMute(target types.JID, mute bool, muteDuration time.Duration) PatchInf if muteDuration > 0 { muteEndTimestamp = proto.Int64(time.Now().Add(muteDuration).UnixMilli()) } + return BuildMuteAbs(target, mute, muteEndTimestamp) +} +// BuildMuteAbs builds an app state patch for muting or unmuting a chat with an absolute timestamp. +func BuildMuteAbs(target types.JID, mute bool, muteEndTimestamp *int64) PatchInfo { + if muteEndTimestamp == nil && mute { + muteEndTimestamp = proto.Int64(-1) + } return PatchInfo{ Type: WAPatchRegularHigh, Mutations: []MutationInfo{{ Index: []string{IndexMute, target.String()}, Version: 2, - Value: &waProto.SyncActionValue{ - MuteAction: &waProto.MuteAction{ + Value: &waSyncAction.SyncActionValue{ + MuteAction: &waSyncAction.MuteAction{ Muted: proto.Bool(mute), MuteEndTimestamp: muteEndTimestamp, }, @@ -62,8 +72,8 @@ func newPinMutationInfo(target types.JID, pin bool) MutationInfo { return MutationInfo{ Index: []string{IndexPin, target.String()}, Version: 5, - Value: &waProto.SyncActionValue{ - PinAction: &waProto.PinAction{ + Value: &waSyncAction.SyncActionValue{ + PinAction: &waSyncAction.PinAction{ Pinned: &pin, }, }, @@ -85,31 +95,19 @@ func BuildPin(target types.JID, pin bool) PatchInfo { // The last message timestamp and last message key are optional and can be set to zero values (`time.Time{}` and `nil`). // // Archiving a chat will also unpin it automatically. -func BuildArchive(target types.JID, archive bool, lastMessageTimestamp time.Time, lastMessageKey *waProto.MessageKey) PatchInfo { - if lastMessageTimestamp.IsZero() { - lastMessageTimestamp = time.Now() - } +func BuildArchive(target types.JID, archive bool, lastMessageTimestamp time.Time, lastMessageKey *waCommon.MessageKey) PatchInfo { archiveMutationInfo := MutationInfo{ Index: []string{IndexArchive, target.String()}, Version: 3, - Value: &waProto.SyncActionValue{ - ArchiveChatAction: &waProto.ArchiveChatAction{ - Archived: &archive, - MessageRange: &waProto.SyncActionMessageRange{ - LastMessageTimestamp: proto.Int64(lastMessageTimestamp.Unix()), - // TODO set LastSystemMessageTimestamp? - }, + Value: &waSyncAction.SyncActionValue{ + ArchiveChatAction: &waSyncAction.ArchiveChatAction{ + Archived: &archive, + MessageRange: newMessageRange(lastMessageTimestamp, lastMessageKey), + // TODO set LastSystemMessageTimestamp? }, }, } - if lastMessageKey != nil { - archiveMutationInfo.Value.ArchiveChatAction.MessageRange.Messages = []*waProto.SyncActionMessage{{ - Key: lastMessageKey, - Timestamp: proto.Int64(lastMessageTimestamp.Unix()), - }} - } - mutations := []MutationInfo{archiveMutationInfo} if archive { mutations = append(mutations, newPinMutationInfo(target, false)) @@ -123,12 +121,31 @@ func BuildArchive(target types.JID, archive bool, lastMessageTimestamp time.Time return result } +// BuildMarkChatAsRead builds an app state patch for marking a chat as read or unread. +func BuildMarkChatAsRead(target types.JID, read bool, lastMessageTimestamp time.Time, lastMessageKey *waCommon.MessageKey) PatchInfo { + action := &waSyncAction.MarkChatAsReadAction{ + Read: proto.Bool(read), + MessageRange: newMessageRange(lastMessageTimestamp, lastMessageKey), + } + + return PatchInfo{ + Type: WAPatchRegularLow, + Mutations: []MutationInfo{{ + Index: []string{IndexMarkChatAsRead, target.String()}, + Version: 3, + Value: &waSyncAction.SyncActionValue{ + MarkChatAsReadAction: action, + }, + }}, + } +} + func newLabelChatMutation(target types.JID, labelID string, labeled bool) MutationInfo { return MutationInfo{ Index: []string{IndexLabelAssociationChat, labelID, target.String()}, Version: 3, - Value: &waProto.SyncActionValue{ - LabelAssociationAction: &waProto.LabelAssociationAction{ + Value: &waSyncAction.SyncActionValue{ + LabelAssociationAction: &waSyncAction.LabelAssociationAction{ Labeled: &labeled, }, }, @@ -149,8 +166,8 @@ func newLabelMessageMutation(target types.JID, labelID, messageID string, labele return MutationInfo{ Index: []string{IndexLabelAssociationMessage, labelID, target.String(), messageID, "0", "0"}, Version: 3, - Value: &waProto.SyncActionValue{ - LabelAssociationAction: &waProto.LabelAssociationAction{ + Value: &waSyncAction.SyncActionValue{ + LabelAssociationAction: &waSyncAction.LabelAssociationAction{ Labeled: &labeled, }, }, @@ -171,8 +188,8 @@ func newLabelEditMutation(labelID string, labelName string, labelColor int32, de return MutationInfo{ Index: []string{IndexLabelEdit, labelID}, Version: 3, - Value: &waProto.SyncActionValue{ - LabelEditAction: &waProto.LabelEditAction{ + Value: &waSyncAction.SyncActionValue{ + LabelEditAction: &waSyncAction.LabelEditAction{ Name: &labelName, Color: &labelColor, Deleted: &deleted, @@ -195,8 +212,8 @@ func newSettingPushNameMutation(pushName string) MutationInfo { return MutationInfo{ Index: []string{IndexSettingPushName}, Version: 1, - Value: &waProto.SyncActionValue{ - PushNameSetting: &waProto.PushNameSetting{ + Value: &waSyncAction.SyncActionValue{ + PushNameSetting: &waSyncAction.PushNameSetting{ Name: &pushName, }, }, @@ -213,8 +230,38 @@ func BuildSettingPushName(pushName string) PatchInfo { } } -func (proc *Processor) EncodePatch(keyID []byte, state HashState, patchInfo PatchInfo) ([]byte, error) { - keys, err := proc.getAppStateKey(keyID) +func newStarMutation(targetJID, senderJID string, messageID types.MessageID, fromMe string, starred bool) MutationInfo { + return MutationInfo{ + Index: []string{IndexStar, targetJID, messageID, fromMe, senderJID}, + Version: 2, + Value: &waSyncAction.SyncActionValue{ + StarAction: &waSyncAction.StarAction{ + Starred: &starred, + }, + }, + } +} + +// BuildStar builds an app state patch for starring or unstarring a message. +func BuildStar(target, sender types.JID, messageID types.MessageID, fromMe, starred bool) PatchInfo { + isFromMe := "0" + if fromMe { + isFromMe = "1" + } + targetJID, senderJID := target.String(), sender.String() + if target.User == sender.User { + senderJID = "0" + } + return PatchInfo{ + Type: WAPatchRegularHigh, + Mutations: []MutationInfo{ + newStarMutation(targetJID, senderJID, messageID, isFromMe, starred), + }, + } +} + +func (proc *Processor) EncodePatch(ctx context.Context, keyID []byte, state HashState, patchInfo PatchInfo) ([]byte, error) { + keys, err := proc.getAppStateKey(ctx, keyID) if err != nil { return nil, fmt.Errorf("failed to get app state key details with key ID %x: %w", keyID, err) } @@ -223,7 +270,7 @@ func (proc *Processor) EncodePatch(keyID []byte, state HashState, patchInfo Patc patchInfo.Timestamp = time.Now() } - mutations := make([]*waProto.SyncdMutation, 0, len(patchInfo.Mutations)) + mutations := make([]*waServerSync.SyncdMutation, 0, len(patchInfo.Mutations)) for _, mutationInfo := range patchInfo.Mutations { mutationInfo.Value.Timestamp = proto.Int64(patchInfo.Timestamp.UnixMilli()) @@ -232,7 +279,7 @@ func (proc *Processor) EncodePatch(keyID []byte, state HashState, patchInfo Patc return nil, fmt.Errorf("failed to marshal mutation index: %w", err) } - pbObj := &waProto.SyncActionData{ + pbObj := &waSyncAction.SyncActionData{ Index: indexBytes, Value: mutationInfo.Value, Padding: []byte{}, @@ -249,21 +296,21 @@ func (proc *Processor) EncodePatch(keyID []byte, state HashState, patchInfo Patc return nil, fmt.Errorf("failed to encrypt mutation: %w", err) } - valueMac := generateContentMAC(waProto.SyncdMutation_SET, encryptedContent, keyID, keys.ValueMAC) + valueMac := generateContentMAC(waServerSync.SyncdMutation_SET, encryptedContent, keyID, keys.ValueMAC) indexMac := concatAndHMAC(sha256.New, keys.Index, indexBytes) - mutations = append(mutations, &waProto.SyncdMutation{ - Operation: waProto.SyncdMutation_SET.Enum(), - Record: &waProto.SyncdRecord{ - Index: &waProto.SyncdIndex{Blob: indexMac}, - Value: &waProto.SyncdValue{Blob: append(encryptedContent, valueMac...)}, - KeyID: &waProto.KeyId{ID: keyID}, + mutations = append(mutations, &waServerSync.SyncdMutation{ + Operation: waServerSync.SyncdMutation_SET.Enum(), + Record: &waServerSync.SyncdRecord{ + Index: &waServerSync.SyncdIndex{Blob: indexMac}, + Value: &waServerSync.SyncdValue{Blob: append(encryptedContent, valueMac...)}, + KeyID: &waServerSync.KeyId{ID: keyID}, }, }) } warn, err := state.updateHash(mutations, func(indexMAC []byte, _ int) ([]byte, error) { - return proc.Store.AppState.GetAppStateMutationMAC(string(patchInfo.Type), indexMAC) + return proc.Store.AppState.GetAppStateMutationMAC(ctx, string(patchInfo.Type), indexMAC) }) if len(warn) > 0 { proc.Log.Warnf("Warnings while updating hash for %s (sending new app state): %+v", patchInfo.Type, warn) @@ -274,9 +321,9 @@ func (proc *Processor) EncodePatch(keyID []byte, state HashState, patchInfo Patc state.Version += 1 - syncdPatch := &waProto.SyncdPatch{ + syncdPatch := &waServerSync.SyncdPatch{ SnapshotMAC: state.generateSnapshotMAC(patchInfo.Type, keys.SnapshotMAC), - KeyID: &waProto.KeyId{ID: keyID}, + KeyID: &waServerSync.KeyId{ID: keyID}, Mutations: mutations, } syncdPatch.PatchMAC = generatePatchMAC(syncdPatch, patchInfo.Type, keys.PatchMAC, state.Version) @@ -288,3 +335,41 @@ func (proc *Processor) EncodePatch(keyID []byte, state HashState, patchInfo Patc return result, nil } + +// BuildDeleteChat builds an app state patch for deleting a chat. +func BuildDeleteChat(target types.JID, lastMessageTimestamp time.Time, lastMessageKey *waCommon.MessageKey, deleteMedia bool) PatchInfo { + action := &waSyncAction.DeleteChatAction{ + MessageRange: newMessageRange(lastMessageTimestamp, lastMessageKey), + } + deleteMediaInt := "0" + if deleteMedia { + deleteMediaInt = "1" + } + + return PatchInfo{ + Type: WAPatchRegularHigh, + Mutations: []MutationInfo{{ + Index: []string{IndexDeleteChat, target.String(), deleteMediaInt}, + Version: 6, + Value: &waSyncAction.SyncActionValue{ + DeleteChatAction: action, + }, + }}, + } +} + +func newMessageRange(lastMessageTimestamp time.Time, lastMessageKey *waCommon.MessageKey) *waSyncAction.SyncActionMessageRange { + if lastMessageTimestamp.IsZero() { + lastMessageTimestamp = time.Now() + } + messageRange := &waSyncAction.SyncActionMessageRange{ + LastMessageTimestamp: proto.Int64(lastMessageTimestamp.Unix()), + } + if lastMessageKey != nil { + messageRange.Messages = []*waSyncAction.SyncActionMessage{{ + Key: lastMessageKey, + Timestamp: proto.Int64(lastMessageTimestamp.Unix()), + }} + } + return messageRange +} diff --git a/vendor/go.mau.fi/whatsmeow/appstate/hash.go b/vendor/go.mau.fi/whatsmeow/appstate/hash.go index 2bb0924a88..a3070bff45 100644 --- a/vendor/go.mau.fi/whatsmeow/appstate/hash.go +++ b/vendor/go.mau.fi/whatsmeow/appstate/hash.go @@ -15,15 +15,20 @@ import ( "hash" "go.mau.fi/whatsmeow/appstate/lthash" - waProto "go.mau.fi/whatsmeow/binary/proto" + "go.mau.fi/whatsmeow/proto/waServerSync" + "go.mau.fi/whatsmeow/proto/waSyncAction" ) type Mutation struct { - Operation waProto.SyncdMutation_SyncdOperation - Action *waProto.SyncActionValue + KeyID []byte + Operation waServerSync.SyncdMutation_SyncdOperation + Action *waSyncAction.SyncActionValue + Version int32 Index []string IndexMAC []byte ValueMAC []byte + + PatchVersion uint64 } type HashState struct { @@ -31,12 +36,12 @@ type HashState struct { Hash [128]byte } -func (hs *HashState) updateHash(mutations []*waProto.SyncdMutation, getPrevSetValueMAC func(indexMAC []byte, maxIndex int) ([]byte, error)) ([]error, error) { +func (hs *HashState) updateHash(mutations []*waServerSync.SyncdMutation, getPrevSetValueMAC func(indexMAC []byte, maxIndex int) ([]byte, error)) ([]error, error) { var added, removed [][]byte var warnings []error for i, mutation := range mutations { - if mutation.GetOperation() == waProto.SyncdMutation_SET { + if mutation.GetOperation() == waServerSync.SyncdMutation_SET { value := mutation.GetRecord().GetValue().GetBlob() added = append(added, value[len(value)-32:]) } @@ -46,7 +51,7 @@ func (hs *HashState) updateHash(mutations []*waProto.SyncdMutation, getPrevSetVa return warnings, fmt.Errorf("failed to get value MAC of previous SET operation: %w", err) } else if removal != nil { removed = append(removed, removal) - } else if mutation.GetOperation() == waProto.SyncdMutation_REMOVE { + } else if mutation.GetOperation() == waServerSync.SyncdMutation_REMOVE { // TODO figure out if there are certain cases that are safe to ignore and others that aren't // At least removing contact access from WhatsApp seems to create a REMOVE op for your own JID // that points to a non-existent index and is safe to ignore here. Other keys might not be safe to ignore. @@ -77,9 +82,9 @@ func (hs *HashState) generateSnapshotMAC(name WAPatchName, key []byte) []byte { return concatAndHMAC(sha256.New, key, hs.Hash[:], uint64ToBytes(hs.Version), []byte(name)) } -func generatePatchMAC(patch *waProto.SyncdPatch, name WAPatchName, key []byte, version uint64) []byte { +func generatePatchMAC(patch *waServerSync.SyncdPatch, name WAPatchName, key []byte, version uint64) []byte { dataToHash := make([][]byte, len(patch.GetMutations())+3) - dataToHash[0] = patch.GetSnapshotMac() + dataToHash[0] = patch.GetSnapshotMAC() for i, mutation := range patch.Mutations { val := mutation.GetRecord().GetValue().GetBlob() dataToHash[i+1] = val[len(val)-32:] @@ -89,7 +94,7 @@ func generatePatchMAC(patch *waProto.SyncdPatch, name WAPatchName, key []byte, v return concatAndHMAC(sha256.New, key, dataToHash...) } -func generateContentMAC(operation waProto.SyncdMutation_SyncdOperation, data, keyID, key []byte) []byte { +func generateContentMAC(operation waServerSync.SyncdMutation_SyncdOperation, data, keyID, key []byte) []byte { operationBytes := []byte{byte(operation) + 1} keyDataLength := uint64ToBytes(uint64(len(keyID) + 1)) return concatAndHMAC(sha512.New, key, operationBytes, keyID, data, keyDataLength)[:32] diff --git a/vendor/go.mau.fi/whatsmeow/appstate/keys.go b/vendor/go.mau.fi/whatsmeow/appstate/keys.go index 98d38c2c22..40e69f9115 100644 --- a/vendor/go.mau.fi/whatsmeow/appstate/keys.go +++ b/vendor/go.mau.fi/whatsmeow/appstate/keys.go @@ -8,6 +8,7 @@ package appstate import ( + "context" "encoding/base64" "sync" @@ -35,23 +36,101 @@ const ( // AllPatchNames contains all currently known patch state names. var AllPatchNames = [...]WAPatchName{WAPatchCriticalBlock, WAPatchCriticalUnblockLow, WAPatchRegularHigh, WAPatchRegular, WAPatchRegularLow} -// Constants for the first part of app state indexes. +// Constants for the regular_low app state indexes. const ( - IndexMute = "mute" - IndexPin = "pin_v1" - IndexArchive = "archive" - IndexContact = "contact" - IndexClearChat = "clearChat" - IndexDeleteChat = "deleteChat" - IndexStar = "star" - IndexDeleteMessageForMe = "deleteMessageForMe" - IndexMarkChatAsRead = "markChatAsRead" - IndexSettingPushName = "setting_pushName" - IndexSettingUnarchiveChats = "setting_unarchiveChats" - IndexUserStatusMute = "userStatusMute" - IndexLabelEdit = "label_edit" - IndexLabelAssociationChat = "label_jid" - IndexLabelAssociationMessage = "label_message" + IndexPin = "pin_v1" + IndexRecentEmojiWeightsAction = "recent_emoji_weights_action" + IndexArchive = "archive" + IndexSentinel = "sentinel" + IndexMarkChatAsRead = "markChatAsRead" + IndexSettingUnarchiveChats = "setting_unarchiveChats" + IndexAndroidUnsupportedActions = "android_unsupported_actions" + IndexTimeFormat = "time_format" + IndexNux = "nux" + IndexPrimaryVersion = "primary_version" + IndexFavoriteSticker = "favoriteSticker" + IndexRemoveRecentSticker = "removeRecentSticker" + IndexBotWelcomeRequest = "bot_welcome_request" + IndexPaymentInfo = "payment_info" + IndexCustomPaymentMethods = "custom_payment_methods" + IndexLock = "lock" + IndexSettingChatLock = "setting_chatLock" + IndexDeviceCapabilities = "device_capabilities" + IndexNoteEdit = "note_edit" + IndexMerchantPaymentPartner = "merchant_payment_partner" + IndexPaymentTOS = "payment_tos" + IndexAIThreadRename = "ai_thread_rename" + IndexInteractiveMessageAction = "interactive_message_action" + IndexSettingsSync = "settings_sync" + IndexOutContact = "out_contact" +) + +// Constants for the regular app state indexes. +const ( + IndexQuickReply = "quick_reply" + IndexLabelAssociationMessage = "label_message" + IndexLabelEdit = "label_edit" + IndexLabelAssociationChat = "label_jid" + IndexPrimaryFeature = "primary_feature" + IndexDeviceAgent = "deviceAgent" + IndexSubscription = "subscription" + IndexAgentChatAssignment = "agentChatAssignment" + IndexAgentChatAssignmentOpenedStatus = "agentChatAssignmentOpenedStatus" + IndexPNForLIDChat = "pnForLidChat" + IndexMarketingMessage = "marketingMessage" + IndexMarketingMessageBroadcast = "marketingMessageBroadcast" + IndexExternalWebBeta = "external_web_beta" + IndexSettingRelayAllCalls = "setting_relayAllCalls" + IndexCallLog = "call_log" + IndexDeleteIndividualCallLog = "delete_individual_call_log" + IndexLabelReordering = "label_reordering" + IndexSettingDisableLinkPreviews = "setting_disableLinkPreviews" + IndexUsernameChatStartMode = "usernameChatStartMode" + IndexNotificationActivitySetting = "notificationActivitySetting" + IndexSettingChannelsPersonalisedRecommendationOptout = "setting_channels_personalised_recommendation_optout" + IndexBroadcastJID = "broadcast_jid" + IndexDetectedOutcomesStatusAction = "detected_outcomes_status_action" + IndexBusinessBroadcastList = "business_broadcast_list" + IndexMusicUserID = "music_user_id" + IndexAvatarUpdatedAction = "avatar_updated_action" + IndexGalaxyFlowAction = "galaxy_flow_action" + IndexNewsletterSavedInterests = "newsletter_saved_interests" + IndexShareOwnPN = "shareOwnPn" + IndexBroadcast = "broadcast" +) + +// Constants for the regular_high app state indexes. +const ( + IndexStar = "star" + IndexMute = "mute" + IndexDeleteMessageForMe = "deleteMessageForMe" + IndexClearChat = "clearChat" + IndexDeleteChat = "deleteChat" + IndexUserStatusMute = "userStatusMute" + IndexUGCBot = "ugc_bot" + IndexStatusPrivacy = "status_privacy" + IndexFavorites = "favorites" + IndexWaffleAccountLinkState = "waffle_account_link_state" + IndexCTWAPerCustomerDataSharing = "ctwaPerCustomerDataSharing" + IndexMaibaAIFeaturesControl = "maiba_ai_features_control" + IndexStatusPostOptInNotificationPreferencesAction = "status_post_opt_in_notification_preferences_action" + IndexPrivateProcessingSetting = "private_processing_setting" + IndexAIThreadDelete = "ai_thread_delete" + IndexNCTSaltSync = "nct_salt_sync" +) + +// Constants for the critical_unblock_low app state indexes. +const ( + IndexContact = "contact" + IndexLIDContact = "lid_contact" +) + +// Constants for the critical_block app state indexes. +const ( + IndexSettingSecurityNotification = "setting_securityNotification" + IndexSettingPushName = "setting_pushName" + IndexSettingLocale = "setting_locale" + IndexGeneratedWUI = "generated_wui" ) type Processor struct { @@ -82,7 +161,7 @@ func expandAppStateKeys(keyData []byte) (keys ExpandedAppStateKeys) { return ExpandedAppStateKeys{appStateKeyExpanded[0:32], appStateKeyExpanded[32:64], appStateKeyExpanded[64:96], appStateKeyExpanded[96:128], appStateKeyExpanded[128:160]} } -func (proc *Processor) getAppStateKey(keyID []byte) (keys ExpandedAppStateKeys, err error) { +func (proc *Processor) getAppStateKey(ctx context.Context, keyID []byte) (keys ExpandedAppStateKeys, err error) { keyCacheID := base64.RawStdEncoding.EncodeToString(keyID) var ok bool @@ -92,7 +171,7 @@ func (proc *Processor) getAppStateKey(keyID []byte) (keys ExpandedAppStateKeys, keys, ok = proc.keyCache[keyCacheID] if !ok { var keyData *store.AppStateSyncKey - keyData, err = proc.Store.AppStateKeys.GetAppStateSyncKey(keyID) + keyData, err = proc.Store.AppStateKeys.GetAppStateSyncKey(ctx, keyID) if keyData != nil { keys = expandAppStateKeys(keyData.Data) proc.keyCache[keyCacheID] = keys @@ -103,7 +182,7 @@ func (proc *Processor) getAppStateKey(keyID []byte) (keys ExpandedAppStateKeys, return } -func (proc *Processor) GetMissingKeyIDs(pl *PatchList) [][]byte { +func (proc *Processor) GetMissingKeyIDs(ctx context.Context, pl *PatchList) [][]byte { cache := make(map[string]bool) var missingKeys [][]byte checkMissing := func(keyID []byte) { @@ -113,7 +192,7 @@ func (proc *Processor) GetMissingKeyIDs(pl *PatchList) [][]byte { stringKeyID := base64.RawStdEncoding.EncodeToString(keyID) _, alreadyAdded := cache[stringKeyID] if !alreadyAdded { - keyData, err := proc.Store.AppStateKeys.GetAppStateSyncKey(keyID) + keyData, err := proc.Store.AppStateKeys.GetAppStateSyncKey(ctx, keyID) if err != nil { proc.Log.Warnf("Error fetching key %X while checking if it's missing: %v", keyID, err) } @@ -125,13 +204,13 @@ func (proc *Processor) GetMissingKeyIDs(pl *PatchList) [][]byte { } } if pl.Snapshot != nil { - checkMissing(pl.Snapshot.GetKeyId().GetId()) + checkMissing(pl.Snapshot.GetKeyID().GetID()) for _, record := range pl.Snapshot.GetRecords() { - checkMissing(record.GetKeyId().GetId()) + checkMissing(record.GetKeyID().GetID()) } } for _, patch := range pl.Patches { - checkMissing(patch.GetKeyId().GetId()) + checkMissing(patch.GetKeyID().GetID()) } return missingKeys } diff --git a/vendor/go.mau.fi/whatsmeow/appstate/recovery.go b/vendor/go.mau.fi/whatsmeow/appstate/recovery.go new file mode 100644 index 0000000000..40946c31c5 --- /dev/null +++ b/vendor/go.mau.fi/whatsmeow/appstate/recovery.go @@ -0,0 +1,97 @@ +// Copyright (c) 2026 Tulir Asokan +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. + +package appstate + +import ( + "bytes" + "compress/gzip" + "context" + "crypto/sha256" + "encoding/json" + "fmt" + "io" + + "google.golang.org/protobuf/proto" + + "go.mau.fi/whatsmeow/proto/waE2E" + "go.mau.fi/whatsmeow/proto/waServerSync" + "go.mau.fi/whatsmeow/proto/waSyncdSnapshotRecovery" + "go.mau.fi/whatsmeow/store" +) + +func ParseRecovery( + resp *waE2E.PeerDataOperationRequestResponseMessage_PeerDataOperationResult_SyncDSnapshotFatalRecoveryResponse, +) (*waSyncdSnapshotRecovery.SyncdSnapshotRecovery, error) { + data := resp.GetCollectionSnapshot() + if resp.GetIsCompressed() { + reader, err := gzip.NewReader(bytes.NewReader(data)) + if err != nil { + return nil, fmt.Errorf("failed to start decompressing: %w", err) + } + data, err = io.ReadAll(reader) + closeErr := reader.Close() + if err != nil { + return nil, fmt.Errorf("failed to decompress: %w", err) + } else if closeErr != nil { + return nil, fmt.Errorf("failed to close decompress reader: %w", closeErr) + } + } + var out waSyncdSnapshotRecovery.SyncdSnapshotRecovery + err := proto.Unmarshal(data, &out) + if err != nil { + return nil, err + } + return &out, nil +} + +func (proc *Processor) ProcessRecovery(ctx context.Context, recovery *waSyncdSnapshotRecovery.SyncdSnapshotRecovery) ([]Mutation, error) { + if len(recovery.GetCollectionLthash()) != 128 { + return nil, fmt.Errorf("invalid lthash length: %d", len(recovery.GetCollectionLthash())) + } + name := recovery.GetCollectionName() + version := recovery.GetVersion().GetVersion() + macs := make([]store.AppStateMutationMAC, len(recovery.MutationRecords)) + mutations := make([]Mutation, len(recovery.MutationRecords)) + for i, mutation := range recovery.MutationRecords { + keys, err := proc.getAppStateKey(ctx, mutation.GetKeyID()) + if err != nil { + return nil, fmt.Errorf("failed to get key %x for mutation #%d: %w", mutation.GetKeyID(), i+1, err) + } + var parsedIndex []string + err = json.Unmarshal(mutation.GetValue().GetIndex(), &parsedIndex) + if err != nil { + return nil, fmt.Errorf("failed to unmarshal index for mutation #%d: %w", i+1, err) + } + macs[i] = store.AppStateMutationMAC{ + IndexMAC: concatAndHMAC(sha256.New, keys.Index, mutation.GetValue().GetIndex()), + ValueMAC: mutation.GetMac(), + } + mutations[i] = Mutation{ + KeyID: mutation.GetKeyID(), + Operation: waServerSync.SyncdMutation_SET, + Action: mutation.GetValue().GetValue(), + Version: mutation.GetValue().GetVersion(), + Index: parsedIndex, + IndexMAC: macs[i].IndexMAC, + ValueMAC: macs[i].ValueMAC, + PatchVersion: version, + } + } + err := proc.Store.AppState.DeleteAppStateVersion(ctx, name) + if err != nil { + return mutations, fmt.Errorf("failed to reset app state version in database: %w", err) + } + err = proc.Store.AppState.PutAppStateVersion(ctx, name, version, *(*[128]byte)(recovery.GetCollectionLthash())) + if err != nil { + return mutations, fmt.Errorf("failed to update app state version in the database: %w", err) + } + err = proc.Store.AppState.PutAppStateMutationMACs(ctx, name, version, macs) + if err != nil { + return mutations, fmt.Errorf("failed to insert added mutation MACs to the database: %w", err) + } + return mutations, nil +} diff --git a/vendor/go.mau.fi/whatsmeow/argo/argo-wire-type-store.argo b/vendor/go.mau.fi/whatsmeow/argo/argo-wire-type-store.argo new file mode 100644 index 0000000000..0d342ff525 --- /dev/null +++ b/vendor/go.mau.fi/whatsmeow/argo/argo-wire-type-store.argo @@ -0,0 +1,63 @@ + ��AccountSyncUsernameNotificationdataxwa2_notify_wa_user__typenameStringstrong_id__IDlid_jidXWA2LidUserJIDusername_infousernamepinstatusXWA2ResponseStatusTypeerrorsextensionsAccountTransferNotificationxwa2_notify_acc_trresultAddMultiAccountLinkxwa2_multi_acc_add_accAddParticipantsToGroupxwa2_add_participants_to_groupjidXWA2UserJIDsuccess_codeXWA2ParticipantSuccessCoderoleXWA2GroupParticipantRoleaddressableerror_codeXWA2AddParticipantErrorCodeadd_request_infoexpiration_time_in_seccodeAddParticipantsToGroupV2xwa2_add_participants_to_group_v2lid_migration_stateaddressing_modeXWA2GroupAddressingModeparticipant_responsesAgeCollectionxwa2_fetch_wa_usersage_collection_infoXWA2AgeCollectionStatusurlappeal_tokenAllowNonAdminGroupCreationxwa2_group_update_propertyidstateXWA2GroupStateBizIntegrityQueryintegrity_signals_infodhashis_bannedis_suspiciousfb_linked_page_number_of_likesIntig_linked_age_number_of_followersjoin_date_msphone_country_codetrust_tierWABizTrustTieris_mv_subscribedmeta_verified_infomv_tierMV4BApplicationTiermv_friction_eligibilityCheckAutoConfConsentxwa2_autoconf_consentContactIntegrityQuerycommon_integrity_signals_infocontacts_integrity_stateXWA2ContactsIntegrityStateContactsBackupMutationxwa2_contacts_backup_option_updatesuccesscontacts_backup_enabled_stateContactsBackupQuerycontacts_backup_enabledCreateEnforcementAppealxwa2_create_enforcement_appealappeal_stateXWA2AppealStateappeal_reasonXWA2AppealReasonenforcement_idappeal_creation_timeenforcement_extra_dataip_violation_report_datareport_fbidreporter_namereporter_emailappeal_form_urlenforcement_target_dataserver_msg_idappeal_extra_dataenforcing_entity_datanameenforcement_violation_categoryXWA2ViolationCategoryenforcement_creation_timeenforcement_sourceXWA2EnforcementSourceCreateGroupxwa2_group_createrate_limitedrate_limit_typeXWA2GroupRateLimitTypebackoffparticipant_limitgroupcreation_timeannouncement_versioncreatorlidpncountry_codesubjectvaluedescriptionparticipantsedgesnodedisplay_nameparticipants_phash_matchtotal_participants_countmissing_participant_identificationpropertiesuserCreateInviteCodexwa2_growth_create_invite_codeexpiration_tsguest_lid_jidguest_jidDeleteImagineMeOnboardingxwa2_bots_delete_self_memu_picXWA2BotsDeleteSelfMemuPicResultFetchReachoutTimelockQueryxwa2_fetch_account_reachout_timelockis_activetime_enforcement_endsenforcement_typeXWA2ReachoutTimelockTypeFetchUserNoticesByIDxwa2_fetch_user_notices_by_idGetAutoConfConfidenceChallengexwa2_autoconf_request_confidence_challengeauth_challengeGetDynamicRegistrationUpsellsxwa2_dynamic_reg_upsellsupsellXWA2DynamicRegUpsellTypetitlebodyGetImagineMeOnboardedmemu_onboardedGetInviteInfoxwa2_growth_get_invite_infosenderinvite_infoinvite_sourcecall_mediaXWA2GrowthInviteCallMediaTypeGetRegistrationUpsellsxwa2_reg_upsellsXWA2RegUpsellGetSuggestedContactsxwa2_growth_suggested_contactssignalsXWA2SuggestedContactsSignalTypecontactsrankGetTextStatusxwa2_text_statustextemojicontentephemeral_duration_seclast_update_timeGetTextStatusListxwa2_text_status_listGetWaMeLinkQueryxwa2_growth_get_wame_linkwa_me_linkGroupUpdateParticipantLabelEnabledMutationGroupsCreateInteropGroupxwa2_interop_group_createXWA2InteropUnionJIDcreator_v2participants_v2gidresponse_codeXWA2InteropParticipantResponseCodeHasBusinessIntentxwa2_business_get_quality_metadatahas_business_intenthas_business_intent_ttlIplsClientHandshakeInitRequestxwa2_ipls_client_initserver_hello_payloadIplsClientHelloPayloadxwa2_ipls_client_helloserver_finish_payloadLidChangeNotificationxwa2_notify_lid_changeoldnewLinkedProfilesRemovexwa2_linked_profiles_removeLinkedProfilesUpdatexwa2_linked_profiles_updateMigrateBlocklistLidxwa2_migrate_blocklist_lidblocklistidentifierpn_jidXWA2PhoneNumberUserJIDunknown_identifierMultiAccountRevokeAccountxwa2_account_revoke_accountNewsletterAcceptAdminInvitexwa2_newsletter_admin_invite_acceptnewsletter_statetypeXWA2NewsletterStateTypeNewsletterAdminDemotexwa2_newsletter_admin_demoteNewsletterAdminInvitexwa2_newsletter_admin_invite_createinvite_expiration_timeNewsletterAdminInviteRevokexwa2_newsletter_admin_invite_revokeNewsletterAdminMetadataQueryxwa2_newsletter_adminthread_metadatageo_statesmessagesserver_idmessage_delivery_updateissueXWA2MessageDeliveryUpdateIssueCodepending_admin_invitesprofile_pic_direct_pathadmin_countcapabilitiesXWA2NewsletterAdminCapabilityNewsletterChangeOwnerxwa2_newsletter_change_ownerNewsletterChangeWamoSubxwa2_newsletter_change_wamo_sub_accountNewsletterCreatexwa2_newsletter_createupdate_timepictureXWA2PictureTypedirect_pathpreviewinvitehandlesubscribers_countfollowers_countverificationXWA2NewsletterVerifyStateverification_sourceXWA2NewsletterVerifySourcesettingsreaction_codesXWA2NewsletterReactionCodesSettingValueblocked_codesenabled_ts_secwamo_subplan_idviewer_metadatamuteXWA2NewsletterMuteSettingXWA2NewsletterRolewamo_sub_statusXWA2NewsletterWamoSubStatusNewsletterCreateReportAppealxwa2_create_channel_report_appeal_v2report_idXWA2ReportStatuschannel_namechannel_jidappealXWA2ReportAppealReasonNewsletterCreateVerifiedxwa2_newsletter_create_verifiedNewsletterDeletexwa2_newsletter_delete_v2NewsletterDirectoryCategoryPreviewxwa2_newsletters_directory_category_previewcategoryXWA2NewsletterDirectoryCategorycategory_titlenewslettersNewsletterDirectoryListxwa2_newsletters_directory_listpage_infoendCursorstartCursorNewsletterDirectorySearchxwa2_newsletters_directory_searchNewsletterDisableWamoSubxwa2_newsletter_disable_wamo_subNewsletterEnableWamoSubxwa2_newsletter_enable_wamo_subNewsletterEnforcementsxwa2_channel_enforcementsprofile_picture_deletionsviolating_messagesbase_enforcement_datasuspensionsgeosuspensionscountry_codesNewsletterInsightsxwa2_newsletter_admin_insightsvaluesFloatcountrytimestampmetrics_statusXWA2NewsletterInsightMetricStatusNewsletterJoinxwa2_newsletter_join_v2NewsletterKotlinExampleNewsletterLeavexwa2_newsletter_leave_v2NewsletterLinkPreviewCheckxwa2_newsletter_message_integrityurl_previewsurl_domainis_previewableNewsletterLogExposurexwa2_newsletter_log_exposurenewsletter_idXWA2NewsletterJIDNewsletterMetadataxwa2_newsletterNewsletterMetadataNotificationNewsletterMetadataUpdatexwa2_newsletter_updateNewsletterMutexwa2_newsletter_mute_v2NewsletterPollVoterListxwa2_newsletters_poll_voter_listvotesvote_hashvoter_listaction_timeNewsletterQueryMessageDeliveryUpdatesNewsletterReactionSendersListxwa2_newsletters_reaction_sender_listreactionsreaction_codesender_listNewsletterRecommendedxwa2_newsletters_recommendedNewsletterSearchxwa2_newsletters_searchNewsletterSimilarxwa2_newsletters_similarNewsletterSubscribedxwa2_newsletter_subscribedNewsletterSubscribersxwa2_newsletter_subscriberssubscriberspageInfohasPreviousPagehasNextPagesubscribe_timeNewsletterUnmutexwa2_newsletter_unmute_v2NewsletterUpdateVerificationxwa2_newsletter_update_verificationNewsletterUserReportsxwa2_channels_reportschannels_reportsNotificationAgeCollectionxwa2_notify_age_collectionNotificationCommunityOwnerUpdatexwa2_notify_group_on_participants_roles_changeupdated_bynotify_namerole_updatesuser_jidnew_roleNotificationGroupCreateUpdatexwa2_notify_group_on_createXWA2GroupJIDinvite_codeackallow_admin_reportsannouncementephemeralgrowth_locked2lockedmember_add_modeXWA2GroupMemberAddModemembership_approval_mode_enabledsupportmembership_approval_requestsrequest_methodXWA2GroupMembershipRequestMethodrequestorrequest_timeXWA2GroupCreateTypecreate_ctxXWA2GroupCreateCtxreasonXWA2GroupAddReasonNotificationGroupHiddenPropertyUpdatexwa2_notify_group_on_prop_changehidden_groupNotificationGroupLimitSharingPropertyUpdatelimit_sharinglimit_sharing_enabledlimit_sharing_triggerXWA2GroupLimitSharingTriggerNotificationGroupMemberLinkPropertyUpdatemember_link_modeXWA2GroupMemberLinkModeNotificationGroupParticipantLabelParticipantPropertyUpdatexwa2_notify_group_on_participant_property_changeparticipant_property_updategroup_jidparticipant_labellabellast_mtime_in_secNotificationGroupParticipantLabelPropertyUpdateparticipant_label_enabledNotificationGroupPropertyUpdateallow_non_admin_sub_group_creationNotificationGroupSafetyCheckPropertyUpdategroup_safety_checkNotificationInteropGroupCreateUpdatexwa2_notify_interop_group_on_createNotificationLinkedProfilesUpdatesxwa2_notify_linked_profilesadded_profilesXWA2LinkedProfileTyperemoved_profilesNotificationLinkedProfilesUpdatesSideSubxwa2_notify_linked_profiles_side_subhashNotificationNewsletterAdminDemotexwa2_notify_newsletter_admin_demoteadminuser_new_roleactorNotificationNewsletterAdminInviteRevokexwa2_notify_newsletter_admin_invite_revokeNotificationNewsletterAdminMetadataUpdatexwa2_notify_newsletter_on_admin_metadata_updateNotificationNewsletterAdminPromotexwa2_notify_newsletter_admin_promoteNotificationNewsletterJoinxwa2_notify_newsletter_on_joinimageNotificationNewsletterLeavexwa2_notify_newsletter_on_leaveNotificationNewsletterMuteChangexwa2_notify_newsletter_on_mute_changeNotificationNewsletterOwnerUpdatexwa2_notify_newsletter_owner_on_metadata_updateNotificationNewsletterStateChangexwa2_notify_newsletter_on_state_changeis_requestorNotificationNewsletterUpdatexwa2_notify_newsletter_on_metadata_updateNotificationNewsletterWamoSubStatusChangexwa2_notify_newsletter_on_wamo_sub_status_changewamo_sub_eventXWA2NewsletterWamoSubEventNotificationNotifySenderOnGuestJoinxwa2_notify_sender_on_guest_joinguest_lidNotificationNotifySenderOnGuestTransitionxwa2_notify_sender_on_guest_transitionuser_lidNotificationNotifySenderOnReceiverJoinxwa2_notify_sender_on_receiver_joinreceiverreceiver_lidhas_clickedNotificationUserBrigadingUpdatexwa2_notify_brigadingXWA2BrigadingStateNotificationUserReachoutTimelockUpdatexwa2_notify_account_reachout_timelockOhaiKeyConfigQueryxwa2_ohai_configurationsohai_configskey_idkdf_idkem_idpublic_keyaead_idlast_updated_timeexpiration_datePasskeyExistResponseQueryxwa2_passkey_existcredentialcreate_ts_sused_ts_sQueryBatchGetGroupsxwa2_group_batch_query_by_idcapican_auto_fileparent_group_jidgeneral_chatauto_add_disabledclosed_by_membership_approval_modeXWA2GroupQueryErrorCodeQueryCommunityParticipantCountxwa2_group_query_linked_groups_participantstotal_countQueryGroupInfoxwa2_group_query_by_idQueryGroupInfoByCodeparent_group_subjectnum_sub_groupsQueryInteropGroupInfoxwa2_interop_group_query_by_idQueryInviteLinkQueryLinkedGroupInfoadmin_request_requiredQueryParticipatingGroupsxwa2_group_query_participating_groupsQuerySubgroupParticipantCountsub_groupsQuerySubgroupsdefault_sub_groupQuerySuggestedGroupssub_group_suggestionsis_existing_groupRegAccountTransferVerifyTokenMutationxwa2_account_transfer_verify_tokenRegistrationDynamicUpsellShownxwa2_reg_dynamic_upsell_shownRegistrationPasskeyClearxwa2_passkey_clearRegistrationPasskeyFinishRegisterMutationxwa2_passkey_finish_registerRegistrationPasskeyStartRegisterMutationxwa2_passkey_start_registercredential_createRegistrationUpsellShownxwa2_reg_upsell_shownSelfContactsQuerycontacts_infoUserTypelid_infoencrypted_metadataversionSetGroupPropertySetProfilePicturexwa2_profile_picture_sethas_stagingSetWamoUserIdVersionxwa2_wamo_user_id_version_setSubmitAgexwa2_age_collection_setSuggestedContactsV2xwa2_growth_suggested_contacts_v2TeeSecureChannelxwa2_tee_secure_channelsessionIdevidencesevSnpreportarkaskvcekvlekcvmPubKeyserverPubKeysignaturecipherTypeXWA2TeeSecureChannelSymmetricCipherTypeTeeSecureQueryxwa2_tee_secure_queryresponseTeeSnpAttestationxwa2_tee_snp_attestationpubkeyTextStatusUpdateNotificationxwa2_notify_text_status_on_updateTextStatusUpdateNotificationSideSubxwa2_notify_text_status_on_update_side_subTosSetResultxwa2_tos_set_resultcurrent_stagenotice_idUpdateAutoConfConsentxwa2_autoconf_consent_updateUpdateCommunityOwnerxwa2_group_update_users_rolegroup_idUpdateGroupParticipantLabelMutationxwa2_group_update_participant_propertyerrorXWA2GroupParticipantPropertyUpdateErrorErrorCodeUpdateTextStatusxwa2_update_text_statusXWA2TextStatusResultUpdateUserStatusxwa2_users_updates_sinceupdatesUserCountryCodeGetUsernameCheckxwa2_username_checkXWA2UsernameCheckResultsuggestionsUsernameDeleteNotificationxwa2_notify_username_deleteUsernameGetxwa2_username_getUsernamePinSetxwa2_username_pin_setXWA2UsernamePinSetResultUsernameSetxwa2_username_setXWA2UsernameSetResultUsernameSetNotificationxwa2_notify_username_on_changeUsernameUpdateNotificationxwa2_notify_username_on_update_side_subUsyncQueryUsernameStatereachability_infois_reachableabout_status_infopicture_infobusiness_infobusiness_profiletagaddressemailwebsitebusiness_hourstimezonebusiness_hours_notebusiness_hours_configday_of_weekDaysOfWeekmodeXWA2BusinessProfileModeopen_timeclose_timebusiness_shortcutmsgcategoriesservice_areasarea_descriptionarea_centerlatitudelongitudearea_radius_meterscustom_urlofferingsis_offeredprice_tiersymbolsurvey_sampling_ratestructured_addressstreet_addresszip_codecity_idlocalized_city_nameverticalcanonicalmember_since_textprofile_optionscommerce_experienceXWA2BusinessProfileCommerceExpTypecart_enableddirect_connectionhas_galaxy_flowscalling_enabledis_offerings_eligibleis_responsiveis_profile_edit_disabledcalling_hidden_entrypointsbot_fieldsis_typing_indicator_enabledwelcome_message_protocol_modesub_descriptionautomated_typebot_descriptioncommandspromptsmeta_verifiedcover_phototokentsopXWA2BusinessProfileCoverPhotoOpenableddefault_postcodelocation_namepostcode_typeXWA2BusinessProfilePostCodeConstantsfeaturesXWA2BusinessProfileDirectConnectionFeatureNameallowed_country_codesblocked_statusXWA2BusinessProfileDirectConnectionBlockedStatusdirect_connection_endpoint_versionsdirect_connection_endpoint_version_namedirect_connection_endpoint_version_numberbiz_identity_infophone_numbervlevelXWA2BusinessVerifiedLevelverified_cert_bytesserialis_signedrevokedactual_actorsXWA2BusinessActualActorshost_storageXWA2BusinessHostStorageprivacy_mode_tslinked_accountsfb_pagelikeshas_published_media_postsig_professionalig_handlefollowersverified_name_nullableverified_levelvcertdisappearing_mode_infodurationdevices_infodevicesXWA2DeviceJIDkey_indexis_hostedkey_index_list_v2payloadexpected_timestamplinked_profilesprofilesValidateVerifierConfidencexwa2_autoconf_validate_confidenceWABinaryDemoQueryxwa2_demo_binaryoriginal_inputXWA2Binarybase64_decodedWWWCreateAccessTokenxwa2_ent_generate_access_tokensencrypted_fbid_and_access_tokenkeynoncealgorithmWWWCreateUserxwa2_ent_create_entWWWDeleteUserxwa2_ent_delete_entWWWExchangeNonceForAccessTokenxwa2_ent_exchange_nonce_and_passwordWWWGetCertificatesxwa2_ent_get_certificatesencryption_pempemttlsignature_pempassword_pemWWWTriggerAcountRecoveryxwa2_ent_request_recovery_noncefbidWamoAssetCollectionassetsXWA2AgeCollectionAssetNamettl_secWamoSubGetComplianceInfoxwa2_wamo_sub_get_compliance_infocompliance_infoWamoUserIdVersionxwa2_wamo_user_id_versionWhatsappOrderCompliancexfb_whatsapp_order_compliancerequest_geoblockeduser_sanctionedWhatsappSMBOrderEducationxfb_whatsapp_smb_order_education_videovideo_uricaptions_uriƐ�>&         , 6 $ #%& ,#%, <   4 0 6 ,  #%0 B& .* 5 79 ;= ?AC EGI K #% &  & . 5 7 #%4 4  + #%" [  5 7,  + < B { $   $ &. !#%( * #%* [  : 0 4 !#%, D:#%& [  .#%. <    ( ,0    .  "� * < *2 $ *#% "C { , {" { +  i k m (  +i     !  �  + �i �    !� i � � �i �    !�  + +i �    !�  = ?00 {DQS UW = ?A5 7� GK I AC {#%  <K  {  7#%2 <+ >#%4 H*   0#%( :i #%< T #%: 0 0 +  #%* [  #% 6  7  :#%,   #%( <� >5  {#%    + , { #%" * +5 � �� � {� #%  2 #%T gi k m#%0 2 � � � &5 �� 5 ��  W5 � D#%" D&. {5 7#%< *( #%, ,* #%* ,  #%( 6�#%( 6�#%& 4s 5 �   , $#%2 6#%6 Fi   .#%* 8i �� �#%* Fi k� �, #%6 Fi �� �#%8 *i k� �� k� ��� . +K D*�i � � .  { :#%* 8i �� �#%. Ni k� �#%  ,i k� ��� �i �  i � a  i � �a � �i � �     "   2& 4� N    2= $ 6#%8 H   � �   �  k �� ,� � #%0 >i k� ��� �i � � �i � �a � �i � �a � �i � � � � � � � �� ���� �� � �� �� �= �� �#%  2i �� �#%D V+ > i k� ��� �i � � �i � �a � �i � �a � �i � � � � � � � �� ���� �� � �� �� �= �� �#%. >+i k� ��� �i � � �i � �a � �i � �a � �i � � � � � � � �� ���� �� � �� �� �= �� �  #%2 B+i k� ��� �i � � �i � �a � �i � �a � �i � � � � � � � �� ���� �� � �� �� �= �� ��� � #%0 @i k� �#%. >i k� �#%, 22� �� �� � ��� � � � � � �� �� � �� � �$*� �� �� � ��� � � � � � �� �� � �� � �� � �� �� � ��� � � � � � �� �� � �� � ��� �� �� � ��� � � � � � �� �� � �� � ��  #%$ <� +i { �  + = �  B#% .i �� �#%. �+i k� ��� �i � � �i � �a � �i � �a � �i � � � � � � � �� ���� �� � �� �= ��� � #% 0i �� �#%4 B #%* 8 "#%$ i k� ��� �i � � �i � �a � �i � �a � �i � � � � � � � �� ���� �� � �� �� �= �� �#%< �i #%0 ,i k� ��� �i � � �i � �a � �i � �a � �i � � � � � � � �� ���� �� � �� �� �= �� �#% .i �� �#%. @ + ��i �  #%J ����� ��K �#%: J ��i � = �#%* 8+i k� ��� �i � � �i � �a � �i � �a � �i � � � � � � � �� ���� �� � �� �� �= �� �#%  .+i k� ��� �i � � �i � �a � �i � �a � �i � � � � � � � �� ���� �� � �� �� �= �� �#%" 0+i k� ��� �i � � �i � �a � �i � �a � �i � � � � � � � �� ���� �� � �� �� �= �� �#%( 4i k� ��� �i � � �i � �a � �i � �a � �i � � � � � � � �� ���� �� � �� �� �= �� �#%* 6� � � �i � � = �k� �#%  2i �� �#%8 Fi k� ��� �i � � �i � �a � �i � �a � �i � � � � � � � �� ���� �� � �� �� �= �� �#%* * �  �� � � � � �k �� �� � #%2 4 _#%@ \ +i i �  �  7 ?�5 7� QS U#%: 6�  5 � �5 7� � �� �5 7� � � �i � �5 7� � �  ���i � � = ?� {k m�&I { QS U� ,@8���5 7� �  @5 7� �  � � & $  $#%J @ +i �i � � � �  QS U#%V � i �i � � � �  ** 8QS U#%R � i �i � � � �    .QS U#%t `�i � � � 6 �" + " {#%^ � + i �i � � �  2#%> � +i �i � � � �  DQS U#%T � +i �i � � �  $QS U#%H F� � � �5 �� �� �5 �� � �5 �� #%B 65 � *  � � #%P H #%B F +i �i �  +i �  � +i � #%N Ti �i � �i #%R ^i ��� k� ����� ��K �#%D H +i �i � �i � � ��i � #%4 <i k� ��� �i � � �i � ��  +i � �� �i � � � � � � � �� ���� �� � �� �� �= �� �#%6 >i = �#%@ Ji � �#%B ^i �i � � +�i � � �i � �� �i � �� �i � � ��� �� � #%B Li k� �#%8 Ri ��i � � �i � �� �i � �� �i � � ��� �� � � �� ��� #%R `� � 4#%F @ #%R L� 7 #%L F 7 K #%> *k $#%L J�� � �#%$ 0  {  {  {  {"  #%2 $+  { {#%& 8 5 �� { i k m� � � +i �    !� � �� � �i �    !� �i � � �i �    !� ��� +i �    !� � = ?���(����I {��QS U�� ������ �"�D�� .#%< V {#% ,  i k m� � � +i �    !� � �� � �i �    !� �i � � �i �    !� ��� +i �    !� � = ?�� {��,����I {��QS U�� �� ���������� ������#%( �  i k m� � � +i �    !� � �� � �i �    !� �i � � �i �    !� ��� +i �    !� � = ?�� {�����5 7   !� {���� �(�  {#%* < + � �5 �� �5 �� � #% �  � #%( �  i k m� � � +i �    !� � �� � �i �    !� �i � � �i �    !� ��� +i �    !� � = ?�� {�����5 7   !� {� +��,�QS U#%0 J 5 �� { i k m� � � +i �    !� � �� � �i �    !� �i � � �i �    !� ��� +i �    !� � = ?���(����I {��QS U�� ��������� ������#%: �  ��i � {#% � +  i "i �� � ���i �� � �� {����#%( �  i *��i �� �� �i � � {"�#%J D#%< :#%0 $#%R 8#%P 6" #%. *#%" [   + �� +  � �    !$ � � �� � !#%  g5 �k m#%" 0i #%( :#% . _a 5 7c #%& B�� ��5 7� {#%  .    +          N#% * #%" 0 +� �  �  �    #%8 B +5 � �� � {� #%F T� #% &�  #%* 8#%( 8 #%F L� � +� `�� � {#%  .+ (#%  05  s � #%$ [  5 7� #% &+ . #%4 6� � � �#% " #% *+ 0#% "+ *#%. <�  #%4 N� #% [  5 7  k �   !"  !" � �  ! i � �  �  !  0  �  +   & *  . { {"�  �i � � +    $ { � +� +i � i � i � i   ( {� + � + $   & �  " & D" *04 {6:    � � � �  + +   >i a � +  K   H \*  `FN R � + " � �   2&    0 . {i {�  + {2i {  {� ,   � � �    !,  �  ! 5  {" � $  !q uw � y {} {��� �s � � !�   ! � �  !#%4 B#%"    #%( >> +  � +  +  #% &�  +�  � + � � #% &�#%< H�  +�  � + � � #%$ 2  {� {�  �  {� {�  �  {� {#%0 > #%& [  ] � 4� �  {#%0 B #%" 2� {#%. :$#%2 L  #% \ No newline at end of file diff --git a/vendor/go.mau.fi/whatsmeow/argo/argo.go b/vendor/go.mau.fi/whatsmeow/argo/argo.go new file mode 100644 index 0000000000..e227aecffa --- /dev/null +++ b/vendor/go.mau.fi/whatsmeow/argo/argo.go @@ -0,0 +1,62 @@ +package argo + +import ( + _ "embed" + "encoding/json" + "sync" + + "github.com/beeper/argo-go/wire" + "github.com/beeper/argo-go/wirecodec" +) + +var ( + Store map[string]wire.Type + QueryIDToMessageName map[string]string + + //go:embed argo-wire-type-store.argo + wireTypeStoreBytes []byte + + //go:embed name-to-queryids.json + jsonMapBytes []byte + + loadOnce sync.Once + initErr error +) + +func Init() error { + loadOnce.Do(func() { + var err error + + Store, err = wirecodec.DecodeWireTypeStoreFile(wireTypeStoreBytes) + if err != nil { + initErr = err + return + } + + var src map[string]string + if err := json.Unmarshal(jsonMapBytes, &src); err != nil { + initErr = err + return + } + + m := make(map[string]string, len(src)) + for name, id := range src { + m[id] = name + } + QueryIDToMessageName = m + }) + return initErr +} + +func GetStore() (map[string]wire.Type, error) { + if err := Init(); err != nil { + return nil, err + } + return Store, nil +} +func GetQueryIDToMessageName() (map[string]string, error) { + if err := Init(); err != nil { + return nil, err + } + return QueryIDToMessageName, nil +} diff --git a/vendor/go.mau.fi/whatsmeow/argo/name-to-queryids.json b/vendor/go.mau.fi/whatsmeow/argo/name-to-queryids.json new file mode 100644 index 0000000000..afededd7e7 --- /dev/null +++ b/vendor/go.mau.fi/whatsmeow/argo/name-to-queryids.json @@ -0,0 +1,306 @@ +{ + "AIStudioWAManageMemoryDeleteAllMutation": "29052043257719788", + "AIStudioWAManageMemoryDeleteMutation": "7544143899043492", + "AIStudioWAManageMemoryQuery": "9127813997336237", + "AcDcCreateDigitalCommerceNonse": "24409813818642948", + "AcceptAffiliationRequest": "27688116220836225", + "AccountSyncUsernameNotification": "7858197960949065", + "AccountTransferNotification": "8220475834742024", + "AddMultiAccountLink": "24893947900219705", + "AddParticipantsToGroup": "26828081150171064", + "AddParticipantsToGroupV2": "28712042245061067", + "AddParticipantsToInteropGroup": "24096891046636046", + "AddSmbAgentAndCoexQr": "30086066011007103", + "AgeCollection": "26879887431657309", + "AiCharacterUpdateHideStatus": "8839874476113994", + "AiCreationCheckCreatedByMe": "9815362228482855", + "AiCreationDeletePersona": "8696516227091665", + "AiCreationFetchAiPersonaForEditing": "9904567389669075", + "AiCreationFetchCreatedBot": "9978792015508840", + "AiCreationFetchVoiceSample": "23916680671255181", + "AiCreationGenerateImageCandidate": "24079598261680837", + "AiCreationUpdatePersona": "10035356286584105", + "AiCreationUploadImageMutation": "24138890235741746", + "AiHomeFetchUserCreatedPersonasQuery": "24004744805826063", + "AiHomeLayoutQuery": "8534063353384687", + "AiHomeSearchQuery": "30238411035774898", + "AiHomeSectionQuery": "23974658895484544", + "AiImmersiveBotQuery": "23880659328262645", + "AiImmersiveQuery": "23897130903241751", + "AiPersonalizationRecordNotice": "9095896127204206", + "AiPlannerStopGenerationMutation": "24452566171046804", + "AiSearchEmptyStateConversationStartersQuery": "24859646513652301", + "AllowNonAdminGroupCreation": "7519835874701878", + "BizIntegrityQuery": "9952408304882625", + "BotProactiveMessageControlStatus": "24107778775576749", + "BotProactiveMessageControlStatusUpdate": "9867720136669699", + "BotProfilePictureUrlQuery": "24968786916054502", + "BotProfileSyncQuery": "8739375796187001", + "BrandIdsGetPhoneNumbers": "30488425480748795", + "CanonicalEntQueryFeature": "24576316608621283", + "CanonicalEntSetupFeature": "24337933855819598", + "CanonicalEntTeardownFeature": "24041030982231710", + "CheckAutoConfConsent": "9625438944164624", + "CoexMultiAppEligiblity": "8336924149750786", + "CoexProcessNativeOnboardingRequest": "9878176882212860", + "CoexistenceProcessAuthChallenge": "9684040624947821", + "CompleteTopicOnboarding": "7742297632561058", + "ContactIntegrityQuery": "8370845569632382", + "ContactsBackupMutation": "7898229300257102", + "ContactsBackupQuery": "7307717639327756", + "CreateEnforcementAppeal": "8821533821282490", + "CreateGroup": "9639739449412631", + "CreateInviteCode": "24113619438328626", + "CtwaAdsContextBizQuery": "9455487237842382", + "CtwaNativeUploadAdMediaMutation": "9181032062008816", + "DeleteAIKnowledge": "9734241303310288", + "DeleteGenAiTasks": "9267681663329336", + "DeleteImagineMeOnboarding": "8726914694003146", + "DigitalContentIAPPurchaseQuoteMutation": "8922485457790070", + "EditAGenAiTask": "9419617158093386", + "ExternalCtxAuthoriseWAChat": "26901859259428948", + "FetchAIAbilities": "9640511419331019", + "FetchAiReplySettings": "10086110871440121", + "FetchFBSSOLoginTokensMutation": "26599490752999797", + "FetchOrderedKnowledge": "9537936276334771", + "FetchReachoutTimelockQuery": "9462376090546244", + "FetchUserNoticesByID": "8870435989745078", + "GenApprovePotentialKnowledge": "24098685746388521", + "GenDeletePotentialKnowledge": "9332003590258784", + "GenEditPotentialKnowledge": "9741569319237798", + "GenLoadPotentialKnowledgeForReview": "9703484983043955", + "GenTiggerMultiFileKnowledgeExtraction": "24175511598781021", + "GenWhatsAppSMBDebugContentGenProfileResponse": "23985621637769232", + "GenerateWhatsAppP2BReport": "8051218588298508", + "GetAutoConfConfidenceChallenge": "9449283601809884", + "GetBillerPlans": "24230130823283004", + "GetBusinessProfileWebsiteShimUrlQuery": "8842045022505438", + "GetCustomUrlsQuery": "24160261910236968", + "GetDcpProductsQuery": "27554084174237806", + "GetDynamicRegistrationUpsells": "10043673822314027", + "GetImagineMeOnboarded": "7464954973630740", + "GetInviteInfo": "9274981439273619", + "GetRecommendedTier": "8845639942219954", + "GetRegistrationUpsells": "7561558900567547", + "GetSMBAgentOnboardingInfo": "8654799644605375", + "GetSubscribedTasksForThread": "28928340753448628", + "GetSubscriptions": "8876107472483541", + "GetSuggestedContacts": "24497904963133841", + "GetTextStatus": "6681894428597832", + "GetTextStatusList": "7313153618713617", + "GetUpiAccounts": "29334452936170022", + "GetWaMeLinkQuery": "8590101537750204", + "GroupUpdateParticipantLabelEnabledMutation": "9336450899772182", + "GroupsCreateInteropGroup": "23994919786772328", + "HasBusinessIntent": "7865157416866111", + "ImmersiveCreationCompleteCreationMutation": "9913715632037438", + "ImmersiveCreationConfigurationQuery": "9361733867204147", + "ImmersiveCreationInitiateCreationMutation": "31232734296341497", + "ImmersiveCreationUpdateIntroFieldMutation": "24195839360054094", + "ImmersiveCreationUpdateNameFieldMutation": "9650650568373143", + "ImmersiveCreationUpdatePersonalityFieldMutation": "30190466170599132", + "ImmersiveCreationUpdateVoiceFieldMutation": "24787533637583171", + "IplsClientHandshakeInitRequest": "7841955639221430", + "IplsClientHelloPayload": "7574986815915518", + "LidChangeNotification": "8920679384728188", + "LinkCatalogToWhatsAppSMB": "8872455936130646", + "LinkedProfilesRemove": "8909688149086913", + "LinkedProfilesUpdate": "9784377594930152", + "LoadAvatarPoses": "9074762182534903", + "MaibaDeleteFileKnowledgeSource": "9993739917330936", + "MaibaGetCurrentCatalog": "9795957660487019", + "MaibaQueryUploadedFiles": "23913245624959696", + "MaibaStartFileKnowledgeExtraction": "9845305758879437", + "MetaAIBizAgentWACoachingMutation": "9259901980755931", + "MetaAIMemoryDelete": "8481408331896133", + "MetaAIMemoryDeleteAll": "8935315639836425", + "MetaAIMemoryQuery": "8869074713151146", + "MetaAIVoiceWAOptionsFetchQuery": "27538353179144114", + "MetaAIVoiceWAOptionsWithDefaultFetchQuery": "6784800994977131", + "MetaPoiTypeAhead": "10011518742299182", + "MigrateBlocklistLid": "29610788451869855", + "MultiAccountRevokeAccount": "8754214324686446", + "NewsletterAcceptAdminInvite": "6179636105471882", + "NewsletterAdminDemote": "7220922401252829", + "NewsletterAdminInvite": "24943748628557365", + "NewsletterAdminInviteRevoke": "6550386328343169", + "NewsletterAdminMetadataQuery": "7785791618136078", + "NewsletterBlockUser": "30495729640073636", + "NewsletterChangeOwner": "6951013521615265", + "NewsletterChangeWamoSub": "27448193018097359", + "NewsletterCreate": "27527996220149684", + "NewsletterCreateReportAppeal": "23913563504921106", + "NewsletterCreateVerified": "27385241581120782", + "NewsletterDelete": "6285734628148226", + "NewsletterDirectoryCategoryPreview": "28199252546357255", + "NewsletterDirectoryList": "8629852843766813", + "NewsletterDirectorySearch": "8422355807877290", + "NewsletterDisableWamoSub": "7644433872334704", + "NewsletterEnableWamoSub": "7833900003373753", + "NewsletterEnforcements": "9883696571653834", + "NewsletterHide": "9847547868624220", + "NewsletterInsights": "7685666401499724", + "NewsletterJoin": "6742622672428529", + "NewsletterKotlinExample": "9702143139802327", + "NewsletterLeave": "6548204731885183", + "NewsletterLinkPreviewCheck": "6842506979173950", + "NewsletterLogExposure": "7395568390543223", + "NewsletterMetadata": "9779843322044422", + "NewsletterMetadataNotification": "6326535000799900", + "NewsletterMetadataUpdate": "8580212968761751", + "NewsletterMute": "5971669009605755", + "NewsletterPollVoterList": "24677763351869464", + "NewsletterQueryMessageDeliveryUpdates": "6920948374651895", + "NewsletterQuestionResponseStateUpdate": "24589034820694583", + "NewsletterReactionSendersList": "6868098736578560", + "NewsletterRecommended": "27256776790637714", + "NewsletterResponseStateUpdate": "24222471884053526", + "NewsletterSearch": "9006011396096776", + "NewsletterSimilar": "8845781528777207", + "NewsletterSubscribed": "8621797084555037", + "NewsletterSubscribers": "25403502652570342", + "NewsletterUnhide": "9323568947747934", + "NewsletterUnmute": "6104029483058502", + "NewsletterUpdateVerification": "8877210142312361", + "NewsletterUserReports": "24063801373308138", + "NotificationAgeCollection": "8470338583083616", + "NotificationCommunityOwnerUpdate": "23926761323617949", + "NotificationGroupCreateUpdate": "7172226612882255", + "NotificationGroupHiddenPropertyUpdate": "24486508950944602", + "NotificationGroupLimitSharingPropertyUpdate": "23921409724194417", + "NotificationGroupMemberLinkPropertyUpdate": "30514374534874976", + "NotificationGroupParticipantLabelParticipantPropertyUpdate": "28721666060781185", + "NotificationGroupParticipantLabelPropertyUpdate": "9605044949588542", + "NotificationGroupPropertyUpdate": "24428504903421728", + "NotificationGroupSafetyCheckPropertyUpdate": "9713942958657827", + "NotificationInteropGroupCreateUpdate": "29624102497234486", + "NotificationInteropGroupParticipantsUpdate": "23987398490899606", + "NotificationInteropMsgrGroupAddParticipantsUpdate": "9929050243890055", + "NotificationInteropMsgrGroupCreateUpdate": "9875620322487003", + "NotificationInteropMsgrGroupPropertyUpdate": "31018490114463946", + "NotificationLinkedProfilesUpdates": "29516109634642858", + "NotificationLinkedProfilesUpdatesSideSub": "9277991622261208", + "NotificationNewsletterAdminDemote": "6634787226625860", + "NotificationNewsletterAdminInviteRevoke": "7497017380360026", + "NotificationNewsletterAdminMetadataUpdate": "9828601590514736", + "NotificationNewsletterAdminPromote": "7054784991295295", + "NotificationNewsletterBlockUser": "9822503934524230", + "NotificationNewsletterJoin": "29241810008797405", + "NotificationNewsletterLeave": "7294702320556387", + "NotificationNewsletterMuteChange": "6653725748024899", + "NotificationNewsletterOwnerUpdate": "7088224791298632", + "NotificationNewsletterStateChange": "7078192942214381", + "NotificationNewsletterUpdate": "7839742399440946", + "NotificationNewsletterWamoSubStatusChange": "8222443127778481", + "NotificationNotifySenderOnGuestDeletionInactive": "9751802081581770", + "NotificationNotifySenderOnGuestDeletionRegistered": "10020077494748622", + "NotificationNotifySenderOnGuestJoin": "30407276695583063", + "NotificationNotifySenderOnGuestTransition": "29876639681927056", + "NotificationNotifySenderOnReceiverJoin": "9244657255644098", + "NotificationReminder": "29581768531470837", + "NotificationUserBrigadingUpdate": "8289465197770293", + "NotificationUserReachoutTimelockUpdate": "8639040062862879", + "OhaiKeyConfigQuery": "8699487313397273", + "PasskeyExistResponseQuery": "24280390751624940", + "ProcessMultiOffboarding": "8305078249594217", + "ProcessMultiOnboarding": "8665042316912941", + "QueryBatchGetGroups": "9649176255164364", + "QueryCommunityParticipantCount": "8826001857513910", + "QueryGroupInfo": "24853715544235144", + "QueryGroupInfoByCode": "9936511276382237", + "QueryInteropGroupInfo": "23960878493549033", + "QueryInviteLink": "24965552223089656", + "QueryLinkedGroupInfo": "9323243201132275", + "QueryParticipatingGroups": "23940562365561484", + "QuerySubgroupParticipantCount": "6987167604717709", + "QuerySubgroups": "7822701281123381", + "QuerySuggestedGroups": "8077882158902147", + "RegAccountTransferVerifyTokenMutation": "6864936900275764", + "RegistrationDynamicUpsellShown": "8778425068925687", + "RegistrationPasskeyClear": "9379175628767649", + "RegistrationPasskeyEnableMutation": "24513078668282891", + "RegistrationPasskeyFinishRegisterMutation": "8863736077067250", + "RegistrationPasskeyStartRegisterMutation": "28380481564900991", + "RegistrationUpsellShown": "7480997188628461", + "ReminderCreate": "23893837570245751", + "ReminderDelete": "29800433312937353", + "SMBBotSync": "10011962528916982", + "SMBMarketingMessageQuotaData": "23997573626526381", + "SMBMarketingMessagesGetBizInfo": "8698055193597480", + "SMBMarketingMessagesPromoTemplate": "27335929922718021", + "SaveAvatarPose": "7922098614562797", + "SelectedOrDefaultPoseQuery": "7649832701812240", + "SelfContactsQuery": "9982837645142393", + "SetGroupProperty": "9207174359373176", + "SetGroupResetInviteLink": "9834530503251303", + "SetProfilePicture": "25827464620177848", + "SetWamoUserIdVersion": "25457378233907275", + "SubmitAge": "8849188358438998", + "SuggestedContactsV2": "9172270102828385", + "TeeSecureChannel": "7807820402660929", + "TeeSecureQuery": "26663763556600822", + "TeeSnpAttestation": "7613906245386944", + "TestQuery": "7241805649253401", + "TextStatusUpdateNotification": "6601560246628795", + "TextStatusUpdateNotificationSideSub": "6808064125919757", + "TosSetResult": "8733233133472407", + "UnifiedConversationStartersQuery": "30659058203707682", + "UpdateAIKnowledge": "8992224977546616", + "UpdateAiReplyBotEnabledTime": "29521031190828773", + "UpdateAiReplyChatTrigger": "29048215068157355", + "UpdateAutoConfConsent": "9547173492019407", + "UpdateCommunityOwner": "7554036211316744", + "UpdateGroupParticipantLabelMutation": "9474133135955233", + "UpdateTextStatus": "6679986965420430", + "UpdateUserStatus": "8702204706516599", + "UpiOnboardingSendOtpMutation": "9750189185067185", + "UpiOnboardingVerifyOtpQuery": "29721450344166819", + "UserCountryCodeGet": "9319768474776384", + "UsernameCheck": "23938900255774163", + "UsernameDeleteNotification": "9074620385982648", + "UsernameGet": "7533911316677636", + "UsernamePinSet": "8277542455646085", + "UsernameRecommendationsQuery": "29936714359277584", + "UsernameSet": "7539839152759345", + "UsernameSetNotification": "7777773138910784", + "UsernameUpdateNotification": "7690268147674188", + "UsyncQuery": "8925664914155696", + "ValidateVerifierConfidence": "6167147383402771", + "WABinaryDemoQuery": "9216664025057904", + "WWWCreateAccessToken": "25355063454141992", + "WWWCreateUser": "7418342681612667", + "WWWDeleteUser": "7952120364827799", + "WWWExchangeNonceForAccessToken": "9410129542399925", + "WWWGetCertificates": "7821205087931198", + "WWWGetNonceForCompanionDevice": "24279515318321806", + "WWWTradeNonceForAccessTokens": "24471556995761226", + "WWWTriggerAcountRecovery": "23966926942898128", + "WamoAssetCollection": "8821483957952305", + "WamoSubCancelSubscription": "8782612271820087", + "WamoSubGetComplianceInfo": "9133707526723587", + "WamoSubQueryFinancialEntity": "8002750676472779", + "WamoSubQueryStatus": "8560674097367905", + "WamoUserIdVersion": "7527285483991164", + "WhatsAppBizAccountNonceMutation": "9394029384025067", + "WhatsAppBusinessLinkedAccountsQuery": "9750926348293158", + "WhatsAppBusinessUnlinkAccountMutation": "9055152041257507", + "WhatsAppCatalogAddProduct": "8886227818135185", + "WhatsAppCatalogCommerceSettings": "8499535920153424", + "WhatsAppCatalogCreateCollections": "8425362434250817", + "WhatsAppCatalogCreateMutation": "28658341153753102", + "WhatsAppCatalogDeleteCollection": "8560882437365569", + "WhatsAppCatalogDeleteProduct": "9160045830673468", + "WhatsAppCatalogEditProduct": "7866291200141147", + "WhatsAppCatalogGetLinkedCatalogEligibility": "9275740725769789", + "WhatsAppCatalogProductVisibilityUpdate": "8663534337063686", + "WhatsAppCatalogUnlinkMetaCatalog": "7874105519359462", + "WhatsAppCatalogUpdateCollection": "8333405736788282", + "WhatsAppCatalogUpdateCollectionList": "8011916185576719", + "WhatsAppCoexistenceBSPInfoQuery": "9761834693829429", + "WhatsAppSMBGenAIImage": "7846304058822381", + "WhatsappCatalogAppealProduct": "28258864727045852", + "WhatsappCatalogReportProduct": "8798913583502365", + "WhatsappOrderCompliance": "6646812275409584", + "WhatsappSMBOrderEducation": "6854177671335204", + "XWA2MessageCappingInfoQuery": "25275321118723031" +} diff --git a/vendor/go.mau.fi/whatsmeow/armadillomessage.go b/vendor/go.mau.fi/whatsmeow/armadillomessage.go index bdc2e6ffd7..aea3518578 100644 --- a/vendor/go.mau.fi/whatsmeow/armadillomessage.go +++ b/vendor/go.mau.fi/whatsmeow/armadillomessage.go @@ -7,11 +7,14 @@ package whatsmeow import ( + "context" "fmt" "google.golang.org/protobuf/proto" armadillo "go.mau.fi/whatsmeow/proto" + "go.mau.fi/whatsmeow/proto/armadilloutil" + "go.mau.fi/whatsmeow/proto/instamadilloTransportPayload" "go.mau.fi/whatsmeow/proto/waCommon" "go.mau.fi/whatsmeow/proto/waMsgApplication" "go.mau.fi/whatsmeow/proto/waMsgTransport" @@ -19,11 +22,12 @@ import ( "go.mau.fi/whatsmeow/types/events" ) -func (cli *Client) handleDecryptedArmadillo(info *types.MessageInfo, decrypted []byte, retryCount int) bool { +func (cli *Client) handleDecryptedArmadillo(ctx context.Context, info *types.MessageInfo, decrypted []byte, retryCount int) (handlerFailed, protobufFailed bool) { dec, err := decodeArmadillo(decrypted) if err != nil { cli.Log.Warnf("Failed to decode armadillo message from %s: %v", info.SourceString(), err) - return false + protobufFailed = true + return } dec.Info = *info dec.RetryCount = retryCount @@ -32,13 +36,13 @@ func (cli *Client) handleDecryptedArmadillo(info *types.MessageInfo, decrypted [ cli.Log.Warnf("Got sender key distribution message in non-group chat from %s", info.Sender) } else { skdm := dec.Transport.GetProtocol().GetAncillary().GetSkdm() - cli.handleSenderKeyDistributionMessage(info.Chat, info.Sender, skdm.AxolotlSenderKeyDistributionMessage) + cli.handleSenderKeyDistributionMessage(ctx, info.Chat, info.Sender, skdm.AxolotlSenderKeyDistributionMessage) } } - if dec.Message != nil { - cli.dispatchEvent(&dec) + if dec.Message != nil || dec.FBApplication != nil { + handlerFailed = cli.dispatchEvent(&dec) } - return true + return } func decodeArmadillo(data []byte) (dec events.FBMessage, err error) { @@ -51,11 +55,24 @@ func decodeArmadillo(data []byte) (dec events.FBMessage, err error) { if transport.GetPayload() == nil { return } - application, err := transport.GetPayload().Decode() + appPayloadVer := transport.GetPayload().GetApplicationPayload().GetVersion() + switch appPayloadVer { + case waMsgTransport.FBMessageApplicationVersion: + return decodeFBArmadillo(&transport) + case waMsgTransport.IGMessageApplicationVersion: + return decodeIGArmadillo(&transport) + default: + return dec, fmt.Errorf("%w %d in MessageTransport", armadilloutil.ErrUnsupportedVersion, appPayloadVer) + } +} + +func decodeFBArmadillo(transport *waMsgTransport.MessageTransport) (dec events.FBMessage, err error) { + var application *waMsgApplication.MessageApplication + application, err = transport.GetPayload().DecodeFB() if err != nil { return dec, fmt.Errorf("failed to unmarshal application: %w", err) } - dec.Application = application + dec.FBApplication = application if application.GetPayload() == nil { return } @@ -97,3 +114,20 @@ func decodeArmadillo(data []byte) (dec events.FBMessage, err error) { } return } + +func decodeIGArmadillo(transport *waMsgTransport.MessageTransport) (dec events.FBMessage, err error) { + innerTransport, err := transport.GetPayload().DecodeIG() + if err != nil { + return dec, fmt.Errorf("failed to unmarshal IG transport: %w", err) + } + dec.IGTransport = innerTransport + switch typedContent := innerTransport.GetTransportPayload().(type) { + case *instamadilloTransportPayload.TransportPayload_Add: + dec.Message = typedContent.Add + case *instamadilloTransportPayload.TransportPayload_Supplement: + dec.Message = typedContent.Supplement + case *instamadilloTransportPayload.TransportPayload_Delete: + dec.Message = typedContent.Delete + } + return +} diff --git a/vendor/go.mau.fi/whatsmeow/binary/encoder.go b/vendor/go.mau.fi/whatsmeow/binary/encoder.go index 21e22cf834..66e4c9ece5 100644 --- a/vendor/go.mau.fi/whatsmeow/binary/encoder.go +++ b/vendor/go.mau.fi/whatsmeow/binary/encoder.go @@ -90,7 +90,7 @@ func (w *binaryEncoder) writeNode(n Node) { hasContent = 1 } - w.writeListStart(2*len(n.Attrs) + tagSize + hasContent) + w.writeListStart(2*w.countAttributes(n.Attrs) + tagSize + hasContent) w.writeString(n.Tag) w.writeAttributes(n.Attrs) if n.Content != nil { @@ -159,7 +159,8 @@ func (w *binaryEncoder) writeStringRaw(value string) { } func (w *binaryEncoder) writeJID(jid types.JID) { - if (jid.Server == types.DefaultUserServer && jid.Device > 0) || jid.Server == types.HiddenUserServer || jid.Server == types.HostedServer { + if ((jid.Server == types.DefaultUserServer || jid.Server == types.HiddenUserServer) && jid.Device > 0) || + jid.Server == types.HostedServer || jid.Server == types.HostedLIDServer { w.pushByte(token.ADJID) w.pushByte(jid.ActualAgent()) w.pushByte(uint8(jid.Device)) @@ -187,10 +188,6 @@ func (w *binaryEncoder) writeJID(jid types.JID) { } func (w *binaryEncoder) writeAttributes(attributes Attrs) { - if attributes == nil { - return - } - for key, val := range attributes { if val == "" || val == nil { continue @@ -201,6 +198,16 @@ func (w *binaryEncoder) writeAttributes(attributes Attrs) { } } +func (w *binaryEncoder) countAttributes(attributes Attrs) (count int) { + for _, val := range attributes { + if val == "" || val == nil { + continue + } + count += 1 + } + return +} + func (w *binaryEncoder) writeListStart(listSize int) { if listSize == 0 { w.pushByte(byte(token.ListEmpty)) @@ -280,7 +287,7 @@ func validateHex(value string) bool { return false } for _, char := range value { - if !(char >= '0' && char <= '9') && !(char >= 'A' && char <= 'F') && !(char >= 'a' && char <= 'f') { + if !(char >= '0' && char <= '9') && !(char >= 'A' && char <= 'F') { return false } } @@ -293,8 +300,6 @@ func packHex(value byte) byte { return value - '0' case value >= 'A' && value <= 'F': return 10 + value - 'A' - case value >= 'a' && value <= 'f': - return 10 + value - 'a' case value == 0: return 15 default: diff --git a/vendor/go.mau.fi/whatsmeow/binary/proto/doc.go b/vendor/go.mau.fi/whatsmeow/binary/proto/doc.go index 3da0d53d03..6ebecb93f7 100644 --- a/vendor/go.mau.fi/whatsmeow/binary/proto/doc.go +++ b/vendor/go.mau.fi/whatsmeow/binary/proto/doc.go @@ -2,5 +2,3 @@ // // Deprecated: New code should reference the protobuf types in the go.mau.fi/whatsmeow/proto/wa* packages directly. package proto - -//go:generate ./generatelegacy.sh diff --git a/vendor/go.mau.fi/whatsmeow/binary/proto/generatelegacy.py b/vendor/go.mau.fi/whatsmeow/binary/proto/generatelegacy.py deleted file mode 100644 index 3125abca13..0000000000 --- a/vendor/go.mau.fi/whatsmeow/binary/proto/generatelegacy.py +++ /dev/null @@ -1,69 +0,0 @@ -#!/usr/bin/env python3 -import os -import sys - -with open("old-types.txt") as f: - old_types = [line.rstrip("\n") for line in f] -with open("old-enums.txt") as f: - old_enums = [line.rstrip("\n") for line in f] - -os.chdir("../../proto") - -new_protos = {} -for dir in os.listdir("."): - if not dir.startswith("wa"): - continue - for file in os.listdir(dir): - if file.endswith(".pb.go"): - with open(f"{dir}/{file}") as f: - new_protos[dir] = f.read() - break - -match_type_map = { - "HandshakeServerHello": "HandshakeMessage_ServerHello", - "HandshakeClientHello": "HandshakeMessage_ClientHello", - "HandshakeClientFinish": "HandshakeMessage_ClientFinish", - "InteractiveMessage_Header_JpegThumbnail": "InteractiveMessage_Header_JPEGThumbnail", -} - -print("// DO NOT MODIFY: Generated by generatelegacy.sh") -print() -print("package proto") -print() -print("import (") -for proto in new_protos.keys(): - print(f'\t"go.mau.fi/whatsmeow/proto/{proto}"') -print(")") -print() - -print("// Deprecated: use new packages directly") -print("type (") -for type in old_types: - match_type = match_type_map.get(type, type) - for mod, proto in new_protos.items(): - if f"type {match_type} " in proto: - print(f"\t{type} = {mod}.{match_type}") - break - elif f"type ContextInfo_{match_type} " in proto: - print(f"\t{type} = {mod}.ContextInfo_{match_type}") - break - else: - print(f"{type} not found") - sys.exit(1) -print(")") -print() - -print("// Deprecated: use new packages directly") -print("const (") -for type in old_enums: - for mod, proto in new_protos.items(): - if f"\t{type} " in proto: - print(f"\t{type} = {mod}.{type}") - break - elif f"\tContextInfo_{type} " in proto: - print(f"\t{type} = {mod}.ContextInfo_{type}") - break - else: - print(f"{type} not found") - sys.exit(1) -print(")") diff --git a/vendor/go.mau.fi/whatsmeow/binary/proto/generatelegacy.sh b/vendor/go.mau.fi/whatsmeow/binary/proto/generatelegacy.sh deleted file mode 100644 index 949c5e5ff9..0000000000 --- a/vendor/go.mau.fi/whatsmeow/binary/proto/generatelegacy.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/sh -cd $(dirname $0) -python3 generatelegacy.py > legacy.go -goimports -w legacy.go diff --git a/vendor/go.mau.fi/whatsmeow/binary/proto/legacy.go b/vendor/go.mau.fi/whatsmeow/binary/proto/legacy.go index 93da7af078..cf9177eeb5 100644 --- a/vendor/go.mau.fi/whatsmeow/binary/proto/legacy.go +++ b/vendor/go.mau.fi/whatsmeow/binary/proto/legacy.go @@ -3,7 +3,9 @@ package proto import ( + "go.mau.fi/whatsmeow/proto/waAICommon" "go.mau.fi/whatsmeow/proto/waAdv" + "go.mau.fi/whatsmeow/proto/waBotMetadata" "go.mau.fi/whatsmeow/proto/waCert" "go.mau.fi/whatsmeow/proto/waChatLockSettings" "go.mau.fi/whatsmeow/proto/waCommon" @@ -31,7 +33,7 @@ type ( MediaVisibility = waHistorySync.MediaVisibility DeviceProps_PlatformType = waCompanionReg.DeviceProps_PlatformType ImageMessage_ImageSourceType = waE2E.ImageMessage_ImageSourceType - HistorySyncNotification_HistorySyncType = waE2E.HistorySyncNotification_HistorySyncType + HistorySyncNotification_HistorySyncType = waE2E.HistorySyncType HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeComponent_DayOfWeekType = waE2E.HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeComponent_DayOfWeekType HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeComponent_CalendarType = waE2E.HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeComponent_CalendarType GroupInviteMessage_GroupType = waE2E.GroupInviteMessage_GroupType @@ -44,9 +46,9 @@ type ( ButtonsResponseMessage_Type = waE2E.ButtonsResponseMessage_Type ButtonsMessage_HeaderType = waE2E.ButtonsMessage_HeaderType ButtonsMessage_Button_Type = waE2E.ButtonsMessage_Button_Type - BotFeedbackMessage_BotFeedbackKindMultiplePositive = waE2E.BotFeedbackMessage_BotFeedbackKindMultiplePositive - BotFeedbackMessage_BotFeedbackKindMultipleNegative = waE2E.BotFeedbackMessage_BotFeedbackKindMultipleNegative - BotFeedbackMessage_BotFeedbackKind = waE2E.BotFeedbackMessage_BotFeedbackKind + BotFeedbackMessage_BotFeedbackKindMultiplePositive = waAICommon.BotFeedbackMessage_BotFeedbackKindMultiplePositive + BotFeedbackMessage_BotFeedbackKindMultipleNegative = waAICommon.BotFeedbackMessage_BotFeedbackKindMultipleNegative + BotFeedbackMessage_BotFeedbackKind = waAICommon.BotFeedbackMessage_BotFeedbackKind BCallMessage_MediaType = waE2E.BCallMessage_MediaType HydratedTemplateButton_HydratedURLButton_WebviewPresentationType = waE2E.HydratedTemplateButton_HydratedURLButton_WebviewPresentationType DisappearingMode_Trigger = waE2E.DisappearingMode_Trigger @@ -54,8 +56,8 @@ type ( ContextInfo_ExternalAdReplyInfo_MediaType = waE2E.ContextInfo_ExternalAdReplyInfo_MediaType ContextInfo_AdReplyInfo_MediaType = waE2E.ContextInfo_AdReplyInfo_MediaType ForwardedNewsletterMessageInfo_ContentType = waE2E.ContextInfo_ForwardedNewsletterMessageInfo_ContentType - BotPluginMetadata_SearchProvider = waE2E.BotPluginMetadata_SearchProvider - BotPluginMetadata_PluginType = waE2E.BotPluginMetadata_PluginType + BotPluginMetadata_SearchProvider = waBotMetadata.BotPluginMetadata_SearchProvider + BotPluginMetadata_PluginType = waBotMetadata.BotPluginMetadata_PluginType PaymentBackground_Type = waE2E.PaymentBackground_Type VideoMessage_Attribution = waE2E.VideoMessage_Attribution SecretEncryptedMessage_SecretEncType = waE2E.SecretEncryptedMessage_SecretEncType @@ -150,7 +152,7 @@ type ( ButtonsMessage_ImageMessage = waE2E.ButtonsMessage_ImageMessage ButtonsMessage_VideoMessage = waE2E.ButtonsMessage_VideoMessage ButtonsMessage_LocationMessage = waE2E.ButtonsMessage_LocationMessage - BotFeedbackMessage = waE2E.BotFeedbackMessage + BotFeedbackMessage = waAICommon.BotFeedbackMessage BCallMessage = waE2E.BCallMessage AudioMessage = waE2E.AudioMessage AppStateSyncKey = waE2E.AppStateSyncKey @@ -174,10 +176,10 @@ type ( DeviceListMetadata = waMsgTransport.DeviceListMetadata ContextInfo = waE2E.ContextInfo ForwardedNewsletterMessageInfo = waE2E.ContextInfo_ForwardedNewsletterMessageInfo - BotSuggestedPromptMetadata = waE2E.BotSuggestedPromptMetadata - BotPluginMetadata = waE2E.BotPluginMetadata - BotMetadata = waE2E.BotMetadata - BotAvatarMetadata = waE2E.BotAvatarMetadata + BotSuggestedPromptMetadata = waBotMetadata.BotSuggestedPromptMetadata + BotPluginMetadata = waBotMetadata.BotPluginMetadata + BotMetadata = waBotMetadata.BotMetadata + BotAvatarMetadata = waBotMetadata.BotAvatarMetadata ActionLink = waE2E.ActionLink TemplateButton = waE2E.TemplateButton TemplateButton_QuickReplyButton_ = waE2E.TemplateButton_QuickReplyButton_ @@ -274,7 +276,6 @@ type ( StickerAction = waSyncAction.StickerAction StatusPrivacyAction = waSyncAction.StatusPrivacyAction StarAction = waSyncAction.StarAction - SecurityNotificationSetting = waSyncAction.SecurityNotificationSetting RemoveRecentStickerAction = waSyncAction.RemoveRecentStickerAction RecentEmojiWeightsAction = waSyncAction.RecentEmojiWeightsAction QuickReplyAction = waSyncAction.QuickReplyAction @@ -451,7 +452,7 @@ type ( const ( ADVEncryptionType_E2EE = waAdv.ADVEncryptionType_E2EE ADVEncryptionType_HOSTED = waAdv.ADVEncryptionType_HOSTED - KeepType_UNKNOWN = waE2E.KeepType_UNKNOWN + KeepType_UNKNOWN = waE2E.KeepType_UNKNOWN_KEEP_TYPE KeepType_KEEP_FOR_ALL = waE2E.KeepType_KEEP_FOR_ALL KeepType_UNDO_KEEP_FOR_ALL = waE2E.KeepType_UNDO_KEEP_FOR_ALL PeerDataOperationRequestType_UPLOAD_STICKER = waE2E.PeerDataOperationRequestType_UPLOAD_STICKER @@ -488,13 +489,13 @@ const ( ImageMessage_USER_IMAGE = waE2E.ImageMessage_USER_IMAGE ImageMessage_AI_GENERATED = waE2E.ImageMessage_AI_GENERATED ImageMessage_AI_MODIFIED = waE2E.ImageMessage_AI_MODIFIED - HistorySyncNotification_INITIAL_BOOTSTRAP = waE2E.HistorySyncNotification_INITIAL_BOOTSTRAP - HistorySyncNotification_INITIAL_STATUS_V3 = waE2E.HistorySyncNotification_INITIAL_STATUS_V3 - HistorySyncNotification_FULL = waE2E.HistorySyncNotification_FULL - HistorySyncNotification_RECENT = waE2E.HistorySyncNotification_RECENT - HistorySyncNotification_PUSH_NAME = waE2E.HistorySyncNotification_PUSH_NAME - HistorySyncNotification_NON_BLOCKING_DATA = waE2E.HistorySyncNotification_NON_BLOCKING_DATA - HistorySyncNotification_ON_DEMAND = waE2E.HistorySyncNotification_ON_DEMAND + HistorySyncNotification_INITIAL_BOOTSTRAP = waE2E.HistorySyncType_INITIAL_BOOTSTRAP + HistorySyncNotification_INITIAL_STATUS_V3 = waE2E.HistorySyncType_INITIAL_STATUS_V3 + HistorySyncNotification_FULL = waE2E.HistorySyncType_FULL + HistorySyncNotification_RECENT = waE2E.HistorySyncType_RECENT + HistorySyncNotification_PUSH_NAME = waE2E.HistorySyncType_PUSH_NAME + HistorySyncNotification_NON_BLOCKING_DATA = waE2E.HistorySyncType_NON_BLOCKING_DATA + HistorySyncNotification_ON_DEMAND = waE2E.HistorySyncType_ON_DEMAND HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeComponent_MONDAY = waE2E.HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeComponent_MONDAY HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeComponent_TUESDAY = waE2E.HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeComponent_TUESDAY HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeComponent_WEDNESDAY = waE2E.HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeComponent_WEDNESDAY @@ -548,26 +549,26 @@ const ( ButtonsMessage_Button_UNKNOWN = waE2E.ButtonsMessage_Button_UNKNOWN ButtonsMessage_Button_RESPONSE = waE2E.ButtonsMessage_Button_RESPONSE ButtonsMessage_Button_NATIVE_FLOW = waE2E.ButtonsMessage_Button_NATIVE_FLOW - BotFeedbackMessage_BOT_FEEDBACK_MULTIPLE_POSITIVE_GENERIC = waE2E.BotFeedbackMessage_BOT_FEEDBACK_MULTIPLE_POSITIVE_GENERIC - BotFeedbackMessage_BOT_FEEDBACK_MULTIPLE_NEGATIVE_GENERIC = waE2E.BotFeedbackMessage_BOT_FEEDBACK_MULTIPLE_NEGATIVE_GENERIC - BotFeedbackMessage_BOT_FEEDBACK_MULTIPLE_NEGATIVE_HELPFUL = waE2E.BotFeedbackMessage_BOT_FEEDBACK_MULTIPLE_NEGATIVE_HELPFUL - BotFeedbackMessage_BOT_FEEDBACK_MULTIPLE_NEGATIVE_INTERESTING = waE2E.BotFeedbackMessage_BOT_FEEDBACK_MULTIPLE_NEGATIVE_INTERESTING - BotFeedbackMessage_BOT_FEEDBACK_MULTIPLE_NEGATIVE_ACCURATE = waE2E.BotFeedbackMessage_BOT_FEEDBACK_MULTIPLE_NEGATIVE_ACCURATE - BotFeedbackMessage_BOT_FEEDBACK_MULTIPLE_NEGATIVE_SAFE = waE2E.BotFeedbackMessage_BOT_FEEDBACK_MULTIPLE_NEGATIVE_SAFE - BotFeedbackMessage_BOT_FEEDBACK_MULTIPLE_NEGATIVE_OTHER = waE2E.BotFeedbackMessage_BOT_FEEDBACK_MULTIPLE_NEGATIVE_OTHER - BotFeedbackMessage_BOT_FEEDBACK_MULTIPLE_NEGATIVE_REFUSED = waE2E.BotFeedbackMessage_BOT_FEEDBACK_MULTIPLE_NEGATIVE_REFUSED - BotFeedbackMessage_BOT_FEEDBACK_MULTIPLE_NEGATIVE_NOT_VISUALLY_APPEALING = waE2E.BotFeedbackMessage_BOT_FEEDBACK_MULTIPLE_NEGATIVE_NOT_VISUALLY_APPEALING - BotFeedbackMessage_BOT_FEEDBACK_MULTIPLE_NEGATIVE_NOT_RELEVANT_TO_TEXT = waE2E.BotFeedbackMessage_BOT_FEEDBACK_MULTIPLE_NEGATIVE_NOT_RELEVANT_TO_TEXT - BotFeedbackMessage_BOT_FEEDBACK_POSITIVE = waE2E.BotFeedbackMessage_BOT_FEEDBACK_POSITIVE - BotFeedbackMessage_BOT_FEEDBACK_NEGATIVE_GENERIC = waE2E.BotFeedbackMessage_BOT_FEEDBACK_NEGATIVE_GENERIC - BotFeedbackMessage_BOT_FEEDBACK_NEGATIVE_HELPFUL = waE2E.BotFeedbackMessage_BOT_FEEDBACK_NEGATIVE_HELPFUL - BotFeedbackMessage_BOT_FEEDBACK_NEGATIVE_INTERESTING = waE2E.BotFeedbackMessage_BOT_FEEDBACK_NEGATIVE_INTERESTING - BotFeedbackMessage_BOT_FEEDBACK_NEGATIVE_ACCURATE = waE2E.BotFeedbackMessage_BOT_FEEDBACK_NEGATIVE_ACCURATE - BotFeedbackMessage_BOT_FEEDBACK_NEGATIVE_SAFE = waE2E.BotFeedbackMessage_BOT_FEEDBACK_NEGATIVE_SAFE - BotFeedbackMessage_BOT_FEEDBACK_NEGATIVE_OTHER = waE2E.BotFeedbackMessage_BOT_FEEDBACK_NEGATIVE_OTHER - BotFeedbackMessage_BOT_FEEDBACK_NEGATIVE_REFUSED = waE2E.BotFeedbackMessage_BOT_FEEDBACK_NEGATIVE_REFUSED - BotFeedbackMessage_BOT_FEEDBACK_NEGATIVE_NOT_VISUALLY_APPEALING = waE2E.BotFeedbackMessage_BOT_FEEDBACK_NEGATIVE_NOT_VISUALLY_APPEALING - BotFeedbackMessage_BOT_FEEDBACK_NEGATIVE_NOT_RELEVANT_TO_TEXT = waE2E.BotFeedbackMessage_BOT_FEEDBACK_NEGATIVE_NOT_RELEVANT_TO_TEXT + BotFeedbackMessage_BOT_FEEDBACK_MULTIPLE_POSITIVE_GENERIC = waAICommon.BotFeedbackMessage_BOT_FEEDBACK_MULTIPLE_POSITIVE_GENERIC + BotFeedbackMessage_BOT_FEEDBACK_MULTIPLE_NEGATIVE_GENERIC = waAICommon.BotFeedbackMessage_BOT_FEEDBACK_MULTIPLE_NEGATIVE_GENERIC + BotFeedbackMessage_BOT_FEEDBACK_MULTIPLE_NEGATIVE_HELPFUL = waAICommon.BotFeedbackMessage_BOT_FEEDBACK_MULTIPLE_NEGATIVE_HELPFUL + BotFeedbackMessage_BOT_FEEDBACK_MULTIPLE_NEGATIVE_INTERESTING = waAICommon.BotFeedbackMessage_BOT_FEEDBACK_MULTIPLE_NEGATIVE_INTERESTING + BotFeedbackMessage_BOT_FEEDBACK_MULTIPLE_NEGATIVE_ACCURATE = waAICommon.BotFeedbackMessage_BOT_FEEDBACK_MULTIPLE_NEGATIVE_ACCURATE + BotFeedbackMessage_BOT_FEEDBACK_MULTIPLE_NEGATIVE_SAFE = waAICommon.BotFeedbackMessage_BOT_FEEDBACK_MULTIPLE_NEGATIVE_SAFE + BotFeedbackMessage_BOT_FEEDBACK_MULTIPLE_NEGATIVE_OTHER = waAICommon.BotFeedbackMessage_BOT_FEEDBACK_MULTIPLE_NEGATIVE_OTHER + BotFeedbackMessage_BOT_FEEDBACK_MULTIPLE_NEGATIVE_REFUSED = waAICommon.BotFeedbackMessage_BOT_FEEDBACK_MULTIPLE_NEGATIVE_REFUSED + BotFeedbackMessage_BOT_FEEDBACK_MULTIPLE_NEGATIVE_NOT_VISUALLY_APPEALING = waAICommon.BotFeedbackMessage_BOT_FEEDBACK_MULTIPLE_NEGATIVE_NOT_VISUALLY_APPEALING + BotFeedbackMessage_BOT_FEEDBACK_MULTIPLE_NEGATIVE_NOT_RELEVANT_TO_TEXT = waAICommon.BotFeedbackMessage_BOT_FEEDBACK_MULTIPLE_NEGATIVE_NOT_RELEVANT_TO_TEXT + BotFeedbackMessage_BOT_FEEDBACK_POSITIVE = waAICommon.BotFeedbackMessage_BOT_FEEDBACK_POSITIVE + BotFeedbackMessage_BOT_FEEDBACK_NEGATIVE_GENERIC = waAICommon.BotFeedbackMessage_BOT_FEEDBACK_NEGATIVE_GENERIC + BotFeedbackMessage_BOT_FEEDBACK_NEGATIVE_HELPFUL = waAICommon.BotFeedbackMessage_BOT_FEEDBACK_NEGATIVE_HELPFUL + BotFeedbackMessage_BOT_FEEDBACK_NEGATIVE_INTERESTING = waAICommon.BotFeedbackMessage_BOT_FEEDBACK_NEGATIVE_INTERESTING + BotFeedbackMessage_BOT_FEEDBACK_NEGATIVE_ACCURATE = waAICommon.BotFeedbackMessage_BOT_FEEDBACK_NEGATIVE_ACCURATE + BotFeedbackMessage_BOT_FEEDBACK_NEGATIVE_SAFE = waAICommon.BotFeedbackMessage_BOT_FEEDBACK_NEGATIVE_SAFE + BotFeedbackMessage_BOT_FEEDBACK_NEGATIVE_OTHER = waAICommon.BotFeedbackMessage_BOT_FEEDBACK_NEGATIVE_OTHER + BotFeedbackMessage_BOT_FEEDBACK_NEGATIVE_REFUSED = waAICommon.BotFeedbackMessage_BOT_FEEDBACK_NEGATIVE_REFUSED + BotFeedbackMessage_BOT_FEEDBACK_NEGATIVE_NOT_VISUALLY_APPEALING = waAICommon.BotFeedbackMessage_BOT_FEEDBACK_NEGATIVE_NOT_VISUALLY_APPEALING + BotFeedbackMessage_BOT_FEEDBACK_NEGATIVE_NOT_RELEVANT_TO_TEXT = waAICommon.BotFeedbackMessage_BOT_FEEDBACK_NEGATIVE_NOT_RELEVANT_TO_TEXT BCallMessage_UNKNOWN = waE2E.BCallMessage_UNKNOWN BCallMessage_AUDIO = waE2E.BCallMessage_AUDIO BCallMessage_VIDEO = waE2E.BCallMessage_VIDEO @@ -592,10 +593,10 @@ const ( ForwardedNewsletterMessageInfo_UPDATE = waE2E.ContextInfo_ForwardedNewsletterMessageInfo_UPDATE ForwardedNewsletterMessageInfo_UPDATE_CARD = waE2E.ContextInfo_ForwardedNewsletterMessageInfo_UPDATE_CARD ForwardedNewsletterMessageInfo_LINK_CARD = waE2E.ContextInfo_ForwardedNewsletterMessageInfo_LINK_CARD - BotPluginMetadata_BING = waE2E.BotPluginMetadata_BING - BotPluginMetadata_GOOGLE = waE2E.BotPluginMetadata_GOOGLE - BotPluginMetadata_REELS = waE2E.BotPluginMetadata_REELS - BotPluginMetadata_SEARCH = waE2E.BotPluginMetadata_SEARCH + BotPluginMetadata_BING = waBotMetadata.BotPluginMetadata_BING + BotPluginMetadata_GOOGLE = waBotMetadata.BotPluginMetadata_GOOGLE + BotPluginMetadata_REELS = waBotMetadata.BotPluginMetadata_REELS + BotPluginMetadata_SEARCH = waBotMetadata.BotPluginMetadata_SEARCH PaymentBackground_UNKNOWN = waE2E.PaymentBackground_UNKNOWN PaymentBackground_DEFAULT = waE2E.PaymentBackground_DEFAULT VideoMessage_NONE = waE2E.VideoMessage_NONE diff --git a/vendor/go.mau.fi/whatsmeow/binary/proto/old-enums.txt b/vendor/go.mau.fi/whatsmeow/binary/proto/old-enums.txt deleted file mode 100644 index 8365efe543..0000000000 --- a/vendor/go.mau.fi/whatsmeow/binary/proto/old-enums.txt +++ /dev/null @@ -1,631 +0,0 @@ -ADVEncryptionType_E2EE -ADVEncryptionType_HOSTED -KeepType_UNKNOWN -KeepType_KEEP_FOR_ALL -KeepType_UNDO_KEEP_FOR_ALL -PeerDataOperationRequestType_UPLOAD_STICKER -PeerDataOperationRequestType_SEND_RECENT_STICKER_BOOTSTRAP -PeerDataOperationRequestType_GENERATE_LINK_PREVIEW -PeerDataOperationRequestType_HISTORY_SYNC_ON_DEMAND -PeerDataOperationRequestType_PLACEHOLDER_MESSAGE_RESEND -MediaVisibility_DEFAULT -MediaVisibility_OFF -MediaVisibility_ON -DeviceProps_UNKNOWN -DeviceProps_CHROME -DeviceProps_FIREFOX -DeviceProps_IE -DeviceProps_OPERA -DeviceProps_SAFARI -DeviceProps_EDGE -DeviceProps_DESKTOP -DeviceProps_IPAD -DeviceProps_ANDROID_TABLET -DeviceProps_OHANA -DeviceProps_ALOHA -DeviceProps_CATALINA -DeviceProps_TCL_TV -DeviceProps_IOS_PHONE -DeviceProps_IOS_CATALYST -DeviceProps_ANDROID_PHONE -DeviceProps_ANDROID_AMBIGUOUS -DeviceProps_WEAR_OS -DeviceProps_AR_WRIST -DeviceProps_AR_DEVICE -DeviceProps_UWP -DeviceProps_VR -ImageMessage_USER_IMAGE -ImageMessage_AI_GENERATED -ImageMessage_AI_MODIFIED -HistorySyncNotification_INITIAL_BOOTSTRAP -HistorySyncNotification_INITIAL_STATUS_V3 -HistorySyncNotification_FULL -HistorySyncNotification_RECENT -HistorySyncNotification_PUSH_NAME -HistorySyncNotification_NON_BLOCKING_DATA -HistorySyncNotification_ON_DEMAND -HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeComponent_MONDAY -HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeComponent_TUESDAY -HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeComponent_WEDNESDAY -HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeComponent_THURSDAY -HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeComponent_FRIDAY -HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeComponent_SATURDAY -HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeComponent_SUNDAY -HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeComponent_GREGORIAN -HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeComponent_SOLAR_HIJRI -GroupInviteMessage_DEFAULT -GroupInviteMessage_PARENT -ExtendedTextMessage_NONE -ExtendedTextMessage_VIDEO -ExtendedTextMessage_PLACEHOLDER -ExtendedTextMessage_IMAGE -ExtendedTextMessage_DEFAULT -ExtendedTextMessage_PARENT -ExtendedTextMessage_SUB -ExtendedTextMessage_DEFAULT_SUB -ExtendedTextMessage_SYSTEM -ExtendedTextMessage_SYSTEM_TEXT -ExtendedTextMessage_FB_SCRIPT -ExtendedTextMessage_SYSTEM_BOLD -ExtendedTextMessage_MORNINGBREEZE_REGULAR -ExtendedTextMessage_CALISTOGA_REGULAR -ExtendedTextMessage_EXO2_EXTRABOLD -ExtendedTextMessage_COURIERPRIME_BOLD -EventResponseMessage_UNKNOWN -EventResponseMessage_GOING -EventResponseMessage_NOT_GOING -CallLogMessage_REGULAR -CallLogMessage_SCHEDULED_CALL -CallLogMessage_VOICE_CHAT -CallLogMessage_CONNECTED -CallLogMessage_MISSED -CallLogMessage_FAILED -CallLogMessage_REJECTED -CallLogMessage_ACCEPTED_ELSEWHERE -CallLogMessage_ONGOING -CallLogMessage_SILENCED_BY_DND -CallLogMessage_SILENCED_UNKNOWN_CALLER -ButtonsResponseMessage_UNKNOWN -ButtonsResponseMessage_DISPLAY_TEXT -ButtonsMessage_UNKNOWN -ButtonsMessage_EMPTY -ButtonsMessage_TEXT -ButtonsMessage_DOCUMENT -ButtonsMessage_IMAGE -ButtonsMessage_VIDEO -ButtonsMessage_LOCATION -ButtonsMessage_Button_UNKNOWN -ButtonsMessage_Button_RESPONSE -ButtonsMessage_Button_NATIVE_FLOW -BotFeedbackMessage_BOT_FEEDBACK_MULTIPLE_POSITIVE_GENERIC -BotFeedbackMessage_BOT_FEEDBACK_MULTIPLE_NEGATIVE_GENERIC -BotFeedbackMessage_BOT_FEEDBACK_MULTIPLE_NEGATIVE_HELPFUL -BotFeedbackMessage_BOT_FEEDBACK_MULTIPLE_NEGATIVE_INTERESTING -BotFeedbackMessage_BOT_FEEDBACK_MULTIPLE_NEGATIVE_ACCURATE -BotFeedbackMessage_BOT_FEEDBACK_MULTIPLE_NEGATIVE_SAFE -BotFeedbackMessage_BOT_FEEDBACK_MULTIPLE_NEGATIVE_OTHER -BotFeedbackMessage_BOT_FEEDBACK_MULTIPLE_NEGATIVE_REFUSED -BotFeedbackMessage_BOT_FEEDBACK_MULTIPLE_NEGATIVE_NOT_VISUALLY_APPEALING -BotFeedbackMessage_BOT_FEEDBACK_MULTIPLE_NEGATIVE_NOT_RELEVANT_TO_TEXT -BotFeedbackMessage_BOT_FEEDBACK_POSITIVE -BotFeedbackMessage_BOT_FEEDBACK_NEGATIVE_GENERIC -BotFeedbackMessage_BOT_FEEDBACK_NEGATIVE_HELPFUL -BotFeedbackMessage_BOT_FEEDBACK_NEGATIVE_INTERESTING -BotFeedbackMessage_BOT_FEEDBACK_NEGATIVE_ACCURATE -BotFeedbackMessage_BOT_FEEDBACK_NEGATIVE_SAFE -BotFeedbackMessage_BOT_FEEDBACK_NEGATIVE_OTHER -BotFeedbackMessage_BOT_FEEDBACK_NEGATIVE_REFUSED -BotFeedbackMessage_BOT_FEEDBACK_NEGATIVE_NOT_VISUALLY_APPEALING -BotFeedbackMessage_BOT_FEEDBACK_NEGATIVE_NOT_RELEVANT_TO_TEXT -BCallMessage_UNKNOWN -BCallMessage_AUDIO -BCallMessage_VIDEO -HydratedTemplateButton_HydratedURLButton_FULL -HydratedTemplateButton_HydratedURLButton_TALL -HydratedTemplateButton_HydratedURLButton_COMPACT -DisappearingMode_UNKNOWN -DisappearingMode_CHAT_SETTING -DisappearingMode_ACCOUNT_SETTING -DisappearingMode_BULK_CHANGE -DisappearingMode_BIZ_SUPPORTS_FB_HOSTING -DisappearingMode_CHANGED_IN_CHAT -DisappearingMode_INITIATED_BY_ME -DisappearingMode_INITIATED_BY_OTHER -DisappearingMode_BIZ_UPGRADE_FB_HOSTING -ContextInfo_ExternalAdReplyInfo_NONE -ContextInfo_ExternalAdReplyInfo_IMAGE -ContextInfo_ExternalAdReplyInfo_VIDEO -ContextInfo_AdReplyInfo_NONE -ContextInfo_AdReplyInfo_IMAGE -ContextInfo_AdReplyInfo_VIDEO -ForwardedNewsletterMessageInfo_UPDATE -ForwardedNewsletterMessageInfo_UPDATE_CARD -ForwardedNewsletterMessageInfo_LINK_CARD -BotPluginMetadata_BING -BotPluginMetadata_GOOGLE -BotPluginMetadata_REELS -BotPluginMetadata_SEARCH -PaymentBackground_UNKNOWN -PaymentBackground_DEFAULT -VideoMessage_NONE -VideoMessage_GIPHY -VideoMessage_TENOR -SecretEncryptedMessage_UNKNOWN -SecretEncryptedMessage_EVENT_EDIT -ScheduledCallEditMessage_UNKNOWN -ScheduledCallEditMessage_CANCEL -ScheduledCallCreationMessage_UNKNOWN -ScheduledCallCreationMessage_VOICE -ScheduledCallCreationMessage_VIDEO -RequestWelcomeMessageMetadata_EMPTY -RequestWelcomeMessageMetadata_NON_EMPTY -ProtocolMessage_REVOKE -ProtocolMessage_EPHEMERAL_SETTING -ProtocolMessage_EPHEMERAL_SYNC_RESPONSE -ProtocolMessage_HISTORY_SYNC_NOTIFICATION -ProtocolMessage_APP_STATE_SYNC_KEY_SHARE -ProtocolMessage_APP_STATE_SYNC_KEY_REQUEST -ProtocolMessage_MSG_FANOUT_BACKFILL_REQUEST -ProtocolMessage_INITIAL_SECURITY_NOTIFICATION_SETTING_SYNC -ProtocolMessage_APP_STATE_FATAL_EXCEPTION_NOTIFICATION -ProtocolMessage_SHARE_PHONE_NUMBER -ProtocolMessage_MESSAGE_EDIT -ProtocolMessage_PEER_DATA_OPERATION_REQUEST_MESSAGE -ProtocolMessage_PEER_DATA_OPERATION_REQUEST_RESPONSE_MESSAGE -ProtocolMessage_REQUEST_WELCOME_MESSAGE -ProtocolMessage_BOT_FEEDBACK_MESSAGE -ProtocolMessage_MEDIA_NOTIFY_MESSAGE -PlaceholderMessage_MASK_LINKED_DEVICES -PinInChatMessage_UNKNOWN_TYPE -PinInChatMessage_PIN_FOR_ALL -PinInChatMessage_UNPIN_FOR_ALL -PaymentInviteMessage_UNKNOWN -PaymentInviteMessage_FBPAY -PaymentInviteMessage_NOVI -PaymentInviteMessage_UPI -OrderMessage_CATALOG -OrderMessage_INQUIRY -OrderMessage_ACCEPTED -OrderMessage_DECLINED -ListResponseMessage_UNKNOWN -ListResponseMessage_SINGLE_SELECT -ListMessage_UNKNOWN -ListMessage_SINGLE_SELECT -ListMessage_PRODUCT_LIST -InvoiceMessage_IMAGE -InvoiceMessage_PDF -InteractiveResponseMessage_Body_DEFAULT -InteractiveResponseMessage_Body_EXTENSIONS_1 -InteractiveMessage_ShopMessage_UNKNOWN_SURFACE -InteractiveMessage_ShopMessage_FB -InteractiveMessage_ShopMessage_IG -InteractiveMessage_ShopMessage_WA -PastParticipant_LEFT -PastParticipant_REMOVED -HistorySync_INITIAL_BOOTSTRAP -HistorySync_INITIAL_STATUS_V3 -HistorySync_FULL -HistorySync_RECENT -HistorySync_PUSH_NAME -HistorySync_NON_BLOCKING_DATA -HistorySync_ON_DEMAND -HistorySync_IN_WAITLIST -HistorySync_AI_AVAILABLE -GroupParticipant_REGULAR -GroupParticipant_ADMIN -GroupParticipant_SUPERADMIN -Conversation_COMPLETE_BUT_MORE_MESSAGES_REMAIN_ON_PRIMARY -Conversation_COMPLETE_AND_NO_MORE_MESSAGE_REMAIN_ON_PRIMARY -Conversation_COMPLETE_ON_DEMAND_SYNC_BUT_MORE_MSG_REMAIN_ON_PRIMARY -MediaRetryNotification_GENERAL_ERROR -MediaRetryNotification_SUCCESS -MediaRetryNotification_NOT_FOUND -MediaRetryNotification_DECRYPTION_ERROR -SyncdMutation_SET -SyncdMutation_REMOVE -StatusPrivacyAction_ALLOW_LIST -StatusPrivacyAction_DENY_LIST -StatusPrivacyAction_CONTACTS -MarketingMessageAction_PERSONALIZED -PatchDebugData_ANDROID -PatchDebugData_SMBA -PatchDebugData_IPHONE -PatchDebugData_SMBI -PatchDebugData_WEB -PatchDebugData_UWP -PatchDebugData_DARWIN -CallLogRecord_NONE -CallLogRecord_SCHEDULED -CallLogRecord_PRIVACY -CallLogRecord_LIGHTWEIGHT -CallLogRecord_REGULAR -CallLogRecord_SCHEDULED_CALL -CallLogRecord_VOICE_CHAT -CallLogRecord_CONNECTED -CallLogRecord_REJECTED -CallLogRecord_CANCELLED -CallLogRecord_ACCEPTEDELSEWHERE -CallLogRecord_MISSED -CallLogRecord_INVALID -CallLogRecord_UNAVAILABLE -CallLogRecord_UPCOMING -CallLogRecord_FAILED -CallLogRecord_ABANDONED -CallLogRecord_ONGOING -BizIdentityInfo_UNKNOWN -BizIdentityInfo_LOW -BizIdentityInfo_HIGH -BizIdentityInfo_ON_PREMISE -BizIdentityInfo_FACEBOOK -BizIdentityInfo_SELF -BizIdentityInfo_BSP -BizAccountLinkInfo_ON_PREMISE -BizAccountLinkInfo_FACEBOOK -BizAccountLinkInfo_ENTERPRISE -ClientPayload_WHATSAPP -ClientPayload_MESSENGER -ClientPayload_INTEROP -ClientPayload_INTEROP_MSGR -ClientPayload_SHARE_EXTENSION -ClientPayload_SERVICE_EXTENSION -ClientPayload_INTENTS_EXTENSION -ClientPayload_CELLULAR_UNKNOWN -ClientPayload_WIFI_UNKNOWN -ClientPayload_CELLULAR_EDGE -ClientPayload_CELLULAR_IDEN -ClientPayload_CELLULAR_UMTS -ClientPayload_CELLULAR_EVDO -ClientPayload_CELLULAR_GPRS -ClientPayload_CELLULAR_HSDPA -ClientPayload_CELLULAR_HSUPA -ClientPayload_CELLULAR_HSPA -ClientPayload_CELLULAR_CDMA -ClientPayload_CELLULAR_1XRTT -ClientPayload_CELLULAR_EHRPD -ClientPayload_CELLULAR_LTE -ClientPayload_CELLULAR_HSPAP -ClientPayload_PUSH -ClientPayload_USER_ACTIVATED -ClientPayload_SCHEDULED -ClientPayload_ERROR_RECONNECT -ClientPayload_NETWORK_SWITCH -ClientPayload_PING_RECONNECT -ClientPayload_UNKNOWN -ClientPayload_WebInfo_WEB_BROWSER -ClientPayload_WebInfo_APP_STORE -ClientPayload_WebInfo_WIN_STORE -ClientPayload_WebInfo_DARWIN -ClientPayload_WebInfo_WIN32 -ClientPayload_UserAgent_RELEASE -ClientPayload_UserAgent_BETA -ClientPayload_UserAgent_ALPHA -ClientPayload_UserAgent_DEBUG -ClientPayload_UserAgent_ANDROID -ClientPayload_UserAgent_IOS -ClientPayload_UserAgent_WINDOWS_PHONE -ClientPayload_UserAgent_BLACKBERRY -ClientPayload_UserAgent_BLACKBERRYX -ClientPayload_UserAgent_S40 -ClientPayload_UserAgent_S60 -ClientPayload_UserAgent_PYTHON_CLIENT -ClientPayload_UserAgent_TIZEN -ClientPayload_UserAgent_ENTERPRISE -ClientPayload_UserAgent_SMB_ANDROID -ClientPayload_UserAgent_KAIOS -ClientPayload_UserAgent_SMB_IOS -ClientPayload_UserAgent_WINDOWS -ClientPayload_UserAgent_WEB -ClientPayload_UserAgent_PORTAL -ClientPayload_UserAgent_GREEN_ANDROID -ClientPayload_UserAgent_GREEN_IPHONE -ClientPayload_UserAgent_BLUE_ANDROID -ClientPayload_UserAgent_BLUE_IPHONE -ClientPayload_UserAgent_FBLITE_ANDROID -ClientPayload_UserAgent_MLITE_ANDROID -ClientPayload_UserAgent_IGLITE_ANDROID -ClientPayload_UserAgent_PAGE -ClientPayload_UserAgent_MACOS -ClientPayload_UserAgent_OCULUS_MSG -ClientPayload_UserAgent_OCULUS_CALL -ClientPayload_UserAgent_MILAN -ClientPayload_UserAgent_CAPI -ClientPayload_UserAgent_WEAROS -ClientPayload_UserAgent_ARDEVICE -ClientPayload_UserAgent_VRDEVICE -ClientPayload_UserAgent_BLUE_WEB -ClientPayload_UserAgent_IPAD -ClientPayload_UserAgent_TEST -ClientPayload_UserAgent_SMART_GLASSES -ClientPayload_UserAgent_PHONE -ClientPayload_UserAgent_TABLET -ClientPayload_UserAgent_DESKTOP -ClientPayload_UserAgent_WEARABLE -ClientPayload_UserAgent_VR -ClientPayload_DNSSource_SYSTEM -ClientPayload_DNSSource_GOOGLE -ClientPayload_DNSSource_HARDCODED -ClientPayload_DNSSource_OVERRIDE -ClientPayload_DNSSource_FALLBACK -WebMessageInfo_UNKNOWN -WebMessageInfo_REVOKE -WebMessageInfo_CIPHERTEXT -WebMessageInfo_FUTUREPROOF -WebMessageInfo_NON_VERIFIED_TRANSITION -WebMessageInfo_UNVERIFIED_TRANSITION -WebMessageInfo_VERIFIED_TRANSITION -WebMessageInfo_VERIFIED_LOW_UNKNOWN -WebMessageInfo_VERIFIED_HIGH -WebMessageInfo_VERIFIED_INITIAL_UNKNOWN -WebMessageInfo_VERIFIED_INITIAL_LOW -WebMessageInfo_VERIFIED_INITIAL_HIGH -WebMessageInfo_VERIFIED_TRANSITION_ANY_TO_NONE -WebMessageInfo_VERIFIED_TRANSITION_ANY_TO_HIGH -WebMessageInfo_VERIFIED_TRANSITION_HIGH_TO_LOW -WebMessageInfo_VERIFIED_TRANSITION_HIGH_TO_UNKNOWN -WebMessageInfo_VERIFIED_TRANSITION_UNKNOWN_TO_LOW -WebMessageInfo_VERIFIED_TRANSITION_LOW_TO_UNKNOWN -WebMessageInfo_VERIFIED_TRANSITION_NONE_TO_LOW -WebMessageInfo_VERIFIED_TRANSITION_NONE_TO_UNKNOWN -WebMessageInfo_GROUP_CREATE -WebMessageInfo_GROUP_CHANGE_SUBJECT -WebMessageInfo_GROUP_CHANGE_ICON -WebMessageInfo_GROUP_CHANGE_INVITE_LINK -WebMessageInfo_GROUP_CHANGE_DESCRIPTION -WebMessageInfo_GROUP_CHANGE_RESTRICT -WebMessageInfo_GROUP_CHANGE_ANNOUNCE -WebMessageInfo_GROUP_PARTICIPANT_ADD -WebMessageInfo_GROUP_PARTICIPANT_REMOVE -WebMessageInfo_GROUP_PARTICIPANT_PROMOTE -WebMessageInfo_GROUP_PARTICIPANT_DEMOTE -WebMessageInfo_GROUP_PARTICIPANT_INVITE -WebMessageInfo_GROUP_PARTICIPANT_LEAVE -WebMessageInfo_GROUP_PARTICIPANT_CHANGE_NUMBER -WebMessageInfo_BROADCAST_CREATE -WebMessageInfo_BROADCAST_ADD -WebMessageInfo_BROADCAST_REMOVE -WebMessageInfo_GENERIC_NOTIFICATION -WebMessageInfo_E2E_IDENTITY_CHANGED -WebMessageInfo_E2E_ENCRYPTED -WebMessageInfo_CALL_MISSED_VOICE -WebMessageInfo_CALL_MISSED_VIDEO -WebMessageInfo_INDIVIDUAL_CHANGE_NUMBER -WebMessageInfo_GROUP_DELETE -WebMessageInfo_GROUP_ANNOUNCE_MODE_MESSAGE_BOUNCE -WebMessageInfo_CALL_MISSED_GROUP_VOICE -WebMessageInfo_CALL_MISSED_GROUP_VIDEO -WebMessageInfo_PAYMENT_CIPHERTEXT -WebMessageInfo_PAYMENT_FUTUREPROOF -WebMessageInfo_PAYMENT_TRANSACTION_STATUS_UPDATE_FAILED -WebMessageInfo_PAYMENT_TRANSACTION_STATUS_UPDATE_REFUNDED -WebMessageInfo_PAYMENT_TRANSACTION_STATUS_UPDATE_REFUND_FAILED -WebMessageInfo_PAYMENT_TRANSACTION_STATUS_RECEIVER_PENDING_SETUP -WebMessageInfo_PAYMENT_TRANSACTION_STATUS_RECEIVER_SUCCESS_AFTER_HICCUP -WebMessageInfo_PAYMENT_ACTION_ACCOUNT_SETUP_REMINDER -WebMessageInfo_PAYMENT_ACTION_SEND_PAYMENT_REMINDER -WebMessageInfo_PAYMENT_ACTION_SEND_PAYMENT_INVITATION -WebMessageInfo_PAYMENT_ACTION_REQUEST_DECLINED -WebMessageInfo_PAYMENT_ACTION_REQUEST_EXPIRED -WebMessageInfo_PAYMENT_ACTION_REQUEST_CANCELLED -WebMessageInfo_BIZ_VERIFIED_TRANSITION_TOP_TO_BOTTOM -WebMessageInfo_BIZ_VERIFIED_TRANSITION_BOTTOM_TO_TOP -WebMessageInfo_BIZ_INTRO_TOP -WebMessageInfo_BIZ_INTRO_BOTTOM -WebMessageInfo_BIZ_NAME_CHANGE -WebMessageInfo_BIZ_MOVE_TO_CONSUMER_APP -WebMessageInfo_BIZ_TWO_TIER_MIGRATION_TOP -WebMessageInfo_BIZ_TWO_TIER_MIGRATION_BOTTOM -WebMessageInfo_OVERSIZED -WebMessageInfo_GROUP_CHANGE_NO_FREQUENTLY_FORWARDED -WebMessageInfo_GROUP_V4_ADD_INVITE_SENT -WebMessageInfo_GROUP_PARTICIPANT_ADD_REQUEST_JOIN -WebMessageInfo_CHANGE_EPHEMERAL_SETTING -WebMessageInfo_E2E_DEVICE_CHANGED -WebMessageInfo_VIEWED_ONCE -WebMessageInfo_E2E_ENCRYPTED_NOW -WebMessageInfo_BLUE_MSG_BSP_FB_TO_BSP_PREMISE -WebMessageInfo_BLUE_MSG_BSP_FB_TO_SELF_FB -WebMessageInfo_BLUE_MSG_BSP_FB_TO_SELF_PREMISE -WebMessageInfo_BLUE_MSG_BSP_FB_UNVERIFIED -WebMessageInfo_BLUE_MSG_BSP_FB_UNVERIFIED_TO_SELF_PREMISE_VERIFIED -WebMessageInfo_BLUE_MSG_BSP_FB_VERIFIED -WebMessageInfo_BLUE_MSG_BSP_FB_VERIFIED_TO_SELF_PREMISE_UNVERIFIED -WebMessageInfo_BLUE_MSG_BSP_PREMISE_TO_SELF_PREMISE -WebMessageInfo_BLUE_MSG_BSP_PREMISE_UNVERIFIED -WebMessageInfo_BLUE_MSG_BSP_PREMISE_UNVERIFIED_TO_SELF_PREMISE_VERIFIED -WebMessageInfo_BLUE_MSG_BSP_PREMISE_VERIFIED -WebMessageInfo_BLUE_MSG_BSP_PREMISE_VERIFIED_TO_SELF_PREMISE_UNVERIFIED -WebMessageInfo_BLUE_MSG_CONSUMER_TO_BSP_FB_UNVERIFIED -WebMessageInfo_BLUE_MSG_CONSUMER_TO_BSP_PREMISE_UNVERIFIED -WebMessageInfo_BLUE_MSG_CONSUMER_TO_SELF_FB_UNVERIFIED -WebMessageInfo_BLUE_MSG_CONSUMER_TO_SELF_PREMISE_UNVERIFIED -WebMessageInfo_BLUE_MSG_SELF_FB_TO_BSP_PREMISE -WebMessageInfo_BLUE_MSG_SELF_FB_TO_SELF_PREMISE -WebMessageInfo_BLUE_MSG_SELF_FB_UNVERIFIED -WebMessageInfo_BLUE_MSG_SELF_FB_UNVERIFIED_TO_SELF_PREMISE_VERIFIED -WebMessageInfo_BLUE_MSG_SELF_FB_VERIFIED -WebMessageInfo_BLUE_MSG_SELF_FB_VERIFIED_TO_SELF_PREMISE_UNVERIFIED -WebMessageInfo_BLUE_MSG_SELF_PREMISE_TO_BSP_PREMISE -WebMessageInfo_BLUE_MSG_SELF_PREMISE_UNVERIFIED -WebMessageInfo_BLUE_MSG_SELF_PREMISE_VERIFIED -WebMessageInfo_BLUE_MSG_TO_BSP_FB -WebMessageInfo_BLUE_MSG_TO_CONSUMER -WebMessageInfo_BLUE_MSG_TO_SELF_FB -WebMessageInfo_BLUE_MSG_UNVERIFIED_TO_BSP_FB_VERIFIED -WebMessageInfo_BLUE_MSG_UNVERIFIED_TO_BSP_PREMISE_VERIFIED -WebMessageInfo_BLUE_MSG_UNVERIFIED_TO_SELF_FB_VERIFIED -WebMessageInfo_BLUE_MSG_UNVERIFIED_TO_VERIFIED -WebMessageInfo_BLUE_MSG_VERIFIED_TO_BSP_FB_UNVERIFIED -WebMessageInfo_BLUE_MSG_VERIFIED_TO_BSP_PREMISE_UNVERIFIED -WebMessageInfo_BLUE_MSG_VERIFIED_TO_SELF_FB_UNVERIFIED -WebMessageInfo_BLUE_MSG_VERIFIED_TO_UNVERIFIED -WebMessageInfo_BLUE_MSG_BSP_FB_UNVERIFIED_TO_BSP_PREMISE_VERIFIED -WebMessageInfo_BLUE_MSG_BSP_FB_UNVERIFIED_TO_SELF_FB_VERIFIED -WebMessageInfo_BLUE_MSG_BSP_FB_VERIFIED_TO_BSP_PREMISE_UNVERIFIED -WebMessageInfo_BLUE_MSG_BSP_FB_VERIFIED_TO_SELF_FB_UNVERIFIED -WebMessageInfo_BLUE_MSG_SELF_FB_UNVERIFIED_TO_BSP_PREMISE_VERIFIED -WebMessageInfo_BLUE_MSG_SELF_FB_VERIFIED_TO_BSP_PREMISE_UNVERIFIED -WebMessageInfo_E2E_IDENTITY_UNAVAILABLE -WebMessageInfo_GROUP_CREATING -WebMessageInfo_GROUP_CREATE_FAILED -WebMessageInfo_GROUP_BOUNCED -WebMessageInfo_BLOCK_CONTACT -WebMessageInfo_EPHEMERAL_SETTING_NOT_APPLIED -WebMessageInfo_SYNC_FAILED -WebMessageInfo_SYNCING -WebMessageInfo_BIZ_PRIVACY_MODE_INIT_FB -WebMessageInfo_BIZ_PRIVACY_MODE_INIT_BSP -WebMessageInfo_BIZ_PRIVACY_MODE_TO_FB -WebMessageInfo_BIZ_PRIVACY_MODE_TO_BSP -WebMessageInfo_DISAPPEARING_MODE -WebMessageInfo_E2E_DEVICE_FETCH_FAILED -WebMessageInfo_ADMIN_REVOKE -WebMessageInfo_GROUP_INVITE_LINK_GROWTH_LOCKED -WebMessageInfo_COMMUNITY_LINK_PARENT_GROUP -WebMessageInfo_COMMUNITY_LINK_SIBLING_GROUP -WebMessageInfo_COMMUNITY_LINK_SUB_GROUP -WebMessageInfo_COMMUNITY_UNLINK_PARENT_GROUP -WebMessageInfo_COMMUNITY_UNLINK_SIBLING_GROUP -WebMessageInfo_COMMUNITY_UNLINK_SUB_GROUP -WebMessageInfo_GROUP_PARTICIPANT_ACCEPT -WebMessageInfo_GROUP_PARTICIPANT_LINKED_GROUP_JOIN -WebMessageInfo_COMMUNITY_CREATE -WebMessageInfo_EPHEMERAL_KEEP_IN_CHAT -WebMessageInfo_GROUP_MEMBERSHIP_JOIN_APPROVAL_REQUEST -WebMessageInfo_GROUP_MEMBERSHIP_JOIN_APPROVAL_MODE -WebMessageInfo_INTEGRITY_UNLINK_PARENT_GROUP -WebMessageInfo_COMMUNITY_PARTICIPANT_PROMOTE -WebMessageInfo_COMMUNITY_PARTICIPANT_DEMOTE -WebMessageInfo_COMMUNITY_PARENT_GROUP_DELETED -WebMessageInfo_COMMUNITY_LINK_PARENT_GROUP_MEMBERSHIP_APPROVAL -WebMessageInfo_GROUP_PARTICIPANT_JOINED_GROUP_AND_PARENT_GROUP -WebMessageInfo_MASKED_THREAD_CREATED -WebMessageInfo_MASKED_THREAD_UNMASKED -WebMessageInfo_BIZ_CHAT_ASSIGNMENT -WebMessageInfo_CHAT_PSA -WebMessageInfo_CHAT_POLL_CREATION_MESSAGE -WebMessageInfo_CAG_MASKED_THREAD_CREATED -WebMessageInfo_COMMUNITY_PARENT_GROUP_SUBJECT_CHANGED -WebMessageInfo_CAG_INVITE_AUTO_ADD -WebMessageInfo_BIZ_CHAT_ASSIGNMENT_UNASSIGN -WebMessageInfo_CAG_INVITE_AUTO_JOINED -WebMessageInfo_SCHEDULED_CALL_START_MESSAGE -WebMessageInfo_COMMUNITY_INVITE_RICH -WebMessageInfo_COMMUNITY_INVITE_AUTO_ADD_RICH -WebMessageInfo_SUB_GROUP_INVITE_RICH -WebMessageInfo_SUB_GROUP_PARTICIPANT_ADD_RICH -WebMessageInfo_COMMUNITY_LINK_PARENT_GROUP_RICH -WebMessageInfo_COMMUNITY_PARTICIPANT_ADD_RICH -WebMessageInfo_SILENCED_UNKNOWN_CALLER_AUDIO -WebMessageInfo_SILENCED_UNKNOWN_CALLER_VIDEO -WebMessageInfo_GROUP_MEMBER_ADD_MODE -WebMessageInfo_GROUP_MEMBERSHIP_JOIN_APPROVAL_REQUEST_NON_ADMIN_ADD -WebMessageInfo_COMMUNITY_CHANGE_DESCRIPTION -WebMessageInfo_SENDER_INVITE -WebMessageInfo_RECEIVER_INVITE -WebMessageInfo_COMMUNITY_ALLOW_MEMBER_ADDED_GROUPS -WebMessageInfo_PINNED_MESSAGE_IN_CHAT -WebMessageInfo_PAYMENT_INVITE_SETUP_INVITER -WebMessageInfo_PAYMENT_INVITE_SETUP_INVITEE_RECEIVE_ONLY -WebMessageInfo_PAYMENT_INVITE_SETUP_INVITEE_SEND_AND_RECEIVE -WebMessageInfo_LINKED_GROUP_CALL_START -WebMessageInfo_REPORT_TO_ADMIN_ENABLED_STATUS -WebMessageInfo_EMPTY_SUBGROUP_CREATE -WebMessageInfo_SCHEDULED_CALL_CANCEL -WebMessageInfo_SUBGROUP_ADMIN_TRIGGERED_AUTO_ADD_RICH -WebMessageInfo_GROUP_CHANGE_RECENT_HISTORY_SHARING -WebMessageInfo_PAID_MESSAGE_SERVER_CAMPAIGN_ID -WebMessageInfo_GENERAL_CHAT_CREATE -WebMessageInfo_GENERAL_CHAT_ADD -WebMessageInfo_GENERAL_CHAT_AUTO_ADD_DISABLED -WebMessageInfo_SUGGESTED_SUBGROUP_ANNOUNCE -WebMessageInfo_BIZ_BOT_1P_MESSAGING_ENABLED -WebMessageInfo_CHANGE_USERNAME -WebMessageInfo_BIZ_COEX_PRIVACY_INIT_SELF -WebMessageInfo_BIZ_COEX_PRIVACY_TRANSITION_SELF -WebMessageInfo_SUPPORT_AI_EDUCATION -WebMessageInfo_BIZ_BOT_3P_MESSAGING_ENABLED -WebMessageInfo_REMINDER_SETUP_MESSAGE -WebMessageInfo_REMINDER_SENT_MESSAGE -WebMessageInfo_REMINDER_CANCEL_MESSAGE -WebMessageInfo_BIZ_COEX_PRIVACY_INIT -WebMessageInfo_BIZ_COEX_PRIVACY_TRANSITION -WebMessageInfo_GROUP_DEACTIVATED -WebMessageInfo_COMMUNITY_DEACTIVATE_SIBLING_GROUP -WebMessageInfo_ERROR -WebMessageInfo_PENDING -WebMessageInfo_SERVER_ACK -WebMessageInfo_DELIVERY_ACK -WebMessageInfo_READ -WebMessageInfo_PLAYED -WebMessageInfo_E2EE -WebMessageInfo_FB -WebMessageInfo_BSP -WebMessageInfo_BSP_AND_FB -WebFeatures_NOT_STARTED -WebFeatures_FORCE_UPGRADE -WebFeatures_DEVELOPMENT -WebFeatures_PRODUCTION -PinInChat_UNKNOWN_TYPE -PinInChat_PIN_FOR_ALL -PinInChat_UNPIN_FOR_ALL -PaymentInfo_UNKNOWN -PaymentInfo_PENDING_SETUP -PaymentInfo_PENDING_RECEIVER_SETUP -PaymentInfo_INIT -PaymentInfo_SUCCESS -PaymentInfo_COMPLETED -PaymentInfo_FAILED -PaymentInfo_FAILED_RISK -PaymentInfo_FAILED_PROCESSING -PaymentInfo_FAILED_RECEIVER_PROCESSING -PaymentInfo_FAILED_DA -PaymentInfo_FAILED_DA_FINAL -PaymentInfo_REFUNDED_TXN -PaymentInfo_REFUND_FAILED -PaymentInfo_REFUND_FAILED_PROCESSING -PaymentInfo_REFUND_FAILED_DA -PaymentInfo_EXPIRED_TXN -PaymentInfo_AUTH_CANCELED -PaymentInfo_AUTH_CANCEL_FAILED_PROCESSING -PaymentInfo_AUTH_CANCEL_FAILED -PaymentInfo_COLLECT_INIT -PaymentInfo_COLLECT_SUCCESS -PaymentInfo_COLLECT_FAILED -PaymentInfo_COLLECT_FAILED_RISK -PaymentInfo_COLLECT_REJECTED -PaymentInfo_COLLECT_EXPIRED -PaymentInfo_COLLECT_CANCELED -PaymentInfo_COLLECT_CANCELLING -PaymentInfo_IN_REVIEW -PaymentInfo_REVERSAL_SUCCESS -PaymentInfo_REVERSAL_PENDING -PaymentInfo_REFUND_PENDING -PaymentInfo_UNKNOWN_STATUS -PaymentInfo_PROCESSING -PaymentInfo_SENT -PaymentInfo_NEED_TO_ACCEPT -PaymentInfo_COMPLETE -PaymentInfo_COULD_NOT_COMPLETE -PaymentInfo_REFUNDED -PaymentInfo_EXPIRED -PaymentInfo_REJECTED -PaymentInfo_CANCELLED -PaymentInfo_WAITING_FOR_PAYER -PaymentInfo_WAITING -PaymentInfo_UNKNOWN_CURRENCY -PaymentInfo_INR -QP_TRUE -QP_FALSE -QP_UNKNOWN -QP_PASS_BY_DEFAULT -QP_FAIL_BY_DEFAULT -QP_AND -QP_OR -QP_NOR -DeviceCapabilities_NONE -DeviceCapabilities_MINIMAL -DeviceCapabilities_FULL -UserPassword_NONE -UserPassword_PBKDF2_HMAC_SHA512 -UserPassword_PBKDF2_HMAC_SHA384 -UserPassword_UTF8 diff --git a/vendor/go.mau.fi/whatsmeow/binary/proto/old-types.txt b/vendor/go.mau.fi/whatsmeow/binary/proto/old-types.txt deleted file mode 100644 index 5476b03167..0000000000 --- a/vendor/go.mau.fi/whatsmeow/binary/proto/old-types.txt +++ /dev/null @@ -1,421 +0,0 @@ -ADVEncryptionType -KeepType -PeerDataOperationRequestType -MediaVisibility -DeviceProps_PlatformType -ImageMessage_ImageSourceType -HistorySyncNotification_HistorySyncType -HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeComponent_DayOfWeekType -HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeComponent_CalendarType -GroupInviteMessage_GroupType -ExtendedTextMessage_PreviewType -ExtendedTextMessage_InviteLinkGroupType -ExtendedTextMessage_FontType -EventResponseMessage_EventResponseType -CallLogMessage_CallType -CallLogMessage_CallOutcome -ButtonsResponseMessage_Type -ButtonsMessage_HeaderType -ButtonsMessage_Button_Type -BotFeedbackMessage_BotFeedbackKindMultiplePositive -BotFeedbackMessage_BotFeedbackKindMultipleNegative -BotFeedbackMessage_BotFeedbackKind -BCallMessage_MediaType -HydratedTemplateButton_HydratedURLButton_WebviewPresentationType -DisappearingMode_Trigger -DisappearingMode_Initiator -ContextInfo_ExternalAdReplyInfo_MediaType -ContextInfo_AdReplyInfo_MediaType -ForwardedNewsletterMessageInfo_ContentType -BotPluginMetadata_SearchProvider -BotPluginMetadata_PluginType -PaymentBackground_Type -VideoMessage_Attribution -SecretEncryptedMessage_SecretEncType -ScheduledCallEditMessage_EditType -ScheduledCallCreationMessage_CallType -RequestWelcomeMessageMetadata_LocalChatState -ProtocolMessage_Type -PlaceholderMessage_PlaceholderType -PinInChatMessage_Type -PaymentInviteMessage_ServiceType -OrderMessage_OrderSurface -OrderMessage_OrderStatus -ListResponseMessage_ListType -ListMessage_ListType -InvoiceMessage_AttachmentType -InteractiveResponseMessage_Body_Format -InteractiveMessage_ShopMessage_Surface -PastParticipant_LeaveReason -HistorySync_HistorySyncType -HistorySync_BotAIWaitListState -GroupParticipant_Rank -Conversation_EndOfHistoryTransferType -MediaRetryNotification_ResultType -SyncdMutation_SyncdOperation -StatusPrivacyAction_StatusDistributionMode -MarketingMessageAction_MarketingMessagePrototypeType -PatchDebugData_Platform -CallLogRecord_SilenceReason -CallLogRecord_CallType -CallLogRecord_CallResult -BizIdentityInfo_VerifiedLevelValue -BizIdentityInfo_HostStorageType -BizIdentityInfo_ActualActorsType -BizAccountLinkInfo_HostStorageType -BizAccountLinkInfo_AccountType -ClientPayload_Product -ClientPayload_IOSAppExtension -ClientPayload_ConnectType -ClientPayload_ConnectReason -ClientPayload_WebInfo_WebSubPlatform -ClientPayload_UserAgent_ReleaseChannel -ClientPayload_UserAgent_Platform -ClientPayload_UserAgent_DeviceType -ClientPayload_DNSSource_DNSResolutionMethod -WebMessageInfo_StubType -WebMessageInfo_Status -WebMessageInfo_BizPrivacyStatus -WebFeatures_Flag -PinInChat_Type -PaymentInfo_TxnStatus -PaymentInfo_Status -PaymentInfo_Currency -QP_FilterResult -QP_FilterClientNotSupportedConfig -QP_ClauseType -DeviceCapabilities_ChatLockSupportLevel -UserPassword_Transformer -UserPassword_Encoding -ADVSignedKeyIndexList -ADVSignedDeviceIdentity -ADVSignedDeviceIdentityHMAC -ADVKeyIndexList -ADVDeviceIdentity -DeviceProps -InitialSecurityNotificationSettingSync -ImageMessage -HistorySyncNotification -HighlyStructuredMessage -GroupInviteMessage -FutureProofMessage -ExtendedTextMessage -EventResponseMessage -EventMessage -EncReactionMessage -EncEventResponseMessage -EncCommentMessage -DocumentMessage -DeviceSentMessage -DeclinePaymentRequestMessage -ContactsArrayMessage -ContactMessage -CommentMessage -Chat -CancelPaymentRequestMessage -Call -CallLogMessage -ButtonsResponseMessage -ButtonsResponseMessage_SelectedDisplayText -ButtonsMessage -ButtonsMessage_Text -ButtonsMessage_DocumentMessage -ButtonsMessage_ImageMessage -ButtonsMessage_VideoMessage -ButtonsMessage_LocationMessage -BotFeedbackMessage -BCallMessage -AudioMessage -AppStateSyncKey -AppStateSyncKeyShare -AppStateSyncKeyRequest -AppStateSyncKeyId -AppStateSyncKeyFingerprint -AppStateSyncKeyData -AppStateFatalExceptionNotification -MediaNotifyMessage -Location -InteractiveAnnotation -InteractiveAnnotation_Location -InteractiveAnnotation_Newsletter -HydratedTemplateButton -HydratedTemplateButton_QuickReplyButton -HydratedTemplateButton_UrlButton -HydratedTemplateButton_CallButton -GroupMention -DisappearingMode -DeviceListMetadata -ContextInfo -ForwardedNewsletterMessageInfo -BotSuggestedPromptMetadata -BotSearchMetadata -BotPluginMetadata -BotMetadata -BotAvatarMetadata -ActionLink -TemplateButton -TemplateButton_QuickReplyButton_ -TemplateButton_UrlButton -TemplateButton_CallButton_ -Point -PaymentBackground -Money -Message -MessageSecretMessage -MessageContextInfo -VideoMessage -TemplateMessage -TemplateMessage_FourRowTemplate_ -TemplateMessage_HydratedFourRowTemplate_ -TemplateMessage_InteractiveMessageTemplate -TemplateButtonReplyMessage -StickerSyncRMRMessage -StickerMessage -SenderKeyDistributionMessage -SendPaymentMessage -SecretEncryptedMessage -ScheduledCallEditMessage -ScheduledCallCreationMessage -RequestWelcomeMessageMetadata -RequestPhoneNumberMessage -RequestPaymentMessage -ReactionMessage -ProtocolMessage -ProductMessage -PollVoteMessage -PollUpdateMessage -PollUpdateMessageMetadata -PollEncValue -PollCreationMessage -PlaceholderMessage -PinInChatMessage -PeerDataOperationRequestResponseMessage -PeerDataOperationRequestMessage -PaymentInviteMessage -OrderMessage -NewsletterAdminInviteMessage -MessageHistoryBundle -LocationMessage -LiveLocationMessage -ListResponseMessage -ListMessage -KeepInChatMessage -InvoiceMessage -InteractiveResponseMessage -InteractiveResponseMessage_NativeFlowResponseMessage_ -InteractiveMessage -InteractiveMessage_ShopStorefrontMessage -InteractiveMessage_CollectionMessage_ -InteractiveMessage_NativeFlowMessage_ -InteractiveMessage_CarouselMessage_ -EphemeralSetting -WallpaperSettings -StickerMetadata -Pushname -PhoneNumberToLIDMapping -PastParticipants -PastParticipant -NotificationSettings -HistorySync -HistorySyncMsg -GroupParticipant -GlobalSettings -Conversation -AvatarUserSettings -AutoDownloadSettings -ServerErrorReceipt -MediaRetryNotification -MessageKey -SyncdVersion -SyncdValue -SyncdSnapshot -SyncdRecord -SyncdPatch -SyncdMutations -SyncdMutation -SyncdIndex -KeyId -ExternalBlobReference -ExitCode -SyncActionValue -WamoUserIdentifierAction -UserStatusMuteAction -UnarchiveChatsSetting -TimeFormatAction -SyncActionMessage -SyncActionMessageRange -SubscriptionAction -StickerAction -StatusPrivacyAction -StarAction -SecurityNotificationSetting -RemoveRecentStickerAction -RecentEmojiWeightsAction -QuickReplyAction -PushNameSetting -PrivacySettingRelayAllCalls -PrivacySettingDisableLinkPreviewsAction -PrimaryVersionAction -PrimaryFeature -PnForLidChatAction -PinAction -PaymentInfoAction -NuxAction -MuteAction -MarketingMessageBroadcastAction -MarketingMessageAction -MarkChatAsReadAction -LockChatAction -LocaleSetting -LabelReorderingAction -LabelEditAction -LabelAssociationAction -KeyExpiration -ExternalWebBetaAction -DeleteMessageForMeAction -DeleteIndividualCallLogAction -DeleteChatAction -CustomPaymentMethodsAction -CustomPaymentMethod -CustomPaymentMethodMetadata -ContactAction -ClearChatAction -ChatAssignmentOpenedStatusAction -ChatAssignmentAction -CallLogAction -BotWelcomeRequestAction -ArchiveChatAction -AndroidUnsupportedActions -AgentAction -SyncActionData -RecentEmojiWeight -PatchDebugData -CallLogRecord -VerifiedNameCertificate -LocalizedName -BizIdentityInfo -BizAccountPayload -BizAccountLinkInfo -HandshakeMessage -HandshakeServerHello -HandshakeClientHello -HandshakeClientFinish -ClientPayload -WebNotificationsInfo -WebMessageInfo -WebFeatures -UserReceipt -StatusPSA -ReportingTokenInfo -Reaction -PremiumMessageInfo -PollUpdate -PollAdditionalMetadata -PinInChat -PhotoChange -PaymentInfo -NotificationMessageInfo -MessageAddOnContextInfo -MediaData -KeepInChat -EventResponse -EventAdditionalMetadata -CommentMetadata -NoiseCertificate -CertChain -QP -ChatLockSettings -DeviceCapabilities -UserPassword -DeviceProps_HistorySyncConfig -DeviceProps_AppVersion -HighlyStructuredMessage_HSMLocalizableParameter -HighlyStructuredMessage_HSMLocalizableParameter_Currency -HighlyStructuredMessage_HSMLocalizableParameter_DateTime -HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime -HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_Component -HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_UnixEpoch -HighlyStructuredMessage_HSMLocalizableParameter_HSMCurrency -HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeUnixEpoch -HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeComponent -CallLogMessage_CallParticipant -ButtonsMessage_Button -ButtonsMessage_Button_NativeFlowInfo -ButtonsMessage_Button_ButtonText -HydratedTemplateButton_HydratedURLButton -HydratedTemplateButton_HydratedQuickReplyButton -HydratedTemplateButton_HydratedCallButton -ContextInfo_UTMInfo -ContextInfo_ExternalAdReplyInfo -ContextInfo_DataSharingContext -ContextInfo_BusinessMessageForwardInfo -ContextInfo_AdReplyInfo -TemplateButton_URLButton -TemplateButton_QuickReplyButton -TemplateButton_CallButton -PaymentBackground_MediaData -TemplateMessage_HydratedFourRowTemplate -TemplateMessage_HydratedFourRowTemplate_DocumentMessage -TemplateMessage_HydratedFourRowTemplate_HydratedTitleText -TemplateMessage_HydratedFourRowTemplate_ImageMessage -TemplateMessage_HydratedFourRowTemplate_VideoMessage -TemplateMessage_HydratedFourRowTemplate_LocationMessage -TemplateMessage_FourRowTemplate -TemplateMessage_FourRowTemplate_DocumentMessage -TemplateMessage_FourRowTemplate_HighlyStructuredMessage -TemplateMessage_FourRowTemplate_ImageMessage -TemplateMessage_FourRowTemplate_VideoMessage -TemplateMessage_FourRowTemplate_LocationMessage -ProductMessage_ProductSnapshot -ProductMessage_CatalogSnapshot -PollCreationMessage_Option -PeerDataOperationRequestResponseMessage_PeerDataOperationResult -PeerDataOperationRequestResponseMessage_PeerDataOperationResult_PlaceholderMessageResendResponse -PeerDataOperationRequestResponseMessage_PeerDataOperationResult_LinkPreviewResponse -PeerDataOperationRequestResponseMessage_PeerDataOperationResult_LinkPreviewResponse_LinkPreviewHighQualityThumbnail -PeerDataOperationRequestMessage_RequestUrlPreview -PeerDataOperationRequestMessage_RequestStickerReupload -PeerDataOperationRequestMessage_PlaceholderMessageResendRequest -PeerDataOperationRequestMessage_HistorySyncOnDemandRequest -ListResponseMessage_SingleSelectReply -ListMessage_Section -ListMessage_Row -ListMessage_Product -ListMessage_ProductSection -ListMessage_ProductListInfo -ListMessage_ProductListHeaderImage -InteractiveResponseMessage_NativeFlowResponseMessage -InteractiveResponseMessage_Body -InteractiveMessage_NativeFlowMessage -InteractiveMessage_Header -InteractiveMessage_Header_DocumentMessage -InteractiveMessage_Header_ImageMessage -InteractiveMessage_Header_JpegThumbnail -InteractiveMessage_Header_VideoMessage -InteractiveMessage_Header_LocationMessage -InteractiveMessage_Header_ProductMessage -InteractiveMessage_Footer -InteractiveMessage_CollectionMessage -InteractiveMessage_CarouselMessage -InteractiveMessage_Body -InteractiveMessage_ShopMessage -InteractiveMessage_NativeFlowMessage_NativeFlowButton -CallLogRecord_ParticipantInfo -VerifiedNameCertificate_Details -ClientPayload_WebInfo -ClientPayload_UserAgent -ClientPayload_InteropData -ClientPayload_DevicePairingRegistrationData -ClientPayload_DNSSource -ClientPayload_WebInfo_WebdPayload -ClientPayload_UserAgent_AppVersion -NoiseCertificate_Details -CertChain_NoiseCertificate -CertChain_NoiseCertificate_Details -QP_Filter -QP_FilterParameters -QP_FilterClause -UserPassword_TransformerArg -UserPassword_TransformerArg_Value -UserPassword_TransformerArg_Value_AsBlob -UserPassword_TransformerArg_Value_AsUnsignedInteger diff --git a/vendor/go.mau.fi/whatsmeow/broadcast.go b/vendor/go.mau.fi/whatsmeow/broadcast.go index d3bbf8e647..d3768297d2 100644 --- a/vendor/go.mau.fi/whatsmeow/broadcast.go +++ b/vendor/go.mau.fi/whatsmeow/broadcast.go @@ -7,6 +7,7 @@ package whatsmeow import ( + "context" "errors" "fmt" @@ -14,11 +15,11 @@ import ( "go.mau.fi/whatsmeow/types" ) -func (cli *Client) getBroadcastListParticipants(jid types.JID) ([]types.JID, error) { +func (cli *Client) getBroadcastListParticipants(ctx context.Context, jid types.JID) ([]types.JID, error) { var list []types.JID var err error if jid == types.StatusBroadcastJID { - list, err = cli.getStatusBroadcastRecipients() + list, err = cli.getStatusBroadcastRecipients(ctx) } else { return nil, ErrBroadcastListUnsupported } @@ -37,19 +38,14 @@ func (cli *Client) getBroadcastListParticipants(jid types.JID) ([]types.JID, err break } } - if selfIndex >= 0 { - if cli.DontSendSelfBroadcast { - list[selfIndex] = list[len(list)-1] - list = list[:len(list)-1] - } - } else if !cli.DontSendSelfBroadcast { + if selfIndex < 0 { list = append(list, ownID) } return list, nil } -func (cli *Client) getStatusBroadcastRecipients() ([]types.JID, error) { - statusPrivacyOptions, err := cli.GetStatusPrivacy() +func (cli *Client) getStatusBroadcastRecipients(ctx context.Context) ([]types.JID, error) { + statusPrivacyOptions, err := cli.GetStatusPrivacy(ctx) if err != nil { return nil, fmt.Errorf("failed to get status privacy: %w", err) } @@ -60,7 +56,7 @@ func (cli *Client) getStatusBroadcastRecipients() ([]types.JID, error) { } // Blacklist or all contacts mode. Find all contacts from database, then filter them appropriately. - contacts, err := cli.Store.Contacts.GetAllContacts() + contacts, err := cli.Store.Contacts.GetAllContacts(ctx) if err != nil { return nil, fmt.Errorf("failed to get contact list from db: %w", err) } @@ -94,8 +90,8 @@ var DefaultStatusPrivacy = []types.StatusPrivacy{{ // GetStatusPrivacy gets the user's status privacy settings (who to send status broadcasts to). // // There can be multiple different stored settings, the first one is always the default. -func (cli *Client) GetStatusPrivacy() ([]types.StatusPrivacy, error) { - resp, err := cli.sendIQ(infoQuery{ +func (cli *Client) GetStatusPrivacy(ctx context.Context) ([]types.StatusPrivacy, error) { + resp, err := cli.sendIQ(ctx, infoQuery{ Namespace: "status", Type: iqGet, To: types.ServerJID, diff --git a/vendor/go.mau.fi/whatsmeow/call.go b/vendor/go.mau.fi/whatsmeow/call.go index 7a6ffcb2d5..09bc069636 100644 --- a/vendor/go.mau.fi/whatsmeow/call.go +++ b/vendor/go.mau.fi/whatsmeow/call.go @@ -7,13 +7,15 @@ package whatsmeow import ( + "context" + waBinary "go.mau.fi/whatsmeow/binary" "go.mau.fi/whatsmeow/types" "go.mau.fi/whatsmeow/types/events" ) -func (cli *Client) handleCallEvent(node *waBinary.Node) { - go cli.sendAck(node) +func (cli *Client) handleCallEvent(ctx context.Context, node *waBinary.Node) { + defer cli.maybeDeferredAck(ctx, node)() if len(node.GetChildren()) != 1 { cli.dispatchEvent(&events.UnknownCallEvent{Node: node}) @@ -27,6 +29,13 @@ func (cli *Client) handleCallEvent(node *waBinary.Node) { Timestamp: ag.UnixTime("t"), CallCreator: cag.JID("call-creator"), CallID: cag.String("call-id"), + GroupJID: cag.OptionalJIDOrEmpty("group-jid"), + } + if basicMeta.CallCreator.Server == types.HiddenUserServer { + basicMeta.CallCreatorAlt = cag.OptionalJIDOrEmpty("caller_pn") + } else { + // This may not actually exist + basicMeta.CallCreatorAlt = cag.OptionalJIDOrEmpty("caller_lid") } switch child.Tag { case "offer": @@ -83,7 +92,30 @@ func (cli *Client) handleCallEvent(node *waBinary.Node) { Reason: cag.String("reason"), Data: &child, }) + case "reject": + cli.dispatchEvent(&events.CallReject{ + BasicCallMeta: basicMeta, + Data: &child, + }) default: cli.dispatchEvent(&events.UnknownCallEvent{Node: node}) } } + +// RejectCall reject an incoming call. +func (cli *Client) RejectCall(ctx context.Context, callFrom types.JID, callID string) error { + ownID := cli.getOwnID() + if ownID.IsEmpty() { + return ErrNotLoggedIn + } + ownID, callFrom = ownID.ToNonAD(), callFrom.ToNonAD() + return cli.sendNode(ctx, waBinary.Node{ + Tag: "call", + Attrs: waBinary.Attrs{"id": cli.GenerateMessageID(), "from": ownID, "to": callFrom}, + Content: []waBinary.Node{{ + Tag: "reject", + Attrs: waBinary.Attrs{"call-id": callID, "call-creator": callFrom, "count": "0"}, + Content: nil, + }}, + }) +} diff --git a/vendor/go.mau.fi/whatsmeow/client.go b/vendor/go.mau.fi/whatsmeow/client.go index 907b567913..e11f939564 100644 --- a/vendor/go.mau.fi/whatsmeow/client.go +++ b/vendor/go.mau.fi/whatsmeow/client.go @@ -12,20 +12,26 @@ import ( "encoding/hex" "errors" "fmt" + "net" "net/http" "net/url" "runtime/debug" + "strconv" "sync" "sync/atomic" "time" - "github.com/gorilla/websocket" + "go.mau.fi/util/exhttp" + "go.mau.fi/util/exsync" + "go.mau.fi/util/ptr" "go.mau.fi/util/random" "golang.org/x/net/proxy" "go.mau.fi/whatsmeow/appstate" waBinary "go.mau.fi/whatsmeow/binary" - waProto "go.mau.fi/whatsmeow/binary/proto" + "go.mau.fi/whatsmeow/proto/waE2E" + "go.mau.fi/whatsmeow/proto/waWa6" + "go.mau.fi/whatsmeow/proto/waWeb" "go.mau.fi/whatsmeow/socket" "go.mau.fi/whatsmeow/store" "go.mau.fi/whatsmeow/types" @@ -35,13 +41,14 @@ import ( ) // EventHandler is a function that can handle events from WhatsApp. -type EventHandler func(evt interface{}) -type nodeHandler func(node *waBinary.Node) +type EventHandler func(evt any) +type EventHandlerWithSuccessStatus func(evt any) bool +type nodeHandler func(ctx context.Context, node *waBinary.Node) var nextHandlerID uint32 type wrappedEventHandler struct { - fn EventHandler + fn EventHandlerWithSuccessStatus id uint32 } @@ -62,19 +69,28 @@ type Client struct { socketWait chan struct{} isLoggedIn atomic.Bool - expectedDisconnect atomic.Bool + expectedDisconnect *exsync.Event + forceAutoReconnect atomic.Bool EnableAutoReconnect bool + InitialAutoReconnect bool LastSuccessfulConnect time.Time AutoReconnectErrors int // AutoReconnectHook is called when auto-reconnection fails. If the function returns false, // the client will not attempt to reconnect. The number of retries can be read from AutoReconnectErrors. AutoReconnectHook func(error) bool + // If SynchronousAck is set, acks for messages will only be sent after all event handlers return. + SynchronousAck bool + EnableDecryptedEventBuffer bool + lastDecryptedBufferClear time.Time + + DisableLoginAutoReconnect bool sendActiveReceipts atomic.Uint32 // EmitAppStateEventsOnFullSync can be set to true if you want to get app state events emitted // even when re-syncing the whole state. EmitAppStateEventsOnFullSync bool + AppStateDebugLogs bool AutomaticMessageRerequestFromPhone bool pendingPhoneRerequests map[types.MessageID]context.CancelFunc @@ -83,8 +99,9 @@ type Client struct { appStateProc *appstate.Processor appStateSyncLock sync.Mutex - historySyncNotifications chan *waProto.HistorySyncNotification + historySyncNotifications chan *waE2E.HistorySyncNotification historySyncHandlerStarted atomic.Bool + ManualHistorySyncDownload bool uploadPreKeysLock sync.Mutex lastPreKeyUpload time.Time @@ -113,10 +130,10 @@ type Client struct { privacySettingsCache atomic.Value - groupParticipantsCache map[types.JID][]types.JID - groupParticipantsCacheLock sync.Mutex - userDevicesCache map[types.JID]deviceCache - userDevicesCacheLock sync.Mutex + groupCache map[types.JID]*groupMetaCache + groupCacheLock sync.Mutex + userDevicesCache map[types.JID]deviceCache + userDevicesCacheLock sync.Mutex recentMessagesMap map[recentMessageKey]RecentMessage recentMessagesList [recentMessagesSize]recentMessageKey @@ -127,10 +144,16 @@ type Client struct { sessionRecreateHistoryLock sync.Mutex // GetMessageForRetry is used to find the source message for handling retry receipts // when the message is not found in the recently sent message cache. - GetMessageForRetry func(requester, to types.JID, id types.MessageID) *waProto.Message + // Note: in DMs, the "to" field may be different from what you originally sent to (LID vs phone number), + // make sure to check both if necessary. + GetMessageForRetry func(requester, to types.JID, id types.MessageID) *waE2E.Message // PreRetryCallback is called before a retry receipt is accepted. // If it returns false, the accepting will be cancelled and the retry receipt will be ignored. - PreRetryCallback func(receipt *events.Receipt, id types.MessageID, retryCount int, msg *waProto.Message) bool + PreRetryCallback func(receipt *events.Receipt, id types.MessageID, retryCount int, msg *waE2E.Message) bool + // Should whatsmeow store recently sent messages in the database so that retry receipts can be accepted + // even if the process is restarted? If false, only the in-memory cache and GetMessageForRetry will be used. + UseRetryMessageStore bool + lastRetryStoreClear time.Time // PrePairCallback is called before pairing is completed. If it returns false, the pairing will be cancelled and // the client will disconnect. @@ -138,29 +161,30 @@ type Client struct { // GetClientPayload is called to get the client payload for connecting to the server. // This should NOT be used for WhatsApp (to change the OS name, update fields in store.BaseClientPayload directly). - GetClientPayload func() *waProto.ClientPayload + GetClientPayload func() *waWa6.ClientPayload // Should untrusted identity errors be handled automatically? If true, the stored identity and existing signal // sessions will be removed on untrusted identity errors, and an events.IdentityChange will be dispatched. // If false, decrypting a message from untrusted devices will fail. AutoTrustIdentity bool - // Should sending to own devices be skipped when sending broadcasts? - // This works around a bug in the WhatsApp android app where it crashes if you send a status message from a linked device. - DontSendSelfBroadcast bool - // Should SubscribePresence return an error if no privacy token is stored for the user? ErrorOnSubscribePresenceWithoutToken bool + SendReportingTokens bool + + BackgroundEventCtx context.Context + phoneLinkingCache *phoneLinkingCache uniqueID string idCounter atomic.Uint64 - proxy Proxy - socksProxy proxy.Dialer - proxyOnlyLogin bool - http *http.Client + serverTimeOffset atomic.Int64 + + mediaHTTP *http.Client + websocketHTTP *http.Client + preLoginHTTP *http.Client // This field changes the client to act like a Messenger client instead of a WhatsApp one. // @@ -168,12 +192,19 @@ type Client struct { // separate library for all the non-e2ee-related stuff like logging in. // The library is currently embedded in mautrix-meta (https://github.com/mautrix/meta), but may be separated later. MessengerConfig *MessengerConfig - RefreshCAT func() error + RefreshCAT func(context.Context) error +} + +type groupMetaCache struct { + AddressingMode types.AddressingMode + CommunityAnnouncementGroup bool + Members []types.JID } type MessengerConfig struct { - UserAgent string - BaseURL string + UserAgent string + BaseURL string + WebsocketURL string } // Size of buffer for the channel that all incoming XML nodes go through. @@ -201,40 +232,44 @@ func NewClient(deviceStore *store.Device, log waLog.Logger) *Client { log = waLog.Noop } uniqueIDPrefix := random.Bytes(2) + baseHTTPClient := &http.Client{ + Transport: (http.DefaultTransport.(*http.Transport)).Clone(), + } cli := &Client{ - http: &http.Client{ - Transport: (http.DefaultTransport.(*http.Transport)).Clone(), - }, - proxy: http.ProxyFromEnvironment, - Store: deviceStore, - Log: log, - recvLog: log.Sub("Recv"), - sendLog: log.Sub("Send"), - uniqueID: fmt.Sprintf("%d.%d-", uniqueIDPrefix[0], uniqueIDPrefix[1]), - responseWaiters: make(map[string]chan<- *waBinary.Node), - eventHandlers: make([]wrappedEventHandler, 0, 1), - messageRetries: make(map[string]int), - handlerQueue: make(chan *waBinary.Node, handlerQueueSize), - appStateProc: appstate.NewProcessor(deviceStore, log.Sub("AppState")), - socketWait: make(chan struct{}), + mediaHTTP: ptr.Clone(baseHTTPClient), + websocketHTTP: ptr.Clone(baseHTTPClient), + preLoginHTTP: ptr.Clone(baseHTTPClient), + Store: deviceStore, + Log: log, + recvLog: log.Sub("Recv"), + sendLog: log.Sub("Send"), + uniqueID: fmt.Sprintf("%d.%d-", uniqueIDPrefix[0], uniqueIDPrefix[1]), + responseWaiters: make(map[string]chan<- *waBinary.Node), + eventHandlers: make([]wrappedEventHandler, 0, 1), + messageRetries: make(map[string]int), + handlerQueue: make(chan *waBinary.Node, handlerQueueSize), + appStateProc: appstate.NewProcessor(deviceStore, log.Sub("AppState")), + socketWait: make(chan struct{}), + expectedDisconnect: exsync.NewEvent(), incomingRetryRequestCounter: make(map[incomingRetryKey]int), - historySyncNotifications: make(chan *waProto.HistorySyncNotification, 32), + historySyncNotifications: make(chan *waE2E.HistorySyncNotification, 32), - groupParticipantsCache: make(map[types.JID][]types.JID), - userDevicesCache: make(map[types.JID]deviceCache), + groupCache: make(map[types.JID]*groupMetaCache), + userDevicesCache: make(map[types.JID]deviceCache), recentMessagesMap: make(map[recentMessageKey]RecentMessage, recentMessagesSize), sessionRecreateHistory: make(map[types.JID]time.Time), - GetMessageForRetry: func(requester, to types.JID, id types.MessageID) *waProto.Message { return nil }, + GetMessageForRetry: func(requester, to types.JID, id types.MessageID) *waE2E.Message { return nil }, appStateKeyRequests: make(map[string]time.Time), pendingPhoneRerequests: make(map[types.MessageID]context.CancelFunc), - EnableAutoReconnect: true, - AutoTrustIdentity: true, - DontSendSelfBroadcast: true, + EnableAutoReconnect: true, + AutoTrustIdentity: true, + + BackgroundEventCtx: context.Background(), } cli.nodeHandlers = map[string]nodeHandler{ "message": cli.handleEncryptedMessage, @@ -269,7 +304,10 @@ func (cli *Client) SetProxyAddress(addr string, opts ...SetProxyOptions) error { if parsed.Scheme == "http" || parsed.Scheme == "https" { cli.SetProxy(http.ProxyURL(parsed), opts...) } else if parsed.Scheme == "socks5" { - px, err := proxy.FromURL(parsed, proxy.Direct) + px, err := proxy.FromURL(parsed, &net.Dialer{ + Timeout: 30 * time.Second, + KeepAlive: 30 * time.Second, + }) if err != nil { return err } @@ -307,21 +345,16 @@ func (cli *Client) SetProxy(proxy Proxy, opts ...SetProxyOptions) { if len(opts) > 0 { opt = opts[0] } - if !opt.NoWebsocket { - cli.proxy = proxy - cli.socksProxy = nil - } - if !opt.NoMedia { - transport := cli.http.Transport.(*http.Transport) - transport.Proxy = proxy - transport.Dial = nil - transport.DialContext = nil - } + transport := (http.DefaultTransport.(*http.Transport)).Clone() + transport.Proxy = proxy + cli.setTransport(transport, opt) } type SetProxyOptions struct { // If NoWebsocket is true, the proxy won't be used for the websocket NoWebsocket bool + // If OnlyLogin is true, the proxy will be used for the pre-login websocket, but not the post-login one + OnlyLogin bool // If NoMedia is true, the proxy won't be used for media uploads/downloads NoMedia bool } @@ -334,27 +367,40 @@ func (cli *Client) SetSOCKSProxy(px proxy.Dialer, opts ...SetProxyOptions) { if len(opts) > 0 { opt = opts[0] } + transport := (http.DefaultTransport.(*http.Transport)).Clone() + pxc := px.(proxy.ContextDialer) + transport.DialContext = pxc.DialContext + cli.setTransport(transport, opt) +} + +func (cli *Client) setTransport(transport *http.Transport, opt SetProxyOptions) { if !opt.NoWebsocket { - cli.socksProxy = px - cli.proxy = nil + cli.preLoginHTTP.Transport = transport + if !opt.OnlyLogin { + cli.websocketHTTP.Transport = transport + } } if !opt.NoMedia { - transport := cli.http.Transport.(*http.Transport) - transport.Proxy = nil - transport.Dial = cli.socksProxy.Dial - contextDialer, ok := cli.socksProxy.(proxy.ContextDialer) - if ok { - transport.DialContext = contextDialer.DialContext - } else { - transport.DialContext = nil - } + cli.mediaHTTP.Transport = transport } } -// ToggleProxyOnlyForLogin changes whether the proxy set with SetProxy or related methods -// is only used for the pre-login websocket and not authenticated websockets. -func (cli *Client) ToggleProxyOnlyForLogin(only bool) { - cli.proxyOnlyLogin = only +// SetMediaHTTPClient sets the HTTP client used to download media. +// This will overwrite any set proxy calls. +func (cli *Client) SetMediaHTTPClient(h *http.Client) { + cli.mediaHTTP = h +} + +// SetWebsocketHTTPClient sets the HTTP client used to establish the websocket connection for logged-in sessions. +// This will overwrite any set proxy calls. +func (cli *Client) SetWebsocketHTTPClient(h *http.Client) { + cli.websocketHTTP = h +} + +// SetPreLoginHTTPClient sets the HTTP client used to establish the websocket connection before login. +// This will overwrite any set proxy calls. +func (cli *Client) SetPreLoginHTTPClient(h *http.Client) { + cli.preLoginHTTP = h } func (cli *Client) getSocketWaitChan() <-chan struct{} { @@ -372,14 +418,23 @@ func (cli *Client) closeSocketWaitChan() { } func (cli *Client) getOwnID() types.JID { - id := cli.Store.ID - if id == nil { + if cli == nil { return types.EmptyJID } - return *id + return cli.Store.GetJID() +} + +func (cli *Client) getOwnLID() types.JID { + if cli == nil { + return types.EmptyJID + } + return cli.Store.GetLID() } func (cli *Client) WaitForConnection(timeout time.Duration) bool { + if cli == nil { + return false + } timeoutChan := time.After(timeout) cli.socketLock.RLock() for cli.socket == nil || !cli.socket.IsConnected() || !cli.IsLoggedIn() { @@ -389,6 +444,8 @@ func (cli *Client) WaitForConnection(timeout time.Duration) bool { case <-ch: case <-timeoutChan: return false + case <-cli.expectedDisconnect.GetChan(): + return false } cli.socketLock.RLock() } @@ -399,8 +456,51 @@ func (cli *Client) WaitForConnection(timeout time.Duration) bool { // Connect connects the client to the WhatsApp web websocket. After connection, it will either // authenticate if there's data in the device store, or emit a QREvent to set up a new link. func (cli *Client) Connect() error { + return cli.ConnectContext(cli.BackgroundEventCtx) +} + +func isRetryableConnectError(err error) bool { + if exhttp.IsNetworkError(err) { + return true + } + + var statusErr socket.ErrWithStatusCode + if errors.As(err, &statusErr) { + switch statusErr.StatusCode { + case 408, 500, 501, 502, 503, 504: + return true + } + } + + return false +} + +func (cli *Client) ConnectContext(ctx context.Context) error { + if cli == nil { + return ErrClientIsNil + } + + cli.socketLock.Lock() + defer cli.socketLock.Unlock() + + err := cli.unlockedConnect(ctx) + if isRetryableConnectError(err) && cli.InitialAutoReconnect && cli.EnableAutoReconnect { + cli.Log.Errorf("Initial connection failed but reconnecting in background (%v)", err) + go cli.dispatchEvent(&events.Disconnected{}) + go cli.autoReconnect(ctx) + return nil + } + return err +} + +func (cli *Client) connect(ctx context.Context) error { cli.socketLock.Lock() defer cli.socketLock.Unlock() + + return cli.unlockedConnect(ctx) +} + +func (cli *Client) unlockedConnect(ctx context.Context) error { if cli.socket != nil { if !cli.socket.IsConnected() { cli.unlockedDisconnect() @@ -410,55 +510,49 @@ func (cli *Client) Connect() error { } cli.resetExpectedDisconnect() - wsDialer := websocket.Dialer{} - if !cli.proxyOnlyLogin || cli.Store.ID == nil { - if cli.proxy != nil { - wsDialer.Proxy = cli.proxy - } else if cli.socksProxy != nil { - wsDialer.NetDial = cli.socksProxy.Dial - contextDialer, ok := cli.socksProxy.(proxy.ContextDialer) - if ok { - wsDialer.NetDialContext = contextDialer.DialContext - } - } + client := cli.websocketHTTP + if cli.Store.ID == nil { + client = cli.preLoginHTTP } - fs := socket.NewFrameSocket(cli.Log.Sub("Socket"), wsDialer) + fs := socket.NewFrameSocket(cli.Log.Sub("Socket"), client) if cli.MessengerConfig != nil { - fs.URL = "wss://web-chat-e2ee.facebook.com/ws/chat" + fs.URL = cli.MessengerConfig.WebsocketURL fs.HTTPHeaders.Set("Origin", cli.MessengerConfig.BaseURL) fs.HTTPHeaders.Set("User-Agent", cli.MessengerConfig.UserAgent) - fs.HTTPHeaders.Set("Sec-Fetch-Dest", "empty") - fs.HTTPHeaders.Set("Sec-Fetch-Mode", "websocket") - fs.HTTPHeaders.Set("Sec-Fetch-Site", "cross-site") + fs.HTTPHeaders.Set("Cache-Control", "no-cache") + fs.HTTPHeaders.Set("Pragma", "no-cache") + //fs.HTTPHeaders.Set("Sec-Fetch-Dest", "empty") + //fs.HTTPHeaders.Set("Sec-Fetch-Mode", "websocket") + //fs.HTTPHeaders.Set("Sec-Fetch-Site", "cross-site") } - if err := fs.Connect(); err != nil { + if err := fs.Connect(ctx); err != nil { fs.Close(0) return err - } else if err = cli.doHandshake(fs, *keys.NewKeyPair()); err != nil { + } else if err = cli.doHandshake(ctx, fs, *keys.NewKeyPair()); err != nil { fs.Close(0) return fmt.Errorf("noise handshake failed: %w", err) } - go cli.keepAliveLoop(cli.socket.Context()) - go cli.handlerQueueLoop(cli.socket.Context()) + go cli.keepAliveLoop(ctx, fs.Context()) + go cli.handlerQueueLoop(ctx, fs.Context()) return nil } // IsLoggedIn returns true after the client is successfully connected and authenticated on WhatsApp. func (cli *Client) IsLoggedIn() bool { - return cli.isLoggedIn.Load() + return cli != nil && cli.isLoggedIn.Load() } -func (cli *Client) onDisconnect(ns *socket.NoiseSocket, remote bool) { - ns.Stop(false) +func (cli *Client) onDisconnect(ctx context.Context, ns *socket.NoiseSocket, remote bool) { + ns.Stop(false, false) cli.socketLock.Lock() defer cli.socketLock.Unlock() if cli.socket == ns { cli.socket = nil cli.clearResponseWaiters(xmlStreamEndNode) - if !cli.isExpectedDisconnect() && remote { + if !cli.isExpectedDisconnect() && (cli.forceAutoReconnect.Swap(false) || remote) { cli.Log.Debugf("Emitting Disconnected event") go cli.dispatchEvent(&events.Disconnected{}) - go cli.autoReconnect() + go cli.autoReconnect(ctx) } else if remote { cli.Log.Debugf("OnDisconnect() called, but it was expected, so not emitting event") } else { @@ -470,18 +564,20 @@ func (cli *Client) onDisconnect(ns *socket.NoiseSocket, remote bool) { } func (cli *Client) expectDisconnect() { - cli.expectedDisconnect.Store(true) + cli.forceAutoReconnect.Store(false) + cli.expectedDisconnect.Set() } func (cli *Client) resetExpectedDisconnect() { - cli.expectedDisconnect.Store(false) + cli.forceAutoReconnect.Store(false) + cli.expectedDisconnect.Clear() } func (cli *Client) isExpectedDisconnect() bool { - return cli.expectedDisconnect.Load() + return cli.expectedDisconnect.IsSet() } -func (cli *Client) autoReconnect() { +func (cli *Client) autoReconnect(ctx context.Context) { if !cli.EnableAutoReconnect || cli.Store.ID == nil { return } @@ -489,12 +585,22 @@ func (cli *Client) autoReconnect() { autoReconnectDelay := time.Duration(cli.AutoReconnectErrors) * 2 * time.Second cli.Log.Debugf("Automatically reconnecting after %v", autoReconnectDelay) cli.AutoReconnectErrors++ - time.Sleep(autoReconnectDelay) - err := cli.Connect() + if cli.expectedDisconnect.WaitTimeoutCtx(ctx, autoReconnectDelay) == nil { + cli.Log.Debugf("Cancelling automatic reconnect due to expected disconnect") + return + } else if ctx.Err() != nil { + cli.Log.Debugf("Cancelling automatic reconnect due to context cancellation") + return + } + err := cli.connect(ctx) if errors.Is(err, ErrAlreadyConnected) { cli.Log.Debugf("Connect() said we're already connected after autoreconnect sleep") return } else if err != nil { + if cli.expectedDisconnect.IsSet() { + cli.Log.Debugf("Autoreconnect failed, but disconnect was expected, not reconnecting") + return + } cli.Log.Errorf("Error reconnecting after autoreconnect sleep: %v", err) if cli.AutoReconnectHook != nil && !cli.AutoReconnectHook(err) { cli.Log.Debugf("AutoReconnectHook returned false, not reconnecting") @@ -509,6 +615,9 @@ func (cli *Client) autoReconnect() { // IsConnected checks if the client is connected to the WhatsApp web websocket. // Note that this doesn't check if the client is authenticated. See the IsLoggedIn field for that. func (cli *Client) IsConnected() bool { + if cli == nil { + return false + } cli.socketLock.RLock() connected := cli.socket != nil && cli.socket.IsConnected() cli.socketLock.RUnlock() @@ -520,18 +629,35 @@ func (cli *Client) IsConnected() bool { // This will not emit any events, the Disconnected event is only used when the // connection is closed by the server or a network error. func (cli *Client) Disconnect() { - if cli.socket == nil { + if cli == nil { return } cli.socketLock.Lock() + cli.expectDisconnect() cli.unlockedDisconnect() cli.socketLock.Unlock() + cli.clearDelayedMessageRequests() +} + +// ResetConnection disconnects from the WhatsApp web websocket and forces an automatic reconnection. +// This will not do anything if the socket is already disconnected or if EnableAutoReconnect is false. +func (cli *Client) ResetConnection() { + if cli == nil { + return + } + cli.socketLock.Lock() + cli.forceAutoReconnect.Store(true) + if cli.socket != nil { + cli.socket.Stop(true, true) + cli.clearResponseWaiters(xmlStreamEndNode) + } + cli.socketLock.Unlock() } // Disconnect closes the websocket connection. func (cli *Client) unlockedDisconnect() { if cli.socket != nil { - cli.socket.Stop(true) + cli.socket.Stop(true, false) cli.socket = nil cli.clearResponseWaiters(xmlStreamEndNode) } @@ -544,15 +670,17 @@ func (cli *Client) unlockedDisconnect() { // // Note that this will not emit any events. The LoggedOut event is only used for external logouts // (triggered by the user from the main device or by WhatsApp servers). -func (cli *Client) Logout() error { - if cli.MessengerConfig != nil { +func (cli *Client) Logout(ctx context.Context) error { + if cli == nil { + return ErrClientIsNil + } else if cli.MessengerConfig != nil { return errors.New("can't logout with Messenger credentials") } ownID := cli.getOwnID() if ownID.IsEmpty() { return ErrNotLoggedIn } - _, err := cli.sendIQ(infoQuery{ + _, err := cli.sendIQ(ctx, infoQuery{ Namespace: "md", Type: "set", To: types.ServerJID, @@ -568,7 +696,7 @@ func (cli *Client) Logout() error { return fmt.Errorf("error sending logout request: %w", err) } cli.Disconnect() - err = cli.Store.Delete() + err = cli.Store.Delete(ctx) if err != nil { return fmt.Errorf("error deleting data from store: %w", err) } @@ -607,6 +735,13 @@ func (cli *Client) Logout() error { // // Handle event and access mycli.WAClient // } func (cli *Client) AddEventHandler(handler EventHandler) uint32 { + return cli.AddEventHandlerWithSuccessStatus(func(evt any) bool { + handler(evt) + return true + }) +} + +func (cli *Client) AddEventHandlerWithSuccessStatus(handler EventHandlerWithSuccessStatus) uint32 { nextID := atomic.AddUint32(&nextHandlerID, 1) cli.eventHandlersLock.Lock() cli.eventHandlers = append(cli.eventHandlers, wrappedEventHandler{handler, nextID}) @@ -653,7 +788,7 @@ func (cli *Client) RemoveEventHandlers() { cli.eventHandlersLock.Unlock() } -func (cli *Client) handleFrame(data []byte) { +func (cli *Client) handleFrame(ctx context.Context, data []byte) { decompressed, err := waBinary.Unpack(data) if err != nil { cli.Log.Warnf("Failed to decompress frame: %v", err) @@ -672,15 +807,19 @@ func (cli *Client) handleFrame(data []byte) { cli.Log.Warnf("Received stream end frame") } // TODO should we do something else? - } else if cli.receiveResponse(node) { + } else if cli.receiveResponse(ctx, node) { // handled } else if _, ok := cli.nodeHandlers[node.Tag]; ok { select { case cli.handlerQueue <- node: + case <-ctx.Done(): default: cli.Log.Warnf("Handler queue is full, message ordering is no longer guaranteed") go func() { - cli.handlerQueue <- node + select { + case cli.handlerQueue <- node: + case <-ctx.Done(): + } }() } } else if node.Tag != "ack" { @@ -688,47 +827,47 @@ func (cli *Client) handleFrame(data []byte) { } } -func stopAndDrainTimer(timer *time.Timer) { - if !timer.Stop() { - select { - case <-timer.C: - default: - } - } -} - -func (cli *Client) handlerQueueLoop(ctx context.Context) { - timer := time.NewTimer(5 * time.Minute) - stopAndDrainTimer(timer) +func (cli *Client) handlerQueueLoop(evtCtx, connCtx context.Context) { + ticker := time.NewTicker(30 * time.Second) + ticker.Stop() cli.Log.Debugf("Starting handler queue loop") +Loop: for { select { case node := <-cli.handlerQueue: doneChan := make(chan struct{}, 1) + start := time.Now() go func() { - start := time.Now() - cli.nodeHandlers[node.Tag](node) + cli.nodeHandlers[node.Tag](evtCtx, node) duration := time.Since(start) doneChan <- struct{}{} if duration > 5*time.Second { cli.Log.Warnf("Node handling took %s for %s", duration, node.XMLString()) } }() - timer.Reset(5 * time.Minute) - select { - case <-doneChan: - stopAndDrainTimer(timer) - case <-timer.C: - cli.Log.Warnf("Node handling is taking long for %s - continuing in background", node.XMLString()) + ticker.Reset(30 * time.Second) + for i := 0; i < 10; i++ { + select { + case <-doneChan: + ticker.Stop() + continue Loop + case <-ticker.C: + cli.Log.Warnf("Node handling is taking long for %s (started %s ago)", node.XMLString(), time.Since(start)) + } } - case <-ctx.Done(): + cli.Log.Warnf("Continuing handling of %s in background as it's taking too long", node.XMLString()) + ticker.Stop() + case <-connCtx.Done(): cli.Log.Debugf("Closing handler queue loop") return } } } -func (cli *Client) sendNodeAndGetData(node waBinary.Node) ([]byte, error) { +func (cli *Client) sendNodeAndGetData(ctx context.Context, node waBinary.Node) ([]byte, error) { + if cli == nil { + return nil, ErrClientIsNil + } cli.socketLock.RLock() sock := cli.socket cli.socketLock.RUnlock() @@ -742,15 +881,15 @@ func (cli *Client) sendNodeAndGetData(node waBinary.Node) ([]byte, error) { } cli.sendLog.Debugf("%s", node.XMLString()) - return payload, sock.SendFrame(payload) + return payload, sock.SendFrame(ctx, payload) } -func (cli *Client) sendNode(node waBinary.Node) error { - _, err := cli.sendNodeAndGetData(node) +func (cli *Client) sendNode(ctx context.Context, node waBinary.Node) error { + _, err := cli.sendNodeAndGetData(ctx, node) return err } -func (cli *Client) dispatchEvent(evt interface{}) { +func (cli *Client) dispatchEvent(evt any) (handlerFailed bool) { cli.eventHandlersLock.RLock() defer func() { cli.eventHandlersLock.RUnlock() @@ -760,8 +899,11 @@ func (cli *Client) dispatchEvent(evt interface{}) { } }() for _, handler := range cli.eventHandlers { - handler.fn(evt) + if !handler.fn(evt) { + return true + } } + return false } // ParseWebMessage parses a WebMessageInfo object into *events.Message to match what real-time messages have. @@ -773,10 +915,10 @@ func (cli *Client) dispatchEvent(evt interface{}) { // evt, err := cli.ParseWebMessage(chatJID, historyMsg.GetMessage()) // yourNormalEventHandler(evt) // } -func (cli *Client) ParseWebMessage(chatJID types.JID, webMsg *waProto.WebMessageInfo) (*events.Message, error) { +func (cli *Client) ParseWebMessage(chatJID types.JID, webMsg *waWeb.WebMessageInfo) (*events.Message, error) { var err error if chatJID.IsEmpty() { - chatJID, err = types.ParseJID(webMsg.GetKey().GetRemoteJid()) + chatJID, err = types.ParseJID(webMsg.GetKey().GetRemoteJID()) if err != nil { return nil, fmt.Errorf("no chat JID provided and failed to parse remote JID: %w", err) } @@ -787,7 +929,7 @@ func (cli *Client) ParseWebMessage(chatJID types.JID, webMsg *waProto.WebMessage IsFromMe: webMsg.GetKey().GetFromMe(), IsGroup: chatJID.Server == types.GroupServer, }, - ID: webMsg.GetKey().GetId(), + ID: webMsg.GetKey().GetID(), PushName: webMsg.GetPushName(), Timestamp: time.Unix(int64(webMsg.GetMessageTimestamp()), 0), } @@ -796,7 +938,7 @@ func (cli *Client) ParseWebMessage(chatJID types.JID, webMsg *waProto.WebMessage if info.Sender.IsEmpty() { return nil, ErrNotLoggedIn } - } else if chatJID.Server == types.DefaultUserServer || chatJID.Server == types.NewsletterServer { + } else if chatJID.Server == types.DefaultUserServer || chatJID.Server == types.HiddenUserServer || chatJID.Server == types.NewsletterServer { info.Sender = chatJID } else if webMsg.GetParticipant() != "" { info.Sender, err = types.ParseJID(webMsg.GetParticipant()) @@ -808,11 +950,69 @@ func (cli *Client) ParseWebMessage(chatJID types.JID, webMsg *waProto.WebMessage if err != nil { return nil, fmt.Errorf("failed to parse sender of message %s: %v", info.ID, err) } + if pk := webMsg.GetCommentMetadata().GetCommentParentKey(); pk != nil { + info.MsgMetaInfo.ThreadMessageID = pk.GetID() + info.MsgMetaInfo.ThreadMessageSenderJID, _ = types.ParseJID(pk.GetParticipant()) + } evt := &events.Message{ RawMessage: webMsg.GetMessage(), SourceWebMsg: webMsg, Info: info, } evt.UnwrapRaw() + if evt.Message.GetProtocolMessage().GetType() == waE2E.ProtocolMessage_MESSAGE_EDIT { + evt.Info.ID = evt.Message.GetProtocolMessage().GetKey().GetID() + evt.Message = evt.Message.GetProtocolMessage().GetEditedMessage() + } return evt, nil } + +func (cli *Client) StoreLIDPNMapping(ctx context.Context, first, second types.JID) { + var lid, pn types.JID + if first.Server == types.HiddenUserServer && second.Server == types.DefaultUserServer { + lid = first + pn = second + } else if first.Server == types.DefaultUserServer && second.Server == types.HiddenUserServer { + lid = second + pn = first + } else { + return + } + err := cli.Store.LIDs.PutLIDMapping(ctx, lid, pn) + if err != nil { + cli.Log.Errorf("Failed to store LID-PN mapping for %s -> %s: %v", lid, pn, err) + } +} + +const unifiedOffset = 3 * 24 * time.Hour +const week = 7 * 24 * time.Hour + +func (cli *Client) getUnifiedSessionID() string { + unifiedTS := time.Now(). + Add(time.Duration(cli.serverTimeOffset.Load())). + Add(unifiedOffset) + unifiedID := unifiedTS.UnixMilli() % week.Milliseconds() + return strconv.FormatInt(unifiedID, 10) +} + +func (cli *Client) sendUnifiedSession() { + if cli == nil { + return + } + + node := waBinary.Node{ + Tag: "ib", + Attrs: waBinary.Attrs{}, + Content: []waBinary.Node{{ + Tag: "unified_session", + Attrs: waBinary.Attrs{ + "id": cli.getUnifiedSessionID(), + }, + }}, + } + + err := cli.sendNode(cli.BackgroundEventCtx, node) + if err != nil { + cli.Log.Debugf("Failed to send unified_session telemetry: %v", err) + } +} diff --git a/vendor/go.mau.fi/whatsmeow/connectionevents.go b/vendor/go.mau.fi/whatsmeow/connectionevents.go index 5feaed25bf..932853cc9f 100644 --- a/vendor/go.mau.fi/whatsmeow/connectionevents.go +++ b/vendor/go.mau.fi/whatsmeow/connectionevents.go @@ -7,6 +7,7 @@ package whatsmeow import ( + "context" "time" waBinary "go.mau.fi/whatsmeow/binary" @@ -15,7 +16,7 @@ import ( "go.mau.fi/whatsmeow/types/events" ) -func (cli *Client) handleStreamError(node *waBinary.Node) { +func (cli *Client) handleStreamError(ctx context.Context, node *waBinary.Node) { cli.isLoggedIn.Store(false) cli.clearResponseWaiters(node) code, _ := node.Attrs["code"].(string) @@ -23,10 +24,15 @@ func (cli *Client) handleStreamError(node *waBinary.Node) { conflictType := conflict.AttrGetter().OptionalString("type") switch { case code == "515": + if cli.DisableLoginAutoReconnect { + cli.Log.Infof("Got 515 code, but login autoreconnect is disabled, not reconnecting") + cli.dispatchEvent(&events.ManualLoginReconnect{}) + return + } cli.Log.Infof("Got 515 code, reconnecting...") go func() { cli.Disconnect() - err := cli.Connect() + err := cli.connect(ctx) if err != nil { cli.Log.Errorf("Failed to reconnect after 515 code: %v", err) } @@ -35,7 +41,7 @@ func (cli *Client) handleStreamError(node *waBinary.Node) { cli.expectDisconnect() cli.Log.Infof("Got device removed stream error, sending LoggedOut event and deleting session") go cli.dispatchEvent(&events.LoggedOut{OnConnect: false, Reason: events.ConnectFailureLoggedOut}) - err := cli.Store.Delete() + err := cli.Store.Delete(ctx) if err != nil { cli.Log.Warnf("Failed to delete store after device_removed error: %v", err) } @@ -51,7 +57,7 @@ func (cli *Client) handleStreamError(node *waBinary.Node) { cli.Log.Infof("Got %s stream error, refreshing CAT before reconnecting...", code) cli.socketLock.RLock() defer cli.socketLock.RUnlock() - err := cli.RefreshCAT() + err := cli.RefreshCAT(ctx) if err != nil { cli.Log.Errorf("Failed to refresh CAT: %v", err) cli.expectDisconnect() @@ -63,7 +69,7 @@ func (cli *Client) handleStreamError(node *waBinary.Node) { } } -func (cli *Client) handleIB(node *waBinary.Node) { +func (cli *Client) handleIB(ctx context.Context, node *waBinary.Node) { children := node.GetChildren() for _, child := range children { ag := child.AttrGetter() @@ -82,11 +88,18 @@ func (cli *Client) handleIB(node *waBinary.Node) { cli.dispatchEvent(&events.OfflineSyncCompleted{ Count: ag.Int("count"), }) + case "dirty": + //ts := ag.UnixTime("timestamp") + //typ := ag.String("type") // account_sync + //go func() { + // err := cli.MarkNotDirty(ctx, typ, ts) + // zerolog.Ctx(ctx).Debug().Err(err).Msg("Marked dirty item as clean") + //}() } } } -func (cli *Client) handleConnectFailure(node *waBinary.Node) { +func (cli *Client) handleConnectFailure(ctx context.Context, node *waBinary.Node) { ag := node.AttrGetter() reason := events.ConnectFailureReason(ag.Int("reason")) message := ag.OptionalString("message") @@ -96,14 +109,12 @@ func (cli *Client) handleConnectFailure(node *waBinary.Node) { // By default, expect a disconnect (i.e. prevent auto-reconnect) cli.expectDisconnect() willAutoReconnect = false - case reason == events.ConnectFailureServiceUnavailable: + case reason == events.ConnectFailureServiceUnavailable || reason == events.ConnectFailureInternalServerError: // Auto-reconnect for 503s case reason == events.ConnectFailureCATInvalid || reason == events.ConnectFailureCATExpired: // Auto-reconnect when rotating CAT, lock socket to ensure refresh goes through before reconnect cli.socketLock.RLock() defer cli.socketLock.RUnlock() - case reason == 500 && message == "biz vname fetch error": - // These happen for business accounts randomly, also auto-reconnect } if reason == 403 { cli.Log.Debugf( @@ -115,7 +126,7 @@ func (cli *Client) handleConnectFailure(node *waBinary.Node) { if reason.IsLoggedOut() { cli.Log.Infof("Got %s connect failure, sending LoggedOut event and deleting session", reason) go cli.dispatchEvent(&events.LoggedOut{OnConnect: true, Reason: reason}) - err := cli.Store.Delete() + err := cli.Store.Delete(ctx) if err != nil { cli.Log.Warnf("Failed to delete store after %d failure: %v", int(reason), err) } @@ -130,7 +141,7 @@ func (cli *Client) handleConnectFailure(node *waBinary.Node) { go cli.dispatchEvent(&events.ClientOutdated{}) } else if reason == events.ConnectFailureCATInvalid || reason == events.ConnectFailureCATExpired { cli.Log.Infof("Got %d/%s connect failure, refreshing CAT before reconnecting...", int(reason), message) - err := cli.RefreshCAT() + err := cli.RefreshCAT(ctx) if err != nil { cli.Log.Errorf("Failed to refresh CAT: %v", err) cli.expectDisconnect() @@ -144,25 +155,46 @@ func (cli *Client) handleConnectFailure(node *waBinary.Node) { } } -func (cli *Client) handleConnectSuccess(node *waBinary.Node) { +func (cli *Client) handleConnectSuccess(ctx context.Context, node *waBinary.Node) { cli.Log.Infof("Successfully authenticated") cli.LastSuccessfulConnect = time.Now() cli.AutoReconnectErrors = 0 cli.isLoggedIn.Store(true) + ag := node.AttrGetter() + nodeLID := ag.JID("lid") + cli.serverTimeOffset.Store(int64(ag.UnixTime("t").Sub(time.Now().Round(time.Second)))) + + if !cli.Store.LID.IsEmpty() && !nodeLID.IsEmpty() && cli.Store.LID != nodeLID { + // This should probably never happen, but check just in case. + cli.Log.Warnf("Stored LID doesn't match one in connect success: %s != %s", cli.Store.LID, nodeLID) + cli.Store.LID = types.EmptyJID + } + if cli.Store.LID.IsEmpty() && !nodeLID.IsEmpty() { + cli.Store.LID = nodeLID + err := cli.Store.Save(ctx) + if err != nil { + cli.Log.Warnf("Failed to save device after updating LID: %v", err) + } else { + cli.Log.Infof("Updated LID to %s", cli.Store.LID) + } + } + // Some users are missing their own LID-PN mapping even though it's already in the device table, + // so do this unconditionally for a few months to ensure everyone gets the row. + cli.StoreLIDPNMapping(ctx, cli.Store.GetLID(), cli.Store.GetJID()) go func() { - if dbCount, err := cli.Store.PreKeys.UploadedPreKeyCount(); err != nil { + if dbCount, err := cli.Store.PreKeys.UploadedPreKeyCount(ctx); err != nil { cli.Log.Errorf("Failed to get number of prekeys in database: %v", err) - } else if serverCount, err := cli.getServerPreKeyCount(); err != nil { + } else if serverCount, err := cli.getServerPreKeyCount(ctx); err != nil { cli.Log.Warnf("Failed to get number of prekeys on server: %v", err) } else { cli.Log.Debugf("Database has %d prekeys, server says we have %d", dbCount, serverCount) if serverCount < MinPreKeyCount || dbCount < MinPreKeyCount { - cli.uploadPreKeys() - sc, _ := cli.getServerPreKeyCount() + cli.uploadPreKeys(ctx, dbCount == 0 && serverCount == 0) + sc, _ := cli.getServerPreKeyCount(ctx) cli.Log.Debugf("Prekey count after upload: %d", sc) } } - err := cli.SetPassive(false) + err := cli.SetPassive(ctx, false) if err != nil { cli.Log.Warnf("Failed to send post-connect passive IQ: %v", err) } @@ -175,12 +207,12 @@ func (cli *Client) handleConnectSuccess(node *waBinary.Node) { // // This seems to mostly affect whether the device receives certain events. // By default, whatsmeow will automatically do SetPassive(false) after connecting. -func (cli *Client) SetPassive(passive bool) error { +func (cli *Client) SetPassive(ctx context.Context, passive bool) error { tag := "active" if passive { tag = "passive" } - _, err := cli.sendIQ(infoQuery{ + _, err := cli.sendIQ(ctx, infoQuery{ Namespace: "passive", Type: "set", To: types.ServerJID, diff --git a/vendor/go.mau.fi/whatsmeow/download-to-file.go b/vendor/go.mau.fi/whatsmeow/download-to-file.go new file mode 100644 index 0000000000..2b9e065cb8 --- /dev/null +++ b/vendor/go.mau.fi/whatsmeow/download-to-file.go @@ -0,0 +1,234 @@ +// Copyright (c) 2024 Tulir Asokan +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. + +package whatsmeow + +import ( + "context" + "crypto/hmac" + "crypto/sha256" + "encoding/base64" + "errors" + "fmt" + "io" + "os" + "strings" + "time" + + "go.mau.fi/util/fallocate" + "go.mau.fi/util/retryafter" + + "go.mau.fi/whatsmeow/proto/waMediaTransport" + "go.mau.fi/whatsmeow/util/cbcutil" +) + +type File interface { + io.Reader + io.Writer + io.Seeker + io.ReaderAt + io.WriterAt + Truncate(size int64) error + Stat() (os.FileInfo, error) +} + +// DownloadToFile downloads the attachment from the given protobuf message. +// +// This is otherwise identical to [Download], but writes the attachment to a file instead of returning it as a byte slice. +func (cli *Client) DownloadToFile(ctx context.Context, msg DownloadableMessage, file File) error { + if cli == nil { + return ErrClientIsNil + } + mediaType := GetMediaType(msg) + if mediaType == "" { + return fmt.Errorf("%w %T", ErrUnknownMediaType, msg) + } + urlable, ok := msg.(downloadableMessageWithURL) + var url string + var isWebWhatsappNetURL bool + if ok { + url = urlable.GetURL() + isWebWhatsappNetURL = strings.HasPrefix(url, "https://web.whatsapp.net") + } + if len(url) > 0 && !isWebWhatsappNetURL { + return cli.downloadAndDecryptToFile(ctx, url, msg.GetMediaKey(), mediaType, getSize(msg), msg.GetFileEncSHA256(), msg.GetFileSHA256(), file) + } else if len(msg.GetDirectPath()) > 0 { + return cli.DownloadMediaWithPathToFile(ctx, msg.GetDirectPath(), msg.GetFileEncSHA256(), msg.GetFileSHA256(), msg.GetMediaKey(), getSize(msg), mediaType, mediaTypeToMMSType[mediaType], file) + } else { + if isWebWhatsappNetURL { + cli.Log.Warnf("Got a media message with a web.whatsapp.net URL (%s) and no direct path", url) + } + return ErrNoURLPresent + } +} + +func (cli *Client) DownloadFBToFile( + ctx context.Context, + transport *waMediaTransport.WAMediaTransport_Integral, + mediaType MediaType, + file File, +) error { + return cli.DownloadMediaWithPathToFile(ctx, transport.GetDirectPath(), transport.GetFileEncSHA256(), transport.GetFileSHA256(), transport.GetMediaKey(), -1, mediaType, mediaTypeToMMSType[mediaType], file) +} + +func (cli *Client) DownloadMediaWithPathToFile( + ctx context.Context, + directPath string, + encFileHash, fileHash, mediaKey []byte, + fileLength int, + mediaType MediaType, + mmsType string, + file File, +) error { + mediaConn, err := cli.refreshMediaConn(ctx, false) + if err != nil { + return fmt.Errorf("failed to refresh media connections: %w", err) + } + if len(mmsType) == 0 { + mmsType = mediaTypeToMMSType[mediaType] + } + for i, host := range mediaConn.Hosts { + // TODO omit hash for unencrypted media? + mediaURL := fmt.Sprintf("https://%s%s&hash=%s&mms-type=%s&__wa-mms=", host.Hostname, directPath, base64.URLEncoding.EncodeToString(encFileHash), mmsType) + err = cli.downloadAndDecryptToFile(ctx, mediaURL, mediaKey, mediaType, fileLength, encFileHash, fileHash, file) + if err == nil || + errors.Is(err, ErrFileLengthMismatch) || + errors.Is(err, ErrInvalidMediaSHA256) || + errors.Is(err, ErrMediaDownloadFailedWith403) || + errors.Is(err, ErrMediaDownloadFailedWith404) || + errors.Is(err, ErrMediaDownloadFailedWith410) || + errors.Is(err, context.Canceled) { + return err + } else if i >= len(mediaConn.Hosts)-1 { + return fmt.Errorf("failed to download media from last host: %w", err) + } + cli.Log.Warnf("Failed to download media: %s, trying with next host...", err) + } + return err +} + +func (cli *Client) downloadAndDecryptToFile( + ctx context.Context, + url string, + mediaKey []byte, + appInfo MediaType, + fileLength int, + fileEncSHA256, fileSHA256 []byte, + file File, +) error { + iv, cipherKey, macKey, _ := getMediaKeys(mediaKey, appInfo) + hasher := sha256.New() + if mac, err := cli.downloadPossiblyEncryptedMediaWithRetriesToFile(ctx, url, fileEncSHA256, file); err != nil { + return err + } else if mediaKey == nil && fileEncSHA256 == nil && mac == nil { + // Unencrypted media, just return the downloaded data + return nil + } else if err = validateMediaFile(file, iv, macKey, mac); err != nil { + return err + } else if _, err = file.Seek(0, io.SeekStart); err != nil { + return fmt.Errorf("failed to seek to start of file after validating mac: %w", err) + } else if err = cbcutil.DecryptFile(cipherKey, iv, file); err != nil { + return fmt.Errorf("failed to decrypt file: %w", err) + } else if ReturnDownloadWarnings { + if info, err := file.Stat(); err != nil { + return fmt.Errorf("failed to stat file: %w", err) + } else if fileLength >= 0 && info.Size() != int64(fileLength) { + return fmt.Errorf("%w: expected %d, got %d", ErrFileLengthMismatch, fileLength, info.Size()) + } else if _, err = file.Seek(0, io.SeekStart); err != nil { + return fmt.Errorf("failed to seek to start of file after decrypting: %w", err) + } else if _, err = io.Copy(hasher, file); err != nil { + return fmt.Errorf("failed to hash file: %w", err) + } else if !hmac.Equal(fileSHA256, hasher.Sum(nil)) { + return ErrInvalidMediaSHA256 + } + } + return nil +} + +func (cli *Client) downloadPossiblyEncryptedMediaWithRetriesToFile(ctx context.Context, url string, checksum []byte, file File) (mac []byte, err error) { + for retryNum := 0; retryNum < 5; retryNum++ { + if checksum == nil { + _, _, err = cli.downloadMediaToFile(ctx, url, file) + } else { + mac, err = cli.downloadEncryptedMediaToFile(ctx, url, checksum, file) + } + if err == nil || !shouldRetryMediaDownload(err) { + return + } + retryDuration := time.Duration(retryNum+1) * time.Second + var httpErr DownloadHTTPError + if errors.As(err, &httpErr) { + retryDuration = retryafter.Parse(httpErr.Response.Header.Get("Retry-After"), retryDuration) + } + cli.Log.Warnf("Failed to download media due to network error: %v, retrying in %s...", err, retryDuration) + _, err = file.Seek(0, io.SeekStart) + if err != nil { + return nil, fmt.Errorf("failed to seek to start of file to retry download: %w", err) + } + select { + case <-ctx.Done(): + return nil, ctx.Err() + case <-time.After(retryDuration): + } + } + return +} + +func (cli *Client) downloadMediaToFile(ctx context.Context, url string, file io.Writer) (int64, []byte, error) { + resp, err := cli.doMediaDownloadRequest(ctx, url) + if err != nil { + return 0, nil, err + } + defer resp.Body.Close() + osFile, ok := file.(*os.File) + if ok && resp.ContentLength > 0 { + err = fallocate.Fallocate(osFile, int(resp.ContentLength)) + if err != nil { + return 0, nil, fmt.Errorf("failed to preallocate file: %w", err) + } + } + hasher := sha256.New() + n, err := io.Copy(file, io.TeeReader(resp.Body, hasher)) + return n, hasher.Sum(nil), err +} + +func (cli *Client) downloadEncryptedMediaToFile(ctx context.Context, url string, checksum []byte, file File) ([]byte, error) { + size, hash, err := cli.downloadMediaToFile(ctx, url, file) + if err != nil { + return nil, err + } else if size <= mediaHMACLength { + return nil, ErrTooShortFile + } else if len(checksum) == 32 && !hmac.Equal(checksum, hash) { + return nil, ErrInvalidMediaEncSHA256 + } + mac := make([]byte, mediaHMACLength) + _, err = file.ReadAt(mac, size-mediaHMACLength) + if err != nil { + return nil, fmt.Errorf("failed to read MAC from file: %w", err) + } + err = file.Truncate(size - mediaHMACLength) + if err != nil { + return nil, fmt.Errorf("failed to truncate file to remove MAC: %w", err) + } + return mac, nil +} + +func validateMediaFile(file io.ReadSeeker, iv, macKey, mac []byte) error { + h := hmac.New(sha256.New, macKey) + h.Write(iv) + _, err := file.Seek(0, io.SeekStart) + if err != nil { + return fmt.Errorf("failed to seek to start of file: %w", err) + } + _, err = io.Copy(h, file) + if err != nil { + return fmt.Errorf("failed to hash file: %w", err) + } + if !hmac.Equal(h.Sum(nil)[:mediaHMACLength], mac) { + return ErrInvalidMediaHMAC + } + return nil +} diff --git a/vendor/go.mau.fi/whatsmeow/download.go b/vendor/go.mau.fi/whatsmeow/download.go index cfb4c87db4..16b6108154 100644 --- a/vendor/go.mau.fi/whatsmeow/download.go +++ b/vendor/go.mau.fi/whatsmeow/download.go @@ -7,6 +7,7 @@ package whatsmeow import ( + "context" "crypto/hmac" "crypto/sha256" "encoding/base64" @@ -22,8 +23,10 @@ import ( "google.golang.org/protobuf/proto" "google.golang.org/protobuf/reflect/protoreflect" - waProto "go.mau.fi/whatsmeow/binary/proto" + "go.mau.fi/whatsmeow/proto/waE2E" + "go.mau.fi/whatsmeow/proto/waHistorySync" "go.mau.fi/whatsmeow/proto/waMediaTransport" + "go.mau.fi/whatsmeow/proto/waServerSync" "go.mau.fi/whatsmeow/socket" "go.mau.fi/whatsmeow/util/cbcutil" "go.mau.fi/whatsmeow/util/hkdfutil" @@ -42,6 +45,7 @@ const ( MediaHistory MediaType = "WhatsApp History Keys" MediaAppState MediaType = "WhatsApp App State Keys" + MediaStickerPack MediaType = "WhatsApp Sticker Pack Keys" MediaLinkThumbnail MediaType = "WhatsApp Link Thumbnail Keys" ) @@ -50,13 +54,16 @@ const ( // All of the downloadable messages inside a Message struct implement this interface // (ImageMessage, VideoMessage, AudioMessage, DocumentMessage, StickerMessage). type DownloadableMessage interface { - proto.Message GetDirectPath() string GetMediaKey() []byte GetFileSHA256() []byte GetFileEncSHA256() []byte } +type MediaTypeable interface { + GetMediaType() MediaType +} + // DownloadableThumbnail represents a protobuf message that contains a thumbnail attachment. // // This is primarily meant for link preview thumbnails in ExtendedTextMessage. @@ -70,15 +77,16 @@ type DownloadableThumbnail interface { // All the message types that are intended to be downloadable var ( - _ DownloadableMessage = (*waProto.ImageMessage)(nil) - _ DownloadableMessage = (*waProto.AudioMessage)(nil) - _ DownloadableMessage = (*waProto.VideoMessage)(nil) - _ DownloadableMessage = (*waProto.DocumentMessage)(nil) - _ DownloadableMessage = (*waProto.StickerMessage)(nil) - _ DownloadableMessage = (*waProto.StickerMetadata)(nil) - _ DownloadableMessage = (*waProto.HistorySyncNotification)(nil) - _ DownloadableMessage = (*waProto.ExternalBlobReference)(nil) - _ DownloadableThumbnail = (*waProto.ExtendedTextMessage)(nil) + _ DownloadableMessage = (*waE2E.ImageMessage)(nil) + _ DownloadableMessage = (*waE2E.AudioMessage)(nil) + _ DownloadableMessage = (*waE2E.VideoMessage)(nil) + _ DownloadableMessage = (*waE2E.DocumentMessage)(nil) + _ DownloadableMessage = (*waE2E.StickerMessage)(nil) + _ DownloadableMessage = (*waE2E.StickerPackMessage)(nil) + _ DownloadableMessage = (*waHistorySync.StickerMetadata)(nil) + _ DownloadableMessage = (*waE2E.HistorySyncNotification)(nil) + _ DownloadableMessage = (*waServerSync.ExternalBlobReference)(nil) + _ DownloadableThumbnail = (*waE2E.ExtendedTextMessage)(nil) ) type downloadableMessageWithLength interface { @@ -93,7 +101,7 @@ type downloadableMessageWithSizeBytes interface { type downloadableMessageWithURL interface { DownloadableMessage - GetUrl() string + GetURL() string } var classToMediaType = map[protoreflect.Name]MediaType{ @@ -104,6 +112,7 @@ var classToMediaType = map[protoreflect.Name]MediaType{ "StickerMessage": MediaImage, "StickerMetadata": MediaImage, + "StickerPackMessage": MediaStickerPack, "HistorySyncNotification": MediaHistory, "ExternalBlobReference": MediaAppState, } @@ -120,25 +129,28 @@ var mediaTypeToMMSType = map[MediaType]string{ MediaHistory: "md-msg-hist", MediaAppState: "md-app-state", + MediaStickerPack: "sticker-pack", MediaLinkThumbnail: "thumbnail-link", } // DownloadAny loops through the downloadable parts of the given message and downloads the first non-nil item. -func (cli *Client) DownloadAny(msg *waProto.Message) (data []byte, err error) { +// +// Deprecated: it's recommended to find the specific message type you want to download manually and use the Download method instead. +func (cli *Client) DownloadAny(ctx context.Context, msg *waE2E.Message) (data []byte, err error) { if msg == nil { return nil, ErrNothingDownloadableFound } switch { case msg.ImageMessage != nil: - return cli.Download(msg.ImageMessage) + return cli.Download(ctx, msg.ImageMessage) case msg.VideoMessage != nil: - return cli.Download(msg.VideoMessage) + return cli.Download(ctx, msg.VideoMessage) case msg.AudioMessage != nil: - return cli.Download(msg.AudioMessage) + return cli.Download(ctx, msg.AudioMessage) case msg.DocumentMessage != nil: - return cli.Download(msg.DocumentMessage) + return cli.Download(ctx, msg.DocumentMessage) case msg.StickerMessage != nil: - return cli.Download(msg.StickerMessage) + return cli.Download(ctx, msg.StickerMessage) default: return nil, ErrNothingDownloadableFound } @@ -155,19 +167,23 @@ func getSize(msg DownloadableMessage) int { } } +// ReturnDownloadWarnings controls whether the Download function returns non-fatal validation warnings. +// Currently, these include [ErrFileLengthMismatch] and [ErrInvalidMediaSHA256]. +var ReturnDownloadWarnings = true + // DownloadThumbnail downloads a thumbnail from a message. // // This is primarily intended for downloading link preview thumbnails, which are in ExtendedTextMessage: // -// var msg *waProto.Message +// var msg *waE2E.Message // ... // thumbnailImageBytes, err := cli.DownloadThumbnail(msg.GetExtendedTextMessage()) -func (cli *Client) DownloadThumbnail(msg DownloadableThumbnail) ([]byte, error) { +func (cli *Client) DownloadThumbnail(ctx context.Context, msg DownloadableThumbnail) ([]byte, error) { mediaType, ok := classToThumbnailMediaType[msg.ProtoReflect().Descriptor().Name()] if !ok { return nil, fmt.Errorf("%w '%s'", ErrUnknownMediaType, string(msg.ProtoReflect().Descriptor().Name())) } else if len(msg.GetThumbnailDirectPath()) > 0 { - return cli.DownloadMediaWithPath(msg.GetThumbnailDirectPath(), msg.GetThumbnailEncSHA256(), msg.GetThumbnailSHA256(), msg.GetMediaKey(), -1, mediaType, mediaTypeToMMSType[mediaType]) + return cli.DownloadMediaWithPath(ctx, msg.GetThumbnailDirectPath(), msg.GetThumbnailEncSHA256(), msg.GetThumbnailSHA256(), msg.GetMediaKey(), -1, mediaType, mediaTypeToMMSType[mediaType]) } else { return nil, ErrNoURLPresent } @@ -175,34 +191,45 @@ func (cli *Client) DownloadThumbnail(msg DownloadableThumbnail) ([]byte, error) // GetMediaType returns the MediaType value corresponding to the given protobuf message. func GetMediaType(msg DownloadableMessage) MediaType { - return classToMediaType[msg.ProtoReflect().Descriptor().Name()] + protoReflecter, ok := msg.(proto.Message) + if !ok { + mediaTypeable, ok := msg.(MediaTypeable) + if !ok { + return "" + } + return mediaTypeable.GetMediaType() + } + return classToMediaType[protoReflecter.ProtoReflect().Descriptor().Name()] } // Download downloads the attachment from the given protobuf message. // // The attachment is a specific part of a Message protobuf struct, not the message itself, e.g. // -// var msg *waProto.Message +// var msg *waE2E.Message // ... // imageData, err := cli.Download(msg.GetImageMessage()) // // You can also use DownloadAny to download the first non-nil sub-message. -func (cli *Client) Download(msg DownloadableMessage) ([]byte, error) { - mediaType, ok := classToMediaType[msg.ProtoReflect().Descriptor().Name()] - if !ok { - return nil, fmt.Errorf("%w '%s'", ErrUnknownMediaType, string(msg.ProtoReflect().Descriptor().Name())) +func (cli *Client) Download(ctx context.Context, msg DownloadableMessage) ([]byte, error) { + if cli == nil { + return nil, ErrClientIsNil + } + mediaType := GetMediaType(msg) + if mediaType == "" { + return nil, fmt.Errorf("%w %T", ErrUnknownMediaType, msg) } urlable, ok := msg.(downloadableMessageWithURL) var url string var isWebWhatsappNetURL bool if ok { - url = urlable.GetUrl() + url = urlable.GetURL() isWebWhatsappNetURL = strings.HasPrefix(url, "https://web.whatsapp.net") } if len(url) > 0 && !isWebWhatsappNetURL { - return cli.downloadAndDecrypt(url, msg.GetMediaKey(), mediaType, getSize(msg), msg.GetFileEncSHA256(), msg.GetFileSHA256()) + return cli.downloadAndDecrypt(ctx, url, msg.GetMediaKey(), mediaType, getSize(msg), msg.GetFileEncSHA256(), msg.GetFileSHA256()) } else if len(msg.GetDirectPath()) > 0 { - return cli.DownloadMediaWithPath(msg.GetDirectPath(), msg.GetFileEncSHA256(), msg.GetFileSHA256(), msg.GetMediaKey(), getSize(msg), mediaType, mediaTypeToMMSType[mediaType]) + return cli.DownloadMediaWithPath(ctx, msg.GetDirectPath(), msg.GetFileEncSHA256(), msg.GetFileSHA256(), msg.GetMediaKey(), getSize(msg), mediaType, mediaTypeToMMSType[mediaType]) } else { if isWebWhatsappNetURL { cli.Log.Warnf("Got a media message with a web.whatsapp.net URL (%s) and no direct path", url) @@ -211,14 +238,28 @@ func (cli *Client) Download(msg DownloadableMessage) ([]byte, error) { } } -func (cli *Client) DownloadFB(transport *waMediaTransport.WAMediaTransport_Integral, mediaType MediaType) ([]byte, error) { - return cli.DownloadMediaWithPath(transport.GetDirectPath(), transport.GetFileEncSHA256(), transport.GetFileSHA256(), transport.GetMediaKey(), -1, mediaType, mediaTypeToMMSType[mediaType]) +func (cli *Client) DownloadFB( + ctx context.Context, + transport *waMediaTransport.WAMediaTransport_Integral, + mediaType MediaType, +) ([]byte, error) { + return cli.DownloadMediaWithPath(ctx, transport.GetDirectPath(), transport.GetFileEncSHA256(), transport.GetFileSHA256(), transport.GetMediaKey(), -1, mediaType, mediaTypeToMMSType[mediaType]) } // DownloadMediaWithPath downloads an attachment by manually specifying the path and encryption details. -func (cli *Client) DownloadMediaWithPath(directPath string, encFileHash, fileHash, mediaKey []byte, fileLength int, mediaType MediaType, mmsType string) (data []byte, err error) { +func (cli *Client) DownloadMediaWithPath( + ctx context.Context, + directPath string, + encFileHash, fileHash, mediaKey []byte, + fileLength int, + mediaType MediaType, + mmsType string, +) (data []byte, err error) { + if !strings.HasPrefix(directPath, "/") { + return nil, fmt.Errorf("media download path does not start with slash: %s", directPath) + } var mediaConn *MediaConn - mediaConn, err = cli.refreshMediaConn(false) + mediaConn, err = cli.refreshMediaConn(ctx, false) if err != nil { return nil, fmt.Errorf("failed to refresh media connections: %w", err) } @@ -228,22 +269,35 @@ func (cli *Client) DownloadMediaWithPath(directPath string, encFileHash, fileHas for i, host := range mediaConn.Hosts { // TODO omit hash for unencrypted media? mediaURL := fmt.Sprintf("https://%s%s&hash=%s&mms-type=%s&__wa-mms=", host.Hostname, directPath, base64.URLEncoding.EncodeToString(encFileHash), mmsType) - data, err = cli.downloadAndDecrypt(mediaURL, mediaKey, mediaType, fileLength, encFileHash, fileHash) - if err == nil || errors.Is(err, ErrFileLengthMismatch) || errors.Is(err, ErrInvalidMediaSHA256) { + data, err = cli.downloadAndDecrypt(ctx, mediaURL, mediaKey, mediaType, fileLength, encFileHash, fileHash) + if err == nil || + errors.Is(err, ErrFileLengthMismatch) || + errors.Is(err, ErrInvalidMediaSHA256) || + errors.Is(err, ErrMediaDownloadFailedWith403) || + errors.Is(err, ErrMediaDownloadFailedWith404) || + errors.Is(err, ErrMediaDownloadFailedWith410) || + errors.Is(err, context.Canceled) { return } else if i >= len(mediaConn.Hosts)-1 { return nil, fmt.Errorf("failed to download media from last host: %w", err) } - // TODO there are probably some errors that shouldn't retry cli.Log.Warnf("Failed to download media: %s, trying with next host...", err) } return } -func (cli *Client) downloadAndDecrypt(url string, mediaKey []byte, appInfo MediaType, fileLength int, fileEncSHA256, fileSHA256 []byte) (data []byte, err error) { +func (cli *Client) downloadAndDecrypt( + ctx context.Context, + url string, + mediaKey []byte, + appInfo MediaType, + fileLength int, + fileEncSHA256, + fileSHA256 []byte, +) (data []byte, err error) { iv, cipherKey, macKey, _ := getMediaKeys(mediaKey, appInfo) var ciphertext, mac []byte - if ciphertext, mac, err = cli.downloadPossiblyEncryptedMediaWithRetries(url, fileEncSHA256); err != nil { + if ciphertext, mac, err = cli.downloadPossiblyEncryptedMediaWithRetries(ctx, url, fileEncSHA256); err != nil { } else if mediaKey == nil && fileEncSHA256 == nil && mac == nil { // Unencrypted media, just return the downloaded data @@ -252,10 +306,12 @@ func (cli *Client) downloadAndDecrypt(url string, mediaKey []byte, appInfo Media } else if data, err = cbcutil.Decrypt(cipherKey, iv, ciphertext); err != nil { err = fmt.Errorf("failed to decrypt file: %w", err) - } else if fileLength >= 0 && len(data) != fileLength { - err = fmt.Errorf("%w: expected %d, got %d", ErrFileLengthMismatch, fileLength, len(data)) - } else if len(fileSHA256) == 32 && sha256.Sum256(data) != *(*[32]byte)(fileSHA256) { - err = ErrInvalidMediaSHA256 + } else if ReturnDownloadWarnings { + if fileLength >= 0 && len(data) != fileLength { + err = fmt.Errorf("%w: expected %d, got %d", ErrFileLengthMismatch, fileLength, len(data)) + } else if len(fileSHA256) == 32 && sha256.Sum256(data) != *(*[32]byte)(fileSHA256) { + err = ErrInvalidMediaSHA256 + } } return } @@ -266,6 +322,9 @@ func getMediaKeys(mediaKey []byte, appInfo MediaType) (iv, cipherKey, macKey, re } func shouldRetryMediaDownload(err error) bool { + if errors.Is(err, context.Canceled) { + return false + } var netErr net.Error var httpErr DownloadHTTPError return errors.As(err, &netErr) || @@ -273,12 +332,12 @@ func shouldRetryMediaDownload(err error) bool { (errors.As(err, &httpErr) && retryafter.Should(httpErr.StatusCode, true)) } -func (cli *Client) downloadPossiblyEncryptedMediaWithRetries(url string, checksum []byte) (file, mac []byte, err error) { +func (cli *Client) downloadPossiblyEncryptedMediaWithRetries(ctx context.Context, url string, checksum []byte) (file, mac []byte, err error) { for retryNum := 0; retryNum < 5; retryNum++ { if checksum == nil { - file, err = cli.downloadMedia(url) + file, err = cli.downloadMedia(ctx, url) } else { - file, mac, err = cli.downloadEncryptedMedia(url, checksum) + file, mac, err = cli.downloadEncryptedMedia(ctx, url, checksum) } if err == nil || !shouldRetryMediaDownload(err) { return @@ -288,14 +347,18 @@ func (cli *Client) downloadPossiblyEncryptedMediaWithRetries(url string, checksu if errors.As(err, &httpErr) { retryDuration = retryafter.Parse(httpErr.Response.Header.Get("Retry-After"), retryDuration) } - cli.Log.Warnf("Failed to download media due to network error: %w, retrying in %s...", err, retryDuration) - time.Sleep(retryDuration) + cli.Log.Warnf("Failed to download media due to network error: %v, retrying in %s...", err, retryDuration) + select { + case <-ctx.Done(): + return nil, nil, ctx.Err() + case <-time.After(retryDuration): + } } return } -func (cli *Client) downloadMedia(url string) ([]byte, error) { - req, err := http.NewRequest(http.MethodGet, url, nil) +func (cli *Client) doMediaDownloadRequest(ctx context.Context, url string) (*http.Response, error) { + req, err := http.NewRequestWithContext(ctx, http.MethodGet, url, nil) if err != nil { return nil, fmt.Errorf("failed to prepare request: %w", err) } @@ -305,26 +368,38 @@ func (cli *Client) downloadMedia(url string) ([]byte, error) { req.Header.Set("User-Agent", cli.MessengerConfig.UserAgent) } // TODO user agent for whatsapp downloads? - resp, err := cli.http.Do(req) + resp, err := cli.mediaHTTP.Do(req) if err != nil { return nil, err } - defer resp.Body.Close() if resp.StatusCode != http.StatusOK { + _ = resp.Body.Close() return nil, DownloadHTTPError{Response: resp} } - return io.ReadAll(resp.Body) + return resp, nil +} + +func (cli *Client) downloadMedia(ctx context.Context, url string) ([]byte, error) { + resp, err := cli.doMediaDownloadRequest(ctx, url) + if err != nil { + return nil, err + } + data, err := io.ReadAll(resp.Body) + _ = resp.Body.Close() + return data, err } -func (cli *Client) downloadEncryptedMedia(url string, checksum []byte) (file, mac []byte, err error) { - data, err := cli.downloadMedia(url) +const mediaHMACLength = 10 + +func (cli *Client) downloadEncryptedMedia(ctx context.Context, url string, checksum []byte) (file, mac []byte, err error) { + data, err := cli.downloadMedia(ctx, url) if err != nil { return - } else if len(data) <= 10 { + } else if len(data) <= mediaHMACLength { err = ErrTooShortFile return } - file, mac = data[:len(data)-10], data[len(data)-10:] + file, mac = data[:len(data)-mediaHMACLength], data[len(data)-mediaHMACLength:] if len(checksum) == 32 && sha256.Sum256(data) != *(*[32]byte)(checksum) { err = ErrInvalidMediaEncSHA256 } @@ -335,7 +410,7 @@ func validateMedia(iv, file, macKey, mac []byte) error { h := hmac.New(sha256.New, macKey) h.Write(iv) h.Write(file) - if !hmac.Equal(h.Sum(nil)[:10], mac) { + if !hmac.Equal(h.Sum(nil)[:mediaHMACLength], mac) { return ErrInvalidMediaHMAC } return nil diff --git a/vendor/go.mau.fi/whatsmeow/errors.go b/vendor/go.mau.fi/whatsmeow/errors.go index 3f78440967..c180e36563 100644 --- a/vendor/go.mau.fi/whatsmeow/errors.go +++ b/vendor/go.mau.fi/whatsmeow/errors.go @@ -16,6 +16,7 @@ import ( // Miscellaneous errors var ( + ErrClientIsNil = errors.New("client is nil") ErrNoSession = errors.New("can't encrypt message for device: no signal session established") ErrIQTimedOut = errors.New("info query timed out") ErrNotConnected = errors.New("websocket not connected") @@ -24,6 +25,9 @@ var ( ErrAlreadyConnected = errors.New("websocket is already connected") + ErrPhoneNumberTooShort = errors.New("phone number too short") + ErrPhoneNumberIsNotInternational = errors.New("international phone number required (must not start with 0)") + ErrQRAlreadyConnected = errors.New("GetQRChannel must be called before connecting") ErrQRStoreContainsID = errors.New("GetQRChannel can only be called when there's no user ID in the client's Store") @@ -140,6 +144,8 @@ var ( var ( ErrOriginalMessageSecretNotFound = errors.New("original message secret key not found") ErrNotEncryptedReactionMessage = errors.New("given message isn't an encrypted reaction message") + ErrNotEncryptedCommentMessage = errors.New("given message isn't an encrypted comment message") + ErrNotSecretEncryptedMessage = errors.New("given message isn't a secret encrypted message") ErrNotPollUpdateMessage = errors.New("given message isn't a poll update message") ) @@ -183,6 +189,7 @@ var ( ErrIQGone error = &IQError{Code: 410, Text: "gone"} ErrIQResourceLimit error = &IQError{Code: 419, Text: "resource-limit"} ErrIQLocked error = &IQError{Code: 423, Text: "locked"} + ErrIQRateOverLimit error = &IQError{Code: 429, Text: "rate-overlimit"} ErrIQInternalServerError error = &IQError{Code: 500, Text: "internal-server-error"} ErrIQServiceUnavailable error = &IQError{Code: 503, Text: "service-unavailable"} ErrIQPartialServerError error = &IQError{Code: 530, Text: "partial-server-error"} diff --git a/vendor/go.mau.fi/whatsmeow/group.go b/vendor/go.mau.fi/whatsmeow/group.go index 199493c8e6..287f802a44 100644 --- a/vendor/go.mau.fi/whatsmeow/group.go +++ b/vendor/go.mau.fi/whatsmeow/group.go @@ -13,6 +13,7 @@ import ( "strings" waBinary "go.mau.fi/whatsmeow/binary" + "go.mau.fi/whatsmeow/store" "go.mau.fi/whatsmeow/types" "go.mau.fi/whatsmeow/types/events" ) @@ -20,8 +21,7 @@ import ( const InviteLinkPrefix = "https://chat.whatsapp.com/" func (cli *Client) sendGroupIQ(ctx context.Context, iqType infoQueryType, jid types.JID, content waBinary.Node) (*waBinary.Node, error) { - return cli.sendIQ(infoQuery{ - Context: ctx, + return cli.sendIQ(ctx, infoQuery{ Namespace: "w:g2", Type: iqType, To: jid, @@ -38,6 +38,11 @@ type ReqCreateGroup struct { // A create key can be provided to deduplicate the group create notification that will be triggered // when the group is created. If provided, the JoinedGroup event will contain the same key. CreateKey types.MessageID + + types.GroupEphemeral + types.GroupAnnounce + types.GroupLocked + types.GroupMembershipApprovalMode // Set IsParent to true to create a community instead of a normal group. // When creating a community, the linked announcement group will be created automatically by the server. types.GroupParent @@ -48,13 +53,22 @@ type ReqCreateGroup struct { // CreateGroup creates a group on WhatsApp with the given name and participants. // // See ReqCreateGroup for parameters. -func (cli *Client) CreateGroup(req ReqCreateGroup) (*types.GroupInfo, error) { +func (cli *Client) CreateGroup(ctx context.Context, req ReqCreateGroup) (*types.GroupInfo, error) { participantNodes := make([]waBinary.Node, len(req.Participants), len(req.Participants)+1) for i, participant := range req.Participants { participantNodes[i] = waBinary.Node{ Tag: "participant", Attrs: waBinary.Attrs{"jid": participant}, } + pt, err := cli.Store.PrivacyTokens.GetPrivacyToken(ctx, participant) + if err != nil { + return nil, fmt.Errorf("failed to get privacy token for participant %s: %v", participant, err) + } else if pt != nil { + participantNodes[i].Content = []waBinary.Node{{ + Tag: "privacy", + Content: pt.Token, + }} + } } if req.CreateKey == "" { req.CreateKey = cli.GenerateMessageID() @@ -75,9 +89,33 @@ func (cli *Client) CreateGroup(req ReqCreateGroup) (*types.GroupInfo, error) { Attrs: waBinary.Attrs{"jid": req.LinkedParentJID}, }) } + if req.IsLocked { + participantNodes = append(participantNodes, waBinary.Node{Tag: "locked"}) + } + if req.IsAnnounce { + participantNodes = append(participantNodes, waBinary.Node{Tag: "announcement"}) + } + if req.IsEphemeral { + participantNodes = append(participantNodes, waBinary.Node{ + Tag: "ephemeral", + Attrs: waBinary.Attrs{ + "expiration": req.DisappearingTimer, + "trigger": "1", // TODO what's this? + }, + }) + } + if req.IsJoinApprovalRequired { + participantNodes = append(participantNodes, waBinary.Node{ + Tag: "membership_approval_mode", + Content: []waBinary.Node{{ + Tag: "group_join", + Attrs: waBinary.Attrs{"state": "on"}, + }}, + }) + } // WhatsApp web doesn't seem to include the static prefix for these key := strings.TrimPrefix(req.CreateKey, "3EB0") - resp, err := cli.sendGroupIQ(context.TODO(), iqSet, types.GroupServerJID, waBinary.Node{ + resp, err := cli.sendGroupIQ(ctx, iqSet, types.GroupServerJID, waBinary.Node{ Tag: "create", Attrs: waBinary.Attrs{ "subject": req.Name, @@ -96,8 +134,8 @@ func (cli *Client) CreateGroup(req ReqCreateGroup) (*types.GroupInfo, error) { } // UnlinkGroup removes a child group from a parent community. -func (cli *Client) UnlinkGroup(parent, child types.JID) error { - _, err := cli.sendGroupIQ(context.TODO(), iqSet, parent, waBinary.Node{ +func (cli *Client) UnlinkGroup(ctx context.Context, parent, child types.JID) error { + _, err := cli.sendGroupIQ(ctx, iqSet, parent, waBinary.Node{ Tag: "unlink", Attrs: waBinary.Attrs{"unlink_type": string(types.GroupLinkChangeTypeSub)}, Content: []waBinary.Node{{ @@ -111,8 +149,8 @@ func (cli *Client) UnlinkGroup(parent, child types.JID) error { // LinkGroup adds an existing group as a child group in a community. // // To create a new group within a community, set LinkedParentJID in the CreateGroup request. -func (cli *Client) LinkGroup(parent, child types.JID) error { - _, err := cli.sendGroupIQ(context.TODO(), iqSet, parent, waBinary.Node{ +func (cli *Client) LinkGroup(ctx context.Context, parent, child types.JID) error { + _, err := cli.sendGroupIQ(ctx, iqSet, parent, waBinary.Node{ Tag: "links", Content: []waBinary.Node{{ Tag: "link", @@ -127,8 +165,8 @@ func (cli *Client) LinkGroup(parent, child types.JID) error { } // LeaveGroup leaves the specified group on WhatsApp. -func (cli *Client) LeaveGroup(jid types.JID) error { - _, err := cli.sendGroupIQ(context.TODO(), iqSet, types.GroupServerJID, waBinary.Node{ +func (cli *Client) LeaveGroup(ctx context.Context, jid types.JID) error { + _, err := cli.sendGroupIQ(ctx, iqSet, types.GroupServerJID, waBinary.Node{ Tag: "leave", Content: []waBinary.Node{{ Tag: "group", @@ -148,15 +186,23 @@ const ( ) // UpdateGroupParticipants can be used to add, remove, promote and demote members in a WhatsApp group. -func (cli *Client) UpdateGroupParticipants(jid types.JID, participantChanges []types.JID, action ParticipantChange) ([]types.GroupParticipant, error) { +func (cli *Client) UpdateGroupParticipants(ctx context.Context, jid types.JID, participantChanges []types.JID, action ParticipantChange) ([]types.GroupParticipant, error) { content := make([]waBinary.Node, len(participantChanges)) for i, participantJID := range participantChanges { content[i] = waBinary.Node{ Tag: "participant", Attrs: waBinary.Attrs{"jid": participantJID}, } + if participantJID.Server == types.HiddenUserServer && action == ParticipantChangeAdd { + pn, err := cli.Store.LIDs.GetPNForLID(ctx, participantJID) + if err != nil { + return nil, fmt.Errorf("failed to get phone number for LID %s: %v", participantJID, err) + } else if !pn.IsEmpty() { + content[i].Attrs["phone_number"] = pn + } + } } - resp, err := cli.sendGroupIQ(context.TODO(), iqSet, jid, waBinary.Node{ + resp, err := cli.sendGroupIQ(ctx, iqSet, jid, waBinary.Node{ Tag: string(action), Content: content, }) @@ -176,8 +222,8 @@ func (cli *Client) UpdateGroupParticipants(jid types.JID, participantChanges []t } // GetGroupRequestParticipants gets the list of participants that have requested to join the group. -func (cli *Client) GetGroupRequestParticipants(jid types.JID) ([]types.JID, error) { - resp, err := cli.sendGroupIQ(context.TODO(), iqGet, jid, waBinary.Node{ +func (cli *Client) GetGroupRequestParticipants(ctx context.Context, jid types.JID) ([]types.GroupParticipantRequest, error) { + resp, err := cli.sendGroupIQ(ctx, iqGet, jid, waBinary.Node{ Tag: "membership_approval_requests", }) if err != nil { @@ -188,9 +234,12 @@ func (cli *Client) GetGroupRequestParticipants(jid types.JID) ([]types.JID, erro return nil, &ElementMissingError{Tag: "membership_approval_requests", In: "response to group request participants query"} } requestParticipants := request.GetChildrenByTag("membership_approval_request") - participants := make([]types.JID, len(requestParticipants)) + participants := make([]types.GroupParticipantRequest, len(requestParticipants)) for i, req := range requestParticipants { - participants[i] = req.AttrGetter().JID("jid") + participants[i] = types.GroupParticipantRequest{ + JID: req.AttrGetter().JID("jid"), + RequestedAt: req.AttrGetter().UnixTime("request_time"), + } } return participants, nil } @@ -203,7 +252,7 @@ const ( ) // UpdateGroupRequestParticipants can be used to approve or reject requests to join the group. -func (cli *Client) UpdateGroupRequestParticipants(jid types.JID, participantChanges []types.JID, action ParticipantRequestChange) ([]types.GroupParticipant, error) { +func (cli *Client) UpdateGroupRequestParticipants(ctx context.Context, jid types.JID, participantChanges []types.JID, action ParticipantRequestChange) ([]types.GroupParticipant, error) { content := make([]waBinary.Node, len(participantChanges)) for i, participantJID := range participantChanges { content[i] = waBinary.Node{ @@ -211,7 +260,7 @@ func (cli *Client) UpdateGroupRequestParticipants(jid types.JID, participantChan Attrs: waBinary.Attrs{"jid": participantJID}, } } - resp, err := cli.sendGroupIQ(context.TODO(), iqSet, jid, waBinary.Node{ + resp, err := cli.sendGroupIQ(ctx, iqSet, jid, waBinary.Node{ Tag: "membership_requests_action", Content: []waBinary.Node{{ Tag: string(action), @@ -240,7 +289,7 @@ func (cli *Client) UpdateGroupRequestParticipants(jid types.JID, participantChan // SetGroupPhoto updates the group picture/icon of the given group on WhatsApp. // The avatar should be a JPEG photo, other formats may be rejected with ErrInvalidImageFormat. // The bytes can be nil to remove the photo. Returns the new picture ID. -func (cli *Client) SetGroupPhoto(jid types.JID, avatar []byte) (string, error) { +func (cli *Client) SetGroupPhoto(ctx context.Context, jid types.JID, avatar []byte) (string, error) { var content interface{} if avatar != nil { content = []waBinary.Node{{ @@ -249,7 +298,7 @@ func (cli *Client) SetGroupPhoto(jid types.JID, avatar []byte) (string, error) { Content: avatar, }} } - resp, err := cli.sendIQ(infoQuery{ + resp, err := cli.sendIQ(ctx, infoQuery{ Namespace: "w:profile:picture", Type: iqSet, To: types.ServerJID, @@ -272,8 +321,8 @@ func (cli *Client) SetGroupPhoto(jid types.JID, avatar []byte) (string, error) { } // SetGroupName updates the name (subject) of the given group on WhatsApp. -func (cli *Client) SetGroupName(jid types.JID, name string) error { - _, err := cli.sendGroupIQ(context.TODO(), iqSet, jid, waBinary.Node{ +func (cli *Client) SetGroupName(ctx context.Context, jid types.JID, name string) error { + _, err := cli.sendGroupIQ(ctx, iqSet, jid, waBinary.Node{ Tag: "subject", Content: []byte(name), }) @@ -285,9 +334,9 @@ func (cli *Client) SetGroupName(jid types.JID, name string) error { // The previousID and newID fields are optional. If the previous ID is not specified, this will // automatically fetch the current group info to find the previous topic ID. If the new ID is not // specified, one will be generated with Client.GenerateMessageID(). -func (cli *Client) SetGroupTopic(jid types.JID, previousID, newID, topic string) error { +func (cli *Client) SetGroupTopic(ctx context.Context, jid types.JID, previousID, newID, topic string) error { if previousID == "" { - oldInfo, err := cli.GetGroupInfo(jid) + oldInfo, err := cli.GetGroupInfo(ctx, jid) if err != nil { return fmt.Errorf("failed to get old group info to update topic: %v", err) } @@ -310,7 +359,7 @@ func (cli *Client) SetGroupTopic(jid types.JID, previousID, newID, topic string) attrs["delete"] = "true" content = nil } - _, err := cli.sendGroupIQ(context.TODO(), iqSet, jid, waBinary.Node{ + _, err := cli.sendGroupIQ(ctx, iqSet, jid, waBinary.Node{ Tag: "description", Attrs: attrs, Content: content, @@ -319,34 +368,34 @@ func (cli *Client) SetGroupTopic(jid types.JID, previousID, newID, topic string) } // SetGroupLocked changes whether the group is locked (i.e. whether only admins can modify group info). -func (cli *Client) SetGroupLocked(jid types.JID, locked bool) error { +func (cli *Client) SetGroupLocked(ctx context.Context, jid types.JID, locked bool) error { tag := "locked" if !locked { tag = "unlocked" } - _, err := cli.sendGroupIQ(context.TODO(), iqSet, jid, waBinary.Node{Tag: tag}) + _, err := cli.sendGroupIQ(ctx, iqSet, jid, waBinary.Node{Tag: tag}) return err } // SetGroupAnnounce changes whether the group is in announce mode (i.e. whether only admins can send messages). -func (cli *Client) SetGroupAnnounce(jid types.JID, announce bool) error { +func (cli *Client) SetGroupAnnounce(ctx context.Context, jid types.JID, announce bool) error { tag := "announcement" if !announce { tag = "not_announcement" } - _, err := cli.sendGroupIQ(context.TODO(), iqSet, jid, waBinary.Node{Tag: tag}) + _, err := cli.sendGroupIQ(ctx, iqSet, jid, waBinary.Node{Tag: tag}) return err } // GetGroupInviteLink requests the invite link to the group from the WhatsApp servers. // // If reset is true, then the old invite link will be revoked and a new one generated. -func (cli *Client) GetGroupInviteLink(jid types.JID, reset bool) (string, error) { +func (cli *Client) GetGroupInviteLink(ctx context.Context, jid types.JID, reset bool) (string, error) { iqType := iqGet if reset { iqType = iqSet } - resp, err := cli.sendGroupIQ(context.TODO(), iqType, jid, waBinary.Node{Tag: "invite"}) + resp, err := cli.sendGroupIQ(ctx, iqType, jid, waBinary.Node{Tag: "invite"}) if errors.Is(err, ErrIQNotAuthorized) { return "", wrapIQError(ErrGroupInviteLinkUnauthorized, err) } else if errors.Is(err, ErrIQNotFound) { @@ -366,8 +415,8 @@ func (cli *Client) GetGroupInviteLink(jid types.JID, reset bool) (string, error) // GetGroupInfoFromInvite gets the group info from an invite message. // // Note that this is specifically for invite messages, not invite links. Use GetGroupInfoFromLink for resolving chat.whatsapp.com links. -func (cli *Client) GetGroupInfoFromInvite(jid, inviter types.JID, code string, expiration int64) (*types.GroupInfo, error) { - resp, err := cli.sendGroupIQ(context.TODO(), iqGet, jid, waBinary.Node{ +func (cli *Client) GetGroupInfoFromInvite(ctx context.Context, jid, inviter types.JID, code string, expiration int64) (*types.GroupInfo, error) { + resp, err := cli.sendGroupIQ(ctx, iqGet, jid, waBinary.Node{ Tag: "query", Content: []waBinary.Node{{ Tag: "add_request", @@ -391,8 +440,8 @@ func (cli *Client) GetGroupInfoFromInvite(jid, inviter types.JID, code string, e // JoinGroupWithInvite joins a group using an invite message. // // Note that this is specifically for invite messages, not invite links. Use JoinGroupWithLink for joining with chat.whatsapp.com links. -func (cli *Client) JoinGroupWithInvite(jid, inviter types.JID, code string, expiration int64) error { - _, err := cli.sendGroupIQ(context.TODO(), iqSet, jid, waBinary.Node{ +func (cli *Client) JoinGroupWithInvite(ctx context.Context, jid, inviter types.JID, code string, expiration int64) error { + _, err := cli.sendGroupIQ(ctx, iqSet, jid, waBinary.Node{ Tag: "accept", Attrs: waBinary.Attrs{ "code": code, @@ -405,9 +454,9 @@ func (cli *Client) JoinGroupWithInvite(jid, inviter types.JID, code string, expi // GetGroupInfoFromLink resolves the given invite link and asks the WhatsApp servers for info about the group. // This will not cause the user to join the group. -func (cli *Client) GetGroupInfoFromLink(code string) (*types.GroupInfo, error) { +func (cli *Client) GetGroupInfoFromLink(ctx context.Context, code string) (*types.GroupInfo, error) { code = strings.TrimPrefix(code, InviteLinkPrefix) - resp, err := cli.sendGroupIQ(context.TODO(), iqGet, types.GroupServerJID, waBinary.Node{ + resp, err := cli.sendGroupIQ(ctx, iqGet, types.GroupServerJID, waBinary.Node{ Tag: "invite", Attrs: waBinary.Attrs{"code": code}, }) @@ -426,9 +475,9 @@ func (cli *Client) GetGroupInfoFromLink(code string) (*types.GroupInfo, error) { } // JoinGroupWithLink joins the group using the given invite link. -func (cli *Client) JoinGroupWithLink(code string) (types.JID, error) { +func (cli *Client) JoinGroupWithLink(ctx context.Context, code string) (types.JID, error) { code = strings.TrimPrefix(code, InviteLinkPrefix) - resp, err := cli.sendGroupIQ(context.TODO(), iqSet, types.GroupServerJID, waBinary.Node{ + resp, err := cli.sendGroupIQ(ctx, iqSet, types.GroupServerJID, waBinary.Node{ Tag: "invite", Attrs: waBinary.Attrs{"code": code}, }) @@ -439,6 +488,10 @@ func (cli *Client) JoinGroupWithLink(code string) (types.JID, error) { } else if err != nil { return types.EmptyJID, err } + membershipApprovalModeNode, ok := resp.GetOptionalChildByTag("membership_approval_request") + if ok { + return membershipApprovalModeNode.AttrGetter().JID("jid"), nil + } groupNode, ok := resp.GetOptionalChildByTag("group") if !ok { return types.EmptyJID, &ElementMissingError{Tag: "group", In: "response to group link join query"} @@ -447,8 +500,8 @@ func (cli *Client) JoinGroupWithLink(code string) (types.JID, error) { } // GetJoinedGroups returns the list of groups the user is participating in. -func (cli *Client) GetJoinedGroups() ([]*types.GroupInfo, error) { - resp, err := cli.sendGroupIQ(context.TODO(), iqGet, types.GroupServerJID, waBinary.Node{ +func (cli *Client) GetJoinedGroups(ctx context.Context) ([]*types.GroupInfo, error) { + resp, err := cli.sendGroupIQ(ctx, iqGet, types.GroupServerJID, waBinary.Node{ Tag: "participating", Content: []waBinary.Node{ {Tag: "participants"}, @@ -464,6 +517,8 @@ func (cli *Client) GetJoinedGroups() ([]*types.GroupInfo, error) { } children := groups.GetChildren() infos := make([]*types.GroupInfo, 0, len(children)) + var allLIDPairs []store.LIDMapping + var allRedactedPhones []store.RedactedPhoneEntry for _, child := range children { if child.Tag != "group" { cli.Log.Debugf("Unexpected child in group list response: %s", child.XMLString()) @@ -473,14 +528,25 @@ func (cli *Client) GetJoinedGroups() ([]*types.GroupInfo, error) { if parseErr != nil { cli.Log.Warnf("Error parsing group %s: %v", parsed.JID, parseErr) } + lidPairs, redactedPhones := cli.cacheGroupInfo(parsed, true) + allLIDPairs = append(allLIDPairs, lidPairs...) + allRedactedPhones = append(allRedactedPhones, redactedPhones...) infos = append(infos, parsed) } + err = cli.Store.LIDs.PutManyLIDMappings(ctx, allLIDPairs) + if err != nil { + cli.Log.Warnf("Failed to store LID mappings from joined groups: %v", err) + } + err = cli.Store.Contacts.PutManyRedactedPhones(ctx, allRedactedPhones) + if err != nil { + cli.Log.Warnf("Failed to store redacted phones from joined groups: %v", err) + } return infos, nil } // GetSubGroups gets the subgroups of the given community. -func (cli *Client) GetSubGroups(community types.JID) ([]*types.GroupLinkTarget, error) { - res, err := cli.sendGroupIQ(context.TODO(), iqGet, community, waBinary.Node{Tag: "sub_groups"}) +func (cli *Client) GetSubGroups(ctx context.Context, community types.JID) ([]*types.GroupLinkTarget, error) { + res, err := cli.sendGroupIQ(ctx, iqGet, community, waBinary.Node{Tag: "sub_groups"}) if err != nil { return nil, err } @@ -502,8 +568,8 @@ func (cli *Client) GetSubGroups(community types.JID) ([]*types.GroupLinkTarget, } // GetLinkedGroupsParticipants gets all the participants in the groups of the given community. -func (cli *Client) GetLinkedGroupsParticipants(community types.JID) ([]types.JID, error) { - res, err := cli.sendGroupIQ(context.TODO(), iqGet, community, waBinary.Node{Tag: "linked_groups_participants"}) +func (cli *Client) GetLinkedGroupsParticipants(ctx context.Context, community types.JID) ([]types.JID, error) { + res, err := cli.sendGroupIQ(ctx, iqGet, community, waBinary.Node{Tag: "linked_groups_participants"}) if err != nil { return nil, err } @@ -511,12 +577,50 @@ func (cli *Client) GetLinkedGroupsParticipants(community types.JID) ([]types.JID if !ok { return nil, &ElementMissingError{Tag: "linked_groups_participants", In: "response to community participants query"} } - return parseParticipantList(&participants), nil + members, lidPairs := parseParticipantList(&participants) + if len(lidPairs) > 0 { + err = cli.Store.LIDs.PutManyLIDMappings(ctx, lidPairs) + if err != nil { + cli.Log.Warnf("Failed to store LID mappings for community participants: %v", err) + } + } + return members, nil } // GetGroupInfo requests basic info about a group chat from the WhatsApp servers. -func (cli *Client) GetGroupInfo(jid types.JID) (*types.GroupInfo, error) { - return cli.getGroupInfo(context.TODO(), jid, true) +func (cli *Client) GetGroupInfo(ctx context.Context, jid types.JID) (*types.GroupInfo, error) { + return cli.getGroupInfo(ctx, jid, true) +} + +func (cli *Client) cacheGroupInfo(groupInfo *types.GroupInfo, lock bool) ([]store.LIDMapping, []store.RedactedPhoneEntry) { + participants := make([]types.JID, len(groupInfo.Participants)) + lidPairs := make([]store.LIDMapping, len(groupInfo.Participants)) + redactedPhones := make([]store.RedactedPhoneEntry, 0) + for i, part := range groupInfo.Participants { + participants[i] = part.JID + if !part.PhoneNumber.IsEmpty() && !part.LID.IsEmpty() { + lidPairs[i] = store.LIDMapping{ + LID: part.LID, + PN: part.PhoneNumber, + } + } + if part.DisplayName != "" && !part.LID.IsEmpty() { + redactedPhones = append(redactedPhones, store.RedactedPhoneEntry{ + JID: part.LID, + RedactedPhone: part.DisplayName, + }) + } + } + if lock { + cli.groupCacheLock.Lock() + defer cli.groupCacheLock.Unlock() + } + cli.groupCache[groupInfo.JID] = &groupMetaCache{ + AddressingMode: groupInfo.AddressingMode, + CommunityAnnouncementGroup: groupInfo.IsAnnounce && groupInfo.IsDefaultSubGroup, + Members: participants, + } + return lidPairs, redactedPhones } func (cli *Client) getGroupInfo(ctx context.Context, jid types.JID, lockParticipantCache bool) (*types.GroupInfo, error) { @@ -540,28 +644,29 @@ func (cli *Client) getGroupInfo(ctx context.Context, jid types.JID, lockParticip if err != nil { return groupInfo, err } - if lockParticipantCache { - cli.groupParticipantsCacheLock.Lock() - defer cli.groupParticipantsCacheLock.Unlock() + lidPairs, redactedPhones := cli.cacheGroupInfo(groupInfo, lockParticipantCache) + err = cli.Store.LIDs.PutManyLIDMappings(ctx, lidPairs) + if err != nil { + cli.Log.Warnf("Failed to store LID mappings for members of %s: %v", jid, err) } - participants := make([]types.JID, len(groupInfo.Participants)) - for i, part := range groupInfo.Participants { - participants[i] = part.JID + err = cli.Store.Contacts.PutManyRedactedPhones(ctx, redactedPhones) + if err != nil { + cli.Log.Warnf("Failed to store redacted phones for members of %s: %v", jid, err) } - cli.groupParticipantsCache[jid] = participants return groupInfo, nil } -func (cli *Client) getGroupMembers(ctx context.Context, jid types.JID) ([]types.JID, error) { - cli.groupParticipantsCacheLock.Lock() - defer cli.groupParticipantsCacheLock.Unlock() - if _, ok := cli.groupParticipantsCache[jid]; !ok { - _, err := cli.getGroupInfo(ctx, jid, false) - if err != nil { - return nil, err - } +func (cli *Client) getCachedGroupData(ctx context.Context, jid types.JID) (*groupMetaCache, error) { + cli.groupCacheLock.Lock() + defer cli.groupCacheLock.Unlock() + if val, ok := cli.groupCache[jid]; ok { + return val, nil } - return cli.groupParticipantsCache[jid], nil + _, err := cli.getGroupInfo(ctx, jid, false) + if err != nil { + return nil, err + } + return cli.groupCache[jid], nil } func parseParticipant(childAG *waBinary.AttrUtility, child *waBinary.Node) types.GroupParticipant { @@ -570,12 +675,14 @@ func parseParticipant(childAG *waBinary.AttrUtility, child *waBinary.Node) types IsAdmin: pcpType == "admin" || pcpType == "superadmin", IsSuperAdmin: pcpType == "superadmin", JID: childAG.JID("jid"), - LID: childAG.OptionalJIDOrEmpty("lid"), DisplayName: childAG.OptionalString("display_name"), } - if participant.JID.Server == types.HiddenUserServer && participant.LID.IsEmpty() { + if participant.JID.Server == types.HiddenUserServer { participant.LID = participant.JID - //participant.JID = types.EmptyJID + participant.PhoneNumber = childAG.OptionalJIDOrEmpty("phone_number") + } else if participant.JID.Server == types.DefaultUserServer { + participant.PhoneNumber = participant.JID + participant.LID = childAG.OptionalJIDOrEmpty("lid") } if errorCode := childAG.OptionalInt("error"); errorCode != 0 { participant.Error = errorCode @@ -597,15 +704,20 @@ func (cli *Client) parseGroupNode(groupNode *waBinary.Node) (*types.GroupInfo, e group.JID = types.NewJID(ag.String("id"), types.GroupServer) group.OwnerJID = ag.OptionalJIDOrEmpty("creator") + group.OwnerPN = ag.OptionalJIDOrEmpty("creator_pn") - group.Name = ag.String("subject") - group.NameSetAt = ag.UnixTime("s_t") + group.Name = ag.OptionalString("subject") + group.NameSetAt = ag.OptionalUnixTime("s_t") group.NameSetBy = ag.OptionalJIDOrEmpty("s_o") + group.NameSetByPN = ag.OptionalJIDOrEmpty("s_o_pn") group.GroupCreated = ag.UnixTime("creation") + group.CreatorCountryCode = ag.OptionalString("creator_country_code") group.AnnounceVersionID = ag.OptionalString("a_v_id") group.ParticipantVersionID = ag.OptionalString("p_v_id") + group.ParticipantCount = ag.OptionalInt("size") + group.AddressingMode = types.AddressingMode(ag.OptionalString("addressing_mode")) for _, child := range groupNode.GetChildren() { childAG := child.AttrGetter() @@ -619,6 +731,7 @@ func (cli *Client) parseGroupNode(groupNode *waBinary.Node) (*types.GroupInfo, e group.Topic = string(topicBytes) group.TopicID = childAG.String("id") group.TopicSetBy = childAG.OptionalJIDOrEmpty("participant") + group.TopicSetByPN = childAG.OptionalJIDOrEmpty("participant_pn") // TODO confirm field name group.TopicSetAt = childAG.UnixTime("t") } case "announcement": @@ -640,7 +753,10 @@ func (cli *Client) parseGroupNode(groupNode *waBinary.Node) (*types.GroupInfo, e group.DefaultMembershipApprovalMode = childAG.OptionalString("default_membership_approval_mode") case "incognito": group.IsIncognito = true - // TODO: membership_approval_mode + case "membership_approval_mode": + group.IsJoinApprovalRequired = true + case "suspended": + group.Suspended = true default: cli.Log.Debugf("Unknown element in group node %s: %s", group.JID.String(), child.XMLString()) } @@ -661,8 +777,8 @@ func parseGroupLinkTargetNode(groupNode *waBinary.Node) (types.GroupLinkTarget, return types.GroupLinkTarget{ JID: jidKey, GroupName: types.GroupName{ - Name: ag.String("subject"), - NameSetAt: ag.UnixTime("s_t"), + Name: ag.OptionalString("subject"), + NameSetAt: ag.OptionalUnixTime("s_t"), }, GroupIsDefaultSub: types.GroupIsDefaultSub{ IsDefaultSubGroup: groupNode.GetChildByTag("default_sub_group").Tag == "default_sub_group", @@ -670,7 +786,7 @@ func parseGroupLinkTargetNode(groupNode *waBinary.Node) (types.GroupLinkTarget, }, ag.Error() } -func parseParticipantList(node *waBinary.Node) (participants []types.JID) { +func parseParticipantList(node *waBinary.Node) (participants []types.JID, lidPairs []store.LIDMapping) { children := node.GetChildren() participants = make([]types.JID, 0, len(children)) for _, child := range children { @@ -679,55 +795,79 @@ func parseParticipantList(node *waBinary.Node) (participants []types.JID) { continue } participants = append(participants, jid) + if jid.Server == types.HiddenUserServer { + phoneNumber, ok := child.Attrs["phone_number"].(types.JID) + if ok && !phoneNumber.IsEmpty() { + lidPairs = append(lidPairs, store.LIDMapping{ + LID: jid, + PN: phoneNumber, + }) + } + } else if jid.Server == types.DefaultUserServer { + lid, ok := child.Attrs["lid"].(types.JID) + if ok && !lid.IsEmpty() { + lidPairs = append(lidPairs, store.LIDMapping{ + LID: lid, + PN: jid, + }) + } + } } return } -func (cli *Client) parseGroupCreate(node *waBinary.Node) (*events.JoinedGroup, error) { +func (cli *Client) parseGroupCreate(parentNode, node *waBinary.Node) (*events.JoinedGroup, []store.LIDMapping, []store.RedactedPhoneEntry, error) { groupNode, ok := node.GetOptionalChildByTag("group") if !ok { - return nil, fmt.Errorf("group create notification didn't contain group info") + return nil, nil, nil, fmt.Errorf("group create notification didn't contain group info") } var evt events.JoinedGroup + pag := parentNode.AttrGetter() ag := node.AttrGetter() evt.Reason = ag.OptionalString("reason") evt.CreateKey = ag.OptionalString("key") evt.Type = ag.OptionalString("type") + evt.Sender = pag.OptionalJID("participant") + evt.SenderPN = pag.OptionalJID("participant_pn") + evt.Notify = pag.OptionalString("notify") info, err := cli.parseGroupNode(&groupNode) if err != nil { - return nil, fmt.Errorf("failed to parse group info in create notification: %w", err) + return nil, nil, nil, fmt.Errorf("failed to parse group info in create notification: %w", err) } evt.GroupInfo = *info - return &evt, nil + lidPairs, redactedPhones := cli.cacheGroupInfo(info, true) + return &evt, lidPairs, redactedPhones, nil } -func (cli *Client) parseGroupChange(node *waBinary.Node) (*events.GroupInfo, error) { +func (cli *Client) parseGroupChange(node *waBinary.Node) (*events.GroupInfo, []store.LIDMapping, error) { var evt events.GroupInfo ag := node.AttrGetter() evt.JID = ag.JID("from") evt.Notify = ag.OptionalString("notify") evt.Sender = ag.OptionalJID("participant") + evt.SenderPN = ag.OptionalJID("participant_pn") evt.Timestamp = ag.UnixTime("t") if !ag.OK() { - return nil, fmt.Errorf("group change doesn't contain required attributes: %w", ag.Error()) + return nil, nil, fmt.Errorf("group change doesn't contain required attributes: %w", ag.Error()) } + var lidPairs []store.LIDMapping for _, child := range node.GetChildren() { cag := child.AttrGetter() if child.Tag == "add" || child.Tag == "remove" || child.Tag == "promote" || child.Tag == "demote" { - evt.PrevParticipantVersionID = cag.String("prev_v_id") - evt.ParticipantVersionID = cag.String("v_id") + evt.PrevParticipantVersionID = cag.OptionalString("prev_v_id") + evt.ParticipantVersionID = cag.OptionalString("v_id") } switch child.Tag { case "add": evt.JoinReason = cag.OptionalString("reason") - evt.Join = parseParticipantList(&child) + evt.Join, lidPairs = parseParticipantList(&child) case "remove": - evt.Leave = parseParticipantList(&child) + evt.Leave, lidPairs = parseParticipantList(&child) case "promote": - evt.Promote = parseParticipantList(&child) + evt.Promote, lidPairs = parseParticipantList(&child) case "demote": - evt.Demote = parseParticipantList(&child) + evt.Demote, lidPairs = parseParticipantList(&child) case "locked": evt.Locked = &types.GroupLocked{IsLocked: true} case "unlocked": @@ -736,9 +876,10 @@ func (cli *Client) parseGroupChange(node *waBinary.Node) (*events.GroupInfo, err evt.Delete = &types.GroupDelete{Deleted: true, DeleteReason: cag.String("reason")} case "subject": evt.Name = &types.GroupName{ - Name: cag.String("subject"), - NameSetAt: cag.UnixTime("s_t"), - NameSetBy: cag.OptionalJIDOrEmpty("s_o"), + Name: cag.String("subject"), + NameSetAt: cag.UnixTime("s_t"), + NameSetBy: cag.OptionalJIDOrEmpty("s_o"), + NameSetByPN: cag.OptionalJIDOrEmpty("s_o_pn"), } case "description": var topicStr string @@ -747,7 +888,7 @@ func (cli *Client) parseGroupChange(node *waBinary.Node) (*events.GroupInfo, err topicChild := child.GetChildByTag("body") topicBytes, ok := topicChild.Content.([]byte) if !ok { - return nil, fmt.Errorf("group change description has unexpected body: %s", topicChild.XMLString()) + return nil, nil, fmt.Errorf("group change description has unexpected body: %s", topicChild.XMLString()) } topicStr = string(topicBytes) } @@ -789,12 +930,12 @@ func (cli *Client) parseGroupChange(node *waBinary.Node) (*events.GroupInfo, err } groupNode, ok := child.GetOptionalChildByTag("group") if !ok { - return nil, &ElementMissingError{Tag: "group", In: "group link"} + return nil, nil, &ElementMissingError{Tag: "group", In: "group link"} } var err error evt.Link.Group, err = parseGroupLinkTargetNode(&groupNode) if err != nil { - return nil, fmt.Errorf("failed to parse group link node in group change: %w", err) + return nil, nil, fmt.Errorf("failed to parse group link node in group change: %w", err) } case "unlink": evt.Unlink = &types.GroupLinkChange{ @@ -803,64 +944,124 @@ func (cli *Client) parseGroupChange(node *waBinary.Node) (*events.GroupInfo, err } groupNode, ok := child.GetOptionalChildByTag("group") if !ok { - return nil, &ElementMissingError{Tag: "group", In: "group unlink"} + return nil, nil, &ElementMissingError{Tag: "group", In: "group unlink"} } var err error evt.Unlink.Group, err = parseGroupLinkTargetNode(&groupNode) if err != nil { - return nil, fmt.Errorf("failed to parse group unlink node in group change: %w", err) + return nil, nil, fmt.Errorf("failed to parse group unlink node in group change: %w", err) + } + case "membership_approval_mode": + evt.MembershipApprovalMode = &types.GroupMembershipApprovalMode{ + IsJoinApprovalRequired: true, } + case "suspended": + evt.Suspended = true + case "unsuspended": + evt.Unsuspended = true default: evt.UnknownChanges = append(evt.UnknownChanges, &child) } if !cag.OK() { - return nil, fmt.Errorf("group change %s element doesn't contain required attributes: %w", child.Tag, cag.Error()) + return nil, nil, fmt.Errorf("group change %s element doesn't contain required attributes: %w", child.Tag, cag.Error()) } } - return &evt, nil + return &evt, lidPairs, nil } func (cli *Client) updateGroupParticipantCache(evt *events.GroupInfo) { + // TODO can the addressing mode change here? if len(evt.Join) == 0 && len(evt.Leave) == 0 { return } - cli.groupParticipantsCacheLock.Lock() - defer cli.groupParticipantsCacheLock.Unlock() - cached, ok := cli.groupParticipantsCache[evt.JID] + cli.groupCacheLock.Lock() + defer cli.groupCacheLock.Unlock() + cached, ok := cli.groupCache[evt.JID] if !ok { return } Outer: for _, jid := range evt.Join { - for _, existingJID := range cached { + for _, existingJID := range cached.Members { if jid == existingJID { continue Outer } } - cached = append(cached, jid) + cached.Members = append(cached.Members, jid) } for _, jid := range evt.Leave { - for i, existingJID := range cached { + for i, existingJID := range cached.Members { if existingJID == jid { - cached[i] = cached[len(cached)-1] - cached = cached[:len(cached)-1] + cached.Members[i] = cached.Members[len(cached.Members)-1] + cached.Members = cached.Members[:len(cached.Members)-1] break } } } - cli.groupParticipantsCache[evt.JID] = cached } -func (cli *Client) parseGroupNotification(node *waBinary.Node) (interface{}, error) { +func (cli *Client) parseGroupNotification(node *waBinary.Node) (any, []store.LIDMapping, []store.RedactedPhoneEntry, error) { children := node.GetChildren() if len(children) == 1 && children[0].Tag == "create" { - return cli.parseGroupCreate(&children[0]) + return cli.parseGroupCreate(node, &children[0]) } else { - groupChange, err := cli.parseGroupChange(node) + groupChange, lidPairs, err := cli.parseGroupChange(node) if err != nil { - return nil, err + return nil, nil, nil, err } cli.updateGroupParticipantCache(groupChange) - return groupChange, nil + return groupChange, lidPairs, nil, nil + } +} + +// SetGroupJoinApprovalMode sets the group join approval mode to 'on' or 'off'. +func (cli *Client) SetGroupJoinApprovalMode(ctx context.Context, jid types.JID, mode bool) error { + modeStr := "off" + if mode { + modeStr = "on" + } + + content := waBinary.Node{ + Tag: "membership_approval_mode", + Content: []waBinary.Node{ + { + Tag: "group_join", + Attrs: waBinary.Attrs{"state": modeStr}, + }, + }, + } + + _, err := cli.sendGroupIQ(ctx, iqSet, jid, content) + return err +} + +// SetGroupMemberAddMode sets the group member add mode to 'admin_add' or 'all_member_add'. +func (cli *Client) SetGroupMemberAddMode(ctx context.Context, jid types.JID, mode types.GroupMemberAddMode) error { + if mode != types.GroupMemberAddModeAdmin && mode != types.GroupMemberAddModeAllMember { + return errors.New("invalid mode, must be 'admin_add' or 'all_member_add'") } + + content := waBinary.Node{ + Tag: "member_add_mode", + Content: []byte(mode), + } + + _, err := cli.sendGroupIQ(ctx, iqSet, jid, content) + return err +} + +// SetGroupDescription updates the group description. +func (cli *Client) SetGroupDescription(ctx context.Context, jid types.JID, description string) error { + content := waBinary.Node{ + Tag: "description", + Content: []waBinary.Node{ + { + Tag: "body", + Content: []byte(description), + }, + }, + } + + _, err := cli.sendGroupIQ(ctx, iqSet, jid, content) + return err } diff --git a/vendor/go.mau.fi/whatsmeow/handshake.go b/vendor/go.mau.fi/whatsmeow/handshake.go index d6c26a5006..c345831587 100644 --- a/vendor/go.mau.fi/whatsmeow/handshake.go +++ b/vendor/go.mau.fi/whatsmeow/handshake.go @@ -8,13 +8,15 @@ package whatsmeow import ( "bytes" + "context" "fmt" "time" "go.mau.fi/libsignal/ecc" "google.golang.org/protobuf/proto" - waProto "go.mau.fi/whatsmeow/binary/proto" + "go.mau.fi/whatsmeow/proto/waCert" + "go.mau.fi/whatsmeow/proto/waWa6" "go.mau.fi/whatsmeow/socket" "go.mau.fi/whatsmeow/util/keys" ) @@ -25,12 +27,12 @@ const WACertIssuerSerial = 0 var WACertPubKey = [...]byte{0x14, 0x23, 0x75, 0x57, 0x4d, 0xa, 0x58, 0x71, 0x66, 0xaa, 0xe7, 0x1e, 0xbe, 0x51, 0x64, 0x37, 0xc4, 0xa2, 0x8b, 0x73, 0xe3, 0x69, 0x5c, 0x6c, 0xe1, 0xf7, 0xf9, 0x54, 0x5d, 0xa8, 0xee, 0x6b} // doHandshake implements the Noise_XX_25519_AESGCM_SHA256 handshake for the WhatsApp web API. -func (cli *Client) doHandshake(fs *socket.FrameSocket, ephemeralKP keys.KeyPair) error { +func (cli *Client) doHandshake(ctx context.Context, fs *socket.FrameSocket, ephemeralKP keys.KeyPair) error { nh := socket.NewNoiseHandshake() nh.Start(socket.NoiseStartPattern, fs.Header) nh.Authenticate(ephemeralKP.Pub[:]) - data, err := proto.Marshal(&waProto.HandshakeMessage{ - ClientHello: &waProto.HandshakeClientHello{ + data, err := proto.Marshal(&waWa6.HandshakeMessage{ + ClientHello: &waWa6.HandshakeMessage_ClientHello{ Ephemeral: ephemeralKP.Pub[:], }, }) @@ -47,7 +49,7 @@ func (cli *Client) doHandshake(fs *socket.FrameSocket, ephemeralKP keys.KeyPair) case <-time.After(NoiseHandshakeResponseTimeout): return fmt.Errorf("timed out waiting for handshake response") } - var handshakeResponse waProto.HandshakeMessage + var handshakeResponse waWa6.HandshakeMessage err = proto.Unmarshal(resp, &handshakeResponse) if err != nil { return fmt.Errorf("failed to unmarshal handshake response: %w", err) @@ -90,7 +92,7 @@ func (cli *Client) doHandshake(fs *socket.FrameSocket, ephemeralKP keys.KeyPair) return fmt.Errorf("failed to mix noise private key in: %w", err) } - var clientPayload *waProto.ClientPayload + var clientPayload *waWa6.ClientPayload if cli.GetClientPayload != nil { clientPayload = cli.GetClientPayload() } else { @@ -102,8 +104,8 @@ func (cli *Client) doHandshake(fs *socket.FrameSocket, ephemeralKP keys.KeyPair) return fmt.Errorf("failed to marshal client finish payload: %w", err) } encryptedClientFinishPayload := nh.Encrypt(clientFinishPayloadBytes) - data, err = proto.Marshal(&waProto.HandshakeMessage{ - ClientFinish: &waProto.HandshakeClientFinish{ + data, err = proto.Marshal(&waWa6.HandshakeMessage{ + ClientFinish: &waWa6.HandshakeMessage_ClientFinish{ Static: encryptedPubkey, Payload: encryptedClientFinishPayload, }, @@ -116,7 +118,7 @@ func (cli *Client) doHandshake(fs *socket.FrameSocket, ephemeralKP keys.KeyPair) return fmt.Errorf("failed to send handshake finish message: %w", err) } - ns, err := nh.Finish(fs, cli.handleFrame, cli.onDisconnect) + ns, err := nh.Finish(ctx, fs, cli.handleFrame, cli.onDisconnect) if err != nil { return fmt.Errorf("failed to create noise socket: %w", err) } @@ -127,12 +129,12 @@ func (cli *Client) doHandshake(fs *socket.FrameSocket, ephemeralKP keys.KeyPair) } func verifyServerCert(certDecrypted, staticDecrypted []byte) error { - var certChain waProto.CertChain + var certChain waCert.CertChain err := proto.Unmarshal(certDecrypted, &certChain) if err != nil { return fmt.Errorf("failed to unmarshal noise certificate: %w", err) } - var intermediateCertDetails, leafCertDetails waProto.CertChain_NoiseCertificate_Details + var intermediateCertDetails, leafCertDetails waCert.CertChain_NoiseCertificate_Details intermediateCertDetailsRaw := certChain.GetIntermediate().GetDetails() intermediateCertSignature := certChain.GetIntermediate().GetSignature() leafCertDetailsRaw := certChain.GetLeaf().GetDetails() diff --git a/vendor/go.mau.fi/whatsmeow/internals.go b/vendor/go.mau.fi/whatsmeow/internals.go index 126eb93816..d698485981 100644 --- a/vendor/go.mau.fi/whatsmeow/internals.go +++ b/vendor/go.mau.fi/whatsmeow/internals.go @@ -1,25 +1,39 @@ -// Copyright (c) 2022 Tulir Asokan -// -// This Source Code Form is subject to the terms of the Mozilla Public -// License, v. 2.0. If a copy of the MPL was not distributed with this -// file, You can obtain one at http://mozilla.org/MPL/2.0/. +// GENERATED BY internals_generate.go; DO NOT EDIT + +//go:generate go run internals_generate.go +//go:generate goimports -local go.mau.fi/whatsmeow -w internals.go package whatsmeow import ( "context" + "encoding/json" + "io" + "net/http" + "time" "go.mau.fi/libsignal/keys/prekey" + "go.mau.fi/whatsmeow/appstate" waBinary "go.mau.fi/whatsmeow/binary" + "go.mau.fi/whatsmeow/proto/waCommon" + "go.mau.fi/whatsmeow/proto/waE2E" + "go.mau.fi/whatsmeow/proto/waHistorySync" + "go.mau.fi/whatsmeow/proto/waMsgApplication" + "go.mau.fi/whatsmeow/proto/waMsgTransport" + "go.mau.fi/whatsmeow/proto/waServerSync" + "go.mau.fi/whatsmeow/socket" + "go.mau.fi/whatsmeow/store" "go.mau.fi/whatsmeow/types" + "go.mau.fi/whatsmeow/types/events" + "go.mau.fi/whatsmeow/util/keys" ) type DangerousInternalClient struct { c *Client } -// DangerousInternals allows access to some unexported methods in Client. +// DangerousInternals allows access to all unexported methods in Client. // // Deprecated: dangerous func (cli *Client) DangerousInternals() *DangerousInternalClient { @@ -29,16 +43,532 @@ func (cli *Client) DangerousInternals() *DangerousInternalClient { type DangerousInfoQuery = infoQuery type DangerousInfoQueryType = infoQueryType -func (int *DangerousInternalClient) SendIQ(query DangerousInfoQuery) (*waBinary.Node, error) { - return int.c.sendIQ(query) +func (int *DangerousInternalClient) FetchAppState(ctx context.Context, name appstate.WAPatchName, fullSync, onlyIfNotSynced bool) ([]any, error) { + return int.c.fetchAppState(ctx, name, fullSync, onlyIfNotSynced) +} + +func (int *DangerousInternalClient) HandleAppStateRecovery(ctx context.Context, reqID types.MessageID, result []*waE2E.PeerDataOperationRequestResponseMessage_PeerDataOperationResult) bool { + return int.c.handleAppStateRecovery(ctx, reqID, result) +} + +func (int *DangerousInternalClient) ApplyAppStatePatches(ctx context.Context, name appstate.WAPatchName, state appstate.HashState, patches *appstate.PatchList, fullSync bool, eventsToDispatch *[]any) (appstate.HashState, error) { + return int.c.applyAppStatePatches(ctx, name, state, patches, fullSync, eventsToDispatch) +} + +func (int *DangerousInternalClient) CollectEventsToDispatch(ctx context.Context, name appstate.WAPatchName, mutations []appstate.Mutation, fullSync bool, eventsToDispatch *[]any) error { + return int.c.collectEventsToDispatch(ctx, name, mutations, fullSync, eventsToDispatch) +} + +func (int *DangerousInternalClient) FilterContacts(mutations []appstate.Mutation) ([]appstate.Mutation, []store.ContactEntry) { + return int.c.filterContacts(mutations) +} + +func (int *DangerousInternalClient) DispatchAppState(ctx context.Context, name appstate.WAPatchName, mutation appstate.Mutation, fullSync bool) (eventToDispatch any) { + return int.c.dispatchAppState(ctx, name, mutation, fullSync) +} + +func (int *DangerousInternalClient) DownloadExternalAppStateBlob(ctx context.Context, ref *waServerSync.ExternalBlobReference) ([]byte, error) { + return int.c.downloadExternalAppStateBlob(ctx, ref) +} + +func (int *DangerousInternalClient) FetchAppStatePatches(ctx context.Context, name appstate.WAPatchName, fromVersion uint64, snapshot bool) (*appstate.PatchList, error) { + return int.c.fetchAppStatePatches(ctx, name, fromVersion, snapshot) +} + +func (int *DangerousInternalClient) RequestMissingAppStateKeys(ctx context.Context, patches *appstate.PatchList) { + int.c.requestMissingAppStateKeys(ctx, patches) +} + +func (int *DangerousInternalClient) RequestAppStateKeys(ctx context.Context, rawKeyIDs [][]byte) { + int.c.requestAppStateKeys(ctx, rawKeyIDs) +} + +func (int *DangerousInternalClient) SendAppState(ctx context.Context, patch appstate.PatchInfo, allowRetry bool) error { + return int.c.sendAppState(ctx, patch, allowRetry) +} + +func (int *DangerousInternalClient) HandleDecryptedArmadillo(ctx context.Context, info *types.MessageInfo, decrypted []byte, retryCount int) (handlerFailed, protobufFailed bool) { + return int.c.handleDecryptedArmadillo(ctx, info, decrypted, retryCount) +} + +func (int *DangerousInternalClient) GetBroadcastListParticipants(ctx context.Context, jid types.JID) ([]types.JID, error) { + return int.c.getBroadcastListParticipants(ctx, jid) +} + +func (int *DangerousInternalClient) GetStatusBroadcastRecipients(ctx context.Context) ([]types.JID, error) { + return int.c.getStatusBroadcastRecipients(ctx) +} + +func (int *DangerousInternalClient) HandleCallEvent(ctx context.Context, node *waBinary.Node) { + int.c.handleCallEvent(ctx, node) +} + +func (int *DangerousInternalClient) SetTransport(transport *http.Transport, opt SetProxyOptions) { + int.c.setTransport(transport, opt) +} + +func (int *DangerousInternalClient) GetSocketWaitChan() <-chan struct{} { + return int.c.getSocketWaitChan() +} + +func (int *DangerousInternalClient) CloseSocketWaitChan() { + int.c.closeSocketWaitChan() +} + +func (int *DangerousInternalClient) GetOwnID() types.JID { + return int.c.getOwnID() +} + +func (int *DangerousInternalClient) GetOwnLID() types.JID { + return int.c.getOwnLID() +} + +func (int *DangerousInternalClient) Connect(ctx context.Context) error { + return int.c.connect(ctx) +} + +func (int *DangerousInternalClient) UnlockedConnect(ctx context.Context) error { + return int.c.unlockedConnect(ctx) +} + +func (int *DangerousInternalClient) OnDisconnect(ctx context.Context, ns *socket.NoiseSocket, remote bool) { + int.c.onDisconnect(ctx, ns, remote) +} + +func (int *DangerousInternalClient) ExpectDisconnect() { + int.c.expectDisconnect() +} + +func (int *DangerousInternalClient) ResetExpectedDisconnect() { + int.c.resetExpectedDisconnect() +} + +func (int *DangerousInternalClient) IsExpectedDisconnect() bool { + return int.c.isExpectedDisconnect() +} + +func (int *DangerousInternalClient) AutoReconnect(ctx context.Context) { + int.c.autoReconnect(ctx) +} + +func (int *DangerousInternalClient) UnlockedDisconnect() { + int.c.unlockedDisconnect() +} + +func (int *DangerousInternalClient) HandleFrame(ctx context.Context, data []byte) { + int.c.handleFrame(ctx, data) +} + +func (int *DangerousInternalClient) HandlerQueueLoop(evtCtx, connCtx context.Context) { + int.c.handlerQueueLoop(evtCtx, connCtx) +} + +func (int *DangerousInternalClient) SendNodeAndGetData(ctx context.Context, node waBinary.Node) ([]byte, error) { + return int.c.sendNodeAndGetData(ctx, node) +} + +func (int *DangerousInternalClient) SendNode(ctx context.Context, node waBinary.Node) error { + return int.c.sendNode(ctx, node) +} + +func (int *DangerousInternalClient) DispatchEvent(evt any) (handlerFailed bool) { + return int.c.dispatchEvent(evt) +} + +func (int *DangerousInternalClient) GetUnifiedSessionID() string { + return int.c.getUnifiedSessionID() +} + +func (int *DangerousInternalClient) SendUnifiedSession() { + int.c.sendUnifiedSession() +} + +func (int *DangerousInternalClient) HandleStreamError(ctx context.Context, node *waBinary.Node) { + int.c.handleStreamError(ctx, node) +} + +func (int *DangerousInternalClient) HandleIB(ctx context.Context, node *waBinary.Node) { + int.c.handleIB(ctx, node) +} + +func (int *DangerousInternalClient) HandleConnectFailure(ctx context.Context, node *waBinary.Node) { + int.c.handleConnectFailure(ctx, node) +} + +func (int *DangerousInternalClient) HandleConnectSuccess(ctx context.Context, node *waBinary.Node) { + int.c.handleConnectSuccess(ctx, node) +} + +func (int *DangerousInternalClient) DownloadAndDecrypt(ctx context.Context, url string, mediaKey []byte, appInfo MediaType, fileLength int, fileEncSHA256, fileSHA256 []byte) (data []byte, err error) { + return int.c.downloadAndDecrypt(ctx, url, mediaKey, appInfo, fileLength, fileEncSHA256, fileSHA256) +} + +func (int *DangerousInternalClient) DownloadPossiblyEncryptedMediaWithRetries(ctx context.Context, url string, checksum []byte) (file, mac []byte, err error) { + return int.c.downloadPossiblyEncryptedMediaWithRetries(ctx, url, checksum) +} + +func (int *DangerousInternalClient) DoMediaDownloadRequest(ctx context.Context, url string) (*http.Response, error) { + return int.c.doMediaDownloadRequest(ctx, url) +} + +func (int *DangerousInternalClient) DownloadMedia(ctx context.Context, url string) ([]byte, error) { + return int.c.downloadMedia(ctx, url) +} + +func (int *DangerousInternalClient) DownloadEncryptedMedia(ctx context.Context, url string, checksum []byte) (file, mac []byte, err error) { + return int.c.downloadEncryptedMedia(ctx, url, checksum) +} + +func (int *DangerousInternalClient) DownloadAndDecryptToFile(ctx context.Context, url string, mediaKey []byte, appInfo MediaType, fileLength int, fileEncSHA256, fileSHA256 []byte, file File) error { + return int.c.downloadAndDecryptToFile(ctx, url, mediaKey, appInfo, fileLength, fileEncSHA256, fileSHA256, file) +} + +func (int *DangerousInternalClient) DownloadPossiblyEncryptedMediaWithRetriesToFile(ctx context.Context, url string, checksum []byte, file File) (mac []byte, err error) { + return int.c.downloadPossiblyEncryptedMediaWithRetriesToFile(ctx, url, checksum, file) +} + +func (int *DangerousInternalClient) DownloadMediaToFile(ctx context.Context, url string, file io.Writer) (int64, []byte, error) { + return int.c.downloadMediaToFile(ctx, url, file) +} + +func (int *DangerousInternalClient) DownloadEncryptedMediaToFile(ctx context.Context, url string, checksum []byte, file File) ([]byte, error) { + return int.c.downloadEncryptedMediaToFile(ctx, url, checksum, file) +} + +func (int *DangerousInternalClient) SendGroupIQ(ctx context.Context, iqType infoQueryType, jid types.JID, content waBinary.Node) (*waBinary.Node, error) { + return int.c.sendGroupIQ(ctx, iqType, jid, content) +} + +func (int *DangerousInternalClient) CacheGroupInfo(groupInfo *types.GroupInfo, lock bool) ([]store.LIDMapping, []store.RedactedPhoneEntry) { + return int.c.cacheGroupInfo(groupInfo, lock) +} + +func (int *DangerousInternalClient) GetGroupInfo(ctx context.Context, jid types.JID, lockParticipantCache bool) (*types.GroupInfo, error) { + return int.c.getGroupInfo(ctx, jid, lockParticipantCache) +} + +func (int *DangerousInternalClient) GetCachedGroupData(ctx context.Context, jid types.JID) (*groupMetaCache, error) { + return int.c.getCachedGroupData(ctx, jid) +} + +func (int *DangerousInternalClient) ParseGroupNode(groupNode *waBinary.Node) (*types.GroupInfo, error) { + return int.c.parseGroupNode(groupNode) +} + +func (int *DangerousInternalClient) ParseGroupCreate(parentNode, node *waBinary.Node) (*events.JoinedGroup, []store.LIDMapping, []store.RedactedPhoneEntry, error) { + return int.c.parseGroupCreate(parentNode, node) +} + +func (int *DangerousInternalClient) ParseGroupChange(node *waBinary.Node) (*events.GroupInfo, []store.LIDMapping, error) { + return int.c.parseGroupChange(node) +} + +func (int *DangerousInternalClient) UpdateGroupParticipantCache(evt *events.GroupInfo) { + int.c.updateGroupParticipantCache(evt) +} + +func (int *DangerousInternalClient) ParseGroupNotification(node *waBinary.Node) (any, []store.LIDMapping, []store.RedactedPhoneEntry, error) { + return int.c.parseGroupNotification(node) +} + +func (int *DangerousInternalClient) DoHandshake(ctx context.Context, fs *socket.FrameSocket, ephemeralKP keys.KeyPair) error { + return int.c.doHandshake(ctx, fs, ephemeralKP) +} + +func (int *DangerousInternalClient) KeepAliveLoop(ctx, connCtx context.Context) { + int.c.keepAliveLoop(ctx, connCtx) +} + +func (int *DangerousInternalClient) SendKeepAlive(ctx context.Context) (isSuccess, shouldContinue bool) { + return int.c.sendKeepAlive(ctx) +} + +func (int *DangerousInternalClient) RefreshMediaConn(ctx context.Context, force bool) (*MediaConn, error) { + return int.c.refreshMediaConn(ctx, force) +} + +func (int *DangerousInternalClient) QueryMediaConn(ctx context.Context) (*MediaConn, error) { + return int.c.queryMediaConn(ctx) +} + +func (int *DangerousInternalClient) HandleMediaRetryNotification(ctx context.Context, node *waBinary.Node) { + int.c.handleMediaRetryNotification(ctx, node) +} + +func (int *DangerousInternalClient) HandleEncryptedMessage(ctx context.Context, node *waBinary.Node) { + int.c.handleEncryptedMessage(ctx, node) +} + +func (int *DangerousInternalClient) ParseMessageSource(node *waBinary.Node, requireParticipant bool) (source types.MessageSource, err error) { + return int.c.parseMessageSource(node, requireParticipant) +} + +func (int *DangerousInternalClient) ParseMsgBotInfo(node waBinary.Node) (botInfo types.MsgBotInfo, err error) { + return int.c.parseMsgBotInfo(node) +} + +func (int *DangerousInternalClient) ParseMsgMetaInfo(node waBinary.Node) (metaInfo types.MsgMetaInfo, err error) { + return int.c.parseMsgMetaInfo(node) +} + +func (int *DangerousInternalClient) ParseMessageInfo(node *waBinary.Node) (*types.MessageInfo, error) { + return int.c.parseMessageInfo(node) +} + +func (int *DangerousInternalClient) HandlePlaintextMessage(ctx context.Context, info *types.MessageInfo, node *waBinary.Node) (handlerFailed bool) { + return int.c.handlePlaintextMessage(ctx, info, node) +} + +func (int *DangerousInternalClient) MigrateSessionStore(ctx context.Context, pn, lid types.JID) { + int.c.migrateSessionStore(ctx, pn, lid) +} + +func (int *DangerousInternalClient) DecryptMessages(ctx context.Context, info *types.MessageInfo, node *waBinary.Node) { + int.c.decryptMessages(ctx, info, node) +} + +func (int *DangerousInternalClient) ClearUntrustedIdentity(ctx context.Context, target types.JID) error { + return int.c.clearUntrustedIdentity(ctx, target) +} + +func (int *DangerousInternalClient) BufferedDecrypt(ctx context.Context, ciphertext []byte, serverTimestamp time.Time, decrypt func(context.Context) ([]byte, error)) (plaintext []byte, ciphertextHash [32]byte, err error) { + return int.c.bufferedDecrypt(ctx, ciphertext, serverTimestamp, decrypt) +} + +func (int *DangerousInternalClient) DecryptDM(ctx context.Context, child *waBinary.Node, from types.JID, isPreKey bool, serverTS time.Time) ([]byte, *[32]byte, error) { + return int.c.decryptDM(ctx, child, from, isPreKey, serverTS) +} + +func (int *DangerousInternalClient) DecryptGroupMsg(ctx context.Context, child *waBinary.Node, from types.JID, chat types.JID, serverTS time.Time) ([]byte, *[32]byte, error) { + return int.c.decryptGroupMsg(ctx, child, from, chat, serverTS) +} + +func (int *DangerousInternalClient) HandleSenderKeyDistributionMessage(ctx context.Context, chat, from types.JID, axolotlSKDM []byte) { + int.c.handleSenderKeyDistributionMessage(ctx, chat, from, axolotlSKDM) +} + +func (int *DangerousInternalClient) HandleHistorySyncNotificationLoop() { + int.c.handleHistorySyncNotificationLoop() +} + +func (int *DangerousInternalClient) HandleAppStateSyncKeyShare(ctx context.Context, keys *waE2E.AppStateSyncKeyShare) { + int.c.handleAppStateSyncKeyShare(ctx, keys) +} + +func (int *DangerousInternalClient) HandlePlaceholderResendResponse(msg *waE2E.PeerDataOperationRequestResponseMessage) (ok bool) { + return int.c.handlePlaceholderResendResponse(msg) +} + +func (int *DangerousInternalClient) HandleProtocolMessage(ctx context.Context, info *types.MessageInfo, msg *waE2E.Message) (ok bool) { + return int.c.handleProtocolMessage(ctx, info, msg) +} + +func (int *DangerousInternalClient) ProcessProtocolParts(ctx context.Context, info *types.MessageInfo, msg *waE2E.Message) (ok bool) { + return int.c.processProtocolParts(ctx, info, msg) +} + +func (int *DangerousInternalClient) StoreMessageSecret(ctx context.Context, info *types.MessageInfo, msg *waE2E.Message) { + int.c.storeMessageSecret(ctx, info, msg) } -func (int *DangerousInternalClient) SendIQAsync(query DangerousInfoQuery) (<-chan *waBinary.Node, error) { - return int.c.sendIQAsync(query) +func (int *DangerousInternalClient) StoreHistoricalMessageSecrets(ctx context.Context, conversations []*waHistorySync.Conversation) { + int.c.storeHistoricalMessageSecrets(ctx, conversations) } -func (int *DangerousInternalClient) SendNode(node waBinary.Node) error { - return int.c.sendNode(node) +func (int *DangerousInternalClient) StoreLIDSyncMessage(ctx context.Context, msg []byte) { + int.c.storeLIDSyncMessage(ctx, msg) +} + +func (int *DangerousInternalClient) StoreGlobalSettings(ctx context.Context, settings *waHistorySync.GlobalSettings) { + int.c.storeGlobalSettings(ctx, settings) +} + +func (int *DangerousInternalClient) StoreHistoricalPNLIDMappings(ctx context.Context, mappings []*waHistorySync.PhoneNumberToLIDMapping) { + int.c.storeHistoricalPNLIDMappings(ctx, mappings) +} + +func (int *DangerousInternalClient) HandleDecryptedMessage(ctx context.Context, info *types.MessageInfo, msg *waE2E.Message, retryCount int) (handlerFailed bool) { + return int.c.handleDecryptedMessage(ctx, info, msg, retryCount) +} + +func (int *DangerousInternalClient) SendProtocolMessageReceipt(ctx context.Context, id types.MessageID, msgType types.ReceiptType) { + int.c.sendProtocolMessageReceipt(ctx, id, msgType) +} + +func (int *DangerousInternalClient) DecryptMsgSecret(ctx context.Context, msg *events.Message, useCase MsgSecretType, encrypted messageEncryptedSecret, origMsgKey *waCommon.MessageKey) ([]byte, error) { + return int.c.decryptMsgSecret(ctx, msg, useCase, encrypted, origMsgKey) +} + +func (int *DangerousInternalClient) EncryptMsgSecret(ctx context.Context, ownID, chat, origSender types.JID, origMsgID types.MessageID, useCase MsgSecretType, plaintext []byte) (ciphertext, iv []byte, err error) { + return int.c.encryptMsgSecret(ctx, ownID, chat, origSender, origMsgID, useCase, plaintext) +} + +func (int *DangerousInternalClient) DecryptBotMessage(ctx context.Context, messageSecret []byte, msMsg messageEncryptedSecret, messageID types.MessageID, targetSenderJID types.JID, info *types.MessageInfo) ([]byte, error) { + return int.c.decryptBotMessage(ctx, messageSecret, msMsg, messageID, targetSenderJID, info) +} + +func (int *DangerousInternalClient) SendMexIQ(ctx context.Context, queryID string, variables any) (json.RawMessage, error) { + return int.c.sendMexIQ(ctx, queryID, variables) +} + +func (int *DangerousInternalClient) GetNewsletterInfo(ctx context.Context, input map[string]any, fetchViewerMeta bool) (*types.NewsletterMetadata, error) { + return int.c.getNewsletterInfo(ctx, input, fetchViewerMeta) +} + +func (int *DangerousInternalClient) HandleEncryptNotification(ctx context.Context, node *waBinary.Node) { + int.c.handleEncryptNotification(ctx, node) +} + +func (int *DangerousInternalClient) HandleAppStateNotification(ctx context.Context, node *waBinary.Node) { + int.c.handleAppStateNotification(ctx, node) +} + +func (int *DangerousInternalClient) HandlePictureNotification(ctx context.Context, node *waBinary.Node) { + int.c.handlePictureNotification(ctx, node) +} + +func (int *DangerousInternalClient) HandleDeviceNotification(ctx context.Context, node *waBinary.Node) { + int.c.handleDeviceNotification(ctx, node) +} + +func (int *DangerousInternalClient) HandleFBDeviceNotification(ctx context.Context, node *waBinary.Node) { + int.c.handleFBDeviceNotification(ctx, node) +} + +func (int *DangerousInternalClient) HandleOwnDevicesNotification(ctx context.Context, node *waBinary.Node) { + int.c.handleOwnDevicesNotification(ctx, node) +} + +func (int *DangerousInternalClient) HandleBlocklist(ctx context.Context, node *waBinary.Node) { + int.c.handleBlocklist(ctx, node) +} + +func (int *DangerousInternalClient) HandleAccountSyncNotification(ctx context.Context, node *waBinary.Node) { + int.c.handleAccountSyncNotification(ctx, node) +} + +func (int *DangerousInternalClient) HandlePrivacyTokenNotification(ctx context.Context, node *waBinary.Node) { + int.c.handlePrivacyTokenNotification(ctx, node) +} + +func (int *DangerousInternalClient) ParseNewsletterMessages(node *waBinary.Node) []*types.NewsletterMessage { + return int.c.parseNewsletterMessages(node) +} + +func (int *DangerousInternalClient) HandleNewsletterNotification(ctx context.Context, node *waBinary.Node) { + int.c.handleNewsletterNotification(ctx, node) +} + +func (int *DangerousInternalClient) HandleMexNotification(ctx context.Context, node *waBinary.Node) { + int.c.handleMexNotification(ctx, node) +} + +func (int *DangerousInternalClient) HandleStatusNotification(ctx context.Context, node *waBinary.Node) { + int.c.handleStatusNotification(ctx, node) +} + +func (int *DangerousInternalClient) HandleNotification(ctx context.Context, node *waBinary.Node) { + int.c.handleNotification(ctx, node) +} + +func (int *DangerousInternalClient) TryHandleCodePairNotification(ctx context.Context, parentNode *waBinary.Node) { + int.c.tryHandleCodePairNotification(ctx, parentNode) +} + +func (int *DangerousInternalClient) HandleCodePairNotification(ctx context.Context, parentNode *waBinary.Node) error { + return int.c.handleCodePairNotification(ctx, parentNode) +} + +func (int *DangerousInternalClient) HandleIQ(ctx context.Context, node *waBinary.Node) { + int.c.handleIQ(ctx, node) +} + +func (int *DangerousInternalClient) HandlePairDevice(ctx context.Context, node *waBinary.Node) { + int.c.handlePairDevice(ctx, node) +} + +func (int *DangerousInternalClient) MakeQRData(ref string) string { + return int.c.makeQRData(ref) +} + +func (int *DangerousInternalClient) HandlePairSuccess(ctx context.Context, node *waBinary.Node) { + int.c.handlePairSuccess(ctx, node) +} + +func (int *DangerousInternalClient) HandlePair(ctx context.Context, deviceIdentityBytes []byte, reqID, businessName, platform string, jid, lid types.JID) error { + return int.c.handlePair(ctx, deviceIdentityBytes, reqID, businessName, platform, jid, lid) +} + +func (int *DangerousInternalClient) SendPairError(ctx context.Context, id string, code int, text string) { + int.c.sendPairError(ctx, id, code, text) +} + +func (int *DangerousInternalClient) GetServerPreKeyCount(ctx context.Context) (int, error) { + return int.c.getServerPreKeyCount(ctx) +} + +func (int *DangerousInternalClient) UploadPreKeys(ctx context.Context, initialUpload bool) { + int.c.uploadPreKeys(ctx, initialUpload) +} + +func (int *DangerousInternalClient) FetchPreKeysNoError(ctx context.Context, retryDevices []types.JID) map[types.JID]*prekey.Bundle { + return int.c.fetchPreKeysNoError(ctx, retryDevices) +} + +func (int *DangerousInternalClient) FetchPreKeys(ctx context.Context, users []types.JID) (map[types.JID]preKeyResp, error) { + return int.c.fetchPreKeys(ctx, users) +} + +func (int *DangerousInternalClient) HandleChatState(ctx context.Context, node *waBinary.Node) { + int.c.handleChatState(ctx, node) +} + +func (int *DangerousInternalClient) HandlePresence(ctx context.Context, node *waBinary.Node) { + int.c.handlePresence(ctx, node) +} + +func (int *DangerousInternalClient) ParsePrivacySettings(privacyNode *waBinary.Node, settings *types.PrivacySettings) *events.PrivacySettings { + return int.c.parsePrivacySettings(privacyNode, settings) +} + +func (int *DangerousInternalClient) HandlePrivacySettingsNotification(ctx context.Context, privacyNode *waBinary.Node) { + int.c.handlePrivacySettingsNotification(ctx, privacyNode) +} + +func (int *DangerousInternalClient) HandleReceipt(ctx context.Context, node *waBinary.Node) { + int.c.handleReceipt(ctx, node) +} + +func (int *DangerousInternalClient) HandleGroupedReceipt(partialReceipt events.Receipt, participants *waBinary.Node) { + int.c.handleGroupedReceipt(partialReceipt, participants) +} + +func (int *DangerousInternalClient) ParseReceipt(node *waBinary.Node) (*events.Receipt, error) { + return int.c.parseReceipt(node) +} + +func (int *DangerousInternalClient) BackgroundIfAsyncAck(fn func()) { + int.c.backgroundIfAsyncAck(fn) +} + +func (int *DangerousInternalClient) MaybeDeferredAck(ctx context.Context, node *waBinary.Node) func(...*bool) { + return int.c.maybeDeferredAck(ctx, node) +} + +func (int *DangerousInternalClient) SendAck(ctx context.Context, node *waBinary.Node, error int) { + int.c.sendAck(ctx, node, error) +} + +func (int *DangerousInternalClient) SendMessageReceipt(ctx context.Context, info *types.MessageInfo, node *waBinary.Node) { + int.c.sendMessageReceipt(ctx, info, node) +} + +func (int *DangerousInternalClient) GenerateRequestID() string { + return int.c.generateRequestID() +} + +func (int *DangerousInternalClient) ClearResponseWaiters(node *waBinary.Node) { + int.c.clearResponseWaiters(node) } func (int *DangerousInternalClient) WaitResponse(reqID string) chan *waBinary.Node { @@ -49,38 +579,174 @@ func (int *DangerousInternalClient) CancelResponse(reqID string, ch chan *waBina int.c.cancelResponse(reqID, ch) } -func (int *DangerousInternalClient) QueryMediaConn() (*MediaConn, error) { - return int.c.queryMediaConn() +func (int *DangerousInternalClient) ReceiveResponse(ctx context.Context, data *waBinary.Node) bool { + return int.c.receiveResponse(ctx, data) } -func (int *DangerousInternalClient) RefreshMediaConn(force bool) (*MediaConn, error) { - return int.c.refreshMediaConn(force) +func (int *DangerousInternalClient) SendIQAsyncAndGetData(ctx context.Context, query *infoQuery) (<-chan *waBinary.Node, []byte, error) { + return int.c.sendIQAsyncAndGetData(ctx, query) } -func (int *DangerousInternalClient) GetServerPreKeyCount() (int, error) { - return int.c.getServerPreKeyCount() +func (int *DangerousInternalClient) SendIQAsync(ctx context.Context, query infoQuery) (<-chan *waBinary.Node, error) { + return int.c.sendIQAsync(ctx, query) } -func (int *DangerousInternalClient) RequestAppStateKeys(ctx context.Context, keyIDs [][]byte) { - int.c.requestAppStateKeys(ctx, keyIDs) +func (int *DangerousInternalClient) SendIQ(ctx context.Context, query infoQuery) (*waBinary.Node, error) { + return int.c.sendIQ(ctx, query) } -func (int *DangerousInternalClient) SendRetryReceipt(node *waBinary.Node, info *types.MessageInfo, forceIncludeIdentity bool) { - int.c.sendRetryReceipt(node, info, forceIncludeIdentity) +func (int *DangerousInternalClient) RetryFrame(ctx context.Context, reqType, id string, data []byte, origResp *waBinary.Node, timeout time.Duration) (*waBinary.Node, error) { + return int.c.retryFrame(ctx, reqType, id, data, origResp, timeout) } -func (int *DangerousInternalClient) EncryptMessageForDevice(plaintext []byte, to types.JID, bundle *prekey.Bundle, extraAttrs waBinary.Attrs) (*waBinary.Node, bool, error) { - return int.c.encryptMessageForDevice(plaintext, to, bundle, extraAttrs) +func (int *DangerousInternalClient) AddRecentMessage(ctx context.Context, to types.JID, id types.MessageID, wa *waE2E.Message, fb *waMsgApplication.MessageApplication) error { + return int.c.addRecentMessage(ctx, to, id, wa, fb) } -func (int *DangerousInternalClient) GetOwnID() types.JID { - return int.c.getOwnID() +func (int *DangerousInternalClient) GetRecentMessage(to types.JID, id types.MessageID) RecentMessage { + return int.c.getRecentMessage(to, id) +} + +func (int *DangerousInternalClient) GetMessageForRetry(ctx context.Context, receipt *events.Receipt, messageID types.MessageID) (*RecentMessage, error) { + return int.c.getMessageForRetry(ctx, receipt, messageID) +} + +func (int *DangerousInternalClient) ShouldRecreateSession(ctx context.Context, retryCount int, jid types.JID) (reason string, recreate bool) { + return int.c.shouldRecreateSession(ctx, retryCount, jid) +} + +func (int *DangerousInternalClient) HandleRetryReceipt(ctx context.Context, receipt *events.Receipt, node *waBinary.Node) error { + return int.c.handleRetryReceipt(ctx, receipt, node) } -func (int *DangerousInternalClient) DecryptDM(child *waBinary.Node, from types.JID, isPreKey bool) ([]byte, error) { - return int.c.decryptDM(child, from, isPreKey) +func (int *DangerousInternalClient) CancelDelayedRequestFromPhone(msgID types.MessageID) { + int.c.cancelDelayedRequestFromPhone(msgID) +} + +func (int *DangerousInternalClient) DelayedRequestMessageFromPhone(info *types.MessageInfo) { + int.c.delayedRequestMessageFromPhone(info) +} + +func (int *DangerousInternalClient) ImmediateRequestMessageFromPhone(ctx context.Context, info *types.MessageInfo) { + int.c.immediateRequestMessageFromPhone(ctx, info) +} + +func (int *DangerousInternalClient) ClearDelayedMessageRequests() { + int.c.clearDelayedMessageRequests() +} + +func (int *DangerousInternalClient) SendRetryReceipt(ctx context.Context, node *waBinary.Node, info *types.MessageInfo, forceIncludeIdentity bool) { + int.c.sendRetryReceipt(ctx, node, info, forceIncludeIdentity) +} + +func (int *DangerousInternalClient) SendGroupV3(ctx context.Context, to, ownID types.JID, id types.MessageID, messageApp []byte, msgAttrs messageAttrs, frankingTag []byte, timings *MessageDebugTimings) (string, []byte, error) { + return int.c.sendGroupV3(ctx, to, ownID, id, messageApp, msgAttrs, frankingTag, timings) +} + +func (int *DangerousInternalClient) SendDMV3(ctx context.Context, to, ownID types.JID, id types.MessageID, messageApp []byte, msgAttrs messageAttrs, frankingTag []byte, timings *MessageDebugTimings) ([]byte, string, error) { + return int.c.sendDMV3(ctx, to, ownID, id, messageApp, msgAttrs, frankingTag, timings) +} + +func (int *DangerousInternalClient) PrepareMessageNodeV3(ctx context.Context, to, ownID types.JID, id types.MessageID, payload *waMsgTransport.MessageTransport_Payload, skdm *waMsgTransport.MessageTransport_Protocol_Ancillary_SenderKeyDistributionMessage, msgAttrs messageAttrs, frankingTag []byte, participants []types.JID, timings *MessageDebugTimings) (*waBinary.Node, []types.JID, error) { + return int.c.prepareMessageNodeV3(ctx, to, ownID, id, payload, skdm, msgAttrs, frankingTag, participants, timings) +} + +func (int *DangerousInternalClient) EncryptMessageForDevicesV3(ctx context.Context, allDevices []types.JID, ownID types.JID, id string, payload *waMsgTransport.MessageTransport_Payload, skdm *waMsgTransport.MessageTransport_Protocol_Ancillary_SenderKeyDistributionMessage, dsm *waMsgTransport.MessageTransport_Protocol_Integral_DeviceSentMessage, encAttrs waBinary.Attrs) ([]waBinary.Node, error) { + return int.c.encryptMessageForDevicesV3(ctx, allDevices, ownID, id, payload, skdm, dsm, encAttrs) +} + +func (int *DangerousInternalClient) EncryptMessageForDeviceAndWrapV3(ctx context.Context, payload *waMsgTransport.MessageTransport_Payload, skdm *waMsgTransport.MessageTransport_Protocol_Ancillary_SenderKeyDistributionMessage, dsm *waMsgTransport.MessageTransport_Protocol_Integral_DeviceSentMessage, to types.JID, bundle *prekey.Bundle, encAttrs waBinary.Attrs) (*waBinary.Node, error) { + return int.c.encryptMessageForDeviceAndWrapV3(ctx, payload, skdm, dsm, to, bundle, encAttrs) +} + +func (int *DangerousInternalClient) EncryptMessageForDeviceV3(ctx context.Context, payload *waMsgTransport.MessageTransport_Payload, skdm *waMsgTransport.MessageTransport_Protocol_Ancillary_SenderKeyDistributionMessage, dsm *waMsgTransport.MessageTransport_Protocol_Integral_DeviceSentMessage, to types.JID, bundle *prekey.Bundle, extraAttrs waBinary.Attrs) (*waBinary.Node, error) { + return int.c.encryptMessageForDeviceV3(ctx, payload, skdm, dsm, to, bundle, extraAttrs) +} + +func (int *DangerousInternalClient) SendNewsletter(ctx context.Context, to types.JID, id types.MessageID, message *waE2E.Message, mediaID string, timings *MessageDebugTimings) ([]byte, error) { + return int.c.sendNewsletter(ctx, to, id, message, mediaID, timings) +} + +func (int *DangerousInternalClient) SendGroup(ctx context.Context, ownID, to types.JID, participants []types.JID, id types.MessageID, message *waE2E.Message, timings *MessageDebugTimings, extraParams nodeExtraParams) (string, []byte, error) { + return int.c.sendGroup(ctx, ownID, to, participants, id, message, timings, extraParams) +} + +func (int *DangerousInternalClient) SendPeerMessage(ctx context.Context, to types.JID, id types.MessageID, message *waE2E.Message, timings *MessageDebugTimings) ([]byte, error) { + return int.c.sendPeerMessage(ctx, to, id, message, timings) +} + +func (int *DangerousInternalClient) SendDM(ctx context.Context, ownID, to types.JID, id types.MessageID, message *waE2E.Message, timings *MessageDebugTimings, extraParams nodeExtraParams) (string, []byte, error) { + return int.c.sendDM(ctx, ownID, to, id, message, timings, extraParams) +} + +func (int *DangerousInternalClient) PreparePeerMessageNode(ctx context.Context, to types.JID, id types.MessageID, message *waE2E.Message, timings *MessageDebugTimings) (*waBinary.Node, error) { + return int.c.preparePeerMessageNode(ctx, to, id, message, timings) +} + +func (int *DangerousInternalClient) GetMessageContent(baseNode waBinary.Node, message *waE2E.Message, msgAttrs waBinary.Attrs, includeIdentity bool, extraParams nodeExtraParams) []waBinary.Node { + return int.c.getMessageContent(baseNode, message, msgAttrs, includeIdentity, extraParams) +} + +func (int *DangerousInternalClient) PrepareMessageNode(ctx context.Context, to types.JID, id types.MessageID, message *waE2E.Message, participants []types.JID, plaintext, dsmPlaintext []byte, timings *MessageDebugTimings, extraParams nodeExtraParams) (*waBinary.Node, []types.JID, error) { + return int.c.prepareMessageNode(ctx, to, id, message, participants, plaintext, dsmPlaintext, timings, extraParams) } func (int *DangerousInternalClient) MakeDeviceIdentityNode() waBinary.Node { return int.c.makeDeviceIdentityNode() } + +func (int *DangerousInternalClient) EncryptMessageForDevices(ctx context.Context, allDevices []types.JID, id string, msgPlaintext, dsmPlaintext []byte, encAttrs waBinary.Attrs) ([]waBinary.Node, bool, error) { + return int.c.encryptMessageForDevices(ctx, allDevices, id, msgPlaintext, dsmPlaintext, encAttrs) +} + +func (int *DangerousInternalClient) EncryptMessageForDeviceAndWrap(ctx context.Context, plaintext []byte, wireIdentity, encryptionIdentity types.JID, bundle *prekey.Bundle, encAttrs waBinary.Attrs, existingSessions map[string]bool) (*waBinary.Node, bool, error) { + return int.c.encryptMessageForDeviceAndWrap(ctx, plaintext, wireIdentity, encryptionIdentity, bundle, encAttrs, existingSessions) +} + +func (int *DangerousInternalClient) EncryptMessageForDevice(ctx context.Context, plaintext []byte, to types.JID, bundle *prekey.Bundle, extraAttrs waBinary.Attrs, existingSessions map[string]bool) (*waBinary.Node, bool, error) { + return int.c.encryptMessageForDevice(ctx, plaintext, to, bundle, extraAttrs, existingSessions) +} + +func (int *DangerousInternalClient) RawUpload(ctx context.Context, dataToUpload io.Reader, uploadSize uint64, fileHash []byte, appInfo MediaType, newsletter bool, resp *UploadResponse) error { + return int.c.rawUpload(ctx, dataToUpload, uploadSize, fileHash, appInfo, newsletter, resp) +} + +func (int *DangerousInternalClient) ParseBusinessProfile(node *waBinary.Node) (*types.BusinessProfile, error) { + return int.c.parseBusinessProfile(node) +} + +func (int *DangerousInternalClient) HandleHistoricalPushNames(ctx context.Context, names []*waHistorySync.Pushname) { + int.c.handleHistoricalPushNames(ctx, names) +} + +func (int *DangerousInternalClient) UpdatePushName(ctx context.Context, user, userAlt types.JID, messageInfo *types.MessageInfo, name string) { + int.c.updatePushName(ctx, user, userAlt, messageInfo, name) +} + +func (int *DangerousInternalClient) UpdateBusinessName(ctx context.Context, user, userAlt types.JID, messageInfo *types.MessageInfo, name string) { + int.c.updateBusinessName(ctx, user, userAlt, messageInfo, name) +} + +func (int *DangerousInternalClient) GetFBIDDevicesInternal(ctx context.Context, jids []types.JID) (*waBinary.Node, error) { + return int.c.getFBIDDevicesInternal(ctx, jids) +} + +func (int *DangerousInternalClient) GetFBIDDevices(ctx context.Context, jids []types.JID) ([]types.JID, error) { + return int.c.getFBIDDevices(ctx, jids) +} + +func (int *DangerousInternalClient) Usync(ctx context.Context, jids []types.JID, mode, context string, query []waBinary.Node, extra ...UsyncQueryExtras) (*waBinary.Node, error) { + return int.c.usync(ctx, jids, mode, context, query, extra...) +} + +func (int *DangerousInternalClient) ParseBlocklist(node *waBinary.Node) *types.Blocklist { + return int.c.parseBlocklist(node) +} + +func (int *DangerousInternalClient) ShouldIncludeReportingToken(message *waE2E.Message) bool { + return int.c.shouldIncludeReportingToken(message) +} + +func (int *DangerousInternalClient) GetMessageReportingToken(msgProtobuf []byte, msg *waE2E.Message, senderJID, remoteJID types.JID, messageID types.MessageID) waBinary.Node { + return int.c.getMessageReportingToken(msgProtobuf, msg, senderJID, remoteJID, messageID) +} diff --git a/vendor/go.mau.fi/whatsmeow/keepalive.go b/vendor/go.mau.fi/whatsmeow/keepalive.go index 94ab639e95..8c50e7b36e 100644 --- a/vendor/go.mau.fi/whatsmeow/keepalive.go +++ b/vendor/go.mau.fi/whatsmeow/keepalive.go @@ -8,7 +8,7 @@ package whatsmeow import ( "context" - "math/rand" + "math/rand/v2" "time" "go.mau.fi/whatsmeow/types" @@ -27,14 +27,14 @@ var ( KeepAliveMaxFailTime = 3 * time.Minute ) -func (cli *Client) keepAliveLoop(ctx context.Context) { +func (cli *Client) keepAliveLoop(ctx, connCtx context.Context) { lastSuccess := time.Now() var errorCount int for { - interval := rand.Int63n(KeepAliveIntervalMax.Milliseconds()-KeepAliveIntervalMin.Milliseconds()) + KeepAliveIntervalMin.Milliseconds() + interval := rand.Int64N(KeepAliveIntervalMax.Milliseconds()-KeepAliveIntervalMin.Milliseconds()) + KeepAliveIntervalMin.Milliseconds() select { case <-time.After(time.Duration(interval) * time.Millisecond): - isSuccess, shouldContinue := cli.sendKeepAlive(ctx) + isSuccess, shouldContinue := cli.sendKeepAlive(connCtx) if !shouldContinue { return } else if !isSuccess { @@ -46,7 +46,8 @@ func (cli *Client) keepAliveLoop(ctx context.Context) { if cli.EnableAutoReconnect && time.Since(lastSuccess) > KeepAliveMaxFailTime { cli.Log.Debugf("Forcing reconnect due to keepalive failure") cli.Disconnect() - go cli.autoReconnect() + cli.resetExpectedDisconnect() + go cli.autoReconnect(ctx) } } else { if errorCount > 0 { @@ -55,19 +56,21 @@ func (cli *Client) keepAliveLoop(ctx context.Context) { } lastSuccess = time.Now() } - case <-ctx.Done(): + case <-connCtx.Done(): return } } } func (cli *Client) sendKeepAlive(ctx context.Context) (isSuccess, shouldContinue bool) { - respCh, err := cli.sendIQAsync(infoQuery{ + respCh, err := cli.sendIQAsync(ctx, infoQuery{ Namespace: "w:p", Type: "get", To: types.ServerJID, }) - if err != nil { + if ctx.Err() != nil { + return false, false + } else if err != nil { cli.Log.Warnf("Failed to send keepalive: %v", err) return false, true } diff --git a/vendor/go.mau.fi/whatsmeow/mediaconn.go b/vendor/go.mau.fi/whatsmeow/mediaconn.go index 2e83303798..b78c10fa4d 100644 --- a/vendor/go.mau.fi/whatsmeow/mediaconn.go +++ b/vendor/go.mau.fi/whatsmeow/mediaconn.go @@ -7,6 +7,7 @@ package whatsmeow import ( + "context" "fmt" "time" @@ -40,12 +41,15 @@ func (mc *MediaConn) Expiry() time.Time { return mc.FetchedAt.Add(time.Duration(mc.TTL) * time.Second) } -func (cli *Client) refreshMediaConn(force bool) (*MediaConn, error) { +func (cli *Client) refreshMediaConn(ctx context.Context, force bool) (*MediaConn, error) { + if cli == nil { + return nil, ErrClientIsNil + } cli.mediaConnLock.Lock() defer cli.mediaConnLock.Unlock() if cli.mediaConnCache == nil || force || time.Now().After(cli.mediaConnCache.Expiry()) { var err error - cli.mediaConnCache, err = cli.queryMediaConn() + cli.mediaConnCache, err = cli.queryMediaConn(ctx) if err != nil { return nil, err } @@ -53,8 +57,8 @@ func (cli *Client) refreshMediaConn(force bool) (*MediaConn, error) { return cli.mediaConnCache, nil } -func (cli *Client) queryMediaConn() (*MediaConn, error) { - resp, err := cli.sendIQ(infoQuery{ +func (cli *Client) queryMediaConn(ctx context.Context) (*MediaConn, error) { + resp, err := cli.sendIQ(ctx, infoQuery{ Namespace: "w:m", Type: "set", To: types.ServerJID, diff --git a/vendor/go.mau.fi/whatsmeow/mediaretry.go b/vendor/go.mau.fi/whatsmeow/mediaretry.go index 2f973ba577..9c7329e735 100644 --- a/vendor/go.mau.fi/whatsmeow/mediaretry.go +++ b/vendor/go.mau.fi/whatsmeow/mediaretry.go @@ -7,13 +7,14 @@ package whatsmeow import ( + "context" "fmt" "go.mau.fi/util/random" "google.golang.org/protobuf/proto" waBinary "go.mau.fi/whatsmeow/binary" - waProto "go.mau.fi/whatsmeow/binary/proto" + "go.mau.fi/whatsmeow/proto/waMmsRetry" "go.mau.fi/whatsmeow/types" "go.mau.fi/whatsmeow/types/events" "go.mau.fi/whatsmeow/util/gcmutil" @@ -25,7 +26,7 @@ func getMediaRetryKey(mediaKey []byte) (cipherKey []byte) { } func encryptMediaRetryReceipt(messageID types.MessageID, mediaKey []byte) (ciphertext, iv []byte, err error) { - receipt := &waProto.ServerErrorReceipt{ + receipt := &waMmsRetry.ServerErrorReceipt{ StanzaID: proto.String(messageID), } var plaintext []byte @@ -44,7 +45,7 @@ func encryptMediaRetryReceipt(messageID types.MessageID, mediaKey []byte) (ciphe // This is mostly relevant when handling history syncs and getting a 404 or 410 error downloading media. // Rough example on how to use it (will not work out of the box, you must adjust it depending on what you need exactly): // -// var mediaRetryCache map[types.MessageID]*waProto.ImageMessage +// var mediaRetryCache map[types.MessageID]*waE2E.ImageMessage // // evt, err := cli.ParseWebMessage(chatJID, historyMsg.GetMessage()) // imageMsg := evt.Message.GetImageMessage() // replace this with the part of the message you want to download @@ -64,7 +65,7 @@ func encryptMediaRetryReceipt(messageID types.MessageID, mediaKey []byte) (ciphe // case *events.MediaRetry: // imageMsg := mediaRetryCache[evt.MessageID] // retryData, err := whatsmeow.DecryptMediaRetryNotification(evt, imageMsg.GetMediaKey()) -// if err != nil || retryData.GetResult != waProto.MediaRetryNotification_SUCCESS { +// if err != nil || retryData.GetResult != waMmsRetry.MediaRetryNotification_SUCCESS { // return // } // // Use the new path to download the attachment @@ -73,7 +74,10 @@ func encryptMediaRetryReceipt(messageID types.MessageID, mediaKey []byte) (ciphe // // Alternatively, you can use cli.DownloadMediaWithPath and provide the individual fields manually. // } // } -func (cli *Client) SendMediaRetryReceipt(message *types.MessageInfo, mediaKey []byte) error { +func (cli *Client) SendMediaRetryReceipt(ctx context.Context, message *types.MessageInfo, mediaKey []byte) error { + if cli == nil { + return ErrClientIsNil + } ciphertext, iv, err := encryptMediaRetryReceipt(message.ID, mediaKey) if err != nil { return fmt.Errorf("failed to prepare encrypted retry receipt: %w", err) @@ -96,7 +100,7 @@ func (cli *Client) SendMediaRetryReceipt(message *types.MessageInfo, mediaKey [] {Tag: "enc_iv", Content: iv}, } - err = cli.sendNode(waBinary.Node{ + err = cli.sendNode(ctx, waBinary.Node{ Tag: "receipt", Attrs: waBinary.Attrs{ "id": message.ID, @@ -116,8 +120,8 @@ func (cli *Client) SendMediaRetryReceipt(message *types.MessageInfo, mediaKey [] // DecryptMediaRetryNotification decrypts a media retry notification using the media key. // See Client.SendMediaRetryReceipt for more info on how to use this. -func DecryptMediaRetryNotification(evt *events.MediaRetry, mediaKey []byte) (*waProto.MediaRetryNotification, error) { - var notif waProto.MediaRetryNotification +func DecryptMediaRetryNotification(evt *events.MediaRetry, mediaKey []byte) (*waMmsRetry.MediaRetryNotification, error) { + var notif waMmsRetry.MediaRetryNotification if evt.Error != nil && evt.Ciphertext == nil { if evt.Error.Code == 2 { return nil, ErrMediaNotAvailableOnPhone @@ -171,7 +175,7 @@ func parseMediaRetryNotification(node *waBinary.Node) (*events.MediaRetry, error return &evt, nil } -func (cli *Client) handleMediaRetryNotification(node *waBinary.Node) { +func (cli *Client) handleMediaRetryNotification(ctx context.Context, node *waBinary.Node) { evt, err := parseMediaRetryNotification(node) if err != nil { cli.Log.Warnf("Failed to parse media retry notification: %v", err) diff --git a/vendor/go.mau.fi/whatsmeow/message.go b/vendor/go.mau.fi/whatsmeow/message.go index 5132c14002..a2309330b7 100644 --- a/vendor/go.mau.fi/whatsmeow/message.go +++ b/vendor/go.mau.fi/whatsmeow/message.go @@ -9,15 +9,17 @@ package whatsmeow import ( "bytes" "compress/zlib" + "context" + "crypto/sha256" "encoding/hex" "errors" "fmt" "io" "runtime/debug" + "strconv" "time" - "go.mau.fi/whatsmeow/proto/waE2E" - + "github.com/rs/zerolog" "go.mau.fi/libsignal/groups" "go.mau.fi/libsignal/protocol" "go.mau.fi/libsignal/session" @@ -27,7 +29,10 @@ import ( "go.mau.fi/whatsmeow/appstate" waBinary "go.mau.fi/whatsmeow/binary" - waProto "go.mau.fi/whatsmeow/binary/proto" + "go.mau.fi/whatsmeow/proto/waE2E" + "go.mau.fi/whatsmeow/proto/waHistorySync" + "go.mau.fi/whatsmeow/proto/waLidMigrationSyncPayload" + "go.mau.fi/whatsmeow/proto/waWeb" "go.mau.fi/whatsmeow/store" "go.mau.fi/whatsmeow/types" "go.mau.fi/whatsmeow/types/events" @@ -35,34 +40,42 @@ import ( var pbSerializer = store.SignalProtobufSerializer -func (cli *Client) handleEncryptedMessage(node *waBinary.Node) { +func (cli *Client) handleEncryptedMessage(ctx context.Context, node *waBinary.Node) { info, err := cli.parseMessageInfo(node) if err != nil { cli.Log.Warnf("Failed to parse message: %v", err) } else { + if !info.SenderAlt.IsEmpty() { + cli.StoreLIDPNMapping(ctx, info.SenderAlt, info.Sender) + } else if !info.RecipientAlt.IsEmpty() { + cli.StoreLIDPNMapping(ctx, info.RecipientAlt, info.Chat) + } if info.VerifiedName != nil && len(info.VerifiedName.Details.GetVerifiedName()) > 0 { - go cli.updateBusinessName(info.Sender, info, info.VerifiedName.Details.GetVerifiedName()) + go cli.updateBusinessName(ctx, info.Sender, info.SenderAlt, info, info.VerifiedName.Details.GetVerifiedName()) } - if len(info.PushName) > 0 && info.PushName != "-" { - go cli.updatePushName(info.Sender, info, info.PushName) + if len(info.PushName) > 0 && info.PushName != "-" && (cli.MessengerConfig == nil || info.PushName != "username") { + go cli.updatePushName(ctx, info.Sender, info.SenderAlt, info, info.PushName) } - go cli.sendAck(node) if info.Sender.Server == types.NewsletterServer { - cli.handlePlaintextMessage(info, node) + var cancelled bool + defer cli.maybeDeferredAck(ctx, node)(&cancelled) + cancelled = cli.handlePlaintextMessage(ctx, info, node) } else { - cli.decryptMessages(info, node) + cli.decryptMessages(ctx, info, node) } } } func (cli *Client) parseMessageSource(node *waBinary.Node, requireParticipant bool) (source types.MessageSource, err error) { clientID := cli.getOwnID() + clientLID := cli.getOwnLID() if clientID.IsEmpty() { err = ErrNotLoggedIn return } ag := node.AttrGetter() from := ag.JID("from") + source.AddressingMode = types.AddressingMode(ag.OptionalString("addressing_mode")) if from.Server == types.GroupServer || from.Server == types.BroadcastServer { source.IsGroup = true source.Chat = from @@ -71,17 +84,50 @@ func (cli *Client) parseMessageSource(node *waBinary.Node, requireParticipant bo } else { source.Sender = ag.OptionalJIDOrEmpty("participant") } - if source.Sender.User == clientID.User { + if source.AddressingMode == types.AddressingModeLID { + source.SenderAlt = ag.OptionalJIDOrEmpty("participant_pn") + } else { + source.SenderAlt = ag.OptionalJIDOrEmpty("participant_lid") + } + if source.Sender.User == clientID.User || source.Sender.User == clientLID.User { source.IsFromMe = true } if from.Server == types.BroadcastServer { source.BroadcastListOwner = ag.OptionalJIDOrEmpty("recipient") + participants, ok := node.GetOptionalChildByTag("participants") + if ok && source.IsFromMe { + children := participants.GetChildren() + source.BroadcastRecipients = make([]types.BroadcastRecipient, 0, len(children)) + for _, child := range children { + if child.Tag != "to" { + continue + } + cag := child.AttrGetter() + mainJID := cag.JID("jid") + if mainJID.Server == types.HiddenUserServer { + source.BroadcastRecipients = append(source.BroadcastRecipients, types.BroadcastRecipient{ + LID: mainJID, + PN: cag.OptionalJIDOrEmpty("peer_recipient_pn"), + }) + } else { + source.BroadcastRecipients = append(source.BroadcastRecipients, types.BroadcastRecipient{ + LID: cag.OptionalJIDOrEmpty("peer_recipient_lid"), + PN: mainJID, + }) + } + } + } } } else if from.Server == types.NewsletterServer { source.Chat = from source.Sender = from // TODO IsFromMe? - } else if from.User == clientID.User { + } else if from.User == clientID.User || from.User == clientLID.User { + if from.Server == types.HostedServer { + from.Server = types.DefaultUserServer + } else if from.Server == types.HostedLIDServer { + from.Server = types.HiddenUserServer + } source.IsFromMe = true source.Sender = from recipient := ag.OptionalJID("recipient") @@ -90,6 +136,11 @@ func (cli *Client) parseMessageSource(node *waBinary.Node, requireParticipant bo } else { source.Chat = from.ToNonAD() } + if source.Chat.Server == types.HiddenUserServer || source.Chat.Server == types.HostedLIDServer { + source.RecipientAlt = ag.OptionalJIDOrEmpty("peer_recipient_pn") + } else { + source.RecipientAlt = ag.OptionalJIDOrEmpty("peer_recipient_lid") + } } else if from.IsBot() { source.Sender = from meta := node.GetChildByTag("meta") @@ -101,8 +152,21 @@ func (cli *Client) parseMessageSource(node *waBinary.Node, requireParticipant bo source.Chat = from } } else { + if from.Server == types.HostedServer { + from.Server = types.DefaultUserServer + } else if from.Server == types.HostedLIDServer { + from.Server = types.HiddenUserServer + } source.Chat = from.ToNonAD() source.Sender = from + if source.Sender.Server == types.HiddenUserServer || source.Chat.Server == types.HostedLIDServer { + source.SenderAlt = ag.OptionalJIDOrEmpty("sender_pn") + } else { + source.SenderAlt = ag.OptionalJIDOrEmpty("sender_lid") + } + } + if !source.SenderAlt.IsEmpty() && source.SenderAlt.Device == 0 { + source.SenderAlt.Device = source.Sender.Device } err = ag.Error() return @@ -125,11 +189,15 @@ func (cli *Client) parseMsgMetaInfo(node waBinary.Node) (metaInfo types.MsgMetaI metaNode := node.GetChildByTag("meta") ag := metaNode.AttrGetter() - metaInfo.TargetID = types.MessageID(ag.String("target_id")) - targetSenderJID := ag.OptionalJIDOrEmpty("target_sender_jid") - if targetSenderJID.User != "" { - metaInfo.TargetSender = targetSenderJID + metaInfo.TargetID = types.MessageID(ag.OptionalString("target_id")) + metaInfo.TargetSender = ag.OptionalJIDOrEmpty("target_sender_jid") + metaInfo.TargetChat = ag.OptionalJIDOrEmpty("target_chat_jid") + deprecatedLIDSession, ok := ag.GetBool("deprecated_lid_session", false) + if ok { + metaInfo.DeprecatedLIDSession = &deprecatedLIDSession } + metaInfo.ThreadMessageID = types.MessageID(ag.OptionalString("thread_msg_id")) + metaInfo.ThreadMessageSenderJID = ag.OptionalJIDOrEmpty("thread_msg_sender_jid") err = ag.Error() return } @@ -186,7 +254,7 @@ func (cli *Client) parseMessageInfo(node *waBinary.Node) (*types.MessageInfo, er return &info, nil } -func (cli *Client) handlePlaintextMessage(info *types.MessageInfo, node *waBinary.Node) { +func (cli *Client) handlePlaintextMessage(ctx context.Context, info *types.MessageInfo, node *waBinary.Node) (handlerFailed bool) { // TODO edits have an additional node plaintext, ok := node.GetOptionalChildByTag("plaintext") if !ok { @@ -198,13 +266,14 @@ func (cli *Client) handlePlaintextMessage(info *types.MessageInfo, node *waBinar cli.Log.Warnf("Plaintext message from %s doesn't have byte content", info.SourceString()) return } - var msg waProto.Message + + var msg waE2E.Message err := proto.Unmarshal(plaintextBody, &msg) if err != nil { cli.Log.Warnf("Error unmarshaling plaintext message from %s: %v", info.SourceString(), err) return } - cli.storeMessageSecret(info, &msg) + cli.storeMessageSecret(ctx, info, &msg) evt := &events.Message{ Info: *info, RawMessage: &msg, @@ -216,83 +285,121 @@ func (cli *Client) handlePlaintextMessage(info *types.MessageInfo, node *waBinar OriginalTS: meta.AttrGetter().UnixTime("original_msg_t"), } } - cli.dispatchEvent(evt.UnwrapRaw()) - return + return cli.dispatchEvent(evt.UnwrapRaw()) } -func (cli *Client) decryptMessages(info *types.MessageInfo, node *waBinary.Node) { - if len(node.GetChildrenByTag("unavailable")) > 0 && len(node.GetChildrenByTag("enc")) == 0 { - cli.Log.Warnf("Unavailable message %s from %s", info.ID, info.SourceString()) - go cli.delayedRequestMessageFromPhone(info) - cli.dispatchEvent(&events.UndecryptableMessage{Info: *info, IsUnavailable: true}) +func (cli *Client) migrateSessionStore(ctx context.Context, pn, lid types.JID) { + err := cli.Store.Sessions.MigratePNToLID(ctx, pn, lid) + if err != nil { + cli.Log.Errorf("Failed to migrate signal store from %s to %s: %v", pn, lid, err) + } +} + +func (cli *Client) decryptMessages(ctx context.Context, info *types.MessageInfo, node *waBinary.Node) { + unavailableNode, ok := node.GetOptionalChildByTag("unavailable") + if ok && len(node.GetChildrenByTag("enc")) == 0 { + uType := events.UnavailableType(unavailableNode.AttrGetter().String("type")) + cli.Log.Warnf("Unavailable message %s from %s (type: %q)", info.ID, info.SourceString(), uType) + cli.backgroundIfAsyncAck(func() { + cli.immediateRequestMessageFromPhone(ctx, info) + cli.sendAck(ctx, node, 0) + }) + cli.dispatchEvent(&events.UndecryptableMessage{Info: *info, IsUnavailable: true, UnavailableType: uType}) return } children := node.GetChildren() cli.Log.Debugf("Decrypting message from %s", info.SourceString()) - handled := false containsDirectMsg := false + senderEncryptionJID := info.Sender + if info.Sender.Server == types.DefaultUserServer && !info.Sender.IsBot() { + if info.SenderAlt.Server == types.HiddenUserServer { + senderEncryptionJID = info.SenderAlt + cli.migrateSessionStore(ctx, info.Sender, info.SenderAlt) + } else if lid, err := cli.Store.LIDs.GetLIDForPN(ctx, info.Sender); err != nil { + cli.Log.Errorf("Failed to get LID for %s: %v", info.Sender, err) + } else if !lid.IsEmpty() { + cli.migrateSessionStore(ctx, info.Sender, lid) + senderEncryptionJID = lid + info.SenderAlt = lid + } else { + cli.Log.Warnf("No LID found for %s", info.Sender) + } + } + var recognizedStanza, protobufFailed bool for _, child := range children { if child.Tag != "enc" { continue } + recognizedStanza = true ag := child.AttrGetter() encType, ok := ag.GetString("type", false) if !ok { continue } var decrypted []byte + var ciphertextHash *[32]byte var err error if encType == "pkmsg" || encType == "msg" { - decrypted, err = cli.decryptDM(&child, info.Sender, encType == "pkmsg") + decrypted, ciphertextHash, err = cli.decryptDM(ctx, &child, senderEncryptionJID, encType == "pkmsg", info.Timestamp) containsDirectMsg = true } else if info.IsGroup && encType == "skmsg" { - decrypted, err = cli.decryptGroupMsg(&child, info.Sender, info.Chat) + decrypted, ciphertextHash, err = cli.decryptGroupMsg(ctx, &child, senderEncryptionJID, info.Chat, info.Timestamp) } else if encType == "msmsg" && info.Sender.IsBot() { - // Meta AI / other bots (biz?): - - // step 1: get message secret targetSenderJID := info.MsgMetaInfo.TargetSender if targetSenderJID.User == "" { - // if no targetSenderJID in this must be ourselves (one-one-one mode) - targetSenderJID = cli.getOwnID() + if info.Sender.Server == types.BotServer { + targetSenderJID = cli.getOwnLID() + } else { + targetSenderJID = cli.getOwnID() + } } - - messageSecret, err := cli.Store.MsgSecrets.GetMessageSecret(info.Chat, targetSenderJID, info.MsgMetaInfo.TargetID) - if err != nil || messageSecret == nil { - cli.Log.Warnf("Error getting message secret for bot msg with id %s", node.AttrGetter().String("id")) - continue + var decryptMessageID string + if info.MsgBotInfo.EditType == types.EditTypeInner || info.MsgBotInfo.EditType == types.EditTypeLast { + decryptMessageID = info.MsgBotInfo.EditTargetID + } else { + decryptMessageID = info.ID } - - // step 2: get MessageSecretMessage - byteContents := child.Content.([]byte) // contents var msMsg waE2E.MessageSecretMessage - - err = proto.Unmarshal(byteContents, &msMsg) - if err != nil { - cli.Log.Warnf("Error decoding MessageSecretMesage protobuf %v", err) - continue - } - - // step 3: determine best message id for decryption - var messageID string - if info.MsgBotInfo.EditType == types.EditTypeInner || info.MsgBotInfo.EditType == types.EditTypeLast { - messageID = info.MsgBotInfo.EditTargetID + var messageSecret []byte + if messageSecret, _, err = cli.Store.MsgSecrets.GetMessageSecret(ctx, info.Chat, targetSenderJID, info.MsgMetaInfo.TargetID); err != nil { + err = fmt.Errorf("failed to get message secret for %s: %v", info.MsgMetaInfo.TargetID, err) + } else if messageSecret == nil { + err = fmt.Errorf("message secret for %s not found", info.MsgMetaInfo.TargetID) + } else if err = proto.Unmarshal(child.Content.([]byte), &msMsg); err != nil { + err = fmt.Errorf("failed to unmarshal MessageSecretMessage protobuf: %v", err) } else { - messageID = info.ID + decrypted, err = cli.decryptBotMessage(ctx, messageSecret, &msMsg, decryptMessageID, targetSenderJID, info) } - - // step 4: decrypt and voila - decrypted, err = cli.decryptBotMessage(messageSecret, &msMsg, messageID, targetSenderJID, info) } else { cli.Log.Warnf("Unhandled encrypted message (type %s) from %s", encType, info.SourceString()) continue } - if err != nil { - cli.Log.Warnf("Error decrypting message from %s: %v", info.SourceString(), err) + if errors.Is(err, EventAlreadyProcessed) { + cli.Log.Debugf("Ignoring message %s from %s: %v", info.ID, info.SourceString(), err) + continue + } else if errors.Is(err, signalerror.ErrOldCounter) { + cli.Log.Warnf("Ignoring message %s from %s: %v", info.ID, info.SourceString(), err) + continue + } else if err != nil { + cli.Log.Warnf("Error decrypting message %s from %s: %v", info.ID, info.SourceString(), err) + if ctx.Err() != nil || errors.Is(err, context.Canceled) { + return + } isUnavailable := encType == "skmsg" && !containsDirectMsg && errors.Is(err, signalerror.ErrNoSenderKeyForUser) - go cli.sendRetryReceipt(node, info, isUnavailable) + if encType == "msmsg" { + cli.backgroundIfAsyncAck(func() { + cli.sendAck(ctx, node, NackMissingMessageSecret) + }) + } else if cli.SynchronousAck { + cli.sendRetryReceipt(ctx, node, info, isUnavailable) + // TODO this probably isn't supposed to ack + cli.sendAck(ctx, node, 0) + } else { + go cli.sendRetryReceipt(context.WithoutCancel(ctx), node, info, isUnavailable) + go cli.sendAck(ctx, node, 0) + } cli.dispatchEvent(&events.UndecryptableMessage{ Info: *info, IsUnavailable: isUnavailable, @@ -304,92 +411,205 @@ func (cli *Client) decryptMessages(info *types.MessageInfo, node *waBinary.Node) cli.cancelDelayedRequestFromPhone(info.ID) var msg waE2E.Message + var handlerFailed bool switch ag.Int("v") { case 2: err = proto.Unmarshal(decrypted, &msg) if err != nil { cli.Log.Warnf("Error unmarshaling decrypted message from %s: %v", info.SourceString(), err) + protobufFailed = true continue } - cli.handleDecryptedMessage(info, &msg, retryCount) - handled = true + protobufFailed = false + handlerFailed = cli.handleDecryptedMessage(ctx, info, &msg, retryCount) case 3: - handled = cli.handleDecryptedArmadillo(info, decrypted, retryCount) + handlerFailed, protobufFailed = cli.handleDecryptedArmadillo(ctx, info, decrypted, retryCount) default: cli.Log.Warnf("Unknown version %d in decrypted message from %s", ag.Int("v"), info.SourceString()) } + if handlerFailed { + cli.Log.Warnf("Handler for %s failed", info.ID) + return + } + if ciphertextHash != nil && cli.EnableDecryptedEventBuffer { + // Use the context passed to decryptMessages + err = cli.Store.EventBuffer.ClearBufferedEventPlaintext(ctx, *ciphertextHash) + if err != nil { + zerolog.Ctx(ctx).Err(err). + Hex("ciphertext_hash", ciphertextHash[:]). + Str("message_id", info.ID). + Msg("Failed to clear buffered event plaintext") + } else { + zerolog.Ctx(ctx).Debug(). + Hex("ciphertext_hash", ciphertextHash[:]). + Str("message_id", info.ID). + Msg("Deleted event plaintext from buffer") + } + + if time.Since(cli.lastDecryptedBufferClear) > 12*time.Hour && ctx.Err() == nil { + cli.lastDecryptedBufferClear = time.Now() + go func() { + err := cli.Store.EventBuffer.DeleteOldBufferedHashes(context.WithoutCancel(ctx)) + if err != nil { + zerolog.Ctx(ctx).Err(err).Msg("Failed to delete old buffered hashes") + } + }() + } + } } - if handled { - go cli.sendMessageReceipt(info) - } + cli.backgroundIfAsyncAck(func() { + if !recognizedStanza { + cli.sendAck(ctx, node, NackUnrecognizedStanza) + } else if protobufFailed { + cli.sendAck(ctx, node, NackInvalidProtobuf) + } else { + cli.sendMessageReceipt(ctx, info, node) + } + }) + return } -func (cli *Client) clearUntrustedIdentity(target types.JID) { - err := cli.Store.Identities.DeleteIdentity(target.SignalAddress().String()) +func (cli *Client) clearUntrustedIdentity(ctx context.Context, target types.JID) error { + err := cli.Store.Identities.DeleteIdentity(ctx, target.SignalAddress().String()) if err != nil { - cli.Log.Warnf("Failed to delete untrusted identity of %s from store: %v", target, err) + return fmt.Errorf("failed to delete identity: %w", err) } - err = cli.Store.Sessions.DeleteSession(target.SignalAddress().String()) + err = cli.Store.Sessions.DeleteSession(ctx, target.SignalAddress().String()) if err != nil { - cli.Log.Warnf("Failed to delete session with %s (untrusted identity) from store: %v", target, err) + return fmt.Errorf("failed to delete session: %w", err) } - cli.dispatchEvent(&events.IdentityChange{JID: target, Timestamp: time.Now(), Implicit: true}) + go cli.dispatchEvent(&events.IdentityChange{JID: target, Timestamp: time.Now(), Implicit: true}) + return nil } -func (cli *Client) decryptDM(child *waBinary.Node, from types.JID, isPreKey bool) ([]byte, error) { - content, _ := child.Content.([]byte) +var EventAlreadyProcessed = errors.New("event was already processed") + +func (cli *Client) bufferedDecrypt( + ctx context.Context, + ciphertext []byte, + serverTimestamp time.Time, + decrypt func(context.Context) ([]byte, error), +) (plaintext []byte, ciphertextHash [32]byte, err error) { + if !cli.EnableDecryptedEventBuffer { + plaintext, err = decrypt(ctx) + return + } + ciphertextHash = sha256.Sum256(ciphertext) + var buf *store.BufferedEvent + buf, err = cli.Store.EventBuffer.GetBufferedEvent(ctx, ciphertextHash) + if err != nil { + err = fmt.Errorf("failed to get buffered event: %w", err) + return + } else if buf != nil { + if buf.Plaintext == nil { + zerolog.Ctx(ctx).Debug(). + Hex("ciphertext_hash", ciphertextHash[:]). + Time("insertion_time", buf.InsertTime). + Msg("Returning event already processed error") + err = fmt.Errorf("%w at %s", EventAlreadyProcessed, buf.InsertTime.String()) + return + } + zerolog.Ctx(ctx).Debug(). + Hex("ciphertext_hash", ciphertextHash[:]). + Time("insertion_time", buf.InsertTime). + Msg("Returning previously decrypted plaintext") + plaintext = buf.Plaintext + return + } + + err = cli.Store.EventBuffer.DoDecryptionTxn(ctx, func(ctx context.Context) (innerErr error) { + plaintext, innerErr = decrypt(ctx) + if innerErr != nil { + return + } + innerErr = cli.Store.EventBuffer.PutBufferedEvent(ctx, ciphertextHash, plaintext, serverTimestamp) + if innerErr != nil { + innerErr = fmt.Errorf("failed to save decrypted event to buffer: %w", innerErr) + } + return + }) + if err == nil { + zerolog.Ctx(ctx).Debug(). + Hex("ciphertext_hash", ciphertextHash[:]). + Msg("Successfully decrypted and saved event") + } + return +} + +func (cli *Client) decryptDM(ctx context.Context, child *waBinary.Node, from types.JID, isPreKey bool, serverTS time.Time) ([]byte, *[32]byte, error) { + content, ok := child.Content.([]byte) + if !ok { + return nil, nil, fmt.Errorf("message content is not a byte slice") + } builder := session.NewBuilderFromSignal(cli.Store, from.SignalAddress(), pbSerializer) cipher := session.NewCipher(builder, from.SignalAddress()) var plaintext []byte + var ciphertextHash [32]byte if isPreKey { preKeyMsg, err := protocol.NewPreKeySignalMessageFromBytes(content, pbSerializer.PreKeySignalMessage, pbSerializer.SignalMessage) if err != nil { - return nil, fmt.Errorf("failed to parse prekey message: %w", err) - } - plaintext, _, err = cipher.DecryptMessageReturnKey(preKeyMsg) - if cli.AutoTrustIdentity && errors.Is(err, signalerror.ErrUntrustedIdentity) { - cli.Log.Warnf("Got %v error while trying to decrypt prekey message from %s, clearing stored identity and retrying", err, from) - cli.clearUntrustedIdentity(from) - plaintext, _, err = cipher.DecryptMessageReturnKey(preKeyMsg) + return nil, nil, fmt.Errorf("failed to parse prekey message: %w", err) } + plaintext, ciphertextHash, err = cli.bufferedDecrypt(ctx, content, serverTS, func(decryptCtx context.Context) ([]byte, error) { + pt, innerErr := cipher.DecryptMessage(decryptCtx, preKeyMsg) + if cli.AutoTrustIdentity && errors.Is(innerErr, signalerror.ErrUntrustedIdentity) { + cli.Log.Warnf("Got %v error while trying to decrypt prekey message from %s, clearing stored identity and retrying", innerErr, from) + if innerErr = cli.clearUntrustedIdentity(decryptCtx, from); innerErr != nil { + innerErr = fmt.Errorf("failed to clear untrusted identity: %w", innerErr) + return nil, innerErr + } + pt, innerErr = cipher.DecryptMessage(decryptCtx, preKeyMsg) + } + return pt, innerErr + }) if err != nil { - return nil, fmt.Errorf("failed to decrypt prekey message: %w", err) + return nil, nil, fmt.Errorf("failed to decrypt prekey message: %w", err) } } else { msg, err := protocol.NewSignalMessageFromBytes(content, pbSerializer.SignalMessage) if err != nil { - return nil, fmt.Errorf("failed to parse normal message: %w", err) + return nil, nil, fmt.Errorf("failed to parse normal message: %w", err) } - plaintext, err = cipher.Decrypt(msg) + plaintext, ciphertextHash, err = cli.bufferedDecrypt(ctx, content, serverTS, func(decryptCtx context.Context) ([]byte, error) { + return cipher.Decrypt(decryptCtx, msg) + }) if err != nil { - return nil, fmt.Errorf("failed to decrypt normal message: %w", err) + return nil, nil, fmt.Errorf("failed to decrypt normal message: %w", err) } } - if child.AttrGetter().Int("v") == 3 { - return plaintext, nil + var err error + plaintext, err = unpadMessage(plaintext, child.AttrGetter().Int("v")) + if err != nil { + return nil, nil, fmt.Errorf("failed to unpad message: %w", err) } - return unpadMessage(plaintext) + return plaintext, &ciphertextHash, nil } -func (cli *Client) decryptGroupMsg(child *waBinary.Node, from types.JID, chat types.JID) ([]byte, error) { - content, _ := child.Content.([]byte) +func (cli *Client) decryptGroupMsg(ctx context.Context, child *waBinary.Node, from types.JID, chat types.JID, serverTS time.Time) ([]byte, *[32]byte, error) { + content, ok := child.Content.([]byte) + if !ok { + return nil, nil, fmt.Errorf("message content is not a byte slice") + } senderKeyName := protocol.NewSenderKeyName(chat.String(), from.SignalAddress()) builder := groups.NewGroupSessionBuilder(cli.Store, pbSerializer) cipher := groups.NewGroupCipher(builder, senderKeyName, cli.Store) msg, err := protocol.NewSenderKeyMessageFromBytes(content, pbSerializer.SenderKeyMessage) if err != nil { - return nil, fmt.Errorf("failed to parse group message: %w", err) + return nil, nil, fmt.Errorf("failed to parse group message: %w", err) } - plaintext, err := cipher.Decrypt(msg) + plaintext, ciphertextHash, err := cli.bufferedDecrypt(ctx, content, serverTS, func(decryptCtx context.Context) ([]byte, error) { + return cipher.Decrypt(decryptCtx, msg) + }) if err != nil { - return nil, fmt.Errorf("failed to decrypt group message: %w", err) + return nil, nil, fmt.Errorf("failed to decrypt group message: %w", err) } - if child.AttrGetter().Int("v") == 3 { - return plaintext, nil + plaintext, err = unpadMessage(plaintext, child.AttrGetter().Int("v")) + if err != nil { + return nil, nil, err } - return unpadMessage(plaintext) + return plaintext, &ciphertextHash, nil } const checkPadding = true @@ -400,14 +620,16 @@ func isValidPadding(plaintext []byte) bool { return bytes.HasSuffix(plaintext, expectedPadding) } -func unpadMessage(plaintext []byte) ([]byte, error) { - if len(plaintext) == 0 { +func unpadMessage(plaintext []byte, version int) ([]byte, error) { + if version == 3 { + return plaintext, nil + } else if len(plaintext) == 0 { return nil, fmt.Errorf("plaintext is empty") - } - if checkPadding && !isValidPadding(plaintext) { + } else if checkPadding && !isValidPadding(plaintext) { return nil, fmt.Errorf("plaintext doesn't have expected padding") + } else { + return plaintext[:len(plaintext)-int(plaintext[len(plaintext)-1])], nil } - return plaintext[:len(plaintext)-int(plaintext[len(plaintext)-1])], nil } func padMessage(plaintext []byte) []byte { @@ -420,7 +642,7 @@ func padMessage(plaintext []byte) []byte { return plaintext } -func (cli *Client) handleSenderKeyDistributionMessage(chat, from types.JID, axolotlSKDM []byte) { +func (cli *Client) handleSenderKeyDistributionMessage(ctx context.Context, chat, from types.JID, axolotlSKDM []byte) { builder := groups.NewGroupSessionBuilder(cli.Store, pbSerializer) senderKeyName := protocol.NewSenderKeyName(chat.String(), from.SignalAddress()) sdkMsg, err := protocol.NewSenderKeyDistributionMessageFromBytes(axolotlSKDM, pbSerializer.SenderKeyDistributionMessage) @@ -428,7 +650,11 @@ func (cli *Client) handleSenderKeyDistributionMessage(chat, from types.JID, axol cli.Log.Errorf("Failed to parse sender key distribution message from %s for %s: %v", from, chat, err) return } - builder.Process(senderKeyName, sdkMsg) + err = builder.Process(ctx, senderKeyName, sdkMsg) + if err != nil { + cli.Log.Errorf("Failed to process sender key distribution message from %s for %s: %v", from, chat, err) + return + } cli.Log.Debugf("Processed sender key distribution message from %s in %s", senderKeyName.Sender().String(), senderKeyName.GroupID()) } @@ -447,35 +673,65 @@ func (cli *Client) handleHistorySyncNotificationLoop() { go cli.handleHistorySyncNotificationLoop() } }() - for notif := range cli.historySyncNotifications { - cli.handleHistorySyncNotification(notif) + ctx := cli.BackgroundEventCtx + for { + select { + case notif := <-cli.historySyncNotifications: + blob, err := cli.DownloadHistorySync(ctx, notif, false) + if err != nil { + cli.Log.Errorf("Failed to download history sync: %v", err) + } else { + cli.dispatchEvent(&events.HistorySync{Data: blob}) + } + case <-time.After(1 * time.Minute): + return + } } } -func (cli *Client) handleHistorySyncNotification(notif *waProto.HistorySyncNotification) { - var historySync waProto.HistorySync - if data, err := cli.Download(notif); err != nil { - cli.Log.Errorf("Failed to download history sync data: %v", err) - } else if reader, err := zlib.NewReader(bytes.NewReader(data)); err != nil { - cli.Log.Errorf("Failed to create zlib reader for history sync data: %v", err) +// DownloadHistorySync will download and parse the history sync blob from the given history sync notification. +// +// You only need to call this manually if you set [Client.ManualHistorySyncDownload] to true. +// By default, whatsmeow will call this automatically and dispatch an [events.HistorySync] with the parsed data. +func (cli *Client) DownloadHistorySync(ctx context.Context, notif *waE2E.HistorySyncNotification, synchronousStorage bool) (*waHistorySync.HistorySync, error) { + var data []byte + var err error + if notif.InitialHistBootstrapInlinePayload != nil { + data = notif.InitialHistBootstrapInlinePayload + } else if data, err = cli.Download(ctx, notif); err != nil { + return nil, fmt.Errorf("failed to download: %w", err) + } + var historySync waHistorySync.HistorySync + if reader, err := zlib.NewReader(bytes.NewReader(data)); err != nil { + return nil, fmt.Errorf("failed to prepare to decompress: %w", err) } else if rawData, err := io.ReadAll(reader); err != nil { - cli.Log.Errorf("Failed to decompress history sync data: %v", err) + return nil, fmt.Errorf("failed to decompress: %w", err) } else if err = proto.Unmarshal(rawData, &historySync); err != nil { - cli.Log.Errorf("Failed to unmarshal history sync data: %v", err) - } else { - cli.Log.Debugf("Received history sync (type %s, chunk %d)", historySync.GetSyncType(), historySync.GetChunkOrder()) - if historySync.GetSyncType() == waProto.HistorySync_PUSH_NAME { - go cli.handleHistoricalPushNames(historySync.GetPushnames()) + return nil, fmt.Errorf("failed to unmarshal: %w", err) + } + cli.Log.Debugf("Received history sync (type %s, chunk %d, progress %d)", historySync.GetSyncType(), historySync.GetChunkOrder(), historySync.GetProgress()) + doStorage := func(ctx context.Context) { + if historySync.GetSyncType() == waHistorySync.HistorySync_PUSH_NAME { + cli.handleHistoricalPushNames(ctx, historySync.GetPushnames()) } else if len(historySync.GetConversations()) > 0 { - go cli.storeHistoricalMessageSecrets(historySync.GetConversations()) + cli.storeHistoricalMessageSecrets(ctx, historySync.GetConversations()) + } + if len(historySync.GetPhoneNumberToLidMappings()) > 0 { + cli.storeHistoricalPNLIDMappings(ctx, historySync.GetPhoneNumberToLidMappings()) + } + if historySync.GlobalSettings != nil { + cli.storeGlobalSettings(ctx, historySync.GlobalSettings) } - cli.dispatchEvent(&events.HistorySync{ - Data: &historySync, - }) } + if synchronousStorage { + doStorage(ctx) + } else { + go doStorage(context.WithoutCancel(ctx)) + } + return &historySync, nil } -func (cli *Client) handleAppStateSyncKeyShare(keys *waProto.AppStateSyncKeyShare) { +func (cli *Client) handleAppStateSyncKeyShare(ctx context.Context, keys *waE2E.AppStateSyncKeyShare) { onlyResyncIfNotSynced := true cli.Log.Debugf("Got %d new app state keys", len(keys.GetKeys())) @@ -483,40 +739,41 @@ func (cli *Client) handleAppStateSyncKeyShare(keys *waProto.AppStateSyncKeyShare for _, key := range keys.GetKeys() { marshaledFingerprint, err := proto.Marshal(key.GetKeyData().GetFingerprint()) if err != nil { - cli.Log.Errorf("Failed to marshal fingerprint of app state sync key %X", key.GetKeyId().GetKeyId()) + cli.Log.Errorf("Failed to marshal fingerprint of app state sync key %X", key.GetKeyID().GetKeyID()) continue } - _, isReRequest := cli.appStateKeyRequests[hex.EncodeToString(key.GetKeyId().GetKeyId())] + _, isReRequest := cli.appStateKeyRequests[hex.EncodeToString(key.GetKeyID().GetKeyID())] if isReRequest { onlyResyncIfNotSynced = false } - err = cli.Store.AppStateKeys.PutAppStateSyncKey(key.GetKeyId().GetKeyId(), store.AppStateSyncKey{ + err = cli.Store.AppStateKeys.PutAppStateSyncKey(ctx, key.GetKeyID().GetKeyID(), store.AppStateSyncKey{ Data: key.GetKeyData().GetKeyData(), Fingerprint: marshaledFingerprint, Timestamp: key.GetKeyData().GetTimestamp(), }) if err != nil { - cli.Log.Errorf("Failed to store app state sync key %X: %v", key.GetKeyId().GetKeyId(), err) + cli.Log.Errorf("Failed to store app state sync key %X: %v", key.GetKeyID().GetKeyID(), err) continue } - cli.Log.Debugf("Received app state sync key %X (ts: %d)", key.GetKeyId().GetKeyId(), key.GetKeyData().GetTimestamp()) + cli.Log.Debugf("Received app state sync key %X (ts: %d)", key.GetKeyID().GetKeyID(), key.GetKeyData().GetTimestamp()) } cli.appStateKeyRequestsLock.RUnlock() for _, name := range appstate.AllPatchNames { - err := cli.FetchAppState(name, false, onlyResyncIfNotSynced) + err := cli.FetchAppState(ctx, name, false, onlyResyncIfNotSynced) if err != nil { cli.Log.Errorf("Failed to do initial fetch of app state %s: %v", name, err) } } } -func (cli *Client) handlePlaceholderResendResponse(msg *waProto.PeerDataOperationRequestResponseMessage) { - reqID := msg.GetStanzaId() +func (cli *Client) handlePlaceholderResendResponse(msg *waE2E.PeerDataOperationRequestResponseMessage) (ok bool) { + reqID := msg.GetStanzaID() parts := msg.GetPeerDataOperationResult() cli.Log.Debugf("Handling response to placeholder resend request %s with %d items", reqID, len(parts)) + ok = true for i, part := range parts { - var webMsg waProto.WebMessageInfo + var webMsg waWeb.WebMessageInfo if resp := part.GetPlaceholderMessageResendResponse(); resp == nil { cli.Log.Warnf("Missing response in item #%d of response to %s", i+1, reqID) } else if err := proto.Unmarshal(resp.GetWebMessageInfoBytes(), &webMsg); err != nil { @@ -525,36 +782,57 @@ func (cli *Client) handlePlaceholderResendResponse(msg *waProto.PeerDataOperatio cli.Log.Warnf("Failed to parse web message info in item #%d of response to %s: %v", i+1, reqID, err) } else { msgEvt.UnavailableRequestID = reqID - cli.dispatchEvent(msgEvt) + ok = !cli.dispatchEvent(msgEvt) && ok } } + return } -func (cli *Client) handleProtocolMessage(info *types.MessageInfo, msg *waProto.Message) { +func (cli *Client) handleProtocolMessage(ctx context.Context, info *types.MessageInfo, msg *waE2E.Message) (ok bool) { + ok = true protoMsg := msg.GetProtocolMessage() - if protoMsg.GetHistorySyncNotification() != nil && info.IsFromMe { - cli.historySyncNotifications <- protoMsg.HistorySyncNotification - if cli.historySyncHandlerStarted.CompareAndSwap(false, true) { - go cli.handleHistorySyncNotificationLoop() + if !info.IsFromMe { + return + } + + if protoMsg.GetHistorySyncNotification() != nil { + if !cli.ManualHistorySyncDownload { + cli.historySyncNotifications <- protoMsg.HistorySyncNotification + if cli.historySyncHandlerStarted.CompareAndSwap(false, true) { + go cli.handleHistorySyncNotificationLoop() + } } - go cli.sendProtocolMessageReceipt(info.ID, types.ReceiptTypeHistorySync) + go cli.sendProtocolMessageReceipt(ctx, info.ID, types.ReceiptTypeHistorySync) } - if protoMsg.GetPeerDataOperationRequestResponseMessage().GetPeerDataOperationRequestType() == waProto.PeerDataOperationRequestType_PLACEHOLDER_MESSAGE_RESEND { - go cli.handlePlaceholderResendResponse(protoMsg.GetPeerDataOperationRequestResponseMessage()) + if protoMsg.GetLidMigrationMappingSyncMessage() != nil { + cli.storeLIDSyncMessage(ctx, protoMsg.GetLidMigrationMappingSyncMessage().GetEncodedMappingPayload()) } - if protoMsg.GetAppStateSyncKeyShare() != nil && info.IsFromMe { - go cli.handleAppStateSyncKeyShare(protoMsg.AppStateSyncKeyShare) + if info.Sender.Device == 0 { + peerResp := protoMsg.GetPeerDataOperationRequestResponseMessage() + switch peerResp.GetPeerDataOperationRequestType() { + case waE2E.PeerDataOperationRequestType_PLACEHOLDER_MESSAGE_RESEND: + ok = cli.handlePlaceholderResendResponse(peerResp) && ok + case waE2E.PeerDataOperationRequestType_COMPANION_SYNCD_SNAPSHOT_FATAL_RECOVERY: + ok = cli.handleAppStateRecovery(ctx, peerResp.GetStanzaID(), peerResp.GetPeerDataOperationResult()) && ok + } + } + + if protoMsg.GetAppStateSyncKeyShare() != nil { + go cli.handleAppStateSyncKeyShare(context.WithoutCancel(ctx), protoMsg.AppStateSyncKeyShare) } if info.Category == "peer" { - go cli.sendProtocolMessageReceipt(info.ID, types.ReceiptTypePeerMsg) + go cli.sendProtocolMessageReceipt(ctx, info.ID, types.ReceiptTypePeerMsg) } + return } -func (cli *Client) processProtocolParts(info *types.MessageInfo, msg *waProto.Message) { +func (cli *Client) processProtocolParts(ctx context.Context, info *types.MessageInfo, msg *waE2E.Message) (ok bool) { + ok = true + cli.storeMessageSecret(ctx, info, msg) // Hopefully sender key distribution messages and protocol messages can't be inside ephemeral messages if msg.GetDeviceSentMessage().GetMessage() != nil { msg = msg.GetDeviceSentMessage().GetMessage() @@ -563,20 +841,24 @@ func (cli *Client) processProtocolParts(info *types.MessageInfo, msg *waProto.Me if !info.IsGroup { cli.Log.Warnf("Got sender key distribution message in non-group chat from %s", info.Sender) } else { - cli.handleSenderKeyDistributionMessage(info.Chat, info.Sender, msg.SenderKeyDistributionMessage.AxolotlSenderKeyDistributionMessage) + encryptionIdentity := info.Sender + if encryptionIdentity.Server == types.DefaultUserServer && info.SenderAlt.Server == types.HiddenUserServer { + encryptionIdentity = info.SenderAlt + } + cli.handleSenderKeyDistributionMessage(ctx, info.Chat, encryptionIdentity, msg.SenderKeyDistributionMessage.AxolotlSenderKeyDistributionMessage) } } // N.B. Edits are protocol messages, but they're also wrapped inside EditedMessage, // which is only unwrapped after processProtocolParts, so this won't trigger for edits. if msg.GetProtocolMessage() != nil { - cli.handleProtocolMessage(info, msg) + ok = cli.handleProtocolMessage(ctx, info, msg) && ok } - cli.storeMessageSecret(info, msg) + return } -func (cli *Client) storeMessageSecret(info *types.MessageInfo, msg *waProto.Message) { +func (cli *Client) storeMessageSecret(ctx context.Context, info *types.MessageInfo, msg *waE2E.Message) { if msgSecret := msg.GetMessageContextInfo().GetMessageSecret(); len(msgSecret) > 0 { - err := cli.Store.MsgSecrets.PutMessageSecret(info.Chat, info.Sender, info.ID, msgSecret) + err := cli.Store.MsgSecrets.PutMessageSecret(ctx, info.Chat, info.Sender, info.ID, msgSecret) if err != nil { cli.Log.Errorf("Failed to store message secret key for %s: %v", info.ID, err) } else { @@ -585,7 +867,7 @@ func (cli *Client) storeMessageSecret(info *types.MessageInfo, msg *waProto.Mess } } -func (cli *Client) storeHistoricalMessageSecrets(conversations []*waProto.Conversation) { +func (cli *Client) storeHistoricalMessageSecrets(ctx context.Context, conversations []*waHistorySync.Conversation) { var secrets []store.MessageSecretInsert var privacyTokens []store.PrivacyToken ownID := cli.getOwnID().ToNonAD() @@ -593,7 +875,7 @@ func (cli *Client) storeHistoricalMessageSecrets(conversations []*waProto.Conver return } for _, conv := range conversations { - chatJID, _ := types.ParseJID(conv.GetId()) + chatJID, _ := types.ParseJID(conv.GetID()) if chatJID.IsEmpty() { continue } @@ -621,13 +903,13 @@ func (cli *Client) storeHistoricalMessageSecrets(conversations []*waProto.Conver } else if msg.GetMessage().GetParticipant() != "" { senderJID, _ = types.ParseJID(msg.GetMessage().GetParticipant()) } - if senderJID.IsEmpty() || msgKey.GetId() == "" { + if senderJID.IsEmpty() || msgKey.GetID() == "" { continue } secrets = append(secrets, store.MessageSecretInsert{ Chat: chatJID, Sender: senderJID, - ID: msgKey.GetId(), + ID: msgKey.GetID(), Secret: secret, }) } @@ -635,7 +917,7 @@ func (cli *Client) storeHistoricalMessageSecrets(conversations []*waProto.Conver } if len(secrets) > 0 { cli.Log.Debugf("Storing %d message secret keys in history sync", len(secrets)) - err := cli.Store.MsgSecrets.PutMessageSecrets(secrets) + err := cli.Store.MsgSecrets.PutMessageSecrets(ctx, secrets) if err != nil { cli.Log.Errorf("Failed to store message secret keys in history sync: %v", err) } else { @@ -644,7 +926,7 @@ func (cli *Client) storeHistoricalMessageSecrets(conversations []*waProto.Conver } if len(privacyTokens) > 0 { cli.Log.Debugf("Storing %d privacy tokens in history sync", len(privacyTokens)) - err := cli.Store.PrivacyTokens.PutPrivacyTokens(privacyTokens...) + err := cli.Store.PrivacyTokens.PutPrivacyTokens(ctx, privacyTokens...) if err != nil { cli.Log.Errorf("Failed to store privacy tokens in history sync: %v", err) } else { @@ -653,23 +935,119 @@ func (cli *Client) storeHistoricalMessageSecrets(conversations []*waProto.Conver } } -func (cli *Client) handleDecryptedMessage(info *types.MessageInfo, msg *waProto.Message, retryCount int) { - cli.processProtocolParts(info, msg) +func (cli *Client) storeLIDSyncMessage(ctx context.Context, msg []byte) { + var decoded waLidMigrationSyncPayload.LIDMigrationMappingSyncPayload + err := proto.Unmarshal(msg, &decoded) + if err != nil { + zerolog.Ctx(ctx).Err(err).Msg("Failed to unmarshal LID migration mapping sync payload") + return + } + if cli.Store.LIDMigrationTimestamp == 0 && decoded.GetChatDbMigrationTimestamp() > 0 { + cli.Store.LIDMigrationTimestamp = int64(decoded.GetChatDbMigrationTimestamp()) + err = cli.Store.Save(ctx) + if err != nil { + zerolog.Ctx(ctx).Err(err). + Int64("lid_migration_timestamp", cli.Store.LIDMigrationTimestamp). + Msg("Failed to save chat DB LID migration timestamp") + } else { + zerolog.Ctx(ctx).Debug(). + Int64("lid_migration_timestamp", cli.Store.LIDMigrationTimestamp). + Msg("Saved chat DB LID migration timestamp") + } + } + lidPairs := make([]store.LIDMapping, len(decoded.PnToLidMappings)) + for i, mapping := range decoded.PnToLidMappings { + lidPairs[i] = store.LIDMapping{ + LID: types.JID{User: strconv.FormatUint(mapping.GetAssignedLid(), 10), Server: types.HiddenUserServer}, + PN: types.JID{User: strconv.FormatUint(mapping.GetPn(), 10), Server: types.DefaultUserServer}, + } + } + err = cli.Store.LIDs.PutManyLIDMappings(ctx, lidPairs) + if err != nil { + zerolog.Ctx(ctx).Err(err). + Int("pair_count", len(lidPairs)). + Msg("Failed to store phone number to LID mappings from sync message") + } else { + zerolog.Ctx(ctx).Debug(). + Int("pair_count", len(lidPairs)). + Msg("Stored PN-LID mappings from sync message") + } +} + +func (cli *Client) storeGlobalSettings(ctx context.Context, settings *waHistorySync.GlobalSettings) { + if cli.Store.LIDMigrationTimestamp == 0 && settings.GetChatDbLidMigrationTimestamp() > 0 { + cli.Store.LIDMigrationTimestamp = settings.GetChatDbLidMigrationTimestamp() + err := cli.Store.Save(ctx) + if err != nil { + zerolog.Ctx(ctx).Err(err). + Int64("lid_migration_timestamp", cli.Store.LIDMigrationTimestamp). + Msg("Failed to save chat DB LID migration timestamp") + } else { + zerolog.Ctx(ctx).Debug(). + Int64("lid_migration_timestamp", cli.Store.LIDMigrationTimestamp). + Msg("Saved chat DB LID migration timestamp") + } + } +} + +func (cli *Client) storeHistoricalPNLIDMappings(ctx context.Context, mappings []*waHistorySync.PhoneNumberToLIDMapping) { + lidPairs := make([]store.LIDMapping, 0, len(mappings)) + for _, mapping := range mappings { + pn, err := types.ParseJID(mapping.GetPnJID()) + if err != nil { + zerolog.Ctx(ctx).Err(err). + Str("pn_jid", mapping.GetPnJID()). + Str("lid_jid", mapping.GetLidJID()). + Msg("Failed to parse phone number from history sync") + continue + } + if pn.Server == types.LegacyUserServer { + pn.Server = types.DefaultUserServer + } + lid, err := types.ParseJID(mapping.GetLidJID()) + if err != nil { + zerolog.Ctx(ctx).Err(err). + Str("pn_jid", mapping.GetPnJID()). + Str("lid_jid", mapping.GetLidJID()). + Msg("Failed to parse LID from history sync") + continue + } + lidPairs = append(lidPairs, store.LIDMapping{ + LID: lid, + PN: pn, + }) + } + err := cli.Store.LIDs.PutManyLIDMappings(ctx, lidPairs) + if err != nil { + zerolog.Ctx(ctx).Err(err). + Int("pair_count", len(lidPairs)). + Msg("Failed to store phone number to LID mappings from history sync") + } else { + zerolog.Ctx(ctx).Debug(). + Int("pair_count", len(lidPairs)). + Msg("Stored PN-LID mappings from history sync") + } +} + +func (cli *Client) handleDecryptedMessage(ctx context.Context, info *types.MessageInfo, msg *waE2E.Message, retryCount int) (handlerFailed bool) { + ok := cli.processProtocolParts(ctx, info, msg) + if !ok { + return false + } evt := &events.Message{Info: *info, RawMessage: msg, RetryCount: retryCount} - cli.dispatchEvent(evt.UnwrapRaw()) + return cli.dispatchEvent(evt.UnwrapRaw()) } -func (cli *Client) sendProtocolMessageReceipt(id types.MessageID, msgType types.ReceiptType) { - clientID := cli.Store.ID - if len(id) == 0 || clientID == nil { +func (cli *Client) sendProtocolMessageReceipt(ctx context.Context, id types.MessageID, msgType types.ReceiptType) { + if len(id) == 0 { return } - err := cli.sendNode(waBinary.Node{ + err := cli.sendNode(ctx, waBinary.Node{ Tag: "receipt", Attrs: waBinary.Attrs{ "id": string(id), "type": string(msgType), - "to": types.NewJID(clientID.User, types.LegacyUserServer), + "to": cli.getOwnID().ToNonAD(), }, Content: nil, }) diff --git a/vendor/go.mau.fi/whatsmeow/msgsecret.go b/vendor/go.mau.fi/whatsmeow/msgsecret.go index 31822f7ba9..2474caca9c 100644 --- a/vendor/go.mau.fi/whatsmeow/msgsecret.go +++ b/vendor/go.mau.fi/whatsmeow/msgsecret.go @@ -7,17 +7,16 @@ package whatsmeow import ( + "context" "crypto/sha256" "fmt" "time" - "go.mau.fi/whatsmeow/proto/waCommon" - "go.mau.fi/whatsmeow/proto/waE2E" - "go.mau.fi/util/random" "google.golang.org/protobuf/proto" - waProto "go.mau.fi/whatsmeow/binary/proto" + "go.mau.fi/whatsmeow/proto/waCommon" + "go.mau.fi/whatsmeow/proto/waE2E" "go.mau.fi/whatsmeow/types" "go.mau.fi/whatsmeow/types/events" "go.mau.fi/whatsmeow/util/gcmutil" @@ -27,9 +26,13 @@ import ( type MsgSecretType string const ( - EncSecretPollVote MsgSecretType = "Poll Vote" - EncSecretReaction MsgSecretType = "Enc Reaction" - EncSecretBotMsg MsgSecretType = "Bot Message" + EncSecretPollVote MsgSecretType = "Poll Vote" + EncSecretReaction MsgSecretType = "Enc Reaction" + EncSecretComment MsgSecretType = "Enc Comment" + EncSecretReportToken MsgSecretType = "Report Token" + EncSecretEventResponse MsgSecretType = "Event Response" + EncSecretEventEdit MsgSecretType = "Event Edit" + EncSecretBotMsg MsgSecretType = "Bot Message" ) func applyBotMessageHKDF(messageSecret []byte) []byte { @@ -50,7 +53,11 @@ func generateMsgSecretKey( useCaseSecret = append(useCaseSecret, modificationType...) secretKey := hkdfutil.SHA256(origMsgSecret, nil, useCaseSecret, 32) - additionalData := []byte(fmt.Sprintf("%s\x00%s", origMsgID, modificationSenderStr)) + var additionalData []byte + switch modificationType { + case EncSecretPollVote, EncSecretEventResponse, "": + additionalData = fmt.Appendf(nil, "%s\x00%s", origMsgID, modificationSenderStr) + } return secretKey, additionalData } @@ -58,16 +65,17 @@ func generateMsgSecretKey( func getOrigSenderFromKey(msg *events.Message, key *waCommon.MessageKey) (types.JID, error) { if key.GetFromMe() { // fromMe always means the poll and vote were sent by the same user + // TODO this is wrong if the message key used @s.whatsapp.net, but the new event is from @lid return msg.Info.Sender, nil - } else if msg.Info.Chat.Server == types.DefaultUserServer { - sender, err := types.ParseJID(key.GetRemoteJid()) + } else if msg.Info.Chat.Server == types.DefaultUserServer || msg.Info.Chat.Server == types.HiddenUserServer { + sender, err := types.ParseJID(key.GetRemoteJID()) if err != nil { - return types.EmptyJID, fmt.Errorf("failed to parse JID %q of original message sender: %w", key.GetRemoteJid(), err) + return types.EmptyJID, fmt.Errorf("failed to parse JID %q of original message sender: %w", key.GetRemoteJID(), err) } return sender, nil } else { sender, err := types.ParseJID(key.GetParticipant()) - if sender.Server != types.DefaultUserServer { + if sender.Server != types.DefaultUserServer && sender.Server != types.HiddenUserServer { err = fmt.Errorf("unexpected server") } if err != nil { @@ -82,18 +90,22 @@ type messageEncryptedSecret interface { GetEncPayload() []byte } -func (cli *Client) decryptMsgSecret(msg *events.Message, useCase MsgSecretType, encrypted messageEncryptedSecret, origMsgKey *waCommon.MessageKey) ([]byte, error) { - pollSender, err := getOrigSenderFromKey(msg, origMsgKey) +func (cli *Client) decryptMsgSecret(ctx context.Context, msg *events.Message, useCase MsgSecretType, encrypted messageEncryptedSecret, origMsgKey *waCommon.MessageKey) ([]byte, error) { + if cli == nil { + return nil, ErrClientIsNil + } + origSender, err := getOrigSenderFromKey(msg, origMsgKey) if err != nil { return nil, err } - baseEncKey, err := cli.Store.MsgSecrets.GetMessageSecret(msg.Info.Chat, pollSender, origMsgKey.GetID()) + baseEncKey, origSender, err := cli.Store.MsgSecrets.GetMessageSecret(ctx, msg.Info.Chat, origSender, origMsgKey.GetID()) if err != nil { return nil, fmt.Errorf("failed to get original message secret key: %w", err) - } else if baseEncKey == nil { + } + if baseEncKey == nil { return nil, ErrOriginalMessageSecretNotFound } - secretKey, additionalData := generateMsgSecretKey(useCase, msg.Info.Sender, origMsgKey.GetID(), pollSender, baseEncKey) + secretKey, additionalData := generateMsgSecretKey(useCase, msg.Info.Sender, origMsgKey.GetID(), origSender, baseEncKey) plaintext, err := gcmutil.Decrypt(secretKey, encrypted.GetEncIV(), encrypted.GetEncPayload(), additionalData) if err != nil { return nil, fmt.Errorf("failed to decrypt secret message: %w", err) @@ -101,13 +113,14 @@ func (cli *Client) decryptMsgSecret(msg *events.Message, useCase MsgSecretType, return plaintext, nil } -func (cli *Client) encryptMsgSecret(chat, origSender types.JID, origMsgID types.MessageID, useCase MsgSecretType, plaintext []byte) (ciphertext, iv []byte, err error) { - ownID := cli.getOwnID() - if ownID.IsEmpty() { +func (cli *Client) encryptMsgSecret(ctx context.Context, ownID, chat, origSender types.JID, origMsgID types.MessageID, useCase MsgSecretType, plaintext []byte) (ciphertext, iv []byte, err error) { + if cli == nil { + return nil, nil, ErrClientIsNil + } else if ownID.IsEmpty() { return nil, nil, ErrNotLoggedIn } - baseEncKey, err := cli.Store.MsgSecrets.GetMessageSecret(chat, origSender, origMsgID) + baseEncKey, origSender, err := cli.Store.MsgSecrets.GetMessageSecret(ctx, chat, origSender, origMsgID) if err != nil { return nil, nil, fmt.Errorf("failed to get original message secret key: %w", err) } else if baseEncKey == nil { @@ -123,8 +136,7 @@ func (cli *Client) encryptMsgSecret(chat, origSender types.JID, origMsgID types. return ciphertext, iv, nil } -func (cli *Client) decryptBotMessage(messageSecret []byte, msMsg messageEncryptedSecret, messageID types.MessageID, targetSenderJID types.JID, info *types.MessageInfo) ([]byte, error) { - // gcm decrypt key generation +func (cli *Client) decryptBotMessage(ctx context.Context, messageSecret []byte, msMsg messageEncryptedSecret, messageID types.MessageID, targetSenderJID types.JID, info *types.MessageInfo) ([]byte, error) { newKey, additionalData := generateMsgSecretKey("", info.Sender, messageID, targetSenderJID, applyBotMessageHKDF(messageSecret)) plaintext, err := gcmutil.Decrypt(newKey, msMsg.GetEncIV(), msMsg.GetEncPayload(), additionalData) @@ -135,8 +147,7 @@ func (cli *Client) decryptBotMessage(messageSecret []byte, msMsg messageEncrypte return plaintext, nil } -// DecryptReaction decrypts a reaction update message. This form of reactions hasn't been rolled out yet, -// so this function is likely not of much use. +// DecryptReaction decrypts a reaction message in a community announcement group. // // if evt.Message.GetEncReactionMessage() != nil { // reaction, err := cli.DecryptReaction(evt) @@ -146,12 +157,12 @@ func (cli *Client) decryptBotMessage(messageSecret []byte, msMsg messageEncrypte // } // fmt.Printf("Reaction message: %+v\n", reaction) // } -func (cli *Client) DecryptReaction(reaction *events.Message) (*waE2E.ReactionMessage, error) { +func (cli *Client) DecryptReaction(ctx context.Context, reaction *events.Message) (*waE2E.ReactionMessage, error) { encReaction := reaction.Message.GetEncReactionMessage() if encReaction == nil { return nil, ErrNotEncryptedReactionMessage } - plaintext, err := cli.decryptMsgSecret(reaction, EncSecretReaction, encReaction, encReaction.GetTargetMessageKey()) + plaintext, err := cli.decryptMsgSecret(ctx, reaction, EncSecretReaction, encReaction, encReaction.GetTargetMessageKey()) if err != nil { return nil, fmt.Errorf("failed to decrypt reaction: %w", err) } @@ -163,6 +174,33 @@ func (cli *Client) DecryptReaction(reaction *events.Message) (*waE2E.ReactionMes return &msg, nil } +// DecryptComment decrypts a reply/comment message in a community announcement group. +// +// if evt.Message.GetEncCommentMessage() != nil { +// comment, err := cli.DecryptComment(evt) +// if err != nil { +// fmt.Println(":(", err) +// return +// } +// fmt.Printf("Comment message: %+v\n", comment) +// } +func (cli *Client) DecryptComment(ctx context.Context, comment *events.Message) (*waE2E.Message, error) { + encComment := comment.Message.GetEncCommentMessage() + if encComment == nil { + return nil, ErrNotEncryptedCommentMessage + } + plaintext, err := cli.decryptMsgSecret(ctx, comment, EncSecretComment, encComment, encComment.GetTargetMessageKey()) + if err != nil { + return nil, fmt.Errorf("failed to decrypt comment: %w", err) + } + var msg waE2E.Message + err = proto.Unmarshal(plaintext, &msg) + if err != nil { + return nil, fmt.Errorf("failed to decode comment protobuf: %w", err) + } + return &msg, nil +} + // DecryptPollVote decrypts a poll update message. The vote itself includes SHA-256 hashes of the selected options. // // if evt.Message.GetPollUpdateMessage() != nil { @@ -176,12 +214,12 @@ func (cli *Client) DecryptReaction(reaction *events.Message) (*waE2E.ReactionMes // fmt.Printf("- %X\n", hash) // } // } -func (cli *Client) DecryptPollVote(vote *events.Message) (*waE2E.PollVoteMessage, error) { +func (cli *Client) DecryptPollVote(ctx context.Context, vote *events.Message) (*waE2E.PollVoteMessage, error) { pollUpdate := vote.Message.GetPollUpdateMessage() if pollUpdate == nil { return nil, ErrNotPollUpdateMessage } - plaintext, err := cli.decryptMsgSecret(vote, EncSecretPollVote, pollUpdate.GetVote(), pollUpdate.GetPollCreationMessageKey()) + plaintext, err := cli.decryptMsgSecret(ctx, vote, EncSecretPollVote, pollUpdate.GetVote(), pollUpdate.GetPollCreationMessageKey()) if err != nil { return nil, fmt.Errorf("failed to decrypt poll vote: %w", err) } @@ -193,6 +231,29 @@ func (cli *Client) DecryptPollVote(vote *events.Message) (*waE2E.PollVoteMessage return &msg, nil } +func (cli *Client) DecryptSecretEncryptedMessage(ctx context.Context, evt *events.Message) (*waE2E.Message, error) { + encMessage := evt.Message.GetSecretEncryptedMessage() + if encMessage == nil { + return nil, ErrNotSecretEncryptedMessage + } + if encMessage.GetSecretEncType() != waE2E.SecretEncryptedMessage_EVENT_EDIT { + return nil, fmt.Errorf("unsupported secret enc type: %s", encMessage.SecretEncType.String()) + } + plaintext, err := cli.decryptMsgSecret(ctx, evt, EncSecretEventEdit, encMessage, encMessage.GetTargetMessageKey()) + if err != nil { + return nil, fmt.Errorf("failed to decrypt message: %w", err) + } + var msg waE2E.Message + err = proto.Unmarshal(plaintext, &msg) + if err != nil { + return nil, fmt.Errorf("failed to decode message protobuf: %w", err) + } + if evt.Message.MessageContextInfo != nil && msg.MessageContextInfo == nil { + msg.MessageContextInfo = evt.Message.MessageContextInfo + } + return &msg, nil +} + func getKeyFromInfo(msgInfo *types.MessageInfo) *waCommon.MessageKey { creationKey := &waCommon.MessageKey{ RemoteJID: proto.String(msgInfo.Chat.String()), @@ -229,54 +290,96 @@ func HashPollOptions(optionNames []string) [][]byte { // } // resp, err := cli.SendMessage(context.Background(), evt.Info.Chat, pollVoteMsg) // } -func (cli *Client) BuildPollVote(pollInfo *types.MessageInfo, optionNames []string) (*waProto.Message, error) { - pollUpdate, err := cli.EncryptPollVote(pollInfo, &waProto.PollVoteMessage{ +func (cli *Client) BuildPollVote(ctx context.Context, pollInfo *types.MessageInfo, optionNames []string) (*waE2E.Message, error) { + pollUpdate, err := cli.EncryptPollVote(ctx, pollInfo, &waE2E.PollVoteMessage{ SelectedOptions: HashPollOptions(optionNames), }) - return &waProto.Message{PollUpdateMessage: pollUpdate}, err + return &waE2E.Message{PollUpdateMessage: pollUpdate}, err } // BuildPollCreation builds a poll creation message with the given poll name, options and maximum number of selections. // The built message can be sent normally using Client.SendMessage. // // resp, err := cli.SendMessage(context.Background(), chat, cli.BuildPollCreation("meow?", []string{"yes", "no"}, 1)) -func (cli *Client) BuildPollCreation(name string, optionNames []string, selectableOptionCount int) *waProto.Message { +func (cli *Client) BuildPollCreation(name string, optionNames []string, selectableOptionCount int) *waE2E.Message { msgSecret := random.Bytes(32) if selectableOptionCount < 0 || selectableOptionCount > len(optionNames) { selectableOptionCount = 0 } - options := make([]*waProto.PollCreationMessage_Option, len(optionNames)) + options := make([]*waE2E.PollCreationMessage_Option, len(optionNames)) for i, option := range optionNames { - options[i] = &waProto.PollCreationMessage_Option{OptionName: proto.String(option)} + options[i] = &waE2E.PollCreationMessage_Option{OptionName: proto.String(option)} } - return &waProto.Message{ - PollCreationMessage: &waProto.PollCreationMessage{ + return &waE2E.Message{ + PollCreationMessage: &waE2E.PollCreationMessage{ Name: proto.String(name), Options: options, SelectableOptionsCount: proto.Uint32(uint32(selectableOptionCount)), }, - MessageContextInfo: &waProto.MessageContextInfo{ + MessageContextInfo: &waE2E.MessageContextInfo{ MessageSecret: msgSecret, }, } } // EncryptPollVote encrypts a poll vote message. This is a slightly lower-level function, using BuildPollVote is recommended. -func (cli *Client) EncryptPollVote(pollInfo *types.MessageInfo, vote *waProto.PollVoteMessage) (*waProto.PollUpdateMessage, error) { +func (cli *Client) EncryptPollVote(ctx context.Context, pollInfo *types.MessageInfo, vote *waE2E.PollVoteMessage) (*waE2E.PollUpdateMessage, error) { plaintext, err := proto.Marshal(vote) if err != nil { return nil, fmt.Errorf("failed to marshal poll vote protobuf: %w", err) } - ciphertext, iv, err := cli.encryptMsgSecret(pollInfo.Chat, pollInfo.Sender, pollInfo.ID, EncSecretPollVote, plaintext) + ciphertext, iv, err := cli.encryptMsgSecret(ctx, cli.getOwnID(), pollInfo.Chat, pollInfo.Sender, pollInfo.ID, EncSecretPollVote, plaintext) if err != nil { return nil, fmt.Errorf("failed to encrypt poll vote: %w", err) } - return &waProto.PollUpdateMessage{ + return &waE2E.PollUpdateMessage{ PollCreationMessageKey: getKeyFromInfo(pollInfo), - Vote: &waProto.PollEncValue{ + Vote: &waE2E.PollEncValue{ EncPayload: ciphertext, EncIV: iv, }, SenderTimestampMS: proto.Int64(time.Now().UnixMilli()), }, nil } + +func (cli *Client) EncryptComment(ctx context.Context, rootMsgInfo *types.MessageInfo, comment *waE2E.Message) (*waE2E.Message, error) { + plaintext, err := proto.Marshal(comment) + if err != nil { + return nil, fmt.Errorf("failed to marshal comment protobuf: %w", err) + } + // TODO is hardcoding LID here correct? What about polls? + ciphertext, iv, err := cli.encryptMsgSecret(ctx, cli.getOwnLID(), rootMsgInfo.Chat, rootMsgInfo.Sender, rootMsgInfo.ID, EncSecretComment, plaintext) + if err != nil { + return nil, fmt.Errorf("failed to encrypt comment: %w", err) + } + return &waE2E.Message{ + EncCommentMessage: &waE2E.EncCommentMessage{ + TargetMessageKey: &waCommon.MessageKey{ + RemoteJID: proto.String(rootMsgInfo.Chat.String()), + Participant: proto.String(rootMsgInfo.Sender.ToNonAD().String()), + FromMe: proto.Bool(rootMsgInfo.IsFromMe), + ID: proto.String(rootMsgInfo.ID), + }, + EncPayload: ciphertext, + EncIV: iv, + }, + }, nil +} + +func (cli *Client) EncryptReaction(ctx context.Context, rootMsgInfo *types.MessageInfo, reaction *waE2E.ReactionMessage) (*waE2E.EncReactionMessage, error) { + reactionKey := reaction.Key + reaction.Key = nil + plaintext, err := proto.Marshal(reaction) + if err != nil { + return nil, fmt.Errorf("failed to marshal reaction protobuf: %w", err) + } + ciphertext, iv, err := cli.encryptMsgSecret(ctx, cli.getOwnLID(), rootMsgInfo.Chat, rootMsgInfo.Sender, rootMsgInfo.ID, EncSecretReaction, plaintext) + if err != nil { + return nil, fmt.Errorf("failed to encrypt reaction: %w", err) + } + return &waE2E.EncReactionMessage{ + TargetMessageKey: reactionKey, + EncPayload: ciphertext, + EncIV: iv, + }, nil +} diff --git a/vendor/go.mau.fi/whatsmeow/newsletter.go b/vendor/go.mau.fi/whatsmeow/newsletter.go index 00ba7b1f1c..cd5e5ac7e8 100644 --- a/vendor/go.mau.fi/whatsmeow/newsletter.go +++ b/vendor/go.mau.fi/whatsmeow/newsletter.go @@ -10,17 +10,23 @@ import ( "context" "encoding/json" "fmt" + "log" "strings" "time" + "github.com/beeper/argo-go/codec" + "github.com/beeper/argo-go/pkg/buf" + + "go.mau.fi/whatsmeow/argo" waBinary "go.mau.fi/whatsmeow/binary" + "go.mau.fi/whatsmeow/proto/waWa6" + "go.mau.fi/whatsmeow/store" "go.mau.fi/whatsmeow/types" ) // NewsletterSubscribeLiveUpdates subscribes to receive live updates from a WhatsApp channel temporarily (for the duration returned). func (cli *Client) NewsletterSubscribeLiveUpdates(ctx context.Context, jid types.JID) (time.Duration, error) { - resp, err := cli.sendIQ(infoQuery{ - Context: ctx, + resp, err := cli.sendIQ(ctx, infoQuery{ Namespace: "newsletter", Type: iqSet, To: jid, @@ -39,7 +45,10 @@ func (cli *Client) NewsletterSubscribeLiveUpdates(ctx context.Context, jid types // NewsletterMarkViewed marks a channel message as viewed, incrementing the view counter. // // This is not the same as marking the channel as read on your other devices, use the usual MarkRead function for that. -func (cli *Client) NewsletterMarkViewed(jid types.JID, serverIDs []types.MessageServerID) error { +func (cli *Client) NewsletterMarkViewed(ctx context.Context, jid types.JID, serverIDs []types.MessageServerID) error { + if cli == nil { + return ErrClientIsNil + } items := make([]waBinary.Node, len(serverIDs)) for i, id := range serverIDs { items[i] = waBinary.Node{ @@ -51,7 +60,7 @@ func (cli *Client) NewsletterMarkViewed(jid types.JID, serverIDs []types.Message } reqID := cli.generateRequestID() resp := cli.waitResponse(reqID) - err := cli.sendNode(waBinary.Node{ + err := cli.sendNode(ctx, waBinary.Node{ Tag: "receipt", Attrs: waBinary.Attrs{ "to": jid, @@ -76,7 +85,7 @@ func (cli *Client) NewsletterMarkViewed(jid types.JID, serverIDs []types.Message // To remove a reaction sent earlier, set reaction to an empty string. // // The last parameter is the message ID of the reaction itself. It can be left empty to let whatsmeow generate a random one. -func (cli *Client) NewsletterSendReaction(jid types.JID, serverID types.MessageServerID, reaction string, messageID types.MessageID) error { +func (cli *Client) NewsletterSendReaction(ctx context.Context, jid types.JID, serverID types.MessageServerID, reaction string, messageID types.MessageID) error { if messageID == "" { messageID = cli.GenerateMessageID() } @@ -92,7 +101,7 @@ func (cli *Client) NewsletterSendReaction(jid types.JID, serverID types.MessageS } else { messageAttrs["edit"] = string(types.EditAttributeSenderRevoke) } - return cli.sendNode(waBinary.Node{ + return cli.sendNode(ctx, waBinary.Node{ Tag: "message", Attrs: messageAttrs, Content: []waBinary.Node{{ @@ -105,26 +114,73 @@ func (cli *Client) NewsletterSendReaction(jid types.JID, serverID types.MessageS const ( queryFetchNewsletter = "6563316087068696" queryFetchNewsletterDehydrated = "7272540469429201" - queryRecommendedNewsletters = "7263823273662354" //variables -> input -> {limit: 20, country_codes: [string]}, output: xwa2_newsletters_recommended + queryRecommendedNewsletters = "7263823273662354" // variables -> input -> {limit: 20, country_codes: [string]}, output: xwa2_newsletters_recommended queryNewslettersDirectory = "6190824427689257" // variables -> input -> {view: "RECOMMENDED", limit: 50, start_cursor: base64, filters: {country_codes: [string]}} querySubscribedNewsletters = "6388546374527196" // variables -> empty, output: xwa2_newsletter_subscribed - queryNewsletterSubscribers = "9800646650009898" //variables -> input -> {newsletter_id, count}, output: xwa2_newsletter_subscribers -> subscribers -> edges - mutationMuteNewsletter = "6274038279359549" //variables -> {newsletter_id, updates->{description, settings}}, output: xwa2_newsletter_update -> NewsletterMetadata without viewer meta + queryNewsletterSubscribers = "9800646650009898" // variables -> input -> {newsletter_id, count}, output: xwa2_newsletter_subscribers -> subscribers -> edges + mutationMuteNewsletter = "6274038279359549" // variables -> {newsletter_id, updates->{description, settings}}, output: xwa2_newsletter_update -> NewsletterMetadata without viewer meta mutationUnmuteNewsletter = "6068417879924485" mutationUpdateNewsletter = "7150902998257522" mutationCreateNewsletter = "6234210096708695" mutationUnfollowNewsletter = "6392786840836363" mutationFollowNewsletter = "9926858900719341" + + // desktop & mobile + queryFetchNewsletterDesktop = "9779843322044422" + queryRecommendedNewslettersDesktop = "27256776790637714" + querySubscribedNewslettersDesktop = "8621797084555037" + queryNewsletterSubscribersDesktop = "25403502652570342" + mutationMuteNewsletterDesktop = "5971669009605755" // variables -> {newsletter_id, updates->{description, settings}}, output: xwa2_newsletter_update -> NewsletterMetadata without viewer meta + mutationUnmuteNewsletterDesktop = "6104029483058502" + mutationUpdateNewsletterDesktop = "7839742399440946" + mutationCreateNewsletterDesktop = "27527996220149684" + mutationUnfollowNewsletterDesktop = "8782612271820087" + mutationFollowNewsletterDesktop = "8621797084555037" ) +func convertQueryID(cli *Client, queryID string) string { + if payload := cli.Store.GetClientPayload(); payload.GetUserAgent().Platform == waWa6.ClientPayload_UserAgent_MACOS.Enum() || payload.GetWebInfo() == nil { + switch queryID { + case queryFetchNewsletter: + return queryFetchNewsletterDesktop + case queryRecommendedNewsletters: + return queryRecommendedNewslettersDesktop + case querySubscribedNewsletters: + return querySubscribedNewslettersDesktop + case queryNewsletterSubscribers: + return queryNewsletterSubscribersDesktop + case mutationMuteNewsletter: + return mutationMuteNewsletterDesktop + case mutationUnmuteNewsletter: + return mutationUnmuteNewsletterDesktop + case mutationUpdateNewsletter: + return mutationUpdateNewsletterDesktop + case mutationCreateNewsletter: + return mutationCreateNewsletterDesktop + case mutationUnfollowNewsletter: + return mutationUnfollowNewsletterDesktop + case mutationFollowNewsletter: + return mutationFollowNewsletterDesktop + default: + return queryID + } + } else { + return queryID + } +} + func (cli *Client) sendMexIQ(ctx context.Context, queryID string, variables any) (json.RawMessage, error) { + if store.BaseClientPayload.GetUserAgent().GetPlatform() == waWa6.ClientPayload_UserAgent_MACOS { + return nil, fmt.Errorf("argo decoding is currently broken") + } + queryID = convertQueryID(cli, queryID) payload, err := json.Marshal(map[string]any{ "variables": variables, }) if err != nil { return nil, err } - resp, err := cli.sendIQ(infoQuery{ + resp, err := cli.sendIQ(ctx, infoQuery{ Namespace: "w:mex", Type: iqGet, To: types.ServerJID, @@ -135,7 +191,6 @@ func (cli *Client) sendMexIQ(ctx context.Context, queryID string, variables any) }, Content: payload, }}, - Context: ctx, }) if err != nil { return nil, err @@ -148,22 +203,51 @@ func (cli *Client) sendMexIQ(ctx context.Context, queryID string, variables any) if !ok { return nil, fmt.Errorf("unexpected content type %T in mex response", result.Content) } - var gqlResp types.GraphQLResponse - err = json.Unmarshal(resultContent, &gqlResp) - if err != nil { - return nil, fmt.Errorf("failed to unmarshal graphql response: %w", err) - } else if len(gqlResp.Errors) > 0 { - return gqlResp.Data, fmt.Errorf("graphql error: %w", gqlResp.Errors) + if result.AttrGetter().OptionalString("format") == "argo" { + if true { + return nil, fmt.Errorf("argo decoding is currently broken") + } + store, err := argo.GetStore() + if err != nil { + return nil, err + } + queryIDMap, err := argo.GetQueryIDToMessageName() + if err != nil { + return nil, err + } + wt := store[queryIDMap[queryID]] + + decoder, err := codec.NewArgoDecoder(buf.NewBufReadonly(resultContent)) + if err != nil { + return nil, err + } + data, err := decoder.ArgoToMap(wt) + if err != nil { + log.Fatalf("argo to map error: %v", err) + } + b, err := json.Marshal(data) + if err != nil { + return nil, err + } + return b, nil + } else { + var gqlResp types.GraphQLResponse + err = json.Unmarshal(resultContent, &gqlResp) + if err != nil { + return nil, fmt.Errorf("failed to unmarshal graphql response: %w", err) + } else if len(gqlResp.Errors) > 0 { + return gqlResp.Data, fmt.Errorf("graphql error: %w", gqlResp.Errors) + } + return gqlResp.Data, nil } - return gqlResp.Data, nil } type respGetNewsletterInfo struct { Newsletter *types.NewsletterMetadata `json:"xwa2_newsletter"` } -func (cli *Client) getNewsletterInfo(input map[string]any, fetchViewerMeta bool) (*types.NewsletterMetadata, error) { - data, err := cli.sendMexIQ(context.TODO(), queryFetchNewsletter, map[string]any{ +func (cli *Client) getNewsletterInfo(ctx context.Context, input map[string]any, fetchViewerMeta bool) (*types.NewsletterMetadata, error) { + data, err := cli.sendMexIQ(ctx, queryFetchNewsletter, map[string]any{ "fetch_creation_time": true, "fetch_full_image": true, "fetch_viewer_metadata": fetchViewerMeta, @@ -180,8 +264,8 @@ func (cli *Client) getNewsletterInfo(input map[string]any, fetchViewerMeta bool) } // GetNewsletterInfo gets the info of a newsletter that you're joined to. -func (cli *Client) GetNewsletterInfo(jid types.JID) (*types.NewsletterMetadata, error) { - return cli.getNewsletterInfo(map[string]any{ +func (cli *Client) GetNewsletterInfo(ctx context.Context, jid types.JID) (*types.NewsletterMetadata, error) { + return cli.getNewsletterInfo(ctx, map[string]any{ "key": jid.String(), "type": types.NewsletterKeyTypeJID, }, true) @@ -192,8 +276,8 @@ func (cli *Client) GetNewsletterInfo(jid types.JID) (*types.NewsletterMetadata, // You can either pass the full link (https://whatsapp.com/channel/...) or just the `...` part. // // Note that the ViewerMeta field of the returned NewsletterMetadata will be nil. -func (cli *Client) GetNewsletterInfoWithInvite(key string) (*types.NewsletterMetadata, error) { - return cli.getNewsletterInfo(map[string]any{ +func (cli *Client) GetNewsletterInfoWithInvite(ctx context.Context, key string) (*types.NewsletterMetadata, error) { + return cli.getNewsletterInfo(ctx, map[string]any{ "key": strings.TrimPrefix(key, NewsletterLinkPrefix), "type": types.NewsletterKeyTypeInvite, }, false) @@ -204,8 +288,8 @@ type respGetSubscribedNewsletters struct { } // GetSubscribedNewsletters gets the info of all newsletters that you're joined to. -func (cli *Client) GetSubscribedNewsletters() ([]*types.NewsletterMetadata, error) { - data, err := cli.sendMexIQ(context.TODO(), querySubscribedNewsletters, map[string]any{}) +func (cli *Client) GetSubscribedNewsletters(ctx context.Context) ([]*types.NewsletterMetadata, error) { + data, err := cli.sendMexIQ(ctx, querySubscribedNewsletters, map[string]any{}) var respData respGetSubscribedNewsletters if data != nil { jsonErr := json.Unmarshal(data, &respData) @@ -227,8 +311,8 @@ type respCreateNewsletter struct { } // CreateNewsletter creates a new WhatsApp channel. -func (cli *Client) CreateNewsletter(params CreateNewsletterParams) (*types.NewsletterMetadata, error) { - resp, err := cli.sendMexIQ(context.TODO(), mutationCreateNewsletter, map[string]any{ +func (cli *Client) CreateNewsletter(ctx context.Context, params CreateNewsletterParams) (*types.NewsletterMetadata, error) { + resp, err := cli.sendMexIQ(ctx, mutationCreateNewsletter, map[string]any{ "newsletter_input": ¶ms, }) if err != nil { @@ -247,8 +331,8 @@ func (cli *Client) CreateNewsletter(params CreateNewsletterParams) (*types.Newsl // To accept the terms for creating newsletters, use // // cli.AcceptTOSNotice("20601218", "5") -func (cli *Client) AcceptTOSNotice(noticeID, stage string) error { - _, err := cli.sendIQ(infoQuery{ +func (cli *Client) AcceptTOSNotice(ctx context.Context, noticeID, stage string) error { + _, err := cli.sendIQ(ctx, infoQuery{ Namespace: "tos", Type: iqSet, To: types.ServerJID, @@ -264,28 +348,28 @@ func (cli *Client) AcceptTOSNotice(noticeID, stage string) error { } // NewsletterToggleMute changes the mute status of a newsletter. -func (cli *Client) NewsletterToggleMute(jid types.JID, mute bool) error { +func (cli *Client) NewsletterToggleMute(ctx context.Context, jid types.JID, mute bool) error { query := mutationUnmuteNewsletter if mute { query = mutationMuteNewsletter } - _, err := cli.sendMexIQ(context.TODO(), query, map[string]any{ + _, err := cli.sendMexIQ(ctx, query, map[string]any{ "newsletter_id": jid.String(), }) return err } // FollowNewsletter makes the user follow (join) a WhatsApp channel. -func (cli *Client) FollowNewsletter(jid types.JID) error { - _, err := cli.sendMexIQ(context.TODO(), mutationFollowNewsletter, map[string]any{ +func (cli *Client) FollowNewsletter(ctx context.Context, jid types.JID) error { + _, err := cli.sendMexIQ(ctx, mutationFollowNewsletter, map[string]any{ "newsletter_id": jid.String(), }) return err } // UnfollowNewsletter makes the user unfollow (leave) a WhatsApp channel. -func (cli *Client) UnfollowNewsletter(jid types.JID) error { - _, err := cli.sendMexIQ(context.TODO(), mutationUnfollowNewsletter, map[string]any{ +func (cli *Client) UnfollowNewsletter(ctx context.Context, jid types.JID) error { + _, err := cli.sendMexIQ(ctx, mutationUnfollowNewsletter, map[string]any{ "newsletter_id": jid.String(), }) return err @@ -297,7 +381,7 @@ type GetNewsletterMessagesParams struct { } // GetNewsletterMessages gets messages in a WhatsApp channel. -func (cli *Client) GetNewsletterMessages(jid types.JID, params *GetNewsletterMessagesParams) ([]*types.NewsletterMessage, error) { +func (cli *Client) GetNewsletterMessages(ctx context.Context, jid types.JID, params *GetNewsletterMessagesParams) ([]*types.NewsletterMessage, error) { attrs := waBinary.Attrs{ "type": "jid", "jid": jid, @@ -310,7 +394,7 @@ func (cli *Client) GetNewsletterMessages(jid types.JID, params *GetNewsletterMes attrs["before"] = params.Before } } - resp, err := cli.sendIQ(infoQuery{ + resp, err := cli.sendIQ(ctx, infoQuery{ Namespace: "newsletter", Type: iqGet, To: types.ServerJID, @@ -318,7 +402,6 @@ func (cli *Client) GetNewsletterMessages(jid types.JID, params *GetNewsletterMes Tag: "messages", Attrs: attrs, }}, - Context: context.TODO(), }) if err != nil { return nil, err @@ -339,7 +422,7 @@ type GetNewsletterUpdatesParams struct { // GetNewsletterMessageUpdates gets updates in a WhatsApp channel. // // These are the same kind of updates that NewsletterSubscribeLiveUpdates triggers (reaction and view counts). -func (cli *Client) GetNewsletterMessageUpdates(jid types.JID, params *GetNewsletterUpdatesParams) ([]*types.NewsletterMessage, error) { +func (cli *Client) GetNewsletterMessageUpdates(ctx context.Context, jid types.JID, params *GetNewsletterUpdatesParams) ([]*types.NewsletterMessage, error) { attrs := waBinary.Attrs{} if params != nil { if params.Count != 0 { @@ -352,7 +435,7 @@ func (cli *Client) GetNewsletterMessageUpdates(jid types.JID, params *GetNewslet attrs["after"] = params.After } } - resp, err := cli.sendIQ(infoQuery{ + resp, err := cli.sendIQ(ctx, infoQuery{ Namespace: "newsletter", Type: iqGet, To: jid, @@ -360,7 +443,6 @@ func (cli *Client) GetNewsletterMessageUpdates(jid types.JID, params *GetNewslet Tag: "message_updates", Attrs: attrs, }}, - Context: context.TODO(), }) if err != nil { return nil, err diff --git a/vendor/go.mau.fi/whatsmeow/notification.go b/vendor/go.mau.fi/whatsmeow/notification.go index 8e004fab3f..91e01aec99 100644 --- a/vendor/go.mau.fi/whatsmeow/notification.go +++ b/vendor/go.mau.fi/whatsmeow/notification.go @@ -7,20 +7,22 @@ package whatsmeow import ( + "context" "encoding/json" "errors" + "slices" "google.golang.org/protobuf/proto" "go.mau.fi/whatsmeow/appstate" waBinary "go.mau.fi/whatsmeow/binary" - waProto "go.mau.fi/whatsmeow/binary/proto" + "go.mau.fi/whatsmeow/proto/waE2E" "go.mau.fi/whatsmeow/store" "go.mau.fi/whatsmeow/types" "go.mau.fi/whatsmeow/types/events" ) -func (cli *Client) handleEncryptNotification(node *waBinary.Node) { +func (cli *Client) handleEncryptNotification(ctx context.Context, node *waBinary.Node) { from := node.AttrGetter().JID("from") if from == types.ServerJID { count := node.GetChildByTag("count") @@ -32,15 +34,15 @@ func (cli *Client) handleEncryptNotification(node *waBinary.Node) { } cli.Log.Infof("Got prekey count from server: %s", node.XMLString()) if otksLeft < MinPreKeyCount { - cli.uploadPreKeys() + cli.uploadPreKeys(ctx, false) } } else if _, ok := node.GetOptionalChildByTag("identity"); ok { cli.Log.Debugf("Got identity change for %s: %s, deleting all identities/sessions for that number", from, node.XMLString()) - err := cli.Store.Identities.DeleteAllIdentities(from.User) + err := cli.Store.Identities.DeleteAllIdentities(ctx, from.User) if err != nil { cli.Log.Warnf("Failed to delete all identities of %s from store after identity change: %v", from, err) } - err = cli.Store.Sessions.DeleteAllSessions(from.User) + err = cli.Store.Sessions.DeleteAllSessions(ctx, from.User) if err != nil { cli.Log.Warnf("Failed to delete all sessions of %s from store after identity change: %v", from, err) } @@ -51,13 +53,13 @@ func (cli *Client) handleEncryptNotification(node *waBinary.Node) { } } -func (cli *Client) handleAppStateNotification(node *waBinary.Node) { +func (cli *Client) handleAppStateNotification(ctx context.Context, node *waBinary.Node) { for _, collection := range node.GetChildrenByTag("collection") { ag := collection.AttrGetter() name := appstate.WAPatchName(ag.String("name")) version := ag.Uint64("version") cli.Log.Debugf("Got server sync notification that app state %s has updated to version %d", name, version) - err := cli.FetchAppState(name, false, false) + err := cli.FetchAppState(ctx, name, false, false) if errors.Is(err, ErrIQDisconnected) || errors.Is(err, ErrNotConnected) { // There are some app state changes right before a remote logout, so stop syncing if we're disconnected. cli.Log.Debugf("Failed to sync app state after notification: %v, not trying to sync other states", err) @@ -68,7 +70,7 @@ func (cli *Client) handleAppStateNotification(node *waBinary.Node) { } } -func (cli *Client) handlePictureNotification(node *waBinary.Node) { +func (cli *Client) handlePictureNotification(ctx context.Context, node *waBinary.Node) { ts := node.AttrGetter().UnixTime("t") for _, child := range node.GetChildren() { ag := child.AttrGetter() @@ -94,37 +96,57 @@ func (cli *Client) handlePictureNotification(node *waBinary.Node) { } } -func (cli *Client) handleDeviceNotification(node *waBinary.Node) { +func (cli *Client) handleDeviceNotification(ctx context.Context, node *waBinary.Node) { cli.userDevicesCacheLock.Lock() defer cli.userDevicesCacheLock.Unlock() ag := node.AttrGetter() from := ag.JID("from") + fromLID := ag.OptionalJID("lid") + if fromLID != nil { + cli.StoreLIDPNMapping(ctx, *fromLID, from) + } cached, ok := cli.userDevicesCache[from] if !ok { cli.Log.Debugf("No device list cached for %s, ignoring device list notification", from) return } + var cachedLID deviceCache + var cachedLIDHash string + if fromLID != nil { + cachedLID = cli.userDevicesCache[*fromLID] + cachedLIDHash = participantListHashV2(cachedLID.devices) + } cachedParticipantHash := participantListHashV2(cached.devices) for _, child := range node.GetChildren() { - if child.Tag != "add" && child.Tag != "remove" { - cli.Log.Debugf("Unknown device list change tag %s", child.Tag) - continue - } cag := child.AttrGetter() deviceHash := cag.String("device_hash") + deviceLIDHash := cag.OptionalString("device_lid_hash") deviceChild, _ := child.GetOptionalChildByTag("device") changedDeviceJID := deviceChild.AttrGetter().JID("jid") + changedDeviceLID := deviceChild.AttrGetter().OptionalJID("lid") switch child.Tag { case "add": cached.devices = append(cached.devices, changedDeviceJID) + if changedDeviceLID != nil { + cachedLID.devices = append(cachedLID.devices, *changedDeviceLID) + } case "remove": - for i, jid := range cached.devices { - if jid == changedDeviceJID { - cached.devices = append(cached.devices[:i], cached.devices[i+1:]...) - } + cached.devices = slices.DeleteFunc(cached.devices, func(existing types.JID) bool { + return existing == changedDeviceJID + }) + if changedDeviceLID != nil { + cachedLID.devices = slices.DeleteFunc(cachedLID.devices, func(existing types.JID) bool { + return existing == *changedDeviceLID + }) } case "update": - // ??? + // Exact meaning of "update" is unknown, clear device list cache to be safe + cli.Log.Debugf("%s's device list updated, dropping cached devices", from) + delete(cli.userDevicesCache, from) + continue + default: + cli.Log.Debugf("Unknown device list change tag %s", child.Tag) + continue } newParticipantHash := participantListHashV2(cached.devices) if newParticipantHash == deviceHash { @@ -134,10 +156,20 @@ func (cli *Client) handleDeviceNotification(node *waBinary.Node) { cli.Log.Warnf("%s's device list hash changed from %s to %s (%s). New hash doesn't match (%s)", from, cachedParticipantHash, deviceHash, child.Tag, newParticipantHash) delete(cli.userDevicesCache, from) } + if fromLID != nil && changedDeviceLID != nil && deviceLIDHash != "" { + newLIDParticipantHash := participantListHashV2(cachedLID.devices) + if newLIDParticipantHash == deviceLIDHash { + cli.Log.Debugf("%s's device list hash changed from %s to %s (%s). New hash matches", fromLID, cachedLIDHash, deviceLIDHash, child.Tag) + cli.userDevicesCache[*fromLID] = cachedLID + } else { + cli.Log.Warnf("%s's device list hash changed from %s to %s (%s). New hash doesn't match (%s)", fromLID, cachedLIDHash, deviceLIDHash, child.Tag, newLIDParticipantHash) + delete(cli.userDevicesCache, *fromLID) + } + } } } -func (cli *Client) handleFBDeviceNotification(node *waBinary.Node) { +func (cli *Client) handleFBDeviceNotification(ctx context.Context, node *waBinary.Node) { cli.userDevicesCacheLock.Lock() defer cli.userDevicesCacheLock.Unlock() jid := node.AttrGetter().JID("from") @@ -145,7 +177,7 @@ func (cli *Client) handleFBDeviceNotification(node *waBinary.Node) { cli.userDevicesCache[jid] = userDevices } -func (cli *Client) handleOwnDevicesNotification(node *waBinary.Node) { +func (cli *Client) handleOwnDevicesNotification(ctx context.Context, node *waBinary.Node) { cli.userDevicesCacheLock.Lock() defer cli.userDevicesCacheLock.Unlock() ownID := cli.getOwnID().ToNonAD() @@ -177,7 +209,7 @@ func (cli *Client) handleOwnDevicesNotification(node *waBinary.Node) { } } -func (cli *Client) handleBlocklist(node *waBinary.Node) { +func (cli *Client) handleBlocklist(ctx context.Context, node *waBinary.Node) { ag := node.AttrGetter() evt := events.Blocklist{ Action: events.BlocklistAction(ag.OptionalString("action")), @@ -199,29 +231,30 @@ func (cli *Client) handleBlocklist(node *waBinary.Node) { cli.dispatchEvent(&evt) } -func (cli *Client) handleAccountSyncNotification(node *waBinary.Node) { +func (cli *Client) handleAccountSyncNotification(ctx context.Context, node *waBinary.Node) { for _, child := range node.GetChildren() { switch child.Tag { case "privacy": - cli.handlePrivacySettingsNotification(&child) + cli.handlePrivacySettingsNotification(ctx, &child) case "devices": - cli.handleOwnDevicesNotification(&child) + cli.handleOwnDevicesNotification(ctx, &child) case "picture": cli.dispatchEvent(&events.Picture{ Timestamp: node.AttrGetter().UnixTime("t"), JID: cli.getOwnID().ToNonAD(), }) case "blocklist": - cli.handleBlocklist(&child) + cli.handleBlocklist(ctx, &child) default: cli.Log.Debugf("Unhandled account sync item %s", child.Tag) } } } -func (cli *Client) handlePrivacyTokenNotification(node *waBinary.Node) { - ownID := cli.getOwnID().ToNonAD() - if ownID.IsEmpty() { +func (cli *Client) handlePrivacyTokenNotification(ctx context.Context, node *waBinary.Node) { + ownJID := cli.getOwnID().ToNonAD() + ownLID := cli.getOwnLID().ToNonAD() + if ownJID.IsEmpty() { cli.Log.Debugf("Ignoring privacy token notification, session was deleted") return } @@ -240,8 +273,11 @@ func (cli *Client) handlePrivacyTokenNotification(node *waBinary.Node) { ag := child.AttrGetter() if child.Tag != "token" { cli.Log.Warnf("privacy_token notification contained unexpected <%s> tag", child.Tag) - } else if targetUser := ag.JID("jid"); targetUser != ownID { - cli.Log.Warnf("privacy_token notification contained token for different user %s", targetUser) + } else if targetUser := ag.JID("jid"); targetUser != ownLID && targetUser != ownJID { + // Don't log about own privacy tokens for other users + if sender != ownJID && sender != ownLID { + cli.Log.Warnf("privacy_token notification contained token for different user %s", targetUser) + } } else if tokenType := ag.String("type"); tokenType != "trusted_contact" { cli.Log.Warnf("privacy_token notification contained unexpected token type %s", tokenType) } else if token, ok := child.Content.([]byte); !ok { @@ -251,7 +287,7 @@ func (cli *Client) handlePrivacyTokenNotification(node *waBinary.Node) { if !ag.OK() { cli.Log.Warnf("privacy_token notification is missing some fields: %v", ag.Error()) } - err := cli.Store.PrivacyTokens.PutPrivacyTokens(store.PrivacyToken{ + err := cli.Store.PrivacyTokens.PutPrivacyTokens(ctx, store.PrivacyToken{ User: sender, Token: token, Timestamp: timestamp, @@ -272,8 +308,12 @@ func (cli *Client) parseNewsletterMessages(node *waBinary.Node) []*types.Newslet if child.Tag != "message" { continue } + ag := child.AttrGetter() msg := types.NewsletterMessage{ - MessageServerID: child.AttrGetter().Int("server_id"), + MessageServerID: ag.Int("server_id"), + MessageID: ag.String("id"), + Type: ag.String("type"), + Timestamp: ag.UnixTime("t"), ViewsCount: 0, ReactionCounts: nil, } @@ -282,7 +322,7 @@ func (cli *Client) parseNewsletterMessages(node *waBinary.Node) []*types.Newslet case "plaintext": byteContent, ok := subchild.Content.([]byte) if ok { - msg.Message = new(waProto.Message) + msg.Message = new(waE2E.Message) err := proto.Unmarshal(byteContent, msg.Message) if err != nil { cli.Log.Warnf("Failed to unmarshal newsletter message: %v", err) @@ -304,7 +344,7 @@ func (cli *Client) parseNewsletterMessages(node *waBinary.Node) []*types.Newslet return output } -func (cli *Client) handleNewsletterNotification(node *waBinary.Node) { +func (cli *Client) handleNewsletterNotification(ctx context.Context, node *waBinary.Node) { ag := node.AttrGetter() liveUpdates := node.GetChildByTag("live_updates") cli.dispatchEvent(&events.NewsletterLiveUpdate{ @@ -327,7 +367,7 @@ type newsletterEvent struct { // _on_state_change -> id, is_requestor, state } -func (cli *Client) handleMexNotification(node *waBinary.Node) { +func (cli *Client) handleMexNotification(ctx context.Context, node *waBinary.Node) { for _, child := range node.GetChildren() { if child.Tag != "update" { continue @@ -352,43 +392,73 @@ func (cli *Client) handleMexNotification(node *waBinary.Node) { } } -func (cli *Client) handleNotification(node *waBinary.Node) { +func (cli *Client) handleStatusNotification(ctx context.Context, node *waBinary.Node) { + ag := node.AttrGetter() + child, found := node.GetOptionalChildByTag("set") + if !found { + cli.Log.Debugf("Status notifcation did not contain child with tag 'set'") + return + } + status, ok := child.Content.([]byte) + if !ok { + cli.Log.Warnf("Set status notification has unexpected content (%T)", child.Content) + return + } + cli.dispatchEvent(&events.UserAbout{ + JID: ag.JID("from"), + Timestamp: ag.UnixTime("t"), + Status: string(status), + }) +} + +func (cli *Client) handleNotification(ctx context.Context, node *waBinary.Node) { ag := node.AttrGetter() notifType := ag.String("type") if !ag.OK() { return } - go cli.sendAck(node) + var cancelled bool + defer cli.maybeDeferredAck(ctx, node)(&cancelled) switch notifType { case "encrypt": - go cli.handleEncryptNotification(node) + go cli.handleEncryptNotification(ctx, node) case "server_sync": - go cli.handleAppStateNotification(node) + go cli.handleAppStateNotification(ctx, node) case "account_sync": - go cli.handleAccountSyncNotification(node) + go cli.handleAccountSyncNotification(ctx, node) case "devices": - go cli.handleDeviceNotification(node) + cli.handleDeviceNotification(ctx, node) case "fbid:devices": - go cli.handleFBDeviceNotification(node) + cli.handleFBDeviceNotification(ctx, node) case "w:gp2": - evt, err := cli.parseGroupNotification(node) + evt, lidPairs, redactedPhones, err := cli.parseGroupNotification(node) if err != nil { cli.Log.Errorf("Failed to parse group notification: %v", err) } else { - go cli.dispatchEvent(evt) + err = cli.Store.LIDs.PutManyLIDMappings(ctx, lidPairs) + if err != nil { + cli.Log.Errorf("Failed to store LID mappings from group notification: %v", err) + } + err = cli.Store.Contacts.PutManyRedactedPhones(ctx, redactedPhones) + if err != nil { + cli.Log.Warnf("Failed to store redacted phones from group notification: %v", err) + } + cancelled = cli.dispatchEvent(evt) } case "picture": - go cli.handlePictureNotification(node) + cli.handlePictureNotification(ctx, node) case "mediaretry": - go cli.handleMediaRetryNotification(node) + cli.handleMediaRetryNotification(ctx, node) case "privacy_token": - go cli.handlePrivacyTokenNotification(node) + cli.handlePrivacyTokenNotification(ctx, node) case "link_code_companion_reg": - go cli.tryHandleCodePairNotification(node) + go cli.tryHandleCodePairNotification(ctx, node) case "newsletter": - go cli.handleNewsletterNotification(node) + cli.handleNewsletterNotification(ctx, node) case "mex": - go cli.handleMexNotification(node) + cli.handleMexNotification(ctx, node) + case "status": + cli.handleStatusNotification(ctx, node) // Other types: business, disappearing_mode, server, status, pay, psa default: cli.Log.Debugf("Unhandled notification with type %s", notifType) diff --git a/vendor/go.mau.fi/whatsmeow/pair-code.go b/vendor/go.mau.fi/whatsmeow/pair-code.go index ea8f09339a..9774ba00ad 100644 --- a/vendor/go.mau.fi/whatsmeow/pair-code.go +++ b/vendor/go.mau.fi/whatsmeow/pair-code.go @@ -7,6 +7,7 @@ package whatsmeow import ( + "context" "crypto/aes" "crypto/cipher" "crypto/sha256" @@ -14,6 +15,7 @@ import ( "fmt" "regexp" "strconv" + "strings" "go.mau.fi/util/random" "golang.org/x/crypto/curve25519" @@ -72,7 +74,9 @@ func generateCompanionEphemeralKey() (ephemeralKeyPair *keys.KeyPair, ephemeralK // PairPhone generates a pairing code that can be used to link to a phone without scanning a QR code. // // You must connect the client normally before calling this (which means you'll also receive a QR code -// event, but that can be ignored when doing code pairing). +// event, but that can be ignored when doing code pairing). You should also wait for `*events.QR` before +// calling this to ensure the connection is fully established. If using [Client.GetQRChannel], wait for +// the first item in the channel. Alternatively, sleeping for a second after calling Connect will probably work too. // // The exact expiry of pairing codes is unknown, but QR codes are always generated and the login websocket is closed // after the QR codes run out, which means there's a 160-second time limit. It is recommended to generate the pairing @@ -83,11 +87,19 @@ func generateCompanionEphemeralKey() (ephemeralKeyPair *keys.KeyPair, ephemeralK // (the server will validate it and return 400 if it's wrong). // // See https://faq.whatsapp.com/1324084875126592 for more info -func (cli *Client) PairPhone(phone string, showPushNotification bool, clientType PairClientType, clientDisplayName string) (string, error) { +func (cli *Client) PairPhone(ctx context.Context, phone string, showPushNotification bool, clientType PairClientType, clientDisplayName string) (string, error) { + if cli == nil { + return "", ErrClientIsNil + } ephemeralKeyPair, ephemeralKey, encodedLinkingCode := generateCompanionEphemeralKey() phone = notNumbers.ReplaceAllString(phone, "") + if len(phone) <= 6 { + return "", ErrPhoneNumberTooShort + } else if strings.HasPrefix(phone, "0") { + return "", ErrPhoneNumberIsNotInternational + } jid := types.NewJID(phone, types.DefaultUserServer) - resp, err := cli.sendIQ(infoQuery{ + resp, err := cli.sendIQ(ctx, infoQuery{ Namespace: "md", Type: iqSet, To: types.ServerJID, @@ -128,14 +140,14 @@ func (cli *Client) PairPhone(phone string, showPushNotification bool, clientType return encodedLinkingCode[0:4] + "-" + encodedLinkingCode[4:], nil } -func (cli *Client) tryHandleCodePairNotification(parentNode *waBinary.Node) { - err := cli.handleCodePairNotification(parentNode) +func (cli *Client) tryHandleCodePairNotification(ctx context.Context, parentNode *waBinary.Node) { + err := cli.handleCodePairNotification(ctx, parentNode) if err != nil { cli.Log.Errorf("Failed to handle code pair notification: %s", err) } } -func (cli *Client) handleCodePairNotification(parentNode *waBinary.Node) error { +func (cli *Client) handleCodePairNotification(ctx context.Context, parentNode *waBinary.Node) error { node, ok := parentNode.GetOptionalChildByTag("link_code_companion_reg") if !ok { return &ElementMissingError{ @@ -210,7 +222,7 @@ func (cli *Client) handleCodePairNotification(parentNode *waBinary.Node) error { advSecret := hkdfutil.SHA256(advSecretInput, nil, []byte("adv_secret"), 32) cli.Store.AdvSecretKey = advSecret - _, err = cli.sendIQ(infoQuery{ + _, err = cli.sendIQ(ctx, infoQuery{ Namespace: "md", Type: iqSet, To: types.ServerJID, diff --git a/vendor/go.mau.fi/whatsmeow/pair.go b/vendor/go.mau.fi/whatsmeow/pair.go index c0e957abba..3951183c4e 100644 --- a/vendor/go.mau.fi/whatsmeow/pair.go +++ b/vendor/go.mau.fi/whatsmeow/pair.go @@ -8,38 +8,48 @@ package whatsmeow import ( "bytes" + "context" "crypto/hmac" "crypto/sha256" "encoding/base64" "fmt" "strings" + "time" "go.mau.fi/libsignal/ecc" "google.golang.org/protobuf/proto" waBinary "go.mau.fi/whatsmeow/binary" - waProto "go.mau.fi/whatsmeow/binary/proto" + "go.mau.fi/whatsmeow/proto/waAdv" "go.mau.fi/whatsmeow/types" "go.mau.fi/whatsmeow/types/events" "go.mau.fi/whatsmeow/util/keys" ) -func (cli *Client) handleIQ(node *waBinary.Node) { +var ( + AdvAccountSignaturePrefix = []byte{6, 0} + AdvDeviceSignaturePrefix = []byte{6, 1} + + AdvHostedAccountSignaturePrefix = []byte{6, 5} + AdvHostedDeviceSignaturePrefix = []byte{6, 6} +) + +func (cli *Client) handleIQ(ctx context.Context, node *waBinary.Node) { children := node.GetChildren() if len(children) != 1 || node.Attrs["from"] != types.ServerJID { return } switch children[0].Tag { case "pair-device": - cli.handlePairDevice(node) + cli.handlePairDevice(ctx, node) case "pair-success": - cli.handlePairSuccess(node) + cli.handlePairSuccess(ctx, node) } } -func (cli *Client) handlePairDevice(node *waBinary.Node) { +func (cli *Client) handlePairDevice(ctx context.Context, node *waBinary.Node) { pairDevice := node.GetChildByTag("pair-device") - err := cli.sendNode(waBinary.Node{ + err := cli.sendNode(ctx, waBinary.Node{ Tag: "iq", Attrs: waBinary.Attrs{ "to": node.Attrs["from"], @@ -75,102 +85,112 @@ func (cli *Client) makeQRData(ref string) string { return strings.Join([]string{ref, noise, identity, adv}, ",") } -func (cli *Client) handlePairSuccess(node *waBinary.Node) { +func (cli *Client) handlePairSuccess(ctx context.Context, node *waBinary.Node) { id := node.Attrs["id"].(string) pairSuccess := node.GetChildByTag("pair-success") deviceIdentityBytes, _ := pairSuccess.GetChildByTag("device-identity").Content.([]byte) businessName, _ := pairSuccess.GetChildByTag("biz").Attrs["name"].(string) jid, _ := pairSuccess.GetChildByTag("device").Attrs["jid"].(types.JID) + lid, _ := pairSuccess.GetChildByTag("device").Attrs["lid"].(types.JID) platform, _ := pairSuccess.GetChildByTag("platform").Attrs["name"].(string) + cli.serverTimeOffset.Store(int64(node.AttrGetter().UnixTime("t").Sub(time.Now().Round(time.Second)))) go func() { - err := cli.handlePair(deviceIdentityBytes, id, businessName, platform, jid) + err := cli.handlePair(ctx, deviceIdentityBytes, id, businessName, platform, jid, lid) if err != nil { cli.Log.Errorf("Failed to pair device: %v", err) cli.Disconnect() - cli.dispatchEvent(&events.PairError{ID: jid, BusinessName: businessName, Platform: platform, Error: err}) + cli.dispatchEvent(&events.PairError{ID: jid, LID: lid, BusinessName: businessName, Platform: platform, Error: err}) } else { cli.Log.Infof("Successfully paired %s", cli.Store.ID) - cli.dispatchEvent(&events.PairSuccess{ID: jid, BusinessName: businessName, Platform: platform}) + go cli.sendUnifiedSession() + cli.dispatchEvent(&events.PairSuccess{ID: jid, LID: lid, BusinessName: businessName, Platform: platform}) } }() } -func (cli *Client) handlePair(deviceIdentityBytes []byte, reqID, businessName, platform string, jid types.JID) error { - var deviceIdentityContainer waProto.ADVSignedDeviceIdentityHMAC +func (cli *Client) handlePair(ctx context.Context, deviceIdentityBytes []byte, reqID, businessName, platform string, jid, lid types.JID) error { + var deviceIdentityContainer waAdv.ADVSignedDeviceIdentityHMAC err := proto.Unmarshal(deviceIdentityBytes, &deviceIdentityContainer) if err != nil { - cli.sendPairError(reqID, 500, "internal-error") + cli.sendPairError(ctx, reqID, 500, "internal-error") return &PairProtoError{"failed to parse device identity container in pair success message", err} } h := hmac.New(sha256.New, cli.Store.AdvSecretKey) + if deviceIdentityContainer.GetAccountType() == waAdv.ADVEncryptionType_HOSTED { + h.Write(AdvHostedAccountSignaturePrefix) + //cli.Store.IsHosted = true + } h.Write(deviceIdentityContainer.Details) + if !bytes.Equal(h.Sum(nil), deviceIdentityContainer.HMAC) { cli.Log.Warnf("Invalid HMAC from pair success message") - cli.sendPairError(reqID, 401, "not-authorized") + cli.sendPairError(ctx, reqID, 401, "hmac-mismatch") return ErrPairInvalidDeviceIdentityHMAC } - var deviceIdentity waProto.ADVSignedDeviceIdentity + var deviceIdentity waAdv.ADVSignedDeviceIdentity err = proto.Unmarshal(deviceIdentityContainer.Details, &deviceIdentity) if err != nil { - cli.sendPairError(reqID, 500, "internal-error") + cli.sendPairError(ctx, reqID, 500, "internal-error") return &PairProtoError{"failed to parse signed device identity in pair success message", err} } - if !verifyDeviceIdentityAccountSignature(&deviceIdentity, cli.Store.IdentityKey) { - cli.sendPairError(reqID, 401, "not-authorized") - return ErrPairInvalidDeviceSignature - } - - deviceIdentity.DeviceSignature = generateDeviceSignature(&deviceIdentity, cli.Store.IdentityKey)[:] - - var deviceIdentityDetails waProto.ADVDeviceIdentity + var deviceIdentityDetails waAdv.ADVDeviceIdentity err = proto.Unmarshal(deviceIdentity.Details, &deviceIdentityDetails) if err != nil { - cli.sendPairError(reqID, 500, "internal-error") + cli.sendPairError(ctx, reqID, 500, "internal-error") return &PairProtoError{"failed to parse device identity details in pair success message", err} } + if !verifyAccountSignature(&deviceIdentity, cli.Store.IdentityKey, deviceIdentityDetails.GetDeviceType() == waAdv.ADVEncryptionType_HOSTED) { + cli.sendPairError(ctx, reqID, 401, "signature-mismatch") + return ErrPairInvalidDeviceSignature + } + + deviceIdentity.DeviceSignature = generateDeviceSignature(&deviceIdentity, cli.Store.IdentityKey)[:] + if cli.PrePairCallback != nil && !cli.PrePairCallback(jid, platform, businessName) { - cli.sendPairError(reqID, 500, "internal-error") + cli.sendPairError(ctx, reqID, 500, "internal-error") return ErrPairRejectedLocally } - cli.Store.Account = proto.Clone(&deviceIdentity).(*waProto.ADVSignedDeviceIdentity) + cli.Store.Account = proto.Clone(&deviceIdentity).(*waAdv.ADVSignedDeviceIdentity) - mainDeviceJID := jid - mainDeviceJID.Device = 0 + mainDeviceLID := lid + mainDeviceLID.Device = 0 mainDeviceIdentity := *(*[32]byte)(deviceIdentity.AccountSignatureKey) deviceIdentity.AccountSignatureKey = nil selfSignedDeviceIdentity, err := proto.Marshal(&deviceIdentity) if err != nil { - cli.sendPairError(reqID, 500, "internal-error") + cli.sendPairError(ctx, reqID, 500, "internal-error") return &PairProtoError{"failed to marshal self-signed device identity", err} } cli.Store.ID = &jid + cli.Store.LID = lid cli.Store.BusinessName = businessName cli.Store.Platform = platform - err = cli.Store.Save() + err = cli.Store.Save(ctx) if err != nil { - cli.sendPairError(reqID, 500, "internal-error") + cli.sendPairError(ctx, reqID, 500, "internal-error") return &PairDatabaseError{"failed to save device store", err} } - err = cli.Store.Identities.PutIdentity(mainDeviceJID.SignalAddress().String(), mainDeviceIdentity) + cli.StoreLIDPNMapping(ctx, lid, jid) + err = cli.Store.Identities.PutIdentity(ctx, mainDeviceLID.SignalAddress().String(), mainDeviceIdentity) if err != nil { - _ = cli.Store.Delete() - cli.sendPairError(reqID, 500, "internal-error") + _ = cli.Store.Delete(ctx) + cli.sendPairError(ctx, reqID, 500, "internal-error") return &PairDatabaseError{"failed to store main device identity", err} } // Expect a disconnect after this and don't dispatch the usual Disconnected event cli.expectDisconnect() - err = cli.sendNode(waBinary.Node{ + err = cli.sendNode(ctx, waBinary.Node{ Tag: "iq", Attrs: waBinary.Attrs{ "to": types.ServerJID, @@ -189,7 +209,7 @@ func (cli *Client) handlePair(deviceIdentityBytes []byte, reqID, businessName, p }}, }) if err != nil { - _ = cli.Store.Delete() + _ = cli.Store.Delete(ctx) return fmt.Errorf("failed to send pairing confirmation: %w", err) } return nil @@ -208,7 +228,7 @@ func concatBytes(data ...[]byte) []byte { return output } -func verifyDeviceIdentityAccountSignature(deviceIdentity *waProto.ADVSignedDeviceIdentity, ikp *keys.KeyPair) bool { +func verifyAccountSignature(deviceIdentity *waAdv.ADVSignedDeviceIdentity, ikp *keys.KeyPair, isHosted bool) bool { if len(deviceIdentity.AccountSignatureKey) != 32 || len(deviceIdentity.AccountSignature) != 64 { return false } @@ -216,18 +236,24 @@ func verifyDeviceIdentityAccountSignature(deviceIdentity *waProto.ADVSignedDevic signatureKey := ecc.NewDjbECPublicKey(*(*[32]byte)(deviceIdentity.AccountSignatureKey)) signature := *(*[64]byte)(deviceIdentity.AccountSignature) - message := concatBytes([]byte{6, 0}, deviceIdentity.Details, ikp.Pub[:]) + prefix := AdvAccountSignaturePrefix + if isHosted { + prefix = AdvHostedAccountSignaturePrefix + } + message := concatBytes(prefix, deviceIdentity.Details, ikp.Pub[:]) + return ecc.VerifySignature(signatureKey, message, signature) } -func generateDeviceSignature(deviceIdentity *waProto.ADVSignedDeviceIdentity, ikp *keys.KeyPair) *[64]byte { - message := concatBytes([]byte{6, 1}, deviceIdentity.Details, ikp.Pub[:], deviceIdentity.AccountSignatureKey) +func generateDeviceSignature(deviceIdentity *waAdv.ADVSignedDeviceIdentity, ikp *keys.KeyPair) *[64]byte { + prefix := AdvDeviceSignaturePrefix + message := concatBytes(prefix, deviceIdentity.Details, ikp.Pub[:], deviceIdentity.AccountSignatureKey) sig := ecc.CalculateSignature(ecc.NewDjbECPrivateKey(*ikp.Priv), message) return &sig } -func (cli *Client) sendPairError(id string, code int, text string) { - err := cli.sendNode(waBinary.Node{ +func (cli *Client) sendPairError(ctx context.Context, id string, code int, text string) { + err := cli.sendNode(ctx, waBinary.Node{ Tag: "iq", Attrs: waBinary.Attrs{ "to": types.ServerJID, diff --git a/vendor/go.mau.fi/whatsmeow/prekeys.go b/vendor/go.mau.fi/whatsmeow/prekeys.go index b8656bb5a7..77c011cd9b 100644 --- a/vendor/go.mau.fi/whatsmeow/prekeys.go +++ b/vendor/go.mau.fi/whatsmeow/prekeys.go @@ -29,8 +29,8 @@ const ( MinPreKeyCount = 5 ) -func (cli *Client) getServerPreKeyCount() (int, error) { - resp, err := cli.sendIQ(infoQuery{ +func (cli *Client) getServerPreKeyCount(ctx context.Context) (int, error) { + resp, err := cli.sendIQ(ctx, infoQuery{ Namespace: "encrypt", Type: "get", To: types.ServerJID, @@ -47,11 +47,11 @@ func (cli *Client) getServerPreKeyCount() (int, error) { return val, ag.Error() } -func (cli *Client) uploadPreKeys() { +func (cli *Client) uploadPreKeys(ctx context.Context, initialUpload bool) { cli.uploadPreKeysLock.Lock() defer cli.uploadPreKeysLock.Unlock() if cli.lastPreKeyUpload.Add(10 * time.Minute).After(time.Now()) { - sc, _ := cli.getServerPreKeyCount() + sc, _ := cli.getServerPreKeyCount(ctx) if sc >= WantedPreKeyCount { cli.Log.Debugf("Canceling prekey upload request due to likely race condition") return @@ -59,13 +59,17 @@ func (cli *Client) uploadPreKeys() { } var registrationIDBytes [4]byte binary.BigEndian.PutUint32(registrationIDBytes[:], cli.Store.RegistrationID) - preKeys, err := cli.Store.PreKeys.GetOrGenPreKeys(WantedPreKeyCount) + wantedCount := WantedPreKeyCount + if initialUpload { + wantedCount = 812 + } + preKeys, err := cli.Store.PreKeys.GetOrGenPreKeys(ctx, uint32(wantedCount)) if err != nil { cli.Log.Errorf("Failed to get prekeys to upload: %v", err) return } cli.Log.Infof("Uploading %d new prekeys to server", len(preKeys)) - _, err = cli.sendIQ(infoQuery{ + _, err = cli.sendIQ(ctx, infoQuery{ Namespace: "encrypt", Type: "set", To: types.ServerJID, @@ -82,11 +86,34 @@ func (cli *Client) uploadPreKeys() { return } cli.Log.Debugf("Got response to uploading prekeys") - err = cli.Store.PreKeys.MarkPreKeysAsUploaded(preKeys[len(preKeys)-1].KeyID) + err = cli.Store.PreKeys.MarkPreKeysAsUploaded(ctx, preKeys[len(preKeys)-1].KeyID) if err != nil { cli.Log.Warnf("Failed to mark prekeys as uploaded: %v", err) + return } cli.lastPreKeyUpload = time.Now() + return +} + +func (cli *Client) fetchPreKeysNoError(ctx context.Context, retryDevices []types.JID) map[types.JID]*prekey.Bundle { + if len(retryDevices) == 0 { + return nil + } + bundlesResp, err := cli.fetchPreKeys(ctx, retryDevices) + if err != nil { + cli.Log.Warnf("Failed to fetch prekeys for %v with no existing session: %v", retryDevices, err) + return nil + } + bundles := make(map[types.JID]*prekey.Bundle, len(retryDevices)) + for _, jid := range retryDevices { + resp := bundlesResp[jid] + if resp.err != nil { + cli.Log.Warnf("Failed to fetch prekey for %s: %v", jid, resp.err) + continue + } + bundles[jid] = resp.bundle + } + return bundles } type preKeyResp struct { @@ -103,8 +130,7 @@ func (cli *Client) fetchPreKeys(ctx context.Context, users []types.JID) (map[typ "reason": "identity", } } - resp, err := cli.sendIQ(infoQuery{ - Context: ctx, + resp, err := cli.sendIQ(ctx, infoQuery{ Namespace: "encrypt", Type: "get", To: types.ServerJID, diff --git a/vendor/go.mau.fi/whatsmeow/presence.go b/vendor/go.mau.fi/whatsmeow/presence.go index cc104a0481..f3e472a6da 100644 --- a/vendor/go.mau.fi/whatsmeow/presence.go +++ b/vendor/go.mau.fi/whatsmeow/presence.go @@ -7,6 +7,7 @@ package whatsmeow import ( + "context" "fmt" waBinary "go.mau.fi/whatsmeow/binary" @@ -14,7 +15,7 @@ import ( "go.mau.fi/whatsmeow/types/events" ) -func (cli *Client) handleChatState(node *waBinary.Node) { +func (cli *Client) handleChatState(ctx context.Context, node *waBinary.Node) { source, err := cli.parseMessageSource(node, true) if err != nil { cli.Log.Warnf("Failed to parse chat state update: %v", err) @@ -35,7 +36,7 @@ func (cli *Client) handleChatState(node *waBinary.Node) { } } -func (cli *Client) handlePresence(node *waBinary.Node) { +func (cli *Client) handlePresence(ctx context.Context, node *waBinary.Node) { var evt events.Presence ag := node.AttrGetter() evt.From = ag.JID("from") @@ -60,21 +61,28 @@ func (cli *Client) handlePresence(node *waBinary.Node) { // // You should call this at least once after connecting so that the server has your pushname. // Otherwise, other users will see "-" as the name. -func (cli *Client) SendPresence(state types.Presence) error { - if len(cli.Store.PushName) == 0 { +func (cli *Client) SendPresence(ctx context.Context, state types.Presence) error { + if cli == nil { + return ErrClientIsNil + } else if len(cli.Store.PushName) == 0 && cli.MessengerConfig == nil { return ErrNoPushName } if state == types.PresenceAvailable { + go cli.sendUnifiedSession() cli.sendActiveReceipts.CompareAndSwap(0, 1) } else { cli.sendActiveReceipts.CompareAndSwap(1, 0) } - return cli.sendNode(waBinary.Node{ - Tag: "presence", - Attrs: waBinary.Attrs{ - "name": cli.Store.PushName, - "type": string(state), - }, + attrs := waBinary.Attrs{ + "type": string(state), + } + // PushName not set when using WhatsApp for Messenger E2EE + if cli.MessengerConfig == nil { + attrs["name"] = cli.Store.PushName + } + return cli.sendNode(ctx, waBinary.Node{ + Tag: "presence", + Attrs: attrs, }) } @@ -86,8 +94,11 @@ func (cli *Client) SendPresence(state types.Presence) error { // so you should mark yourself as online before trying to use this function: // // cli.SendPresence(types.PresenceAvailable) -func (cli *Client) SubscribePresence(jid types.JID) error { - privacyToken, err := cli.Store.PrivacyTokens.GetPrivacyToken(jid) +func (cli *Client) SubscribePresence(ctx context.Context, jid types.JID) error { + if cli == nil { + return ErrClientIsNil + } + privacyToken, err := cli.Store.PrivacyTokens.GetPrivacyToken(ctx, jid) if err != nil { return fmt.Errorf("failed to get privacy token: %w", err) } else if privacyToken == nil { @@ -110,13 +121,13 @@ func (cli *Client) SubscribePresence(jid types.JID) error { Content: privacyToken.Token, }} } - return cli.sendNode(req) + return cli.sendNode(ctx, req) } // SendChatPresence updates the user's typing status in a specific chat. // // The media parameter can be set to indicate the user is recording media (like a voice message) rather than typing a text message. -func (cli *Client) SendChatPresence(jid types.JID, state types.ChatPresence, media types.ChatPresenceMedia) error { +func (cli *Client) SendChatPresence(ctx context.Context, jid types.JID, state types.ChatPresence, media types.ChatPresenceMedia) error { ownID := cli.getOwnID() if ownID.IsEmpty() { return ErrNotLoggedIn @@ -127,7 +138,7 @@ func (cli *Client) SendChatPresence(jid types.JID, state types.ChatPresence, med "media": string(media), } } - return cli.sendNode(waBinary.Node{ + return cli.sendNode(ctx, waBinary.Node{ Tag: "chatstate", Attrs: waBinary.Attrs{ "from": ownID, diff --git a/vendor/go.mau.fi/whatsmeow/privacysettings.go b/vendor/go.mau.fi/whatsmeow/privacysettings.go index 6c2425a8db..554f1feeb0 100644 --- a/vendor/go.mau.fi/whatsmeow/privacysettings.go +++ b/vendor/go.mau.fi/whatsmeow/privacysettings.go @@ -7,6 +7,7 @@ package whatsmeow import ( + "context" "strconv" "time" @@ -16,11 +17,13 @@ import ( ) // TryFetchPrivacySettings will fetch the user's privacy settings, either from the in-memory cache or from the server. -func (cli *Client) TryFetchPrivacySettings(ignoreCache bool) (*types.PrivacySettings, error) { - if val := cli.privacySettingsCache.Load(); val != nil && !ignoreCache { +func (cli *Client) TryFetchPrivacySettings(ctx context.Context, ignoreCache bool) (*types.PrivacySettings, error) { + if cli == nil { + return nil, ErrClientIsNil + } else if val := cli.privacySettingsCache.Load(); val != nil && !ignoreCache { return val.(*types.PrivacySettings), nil } - resp, err := cli.sendIQ(infoQuery{ + resp, err := cli.sendIQ(ctx, infoQuery{ Namespace: "privacy", Type: iqGet, To: types.ServerJID, @@ -41,11 +44,11 @@ func (cli *Client) TryFetchPrivacySettings(ignoreCache bool) (*types.PrivacySett // GetPrivacySettings will get the user's privacy settings. If an error occurs while fetching them, the error will be // logged, but the method will just return an empty struct. -func (cli *Client) GetPrivacySettings() (settings types.PrivacySettings) { - if cli.MessengerConfig != nil { +func (cli *Client) GetPrivacySettings(ctx context.Context) (settings types.PrivacySettings) { + if cli == nil || cli.MessengerConfig != nil { return } - settingsPtr, err := cli.TryFetchPrivacySettings(false) + settingsPtr, err := cli.TryFetchPrivacySettings(ctx, false) if err != nil { cli.Log.Errorf("Failed to fetch privacy settings: %v", err) } else { @@ -57,12 +60,12 @@ func (cli *Client) GetPrivacySettings() (settings types.PrivacySettings) { // SetPrivacySetting will set the given privacy setting to the given value. // The privacy settings will be fetched from the server after the change and the new settings will be returned. // If an error occurs while fetching the new settings, will return an empty struct. -func (cli *Client) SetPrivacySetting(name types.PrivacySettingType, value types.PrivacySetting) (settings types.PrivacySettings, err error) { - settingsPtr, err := cli.TryFetchPrivacySettings(false) +func (cli *Client) SetPrivacySetting(ctx context.Context, name types.PrivacySettingType, value types.PrivacySetting) (settings types.PrivacySettings, err error) { + settingsPtr, err := cli.TryFetchPrivacySettings(ctx, false) if err != nil { return settings, err } - _, err = cli.sendIQ(infoQuery{ + _, err = cli.sendIQ(ctx, infoQuery{ Namespace: "privacy", Type: iqSet, To: types.ServerJID, @@ -102,8 +105,8 @@ func (cli *Client) SetPrivacySetting(name types.PrivacySettingType, value types. } // SetDefaultDisappearingTimer will set the default disappearing message timer. -func (cli *Client) SetDefaultDisappearingTimer(timer time.Duration) (err error) { - _, err = cli.sendIQ(infoQuery{ +func (cli *Client) SetDefaultDisappearingTimer(ctx context.Context, timer time.Duration) (err error) { + _, err = cli.sendIQ(ctx, infoQuery{ Namespace: "disappearing_mode", Type: iqSet, To: types.ServerJID, @@ -148,22 +151,28 @@ func (cli *Client) parsePrivacySettings(privacyNode *waBinary.Node, settings *ty case types.PrivacySettingTypeCallAdd: settings.CallAdd = value evt.CallAddChanged = true + case types.PrivacySettingTypeMessages: + settings.Messages = value + evt.MessagesChanged = true + case types.PrivacySettingTypeDefense: + settings.Defense = value + evt.DefenseChanged = true + case types.PrivacySettingTypeStickers: + settings.Stickers = value + evt.StickersChanged = true } } return &evt } -func (cli *Client) handlePrivacySettingsNotification(privacyNode *waBinary.Node) { +func (cli *Client) handlePrivacySettingsNotification(ctx context.Context, privacyNode *waBinary.Node) { cli.Log.Debugf("Parsing privacy settings change notification") - settings, err := cli.TryFetchPrivacySettings(false) + settings, err := cli.TryFetchPrivacySettings(ctx, false) if err != nil { cli.Log.Errorf("Failed to fetch privacy settings when handling change: %v", err) return } evt := cli.parsePrivacySettings(privacyNode, settings) - // The data isn't be reliable if the fetch failed, so only cache if it didn't fail - if err == nil { - cli.privacySettingsCache.Store(settings) - } + cli.privacySettingsCache.Store(settings) cli.dispatchEvent(evt) } diff --git a/vendor/go.mau.fi/whatsmeow/proto/extra.go b/vendor/go.mau.fi/whatsmeow/proto/extra.go index 444d93e7de..81c706f9e5 100644 --- a/vendor/go.mau.fi/whatsmeow/proto/extra.go +++ b/vendor/go.mau.fi/whatsmeow/proto/extra.go @@ -3,6 +3,9 @@ package armadillo import ( "google.golang.org/protobuf/proto" + "go.mau.fi/whatsmeow/proto/instamadilloAddMessage" + "go.mau.fi/whatsmeow/proto/instamadilloDeleteMessage" + "go.mau.fi/whatsmeow/proto/instamadilloSupplementMessage" "go.mau.fi/whatsmeow/proto/waArmadilloApplication" "go.mau.fi/whatsmeow/proto/waCommon" "go.mau.fi/whatsmeow/proto/waConsumerApplication" @@ -29,6 +32,10 @@ var ( _ MessageApplicationSub = (*waMultiDevice.MultiDevice)(nil) // 5 _ MessageApplicationSub = (*Unsupported_Voip)(nil) // 6 _ MessageApplicationSub = (*waArmadilloApplication.Armadillo)(nil) // 7 + + _ MessageApplicationSub = (*instamadilloAddMessage.AddMessagePayload)(nil) + _ MessageApplicationSub = (*instamadilloSupplementMessage.SupplementMessagePayload)(nil) + _ MessageApplicationSub = (*instamadilloDeleteMessage.DeleteMessagePayload)(nil) ) func (*Unsupported_BusinessApplication) IsMessageApplicationSub() {} diff --git a/vendor/go.mau.fi/whatsmeow/proto/instamadilloAddMessage/InstamadilloAddMessage.pb.go b/vendor/go.mau.fi/whatsmeow/proto/instamadilloAddMessage/InstamadilloAddMessage.pb.go new file mode 100644 index 0000000000..43c4036248 --- /dev/null +++ b/vendor/go.mau.fi/whatsmeow/proto/instamadilloAddMessage/InstamadilloAddMessage.pb.go @@ -0,0 +1,983 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.36.10 +// protoc v3.21.12 +// source: instamadilloAddMessage/InstamadilloAddMessage.proto + +package instamadilloAddMessage + +import ( + reflect "reflect" + sync "sync" + unsafe "unsafe" + + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + + instamadilloCoreTypeActionLog "go.mau.fi/whatsmeow/proto/instamadilloCoreTypeActionLog" + instamadilloCoreTypeAdminMessage "go.mau.fi/whatsmeow/proto/instamadilloCoreTypeAdminMessage" + instamadilloCoreTypeCollection "go.mau.fi/whatsmeow/proto/instamadilloCoreTypeCollection" + instamadilloCoreTypeLink "go.mau.fi/whatsmeow/proto/instamadilloCoreTypeLink" + instamadilloCoreTypeMedia "go.mau.fi/whatsmeow/proto/instamadilloCoreTypeMedia" + instamadilloCoreTypeText "go.mau.fi/whatsmeow/proto/instamadilloCoreTypeText" + instamadilloXmaContentRef "go.mau.fi/whatsmeow/proto/instamadilloXmaContentRef" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type Placeholder_Type int32 + +const ( + Placeholder_PLACEHOLDER_TYPE_NONE Placeholder_Type = 0 + Placeholder_PLACEHOLDER_TYPE_DECRYPTION_FAILURE Placeholder_Type = 1 + Placeholder_PLACEHOLDER_TYPE_NOT_SUPPORTED_NEED_UPDATE Placeholder_Type = 2 + Placeholder_PLACEHOLDER_TYPE_DEVICE_UNAVAILABLE Placeholder_Type = 3 + Placeholder_PLACEHOLDER_TYPE_NOT_SUPPORTED_NOT_RECOVERABLE Placeholder_Type = 4 +) + +// Enum value maps for Placeholder_Type. +var ( + Placeholder_Type_name = map[int32]string{ + 0: "PLACEHOLDER_TYPE_NONE", + 1: "PLACEHOLDER_TYPE_DECRYPTION_FAILURE", + 2: "PLACEHOLDER_TYPE_NOT_SUPPORTED_NEED_UPDATE", + 3: "PLACEHOLDER_TYPE_DEVICE_UNAVAILABLE", + 4: "PLACEHOLDER_TYPE_NOT_SUPPORTED_NOT_RECOVERABLE", + } + Placeholder_Type_value = map[string]int32{ + "PLACEHOLDER_TYPE_NONE": 0, + "PLACEHOLDER_TYPE_DECRYPTION_FAILURE": 1, + "PLACEHOLDER_TYPE_NOT_SUPPORTED_NEED_UPDATE": 2, + "PLACEHOLDER_TYPE_DEVICE_UNAVAILABLE": 3, + "PLACEHOLDER_TYPE_NOT_SUPPORTED_NOT_RECOVERABLE": 4, + } +) + +func (x Placeholder_Type) Enum() *Placeholder_Type { + p := new(Placeholder_Type) + *p = x + return p +} + +func (x Placeholder_Type) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (Placeholder_Type) Descriptor() protoreflect.EnumDescriptor { + return file_instamadilloAddMessage_InstamadilloAddMessage_proto_enumTypes[0].Descriptor() +} + +func (Placeholder_Type) Type() protoreflect.EnumType { + return &file_instamadilloAddMessage_InstamadilloAddMessage_proto_enumTypes[0] +} + +func (x Placeholder_Type) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *Placeholder_Type) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = Placeholder_Type(num) + return nil +} + +// Deprecated: Use Placeholder_Type.Descriptor instead. +func (Placeholder_Type) EnumDescriptor() ([]byte, []int) { + return file_instamadilloAddMessage_InstamadilloAddMessage_proto_rawDescGZIP(), []int{10, 0} +} + +type AddMessagePayload struct { + state protoimpl.MessageState `protogen:"open.v1"` + Content *AddMessageContent `protobuf:"bytes,1,opt,name=content" json:"content,omitempty"` + Metadata *AddMessageMetadata `protobuf:"bytes,2,opt,name=metadata" json:"metadata,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *AddMessagePayload) Reset() { + *x = AddMessagePayload{} + mi := &file_instamadilloAddMessage_InstamadilloAddMessage_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *AddMessagePayload) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AddMessagePayload) ProtoMessage() {} + +func (x *AddMessagePayload) ProtoReflect() protoreflect.Message { + mi := &file_instamadilloAddMessage_InstamadilloAddMessage_proto_msgTypes[0] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AddMessagePayload.ProtoReflect.Descriptor instead. +func (*AddMessagePayload) Descriptor() ([]byte, []int) { + return file_instamadilloAddMessage_InstamadilloAddMessage_proto_rawDescGZIP(), []int{0} +} + +func (x *AddMessagePayload) GetContent() *AddMessageContent { + if x != nil { + return x.Content + } + return nil +} + +func (x *AddMessagePayload) GetMetadata() *AddMessageMetadata { + if x != nil { + return x.Metadata + } + return nil +} + +type AddMessageContent struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Types that are valid to be assigned to AddMessageContent: + // + // *AddMessageContent_Text + // *AddMessageContent_Like + // *AddMessageContent_Link + // *AddMessageContent_ReceiverFetchXma + // *AddMessageContent_Media + // *AddMessageContent_Placeholder + // *AddMessageContent_Collection + // *AddMessageContent_AdminMessage + // *AddMessageContent_ActionLog + AddMessageContent isAddMessageContent_AddMessageContent `protobuf_oneof:"addMessageContent"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *AddMessageContent) Reset() { + *x = AddMessageContent{} + mi := &file_instamadilloAddMessage_InstamadilloAddMessage_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *AddMessageContent) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AddMessageContent) ProtoMessage() {} + +func (x *AddMessageContent) ProtoReflect() protoreflect.Message { + mi := &file_instamadilloAddMessage_InstamadilloAddMessage_proto_msgTypes[1] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AddMessageContent.ProtoReflect.Descriptor instead. +func (*AddMessageContent) Descriptor() ([]byte, []int) { + return file_instamadilloAddMessage_InstamadilloAddMessage_proto_rawDescGZIP(), []int{1} +} + +func (x *AddMessageContent) GetAddMessageContent() isAddMessageContent_AddMessageContent { + if x != nil { + return x.AddMessageContent + } + return nil +} + +func (x *AddMessageContent) GetText() *instamadilloCoreTypeText.Text { + if x != nil { + if x, ok := x.AddMessageContent.(*AddMessageContent_Text); ok { + return x.Text + } + } + return nil +} + +func (x *AddMessageContent) GetLike() *Like { + if x != nil { + if x, ok := x.AddMessageContent.(*AddMessageContent_Like); ok { + return x.Like + } + } + return nil +} + +func (x *AddMessageContent) GetLink() *instamadilloCoreTypeLink.Link { + if x != nil { + if x, ok := x.AddMessageContent.(*AddMessageContent_Link); ok { + return x.Link + } + } + return nil +} + +func (x *AddMessageContent) GetReceiverFetchXma() *ReceiverFetchXma { + if x != nil { + if x, ok := x.AddMessageContent.(*AddMessageContent_ReceiverFetchXma); ok { + return x.ReceiverFetchXma + } + } + return nil +} + +func (x *AddMessageContent) GetMedia() *instamadilloCoreTypeMedia.Media { + if x != nil { + if x, ok := x.AddMessageContent.(*AddMessageContent_Media); ok { + return x.Media + } + } + return nil +} + +func (x *AddMessageContent) GetPlaceholder() *Placeholder { + if x != nil { + if x, ok := x.AddMessageContent.(*AddMessageContent_Placeholder); ok { + return x.Placeholder + } + } + return nil +} + +func (x *AddMessageContent) GetCollection() *instamadilloCoreTypeCollection.Collection { + if x != nil { + if x, ok := x.AddMessageContent.(*AddMessageContent_Collection); ok { + return x.Collection + } + } + return nil +} + +func (x *AddMessageContent) GetAdminMessage() *instamadilloCoreTypeAdminMessage.AdminMessage { + if x != nil { + if x, ok := x.AddMessageContent.(*AddMessageContent_AdminMessage); ok { + return x.AdminMessage + } + } + return nil +} + +func (x *AddMessageContent) GetActionLog() *instamadilloCoreTypeActionLog.ActionLog { + if x != nil { + if x, ok := x.AddMessageContent.(*AddMessageContent_ActionLog); ok { + return x.ActionLog + } + } + return nil +} + +type isAddMessageContent_AddMessageContent interface { + isAddMessageContent_AddMessageContent() +} + +type AddMessageContent_Text struct { + Text *instamadilloCoreTypeText.Text `protobuf:"bytes,1,opt,name=text,oneof"` +} + +type AddMessageContent_Like struct { + Like *Like `protobuf:"bytes,2,opt,name=like,oneof"` +} + +type AddMessageContent_Link struct { + Link *instamadilloCoreTypeLink.Link `protobuf:"bytes,3,opt,name=link,oneof"` +} + +type AddMessageContent_ReceiverFetchXma struct { + ReceiverFetchXma *ReceiverFetchXma `protobuf:"bytes,4,opt,name=receiverFetchXma,oneof"` +} + +type AddMessageContent_Media struct { + Media *instamadilloCoreTypeMedia.Media `protobuf:"bytes,5,opt,name=media,oneof"` +} + +type AddMessageContent_Placeholder struct { + Placeholder *Placeholder `protobuf:"bytes,6,opt,name=placeholder,oneof"` +} + +type AddMessageContent_Collection struct { + Collection *instamadilloCoreTypeCollection.Collection `protobuf:"bytes,7,opt,name=collection,oneof"` +} + +type AddMessageContent_AdminMessage struct { + AdminMessage *instamadilloCoreTypeAdminMessage.AdminMessage `protobuf:"bytes,8,opt,name=adminMessage,oneof"` +} + +type AddMessageContent_ActionLog struct { + ActionLog *instamadilloCoreTypeActionLog.ActionLog `protobuf:"bytes,9,opt,name=actionLog,oneof"` +} + +func (*AddMessageContent_Text) isAddMessageContent_AddMessageContent() {} + +func (*AddMessageContent_Like) isAddMessageContent_AddMessageContent() {} + +func (*AddMessageContent_Link) isAddMessageContent_AddMessageContent() {} + +func (*AddMessageContent_ReceiverFetchXma) isAddMessageContent_AddMessageContent() {} + +func (*AddMessageContent_Media) isAddMessageContent_AddMessageContent() {} + +func (*AddMessageContent_Placeholder) isAddMessageContent_AddMessageContent() {} + +func (*AddMessageContent_Collection) isAddMessageContent_AddMessageContent() {} + +func (*AddMessageContent_AdminMessage) isAddMessageContent_AddMessageContent() {} + +func (*AddMessageContent_ActionLog) isAddMessageContent_AddMessageContent() {} + +type AddMessageMetadata struct { + state protoimpl.MessageState `protogen:"open.v1"` + SendSilently *bool `protobuf:"varint,1,opt,name=sendSilently" json:"sendSilently,omitempty"` + PrivateReplyInfo *PrivateReplyInfo `protobuf:"bytes,2,opt,name=privateReplyInfo" json:"privateReplyInfo,omitempty"` + RepliedToMessage *RepliedToMessage `protobuf:"bytes,3,opt,name=repliedToMessage" json:"repliedToMessage,omitempty"` + ForwardingParams *ForwardingParams `protobuf:"bytes,4,opt,name=forwardingParams" json:"forwardingParams,omitempty"` + EphemeralityParams *EphemeralityParams `protobuf:"bytes,5,opt,name=ephemeralityParams" json:"ephemeralityParams,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *AddMessageMetadata) Reset() { + *x = AddMessageMetadata{} + mi := &file_instamadilloAddMessage_InstamadilloAddMessage_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *AddMessageMetadata) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AddMessageMetadata) ProtoMessage() {} + +func (x *AddMessageMetadata) ProtoReflect() protoreflect.Message { + mi := &file_instamadilloAddMessage_InstamadilloAddMessage_proto_msgTypes[2] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AddMessageMetadata.ProtoReflect.Descriptor instead. +func (*AddMessageMetadata) Descriptor() ([]byte, []int) { + return file_instamadilloAddMessage_InstamadilloAddMessage_proto_rawDescGZIP(), []int{2} +} + +func (x *AddMessageMetadata) GetSendSilently() bool { + if x != nil && x.SendSilently != nil { + return *x.SendSilently + } + return false +} + +func (x *AddMessageMetadata) GetPrivateReplyInfo() *PrivateReplyInfo { + if x != nil { + return x.PrivateReplyInfo + } + return nil +} + +func (x *AddMessageMetadata) GetRepliedToMessage() *RepliedToMessage { + if x != nil { + return x.RepliedToMessage + } + return nil +} + +func (x *AddMessageMetadata) GetForwardingParams() *ForwardingParams { + if x != nil { + return x.ForwardingParams + } + return nil +} + +func (x *AddMessageMetadata) GetEphemeralityParams() *EphemeralityParams { + if x != nil { + return x.EphemeralityParams + } + return nil +} + +type RepliedToMessage struct { + state protoimpl.MessageState `protogen:"open.v1"` + RepliedToMessageOtid *string `protobuf:"bytes,1,opt,name=repliedToMessageOtid" json:"repliedToMessageOtid,omitempty"` + RepliedToMessageWaServerTimeSec *string `protobuf:"bytes,2,opt,name=repliedToMessageWaServerTimeSec" json:"repliedToMessageWaServerTimeSec,omitempty"` + RepliedToMessageCollectionItemID *string `protobuf:"bytes,3,opt,name=repliedToMessageCollectionItemID" json:"repliedToMessageCollectionItemID,omitempty"` + OmMicroSecTS *OpenMessageMicroSecondTimestamp `protobuf:"bytes,4,opt,name=omMicroSecTS" json:"omMicroSecTS,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *RepliedToMessage) Reset() { + *x = RepliedToMessage{} + mi := &file_instamadilloAddMessage_InstamadilloAddMessage_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *RepliedToMessage) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RepliedToMessage) ProtoMessage() {} + +func (x *RepliedToMessage) ProtoReflect() protoreflect.Message { + mi := &file_instamadilloAddMessage_InstamadilloAddMessage_proto_msgTypes[3] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RepliedToMessage.ProtoReflect.Descriptor instead. +func (*RepliedToMessage) Descriptor() ([]byte, []int) { + return file_instamadilloAddMessage_InstamadilloAddMessage_proto_rawDescGZIP(), []int{3} +} + +func (x *RepliedToMessage) GetRepliedToMessageOtid() string { + if x != nil && x.RepliedToMessageOtid != nil { + return *x.RepliedToMessageOtid + } + return "" +} + +func (x *RepliedToMessage) GetRepliedToMessageWaServerTimeSec() string { + if x != nil && x.RepliedToMessageWaServerTimeSec != nil { + return *x.RepliedToMessageWaServerTimeSec + } + return "" +} + +func (x *RepliedToMessage) GetRepliedToMessageCollectionItemID() string { + if x != nil && x.RepliedToMessageCollectionItemID != nil { + return *x.RepliedToMessageCollectionItemID + } + return "" +} + +func (x *RepliedToMessage) GetOmMicroSecTS() *OpenMessageMicroSecondTimestamp { + if x != nil { + return x.OmMicroSecTS + } + return nil +} + +type OpenMessageMicroSecondTimestamp struct { + state protoimpl.MessageState `protogen:"open.v1"` + TimestampMS *int64 `protobuf:"varint,1,opt,name=timestampMS" json:"timestampMS,omitempty"` + MicroSecondsBits *int32 `protobuf:"varint,2,opt,name=microSecondsBits" json:"microSecondsBits,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *OpenMessageMicroSecondTimestamp) Reset() { + *x = OpenMessageMicroSecondTimestamp{} + mi := &file_instamadilloAddMessage_InstamadilloAddMessage_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *OpenMessageMicroSecondTimestamp) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*OpenMessageMicroSecondTimestamp) ProtoMessage() {} + +func (x *OpenMessageMicroSecondTimestamp) ProtoReflect() protoreflect.Message { + mi := &file_instamadilloAddMessage_InstamadilloAddMessage_proto_msgTypes[4] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use OpenMessageMicroSecondTimestamp.ProtoReflect.Descriptor instead. +func (*OpenMessageMicroSecondTimestamp) Descriptor() ([]byte, []int) { + return file_instamadilloAddMessage_InstamadilloAddMessage_proto_rawDescGZIP(), []int{4} +} + +func (x *OpenMessageMicroSecondTimestamp) GetTimestampMS() int64 { + if x != nil && x.TimestampMS != nil { + return *x.TimestampMS + } + return 0 +} + +func (x *OpenMessageMicroSecondTimestamp) GetMicroSecondsBits() int32 { + if x != nil && x.MicroSecondsBits != nil { + return *x.MicroSecondsBits + } + return 0 +} + +type PrivateReplyInfo struct { + state protoimpl.MessageState `protogen:"open.v1"` + CommentID *string `protobuf:"bytes,1,opt,name=commentID" json:"commentID,omitempty"` + PostLink *string `protobuf:"bytes,2,opt,name=postLink" json:"postLink,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *PrivateReplyInfo) Reset() { + *x = PrivateReplyInfo{} + mi := &file_instamadilloAddMessage_InstamadilloAddMessage_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *PrivateReplyInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PrivateReplyInfo) ProtoMessage() {} + +func (x *PrivateReplyInfo) ProtoReflect() protoreflect.Message { + mi := &file_instamadilloAddMessage_InstamadilloAddMessage_proto_msgTypes[5] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PrivateReplyInfo.ProtoReflect.Descriptor instead. +func (*PrivateReplyInfo) Descriptor() ([]byte, []int) { + return file_instamadilloAddMessage_InstamadilloAddMessage_proto_rawDescGZIP(), []int{5} +} + +func (x *PrivateReplyInfo) GetCommentID() string { + if x != nil && x.CommentID != nil { + return *x.CommentID + } + return "" +} + +func (x *PrivateReplyInfo) GetPostLink() string { + if x != nil && x.PostLink != nil { + return *x.PostLink + } + return "" +} + +type ForwardingParams struct { + state protoimpl.MessageState `protogen:"open.v1"` + ForwardedThreadID *string `protobuf:"bytes,1,opt,name=forwardedThreadID" json:"forwardedThreadID,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ForwardingParams) Reset() { + *x = ForwardingParams{} + mi := &file_instamadilloAddMessage_InstamadilloAddMessage_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ForwardingParams) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ForwardingParams) ProtoMessage() {} + +func (x *ForwardingParams) ProtoReflect() protoreflect.Message { + mi := &file_instamadilloAddMessage_InstamadilloAddMessage_proto_msgTypes[6] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ForwardingParams.ProtoReflect.Descriptor instead. +func (*ForwardingParams) Descriptor() ([]byte, []int) { + return file_instamadilloAddMessage_InstamadilloAddMessage_proto_rawDescGZIP(), []int{6} +} + +func (x *ForwardingParams) GetForwardedThreadID() string { + if x != nil && x.ForwardedThreadID != nil { + return *x.ForwardedThreadID + } + return "" +} + +type EphemeralityParams struct { + state protoimpl.MessageState `protogen:"open.v1"` + EphemeralDurationSec *int64 `protobuf:"varint,1,opt,name=ephemeralDurationSec" json:"ephemeralDurationSec,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *EphemeralityParams) Reset() { + *x = EphemeralityParams{} + mi := &file_instamadilloAddMessage_InstamadilloAddMessage_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *EphemeralityParams) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EphemeralityParams) ProtoMessage() {} + +func (x *EphemeralityParams) ProtoReflect() protoreflect.Message { + mi := &file_instamadilloAddMessage_InstamadilloAddMessage_proto_msgTypes[7] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use EphemeralityParams.ProtoReflect.Descriptor instead. +func (*EphemeralityParams) Descriptor() ([]byte, []int) { + return file_instamadilloAddMessage_InstamadilloAddMessage_proto_rawDescGZIP(), []int{7} +} + +func (x *EphemeralityParams) GetEphemeralDurationSec() int64 { + if x != nil && x.EphemeralDurationSec != nil { + return *x.EphemeralDurationSec + } + return 0 +} + +type Like struct { + state protoimpl.MessageState `protogen:"open.v1"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *Like) Reset() { + *x = Like{} + mi := &file_instamadilloAddMessage_InstamadilloAddMessage_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *Like) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Like) ProtoMessage() {} + +func (x *Like) ProtoReflect() protoreflect.Message { + mi := &file_instamadilloAddMessage_InstamadilloAddMessage_proto_msgTypes[8] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Like.ProtoReflect.Descriptor instead. +func (*Like) Descriptor() ([]byte, []int) { + return file_instamadilloAddMessage_InstamadilloAddMessage_proto_rawDescGZIP(), []int{8} +} + +type ReceiverFetchXma struct { + state protoimpl.MessageState `protogen:"open.v1"` + ContentRef *string `protobuf:"bytes,1,opt,name=contentRef" json:"contentRef,omitempty"` + Text *string `protobuf:"bytes,2,opt,name=text" json:"text,omitempty"` + Media *instamadilloCoreTypeMedia.Media `protobuf:"bytes,3,opt,name=media" json:"media,omitempty"` + XmaContentRef *instamadilloXmaContentRef.XmaContentRef `protobuf:"bytes,4,opt,name=xmaContentRef" json:"xmaContentRef,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ReceiverFetchXma) Reset() { + *x = ReceiverFetchXma{} + mi := &file_instamadilloAddMessage_InstamadilloAddMessage_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ReceiverFetchXma) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ReceiverFetchXma) ProtoMessage() {} + +func (x *ReceiverFetchXma) ProtoReflect() protoreflect.Message { + mi := &file_instamadilloAddMessage_InstamadilloAddMessage_proto_msgTypes[9] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ReceiverFetchXma.ProtoReflect.Descriptor instead. +func (*ReceiverFetchXma) Descriptor() ([]byte, []int) { + return file_instamadilloAddMessage_InstamadilloAddMessage_proto_rawDescGZIP(), []int{9} +} + +func (x *ReceiverFetchXma) GetContentRef() string { + if x != nil && x.ContentRef != nil { + return *x.ContentRef + } + return "" +} + +func (x *ReceiverFetchXma) GetText() string { + if x != nil && x.Text != nil { + return *x.Text + } + return "" +} + +func (x *ReceiverFetchXma) GetMedia() *instamadilloCoreTypeMedia.Media { + if x != nil { + return x.Media + } + return nil +} + +func (x *ReceiverFetchXma) GetXmaContentRef() *instamadilloXmaContentRef.XmaContentRef { + if x != nil { + return x.XmaContentRef + } + return nil +} + +type Placeholder struct { + state protoimpl.MessageState `protogen:"open.v1"` + PlaceholderType *Placeholder_Type `protobuf:"varint,1,opt,name=placeholderType,enum=InstamadilloAddMessage.Placeholder_Type" json:"placeholderType,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *Placeholder) Reset() { + *x = Placeholder{} + mi := &file_instamadilloAddMessage_InstamadilloAddMessage_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *Placeholder) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Placeholder) ProtoMessage() {} + +func (x *Placeholder) ProtoReflect() protoreflect.Message { + mi := &file_instamadilloAddMessage_InstamadilloAddMessage_proto_msgTypes[10] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Placeholder.ProtoReflect.Descriptor instead. +func (*Placeholder) Descriptor() ([]byte, []int) { + return file_instamadilloAddMessage_InstamadilloAddMessage_proto_rawDescGZIP(), []int{10} +} + +func (x *Placeholder) GetPlaceholderType() Placeholder_Type { + if x != nil && x.PlaceholderType != nil { + return *x.PlaceholderType + } + return Placeholder_PLACEHOLDER_TYPE_NONE +} + +var File_instamadilloAddMessage_InstamadilloAddMessage_proto protoreflect.FileDescriptor + +const file_instamadilloAddMessage_InstamadilloAddMessage_proto_rawDesc = "" + + "\n" + + "3instamadilloAddMessage/InstamadilloAddMessage.proto\x12\x16InstamadilloAddMessage\x1aAinstamadilloCoreTypeActionLog/InstamadilloCoreTypeActionLog.proto\x1aGinstamadilloCoreTypeAdminMessage/InstamadilloCoreTypeAdminMessage.proto\x1aCinstamadilloCoreTypeCollection/InstamadilloCoreTypeCollection.proto\x1a7instamadilloCoreTypeLink/InstamadilloCoreTypeLink.proto\x1a9instamadilloCoreTypeMedia/InstamadilloCoreTypeMedia.proto\x1a7instamadilloCoreTypeText/InstamadilloCoreTypeText.proto\x1a9instamadilloXmaContentRef/InstamadilloXmaContentRef.proto\"\xa0\x01\n" + + "\x11AddMessagePayload\x12C\n" + + "\acontent\x18\x01 \x01(\v2).InstamadilloAddMessage.AddMessageContentR\acontent\x12F\n" + + "\bmetadata\x18\x02 \x01(\v2*.InstamadilloAddMessage.AddMessageMetadataR\bmetadata\"\x91\x05\n" + + "\x11AddMessageContent\x124\n" + + "\x04text\x18\x01 \x01(\v2\x1e.InstamadilloCoreTypeText.TextH\x00R\x04text\x122\n" + + "\x04like\x18\x02 \x01(\v2\x1c.InstamadilloAddMessage.LikeH\x00R\x04like\x124\n" + + "\x04link\x18\x03 \x01(\v2\x1e.InstamadilloCoreTypeLink.LinkH\x00R\x04link\x12V\n" + + "\x10receiverFetchXma\x18\x04 \x01(\v2(.InstamadilloAddMessage.ReceiverFetchXmaH\x00R\x10receiverFetchXma\x128\n" + + "\x05media\x18\x05 \x01(\v2 .InstamadilloCoreTypeMedia.MediaH\x00R\x05media\x12G\n" + + "\vplaceholder\x18\x06 \x01(\v2#.InstamadilloAddMessage.PlaceholderH\x00R\vplaceholder\x12L\n" + + "\n" + + "collection\x18\a \x01(\v2*.InstamadilloCoreTypeCollection.CollectionH\x00R\n" + + "collection\x12T\n" + + "\fadminMessage\x18\b \x01(\v2..InstamadilloCoreTypeAdminMessage.AdminMessageH\x00R\fadminMessage\x12H\n" + + "\tactionLog\x18\t \x01(\v2(.InstamadilloCoreTypeActionLog.ActionLogH\x00R\tactionLogB\x13\n" + + "\x11addMessageContent\"\x96\x03\n" + + "\x12AddMessageMetadata\x12\"\n" + + "\fsendSilently\x18\x01 \x01(\bR\fsendSilently\x12T\n" + + "\x10privateReplyInfo\x18\x02 \x01(\v2(.InstamadilloAddMessage.PrivateReplyInfoR\x10privateReplyInfo\x12T\n" + + "\x10repliedToMessage\x18\x03 \x01(\v2(.InstamadilloAddMessage.RepliedToMessageR\x10repliedToMessage\x12T\n" + + "\x10forwardingParams\x18\x04 \x01(\v2(.InstamadilloAddMessage.ForwardingParamsR\x10forwardingParams\x12Z\n" + + "\x12ephemeralityParams\x18\x05 \x01(\v2*.InstamadilloAddMessage.EphemeralityParamsR\x12ephemeralityParams\"\xb9\x02\n" + + "\x10RepliedToMessage\x122\n" + + "\x14repliedToMessageOtid\x18\x01 \x01(\tR\x14repliedToMessageOtid\x12H\n" + + "\x1frepliedToMessageWaServerTimeSec\x18\x02 \x01(\tR\x1frepliedToMessageWaServerTimeSec\x12J\n" + + " repliedToMessageCollectionItemID\x18\x03 \x01(\tR repliedToMessageCollectionItemID\x12[\n" + + "\fomMicroSecTS\x18\x04 \x01(\v27.InstamadilloAddMessage.OpenMessageMicroSecondTimestampR\fomMicroSecTS\"o\n" + + "\x1fOpenMessageMicroSecondTimestamp\x12 \n" + + "\vtimestampMS\x18\x01 \x01(\x03R\vtimestampMS\x12*\n" + + "\x10microSecondsBits\x18\x02 \x01(\x05R\x10microSecondsBits\"L\n" + + "\x10PrivateReplyInfo\x12\x1c\n" + + "\tcommentID\x18\x01 \x01(\tR\tcommentID\x12\x1a\n" + + "\bpostLink\x18\x02 \x01(\tR\bpostLink\"@\n" + + "\x10ForwardingParams\x12,\n" + + "\x11forwardedThreadID\x18\x01 \x01(\tR\x11forwardedThreadID\"H\n" + + "\x12EphemeralityParams\x122\n" + + "\x14ephemeralDurationSec\x18\x01 \x01(\x03R\x14ephemeralDurationSec\"\x06\n" + + "\x04Like\"\xce\x01\n" + + "\x10ReceiverFetchXma\x12\x1e\n" + + "\n" + + "contentRef\x18\x01 \x01(\tR\n" + + "contentRef\x12\x12\n" + + "\x04text\x18\x02 \x01(\tR\x04text\x126\n" + + "\x05media\x18\x03 \x01(\v2 .InstamadilloCoreTypeMedia.MediaR\x05media\x12N\n" + + "\rxmaContentRef\x18\x04 \x01(\v2(.InstamadilloXmaContentRef.XmaContentRefR\rxmaContentRef\"\xbb\x02\n" + + "\vPlaceholder\x12R\n" + + "\x0fplaceholderType\x18\x01 \x01(\x0e2(.InstamadilloAddMessage.Placeholder.TypeR\x0fplaceholderType\"\xd7\x01\n" + + "\x04Type\x12\x19\n" + + "\x15PLACEHOLDER_TYPE_NONE\x10\x00\x12'\n" + + "#PLACEHOLDER_TYPE_DECRYPTION_FAILURE\x10\x01\x12.\n" + + "*PLACEHOLDER_TYPE_NOT_SUPPORTED_NEED_UPDATE\x10\x02\x12'\n" + + "#PLACEHOLDER_TYPE_DEVICE_UNAVAILABLE\x10\x03\x122\n" + + ".PLACEHOLDER_TYPE_NOT_SUPPORTED_NOT_RECOVERABLE\x10\x04B2Z0go.mau.fi/whatsmeow/proto/instamadilloAddMessage" + +var ( + file_instamadilloAddMessage_InstamadilloAddMessage_proto_rawDescOnce sync.Once + file_instamadilloAddMessage_InstamadilloAddMessage_proto_rawDescData []byte +) + +func file_instamadilloAddMessage_InstamadilloAddMessage_proto_rawDescGZIP() []byte { + file_instamadilloAddMessage_InstamadilloAddMessage_proto_rawDescOnce.Do(func() { + file_instamadilloAddMessage_InstamadilloAddMessage_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_instamadilloAddMessage_InstamadilloAddMessage_proto_rawDesc), len(file_instamadilloAddMessage_InstamadilloAddMessage_proto_rawDesc))) + }) + return file_instamadilloAddMessage_InstamadilloAddMessage_proto_rawDescData +} + +var file_instamadilloAddMessage_InstamadilloAddMessage_proto_enumTypes = make([]protoimpl.EnumInfo, 1) +var file_instamadilloAddMessage_InstamadilloAddMessage_proto_msgTypes = make([]protoimpl.MessageInfo, 11) +var file_instamadilloAddMessage_InstamadilloAddMessage_proto_goTypes = []any{ + (Placeholder_Type)(0), // 0: InstamadilloAddMessage.Placeholder.Type + (*AddMessagePayload)(nil), // 1: InstamadilloAddMessage.AddMessagePayload + (*AddMessageContent)(nil), // 2: InstamadilloAddMessage.AddMessageContent + (*AddMessageMetadata)(nil), // 3: InstamadilloAddMessage.AddMessageMetadata + (*RepliedToMessage)(nil), // 4: InstamadilloAddMessage.RepliedToMessage + (*OpenMessageMicroSecondTimestamp)(nil), // 5: InstamadilloAddMessage.OpenMessageMicroSecondTimestamp + (*PrivateReplyInfo)(nil), // 6: InstamadilloAddMessage.PrivateReplyInfo + (*ForwardingParams)(nil), // 7: InstamadilloAddMessage.ForwardingParams + (*EphemeralityParams)(nil), // 8: InstamadilloAddMessage.EphemeralityParams + (*Like)(nil), // 9: InstamadilloAddMessage.Like + (*ReceiverFetchXma)(nil), // 10: InstamadilloAddMessage.ReceiverFetchXma + (*Placeholder)(nil), // 11: InstamadilloAddMessage.Placeholder + (*instamadilloCoreTypeText.Text)(nil), // 12: InstamadilloCoreTypeText.Text + (*instamadilloCoreTypeLink.Link)(nil), // 13: InstamadilloCoreTypeLink.Link + (*instamadilloCoreTypeMedia.Media)(nil), // 14: InstamadilloCoreTypeMedia.Media + (*instamadilloCoreTypeCollection.Collection)(nil), // 15: InstamadilloCoreTypeCollection.Collection + (*instamadilloCoreTypeAdminMessage.AdminMessage)(nil), // 16: InstamadilloCoreTypeAdminMessage.AdminMessage + (*instamadilloCoreTypeActionLog.ActionLog)(nil), // 17: InstamadilloCoreTypeActionLog.ActionLog + (*instamadilloXmaContentRef.XmaContentRef)(nil), // 18: InstamadilloXmaContentRef.XmaContentRef +} +var file_instamadilloAddMessage_InstamadilloAddMessage_proto_depIdxs = []int32{ + 2, // 0: InstamadilloAddMessage.AddMessagePayload.content:type_name -> InstamadilloAddMessage.AddMessageContent + 3, // 1: InstamadilloAddMessage.AddMessagePayload.metadata:type_name -> InstamadilloAddMessage.AddMessageMetadata + 12, // 2: InstamadilloAddMessage.AddMessageContent.text:type_name -> InstamadilloCoreTypeText.Text + 9, // 3: InstamadilloAddMessage.AddMessageContent.like:type_name -> InstamadilloAddMessage.Like + 13, // 4: InstamadilloAddMessage.AddMessageContent.link:type_name -> InstamadilloCoreTypeLink.Link + 10, // 5: InstamadilloAddMessage.AddMessageContent.receiverFetchXma:type_name -> InstamadilloAddMessage.ReceiverFetchXma + 14, // 6: InstamadilloAddMessage.AddMessageContent.media:type_name -> InstamadilloCoreTypeMedia.Media + 11, // 7: InstamadilloAddMessage.AddMessageContent.placeholder:type_name -> InstamadilloAddMessage.Placeholder + 15, // 8: InstamadilloAddMessage.AddMessageContent.collection:type_name -> InstamadilloCoreTypeCollection.Collection + 16, // 9: InstamadilloAddMessage.AddMessageContent.adminMessage:type_name -> InstamadilloCoreTypeAdminMessage.AdminMessage + 17, // 10: InstamadilloAddMessage.AddMessageContent.actionLog:type_name -> InstamadilloCoreTypeActionLog.ActionLog + 6, // 11: InstamadilloAddMessage.AddMessageMetadata.privateReplyInfo:type_name -> InstamadilloAddMessage.PrivateReplyInfo + 4, // 12: InstamadilloAddMessage.AddMessageMetadata.repliedToMessage:type_name -> InstamadilloAddMessage.RepliedToMessage + 7, // 13: InstamadilloAddMessage.AddMessageMetadata.forwardingParams:type_name -> InstamadilloAddMessage.ForwardingParams + 8, // 14: InstamadilloAddMessage.AddMessageMetadata.ephemeralityParams:type_name -> InstamadilloAddMessage.EphemeralityParams + 5, // 15: InstamadilloAddMessage.RepliedToMessage.omMicroSecTS:type_name -> InstamadilloAddMessage.OpenMessageMicroSecondTimestamp + 14, // 16: InstamadilloAddMessage.ReceiverFetchXma.media:type_name -> InstamadilloCoreTypeMedia.Media + 18, // 17: InstamadilloAddMessage.ReceiverFetchXma.xmaContentRef:type_name -> InstamadilloXmaContentRef.XmaContentRef + 0, // 18: InstamadilloAddMessage.Placeholder.placeholderType:type_name -> InstamadilloAddMessage.Placeholder.Type + 19, // [19:19] is the sub-list for method output_type + 19, // [19:19] is the sub-list for method input_type + 19, // [19:19] is the sub-list for extension type_name + 19, // [19:19] is the sub-list for extension extendee + 0, // [0:19] is the sub-list for field type_name +} + +func init() { file_instamadilloAddMessage_InstamadilloAddMessage_proto_init() } +func file_instamadilloAddMessage_InstamadilloAddMessage_proto_init() { + if File_instamadilloAddMessage_InstamadilloAddMessage_proto != nil { + return + } + file_instamadilloAddMessage_InstamadilloAddMessage_proto_msgTypes[1].OneofWrappers = []any{ + (*AddMessageContent_Text)(nil), + (*AddMessageContent_Like)(nil), + (*AddMessageContent_Link)(nil), + (*AddMessageContent_ReceiverFetchXma)(nil), + (*AddMessageContent_Media)(nil), + (*AddMessageContent_Placeholder)(nil), + (*AddMessageContent_Collection)(nil), + (*AddMessageContent_AdminMessage)(nil), + (*AddMessageContent_ActionLog)(nil), + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: unsafe.Slice(unsafe.StringData(file_instamadilloAddMessage_InstamadilloAddMessage_proto_rawDesc), len(file_instamadilloAddMessage_InstamadilloAddMessage_proto_rawDesc)), + NumEnums: 1, + NumMessages: 11, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_instamadilloAddMessage_InstamadilloAddMessage_proto_goTypes, + DependencyIndexes: file_instamadilloAddMessage_InstamadilloAddMessage_proto_depIdxs, + EnumInfos: file_instamadilloAddMessage_InstamadilloAddMessage_proto_enumTypes, + MessageInfos: file_instamadilloAddMessage_InstamadilloAddMessage_proto_msgTypes, + }.Build() + File_instamadilloAddMessage_InstamadilloAddMessage_proto = out.File + file_instamadilloAddMessage_InstamadilloAddMessage_proto_goTypes = nil + file_instamadilloAddMessage_InstamadilloAddMessage_proto_depIdxs = nil +} diff --git a/vendor/go.mau.fi/whatsmeow/proto/instamadilloAddMessage/InstamadilloAddMessage.proto b/vendor/go.mau.fi/whatsmeow/proto/instamadilloAddMessage/InstamadilloAddMessage.proto new file mode 100644 index 0000000000..399256797d --- /dev/null +++ b/vendor/go.mau.fi/whatsmeow/proto/instamadilloAddMessage/InstamadilloAddMessage.proto @@ -0,0 +1,85 @@ +syntax = "proto2"; +package InstamadilloAddMessage; +option go_package = "go.mau.fi/whatsmeow/proto/instamadilloAddMessage"; + +import "instamadilloCoreTypeActionLog/InstamadilloCoreTypeActionLog.proto"; +import "instamadilloCoreTypeAdminMessage/InstamadilloCoreTypeAdminMessage.proto"; +import "instamadilloCoreTypeCollection/InstamadilloCoreTypeCollection.proto"; +import "instamadilloCoreTypeLink/InstamadilloCoreTypeLink.proto"; +import "instamadilloCoreTypeMedia/InstamadilloCoreTypeMedia.proto"; +import "instamadilloCoreTypeText/InstamadilloCoreTypeText.proto"; +import "instamadilloXmaContentRef/InstamadilloXmaContentRef.proto"; + +message AddMessagePayload { + optional AddMessageContent content = 1; + optional AddMessageMetadata metadata = 2; +} + +message AddMessageContent { + oneof addMessageContent { + InstamadilloCoreTypeText.Text text = 1; + Like like = 2; + InstamadilloCoreTypeLink.Link link = 3; + ReceiverFetchXma receiverFetchXma = 4; + InstamadilloCoreTypeMedia.Media media = 5; + Placeholder placeholder = 6; + InstamadilloCoreTypeCollection.Collection collection = 7; + InstamadilloCoreTypeAdminMessage.AdminMessage adminMessage = 8; + InstamadilloCoreTypeActionLog.ActionLog actionLog = 9; + } +} + +message AddMessageMetadata { + optional bool sendSilently = 1; + optional PrivateReplyInfo privateReplyInfo = 2; + optional RepliedToMessage repliedToMessage = 3; + optional ForwardingParams forwardingParams = 4; + optional EphemeralityParams ephemeralityParams = 5; +} + +message RepliedToMessage { + optional string repliedToMessageOtid = 1; + optional string repliedToMessageWaServerTimeSec = 2; + optional string repliedToMessageCollectionItemID = 3; + optional OpenMessageMicroSecondTimestamp omMicroSecTS = 4; +} + +message OpenMessageMicroSecondTimestamp { + optional int64 timestampMS = 1; + optional int32 microSecondsBits = 2; +} + +message PrivateReplyInfo { + optional string commentID = 1; + optional string postLink = 2; +} + +message ForwardingParams { + optional string forwardedThreadID = 1; +} + +message EphemeralityParams { + optional int64 ephemeralDurationSec = 1; +} + +message Like { +} + +message ReceiverFetchXma { + optional string contentRef = 1; + optional string text = 2; + optional InstamadilloCoreTypeMedia.Media media = 3; + optional InstamadilloXmaContentRef.XmaContentRef xmaContentRef = 4; +} + +message Placeholder { + enum Type { + PLACEHOLDER_TYPE_NONE = 0; + PLACEHOLDER_TYPE_DECRYPTION_FAILURE = 1; + PLACEHOLDER_TYPE_NOT_SUPPORTED_NEED_UPDATE = 2; + PLACEHOLDER_TYPE_DEVICE_UNAVAILABLE = 3; + PLACEHOLDER_TYPE_NOT_SUPPORTED_NOT_RECOVERABLE = 4; + } + + optional Type placeholderType = 1; +} diff --git a/vendor/go.mau.fi/whatsmeow/proto/instamadilloAddMessage/extra.go b/vendor/go.mau.fi/whatsmeow/proto/instamadilloAddMessage/extra.go new file mode 100644 index 0000000000..ccd7e8935c --- /dev/null +++ b/vendor/go.mau.fi/whatsmeow/proto/instamadilloAddMessage/extra.go @@ -0,0 +1,3 @@ +package instamadilloAddMessage + +func (*AddMessagePayload) IsMessageApplicationSub() {} diff --git a/vendor/go.mau.fi/whatsmeow/proto/instamadilloCoreTypeActionLog/InstamadilloCoreTypeActionLog.pb.go b/vendor/go.mau.fi/whatsmeow/proto/instamadilloCoreTypeActionLog/InstamadilloCoreTypeActionLog.pb.go new file mode 100644 index 0000000000..a20af395cb --- /dev/null +++ b/vendor/go.mau.fi/whatsmeow/proto/instamadilloCoreTypeActionLog/InstamadilloCoreTypeActionLog.pb.go @@ -0,0 +1,197 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.36.10 +// protoc v3.21.12 +// source: instamadilloCoreTypeActionLog/InstamadilloCoreTypeActionLog.proto + +package instamadilloCoreTypeActionLog + +import ( + reflect "reflect" + sync "sync" + unsafe "unsafe" + + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type ActionLog struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Types that are valid to be assigned to ActionLogSubtype: + // + // *ActionLog_ActionLogReaction + ActionLogSubtype isActionLog_ActionLogSubtype `protobuf_oneof:"actionLogSubtype"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ActionLog) Reset() { + *x = ActionLog{} + mi := &file_instamadilloCoreTypeActionLog_InstamadilloCoreTypeActionLog_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ActionLog) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ActionLog) ProtoMessage() {} + +func (x *ActionLog) ProtoReflect() protoreflect.Message { + mi := &file_instamadilloCoreTypeActionLog_InstamadilloCoreTypeActionLog_proto_msgTypes[0] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ActionLog.ProtoReflect.Descriptor instead. +func (*ActionLog) Descriptor() ([]byte, []int) { + return file_instamadilloCoreTypeActionLog_InstamadilloCoreTypeActionLog_proto_rawDescGZIP(), []int{0} +} + +func (x *ActionLog) GetActionLogSubtype() isActionLog_ActionLogSubtype { + if x != nil { + return x.ActionLogSubtype + } + return nil +} + +func (x *ActionLog) GetActionLogReaction() *ActionLogReaction { + if x != nil { + if x, ok := x.ActionLogSubtype.(*ActionLog_ActionLogReaction); ok { + return x.ActionLogReaction + } + } + return nil +} + +type isActionLog_ActionLogSubtype interface { + isActionLog_ActionLogSubtype() +} + +type ActionLog_ActionLogReaction struct { + ActionLogReaction *ActionLogReaction `protobuf:"bytes,1,opt,name=actionLogReaction,oneof"` +} + +func (*ActionLog_ActionLogReaction) isActionLog_ActionLogSubtype() {} + +type ActionLogReaction struct { + state protoimpl.MessageState `protogen:"open.v1"` + EmojiUnicode *string `protobuf:"bytes,1,opt,name=emojiUnicode" json:"emojiUnicode,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ActionLogReaction) Reset() { + *x = ActionLogReaction{} + mi := &file_instamadilloCoreTypeActionLog_InstamadilloCoreTypeActionLog_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ActionLogReaction) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ActionLogReaction) ProtoMessage() {} + +func (x *ActionLogReaction) ProtoReflect() protoreflect.Message { + mi := &file_instamadilloCoreTypeActionLog_InstamadilloCoreTypeActionLog_proto_msgTypes[1] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ActionLogReaction.ProtoReflect.Descriptor instead. +func (*ActionLogReaction) Descriptor() ([]byte, []int) { + return file_instamadilloCoreTypeActionLog_InstamadilloCoreTypeActionLog_proto_rawDescGZIP(), []int{1} +} + +func (x *ActionLogReaction) GetEmojiUnicode() string { + if x != nil && x.EmojiUnicode != nil { + return *x.EmojiUnicode + } + return "" +} + +var File_instamadilloCoreTypeActionLog_InstamadilloCoreTypeActionLog_proto protoreflect.FileDescriptor + +const file_instamadilloCoreTypeActionLog_InstamadilloCoreTypeActionLog_proto_rawDesc = "" + + "\n" + + "AinstamadilloCoreTypeActionLog/InstamadilloCoreTypeActionLog.proto\x12\x1dInstamadilloCoreTypeActionLog\"\x81\x01\n" + + "\tActionLog\x12`\n" + + "\x11actionLogReaction\x18\x01 \x01(\v20.InstamadilloCoreTypeActionLog.ActionLogReactionH\x00R\x11actionLogReactionB\x12\n" + + "\x10actionLogSubtype\"7\n" + + "\x11ActionLogReaction\x12\"\n" + + "\femojiUnicode\x18\x01 \x01(\tR\femojiUnicodeB9Z7go.mau.fi/whatsmeow/proto/instamadilloCoreTypeActionLog" + +var ( + file_instamadilloCoreTypeActionLog_InstamadilloCoreTypeActionLog_proto_rawDescOnce sync.Once + file_instamadilloCoreTypeActionLog_InstamadilloCoreTypeActionLog_proto_rawDescData []byte +) + +func file_instamadilloCoreTypeActionLog_InstamadilloCoreTypeActionLog_proto_rawDescGZIP() []byte { + file_instamadilloCoreTypeActionLog_InstamadilloCoreTypeActionLog_proto_rawDescOnce.Do(func() { + file_instamadilloCoreTypeActionLog_InstamadilloCoreTypeActionLog_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_instamadilloCoreTypeActionLog_InstamadilloCoreTypeActionLog_proto_rawDesc), len(file_instamadilloCoreTypeActionLog_InstamadilloCoreTypeActionLog_proto_rawDesc))) + }) + return file_instamadilloCoreTypeActionLog_InstamadilloCoreTypeActionLog_proto_rawDescData +} + +var file_instamadilloCoreTypeActionLog_InstamadilloCoreTypeActionLog_proto_msgTypes = make([]protoimpl.MessageInfo, 2) +var file_instamadilloCoreTypeActionLog_InstamadilloCoreTypeActionLog_proto_goTypes = []any{ + (*ActionLog)(nil), // 0: InstamadilloCoreTypeActionLog.ActionLog + (*ActionLogReaction)(nil), // 1: InstamadilloCoreTypeActionLog.ActionLogReaction +} +var file_instamadilloCoreTypeActionLog_InstamadilloCoreTypeActionLog_proto_depIdxs = []int32{ + 1, // 0: InstamadilloCoreTypeActionLog.ActionLog.actionLogReaction:type_name -> InstamadilloCoreTypeActionLog.ActionLogReaction + 1, // [1:1] is the sub-list for method output_type + 1, // [1:1] is the sub-list for method input_type + 1, // [1:1] is the sub-list for extension type_name + 1, // [1:1] is the sub-list for extension extendee + 0, // [0:1] is the sub-list for field type_name +} + +func init() { file_instamadilloCoreTypeActionLog_InstamadilloCoreTypeActionLog_proto_init() } +func file_instamadilloCoreTypeActionLog_InstamadilloCoreTypeActionLog_proto_init() { + if File_instamadilloCoreTypeActionLog_InstamadilloCoreTypeActionLog_proto != nil { + return + } + file_instamadilloCoreTypeActionLog_InstamadilloCoreTypeActionLog_proto_msgTypes[0].OneofWrappers = []any{ + (*ActionLog_ActionLogReaction)(nil), + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: unsafe.Slice(unsafe.StringData(file_instamadilloCoreTypeActionLog_InstamadilloCoreTypeActionLog_proto_rawDesc), len(file_instamadilloCoreTypeActionLog_InstamadilloCoreTypeActionLog_proto_rawDesc)), + NumEnums: 0, + NumMessages: 2, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_instamadilloCoreTypeActionLog_InstamadilloCoreTypeActionLog_proto_goTypes, + DependencyIndexes: file_instamadilloCoreTypeActionLog_InstamadilloCoreTypeActionLog_proto_depIdxs, + MessageInfos: file_instamadilloCoreTypeActionLog_InstamadilloCoreTypeActionLog_proto_msgTypes, + }.Build() + File_instamadilloCoreTypeActionLog_InstamadilloCoreTypeActionLog_proto = out.File + file_instamadilloCoreTypeActionLog_InstamadilloCoreTypeActionLog_proto_goTypes = nil + file_instamadilloCoreTypeActionLog_InstamadilloCoreTypeActionLog_proto_depIdxs = nil +} diff --git a/vendor/go.mau.fi/whatsmeow/proto/instamadilloCoreTypeActionLog/InstamadilloCoreTypeActionLog.proto b/vendor/go.mau.fi/whatsmeow/proto/instamadilloCoreTypeActionLog/InstamadilloCoreTypeActionLog.proto new file mode 100644 index 0000000000..dad19791df --- /dev/null +++ b/vendor/go.mau.fi/whatsmeow/proto/instamadilloCoreTypeActionLog/InstamadilloCoreTypeActionLog.proto @@ -0,0 +1,13 @@ +syntax = "proto2"; +package InstamadilloCoreTypeActionLog; +option go_package = "go.mau.fi/whatsmeow/proto/instamadilloCoreTypeActionLog"; + +message ActionLog { + oneof actionLogSubtype { + ActionLogReaction actionLogReaction = 1; + } +} + +message ActionLogReaction { + optional string emojiUnicode = 1; +} diff --git a/vendor/go.mau.fi/whatsmeow/proto/instamadilloCoreTypeAdminMessage/InstamadilloCoreTypeAdminMessage.pb.go b/vendor/go.mau.fi/whatsmeow/proto/instamadilloCoreTypeAdminMessage/InstamadilloCoreTypeAdminMessage.pb.go new file mode 100644 index 0000000000..0a0195fbb3 --- /dev/null +++ b/vendor/go.mau.fi/whatsmeow/proto/instamadilloCoreTypeAdminMessage/InstamadilloCoreTypeAdminMessage.pb.go @@ -0,0 +1,279 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.36.10 +// protoc v3.21.12 +// source: instamadilloCoreTypeAdminMessage/InstamadilloCoreTypeAdminMessage.proto + +package instamadilloCoreTypeAdminMessage + +import ( + reflect "reflect" + sync "sync" + unsafe "unsafe" + + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type DeviceAdminMessage_Type int32 + +const ( + DeviceAdminMessage_DEVICE_ADMIN_MESSAGE_TYPE_NONE DeviceAdminMessage_Type = 0 + DeviceAdminMessage_DEVICE_ADMIN_MESSAGE_TYPE_LOCAL_USER_CHANGED_IDENTITY_KEY_NAMED_DEVICE DeviceAdminMessage_Type = 1 + DeviceAdminMessage_DEVICE_ADMIN_MESSAGE_TYPE_SECURITY_ALERT_PARTICIPANT_KEY_CHANGE DeviceAdminMessage_Type = 2 + DeviceAdminMessage_DEVICE_ADMIN_MESSAGE_TYPE_SECURITY_ALERT_PARTICIPANT_NEW_LOGIN DeviceAdminMessage_Type = 3 +) + +// Enum value maps for DeviceAdminMessage_Type. +var ( + DeviceAdminMessage_Type_name = map[int32]string{ + 0: "DEVICE_ADMIN_MESSAGE_TYPE_NONE", + 1: "DEVICE_ADMIN_MESSAGE_TYPE_LOCAL_USER_CHANGED_IDENTITY_KEY_NAMED_DEVICE", + 2: "DEVICE_ADMIN_MESSAGE_TYPE_SECURITY_ALERT_PARTICIPANT_KEY_CHANGE", + 3: "DEVICE_ADMIN_MESSAGE_TYPE_SECURITY_ALERT_PARTICIPANT_NEW_LOGIN", + } + DeviceAdminMessage_Type_value = map[string]int32{ + "DEVICE_ADMIN_MESSAGE_TYPE_NONE": 0, + "DEVICE_ADMIN_MESSAGE_TYPE_LOCAL_USER_CHANGED_IDENTITY_KEY_NAMED_DEVICE": 1, + "DEVICE_ADMIN_MESSAGE_TYPE_SECURITY_ALERT_PARTICIPANT_KEY_CHANGE": 2, + "DEVICE_ADMIN_MESSAGE_TYPE_SECURITY_ALERT_PARTICIPANT_NEW_LOGIN": 3, + } +) + +func (x DeviceAdminMessage_Type) Enum() *DeviceAdminMessage_Type { + p := new(DeviceAdminMessage_Type) + *p = x + return p +} + +func (x DeviceAdminMessage_Type) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (DeviceAdminMessage_Type) Descriptor() protoreflect.EnumDescriptor { + return file_instamadilloCoreTypeAdminMessage_InstamadilloCoreTypeAdminMessage_proto_enumTypes[0].Descriptor() +} + +func (DeviceAdminMessage_Type) Type() protoreflect.EnumType { + return &file_instamadilloCoreTypeAdminMessage_InstamadilloCoreTypeAdminMessage_proto_enumTypes[0] +} + +func (x DeviceAdminMessage_Type) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *DeviceAdminMessage_Type) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = DeviceAdminMessage_Type(num) + return nil +} + +// Deprecated: Use DeviceAdminMessage_Type.Descriptor instead. +func (DeviceAdminMessage_Type) EnumDescriptor() ([]byte, []int) { + return file_instamadilloCoreTypeAdminMessage_InstamadilloCoreTypeAdminMessage_proto_rawDescGZIP(), []int{1, 0} +} + +type AdminMessage struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Types that are valid to be assigned to AdminMessageSubtype: + // + // *AdminMessage_DeviceAdminMessage + AdminMessageSubtype isAdminMessage_AdminMessageSubtype `protobuf_oneof:"adminMessageSubtype"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *AdminMessage) Reset() { + *x = AdminMessage{} + mi := &file_instamadilloCoreTypeAdminMessage_InstamadilloCoreTypeAdminMessage_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *AdminMessage) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AdminMessage) ProtoMessage() {} + +func (x *AdminMessage) ProtoReflect() protoreflect.Message { + mi := &file_instamadilloCoreTypeAdminMessage_InstamadilloCoreTypeAdminMessage_proto_msgTypes[0] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AdminMessage.ProtoReflect.Descriptor instead. +func (*AdminMessage) Descriptor() ([]byte, []int) { + return file_instamadilloCoreTypeAdminMessage_InstamadilloCoreTypeAdminMessage_proto_rawDescGZIP(), []int{0} +} + +func (x *AdminMessage) GetAdminMessageSubtype() isAdminMessage_AdminMessageSubtype { + if x != nil { + return x.AdminMessageSubtype + } + return nil +} + +func (x *AdminMessage) GetDeviceAdminMessage() *DeviceAdminMessage { + if x != nil { + if x, ok := x.AdminMessageSubtype.(*AdminMessage_DeviceAdminMessage); ok { + return x.DeviceAdminMessage + } + } + return nil +} + +type isAdminMessage_AdminMessageSubtype interface { + isAdminMessage_AdminMessageSubtype() +} + +type AdminMessage_DeviceAdminMessage struct { + DeviceAdminMessage *DeviceAdminMessage `protobuf:"bytes,1,opt,name=deviceAdminMessage,oneof"` +} + +func (*AdminMessage_DeviceAdminMessage) isAdminMessage_AdminMessageSubtype() {} + +type DeviceAdminMessage struct { + state protoimpl.MessageState `protogen:"open.v1"` + DeviceAdminMessageType *DeviceAdminMessage_Type `protobuf:"varint,1,opt,name=deviceAdminMessageType,enum=InstamadilloCoreTypeAdminMessage.DeviceAdminMessage_Type" json:"deviceAdminMessageType,omitempty"` + DeviceName *string `protobuf:"bytes,2,opt,name=deviceName" json:"deviceName,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *DeviceAdminMessage) Reset() { + *x = DeviceAdminMessage{} + mi := &file_instamadilloCoreTypeAdminMessage_InstamadilloCoreTypeAdminMessage_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *DeviceAdminMessage) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DeviceAdminMessage) ProtoMessage() {} + +func (x *DeviceAdminMessage) ProtoReflect() protoreflect.Message { + mi := &file_instamadilloCoreTypeAdminMessage_InstamadilloCoreTypeAdminMessage_proto_msgTypes[1] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DeviceAdminMessage.ProtoReflect.Descriptor instead. +func (*DeviceAdminMessage) Descriptor() ([]byte, []int) { + return file_instamadilloCoreTypeAdminMessage_InstamadilloCoreTypeAdminMessage_proto_rawDescGZIP(), []int{1} +} + +func (x *DeviceAdminMessage) GetDeviceAdminMessageType() DeviceAdminMessage_Type { + if x != nil && x.DeviceAdminMessageType != nil { + return *x.DeviceAdminMessageType + } + return DeviceAdminMessage_DEVICE_ADMIN_MESSAGE_TYPE_NONE +} + +func (x *DeviceAdminMessage) GetDeviceName() string { + if x != nil && x.DeviceName != nil { + return *x.DeviceName + } + return "" +} + +var File_instamadilloCoreTypeAdminMessage_InstamadilloCoreTypeAdminMessage_proto protoreflect.FileDescriptor + +const file_instamadilloCoreTypeAdminMessage_InstamadilloCoreTypeAdminMessage_proto_rawDesc = "" + + "\n" + + "GinstamadilloCoreTypeAdminMessage/InstamadilloCoreTypeAdminMessage.proto\x12 InstamadilloCoreTypeAdminMessage\"\x8d\x01\n" + + "\fAdminMessage\x12f\n" + + "\x12deviceAdminMessage\x18\x01 \x01(\v24.InstamadilloCoreTypeAdminMessage.DeviceAdminMessageH\x00R\x12deviceAdminMessageB\x15\n" + + "\x13adminMessageSubtype\"\xa9\x03\n" + + "\x12DeviceAdminMessage\x12q\n" + + "\x16deviceAdminMessageType\x18\x01 \x01(\x0e29.InstamadilloCoreTypeAdminMessage.DeviceAdminMessage.TypeR\x16deviceAdminMessageType\x12\x1e\n" + + "\n" + + "deviceName\x18\x02 \x01(\tR\n" + + "deviceName\"\xff\x01\n" + + "\x04Type\x12\"\n" + + "\x1eDEVICE_ADMIN_MESSAGE_TYPE_NONE\x10\x00\x12J\n" + + "FDEVICE_ADMIN_MESSAGE_TYPE_LOCAL_USER_CHANGED_IDENTITY_KEY_NAMED_DEVICE\x10\x01\x12C\n" + + "?DEVICE_ADMIN_MESSAGE_TYPE_SECURITY_ALERT_PARTICIPANT_KEY_CHANGE\x10\x02\x12B\n" + + ">DEVICE_ADMIN_MESSAGE_TYPE_SECURITY_ALERT_PARTICIPANT_NEW_LOGIN\x10\x03B InstamadilloCoreTypeAdminMessage.DeviceAdminMessage + 0, // 1: InstamadilloCoreTypeAdminMessage.DeviceAdminMessage.deviceAdminMessageType:type_name -> InstamadilloCoreTypeAdminMessage.DeviceAdminMessage.Type + 2, // [2:2] is the sub-list for method output_type + 2, // [2:2] is the sub-list for method input_type + 2, // [2:2] is the sub-list for extension type_name + 2, // [2:2] is the sub-list for extension extendee + 0, // [0:2] is the sub-list for field type_name +} + +func init() { file_instamadilloCoreTypeAdminMessage_InstamadilloCoreTypeAdminMessage_proto_init() } +func file_instamadilloCoreTypeAdminMessage_InstamadilloCoreTypeAdminMessage_proto_init() { + if File_instamadilloCoreTypeAdminMessage_InstamadilloCoreTypeAdminMessage_proto != nil { + return + } + file_instamadilloCoreTypeAdminMessage_InstamadilloCoreTypeAdminMessage_proto_msgTypes[0].OneofWrappers = []any{ + (*AdminMessage_DeviceAdminMessage)(nil), + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: unsafe.Slice(unsafe.StringData(file_instamadilloCoreTypeAdminMessage_InstamadilloCoreTypeAdminMessage_proto_rawDesc), len(file_instamadilloCoreTypeAdminMessage_InstamadilloCoreTypeAdminMessage_proto_rawDesc)), + NumEnums: 1, + NumMessages: 2, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_instamadilloCoreTypeAdminMessage_InstamadilloCoreTypeAdminMessage_proto_goTypes, + DependencyIndexes: file_instamadilloCoreTypeAdminMessage_InstamadilloCoreTypeAdminMessage_proto_depIdxs, + EnumInfos: file_instamadilloCoreTypeAdminMessage_InstamadilloCoreTypeAdminMessage_proto_enumTypes, + MessageInfos: file_instamadilloCoreTypeAdminMessage_InstamadilloCoreTypeAdminMessage_proto_msgTypes, + }.Build() + File_instamadilloCoreTypeAdminMessage_InstamadilloCoreTypeAdminMessage_proto = out.File + file_instamadilloCoreTypeAdminMessage_InstamadilloCoreTypeAdminMessage_proto_goTypes = nil + file_instamadilloCoreTypeAdminMessage_InstamadilloCoreTypeAdminMessage_proto_depIdxs = nil +} diff --git a/vendor/go.mau.fi/whatsmeow/proto/instamadilloCoreTypeAdminMessage/InstamadilloCoreTypeAdminMessage.proto b/vendor/go.mau.fi/whatsmeow/proto/instamadilloCoreTypeAdminMessage/InstamadilloCoreTypeAdminMessage.proto new file mode 100644 index 0000000000..c6bb7e4e40 --- /dev/null +++ b/vendor/go.mau.fi/whatsmeow/proto/instamadilloCoreTypeAdminMessage/InstamadilloCoreTypeAdminMessage.proto @@ -0,0 +1,21 @@ +syntax = "proto2"; +package InstamadilloCoreTypeAdminMessage; +option go_package = "go.mau.fi/whatsmeow/proto/instamadilloCoreTypeAdminMessage"; + +message AdminMessage { + oneof adminMessageSubtype { + DeviceAdminMessage deviceAdminMessage = 1; + } +} + +message DeviceAdminMessage { + enum Type { + DEVICE_ADMIN_MESSAGE_TYPE_NONE = 0; + DEVICE_ADMIN_MESSAGE_TYPE_LOCAL_USER_CHANGED_IDENTITY_KEY_NAMED_DEVICE = 1; + DEVICE_ADMIN_MESSAGE_TYPE_SECURITY_ALERT_PARTICIPANT_KEY_CHANGE = 2; + DEVICE_ADMIN_MESSAGE_TYPE_SECURITY_ALERT_PARTICIPANT_NEW_LOGIN = 3; + } + + optional Type deviceAdminMessageType = 1; + optional string deviceName = 2; +} diff --git a/vendor/go.mau.fi/whatsmeow/proto/instamadilloCoreTypeCollection/InstamadilloCoreTypeCollection.pb.go b/vendor/go.mau.fi/whatsmeow/proto/instamadilloCoreTypeCollection/InstamadilloCoreTypeCollection.pb.go new file mode 100644 index 0000000000..91c025eb06 --- /dev/null +++ b/vendor/go.mau.fi/whatsmeow/proto/instamadilloCoreTypeCollection/InstamadilloCoreTypeCollection.pb.go @@ -0,0 +1,137 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.36.10 +// protoc v3.21.12 +// source: instamadilloCoreTypeCollection/InstamadilloCoreTypeCollection.proto + +package instamadilloCoreTypeCollection + +import ( + reflect "reflect" + sync "sync" + unsafe "unsafe" + + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + + instamadilloCoreTypeMedia "go.mau.fi/whatsmeow/proto/instamadilloCoreTypeMedia" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type Collection struct { + state protoimpl.MessageState `protogen:"open.v1"` + Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + Media []*instamadilloCoreTypeMedia.Media `protobuf:"bytes,2,rep,name=media" json:"media,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *Collection) Reset() { + *x = Collection{} + mi := &file_instamadilloCoreTypeCollection_InstamadilloCoreTypeCollection_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *Collection) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Collection) ProtoMessage() {} + +func (x *Collection) ProtoReflect() protoreflect.Message { + mi := &file_instamadilloCoreTypeCollection_InstamadilloCoreTypeCollection_proto_msgTypes[0] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Collection.ProtoReflect.Descriptor instead. +func (*Collection) Descriptor() ([]byte, []int) { + return file_instamadilloCoreTypeCollection_InstamadilloCoreTypeCollection_proto_rawDescGZIP(), []int{0} +} + +func (x *Collection) GetName() string { + if x != nil && x.Name != nil { + return *x.Name + } + return "" +} + +func (x *Collection) GetMedia() []*instamadilloCoreTypeMedia.Media { + if x != nil { + return x.Media + } + return nil +} + +var File_instamadilloCoreTypeCollection_InstamadilloCoreTypeCollection_proto protoreflect.FileDescriptor + +const file_instamadilloCoreTypeCollection_InstamadilloCoreTypeCollection_proto_rawDesc = "" + + "\n" + + "CinstamadilloCoreTypeCollection/InstamadilloCoreTypeCollection.proto\x12\x1eInstamadilloCoreTypeCollection\x1a9instamadilloCoreTypeMedia/InstamadilloCoreTypeMedia.proto\"X\n" + + "\n" + + "Collection\x12\x12\n" + + "\x04name\x18\x01 \x01(\tR\x04name\x126\n" + + "\x05media\x18\x02 \x03(\v2 .InstamadilloCoreTypeMedia.MediaR\x05mediaB:Z8go.mau.fi/whatsmeow/proto/instamadilloCoreTypeCollection" + +var ( + file_instamadilloCoreTypeCollection_InstamadilloCoreTypeCollection_proto_rawDescOnce sync.Once + file_instamadilloCoreTypeCollection_InstamadilloCoreTypeCollection_proto_rawDescData []byte +) + +func file_instamadilloCoreTypeCollection_InstamadilloCoreTypeCollection_proto_rawDescGZIP() []byte { + file_instamadilloCoreTypeCollection_InstamadilloCoreTypeCollection_proto_rawDescOnce.Do(func() { + file_instamadilloCoreTypeCollection_InstamadilloCoreTypeCollection_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_instamadilloCoreTypeCollection_InstamadilloCoreTypeCollection_proto_rawDesc), len(file_instamadilloCoreTypeCollection_InstamadilloCoreTypeCollection_proto_rawDesc))) + }) + return file_instamadilloCoreTypeCollection_InstamadilloCoreTypeCollection_proto_rawDescData +} + +var file_instamadilloCoreTypeCollection_InstamadilloCoreTypeCollection_proto_msgTypes = make([]protoimpl.MessageInfo, 1) +var file_instamadilloCoreTypeCollection_InstamadilloCoreTypeCollection_proto_goTypes = []any{ + (*Collection)(nil), // 0: InstamadilloCoreTypeCollection.Collection + (*instamadilloCoreTypeMedia.Media)(nil), // 1: InstamadilloCoreTypeMedia.Media +} +var file_instamadilloCoreTypeCollection_InstamadilloCoreTypeCollection_proto_depIdxs = []int32{ + 1, // 0: InstamadilloCoreTypeCollection.Collection.media:type_name -> InstamadilloCoreTypeMedia.Media + 1, // [1:1] is the sub-list for method output_type + 1, // [1:1] is the sub-list for method input_type + 1, // [1:1] is the sub-list for extension type_name + 1, // [1:1] is the sub-list for extension extendee + 0, // [0:1] is the sub-list for field type_name +} + +func init() { file_instamadilloCoreTypeCollection_InstamadilloCoreTypeCollection_proto_init() } +func file_instamadilloCoreTypeCollection_InstamadilloCoreTypeCollection_proto_init() { + if File_instamadilloCoreTypeCollection_InstamadilloCoreTypeCollection_proto != nil { + return + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: unsafe.Slice(unsafe.StringData(file_instamadilloCoreTypeCollection_InstamadilloCoreTypeCollection_proto_rawDesc), len(file_instamadilloCoreTypeCollection_InstamadilloCoreTypeCollection_proto_rawDesc)), + NumEnums: 0, + NumMessages: 1, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_instamadilloCoreTypeCollection_InstamadilloCoreTypeCollection_proto_goTypes, + DependencyIndexes: file_instamadilloCoreTypeCollection_InstamadilloCoreTypeCollection_proto_depIdxs, + MessageInfos: file_instamadilloCoreTypeCollection_InstamadilloCoreTypeCollection_proto_msgTypes, + }.Build() + File_instamadilloCoreTypeCollection_InstamadilloCoreTypeCollection_proto = out.File + file_instamadilloCoreTypeCollection_InstamadilloCoreTypeCollection_proto_goTypes = nil + file_instamadilloCoreTypeCollection_InstamadilloCoreTypeCollection_proto_depIdxs = nil +} diff --git a/vendor/go.mau.fi/whatsmeow/proto/instamadilloCoreTypeCollection/InstamadilloCoreTypeCollection.proto b/vendor/go.mau.fi/whatsmeow/proto/instamadilloCoreTypeCollection/InstamadilloCoreTypeCollection.proto new file mode 100644 index 0000000000..4ad9f921ac --- /dev/null +++ b/vendor/go.mau.fi/whatsmeow/proto/instamadilloCoreTypeCollection/InstamadilloCoreTypeCollection.proto @@ -0,0 +1,10 @@ +syntax = "proto2"; +package InstamadilloCoreTypeCollection; +option go_package = "go.mau.fi/whatsmeow/proto/instamadilloCoreTypeCollection"; + +import "instamadilloCoreTypeMedia/InstamadilloCoreTypeMedia.proto"; + +message Collection { + optional string name = 1; + repeated InstamadilloCoreTypeMedia.Media media = 2; +} diff --git a/vendor/go.mau.fi/whatsmeow/proto/instamadilloCoreTypeLink/InstamadilloCoreTypeLink.pb.go b/vendor/go.mau.fi/whatsmeow/proto/instamadilloCoreTypeLink/InstamadilloCoreTypeLink.pb.go new file mode 100644 index 0000000000..f888c6eb85 --- /dev/null +++ b/vendor/go.mau.fi/whatsmeow/proto/instamadilloCoreTypeLink/InstamadilloCoreTypeLink.pb.go @@ -0,0 +1,313 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.36.10 +// protoc v3.21.12 +// source: instamadilloCoreTypeLink/InstamadilloCoreTypeLink.proto + +package instamadilloCoreTypeLink + +import ( + reflect "reflect" + sync "sync" + unsafe "unsafe" + + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + + instamadilloCoreTypeMedia "go.mau.fi/whatsmeow/proto/instamadilloCoreTypeMedia" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type Link struct { + state protoimpl.MessageState `protogen:"open.v1"` + Text *string `protobuf:"bytes,1,opt,name=text" json:"text,omitempty"` + LinkContext *LinkContext `protobuf:"bytes,2,opt,name=linkContext" json:"linkContext,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *Link) Reset() { + *x = Link{} + mi := &file_instamadilloCoreTypeLink_InstamadilloCoreTypeLink_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *Link) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Link) ProtoMessage() {} + +func (x *Link) ProtoReflect() protoreflect.Message { + mi := &file_instamadilloCoreTypeLink_InstamadilloCoreTypeLink_proto_msgTypes[0] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Link.ProtoReflect.Descriptor instead. +func (*Link) Descriptor() ([]byte, []int) { + return file_instamadilloCoreTypeLink_InstamadilloCoreTypeLink_proto_rawDescGZIP(), []int{0} +} + +func (x *Link) GetText() string { + if x != nil && x.Text != nil { + return *x.Text + } + return "" +} + +func (x *Link) GetLinkContext() *LinkContext { + if x != nil { + return x.LinkContext + } + return nil +} + +type LinkContext struct { + state protoimpl.MessageState `protogen:"open.v1"` + LinkImageURL *ImageUrl `protobuf:"bytes,1,opt,name=linkImageURL" json:"linkImageURL,omitempty"` + LinkPreviewTitle *string `protobuf:"bytes,2,opt,name=linkPreviewTitle" json:"linkPreviewTitle,omitempty"` + LinkURL *string `protobuf:"bytes,3,opt,name=linkURL" json:"linkURL,omitempty"` + LinkSummary *string `protobuf:"bytes,4,opt,name=linkSummary" json:"linkSummary,omitempty"` + LinkMusicPreviewURL *string `protobuf:"bytes,5,opt,name=linkMusicPreviewURL" json:"linkMusicPreviewURL,omitempty"` + LinkMusicPreviewCountriesAllowed []string `protobuf:"bytes,6,rep,name=linkMusicPreviewCountriesAllowed" json:"linkMusicPreviewCountriesAllowed,omitempty"` + LinkPreviewThumbnail *instamadilloCoreTypeMedia.Thumbnail `protobuf:"bytes,7,opt,name=linkPreviewThumbnail" json:"linkPreviewThumbnail,omitempty"` + LinkPreviewBody *string `protobuf:"bytes,8,opt,name=linkPreviewBody" json:"linkPreviewBody,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *LinkContext) Reset() { + *x = LinkContext{} + mi := &file_instamadilloCoreTypeLink_InstamadilloCoreTypeLink_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *LinkContext) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*LinkContext) ProtoMessage() {} + +func (x *LinkContext) ProtoReflect() protoreflect.Message { + mi := &file_instamadilloCoreTypeLink_InstamadilloCoreTypeLink_proto_msgTypes[1] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use LinkContext.ProtoReflect.Descriptor instead. +func (*LinkContext) Descriptor() ([]byte, []int) { + return file_instamadilloCoreTypeLink_InstamadilloCoreTypeLink_proto_rawDescGZIP(), []int{1} +} + +func (x *LinkContext) GetLinkImageURL() *ImageUrl { + if x != nil { + return x.LinkImageURL + } + return nil +} + +func (x *LinkContext) GetLinkPreviewTitle() string { + if x != nil && x.LinkPreviewTitle != nil { + return *x.LinkPreviewTitle + } + return "" +} + +func (x *LinkContext) GetLinkURL() string { + if x != nil && x.LinkURL != nil { + return *x.LinkURL + } + return "" +} + +func (x *LinkContext) GetLinkSummary() string { + if x != nil && x.LinkSummary != nil { + return *x.LinkSummary + } + return "" +} + +func (x *LinkContext) GetLinkMusicPreviewURL() string { + if x != nil && x.LinkMusicPreviewURL != nil { + return *x.LinkMusicPreviewURL + } + return "" +} + +func (x *LinkContext) GetLinkMusicPreviewCountriesAllowed() []string { + if x != nil { + return x.LinkMusicPreviewCountriesAllowed + } + return nil +} + +func (x *LinkContext) GetLinkPreviewThumbnail() *instamadilloCoreTypeMedia.Thumbnail { + if x != nil { + return x.LinkPreviewThumbnail + } + return nil +} + +func (x *LinkContext) GetLinkPreviewBody() string { + if x != nil && x.LinkPreviewBody != nil { + return *x.LinkPreviewBody + } + return "" +} + +type ImageUrl struct { + state protoimpl.MessageState `protogen:"open.v1"` + URL *string `protobuf:"bytes,1,opt,name=URL" json:"URL,omitempty"` + Width *int32 `protobuf:"varint,2,opt,name=width" json:"width,omitempty"` + Height *int32 `protobuf:"varint,3,opt,name=height" json:"height,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ImageUrl) Reset() { + *x = ImageUrl{} + mi := &file_instamadilloCoreTypeLink_InstamadilloCoreTypeLink_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ImageUrl) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ImageUrl) ProtoMessage() {} + +func (x *ImageUrl) ProtoReflect() protoreflect.Message { + mi := &file_instamadilloCoreTypeLink_InstamadilloCoreTypeLink_proto_msgTypes[2] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ImageUrl.ProtoReflect.Descriptor instead. +func (*ImageUrl) Descriptor() ([]byte, []int) { + return file_instamadilloCoreTypeLink_InstamadilloCoreTypeLink_proto_rawDescGZIP(), []int{2} +} + +func (x *ImageUrl) GetURL() string { + if x != nil && x.URL != nil { + return *x.URL + } + return "" +} + +func (x *ImageUrl) GetWidth() int32 { + if x != nil && x.Width != nil { + return *x.Width + } + return 0 +} + +func (x *ImageUrl) GetHeight() int32 { + if x != nil && x.Height != nil { + return *x.Height + } + return 0 +} + +var File_instamadilloCoreTypeLink_InstamadilloCoreTypeLink_proto protoreflect.FileDescriptor + +const file_instamadilloCoreTypeLink_InstamadilloCoreTypeLink_proto_rawDesc = "" + + "\n" + + "7instamadilloCoreTypeLink/InstamadilloCoreTypeLink.proto\x12\x18InstamadilloCoreTypeLink\x1a9instamadilloCoreTypeMedia/InstamadilloCoreTypeMedia.proto\"c\n" + + "\x04Link\x12\x12\n" + + "\x04text\x18\x01 \x01(\tR\x04text\x12G\n" + + "\vlinkContext\x18\x02 \x01(\v2%.InstamadilloCoreTypeLink.LinkContextR\vlinkContext\"\xbf\x03\n" + + "\vLinkContext\x12F\n" + + "\flinkImageURL\x18\x01 \x01(\v2\".InstamadilloCoreTypeLink.ImageUrlR\flinkImageURL\x12*\n" + + "\x10linkPreviewTitle\x18\x02 \x01(\tR\x10linkPreviewTitle\x12\x18\n" + + "\alinkURL\x18\x03 \x01(\tR\alinkURL\x12 \n" + + "\vlinkSummary\x18\x04 \x01(\tR\vlinkSummary\x120\n" + + "\x13linkMusicPreviewURL\x18\x05 \x01(\tR\x13linkMusicPreviewURL\x12J\n" + + " linkMusicPreviewCountriesAllowed\x18\x06 \x03(\tR linkMusicPreviewCountriesAllowed\x12X\n" + + "\x14linkPreviewThumbnail\x18\a \x01(\v2$.InstamadilloCoreTypeMedia.ThumbnailR\x14linkPreviewThumbnail\x12(\n" + + "\x0flinkPreviewBody\x18\b \x01(\tR\x0flinkPreviewBody\"J\n" + + "\bImageUrl\x12\x10\n" + + "\x03URL\x18\x01 \x01(\tR\x03URL\x12\x14\n" + + "\x05width\x18\x02 \x01(\x05R\x05width\x12\x16\n" + + "\x06height\x18\x03 \x01(\x05R\x06heightB4Z2go.mau.fi/whatsmeow/proto/instamadilloCoreTypeLink" + +var ( + file_instamadilloCoreTypeLink_InstamadilloCoreTypeLink_proto_rawDescOnce sync.Once + file_instamadilloCoreTypeLink_InstamadilloCoreTypeLink_proto_rawDescData []byte +) + +func file_instamadilloCoreTypeLink_InstamadilloCoreTypeLink_proto_rawDescGZIP() []byte { + file_instamadilloCoreTypeLink_InstamadilloCoreTypeLink_proto_rawDescOnce.Do(func() { + file_instamadilloCoreTypeLink_InstamadilloCoreTypeLink_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_instamadilloCoreTypeLink_InstamadilloCoreTypeLink_proto_rawDesc), len(file_instamadilloCoreTypeLink_InstamadilloCoreTypeLink_proto_rawDesc))) + }) + return file_instamadilloCoreTypeLink_InstamadilloCoreTypeLink_proto_rawDescData +} + +var file_instamadilloCoreTypeLink_InstamadilloCoreTypeLink_proto_msgTypes = make([]protoimpl.MessageInfo, 3) +var file_instamadilloCoreTypeLink_InstamadilloCoreTypeLink_proto_goTypes = []any{ + (*Link)(nil), // 0: InstamadilloCoreTypeLink.Link + (*LinkContext)(nil), // 1: InstamadilloCoreTypeLink.LinkContext + (*ImageUrl)(nil), // 2: InstamadilloCoreTypeLink.ImageUrl + (*instamadilloCoreTypeMedia.Thumbnail)(nil), // 3: InstamadilloCoreTypeMedia.Thumbnail +} +var file_instamadilloCoreTypeLink_InstamadilloCoreTypeLink_proto_depIdxs = []int32{ + 1, // 0: InstamadilloCoreTypeLink.Link.linkContext:type_name -> InstamadilloCoreTypeLink.LinkContext + 2, // 1: InstamadilloCoreTypeLink.LinkContext.linkImageURL:type_name -> InstamadilloCoreTypeLink.ImageUrl + 3, // 2: InstamadilloCoreTypeLink.LinkContext.linkPreviewThumbnail:type_name -> InstamadilloCoreTypeMedia.Thumbnail + 3, // [3:3] is the sub-list for method output_type + 3, // [3:3] is the sub-list for method input_type + 3, // [3:3] is the sub-list for extension type_name + 3, // [3:3] is the sub-list for extension extendee + 0, // [0:3] is the sub-list for field type_name +} + +func init() { file_instamadilloCoreTypeLink_InstamadilloCoreTypeLink_proto_init() } +func file_instamadilloCoreTypeLink_InstamadilloCoreTypeLink_proto_init() { + if File_instamadilloCoreTypeLink_InstamadilloCoreTypeLink_proto != nil { + return + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: unsafe.Slice(unsafe.StringData(file_instamadilloCoreTypeLink_InstamadilloCoreTypeLink_proto_rawDesc), len(file_instamadilloCoreTypeLink_InstamadilloCoreTypeLink_proto_rawDesc)), + NumEnums: 0, + NumMessages: 3, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_instamadilloCoreTypeLink_InstamadilloCoreTypeLink_proto_goTypes, + DependencyIndexes: file_instamadilloCoreTypeLink_InstamadilloCoreTypeLink_proto_depIdxs, + MessageInfos: file_instamadilloCoreTypeLink_InstamadilloCoreTypeLink_proto_msgTypes, + }.Build() + File_instamadilloCoreTypeLink_InstamadilloCoreTypeLink_proto = out.File + file_instamadilloCoreTypeLink_InstamadilloCoreTypeLink_proto_goTypes = nil + file_instamadilloCoreTypeLink_InstamadilloCoreTypeLink_proto_depIdxs = nil +} diff --git a/vendor/go.mau.fi/whatsmeow/proto/instamadilloCoreTypeLink/InstamadilloCoreTypeLink.proto b/vendor/go.mau.fi/whatsmeow/proto/instamadilloCoreTypeLink/InstamadilloCoreTypeLink.proto new file mode 100644 index 0000000000..e7b66c6a67 --- /dev/null +++ b/vendor/go.mau.fi/whatsmeow/proto/instamadilloCoreTypeLink/InstamadilloCoreTypeLink.proto @@ -0,0 +1,27 @@ +syntax = "proto2"; +package InstamadilloCoreTypeLink; +option go_package = "go.mau.fi/whatsmeow/proto/instamadilloCoreTypeLink"; + +import "instamadilloCoreTypeMedia/InstamadilloCoreTypeMedia.proto"; + +message Link { + optional string text = 1; + optional LinkContext linkContext = 2; +} + +message LinkContext { + optional ImageUrl linkImageURL = 1; + optional string linkPreviewTitle = 2; + optional string linkURL = 3; + optional string linkSummary = 4; + optional string linkMusicPreviewURL = 5; + repeated string linkMusicPreviewCountriesAllowed = 6; + optional InstamadilloCoreTypeMedia.Thumbnail linkPreviewThumbnail = 7; + optional string linkPreviewBody = 8; +} + +message ImageUrl { + optional string URL = 1; + optional int32 width = 2; + optional int32 height = 3; +} diff --git a/vendor/go.mau.fi/whatsmeow/proto/instamadilloCoreTypeMedia/InstamadilloCoreTypeMedia.pb.go b/vendor/go.mau.fi/whatsmeow/proto/instamadilloCoreTypeMedia/InstamadilloCoreTypeMedia.pb.go new file mode 100644 index 0000000000..9dc5b4fa1e --- /dev/null +++ b/vendor/go.mau.fi/whatsmeow/proto/instamadilloCoreTypeMedia/InstamadilloCoreTypeMedia.pb.go @@ -0,0 +1,1299 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.36.10 +// protoc v3.21.12 +// source: instamadilloCoreTypeMedia/InstamadilloCoreTypeMedia.proto + +package instamadilloCoreTypeMedia + +import ( + reflect "reflect" + sync "sync" + unsafe "unsafe" + + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type PjpegScanConfiguration int32 + +const ( + PjpegScanConfiguration_PJPEG_SCAN_CONFIGURATION_UNSPECIFIED PjpegScanConfiguration = 0 + PjpegScanConfiguration_PJPEG_SCAN_CONFIGURATION_WA PjpegScanConfiguration = 1 + PjpegScanConfiguration_PJPEG_SCAN_CONFIGURATION_E15 PjpegScanConfiguration = 2 + PjpegScanConfiguration_PJPEG_SCAN_CONFIGURATION_E35 PjpegScanConfiguration = 3 +) + +// Enum value maps for PjpegScanConfiguration. +var ( + PjpegScanConfiguration_name = map[int32]string{ + 0: "PJPEG_SCAN_CONFIGURATION_UNSPECIFIED", + 1: "PJPEG_SCAN_CONFIGURATION_WA", + 2: "PJPEG_SCAN_CONFIGURATION_E15", + 3: "PJPEG_SCAN_CONFIGURATION_E35", + } + PjpegScanConfiguration_value = map[string]int32{ + "PJPEG_SCAN_CONFIGURATION_UNSPECIFIED": 0, + "PJPEG_SCAN_CONFIGURATION_WA": 1, + "PJPEG_SCAN_CONFIGURATION_E15": 2, + "PJPEG_SCAN_CONFIGURATION_E35": 3, + } +) + +func (x PjpegScanConfiguration) Enum() *PjpegScanConfiguration { + p := new(PjpegScanConfiguration) + *p = x + return p +} + +func (x PjpegScanConfiguration) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (PjpegScanConfiguration) Descriptor() protoreflect.EnumDescriptor { + return file_instamadilloCoreTypeMedia_InstamadilloCoreTypeMedia_proto_enumTypes[0].Descriptor() +} + +func (PjpegScanConfiguration) Type() protoreflect.EnumType { + return &file_instamadilloCoreTypeMedia_InstamadilloCoreTypeMedia_proto_enumTypes[0] +} + +func (x PjpegScanConfiguration) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *PjpegScanConfiguration) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = PjpegScanConfiguration(num) + return nil +} + +// Deprecated: Use PjpegScanConfiguration.Descriptor instead. +func (PjpegScanConfiguration) EnumDescriptor() ([]byte, []int) { + return file_instamadilloCoreTypeMedia_InstamadilloCoreTypeMedia_proto_rawDescGZIP(), []int{0} +} + +type Media_InterventionType int32 + +const ( + Media_UNSET Media_InterventionType = 0 + Media_NONE Media_InterventionType = 1 + Media_NUDE Media_InterventionType = 2 +) + +// Enum value maps for Media_InterventionType. +var ( + Media_InterventionType_name = map[int32]string{ + 0: "UNSET", + 1: "NONE", + 2: "NUDE", + } + Media_InterventionType_value = map[string]int32{ + "UNSET": 0, + "NONE": 1, + "NUDE": 2, + } +) + +func (x Media_InterventionType) Enum() *Media_InterventionType { + p := new(Media_InterventionType) + *p = x + return p +} + +func (x Media_InterventionType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (Media_InterventionType) Descriptor() protoreflect.EnumDescriptor { + return file_instamadilloCoreTypeMedia_InstamadilloCoreTypeMedia_proto_enumTypes[1].Descriptor() +} + +func (Media_InterventionType) Type() protoreflect.EnumType { + return &file_instamadilloCoreTypeMedia_InstamadilloCoreTypeMedia_proto_enumTypes[1] +} + +func (x Media_InterventionType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *Media_InterventionType) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = Media_InterventionType(num) + return nil +} + +// Deprecated: Use Media_InterventionType.Descriptor instead. +func (Media_InterventionType) EnumDescriptor() ([]byte, []int) { + return file_instamadilloCoreTypeMedia_InstamadilloCoreTypeMedia_proto_rawDescGZIP(), []int{0, 0} +} + +type Raven_ViewMode int32 + +const ( + Raven_RAVEN_VIEW_MODEL_UNSPECIFIED Raven_ViewMode = 0 + Raven_RAVEN_VIEW_MODEL_ONCE Raven_ViewMode = 1 + Raven_RAVEN_VIEW_MODEL_REPLAYABLE Raven_ViewMode = 2 + Raven_RAVEN_VIEW_MODEL_PERMANENT Raven_ViewMode = 3 +) + +// Enum value maps for Raven_ViewMode. +var ( + Raven_ViewMode_name = map[int32]string{ + 0: "RAVEN_VIEW_MODEL_UNSPECIFIED", + 1: "RAVEN_VIEW_MODEL_ONCE", + 2: "RAVEN_VIEW_MODEL_REPLAYABLE", + 3: "RAVEN_VIEW_MODEL_PERMANENT", + } + Raven_ViewMode_value = map[string]int32{ + "RAVEN_VIEW_MODEL_UNSPECIFIED": 0, + "RAVEN_VIEW_MODEL_ONCE": 1, + "RAVEN_VIEW_MODEL_REPLAYABLE": 2, + "RAVEN_VIEW_MODEL_PERMANENT": 3, + } +) + +func (x Raven_ViewMode) Enum() *Raven_ViewMode { + p := new(Raven_ViewMode) + *p = x + return p +} + +func (x Raven_ViewMode) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (Raven_ViewMode) Descriptor() protoreflect.EnumDescriptor { + return file_instamadilloCoreTypeMedia_InstamadilloCoreTypeMedia_proto_enumTypes[2].Descriptor() +} + +func (Raven_ViewMode) Type() protoreflect.EnumType { + return &file_instamadilloCoreTypeMedia_InstamadilloCoreTypeMedia_proto_enumTypes[2] +} + +func (x Raven_ViewMode) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *Raven_ViewMode) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = Raven_ViewMode(num) + return nil +} + +// Deprecated: Use Raven_ViewMode.Descriptor instead. +func (Raven_ViewMode) EnumDescriptor() ([]byte, []int) { + return file_instamadilloCoreTypeMedia_InstamadilloCoreTypeMedia_proto_rawDescGZIP(), []int{6, 0} +} + +type Media struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Types that are valid to be assigned to Media: + // + // *Media_StaticPhoto + // *Media_Voice + // *Media_Video + // *Media_Raven + // *Media_Gif + // *Media_AvatarSticker + Media isMedia_Media `protobuf_oneof:"media"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *Media) Reset() { + *x = Media{} + mi := &file_instamadilloCoreTypeMedia_InstamadilloCoreTypeMedia_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *Media) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Media) ProtoMessage() {} + +func (x *Media) ProtoReflect() protoreflect.Message { + mi := &file_instamadilloCoreTypeMedia_InstamadilloCoreTypeMedia_proto_msgTypes[0] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Media.ProtoReflect.Descriptor instead. +func (*Media) Descriptor() ([]byte, []int) { + return file_instamadilloCoreTypeMedia_InstamadilloCoreTypeMedia_proto_rawDescGZIP(), []int{0} +} + +func (x *Media) GetMedia() isMedia_Media { + if x != nil { + return x.Media + } + return nil +} + +func (x *Media) GetStaticPhoto() *StaticPhoto { + if x != nil { + if x, ok := x.Media.(*Media_StaticPhoto); ok { + return x.StaticPhoto + } + } + return nil +} + +func (x *Media) GetVoice() *Voice { + if x != nil { + if x, ok := x.Media.(*Media_Voice); ok { + return x.Voice + } + } + return nil +} + +func (x *Media) GetVideo() *Video { + if x != nil { + if x, ok := x.Media.(*Media_Video); ok { + return x.Video + } + } + return nil +} + +func (x *Media) GetRaven() *Raven { + if x != nil { + if x, ok := x.Media.(*Media_Raven); ok { + return x.Raven + } + } + return nil +} + +func (x *Media) GetGif() *Gif { + if x != nil { + if x, ok := x.Media.(*Media_Gif); ok { + return x.Gif + } + } + return nil +} + +func (x *Media) GetAvatarSticker() *AvatarSticker { + if x != nil { + if x, ok := x.Media.(*Media_AvatarSticker); ok { + return x.AvatarSticker + } + } + return nil +} + +type isMedia_Media interface { + isMedia_Media() +} + +type Media_StaticPhoto struct { + StaticPhoto *StaticPhoto `protobuf:"bytes,1,opt,name=staticPhoto,oneof"` +} + +type Media_Voice struct { + Voice *Voice `protobuf:"bytes,2,opt,name=voice,oneof"` +} + +type Media_Video struct { + Video *Video `protobuf:"bytes,3,opt,name=video,oneof"` +} + +type Media_Raven struct { + Raven *Raven `protobuf:"bytes,4,opt,name=raven,oneof"` +} + +type Media_Gif struct { + Gif *Gif `protobuf:"bytes,5,opt,name=gif,oneof"` +} + +type Media_AvatarSticker struct { + AvatarSticker *AvatarSticker `protobuf:"bytes,6,opt,name=avatarSticker,oneof"` +} + +func (*Media_StaticPhoto) isMedia_Media() {} + +func (*Media_Voice) isMedia_Media() {} + +func (*Media_Video) isMedia_Media() {} + +func (*Media_Raven) isMedia_Media() {} + +func (*Media_Gif) isMedia_Media() {} + +func (*Media_AvatarSticker) isMedia_Media() {} + +type StaticPhoto struct { + state protoimpl.MessageState `protogen:"open.v1"` + MediaTransport *CommonMediaTransport `protobuf:"bytes,1,opt,name=mediaTransport" json:"mediaTransport,omitempty"` + Height *int32 `protobuf:"varint,2,opt,name=height" json:"height,omitempty"` + Width *int32 `protobuf:"varint,3,opt,name=width" json:"width,omitempty"` + ScanLengths []int32 `protobuf:"varint,4,rep,packed,name=scanLengths" json:"scanLengths,omitempty"` + Thumbnail *Thumbnail `protobuf:"bytes,5,opt,name=thumbnail" json:"thumbnail,omitempty"` + PjpegScanConfiguration *PjpegScanConfiguration `protobuf:"varint,6,opt,name=pjpegScanConfiguration,enum=InstamadilloCoreTypeMedia.PjpegScanConfiguration" json:"pjpegScanConfiguration,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *StaticPhoto) Reset() { + *x = StaticPhoto{} + mi := &file_instamadilloCoreTypeMedia_InstamadilloCoreTypeMedia_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *StaticPhoto) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StaticPhoto) ProtoMessage() {} + +func (x *StaticPhoto) ProtoReflect() protoreflect.Message { + mi := &file_instamadilloCoreTypeMedia_InstamadilloCoreTypeMedia_proto_msgTypes[1] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StaticPhoto.ProtoReflect.Descriptor instead. +func (*StaticPhoto) Descriptor() ([]byte, []int) { + return file_instamadilloCoreTypeMedia_InstamadilloCoreTypeMedia_proto_rawDescGZIP(), []int{1} +} + +func (x *StaticPhoto) GetMediaTransport() *CommonMediaTransport { + if x != nil { + return x.MediaTransport + } + return nil +} + +func (x *StaticPhoto) GetHeight() int32 { + if x != nil && x.Height != nil { + return *x.Height + } + return 0 +} + +func (x *StaticPhoto) GetWidth() int32 { + if x != nil && x.Width != nil { + return *x.Width + } + return 0 +} + +func (x *StaticPhoto) GetScanLengths() []int32 { + if x != nil { + return x.ScanLengths + } + return nil +} + +func (x *StaticPhoto) GetThumbnail() *Thumbnail { + if x != nil { + return x.Thumbnail + } + return nil +} + +func (x *StaticPhoto) GetPjpegScanConfiguration() PjpegScanConfiguration { + if x != nil && x.PjpegScanConfiguration != nil { + return *x.PjpegScanConfiguration + } + return PjpegScanConfiguration_PJPEG_SCAN_CONFIGURATION_UNSPECIFIED +} + +type Voice struct { + state protoimpl.MessageState `protogen:"open.v1"` + MediaTransport *CommonMediaTransport `protobuf:"bytes,1,opt,name=mediaTransport" json:"mediaTransport,omitempty"` + Duration *int32 `protobuf:"varint,2,opt,name=duration" json:"duration,omitempty"` + Waveforms []float32 `protobuf:"fixed32,3,rep,packed,name=waveforms" json:"waveforms,omitempty"` + WaveformSamplingFrequencyHz *int32 `protobuf:"varint,4,opt,name=waveformSamplingFrequencyHz" json:"waveformSamplingFrequencyHz,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *Voice) Reset() { + *x = Voice{} + mi := &file_instamadilloCoreTypeMedia_InstamadilloCoreTypeMedia_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *Voice) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Voice) ProtoMessage() {} + +func (x *Voice) ProtoReflect() protoreflect.Message { + mi := &file_instamadilloCoreTypeMedia_InstamadilloCoreTypeMedia_proto_msgTypes[2] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Voice.ProtoReflect.Descriptor instead. +func (*Voice) Descriptor() ([]byte, []int) { + return file_instamadilloCoreTypeMedia_InstamadilloCoreTypeMedia_proto_rawDescGZIP(), []int{2} +} + +func (x *Voice) GetMediaTransport() *CommonMediaTransport { + if x != nil { + return x.MediaTransport + } + return nil +} + +func (x *Voice) GetDuration() int32 { + if x != nil && x.Duration != nil { + return *x.Duration + } + return 0 +} + +func (x *Voice) GetWaveforms() []float32 { + if x != nil { + return x.Waveforms + } + return nil +} + +func (x *Voice) GetWaveformSamplingFrequencyHz() int32 { + if x != nil && x.WaveformSamplingFrequencyHz != nil { + return *x.WaveformSamplingFrequencyHz + } + return 0 +} + +type Video struct { + state protoimpl.MessageState `protogen:"open.v1"` + MediaTransport *CommonMediaTransport `protobuf:"bytes,1,opt,name=mediaTransport" json:"mediaTransport,omitempty"` + Height *int32 `protobuf:"varint,2,opt,name=height" json:"height,omitempty"` + Width *int32 `protobuf:"varint,3,opt,name=width" json:"width,omitempty"` + Thumbnail *Thumbnail `protobuf:"bytes,4,opt,name=thumbnail" json:"thumbnail,omitempty"` + VideoExtraMetadata *VideoExtraMetadata `protobuf:"bytes,5,opt,name=videoExtraMetadata" json:"videoExtraMetadata,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *Video) Reset() { + *x = Video{} + mi := &file_instamadilloCoreTypeMedia_InstamadilloCoreTypeMedia_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *Video) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Video) ProtoMessage() {} + +func (x *Video) ProtoReflect() protoreflect.Message { + mi := &file_instamadilloCoreTypeMedia_InstamadilloCoreTypeMedia_proto_msgTypes[3] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Video.ProtoReflect.Descriptor instead. +func (*Video) Descriptor() ([]byte, []int) { + return file_instamadilloCoreTypeMedia_InstamadilloCoreTypeMedia_proto_rawDescGZIP(), []int{3} +} + +func (x *Video) GetMediaTransport() *CommonMediaTransport { + if x != nil { + return x.MediaTransport + } + return nil +} + +func (x *Video) GetHeight() int32 { + if x != nil && x.Height != nil { + return *x.Height + } + return 0 +} + +func (x *Video) GetWidth() int32 { + if x != nil && x.Width != nil { + return *x.Width + } + return 0 +} + +func (x *Video) GetThumbnail() *Thumbnail { + if x != nil { + return x.Thumbnail + } + return nil +} + +func (x *Video) GetVideoExtraMetadata() *VideoExtraMetadata { + if x != nil { + return x.VideoExtraMetadata + } + return nil +} + +type Gif struct { + state protoimpl.MessageState `protogen:"open.v1"` + MediaTransport *CommonMediaTransport `protobuf:"bytes,1,opt,name=mediaTransport" json:"mediaTransport,omitempty"` + Height *int32 `protobuf:"varint,2,opt,name=height" json:"height,omitempty"` + Width *int32 `protobuf:"varint,3,opt,name=width" json:"width,omitempty"` + IsSticker *bool `protobuf:"varint,4,opt,name=isSticker" json:"isSticker,omitempty"` + StickerID *string `protobuf:"bytes,5,opt,name=stickerID" json:"stickerID,omitempty"` + GifURL *string `protobuf:"bytes,6,opt,name=gifURL" json:"gifURL,omitempty"` + GifSize *int32 `protobuf:"varint,7,opt,name=gifSize" json:"gifSize,omitempty"` + IsRandom *bool `protobuf:"varint,8,opt,name=isRandom" json:"isRandom,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *Gif) Reset() { + *x = Gif{} + mi := &file_instamadilloCoreTypeMedia_InstamadilloCoreTypeMedia_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *Gif) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Gif) ProtoMessage() {} + +func (x *Gif) ProtoReflect() protoreflect.Message { + mi := &file_instamadilloCoreTypeMedia_InstamadilloCoreTypeMedia_proto_msgTypes[4] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Gif.ProtoReflect.Descriptor instead. +func (*Gif) Descriptor() ([]byte, []int) { + return file_instamadilloCoreTypeMedia_InstamadilloCoreTypeMedia_proto_rawDescGZIP(), []int{4} +} + +func (x *Gif) GetMediaTransport() *CommonMediaTransport { + if x != nil { + return x.MediaTransport + } + return nil +} + +func (x *Gif) GetHeight() int32 { + if x != nil && x.Height != nil { + return *x.Height + } + return 0 +} + +func (x *Gif) GetWidth() int32 { + if x != nil && x.Width != nil { + return *x.Width + } + return 0 +} + +func (x *Gif) GetIsSticker() bool { + if x != nil && x.IsSticker != nil { + return *x.IsSticker + } + return false +} + +func (x *Gif) GetStickerID() string { + if x != nil && x.StickerID != nil { + return *x.StickerID + } + return "" +} + +func (x *Gif) GetGifURL() string { + if x != nil && x.GifURL != nil { + return *x.GifURL + } + return "" +} + +func (x *Gif) GetGifSize() int32 { + if x != nil && x.GifSize != nil { + return *x.GifSize + } + return 0 +} + +func (x *Gif) GetIsRandom() bool { + if x != nil && x.IsRandom != nil { + return *x.IsRandom + } + return false +} + +type AvatarSticker struct { + state protoimpl.MessageState `protogen:"open.v1"` + MediaTransport *CommonMediaTransport `protobuf:"bytes,1,opt,name=mediaTransport" json:"mediaTransport,omitempty"` + IsAnimated *bool `protobuf:"varint,2,opt,name=isAnimated" json:"isAnimated,omitempty"` + StickerID *string `protobuf:"bytes,3,opt,name=stickerID" json:"stickerID,omitempty"` + StickerTemplate *string `protobuf:"bytes,4,opt,name=stickerTemplate" json:"stickerTemplate,omitempty"` + NuxType *int32 `protobuf:"varint,5,opt,name=nuxType" json:"nuxType,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *AvatarSticker) Reset() { + *x = AvatarSticker{} + mi := &file_instamadilloCoreTypeMedia_InstamadilloCoreTypeMedia_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *AvatarSticker) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AvatarSticker) ProtoMessage() {} + +func (x *AvatarSticker) ProtoReflect() protoreflect.Message { + mi := &file_instamadilloCoreTypeMedia_InstamadilloCoreTypeMedia_proto_msgTypes[5] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AvatarSticker.ProtoReflect.Descriptor instead. +func (*AvatarSticker) Descriptor() ([]byte, []int) { + return file_instamadilloCoreTypeMedia_InstamadilloCoreTypeMedia_proto_rawDescGZIP(), []int{5} +} + +func (x *AvatarSticker) GetMediaTransport() *CommonMediaTransport { + if x != nil { + return x.MediaTransport + } + return nil +} + +func (x *AvatarSticker) GetIsAnimated() bool { + if x != nil && x.IsAnimated != nil { + return *x.IsAnimated + } + return false +} + +func (x *AvatarSticker) GetStickerID() string { + if x != nil && x.StickerID != nil { + return *x.StickerID + } + return "" +} + +func (x *AvatarSticker) GetStickerTemplate() string { + if x != nil && x.StickerTemplate != nil { + return *x.StickerTemplate + } + return "" +} + +func (x *AvatarSticker) GetNuxType() int32 { + if x != nil && x.NuxType != nil { + return *x.NuxType + } + return 0 +} + +type Raven struct { + state protoimpl.MessageState `protogen:"open.v1"` + ViewMode *Raven_ViewMode `protobuf:"varint,1,opt,name=viewMode,enum=InstamadilloCoreTypeMedia.Raven_ViewMode" json:"viewMode,omitempty"` + Content *RavenContent `protobuf:"bytes,2,opt,name=content" json:"content,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *Raven) Reset() { + *x = Raven{} + mi := &file_instamadilloCoreTypeMedia_InstamadilloCoreTypeMedia_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *Raven) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Raven) ProtoMessage() {} + +func (x *Raven) ProtoReflect() protoreflect.Message { + mi := &file_instamadilloCoreTypeMedia_InstamadilloCoreTypeMedia_proto_msgTypes[6] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Raven.ProtoReflect.Descriptor instead. +func (*Raven) Descriptor() ([]byte, []int) { + return file_instamadilloCoreTypeMedia_InstamadilloCoreTypeMedia_proto_rawDescGZIP(), []int{6} +} + +func (x *Raven) GetViewMode() Raven_ViewMode { + if x != nil && x.ViewMode != nil { + return *x.ViewMode + } + return Raven_RAVEN_VIEW_MODEL_UNSPECIFIED +} + +func (x *Raven) GetContent() *RavenContent { + if x != nil { + return x.Content + } + return nil +} + +type RavenContent struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Types that are valid to be assigned to RavenContent: + // + // *RavenContent_StaticPhoto + // *RavenContent_Video + RavenContent isRavenContent_RavenContent `protobuf_oneof:"ravenContent"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *RavenContent) Reset() { + *x = RavenContent{} + mi := &file_instamadilloCoreTypeMedia_InstamadilloCoreTypeMedia_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *RavenContent) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RavenContent) ProtoMessage() {} + +func (x *RavenContent) ProtoReflect() protoreflect.Message { + mi := &file_instamadilloCoreTypeMedia_InstamadilloCoreTypeMedia_proto_msgTypes[7] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RavenContent.ProtoReflect.Descriptor instead. +func (*RavenContent) Descriptor() ([]byte, []int) { + return file_instamadilloCoreTypeMedia_InstamadilloCoreTypeMedia_proto_rawDescGZIP(), []int{7} +} + +func (x *RavenContent) GetRavenContent() isRavenContent_RavenContent { + if x != nil { + return x.RavenContent + } + return nil +} + +func (x *RavenContent) GetStaticPhoto() *StaticPhoto { + if x != nil { + if x, ok := x.RavenContent.(*RavenContent_StaticPhoto); ok { + return x.StaticPhoto + } + } + return nil +} + +func (x *RavenContent) GetVideo() *Video { + if x != nil { + if x, ok := x.RavenContent.(*RavenContent_Video); ok { + return x.Video + } + } + return nil +} + +type isRavenContent_RavenContent interface { + isRavenContent_RavenContent() +} + +type RavenContent_StaticPhoto struct { + StaticPhoto *StaticPhoto `protobuf:"bytes,1,opt,name=staticPhoto,oneof"` +} + +type RavenContent_Video struct { + Video *Video `protobuf:"bytes,2,opt,name=video,oneof"` +} + +func (*RavenContent_StaticPhoto) isRavenContent_RavenContent() {} + +func (*RavenContent_Video) isRavenContent_RavenContent() {} + +type Thumbnail struct { + state protoimpl.MessageState `protogen:"open.v1"` + MediaTransport *CommonMediaTransport `protobuf:"bytes,1,opt,name=mediaTransport" json:"mediaTransport,omitempty"` + Height *int32 `protobuf:"varint,2,opt,name=height" json:"height,omitempty"` + Width *int32 `protobuf:"varint,3,opt,name=width" json:"width,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *Thumbnail) Reset() { + *x = Thumbnail{} + mi := &file_instamadilloCoreTypeMedia_InstamadilloCoreTypeMedia_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *Thumbnail) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Thumbnail) ProtoMessage() {} + +func (x *Thumbnail) ProtoReflect() protoreflect.Message { + mi := &file_instamadilloCoreTypeMedia_InstamadilloCoreTypeMedia_proto_msgTypes[8] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Thumbnail.ProtoReflect.Descriptor instead. +func (*Thumbnail) Descriptor() ([]byte, []int) { + return file_instamadilloCoreTypeMedia_InstamadilloCoreTypeMedia_proto_rawDescGZIP(), []int{8} +} + +func (x *Thumbnail) GetMediaTransport() *CommonMediaTransport { + if x != nil { + return x.MediaTransport + } + return nil +} + +func (x *Thumbnail) GetHeight() int32 { + if x != nil && x.Height != nil { + return *x.Height + } + return 0 +} + +func (x *Thumbnail) GetWidth() int32 { + if x != nil && x.Width != nil { + return *x.Width + } + return 0 +} + +type CommonMediaTransport struct { + state protoimpl.MessageState `protogen:"open.v1"` + MediaID *string `protobuf:"bytes,1,opt,name=mediaID" json:"mediaID,omitempty"` + FileSHA256 *string `protobuf:"bytes,2,opt,name=fileSHA256" json:"fileSHA256,omitempty"` + MediaKey *string `protobuf:"bytes,3,opt,name=mediaKey" json:"mediaKey,omitempty"` + FileEncSHA256 *string `protobuf:"bytes,4,opt,name=fileEncSHA256" json:"fileEncSHA256,omitempty"` + DirectPath *string `protobuf:"bytes,5,opt,name=directPath" json:"directPath,omitempty"` + MediaKeyTimestamp *string `protobuf:"bytes,6,opt,name=mediaKeyTimestamp" json:"mediaKeyTimestamp,omitempty"` + Sidecar *string `protobuf:"bytes,7,opt,name=sidecar" json:"sidecar,omitempty"` + FileLength *int32 `protobuf:"varint,8,opt,name=fileLength" json:"fileLength,omitempty"` + Mimetype *string `protobuf:"bytes,9,opt,name=mimetype" json:"mimetype,omitempty"` + ObjectID *string `protobuf:"bytes,10,opt,name=objectID" json:"objectID,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *CommonMediaTransport) Reset() { + *x = CommonMediaTransport{} + mi := &file_instamadilloCoreTypeMedia_InstamadilloCoreTypeMedia_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *CommonMediaTransport) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CommonMediaTransport) ProtoMessage() {} + +func (x *CommonMediaTransport) ProtoReflect() protoreflect.Message { + mi := &file_instamadilloCoreTypeMedia_InstamadilloCoreTypeMedia_proto_msgTypes[9] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CommonMediaTransport.ProtoReflect.Descriptor instead. +func (*CommonMediaTransport) Descriptor() ([]byte, []int) { + return file_instamadilloCoreTypeMedia_InstamadilloCoreTypeMedia_proto_rawDescGZIP(), []int{9} +} + +func (x *CommonMediaTransport) GetMediaID() string { + if x != nil && x.MediaID != nil { + return *x.MediaID + } + return "" +} + +func (x *CommonMediaTransport) GetFileSHA256() string { + if x != nil && x.FileSHA256 != nil { + return *x.FileSHA256 + } + return "" +} + +func (x *CommonMediaTransport) GetMediaKey() string { + if x != nil && x.MediaKey != nil { + return *x.MediaKey + } + return "" +} + +func (x *CommonMediaTransport) GetFileEncSHA256() string { + if x != nil && x.FileEncSHA256 != nil { + return *x.FileEncSHA256 + } + return "" +} + +func (x *CommonMediaTransport) GetDirectPath() string { + if x != nil && x.DirectPath != nil { + return *x.DirectPath + } + return "" +} + +func (x *CommonMediaTransport) GetMediaKeyTimestamp() string { + if x != nil && x.MediaKeyTimestamp != nil { + return *x.MediaKeyTimestamp + } + return "" +} + +func (x *CommonMediaTransport) GetSidecar() string { + if x != nil && x.Sidecar != nil { + return *x.Sidecar + } + return "" +} + +func (x *CommonMediaTransport) GetFileLength() int32 { + if x != nil && x.FileLength != nil { + return *x.FileLength + } + return 0 +} + +func (x *CommonMediaTransport) GetMimetype() string { + if x != nil && x.Mimetype != nil { + return *x.Mimetype + } + return "" +} + +func (x *CommonMediaTransport) GetObjectID() string { + if x != nil && x.ObjectID != nil { + return *x.ObjectID + } + return "" +} + +type VideoExtraMetadata struct { + state protoimpl.MessageState `protogen:"open.v1"` + UploadMosClientScore *float32 `protobuf:"fixed32,1,opt,name=uploadMosClientScore" json:"uploadMosClientScore,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *VideoExtraMetadata) Reset() { + *x = VideoExtraMetadata{} + mi := &file_instamadilloCoreTypeMedia_InstamadilloCoreTypeMedia_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *VideoExtraMetadata) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*VideoExtraMetadata) ProtoMessage() {} + +func (x *VideoExtraMetadata) ProtoReflect() protoreflect.Message { + mi := &file_instamadilloCoreTypeMedia_InstamadilloCoreTypeMedia_proto_msgTypes[10] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use VideoExtraMetadata.ProtoReflect.Descriptor instead. +func (*VideoExtraMetadata) Descriptor() ([]byte, []int) { + return file_instamadilloCoreTypeMedia_InstamadilloCoreTypeMedia_proto_rawDescGZIP(), []int{10} +} + +func (x *VideoExtraMetadata) GetUploadMosClientScore() float32 { + if x != nil && x.UploadMosClientScore != nil { + return *x.UploadMosClientScore + } + return 0 +} + +var File_instamadilloCoreTypeMedia_InstamadilloCoreTypeMedia_proto protoreflect.FileDescriptor + +const file_instamadilloCoreTypeMedia_InstamadilloCoreTypeMedia_proto_rawDesc = "" + + "\n" + + "9instamadilloCoreTypeMedia/InstamadilloCoreTypeMedia.proto\x12\x19InstamadilloCoreTypeMedia\"\xc3\x03\n" + + "\x05Media\x12J\n" + + "\vstaticPhoto\x18\x01 \x01(\v2&.InstamadilloCoreTypeMedia.StaticPhotoH\x00R\vstaticPhoto\x128\n" + + "\x05voice\x18\x02 \x01(\v2 .InstamadilloCoreTypeMedia.VoiceH\x00R\x05voice\x128\n" + + "\x05video\x18\x03 \x01(\v2 .InstamadilloCoreTypeMedia.VideoH\x00R\x05video\x128\n" + + "\x05raven\x18\x04 \x01(\v2 .InstamadilloCoreTypeMedia.RavenH\x00R\x05raven\x122\n" + + "\x03gif\x18\x05 \x01(\v2\x1e.InstamadilloCoreTypeMedia.GifH\x00R\x03gif\x12P\n" + + "\ravatarSticker\x18\x06 \x01(\v2(.InstamadilloCoreTypeMedia.AvatarStickerH\x00R\ravatarSticker\"1\n" + + "\x10InterventionType\x12\t\n" + + "\x05UNSET\x10\x00\x12\b\n" + + "\x04NONE\x10\x01\x12\b\n" + + "\x04NUDE\x10\x02B\a\n" + + "\x05media\"\xe9\x02\n" + + "\vStaticPhoto\x12W\n" + + "\x0emediaTransport\x18\x01 \x01(\v2/.InstamadilloCoreTypeMedia.CommonMediaTransportR\x0emediaTransport\x12\x16\n" + + "\x06height\x18\x02 \x01(\x05R\x06height\x12\x14\n" + + "\x05width\x18\x03 \x01(\x05R\x05width\x12$\n" + + "\vscanLengths\x18\x04 \x03(\x05B\x02\x10\x01R\vscanLengths\x12B\n" + + "\tthumbnail\x18\x05 \x01(\v2$.InstamadilloCoreTypeMedia.ThumbnailR\tthumbnail\x12i\n" + + "\x16pjpegScanConfiguration\x18\x06 \x01(\x0e21.InstamadilloCoreTypeMedia.PjpegScanConfigurationR\x16pjpegScanConfiguration\"\xe0\x01\n" + + "\x05Voice\x12W\n" + + "\x0emediaTransport\x18\x01 \x01(\v2/.InstamadilloCoreTypeMedia.CommonMediaTransportR\x0emediaTransport\x12\x1a\n" + + "\bduration\x18\x02 \x01(\x05R\bduration\x12 \n" + + "\twaveforms\x18\x03 \x03(\x02B\x02\x10\x01R\twaveforms\x12@\n" + + "\x1bwaveformSamplingFrequencyHz\x18\x04 \x01(\x05R\x1bwaveformSamplingFrequencyHz\"\xb1\x02\n" + + "\x05Video\x12W\n" + + "\x0emediaTransport\x18\x01 \x01(\v2/.InstamadilloCoreTypeMedia.CommonMediaTransportR\x0emediaTransport\x12\x16\n" + + "\x06height\x18\x02 \x01(\x05R\x06height\x12\x14\n" + + "\x05width\x18\x03 \x01(\x05R\x05width\x12B\n" + + "\tthumbnail\x18\x04 \x01(\v2$.InstamadilloCoreTypeMedia.ThumbnailR\tthumbnail\x12]\n" + + "\x12videoExtraMetadata\x18\x05 \x01(\v2-.InstamadilloCoreTypeMedia.VideoExtraMetadataR\x12videoExtraMetadata\"\x96\x02\n" + + "\x03Gif\x12W\n" + + "\x0emediaTransport\x18\x01 \x01(\v2/.InstamadilloCoreTypeMedia.CommonMediaTransportR\x0emediaTransport\x12\x16\n" + + "\x06height\x18\x02 \x01(\x05R\x06height\x12\x14\n" + + "\x05width\x18\x03 \x01(\x05R\x05width\x12\x1c\n" + + "\tisSticker\x18\x04 \x01(\bR\tisSticker\x12\x1c\n" + + "\tstickerID\x18\x05 \x01(\tR\tstickerID\x12\x16\n" + + "\x06gifURL\x18\x06 \x01(\tR\x06gifURL\x12\x18\n" + + "\agifSize\x18\a \x01(\x05R\agifSize\x12\x1a\n" + + "\bisRandom\x18\b \x01(\bR\bisRandom\"\xea\x01\n" + + "\rAvatarSticker\x12W\n" + + "\x0emediaTransport\x18\x01 \x01(\v2/.InstamadilloCoreTypeMedia.CommonMediaTransportR\x0emediaTransport\x12\x1e\n" + + "\n" + + "isAnimated\x18\x02 \x01(\bR\n" + + "isAnimated\x12\x1c\n" + + "\tstickerID\x18\x03 \x01(\tR\tstickerID\x12(\n" + + "\x0fstickerTemplate\x18\x04 \x01(\tR\x0fstickerTemplate\x12\x18\n" + + "\anuxType\x18\x05 \x01(\x05R\anuxType\"\x9c\x02\n" + + "\x05Raven\x12E\n" + + "\bviewMode\x18\x01 \x01(\x0e2).InstamadilloCoreTypeMedia.Raven.ViewModeR\bviewMode\x12A\n" + + "\acontent\x18\x02 \x01(\v2'.InstamadilloCoreTypeMedia.RavenContentR\acontent\"\x88\x01\n" + + "\bViewMode\x12 \n" + + "\x1cRAVEN_VIEW_MODEL_UNSPECIFIED\x10\x00\x12\x19\n" + + "\x15RAVEN_VIEW_MODEL_ONCE\x10\x01\x12\x1f\n" + + "\x1bRAVEN_VIEW_MODEL_REPLAYABLE\x10\x02\x12\x1e\n" + + "\x1aRAVEN_VIEW_MODEL_PERMANENT\x10\x03\"\xa4\x01\n" + + "\fRavenContent\x12J\n" + + "\vstaticPhoto\x18\x01 \x01(\v2&.InstamadilloCoreTypeMedia.StaticPhotoH\x00R\vstaticPhoto\x128\n" + + "\x05video\x18\x02 \x01(\v2 .InstamadilloCoreTypeMedia.VideoH\x00R\x05videoB\x0e\n" + + "\fravenContent\"\x92\x01\n" + + "\tThumbnail\x12W\n" + + "\x0emediaTransport\x18\x01 \x01(\v2/.InstamadilloCoreTypeMedia.CommonMediaTransportR\x0emediaTransport\x12\x16\n" + + "\x06height\x18\x02 \x01(\x05R\x06height\x12\x14\n" + + "\x05width\x18\x03 \x01(\x05R\x05width\"\xd2\x02\n" + + "\x14CommonMediaTransport\x12\x18\n" + + "\amediaID\x18\x01 \x01(\tR\amediaID\x12\x1e\n" + + "\n" + + "fileSHA256\x18\x02 \x01(\tR\n" + + "fileSHA256\x12\x1a\n" + + "\bmediaKey\x18\x03 \x01(\tR\bmediaKey\x12$\n" + + "\rfileEncSHA256\x18\x04 \x01(\tR\rfileEncSHA256\x12\x1e\n" + + "\n" + + "directPath\x18\x05 \x01(\tR\n" + + "directPath\x12,\n" + + "\x11mediaKeyTimestamp\x18\x06 \x01(\tR\x11mediaKeyTimestamp\x12\x18\n" + + "\asidecar\x18\a \x01(\tR\asidecar\x12\x1e\n" + + "\n" + + "fileLength\x18\b \x01(\x05R\n" + + "fileLength\x12\x1a\n" + + "\bmimetype\x18\t \x01(\tR\bmimetype\x12\x1a\n" + + "\bobjectID\x18\n" + + " \x01(\tR\bobjectID\"H\n" + + "\x12VideoExtraMetadata\x122\n" + + "\x14uploadMosClientScore\x18\x01 \x01(\x02R\x14uploadMosClientScore*\xa7\x01\n" + + "\x16PjpegScanConfiguration\x12(\n" + + "$PJPEG_SCAN_CONFIGURATION_UNSPECIFIED\x10\x00\x12\x1f\n" + + "\x1bPJPEG_SCAN_CONFIGURATION_WA\x10\x01\x12 \n" + + "\x1cPJPEG_SCAN_CONFIGURATION_E15\x10\x02\x12 \n" + + "\x1cPJPEG_SCAN_CONFIGURATION_E35\x10\x03B5Z3go.mau.fi/whatsmeow/proto/instamadilloCoreTypeMedia" + +var ( + file_instamadilloCoreTypeMedia_InstamadilloCoreTypeMedia_proto_rawDescOnce sync.Once + file_instamadilloCoreTypeMedia_InstamadilloCoreTypeMedia_proto_rawDescData []byte +) + +func file_instamadilloCoreTypeMedia_InstamadilloCoreTypeMedia_proto_rawDescGZIP() []byte { + file_instamadilloCoreTypeMedia_InstamadilloCoreTypeMedia_proto_rawDescOnce.Do(func() { + file_instamadilloCoreTypeMedia_InstamadilloCoreTypeMedia_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_instamadilloCoreTypeMedia_InstamadilloCoreTypeMedia_proto_rawDesc), len(file_instamadilloCoreTypeMedia_InstamadilloCoreTypeMedia_proto_rawDesc))) + }) + return file_instamadilloCoreTypeMedia_InstamadilloCoreTypeMedia_proto_rawDescData +} + +var file_instamadilloCoreTypeMedia_InstamadilloCoreTypeMedia_proto_enumTypes = make([]protoimpl.EnumInfo, 3) +var file_instamadilloCoreTypeMedia_InstamadilloCoreTypeMedia_proto_msgTypes = make([]protoimpl.MessageInfo, 11) +var file_instamadilloCoreTypeMedia_InstamadilloCoreTypeMedia_proto_goTypes = []any{ + (PjpegScanConfiguration)(0), // 0: InstamadilloCoreTypeMedia.PjpegScanConfiguration + (Media_InterventionType)(0), // 1: InstamadilloCoreTypeMedia.Media.InterventionType + (Raven_ViewMode)(0), // 2: InstamadilloCoreTypeMedia.Raven.ViewMode + (*Media)(nil), // 3: InstamadilloCoreTypeMedia.Media + (*StaticPhoto)(nil), // 4: InstamadilloCoreTypeMedia.StaticPhoto + (*Voice)(nil), // 5: InstamadilloCoreTypeMedia.Voice + (*Video)(nil), // 6: InstamadilloCoreTypeMedia.Video + (*Gif)(nil), // 7: InstamadilloCoreTypeMedia.Gif + (*AvatarSticker)(nil), // 8: InstamadilloCoreTypeMedia.AvatarSticker + (*Raven)(nil), // 9: InstamadilloCoreTypeMedia.Raven + (*RavenContent)(nil), // 10: InstamadilloCoreTypeMedia.RavenContent + (*Thumbnail)(nil), // 11: InstamadilloCoreTypeMedia.Thumbnail + (*CommonMediaTransport)(nil), // 12: InstamadilloCoreTypeMedia.CommonMediaTransport + (*VideoExtraMetadata)(nil), // 13: InstamadilloCoreTypeMedia.VideoExtraMetadata +} +var file_instamadilloCoreTypeMedia_InstamadilloCoreTypeMedia_proto_depIdxs = []int32{ + 4, // 0: InstamadilloCoreTypeMedia.Media.staticPhoto:type_name -> InstamadilloCoreTypeMedia.StaticPhoto + 5, // 1: InstamadilloCoreTypeMedia.Media.voice:type_name -> InstamadilloCoreTypeMedia.Voice + 6, // 2: InstamadilloCoreTypeMedia.Media.video:type_name -> InstamadilloCoreTypeMedia.Video + 9, // 3: InstamadilloCoreTypeMedia.Media.raven:type_name -> InstamadilloCoreTypeMedia.Raven + 7, // 4: InstamadilloCoreTypeMedia.Media.gif:type_name -> InstamadilloCoreTypeMedia.Gif + 8, // 5: InstamadilloCoreTypeMedia.Media.avatarSticker:type_name -> InstamadilloCoreTypeMedia.AvatarSticker + 12, // 6: InstamadilloCoreTypeMedia.StaticPhoto.mediaTransport:type_name -> InstamadilloCoreTypeMedia.CommonMediaTransport + 11, // 7: InstamadilloCoreTypeMedia.StaticPhoto.thumbnail:type_name -> InstamadilloCoreTypeMedia.Thumbnail + 0, // 8: InstamadilloCoreTypeMedia.StaticPhoto.pjpegScanConfiguration:type_name -> InstamadilloCoreTypeMedia.PjpegScanConfiguration + 12, // 9: InstamadilloCoreTypeMedia.Voice.mediaTransport:type_name -> InstamadilloCoreTypeMedia.CommonMediaTransport + 12, // 10: InstamadilloCoreTypeMedia.Video.mediaTransport:type_name -> InstamadilloCoreTypeMedia.CommonMediaTransport + 11, // 11: InstamadilloCoreTypeMedia.Video.thumbnail:type_name -> InstamadilloCoreTypeMedia.Thumbnail + 13, // 12: InstamadilloCoreTypeMedia.Video.videoExtraMetadata:type_name -> InstamadilloCoreTypeMedia.VideoExtraMetadata + 12, // 13: InstamadilloCoreTypeMedia.Gif.mediaTransport:type_name -> InstamadilloCoreTypeMedia.CommonMediaTransport + 12, // 14: InstamadilloCoreTypeMedia.AvatarSticker.mediaTransport:type_name -> InstamadilloCoreTypeMedia.CommonMediaTransport + 2, // 15: InstamadilloCoreTypeMedia.Raven.viewMode:type_name -> InstamadilloCoreTypeMedia.Raven.ViewMode + 10, // 16: InstamadilloCoreTypeMedia.Raven.content:type_name -> InstamadilloCoreTypeMedia.RavenContent + 4, // 17: InstamadilloCoreTypeMedia.RavenContent.staticPhoto:type_name -> InstamadilloCoreTypeMedia.StaticPhoto + 6, // 18: InstamadilloCoreTypeMedia.RavenContent.video:type_name -> InstamadilloCoreTypeMedia.Video + 12, // 19: InstamadilloCoreTypeMedia.Thumbnail.mediaTransport:type_name -> InstamadilloCoreTypeMedia.CommonMediaTransport + 20, // [20:20] is the sub-list for method output_type + 20, // [20:20] is the sub-list for method input_type + 20, // [20:20] is the sub-list for extension type_name + 20, // [20:20] is the sub-list for extension extendee + 0, // [0:20] is the sub-list for field type_name +} + +func init() { file_instamadilloCoreTypeMedia_InstamadilloCoreTypeMedia_proto_init() } +func file_instamadilloCoreTypeMedia_InstamadilloCoreTypeMedia_proto_init() { + if File_instamadilloCoreTypeMedia_InstamadilloCoreTypeMedia_proto != nil { + return + } + file_instamadilloCoreTypeMedia_InstamadilloCoreTypeMedia_proto_msgTypes[0].OneofWrappers = []any{ + (*Media_StaticPhoto)(nil), + (*Media_Voice)(nil), + (*Media_Video)(nil), + (*Media_Raven)(nil), + (*Media_Gif)(nil), + (*Media_AvatarSticker)(nil), + } + file_instamadilloCoreTypeMedia_InstamadilloCoreTypeMedia_proto_msgTypes[7].OneofWrappers = []any{ + (*RavenContent_StaticPhoto)(nil), + (*RavenContent_Video)(nil), + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: unsafe.Slice(unsafe.StringData(file_instamadilloCoreTypeMedia_InstamadilloCoreTypeMedia_proto_rawDesc), len(file_instamadilloCoreTypeMedia_InstamadilloCoreTypeMedia_proto_rawDesc)), + NumEnums: 3, + NumMessages: 11, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_instamadilloCoreTypeMedia_InstamadilloCoreTypeMedia_proto_goTypes, + DependencyIndexes: file_instamadilloCoreTypeMedia_InstamadilloCoreTypeMedia_proto_depIdxs, + EnumInfos: file_instamadilloCoreTypeMedia_InstamadilloCoreTypeMedia_proto_enumTypes, + MessageInfos: file_instamadilloCoreTypeMedia_InstamadilloCoreTypeMedia_proto_msgTypes, + }.Build() + File_instamadilloCoreTypeMedia_InstamadilloCoreTypeMedia_proto = out.File + file_instamadilloCoreTypeMedia_InstamadilloCoreTypeMedia_proto_goTypes = nil + file_instamadilloCoreTypeMedia_InstamadilloCoreTypeMedia_proto_depIdxs = nil +} diff --git a/vendor/go.mau.fi/whatsmeow/proto/instamadilloCoreTypeMedia/InstamadilloCoreTypeMedia.proto b/vendor/go.mau.fi/whatsmeow/proto/instamadilloCoreTypeMedia/InstamadilloCoreTypeMedia.proto new file mode 100644 index 0000000000..eae154790b --- /dev/null +++ b/vendor/go.mau.fi/whatsmeow/proto/instamadilloCoreTypeMedia/InstamadilloCoreTypeMedia.proto @@ -0,0 +1,112 @@ +syntax = "proto2"; +package InstamadilloCoreTypeMedia; +option go_package = "go.mau.fi/whatsmeow/proto/instamadilloCoreTypeMedia"; + +enum PjpegScanConfiguration { + PJPEG_SCAN_CONFIGURATION_UNSPECIFIED = 0; + PJPEG_SCAN_CONFIGURATION_WA = 1; + PJPEG_SCAN_CONFIGURATION_E15 = 2; + PJPEG_SCAN_CONFIGURATION_E35 = 3; +} + +message Media { + enum InterventionType { + UNSET = 0; + NONE = 1; + NUDE = 2; + } + + oneof media { + StaticPhoto staticPhoto = 1; + Voice voice = 2; + Video video = 3; + Raven raven = 4; + Gif gif = 5; + AvatarSticker avatarSticker = 6; + } +} + +message StaticPhoto { + optional CommonMediaTransport mediaTransport = 1; + optional int32 height = 2; + optional int32 width = 3; + repeated int32 scanLengths = 4 [packed=true]; + optional Thumbnail thumbnail = 5; + optional PjpegScanConfiguration pjpegScanConfiguration = 6; +} + +message Voice { + optional CommonMediaTransport mediaTransport = 1; + optional int32 duration = 2; + repeated float waveforms = 3 [packed=true]; + optional int32 waveformSamplingFrequencyHz = 4; +} + +message Video { + optional CommonMediaTransport mediaTransport = 1; + optional int32 height = 2; + optional int32 width = 3; + optional Thumbnail thumbnail = 4; + optional VideoExtraMetadata videoExtraMetadata = 5; +} + +message Gif { + optional CommonMediaTransport mediaTransport = 1; + optional int32 height = 2; + optional int32 width = 3; + optional bool isSticker = 4; + optional string stickerID = 5; + optional string gifURL = 6; + optional int32 gifSize = 7; + optional bool isRandom = 8; +} + +message AvatarSticker { + optional CommonMediaTransport mediaTransport = 1; + optional bool isAnimated = 2; + optional string stickerID = 3; + optional string stickerTemplate = 4; + optional int32 nuxType = 5; +} + +message Raven { + enum ViewMode { + RAVEN_VIEW_MODEL_UNSPECIFIED = 0; + RAVEN_VIEW_MODEL_ONCE = 1; + RAVEN_VIEW_MODEL_REPLAYABLE = 2; + RAVEN_VIEW_MODEL_PERMANENT = 3; + } + + optional ViewMode viewMode = 1; + optional RavenContent content = 2; +} + +message RavenContent { + oneof ravenContent { + StaticPhoto staticPhoto = 1; + Video video = 2; + } +} + +message Thumbnail { + optional CommonMediaTransport mediaTransport = 1; + optional int32 height = 2; + optional int32 width = 3; +} + +message CommonMediaTransport { + optional string mediaID = 1; + optional string fileSHA256 = 2; + optional string mediaKey = 3; + optional string fileEncSHA256 = 4; + optional string directPath = 5; + optional string mediaKeyTimestamp = 6; + optional string sidecar = 7; + optional int32 fileLength = 8; + optional string mimetype = 9; + optional string objectID = 10; +} + +message VideoExtraMetadata { + optional float uploadMosClientScore = 1; +} diff --git a/vendor/go.mau.fi/whatsmeow/proto/instamadilloCoreTypeText/InstamadilloCoreTypeText.pb.go b/vendor/go.mau.fi/whatsmeow/proto/instamadilloCoreTypeText/InstamadilloCoreTypeText.pb.go new file mode 100644 index 0000000000..ef0180f815 --- /dev/null +++ b/vendor/go.mau.fi/whatsmeow/proto/instamadilloCoreTypeText/InstamadilloCoreTypeText.pb.go @@ -0,0 +1,514 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.36.10 +// protoc v3.21.12 +// source: instamadilloCoreTypeText/InstamadilloCoreTypeText.proto + +package instamadilloCoreTypeText + +import ( + reflect "reflect" + sync "sync" + unsafe "unsafe" + + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + + instamadilloCoreTypeMedia "go.mau.fi/whatsmeow/proto/instamadilloCoreTypeMedia" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type Text_FormatStyle int32 + +const ( + Text_TEXT_FORMAT_STYLE_UNSPECIFIED Text_FormatStyle = 0 + Text_TEXT_FORMAT_STYLE_BOLD Text_FormatStyle = 1 + Text_TEXT_FORMAT_STYLE_ITALIC Text_FormatStyle = 2 + Text_TEXT_FORMAT_STYLE_STRIKETHROUGH Text_FormatStyle = 3 + Text_TEXT_FORMAT_STYLE_UNDERLINE Text_FormatStyle = 4 + Text_TEXT_FORMAT_STYLE_INVALID Text_FormatStyle = 5 +) + +// Enum value maps for Text_FormatStyle. +var ( + Text_FormatStyle_name = map[int32]string{ + 0: "TEXT_FORMAT_STYLE_UNSPECIFIED", + 1: "TEXT_FORMAT_STYLE_BOLD", + 2: "TEXT_FORMAT_STYLE_ITALIC", + 3: "TEXT_FORMAT_STYLE_STRIKETHROUGH", + 4: "TEXT_FORMAT_STYLE_UNDERLINE", + 5: "TEXT_FORMAT_STYLE_INVALID", + } + Text_FormatStyle_value = map[string]int32{ + "TEXT_FORMAT_STYLE_UNSPECIFIED": 0, + "TEXT_FORMAT_STYLE_BOLD": 1, + "TEXT_FORMAT_STYLE_ITALIC": 2, + "TEXT_FORMAT_STYLE_STRIKETHROUGH": 3, + "TEXT_FORMAT_STYLE_UNDERLINE": 4, + "TEXT_FORMAT_STYLE_INVALID": 5, + } +) + +func (x Text_FormatStyle) Enum() *Text_FormatStyle { + p := new(Text_FormatStyle) + *p = x + return p +} + +func (x Text_FormatStyle) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (Text_FormatStyle) Descriptor() protoreflect.EnumDescriptor { + return file_instamadilloCoreTypeText_InstamadilloCoreTypeText_proto_enumTypes[0].Descriptor() +} + +func (Text_FormatStyle) Type() protoreflect.EnumType { + return &file_instamadilloCoreTypeText_InstamadilloCoreTypeText_proto_enumTypes[0] +} + +func (x Text_FormatStyle) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *Text_FormatStyle) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = Text_FormatStyle(num) + return nil +} + +// Deprecated: Use Text_FormatStyle.Descriptor instead. +func (Text_FormatStyle) EnumDescriptor() ([]byte, []int) { + return file_instamadilloCoreTypeText_InstamadilloCoreTypeText_proto_rawDescGZIP(), []int{0, 0} +} + +type Text struct { + state protoimpl.MessageState `protogen:"open.v1"` + Text *string `protobuf:"bytes,1,opt,name=text" json:"text,omitempty"` + IsSuggestedReply *bool `protobuf:"varint,2,opt,name=isSuggestedReply" json:"isSuggestedReply,omitempty"` + PostbackPayload *string `protobuf:"bytes,3,opt,name=postbackPayload" json:"postbackPayload,omitempty"` + PowerUpData *PowerUpsData `protobuf:"bytes,4,opt,name=powerUpData" json:"powerUpData,omitempty"` + Commands []*CommandRangeData `protobuf:"bytes,5,rep,name=commands" json:"commands,omitempty"` + AnimatedEmojiCharacterRanges []*AnimatedEmojiCharacterRange `protobuf:"bytes,6,rep,name=animatedEmojiCharacterRanges" json:"animatedEmojiCharacterRanges,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *Text) Reset() { + *x = Text{} + mi := &file_instamadilloCoreTypeText_InstamadilloCoreTypeText_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *Text) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Text) ProtoMessage() {} + +func (x *Text) ProtoReflect() protoreflect.Message { + mi := &file_instamadilloCoreTypeText_InstamadilloCoreTypeText_proto_msgTypes[0] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Text.ProtoReflect.Descriptor instead. +func (*Text) Descriptor() ([]byte, []int) { + return file_instamadilloCoreTypeText_InstamadilloCoreTypeText_proto_rawDescGZIP(), []int{0} +} + +func (x *Text) GetText() string { + if x != nil && x.Text != nil { + return *x.Text + } + return "" +} + +func (x *Text) GetIsSuggestedReply() bool { + if x != nil && x.IsSuggestedReply != nil { + return *x.IsSuggestedReply + } + return false +} + +func (x *Text) GetPostbackPayload() string { + if x != nil && x.PostbackPayload != nil { + return *x.PostbackPayload + } + return "" +} + +func (x *Text) GetPowerUpData() *PowerUpsData { + if x != nil { + return x.PowerUpData + } + return nil +} + +func (x *Text) GetCommands() []*CommandRangeData { + if x != nil { + return x.Commands + } + return nil +} + +func (x *Text) GetAnimatedEmojiCharacterRanges() []*AnimatedEmojiCharacterRange { + if x != nil { + return x.AnimatedEmojiCharacterRanges + } + return nil +} + +type PowerUpsData struct { + state protoimpl.MessageState `protogen:"open.v1"` + Style *int32 `protobuf:"varint,1,opt,name=style" json:"style,omitempty"` + MediaAttachment *instamadilloCoreTypeMedia.CommonMediaTransport `protobuf:"bytes,2,opt,name=mediaAttachment" json:"mediaAttachment,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *PowerUpsData) Reset() { + *x = PowerUpsData{} + mi := &file_instamadilloCoreTypeText_InstamadilloCoreTypeText_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *PowerUpsData) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PowerUpsData) ProtoMessage() {} + +func (x *PowerUpsData) ProtoReflect() protoreflect.Message { + mi := &file_instamadilloCoreTypeText_InstamadilloCoreTypeText_proto_msgTypes[1] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PowerUpsData.ProtoReflect.Descriptor instead. +func (*PowerUpsData) Descriptor() ([]byte, []int) { + return file_instamadilloCoreTypeText_InstamadilloCoreTypeText_proto_rawDescGZIP(), []int{1} +} + +func (x *PowerUpsData) GetStyle() int32 { + if x != nil && x.Style != nil { + return *x.Style + } + return 0 +} + +func (x *PowerUpsData) GetMediaAttachment() *instamadilloCoreTypeMedia.CommonMediaTransport { + if x != nil { + return x.MediaAttachment + } + return nil +} + +type CommandRangeData struct { + state protoimpl.MessageState `protogen:"open.v1"` + Offset *int32 `protobuf:"varint,1,opt,name=offset" json:"offset,omitempty"` + Length *int32 `protobuf:"varint,2,opt,name=length" json:"length,omitempty"` + Type *int32 `protobuf:"varint,3,opt,name=type" json:"type,omitempty"` + FBID *string `protobuf:"bytes,4,opt,name=FBID" json:"FBID,omitempty"` + UserOrThreadFbid *string `protobuf:"bytes,5,opt,name=userOrThreadFbid" json:"userOrThreadFbid,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *CommandRangeData) Reset() { + *x = CommandRangeData{} + mi := &file_instamadilloCoreTypeText_InstamadilloCoreTypeText_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *CommandRangeData) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CommandRangeData) ProtoMessage() {} + +func (x *CommandRangeData) ProtoReflect() protoreflect.Message { + mi := &file_instamadilloCoreTypeText_InstamadilloCoreTypeText_proto_msgTypes[2] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CommandRangeData.ProtoReflect.Descriptor instead. +func (*CommandRangeData) Descriptor() ([]byte, []int) { + return file_instamadilloCoreTypeText_InstamadilloCoreTypeText_proto_rawDescGZIP(), []int{2} +} + +func (x *CommandRangeData) GetOffset() int32 { + if x != nil && x.Offset != nil { + return *x.Offset + } + return 0 +} + +func (x *CommandRangeData) GetLength() int32 { + if x != nil && x.Length != nil { + return *x.Length + } + return 0 +} + +func (x *CommandRangeData) GetType() int32 { + if x != nil && x.Type != nil { + return *x.Type + } + return 0 +} + +func (x *CommandRangeData) GetFBID() string { + if x != nil && x.FBID != nil { + return *x.FBID + } + return "" +} + +func (x *CommandRangeData) GetUserOrThreadFbid() string { + if x != nil && x.UserOrThreadFbid != nil { + return *x.UserOrThreadFbid + } + return "" +} + +type FormattedText struct { + state protoimpl.MessageState `protogen:"open.v1"` + Offset *int32 `protobuf:"varint,1,opt,name=offset" json:"offset,omitempty"` + Length *int32 `protobuf:"varint,2,opt,name=length" json:"length,omitempty"` + Style *Text_FormatStyle `protobuf:"varint,3,opt,name=style,enum=InstamadilloCoreTypeText.Text_FormatStyle" json:"style,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *FormattedText) Reset() { + *x = FormattedText{} + mi := &file_instamadilloCoreTypeText_InstamadilloCoreTypeText_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *FormattedText) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*FormattedText) ProtoMessage() {} + +func (x *FormattedText) ProtoReflect() protoreflect.Message { + mi := &file_instamadilloCoreTypeText_InstamadilloCoreTypeText_proto_msgTypes[3] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use FormattedText.ProtoReflect.Descriptor instead. +func (*FormattedText) Descriptor() ([]byte, []int) { + return file_instamadilloCoreTypeText_InstamadilloCoreTypeText_proto_rawDescGZIP(), []int{3} +} + +func (x *FormattedText) GetOffset() int32 { + if x != nil && x.Offset != nil { + return *x.Offset + } + return 0 +} + +func (x *FormattedText) GetLength() int32 { + if x != nil && x.Length != nil { + return *x.Length + } + return 0 +} + +func (x *FormattedText) GetStyle() Text_FormatStyle { + if x != nil && x.Style != nil { + return *x.Style + } + return Text_TEXT_FORMAT_STYLE_UNSPECIFIED +} + +type AnimatedEmojiCharacterRange struct { + state protoimpl.MessageState `protogen:"open.v1"` + Offset *int32 `protobuf:"varint,1,opt,name=offset" json:"offset,omitempty"` + Length *int32 `protobuf:"varint,2,opt,name=length" json:"length,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *AnimatedEmojiCharacterRange) Reset() { + *x = AnimatedEmojiCharacterRange{} + mi := &file_instamadilloCoreTypeText_InstamadilloCoreTypeText_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *AnimatedEmojiCharacterRange) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AnimatedEmojiCharacterRange) ProtoMessage() {} + +func (x *AnimatedEmojiCharacterRange) ProtoReflect() protoreflect.Message { + mi := &file_instamadilloCoreTypeText_InstamadilloCoreTypeText_proto_msgTypes[4] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AnimatedEmojiCharacterRange.ProtoReflect.Descriptor instead. +func (*AnimatedEmojiCharacterRange) Descriptor() ([]byte, []int) { + return file_instamadilloCoreTypeText_InstamadilloCoreTypeText_proto_rawDescGZIP(), []int{4} +} + +func (x *AnimatedEmojiCharacterRange) GetOffset() int32 { + if x != nil && x.Offset != nil { + return *x.Offset + } + return 0 +} + +func (x *AnimatedEmojiCharacterRange) GetLength() int32 { + if x != nil && x.Length != nil { + return *x.Length + } + return 0 +} + +var File_instamadilloCoreTypeText_InstamadilloCoreTypeText_proto protoreflect.FileDescriptor + +const file_instamadilloCoreTypeText_InstamadilloCoreTypeText_proto_rawDesc = "" + + "\n" + + "7instamadilloCoreTypeText/InstamadilloCoreTypeText.proto\x12\x18InstamadilloCoreTypeText\x1a9instamadilloCoreTypeMedia/InstamadilloCoreTypeMedia.proto\"\xcf\x04\n" + + "\x04Text\x12\x12\n" + + "\x04text\x18\x01 \x01(\tR\x04text\x12*\n" + + "\x10isSuggestedReply\x18\x02 \x01(\bR\x10isSuggestedReply\x12(\n" + + "\x0fpostbackPayload\x18\x03 \x01(\tR\x0fpostbackPayload\x12H\n" + + "\vpowerUpData\x18\x04 \x01(\v2&.InstamadilloCoreTypeText.PowerUpsDataR\vpowerUpData\x12F\n" + + "\bcommands\x18\x05 \x03(\v2*.InstamadilloCoreTypeText.CommandRangeDataR\bcommands\x12y\n" + + "\x1canimatedEmojiCharacterRanges\x18\x06 \x03(\v25.InstamadilloCoreTypeText.AnimatedEmojiCharacterRangeR\x1canimatedEmojiCharacterRanges\"\xcf\x01\n" + + "\vFormatStyle\x12!\n" + + "\x1dTEXT_FORMAT_STYLE_UNSPECIFIED\x10\x00\x12\x1a\n" + + "\x16TEXT_FORMAT_STYLE_BOLD\x10\x01\x12\x1c\n" + + "\x18TEXT_FORMAT_STYLE_ITALIC\x10\x02\x12#\n" + + "\x1fTEXT_FORMAT_STYLE_STRIKETHROUGH\x10\x03\x12\x1f\n" + + "\x1bTEXT_FORMAT_STYLE_UNDERLINE\x10\x04\x12\x1d\n" + + "\x19TEXT_FORMAT_STYLE_INVALID\x10\x05\"\x7f\n" + + "\fPowerUpsData\x12\x14\n" + + "\x05style\x18\x01 \x01(\x05R\x05style\x12Y\n" + + "\x0fmediaAttachment\x18\x02 \x01(\v2/.InstamadilloCoreTypeMedia.CommonMediaTransportR\x0fmediaAttachment\"\x96\x01\n" + + "\x10CommandRangeData\x12\x16\n" + + "\x06offset\x18\x01 \x01(\x05R\x06offset\x12\x16\n" + + "\x06length\x18\x02 \x01(\x05R\x06length\x12\x12\n" + + "\x04type\x18\x03 \x01(\x05R\x04type\x12\x12\n" + + "\x04FBID\x18\x04 \x01(\tR\x04FBID\x12*\n" + + "\x10userOrThreadFbid\x18\x05 \x01(\tR\x10userOrThreadFbid\"\x81\x01\n" + + "\rFormattedText\x12\x16\n" + + "\x06offset\x18\x01 \x01(\x05R\x06offset\x12\x16\n" + + "\x06length\x18\x02 \x01(\x05R\x06length\x12@\n" + + "\x05style\x18\x03 \x01(\x0e2*.InstamadilloCoreTypeText.Text.FormatStyleR\x05style\"M\n" + + "\x1bAnimatedEmojiCharacterRange\x12\x16\n" + + "\x06offset\x18\x01 \x01(\x05R\x06offset\x12\x16\n" + + "\x06length\x18\x02 \x01(\x05R\x06lengthB4Z2go.mau.fi/whatsmeow/proto/instamadilloCoreTypeText" + +var ( + file_instamadilloCoreTypeText_InstamadilloCoreTypeText_proto_rawDescOnce sync.Once + file_instamadilloCoreTypeText_InstamadilloCoreTypeText_proto_rawDescData []byte +) + +func file_instamadilloCoreTypeText_InstamadilloCoreTypeText_proto_rawDescGZIP() []byte { + file_instamadilloCoreTypeText_InstamadilloCoreTypeText_proto_rawDescOnce.Do(func() { + file_instamadilloCoreTypeText_InstamadilloCoreTypeText_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_instamadilloCoreTypeText_InstamadilloCoreTypeText_proto_rawDesc), len(file_instamadilloCoreTypeText_InstamadilloCoreTypeText_proto_rawDesc))) + }) + return file_instamadilloCoreTypeText_InstamadilloCoreTypeText_proto_rawDescData +} + +var file_instamadilloCoreTypeText_InstamadilloCoreTypeText_proto_enumTypes = make([]protoimpl.EnumInfo, 1) +var file_instamadilloCoreTypeText_InstamadilloCoreTypeText_proto_msgTypes = make([]protoimpl.MessageInfo, 5) +var file_instamadilloCoreTypeText_InstamadilloCoreTypeText_proto_goTypes = []any{ + (Text_FormatStyle)(0), // 0: InstamadilloCoreTypeText.Text.FormatStyle + (*Text)(nil), // 1: InstamadilloCoreTypeText.Text + (*PowerUpsData)(nil), // 2: InstamadilloCoreTypeText.PowerUpsData + (*CommandRangeData)(nil), // 3: InstamadilloCoreTypeText.CommandRangeData + (*FormattedText)(nil), // 4: InstamadilloCoreTypeText.FormattedText + (*AnimatedEmojiCharacterRange)(nil), // 5: InstamadilloCoreTypeText.AnimatedEmojiCharacterRange + (*instamadilloCoreTypeMedia.CommonMediaTransport)(nil), // 6: InstamadilloCoreTypeMedia.CommonMediaTransport +} +var file_instamadilloCoreTypeText_InstamadilloCoreTypeText_proto_depIdxs = []int32{ + 2, // 0: InstamadilloCoreTypeText.Text.powerUpData:type_name -> InstamadilloCoreTypeText.PowerUpsData + 3, // 1: InstamadilloCoreTypeText.Text.commands:type_name -> InstamadilloCoreTypeText.CommandRangeData + 5, // 2: InstamadilloCoreTypeText.Text.animatedEmojiCharacterRanges:type_name -> InstamadilloCoreTypeText.AnimatedEmojiCharacterRange + 6, // 3: InstamadilloCoreTypeText.PowerUpsData.mediaAttachment:type_name -> InstamadilloCoreTypeMedia.CommonMediaTransport + 0, // 4: InstamadilloCoreTypeText.FormattedText.style:type_name -> InstamadilloCoreTypeText.Text.FormatStyle + 5, // [5:5] is the sub-list for method output_type + 5, // [5:5] is the sub-list for method input_type + 5, // [5:5] is the sub-list for extension type_name + 5, // [5:5] is the sub-list for extension extendee + 0, // [0:5] is the sub-list for field type_name +} + +func init() { file_instamadilloCoreTypeText_InstamadilloCoreTypeText_proto_init() } +func file_instamadilloCoreTypeText_InstamadilloCoreTypeText_proto_init() { + if File_instamadilloCoreTypeText_InstamadilloCoreTypeText_proto != nil { + return + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: unsafe.Slice(unsafe.StringData(file_instamadilloCoreTypeText_InstamadilloCoreTypeText_proto_rawDesc), len(file_instamadilloCoreTypeText_InstamadilloCoreTypeText_proto_rawDesc)), + NumEnums: 1, + NumMessages: 5, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_instamadilloCoreTypeText_InstamadilloCoreTypeText_proto_goTypes, + DependencyIndexes: file_instamadilloCoreTypeText_InstamadilloCoreTypeText_proto_depIdxs, + EnumInfos: file_instamadilloCoreTypeText_InstamadilloCoreTypeText_proto_enumTypes, + MessageInfos: file_instamadilloCoreTypeText_InstamadilloCoreTypeText_proto_msgTypes, + }.Build() + File_instamadilloCoreTypeText_InstamadilloCoreTypeText_proto = out.File + file_instamadilloCoreTypeText_InstamadilloCoreTypeText_proto_goTypes = nil + file_instamadilloCoreTypeText_InstamadilloCoreTypeText_proto_depIdxs = nil +} diff --git a/vendor/go.mau.fi/whatsmeow/proto/instamadilloCoreTypeText/InstamadilloCoreTypeText.proto b/vendor/go.mau.fi/whatsmeow/proto/instamadilloCoreTypeText/InstamadilloCoreTypeText.proto new file mode 100644 index 0000000000..8c62e8d3ad --- /dev/null +++ b/vendor/go.mau.fi/whatsmeow/proto/instamadilloCoreTypeText/InstamadilloCoreTypeText.proto @@ -0,0 +1,47 @@ +syntax = "proto2"; +package InstamadilloCoreTypeText; +option go_package = "go.mau.fi/whatsmeow/proto/instamadilloCoreTypeText"; + +import "instamadilloCoreTypeMedia/InstamadilloCoreTypeMedia.proto"; + +message Text { + enum FormatStyle { + TEXT_FORMAT_STYLE_UNSPECIFIED = 0; + TEXT_FORMAT_STYLE_BOLD = 1; + TEXT_FORMAT_STYLE_ITALIC = 2; + TEXT_FORMAT_STYLE_STRIKETHROUGH = 3; + TEXT_FORMAT_STYLE_UNDERLINE = 4; + TEXT_FORMAT_STYLE_INVALID = 5; + } + + optional string text = 1; + optional bool isSuggestedReply = 2; + optional string postbackPayload = 3; + optional PowerUpsData powerUpData = 4; + repeated CommandRangeData commands = 5; + repeated AnimatedEmojiCharacterRange animatedEmojiCharacterRanges = 6; +} + +message PowerUpsData { + optional int32 style = 1; + optional InstamadilloCoreTypeMedia.CommonMediaTransport mediaAttachment = 2; +} + +message CommandRangeData { + optional int32 offset = 1; + optional int32 length = 2; + optional int32 type = 3; + optional string FBID = 4; + optional string userOrThreadFbid = 5; +} + +message FormattedText { + optional int32 offset = 1; + optional int32 length = 2; + optional Text.FormatStyle style = 3; +} + +message AnimatedEmojiCharacterRange { + optional int32 offset = 1; + optional int32 length = 2; +} diff --git a/vendor/go.mau.fi/whatsmeow/proto/instamadilloDeleteMessage/InstamadilloDeleteMessage.pb.go b/vendor/go.mau.fi/whatsmeow/proto/instamadilloDeleteMessage/InstamadilloDeleteMessage.pb.go new file mode 100644 index 0000000000..5b732e6f0f --- /dev/null +++ b/vendor/go.mau.fi/whatsmeow/proto/instamadilloDeleteMessage/InstamadilloDeleteMessage.pb.go @@ -0,0 +1,123 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.36.10 +// protoc v3.21.12 +// source: instamadilloDeleteMessage/InstamadilloDeleteMessage.proto + +package instamadilloDeleteMessage + +import ( + reflect "reflect" + sync "sync" + unsafe "unsafe" + + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type DeleteMessagePayload struct { + state protoimpl.MessageState `protogen:"open.v1"` + MessageOtid *string `protobuf:"bytes,1,opt,name=messageOtid" json:"messageOtid,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *DeleteMessagePayload) Reset() { + *x = DeleteMessagePayload{} + mi := &file_instamadilloDeleteMessage_InstamadilloDeleteMessage_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *DeleteMessagePayload) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DeleteMessagePayload) ProtoMessage() {} + +func (x *DeleteMessagePayload) ProtoReflect() protoreflect.Message { + mi := &file_instamadilloDeleteMessage_InstamadilloDeleteMessage_proto_msgTypes[0] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DeleteMessagePayload.ProtoReflect.Descriptor instead. +func (*DeleteMessagePayload) Descriptor() ([]byte, []int) { + return file_instamadilloDeleteMessage_InstamadilloDeleteMessage_proto_rawDescGZIP(), []int{0} +} + +func (x *DeleteMessagePayload) GetMessageOtid() string { + if x != nil && x.MessageOtid != nil { + return *x.MessageOtid + } + return "" +} + +var File_instamadilloDeleteMessage_InstamadilloDeleteMessage_proto protoreflect.FileDescriptor + +const file_instamadilloDeleteMessage_InstamadilloDeleteMessage_proto_rawDesc = "" + + "\n" + + "9instamadilloDeleteMessage/InstamadilloDeleteMessage.proto\x12\x19InstamadilloDeleteMessage\"8\n" + + "\x14DeleteMessagePayload\x12 \n" + + "\vmessageOtid\x18\x01 \x01(\tR\vmessageOtidB5Z3go.mau.fi/whatsmeow/proto/instamadilloDeleteMessage" + +var ( + file_instamadilloDeleteMessage_InstamadilloDeleteMessage_proto_rawDescOnce sync.Once + file_instamadilloDeleteMessage_InstamadilloDeleteMessage_proto_rawDescData []byte +) + +func file_instamadilloDeleteMessage_InstamadilloDeleteMessage_proto_rawDescGZIP() []byte { + file_instamadilloDeleteMessage_InstamadilloDeleteMessage_proto_rawDescOnce.Do(func() { + file_instamadilloDeleteMessage_InstamadilloDeleteMessage_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_instamadilloDeleteMessage_InstamadilloDeleteMessage_proto_rawDesc), len(file_instamadilloDeleteMessage_InstamadilloDeleteMessage_proto_rawDesc))) + }) + return file_instamadilloDeleteMessage_InstamadilloDeleteMessage_proto_rawDescData +} + +var file_instamadilloDeleteMessage_InstamadilloDeleteMessage_proto_msgTypes = make([]protoimpl.MessageInfo, 1) +var file_instamadilloDeleteMessage_InstamadilloDeleteMessage_proto_goTypes = []any{ + (*DeleteMessagePayload)(nil), // 0: InstamadilloDeleteMessage.DeleteMessagePayload +} +var file_instamadilloDeleteMessage_InstamadilloDeleteMessage_proto_depIdxs = []int32{ + 0, // [0:0] is the sub-list for method output_type + 0, // [0:0] is the sub-list for method input_type + 0, // [0:0] is the sub-list for extension type_name + 0, // [0:0] is the sub-list for extension extendee + 0, // [0:0] is the sub-list for field type_name +} + +func init() { file_instamadilloDeleteMessage_InstamadilloDeleteMessage_proto_init() } +func file_instamadilloDeleteMessage_InstamadilloDeleteMessage_proto_init() { + if File_instamadilloDeleteMessage_InstamadilloDeleteMessage_proto != nil { + return + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: unsafe.Slice(unsafe.StringData(file_instamadilloDeleteMessage_InstamadilloDeleteMessage_proto_rawDesc), len(file_instamadilloDeleteMessage_InstamadilloDeleteMessage_proto_rawDesc)), + NumEnums: 0, + NumMessages: 1, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_instamadilloDeleteMessage_InstamadilloDeleteMessage_proto_goTypes, + DependencyIndexes: file_instamadilloDeleteMessage_InstamadilloDeleteMessage_proto_depIdxs, + MessageInfos: file_instamadilloDeleteMessage_InstamadilloDeleteMessage_proto_msgTypes, + }.Build() + File_instamadilloDeleteMessage_InstamadilloDeleteMessage_proto = out.File + file_instamadilloDeleteMessage_InstamadilloDeleteMessage_proto_goTypes = nil + file_instamadilloDeleteMessage_InstamadilloDeleteMessage_proto_depIdxs = nil +} diff --git a/vendor/go.mau.fi/whatsmeow/proto/instamadilloDeleteMessage/InstamadilloDeleteMessage.proto b/vendor/go.mau.fi/whatsmeow/proto/instamadilloDeleteMessage/InstamadilloDeleteMessage.proto new file mode 100644 index 0000000000..0cd7a9ddcb --- /dev/null +++ b/vendor/go.mau.fi/whatsmeow/proto/instamadilloDeleteMessage/InstamadilloDeleteMessage.proto @@ -0,0 +1,7 @@ +syntax = "proto2"; +package InstamadilloDeleteMessage; +option go_package = "go.mau.fi/whatsmeow/proto/instamadilloDeleteMessage"; + +message DeleteMessagePayload { + optional string messageOtid = 1; +} diff --git a/vendor/go.mau.fi/whatsmeow/proto/instamadilloDeleteMessage/extra.go b/vendor/go.mau.fi/whatsmeow/proto/instamadilloDeleteMessage/extra.go new file mode 100644 index 0000000000..908ae34b0c --- /dev/null +++ b/vendor/go.mau.fi/whatsmeow/proto/instamadilloDeleteMessage/extra.go @@ -0,0 +1,3 @@ +package instamadilloDeleteMessage + +func (*DeleteMessagePayload) IsMessageApplicationSub() {} diff --git a/vendor/go.mau.fi/whatsmeow/proto/instamadilloSupplementMessage/InstamadilloSupplementMessage.pb.go b/vendor/go.mau.fi/whatsmeow/proto/instamadilloSupplementMessage/InstamadilloSupplementMessage.pb.go new file mode 100644 index 0000000000..be1b87a821 --- /dev/null +++ b/vendor/go.mau.fi/whatsmeow/proto/instamadilloSupplementMessage/InstamadilloSupplementMessage.pb.go @@ -0,0 +1,720 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.36.10 +// protoc v3.21.12 +// source: instamadilloSupplementMessage/InstamadilloSupplementMessage.proto + +package instamadilloSupplementMessage + +import ( + reflect "reflect" + sync "sync" + unsafe "unsafe" + + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + + instamadilloCoreTypeMedia "go.mau.fi/whatsmeow/proto/instamadilloCoreTypeMedia" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type SupplementMessagePayload struct { + state protoimpl.MessageState `protogen:"open.v1"` + TargetMessageOtid *string `protobuf:"bytes,1,opt,name=targetMessageOtid" json:"targetMessageOtid,omitempty"` + UniquingKeyForSupplementalData *string `protobuf:"bytes,2,opt,name=uniquingKeyForSupplementalData" json:"uniquingKeyForSupplementalData,omitempty"` + Content *SupplementMessageContent `protobuf:"bytes,3,opt,name=content" json:"content,omitempty"` + TargetMessageWaServerTimeSec *string `protobuf:"bytes,4,opt,name=targetMessageWaServerTimeSec" json:"targetMessageWaServerTimeSec,omitempty"` + TargetWaThreadID *string `protobuf:"bytes,5,opt,name=targetWaThreadID" json:"targetWaThreadID,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *SupplementMessagePayload) Reset() { + *x = SupplementMessagePayload{} + mi := &file_instamadilloSupplementMessage_InstamadilloSupplementMessage_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *SupplementMessagePayload) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SupplementMessagePayload) ProtoMessage() {} + +func (x *SupplementMessagePayload) ProtoReflect() protoreflect.Message { + mi := &file_instamadilloSupplementMessage_InstamadilloSupplementMessage_proto_msgTypes[0] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SupplementMessagePayload.ProtoReflect.Descriptor instead. +func (*SupplementMessagePayload) Descriptor() ([]byte, []int) { + return file_instamadilloSupplementMessage_InstamadilloSupplementMessage_proto_rawDescGZIP(), []int{0} +} + +func (x *SupplementMessagePayload) GetTargetMessageOtid() string { + if x != nil && x.TargetMessageOtid != nil { + return *x.TargetMessageOtid + } + return "" +} + +func (x *SupplementMessagePayload) GetUniquingKeyForSupplementalData() string { + if x != nil && x.UniquingKeyForSupplementalData != nil { + return *x.UniquingKeyForSupplementalData + } + return "" +} + +func (x *SupplementMessagePayload) GetContent() *SupplementMessageContent { + if x != nil { + return x.Content + } + return nil +} + +func (x *SupplementMessagePayload) GetTargetMessageWaServerTimeSec() string { + if x != nil && x.TargetMessageWaServerTimeSec != nil { + return *x.TargetMessageWaServerTimeSec + } + return "" +} + +func (x *SupplementMessagePayload) GetTargetWaThreadID() string { + if x != nil && x.TargetWaThreadID != nil { + return *x.TargetWaThreadID + } + return "" +} + +type SupplementMessageContent struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Types that are valid to be assigned to SupplementMessageContent: + // + // *SupplementMessageContent_Reaction + // *SupplementMessageContent_ContentView + // *SupplementMessageContent_EditText + // *SupplementMessageContent_MediaReaction + // *SupplementMessageContent_OriginalTransportPayload + // *SupplementMessageContent_MediaInterventions + SupplementMessageContent isSupplementMessageContent_SupplementMessageContent `protobuf_oneof:"supplementMessageContent"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *SupplementMessageContent) Reset() { + *x = SupplementMessageContent{} + mi := &file_instamadilloSupplementMessage_InstamadilloSupplementMessage_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *SupplementMessageContent) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SupplementMessageContent) ProtoMessage() {} + +func (x *SupplementMessageContent) ProtoReflect() protoreflect.Message { + mi := &file_instamadilloSupplementMessage_InstamadilloSupplementMessage_proto_msgTypes[1] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SupplementMessageContent.ProtoReflect.Descriptor instead. +func (*SupplementMessageContent) Descriptor() ([]byte, []int) { + return file_instamadilloSupplementMessage_InstamadilloSupplementMessage_proto_rawDescGZIP(), []int{1} +} + +func (x *SupplementMessageContent) GetSupplementMessageContent() isSupplementMessageContent_SupplementMessageContent { + if x != nil { + return x.SupplementMessageContent + } + return nil +} + +func (x *SupplementMessageContent) GetReaction() *Reaction { + if x != nil { + if x, ok := x.SupplementMessageContent.(*SupplementMessageContent_Reaction); ok { + return x.Reaction + } + } + return nil +} + +func (x *SupplementMessageContent) GetContentView() *ContentView { + if x != nil { + if x, ok := x.SupplementMessageContent.(*SupplementMessageContent_ContentView); ok { + return x.ContentView + } + } + return nil +} + +func (x *SupplementMessageContent) GetEditText() *EditText { + if x != nil { + if x, ok := x.SupplementMessageContent.(*SupplementMessageContent_EditText); ok { + return x.EditText + } + } + return nil +} + +func (x *SupplementMessageContent) GetMediaReaction() *MediaReaction { + if x != nil { + if x, ok := x.SupplementMessageContent.(*SupplementMessageContent_MediaReaction); ok { + return x.MediaReaction + } + } + return nil +} + +func (x *SupplementMessageContent) GetOriginalTransportPayload() *OriginalTransportPayload { + if x != nil { + if x, ok := x.SupplementMessageContent.(*SupplementMessageContent_OriginalTransportPayload); ok { + return x.OriginalTransportPayload + } + } + return nil +} + +func (x *SupplementMessageContent) GetMediaInterventions() *MediaInterventions { + if x != nil { + if x, ok := x.SupplementMessageContent.(*SupplementMessageContent_MediaInterventions); ok { + return x.MediaInterventions + } + } + return nil +} + +type isSupplementMessageContent_SupplementMessageContent interface { + isSupplementMessageContent_SupplementMessageContent() +} + +type SupplementMessageContent_Reaction struct { + Reaction *Reaction `protobuf:"bytes,1,opt,name=reaction,oneof"` +} + +type SupplementMessageContent_ContentView struct { + ContentView *ContentView `protobuf:"bytes,2,opt,name=contentView,oneof"` +} + +type SupplementMessageContent_EditText struct { + EditText *EditText `protobuf:"bytes,3,opt,name=editText,oneof"` +} + +type SupplementMessageContent_MediaReaction struct { + MediaReaction *MediaReaction `protobuf:"bytes,4,opt,name=mediaReaction,oneof"` +} + +type SupplementMessageContent_OriginalTransportPayload struct { + OriginalTransportPayload *OriginalTransportPayload `protobuf:"bytes,5,opt,name=originalTransportPayload,oneof"` +} + +type SupplementMessageContent_MediaInterventions struct { + MediaInterventions *MediaInterventions `protobuf:"bytes,6,opt,name=mediaInterventions,oneof"` +} + +func (*SupplementMessageContent_Reaction) isSupplementMessageContent_SupplementMessageContent() {} + +func (*SupplementMessageContent_ContentView) isSupplementMessageContent_SupplementMessageContent() {} + +func (*SupplementMessageContent_EditText) isSupplementMessageContent_SupplementMessageContent() {} + +func (*SupplementMessageContent_MediaReaction) isSupplementMessageContent_SupplementMessageContent() { +} + +func (*SupplementMessageContent_OriginalTransportPayload) isSupplementMessageContent_SupplementMessageContent() { +} + +func (*SupplementMessageContent_MediaInterventions) isSupplementMessageContent_SupplementMessageContent() { +} + +type MediaReaction struct { + state protoimpl.MessageState `protogen:"open.v1"` + MediaID *string `protobuf:"bytes,1,opt,name=mediaID" json:"mediaID,omitempty"` + Reaction *Reaction `protobuf:"bytes,2,opt,name=reaction" json:"reaction,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *MediaReaction) Reset() { + *x = MediaReaction{} + mi := &file_instamadilloSupplementMessage_InstamadilloSupplementMessage_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *MediaReaction) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MediaReaction) ProtoMessage() {} + +func (x *MediaReaction) ProtoReflect() protoreflect.Message { + mi := &file_instamadilloSupplementMessage_InstamadilloSupplementMessage_proto_msgTypes[2] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MediaReaction.ProtoReflect.Descriptor instead. +func (*MediaReaction) Descriptor() ([]byte, []int) { + return file_instamadilloSupplementMessage_InstamadilloSupplementMessage_proto_rawDescGZIP(), []int{2} +} + +func (x *MediaReaction) GetMediaID() string { + if x != nil && x.MediaID != nil { + return *x.MediaID + } + return "" +} + +func (x *MediaReaction) GetReaction() *Reaction { + if x != nil { + return x.Reaction + } + return nil +} + +type Reaction struct { + state protoimpl.MessageState `protogen:"open.v1"` + ReactionType *string `protobuf:"bytes,1,opt,name=reactionType" json:"reactionType,omitempty"` + ReactionStatus *string `protobuf:"bytes,2,opt,name=reactionStatus" json:"reactionStatus,omitempty"` + Emoji *string `protobuf:"bytes,3,opt,name=emoji" json:"emoji,omitempty"` + SuperReactType *string `protobuf:"bytes,4,opt,name=superReactType" json:"superReactType,omitempty"` + ActionLogOtid *string `protobuf:"bytes,5,opt,name=actionLogOtid" json:"actionLogOtid,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *Reaction) Reset() { + *x = Reaction{} + mi := &file_instamadilloSupplementMessage_InstamadilloSupplementMessage_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *Reaction) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Reaction) ProtoMessage() {} + +func (x *Reaction) ProtoReflect() protoreflect.Message { + mi := &file_instamadilloSupplementMessage_InstamadilloSupplementMessage_proto_msgTypes[3] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Reaction.ProtoReflect.Descriptor instead. +func (*Reaction) Descriptor() ([]byte, []int) { + return file_instamadilloSupplementMessage_InstamadilloSupplementMessage_proto_rawDescGZIP(), []int{3} +} + +func (x *Reaction) GetReactionType() string { + if x != nil && x.ReactionType != nil { + return *x.ReactionType + } + return "" +} + +func (x *Reaction) GetReactionStatus() string { + if x != nil && x.ReactionStatus != nil { + return *x.ReactionStatus + } + return "" +} + +func (x *Reaction) GetEmoji() string { + if x != nil && x.Emoji != nil { + return *x.Emoji + } + return "" +} + +func (x *Reaction) GetSuperReactType() string { + if x != nil && x.SuperReactType != nil { + return *x.SuperReactType + } + return "" +} + +func (x *Reaction) GetActionLogOtid() string { + if x != nil && x.ActionLogOtid != nil { + return *x.ActionLogOtid + } + return "" +} + +type ContentView struct { + state protoimpl.MessageState `protogen:"open.v1"` + Seen *bool `protobuf:"varint,1,opt,name=seen" json:"seen,omitempty"` + Screenshotted *bool `protobuf:"varint,2,opt,name=screenshotted" json:"screenshotted,omitempty"` + Replayed *bool `protobuf:"varint,3,opt,name=replayed" json:"replayed,omitempty"` + Mimetype *string `protobuf:"bytes,4,opt,name=mimetype" json:"mimetype,omitempty"` + ObjectID *string `protobuf:"bytes,5,opt,name=objectID" json:"objectID,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ContentView) Reset() { + *x = ContentView{} + mi := &file_instamadilloSupplementMessage_InstamadilloSupplementMessage_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ContentView) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ContentView) ProtoMessage() {} + +func (x *ContentView) ProtoReflect() protoreflect.Message { + mi := &file_instamadilloSupplementMessage_InstamadilloSupplementMessage_proto_msgTypes[4] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ContentView.ProtoReflect.Descriptor instead. +func (*ContentView) Descriptor() ([]byte, []int) { + return file_instamadilloSupplementMessage_InstamadilloSupplementMessage_proto_rawDescGZIP(), []int{4} +} + +func (x *ContentView) GetSeen() bool { + if x != nil && x.Seen != nil { + return *x.Seen + } + return false +} + +func (x *ContentView) GetScreenshotted() bool { + if x != nil && x.Screenshotted != nil { + return *x.Screenshotted + } + return false +} + +func (x *ContentView) GetReplayed() bool { + if x != nil && x.Replayed != nil { + return *x.Replayed + } + return false +} + +func (x *ContentView) GetMimetype() string { + if x != nil && x.Mimetype != nil { + return *x.Mimetype + } + return "" +} + +func (x *ContentView) GetObjectID() string { + if x != nil && x.ObjectID != nil { + return *x.ObjectID + } + return "" +} + +type EditText struct { + state protoimpl.MessageState `protogen:"open.v1"` + NewContent *string `protobuf:"bytes,1,opt,name=newContent" json:"newContent,omitempty"` + EditCount *int32 `protobuf:"varint,2,opt,name=editCount" json:"editCount,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *EditText) Reset() { + *x = EditText{} + mi := &file_instamadilloSupplementMessage_InstamadilloSupplementMessage_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *EditText) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EditText) ProtoMessage() {} + +func (x *EditText) ProtoReflect() protoreflect.Message { + mi := &file_instamadilloSupplementMessage_InstamadilloSupplementMessage_proto_msgTypes[5] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use EditText.ProtoReflect.Descriptor instead. +func (*EditText) Descriptor() ([]byte, []int) { + return file_instamadilloSupplementMessage_InstamadilloSupplementMessage_proto_rawDescGZIP(), []int{5} +} + +func (x *EditText) GetNewContent() string { + if x != nil && x.NewContent != nil { + return *x.NewContent + } + return "" +} + +func (x *EditText) GetEditCount() int32 { + if x != nil && x.EditCount != nil { + return *x.EditCount + } + return 0 +} + +type OriginalTransportPayload struct { + state protoimpl.MessageState `protogen:"open.v1"` + OriginalTransportPayload []byte `protobuf:"bytes,1,opt,name=originalTransportPayload" json:"originalTransportPayload,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *OriginalTransportPayload) Reset() { + *x = OriginalTransportPayload{} + mi := &file_instamadilloSupplementMessage_InstamadilloSupplementMessage_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *OriginalTransportPayload) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*OriginalTransportPayload) ProtoMessage() {} + +func (x *OriginalTransportPayload) ProtoReflect() protoreflect.Message { + mi := &file_instamadilloSupplementMessage_InstamadilloSupplementMessage_proto_msgTypes[6] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use OriginalTransportPayload.ProtoReflect.Descriptor instead. +func (*OriginalTransportPayload) Descriptor() ([]byte, []int) { + return file_instamadilloSupplementMessage_InstamadilloSupplementMessage_proto_rawDescGZIP(), []int{6} +} + +func (x *OriginalTransportPayload) GetOriginalTransportPayload() []byte { + if x != nil { + return x.OriginalTransportPayload + } + return nil +} + +type MediaInterventions struct { + state protoimpl.MessageState `protogen:"open.v1"` + MediaID *string `protobuf:"bytes,1,opt,name=mediaID" json:"mediaID,omitempty"` + InterventionType *instamadilloCoreTypeMedia.Media_InterventionType `protobuf:"varint,2,opt,name=interventionType,enum=InstamadilloCoreTypeMedia.Media_InterventionType" json:"interventionType,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *MediaInterventions) Reset() { + *x = MediaInterventions{} + mi := &file_instamadilloSupplementMessage_InstamadilloSupplementMessage_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *MediaInterventions) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MediaInterventions) ProtoMessage() {} + +func (x *MediaInterventions) ProtoReflect() protoreflect.Message { + mi := &file_instamadilloSupplementMessage_InstamadilloSupplementMessage_proto_msgTypes[7] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MediaInterventions.ProtoReflect.Descriptor instead. +func (*MediaInterventions) Descriptor() ([]byte, []int) { + return file_instamadilloSupplementMessage_InstamadilloSupplementMessage_proto_rawDescGZIP(), []int{7} +} + +func (x *MediaInterventions) GetMediaID() string { + if x != nil && x.MediaID != nil { + return *x.MediaID + } + return "" +} + +func (x *MediaInterventions) GetInterventionType() instamadilloCoreTypeMedia.Media_InterventionType { + if x != nil && x.InterventionType != nil { + return *x.InterventionType + } + return instamadilloCoreTypeMedia.Media_InterventionType(0) +} + +var File_instamadilloSupplementMessage_InstamadilloSupplementMessage_proto protoreflect.FileDescriptor + +const file_instamadilloSupplementMessage_InstamadilloSupplementMessage_proto_rawDesc = "" + + "\n" + + "AinstamadilloSupplementMessage/InstamadilloSupplementMessage.proto\x12\x1dInstamadilloSupplementMessage\x1a9instamadilloCoreTypeMedia/InstamadilloCoreTypeMedia.proto\"\xd3\x02\n" + + "\x18SupplementMessagePayload\x12,\n" + + "\x11targetMessageOtid\x18\x01 \x01(\tR\x11targetMessageOtid\x12F\n" + + "\x1euniquingKeyForSupplementalData\x18\x02 \x01(\tR\x1euniquingKeyForSupplementalData\x12Q\n" + + "\acontent\x18\x03 \x01(\v27.InstamadilloSupplementMessage.SupplementMessageContentR\acontent\x12B\n" + + "\x1ctargetMessageWaServerTimeSec\x18\x04 \x01(\tR\x1ctargetMessageWaServerTimeSec\x12*\n" + + "\x10targetWaThreadID\x18\x05 \x01(\tR\x10targetWaThreadID\"\xc6\x04\n" + + "\x18SupplementMessageContent\x12E\n" + + "\breaction\x18\x01 \x01(\v2'.InstamadilloSupplementMessage.ReactionH\x00R\breaction\x12N\n" + + "\vcontentView\x18\x02 \x01(\v2*.InstamadilloSupplementMessage.ContentViewH\x00R\vcontentView\x12E\n" + + "\beditText\x18\x03 \x01(\v2'.InstamadilloSupplementMessage.EditTextH\x00R\beditText\x12T\n" + + "\rmediaReaction\x18\x04 \x01(\v2,.InstamadilloSupplementMessage.MediaReactionH\x00R\rmediaReaction\x12u\n" + + "\x18originalTransportPayload\x18\x05 \x01(\v27.InstamadilloSupplementMessage.OriginalTransportPayloadH\x00R\x18originalTransportPayload\x12c\n" + + "\x12mediaInterventions\x18\x06 \x01(\v21.InstamadilloSupplementMessage.MediaInterventionsH\x00R\x12mediaInterventionsB\x1a\n" + + "\x18supplementMessageContent\"n\n" + + "\rMediaReaction\x12\x18\n" + + "\amediaID\x18\x01 \x01(\tR\amediaID\x12C\n" + + "\breaction\x18\x02 \x01(\v2'.InstamadilloSupplementMessage.ReactionR\breaction\"\xba\x01\n" + + "\bReaction\x12\"\n" + + "\freactionType\x18\x01 \x01(\tR\freactionType\x12&\n" + + "\x0ereactionStatus\x18\x02 \x01(\tR\x0ereactionStatus\x12\x14\n" + + "\x05emoji\x18\x03 \x01(\tR\x05emoji\x12&\n" + + "\x0esuperReactType\x18\x04 \x01(\tR\x0esuperReactType\x12$\n" + + "\ractionLogOtid\x18\x05 \x01(\tR\ractionLogOtid\"\x9b\x01\n" + + "\vContentView\x12\x12\n" + + "\x04seen\x18\x01 \x01(\bR\x04seen\x12$\n" + + "\rscreenshotted\x18\x02 \x01(\bR\rscreenshotted\x12\x1a\n" + + "\breplayed\x18\x03 \x01(\bR\breplayed\x12\x1a\n" + + "\bmimetype\x18\x04 \x01(\tR\bmimetype\x12\x1a\n" + + "\bobjectID\x18\x05 \x01(\tR\bobjectID\"H\n" + + "\bEditText\x12\x1e\n" + + "\n" + + "newContent\x18\x01 \x01(\tR\n" + + "newContent\x12\x1c\n" + + "\teditCount\x18\x02 \x01(\x05R\teditCount\"V\n" + + "\x18OriginalTransportPayload\x12:\n" + + "\x18originalTransportPayload\x18\x01 \x01(\fR\x18originalTransportPayload\"\x8d\x01\n" + + "\x12MediaInterventions\x12\x18\n" + + "\amediaID\x18\x01 \x01(\tR\amediaID\x12]\n" + + "\x10interventionType\x18\x02 \x01(\x0e21.InstamadilloCoreTypeMedia.Media.InterventionTypeR\x10interventionTypeB9Z7go.mau.fi/whatsmeow/proto/instamadilloSupplementMessage" + +var ( + file_instamadilloSupplementMessage_InstamadilloSupplementMessage_proto_rawDescOnce sync.Once + file_instamadilloSupplementMessage_InstamadilloSupplementMessage_proto_rawDescData []byte +) + +func file_instamadilloSupplementMessage_InstamadilloSupplementMessage_proto_rawDescGZIP() []byte { + file_instamadilloSupplementMessage_InstamadilloSupplementMessage_proto_rawDescOnce.Do(func() { + file_instamadilloSupplementMessage_InstamadilloSupplementMessage_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_instamadilloSupplementMessage_InstamadilloSupplementMessage_proto_rawDesc), len(file_instamadilloSupplementMessage_InstamadilloSupplementMessage_proto_rawDesc))) + }) + return file_instamadilloSupplementMessage_InstamadilloSupplementMessage_proto_rawDescData +} + +var file_instamadilloSupplementMessage_InstamadilloSupplementMessage_proto_msgTypes = make([]protoimpl.MessageInfo, 8) +var file_instamadilloSupplementMessage_InstamadilloSupplementMessage_proto_goTypes = []any{ + (*SupplementMessagePayload)(nil), // 0: InstamadilloSupplementMessage.SupplementMessagePayload + (*SupplementMessageContent)(nil), // 1: InstamadilloSupplementMessage.SupplementMessageContent + (*MediaReaction)(nil), // 2: InstamadilloSupplementMessage.MediaReaction + (*Reaction)(nil), // 3: InstamadilloSupplementMessage.Reaction + (*ContentView)(nil), // 4: InstamadilloSupplementMessage.ContentView + (*EditText)(nil), // 5: InstamadilloSupplementMessage.EditText + (*OriginalTransportPayload)(nil), // 6: InstamadilloSupplementMessage.OriginalTransportPayload + (*MediaInterventions)(nil), // 7: InstamadilloSupplementMessage.MediaInterventions + (instamadilloCoreTypeMedia.Media_InterventionType)(0), // 8: InstamadilloCoreTypeMedia.Media.InterventionType +} +var file_instamadilloSupplementMessage_InstamadilloSupplementMessage_proto_depIdxs = []int32{ + 1, // 0: InstamadilloSupplementMessage.SupplementMessagePayload.content:type_name -> InstamadilloSupplementMessage.SupplementMessageContent + 3, // 1: InstamadilloSupplementMessage.SupplementMessageContent.reaction:type_name -> InstamadilloSupplementMessage.Reaction + 4, // 2: InstamadilloSupplementMessage.SupplementMessageContent.contentView:type_name -> InstamadilloSupplementMessage.ContentView + 5, // 3: InstamadilloSupplementMessage.SupplementMessageContent.editText:type_name -> InstamadilloSupplementMessage.EditText + 2, // 4: InstamadilloSupplementMessage.SupplementMessageContent.mediaReaction:type_name -> InstamadilloSupplementMessage.MediaReaction + 6, // 5: InstamadilloSupplementMessage.SupplementMessageContent.originalTransportPayload:type_name -> InstamadilloSupplementMessage.OriginalTransportPayload + 7, // 6: InstamadilloSupplementMessage.SupplementMessageContent.mediaInterventions:type_name -> InstamadilloSupplementMessage.MediaInterventions + 3, // 7: InstamadilloSupplementMessage.MediaReaction.reaction:type_name -> InstamadilloSupplementMessage.Reaction + 8, // 8: InstamadilloSupplementMessage.MediaInterventions.interventionType:type_name -> InstamadilloCoreTypeMedia.Media.InterventionType + 9, // [9:9] is the sub-list for method output_type + 9, // [9:9] is the sub-list for method input_type + 9, // [9:9] is the sub-list for extension type_name + 9, // [9:9] is the sub-list for extension extendee + 0, // [0:9] is the sub-list for field type_name +} + +func init() { file_instamadilloSupplementMessage_InstamadilloSupplementMessage_proto_init() } +func file_instamadilloSupplementMessage_InstamadilloSupplementMessage_proto_init() { + if File_instamadilloSupplementMessage_InstamadilloSupplementMessage_proto != nil { + return + } + file_instamadilloSupplementMessage_InstamadilloSupplementMessage_proto_msgTypes[1].OneofWrappers = []any{ + (*SupplementMessageContent_Reaction)(nil), + (*SupplementMessageContent_ContentView)(nil), + (*SupplementMessageContent_EditText)(nil), + (*SupplementMessageContent_MediaReaction)(nil), + (*SupplementMessageContent_OriginalTransportPayload)(nil), + (*SupplementMessageContent_MediaInterventions)(nil), + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: unsafe.Slice(unsafe.StringData(file_instamadilloSupplementMessage_InstamadilloSupplementMessage_proto_rawDesc), len(file_instamadilloSupplementMessage_InstamadilloSupplementMessage_proto_rawDesc)), + NumEnums: 0, + NumMessages: 8, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_instamadilloSupplementMessage_InstamadilloSupplementMessage_proto_goTypes, + DependencyIndexes: file_instamadilloSupplementMessage_InstamadilloSupplementMessage_proto_depIdxs, + MessageInfos: file_instamadilloSupplementMessage_InstamadilloSupplementMessage_proto_msgTypes, + }.Build() + File_instamadilloSupplementMessage_InstamadilloSupplementMessage_proto = out.File + file_instamadilloSupplementMessage_InstamadilloSupplementMessage_proto_goTypes = nil + file_instamadilloSupplementMessage_InstamadilloSupplementMessage_proto_depIdxs = nil +} diff --git a/vendor/go.mau.fi/whatsmeow/proto/instamadilloSupplementMessage/InstamadilloSupplementMessage.proto b/vendor/go.mau.fi/whatsmeow/proto/instamadilloSupplementMessage/InstamadilloSupplementMessage.proto new file mode 100644 index 0000000000..09ff068bc1 --- /dev/null +++ b/vendor/go.mau.fi/whatsmeow/proto/instamadilloSupplementMessage/InstamadilloSupplementMessage.proto @@ -0,0 +1,59 @@ +syntax = "proto2"; +package InstamadilloSupplementMessage; +option go_package = "go.mau.fi/whatsmeow/proto/instamadilloSupplementMessage"; + +import "instamadilloCoreTypeMedia/InstamadilloCoreTypeMedia.proto"; + +message SupplementMessagePayload { + optional string targetMessageOtid = 1; + optional string uniquingKeyForSupplementalData = 2; + optional SupplementMessageContent content = 3; + optional string targetMessageWaServerTimeSec = 4; + optional string targetWaThreadID = 5; +} + +message SupplementMessageContent { + oneof supplementMessageContent { + Reaction reaction = 1; + ContentView contentView = 2; + EditText editText = 3; + MediaReaction mediaReaction = 4; + OriginalTransportPayload originalTransportPayload = 5; + MediaInterventions mediaInterventions = 6; + } +} + +message MediaReaction { + optional string mediaID = 1; + optional Reaction reaction = 2; +} + +message Reaction { + optional string reactionType = 1; + optional string reactionStatus = 2; + optional string emoji = 3; + optional string superReactType = 4; + optional string actionLogOtid = 5; +} + +message ContentView { + optional bool seen = 1; + optional bool screenshotted = 2; + optional bool replayed = 3; + optional string mimetype = 4; + optional string objectID = 5; +} + +message EditText { + optional string newContent = 1; + optional int32 editCount = 2; +} + +message OriginalTransportPayload { + optional bytes originalTransportPayload = 1; +} + +message MediaInterventions { + optional string mediaID = 1; + optional InstamadilloCoreTypeMedia.Media.InterventionType interventionType = 2; +} diff --git a/vendor/go.mau.fi/whatsmeow/proto/instamadilloSupplementMessage/extra.go b/vendor/go.mau.fi/whatsmeow/proto/instamadilloSupplementMessage/extra.go new file mode 100644 index 0000000000..053387630c --- /dev/null +++ b/vendor/go.mau.fi/whatsmeow/proto/instamadilloSupplementMessage/extra.go @@ -0,0 +1,3 @@ +package instamadilloSupplementMessage + +func (*SupplementMessagePayload) IsMessageApplicationSub() {} diff --git a/vendor/go.mau.fi/whatsmeow/proto/instamadilloTransportPayload/InstamadilloTransportPayload.pb.go b/vendor/go.mau.fi/whatsmeow/proto/instamadilloTransportPayload/InstamadilloTransportPayload.pb.go new file mode 100644 index 0000000000..9ae3c72cc8 --- /dev/null +++ b/vendor/go.mau.fi/whatsmeow/proto/instamadilloTransportPayload/InstamadilloTransportPayload.pb.go @@ -0,0 +1,365 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.36.10 +// protoc v3.21.12 +// source: instamadilloTransportPayload/InstamadilloTransportPayload.proto + +package instamadilloTransportPayload + +import ( + reflect "reflect" + sync "sync" + unsafe "unsafe" + + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + + instamadilloAddMessage "go.mau.fi/whatsmeow/proto/instamadilloAddMessage" + instamadilloDeleteMessage "go.mau.fi/whatsmeow/proto/instamadilloDeleteMessage" + instamadilloSupplementMessage "go.mau.fi/whatsmeow/proto/instamadilloSupplementMessage" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type PayloadCreator int32 + +const ( + PayloadCreator_PAYLOAD_CREATOR_UNSPECIFIED PayloadCreator = 0 + PayloadCreator_PAYLOAD_CREATOR_IGIOS PayloadCreator = 1 + PayloadCreator_PAYLOAD_CREATOR_IG4A PayloadCreator = 2 + PayloadCreator_PAYLOAD_CREATOR_WWW PayloadCreator = 3 + PayloadCreator_PAYLOAD_CREATOR_IGLITE PayloadCreator = 4 +) + +// Enum value maps for PayloadCreator. +var ( + PayloadCreator_name = map[int32]string{ + 0: "PAYLOAD_CREATOR_UNSPECIFIED", + 1: "PAYLOAD_CREATOR_IGIOS", + 2: "PAYLOAD_CREATOR_IG4A", + 3: "PAYLOAD_CREATOR_WWW", + 4: "PAYLOAD_CREATOR_IGLITE", + } + PayloadCreator_value = map[string]int32{ + "PAYLOAD_CREATOR_UNSPECIFIED": 0, + "PAYLOAD_CREATOR_IGIOS": 1, + "PAYLOAD_CREATOR_IG4A": 2, + "PAYLOAD_CREATOR_WWW": 3, + "PAYLOAD_CREATOR_IGLITE": 4, + } +) + +func (x PayloadCreator) Enum() *PayloadCreator { + p := new(PayloadCreator) + *p = x + return p +} + +func (x PayloadCreator) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (PayloadCreator) Descriptor() protoreflect.EnumDescriptor { + return file_instamadilloTransportPayload_InstamadilloTransportPayload_proto_enumTypes[0].Descriptor() +} + +func (PayloadCreator) Type() protoreflect.EnumType { + return &file_instamadilloTransportPayload_InstamadilloTransportPayload_proto_enumTypes[0] +} + +func (x PayloadCreator) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *PayloadCreator) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = PayloadCreator(num) + return nil +} + +// Deprecated: Use PayloadCreator.Descriptor instead. +func (PayloadCreator) EnumDescriptor() ([]byte, []int) { + return file_instamadilloTransportPayload_InstamadilloTransportPayload_proto_rawDescGZIP(), []int{0} +} + +type TransportPayload struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Types that are valid to be assigned to TransportPayload: + // + // *TransportPayload_Add + // *TransportPayload_Delete + // *TransportPayload_Supplement + TransportPayload isTransportPayload_TransportPayload `protobuf_oneof:"transportPayload"` + Franking *Franking `protobuf:"bytes,4,opt,name=franking" json:"franking,omitempty"` + OpenEb *bool `protobuf:"varint,5,opt,name=openEb" json:"openEb,omitempty"` + IsE2EeAttributed *bool `protobuf:"varint,6,opt,name=isE2EeAttributed" json:"isE2EeAttributed,omitempty"` + PayloadCreator *PayloadCreator `protobuf:"varint,7,opt,name=payloadCreator,enum=InstamadilloTransportPayload.PayloadCreator" json:"payloadCreator,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *TransportPayload) Reset() { + *x = TransportPayload{} + mi := &file_instamadilloTransportPayload_InstamadilloTransportPayload_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *TransportPayload) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TransportPayload) ProtoMessage() {} + +func (x *TransportPayload) ProtoReflect() protoreflect.Message { + mi := &file_instamadilloTransportPayload_InstamadilloTransportPayload_proto_msgTypes[0] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TransportPayload.ProtoReflect.Descriptor instead. +func (*TransportPayload) Descriptor() ([]byte, []int) { + return file_instamadilloTransportPayload_InstamadilloTransportPayload_proto_rawDescGZIP(), []int{0} +} + +func (x *TransportPayload) GetTransportPayload() isTransportPayload_TransportPayload { + if x != nil { + return x.TransportPayload + } + return nil +} + +func (x *TransportPayload) GetAdd() *instamadilloAddMessage.AddMessagePayload { + if x != nil { + if x, ok := x.TransportPayload.(*TransportPayload_Add); ok { + return x.Add + } + } + return nil +} + +func (x *TransportPayload) GetDelete() *instamadilloDeleteMessage.DeleteMessagePayload { + if x != nil { + if x, ok := x.TransportPayload.(*TransportPayload_Delete); ok { + return x.Delete + } + } + return nil +} + +func (x *TransportPayload) GetSupplement() *instamadilloSupplementMessage.SupplementMessagePayload { + if x != nil { + if x, ok := x.TransportPayload.(*TransportPayload_Supplement); ok { + return x.Supplement + } + } + return nil +} + +func (x *TransportPayload) GetFranking() *Franking { + if x != nil { + return x.Franking + } + return nil +} + +func (x *TransportPayload) GetOpenEb() bool { + if x != nil && x.OpenEb != nil { + return *x.OpenEb + } + return false +} + +func (x *TransportPayload) GetIsE2EeAttributed() bool { + if x != nil && x.IsE2EeAttributed != nil { + return *x.IsE2EeAttributed + } + return false +} + +func (x *TransportPayload) GetPayloadCreator() PayloadCreator { + if x != nil && x.PayloadCreator != nil { + return *x.PayloadCreator + } + return PayloadCreator_PAYLOAD_CREATOR_UNSPECIFIED +} + +type isTransportPayload_TransportPayload interface { + isTransportPayload_TransportPayload() +} + +type TransportPayload_Add struct { + Add *instamadilloAddMessage.AddMessagePayload `protobuf:"bytes,1,opt,name=add,oneof"` +} + +type TransportPayload_Delete struct { + Delete *instamadilloDeleteMessage.DeleteMessagePayload `protobuf:"bytes,2,opt,name=delete,oneof"` +} + +type TransportPayload_Supplement struct { + Supplement *instamadilloSupplementMessage.SupplementMessagePayload `protobuf:"bytes,3,opt,name=supplement,oneof"` +} + +func (*TransportPayload_Add) isTransportPayload_TransportPayload() {} + +func (*TransportPayload_Delete) isTransportPayload_TransportPayload() {} + +func (*TransportPayload_Supplement) isTransportPayload_TransportPayload() {} + +type Franking struct { + state protoimpl.MessageState `protogen:"open.v1"` + FrankingKey []byte `protobuf:"bytes,1,opt,name=frankingKey" json:"frankingKey,omitempty"` + FrankingVersion *int32 `protobuf:"varint,2,opt,name=frankingVersion" json:"frankingVersion,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *Franking) Reset() { + *x = Franking{} + mi := &file_instamadilloTransportPayload_InstamadilloTransportPayload_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *Franking) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Franking) ProtoMessage() {} + +func (x *Franking) ProtoReflect() protoreflect.Message { + mi := &file_instamadilloTransportPayload_InstamadilloTransportPayload_proto_msgTypes[1] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Franking.ProtoReflect.Descriptor instead. +func (*Franking) Descriptor() ([]byte, []int) { + return file_instamadilloTransportPayload_InstamadilloTransportPayload_proto_rawDescGZIP(), []int{1} +} + +func (x *Franking) GetFrankingKey() []byte { + if x != nil { + return x.FrankingKey + } + return nil +} + +func (x *Franking) GetFrankingVersion() int32 { + if x != nil && x.FrankingVersion != nil { + return *x.FrankingVersion + } + return 0 +} + +var File_instamadilloTransportPayload_InstamadilloTransportPayload_proto protoreflect.FileDescriptor + +const file_instamadilloTransportPayload_InstamadilloTransportPayload_proto_rawDesc = "" + + "\n" + + "?instamadilloTransportPayload/InstamadilloTransportPayload.proto\x12\x1cInstamadilloTransportPayload\x1a3instamadilloAddMessage/InstamadilloAddMessage.proto\x1a9instamadilloDeleteMessage/InstamadilloDeleteMessage.proto\x1aAinstamadilloSupplementMessage/InstamadilloSupplementMessage.proto\"\xe9\x03\n" + + "\x10TransportPayload\x12=\n" + + "\x03add\x18\x01 \x01(\v2).InstamadilloAddMessage.AddMessagePayloadH\x00R\x03add\x12I\n" + + "\x06delete\x18\x02 \x01(\v2/.InstamadilloDeleteMessage.DeleteMessagePayloadH\x00R\x06delete\x12Y\n" + + "\n" + + "supplement\x18\x03 \x01(\v27.InstamadilloSupplementMessage.SupplementMessagePayloadH\x00R\n" + + "supplement\x12B\n" + + "\bfranking\x18\x04 \x01(\v2&.InstamadilloTransportPayload.FrankingR\bfranking\x12\x16\n" + + "\x06openEb\x18\x05 \x01(\bR\x06openEb\x12*\n" + + "\x10isE2EeAttributed\x18\x06 \x01(\bR\x10isE2EeAttributed\x12T\n" + + "\x0epayloadCreator\x18\a \x01(\x0e2,.InstamadilloTransportPayload.PayloadCreatorR\x0epayloadCreatorB\x12\n" + + "\x10transportPayload\"V\n" + + "\bFranking\x12 \n" + + "\vfrankingKey\x18\x01 \x01(\fR\vfrankingKey\x12(\n" + + "\x0ffrankingVersion\x18\x02 \x01(\x05R\x0ffrankingVersion*\x9b\x01\n" + + "\x0ePayloadCreator\x12\x1f\n" + + "\x1bPAYLOAD_CREATOR_UNSPECIFIED\x10\x00\x12\x19\n" + + "\x15PAYLOAD_CREATOR_IGIOS\x10\x01\x12\x18\n" + + "\x14PAYLOAD_CREATOR_IG4A\x10\x02\x12\x17\n" + + "\x13PAYLOAD_CREATOR_WWW\x10\x03\x12\x1a\n" + + "\x16PAYLOAD_CREATOR_IGLITE\x10\x04B8Z6go.mau.fi/whatsmeow/proto/instamadilloTransportPayload" + +var ( + file_instamadilloTransportPayload_InstamadilloTransportPayload_proto_rawDescOnce sync.Once + file_instamadilloTransportPayload_InstamadilloTransportPayload_proto_rawDescData []byte +) + +func file_instamadilloTransportPayload_InstamadilloTransportPayload_proto_rawDescGZIP() []byte { + file_instamadilloTransportPayload_InstamadilloTransportPayload_proto_rawDescOnce.Do(func() { + file_instamadilloTransportPayload_InstamadilloTransportPayload_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_instamadilloTransportPayload_InstamadilloTransportPayload_proto_rawDesc), len(file_instamadilloTransportPayload_InstamadilloTransportPayload_proto_rawDesc))) + }) + return file_instamadilloTransportPayload_InstamadilloTransportPayload_proto_rawDescData +} + +var file_instamadilloTransportPayload_InstamadilloTransportPayload_proto_enumTypes = make([]protoimpl.EnumInfo, 1) +var file_instamadilloTransportPayload_InstamadilloTransportPayload_proto_msgTypes = make([]protoimpl.MessageInfo, 2) +var file_instamadilloTransportPayload_InstamadilloTransportPayload_proto_goTypes = []any{ + (PayloadCreator)(0), // 0: InstamadilloTransportPayload.PayloadCreator + (*TransportPayload)(nil), // 1: InstamadilloTransportPayload.TransportPayload + (*Franking)(nil), // 2: InstamadilloTransportPayload.Franking + (*instamadilloAddMessage.AddMessagePayload)(nil), // 3: InstamadilloAddMessage.AddMessagePayload + (*instamadilloDeleteMessage.DeleteMessagePayload)(nil), // 4: InstamadilloDeleteMessage.DeleteMessagePayload + (*instamadilloSupplementMessage.SupplementMessagePayload)(nil), // 5: InstamadilloSupplementMessage.SupplementMessagePayload +} +var file_instamadilloTransportPayload_InstamadilloTransportPayload_proto_depIdxs = []int32{ + 3, // 0: InstamadilloTransportPayload.TransportPayload.add:type_name -> InstamadilloAddMessage.AddMessagePayload + 4, // 1: InstamadilloTransportPayload.TransportPayload.delete:type_name -> InstamadilloDeleteMessage.DeleteMessagePayload + 5, // 2: InstamadilloTransportPayload.TransportPayload.supplement:type_name -> InstamadilloSupplementMessage.SupplementMessagePayload + 2, // 3: InstamadilloTransportPayload.TransportPayload.franking:type_name -> InstamadilloTransportPayload.Franking + 0, // 4: InstamadilloTransportPayload.TransportPayload.payloadCreator:type_name -> InstamadilloTransportPayload.PayloadCreator + 5, // [5:5] is the sub-list for method output_type + 5, // [5:5] is the sub-list for method input_type + 5, // [5:5] is the sub-list for extension type_name + 5, // [5:5] is the sub-list for extension extendee + 0, // [0:5] is the sub-list for field type_name +} + +func init() { file_instamadilloTransportPayload_InstamadilloTransportPayload_proto_init() } +func file_instamadilloTransportPayload_InstamadilloTransportPayload_proto_init() { + if File_instamadilloTransportPayload_InstamadilloTransportPayload_proto != nil { + return + } + file_instamadilloTransportPayload_InstamadilloTransportPayload_proto_msgTypes[0].OneofWrappers = []any{ + (*TransportPayload_Add)(nil), + (*TransportPayload_Delete)(nil), + (*TransportPayload_Supplement)(nil), + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: unsafe.Slice(unsafe.StringData(file_instamadilloTransportPayload_InstamadilloTransportPayload_proto_rawDesc), len(file_instamadilloTransportPayload_InstamadilloTransportPayload_proto_rawDesc)), + NumEnums: 1, + NumMessages: 2, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_instamadilloTransportPayload_InstamadilloTransportPayload_proto_goTypes, + DependencyIndexes: file_instamadilloTransportPayload_InstamadilloTransportPayload_proto_depIdxs, + EnumInfos: file_instamadilloTransportPayload_InstamadilloTransportPayload_proto_enumTypes, + MessageInfos: file_instamadilloTransportPayload_InstamadilloTransportPayload_proto_msgTypes, + }.Build() + File_instamadilloTransportPayload_InstamadilloTransportPayload_proto = out.File + file_instamadilloTransportPayload_InstamadilloTransportPayload_proto_goTypes = nil + file_instamadilloTransportPayload_InstamadilloTransportPayload_proto_depIdxs = nil +} diff --git a/vendor/go.mau.fi/whatsmeow/proto/instamadilloTransportPayload/InstamadilloTransportPayload.proto b/vendor/go.mau.fi/whatsmeow/proto/instamadilloTransportPayload/InstamadilloTransportPayload.proto new file mode 100644 index 0000000000..964f845762 --- /dev/null +++ b/vendor/go.mau.fi/whatsmeow/proto/instamadilloTransportPayload/InstamadilloTransportPayload.proto @@ -0,0 +1,33 @@ +syntax = "proto2"; +package InstamadilloTransportPayload; +option go_package = "go.mau.fi/whatsmeow/proto/instamadilloTransportPayload"; + +import "instamadilloAddMessage/InstamadilloAddMessage.proto"; +import "instamadilloDeleteMessage/InstamadilloDeleteMessage.proto"; +import "instamadilloSupplementMessage/InstamadilloSupplementMessage.proto"; + +enum PayloadCreator { + PAYLOAD_CREATOR_UNSPECIFIED = 0; + PAYLOAD_CREATOR_IGIOS = 1; + PAYLOAD_CREATOR_IG4A = 2; + PAYLOAD_CREATOR_WWW = 3; + PAYLOAD_CREATOR_IGLITE = 4; +} + +message TransportPayload { + oneof transportPayload { + InstamadilloAddMessage.AddMessagePayload add = 1; + InstamadilloDeleteMessage.DeleteMessagePayload delete = 2; + InstamadilloSupplementMessage.SupplementMessagePayload supplement = 3; + } + + optional Franking franking = 4; + optional bool openEb = 5; + optional bool isE2EeAttributed = 6; + optional PayloadCreator payloadCreator = 7; +} + +message Franking { + optional bytes frankingKey = 1; + optional int32 frankingVersion = 2; +} diff --git a/vendor/go.mau.fi/whatsmeow/proto/instamadilloXmaContentRef/InstamadilloXmaContentRef.pb.go b/vendor/go.mau.fi/whatsmeow/proto/instamadilloXmaContentRef/InstamadilloXmaContentRef.pb.go new file mode 100644 index 0000000000..67e54e5de5 --- /dev/null +++ b/vendor/go.mau.fi/whatsmeow/proto/instamadilloXmaContentRef/InstamadilloXmaContentRef.pb.go @@ -0,0 +1,1238 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.36.10 +// protoc v3.21.12 +// source: instamadilloXmaContentRef/InstamadilloXmaContentRef.proto + +package instamadilloXmaContentRef + +import ( + reflect "reflect" + sync "sync" + unsafe "unsafe" + + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type XmaActionType int32 + +const ( + XmaActionType_XMA_ACTION_TYPE_UNSPECIFIED XmaActionType = 0 + XmaActionType_XMA_ACTION_TYPE_SHARE XmaActionType = 1 + XmaActionType_XMA_ACTION_TYPE_REPLY XmaActionType = 2 + XmaActionType_XMA_ACTION_TYPE_REACT XmaActionType = 3 + XmaActionType_XMA_ACTION_TYPE_MENTION XmaActionType = 4 +) + +// Enum value maps for XmaActionType. +var ( + XmaActionType_name = map[int32]string{ + 0: "XMA_ACTION_TYPE_UNSPECIFIED", + 1: "XMA_ACTION_TYPE_SHARE", + 2: "XMA_ACTION_TYPE_REPLY", + 3: "XMA_ACTION_TYPE_REACT", + 4: "XMA_ACTION_TYPE_MENTION", + } + XmaActionType_value = map[string]int32{ + "XMA_ACTION_TYPE_UNSPECIFIED": 0, + "XMA_ACTION_TYPE_SHARE": 1, + "XMA_ACTION_TYPE_REPLY": 2, + "XMA_ACTION_TYPE_REACT": 3, + "XMA_ACTION_TYPE_MENTION": 4, + } +) + +func (x XmaActionType) Enum() *XmaActionType { + p := new(XmaActionType) + *p = x + return p +} + +func (x XmaActionType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (XmaActionType) Descriptor() protoreflect.EnumDescriptor { + return file_instamadilloXmaContentRef_InstamadilloXmaContentRef_proto_enumTypes[0].Descriptor() +} + +func (XmaActionType) Type() protoreflect.EnumType { + return &file_instamadilloXmaContentRef_InstamadilloXmaContentRef_proto_enumTypes[0] +} + +func (x XmaActionType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *XmaActionType) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = XmaActionType(num) + return nil +} + +// Deprecated: Use XmaActionType.Descriptor instead. +func (XmaActionType) EnumDescriptor() ([]byte, []int) { + return file_instamadilloXmaContentRef_InstamadilloXmaContentRef_proto_rawDescGZIP(), []int{0} +} + +type ReceiverFetchContentType int32 + +const ( + ReceiverFetchContentType_RECEIVER_FETCH_CONTENT_TYPE_UNSPECIFIED ReceiverFetchContentType = 0 + ReceiverFetchContentType_RECEIVER_FETCH_CONTENT_TYPE_NOTE ReceiverFetchContentType = 1 + ReceiverFetchContentType_RECEIVER_FETCH_CONTENT_TYPE_STORY ReceiverFetchContentType = 2 + ReceiverFetchContentType_RECEIVER_FETCH_CONTENT_TYPE_PROFILE ReceiverFetchContentType = 3 + ReceiverFetchContentType_RECEIVER_FETCH_CONTENT_TYPE_CLIP ReceiverFetchContentType = 4 + ReceiverFetchContentType_RECEIVER_FETCH_CONTENT_TYPE_FEED ReceiverFetchContentType = 5 + ReceiverFetchContentType_RECEIVER_FETCH_CONTENT_TYPE_LIVE ReceiverFetchContentType = 6 + ReceiverFetchContentType_RECEIVER_FETCH_CONTENT_TYPE_COMMENT ReceiverFetchContentType = 7 + ReceiverFetchContentType_RECEIVER_FETCH_CONTENT_TYPE_LOCATION_SHARE ReceiverFetchContentType = 8 + ReceiverFetchContentType_RECEIVER_FETCH_CONTENT_TYPE_REELS_AUDIO ReceiverFetchContentType = 9 + ReceiverFetchContentType_RECEIVER_FETCH_CONTENT_TYPE_MEDIA_NOTE ReceiverFetchContentType = 10 + ReceiverFetchContentType_RECEIVER_FETCH_CONTENT_TYPE_STORY_HIGHLIGHT ReceiverFetchContentType = 11 + ReceiverFetchContentType_RECEIVER_FETCH_CONTENT_TYPE_SOCIAL_CONTEXT ReceiverFetchContentType = 12 +) + +// Enum value maps for ReceiverFetchContentType. +var ( + ReceiverFetchContentType_name = map[int32]string{ + 0: "RECEIVER_FETCH_CONTENT_TYPE_UNSPECIFIED", + 1: "RECEIVER_FETCH_CONTENT_TYPE_NOTE", + 2: "RECEIVER_FETCH_CONTENT_TYPE_STORY", + 3: "RECEIVER_FETCH_CONTENT_TYPE_PROFILE", + 4: "RECEIVER_FETCH_CONTENT_TYPE_CLIP", + 5: "RECEIVER_FETCH_CONTENT_TYPE_FEED", + 6: "RECEIVER_FETCH_CONTENT_TYPE_LIVE", + 7: "RECEIVER_FETCH_CONTENT_TYPE_COMMENT", + 8: "RECEIVER_FETCH_CONTENT_TYPE_LOCATION_SHARE", + 9: "RECEIVER_FETCH_CONTENT_TYPE_REELS_AUDIO", + 10: "RECEIVER_FETCH_CONTENT_TYPE_MEDIA_NOTE", + 11: "RECEIVER_FETCH_CONTENT_TYPE_STORY_HIGHLIGHT", + 12: "RECEIVER_FETCH_CONTENT_TYPE_SOCIAL_CONTEXT", + } + ReceiverFetchContentType_value = map[string]int32{ + "RECEIVER_FETCH_CONTENT_TYPE_UNSPECIFIED": 0, + "RECEIVER_FETCH_CONTENT_TYPE_NOTE": 1, + "RECEIVER_FETCH_CONTENT_TYPE_STORY": 2, + "RECEIVER_FETCH_CONTENT_TYPE_PROFILE": 3, + "RECEIVER_FETCH_CONTENT_TYPE_CLIP": 4, + "RECEIVER_FETCH_CONTENT_TYPE_FEED": 5, + "RECEIVER_FETCH_CONTENT_TYPE_LIVE": 6, + "RECEIVER_FETCH_CONTENT_TYPE_COMMENT": 7, + "RECEIVER_FETCH_CONTENT_TYPE_LOCATION_SHARE": 8, + "RECEIVER_FETCH_CONTENT_TYPE_REELS_AUDIO": 9, + "RECEIVER_FETCH_CONTENT_TYPE_MEDIA_NOTE": 10, + "RECEIVER_FETCH_CONTENT_TYPE_STORY_HIGHLIGHT": 11, + "RECEIVER_FETCH_CONTENT_TYPE_SOCIAL_CONTEXT": 12, + } +) + +func (x ReceiverFetchContentType) Enum() *ReceiverFetchContentType { + p := new(ReceiverFetchContentType) + *p = x + return p +} + +func (x ReceiverFetchContentType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (ReceiverFetchContentType) Descriptor() protoreflect.EnumDescriptor { + return file_instamadilloXmaContentRef_InstamadilloXmaContentRef_proto_enumTypes[1].Descriptor() +} + +func (ReceiverFetchContentType) Type() protoreflect.EnumType { + return &file_instamadilloXmaContentRef_InstamadilloXmaContentRef_proto_enumTypes[1] +} + +func (x ReceiverFetchContentType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *ReceiverFetchContentType) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = ReceiverFetchContentType(num) + return nil +} + +// Deprecated: Use ReceiverFetchContentType.Descriptor instead. +func (ReceiverFetchContentType) EnumDescriptor() ([]byte, []int) { + return file_instamadilloXmaContentRef_InstamadilloXmaContentRef_proto_rawDescGZIP(), []int{1} +} + +type MediaNoteFetchParamsMessageType int32 + +const ( + MediaNoteFetchParamsMessageType_MEDIA_NOTE_FETCH_PARAMS_MESSAGE_TYPE_UNSPECIFIED MediaNoteFetchParamsMessageType = 0 + MediaNoteFetchParamsMessageType_MEDIA_NOTE_FETCH_PARAMS_MESSAGE_TYPE_MENTION MediaNoteFetchParamsMessageType = 1 + MediaNoteFetchParamsMessageType_MEDIA_NOTE_FETCH_PARAMS_MESSAGE_TYPE_REPLY MediaNoteFetchParamsMessageType = 2 +) + +// Enum value maps for MediaNoteFetchParamsMessageType. +var ( + MediaNoteFetchParamsMessageType_name = map[int32]string{ + 0: "MEDIA_NOTE_FETCH_PARAMS_MESSAGE_TYPE_UNSPECIFIED", + 1: "MEDIA_NOTE_FETCH_PARAMS_MESSAGE_TYPE_MENTION", + 2: "MEDIA_NOTE_FETCH_PARAMS_MESSAGE_TYPE_REPLY", + } + MediaNoteFetchParamsMessageType_value = map[string]int32{ + "MEDIA_NOTE_FETCH_PARAMS_MESSAGE_TYPE_UNSPECIFIED": 0, + "MEDIA_NOTE_FETCH_PARAMS_MESSAGE_TYPE_MENTION": 1, + "MEDIA_NOTE_FETCH_PARAMS_MESSAGE_TYPE_REPLY": 2, + } +) + +func (x MediaNoteFetchParamsMessageType) Enum() *MediaNoteFetchParamsMessageType { + p := new(MediaNoteFetchParamsMessageType) + *p = x + return p +} + +func (x MediaNoteFetchParamsMessageType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (MediaNoteFetchParamsMessageType) Descriptor() protoreflect.EnumDescriptor { + return file_instamadilloXmaContentRef_InstamadilloXmaContentRef_proto_enumTypes[2].Descriptor() +} + +func (MediaNoteFetchParamsMessageType) Type() protoreflect.EnumType { + return &file_instamadilloXmaContentRef_InstamadilloXmaContentRef_proto_enumTypes[2] +} + +func (x MediaNoteFetchParamsMessageType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *MediaNoteFetchParamsMessageType) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = MediaNoteFetchParamsMessageType(num) + return nil +} + +// Deprecated: Use MediaNoteFetchParamsMessageType.Descriptor instead. +func (MediaNoteFetchParamsMessageType) EnumDescriptor() ([]byte, []int) { + return file_instamadilloXmaContentRef_InstamadilloXmaContentRef_proto_rawDescGZIP(), []int{2} +} + +type XmaContentRef struct { + state protoimpl.MessageState `protogen:"open.v1"` + ActionType *XmaActionType `protobuf:"varint,1,opt,name=actionType,enum=InstamadilloXmaContentRef.XmaActionType" json:"actionType,omitempty"` + ContentType *ReceiverFetchContentType `protobuf:"varint,2,opt,name=contentType,enum=InstamadilloXmaContentRef.ReceiverFetchContentType" json:"contentType,omitempty"` + TargetURL *string `protobuf:"bytes,3,opt,name=targetURL" json:"targetURL,omitempty"` + UserName *string `protobuf:"bytes,4,opt,name=userName" json:"userName,omitempty"` + OwnerFbid *string `protobuf:"bytes,5,opt,name=ownerFbid" json:"ownerFbid,omitempty"` + FetchParams *ReceiverFetchXmaFetchParams `protobuf:"bytes,6,opt,name=fetchParams" json:"fetchParams,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *XmaContentRef) Reset() { + *x = XmaContentRef{} + mi := &file_instamadilloXmaContentRef_InstamadilloXmaContentRef_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *XmaContentRef) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*XmaContentRef) ProtoMessage() {} + +func (x *XmaContentRef) ProtoReflect() protoreflect.Message { + mi := &file_instamadilloXmaContentRef_InstamadilloXmaContentRef_proto_msgTypes[0] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use XmaContentRef.ProtoReflect.Descriptor instead. +func (*XmaContentRef) Descriptor() ([]byte, []int) { + return file_instamadilloXmaContentRef_InstamadilloXmaContentRef_proto_rawDescGZIP(), []int{0} +} + +func (x *XmaContentRef) GetActionType() XmaActionType { + if x != nil && x.ActionType != nil { + return *x.ActionType + } + return XmaActionType_XMA_ACTION_TYPE_UNSPECIFIED +} + +func (x *XmaContentRef) GetContentType() ReceiverFetchContentType { + if x != nil && x.ContentType != nil { + return *x.ContentType + } + return ReceiverFetchContentType_RECEIVER_FETCH_CONTENT_TYPE_UNSPECIFIED +} + +func (x *XmaContentRef) GetTargetURL() string { + if x != nil && x.TargetURL != nil { + return *x.TargetURL + } + return "" +} + +func (x *XmaContentRef) GetUserName() string { + if x != nil && x.UserName != nil { + return *x.UserName + } + return "" +} + +func (x *XmaContentRef) GetOwnerFbid() string { + if x != nil && x.OwnerFbid != nil { + return *x.OwnerFbid + } + return "" +} + +func (x *XmaContentRef) GetFetchParams() *ReceiverFetchXmaFetchParams { + if x != nil { + return x.FetchParams + } + return nil +} + +type ReceiverFetchXmaFetchParams struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Types that are valid to be assigned to ReceiverFetchXmaFetchParams: + // + // *ReceiverFetchXmaFetchParams_NoteFetchParams + // *ReceiverFetchXmaFetchParams_StoryFetchParams + // *ReceiverFetchXmaFetchParams_ProfileFetchParams + // *ReceiverFetchXmaFetchParams_ClipFetchParams + // *ReceiverFetchXmaFetchParams_FeedFetchParams + // *ReceiverFetchXmaFetchParams_LiveFetchParams + // *ReceiverFetchXmaFetchParams_CommentFetchParams + // *ReceiverFetchXmaFetchParams_LocationShareFetchParams + // *ReceiverFetchXmaFetchParams_ReelsAudioFetchParams + // *ReceiverFetchXmaFetchParams_MediaNoteFetchParams + // *ReceiverFetchXmaFetchParams_SocialContextFetchParams + ReceiverFetchXmaFetchParams isReceiverFetchXmaFetchParams_ReceiverFetchXmaFetchParams `protobuf_oneof:"receiverFetchXmaFetchParams"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ReceiverFetchXmaFetchParams) Reset() { + *x = ReceiverFetchXmaFetchParams{} + mi := &file_instamadilloXmaContentRef_InstamadilloXmaContentRef_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ReceiverFetchXmaFetchParams) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ReceiverFetchXmaFetchParams) ProtoMessage() {} + +func (x *ReceiverFetchXmaFetchParams) ProtoReflect() protoreflect.Message { + mi := &file_instamadilloXmaContentRef_InstamadilloXmaContentRef_proto_msgTypes[1] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ReceiverFetchXmaFetchParams.ProtoReflect.Descriptor instead. +func (*ReceiverFetchXmaFetchParams) Descriptor() ([]byte, []int) { + return file_instamadilloXmaContentRef_InstamadilloXmaContentRef_proto_rawDescGZIP(), []int{1} +} + +func (x *ReceiverFetchXmaFetchParams) GetReceiverFetchXmaFetchParams() isReceiverFetchXmaFetchParams_ReceiverFetchXmaFetchParams { + if x != nil { + return x.ReceiverFetchXmaFetchParams + } + return nil +} + +func (x *ReceiverFetchXmaFetchParams) GetNoteFetchParams() *ReceiverFetchXmaNoteFetchParams { + if x != nil { + if x, ok := x.ReceiverFetchXmaFetchParams.(*ReceiverFetchXmaFetchParams_NoteFetchParams); ok { + return x.NoteFetchParams + } + } + return nil +} + +func (x *ReceiverFetchXmaFetchParams) GetStoryFetchParams() *ReceiverFetchXmaStoryFetchParams { + if x != nil { + if x, ok := x.ReceiverFetchXmaFetchParams.(*ReceiverFetchXmaFetchParams_StoryFetchParams); ok { + return x.StoryFetchParams + } + } + return nil +} + +func (x *ReceiverFetchXmaFetchParams) GetProfileFetchParams() *ReceiverFetchXmaProfileFetchParams { + if x != nil { + if x, ok := x.ReceiverFetchXmaFetchParams.(*ReceiverFetchXmaFetchParams_ProfileFetchParams); ok { + return x.ProfileFetchParams + } + } + return nil +} + +func (x *ReceiverFetchXmaFetchParams) GetClipFetchParams() *ReceiverFetchXmaClipFetchParams { + if x != nil { + if x, ok := x.ReceiverFetchXmaFetchParams.(*ReceiverFetchXmaFetchParams_ClipFetchParams); ok { + return x.ClipFetchParams + } + } + return nil +} + +func (x *ReceiverFetchXmaFetchParams) GetFeedFetchParams() *ReceiverFetchXmaFeedFetchParams { + if x != nil { + if x, ok := x.ReceiverFetchXmaFetchParams.(*ReceiverFetchXmaFetchParams_FeedFetchParams); ok { + return x.FeedFetchParams + } + } + return nil +} + +func (x *ReceiverFetchXmaFetchParams) GetLiveFetchParams() *ReceiverFetchXmaLiveFetchParams { + if x != nil { + if x, ok := x.ReceiverFetchXmaFetchParams.(*ReceiverFetchXmaFetchParams_LiveFetchParams); ok { + return x.LiveFetchParams + } + } + return nil +} + +func (x *ReceiverFetchXmaFetchParams) GetCommentFetchParams() *ReceiverFetchXmaCommentFetchParams { + if x != nil { + if x, ok := x.ReceiverFetchXmaFetchParams.(*ReceiverFetchXmaFetchParams_CommentFetchParams); ok { + return x.CommentFetchParams + } + } + return nil +} + +func (x *ReceiverFetchXmaFetchParams) GetLocationShareFetchParams() *ReceiverFetchXmaLocationShareFetchParams { + if x != nil { + if x, ok := x.ReceiverFetchXmaFetchParams.(*ReceiverFetchXmaFetchParams_LocationShareFetchParams); ok { + return x.LocationShareFetchParams + } + } + return nil +} + +func (x *ReceiverFetchXmaFetchParams) GetReelsAudioFetchParams() *ReceiverFetchXmaReelsAudioFetchParams { + if x != nil { + if x, ok := x.ReceiverFetchXmaFetchParams.(*ReceiverFetchXmaFetchParams_ReelsAudioFetchParams); ok { + return x.ReelsAudioFetchParams + } + } + return nil +} + +func (x *ReceiverFetchXmaFetchParams) GetMediaNoteFetchParams() *ReceiverFetchXmaMediaNoteFetchParams { + if x != nil { + if x, ok := x.ReceiverFetchXmaFetchParams.(*ReceiverFetchXmaFetchParams_MediaNoteFetchParams); ok { + return x.MediaNoteFetchParams + } + } + return nil +} + +func (x *ReceiverFetchXmaFetchParams) GetSocialContextFetchParams() *ReceiverFetchXmaSocialContextFetchParams { + if x != nil { + if x, ok := x.ReceiverFetchXmaFetchParams.(*ReceiverFetchXmaFetchParams_SocialContextFetchParams); ok { + return x.SocialContextFetchParams + } + } + return nil +} + +type isReceiverFetchXmaFetchParams_ReceiverFetchXmaFetchParams interface { + isReceiverFetchXmaFetchParams_ReceiverFetchXmaFetchParams() +} + +type ReceiverFetchXmaFetchParams_NoteFetchParams struct { + NoteFetchParams *ReceiverFetchXmaNoteFetchParams `protobuf:"bytes,1,opt,name=noteFetchParams,oneof"` +} + +type ReceiverFetchXmaFetchParams_StoryFetchParams struct { + StoryFetchParams *ReceiverFetchXmaStoryFetchParams `protobuf:"bytes,2,opt,name=storyFetchParams,oneof"` +} + +type ReceiverFetchXmaFetchParams_ProfileFetchParams struct { + ProfileFetchParams *ReceiverFetchXmaProfileFetchParams `protobuf:"bytes,3,opt,name=profileFetchParams,oneof"` +} + +type ReceiverFetchXmaFetchParams_ClipFetchParams struct { + ClipFetchParams *ReceiverFetchXmaClipFetchParams `protobuf:"bytes,4,opt,name=clipFetchParams,oneof"` +} + +type ReceiverFetchXmaFetchParams_FeedFetchParams struct { + FeedFetchParams *ReceiverFetchXmaFeedFetchParams `protobuf:"bytes,5,opt,name=feedFetchParams,oneof"` +} + +type ReceiverFetchXmaFetchParams_LiveFetchParams struct { + LiveFetchParams *ReceiverFetchXmaLiveFetchParams `protobuf:"bytes,6,opt,name=liveFetchParams,oneof"` +} + +type ReceiverFetchXmaFetchParams_CommentFetchParams struct { + CommentFetchParams *ReceiverFetchXmaCommentFetchParams `protobuf:"bytes,7,opt,name=commentFetchParams,oneof"` +} + +type ReceiverFetchXmaFetchParams_LocationShareFetchParams struct { + LocationShareFetchParams *ReceiverFetchXmaLocationShareFetchParams `protobuf:"bytes,8,opt,name=locationShareFetchParams,oneof"` +} + +type ReceiverFetchXmaFetchParams_ReelsAudioFetchParams struct { + ReelsAudioFetchParams *ReceiverFetchXmaReelsAudioFetchParams `protobuf:"bytes,9,opt,name=reelsAudioFetchParams,oneof"` +} + +type ReceiverFetchXmaFetchParams_MediaNoteFetchParams struct { + MediaNoteFetchParams *ReceiverFetchXmaMediaNoteFetchParams `protobuf:"bytes,10,opt,name=mediaNoteFetchParams,oneof"` +} + +type ReceiverFetchXmaFetchParams_SocialContextFetchParams struct { + SocialContextFetchParams *ReceiverFetchXmaSocialContextFetchParams `protobuf:"bytes,11,opt,name=socialContextFetchParams,oneof"` +} + +func (*ReceiverFetchXmaFetchParams_NoteFetchParams) isReceiverFetchXmaFetchParams_ReceiverFetchXmaFetchParams() { +} + +func (*ReceiverFetchXmaFetchParams_StoryFetchParams) isReceiverFetchXmaFetchParams_ReceiverFetchXmaFetchParams() { +} + +func (*ReceiverFetchXmaFetchParams_ProfileFetchParams) isReceiverFetchXmaFetchParams_ReceiverFetchXmaFetchParams() { +} + +func (*ReceiverFetchXmaFetchParams_ClipFetchParams) isReceiverFetchXmaFetchParams_ReceiverFetchXmaFetchParams() { +} + +func (*ReceiverFetchXmaFetchParams_FeedFetchParams) isReceiverFetchXmaFetchParams_ReceiverFetchXmaFetchParams() { +} + +func (*ReceiverFetchXmaFetchParams_LiveFetchParams) isReceiverFetchXmaFetchParams_ReceiverFetchXmaFetchParams() { +} + +func (*ReceiverFetchXmaFetchParams_CommentFetchParams) isReceiverFetchXmaFetchParams_ReceiverFetchXmaFetchParams() { +} + +func (*ReceiverFetchXmaFetchParams_LocationShareFetchParams) isReceiverFetchXmaFetchParams_ReceiverFetchXmaFetchParams() { +} + +func (*ReceiverFetchXmaFetchParams_ReelsAudioFetchParams) isReceiverFetchXmaFetchParams_ReceiverFetchXmaFetchParams() { +} + +func (*ReceiverFetchXmaFetchParams_MediaNoteFetchParams) isReceiverFetchXmaFetchParams_ReceiverFetchXmaFetchParams() { +} + +func (*ReceiverFetchXmaFetchParams_SocialContextFetchParams) isReceiverFetchXmaFetchParams_ReceiverFetchXmaFetchParams() { +} + +type ReceiverFetchXmaNoteFetchParams struct { + state protoimpl.MessageState `protogen:"open.v1"` + NoteIgid *string `protobuf:"bytes,1,opt,name=noteIgid" json:"noteIgid,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ReceiverFetchXmaNoteFetchParams) Reset() { + *x = ReceiverFetchXmaNoteFetchParams{} + mi := &file_instamadilloXmaContentRef_InstamadilloXmaContentRef_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ReceiverFetchXmaNoteFetchParams) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ReceiverFetchXmaNoteFetchParams) ProtoMessage() {} + +func (x *ReceiverFetchXmaNoteFetchParams) ProtoReflect() protoreflect.Message { + mi := &file_instamadilloXmaContentRef_InstamadilloXmaContentRef_proto_msgTypes[2] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ReceiverFetchXmaNoteFetchParams.ProtoReflect.Descriptor instead. +func (*ReceiverFetchXmaNoteFetchParams) Descriptor() ([]byte, []int) { + return file_instamadilloXmaContentRef_InstamadilloXmaContentRef_proto_rawDescGZIP(), []int{2} +} + +func (x *ReceiverFetchXmaNoteFetchParams) GetNoteIgid() string { + if x != nil && x.NoteIgid != nil { + return *x.NoteIgid + } + return "" +} + +type ReceiverFetchXmaStoryFetchParams struct { + state protoimpl.MessageState `protogen:"open.v1"` + StoryIgid *string `protobuf:"bytes,1,opt,name=storyIgid" json:"storyIgid,omitempty"` + ReelID *string `protobuf:"bytes,2,opt,name=reelID" json:"reelID,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ReceiverFetchXmaStoryFetchParams) Reset() { + *x = ReceiverFetchXmaStoryFetchParams{} + mi := &file_instamadilloXmaContentRef_InstamadilloXmaContentRef_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ReceiverFetchXmaStoryFetchParams) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ReceiverFetchXmaStoryFetchParams) ProtoMessage() {} + +func (x *ReceiverFetchXmaStoryFetchParams) ProtoReflect() protoreflect.Message { + mi := &file_instamadilloXmaContentRef_InstamadilloXmaContentRef_proto_msgTypes[3] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ReceiverFetchXmaStoryFetchParams.ProtoReflect.Descriptor instead. +func (*ReceiverFetchXmaStoryFetchParams) Descriptor() ([]byte, []int) { + return file_instamadilloXmaContentRef_InstamadilloXmaContentRef_proto_rawDescGZIP(), []int{3} +} + +func (x *ReceiverFetchXmaStoryFetchParams) GetStoryIgid() string { + if x != nil && x.StoryIgid != nil { + return *x.StoryIgid + } + return "" +} + +func (x *ReceiverFetchXmaStoryFetchParams) GetReelID() string { + if x != nil && x.ReelID != nil { + return *x.ReelID + } + return "" +} + +type ReceiverFetchXmaProfileFetchParams struct { + state protoimpl.MessageState `protogen:"open.v1"` + ProfileIgid *string `protobuf:"bytes,1,opt,name=profileIgid" json:"profileIgid,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ReceiverFetchXmaProfileFetchParams) Reset() { + *x = ReceiverFetchXmaProfileFetchParams{} + mi := &file_instamadilloXmaContentRef_InstamadilloXmaContentRef_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ReceiverFetchXmaProfileFetchParams) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ReceiverFetchXmaProfileFetchParams) ProtoMessage() {} + +func (x *ReceiverFetchXmaProfileFetchParams) ProtoReflect() protoreflect.Message { + mi := &file_instamadilloXmaContentRef_InstamadilloXmaContentRef_proto_msgTypes[4] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ReceiverFetchXmaProfileFetchParams.ProtoReflect.Descriptor instead. +func (*ReceiverFetchXmaProfileFetchParams) Descriptor() ([]byte, []int) { + return file_instamadilloXmaContentRef_InstamadilloXmaContentRef_proto_rawDescGZIP(), []int{4} +} + +func (x *ReceiverFetchXmaProfileFetchParams) GetProfileIgid() string { + if x != nil && x.ProfileIgid != nil { + return *x.ProfileIgid + } + return "" +} + +type ReceiverFetchXmaClipFetchParams struct { + state protoimpl.MessageState `protogen:"open.v1"` + MediaIgid *string `protobuf:"bytes,1,opt,name=mediaIgid" json:"mediaIgid,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ReceiverFetchXmaClipFetchParams) Reset() { + *x = ReceiverFetchXmaClipFetchParams{} + mi := &file_instamadilloXmaContentRef_InstamadilloXmaContentRef_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ReceiverFetchXmaClipFetchParams) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ReceiverFetchXmaClipFetchParams) ProtoMessage() {} + +func (x *ReceiverFetchXmaClipFetchParams) ProtoReflect() protoreflect.Message { + mi := &file_instamadilloXmaContentRef_InstamadilloXmaContentRef_proto_msgTypes[5] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ReceiverFetchXmaClipFetchParams.ProtoReflect.Descriptor instead. +func (*ReceiverFetchXmaClipFetchParams) Descriptor() ([]byte, []int) { + return file_instamadilloXmaContentRef_InstamadilloXmaContentRef_proto_rawDescGZIP(), []int{5} +} + +func (x *ReceiverFetchXmaClipFetchParams) GetMediaIgid() string { + if x != nil && x.MediaIgid != nil { + return *x.MediaIgid + } + return "" +} + +type ReceiverFetchXmaFeedFetchParams struct { + state protoimpl.MessageState `protogen:"open.v1"` + MediaIgid *string `protobuf:"bytes,1,opt,name=mediaIgid" json:"mediaIgid,omitempty"` + CarouselShareChildMediaIgid *string `protobuf:"bytes,2,opt,name=carouselShareChildMediaIgid" json:"carouselShareChildMediaIgid,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ReceiverFetchXmaFeedFetchParams) Reset() { + *x = ReceiverFetchXmaFeedFetchParams{} + mi := &file_instamadilloXmaContentRef_InstamadilloXmaContentRef_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ReceiverFetchXmaFeedFetchParams) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ReceiverFetchXmaFeedFetchParams) ProtoMessage() {} + +func (x *ReceiverFetchXmaFeedFetchParams) ProtoReflect() protoreflect.Message { + mi := &file_instamadilloXmaContentRef_InstamadilloXmaContentRef_proto_msgTypes[6] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ReceiverFetchXmaFeedFetchParams.ProtoReflect.Descriptor instead. +func (*ReceiverFetchXmaFeedFetchParams) Descriptor() ([]byte, []int) { + return file_instamadilloXmaContentRef_InstamadilloXmaContentRef_proto_rawDescGZIP(), []int{6} +} + +func (x *ReceiverFetchXmaFeedFetchParams) GetMediaIgid() string { + if x != nil && x.MediaIgid != nil { + return *x.MediaIgid + } + return "" +} + +func (x *ReceiverFetchXmaFeedFetchParams) GetCarouselShareChildMediaIgid() string { + if x != nil && x.CarouselShareChildMediaIgid != nil { + return *x.CarouselShareChildMediaIgid + } + return "" +} + +type ReceiverFetchXmaLiveFetchParams struct { + state protoimpl.MessageState `protogen:"open.v1"` + LiveIgid *string `protobuf:"bytes,1,opt,name=liveIgid" json:"liveIgid,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ReceiverFetchXmaLiveFetchParams) Reset() { + *x = ReceiverFetchXmaLiveFetchParams{} + mi := &file_instamadilloXmaContentRef_InstamadilloXmaContentRef_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ReceiverFetchXmaLiveFetchParams) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ReceiverFetchXmaLiveFetchParams) ProtoMessage() {} + +func (x *ReceiverFetchXmaLiveFetchParams) ProtoReflect() protoreflect.Message { + mi := &file_instamadilloXmaContentRef_InstamadilloXmaContentRef_proto_msgTypes[7] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ReceiverFetchXmaLiveFetchParams.ProtoReflect.Descriptor instead. +func (*ReceiverFetchXmaLiveFetchParams) Descriptor() ([]byte, []int) { + return file_instamadilloXmaContentRef_InstamadilloXmaContentRef_proto_rawDescGZIP(), []int{7} +} + +func (x *ReceiverFetchXmaLiveFetchParams) GetLiveIgid() string { + if x != nil && x.LiveIgid != nil { + return *x.LiveIgid + } + return "" +} + +type ReceiverFetchXmaCommentFetchParams struct { + state protoimpl.MessageState `protogen:"open.v1"` + CommentFbid *string `protobuf:"bytes,1,opt,name=commentFbid" json:"commentFbid,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ReceiverFetchXmaCommentFetchParams) Reset() { + *x = ReceiverFetchXmaCommentFetchParams{} + mi := &file_instamadilloXmaContentRef_InstamadilloXmaContentRef_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ReceiverFetchXmaCommentFetchParams) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ReceiverFetchXmaCommentFetchParams) ProtoMessage() {} + +func (x *ReceiverFetchXmaCommentFetchParams) ProtoReflect() protoreflect.Message { + mi := &file_instamadilloXmaContentRef_InstamadilloXmaContentRef_proto_msgTypes[8] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ReceiverFetchXmaCommentFetchParams.ProtoReflect.Descriptor instead. +func (*ReceiverFetchXmaCommentFetchParams) Descriptor() ([]byte, []int) { + return file_instamadilloXmaContentRef_InstamadilloXmaContentRef_proto_rawDescGZIP(), []int{8} +} + +func (x *ReceiverFetchXmaCommentFetchParams) GetCommentFbid() string { + if x != nil && x.CommentFbid != nil { + return *x.CommentFbid + } + return "" +} + +type ReceiverFetchXmaLocationShareFetchParams struct { + state protoimpl.MessageState `protogen:"open.v1"` + LocationIgid *string `protobuf:"bytes,1,opt,name=locationIgid" json:"locationIgid,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ReceiverFetchXmaLocationShareFetchParams) Reset() { + *x = ReceiverFetchXmaLocationShareFetchParams{} + mi := &file_instamadilloXmaContentRef_InstamadilloXmaContentRef_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ReceiverFetchXmaLocationShareFetchParams) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ReceiverFetchXmaLocationShareFetchParams) ProtoMessage() {} + +func (x *ReceiverFetchXmaLocationShareFetchParams) ProtoReflect() protoreflect.Message { + mi := &file_instamadilloXmaContentRef_InstamadilloXmaContentRef_proto_msgTypes[9] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ReceiverFetchXmaLocationShareFetchParams.ProtoReflect.Descriptor instead. +func (*ReceiverFetchXmaLocationShareFetchParams) Descriptor() ([]byte, []int) { + return file_instamadilloXmaContentRef_InstamadilloXmaContentRef_proto_rawDescGZIP(), []int{9} +} + +func (x *ReceiverFetchXmaLocationShareFetchParams) GetLocationIgid() string { + if x != nil && x.LocationIgid != nil { + return *x.LocationIgid + } + return "" +} + +type ReceiverFetchXmaReelsAudioFetchParams struct { + state protoimpl.MessageState `protogen:"open.v1"` + AudioIgid *string `protobuf:"bytes,1,opt,name=audioIgid" json:"audioIgid,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ReceiverFetchXmaReelsAudioFetchParams) Reset() { + *x = ReceiverFetchXmaReelsAudioFetchParams{} + mi := &file_instamadilloXmaContentRef_InstamadilloXmaContentRef_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ReceiverFetchXmaReelsAudioFetchParams) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ReceiverFetchXmaReelsAudioFetchParams) ProtoMessage() {} + +func (x *ReceiverFetchXmaReelsAudioFetchParams) ProtoReflect() protoreflect.Message { + mi := &file_instamadilloXmaContentRef_InstamadilloXmaContentRef_proto_msgTypes[10] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ReceiverFetchXmaReelsAudioFetchParams.ProtoReflect.Descriptor instead. +func (*ReceiverFetchXmaReelsAudioFetchParams) Descriptor() ([]byte, []int) { + return file_instamadilloXmaContentRef_InstamadilloXmaContentRef_proto_rawDescGZIP(), []int{10} +} + +func (x *ReceiverFetchXmaReelsAudioFetchParams) GetAudioIgid() string { + if x != nil && x.AudioIgid != nil { + return *x.AudioIgid + } + return "" +} + +type ReceiverFetchXmaMediaNoteFetchParams struct { + state protoimpl.MessageState `protogen:"open.v1"` + MediaNoteIgid *string `protobuf:"bytes,1,opt,name=mediaNoteIgid" json:"mediaNoteIgid,omitempty"` + MessageType *MediaNoteFetchParamsMessageType `protobuf:"varint,2,opt,name=messageType,enum=InstamadilloXmaContentRef.MediaNoteFetchParamsMessageType" json:"messageType,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ReceiverFetchXmaMediaNoteFetchParams) Reset() { + *x = ReceiverFetchXmaMediaNoteFetchParams{} + mi := &file_instamadilloXmaContentRef_InstamadilloXmaContentRef_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ReceiverFetchXmaMediaNoteFetchParams) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ReceiverFetchXmaMediaNoteFetchParams) ProtoMessage() {} + +func (x *ReceiverFetchXmaMediaNoteFetchParams) ProtoReflect() protoreflect.Message { + mi := &file_instamadilloXmaContentRef_InstamadilloXmaContentRef_proto_msgTypes[11] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ReceiverFetchXmaMediaNoteFetchParams.ProtoReflect.Descriptor instead. +func (*ReceiverFetchXmaMediaNoteFetchParams) Descriptor() ([]byte, []int) { + return file_instamadilloXmaContentRef_InstamadilloXmaContentRef_proto_rawDescGZIP(), []int{11} +} + +func (x *ReceiverFetchXmaMediaNoteFetchParams) GetMediaNoteIgid() string { + if x != nil && x.MediaNoteIgid != nil { + return *x.MediaNoteIgid + } + return "" +} + +func (x *ReceiverFetchXmaMediaNoteFetchParams) GetMessageType() MediaNoteFetchParamsMessageType { + if x != nil && x.MessageType != nil { + return *x.MessageType + } + return MediaNoteFetchParamsMessageType_MEDIA_NOTE_FETCH_PARAMS_MESSAGE_TYPE_UNSPECIFIED +} + +type ReceiverFetchXmaSocialContextFetchParams struct { + state protoimpl.MessageState `protogen:"open.v1"` + MediaIgid *string `protobuf:"bytes,1,opt,name=mediaIgid" json:"mediaIgid,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ReceiverFetchXmaSocialContextFetchParams) Reset() { + *x = ReceiverFetchXmaSocialContextFetchParams{} + mi := &file_instamadilloXmaContentRef_InstamadilloXmaContentRef_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ReceiverFetchXmaSocialContextFetchParams) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ReceiverFetchXmaSocialContextFetchParams) ProtoMessage() {} + +func (x *ReceiverFetchXmaSocialContextFetchParams) ProtoReflect() protoreflect.Message { + mi := &file_instamadilloXmaContentRef_InstamadilloXmaContentRef_proto_msgTypes[12] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ReceiverFetchXmaSocialContextFetchParams.ProtoReflect.Descriptor instead. +func (*ReceiverFetchXmaSocialContextFetchParams) Descriptor() ([]byte, []int) { + return file_instamadilloXmaContentRef_InstamadilloXmaContentRef_proto_rawDescGZIP(), []int{12} +} + +func (x *ReceiverFetchXmaSocialContextFetchParams) GetMediaIgid() string { + if x != nil && x.MediaIgid != nil { + return *x.MediaIgid + } + return "" +} + +var File_instamadilloXmaContentRef_InstamadilloXmaContentRef_proto protoreflect.FileDescriptor + +const file_instamadilloXmaContentRef_InstamadilloXmaContentRef_proto_rawDesc = "" + + "\n" + + "9instamadilloXmaContentRef/InstamadilloXmaContentRef.proto\x12\x19InstamadilloXmaContentRef\"\xe2\x02\n" + + "\rXmaContentRef\x12H\n" + + "\n" + + "actionType\x18\x01 \x01(\x0e2(.InstamadilloXmaContentRef.XmaActionTypeR\n" + + "actionType\x12U\n" + + "\vcontentType\x18\x02 \x01(\x0e23.InstamadilloXmaContentRef.ReceiverFetchContentTypeR\vcontentType\x12\x1c\n" + + "\ttargetURL\x18\x03 \x01(\tR\ttargetURL\x12\x1a\n" + + "\buserName\x18\x04 \x01(\tR\buserName\x12\x1c\n" + + "\townerFbid\x18\x05 \x01(\tR\townerFbid\x12X\n" + + "\vfetchParams\x18\x06 \x01(\v26.InstamadilloXmaContentRef.ReceiverFetchXmaFetchParamsR\vfetchParams\"\xa2\n" + + "\n" + + "\x1bReceiverFetchXmaFetchParams\x12f\n" + + "\x0fnoteFetchParams\x18\x01 \x01(\v2:.InstamadilloXmaContentRef.ReceiverFetchXmaNoteFetchParamsH\x00R\x0fnoteFetchParams\x12i\n" + + "\x10storyFetchParams\x18\x02 \x01(\v2;.InstamadilloXmaContentRef.ReceiverFetchXmaStoryFetchParamsH\x00R\x10storyFetchParams\x12o\n" + + "\x12profileFetchParams\x18\x03 \x01(\v2=.InstamadilloXmaContentRef.ReceiverFetchXmaProfileFetchParamsH\x00R\x12profileFetchParams\x12f\n" + + "\x0fclipFetchParams\x18\x04 \x01(\v2:.InstamadilloXmaContentRef.ReceiverFetchXmaClipFetchParamsH\x00R\x0fclipFetchParams\x12f\n" + + "\x0ffeedFetchParams\x18\x05 \x01(\v2:.InstamadilloXmaContentRef.ReceiverFetchXmaFeedFetchParamsH\x00R\x0ffeedFetchParams\x12f\n" + + "\x0fliveFetchParams\x18\x06 \x01(\v2:.InstamadilloXmaContentRef.ReceiverFetchXmaLiveFetchParamsH\x00R\x0fliveFetchParams\x12o\n" + + "\x12commentFetchParams\x18\a \x01(\v2=.InstamadilloXmaContentRef.ReceiverFetchXmaCommentFetchParamsH\x00R\x12commentFetchParams\x12\x81\x01\n" + + "\x18locationShareFetchParams\x18\b \x01(\v2C.InstamadilloXmaContentRef.ReceiverFetchXmaLocationShareFetchParamsH\x00R\x18locationShareFetchParams\x12x\n" + + "\x15reelsAudioFetchParams\x18\t \x01(\v2@.InstamadilloXmaContentRef.ReceiverFetchXmaReelsAudioFetchParamsH\x00R\x15reelsAudioFetchParams\x12u\n" + + "\x14mediaNoteFetchParams\x18\n" + + " \x01(\v2?.InstamadilloXmaContentRef.ReceiverFetchXmaMediaNoteFetchParamsH\x00R\x14mediaNoteFetchParams\x12\x81\x01\n" + + "\x18socialContextFetchParams\x18\v \x01(\v2C.InstamadilloXmaContentRef.ReceiverFetchXmaSocialContextFetchParamsH\x00R\x18socialContextFetchParamsB\x1d\n" + + "\x1breceiverFetchXmaFetchParams\"=\n" + + "\x1fReceiverFetchXmaNoteFetchParams\x12\x1a\n" + + "\bnoteIgid\x18\x01 \x01(\tR\bnoteIgid\"X\n" + + " ReceiverFetchXmaStoryFetchParams\x12\x1c\n" + + "\tstoryIgid\x18\x01 \x01(\tR\tstoryIgid\x12\x16\n" + + "\x06reelID\x18\x02 \x01(\tR\x06reelID\"F\n" + + "\"ReceiverFetchXmaProfileFetchParams\x12 \n" + + "\vprofileIgid\x18\x01 \x01(\tR\vprofileIgid\"?\n" + + "\x1fReceiverFetchXmaClipFetchParams\x12\x1c\n" + + "\tmediaIgid\x18\x01 \x01(\tR\tmediaIgid\"\x81\x01\n" + + "\x1fReceiverFetchXmaFeedFetchParams\x12\x1c\n" + + "\tmediaIgid\x18\x01 \x01(\tR\tmediaIgid\x12@\n" + + "\x1bcarouselShareChildMediaIgid\x18\x02 \x01(\tR\x1bcarouselShareChildMediaIgid\"=\n" + + "\x1fReceiverFetchXmaLiveFetchParams\x12\x1a\n" + + "\bliveIgid\x18\x01 \x01(\tR\bliveIgid\"F\n" + + "\"ReceiverFetchXmaCommentFetchParams\x12 \n" + + "\vcommentFbid\x18\x01 \x01(\tR\vcommentFbid\"N\n" + + "(ReceiverFetchXmaLocationShareFetchParams\x12\"\n" + + "\flocationIgid\x18\x01 \x01(\tR\flocationIgid\"E\n" + + "%ReceiverFetchXmaReelsAudioFetchParams\x12\x1c\n" + + "\taudioIgid\x18\x01 \x01(\tR\taudioIgid\"\xaa\x01\n" + + "$ReceiverFetchXmaMediaNoteFetchParams\x12$\n" + + "\rmediaNoteIgid\x18\x01 \x01(\tR\rmediaNoteIgid\x12\\\n" + + "\vmessageType\x18\x02 \x01(\x0e2:.InstamadilloXmaContentRef.MediaNoteFetchParamsMessageTypeR\vmessageType\"H\n" + + "(ReceiverFetchXmaSocialContextFetchParams\x12\x1c\n" + + "\tmediaIgid\x18\x01 \x01(\tR\tmediaIgid*\x9e\x01\n" + + "\rXmaActionType\x12\x1f\n" + + "\x1bXMA_ACTION_TYPE_UNSPECIFIED\x10\x00\x12\x19\n" + + "\x15XMA_ACTION_TYPE_SHARE\x10\x01\x12\x19\n" + + "\x15XMA_ACTION_TYPE_REPLY\x10\x02\x12\x19\n" + + "\x15XMA_ACTION_TYPE_REACT\x10\x03\x12\x1b\n" + + "\x17XMA_ACTION_TYPE_MENTION\x10\x04*\xc2\x04\n" + + "\x18ReceiverFetchContentType\x12+\n" + + "'RECEIVER_FETCH_CONTENT_TYPE_UNSPECIFIED\x10\x00\x12$\n" + + " RECEIVER_FETCH_CONTENT_TYPE_NOTE\x10\x01\x12%\n" + + "!RECEIVER_FETCH_CONTENT_TYPE_STORY\x10\x02\x12'\n" + + "#RECEIVER_FETCH_CONTENT_TYPE_PROFILE\x10\x03\x12$\n" + + " RECEIVER_FETCH_CONTENT_TYPE_CLIP\x10\x04\x12$\n" + + " RECEIVER_FETCH_CONTENT_TYPE_FEED\x10\x05\x12$\n" + + " RECEIVER_FETCH_CONTENT_TYPE_LIVE\x10\x06\x12'\n" + + "#RECEIVER_FETCH_CONTENT_TYPE_COMMENT\x10\a\x12.\n" + + "*RECEIVER_FETCH_CONTENT_TYPE_LOCATION_SHARE\x10\b\x12+\n" + + "'RECEIVER_FETCH_CONTENT_TYPE_REELS_AUDIO\x10\t\x12*\n" + + "&RECEIVER_FETCH_CONTENT_TYPE_MEDIA_NOTE\x10\n" + + "\x12/\n" + + "+RECEIVER_FETCH_CONTENT_TYPE_STORY_HIGHLIGHT\x10\v\x12.\n" + + "*RECEIVER_FETCH_CONTENT_TYPE_SOCIAL_CONTEXT\x10\f*\xb9\x01\n" + + "\x1fMediaNoteFetchParamsMessageType\x124\n" + + "0MEDIA_NOTE_FETCH_PARAMS_MESSAGE_TYPE_UNSPECIFIED\x10\x00\x120\n" + + ",MEDIA_NOTE_FETCH_PARAMS_MESSAGE_TYPE_MENTION\x10\x01\x12.\n" + + "*MEDIA_NOTE_FETCH_PARAMS_MESSAGE_TYPE_REPLY\x10\x02B5Z3go.mau.fi/whatsmeow/proto/instamadilloXmaContentRef" + +var ( + file_instamadilloXmaContentRef_InstamadilloXmaContentRef_proto_rawDescOnce sync.Once + file_instamadilloXmaContentRef_InstamadilloXmaContentRef_proto_rawDescData []byte +) + +func file_instamadilloXmaContentRef_InstamadilloXmaContentRef_proto_rawDescGZIP() []byte { + file_instamadilloXmaContentRef_InstamadilloXmaContentRef_proto_rawDescOnce.Do(func() { + file_instamadilloXmaContentRef_InstamadilloXmaContentRef_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_instamadilloXmaContentRef_InstamadilloXmaContentRef_proto_rawDesc), len(file_instamadilloXmaContentRef_InstamadilloXmaContentRef_proto_rawDesc))) + }) + return file_instamadilloXmaContentRef_InstamadilloXmaContentRef_proto_rawDescData +} + +var file_instamadilloXmaContentRef_InstamadilloXmaContentRef_proto_enumTypes = make([]protoimpl.EnumInfo, 3) +var file_instamadilloXmaContentRef_InstamadilloXmaContentRef_proto_msgTypes = make([]protoimpl.MessageInfo, 13) +var file_instamadilloXmaContentRef_InstamadilloXmaContentRef_proto_goTypes = []any{ + (XmaActionType)(0), // 0: InstamadilloXmaContentRef.XmaActionType + (ReceiverFetchContentType)(0), // 1: InstamadilloXmaContentRef.ReceiverFetchContentType + (MediaNoteFetchParamsMessageType)(0), // 2: InstamadilloXmaContentRef.MediaNoteFetchParamsMessageType + (*XmaContentRef)(nil), // 3: InstamadilloXmaContentRef.XmaContentRef + (*ReceiverFetchXmaFetchParams)(nil), // 4: InstamadilloXmaContentRef.ReceiverFetchXmaFetchParams + (*ReceiverFetchXmaNoteFetchParams)(nil), // 5: InstamadilloXmaContentRef.ReceiverFetchXmaNoteFetchParams + (*ReceiverFetchXmaStoryFetchParams)(nil), // 6: InstamadilloXmaContentRef.ReceiverFetchXmaStoryFetchParams + (*ReceiverFetchXmaProfileFetchParams)(nil), // 7: InstamadilloXmaContentRef.ReceiverFetchXmaProfileFetchParams + (*ReceiverFetchXmaClipFetchParams)(nil), // 8: InstamadilloXmaContentRef.ReceiverFetchXmaClipFetchParams + (*ReceiverFetchXmaFeedFetchParams)(nil), // 9: InstamadilloXmaContentRef.ReceiverFetchXmaFeedFetchParams + (*ReceiverFetchXmaLiveFetchParams)(nil), // 10: InstamadilloXmaContentRef.ReceiverFetchXmaLiveFetchParams + (*ReceiverFetchXmaCommentFetchParams)(nil), // 11: InstamadilloXmaContentRef.ReceiverFetchXmaCommentFetchParams + (*ReceiverFetchXmaLocationShareFetchParams)(nil), // 12: InstamadilloXmaContentRef.ReceiverFetchXmaLocationShareFetchParams + (*ReceiverFetchXmaReelsAudioFetchParams)(nil), // 13: InstamadilloXmaContentRef.ReceiverFetchXmaReelsAudioFetchParams + (*ReceiverFetchXmaMediaNoteFetchParams)(nil), // 14: InstamadilloXmaContentRef.ReceiverFetchXmaMediaNoteFetchParams + (*ReceiverFetchXmaSocialContextFetchParams)(nil), // 15: InstamadilloXmaContentRef.ReceiverFetchXmaSocialContextFetchParams +} +var file_instamadilloXmaContentRef_InstamadilloXmaContentRef_proto_depIdxs = []int32{ + 0, // 0: InstamadilloXmaContentRef.XmaContentRef.actionType:type_name -> InstamadilloXmaContentRef.XmaActionType + 1, // 1: InstamadilloXmaContentRef.XmaContentRef.contentType:type_name -> InstamadilloXmaContentRef.ReceiverFetchContentType + 4, // 2: InstamadilloXmaContentRef.XmaContentRef.fetchParams:type_name -> InstamadilloXmaContentRef.ReceiverFetchXmaFetchParams + 5, // 3: InstamadilloXmaContentRef.ReceiverFetchXmaFetchParams.noteFetchParams:type_name -> InstamadilloXmaContentRef.ReceiverFetchXmaNoteFetchParams + 6, // 4: InstamadilloXmaContentRef.ReceiverFetchXmaFetchParams.storyFetchParams:type_name -> InstamadilloXmaContentRef.ReceiverFetchXmaStoryFetchParams + 7, // 5: InstamadilloXmaContentRef.ReceiverFetchXmaFetchParams.profileFetchParams:type_name -> InstamadilloXmaContentRef.ReceiverFetchXmaProfileFetchParams + 8, // 6: InstamadilloXmaContentRef.ReceiverFetchXmaFetchParams.clipFetchParams:type_name -> InstamadilloXmaContentRef.ReceiverFetchXmaClipFetchParams + 9, // 7: InstamadilloXmaContentRef.ReceiverFetchXmaFetchParams.feedFetchParams:type_name -> InstamadilloXmaContentRef.ReceiverFetchXmaFeedFetchParams + 10, // 8: InstamadilloXmaContentRef.ReceiverFetchXmaFetchParams.liveFetchParams:type_name -> InstamadilloXmaContentRef.ReceiverFetchXmaLiveFetchParams + 11, // 9: InstamadilloXmaContentRef.ReceiverFetchXmaFetchParams.commentFetchParams:type_name -> InstamadilloXmaContentRef.ReceiverFetchXmaCommentFetchParams + 12, // 10: InstamadilloXmaContentRef.ReceiverFetchXmaFetchParams.locationShareFetchParams:type_name -> InstamadilloXmaContentRef.ReceiverFetchXmaLocationShareFetchParams + 13, // 11: InstamadilloXmaContentRef.ReceiverFetchXmaFetchParams.reelsAudioFetchParams:type_name -> InstamadilloXmaContentRef.ReceiverFetchXmaReelsAudioFetchParams + 14, // 12: InstamadilloXmaContentRef.ReceiverFetchXmaFetchParams.mediaNoteFetchParams:type_name -> InstamadilloXmaContentRef.ReceiverFetchXmaMediaNoteFetchParams + 15, // 13: InstamadilloXmaContentRef.ReceiverFetchXmaFetchParams.socialContextFetchParams:type_name -> InstamadilloXmaContentRef.ReceiverFetchXmaSocialContextFetchParams + 2, // 14: InstamadilloXmaContentRef.ReceiverFetchXmaMediaNoteFetchParams.messageType:type_name -> InstamadilloXmaContentRef.MediaNoteFetchParamsMessageType + 15, // [15:15] is the sub-list for method output_type + 15, // [15:15] is the sub-list for method input_type + 15, // [15:15] is the sub-list for extension type_name + 15, // [15:15] is the sub-list for extension extendee + 0, // [0:15] is the sub-list for field type_name +} + +func init() { file_instamadilloXmaContentRef_InstamadilloXmaContentRef_proto_init() } +func file_instamadilloXmaContentRef_InstamadilloXmaContentRef_proto_init() { + if File_instamadilloXmaContentRef_InstamadilloXmaContentRef_proto != nil { + return + } + file_instamadilloXmaContentRef_InstamadilloXmaContentRef_proto_msgTypes[1].OneofWrappers = []any{ + (*ReceiverFetchXmaFetchParams_NoteFetchParams)(nil), + (*ReceiverFetchXmaFetchParams_StoryFetchParams)(nil), + (*ReceiverFetchXmaFetchParams_ProfileFetchParams)(nil), + (*ReceiverFetchXmaFetchParams_ClipFetchParams)(nil), + (*ReceiverFetchXmaFetchParams_FeedFetchParams)(nil), + (*ReceiverFetchXmaFetchParams_LiveFetchParams)(nil), + (*ReceiverFetchXmaFetchParams_CommentFetchParams)(nil), + (*ReceiverFetchXmaFetchParams_LocationShareFetchParams)(nil), + (*ReceiverFetchXmaFetchParams_ReelsAudioFetchParams)(nil), + (*ReceiverFetchXmaFetchParams_MediaNoteFetchParams)(nil), + (*ReceiverFetchXmaFetchParams_SocialContextFetchParams)(nil), + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: unsafe.Slice(unsafe.StringData(file_instamadilloXmaContentRef_InstamadilloXmaContentRef_proto_rawDesc), len(file_instamadilloXmaContentRef_InstamadilloXmaContentRef_proto_rawDesc)), + NumEnums: 3, + NumMessages: 13, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_instamadilloXmaContentRef_InstamadilloXmaContentRef_proto_goTypes, + DependencyIndexes: file_instamadilloXmaContentRef_InstamadilloXmaContentRef_proto_depIdxs, + EnumInfos: file_instamadilloXmaContentRef_InstamadilloXmaContentRef_proto_enumTypes, + MessageInfos: file_instamadilloXmaContentRef_InstamadilloXmaContentRef_proto_msgTypes, + }.Build() + File_instamadilloXmaContentRef_InstamadilloXmaContentRef_proto = out.File + file_instamadilloXmaContentRef_InstamadilloXmaContentRef_proto_goTypes = nil + file_instamadilloXmaContentRef_InstamadilloXmaContentRef_proto_depIdxs = nil +} diff --git a/vendor/go.mau.fi/whatsmeow/proto/instamadilloXmaContentRef/InstamadilloXmaContentRef.proto b/vendor/go.mau.fi/whatsmeow/proto/instamadilloXmaContentRef/InstamadilloXmaContentRef.proto new file mode 100644 index 0000000000..00bc9378d9 --- /dev/null +++ b/vendor/go.mau.fi/whatsmeow/proto/instamadilloXmaContentRef/InstamadilloXmaContentRef.proto @@ -0,0 +1,105 @@ +syntax = "proto2"; +package InstamadilloXmaContentRef; +option go_package = "go.mau.fi/whatsmeow/proto/instamadilloXmaContentRef"; + +enum XmaActionType { + XMA_ACTION_TYPE_UNSPECIFIED = 0; + XMA_ACTION_TYPE_SHARE = 1; + XMA_ACTION_TYPE_REPLY = 2; + XMA_ACTION_TYPE_REACT = 3; + XMA_ACTION_TYPE_MENTION = 4; +} + +enum ReceiverFetchContentType { + RECEIVER_FETCH_CONTENT_TYPE_UNSPECIFIED = 0; + RECEIVER_FETCH_CONTENT_TYPE_NOTE = 1; + RECEIVER_FETCH_CONTENT_TYPE_STORY = 2; + RECEIVER_FETCH_CONTENT_TYPE_PROFILE = 3; + RECEIVER_FETCH_CONTENT_TYPE_CLIP = 4; + RECEIVER_FETCH_CONTENT_TYPE_FEED = 5; + RECEIVER_FETCH_CONTENT_TYPE_LIVE = 6; + RECEIVER_FETCH_CONTENT_TYPE_COMMENT = 7; + RECEIVER_FETCH_CONTENT_TYPE_LOCATION_SHARE = 8; + RECEIVER_FETCH_CONTENT_TYPE_REELS_AUDIO = 9; + RECEIVER_FETCH_CONTENT_TYPE_MEDIA_NOTE = 10; + RECEIVER_FETCH_CONTENT_TYPE_STORY_HIGHLIGHT = 11; + RECEIVER_FETCH_CONTENT_TYPE_SOCIAL_CONTEXT = 12; +} + +enum MediaNoteFetchParamsMessageType { + MEDIA_NOTE_FETCH_PARAMS_MESSAGE_TYPE_UNSPECIFIED = 0; + MEDIA_NOTE_FETCH_PARAMS_MESSAGE_TYPE_MENTION = 1; + MEDIA_NOTE_FETCH_PARAMS_MESSAGE_TYPE_REPLY = 2; +} + +message XmaContentRef { + optional XmaActionType actionType = 1; + optional ReceiverFetchContentType contentType = 2; + optional string targetURL = 3; + optional string userName = 4; + optional string ownerFbid = 5; + optional ReceiverFetchXmaFetchParams fetchParams = 6; +} + +message ReceiverFetchXmaFetchParams { + oneof receiverFetchXmaFetchParams { + ReceiverFetchXmaNoteFetchParams noteFetchParams = 1; + ReceiverFetchXmaStoryFetchParams storyFetchParams = 2; + ReceiverFetchXmaProfileFetchParams profileFetchParams = 3; + ReceiverFetchXmaClipFetchParams clipFetchParams = 4; + ReceiverFetchXmaFeedFetchParams feedFetchParams = 5; + ReceiverFetchXmaLiveFetchParams liveFetchParams = 6; + ReceiverFetchXmaCommentFetchParams commentFetchParams = 7; + ReceiverFetchXmaLocationShareFetchParams locationShareFetchParams = 8; + ReceiverFetchXmaReelsAudioFetchParams reelsAudioFetchParams = 9; + ReceiverFetchXmaMediaNoteFetchParams mediaNoteFetchParams = 10; + ReceiverFetchXmaSocialContextFetchParams socialContextFetchParams = 11; + } +} + +message ReceiverFetchXmaNoteFetchParams { + optional string noteIgid = 1; +} + +message ReceiverFetchXmaStoryFetchParams { + optional string storyIgid = 1; + optional string reelID = 2; +} + +message ReceiverFetchXmaProfileFetchParams { + optional string profileIgid = 1; +} + +message ReceiverFetchXmaClipFetchParams { + optional string mediaIgid = 1; +} + +message ReceiverFetchXmaFeedFetchParams { + optional string mediaIgid = 1; + optional string carouselShareChildMediaIgid = 2; +} + +message ReceiverFetchXmaLiveFetchParams { + optional string liveIgid = 1; +} + +message ReceiverFetchXmaCommentFetchParams { + optional string commentFbid = 1; +} + +message ReceiverFetchXmaLocationShareFetchParams { + optional string locationIgid = 1; +} + +message ReceiverFetchXmaReelsAudioFetchParams { + optional string audioIgid = 1; +} + +message ReceiverFetchXmaMediaNoteFetchParams { + optional string mediaNoteIgid = 1; + optional MediaNoteFetchParamsMessageType messageType = 2; +} + +message ReceiverFetchXmaSocialContextFetchParams { + optional string mediaIgid = 1; +} diff --git a/vendor/go.mau.fi/whatsmeow/proto/waAICommon/WAWebProtobufsAICommon.pb.go b/vendor/go.mau.fi/whatsmeow/proto/waAICommon/WAWebProtobufsAICommon.pb.go new file mode 100644 index 0000000000..dd03b5e748 --- /dev/null +++ b/vendor/go.mau.fi/whatsmeow/proto/waAICommon/WAWebProtobufsAICommon.pb.go @@ -0,0 +1,9199 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.36.11 +// protoc v6.33.5 +// source: waAICommon/WAWebProtobufsAICommon.proto + +package waAICommon + +import ( + reflect "reflect" + sync "sync" + unsafe "unsafe" + + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + + waCommon "go.mau.fi/whatsmeow/proto/waCommon" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type BotMetricsEntryPoint int32 + +const ( + BotMetricsEntryPoint_UNDEFINED_ENTRY_POINT BotMetricsEntryPoint = 0 + BotMetricsEntryPoint_FAVICON BotMetricsEntryPoint = 1 + BotMetricsEntryPoint_CHATLIST BotMetricsEntryPoint = 2 + BotMetricsEntryPoint_AISEARCH_NULL_STATE_PAPER_PLANE BotMetricsEntryPoint = 3 + BotMetricsEntryPoint_AISEARCH_NULL_STATE_SUGGESTION BotMetricsEntryPoint = 4 + BotMetricsEntryPoint_AISEARCH_TYPE_AHEAD_SUGGESTION BotMetricsEntryPoint = 5 + BotMetricsEntryPoint_AISEARCH_TYPE_AHEAD_PAPER_PLANE BotMetricsEntryPoint = 6 + BotMetricsEntryPoint_AISEARCH_TYPE_AHEAD_RESULT_CHATLIST BotMetricsEntryPoint = 7 + BotMetricsEntryPoint_AISEARCH_TYPE_AHEAD_RESULT_MESSAGES BotMetricsEntryPoint = 8 + BotMetricsEntryPoint_AIVOICE_SEARCH_BAR BotMetricsEntryPoint = 9 + BotMetricsEntryPoint_AIVOICE_FAVICON BotMetricsEntryPoint = 10 + BotMetricsEntryPoint_AISTUDIO BotMetricsEntryPoint = 11 + BotMetricsEntryPoint_DEEPLINK BotMetricsEntryPoint = 12 + BotMetricsEntryPoint_NOTIFICATION BotMetricsEntryPoint = 13 + BotMetricsEntryPoint_PROFILE_MESSAGE_BUTTON BotMetricsEntryPoint = 14 + BotMetricsEntryPoint_FORWARD BotMetricsEntryPoint = 15 + BotMetricsEntryPoint_APP_SHORTCUT BotMetricsEntryPoint = 16 + BotMetricsEntryPoint_FF_FAMILY BotMetricsEntryPoint = 17 + BotMetricsEntryPoint_AI_TAB BotMetricsEntryPoint = 18 + BotMetricsEntryPoint_AI_HOME BotMetricsEntryPoint = 19 + BotMetricsEntryPoint_AI_DEEPLINK_IMMERSIVE BotMetricsEntryPoint = 20 + BotMetricsEntryPoint_AI_DEEPLINK BotMetricsEntryPoint = 21 + BotMetricsEntryPoint_META_AI_CHAT_SHORTCUT_AI_STUDIO BotMetricsEntryPoint = 22 + BotMetricsEntryPoint_UGC_CHAT_SHORTCUT_AI_STUDIO BotMetricsEntryPoint = 23 + BotMetricsEntryPoint_NEW_CHAT_AI_STUDIO BotMetricsEntryPoint = 24 + BotMetricsEntryPoint_AIVOICE_FAVICON_CALL_HISTORY BotMetricsEntryPoint = 25 + BotMetricsEntryPoint_ASK_META_AI_CONTEXT_MENU BotMetricsEntryPoint = 26 + BotMetricsEntryPoint_ASK_META_AI_CONTEXT_MENU_1ON1 BotMetricsEntryPoint = 27 + BotMetricsEntryPoint_ASK_META_AI_CONTEXT_MENU_GROUP BotMetricsEntryPoint = 28 + BotMetricsEntryPoint_INVOKE_META_AI_1ON1 BotMetricsEntryPoint = 29 + BotMetricsEntryPoint_INVOKE_META_AI_GROUP BotMetricsEntryPoint = 30 + BotMetricsEntryPoint_META_AI_FORWARD BotMetricsEntryPoint = 31 + BotMetricsEntryPoint_NEW_CHAT_AI_CONTACT BotMetricsEntryPoint = 32 + BotMetricsEntryPoint_MESSAGE_QUICK_ACTION_1_ON_1_CHAT BotMetricsEntryPoint = 33 + BotMetricsEntryPoint_MESSAGE_QUICK_ACTION_GROUP_CHAT BotMetricsEntryPoint = 34 + BotMetricsEntryPoint_ATTACHMENT_TRAY_1_ON_1_CHAT BotMetricsEntryPoint = 35 + BotMetricsEntryPoint_ATTACHMENT_TRAY_GROUP_CHAT BotMetricsEntryPoint = 36 + BotMetricsEntryPoint_ASK_META_AI_MEDIA_VIEWER_1ON1 BotMetricsEntryPoint = 37 + BotMetricsEntryPoint_ASK_META_AI_MEDIA_VIEWER_GROUP BotMetricsEntryPoint = 38 + BotMetricsEntryPoint_MEDIA_PICKER_1_ON_1_CHAT BotMetricsEntryPoint = 39 + BotMetricsEntryPoint_MEDIA_PICKER_GROUP_CHAT BotMetricsEntryPoint = 40 + BotMetricsEntryPoint_ASK_META_AI_NO_SEARCH_RESULTS BotMetricsEntryPoint = 41 + BotMetricsEntryPoint_META_AI_SETTINGS BotMetricsEntryPoint = 45 + BotMetricsEntryPoint_WEB_INTRO_PANEL BotMetricsEntryPoint = 46 + BotMetricsEntryPoint_WEB_NAVIGATION_BAR BotMetricsEntryPoint = 47 +) + +// Enum value maps for BotMetricsEntryPoint. +var ( + BotMetricsEntryPoint_name = map[int32]string{ + 0: "UNDEFINED_ENTRY_POINT", + 1: "FAVICON", + 2: "CHATLIST", + 3: "AISEARCH_NULL_STATE_PAPER_PLANE", + 4: "AISEARCH_NULL_STATE_SUGGESTION", + 5: "AISEARCH_TYPE_AHEAD_SUGGESTION", + 6: "AISEARCH_TYPE_AHEAD_PAPER_PLANE", + 7: "AISEARCH_TYPE_AHEAD_RESULT_CHATLIST", + 8: "AISEARCH_TYPE_AHEAD_RESULT_MESSAGES", + 9: "AIVOICE_SEARCH_BAR", + 10: "AIVOICE_FAVICON", + 11: "AISTUDIO", + 12: "DEEPLINK", + 13: "NOTIFICATION", + 14: "PROFILE_MESSAGE_BUTTON", + 15: "FORWARD", + 16: "APP_SHORTCUT", + 17: "FF_FAMILY", + 18: "AI_TAB", + 19: "AI_HOME", + 20: "AI_DEEPLINK_IMMERSIVE", + 21: "AI_DEEPLINK", + 22: "META_AI_CHAT_SHORTCUT_AI_STUDIO", + 23: "UGC_CHAT_SHORTCUT_AI_STUDIO", + 24: "NEW_CHAT_AI_STUDIO", + 25: "AIVOICE_FAVICON_CALL_HISTORY", + 26: "ASK_META_AI_CONTEXT_MENU", + 27: "ASK_META_AI_CONTEXT_MENU_1ON1", + 28: "ASK_META_AI_CONTEXT_MENU_GROUP", + 29: "INVOKE_META_AI_1ON1", + 30: "INVOKE_META_AI_GROUP", + 31: "META_AI_FORWARD", + 32: "NEW_CHAT_AI_CONTACT", + 33: "MESSAGE_QUICK_ACTION_1_ON_1_CHAT", + 34: "MESSAGE_QUICK_ACTION_GROUP_CHAT", + 35: "ATTACHMENT_TRAY_1_ON_1_CHAT", + 36: "ATTACHMENT_TRAY_GROUP_CHAT", + 37: "ASK_META_AI_MEDIA_VIEWER_1ON1", + 38: "ASK_META_AI_MEDIA_VIEWER_GROUP", + 39: "MEDIA_PICKER_1_ON_1_CHAT", + 40: "MEDIA_PICKER_GROUP_CHAT", + 41: "ASK_META_AI_NO_SEARCH_RESULTS", + 45: "META_AI_SETTINGS", + 46: "WEB_INTRO_PANEL", + 47: "WEB_NAVIGATION_BAR", + } + BotMetricsEntryPoint_value = map[string]int32{ + "UNDEFINED_ENTRY_POINT": 0, + "FAVICON": 1, + "CHATLIST": 2, + "AISEARCH_NULL_STATE_PAPER_PLANE": 3, + "AISEARCH_NULL_STATE_SUGGESTION": 4, + "AISEARCH_TYPE_AHEAD_SUGGESTION": 5, + "AISEARCH_TYPE_AHEAD_PAPER_PLANE": 6, + "AISEARCH_TYPE_AHEAD_RESULT_CHATLIST": 7, + "AISEARCH_TYPE_AHEAD_RESULT_MESSAGES": 8, + "AIVOICE_SEARCH_BAR": 9, + "AIVOICE_FAVICON": 10, + "AISTUDIO": 11, + "DEEPLINK": 12, + "NOTIFICATION": 13, + "PROFILE_MESSAGE_BUTTON": 14, + "FORWARD": 15, + "APP_SHORTCUT": 16, + "FF_FAMILY": 17, + "AI_TAB": 18, + "AI_HOME": 19, + "AI_DEEPLINK_IMMERSIVE": 20, + "AI_DEEPLINK": 21, + "META_AI_CHAT_SHORTCUT_AI_STUDIO": 22, + "UGC_CHAT_SHORTCUT_AI_STUDIO": 23, + "NEW_CHAT_AI_STUDIO": 24, + "AIVOICE_FAVICON_CALL_HISTORY": 25, + "ASK_META_AI_CONTEXT_MENU": 26, + "ASK_META_AI_CONTEXT_MENU_1ON1": 27, + "ASK_META_AI_CONTEXT_MENU_GROUP": 28, + "INVOKE_META_AI_1ON1": 29, + "INVOKE_META_AI_GROUP": 30, + "META_AI_FORWARD": 31, + "NEW_CHAT_AI_CONTACT": 32, + "MESSAGE_QUICK_ACTION_1_ON_1_CHAT": 33, + "MESSAGE_QUICK_ACTION_GROUP_CHAT": 34, + "ATTACHMENT_TRAY_1_ON_1_CHAT": 35, + "ATTACHMENT_TRAY_GROUP_CHAT": 36, + "ASK_META_AI_MEDIA_VIEWER_1ON1": 37, + "ASK_META_AI_MEDIA_VIEWER_GROUP": 38, + "MEDIA_PICKER_1_ON_1_CHAT": 39, + "MEDIA_PICKER_GROUP_CHAT": 40, + "ASK_META_AI_NO_SEARCH_RESULTS": 41, + "META_AI_SETTINGS": 45, + "WEB_INTRO_PANEL": 46, + "WEB_NAVIGATION_BAR": 47, + } +) + +func (x BotMetricsEntryPoint) Enum() *BotMetricsEntryPoint { + p := new(BotMetricsEntryPoint) + *p = x + return p +} + +func (x BotMetricsEntryPoint) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (BotMetricsEntryPoint) Descriptor() protoreflect.EnumDescriptor { + return file_waAICommon_WAWebProtobufsAICommon_proto_enumTypes[0].Descriptor() +} + +func (BotMetricsEntryPoint) Type() protoreflect.EnumType { + return &file_waAICommon_WAWebProtobufsAICommon_proto_enumTypes[0] +} + +func (x BotMetricsEntryPoint) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *BotMetricsEntryPoint) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = BotMetricsEntryPoint(num) + return nil +} + +// Deprecated: Use BotMetricsEntryPoint.Descriptor instead. +func (BotMetricsEntryPoint) EnumDescriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{0} +} + +type BotMetricsThreadEntryPoint int32 + +const ( + BotMetricsThreadEntryPoint_AI_TAB_THREAD BotMetricsThreadEntryPoint = 1 + BotMetricsThreadEntryPoint_AI_HOME_THREAD BotMetricsThreadEntryPoint = 2 + BotMetricsThreadEntryPoint_AI_DEEPLINK_IMMERSIVE_THREAD BotMetricsThreadEntryPoint = 3 + BotMetricsThreadEntryPoint_AI_DEEPLINK_THREAD BotMetricsThreadEntryPoint = 4 + BotMetricsThreadEntryPoint_ASK_META_AI_CONTEXT_MENU_THREAD BotMetricsThreadEntryPoint = 5 +) + +// Enum value maps for BotMetricsThreadEntryPoint. +var ( + BotMetricsThreadEntryPoint_name = map[int32]string{ + 1: "AI_TAB_THREAD", + 2: "AI_HOME_THREAD", + 3: "AI_DEEPLINK_IMMERSIVE_THREAD", + 4: "AI_DEEPLINK_THREAD", + 5: "ASK_META_AI_CONTEXT_MENU_THREAD", + } + BotMetricsThreadEntryPoint_value = map[string]int32{ + "AI_TAB_THREAD": 1, + "AI_HOME_THREAD": 2, + "AI_DEEPLINK_IMMERSIVE_THREAD": 3, + "AI_DEEPLINK_THREAD": 4, + "ASK_META_AI_CONTEXT_MENU_THREAD": 5, + } +) + +func (x BotMetricsThreadEntryPoint) Enum() *BotMetricsThreadEntryPoint { + p := new(BotMetricsThreadEntryPoint) + *p = x + return p +} + +func (x BotMetricsThreadEntryPoint) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (BotMetricsThreadEntryPoint) Descriptor() protoreflect.EnumDescriptor { + return file_waAICommon_WAWebProtobufsAICommon_proto_enumTypes[1].Descriptor() +} + +func (BotMetricsThreadEntryPoint) Type() protoreflect.EnumType { + return &file_waAICommon_WAWebProtobufsAICommon_proto_enumTypes[1] +} + +func (x BotMetricsThreadEntryPoint) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *BotMetricsThreadEntryPoint) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = BotMetricsThreadEntryPoint(num) + return nil +} + +// Deprecated: Use BotMetricsThreadEntryPoint.Descriptor instead. +func (BotMetricsThreadEntryPoint) EnumDescriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{1} +} + +type BotSessionSource int32 + +const ( + BotSessionSource_NONE BotSessionSource = 0 + BotSessionSource_NULL_STATE BotSessionSource = 1 + BotSessionSource_TYPEAHEAD BotSessionSource = 2 + BotSessionSource_USER_INPUT BotSessionSource = 3 + BotSessionSource_EMU_FLASH BotSessionSource = 4 + BotSessionSource_EMU_FLASH_FOLLOWUP BotSessionSource = 5 + BotSessionSource_VOICE BotSessionSource = 6 + BotSessionSource_AI_HOME_SESSION BotSessionSource = 7 +) + +// Enum value maps for BotSessionSource. +var ( + BotSessionSource_name = map[int32]string{ + 0: "NONE", + 1: "NULL_STATE", + 2: "TYPEAHEAD", + 3: "USER_INPUT", + 4: "EMU_FLASH", + 5: "EMU_FLASH_FOLLOWUP", + 6: "VOICE", + 7: "AI_HOME_SESSION", + } + BotSessionSource_value = map[string]int32{ + "NONE": 0, + "NULL_STATE": 1, + "TYPEAHEAD": 2, + "USER_INPUT": 3, + "EMU_FLASH": 4, + "EMU_FLASH_FOLLOWUP": 5, + "VOICE": 6, + "AI_HOME_SESSION": 7, + } +) + +func (x BotSessionSource) Enum() *BotSessionSource { + p := new(BotSessionSource) + *p = x + return p +} + +func (x BotSessionSource) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (BotSessionSource) Descriptor() protoreflect.EnumDescriptor { + return file_waAICommon_WAWebProtobufsAICommon_proto_enumTypes[2].Descriptor() +} + +func (BotSessionSource) Type() protoreflect.EnumType { + return &file_waAICommon_WAWebProtobufsAICommon_proto_enumTypes[2] +} + +func (x BotSessionSource) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *BotSessionSource) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = BotSessionSource(num) + return nil +} + +// Deprecated: Use BotSessionSource.Descriptor instead. +func (BotSessionSource) EnumDescriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{2} +} + +type AIRichResponseMessageType int32 + +const ( + AIRichResponseMessageType_AI_RICH_RESPONSE_TYPE_UNKNOWN AIRichResponseMessageType = 0 + AIRichResponseMessageType_AI_RICH_RESPONSE_TYPE_STANDARD AIRichResponseMessageType = 1 +) + +// Enum value maps for AIRichResponseMessageType. +var ( + AIRichResponseMessageType_name = map[int32]string{ + 0: "AI_RICH_RESPONSE_TYPE_UNKNOWN", + 1: "AI_RICH_RESPONSE_TYPE_STANDARD", + } + AIRichResponseMessageType_value = map[string]int32{ + "AI_RICH_RESPONSE_TYPE_UNKNOWN": 0, + "AI_RICH_RESPONSE_TYPE_STANDARD": 1, + } +) + +func (x AIRichResponseMessageType) Enum() *AIRichResponseMessageType { + p := new(AIRichResponseMessageType) + *p = x + return p +} + +func (x AIRichResponseMessageType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (AIRichResponseMessageType) Descriptor() protoreflect.EnumDescriptor { + return file_waAICommon_WAWebProtobufsAICommon_proto_enumTypes[3].Descriptor() +} + +func (AIRichResponseMessageType) Type() protoreflect.EnumType { + return &file_waAICommon_WAWebProtobufsAICommon_proto_enumTypes[3] +} + +func (x AIRichResponseMessageType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *AIRichResponseMessageType) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = AIRichResponseMessageType(num) + return nil +} + +// Deprecated: Use AIRichResponseMessageType.Descriptor instead. +func (AIRichResponseMessageType) EnumDescriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{3} +} + +type AIRichResponseSubMessageType int32 + +const ( + AIRichResponseSubMessageType_AI_RICH_RESPONSE_UNKNOWN AIRichResponseSubMessageType = 0 + AIRichResponseSubMessageType_AI_RICH_RESPONSE_GRID_IMAGE AIRichResponseSubMessageType = 1 + AIRichResponseSubMessageType_AI_RICH_RESPONSE_TEXT AIRichResponseSubMessageType = 2 + AIRichResponseSubMessageType_AI_RICH_RESPONSE_INLINE_IMAGE AIRichResponseSubMessageType = 3 + AIRichResponseSubMessageType_AI_RICH_RESPONSE_TABLE AIRichResponseSubMessageType = 4 + AIRichResponseSubMessageType_AI_RICH_RESPONSE_CODE AIRichResponseSubMessageType = 5 + AIRichResponseSubMessageType_AI_RICH_RESPONSE_DYNAMIC AIRichResponseSubMessageType = 6 + AIRichResponseSubMessageType_AI_RICH_RESPONSE_MAP AIRichResponseSubMessageType = 7 + AIRichResponseSubMessageType_AI_RICH_RESPONSE_LATEX AIRichResponseSubMessageType = 8 + AIRichResponseSubMessageType_AI_RICH_RESPONSE_CONTENT_ITEMS AIRichResponseSubMessageType = 9 +) + +// Enum value maps for AIRichResponseSubMessageType. +var ( + AIRichResponseSubMessageType_name = map[int32]string{ + 0: "AI_RICH_RESPONSE_UNKNOWN", + 1: "AI_RICH_RESPONSE_GRID_IMAGE", + 2: "AI_RICH_RESPONSE_TEXT", + 3: "AI_RICH_RESPONSE_INLINE_IMAGE", + 4: "AI_RICH_RESPONSE_TABLE", + 5: "AI_RICH_RESPONSE_CODE", + 6: "AI_RICH_RESPONSE_DYNAMIC", + 7: "AI_RICH_RESPONSE_MAP", + 8: "AI_RICH_RESPONSE_LATEX", + 9: "AI_RICH_RESPONSE_CONTENT_ITEMS", + } + AIRichResponseSubMessageType_value = map[string]int32{ + "AI_RICH_RESPONSE_UNKNOWN": 0, + "AI_RICH_RESPONSE_GRID_IMAGE": 1, + "AI_RICH_RESPONSE_TEXT": 2, + "AI_RICH_RESPONSE_INLINE_IMAGE": 3, + "AI_RICH_RESPONSE_TABLE": 4, + "AI_RICH_RESPONSE_CODE": 5, + "AI_RICH_RESPONSE_DYNAMIC": 6, + "AI_RICH_RESPONSE_MAP": 7, + "AI_RICH_RESPONSE_LATEX": 8, + "AI_RICH_RESPONSE_CONTENT_ITEMS": 9, + } +) + +func (x AIRichResponseSubMessageType) Enum() *AIRichResponseSubMessageType { + p := new(AIRichResponseSubMessageType) + *p = x + return p +} + +func (x AIRichResponseSubMessageType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (AIRichResponseSubMessageType) Descriptor() protoreflect.EnumDescriptor { + return file_waAICommon_WAWebProtobufsAICommon_proto_enumTypes[4].Descriptor() +} + +func (AIRichResponseSubMessageType) Type() protoreflect.EnumType { + return &file_waAICommon_WAWebProtobufsAICommon_proto_enumTypes[4] +} + +func (x AIRichResponseSubMessageType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *AIRichResponseSubMessageType) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = AIRichResponseSubMessageType(num) + return nil +} + +// Deprecated: Use AIRichResponseSubMessageType.Descriptor instead. +func (AIRichResponseSubMessageType) EnumDescriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{4} +} + +type SessionTransparencyType int32 + +const ( + SessionTransparencyType_UNKNOWN_TYPE SessionTransparencyType = 0 + SessionTransparencyType_NY_AI_SAFETY_DISCLAIMER SessionTransparencyType = 1 +) + +// Enum value maps for SessionTransparencyType. +var ( + SessionTransparencyType_name = map[int32]string{ + 0: "UNKNOWN_TYPE", + 1: "NY_AI_SAFETY_DISCLAIMER", + } + SessionTransparencyType_value = map[string]int32{ + "UNKNOWN_TYPE": 0, + "NY_AI_SAFETY_DISCLAIMER": 1, + } +) + +func (x SessionTransparencyType) Enum() *SessionTransparencyType { + p := new(SessionTransparencyType) + *p = x + return p +} + +func (x SessionTransparencyType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (SessionTransparencyType) Descriptor() protoreflect.EnumDescriptor { + return file_waAICommon_WAWebProtobufsAICommon_proto_enumTypes[5].Descriptor() +} + +func (SessionTransparencyType) Type() protoreflect.EnumType { + return &file_waAICommon_WAWebProtobufsAICommon_proto_enumTypes[5] +} + +func (x SessionTransparencyType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *SessionTransparencyType) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = SessionTransparencyType(num) + return nil +} + +// Deprecated: Use SessionTransparencyType.Descriptor instead. +func (SessionTransparencyType) EnumDescriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{5} +} + +type BotPluginMetadata_PluginType int32 + +const ( + BotPluginMetadata_UNKNOWN_PLUGIN BotPluginMetadata_PluginType = 0 + BotPluginMetadata_REELS BotPluginMetadata_PluginType = 1 + BotPluginMetadata_SEARCH BotPluginMetadata_PluginType = 2 +) + +// Enum value maps for BotPluginMetadata_PluginType. +var ( + BotPluginMetadata_PluginType_name = map[int32]string{ + 0: "UNKNOWN_PLUGIN", + 1: "REELS", + 2: "SEARCH", + } + BotPluginMetadata_PluginType_value = map[string]int32{ + "UNKNOWN_PLUGIN": 0, + "REELS": 1, + "SEARCH": 2, + } +) + +func (x BotPluginMetadata_PluginType) Enum() *BotPluginMetadata_PluginType { + p := new(BotPluginMetadata_PluginType) + *p = x + return p +} + +func (x BotPluginMetadata_PluginType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (BotPluginMetadata_PluginType) Descriptor() protoreflect.EnumDescriptor { + return file_waAICommon_WAWebProtobufsAICommon_proto_enumTypes[6].Descriptor() +} + +func (BotPluginMetadata_PluginType) Type() protoreflect.EnumType { + return &file_waAICommon_WAWebProtobufsAICommon_proto_enumTypes[6] +} + +func (x BotPluginMetadata_PluginType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *BotPluginMetadata_PluginType) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = BotPluginMetadata_PluginType(num) + return nil +} + +// Deprecated: Use BotPluginMetadata_PluginType.Descriptor instead. +func (BotPluginMetadata_PluginType) EnumDescriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{0, 0} +} + +type BotPluginMetadata_SearchProvider int32 + +const ( + BotPluginMetadata_UNKNOWN BotPluginMetadata_SearchProvider = 0 + BotPluginMetadata_BING BotPluginMetadata_SearchProvider = 1 + BotPluginMetadata_GOOGLE BotPluginMetadata_SearchProvider = 2 + BotPluginMetadata_SUPPORT BotPluginMetadata_SearchProvider = 3 +) + +// Enum value maps for BotPluginMetadata_SearchProvider. +var ( + BotPluginMetadata_SearchProvider_name = map[int32]string{ + 0: "UNKNOWN", + 1: "BING", + 2: "GOOGLE", + 3: "SUPPORT", + } + BotPluginMetadata_SearchProvider_value = map[string]int32{ + "UNKNOWN": 0, + "BING": 1, + "GOOGLE": 2, + "SUPPORT": 3, + } +) + +func (x BotPluginMetadata_SearchProvider) Enum() *BotPluginMetadata_SearchProvider { + p := new(BotPluginMetadata_SearchProvider) + *p = x + return p +} + +func (x BotPluginMetadata_SearchProvider) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (BotPluginMetadata_SearchProvider) Descriptor() protoreflect.EnumDescriptor { + return file_waAICommon_WAWebProtobufsAICommon_proto_enumTypes[7].Descriptor() +} + +func (BotPluginMetadata_SearchProvider) Type() protoreflect.EnumType { + return &file_waAICommon_WAWebProtobufsAICommon_proto_enumTypes[7] +} + +func (x BotPluginMetadata_SearchProvider) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *BotPluginMetadata_SearchProvider) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = BotPluginMetadata_SearchProvider(num) + return nil +} + +// Deprecated: Use BotPluginMetadata_SearchProvider.Descriptor instead. +func (BotPluginMetadata_SearchProvider) EnumDescriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{0, 1} +} + +type BotLinkedAccount_BotLinkedAccountType int32 + +const ( + BotLinkedAccount_BOT_LINKED_ACCOUNT_TYPE_1P BotLinkedAccount_BotLinkedAccountType = 0 +) + +// Enum value maps for BotLinkedAccount_BotLinkedAccountType. +var ( + BotLinkedAccount_BotLinkedAccountType_name = map[int32]string{ + 0: "BOT_LINKED_ACCOUNT_TYPE_1P", + } + BotLinkedAccount_BotLinkedAccountType_value = map[string]int32{ + "BOT_LINKED_ACCOUNT_TYPE_1P": 0, + } +) + +func (x BotLinkedAccount_BotLinkedAccountType) Enum() *BotLinkedAccount_BotLinkedAccountType { + p := new(BotLinkedAccount_BotLinkedAccountType) + *p = x + return p +} + +func (x BotLinkedAccount_BotLinkedAccountType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (BotLinkedAccount_BotLinkedAccountType) Descriptor() protoreflect.EnumDescriptor { + return file_waAICommon_WAWebProtobufsAICommon_proto_enumTypes[8].Descriptor() +} + +func (BotLinkedAccount_BotLinkedAccountType) Type() protoreflect.EnumType { + return &file_waAICommon_WAWebProtobufsAICommon_proto_enumTypes[8] +} + +func (x BotLinkedAccount_BotLinkedAccountType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *BotLinkedAccount_BotLinkedAccountType) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = BotLinkedAccount_BotLinkedAccountType(num) + return nil +} + +// Deprecated: Use BotLinkedAccount_BotLinkedAccountType.Descriptor instead. +func (BotLinkedAccount_BotLinkedAccountType) EnumDescriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{1, 0} +} + +type BotSignatureVerificationUseCaseProof_BotSignatureUseCase int32 + +const ( + BotSignatureVerificationUseCaseProof_UNSPECIFIED BotSignatureVerificationUseCaseProof_BotSignatureUseCase = 0 + BotSignatureVerificationUseCaseProof_WA_BOT_MSG BotSignatureVerificationUseCaseProof_BotSignatureUseCase = 1 +) + +// Enum value maps for BotSignatureVerificationUseCaseProof_BotSignatureUseCase. +var ( + BotSignatureVerificationUseCaseProof_BotSignatureUseCase_name = map[int32]string{ + 0: "UNSPECIFIED", + 1: "WA_BOT_MSG", + } + BotSignatureVerificationUseCaseProof_BotSignatureUseCase_value = map[string]int32{ + "UNSPECIFIED": 0, + "WA_BOT_MSG": 1, + } +) + +func (x BotSignatureVerificationUseCaseProof_BotSignatureUseCase) Enum() *BotSignatureVerificationUseCaseProof_BotSignatureUseCase { + p := new(BotSignatureVerificationUseCaseProof_BotSignatureUseCase) + *p = x + return p +} + +func (x BotSignatureVerificationUseCaseProof_BotSignatureUseCase) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (BotSignatureVerificationUseCaseProof_BotSignatureUseCase) Descriptor() protoreflect.EnumDescriptor { + return file_waAICommon_WAWebProtobufsAICommon_proto_enumTypes[9].Descriptor() +} + +func (BotSignatureVerificationUseCaseProof_BotSignatureUseCase) Type() protoreflect.EnumType { + return &file_waAICommon_WAWebProtobufsAICommon_proto_enumTypes[9] +} + +func (x BotSignatureVerificationUseCaseProof_BotSignatureUseCase) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *BotSignatureVerificationUseCaseProof_BotSignatureUseCase) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = BotSignatureVerificationUseCaseProof_BotSignatureUseCase(num) + return nil +} + +// Deprecated: Use BotSignatureVerificationUseCaseProof_BotSignatureUseCase.Descriptor instead. +func (BotSignatureVerificationUseCaseProof_BotSignatureUseCase) EnumDescriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{2, 0} +} + +type BotPromotionMessageMetadata_BotPromotionType int32 + +const ( + BotPromotionMessageMetadata_UNKNOWN_TYPE BotPromotionMessageMetadata_BotPromotionType = 0 + BotPromotionMessageMetadata_C50 BotPromotionMessageMetadata_BotPromotionType = 1 + BotPromotionMessageMetadata_SURVEY_PLATFORM BotPromotionMessageMetadata_BotPromotionType = 2 +) + +// Enum value maps for BotPromotionMessageMetadata_BotPromotionType. +var ( + BotPromotionMessageMetadata_BotPromotionType_name = map[int32]string{ + 0: "UNKNOWN_TYPE", + 1: "C50", + 2: "SURVEY_PLATFORM", + } + BotPromotionMessageMetadata_BotPromotionType_value = map[string]int32{ + "UNKNOWN_TYPE": 0, + "C50": 1, + "SURVEY_PLATFORM": 2, + } +) + +func (x BotPromotionMessageMetadata_BotPromotionType) Enum() *BotPromotionMessageMetadata_BotPromotionType { + p := new(BotPromotionMessageMetadata_BotPromotionType) + *p = x + return p +} + +func (x BotPromotionMessageMetadata_BotPromotionType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (BotPromotionMessageMetadata_BotPromotionType) Descriptor() protoreflect.EnumDescriptor { + return file_waAICommon_WAWebProtobufsAICommon_proto_enumTypes[10].Descriptor() +} + +func (BotPromotionMessageMetadata_BotPromotionType) Type() protoreflect.EnumType { + return &file_waAICommon_WAWebProtobufsAICommon_proto_enumTypes[10] +} + +func (x BotPromotionMessageMetadata_BotPromotionType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *BotPromotionMessageMetadata_BotPromotionType) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = BotPromotionMessageMetadata_BotPromotionType(num) + return nil +} + +// Deprecated: Use BotPromotionMessageMetadata_BotPromotionType.Descriptor instead. +func (BotPromotionMessageMetadata_BotPromotionType) EnumDescriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{3, 0} +} + +type BotMediaMetadata_OrientationType int32 + +const ( + BotMediaMetadata_CENTER BotMediaMetadata_OrientationType = 1 + BotMediaMetadata_LEFT BotMediaMetadata_OrientationType = 2 + BotMediaMetadata_RIGHT BotMediaMetadata_OrientationType = 3 +) + +// Enum value maps for BotMediaMetadata_OrientationType. +var ( + BotMediaMetadata_OrientationType_name = map[int32]string{ + 1: "CENTER", + 2: "LEFT", + 3: "RIGHT", + } + BotMediaMetadata_OrientationType_value = map[string]int32{ + "CENTER": 1, + "LEFT": 2, + "RIGHT": 3, + } +) + +func (x BotMediaMetadata_OrientationType) Enum() *BotMediaMetadata_OrientationType { + p := new(BotMediaMetadata_OrientationType) + *p = x + return p +} + +func (x BotMediaMetadata_OrientationType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (BotMediaMetadata_OrientationType) Descriptor() protoreflect.EnumDescriptor { + return file_waAICommon_WAWebProtobufsAICommon_proto_enumTypes[11].Descriptor() +} + +func (BotMediaMetadata_OrientationType) Type() protoreflect.EnumType { + return &file_waAICommon_WAWebProtobufsAICommon_proto_enumTypes[11] +} + +func (x BotMediaMetadata_OrientationType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *BotMediaMetadata_OrientationType) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = BotMediaMetadata_OrientationType(num) + return nil +} + +// Deprecated: Use BotMediaMetadata_OrientationType.Descriptor instead. +func (BotMediaMetadata_OrientationType) EnumDescriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{4, 0} +} + +type BotReminderMetadata_ReminderFrequency int32 + +const ( + BotReminderMetadata_ONCE BotReminderMetadata_ReminderFrequency = 1 + BotReminderMetadata_DAILY BotReminderMetadata_ReminderFrequency = 2 + BotReminderMetadata_WEEKLY BotReminderMetadata_ReminderFrequency = 3 + BotReminderMetadata_BIWEEKLY BotReminderMetadata_ReminderFrequency = 4 + BotReminderMetadata_MONTHLY BotReminderMetadata_ReminderFrequency = 5 +) + +// Enum value maps for BotReminderMetadata_ReminderFrequency. +var ( + BotReminderMetadata_ReminderFrequency_name = map[int32]string{ + 1: "ONCE", + 2: "DAILY", + 3: "WEEKLY", + 4: "BIWEEKLY", + 5: "MONTHLY", + } + BotReminderMetadata_ReminderFrequency_value = map[string]int32{ + "ONCE": 1, + "DAILY": 2, + "WEEKLY": 3, + "BIWEEKLY": 4, + "MONTHLY": 5, + } +) + +func (x BotReminderMetadata_ReminderFrequency) Enum() *BotReminderMetadata_ReminderFrequency { + p := new(BotReminderMetadata_ReminderFrequency) + *p = x + return p +} + +func (x BotReminderMetadata_ReminderFrequency) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (BotReminderMetadata_ReminderFrequency) Descriptor() protoreflect.EnumDescriptor { + return file_waAICommon_WAWebProtobufsAICommon_proto_enumTypes[12].Descriptor() +} + +func (BotReminderMetadata_ReminderFrequency) Type() protoreflect.EnumType { + return &file_waAICommon_WAWebProtobufsAICommon_proto_enumTypes[12] +} + +func (x BotReminderMetadata_ReminderFrequency) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *BotReminderMetadata_ReminderFrequency) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = BotReminderMetadata_ReminderFrequency(num) + return nil +} + +// Deprecated: Use BotReminderMetadata_ReminderFrequency.Descriptor instead. +func (BotReminderMetadata_ReminderFrequency) EnumDescriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{5, 0} +} + +type BotReminderMetadata_ReminderAction int32 + +const ( + BotReminderMetadata_NOTIFY BotReminderMetadata_ReminderAction = 1 + BotReminderMetadata_CREATE BotReminderMetadata_ReminderAction = 2 + BotReminderMetadata_DELETE BotReminderMetadata_ReminderAction = 3 + BotReminderMetadata_UPDATE BotReminderMetadata_ReminderAction = 4 +) + +// Enum value maps for BotReminderMetadata_ReminderAction. +var ( + BotReminderMetadata_ReminderAction_name = map[int32]string{ + 1: "NOTIFY", + 2: "CREATE", + 3: "DELETE", + 4: "UPDATE", + } + BotReminderMetadata_ReminderAction_value = map[string]int32{ + "NOTIFY": 1, + "CREATE": 2, + "DELETE": 3, + "UPDATE": 4, + } +) + +func (x BotReminderMetadata_ReminderAction) Enum() *BotReminderMetadata_ReminderAction { + p := new(BotReminderMetadata_ReminderAction) + *p = x + return p +} + +func (x BotReminderMetadata_ReminderAction) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (BotReminderMetadata_ReminderAction) Descriptor() protoreflect.EnumDescriptor { + return file_waAICommon_WAWebProtobufsAICommon_proto_enumTypes[13].Descriptor() +} + +func (BotReminderMetadata_ReminderAction) Type() protoreflect.EnumType { + return &file_waAICommon_WAWebProtobufsAICommon_proto_enumTypes[13] +} + +func (x BotReminderMetadata_ReminderAction) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *BotReminderMetadata_ReminderAction) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = BotReminderMetadata_ReminderAction(num) + return nil +} + +// Deprecated: Use BotReminderMetadata_ReminderAction.Descriptor instead. +func (BotReminderMetadata_ReminderAction) EnumDescriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{5, 1} +} + +type BotModelMetadata_PremiumModelStatus int32 + +const ( + BotModelMetadata_UNKNOWN_STATUS BotModelMetadata_PremiumModelStatus = 0 + BotModelMetadata_AVAILABLE BotModelMetadata_PremiumModelStatus = 1 + BotModelMetadata_QUOTA_EXCEED_LIMIT BotModelMetadata_PremiumModelStatus = 2 +) + +// Enum value maps for BotModelMetadata_PremiumModelStatus. +var ( + BotModelMetadata_PremiumModelStatus_name = map[int32]string{ + 0: "UNKNOWN_STATUS", + 1: "AVAILABLE", + 2: "QUOTA_EXCEED_LIMIT", + } + BotModelMetadata_PremiumModelStatus_value = map[string]int32{ + "UNKNOWN_STATUS": 0, + "AVAILABLE": 1, + "QUOTA_EXCEED_LIMIT": 2, + } +) + +func (x BotModelMetadata_PremiumModelStatus) Enum() *BotModelMetadata_PremiumModelStatus { + p := new(BotModelMetadata_PremiumModelStatus) + *p = x + return p +} + +func (x BotModelMetadata_PremiumModelStatus) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (BotModelMetadata_PremiumModelStatus) Descriptor() protoreflect.EnumDescriptor { + return file_waAICommon_WAWebProtobufsAICommon_proto_enumTypes[14].Descriptor() +} + +func (BotModelMetadata_PremiumModelStatus) Type() protoreflect.EnumType { + return &file_waAICommon_WAWebProtobufsAICommon_proto_enumTypes[14] +} + +func (x BotModelMetadata_PremiumModelStatus) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *BotModelMetadata_PremiumModelStatus) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = BotModelMetadata_PremiumModelStatus(num) + return nil +} + +// Deprecated: Use BotModelMetadata_PremiumModelStatus.Descriptor instead. +func (BotModelMetadata_PremiumModelStatus) EnumDescriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{6, 0} +} + +type BotModelMetadata_ModelType int32 + +const ( + BotModelMetadata_UNKNOWN_TYPE BotModelMetadata_ModelType = 0 + BotModelMetadata_LLAMA_PROD BotModelMetadata_ModelType = 1 + BotModelMetadata_LLAMA_PROD_PREMIUM BotModelMetadata_ModelType = 2 +) + +// Enum value maps for BotModelMetadata_ModelType. +var ( + BotModelMetadata_ModelType_name = map[int32]string{ + 0: "UNKNOWN_TYPE", + 1: "LLAMA_PROD", + 2: "LLAMA_PROD_PREMIUM", + } + BotModelMetadata_ModelType_value = map[string]int32{ + "UNKNOWN_TYPE": 0, + "LLAMA_PROD": 1, + "LLAMA_PROD_PREMIUM": 2, + } +) + +func (x BotModelMetadata_ModelType) Enum() *BotModelMetadata_ModelType { + p := new(BotModelMetadata_ModelType) + *p = x + return p +} + +func (x BotModelMetadata_ModelType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (BotModelMetadata_ModelType) Descriptor() protoreflect.EnumDescriptor { + return file_waAICommon_WAWebProtobufsAICommon_proto_enumTypes[15].Descriptor() +} + +func (BotModelMetadata_ModelType) Type() protoreflect.EnumType { + return &file_waAICommon_WAWebProtobufsAICommon_proto_enumTypes[15] +} + +func (x BotModelMetadata_ModelType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *BotModelMetadata_ModelType) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = BotModelMetadata_ModelType(num) + return nil +} + +// Deprecated: Use BotModelMetadata_ModelType.Descriptor instead. +func (BotModelMetadata_ModelType) EnumDescriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{6, 1} +} + +type BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotSearchSourceProvider int32 + +const ( + BotProgressIndicatorMetadata_BotPlanningStepMetadata_UNKNOWN_PROVIDER BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotSearchSourceProvider = 0 + BotProgressIndicatorMetadata_BotPlanningStepMetadata_OTHER BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotSearchSourceProvider = 1 + BotProgressIndicatorMetadata_BotPlanningStepMetadata_GOOGLE BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotSearchSourceProvider = 2 + BotProgressIndicatorMetadata_BotPlanningStepMetadata_BING BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotSearchSourceProvider = 3 +) + +// Enum value maps for BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotSearchSourceProvider. +var ( + BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotSearchSourceProvider_name = map[int32]string{ + 0: "UNKNOWN_PROVIDER", + 1: "OTHER", + 2: "GOOGLE", + 3: "BING", + } + BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotSearchSourceProvider_value = map[string]int32{ + "UNKNOWN_PROVIDER": 0, + "OTHER": 1, + "GOOGLE": 2, + "BING": 3, + } +) + +func (x BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotSearchSourceProvider) Enum() *BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotSearchSourceProvider { + p := new(BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotSearchSourceProvider) + *p = x + return p +} + +func (x BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotSearchSourceProvider) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotSearchSourceProvider) Descriptor() protoreflect.EnumDescriptor { + return file_waAICommon_WAWebProtobufsAICommon_proto_enumTypes[16].Descriptor() +} + +func (BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotSearchSourceProvider) Type() protoreflect.EnumType { + return &file_waAICommon_WAWebProtobufsAICommon_proto_enumTypes[16] +} + +func (x BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotSearchSourceProvider) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotSearchSourceProvider) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotSearchSourceProvider(num) + return nil +} + +// Deprecated: Use BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotSearchSourceProvider.Descriptor instead. +func (BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotSearchSourceProvider) EnumDescriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{7, 0, 0} +} + +type BotProgressIndicatorMetadata_BotPlanningStepMetadata_PlanningStepStatus int32 + +const ( + BotProgressIndicatorMetadata_BotPlanningStepMetadata_UNKNOWN BotProgressIndicatorMetadata_BotPlanningStepMetadata_PlanningStepStatus = 0 + BotProgressIndicatorMetadata_BotPlanningStepMetadata_PLANNED BotProgressIndicatorMetadata_BotPlanningStepMetadata_PlanningStepStatus = 1 + BotProgressIndicatorMetadata_BotPlanningStepMetadata_EXECUTING BotProgressIndicatorMetadata_BotPlanningStepMetadata_PlanningStepStatus = 2 + BotProgressIndicatorMetadata_BotPlanningStepMetadata_FINISHED BotProgressIndicatorMetadata_BotPlanningStepMetadata_PlanningStepStatus = 3 +) + +// Enum value maps for BotProgressIndicatorMetadata_BotPlanningStepMetadata_PlanningStepStatus. +var ( + BotProgressIndicatorMetadata_BotPlanningStepMetadata_PlanningStepStatus_name = map[int32]string{ + 0: "UNKNOWN", + 1: "PLANNED", + 2: "EXECUTING", + 3: "FINISHED", + } + BotProgressIndicatorMetadata_BotPlanningStepMetadata_PlanningStepStatus_value = map[string]int32{ + "UNKNOWN": 0, + "PLANNED": 1, + "EXECUTING": 2, + "FINISHED": 3, + } +) + +func (x BotProgressIndicatorMetadata_BotPlanningStepMetadata_PlanningStepStatus) Enum() *BotProgressIndicatorMetadata_BotPlanningStepMetadata_PlanningStepStatus { + p := new(BotProgressIndicatorMetadata_BotPlanningStepMetadata_PlanningStepStatus) + *p = x + return p +} + +func (x BotProgressIndicatorMetadata_BotPlanningStepMetadata_PlanningStepStatus) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (BotProgressIndicatorMetadata_BotPlanningStepMetadata_PlanningStepStatus) Descriptor() protoreflect.EnumDescriptor { + return file_waAICommon_WAWebProtobufsAICommon_proto_enumTypes[17].Descriptor() +} + +func (BotProgressIndicatorMetadata_BotPlanningStepMetadata_PlanningStepStatus) Type() protoreflect.EnumType { + return &file_waAICommon_WAWebProtobufsAICommon_proto_enumTypes[17] +} + +func (x BotProgressIndicatorMetadata_BotPlanningStepMetadata_PlanningStepStatus) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *BotProgressIndicatorMetadata_BotPlanningStepMetadata_PlanningStepStatus) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = BotProgressIndicatorMetadata_BotPlanningStepMetadata_PlanningStepStatus(num) + return nil +} + +// Deprecated: Use BotProgressIndicatorMetadata_BotPlanningStepMetadata_PlanningStepStatus.Descriptor instead. +func (BotProgressIndicatorMetadata_BotPlanningStepMetadata_PlanningStepStatus) EnumDescriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{7, 0, 1} +} + +type BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningSearchSourcesMetadata_BotPlanningSearchSourceProvider int32 + +const ( + BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningSearchSourcesMetadata_UNKNOWN BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningSearchSourcesMetadata_BotPlanningSearchSourceProvider = 0 + BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningSearchSourcesMetadata_OTHER BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningSearchSourcesMetadata_BotPlanningSearchSourceProvider = 1 + BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningSearchSourcesMetadata_GOOGLE BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningSearchSourcesMetadata_BotPlanningSearchSourceProvider = 2 + BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningSearchSourcesMetadata_BING BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningSearchSourcesMetadata_BotPlanningSearchSourceProvider = 3 +) + +// Enum value maps for BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningSearchSourcesMetadata_BotPlanningSearchSourceProvider. +var ( + BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningSearchSourcesMetadata_BotPlanningSearchSourceProvider_name = map[int32]string{ + 0: "UNKNOWN", + 1: "OTHER", + 2: "GOOGLE", + 3: "BING", + } + BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningSearchSourcesMetadata_BotPlanningSearchSourceProvider_value = map[string]int32{ + "UNKNOWN": 0, + "OTHER": 1, + "GOOGLE": 2, + "BING": 3, + } +) + +func (x BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningSearchSourcesMetadata_BotPlanningSearchSourceProvider) Enum() *BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningSearchSourcesMetadata_BotPlanningSearchSourceProvider { + p := new(BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningSearchSourcesMetadata_BotPlanningSearchSourceProvider) + *p = x + return p +} + +func (x BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningSearchSourcesMetadata_BotPlanningSearchSourceProvider) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningSearchSourcesMetadata_BotPlanningSearchSourceProvider) Descriptor() protoreflect.EnumDescriptor { + return file_waAICommon_WAWebProtobufsAICommon_proto_enumTypes[18].Descriptor() +} + +func (BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningSearchSourcesMetadata_BotPlanningSearchSourceProvider) Type() protoreflect.EnumType { + return &file_waAICommon_WAWebProtobufsAICommon_proto_enumTypes[18] +} + +func (x BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningSearchSourcesMetadata_BotPlanningSearchSourceProvider) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningSearchSourcesMetadata_BotPlanningSearchSourceProvider) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningSearchSourcesMetadata_BotPlanningSearchSourceProvider(num) + return nil +} + +// Deprecated: Use BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningSearchSourcesMetadata_BotPlanningSearchSourceProvider.Descriptor instead. +func (BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningSearchSourcesMetadata_BotPlanningSearchSourceProvider) EnumDescriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{7, 0, 0, 0} +} + +type BotCapabilityMetadata_BotCapabilityType int32 + +const ( + BotCapabilityMetadata_UNKNOWN BotCapabilityMetadata_BotCapabilityType = 0 + BotCapabilityMetadata_PROGRESS_INDICATOR BotCapabilityMetadata_BotCapabilityType = 1 + BotCapabilityMetadata_RICH_RESPONSE_HEADING BotCapabilityMetadata_BotCapabilityType = 2 + BotCapabilityMetadata_RICH_RESPONSE_NESTED_LIST BotCapabilityMetadata_BotCapabilityType = 3 + BotCapabilityMetadata_AI_MEMORY BotCapabilityMetadata_BotCapabilityType = 4 + BotCapabilityMetadata_RICH_RESPONSE_THREAD_SURFING BotCapabilityMetadata_BotCapabilityType = 5 + BotCapabilityMetadata_RICH_RESPONSE_TABLE BotCapabilityMetadata_BotCapabilityType = 6 + BotCapabilityMetadata_RICH_RESPONSE_CODE BotCapabilityMetadata_BotCapabilityType = 7 + BotCapabilityMetadata_RICH_RESPONSE_STRUCTURED_RESPONSE BotCapabilityMetadata_BotCapabilityType = 8 + BotCapabilityMetadata_RICH_RESPONSE_INLINE_IMAGE BotCapabilityMetadata_BotCapabilityType = 9 + BotCapabilityMetadata_WA_IG_1P_PLUGIN_RANKING_CONTROL BotCapabilityMetadata_BotCapabilityType = 10 + BotCapabilityMetadata_WA_IG_1P_PLUGIN_RANKING_UPDATE_1 BotCapabilityMetadata_BotCapabilityType = 11 + BotCapabilityMetadata_WA_IG_1P_PLUGIN_RANKING_UPDATE_2 BotCapabilityMetadata_BotCapabilityType = 12 + BotCapabilityMetadata_WA_IG_1P_PLUGIN_RANKING_UPDATE_3 BotCapabilityMetadata_BotCapabilityType = 13 + BotCapabilityMetadata_WA_IG_1P_PLUGIN_RANKING_UPDATE_4 BotCapabilityMetadata_BotCapabilityType = 14 + BotCapabilityMetadata_WA_IG_1P_PLUGIN_RANKING_UPDATE_5 BotCapabilityMetadata_BotCapabilityType = 15 + BotCapabilityMetadata_WA_IG_1P_PLUGIN_RANKING_UPDATE_6 BotCapabilityMetadata_BotCapabilityType = 16 + BotCapabilityMetadata_WA_IG_1P_PLUGIN_RANKING_UPDATE_7 BotCapabilityMetadata_BotCapabilityType = 17 + BotCapabilityMetadata_WA_IG_1P_PLUGIN_RANKING_UPDATE_8 BotCapabilityMetadata_BotCapabilityType = 18 + BotCapabilityMetadata_WA_IG_1P_PLUGIN_RANKING_UPDATE_9 BotCapabilityMetadata_BotCapabilityType = 19 + BotCapabilityMetadata_WA_IG_1P_PLUGIN_RANKING_UPDATE_10 BotCapabilityMetadata_BotCapabilityType = 20 + BotCapabilityMetadata_RICH_RESPONSE_SUB_HEADING BotCapabilityMetadata_BotCapabilityType = 21 + BotCapabilityMetadata_RICH_RESPONSE_GRID_IMAGE BotCapabilityMetadata_BotCapabilityType = 22 + BotCapabilityMetadata_AI_STUDIO_UGC_MEMORY BotCapabilityMetadata_BotCapabilityType = 23 + BotCapabilityMetadata_RICH_RESPONSE_LATEX BotCapabilityMetadata_BotCapabilityType = 24 + BotCapabilityMetadata_RICH_RESPONSE_MAPS BotCapabilityMetadata_BotCapabilityType = 25 + BotCapabilityMetadata_RICH_RESPONSE_INLINE_REELS BotCapabilityMetadata_BotCapabilityType = 26 + BotCapabilityMetadata_AGENTIC_PLANNING BotCapabilityMetadata_BotCapabilityType = 27 + BotCapabilityMetadata_ACCOUNT_LINKING BotCapabilityMetadata_BotCapabilityType = 28 + BotCapabilityMetadata_STREAMING_DISAGGREGATION BotCapabilityMetadata_BotCapabilityType = 29 + BotCapabilityMetadata_RICH_RESPONSE_GRID_IMAGE_3P BotCapabilityMetadata_BotCapabilityType = 30 + BotCapabilityMetadata_RICH_RESPONSE_LATEX_INLINE BotCapabilityMetadata_BotCapabilityType = 31 + BotCapabilityMetadata_QUERY_PLAN BotCapabilityMetadata_BotCapabilityType = 32 + BotCapabilityMetadata_PROACTIVE_MESSAGE BotCapabilityMetadata_BotCapabilityType = 33 + BotCapabilityMetadata_RICH_RESPONSE_UNIFIED_RESPONSE BotCapabilityMetadata_BotCapabilityType = 34 + BotCapabilityMetadata_PROMOTION_MESSAGE BotCapabilityMetadata_BotCapabilityType = 35 + BotCapabilityMetadata_SIMPLIFIED_PROFILE_PAGE BotCapabilityMetadata_BotCapabilityType = 36 + BotCapabilityMetadata_RICH_RESPONSE_SOURCES_IN_MESSAGE BotCapabilityMetadata_BotCapabilityType = 37 + BotCapabilityMetadata_RICH_RESPONSE_SIDE_BY_SIDE_SURVEY BotCapabilityMetadata_BotCapabilityType = 38 + BotCapabilityMetadata_RICH_RESPONSE_UNIFIED_TEXT_COMPONENT BotCapabilityMetadata_BotCapabilityType = 39 + BotCapabilityMetadata_AI_SHARED_MEMORY BotCapabilityMetadata_BotCapabilityType = 40 + BotCapabilityMetadata_RICH_RESPONSE_UNIFIED_SOURCES BotCapabilityMetadata_BotCapabilityType = 41 + BotCapabilityMetadata_RICH_RESPONSE_UNIFIED_DOMAIN_CITATIONS BotCapabilityMetadata_BotCapabilityType = 42 + BotCapabilityMetadata_RICH_RESPONSE_UR_INLINE_REELS_ENABLED BotCapabilityMetadata_BotCapabilityType = 43 + BotCapabilityMetadata_RICH_RESPONSE_UR_MEDIA_GRID_ENABLED BotCapabilityMetadata_BotCapabilityType = 44 + BotCapabilityMetadata_RICH_RESPONSE_UR_TIMESTAMP_PLACEHOLDER BotCapabilityMetadata_BotCapabilityType = 45 + BotCapabilityMetadata_RICH_RESPONSE_IN_APP_SURVEY BotCapabilityMetadata_BotCapabilityType = 46 + BotCapabilityMetadata_AI_RESPONSE_MODEL_BRANDING BotCapabilityMetadata_BotCapabilityType = 47 + BotCapabilityMetadata_SESSION_TRANSPARENCY_SYSTEM_MESSAGE BotCapabilityMetadata_BotCapabilityType = 48 + BotCapabilityMetadata_RICH_RESPONSE_UR_REASONING BotCapabilityMetadata_BotCapabilityType = 49 + BotCapabilityMetadata_RICH_RESPONSE_UR_ZEITGEIST_CITATIONS BotCapabilityMetadata_BotCapabilityType = 50 + BotCapabilityMetadata_RICH_RESPONSE_UR_ZEITGEIST_CAROUSEL BotCapabilityMetadata_BotCapabilityType = 51 + BotCapabilityMetadata_AI_IMAGINE_LOADING_INDICATOR BotCapabilityMetadata_BotCapabilityType = 52 + BotCapabilityMetadata_RICH_RESPONSE_UR_IMAGINE BotCapabilityMetadata_BotCapabilityType = 53 + BotCapabilityMetadata_AI_IMAGINE_UR_TO_NATIVE_LOADING_INDICATOR BotCapabilityMetadata_BotCapabilityType = 54 + BotCapabilityMetadata_RICH_RESPONSE_UR_BLOKS_ENABLED BotCapabilityMetadata_BotCapabilityType = 55 + BotCapabilityMetadata_RICH_RESPONSE_INLINE_LINKS_ENABLED BotCapabilityMetadata_BotCapabilityType = 56 + BotCapabilityMetadata_RICH_RESPONSE_UR_IMAGINE_VIDEO BotCapabilityMetadata_BotCapabilityType = 57 +) + +// Enum value maps for BotCapabilityMetadata_BotCapabilityType. +var ( + BotCapabilityMetadata_BotCapabilityType_name = map[int32]string{ + 0: "UNKNOWN", + 1: "PROGRESS_INDICATOR", + 2: "RICH_RESPONSE_HEADING", + 3: "RICH_RESPONSE_NESTED_LIST", + 4: "AI_MEMORY", + 5: "RICH_RESPONSE_THREAD_SURFING", + 6: "RICH_RESPONSE_TABLE", + 7: "RICH_RESPONSE_CODE", + 8: "RICH_RESPONSE_STRUCTURED_RESPONSE", + 9: "RICH_RESPONSE_INLINE_IMAGE", + 10: "WA_IG_1P_PLUGIN_RANKING_CONTROL", + 11: "WA_IG_1P_PLUGIN_RANKING_UPDATE_1", + 12: "WA_IG_1P_PLUGIN_RANKING_UPDATE_2", + 13: "WA_IG_1P_PLUGIN_RANKING_UPDATE_3", + 14: "WA_IG_1P_PLUGIN_RANKING_UPDATE_4", + 15: "WA_IG_1P_PLUGIN_RANKING_UPDATE_5", + 16: "WA_IG_1P_PLUGIN_RANKING_UPDATE_6", + 17: "WA_IG_1P_PLUGIN_RANKING_UPDATE_7", + 18: "WA_IG_1P_PLUGIN_RANKING_UPDATE_8", + 19: "WA_IG_1P_PLUGIN_RANKING_UPDATE_9", + 20: "WA_IG_1P_PLUGIN_RANKING_UPDATE_10", + 21: "RICH_RESPONSE_SUB_HEADING", + 22: "RICH_RESPONSE_GRID_IMAGE", + 23: "AI_STUDIO_UGC_MEMORY", + 24: "RICH_RESPONSE_LATEX", + 25: "RICH_RESPONSE_MAPS", + 26: "RICH_RESPONSE_INLINE_REELS", + 27: "AGENTIC_PLANNING", + 28: "ACCOUNT_LINKING", + 29: "STREAMING_DISAGGREGATION", + 30: "RICH_RESPONSE_GRID_IMAGE_3P", + 31: "RICH_RESPONSE_LATEX_INLINE", + 32: "QUERY_PLAN", + 33: "PROACTIVE_MESSAGE", + 34: "RICH_RESPONSE_UNIFIED_RESPONSE", + 35: "PROMOTION_MESSAGE", + 36: "SIMPLIFIED_PROFILE_PAGE", + 37: "RICH_RESPONSE_SOURCES_IN_MESSAGE", + 38: "RICH_RESPONSE_SIDE_BY_SIDE_SURVEY", + 39: "RICH_RESPONSE_UNIFIED_TEXT_COMPONENT", + 40: "AI_SHARED_MEMORY", + 41: "RICH_RESPONSE_UNIFIED_SOURCES", + 42: "RICH_RESPONSE_UNIFIED_DOMAIN_CITATIONS", + 43: "RICH_RESPONSE_UR_INLINE_REELS_ENABLED", + 44: "RICH_RESPONSE_UR_MEDIA_GRID_ENABLED", + 45: "RICH_RESPONSE_UR_TIMESTAMP_PLACEHOLDER", + 46: "RICH_RESPONSE_IN_APP_SURVEY", + 47: "AI_RESPONSE_MODEL_BRANDING", + 48: "SESSION_TRANSPARENCY_SYSTEM_MESSAGE", + 49: "RICH_RESPONSE_UR_REASONING", + 50: "RICH_RESPONSE_UR_ZEITGEIST_CITATIONS", + 51: "RICH_RESPONSE_UR_ZEITGEIST_CAROUSEL", + 52: "AI_IMAGINE_LOADING_INDICATOR", + 53: "RICH_RESPONSE_UR_IMAGINE", + 54: "AI_IMAGINE_UR_TO_NATIVE_LOADING_INDICATOR", + 55: "RICH_RESPONSE_UR_BLOKS_ENABLED", + 56: "RICH_RESPONSE_INLINE_LINKS_ENABLED", + 57: "RICH_RESPONSE_UR_IMAGINE_VIDEO", + } + BotCapabilityMetadata_BotCapabilityType_value = map[string]int32{ + "UNKNOWN": 0, + "PROGRESS_INDICATOR": 1, + "RICH_RESPONSE_HEADING": 2, + "RICH_RESPONSE_NESTED_LIST": 3, + "AI_MEMORY": 4, + "RICH_RESPONSE_THREAD_SURFING": 5, + "RICH_RESPONSE_TABLE": 6, + "RICH_RESPONSE_CODE": 7, + "RICH_RESPONSE_STRUCTURED_RESPONSE": 8, + "RICH_RESPONSE_INLINE_IMAGE": 9, + "WA_IG_1P_PLUGIN_RANKING_CONTROL": 10, + "WA_IG_1P_PLUGIN_RANKING_UPDATE_1": 11, + "WA_IG_1P_PLUGIN_RANKING_UPDATE_2": 12, + "WA_IG_1P_PLUGIN_RANKING_UPDATE_3": 13, + "WA_IG_1P_PLUGIN_RANKING_UPDATE_4": 14, + "WA_IG_1P_PLUGIN_RANKING_UPDATE_5": 15, + "WA_IG_1P_PLUGIN_RANKING_UPDATE_6": 16, + "WA_IG_1P_PLUGIN_RANKING_UPDATE_7": 17, + "WA_IG_1P_PLUGIN_RANKING_UPDATE_8": 18, + "WA_IG_1P_PLUGIN_RANKING_UPDATE_9": 19, + "WA_IG_1P_PLUGIN_RANKING_UPDATE_10": 20, + "RICH_RESPONSE_SUB_HEADING": 21, + "RICH_RESPONSE_GRID_IMAGE": 22, + "AI_STUDIO_UGC_MEMORY": 23, + "RICH_RESPONSE_LATEX": 24, + "RICH_RESPONSE_MAPS": 25, + "RICH_RESPONSE_INLINE_REELS": 26, + "AGENTIC_PLANNING": 27, + "ACCOUNT_LINKING": 28, + "STREAMING_DISAGGREGATION": 29, + "RICH_RESPONSE_GRID_IMAGE_3P": 30, + "RICH_RESPONSE_LATEX_INLINE": 31, + "QUERY_PLAN": 32, + "PROACTIVE_MESSAGE": 33, + "RICH_RESPONSE_UNIFIED_RESPONSE": 34, + "PROMOTION_MESSAGE": 35, + "SIMPLIFIED_PROFILE_PAGE": 36, + "RICH_RESPONSE_SOURCES_IN_MESSAGE": 37, + "RICH_RESPONSE_SIDE_BY_SIDE_SURVEY": 38, + "RICH_RESPONSE_UNIFIED_TEXT_COMPONENT": 39, + "AI_SHARED_MEMORY": 40, + "RICH_RESPONSE_UNIFIED_SOURCES": 41, + "RICH_RESPONSE_UNIFIED_DOMAIN_CITATIONS": 42, + "RICH_RESPONSE_UR_INLINE_REELS_ENABLED": 43, + "RICH_RESPONSE_UR_MEDIA_GRID_ENABLED": 44, + "RICH_RESPONSE_UR_TIMESTAMP_PLACEHOLDER": 45, + "RICH_RESPONSE_IN_APP_SURVEY": 46, + "AI_RESPONSE_MODEL_BRANDING": 47, + "SESSION_TRANSPARENCY_SYSTEM_MESSAGE": 48, + "RICH_RESPONSE_UR_REASONING": 49, + "RICH_RESPONSE_UR_ZEITGEIST_CITATIONS": 50, + "RICH_RESPONSE_UR_ZEITGEIST_CAROUSEL": 51, + "AI_IMAGINE_LOADING_INDICATOR": 52, + "RICH_RESPONSE_UR_IMAGINE": 53, + "AI_IMAGINE_UR_TO_NATIVE_LOADING_INDICATOR": 54, + "RICH_RESPONSE_UR_BLOKS_ENABLED": 55, + "RICH_RESPONSE_INLINE_LINKS_ENABLED": 56, + "RICH_RESPONSE_UR_IMAGINE_VIDEO": 57, + } +) + +func (x BotCapabilityMetadata_BotCapabilityType) Enum() *BotCapabilityMetadata_BotCapabilityType { + p := new(BotCapabilityMetadata_BotCapabilityType) + *p = x + return p +} + +func (x BotCapabilityMetadata_BotCapabilityType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (BotCapabilityMetadata_BotCapabilityType) Descriptor() protoreflect.EnumDescriptor { + return file_waAICommon_WAWebProtobufsAICommon_proto_enumTypes[19].Descriptor() +} + +func (BotCapabilityMetadata_BotCapabilityType) Type() protoreflect.EnumType { + return &file_waAICommon_WAWebProtobufsAICommon_proto_enumTypes[19] +} + +func (x BotCapabilityMetadata_BotCapabilityType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *BotCapabilityMetadata_BotCapabilityType) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = BotCapabilityMetadata_BotCapabilityType(num) + return nil +} + +// Deprecated: Use BotCapabilityMetadata_BotCapabilityType.Descriptor instead. +func (BotCapabilityMetadata_BotCapabilityType) EnumDescriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{8, 0} +} + +type BotModeSelectionMetadata_BotUserSelectionMode int32 + +const ( + BotModeSelectionMetadata_DEFAULT_MODE BotModeSelectionMetadata_BotUserSelectionMode = 0 + BotModeSelectionMetadata_THINK_HARD_MODE BotModeSelectionMetadata_BotUserSelectionMode = 1 +) + +// Enum value maps for BotModeSelectionMetadata_BotUserSelectionMode. +var ( + BotModeSelectionMetadata_BotUserSelectionMode_name = map[int32]string{ + 0: "DEFAULT_MODE", + 1: "THINK_HARD_MODE", + } + BotModeSelectionMetadata_BotUserSelectionMode_value = map[string]int32{ + "DEFAULT_MODE": 0, + "THINK_HARD_MODE": 1, + } +) + +func (x BotModeSelectionMetadata_BotUserSelectionMode) Enum() *BotModeSelectionMetadata_BotUserSelectionMode { + p := new(BotModeSelectionMetadata_BotUserSelectionMode) + *p = x + return p +} + +func (x BotModeSelectionMetadata_BotUserSelectionMode) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (BotModeSelectionMetadata_BotUserSelectionMode) Descriptor() protoreflect.EnumDescriptor { + return file_waAICommon_WAWebProtobufsAICommon_proto_enumTypes[20].Descriptor() +} + +func (BotModeSelectionMetadata_BotUserSelectionMode) Type() protoreflect.EnumType { + return &file_waAICommon_WAWebProtobufsAICommon_proto_enumTypes[20] +} + +func (x BotModeSelectionMetadata_BotUserSelectionMode) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *BotModeSelectionMetadata_BotUserSelectionMode) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = BotModeSelectionMetadata_BotUserSelectionMode(num) + return nil +} + +// Deprecated: Use BotModeSelectionMetadata_BotUserSelectionMode.Descriptor instead. +func (BotModeSelectionMetadata_BotUserSelectionMode) EnumDescriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{9, 0} +} + +type BotQuotaMetadata_BotFeatureQuotaMetadata_BotFeatureType int32 + +const ( + BotQuotaMetadata_BotFeatureQuotaMetadata_UNKNOWN_FEATURE BotQuotaMetadata_BotFeatureQuotaMetadata_BotFeatureType = 0 + BotQuotaMetadata_BotFeatureQuotaMetadata_REASONING_FEATURE BotQuotaMetadata_BotFeatureQuotaMetadata_BotFeatureType = 1 +) + +// Enum value maps for BotQuotaMetadata_BotFeatureQuotaMetadata_BotFeatureType. +var ( + BotQuotaMetadata_BotFeatureQuotaMetadata_BotFeatureType_name = map[int32]string{ + 0: "UNKNOWN_FEATURE", + 1: "REASONING_FEATURE", + } + BotQuotaMetadata_BotFeatureQuotaMetadata_BotFeatureType_value = map[string]int32{ + "UNKNOWN_FEATURE": 0, + "REASONING_FEATURE": 1, + } +) + +func (x BotQuotaMetadata_BotFeatureQuotaMetadata_BotFeatureType) Enum() *BotQuotaMetadata_BotFeatureQuotaMetadata_BotFeatureType { + p := new(BotQuotaMetadata_BotFeatureQuotaMetadata_BotFeatureType) + *p = x + return p +} + +func (x BotQuotaMetadata_BotFeatureQuotaMetadata_BotFeatureType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (BotQuotaMetadata_BotFeatureQuotaMetadata_BotFeatureType) Descriptor() protoreflect.EnumDescriptor { + return file_waAICommon_WAWebProtobufsAICommon_proto_enumTypes[21].Descriptor() +} + +func (BotQuotaMetadata_BotFeatureQuotaMetadata_BotFeatureType) Type() protoreflect.EnumType { + return &file_waAICommon_WAWebProtobufsAICommon_proto_enumTypes[21] +} + +func (x BotQuotaMetadata_BotFeatureQuotaMetadata_BotFeatureType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *BotQuotaMetadata_BotFeatureQuotaMetadata_BotFeatureType) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = BotQuotaMetadata_BotFeatureQuotaMetadata_BotFeatureType(num) + return nil +} + +// Deprecated: Use BotQuotaMetadata_BotFeatureQuotaMetadata_BotFeatureType.Descriptor instead. +func (BotQuotaMetadata_BotFeatureQuotaMetadata_BotFeatureType) EnumDescriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{10, 0, 0} +} + +type BotImagineMetadata_ImagineType int32 + +const ( + BotImagineMetadata_UNKNOWN BotImagineMetadata_ImagineType = 0 + BotImagineMetadata_IMAGINE BotImagineMetadata_ImagineType = 1 + BotImagineMetadata_MEMU BotImagineMetadata_ImagineType = 2 + BotImagineMetadata_FLASH BotImagineMetadata_ImagineType = 3 + BotImagineMetadata_EDIT BotImagineMetadata_ImagineType = 4 +) + +// Enum value maps for BotImagineMetadata_ImagineType. +var ( + BotImagineMetadata_ImagineType_name = map[int32]string{ + 0: "UNKNOWN", + 1: "IMAGINE", + 2: "MEMU", + 3: "FLASH", + 4: "EDIT", + } + BotImagineMetadata_ImagineType_value = map[string]int32{ + "UNKNOWN": 0, + "IMAGINE": 1, + "MEMU": 2, + "FLASH": 3, + "EDIT": 4, + } +) + +func (x BotImagineMetadata_ImagineType) Enum() *BotImagineMetadata_ImagineType { + p := new(BotImagineMetadata_ImagineType) + *p = x + return p +} + +func (x BotImagineMetadata_ImagineType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (BotImagineMetadata_ImagineType) Descriptor() protoreflect.EnumDescriptor { + return file_waAICommon_WAWebProtobufsAICommon_proto_enumTypes[22].Descriptor() +} + +func (BotImagineMetadata_ImagineType) Type() protoreflect.EnumType { + return &file_waAICommon_WAWebProtobufsAICommon_proto_enumTypes[22] +} + +func (x BotImagineMetadata_ImagineType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *BotImagineMetadata_ImagineType) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = BotImagineMetadata_ImagineType(num) + return nil +} + +// Deprecated: Use BotImagineMetadata_ImagineType.Descriptor instead. +func (BotImagineMetadata_ImagineType) EnumDescriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{11, 0} +} + +type BotAgeCollectionMetadata_AgeCollectionType int32 + +const ( + BotAgeCollectionMetadata_O18_BINARY BotAgeCollectionMetadata_AgeCollectionType = 0 + BotAgeCollectionMetadata_WAFFLE BotAgeCollectionMetadata_AgeCollectionType = 1 +) + +// Enum value maps for BotAgeCollectionMetadata_AgeCollectionType. +var ( + BotAgeCollectionMetadata_AgeCollectionType_name = map[int32]string{ + 0: "O18_BINARY", + 1: "WAFFLE", + } + BotAgeCollectionMetadata_AgeCollectionType_value = map[string]int32{ + "O18_BINARY": 0, + "WAFFLE": 1, + } +) + +func (x BotAgeCollectionMetadata_AgeCollectionType) Enum() *BotAgeCollectionMetadata_AgeCollectionType { + p := new(BotAgeCollectionMetadata_AgeCollectionType) + *p = x + return p +} + +func (x BotAgeCollectionMetadata_AgeCollectionType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (BotAgeCollectionMetadata_AgeCollectionType) Descriptor() protoreflect.EnumDescriptor { + return file_waAICommon_WAWebProtobufsAICommon_proto_enumTypes[23].Descriptor() +} + +func (BotAgeCollectionMetadata_AgeCollectionType) Type() protoreflect.EnumType { + return &file_waAICommon_WAWebProtobufsAICommon_proto_enumTypes[23] +} + +func (x BotAgeCollectionMetadata_AgeCollectionType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *BotAgeCollectionMetadata_AgeCollectionType) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = BotAgeCollectionMetadata_AgeCollectionType(num) + return nil +} + +// Deprecated: Use BotAgeCollectionMetadata_AgeCollectionType.Descriptor instead. +func (BotAgeCollectionMetadata_AgeCollectionType) EnumDescriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{12, 0} +} + +type BotSourcesMetadata_BotSourceItem_SourceProvider int32 + +const ( + BotSourcesMetadata_BotSourceItem_UNKNOWN BotSourcesMetadata_BotSourceItem_SourceProvider = 0 + BotSourcesMetadata_BotSourceItem_BING BotSourcesMetadata_BotSourceItem_SourceProvider = 1 + BotSourcesMetadata_BotSourceItem_GOOGLE BotSourcesMetadata_BotSourceItem_SourceProvider = 2 + BotSourcesMetadata_BotSourceItem_SUPPORT BotSourcesMetadata_BotSourceItem_SourceProvider = 3 + BotSourcesMetadata_BotSourceItem_OTHER BotSourcesMetadata_BotSourceItem_SourceProvider = 4 +) + +// Enum value maps for BotSourcesMetadata_BotSourceItem_SourceProvider. +var ( + BotSourcesMetadata_BotSourceItem_SourceProvider_name = map[int32]string{ + 0: "UNKNOWN", + 1: "BING", + 2: "GOOGLE", + 3: "SUPPORT", + 4: "OTHER", + } + BotSourcesMetadata_BotSourceItem_SourceProvider_value = map[string]int32{ + "UNKNOWN": 0, + "BING": 1, + "GOOGLE": 2, + "SUPPORT": 3, + "OTHER": 4, + } +) + +func (x BotSourcesMetadata_BotSourceItem_SourceProvider) Enum() *BotSourcesMetadata_BotSourceItem_SourceProvider { + p := new(BotSourcesMetadata_BotSourceItem_SourceProvider) + *p = x + return p +} + +func (x BotSourcesMetadata_BotSourceItem_SourceProvider) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (BotSourcesMetadata_BotSourceItem_SourceProvider) Descriptor() protoreflect.EnumDescriptor { + return file_waAICommon_WAWebProtobufsAICommon_proto_enumTypes[24].Descriptor() +} + +func (BotSourcesMetadata_BotSourceItem_SourceProvider) Type() protoreflect.EnumType { + return &file_waAICommon_WAWebProtobufsAICommon_proto_enumTypes[24] +} + +func (x BotSourcesMetadata_BotSourceItem_SourceProvider) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *BotSourcesMetadata_BotSourceItem_SourceProvider) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = BotSourcesMetadata_BotSourceItem_SourceProvider(num) + return nil +} + +// Deprecated: Use BotSourcesMetadata_BotSourceItem_SourceProvider.Descriptor instead. +func (BotSourcesMetadata_BotSourceItem_SourceProvider) EnumDescriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{13, 0, 0} +} + +type BotMessageOrigin_BotMessageOriginType int32 + +const ( + BotMessageOrigin_BOT_MESSAGE_ORIGIN_TYPE_AI_INITIATED BotMessageOrigin_BotMessageOriginType = 0 +) + +// Enum value maps for BotMessageOrigin_BotMessageOriginType. +var ( + BotMessageOrigin_BotMessageOriginType_name = map[int32]string{ + 0: "BOT_MESSAGE_ORIGIN_TYPE_AI_INITIATED", + } + BotMessageOrigin_BotMessageOriginType_value = map[string]int32{ + "BOT_MESSAGE_ORIGIN_TYPE_AI_INITIATED": 0, + } +) + +func (x BotMessageOrigin_BotMessageOriginType) Enum() *BotMessageOrigin_BotMessageOriginType { + p := new(BotMessageOrigin_BotMessageOriginType) + *p = x + return p +} + +func (x BotMessageOrigin_BotMessageOriginType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (BotMessageOrigin_BotMessageOriginType) Descriptor() protoreflect.EnumDescriptor { + return file_waAICommon_WAWebProtobufsAICommon_proto_enumTypes[25].Descriptor() +} + +func (BotMessageOrigin_BotMessageOriginType) Type() protoreflect.EnumType { + return &file_waAICommon_WAWebProtobufsAICommon_proto_enumTypes[25] +} + +func (x BotMessageOrigin_BotMessageOriginType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *BotMessageOrigin_BotMessageOriginType) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = BotMessageOrigin_BotMessageOriginType(num) + return nil +} + +// Deprecated: Use BotMessageOrigin_BotMessageOriginType.Descriptor instead. +func (BotMessageOrigin_BotMessageOriginType) EnumDescriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{14, 0} +} + +type AIThreadInfo_AIThreadClientInfo_AIThreadType int32 + +const ( + AIThreadInfo_AIThreadClientInfo_UNKNOWN AIThreadInfo_AIThreadClientInfo_AIThreadType = 0 + AIThreadInfo_AIThreadClientInfo_DEFAULT AIThreadInfo_AIThreadClientInfo_AIThreadType = 1 + AIThreadInfo_AIThreadClientInfo_INCOGNITO AIThreadInfo_AIThreadClientInfo_AIThreadType = 2 +) + +// Enum value maps for AIThreadInfo_AIThreadClientInfo_AIThreadType. +var ( + AIThreadInfo_AIThreadClientInfo_AIThreadType_name = map[int32]string{ + 0: "UNKNOWN", + 1: "DEFAULT", + 2: "INCOGNITO", + } + AIThreadInfo_AIThreadClientInfo_AIThreadType_value = map[string]int32{ + "UNKNOWN": 0, + "DEFAULT": 1, + "INCOGNITO": 2, + } +) + +func (x AIThreadInfo_AIThreadClientInfo_AIThreadType) Enum() *AIThreadInfo_AIThreadClientInfo_AIThreadType { + p := new(AIThreadInfo_AIThreadClientInfo_AIThreadType) + *p = x + return p +} + +func (x AIThreadInfo_AIThreadClientInfo_AIThreadType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (AIThreadInfo_AIThreadClientInfo_AIThreadType) Descriptor() protoreflect.EnumDescriptor { + return file_waAICommon_WAWebProtobufsAICommon_proto_enumTypes[26].Descriptor() +} + +func (AIThreadInfo_AIThreadClientInfo_AIThreadType) Type() protoreflect.EnumType { + return &file_waAICommon_WAWebProtobufsAICommon_proto_enumTypes[26] +} + +func (x AIThreadInfo_AIThreadClientInfo_AIThreadType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *AIThreadInfo_AIThreadClientInfo_AIThreadType) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = AIThreadInfo_AIThreadClientInfo_AIThreadType(num) + return nil +} + +// Deprecated: Use AIThreadInfo_AIThreadClientInfo_AIThreadType.Descriptor instead. +func (AIThreadInfo_AIThreadClientInfo_AIThreadType) EnumDescriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{15, 0, 0} +} + +type BotFeedbackMessage_ReportKind int32 + +const ( + BotFeedbackMessage_NONE BotFeedbackMessage_ReportKind = 0 + BotFeedbackMessage_GENERIC BotFeedbackMessage_ReportKind = 1 +) + +// Enum value maps for BotFeedbackMessage_ReportKind. +var ( + BotFeedbackMessage_ReportKind_name = map[int32]string{ + 0: "NONE", + 1: "GENERIC", + } + BotFeedbackMessage_ReportKind_value = map[string]int32{ + "NONE": 0, + "GENERIC": 1, + } +) + +func (x BotFeedbackMessage_ReportKind) Enum() *BotFeedbackMessage_ReportKind { + p := new(BotFeedbackMessage_ReportKind) + *p = x + return p +} + +func (x BotFeedbackMessage_ReportKind) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (BotFeedbackMessage_ReportKind) Descriptor() protoreflect.EnumDescriptor { + return file_waAICommon_WAWebProtobufsAICommon_proto_enumTypes[27].Descriptor() +} + +func (BotFeedbackMessage_ReportKind) Type() protoreflect.EnumType { + return &file_waAICommon_WAWebProtobufsAICommon_proto_enumTypes[27] +} + +func (x BotFeedbackMessage_ReportKind) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *BotFeedbackMessage_ReportKind) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = BotFeedbackMessage_ReportKind(num) + return nil +} + +// Deprecated: Use BotFeedbackMessage_ReportKind.Descriptor instead. +func (BotFeedbackMessage_ReportKind) EnumDescriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{16, 0} +} + +type BotFeedbackMessage_BotFeedbackKindMultiplePositive int32 + +const ( + BotFeedbackMessage_BOT_FEEDBACK_MULTIPLE_POSITIVE_GENERIC BotFeedbackMessage_BotFeedbackKindMultiplePositive = 1 +) + +// Enum value maps for BotFeedbackMessage_BotFeedbackKindMultiplePositive. +var ( + BotFeedbackMessage_BotFeedbackKindMultiplePositive_name = map[int32]string{ + 1: "BOT_FEEDBACK_MULTIPLE_POSITIVE_GENERIC", + } + BotFeedbackMessage_BotFeedbackKindMultiplePositive_value = map[string]int32{ + "BOT_FEEDBACK_MULTIPLE_POSITIVE_GENERIC": 1, + } +) + +func (x BotFeedbackMessage_BotFeedbackKindMultiplePositive) Enum() *BotFeedbackMessage_BotFeedbackKindMultiplePositive { + p := new(BotFeedbackMessage_BotFeedbackKindMultiplePositive) + *p = x + return p +} + +func (x BotFeedbackMessage_BotFeedbackKindMultiplePositive) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (BotFeedbackMessage_BotFeedbackKindMultiplePositive) Descriptor() protoreflect.EnumDescriptor { + return file_waAICommon_WAWebProtobufsAICommon_proto_enumTypes[28].Descriptor() +} + +func (BotFeedbackMessage_BotFeedbackKindMultiplePositive) Type() protoreflect.EnumType { + return &file_waAICommon_WAWebProtobufsAICommon_proto_enumTypes[28] +} + +func (x BotFeedbackMessage_BotFeedbackKindMultiplePositive) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *BotFeedbackMessage_BotFeedbackKindMultiplePositive) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = BotFeedbackMessage_BotFeedbackKindMultiplePositive(num) + return nil +} + +// Deprecated: Use BotFeedbackMessage_BotFeedbackKindMultiplePositive.Descriptor instead. +func (BotFeedbackMessage_BotFeedbackKindMultiplePositive) EnumDescriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{16, 1} +} + +type BotFeedbackMessage_BotFeedbackKindMultipleNegative int32 + +const ( + BotFeedbackMessage_BOT_FEEDBACK_MULTIPLE_NEGATIVE_GENERIC BotFeedbackMessage_BotFeedbackKindMultipleNegative = 1 + BotFeedbackMessage_BOT_FEEDBACK_MULTIPLE_NEGATIVE_HELPFUL BotFeedbackMessage_BotFeedbackKindMultipleNegative = 2 + BotFeedbackMessage_BOT_FEEDBACK_MULTIPLE_NEGATIVE_INTERESTING BotFeedbackMessage_BotFeedbackKindMultipleNegative = 4 + BotFeedbackMessage_BOT_FEEDBACK_MULTIPLE_NEGATIVE_ACCURATE BotFeedbackMessage_BotFeedbackKindMultipleNegative = 8 + BotFeedbackMessage_BOT_FEEDBACK_MULTIPLE_NEGATIVE_SAFE BotFeedbackMessage_BotFeedbackKindMultipleNegative = 16 + BotFeedbackMessage_BOT_FEEDBACK_MULTIPLE_NEGATIVE_OTHER BotFeedbackMessage_BotFeedbackKindMultipleNegative = 32 + BotFeedbackMessage_BOT_FEEDBACK_MULTIPLE_NEGATIVE_REFUSED BotFeedbackMessage_BotFeedbackKindMultipleNegative = 64 + BotFeedbackMessage_BOT_FEEDBACK_MULTIPLE_NEGATIVE_NOT_VISUALLY_APPEALING BotFeedbackMessage_BotFeedbackKindMultipleNegative = 128 + BotFeedbackMessage_BOT_FEEDBACK_MULTIPLE_NEGATIVE_NOT_RELEVANT_TO_TEXT BotFeedbackMessage_BotFeedbackKindMultipleNegative = 256 +) + +// Enum value maps for BotFeedbackMessage_BotFeedbackKindMultipleNegative. +var ( + BotFeedbackMessage_BotFeedbackKindMultipleNegative_name = map[int32]string{ + 1: "BOT_FEEDBACK_MULTIPLE_NEGATIVE_GENERIC", + 2: "BOT_FEEDBACK_MULTIPLE_NEGATIVE_HELPFUL", + 4: "BOT_FEEDBACK_MULTIPLE_NEGATIVE_INTERESTING", + 8: "BOT_FEEDBACK_MULTIPLE_NEGATIVE_ACCURATE", + 16: "BOT_FEEDBACK_MULTIPLE_NEGATIVE_SAFE", + 32: "BOT_FEEDBACK_MULTIPLE_NEGATIVE_OTHER", + 64: "BOT_FEEDBACK_MULTIPLE_NEGATIVE_REFUSED", + 128: "BOT_FEEDBACK_MULTIPLE_NEGATIVE_NOT_VISUALLY_APPEALING", + 256: "BOT_FEEDBACK_MULTIPLE_NEGATIVE_NOT_RELEVANT_TO_TEXT", + } + BotFeedbackMessage_BotFeedbackKindMultipleNegative_value = map[string]int32{ + "BOT_FEEDBACK_MULTIPLE_NEGATIVE_GENERIC": 1, + "BOT_FEEDBACK_MULTIPLE_NEGATIVE_HELPFUL": 2, + "BOT_FEEDBACK_MULTIPLE_NEGATIVE_INTERESTING": 4, + "BOT_FEEDBACK_MULTIPLE_NEGATIVE_ACCURATE": 8, + "BOT_FEEDBACK_MULTIPLE_NEGATIVE_SAFE": 16, + "BOT_FEEDBACK_MULTIPLE_NEGATIVE_OTHER": 32, + "BOT_FEEDBACK_MULTIPLE_NEGATIVE_REFUSED": 64, + "BOT_FEEDBACK_MULTIPLE_NEGATIVE_NOT_VISUALLY_APPEALING": 128, + "BOT_FEEDBACK_MULTIPLE_NEGATIVE_NOT_RELEVANT_TO_TEXT": 256, + } +) + +func (x BotFeedbackMessage_BotFeedbackKindMultipleNegative) Enum() *BotFeedbackMessage_BotFeedbackKindMultipleNegative { + p := new(BotFeedbackMessage_BotFeedbackKindMultipleNegative) + *p = x + return p +} + +func (x BotFeedbackMessage_BotFeedbackKindMultipleNegative) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (BotFeedbackMessage_BotFeedbackKindMultipleNegative) Descriptor() protoreflect.EnumDescriptor { + return file_waAICommon_WAWebProtobufsAICommon_proto_enumTypes[29].Descriptor() +} + +func (BotFeedbackMessage_BotFeedbackKindMultipleNegative) Type() protoreflect.EnumType { + return &file_waAICommon_WAWebProtobufsAICommon_proto_enumTypes[29] +} + +func (x BotFeedbackMessage_BotFeedbackKindMultipleNegative) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *BotFeedbackMessage_BotFeedbackKindMultipleNegative) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = BotFeedbackMessage_BotFeedbackKindMultipleNegative(num) + return nil +} + +// Deprecated: Use BotFeedbackMessage_BotFeedbackKindMultipleNegative.Descriptor instead. +func (BotFeedbackMessage_BotFeedbackKindMultipleNegative) EnumDescriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{16, 2} +} + +type BotFeedbackMessage_BotFeedbackKind int32 + +const ( + BotFeedbackMessage_BOT_FEEDBACK_POSITIVE BotFeedbackMessage_BotFeedbackKind = 0 + BotFeedbackMessage_BOT_FEEDBACK_NEGATIVE_GENERIC BotFeedbackMessage_BotFeedbackKind = 1 + BotFeedbackMessage_BOT_FEEDBACK_NEGATIVE_HELPFUL BotFeedbackMessage_BotFeedbackKind = 2 + BotFeedbackMessage_BOT_FEEDBACK_NEGATIVE_INTERESTING BotFeedbackMessage_BotFeedbackKind = 3 + BotFeedbackMessage_BOT_FEEDBACK_NEGATIVE_ACCURATE BotFeedbackMessage_BotFeedbackKind = 4 + BotFeedbackMessage_BOT_FEEDBACK_NEGATIVE_SAFE BotFeedbackMessage_BotFeedbackKind = 5 + BotFeedbackMessage_BOT_FEEDBACK_NEGATIVE_OTHER BotFeedbackMessage_BotFeedbackKind = 6 + BotFeedbackMessage_BOT_FEEDBACK_NEGATIVE_REFUSED BotFeedbackMessage_BotFeedbackKind = 7 + BotFeedbackMessage_BOT_FEEDBACK_NEGATIVE_NOT_VISUALLY_APPEALING BotFeedbackMessage_BotFeedbackKind = 8 + BotFeedbackMessage_BOT_FEEDBACK_NEGATIVE_NOT_RELEVANT_TO_TEXT BotFeedbackMessage_BotFeedbackKind = 9 + BotFeedbackMessage_BOT_FEEDBACK_NEGATIVE_PERSONALIZED BotFeedbackMessage_BotFeedbackKind = 10 + BotFeedbackMessage_BOT_FEEDBACK_NEGATIVE_CLARITY BotFeedbackMessage_BotFeedbackKind = 11 + BotFeedbackMessage_BOT_FEEDBACK_NEGATIVE_DOESNT_LOOK_LIKE_THE_PERSON BotFeedbackMessage_BotFeedbackKind = 12 + BotFeedbackMessage_BOT_FEEDBACK_NEGATIVE_HALLUCINATION_INTERNAL_ONLY BotFeedbackMessage_BotFeedbackKind = 13 + BotFeedbackMessage_BOT_FEEDBACK_NEGATIVE BotFeedbackMessage_BotFeedbackKind = 14 +) + +// Enum value maps for BotFeedbackMessage_BotFeedbackKind. +var ( + BotFeedbackMessage_BotFeedbackKind_name = map[int32]string{ + 0: "BOT_FEEDBACK_POSITIVE", + 1: "BOT_FEEDBACK_NEGATIVE_GENERIC", + 2: "BOT_FEEDBACK_NEGATIVE_HELPFUL", + 3: "BOT_FEEDBACK_NEGATIVE_INTERESTING", + 4: "BOT_FEEDBACK_NEGATIVE_ACCURATE", + 5: "BOT_FEEDBACK_NEGATIVE_SAFE", + 6: "BOT_FEEDBACK_NEGATIVE_OTHER", + 7: "BOT_FEEDBACK_NEGATIVE_REFUSED", + 8: "BOT_FEEDBACK_NEGATIVE_NOT_VISUALLY_APPEALING", + 9: "BOT_FEEDBACK_NEGATIVE_NOT_RELEVANT_TO_TEXT", + 10: "BOT_FEEDBACK_NEGATIVE_PERSONALIZED", + 11: "BOT_FEEDBACK_NEGATIVE_CLARITY", + 12: "BOT_FEEDBACK_NEGATIVE_DOESNT_LOOK_LIKE_THE_PERSON", + 13: "BOT_FEEDBACK_NEGATIVE_HALLUCINATION_INTERNAL_ONLY", + 14: "BOT_FEEDBACK_NEGATIVE", + } + BotFeedbackMessage_BotFeedbackKind_value = map[string]int32{ + "BOT_FEEDBACK_POSITIVE": 0, + "BOT_FEEDBACK_NEGATIVE_GENERIC": 1, + "BOT_FEEDBACK_NEGATIVE_HELPFUL": 2, + "BOT_FEEDBACK_NEGATIVE_INTERESTING": 3, + "BOT_FEEDBACK_NEGATIVE_ACCURATE": 4, + "BOT_FEEDBACK_NEGATIVE_SAFE": 5, + "BOT_FEEDBACK_NEGATIVE_OTHER": 6, + "BOT_FEEDBACK_NEGATIVE_REFUSED": 7, + "BOT_FEEDBACK_NEGATIVE_NOT_VISUALLY_APPEALING": 8, + "BOT_FEEDBACK_NEGATIVE_NOT_RELEVANT_TO_TEXT": 9, + "BOT_FEEDBACK_NEGATIVE_PERSONALIZED": 10, + "BOT_FEEDBACK_NEGATIVE_CLARITY": 11, + "BOT_FEEDBACK_NEGATIVE_DOESNT_LOOK_LIKE_THE_PERSON": 12, + "BOT_FEEDBACK_NEGATIVE_HALLUCINATION_INTERNAL_ONLY": 13, + "BOT_FEEDBACK_NEGATIVE": 14, + } +) + +func (x BotFeedbackMessage_BotFeedbackKind) Enum() *BotFeedbackMessage_BotFeedbackKind { + p := new(BotFeedbackMessage_BotFeedbackKind) + *p = x + return p +} + +func (x BotFeedbackMessage_BotFeedbackKind) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (BotFeedbackMessage_BotFeedbackKind) Descriptor() protoreflect.EnumDescriptor { + return file_waAICommon_WAWebProtobufsAICommon_proto_enumTypes[30].Descriptor() +} + +func (BotFeedbackMessage_BotFeedbackKind) Type() protoreflect.EnumType { + return &file_waAICommon_WAWebProtobufsAICommon_proto_enumTypes[30] +} + +func (x BotFeedbackMessage_BotFeedbackKind) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *BotFeedbackMessage_BotFeedbackKind) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = BotFeedbackMessage_BotFeedbackKind(num) + return nil +} + +// Deprecated: Use BotFeedbackMessage_BotFeedbackKind.Descriptor instead. +func (BotFeedbackMessage_BotFeedbackKind) EnumDescriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{16, 3} +} + +type AIRichResponseInlineImageMetadata_AIRichResponseImageAlignment int32 + +const ( + AIRichResponseInlineImageMetadata_AI_RICH_RESPONSE_IMAGE_LAYOUT_LEADING_ALIGNED AIRichResponseInlineImageMetadata_AIRichResponseImageAlignment = 0 + AIRichResponseInlineImageMetadata_AI_RICH_RESPONSE_IMAGE_LAYOUT_TRAILING_ALIGNED AIRichResponseInlineImageMetadata_AIRichResponseImageAlignment = 1 + AIRichResponseInlineImageMetadata_AI_RICH_RESPONSE_IMAGE_LAYOUT_CENTER_ALIGNED AIRichResponseInlineImageMetadata_AIRichResponseImageAlignment = 2 +) + +// Enum value maps for AIRichResponseInlineImageMetadata_AIRichResponseImageAlignment. +var ( + AIRichResponseInlineImageMetadata_AIRichResponseImageAlignment_name = map[int32]string{ + 0: "AI_RICH_RESPONSE_IMAGE_LAYOUT_LEADING_ALIGNED", + 1: "AI_RICH_RESPONSE_IMAGE_LAYOUT_TRAILING_ALIGNED", + 2: "AI_RICH_RESPONSE_IMAGE_LAYOUT_CENTER_ALIGNED", + } + AIRichResponseInlineImageMetadata_AIRichResponseImageAlignment_value = map[string]int32{ + "AI_RICH_RESPONSE_IMAGE_LAYOUT_LEADING_ALIGNED": 0, + "AI_RICH_RESPONSE_IMAGE_LAYOUT_TRAILING_ALIGNED": 1, + "AI_RICH_RESPONSE_IMAGE_LAYOUT_CENTER_ALIGNED": 2, + } +) + +func (x AIRichResponseInlineImageMetadata_AIRichResponseImageAlignment) Enum() *AIRichResponseInlineImageMetadata_AIRichResponseImageAlignment { + p := new(AIRichResponseInlineImageMetadata_AIRichResponseImageAlignment) + *p = x + return p +} + +func (x AIRichResponseInlineImageMetadata_AIRichResponseImageAlignment) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (AIRichResponseInlineImageMetadata_AIRichResponseImageAlignment) Descriptor() protoreflect.EnumDescriptor { + return file_waAICommon_WAWebProtobufsAICommon_proto_enumTypes[31].Descriptor() +} + +func (AIRichResponseInlineImageMetadata_AIRichResponseImageAlignment) Type() protoreflect.EnumType { + return &file_waAICommon_WAWebProtobufsAICommon_proto_enumTypes[31] +} + +func (x AIRichResponseInlineImageMetadata_AIRichResponseImageAlignment) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *AIRichResponseInlineImageMetadata_AIRichResponseImageAlignment) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = AIRichResponseInlineImageMetadata_AIRichResponseImageAlignment(num) + return nil +} + +// Deprecated: Use AIRichResponseInlineImageMetadata_AIRichResponseImageAlignment.Descriptor instead. +func (AIRichResponseInlineImageMetadata_AIRichResponseImageAlignment) EnumDescriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{17, 0} +} + +type AIRichResponseCodeMetadata_AIRichResponseCodeHighlightType int32 + +const ( + AIRichResponseCodeMetadata_AI_RICH_RESPONSE_CODE_HIGHLIGHT_DEFAULT AIRichResponseCodeMetadata_AIRichResponseCodeHighlightType = 0 + AIRichResponseCodeMetadata_AI_RICH_RESPONSE_CODE_HIGHLIGHT_KEYWORD AIRichResponseCodeMetadata_AIRichResponseCodeHighlightType = 1 + AIRichResponseCodeMetadata_AI_RICH_RESPONSE_CODE_HIGHLIGHT_METHOD AIRichResponseCodeMetadata_AIRichResponseCodeHighlightType = 2 + AIRichResponseCodeMetadata_AI_RICH_RESPONSE_CODE_HIGHLIGHT_STRING AIRichResponseCodeMetadata_AIRichResponseCodeHighlightType = 3 + AIRichResponseCodeMetadata_AI_RICH_RESPONSE_CODE_HIGHLIGHT_NUMBER AIRichResponseCodeMetadata_AIRichResponseCodeHighlightType = 4 + AIRichResponseCodeMetadata_AI_RICH_RESPONSE_CODE_HIGHLIGHT_COMMENT AIRichResponseCodeMetadata_AIRichResponseCodeHighlightType = 5 +) + +// Enum value maps for AIRichResponseCodeMetadata_AIRichResponseCodeHighlightType. +var ( + AIRichResponseCodeMetadata_AIRichResponseCodeHighlightType_name = map[int32]string{ + 0: "AI_RICH_RESPONSE_CODE_HIGHLIGHT_DEFAULT", + 1: "AI_RICH_RESPONSE_CODE_HIGHLIGHT_KEYWORD", + 2: "AI_RICH_RESPONSE_CODE_HIGHLIGHT_METHOD", + 3: "AI_RICH_RESPONSE_CODE_HIGHLIGHT_STRING", + 4: "AI_RICH_RESPONSE_CODE_HIGHLIGHT_NUMBER", + 5: "AI_RICH_RESPONSE_CODE_HIGHLIGHT_COMMENT", + } + AIRichResponseCodeMetadata_AIRichResponseCodeHighlightType_value = map[string]int32{ + "AI_RICH_RESPONSE_CODE_HIGHLIGHT_DEFAULT": 0, + "AI_RICH_RESPONSE_CODE_HIGHLIGHT_KEYWORD": 1, + "AI_RICH_RESPONSE_CODE_HIGHLIGHT_METHOD": 2, + "AI_RICH_RESPONSE_CODE_HIGHLIGHT_STRING": 3, + "AI_RICH_RESPONSE_CODE_HIGHLIGHT_NUMBER": 4, + "AI_RICH_RESPONSE_CODE_HIGHLIGHT_COMMENT": 5, + } +) + +func (x AIRichResponseCodeMetadata_AIRichResponseCodeHighlightType) Enum() *AIRichResponseCodeMetadata_AIRichResponseCodeHighlightType { + p := new(AIRichResponseCodeMetadata_AIRichResponseCodeHighlightType) + *p = x + return p +} + +func (x AIRichResponseCodeMetadata_AIRichResponseCodeHighlightType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (AIRichResponseCodeMetadata_AIRichResponseCodeHighlightType) Descriptor() protoreflect.EnumDescriptor { + return file_waAICommon_WAWebProtobufsAICommon_proto_enumTypes[32].Descriptor() +} + +func (AIRichResponseCodeMetadata_AIRichResponseCodeHighlightType) Type() protoreflect.EnumType { + return &file_waAICommon_WAWebProtobufsAICommon_proto_enumTypes[32] +} + +func (x AIRichResponseCodeMetadata_AIRichResponseCodeHighlightType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *AIRichResponseCodeMetadata_AIRichResponseCodeHighlightType) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = AIRichResponseCodeMetadata_AIRichResponseCodeHighlightType(num) + return nil +} + +// Deprecated: Use AIRichResponseCodeMetadata_AIRichResponseCodeHighlightType.Descriptor instead. +func (AIRichResponseCodeMetadata_AIRichResponseCodeHighlightType) EnumDescriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{18, 0} +} + +type AIRichResponseDynamicMetadata_AIRichResponseDynamicMetadataType int32 + +const ( + AIRichResponseDynamicMetadata_AI_RICH_RESPONSE_DYNAMIC_METADATA_TYPE_UNKNOWN AIRichResponseDynamicMetadata_AIRichResponseDynamicMetadataType = 0 + AIRichResponseDynamicMetadata_AI_RICH_RESPONSE_DYNAMIC_METADATA_TYPE_IMAGE AIRichResponseDynamicMetadata_AIRichResponseDynamicMetadataType = 1 + AIRichResponseDynamicMetadata_AI_RICH_RESPONSE_DYNAMIC_METADATA_TYPE_GIF AIRichResponseDynamicMetadata_AIRichResponseDynamicMetadataType = 2 +) + +// Enum value maps for AIRichResponseDynamicMetadata_AIRichResponseDynamicMetadataType. +var ( + AIRichResponseDynamicMetadata_AIRichResponseDynamicMetadataType_name = map[int32]string{ + 0: "AI_RICH_RESPONSE_DYNAMIC_METADATA_TYPE_UNKNOWN", + 1: "AI_RICH_RESPONSE_DYNAMIC_METADATA_TYPE_IMAGE", + 2: "AI_RICH_RESPONSE_DYNAMIC_METADATA_TYPE_GIF", + } + AIRichResponseDynamicMetadata_AIRichResponseDynamicMetadataType_value = map[string]int32{ + "AI_RICH_RESPONSE_DYNAMIC_METADATA_TYPE_UNKNOWN": 0, + "AI_RICH_RESPONSE_DYNAMIC_METADATA_TYPE_IMAGE": 1, + "AI_RICH_RESPONSE_DYNAMIC_METADATA_TYPE_GIF": 2, + } +) + +func (x AIRichResponseDynamicMetadata_AIRichResponseDynamicMetadataType) Enum() *AIRichResponseDynamicMetadata_AIRichResponseDynamicMetadataType { + p := new(AIRichResponseDynamicMetadata_AIRichResponseDynamicMetadataType) + *p = x + return p +} + +func (x AIRichResponseDynamicMetadata_AIRichResponseDynamicMetadataType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (AIRichResponseDynamicMetadata_AIRichResponseDynamicMetadataType) Descriptor() protoreflect.EnumDescriptor { + return file_waAICommon_WAWebProtobufsAICommon_proto_enumTypes[33].Descriptor() +} + +func (AIRichResponseDynamicMetadata_AIRichResponseDynamicMetadataType) Type() protoreflect.EnumType { + return &file_waAICommon_WAWebProtobufsAICommon_proto_enumTypes[33] +} + +func (x AIRichResponseDynamicMetadata_AIRichResponseDynamicMetadataType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *AIRichResponseDynamicMetadata_AIRichResponseDynamicMetadataType) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = AIRichResponseDynamicMetadata_AIRichResponseDynamicMetadataType(num) + return nil +} + +// Deprecated: Use AIRichResponseDynamicMetadata_AIRichResponseDynamicMetadataType.Descriptor instead. +func (AIRichResponseDynamicMetadata_AIRichResponseDynamicMetadataType) EnumDescriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{19, 0} +} + +type AIRichResponseContentItemsMetadata_ContentType int32 + +const ( + AIRichResponseContentItemsMetadata_DEFAULT AIRichResponseContentItemsMetadata_ContentType = 0 + AIRichResponseContentItemsMetadata_CAROUSEL AIRichResponseContentItemsMetadata_ContentType = 1 +) + +// Enum value maps for AIRichResponseContentItemsMetadata_ContentType. +var ( + AIRichResponseContentItemsMetadata_ContentType_name = map[int32]string{ + 0: "DEFAULT", + 1: "CAROUSEL", + } + AIRichResponseContentItemsMetadata_ContentType_value = map[string]int32{ + "DEFAULT": 0, + "CAROUSEL": 1, + } +) + +func (x AIRichResponseContentItemsMetadata_ContentType) Enum() *AIRichResponseContentItemsMetadata_ContentType { + p := new(AIRichResponseContentItemsMetadata_ContentType) + *p = x + return p +} + +func (x AIRichResponseContentItemsMetadata_ContentType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (AIRichResponseContentItemsMetadata_ContentType) Descriptor() protoreflect.EnumDescriptor { + return file_waAICommon_WAWebProtobufsAICommon_proto_enumTypes[34].Descriptor() +} + +func (AIRichResponseContentItemsMetadata_ContentType) Type() protoreflect.EnumType { + return &file_waAICommon_WAWebProtobufsAICommon_proto_enumTypes[34] +} + +func (x AIRichResponseContentItemsMetadata_ContentType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *AIRichResponseContentItemsMetadata_ContentType) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = AIRichResponseContentItemsMetadata_ContentType(num) + return nil +} + +// Deprecated: Use AIRichResponseContentItemsMetadata_ContentType.Descriptor instead. +func (AIRichResponseContentItemsMetadata_ContentType) EnumDescriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{20, 0} +} + +type BotDocumentMessageMetadata_DocumentPluginType int32 + +const ( + BotDocumentMessageMetadata_TEXT_EXTRACTION BotDocumentMessageMetadata_DocumentPluginType = 0 + BotDocumentMessageMetadata_OCR_AND_IMAGES BotDocumentMessageMetadata_DocumentPluginType = 1 +) + +// Enum value maps for BotDocumentMessageMetadata_DocumentPluginType. +var ( + BotDocumentMessageMetadata_DocumentPluginType_name = map[int32]string{ + 0: "TEXT_EXTRACTION", + 1: "OCR_AND_IMAGES", + } + BotDocumentMessageMetadata_DocumentPluginType_value = map[string]int32{ + "TEXT_EXTRACTION": 0, + "OCR_AND_IMAGES": 1, + } +) + +func (x BotDocumentMessageMetadata_DocumentPluginType) Enum() *BotDocumentMessageMetadata_DocumentPluginType { + p := new(BotDocumentMessageMetadata_DocumentPluginType) + *p = x + return p +} + +func (x BotDocumentMessageMetadata_DocumentPluginType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (BotDocumentMessageMetadata_DocumentPluginType) Descriptor() protoreflect.EnumDescriptor { + return file_waAICommon_WAWebProtobufsAICommon_proto_enumTypes[35].Descriptor() +} + +func (BotDocumentMessageMetadata_DocumentPluginType) Type() protoreflect.EnumType { + return &file_waAICommon_WAWebProtobufsAICommon_proto_enumTypes[35] +} + +func (x BotDocumentMessageMetadata_DocumentPluginType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *BotDocumentMessageMetadata_DocumentPluginType) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = BotDocumentMessageMetadata_DocumentPluginType(num) + return nil +} + +// Deprecated: Use BotDocumentMessageMetadata_DocumentPluginType.Descriptor instead. +func (BotDocumentMessageMetadata_DocumentPluginType) EnumDescriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{21, 0} +} + +type AIHomeState_AIHomeOption_AIHomeActionType int32 + +const ( + AIHomeState_AIHomeOption_PROMPT AIHomeState_AIHomeOption_AIHomeActionType = 0 + AIHomeState_AIHomeOption_CREATE_IMAGE AIHomeState_AIHomeOption_AIHomeActionType = 1 + AIHomeState_AIHomeOption_ANIMATE_PHOTO AIHomeState_AIHomeOption_AIHomeActionType = 2 + AIHomeState_AIHomeOption_ANALYZE_FILE AIHomeState_AIHomeOption_AIHomeActionType = 3 + AIHomeState_AIHomeOption_COLLABORATE AIHomeState_AIHomeOption_AIHomeActionType = 4 +) + +// Enum value maps for AIHomeState_AIHomeOption_AIHomeActionType. +var ( + AIHomeState_AIHomeOption_AIHomeActionType_name = map[int32]string{ + 0: "PROMPT", + 1: "CREATE_IMAGE", + 2: "ANIMATE_PHOTO", + 3: "ANALYZE_FILE", + 4: "COLLABORATE", + } + AIHomeState_AIHomeOption_AIHomeActionType_value = map[string]int32{ + "PROMPT": 0, + "CREATE_IMAGE": 1, + "ANIMATE_PHOTO": 2, + "ANALYZE_FILE": 3, + "COLLABORATE": 4, + } +) + +func (x AIHomeState_AIHomeOption_AIHomeActionType) Enum() *AIHomeState_AIHomeOption_AIHomeActionType { + p := new(AIHomeState_AIHomeOption_AIHomeActionType) + *p = x + return p +} + +func (x AIHomeState_AIHomeOption_AIHomeActionType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (AIHomeState_AIHomeOption_AIHomeActionType) Descriptor() protoreflect.EnumDescriptor { + return file_waAICommon_WAWebProtobufsAICommon_proto_enumTypes[36].Descriptor() +} + +func (AIHomeState_AIHomeOption_AIHomeActionType) Type() protoreflect.EnumType { + return &file_waAICommon_WAWebProtobufsAICommon_proto_enumTypes[36] +} + +func (x AIHomeState_AIHomeOption_AIHomeActionType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *AIHomeState_AIHomeOption_AIHomeActionType) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = AIHomeState_AIHomeOption_AIHomeActionType(num) + return nil +} + +// Deprecated: Use AIHomeState_AIHomeOption_AIHomeActionType.Descriptor instead. +func (AIHomeState_AIHomeOption_AIHomeActionType) EnumDescriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{22, 0, 0} +} + +type BotInfrastructureDiagnostics_BotBackend int32 + +const ( + BotInfrastructureDiagnostics_AAPI BotInfrastructureDiagnostics_BotBackend = 0 + BotInfrastructureDiagnostics_CLIPPY BotInfrastructureDiagnostics_BotBackend = 1 +) + +// Enum value maps for BotInfrastructureDiagnostics_BotBackend. +var ( + BotInfrastructureDiagnostics_BotBackend_name = map[int32]string{ + 0: "AAPI", + 1: "CLIPPY", + } + BotInfrastructureDiagnostics_BotBackend_value = map[string]int32{ + "AAPI": 0, + "CLIPPY": 1, + } +) + +func (x BotInfrastructureDiagnostics_BotBackend) Enum() *BotInfrastructureDiagnostics_BotBackend { + p := new(BotInfrastructureDiagnostics_BotBackend) + *p = x + return p +} + +func (x BotInfrastructureDiagnostics_BotBackend) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (BotInfrastructureDiagnostics_BotBackend) Descriptor() protoreflect.EnumDescriptor { + return file_waAICommon_WAWebProtobufsAICommon_proto_enumTypes[37].Descriptor() +} + +func (BotInfrastructureDiagnostics_BotBackend) Type() protoreflect.EnumType { + return &file_waAICommon_WAWebProtobufsAICommon_proto_enumTypes[37] +} + +func (x BotInfrastructureDiagnostics_BotBackend) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *BotInfrastructureDiagnostics_BotBackend) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = BotInfrastructureDiagnostics_BotBackend(num) + return nil +} + +// Deprecated: Use BotInfrastructureDiagnostics_BotBackend.Descriptor instead. +func (BotInfrastructureDiagnostics_BotBackend) EnumDescriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{23, 0} +} + +type BotPluginMetadata struct { + state protoimpl.MessageState `protogen:"open.v1"` + Provider *BotPluginMetadata_SearchProvider `protobuf:"varint,1,opt,name=provider,enum=WAWebProtobufsAICommon.BotPluginMetadata_SearchProvider" json:"provider,omitempty"` + PluginType *BotPluginMetadata_PluginType `protobuf:"varint,2,opt,name=pluginType,enum=WAWebProtobufsAICommon.BotPluginMetadata_PluginType" json:"pluginType,omitempty"` + ThumbnailCDNURL *string `protobuf:"bytes,3,opt,name=thumbnailCDNURL" json:"thumbnailCDNURL,omitempty"` + ProfilePhotoCDNURL *string `protobuf:"bytes,4,opt,name=profilePhotoCDNURL" json:"profilePhotoCDNURL,omitempty"` + SearchProviderURL *string `protobuf:"bytes,5,opt,name=searchProviderURL" json:"searchProviderURL,omitempty"` + ReferenceIndex *uint32 `protobuf:"varint,6,opt,name=referenceIndex" json:"referenceIndex,omitempty"` + ExpectedLinksCount *uint32 `protobuf:"varint,7,opt,name=expectedLinksCount" json:"expectedLinksCount,omitempty"` + SearchQuery *string `protobuf:"bytes,9,opt,name=searchQuery" json:"searchQuery,omitempty"` + ParentPluginMessageKey *waCommon.MessageKey `protobuf:"bytes,10,opt,name=parentPluginMessageKey" json:"parentPluginMessageKey,omitempty"` + DeprecatedField *BotPluginMetadata_PluginType `protobuf:"varint,11,opt,name=deprecatedField,enum=WAWebProtobufsAICommon.BotPluginMetadata_PluginType" json:"deprecatedField,omitempty"` + ParentPluginType *BotPluginMetadata_PluginType `protobuf:"varint,12,opt,name=parentPluginType,enum=WAWebProtobufsAICommon.BotPluginMetadata_PluginType" json:"parentPluginType,omitempty"` + FaviconCDNURL *string `protobuf:"bytes,13,opt,name=faviconCDNURL" json:"faviconCDNURL,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BotPluginMetadata) Reset() { + *x = BotPluginMetadata{} + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BotPluginMetadata) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BotPluginMetadata) ProtoMessage() {} + +func (x *BotPluginMetadata) ProtoReflect() protoreflect.Message { + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[0] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BotPluginMetadata.ProtoReflect.Descriptor instead. +func (*BotPluginMetadata) Descriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{0} +} + +func (x *BotPluginMetadata) GetProvider() BotPluginMetadata_SearchProvider { + if x != nil && x.Provider != nil { + return *x.Provider + } + return BotPluginMetadata_UNKNOWN +} + +func (x *BotPluginMetadata) GetPluginType() BotPluginMetadata_PluginType { + if x != nil && x.PluginType != nil { + return *x.PluginType + } + return BotPluginMetadata_UNKNOWN_PLUGIN +} + +func (x *BotPluginMetadata) GetThumbnailCDNURL() string { + if x != nil && x.ThumbnailCDNURL != nil { + return *x.ThumbnailCDNURL + } + return "" +} + +func (x *BotPluginMetadata) GetProfilePhotoCDNURL() string { + if x != nil && x.ProfilePhotoCDNURL != nil { + return *x.ProfilePhotoCDNURL + } + return "" +} + +func (x *BotPluginMetadata) GetSearchProviderURL() string { + if x != nil && x.SearchProviderURL != nil { + return *x.SearchProviderURL + } + return "" +} + +func (x *BotPluginMetadata) GetReferenceIndex() uint32 { + if x != nil && x.ReferenceIndex != nil { + return *x.ReferenceIndex + } + return 0 +} + +func (x *BotPluginMetadata) GetExpectedLinksCount() uint32 { + if x != nil && x.ExpectedLinksCount != nil { + return *x.ExpectedLinksCount + } + return 0 +} + +func (x *BotPluginMetadata) GetSearchQuery() string { + if x != nil && x.SearchQuery != nil { + return *x.SearchQuery + } + return "" +} + +func (x *BotPluginMetadata) GetParentPluginMessageKey() *waCommon.MessageKey { + if x != nil { + return x.ParentPluginMessageKey + } + return nil +} + +func (x *BotPluginMetadata) GetDeprecatedField() BotPluginMetadata_PluginType { + if x != nil && x.DeprecatedField != nil { + return *x.DeprecatedField + } + return BotPluginMetadata_UNKNOWN_PLUGIN +} + +func (x *BotPluginMetadata) GetParentPluginType() BotPluginMetadata_PluginType { + if x != nil && x.ParentPluginType != nil { + return *x.ParentPluginType + } + return BotPluginMetadata_UNKNOWN_PLUGIN +} + +func (x *BotPluginMetadata) GetFaviconCDNURL() string { + if x != nil && x.FaviconCDNURL != nil { + return *x.FaviconCDNURL + } + return "" +} + +type BotLinkedAccount struct { + state protoimpl.MessageState `protogen:"open.v1"` + Type *BotLinkedAccount_BotLinkedAccountType `protobuf:"varint,1,opt,name=type,enum=WAWebProtobufsAICommon.BotLinkedAccount_BotLinkedAccountType" json:"type,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BotLinkedAccount) Reset() { + *x = BotLinkedAccount{} + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BotLinkedAccount) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BotLinkedAccount) ProtoMessage() {} + +func (x *BotLinkedAccount) ProtoReflect() protoreflect.Message { + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[1] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BotLinkedAccount.ProtoReflect.Descriptor instead. +func (*BotLinkedAccount) Descriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{1} +} + +func (x *BotLinkedAccount) GetType() BotLinkedAccount_BotLinkedAccountType { + if x != nil && x.Type != nil { + return *x.Type + } + return BotLinkedAccount_BOT_LINKED_ACCOUNT_TYPE_1P +} + +type BotSignatureVerificationUseCaseProof struct { + state protoimpl.MessageState `protogen:"open.v1"` + Version *int32 `protobuf:"varint,1,opt,name=version" json:"version,omitempty"` + UseCase *BotSignatureVerificationUseCaseProof_BotSignatureUseCase `protobuf:"varint,2,opt,name=useCase,enum=WAWebProtobufsAICommon.BotSignatureVerificationUseCaseProof_BotSignatureUseCase" json:"useCase,omitempty"` + Signature []byte `protobuf:"bytes,3,opt,name=signature" json:"signature,omitempty"` + CertificateChain [][]byte `protobuf:"bytes,4,rep,name=certificateChain" json:"certificateChain,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BotSignatureVerificationUseCaseProof) Reset() { + *x = BotSignatureVerificationUseCaseProof{} + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BotSignatureVerificationUseCaseProof) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BotSignatureVerificationUseCaseProof) ProtoMessage() {} + +func (x *BotSignatureVerificationUseCaseProof) ProtoReflect() protoreflect.Message { + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[2] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BotSignatureVerificationUseCaseProof.ProtoReflect.Descriptor instead. +func (*BotSignatureVerificationUseCaseProof) Descriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{2} +} + +func (x *BotSignatureVerificationUseCaseProof) GetVersion() int32 { + if x != nil && x.Version != nil { + return *x.Version + } + return 0 +} + +func (x *BotSignatureVerificationUseCaseProof) GetUseCase() BotSignatureVerificationUseCaseProof_BotSignatureUseCase { + if x != nil && x.UseCase != nil { + return *x.UseCase + } + return BotSignatureVerificationUseCaseProof_UNSPECIFIED +} + +func (x *BotSignatureVerificationUseCaseProof) GetSignature() []byte { + if x != nil { + return x.Signature + } + return nil +} + +func (x *BotSignatureVerificationUseCaseProof) GetCertificateChain() [][]byte { + if x != nil { + return x.CertificateChain + } + return nil +} + +type BotPromotionMessageMetadata struct { + state protoimpl.MessageState `protogen:"open.v1"` + PromotionType *BotPromotionMessageMetadata_BotPromotionType `protobuf:"varint,1,opt,name=promotionType,enum=WAWebProtobufsAICommon.BotPromotionMessageMetadata_BotPromotionType" json:"promotionType,omitempty"` + ButtonTitle *string `protobuf:"bytes,2,opt,name=buttonTitle" json:"buttonTitle,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BotPromotionMessageMetadata) Reset() { + *x = BotPromotionMessageMetadata{} + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BotPromotionMessageMetadata) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BotPromotionMessageMetadata) ProtoMessage() {} + +func (x *BotPromotionMessageMetadata) ProtoReflect() protoreflect.Message { + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[3] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BotPromotionMessageMetadata.ProtoReflect.Descriptor instead. +func (*BotPromotionMessageMetadata) Descriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{3} +} + +func (x *BotPromotionMessageMetadata) GetPromotionType() BotPromotionMessageMetadata_BotPromotionType { + if x != nil && x.PromotionType != nil { + return *x.PromotionType + } + return BotPromotionMessageMetadata_UNKNOWN_TYPE +} + +func (x *BotPromotionMessageMetadata) GetButtonTitle() string { + if x != nil && x.ButtonTitle != nil { + return *x.ButtonTitle + } + return "" +} + +type BotMediaMetadata struct { + state protoimpl.MessageState `protogen:"open.v1"` + FileSHA256 *string `protobuf:"bytes,1,opt,name=fileSHA256" json:"fileSHA256,omitempty"` + MediaKey *string `protobuf:"bytes,2,opt,name=mediaKey" json:"mediaKey,omitempty"` + FileEncSHA256 *string `protobuf:"bytes,3,opt,name=fileEncSHA256" json:"fileEncSHA256,omitempty"` + DirectPath *string `protobuf:"bytes,4,opt,name=directPath" json:"directPath,omitempty"` + MediaKeyTimestamp *int64 `protobuf:"varint,5,opt,name=mediaKeyTimestamp" json:"mediaKeyTimestamp,omitempty"` + Mimetype *string `protobuf:"bytes,6,opt,name=mimetype" json:"mimetype,omitempty"` + OrientationType *BotMediaMetadata_OrientationType `protobuf:"varint,7,opt,name=orientationType,enum=WAWebProtobufsAICommon.BotMediaMetadata_OrientationType" json:"orientationType,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BotMediaMetadata) Reset() { + *x = BotMediaMetadata{} + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BotMediaMetadata) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BotMediaMetadata) ProtoMessage() {} + +func (x *BotMediaMetadata) ProtoReflect() protoreflect.Message { + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[4] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BotMediaMetadata.ProtoReflect.Descriptor instead. +func (*BotMediaMetadata) Descriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{4} +} + +func (x *BotMediaMetadata) GetFileSHA256() string { + if x != nil && x.FileSHA256 != nil { + return *x.FileSHA256 + } + return "" +} + +func (x *BotMediaMetadata) GetMediaKey() string { + if x != nil && x.MediaKey != nil { + return *x.MediaKey + } + return "" +} + +func (x *BotMediaMetadata) GetFileEncSHA256() string { + if x != nil && x.FileEncSHA256 != nil { + return *x.FileEncSHA256 + } + return "" +} + +func (x *BotMediaMetadata) GetDirectPath() string { + if x != nil && x.DirectPath != nil { + return *x.DirectPath + } + return "" +} + +func (x *BotMediaMetadata) GetMediaKeyTimestamp() int64 { + if x != nil && x.MediaKeyTimestamp != nil { + return *x.MediaKeyTimestamp + } + return 0 +} + +func (x *BotMediaMetadata) GetMimetype() string { + if x != nil && x.Mimetype != nil { + return *x.Mimetype + } + return "" +} + +func (x *BotMediaMetadata) GetOrientationType() BotMediaMetadata_OrientationType { + if x != nil && x.OrientationType != nil { + return *x.OrientationType + } + return BotMediaMetadata_CENTER +} + +type BotReminderMetadata struct { + state protoimpl.MessageState `protogen:"open.v1"` + RequestMessageKey *waCommon.MessageKey `protobuf:"bytes,1,opt,name=requestMessageKey" json:"requestMessageKey,omitempty"` + Action *BotReminderMetadata_ReminderAction `protobuf:"varint,2,opt,name=action,enum=WAWebProtobufsAICommon.BotReminderMetadata_ReminderAction" json:"action,omitempty"` + Name *string `protobuf:"bytes,3,opt,name=name" json:"name,omitempty"` + NextTriggerTimestamp *uint64 `protobuf:"varint,4,opt,name=nextTriggerTimestamp" json:"nextTriggerTimestamp,omitempty"` + Frequency *BotReminderMetadata_ReminderFrequency `protobuf:"varint,5,opt,name=frequency,enum=WAWebProtobufsAICommon.BotReminderMetadata_ReminderFrequency" json:"frequency,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BotReminderMetadata) Reset() { + *x = BotReminderMetadata{} + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BotReminderMetadata) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BotReminderMetadata) ProtoMessage() {} + +func (x *BotReminderMetadata) ProtoReflect() protoreflect.Message { + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[5] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BotReminderMetadata.ProtoReflect.Descriptor instead. +func (*BotReminderMetadata) Descriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{5} +} + +func (x *BotReminderMetadata) GetRequestMessageKey() *waCommon.MessageKey { + if x != nil { + return x.RequestMessageKey + } + return nil +} + +func (x *BotReminderMetadata) GetAction() BotReminderMetadata_ReminderAction { + if x != nil && x.Action != nil { + return *x.Action + } + return BotReminderMetadata_NOTIFY +} + +func (x *BotReminderMetadata) GetName() string { + if x != nil && x.Name != nil { + return *x.Name + } + return "" +} + +func (x *BotReminderMetadata) GetNextTriggerTimestamp() uint64 { + if x != nil && x.NextTriggerTimestamp != nil { + return *x.NextTriggerTimestamp + } + return 0 +} + +func (x *BotReminderMetadata) GetFrequency() BotReminderMetadata_ReminderFrequency { + if x != nil && x.Frequency != nil { + return *x.Frequency + } + return BotReminderMetadata_ONCE +} + +type BotModelMetadata struct { + state protoimpl.MessageState `protogen:"open.v1"` + ModelType *BotModelMetadata_ModelType `protobuf:"varint,1,opt,name=modelType,enum=WAWebProtobufsAICommon.BotModelMetadata_ModelType" json:"modelType,omitempty"` + PremiumModelStatus *BotModelMetadata_PremiumModelStatus `protobuf:"varint,2,opt,name=premiumModelStatus,enum=WAWebProtobufsAICommon.BotModelMetadata_PremiumModelStatus" json:"premiumModelStatus,omitempty"` + ModelNameOverride *string `protobuf:"bytes,3,opt,name=modelNameOverride" json:"modelNameOverride,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BotModelMetadata) Reset() { + *x = BotModelMetadata{} + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BotModelMetadata) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BotModelMetadata) ProtoMessage() {} + +func (x *BotModelMetadata) ProtoReflect() protoreflect.Message { + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[6] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BotModelMetadata.ProtoReflect.Descriptor instead. +func (*BotModelMetadata) Descriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{6} +} + +func (x *BotModelMetadata) GetModelType() BotModelMetadata_ModelType { + if x != nil && x.ModelType != nil { + return *x.ModelType + } + return BotModelMetadata_UNKNOWN_TYPE +} + +func (x *BotModelMetadata) GetPremiumModelStatus() BotModelMetadata_PremiumModelStatus { + if x != nil && x.PremiumModelStatus != nil { + return *x.PremiumModelStatus + } + return BotModelMetadata_UNKNOWN_STATUS +} + +func (x *BotModelMetadata) GetModelNameOverride() string { + if x != nil && x.ModelNameOverride != nil { + return *x.ModelNameOverride + } + return "" +} + +type BotProgressIndicatorMetadata struct { + state protoimpl.MessageState `protogen:"open.v1"` + ProgressDescription *string `protobuf:"bytes,1,opt,name=progressDescription" json:"progressDescription,omitempty"` + StepsMetadata []*BotProgressIndicatorMetadata_BotPlanningStepMetadata `protobuf:"bytes,2,rep,name=stepsMetadata" json:"stepsMetadata,omitempty"` + EstimatedCompletionTime *int64 `protobuf:"varint,3,opt,name=estimatedCompletionTime" json:"estimatedCompletionTime,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BotProgressIndicatorMetadata) Reset() { + *x = BotProgressIndicatorMetadata{} + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BotProgressIndicatorMetadata) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BotProgressIndicatorMetadata) ProtoMessage() {} + +func (x *BotProgressIndicatorMetadata) ProtoReflect() protoreflect.Message { + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[7] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BotProgressIndicatorMetadata.ProtoReflect.Descriptor instead. +func (*BotProgressIndicatorMetadata) Descriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{7} +} + +func (x *BotProgressIndicatorMetadata) GetProgressDescription() string { + if x != nil && x.ProgressDescription != nil { + return *x.ProgressDescription + } + return "" +} + +func (x *BotProgressIndicatorMetadata) GetStepsMetadata() []*BotProgressIndicatorMetadata_BotPlanningStepMetadata { + if x != nil { + return x.StepsMetadata + } + return nil +} + +func (x *BotProgressIndicatorMetadata) GetEstimatedCompletionTime() int64 { + if x != nil && x.EstimatedCompletionTime != nil { + return *x.EstimatedCompletionTime + } + return 0 +} + +type BotCapabilityMetadata struct { + state protoimpl.MessageState `protogen:"open.v1"` + Capabilities []BotCapabilityMetadata_BotCapabilityType `protobuf:"varint,1,rep,name=capabilities,enum=WAWebProtobufsAICommon.BotCapabilityMetadata_BotCapabilityType" json:"capabilities,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BotCapabilityMetadata) Reset() { + *x = BotCapabilityMetadata{} + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BotCapabilityMetadata) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BotCapabilityMetadata) ProtoMessage() {} + +func (x *BotCapabilityMetadata) ProtoReflect() protoreflect.Message { + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[8] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BotCapabilityMetadata.ProtoReflect.Descriptor instead. +func (*BotCapabilityMetadata) Descriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{8} +} + +func (x *BotCapabilityMetadata) GetCapabilities() []BotCapabilityMetadata_BotCapabilityType { + if x != nil { + return x.Capabilities + } + return nil +} + +type BotModeSelectionMetadata struct { + state protoimpl.MessageState `protogen:"open.v1"` + Mode []BotModeSelectionMetadata_BotUserSelectionMode `protobuf:"varint,1,rep,name=mode,enum=WAWebProtobufsAICommon.BotModeSelectionMetadata_BotUserSelectionMode" json:"mode,omitempty"` + OverrideMode []uint32 `protobuf:"varint,2,rep,name=overrideMode" json:"overrideMode,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BotModeSelectionMetadata) Reset() { + *x = BotModeSelectionMetadata{} + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BotModeSelectionMetadata) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BotModeSelectionMetadata) ProtoMessage() {} + +func (x *BotModeSelectionMetadata) ProtoReflect() protoreflect.Message { + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[9] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BotModeSelectionMetadata.ProtoReflect.Descriptor instead. +func (*BotModeSelectionMetadata) Descriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{9} +} + +func (x *BotModeSelectionMetadata) GetMode() []BotModeSelectionMetadata_BotUserSelectionMode { + if x != nil { + return x.Mode + } + return nil +} + +func (x *BotModeSelectionMetadata) GetOverrideMode() []uint32 { + if x != nil { + return x.OverrideMode + } + return nil +} + +type BotQuotaMetadata struct { + state protoimpl.MessageState `protogen:"open.v1"` + BotFeatureQuotaMetadata []*BotQuotaMetadata_BotFeatureQuotaMetadata `protobuf:"bytes,1,rep,name=botFeatureQuotaMetadata" json:"botFeatureQuotaMetadata,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BotQuotaMetadata) Reset() { + *x = BotQuotaMetadata{} + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BotQuotaMetadata) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BotQuotaMetadata) ProtoMessage() {} + +func (x *BotQuotaMetadata) ProtoReflect() protoreflect.Message { + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[10] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BotQuotaMetadata.ProtoReflect.Descriptor instead. +func (*BotQuotaMetadata) Descriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{10} +} + +func (x *BotQuotaMetadata) GetBotFeatureQuotaMetadata() []*BotQuotaMetadata_BotFeatureQuotaMetadata { + if x != nil { + return x.BotFeatureQuotaMetadata + } + return nil +} + +type BotImagineMetadata struct { + state protoimpl.MessageState `protogen:"open.v1"` + ImagineType *BotImagineMetadata_ImagineType `protobuf:"varint,1,opt,name=imagineType,enum=WAWebProtobufsAICommon.BotImagineMetadata_ImagineType" json:"imagineType,omitempty"` + ShortPrompt *string `protobuf:"bytes,2,opt,name=shortPrompt" json:"shortPrompt,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BotImagineMetadata) Reset() { + *x = BotImagineMetadata{} + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BotImagineMetadata) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BotImagineMetadata) ProtoMessage() {} + +func (x *BotImagineMetadata) ProtoReflect() protoreflect.Message { + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[11] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BotImagineMetadata.ProtoReflect.Descriptor instead. +func (*BotImagineMetadata) Descriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{11} +} + +func (x *BotImagineMetadata) GetImagineType() BotImagineMetadata_ImagineType { + if x != nil && x.ImagineType != nil { + return *x.ImagineType + } + return BotImagineMetadata_UNKNOWN +} + +func (x *BotImagineMetadata) GetShortPrompt() string { + if x != nil && x.ShortPrompt != nil { + return *x.ShortPrompt + } + return "" +} + +type BotAgeCollectionMetadata struct { + state protoimpl.MessageState `protogen:"open.v1"` + AgeCollectionEligible *bool `protobuf:"varint,1,opt,name=ageCollectionEligible" json:"ageCollectionEligible,omitempty"` + ShouldTriggerAgeCollectionOnClient *bool `protobuf:"varint,2,opt,name=shouldTriggerAgeCollectionOnClient" json:"shouldTriggerAgeCollectionOnClient,omitempty"` + AgeCollectionType *BotAgeCollectionMetadata_AgeCollectionType `protobuf:"varint,3,opt,name=ageCollectionType,enum=WAWebProtobufsAICommon.BotAgeCollectionMetadata_AgeCollectionType" json:"ageCollectionType,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BotAgeCollectionMetadata) Reset() { + *x = BotAgeCollectionMetadata{} + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BotAgeCollectionMetadata) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BotAgeCollectionMetadata) ProtoMessage() {} + +func (x *BotAgeCollectionMetadata) ProtoReflect() protoreflect.Message { + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[12] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BotAgeCollectionMetadata.ProtoReflect.Descriptor instead. +func (*BotAgeCollectionMetadata) Descriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{12} +} + +func (x *BotAgeCollectionMetadata) GetAgeCollectionEligible() bool { + if x != nil && x.AgeCollectionEligible != nil { + return *x.AgeCollectionEligible + } + return false +} + +func (x *BotAgeCollectionMetadata) GetShouldTriggerAgeCollectionOnClient() bool { + if x != nil && x.ShouldTriggerAgeCollectionOnClient != nil { + return *x.ShouldTriggerAgeCollectionOnClient + } + return false +} + +func (x *BotAgeCollectionMetadata) GetAgeCollectionType() BotAgeCollectionMetadata_AgeCollectionType { + if x != nil && x.AgeCollectionType != nil { + return *x.AgeCollectionType + } + return BotAgeCollectionMetadata_O18_BINARY +} + +type BotSourcesMetadata struct { + state protoimpl.MessageState `protogen:"open.v1"` + Sources []*BotSourcesMetadata_BotSourceItem `protobuf:"bytes,1,rep,name=sources" json:"sources,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BotSourcesMetadata) Reset() { + *x = BotSourcesMetadata{} + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BotSourcesMetadata) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BotSourcesMetadata) ProtoMessage() {} + +func (x *BotSourcesMetadata) ProtoReflect() protoreflect.Message { + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[13] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BotSourcesMetadata.ProtoReflect.Descriptor instead. +func (*BotSourcesMetadata) Descriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{13} +} + +func (x *BotSourcesMetadata) GetSources() []*BotSourcesMetadata_BotSourceItem { + if x != nil { + return x.Sources + } + return nil +} + +type BotMessageOrigin struct { + state protoimpl.MessageState `protogen:"open.v1"` + Type *BotMessageOrigin_BotMessageOriginType `protobuf:"varint,1,opt,name=type,enum=WAWebProtobufsAICommon.BotMessageOrigin_BotMessageOriginType" json:"type,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BotMessageOrigin) Reset() { + *x = BotMessageOrigin{} + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BotMessageOrigin) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BotMessageOrigin) ProtoMessage() {} + +func (x *BotMessageOrigin) ProtoReflect() protoreflect.Message { + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[14] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BotMessageOrigin.ProtoReflect.Descriptor instead. +func (*BotMessageOrigin) Descriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{14} +} + +func (x *BotMessageOrigin) GetType() BotMessageOrigin_BotMessageOriginType { + if x != nil && x.Type != nil { + return *x.Type + } + return BotMessageOrigin_BOT_MESSAGE_ORIGIN_TYPE_AI_INITIATED +} + +type AIThreadInfo struct { + state protoimpl.MessageState `protogen:"open.v1"` + ServerInfo *AIThreadInfo_AIThreadServerInfo `protobuf:"bytes,1,opt,name=serverInfo" json:"serverInfo,omitempty"` + ClientInfo *AIThreadInfo_AIThreadClientInfo `protobuf:"bytes,2,opt,name=clientInfo" json:"clientInfo,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *AIThreadInfo) Reset() { + *x = AIThreadInfo{} + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *AIThreadInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AIThreadInfo) ProtoMessage() {} + +func (x *AIThreadInfo) ProtoReflect() protoreflect.Message { + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[15] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AIThreadInfo.ProtoReflect.Descriptor instead. +func (*AIThreadInfo) Descriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{15} +} + +func (x *AIThreadInfo) GetServerInfo() *AIThreadInfo_AIThreadServerInfo { + if x != nil { + return x.ServerInfo + } + return nil +} + +func (x *AIThreadInfo) GetClientInfo() *AIThreadInfo_AIThreadClientInfo { + if x != nil { + return x.ClientInfo + } + return nil +} + +type BotFeedbackMessage struct { + state protoimpl.MessageState `protogen:"open.v1"` + MessageKey *waCommon.MessageKey `protobuf:"bytes,1,opt,name=messageKey" json:"messageKey,omitempty"` + Kind *BotFeedbackMessage_BotFeedbackKind `protobuf:"varint,2,opt,name=kind,enum=WAWebProtobufsAICommon.BotFeedbackMessage_BotFeedbackKind" json:"kind,omitempty"` + Text *string `protobuf:"bytes,3,opt,name=text" json:"text,omitempty"` + KindNegative *uint64 `protobuf:"varint,4,opt,name=kindNegative" json:"kindNegative,omitempty"` + KindPositive *uint64 `protobuf:"varint,5,opt,name=kindPositive" json:"kindPositive,omitempty"` + KindReport *BotFeedbackMessage_ReportKind `protobuf:"varint,6,opt,name=kindReport,enum=WAWebProtobufsAICommon.BotFeedbackMessage_ReportKind" json:"kindReport,omitempty"` + SideBySideSurveyMetadata *BotFeedbackMessage_SideBySideSurveyMetadata `protobuf:"bytes,7,opt,name=sideBySideSurveyMetadata" json:"sideBySideSurveyMetadata,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BotFeedbackMessage) Reset() { + *x = BotFeedbackMessage{} + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[16] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BotFeedbackMessage) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BotFeedbackMessage) ProtoMessage() {} + +func (x *BotFeedbackMessage) ProtoReflect() protoreflect.Message { + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[16] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BotFeedbackMessage.ProtoReflect.Descriptor instead. +func (*BotFeedbackMessage) Descriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{16} +} + +func (x *BotFeedbackMessage) GetMessageKey() *waCommon.MessageKey { + if x != nil { + return x.MessageKey + } + return nil +} + +func (x *BotFeedbackMessage) GetKind() BotFeedbackMessage_BotFeedbackKind { + if x != nil && x.Kind != nil { + return *x.Kind + } + return BotFeedbackMessage_BOT_FEEDBACK_POSITIVE +} + +func (x *BotFeedbackMessage) GetText() string { + if x != nil && x.Text != nil { + return *x.Text + } + return "" +} + +func (x *BotFeedbackMessage) GetKindNegative() uint64 { + if x != nil && x.KindNegative != nil { + return *x.KindNegative + } + return 0 +} + +func (x *BotFeedbackMessage) GetKindPositive() uint64 { + if x != nil && x.KindPositive != nil { + return *x.KindPositive + } + return 0 +} + +func (x *BotFeedbackMessage) GetKindReport() BotFeedbackMessage_ReportKind { + if x != nil && x.KindReport != nil { + return *x.KindReport + } + return BotFeedbackMessage_NONE +} + +func (x *BotFeedbackMessage) GetSideBySideSurveyMetadata() *BotFeedbackMessage_SideBySideSurveyMetadata { + if x != nil { + return x.SideBySideSurveyMetadata + } + return nil +} + +type AIRichResponseInlineImageMetadata struct { + state protoimpl.MessageState `protogen:"open.v1"` + ImageURL *AIRichResponseImageURL `protobuf:"bytes,1,opt,name=imageURL" json:"imageURL,omitempty"` + ImageText *string `protobuf:"bytes,2,opt,name=imageText" json:"imageText,omitempty"` + Alignment *AIRichResponseInlineImageMetadata_AIRichResponseImageAlignment `protobuf:"varint,3,opt,name=alignment,enum=WAWebProtobufsAICommon.AIRichResponseInlineImageMetadata_AIRichResponseImageAlignment" json:"alignment,omitempty"` + TapLinkURL *string `protobuf:"bytes,4,opt,name=tapLinkURL" json:"tapLinkURL,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *AIRichResponseInlineImageMetadata) Reset() { + *x = AIRichResponseInlineImageMetadata{} + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[17] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *AIRichResponseInlineImageMetadata) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AIRichResponseInlineImageMetadata) ProtoMessage() {} + +func (x *AIRichResponseInlineImageMetadata) ProtoReflect() protoreflect.Message { + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[17] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AIRichResponseInlineImageMetadata.ProtoReflect.Descriptor instead. +func (*AIRichResponseInlineImageMetadata) Descriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{17} +} + +func (x *AIRichResponseInlineImageMetadata) GetImageURL() *AIRichResponseImageURL { + if x != nil { + return x.ImageURL + } + return nil +} + +func (x *AIRichResponseInlineImageMetadata) GetImageText() string { + if x != nil && x.ImageText != nil { + return *x.ImageText + } + return "" +} + +func (x *AIRichResponseInlineImageMetadata) GetAlignment() AIRichResponseInlineImageMetadata_AIRichResponseImageAlignment { + if x != nil && x.Alignment != nil { + return *x.Alignment + } + return AIRichResponseInlineImageMetadata_AI_RICH_RESPONSE_IMAGE_LAYOUT_LEADING_ALIGNED +} + +func (x *AIRichResponseInlineImageMetadata) GetTapLinkURL() string { + if x != nil && x.TapLinkURL != nil { + return *x.TapLinkURL + } + return "" +} + +type AIRichResponseCodeMetadata struct { + state protoimpl.MessageState `protogen:"open.v1"` + CodeLanguage *string `protobuf:"bytes,1,opt,name=codeLanguage" json:"codeLanguage,omitempty"` + CodeBlocks []*AIRichResponseCodeMetadata_AIRichResponseCodeBlock `protobuf:"bytes,2,rep,name=codeBlocks" json:"codeBlocks,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *AIRichResponseCodeMetadata) Reset() { + *x = AIRichResponseCodeMetadata{} + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[18] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *AIRichResponseCodeMetadata) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AIRichResponseCodeMetadata) ProtoMessage() {} + +func (x *AIRichResponseCodeMetadata) ProtoReflect() protoreflect.Message { + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[18] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AIRichResponseCodeMetadata.ProtoReflect.Descriptor instead. +func (*AIRichResponseCodeMetadata) Descriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{18} +} + +func (x *AIRichResponseCodeMetadata) GetCodeLanguage() string { + if x != nil && x.CodeLanguage != nil { + return *x.CodeLanguage + } + return "" +} + +func (x *AIRichResponseCodeMetadata) GetCodeBlocks() []*AIRichResponseCodeMetadata_AIRichResponseCodeBlock { + if x != nil { + return x.CodeBlocks + } + return nil +} + +type AIRichResponseDynamicMetadata struct { + state protoimpl.MessageState `protogen:"open.v1"` + Type *AIRichResponseDynamicMetadata_AIRichResponseDynamicMetadataType `protobuf:"varint,1,opt,name=type,enum=WAWebProtobufsAICommon.AIRichResponseDynamicMetadata_AIRichResponseDynamicMetadataType" json:"type,omitempty"` + Version *uint64 `protobuf:"varint,2,opt,name=version" json:"version,omitempty"` + URL *string `protobuf:"bytes,3,opt,name=URL" json:"URL,omitempty"` + LoopCount *uint32 `protobuf:"varint,4,opt,name=loopCount" json:"loopCount,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *AIRichResponseDynamicMetadata) Reset() { + *x = AIRichResponseDynamicMetadata{} + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[19] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *AIRichResponseDynamicMetadata) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AIRichResponseDynamicMetadata) ProtoMessage() {} + +func (x *AIRichResponseDynamicMetadata) ProtoReflect() protoreflect.Message { + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[19] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AIRichResponseDynamicMetadata.ProtoReflect.Descriptor instead. +func (*AIRichResponseDynamicMetadata) Descriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{19} +} + +func (x *AIRichResponseDynamicMetadata) GetType() AIRichResponseDynamicMetadata_AIRichResponseDynamicMetadataType { + if x != nil && x.Type != nil { + return *x.Type + } + return AIRichResponseDynamicMetadata_AI_RICH_RESPONSE_DYNAMIC_METADATA_TYPE_UNKNOWN +} + +func (x *AIRichResponseDynamicMetadata) GetVersion() uint64 { + if x != nil && x.Version != nil { + return *x.Version + } + return 0 +} + +func (x *AIRichResponseDynamicMetadata) GetURL() string { + if x != nil && x.URL != nil { + return *x.URL + } + return "" +} + +func (x *AIRichResponseDynamicMetadata) GetLoopCount() uint32 { + if x != nil && x.LoopCount != nil { + return *x.LoopCount + } + return 0 +} + +type AIRichResponseContentItemsMetadata struct { + state protoimpl.MessageState `protogen:"open.v1"` + ItemsMetadata []*AIRichResponseContentItemsMetadata_AIRichResponseContentItemMetadata `protobuf:"bytes,1,rep,name=itemsMetadata" json:"itemsMetadata,omitempty"` + ContentType *AIRichResponseContentItemsMetadata_ContentType `protobuf:"varint,2,opt,name=contentType,enum=WAWebProtobufsAICommon.AIRichResponseContentItemsMetadata_ContentType" json:"contentType,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *AIRichResponseContentItemsMetadata) Reset() { + *x = AIRichResponseContentItemsMetadata{} + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[20] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *AIRichResponseContentItemsMetadata) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AIRichResponseContentItemsMetadata) ProtoMessage() {} + +func (x *AIRichResponseContentItemsMetadata) ProtoReflect() protoreflect.Message { + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[20] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AIRichResponseContentItemsMetadata.ProtoReflect.Descriptor instead. +func (*AIRichResponseContentItemsMetadata) Descriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{20} +} + +func (x *AIRichResponseContentItemsMetadata) GetItemsMetadata() []*AIRichResponseContentItemsMetadata_AIRichResponseContentItemMetadata { + if x != nil { + return x.ItemsMetadata + } + return nil +} + +func (x *AIRichResponseContentItemsMetadata) GetContentType() AIRichResponseContentItemsMetadata_ContentType { + if x != nil && x.ContentType != nil { + return *x.ContentType + } + return AIRichResponseContentItemsMetadata_DEFAULT +} + +type BotDocumentMessageMetadata struct { + state protoimpl.MessageState `protogen:"open.v1"` + PluginType *BotDocumentMessageMetadata_DocumentPluginType `protobuf:"varint,1,opt,name=pluginType,enum=WAWebProtobufsAICommon.BotDocumentMessageMetadata_DocumentPluginType" json:"pluginType,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BotDocumentMessageMetadata) Reset() { + *x = BotDocumentMessageMetadata{} + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[21] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BotDocumentMessageMetadata) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BotDocumentMessageMetadata) ProtoMessage() {} + +func (x *BotDocumentMessageMetadata) ProtoReflect() protoreflect.Message { + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[21] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BotDocumentMessageMetadata.ProtoReflect.Descriptor instead. +func (*BotDocumentMessageMetadata) Descriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{21} +} + +func (x *BotDocumentMessageMetadata) GetPluginType() BotDocumentMessageMetadata_DocumentPluginType { + if x != nil && x.PluginType != nil { + return *x.PluginType + } + return BotDocumentMessageMetadata_TEXT_EXTRACTION +} + +type AIHomeState struct { + state protoimpl.MessageState `protogen:"open.v1"` + LastFetchTime *int64 `protobuf:"varint,1,opt,name=lastFetchTime" json:"lastFetchTime,omitempty"` + CapabilityOptions []*AIHomeState_AIHomeOption `protobuf:"bytes,2,rep,name=capabilityOptions" json:"capabilityOptions,omitempty"` + ConversationOptions []*AIHomeState_AIHomeOption `protobuf:"bytes,3,rep,name=conversationOptions" json:"conversationOptions,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *AIHomeState) Reset() { + *x = AIHomeState{} + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[22] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *AIHomeState) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AIHomeState) ProtoMessage() {} + +func (x *AIHomeState) ProtoReflect() protoreflect.Message { + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[22] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AIHomeState.ProtoReflect.Descriptor instead. +func (*AIHomeState) Descriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{22} +} + +func (x *AIHomeState) GetLastFetchTime() int64 { + if x != nil && x.LastFetchTime != nil { + return *x.LastFetchTime + } + return 0 +} + +func (x *AIHomeState) GetCapabilityOptions() []*AIHomeState_AIHomeOption { + if x != nil { + return x.CapabilityOptions + } + return nil +} + +func (x *AIHomeState) GetConversationOptions() []*AIHomeState_AIHomeOption { + if x != nil { + return x.ConversationOptions + } + return nil +} + +type BotInfrastructureDiagnostics struct { + state protoimpl.MessageState `protogen:"open.v1"` + BotBackend *BotInfrastructureDiagnostics_BotBackend `protobuf:"varint,1,opt,name=botBackend,enum=WAWebProtobufsAICommon.BotInfrastructureDiagnostics_BotBackend" json:"botBackend,omitempty"` + ToolsUsed []string `protobuf:"bytes,2,rep,name=toolsUsed" json:"toolsUsed,omitempty"` + IsThinking *bool `protobuf:"varint,3,opt,name=isThinking" json:"isThinking,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BotInfrastructureDiagnostics) Reset() { + *x = BotInfrastructureDiagnostics{} + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[23] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BotInfrastructureDiagnostics) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BotInfrastructureDiagnostics) ProtoMessage() {} + +func (x *BotInfrastructureDiagnostics) ProtoReflect() protoreflect.Message { + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[23] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BotInfrastructureDiagnostics.ProtoReflect.Descriptor instead. +func (*BotInfrastructureDiagnostics) Descriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{23} +} + +func (x *BotInfrastructureDiagnostics) GetBotBackend() BotInfrastructureDiagnostics_BotBackend { + if x != nil && x.BotBackend != nil { + return *x.BotBackend + } + return BotInfrastructureDiagnostics_AAPI +} + +func (x *BotInfrastructureDiagnostics) GetToolsUsed() []string { + if x != nil { + return x.ToolsUsed + } + return nil +} + +func (x *BotInfrastructureDiagnostics) GetIsThinking() bool { + if x != nil && x.IsThinking != nil { + return *x.IsThinking + } + return false +} + +type BotSuggestedPromptMetadata struct { + state protoimpl.MessageState `protogen:"open.v1"` + SuggestedPrompts []string `protobuf:"bytes,1,rep,name=suggestedPrompts" json:"suggestedPrompts,omitempty"` + SelectedPromptIndex *uint32 `protobuf:"varint,2,opt,name=selectedPromptIndex" json:"selectedPromptIndex,omitempty"` + PromptSuggestions *BotPromptSuggestions `protobuf:"bytes,3,opt,name=promptSuggestions" json:"promptSuggestions,omitempty"` + SelectedPromptID *string `protobuf:"bytes,4,opt,name=selectedPromptID" json:"selectedPromptID,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BotSuggestedPromptMetadata) Reset() { + *x = BotSuggestedPromptMetadata{} + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[24] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BotSuggestedPromptMetadata) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BotSuggestedPromptMetadata) ProtoMessage() {} + +func (x *BotSuggestedPromptMetadata) ProtoReflect() protoreflect.Message { + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[24] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BotSuggestedPromptMetadata.ProtoReflect.Descriptor instead. +func (*BotSuggestedPromptMetadata) Descriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{24} +} + +func (x *BotSuggestedPromptMetadata) GetSuggestedPrompts() []string { + if x != nil { + return x.SuggestedPrompts + } + return nil +} + +func (x *BotSuggestedPromptMetadata) GetSelectedPromptIndex() uint32 { + if x != nil && x.SelectedPromptIndex != nil { + return *x.SelectedPromptIndex + } + return 0 +} + +func (x *BotSuggestedPromptMetadata) GetPromptSuggestions() *BotPromptSuggestions { + if x != nil { + return x.PromptSuggestions + } + return nil +} + +func (x *BotSuggestedPromptMetadata) GetSelectedPromptID() string { + if x != nil && x.SelectedPromptID != nil { + return *x.SelectedPromptID + } + return "" +} + +type BotPromptSuggestions struct { + state protoimpl.MessageState `protogen:"open.v1"` + Suggestions []*BotPromptSuggestion `protobuf:"bytes,1,rep,name=suggestions" json:"suggestions,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BotPromptSuggestions) Reset() { + *x = BotPromptSuggestions{} + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[25] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BotPromptSuggestions) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BotPromptSuggestions) ProtoMessage() {} + +func (x *BotPromptSuggestions) ProtoReflect() protoreflect.Message { + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[25] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BotPromptSuggestions.ProtoReflect.Descriptor instead. +func (*BotPromptSuggestions) Descriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{25} +} + +func (x *BotPromptSuggestions) GetSuggestions() []*BotPromptSuggestion { + if x != nil { + return x.Suggestions + } + return nil +} + +type BotPromptSuggestion struct { + state protoimpl.MessageState `protogen:"open.v1"` + Prompt *string `protobuf:"bytes,1,opt,name=prompt" json:"prompt,omitempty"` + PromptID *string `protobuf:"bytes,2,opt,name=promptID" json:"promptID,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BotPromptSuggestion) Reset() { + *x = BotPromptSuggestion{} + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[26] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BotPromptSuggestion) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BotPromptSuggestion) ProtoMessage() {} + +func (x *BotPromptSuggestion) ProtoReflect() protoreflect.Message { + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[26] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BotPromptSuggestion.ProtoReflect.Descriptor instead. +func (*BotPromptSuggestion) Descriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{26} +} + +func (x *BotPromptSuggestion) GetPrompt() string { + if x != nil && x.Prompt != nil { + return *x.Prompt + } + return "" +} + +func (x *BotPromptSuggestion) GetPromptID() string { + if x != nil && x.PromptID != nil { + return *x.PromptID + } + return "" +} + +type BotLinkedAccountsMetadata struct { + state protoimpl.MessageState `protogen:"open.v1"` + Accounts []*BotLinkedAccount `protobuf:"bytes,1,rep,name=accounts" json:"accounts,omitempty"` + AcAuthTokens []byte `protobuf:"bytes,2,opt,name=acAuthTokens" json:"acAuthTokens,omitempty"` + AcErrorCode *int32 `protobuf:"varint,3,opt,name=acErrorCode" json:"acErrorCode,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BotLinkedAccountsMetadata) Reset() { + *x = BotLinkedAccountsMetadata{} + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[27] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BotLinkedAccountsMetadata) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BotLinkedAccountsMetadata) ProtoMessage() {} + +func (x *BotLinkedAccountsMetadata) ProtoReflect() protoreflect.Message { + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[27] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BotLinkedAccountsMetadata.ProtoReflect.Descriptor instead. +func (*BotLinkedAccountsMetadata) Descriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{27} +} + +func (x *BotLinkedAccountsMetadata) GetAccounts() []*BotLinkedAccount { + if x != nil { + return x.Accounts + } + return nil +} + +func (x *BotLinkedAccountsMetadata) GetAcAuthTokens() []byte { + if x != nil { + return x.AcAuthTokens + } + return nil +} + +func (x *BotLinkedAccountsMetadata) GetAcErrorCode() int32 { + if x != nil && x.AcErrorCode != nil { + return *x.AcErrorCode + } + return 0 +} + +type BotMemoryMetadata struct { + state protoimpl.MessageState `protogen:"open.v1"` + AddedFacts []*BotMemoryFact `protobuf:"bytes,1,rep,name=addedFacts" json:"addedFacts,omitempty"` + RemovedFacts []*BotMemoryFact `protobuf:"bytes,2,rep,name=removedFacts" json:"removedFacts,omitempty"` + Disclaimer *string `protobuf:"bytes,3,opt,name=disclaimer" json:"disclaimer,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BotMemoryMetadata) Reset() { + *x = BotMemoryMetadata{} + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[28] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BotMemoryMetadata) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BotMemoryMetadata) ProtoMessage() {} + +func (x *BotMemoryMetadata) ProtoReflect() protoreflect.Message { + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[28] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BotMemoryMetadata.ProtoReflect.Descriptor instead. +func (*BotMemoryMetadata) Descriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{28} +} + +func (x *BotMemoryMetadata) GetAddedFacts() []*BotMemoryFact { + if x != nil { + return x.AddedFacts + } + return nil +} + +func (x *BotMemoryMetadata) GetRemovedFacts() []*BotMemoryFact { + if x != nil { + return x.RemovedFacts + } + return nil +} + +func (x *BotMemoryMetadata) GetDisclaimer() string { + if x != nil && x.Disclaimer != nil { + return *x.Disclaimer + } + return "" +} + +type BotMemoryFact struct { + state protoimpl.MessageState `protogen:"open.v1"` + Fact *string `protobuf:"bytes,1,opt,name=fact" json:"fact,omitempty"` + FactID *string `protobuf:"bytes,2,opt,name=factID" json:"factID,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BotMemoryFact) Reset() { + *x = BotMemoryFact{} + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[29] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BotMemoryFact) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BotMemoryFact) ProtoMessage() {} + +func (x *BotMemoryFact) ProtoReflect() protoreflect.Message { + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[29] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BotMemoryFact.ProtoReflect.Descriptor instead. +func (*BotMemoryFact) Descriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{29} +} + +func (x *BotMemoryFact) GetFact() string { + if x != nil && x.Fact != nil { + return *x.Fact + } + return "" +} + +func (x *BotMemoryFact) GetFactID() string { + if x != nil && x.FactID != nil { + return *x.FactID + } + return "" +} + +type BotSignatureVerificationMetadata struct { + state protoimpl.MessageState `protogen:"open.v1"` + Proofs []*BotSignatureVerificationUseCaseProof `protobuf:"bytes,1,rep,name=proofs" json:"proofs,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BotSignatureVerificationMetadata) Reset() { + *x = BotSignatureVerificationMetadata{} + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[30] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BotSignatureVerificationMetadata) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BotSignatureVerificationMetadata) ProtoMessage() {} + +func (x *BotSignatureVerificationMetadata) ProtoReflect() protoreflect.Message { + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[30] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BotSignatureVerificationMetadata.ProtoReflect.Descriptor instead. +func (*BotSignatureVerificationMetadata) Descriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{30} +} + +func (x *BotSignatureVerificationMetadata) GetProofs() []*BotSignatureVerificationUseCaseProof { + if x != nil { + return x.Proofs + } + return nil +} + +type BotRenderingMetadata struct { + state protoimpl.MessageState `protogen:"open.v1"` + Keywords []*BotRenderingMetadata_Keyword `protobuf:"bytes,1,rep,name=keywords" json:"keywords,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BotRenderingMetadata) Reset() { + *x = BotRenderingMetadata{} + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[31] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BotRenderingMetadata) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BotRenderingMetadata) ProtoMessage() {} + +func (x *BotRenderingMetadata) ProtoReflect() protoreflect.Message { + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[31] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BotRenderingMetadata.ProtoReflect.Descriptor instead. +func (*BotRenderingMetadata) Descriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{31} +} + +func (x *BotRenderingMetadata) GetKeywords() []*BotRenderingMetadata_Keyword { + if x != nil { + return x.Keywords + } + return nil +} + +type BotMetricsMetadata struct { + state protoimpl.MessageState `protogen:"open.v1"` + DestinationID *string `protobuf:"bytes,1,opt,name=destinationID" json:"destinationID,omitempty"` + DestinationEntryPoint *BotMetricsEntryPoint `protobuf:"varint,2,opt,name=destinationEntryPoint,enum=WAWebProtobufsAICommon.BotMetricsEntryPoint" json:"destinationEntryPoint,omitempty"` + ThreadOrigin *BotMetricsThreadEntryPoint `protobuf:"varint,3,opt,name=threadOrigin,enum=WAWebProtobufsAICommon.BotMetricsThreadEntryPoint" json:"threadOrigin,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BotMetricsMetadata) Reset() { + *x = BotMetricsMetadata{} + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[32] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BotMetricsMetadata) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BotMetricsMetadata) ProtoMessage() {} + +func (x *BotMetricsMetadata) ProtoReflect() protoreflect.Message { + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[32] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BotMetricsMetadata.ProtoReflect.Descriptor instead. +func (*BotMetricsMetadata) Descriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{32} +} + +func (x *BotMetricsMetadata) GetDestinationID() string { + if x != nil && x.DestinationID != nil { + return *x.DestinationID + } + return "" +} + +func (x *BotMetricsMetadata) GetDestinationEntryPoint() BotMetricsEntryPoint { + if x != nil && x.DestinationEntryPoint != nil { + return *x.DestinationEntryPoint + } + return BotMetricsEntryPoint_UNDEFINED_ENTRY_POINT +} + +func (x *BotMetricsMetadata) GetThreadOrigin() BotMetricsThreadEntryPoint { + if x != nil && x.ThreadOrigin != nil { + return *x.ThreadOrigin + } + return BotMetricsThreadEntryPoint_AI_TAB_THREAD +} + +type BotSessionMetadata struct { + state protoimpl.MessageState `protogen:"open.v1"` + SessionID *string `protobuf:"bytes,1,opt,name=sessionID" json:"sessionID,omitempty"` + SessionSource *BotSessionSource `protobuf:"varint,2,opt,name=sessionSource,enum=WAWebProtobufsAICommon.BotSessionSource" json:"sessionSource,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BotSessionMetadata) Reset() { + *x = BotSessionMetadata{} + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[33] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BotSessionMetadata) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BotSessionMetadata) ProtoMessage() {} + +func (x *BotSessionMetadata) ProtoReflect() protoreflect.Message { + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[33] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BotSessionMetadata.ProtoReflect.Descriptor instead. +func (*BotSessionMetadata) Descriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{33} +} + +func (x *BotSessionMetadata) GetSessionID() string { + if x != nil && x.SessionID != nil { + return *x.SessionID + } + return "" +} + +func (x *BotSessionMetadata) GetSessionSource() BotSessionSource { + if x != nil && x.SessionSource != nil { + return *x.SessionSource + } + return BotSessionSource_NONE +} + +type BotMemuMetadata struct { + state protoimpl.MessageState `protogen:"open.v1"` + FaceImages []*BotMediaMetadata `protobuf:"bytes,1,rep,name=faceImages" json:"faceImages,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BotMemuMetadata) Reset() { + *x = BotMemuMetadata{} + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[34] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BotMemuMetadata) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BotMemuMetadata) ProtoMessage() {} + +func (x *BotMemuMetadata) ProtoReflect() protoreflect.Message { + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[34] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BotMemuMetadata.ProtoReflect.Descriptor instead. +func (*BotMemuMetadata) Descriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{34} +} + +func (x *BotMemuMetadata) GetFaceImages() []*BotMediaMetadata { + if x != nil { + return x.FaceImages + } + return nil +} + +type InThreadSurveyMetadata struct { + state protoimpl.MessageState `protogen:"open.v1"` + TessaSessionID *string `protobuf:"bytes,1,opt,name=tessaSessionID" json:"tessaSessionID,omitempty"` + SimonSessionID *string `protobuf:"bytes,2,opt,name=simonSessionID" json:"simonSessionID,omitempty"` + SimonSurveyID *string `protobuf:"bytes,3,opt,name=simonSurveyID" json:"simonSurveyID,omitempty"` + TessaRootID *string `protobuf:"bytes,4,opt,name=tessaRootID" json:"tessaRootID,omitempty"` + RequestID *string `protobuf:"bytes,5,opt,name=requestID" json:"requestID,omitempty"` + TessaEvent *string `protobuf:"bytes,6,opt,name=tessaEvent" json:"tessaEvent,omitempty"` + InvitationHeaderText *string `protobuf:"bytes,7,opt,name=invitationHeaderText" json:"invitationHeaderText,omitempty"` + InvitationBodyText *string `protobuf:"bytes,8,opt,name=invitationBodyText" json:"invitationBodyText,omitempty"` + InvitationCtaText *string `protobuf:"bytes,9,opt,name=invitationCtaText" json:"invitationCtaText,omitempty"` + InvitationCtaURL *string `protobuf:"bytes,10,opt,name=invitationCtaURL" json:"invitationCtaURL,omitempty"` + SurveyTitle *string `protobuf:"bytes,11,opt,name=surveyTitle" json:"surveyTitle,omitempty"` + Questions []*InThreadSurveyMetadata_InThreadSurveyQuestion `protobuf:"bytes,12,rep,name=questions" json:"questions,omitempty"` + SurveyContinueButtonText *string `protobuf:"bytes,13,opt,name=surveyContinueButtonText" json:"surveyContinueButtonText,omitempty"` + SurveySubmitButtonText *string `protobuf:"bytes,14,opt,name=surveySubmitButtonText" json:"surveySubmitButtonText,omitempty"` + PrivacyStatementFull *string `protobuf:"bytes,15,opt,name=privacyStatementFull" json:"privacyStatementFull,omitempty"` + PrivacyStatementParts []*InThreadSurveyMetadata_InThreadSurveyPrivacyStatementPart `protobuf:"bytes,16,rep,name=privacyStatementParts" json:"privacyStatementParts,omitempty"` + FeedbackToastText *string `protobuf:"bytes,17,opt,name=feedbackToastText" json:"feedbackToastText,omitempty"` + StartQuestionIndex *int32 `protobuf:"varint,18,opt,name=startQuestionIndex" json:"startQuestionIndex,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *InThreadSurveyMetadata) Reset() { + *x = InThreadSurveyMetadata{} + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[35] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *InThreadSurveyMetadata) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*InThreadSurveyMetadata) ProtoMessage() {} + +func (x *InThreadSurveyMetadata) ProtoReflect() protoreflect.Message { + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[35] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use InThreadSurveyMetadata.ProtoReflect.Descriptor instead. +func (*InThreadSurveyMetadata) Descriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{35} +} + +func (x *InThreadSurveyMetadata) GetTessaSessionID() string { + if x != nil && x.TessaSessionID != nil { + return *x.TessaSessionID + } + return "" +} + +func (x *InThreadSurveyMetadata) GetSimonSessionID() string { + if x != nil && x.SimonSessionID != nil { + return *x.SimonSessionID + } + return "" +} + +func (x *InThreadSurveyMetadata) GetSimonSurveyID() string { + if x != nil && x.SimonSurveyID != nil { + return *x.SimonSurveyID + } + return "" +} + +func (x *InThreadSurveyMetadata) GetTessaRootID() string { + if x != nil && x.TessaRootID != nil { + return *x.TessaRootID + } + return "" +} + +func (x *InThreadSurveyMetadata) GetRequestID() string { + if x != nil && x.RequestID != nil { + return *x.RequestID + } + return "" +} + +func (x *InThreadSurveyMetadata) GetTessaEvent() string { + if x != nil && x.TessaEvent != nil { + return *x.TessaEvent + } + return "" +} + +func (x *InThreadSurveyMetadata) GetInvitationHeaderText() string { + if x != nil && x.InvitationHeaderText != nil { + return *x.InvitationHeaderText + } + return "" +} + +func (x *InThreadSurveyMetadata) GetInvitationBodyText() string { + if x != nil && x.InvitationBodyText != nil { + return *x.InvitationBodyText + } + return "" +} + +func (x *InThreadSurveyMetadata) GetInvitationCtaText() string { + if x != nil && x.InvitationCtaText != nil { + return *x.InvitationCtaText + } + return "" +} + +func (x *InThreadSurveyMetadata) GetInvitationCtaURL() string { + if x != nil && x.InvitationCtaURL != nil { + return *x.InvitationCtaURL + } + return "" +} + +func (x *InThreadSurveyMetadata) GetSurveyTitle() string { + if x != nil && x.SurveyTitle != nil { + return *x.SurveyTitle + } + return "" +} + +func (x *InThreadSurveyMetadata) GetQuestions() []*InThreadSurveyMetadata_InThreadSurveyQuestion { + if x != nil { + return x.Questions + } + return nil +} + +func (x *InThreadSurveyMetadata) GetSurveyContinueButtonText() string { + if x != nil && x.SurveyContinueButtonText != nil { + return *x.SurveyContinueButtonText + } + return "" +} + +func (x *InThreadSurveyMetadata) GetSurveySubmitButtonText() string { + if x != nil && x.SurveySubmitButtonText != nil { + return *x.SurveySubmitButtonText + } + return "" +} + +func (x *InThreadSurveyMetadata) GetPrivacyStatementFull() string { + if x != nil && x.PrivacyStatementFull != nil { + return *x.PrivacyStatementFull + } + return "" +} + +func (x *InThreadSurveyMetadata) GetPrivacyStatementParts() []*InThreadSurveyMetadata_InThreadSurveyPrivacyStatementPart { + if x != nil { + return x.PrivacyStatementParts + } + return nil +} + +func (x *InThreadSurveyMetadata) GetFeedbackToastText() string { + if x != nil && x.FeedbackToastText != nil { + return *x.FeedbackToastText + } + return "" +} + +func (x *InThreadSurveyMetadata) GetStartQuestionIndex() int32 { + if x != nil && x.StartQuestionIndex != nil { + return *x.StartQuestionIndex + } + return 0 +} + +type BotMessageOriginMetadata struct { + state protoimpl.MessageState `protogen:"open.v1"` + Origins []*BotMessageOrigin `protobuf:"bytes,1,rep,name=origins" json:"origins,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BotMessageOriginMetadata) Reset() { + *x = BotMessageOriginMetadata{} + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[36] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BotMessageOriginMetadata) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BotMessageOriginMetadata) ProtoMessage() {} + +func (x *BotMessageOriginMetadata) ProtoReflect() protoreflect.Message { + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[36] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BotMessageOriginMetadata.ProtoReflect.Descriptor instead. +func (*BotMessageOriginMetadata) Descriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{36} +} + +func (x *BotMessageOriginMetadata) GetOrigins() []*BotMessageOrigin { + if x != nil { + return x.Origins + } + return nil +} + +type BotUnifiedResponseMutation struct { + state protoimpl.MessageState `protogen:"open.v1"` + SbsMetadata *BotUnifiedResponseMutation_SideBySideMetadata `protobuf:"bytes,1,opt,name=sbsMetadata" json:"sbsMetadata,omitempty"` + MediaDetailsMetadataList []*BotUnifiedResponseMutation_MediaDetailsMetadata `protobuf:"bytes,2,rep,name=mediaDetailsMetadataList" json:"mediaDetailsMetadataList,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BotUnifiedResponseMutation) Reset() { + *x = BotUnifiedResponseMutation{} + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[37] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BotUnifiedResponseMutation) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BotUnifiedResponseMutation) ProtoMessage() {} + +func (x *BotUnifiedResponseMutation) ProtoReflect() protoreflect.Message { + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[37] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BotUnifiedResponseMutation.ProtoReflect.Descriptor instead. +func (*BotUnifiedResponseMutation) Descriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{37} +} + +func (x *BotUnifiedResponseMutation) GetSbsMetadata() *BotUnifiedResponseMutation_SideBySideMetadata { + if x != nil { + return x.SbsMetadata + } + return nil +} + +func (x *BotUnifiedResponseMutation) GetMediaDetailsMetadataList() []*BotUnifiedResponseMutation_MediaDetailsMetadata { + if x != nil { + return x.MediaDetailsMetadataList + } + return nil +} + +type AIMediaCollectionMetadata struct { + state protoimpl.MessageState `protogen:"open.v1"` + CollectionID *string `protobuf:"bytes,1,opt,name=collectionID" json:"collectionID,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *AIMediaCollectionMetadata) Reset() { + *x = AIMediaCollectionMetadata{} + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[38] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *AIMediaCollectionMetadata) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AIMediaCollectionMetadata) ProtoMessage() {} + +func (x *AIMediaCollectionMetadata) ProtoReflect() protoreflect.Message { + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[38] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AIMediaCollectionMetadata.ProtoReflect.Descriptor instead. +func (*AIMediaCollectionMetadata) Descriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{38} +} + +func (x *AIMediaCollectionMetadata) GetCollectionID() string { + if x != nil && x.CollectionID != nil { + return *x.CollectionID + } + return "" +} + +type AIMediaCollectionMessage struct { + state protoimpl.MessageState `protogen:"open.v1"` + CollectionID *string `protobuf:"bytes,1,opt,name=collectionID" json:"collectionID,omitempty"` + ExpectedMediaCount *uint32 `protobuf:"varint,2,opt,name=expectedMediaCount" json:"expectedMediaCount,omitempty"` + HasGlobalCaption *bool `protobuf:"varint,3,opt,name=hasGlobalCaption" json:"hasGlobalCaption,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *AIMediaCollectionMessage) Reset() { + *x = AIMediaCollectionMessage{} + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[39] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *AIMediaCollectionMessage) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AIMediaCollectionMessage) ProtoMessage() {} + +func (x *AIMediaCollectionMessage) ProtoReflect() protoreflect.Message { + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[39] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AIMediaCollectionMessage.ProtoReflect.Descriptor instead. +func (*AIMediaCollectionMessage) Descriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{39} +} + +func (x *AIMediaCollectionMessage) GetCollectionID() string { + if x != nil && x.CollectionID != nil { + return *x.CollectionID + } + return "" +} + +func (x *AIMediaCollectionMessage) GetExpectedMediaCount() uint32 { + if x != nil && x.ExpectedMediaCount != nil { + return *x.ExpectedMediaCount + } + return 0 +} + +func (x *AIMediaCollectionMessage) GetHasGlobalCaption() bool { + if x != nil && x.HasGlobalCaption != nil { + return *x.HasGlobalCaption + } + return false +} + +type BotMetadata struct { + state protoimpl.MessageState `protogen:"open.v1"` + PersonaID *string `protobuf:"bytes,2,opt,name=personaID" json:"personaID,omitempty"` + PluginMetadata *BotPluginMetadata `protobuf:"bytes,3,opt,name=pluginMetadata" json:"pluginMetadata,omitempty"` + SuggestedPromptMetadata *BotSuggestedPromptMetadata `protobuf:"bytes,4,opt,name=suggestedPromptMetadata" json:"suggestedPromptMetadata,omitempty"` + InvokerJID *string `protobuf:"bytes,5,opt,name=invokerJID" json:"invokerJID,omitempty"` + SessionMetadata *BotSessionMetadata `protobuf:"bytes,6,opt,name=sessionMetadata" json:"sessionMetadata,omitempty"` + MemuMetadata *BotMemuMetadata `protobuf:"bytes,7,opt,name=memuMetadata" json:"memuMetadata,omitempty"` + Timezone *string `protobuf:"bytes,8,opt,name=timezone" json:"timezone,omitempty"` + ReminderMetadata *BotReminderMetadata `protobuf:"bytes,9,opt,name=reminderMetadata" json:"reminderMetadata,omitempty"` + ModelMetadata *BotModelMetadata `protobuf:"bytes,10,opt,name=modelMetadata" json:"modelMetadata,omitempty"` + MessageDisclaimerText *string `protobuf:"bytes,11,opt,name=messageDisclaimerText" json:"messageDisclaimerText,omitempty"` + ProgressIndicatorMetadata *BotProgressIndicatorMetadata `protobuf:"bytes,12,opt,name=progressIndicatorMetadata" json:"progressIndicatorMetadata,omitempty"` + CapabilityMetadata *BotCapabilityMetadata `protobuf:"bytes,13,opt,name=capabilityMetadata" json:"capabilityMetadata,omitempty"` + ImagineMetadata *BotImagineMetadata `protobuf:"bytes,14,opt,name=imagineMetadata" json:"imagineMetadata,omitempty"` + MemoryMetadata *BotMemoryMetadata `protobuf:"bytes,15,opt,name=memoryMetadata" json:"memoryMetadata,omitempty"` + RenderingMetadata *BotRenderingMetadata `protobuf:"bytes,16,opt,name=renderingMetadata" json:"renderingMetadata,omitempty"` + BotMetricsMetadata *BotMetricsMetadata `protobuf:"bytes,17,opt,name=botMetricsMetadata" json:"botMetricsMetadata,omitempty"` + BotLinkedAccountsMetadata *BotLinkedAccountsMetadata `protobuf:"bytes,18,opt,name=botLinkedAccountsMetadata" json:"botLinkedAccountsMetadata,omitempty"` + RichResponseSourcesMetadata *BotSourcesMetadata `protobuf:"bytes,19,opt,name=richResponseSourcesMetadata" json:"richResponseSourcesMetadata,omitempty"` + AiConversationContext []byte `protobuf:"bytes,20,opt,name=aiConversationContext" json:"aiConversationContext,omitempty"` + BotPromotionMessageMetadata *BotPromotionMessageMetadata `protobuf:"bytes,21,opt,name=botPromotionMessageMetadata" json:"botPromotionMessageMetadata,omitempty"` + BotModeSelectionMetadata *BotModeSelectionMetadata `protobuf:"bytes,22,opt,name=botModeSelectionMetadata" json:"botModeSelectionMetadata,omitempty"` + BotQuotaMetadata *BotQuotaMetadata `protobuf:"bytes,23,opt,name=botQuotaMetadata" json:"botQuotaMetadata,omitempty"` + BotAgeCollectionMetadata *BotAgeCollectionMetadata `protobuf:"bytes,24,opt,name=botAgeCollectionMetadata" json:"botAgeCollectionMetadata,omitempty"` + ConversationStarterPromptID *string `protobuf:"bytes,25,opt,name=conversationStarterPromptID" json:"conversationStarterPromptID,omitempty"` + BotResponseID *string `protobuf:"bytes,26,opt,name=botResponseID" json:"botResponseID,omitempty"` + VerificationMetadata *BotSignatureVerificationMetadata `protobuf:"bytes,27,opt,name=verificationMetadata" json:"verificationMetadata,omitempty"` + UnifiedResponseMutation *BotUnifiedResponseMutation `protobuf:"bytes,28,opt,name=unifiedResponseMutation" json:"unifiedResponseMutation,omitempty"` + BotMessageOriginMetadata *BotMessageOriginMetadata `protobuf:"bytes,29,opt,name=botMessageOriginMetadata" json:"botMessageOriginMetadata,omitempty"` + InThreadSurveyMetadata *InThreadSurveyMetadata `protobuf:"bytes,30,opt,name=inThreadSurveyMetadata" json:"inThreadSurveyMetadata,omitempty"` + BotThreadInfo *AIThreadInfo `protobuf:"bytes,31,opt,name=botThreadInfo" json:"botThreadInfo,omitempty"` + RegenerateMetadata *AIRegenerateMetadata `protobuf:"bytes,32,opt,name=regenerateMetadata" json:"regenerateMetadata,omitempty"` + SessionTransparencyMetadata *SessionTransparencyMetadata `protobuf:"bytes,33,opt,name=sessionTransparencyMetadata" json:"sessionTransparencyMetadata,omitempty"` + BotDocumentMessageMetadata *BotDocumentMessageMetadata `protobuf:"bytes,34,opt,name=botDocumentMessageMetadata" json:"botDocumentMessageMetadata,omitempty"` + BotGroupMetadata *BotGroupMetadata `protobuf:"bytes,35,opt,name=botGroupMetadata" json:"botGroupMetadata,omitempty"` + BotRenderingConfigMetadata *BotRenderingConfigMetadata `protobuf:"bytes,36,opt,name=botRenderingConfigMetadata" json:"botRenderingConfigMetadata,omitempty"` + BotInfrastructureDiagnostics *BotInfrastructureDiagnostics `protobuf:"bytes,37,opt,name=botInfrastructureDiagnostics" json:"botInfrastructureDiagnostics,omitempty"` + AiMediaCollectionMetadata *AIMediaCollectionMetadata `protobuf:"bytes,38,opt,name=aiMediaCollectionMetadata" json:"aiMediaCollectionMetadata,omitempty"` + InternalMetadata []byte `protobuf:"bytes,999,opt,name=internalMetadata" json:"internalMetadata,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BotMetadata) Reset() { + *x = BotMetadata{} + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[40] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BotMetadata) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BotMetadata) ProtoMessage() {} + +func (x *BotMetadata) ProtoReflect() protoreflect.Message { + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[40] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BotMetadata.ProtoReflect.Descriptor instead. +func (*BotMetadata) Descriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{40} +} + +func (x *BotMetadata) GetPersonaID() string { + if x != nil && x.PersonaID != nil { + return *x.PersonaID + } + return "" +} + +func (x *BotMetadata) GetPluginMetadata() *BotPluginMetadata { + if x != nil { + return x.PluginMetadata + } + return nil +} + +func (x *BotMetadata) GetSuggestedPromptMetadata() *BotSuggestedPromptMetadata { + if x != nil { + return x.SuggestedPromptMetadata + } + return nil +} + +func (x *BotMetadata) GetInvokerJID() string { + if x != nil && x.InvokerJID != nil { + return *x.InvokerJID + } + return "" +} + +func (x *BotMetadata) GetSessionMetadata() *BotSessionMetadata { + if x != nil { + return x.SessionMetadata + } + return nil +} + +func (x *BotMetadata) GetMemuMetadata() *BotMemuMetadata { + if x != nil { + return x.MemuMetadata + } + return nil +} + +func (x *BotMetadata) GetTimezone() string { + if x != nil && x.Timezone != nil { + return *x.Timezone + } + return "" +} + +func (x *BotMetadata) GetReminderMetadata() *BotReminderMetadata { + if x != nil { + return x.ReminderMetadata + } + return nil +} + +func (x *BotMetadata) GetModelMetadata() *BotModelMetadata { + if x != nil { + return x.ModelMetadata + } + return nil +} + +func (x *BotMetadata) GetMessageDisclaimerText() string { + if x != nil && x.MessageDisclaimerText != nil { + return *x.MessageDisclaimerText + } + return "" +} + +func (x *BotMetadata) GetProgressIndicatorMetadata() *BotProgressIndicatorMetadata { + if x != nil { + return x.ProgressIndicatorMetadata + } + return nil +} + +func (x *BotMetadata) GetCapabilityMetadata() *BotCapabilityMetadata { + if x != nil { + return x.CapabilityMetadata + } + return nil +} + +func (x *BotMetadata) GetImagineMetadata() *BotImagineMetadata { + if x != nil { + return x.ImagineMetadata + } + return nil +} + +func (x *BotMetadata) GetMemoryMetadata() *BotMemoryMetadata { + if x != nil { + return x.MemoryMetadata + } + return nil +} + +func (x *BotMetadata) GetRenderingMetadata() *BotRenderingMetadata { + if x != nil { + return x.RenderingMetadata + } + return nil +} + +func (x *BotMetadata) GetBotMetricsMetadata() *BotMetricsMetadata { + if x != nil { + return x.BotMetricsMetadata + } + return nil +} + +func (x *BotMetadata) GetBotLinkedAccountsMetadata() *BotLinkedAccountsMetadata { + if x != nil { + return x.BotLinkedAccountsMetadata + } + return nil +} + +func (x *BotMetadata) GetRichResponseSourcesMetadata() *BotSourcesMetadata { + if x != nil { + return x.RichResponseSourcesMetadata + } + return nil +} + +func (x *BotMetadata) GetAiConversationContext() []byte { + if x != nil { + return x.AiConversationContext + } + return nil +} + +func (x *BotMetadata) GetBotPromotionMessageMetadata() *BotPromotionMessageMetadata { + if x != nil { + return x.BotPromotionMessageMetadata + } + return nil +} + +func (x *BotMetadata) GetBotModeSelectionMetadata() *BotModeSelectionMetadata { + if x != nil { + return x.BotModeSelectionMetadata + } + return nil +} + +func (x *BotMetadata) GetBotQuotaMetadata() *BotQuotaMetadata { + if x != nil { + return x.BotQuotaMetadata + } + return nil +} + +func (x *BotMetadata) GetBotAgeCollectionMetadata() *BotAgeCollectionMetadata { + if x != nil { + return x.BotAgeCollectionMetadata + } + return nil +} + +func (x *BotMetadata) GetConversationStarterPromptID() string { + if x != nil && x.ConversationStarterPromptID != nil { + return *x.ConversationStarterPromptID + } + return "" +} + +func (x *BotMetadata) GetBotResponseID() string { + if x != nil && x.BotResponseID != nil { + return *x.BotResponseID + } + return "" +} + +func (x *BotMetadata) GetVerificationMetadata() *BotSignatureVerificationMetadata { + if x != nil { + return x.VerificationMetadata + } + return nil +} + +func (x *BotMetadata) GetUnifiedResponseMutation() *BotUnifiedResponseMutation { + if x != nil { + return x.UnifiedResponseMutation + } + return nil +} + +func (x *BotMetadata) GetBotMessageOriginMetadata() *BotMessageOriginMetadata { + if x != nil { + return x.BotMessageOriginMetadata + } + return nil +} + +func (x *BotMetadata) GetInThreadSurveyMetadata() *InThreadSurveyMetadata { + if x != nil { + return x.InThreadSurveyMetadata + } + return nil +} + +func (x *BotMetadata) GetBotThreadInfo() *AIThreadInfo { + if x != nil { + return x.BotThreadInfo + } + return nil +} + +func (x *BotMetadata) GetRegenerateMetadata() *AIRegenerateMetadata { + if x != nil { + return x.RegenerateMetadata + } + return nil +} + +func (x *BotMetadata) GetSessionTransparencyMetadata() *SessionTransparencyMetadata { + if x != nil { + return x.SessionTransparencyMetadata + } + return nil +} + +func (x *BotMetadata) GetBotDocumentMessageMetadata() *BotDocumentMessageMetadata { + if x != nil { + return x.BotDocumentMessageMetadata + } + return nil +} + +func (x *BotMetadata) GetBotGroupMetadata() *BotGroupMetadata { + if x != nil { + return x.BotGroupMetadata + } + return nil +} + +func (x *BotMetadata) GetBotRenderingConfigMetadata() *BotRenderingConfigMetadata { + if x != nil { + return x.BotRenderingConfigMetadata + } + return nil +} + +func (x *BotMetadata) GetBotInfrastructureDiagnostics() *BotInfrastructureDiagnostics { + if x != nil { + return x.BotInfrastructureDiagnostics + } + return nil +} + +func (x *BotMetadata) GetAiMediaCollectionMetadata() *AIMediaCollectionMetadata { + if x != nil { + return x.AiMediaCollectionMetadata + } + return nil +} + +func (x *BotMetadata) GetInternalMetadata() []byte { + if x != nil { + return x.InternalMetadata + } + return nil +} + +type BotGroupMetadata struct { + state protoimpl.MessageState `protogen:"open.v1"` + ParticipantsMetadata []*BotGroupParticipantMetadata `protobuf:"bytes,1,rep,name=participantsMetadata" json:"participantsMetadata,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BotGroupMetadata) Reset() { + *x = BotGroupMetadata{} + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[41] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BotGroupMetadata) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BotGroupMetadata) ProtoMessage() {} + +func (x *BotGroupMetadata) ProtoReflect() protoreflect.Message { + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[41] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BotGroupMetadata.ProtoReflect.Descriptor instead. +func (*BotGroupMetadata) Descriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{41} +} + +func (x *BotGroupMetadata) GetParticipantsMetadata() []*BotGroupParticipantMetadata { + if x != nil { + return x.ParticipantsMetadata + } + return nil +} + +type BotRenderingConfigMetadata struct { + state protoimpl.MessageState `protogen:"open.v1"` + BloksVersioningID *string `protobuf:"bytes,1,opt,name=bloksVersioningID" json:"bloksVersioningID,omitempty"` + PixelDensity *float64 `protobuf:"fixed64,2,opt,name=pixelDensity" json:"pixelDensity,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BotRenderingConfigMetadata) Reset() { + *x = BotRenderingConfigMetadata{} + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[42] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BotRenderingConfigMetadata) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BotRenderingConfigMetadata) ProtoMessage() {} + +func (x *BotRenderingConfigMetadata) ProtoReflect() protoreflect.Message { + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[42] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BotRenderingConfigMetadata.ProtoReflect.Descriptor instead. +func (*BotRenderingConfigMetadata) Descriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{42} +} + +func (x *BotRenderingConfigMetadata) GetBloksVersioningID() string { + if x != nil && x.BloksVersioningID != nil { + return *x.BloksVersioningID + } + return "" +} + +func (x *BotRenderingConfigMetadata) GetPixelDensity() float64 { + if x != nil && x.PixelDensity != nil { + return *x.PixelDensity + } + return 0 +} + +type BotGroupParticipantMetadata struct { + state protoimpl.MessageState `protogen:"open.v1"` + BotFbid *string `protobuf:"bytes,1,opt,name=botFbid" json:"botFbid,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BotGroupParticipantMetadata) Reset() { + *x = BotGroupParticipantMetadata{} + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[43] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BotGroupParticipantMetadata) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BotGroupParticipantMetadata) ProtoMessage() {} + +func (x *BotGroupParticipantMetadata) ProtoReflect() protoreflect.Message { + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[43] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BotGroupParticipantMetadata.ProtoReflect.Descriptor instead. +func (*BotGroupParticipantMetadata) Descriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{43} +} + +func (x *BotGroupParticipantMetadata) GetBotFbid() string { + if x != nil && x.BotFbid != nil { + return *x.BotFbid + } + return "" +} + +type ForwardedAIBotMessageInfo struct { + state protoimpl.MessageState `protogen:"open.v1"` + BotName *string `protobuf:"bytes,1,opt,name=botName" json:"botName,omitempty"` + BotJID *string `protobuf:"bytes,2,opt,name=botJID" json:"botJID,omitempty"` + CreatorName *string `protobuf:"bytes,3,opt,name=creatorName" json:"creatorName,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ForwardedAIBotMessageInfo) Reset() { + *x = ForwardedAIBotMessageInfo{} + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[44] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ForwardedAIBotMessageInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ForwardedAIBotMessageInfo) ProtoMessage() {} + +func (x *ForwardedAIBotMessageInfo) ProtoReflect() protoreflect.Message { + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[44] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ForwardedAIBotMessageInfo.ProtoReflect.Descriptor instead. +func (*ForwardedAIBotMessageInfo) Descriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{44} +} + +func (x *ForwardedAIBotMessageInfo) GetBotName() string { + if x != nil && x.BotName != nil { + return *x.BotName + } + return "" +} + +func (x *ForwardedAIBotMessageInfo) GetBotJID() string { + if x != nil && x.BotJID != nil { + return *x.BotJID + } + return "" +} + +func (x *ForwardedAIBotMessageInfo) GetCreatorName() string { + if x != nil && x.CreatorName != nil { + return *x.CreatorName + } + return "" +} + +type BotMessageSharingInfo struct { + state protoimpl.MessageState `protogen:"open.v1"` + BotEntryPointOrigin *BotMetricsEntryPoint `protobuf:"varint,1,opt,name=botEntryPointOrigin,enum=WAWebProtobufsAICommon.BotMetricsEntryPoint" json:"botEntryPointOrigin,omitempty"` + ForwardScore *uint32 `protobuf:"varint,2,opt,name=forwardScore" json:"forwardScore,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BotMessageSharingInfo) Reset() { + *x = BotMessageSharingInfo{} + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[45] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BotMessageSharingInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BotMessageSharingInfo) ProtoMessage() {} + +func (x *BotMessageSharingInfo) ProtoReflect() protoreflect.Message { + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[45] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BotMessageSharingInfo.ProtoReflect.Descriptor instead. +func (*BotMessageSharingInfo) Descriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{45} +} + +func (x *BotMessageSharingInfo) GetBotEntryPointOrigin() BotMetricsEntryPoint { + if x != nil && x.BotEntryPointOrigin != nil { + return *x.BotEntryPointOrigin + } + return BotMetricsEntryPoint_UNDEFINED_ENTRY_POINT +} + +func (x *BotMessageSharingInfo) GetForwardScore() uint32 { + if x != nil && x.ForwardScore != nil { + return *x.ForwardScore + } + return 0 +} + +type AIRichResponseImageURL struct { + state protoimpl.MessageState `protogen:"open.v1"` + ImagePreviewURL *string `protobuf:"bytes,1,opt,name=imagePreviewURL" json:"imagePreviewURL,omitempty"` + ImageHighResURL *string `protobuf:"bytes,2,opt,name=imageHighResURL" json:"imageHighResURL,omitempty"` + SourceURL *string `protobuf:"bytes,3,opt,name=sourceURL" json:"sourceURL,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *AIRichResponseImageURL) Reset() { + *x = AIRichResponseImageURL{} + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[46] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *AIRichResponseImageURL) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AIRichResponseImageURL) ProtoMessage() {} + +func (x *AIRichResponseImageURL) ProtoReflect() protoreflect.Message { + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[46] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AIRichResponseImageURL.ProtoReflect.Descriptor instead. +func (*AIRichResponseImageURL) Descriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{46} +} + +func (x *AIRichResponseImageURL) GetImagePreviewURL() string { + if x != nil && x.ImagePreviewURL != nil { + return *x.ImagePreviewURL + } + return "" +} + +func (x *AIRichResponseImageURL) GetImageHighResURL() string { + if x != nil && x.ImageHighResURL != nil { + return *x.ImageHighResURL + } + return "" +} + +func (x *AIRichResponseImageURL) GetSourceURL() string { + if x != nil && x.SourceURL != nil { + return *x.SourceURL + } + return "" +} + +type AIRichResponseGridImageMetadata struct { + state protoimpl.MessageState `protogen:"open.v1"` + GridImageURL *AIRichResponseImageURL `protobuf:"bytes,1,opt,name=gridImageURL" json:"gridImageURL,omitempty"` + ImageURLs []*AIRichResponseImageURL `protobuf:"bytes,2,rep,name=imageURLs" json:"imageURLs,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *AIRichResponseGridImageMetadata) Reset() { + *x = AIRichResponseGridImageMetadata{} + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[47] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *AIRichResponseGridImageMetadata) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AIRichResponseGridImageMetadata) ProtoMessage() {} + +func (x *AIRichResponseGridImageMetadata) ProtoReflect() protoreflect.Message { + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[47] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AIRichResponseGridImageMetadata.ProtoReflect.Descriptor instead. +func (*AIRichResponseGridImageMetadata) Descriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{47} +} + +func (x *AIRichResponseGridImageMetadata) GetGridImageURL() *AIRichResponseImageURL { + if x != nil { + return x.GridImageURL + } + return nil +} + +func (x *AIRichResponseGridImageMetadata) GetImageURLs() []*AIRichResponseImageURL { + if x != nil { + return x.ImageURLs + } + return nil +} + +type AIRichResponseTableMetadata struct { + state protoimpl.MessageState `protogen:"open.v1"` + Rows []*AIRichResponseTableMetadata_AIRichResponseTableRow `protobuf:"bytes,1,rep,name=rows" json:"rows,omitempty"` + Title *string `protobuf:"bytes,2,opt,name=title" json:"title,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *AIRichResponseTableMetadata) Reset() { + *x = AIRichResponseTableMetadata{} + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[48] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *AIRichResponseTableMetadata) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AIRichResponseTableMetadata) ProtoMessage() {} + +func (x *AIRichResponseTableMetadata) ProtoReflect() protoreflect.Message { + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[48] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AIRichResponseTableMetadata.ProtoReflect.Descriptor instead. +func (*AIRichResponseTableMetadata) Descriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{48} +} + +func (x *AIRichResponseTableMetadata) GetRows() []*AIRichResponseTableMetadata_AIRichResponseTableRow { + if x != nil { + return x.Rows + } + return nil +} + +func (x *AIRichResponseTableMetadata) GetTitle() string { + if x != nil && x.Title != nil { + return *x.Title + } + return "" +} + +type AIRichResponseUnifiedResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Data []byte `protobuf:"bytes,1,opt,name=data" json:"data,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *AIRichResponseUnifiedResponse) Reset() { + *x = AIRichResponseUnifiedResponse{} + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[49] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *AIRichResponseUnifiedResponse) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AIRichResponseUnifiedResponse) ProtoMessage() {} + +func (x *AIRichResponseUnifiedResponse) ProtoReflect() protoreflect.Message { + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[49] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AIRichResponseUnifiedResponse.ProtoReflect.Descriptor instead. +func (*AIRichResponseUnifiedResponse) Descriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{49} +} + +func (x *AIRichResponseUnifiedResponse) GetData() []byte { + if x != nil { + return x.Data + } + return nil +} + +type AIRichResponseLatexMetadata struct { + state protoimpl.MessageState `protogen:"open.v1"` + Text *string `protobuf:"bytes,1,opt,name=text" json:"text,omitempty"` + Expressions []*AIRichResponseLatexMetadata_AIRichResponseLatexExpression `protobuf:"bytes,2,rep,name=expressions" json:"expressions,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *AIRichResponseLatexMetadata) Reset() { + *x = AIRichResponseLatexMetadata{} + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[50] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *AIRichResponseLatexMetadata) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AIRichResponseLatexMetadata) ProtoMessage() {} + +func (x *AIRichResponseLatexMetadata) ProtoReflect() protoreflect.Message { + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[50] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AIRichResponseLatexMetadata.ProtoReflect.Descriptor instead. +func (*AIRichResponseLatexMetadata) Descriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{50} +} + +func (x *AIRichResponseLatexMetadata) GetText() string { + if x != nil && x.Text != nil { + return *x.Text + } + return "" +} + +func (x *AIRichResponseLatexMetadata) GetExpressions() []*AIRichResponseLatexMetadata_AIRichResponseLatexExpression { + if x != nil { + return x.Expressions + } + return nil +} + +type AIRichResponseMapMetadata struct { + state protoimpl.MessageState `protogen:"open.v1"` + CenterLatitude *float64 `protobuf:"fixed64,1,opt,name=centerLatitude" json:"centerLatitude,omitempty"` + CenterLongitude *float64 `protobuf:"fixed64,2,opt,name=centerLongitude" json:"centerLongitude,omitempty"` + LatitudeDelta *float64 `protobuf:"fixed64,3,opt,name=latitudeDelta" json:"latitudeDelta,omitempty"` + LongitudeDelta *float64 `protobuf:"fixed64,4,opt,name=longitudeDelta" json:"longitudeDelta,omitempty"` + Annotations []*AIRichResponseMapMetadata_AIRichResponseMapAnnotation `protobuf:"bytes,5,rep,name=annotations" json:"annotations,omitempty"` + ShowInfoList *bool `protobuf:"varint,6,opt,name=showInfoList" json:"showInfoList,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *AIRichResponseMapMetadata) Reset() { + *x = AIRichResponseMapMetadata{} + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[51] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *AIRichResponseMapMetadata) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AIRichResponseMapMetadata) ProtoMessage() {} + +func (x *AIRichResponseMapMetadata) ProtoReflect() protoreflect.Message { + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[51] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AIRichResponseMapMetadata.ProtoReflect.Descriptor instead. +func (*AIRichResponseMapMetadata) Descriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{51} +} + +func (x *AIRichResponseMapMetadata) GetCenterLatitude() float64 { + if x != nil && x.CenterLatitude != nil { + return *x.CenterLatitude + } + return 0 +} + +func (x *AIRichResponseMapMetadata) GetCenterLongitude() float64 { + if x != nil && x.CenterLongitude != nil { + return *x.CenterLongitude + } + return 0 +} + +func (x *AIRichResponseMapMetadata) GetLatitudeDelta() float64 { + if x != nil && x.LatitudeDelta != nil { + return *x.LatitudeDelta + } + return 0 +} + +func (x *AIRichResponseMapMetadata) GetLongitudeDelta() float64 { + if x != nil && x.LongitudeDelta != nil { + return *x.LongitudeDelta + } + return 0 +} + +func (x *AIRichResponseMapMetadata) GetAnnotations() []*AIRichResponseMapMetadata_AIRichResponseMapAnnotation { + if x != nil { + return x.Annotations + } + return nil +} + +func (x *AIRichResponseMapMetadata) GetShowInfoList() bool { + if x != nil && x.ShowInfoList != nil { + return *x.ShowInfoList + } + return false +} + +type AIRichResponseSubMessage struct { + state protoimpl.MessageState `protogen:"open.v1"` + MessageType *AIRichResponseSubMessageType `protobuf:"varint,1,opt,name=messageType,enum=WAWebProtobufsAICommon.AIRichResponseSubMessageType" json:"messageType,omitempty"` + GridImageMetadata *AIRichResponseGridImageMetadata `protobuf:"bytes,2,opt,name=gridImageMetadata" json:"gridImageMetadata,omitempty"` + MessageText *string `protobuf:"bytes,3,opt,name=messageText" json:"messageText,omitempty"` + ImageMetadata *AIRichResponseInlineImageMetadata `protobuf:"bytes,4,opt,name=imageMetadata" json:"imageMetadata,omitempty"` + CodeMetadata *AIRichResponseCodeMetadata `protobuf:"bytes,5,opt,name=codeMetadata" json:"codeMetadata,omitempty"` + TableMetadata *AIRichResponseTableMetadata `protobuf:"bytes,6,opt,name=tableMetadata" json:"tableMetadata,omitempty"` + DynamicMetadata *AIRichResponseDynamicMetadata `protobuf:"bytes,7,opt,name=dynamicMetadata" json:"dynamicMetadata,omitempty"` + LatexMetadata *AIRichResponseLatexMetadata `protobuf:"bytes,8,opt,name=latexMetadata" json:"latexMetadata,omitempty"` + MapMetadata *AIRichResponseMapMetadata `protobuf:"bytes,9,opt,name=mapMetadata" json:"mapMetadata,omitempty"` + ContentItemsMetadata *AIRichResponseContentItemsMetadata `protobuf:"bytes,10,opt,name=contentItemsMetadata" json:"contentItemsMetadata,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *AIRichResponseSubMessage) Reset() { + *x = AIRichResponseSubMessage{} + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[52] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *AIRichResponseSubMessage) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AIRichResponseSubMessage) ProtoMessage() {} + +func (x *AIRichResponseSubMessage) ProtoReflect() protoreflect.Message { + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[52] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AIRichResponseSubMessage.ProtoReflect.Descriptor instead. +func (*AIRichResponseSubMessage) Descriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{52} +} + +func (x *AIRichResponseSubMessage) GetMessageType() AIRichResponseSubMessageType { + if x != nil && x.MessageType != nil { + return *x.MessageType + } + return AIRichResponseSubMessageType_AI_RICH_RESPONSE_UNKNOWN +} + +func (x *AIRichResponseSubMessage) GetGridImageMetadata() *AIRichResponseGridImageMetadata { + if x != nil { + return x.GridImageMetadata + } + return nil +} + +func (x *AIRichResponseSubMessage) GetMessageText() string { + if x != nil && x.MessageText != nil { + return *x.MessageText + } + return "" +} + +func (x *AIRichResponseSubMessage) GetImageMetadata() *AIRichResponseInlineImageMetadata { + if x != nil { + return x.ImageMetadata + } + return nil +} + +func (x *AIRichResponseSubMessage) GetCodeMetadata() *AIRichResponseCodeMetadata { + if x != nil { + return x.CodeMetadata + } + return nil +} + +func (x *AIRichResponseSubMessage) GetTableMetadata() *AIRichResponseTableMetadata { + if x != nil { + return x.TableMetadata + } + return nil +} + +func (x *AIRichResponseSubMessage) GetDynamicMetadata() *AIRichResponseDynamicMetadata { + if x != nil { + return x.DynamicMetadata + } + return nil +} + +func (x *AIRichResponseSubMessage) GetLatexMetadata() *AIRichResponseLatexMetadata { + if x != nil { + return x.LatexMetadata + } + return nil +} + +func (x *AIRichResponseSubMessage) GetMapMetadata() *AIRichResponseMapMetadata { + if x != nil { + return x.MapMetadata + } + return nil +} + +func (x *AIRichResponseSubMessage) GetContentItemsMetadata() *AIRichResponseContentItemsMetadata { + if x != nil { + return x.ContentItemsMetadata + } + return nil +} + +type AIRegenerateMetadata struct { + state protoimpl.MessageState `protogen:"open.v1"` + MessageKey *waCommon.MessageKey `protobuf:"bytes,1,opt,name=messageKey" json:"messageKey,omitempty"` + ResponseTimestampMS *int64 `protobuf:"varint,2,opt,name=responseTimestampMS" json:"responseTimestampMS,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *AIRegenerateMetadata) Reset() { + *x = AIRegenerateMetadata{} + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[53] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *AIRegenerateMetadata) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AIRegenerateMetadata) ProtoMessage() {} + +func (x *AIRegenerateMetadata) ProtoReflect() protoreflect.Message { + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[53] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AIRegenerateMetadata.ProtoReflect.Descriptor instead. +func (*AIRegenerateMetadata) Descriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{53} +} + +func (x *AIRegenerateMetadata) GetMessageKey() *waCommon.MessageKey { + if x != nil { + return x.MessageKey + } + return nil +} + +func (x *AIRegenerateMetadata) GetResponseTimestampMS() int64 { + if x != nil && x.ResponseTimestampMS != nil { + return *x.ResponseTimestampMS + } + return 0 +} + +type SessionTransparencyMetadata struct { + state protoimpl.MessageState `protogen:"open.v1"` + DisclaimerText *string `protobuf:"bytes,1,opt,name=disclaimerText" json:"disclaimerText,omitempty"` + HcaID *string `protobuf:"bytes,2,opt,name=hcaID" json:"hcaID,omitempty"` + SessionTransparencyType *SessionTransparencyType `protobuf:"varint,3,opt,name=sessionTransparencyType,enum=WAWebProtobufsAICommon.SessionTransparencyType" json:"sessionTransparencyType,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *SessionTransparencyMetadata) Reset() { + *x = SessionTransparencyMetadata{} + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[54] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *SessionTransparencyMetadata) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SessionTransparencyMetadata) ProtoMessage() {} + +func (x *SessionTransparencyMetadata) ProtoReflect() protoreflect.Message { + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[54] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SessionTransparencyMetadata.ProtoReflect.Descriptor instead. +func (*SessionTransparencyMetadata) Descriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{54} +} + +func (x *SessionTransparencyMetadata) GetDisclaimerText() string { + if x != nil && x.DisclaimerText != nil { + return *x.DisclaimerText + } + return "" +} + +func (x *SessionTransparencyMetadata) GetHcaID() string { + if x != nil && x.HcaID != nil { + return *x.HcaID + } + return "" +} + +func (x *SessionTransparencyMetadata) GetSessionTransparencyType() SessionTransparencyType { + if x != nil && x.SessionTransparencyType != nil { + return *x.SessionTransparencyType + } + return SessionTransparencyType_UNKNOWN_TYPE +} + +type BotProgressIndicatorMetadata_BotPlanningStepMetadata struct { + state protoimpl.MessageState `protogen:"open.v1"` + StatusTitle *string `protobuf:"bytes,1,opt,name=statusTitle" json:"statusTitle,omitempty"` + StatusBody *string `protobuf:"bytes,2,opt,name=statusBody" json:"statusBody,omitempty"` + SourcesMetadata []*BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningSearchSourcesMetadata `protobuf:"bytes,3,rep,name=sourcesMetadata" json:"sourcesMetadata,omitempty"` + Status *BotProgressIndicatorMetadata_BotPlanningStepMetadata_PlanningStepStatus `protobuf:"varint,4,opt,name=status,enum=WAWebProtobufsAICommon.BotProgressIndicatorMetadata_BotPlanningStepMetadata_PlanningStepStatus" json:"status,omitempty"` + IsReasoning *bool `protobuf:"varint,5,opt,name=isReasoning" json:"isReasoning,omitempty"` + IsEnhancedSearch *bool `protobuf:"varint,6,opt,name=isEnhancedSearch" json:"isEnhancedSearch,omitempty"` + Sections []*BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningStepSectionMetadata `protobuf:"bytes,7,rep,name=sections" json:"sections,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BotProgressIndicatorMetadata_BotPlanningStepMetadata) Reset() { + *x = BotProgressIndicatorMetadata_BotPlanningStepMetadata{} + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[55] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BotProgressIndicatorMetadata_BotPlanningStepMetadata) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BotProgressIndicatorMetadata_BotPlanningStepMetadata) ProtoMessage() {} + +func (x *BotProgressIndicatorMetadata_BotPlanningStepMetadata) ProtoReflect() protoreflect.Message { + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[55] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BotProgressIndicatorMetadata_BotPlanningStepMetadata.ProtoReflect.Descriptor instead. +func (*BotProgressIndicatorMetadata_BotPlanningStepMetadata) Descriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{7, 0} +} + +func (x *BotProgressIndicatorMetadata_BotPlanningStepMetadata) GetStatusTitle() string { + if x != nil && x.StatusTitle != nil { + return *x.StatusTitle + } + return "" +} + +func (x *BotProgressIndicatorMetadata_BotPlanningStepMetadata) GetStatusBody() string { + if x != nil && x.StatusBody != nil { + return *x.StatusBody + } + return "" +} + +func (x *BotProgressIndicatorMetadata_BotPlanningStepMetadata) GetSourcesMetadata() []*BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningSearchSourcesMetadata { + if x != nil { + return x.SourcesMetadata + } + return nil +} + +func (x *BotProgressIndicatorMetadata_BotPlanningStepMetadata) GetStatus() BotProgressIndicatorMetadata_BotPlanningStepMetadata_PlanningStepStatus { + if x != nil && x.Status != nil { + return *x.Status + } + return BotProgressIndicatorMetadata_BotPlanningStepMetadata_UNKNOWN +} + +func (x *BotProgressIndicatorMetadata_BotPlanningStepMetadata) GetIsReasoning() bool { + if x != nil && x.IsReasoning != nil { + return *x.IsReasoning + } + return false +} + +func (x *BotProgressIndicatorMetadata_BotPlanningStepMetadata) GetIsEnhancedSearch() bool { + if x != nil && x.IsEnhancedSearch != nil { + return *x.IsEnhancedSearch + } + return false +} + +func (x *BotProgressIndicatorMetadata_BotPlanningStepMetadata) GetSections() []*BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningStepSectionMetadata { + if x != nil { + return x.Sections + } + return nil +} + +type BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningSearchSourcesMetadata struct { + state protoimpl.MessageState `protogen:"open.v1"` + SourceTitle *string `protobuf:"bytes,1,opt,name=sourceTitle" json:"sourceTitle,omitempty"` + Provider *BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningSearchSourcesMetadata_BotPlanningSearchSourceProvider `protobuf:"varint,2,opt,name=provider,enum=WAWebProtobufsAICommon.BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningSearchSourcesMetadata_BotPlanningSearchSourceProvider" json:"provider,omitempty"` + SourceURL *string `protobuf:"bytes,3,opt,name=sourceURL" json:"sourceURL,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningSearchSourcesMetadata) Reset() { + *x = BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningSearchSourcesMetadata{} + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[56] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningSearchSourcesMetadata) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningSearchSourcesMetadata) ProtoMessage() { +} + +func (x *BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningSearchSourcesMetadata) ProtoReflect() protoreflect.Message { + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[56] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningSearchSourcesMetadata.ProtoReflect.Descriptor instead. +func (*BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningSearchSourcesMetadata) Descriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{7, 0, 0} +} + +func (x *BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningSearchSourcesMetadata) GetSourceTitle() string { + if x != nil && x.SourceTitle != nil { + return *x.SourceTitle + } + return "" +} + +func (x *BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningSearchSourcesMetadata) GetProvider() BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningSearchSourcesMetadata_BotPlanningSearchSourceProvider { + if x != nil && x.Provider != nil { + return *x.Provider + } + return BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningSearchSourcesMetadata_UNKNOWN +} + +func (x *BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningSearchSourcesMetadata) GetSourceURL() string { + if x != nil && x.SourceURL != nil { + return *x.SourceURL + } + return "" +} + +type BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningStepSectionMetadata struct { + state protoimpl.MessageState `protogen:"open.v1"` + SectionTitle *string `protobuf:"bytes,1,opt,name=sectionTitle" json:"sectionTitle,omitempty"` + SectionBody *string `protobuf:"bytes,2,opt,name=sectionBody" json:"sectionBody,omitempty"` + SourcesMetadata []*BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningSearchSourceMetadata `protobuf:"bytes,3,rep,name=sourcesMetadata" json:"sourcesMetadata,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningStepSectionMetadata) Reset() { + *x = BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningStepSectionMetadata{} + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[57] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningStepSectionMetadata) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningStepSectionMetadata) ProtoMessage() { +} + +func (x *BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningStepSectionMetadata) ProtoReflect() protoreflect.Message { + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[57] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningStepSectionMetadata.ProtoReflect.Descriptor instead. +func (*BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningStepSectionMetadata) Descriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{7, 0, 1} +} + +func (x *BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningStepSectionMetadata) GetSectionTitle() string { + if x != nil && x.SectionTitle != nil { + return *x.SectionTitle + } + return "" +} + +func (x *BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningStepSectionMetadata) GetSectionBody() string { + if x != nil && x.SectionBody != nil { + return *x.SectionBody + } + return "" +} + +func (x *BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningStepSectionMetadata) GetSourcesMetadata() []*BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningSearchSourceMetadata { + if x != nil { + return x.SourcesMetadata + } + return nil +} + +type BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningSearchSourceMetadata struct { + state protoimpl.MessageState `protogen:"open.v1"` + Title *string `protobuf:"bytes,1,opt,name=title" json:"title,omitempty"` + Provider *BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotSearchSourceProvider `protobuf:"varint,2,opt,name=provider,enum=WAWebProtobufsAICommon.BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotSearchSourceProvider" json:"provider,omitempty"` + SourceURL *string `protobuf:"bytes,3,opt,name=sourceURL" json:"sourceURL,omitempty"` + FavIconURL *string `protobuf:"bytes,4,opt,name=favIconURL" json:"favIconURL,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningSearchSourceMetadata) Reset() { + *x = BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningSearchSourceMetadata{} + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[58] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningSearchSourceMetadata) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningSearchSourceMetadata) ProtoMessage() { +} + +func (x *BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningSearchSourceMetadata) ProtoReflect() protoreflect.Message { + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[58] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningSearchSourceMetadata.ProtoReflect.Descriptor instead. +func (*BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningSearchSourceMetadata) Descriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{7, 0, 2} +} + +func (x *BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningSearchSourceMetadata) GetTitle() string { + if x != nil && x.Title != nil { + return *x.Title + } + return "" +} + +func (x *BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningSearchSourceMetadata) GetProvider() BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotSearchSourceProvider { + if x != nil && x.Provider != nil { + return *x.Provider + } + return BotProgressIndicatorMetadata_BotPlanningStepMetadata_UNKNOWN_PROVIDER +} + +func (x *BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningSearchSourceMetadata) GetSourceURL() string { + if x != nil && x.SourceURL != nil { + return *x.SourceURL + } + return "" +} + +func (x *BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningSearchSourceMetadata) GetFavIconURL() string { + if x != nil && x.FavIconURL != nil { + return *x.FavIconURL + } + return "" +} + +type BotQuotaMetadata_BotFeatureQuotaMetadata struct { + state protoimpl.MessageState `protogen:"open.v1"` + FeatureType *BotQuotaMetadata_BotFeatureQuotaMetadata_BotFeatureType `protobuf:"varint,1,opt,name=featureType,enum=WAWebProtobufsAICommon.BotQuotaMetadata_BotFeatureQuotaMetadata_BotFeatureType" json:"featureType,omitempty"` + RemainingQuota *uint32 `protobuf:"varint,2,opt,name=remainingQuota" json:"remainingQuota,omitempty"` + ExpirationTimestamp *uint64 `protobuf:"varint,3,opt,name=expirationTimestamp" json:"expirationTimestamp,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BotQuotaMetadata_BotFeatureQuotaMetadata) Reset() { + *x = BotQuotaMetadata_BotFeatureQuotaMetadata{} + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[59] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BotQuotaMetadata_BotFeatureQuotaMetadata) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BotQuotaMetadata_BotFeatureQuotaMetadata) ProtoMessage() {} + +func (x *BotQuotaMetadata_BotFeatureQuotaMetadata) ProtoReflect() protoreflect.Message { + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[59] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BotQuotaMetadata_BotFeatureQuotaMetadata.ProtoReflect.Descriptor instead. +func (*BotQuotaMetadata_BotFeatureQuotaMetadata) Descriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{10, 0} +} + +func (x *BotQuotaMetadata_BotFeatureQuotaMetadata) GetFeatureType() BotQuotaMetadata_BotFeatureQuotaMetadata_BotFeatureType { + if x != nil && x.FeatureType != nil { + return *x.FeatureType + } + return BotQuotaMetadata_BotFeatureQuotaMetadata_UNKNOWN_FEATURE +} + +func (x *BotQuotaMetadata_BotFeatureQuotaMetadata) GetRemainingQuota() uint32 { + if x != nil && x.RemainingQuota != nil { + return *x.RemainingQuota + } + return 0 +} + +func (x *BotQuotaMetadata_BotFeatureQuotaMetadata) GetExpirationTimestamp() uint64 { + if x != nil && x.ExpirationTimestamp != nil { + return *x.ExpirationTimestamp + } + return 0 +} + +type BotSourcesMetadata_BotSourceItem struct { + state protoimpl.MessageState `protogen:"open.v1"` + Provider *BotSourcesMetadata_BotSourceItem_SourceProvider `protobuf:"varint,1,opt,name=provider,enum=WAWebProtobufsAICommon.BotSourcesMetadata_BotSourceItem_SourceProvider" json:"provider,omitempty"` + ThumbnailCDNURL *string `protobuf:"bytes,2,opt,name=thumbnailCDNURL" json:"thumbnailCDNURL,omitempty"` + SourceProviderURL *string `protobuf:"bytes,3,opt,name=sourceProviderURL" json:"sourceProviderURL,omitempty"` + SourceQuery *string `protobuf:"bytes,4,opt,name=sourceQuery" json:"sourceQuery,omitempty"` + FaviconCDNURL *string `protobuf:"bytes,5,opt,name=faviconCDNURL" json:"faviconCDNURL,omitempty"` + CitationNumber *uint32 `protobuf:"varint,6,opt,name=citationNumber" json:"citationNumber,omitempty"` + SourceTitle *string `protobuf:"bytes,7,opt,name=sourceTitle" json:"sourceTitle,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BotSourcesMetadata_BotSourceItem) Reset() { + *x = BotSourcesMetadata_BotSourceItem{} + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[60] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BotSourcesMetadata_BotSourceItem) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BotSourcesMetadata_BotSourceItem) ProtoMessage() {} + +func (x *BotSourcesMetadata_BotSourceItem) ProtoReflect() protoreflect.Message { + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[60] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BotSourcesMetadata_BotSourceItem.ProtoReflect.Descriptor instead. +func (*BotSourcesMetadata_BotSourceItem) Descriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{13, 0} +} + +func (x *BotSourcesMetadata_BotSourceItem) GetProvider() BotSourcesMetadata_BotSourceItem_SourceProvider { + if x != nil && x.Provider != nil { + return *x.Provider + } + return BotSourcesMetadata_BotSourceItem_UNKNOWN +} + +func (x *BotSourcesMetadata_BotSourceItem) GetThumbnailCDNURL() string { + if x != nil && x.ThumbnailCDNURL != nil { + return *x.ThumbnailCDNURL + } + return "" +} + +func (x *BotSourcesMetadata_BotSourceItem) GetSourceProviderURL() string { + if x != nil && x.SourceProviderURL != nil { + return *x.SourceProviderURL + } + return "" +} + +func (x *BotSourcesMetadata_BotSourceItem) GetSourceQuery() string { + if x != nil && x.SourceQuery != nil { + return *x.SourceQuery + } + return "" +} + +func (x *BotSourcesMetadata_BotSourceItem) GetFaviconCDNURL() string { + if x != nil && x.FaviconCDNURL != nil { + return *x.FaviconCDNURL + } + return "" +} + +func (x *BotSourcesMetadata_BotSourceItem) GetCitationNumber() uint32 { + if x != nil && x.CitationNumber != nil { + return *x.CitationNumber + } + return 0 +} + +func (x *BotSourcesMetadata_BotSourceItem) GetSourceTitle() string { + if x != nil && x.SourceTitle != nil { + return *x.SourceTitle + } + return "" +} + +type AIThreadInfo_AIThreadClientInfo struct { + state protoimpl.MessageState `protogen:"open.v1"` + Type *AIThreadInfo_AIThreadClientInfo_AIThreadType `protobuf:"varint,1,opt,name=type,enum=WAWebProtobufsAICommon.AIThreadInfo_AIThreadClientInfo_AIThreadType" json:"type,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *AIThreadInfo_AIThreadClientInfo) Reset() { + *x = AIThreadInfo_AIThreadClientInfo{} + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[61] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *AIThreadInfo_AIThreadClientInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AIThreadInfo_AIThreadClientInfo) ProtoMessage() {} + +func (x *AIThreadInfo_AIThreadClientInfo) ProtoReflect() protoreflect.Message { + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[61] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AIThreadInfo_AIThreadClientInfo.ProtoReflect.Descriptor instead. +func (*AIThreadInfo_AIThreadClientInfo) Descriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{15, 0} +} + +func (x *AIThreadInfo_AIThreadClientInfo) GetType() AIThreadInfo_AIThreadClientInfo_AIThreadType { + if x != nil && x.Type != nil { + return *x.Type + } + return AIThreadInfo_AIThreadClientInfo_UNKNOWN +} + +type AIThreadInfo_AIThreadServerInfo struct { + state protoimpl.MessageState `protogen:"open.v1"` + Title *string `protobuf:"bytes,1,opt,name=title" json:"title,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *AIThreadInfo_AIThreadServerInfo) Reset() { + *x = AIThreadInfo_AIThreadServerInfo{} + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[62] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *AIThreadInfo_AIThreadServerInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AIThreadInfo_AIThreadServerInfo) ProtoMessage() {} + +func (x *AIThreadInfo_AIThreadServerInfo) ProtoReflect() protoreflect.Message { + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[62] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AIThreadInfo_AIThreadServerInfo.ProtoReflect.Descriptor instead. +func (*AIThreadInfo_AIThreadServerInfo) Descriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{15, 1} +} + +func (x *AIThreadInfo_AIThreadServerInfo) GetTitle() string { + if x != nil && x.Title != nil { + return *x.Title + } + return "" +} + +type BotFeedbackMessage_SideBySideSurveyMetadata struct { + state protoimpl.MessageState `protogen:"open.v1"` + SelectedRequestID *string `protobuf:"bytes,1,opt,name=selectedRequestID" json:"selectedRequestID,omitempty"` + SurveyID *uint32 `protobuf:"varint,2,opt,name=surveyID" json:"surveyID,omitempty"` + SimonSessionFbid *string `protobuf:"bytes,3,opt,name=simonSessionFbid" json:"simonSessionFbid,omitempty"` + ResponseOtid *string `protobuf:"bytes,4,opt,name=responseOtid" json:"responseOtid,omitempty"` + ResponseTimestampMSString *string `protobuf:"bytes,5,opt,name=responseTimestampMSString" json:"responseTimestampMSString,omitempty"` + IsSelectedResponsePrimary *bool `protobuf:"varint,6,opt,name=isSelectedResponsePrimary" json:"isSelectedResponsePrimary,omitempty"` + MessageIDToEdit *string `protobuf:"bytes,7,opt,name=messageIDToEdit" json:"messageIDToEdit,omitempty"` + AnalyticsData *BotFeedbackMessage_SideBySideSurveyMetadata_SideBySideSurveyAnalyticsData `protobuf:"bytes,8,opt,name=analyticsData" json:"analyticsData,omitempty"` + MetaAiAnalyticsData *BotFeedbackMessage_SideBySideSurveyMetadata_SidebySideSurveyMetaAiAnalyticsData `protobuf:"bytes,9,opt,name=metaAiAnalyticsData" json:"metaAiAnalyticsData,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BotFeedbackMessage_SideBySideSurveyMetadata) Reset() { + *x = BotFeedbackMessage_SideBySideSurveyMetadata{} + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[63] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BotFeedbackMessage_SideBySideSurveyMetadata) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BotFeedbackMessage_SideBySideSurveyMetadata) ProtoMessage() {} + +func (x *BotFeedbackMessage_SideBySideSurveyMetadata) ProtoReflect() protoreflect.Message { + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[63] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BotFeedbackMessage_SideBySideSurveyMetadata.ProtoReflect.Descriptor instead. +func (*BotFeedbackMessage_SideBySideSurveyMetadata) Descriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{16, 0} +} + +func (x *BotFeedbackMessage_SideBySideSurveyMetadata) GetSelectedRequestID() string { + if x != nil && x.SelectedRequestID != nil { + return *x.SelectedRequestID + } + return "" +} + +func (x *BotFeedbackMessage_SideBySideSurveyMetadata) GetSurveyID() uint32 { + if x != nil && x.SurveyID != nil { + return *x.SurveyID + } + return 0 +} + +func (x *BotFeedbackMessage_SideBySideSurveyMetadata) GetSimonSessionFbid() string { + if x != nil && x.SimonSessionFbid != nil { + return *x.SimonSessionFbid + } + return "" +} + +func (x *BotFeedbackMessage_SideBySideSurveyMetadata) GetResponseOtid() string { + if x != nil && x.ResponseOtid != nil { + return *x.ResponseOtid + } + return "" +} + +func (x *BotFeedbackMessage_SideBySideSurveyMetadata) GetResponseTimestampMSString() string { + if x != nil && x.ResponseTimestampMSString != nil { + return *x.ResponseTimestampMSString + } + return "" +} + +func (x *BotFeedbackMessage_SideBySideSurveyMetadata) GetIsSelectedResponsePrimary() bool { + if x != nil && x.IsSelectedResponsePrimary != nil { + return *x.IsSelectedResponsePrimary + } + return false +} + +func (x *BotFeedbackMessage_SideBySideSurveyMetadata) GetMessageIDToEdit() string { + if x != nil && x.MessageIDToEdit != nil { + return *x.MessageIDToEdit + } + return "" +} + +func (x *BotFeedbackMessage_SideBySideSurveyMetadata) GetAnalyticsData() *BotFeedbackMessage_SideBySideSurveyMetadata_SideBySideSurveyAnalyticsData { + if x != nil { + return x.AnalyticsData + } + return nil +} + +func (x *BotFeedbackMessage_SideBySideSurveyMetadata) GetMetaAiAnalyticsData() *BotFeedbackMessage_SideBySideSurveyMetadata_SidebySideSurveyMetaAiAnalyticsData { + if x != nil { + return x.MetaAiAnalyticsData + } + return nil +} + +type BotFeedbackMessage_SideBySideSurveyMetadata_SidebySideSurveyMetaAiAnalyticsData struct { + state protoimpl.MessageState `protogen:"open.v1"` + SurveyID *uint32 `protobuf:"varint,1,opt,name=surveyID" json:"surveyID,omitempty"` + PrimaryResponseID *string `protobuf:"bytes,2,opt,name=primaryResponseID" json:"primaryResponseID,omitempty"` + TestArmName *string `protobuf:"bytes,3,opt,name=testArmName" json:"testArmName,omitempty"` + TimestampMSString *string `protobuf:"bytes,4,opt,name=timestampMSString" json:"timestampMSString,omitempty"` + CtaImpressionEvent *BotFeedbackMessage_SideBySideSurveyMetadata_SidebySideSurveyMetaAiAnalyticsData_SideBySideSurveyCTAImpressionEventData `protobuf:"bytes,5,opt,name=ctaImpressionEvent" json:"ctaImpressionEvent,omitempty"` + CtaClickEvent *BotFeedbackMessage_SideBySideSurveyMetadata_SidebySideSurveyMetaAiAnalyticsData_SideBySideSurveyCTAClickEventData `protobuf:"bytes,6,opt,name=ctaClickEvent" json:"ctaClickEvent,omitempty"` + CardImpressionEvent *BotFeedbackMessage_SideBySideSurveyMetadata_SidebySideSurveyMetaAiAnalyticsData_SideBySideSurveyCardImpressionEventData `protobuf:"bytes,7,opt,name=cardImpressionEvent" json:"cardImpressionEvent,omitempty"` + ResponseEvent *BotFeedbackMessage_SideBySideSurveyMetadata_SidebySideSurveyMetaAiAnalyticsData_SideBySideSurveyResponseEventData `protobuf:"bytes,8,opt,name=responseEvent" json:"responseEvent,omitempty"` + AbandonEvent *BotFeedbackMessage_SideBySideSurveyMetadata_SidebySideSurveyMetaAiAnalyticsData_SideBySideSurveyAbandonEventData `protobuf:"bytes,9,opt,name=abandonEvent" json:"abandonEvent,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BotFeedbackMessage_SideBySideSurveyMetadata_SidebySideSurveyMetaAiAnalyticsData) Reset() { + *x = BotFeedbackMessage_SideBySideSurveyMetadata_SidebySideSurveyMetaAiAnalyticsData{} + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[64] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BotFeedbackMessage_SideBySideSurveyMetadata_SidebySideSurveyMetaAiAnalyticsData) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BotFeedbackMessage_SideBySideSurveyMetadata_SidebySideSurveyMetaAiAnalyticsData) ProtoMessage() { +} + +func (x *BotFeedbackMessage_SideBySideSurveyMetadata_SidebySideSurveyMetaAiAnalyticsData) ProtoReflect() protoreflect.Message { + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[64] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BotFeedbackMessage_SideBySideSurveyMetadata_SidebySideSurveyMetaAiAnalyticsData.ProtoReflect.Descriptor instead. +func (*BotFeedbackMessage_SideBySideSurveyMetadata_SidebySideSurveyMetaAiAnalyticsData) Descriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{16, 0, 0} +} + +func (x *BotFeedbackMessage_SideBySideSurveyMetadata_SidebySideSurveyMetaAiAnalyticsData) GetSurveyID() uint32 { + if x != nil && x.SurveyID != nil { + return *x.SurveyID + } + return 0 +} + +func (x *BotFeedbackMessage_SideBySideSurveyMetadata_SidebySideSurveyMetaAiAnalyticsData) GetPrimaryResponseID() string { + if x != nil && x.PrimaryResponseID != nil { + return *x.PrimaryResponseID + } + return "" +} + +func (x *BotFeedbackMessage_SideBySideSurveyMetadata_SidebySideSurveyMetaAiAnalyticsData) GetTestArmName() string { + if x != nil && x.TestArmName != nil { + return *x.TestArmName + } + return "" +} + +func (x *BotFeedbackMessage_SideBySideSurveyMetadata_SidebySideSurveyMetaAiAnalyticsData) GetTimestampMSString() string { + if x != nil && x.TimestampMSString != nil { + return *x.TimestampMSString + } + return "" +} + +func (x *BotFeedbackMessage_SideBySideSurveyMetadata_SidebySideSurveyMetaAiAnalyticsData) GetCtaImpressionEvent() *BotFeedbackMessage_SideBySideSurveyMetadata_SidebySideSurveyMetaAiAnalyticsData_SideBySideSurveyCTAImpressionEventData { + if x != nil { + return x.CtaImpressionEvent + } + return nil +} + +func (x *BotFeedbackMessage_SideBySideSurveyMetadata_SidebySideSurveyMetaAiAnalyticsData) GetCtaClickEvent() *BotFeedbackMessage_SideBySideSurveyMetadata_SidebySideSurveyMetaAiAnalyticsData_SideBySideSurveyCTAClickEventData { + if x != nil { + return x.CtaClickEvent + } + return nil +} + +func (x *BotFeedbackMessage_SideBySideSurveyMetadata_SidebySideSurveyMetaAiAnalyticsData) GetCardImpressionEvent() *BotFeedbackMessage_SideBySideSurveyMetadata_SidebySideSurveyMetaAiAnalyticsData_SideBySideSurveyCardImpressionEventData { + if x != nil { + return x.CardImpressionEvent + } + return nil +} + +func (x *BotFeedbackMessage_SideBySideSurveyMetadata_SidebySideSurveyMetaAiAnalyticsData) GetResponseEvent() *BotFeedbackMessage_SideBySideSurveyMetadata_SidebySideSurveyMetaAiAnalyticsData_SideBySideSurveyResponseEventData { + if x != nil { + return x.ResponseEvent + } + return nil +} + +func (x *BotFeedbackMessage_SideBySideSurveyMetadata_SidebySideSurveyMetaAiAnalyticsData) GetAbandonEvent() *BotFeedbackMessage_SideBySideSurveyMetadata_SidebySideSurveyMetaAiAnalyticsData_SideBySideSurveyAbandonEventData { + if x != nil { + return x.AbandonEvent + } + return nil +} + +type BotFeedbackMessage_SideBySideSurveyMetadata_SideBySideSurveyAnalyticsData struct { + state protoimpl.MessageState `protogen:"open.v1"` + TessaEvent *string `protobuf:"bytes,1,opt,name=tessaEvent" json:"tessaEvent,omitempty"` + TessaSessionFbid *string `protobuf:"bytes,2,opt,name=tessaSessionFbid" json:"tessaSessionFbid,omitempty"` + SimonSessionFbid *string `protobuf:"bytes,3,opt,name=simonSessionFbid" json:"simonSessionFbid,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BotFeedbackMessage_SideBySideSurveyMetadata_SideBySideSurveyAnalyticsData) Reset() { + *x = BotFeedbackMessage_SideBySideSurveyMetadata_SideBySideSurveyAnalyticsData{} + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[65] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BotFeedbackMessage_SideBySideSurveyMetadata_SideBySideSurveyAnalyticsData) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BotFeedbackMessage_SideBySideSurveyMetadata_SideBySideSurveyAnalyticsData) ProtoMessage() {} + +func (x *BotFeedbackMessage_SideBySideSurveyMetadata_SideBySideSurveyAnalyticsData) ProtoReflect() protoreflect.Message { + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[65] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BotFeedbackMessage_SideBySideSurveyMetadata_SideBySideSurveyAnalyticsData.ProtoReflect.Descriptor instead. +func (*BotFeedbackMessage_SideBySideSurveyMetadata_SideBySideSurveyAnalyticsData) Descriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{16, 0, 1} +} + +func (x *BotFeedbackMessage_SideBySideSurveyMetadata_SideBySideSurveyAnalyticsData) GetTessaEvent() string { + if x != nil && x.TessaEvent != nil { + return *x.TessaEvent + } + return "" +} + +func (x *BotFeedbackMessage_SideBySideSurveyMetadata_SideBySideSurveyAnalyticsData) GetTessaSessionFbid() string { + if x != nil && x.TessaSessionFbid != nil { + return *x.TessaSessionFbid + } + return "" +} + +func (x *BotFeedbackMessage_SideBySideSurveyMetadata_SideBySideSurveyAnalyticsData) GetSimonSessionFbid() string { + if x != nil && x.SimonSessionFbid != nil { + return *x.SimonSessionFbid + } + return "" +} + +type BotFeedbackMessage_SideBySideSurveyMetadata_SidebySideSurveyMetaAiAnalyticsData_SideBySideSurveyAbandonEventData struct { + state protoimpl.MessageState `protogen:"open.v1"` + AbandonDwellTimeMSString *string `protobuf:"bytes,1,opt,name=abandonDwellTimeMSString" json:"abandonDwellTimeMSString,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BotFeedbackMessage_SideBySideSurveyMetadata_SidebySideSurveyMetaAiAnalyticsData_SideBySideSurveyAbandonEventData) Reset() { + *x = BotFeedbackMessage_SideBySideSurveyMetadata_SidebySideSurveyMetaAiAnalyticsData_SideBySideSurveyAbandonEventData{} + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[66] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BotFeedbackMessage_SideBySideSurveyMetadata_SidebySideSurveyMetaAiAnalyticsData_SideBySideSurveyAbandonEventData) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BotFeedbackMessage_SideBySideSurveyMetadata_SidebySideSurveyMetaAiAnalyticsData_SideBySideSurveyAbandonEventData) ProtoMessage() { +} + +func (x *BotFeedbackMessage_SideBySideSurveyMetadata_SidebySideSurveyMetaAiAnalyticsData_SideBySideSurveyAbandonEventData) ProtoReflect() protoreflect.Message { + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[66] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BotFeedbackMessage_SideBySideSurveyMetadata_SidebySideSurveyMetaAiAnalyticsData_SideBySideSurveyAbandonEventData.ProtoReflect.Descriptor instead. +func (*BotFeedbackMessage_SideBySideSurveyMetadata_SidebySideSurveyMetaAiAnalyticsData_SideBySideSurveyAbandonEventData) Descriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{16, 0, 0, 0} +} + +func (x *BotFeedbackMessage_SideBySideSurveyMetadata_SidebySideSurveyMetaAiAnalyticsData_SideBySideSurveyAbandonEventData) GetAbandonDwellTimeMSString() string { + if x != nil && x.AbandonDwellTimeMSString != nil { + return *x.AbandonDwellTimeMSString + } + return "" +} + +type BotFeedbackMessage_SideBySideSurveyMetadata_SidebySideSurveyMetaAiAnalyticsData_SideBySideSurveyResponseEventData struct { + state protoimpl.MessageState `protogen:"open.v1"` + ResponseDwellTimeMSString *string `protobuf:"bytes,1,opt,name=responseDwellTimeMSString" json:"responseDwellTimeMSString,omitempty"` + SelectedResponseID *string `protobuf:"bytes,2,opt,name=selectedResponseID" json:"selectedResponseID,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BotFeedbackMessage_SideBySideSurveyMetadata_SidebySideSurveyMetaAiAnalyticsData_SideBySideSurveyResponseEventData) Reset() { + *x = BotFeedbackMessage_SideBySideSurveyMetadata_SidebySideSurveyMetaAiAnalyticsData_SideBySideSurveyResponseEventData{} + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[67] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BotFeedbackMessage_SideBySideSurveyMetadata_SidebySideSurveyMetaAiAnalyticsData_SideBySideSurveyResponseEventData) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BotFeedbackMessage_SideBySideSurveyMetadata_SidebySideSurveyMetaAiAnalyticsData_SideBySideSurveyResponseEventData) ProtoMessage() { +} + +func (x *BotFeedbackMessage_SideBySideSurveyMetadata_SidebySideSurveyMetaAiAnalyticsData_SideBySideSurveyResponseEventData) ProtoReflect() protoreflect.Message { + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[67] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BotFeedbackMessage_SideBySideSurveyMetadata_SidebySideSurveyMetaAiAnalyticsData_SideBySideSurveyResponseEventData.ProtoReflect.Descriptor instead. +func (*BotFeedbackMessage_SideBySideSurveyMetadata_SidebySideSurveyMetaAiAnalyticsData_SideBySideSurveyResponseEventData) Descriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{16, 0, 0, 1} +} + +func (x *BotFeedbackMessage_SideBySideSurveyMetadata_SidebySideSurveyMetaAiAnalyticsData_SideBySideSurveyResponseEventData) GetResponseDwellTimeMSString() string { + if x != nil && x.ResponseDwellTimeMSString != nil { + return *x.ResponseDwellTimeMSString + } + return "" +} + +func (x *BotFeedbackMessage_SideBySideSurveyMetadata_SidebySideSurveyMetaAiAnalyticsData_SideBySideSurveyResponseEventData) GetSelectedResponseID() string { + if x != nil && x.SelectedResponseID != nil { + return *x.SelectedResponseID + } + return "" +} + +type BotFeedbackMessage_SideBySideSurveyMetadata_SidebySideSurveyMetaAiAnalyticsData_SideBySideSurveyCardImpressionEventData struct { + state protoimpl.MessageState `protogen:"open.v1"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BotFeedbackMessage_SideBySideSurveyMetadata_SidebySideSurveyMetaAiAnalyticsData_SideBySideSurveyCardImpressionEventData) Reset() { + *x = BotFeedbackMessage_SideBySideSurveyMetadata_SidebySideSurveyMetaAiAnalyticsData_SideBySideSurveyCardImpressionEventData{} + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[68] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BotFeedbackMessage_SideBySideSurveyMetadata_SidebySideSurveyMetaAiAnalyticsData_SideBySideSurveyCardImpressionEventData) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BotFeedbackMessage_SideBySideSurveyMetadata_SidebySideSurveyMetaAiAnalyticsData_SideBySideSurveyCardImpressionEventData) ProtoMessage() { +} + +func (x *BotFeedbackMessage_SideBySideSurveyMetadata_SidebySideSurveyMetaAiAnalyticsData_SideBySideSurveyCardImpressionEventData) ProtoReflect() protoreflect.Message { + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[68] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BotFeedbackMessage_SideBySideSurveyMetadata_SidebySideSurveyMetaAiAnalyticsData_SideBySideSurveyCardImpressionEventData.ProtoReflect.Descriptor instead. +func (*BotFeedbackMessage_SideBySideSurveyMetadata_SidebySideSurveyMetaAiAnalyticsData_SideBySideSurveyCardImpressionEventData) Descriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{16, 0, 0, 2} +} + +type BotFeedbackMessage_SideBySideSurveyMetadata_SidebySideSurveyMetaAiAnalyticsData_SideBySideSurveyCTAClickEventData struct { + state protoimpl.MessageState `protogen:"open.v1"` + IsSurveyExpired *bool `protobuf:"varint,1,opt,name=isSurveyExpired" json:"isSurveyExpired,omitempty"` + ClickDwellTimeMSString *string `protobuf:"bytes,2,opt,name=clickDwellTimeMSString" json:"clickDwellTimeMSString,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BotFeedbackMessage_SideBySideSurveyMetadata_SidebySideSurveyMetaAiAnalyticsData_SideBySideSurveyCTAClickEventData) Reset() { + *x = BotFeedbackMessage_SideBySideSurveyMetadata_SidebySideSurveyMetaAiAnalyticsData_SideBySideSurveyCTAClickEventData{} + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[69] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BotFeedbackMessage_SideBySideSurveyMetadata_SidebySideSurveyMetaAiAnalyticsData_SideBySideSurveyCTAClickEventData) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BotFeedbackMessage_SideBySideSurveyMetadata_SidebySideSurveyMetaAiAnalyticsData_SideBySideSurveyCTAClickEventData) ProtoMessage() { +} + +func (x *BotFeedbackMessage_SideBySideSurveyMetadata_SidebySideSurveyMetaAiAnalyticsData_SideBySideSurveyCTAClickEventData) ProtoReflect() protoreflect.Message { + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[69] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BotFeedbackMessage_SideBySideSurveyMetadata_SidebySideSurveyMetaAiAnalyticsData_SideBySideSurveyCTAClickEventData.ProtoReflect.Descriptor instead. +func (*BotFeedbackMessage_SideBySideSurveyMetadata_SidebySideSurveyMetaAiAnalyticsData_SideBySideSurveyCTAClickEventData) Descriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{16, 0, 0, 3} +} + +func (x *BotFeedbackMessage_SideBySideSurveyMetadata_SidebySideSurveyMetaAiAnalyticsData_SideBySideSurveyCTAClickEventData) GetIsSurveyExpired() bool { + if x != nil && x.IsSurveyExpired != nil { + return *x.IsSurveyExpired + } + return false +} + +func (x *BotFeedbackMessage_SideBySideSurveyMetadata_SidebySideSurveyMetaAiAnalyticsData_SideBySideSurveyCTAClickEventData) GetClickDwellTimeMSString() string { + if x != nil && x.ClickDwellTimeMSString != nil { + return *x.ClickDwellTimeMSString + } + return "" +} + +type BotFeedbackMessage_SideBySideSurveyMetadata_SidebySideSurveyMetaAiAnalyticsData_SideBySideSurveyCTAImpressionEventData struct { + state protoimpl.MessageState `protogen:"open.v1"` + IsSurveyExpired *bool `protobuf:"varint,1,opt,name=isSurveyExpired" json:"isSurveyExpired,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BotFeedbackMessage_SideBySideSurveyMetadata_SidebySideSurveyMetaAiAnalyticsData_SideBySideSurveyCTAImpressionEventData) Reset() { + *x = BotFeedbackMessage_SideBySideSurveyMetadata_SidebySideSurveyMetaAiAnalyticsData_SideBySideSurveyCTAImpressionEventData{} + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[70] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BotFeedbackMessage_SideBySideSurveyMetadata_SidebySideSurveyMetaAiAnalyticsData_SideBySideSurveyCTAImpressionEventData) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BotFeedbackMessage_SideBySideSurveyMetadata_SidebySideSurveyMetaAiAnalyticsData_SideBySideSurveyCTAImpressionEventData) ProtoMessage() { +} + +func (x *BotFeedbackMessage_SideBySideSurveyMetadata_SidebySideSurveyMetaAiAnalyticsData_SideBySideSurveyCTAImpressionEventData) ProtoReflect() protoreflect.Message { + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[70] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BotFeedbackMessage_SideBySideSurveyMetadata_SidebySideSurveyMetaAiAnalyticsData_SideBySideSurveyCTAImpressionEventData.ProtoReflect.Descriptor instead. +func (*BotFeedbackMessage_SideBySideSurveyMetadata_SidebySideSurveyMetaAiAnalyticsData_SideBySideSurveyCTAImpressionEventData) Descriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{16, 0, 0, 4} +} + +func (x *BotFeedbackMessage_SideBySideSurveyMetadata_SidebySideSurveyMetaAiAnalyticsData_SideBySideSurveyCTAImpressionEventData) GetIsSurveyExpired() bool { + if x != nil && x.IsSurveyExpired != nil { + return *x.IsSurveyExpired + } + return false +} + +type AIRichResponseCodeMetadata_AIRichResponseCodeBlock struct { + state protoimpl.MessageState `protogen:"open.v1"` + HighlightType *AIRichResponseCodeMetadata_AIRichResponseCodeHighlightType `protobuf:"varint,1,opt,name=highlightType,enum=WAWebProtobufsAICommon.AIRichResponseCodeMetadata_AIRichResponseCodeHighlightType" json:"highlightType,omitempty"` + CodeContent *string `protobuf:"bytes,2,opt,name=codeContent" json:"codeContent,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *AIRichResponseCodeMetadata_AIRichResponseCodeBlock) Reset() { + *x = AIRichResponseCodeMetadata_AIRichResponseCodeBlock{} + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[71] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *AIRichResponseCodeMetadata_AIRichResponseCodeBlock) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AIRichResponseCodeMetadata_AIRichResponseCodeBlock) ProtoMessage() {} + +func (x *AIRichResponseCodeMetadata_AIRichResponseCodeBlock) ProtoReflect() protoreflect.Message { + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[71] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AIRichResponseCodeMetadata_AIRichResponseCodeBlock.ProtoReflect.Descriptor instead. +func (*AIRichResponseCodeMetadata_AIRichResponseCodeBlock) Descriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{18, 0} +} + +func (x *AIRichResponseCodeMetadata_AIRichResponseCodeBlock) GetHighlightType() AIRichResponseCodeMetadata_AIRichResponseCodeHighlightType { + if x != nil && x.HighlightType != nil { + return *x.HighlightType + } + return AIRichResponseCodeMetadata_AI_RICH_RESPONSE_CODE_HIGHLIGHT_DEFAULT +} + +func (x *AIRichResponseCodeMetadata_AIRichResponseCodeBlock) GetCodeContent() string { + if x != nil && x.CodeContent != nil { + return *x.CodeContent + } + return "" +} + +type AIRichResponseContentItemsMetadata_AIRichResponseContentItemMetadata struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Types that are valid to be assigned to AIRichResponseContentItem: + // + // *AIRichResponseContentItemsMetadata_AIRichResponseContentItemMetadata_ReelItem + AIRichResponseContentItem isAIRichResponseContentItemsMetadata_AIRichResponseContentItemMetadata_AIRichResponseContentItem `protobuf_oneof:"aIRichResponseContentItem"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *AIRichResponseContentItemsMetadata_AIRichResponseContentItemMetadata) Reset() { + *x = AIRichResponseContentItemsMetadata_AIRichResponseContentItemMetadata{} + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[72] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *AIRichResponseContentItemsMetadata_AIRichResponseContentItemMetadata) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AIRichResponseContentItemsMetadata_AIRichResponseContentItemMetadata) ProtoMessage() {} + +func (x *AIRichResponseContentItemsMetadata_AIRichResponseContentItemMetadata) ProtoReflect() protoreflect.Message { + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[72] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AIRichResponseContentItemsMetadata_AIRichResponseContentItemMetadata.ProtoReflect.Descriptor instead. +func (*AIRichResponseContentItemsMetadata_AIRichResponseContentItemMetadata) Descriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{20, 0} +} + +func (x *AIRichResponseContentItemsMetadata_AIRichResponseContentItemMetadata) GetAIRichResponseContentItem() isAIRichResponseContentItemsMetadata_AIRichResponseContentItemMetadata_AIRichResponseContentItem { + if x != nil { + return x.AIRichResponseContentItem + } + return nil +} + +func (x *AIRichResponseContentItemsMetadata_AIRichResponseContentItemMetadata) GetReelItem() *AIRichResponseContentItemsMetadata_AIRichResponseReelItem { + if x != nil { + if x, ok := x.AIRichResponseContentItem.(*AIRichResponseContentItemsMetadata_AIRichResponseContentItemMetadata_ReelItem); ok { + return x.ReelItem + } + } + return nil +} + +type isAIRichResponseContentItemsMetadata_AIRichResponseContentItemMetadata_AIRichResponseContentItem interface { + isAIRichResponseContentItemsMetadata_AIRichResponseContentItemMetadata_AIRichResponseContentItem() +} + +type AIRichResponseContentItemsMetadata_AIRichResponseContentItemMetadata_ReelItem struct { + ReelItem *AIRichResponseContentItemsMetadata_AIRichResponseReelItem `protobuf:"bytes,1,opt,name=reelItem,oneof"` +} + +func (*AIRichResponseContentItemsMetadata_AIRichResponseContentItemMetadata_ReelItem) isAIRichResponseContentItemsMetadata_AIRichResponseContentItemMetadata_AIRichResponseContentItem() { +} + +type AIRichResponseContentItemsMetadata_AIRichResponseReelItem struct { + state protoimpl.MessageState `protogen:"open.v1"` + Title *string `protobuf:"bytes,1,opt,name=title" json:"title,omitempty"` + ProfileIconURL *string `protobuf:"bytes,2,opt,name=profileIconURL" json:"profileIconURL,omitempty"` + ThumbnailURL *string `protobuf:"bytes,3,opt,name=thumbnailURL" json:"thumbnailURL,omitempty"` + VideoURL *string `protobuf:"bytes,4,opt,name=videoURL" json:"videoURL,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *AIRichResponseContentItemsMetadata_AIRichResponseReelItem) Reset() { + *x = AIRichResponseContentItemsMetadata_AIRichResponseReelItem{} + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[73] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *AIRichResponseContentItemsMetadata_AIRichResponseReelItem) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AIRichResponseContentItemsMetadata_AIRichResponseReelItem) ProtoMessage() {} + +func (x *AIRichResponseContentItemsMetadata_AIRichResponseReelItem) ProtoReflect() protoreflect.Message { + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[73] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AIRichResponseContentItemsMetadata_AIRichResponseReelItem.ProtoReflect.Descriptor instead. +func (*AIRichResponseContentItemsMetadata_AIRichResponseReelItem) Descriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{20, 1} +} + +func (x *AIRichResponseContentItemsMetadata_AIRichResponseReelItem) GetTitle() string { + if x != nil && x.Title != nil { + return *x.Title + } + return "" +} + +func (x *AIRichResponseContentItemsMetadata_AIRichResponseReelItem) GetProfileIconURL() string { + if x != nil && x.ProfileIconURL != nil { + return *x.ProfileIconURL + } + return "" +} + +func (x *AIRichResponseContentItemsMetadata_AIRichResponseReelItem) GetThumbnailURL() string { + if x != nil && x.ThumbnailURL != nil { + return *x.ThumbnailURL + } + return "" +} + +func (x *AIRichResponseContentItemsMetadata_AIRichResponseReelItem) GetVideoURL() string { + if x != nil && x.VideoURL != nil { + return *x.VideoURL + } + return "" +} + +type AIHomeState_AIHomeOption struct { + state protoimpl.MessageState `protogen:"open.v1"` + Type *AIHomeState_AIHomeOption_AIHomeActionType `protobuf:"varint,1,opt,name=type,enum=WAWebProtobufsAICommon.AIHomeState_AIHomeOption_AIHomeActionType" json:"type,omitempty"` + Title *string `protobuf:"bytes,2,opt,name=title" json:"title,omitempty"` + PromptText *string `protobuf:"bytes,3,opt,name=promptText" json:"promptText,omitempty"` + SessionID *string `protobuf:"bytes,4,opt,name=sessionID" json:"sessionID,omitempty"` + ImageWdsIdentifier *string `protobuf:"bytes,5,opt,name=imageWdsIdentifier" json:"imageWdsIdentifier,omitempty"` + ImageTintColor *string `protobuf:"bytes,6,opt,name=imageTintColor" json:"imageTintColor,omitempty"` + ImageBackgroundColor *string `protobuf:"bytes,7,opt,name=imageBackgroundColor" json:"imageBackgroundColor,omitempty"` + CardTypeID *string `protobuf:"bytes,8,opt,name=cardTypeID" json:"cardTypeID,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *AIHomeState_AIHomeOption) Reset() { + *x = AIHomeState_AIHomeOption{} + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[74] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *AIHomeState_AIHomeOption) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AIHomeState_AIHomeOption) ProtoMessage() {} + +func (x *AIHomeState_AIHomeOption) ProtoReflect() protoreflect.Message { + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[74] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AIHomeState_AIHomeOption.ProtoReflect.Descriptor instead. +func (*AIHomeState_AIHomeOption) Descriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{22, 0} +} + +func (x *AIHomeState_AIHomeOption) GetType() AIHomeState_AIHomeOption_AIHomeActionType { + if x != nil && x.Type != nil { + return *x.Type + } + return AIHomeState_AIHomeOption_PROMPT +} + +func (x *AIHomeState_AIHomeOption) GetTitle() string { + if x != nil && x.Title != nil { + return *x.Title + } + return "" +} + +func (x *AIHomeState_AIHomeOption) GetPromptText() string { + if x != nil && x.PromptText != nil { + return *x.PromptText + } + return "" +} + +func (x *AIHomeState_AIHomeOption) GetSessionID() string { + if x != nil && x.SessionID != nil { + return *x.SessionID + } + return "" +} + +func (x *AIHomeState_AIHomeOption) GetImageWdsIdentifier() string { + if x != nil && x.ImageWdsIdentifier != nil { + return *x.ImageWdsIdentifier + } + return "" +} + +func (x *AIHomeState_AIHomeOption) GetImageTintColor() string { + if x != nil && x.ImageTintColor != nil { + return *x.ImageTintColor + } + return "" +} + +func (x *AIHomeState_AIHomeOption) GetImageBackgroundColor() string { + if x != nil && x.ImageBackgroundColor != nil { + return *x.ImageBackgroundColor + } + return "" +} + +func (x *AIHomeState_AIHomeOption) GetCardTypeID() string { + if x != nil && x.CardTypeID != nil { + return *x.CardTypeID + } + return "" +} + +type BotRenderingMetadata_Keyword struct { + state protoimpl.MessageState `protogen:"open.v1"` + Value *string `protobuf:"bytes,1,opt,name=value" json:"value,omitempty"` + AssociatedPrompts []string `protobuf:"bytes,2,rep,name=associatedPrompts" json:"associatedPrompts,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BotRenderingMetadata_Keyword) Reset() { + *x = BotRenderingMetadata_Keyword{} + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[75] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BotRenderingMetadata_Keyword) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BotRenderingMetadata_Keyword) ProtoMessage() {} + +func (x *BotRenderingMetadata_Keyword) ProtoReflect() protoreflect.Message { + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[75] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BotRenderingMetadata_Keyword.ProtoReflect.Descriptor instead. +func (*BotRenderingMetadata_Keyword) Descriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{31, 0} +} + +func (x *BotRenderingMetadata_Keyword) GetValue() string { + if x != nil && x.Value != nil { + return *x.Value + } + return "" +} + +func (x *BotRenderingMetadata_Keyword) GetAssociatedPrompts() []string { + if x != nil { + return x.AssociatedPrompts + } + return nil +} + +type InThreadSurveyMetadata_InThreadSurveyPrivacyStatementPart struct { + state protoimpl.MessageState `protogen:"open.v1"` + Text *string `protobuf:"bytes,1,opt,name=text" json:"text,omitempty"` + URL *string `protobuf:"bytes,2,opt,name=URL" json:"URL,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *InThreadSurveyMetadata_InThreadSurveyPrivacyStatementPart) Reset() { + *x = InThreadSurveyMetadata_InThreadSurveyPrivacyStatementPart{} + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[76] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *InThreadSurveyMetadata_InThreadSurveyPrivacyStatementPart) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*InThreadSurveyMetadata_InThreadSurveyPrivacyStatementPart) ProtoMessage() {} + +func (x *InThreadSurveyMetadata_InThreadSurveyPrivacyStatementPart) ProtoReflect() protoreflect.Message { + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[76] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use InThreadSurveyMetadata_InThreadSurveyPrivacyStatementPart.ProtoReflect.Descriptor instead. +func (*InThreadSurveyMetadata_InThreadSurveyPrivacyStatementPart) Descriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{35, 0} +} + +func (x *InThreadSurveyMetadata_InThreadSurveyPrivacyStatementPart) GetText() string { + if x != nil && x.Text != nil { + return *x.Text + } + return "" +} + +func (x *InThreadSurveyMetadata_InThreadSurveyPrivacyStatementPart) GetURL() string { + if x != nil && x.URL != nil { + return *x.URL + } + return "" +} + +type InThreadSurveyMetadata_InThreadSurveyOption struct { + state protoimpl.MessageState `protogen:"open.v1"` + StringValue *string `protobuf:"bytes,1,opt,name=stringValue" json:"stringValue,omitempty"` + NumericValue *uint32 `protobuf:"varint,2,opt,name=numericValue" json:"numericValue,omitempty"` + TextTranslated *string `protobuf:"bytes,3,opt,name=textTranslated" json:"textTranslated,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *InThreadSurveyMetadata_InThreadSurveyOption) Reset() { + *x = InThreadSurveyMetadata_InThreadSurveyOption{} + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[77] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *InThreadSurveyMetadata_InThreadSurveyOption) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*InThreadSurveyMetadata_InThreadSurveyOption) ProtoMessage() {} + +func (x *InThreadSurveyMetadata_InThreadSurveyOption) ProtoReflect() protoreflect.Message { + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[77] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use InThreadSurveyMetadata_InThreadSurveyOption.ProtoReflect.Descriptor instead. +func (*InThreadSurveyMetadata_InThreadSurveyOption) Descriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{35, 1} +} + +func (x *InThreadSurveyMetadata_InThreadSurveyOption) GetStringValue() string { + if x != nil && x.StringValue != nil { + return *x.StringValue + } + return "" +} + +func (x *InThreadSurveyMetadata_InThreadSurveyOption) GetNumericValue() uint32 { + if x != nil && x.NumericValue != nil { + return *x.NumericValue + } + return 0 +} + +func (x *InThreadSurveyMetadata_InThreadSurveyOption) GetTextTranslated() string { + if x != nil && x.TextTranslated != nil { + return *x.TextTranslated + } + return "" +} + +type InThreadSurveyMetadata_InThreadSurveyQuestion struct { + state protoimpl.MessageState `protogen:"open.v1"` + QuestionText *string `protobuf:"bytes,1,opt,name=questionText" json:"questionText,omitempty"` + QuestionID *string `protobuf:"bytes,2,opt,name=questionID" json:"questionID,omitempty"` + QuestionOptions []*InThreadSurveyMetadata_InThreadSurveyOption `protobuf:"bytes,3,rep,name=questionOptions" json:"questionOptions,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *InThreadSurveyMetadata_InThreadSurveyQuestion) Reset() { + *x = InThreadSurveyMetadata_InThreadSurveyQuestion{} + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[78] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *InThreadSurveyMetadata_InThreadSurveyQuestion) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*InThreadSurveyMetadata_InThreadSurveyQuestion) ProtoMessage() {} + +func (x *InThreadSurveyMetadata_InThreadSurveyQuestion) ProtoReflect() protoreflect.Message { + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[78] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use InThreadSurveyMetadata_InThreadSurveyQuestion.ProtoReflect.Descriptor instead. +func (*InThreadSurveyMetadata_InThreadSurveyQuestion) Descriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{35, 2} +} + +func (x *InThreadSurveyMetadata_InThreadSurveyQuestion) GetQuestionText() string { + if x != nil && x.QuestionText != nil { + return *x.QuestionText + } + return "" +} + +func (x *InThreadSurveyMetadata_InThreadSurveyQuestion) GetQuestionID() string { + if x != nil && x.QuestionID != nil { + return *x.QuestionID + } + return "" +} + +func (x *InThreadSurveyMetadata_InThreadSurveyQuestion) GetQuestionOptions() []*InThreadSurveyMetadata_InThreadSurveyOption { + if x != nil { + return x.QuestionOptions + } + return nil +} + +type BotUnifiedResponseMutation_MediaDetailsMetadata struct { + state protoimpl.MessageState `protogen:"open.v1"` + ID *string `protobuf:"bytes,1,opt,name=ID" json:"ID,omitempty"` + HighResMedia *BotMediaMetadata `protobuf:"bytes,2,opt,name=highResMedia" json:"highResMedia,omitempty"` + PreviewMedia *BotMediaMetadata `protobuf:"bytes,3,opt,name=previewMedia" json:"previewMedia,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BotUnifiedResponseMutation_MediaDetailsMetadata) Reset() { + *x = BotUnifiedResponseMutation_MediaDetailsMetadata{} + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[79] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BotUnifiedResponseMutation_MediaDetailsMetadata) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BotUnifiedResponseMutation_MediaDetailsMetadata) ProtoMessage() {} + +func (x *BotUnifiedResponseMutation_MediaDetailsMetadata) ProtoReflect() protoreflect.Message { + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[79] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BotUnifiedResponseMutation_MediaDetailsMetadata.ProtoReflect.Descriptor instead. +func (*BotUnifiedResponseMutation_MediaDetailsMetadata) Descriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{37, 0} +} + +func (x *BotUnifiedResponseMutation_MediaDetailsMetadata) GetID() string { + if x != nil && x.ID != nil { + return *x.ID + } + return "" +} + +func (x *BotUnifiedResponseMutation_MediaDetailsMetadata) GetHighResMedia() *BotMediaMetadata { + if x != nil { + return x.HighResMedia + } + return nil +} + +func (x *BotUnifiedResponseMutation_MediaDetailsMetadata) GetPreviewMedia() *BotMediaMetadata { + if x != nil { + return x.PreviewMedia + } + return nil +} + +type BotUnifiedResponseMutation_SideBySideMetadata struct { + state protoimpl.MessageState `protogen:"open.v1"` + PrimaryResponseID *string `protobuf:"bytes,1,opt,name=primaryResponseID" json:"primaryResponseID,omitempty"` + SurveyCtaHasRendered *bool `protobuf:"varint,2,opt,name=surveyCtaHasRendered" json:"surveyCtaHasRendered,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BotUnifiedResponseMutation_SideBySideMetadata) Reset() { + *x = BotUnifiedResponseMutation_SideBySideMetadata{} + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[80] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BotUnifiedResponseMutation_SideBySideMetadata) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BotUnifiedResponseMutation_SideBySideMetadata) ProtoMessage() {} + +func (x *BotUnifiedResponseMutation_SideBySideMetadata) ProtoReflect() protoreflect.Message { + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[80] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BotUnifiedResponseMutation_SideBySideMetadata.ProtoReflect.Descriptor instead. +func (*BotUnifiedResponseMutation_SideBySideMetadata) Descriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{37, 1} +} + +func (x *BotUnifiedResponseMutation_SideBySideMetadata) GetPrimaryResponseID() string { + if x != nil && x.PrimaryResponseID != nil { + return *x.PrimaryResponseID + } + return "" +} + +func (x *BotUnifiedResponseMutation_SideBySideMetadata) GetSurveyCtaHasRendered() bool { + if x != nil && x.SurveyCtaHasRendered != nil { + return *x.SurveyCtaHasRendered + } + return false +} + +type AIRichResponseTableMetadata_AIRichResponseTableRow struct { + state protoimpl.MessageState `protogen:"open.v1"` + Items []string `protobuf:"bytes,1,rep,name=items" json:"items,omitempty"` + IsHeading *bool `protobuf:"varint,2,opt,name=isHeading" json:"isHeading,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *AIRichResponseTableMetadata_AIRichResponseTableRow) Reset() { + *x = AIRichResponseTableMetadata_AIRichResponseTableRow{} + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[81] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *AIRichResponseTableMetadata_AIRichResponseTableRow) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AIRichResponseTableMetadata_AIRichResponseTableRow) ProtoMessage() {} + +func (x *AIRichResponseTableMetadata_AIRichResponseTableRow) ProtoReflect() protoreflect.Message { + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[81] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AIRichResponseTableMetadata_AIRichResponseTableRow.ProtoReflect.Descriptor instead. +func (*AIRichResponseTableMetadata_AIRichResponseTableRow) Descriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{48, 0} +} + +func (x *AIRichResponseTableMetadata_AIRichResponseTableRow) GetItems() []string { + if x != nil { + return x.Items + } + return nil +} + +func (x *AIRichResponseTableMetadata_AIRichResponseTableRow) GetIsHeading() bool { + if x != nil && x.IsHeading != nil { + return *x.IsHeading + } + return false +} + +type AIRichResponseLatexMetadata_AIRichResponseLatexExpression struct { + state protoimpl.MessageState `protogen:"open.v1"` + LatexExpression *string `protobuf:"bytes,1,opt,name=latexExpression" json:"latexExpression,omitempty"` + URL *string `protobuf:"bytes,2,opt,name=URL" json:"URL,omitempty"` + Width *float64 `protobuf:"fixed64,3,opt,name=width" json:"width,omitempty"` + Height *float64 `protobuf:"fixed64,4,opt,name=height" json:"height,omitempty"` + FontHeight *float64 `protobuf:"fixed64,5,opt,name=fontHeight" json:"fontHeight,omitempty"` + ImageTopPadding *float64 `protobuf:"fixed64,6,opt,name=imageTopPadding" json:"imageTopPadding,omitempty"` + ImageLeadingPadding *float64 `protobuf:"fixed64,7,opt,name=imageLeadingPadding" json:"imageLeadingPadding,omitempty"` + ImageBottomPadding *float64 `protobuf:"fixed64,8,opt,name=imageBottomPadding" json:"imageBottomPadding,omitempty"` + ImageTrailingPadding *float64 `protobuf:"fixed64,9,opt,name=imageTrailingPadding" json:"imageTrailingPadding,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *AIRichResponseLatexMetadata_AIRichResponseLatexExpression) Reset() { + *x = AIRichResponseLatexMetadata_AIRichResponseLatexExpression{} + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[82] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *AIRichResponseLatexMetadata_AIRichResponseLatexExpression) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AIRichResponseLatexMetadata_AIRichResponseLatexExpression) ProtoMessage() {} + +func (x *AIRichResponseLatexMetadata_AIRichResponseLatexExpression) ProtoReflect() protoreflect.Message { + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[82] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AIRichResponseLatexMetadata_AIRichResponseLatexExpression.ProtoReflect.Descriptor instead. +func (*AIRichResponseLatexMetadata_AIRichResponseLatexExpression) Descriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{50, 0} +} + +func (x *AIRichResponseLatexMetadata_AIRichResponseLatexExpression) GetLatexExpression() string { + if x != nil && x.LatexExpression != nil { + return *x.LatexExpression + } + return "" +} + +func (x *AIRichResponseLatexMetadata_AIRichResponseLatexExpression) GetURL() string { + if x != nil && x.URL != nil { + return *x.URL + } + return "" +} + +func (x *AIRichResponseLatexMetadata_AIRichResponseLatexExpression) GetWidth() float64 { + if x != nil && x.Width != nil { + return *x.Width + } + return 0 +} + +func (x *AIRichResponseLatexMetadata_AIRichResponseLatexExpression) GetHeight() float64 { + if x != nil && x.Height != nil { + return *x.Height + } + return 0 +} + +func (x *AIRichResponseLatexMetadata_AIRichResponseLatexExpression) GetFontHeight() float64 { + if x != nil && x.FontHeight != nil { + return *x.FontHeight + } + return 0 +} + +func (x *AIRichResponseLatexMetadata_AIRichResponseLatexExpression) GetImageTopPadding() float64 { + if x != nil && x.ImageTopPadding != nil { + return *x.ImageTopPadding + } + return 0 +} + +func (x *AIRichResponseLatexMetadata_AIRichResponseLatexExpression) GetImageLeadingPadding() float64 { + if x != nil && x.ImageLeadingPadding != nil { + return *x.ImageLeadingPadding + } + return 0 +} + +func (x *AIRichResponseLatexMetadata_AIRichResponseLatexExpression) GetImageBottomPadding() float64 { + if x != nil && x.ImageBottomPadding != nil { + return *x.ImageBottomPadding + } + return 0 +} + +func (x *AIRichResponseLatexMetadata_AIRichResponseLatexExpression) GetImageTrailingPadding() float64 { + if x != nil && x.ImageTrailingPadding != nil { + return *x.ImageTrailingPadding + } + return 0 +} + +type AIRichResponseMapMetadata_AIRichResponseMapAnnotation struct { + state protoimpl.MessageState `protogen:"open.v1"` + AnnotationNumber *uint32 `protobuf:"varint,1,opt,name=annotationNumber" json:"annotationNumber,omitempty"` + Latitude *float64 `protobuf:"fixed64,2,opt,name=latitude" json:"latitude,omitempty"` + Longitude *float64 `protobuf:"fixed64,3,opt,name=longitude" json:"longitude,omitempty"` + Title *string `protobuf:"bytes,4,opt,name=title" json:"title,omitempty"` + Body *string `protobuf:"bytes,5,opt,name=body" json:"body,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *AIRichResponseMapMetadata_AIRichResponseMapAnnotation) Reset() { + *x = AIRichResponseMapMetadata_AIRichResponseMapAnnotation{} + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[83] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *AIRichResponseMapMetadata_AIRichResponseMapAnnotation) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AIRichResponseMapMetadata_AIRichResponseMapAnnotation) ProtoMessage() {} + +func (x *AIRichResponseMapMetadata_AIRichResponseMapAnnotation) ProtoReflect() protoreflect.Message { + mi := &file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[83] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AIRichResponseMapMetadata_AIRichResponseMapAnnotation.ProtoReflect.Descriptor instead. +func (*AIRichResponseMapMetadata_AIRichResponseMapAnnotation) Descriptor() ([]byte, []int) { + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP(), []int{51, 0} +} + +func (x *AIRichResponseMapMetadata_AIRichResponseMapAnnotation) GetAnnotationNumber() uint32 { + if x != nil && x.AnnotationNumber != nil { + return *x.AnnotationNumber + } + return 0 +} + +func (x *AIRichResponseMapMetadata_AIRichResponseMapAnnotation) GetLatitude() float64 { + if x != nil && x.Latitude != nil { + return *x.Latitude + } + return 0 +} + +func (x *AIRichResponseMapMetadata_AIRichResponseMapAnnotation) GetLongitude() float64 { + if x != nil && x.Longitude != nil { + return *x.Longitude + } + return 0 +} + +func (x *AIRichResponseMapMetadata_AIRichResponseMapAnnotation) GetTitle() string { + if x != nil && x.Title != nil { + return *x.Title + } + return "" +} + +func (x *AIRichResponseMapMetadata_AIRichResponseMapAnnotation) GetBody() string { + if x != nil && x.Body != nil { + return *x.Body + } + return "" +} + +var File_waAICommon_WAWebProtobufsAICommon_proto protoreflect.FileDescriptor + +const file_waAICommon_WAWebProtobufsAICommon_proto_rawDesc = "" + + "\n" + + "'waAICommon/WAWebProtobufsAICommon.proto\x12\x16WAWebProtobufsAICommon\x1a\x17waCommon/WACommon.proto\"\xf2\x06\n" + + "\x11BotPluginMetadata\x12T\n" + + "\bprovider\x18\x01 \x01(\x0e28.WAWebProtobufsAICommon.BotPluginMetadata.SearchProviderR\bprovider\x12T\n" + + "\n" + + "pluginType\x18\x02 \x01(\x0e24.WAWebProtobufsAICommon.BotPluginMetadata.PluginTypeR\n" + + "pluginType\x12(\n" + + "\x0fthumbnailCDNURL\x18\x03 \x01(\tR\x0fthumbnailCDNURL\x12.\n" + + "\x12profilePhotoCDNURL\x18\x04 \x01(\tR\x12profilePhotoCDNURL\x12,\n" + + "\x11searchProviderURL\x18\x05 \x01(\tR\x11searchProviderURL\x12&\n" + + "\x0ereferenceIndex\x18\x06 \x01(\rR\x0ereferenceIndex\x12.\n" + + "\x12expectedLinksCount\x18\a \x01(\rR\x12expectedLinksCount\x12 \n" + + "\vsearchQuery\x18\t \x01(\tR\vsearchQuery\x12L\n" + + "\x16parentPluginMessageKey\x18\n" + + " \x01(\v2\x14.WACommon.MessageKeyR\x16parentPluginMessageKey\x12^\n" + + "\x0fdeprecatedField\x18\v \x01(\x0e24.WAWebProtobufsAICommon.BotPluginMetadata.PluginTypeR\x0fdeprecatedField\x12`\n" + + "\x10parentPluginType\x18\f \x01(\x0e24.WAWebProtobufsAICommon.BotPluginMetadata.PluginTypeR\x10parentPluginType\x12$\n" + + "\rfaviconCDNURL\x18\r \x01(\tR\rfaviconCDNURL\"7\n" + + "\n" + + "PluginType\x12\x12\n" + + "\x0eUNKNOWN_PLUGIN\x10\x00\x12\t\n" + + "\x05REELS\x10\x01\x12\n" + + "\n" + + "\x06SEARCH\x10\x02\"@\n" + + "\x0eSearchProvider\x12\v\n" + + "\aUNKNOWN\x10\x00\x12\b\n" + + "\x04BING\x10\x01\x12\n" + + "\n" + + "\x06GOOGLE\x10\x02\x12\v\n" + + "\aSUPPORT\x10\x03\"\x9d\x01\n" + + "\x10BotLinkedAccount\x12Q\n" + + "\x04type\x18\x01 \x01(\x0e2=.WAWebProtobufsAICommon.BotLinkedAccount.BotLinkedAccountTypeR\x04type\"6\n" + + "\x14BotLinkedAccountType\x12\x1e\n" + + "\x1aBOT_LINKED_ACCOUNT_TYPE_1P\x10\x00\"\xae\x02\n" + + "$BotSignatureVerificationUseCaseProof\x12\x18\n" + + "\aversion\x18\x01 \x01(\x05R\aversion\x12j\n" + + "\auseCase\x18\x02 \x01(\x0e2P.WAWebProtobufsAICommon.BotSignatureVerificationUseCaseProof.BotSignatureUseCaseR\auseCase\x12\x1c\n" + + "\tsignature\x18\x03 \x01(\fR\tsignature\x12*\n" + + "\x10certificateChain\x18\x04 \x03(\fR\x10certificateChain\"6\n" + + "\x13BotSignatureUseCase\x12\x0f\n" + + "\vUNSPECIFIED\x10\x00\x12\x0e\n" + + "\n" + + "WA_BOT_MSG\x10\x01\"\xef\x01\n" + + "\x1bBotPromotionMessageMetadata\x12j\n" + + "\rpromotionType\x18\x01 \x01(\x0e2D.WAWebProtobufsAICommon.BotPromotionMessageMetadata.BotPromotionTypeR\rpromotionType\x12 \n" + + "\vbuttonTitle\x18\x02 \x01(\tR\vbuttonTitle\"B\n" + + "\x10BotPromotionType\x12\x10\n" + + "\fUNKNOWN_TYPE\x10\x00\x12\a\n" + + "\x03C50\x10\x01\x12\x13\n" + + "\x0fSURVEY_PLATFORM\x10\x02\"\xf6\x02\n" + + "\x10BotMediaMetadata\x12\x1e\n" + + "\n" + + "fileSHA256\x18\x01 \x01(\tR\n" + + "fileSHA256\x12\x1a\n" + + "\bmediaKey\x18\x02 \x01(\tR\bmediaKey\x12$\n" + + "\rfileEncSHA256\x18\x03 \x01(\tR\rfileEncSHA256\x12\x1e\n" + + "\n" + + "directPath\x18\x04 \x01(\tR\n" + + "directPath\x12,\n" + + "\x11mediaKeyTimestamp\x18\x05 \x01(\x03R\x11mediaKeyTimestamp\x12\x1a\n" + + "\bmimetype\x18\x06 \x01(\tR\bmimetype\x12b\n" + + "\x0forientationType\x18\a \x01(\x0e28.WAWebProtobufsAICommon.BotMediaMetadata.OrientationTypeR\x0forientationType\"2\n" + + "\x0fOrientationType\x12\n" + + "\n" + + "\x06CENTER\x10\x01\x12\b\n" + + "\x04LEFT\x10\x02\x12\t\n" + + "\x05RIGHT\x10\x03\"\xe5\x03\n" + + "\x13BotReminderMetadata\x12B\n" + + "\x11requestMessageKey\x18\x01 \x01(\v2\x14.WACommon.MessageKeyR\x11requestMessageKey\x12R\n" + + "\x06action\x18\x02 \x01(\x0e2:.WAWebProtobufsAICommon.BotReminderMetadata.ReminderActionR\x06action\x12\x12\n" + + "\x04name\x18\x03 \x01(\tR\x04name\x122\n" + + "\x14nextTriggerTimestamp\x18\x04 \x01(\x04R\x14nextTriggerTimestamp\x12[\n" + + "\tfrequency\x18\x05 \x01(\x0e2=.WAWebProtobufsAICommon.BotReminderMetadata.ReminderFrequencyR\tfrequency\"O\n" + + "\x11ReminderFrequency\x12\b\n" + + "\x04ONCE\x10\x01\x12\t\n" + + "\x05DAILY\x10\x02\x12\n" + + "\n" + + "\x06WEEKLY\x10\x03\x12\f\n" + + "\bBIWEEKLY\x10\x04\x12\v\n" + + "\aMONTHLY\x10\x05\"@\n" + + "\x0eReminderAction\x12\n" + + "\n" + + "\x06NOTIFY\x10\x01\x12\n" + + "\n" + + "\x06CREATE\x10\x02\x12\n" + + "\n" + + "\x06DELETE\x10\x03\x12\n" + + "\n" + + "\x06UPDATE\x10\x04\"\x97\x03\n" + + "\x10BotModelMetadata\x12P\n" + + "\tmodelType\x18\x01 \x01(\x0e22.WAWebProtobufsAICommon.BotModelMetadata.ModelTypeR\tmodelType\x12k\n" + + "\x12premiumModelStatus\x18\x02 \x01(\x0e2;.WAWebProtobufsAICommon.BotModelMetadata.PremiumModelStatusR\x12premiumModelStatus\x12,\n" + + "\x11modelNameOverride\x18\x03 \x01(\tR\x11modelNameOverride\"O\n" + + "\x12PremiumModelStatus\x12\x12\n" + + "\x0eUNKNOWN_STATUS\x10\x00\x12\r\n" + + "\tAVAILABLE\x10\x01\x12\x16\n" + + "\x12QUOTA_EXCEED_LIMIT\x10\x02\"E\n" + + "\tModelType\x12\x10\n" + + "\fUNKNOWN_TYPE\x10\x00\x12\x0e\n" + + "\n" + + "LLAMA_PROD\x10\x01\x12\x16\n" + + "\x12LLAMA_PROD_PREMIUM\x10\x02\"\xc6\x0e\n" + + "\x1cBotProgressIndicatorMetadata\x120\n" + + "\x13progressDescription\x18\x01 \x01(\tR\x13progressDescription\x12r\n" + + "\rstepsMetadata\x18\x02 \x03(\v2L.WAWebProtobufsAICommon.BotProgressIndicatorMetadata.BotPlanningStepMetadataR\rstepsMetadata\x128\n" + + "\x17estimatedCompletionTime\x18\x03 \x01(\x03R\x17estimatedCompletionTime\x1a\xc5\f\n" + + "\x17BotPlanningStepMetadata\x12 \n" + + "\vstatusTitle\x18\x01 \x01(\tR\vstatusTitle\x12\x1e\n" + + "\n" + + "statusBody\x18\x02 \x01(\tR\n" + + "statusBody\x12\x97\x01\n" + + "\x0fsourcesMetadata\x18\x03 \x03(\v2m.WAWebProtobufsAICommon.BotProgressIndicatorMetadata.BotPlanningStepMetadata.BotPlanningSearchSourcesMetadataR\x0fsourcesMetadata\x12w\n" + + "\x06status\x18\x04 \x01(\x0e2_.WAWebProtobufsAICommon.BotProgressIndicatorMetadata.BotPlanningStepMetadata.PlanningStepStatusR\x06status\x12 \n" + + "\visReasoning\x18\x05 \x01(\bR\visReasoning\x12*\n" + + "\x10isEnhancedSearch\x18\x06 \x01(\bR\x10isEnhancedSearch\x12\x87\x01\n" + + "\bsections\x18\a \x03(\v2k.WAWebProtobufsAICommon.BotProgressIndicatorMetadata.BotPlanningStepMetadata.BotPlanningStepSectionMetadataR\bsections\x1a\xe0\x02\n" + + " BotPlanningSearchSourcesMetadata\x12 \n" + + "\vsourceTitle\x18\x01 \x01(\tR\vsourceTitle\x12\xaa\x01\n" + + "\bprovider\x18\x02 \x01(\x0e2\x8d\x01.WAWebProtobufsAICommon.BotProgressIndicatorMetadata.BotPlanningStepMetadata.BotPlanningSearchSourcesMetadata.BotPlanningSearchSourceProviderR\bprovider\x12\x1c\n" + + "\tsourceURL\x18\x03 \x01(\tR\tsourceURL\"O\n" + + "\x1fBotPlanningSearchSourceProvider\x12\v\n" + + "\aUNKNOWN\x10\x00\x12\t\n" + + "\x05OTHER\x10\x01\x12\n" + + "\n" + + "\x06GOOGLE\x10\x02\x12\b\n" + + "\x04BING\x10\x03\x1a\xff\x01\n" + + "\x1eBotPlanningStepSectionMetadata\x12\"\n" + + "\fsectionTitle\x18\x01 \x01(\tR\fsectionTitle\x12 \n" + + "\vsectionBody\x18\x02 \x01(\tR\vsectionBody\x12\x96\x01\n" + + "\x0fsourcesMetadata\x18\x03 \x03(\v2l.WAWebProtobufsAICommon.BotProgressIndicatorMetadata.BotPlanningStepMetadata.BotPlanningSearchSourceMetadataR\x0fsourcesMetadata\x1a\xf8\x01\n" + + "\x1fBotPlanningSearchSourceMetadata\x12\x14\n" + + "\x05title\x18\x01 \x01(\tR\x05title\x12\x80\x01\n" + + "\bprovider\x18\x02 \x01(\x0e2d.WAWebProtobufsAICommon.BotProgressIndicatorMetadata.BotPlanningStepMetadata.BotSearchSourceProviderR\bprovider\x12\x1c\n" + + "\tsourceURL\x18\x03 \x01(\tR\tsourceURL\x12\x1e\n" + + "\n" + + "favIconURL\x18\x04 \x01(\tR\n" + + "favIconURL\"P\n" + + "\x17BotSearchSourceProvider\x12\x14\n" + + "\x10UNKNOWN_PROVIDER\x10\x00\x12\t\n" + + "\x05OTHER\x10\x01\x12\n" + + "\n" + + "\x06GOOGLE\x10\x02\x12\b\n" + + "\x04BING\x10\x03\"K\n" + + "\x12PlanningStepStatus\x12\v\n" + + "\aUNKNOWN\x10\x00\x12\v\n" + + "\aPLANNED\x10\x01\x12\r\n" + + "\tEXECUTING\x10\x02\x12\f\n" + + "\bFINISHED\x10\x03\"\x85\x10\n" + + "\x15BotCapabilityMetadata\x12c\n" + + "\fcapabilities\x18\x01 \x03(\x0e2?.WAWebProtobufsAICommon.BotCapabilityMetadata.BotCapabilityTypeR\fcapabilities\"\x86\x0f\n" + + "\x11BotCapabilityType\x12\v\n" + + "\aUNKNOWN\x10\x00\x12\x16\n" + + "\x12PROGRESS_INDICATOR\x10\x01\x12\x19\n" + + "\x15RICH_RESPONSE_HEADING\x10\x02\x12\x1d\n" + + "\x19RICH_RESPONSE_NESTED_LIST\x10\x03\x12\r\n" + + "\tAI_MEMORY\x10\x04\x12 \n" + + "\x1cRICH_RESPONSE_THREAD_SURFING\x10\x05\x12\x17\n" + + "\x13RICH_RESPONSE_TABLE\x10\x06\x12\x16\n" + + "\x12RICH_RESPONSE_CODE\x10\a\x12%\n" + + "!RICH_RESPONSE_STRUCTURED_RESPONSE\x10\b\x12\x1e\n" + + "\x1aRICH_RESPONSE_INLINE_IMAGE\x10\t\x12#\n" + + "\x1fWA_IG_1P_PLUGIN_RANKING_CONTROL\x10\n" + + "\x12$\n" + + " WA_IG_1P_PLUGIN_RANKING_UPDATE_1\x10\v\x12$\n" + + " WA_IG_1P_PLUGIN_RANKING_UPDATE_2\x10\f\x12$\n" + + " WA_IG_1P_PLUGIN_RANKING_UPDATE_3\x10\r\x12$\n" + + " WA_IG_1P_PLUGIN_RANKING_UPDATE_4\x10\x0e\x12$\n" + + " WA_IG_1P_PLUGIN_RANKING_UPDATE_5\x10\x0f\x12$\n" + + " WA_IG_1P_PLUGIN_RANKING_UPDATE_6\x10\x10\x12$\n" + + " WA_IG_1P_PLUGIN_RANKING_UPDATE_7\x10\x11\x12$\n" + + " WA_IG_1P_PLUGIN_RANKING_UPDATE_8\x10\x12\x12$\n" + + " WA_IG_1P_PLUGIN_RANKING_UPDATE_9\x10\x13\x12%\n" + + "!WA_IG_1P_PLUGIN_RANKING_UPDATE_10\x10\x14\x12\x1d\n" + + "\x19RICH_RESPONSE_SUB_HEADING\x10\x15\x12\x1c\n" + + "\x18RICH_RESPONSE_GRID_IMAGE\x10\x16\x12\x18\n" + + "\x14AI_STUDIO_UGC_MEMORY\x10\x17\x12\x17\n" + + "\x13RICH_RESPONSE_LATEX\x10\x18\x12\x16\n" + + "\x12RICH_RESPONSE_MAPS\x10\x19\x12\x1e\n" + + "\x1aRICH_RESPONSE_INLINE_REELS\x10\x1a\x12\x14\n" + + "\x10AGENTIC_PLANNING\x10\x1b\x12\x13\n" + + "\x0fACCOUNT_LINKING\x10\x1c\x12\x1c\n" + + "\x18STREAMING_DISAGGREGATION\x10\x1d\x12\x1f\n" + + "\x1bRICH_RESPONSE_GRID_IMAGE_3P\x10\x1e\x12\x1e\n" + + "\x1aRICH_RESPONSE_LATEX_INLINE\x10\x1f\x12\x0e\n" + + "\n" + + "QUERY_PLAN\x10 \x12\x15\n" + + "\x11PROACTIVE_MESSAGE\x10!\x12\"\n" + + "\x1eRICH_RESPONSE_UNIFIED_RESPONSE\x10\"\x12\x15\n" + + "\x11PROMOTION_MESSAGE\x10#\x12\x1b\n" + + "\x17SIMPLIFIED_PROFILE_PAGE\x10$\x12$\n" + + " RICH_RESPONSE_SOURCES_IN_MESSAGE\x10%\x12%\n" + + "!RICH_RESPONSE_SIDE_BY_SIDE_SURVEY\x10&\x12(\n" + + "$RICH_RESPONSE_UNIFIED_TEXT_COMPONENT\x10'\x12\x14\n" + + "\x10AI_SHARED_MEMORY\x10(\x12!\n" + + "\x1dRICH_RESPONSE_UNIFIED_SOURCES\x10)\x12*\n" + + "&RICH_RESPONSE_UNIFIED_DOMAIN_CITATIONS\x10*\x12)\n" + + "%RICH_RESPONSE_UR_INLINE_REELS_ENABLED\x10+\x12'\n" + + "#RICH_RESPONSE_UR_MEDIA_GRID_ENABLED\x10,\x12*\n" + + "&RICH_RESPONSE_UR_TIMESTAMP_PLACEHOLDER\x10-\x12\x1f\n" + + "\x1bRICH_RESPONSE_IN_APP_SURVEY\x10.\x12\x1e\n" + + "\x1aAI_RESPONSE_MODEL_BRANDING\x10/\x12'\n" + + "#SESSION_TRANSPARENCY_SYSTEM_MESSAGE\x100\x12\x1e\n" + + "\x1aRICH_RESPONSE_UR_REASONING\x101\x12(\n" + + "$RICH_RESPONSE_UR_ZEITGEIST_CITATIONS\x102\x12'\n" + + "#RICH_RESPONSE_UR_ZEITGEIST_CAROUSEL\x103\x12 \n" + + "\x1cAI_IMAGINE_LOADING_INDICATOR\x104\x12\x1c\n" + + "\x18RICH_RESPONSE_UR_IMAGINE\x105\x12-\n" + + ")AI_IMAGINE_UR_TO_NATIVE_LOADING_INDICATOR\x106\x12\"\n" + + "\x1eRICH_RESPONSE_UR_BLOKS_ENABLED\x107\x12&\n" + + "\"RICH_RESPONSE_INLINE_LINKS_ENABLED\x108\x12\"\n" + + "\x1eRICH_RESPONSE_UR_IMAGINE_VIDEO\x109\"\xd8\x01\n" + + "\x18BotModeSelectionMetadata\x12Y\n" + + "\x04mode\x18\x01 \x03(\x0e2E.WAWebProtobufsAICommon.BotModeSelectionMetadata.BotUserSelectionModeR\x04mode\x12\"\n" + + "\foverrideMode\x18\x02 \x03(\rR\foverrideMode\"=\n" + + "\x14BotUserSelectionMode\x12\x10\n" + + "\fDEFAULT_MODE\x10\x00\x12\x13\n" + + "\x0fTHINK_HARD_MODE\x10\x01\"\xb5\x03\n" + + "\x10BotQuotaMetadata\x12z\n" + + "\x17botFeatureQuotaMetadata\x18\x01 \x03(\v2@.WAWebProtobufsAICommon.BotQuotaMetadata.BotFeatureQuotaMetadataR\x17botFeatureQuotaMetadata\x1a\xa4\x02\n" + + "\x17BotFeatureQuotaMetadata\x12q\n" + + "\vfeatureType\x18\x01 \x01(\x0e2O.WAWebProtobufsAICommon.BotQuotaMetadata.BotFeatureQuotaMetadata.BotFeatureTypeR\vfeatureType\x12&\n" + + "\x0eremainingQuota\x18\x02 \x01(\rR\x0eremainingQuota\x120\n" + + "\x13expirationTimestamp\x18\x03 \x01(\x04R\x13expirationTimestamp\"<\n" + + "\x0eBotFeatureType\x12\x13\n" + + "\x0fUNKNOWN_FEATURE\x10\x00\x12\x15\n" + + "\x11REASONING_FEATURE\x10\x01\"\xd8\x01\n" + + "\x12BotImagineMetadata\x12X\n" + + "\vimagineType\x18\x01 \x01(\x0e26.WAWebProtobufsAICommon.BotImagineMetadata.ImagineTypeR\vimagineType\x12 \n" + + "\vshortPrompt\x18\x02 \x01(\tR\vshortPrompt\"F\n" + + "\vImagineType\x12\v\n" + + "\aUNKNOWN\x10\x00\x12\v\n" + + "\aIMAGINE\x10\x01\x12\b\n" + + "\x04MEMU\x10\x02\x12\t\n" + + "\x05FLASH\x10\x03\x12\b\n" + + "\x04EDIT\x10\x04\"\xc3\x02\n" + + "\x18BotAgeCollectionMetadata\x124\n" + + "\x15ageCollectionEligible\x18\x01 \x01(\bR\x15ageCollectionEligible\x12N\n" + + "\"shouldTriggerAgeCollectionOnClient\x18\x02 \x01(\bR\"shouldTriggerAgeCollectionOnClient\x12p\n" + + "\x11ageCollectionType\x18\x03 \x01(\x0e2B.WAWebProtobufsAICommon.BotAgeCollectionMetadata.AgeCollectionTypeR\x11ageCollectionType\"/\n" + + "\x11AgeCollectionType\x12\x0e\n" + + "\n" + + "O18_BINARY\x10\x00\x12\n" + + "\n" + + "\x06WAFFLE\x10\x01\"\x96\x04\n" + + "\x12BotSourcesMetadata\x12R\n" + + "\asources\x18\x01 \x03(\v28.WAWebProtobufsAICommon.BotSourcesMetadata.BotSourceItemR\asources\x1a\xab\x03\n" + + "\rBotSourceItem\x12c\n" + + "\bprovider\x18\x01 \x01(\x0e2G.WAWebProtobufsAICommon.BotSourcesMetadata.BotSourceItem.SourceProviderR\bprovider\x12(\n" + + "\x0fthumbnailCDNURL\x18\x02 \x01(\tR\x0fthumbnailCDNURL\x12,\n" + + "\x11sourceProviderURL\x18\x03 \x01(\tR\x11sourceProviderURL\x12 \n" + + "\vsourceQuery\x18\x04 \x01(\tR\vsourceQuery\x12$\n" + + "\rfaviconCDNURL\x18\x05 \x01(\tR\rfaviconCDNURL\x12&\n" + + "\x0ecitationNumber\x18\x06 \x01(\rR\x0ecitationNumber\x12 \n" + + "\vsourceTitle\x18\a \x01(\tR\vsourceTitle\"K\n" + + "\x0eSourceProvider\x12\v\n" + + "\aUNKNOWN\x10\x00\x12\b\n" + + "\x04BING\x10\x01\x12\n" + + "\n" + + "\x06GOOGLE\x10\x02\x12\v\n" + + "\aSUPPORT\x10\x03\x12\t\n" + + "\x05OTHER\x10\x04\"\xa7\x01\n" + + "\x10BotMessageOrigin\x12Q\n" + + "\x04type\x18\x01 \x01(\x0e2=.WAWebProtobufsAICommon.BotMessageOrigin.BotMessageOriginTypeR\x04type\"@\n" + + "\x14BotMessageOriginType\x12(\n" + + "$BOT_MESSAGE_ORIGIN_TYPE_AI_INITIATED\x10\x00\"\x96\x03\n" + + "\fAIThreadInfo\x12W\n" + + "\n" + + "serverInfo\x18\x01 \x01(\v27.WAWebProtobufsAICommon.AIThreadInfo.AIThreadServerInfoR\n" + + "serverInfo\x12W\n" + + "\n" + + "clientInfo\x18\x02 \x01(\v27.WAWebProtobufsAICommon.AIThreadInfo.AIThreadClientInfoR\n" + + "clientInfo\x1a\xa7\x01\n" + + "\x12AIThreadClientInfo\x12X\n" + + "\x04type\x18\x01 \x01(\x0e2D.WAWebProtobufsAICommon.AIThreadInfo.AIThreadClientInfo.AIThreadTypeR\x04type\"7\n" + + "\fAIThreadType\x12\v\n" + + "\aUNKNOWN\x10\x00\x12\v\n" + + "\aDEFAULT\x10\x01\x12\r\n" + + "\tINCOGNITO\x10\x02\x1a*\n" + + "\x12AIThreadServerInfo\x12\x14\n" + + "\x05title\x18\x01 \x01(\tR\x05title\"\xe1\x1f\n" + + "\x12BotFeedbackMessage\x124\n" + + "\n" + + "messageKey\x18\x01 \x01(\v2\x14.WACommon.MessageKeyR\n" + + "messageKey\x12N\n" + + "\x04kind\x18\x02 \x01(\x0e2:.WAWebProtobufsAICommon.BotFeedbackMessage.BotFeedbackKindR\x04kind\x12\x12\n" + + "\x04text\x18\x03 \x01(\tR\x04text\x12\"\n" + + "\fkindNegative\x18\x04 \x01(\x04R\fkindNegative\x12\"\n" + + "\fkindPositive\x18\x05 \x01(\x04R\fkindPositive\x12U\n" + + "\n" + + "kindReport\x18\x06 \x01(\x0e25.WAWebProtobufsAICommon.BotFeedbackMessage.ReportKindR\n" + + "kindReport\x12\x7f\n" + + "\x18sideBySideSurveyMetadata\x18\a \x01(\v2C.WAWebProtobufsAICommon.BotFeedbackMessage.SideBySideSurveyMetadataR\x18sideBySideSurveyMetadata\x1a\xf4\x12\n" + + "\x18SideBySideSurveyMetadata\x12,\n" + + "\x11selectedRequestID\x18\x01 \x01(\tR\x11selectedRequestID\x12\x1a\n" + + "\bsurveyID\x18\x02 \x01(\rR\bsurveyID\x12*\n" + + "\x10simonSessionFbid\x18\x03 \x01(\tR\x10simonSessionFbid\x12\"\n" + + "\fresponseOtid\x18\x04 \x01(\tR\fresponseOtid\x12<\n" + + "\x19responseTimestampMSString\x18\x05 \x01(\tR\x19responseTimestampMSString\x12<\n" + + "\x19isSelectedResponsePrimary\x18\x06 \x01(\bR\x19isSelectedResponsePrimary\x12(\n" + + "\x0fmessageIDToEdit\x18\a \x01(\tR\x0fmessageIDToEdit\x12\x87\x01\n" + + "\ranalyticsData\x18\b \x01(\v2a.WAWebProtobufsAICommon.BotFeedbackMessage.SideBySideSurveyMetadata.SideBySideSurveyAnalyticsDataR\ranalyticsData\x12\x99\x01\n" + + "\x13metaAiAnalyticsData\x18\t \x01(\v2g.WAWebProtobufsAICommon.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsDataR\x13metaAiAnalyticsData\x1a\xd7\f\n" + + "#SidebySideSurveyMetaAiAnalyticsData\x12\x1a\n" + + "\bsurveyID\x18\x01 \x01(\rR\bsurveyID\x12,\n" + + "\x11primaryResponseID\x18\x02 \x01(\tR\x11primaryResponseID\x12 \n" + + "\vtestArmName\x18\x03 \x01(\tR\vtestArmName\x12,\n" + + "\x11timestampMSString\x18\x04 \x01(\tR\x11timestampMSString\x12\xbf\x01\n" + + "\x12ctaImpressionEvent\x18\x05 \x01(\v2\x8e\x01.WAWebProtobufsAICommon.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData.SideBySideSurveyCTAImpressionEventDataR\x12ctaImpressionEvent\x12\xb0\x01\n" + + "\rctaClickEvent\x18\x06 \x01(\v2\x89\x01.WAWebProtobufsAICommon.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData.SideBySideSurveyCTAClickEventDataR\rctaClickEvent\x12\xc2\x01\n" + + "\x13cardImpressionEvent\x18\a \x01(\v2\x8f\x01.WAWebProtobufsAICommon.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData.SideBySideSurveyCardImpressionEventDataR\x13cardImpressionEvent\x12\xb0\x01\n" + + "\rresponseEvent\x18\b \x01(\v2\x89\x01.WAWebProtobufsAICommon.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData.SideBySideSurveyResponseEventDataR\rresponseEvent\x12\xad\x01\n" + + "\fabandonEvent\x18\t \x01(\v2\x88\x01.WAWebProtobufsAICommon.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData.SideBySideSurveyAbandonEventDataR\fabandonEvent\x1a^\n" + + " SideBySideSurveyAbandonEventData\x12:\n" + + "\x18abandonDwellTimeMSString\x18\x01 \x01(\tR\x18abandonDwellTimeMSString\x1a\x91\x01\n" + + "!SideBySideSurveyResponseEventData\x12<\n" + + "\x19responseDwellTimeMSString\x18\x01 \x01(\tR\x19responseDwellTimeMSString\x12.\n" + + "\x12selectedResponseID\x18\x02 \x01(\tR\x12selectedResponseID\x1a)\n" + + "'SideBySideSurveyCardImpressionEventData\x1a\x85\x01\n" + + "!SideBySideSurveyCTAClickEventData\x12(\n" + + "\x0fisSurveyExpired\x18\x01 \x01(\bR\x0fisSurveyExpired\x126\n" + + "\x16clickDwellTimeMSString\x18\x02 \x01(\tR\x16clickDwellTimeMSString\x1aR\n" + + "&SideBySideSurveyCTAImpressionEventData\x12(\n" + + "\x0fisSurveyExpired\x18\x01 \x01(\bR\x0fisSurveyExpired\x1a\x97\x01\n" + + "\x1dSideBySideSurveyAnalyticsData\x12\x1e\n" + + "\n" + + "tessaEvent\x18\x01 \x01(\tR\n" + + "tessaEvent\x12*\n" + + "\x10tessaSessionFbid\x18\x02 \x01(\tR\x10tessaSessionFbid\x12*\n" + + "\x10simonSessionFbid\x18\x03 \x01(\tR\x10simonSessionFbid\"#\n" + + "\n" + + "ReportKind\x12\b\n" + + "\x04NONE\x10\x00\x12\v\n" + + "\aGENERIC\x10\x01\"M\n" + + "\x1fBotFeedbackKindMultiplePositive\x12*\n" + + "&BOT_FEEDBACK_MULTIPLE_POSITIVE_GENERIC\x10\x01\"\xcb\x03\n" + + "\x1fBotFeedbackKindMultipleNegative\x12*\n" + + "&BOT_FEEDBACK_MULTIPLE_NEGATIVE_GENERIC\x10\x01\x12*\n" + + "&BOT_FEEDBACK_MULTIPLE_NEGATIVE_HELPFUL\x10\x02\x12.\n" + + "*BOT_FEEDBACK_MULTIPLE_NEGATIVE_INTERESTING\x10\x04\x12+\n" + + "'BOT_FEEDBACK_MULTIPLE_NEGATIVE_ACCURATE\x10\b\x12'\n" + + "#BOT_FEEDBACK_MULTIPLE_NEGATIVE_SAFE\x10\x10\x12(\n" + + "$BOT_FEEDBACK_MULTIPLE_NEGATIVE_OTHER\x10 \x12*\n" + + "&BOT_FEEDBACK_MULTIPLE_NEGATIVE_REFUSED\x10@\x12:\n" + + "5BOT_FEEDBACK_MULTIPLE_NEGATIVE_NOT_VISUALLY_APPEALING\x10\x80\x01\x128\n" + + "3BOT_FEEDBACK_MULTIPLE_NEGATIVE_NOT_RELEVANT_TO_TEXT\x10\x80\x02\"\xd7\x04\n" + + "\x0fBotFeedbackKind\x12\x19\n" + + "\x15BOT_FEEDBACK_POSITIVE\x10\x00\x12!\n" + + "\x1dBOT_FEEDBACK_NEGATIVE_GENERIC\x10\x01\x12!\n" + + "\x1dBOT_FEEDBACK_NEGATIVE_HELPFUL\x10\x02\x12%\n" + + "!BOT_FEEDBACK_NEGATIVE_INTERESTING\x10\x03\x12\"\n" + + "\x1eBOT_FEEDBACK_NEGATIVE_ACCURATE\x10\x04\x12\x1e\n" + + "\x1aBOT_FEEDBACK_NEGATIVE_SAFE\x10\x05\x12\x1f\n" + + "\x1bBOT_FEEDBACK_NEGATIVE_OTHER\x10\x06\x12!\n" + + "\x1dBOT_FEEDBACK_NEGATIVE_REFUSED\x10\a\x120\n" + + ",BOT_FEEDBACK_NEGATIVE_NOT_VISUALLY_APPEALING\x10\b\x12.\n" + + "*BOT_FEEDBACK_NEGATIVE_NOT_RELEVANT_TO_TEXT\x10\t\x12&\n" + + "\"BOT_FEEDBACK_NEGATIVE_PERSONALIZED\x10\n" + + "\x12!\n" + + "\x1dBOT_FEEDBACK_NEGATIVE_CLARITY\x10\v\x125\n" + + "1BOT_FEEDBACK_NEGATIVE_DOESNT_LOOK_LIKE_THE_PERSON\x10\f\x125\n" + + "1BOT_FEEDBACK_NEGATIVE_HALLUCINATION_INTERNAL_ONLY\x10\r\x12\x19\n" + + "\x15BOT_FEEDBACK_NEGATIVE\x10\x0e\"\xdd\x03\n" + + "!AIRichResponseInlineImageMetadata\x12J\n" + + "\bimageURL\x18\x01 \x01(\v2..WAWebProtobufsAICommon.AIRichResponseImageURLR\bimageURL\x12\x1c\n" + + "\timageText\x18\x02 \x01(\tR\timageText\x12t\n" + + "\talignment\x18\x03 \x01(\x0e2V.WAWebProtobufsAICommon.AIRichResponseInlineImageMetadata.AIRichResponseImageAlignmentR\talignment\x12\x1e\n" + + "\n" + + "tapLinkURL\x18\x04 \x01(\tR\n" + + "tapLinkURL\"\xb7\x01\n" + + "\x1cAIRichResponseImageAlignment\x121\n" + + "-AI_RICH_RESPONSE_IMAGE_LAYOUT_LEADING_ALIGNED\x10\x00\x122\n" + + ".AI_RICH_RESPONSE_IMAGE_LAYOUT_TRAILING_ALIGNED\x10\x01\x120\n" + + ",AI_RICH_RESPONSE_IMAGE_LAYOUT_CENTER_ALIGNED\x10\x02\"\x93\x05\n" + + "\x1aAIRichResponseCodeMetadata\x12\"\n" + + "\fcodeLanguage\x18\x01 \x01(\tR\fcodeLanguage\x12j\n" + + "\n" + + "codeBlocks\x18\x02 \x03(\v2J.WAWebProtobufsAICommon.AIRichResponseCodeMetadata.AIRichResponseCodeBlockR\n" + + "codeBlocks\x1a\xb5\x01\n" + + "\x17AIRichResponseCodeBlock\x12x\n" + + "\rhighlightType\x18\x01 \x01(\x0e2R.WAWebProtobufsAICommon.AIRichResponseCodeMetadata.AIRichResponseCodeHighlightTypeR\rhighlightType\x12 \n" + + "\vcodeContent\x18\x02 \x01(\tR\vcodeContent\"\xac\x02\n" + + "\x1fAIRichResponseCodeHighlightType\x12+\n" + + "'AI_RICH_RESPONSE_CODE_HIGHLIGHT_DEFAULT\x10\x00\x12+\n" + + "'AI_RICH_RESPONSE_CODE_HIGHLIGHT_KEYWORD\x10\x01\x12*\n" + + "&AI_RICH_RESPONSE_CODE_HIGHLIGHT_METHOD\x10\x02\x12*\n" + + "&AI_RICH_RESPONSE_CODE_HIGHLIGHT_STRING\x10\x03\x12*\n" + + "&AI_RICH_RESPONSE_CODE_HIGHLIGHT_NUMBER\x10\x04\x12+\n" + + "'AI_RICH_RESPONSE_CODE_HIGHLIGHT_COMMENT\x10\x05\"\x92\x03\n" + + "\x1dAIRichResponseDynamicMetadata\x12k\n" + + "\x04type\x18\x01 \x01(\x0e2W.WAWebProtobufsAICommon.AIRichResponseDynamicMetadata.AIRichResponseDynamicMetadataTypeR\x04type\x12\x18\n" + + "\aversion\x18\x02 \x01(\x04R\aversion\x12\x10\n" + + "\x03URL\x18\x03 \x01(\tR\x03URL\x12\x1c\n" + + "\tloopCount\x18\x04 \x01(\rR\tloopCount\"\xb9\x01\n" + + "!AIRichResponseDynamicMetadataType\x122\n" + + ".AI_RICH_RESPONSE_DYNAMIC_METADATA_TYPE_UNKNOWN\x10\x00\x120\n" + + ",AI_RICH_RESPONSE_DYNAMIC_METADATA_TYPE_IMAGE\x10\x01\x12.\n" + + "*AI_RICH_RESPONSE_DYNAMIC_METADATA_TYPE_GIF\x10\x02\"\x8a\x05\n" + + "\"AIRichResponseContentItemsMetadata\x12\x82\x01\n" + + "\ritemsMetadata\x18\x01 \x03(\v2\\.WAWebProtobufsAICommon.AIRichResponseContentItemsMetadata.AIRichResponseContentItemMetadataR\ritemsMetadata\x12h\n" + + "\vcontentType\x18\x02 \x01(\x0e2F.WAWebProtobufsAICommon.AIRichResponseContentItemsMetadata.ContentTypeR\vcontentType\x1a\xb1\x01\n" + + "!AIRichResponseContentItemMetadata\x12o\n" + + "\breelItem\x18\x01 \x01(\v2Q.WAWebProtobufsAICommon.AIRichResponseContentItemsMetadata.AIRichResponseReelItemH\x00R\breelItemB\x1b\n" + + "\x19aIRichResponseContentItem\x1a\x96\x01\n" + + "\x16AIRichResponseReelItem\x12\x14\n" + + "\x05title\x18\x01 \x01(\tR\x05title\x12&\n" + + "\x0eprofileIconURL\x18\x02 \x01(\tR\x0eprofileIconURL\x12\"\n" + + "\fthumbnailURL\x18\x03 \x01(\tR\fthumbnailURL\x12\x1a\n" + + "\bvideoURL\x18\x04 \x01(\tR\bvideoURL\"(\n" + + "\vContentType\x12\v\n" + + "\aDEFAULT\x10\x00\x12\f\n" + + "\bCAROUSEL\x10\x01\"\xc2\x01\n" + + "\x1aBotDocumentMessageMetadata\x12e\n" + + "\n" + + "pluginType\x18\x01 \x01(\x0e2E.WAWebProtobufsAICommon.BotDocumentMessageMetadata.DocumentPluginTypeR\n" + + "pluginType\"=\n" + + "\x12DocumentPluginType\x12\x13\n" + + "\x0fTEXT_EXTRACTION\x10\x00\x12\x12\n" + + "\x0eOCR_AND_IMAGES\x10\x01\"\xc7\x05\n" + + "\vAIHomeState\x12$\n" + + "\rlastFetchTime\x18\x01 \x01(\x03R\rlastFetchTime\x12^\n" + + "\x11capabilityOptions\x18\x02 \x03(\v20.WAWebProtobufsAICommon.AIHomeState.AIHomeOptionR\x11capabilityOptions\x12b\n" + + "\x13conversationOptions\x18\x03 \x03(\v20.WAWebProtobufsAICommon.AIHomeState.AIHomeOptionR\x13conversationOptions\x1a\xcd\x03\n" + + "\fAIHomeOption\x12U\n" + + "\x04type\x18\x01 \x01(\x0e2A.WAWebProtobufsAICommon.AIHomeState.AIHomeOption.AIHomeActionTypeR\x04type\x12\x14\n" + + "\x05title\x18\x02 \x01(\tR\x05title\x12\x1e\n" + + "\n" + + "promptText\x18\x03 \x01(\tR\n" + + "promptText\x12\x1c\n" + + "\tsessionID\x18\x04 \x01(\tR\tsessionID\x12.\n" + + "\x12imageWdsIdentifier\x18\x05 \x01(\tR\x12imageWdsIdentifier\x12&\n" + + "\x0eimageTintColor\x18\x06 \x01(\tR\x0eimageTintColor\x122\n" + + "\x14imageBackgroundColor\x18\a \x01(\tR\x14imageBackgroundColor\x12\x1e\n" + + "\n" + + "cardTypeID\x18\b \x01(\tR\n" + + "cardTypeID\"f\n" + + "\x10AIHomeActionType\x12\n" + + "\n" + + "\x06PROMPT\x10\x00\x12\x10\n" + + "\fCREATE_IMAGE\x10\x01\x12\x11\n" + + "\rANIMATE_PHOTO\x10\x02\x12\x10\n" + + "\fANALYZE_FILE\x10\x03\x12\x0f\n" + + "\vCOLLABORATE\x10\x04\"\xe1\x01\n" + + "\x1cBotInfrastructureDiagnostics\x12_\n" + + "\n" + + "botBackend\x18\x01 \x01(\x0e2?.WAWebProtobufsAICommon.BotInfrastructureDiagnostics.BotBackendR\n" + + "botBackend\x12\x1c\n" + + "\ttoolsUsed\x18\x02 \x03(\tR\ttoolsUsed\x12\x1e\n" + + "\n" + + "isThinking\x18\x03 \x01(\bR\n" + + "isThinking\"\"\n" + + "\n" + + "BotBackend\x12\b\n" + + "\x04AAPI\x10\x00\x12\n" + + "\n" + + "\x06CLIPPY\x10\x01\"\x82\x02\n" + + "\x1aBotSuggestedPromptMetadata\x12*\n" + + "\x10suggestedPrompts\x18\x01 \x03(\tR\x10suggestedPrompts\x120\n" + + "\x13selectedPromptIndex\x18\x02 \x01(\rR\x13selectedPromptIndex\x12Z\n" + + "\x11promptSuggestions\x18\x03 \x01(\v2,.WAWebProtobufsAICommon.BotPromptSuggestionsR\x11promptSuggestions\x12*\n" + + "\x10selectedPromptID\x18\x04 \x01(\tR\x10selectedPromptID\"e\n" + + "\x14BotPromptSuggestions\x12M\n" + + "\vsuggestions\x18\x01 \x03(\v2+.WAWebProtobufsAICommon.BotPromptSuggestionR\vsuggestions\"I\n" + + "\x13BotPromptSuggestion\x12\x16\n" + + "\x06prompt\x18\x01 \x01(\tR\x06prompt\x12\x1a\n" + + "\bpromptID\x18\x02 \x01(\tR\bpromptID\"\xa7\x01\n" + + "\x19BotLinkedAccountsMetadata\x12D\n" + + "\baccounts\x18\x01 \x03(\v2(.WAWebProtobufsAICommon.BotLinkedAccountR\baccounts\x12\"\n" + + "\facAuthTokens\x18\x02 \x01(\fR\facAuthTokens\x12 \n" + + "\vacErrorCode\x18\x03 \x01(\x05R\vacErrorCode\"\xc5\x01\n" + + "\x11BotMemoryMetadata\x12E\n" + + "\n" + + "addedFacts\x18\x01 \x03(\v2%.WAWebProtobufsAICommon.BotMemoryFactR\n" + + "addedFacts\x12I\n" + + "\fremovedFacts\x18\x02 \x03(\v2%.WAWebProtobufsAICommon.BotMemoryFactR\fremovedFacts\x12\x1e\n" + + "\n" + + "disclaimer\x18\x03 \x01(\tR\n" + + "disclaimer\";\n" + + "\rBotMemoryFact\x12\x12\n" + + "\x04fact\x18\x01 \x01(\tR\x04fact\x12\x16\n" + + "\x06factID\x18\x02 \x01(\tR\x06factID\"x\n" + + " BotSignatureVerificationMetadata\x12T\n" + + "\x06proofs\x18\x01 \x03(\v2<.WAWebProtobufsAICommon.BotSignatureVerificationUseCaseProofR\x06proofs\"\xb7\x01\n" + + "\x14BotRenderingMetadata\x12P\n" + + "\bkeywords\x18\x01 \x03(\v24.WAWebProtobufsAICommon.BotRenderingMetadata.KeywordR\bkeywords\x1aM\n" + + "\aKeyword\x12\x14\n" + + "\x05value\x18\x01 \x01(\tR\x05value\x12,\n" + + "\x11associatedPrompts\x18\x02 \x03(\tR\x11associatedPrompts\"\xf6\x01\n" + + "\x12BotMetricsMetadata\x12$\n" + + "\rdestinationID\x18\x01 \x01(\tR\rdestinationID\x12b\n" + + "\x15destinationEntryPoint\x18\x02 \x01(\x0e2,.WAWebProtobufsAICommon.BotMetricsEntryPointR\x15destinationEntryPoint\x12V\n" + + "\fthreadOrigin\x18\x03 \x01(\x0e22.WAWebProtobufsAICommon.BotMetricsThreadEntryPointR\fthreadOrigin\"\x82\x01\n" + + "\x12BotSessionMetadata\x12\x1c\n" + + "\tsessionID\x18\x01 \x01(\tR\tsessionID\x12N\n" + + "\rsessionSource\x18\x02 \x01(\x0e2(.WAWebProtobufsAICommon.BotSessionSourceR\rsessionSource\"[\n" + + "\x0fBotMemuMetadata\x12H\n" + + "\n" + + "faceImages\x18\x01 \x03(\v2(.WAWebProtobufsAICommon.BotMediaMetadataR\n" + + "faceImages\"\xe4\n" + + "\n" + + "\x16InThreadSurveyMetadata\x12&\n" + + "\x0etessaSessionID\x18\x01 \x01(\tR\x0etessaSessionID\x12&\n" + + "\x0esimonSessionID\x18\x02 \x01(\tR\x0esimonSessionID\x12$\n" + + "\rsimonSurveyID\x18\x03 \x01(\tR\rsimonSurveyID\x12 \n" + + "\vtessaRootID\x18\x04 \x01(\tR\vtessaRootID\x12\x1c\n" + + "\trequestID\x18\x05 \x01(\tR\trequestID\x12\x1e\n" + + "\n" + + "tessaEvent\x18\x06 \x01(\tR\n" + + "tessaEvent\x122\n" + + "\x14invitationHeaderText\x18\a \x01(\tR\x14invitationHeaderText\x12.\n" + + "\x12invitationBodyText\x18\b \x01(\tR\x12invitationBodyText\x12,\n" + + "\x11invitationCtaText\x18\t \x01(\tR\x11invitationCtaText\x12*\n" + + "\x10invitationCtaURL\x18\n" + + " \x01(\tR\x10invitationCtaURL\x12 \n" + + "\vsurveyTitle\x18\v \x01(\tR\vsurveyTitle\x12c\n" + + "\tquestions\x18\f \x03(\v2E.WAWebProtobufsAICommon.InThreadSurveyMetadata.InThreadSurveyQuestionR\tquestions\x12:\n" + + "\x18surveyContinueButtonText\x18\r \x01(\tR\x18surveyContinueButtonText\x126\n" + + "\x16surveySubmitButtonText\x18\x0e \x01(\tR\x16surveySubmitButtonText\x122\n" + + "\x14privacyStatementFull\x18\x0f \x01(\tR\x14privacyStatementFull\x12\x87\x01\n" + + "\x15privacyStatementParts\x18\x10 \x03(\v2Q.WAWebProtobufsAICommon.InThreadSurveyMetadata.InThreadSurveyPrivacyStatementPartR\x15privacyStatementParts\x12,\n" + + "\x11feedbackToastText\x18\x11 \x01(\tR\x11feedbackToastText\x12.\n" + + "\x12startQuestionIndex\x18\x12 \x01(\x05R\x12startQuestionIndex\x1aJ\n" + + "\"InThreadSurveyPrivacyStatementPart\x12\x12\n" + + "\x04text\x18\x01 \x01(\tR\x04text\x12\x10\n" + + "\x03URL\x18\x02 \x01(\tR\x03URL\x1a\x84\x01\n" + + "\x14InThreadSurveyOption\x12 \n" + + "\vstringValue\x18\x01 \x01(\tR\vstringValue\x12\"\n" + + "\fnumericValue\x18\x02 \x01(\rR\fnumericValue\x12&\n" + + "\x0etextTranslated\x18\x03 \x01(\tR\x0etextTranslated\x1a\xcb\x01\n" + + "\x16InThreadSurveyQuestion\x12\"\n" + + "\fquestionText\x18\x01 \x01(\tR\fquestionText\x12\x1e\n" + + "\n" + + "questionID\x18\x02 \x01(\tR\n" + + "questionID\x12m\n" + + "\x0fquestionOptions\x18\x03 \x03(\v2C.WAWebProtobufsAICommon.InThreadSurveyMetadata.InThreadSurveyOptionR\x0fquestionOptions\"^\n" + + "\x18BotMessageOriginMetadata\x12B\n" + + "\aorigins\x18\x01 \x03(\v2(.WAWebProtobufsAICommon.BotMessageOriginR\aorigins\"\xc8\x04\n" + + "\x1aBotUnifiedResponseMutation\x12g\n" + + "\vsbsMetadata\x18\x01 \x01(\v2E.WAWebProtobufsAICommon.BotUnifiedResponseMutation.SideBySideMetadataR\vsbsMetadata\x12\x83\x01\n" + + "\x18mediaDetailsMetadataList\x18\x02 \x03(\v2G.WAWebProtobufsAICommon.BotUnifiedResponseMutation.MediaDetailsMetadataR\x18mediaDetailsMetadataList\x1a\xc2\x01\n" + + "\x14MediaDetailsMetadata\x12\x0e\n" + + "\x02ID\x18\x01 \x01(\tR\x02ID\x12L\n" + + "\fhighResMedia\x18\x02 \x01(\v2(.WAWebProtobufsAICommon.BotMediaMetadataR\fhighResMedia\x12L\n" + + "\fpreviewMedia\x18\x03 \x01(\v2(.WAWebProtobufsAICommon.BotMediaMetadataR\fpreviewMedia\x1av\n" + + "\x12SideBySideMetadata\x12,\n" + + "\x11primaryResponseID\x18\x01 \x01(\tR\x11primaryResponseID\x122\n" + + "\x14surveyCtaHasRendered\x18\x02 \x01(\bR\x14surveyCtaHasRendered\"?\n" + + "\x19AIMediaCollectionMetadata\x12\"\n" + + "\fcollectionID\x18\x01 \x01(\tR\fcollectionID\"\x9a\x01\n" + + "\x18AIMediaCollectionMessage\x12\"\n" + + "\fcollectionID\x18\x01 \x01(\tR\fcollectionID\x12.\n" + + "\x12expectedMediaCount\x18\x02 \x01(\rR\x12expectedMediaCount\x12*\n" + + "\x10hasGlobalCaption\x18\x03 \x01(\bR\x10hasGlobalCaption\"\xad\x1a\n" + + "\vBotMetadata\x12\x1c\n" + + "\tpersonaID\x18\x02 \x01(\tR\tpersonaID\x12Q\n" + + "\x0epluginMetadata\x18\x03 \x01(\v2).WAWebProtobufsAICommon.BotPluginMetadataR\x0epluginMetadata\x12l\n" + + "\x17suggestedPromptMetadata\x18\x04 \x01(\v22.WAWebProtobufsAICommon.BotSuggestedPromptMetadataR\x17suggestedPromptMetadata\x12\x1e\n" + + "\n" + + "invokerJID\x18\x05 \x01(\tR\n" + + "invokerJID\x12T\n" + + "\x0fsessionMetadata\x18\x06 \x01(\v2*.WAWebProtobufsAICommon.BotSessionMetadataR\x0fsessionMetadata\x12K\n" + + "\fmemuMetadata\x18\a \x01(\v2'.WAWebProtobufsAICommon.BotMemuMetadataR\fmemuMetadata\x12\x1a\n" + + "\btimezone\x18\b \x01(\tR\btimezone\x12W\n" + + "\x10reminderMetadata\x18\t \x01(\v2+.WAWebProtobufsAICommon.BotReminderMetadataR\x10reminderMetadata\x12N\n" + + "\rmodelMetadata\x18\n" + + " \x01(\v2(.WAWebProtobufsAICommon.BotModelMetadataR\rmodelMetadata\x124\n" + + "\x15messageDisclaimerText\x18\v \x01(\tR\x15messageDisclaimerText\x12r\n" + + "\x19progressIndicatorMetadata\x18\f \x01(\v24.WAWebProtobufsAICommon.BotProgressIndicatorMetadataR\x19progressIndicatorMetadata\x12]\n" + + "\x12capabilityMetadata\x18\r \x01(\v2-.WAWebProtobufsAICommon.BotCapabilityMetadataR\x12capabilityMetadata\x12T\n" + + "\x0fimagineMetadata\x18\x0e \x01(\v2*.WAWebProtobufsAICommon.BotImagineMetadataR\x0fimagineMetadata\x12Q\n" + + "\x0ememoryMetadata\x18\x0f \x01(\v2).WAWebProtobufsAICommon.BotMemoryMetadataR\x0ememoryMetadata\x12Z\n" + + "\x11renderingMetadata\x18\x10 \x01(\v2,.WAWebProtobufsAICommon.BotRenderingMetadataR\x11renderingMetadata\x12Z\n" + + "\x12botMetricsMetadata\x18\x11 \x01(\v2*.WAWebProtobufsAICommon.BotMetricsMetadataR\x12botMetricsMetadata\x12o\n" + + "\x19botLinkedAccountsMetadata\x18\x12 \x01(\v21.WAWebProtobufsAICommon.BotLinkedAccountsMetadataR\x19botLinkedAccountsMetadata\x12l\n" + + "\x1brichResponseSourcesMetadata\x18\x13 \x01(\v2*.WAWebProtobufsAICommon.BotSourcesMetadataR\x1brichResponseSourcesMetadata\x124\n" + + "\x15aiConversationContext\x18\x14 \x01(\fR\x15aiConversationContext\x12u\n" + + "\x1bbotPromotionMessageMetadata\x18\x15 \x01(\v23.WAWebProtobufsAICommon.BotPromotionMessageMetadataR\x1bbotPromotionMessageMetadata\x12l\n" + + "\x18botModeSelectionMetadata\x18\x16 \x01(\v20.WAWebProtobufsAICommon.BotModeSelectionMetadataR\x18botModeSelectionMetadata\x12T\n" + + "\x10botQuotaMetadata\x18\x17 \x01(\v2(.WAWebProtobufsAICommon.BotQuotaMetadataR\x10botQuotaMetadata\x12l\n" + + "\x18botAgeCollectionMetadata\x18\x18 \x01(\v20.WAWebProtobufsAICommon.BotAgeCollectionMetadataR\x18botAgeCollectionMetadata\x12@\n" + + "\x1bconversationStarterPromptID\x18\x19 \x01(\tR\x1bconversationStarterPromptID\x12$\n" + + "\rbotResponseID\x18\x1a \x01(\tR\rbotResponseID\x12l\n" + + "\x14verificationMetadata\x18\x1b \x01(\v28.WAWebProtobufsAICommon.BotSignatureVerificationMetadataR\x14verificationMetadata\x12l\n" + + "\x17unifiedResponseMutation\x18\x1c \x01(\v22.WAWebProtobufsAICommon.BotUnifiedResponseMutationR\x17unifiedResponseMutation\x12l\n" + + "\x18botMessageOriginMetadata\x18\x1d \x01(\v20.WAWebProtobufsAICommon.BotMessageOriginMetadataR\x18botMessageOriginMetadata\x12f\n" + + "\x16inThreadSurveyMetadata\x18\x1e \x01(\v2..WAWebProtobufsAICommon.InThreadSurveyMetadataR\x16inThreadSurveyMetadata\x12J\n" + + "\rbotThreadInfo\x18\x1f \x01(\v2$.WAWebProtobufsAICommon.AIThreadInfoR\rbotThreadInfo\x12\\\n" + + "\x12regenerateMetadata\x18 \x01(\v2,.WAWebProtobufsAICommon.AIRegenerateMetadataR\x12regenerateMetadata\x12u\n" + + "\x1bsessionTransparencyMetadata\x18! \x01(\v23.WAWebProtobufsAICommon.SessionTransparencyMetadataR\x1bsessionTransparencyMetadata\x12r\n" + + "\x1abotDocumentMessageMetadata\x18\" \x01(\v22.WAWebProtobufsAICommon.BotDocumentMessageMetadataR\x1abotDocumentMessageMetadata\x12T\n" + + "\x10botGroupMetadata\x18# \x01(\v2(.WAWebProtobufsAICommon.BotGroupMetadataR\x10botGroupMetadata\x12r\n" + + "\x1abotRenderingConfigMetadata\x18$ \x01(\v22.WAWebProtobufsAICommon.BotRenderingConfigMetadataR\x1abotRenderingConfigMetadata\x12x\n" + + "\x1cbotInfrastructureDiagnostics\x18% \x01(\v24.WAWebProtobufsAICommon.BotInfrastructureDiagnosticsR\x1cbotInfrastructureDiagnostics\x12o\n" + + "\x19aiMediaCollectionMetadata\x18& \x01(\v21.WAWebProtobufsAICommon.AIMediaCollectionMetadataR\x19aiMediaCollectionMetadata\x12+\n" + + "\x10internalMetadata\x18\xe7\a \x01(\fR\x10internalMetadata\"{\n" + + "\x10BotGroupMetadata\x12g\n" + + "\x14participantsMetadata\x18\x01 \x03(\v23.WAWebProtobufsAICommon.BotGroupParticipantMetadataR\x14participantsMetadata\"n\n" + + "\x1aBotRenderingConfigMetadata\x12,\n" + + "\x11bloksVersioningID\x18\x01 \x01(\tR\x11bloksVersioningID\x12\"\n" + + "\fpixelDensity\x18\x02 \x01(\x01R\fpixelDensity\"7\n" + + "\x1bBotGroupParticipantMetadata\x12\x18\n" + + "\abotFbid\x18\x01 \x01(\tR\abotFbid\"o\n" + + "\x19ForwardedAIBotMessageInfo\x12\x18\n" + + "\abotName\x18\x01 \x01(\tR\abotName\x12\x16\n" + + "\x06botJID\x18\x02 \x01(\tR\x06botJID\x12 \n" + + "\vcreatorName\x18\x03 \x01(\tR\vcreatorName\"\x9b\x01\n" + + "\x15BotMessageSharingInfo\x12^\n" + + "\x13botEntryPointOrigin\x18\x01 \x01(\x0e2,.WAWebProtobufsAICommon.BotMetricsEntryPointR\x13botEntryPointOrigin\x12\"\n" + + "\fforwardScore\x18\x02 \x01(\rR\fforwardScore\"\x8a\x01\n" + + "\x16AIRichResponseImageURL\x12(\n" + + "\x0fimagePreviewURL\x18\x01 \x01(\tR\x0fimagePreviewURL\x12(\n" + + "\x0fimageHighResURL\x18\x02 \x01(\tR\x0fimageHighResURL\x12\x1c\n" + + "\tsourceURL\x18\x03 \x01(\tR\tsourceURL\"\xc3\x01\n" + + "\x1fAIRichResponseGridImageMetadata\x12R\n" + + "\fgridImageURL\x18\x01 \x01(\v2..WAWebProtobufsAICommon.AIRichResponseImageURLR\fgridImageURL\x12L\n" + + "\timageURLs\x18\x02 \x03(\v2..WAWebProtobufsAICommon.AIRichResponseImageURLR\timageURLs\"\xe1\x01\n" + + "\x1bAIRichResponseTableMetadata\x12^\n" + + "\x04rows\x18\x01 \x03(\v2J.WAWebProtobufsAICommon.AIRichResponseTableMetadata.AIRichResponseTableRowR\x04rows\x12\x14\n" + + "\x05title\x18\x02 \x01(\tR\x05title\x1aL\n" + + "\x16AIRichResponseTableRow\x12\x14\n" + + "\x05items\x18\x01 \x03(\tR\x05items\x12\x1c\n" + + "\tisHeading\x18\x02 \x01(\bR\tisHeading\"3\n" + + "\x1dAIRichResponseUnifiedResponse\x12\x12\n" + + "\x04data\x18\x01 \x01(\fR\x04data\"\x92\x04\n" + + "\x1bAIRichResponseLatexMetadata\x12\x12\n" + + "\x04text\x18\x01 \x01(\tR\x04text\x12s\n" + + "\vexpressions\x18\x02 \x03(\v2Q.WAWebProtobufsAICommon.AIRichResponseLatexMetadata.AIRichResponseLatexExpressionR\vexpressions\x1a\xe9\x02\n" + + "\x1dAIRichResponseLatexExpression\x12(\n" + + "\x0flatexExpression\x18\x01 \x01(\tR\x0flatexExpression\x12\x10\n" + + "\x03URL\x18\x02 \x01(\tR\x03URL\x12\x14\n" + + "\x05width\x18\x03 \x01(\x01R\x05width\x12\x16\n" + + "\x06height\x18\x04 \x01(\x01R\x06height\x12\x1e\n" + + "\n" + + "fontHeight\x18\x05 \x01(\x01R\n" + + "fontHeight\x12(\n" + + "\x0fimageTopPadding\x18\x06 \x01(\x01R\x0fimageTopPadding\x120\n" + + "\x13imageLeadingPadding\x18\a \x01(\x01R\x13imageLeadingPadding\x12.\n" + + "\x12imageBottomPadding\x18\b \x01(\x01R\x12imageBottomPadding\x122\n" + + "\x14imageTrailingPadding\x18\t \x01(\x01R\x14imageTrailingPadding\"\x80\x04\n" + + "\x19AIRichResponseMapMetadata\x12&\n" + + "\x0ecenterLatitude\x18\x01 \x01(\x01R\x0ecenterLatitude\x12(\n" + + "\x0fcenterLongitude\x18\x02 \x01(\x01R\x0fcenterLongitude\x12$\n" + + "\rlatitudeDelta\x18\x03 \x01(\x01R\rlatitudeDelta\x12&\n" + + "\x0elongitudeDelta\x18\x04 \x01(\x01R\x0elongitudeDelta\x12o\n" + + "\vannotations\x18\x05 \x03(\v2M.WAWebProtobufsAICommon.AIRichResponseMapMetadata.AIRichResponseMapAnnotationR\vannotations\x12\"\n" + + "\fshowInfoList\x18\x06 \x01(\bR\fshowInfoList\x1a\xad\x01\n" + + "\x1bAIRichResponseMapAnnotation\x12*\n" + + "\x10annotationNumber\x18\x01 \x01(\rR\x10annotationNumber\x12\x1a\n" + + "\blatitude\x18\x02 \x01(\x01R\blatitude\x12\x1c\n" + + "\tlongitude\x18\x03 \x01(\x01R\tlongitude\x12\x14\n" + + "\x05title\x18\x04 \x01(\tR\x05title\x12\x12\n" + + "\x04body\x18\x05 \x01(\tR\x04body\"\x90\a\n" + + "\x18AIRichResponseSubMessage\x12V\n" + + "\vmessageType\x18\x01 \x01(\x0e24.WAWebProtobufsAICommon.AIRichResponseSubMessageTypeR\vmessageType\x12e\n" + + "\x11gridImageMetadata\x18\x02 \x01(\v27.WAWebProtobufsAICommon.AIRichResponseGridImageMetadataR\x11gridImageMetadata\x12 \n" + + "\vmessageText\x18\x03 \x01(\tR\vmessageText\x12_\n" + + "\rimageMetadata\x18\x04 \x01(\v29.WAWebProtobufsAICommon.AIRichResponseInlineImageMetadataR\rimageMetadata\x12V\n" + + "\fcodeMetadata\x18\x05 \x01(\v22.WAWebProtobufsAICommon.AIRichResponseCodeMetadataR\fcodeMetadata\x12Y\n" + + "\rtableMetadata\x18\x06 \x01(\v23.WAWebProtobufsAICommon.AIRichResponseTableMetadataR\rtableMetadata\x12_\n" + + "\x0fdynamicMetadata\x18\a \x01(\v25.WAWebProtobufsAICommon.AIRichResponseDynamicMetadataR\x0fdynamicMetadata\x12Y\n" + + "\rlatexMetadata\x18\b \x01(\v23.WAWebProtobufsAICommon.AIRichResponseLatexMetadataR\rlatexMetadata\x12S\n" + + "\vmapMetadata\x18\t \x01(\v21.WAWebProtobufsAICommon.AIRichResponseMapMetadataR\vmapMetadata\x12n\n" + + "\x14contentItemsMetadata\x18\n" + + " \x01(\v2:.WAWebProtobufsAICommon.AIRichResponseContentItemsMetadataR\x14contentItemsMetadata\"~\n" + + "\x14AIRegenerateMetadata\x124\n" + + "\n" + + "messageKey\x18\x01 \x01(\v2\x14.WACommon.MessageKeyR\n" + + "messageKey\x120\n" + + "\x13responseTimestampMS\x18\x02 \x01(\x03R\x13responseTimestampMS\"\xc6\x01\n" + + "\x1bSessionTransparencyMetadata\x12&\n" + + "\x0edisclaimerText\x18\x01 \x01(\tR\x0edisclaimerText\x12\x14\n" + + "\x05hcaID\x18\x02 \x01(\tR\x05hcaID\x12i\n" + + "\x17sessionTransparencyType\x18\x03 \x01(\x0e2/.WAWebProtobufsAICommon.SessionTransparencyTypeR\x17sessionTransparencyType*\xd4\t\n" + + "\x14BotMetricsEntryPoint\x12\x19\n" + + "\x15UNDEFINED_ENTRY_POINT\x10\x00\x12\v\n" + + "\aFAVICON\x10\x01\x12\f\n" + + "\bCHATLIST\x10\x02\x12#\n" + + "\x1fAISEARCH_NULL_STATE_PAPER_PLANE\x10\x03\x12\"\n" + + "\x1eAISEARCH_NULL_STATE_SUGGESTION\x10\x04\x12\"\n" + + "\x1eAISEARCH_TYPE_AHEAD_SUGGESTION\x10\x05\x12#\n" + + "\x1fAISEARCH_TYPE_AHEAD_PAPER_PLANE\x10\x06\x12'\n" + + "#AISEARCH_TYPE_AHEAD_RESULT_CHATLIST\x10\a\x12'\n" + + "#AISEARCH_TYPE_AHEAD_RESULT_MESSAGES\x10\b\x12\x16\n" + + "\x12AIVOICE_SEARCH_BAR\x10\t\x12\x13\n" + + "\x0fAIVOICE_FAVICON\x10\n" + + "\x12\f\n" + + "\bAISTUDIO\x10\v\x12\f\n" + + "\bDEEPLINK\x10\f\x12\x10\n" + + "\fNOTIFICATION\x10\r\x12\x1a\n" + + "\x16PROFILE_MESSAGE_BUTTON\x10\x0e\x12\v\n" + + "\aFORWARD\x10\x0f\x12\x10\n" + + "\fAPP_SHORTCUT\x10\x10\x12\r\n" + + "\tFF_FAMILY\x10\x11\x12\n" + + "\n" + + "\x06AI_TAB\x10\x12\x12\v\n" + + "\aAI_HOME\x10\x13\x12\x19\n" + + "\x15AI_DEEPLINK_IMMERSIVE\x10\x14\x12\x0f\n" + + "\vAI_DEEPLINK\x10\x15\x12#\n" + + "\x1fMETA_AI_CHAT_SHORTCUT_AI_STUDIO\x10\x16\x12\x1f\n" + + "\x1bUGC_CHAT_SHORTCUT_AI_STUDIO\x10\x17\x12\x16\n" + + "\x12NEW_CHAT_AI_STUDIO\x10\x18\x12 \n" + + "\x1cAIVOICE_FAVICON_CALL_HISTORY\x10\x19\x12\x1c\n" + + "\x18ASK_META_AI_CONTEXT_MENU\x10\x1a\x12!\n" + + "\x1dASK_META_AI_CONTEXT_MENU_1ON1\x10\x1b\x12\"\n" + + "\x1eASK_META_AI_CONTEXT_MENU_GROUP\x10\x1c\x12\x17\n" + + "\x13INVOKE_META_AI_1ON1\x10\x1d\x12\x18\n" + + "\x14INVOKE_META_AI_GROUP\x10\x1e\x12\x13\n" + + "\x0fMETA_AI_FORWARD\x10\x1f\x12\x17\n" + + "\x13NEW_CHAT_AI_CONTACT\x10 \x12$\n" + + " MESSAGE_QUICK_ACTION_1_ON_1_CHAT\x10!\x12#\n" + + "\x1fMESSAGE_QUICK_ACTION_GROUP_CHAT\x10\"\x12\x1f\n" + + "\x1bATTACHMENT_TRAY_1_ON_1_CHAT\x10#\x12\x1e\n" + + "\x1aATTACHMENT_TRAY_GROUP_CHAT\x10$\x12!\n" + + "\x1dASK_META_AI_MEDIA_VIEWER_1ON1\x10%\x12\"\n" + + "\x1eASK_META_AI_MEDIA_VIEWER_GROUP\x10&\x12\x1c\n" + + "\x18MEDIA_PICKER_1_ON_1_CHAT\x10'\x12\x1b\n" + + "\x17MEDIA_PICKER_GROUP_CHAT\x10(\x12!\n" + + "\x1dASK_META_AI_NO_SEARCH_RESULTS\x10)\x12\x14\n" + + "\x10META_AI_SETTINGS\x10-\x12\x13\n" + + "\x0fWEB_INTRO_PANEL\x10.\x12\x16\n" + + "\x12WEB_NAVIGATION_BAR\x10/*\xa2\x01\n" + + "\x1aBotMetricsThreadEntryPoint\x12\x11\n" + + "\rAI_TAB_THREAD\x10\x01\x12\x12\n" + + "\x0eAI_HOME_THREAD\x10\x02\x12 \n" + + "\x1cAI_DEEPLINK_IMMERSIVE_THREAD\x10\x03\x12\x16\n" + + "\x12AI_DEEPLINK_THREAD\x10\x04\x12#\n" + + "\x1fASK_META_AI_CONTEXT_MENU_THREAD\x10\x05*\x92\x01\n" + + "\x10BotSessionSource\x12\b\n" + + "\x04NONE\x10\x00\x12\x0e\n" + + "\n" + + "NULL_STATE\x10\x01\x12\r\n" + + "\tTYPEAHEAD\x10\x02\x12\x0e\n" + + "\n" + + "USER_INPUT\x10\x03\x12\r\n" + + "\tEMU_FLASH\x10\x04\x12\x16\n" + + "\x12EMU_FLASH_FOLLOWUP\x10\x05\x12\t\n" + + "\x05VOICE\x10\x06\x12\x13\n" + + "\x0fAI_HOME_SESSION\x10\a*b\n" + + "\x19AIRichResponseMessageType\x12!\n" + + "\x1dAI_RICH_RESPONSE_TYPE_UNKNOWN\x10\x00\x12\"\n" + + "\x1eAI_RICH_RESPONSE_TYPE_STANDARD\x10\x01*\xca\x02\n" + + "\x1cAIRichResponseSubMessageType\x12\x1c\n" + + "\x18AI_RICH_RESPONSE_UNKNOWN\x10\x00\x12\x1f\n" + + "\x1bAI_RICH_RESPONSE_GRID_IMAGE\x10\x01\x12\x19\n" + + "\x15AI_RICH_RESPONSE_TEXT\x10\x02\x12!\n" + + "\x1dAI_RICH_RESPONSE_INLINE_IMAGE\x10\x03\x12\x1a\n" + + "\x16AI_RICH_RESPONSE_TABLE\x10\x04\x12\x19\n" + + "\x15AI_RICH_RESPONSE_CODE\x10\x05\x12\x1c\n" + + "\x18AI_RICH_RESPONSE_DYNAMIC\x10\x06\x12\x18\n" + + "\x14AI_RICH_RESPONSE_MAP\x10\a\x12\x1a\n" + + "\x16AI_RICH_RESPONSE_LATEX\x10\b\x12\"\n" + + "\x1eAI_RICH_RESPONSE_CONTENT_ITEMS\x10\t*H\n" + + "\x17SessionTransparencyType\x12\x10\n" + + "\fUNKNOWN_TYPE\x10\x00\x12\x1b\n" + + "\x17NY_AI_SAFETY_DISCLAIMER\x10\x01B&Z$go.mau.fi/whatsmeow/proto/waAICommon" + +var ( + file_waAICommon_WAWebProtobufsAICommon_proto_rawDescOnce sync.Once + file_waAICommon_WAWebProtobufsAICommon_proto_rawDescData []byte +) + +func file_waAICommon_WAWebProtobufsAICommon_proto_rawDescGZIP() []byte { + file_waAICommon_WAWebProtobufsAICommon_proto_rawDescOnce.Do(func() { + file_waAICommon_WAWebProtobufsAICommon_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_waAICommon_WAWebProtobufsAICommon_proto_rawDesc), len(file_waAICommon_WAWebProtobufsAICommon_proto_rawDesc))) + }) + return file_waAICommon_WAWebProtobufsAICommon_proto_rawDescData +} + +var file_waAICommon_WAWebProtobufsAICommon_proto_enumTypes = make([]protoimpl.EnumInfo, 38) +var file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes = make([]protoimpl.MessageInfo, 84) +var file_waAICommon_WAWebProtobufsAICommon_proto_goTypes = []any{ + (BotMetricsEntryPoint)(0), // 0: WAWebProtobufsAICommon.BotMetricsEntryPoint + (BotMetricsThreadEntryPoint)(0), // 1: WAWebProtobufsAICommon.BotMetricsThreadEntryPoint + (BotSessionSource)(0), // 2: WAWebProtobufsAICommon.BotSessionSource + (AIRichResponseMessageType)(0), // 3: WAWebProtobufsAICommon.AIRichResponseMessageType + (AIRichResponseSubMessageType)(0), // 4: WAWebProtobufsAICommon.AIRichResponseSubMessageType + (SessionTransparencyType)(0), // 5: WAWebProtobufsAICommon.SessionTransparencyType + (BotPluginMetadata_PluginType)(0), // 6: WAWebProtobufsAICommon.BotPluginMetadata.PluginType + (BotPluginMetadata_SearchProvider)(0), // 7: WAWebProtobufsAICommon.BotPluginMetadata.SearchProvider + (BotLinkedAccount_BotLinkedAccountType)(0), // 8: WAWebProtobufsAICommon.BotLinkedAccount.BotLinkedAccountType + (BotSignatureVerificationUseCaseProof_BotSignatureUseCase)(0), // 9: WAWebProtobufsAICommon.BotSignatureVerificationUseCaseProof.BotSignatureUseCase + (BotPromotionMessageMetadata_BotPromotionType)(0), // 10: WAWebProtobufsAICommon.BotPromotionMessageMetadata.BotPromotionType + (BotMediaMetadata_OrientationType)(0), // 11: WAWebProtobufsAICommon.BotMediaMetadata.OrientationType + (BotReminderMetadata_ReminderFrequency)(0), // 12: WAWebProtobufsAICommon.BotReminderMetadata.ReminderFrequency + (BotReminderMetadata_ReminderAction)(0), // 13: WAWebProtobufsAICommon.BotReminderMetadata.ReminderAction + (BotModelMetadata_PremiumModelStatus)(0), // 14: WAWebProtobufsAICommon.BotModelMetadata.PremiumModelStatus + (BotModelMetadata_ModelType)(0), // 15: WAWebProtobufsAICommon.BotModelMetadata.ModelType + (BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotSearchSourceProvider)(0), // 16: WAWebProtobufsAICommon.BotProgressIndicatorMetadata.BotPlanningStepMetadata.BotSearchSourceProvider + (BotProgressIndicatorMetadata_BotPlanningStepMetadata_PlanningStepStatus)(0), // 17: WAWebProtobufsAICommon.BotProgressIndicatorMetadata.BotPlanningStepMetadata.PlanningStepStatus + (BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningSearchSourcesMetadata_BotPlanningSearchSourceProvider)(0), // 18: WAWebProtobufsAICommon.BotProgressIndicatorMetadata.BotPlanningStepMetadata.BotPlanningSearchSourcesMetadata.BotPlanningSearchSourceProvider + (BotCapabilityMetadata_BotCapabilityType)(0), // 19: WAWebProtobufsAICommon.BotCapabilityMetadata.BotCapabilityType + (BotModeSelectionMetadata_BotUserSelectionMode)(0), // 20: WAWebProtobufsAICommon.BotModeSelectionMetadata.BotUserSelectionMode + (BotQuotaMetadata_BotFeatureQuotaMetadata_BotFeatureType)(0), // 21: WAWebProtobufsAICommon.BotQuotaMetadata.BotFeatureQuotaMetadata.BotFeatureType + (BotImagineMetadata_ImagineType)(0), // 22: WAWebProtobufsAICommon.BotImagineMetadata.ImagineType + (BotAgeCollectionMetadata_AgeCollectionType)(0), // 23: WAWebProtobufsAICommon.BotAgeCollectionMetadata.AgeCollectionType + (BotSourcesMetadata_BotSourceItem_SourceProvider)(0), // 24: WAWebProtobufsAICommon.BotSourcesMetadata.BotSourceItem.SourceProvider + (BotMessageOrigin_BotMessageOriginType)(0), // 25: WAWebProtobufsAICommon.BotMessageOrigin.BotMessageOriginType + (AIThreadInfo_AIThreadClientInfo_AIThreadType)(0), // 26: WAWebProtobufsAICommon.AIThreadInfo.AIThreadClientInfo.AIThreadType + (BotFeedbackMessage_ReportKind)(0), // 27: WAWebProtobufsAICommon.BotFeedbackMessage.ReportKind + (BotFeedbackMessage_BotFeedbackKindMultiplePositive)(0), // 28: WAWebProtobufsAICommon.BotFeedbackMessage.BotFeedbackKindMultiplePositive + (BotFeedbackMessage_BotFeedbackKindMultipleNegative)(0), // 29: WAWebProtobufsAICommon.BotFeedbackMessage.BotFeedbackKindMultipleNegative + (BotFeedbackMessage_BotFeedbackKind)(0), // 30: WAWebProtobufsAICommon.BotFeedbackMessage.BotFeedbackKind + (AIRichResponseInlineImageMetadata_AIRichResponseImageAlignment)(0), // 31: WAWebProtobufsAICommon.AIRichResponseInlineImageMetadata.AIRichResponseImageAlignment + (AIRichResponseCodeMetadata_AIRichResponseCodeHighlightType)(0), // 32: WAWebProtobufsAICommon.AIRichResponseCodeMetadata.AIRichResponseCodeHighlightType + (AIRichResponseDynamicMetadata_AIRichResponseDynamicMetadataType)(0), // 33: WAWebProtobufsAICommon.AIRichResponseDynamicMetadata.AIRichResponseDynamicMetadataType + (AIRichResponseContentItemsMetadata_ContentType)(0), // 34: WAWebProtobufsAICommon.AIRichResponseContentItemsMetadata.ContentType + (BotDocumentMessageMetadata_DocumentPluginType)(0), // 35: WAWebProtobufsAICommon.BotDocumentMessageMetadata.DocumentPluginType + (AIHomeState_AIHomeOption_AIHomeActionType)(0), // 36: WAWebProtobufsAICommon.AIHomeState.AIHomeOption.AIHomeActionType + (BotInfrastructureDiagnostics_BotBackend)(0), // 37: WAWebProtobufsAICommon.BotInfrastructureDiagnostics.BotBackend + (*BotPluginMetadata)(nil), // 38: WAWebProtobufsAICommon.BotPluginMetadata + (*BotLinkedAccount)(nil), // 39: WAWebProtobufsAICommon.BotLinkedAccount + (*BotSignatureVerificationUseCaseProof)(nil), // 40: WAWebProtobufsAICommon.BotSignatureVerificationUseCaseProof + (*BotPromotionMessageMetadata)(nil), // 41: WAWebProtobufsAICommon.BotPromotionMessageMetadata + (*BotMediaMetadata)(nil), // 42: WAWebProtobufsAICommon.BotMediaMetadata + (*BotReminderMetadata)(nil), // 43: WAWebProtobufsAICommon.BotReminderMetadata + (*BotModelMetadata)(nil), // 44: WAWebProtobufsAICommon.BotModelMetadata + (*BotProgressIndicatorMetadata)(nil), // 45: WAWebProtobufsAICommon.BotProgressIndicatorMetadata + (*BotCapabilityMetadata)(nil), // 46: WAWebProtobufsAICommon.BotCapabilityMetadata + (*BotModeSelectionMetadata)(nil), // 47: WAWebProtobufsAICommon.BotModeSelectionMetadata + (*BotQuotaMetadata)(nil), // 48: WAWebProtobufsAICommon.BotQuotaMetadata + (*BotImagineMetadata)(nil), // 49: WAWebProtobufsAICommon.BotImagineMetadata + (*BotAgeCollectionMetadata)(nil), // 50: WAWebProtobufsAICommon.BotAgeCollectionMetadata + (*BotSourcesMetadata)(nil), // 51: WAWebProtobufsAICommon.BotSourcesMetadata + (*BotMessageOrigin)(nil), // 52: WAWebProtobufsAICommon.BotMessageOrigin + (*AIThreadInfo)(nil), // 53: WAWebProtobufsAICommon.AIThreadInfo + (*BotFeedbackMessage)(nil), // 54: WAWebProtobufsAICommon.BotFeedbackMessage + (*AIRichResponseInlineImageMetadata)(nil), // 55: WAWebProtobufsAICommon.AIRichResponseInlineImageMetadata + (*AIRichResponseCodeMetadata)(nil), // 56: WAWebProtobufsAICommon.AIRichResponseCodeMetadata + (*AIRichResponseDynamicMetadata)(nil), // 57: WAWebProtobufsAICommon.AIRichResponseDynamicMetadata + (*AIRichResponseContentItemsMetadata)(nil), // 58: WAWebProtobufsAICommon.AIRichResponseContentItemsMetadata + (*BotDocumentMessageMetadata)(nil), // 59: WAWebProtobufsAICommon.BotDocumentMessageMetadata + (*AIHomeState)(nil), // 60: WAWebProtobufsAICommon.AIHomeState + (*BotInfrastructureDiagnostics)(nil), // 61: WAWebProtobufsAICommon.BotInfrastructureDiagnostics + (*BotSuggestedPromptMetadata)(nil), // 62: WAWebProtobufsAICommon.BotSuggestedPromptMetadata + (*BotPromptSuggestions)(nil), // 63: WAWebProtobufsAICommon.BotPromptSuggestions + (*BotPromptSuggestion)(nil), // 64: WAWebProtobufsAICommon.BotPromptSuggestion + (*BotLinkedAccountsMetadata)(nil), // 65: WAWebProtobufsAICommon.BotLinkedAccountsMetadata + (*BotMemoryMetadata)(nil), // 66: WAWebProtobufsAICommon.BotMemoryMetadata + (*BotMemoryFact)(nil), // 67: WAWebProtobufsAICommon.BotMemoryFact + (*BotSignatureVerificationMetadata)(nil), // 68: WAWebProtobufsAICommon.BotSignatureVerificationMetadata + (*BotRenderingMetadata)(nil), // 69: WAWebProtobufsAICommon.BotRenderingMetadata + (*BotMetricsMetadata)(nil), // 70: WAWebProtobufsAICommon.BotMetricsMetadata + (*BotSessionMetadata)(nil), // 71: WAWebProtobufsAICommon.BotSessionMetadata + (*BotMemuMetadata)(nil), // 72: WAWebProtobufsAICommon.BotMemuMetadata + (*InThreadSurveyMetadata)(nil), // 73: WAWebProtobufsAICommon.InThreadSurveyMetadata + (*BotMessageOriginMetadata)(nil), // 74: WAWebProtobufsAICommon.BotMessageOriginMetadata + (*BotUnifiedResponseMutation)(nil), // 75: WAWebProtobufsAICommon.BotUnifiedResponseMutation + (*AIMediaCollectionMetadata)(nil), // 76: WAWebProtobufsAICommon.AIMediaCollectionMetadata + (*AIMediaCollectionMessage)(nil), // 77: WAWebProtobufsAICommon.AIMediaCollectionMessage + (*BotMetadata)(nil), // 78: WAWebProtobufsAICommon.BotMetadata + (*BotGroupMetadata)(nil), // 79: WAWebProtobufsAICommon.BotGroupMetadata + (*BotRenderingConfigMetadata)(nil), // 80: WAWebProtobufsAICommon.BotRenderingConfigMetadata + (*BotGroupParticipantMetadata)(nil), // 81: WAWebProtobufsAICommon.BotGroupParticipantMetadata + (*ForwardedAIBotMessageInfo)(nil), // 82: WAWebProtobufsAICommon.ForwardedAIBotMessageInfo + (*BotMessageSharingInfo)(nil), // 83: WAWebProtobufsAICommon.BotMessageSharingInfo + (*AIRichResponseImageURL)(nil), // 84: WAWebProtobufsAICommon.AIRichResponseImageURL + (*AIRichResponseGridImageMetadata)(nil), // 85: WAWebProtobufsAICommon.AIRichResponseGridImageMetadata + (*AIRichResponseTableMetadata)(nil), // 86: WAWebProtobufsAICommon.AIRichResponseTableMetadata + (*AIRichResponseUnifiedResponse)(nil), // 87: WAWebProtobufsAICommon.AIRichResponseUnifiedResponse + (*AIRichResponseLatexMetadata)(nil), // 88: WAWebProtobufsAICommon.AIRichResponseLatexMetadata + (*AIRichResponseMapMetadata)(nil), // 89: WAWebProtobufsAICommon.AIRichResponseMapMetadata + (*AIRichResponseSubMessage)(nil), // 90: WAWebProtobufsAICommon.AIRichResponseSubMessage + (*AIRegenerateMetadata)(nil), // 91: WAWebProtobufsAICommon.AIRegenerateMetadata + (*SessionTransparencyMetadata)(nil), // 92: WAWebProtobufsAICommon.SessionTransparencyMetadata + (*BotProgressIndicatorMetadata_BotPlanningStepMetadata)(nil), // 93: WAWebProtobufsAICommon.BotProgressIndicatorMetadata.BotPlanningStepMetadata + (*BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningSearchSourcesMetadata)(nil), // 94: WAWebProtobufsAICommon.BotProgressIndicatorMetadata.BotPlanningStepMetadata.BotPlanningSearchSourcesMetadata + (*BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningStepSectionMetadata)(nil), // 95: WAWebProtobufsAICommon.BotProgressIndicatorMetadata.BotPlanningStepMetadata.BotPlanningStepSectionMetadata + (*BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningSearchSourceMetadata)(nil), // 96: WAWebProtobufsAICommon.BotProgressIndicatorMetadata.BotPlanningStepMetadata.BotPlanningSearchSourceMetadata + (*BotQuotaMetadata_BotFeatureQuotaMetadata)(nil), // 97: WAWebProtobufsAICommon.BotQuotaMetadata.BotFeatureQuotaMetadata + (*BotSourcesMetadata_BotSourceItem)(nil), // 98: WAWebProtobufsAICommon.BotSourcesMetadata.BotSourceItem + (*AIThreadInfo_AIThreadClientInfo)(nil), // 99: WAWebProtobufsAICommon.AIThreadInfo.AIThreadClientInfo + (*AIThreadInfo_AIThreadServerInfo)(nil), // 100: WAWebProtobufsAICommon.AIThreadInfo.AIThreadServerInfo + (*BotFeedbackMessage_SideBySideSurveyMetadata)(nil), // 101: WAWebProtobufsAICommon.BotFeedbackMessage.SideBySideSurveyMetadata + (*BotFeedbackMessage_SideBySideSurveyMetadata_SidebySideSurveyMetaAiAnalyticsData)(nil), // 102: WAWebProtobufsAICommon.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData + (*BotFeedbackMessage_SideBySideSurveyMetadata_SideBySideSurveyAnalyticsData)(nil), // 103: WAWebProtobufsAICommon.BotFeedbackMessage.SideBySideSurveyMetadata.SideBySideSurveyAnalyticsData + (*BotFeedbackMessage_SideBySideSurveyMetadata_SidebySideSurveyMetaAiAnalyticsData_SideBySideSurveyAbandonEventData)(nil), // 104: WAWebProtobufsAICommon.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData.SideBySideSurveyAbandonEventData + (*BotFeedbackMessage_SideBySideSurveyMetadata_SidebySideSurveyMetaAiAnalyticsData_SideBySideSurveyResponseEventData)(nil), // 105: WAWebProtobufsAICommon.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData.SideBySideSurveyResponseEventData + (*BotFeedbackMessage_SideBySideSurveyMetadata_SidebySideSurveyMetaAiAnalyticsData_SideBySideSurveyCardImpressionEventData)(nil), // 106: WAWebProtobufsAICommon.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData.SideBySideSurveyCardImpressionEventData + (*BotFeedbackMessage_SideBySideSurveyMetadata_SidebySideSurveyMetaAiAnalyticsData_SideBySideSurveyCTAClickEventData)(nil), // 107: WAWebProtobufsAICommon.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData.SideBySideSurveyCTAClickEventData + (*BotFeedbackMessage_SideBySideSurveyMetadata_SidebySideSurveyMetaAiAnalyticsData_SideBySideSurveyCTAImpressionEventData)(nil), // 108: WAWebProtobufsAICommon.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData.SideBySideSurveyCTAImpressionEventData + (*AIRichResponseCodeMetadata_AIRichResponseCodeBlock)(nil), // 109: WAWebProtobufsAICommon.AIRichResponseCodeMetadata.AIRichResponseCodeBlock + (*AIRichResponseContentItemsMetadata_AIRichResponseContentItemMetadata)(nil), // 110: WAWebProtobufsAICommon.AIRichResponseContentItemsMetadata.AIRichResponseContentItemMetadata + (*AIRichResponseContentItemsMetadata_AIRichResponseReelItem)(nil), // 111: WAWebProtobufsAICommon.AIRichResponseContentItemsMetadata.AIRichResponseReelItem + (*AIHomeState_AIHomeOption)(nil), // 112: WAWebProtobufsAICommon.AIHomeState.AIHomeOption + (*BotRenderingMetadata_Keyword)(nil), // 113: WAWebProtobufsAICommon.BotRenderingMetadata.Keyword + (*InThreadSurveyMetadata_InThreadSurveyPrivacyStatementPart)(nil), // 114: WAWebProtobufsAICommon.InThreadSurveyMetadata.InThreadSurveyPrivacyStatementPart + (*InThreadSurveyMetadata_InThreadSurveyOption)(nil), // 115: WAWebProtobufsAICommon.InThreadSurveyMetadata.InThreadSurveyOption + (*InThreadSurveyMetadata_InThreadSurveyQuestion)(nil), // 116: WAWebProtobufsAICommon.InThreadSurveyMetadata.InThreadSurveyQuestion + (*BotUnifiedResponseMutation_MediaDetailsMetadata)(nil), // 117: WAWebProtobufsAICommon.BotUnifiedResponseMutation.MediaDetailsMetadata + (*BotUnifiedResponseMutation_SideBySideMetadata)(nil), // 118: WAWebProtobufsAICommon.BotUnifiedResponseMutation.SideBySideMetadata + (*AIRichResponseTableMetadata_AIRichResponseTableRow)(nil), // 119: WAWebProtobufsAICommon.AIRichResponseTableMetadata.AIRichResponseTableRow + (*AIRichResponseLatexMetadata_AIRichResponseLatexExpression)(nil), // 120: WAWebProtobufsAICommon.AIRichResponseLatexMetadata.AIRichResponseLatexExpression + (*AIRichResponseMapMetadata_AIRichResponseMapAnnotation)(nil), // 121: WAWebProtobufsAICommon.AIRichResponseMapMetadata.AIRichResponseMapAnnotation + (*waCommon.MessageKey)(nil), // 122: WACommon.MessageKey +} +var file_waAICommon_WAWebProtobufsAICommon_proto_depIdxs = []int32{ + 7, // 0: WAWebProtobufsAICommon.BotPluginMetadata.provider:type_name -> WAWebProtobufsAICommon.BotPluginMetadata.SearchProvider + 6, // 1: WAWebProtobufsAICommon.BotPluginMetadata.pluginType:type_name -> WAWebProtobufsAICommon.BotPluginMetadata.PluginType + 122, // 2: WAWebProtobufsAICommon.BotPluginMetadata.parentPluginMessageKey:type_name -> WACommon.MessageKey + 6, // 3: WAWebProtobufsAICommon.BotPluginMetadata.deprecatedField:type_name -> WAWebProtobufsAICommon.BotPluginMetadata.PluginType + 6, // 4: WAWebProtobufsAICommon.BotPluginMetadata.parentPluginType:type_name -> WAWebProtobufsAICommon.BotPluginMetadata.PluginType + 8, // 5: WAWebProtobufsAICommon.BotLinkedAccount.type:type_name -> WAWebProtobufsAICommon.BotLinkedAccount.BotLinkedAccountType + 9, // 6: WAWebProtobufsAICommon.BotSignatureVerificationUseCaseProof.useCase:type_name -> WAWebProtobufsAICommon.BotSignatureVerificationUseCaseProof.BotSignatureUseCase + 10, // 7: WAWebProtobufsAICommon.BotPromotionMessageMetadata.promotionType:type_name -> WAWebProtobufsAICommon.BotPromotionMessageMetadata.BotPromotionType + 11, // 8: WAWebProtobufsAICommon.BotMediaMetadata.orientationType:type_name -> WAWebProtobufsAICommon.BotMediaMetadata.OrientationType + 122, // 9: WAWebProtobufsAICommon.BotReminderMetadata.requestMessageKey:type_name -> WACommon.MessageKey + 13, // 10: WAWebProtobufsAICommon.BotReminderMetadata.action:type_name -> WAWebProtobufsAICommon.BotReminderMetadata.ReminderAction + 12, // 11: WAWebProtobufsAICommon.BotReminderMetadata.frequency:type_name -> WAWebProtobufsAICommon.BotReminderMetadata.ReminderFrequency + 15, // 12: WAWebProtobufsAICommon.BotModelMetadata.modelType:type_name -> WAWebProtobufsAICommon.BotModelMetadata.ModelType + 14, // 13: WAWebProtobufsAICommon.BotModelMetadata.premiumModelStatus:type_name -> WAWebProtobufsAICommon.BotModelMetadata.PremiumModelStatus + 93, // 14: WAWebProtobufsAICommon.BotProgressIndicatorMetadata.stepsMetadata:type_name -> WAWebProtobufsAICommon.BotProgressIndicatorMetadata.BotPlanningStepMetadata + 19, // 15: WAWebProtobufsAICommon.BotCapabilityMetadata.capabilities:type_name -> WAWebProtobufsAICommon.BotCapabilityMetadata.BotCapabilityType + 20, // 16: WAWebProtobufsAICommon.BotModeSelectionMetadata.mode:type_name -> WAWebProtobufsAICommon.BotModeSelectionMetadata.BotUserSelectionMode + 97, // 17: WAWebProtobufsAICommon.BotQuotaMetadata.botFeatureQuotaMetadata:type_name -> WAWebProtobufsAICommon.BotQuotaMetadata.BotFeatureQuotaMetadata + 22, // 18: WAWebProtobufsAICommon.BotImagineMetadata.imagineType:type_name -> WAWebProtobufsAICommon.BotImagineMetadata.ImagineType + 23, // 19: WAWebProtobufsAICommon.BotAgeCollectionMetadata.ageCollectionType:type_name -> WAWebProtobufsAICommon.BotAgeCollectionMetadata.AgeCollectionType + 98, // 20: WAWebProtobufsAICommon.BotSourcesMetadata.sources:type_name -> WAWebProtobufsAICommon.BotSourcesMetadata.BotSourceItem + 25, // 21: WAWebProtobufsAICommon.BotMessageOrigin.type:type_name -> WAWebProtobufsAICommon.BotMessageOrigin.BotMessageOriginType + 100, // 22: WAWebProtobufsAICommon.AIThreadInfo.serverInfo:type_name -> WAWebProtobufsAICommon.AIThreadInfo.AIThreadServerInfo + 99, // 23: WAWebProtobufsAICommon.AIThreadInfo.clientInfo:type_name -> WAWebProtobufsAICommon.AIThreadInfo.AIThreadClientInfo + 122, // 24: WAWebProtobufsAICommon.BotFeedbackMessage.messageKey:type_name -> WACommon.MessageKey + 30, // 25: WAWebProtobufsAICommon.BotFeedbackMessage.kind:type_name -> WAWebProtobufsAICommon.BotFeedbackMessage.BotFeedbackKind + 27, // 26: WAWebProtobufsAICommon.BotFeedbackMessage.kindReport:type_name -> WAWebProtobufsAICommon.BotFeedbackMessage.ReportKind + 101, // 27: WAWebProtobufsAICommon.BotFeedbackMessage.sideBySideSurveyMetadata:type_name -> WAWebProtobufsAICommon.BotFeedbackMessage.SideBySideSurveyMetadata + 84, // 28: WAWebProtobufsAICommon.AIRichResponseInlineImageMetadata.imageURL:type_name -> WAWebProtobufsAICommon.AIRichResponseImageURL + 31, // 29: WAWebProtobufsAICommon.AIRichResponseInlineImageMetadata.alignment:type_name -> WAWebProtobufsAICommon.AIRichResponseInlineImageMetadata.AIRichResponseImageAlignment + 109, // 30: WAWebProtobufsAICommon.AIRichResponseCodeMetadata.codeBlocks:type_name -> WAWebProtobufsAICommon.AIRichResponseCodeMetadata.AIRichResponseCodeBlock + 33, // 31: WAWebProtobufsAICommon.AIRichResponseDynamicMetadata.type:type_name -> WAWebProtobufsAICommon.AIRichResponseDynamicMetadata.AIRichResponseDynamicMetadataType + 110, // 32: WAWebProtobufsAICommon.AIRichResponseContentItemsMetadata.itemsMetadata:type_name -> WAWebProtobufsAICommon.AIRichResponseContentItemsMetadata.AIRichResponseContentItemMetadata + 34, // 33: WAWebProtobufsAICommon.AIRichResponseContentItemsMetadata.contentType:type_name -> WAWebProtobufsAICommon.AIRichResponseContentItemsMetadata.ContentType + 35, // 34: WAWebProtobufsAICommon.BotDocumentMessageMetadata.pluginType:type_name -> WAWebProtobufsAICommon.BotDocumentMessageMetadata.DocumentPluginType + 112, // 35: WAWebProtobufsAICommon.AIHomeState.capabilityOptions:type_name -> WAWebProtobufsAICommon.AIHomeState.AIHomeOption + 112, // 36: WAWebProtobufsAICommon.AIHomeState.conversationOptions:type_name -> WAWebProtobufsAICommon.AIHomeState.AIHomeOption + 37, // 37: WAWebProtobufsAICommon.BotInfrastructureDiagnostics.botBackend:type_name -> WAWebProtobufsAICommon.BotInfrastructureDiagnostics.BotBackend + 63, // 38: WAWebProtobufsAICommon.BotSuggestedPromptMetadata.promptSuggestions:type_name -> WAWebProtobufsAICommon.BotPromptSuggestions + 64, // 39: WAWebProtobufsAICommon.BotPromptSuggestions.suggestions:type_name -> WAWebProtobufsAICommon.BotPromptSuggestion + 39, // 40: WAWebProtobufsAICommon.BotLinkedAccountsMetadata.accounts:type_name -> WAWebProtobufsAICommon.BotLinkedAccount + 67, // 41: WAWebProtobufsAICommon.BotMemoryMetadata.addedFacts:type_name -> WAWebProtobufsAICommon.BotMemoryFact + 67, // 42: WAWebProtobufsAICommon.BotMemoryMetadata.removedFacts:type_name -> WAWebProtobufsAICommon.BotMemoryFact + 40, // 43: WAWebProtobufsAICommon.BotSignatureVerificationMetadata.proofs:type_name -> WAWebProtobufsAICommon.BotSignatureVerificationUseCaseProof + 113, // 44: WAWebProtobufsAICommon.BotRenderingMetadata.keywords:type_name -> WAWebProtobufsAICommon.BotRenderingMetadata.Keyword + 0, // 45: WAWebProtobufsAICommon.BotMetricsMetadata.destinationEntryPoint:type_name -> WAWebProtobufsAICommon.BotMetricsEntryPoint + 1, // 46: WAWebProtobufsAICommon.BotMetricsMetadata.threadOrigin:type_name -> WAWebProtobufsAICommon.BotMetricsThreadEntryPoint + 2, // 47: WAWebProtobufsAICommon.BotSessionMetadata.sessionSource:type_name -> WAWebProtobufsAICommon.BotSessionSource + 42, // 48: WAWebProtobufsAICommon.BotMemuMetadata.faceImages:type_name -> WAWebProtobufsAICommon.BotMediaMetadata + 116, // 49: WAWebProtobufsAICommon.InThreadSurveyMetadata.questions:type_name -> WAWebProtobufsAICommon.InThreadSurveyMetadata.InThreadSurveyQuestion + 114, // 50: WAWebProtobufsAICommon.InThreadSurveyMetadata.privacyStatementParts:type_name -> WAWebProtobufsAICommon.InThreadSurveyMetadata.InThreadSurveyPrivacyStatementPart + 52, // 51: WAWebProtobufsAICommon.BotMessageOriginMetadata.origins:type_name -> WAWebProtobufsAICommon.BotMessageOrigin + 118, // 52: WAWebProtobufsAICommon.BotUnifiedResponseMutation.sbsMetadata:type_name -> WAWebProtobufsAICommon.BotUnifiedResponseMutation.SideBySideMetadata + 117, // 53: WAWebProtobufsAICommon.BotUnifiedResponseMutation.mediaDetailsMetadataList:type_name -> WAWebProtobufsAICommon.BotUnifiedResponseMutation.MediaDetailsMetadata + 38, // 54: WAWebProtobufsAICommon.BotMetadata.pluginMetadata:type_name -> WAWebProtobufsAICommon.BotPluginMetadata + 62, // 55: WAWebProtobufsAICommon.BotMetadata.suggestedPromptMetadata:type_name -> WAWebProtobufsAICommon.BotSuggestedPromptMetadata + 71, // 56: WAWebProtobufsAICommon.BotMetadata.sessionMetadata:type_name -> WAWebProtobufsAICommon.BotSessionMetadata + 72, // 57: WAWebProtobufsAICommon.BotMetadata.memuMetadata:type_name -> WAWebProtobufsAICommon.BotMemuMetadata + 43, // 58: WAWebProtobufsAICommon.BotMetadata.reminderMetadata:type_name -> WAWebProtobufsAICommon.BotReminderMetadata + 44, // 59: WAWebProtobufsAICommon.BotMetadata.modelMetadata:type_name -> WAWebProtobufsAICommon.BotModelMetadata + 45, // 60: WAWebProtobufsAICommon.BotMetadata.progressIndicatorMetadata:type_name -> WAWebProtobufsAICommon.BotProgressIndicatorMetadata + 46, // 61: WAWebProtobufsAICommon.BotMetadata.capabilityMetadata:type_name -> WAWebProtobufsAICommon.BotCapabilityMetadata + 49, // 62: WAWebProtobufsAICommon.BotMetadata.imagineMetadata:type_name -> WAWebProtobufsAICommon.BotImagineMetadata + 66, // 63: WAWebProtobufsAICommon.BotMetadata.memoryMetadata:type_name -> WAWebProtobufsAICommon.BotMemoryMetadata + 69, // 64: WAWebProtobufsAICommon.BotMetadata.renderingMetadata:type_name -> WAWebProtobufsAICommon.BotRenderingMetadata + 70, // 65: WAWebProtobufsAICommon.BotMetadata.botMetricsMetadata:type_name -> WAWebProtobufsAICommon.BotMetricsMetadata + 65, // 66: WAWebProtobufsAICommon.BotMetadata.botLinkedAccountsMetadata:type_name -> WAWebProtobufsAICommon.BotLinkedAccountsMetadata + 51, // 67: WAWebProtobufsAICommon.BotMetadata.richResponseSourcesMetadata:type_name -> WAWebProtobufsAICommon.BotSourcesMetadata + 41, // 68: WAWebProtobufsAICommon.BotMetadata.botPromotionMessageMetadata:type_name -> WAWebProtobufsAICommon.BotPromotionMessageMetadata + 47, // 69: WAWebProtobufsAICommon.BotMetadata.botModeSelectionMetadata:type_name -> WAWebProtobufsAICommon.BotModeSelectionMetadata + 48, // 70: WAWebProtobufsAICommon.BotMetadata.botQuotaMetadata:type_name -> WAWebProtobufsAICommon.BotQuotaMetadata + 50, // 71: WAWebProtobufsAICommon.BotMetadata.botAgeCollectionMetadata:type_name -> WAWebProtobufsAICommon.BotAgeCollectionMetadata + 68, // 72: WAWebProtobufsAICommon.BotMetadata.verificationMetadata:type_name -> WAWebProtobufsAICommon.BotSignatureVerificationMetadata + 75, // 73: WAWebProtobufsAICommon.BotMetadata.unifiedResponseMutation:type_name -> WAWebProtobufsAICommon.BotUnifiedResponseMutation + 74, // 74: WAWebProtobufsAICommon.BotMetadata.botMessageOriginMetadata:type_name -> WAWebProtobufsAICommon.BotMessageOriginMetadata + 73, // 75: WAWebProtobufsAICommon.BotMetadata.inThreadSurveyMetadata:type_name -> WAWebProtobufsAICommon.InThreadSurveyMetadata + 53, // 76: WAWebProtobufsAICommon.BotMetadata.botThreadInfo:type_name -> WAWebProtobufsAICommon.AIThreadInfo + 91, // 77: WAWebProtobufsAICommon.BotMetadata.regenerateMetadata:type_name -> WAWebProtobufsAICommon.AIRegenerateMetadata + 92, // 78: WAWebProtobufsAICommon.BotMetadata.sessionTransparencyMetadata:type_name -> WAWebProtobufsAICommon.SessionTransparencyMetadata + 59, // 79: WAWebProtobufsAICommon.BotMetadata.botDocumentMessageMetadata:type_name -> WAWebProtobufsAICommon.BotDocumentMessageMetadata + 79, // 80: WAWebProtobufsAICommon.BotMetadata.botGroupMetadata:type_name -> WAWebProtobufsAICommon.BotGroupMetadata + 80, // 81: WAWebProtobufsAICommon.BotMetadata.botRenderingConfigMetadata:type_name -> WAWebProtobufsAICommon.BotRenderingConfigMetadata + 61, // 82: WAWebProtobufsAICommon.BotMetadata.botInfrastructureDiagnostics:type_name -> WAWebProtobufsAICommon.BotInfrastructureDiagnostics + 76, // 83: WAWebProtobufsAICommon.BotMetadata.aiMediaCollectionMetadata:type_name -> WAWebProtobufsAICommon.AIMediaCollectionMetadata + 81, // 84: WAWebProtobufsAICommon.BotGroupMetadata.participantsMetadata:type_name -> WAWebProtobufsAICommon.BotGroupParticipantMetadata + 0, // 85: WAWebProtobufsAICommon.BotMessageSharingInfo.botEntryPointOrigin:type_name -> WAWebProtobufsAICommon.BotMetricsEntryPoint + 84, // 86: WAWebProtobufsAICommon.AIRichResponseGridImageMetadata.gridImageURL:type_name -> WAWebProtobufsAICommon.AIRichResponseImageURL + 84, // 87: WAWebProtobufsAICommon.AIRichResponseGridImageMetadata.imageURLs:type_name -> WAWebProtobufsAICommon.AIRichResponseImageURL + 119, // 88: WAWebProtobufsAICommon.AIRichResponseTableMetadata.rows:type_name -> WAWebProtobufsAICommon.AIRichResponseTableMetadata.AIRichResponseTableRow + 120, // 89: WAWebProtobufsAICommon.AIRichResponseLatexMetadata.expressions:type_name -> WAWebProtobufsAICommon.AIRichResponseLatexMetadata.AIRichResponseLatexExpression + 121, // 90: WAWebProtobufsAICommon.AIRichResponseMapMetadata.annotations:type_name -> WAWebProtobufsAICommon.AIRichResponseMapMetadata.AIRichResponseMapAnnotation + 4, // 91: WAWebProtobufsAICommon.AIRichResponseSubMessage.messageType:type_name -> WAWebProtobufsAICommon.AIRichResponseSubMessageType + 85, // 92: WAWebProtobufsAICommon.AIRichResponseSubMessage.gridImageMetadata:type_name -> WAWebProtobufsAICommon.AIRichResponseGridImageMetadata + 55, // 93: WAWebProtobufsAICommon.AIRichResponseSubMessage.imageMetadata:type_name -> WAWebProtobufsAICommon.AIRichResponseInlineImageMetadata + 56, // 94: WAWebProtobufsAICommon.AIRichResponseSubMessage.codeMetadata:type_name -> WAWebProtobufsAICommon.AIRichResponseCodeMetadata + 86, // 95: WAWebProtobufsAICommon.AIRichResponseSubMessage.tableMetadata:type_name -> WAWebProtobufsAICommon.AIRichResponseTableMetadata + 57, // 96: WAWebProtobufsAICommon.AIRichResponseSubMessage.dynamicMetadata:type_name -> WAWebProtobufsAICommon.AIRichResponseDynamicMetadata + 88, // 97: WAWebProtobufsAICommon.AIRichResponseSubMessage.latexMetadata:type_name -> WAWebProtobufsAICommon.AIRichResponseLatexMetadata + 89, // 98: WAWebProtobufsAICommon.AIRichResponseSubMessage.mapMetadata:type_name -> WAWebProtobufsAICommon.AIRichResponseMapMetadata + 58, // 99: WAWebProtobufsAICommon.AIRichResponseSubMessage.contentItemsMetadata:type_name -> WAWebProtobufsAICommon.AIRichResponseContentItemsMetadata + 122, // 100: WAWebProtobufsAICommon.AIRegenerateMetadata.messageKey:type_name -> WACommon.MessageKey + 5, // 101: WAWebProtobufsAICommon.SessionTransparencyMetadata.sessionTransparencyType:type_name -> WAWebProtobufsAICommon.SessionTransparencyType + 94, // 102: WAWebProtobufsAICommon.BotProgressIndicatorMetadata.BotPlanningStepMetadata.sourcesMetadata:type_name -> WAWebProtobufsAICommon.BotProgressIndicatorMetadata.BotPlanningStepMetadata.BotPlanningSearchSourcesMetadata + 17, // 103: WAWebProtobufsAICommon.BotProgressIndicatorMetadata.BotPlanningStepMetadata.status:type_name -> WAWebProtobufsAICommon.BotProgressIndicatorMetadata.BotPlanningStepMetadata.PlanningStepStatus + 95, // 104: WAWebProtobufsAICommon.BotProgressIndicatorMetadata.BotPlanningStepMetadata.sections:type_name -> WAWebProtobufsAICommon.BotProgressIndicatorMetadata.BotPlanningStepMetadata.BotPlanningStepSectionMetadata + 18, // 105: WAWebProtobufsAICommon.BotProgressIndicatorMetadata.BotPlanningStepMetadata.BotPlanningSearchSourcesMetadata.provider:type_name -> WAWebProtobufsAICommon.BotProgressIndicatorMetadata.BotPlanningStepMetadata.BotPlanningSearchSourcesMetadata.BotPlanningSearchSourceProvider + 96, // 106: WAWebProtobufsAICommon.BotProgressIndicatorMetadata.BotPlanningStepMetadata.BotPlanningStepSectionMetadata.sourcesMetadata:type_name -> WAWebProtobufsAICommon.BotProgressIndicatorMetadata.BotPlanningStepMetadata.BotPlanningSearchSourceMetadata + 16, // 107: WAWebProtobufsAICommon.BotProgressIndicatorMetadata.BotPlanningStepMetadata.BotPlanningSearchSourceMetadata.provider:type_name -> WAWebProtobufsAICommon.BotProgressIndicatorMetadata.BotPlanningStepMetadata.BotSearchSourceProvider + 21, // 108: WAWebProtobufsAICommon.BotQuotaMetadata.BotFeatureQuotaMetadata.featureType:type_name -> WAWebProtobufsAICommon.BotQuotaMetadata.BotFeatureQuotaMetadata.BotFeatureType + 24, // 109: WAWebProtobufsAICommon.BotSourcesMetadata.BotSourceItem.provider:type_name -> WAWebProtobufsAICommon.BotSourcesMetadata.BotSourceItem.SourceProvider + 26, // 110: WAWebProtobufsAICommon.AIThreadInfo.AIThreadClientInfo.type:type_name -> WAWebProtobufsAICommon.AIThreadInfo.AIThreadClientInfo.AIThreadType + 103, // 111: WAWebProtobufsAICommon.BotFeedbackMessage.SideBySideSurveyMetadata.analyticsData:type_name -> WAWebProtobufsAICommon.BotFeedbackMessage.SideBySideSurveyMetadata.SideBySideSurveyAnalyticsData + 102, // 112: WAWebProtobufsAICommon.BotFeedbackMessage.SideBySideSurveyMetadata.metaAiAnalyticsData:type_name -> WAWebProtobufsAICommon.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData + 108, // 113: WAWebProtobufsAICommon.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData.ctaImpressionEvent:type_name -> WAWebProtobufsAICommon.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData.SideBySideSurveyCTAImpressionEventData + 107, // 114: WAWebProtobufsAICommon.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData.ctaClickEvent:type_name -> WAWebProtobufsAICommon.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData.SideBySideSurveyCTAClickEventData + 106, // 115: WAWebProtobufsAICommon.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData.cardImpressionEvent:type_name -> WAWebProtobufsAICommon.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData.SideBySideSurveyCardImpressionEventData + 105, // 116: WAWebProtobufsAICommon.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData.responseEvent:type_name -> WAWebProtobufsAICommon.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData.SideBySideSurveyResponseEventData + 104, // 117: WAWebProtobufsAICommon.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData.abandonEvent:type_name -> WAWebProtobufsAICommon.BotFeedbackMessage.SideBySideSurveyMetadata.SidebySideSurveyMetaAiAnalyticsData.SideBySideSurveyAbandonEventData + 32, // 118: WAWebProtobufsAICommon.AIRichResponseCodeMetadata.AIRichResponseCodeBlock.highlightType:type_name -> WAWebProtobufsAICommon.AIRichResponseCodeMetadata.AIRichResponseCodeHighlightType + 111, // 119: WAWebProtobufsAICommon.AIRichResponseContentItemsMetadata.AIRichResponseContentItemMetadata.reelItem:type_name -> WAWebProtobufsAICommon.AIRichResponseContentItemsMetadata.AIRichResponseReelItem + 36, // 120: WAWebProtobufsAICommon.AIHomeState.AIHomeOption.type:type_name -> WAWebProtobufsAICommon.AIHomeState.AIHomeOption.AIHomeActionType + 115, // 121: WAWebProtobufsAICommon.InThreadSurveyMetadata.InThreadSurveyQuestion.questionOptions:type_name -> WAWebProtobufsAICommon.InThreadSurveyMetadata.InThreadSurveyOption + 42, // 122: WAWebProtobufsAICommon.BotUnifiedResponseMutation.MediaDetailsMetadata.highResMedia:type_name -> WAWebProtobufsAICommon.BotMediaMetadata + 42, // 123: WAWebProtobufsAICommon.BotUnifiedResponseMutation.MediaDetailsMetadata.previewMedia:type_name -> WAWebProtobufsAICommon.BotMediaMetadata + 124, // [124:124] is the sub-list for method output_type + 124, // [124:124] is the sub-list for method input_type + 124, // [124:124] is the sub-list for extension type_name + 124, // [124:124] is the sub-list for extension extendee + 0, // [0:124] is the sub-list for field type_name +} + +func init() { file_waAICommon_WAWebProtobufsAICommon_proto_init() } +func file_waAICommon_WAWebProtobufsAICommon_proto_init() { + if File_waAICommon_WAWebProtobufsAICommon_proto != nil { + return + } + file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes[72].OneofWrappers = []any{ + (*AIRichResponseContentItemsMetadata_AIRichResponseContentItemMetadata_ReelItem)(nil), + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: unsafe.Slice(unsafe.StringData(file_waAICommon_WAWebProtobufsAICommon_proto_rawDesc), len(file_waAICommon_WAWebProtobufsAICommon_proto_rawDesc)), + NumEnums: 38, + NumMessages: 84, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_waAICommon_WAWebProtobufsAICommon_proto_goTypes, + DependencyIndexes: file_waAICommon_WAWebProtobufsAICommon_proto_depIdxs, + EnumInfos: file_waAICommon_WAWebProtobufsAICommon_proto_enumTypes, + MessageInfos: file_waAICommon_WAWebProtobufsAICommon_proto_msgTypes, + }.Build() + File_waAICommon_WAWebProtobufsAICommon_proto = out.File + file_waAICommon_WAWebProtobufsAICommon_proto_goTypes = nil + file_waAICommon_WAWebProtobufsAICommon_proto_depIdxs = nil +} diff --git a/vendor/go.mau.fi/whatsmeow/proto/waAICommon/WAWebProtobufsAICommon.proto b/vendor/go.mau.fi/whatsmeow/proto/waAICommon/WAWebProtobufsAICommon.proto new file mode 100644 index 0000000000..66fa623dd6 --- /dev/null +++ b/vendor/go.mau.fi/whatsmeow/proto/waAICommon/WAWebProtobufsAICommon.proto @@ -0,0 +1,920 @@ +syntax = "proto2"; +package WAWebProtobufsAICommon; +option go_package = "go.mau.fi/whatsmeow/proto/waAICommon"; + +import "waCommon/WACommon.proto"; + +enum BotMetricsEntryPoint { + UNDEFINED_ENTRY_POINT = 0; + FAVICON = 1; + CHATLIST = 2; + AISEARCH_NULL_STATE_PAPER_PLANE = 3; + AISEARCH_NULL_STATE_SUGGESTION = 4; + AISEARCH_TYPE_AHEAD_SUGGESTION = 5; + AISEARCH_TYPE_AHEAD_PAPER_PLANE = 6; + AISEARCH_TYPE_AHEAD_RESULT_CHATLIST = 7; + AISEARCH_TYPE_AHEAD_RESULT_MESSAGES = 8; + AIVOICE_SEARCH_BAR = 9; + AIVOICE_FAVICON = 10; + AISTUDIO = 11; + DEEPLINK = 12; + NOTIFICATION = 13; + PROFILE_MESSAGE_BUTTON = 14; + FORWARD = 15; + APP_SHORTCUT = 16; + FF_FAMILY = 17; + AI_TAB = 18; + AI_HOME = 19; + AI_DEEPLINK_IMMERSIVE = 20; + AI_DEEPLINK = 21; + META_AI_CHAT_SHORTCUT_AI_STUDIO = 22; + UGC_CHAT_SHORTCUT_AI_STUDIO = 23; + NEW_CHAT_AI_STUDIO = 24; + AIVOICE_FAVICON_CALL_HISTORY = 25; + ASK_META_AI_CONTEXT_MENU = 26; + ASK_META_AI_CONTEXT_MENU_1ON1 = 27; + ASK_META_AI_CONTEXT_MENU_GROUP = 28; + INVOKE_META_AI_1ON1 = 29; + INVOKE_META_AI_GROUP = 30; + META_AI_FORWARD = 31; + NEW_CHAT_AI_CONTACT = 32; + MESSAGE_QUICK_ACTION_1_ON_1_CHAT = 33; + MESSAGE_QUICK_ACTION_GROUP_CHAT = 34; + ATTACHMENT_TRAY_1_ON_1_CHAT = 35; + ATTACHMENT_TRAY_GROUP_CHAT = 36; + ASK_META_AI_MEDIA_VIEWER_1ON1 = 37; + ASK_META_AI_MEDIA_VIEWER_GROUP = 38; + MEDIA_PICKER_1_ON_1_CHAT = 39; + MEDIA_PICKER_GROUP_CHAT = 40; + ASK_META_AI_NO_SEARCH_RESULTS = 41; + META_AI_SETTINGS = 45; + WEB_INTRO_PANEL = 46; + WEB_NAVIGATION_BAR = 47; +} + +enum BotMetricsThreadEntryPoint { + AI_TAB_THREAD = 1; + AI_HOME_THREAD = 2; + AI_DEEPLINK_IMMERSIVE_THREAD = 3; + AI_DEEPLINK_THREAD = 4; + ASK_META_AI_CONTEXT_MENU_THREAD = 5; +} + +enum BotSessionSource { + NONE = 0; + NULL_STATE = 1; + TYPEAHEAD = 2; + USER_INPUT = 3; + EMU_FLASH = 4; + EMU_FLASH_FOLLOWUP = 5; + VOICE = 6; + AI_HOME_SESSION = 7; +} + +enum AIRichResponseMessageType { + AI_RICH_RESPONSE_TYPE_UNKNOWN = 0; + AI_RICH_RESPONSE_TYPE_STANDARD = 1; +} + +enum AIRichResponseSubMessageType { + AI_RICH_RESPONSE_UNKNOWN = 0; + AI_RICH_RESPONSE_GRID_IMAGE = 1; + AI_RICH_RESPONSE_TEXT = 2; + AI_RICH_RESPONSE_INLINE_IMAGE = 3; + AI_RICH_RESPONSE_TABLE = 4; + AI_RICH_RESPONSE_CODE = 5; + AI_RICH_RESPONSE_DYNAMIC = 6; + AI_RICH_RESPONSE_MAP = 7; + AI_RICH_RESPONSE_LATEX = 8; + AI_RICH_RESPONSE_CONTENT_ITEMS = 9; +} + +enum SessionTransparencyType { + UNKNOWN_TYPE = 0; + NY_AI_SAFETY_DISCLAIMER = 1; +} + +message BotPluginMetadata { + enum PluginType { + UNKNOWN_PLUGIN = 0; + REELS = 1; + SEARCH = 2; + } + + enum SearchProvider { + UNKNOWN = 0; + BING = 1; + GOOGLE = 2; + SUPPORT = 3; + } + + optional SearchProvider provider = 1; + optional PluginType pluginType = 2; + optional string thumbnailCDNURL = 3; + optional string profilePhotoCDNURL = 4; + optional string searchProviderURL = 5; + optional uint32 referenceIndex = 6; + optional uint32 expectedLinksCount = 7; + optional string searchQuery = 9; + optional WACommon.MessageKey parentPluginMessageKey = 10; + optional PluginType deprecatedField = 11; + optional PluginType parentPluginType = 12; + optional string faviconCDNURL = 13; +} + +message BotLinkedAccount { + enum BotLinkedAccountType { + BOT_LINKED_ACCOUNT_TYPE_1P = 0; + } + + optional BotLinkedAccountType type = 1; +} + +message BotSignatureVerificationUseCaseProof { + enum BotSignatureUseCase { + UNSPECIFIED = 0; + WA_BOT_MSG = 1; + } + + optional int32 version = 1; + optional BotSignatureUseCase useCase = 2; + optional bytes signature = 3; + repeated bytes certificateChain = 4; +} + +message BotPromotionMessageMetadata { + enum BotPromotionType { + UNKNOWN_TYPE = 0; + C50 = 1; + SURVEY_PLATFORM = 2; + } + + optional BotPromotionType promotionType = 1; + optional string buttonTitle = 2; +} + +message BotMediaMetadata { + enum OrientationType { + CENTER = 1; + LEFT = 2; + RIGHT = 3; + } + + optional string fileSHA256 = 1; + optional string mediaKey = 2; + optional string fileEncSHA256 = 3; + optional string directPath = 4; + optional int64 mediaKeyTimestamp = 5; + optional string mimetype = 6; + optional OrientationType orientationType = 7; +} + +message BotReminderMetadata { + enum ReminderFrequency { + ONCE = 1; + DAILY = 2; + WEEKLY = 3; + BIWEEKLY = 4; + MONTHLY = 5; + } + + enum ReminderAction { + NOTIFY = 1; + CREATE = 2; + DELETE = 3; + UPDATE = 4; + } + + optional WACommon.MessageKey requestMessageKey = 1; + optional ReminderAction action = 2; + optional string name = 3; + optional uint64 nextTriggerTimestamp = 4; + optional ReminderFrequency frequency = 5; +} + +message BotModelMetadata { + enum PremiumModelStatus { + UNKNOWN_STATUS = 0; + AVAILABLE = 1; + QUOTA_EXCEED_LIMIT = 2; + } + + enum ModelType { + UNKNOWN_TYPE = 0; + LLAMA_PROD = 1; + LLAMA_PROD_PREMIUM = 2; + } + + optional ModelType modelType = 1; + optional PremiumModelStatus premiumModelStatus = 2; + optional string modelNameOverride = 3; +} + +message BotProgressIndicatorMetadata { + message BotPlanningStepMetadata { + enum BotSearchSourceProvider { + UNKNOWN_PROVIDER = 0; + OTHER = 1; + GOOGLE = 2; + BING = 3; + } + + enum PlanningStepStatus { + UNKNOWN = 0; + PLANNED = 1; + EXECUTING = 2; + FINISHED = 3; + } + + message BotPlanningSearchSourcesMetadata { + enum BotPlanningSearchSourceProvider { + UNKNOWN = 0; + OTHER = 1; + GOOGLE = 2; + BING = 3; + } + + optional string sourceTitle = 1; + optional BotPlanningSearchSourceProvider provider = 2; + optional string sourceURL = 3; + } + + message BotPlanningStepSectionMetadata { + optional string sectionTitle = 1; + optional string sectionBody = 2; + repeated BotPlanningSearchSourceMetadata sourcesMetadata = 3; + } + + message BotPlanningSearchSourceMetadata { + optional string title = 1; + optional BotSearchSourceProvider provider = 2; + optional string sourceURL = 3; + optional string favIconURL = 4; + } + + optional string statusTitle = 1; + optional string statusBody = 2; + repeated BotPlanningSearchSourcesMetadata sourcesMetadata = 3; + optional PlanningStepStatus status = 4; + optional bool isReasoning = 5; + optional bool isEnhancedSearch = 6; + repeated BotPlanningStepSectionMetadata sections = 7; + } + + optional string progressDescription = 1; + repeated BotPlanningStepMetadata stepsMetadata = 2; + optional int64 estimatedCompletionTime = 3; +} + +message BotCapabilityMetadata { + enum BotCapabilityType { + UNKNOWN = 0; + PROGRESS_INDICATOR = 1; + RICH_RESPONSE_HEADING = 2; + RICH_RESPONSE_NESTED_LIST = 3; + AI_MEMORY = 4; + RICH_RESPONSE_THREAD_SURFING = 5; + RICH_RESPONSE_TABLE = 6; + RICH_RESPONSE_CODE = 7; + RICH_RESPONSE_STRUCTURED_RESPONSE = 8; + RICH_RESPONSE_INLINE_IMAGE = 9; + WA_IG_1P_PLUGIN_RANKING_CONTROL = 10; + WA_IG_1P_PLUGIN_RANKING_UPDATE_1 = 11; + WA_IG_1P_PLUGIN_RANKING_UPDATE_2 = 12; + WA_IG_1P_PLUGIN_RANKING_UPDATE_3 = 13; + WA_IG_1P_PLUGIN_RANKING_UPDATE_4 = 14; + WA_IG_1P_PLUGIN_RANKING_UPDATE_5 = 15; + WA_IG_1P_PLUGIN_RANKING_UPDATE_6 = 16; + WA_IG_1P_PLUGIN_RANKING_UPDATE_7 = 17; + WA_IG_1P_PLUGIN_RANKING_UPDATE_8 = 18; + WA_IG_1P_PLUGIN_RANKING_UPDATE_9 = 19; + WA_IG_1P_PLUGIN_RANKING_UPDATE_10 = 20; + RICH_RESPONSE_SUB_HEADING = 21; + RICH_RESPONSE_GRID_IMAGE = 22; + AI_STUDIO_UGC_MEMORY = 23; + RICH_RESPONSE_LATEX = 24; + RICH_RESPONSE_MAPS = 25; + RICH_RESPONSE_INLINE_REELS = 26; + AGENTIC_PLANNING = 27; + ACCOUNT_LINKING = 28; + STREAMING_DISAGGREGATION = 29; + RICH_RESPONSE_GRID_IMAGE_3P = 30; + RICH_RESPONSE_LATEX_INLINE = 31; + QUERY_PLAN = 32; + PROACTIVE_MESSAGE = 33; + RICH_RESPONSE_UNIFIED_RESPONSE = 34; + PROMOTION_MESSAGE = 35; + SIMPLIFIED_PROFILE_PAGE = 36; + RICH_RESPONSE_SOURCES_IN_MESSAGE = 37; + RICH_RESPONSE_SIDE_BY_SIDE_SURVEY = 38; + RICH_RESPONSE_UNIFIED_TEXT_COMPONENT = 39; + AI_SHARED_MEMORY = 40; + RICH_RESPONSE_UNIFIED_SOURCES = 41; + RICH_RESPONSE_UNIFIED_DOMAIN_CITATIONS = 42; + RICH_RESPONSE_UR_INLINE_REELS_ENABLED = 43; + RICH_RESPONSE_UR_MEDIA_GRID_ENABLED = 44; + RICH_RESPONSE_UR_TIMESTAMP_PLACEHOLDER = 45; + RICH_RESPONSE_IN_APP_SURVEY = 46; + AI_RESPONSE_MODEL_BRANDING = 47; + SESSION_TRANSPARENCY_SYSTEM_MESSAGE = 48; + RICH_RESPONSE_UR_REASONING = 49; + RICH_RESPONSE_UR_ZEITGEIST_CITATIONS = 50; + RICH_RESPONSE_UR_ZEITGEIST_CAROUSEL = 51; + AI_IMAGINE_LOADING_INDICATOR = 52; + RICH_RESPONSE_UR_IMAGINE = 53; + AI_IMAGINE_UR_TO_NATIVE_LOADING_INDICATOR = 54; + RICH_RESPONSE_UR_BLOKS_ENABLED = 55; + RICH_RESPONSE_INLINE_LINKS_ENABLED = 56; + RICH_RESPONSE_UR_IMAGINE_VIDEO = 57; + } + + repeated BotCapabilityType capabilities = 1; +} + +message BotModeSelectionMetadata { + enum BotUserSelectionMode { + DEFAULT_MODE = 0; + THINK_HARD_MODE = 1; + } + + repeated BotUserSelectionMode mode = 1; + repeated uint32 overrideMode = 2; +} + +message BotQuotaMetadata { + message BotFeatureQuotaMetadata { + enum BotFeatureType { + UNKNOWN_FEATURE = 0; + REASONING_FEATURE = 1; + } + + optional BotFeatureType featureType = 1; + optional uint32 remainingQuota = 2; + optional uint64 expirationTimestamp = 3; + } + + repeated BotFeatureQuotaMetadata botFeatureQuotaMetadata = 1; +} + +message BotImagineMetadata { + enum ImagineType { + UNKNOWN = 0; + IMAGINE = 1; + MEMU = 2; + FLASH = 3; + EDIT = 4; + } + + optional ImagineType imagineType = 1; + optional string shortPrompt = 2; +} + +message BotAgeCollectionMetadata { + enum AgeCollectionType { + O18_BINARY = 0; + WAFFLE = 1; + } + + optional bool ageCollectionEligible = 1; + optional bool shouldTriggerAgeCollectionOnClient = 2; + optional AgeCollectionType ageCollectionType = 3; +} + +message BotSourcesMetadata { + message BotSourceItem { + enum SourceProvider { + UNKNOWN = 0; + BING = 1; + GOOGLE = 2; + SUPPORT = 3; + OTHER = 4; + } + + optional SourceProvider provider = 1; + optional string thumbnailCDNURL = 2; + optional string sourceProviderURL = 3; + optional string sourceQuery = 4; + optional string faviconCDNURL = 5; + optional uint32 citationNumber = 6; + optional string sourceTitle = 7; + } + + repeated BotSourceItem sources = 1; +} + +message BotMessageOrigin { + enum BotMessageOriginType { + BOT_MESSAGE_ORIGIN_TYPE_AI_INITIATED = 0; + } + + optional BotMessageOriginType type = 1; +} + +message AIThreadInfo { + message AIThreadClientInfo { + enum AIThreadType { + UNKNOWN = 0; + DEFAULT = 1; + INCOGNITO = 2; + } + + optional AIThreadType type = 1; + } + + message AIThreadServerInfo { + optional string title = 1; + } + + optional AIThreadServerInfo serverInfo = 1; + optional AIThreadClientInfo clientInfo = 2; +} + +message BotFeedbackMessage { + enum ReportKind { + NONE = 0; + GENERIC = 1; + } + + enum BotFeedbackKindMultiplePositive { + BOT_FEEDBACK_MULTIPLE_POSITIVE_GENERIC = 1; + } + + enum BotFeedbackKindMultipleNegative { + BOT_FEEDBACK_MULTIPLE_NEGATIVE_GENERIC = 1; + BOT_FEEDBACK_MULTIPLE_NEGATIVE_HELPFUL = 2; + BOT_FEEDBACK_MULTIPLE_NEGATIVE_INTERESTING = 4; + BOT_FEEDBACK_MULTIPLE_NEGATIVE_ACCURATE = 8; + BOT_FEEDBACK_MULTIPLE_NEGATIVE_SAFE = 16; + BOT_FEEDBACK_MULTIPLE_NEGATIVE_OTHER = 32; + BOT_FEEDBACK_MULTIPLE_NEGATIVE_REFUSED = 64; + BOT_FEEDBACK_MULTIPLE_NEGATIVE_NOT_VISUALLY_APPEALING = 128; + BOT_FEEDBACK_MULTIPLE_NEGATIVE_NOT_RELEVANT_TO_TEXT = 256; + } + + enum BotFeedbackKind { + BOT_FEEDBACK_POSITIVE = 0; + BOT_FEEDBACK_NEGATIVE_GENERIC = 1; + BOT_FEEDBACK_NEGATIVE_HELPFUL = 2; + BOT_FEEDBACK_NEGATIVE_INTERESTING = 3; + BOT_FEEDBACK_NEGATIVE_ACCURATE = 4; + BOT_FEEDBACK_NEGATIVE_SAFE = 5; + BOT_FEEDBACK_NEGATIVE_OTHER = 6; + BOT_FEEDBACK_NEGATIVE_REFUSED = 7; + BOT_FEEDBACK_NEGATIVE_NOT_VISUALLY_APPEALING = 8; + BOT_FEEDBACK_NEGATIVE_NOT_RELEVANT_TO_TEXT = 9; + BOT_FEEDBACK_NEGATIVE_PERSONALIZED = 10; + BOT_FEEDBACK_NEGATIVE_CLARITY = 11; + BOT_FEEDBACK_NEGATIVE_DOESNT_LOOK_LIKE_THE_PERSON = 12; + BOT_FEEDBACK_NEGATIVE_HALLUCINATION_INTERNAL_ONLY = 13; + BOT_FEEDBACK_NEGATIVE = 14; + } + + message SideBySideSurveyMetadata { + message SidebySideSurveyMetaAiAnalyticsData { + message SideBySideSurveyAbandonEventData { + optional string abandonDwellTimeMSString = 1; + } + + message SideBySideSurveyResponseEventData { + optional string responseDwellTimeMSString = 1; + optional string selectedResponseID = 2; + } + + message SideBySideSurveyCardImpressionEventData { + } + + message SideBySideSurveyCTAClickEventData { + optional bool isSurveyExpired = 1; + optional string clickDwellTimeMSString = 2; + } + + message SideBySideSurveyCTAImpressionEventData { + optional bool isSurveyExpired = 1; + } + + optional uint32 surveyID = 1; + optional string primaryResponseID = 2; + optional string testArmName = 3; + optional string timestampMSString = 4; + optional SideBySideSurveyCTAImpressionEventData ctaImpressionEvent = 5; + optional SideBySideSurveyCTAClickEventData ctaClickEvent = 6; + optional SideBySideSurveyCardImpressionEventData cardImpressionEvent = 7; + optional SideBySideSurveyResponseEventData responseEvent = 8; + optional SideBySideSurveyAbandonEventData abandonEvent = 9; + } + + message SideBySideSurveyAnalyticsData { + optional string tessaEvent = 1; + optional string tessaSessionFbid = 2; + optional string simonSessionFbid = 3; + } + + optional string selectedRequestID = 1; + optional uint32 surveyID = 2; + optional string simonSessionFbid = 3; + optional string responseOtid = 4; + optional string responseTimestampMSString = 5; + optional bool isSelectedResponsePrimary = 6; + optional string messageIDToEdit = 7; + optional SideBySideSurveyAnalyticsData analyticsData = 8; + optional SidebySideSurveyMetaAiAnalyticsData metaAiAnalyticsData = 9; + } + + optional WACommon.MessageKey messageKey = 1; + optional BotFeedbackKind kind = 2; + optional string text = 3; + optional uint64 kindNegative = 4; + optional uint64 kindPositive = 5; + optional ReportKind kindReport = 6; + optional SideBySideSurveyMetadata sideBySideSurveyMetadata = 7; +} + +message AIRichResponseInlineImageMetadata { + enum AIRichResponseImageAlignment { + AI_RICH_RESPONSE_IMAGE_LAYOUT_LEADING_ALIGNED = 0; + AI_RICH_RESPONSE_IMAGE_LAYOUT_TRAILING_ALIGNED = 1; + AI_RICH_RESPONSE_IMAGE_LAYOUT_CENTER_ALIGNED = 2; + } + + optional AIRichResponseImageURL imageURL = 1; + optional string imageText = 2; + optional AIRichResponseImageAlignment alignment = 3; + optional string tapLinkURL = 4; +} + +message AIRichResponseCodeMetadata { + enum AIRichResponseCodeHighlightType { + AI_RICH_RESPONSE_CODE_HIGHLIGHT_DEFAULT = 0; + AI_RICH_RESPONSE_CODE_HIGHLIGHT_KEYWORD = 1; + AI_RICH_RESPONSE_CODE_HIGHLIGHT_METHOD = 2; + AI_RICH_RESPONSE_CODE_HIGHLIGHT_STRING = 3; + AI_RICH_RESPONSE_CODE_HIGHLIGHT_NUMBER = 4; + AI_RICH_RESPONSE_CODE_HIGHLIGHT_COMMENT = 5; + } + + message AIRichResponseCodeBlock { + optional AIRichResponseCodeHighlightType highlightType = 1; + optional string codeContent = 2; + } + + optional string codeLanguage = 1; + repeated AIRichResponseCodeBlock codeBlocks = 2; +} + +message AIRichResponseDynamicMetadata { + enum AIRichResponseDynamicMetadataType { + AI_RICH_RESPONSE_DYNAMIC_METADATA_TYPE_UNKNOWN = 0; + AI_RICH_RESPONSE_DYNAMIC_METADATA_TYPE_IMAGE = 1; + AI_RICH_RESPONSE_DYNAMIC_METADATA_TYPE_GIF = 2; + } + + optional AIRichResponseDynamicMetadataType type = 1; + optional uint64 version = 2; + optional string URL = 3; + optional uint32 loopCount = 4; +} + +message AIRichResponseContentItemsMetadata { + enum ContentType { + DEFAULT = 0; + CAROUSEL = 1; + } + + message AIRichResponseContentItemMetadata { + oneof aIRichResponseContentItem { + AIRichResponseReelItem reelItem = 1; + } + } + + message AIRichResponseReelItem { + optional string title = 1; + optional string profileIconURL = 2; + optional string thumbnailURL = 3; + optional string videoURL = 4; + } + + repeated AIRichResponseContentItemMetadata itemsMetadata = 1; + optional ContentType contentType = 2; +} + +message BotDocumentMessageMetadata { + enum DocumentPluginType { + TEXT_EXTRACTION = 0; + OCR_AND_IMAGES = 1; + } + + optional DocumentPluginType pluginType = 1; +} + +message AIHomeState { + message AIHomeOption { + enum AIHomeActionType { + PROMPT = 0; + CREATE_IMAGE = 1; + ANIMATE_PHOTO = 2; + ANALYZE_FILE = 3; + COLLABORATE = 4; + } + + optional AIHomeActionType type = 1; + optional string title = 2; + optional string promptText = 3; + optional string sessionID = 4; + optional string imageWdsIdentifier = 5; + optional string imageTintColor = 6; + optional string imageBackgroundColor = 7; + optional string cardTypeID = 8; + } + + optional int64 lastFetchTime = 1; + repeated AIHomeOption capabilityOptions = 2; + repeated AIHomeOption conversationOptions = 3; +} + +message BotInfrastructureDiagnostics { + enum BotBackend { + AAPI = 0; + CLIPPY = 1; + } + + optional BotBackend botBackend = 1; + repeated string toolsUsed = 2; + optional bool isThinking = 3; +} + +message BotSuggestedPromptMetadata { + repeated string suggestedPrompts = 1; + optional uint32 selectedPromptIndex = 2; + optional BotPromptSuggestions promptSuggestions = 3; + optional string selectedPromptID = 4; +} + +message BotPromptSuggestions { + repeated BotPromptSuggestion suggestions = 1; +} + +message BotPromptSuggestion { + optional string prompt = 1; + optional string promptID = 2; +} + +message BotLinkedAccountsMetadata { + repeated BotLinkedAccount accounts = 1; + optional bytes acAuthTokens = 2; + optional int32 acErrorCode = 3; +} + +message BotMemoryMetadata { + repeated BotMemoryFact addedFacts = 1; + repeated BotMemoryFact removedFacts = 2; + optional string disclaimer = 3; +} + +message BotMemoryFact { + optional string fact = 1; + optional string factID = 2; +} + +message BotSignatureVerificationMetadata { + repeated BotSignatureVerificationUseCaseProof proofs = 1; +} + +message BotRenderingMetadata { + message Keyword { + optional string value = 1; + repeated string associatedPrompts = 2; + } + + repeated Keyword keywords = 1; +} + +message BotMetricsMetadata { + optional string destinationID = 1; + optional BotMetricsEntryPoint destinationEntryPoint = 2; + optional BotMetricsThreadEntryPoint threadOrigin = 3; +} + +message BotSessionMetadata { + optional string sessionID = 1; + optional BotSessionSource sessionSource = 2; +} + +message BotMemuMetadata { + repeated BotMediaMetadata faceImages = 1; +} + +message InThreadSurveyMetadata { + message InThreadSurveyPrivacyStatementPart { + optional string text = 1; + optional string URL = 2; + } + + message InThreadSurveyOption { + optional string stringValue = 1; + optional uint32 numericValue = 2; + optional string textTranslated = 3; + } + + message InThreadSurveyQuestion { + optional string questionText = 1; + optional string questionID = 2; + repeated InThreadSurveyOption questionOptions = 3; + } + + optional string tessaSessionID = 1; + optional string simonSessionID = 2; + optional string simonSurveyID = 3; + optional string tessaRootID = 4; + optional string requestID = 5; + optional string tessaEvent = 6; + optional string invitationHeaderText = 7; + optional string invitationBodyText = 8; + optional string invitationCtaText = 9; + optional string invitationCtaURL = 10; + optional string surveyTitle = 11; + repeated InThreadSurveyQuestion questions = 12; + optional string surveyContinueButtonText = 13; + optional string surveySubmitButtonText = 14; + optional string privacyStatementFull = 15; + repeated InThreadSurveyPrivacyStatementPart privacyStatementParts = 16; + optional string feedbackToastText = 17; + optional int32 startQuestionIndex = 18; +} + +message BotMessageOriginMetadata { + repeated BotMessageOrigin origins = 1; +} + +message BotUnifiedResponseMutation { + message MediaDetailsMetadata { + optional string ID = 1; + optional BotMediaMetadata highResMedia = 2; + optional BotMediaMetadata previewMedia = 3; + } + + message SideBySideMetadata { + optional string primaryResponseID = 1; + optional bool surveyCtaHasRendered = 2; + } + + optional SideBySideMetadata sbsMetadata = 1; + repeated MediaDetailsMetadata mediaDetailsMetadataList = 2; +} + +message AIMediaCollectionMetadata { + optional string collectionID = 1; +} + +message AIMediaCollectionMessage { + optional string collectionID = 1; + optional uint32 expectedMediaCount = 2; + optional bool hasGlobalCaption = 3; +} + +message BotMetadata { + optional string personaID = 2; + optional BotPluginMetadata pluginMetadata = 3; + optional BotSuggestedPromptMetadata suggestedPromptMetadata = 4; + optional string invokerJID = 5; + optional BotSessionMetadata sessionMetadata = 6; + optional BotMemuMetadata memuMetadata = 7; + optional string timezone = 8; + optional BotReminderMetadata reminderMetadata = 9; + optional BotModelMetadata modelMetadata = 10; + optional string messageDisclaimerText = 11; + optional BotProgressIndicatorMetadata progressIndicatorMetadata = 12; + optional BotCapabilityMetadata capabilityMetadata = 13; + optional BotImagineMetadata imagineMetadata = 14; + optional BotMemoryMetadata memoryMetadata = 15; + optional BotRenderingMetadata renderingMetadata = 16; + optional BotMetricsMetadata botMetricsMetadata = 17; + optional BotLinkedAccountsMetadata botLinkedAccountsMetadata = 18; + optional BotSourcesMetadata richResponseSourcesMetadata = 19; + optional bytes aiConversationContext = 20; + optional BotPromotionMessageMetadata botPromotionMessageMetadata = 21; + optional BotModeSelectionMetadata botModeSelectionMetadata = 22; + optional BotQuotaMetadata botQuotaMetadata = 23; + optional BotAgeCollectionMetadata botAgeCollectionMetadata = 24; + optional string conversationStarterPromptID = 25; + optional string botResponseID = 26; + optional BotSignatureVerificationMetadata verificationMetadata = 27; + optional BotUnifiedResponseMutation unifiedResponseMutation = 28; + optional BotMessageOriginMetadata botMessageOriginMetadata = 29; + optional InThreadSurveyMetadata inThreadSurveyMetadata = 30; + optional AIThreadInfo botThreadInfo = 31; + optional AIRegenerateMetadata regenerateMetadata = 32; + optional SessionTransparencyMetadata sessionTransparencyMetadata = 33; + optional BotDocumentMessageMetadata botDocumentMessageMetadata = 34; + optional BotGroupMetadata botGroupMetadata = 35; + optional BotRenderingConfigMetadata botRenderingConfigMetadata = 36; + optional BotInfrastructureDiagnostics botInfrastructureDiagnostics = 37; + optional AIMediaCollectionMetadata aiMediaCollectionMetadata = 38; + optional bytes internalMetadata = 999; +} + +message BotGroupMetadata { + repeated BotGroupParticipantMetadata participantsMetadata = 1; +} + +message BotRenderingConfigMetadata { + optional string bloksVersioningID = 1; + optional double pixelDensity = 2; +} + +message BotGroupParticipantMetadata { + optional string botFbid = 1; +} + +message ForwardedAIBotMessageInfo { + optional string botName = 1; + optional string botJID = 2; + optional string creatorName = 3; +} + +message BotMessageSharingInfo { + optional BotMetricsEntryPoint botEntryPointOrigin = 1; + optional uint32 forwardScore = 2; +} + +message AIRichResponseImageURL { + optional string imagePreviewURL = 1; + optional string imageHighResURL = 2; + optional string sourceURL = 3; +} + +message AIRichResponseGridImageMetadata { + optional AIRichResponseImageURL gridImageURL = 1; + repeated AIRichResponseImageURL imageURLs = 2; +} + +message AIRichResponseTableMetadata { + message AIRichResponseTableRow { + repeated string items = 1; + optional bool isHeading = 2; + } + + repeated AIRichResponseTableRow rows = 1; + optional string title = 2; +} + +message AIRichResponseUnifiedResponse { + optional bytes data = 1; +} + +message AIRichResponseLatexMetadata { + message AIRichResponseLatexExpression { + optional string latexExpression = 1; + optional string URL = 2; + optional double width = 3; + optional double height = 4; + optional double fontHeight = 5; + optional double imageTopPadding = 6; + optional double imageLeadingPadding = 7; + optional double imageBottomPadding = 8; + optional double imageTrailingPadding = 9; + } + + optional string text = 1; + repeated AIRichResponseLatexExpression expressions = 2; +} + +message AIRichResponseMapMetadata { + message AIRichResponseMapAnnotation { + optional uint32 annotationNumber = 1; + optional double latitude = 2; + optional double longitude = 3; + optional string title = 4; + optional string body = 5; + } + + optional double centerLatitude = 1; + optional double centerLongitude = 2; + optional double latitudeDelta = 3; + optional double longitudeDelta = 4; + repeated AIRichResponseMapAnnotation annotations = 5; + optional bool showInfoList = 6; +} + +message AIRichResponseSubMessage { + optional AIRichResponseSubMessageType messageType = 1; + optional AIRichResponseGridImageMetadata gridImageMetadata = 2; + optional string messageText = 3; + optional AIRichResponseInlineImageMetadata imageMetadata = 4; + optional AIRichResponseCodeMetadata codeMetadata = 5; + optional AIRichResponseTableMetadata tableMetadata = 6; + optional AIRichResponseDynamicMetadata dynamicMetadata = 7; + optional AIRichResponseLatexMetadata latexMetadata = 8; + optional AIRichResponseMapMetadata mapMetadata = 9; + optional AIRichResponseContentItemsMetadata contentItemsMetadata = 10; +} + +message AIRegenerateMetadata { + optional WACommon.MessageKey messageKey = 1; + optional int64 responseTimestampMS = 2; +} + +message SessionTransparencyMetadata { + optional string disclaimerText = 1; + optional string hcaID = 2; + optional SessionTransparencyType sessionTransparencyType = 3; +} diff --git a/vendor/go.mau.fi/whatsmeow/proto/waAdv/WAAdv.pb.go b/vendor/go.mau.fi/whatsmeow/proto/waAdv/WAAdv.pb.go index 8019cc38d0..7e84d0a462 100644 --- a/vendor/go.mau.fi/whatsmeow/proto/waAdv/WAAdv.pb.go +++ b/vendor/go.mau.fi/whatsmeow/proto/waAdv/WAAdv.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 +// protoc-gen-go v1.36.10 // protoc v3.21.12 // source: waAdv/WAAdv.proto @@ -9,11 +9,10 @@ package waAdv import ( reflect "reflect" sync "sync" + unsafe "unsafe" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" - - _ "embed" ) const ( @@ -80,24 +79,21 @@ func (ADVEncryptionType) EnumDescriptor() ([]byte, []int) { } type ADVKeyIndexList struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + RawID *uint32 `protobuf:"varint,1,opt,name=rawID" json:"rawID,omitempty"` + Timestamp *uint64 `protobuf:"varint,2,opt,name=timestamp" json:"timestamp,omitempty"` + CurrentIndex *uint32 `protobuf:"varint,3,opt,name=currentIndex" json:"currentIndex,omitempty"` + ValidIndexes []uint32 `protobuf:"varint,4,rep,packed,name=validIndexes" json:"validIndexes,omitempty"` + AccountType *ADVEncryptionType `protobuf:"varint,5,opt,name=accountType,enum=WAAdv.ADVEncryptionType" json:"accountType,omitempty"` unknownFields protoimpl.UnknownFields - - RawID *uint32 `protobuf:"varint,1,opt,name=rawID" json:"rawID,omitempty"` - Timestamp *uint64 `protobuf:"varint,2,opt,name=timestamp" json:"timestamp,omitempty"` - CurrentIndex *uint32 `protobuf:"varint,3,opt,name=currentIndex" json:"currentIndex,omitempty"` - ValidIndexes []uint32 `protobuf:"varint,4,rep,packed,name=validIndexes" json:"validIndexes,omitempty"` - AccountType *ADVEncryptionType `protobuf:"varint,5,opt,name=accountType,enum=WAAdv.ADVEncryptionType" json:"accountType,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ADVKeyIndexList) Reset() { *x = ADVKeyIndexList{} - if protoimpl.UnsafeEnabled { - mi := &file_waAdv_WAAdv_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waAdv_WAAdv_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ADVKeyIndexList) String() string { @@ -108,7 +104,7 @@ func (*ADVKeyIndexList) ProtoMessage() {} func (x *ADVKeyIndexList) ProtoReflect() protoreflect.Message { mi := &file_waAdv_WAAdv_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -159,22 +155,19 @@ func (x *ADVKeyIndexList) GetAccountType() ADVEncryptionType { } type ADVSignedKeyIndexList struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Details []byte `protobuf:"bytes,1,opt,name=details" json:"details,omitempty"` - AccountSignature []byte `protobuf:"bytes,2,opt,name=accountSignature" json:"accountSignature,omitempty"` - AccountSignatureKey []byte `protobuf:"bytes,3,opt,name=accountSignatureKey" json:"accountSignatureKey,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Details []byte `protobuf:"bytes,1,opt,name=details" json:"details,omitempty"` + AccountSignature []byte `protobuf:"bytes,2,opt,name=accountSignature" json:"accountSignature,omitempty"` + AccountSignatureKey []byte `protobuf:"bytes,3,opt,name=accountSignatureKey" json:"accountSignatureKey,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ADVSignedKeyIndexList) Reset() { *x = ADVSignedKeyIndexList{} - if protoimpl.UnsafeEnabled { - mi := &file_waAdv_WAAdv_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waAdv_WAAdv_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ADVSignedKeyIndexList) String() string { @@ -185,7 +178,7 @@ func (*ADVSignedKeyIndexList) ProtoMessage() {} func (x *ADVSignedKeyIndexList) ProtoReflect() protoreflect.Message { mi := &file_waAdv_WAAdv_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -222,24 +215,21 @@ func (x *ADVSignedKeyIndexList) GetAccountSignatureKey() []byte { } type ADVDeviceIdentity struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + RawID *uint32 `protobuf:"varint,1,opt,name=rawID" json:"rawID,omitempty"` + Timestamp *uint64 `protobuf:"varint,2,opt,name=timestamp" json:"timestamp,omitempty"` + KeyIndex *uint32 `protobuf:"varint,3,opt,name=keyIndex" json:"keyIndex,omitempty"` + AccountType *ADVEncryptionType `protobuf:"varint,4,opt,name=accountType,enum=WAAdv.ADVEncryptionType" json:"accountType,omitempty"` + DeviceType *ADVEncryptionType `protobuf:"varint,5,opt,name=deviceType,enum=WAAdv.ADVEncryptionType" json:"deviceType,omitempty"` unknownFields protoimpl.UnknownFields - - RawID *uint32 `protobuf:"varint,1,opt,name=rawID" json:"rawID,omitempty"` - Timestamp *uint64 `protobuf:"varint,2,opt,name=timestamp" json:"timestamp,omitempty"` - KeyIndex *uint32 `protobuf:"varint,3,opt,name=keyIndex" json:"keyIndex,omitempty"` - AccountType *ADVEncryptionType `protobuf:"varint,4,opt,name=accountType,enum=WAAdv.ADVEncryptionType" json:"accountType,omitempty"` - DeviceType *ADVEncryptionType `protobuf:"varint,5,opt,name=deviceType,enum=WAAdv.ADVEncryptionType" json:"deviceType,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ADVDeviceIdentity) Reset() { *x = ADVDeviceIdentity{} - if protoimpl.UnsafeEnabled { - mi := &file_waAdv_WAAdv_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waAdv_WAAdv_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ADVDeviceIdentity) String() string { @@ -250,7 +240,7 @@ func (*ADVDeviceIdentity) ProtoMessage() {} func (x *ADVDeviceIdentity) ProtoReflect() protoreflect.Message { mi := &file_waAdv_WAAdv_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -301,23 +291,20 @@ func (x *ADVDeviceIdentity) GetDeviceType() ADVEncryptionType { } type ADVSignedDeviceIdentity struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Details []byte `protobuf:"bytes,1,opt,name=details" json:"details,omitempty"` - AccountSignatureKey []byte `protobuf:"bytes,2,opt,name=accountSignatureKey" json:"accountSignatureKey,omitempty"` - AccountSignature []byte `protobuf:"bytes,3,opt,name=accountSignature" json:"accountSignature,omitempty"` - DeviceSignature []byte `protobuf:"bytes,4,opt,name=deviceSignature" json:"deviceSignature,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Details []byte `protobuf:"bytes,1,opt,name=details" json:"details,omitempty"` + AccountSignatureKey []byte `protobuf:"bytes,2,opt,name=accountSignatureKey" json:"accountSignatureKey,omitempty"` + AccountSignature []byte `protobuf:"bytes,3,opt,name=accountSignature" json:"accountSignature,omitempty"` + DeviceSignature []byte `protobuf:"bytes,4,opt,name=deviceSignature" json:"deviceSignature,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ADVSignedDeviceIdentity) Reset() { *x = ADVSignedDeviceIdentity{} - if protoimpl.UnsafeEnabled { - mi := &file_waAdv_WAAdv_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waAdv_WAAdv_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ADVSignedDeviceIdentity) String() string { @@ -328,7 +315,7 @@ func (*ADVSignedDeviceIdentity) ProtoMessage() {} func (x *ADVSignedDeviceIdentity) ProtoReflect() protoreflect.Message { mi := &file_waAdv_WAAdv_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -372,22 +359,19 @@ func (x *ADVSignedDeviceIdentity) GetDeviceSignature() []byte { } type ADVSignedDeviceIdentityHMAC struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Details []byte `protobuf:"bytes,1,opt,name=details" json:"details,omitempty"` + HMAC []byte `protobuf:"bytes,2,opt,name=HMAC" json:"HMAC,omitempty"` + AccountType *ADVEncryptionType `protobuf:"varint,3,opt,name=accountType,enum=WAAdv.ADVEncryptionType" json:"accountType,omitempty"` unknownFields protoimpl.UnknownFields - - Details []byte `protobuf:"bytes,1,opt,name=details" json:"details,omitempty"` - HMAC []byte `protobuf:"bytes,2,opt,name=HMAC" json:"HMAC,omitempty"` - AccountType *ADVEncryptionType `protobuf:"varint,3,opt,name=accountType,enum=WAAdv.ADVEncryptionType" json:"accountType,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ADVSignedDeviceIdentityHMAC) Reset() { *x = ADVSignedDeviceIdentityHMAC{} - if protoimpl.UnsafeEnabled { - mi := &file_waAdv_WAAdv_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waAdv_WAAdv_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ADVSignedDeviceIdentityHMAC) String() string { @@ -398,7 +382,7 @@ func (*ADVSignedDeviceIdentityHMAC) ProtoMessage() {} func (x *ADVSignedDeviceIdentityHMAC) ProtoReflect() protoreflect.Message { mi := &file_waAdv_WAAdv_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -436,17 +420,49 @@ func (x *ADVSignedDeviceIdentityHMAC) GetAccountType() ADVEncryptionType { var File_waAdv_WAAdv_proto protoreflect.FileDescriptor -//go:embed WAAdv.pb.raw -var file_waAdv_WAAdv_proto_rawDesc []byte +const file_waAdv_WAAdv_proto_rawDesc = "" + + "\n" + + "\x11waAdv/WAAdv.proto\x12\x05WAAdv\"\xcd\x01\n" + + "\x0fADVKeyIndexList\x12\x14\n" + + "\x05rawID\x18\x01 \x01(\rR\x05rawID\x12\x1c\n" + + "\ttimestamp\x18\x02 \x01(\x04R\ttimestamp\x12\"\n" + + "\fcurrentIndex\x18\x03 \x01(\rR\fcurrentIndex\x12&\n" + + "\fvalidIndexes\x18\x04 \x03(\rB\x02\x10\x01R\fvalidIndexes\x12:\n" + + "\vaccountType\x18\x05 \x01(\x0e2\x18.WAAdv.ADVEncryptionTypeR\vaccountType\"\x8f\x01\n" + + "\x15ADVSignedKeyIndexList\x12\x18\n" + + "\adetails\x18\x01 \x01(\fR\adetails\x12*\n" + + "\x10accountSignature\x18\x02 \x01(\fR\x10accountSignature\x120\n" + + "\x13accountSignatureKey\x18\x03 \x01(\fR\x13accountSignatureKey\"\xd9\x01\n" + + "\x11ADVDeviceIdentity\x12\x14\n" + + "\x05rawID\x18\x01 \x01(\rR\x05rawID\x12\x1c\n" + + "\ttimestamp\x18\x02 \x01(\x04R\ttimestamp\x12\x1a\n" + + "\bkeyIndex\x18\x03 \x01(\rR\bkeyIndex\x12:\n" + + "\vaccountType\x18\x04 \x01(\x0e2\x18.WAAdv.ADVEncryptionTypeR\vaccountType\x128\n" + + "\n" + + "deviceType\x18\x05 \x01(\x0e2\x18.WAAdv.ADVEncryptionTypeR\n" + + "deviceType\"\xbb\x01\n" + + "\x17ADVSignedDeviceIdentity\x12\x18\n" + + "\adetails\x18\x01 \x01(\fR\adetails\x120\n" + + "\x13accountSignatureKey\x18\x02 \x01(\fR\x13accountSignatureKey\x12*\n" + + "\x10accountSignature\x18\x03 \x01(\fR\x10accountSignature\x12(\n" + + "\x0fdeviceSignature\x18\x04 \x01(\fR\x0fdeviceSignature\"\x87\x01\n" + + "\x1bADVSignedDeviceIdentityHMAC\x12\x18\n" + + "\adetails\x18\x01 \x01(\fR\adetails\x12\x12\n" + + "\x04HMAC\x18\x02 \x01(\fR\x04HMAC\x12:\n" + + "\vaccountType\x18\x03 \x01(\x0e2\x18.WAAdv.ADVEncryptionTypeR\vaccountType*)\n" + + "\x11ADVEncryptionType\x12\b\n" + + "\x04E2EE\x10\x00\x12\n" + + "\n" + + "\x06HOSTED\x10\x01B!Z\x1fgo.mau.fi/whatsmeow/proto/waAdv" var ( file_waAdv_WAAdv_proto_rawDescOnce sync.Once - file_waAdv_WAAdv_proto_rawDescData = file_waAdv_WAAdv_proto_rawDesc + file_waAdv_WAAdv_proto_rawDescData []byte ) func file_waAdv_WAAdv_proto_rawDescGZIP() []byte { file_waAdv_WAAdv_proto_rawDescOnce.Do(func() { - file_waAdv_WAAdv_proto_rawDescData = protoimpl.X.CompressGZIP(file_waAdv_WAAdv_proto_rawDescData) + file_waAdv_WAAdv_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_waAdv_WAAdv_proto_rawDesc), len(file_waAdv_WAAdv_proto_rawDesc))) }) return file_waAdv_WAAdv_proto_rawDescData } @@ -478,73 +494,11 @@ func file_waAdv_WAAdv_proto_init() { if File_waAdv_WAAdv_proto != nil { return } - if !protoimpl.UnsafeEnabled { - file_waAdv_WAAdv_proto_msgTypes[0].Exporter = func(v any, i int) any { - switch v := v.(*ADVKeyIndexList); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waAdv_WAAdv_proto_msgTypes[1].Exporter = func(v any, i int) any { - switch v := v.(*ADVSignedKeyIndexList); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waAdv_WAAdv_proto_msgTypes[2].Exporter = func(v any, i int) any { - switch v := v.(*ADVDeviceIdentity); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waAdv_WAAdv_proto_msgTypes[3].Exporter = func(v any, i int) any { - switch v := v.(*ADVSignedDeviceIdentity); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waAdv_WAAdv_proto_msgTypes[4].Exporter = func(v any, i int) any { - switch v := v.(*ADVSignedDeviceIdentityHMAC); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_waAdv_WAAdv_proto_rawDesc, + RawDescriptor: unsafe.Slice(unsafe.StringData(file_waAdv_WAAdv_proto_rawDesc), len(file_waAdv_WAAdv_proto_rawDesc)), NumEnums: 1, NumMessages: 5, NumExtensions: 0, @@ -556,7 +510,6 @@ func file_waAdv_WAAdv_proto_init() { MessageInfos: file_waAdv_WAAdv_proto_msgTypes, }.Build() File_waAdv_WAAdv_proto = out.File - file_waAdv_WAAdv_proto_rawDesc = nil file_waAdv_WAAdv_proto_goTypes = nil file_waAdv_WAAdv_proto_depIdxs = nil } diff --git a/vendor/go.mau.fi/whatsmeow/proto/waAdv/WAAdv.pb.raw b/vendor/go.mau.fi/whatsmeow/proto/waAdv/WAAdv.pb.raw deleted file mode 100644 index d894e36f12..0000000000 Binary files a/vendor/go.mau.fi/whatsmeow/proto/waAdv/WAAdv.pb.raw and /dev/null differ diff --git a/vendor/go.mau.fi/whatsmeow/proto/waArmadilloApplication/WAArmadilloApplication.pb.go b/vendor/go.mau.fi/whatsmeow/proto/waArmadilloApplication/WAArmadilloApplication.pb.go index 63f2ce7fbf..88e33c5703 100644 --- a/vendor/go.mau.fi/whatsmeow/proto/waArmadilloApplication/WAArmadilloApplication.pb.go +++ b/vendor/go.mau.fi/whatsmeow/proto/waArmadilloApplication/WAArmadilloApplication.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 +// protoc-gen-go v1.36.10 // protoc v3.21.12 // source: waArmadilloApplication/WAArmadilloApplication.proto @@ -9,13 +9,13 @@ package waArmadilloApplication import ( reflect "reflect" sync "sync" + unsafe "unsafe" - waArmadilloXMA "go.mau.fi/whatsmeow/proto/waArmadilloXMA" - waCommon "go.mau.fi/whatsmeow/proto/waCommon" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" - _ "embed" + waArmadilloXMA "go.mau.fi/whatsmeow/proto/waArmadilloXMA" + waCommon "go.mau.fi/whatsmeow/proto/waCommon" ) const ( @@ -81,6 +81,121 @@ func (Armadillo_Signal_EncryptedBackupsSecrets_Epoch_EpochStatus) EnumDescriptor return file_waArmadilloApplication_WAArmadilloApplication_proto_rawDescGZIP(), []int{0, 3, 0, 0, 0} } +type Armadillo_ApplicationData_MetadataSyncAction_SyncAttachmentInterventionAction_InterventionType int32 + +const ( + Armadillo_ApplicationData_MetadataSyncAction_SyncAttachmentInterventionAction_UNKNOWN Armadillo_ApplicationData_MetadataSyncAction_SyncAttachmentInterventionAction_InterventionType = 0 + Armadillo_ApplicationData_MetadataSyncAction_SyncAttachmentInterventionAction_NUDE Armadillo_ApplicationData_MetadataSyncAction_SyncAttachmentInterventionAction_InterventionType = 1 + Armadillo_ApplicationData_MetadataSyncAction_SyncAttachmentInterventionAction_NOT_NUDE Armadillo_ApplicationData_MetadataSyncAction_SyncAttachmentInterventionAction_InterventionType = 2 +) + +// Enum value maps for Armadillo_ApplicationData_MetadataSyncAction_SyncAttachmentInterventionAction_InterventionType. +var ( + Armadillo_ApplicationData_MetadataSyncAction_SyncAttachmentInterventionAction_InterventionType_name = map[int32]string{ + 0: "UNKNOWN", + 1: "NUDE", + 2: "NOT_NUDE", + } + Armadillo_ApplicationData_MetadataSyncAction_SyncAttachmentInterventionAction_InterventionType_value = map[string]int32{ + "UNKNOWN": 0, + "NUDE": 1, + "NOT_NUDE": 2, + } +) + +func (x Armadillo_ApplicationData_MetadataSyncAction_SyncAttachmentInterventionAction_InterventionType) Enum() *Armadillo_ApplicationData_MetadataSyncAction_SyncAttachmentInterventionAction_InterventionType { + p := new(Armadillo_ApplicationData_MetadataSyncAction_SyncAttachmentInterventionAction_InterventionType) + *p = x + return p +} + +func (x Armadillo_ApplicationData_MetadataSyncAction_SyncAttachmentInterventionAction_InterventionType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (Armadillo_ApplicationData_MetadataSyncAction_SyncAttachmentInterventionAction_InterventionType) Descriptor() protoreflect.EnumDescriptor { + return file_waArmadilloApplication_WAArmadilloApplication_proto_enumTypes[1].Descriptor() +} + +func (Armadillo_ApplicationData_MetadataSyncAction_SyncAttachmentInterventionAction_InterventionType) Type() protoreflect.EnumType { + return &file_waArmadilloApplication_WAArmadilloApplication_proto_enumTypes[1] +} + +func (x Armadillo_ApplicationData_MetadataSyncAction_SyncAttachmentInterventionAction_InterventionType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *Armadillo_ApplicationData_MetadataSyncAction_SyncAttachmentInterventionAction_InterventionType) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = Armadillo_ApplicationData_MetadataSyncAction_SyncAttachmentInterventionAction_InterventionType(num) + return nil +} + +// Deprecated: Use Armadillo_ApplicationData_MetadataSyncAction_SyncAttachmentInterventionAction_InterventionType.Descriptor instead. +func (Armadillo_ApplicationData_MetadataSyncAction_SyncAttachmentInterventionAction_InterventionType) EnumDescriptor() ([]byte, []int) { + return file_waArmadilloApplication_WAArmadilloApplication_proto_rawDescGZIP(), []int{0, 4, 2, 0, 0} +} + +type Armadillo_ApplicationData_MetadataSyncAction_SyncSpectraAction_SpectraActionType int32 + +const ( + Armadillo_ApplicationData_MetadataSyncAction_SyncSpectraAction_TAKEDOWN Armadillo_ApplicationData_MetadataSyncAction_SyncSpectraAction_SpectraActionType = 0 + Armadillo_ApplicationData_MetadataSyncAction_SyncSpectraAction_RESTORE Armadillo_ApplicationData_MetadataSyncAction_SyncSpectraAction_SpectraActionType = 1 +) + +// Enum value maps for Armadillo_ApplicationData_MetadataSyncAction_SyncSpectraAction_SpectraActionType. +var ( + Armadillo_ApplicationData_MetadataSyncAction_SyncSpectraAction_SpectraActionType_name = map[int32]string{ + 0: "TAKEDOWN", + 1: "RESTORE", + } + Armadillo_ApplicationData_MetadataSyncAction_SyncSpectraAction_SpectraActionType_value = map[string]int32{ + "TAKEDOWN": 0, + "RESTORE": 1, + } +) + +func (x Armadillo_ApplicationData_MetadataSyncAction_SyncSpectraAction_SpectraActionType) Enum() *Armadillo_ApplicationData_MetadataSyncAction_SyncSpectraAction_SpectraActionType { + p := new(Armadillo_ApplicationData_MetadataSyncAction_SyncSpectraAction_SpectraActionType) + *p = x + return p +} + +func (x Armadillo_ApplicationData_MetadataSyncAction_SyncSpectraAction_SpectraActionType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (Armadillo_ApplicationData_MetadataSyncAction_SyncSpectraAction_SpectraActionType) Descriptor() protoreflect.EnumDescriptor { + return file_waArmadilloApplication_WAArmadilloApplication_proto_enumTypes[2].Descriptor() +} + +func (Armadillo_ApplicationData_MetadataSyncAction_SyncSpectraAction_SpectraActionType) Type() protoreflect.EnumType { + return &file_waArmadilloApplication_WAArmadilloApplication_proto_enumTypes[2] +} + +func (x Armadillo_ApplicationData_MetadataSyncAction_SyncSpectraAction_SpectraActionType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *Armadillo_ApplicationData_MetadataSyncAction_SyncSpectraAction_SpectraActionType) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = Armadillo_ApplicationData_MetadataSyncAction_SyncSpectraAction_SpectraActionType(num) + return nil +} + +// Deprecated: Use Armadillo_ApplicationData_MetadataSyncAction_SyncSpectraAction_SpectraActionType.Descriptor instead. +func (Armadillo_ApplicationData_MetadataSyncAction_SyncSpectraAction_SpectraActionType) EnumDescriptor() ([]byte, []int) { + return file_waArmadilloApplication_WAArmadilloApplication_proto_rawDescGZIP(), []int{0, 4, 2, 1, 0} +} + type Armadillo_Content_PaymentsTransactionMessage_PaymentStatus int32 const ( @@ -168,11 +283,11 @@ func (x Armadillo_Content_PaymentsTransactionMessage_PaymentStatus) String() str } func (Armadillo_Content_PaymentsTransactionMessage_PaymentStatus) Descriptor() protoreflect.EnumDescriptor { - return file_waArmadilloApplication_WAArmadilloApplication_proto_enumTypes[1].Descriptor() + return file_waArmadilloApplication_WAArmadilloApplication_proto_enumTypes[3].Descriptor() } func (Armadillo_Content_PaymentsTransactionMessage_PaymentStatus) Type() protoreflect.EnumType { - return &file_waArmadilloApplication_WAArmadilloApplication_proto_enumTypes[1] + return &file_waArmadilloApplication_WAArmadilloApplication_proto_enumTypes[3] } func (x Armadillo_Content_PaymentsTransactionMessage_PaymentStatus) Number() protoreflect.EnumNumber { @@ -224,11 +339,11 @@ func (x Armadillo_Content_ScreenshotAction_ScreenshotType) String() string { } func (Armadillo_Content_ScreenshotAction_ScreenshotType) Descriptor() protoreflect.EnumDescriptor { - return file_waArmadilloApplication_WAArmadilloApplication_proto_enumTypes[2].Descriptor() + return file_waArmadilloApplication_WAArmadilloApplication_proto_enumTypes[4].Descriptor() } func (Armadillo_Content_ScreenshotAction_ScreenshotType) Type() protoreflect.EnumType { - return &file_waArmadilloApplication_WAArmadilloApplication_proto_enumTypes[2] + return &file_waArmadilloApplication_WAArmadilloApplication_proto_enumTypes[4] } func (x Armadillo_Content_ScreenshotAction_ScreenshotType) Number() protoreflect.EnumNumber { @@ -247,7 +362,7 @@ func (x *Armadillo_Content_ScreenshotAction_ScreenshotType) UnmarshalJSON(b []by // Deprecated: Use Armadillo_Content_ScreenshotAction_ScreenshotType.Descriptor instead. func (Armadillo_Content_ScreenshotAction_ScreenshotType) EnumDescriptor() ([]byte, []int) { - return file_waArmadilloApplication_WAArmadilloApplication_proto_rawDescGZIP(), []int{0, 5, 4, 0} + return file_waArmadilloApplication_WAArmadilloApplication_proto_rawDescGZIP(), []int{0, 5, 5, 0} } type Armadillo_Content_RavenActionNotifMessage_ActionType int32 @@ -283,11 +398,11 @@ func (x Armadillo_Content_RavenActionNotifMessage_ActionType) String() string { } func (Armadillo_Content_RavenActionNotifMessage_ActionType) Descriptor() protoreflect.EnumDescriptor { - return file_waArmadilloApplication_WAArmadilloApplication_proto_enumTypes[3].Descriptor() + return file_waArmadilloApplication_WAArmadilloApplication_proto_enumTypes[5].Descriptor() } func (Armadillo_Content_RavenActionNotifMessage_ActionType) Type() protoreflect.EnumType { - return &file_waArmadilloApplication_WAArmadilloApplication_proto_enumTypes[3] + return &file_waArmadilloApplication_WAArmadilloApplication_proto_enumTypes[5] } func (x Armadillo_Content_RavenActionNotifMessage_ActionType) Number() protoreflect.EnumNumber { @@ -306,7 +421,7 @@ func (x *Armadillo_Content_RavenActionNotifMessage_ActionType) UnmarshalJSON(b [ // Deprecated: Use Armadillo_Content_RavenActionNotifMessage_ActionType.Descriptor instead. func (Armadillo_Content_RavenActionNotifMessage_ActionType) EnumDescriptor() ([]byte, []int) { - return file_waArmadilloApplication_WAArmadilloApplication_proto_rawDescGZIP(), []int{0, 5, 6, 0} + return file_waArmadilloApplication_WAArmadilloApplication_proto_rawDescGZIP(), []int{0, 5, 7, 0} } type Armadillo_Content_RavenMessage_EphemeralType int32 @@ -342,11 +457,11 @@ func (x Armadillo_Content_RavenMessage_EphemeralType) String() string { } func (Armadillo_Content_RavenMessage_EphemeralType) Descriptor() protoreflect.EnumDescriptor { - return file_waArmadilloApplication_WAArmadilloApplication_proto_enumTypes[4].Descriptor() + return file_waArmadilloApplication_WAArmadilloApplication_proto_enumTypes[6].Descriptor() } func (Armadillo_Content_RavenMessage_EphemeralType) Type() protoreflect.EnumType { - return &file_waArmadilloApplication_WAArmadilloApplication_proto_enumTypes[4] + return &file_waArmadilloApplication_WAArmadilloApplication_proto_enumTypes[6] } func (x Armadillo_Content_RavenMessage_EphemeralType) Number() protoreflect.EnumNumber { @@ -365,7 +480,7 @@ func (x *Armadillo_Content_RavenMessage_EphemeralType) UnmarshalJSON(b []byte) e // Deprecated: Use Armadillo_Content_RavenMessage_EphemeralType.Descriptor instead. func (Armadillo_Content_RavenMessage_EphemeralType) EnumDescriptor() ([]byte, []int) { - return file_waArmadilloApplication_WAArmadilloApplication_proto_rawDescGZIP(), []int{0, 5, 7, 0} + return file_waArmadilloApplication_WAArmadilloApplication_proto_rawDescGZIP(), []int{0, 5, 8, 0} } type Armadillo_Content_CommonSticker_StickerType int32 @@ -401,11 +516,11 @@ func (x Armadillo_Content_CommonSticker_StickerType) String() string { } func (Armadillo_Content_CommonSticker_StickerType) Descriptor() protoreflect.EnumDescriptor { - return file_waArmadilloApplication_WAArmadilloApplication_proto_enumTypes[5].Descriptor() + return file_waArmadilloApplication_WAArmadilloApplication_proto_enumTypes[7].Descriptor() } func (Armadillo_Content_CommonSticker_StickerType) Type() protoreflect.EnumType { - return &file_waArmadilloApplication_WAArmadilloApplication_proto_enumTypes[5] + return &file_waArmadilloApplication_WAArmadilloApplication_proto_enumTypes[7] } func (x Armadillo_Content_CommonSticker_StickerType) Number() protoreflect.EnumNumber { @@ -424,25 +539,22 @@ func (x *Armadillo_Content_CommonSticker_StickerType) UnmarshalJSON(b []byte) er // Deprecated: Use Armadillo_Content_CommonSticker_StickerType.Descriptor instead. func (Armadillo_Content_CommonSticker_StickerType) EnumDescriptor() ([]byte, []int) { - return file_waArmadilloApplication_WAArmadilloApplication_proto_rawDescGZIP(), []int{0, 5, 8, 0} + return file_waArmadilloApplication_WAArmadilloApplication_proto_rawDescGZIP(), []int{0, 5, 9, 0} } type Armadillo struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Payload *Armadillo_Payload `protobuf:"bytes,1,opt,name=payload" json:"payload,omitempty"` + Metadata *Armadillo_Metadata `protobuf:"bytes,2,opt,name=metadata" json:"metadata,omitempty"` unknownFields protoimpl.UnknownFields - - Payload *Armadillo_Payload `protobuf:"bytes,1,opt,name=payload" json:"payload,omitempty"` - Metadata *Armadillo_Metadata `protobuf:"bytes,2,opt,name=metadata" json:"metadata,omitempty"` + sizeCache protoimpl.SizeCache } func (x *Armadillo) Reset() { *x = Armadillo{} - if protoimpl.UnsafeEnabled { - mi := &file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Armadillo) String() string { @@ -453,7 +565,7 @@ func (*Armadillo) ProtoMessage() {} func (x *Armadillo) ProtoReflect() protoreflect.Message { mi := &file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -483,18 +595,16 @@ func (x *Armadillo) GetMetadata() *Armadillo_Metadata { } type Armadillo_Metadata struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *Armadillo_Metadata) Reset() { *x = Armadillo_Metadata{} - if protoimpl.UnsafeEnabled { - mi := &file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Armadillo_Metadata) String() string { @@ -505,7 +615,7 @@ func (*Armadillo_Metadata) ProtoMessage() {} func (x *Armadillo_Metadata) ProtoReflect() protoreflect.Message { mi := &file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -521,26 +631,23 @@ func (*Armadillo_Metadata) Descriptor() ([]byte, []int) { } type Armadillo_Payload struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Types that are assignable to Payload: + state protoimpl.MessageState `protogen:"open.v1"` + // Types that are valid to be assigned to Payload: // // *Armadillo_Payload_Content // *Armadillo_Payload_ApplicationData // *Armadillo_Payload_Signal // *Armadillo_Payload_SubProtocol - Payload isArmadillo_Payload_Payload `protobuf_oneof:"payload"` + Payload isArmadillo_Payload_Payload `protobuf_oneof:"payload"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *Armadillo_Payload) Reset() { *x = Armadillo_Payload{} - if protoimpl.UnsafeEnabled { - mi := &file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Armadillo_Payload) String() string { @@ -551,7 +658,7 @@ func (*Armadillo_Payload) ProtoMessage() {} func (x *Armadillo_Payload) ProtoReflect() protoreflect.Message { mi := &file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -566,37 +673,45 @@ func (*Armadillo_Payload) Descriptor() ([]byte, []int) { return file_waArmadilloApplication_WAArmadilloApplication_proto_rawDescGZIP(), []int{0, 1} } -func (m *Armadillo_Payload) GetPayload() isArmadillo_Payload_Payload { - if m != nil { - return m.Payload +func (x *Armadillo_Payload) GetPayload() isArmadillo_Payload_Payload { + if x != nil { + return x.Payload } return nil } func (x *Armadillo_Payload) GetContent() *Armadillo_Content { - if x, ok := x.GetPayload().(*Armadillo_Payload_Content); ok { - return x.Content + if x != nil { + if x, ok := x.Payload.(*Armadillo_Payload_Content); ok { + return x.Content + } } return nil } func (x *Armadillo_Payload) GetApplicationData() *Armadillo_ApplicationData { - if x, ok := x.GetPayload().(*Armadillo_Payload_ApplicationData); ok { - return x.ApplicationData + if x != nil { + if x, ok := x.Payload.(*Armadillo_Payload_ApplicationData); ok { + return x.ApplicationData + } } return nil } func (x *Armadillo_Payload) GetSignal() *Armadillo_Signal { - if x, ok := x.GetPayload().(*Armadillo_Payload_Signal); ok { - return x.Signal + if x != nil { + if x, ok := x.Payload.(*Armadillo_Payload_Signal); ok { + return x.Signal + } } return nil } func (x *Armadillo_Payload) GetSubProtocol() *Armadillo_SubProtocolPayload { - if x, ok := x.GetPayload().(*Armadillo_Payload_SubProtocol); ok { - return x.SubProtocol + if x != nil { + if x, ok := x.Payload.(*Armadillo_Payload_SubProtocol); ok { + return x.SubProtocol + } } return nil } @@ -630,20 +745,17 @@ func (*Armadillo_Payload_Signal) isArmadillo_Payload_Payload() {} func (*Armadillo_Payload_SubProtocol) isArmadillo_Payload_Payload() {} type Armadillo_SubProtocolPayload struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + FutureProof *waCommon.FutureProofBehavior `protobuf:"varint,1,opt,name=futureProof,enum=WACommon.FutureProofBehavior" json:"futureProof,omitempty"` unknownFields protoimpl.UnknownFields - - FutureProof *waCommon.FutureProofBehavior `protobuf:"varint,1,opt,name=futureProof,enum=WACommon.FutureProofBehavior" json:"futureProof,omitempty"` + sizeCache protoimpl.SizeCache } func (x *Armadillo_SubProtocolPayload) Reset() { *x = Armadillo_SubProtocolPayload{} - if protoimpl.UnsafeEnabled { - mi := &file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Armadillo_SubProtocolPayload) String() string { @@ -654,7 +766,7 @@ func (*Armadillo_SubProtocolPayload) ProtoMessage() {} func (x *Armadillo_SubProtocolPayload) ProtoReflect() protoreflect.Message { mi := &file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -677,23 +789,20 @@ func (x *Armadillo_SubProtocolPayload) GetFutureProof() waCommon.FutureProofBeha } type Armadillo_Signal struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Types that are assignable to Signal: + state protoimpl.MessageState `protogen:"open.v1"` + // Types that are valid to be assigned to Signal: // // *Armadillo_Signal_EncryptedBackupsSecrets_ - Signal isArmadillo_Signal_Signal `protobuf_oneof:"signal"` + Signal isArmadillo_Signal_Signal `protobuf_oneof:"signal"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *Armadillo_Signal) Reset() { *x = Armadillo_Signal{} - if protoimpl.UnsafeEnabled { - mi := &file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Armadillo_Signal) String() string { @@ -704,7 +813,7 @@ func (*Armadillo_Signal) ProtoMessage() {} func (x *Armadillo_Signal) ProtoReflect() protoreflect.Message { mi := &file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -719,16 +828,18 @@ func (*Armadillo_Signal) Descriptor() ([]byte, []int) { return file_waArmadilloApplication_WAArmadilloApplication_proto_rawDescGZIP(), []int{0, 3} } -func (m *Armadillo_Signal) GetSignal() isArmadillo_Signal_Signal { - if m != nil { - return m.Signal +func (x *Armadillo_Signal) GetSignal() isArmadillo_Signal_Signal { + if x != nil { + return x.Signal } return nil } func (x *Armadillo_Signal) GetEncryptedBackupsSecrets() *Armadillo_Signal_EncryptedBackupsSecrets { - if x, ok := x.GetSignal().(*Armadillo_Signal_EncryptedBackupsSecrets_); ok { - return x.EncryptedBackupsSecrets + if x != nil { + if x, ok := x.Signal.(*Armadillo_Signal_EncryptedBackupsSecrets_); ok { + return x.EncryptedBackupsSecrets + } } return nil } @@ -744,24 +855,22 @@ type Armadillo_Signal_EncryptedBackupsSecrets_ struct { func (*Armadillo_Signal_EncryptedBackupsSecrets_) isArmadillo_Signal_Signal() {} type Armadillo_ApplicationData struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Types that are assignable to ApplicationData: + state protoimpl.MessageState `protogen:"open.v1"` + // Types that are valid to be assigned to ApplicationData: // // *Armadillo_ApplicationData_MetadataSync // *Armadillo_ApplicationData_AiBotResponse + // *Armadillo_ApplicationData_MessageHistoryDocumentMessage_ ApplicationData isArmadillo_ApplicationData_ApplicationData `protobuf_oneof:"applicationData"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *Armadillo_ApplicationData) Reset() { *x = Armadillo_ApplicationData{} - if protoimpl.UnsafeEnabled { - mi := &file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Armadillo_ApplicationData) String() string { @@ -772,7 +881,7 @@ func (*Armadillo_ApplicationData) ProtoMessage() {} func (x *Armadillo_ApplicationData) ProtoReflect() protoreflect.Message { mi := &file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -787,23 +896,36 @@ func (*Armadillo_ApplicationData) Descriptor() ([]byte, []int) { return file_waArmadilloApplication_WAArmadilloApplication_proto_rawDescGZIP(), []int{0, 4} } -func (m *Armadillo_ApplicationData) GetApplicationData() isArmadillo_ApplicationData_ApplicationData { - if m != nil { - return m.ApplicationData +func (x *Armadillo_ApplicationData) GetApplicationData() isArmadillo_ApplicationData_ApplicationData { + if x != nil { + return x.ApplicationData } return nil } func (x *Armadillo_ApplicationData) GetMetadataSync() *Armadillo_ApplicationData_MetadataSyncNotification { - if x, ok := x.GetApplicationData().(*Armadillo_ApplicationData_MetadataSync); ok { - return x.MetadataSync + if x != nil { + if x, ok := x.ApplicationData.(*Armadillo_ApplicationData_MetadataSync); ok { + return x.MetadataSync + } } return nil } func (x *Armadillo_ApplicationData) GetAiBotResponse() *Armadillo_ApplicationData_AIBotResponseMessage { - if x, ok := x.GetApplicationData().(*Armadillo_ApplicationData_AiBotResponse); ok { - return x.AiBotResponse + if x != nil { + if x, ok := x.ApplicationData.(*Armadillo_ApplicationData_AiBotResponse); ok { + return x.AiBotResponse + } + } + return nil +} + +func (x *Armadillo_ApplicationData) GetMessageHistoryDocumentMessage() *Armadillo_ApplicationData_MessageHistoryDocumentMessage { + if x != nil { + if x, ok := x.ApplicationData.(*Armadillo_ApplicationData_MessageHistoryDocumentMessage_); ok { + return x.MessageHistoryDocumentMessage + } } return nil } @@ -820,16 +942,20 @@ type Armadillo_ApplicationData_AiBotResponse struct { AiBotResponse *Armadillo_ApplicationData_AIBotResponseMessage `protobuf:"bytes,2,opt,name=aiBotResponse,oneof"` } +type Armadillo_ApplicationData_MessageHistoryDocumentMessage_ struct { + MessageHistoryDocumentMessage *Armadillo_ApplicationData_MessageHistoryDocumentMessage `protobuf:"bytes,3,opt,name=messageHistoryDocumentMessage,oneof"` +} + func (*Armadillo_ApplicationData_MetadataSync) isArmadillo_ApplicationData_ApplicationData() {} func (*Armadillo_ApplicationData_AiBotResponse) isArmadillo_ApplicationData_ApplicationData() {} -type Armadillo_Content struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +func (*Armadillo_ApplicationData_MessageHistoryDocumentMessage_) isArmadillo_ApplicationData_ApplicationData() { +} - // Types that are assignable to Content: +type Armadillo_Content struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Types that are valid to be assigned to Content: // // *Armadillo_Content_CommonSticker_ // *Armadillo_Content_ScreenshotAction_ @@ -842,16 +968,17 @@ type Armadillo_Content struct { // *Armadillo_Content_BumpExistingMessage_ // *Armadillo_Content_NoteReplyMessage_ // *Armadillo_Content_RavenMessageMsgr - Content isArmadillo_Content_Content `protobuf_oneof:"content"` + // *Armadillo_Content_NetworkVerificationMessage_ + Content isArmadillo_Content_Content `protobuf_oneof:"content"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *Armadillo_Content) Reset() { *x = Armadillo_Content{} - if protoimpl.UnsafeEnabled { - mi := &file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Armadillo_Content) String() string { @@ -862,7 +989,7 @@ func (*Armadillo_Content) ProtoMessage() {} func (x *Armadillo_Content) ProtoReflect() protoreflect.Message { mi := &file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[6] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -877,86 +1004,117 @@ func (*Armadillo_Content) Descriptor() ([]byte, []int) { return file_waArmadilloApplication_WAArmadilloApplication_proto_rawDescGZIP(), []int{0, 5} } -func (m *Armadillo_Content) GetContent() isArmadillo_Content_Content { - if m != nil { - return m.Content +func (x *Armadillo_Content) GetContent() isArmadillo_Content_Content { + if x != nil { + return x.Content } return nil } func (x *Armadillo_Content) GetCommonSticker() *Armadillo_Content_CommonSticker { - if x, ok := x.GetContent().(*Armadillo_Content_CommonSticker_); ok { - return x.CommonSticker + if x != nil { + if x, ok := x.Content.(*Armadillo_Content_CommonSticker_); ok { + return x.CommonSticker + } } return nil } func (x *Armadillo_Content) GetScreenshotAction() *Armadillo_Content_ScreenshotAction { - if x, ok := x.GetContent().(*Armadillo_Content_ScreenshotAction_); ok { - return x.ScreenshotAction + if x != nil { + if x, ok := x.Content.(*Armadillo_Content_ScreenshotAction_); ok { + return x.ScreenshotAction + } } return nil } func (x *Armadillo_Content) GetExtendedContentMessage() *waArmadilloXMA.ExtendedContentMessage { - if x, ok := x.GetContent().(*Armadillo_Content_ExtendedContentMessage); ok { - return x.ExtendedContentMessage + if x != nil { + if x, ok := x.Content.(*Armadillo_Content_ExtendedContentMessage); ok { + return x.ExtendedContentMessage + } } return nil } func (x *Armadillo_Content) GetRavenMessage() *Armadillo_Content_RavenMessage { - if x, ok := x.GetContent().(*Armadillo_Content_RavenMessage_); ok { - return x.RavenMessage + if x != nil { + if x, ok := x.Content.(*Armadillo_Content_RavenMessage_); ok { + return x.RavenMessage + } } return nil } func (x *Armadillo_Content) GetRavenActionNotifMessage() *Armadillo_Content_RavenActionNotifMessage { - if x, ok := x.GetContent().(*Armadillo_Content_RavenActionNotifMessage_); ok { - return x.RavenActionNotifMessage + if x != nil { + if x, ok := x.Content.(*Armadillo_Content_RavenActionNotifMessage_); ok { + return x.RavenActionNotifMessage + } } return nil } func (x *Armadillo_Content) GetExtendedMessageContentWithSear() *Armadillo_Content_ExtendedContentMessageWithSear { - if x, ok := x.GetContent().(*Armadillo_Content_ExtendedMessageContentWithSear); ok { - return x.ExtendedMessageContentWithSear + if x != nil { + if x, ok := x.Content.(*Armadillo_Content_ExtendedMessageContentWithSear); ok { + return x.ExtendedMessageContentWithSear + } } return nil } func (x *Armadillo_Content) GetImageGalleryMessage() *Armadillo_Content_ImageGalleryMessage { - if x, ok := x.GetContent().(*Armadillo_Content_ImageGalleryMessage_); ok { - return x.ImageGalleryMessage + if x != nil { + if x, ok := x.Content.(*Armadillo_Content_ImageGalleryMessage_); ok { + return x.ImageGalleryMessage + } } return nil } func (x *Armadillo_Content) GetPaymentsTransactionMessage() *Armadillo_Content_PaymentsTransactionMessage { - if x, ok := x.GetContent().(*Armadillo_Content_PaymentsTransactionMessage_); ok { - return x.PaymentsTransactionMessage + if x != nil { + if x, ok := x.Content.(*Armadillo_Content_PaymentsTransactionMessage_); ok { + return x.PaymentsTransactionMessage + } } return nil } func (x *Armadillo_Content) GetBumpExistingMessage() *Armadillo_Content_BumpExistingMessage { - if x, ok := x.GetContent().(*Armadillo_Content_BumpExistingMessage_); ok { - return x.BumpExistingMessage + if x != nil { + if x, ok := x.Content.(*Armadillo_Content_BumpExistingMessage_); ok { + return x.BumpExistingMessage + } } return nil } func (x *Armadillo_Content) GetNoteReplyMessage() *Armadillo_Content_NoteReplyMessage { - if x, ok := x.GetContent().(*Armadillo_Content_NoteReplyMessage_); ok { - return x.NoteReplyMessage + if x != nil { + if x, ok := x.Content.(*Armadillo_Content_NoteReplyMessage_); ok { + return x.NoteReplyMessage + } } return nil } func (x *Armadillo_Content) GetRavenMessageMsgr() *Armadillo_Content_RavenMessage { - if x, ok := x.GetContent().(*Armadillo_Content_RavenMessageMsgr); ok { - return x.RavenMessageMsgr + if x != nil { + if x, ok := x.Content.(*Armadillo_Content_RavenMessageMsgr); ok { + return x.RavenMessageMsgr + } + } + return nil +} + +func (x *Armadillo_Content) GetNetworkVerificationMessage() *Armadillo_Content_NetworkVerificationMessage { + if x != nil { + if x, ok := x.Content.(*Armadillo_Content_NetworkVerificationMessage_); ok { + return x.NetworkVerificationMessage + } } return nil } @@ -1009,6 +1167,10 @@ type Armadillo_Content_RavenMessageMsgr struct { RavenMessageMsgr *Armadillo_Content_RavenMessage `protobuf:"bytes,14,opt,name=ravenMessageMsgr,oneof"` } +type Armadillo_Content_NetworkVerificationMessage_ struct { + NetworkVerificationMessage *Armadillo_Content_NetworkVerificationMessage `protobuf:"bytes,15,opt,name=networkVerificationMessage,oneof"` +} + func (*Armadillo_Content_CommonSticker_) isArmadillo_Content_Content() {} func (*Armadillo_Content_ScreenshotAction_) isArmadillo_Content_Content() {} @@ -1031,26 +1193,25 @@ func (*Armadillo_Content_NoteReplyMessage_) isArmadillo_Content_Content() {} func (*Armadillo_Content_RavenMessageMsgr) isArmadillo_Content_Content() {} -type Armadillo_Signal_EncryptedBackupsSecrets struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +func (*Armadillo_Content_NetworkVerificationMessage_) isArmadillo_Content_Content() {} +type Armadillo_Signal_EncryptedBackupsSecrets struct { + state protoimpl.MessageState `protogen:"open.v1"` BackupID *uint64 `protobuf:"varint,1,opt,name=backupID" json:"backupID,omitempty"` ServerDataID *uint64 `protobuf:"varint,2,opt,name=serverDataID" json:"serverDataID,omitempty"` Epoch []*Armadillo_Signal_EncryptedBackupsSecrets_Epoch `protobuf:"bytes,3,rep,name=epoch" json:"epoch,omitempty"` TempOcmfClientState []byte `protobuf:"bytes,4,opt,name=tempOcmfClientState" json:"tempOcmfClientState,omitempty"` MailboxRootKey []byte `protobuf:"bytes,5,opt,name=mailboxRootKey" json:"mailboxRootKey,omitempty"` ObliviousValidationToken []byte `protobuf:"bytes,6,opt,name=obliviousValidationToken" json:"obliviousValidationToken,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *Armadillo_Signal_EncryptedBackupsSecrets) Reset() { *x = Armadillo_Signal_EncryptedBackupsSecrets{} - if protoimpl.UnsafeEnabled { - mi := &file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Armadillo_Signal_EncryptedBackupsSecrets) String() string { @@ -1061,7 +1222,7 @@ func (*Armadillo_Signal_EncryptedBackupsSecrets) ProtoMessage() {} func (x *Armadillo_Signal_EncryptedBackupsSecrets) ProtoReflect() protoreflect.Message { mi := &file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[7] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1119,23 +1280,20 @@ func (x *Armadillo_Signal_EncryptedBackupsSecrets) GetObliviousValidationToken() } type Armadillo_Signal_EncryptedBackupsSecrets_Epoch struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + ID *uint64 `protobuf:"varint,1,opt,name=ID" json:"ID,omitempty"` + AnonID []byte `protobuf:"bytes,2,opt,name=anonID" json:"anonID,omitempty"` + RootKey []byte `protobuf:"bytes,3,opt,name=rootKey" json:"rootKey,omitempty"` + Status *Armadillo_Signal_EncryptedBackupsSecrets_Epoch_EpochStatus `protobuf:"varint,4,opt,name=status,enum=WAArmadilloApplication.Armadillo_Signal_EncryptedBackupsSecrets_Epoch_EpochStatus" json:"status,omitempty"` unknownFields protoimpl.UnknownFields - - ID *uint64 `protobuf:"varint,1,opt,name=ID" json:"ID,omitempty"` - AnonID []byte `protobuf:"bytes,2,opt,name=anonID" json:"anonID,omitempty"` - RootKey []byte `protobuf:"bytes,3,opt,name=rootKey" json:"rootKey,omitempty"` - Status *Armadillo_Signal_EncryptedBackupsSecrets_Epoch_EpochStatus `protobuf:"varint,4,opt,name=status,enum=WAArmadilloApplication.Armadillo_Signal_EncryptedBackupsSecrets_Epoch_EpochStatus" json:"status,omitempty"` + sizeCache protoimpl.SizeCache } func (x *Armadillo_Signal_EncryptedBackupsSecrets_Epoch) Reset() { *x = Armadillo_Signal_EncryptedBackupsSecrets_Epoch{} - if protoimpl.UnsafeEnabled { - mi := &file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[8] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Armadillo_Signal_EncryptedBackupsSecrets_Epoch) String() string { @@ -1146,7 +1304,7 @@ func (*Armadillo_Signal_EncryptedBackupsSecrets_Epoch) ProtoMessage() {} func (x *Armadillo_Signal_EncryptedBackupsSecrets_Epoch) ProtoReflect() protoreflect.Message { mi := &file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[8] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1189,34 +1347,29 @@ func (x *Armadillo_Signal_EncryptedBackupsSecrets_Epoch) GetStatus() Armadillo_S return Armadillo_Signal_EncryptedBackupsSecrets_Epoch_ES_OPEN } -type Armadillo_ApplicationData_AIBotResponseMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache +type Armadillo_ApplicationData_MessageHistoryDocumentMessage struct { + state protoimpl.MessageState `protogen:"open.v1"` + Document *waCommon.SubProtocol `protobuf:"bytes,1,opt,name=document" json:"document,omitempty"` unknownFields protoimpl.UnknownFields - - SummonToken *string `protobuf:"bytes,1,opt,name=summonToken" json:"summonToken,omitempty"` - MessageText *string `protobuf:"bytes,2,opt,name=messageText" json:"messageText,omitempty"` - SerializedExtras *string `protobuf:"bytes,3,opt,name=serializedExtras" json:"serializedExtras,omitempty"` + sizeCache protoimpl.SizeCache } -func (x *Armadillo_ApplicationData_AIBotResponseMessage) Reset() { - *x = Armadillo_ApplicationData_AIBotResponseMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[9] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *Armadillo_ApplicationData_MessageHistoryDocumentMessage) Reset() { + *x = Armadillo_ApplicationData_MessageHistoryDocumentMessage{} + mi := &file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *Armadillo_ApplicationData_AIBotResponseMessage) String() string { +func (x *Armadillo_ApplicationData_MessageHistoryDocumentMessage) String() string { return protoimpl.X.MessageStringOf(x) } -func (*Armadillo_ApplicationData_AIBotResponseMessage) ProtoMessage() {} +func (*Armadillo_ApplicationData_MessageHistoryDocumentMessage) ProtoMessage() {} -func (x *Armadillo_ApplicationData_AIBotResponseMessage) ProtoReflect() protoreflect.Message { +func (x *Armadillo_ApplicationData_MessageHistoryDocumentMessage) ProtoReflect() protoreflect.Message { mi := &file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[9] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1226,23 +1379,69 @@ func (x *Armadillo_ApplicationData_AIBotResponseMessage) ProtoReflect() protoref return mi.MessageOf(x) } -// Deprecated: Use Armadillo_ApplicationData_AIBotResponseMessage.ProtoReflect.Descriptor instead. -func (*Armadillo_ApplicationData_AIBotResponseMessage) Descriptor() ([]byte, []int) { +// Deprecated: Use Armadillo_ApplicationData_MessageHistoryDocumentMessage.ProtoReflect.Descriptor instead. +func (*Armadillo_ApplicationData_MessageHistoryDocumentMessage) Descriptor() ([]byte, []int) { return file_waArmadilloApplication_WAArmadilloApplication_proto_rawDescGZIP(), []int{0, 4, 0} } -func (x *Armadillo_ApplicationData_AIBotResponseMessage) GetSummonToken() string { - if x != nil && x.SummonToken != nil { - return *x.SummonToken +func (x *Armadillo_ApplicationData_MessageHistoryDocumentMessage) GetDocument() *waCommon.SubProtocol { + if x != nil { + return x.Document } - return "" + return nil } -func (x *Armadillo_ApplicationData_AIBotResponseMessage) GetMessageText() string { - if x != nil && x.MessageText != nil { - return *x.MessageText - } - return "" +type Armadillo_ApplicationData_AIBotResponseMessage struct { + state protoimpl.MessageState `protogen:"open.v1"` + SummonToken *string `protobuf:"bytes,1,opt,name=summonToken" json:"summonToken,omitempty"` + MessageText *string `protobuf:"bytes,2,opt,name=messageText" json:"messageText,omitempty"` + SerializedExtras *string `protobuf:"bytes,3,opt,name=serializedExtras" json:"serializedExtras,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *Armadillo_ApplicationData_AIBotResponseMessage) Reset() { + *x = Armadillo_ApplicationData_AIBotResponseMessage{} + mi := &file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *Armadillo_ApplicationData_AIBotResponseMessage) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Armadillo_ApplicationData_AIBotResponseMessage) ProtoMessage() {} + +func (x *Armadillo_ApplicationData_AIBotResponseMessage) ProtoReflect() protoreflect.Message { + mi := &file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[10] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Armadillo_ApplicationData_AIBotResponseMessage.ProtoReflect.Descriptor instead. +func (*Armadillo_ApplicationData_AIBotResponseMessage) Descriptor() ([]byte, []int) { + return file_waArmadilloApplication_WAArmadilloApplication_proto_rawDescGZIP(), []int{0, 4, 1} +} + +func (x *Armadillo_ApplicationData_AIBotResponseMessage) GetSummonToken() string { + if x != nil && x.SummonToken != nil { + return *x.SummonToken + } + return "" +} + +func (x *Armadillo_ApplicationData_AIBotResponseMessage) GetMessageText() string { + if x != nil && x.MessageText != nil { + return *x.MessageText + } + return "" } func (x *Armadillo_ApplicationData_AIBotResponseMessage) GetSerializedExtras() string { @@ -1253,25 +1452,24 @@ func (x *Armadillo_ApplicationData_AIBotResponseMessage) GetSerializedExtras() s } type Armadillo_ApplicationData_MetadataSyncAction struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Types that are assignable to ActionType: + state protoimpl.MessageState `protogen:"open.v1"` + // Types that are valid to be assigned to ActionType: // // *Armadillo_ApplicationData_MetadataSyncAction_ChatAction // *Armadillo_ApplicationData_MetadataSyncAction_MessageAction + // *Armadillo_ApplicationData_MetadataSyncAction_SpectraAction + // *Armadillo_ApplicationData_MetadataSyncAction_AttachmentInterventionAction ActionType isArmadillo_ApplicationData_MetadataSyncAction_ActionType `protobuf_oneof:"actionType"` ActionTimestamp *int64 `protobuf:"varint,1,opt,name=actionTimestamp" json:"actionTimestamp,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *Armadillo_ApplicationData_MetadataSyncAction) Reset() { *x = Armadillo_ApplicationData_MetadataSyncAction{} - if protoimpl.UnsafeEnabled { - mi := &file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[10] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Armadillo_ApplicationData_MetadataSyncAction) String() string { @@ -1281,8 +1479,8 @@ func (x *Armadillo_ApplicationData_MetadataSyncAction) String() string { func (*Armadillo_ApplicationData_MetadataSyncAction) ProtoMessage() {} func (x *Armadillo_ApplicationData_MetadataSyncAction) ProtoReflect() protoreflect.Message { - mi := &file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[10] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[11] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1294,26 +1492,48 @@ func (x *Armadillo_ApplicationData_MetadataSyncAction) ProtoReflect() protorefle // Deprecated: Use Armadillo_ApplicationData_MetadataSyncAction.ProtoReflect.Descriptor instead. func (*Armadillo_ApplicationData_MetadataSyncAction) Descriptor() ([]byte, []int) { - return file_waArmadilloApplication_WAArmadilloApplication_proto_rawDescGZIP(), []int{0, 4, 1} + return file_waArmadilloApplication_WAArmadilloApplication_proto_rawDescGZIP(), []int{0, 4, 2} } -func (m *Armadillo_ApplicationData_MetadataSyncAction) GetActionType() isArmadillo_ApplicationData_MetadataSyncAction_ActionType { - if m != nil { - return m.ActionType +func (x *Armadillo_ApplicationData_MetadataSyncAction) GetActionType() isArmadillo_ApplicationData_MetadataSyncAction_ActionType { + if x != nil { + return x.ActionType } return nil } func (x *Armadillo_ApplicationData_MetadataSyncAction) GetChatAction() *Armadillo_ApplicationData_MetadataSyncAction_SyncChatAction { - if x, ok := x.GetActionType().(*Armadillo_ApplicationData_MetadataSyncAction_ChatAction); ok { - return x.ChatAction + if x != nil { + if x, ok := x.ActionType.(*Armadillo_ApplicationData_MetadataSyncAction_ChatAction); ok { + return x.ChatAction + } } return nil } func (x *Armadillo_ApplicationData_MetadataSyncAction) GetMessageAction() *Armadillo_ApplicationData_MetadataSyncAction_SyncMessageAction { - if x, ok := x.GetActionType().(*Armadillo_ApplicationData_MetadataSyncAction_MessageAction); ok { - return x.MessageAction + if x != nil { + if x, ok := x.ActionType.(*Armadillo_ApplicationData_MetadataSyncAction_MessageAction); ok { + return x.MessageAction + } + } + return nil +} + +func (x *Armadillo_ApplicationData_MetadataSyncAction) GetSpectraAction() *Armadillo_ApplicationData_MetadataSyncAction_SyncSpectraAction { + if x != nil { + if x, ok := x.ActionType.(*Armadillo_ApplicationData_MetadataSyncAction_SpectraAction); ok { + return x.SpectraAction + } + } + return nil +} + +func (x *Armadillo_ApplicationData_MetadataSyncAction) GetAttachmentInterventionAction() *Armadillo_ApplicationData_MetadataSyncAction_SyncAttachmentInterventionAction { + if x != nil { + if x, ok := x.ActionType.(*Armadillo_ApplicationData_MetadataSyncAction_AttachmentInterventionAction); ok { + return x.AttachmentInterventionAction + } } return nil } @@ -1337,27 +1557,38 @@ type Armadillo_ApplicationData_MetadataSyncAction_MessageAction struct { MessageAction *Armadillo_ApplicationData_MetadataSyncAction_SyncMessageAction `protobuf:"bytes,102,opt,name=messageAction,oneof"` } +type Armadillo_ApplicationData_MetadataSyncAction_SpectraAction struct { + SpectraAction *Armadillo_ApplicationData_MetadataSyncAction_SyncSpectraAction `protobuf:"bytes,103,opt,name=spectraAction,oneof"` +} + +type Armadillo_ApplicationData_MetadataSyncAction_AttachmentInterventionAction struct { + AttachmentInterventionAction *Armadillo_ApplicationData_MetadataSyncAction_SyncAttachmentInterventionAction `protobuf:"bytes,104,opt,name=attachmentInterventionAction,oneof"` +} + func (*Armadillo_ApplicationData_MetadataSyncAction_ChatAction) isArmadillo_ApplicationData_MetadataSyncAction_ActionType() { } func (*Armadillo_ApplicationData_MetadataSyncAction_MessageAction) isArmadillo_ApplicationData_MetadataSyncAction_ActionType() { } +func (*Armadillo_ApplicationData_MetadataSyncAction_SpectraAction) isArmadillo_ApplicationData_MetadataSyncAction_ActionType() { +} + +func (*Armadillo_ApplicationData_MetadataSyncAction_AttachmentInterventionAction) isArmadillo_ApplicationData_MetadataSyncAction_ActionType() { +} + type Armadillo_ApplicationData_MetadataSyncNotification struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Actions []*Armadillo_ApplicationData_MetadataSyncAction `protobuf:"bytes,2,rep,name=actions" json:"actions,omitempty"` unknownFields protoimpl.UnknownFields - - Actions []*Armadillo_ApplicationData_MetadataSyncAction `protobuf:"bytes,2,rep,name=actions" json:"actions,omitempty"` + sizeCache protoimpl.SizeCache } func (x *Armadillo_ApplicationData_MetadataSyncNotification) Reset() { *x = Armadillo_ApplicationData_MetadataSyncNotification{} - if protoimpl.UnsafeEnabled { - mi := &file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[11] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Armadillo_ApplicationData_MetadataSyncNotification) String() string { @@ -1367,8 +1598,8 @@ func (x *Armadillo_ApplicationData_MetadataSyncNotification) String() string { func (*Armadillo_ApplicationData_MetadataSyncNotification) ProtoMessage() {} func (x *Armadillo_ApplicationData_MetadataSyncNotification) ProtoReflect() protoreflect.Message { - mi := &file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[11] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[12] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1380,7 +1611,7 @@ func (x *Armadillo_ApplicationData_MetadataSyncNotification) ProtoReflect() prot // Deprecated: Use Armadillo_ApplicationData_MetadataSyncNotification.ProtoReflect.Descriptor instead. func (*Armadillo_ApplicationData_MetadataSyncNotification) Descriptor() ([]byte, []int) { - return file_waArmadilloApplication_WAArmadilloApplication_proto_rawDescGZIP(), []int{0, 4, 2} + return file_waArmadilloApplication_WAArmadilloApplication_proto_rawDescGZIP(), []int{0, 4, 3} } func (x *Armadillo_ApplicationData_MetadataSyncNotification) GetActions() []*Armadillo_ApplicationData_MetadataSyncAction { @@ -1390,25 +1621,143 @@ func (x *Armadillo_ApplicationData_MetadataSyncNotification) GetActions() []*Arm return nil } -type Armadillo_ApplicationData_MetadataSyncAction_SyncMessageAction struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +type Armadillo_ApplicationData_MetadataSyncAction_SyncAttachmentInterventionAction struct { + state protoimpl.MessageState `protogen:"open.v1"` + MessageKey *waCommon.MessageKey `protobuf:"bytes,1,opt,name=messageKey" json:"messageKey,omitempty"` + InterventionType *Armadillo_ApplicationData_MetadataSyncAction_SyncAttachmentInterventionAction_InterventionType `protobuf:"varint,2,opt,name=interventionType,enum=WAArmadilloApplication.Armadillo_ApplicationData_MetadataSyncAction_SyncAttachmentInterventionAction_InterventionType" json:"interventionType,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *Armadillo_ApplicationData_MetadataSyncAction_SyncAttachmentInterventionAction) Reset() { + *x = Armadillo_ApplicationData_MetadataSyncAction_SyncAttachmentInterventionAction{} + mi := &file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *Armadillo_ApplicationData_MetadataSyncAction_SyncAttachmentInterventionAction) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Armadillo_ApplicationData_MetadataSyncAction_SyncAttachmentInterventionAction) ProtoMessage() { +} + +func (x *Armadillo_ApplicationData_MetadataSyncAction_SyncAttachmentInterventionAction) ProtoReflect() protoreflect.Message { + mi := &file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[13] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Armadillo_ApplicationData_MetadataSyncAction_SyncAttachmentInterventionAction.ProtoReflect.Descriptor instead. +func (*Armadillo_ApplicationData_MetadataSyncAction_SyncAttachmentInterventionAction) Descriptor() ([]byte, []int) { + return file_waArmadilloApplication_WAArmadilloApplication_proto_rawDescGZIP(), []int{0, 4, 2, 0} +} + +func (x *Armadillo_ApplicationData_MetadataSyncAction_SyncAttachmentInterventionAction) GetMessageKey() *waCommon.MessageKey { + if x != nil { + return x.MessageKey + } + return nil +} + +func (x *Armadillo_ApplicationData_MetadataSyncAction_SyncAttachmentInterventionAction) GetInterventionType() Armadillo_ApplicationData_MetadataSyncAction_SyncAttachmentInterventionAction_InterventionType { + if x != nil && x.InterventionType != nil { + return *x.InterventionType + } + return Armadillo_ApplicationData_MetadataSyncAction_SyncAttachmentInterventionAction_UNKNOWN +} + +type Armadillo_ApplicationData_MetadataSyncAction_SyncSpectraAction struct { + state protoimpl.MessageState `protogen:"open.v1"` + Key *waCommon.MessageKey `protobuf:"bytes,1,opt,name=key" json:"key,omitempty"` + ActionType *Armadillo_ApplicationData_MetadataSyncAction_SyncSpectraAction_SpectraActionType `protobuf:"varint,2,opt,name=actionType,enum=WAArmadilloApplication.Armadillo_ApplicationData_MetadataSyncAction_SyncSpectraAction_SpectraActionType" json:"actionType,omitempty"` + TakedownActionID *int64 `protobuf:"varint,3,opt,name=takedownActionID" json:"takedownActionID,omitempty"` + Config *string `protobuf:"bytes,4,opt,name=config" json:"config,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *Armadillo_ApplicationData_MetadataSyncAction_SyncSpectraAction) Reset() { + *x = Armadillo_ApplicationData_MetadataSyncAction_SyncSpectraAction{} + mi := &file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *Armadillo_ApplicationData_MetadataSyncAction_SyncSpectraAction) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Armadillo_ApplicationData_MetadataSyncAction_SyncSpectraAction) ProtoMessage() {} + +func (x *Armadillo_ApplicationData_MetadataSyncAction_SyncSpectraAction) ProtoReflect() protoreflect.Message { + mi := &file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[14] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} - // Types that are assignable to Action: +// Deprecated: Use Armadillo_ApplicationData_MetadataSyncAction_SyncSpectraAction.ProtoReflect.Descriptor instead. +func (*Armadillo_ApplicationData_MetadataSyncAction_SyncSpectraAction) Descriptor() ([]byte, []int) { + return file_waArmadilloApplication_WAArmadilloApplication_proto_rawDescGZIP(), []int{0, 4, 2, 1} +} + +func (x *Armadillo_ApplicationData_MetadataSyncAction_SyncSpectraAction) GetKey() *waCommon.MessageKey { + if x != nil { + return x.Key + } + return nil +} + +func (x *Armadillo_ApplicationData_MetadataSyncAction_SyncSpectraAction) GetActionType() Armadillo_ApplicationData_MetadataSyncAction_SyncSpectraAction_SpectraActionType { + if x != nil && x.ActionType != nil { + return *x.ActionType + } + return Armadillo_ApplicationData_MetadataSyncAction_SyncSpectraAction_TAKEDOWN +} + +func (x *Armadillo_ApplicationData_MetadataSyncAction_SyncSpectraAction) GetTakedownActionID() int64 { + if x != nil && x.TakedownActionID != nil { + return *x.TakedownActionID + } + return 0 +} + +func (x *Armadillo_ApplicationData_MetadataSyncAction_SyncSpectraAction) GetConfig() string { + if x != nil && x.Config != nil { + return *x.Config + } + return "" +} + +type Armadillo_ApplicationData_MetadataSyncAction_SyncMessageAction struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Types that are valid to be assigned to Action: // // *Armadillo_ApplicationData_MetadataSyncAction_SyncMessageAction_MessageDelete - Action isArmadillo_ApplicationData_MetadataSyncAction_SyncMessageAction_Action `protobuf_oneof:"action"` - Key *waCommon.MessageKey `protobuf:"bytes,1,opt,name=key" json:"key,omitempty"` + Action isArmadillo_ApplicationData_MetadataSyncAction_SyncMessageAction_Action `protobuf_oneof:"action"` + Key *waCommon.MessageKey `protobuf:"bytes,1,opt,name=key" json:"key,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *Armadillo_ApplicationData_MetadataSyncAction_SyncMessageAction) Reset() { *x = Armadillo_ApplicationData_MetadataSyncAction_SyncMessageAction{} - if protoimpl.UnsafeEnabled { - mi := &file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[12] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Armadillo_ApplicationData_MetadataSyncAction_SyncMessageAction) String() string { @@ -1418,8 +1767,8 @@ func (x *Armadillo_ApplicationData_MetadataSyncAction_SyncMessageAction) String( func (*Armadillo_ApplicationData_MetadataSyncAction_SyncMessageAction) ProtoMessage() {} func (x *Armadillo_ApplicationData_MetadataSyncAction_SyncMessageAction) ProtoReflect() protoreflect.Message { - mi := &file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[12] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[15] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1431,19 +1780,21 @@ func (x *Armadillo_ApplicationData_MetadataSyncAction_SyncMessageAction) ProtoRe // Deprecated: Use Armadillo_ApplicationData_MetadataSyncAction_SyncMessageAction.ProtoReflect.Descriptor instead. func (*Armadillo_ApplicationData_MetadataSyncAction_SyncMessageAction) Descriptor() ([]byte, []int) { - return file_waArmadilloApplication_WAArmadilloApplication_proto_rawDescGZIP(), []int{0, 4, 1, 0} + return file_waArmadilloApplication_WAArmadilloApplication_proto_rawDescGZIP(), []int{0, 4, 2, 2} } -func (m *Armadillo_ApplicationData_MetadataSyncAction_SyncMessageAction) GetAction() isArmadillo_ApplicationData_MetadataSyncAction_SyncMessageAction_Action { - if m != nil { - return m.Action +func (x *Armadillo_ApplicationData_MetadataSyncAction_SyncMessageAction) GetAction() isArmadillo_ApplicationData_MetadataSyncAction_SyncMessageAction_Action { + if x != nil { + return x.Action } return nil } func (x *Armadillo_ApplicationData_MetadataSyncAction_SyncMessageAction) GetMessageDelete() *Armadillo_ApplicationData_MetadataSyncAction_SyncMessageAction_ActionMessageDelete { - if x, ok := x.GetAction().(*Armadillo_ApplicationData_MetadataSyncAction_SyncMessageAction_MessageDelete); ok { - return x.MessageDelete + if x != nil { + if x, ok := x.Action.(*Armadillo_ApplicationData_MetadataSyncAction_SyncMessageAction_MessageDelete); ok { + return x.MessageDelete + } } return nil } @@ -1467,26 +1818,23 @@ func (*Armadillo_ApplicationData_MetadataSyncAction_SyncMessageAction_MessageDel } type Armadillo_ApplicationData_MetadataSyncAction_SyncChatAction struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Types that are assignable to Action: + state protoimpl.MessageState `protogen:"open.v1"` + // Types that are valid to be assigned to Action: // // *Armadillo_ApplicationData_MetadataSyncAction_SyncChatAction_ChatArchive // *Armadillo_ApplicationData_MetadataSyncAction_SyncChatAction_ChatDelete // *Armadillo_ApplicationData_MetadataSyncAction_SyncChatAction_ChatRead - Action isArmadillo_ApplicationData_MetadataSyncAction_SyncChatAction_Action `protobuf_oneof:"action"` - ChatID *string `protobuf:"bytes,1,opt,name=chatID" json:"chatID,omitempty"` + Action isArmadillo_ApplicationData_MetadataSyncAction_SyncChatAction_Action `protobuf_oneof:"action"` + ChatID *string `protobuf:"bytes,1,opt,name=chatID" json:"chatID,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *Armadillo_ApplicationData_MetadataSyncAction_SyncChatAction) Reset() { *x = Armadillo_ApplicationData_MetadataSyncAction_SyncChatAction{} - if protoimpl.UnsafeEnabled { - mi := &file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[13] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[16] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Armadillo_ApplicationData_MetadataSyncAction_SyncChatAction) String() string { @@ -1496,8 +1844,8 @@ func (x *Armadillo_ApplicationData_MetadataSyncAction_SyncChatAction) String() s func (*Armadillo_ApplicationData_MetadataSyncAction_SyncChatAction) ProtoMessage() {} func (x *Armadillo_ApplicationData_MetadataSyncAction_SyncChatAction) ProtoReflect() protoreflect.Message { - mi := &file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[13] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[16] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1509,33 +1857,39 @@ func (x *Armadillo_ApplicationData_MetadataSyncAction_SyncChatAction) ProtoRefle // Deprecated: Use Armadillo_ApplicationData_MetadataSyncAction_SyncChatAction.ProtoReflect.Descriptor instead. func (*Armadillo_ApplicationData_MetadataSyncAction_SyncChatAction) Descriptor() ([]byte, []int) { - return file_waArmadilloApplication_WAArmadilloApplication_proto_rawDescGZIP(), []int{0, 4, 1, 1} + return file_waArmadilloApplication_WAArmadilloApplication_proto_rawDescGZIP(), []int{0, 4, 2, 3} } -func (m *Armadillo_ApplicationData_MetadataSyncAction_SyncChatAction) GetAction() isArmadillo_ApplicationData_MetadataSyncAction_SyncChatAction_Action { - if m != nil { - return m.Action +func (x *Armadillo_ApplicationData_MetadataSyncAction_SyncChatAction) GetAction() isArmadillo_ApplicationData_MetadataSyncAction_SyncChatAction_Action { + if x != nil { + return x.Action } return nil } func (x *Armadillo_ApplicationData_MetadataSyncAction_SyncChatAction) GetChatArchive() *Armadillo_ApplicationData_MetadataSyncAction_SyncChatAction_ActionChatArchive { - if x, ok := x.GetAction().(*Armadillo_ApplicationData_MetadataSyncAction_SyncChatAction_ChatArchive); ok { - return x.ChatArchive + if x != nil { + if x, ok := x.Action.(*Armadillo_ApplicationData_MetadataSyncAction_SyncChatAction_ChatArchive); ok { + return x.ChatArchive + } } return nil } func (x *Armadillo_ApplicationData_MetadataSyncAction_SyncChatAction) GetChatDelete() *Armadillo_ApplicationData_MetadataSyncAction_SyncChatAction_ActionChatDelete { - if x, ok := x.GetAction().(*Armadillo_ApplicationData_MetadataSyncAction_SyncChatAction_ChatDelete); ok { - return x.ChatDelete + if x != nil { + if x, ok := x.Action.(*Armadillo_ApplicationData_MetadataSyncAction_SyncChatAction_ChatDelete); ok { + return x.ChatDelete + } } return nil } func (x *Armadillo_ApplicationData_MetadataSyncAction_SyncChatAction) GetChatRead() *Armadillo_ApplicationData_MetadataSyncAction_SyncChatAction_ActionChatRead { - if x, ok := x.GetAction().(*Armadillo_ApplicationData_MetadataSyncAction_SyncChatAction_ChatRead); ok { - return x.ChatRead + if x != nil { + if x, ok := x.Action.(*Armadillo_ApplicationData_MetadataSyncAction_SyncChatAction_ChatRead); ok { + return x.ChatRead + } } return nil } @@ -1573,21 +1927,18 @@ func (*Armadillo_ApplicationData_MetadataSyncAction_SyncChatAction_ChatRead) isA } type Armadillo_ApplicationData_MetadataSyncAction_SyncActionMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Key *waCommon.MessageKey `protobuf:"bytes,1,opt,name=key" json:"key,omitempty"` + Timestamp *int64 `protobuf:"varint,2,opt,name=timestamp" json:"timestamp,omitempty"` unknownFields protoimpl.UnknownFields - - Key *waCommon.MessageKey `protobuf:"bytes,1,opt,name=key" json:"key,omitempty"` - Timestamp *int64 `protobuf:"varint,2,opt,name=timestamp" json:"timestamp,omitempty"` + sizeCache protoimpl.SizeCache } func (x *Armadillo_ApplicationData_MetadataSyncAction_SyncActionMessage) Reset() { *x = Armadillo_ApplicationData_MetadataSyncAction_SyncActionMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[14] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[17] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Armadillo_ApplicationData_MetadataSyncAction_SyncActionMessage) String() string { @@ -1597,8 +1948,8 @@ func (x *Armadillo_ApplicationData_MetadataSyncAction_SyncActionMessage) String( func (*Armadillo_ApplicationData_MetadataSyncAction_SyncActionMessage) ProtoMessage() {} func (x *Armadillo_ApplicationData_MetadataSyncAction_SyncActionMessage) ProtoReflect() protoreflect.Message { - mi := &file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[14] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[17] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1610,7 +1961,7 @@ func (x *Armadillo_ApplicationData_MetadataSyncAction_SyncActionMessage) ProtoRe // Deprecated: Use Armadillo_ApplicationData_MetadataSyncAction_SyncActionMessage.ProtoReflect.Descriptor instead. func (*Armadillo_ApplicationData_MetadataSyncAction_SyncActionMessage) Descriptor() ([]byte, []int) { - return file_waArmadilloApplication_WAArmadilloApplication_proto_rawDescGZIP(), []int{0, 4, 1, 2} + return file_waArmadilloApplication_WAArmadilloApplication_proto_rawDescGZIP(), []int{0, 4, 2, 4} } func (x *Armadillo_ApplicationData_MetadataSyncAction_SyncActionMessage) GetKey() *waCommon.MessageKey { @@ -1628,22 +1979,19 @@ func (x *Armadillo_ApplicationData_MetadataSyncAction_SyncActionMessage) GetTime } type Armadillo_ApplicationData_MetadataSyncAction_SyncActionMessageRange struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` LastMessageTimestamp *int64 `protobuf:"varint,1,opt,name=lastMessageTimestamp" json:"lastMessageTimestamp,omitempty"` LastSystemMessageTimestamp *int64 `protobuf:"varint,2,opt,name=lastSystemMessageTimestamp" json:"lastSystemMessageTimestamp,omitempty"` Messages []*Armadillo_ApplicationData_MetadataSyncAction_SyncActionMessage `protobuf:"bytes,3,rep,name=messages" json:"messages,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *Armadillo_ApplicationData_MetadataSyncAction_SyncActionMessageRange) Reset() { *x = Armadillo_ApplicationData_MetadataSyncAction_SyncActionMessageRange{} - if protoimpl.UnsafeEnabled { - mi := &file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[15] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[18] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Armadillo_ApplicationData_MetadataSyncAction_SyncActionMessageRange) String() string { @@ -1653,8 +2001,8 @@ func (x *Armadillo_ApplicationData_MetadataSyncAction_SyncActionMessageRange) St func (*Armadillo_ApplicationData_MetadataSyncAction_SyncActionMessageRange) ProtoMessage() {} func (x *Armadillo_ApplicationData_MetadataSyncAction_SyncActionMessageRange) ProtoReflect() protoreflect.Message { - mi := &file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[15] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[18] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1666,7 +2014,7 @@ func (x *Armadillo_ApplicationData_MetadataSyncAction_SyncActionMessageRange) Pr // Deprecated: Use Armadillo_ApplicationData_MetadataSyncAction_SyncActionMessageRange.ProtoReflect.Descriptor instead. func (*Armadillo_ApplicationData_MetadataSyncAction_SyncActionMessageRange) Descriptor() ([]byte, []int) { - return file_waArmadilloApplication_WAArmadilloApplication_proto_rawDescGZIP(), []int{0, 4, 1, 3} + return file_waArmadilloApplication_WAArmadilloApplication_proto_rawDescGZIP(), []int{0, 4, 2, 5} } func (x *Armadillo_ApplicationData_MetadataSyncAction_SyncActionMessageRange) GetLastMessageTimestamp() int64 { @@ -1691,18 +2039,16 @@ func (x *Armadillo_ApplicationData_MetadataSyncAction_SyncActionMessageRange) Ge } type Armadillo_ApplicationData_MetadataSyncAction_SyncMessageAction_ActionMessageDelete struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *Armadillo_ApplicationData_MetadataSyncAction_SyncMessageAction_ActionMessageDelete) Reset() { *x = Armadillo_ApplicationData_MetadataSyncAction_SyncMessageAction_ActionMessageDelete{} - if protoimpl.UnsafeEnabled { - mi := &file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[16] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[19] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Armadillo_ApplicationData_MetadataSyncAction_SyncMessageAction_ActionMessageDelete) String() string { @@ -1713,8 +2059,8 @@ func (*Armadillo_ApplicationData_MetadataSyncAction_SyncMessageAction_ActionMess } func (x *Armadillo_ApplicationData_MetadataSyncAction_SyncMessageAction_ActionMessageDelete) ProtoReflect() protoreflect.Message { - mi := &file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[16] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[19] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1726,25 +2072,22 @@ func (x *Armadillo_ApplicationData_MetadataSyncAction_SyncMessageAction_ActionMe // Deprecated: Use Armadillo_ApplicationData_MetadataSyncAction_SyncMessageAction_ActionMessageDelete.ProtoReflect.Descriptor instead. func (*Armadillo_ApplicationData_MetadataSyncAction_SyncMessageAction_ActionMessageDelete) Descriptor() ([]byte, []int) { - return file_waArmadilloApplication_WAArmadilloApplication_proto_rawDescGZIP(), []int{0, 4, 1, 0, 0} + return file_waArmadilloApplication_WAArmadilloApplication_proto_rawDescGZIP(), []int{0, 4, 2, 2, 0} } type Armadillo_ApplicationData_MetadataSyncAction_SyncChatAction_ActionChatRead struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + MessageRange *Armadillo_ApplicationData_MetadataSyncAction_SyncActionMessageRange `protobuf:"bytes,1,opt,name=messageRange" json:"messageRange,omitempty"` + Read *bool `protobuf:"varint,2,opt,name=read" json:"read,omitempty"` unknownFields protoimpl.UnknownFields - - MessageRange *Armadillo_ApplicationData_MetadataSyncAction_SyncActionMessageRange `protobuf:"bytes,1,opt,name=messageRange" json:"messageRange,omitempty"` - Read *bool `protobuf:"varint,2,opt,name=read" json:"read,omitempty"` + sizeCache protoimpl.SizeCache } func (x *Armadillo_ApplicationData_MetadataSyncAction_SyncChatAction_ActionChatRead) Reset() { *x = Armadillo_ApplicationData_MetadataSyncAction_SyncChatAction_ActionChatRead{} - if protoimpl.UnsafeEnabled { - mi := &file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[17] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[20] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Armadillo_ApplicationData_MetadataSyncAction_SyncChatAction_ActionChatRead) String() string { @@ -1754,8 +2097,8 @@ func (x *Armadillo_ApplicationData_MetadataSyncAction_SyncChatAction_ActionChatR func (*Armadillo_ApplicationData_MetadataSyncAction_SyncChatAction_ActionChatRead) ProtoMessage() {} func (x *Armadillo_ApplicationData_MetadataSyncAction_SyncChatAction_ActionChatRead) ProtoReflect() protoreflect.Message { - mi := &file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[17] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[20] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1767,7 +2110,7 @@ func (x *Armadillo_ApplicationData_MetadataSyncAction_SyncChatAction_ActionChatR // Deprecated: Use Armadillo_ApplicationData_MetadataSyncAction_SyncChatAction_ActionChatRead.ProtoReflect.Descriptor instead. func (*Armadillo_ApplicationData_MetadataSyncAction_SyncChatAction_ActionChatRead) Descriptor() ([]byte, []int) { - return file_waArmadilloApplication_WAArmadilloApplication_proto_rawDescGZIP(), []int{0, 4, 1, 1, 0} + return file_waArmadilloApplication_WAArmadilloApplication_proto_rawDescGZIP(), []int{0, 4, 2, 3, 0} } func (x *Armadillo_ApplicationData_MetadataSyncAction_SyncChatAction_ActionChatRead) GetMessageRange() *Armadillo_ApplicationData_MetadataSyncAction_SyncActionMessageRange { @@ -1785,20 +2128,17 @@ func (x *Armadillo_ApplicationData_MetadataSyncAction_SyncChatAction_ActionChatR } type Armadillo_ApplicationData_MetadataSyncAction_SyncChatAction_ActionChatDelete struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + MessageRange *Armadillo_ApplicationData_MetadataSyncAction_SyncActionMessageRange `protobuf:"bytes,1,opt,name=messageRange" json:"messageRange,omitempty"` unknownFields protoimpl.UnknownFields - - MessageRange *Armadillo_ApplicationData_MetadataSyncAction_SyncActionMessageRange `protobuf:"bytes,1,opt,name=messageRange" json:"messageRange,omitempty"` + sizeCache protoimpl.SizeCache } func (x *Armadillo_ApplicationData_MetadataSyncAction_SyncChatAction_ActionChatDelete) Reset() { *x = Armadillo_ApplicationData_MetadataSyncAction_SyncChatAction_ActionChatDelete{} - if protoimpl.UnsafeEnabled { - mi := &file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[18] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[21] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Armadillo_ApplicationData_MetadataSyncAction_SyncChatAction_ActionChatDelete) String() string { @@ -1808,8 +2148,8 @@ func (x *Armadillo_ApplicationData_MetadataSyncAction_SyncChatAction_ActionChatD func (*Armadillo_ApplicationData_MetadataSyncAction_SyncChatAction_ActionChatDelete) ProtoMessage() {} func (x *Armadillo_ApplicationData_MetadataSyncAction_SyncChatAction_ActionChatDelete) ProtoReflect() protoreflect.Message { - mi := &file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[18] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[21] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1821,7 +2161,7 @@ func (x *Armadillo_ApplicationData_MetadataSyncAction_SyncChatAction_ActionChatD // Deprecated: Use Armadillo_ApplicationData_MetadataSyncAction_SyncChatAction_ActionChatDelete.ProtoReflect.Descriptor instead. func (*Armadillo_ApplicationData_MetadataSyncAction_SyncChatAction_ActionChatDelete) Descriptor() ([]byte, []int) { - return file_waArmadilloApplication_WAArmadilloApplication_proto_rawDescGZIP(), []int{0, 4, 1, 1, 1} + return file_waArmadilloApplication_WAArmadilloApplication_proto_rawDescGZIP(), []int{0, 4, 2, 3, 1} } func (x *Armadillo_ApplicationData_MetadataSyncAction_SyncChatAction_ActionChatDelete) GetMessageRange() *Armadillo_ApplicationData_MetadataSyncAction_SyncActionMessageRange { @@ -1832,21 +2172,18 @@ func (x *Armadillo_ApplicationData_MetadataSyncAction_SyncChatAction_ActionChatD } type Armadillo_ApplicationData_MetadataSyncAction_SyncChatAction_ActionChatArchive struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + MessageRange *Armadillo_ApplicationData_MetadataSyncAction_SyncActionMessageRange `protobuf:"bytes,1,opt,name=messageRange" json:"messageRange,omitempty"` + Archived *bool `protobuf:"varint,2,opt,name=archived" json:"archived,omitempty"` unknownFields protoimpl.UnknownFields - - MessageRange *Armadillo_ApplicationData_MetadataSyncAction_SyncActionMessageRange `protobuf:"bytes,1,opt,name=messageRange" json:"messageRange,omitempty"` - Archived *bool `protobuf:"varint,2,opt,name=archived" json:"archived,omitempty"` + sizeCache protoimpl.SizeCache } func (x *Armadillo_ApplicationData_MetadataSyncAction_SyncChatAction_ActionChatArchive) Reset() { *x = Armadillo_ApplicationData_MetadataSyncAction_SyncChatAction_ActionChatArchive{} - if protoimpl.UnsafeEnabled { - mi := &file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[19] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[22] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Armadillo_ApplicationData_MetadataSyncAction_SyncChatAction_ActionChatArchive) String() string { @@ -1857,8 +2194,8 @@ func (*Armadillo_ApplicationData_MetadataSyncAction_SyncChatAction_ActionChatArc } func (x *Armadillo_ApplicationData_MetadataSyncAction_SyncChatAction_ActionChatArchive) ProtoReflect() protoreflect.Message { - mi := &file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[19] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[22] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1870,7 +2207,7 @@ func (x *Armadillo_ApplicationData_MetadataSyncAction_SyncChatAction_ActionChatA // Deprecated: Use Armadillo_ApplicationData_MetadataSyncAction_SyncChatAction_ActionChatArchive.ProtoReflect.Descriptor instead. func (*Armadillo_ApplicationData_MetadataSyncAction_SyncChatAction_ActionChatArchive) Descriptor() ([]byte, []int) { - return file_waArmadilloApplication_WAArmadilloApplication_proto_rawDescGZIP(), []int{0, 4, 1, 1, 2} + return file_waArmadilloApplication_WAArmadilloApplication_proto_rawDescGZIP(), []int{0, 4, 2, 3, 2} } func (x *Armadillo_ApplicationData_MetadataSyncAction_SyncChatAction_ActionChatArchive) GetMessageRange() *Armadillo_ApplicationData_MetadataSyncAction_SyncActionMessageRange { @@ -1888,24 +2225,21 @@ func (x *Armadillo_ApplicationData_MetadataSyncAction_SyncChatAction_ActionChatA } type Armadillo_Content_PaymentsTransactionMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` TransactionID *uint64 `protobuf:"varint,1,opt,name=transactionID" json:"transactionID,omitempty"` Amount *string `protobuf:"bytes,2,opt,name=amount" json:"amount,omitempty"` Currency *string `protobuf:"bytes,3,opt,name=currency" json:"currency,omitempty"` PaymentStatus *Armadillo_Content_PaymentsTransactionMessage_PaymentStatus `protobuf:"varint,4,opt,name=paymentStatus,enum=WAArmadilloApplication.Armadillo_Content_PaymentsTransactionMessage_PaymentStatus" json:"paymentStatus,omitempty"` ExtendedContentMessage *waArmadilloXMA.ExtendedContentMessage `protobuf:"bytes,5,opt,name=extendedContentMessage" json:"extendedContentMessage,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *Armadillo_Content_PaymentsTransactionMessage) Reset() { *x = Armadillo_Content_PaymentsTransactionMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[20] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[23] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Armadillo_Content_PaymentsTransactionMessage) String() string { @@ -1915,8 +2249,8 @@ func (x *Armadillo_Content_PaymentsTransactionMessage) String() string { func (*Armadillo_Content_PaymentsTransactionMessage) ProtoMessage() {} func (x *Armadillo_Content_PaymentsTransactionMessage) ProtoReflect() protoreflect.Message { - mi := &file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[20] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[23] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1966,12 +2300,53 @@ func (x *Armadillo_Content_PaymentsTransactionMessage) GetExtendedContentMessage return nil } -type Armadillo_Content_NoteReplyMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache +type Armadillo_Content_NetworkVerificationMessage struct { + state protoimpl.MessageState `protogen:"open.v1"` + CodeText *string `protobuf:"bytes,1,opt,name=codeText" json:"codeText,omitempty"` unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *Armadillo_Content_NetworkVerificationMessage) Reset() { + *x = Armadillo_Content_NetworkVerificationMessage{} + mi := &file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[24] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *Armadillo_Content_NetworkVerificationMessage) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Armadillo_Content_NetworkVerificationMessage) ProtoMessage() {} + +func (x *Armadillo_Content_NetworkVerificationMessage) ProtoReflect() protoreflect.Message { + mi := &file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[24] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Armadillo_Content_NetworkVerificationMessage.ProtoReflect.Descriptor instead. +func (*Armadillo_Content_NetworkVerificationMessage) Descriptor() ([]byte, []int) { + return file_waArmadilloApplication_WAArmadilloApplication_proto_rawDescGZIP(), []int{0, 5, 1} +} + +func (x *Armadillo_Content_NetworkVerificationMessage) GetCodeText() string { + if x != nil && x.CodeText != nil { + return *x.CodeText + } + return "" +} - // Types that are assignable to NoteReplyContent: +type Armadillo_Content_NoteReplyMessage struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Types that are valid to be assigned to NoteReplyContent: // // *Armadillo_Content_NoteReplyMessage_TextContent // *Armadillo_Content_NoteReplyMessage_StickerContent @@ -1980,15 +2355,15 @@ type Armadillo_Content_NoteReplyMessage struct { NoteID *string `protobuf:"bytes,1,opt,name=noteID" json:"noteID,omitempty"` NoteText *waCommon.MessageText `protobuf:"bytes,2,opt,name=noteText" json:"noteText,omitempty"` NoteTimestampMS *int64 `protobuf:"varint,3,opt,name=noteTimestampMS" json:"noteTimestampMS,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *Armadillo_Content_NoteReplyMessage) Reset() { *x = Armadillo_Content_NoteReplyMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[21] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[25] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Armadillo_Content_NoteReplyMessage) String() string { @@ -1998,8 +2373,8 @@ func (x *Armadillo_Content_NoteReplyMessage) String() string { func (*Armadillo_Content_NoteReplyMessage) ProtoMessage() {} func (x *Armadillo_Content_NoteReplyMessage) ProtoReflect() protoreflect.Message { - mi := &file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[21] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[25] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2011,33 +2386,39 @@ func (x *Armadillo_Content_NoteReplyMessage) ProtoReflect() protoreflect.Message // Deprecated: Use Armadillo_Content_NoteReplyMessage.ProtoReflect.Descriptor instead. func (*Armadillo_Content_NoteReplyMessage) Descriptor() ([]byte, []int) { - return file_waArmadilloApplication_WAArmadilloApplication_proto_rawDescGZIP(), []int{0, 5, 1} + return file_waArmadilloApplication_WAArmadilloApplication_proto_rawDescGZIP(), []int{0, 5, 2} } -func (m *Armadillo_Content_NoteReplyMessage) GetNoteReplyContent() isArmadillo_Content_NoteReplyMessage_NoteReplyContent { - if m != nil { - return m.NoteReplyContent +func (x *Armadillo_Content_NoteReplyMessage) GetNoteReplyContent() isArmadillo_Content_NoteReplyMessage_NoteReplyContent { + if x != nil { + return x.NoteReplyContent } return nil } func (x *Armadillo_Content_NoteReplyMessage) GetTextContent() *waCommon.MessageText { - if x, ok := x.GetNoteReplyContent().(*Armadillo_Content_NoteReplyMessage_TextContent); ok { - return x.TextContent + if x != nil { + if x, ok := x.NoteReplyContent.(*Armadillo_Content_NoteReplyMessage_TextContent); ok { + return x.TextContent + } } return nil } func (x *Armadillo_Content_NoteReplyMessage) GetStickerContent() *waCommon.SubProtocol { - if x, ok := x.GetNoteReplyContent().(*Armadillo_Content_NoteReplyMessage_StickerContent); ok { - return x.StickerContent + if x != nil { + if x, ok := x.NoteReplyContent.(*Armadillo_Content_NoteReplyMessage_StickerContent); ok { + return x.StickerContent + } } return nil } func (x *Armadillo_Content_NoteReplyMessage) GetVideoContent() *waCommon.SubProtocol { - if x, ok := x.GetNoteReplyContent().(*Armadillo_Content_NoteReplyMessage_VideoContent); ok { - return x.VideoContent + if x != nil { + if x, ok := x.NoteReplyContent.(*Armadillo_Content_NoteReplyMessage_VideoContent); ok { + return x.VideoContent + } } return nil } @@ -2089,20 +2470,17 @@ func (*Armadillo_Content_NoteReplyMessage_VideoContent) isArmadillo_Content_Note } type Armadillo_Content_BumpExistingMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Key *waCommon.MessageKey `protobuf:"bytes,1,opt,name=key" json:"key,omitempty"` unknownFields protoimpl.UnknownFields - - Key *waCommon.MessageKey `protobuf:"bytes,1,opt,name=key" json:"key,omitempty"` + sizeCache protoimpl.SizeCache } func (x *Armadillo_Content_BumpExistingMessage) Reset() { *x = Armadillo_Content_BumpExistingMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[22] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[26] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Armadillo_Content_BumpExistingMessage) String() string { @@ -2112,8 +2490,8 @@ func (x *Armadillo_Content_BumpExistingMessage) String() string { func (*Armadillo_Content_BumpExistingMessage) ProtoMessage() {} func (x *Armadillo_Content_BumpExistingMessage) ProtoReflect() protoreflect.Message { - mi := &file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[22] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[26] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2125,7 +2503,7 @@ func (x *Armadillo_Content_BumpExistingMessage) ProtoReflect() protoreflect.Mess // Deprecated: Use Armadillo_Content_BumpExistingMessage.ProtoReflect.Descriptor instead. func (*Armadillo_Content_BumpExistingMessage) Descriptor() ([]byte, []int) { - return file_waArmadilloApplication_WAArmadilloApplication_proto_rawDescGZIP(), []int{0, 5, 2} + return file_waArmadilloApplication_WAArmadilloApplication_proto_rawDescGZIP(), []int{0, 5, 3} } func (x *Armadillo_Content_BumpExistingMessage) GetKey() *waCommon.MessageKey { @@ -2136,20 +2514,17 @@ func (x *Armadillo_Content_BumpExistingMessage) GetKey() *waCommon.MessageKey { } type Armadillo_Content_ImageGalleryMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Images []*waCommon.SubProtocol `protobuf:"bytes,1,rep,name=images" json:"images,omitempty"` unknownFields protoimpl.UnknownFields - - Images []*waCommon.SubProtocol `protobuf:"bytes,1,rep,name=images" json:"images,omitempty"` + sizeCache protoimpl.SizeCache } func (x *Armadillo_Content_ImageGalleryMessage) Reset() { *x = Armadillo_Content_ImageGalleryMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[23] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[27] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Armadillo_Content_ImageGalleryMessage) String() string { @@ -2159,8 +2534,8 @@ func (x *Armadillo_Content_ImageGalleryMessage) String() string { func (*Armadillo_Content_ImageGalleryMessage) ProtoMessage() {} func (x *Armadillo_Content_ImageGalleryMessage) ProtoReflect() protoreflect.Message { - mi := &file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[23] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[27] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2172,7 +2547,7 @@ func (x *Armadillo_Content_ImageGalleryMessage) ProtoReflect() protoreflect.Mess // Deprecated: Use Armadillo_Content_ImageGalleryMessage.ProtoReflect.Descriptor instead. func (*Armadillo_Content_ImageGalleryMessage) Descriptor() ([]byte, []int) { - return file_waArmadilloApplication_WAArmadilloApplication_proto_rawDescGZIP(), []int{0, 5, 3} + return file_waArmadilloApplication_WAArmadilloApplication_proto_rawDescGZIP(), []int{0, 5, 4} } func (x *Armadillo_Content_ImageGalleryMessage) GetImages() []*waCommon.SubProtocol { @@ -2183,20 +2558,17 @@ func (x *Armadillo_Content_ImageGalleryMessage) GetImages() []*waCommon.SubProto } type Armadillo_Content_ScreenshotAction struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` ScreenshotType *Armadillo_Content_ScreenshotAction_ScreenshotType `protobuf:"varint,1,opt,name=screenshotType,enum=WAArmadilloApplication.Armadillo_Content_ScreenshotAction_ScreenshotType" json:"screenshotType,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *Armadillo_Content_ScreenshotAction) Reset() { *x = Armadillo_Content_ScreenshotAction{} - if protoimpl.UnsafeEnabled { - mi := &file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[24] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[28] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Armadillo_Content_ScreenshotAction) String() string { @@ -2206,8 +2578,8 @@ func (x *Armadillo_Content_ScreenshotAction) String() string { func (*Armadillo_Content_ScreenshotAction) ProtoMessage() {} func (x *Armadillo_Content_ScreenshotAction) ProtoReflect() protoreflect.Message { - mi := &file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[24] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[28] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2219,7 +2591,7 @@ func (x *Armadillo_Content_ScreenshotAction) ProtoReflect() protoreflect.Message // Deprecated: Use Armadillo_Content_ScreenshotAction.ProtoReflect.Descriptor instead. func (*Armadillo_Content_ScreenshotAction) Descriptor() ([]byte, []int) { - return file_waArmadilloApplication_WAArmadilloApplication_proto_rawDescGZIP(), []int{0, 5, 4} + return file_waArmadilloApplication_WAArmadilloApplication_proto_rawDescGZIP(), []int{0, 5, 5} } func (x *Armadillo_Content_ScreenshotAction) GetScreenshotType() Armadillo_Content_ScreenshotAction_ScreenshotType { @@ -2230,24 +2602,21 @@ func (x *Armadillo_Content_ScreenshotAction) GetScreenshotType() Armadillo_Conte } type Armadillo_Content_ExtendedContentMessageWithSear struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - SearID *string `protobuf:"bytes,1,opt,name=searID" json:"searID,omitempty"` - Payload []byte `protobuf:"bytes,2,opt,name=payload" json:"payload,omitempty"` - NativeURL *string `protobuf:"bytes,3,opt,name=nativeURL" json:"nativeURL,omitempty"` - SearAssociatedMessage *waCommon.SubProtocol `protobuf:"bytes,4,opt,name=searAssociatedMessage" json:"searAssociatedMessage,omitempty"` - SearSentWithMessageID *string `protobuf:"bytes,5,opt,name=searSentWithMessageID" json:"searSentWithMessageID,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + SearID *string `protobuf:"bytes,1,opt,name=searID" json:"searID,omitempty"` + Payload []byte `protobuf:"bytes,2,opt,name=payload" json:"payload,omitempty"` + NativeURL *string `protobuf:"bytes,3,opt,name=nativeURL" json:"nativeURL,omitempty"` + SearAssociatedMessage *waCommon.SubProtocol `protobuf:"bytes,4,opt,name=searAssociatedMessage" json:"searAssociatedMessage,omitempty"` + SearSentWithMessageID *string `protobuf:"bytes,5,opt,name=searSentWithMessageID" json:"searSentWithMessageID,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *Armadillo_Content_ExtendedContentMessageWithSear) Reset() { *x = Armadillo_Content_ExtendedContentMessageWithSear{} - if protoimpl.UnsafeEnabled { - mi := &file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[25] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[29] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Armadillo_Content_ExtendedContentMessageWithSear) String() string { @@ -2257,8 +2626,8 @@ func (x *Armadillo_Content_ExtendedContentMessageWithSear) String() string { func (*Armadillo_Content_ExtendedContentMessageWithSear) ProtoMessage() {} func (x *Armadillo_Content_ExtendedContentMessageWithSear) ProtoReflect() protoreflect.Message { - mi := &file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[25] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[29] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2270,7 +2639,7 @@ func (x *Armadillo_Content_ExtendedContentMessageWithSear) ProtoReflect() protor // Deprecated: Use Armadillo_Content_ExtendedContentMessageWithSear.ProtoReflect.Descriptor instead. func (*Armadillo_Content_ExtendedContentMessageWithSear) Descriptor() ([]byte, []int) { - return file_waArmadilloApplication_WAArmadilloApplication_proto_rawDescGZIP(), []int{0, 5, 5} + return file_waArmadilloApplication_WAArmadilloApplication_proto_rawDescGZIP(), []int{0, 5, 6} } func (x *Armadillo_Content_ExtendedContentMessageWithSear) GetSearID() string { @@ -2309,22 +2678,19 @@ func (x *Armadillo_Content_ExtendedContentMessageWithSear) GetSearSentWithMessag } type Armadillo_Content_RavenActionNotifMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` Key *waCommon.MessageKey `protobuf:"bytes,1,opt,name=key" json:"key,omitempty"` ActionTimestamp *int64 `protobuf:"varint,2,opt,name=actionTimestamp" json:"actionTimestamp,omitempty"` ActionType *Armadillo_Content_RavenActionNotifMessage_ActionType `protobuf:"varint,3,opt,name=actionType,enum=WAArmadilloApplication.Armadillo_Content_RavenActionNotifMessage_ActionType" json:"actionType,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *Armadillo_Content_RavenActionNotifMessage) Reset() { *x = Armadillo_Content_RavenActionNotifMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[26] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[30] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Armadillo_Content_RavenActionNotifMessage) String() string { @@ -2334,8 +2700,8 @@ func (x *Armadillo_Content_RavenActionNotifMessage) String() string { func (*Armadillo_Content_RavenActionNotifMessage) ProtoMessage() {} func (x *Armadillo_Content_RavenActionNotifMessage) ProtoReflect() protoreflect.Message { - mi := &file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[26] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[30] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2347,7 +2713,7 @@ func (x *Armadillo_Content_RavenActionNotifMessage) ProtoReflect() protoreflect. // Deprecated: Use Armadillo_Content_RavenActionNotifMessage.ProtoReflect.Descriptor instead. func (*Armadillo_Content_RavenActionNotifMessage) Descriptor() ([]byte, []int) { - return file_waArmadilloApplication_WAArmadilloApplication_proto_rawDescGZIP(), []int{0, 5, 6} + return file_waArmadilloApplication_WAArmadilloApplication_proto_rawDescGZIP(), []int{0, 5, 7} } func (x *Armadillo_Content_RavenActionNotifMessage) GetKey() *waCommon.MessageKey { @@ -2372,25 +2738,22 @@ func (x *Armadillo_Content_RavenActionNotifMessage) GetActionType() Armadillo_Co } type Armadillo_Content_RavenMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Types that are assignable to MediaContent: + state protoimpl.MessageState `protogen:"open.v1"` + // Types that are valid to be assigned to MediaContent: // // *Armadillo_Content_RavenMessage_ImageMessage // *Armadillo_Content_RavenMessage_VideoMessage MediaContent isArmadillo_Content_RavenMessage_MediaContent `protobuf_oneof:"mediaContent"` EphemeralType *Armadillo_Content_RavenMessage_EphemeralType `protobuf:"varint,1,opt,name=ephemeralType,enum=WAArmadilloApplication.Armadillo_Content_RavenMessage_EphemeralType" json:"ephemeralType,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *Armadillo_Content_RavenMessage) Reset() { *x = Armadillo_Content_RavenMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[27] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[31] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Armadillo_Content_RavenMessage) String() string { @@ -2400,8 +2763,8 @@ func (x *Armadillo_Content_RavenMessage) String() string { func (*Armadillo_Content_RavenMessage) ProtoMessage() {} func (x *Armadillo_Content_RavenMessage) ProtoReflect() protoreflect.Message { - mi := &file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[27] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[31] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2413,26 +2776,30 @@ func (x *Armadillo_Content_RavenMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use Armadillo_Content_RavenMessage.ProtoReflect.Descriptor instead. func (*Armadillo_Content_RavenMessage) Descriptor() ([]byte, []int) { - return file_waArmadilloApplication_WAArmadilloApplication_proto_rawDescGZIP(), []int{0, 5, 7} + return file_waArmadilloApplication_WAArmadilloApplication_proto_rawDescGZIP(), []int{0, 5, 8} } -func (m *Armadillo_Content_RavenMessage) GetMediaContent() isArmadillo_Content_RavenMessage_MediaContent { - if m != nil { - return m.MediaContent +func (x *Armadillo_Content_RavenMessage) GetMediaContent() isArmadillo_Content_RavenMessage_MediaContent { + if x != nil { + return x.MediaContent } return nil } func (x *Armadillo_Content_RavenMessage) GetImageMessage() *waCommon.SubProtocol { - if x, ok := x.GetMediaContent().(*Armadillo_Content_RavenMessage_ImageMessage); ok { - return x.ImageMessage + if x != nil { + if x, ok := x.MediaContent.(*Armadillo_Content_RavenMessage_ImageMessage); ok { + return x.ImageMessage + } } return nil } func (x *Armadillo_Content_RavenMessage) GetVideoMessage() *waCommon.SubProtocol { - if x, ok := x.GetMediaContent().(*Armadillo_Content_RavenMessage_VideoMessage); ok { - return x.VideoMessage + if x != nil { + if x, ok := x.MediaContent.(*Armadillo_Content_RavenMessage_VideoMessage); ok { + return x.VideoMessage + } } return nil } @@ -2461,20 +2828,17 @@ func (*Armadillo_Content_RavenMessage_ImageMessage) isArmadillo_Content_RavenMes func (*Armadillo_Content_RavenMessage_VideoMessage) isArmadillo_Content_RavenMessage_MediaContent() {} type Armadillo_Content_CommonSticker struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + StickerType *Armadillo_Content_CommonSticker_StickerType `protobuf:"varint,1,opt,name=stickerType,enum=WAArmadilloApplication.Armadillo_Content_CommonSticker_StickerType" json:"stickerType,omitempty"` unknownFields protoimpl.UnknownFields - - StickerType *Armadillo_Content_CommonSticker_StickerType `protobuf:"varint,1,opt,name=stickerType,enum=WAArmadilloApplication.Armadillo_Content_CommonSticker_StickerType" json:"stickerType,omitempty"` + sizeCache protoimpl.SizeCache } func (x *Armadillo_Content_CommonSticker) Reset() { *x = Armadillo_Content_CommonSticker{} - if protoimpl.UnsafeEnabled { - mi := &file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[28] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[32] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Armadillo_Content_CommonSticker) String() string { @@ -2484,8 +2848,8 @@ func (x *Armadillo_Content_CommonSticker) String() string { func (*Armadillo_Content_CommonSticker) ProtoMessage() {} func (x *Armadillo_Content_CommonSticker) ProtoReflect() protoreflect.Message { - mi := &file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[28] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[32] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2497,7 +2861,7 @@ func (x *Armadillo_Content_CommonSticker) ProtoReflect() protoreflect.Message { // Deprecated: Use Armadillo_Content_CommonSticker.ProtoReflect.Descriptor instead. func (*Armadillo_Content_CommonSticker) Descriptor() ([]byte, []int) { - return file_waArmadilloApplication_WAArmadilloApplication_proto_rawDescGZIP(), []int{0, 5, 8} + return file_waArmadilloApplication_WAArmadilloApplication_proto_rawDescGZIP(), []int{0, 5, 9} } func (x *Armadillo_Content_CommonSticker) GetStickerType() Armadillo_Content_CommonSticker_StickerType { @@ -2509,123 +2873,339 @@ func (x *Armadillo_Content_CommonSticker) GetStickerType() Armadillo_Content_Com var File_waArmadilloApplication_WAArmadilloApplication_proto protoreflect.FileDescriptor -//go:embed WAArmadilloApplication.pb.raw -var file_waArmadilloApplication_WAArmadilloApplication_proto_rawDesc []byte +const file_waArmadilloApplication_WAArmadilloApplication_proto_rawDesc = "" + + "\n" + + "3waArmadilloApplication/WAArmadilloApplication.proto\x12\x16WAArmadilloApplication\x1a#waArmadilloXMA/WAArmadilloXMA.proto\x1a\x17waCommon/WACommon.proto\"\xbbF\n" + + "\tArmadillo\x12C\n" + + "\apayload\x18\x01 \x01(\v2).WAArmadilloApplication.Armadillo.PayloadR\apayload\x12F\n" + + "\bmetadata\x18\x02 \x01(\v2*.WAArmadilloApplication.Armadillo.MetadataR\bmetadata\x1a\n" + + "\n" + + "\bMetadata\x1a\xd8\x02\n" + + "\aPayload\x12E\n" + + "\acontent\x18\x01 \x01(\v2).WAArmadilloApplication.Armadillo.ContentH\x00R\acontent\x12]\n" + + "\x0fapplicationData\x18\x02 \x01(\v21.WAArmadilloApplication.Armadillo.ApplicationDataH\x00R\x0fapplicationData\x12B\n" + + "\x06signal\x18\x03 \x01(\v2(.WAArmadilloApplication.Armadillo.SignalH\x00R\x06signal\x12X\n" + + "\vsubProtocol\x18\x04 \x01(\v24.WAArmadilloApplication.Armadillo.SubProtocolPayloadH\x00R\vsubProtocolB\t\n" + + "\apayload\x1aU\n" + + "\x12SubProtocolPayload\x12?\n" + + "\vfutureProof\x18\x01 \x01(\x0e2\x1d.WACommon.FutureProofBehaviorR\vfutureProof\x1a\xc2\x05\n" + + "\x06Signal\x12|\n" + + "\x17encryptedBackupsSecrets\x18\x01 \x01(\v2@.WAArmadilloApplication.Armadillo.Signal.EncryptedBackupsSecretsH\x00R\x17encryptedBackupsSecrets\x1a\xaf\x04\n" + + "\x17EncryptedBackupsSecrets\x12\x1a\n" + + "\bbackupID\x18\x01 \x01(\x04R\bbackupID\x12\"\n" + + "\fserverDataID\x18\x02 \x01(\x04R\fserverDataID\x12\\\n" + + "\x05epoch\x18\x03 \x03(\v2F.WAArmadilloApplication.Armadillo.Signal.EncryptedBackupsSecrets.EpochR\x05epoch\x120\n" + + "\x13tempOcmfClientState\x18\x04 \x01(\fR\x13tempOcmfClientState\x12&\n" + + "\x0emailboxRootKey\x18\x05 \x01(\fR\x0emailboxRootKey\x12:\n" + + "\x18obliviousValidationToken\x18\x06 \x01(\fR\x18obliviousValidationToken\x1a\xdf\x01\n" + + "\x05Epoch\x12\x0e\n" + + "\x02ID\x18\x01 \x01(\x04R\x02ID\x12\x16\n" + + "\x06anonID\x18\x02 \x01(\fR\x06anonID\x12\x18\n" + + "\arootKey\x18\x03 \x01(\fR\arootKey\x12j\n" + + "\x06status\x18\x04 \x01(\x0e2R.WAArmadilloApplication.Armadillo.Signal.EncryptedBackupsSecrets.Epoch.EpochStatusR\x06status\"(\n" + + "\vEpochStatus\x12\v\n" + + "\aES_OPEN\x10\x01\x12\f\n" + + "\bES_CLOSE\x10\x02B\b\n" + + "\x06signal\x1a\xf3\x1b\n" + + "\x0fApplicationData\x12p\n" + + "\fmetadataSync\x18\x01 \x01(\v2J.WAArmadilloApplication.Armadillo.ApplicationData.MetadataSyncNotificationH\x00R\fmetadataSync\x12n\n" + + "\raiBotResponse\x18\x02 \x01(\v2F.WAArmadilloApplication.Armadillo.ApplicationData.AIBotResponseMessageH\x00R\raiBotResponse\x12\x97\x01\n" + + "\x1dmessageHistoryDocumentMessage\x18\x03 \x01(\v2O.WAArmadilloApplication.Armadillo.ApplicationData.MessageHistoryDocumentMessageH\x00R\x1dmessageHistoryDocumentMessage\x1aR\n" + + "\x1dMessageHistoryDocumentMessage\x121\n" + + "\bdocument\x18\x01 \x01(\v2\x15.WACommon.SubProtocolR\bdocument\x1a\x86\x01\n" + + "\x14AIBotResponseMessage\x12 \n" + + "\vsummonToken\x18\x01 \x01(\tR\vsummonToken\x12 \n" + + "\vmessageText\x18\x02 \x01(\tR\vmessageText\x12*\n" + + "\x10serializedExtras\x18\x03 \x01(\tR\x10serializedExtras\x1a\xf7\x15\n" + + "\x12MetadataSyncAction\x12u\n" + + "\n" + + "chatAction\x18e \x01(\v2S.WAArmadilloApplication.Armadillo.ApplicationData.MetadataSyncAction.SyncChatActionH\x00R\n" + + "chatAction\x12~\n" + + "\rmessageAction\x18f \x01(\v2V.WAArmadilloApplication.Armadillo.ApplicationData.MetadataSyncAction.SyncMessageActionH\x00R\rmessageAction\x12~\n" + + "\rspectraAction\x18g \x01(\v2V.WAArmadilloApplication.Armadillo.ApplicationData.MetadataSyncAction.SyncSpectraActionH\x00R\rspectraAction\x12\xab\x01\n" + + "\x1cattachmentInterventionAction\x18h \x01(\v2e.WAArmadilloApplication.Armadillo.ApplicationData.MetadataSyncAction.SyncAttachmentInterventionActionH\x00R\x1cattachmentInterventionAction\x12(\n" + + "\x0factionTimestamp\x18\x01 \x01(\x03R\x0factionTimestamp\x1a\xb6\x02\n" + + " SyncAttachmentInterventionAction\x124\n" + + "\n" + + "messageKey\x18\x01 \x01(\v2\x14.WACommon.MessageKeyR\n" + + "messageKey\x12\xa2\x01\n" + + "\x10interventionType\x18\x02 \x01(\x0e2v.WAArmadilloApplication.Armadillo.ApplicationData.MetadataSyncAction.SyncAttachmentInterventionAction.InterventionTypeR\x10interventionType\"7\n" + + "\x10InterventionType\x12\v\n" + + "\aUNKNOWN\x10\x00\x12\b\n" + + "\x04NUDE\x10\x01\x12\f\n" + + "\bNOT_NUDE\x10\x02\x1a\xba\x02\n" + + "\x11SyncSpectraAction\x12&\n" + + "\x03key\x18\x01 \x01(\v2\x14.WACommon.MessageKeyR\x03key\x12\x88\x01\n" + + "\n" + + "actionType\x18\x02 \x01(\x0e2h.WAArmadilloApplication.Armadillo.ApplicationData.MetadataSyncAction.SyncSpectraAction.SpectraActionTypeR\n" + + "actionType\x12*\n" + + "\x10takedownActionID\x18\x03 \x01(\x03R\x10takedownActionID\x12\x16\n" + + "\x06config\x18\x04 \x01(\tR\x06config\".\n" + + "\x11SpectraActionType\x12\f\n" + + "\bTAKEDOWN\x10\x00\x12\v\n" + + "\aRESTORE\x10\x01\x1a\xf1\x01\n" + + "\x11SyncMessageAction\x12\x92\x01\n" + + "\rmessageDelete\x18e \x01(\v2j.WAArmadilloApplication.Armadillo.ApplicationData.MetadataSyncAction.SyncMessageAction.ActionMessageDeleteH\x00R\rmessageDelete\x12&\n" + + "\x03key\x18\x01 \x01(\v2\x14.WACommon.MessageKeyR\x03key\x1a\x15\n" + + "\x13ActionMessageDeleteB\b\n" + + "\x06action\x1a\xbb\a\n" + + "\x0eSyncChatAction\x12\x89\x01\n" + + "\vchatArchive\x18e \x01(\v2e.WAArmadilloApplication.Armadillo.ApplicationData.MetadataSyncAction.SyncChatAction.ActionChatArchiveH\x00R\vchatArchive\x12\x86\x01\n" + + "\n" + + "chatDelete\x18f \x01(\v2d.WAArmadilloApplication.Armadillo.ApplicationData.MetadataSyncAction.SyncChatAction.ActionChatDeleteH\x00R\n" + + "chatDelete\x12\x80\x01\n" + + "\bchatRead\x18g \x01(\v2b.WAArmadilloApplication.Armadillo.ApplicationData.MetadataSyncAction.SyncChatAction.ActionChatReadH\x00R\bchatRead\x12\x16\n" + + "\x06chatID\x18\x01 \x01(\tR\x06chatID\x1a\xa5\x01\n" + + "\x0eActionChatRead\x12\x7f\n" + + "\fmessageRange\x18\x01 \x01(\v2[.WAArmadilloApplication.Armadillo.ApplicationData.MetadataSyncAction.SyncActionMessageRangeR\fmessageRange\x12\x12\n" + + "\x04read\x18\x02 \x01(\bR\x04read\x1a\x93\x01\n" + + "\x10ActionChatDelete\x12\x7f\n" + + "\fmessageRange\x18\x01 \x01(\v2[.WAArmadilloApplication.Armadillo.ApplicationData.MetadataSyncAction.SyncActionMessageRangeR\fmessageRange\x1a\xb0\x01\n" + + "\x11ActionChatArchive\x12\x7f\n" + + "\fmessageRange\x18\x01 \x01(\v2[.WAArmadilloApplication.Armadillo.ApplicationData.MetadataSyncAction.SyncActionMessageRangeR\fmessageRange\x12\x1a\n" + + "\barchived\x18\x02 \x01(\bR\barchivedB\b\n" + + "\x06action\x1aY\n" + + "\x11SyncActionMessage\x12&\n" + + "\x03key\x18\x01 \x01(\v2\x14.WACommon.MessageKeyR\x03key\x12\x1c\n" + + "\ttimestamp\x18\x02 \x01(\x03R\ttimestamp\x1a\x80\x02\n" + + "\x16SyncActionMessageRange\x122\n" + + "\x14lastMessageTimestamp\x18\x01 \x01(\x03R\x14lastMessageTimestamp\x12>\n" + + "\x1alastSystemMessageTimestamp\x18\x02 \x01(\x03R\x1alastSystemMessageTimestamp\x12r\n" + + "\bmessages\x18\x03 \x03(\v2V.WAArmadilloApplication.Armadillo.ApplicationData.MetadataSyncAction.SyncActionMessageR\bmessagesB\f\n" + + "\n" + + "actionType\x1az\n" + + "\x18MetadataSyncNotification\x12^\n" + + "\aactions\x18\x02 \x03(\v2D.WAArmadilloApplication.Armadillo.ApplicationData.MetadataSyncActionR\aactionsB\x11\n" + + "\x0fapplicationData\x1a\xa7 \n" + + "\aContent\x12_\n" + + "\rcommonSticker\x18\x01 \x01(\v27.WAArmadilloApplication.Armadillo.Content.CommonStickerH\x00R\rcommonSticker\x12h\n" + + "\x10screenshotAction\x18\x03 \x01(\v2:.WAArmadilloApplication.Armadillo.Content.ScreenshotActionH\x00R\x10screenshotAction\x12`\n" + + "\x16extendedContentMessage\x18\x04 \x01(\v2&.WAArmadilloXMA.ExtendedContentMessageH\x00R\x16extendedContentMessage\x12\\\n" + + "\fravenMessage\x18\x05 \x01(\v26.WAArmadilloApplication.Armadillo.Content.RavenMessageH\x00R\fravenMessage\x12}\n" + + "\x17ravenActionNotifMessage\x18\x06 \x01(\v2A.WAArmadilloApplication.Armadillo.Content.RavenActionNotifMessageH\x00R\x17ravenActionNotifMessage\x12\x92\x01\n" + + "\x1eextendedMessageContentWithSear\x18\a \x01(\v2H.WAArmadilloApplication.Armadillo.Content.ExtendedContentMessageWithSearH\x00R\x1eextendedMessageContentWithSear\x12q\n" + + "\x13imageGalleryMessage\x18\b \x01(\v2=.WAArmadilloApplication.Armadillo.Content.ImageGalleryMessageH\x00R\x13imageGalleryMessage\x12\x86\x01\n" + + "\x1apaymentsTransactionMessage\x18\n" + + " \x01(\v2D.WAArmadilloApplication.Armadillo.Content.PaymentsTransactionMessageH\x00R\x1apaymentsTransactionMessage\x12q\n" + + "\x13bumpExistingMessage\x18\v \x01(\v2=.WAArmadilloApplication.Armadillo.Content.BumpExistingMessageH\x00R\x13bumpExistingMessage\x12h\n" + + "\x10noteReplyMessage\x18\r \x01(\v2:.WAArmadilloApplication.Armadillo.Content.NoteReplyMessageH\x00R\x10noteReplyMessage\x12d\n" + + "\x10ravenMessageMsgr\x18\x0e \x01(\v26.WAArmadilloApplication.Armadillo.Content.RavenMessageH\x00R\x10ravenMessageMsgr\x12\x86\x01\n" + + "\x1anetworkVerificationMessage\x18\x0f \x01(\v2D.WAArmadilloApplication.Armadillo.Content.NetworkVerificationMessageH\x00R\x1anetworkVerificationMessage\x1a\xba\a\n" + + "\x1aPaymentsTransactionMessage\x12$\n" + + "\rtransactionID\x18\x01 \x01(\x04R\rtransactionID\x12\x16\n" + + "\x06amount\x18\x02 \x01(\tR\x06amount\x12\x1a\n" + + "\bcurrency\x18\x03 \x01(\tR\bcurrency\x12x\n" + + "\rpaymentStatus\x18\x04 \x01(\x0e2R.WAArmadilloApplication.Armadillo.Content.PaymentsTransactionMessage.PaymentStatusR\rpaymentStatus\x12^\n" + + "\x16extendedContentMessage\x18\x05 \x01(\v2&.WAArmadilloXMA.ExtendedContentMessageR\x16extendedContentMessage\"\xe7\x04\n" + + "\rPaymentStatus\x12\x13\n" + + "\x0fPAYMENT_UNKNOWN\x10\x00\x12\x12\n" + + "\x0eREQUEST_INITED\x10\x04\x12\x14\n" + + "\x10REQUEST_DECLINED\x10\x05\x12\x1b\n" + + "\x17REQUEST_TRANSFER_INITED\x10\x06\x12\x1e\n" + + "\x1aREQUEST_TRANSFER_COMPLETED\x10\a\x12\x1b\n" + + "\x17REQUEST_TRANSFER_FAILED\x10\b\x12\x14\n" + + "\x10REQUEST_CANCELED\x10\t\x12\x13\n" + + "\x0fREQUEST_EXPIRED\x10\n" + + "\x12\x13\n" + + "\x0fTRANSFER_INITED\x10\v\x12\x14\n" + + "\x10TRANSFER_PENDING\x10\f\x12+\n" + + "'TRANSFER_PENDING_RECIPIENT_VERIFICATION\x10\r\x12\x15\n" + + "\x11TRANSFER_CANCELED\x10\x0e\x12\x16\n" + + "\x12TRANSFER_COMPLETED\x10\x0f\x12;\n" + + "7TRANSFER_NO_RECEIVER_CREDENTIAL_NO_RTS_PENDING_CANCELED\x10\x10\x128\n" + + "4TRANSFER_NO_RECEIVER_CREDENTIAL_NO_RTS_PENDING_OTHER\x10\x11\x12\x15\n" + + "\x11TRANSFER_REFUNDED\x10\x12\x12\x1b\n" + + "\x17TRANSFER_PARTIAL_REFUND\x10\x13\x12\x19\n" + + "\x15TRANSFER_CHARGED_BACK\x10\x14\x12\x14\n" + + "\x10TRANSFER_EXPIRED\x10\x15\x12\x15\n" + + "\x11TRANSFER_DECLINED\x10\x16\x12\x18\n" + + "\x14TRANSFER_UNAVAILABLE\x10\x17\x1a8\n" + + "\x1aNetworkVerificationMessage\x12\x1a\n" + + "\bcodeText\x18\x01 \x01(\tR\bcodeText\x1a\xd4\x02\n" + + "\x10NoteReplyMessage\x129\n" + + "\vtextContent\x18\x04 \x01(\v2\x15.WACommon.MessageTextH\x00R\vtextContent\x12?\n" + + "\x0estickerContent\x18\x05 \x01(\v2\x15.WACommon.SubProtocolH\x00R\x0estickerContent\x12;\n" + + "\fvideoContent\x18\x06 \x01(\v2\x15.WACommon.SubProtocolH\x00R\fvideoContent\x12\x16\n" + + "\x06noteID\x18\x01 \x01(\tR\x06noteID\x121\n" + + "\bnoteText\x18\x02 \x01(\v2\x15.WACommon.MessageTextR\bnoteText\x12(\n" + + "\x0fnoteTimestampMS\x18\x03 \x01(\x03R\x0fnoteTimestampMSB\x12\n" + + "\x10noteReplyContent\x1a=\n" + + "\x13BumpExistingMessage\x12&\n" + + "\x03key\x18\x01 \x01(\v2\x14.WACommon.MessageKeyR\x03key\x1aD\n" + + "\x13ImageGalleryMessage\x12-\n" + + "\x06images\x18\x01 \x03(\v2\x15.WACommon.SubProtocolR\x06images\x1a\xc3\x01\n" + + "\x10ScreenshotAction\x12q\n" + + "\x0escreenshotType\x18\x01 \x01(\x0e2I.WAArmadilloApplication.Armadillo.Content.ScreenshotAction.ScreenshotTypeR\x0escreenshotType\"<\n" + + "\x0eScreenshotType\x12\x14\n" + + "\x10SCREENSHOT_IMAGE\x10\x01\x12\x14\n" + + "\x10SCREEN_RECORDING\x10\x02\x1a\xf3\x01\n" + + "\x1eExtendedContentMessageWithSear\x12\x16\n" + + "\x06searID\x18\x01 \x01(\tR\x06searID\x12\x18\n" + + "\apayload\x18\x02 \x01(\fR\apayload\x12\x1c\n" + + "\tnativeURL\x18\x03 \x01(\tR\tnativeURL\x12K\n" + + "\x15searAssociatedMessage\x18\x04 \x01(\v2\x15.WACommon.SubProtocolR\x15searAssociatedMessage\x124\n" + + "\x15searSentWithMessageID\x18\x05 \x01(\tR\x15searSentWithMessageID\x1a\x96\x02\n" + + "\x17RavenActionNotifMessage\x12&\n" + + "\x03key\x18\x01 \x01(\v2\x14.WACommon.MessageKeyR\x03key\x12(\n" + + "\x0factionTimestamp\x18\x02 \x01(\x03R\x0factionTimestamp\x12l\n" + + "\n" + + "actionType\x18\x03 \x01(\x0e2L.WAArmadilloApplication.Armadillo.Content.RavenActionNotifMessage.ActionTypeR\n" + + "actionType\";\n" + + "\n" + + "ActionType\x12\n" + + "\n" + + "\x06PLAYED\x10\x00\x12\x0e\n" + + "\n" + + "SCREENSHOT\x10\x01\x12\x11\n" + + "\rFORCE_DISABLE\x10\x02\x1a\xc8\x02\n" + + "\fRavenMessage\x12;\n" + + "\fimageMessage\x18\x02 \x01(\v2\x15.WACommon.SubProtocolH\x00R\fimageMessage\x12;\n" + + "\fvideoMessage\x18\x03 \x01(\v2\x15.WACommon.SubProtocolH\x00R\fvideoMessage\x12j\n" + + "\rephemeralType\x18\x01 \x01(\x0e2D.WAArmadilloApplication.Armadillo.Content.RavenMessage.EphemeralTypeR\rephemeralType\"B\n" + + "\rEphemeralType\x12\r\n" + + "\tVIEW_ONCE\x10\x00\x12\x10\n" + + "\fALLOW_REPLAY\x10\x01\x12\x10\n" + + "\fKEEP_IN_CHAT\x10\x02B\x0e\n" + + "\fmediaContent\x1a\xb6\x01\n" + + "\rCommonSticker\x12e\n" + + "\vstickerType\x18\x01 \x01(\x0e2C.WAArmadilloApplication.Armadillo.Content.CommonSticker.StickerTypeR\vstickerType\">\n" + + "\vStickerType\x12\x0e\n" + + "\n" + + "SMALL_LIKE\x10\x01\x12\x0f\n" + + "\vMEDIUM_LIKE\x10\x02\x12\x0e\n" + + "\n" + + "LARGE_LIKE\x10\x03B\t\n" + + "\acontentB2Z0go.mau.fi/whatsmeow/proto/waArmadilloApplication" var ( file_waArmadilloApplication_WAArmadilloApplication_proto_rawDescOnce sync.Once - file_waArmadilloApplication_WAArmadilloApplication_proto_rawDescData = file_waArmadilloApplication_WAArmadilloApplication_proto_rawDesc + file_waArmadilloApplication_WAArmadilloApplication_proto_rawDescData []byte ) func file_waArmadilloApplication_WAArmadilloApplication_proto_rawDescGZIP() []byte { file_waArmadilloApplication_WAArmadilloApplication_proto_rawDescOnce.Do(func() { - file_waArmadilloApplication_WAArmadilloApplication_proto_rawDescData = protoimpl.X.CompressGZIP(file_waArmadilloApplication_WAArmadilloApplication_proto_rawDescData) + file_waArmadilloApplication_WAArmadilloApplication_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_waArmadilloApplication_WAArmadilloApplication_proto_rawDesc), len(file_waArmadilloApplication_WAArmadilloApplication_proto_rawDesc))) }) return file_waArmadilloApplication_WAArmadilloApplication_proto_rawDescData } -var file_waArmadilloApplication_WAArmadilloApplication_proto_enumTypes = make([]protoimpl.EnumInfo, 6) -var file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes = make([]protoimpl.MessageInfo, 29) +var file_waArmadilloApplication_WAArmadilloApplication_proto_enumTypes = make([]protoimpl.EnumInfo, 8) +var file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes = make([]protoimpl.MessageInfo, 33) var file_waArmadilloApplication_WAArmadilloApplication_proto_goTypes = []any{ - (Armadillo_Signal_EncryptedBackupsSecrets_Epoch_EpochStatus)(0), // 0: WAArmadilloApplication.Armadillo.Signal.EncryptedBackupsSecrets.Epoch.EpochStatus - (Armadillo_Content_PaymentsTransactionMessage_PaymentStatus)(0), // 1: WAArmadilloApplication.Armadillo.Content.PaymentsTransactionMessage.PaymentStatus - (Armadillo_Content_ScreenshotAction_ScreenshotType)(0), // 2: WAArmadilloApplication.Armadillo.Content.ScreenshotAction.ScreenshotType - (Armadillo_Content_RavenActionNotifMessage_ActionType)(0), // 3: WAArmadilloApplication.Armadillo.Content.RavenActionNotifMessage.ActionType - (Armadillo_Content_RavenMessage_EphemeralType)(0), // 4: WAArmadilloApplication.Armadillo.Content.RavenMessage.EphemeralType - (Armadillo_Content_CommonSticker_StickerType)(0), // 5: WAArmadilloApplication.Armadillo.Content.CommonSticker.StickerType - (*Armadillo)(nil), // 6: WAArmadilloApplication.Armadillo - (*Armadillo_Metadata)(nil), // 7: WAArmadilloApplication.Armadillo.Metadata - (*Armadillo_Payload)(nil), // 8: WAArmadilloApplication.Armadillo.Payload - (*Armadillo_SubProtocolPayload)(nil), // 9: WAArmadilloApplication.Armadillo.SubProtocolPayload - (*Armadillo_Signal)(nil), // 10: WAArmadilloApplication.Armadillo.Signal - (*Armadillo_ApplicationData)(nil), // 11: WAArmadilloApplication.Armadillo.ApplicationData - (*Armadillo_Content)(nil), // 12: WAArmadilloApplication.Armadillo.Content - (*Armadillo_Signal_EncryptedBackupsSecrets)(nil), // 13: WAArmadilloApplication.Armadillo.Signal.EncryptedBackupsSecrets - (*Armadillo_Signal_EncryptedBackupsSecrets_Epoch)(nil), // 14: WAArmadilloApplication.Armadillo.Signal.EncryptedBackupsSecrets.Epoch - (*Armadillo_ApplicationData_AIBotResponseMessage)(nil), // 15: WAArmadilloApplication.Armadillo.ApplicationData.AIBotResponseMessage - (*Armadillo_ApplicationData_MetadataSyncAction)(nil), // 16: WAArmadilloApplication.Armadillo.ApplicationData.MetadataSyncAction - (*Armadillo_ApplicationData_MetadataSyncNotification)(nil), // 17: WAArmadilloApplication.Armadillo.ApplicationData.MetadataSyncNotification - (*Armadillo_ApplicationData_MetadataSyncAction_SyncMessageAction)(nil), // 18: WAArmadilloApplication.Armadillo.ApplicationData.MetadataSyncAction.SyncMessageAction - (*Armadillo_ApplicationData_MetadataSyncAction_SyncChatAction)(nil), // 19: WAArmadilloApplication.Armadillo.ApplicationData.MetadataSyncAction.SyncChatAction - (*Armadillo_ApplicationData_MetadataSyncAction_SyncActionMessage)(nil), // 20: WAArmadilloApplication.Armadillo.ApplicationData.MetadataSyncAction.SyncActionMessage - (*Armadillo_ApplicationData_MetadataSyncAction_SyncActionMessageRange)(nil), // 21: WAArmadilloApplication.Armadillo.ApplicationData.MetadataSyncAction.SyncActionMessageRange - (*Armadillo_ApplicationData_MetadataSyncAction_SyncMessageAction_ActionMessageDelete)(nil), // 22: WAArmadilloApplication.Armadillo.ApplicationData.MetadataSyncAction.SyncMessageAction.ActionMessageDelete - (*Armadillo_ApplicationData_MetadataSyncAction_SyncChatAction_ActionChatRead)(nil), // 23: WAArmadilloApplication.Armadillo.ApplicationData.MetadataSyncAction.SyncChatAction.ActionChatRead - (*Armadillo_ApplicationData_MetadataSyncAction_SyncChatAction_ActionChatDelete)(nil), // 24: WAArmadilloApplication.Armadillo.ApplicationData.MetadataSyncAction.SyncChatAction.ActionChatDelete - (*Armadillo_ApplicationData_MetadataSyncAction_SyncChatAction_ActionChatArchive)(nil), // 25: WAArmadilloApplication.Armadillo.ApplicationData.MetadataSyncAction.SyncChatAction.ActionChatArchive - (*Armadillo_Content_PaymentsTransactionMessage)(nil), // 26: WAArmadilloApplication.Armadillo.Content.PaymentsTransactionMessage - (*Armadillo_Content_NoteReplyMessage)(nil), // 27: WAArmadilloApplication.Armadillo.Content.NoteReplyMessage - (*Armadillo_Content_BumpExistingMessage)(nil), // 28: WAArmadilloApplication.Armadillo.Content.BumpExistingMessage - (*Armadillo_Content_ImageGalleryMessage)(nil), // 29: WAArmadilloApplication.Armadillo.Content.ImageGalleryMessage - (*Armadillo_Content_ScreenshotAction)(nil), // 30: WAArmadilloApplication.Armadillo.Content.ScreenshotAction - (*Armadillo_Content_ExtendedContentMessageWithSear)(nil), // 31: WAArmadilloApplication.Armadillo.Content.ExtendedContentMessageWithSear - (*Armadillo_Content_RavenActionNotifMessage)(nil), // 32: WAArmadilloApplication.Armadillo.Content.RavenActionNotifMessage - (*Armadillo_Content_RavenMessage)(nil), // 33: WAArmadilloApplication.Armadillo.Content.RavenMessage - (*Armadillo_Content_CommonSticker)(nil), // 34: WAArmadilloApplication.Armadillo.Content.CommonSticker - (waCommon.FutureProofBehavior)(0), // 35: WACommon.FutureProofBehavior - (*waArmadilloXMA.ExtendedContentMessage)(nil), // 36: WAArmadilloXMA.ExtendedContentMessage - (*waCommon.MessageKey)(nil), // 37: WACommon.MessageKey - (*waCommon.MessageText)(nil), // 38: WACommon.MessageText - (*waCommon.SubProtocol)(nil), // 39: WACommon.SubProtocol + (Armadillo_Signal_EncryptedBackupsSecrets_Epoch_EpochStatus)(0), // 0: WAArmadilloApplication.Armadillo.Signal.EncryptedBackupsSecrets.Epoch.EpochStatus + (Armadillo_ApplicationData_MetadataSyncAction_SyncAttachmentInterventionAction_InterventionType)(0), // 1: WAArmadilloApplication.Armadillo.ApplicationData.MetadataSyncAction.SyncAttachmentInterventionAction.InterventionType + (Armadillo_ApplicationData_MetadataSyncAction_SyncSpectraAction_SpectraActionType)(0), // 2: WAArmadilloApplication.Armadillo.ApplicationData.MetadataSyncAction.SyncSpectraAction.SpectraActionType + (Armadillo_Content_PaymentsTransactionMessage_PaymentStatus)(0), // 3: WAArmadilloApplication.Armadillo.Content.PaymentsTransactionMessage.PaymentStatus + (Armadillo_Content_ScreenshotAction_ScreenshotType)(0), // 4: WAArmadilloApplication.Armadillo.Content.ScreenshotAction.ScreenshotType + (Armadillo_Content_RavenActionNotifMessage_ActionType)(0), // 5: WAArmadilloApplication.Armadillo.Content.RavenActionNotifMessage.ActionType + (Armadillo_Content_RavenMessage_EphemeralType)(0), // 6: WAArmadilloApplication.Armadillo.Content.RavenMessage.EphemeralType + (Armadillo_Content_CommonSticker_StickerType)(0), // 7: WAArmadilloApplication.Armadillo.Content.CommonSticker.StickerType + (*Armadillo)(nil), // 8: WAArmadilloApplication.Armadillo + (*Armadillo_Metadata)(nil), // 9: WAArmadilloApplication.Armadillo.Metadata + (*Armadillo_Payload)(nil), // 10: WAArmadilloApplication.Armadillo.Payload + (*Armadillo_SubProtocolPayload)(nil), // 11: WAArmadilloApplication.Armadillo.SubProtocolPayload + (*Armadillo_Signal)(nil), // 12: WAArmadilloApplication.Armadillo.Signal + (*Armadillo_ApplicationData)(nil), // 13: WAArmadilloApplication.Armadillo.ApplicationData + (*Armadillo_Content)(nil), // 14: WAArmadilloApplication.Armadillo.Content + (*Armadillo_Signal_EncryptedBackupsSecrets)(nil), // 15: WAArmadilloApplication.Armadillo.Signal.EncryptedBackupsSecrets + (*Armadillo_Signal_EncryptedBackupsSecrets_Epoch)(nil), // 16: WAArmadilloApplication.Armadillo.Signal.EncryptedBackupsSecrets.Epoch + (*Armadillo_ApplicationData_MessageHistoryDocumentMessage)(nil), // 17: WAArmadilloApplication.Armadillo.ApplicationData.MessageHistoryDocumentMessage + (*Armadillo_ApplicationData_AIBotResponseMessage)(nil), // 18: WAArmadilloApplication.Armadillo.ApplicationData.AIBotResponseMessage + (*Armadillo_ApplicationData_MetadataSyncAction)(nil), // 19: WAArmadilloApplication.Armadillo.ApplicationData.MetadataSyncAction + (*Armadillo_ApplicationData_MetadataSyncNotification)(nil), // 20: WAArmadilloApplication.Armadillo.ApplicationData.MetadataSyncNotification + (*Armadillo_ApplicationData_MetadataSyncAction_SyncAttachmentInterventionAction)(nil), // 21: WAArmadilloApplication.Armadillo.ApplicationData.MetadataSyncAction.SyncAttachmentInterventionAction + (*Armadillo_ApplicationData_MetadataSyncAction_SyncSpectraAction)(nil), // 22: WAArmadilloApplication.Armadillo.ApplicationData.MetadataSyncAction.SyncSpectraAction + (*Armadillo_ApplicationData_MetadataSyncAction_SyncMessageAction)(nil), // 23: WAArmadilloApplication.Armadillo.ApplicationData.MetadataSyncAction.SyncMessageAction + (*Armadillo_ApplicationData_MetadataSyncAction_SyncChatAction)(nil), // 24: WAArmadilloApplication.Armadillo.ApplicationData.MetadataSyncAction.SyncChatAction + (*Armadillo_ApplicationData_MetadataSyncAction_SyncActionMessage)(nil), // 25: WAArmadilloApplication.Armadillo.ApplicationData.MetadataSyncAction.SyncActionMessage + (*Armadillo_ApplicationData_MetadataSyncAction_SyncActionMessageRange)(nil), // 26: WAArmadilloApplication.Armadillo.ApplicationData.MetadataSyncAction.SyncActionMessageRange + (*Armadillo_ApplicationData_MetadataSyncAction_SyncMessageAction_ActionMessageDelete)(nil), // 27: WAArmadilloApplication.Armadillo.ApplicationData.MetadataSyncAction.SyncMessageAction.ActionMessageDelete + (*Armadillo_ApplicationData_MetadataSyncAction_SyncChatAction_ActionChatRead)(nil), // 28: WAArmadilloApplication.Armadillo.ApplicationData.MetadataSyncAction.SyncChatAction.ActionChatRead + (*Armadillo_ApplicationData_MetadataSyncAction_SyncChatAction_ActionChatDelete)(nil), // 29: WAArmadilloApplication.Armadillo.ApplicationData.MetadataSyncAction.SyncChatAction.ActionChatDelete + (*Armadillo_ApplicationData_MetadataSyncAction_SyncChatAction_ActionChatArchive)(nil), // 30: WAArmadilloApplication.Armadillo.ApplicationData.MetadataSyncAction.SyncChatAction.ActionChatArchive + (*Armadillo_Content_PaymentsTransactionMessage)(nil), // 31: WAArmadilloApplication.Armadillo.Content.PaymentsTransactionMessage + (*Armadillo_Content_NetworkVerificationMessage)(nil), // 32: WAArmadilloApplication.Armadillo.Content.NetworkVerificationMessage + (*Armadillo_Content_NoteReplyMessage)(nil), // 33: WAArmadilloApplication.Armadillo.Content.NoteReplyMessage + (*Armadillo_Content_BumpExistingMessage)(nil), // 34: WAArmadilloApplication.Armadillo.Content.BumpExistingMessage + (*Armadillo_Content_ImageGalleryMessage)(nil), // 35: WAArmadilloApplication.Armadillo.Content.ImageGalleryMessage + (*Armadillo_Content_ScreenshotAction)(nil), // 36: WAArmadilloApplication.Armadillo.Content.ScreenshotAction + (*Armadillo_Content_ExtendedContentMessageWithSear)(nil), // 37: WAArmadilloApplication.Armadillo.Content.ExtendedContentMessageWithSear + (*Armadillo_Content_RavenActionNotifMessage)(nil), // 38: WAArmadilloApplication.Armadillo.Content.RavenActionNotifMessage + (*Armadillo_Content_RavenMessage)(nil), // 39: WAArmadilloApplication.Armadillo.Content.RavenMessage + (*Armadillo_Content_CommonSticker)(nil), // 40: WAArmadilloApplication.Armadillo.Content.CommonSticker + (waCommon.FutureProofBehavior)(0), // 41: WACommon.FutureProofBehavior + (*waArmadilloXMA.ExtendedContentMessage)(nil), // 42: WAArmadilloXMA.ExtendedContentMessage + (*waCommon.SubProtocol)(nil), // 43: WACommon.SubProtocol + (*waCommon.MessageKey)(nil), // 44: WACommon.MessageKey + (*waCommon.MessageText)(nil), // 45: WACommon.MessageText } var file_waArmadilloApplication_WAArmadilloApplication_proto_depIdxs = []int32{ - 8, // 0: WAArmadilloApplication.Armadillo.payload:type_name -> WAArmadilloApplication.Armadillo.Payload - 7, // 1: WAArmadilloApplication.Armadillo.metadata:type_name -> WAArmadilloApplication.Armadillo.Metadata - 12, // 2: WAArmadilloApplication.Armadillo.Payload.content:type_name -> WAArmadilloApplication.Armadillo.Content - 11, // 3: WAArmadilloApplication.Armadillo.Payload.applicationData:type_name -> WAArmadilloApplication.Armadillo.ApplicationData - 10, // 4: WAArmadilloApplication.Armadillo.Payload.signal:type_name -> WAArmadilloApplication.Armadillo.Signal - 9, // 5: WAArmadilloApplication.Armadillo.Payload.subProtocol:type_name -> WAArmadilloApplication.Armadillo.SubProtocolPayload - 35, // 6: WAArmadilloApplication.Armadillo.SubProtocolPayload.futureProof:type_name -> WACommon.FutureProofBehavior - 13, // 7: WAArmadilloApplication.Armadillo.Signal.encryptedBackupsSecrets:type_name -> WAArmadilloApplication.Armadillo.Signal.EncryptedBackupsSecrets - 17, // 8: WAArmadilloApplication.Armadillo.ApplicationData.metadataSync:type_name -> WAArmadilloApplication.Armadillo.ApplicationData.MetadataSyncNotification - 15, // 9: WAArmadilloApplication.Armadillo.ApplicationData.aiBotResponse:type_name -> WAArmadilloApplication.Armadillo.ApplicationData.AIBotResponseMessage - 34, // 10: WAArmadilloApplication.Armadillo.Content.commonSticker:type_name -> WAArmadilloApplication.Armadillo.Content.CommonSticker - 30, // 11: WAArmadilloApplication.Armadillo.Content.screenshotAction:type_name -> WAArmadilloApplication.Armadillo.Content.ScreenshotAction - 36, // 12: WAArmadilloApplication.Armadillo.Content.extendedContentMessage:type_name -> WAArmadilloXMA.ExtendedContentMessage - 33, // 13: WAArmadilloApplication.Armadillo.Content.ravenMessage:type_name -> WAArmadilloApplication.Armadillo.Content.RavenMessage - 32, // 14: WAArmadilloApplication.Armadillo.Content.ravenActionNotifMessage:type_name -> WAArmadilloApplication.Armadillo.Content.RavenActionNotifMessage - 31, // 15: WAArmadilloApplication.Armadillo.Content.extendedMessageContentWithSear:type_name -> WAArmadilloApplication.Armadillo.Content.ExtendedContentMessageWithSear - 29, // 16: WAArmadilloApplication.Armadillo.Content.imageGalleryMessage:type_name -> WAArmadilloApplication.Armadillo.Content.ImageGalleryMessage - 26, // 17: WAArmadilloApplication.Armadillo.Content.paymentsTransactionMessage:type_name -> WAArmadilloApplication.Armadillo.Content.PaymentsTransactionMessage - 28, // 18: WAArmadilloApplication.Armadillo.Content.bumpExistingMessage:type_name -> WAArmadilloApplication.Armadillo.Content.BumpExistingMessage - 27, // 19: WAArmadilloApplication.Armadillo.Content.noteReplyMessage:type_name -> WAArmadilloApplication.Armadillo.Content.NoteReplyMessage - 33, // 20: WAArmadilloApplication.Armadillo.Content.ravenMessageMsgr:type_name -> WAArmadilloApplication.Armadillo.Content.RavenMessage - 14, // 21: WAArmadilloApplication.Armadillo.Signal.EncryptedBackupsSecrets.epoch:type_name -> WAArmadilloApplication.Armadillo.Signal.EncryptedBackupsSecrets.Epoch - 0, // 22: WAArmadilloApplication.Armadillo.Signal.EncryptedBackupsSecrets.Epoch.status:type_name -> WAArmadilloApplication.Armadillo.Signal.EncryptedBackupsSecrets.Epoch.EpochStatus - 19, // 23: WAArmadilloApplication.Armadillo.ApplicationData.MetadataSyncAction.chatAction:type_name -> WAArmadilloApplication.Armadillo.ApplicationData.MetadataSyncAction.SyncChatAction - 18, // 24: WAArmadilloApplication.Armadillo.ApplicationData.MetadataSyncAction.messageAction:type_name -> WAArmadilloApplication.Armadillo.ApplicationData.MetadataSyncAction.SyncMessageAction - 16, // 25: WAArmadilloApplication.Armadillo.ApplicationData.MetadataSyncNotification.actions:type_name -> WAArmadilloApplication.Armadillo.ApplicationData.MetadataSyncAction - 22, // 26: WAArmadilloApplication.Armadillo.ApplicationData.MetadataSyncAction.SyncMessageAction.messageDelete:type_name -> WAArmadilloApplication.Armadillo.ApplicationData.MetadataSyncAction.SyncMessageAction.ActionMessageDelete - 37, // 27: WAArmadilloApplication.Armadillo.ApplicationData.MetadataSyncAction.SyncMessageAction.key:type_name -> WACommon.MessageKey - 25, // 28: WAArmadilloApplication.Armadillo.ApplicationData.MetadataSyncAction.SyncChatAction.chatArchive:type_name -> WAArmadilloApplication.Armadillo.ApplicationData.MetadataSyncAction.SyncChatAction.ActionChatArchive - 24, // 29: WAArmadilloApplication.Armadillo.ApplicationData.MetadataSyncAction.SyncChatAction.chatDelete:type_name -> WAArmadilloApplication.Armadillo.ApplicationData.MetadataSyncAction.SyncChatAction.ActionChatDelete - 23, // 30: WAArmadilloApplication.Armadillo.ApplicationData.MetadataSyncAction.SyncChatAction.chatRead:type_name -> WAArmadilloApplication.Armadillo.ApplicationData.MetadataSyncAction.SyncChatAction.ActionChatRead - 37, // 31: WAArmadilloApplication.Armadillo.ApplicationData.MetadataSyncAction.SyncActionMessage.key:type_name -> WACommon.MessageKey - 20, // 32: WAArmadilloApplication.Armadillo.ApplicationData.MetadataSyncAction.SyncActionMessageRange.messages:type_name -> WAArmadilloApplication.Armadillo.ApplicationData.MetadataSyncAction.SyncActionMessage - 21, // 33: WAArmadilloApplication.Armadillo.ApplicationData.MetadataSyncAction.SyncChatAction.ActionChatRead.messageRange:type_name -> WAArmadilloApplication.Armadillo.ApplicationData.MetadataSyncAction.SyncActionMessageRange - 21, // 34: WAArmadilloApplication.Armadillo.ApplicationData.MetadataSyncAction.SyncChatAction.ActionChatDelete.messageRange:type_name -> WAArmadilloApplication.Armadillo.ApplicationData.MetadataSyncAction.SyncActionMessageRange - 21, // 35: WAArmadilloApplication.Armadillo.ApplicationData.MetadataSyncAction.SyncChatAction.ActionChatArchive.messageRange:type_name -> WAArmadilloApplication.Armadillo.ApplicationData.MetadataSyncAction.SyncActionMessageRange - 1, // 36: WAArmadilloApplication.Armadillo.Content.PaymentsTransactionMessage.paymentStatus:type_name -> WAArmadilloApplication.Armadillo.Content.PaymentsTransactionMessage.PaymentStatus - 36, // 37: WAArmadilloApplication.Armadillo.Content.PaymentsTransactionMessage.extendedContentMessage:type_name -> WAArmadilloXMA.ExtendedContentMessage - 38, // 38: WAArmadilloApplication.Armadillo.Content.NoteReplyMessage.textContent:type_name -> WACommon.MessageText - 39, // 39: WAArmadilloApplication.Armadillo.Content.NoteReplyMessage.stickerContent:type_name -> WACommon.SubProtocol - 39, // 40: WAArmadilloApplication.Armadillo.Content.NoteReplyMessage.videoContent:type_name -> WACommon.SubProtocol - 38, // 41: WAArmadilloApplication.Armadillo.Content.NoteReplyMessage.noteText:type_name -> WACommon.MessageText - 37, // 42: WAArmadilloApplication.Armadillo.Content.BumpExistingMessage.key:type_name -> WACommon.MessageKey - 39, // 43: WAArmadilloApplication.Armadillo.Content.ImageGalleryMessage.images:type_name -> WACommon.SubProtocol - 2, // 44: WAArmadilloApplication.Armadillo.Content.ScreenshotAction.screenshotType:type_name -> WAArmadilloApplication.Armadillo.Content.ScreenshotAction.ScreenshotType - 39, // 45: WAArmadilloApplication.Armadillo.Content.ExtendedContentMessageWithSear.searAssociatedMessage:type_name -> WACommon.SubProtocol - 37, // 46: WAArmadilloApplication.Armadillo.Content.RavenActionNotifMessage.key:type_name -> WACommon.MessageKey - 3, // 47: WAArmadilloApplication.Armadillo.Content.RavenActionNotifMessage.actionType:type_name -> WAArmadilloApplication.Armadillo.Content.RavenActionNotifMessage.ActionType - 39, // 48: WAArmadilloApplication.Armadillo.Content.RavenMessage.imageMessage:type_name -> WACommon.SubProtocol - 39, // 49: WAArmadilloApplication.Armadillo.Content.RavenMessage.videoMessage:type_name -> WACommon.SubProtocol - 4, // 50: WAArmadilloApplication.Armadillo.Content.RavenMessage.ephemeralType:type_name -> WAArmadilloApplication.Armadillo.Content.RavenMessage.EphemeralType - 5, // 51: WAArmadilloApplication.Armadillo.Content.CommonSticker.stickerType:type_name -> WAArmadilloApplication.Armadillo.Content.CommonSticker.StickerType - 52, // [52:52] is the sub-list for method output_type - 52, // [52:52] is the sub-list for method input_type - 52, // [52:52] is the sub-list for extension type_name - 52, // [52:52] is the sub-list for extension extendee - 0, // [0:52] is the sub-list for field type_name + 10, // 0: WAArmadilloApplication.Armadillo.payload:type_name -> WAArmadilloApplication.Armadillo.Payload + 9, // 1: WAArmadilloApplication.Armadillo.metadata:type_name -> WAArmadilloApplication.Armadillo.Metadata + 14, // 2: WAArmadilloApplication.Armadillo.Payload.content:type_name -> WAArmadilloApplication.Armadillo.Content + 13, // 3: WAArmadilloApplication.Armadillo.Payload.applicationData:type_name -> WAArmadilloApplication.Armadillo.ApplicationData + 12, // 4: WAArmadilloApplication.Armadillo.Payload.signal:type_name -> WAArmadilloApplication.Armadillo.Signal + 11, // 5: WAArmadilloApplication.Armadillo.Payload.subProtocol:type_name -> WAArmadilloApplication.Armadillo.SubProtocolPayload + 41, // 6: WAArmadilloApplication.Armadillo.SubProtocolPayload.futureProof:type_name -> WACommon.FutureProofBehavior + 15, // 7: WAArmadilloApplication.Armadillo.Signal.encryptedBackupsSecrets:type_name -> WAArmadilloApplication.Armadillo.Signal.EncryptedBackupsSecrets + 20, // 8: WAArmadilloApplication.Armadillo.ApplicationData.metadataSync:type_name -> WAArmadilloApplication.Armadillo.ApplicationData.MetadataSyncNotification + 18, // 9: WAArmadilloApplication.Armadillo.ApplicationData.aiBotResponse:type_name -> WAArmadilloApplication.Armadillo.ApplicationData.AIBotResponseMessage + 17, // 10: WAArmadilloApplication.Armadillo.ApplicationData.messageHistoryDocumentMessage:type_name -> WAArmadilloApplication.Armadillo.ApplicationData.MessageHistoryDocumentMessage + 40, // 11: WAArmadilloApplication.Armadillo.Content.commonSticker:type_name -> WAArmadilloApplication.Armadillo.Content.CommonSticker + 36, // 12: WAArmadilloApplication.Armadillo.Content.screenshotAction:type_name -> WAArmadilloApplication.Armadillo.Content.ScreenshotAction + 42, // 13: WAArmadilloApplication.Armadillo.Content.extendedContentMessage:type_name -> WAArmadilloXMA.ExtendedContentMessage + 39, // 14: WAArmadilloApplication.Armadillo.Content.ravenMessage:type_name -> WAArmadilloApplication.Armadillo.Content.RavenMessage + 38, // 15: WAArmadilloApplication.Armadillo.Content.ravenActionNotifMessage:type_name -> WAArmadilloApplication.Armadillo.Content.RavenActionNotifMessage + 37, // 16: WAArmadilloApplication.Armadillo.Content.extendedMessageContentWithSear:type_name -> WAArmadilloApplication.Armadillo.Content.ExtendedContentMessageWithSear + 35, // 17: WAArmadilloApplication.Armadillo.Content.imageGalleryMessage:type_name -> WAArmadilloApplication.Armadillo.Content.ImageGalleryMessage + 31, // 18: WAArmadilloApplication.Armadillo.Content.paymentsTransactionMessage:type_name -> WAArmadilloApplication.Armadillo.Content.PaymentsTransactionMessage + 34, // 19: WAArmadilloApplication.Armadillo.Content.bumpExistingMessage:type_name -> WAArmadilloApplication.Armadillo.Content.BumpExistingMessage + 33, // 20: WAArmadilloApplication.Armadillo.Content.noteReplyMessage:type_name -> WAArmadilloApplication.Armadillo.Content.NoteReplyMessage + 39, // 21: WAArmadilloApplication.Armadillo.Content.ravenMessageMsgr:type_name -> WAArmadilloApplication.Armadillo.Content.RavenMessage + 32, // 22: WAArmadilloApplication.Armadillo.Content.networkVerificationMessage:type_name -> WAArmadilloApplication.Armadillo.Content.NetworkVerificationMessage + 16, // 23: WAArmadilloApplication.Armadillo.Signal.EncryptedBackupsSecrets.epoch:type_name -> WAArmadilloApplication.Armadillo.Signal.EncryptedBackupsSecrets.Epoch + 0, // 24: WAArmadilloApplication.Armadillo.Signal.EncryptedBackupsSecrets.Epoch.status:type_name -> WAArmadilloApplication.Armadillo.Signal.EncryptedBackupsSecrets.Epoch.EpochStatus + 43, // 25: WAArmadilloApplication.Armadillo.ApplicationData.MessageHistoryDocumentMessage.document:type_name -> WACommon.SubProtocol + 24, // 26: WAArmadilloApplication.Armadillo.ApplicationData.MetadataSyncAction.chatAction:type_name -> WAArmadilloApplication.Armadillo.ApplicationData.MetadataSyncAction.SyncChatAction + 23, // 27: WAArmadilloApplication.Armadillo.ApplicationData.MetadataSyncAction.messageAction:type_name -> WAArmadilloApplication.Armadillo.ApplicationData.MetadataSyncAction.SyncMessageAction + 22, // 28: WAArmadilloApplication.Armadillo.ApplicationData.MetadataSyncAction.spectraAction:type_name -> WAArmadilloApplication.Armadillo.ApplicationData.MetadataSyncAction.SyncSpectraAction + 21, // 29: WAArmadilloApplication.Armadillo.ApplicationData.MetadataSyncAction.attachmentInterventionAction:type_name -> WAArmadilloApplication.Armadillo.ApplicationData.MetadataSyncAction.SyncAttachmentInterventionAction + 19, // 30: WAArmadilloApplication.Armadillo.ApplicationData.MetadataSyncNotification.actions:type_name -> WAArmadilloApplication.Armadillo.ApplicationData.MetadataSyncAction + 44, // 31: WAArmadilloApplication.Armadillo.ApplicationData.MetadataSyncAction.SyncAttachmentInterventionAction.messageKey:type_name -> WACommon.MessageKey + 1, // 32: WAArmadilloApplication.Armadillo.ApplicationData.MetadataSyncAction.SyncAttachmentInterventionAction.interventionType:type_name -> WAArmadilloApplication.Armadillo.ApplicationData.MetadataSyncAction.SyncAttachmentInterventionAction.InterventionType + 44, // 33: WAArmadilloApplication.Armadillo.ApplicationData.MetadataSyncAction.SyncSpectraAction.key:type_name -> WACommon.MessageKey + 2, // 34: WAArmadilloApplication.Armadillo.ApplicationData.MetadataSyncAction.SyncSpectraAction.actionType:type_name -> WAArmadilloApplication.Armadillo.ApplicationData.MetadataSyncAction.SyncSpectraAction.SpectraActionType + 27, // 35: WAArmadilloApplication.Armadillo.ApplicationData.MetadataSyncAction.SyncMessageAction.messageDelete:type_name -> WAArmadilloApplication.Armadillo.ApplicationData.MetadataSyncAction.SyncMessageAction.ActionMessageDelete + 44, // 36: WAArmadilloApplication.Armadillo.ApplicationData.MetadataSyncAction.SyncMessageAction.key:type_name -> WACommon.MessageKey + 30, // 37: WAArmadilloApplication.Armadillo.ApplicationData.MetadataSyncAction.SyncChatAction.chatArchive:type_name -> WAArmadilloApplication.Armadillo.ApplicationData.MetadataSyncAction.SyncChatAction.ActionChatArchive + 29, // 38: WAArmadilloApplication.Armadillo.ApplicationData.MetadataSyncAction.SyncChatAction.chatDelete:type_name -> WAArmadilloApplication.Armadillo.ApplicationData.MetadataSyncAction.SyncChatAction.ActionChatDelete + 28, // 39: WAArmadilloApplication.Armadillo.ApplicationData.MetadataSyncAction.SyncChatAction.chatRead:type_name -> WAArmadilloApplication.Armadillo.ApplicationData.MetadataSyncAction.SyncChatAction.ActionChatRead + 44, // 40: WAArmadilloApplication.Armadillo.ApplicationData.MetadataSyncAction.SyncActionMessage.key:type_name -> WACommon.MessageKey + 25, // 41: WAArmadilloApplication.Armadillo.ApplicationData.MetadataSyncAction.SyncActionMessageRange.messages:type_name -> WAArmadilloApplication.Armadillo.ApplicationData.MetadataSyncAction.SyncActionMessage + 26, // 42: WAArmadilloApplication.Armadillo.ApplicationData.MetadataSyncAction.SyncChatAction.ActionChatRead.messageRange:type_name -> WAArmadilloApplication.Armadillo.ApplicationData.MetadataSyncAction.SyncActionMessageRange + 26, // 43: WAArmadilloApplication.Armadillo.ApplicationData.MetadataSyncAction.SyncChatAction.ActionChatDelete.messageRange:type_name -> WAArmadilloApplication.Armadillo.ApplicationData.MetadataSyncAction.SyncActionMessageRange + 26, // 44: WAArmadilloApplication.Armadillo.ApplicationData.MetadataSyncAction.SyncChatAction.ActionChatArchive.messageRange:type_name -> WAArmadilloApplication.Armadillo.ApplicationData.MetadataSyncAction.SyncActionMessageRange + 3, // 45: WAArmadilloApplication.Armadillo.Content.PaymentsTransactionMessage.paymentStatus:type_name -> WAArmadilloApplication.Armadillo.Content.PaymentsTransactionMessage.PaymentStatus + 42, // 46: WAArmadilloApplication.Armadillo.Content.PaymentsTransactionMessage.extendedContentMessage:type_name -> WAArmadilloXMA.ExtendedContentMessage + 45, // 47: WAArmadilloApplication.Armadillo.Content.NoteReplyMessage.textContent:type_name -> WACommon.MessageText + 43, // 48: WAArmadilloApplication.Armadillo.Content.NoteReplyMessage.stickerContent:type_name -> WACommon.SubProtocol + 43, // 49: WAArmadilloApplication.Armadillo.Content.NoteReplyMessage.videoContent:type_name -> WACommon.SubProtocol + 45, // 50: WAArmadilloApplication.Armadillo.Content.NoteReplyMessage.noteText:type_name -> WACommon.MessageText + 44, // 51: WAArmadilloApplication.Armadillo.Content.BumpExistingMessage.key:type_name -> WACommon.MessageKey + 43, // 52: WAArmadilloApplication.Armadillo.Content.ImageGalleryMessage.images:type_name -> WACommon.SubProtocol + 4, // 53: WAArmadilloApplication.Armadillo.Content.ScreenshotAction.screenshotType:type_name -> WAArmadilloApplication.Armadillo.Content.ScreenshotAction.ScreenshotType + 43, // 54: WAArmadilloApplication.Armadillo.Content.ExtendedContentMessageWithSear.searAssociatedMessage:type_name -> WACommon.SubProtocol + 44, // 55: WAArmadilloApplication.Armadillo.Content.RavenActionNotifMessage.key:type_name -> WACommon.MessageKey + 5, // 56: WAArmadilloApplication.Armadillo.Content.RavenActionNotifMessage.actionType:type_name -> WAArmadilloApplication.Armadillo.Content.RavenActionNotifMessage.ActionType + 43, // 57: WAArmadilloApplication.Armadillo.Content.RavenMessage.imageMessage:type_name -> WACommon.SubProtocol + 43, // 58: WAArmadilloApplication.Armadillo.Content.RavenMessage.videoMessage:type_name -> WACommon.SubProtocol + 6, // 59: WAArmadilloApplication.Armadillo.Content.RavenMessage.ephemeralType:type_name -> WAArmadilloApplication.Armadillo.Content.RavenMessage.EphemeralType + 7, // 60: WAArmadilloApplication.Armadillo.Content.CommonSticker.stickerType:type_name -> WAArmadilloApplication.Armadillo.Content.CommonSticker.StickerType + 61, // [61:61] is the sub-list for method output_type + 61, // [61:61] is the sub-list for method input_type + 61, // [61:61] is the sub-list for extension type_name + 61, // [61:61] is the sub-list for extension extendee + 0, // [0:61] is the sub-list for field type_name } func init() { file_waArmadilloApplication_WAArmadilloApplication_proto_init() } @@ -2633,356 +3213,6 @@ func file_waArmadilloApplication_WAArmadilloApplication_proto_init() { if File_waArmadilloApplication_WAArmadilloApplication_proto != nil { return } - if !protoimpl.UnsafeEnabled { - file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[0].Exporter = func(v any, i int) any { - switch v := v.(*Armadillo); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[1].Exporter = func(v any, i int) any { - switch v := v.(*Armadillo_Metadata); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[2].Exporter = func(v any, i int) any { - switch v := v.(*Armadillo_Payload); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[3].Exporter = func(v any, i int) any { - switch v := v.(*Armadillo_SubProtocolPayload); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[4].Exporter = func(v any, i int) any { - switch v := v.(*Armadillo_Signal); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[5].Exporter = func(v any, i int) any { - switch v := v.(*Armadillo_ApplicationData); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[6].Exporter = func(v any, i int) any { - switch v := v.(*Armadillo_Content); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[7].Exporter = func(v any, i int) any { - switch v := v.(*Armadillo_Signal_EncryptedBackupsSecrets); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[8].Exporter = func(v any, i int) any { - switch v := v.(*Armadillo_Signal_EncryptedBackupsSecrets_Epoch); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[9].Exporter = func(v any, i int) any { - switch v := v.(*Armadillo_ApplicationData_AIBotResponseMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[10].Exporter = func(v any, i int) any { - switch v := v.(*Armadillo_ApplicationData_MetadataSyncAction); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[11].Exporter = func(v any, i int) any { - switch v := v.(*Armadillo_ApplicationData_MetadataSyncNotification); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[12].Exporter = func(v any, i int) any { - switch v := v.(*Armadillo_ApplicationData_MetadataSyncAction_SyncMessageAction); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[13].Exporter = func(v any, i int) any { - switch v := v.(*Armadillo_ApplicationData_MetadataSyncAction_SyncChatAction); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[14].Exporter = func(v any, i int) any { - switch v := v.(*Armadillo_ApplicationData_MetadataSyncAction_SyncActionMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[15].Exporter = func(v any, i int) any { - switch v := v.(*Armadillo_ApplicationData_MetadataSyncAction_SyncActionMessageRange); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[16].Exporter = func(v any, i int) any { - switch v := v.(*Armadillo_ApplicationData_MetadataSyncAction_SyncMessageAction_ActionMessageDelete); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[17].Exporter = func(v any, i int) any { - switch v := v.(*Armadillo_ApplicationData_MetadataSyncAction_SyncChatAction_ActionChatRead); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[18].Exporter = func(v any, i int) any { - switch v := v.(*Armadillo_ApplicationData_MetadataSyncAction_SyncChatAction_ActionChatDelete); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[19].Exporter = func(v any, i int) any { - switch v := v.(*Armadillo_ApplicationData_MetadataSyncAction_SyncChatAction_ActionChatArchive); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[20].Exporter = func(v any, i int) any { - switch v := v.(*Armadillo_Content_PaymentsTransactionMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[21].Exporter = func(v any, i int) any { - switch v := v.(*Armadillo_Content_NoteReplyMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[22].Exporter = func(v any, i int) any { - switch v := v.(*Armadillo_Content_BumpExistingMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[23].Exporter = func(v any, i int) any { - switch v := v.(*Armadillo_Content_ImageGalleryMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[24].Exporter = func(v any, i int) any { - switch v := v.(*Armadillo_Content_ScreenshotAction); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[25].Exporter = func(v any, i int) any { - switch v := v.(*Armadillo_Content_ExtendedContentMessageWithSear); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[26].Exporter = func(v any, i int) any { - switch v := v.(*Armadillo_Content_RavenActionNotifMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[27].Exporter = func(v any, i int) any { - switch v := v.(*Armadillo_Content_RavenMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[28].Exporter = func(v any, i int) any { - switch v := v.(*Armadillo_Content_CommonSticker); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[2].OneofWrappers = []any{ (*Armadillo_Payload_Content)(nil), (*Armadillo_Payload_ApplicationData)(nil), @@ -2995,6 +3225,7 @@ func file_waArmadilloApplication_WAArmadilloApplication_proto_init() { file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[5].OneofWrappers = []any{ (*Armadillo_ApplicationData_MetadataSync)(nil), (*Armadillo_ApplicationData_AiBotResponse)(nil), + (*Armadillo_ApplicationData_MessageHistoryDocumentMessage_)(nil), } file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[6].OneofWrappers = []any{ (*Armadillo_Content_CommonSticker_)(nil), @@ -3008,25 +3239,28 @@ func file_waArmadilloApplication_WAArmadilloApplication_proto_init() { (*Armadillo_Content_BumpExistingMessage_)(nil), (*Armadillo_Content_NoteReplyMessage_)(nil), (*Armadillo_Content_RavenMessageMsgr)(nil), + (*Armadillo_Content_NetworkVerificationMessage_)(nil), } - file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[10].OneofWrappers = []any{ + file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[11].OneofWrappers = []any{ (*Armadillo_ApplicationData_MetadataSyncAction_ChatAction)(nil), (*Armadillo_ApplicationData_MetadataSyncAction_MessageAction)(nil), + (*Armadillo_ApplicationData_MetadataSyncAction_SpectraAction)(nil), + (*Armadillo_ApplicationData_MetadataSyncAction_AttachmentInterventionAction)(nil), } - file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[12].OneofWrappers = []any{ + file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[15].OneofWrappers = []any{ (*Armadillo_ApplicationData_MetadataSyncAction_SyncMessageAction_MessageDelete)(nil), } - file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[13].OneofWrappers = []any{ + file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[16].OneofWrappers = []any{ (*Armadillo_ApplicationData_MetadataSyncAction_SyncChatAction_ChatArchive)(nil), (*Armadillo_ApplicationData_MetadataSyncAction_SyncChatAction_ChatDelete)(nil), (*Armadillo_ApplicationData_MetadataSyncAction_SyncChatAction_ChatRead)(nil), } - file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[21].OneofWrappers = []any{ + file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[25].OneofWrappers = []any{ (*Armadillo_Content_NoteReplyMessage_TextContent)(nil), (*Armadillo_Content_NoteReplyMessage_StickerContent)(nil), (*Armadillo_Content_NoteReplyMessage_VideoContent)(nil), } - file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[27].OneofWrappers = []any{ + file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes[31].OneofWrappers = []any{ (*Armadillo_Content_RavenMessage_ImageMessage)(nil), (*Armadillo_Content_RavenMessage_VideoMessage)(nil), } @@ -3034,9 +3268,9 @@ func file_waArmadilloApplication_WAArmadilloApplication_proto_init() { out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_waArmadilloApplication_WAArmadilloApplication_proto_rawDesc, - NumEnums: 6, - NumMessages: 29, + RawDescriptor: unsafe.Slice(unsafe.StringData(file_waArmadilloApplication_WAArmadilloApplication_proto_rawDesc), len(file_waArmadilloApplication_WAArmadilloApplication_proto_rawDesc)), + NumEnums: 8, + NumMessages: 33, NumExtensions: 0, NumServices: 0, }, @@ -3046,7 +3280,6 @@ func file_waArmadilloApplication_WAArmadilloApplication_proto_init() { MessageInfos: file_waArmadilloApplication_WAArmadilloApplication_proto_msgTypes, }.Build() File_waArmadilloApplication_WAArmadilloApplication_proto = out.File - file_waArmadilloApplication_WAArmadilloApplication_proto_rawDesc = nil file_waArmadilloApplication_WAArmadilloApplication_proto_goTypes = nil file_waArmadilloApplication_WAArmadilloApplication_proto_depIdxs = nil } diff --git a/vendor/go.mau.fi/whatsmeow/proto/waArmadilloApplication/WAArmadilloApplication.pb.raw b/vendor/go.mau.fi/whatsmeow/proto/waArmadilloApplication/WAArmadilloApplication.pb.raw deleted file mode 100644 index 7ee41cb72e..0000000000 Binary files a/vendor/go.mau.fi/whatsmeow/proto/waArmadilloApplication/WAArmadilloApplication.pb.raw and /dev/null differ diff --git a/vendor/go.mau.fi/whatsmeow/proto/waArmadilloApplication/WAArmadilloApplication.proto b/vendor/go.mau.fi/whatsmeow/proto/waArmadilloApplication/WAArmadilloApplication.proto index 9b986ae79f..02baef9924 100644 --- a/vendor/go.mau.fi/whatsmeow/proto/waArmadilloApplication/WAArmadilloApplication.proto +++ b/vendor/go.mau.fi/whatsmeow/proto/waArmadilloApplication/WAArmadilloApplication.proto @@ -50,6 +50,10 @@ message Armadillo { } message ApplicationData { + message MessageHistoryDocumentMessage { + optional WACommon.SubProtocol document = 1; + } + message AIBotResponseMessage { optional string summonToken = 1; optional string messageText = 2; @@ -57,6 +61,29 @@ message Armadillo { } message MetadataSyncAction { + message SyncAttachmentInterventionAction { + enum InterventionType { + UNKNOWN = 0; + NUDE = 1; + NOT_NUDE = 2; + } + + optional WACommon.MessageKey messageKey = 1; + optional InterventionType interventionType = 2; + } + + message SyncSpectraAction { + enum SpectraActionType { + TAKEDOWN = 0; + RESTORE = 1; + } + + optional WACommon.MessageKey key = 1; + optional SpectraActionType actionType = 2; + optional int64 takedownActionID = 3; + optional string config = 4; + } + message SyncMessageAction { message ActionMessageDelete { } @@ -106,6 +133,8 @@ message Armadillo { oneof actionType { SyncChatAction chatAction = 101; SyncMessageAction messageAction = 102; + SyncSpectraAction spectraAction = 103; + SyncAttachmentInterventionAction attachmentInterventionAction = 104; } optional int64 actionTimestamp = 1; @@ -118,6 +147,7 @@ message Armadillo { oneof applicationData { MetadataSyncNotification metadataSync = 1; AIBotResponseMessage aiBotResponse = 2; + MessageHistoryDocumentMessage messageHistoryDocumentMessage = 3; } } @@ -154,6 +184,10 @@ message Armadillo { optional WAArmadilloXMA.ExtendedContentMessage extendedContentMessage = 5; } + message NetworkVerificationMessage { + optional string codeText = 1; + } + message NoteReplyMessage { oneof noteReplyContent { WACommon.MessageText textContent = 4; @@ -240,6 +274,7 @@ message Armadillo { BumpExistingMessage bumpExistingMessage = 11; NoteReplyMessage noteReplyMessage = 13; RavenMessage ravenMessageMsgr = 14; + NetworkVerificationMessage networkVerificationMessage = 15; } } diff --git a/vendor/go.mau.fi/whatsmeow/proto/waArmadilloXMA/WAArmadilloXMA.pb.go b/vendor/go.mau.fi/whatsmeow/proto/waArmadilloXMA/WAArmadilloXMA.pb.go index d3f386f25e..e6396b0612 100644 --- a/vendor/go.mau.fi/whatsmeow/proto/waArmadilloXMA/WAArmadilloXMA.pb.go +++ b/vendor/go.mau.fi/whatsmeow/proto/waArmadilloXMA/WAArmadilloXMA.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 +// protoc-gen-go v1.36.10 // protoc v3.21.12 // source: waArmadilloXMA/WAArmadilloXMA.proto @@ -9,12 +9,12 @@ package waArmadilloXMA import ( reflect "reflect" sync "sync" + unsafe "unsafe" - waCommon "go.mau.fi/whatsmeow/proto/waCommon" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" - _ "embed" + waCommon "go.mau.fi/whatsmeow/proto/waCommon" ) const ( @@ -24,6 +24,65 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) +type ExtendedContentMessage_XmaDataclassType int32 + +const ( + ExtendedContentMessage_SENDER_COPY ExtendedContentMessage_XmaDataclassType = 0 + ExtendedContentMessage_SERVER ExtendedContentMessage_XmaDataclassType = 1 + ExtendedContentMessage_SIGNED_CLIENT ExtendedContentMessage_XmaDataclassType = 2 +) + +// Enum value maps for ExtendedContentMessage_XmaDataclassType. +var ( + ExtendedContentMessage_XmaDataclassType_name = map[int32]string{ + 0: "SENDER_COPY", + 1: "SERVER", + 2: "SIGNED_CLIENT", + } + ExtendedContentMessage_XmaDataclassType_value = map[string]int32{ + "SENDER_COPY": 0, + "SERVER": 1, + "SIGNED_CLIENT": 2, + } +) + +func (x ExtendedContentMessage_XmaDataclassType) Enum() *ExtendedContentMessage_XmaDataclassType { + p := new(ExtendedContentMessage_XmaDataclassType) + *p = x + return p +} + +func (x ExtendedContentMessage_XmaDataclassType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (ExtendedContentMessage_XmaDataclassType) Descriptor() protoreflect.EnumDescriptor { + return file_waArmadilloXMA_WAArmadilloXMA_proto_enumTypes[0].Descriptor() +} + +func (ExtendedContentMessage_XmaDataclassType) Type() protoreflect.EnumType { + return &file_waArmadilloXMA_WAArmadilloXMA_proto_enumTypes[0] +} + +func (x ExtendedContentMessage_XmaDataclassType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *ExtendedContentMessage_XmaDataclassType) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = ExtendedContentMessage_XmaDataclassType(num) + return nil +} + +// Deprecated: Use ExtendedContentMessage_XmaDataclassType.Descriptor instead. +func (ExtendedContentMessage_XmaDataclassType) EnumDescriptor() ([]byte, []int) { + return file_waArmadilloXMA_WAArmadilloXMA_proto_rawDescGZIP(), []int{0, 0} +} + type ExtendedContentMessage_OverlayIconGlyph int32 const ( @@ -78,11 +137,11 @@ func (x ExtendedContentMessage_OverlayIconGlyph) String() string { } func (ExtendedContentMessage_OverlayIconGlyph) Descriptor() protoreflect.EnumDescriptor { - return file_waArmadilloXMA_WAArmadilloXMA_proto_enumTypes[0].Descriptor() + return file_waArmadilloXMA_WAArmadilloXMA_proto_enumTypes[1].Descriptor() } func (ExtendedContentMessage_OverlayIconGlyph) Type() protoreflect.EnumType { - return &file_waArmadilloXMA_WAArmadilloXMA_proto_enumTypes[0] + return &file_waArmadilloXMA_WAArmadilloXMA_proto_enumTypes[1] } func (x ExtendedContentMessage_OverlayIconGlyph) Number() protoreflect.EnumNumber { @@ -101,7 +160,7 @@ func (x *ExtendedContentMessage_OverlayIconGlyph) UnmarshalJSON(b []byte) error // Deprecated: Use ExtendedContentMessage_OverlayIconGlyph.Descriptor instead. func (ExtendedContentMessage_OverlayIconGlyph) EnumDescriptor() ([]byte, []int) { - return file_waArmadilloXMA_WAArmadilloXMA_proto_rawDescGZIP(), []int{0, 0} + return file_waArmadilloXMA_WAArmadilloXMA_proto_rawDescGZIP(), []int{0, 1} } type ExtendedContentMessage_CtaButtonType int32 @@ -131,11 +190,11 @@ func (x ExtendedContentMessage_CtaButtonType) String() string { } func (ExtendedContentMessage_CtaButtonType) Descriptor() protoreflect.EnumDescriptor { - return file_waArmadilloXMA_WAArmadilloXMA_proto_enumTypes[1].Descriptor() + return file_waArmadilloXMA_WAArmadilloXMA_proto_enumTypes[2].Descriptor() } func (ExtendedContentMessage_CtaButtonType) Type() protoreflect.EnumType { - return &file_waArmadilloXMA_WAArmadilloXMA_proto_enumTypes[1] + return &file_waArmadilloXMA_WAArmadilloXMA_proto_enumTypes[2] } func (x ExtendedContentMessage_CtaButtonType) Number() protoreflect.EnumNumber { @@ -154,7 +213,7 @@ func (x *ExtendedContentMessage_CtaButtonType) UnmarshalJSON(b []byte) error { // Deprecated: Use ExtendedContentMessage_CtaButtonType.Descriptor instead. func (ExtendedContentMessage_CtaButtonType) EnumDescriptor() ([]byte, []int) { - return file_waArmadilloXMA_WAArmadilloXMA_proto_rawDescGZIP(), []int{0, 1} + return file_waArmadilloXMA_WAArmadilloXMA_proto_rawDescGZIP(), []int{0, 2} } type ExtendedContentMessage_XmaLayoutType int32 @@ -199,11 +258,11 @@ func (x ExtendedContentMessage_XmaLayoutType) String() string { } func (ExtendedContentMessage_XmaLayoutType) Descriptor() protoreflect.EnumDescriptor { - return file_waArmadilloXMA_WAArmadilloXMA_proto_enumTypes[2].Descriptor() + return file_waArmadilloXMA_WAArmadilloXMA_proto_enumTypes[3].Descriptor() } func (ExtendedContentMessage_XmaLayoutType) Type() protoreflect.EnumType { - return &file_waArmadilloXMA_WAArmadilloXMA_proto_enumTypes[2] + return &file_waArmadilloXMA_WAArmadilloXMA_proto_enumTypes[3] } func (x ExtendedContentMessage_XmaLayoutType) Number() protoreflect.EnumNumber { @@ -222,12 +281,13 @@ func (x *ExtendedContentMessage_XmaLayoutType) UnmarshalJSON(b []byte) error { // Deprecated: Use ExtendedContentMessage_XmaLayoutType.Descriptor instead. func (ExtendedContentMessage_XmaLayoutType) EnumDescriptor() ([]byte, []int) { - return file_waArmadilloXMA_WAArmadilloXMA_proto_rawDescGZIP(), []int{0, 2} + return file_waArmadilloXMA_WAArmadilloXMA_proto_rawDescGZIP(), []int{0, 3} } type ExtendedContentMessage_ExtendedContentType int32 const ( + ExtendedContentMessage_UNSUPPORTED ExtendedContentMessage_ExtendedContentType = 0 ExtendedContentMessage_IG_STORY_PHOTO_MENTION ExtendedContentMessage_ExtendedContentType = 4 ExtendedContentMessage_IG_SINGLE_IMAGE_POST_SHARE ExtendedContentMessage_ExtendedContentType = 9 ExtendedContentMessage_IG_MULTIPOST_SHARE ExtendedContentMessage_ExtendedContentType = 10 @@ -258,6 +318,10 @@ const ( ExtendedContentMessage_FB_FEED_POST_PRIVATE_REPLY ExtendedContentMessage_ExtendedContentType = 1008 ExtendedContentMessage_FB_SHORT ExtendedContentMessage_ExtendedContentType = 1009 ExtendedContentMessage_FB_COMMENT_MENTION_SHARE ExtendedContentMessage_ExtendedContentType = 1010 + ExtendedContentMessage_FB_POST_MENTION ExtendedContentMessage_ExtendedContentType = 1011 + ExtendedContentMessage_FB_PROFILE_DIRECTORY_ITEM ExtendedContentMessage_ExtendedContentType = 1013 + ExtendedContentMessage_FB_FEED_POST_REACTION_REPLY ExtendedContentMessage_ExtendedContentType = 1014 + ExtendedContentMessage_FB_QUICKSNAP_REPLY ExtendedContentMessage_ExtendedContentType = 1015 ExtendedContentMessage_MSG_EXTERNAL_LINK_SHARE ExtendedContentMessage_ExtendedContentType = 2000 ExtendedContentMessage_MSG_P2P_PAYMENT ExtendedContentMessage_ExtendedContentType = 2001 ExtendedContentMessage_MSG_LOCATION_SHARING ExtendedContentMessage_ExtendedContentType = 2002 @@ -275,6 +339,20 @@ const ( ExtendedContentMessage_MSG_AI_CONTACT ExtendedContentMessage_ExtendedContentType = 2014 ExtendedContentMessage_MSG_MEMORIES_SHARE ExtendedContentMessage_ExtendedContentType = 2015 ExtendedContentMessage_MSG_SHARED_ALBUM_REPLY ExtendedContentMessage_ExtendedContentType = 2016 + ExtendedContentMessage_MSG_SHARED_ALBUM ExtendedContentMessage_ExtendedContentType = 2017 + ExtendedContentMessage_MSG_OCCAMADILLO_XMA ExtendedContentMessage_ExtendedContentType = 2018 + ExtendedContentMessage_MSG_GEN_AI_SUBSCRIPTION ExtendedContentMessage_ExtendedContentType = 2021 + ExtendedContentMessage_MSG_GEN_AI_REMINDER ExtendedContentMessage_ExtendedContentType = 2022 + ExtendedContentMessage_MSG_GEN_AI_MEMU_ONBOARDING_RESPONSE ExtendedContentMessage_ExtendedContentType = 2023 + ExtendedContentMessage_MSG_NOTE_REPLY ExtendedContentMessage_ExtendedContentType = 2024 + ExtendedContentMessage_MSG_NOTE_MENTION ExtendedContentMessage_ExtendedContentType = 2025 + ExtendedContentMessage_GEN_AI_ENTITY ExtendedContentMessage_ExtendedContentType = 2026 + ExtendedContentMessage_MSG_OPG_P2P_PAYMENT ExtendedContentMessage_ExtendedContentType = 2027 + ExtendedContentMessage_GEN_AI_RICH_RESPONSE ExtendedContentMessage_ExtendedContentType = 2028 + ExtendedContentMessage_MSG_MUSIC_STICKER ExtendedContentMessage_ExtendedContentType = 2029 + ExtendedContentMessage_MSG_PHONE_NUMBER ExtendedContentMessage_ExtendedContentType = 2030 + ExtendedContentMessage_AI_ACTIVITY_SHARE ExtendedContentMessage_ExtendedContentType = 2031 + ExtendedContentMessage_MSG_PRIVATE_XMA ExtendedContentMessage_ExtendedContentType = 2032 ExtendedContentMessage_RTC_AUDIO_CALL ExtendedContentMessage_ExtendedContentType = 3000 ExtendedContentMessage_RTC_VIDEO_CALL ExtendedContentMessage_ExtendedContentType = 3001 ExtendedContentMessage_RTC_MISSED_AUDIO_CALL ExtendedContentMessage_ExtendedContentType = 3002 @@ -283,12 +361,16 @@ const ( ExtendedContentMessage_RTC_GROUP_VIDEO_CALL ExtendedContentMessage_ExtendedContentType = 3005 ExtendedContentMessage_RTC_MISSED_GROUP_AUDIO_CALL ExtendedContentMessage_ExtendedContentType = 3006 ExtendedContentMessage_RTC_MISSED_GROUP_VIDEO_CALL ExtendedContentMessage_ExtendedContentType = 3007 + ExtendedContentMessage_RTC_ONGOING_AUDIO_CALL ExtendedContentMessage_ExtendedContentType = 3008 + ExtendedContentMessage_RTC_ONGOING_VIDEO_CALL ExtendedContentMessage_ExtendedContentType = 3009 + ExtendedContentMessage_MSG_RECEIVER_FETCH_FALLBACK ExtendedContentMessage_ExtendedContentType = 3025 ExtendedContentMessage_DATACLASS_SENDER_COPY ExtendedContentMessage_ExtendedContentType = 4000 ) // Enum value maps for ExtendedContentMessage_ExtendedContentType. var ( ExtendedContentMessage_ExtendedContentType_name = map[int32]string{ + 0: "UNSUPPORTED", 4: "IG_STORY_PHOTO_MENTION", 9: "IG_SINGLE_IMAGE_POST_SHARE", 10: "IG_MULTIPOST_SHARE", @@ -319,6 +401,10 @@ var ( 1008: "FB_FEED_POST_PRIVATE_REPLY", 1009: "FB_SHORT", 1010: "FB_COMMENT_MENTION_SHARE", + 1011: "FB_POST_MENTION", + 1013: "FB_PROFILE_DIRECTORY_ITEM", + 1014: "FB_FEED_POST_REACTION_REPLY", + 1015: "FB_QUICKSNAP_REPLY", 2000: "MSG_EXTERNAL_LINK_SHARE", 2001: "MSG_P2P_PAYMENT", 2002: "MSG_LOCATION_SHARING", @@ -336,6 +422,20 @@ var ( 2014: "MSG_AI_CONTACT", 2015: "MSG_MEMORIES_SHARE", 2016: "MSG_SHARED_ALBUM_REPLY", + 2017: "MSG_SHARED_ALBUM", + 2018: "MSG_OCCAMADILLO_XMA", + 2021: "MSG_GEN_AI_SUBSCRIPTION", + 2022: "MSG_GEN_AI_REMINDER", + 2023: "MSG_GEN_AI_MEMU_ONBOARDING_RESPONSE", + 2024: "MSG_NOTE_REPLY", + 2025: "MSG_NOTE_MENTION", + 2026: "GEN_AI_ENTITY", + 2027: "MSG_OPG_P2P_PAYMENT", + 2028: "GEN_AI_RICH_RESPONSE", + 2029: "MSG_MUSIC_STICKER", + 2030: "MSG_PHONE_NUMBER", + 2031: "AI_ACTIVITY_SHARE", + 2032: "MSG_PRIVATE_XMA", 3000: "RTC_AUDIO_CALL", 3001: "RTC_VIDEO_CALL", 3002: "RTC_MISSED_AUDIO_CALL", @@ -344,9 +444,13 @@ var ( 3005: "RTC_GROUP_VIDEO_CALL", 3006: "RTC_MISSED_GROUP_AUDIO_CALL", 3007: "RTC_MISSED_GROUP_VIDEO_CALL", + 3008: "RTC_ONGOING_AUDIO_CALL", + 3009: "RTC_ONGOING_VIDEO_CALL", + 3025: "MSG_RECEIVER_FETCH_FALLBACK", 4000: "DATACLASS_SENDER_COPY", } ExtendedContentMessage_ExtendedContentType_value = map[string]int32{ + "UNSUPPORTED": 0, "IG_STORY_PHOTO_MENTION": 4, "IG_SINGLE_IMAGE_POST_SHARE": 9, "IG_MULTIPOST_SHARE": 10, @@ -377,6 +481,10 @@ var ( "FB_FEED_POST_PRIVATE_REPLY": 1008, "FB_SHORT": 1009, "FB_COMMENT_MENTION_SHARE": 1010, + "FB_POST_MENTION": 1011, + "FB_PROFILE_DIRECTORY_ITEM": 1013, + "FB_FEED_POST_REACTION_REPLY": 1014, + "FB_QUICKSNAP_REPLY": 1015, "MSG_EXTERNAL_LINK_SHARE": 2000, "MSG_P2P_PAYMENT": 2001, "MSG_LOCATION_SHARING": 2002, @@ -394,6 +502,20 @@ var ( "MSG_AI_CONTACT": 2014, "MSG_MEMORIES_SHARE": 2015, "MSG_SHARED_ALBUM_REPLY": 2016, + "MSG_SHARED_ALBUM": 2017, + "MSG_OCCAMADILLO_XMA": 2018, + "MSG_GEN_AI_SUBSCRIPTION": 2021, + "MSG_GEN_AI_REMINDER": 2022, + "MSG_GEN_AI_MEMU_ONBOARDING_RESPONSE": 2023, + "MSG_NOTE_REPLY": 2024, + "MSG_NOTE_MENTION": 2025, + "GEN_AI_ENTITY": 2026, + "MSG_OPG_P2P_PAYMENT": 2027, + "GEN_AI_RICH_RESPONSE": 2028, + "MSG_MUSIC_STICKER": 2029, + "MSG_PHONE_NUMBER": 2030, + "AI_ACTIVITY_SHARE": 2031, + "MSG_PRIVATE_XMA": 2032, "RTC_AUDIO_CALL": 3000, "RTC_VIDEO_CALL": 3001, "RTC_MISSED_AUDIO_CALL": 3002, @@ -402,6 +524,9 @@ var ( "RTC_GROUP_VIDEO_CALL": 3005, "RTC_MISSED_GROUP_AUDIO_CALL": 3006, "RTC_MISSED_GROUP_VIDEO_CALL": 3007, + "RTC_ONGOING_AUDIO_CALL": 3008, + "RTC_ONGOING_VIDEO_CALL": 3009, + "MSG_RECEIVER_FETCH_FALLBACK": 3025, "DATACLASS_SENDER_COPY": 4000, } ) @@ -417,11 +542,11 @@ func (x ExtendedContentMessage_ExtendedContentType) String() string { } func (ExtendedContentMessage_ExtendedContentType) Descriptor() protoreflect.EnumDescriptor { - return file_waArmadilloXMA_WAArmadilloXMA_proto_enumTypes[3].Descriptor() + return file_waArmadilloXMA_WAArmadilloXMA_proto_enumTypes[4].Descriptor() } func (ExtendedContentMessage_ExtendedContentType) Type() protoreflect.EnumType { - return &file_waArmadilloXMA_WAArmadilloXMA_proto_enumTypes[3] + return &file_waArmadilloXMA_WAArmadilloXMA_proto_enumTypes[4] } func (x ExtendedContentMessage_ExtendedContentType) Number() protoreflect.EnumNumber { @@ -440,46 +565,49 @@ func (x *ExtendedContentMessage_ExtendedContentType) UnmarshalJSON(b []byte) err // Deprecated: Use ExtendedContentMessage_ExtendedContentType.Descriptor instead. func (ExtendedContentMessage_ExtendedContentType) EnumDescriptor() ([]byte, []int) { - return file_waArmadilloXMA_WAArmadilloXMA_proto_rawDescGZIP(), []int{0, 3} + return file_waArmadilloXMA_WAArmadilloXMA_proto_rawDescGZIP(), []int{0, 4} } type ExtendedContentMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - AssociatedMessage *waCommon.SubProtocol `protobuf:"bytes,1,opt,name=associatedMessage" json:"associatedMessage,omitempty"` - TargetType *ExtendedContentMessage_ExtendedContentType `protobuf:"varint,2,opt,name=targetType,enum=WAArmadilloXMA.ExtendedContentMessage_ExtendedContentType" json:"targetType,omitempty"` - TargetUsername *string `protobuf:"bytes,3,opt,name=targetUsername" json:"targetUsername,omitempty"` - TargetID *string `protobuf:"bytes,4,opt,name=targetID" json:"targetID,omitempty"` - TargetExpiringAtSec *int64 `protobuf:"varint,5,opt,name=targetExpiringAtSec" json:"targetExpiringAtSec,omitempty"` - XmaLayoutType *ExtendedContentMessage_XmaLayoutType `protobuf:"varint,6,opt,name=xmaLayoutType,enum=WAArmadilloXMA.ExtendedContentMessage_XmaLayoutType" json:"xmaLayoutType,omitempty"` - Ctas []*ExtendedContentMessage_CTA `protobuf:"bytes,7,rep,name=ctas" json:"ctas,omitempty"` - Previews []*waCommon.SubProtocol `protobuf:"bytes,8,rep,name=previews" json:"previews,omitempty"` - TitleText *string `protobuf:"bytes,9,opt,name=titleText" json:"titleText,omitempty"` - SubtitleText *string `protobuf:"bytes,10,opt,name=subtitleText" json:"subtitleText,omitempty"` - MaxTitleNumOfLines *uint32 `protobuf:"varint,11,opt,name=maxTitleNumOfLines" json:"maxTitleNumOfLines,omitempty"` - MaxSubtitleNumOfLines *uint32 `protobuf:"varint,12,opt,name=maxSubtitleNumOfLines" json:"maxSubtitleNumOfLines,omitempty"` - Favicon *waCommon.SubProtocol `protobuf:"bytes,13,opt,name=favicon" json:"favicon,omitempty"` - HeaderImage *waCommon.SubProtocol `protobuf:"bytes,14,opt,name=headerImage" json:"headerImage,omitempty"` - HeaderTitle *string `protobuf:"bytes,15,opt,name=headerTitle" json:"headerTitle,omitempty"` - OverlayIconGlyph *ExtendedContentMessage_OverlayIconGlyph `protobuf:"varint,16,opt,name=overlayIconGlyph,enum=WAArmadilloXMA.ExtendedContentMessage_OverlayIconGlyph" json:"overlayIconGlyph,omitempty"` - OverlayTitle *string `protobuf:"bytes,17,opt,name=overlayTitle" json:"overlayTitle,omitempty"` - OverlayDescription *string `protobuf:"bytes,18,opt,name=overlayDescription" json:"overlayDescription,omitempty"` - SentWithMessageID *string `protobuf:"bytes,19,opt,name=sentWithMessageID" json:"sentWithMessageID,omitempty"` - MessageText *string `protobuf:"bytes,20,opt,name=messageText" json:"messageText,omitempty"` - HeaderSubtitle *string `protobuf:"bytes,21,opt,name=headerSubtitle" json:"headerSubtitle,omitempty"` - XmaDataclass *string `protobuf:"bytes,22,opt,name=xmaDataclass" json:"xmaDataclass,omitempty"` - ContentRef *string `protobuf:"bytes,23,opt,name=contentRef" json:"contentRef,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + AssociatedMessage *waCommon.SubProtocol `protobuf:"bytes,1,opt,name=associatedMessage" json:"associatedMessage,omitempty"` + TargetType *ExtendedContentMessage_ExtendedContentType `protobuf:"varint,2,opt,name=targetType,enum=WAArmadilloXMA.ExtendedContentMessage_ExtendedContentType" json:"targetType,omitempty"` + TargetUsername *string `protobuf:"bytes,3,opt,name=targetUsername" json:"targetUsername,omitempty"` + TargetID *string `protobuf:"bytes,4,opt,name=targetID" json:"targetID,omitempty"` + TargetExpiringAtSec *int64 `protobuf:"varint,5,opt,name=targetExpiringAtSec" json:"targetExpiringAtSec,omitempty"` + XmaLayoutType *ExtendedContentMessage_XmaLayoutType `protobuf:"varint,6,opt,name=xmaLayoutType,enum=WAArmadilloXMA.ExtendedContentMessage_XmaLayoutType" json:"xmaLayoutType,omitempty"` + Ctas []*ExtendedContentMessage_CTA `protobuf:"bytes,7,rep,name=ctas" json:"ctas,omitempty"` + Previews []*waCommon.SubProtocol `protobuf:"bytes,8,rep,name=previews" json:"previews,omitempty"` + TitleText *string `protobuf:"bytes,9,opt,name=titleText" json:"titleText,omitempty"` + SubtitleText *string `protobuf:"bytes,10,opt,name=subtitleText" json:"subtitleText,omitempty"` + MaxTitleNumOfLines *uint32 `protobuf:"varint,11,opt,name=maxTitleNumOfLines" json:"maxTitleNumOfLines,omitempty"` + MaxSubtitleNumOfLines *uint32 `protobuf:"varint,12,opt,name=maxSubtitleNumOfLines" json:"maxSubtitleNumOfLines,omitempty"` + Favicon *waCommon.SubProtocol `protobuf:"bytes,13,opt,name=favicon" json:"favicon,omitempty"` + HeaderImage *waCommon.SubProtocol `protobuf:"bytes,14,opt,name=headerImage" json:"headerImage,omitempty"` + HeaderTitle *string `protobuf:"bytes,15,opt,name=headerTitle" json:"headerTitle,omitempty"` + OverlayIconGlyph *ExtendedContentMessage_OverlayIconGlyph `protobuf:"varint,16,opt,name=overlayIconGlyph,enum=WAArmadilloXMA.ExtendedContentMessage_OverlayIconGlyph" json:"overlayIconGlyph,omitempty"` + OverlayTitle *string `protobuf:"bytes,17,opt,name=overlayTitle" json:"overlayTitle,omitempty"` + OverlayDescription *string `protobuf:"bytes,18,opt,name=overlayDescription" json:"overlayDescription,omitempty"` + SentWithMessageID *string `protobuf:"bytes,19,opt,name=sentWithMessageID" json:"sentWithMessageID,omitempty"` + MessageText *string `protobuf:"bytes,20,opt,name=messageText" json:"messageText,omitempty"` + HeaderSubtitle *string `protobuf:"bytes,21,opt,name=headerSubtitle" json:"headerSubtitle,omitempty"` + XmaDataclass *string `protobuf:"bytes,22,opt,name=xmaDataclass" json:"xmaDataclass,omitempty"` + ContentRef *string `protobuf:"bytes,23,opt,name=contentRef" json:"contentRef,omitempty"` + MentionedJID []string `protobuf:"bytes,24,rep,name=mentionedJID" json:"mentionedJID,omitempty"` + Commands []*waCommon.Command `protobuf:"bytes,25,rep,name=commands" json:"commands,omitempty"` + Mentions []*waCommon.Mention `protobuf:"bytes,26,rep,name=mentions" json:"mentions,omitempty"` + XmaDataclassType *ExtendedContentMessage_XmaDataclassType `protobuf:"varint,27,opt,name=xmaDataclassType,enum=WAArmadilloXMA.ExtendedContentMessage_XmaDataclassType" json:"xmaDataclassType,omitempty"` + SignedXmaDataclassValidation *string `protobuf:"bytes,28,opt,name=signedXmaDataclassValidation" json:"signedXmaDataclassValidation,omitempty"` + FeatureSharedSessionID *string `protobuf:"bytes,29,opt,name=featureSharedSessionID" json:"featureSharedSessionID,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ExtendedContentMessage) Reset() { *x = ExtendedContentMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_waArmadilloXMA_WAArmadilloXMA_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waArmadilloXMA_WAArmadilloXMA_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ExtendedContentMessage) String() string { @@ -490,7 +618,7 @@ func (*ExtendedContentMessage) ProtoMessage() {} func (x *ExtendedContentMessage) ProtoReflect() protoreflect.Message { mi := &file_waArmadilloXMA_WAArmadilloXMA_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -516,7 +644,7 @@ func (x *ExtendedContentMessage) GetTargetType() ExtendedContentMessage_Extended if x != nil && x.TargetType != nil { return *x.TargetType } - return ExtendedContentMessage_IG_STORY_PHOTO_MENTION + return ExtendedContentMessage_UNSUPPORTED } func (x *ExtendedContentMessage) GetTargetUsername() string { @@ -666,26 +794,65 @@ func (x *ExtendedContentMessage) GetContentRef() string { return "" } -type ExtendedContentMessage_CTA struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +func (x *ExtendedContentMessage) GetMentionedJID() []string { + if x != nil { + return x.MentionedJID + } + return nil +} + +func (x *ExtendedContentMessage) GetCommands() []*waCommon.Command { + if x != nil { + return x.Commands + } + return nil +} +func (x *ExtendedContentMessage) GetMentions() []*waCommon.Mention { + if x != nil { + return x.Mentions + } + return nil +} + +func (x *ExtendedContentMessage) GetXmaDataclassType() ExtendedContentMessage_XmaDataclassType { + if x != nil && x.XmaDataclassType != nil { + return *x.XmaDataclassType + } + return ExtendedContentMessage_SENDER_COPY +} + +func (x *ExtendedContentMessage) GetSignedXmaDataclassValidation() string { + if x != nil && x.SignedXmaDataclassValidation != nil { + return *x.SignedXmaDataclassValidation + } + return "" +} + +func (x *ExtendedContentMessage) GetFeatureSharedSessionID() string { + if x != nil && x.FeatureSharedSessionID != nil { + return *x.FeatureSharedSessionID + } + return "" +} + +type ExtendedContentMessage_CTA struct { + state protoimpl.MessageState `protogen:"open.v1"` ButtonType *ExtendedContentMessage_CtaButtonType `protobuf:"varint,1,opt,name=buttonType,enum=WAArmadilloXMA.ExtendedContentMessage_CtaButtonType" json:"buttonType,omitempty"` Title *string `protobuf:"bytes,2,opt,name=title" json:"title,omitempty"` ActionURL *string `protobuf:"bytes,3,opt,name=actionURL" json:"actionURL,omitempty"` NativeURL *string `protobuf:"bytes,4,opt,name=nativeURL" json:"nativeURL,omitempty"` CtaType *string `protobuf:"bytes,5,opt,name=ctaType" json:"ctaType,omitempty"` ActionContentBlob *string `protobuf:"bytes,6,opt,name=actionContentBlob" json:"actionContentBlob,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ExtendedContentMessage_CTA) Reset() { *x = ExtendedContentMessage_CTA{} - if protoimpl.UnsafeEnabled { - mi := &file_waArmadilloXMA_WAArmadilloXMA_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waArmadilloXMA_WAArmadilloXMA_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ExtendedContentMessage_CTA) String() string { @@ -696,7 +863,7 @@ func (*ExtendedContentMessage_CTA) ProtoMessage() {} func (x *ExtendedContentMessage_CTA) ProtoReflect() protoreflect.Message { mi := &file_waArmadilloXMA_WAArmadilloXMA_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -755,47 +922,206 @@ func (x *ExtendedContentMessage_CTA) GetActionContentBlob() string { var File_waArmadilloXMA_WAArmadilloXMA_proto protoreflect.FileDescriptor -//go:embed WAArmadilloXMA.pb.raw -var file_waArmadilloXMA_WAArmadilloXMA_proto_rawDesc []byte +const file_waArmadilloXMA_WAArmadilloXMA_proto_rawDesc = "" + + "\n" + + "#waArmadilloXMA/WAArmadilloXMA.proto\x12\x0eWAArmadilloXMA\x1a\x17waCommon/WACommon.proto\"\x96!\n" + + "\x16ExtendedContentMessage\x12C\n" + + "\x11associatedMessage\x18\x01 \x01(\v2\x15.WACommon.SubProtocolR\x11associatedMessage\x12Z\n" + + "\n" + + "targetType\x18\x02 \x01(\x0e2:.WAArmadilloXMA.ExtendedContentMessage.ExtendedContentTypeR\n" + + "targetType\x12&\n" + + "\x0etargetUsername\x18\x03 \x01(\tR\x0etargetUsername\x12\x1a\n" + + "\btargetID\x18\x04 \x01(\tR\btargetID\x120\n" + + "\x13targetExpiringAtSec\x18\x05 \x01(\x03R\x13targetExpiringAtSec\x12Z\n" + + "\rxmaLayoutType\x18\x06 \x01(\x0e24.WAArmadilloXMA.ExtendedContentMessage.XmaLayoutTypeR\rxmaLayoutType\x12>\n" + + "\x04ctas\x18\a \x03(\v2*.WAArmadilloXMA.ExtendedContentMessage.CTAR\x04ctas\x121\n" + + "\bpreviews\x18\b \x03(\v2\x15.WACommon.SubProtocolR\bpreviews\x12\x1c\n" + + "\ttitleText\x18\t \x01(\tR\ttitleText\x12\"\n" + + "\fsubtitleText\x18\n" + + " \x01(\tR\fsubtitleText\x12.\n" + + "\x12maxTitleNumOfLines\x18\v \x01(\rR\x12maxTitleNumOfLines\x124\n" + + "\x15maxSubtitleNumOfLines\x18\f \x01(\rR\x15maxSubtitleNumOfLines\x12/\n" + + "\afavicon\x18\r \x01(\v2\x15.WACommon.SubProtocolR\afavicon\x127\n" + + "\vheaderImage\x18\x0e \x01(\v2\x15.WACommon.SubProtocolR\vheaderImage\x12 \n" + + "\vheaderTitle\x18\x0f \x01(\tR\vheaderTitle\x12c\n" + + "\x10overlayIconGlyph\x18\x10 \x01(\x0e27.WAArmadilloXMA.ExtendedContentMessage.OverlayIconGlyphR\x10overlayIconGlyph\x12\"\n" + + "\foverlayTitle\x18\x11 \x01(\tR\foverlayTitle\x12.\n" + + "\x12overlayDescription\x18\x12 \x01(\tR\x12overlayDescription\x12,\n" + + "\x11sentWithMessageID\x18\x13 \x01(\tR\x11sentWithMessageID\x12 \n" + + "\vmessageText\x18\x14 \x01(\tR\vmessageText\x12&\n" + + "\x0eheaderSubtitle\x18\x15 \x01(\tR\x0eheaderSubtitle\x12\"\n" + + "\fxmaDataclass\x18\x16 \x01(\tR\fxmaDataclass\x12\x1e\n" + + "\n" + + "contentRef\x18\x17 \x01(\tR\n" + + "contentRef\x12\"\n" + + "\fmentionedJID\x18\x18 \x03(\tR\fmentionedJID\x12-\n" + + "\bcommands\x18\x19 \x03(\v2\x11.WACommon.CommandR\bcommands\x12-\n" + + "\bmentions\x18\x1a \x03(\v2\x11.WACommon.MentionR\bmentions\x12c\n" + + "\x10xmaDataclassType\x18\x1b \x01(\x0e27.WAArmadilloXMA.ExtendedContentMessage.XmaDataclassTypeR\x10xmaDataclassType\x12B\n" + + "\x1csignedXmaDataclassValidation\x18\x1c \x01(\tR\x1csignedXmaDataclassValidation\x126\n" + + "\x16featureSharedSessionID\x18\x1d \x01(\tR\x16featureSharedSessionID\x1a\xf5\x01\n" + + "\x03CTA\x12T\n" + + "\n" + + "buttonType\x18\x01 \x01(\x0e24.WAArmadilloXMA.ExtendedContentMessage.CtaButtonTypeR\n" + + "buttonType\x12\x14\n" + + "\x05title\x18\x02 \x01(\tR\x05title\x12\x1c\n" + + "\tactionURL\x18\x03 \x01(\tR\tactionURL\x12\x1c\n" + + "\tnativeURL\x18\x04 \x01(\tR\tnativeURL\x12\x18\n" + + "\actaType\x18\x05 \x01(\tR\actaType\x12,\n" + + "\x11actionContentBlob\x18\x06 \x01(\tR\x11actionContentBlob\"B\n" + + "\x10XmaDataclassType\x12\x0f\n" + + "\vSENDER_COPY\x10\x00\x12\n" + + "\n" + + "\x06SERVER\x10\x01\x12\x11\n" + + "\rSIGNED_CLIENT\x10\x02\"\xa1\x01\n" + + "\x10OverlayIconGlyph\x12\b\n" + + "\x04INFO\x10\x00\x12\v\n" + + "\aEYE_OFF\x10\x01\x12\f\n" + + "\bNEWS_OFF\x10\x02\x12\v\n" + + "\aWARNING\x10\x03\x12\v\n" + + "\aPRIVATE\x10\x04\x12\b\n" + + "\x04NONE\x10\x05\x12\x0f\n" + + "\vMEDIA_LABEL\x10\x06\x12\x0e\n" + + "\n" + + "POST_COVER\x10\a\x12\x0e\n" + + "\n" + + "POST_LABEL\x10\b\x12\x13\n" + + "\x0fWARNING_SCREENS\x10\t\" \n" + + "\rCtaButtonType\x12\x0f\n" + + "\vOPEN_NATIVE\x10\v\"b\n" + + "\rXmaLayoutType\x12\n" + + "\n" + + "\x06SINGLE\x10\x00\x12\v\n" + + "\aHSCROLL\x10\x01\x12\f\n" + + "\bPORTRAIT\x10\x03\x12\x11\n" + + "\rSTANDARD_DXMA\x10\f\x12\r\n" + + "\tLIST_DXMA\x10\x0f\x12\b\n" + + "\x04GRID\x10\x10\"\xa3\x10\n" + + "\x13ExtendedContentType\x12\x0f\n" + + "\vUNSUPPORTED\x10\x00\x12\x1a\n" + + "\x16IG_STORY_PHOTO_MENTION\x10\x04\x12\x1e\n" + + "\x1aIG_SINGLE_IMAGE_POST_SHARE\x10\t\x12\x16\n" + + "\x12IG_MULTIPOST_SHARE\x10\n" + + "\x12\x1e\n" + + "\x1aIG_SINGLE_VIDEO_POST_SHARE\x10\v\x12\x18\n" + + "\x14IG_STORY_PHOTO_SHARE\x10\f\x12\x18\n" + + "\x14IG_STORY_VIDEO_SHARE\x10\r\x12\x12\n" + + "\x0eIG_CLIPS_SHARE\x10\x0e\x12\x11\n" + + "\rIG_IGTV_SHARE\x10\x0f\x12\x11\n" + + "\rIG_SHOP_SHARE\x10\x10\x12\x14\n" + + "\x10IG_PROFILE_SHARE\x10\x13\x12\"\n" + + "\x1eIG_STORY_PHOTO_HIGHLIGHT_SHARE\x10\x14\x12\"\n" + + "\x1eIG_STORY_VIDEO_HIGHLIGHT_SHARE\x10\x15\x12\x12\n" + + "\x0eIG_STORY_REPLY\x10\x16\x12\x15\n" + + "\x11IG_STORY_REACTION\x10\x17\x12\x1a\n" + + "\x16IG_STORY_VIDEO_MENTION\x10\x18\x12\x1c\n" + + "\x18IG_STORY_HIGHLIGHT_REPLY\x10\x19\x12\x1f\n" + + "\x1bIG_STORY_HIGHLIGHT_REACTION\x10\x1a\x12\x14\n" + + "\x10IG_EXTERNAL_LINK\x10\x1b\x12\x15\n" + + "\x11IG_RECEIVER_FETCH\x10\x1c\x12\x12\n" + + "\rFB_FEED_SHARE\x10\xe8\a\x12\x13\n" + + "\x0eFB_STORY_REPLY\x10\xe9\a\x12\x13\n" + + "\x0eFB_STORY_SHARE\x10\xea\a\x12\x15\n" + + "\x10FB_STORY_MENTION\x10\xeb\a\x12\x18\n" + + "\x13FB_FEED_VIDEO_SHARE\x10\xec\a\x12\x1c\n" + + "\x17FB_GAMING_CUSTOM_UPDATE\x10\xed\a\x12\x1c\n" + + "\x17FB_PRODUCER_STORY_REPLY\x10\xee\a\x12\r\n" + + "\bFB_EVENT\x10\xef\a\x12\x1f\n" + + "\x1aFB_FEED_POST_PRIVATE_REPLY\x10\xf0\a\x12\r\n" + + "\bFB_SHORT\x10\xf1\a\x12\x1d\n" + + "\x18FB_COMMENT_MENTION_SHARE\x10\xf2\a\x12\x14\n" + + "\x0fFB_POST_MENTION\x10\xf3\a\x12\x1e\n" + + "\x19FB_PROFILE_DIRECTORY_ITEM\x10\xf5\a\x12 \n" + + "\x1bFB_FEED_POST_REACTION_REPLY\x10\xf6\a\x12\x17\n" + + "\x12FB_QUICKSNAP_REPLY\x10\xf7\a\x12\x1c\n" + + "\x17MSG_EXTERNAL_LINK_SHARE\x10\xd0\x0f\x12\x14\n" + + "\x0fMSG_P2P_PAYMENT\x10\xd1\x0f\x12\x19\n" + + "\x14MSG_LOCATION_SHARING\x10\xd2\x0f\x12\x1c\n" + + "\x17MSG_LOCATION_SHARING_V2\x10\xd3\x0f\x12,\n" + + "'MSG_HIGHLIGHTS_TAB_FRIEND_UPDATES_REPLY\x10\xd4\x0f\x12)\n" + + "$MSG_HIGHLIGHTS_TAB_LOCAL_EVENT_REPLY\x10\xd5\x0f\x12\x17\n" + + "\x12MSG_RECEIVER_FETCH\x10\xd6\x0f\x12\x17\n" + + "\x12MSG_IG_MEDIA_SHARE\x10\xd7\x0f\x12&\n" + + "!MSG_GEN_AI_SEARCH_PLUGIN_RESPONSE\x10\xd8\x0f\x12\x13\n" + + "\x0eMSG_REELS_LIST\x10\xd9\x0f\x12\x10\n" + + "\vMSG_CONTACT\x10\xda\x0f\x12\x1b\n" + + "\x16MSG_THREADS_POST_SHARE\x10\xdb\x0f\x12\r\n" + + "\bMSG_FILE\x10\xdc\x0f\x12\x17\n" + + "\x12MSG_AVATAR_DETAILS\x10\xdd\x0f\x12\x13\n" + + "\x0eMSG_AI_CONTACT\x10\xde\x0f\x12\x17\n" + + "\x12MSG_MEMORIES_SHARE\x10\xdf\x0f\x12\x1b\n" + + "\x16MSG_SHARED_ALBUM_REPLY\x10\xe0\x0f\x12\x15\n" + + "\x10MSG_SHARED_ALBUM\x10\xe1\x0f\x12\x18\n" + + "\x13MSG_OCCAMADILLO_XMA\x10\xe2\x0f\x12\x1c\n" + + "\x17MSG_GEN_AI_SUBSCRIPTION\x10\xe5\x0f\x12\x18\n" + + "\x13MSG_GEN_AI_REMINDER\x10\xe6\x0f\x12(\n" + + "#MSG_GEN_AI_MEMU_ONBOARDING_RESPONSE\x10\xe7\x0f\x12\x13\n" + + "\x0eMSG_NOTE_REPLY\x10\xe8\x0f\x12\x15\n" + + "\x10MSG_NOTE_MENTION\x10\xe9\x0f\x12\x12\n" + + "\rGEN_AI_ENTITY\x10\xea\x0f\x12\x18\n" + + "\x13MSG_OPG_P2P_PAYMENT\x10\xeb\x0f\x12\x19\n" + + "\x14GEN_AI_RICH_RESPONSE\x10\xec\x0f\x12\x16\n" + + "\x11MSG_MUSIC_STICKER\x10\xed\x0f\x12\x15\n" + + "\x10MSG_PHONE_NUMBER\x10\xee\x0f\x12\x16\n" + + "\x11AI_ACTIVITY_SHARE\x10\xef\x0f\x12\x14\n" + + "\x0fMSG_PRIVATE_XMA\x10\xf0\x0f\x12\x13\n" + + "\x0eRTC_AUDIO_CALL\x10\xb8\x17\x12\x13\n" + + "\x0eRTC_VIDEO_CALL\x10\xb9\x17\x12\x1a\n" + + "\x15RTC_MISSED_AUDIO_CALL\x10\xba\x17\x12\x1a\n" + + "\x15RTC_MISSED_VIDEO_CALL\x10\xbb\x17\x12\x19\n" + + "\x14RTC_GROUP_AUDIO_CALL\x10\xbc\x17\x12\x19\n" + + "\x14RTC_GROUP_VIDEO_CALL\x10\xbd\x17\x12 \n" + + "\x1bRTC_MISSED_GROUP_AUDIO_CALL\x10\xbe\x17\x12 \n" + + "\x1bRTC_MISSED_GROUP_VIDEO_CALL\x10\xbf\x17\x12\x1b\n" + + "\x16RTC_ONGOING_AUDIO_CALL\x10\xc0\x17\x12\x1b\n" + + "\x16RTC_ONGOING_VIDEO_CALL\x10\xc1\x17\x12 \n" + + "\x1bMSG_RECEIVER_FETCH_FALLBACK\x10\xd1\x17\x12\x1a\n" + + "\x15DATACLASS_SENDER_COPY\x10\xa0\x1fB*Z(go.mau.fi/whatsmeow/proto/waArmadilloXMA" var ( file_waArmadilloXMA_WAArmadilloXMA_proto_rawDescOnce sync.Once - file_waArmadilloXMA_WAArmadilloXMA_proto_rawDescData = file_waArmadilloXMA_WAArmadilloXMA_proto_rawDesc + file_waArmadilloXMA_WAArmadilloXMA_proto_rawDescData []byte ) func file_waArmadilloXMA_WAArmadilloXMA_proto_rawDescGZIP() []byte { file_waArmadilloXMA_WAArmadilloXMA_proto_rawDescOnce.Do(func() { - file_waArmadilloXMA_WAArmadilloXMA_proto_rawDescData = protoimpl.X.CompressGZIP(file_waArmadilloXMA_WAArmadilloXMA_proto_rawDescData) + file_waArmadilloXMA_WAArmadilloXMA_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_waArmadilloXMA_WAArmadilloXMA_proto_rawDesc), len(file_waArmadilloXMA_WAArmadilloXMA_proto_rawDesc))) }) return file_waArmadilloXMA_WAArmadilloXMA_proto_rawDescData } -var file_waArmadilloXMA_WAArmadilloXMA_proto_enumTypes = make([]protoimpl.EnumInfo, 4) +var file_waArmadilloXMA_WAArmadilloXMA_proto_enumTypes = make([]protoimpl.EnumInfo, 5) var file_waArmadilloXMA_WAArmadilloXMA_proto_msgTypes = make([]protoimpl.MessageInfo, 2) var file_waArmadilloXMA_WAArmadilloXMA_proto_goTypes = []any{ - (ExtendedContentMessage_OverlayIconGlyph)(0), // 0: WAArmadilloXMA.ExtendedContentMessage.OverlayIconGlyph - (ExtendedContentMessage_CtaButtonType)(0), // 1: WAArmadilloXMA.ExtendedContentMessage.CtaButtonType - (ExtendedContentMessage_XmaLayoutType)(0), // 2: WAArmadilloXMA.ExtendedContentMessage.XmaLayoutType - (ExtendedContentMessage_ExtendedContentType)(0), // 3: WAArmadilloXMA.ExtendedContentMessage.ExtendedContentType - (*ExtendedContentMessage)(nil), // 4: WAArmadilloXMA.ExtendedContentMessage - (*ExtendedContentMessage_CTA)(nil), // 5: WAArmadilloXMA.ExtendedContentMessage.CTA - (*waCommon.SubProtocol)(nil), // 6: WACommon.SubProtocol + (ExtendedContentMessage_XmaDataclassType)(0), // 0: WAArmadilloXMA.ExtendedContentMessage.XmaDataclassType + (ExtendedContentMessage_OverlayIconGlyph)(0), // 1: WAArmadilloXMA.ExtendedContentMessage.OverlayIconGlyph + (ExtendedContentMessage_CtaButtonType)(0), // 2: WAArmadilloXMA.ExtendedContentMessage.CtaButtonType + (ExtendedContentMessage_XmaLayoutType)(0), // 3: WAArmadilloXMA.ExtendedContentMessage.XmaLayoutType + (ExtendedContentMessage_ExtendedContentType)(0), // 4: WAArmadilloXMA.ExtendedContentMessage.ExtendedContentType + (*ExtendedContentMessage)(nil), // 5: WAArmadilloXMA.ExtendedContentMessage + (*ExtendedContentMessage_CTA)(nil), // 6: WAArmadilloXMA.ExtendedContentMessage.CTA + (*waCommon.SubProtocol)(nil), // 7: WACommon.SubProtocol + (*waCommon.Command)(nil), // 8: WACommon.Command + (*waCommon.Mention)(nil), // 9: WACommon.Mention } var file_waArmadilloXMA_WAArmadilloXMA_proto_depIdxs = []int32{ - 6, // 0: WAArmadilloXMA.ExtendedContentMessage.associatedMessage:type_name -> WACommon.SubProtocol - 3, // 1: WAArmadilloXMA.ExtendedContentMessage.targetType:type_name -> WAArmadilloXMA.ExtendedContentMessage.ExtendedContentType - 2, // 2: WAArmadilloXMA.ExtendedContentMessage.xmaLayoutType:type_name -> WAArmadilloXMA.ExtendedContentMessage.XmaLayoutType - 5, // 3: WAArmadilloXMA.ExtendedContentMessage.ctas:type_name -> WAArmadilloXMA.ExtendedContentMessage.CTA - 6, // 4: WAArmadilloXMA.ExtendedContentMessage.previews:type_name -> WACommon.SubProtocol - 6, // 5: WAArmadilloXMA.ExtendedContentMessage.favicon:type_name -> WACommon.SubProtocol - 6, // 6: WAArmadilloXMA.ExtendedContentMessage.headerImage:type_name -> WACommon.SubProtocol - 0, // 7: WAArmadilloXMA.ExtendedContentMessage.overlayIconGlyph:type_name -> WAArmadilloXMA.ExtendedContentMessage.OverlayIconGlyph - 1, // 8: WAArmadilloXMA.ExtendedContentMessage.CTA.buttonType:type_name -> WAArmadilloXMA.ExtendedContentMessage.CtaButtonType - 9, // [9:9] is the sub-list for method output_type - 9, // [9:9] is the sub-list for method input_type - 9, // [9:9] is the sub-list for extension type_name - 9, // [9:9] is the sub-list for extension extendee - 0, // [0:9] is the sub-list for field type_name + 7, // 0: WAArmadilloXMA.ExtendedContentMessage.associatedMessage:type_name -> WACommon.SubProtocol + 4, // 1: WAArmadilloXMA.ExtendedContentMessage.targetType:type_name -> WAArmadilloXMA.ExtendedContentMessage.ExtendedContentType + 3, // 2: WAArmadilloXMA.ExtendedContentMessage.xmaLayoutType:type_name -> WAArmadilloXMA.ExtendedContentMessage.XmaLayoutType + 6, // 3: WAArmadilloXMA.ExtendedContentMessage.ctas:type_name -> WAArmadilloXMA.ExtendedContentMessage.CTA + 7, // 4: WAArmadilloXMA.ExtendedContentMessage.previews:type_name -> WACommon.SubProtocol + 7, // 5: WAArmadilloXMA.ExtendedContentMessage.favicon:type_name -> WACommon.SubProtocol + 7, // 6: WAArmadilloXMA.ExtendedContentMessage.headerImage:type_name -> WACommon.SubProtocol + 1, // 7: WAArmadilloXMA.ExtendedContentMessage.overlayIconGlyph:type_name -> WAArmadilloXMA.ExtendedContentMessage.OverlayIconGlyph + 8, // 8: WAArmadilloXMA.ExtendedContentMessage.commands:type_name -> WACommon.Command + 9, // 9: WAArmadilloXMA.ExtendedContentMessage.mentions:type_name -> WACommon.Mention + 0, // 10: WAArmadilloXMA.ExtendedContentMessage.xmaDataclassType:type_name -> WAArmadilloXMA.ExtendedContentMessage.XmaDataclassType + 2, // 11: WAArmadilloXMA.ExtendedContentMessage.CTA.buttonType:type_name -> WAArmadilloXMA.ExtendedContentMessage.CtaButtonType + 12, // [12:12] is the sub-list for method output_type + 12, // [12:12] is the sub-list for method input_type + 12, // [12:12] is the sub-list for extension type_name + 12, // [12:12] is the sub-list for extension extendee + 0, // [0:12] is the sub-list for field type_name } func init() { file_waArmadilloXMA_WAArmadilloXMA_proto_init() } @@ -803,38 +1129,12 @@ func file_waArmadilloXMA_WAArmadilloXMA_proto_init() { if File_waArmadilloXMA_WAArmadilloXMA_proto != nil { return } - if !protoimpl.UnsafeEnabled { - file_waArmadilloXMA_WAArmadilloXMA_proto_msgTypes[0].Exporter = func(v any, i int) any { - switch v := v.(*ExtendedContentMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waArmadilloXMA_WAArmadilloXMA_proto_msgTypes[1].Exporter = func(v any, i int) any { - switch v := v.(*ExtendedContentMessage_CTA); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_waArmadilloXMA_WAArmadilloXMA_proto_rawDesc, - NumEnums: 4, + RawDescriptor: unsafe.Slice(unsafe.StringData(file_waArmadilloXMA_WAArmadilloXMA_proto_rawDesc), len(file_waArmadilloXMA_WAArmadilloXMA_proto_rawDesc)), + NumEnums: 5, NumMessages: 2, NumExtensions: 0, NumServices: 0, @@ -845,7 +1145,6 @@ func file_waArmadilloXMA_WAArmadilloXMA_proto_init() { MessageInfos: file_waArmadilloXMA_WAArmadilloXMA_proto_msgTypes, }.Build() File_waArmadilloXMA_WAArmadilloXMA_proto = out.File - file_waArmadilloXMA_WAArmadilloXMA_proto_rawDesc = nil file_waArmadilloXMA_WAArmadilloXMA_proto_goTypes = nil file_waArmadilloXMA_WAArmadilloXMA_proto_depIdxs = nil } diff --git a/vendor/go.mau.fi/whatsmeow/proto/waArmadilloXMA/WAArmadilloXMA.pb.raw b/vendor/go.mau.fi/whatsmeow/proto/waArmadilloXMA/WAArmadilloXMA.pb.raw deleted file mode 100644 index 91a2ff4eb6..0000000000 Binary files a/vendor/go.mau.fi/whatsmeow/proto/waArmadilloXMA/WAArmadilloXMA.pb.raw and /dev/null differ diff --git a/vendor/go.mau.fi/whatsmeow/proto/waArmadilloXMA/WAArmadilloXMA.proto b/vendor/go.mau.fi/whatsmeow/proto/waArmadilloXMA/WAArmadilloXMA.proto index f71aa556dc..5d97ad45c8 100644 --- a/vendor/go.mau.fi/whatsmeow/proto/waArmadilloXMA/WAArmadilloXMA.proto +++ b/vendor/go.mau.fi/whatsmeow/proto/waArmadilloXMA/WAArmadilloXMA.proto @@ -5,6 +5,12 @@ option go_package = "go.mau.fi/whatsmeow/proto/waArmadilloXMA"; import "waCommon/WACommon.proto"; message ExtendedContentMessage { + enum XmaDataclassType { + SENDER_COPY = 0; + SERVER = 1; + SIGNED_CLIENT = 2; + } + enum OverlayIconGlyph { INFO = 0; EYE_OFF = 1; @@ -32,6 +38,7 @@ message ExtendedContentMessage { } enum ExtendedContentType { + UNSUPPORTED = 0; IG_STORY_PHOTO_MENTION = 4; IG_SINGLE_IMAGE_POST_SHARE = 9; IG_MULTIPOST_SHARE = 10; @@ -62,6 +69,10 @@ message ExtendedContentMessage { FB_FEED_POST_PRIVATE_REPLY = 1008; FB_SHORT = 1009; FB_COMMENT_MENTION_SHARE = 1010; + FB_POST_MENTION = 1011; + FB_PROFILE_DIRECTORY_ITEM = 1013; + FB_FEED_POST_REACTION_REPLY = 1014; + FB_QUICKSNAP_REPLY = 1015; MSG_EXTERNAL_LINK_SHARE = 2000; MSG_P2P_PAYMENT = 2001; MSG_LOCATION_SHARING = 2002; @@ -79,6 +90,20 @@ message ExtendedContentMessage { MSG_AI_CONTACT = 2014; MSG_MEMORIES_SHARE = 2015; MSG_SHARED_ALBUM_REPLY = 2016; + MSG_SHARED_ALBUM = 2017; + MSG_OCCAMADILLO_XMA = 2018; + MSG_GEN_AI_SUBSCRIPTION = 2021; + MSG_GEN_AI_REMINDER = 2022; + MSG_GEN_AI_MEMU_ONBOARDING_RESPONSE = 2023; + MSG_NOTE_REPLY = 2024; + MSG_NOTE_MENTION = 2025; + GEN_AI_ENTITY = 2026; + MSG_OPG_P2P_PAYMENT = 2027; + GEN_AI_RICH_RESPONSE = 2028; + MSG_MUSIC_STICKER = 2029; + MSG_PHONE_NUMBER = 2030; + AI_ACTIVITY_SHARE = 2031; + MSG_PRIVATE_XMA = 2032; RTC_AUDIO_CALL = 3000; RTC_VIDEO_CALL = 3001; RTC_MISSED_AUDIO_CALL = 3002; @@ -87,6 +112,9 @@ message ExtendedContentMessage { RTC_GROUP_VIDEO_CALL = 3005; RTC_MISSED_GROUP_AUDIO_CALL = 3006; RTC_MISSED_GROUP_VIDEO_CALL = 3007; + RTC_ONGOING_AUDIO_CALL = 3008; + RTC_ONGOING_VIDEO_CALL = 3009; + MSG_RECEIVER_FETCH_FALLBACK = 3025; DATACLASS_SENDER_COPY = 4000; } @@ -122,4 +150,10 @@ message ExtendedContentMessage { optional string headerSubtitle = 21; optional string xmaDataclass = 22; optional string contentRef = 23; + repeated string mentionedJID = 24; + repeated WACommon.Command commands = 25; + repeated WACommon.Mention mentions = 26; + optional XmaDataclassType xmaDataclassType = 27; + optional string signedXmaDataclassValidation = 28; + optional string featureSharedSessionID = 29; } diff --git a/vendor/go.mau.fi/whatsmeow/proto/waBotMetadata/WABotMetadata.pb.go b/vendor/go.mau.fi/whatsmeow/proto/waBotMetadata/WABotMetadata.pb.go new file mode 100644 index 0000000000..311f564e41 --- /dev/null +++ b/vendor/go.mau.fi/whatsmeow/proto/waBotMetadata/WABotMetadata.pb.go @@ -0,0 +1,5254 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.36.10 +// protoc v3.21.12 +// source: waBotMetadata/WABotMetadata.proto + +package waBotMetadata + +import ( + reflect "reflect" + sync "sync" + unsafe "unsafe" + + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + + waCommon "go.mau.fi/whatsmeow/proto/waCommon" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type BotMetricsEntryPoint int32 + +const ( + BotMetricsEntryPoint_FAVICON BotMetricsEntryPoint = 1 + BotMetricsEntryPoint_CHATLIST BotMetricsEntryPoint = 2 + BotMetricsEntryPoint_AISEARCH_NULL_STATE_PAPER_PLANE BotMetricsEntryPoint = 3 + BotMetricsEntryPoint_AISEARCH_NULL_STATE_SUGGESTION BotMetricsEntryPoint = 4 + BotMetricsEntryPoint_AISEARCH_TYPE_AHEAD_SUGGESTION BotMetricsEntryPoint = 5 + BotMetricsEntryPoint_AISEARCH_TYPE_AHEAD_PAPER_PLANE BotMetricsEntryPoint = 6 + BotMetricsEntryPoint_AISEARCH_TYPE_AHEAD_RESULT_CHATLIST BotMetricsEntryPoint = 7 + BotMetricsEntryPoint_AISEARCH_TYPE_AHEAD_RESULT_MESSAGES BotMetricsEntryPoint = 8 + BotMetricsEntryPoint_AIVOICE_SEARCH_BAR BotMetricsEntryPoint = 9 + BotMetricsEntryPoint_AIVOICE_FAVICON BotMetricsEntryPoint = 10 + BotMetricsEntryPoint_AISTUDIO BotMetricsEntryPoint = 11 + BotMetricsEntryPoint_DEEPLINK BotMetricsEntryPoint = 12 + BotMetricsEntryPoint_NOTIFICATION BotMetricsEntryPoint = 13 + BotMetricsEntryPoint_PROFILE_MESSAGE_BUTTON BotMetricsEntryPoint = 14 + BotMetricsEntryPoint_FORWARD BotMetricsEntryPoint = 15 + BotMetricsEntryPoint_APP_SHORTCUT BotMetricsEntryPoint = 16 + BotMetricsEntryPoint_FF_FAMILY BotMetricsEntryPoint = 17 + BotMetricsEntryPoint_AI_TAB BotMetricsEntryPoint = 18 + BotMetricsEntryPoint_AI_HOME BotMetricsEntryPoint = 19 + BotMetricsEntryPoint_AI_DEEPLINK_IMMERSIVE BotMetricsEntryPoint = 20 + BotMetricsEntryPoint_AI_DEEPLINK BotMetricsEntryPoint = 21 + BotMetricsEntryPoint_META_AI_CHAT_SHORTCUT_AI_STUDIO BotMetricsEntryPoint = 22 + BotMetricsEntryPoint_UGC_CHAT_SHORTCUT_AI_STUDIO BotMetricsEntryPoint = 23 + BotMetricsEntryPoint_NEW_CHAT_AI_STUDIO BotMetricsEntryPoint = 24 + BotMetricsEntryPoint_AIVOICE_FAVICON_CALL_HISTORY BotMetricsEntryPoint = 25 + BotMetricsEntryPoint_ASK_META_AI_CONTEXT_MENU BotMetricsEntryPoint = 26 + BotMetricsEntryPoint_ASK_META_AI_CONTEXT_MENU_1ON1 BotMetricsEntryPoint = 27 + BotMetricsEntryPoint_ASK_META_AI_CONTEXT_MENU_GROUP BotMetricsEntryPoint = 28 + BotMetricsEntryPoint_INVOKE_META_AI_1ON1 BotMetricsEntryPoint = 29 + BotMetricsEntryPoint_INVOKE_META_AI_GROUP BotMetricsEntryPoint = 30 + BotMetricsEntryPoint_META_AI_FORWARD BotMetricsEntryPoint = 31 + BotMetricsEntryPoint_NEW_CHAT_AI_CONTACT BotMetricsEntryPoint = 32 +) + +// Enum value maps for BotMetricsEntryPoint. +var ( + BotMetricsEntryPoint_name = map[int32]string{ + 1: "FAVICON", + 2: "CHATLIST", + 3: "AISEARCH_NULL_STATE_PAPER_PLANE", + 4: "AISEARCH_NULL_STATE_SUGGESTION", + 5: "AISEARCH_TYPE_AHEAD_SUGGESTION", + 6: "AISEARCH_TYPE_AHEAD_PAPER_PLANE", + 7: "AISEARCH_TYPE_AHEAD_RESULT_CHATLIST", + 8: "AISEARCH_TYPE_AHEAD_RESULT_MESSAGES", + 9: "AIVOICE_SEARCH_BAR", + 10: "AIVOICE_FAVICON", + 11: "AISTUDIO", + 12: "DEEPLINK", + 13: "NOTIFICATION", + 14: "PROFILE_MESSAGE_BUTTON", + 15: "FORWARD", + 16: "APP_SHORTCUT", + 17: "FF_FAMILY", + 18: "AI_TAB", + 19: "AI_HOME", + 20: "AI_DEEPLINK_IMMERSIVE", + 21: "AI_DEEPLINK", + 22: "META_AI_CHAT_SHORTCUT_AI_STUDIO", + 23: "UGC_CHAT_SHORTCUT_AI_STUDIO", + 24: "NEW_CHAT_AI_STUDIO", + 25: "AIVOICE_FAVICON_CALL_HISTORY", + 26: "ASK_META_AI_CONTEXT_MENU", + 27: "ASK_META_AI_CONTEXT_MENU_1ON1", + 28: "ASK_META_AI_CONTEXT_MENU_GROUP", + 29: "INVOKE_META_AI_1ON1", + 30: "INVOKE_META_AI_GROUP", + 31: "META_AI_FORWARD", + 32: "NEW_CHAT_AI_CONTACT", + } + BotMetricsEntryPoint_value = map[string]int32{ + "FAVICON": 1, + "CHATLIST": 2, + "AISEARCH_NULL_STATE_PAPER_PLANE": 3, + "AISEARCH_NULL_STATE_SUGGESTION": 4, + "AISEARCH_TYPE_AHEAD_SUGGESTION": 5, + "AISEARCH_TYPE_AHEAD_PAPER_PLANE": 6, + "AISEARCH_TYPE_AHEAD_RESULT_CHATLIST": 7, + "AISEARCH_TYPE_AHEAD_RESULT_MESSAGES": 8, + "AIVOICE_SEARCH_BAR": 9, + "AIVOICE_FAVICON": 10, + "AISTUDIO": 11, + "DEEPLINK": 12, + "NOTIFICATION": 13, + "PROFILE_MESSAGE_BUTTON": 14, + "FORWARD": 15, + "APP_SHORTCUT": 16, + "FF_FAMILY": 17, + "AI_TAB": 18, + "AI_HOME": 19, + "AI_DEEPLINK_IMMERSIVE": 20, + "AI_DEEPLINK": 21, + "META_AI_CHAT_SHORTCUT_AI_STUDIO": 22, + "UGC_CHAT_SHORTCUT_AI_STUDIO": 23, + "NEW_CHAT_AI_STUDIO": 24, + "AIVOICE_FAVICON_CALL_HISTORY": 25, + "ASK_META_AI_CONTEXT_MENU": 26, + "ASK_META_AI_CONTEXT_MENU_1ON1": 27, + "ASK_META_AI_CONTEXT_MENU_GROUP": 28, + "INVOKE_META_AI_1ON1": 29, + "INVOKE_META_AI_GROUP": 30, + "META_AI_FORWARD": 31, + "NEW_CHAT_AI_CONTACT": 32, + } +) + +func (x BotMetricsEntryPoint) Enum() *BotMetricsEntryPoint { + p := new(BotMetricsEntryPoint) + *p = x + return p +} + +func (x BotMetricsEntryPoint) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (BotMetricsEntryPoint) Descriptor() protoreflect.EnumDescriptor { + return file_waBotMetadata_WABotMetadata_proto_enumTypes[0].Descriptor() +} + +func (BotMetricsEntryPoint) Type() protoreflect.EnumType { + return &file_waBotMetadata_WABotMetadata_proto_enumTypes[0] +} + +func (x BotMetricsEntryPoint) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *BotMetricsEntryPoint) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = BotMetricsEntryPoint(num) + return nil +} + +// Deprecated: Use BotMetricsEntryPoint.Descriptor instead. +func (BotMetricsEntryPoint) EnumDescriptor() ([]byte, []int) { + return file_waBotMetadata_WABotMetadata_proto_rawDescGZIP(), []int{0} +} + +type BotMetricsThreadEntryPoint int32 + +const ( + BotMetricsThreadEntryPoint_AI_TAB_THREAD BotMetricsThreadEntryPoint = 1 + BotMetricsThreadEntryPoint_AI_HOME_THREAD BotMetricsThreadEntryPoint = 2 + BotMetricsThreadEntryPoint_AI_DEEPLINK_IMMERSIVE_THREAD BotMetricsThreadEntryPoint = 3 + BotMetricsThreadEntryPoint_AI_DEEPLINK_THREAD BotMetricsThreadEntryPoint = 4 + BotMetricsThreadEntryPoint_ASK_META_AI_CONTEXT_MENU_THREAD BotMetricsThreadEntryPoint = 5 +) + +// Enum value maps for BotMetricsThreadEntryPoint. +var ( + BotMetricsThreadEntryPoint_name = map[int32]string{ + 1: "AI_TAB_THREAD", + 2: "AI_HOME_THREAD", + 3: "AI_DEEPLINK_IMMERSIVE_THREAD", + 4: "AI_DEEPLINK_THREAD", + 5: "ASK_META_AI_CONTEXT_MENU_THREAD", + } + BotMetricsThreadEntryPoint_value = map[string]int32{ + "AI_TAB_THREAD": 1, + "AI_HOME_THREAD": 2, + "AI_DEEPLINK_IMMERSIVE_THREAD": 3, + "AI_DEEPLINK_THREAD": 4, + "ASK_META_AI_CONTEXT_MENU_THREAD": 5, + } +) + +func (x BotMetricsThreadEntryPoint) Enum() *BotMetricsThreadEntryPoint { + p := new(BotMetricsThreadEntryPoint) + *p = x + return p +} + +func (x BotMetricsThreadEntryPoint) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (BotMetricsThreadEntryPoint) Descriptor() protoreflect.EnumDescriptor { + return file_waBotMetadata_WABotMetadata_proto_enumTypes[1].Descriptor() +} + +func (BotMetricsThreadEntryPoint) Type() protoreflect.EnumType { + return &file_waBotMetadata_WABotMetadata_proto_enumTypes[1] +} + +func (x BotMetricsThreadEntryPoint) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *BotMetricsThreadEntryPoint) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = BotMetricsThreadEntryPoint(num) + return nil +} + +// Deprecated: Use BotMetricsThreadEntryPoint.Descriptor instead. +func (BotMetricsThreadEntryPoint) EnumDescriptor() ([]byte, []int) { + return file_waBotMetadata_WABotMetadata_proto_rawDescGZIP(), []int{1} +} + +type BotSessionSource int32 + +const ( + BotSessionSource_NONE BotSessionSource = 0 + BotSessionSource_NULL_STATE BotSessionSource = 1 + BotSessionSource_TYPEAHEAD BotSessionSource = 2 + BotSessionSource_USER_INPUT BotSessionSource = 3 + BotSessionSource_EMU_FLASH BotSessionSource = 4 + BotSessionSource_EMU_FLASH_FOLLOWUP BotSessionSource = 5 + BotSessionSource_VOICE BotSessionSource = 6 +) + +// Enum value maps for BotSessionSource. +var ( + BotSessionSource_name = map[int32]string{ + 0: "NONE", + 1: "NULL_STATE", + 2: "TYPEAHEAD", + 3: "USER_INPUT", + 4: "EMU_FLASH", + 5: "EMU_FLASH_FOLLOWUP", + 6: "VOICE", + } + BotSessionSource_value = map[string]int32{ + "NONE": 0, + "NULL_STATE": 1, + "TYPEAHEAD": 2, + "USER_INPUT": 3, + "EMU_FLASH": 4, + "EMU_FLASH_FOLLOWUP": 5, + "VOICE": 6, + } +) + +func (x BotSessionSource) Enum() *BotSessionSource { + p := new(BotSessionSource) + *p = x + return p +} + +func (x BotSessionSource) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (BotSessionSource) Descriptor() protoreflect.EnumDescriptor { + return file_waBotMetadata_WABotMetadata_proto_enumTypes[2].Descriptor() +} + +func (BotSessionSource) Type() protoreflect.EnumType { + return &file_waBotMetadata_WABotMetadata_proto_enumTypes[2] +} + +func (x BotSessionSource) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *BotSessionSource) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = BotSessionSource(num) + return nil +} + +// Deprecated: Use BotSessionSource.Descriptor instead. +func (BotSessionSource) EnumDescriptor() ([]byte, []int) { + return file_waBotMetadata_WABotMetadata_proto_rawDescGZIP(), []int{2} +} + +type BotPluginMetadata_PluginType int32 + +const ( + BotPluginMetadata_UNKNOWN_PLUGIN BotPluginMetadata_PluginType = 0 + BotPluginMetadata_REELS BotPluginMetadata_PluginType = 1 + BotPluginMetadata_SEARCH BotPluginMetadata_PluginType = 2 +) + +// Enum value maps for BotPluginMetadata_PluginType. +var ( + BotPluginMetadata_PluginType_name = map[int32]string{ + 0: "UNKNOWN_PLUGIN", + 1: "REELS", + 2: "SEARCH", + } + BotPluginMetadata_PluginType_value = map[string]int32{ + "UNKNOWN_PLUGIN": 0, + "REELS": 1, + "SEARCH": 2, + } +) + +func (x BotPluginMetadata_PluginType) Enum() *BotPluginMetadata_PluginType { + p := new(BotPluginMetadata_PluginType) + *p = x + return p +} + +func (x BotPluginMetadata_PluginType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (BotPluginMetadata_PluginType) Descriptor() protoreflect.EnumDescriptor { + return file_waBotMetadata_WABotMetadata_proto_enumTypes[3].Descriptor() +} + +func (BotPluginMetadata_PluginType) Type() protoreflect.EnumType { + return &file_waBotMetadata_WABotMetadata_proto_enumTypes[3] +} + +func (x BotPluginMetadata_PluginType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *BotPluginMetadata_PluginType) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = BotPluginMetadata_PluginType(num) + return nil +} + +// Deprecated: Use BotPluginMetadata_PluginType.Descriptor instead. +func (BotPluginMetadata_PluginType) EnumDescriptor() ([]byte, []int) { + return file_waBotMetadata_WABotMetadata_proto_rawDescGZIP(), []int{0, 0} +} + +type BotPluginMetadata_SearchProvider int32 + +const ( + BotPluginMetadata_UNKNOWN BotPluginMetadata_SearchProvider = 0 + BotPluginMetadata_BING BotPluginMetadata_SearchProvider = 1 + BotPluginMetadata_GOOGLE BotPluginMetadata_SearchProvider = 2 + BotPluginMetadata_SUPPORT BotPluginMetadata_SearchProvider = 3 +) + +// Enum value maps for BotPluginMetadata_SearchProvider. +var ( + BotPluginMetadata_SearchProvider_name = map[int32]string{ + 0: "UNKNOWN", + 1: "BING", + 2: "GOOGLE", + 3: "SUPPORT", + } + BotPluginMetadata_SearchProvider_value = map[string]int32{ + "UNKNOWN": 0, + "BING": 1, + "GOOGLE": 2, + "SUPPORT": 3, + } +) + +func (x BotPluginMetadata_SearchProvider) Enum() *BotPluginMetadata_SearchProvider { + p := new(BotPluginMetadata_SearchProvider) + *p = x + return p +} + +func (x BotPluginMetadata_SearchProvider) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (BotPluginMetadata_SearchProvider) Descriptor() protoreflect.EnumDescriptor { + return file_waBotMetadata_WABotMetadata_proto_enumTypes[4].Descriptor() +} + +func (BotPluginMetadata_SearchProvider) Type() protoreflect.EnumType { + return &file_waBotMetadata_WABotMetadata_proto_enumTypes[4] +} + +func (x BotPluginMetadata_SearchProvider) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *BotPluginMetadata_SearchProvider) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = BotPluginMetadata_SearchProvider(num) + return nil +} + +// Deprecated: Use BotPluginMetadata_SearchProvider.Descriptor instead. +func (BotPluginMetadata_SearchProvider) EnumDescriptor() ([]byte, []int) { + return file_waBotMetadata_WABotMetadata_proto_rawDescGZIP(), []int{0, 1} +} + +type BotLinkedAccount_BotLinkedAccountType int32 + +const ( + BotLinkedAccount_BOT_LINKED_ACCOUNT_TYPE_1P BotLinkedAccount_BotLinkedAccountType = 0 +) + +// Enum value maps for BotLinkedAccount_BotLinkedAccountType. +var ( + BotLinkedAccount_BotLinkedAccountType_name = map[int32]string{ + 0: "BOT_LINKED_ACCOUNT_TYPE_1P", + } + BotLinkedAccount_BotLinkedAccountType_value = map[string]int32{ + "BOT_LINKED_ACCOUNT_TYPE_1P": 0, + } +) + +func (x BotLinkedAccount_BotLinkedAccountType) Enum() *BotLinkedAccount_BotLinkedAccountType { + p := new(BotLinkedAccount_BotLinkedAccountType) + *p = x + return p +} + +func (x BotLinkedAccount_BotLinkedAccountType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (BotLinkedAccount_BotLinkedAccountType) Descriptor() protoreflect.EnumDescriptor { + return file_waBotMetadata_WABotMetadata_proto_enumTypes[5].Descriptor() +} + +func (BotLinkedAccount_BotLinkedAccountType) Type() protoreflect.EnumType { + return &file_waBotMetadata_WABotMetadata_proto_enumTypes[5] +} + +func (x BotLinkedAccount_BotLinkedAccountType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *BotLinkedAccount_BotLinkedAccountType) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = BotLinkedAccount_BotLinkedAccountType(num) + return nil +} + +// Deprecated: Use BotLinkedAccount_BotLinkedAccountType.Descriptor instead. +func (BotLinkedAccount_BotLinkedAccountType) EnumDescriptor() ([]byte, []int) { + return file_waBotMetadata_WABotMetadata_proto_rawDescGZIP(), []int{1, 0} +} + +type BotSignatureVerificationUseCaseProof_BotSignatureUseCase int32 + +const ( + BotSignatureVerificationUseCaseProof_WA_BOT_MSG BotSignatureVerificationUseCaseProof_BotSignatureUseCase = 0 +) + +// Enum value maps for BotSignatureVerificationUseCaseProof_BotSignatureUseCase. +var ( + BotSignatureVerificationUseCaseProof_BotSignatureUseCase_name = map[int32]string{ + 0: "WA_BOT_MSG", + } + BotSignatureVerificationUseCaseProof_BotSignatureUseCase_value = map[string]int32{ + "WA_BOT_MSG": 0, + } +) + +func (x BotSignatureVerificationUseCaseProof_BotSignatureUseCase) Enum() *BotSignatureVerificationUseCaseProof_BotSignatureUseCase { + p := new(BotSignatureVerificationUseCaseProof_BotSignatureUseCase) + *p = x + return p +} + +func (x BotSignatureVerificationUseCaseProof_BotSignatureUseCase) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (BotSignatureVerificationUseCaseProof_BotSignatureUseCase) Descriptor() protoreflect.EnumDescriptor { + return file_waBotMetadata_WABotMetadata_proto_enumTypes[6].Descriptor() +} + +func (BotSignatureVerificationUseCaseProof_BotSignatureUseCase) Type() protoreflect.EnumType { + return &file_waBotMetadata_WABotMetadata_proto_enumTypes[6] +} + +func (x BotSignatureVerificationUseCaseProof_BotSignatureUseCase) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *BotSignatureVerificationUseCaseProof_BotSignatureUseCase) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = BotSignatureVerificationUseCaseProof_BotSignatureUseCase(num) + return nil +} + +// Deprecated: Use BotSignatureVerificationUseCaseProof_BotSignatureUseCase.Descriptor instead. +func (BotSignatureVerificationUseCaseProof_BotSignatureUseCase) EnumDescriptor() ([]byte, []int) { + return file_waBotMetadata_WABotMetadata_proto_rawDescGZIP(), []int{2, 0} +} + +type BotPromotionMessageMetadata_BotPromotionType int32 + +const ( + BotPromotionMessageMetadata_UNKNOWN_TYPE BotPromotionMessageMetadata_BotPromotionType = 0 + BotPromotionMessageMetadata_C50 BotPromotionMessageMetadata_BotPromotionType = 1 + BotPromotionMessageMetadata_SURVEY_PLATFORM BotPromotionMessageMetadata_BotPromotionType = 2 +) + +// Enum value maps for BotPromotionMessageMetadata_BotPromotionType. +var ( + BotPromotionMessageMetadata_BotPromotionType_name = map[int32]string{ + 0: "UNKNOWN_TYPE", + 1: "C50", + 2: "SURVEY_PLATFORM", + } + BotPromotionMessageMetadata_BotPromotionType_value = map[string]int32{ + "UNKNOWN_TYPE": 0, + "C50": 1, + "SURVEY_PLATFORM": 2, + } +) + +func (x BotPromotionMessageMetadata_BotPromotionType) Enum() *BotPromotionMessageMetadata_BotPromotionType { + p := new(BotPromotionMessageMetadata_BotPromotionType) + *p = x + return p +} + +func (x BotPromotionMessageMetadata_BotPromotionType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (BotPromotionMessageMetadata_BotPromotionType) Descriptor() protoreflect.EnumDescriptor { + return file_waBotMetadata_WABotMetadata_proto_enumTypes[7].Descriptor() +} + +func (BotPromotionMessageMetadata_BotPromotionType) Type() protoreflect.EnumType { + return &file_waBotMetadata_WABotMetadata_proto_enumTypes[7] +} + +func (x BotPromotionMessageMetadata_BotPromotionType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *BotPromotionMessageMetadata_BotPromotionType) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = BotPromotionMessageMetadata_BotPromotionType(num) + return nil +} + +// Deprecated: Use BotPromotionMessageMetadata_BotPromotionType.Descriptor instead. +func (BotPromotionMessageMetadata_BotPromotionType) EnumDescriptor() ([]byte, []int) { + return file_waBotMetadata_WABotMetadata_proto_rawDescGZIP(), []int{3, 0} +} + +type BotMediaMetadata_OrientationType int32 + +const ( + BotMediaMetadata_CENTER BotMediaMetadata_OrientationType = 1 + BotMediaMetadata_LEFT BotMediaMetadata_OrientationType = 2 + BotMediaMetadata_RIGHT BotMediaMetadata_OrientationType = 3 +) + +// Enum value maps for BotMediaMetadata_OrientationType. +var ( + BotMediaMetadata_OrientationType_name = map[int32]string{ + 1: "CENTER", + 2: "LEFT", + 3: "RIGHT", + } + BotMediaMetadata_OrientationType_value = map[string]int32{ + "CENTER": 1, + "LEFT": 2, + "RIGHT": 3, + } +) + +func (x BotMediaMetadata_OrientationType) Enum() *BotMediaMetadata_OrientationType { + p := new(BotMediaMetadata_OrientationType) + *p = x + return p +} + +func (x BotMediaMetadata_OrientationType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (BotMediaMetadata_OrientationType) Descriptor() protoreflect.EnumDescriptor { + return file_waBotMetadata_WABotMetadata_proto_enumTypes[8].Descriptor() +} + +func (BotMediaMetadata_OrientationType) Type() protoreflect.EnumType { + return &file_waBotMetadata_WABotMetadata_proto_enumTypes[8] +} + +func (x BotMediaMetadata_OrientationType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *BotMediaMetadata_OrientationType) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = BotMediaMetadata_OrientationType(num) + return nil +} + +// Deprecated: Use BotMediaMetadata_OrientationType.Descriptor instead. +func (BotMediaMetadata_OrientationType) EnumDescriptor() ([]byte, []int) { + return file_waBotMetadata_WABotMetadata_proto_rawDescGZIP(), []int{4, 0} +} + +type BotReminderMetadata_ReminderFrequency int32 + +const ( + BotReminderMetadata_ONCE BotReminderMetadata_ReminderFrequency = 1 + BotReminderMetadata_DAILY BotReminderMetadata_ReminderFrequency = 2 + BotReminderMetadata_WEEKLY BotReminderMetadata_ReminderFrequency = 3 + BotReminderMetadata_BIWEEKLY BotReminderMetadata_ReminderFrequency = 4 + BotReminderMetadata_MONTHLY BotReminderMetadata_ReminderFrequency = 5 +) + +// Enum value maps for BotReminderMetadata_ReminderFrequency. +var ( + BotReminderMetadata_ReminderFrequency_name = map[int32]string{ + 1: "ONCE", + 2: "DAILY", + 3: "WEEKLY", + 4: "BIWEEKLY", + 5: "MONTHLY", + } + BotReminderMetadata_ReminderFrequency_value = map[string]int32{ + "ONCE": 1, + "DAILY": 2, + "WEEKLY": 3, + "BIWEEKLY": 4, + "MONTHLY": 5, + } +) + +func (x BotReminderMetadata_ReminderFrequency) Enum() *BotReminderMetadata_ReminderFrequency { + p := new(BotReminderMetadata_ReminderFrequency) + *p = x + return p +} + +func (x BotReminderMetadata_ReminderFrequency) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (BotReminderMetadata_ReminderFrequency) Descriptor() protoreflect.EnumDescriptor { + return file_waBotMetadata_WABotMetadata_proto_enumTypes[9].Descriptor() +} + +func (BotReminderMetadata_ReminderFrequency) Type() protoreflect.EnumType { + return &file_waBotMetadata_WABotMetadata_proto_enumTypes[9] +} + +func (x BotReminderMetadata_ReminderFrequency) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *BotReminderMetadata_ReminderFrequency) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = BotReminderMetadata_ReminderFrequency(num) + return nil +} + +// Deprecated: Use BotReminderMetadata_ReminderFrequency.Descriptor instead. +func (BotReminderMetadata_ReminderFrequency) EnumDescriptor() ([]byte, []int) { + return file_waBotMetadata_WABotMetadata_proto_rawDescGZIP(), []int{5, 0} +} + +type BotReminderMetadata_ReminderAction int32 + +const ( + BotReminderMetadata_NOTIFY BotReminderMetadata_ReminderAction = 1 + BotReminderMetadata_CREATE BotReminderMetadata_ReminderAction = 2 + BotReminderMetadata_DELETE BotReminderMetadata_ReminderAction = 3 + BotReminderMetadata_UPDATE BotReminderMetadata_ReminderAction = 4 +) + +// Enum value maps for BotReminderMetadata_ReminderAction. +var ( + BotReminderMetadata_ReminderAction_name = map[int32]string{ + 1: "NOTIFY", + 2: "CREATE", + 3: "DELETE", + 4: "UPDATE", + } + BotReminderMetadata_ReminderAction_value = map[string]int32{ + "NOTIFY": 1, + "CREATE": 2, + "DELETE": 3, + "UPDATE": 4, + } +) + +func (x BotReminderMetadata_ReminderAction) Enum() *BotReminderMetadata_ReminderAction { + p := new(BotReminderMetadata_ReminderAction) + *p = x + return p +} + +func (x BotReminderMetadata_ReminderAction) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (BotReminderMetadata_ReminderAction) Descriptor() protoreflect.EnumDescriptor { + return file_waBotMetadata_WABotMetadata_proto_enumTypes[10].Descriptor() +} + +func (BotReminderMetadata_ReminderAction) Type() protoreflect.EnumType { + return &file_waBotMetadata_WABotMetadata_proto_enumTypes[10] +} + +func (x BotReminderMetadata_ReminderAction) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *BotReminderMetadata_ReminderAction) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = BotReminderMetadata_ReminderAction(num) + return nil +} + +// Deprecated: Use BotReminderMetadata_ReminderAction.Descriptor instead. +func (BotReminderMetadata_ReminderAction) EnumDescriptor() ([]byte, []int) { + return file_waBotMetadata_WABotMetadata_proto_rawDescGZIP(), []int{5, 1} +} + +type BotModelMetadata_PremiumModelStatus int32 + +const ( + BotModelMetadata_UNKNOWN_STATUS BotModelMetadata_PremiumModelStatus = 0 + BotModelMetadata_AVAILABLE BotModelMetadata_PremiumModelStatus = 1 + BotModelMetadata_QUOTA_EXCEED_LIMIT BotModelMetadata_PremiumModelStatus = 2 +) + +// Enum value maps for BotModelMetadata_PremiumModelStatus. +var ( + BotModelMetadata_PremiumModelStatus_name = map[int32]string{ + 0: "UNKNOWN_STATUS", + 1: "AVAILABLE", + 2: "QUOTA_EXCEED_LIMIT", + } + BotModelMetadata_PremiumModelStatus_value = map[string]int32{ + "UNKNOWN_STATUS": 0, + "AVAILABLE": 1, + "QUOTA_EXCEED_LIMIT": 2, + } +) + +func (x BotModelMetadata_PremiumModelStatus) Enum() *BotModelMetadata_PremiumModelStatus { + p := new(BotModelMetadata_PremiumModelStatus) + *p = x + return p +} + +func (x BotModelMetadata_PremiumModelStatus) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (BotModelMetadata_PremiumModelStatus) Descriptor() protoreflect.EnumDescriptor { + return file_waBotMetadata_WABotMetadata_proto_enumTypes[11].Descriptor() +} + +func (BotModelMetadata_PremiumModelStatus) Type() protoreflect.EnumType { + return &file_waBotMetadata_WABotMetadata_proto_enumTypes[11] +} + +func (x BotModelMetadata_PremiumModelStatus) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *BotModelMetadata_PremiumModelStatus) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = BotModelMetadata_PremiumModelStatus(num) + return nil +} + +// Deprecated: Use BotModelMetadata_PremiumModelStatus.Descriptor instead. +func (BotModelMetadata_PremiumModelStatus) EnumDescriptor() ([]byte, []int) { + return file_waBotMetadata_WABotMetadata_proto_rawDescGZIP(), []int{6, 0} +} + +type BotModelMetadata_ModelType int32 + +const ( + BotModelMetadata_UNKNOWN_TYPE BotModelMetadata_ModelType = 0 + BotModelMetadata_LLAMA_PROD BotModelMetadata_ModelType = 1 + BotModelMetadata_LLAMA_PROD_PREMIUM BotModelMetadata_ModelType = 2 +) + +// Enum value maps for BotModelMetadata_ModelType. +var ( + BotModelMetadata_ModelType_name = map[int32]string{ + 0: "UNKNOWN_TYPE", + 1: "LLAMA_PROD", + 2: "LLAMA_PROD_PREMIUM", + } + BotModelMetadata_ModelType_value = map[string]int32{ + "UNKNOWN_TYPE": 0, + "LLAMA_PROD": 1, + "LLAMA_PROD_PREMIUM": 2, + } +) + +func (x BotModelMetadata_ModelType) Enum() *BotModelMetadata_ModelType { + p := new(BotModelMetadata_ModelType) + *p = x + return p +} + +func (x BotModelMetadata_ModelType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (BotModelMetadata_ModelType) Descriptor() protoreflect.EnumDescriptor { + return file_waBotMetadata_WABotMetadata_proto_enumTypes[12].Descriptor() +} + +func (BotModelMetadata_ModelType) Type() protoreflect.EnumType { + return &file_waBotMetadata_WABotMetadata_proto_enumTypes[12] +} + +func (x BotModelMetadata_ModelType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *BotModelMetadata_ModelType) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = BotModelMetadata_ModelType(num) + return nil +} + +// Deprecated: Use BotModelMetadata_ModelType.Descriptor instead. +func (BotModelMetadata_ModelType) EnumDescriptor() ([]byte, []int) { + return file_waBotMetadata_WABotMetadata_proto_rawDescGZIP(), []int{6, 1} +} + +type BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotSearchSourceProvider int32 + +const ( + BotProgressIndicatorMetadata_BotPlanningStepMetadata_UNKNOWN_PROVIDER BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotSearchSourceProvider = 0 + BotProgressIndicatorMetadata_BotPlanningStepMetadata_OTHER BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotSearchSourceProvider = 1 + BotProgressIndicatorMetadata_BotPlanningStepMetadata_GOOGLE BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotSearchSourceProvider = 2 + BotProgressIndicatorMetadata_BotPlanningStepMetadata_BING BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotSearchSourceProvider = 3 +) + +// Enum value maps for BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotSearchSourceProvider. +var ( + BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotSearchSourceProvider_name = map[int32]string{ + 0: "UNKNOWN_PROVIDER", + 1: "OTHER", + 2: "GOOGLE", + 3: "BING", + } + BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotSearchSourceProvider_value = map[string]int32{ + "UNKNOWN_PROVIDER": 0, + "OTHER": 1, + "GOOGLE": 2, + "BING": 3, + } +) + +func (x BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotSearchSourceProvider) Enum() *BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotSearchSourceProvider { + p := new(BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotSearchSourceProvider) + *p = x + return p +} + +func (x BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotSearchSourceProvider) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotSearchSourceProvider) Descriptor() protoreflect.EnumDescriptor { + return file_waBotMetadata_WABotMetadata_proto_enumTypes[13].Descriptor() +} + +func (BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotSearchSourceProvider) Type() protoreflect.EnumType { + return &file_waBotMetadata_WABotMetadata_proto_enumTypes[13] +} + +func (x BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotSearchSourceProvider) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotSearchSourceProvider) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotSearchSourceProvider(num) + return nil +} + +// Deprecated: Use BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotSearchSourceProvider.Descriptor instead. +func (BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotSearchSourceProvider) EnumDescriptor() ([]byte, []int) { + return file_waBotMetadata_WABotMetadata_proto_rawDescGZIP(), []int{7, 0, 0} +} + +type BotProgressIndicatorMetadata_BotPlanningStepMetadata_PlanningStepStatus int32 + +const ( + BotProgressIndicatorMetadata_BotPlanningStepMetadata_UNKNOWN BotProgressIndicatorMetadata_BotPlanningStepMetadata_PlanningStepStatus = 0 + BotProgressIndicatorMetadata_BotPlanningStepMetadata_PLANNED BotProgressIndicatorMetadata_BotPlanningStepMetadata_PlanningStepStatus = 1 + BotProgressIndicatorMetadata_BotPlanningStepMetadata_EXECUTING BotProgressIndicatorMetadata_BotPlanningStepMetadata_PlanningStepStatus = 2 + BotProgressIndicatorMetadata_BotPlanningStepMetadata_FINISHED BotProgressIndicatorMetadata_BotPlanningStepMetadata_PlanningStepStatus = 3 +) + +// Enum value maps for BotProgressIndicatorMetadata_BotPlanningStepMetadata_PlanningStepStatus. +var ( + BotProgressIndicatorMetadata_BotPlanningStepMetadata_PlanningStepStatus_name = map[int32]string{ + 0: "UNKNOWN", + 1: "PLANNED", + 2: "EXECUTING", + 3: "FINISHED", + } + BotProgressIndicatorMetadata_BotPlanningStepMetadata_PlanningStepStatus_value = map[string]int32{ + "UNKNOWN": 0, + "PLANNED": 1, + "EXECUTING": 2, + "FINISHED": 3, + } +) + +func (x BotProgressIndicatorMetadata_BotPlanningStepMetadata_PlanningStepStatus) Enum() *BotProgressIndicatorMetadata_BotPlanningStepMetadata_PlanningStepStatus { + p := new(BotProgressIndicatorMetadata_BotPlanningStepMetadata_PlanningStepStatus) + *p = x + return p +} + +func (x BotProgressIndicatorMetadata_BotPlanningStepMetadata_PlanningStepStatus) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (BotProgressIndicatorMetadata_BotPlanningStepMetadata_PlanningStepStatus) Descriptor() protoreflect.EnumDescriptor { + return file_waBotMetadata_WABotMetadata_proto_enumTypes[14].Descriptor() +} + +func (BotProgressIndicatorMetadata_BotPlanningStepMetadata_PlanningStepStatus) Type() protoreflect.EnumType { + return &file_waBotMetadata_WABotMetadata_proto_enumTypes[14] +} + +func (x BotProgressIndicatorMetadata_BotPlanningStepMetadata_PlanningStepStatus) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *BotProgressIndicatorMetadata_BotPlanningStepMetadata_PlanningStepStatus) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = BotProgressIndicatorMetadata_BotPlanningStepMetadata_PlanningStepStatus(num) + return nil +} + +// Deprecated: Use BotProgressIndicatorMetadata_BotPlanningStepMetadata_PlanningStepStatus.Descriptor instead. +func (BotProgressIndicatorMetadata_BotPlanningStepMetadata_PlanningStepStatus) EnumDescriptor() ([]byte, []int) { + return file_waBotMetadata_WABotMetadata_proto_rawDescGZIP(), []int{7, 0, 1} +} + +type BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningSearchSourcesMetadata_BotPlanningSearchSourceProvider int32 + +const ( + BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningSearchSourcesMetadata_UNKNOWN BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningSearchSourcesMetadata_BotPlanningSearchSourceProvider = 0 + BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningSearchSourcesMetadata_OTHER BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningSearchSourcesMetadata_BotPlanningSearchSourceProvider = 1 + BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningSearchSourcesMetadata_GOOGLE BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningSearchSourcesMetadata_BotPlanningSearchSourceProvider = 2 + BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningSearchSourcesMetadata_BING BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningSearchSourcesMetadata_BotPlanningSearchSourceProvider = 3 +) + +// Enum value maps for BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningSearchSourcesMetadata_BotPlanningSearchSourceProvider. +var ( + BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningSearchSourcesMetadata_BotPlanningSearchSourceProvider_name = map[int32]string{ + 0: "UNKNOWN", + 1: "OTHER", + 2: "GOOGLE", + 3: "BING", + } + BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningSearchSourcesMetadata_BotPlanningSearchSourceProvider_value = map[string]int32{ + "UNKNOWN": 0, + "OTHER": 1, + "GOOGLE": 2, + "BING": 3, + } +) + +func (x BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningSearchSourcesMetadata_BotPlanningSearchSourceProvider) Enum() *BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningSearchSourcesMetadata_BotPlanningSearchSourceProvider { + p := new(BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningSearchSourcesMetadata_BotPlanningSearchSourceProvider) + *p = x + return p +} + +func (x BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningSearchSourcesMetadata_BotPlanningSearchSourceProvider) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningSearchSourcesMetadata_BotPlanningSearchSourceProvider) Descriptor() protoreflect.EnumDescriptor { + return file_waBotMetadata_WABotMetadata_proto_enumTypes[15].Descriptor() +} + +func (BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningSearchSourcesMetadata_BotPlanningSearchSourceProvider) Type() protoreflect.EnumType { + return &file_waBotMetadata_WABotMetadata_proto_enumTypes[15] +} + +func (x BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningSearchSourcesMetadata_BotPlanningSearchSourceProvider) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningSearchSourcesMetadata_BotPlanningSearchSourceProvider) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningSearchSourcesMetadata_BotPlanningSearchSourceProvider(num) + return nil +} + +// Deprecated: Use BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningSearchSourcesMetadata_BotPlanningSearchSourceProvider.Descriptor instead. +func (BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningSearchSourcesMetadata_BotPlanningSearchSourceProvider) EnumDescriptor() ([]byte, []int) { + return file_waBotMetadata_WABotMetadata_proto_rawDescGZIP(), []int{7, 0, 0, 0} +} + +type BotCapabilityMetadata_BotCapabilityType int32 + +const ( + BotCapabilityMetadata_UNKNOWN BotCapabilityMetadata_BotCapabilityType = 0 + BotCapabilityMetadata_PROGRESS_INDICATOR BotCapabilityMetadata_BotCapabilityType = 1 + BotCapabilityMetadata_RICH_RESPONSE_HEADING BotCapabilityMetadata_BotCapabilityType = 2 + BotCapabilityMetadata_RICH_RESPONSE_NESTED_LIST BotCapabilityMetadata_BotCapabilityType = 3 + BotCapabilityMetadata_AI_MEMORY BotCapabilityMetadata_BotCapabilityType = 4 + BotCapabilityMetadata_RICH_RESPONSE_THREAD_SURFING BotCapabilityMetadata_BotCapabilityType = 5 + BotCapabilityMetadata_RICH_RESPONSE_TABLE BotCapabilityMetadata_BotCapabilityType = 6 + BotCapabilityMetadata_RICH_RESPONSE_CODE BotCapabilityMetadata_BotCapabilityType = 7 + BotCapabilityMetadata_RICH_RESPONSE_STRUCTURED_RESPONSE BotCapabilityMetadata_BotCapabilityType = 8 + BotCapabilityMetadata_RICH_RESPONSE_INLINE_IMAGE BotCapabilityMetadata_BotCapabilityType = 9 + BotCapabilityMetadata_WA_IG_1P_PLUGIN_RANKING_CONTROL BotCapabilityMetadata_BotCapabilityType = 10 + BotCapabilityMetadata_WA_IG_1P_PLUGIN_RANKING_UPDATE_1 BotCapabilityMetadata_BotCapabilityType = 11 + BotCapabilityMetadata_WA_IG_1P_PLUGIN_RANKING_UPDATE_2 BotCapabilityMetadata_BotCapabilityType = 12 + BotCapabilityMetadata_WA_IG_1P_PLUGIN_RANKING_UPDATE_3 BotCapabilityMetadata_BotCapabilityType = 13 + BotCapabilityMetadata_WA_IG_1P_PLUGIN_RANKING_UPDATE_4 BotCapabilityMetadata_BotCapabilityType = 14 + BotCapabilityMetadata_WA_IG_1P_PLUGIN_RANKING_UPDATE_5 BotCapabilityMetadata_BotCapabilityType = 15 + BotCapabilityMetadata_WA_IG_1P_PLUGIN_RANKING_UPDATE_6 BotCapabilityMetadata_BotCapabilityType = 16 + BotCapabilityMetadata_WA_IG_1P_PLUGIN_RANKING_UPDATE_7 BotCapabilityMetadata_BotCapabilityType = 17 + BotCapabilityMetadata_WA_IG_1P_PLUGIN_RANKING_UPDATE_8 BotCapabilityMetadata_BotCapabilityType = 18 + BotCapabilityMetadata_WA_IG_1P_PLUGIN_RANKING_UPDATE_9 BotCapabilityMetadata_BotCapabilityType = 19 + BotCapabilityMetadata_WA_IG_1P_PLUGIN_RANKING_UPDATE_10 BotCapabilityMetadata_BotCapabilityType = 20 + BotCapabilityMetadata_RICH_RESPONSE_SUB_HEADING BotCapabilityMetadata_BotCapabilityType = 21 + BotCapabilityMetadata_RICH_RESPONSE_GRID_IMAGE BotCapabilityMetadata_BotCapabilityType = 22 + BotCapabilityMetadata_AI_STUDIO_UGC_MEMORY BotCapabilityMetadata_BotCapabilityType = 23 + BotCapabilityMetadata_RICH_RESPONSE_LATEX BotCapabilityMetadata_BotCapabilityType = 24 + BotCapabilityMetadata_RICH_RESPONSE_MAPS BotCapabilityMetadata_BotCapabilityType = 25 + BotCapabilityMetadata_RICH_RESPONSE_INLINE_REELS BotCapabilityMetadata_BotCapabilityType = 26 + BotCapabilityMetadata_AGENTIC_PLANNING BotCapabilityMetadata_BotCapabilityType = 27 + BotCapabilityMetadata_ACCOUNT_LINKING BotCapabilityMetadata_BotCapabilityType = 28 + BotCapabilityMetadata_STREAMING_DISAGGREGATION BotCapabilityMetadata_BotCapabilityType = 29 + BotCapabilityMetadata_RICH_RESPONSE_GRID_IMAGE_3P BotCapabilityMetadata_BotCapabilityType = 30 + BotCapabilityMetadata_RICH_RESPONSE_LATEX_INLINE BotCapabilityMetadata_BotCapabilityType = 31 + BotCapabilityMetadata_QUERY_PLAN BotCapabilityMetadata_BotCapabilityType = 32 + BotCapabilityMetadata_PROACTIVE_MESSAGE BotCapabilityMetadata_BotCapabilityType = 33 + BotCapabilityMetadata_RICH_RESPONSE_UNIFIED_RESPONSE BotCapabilityMetadata_BotCapabilityType = 34 + BotCapabilityMetadata_PROMOTION_MESSAGE BotCapabilityMetadata_BotCapabilityType = 35 + BotCapabilityMetadata_SIMPLIFIED_PROFILE_PAGE BotCapabilityMetadata_BotCapabilityType = 36 + BotCapabilityMetadata_RICH_RESPONSE_SOURCES_IN_MESSAGE BotCapabilityMetadata_BotCapabilityType = 37 + BotCapabilityMetadata_RICH_RESPONSE_SIDE_BY_SIDE_SURVEY BotCapabilityMetadata_BotCapabilityType = 38 + BotCapabilityMetadata_RICH_RESPONSE_UNIFIED_TEXT_COMPONENT BotCapabilityMetadata_BotCapabilityType = 39 + BotCapabilityMetadata_AI_SHARED_MEMORY BotCapabilityMetadata_BotCapabilityType = 40 + BotCapabilityMetadata_RICH_RESPONSE_UNIFIED_SOURCES BotCapabilityMetadata_BotCapabilityType = 41 + BotCapabilityMetadata_RICH_RESPONSE_UNIFIED_DOMAIN_CITATIONS BotCapabilityMetadata_BotCapabilityType = 42 +) + +// Enum value maps for BotCapabilityMetadata_BotCapabilityType. +var ( + BotCapabilityMetadata_BotCapabilityType_name = map[int32]string{ + 0: "UNKNOWN", + 1: "PROGRESS_INDICATOR", + 2: "RICH_RESPONSE_HEADING", + 3: "RICH_RESPONSE_NESTED_LIST", + 4: "AI_MEMORY", + 5: "RICH_RESPONSE_THREAD_SURFING", + 6: "RICH_RESPONSE_TABLE", + 7: "RICH_RESPONSE_CODE", + 8: "RICH_RESPONSE_STRUCTURED_RESPONSE", + 9: "RICH_RESPONSE_INLINE_IMAGE", + 10: "WA_IG_1P_PLUGIN_RANKING_CONTROL", + 11: "WA_IG_1P_PLUGIN_RANKING_UPDATE_1", + 12: "WA_IG_1P_PLUGIN_RANKING_UPDATE_2", + 13: "WA_IG_1P_PLUGIN_RANKING_UPDATE_3", + 14: "WA_IG_1P_PLUGIN_RANKING_UPDATE_4", + 15: "WA_IG_1P_PLUGIN_RANKING_UPDATE_5", + 16: "WA_IG_1P_PLUGIN_RANKING_UPDATE_6", + 17: "WA_IG_1P_PLUGIN_RANKING_UPDATE_7", + 18: "WA_IG_1P_PLUGIN_RANKING_UPDATE_8", + 19: "WA_IG_1P_PLUGIN_RANKING_UPDATE_9", + 20: "WA_IG_1P_PLUGIN_RANKING_UPDATE_10", + 21: "RICH_RESPONSE_SUB_HEADING", + 22: "RICH_RESPONSE_GRID_IMAGE", + 23: "AI_STUDIO_UGC_MEMORY", + 24: "RICH_RESPONSE_LATEX", + 25: "RICH_RESPONSE_MAPS", + 26: "RICH_RESPONSE_INLINE_REELS", + 27: "AGENTIC_PLANNING", + 28: "ACCOUNT_LINKING", + 29: "STREAMING_DISAGGREGATION", + 30: "RICH_RESPONSE_GRID_IMAGE_3P", + 31: "RICH_RESPONSE_LATEX_INLINE", + 32: "QUERY_PLAN", + 33: "PROACTIVE_MESSAGE", + 34: "RICH_RESPONSE_UNIFIED_RESPONSE", + 35: "PROMOTION_MESSAGE", + 36: "SIMPLIFIED_PROFILE_PAGE", + 37: "RICH_RESPONSE_SOURCES_IN_MESSAGE", + 38: "RICH_RESPONSE_SIDE_BY_SIDE_SURVEY", + 39: "RICH_RESPONSE_UNIFIED_TEXT_COMPONENT", + 40: "AI_SHARED_MEMORY", + 41: "RICH_RESPONSE_UNIFIED_SOURCES", + 42: "RICH_RESPONSE_UNIFIED_DOMAIN_CITATIONS", + } + BotCapabilityMetadata_BotCapabilityType_value = map[string]int32{ + "UNKNOWN": 0, + "PROGRESS_INDICATOR": 1, + "RICH_RESPONSE_HEADING": 2, + "RICH_RESPONSE_NESTED_LIST": 3, + "AI_MEMORY": 4, + "RICH_RESPONSE_THREAD_SURFING": 5, + "RICH_RESPONSE_TABLE": 6, + "RICH_RESPONSE_CODE": 7, + "RICH_RESPONSE_STRUCTURED_RESPONSE": 8, + "RICH_RESPONSE_INLINE_IMAGE": 9, + "WA_IG_1P_PLUGIN_RANKING_CONTROL": 10, + "WA_IG_1P_PLUGIN_RANKING_UPDATE_1": 11, + "WA_IG_1P_PLUGIN_RANKING_UPDATE_2": 12, + "WA_IG_1P_PLUGIN_RANKING_UPDATE_3": 13, + "WA_IG_1P_PLUGIN_RANKING_UPDATE_4": 14, + "WA_IG_1P_PLUGIN_RANKING_UPDATE_5": 15, + "WA_IG_1P_PLUGIN_RANKING_UPDATE_6": 16, + "WA_IG_1P_PLUGIN_RANKING_UPDATE_7": 17, + "WA_IG_1P_PLUGIN_RANKING_UPDATE_8": 18, + "WA_IG_1P_PLUGIN_RANKING_UPDATE_9": 19, + "WA_IG_1P_PLUGIN_RANKING_UPDATE_10": 20, + "RICH_RESPONSE_SUB_HEADING": 21, + "RICH_RESPONSE_GRID_IMAGE": 22, + "AI_STUDIO_UGC_MEMORY": 23, + "RICH_RESPONSE_LATEX": 24, + "RICH_RESPONSE_MAPS": 25, + "RICH_RESPONSE_INLINE_REELS": 26, + "AGENTIC_PLANNING": 27, + "ACCOUNT_LINKING": 28, + "STREAMING_DISAGGREGATION": 29, + "RICH_RESPONSE_GRID_IMAGE_3P": 30, + "RICH_RESPONSE_LATEX_INLINE": 31, + "QUERY_PLAN": 32, + "PROACTIVE_MESSAGE": 33, + "RICH_RESPONSE_UNIFIED_RESPONSE": 34, + "PROMOTION_MESSAGE": 35, + "SIMPLIFIED_PROFILE_PAGE": 36, + "RICH_RESPONSE_SOURCES_IN_MESSAGE": 37, + "RICH_RESPONSE_SIDE_BY_SIDE_SURVEY": 38, + "RICH_RESPONSE_UNIFIED_TEXT_COMPONENT": 39, + "AI_SHARED_MEMORY": 40, + "RICH_RESPONSE_UNIFIED_SOURCES": 41, + "RICH_RESPONSE_UNIFIED_DOMAIN_CITATIONS": 42, + } +) + +func (x BotCapabilityMetadata_BotCapabilityType) Enum() *BotCapabilityMetadata_BotCapabilityType { + p := new(BotCapabilityMetadata_BotCapabilityType) + *p = x + return p +} + +func (x BotCapabilityMetadata_BotCapabilityType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (BotCapabilityMetadata_BotCapabilityType) Descriptor() protoreflect.EnumDescriptor { + return file_waBotMetadata_WABotMetadata_proto_enumTypes[16].Descriptor() +} + +func (BotCapabilityMetadata_BotCapabilityType) Type() protoreflect.EnumType { + return &file_waBotMetadata_WABotMetadata_proto_enumTypes[16] +} + +func (x BotCapabilityMetadata_BotCapabilityType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *BotCapabilityMetadata_BotCapabilityType) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = BotCapabilityMetadata_BotCapabilityType(num) + return nil +} + +// Deprecated: Use BotCapabilityMetadata_BotCapabilityType.Descriptor instead. +func (BotCapabilityMetadata_BotCapabilityType) EnumDescriptor() ([]byte, []int) { + return file_waBotMetadata_WABotMetadata_proto_rawDescGZIP(), []int{8, 0} +} + +type BotModeSelectionMetadata_BotUserSelectionMode int32 + +const ( + BotModeSelectionMetadata_UNKNOWN_MODE BotModeSelectionMetadata_BotUserSelectionMode = 0 + BotModeSelectionMetadata_REASONING_MODE BotModeSelectionMetadata_BotUserSelectionMode = 1 +) + +// Enum value maps for BotModeSelectionMetadata_BotUserSelectionMode. +var ( + BotModeSelectionMetadata_BotUserSelectionMode_name = map[int32]string{ + 0: "UNKNOWN_MODE", + 1: "REASONING_MODE", + } + BotModeSelectionMetadata_BotUserSelectionMode_value = map[string]int32{ + "UNKNOWN_MODE": 0, + "REASONING_MODE": 1, + } +) + +func (x BotModeSelectionMetadata_BotUserSelectionMode) Enum() *BotModeSelectionMetadata_BotUserSelectionMode { + p := new(BotModeSelectionMetadata_BotUserSelectionMode) + *p = x + return p +} + +func (x BotModeSelectionMetadata_BotUserSelectionMode) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (BotModeSelectionMetadata_BotUserSelectionMode) Descriptor() protoreflect.EnumDescriptor { + return file_waBotMetadata_WABotMetadata_proto_enumTypes[17].Descriptor() +} + +func (BotModeSelectionMetadata_BotUserSelectionMode) Type() protoreflect.EnumType { + return &file_waBotMetadata_WABotMetadata_proto_enumTypes[17] +} + +func (x BotModeSelectionMetadata_BotUserSelectionMode) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *BotModeSelectionMetadata_BotUserSelectionMode) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = BotModeSelectionMetadata_BotUserSelectionMode(num) + return nil +} + +// Deprecated: Use BotModeSelectionMetadata_BotUserSelectionMode.Descriptor instead. +func (BotModeSelectionMetadata_BotUserSelectionMode) EnumDescriptor() ([]byte, []int) { + return file_waBotMetadata_WABotMetadata_proto_rawDescGZIP(), []int{9, 0} +} + +type BotQuotaMetadata_BotFeatureQuotaMetadata_BotFeatureType int32 + +const ( + BotQuotaMetadata_BotFeatureQuotaMetadata_UNKNOWN_FEATURE BotQuotaMetadata_BotFeatureQuotaMetadata_BotFeatureType = 0 + BotQuotaMetadata_BotFeatureQuotaMetadata_REASONING_FEATURE BotQuotaMetadata_BotFeatureQuotaMetadata_BotFeatureType = 1 +) + +// Enum value maps for BotQuotaMetadata_BotFeatureQuotaMetadata_BotFeatureType. +var ( + BotQuotaMetadata_BotFeatureQuotaMetadata_BotFeatureType_name = map[int32]string{ + 0: "UNKNOWN_FEATURE", + 1: "REASONING_FEATURE", + } + BotQuotaMetadata_BotFeatureQuotaMetadata_BotFeatureType_value = map[string]int32{ + "UNKNOWN_FEATURE": 0, + "REASONING_FEATURE": 1, + } +) + +func (x BotQuotaMetadata_BotFeatureQuotaMetadata_BotFeatureType) Enum() *BotQuotaMetadata_BotFeatureQuotaMetadata_BotFeatureType { + p := new(BotQuotaMetadata_BotFeatureQuotaMetadata_BotFeatureType) + *p = x + return p +} + +func (x BotQuotaMetadata_BotFeatureQuotaMetadata_BotFeatureType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (BotQuotaMetadata_BotFeatureQuotaMetadata_BotFeatureType) Descriptor() protoreflect.EnumDescriptor { + return file_waBotMetadata_WABotMetadata_proto_enumTypes[18].Descriptor() +} + +func (BotQuotaMetadata_BotFeatureQuotaMetadata_BotFeatureType) Type() protoreflect.EnumType { + return &file_waBotMetadata_WABotMetadata_proto_enumTypes[18] +} + +func (x BotQuotaMetadata_BotFeatureQuotaMetadata_BotFeatureType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *BotQuotaMetadata_BotFeatureQuotaMetadata_BotFeatureType) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = BotQuotaMetadata_BotFeatureQuotaMetadata_BotFeatureType(num) + return nil +} + +// Deprecated: Use BotQuotaMetadata_BotFeatureQuotaMetadata_BotFeatureType.Descriptor instead. +func (BotQuotaMetadata_BotFeatureQuotaMetadata_BotFeatureType) EnumDescriptor() ([]byte, []int) { + return file_waBotMetadata_WABotMetadata_proto_rawDescGZIP(), []int{10, 0, 0} +} + +type BotImagineMetadata_ImagineType int32 + +const ( + BotImagineMetadata_UNKNOWN BotImagineMetadata_ImagineType = 0 + BotImagineMetadata_IMAGINE BotImagineMetadata_ImagineType = 1 + BotImagineMetadata_MEMU BotImagineMetadata_ImagineType = 2 + BotImagineMetadata_FLASH BotImagineMetadata_ImagineType = 3 + BotImagineMetadata_EDIT BotImagineMetadata_ImagineType = 4 +) + +// Enum value maps for BotImagineMetadata_ImagineType. +var ( + BotImagineMetadata_ImagineType_name = map[int32]string{ + 0: "UNKNOWN", + 1: "IMAGINE", + 2: "MEMU", + 3: "FLASH", + 4: "EDIT", + } + BotImagineMetadata_ImagineType_value = map[string]int32{ + "UNKNOWN": 0, + "IMAGINE": 1, + "MEMU": 2, + "FLASH": 3, + "EDIT": 4, + } +) + +func (x BotImagineMetadata_ImagineType) Enum() *BotImagineMetadata_ImagineType { + p := new(BotImagineMetadata_ImagineType) + *p = x + return p +} + +func (x BotImagineMetadata_ImagineType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (BotImagineMetadata_ImagineType) Descriptor() protoreflect.EnumDescriptor { + return file_waBotMetadata_WABotMetadata_proto_enumTypes[19].Descriptor() +} + +func (BotImagineMetadata_ImagineType) Type() protoreflect.EnumType { + return &file_waBotMetadata_WABotMetadata_proto_enumTypes[19] +} + +func (x BotImagineMetadata_ImagineType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *BotImagineMetadata_ImagineType) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = BotImagineMetadata_ImagineType(num) + return nil +} + +// Deprecated: Use BotImagineMetadata_ImagineType.Descriptor instead. +func (BotImagineMetadata_ImagineType) EnumDescriptor() ([]byte, []int) { + return file_waBotMetadata_WABotMetadata_proto_rawDescGZIP(), []int{11, 0} +} + +type BotSourcesMetadata_BotSourceItem_SourceProvider int32 + +const ( + BotSourcesMetadata_BotSourceItem_UNKNOWN BotSourcesMetadata_BotSourceItem_SourceProvider = 0 + BotSourcesMetadata_BotSourceItem_BING BotSourcesMetadata_BotSourceItem_SourceProvider = 1 + BotSourcesMetadata_BotSourceItem_GOOGLE BotSourcesMetadata_BotSourceItem_SourceProvider = 2 + BotSourcesMetadata_BotSourceItem_SUPPORT BotSourcesMetadata_BotSourceItem_SourceProvider = 3 + BotSourcesMetadata_BotSourceItem_OTHER BotSourcesMetadata_BotSourceItem_SourceProvider = 4 +) + +// Enum value maps for BotSourcesMetadata_BotSourceItem_SourceProvider. +var ( + BotSourcesMetadata_BotSourceItem_SourceProvider_name = map[int32]string{ + 0: "UNKNOWN", + 1: "BING", + 2: "GOOGLE", + 3: "SUPPORT", + 4: "OTHER", + } + BotSourcesMetadata_BotSourceItem_SourceProvider_value = map[string]int32{ + "UNKNOWN": 0, + "BING": 1, + "GOOGLE": 2, + "SUPPORT": 3, + "OTHER": 4, + } +) + +func (x BotSourcesMetadata_BotSourceItem_SourceProvider) Enum() *BotSourcesMetadata_BotSourceItem_SourceProvider { + p := new(BotSourcesMetadata_BotSourceItem_SourceProvider) + *p = x + return p +} + +func (x BotSourcesMetadata_BotSourceItem_SourceProvider) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (BotSourcesMetadata_BotSourceItem_SourceProvider) Descriptor() protoreflect.EnumDescriptor { + return file_waBotMetadata_WABotMetadata_proto_enumTypes[20].Descriptor() +} + +func (BotSourcesMetadata_BotSourceItem_SourceProvider) Type() protoreflect.EnumType { + return &file_waBotMetadata_WABotMetadata_proto_enumTypes[20] +} + +func (x BotSourcesMetadata_BotSourceItem_SourceProvider) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *BotSourcesMetadata_BotSourceItem_SourceProvider) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = BotSourcesMetadata_BotSourceItem_SourceProvider(num) + return nil +} + +// Deprecated: Use BotSourcesMetadata_BotSourceItem_SourceProvider.Descriptor instead. +func (BotSourcesMetadata_BotSourceItem_SourceProvider) EnumDescriptor() ([]byte, []int) { + return file_waBotMetadata_WABotMetadata_proto_rawDescGZIP(), []int{12, 0, 0} +} + +type BotMessageOrigin_BotMessageOriginType int32 + +const ( + BotMessageOrigin_BOT_MESSAGE_ORIGIN_TYPE_AI_INITIATED BotMessageOrigin_BotMessageOriginType = 0 +) + +// Enum value maps for BotMessageOrigin_BotMessageOriginType. +var ( + BotMessageOrigin_BotMessageOriginType_name = map[int32]string{ + 0: "BOT_MESSAGE_ORIGIN_TYPE_AI_INITIATED", + } + BotMessageOrigin_BotMessageOriginType_value = map[string]int32{ + "BOT_MESSAGE_ORIGIN_TYPE_AI_INITIATED": 0, + } +) + +func (x BotMessageOrigin_BotMessageOriginType) Enum() *BotMessageOrigin_BotMessageOriginType { + p := new(BotMessageOrigin_BotMessageOriginType) + *p = x + return p +} + +func (x BotMessageOrigin_BotMessageOriginType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (BotMessageOrigin_BotMessageOriginType) Descriptor() protoreflect.EnumDescriptor { + return file_waBotMetadata_WABotMetadata_proto_enumTypes[21].Descriptor() +} + +func (BotMessageOrigin_BotMessageOriginType) Type() protoreflect.EnumType { + return &file_waBotMetadata_WABotMetadata_proto_enumTypes[21] +} + +func (x BotMessageOrigin_BotMessageOriginType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *BotMessageOrigin_BotMessageOriginType) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = BotMessageOrigin_BotMessageOriginType(num) + return nil +} + +// Deprecated: Use BotMessageOrigin_BotMessageOriginType.Descriptor instead. +func (BotMessageOrigin_BotMessageOriginType) EnumDescriptor() ([]byte, []int) { + return file_waBotMetadata_WABotMetadata_proto_rawDescGZIP(), []int{13, 0} +} + +type AIThreadInfo_AIThreadClientInfo_AIThreadType int32 + +const ( + AIThreadInfo_AIThreadClientInfo_UNKNOWN AIThreadInfo_AIThreadClientInfo_AIThreadType = 0 + AIThreadInfo_AIThreadClientInfo_DEFAULT AIThreadInfo_AIThreadClientInfo_AIThreadType = 1 + AIThreadInfo_AIThreadClientInfo_INCOGNITO AIThreadInfo_AIThreadClientInfo_AIThreadType = 2 +) + +// Enum value maps for AIThreadInfo_AIThreadClientInfo_AIThreadType. +var ( + AIThreadInfo_AIThreadClientInfo_AIThreadType_name = map[int32]string{ + 0: "UNKNOWN", + 1: "DEFAULT", + 2: "INCOGNITO", + } + AIThreadInfo_AIThreadClientInfo_AIThreadType_value = map[string]int32{ + "UNKNOWN": 0, + "DEFAULT": 1, + "INCOGNITO": 2, + } +) + +func (x AIThreadInfo_AIThreadClientInfo_AIThreadType) Enum() *AIThreadInfo_AIThreadClientInfo_AIThreadType { + p := new(AIThreadInfo_AIThreadClientInfo_AIThreadType) + *p = x + return p +} + +func (x AIThreadInfo_AIThreadClientInfo_AIThreadType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (AIThreadInfo_AIThreadClientInfo_AIThreadType) Descriptor() protoreflect.EnumDescriptor { + return file_waBotMetadata_WABotMetadata_proto_enumTypes[22].Descriptor() +} + +func (AIThreadInfo_AIThreadClientInfo_AIThreadType) Type() protoreflect.EnumType { + return &file_waBotMetadata_WABotMetadata_proto_enumTypes[22] +} + +func (x AIThreadInfo_AIThreadClientInfo_AIThreadType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *AIThreadInfo_AIThreadClientInfo_AIThreadType) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = AIThreadInfo_AIThreadClientInfo_AIThreadType(num) + return nil +} + +// Deprecated: Use AIThreadInfo_AIThreadClientInfo_AIThreadType.Descriptor instead. +func (AIThreadInfo_AIThreadClientInfo_AIThreadType) EnumDescriptor() ([]byte, []int) { + return file_waBotMetadata_WABotMetadata_proto_rawDescGZIP(), []int{14, 0, 0} +} + +type BotPluginMetadata struct { + state protoimpl.MessageState `protogen:"open.v1"` + Provider *BotPluginMetadata_SearchProvider `protobuf:"varint,1,opt,name=provider,enum=WABotMetadata.BotPluginMetadata_SearchProvider" json:"provider,omitempty"` + PluginType *BotPluginMetadata_PluginType `protobuf:"varint,2,opt,name=pluginType,enum=WABotMetadata.BotPluginMetadata_PluginType" json:"pluginType,omitempty"` + ThumbnailCDNURL *string `protobuf:"bytes,3,opt,name=thumbnailCDNURL" json:"thumbnailCDNURL,omitempty"` + ProfilePhotoCDNURL *string `protobuf:"bytes,4,opt,name=profilePhotoCDNURL" json:"profilePhotoCDNURL,omitempty"` + SearchProviderURL *string `protobuf:"bytes,5,opt,name=searchProviderURL" json:"searchProviderURL,omitempty"` + ReferenceIndex *uint32 `protobuf:"varint,6,opt,name=referenceIndex" json:"referenceIndex,omitempty"` + ExpectedLinksCount *uint32 `protobuf:"varint,7,opt,name=expectedLinksCount" json:"expectedLinksCount,omitempty"` + SearchQuery *string `protobuf:"bytes,9,opt,name=searchQuery" json:"searchQuery,omitempty"` + ParentPluginMessageKey *waCommon.MessageKey `protobuf:"bytes,10,opt,name=parentPluginMessageKey" json:"parentPluginMessageKey,omitempty"` + DeprecatedField *BotPluginMetadata_PluginType `protobuf:"varint,11,opt,name=deprecatedField,enum=WABotMetadata.BotPluginMetadata_PluginType" json:"deprecatedField,omitempty"` + ParentPluginType *BotPluginMetadata_PluginType `protobuf:"varint,12,opt,name=parentPluginType,enum=WABotMetadata.BotPluginMetadata_PluginType" json:"parentPluginType,omitempty"` + FaviconCDNURL *string `protobuf:"bytes,13,opt,name=faviconCDNURL" json:"faviconCDNURL,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BotPluginMetadata) Reset() { + *x = BotPluginMetadata{} + mi := &file_waBotMetadata_WABotMetadata_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BotPluginMetadata) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BotPluginMetadata) ProtoMessage() {} + +func (x *BotPluginMetadata) ProtoReflect() protoreflect.Message { + mi := &file_waBotMetadata_WABotMetadata_proto_msgTypes[0] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BotPluginMetadata.ProtoReflect.Descriptor instead. +func (*BotPluginMetadata) Descriptor() ([]byte, []int) { + return file_waBotMetadata_WABotMetadata_proto_rawDescGZIP(), []int{0} +} + +func (x *BotPluginMetadata) GetProvider() BotPluginMetadata_SearchProvider { + if x != nil && x.Provider != nil { + return *x.Provider + } + return BotPluginMetadata_UNKNOWN +} + +func (x *BotPluginMetadata) GetPluginType() BotPluginMetadata_PluginType { + if x != nil && x.PluginType != nil { + return *x.PluginType + } + return BotPluginMetadata_UNKNOWN_PLUGIN +} + +func (x *BotPluginMetadata) GetThumbnailCDNURL() string { + if x != nil && x.ThumbnailCDNURL != nil { + return *x.ThumbnailCDNURL + } + return "" +} + +func (x *BotPluginMetadata) GetProfilePhotoCDNURL() string { + if x != nil && x.ProfilePhotoCDNURL != nil { + return *x.ProfilePhotoCDNURL + } + return "" +} + +func (x *BotPluginMetadata) GetSearchProviderURL() string { + if x != nil && x.SearchProviderURL != nil { + return *x.SearchProviderURL + } + return "" +} + +func (x *BotPluginMetadata) GetReferenceIndex() uint32 { + if x != nil && x.ReferenceIndex != nil { + return *x.ReferenceIndex + } + return 0 +} + +func (x *BotPluginMetadata) GetExpectedLinksCount() uint32 { + if x != nil && x.ExpectedLinksCount != nil { + return *x.ExpectedLinksCount + } + return 0 +} + +func (x *BotPluginMetadata) GetSearchQuery() string { + if x != nil && x.SearchQuery != nil { + return *x.SearchQuery + } + return "" +} + +func (x *BotPluginMetadata) GetParentPluginMessageKey() *waCommon.MessageKey { + if x != nil { + return x.ParentPluginMessageKey + } + return nil +} + +func (x *BotPluginMetadata) GetDeprecatedField() BotPluginMetadata_PluginType { + if x != nil && x.DeprecatedField != nil { + return *x.DeprecatedField + } + return BotPluginMetadata_UNKNOWN_PLUGIN +} + +func (x *BotPluginMetadata) GetParentPluginType() BotPluginMetadata_PluginType { + if x != nil && x.ParentPluginType != nil { + return *x.ParentPluginType + } + return BotPluginMetadata_UNKNOWN_PLUGIN +} + +func (x *BotPluginMetadata) GetFaviconCDNURL() string { + if x != nil && x.FaviconCDNURL != nil { + return *x.FaviconCDNURL + } + return "" +} + +type BotLinkedAccount struct { + state protoimpl.MessageState `protogen:"open.v1"` + Type *BotLinkedAccount_BotLinkedAccountType `protobuf:"varint,1,opt,name=type,enum=WABotMetadata.BotLinkedAccount_BotLinkedAccountType" json:"type,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BotLinkedAccount) Reset() { + *x = BotLinkedAccount{} + mi := &file_waBotMetadata_WABotMetadata_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BotLinkedAccount) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BotLinkedAccount) ProtoMessage() {} + +func (x *BotLinkedAccount) ProtoReflect() protoreflect.Message { + mi := &file_waBotMetadata_WABotMetadata_proto_msgTypes[1] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BotLinkedAccount.ProtoReflect.Descriptor instead. +func (*BotLinkedAccount) Descriptor() ([]byte, []int) { + return file_waBotMetadata_WABotMetadata_proto_rawDescGZIP(), []int{1} +} + +func (x *BotLinkedAccount) GetType() BotLinkedAccount_BotLinkedAccountType { + if x != nil && x.Type != nil { + return *x.Type + } + return BotLinkedAccount_BOT_LINKED_ACCOUNT_TYPE_1P +} + +type BotSignatureVerificationUseCaseProof struct { + state protoimpl.MessageState `protogen:"open.v1"` + Version *int32 `protobuf:"varint,1,opt,name=version" json:"version,omitempty"` + UseCase *BotSignatureVerificationUseCaseProof_BotSignatureUseCase `protobuf:"varint,2,opt,name=useCase,enum=WABotMetadata.BotSignatureVerificationUseCaseProof_BotSignatureUseCase" json:"useCase,omitempty"` + Signature []byte `protobuf:"bytes,3,opt,name=signature" json:"signature,omitempty"` + CertificateChain []byte `protobuf:"bytes,4,opt,name=certificateChain" json:"certificateChain,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BotSignatureVerificationUseCaseProof) Reset() { + *x = BotSignatureVerificationUseCaseProof{} + mi := &file_waBotMetadata_WABotMetadata_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BotSignatureVerificationUseCaseProof) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BotSignatureVerificationUseCaseProof) ProtoMessage() {} + +func (x *BotSignatureVerificationUseCaseProof) ProtoReflect() protoreflect.Message { + mi := &file_waBotMetadata_WABotMetadata_proto_msgTypes[2] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BotSignatureVerificationUseCaseProof.ProtoReflect.Descriptor instead. +func (*BotSignatureVerificationUseCaseProof) Descriptor() ([]byte, []int) { + return file_waBotMetadata_WABotMetadata_proto_rawDescGZIP(), []int{2} +} + +func (x *BotSignatureVerificationUseCaseProof) GetVersion() int32 { + if x != nil && x.Version != nil { + return *x.Version + } + return 0 +} + +func (x *BotSignatureVerificationUseCaseProof) GetUseCase() BotSignatureVerificationUseCaseProof_BotSignatureUseCase { + if x != nil && x.UseCase != nil { + return *x.UseCase + } + return BotSignatureVerificationUseCaseProof_WA_BOT_MSG +} + +func (x *BotSignatureVerificationUseCaseProof) GetSignature() []byte { + if x != nil { + return x.Signature + } + return nil +} + +func (x *BotSignatureVerificationUseCaseProof) GetCertificateChain() []byte { + if x != nil { + return x.CertificateChain + } + return nil +} + +type BotPromotionMessageMetadata struct { + state protoimpl.MessageState `protogen:"open.v1"` + PromotionType *BotPromotionMessageMetadata_BotPromotionType `protobuf:"varint,1,opt,name=promotionType,enum=WABotMetadata.BotPromotionMessageMetadata_BotPromotionType" json:"promotionType,omitempty"` + ButtonTitle *string `protobuf:"bytes,2,opt,name=buttonTitle" json:"buttonTitle,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BotPromotionMessageMetadata) Reset() { + *x = BotPromotionMessageMetadata{} + mi := &file_waBotMetadata_WABotMetadata_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BotPromotionMessageMetadata) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BotPromotionMessageMetadata) ProtoMessage() {} + +func (x *BotPromotionMessageMetadata) ProtoReflect() protoreflect.Message { + mi := &file_waBotMetadata_WABotMetadata_proto_msgTypes[3] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BotPromotionMessageMetadata.ProtoReflect.Descriptor instead. +func (*BotPromotionMessageMetadata) Descriptor() ([]byte, []int) { + return file_waBotMetadata_WABotMetadata_proto_rawDescGZIP(), []int{3} +} + +func (x *BotPromotionMessageMetadata) GetPromotionType() BotPromotionMessageMetadata_BotPromotionType { + if x != nil && x.PromotionType != nil { + return *x.PromotionType + } + return BotPromotionMessageMetadata_UNKNOWN_TYPE +} + +func (x *BotPromotionMessageMetadata) GetButtonTitle() string { + if x != nil && x.ButtonTitle != nil { + return *x.ButtonTitle + } + return "" +} + +type BotMediaMetadata struct { + state protoimpl.MessageState `protogen:"open.v1"` + FileSHA256 *string `protobuf:"bytes,1,opt,name=fileSHA256" json:"fileSHA256,omitempty"` + MediaKey *string `protobuf:"bytes,2,opt,name=mediaKey" json:"mediaKey,omitempty"` + FileEncSHA256 *string `protobuf:"bytes,3,opt,name=fileEncSHA256" json:"fileEncSHA256,omitempty"` + DirectPath *string `protobuf:"bytes,4,opt,name=directPath" json:"directPath,omitempty"` + MediaKeyTimestamp *int64 `protobuf:"varint,5,opt,name=mediaKeyTimestamp" json:"mediaKeyTimestamp,omitempty"` + Mimetype *string `protobuf:"bytes,6,opt,name=mimetype" json:"mimetype,omitempty"` + OrientationType *BotMediaMetadata_OrientationType `protobuf:"varint,7,opt,name=orientationType,enum=WABotMetadata.BotMediaMetadata_OrientationType" json:"orientationType,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BotMediaMetadata) Reset() { + *x = BotMediaMetadata{} + mi := &file_waBotMetadata_WABotMetadata_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BotMediaMetadata) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BotMediaMetadata) ProtoMessage() {} + +func (x *BotMediaMetadata) ProtoReflect() protoreflect.Message { + mi := &file_waBotMetadata_WABotMetadata_proto_msgTypes[4] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BotMediaMetadata.ProtoReflect.Descriptor instead. +func (*BotMediaMetadata) Descriptor() ([]byte, []int) { + return file_waBotMetadata_WABotMetadata_proto_rawDescGZIP(), []int{4} +} + +func (x *BotMediaMetadata) GetFileSHA256() string { + if x != nil && x.FileSHA256 != nil { + return *x.FileSHA256 + } + return "" +} + +func (x *BotMediaMetadata) GetMediaKey() string { + if x != nil && x.MediaKey != nil { + return *x.MediaKey + } + return "" +} + +func (x *BotMediaMetadata) GetFileEncSHA256() string { + if x != nil && x.FileEncSHA256 != nil { + return *x.FileEncSHA256 + } + return "" +} + +func (x *BotMediaMetadata) GetDirectPath() string { + if x != nil && x.DirectPath != nil { + return *x.DirectPath + } + return "" +} + +func (x *BotMediaMetadata) GetMediaKeyTimestamp() int64 { + if x != nil && x.MediaKeyTimestamp != nil { + return *x.MediaKeyTimestamp + } + return 0 +} + +func (x *BotMediaMetadata) GetMimetype() string { + if x != nil && x.Mimetype != nil { + return *x.Mimetype + } + return "" +} + +func (x *BotMediaMetadata) GetOrientationType() BotMediaMetadata_OrientationType { + if x != nil && x.OrientationType != nil { + return *x.OrientationType + } + return BotMediaMetadata_CENTER +} + +type BotReminderMetadata struct { + state protoimpl.MessageState `protogen:"open.v1"` + RequestMessageKey *waCommon.MessageKey `protobuf:"bytes,1,opt,name=requestMessageKey" json:"requestMessageKey,omitempty"` + Action *BotReminderMetadata_ReminderAction `protobuf:"varint,2,opt,name=action,enum=WABotMetadata.BotReminderMetadata_ReminderAction" json:"action,omitempty"` + Name *string `protobuf:"bytes,3,opt,name=name" json:"name,omitempty"` + NextTriggerTimestamp *uint64 `protobuf:"varint,4,opt,name=nextTriggerTimestamp" json:"nextTriggerTimestamp,omitempty"` + Frequency *BotReminderMetadata_ReminderFrequency `protobuf:"varint,5,opt,name=frequency,enum=WABotMetadata.BotReminderMetadata_ReminderFrequency" json:"frequency,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BotReminderMetadata) Reset() { + *x = BotReminderMetadata{} + mi := &file_waBotMetadata_WABotMetadata_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BotReminderMetadata) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BotReminderMetadata) ProtoMessage() {} + +func (x *BotReminderMetadata) ProtoReflect() protoreflect.Message { + mi := &file_waBotMetadata_WABotMetadata_proto_msgTypes[5] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BotReminderMetadata.ProtoReflect.Descriptor instead. +func (*BotReminderMetadata) Descriptor() ([]byte, []int) { + return file_waBotMetadata_WABotMetadata_proto_rawDescGZIP(), []int{5} +} + +func (x *BotReminderMetadata) GetRequestMessageKey() *waCommon.MessageKey { + if x != nil { + return x.RequestMessageKey + } + return nil +} + +func (x *BotReminderMetadata) GetAction() BotReminderMetadata_ReminderAction { + if x != nil && x.Action != nil { + return *x.Action + } + return BotReminderMetadata_NOTIFY +} + +func (x *BotReminderMetadata) GetName() string { + if x != nil && x.Name != nil { + return *x.Name + } + return "" +} + +func (x *BotReminderMetadata) GetNextTriggerTimestamp() uint64 { + if x != nil && x.NextTriggerTimestamp != nil { + return *x.NextTriggerTimestamp + } + return 0 +} + +func (x *BotReminderMetadata) GetFrequency() BotReminderMetadata_ReminderFrequency { + if x != nil && x.Frequency != nil { + return *x.Frequency + } + return BotReminderMetadata_ONCE +} + +type BotModelMetadata struct { + state protoimpl.MessageState `protogen:"open.v1"` + ModelType *BotModelMetadata_ModelType `protobuf:"varint,1,opt,name=modelType,enum=WABotMetadata.BotModelMetadata_ModelType" json:"modelType,omitempty"` + PremiumModelStatus *BotModelMetadata_PremiumModelStatus `protobuf:"varint,2,opt,name=premiumModelStatus,enum=WABotMetadata.BotModelMetadata_PremiumModelStatus" json:"premiumModelStatus,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BotModelMetadata) Reset() { + *x = BotModelMetadata{} + mi := &file_waBotMetadata_WABotMetadata_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BotModelMetadata) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BotModelMetadata) ProtoMessage() {} + +func (x *BotModelMetadata) ProtoReflect() protoreflect.Message { + mi := &file_waBotMetadata_WABotMetadata_proto_msgTypes[6] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BotModelMetadata.ProtoReflect.Descriptor instead. +func (*BotModelMetadata) Descriptor() ([]byte, []int) { + return file_waBotMetadata_WABotMetadata_proto_rawDescGZIP(), []int{6} +} + +func (x *BotModelMetadata) GetModelType() BotModelMetadata_ModelType { + if x != nil && x.ModelType != nil { + return *x.ModelType + } + return BotModelMetadata_UNKNOWN_TYPE +} + +func (x *BotModelMetadata) GetPremiumModelStatus() BotModelMetadata_PremiumModelStatus { + if x != nil && x.PremiumModelStatus != nil { + return *x.PremiumModelStatus + } + return BotModelMetadata_UNKNOWN_STATUS +} + +type BotProgressIndicatorMetadata struct { + state protoimpl.MessageState `protogen:"open.v1"` + ProgressDescription *string `protobuf:"bytes,1,opt,name=progressDescription" json:"progressDescription,omitempty"` + StepsMetadata []*BotProgressIndicatorMetadata_BotPlanningStepMetadata `protobuf:"bytes,2,rep,name=stepsMetadata" json:"stepsMetadata,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BotProgressIndicatorMetadata) Reset() { + *x = BotProgressIndicatorMetadata{} + mi := &file_waBotMetadata_WABotMetadata_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BotProgressIndicatorMetadata) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BotProgressIndicatorMetadata) ProtoMessage() {} + +func (x *BotProgressIndicatorMetadata) ProtoReflect() protoreflect.Message { + mi := &file_waBotMetadata_WABotMetadata_proto_msgTypes[7] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BotProgressIndicatorMetadata.ProtoReflect.Descriptor instead. +func (*BotProgressIndicatorMetadata) Descriptor() ([]byte, []int) { + return file_waBotMetadata_WABotMetadata_proto_rawDescGZIP(), []int{7} +} + +func (x *BotProgressIndicatorMetadata) GetProgressDescription() string { + if x != nil && x.ProgressDescription != nil { + return *x.ProgressDescription + } + return "" +} + +func (x *BotProgressIndicatorMetadata) GetStepsMetadata() []*BotProgressIndicatorMetadata_BotPlanningStepMetadata { + if x != nil { + return x.StepsMetadata + } + return nil +} + +type BotCapabilityMetadata struct { + state protoimpl.MessageState `protogen:"open.v1"` + Capabilities []BotCapabilityMetadata_BotCapabilityType `protobuf:"varint,1,rep,name=capabilities,enum=WABotMetadata.BotCapabilityMetadata_BotCapabilityType" json:"capabilities,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BotCapabilityMetadata) Reset() { + *x = BotCapabilityMetadata{} + mi := &file_waBotMetadata_WABotMetadata_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BotCapabilityMetadata) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BotCapabilityMetadata) ProtoMessage() {} + +func (x *BotCapabilityMetadata) ProtoReflect() protoreflect.Message { + mi := &file_waBotMetadata_WABotMetadata_proto_msgTypes[8] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BotCapabilityMetadata.ProtoReflect.Descriptor instead. +func (*BotCapabilityMetadata) Descriptor() ([]byte, []int) { + return file_waBotMetadata_WABotMetadata_proto_rawDescGZIP(), []int{8} +} + +func (x *BotCapabilityMetadata) GetCapabilities() []BotCapabilityMetadata_BotCapabilityType { + if x != nil { + return x.Capabilities + } + return nil +} + +type BotModeSelectionMetadata struct { + state protoimpl.MessageState `protogen:"open.v1"` + Mode []BotModeSelectionMetadata_BotUserSelectionMode `protobuf:"varint,1,rep,name=mode,enum=WABotMetadata.BotModeSelectionMetadata_BotUserSelectionMode" json:"mode,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BotModeSelectionMetadata) Reset() { + *x = BotModeSelectionMetadata{} + mi := &file_waBotMetadata_WABotMetadata_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BotModeSelectionMetadata) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BotModeSelectionMetadata) ProtoMessage() {} + +func (x *BotModeSelectionMetadata) ProtoReflect() protoreflect.Message { + mi := &file_waBotMetadata_WABotMetadata_proto_msgTypes[9] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BotModeSelectionMetadata.ProtoReflect.Descriptor instead. +func (*BotModeSelectionMetadata) Descriptor() ([]byte, []int) { + return file_waBotMetadata_WABotMetadata_proto_rawDescGZIP(), []int{9} +} + +func (x *BotModeSelectionMetadata) GetMode() []BotModeSelectionMetadata_BotUserSelectionMode { + if x != nil { + return x.Mode + } + return nil +} + +type BotQuotaMetadata struct { + state protoimpl.MessageState `protogen:"open.v1"` + BotFeatureQuotaMetadata []*BotQuotaMetadata_BotFeatureQuotaMetadata `protobuf:"bytes,1,rep,name=botFeatureQuotaMetadata" json:"botFeatureQuotaMetadata,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BotQuotaMetadata) Reset() { + *x = BotQuotaMetadata{} + mi := &file_waBotMetadata_WABotMetadata_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BotQuotaMetadata) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BotQuotaMetadata) ProtoMessage() {} + +func (x *BotQuotaMetadata) ProtoReflect() protoreflect.Message { + mi := &file_waBotMetadata_WABotMetadata_proto_msgTypes[10] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BotQuotaMetadata.ProtoReflect.Descriptor instead. +func (*BotQuotaMetadata) Descriptor() ([]byte, []int) { + return file_waBotMetadata_WABotMetadata_proto_rawDescGZIP(), []int{10} +} + +func (x *BotQuotaMetadata) GetBotFeatureQuotaMetadata() []*BotQuotaMetadata_BotFeatureQuotaMetadata { + if x != nil { + return x.BotFeatureQuotaMetadata + } + return nil +} + +type BotImagineMetadata struct { + state protoimpl.MessageState `protogen:"open.v1"` + ImagineType *BotImagineMetadata_ImagineType `protobuf:"varint,1,opt,name=imagineType,enum=WABotMetadata.BotImagineMetadata_ImagineType" json:"imagineType,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BotImagineMetadata) Reset() { + *x = BotImagineMetadata{} + mi := &file_waBotMetadata_WABotMetadata_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BotImagineMetadata) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BotImagineMetadata) ProtoMessage() {} + +func (x *BotImagineMetadata) ProtoReflect() protoreflect.Message { + mi := &file_waBotMetadata_WABotMetadata_proto_msgTypes[11] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BotImagineMetadata.ProtoReflect.Descriptor instead. +func (*BotImagineMetadata) Descriptor() ([]byte, []int) { + return file_waBotMetadata_WABotMetadata_proto_rawDescGZIP(), []int{11} +} + +func (x *BotImagineMetadata) GetImagineType() BotImagineMetadata_ImagineType { + if x != nil && x.ImagineType != nil { + return *x.ImagineType + } + return BotImagineMetadata_UNKNOWN +} + +type BotSourcesMetadata struct { + state protoimpl.MessageState `protogen:"open.v1"` + Sources []*BotSourcesMetadata_BotSourceItem `protobuf:"bytes,1,rep,name=sources" json:"sources,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BotSourcesMetadata) Reset() { + *x = BotSourcesMetadata{} + mi := &file_waBotMetadata_WABotMetadata_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BotSourcesMetadata) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BotSourcesMetadata) ProtoMessage() {} + +func (x *BotSourcesMetadata) ProtoReflect() protoreflect.Message { + mi := &file_waBotMetadata_WABotMetadata_proto_msgTypes[12] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BotSourcesMetadata.ProtoReflect.Descriptor instead. +func (*BotSourcesMetadata) Descriptor() ([]byte, []int) { + return file_waBotMetadata_WABotMetadata_proto_rawDescGZIP(), []int{12} +} + +func (x *BotSourcesMetadata) GetSources() []*BotSourcesMetadata_BotSourceItem { + if x != nil { + return x.Sources + } + return nil +} + +type BotMessageOrigin struct { + state protoimpl.MessageState `protogen:"open.v1"` + Type *BotMessageOrigin_BotMessageOriginType `protobuf:"varint,1,opt,name=type,enum=WABotMetadata.BotMessageOrigin_BotMessageOriginType" json:"type,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BotMessageOrigin) Reset() { + *x = BotMessageOrigin{} + mi := &file_waBotMetadata_WABotMetadata_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BotMessageOrigin) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BotMessageOrigin) ProtoMessage() {} + +func (x *BotMessageOrigin) ProtoReflect() protoreflect.Message { + mi := &file_waBotMetadata_WABotMetadata_proto_msgTypes[13] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BotMessageOrigin.ProtoReflect.Descriptor instead. +func (*BotMessageOrigin) Descriptor() ([]byte, []int) { + return file_waBotMetadata_WABotMetadata_proto_rawDescGZIP(), []int{13} +} + +func (x *BotMessageOrigin) GetType() BotMessageOrigin_BotMessageOriginType { + if x != nil && x.Type != nil { + return *x.Type + } + return BotMessageOrigin_BOT_MESSAGE_ORIGIN_TYPE_AI_INITIATED +} + +type AIThreadInfo struct { + state protoimpl.MessageState `protogen:"open.v1"` + ServerInfo *AIThreadInfo_AIThreadServerInfo `protobuf:"bytes,1,opt,name=serverInfo" json:"serverInfo,omitempty"` + ClientInfo *AIThreadInfo_AIThreadClientInfo `protobuf:"bytes,2,opt,name=clientInfo" json:"clientInfo,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *AIThreadInfo) Reset() { + *x = AIThreadInfo{} + mi := &file_waBotMetadata_WABotMetadata_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *AIThreadInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AIThreadInfo) ProtoMessage() {} + +func (x *AIThreadInfo) ProtoReflect() protoreflect.Message { + mi := &file_waBotMetadata_WABotMetadata_proto_msgTypes[14] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AIThreadInfo.ProtoReflect.Descriptor instead. +func (*AIThreadInfo) Descriptor() ([]byte, []int) { + return file_waBotMetadata_WABotMetadata_proto_rawDescGZIP(), []int{14} +} + +func (x *AIThreadInfo) GetServerInfo() *AIThreadInfo_AIThreadServerInfo { + if x != nil { + return x.ServerInfo + } + return nil +} + +func (x *AIThreadInfo) GetClientInfo() *AIThreadInfo_AIThreadClientInfo { + if x != nil { + return x.ClientInfo + } + return nil +} + +type BotAvatarMetadata struct { + state protoimpl.MessageState `protogen:"open.v1"` + Sentiment *uint32 `protobuf:"varint,1,opt,name=sentiment" json:"sentiment,omitempty"` + BehaviorGraph *string `protobuf:"bytes,2,opt,name=behaviorGraph" json:"behaviorGraph,omitempty"` + Action *uint32 `protobuf:"varint,3,opt,name=action" json:"action,omitempty"` + Intensity *uint32 `protobuf:"varint,4,opt,name=intensity" json:"intensity,omitempty"` + WordCount *uint32 `protobuf:"varint,5,opt,name=wordCount" json:"wordCount,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BotAvatarMetadata) Reset() { + *x = BotAvatarMetadata{} + mi := &file_waBotMetadata_WABotMetadata_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BotAvatarMetadata) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BotAvatarMetadata) ProtoMessage() {} + +func (x *BotAvatarMetadata) ProtoReflect() protoreflect.Message { + mi := &file_waBotMetadata_WABotMetadata_proto_msgTypes[15] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BotAvatarMetadata.ProtoReflect.Descriptor instead. +func (*BotAvatarMetadata) Descriptor() ([]byte, []int) { + return file_waBotMetadata_WABotMetadata_proto_rawDescGZIP(), []int{15} +} + +func (x *BotAvatarMetadata) GetSentiment() uint32 { + if x != nil && x.Sentiment != nil { + return *x.Sentiment + } + return 0 +} + +func (x *BotAvatarMetadata) GetBehaviorGraph() string { + if x != nil && x.BehaviorGraph != nil { + return *x.BehaviorGraph + } + return "" +} + +func (x *BotAvatarMetadata) GetAction() uint32 { + if x != nil && x.Action != nil { + return *x.Action + } + return 0 +} + +func (x *BotAvatarMetadata) GetIntensity() uint32 { + if x != nil && x.Intensity != nil { + return *x.Intensity + } + return 0 +} + +func (x *BotAvatarMetadata) GetWordCount() uint32 { + if x != nil && x.WordCount != nil { + return *x.WordCount + } + return 0 +} + +type BotSuggestedPromptMetadata struct { + state protoimpl.MessageState `protogen:"open.v1"` + SuggestedPrompts []string `protobuf:"bytes,1,rep,name=suggestedPrompts" json:"suggestedPrompts,omitempty"` + SelectedPromptIndex *uint32 `protobuf:"varint,2,opt,name=selectedPromptIndex" json:"selectedPromptIndex,omitempty"` + PromptSuggestions *BotPromptSuggestions `protobuf:"bytes,3,opt,name=promptSuggestions" json:"promptSuggestions,omitempty"` + SelectedPromptID *string `protobuf:"bytes,4,opt,name=selectedPromptID" json:"selectedPromptID,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BotSuggestedPromptMetadata) Reset() { + *x = BotSuggestedPromptMetadata{} + mi := &file_waBotMetadata_WABotMetadata_proto_msgTypes[16] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BotSuggestedPromptMetadata) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BotSuggestedPromptMetadata) ProtoMessage() {} + +func (x *BotSuggestedPromptMetadata) ProtoReflect() protoreflect.Message { + mi := &file_waBotMetadata_WABotMetadata_proto_msgTypes[16] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BotSuggestedPromptMetadata.ProtoReflect.Descriptor instead. +func (*BotSuggestedPromptMetadata) Descriptor() ([]byte, []int) { + return file_waBotMetadata_WABotMetadata_proto_rawDescGZIP(), []int{16} +} + +func (x *BotSuggestedPromptMetadata) GetSuggestedPrompts() []string { + if x != nil { + return x.SuggestedPrompts + } + return nil +} + +func (x *BotSuggestedPromptMetadata) GetSelectedPromptIndex() uint32 { + if x != nil && x.SelectedPromptIndex != nil { + return *x.SelectedPromptIndex + } + return 0 +} + +func (x *BotSuggestedPromptMetadata) GetPromptSuggestions() *BotPromptSuggestions { + if x != nil { + return x.PromptSuggestions + } + return nil +} + +func (x *BotSuggestedPromptMetadata) GetSelectedPromptID() string { + if x != nil && x.SelectedPromptID != nil { + return *x.SelectedPromptID + } + return "" +} + +type BotPromptSuggestions struct { + state protoimpl.MessageState `protogen:"open.v1"` + Suggestions []*BotPromptSuggestion `protobuf:"bytes,1,rep,name=suggestions" json:"suggestions,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BotPromptSuggestions) Reset() { + *x = BotPromptSuggestions{} + mi := &file_waBotMetadata_WABotMetadata_proto_msgTypes[17] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BotPromptSuggestions) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BotPromptSuggestions) ProtoMessage() {} + +func (x *BotPromptSuggestions) ProtoReflect() protoreflect.Message { + mi := &file_waBotMetadata_WABotMetadata_proto_msgTypes[17] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BotPromptSuggestions.ProtoReflect.Descriptor instead. +func (*BotPromptSuggestions) Descriptor() ([]byte, []int) { + return file_waBotMetadata_WABotMetadata_proto_rawDescGZIP(), []int{17} +} + +func (x *BotPromptSuggestions) GetSuggestions() []*BotPromptSuggestion { + if x != nil { + return x.Suggestions + } + return nil +} + +type BotPromptSuggestion struct { + state protoimpl.MessageState `protogen:"open.v1"` + Prompt *string `protobuf:"bytes,1,opt,name=prompt" json:"prompt,omitempty"` + PromptID *string `protobuf:"bytes,2,opt,name=promptID" json:"promptID,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BotPromptSuggestion) Reset() { + *x = BotPromptSuggestion{} + mi := &file_waBotMetadata_WABotMetadata_proto_msgTypes[18] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BotPromptSuggestion) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BotPromptSuggestion) ProtoMessage() {} + +func (x *BotPromptSuggestion) ProtoReflect() protoreflect.Message { + mi := &file_waBotMetadata_WABotMetadata_proto_msgTypes[18] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BotPromptSuggestion.ProtoReflect.Descriptor instead. +func (*BotPromptSuggestion) Descriptor() ([]byte, []int) { + return file_waBotMetadata_WABotMetadata_proto_rawDescGZIP(), []int{18} +} + +func (x *BotPromptSuggestion) GetPrompt() string { + if x != nil && x.Prompt != nil { + return *x.Prompt + } + return "" +} + +func (x *BotPromptSuggestion) GetPromptID() string { + if x != nil && x.PromptID != nil { + return *x.PromptID + } + return "" +} + +type BotLinkedAccountsMetadata struct { + state protoimpl.MessageState `protogen:"open.v1"` + Accounts []*BotLinkedAccount `protobuf:"bytes,1,rep,name=accounts" json:"accounts,omitempty"` + AcAuthTokens []byte `protobuf:"bytes,2,opt,name=acAuthTokens" json:"acAuthTokens,omitempty"` + AcErrorCode *int32 `protobuf:"varint,3,opt,name=acErrorCode" json:"acErrorCode,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BotLinkedAccountsMetadata) Reset() { + *x = BotLinkedAccountsMetadata{} + mi := &file_waBotMetadata_WABotMetadata_proto_msgTypes[19] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BotLinkedAccountsMetadata) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BotLinkedAccountsMetadata) ProtoMessage() {} + +func (x *BotLinkedAccountsMetadata) ProtoReflect() protoreflect.Message { + mi := &file_waBotMetadata_WABotMetadata_proto_msgTypes[19] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BotLinkedAccountsMetadata.ProtoReflect.Descriptor instead. +func (*BotLinkedAccountsMetadata) Descriptor() ([]byte, []int) { + return file_waBotMetadata_WABotMetadata_proto_rawDescGZIP(), []int{19} +} + +func (x *BotLinkedAccountsMetadata) GetAccounts() []*BotLinkedAccount { + if x != nil { + return x.Accounts + } + return nil +} + +func (x *BotLinkedAccountsMetadata) GetAcAuthTokens() []byte { + if x != nil { + return x.AcAuthTokens + } + return nil +} + +func (x *BotLinkedAccountsMetadata) GetAcErrorCode() int32 { + if x != nil && x.AcErrorCode != nil { + return *x.AcErrorCode + } + return 0 +} + +type BotMemoryMetadata struct { + state protoimpl.MessageState `protogen:"open.v1"` + AddedFacts []*BotMemoryFact `protobuf:"bytes,1,rep,name=addedFacts" json:"addedFacts,omitempty"` + RemovedFacts []*BotMemoryFact `protobuf:"bytes,2,rep,name=removedFacts" json:"removedFacts,omitempty"` + Disclaimer *string `protobuf:"bytes,3,opt,name=disclaimer" json:"disclaimer,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BotMemoryMetadata) Reset() { + *x = BotMemoryMetadata{} + mi := &file_waBotMetadata_WABotMetadata_proto_msgTypes[20] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BotMemoryMetadata) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BotMemoryMetadata) ProtoMessage() {} + +func (x *BotMemoryMetadata) ProtoReflect() protoreflect.Message { + mi := &file_waBotMetadata_WABotMetadata_proto_msgTypes[20] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BotMemoryMetadata.ProtoReflect.Descriptor instead. +func (*BotMemoryMetadata) Descriptor() ([]byte, []int) { + return file_waBotMetadata_WABotMetadata_proto_rawDescGZIP(), []int{20} +} + +func (x *BotMemoryMetadata) GetAddedFacts() []*BotMemoryFact { + if x != nil { + return x.AddedFacts + } + return nil +} + +func (x *BotMemoryMetadata) GetRemovedFacts() []*BotMemoryFact { + if x != nil { + return x.RemovedFacts + } + return nil +} + +func (x *BotMemoryMetadata) GetDisclaimer() string { + if x != nil && x.Disclaimer != nil { + return *x.Disclaimer + } + return "" +} + +type BotMemoryFact struct { + state protoimpl.MessageState `protogen:"open.v1"` + Fact *string `protobuf:"bytes,1,opt,name=fact" json:"fact,omitempty"` + FactID *string `protobuf:"bytes,2,opt,name=factID" json:"factID,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BotMemoryFact) Reset() { + *x = BotMemoryFact{} + mi := &file_waBotMetadata_WABotMetadata_proto_msgTypes[21] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BotMemoryFact) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BotMemoryFact) ProtoMessage() {} + +func (x *BotMemoryFact) ProtoReflect() protoreflect.Message { + mi := &file_waBotMetadata_WABotMetadata_proto_msgTypes[21] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BotMemoryFact.ProtoReflect.Descriptor instead. +func (*BotMemoryFact) Descriptor() ([]byte, []int) { + return file_waBotMetadata_WABotMetadata_proto_rawDescGZIP(), []int{21} +} + +func (x *BotMemoryFact) GetFact() string { + if x != nil && x.Fact != nil { + return *x.Fact + } + return "" +} + +func (x *BotMemoryFact) GetFactID() string { + if x != nil && x.FactID != nil { + return *x.FactID + } + return "" +} + +type BotSignatureVerificationMetadata struct { + state protoimpl.MessageState `protogen:"open.v1"` + Proofs []*BotSignatureVerificationUseCaseProof `protobuf:"bytes,1,rep,name=proofs" json:"proofs,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BotSignatureVerificationMetadata) Reset() { + *x = BotSignatureVerificationMetadata{} + mi := &file_waBotMetadata_WABotMetadata_proto_msgTypes[22] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BotSignatureVerificationMetadata) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BotSignatureVerificationMetadata) ProtoMessage() {} + +func (x *BotSignatureVerificationMetadata) ProtoReflect() protoreflect.Message { + mi := &file_waBotMetadata_WABotMetadata_proto_msgTypes[22] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BotSignatureVerificationMetadata.ProtoReflect.Descriptor instead. +func (*BotSignatureVerificationMetadata) Descriptor() ([]byte, []int) { + return file_waBotMetadata_WABotMetadata_proto_rawDescGZIP(), []int{22} +} + +func (x *BotSignatureVerificationMetadata) GetProofs() []*BotSignatureVerificationUseCaseProof { + if x != nil { + return x.Proofs + } + return nil +} + +type BotRenderingMetadata struct { + state protoimpl.MessageState `protogen:"open.v1"` + Keywords []*BotRenderingMetadata_Keyword `protobuf:"bytes,1,rep,name=keywords" json:"keywords,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BotRenderingMetadata) Reset() { + *x = BotRenderingMetadata{} + mi := &file_waBotMetadata_WABotMetadata_proto_msgTypes[23] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BotRenderingMetadata) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BotRenderingMetadata) ProtoMessage() {} + +func (x *BotRenderingMetadata) ProtoReflect() protoreflect.Message { + mi := &file_waBotMetadata_WABotMetadata_proto_msgTypes[23] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BotRenderingMetadata.ProtoReflect.Descriptor instead. +func (*BotRenderingMetadata) Descriptor() ([]byte, []int) { + return file_waBotMetadata_WABotMetadata_proto_rawDescGZIP(), []int{23} +} + +func (x *BotRenderingMetadata) GetKeywords() []*BotRenderingMetadata_Keyword { + if x != nil { + return x.Keywords + } + return nil +} + +type BotMetricsMetadata struct { + state protoimpl.MessageState `protogen:"open.v1"` + DestinationID *string `protobuf:"bytes,1,opt,name=destinationID" json:"destinationID,omitempty"` + DestinationEntryPoint *BotMetricsEntryPoint `protobuf:"varint,2,opt,name=destinationEntryPoint,enum=WABotMetadata.BotMetricsEntryPoint" json:"destinationEntryPoint,omitempty"` + ThreadOrigin *BotMetricsThreadEntryPoint `protobuf:"varint,3,opt,name=threadOrigin,enum=WABotMetadata.BotMetricsThreadEntryPoint" json:"threadOrigin,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BotMetricsMetadata) Reset() { + *x = BotMetricsMetadata{} + mi := &file_waBotMetadata_WABotMetadata_proto_msgTypes[24] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BotMetricsMetadata) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BotMetricsMetadata) ProtoMessage() {} + +func (x *BotMetricsMetadata) ProtoReflect() protoreflect.Message { + mi := &file_waBotMetadata_WABotMetadata_proto_msgTypes[24] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BotMetricsMetadata.ProtoReflect.Descriptor instead. +func (*BotMetricsMetadata) Descriptor() ([]byte, []int) { + return file_waBotMetadata_WABotMetadata_proto_rawDescGZIP(), []int{24} +} + +func (x *BotMetricsMetadata) GetDestinationID() string { + if x != nil && x.DestinationID != nil { + return *x.DestinationID + } + return "" +} + +func (x *BotMetricsMetadata) GetDestinationEntryPoint() BotMetricsEntryPoint { + if x != nil && x.DestinationEntryPoint != nil { + return *x.DestinationEntryPoint + } + return BotMetricsEntryPoint_FAVICON +} + +func (x *BotMetricsMetadata) GetThreadOrigin() BotMetricsThreadEntryPoint { + if x != nil && x.ThreadOrigin != nil { + return *x.ThreadOrigin + } + return BotMetricsThreadEntryPoint_AI_TAB_THREAD +} + +type BotSessionMetadata struct { + state protoimpl.MessageState `protogen:"open.v1"` + SessionID *string `protobuf:"bytes,1,opt,name=sessionID" json:"sessionID,omitempty"` + SessionSource *BotSessionSource `protobuf:"varint,2,opt,name=sessionSource,enum=WABotMetadata.BotSessionSource" json:"sessionSource,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BotSessionMetadata) Reset() { + *x = BotSessionMetadata{} + mi := &file_waBotMetadata_WABotMetadata_proto_msgTypes[25] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BotSessionMetadata) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BotSessionMetadata) ProtoMessage() {} + +func (x *BotSessionMetadata) ProtoReflect() protoreflect.Message { + mi := &file_waBotMetadata_WABotMetadata_proto_msgTypes[25] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BotSessionMetadata.ProtoReflect.Descriptor instead. +func (*BotSessionMetadata) Descriptor() ([]byte, []int) { + return file_waBotMetadata_WABotMetadata_proto_rawDescGZIP(), []int{25} +} + +func (x *BotSessionMetadata) GetSessionID() string { + if x != nil && x.SessionID != nil { + return *x.SessionID + } + return "" +} + +func (x *BotSessionMetadata) GetSessionSource() BotSessionSource { + if x != nil && x.SessionSource != nil { + return *x.SessionSource + } + return BotSessionSource_NONE +} + +type BotMemuMetadata struct { + state protoimpl.MessageState `protogen:"open.v1"` + FaceImages []*BotMediaMetadata `protobuf:"bytes,1,rep,name=faceImages" json:"faceImages,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BotMemuMetadata) Reset() { + *x = BotMemuMetadata{} + mi := &file_waBotMetadata_WABotMetadata_proto_msgTypes[26] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BotMemuMetadata) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BotMemuMetadata) ProtoMessage() {} + +func (x *BotMemuMetadata) ProtoReflect() protoreflect.Message { + mi := &file_waBotMetadata_WABotMetadata_proto_msgTypes[26] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BotMemuMetadata.ProtoReflect.Descriptor instead. +func (*BotMemuMetadata) Descriptor() ([]byte, []int) { + return file_waBotMetadata_WABotMetadata_proto_rawDescGZIP(), []int{26} +} + +func (x *BotMemuMetadata) GetFaceImages() []*BotMediaMetadata { + if x != nil { + return x.FaceImages + } + return nil +} + +type BotAgeCollectionMetadata struct { + state protoimpl.MessageState `protogen:"open.v1"` + AgeCollectionEligible *bool `protobuf:"varint,1,opt,name=ageCollectionEligible" json:"ageCollectionEligible,omitempty"` + ShouldTriggerAgeCollectionOnClient *bool `protobuf:"varint,2,opt,name=shouldTriggerAgeCollectionOnClient" json:"shouldTriggerAgeCollectionOnClient,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BotAgeCollectionMetadata) Reset() { + *x = BotAgeCollectionMetadata{} + mi := &file_waBotMetadata_WABotMetadata_proto_msgTypes[27] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BotAgeCollectionMetadata) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BotAgeCollectionMetadata) ProtoMessage() {} + +func (x *BotAgeCollectionMetadata) ProtoReflect() protoreflect.Message { + mi := &file_waBotMetadata_WABotMetadata_proto_msgTypes[27] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BotAgeCollectionMetadata.ProtoReflect.Descriptor instead. +func (*BotAgeCollectionMetadata) Descriptor() ([]byte, []int) { + return file_waBotMetadata_WABotMetadata_proto_rawDescGZIP(), []int{27} +} + +func (x *BotAgeCollectionMetadata) GetAgeCollectionEligible() bool { + if x != nil && x.AgeCollectionEligible != nil { + return *x.AgeCollectionEligible + } + return false +} + +func (x *BotAgeCollectionMetadata) GetShouldTriggerAgeCollectionOnClient() bool { + if x != nil && x.ShouldTriggerAgeCollectionOnClient != nil { + return *x.ShouldTriggerAgeCollectionOnClient + } + return false +} + +type InThreadSurveyMetadata struct { + state protoimpl.MessageState `protogen:"open.v1"` + TessaSessionID *string `protobuf:"bytes,1,opt,name=tessaSessionID" json:"tessaSessionID,omitempty"` + SimonSessionID *string `protobuf:"bytes,2,opt,name=simonSessionID" json:"simonSessionID,omitempty"` + SimonSurveyID *string `protobuf:"bytes,3,opt,name=simonSurveyID" json:"simonSurveyID,omitempty"` + TessaRootID *string `protobuf:"bytes,4,opt,name=tessaRootID" json:"tessaRootID,omitempty"` + RequestID *string `protobuf:"bytes,5,opt,name=requestID" json:"requestID,omitempty"` + TessaEvent *string `protobuf:"bytes,6,opt,name=tessaEvent" json:"tessaEvent,omitempty"` + InvitationHeaderText *string `protobuf:"bytes,7,opt,name=invitationHeaderText" json:"invitationHeaderText,omitempty"` + InvitationBodyText *string `protobuf:"bytes,8,opt,name=invitationBodyText" json:"invitationBodyText,omitempty"` + InvitationCtaText *string `protobuf:"bytes,9,opt,name=invitationCtaText" json:"invitationCtaText,omitempty"` + InvitationCtaURL *string `protobuf:"bytes,10,opt,name=invitationCtaURL" json:"invitationCtaURL,omitempty"` + SurveyTitle *string `protobuf:"bytes,11,opt,name=surveyTitle" json:"surveyTitle,omitempty"` + Questions []*InThreadSurveyMetadata_InThreadSurveyQuestion `protobuf:"bytes,12,rep,name=questions" json:"questions,omitempty"` + SurveyContinueButtonText *string `protobuf:"bytes,13,opt,name=surveyContinueButtonText" json:"surveyContinueButtonText,omitempty"` + SurveySubmitButtonText *string `protobuf:"bytes,14,opt,name=surveySubmitButtonText" json:"surveySubmitButtonText,omitempty"` + PrivacyStatementFull *string `protobuf:"bytes,15,opt,name=privacyStatementFull" json:"privacyStatementFull,omitempty"` + PrivacyStatementParts []*InThreadSurveyMetadata_InThreadSurveyPrivacyStatementPart `protobuf:"bytes,16,rep,name=privacyStatementParts" json:"privacyStatementParts,omitempty"` + FeedbackToastText *string `protobuf:"bytes,17,opt,name=feedbackToastText" json:"feedbackToastText,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *InThreadSurveyMetadata) Reset() { + *x = InThreadSurveyMetadata{} + mi := &file_waBotMetadata_WABotMetadata_proto_msgTypes[28] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *InThreadSurveyMetadata) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*InThreadSurveyMetadata) ProtoMessage() {} + +func (x *InThreadSurveyMetadata) ProtoReflect() protoreflect.Message { + mi := &file_waBotMetadata_WABotMetadata_proto_msgTypes[28] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use InThreadSurveyMetadata.ProtoReflect.Descriptor instead. +func (*InThreadSurveyMetadata) Descriptor() ([]byte, []int) { + return file_waBotMetadata_WABotMetadata_proto_rawDescGZIP(), []int{28} +} + +func (x *InThreadSurveyMetadata) GetTessaSessionID() string { + if x != nil && x.TessaSessionID != nil { + return *x.TessaSessionID + } + return "" +} + +func (x *InThreadSurveyMetadata) GetSimonSessionID() string { + if x != nil && x.SimonSessionID != nil { + return *x.SimonSessionID + } + return "" +} + +func (x *InThreadSurveyMetadata) GetSimonSurveyID() string { + if x != nil && x.SimonSurveyID != nil { + return *x.SimonSurveyID + } + return "" +} + +func (x *InThreadSurveyMetadata) GetTessaRootID() string { + if x != nil && x.TessaRootID != nil { + return *x.TessaRootID + } + return "" +} + +func (x *InThreadSurveyMetadata) GetRequestID() string { + if x != nil && x.RequestID != nil { + return *x.RequestID + } + return "" +} + +func (x *InThreadSurveyMetadata) GetTessaEvent() string { + if x != nil && x.TessaEvent != nil { + return *x.TessaEvent + } + return "" +} + +func (x *InThreadSurveyMetadata) GetInvitationHeaderText() string { + if x != nil && x.InvitationHeaderText != nil { + return *x.InvitationHeaderText + } + return "" +} + +func (x *InThreadSurveyMetadata) GetInvitationBodyText() string { + if x != nil && x.InvitationBodyText != nil { + return *x.InvitationBodyText + } + return "" +} + +func (x *InThreadSurveyMetadata) GetInvitationCtaText() string { + if x != nil && x.InvitationCtaText != nil { + return *x.InvitationCtaText + } + return "" +} + +func (x *InThreadSurveyMetadata) GetInvitationCtaURL() string { + if x != nil && x.InvitationCtaURL != nil { + return *x.InvitationCtaURL + } + return "" +} + +func (x *InThreadSurveyMetadata) GetSurveyTitle() string { + if x != nil && x.SurveyTitle != nil { + return *x.SurveyTitle + } + return "" +} + +func (x *InThreadSurveyMetadata) GetQuestions() []*InThreadSurveyMetadata_InThreadSurveyQuestion { + if x != nil { + return x.Questions + } + return nil +} + +func (x *InThreadSurveyMetadata) GetSurveyContinueButtonText() string { + if x != nil && x.SurveyContinueButtonText != nil { + return *x.SurveyContinueButtonText + } + return "" +} + +func (x *InThreadSurveyMetadata) GetSurveySubmitButtonText() string { + if x != nil && x.SurveySubmitButtonText != nil { + return *x.SurveySubmitButtonText + } + return "" +} + +func (x *InThreadSurveyMetadata) GetPrivacyStatementFull() string { + if x != nil && x.PrivacyStatementFull != nil { + return *x.PrivacyStatementFull + } + return "" +} + +func (x *InThreadSurveyMetadata) GetPrivacyStatementParts() []*InThreadSurveyMetadata_InThreadSurveyPrivacyStatementPart { + if x != nil { + return x.PrivacyStatementParts + } + return nil +} + +func (x *InThreadSurveyMetadata) GetFeedbackToastText() string { + if x != nil && x.FeedbackToastText != nil { + return *x.FeedbackToastText + } + return "" +} + +type BotMessageOriginMetadata struct { + state protoimpl.MessageState `protogen:"open.v1"` + Origins []*BotMessageOrigin `protobuf:"bytes,1,rep,name=origins" json:"origins,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BotMessageOriginMetadata) Reset() { + *x = BotMessageOriginMetadata{} + mi := &file_waBotMetadata_WABotMetadata_proto_msgTypes[29] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BotMessageOriginMetadata) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BotMessageOriginMetadata) ProtoMessage() {} + +func (x *BotMessageOriginMetadata) ProtoReflect() protoreflect.Message { + mi := &file_waBotMetadata_WABotMetadata_proto_msgTypes[29] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BotMessageOriginMetadata.ProtoReflect.Descriptor instead. +func (*BotMessageOriginMetadata) Descriptor() ([]byte, []int) { + return file_waBotMetadata_WABotMetadata_proto_rawDescGZIP(), []int{29} +} + +func (x *BotMessageOriginMetadata) GetOrigins() []*BotMessageOrigin { + if x != nil { + return x.Origins + } + return nil +} + +type BotUnifiedResponseMutation struct { + state protoimpl.MessageState `protogen:"open.v1"` + SbsMetadata *BotUnifiedResponseMutation_SideBySideMetadata `protobuf:"bytes,1,opt,name=sbsMetadata" json:"sbsMetadata,omitempty"` + MediaDetailsMetadataList []*BotUnifiedResponseMutation_MediaDetailsMetadata `protobuf:"bytes,2,rep,name=mediaDetailsMetadataList" json:"mediaDetailsMetadataList,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BotUnifiedResponseMutation) Reset() { + *x = BotUnifiedResponseMutation{} + mi := &file_waBotMetadata_WABotMetadata_proto_msgTypes[30] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BotUnifiedResponseMutation) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BotUnifiedResponseMutation) ProtoMessage() {} + +func (x *BotUnifiedResponseMutation) ProtoReflect() protoreflect.Message { + mi := &file_waBotMetadata_WABotMetadata_proto_msgTypes[30] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BotUnifiedResponseMutation.ProtoReflect.Descriptor instead. +func (*BotUnifiedResponseMutation) Descriptor() ([]byte, []int) { + return file_waBotMetadata_WABotMetadata_proto_rawDescGZIP(), []int{30} +} + +func (x *BotUnifiedResponseMutation) GetSbsMetadata() *BotUnifiedResponseMutation_SideBySideMetadata { + if x != nil { + return x.SbsMetadata + } + return nil +} + +func (x *BotUnifiedResponseMutation) GetMediaDetailsMetadataList() []*BotUnifiedResponseMutation_MediaDetailsMetadata { + if x != nil { + return x.MediaDetailsMetadataList + } + return nil +} + +type BotMetadata struct { + state protoimpl.MessageState `protogen:"open.v1"` + AvatarMetadata *BotAvatarMetadata `protobuf:"bytes,1,opt,name=avatarMetadata" json:"avatarMetadata,omitempty"` + PersonaID *string `protobuf:"bytes,2,opt,name=personaID" json:"personaID,omitempty"` + PluginMetadata *BotPluginMetadata `protobuf:"bytes,3,opt,name=pluginMetadata" json:"pluginMetadata,omitempty"` + SuggestedPromptMetadata *BotSuggestedPromptMetadata `protobuf:"bytes,4,opt,name=suggestedPromptMetadata" json:"suggestedPromptMetadata,omitempty"` + InvokerJID *string `protobuf:"bytes,5,opt,name=invokerJID" json:"invokerJID,omitempty"` + SessionMetadata *BotSessionMetadata `protobuf:"bytes,6,opt,name=sessionMetadata" json:"sessionMetadata,omitempty"` + MemuMetadata *BotMemuMetadata `protobuf:"bytes,7,opt,name=memuMetadata" json:"memuMetadata,omitempty"` + Timezone *string `protobuf:"bytes,8,opt,name=timezone" json:"timezone,omitempty"` + ReminderMetadata *BotReminderMetadata `protobuf:"bytes,9,opt,name=reminderMetadata" json:"reminderMetadata,omitempty"` + ModelMetadata *BotModelMetadata `protobuf:"bytes,10,opt,name=modelMetadata" json:"modelMetadata,omitempty"` + MessageDisclaimerText *string `protobuf:"bytes,11,opt,name=messageDisclaimerText" json:"messageDisclaimerText,omitempty"` + ProgressIndicatorMetadata *BotProgressIndicatorMetadata `protobuf:"bytes,12,opt,name=progressIndicatorMetadata" json:"progressIndicatorMetadata,omitempty"` + CapabilityMetadata *BotCapabilityMetadata `protobuf:"bytes,13,opt,name=capabilityMetadata" json:"capabilityMetadata,omitempty"` + ImagineMetadata *BotImagineMetadata `protobuf:"bytes,14,opt,name=imagineMetadata" json:"imagineMetadata,omitempty"` + MemoryMetadata *BotMemoryMetadata `protobuf:"bytes,15,opt,name=memoryMetadata" json:"memoryMetadata,omitempty"` + RenderingMetadata *BotRenderingMetadata `protobuf:"bytes,16,opt,name=renderingMetadata" json:"renderingMetadata,omitempty"` + BotMetricsMetadata *BotMetricsMetadata `protobuf:"bytes,17,opt,name=botMetricsMetadata" json:"botMetricsMetadata,omitempty"` + BotLinkedAccountsMetadata *BotLinkedAccountsMetadata `protobuf:"bytes,18,opt,name=botLinkedAccountsMetadata" json:"botLinkedAccountsMetadata,omitempty"` + RichResponseSourcesMetadata *BotSourcesMetadata `protobuf:"bytes,19,opt,name=richResponseSourcesMetadata" json:"richResponseSourcesMetadata,omitempty"` + AiConversationContext []byte `protobuf:"bytes,20,opt,name=aiConversationContext" json:"aiConversationContext,omitempty"` + BotPromotionMessageMetadata *BotPromotionMessageMetadata `protobuf:"bytes,21,opt,name=botPromotionMessageMetadata" json:"botPromotionMessageMetadata,omitempty"` + BotModeSelectionMetadata *BotModeSelectionMetadata `protobuf:"bytes,22,opt,name=botModeSelectionMetadata" json:"botModeSelectionMetadata,omitempty"` + BotQuotaMetadata *BotQuotaMetadata `protobuf:"bytes,23,opt,name=botQuotaMetadata" json:"botQuotaMetadata,omitempty"` + BotAgeCollectionMetadata *BotAgeCollectionMetadata `protobuf:"bytes,24,opt,name=botAgeCollectionMetadata" json:"botAgeCollectionMetadata,omitempty"` + ConversationStarterPromptID *string `protobuf:"bytes,25,opt,name=conversationStarterPromptID" json:"conversationStarterPromptID,omitempty"` + BotResponseID *string `protobuf:"bytes,26,opt,name=botResponseID" json:"botResponseID,omitempty"` + VerificationMetadata *BotSignatureVerificationMetadata `protobuf:"bytes,27,opt,name=verificationMetadata" json:"verificationMetadata,omitempty"` + UnifiedResponseMutation *BotUnifiedResponseMutation `protobuf:"bytes,28,opt,name=unifiedResponseMutation" json:"unifiedResponseMutation,omitempty"` + BotMessageOriginMetadata *BotMessageOriginMetadata `protobuf:"bytes,29,opt,name=botMessageOriginMetadata" json:"botMessageOriginMetadata,omitempty"` + InThreadSurveyMetadata *InThreadSurveyMetadata `protobuf:"bytes,30,opt,name=inThreadSurveyMetadata" json:"inThreadSurveyMetadata,omitempty"` + BotThreadInfo *AIThreadInfo `protobuf:"bytes,31,opt,name=botThreadInfo" json:"botThreadInfo,omitempty"` + InternalMetadata []byte `protobuf:"bytes,999,opt,name=internalMetadata" json:"internalMetadata,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BotMetadata) Reset() { + *x = BotMetadata{} + mi := &file_waBotMetadata_WABotMetadata_proto_msgTypes[31] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BotMetadata) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BotMetadata) ProtoMessage() {} + +func (x *BotMetadata) ProtoReflect() protoreflect.Message { + mi := &file_waBotMetadata_WABotMetadata_proto_msgTypes[31] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BotMetadata.ProtoReflect.Descriptor instead. +func (*BotMetadata) Descriptor() ([]byte, []int) { + return file_waBotMetadata_WABotMetadata_proto_rawDescGZIP(), []int{31} +} + +func (x *BotMetadata) GetAvatarMetadata() *BotAvatarMetadata { + if x != nil { + return x.AvatarMetadata + } + return nil +} + +func (x *BotMetadata) GetPersonaID() string { + if x != nil && x.PersonaID != nil { + return *x.PersonaID + } + return "" +} + +func (x *BotMetadata) GetPluginMetadata() *BotPluginMetadata { + if x != nil { + return x.PluginMetadata + } + return nil +} + +func (x *BotMetadata) GetSuggestedPromptMetadata() *BotSuggestedPromptMetadata { + if x != nil { + return x.SuggestedPromptMetadata + } + return nil +} + +func (x *BotMetadata) GetInvokerJID() string { + if x != nil && x.InvokerJID != nil { + return *x.InvokerJID + } + return "" +} + +func (x *BotMetadata) GetSessionMetadata() *BotSessionMetadata { + if x != nil { + return x.SessionMetadata + } + return nil +} + +func (x *BotMetadata) GetMemuMetadata() *BotMemuMetadata { + if x != nil { + return x.MemuMetadata + } + return nil +} + +func (x *BotMetadata) GetTimezone() string { + if x != nil && x.Timezone != nil { + return *x.Timezone + } + return "" +} + +func (x *BotMetadata) GetReminderMetadata() *BotReminderMetadata { + if x != nil { + return x.ReminderMetadata + } + return nil +} + +func (x *BotMetadata) GetModelMetadata() *BotModelMetadata { + if x != nil { + return x.ModelMetadata + } + return nil +} + +func (x *BotMetadata) GetMessageDisclaimerText() string { + if x != nil && x.MessageDisclaimerText != nil { + return *x.MessageDisclaimerText + } + return "" +} + +func (x *BotMetadata) GetProgressIndicatorMetadata() *BotProgressIndicatorMetadata { + if x != nil { + return x.ProgressIndicatorMetadata + } + return nil +} + +func (x *BotMetadata) GetCapabilityMetadata() *BotCapabilityMetadata { + if x != nil { + return x.CapabilityMetadata + } + return nil +} + +func (x *BotMetadata) GetImagineMetadata() *BotImagineMetadata { + if x != nil { + return x.ImagineMetadata + } + return nil +} + +func (x *BotMetadata) GetMemoryMetadata() *BotMemoryMetadata { + if x != nil { + return x.MemoryMetadata + } + return nil +} + +func (x *BotMetadata) GetRenderingMetadata() *BotRenderingMetadata { + if x != nil { + return x.RenderingMetadata + } + return nil +} + +func (x *BotMetadata) GetBotMetricsMetadata() *BotMetricsMetadata { + if x != nil { + return x.BotMetricsMetadata + } + return nil +} + +func (x *BotMetadata) GetBotLinkedAccountsMetadata() *BotLinkedAccountsMetadata { + if x != nil { + return x.BotLinkedAccountsMetadata + } + return nil +} + +func (x *BotMetadata) GetRichResponseSourcesMetadata() *BotSourcesMetadata { + if x != nil { + return x.RichResponseSourcesMetadata + } + return nil +} + +func (x *BotMetadata) GetAiConversationContext() []byte { + if x != nil { + return x.AiConversationContext + } + return nil +} + +func (x *BotMetadata) GetBotPromotionMessageMetadata() *BotPromotionMessageMetadata { + if x != nil { + return x.BotPromotionMessageMetadata + } + return nil +} + +func (x *BotMetadata) GetBotModeSelectionMetadata() *BotModeSelectionMetadata { + if x != nil { + return x.BotModeSelectionMetadata + } + return nil +} + +func (x *BotMetadata) GetBotQuotaMetadata() *BotQuotaMetadata { + if x != nil { + return x.BotQuotaMetadata + } + return nil +} + +func (x *BotMetadata) GetBotAgeCollectionMetadata() *BotAgeCollectionMetadata { + if x != nil { + return x.BotAgeCollectionMetadata + } + return nil +} + +func (x *BotMetadata) GetConversationStarterPromptID() string { + if x != nil && x.ConversationStarterPromptID != nil { + return *x.ConversationStarterPromptID + } + return "" +} + +func (x *BotMetadata) GetBotResponseID() string { + if x != nil && x.BotResponseID != nil { + return *x.BotResponseID + } + return "" +} + +func (x *BotMetadata) GetVerificationMetadata() *BotSignatureVerificationMetadata { + if x != nil { + return x.VerificationMetadata + } + return nil +} + +func (x *BotMetadata) GetUnifiedResponseMutation() *BotUnifiedResponseMutation { + if x != nil { + return x.UnifiedResponseMutation + } + return nil +} + +func (x *BotMetadata) GetBotMessageOriginMetadata() *BotMessageOriginMetadata { + if x != nil { + return x.BotMessageOriginMetadata + } + return nil +} + +func (x *BotMetadata) GetInThreadSurveyMetadata() *InThreadSurveyMetadata { + if x != nil { + return x.InThreadSurveyMetadata + } + return nil +} + +func (x *BotMetadata) GetBotThreadInfo() *AIThreadInfo { + if x != nil { + return x.BotThreadInfo + } + return nil +} + +func (x *BotMetadata) GetInternalMetadata() []byte { + if x != nil { + return x.InternalMetadata + } + return nil +} + +type BotProgressIndicatorMetadata_BotPlanningStepMetadata struct { + state protoimpl.MessageState `protogen:"open.v1"` + StatusTitle *string `protobuf:"bytes,1,opt,name=statusTitle" json:"statusTitle,omitempty"` + StatusBody *string `protobuf:"bytes,2,opt,name=statusBody" json:"statusBody,omitempty"` + SourcesMetadata []*BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningSearchSourcesMetadata `protobuf:"bytes,3,rep,name=sourcesMetadata" json:"sourcesMetadata,omitempty"` + Status *BotProgressIndicatorMetadata_BotPlanningStepMetadata_PlanningStepStatus `protobuf:"varint,4,opt,name=status,enum=WABotMetadata.BotProgressIndicatorMetadata_BotPlanningStepMetadata_PlanningStepStatus" json:"status,omitempty"` + IsReasoning *bool `protobuf:"varint,5,opt,name=isReasoning" json:"isReasoning,omitempty"` + IsEnhancedSearch *bool `protobuf:"varint,6,opt,name=isEnhancedSearch" json:"isEnhancedSearch,omitempty"` + Sections []*BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningStepSectionMetadata `protobuf:"bytes,7,rep,name=sections" json:"sections,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BotProgressIndicatorMetadata_BotPlanningStepMetadata) Reset() { + *x = BotProgressIndicatorMetadata_BotPlanningStepMetadata{} + mi := &file_waBotMetadata_WABotMetadata_proto_msgTypes[32] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BotProgressIndicatorMetadata_BotPlanningStepMetadata) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BotProgressIndicatorMetadata_BotPlanningStepMetadata) ProtoMessage() {} + +func (x *BotProgressIndicatorMetadata_BotPlanningStepMetadata) ProtoReflect() protoreflect.Message { + mi := &file_waBotMetadata_WABotMetadata_proto_msgTypes[32] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BotProgressIndicatorMetadata_BotPlanningStepMetadata.ProtoReflect.Descriptor instead. +func (*BotProgressIndicatorMetadata_BotPlanningStepMetadata) Descriptor() ([]byte, []int) { + return file_waBotMetadata_WABotMetadata_proto_rawDescGZIP(), []int{7, 0} +} + +func (x *BotProgressIndicatorMetadata_BotPlanningStepMetadata) GetStatusTitle() string { + if x != nil && x.StatusTitle != nil { + return *x.StatusTitle + } + return "" +} + +func (x *BotProgressIndicatorMetadata_BotPlanningStepMetadata) GetStatusBody() string { + if x != nil && x.StatusBody != nil { + return *x.StatusBody + } + return "" +} + +func (x *BotProgressIndicatorMetadata_BotPlanningStepMetadata) GetSourcesMetadata() []*BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningSearchSourcesMetadata { + if x != nil { + return x.SourcesMetadata + } + return nil +} + +func (x *BotProgressIndicatorMetadata_BotPlanningStepMetadata) GetStatus() BotProgressIndicatorMetadata_BotPlanningStepMetadata_PlanningStepStatus { + if x != nil && x.Status != nil { + return *x.Status + } + return BotProgressIndicatorMetadata_BotPlanningStepMetadata_UNKNOWN +} + +func (x *BotProgressIndicatorMetadata_BotPlanningStepMetadata) GetIsReasoning() bool { + if x != nil && x.IsReasoning != nil { + return *x.IsReasoning + } + return false +} + +func (x *BotProgressIndicatorMetadata_BotPlanningStepMetadata) GetIsEnhancedSearch() bool { + if x != nil && x.IsEnhancedSearch != nil { + return *x.IsEnhancedSearch + } + return false +} + +func (x *BotProgressIndicatorMetadata_BotPlanningStepMetadata) GetSections() []*BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningStepSectionMetadata { + if x != nil { + return x.Sections + } + return nil +} + +type BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningSearchSourcesMetadata struct { + state protoimpl.MessageState `protogen:"open.v1"` + SourceTitle *string `protobuf:"bytes,1,opt,name=sourceTitle" json:"sourceTitle,omitempty"` + Provider *BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningSearchSourcesMetadata_BotPlanningSearchSourceProvider `protobuf:"varint,2,opt,name=provider,enum=WABotMetadata.BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningSearchSourcesMetadata_BotPlanningSearchSourceProvider" json:"provider,omitempty"` + SourceURL *string `protobuf:"bytes,3,opt,name=sourceURL" json:"sourceURL,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningSearchSourcesMetadata) Reset() { + *x = BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningSearchSourcesMetadata{} + mi := &file_waBotMetadata_WABotMetadata_proto_msgTypes[33] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningSearchSourcesMetadata) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningSearchSourcesMetadata) ProtoMessage() { +} + +func (x *BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningSearchSourcesMetadata) ProtoReflect() protoreflect.Message { + mi := &file_waBotMetadata_WABotMetadata_proto_msgTypes[33] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningSearchSourcesMetadata.ProtoReflect.Descriptor instead. +func (*BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningSearchSourcesMetadata) Descriptor() ([]byte, []int) { + return file_waBotMetadata_WABotMetadata_proto_rawDescGZIP(), []int{7, 0, 0} +} + +func (x *BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningSearchSourcesMetadata) GetSourceTitle() string { + if x != nil && x.SourceTitle != nil { + return *x.SourceTitle + } + return "" +} + +func (x *BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningSearchSourcesMetadata) GetProvider() BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningSearchSourcesMetadata_BotPlanningSearchSourceProvider { + if x != nil && x.Provider != nil { + return *x.Provider + } + return BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningSearchSourcesMetadata_UNKNOWN +} + +func (x *BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningSearchSourcesMetadata) GetSourceURL() string { + if x != nil && x.SourceURL != nil { + return *x.SourceURL + } + return "" +} + +type BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningStepSectionMetadata struct { + state protoimpl.MessageState `protogen:"open.v1"` + SectionTitle *string `protobuf:"bytes,1,opt,name=sectionTitle" json:"sectionTitle,omitempty"` + SectionBody *string `protobuf:"bytes,2,opt,name=sectionBody" json:"sectionBody,omitempty"` + SourcesMetadata []*BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningSearchSourceMetadata `protobuf:"bytes,3,rep,name=sourcesMetadata" json:"sourcesMetadata,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningStepSectionMetadata) Reset() { + *x = BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningStepSectionMetadata{} + mi := &file_waBotMetadata_WABotMetadata_proto_msgTypes[34] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningStepSectionMetadata) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningStepSectionMetadata) ProtoMessage() { +} + +func (x *BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningStepSectionMetadata) ProtoReflect() protoreflect.Message { + mi := &file_waBotMetadata_WABotMetadata_proto_msgTypes[34] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningStepSectionMetadata.ProtoReflect.Descriptor instead. +func (*BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningStepSectionMetadata) Descriptor() ([]byte, []int) { + return file_waBotMetadata_WABotMetadata_proto_rawDescGZIP(), []int{7, 0, 1} +} + +func (x *BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningStepSectionMetadata) GetSectionTitle() string { + if x != nil && x.SectionTitle != nil { + return *x.SectionTitle + } + return "" +} + +func (x *BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningStepSectionMetadata) GetSectionBody() string { + if x != nil && x.SectionBody != nil { + return *x.SectionBody + } + return "" +} + +func (x *BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningStepSectionMetadata) GetSourcesMetadata() []*BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningSearchSourceMetadata { + if x != nil { + return x.SourcesMetadata + } + return nil +} + +type BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningSearchSourceMetadata struct { + state protoimpl.MessageState `protogen:"open.v1"` + Title *string `protobuf:"bytes,1,opt,name=title" json:"title,omitempty"` + Provider *BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotSearchSourceProvider `protobuf:"varint,2,opt,name=provider,enum=WABotMetadata.BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotSearchSourceProvider" json:"provider,omitempty"` + SourceURL *string `protobuf:"bytes,3,opt,name=sourceURL" json:"sourceURL,omitempty"` + FavIconURL *string `protobuf:"bytes,4,opt,name=favIconURL" json:"favIconURL,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningSearchSourceMetadata) Reset() { + *x = BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningSearchSourceMetadata{} + mi := &file_waBotMetadata_WABotMetadata_proto_msgTypes[35] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningSearchSourceMetadata) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningSearchSourceMetadata) ProtoMessage() { +} + +func (x *BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningSearchSourceMetadata) ProtoReflect() protoreflect.Message { + mi := &file_waBotMetadata_WABotMetadata_proto_msgTypes[35] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningSearchSourceMetadata.ProtoReflect.Descriptor instead. +func (*BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningSearchSourceMetadata) Descriptor() ([]byte, []int) { + return file_waBotMetadata_WABotMetadata_proto_rawDescGZIP(), []int{7, 0, 2} +} + +func (x *BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningSearchSourceMetadata) GetTitle() string { + if x != nil && x.Title != nil { + return *x.Title + } + return "" +} + +func (x *BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningSearchSourceMetadata) GetProvider() BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotSearchSourceProvider { + if x != nil && x.Provider != nil { + return *x.Provider + } + return BotProgressIndicatorMetadata_BotPlanningStepMetadata_UNKNOWN_PROVIDER +} + +func (x *BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningSearchSourceMetadata) GetSourceURL() string { + if x != nil && x.SourceURL != nil { + return *x.SourceURL + } + return "" +} + +func (x *BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningSearchSourceMetadata) GetFavIconURL() string { + if x != nil && x.FavIconURL != nil { + return *x.FavIconURL + } + return "" +} + +type BotQuotaMetadata_BotFeatureQuotaMetadata struct { + state protoimpl.MessageState `protogen:"open.v1"` + FeatureType *BotQuotaMetadata_BotFeatureQuotaMetadata_BotFeatureType `protobuf:"varint,1,opt,name=featureType,enum=WABotMetadata.BotQuotaMetadata_BotFeatureQuotaMetadata_BotFeatureType" json:"featureType,omitempty"` + RemainingQuota *uint32 `protobuf:"varint,2,opt,name=remainingQuota" json:"remainingQuota,omitempty"` + ExpirationTimestamp *uint64 `protobuf:"varint,3,opt,name=expirationTimestamp" json:"expirationTimestamp,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BotQuotaMetadata_BotFeatureQuotaMetadata) Reset() { + *x = BotQuotaMetadata_BotFeatureQuotaMetadata{} + mi := &file_waBotMetadata_WABotMetadata_proto_msgTypes[36] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BotQuotaMetadata_BotFeatureQuotaMetadata) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BotQuotaMetadata_BotFeatureQuotaMetadata) ProtoMessage() {} + +func (x *BotQuotaMetadata_BotFeatureQuotaMetadata) ProtoReflect() protoreflect.Message { + mi := &file_waBotMetadata_WABotMetadata_proto_msgTypes[36] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BotQuotaMetadata_BotFeatureQuotaMetadata.ProtoReflect.Descriptor instead. +func (*BotQuotaMetadata_BotFeatureQuotaMetadata) Descriptor() ([]byte, []int) { + return file_waBotMetadata_WABotMetadata_proto_rawDescGZIP(), []int{10, 0} +} + +func (x *BotQuotaMetadata_BotFeatureQuotaMetadata) GetFeatureType() BotQuotaMetadata_BotFeatureQuotaMetadata_BotFeatureType { + if x != nil && x.FeatureType != nil { + return *x.FeatureType + } + return BotQuotaMetadata_BotFeatureQuotaMetadata_UNKNOWN_FEATURE +} + +func (x *BotQuotaMetadata_BotFeatureQuotaMetadata) GetRemainingQuota() uint32 { + if x != nil && x.RemainingQuota != nil { + return *x.RemainingQuota + } + return 0 +} + +func (x *BotQuotaMetadata_BotFeatureQuotaMetadata) GetExpirationTimestamp() uint64 { + if x != nil && x.ExpirationTimestamp != nil { + return *x.ExpirationTimestamp + } + return 0 +} + +type BotSourcesMetadata_BotSourceItem struct { + state protoimpl.MessageState `protogen:"open.v1"` + Provider *BotSourcesMetadata_BotSourceItem_SourceProvider `protobuf:"varint,1,opt,name=provider,enum=WABotMetadata.BotSourcesMetadata_BotSourceItem_SourceProvider" json:"provider,omitempty"` + ThumbnailCDNURL *string `protobuf:"bytes,2,opt,name=thumbnailCDNURL" json:"thumbnailCDNURL,omitempty"` + SourceProviderURL *string `protobuf:"bytes,3,opt,name=sourceProviderURL" json:"sourceProviderURL,omitempty"` + SourceQuery *string `protobuf:"bytes,4,opt,name=sourceQuery" json:"sourceQuery,omitempty"` + FaviconCDNURL *string `protobuf:"bytes,5,opt,name=faviconCDNURL" json:"faviconCDNURL,omitempty"` + CitationNumber *uint32 `protobuf:"varint,6,opt,name=citationNumber" json:"citationNumber,omitempty"` + SourceTitle *string `protobuf:"bytes,7,opt,name=sourceTitle" json:"sourceTitle,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BotSourcesMetadata_BotSourceItem) Reset() { + *x = BotSourcesMetadata_BotSourceItem{} + mi := &file_waBotMetadata_WABotMetadata_proto_msgTypes[37] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BotSourcesMetadata_BotSourceItem) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BotSourcesMetadata_BotSourceItem) ProtoMessage() {} + +func (x *BotSourcesMetadata_BotSourceItem) ProtoReflect() protoreflect.Message { + mi := &file_waBotMetadata_WABotMetadata_proto_msgTypes[37] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BotSourcesMetadata_BotSourceItem.ProtoReflect.Descriptor instead. +func (*BotSourcesMetadata_BotSourceItem) Descriptor() ([]byte, []int) { + return file_waBotMetadata_WABotMetadata_proto_rawDescGZIP(), []int{12, 0} +} + +func (x *BotSourcesMetadata_BotSourceItem) GetProvider() BotSourcesMetadata_BotSourceItem_SourceProvider { + if x != nil && x.Provider != nil { + return *x.Provider + } + return BotSourcesMetadata_BotSourceItem_UNKNOWN +} + +func (x *BotSourcesMetadata_BotSourceItem) GetThumbnailCDNURL() string { + if x != nil && x.ThumbnailCDNURL != nil { + return *x.ThumbnailCDNURL + } + return "" +} + +func (x *BotSourcesMetadata_BotSourceItem) GetSourceProviderURL() string { + if x != nil && x.SourceProviderURL != nil { + return *x.SourceProviderURL + } + return "" +} + +func (x *BotSourcesMetadata_BotSourceItem) GetSourceQuery() string { + if x != nil && x.SourceQuery != nil { + return *x.SourceQuery + } + return "" +} + +func (x *BotSourcesMetadata_BotSourceItem) GetFaviconCDNURL() string { + if x != nil && x.FaviconCDNURL != nil { + return *x.FaviconCDNURL + } + return "" +} + +func (x *BotSourcesMetadata_BotSourceItem) GetCitationNumber() uint32 { + if x != nil && x.CitationNumber != nil { + return *x.CitationNumber + } + return 0 +} + +func (x *BotSourcesMetadata_BotSourceItem) GetSourceTitle() string { + if x != nil && x.SourceTitle != nil { + return *x.SourceTitle + } + return "" +} + +type AIThreadInfo_AIThreadClientInfo struct { + state protoimpl.MessageState `protogen:"open.v1"` + Type *AIThreadInfo_AIThreadClientInfo_AIThreadType `protobuf:"varint,1,opt,name=type,enum=WABotMetadata.AIThreadInfo_AIThreadClientInfo_AIThreadType" json:"type,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *AIThreadInfo_AIThreadClientInfo) Reset() { + *x = AIThreadInfo_AIThreadClientInfo{} + mi := &file_waBotMetadata_WABotMetadata_proto_msgTypes[38] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *AIThreadInfo_AIThreadClientInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AIThreadInfo_AIThreadClientInfo) ProtoMessage() {} + +func (x *AIThreadInfo_AIThreadClientInfo) ProtoReflect() protoreflect.Message { + mi := &file_waBotMetadata_WABotMetadata_proto_msgTypes[38] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AIThreadInfo_AIThreadClientInfo.ProtoReflect.Descriptor instead. +func (*AIThreadInfo_AIThreadClientInfo) Descriptor() ([]byte, []int) { + return file_waBotMetadata_WABotMetadata_proto_rawDescGZIP(), []int{14, 0} +} + +func (x *AIThreadInfo_AIThreadClientInfo) GetType() AIThreadInfo_AIThreadClientInfo_AIThreadType { + if x != nil && x.Type != nil { + return *x.Type + } + return AIThreadInfo_AIThreadClientInfo_UNKNOWN +} + +type AIThreadInfo_AIThreadServerInfo struct { + state protoimpl.MessageState `protogen:"open.v1"` + Title *string `protobuf:"bytes,1,opt,name=title" json:"title,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *AIThreadInfo_AIThreadServerInfo) Reset() { + *x = AIThreadInfo_AIThreadServerInfo{} + mi := &file_waBotMetadata_WABotMetadata_proto_msgTypes[39] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *AIThreadInfo_AIThreadServerInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AIThreadInfo_AIThreadServerInfo) ProtoMessage() {} + +func (x *AIThreadInfo_AIThreadServerInfo) ProtoReflect() protoreflect.Message { + mi := &file_waBotMetadata_WABotMetadata_proto_msgTypes[39] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AIThreadInfo_AIThreadServerInfo.ProtoReflect.Descriptor instead. +func (*AIThreadInfo_AIThreadServerInfo) Descriptor() ([]byte, []int) { + return file_waBotMetadata_WABotMetadata_proto_rawDescGZIP(), []int{14, 1} +} + +func (x *AIThreadInfo_AIThreadServerInfo) GetTitle() string { + if x != nil && x.Title != nil { + return *x.Title + } + return "" +} + +type BotRenderingMetadata_Keyword struct { + state protoimpl.MessageState `protogen:"open.v1"` + Value *string `protobuf:"bytes,1,opt,name=value" json:"value,omitempty"` + AssociatedPrompts []string `protobuf:"bytes,2,rep,name=associatedPrompts" json:"associatedPrompts,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BotRenderingMetadata_Keyword) Reset() { + *x = BotRenderingMetadata_Keyword{} + mi := &file_waBotMetadata_WABotMetadata_proto_msgTypes[40] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BotRenderingMetadata_Keyword) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BotRenderingMetadata_Keyword) ProtoMessage() {} + +func (x *BotRenderingMetadata_Keyword) ProtoReflect() protoreflect.Message { + mi := &file_waBotMetadata_WABotMetadata_proto_msgTypes[40] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BotRenderingMetadata_Keyword.ProtoReflect.Descriptor instead. +func (*BotRenderingMetadata_Keyword) Descriptor() ([]byte, []int) { + return file_waBotMetadata_WABotMetadata_proto_rawDescGZIP(), []int{23, 0} +} + +func (x *BotRenderingMetadata_Keyword) GetValue() string { + if x != nil && x.Value != nil { + return *x.Value + } + return "" +} + +func (x *BotRenderingMetadata_Keyword) GetAssociatedPrompts() []string { + if x != nil { + return x.AssociatedPrompts + } + return nil +} + +type InThreadSurveyMetadata_InThreadSurveyPrivacyStatementPart struct { + state protoimpl.MessageState `protogen:"open.v1"` + Text *string `protobuf:"bytes,1,opt,name=text" json:"text,omitempty"` + URL *string `protobuf:"bytes,2,opt,name=URL" json:"URL,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *InThreadSurveyMetadata_InThreadSurveyPrivacyStatementPart) Reset() { + *x = InThreadSurveyMetadata_InThreadSurveyPrivacyStatementPart{} + mi := &file_waBotMetadata_WABotMetadata_proto_msgTypes[41] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *InThreadSurveyMetadata_InThreadSurveyPrivacyStatementPart) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*InThreadSurveyMetadata_InThreadSurveyPrivacyStatementPart) ProtoMessage() {} + +func (x *InThreadSurveyMetadata_InThreadSurveyPrivacyStatementPart) ProtoReflect() protoreflect.Message { + mi := &file_waBotMetadata_WABotMetadata_proto_msgTypes[41] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use InThreadSurveyMetadata_InThreadSurveyPrivacyStatementPart.ProtoReflect.Descriptor instead. +func (*InThreadSurveyMetadata_InThreadSurveyPrivacyStatementPart) Descriptor() ([]byte, []int) { + return file_waBotMetadata_WABotMetadata_proto_rawDescGZIP(), []int{28, 0} +} + +func (x *InThreadSurveyMetadata_InThreadSurveyPrivacyStatementPart) GetText() string { + if x != nil && x.Text != nil { + return *x.Text + } + return "" +} + +func (x *InThreadSurveyMetadata_InThreadSurveyPrivacyStatementPart) GetURL() string { + if x != nil && x.URL != nil { + return *x.URL + } + return "" +} + +type InThreadSurveyMetadata_InThreadSurveyOption struct { + state protoimpl.MessageState `protogen:"open.v1"` + StringValue *string `protobuf:"bytes,1,opt,name=stringValue" json:"stringValue,omitempty"` + NumericValue *uint32 `protobuf:"varint,2,opt,name=numericValue" json:"numericValue,omitempty"` + TextTranslated *string `protobuf:"bytes,3,opt,name=textTranslated" json:"textTranslated,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *InThreadSurveyMetadata_InThreadSurveyOption) Reset() { + *x = InThreadSurveyMetadata_InThreadSurveyOption{} + mi := &file_waBotMetadata_WABotMetadata_proto_msgTypes[42] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *InThreadSurveyMetadata_InThreadSurveyOption) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*InThreadSurveyMetadata_InThreadSurveyOption) ProtoMessage() {} + +func (x *InThreadSurveyMetadata_InThreadSurveyOption) ProtoReflect() protoreflect.Message { + mi := &file_waBotMetadata_WABotMetadata_proto_msgTypes[42] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use InThreadSurveyMetadata_InThreadSurveyOption.ProtoReflect.Descriptor instead. +func (*InThreadSurveyMetadata_InThreadSurveyOption) Descriptor() ([]byte, []int) { + return file_waBotMetadata_WABotMetadata_proto_rawDescGZIP(), []int{28, 1} +} + +func (x *InThreadSurveyMetadata_InThreadSurveyOption) GetStringValue() string { + if x != nil && x.StringValue != nil { + return *x.StringValue + } + return "" +} + +func (x *InThreadSurveyMetadata_InThreadSurveyOption) GetNumericValue() uint32 { + if x != nil && x.NumericValue != nil { + return *x.NumericValue + } + return 0 +} + +func (x *InThreadSurveyMetadata_InThreadSurveyOption) GetTextTranslated() string { + if x != nil && x.TextTranslated != nil { + return *x.TextTranslated + } + return "" +} + +type InThreadSurveyMetadata_InThreadSurveyQuestion struct { + state protoimpl.MessageState `protogen:"open.v1"` + QuestionText *string `protobuf:"bytes,1,opt,name=questionText" json:"questionText,omitempty"` + QuestionID *string `protobuf:"bytes,2,opt,name=questionID" json:"questionID,omitempty"` + QuestionOptions []*InThreadSurveyMetadata_InThreadSurveyOption `protobuf:"bytes,3,rep,name=questionOptions" json:"questionOptions,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *InThreadSurveyMetadata_InThreadSurveyQuestion) Reset() { + *x = InThreadSurveyMetadata_InThreadSurveyQuestion{} + mi := &file_waBotMetadata_WABotMetadata_proto_msgTypes[43] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *InThreadSurveyMetadata_InThreadSurveyQuestion) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*InThreadSurveyMetadata_InThreadSurveyQuestion) ProtoMessage() {} + +func (x *InThreadSurveyMetadata_InThreadSurveyQuestion) ProtoReflect() protoreflect.Message { + mi := &file_waBotMetadata_WABotMetadata_proto_msgTypes[43] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use InThreadSurveyMetadata_InThreadSurveyQuestion.ProtoReflect.Descriptor instead. +func (*InThreadSurveyMetadata_InThreadSurveyQuestion) Descriptor() ([]byte, []int) { + return file_waBotMetadata_WABotMetadata_proto_rawDescGZIP(), []int{28, 2} +} + +func (x *InThreadSurveyMetadata_InThreadSurveyQuestion) GetQuestionText() string { + if x != nil && x.QuestionText != nil { + return *x.QuestionText + } + return "" +} + +func (x *InThreadSurveyMetadata_InThreadSurveyQuestion) GetQuestionID() string { + if x != nil && x.QuestionID != nil { + return *x.QuestionID + } + return "" +} + +func (x *InThreadSurveyMetadata_InThreadSurveyQuestion) GetQuestionOptions() []*InThreadSurveyMetadata_InThreadSurveyOption { + if x != nil { + return x.QuestionOptions + } + return nil +} + +type BotUnifiedResponseMutation_MediaDetailsMetadata struct { + state protoimpl.MessageState `protogen:"open.v1"` + ID *string `protobuf:"bytes,1,opt,name=ID" json:"ID,omitempty"` + HighResMedia *BotMediaMetadata `protobuf:"bytes,2,opt,name=highResMedia" json:"highResMedia,omitempty"` + PreviewMedia *BotMediaMetadata `protobuf:"bytes,3,opt,name=previewMedia" json:"previewMedia,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BotUnifiedResponseMutation_MediaDetailsMetadata) Reset() { + *x = BotUnifiedResponseMutation_MediaDetailsMetadata{} + mi := &file_waBotMetadata_WABotMetadata_proto_msgTypes[44] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BotUnifiedResponseMutation_MediaDetailsMetadata) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BotUnifiedResponseMutation_MediaDetailsMetadata) ProtoMessage() {} + +func (x *BotUnifiedResponseMutation_MediaDetailsMetadata) ProtoReflect() protoreflect.Message { + mi := &file_waBotMetadata_WABotMetadata_proto_msgTypes[44] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BotUnifiedResponseMutation_MediaDetailsMetadata.ProtoReflect.Descriptor instead. +func (*BotUnifiedResponseMutation_MediaDetailsMetadata) Descriptor() ([]byte, []int) { + return file_waBotMetadata_WABotMetadata_proto_rawDescGZIP(), []int{30, 0} +} + +func (x *BotUnifiedResponseMutation_MediaDetailsMetadata) GetID() string { + if x != nil && x.ID != nil { + return *x.ID + } + return "" +} + +func (x *BotUnifiedResponseMutation_MediaDetailsMetadata) GetHighResMedia() *BotMediaMetadata { + if x != nil { + return x.HighResMedia + } + return nil +} + +func (x *BotUnifiedResponseMutation_MediaDetailsMetadata) GetPreviewMedia() *BotMediaMetadata { + if x != nil { + return x.PreviewMedia + } + return nil +} + +type BotUnifiedResponseMutation_SideBySideMetadata struct { + state protoimpl.MessageState `protogen:"open.v1"` + PrimaryResponseID *string `protobuf:"bytes,1,opt,name=primaryResponseID" json:"primaryResponseID,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BotUnifiedResponseMutation_SideBySideMetadata) Reset() { + *x = BotUnifiedResponseMutation_SideBySideMetadata{} + mi := &file_waBotMetadata_WABotMetadata_proto_msgTypes[45] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BotUnifiedResponseMutation_SideBySideMetadata) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BotUnifiedResponseMutation_SideBySideMetadata) ProtoMessage() {} + +func (x *BotUnifiedResponseMutation_SideBySideMetadata) ProtoReflect() protoreflect.Message { + mi := &file_waBotMetadata_WABotMetadata_proto_msgTypes[45] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BotUnifiedResponseMutation_SideBySideMetadata.ProtoReflect.Descriptor instead. +func (*BotUnifiedResponseMutation_SideBySideMetadata) Descriptor() ([]byte, []int) { + return file_waBotMetadata_WABotMetadata_proto_rawDescGZIP(), []int{30, 1} +} + +func (x *BotUnifiedResponseMutation_SideBySideMetadata) GetPrimaryResponseID() string { + if x != nil && x.PrimaryResponseID != nil { + return *x.PrimaryResponseID + } + return "" +} + +var File_waBotMetadata_WABotMetadata_proto protoreflect.FileDescriptor + +const file_waBotMetadata_WABotMetadata_proto_rawDesc = "" + + "\n" + + "!waBotMetadata/WABotMetadata.proto\x12\rWABotMetadata\x1a\x17waCommon/WACommon.proto\"\xce\x06\n" + + "\x11BotPluginMetadata\x12K\n" + + "\bprovider\x18\x01 \x01(\x0e2/.WABotMetadata.BotPluginMetadata.SearchProviderR\bprovider\x12K\n" + + "\n" + + "pluginType\x18\x02 \x01(\x0e2+.WABotMetadata.BotPluginMetadata.PluginTypeR\n" + + "pluginType\x12(\n" + + "\x0fthumbnailCDNURL\x18\x03 \x01(\tR\x0fthumbnailCDNURL\x12.\n" + + "\x12profilePhotoCDNURL\x18\x04 \x01(\tR\x12profilePhotoCDNURL\x12,\n" + + "\x11searchProviderURL\x18\x05 \x01(\tR\x11searchProviderURL\x12&\n" + + "\x0ereferenceIndex\x18\x06 \x01(\rR\x0ereferenceIndex\x12.\n" + + "\x12expectedLinksCount\x18\a \x01(\rR\x12expectedLinksCount\x12 \n" + + "\vsearchQuery\x18\t \x01(\tR\vsearchQuery\x12L\n" + + "\x16parentPluginMessageKey\x18\n" + + " \x01(\v2\x14.WACommon.MessageKeyR\x16parentPluginMessageKey\x12U\n" + + "\x0fdeprecatedField\x18\v \x01(\x0e2+.WABotMetadata.BotPluginMetadata.PluginTypeR\x0fdeprecatedField\x12W\n" + + "\x10parentPluginType\x18\f \x01(\x0e2+.WABotMetadata.BotPluginMetadata.PluginTypeR\x10parentPluginType\x12$\n" + + "\rfaviconCDNURL\x18\r \x01(\tR\rfaviconCDNURL\"7\n" + + "\n" + + "PluginType\x12\x12\n" + + "\x0eUNKNOWN_PLUGIN\x10\x00\x12\t\n" + + "\x05REELS\x10\x01\x12\n" + + "\n" + + "\x06SEARCH\x10\x02\"@\n" + + "\x0eSearchProvider\x12\v\n" + + "\aUNKNOWN\x10\x00\x12\b\n" + + "\x04BING\x10\x01\x12\n" + + "\n" + + "\x06GOOGLE\x10\x02\x12\v\n" + + "\aSUPPORT\x10\x03\"\x94\x01\n" + + "\x10BotLinkedAccount\x12H\n" + + "\x04type\x18\x01 \x01(\x0e24.WABotMetadata.BotLinkedAccount.BotLinkedAccountTypeR\x04type\"6\n" + + "\x14BotLinkedAccountType\x12\x1e\n" + + "\x1aBOT_LINKED_ACCOUNT_TYPE_1P\x10\x00\"\x94\x02\n" + + "$BotSignatureVerificationUseCaseProof\x12\x18\n" + + "\aversion\x18\x01 \x01(\x05R\aversion\x12a\n" + + "\auseCase\x18\x02 \x01(\x0e2G.WABotMetadata.BotSignatureVerificationUseCaseProof.BotSignatureUseCaseR\auseCase\x12\x1c\n" + + "\tsignature\x18\x03 \x01(\fR\tsignature\x12*\n" + + "\x10certificateChain\x18\x04 \x01(\fR\x10certificateChain\"%\n" + + "\x13BotSignatureUseCase\x12\x0e\n" + + "\n" + + "WA_BOT_MSG\x10\x00\"\xe6\x01\n" + + "\x1bBotPromotionMessageMetadata\x12a\n" + + "\rpromotionType\x18\x01 \x01(\x0e2;.WABotMetadata.BotPromotionMessageMetadata.BotPromotionTypeR\rpromotionType\x12 \n" + + "\vbuttonTitle\x18\x02 \x01(\tR\vbuttonTitle\"B\n" + + "\x10BotPromotionType\x12\x10\n" + + "\fUNKNOWN_TYPE\x10\x00\x12\a\n" + + "\x03C50\x10\x01\x12\x13\n" + + "\x0fSURVEY_PLATFORM\x10\x02\"\xed\x02\n" + + "\x10BotMediaMetadata\x12\x1e\n" + + "\n" + + "fileSHA256\x18\x01 \x01(\tR\n" + + "fileSHA256\x12\x1a\n" + + "\bmediaKey\x18\x02 \x01(\tR\bmediaKey\x12$\n" + + "\rfileEncSHA256\x18\x03 \x01(\tR\rfileEncSHA256\x12\x1e\n" + + "\n" + + "directPath\x18\x04 \x01(\tR\n" + + "directPath\x12,\n" + + "\x11mediaKeyTimestamp\x18\x05 \x01(\x03R\x11mediaKeyTimestamp\x12\x1a\n" + + "\bmimetype\x18\x06 \x01(\tR\bmimetype\x12Y\n" + + "\x0forientationType\x18\a \x01(\x0e2/.WABotMetadata.BotMediaMetadata.OrientationTypeR\x0forientationType\"2\n" + + "\x0fOrientationType\x12\n" + + "\n" + + "\x06CENTER\x10\x01\x12\b\n" + + "\x04LEFT\x10\x02\x12\t\n" + + "\x05RIGHT\x10\x03\"\xd3\x03\n" + + "\x13BotReminderMetadata\x12B\n" + + "\x11requestMessageKey\x18\x01 \x01(\v2\x14.WACommon.MessageKeyR\x11requestMessageKey\x12I\n" + + "\x06action\x18\x02 \x01(\x0e21.WABotMetadata.BotReminderMetadata.ReminderActionR\x06action\x12\x12\n" + + "\x04name\x18\x03 \x01(\tR\x04name\x122\n" + + "\x14nextTriggerTimestamp\x18\x04 \x01(\x04R\x14nextTriggerTimestamp\x12R\n" + + "\tfrequency\x18\x05 \x01(\x0e24.WABotMetadata.BotReminderMetadata.ReminderFrequencyR\tfrequency\"O\n" + + "\x11ReminderFrequency\x12\b\n" + + "\x04ONCE\x10\x01\x12\t\n" + + "\x05DAILY\x10\x02\x12\n" + + "\n" + + "\x06WEEKLY\x10\x03\x12\f\n" + + "\bBIWEEKLY\x10\x04\x12\v\n" + + "\aMONTHLY\x10\x05\"@\n" + + "\x0eReminderAction\x12\n" + + "\n" + + "\x06NOTIFY\x10\x01\x12\n" + + "\n" + + "\x06CREATE\x10\x02\x12\n" + + "\n" + + "\x06DELETE\x10\x03\x12\n" + + "\n" + + "\x06UPDATE\x10\x04\"\xd7\x02\n" + + "\x10BotModelMetadata\x12G\n" + + "\tmodelType\x18\x01 \x01(\x0e2).WABotMetadata.BotModelMetadata.ModelTypeR\tmodelType\x12b\n" + + "\x12premiumModelStatus\x18\x02 \x01(\x0e22.WABotMetadata.BotModelMetadata.PremiumModelStatusR\x12premiumModelStatus\"O\n" + + "\x12PremiumModelStatus\x12\x12\n" + + "\x0eUNKNOWN_STATUS\x10\x00\x12\r\n" + + "\tAVAILABLE\x10\x01\x12\x16\n" + + "\x12QUOTA_EXCEED_LIMIT\x10\x02\"E\n" + + "\tModelType\x12\x10\n" + + "\fUNKNOWN_TYPE\x10\x00\x12\x0e\n" + + "\n" + + "LLAMA_PROD\x10\x01\x12\x16\n" + + "\x12LLAMA_PROD_PREMIUM\x10\x02\"\xcb\r\n" + + "\x1cBotProgressIndicatorMetadata\x120\n" + + "\x13progressDescription\x18\x01 \x01(\tR\x13progressDescription\x12i\n" + + "\rstepsMetadata\x18\x02 \x03(\v2C.WABotMetadata.BotProgressIndicatorMetadata.BotPlanningStepMetadataR\rstepsMetadata\x1a\x8d\f\n" + + "\x17BotPlanningStepMetadata\x12 \n" + + "\vstatusTitle\x18\x01 \x01(\tR\vstatusTitle\x12\x1e\n" + + "\n" + + "statusBody\x18\x02 \x01(\tR\n" + + "statusBody\x12\x8e\x01\n" + + "\x0fsourcesMetadata\x18\x03 \x03(\v2d.WABotMetadata.BotProgressIndicatorMetadata.BotPlanningStepMetadata.BotPlanningSearchSourcesMetadataR\x0fsourcesMetadata\x12n\n" + + "\x06status\x18\x04 \x01(\x0e2V.WABotMetadata.BotProgressIndicatorMetadata.BotPlanningStepMetadata.PlanningStepStatusR\x06status\x12 \n" + + "\visReasoning\x18\x05 \x01(\bR\visReasoning\x12*\n" + + "\x10isEnhancedSearch\x18\x06 \x01(\bR\x10isEnhancedSearch\x12~\n" + + "\bsections\x18\a \x03(\v2b.WABotMetadata.BotProgressIndicatorMetadata.BotPlanningStepMetadata.BotPlanningStepSectionMetadataR\bsections\x1a\xd7\x02\n" + + " BotPlanningSearchSourcesMetadata\x12 \n" + + "\vsourceTitle\x18\x01 \x01(\tR\vsourceTitle\x12\xa1\x01\n" + + "\bprovider\x18\x02 \x01(\x0e2\x84\x01.WABotMetadata.BotProgressIndicatorMetadata.BotPlanningStepMetadata.BotPlanningSearchSourcesMetadata.BotPlanningSearchSourceProviderR\bprovider\x12\x1c\n" + + "\tsourceURL\x18\x03 \x01(\tR\tsourceURL\"O\n" + + "\x1fBotPlanningSearchSourceProvider\x12\v\n" + + "\aUNKNOWN\x10\x00\x12\t\n" + + "\x05OTHER\x10\x01\x12\n" + + "\n" + + "\x06GOOGLE\x10\x02\x12\b\n" + + "\x04BING\x10\x03\x1a\xf6\x01\n" + + "\x1eBotPlanningStepSectionMetadata\x12\"\n" + + "\fsectionTitle\x18\x01 \x01(\tR\fsectionTitle\x12 \n" + + "\vsectionBody\x18\x02 \x01(\tR\vsectionBody\x12\x8d\x01\n" + + "\x0fsourcesMetadata\x18\x03 \x03(\v2c.WABotMetadata.BotProgressIndicatorMetadata.BotPlanningStepMetadata.BotPlanningSearchSourceMetadataR\x0fsourcesMetadata\x1a\xee\x01\n" + + "\x1fBotPlanningSearchSourceMetadata\x12\x14\n" + + "\x05title\x18\x01 \x01(\tR\x05title\x12w\n" + + "\bprovider\x18\x02 \x01(\x0e2[.WABotMetadata.BotProgressIndicatorMetadata.BotPlanningStepMetadata.BotSearchSourceProviderR\bprovider\x12\x1c\n" + + "\tsourceURL\x18\x03 \x01(\tR\tsourceURL\x12\x1e\n" + + "\n" + + "favIconURL\x18\x04 \x01(\tR\n" + + "favIconURL\"P\n" + + "\x17BotSearchSourceProvider\x12\x14\n" + + "\x10UNKNOWN_PROVIDER\x10\x00\x12\t\n" + + "\x05OTHER\x10\x01\x12\n" + + "\n" + + "\x06GOOGLE\x10\x02\x12\b\n" + + "\x04BING\x10\x03\"K\n" + + "\x12PlanningStepStatus\x12\v\n" + + "\aUNKNOWN\x10\x00\x12\v\n" + + "\aPLANNED\x10\x01\x12\r\n" + + "\tEXECUTING\x10\x02\x12\f\n" + + "\bFINISHED\x10\x03\"\xc0\v\n" + + "\x15BotCapabilityMetadata\x12Z\n" + + "\fcapabilities\x18\x01 \x03(\x0e26.WABotMetadata.BotCapabilityMetadata.BotCapabilityTypeR\fcapabilities\"\xca\n" + + "\n" + + "\x11BotCapabilityType\x12\v\n" + + "\aUNKNOWN\x10\x00\x12\x16\n" + + "\x12PROGRESS_INDICATOR\x10\x01\x12\x19\n" + + "\x15RICH_RESPONSE_HEADING\x10\x02\x12\x1d\n" + + "\x19RICH_RESPONSE_NESTED_LIST\x10\x03\x12\r\n" + + "\tAI_MEMORY\x10\x04\x12 \n" + + "\x1cRICH_RESPONSE_THREAD_SURFING\x10\x05\x12\x17\n" + + "\x13RICH_RESPONSE_TABLE\x10\x06\x12\x16\n" + + "\x12RICH_RESPONSE_CODE\x10\a\x12%\n" + + "!RICH_RESPONSE_STRUCTURED_RESPONSE\x10\b\x12\x1e\n" + + "\x1aRICH_RESPONSE_INLINE_IMAGE\x10\t\x12#\n" + + "\x1fWA_IG_1P_PLUGIN_RANKING_CONTROL\x10\n" + + "\x12$\n" + + " WA_IG_1P_PLUGIN_RANKING_UPDATE_1\x10\v\x12$\n" + + " WA_IG_1P_PLUGIN_RANKING_UPDATE_2\x10\f\x12$\n" + + " WA_IG_1P_PLUGIN_RANKING_UPDATE_3\x10\r\x12$\n" + + " WA_IG_1P_PLUGIN_RANKING_UPDATE_4\x10\x0e\x12$\n" + + " WA_IG_1P_PLUGIN_RANKING_UPDATE_5\x10\x0f\x12$\n" + + " WA_IG_1P_PLUGIN_RANKING_UPDATE_6\x10\x10\x12$\n" + + " WA_IG_1P_PLUGIN_RANKING_UPDATE_7\x10\x11\x12$\n" + + " WA_IG_1P_PLUGIN_RANKING_UPDATE_8\x10\x12\x12$\n" + + " WA_IG_1P_PLUGIN_RANKING_UPDATE_9\x10\x13\x12%\n" + + "!WA_IG_1P_PLUGIN_RANKING_UPDATE_10\x10\x14\x12\x1d\n" + + "\x19RICH_RESPONSE_SUB_HEADING\x10\x15\x12\x1c\n" + + "\x18RICH_RESPONSE_GRID_IMAGE\x10\x16\x12\x18\n" + + "\x14AI_STUDIO_UGC_MEMORY\x10\x17\x12\x17\n" + + "\x13RICH_RESPONSE_LATEX\x10\x18\x12\x16\n" + + "\x12RICH_RESPONSE_MAPS\x10\x19\x12\x1e\n" + + "\x1aRICH_RESPONSE_INLINE_REELS\x10\x1a\x12\x14\n" + + "\x10AGENTIC_PLANNING\x10\x1b\x12\x13\n" + + "\x0fACCOUNT_LINKING\x10\x1c\x12\x1c\n" + + "\x18STREAMING_DISAGGREGATION\x10\x1d\x12\x1f\n" + + "\x1bRICH_RESPONSE_GRID_IMAGE_3P\x10\x1e\x12\x1e\n" + + "\x1aRICH_RESPONSE_LATEX_INLINE\x10\x1f\x12\x0e\n" + + "\n" + + "QUERY_PLAN\x10 \x12\x15\n" + + "\x11PROACTIVE_MESSAGE\x10!\x12\"\n" + + "\x1eRICH_RESPONSE_UNIFIED_RESPONSE\x10\"\x12\x15\n" + + "\x11PROMOTION_MESSAGE\x10#\x12\x1b\n" + + "\x17SIMPLIFIED_PROFILE_PAGE\x10$\x12$\n" + + " RICH_RESPONSE_SOURCES_IN_MESSAGE\x10%\x12%\n" + + "!RICH_RESPONSE_SIDE_BY_SIDE_SURVEY\x10&\x12(\n" + + "$RICH_RESPONSE_UNIFIED_TEXT_COMPONENT\x10'\x12\x14\n" + + "\x10AI_SHARED_MEMORY\x10(\x12!\n" + + "\x1dRICH_RESPONSE_UNIFIED_SOURCES\x10)\x12*\n" + + "&RICH_RESPONSE_UNIFIED_DOMAIN_CITATIONS\x10*\"\xaa\x01\n" + + "\x18BotModeSelectionMetadata\x12P\n" + + "\x04mode\x18\x01 \x03(\x0e2<.WABotMetadata.BotModeSelectionMetadata.BotUserSelectionModeR\x04mode\"<\n" + + "\x14BotUserSelectionMode\x12\x10\n" + + "\fUNKNOWN_MODE\x10\x00\x12\x12\n" + + "\x0eREASONING_MODE\x10\x01\"\xa3\x03\n" + + "\x10BotQuotaMetadata\x12q\n" + + "\x17botFeatureQuotaMetadata\x18\x01 \x03(\v27.WABotMetadata.BotQuotaMetadata.BotFeatureQuotaMetadataR\x17botFeatureQuotaMetadata\x1a\x9b\x02\n" + + "\x17BotFeatureQuotaMetadata\x12h\n" + + "\vfeatureType\x18\x01 \x01(\x0e2F.WABotMetadata.BotQuotaMetadata.BotFeatureQuotaMetadata.BotFeatureTypeR\vfeatureType\x12&\n" + + "\x0eremainingQuota\x18\x02 \x01(\rR\x0eremainingQuota\x120\n" + + "\x13expirationTimestamp\x18\x03 \x01(\x04R\x13expirationTimestamp\"<\n" + + "\x0eBotFeatureType\x12\x13\n" + + "\x0fUNKNOWN_FEATURE\x10\x00\x12\x15\n" + + "\x11REASONING_FEATURE\x10\x01\"\xad\x01\n" + + "\x12BotImagineMetadata\x12O\n" + + "\vimagineType\x18\x01 \x01(\x0e2-.WABotMetadata.BotImagineMetadata.ImagineTypeR\vimagineType\"F\n" + + "\vImagineType\x12\v\n" + + "\aUNKNOWN\x10\x00\x12\v\n" + + "\aIMAGINE\x10\x01\x12\b\n" + + "\x04MEMU\x10\x02\x12\t\n" + + "\x05FLASH\x10\x03\x12\b\n" + + "\x04EDIT\x10\x04\"\x84\x04\n" + + "\x12BotSourcesMetadata\x12I\n" + + "\asources\x18\x01 \x03(\v2/.WABotMetadata.BotSourcesMetadata.BotSourceItemR\asources\x1a\xa2\x03\n" + + "\rBotSourceItem\x12Z\n" + + "\bprovider\x18\x01 \x01(\x0e2>.WABotMetadata.BotSourcesMetadata.BotSourceItem.SourceProviderR\bprovider\x12(\n" + + "\x0fthumbnailCDNURL\x18\x02 \x01(\tR\x0fthumbnailCDNURL\x12,\n" + + "\x11sourceProviderURL\x18\x03 \x01(\tR\x11sourceProviderURL\x12 \n" + + "\vsourceQuery\x18\x04 \x01(\tR\vsourceQuery\x12$\n" + + "\rfaviconCDNURL\x18\x05 \x01(\tR\rfaviconCDNURL\x12&\n" + + "\x0ecitationNumber\x18\x06 \x01(\rR\x0ecitationNumber\x12 \n" + + "\vsourceTitle\x18\a \x01(\tR\vsourceTitle\"K\n" + + "\x0eSourceProvider\x12\v\n" + + "\aUNKNOWN\x10\x00\x12\b\n" + + "\x04BING\x10\x01\x12\n" + + "\n" + + "\x06GOOGLE\x10\x02\x12\v\n" + + "\aSUPPORT\x10\x03\x12\t\n" + + "\x05OTHER\x10\x04\"\x9e\x01\n" + + "\x10BotMessageOrigin\x12H\n" + + "\x04type\x18\x01 \x01(\x0e24.WABotMetadata.BotMessageOrigin.BotMessageOriginTypeR\x04type\"@\n" + + "\x14BotMessageOriginType\x12(\n" + + "$BOT_MESSAGE_ORIGIN_TYPE_AI_INITIATED\x10\x00\"\xfb\x02\n" + + "\fAIThreadInfo\x12N\n" + + "\n" + + "serverInfo\x18\x01 \x01(\v2..WABotMetadata.AIThreadInfo.AIThreadServerInfoR\n" + + "serverInfo\x12N\n" + + "\n" + + "clientInfo\x18\x02 \x01(\v2..WABotMetadata.AIThreadInfo.AIThreadClientInfoR\n" + + "clientInfo\x1a\x9e\x01\n" + + "\x12AIThreadClientInfo\x12O\n" + + "\x04type\x18\x01 \x01(\x0e2;.WABotMetadata.AIThreadInfo.AIThreadClientInfo.AIThreadTypeR\x04type\"7\n" + + "\fAIThreadType\x12\v\n" + + "\aUNKNOWN\x10\x00\x12\v\n" + + "\aDEFAULT\x10\x01\x12\r\n" + + "\tINCOGNITO\x10\x02\x1a*\n" + + "\x12AIThreadServerInfo\x12\x14\n" + + "\x05title\x18\x01 \x01(\tR\x05title\"\xab\x01\n" + + "\x11BotAvatarMetadata\x12\x1c\n" + + "\tsentiment\x18\x01 \x01(\rR\tsentiment\x12$\n" + + "\rbehaviorGraph\x18\x02 \x01(\tR\rbehaviorGraph\x12\x16\n" + + "\x06action\x18\x03 \x01(\rR\x06action\x12\x1c\n" + + "\tintensity\x18\x04 \x01(\rR\tintensity\x12\x1c\n" + + "\twordCount\x18\x05 \x01(\rR\twordCount\"\xf9\x01\n" + + "\x1aBotSuggestedPromptMetadata\x12*\n" + + "\x10suggestedPrompts\x18\x01 \x03(\tR\x10suggestedPrompts\x120\n" + + "\x13selectedPromptIndex\x18\x02 \x01(\rR\x13selectedPromptIndex\x12Q\n" + + "\x11promptSuggestions\x18\x03 \x01(\v2#.WABotMetadata.BotPromptSuggestionsR\x11promptSuggestions\x12*\n" + + "\x10selectedPromptID\x18\x04 \x01(\tR\x10selectedPromptID\"\\\n" + + "\x14BotPromptSuggestions\x12D\n" + + "\vsuggestions\x18\x01 \x03(\v2\".WABotMetadata.BotPromptSuggestionR\vsuggestions\"I\n" + + "\x13BotPromptSuggestion\x12\x16\n" + + "\x06prompt\x18\x01 \x01(\tR\x06prompt\x12\x1a\n" + + "\bpromptID\x18\x02 \x01(\tR\bpromptID\"\x9e\x01\n" + + "\x19BotLinkedAccountsMetadata\x12;\n" + + "\baccounts\x18\x01 \x03(\v2\x1f.WABotMetadata.BotLinkedAccountR\baccounts\x12\"\n" + + "\facAuthTokens\x18\x02 \x01(\fR\facAuthTokens\x12 \n" + + "\vacErrorCode\x18\x03 \x01(\x05R\vacErrorCode\"\xb3\x01\n" + + "\x11BotMemoryMetadata\x12<\n" + + "\n" + + "addedFacts\x18\x01 \x03(\v2\x1c.WABotMetadata.BotMemoryFactR\n" + + "addedFacts\x12@\n" + + "\fremovedFacts\x18\x02 \x03(\v2\x1c.WABotMetadata.BotMemoryFactR\fremovedFacts\x12\x1e\n" + + "\n" + + "disclaimer\x18\x03 \x01(\tR\n" + + "disclaimer\";\n" + + "\rBotMemoryFact\x12\x12\n" + + "\x04fact\x18\x01 \x01(\tR\x04fact\x12\x16\n" + + "\x06factID\x18\x02 \x01(\tR\x06factID\"o\n" + + " BotSignatureVerificationMetadata\x12K\n" + + "\x06proofs\x18\x01 \x03(\v23.WABotMetadata.BotSignatureVerificationUseCaseProofR\x06proofs\"\xae\x01\n" + + "\x14BotRenderingMetadata\x12G\n" + + "\bkeywords\x18\x01 \x03(\v2+.WABotMetadata.BotRenderingMetadata.KeywordR\bkeywords\x1aM\n" + + "\aKeyword\x12\x14\n" + + "\x05value\x18\x01 \x01(\tR\x05value\x12,\n" + + "\x11associatedPrompts\x18\x02 \x03(\tR\x11associatedPrompts\"\xe4\x01\n" + + "\x12BotMetricsMetadata\x12$\n" + + "\rdestinationID\x18\x01 \x01(\tR\rdestinationID\x12Y\n" + + "\x15destinationEntryPoint\x18\x02 \x01(\x0e2#.WABotMetadata.BotMetricsEntryPointR\x15destinationEntryPoint\x12M\n" + + "\fthreadOrigin\x18\x03 \x01(\x0e2).WABotMetadata.BotMetricsThreadEntryPointR\fthreadOrigin\"y\n" + + "\x12BotSessionMetadata\x12\x1c\n" + + "\tsessionID\x18\x01 \x01(\tR\tsessionID\x12E\n" + + "\rsessionSource\x18\x02 \x01(\x0e2\x1f.WABotMetadata.BotSessionSourceR\rsessionSource\"R\n" + + "\x0fBotMemuMetadata\x12?\n" + + "\n" + + "faceImages\x18\x01 \x03(\v2\x1f.WABotMetadata.BotMediaMetadataR\n" + + "faceImages\"\xa0\x01\n" + + "\x18BotAgeCollectionMetadata\x124\n" + + "\x15ageCollectionEligible\x18\x01 \x01(\bR\x15ageCollectionEligible\x12N\n" + + "\"shouldTriggerAgeCollectionOnClient\x18\x02 \x01(\bR\"shouldTriggerAgeCollectionOnClient\"\x98\n" + + "\n" + + "\x16InThreadSurveyMetadata\x12&\n" + + "\x0etessaSessionID\x18\x01 \x01(\tR\x0etessaSessionID\x12&\n" + + "\x0esimonSessionID\x18\x02 \x01(\tR\x0esimonSessionID\x12$\n" + + "\rsimonSurveyID\x18\x03 \x01(\tR\rsimonSurveyID\x12 \n" + + "\vtessaRootID\x18\x04 \x01(\tR\vtessaRootID\x12\x1c\n" + + "\trequestID\x18\x05 \x01(\tR\trequestID\x12\x1e\n" + + "\n" + + "tessaEvent\x18\x06 \x01(\tR\n" + + "tessaEvent\x122\n" + + "\x14invitationHeaderText\x18\a \x01(\tR\x14invitationHeaderText\x12.\n" + + "\x12invitationBodyText\x18\b \x01(\tR\x12invitationBodyText\x12,\n" + + "\x11invitationCtaText\x18\t \x01(\tR\x11invitationCtaText\x12*\n" + + "\x10invitationCtaURL\x18\n" + + " \x01(\tR\x10invitationCtaURL\x12 \n" + + "\vsurveyTitle\x18\v \x01(\tR\vsurveyTitle\x12Z\n" + + "\tquestions\x18\f \x03(\v2<.WABotMetadata.InThreadSurveyMetadata.InThreadSurveyQuestionR\tquestions\x12:\n" + + "\x18surveyContinueButtonText\x18\r \x01(\tR\x18surveyContinueButtonText\x126\n" + + "\x16surveySubmitButtonText\x18\x0e \x01(\tR\x16surveySubmitButtonText\x122\n" + + "\x14privacyStatementFull\x18\x0f \x01(\tR\x14privacyStatementFull\x12~\n" + + "\x15privacyStatementParts\x18\x10 \x03(\v2H.WABotMetadata.InThreadSurveyMetadata.InThreadSurveyPrivacyStatementPartR\x15privacyStatementParts\x12,\n" + + "\x11feedbackToastText\x18\x11 \x01(\tR\x11feedbackToastText\x1aJ\n" + + "\"InThreadSurveyPrivacyStatementPart\x12\x12\n" + + "\x04text\x18\x01 \x01(\tR\x04text\x12\x10\n" + + "\x03URL\x18\x02 \x01(\tR\x03URL\x1a\x84\x01\n" + + "\x14InThreadSurveyOption\x12 \n" + + "\vstringValue\x18\x01 \x01(\tR\vstringValue\x12\"\n" + + "\fnumericValue\x18\x02 \x01(\rR\fnumericValue\x12&\n" + + "\x0etextTranslated\x18\x03 \x01(\tR\x0etextTranslated\x1a\xc2\x01\n" + + "\x16InThreadSurveyQuestion\x12\"\n" + + "\fquestionText\x18\x01 \x01(\tR\fquestionText\x12\x1e\n" + + "\n" + + "questionID\x18\x02 \x01(\tR\n" + + "questionID\x12d\n" + + "\x0fquestionOptions\x18\x03 \x03(\v2:.WABotMetadata.InThreadSurveyMetadata.InThreadSurveyOptionR\x0fquestionOptions\"U\n" + + "\x18BotMessageOriginMetadata\x129\n" + + "\aorigins\x18\x01 \x03(\v2\x1f.WABotMetadata.BotMessageOriginR\aorigins\"\xef\x03\n" + + "\x1aBotUnifiedResponseMutation\x12^\n" + + "\vsbsMetadata\x18\x01 \x01(\v2<.WABotMetadata.BotUnifiedResponseMutation.SideBySideMetadataR\vsbsMetadata\x12z\n" + + "\x18mediaDetailsMetadataList\x18\x02 \x03(\v2>.WABotMetadata.BotUnifiedResponseMutation.MediaDetailsMetadataR\x18mediaDetailsMetadataList\x1a\xb0\x01\n" + + "\x14MediaDetailsMetadata\x12\x0e\n" + + "\x02ID\x18\x01 \x01(\tR\x02ID\x12C\n" + + "\fhighResMedia\x18\x02 \x01(\v2\x1f.WABotMetadata.BotMediaMetadataR\fhighResMedia\x12C\n" + + "\fpreviewMedia\x18\x03 \x01(\v2\x1f.WABotMetadata.BotMediaMetadataR\fpreviewMedia\x1aB\n" + + "\x12SideBySideMetadata\x12,\n" + + "\x11primaryResponseID\x18\x01 \x01(\tR\x11primaryResponseID\"\xaa\x13\n" + + "\vBotMetadata\x12H\n" + + "\x0eavatarMetadata\x18\x01 \x01(\v2 .WABotMetadata.BotAvatarMetadataR\x0eavatarMetadata\x12\x1c\n" + + "\tpersonaID\x18\x02 \x01(\tR\tpersonaID\x12H\n" + + "\x0epluginMetadata\x18\x03 \x01(\v2 .WABotMetadata.BotPluginMetadataR\x0epluginMetadata\x12c\n" + + "\x17suggestedPromptMetadata\x18\x04 \x01(\v2).WABotMetadata.BotSuggestedPromptMetadataR\x17suggestedPromptMetadata\x12\x1e\n" + + "\n" + + "invokerJID\x18\x05 \x01(\tR\n" + + "invokerJID\x12K\n" + + "\x0fsessionMetadata\x18\x06 \x01(\v2!.WABotMetadata.BotSessionMetadataR\x0fsessionMetadata\x12B\n" + + "\fmemuMetadata\x18\a \x01(\v2\x1e.WABotMetadata.BotMemuMetadataR\fmemuMetadata\x12\x1a\n" + + "\btimezone\x18\b \x01(\tR\btimezone\x12N\n" + + "\x10reminderMetadata\x18\t \x01(\v2\".WABotMetadata.BotReminderMetadataR\x10reminderMetadata\x12E\n" + + "\rmodelMetadata\x18\n" + + " \x01(\v2\x1f.WABotMetadata.BotModelMetadataR\rmodelMetadata\x124\n" + + "\x15messageDisclaimerText\x18\v \x01(\tR\x15messageDisclaimerText\x12i\n" + + "\x19progressIndicatorMetadata\x18\f \x01(\v2+.WABotMetadata.BotProgressIndicatorMetadataR\x19progressIndicatorMetadata\x12T\n" + + "\x12capabilityMetadata\x18\r \x01(\v2$.WABotMetadata.BotCapabilityMetadataR\x12capabilityMetadata\x12K\n" + + "\x0fimagineMetadata\x18\x0e \x01(\v2!.WABotMetadata.BotImagineMetadataR\x0fimagineMetadata\x12H\n" + + "\x0ememoryMetadata\x18\x0f \x01(\v2 .WABotMetadata.BotMemoryMetadataR\x0ememoryMetadata\x12Q\n" + + "\x11renderingMetadata\x18\x10 \x01(\v2#.WABotMetadata.BotRenderingMetadataR\x11renderingMetadata\x12Q\n" + + "\x12botMetricsMetadata\x18\x11 \x01(\v2!.WABotMetadata.BotMetricsMetadataR\x12botMetricsMetadata\x12f\n" + + "\x19botLinkedAccountsMetadata\x18\x12 \x01(\v2(.WABotMetadata.BotLinkedAccountsMetadataR\x19botLinkedAccountsMetadata\x12c\n" + + "\x1brichResponseSourcesMetadata\x18\x13 \x01(\v2!.WABotMetadata.BotSourcesMetadataR\x1brichResponseSourcesMetadata\x124\n" + + "\x15aiConversationContext\x18\x14 \x01(\fR\x15aiConversationContext\x12l\n" + + "\x1bbotPromotionMessageMetadata\x18\x15 \x01(\v2*.WABotMetadata.BotPromotionMessageMetadataR\x1bbotPromotionMessageMetadata\x12c\n" + + "\x18botModeSelectionMetadata\x18\x16 \x01(\v2'.WABotMetadata.BotModeSelectionMetadataR\x18botModeSelectionMetadata\x12K\n" + + "\x10botQuotaMetadata\x18\x17 \x01(\v2\x1f.WABotMetadata.BotQuotaMetadataR\x10botQuotaMetadata\x12c\n" + + "\x18botAgeCollectionMetadata\x18\x18 \x01(\v2'.WABotMetadata.BotAgeCollectionMetadataR\x18botAgeCollectionMetadata\x12@\n" + + "\x1bconversationStarterPromptID\x18\x19 \x01(\tR\x1bconversationStarterPromptID\x12$\n" + + "\rbotResponseID\x18\x1a \x01(\tR\rbotResponseID\x12c\n" + + "\x14verificationMetadata\x18\x1b \x01(\v2/.WABotMetadata.BotSignatureVerificationMetadataR\x14verificationMetadata\x12c\n" + + "\x17unifiedResponseMutation\x18\x1c \x01(\v2).WABotMetadata.BotUnifiedResponseMutationR\x17unifiedResponseMutation\x12c\n" + + "\x18botMessageOriginMetadata\x18\x1d \x01(\v2'.WABotMetadata.BotMessageOriginMetadataR\x18botMessageOriginMetadata\x12]\n" + + "\x16inThreadSurveyMetadata\x18\x1e \x01(\v2%.WABotMetadata.InThreadSurveyMetadataR\x16inThreadSurveyMetadata\x12A\n" + + "\rbotThreadInfo\x18\x1f \x01(\v2\x1b.WABotMetadata.AIThreadInfoR\rbotThreadInfo\x12+\n" + + "\x10internalMetadata\x18\xe7\a \x01(\fR\x10internalMetadata*\xc5\x06\n" + + "\x14BotMetricsEntryPoint\x12\v\n" + + "\aFAVICON\x10\x01\x12\f\n" + + "\bCHATLIST\x10\x02\x12#\n" + + "\x1fAISEARCH_NULL_STATE_PAPER_PLANE\x10\x03\x12\"\n" + + "\x1eAISEARCH_NULL_STATE_SUGGESTION\x10\x04\x12\"\n" + + "\x1eAISEARCH_TYPE_AHEAD_SUGGESTION\x10\x05\x12#\n" + + "\x1fAISEARCH_TYPE_AHEAD_PAPER_PLANE\x10\x06\x12'\n" + + "#AISEARCH_TYPE_AHEAD_RESULT_CHATLIST\x10\a\x12'\n" + + "#AISEARCH_TYPE_AHEAD_RESULT_MESSAGES\x10\b\x12\x16\n" + + "\x12AIVOICE_SEARCH_BAR\x10\t\x12\x13\n" + + "\x0fAIVOICE_FAVICON\x10\n" + + "\x12\f\n" + + "\bAISTUDIO\x10\v\x12\f\n" + + "\bDEEPLINK\x10\f\x12\x10\n" + + "\fNOTIFICATION\x10\r\x12\x1a\n" + + "\x16PROFILE_MESSAGE_BUTTON\x10\x0e\x12\v\n" + + "\aFORWARD\x10\x0f\x12\x10\n" + + "\fAPP_SHORTCUT\x10\x10\x12\r\n" + + "\tFF_FAMILY\x10\x11\x12\n" + + "\n" + + "\x06AI_TAB\x10\x12\x12\v\n" + + "\aAI_HOME\x10\x13\x12\x19\n" + + "\x15AI_DEEPLINK_IMMERSIVE\x10\x14\x12\x0f\n" + + "\vAI_DEEPLINK\x10\x15\x12#\n" + + "\x1fMETA_AI_CHAT_SHORTCUT_AI_STUDIO\x10\x16\x12\x1f\n" + + "\x1bUGC_CHAT_SHORTCUT_AI_STUDIO\x10\x17\x12\x16\n" + + "\x12NEW_CHAT_AI_STUDIO\x10\x18\x12 \n" + + "\x1cAIVOICE_FAVICON_CALL_HISTORY\x10\x19\x12\x1c\n" + + "\x18ASK_META_AI_CONTEXT_MENU\x10\x1a\x12!\n" + + "\x1dASK_META_AI_CONTEXT_MENU_1ON1\x10\x1b\x12\"\n" + + "\x1eASK_META_AI_CONTEXT_MENU_GROUP\x10\x1c\x12\x17\n" + + "\x13INVOKE_META_AI_1ON1\x10\x1d\x12\x18\n" + + "\x14INVOKE_META_AI_GROUP\x10\x1e\x12\x13\n" + + "\x0fMETA_AI_FORWARD\x10\x1f\x12\x17\n" + + "\x13NEW_CHAT_AI_CONTACT\x10 *\xa2\x01\n" + + "\x1aBotMetricsThreadEntryPoint\x12\x11\n" + + "\rAI_TAB_THREAD\x10\x01\x12\x12\n" + + "\x0eAI_HOME_THREAD\x10\x02\x12 \n" + + "\x1cAI_DEEPLINK_IMMERSIVE_THREAD\x10\x03\x12\x16\n" + + "\x12AI_DEEPLINK_THREAD\x10\x04\x12#\n" + + "\x1fASK_META_AI_CONTEXT_MENU_THREAD\x10\x05*}\n" + + "\x10BotSessionSource\x12\b\n" + + "\x04NONE\x10\x00\x12\x0e\n" + + "\n" + + "NULL_STATE\x10\x01\x12\r\n" + + "\tTYPEAHEAD\x10\x02\x12\x0e\n" + + "\n" + + "USER_INPUT\x10\x03\x12\r\n" + + "\tEMU_FLASH\x10\x04\x12\x16\n" + + "\x12EMU_FLASH_FOLLOWUP\x10\x05\x12\t\n" + + "\x05VOICE\x10\x06B)Z'go.mau.fi/whatsmeow/proto/waBotMetadata" + +var ( + file_waBotMetadata_WABotMetadata_proto_rawDescOnce sync.Once + file_waBotMetadata_WABotMetadata_proto_rawDescData []byte +) + +func file_waBotMetadata_WABotMetadata_proto_rawDescGZIP() []byte { + file_waBotMetadata_WABotMetadata_proto_rawDescOnce.Do(func() { + file_waBotMetadata_WABotMetadata_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_waBotMetadata_WABotMetadata_proto_rawDesc), len(file_waBotMetadata_WABotMetadata_proto_rawDesc))) + }) + return file_waBotMetadata_WABotMetadata_proto_rawDescData +} + +var file_waBotMetadata_WABotMetadata_proto_enumTypes = make([]protoimpl.EnumInfo, 23) +var file_waBotMetadata_WABotMetadata_proto_msgTypes = make([]protoimpl.MessageInfo, 46) +var file_waBotMetadata_WABotMetadata_proto_goTypes = []any{ + (BotMetricsEntryPoint)(0), // 0: WABotMetadata.BotMetricsEntryPoint + (BotMetricsThreadEntryPoint)(0), // 1: WABotMetadata.BotMetricsThreadEntryPoint + (BotSessionSource)(0), // 2: WABotMetadata.BotSessionSource + (BotPluginMetadata_PluginType)(0), // 3: WABotMetadata.BotPluginMetadata.PluginType + (BotPluginMetadata_SearchProvider)(0), // 4: WABotMetadata.BotPluginMetadata.SearchProvider + (BotLinkedAccount_BotLinkedAccountType)(0), // 5: WABotMetadata.BotLinkedAccount.BotLinkedAccountType + (BotSignatureVerificationUseCaseProof_BotSignatureUseCase)(0), // 6: WABotMetadata.BotSignatureVerificationUseCaseProof.BotSignatureUseCase + (BotPromotionMessageMetadata_BotPromotionType)(0), // 7: WABotMetadata.BotPromotionMessageMetadata.BotPromotionType + (BotMediaMetadata_OrientationType)(0), // 8: WABotMetadata.BotMediaMetadata.OrientationType + (BotReminderMetadata_ReminderFrequency)(0), // 9: WABotMetadata.BotReminderMetadata.ReminderFrequency + (BotReminderMetadata_ReminderAction)(0), // 10: WABotMetadata.BotReminderMetadata.ReminderAction + (BotModelMetadata_PremiumModelStatus)(0), // 11: WABotMetadata.BotModelMetadata.PremiumModelStatus + (BotModelMetadata_ModelType)(0), // 12: WABotMetadata.BotModelMetadata.ModelType + (BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotSearchSourceProvider)(0), // 13: WABotMetadata.BotProgressIndicatorMetadata.BotPlanningStepMetadata.BotSearchSourceProvider + (BotProgressIndicatorMetadata_BotPlanningStepMetadata_PlanningStepStatus)(0), // 14: WABotMetadata.BotProgressIndicatorMetadata.BotPlanningStepMetadata.PlanningStepStatus + (BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningSearchSourcesMetadata_BotPlanningSearchSourceProvider)(0), // 15: WABotMetadata.BotProgressIndicatorMetadata.BotPlanningStepMetadata.BotPlanningSearchSourcesMetadata.BotPlanningSearchSourceProvider + (BotCapabilityMetadata_BotCapabilityType)(0), // 16: WABotMetadata.BotCapabilityMetadata.BotCapabilityType + (BotModeSelectionMetadata_BotUserSelectionMode)(0), // 17: WABotMetadata.BotModeSelectionMetadata.BotUserSelectionMode + (BotQuotaMetadata_BotFeatureQuotaMetadata_BotFeatureType)(0), // 18: WABotMetadata.BotQuotaMetadata.BotFeatureQuotaMetadata.BotFeatureType + (BotImagineMetadata_ImagineType)(0), // 19: WABotMetadata.BotImagineMetadata.ImagineType + (BotSourcesMetadata_BotSourceItem_SourceProvider)(0), // 20: WABotMetadata.BotSourcesMetadata.BotSourceItem.SourceProvider + (BotMessageOrigin_BotMessageOriginType)(0), // 21: WABotMetadata.BotMessageOrigin.BotMessageOriginType + (AIThreadInfo_AIThreadClientInfo_AIThreadType)(0), // 22: WABotMetadata.AIThreadInfo.AIThreadClientInfo.AIThreadType + (*BotPluginMetadata)(nil), // 23: WABotMetadata.BotPluginMetadata + (*BotLinkedAccount)(nil), // 24: WABotMetadata.BotLinkedAccount + (*BotSignatureVerificationUseCaseProof)(nil), // 25: WABotMetadata.BotSignatureVerificationUseCaseProof + (*BotPromotionMessageMetadata)(nil), // 26: WABotMetadata.BotPromotionMessageMetadata + (*BotMediaMetadata)(nil), // 27: WABotMetadata.BotMediaMetadata + (*BotReminderMetadata)(nil), // 28: WABotMetadata.BotReminderMetadata + (*BotModelMetadata)(nil), // 29: WABotMetadata.BotModelMetadata + (*BotProgressIndicatorMetadata)(nil), // 30: WABotMetadata.BotProgressIndicatorMetadata + (*BotCapabilityMetadata)(nil), // 31: WABotMetadata.BotCapabilityMetadata + (*BotModeSelectionMetadata)(nil), // 32: WABotMetadata.BotModeSelectionMetadata + (*BotQuotaMetadata)(nil), // 33: WABotMetadata.BotQuotaMetadata + (*BotImagineMetadata)(nil), // 34: WABotMetadata.BotImagineMetadata + (*BotSourcesMetadata)(nil), // 35: WABotMetadata.BotSourcesMetadata + (*BotMessageOrigin)(nil), // 36: WABotMetadata.BotMessageOrigin + (*AIThreadInfo)(nil), // 37: WABotMetadata.AIThreadInfo + (*BotAvatarMetadata)(nil), // 38: WABotMetadata.BotAvatarMetadata + (*BotSuggestedPromptMetadata)(nil), // 39: WABotMetadata.BotSuggestedPromptMetadata + (*BotPromptSuggestions)(nil), // 40: WABotMetadata.BotPromptSuggestions + (*BotPromptSuggestion)(nil), // 41: WABotMetadata.BotPromptSuggestion + (*BotLinkedAccountsMetadata)(nil), // 42: WABotMetadata.BotLinkedAccountsMetadata + (*BotMemoryMetadata)(nil), // 43: WABotMetadata.BotMemoryMetadata + (*BotMemoryFact)(nil), // 44: WABotMetadata.BotMemoryFact + (*BotSignatureVerificationMetadata)(nil), // 45: WABotMetadata.BotSignatureVerificationMetadata + (*BotRenderingMetadata)(nil), // 46: WABotMetadata.BotRenderingMetadata + (*BotMetricsMetadata)(nil), // 47: WABotMetadata.BotMetricsMetadata + (*BotSessionMetadata)(nil), // 48: WABotMetadata.BotSessionMetadata + (*BotMemuMetadata)(nil), // 49: WABotMetadata.BotMemuMetadata + (*BotAgeCollectionMetadata)(nil), // 50: WABotMetadata.BotAgeCollectionMetadata + (*InThreadSurveyMetadata)(nil), // 51: WABotMetadata.InThreadSurveyMetadata + (*BotMessageOriginMetadata)(nil), // 52: WABotMetadata.BotMessageOriginMetadata + (*BotUnifiedResponseMutation)(nil), // 53: WABotMetadata.BotUnifiedResponseMutation + (*BotMetadata)(nil), // 54: WABotMetadata.BotMetadata + (*BotProgressIndicatorMetadata_BotPlanningStepMetadata)(nil), // 55: WABotMetadata.BotProgressIndicatorMetadata.BotPlanningStepMetadata + (*BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningSearchSourcesMetadata)(nil), // 56: WABotMetadata.BotProgressIndicatorMetadata.BotPlanningStepMetadata.BotPlanningSearchSourcesMetadata + (*BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningStepSectionMetadata)(nil), // 57: WABotMetadata.BotProgressIndicatorMetadata.BotPlanningStepMetadata.BotPlanningStepSectionMetadata + (*BotProgressIndicatorMetadata_BotPlanningStepMetadata_BotPlanningSearchSourceMetadata)(nil), // 58: WABotMetadata.BotProgressIndicatorMetadata.BotPlanningStepMetadata.BotPlanningSearchSourceMetadata + (*BotQuotaMetadata_BotFeatureQuotaMetadata)(nil), // 59: WABotMetadata.BotQuotaMetadata.BotFeatureQuotaMetadata + (*BotSourcesMetadata_BotSourceItem)(nil), // 60: WABotMetadata.BotSourcesMetadata.BotSourceItem + (*AIThreadInfo_AIThreadClientInfo)(nil), // 61: WABotMetadata.AIThreadInfo.AIThreadClientInfo + (*AIThreadInfo_AIThreadServerInfo)(nil), // 62: WABotMetadata.AIThreadInfo.AIThreadServerInfo + (*BotRenderingMetadata_Keyword)(nil), // 63: WABotMetadata.BotRenderingMetadata.Keyword + (*InThreadSurveyMetadata_InThreadSurveyPrivacyStatementPart)(nil), // 64: WABotMetadata.InThreadSurveyMetadata.InThreadSurveyPrivacyStatementPart + (*InThreadSurveyMetadata_InThreadSurveyOption)(nil), // 65: WABotMetadata.InThreadSurveyMetadata.InThreadSurveyOption + (*InThreadSurveyMetadata_InThreadSurveyQuestion)(nil), // 66: WABotMetadata.InThreadSurveyMetadata.InThreadSurveyQuestion + (*BotUnifiedResponseMutation_MediaDetailsMetadata)(nil), // 67: WABotMetadata.BotUnifiedResponseMutation.MediaDetailsMetadata + (*BotUnifiedResponseMutation_SideBySideMetadata)(nil), // 68: WABotMetadata.BotUnifiedResponseMutation.SideBySideMetadata + (*waCommon.MessageKey)(nil), // 69: WACommon.MessageKey +} +var file_waBotMetadata_WABotMetadata_proto_depIdxs = []int32{ + 4, // 0: WABotMetadata.BotPluginMetadata.provider:type_name -> WABotMetadata.BotPluginMetadata.SearchProvider + 3, // 1: WABotMetadata.BotPluginMetadata.pluginType:type_name -> WABotMetadata.BotPluginMetadata.PluginType + 69, // 2: WABotMetadata.BotPluginMetadata.parentPluginMessageKey:type_name -> WACommon.MessageKey + 3, // 3: WABotMetadata.BotPluginMetadata.deprecatedField:type_name -> WABotMetadata.BotPluginMetadata.PluginType + 3, // 4: WABotMetadata.BotPluginMetadata.parentPluginType:type_name -> WABotMetadata.BotPluginMetadata.PluginType + 5, // 5: WABotMetadata.BotLinkedAccount.type:type_name -> WABotMetadata.BotLinkedAccount.BotLinkedAccountType + 6, // 6: WABotMetadata.BotSignatureVerificationUseCaseProof.useCase:type_name -> WABotMetadata.BotSignatureVerificationUseCaseProof.BotSignatureUseCase + 7, // 7: WABotMetadata.BotPromotionMessageMetadata.promotionType:type_name -> WABotMetadata.BotPromotionMessageMetadata.BotPromotionType + 8, // 8: WABotMetadata.BotMediaMetadata.orientationType:type_name -> WABotMetadata.BotMediaMetadata.OrientationType + 69, // 9: WABotMetadata.BotReminderMetadata.requestMessageKey:type_name -> WACommon.MessageKey + 10, // 10: WABotMetadata.BotReminderMetadata.action:type_name -> WABotMetadata.BotReminderMetadata.ReminderAction + 9, // 11: WABotMetadata.BotReminderMetadata.frequency:type_name -> WABotMetadata.BotReminderMetadata.ReminderFrequency + 12, // 12: WABotMetadata.BotModelMetadata.modelType:type_name -> WABotMetadata.BotModelMetadata.ModelType + 11, // 13: WABotMetadata.BotModelMetadata.premiumModelStatus:type_name -> WABotMetadata.BotModelMetadata.PremiumModelStatus + 55, // 14: WABotMetadata.BotProgressIndicatorMetadata.stepsMetadata:type_name -> WABotMetadata.BotProgressIndicatorMetadata.BotPlanningStepMetadata + 16, // 15: WABotMetadata.BotCapabilityMetadata.capabilities:type_name -> WABotMetadata.BotCapabilityMetadata.BotCapabilityType + 17, // 16: WABotMetadata.BotModeSelectionMetadata.mode:type_name -> WABotMetadata.BotModeSelectionMetadata.BotUserSelectionMode + 59, // 17: WABotMetadata.BotQuotaMetadata.botFeatureQuotaMetadata:type_name -> WABotMetadata.BotQuotaMetadata.BotFeatureQuotaMetadata + 19, // 18: WABotMetadata.BotImagineMetadata.imagineType:type_name -> WABotMetadata.BotImagineMetadata.ImagineType + 60, // 19: WABotMetadata.BotSourcesMetadata.sources:type_name -> WABotMetadata.BotSourcesMetadata.BotSourceItem + 21, // 20: WABotMetadata.BotMessageOrigin.type:type_name -> WABotMetadata.BotMessageOrigin.BotMessageOriginType + 62, // 21: WABotMetadata.AIThreadInfo.serverInfo:type_name -> WABotMetadata.AIThreadInfo.AIThreadServerInfo + 61, // 22: WABotMetadata.AIThreadInfo.clientInfo:type_name -> WABotMetadata.AIThreadInfo.AIThreadClientInfo + 40, // 23: WABotMetadata.BotSuggestedPromptMetadata.promptSuggestions:type_name -> WABotMetadata.BotPromptSuggestions + 41, // 24: WABotMetadata.BotPromptSuggestions.suggestions:type_name -> WABotMetadata.BotPromptSuggestion + 24, // 25: WABotMetadata.BotLinkedAccountsMetadata.accounts:type_name -> WABotMetadata.BotLinkedAccount + 44, // 26: WABotMetadata.BotMemoryMetadata.addedFacts:type_name -> WABotMetadata.BotMemoryFact + 44, // 27: WABotMetadata.BotMemoryMetadata.removedFacts:type_name -> WABotMetadata.BotMemoryFact + 25, // 28: WABotMetadata.BotSignatureVerificationMetadata.proofs:type_name -> WABotMetadata.BotSignatureVerificationUseCaseProof + 63, // 29: WABotMetadata.BotRenderingMetadata.keywords:type_name -> WABotMetadata.BotRenderingMetadata.Keyword + 0, // 30: WABotMetadata.BotMetricsMetadata.destinationEntryPoint:type_name -> WABotMetadata.BotMetricsEntryPoint + 1, // 31: WABotMetadata.BotMetricsMetadata.threadOrigin:type_name -> WABotMetadata.BotMetricsThreadEntryPoint + 2, // 32: WABotMetadata.BotSessionMetadata.sessionSource:type_name -> WABotMetadata.BotSessionSource + 27, // 33: WABotMetadata.BotMemuMetadata.faceImages:type_name -> WABotMetadata.BotMediaMetadata + 66, // 34: WABotMetadata.InThreadSurveyMetadata.questions:type_name -> WABotMetadata.InThreadSurveyMetadata.InThreadSurveyQuestion + 64, // 35: WABotMetadata.InThreadSurveyMetadata.privacyStatementParts:type_name -> WABotMetadata.InThreadSurveyMetadata.InThreadSurveyPrivacyStatementPart + 36, // 36: WABotMetadata.BotMessageOriginMetadata.origins:type_name -> WABotMetadata.BotMessageOrigin + 68, // 37: WABotMetadata.BotUnifiedResponseMutation.sbsMetadata:type_name -> WABotMetadata.BotUnifiedResponseMutation.SideBySideMetadata + 67, // 38: WABotMetadata.BotUnifiedResponseMutation.mediaDetailsMetadataList:type_name -> WABotMetadata.BotUnifiedResponseMutation.MediaDetailsMetadata + 38, // 39: WABotMetadata.BotMetadata.avatarMetadata:type_name -> WABotMetadata.BotAvatarMetadata + 23, // 40: WABotMetadata.BotMetadata.pluginMetadata:type_name -> WABotMetadata.BotPluginMetadata + 39, // 41: WABotMetadata.BotMetadata.suggestedPromptMetadata:type_name -> WABotMetadata.BotSuggestedPromptMetadata + 48, // 42: WABotMetadata.BotMetadata.sessionMetadata:type_name -> WABotMetadata.BotSessionMetadata + 49, // 43: WABotMetadata.BotMetadata.memuMetadata:type_name -> WABotMetadata.BotMemuMetadata + 28, // 44: WABotMetadata.BotMetadata.reminderMetadata:type_name -> WABotMetadata.BotReminderMetadata + 29, // 45: WABotMetadata.BotMetadata.modelMetadata:type_name -> WABotMetadata.BotModelMetadata + 30, // 46: WABotMetadata.BotMetadata.progressIndicatorMetadata:type_name -> WABotMetadata.BotProgressIndicatorMetadata + 31, // 47: WABotMetadata.BotMetadata.capabilityMetadata:type_name -> WABotMetadata.BotCapabilityMetadata + 34, // 48: WABotMetadata.BotMetadata.imagineMetadata:type_name -> WABotMetadata.BotImagineMetadata + 43, // 49: WABotMetadata.BotMetadata.memoryMetadata:type_name -> WABotMetadata.BotMemoryMetadata + 46, // 50: WABotMetadata.BotMetadata.renderingMetadata:type_name -> WABotMetadata.BotRenderingMetadata + 47, // 51: WABotMetadata.BotMetadata.botMetricsMetadata:type_name -> WABotMetadata.BotMetricsMetadata + 42, // 52: WABotMetadata.BotMetadata.botLinkedAccountsMetadata:type_name -> WABotMetadata.BotLinkedAccountsMetadata + 35, // 53: WABotMetadata.BotMetadata.richResponseSourcesMetadata:type_name -> WABotMetadata.BotSourcesMetadata + 26, // 54: WABotMetadata.BotMetadata.botPromotionMessageMetadata:type_name -> WABotMetadata.BotPromotionMessageMetadata + 32, // 55: WABotMetadata.BotMetadata.botModeSelectionMetadata:type_name -> WABotMetadata.BotModeSelectionMetadata + 33, // 56: WABotMetadata.BotMetadata.botQuotaMetadata:type_name -> WABotMetadata.BotQuotaMetadata + 50, // 57: WABotMetadata.BotMetadata.botAgeCollectionMetadata:type_name -> WABotMetadata.BotAgeCollectionMetadata + 45, // 58: WABotMetadata.BotMetadata.verificationMetadata:type_name -> WABotMetadata.BotSignatureVerificationMetadata + 53, // 59: WABotMetadata.BotMetadata.unifiedResponseMutation:type_name -> WABotMetadata.BotUnifiedResponseMutation + 52, // 60: WABotMetadata.BotMetadata.botMessageOriginMetadata:type_name -> WABotMetadata.BotMessageOriginMetadata + 51, // 61: WABotMetadata.BotMetadata.inThreadSurveyMetadata:type_name -> WABotMetadata.InThreadSurveyMetadata + 37, // 62: WABotMetadata.BotMetadata.botThreadInfo:type_name -> WABotMetadata.AIThreadInfo + 56, // 63: WABotMetadata.BotProgressIndicatorMetadata.BotPlanningStepMetadata.sourcesMetadata:type_name -> WABotMetadata.BotProgressIndicatorMetadata.BotPlanningStepMetadata.BotPlanningSearchSourcesMetadata + 14, // 64: WABotMetadata.BotProgressIndicatorMetadata.BotPlanningStepMetadata.status:type_name -> WABotMetadata.BotProgressIndicatorMetadata.BotPlanningStepMetadata.PlanningStepStatus + 57, // 65: WABotMetadata.BotProgressIndicatorMetadata.BotPlanningStepMetadata.sections:type_name -> WABotMetadata.BotProgressIndicatorMetadata.BotPlanningStepMetadata.BotPlanningStepSectionMetadata + 15, // 66: WABotMetadata.BotProgressIndicatorMetadata.BotPlanningStepMetadata.BotPlanningSearchSourcesMetadata.provider:type_name -> WABotMetadata.BotProgressIndicatorMetadata.BotPlanningStepMetadata.BotPlanningSearchSourcesMetadata.BotPlanningSearchSourceProvider + 58, // 67: WABotMetadata.BotProgressIndicatorMetadata.BotPlanningStepMetadata.BotPlanningStepSectionMetadata.sourcesMetadata:type_name -> WABotMetadata.BotProgressIndicatorMetadata.BotPlanningStepMetadata.BotPlanningSearchSourceMetadata + 13, // 68: WABotMetadata.BotProgressIndicatorMetadata.BotPlanningStepMetadata.BotPlanningSearchSourceMetadata.provider:type_name -> WABotMetadata.BotProgressIndicatorMetadata.BotPlanningStepMetadata.BotSearchSourceProvider + 18, // 69: WABotMetadata.BotQuotaMetadata.BotFeatureQuotaMetadata.featureType:type_name -> WABotMetadata.BotQuotaMetadata.BotFeatureQuotaMetadata.BotFeatureType + 20, // 70: WABotMetadata.BotSourcesMetadata.BotSourceItem.provider:type_name -> WABotMetadata.BotSourcesMetadata.BotSourceItem.SourceProvider + 22, // 71: WABotMetadata.AIThreadInfo.AIThreadClientInfo.type:type_name -> WABotMetadata.AIThreadInfo.AIThreadClientInfo.AIThreadType + 65, // 72: WABotMetadata.InThreadSurveyMetadata.InThreadSurveyQuestion.questionOptions:type_name -> WABotMetadata.InThreadSurveyMetadata.InThreadSurveyOption + 27, // 73: WABotMetadata.BotUnifiedResponseMutation.MediaDetailsMetadata.highResMedia:type_name -> WABotMetadata.BotMediaMetadata + 27, // 74: WABotMetadata.BotUnifiedResponseMutation.MediaDetailsMetadata.previewMedia:type_name -> WABotMetadata.BotMediaMetadata + 75, // [75:75] is the sub-list for method output_type + 75, // [75:75] is the sub-list for method input_type + 75, // [75:75] is the sub-list for extension type_name + 75, // [75:75] is the sub-list for extension extendee + 0, // [0:75] is the sub-list for field type_name +} + +func init() { file_waBotMetadata_WABotMetadata_proto_init() } +func file_waBotMetadata_WABotMetadata_proto_init() { + if File_waBotMetadata_WABotMetadata_proto != nil { + return + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: unsafe.Slice(unsafe.StringData(file_waBotMetadata_WABotMetadata_proto_rawDesc), len(file_waBotMetadata_WABotMetadata_proto_rawDesc)), + NumEnums: 23, + NumMessages: 46, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_waBotMetadata_WABotMetadata_proto_goTypes, + DependencyIndexes: file_waBotMetadata_WABotMetadata_proto_depIdxs, + EnumInfos: file_waBotMetadata_WABotMetadata_proto_enumTypes, + MessageInfos: file_waBotMetadata_WABotMetadata_proto_msgTypes, + }.Build() + File_waBotMetadata_WABotMetadata_proto = out.File + file_waBotMetadata_WABotMetadata_proto_goTypes = nil + file_waBotMetadata_WABotMetadata_proto_depIdxs = nil +} diff --git a/vendor/go.mau.fi/whatsmeow/proto/waBotMetadata/WABotMetadata.proto b/vendor/go.mau.fi/whatsmeow/proto/waBotMetadata/WABotMetadata.proto new file mode 100644 index 0000000000..0111b38a9f --- /dev/null +++ b/vendor/go.mau.fi/whatsmeow/proto/waBotMetadata/WABotMetadata.proto @@ -0,0 +1,527 @@ +syntax = "proto2"; +package WABotMetadata; +option go_package = "go.mau.fi/whatsmeow/proto/waBotMetadata"; + +import "waCommon/WACommon.proto"; + +enum BotMetricsEntryPoint { + FAVICON = 1; + CHATLIST = 2; + AISEARCH_NULL_STATE_PAPER_PLANE = 3; + AISEARCH_NULL_STATE_SUGGESTION = 4; + AISEARCH_TYPE_AHEAD_SUGGESTION = 5; + AISEARCH_TYPE_AHEAD_PAPER_PLANE = 6; + AISEARCH_TYPE_AHEAD_RESULT_CHATLIST = 7; + AISEARCH_TYPE_AHEAD_RESULT_MESSAGES = 8; + AIVOICE_SEARCH_BAR = 9; + AIVOICE_FAVICON = 10; + AISTUDIO = 11; + DEEPLINK = 12; + NOTIFICATION = 13; + PROFILE_MESSAGE_BUTTON = 14; + FORWARD = 15; + APP_SHORTCUT = 16; + FF_FAMILY = 17; + AI_TAB = 18; + AI_HOME = 19; + AI_DEEPLINK_IMMERSIVE = 20; + AI_DEEPLINK = 21; + META_AI_CHAT_SHORTCUT_AI_STUDIO = 22; + UGC_CHAT_SHORTCUT_AI_STUDIO = 23; + NEW_CHAT_AI_STUDIO = 24; + AIVOICE_FAVICON_CALL_HISTORY = 25; + ASK_META_AI_CONTEXT_MENU = 26; + ASK_META_AI_CONTEXT_MENU_1ON1 = 27; + ASK_META_AI_CONTEXT_MENU_GROUP = 28; + INVOKE_META_AI_1ON1 = 29; + INVOKE_META_AI_GROUP = 30; + META_AI_FORWARD = 31; + NEW_CHAT_AI_CONTACT = 32; +} + +enum BotMetricsThreadEntryPoint { + AI_TAB_THREAD = 1; + AI_HOME_THREAD = 2; + AI_DEEPLINK_IMMERSIVE_THREAD = 3; + AI_DEEPLINK_THREAD = 4; + ASK_META_AI_CONTEXT_MENU_THREAD = 5; +} + +enum BotSessionSource { + NONE = 0; + NULL_STATE = 1; + TYPEAHEAD = 2; + USER_INPUT = 3; + EMU_FLASH = 4; + EMU_FLASH_FOLLOWUP = 5; + VOICE = 6; +} + +message BotPluginMetadata { + enum PluginType { + UNKNOWN_PLUGIN = 0; + REELS = 1; + SEARCH = 2; + } + + enum SearchProvider { + UNKNOWN = 0; + BING = 1; + GOOGLE = 2; + SUPPORT = 3; + } + + optional SearchProvider provider = 1; + optional PluginType pluginType = 2; + optional string thumbnailCDNURL = 3; + optional string profilePhotoCDNURL = 4; + optional string searchProviderURL = 5; + optional uint32 referenceIndex = 6; + optional uint32 expectedLinksCount = 7; + optional string searchQuery = 9; + optional WACommon.MessageKey parentPluginMessageKey = 10; + optional PluginType deprecatedField = 11; + optional PluginType parentPluginType = 12; + optional string faviconCDNURL = 13; +} + +message BotLinkedAccount { + enum BotLinkedAccountType { + BOT_LINKED_ACCOUNT_TYPE_1P = 0; + } + + optional BotLinkedAccountType type = 1; +} + +message BotSignatureVerificationUseCaseProof { + enum BotSignatureUseCase { + WA_BOT_MSG = 0; + } + + optional int32 version = 1; + optional BotSignatureUseCase useCase = 2; + optional bytes signature = 3; + optional bytes certificateChain = 4; +} + +message BotPromotionMessageMetadata { + enum BotPromotionType { + UNKNOWN_TYPE = 0; + C50 = 1; + SURVEY_PLATFORM = 2; + } + + optional BotPromotionType promotionType = 1; + optional string buttonTitle = 2; +} + +message BotMediaMetadata { + enum OrientationType { + CENTER = 1; + LEFT = 2; + RIGHT = 3; + } + + optional string fileSHA256 = 1; + optional string mediaKey = 2; + optional string fileEncSHA256 = 3; + optional string directPath = 4; + optional int64 mediaKeyTimestamp = 5; + optional string mimetype = 6; + optional OrientationType orientationType = 7; +} + +message BotReminderMetadata { + enum ReminderFrequency { + ONCE = 1; + DAILY = 2; + WEEKLY = 3; + BIWEEKLY = 4; + MONTHLY = 5; + } + + enum ReminderAction { + NOTIFY = 1; + CREATE = 2; + DELETE = 3; + UPDATE = 4; + } + + optional WACommon.MessageKey requestMessageKey = 1; + optional ReminderAction action = 2; + optional string name = 3; + optional uint64 nextTriggerTimestamp = 4; + optional ReminderFrequency frequency = 5; +} + +message BotModelMetadata { + enum PremiumModelStatus { + UNKNOWN_STATUS = 0; + AVAILABLE = 1; + QUOTA_EXCEED_LIMIT = 2; + } + + enum ModelType { + UNKNOWN_TYPE = 0; + LLAMA_PROD = 1; + LLAMA_PROD_PREMIUM = 2; + } + + optional ModelType modelType = 1; + optional PremiumModelStatus premiumModelStatus = 2; +} + +message BotProgressIndicatorMetadata { + message BotPlanningStepMetadata { + enum BotSearchSourceProvider { + UNKNOWN_PROVIDER = 0; + OTHER = 1; + GOOGLE = 2; + BING = 3; + } + + enum PlanningStepStatus { + UNKNOWN = 0; + PLANNED = 1; + EXECUTING = 2; + FINISHED = 3; + } + + message BotPlanningSearchSourcesMetadata { + enum BotPlanningSearchSourceProvider { + UNKNOWN = 0; + OTHER = 1; + GOOGLE = 2; + BING = 3; + } + + optional string sourceTitle = 1; + optional BotPlanningSearchSourceProvider provider = 2; + optional string sourceURL = 3; + } + + message BotPlanningStepSectionMetadata { + optional string sectionTitle = 1; + optional string sectionBody = 2; + repeated BotPlanningSearchSourceMetadata sourcesMetadata = 3; + } + + message BotPlanningSearchSourceMetadata { + optional string title = 1; + optional BotSearchSourceProvider provider = 2; + optional string sourceURL = 3; + optional string favIconURL = 4; + } + + optional string statusTitle = 1; + optional string statusBody = 2; + repeated BotPlanningSearchSourcesMetadata sourcesMetadata = 3; + optional PlanningStepStatus status = 4; + optional bool isReasoning = 5; + optional bool isEnhancedSearch = 6; + repeated BotPlanningStepSectionMetadata sections = 7; + } + + optional string progressDescription = 1; + repeated BotPlanningStepMetadata stepsMetadata = 2; +} + +message BotCapabilityMetadata { + enum BotCapabilityType { + UNKNOWN = 0; + PROGRESS_INDICATOR = 1; + RICH_RESPONSE_HEADING = 2; + RICH_RESPONSE_NESTED_LIST = 3; + AI_MEMORY = 4; + RICH_RESPONSE_THREAD_SURFING = 5; + RICH_RESPONSE_TABLE = 6; + RICH_RESPONSE_CODE = 7; + RICH_RESPONSE_STRUCTURED_RESPONSE = 8; + RICH_RESPONSE_INLINE_IMAGE = 9; + WA_IG_1P_PLUGIN_RANKING_CONTROL = 10; + WA_IG_1P_PLUGIN_RANKING_UPDATE_1 = 11; + WA_IG_1P_PLUGIN_RANKING_UPDATE_2 = 12; + WA_IG_1P_PLUGIN_RANKING_UPDATE_3 = 13; + WA_IG_1P_PLUGIN_RANKING_UPDATE_4 = 14; + WA_IG_1P_PLUGIN_RANKING_UPDATE_5 = 15; + WA_IG_1P_PLUGIN_RANKING_UPDATE_6 = 16; + WA_IG_1P_PLUGIN_RANKING_UPDATE_7 = 17; + WA_IG_1P_PLUGIN_RANKING_UPDATE_8 = 18; + WA_IG_1P_PLUGIN_RANKING_UPDATE_9 = 19; + WA_IG_1P_PLUGIN_RANKING_UPDATE_10 = 20; + RICH_RESPONSE_SUB_HEADING = 21; + RICH_RESPONSE_GRID_IMAGE = 22; + AI_STUDIO_UGC_MEMORY = 23; + RICH_RESPONSE_LATEX = 24; + RICH_RESPONSE_MAPS = 25; + RICH_RESPONSE_INLINE_REELS = 26; + AGENTIC_PLANNING = 27; + ACCOUNT_LINKING = 28; + STREAMING_DISAGGREGATION = 29; + RICH_RESPONSE_GRID_IMAGE_3P = 30; + RICH_RESPONSE_LATEX_INLINE = 31; + QUERY_PLAN = 32; + PROACTIVE_MESSAGE = 33; + RICH_RESPONSE_UNIFIED_RESPONSE = 34; + PROMOTION_MESSAGE = 35; + SIMPLIFIED_PROFILE_PAGE = 36; + RICH_RESPONSE_SOURCES_IN_MESSAGE = 37; + RICH_RESPONSE_SIDE_BY_SIDE_SURVEY = 38; + RICH_RESPONSE_UNIFIED_TEXT_COMPONENT = 39; + AI_SHARED_MEMORY = 40; + RICH_RESPONSE_UNIFIED_SOURCES = 41; + RICH_RESPONSE_UNIFIED_DOMAIN_CITATIONS = 42; + } + + repeated BotCapabilityType capabilities = 1; +} + +message BotModeSelectionMetadata { + enum BotUserSelectionMode { + UNKNOWN_MODE = 0; + REASONING_MODE = 1; + } + + repeated BotUserSelectionMode mode = 1; +} + +message BotQuotaMetadata { + message BotFeatureQuotaMetadata { + enum BotFeatureType { + UNKNOWN_FEATURE = 0; + REASONING_FEATURE = 1; + } + + optional BotFeatureType featureType = 1; + optional uint32 remainingQuota = 2; + optional uint64 expirationTimestamp = 3; + } + + repeated BotFeatureQuotaMetadata botFeatureQuotaMetadata = 1; +} + +message BotImagineMetadata { + enum ImagineType { + UNKNOWN = 0; + IMAGINE = 1; + MEMU = 2; + FLASH = 3; + EDIT = 4; + } + + optional ImagineType imagineType = 1; +} + +message BotSourcesMetadata { + message BotSourceItem { + enum SourceProvider { + UNKNOWN = 0; + BING = 1; + GOOGLE = 2; + SUPPORT = 3; + OTHER = 4; + } + + optional SourceProvider provider = 1; + optional string thumbnailCDNURL = 2; + optional string sourceProviderURL = 3; + optional string sourceQuery = 4; + optional string faviconCDNURL = 5; + optional uint32 citationNumber = 6; + optional string sourceTitle = 7; + } + + repeated BotSourceItem sources = 1; +} + +message BotMessageOrigin { + enum BotMessageOriginType { + BOT_MESSAGE_ORIGIN_TYPE_AI_INITIATED = 0; + } + + optional BotMessageOriginType type = 1; +} + +message AIThreadInfo { + message AIThreadClientInfo { + enum AIThreadType { + UNKNOWN = 0; + DEFAULT = 1; + INCOGNITO = 2; + } + + optional AIThreadType type = 1; + } + + message AIThreadServerInfo { + optional string title = 1; + } + + optional AIThreadServerInfo serverInfo = 1; + optional AIThreadClientInfo clientInfo = 2; +} + +message BotAvatarMetadata { + optional uint32 sentiment = 1; + optional string behaviorGraph = 2; + optional uint32 action = 3; + optional uint32 intensity = 4; + optional uint32 wordCount = 5; +} + +message BotSuggestedPromptMetadata { + repeated string suggestedPrompts = 1; + optional uint32 selectedPromptIndex = 2; + optional BotPromptSuggestions promptSuggestions = 3; + optional string selectedPromptID = 4; +} + +message BotPromptSuggestions { + repeated BotPromptSuggestion suggestions = 1; +} + +message BotPromptSuggestion { + optional string prompt = 1; + optional string promptID = 2; +} + +message BotLinkedAccountsMetadata { + repeated BotLinkedAccount accounts = 1; + optional bytes acAuthTokens = 2; + optional int32 acErrorCode = 3; +} + +message BotMemoryMetadata { + repeated BotMemoryFact addedFacts = 1; + repeated BotMemoryFact removedFacts = 2; + optional string disclaimer = 3; +} + +message BotMemoryFact { + optional string fact = 1; + optional string factID = 2; +} + +message BotSignatureVerificationMetadata { + repeated BotSignatureVerificationUseCaseProof proofs = 1; +} + +message BotRenderingMetadata { + message Keyword { + optional string value = 1; + repeated string associatedPrompts = 2; + } + + repeated Keyword keywords = 1; +} + +message BotMetricsMetadata { + optional string destinationID = 1; + optional BotMetricsEntryPoint destinationEntryPoint = 2; + optional BotMetricsThreadEntryPoint threadOrigin = 3; +} + +message BotSessionMetadata { + optional string sessionID = 1; + optional BotSessionSource sessionSource = 2; +} + +message BotMemuMetadata { + repeated BotMediaMetadata faceImages = 1; +} + +message BotAgeCollectionMetadata { + optional bool ageCollectionEligible = 1; + optional bool shouldTriggerAgeCollectionOnClient = 2; +} + +message InThreadSurveyMetadata { + message InThreadSurveyPrivacyStatementPart { + optional string text = 1; + optional string URL = 2; + } + + message InThreadSurveyOption { + optional string stringValue = 1; + optional uint32 numericValue = 2; + optional string textTranslated = 3; + } + + message InThreadSurveyQuestion { + optional string questionText = 1; + optional string questionID = 2; + repeated InThreadSurveyOption questionOptions = 3; + } + + optional string tessaSessionID = 1; + optional string simonSessionID = 2; + optional string simonSurveyID = 3; + optional string tessaRootID = 4; + optional string requestID = 5; + optional string tessaEvent = 6; + optional string invitationHeaderText = 7; + optional string invitationBodyText = 8; + optional string invitationCtaText = 9; + optional string invitationCtaURL = 10; + optional string surveyTitle = 11; + repeated InThreadSurveyQuestion questions = 12; + optional string surveyContinueButtonText = 13; + optional string surveySubmitButtonText = 14; + optional string privacyStatementFull = 15; + repeated InThreadSurveyPrivacyStatementPart privacyStatementParts = 16; + optional string feedbackToastText = 17; +} + +message BotMessageOriginMetadata { + repeated BotMessageOrigin origins = 1; +} + +message BotUnifiedResponseMutation { + message MediaDetailsMetadata { + optional string ID = 1; + optional BotMediaMetadata highResMedia = 2; + optional BotMediaMetadata previewMedia = 3; + } + + message SideBySideMetadata { + optional string primaryResponseID = 1; + } + + optional SideBySideMetadata sbsMetadata = 1; + repeated MediaDetailsMetadata mediaDetailsMetadataList = 2; +} + +message BotMetadata { + optional BotAvatarMetadata avatarMetadata = 1; + optional string personaID = 2; + optional BotPluginMetadata pluginMetadata = 3; + optional BotSuggestedPromptMetadata suggestedPromptMetadata = 4; + optional string invokerJID = 5; + optional BotSessionMetadata sessionMetadata = 6; + optional BotMemuMetadata memuMetadata = 7; + optional string timezone = 8; + optional BotReminderMetadata reminderMetadata = 9; + optional BotModelMetadata modelMetadata = 10; + optional string messageDisclaimerText = 11; + optional BotProgressIndicatorMetadata progressIndicatorMetadata = 12; + optional BotCapabilityMetadata capabilityMetadata = 13; + optional BotImagineMetadata imagineMetadata = 14; + optional BotMemoryMetadata memoryMetadata = 15; + optional BotRenderingMetadata renderingMetadata = 16; + optional BotMetricsMetadata botMetricsMetadata = 17; + optional BotLinkedAccountsMetadata botLinkedAccountsMetadata = 18; + optional BotSourcesMetadata richResponseSourcesMetadata = 19; + optional bytes aiConversationContext = 20; + optional BotPromotionMessageMetadata botPromotionMessageMetadata = 21; + optional BotModeSelectionMetadata botModeSelectionMetadata = 22; + optional BotQuotaMetadata botQuotaMetadata = 23; + optional BotAgeCollectionMetadata botAgeCollectionMetadata = 24; + optional string conversationStarterPromptID = 25; + optional string botResponseID = 26; + optional BotSignatureVerificationMetadata verificationMetadata = 27; + optional BotUnifiedResponseMutation unifiedResponseMutation = 28; + optional BotMessageOriginMetadata botMessageOriginMetadata = 29; + optional InThreadSurveyMetadata inThreadSurveyMetadata = 30; + optional AIThreadInfo botThreadInfo = 31; + optional bytes internalMetadata = 999; +} diff --git a/vendor/go.mau.fi/whatsmeow/proto/waCert/WACert.pb.go b/vendor/go.mau.fi/whatsmeow/proto/waCert/WACert.pb.go index c1f15b4174..e8c1200b17 100644 --- a/vendor/go.mau.fi/whatsmeow/proto/waCert/WACert.pb.go +++ b/vendor/go.mau.fi/whatsmeow/proto/waCert/WACert.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 +// protoc-gen-go v1.36.10 // protoc v3.21.12 // source: waCert/WACert.proto @@ -9,11 +9,10 @@ package waCert import ( reflect "reflect" sync "sync" + unsafe "unsafe" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" - - _ "embed" ) const ( @@ -24,21 +23,18 @@ const ( ) type NoiseCertificate struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Details []byte `protobuf:"bytes,1,opt,name=details" json:"details,omitempty"` + Signature []byte `protobuf:"bytes,2,opt,name=signature" json:"signature,omitempty"` unknownFields protoimpl.UnknownFields - - Details []byte `protobuf:"bytes,1,opt,name=details" json:"details,omitempty"` - Signature []byte `protobuf:"bytes,2,opt,name=signature" json:"signature,omitempty"` + sizeCache protoimpl.SizeCache } func (x *NoiseCertificate) Reset() { *x = NoiseCertificate{} - if protoimpl.UnsafeEnabled { - mi := &file_waCert_WACert_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waCert_WACert_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *NoiseCertificate) String() string { @@ -49,7 +45,7 @@ func (*NoiseCertificate) ProtoMessage() {} func (x *NoiseCertificate) ProtoReflect() protoreflect.Message { mi := &file_waCert_WACert_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -79,21 +75,18 @@ func (x *NoiseCertificate) GetSignature() []byte { } type CertChain struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Leaf *CertChain_NoiseCertificate `protobuf:"bytes,1,opt,name=leaf" json:"leaf,omitempty"` + Intermediate *CertChain_NoiseCertificate `protobuf:"bytes,2,opt,name=intermediate" json:"intermediate,omitempty"` unknownFields protoimpl.UnknownFields - - Leaf *CertChain_NoiseCertificate `protobuf:"bytes,1,opt,name=leaf" json:"leaf,omitempty"` - Intermediate *CertChain_NoiseCertificate `protobuf:"bytes,2,opt,name=intermediate" json:"intermediate,omitempty"` + sizeCache protoimpl.SizeCache } func (x *CertChain) Reset() { *x = CertChain{} - if protoimpl.UnsafeEnabled { - mi := &file_waCert_WACert_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waCert_WACert_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *CertChain) String() string { @@ -104,7 +97,7 @@ func (*CertChain) ProtoMessage() {} func (x *CertChain) ProtoReflect() protoreflect.Message { mi := &file_waCert_WACert_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -134,24 +127,21 @@ func (x *CertChain) GetIntermediate() *CertChain_NoiseCertificate { } type NoiseCertificate_Details struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Serial *uint32 `protobuf:"varint,1,opt,name=serial" json:"serial,omitempty"` + Issuer *string `protobuf:"bytes,2,opt,name=issuer" json:"issuer,omitempty"` + Expires *uint64 `protobuf:"varint,3,opt,name=expires" json:"expires,omitempty"` + Subject *string `protobuf:"bytes,4,opt,name=subject" json:"subject,omitempty"` + Key []byte `protobuf:"bytes,5,opt,name=key" json:"key,omitempty"` unknownFields protoimpl.UnknownFields - - Serial *uint32 `protobuf:"varint,1,opt,name=serial" json:"serial,omitempty"` - Issuer *string `protobuf:"bytes,2,opt,name=issuer" json:"issuer,omitempty"` - Expires *uint64 `protobuf:"varint,3,opt,name=expires" json:"expires,omitempty"` - Subject *string `protobuf:"bytes,4,opt,name=subject" json:"subject,omitempty"` - Key []byte `protobuf:"bytes,5,opt,name=key" json:"key,omitempty"` + sizeCache protoimpl.SizeCache } func (x *NoiseCertificate_Details) Reset() { *x = NoiseCertificate_Details{} - if protoimpl.UnsafeEnabled { - mi := &file_waCert_WACert_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waCert_WACert_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *NoiseCertificate_Details) String() string { @@ -162,7 +152,7 @@ func (*NoiseCertificate_Details) ProtoMessage() {} func (x *NoiseCertificate_Details) ProtoReflect() protoreflect.Message { mi := &file_waCert_WACert_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -213,21 +203,18 @@ func (x *NoiseCertificate_Details) GetKey() []byte { } type CertChain_NoiseCertificate struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Details []byte `protobuf:"bytes,1,opt,name=details" json:"details,omitempty"` + Signature []byte `protobuf:"bytes,2,opt,name=signature" json:"signature,omitempty"` unknownFields protoimpl.UnknownFields - - Details []byte `protobuf:"bytes,1,opt,name=details" json:"details,omitempty"` - Signature []byte `protobuf:"bytes,2,opt,name=signature" json:"signature,omitempty"` + sizeCache protoimpl.SizeCache } func (x *CertChain_NoiseCertificate) Reset() { *x = CertChain_NoiseCertificate{} - if protoimpl.UnsafeEnabled { - mi := &file_waCert_WACert_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waCert_WACert_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *CertChain_NoiseCertificate) String() string { @@ -238,7 +225,7 @@ func (*CertChain_NoiseCertificate) ProtoMessage() {} func (x *CertChain_NoiseCertificate) ProtoReflect() protoreflect.Message { mi := &file_waCert_WACert_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -268,24 +255,21 @@ func (x *CertChain_NoiseCertificate) GetSignature() []byte { } type CertChain_NoiseCertificate_Details struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Serial *uint32 `protobuf:"varint,1,opt,name=serial" json:"serial,omitempty"` + IssuerSerial *uint32 `protobuf:"varint,2,opt,name=issuerSerial" json:"issuerSerial,omitempty"` + Key []byte `protobuf:"bytes,3,opt,name=key" json:"key,omitempty"` + NotBefore *uint64 `protobuf:"varint,4,opt,name=notBefore" json:"notBefore,omitempty"` + NotAfter *uint64 `protobuf:"varint,5,opt,name=notAfter" json:"notAfter,omitempty"` unknownFields protoimpl.UnknownFields - - Serial *uint32 `protobuf:"varint,1,opt,name=serial" json:"serial,omitempty"` - IssuerSerial *uint32 `protobuf:"varint,2,opt,name=issuerSerial" json:"issuerSerial,omitempty"` - Key []byte `protobuf:"bytes,3,opt,name=key" json:"key,omitempty"` - NotBefore *uint64 `protobuf:"varint,4,opt,name=notBefore" json:"notBefore,omitempty"` - NotAfter *uint64 `protobuf:"varint,5,opt,name=notAfter" json:"notAfter,omitempty"` + sizeCache protoimpl.SizeCache } func (x *CertChain_NoiseCertificate_Details) Reset() { *x = CertChain_NoiseCertificate_Details{} - if protoimpl.UnsafeEnabled { - mi := &file_waCert_WACert_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waCert_WACert_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *CertChain_NoiseCertificate_Details) String() string { @@ -296,7 +280,7 @@ func (*CertChain_NoiseCertificate_Details) ProtoMessage() {} func (x *CertChain_NoiseCertificate_Details) ProtoReflect() protoreflect.Message { mi := &file_waCert_WACert_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -348,17 +332,39 @@ func (x *CertChain_NoiseCertificate_Details) GetNotAfter() uint64 { var File_waCert_WACert_proto protoreflect.FileDescriptor -//go:embed WACert.pb.raw -var file_waCert_WACert_proto_rawDesc []byte +const file_waCert_WACert_proto_rawDesc = "" + + "\n" + + "\x13waCert/WACert.proto\x12\x06WACert\"\xcb\x01\n" + + "\x10NoiseCertificate\x12\x18\n" + + "\adetails\x18\x01 \x01(\fR\adetails\x12\x1c\n" + + "\tsignature\x18\x02 \x01(\fR\tsignature\x1a\x7f\n" + + "\aDetails\x12\x16\n" + + "\x06serial\x18\x01 \x01(\rR\x06serial\x12\x16\n" + + "\x06issuer\x18\x02 \x01(\tR\x06issuer\x12\x18\n" + + "\aexpires\x18\x03 \x01(\x04R\aexpires\x12\x18\n" + + "\asubject\x18\x04 \x01(\tR\asubject\x12\x10\n" + + "\x03key\x18\x05 \x01(\fR\x03key\"\xec\x02\n" + + "\tCertChain\x126\n" + + "\x04leaf\x18\x01 \x01(\v2\".WACert.CertChain.NoiseCertificateR\x04leaf\x12F\n" + + "\fintermediate\x18\x02 \x01(\v2\".WACert.CertChain.NoiseCertificateR\fintermediate\x1a\xde\x01\n" + + "\x10NoiseCertificate\x12\x18\n" + + "\adetails\x18\x01 \x01(\fR\adetails\x12\x1c\n" + + "\tsignature\x18\x02 \x01(\fR\tsignature\x1a\x91\x01\n" + + "\aDetails\x12\x16\n" + + "\x06serial\x18\x01 \x01(\rR\x06serial\x12\"\n" + + "\fissuerSerial\x18\x02 \x01(\rR\fissuerSerial\x12\x10\n" + + "\x03key\x18\x03 \x01(\fR\x03key\x12\x1c\n" + + "\tnotBefore\x18\x04 \x01(\x04R\tnotBefore\x12\x1a\n" + + "\bnotAfter\x18\x05 \x01(\x04R\bnotAfterB\"Z go.mau.fi/whatsmeow/proto/waCert" var ( file_waCert_WACert_proto_rawDescOnce sync.Once - file_waCert_WACert_proto_rawDescData = file_waCert_WACert_proto_rawDesc + file_waCert_WACert_proto_rawDescData []byte ) func file_waCert_WACert_proto_rawDescGZIP() []byte { file_waCert_WACert_proto_rawDescOnce.Do(func() { - file_waCert_WACert_proto_rawDescData = protoimpl.X.CompressGZIP(file_waCert_WACert_proto_rawDescData) + file_waCert_WACert_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_waCert_WACert_proto_rawDesc), len(file_waCert_WACert_proto_rawDesc))) }) return file_waCert_WACert_proto_rawDescData } @@ -386,73 +392,11 @@ func file_waCert_WACert_proto_init() { if File_waCert_WACert_proto != nil { return } - if !protoimpl.UnsafeEnabled { - file_waCert_WACert_proto_msgTypes[0].Exporter = func(v any, i int) any { - switch v := v.(*NoiseCertificate); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waCert_WACert_proto_msgTypes[1].Exporter = func(v any, i int) any { - switch v := v.(*CertChain); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waCert_WACert_proto_msgTypes[2].Exporter = func(v any, i int) any { - switch v := v.(*NoiseCertificate_Details); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waCert_WACert_proto_msgTypes[3].Exporter = func(v any, i int) any { - switch v := v.(*CertChain_NoiseCertificate); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waCert_WACert_proto_msgTypes[4].Exporter = func(v any, i int) any { - switch v := v.(*CertChain_NoiseCertificate_Details); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_waCert_WACert_proto_rawDesc, + RawDescriptor: unsafe.Slice(unsafe.StringData(file_waCert_WACert_proto_rawDesc), len(file_waCert_WACert_proto_rawDesc)), NumEnums: 0, NumMessages: 5, NumExtensions: 0, @@ -463,7 +407,6 @@ func file_waCert_WACert_proto_init() { MessageInfos: file_waCert_WACert_proto_msgTypes, }.Build() File_waCert_WACert_proto = out.File - file_waCert_WACert_proto_rawDesc = nil file_waCert_WACert_proto_goTypes = nil file_waCert_WACert_proto_depIdxs = nil } diff --git a/vendor/go.mau.fi/whatsmeow/proto/waCert/WACert.pb.raw b/vendor/go.mau.fi/whatsmeow/proto/waCert/WACert.pb.raw deleted file mode 100644 index ae70c93c4e..0000000000 --- a/vendor/go.mau.fi/whatsmeow/proto/waCert/WACert.pb.raw +++ /dev/null @@ -1,23 +0,0 @@ - -waCert/WACert.protoWACert"� -NoiseCertificate -details ( Rdetails - signature ( R signature -Details -serial ( Rserial -issuer ( Rissuer -expires (Rexpires -subject ( Rsubject -key ( Rkey"� - CertChain6 -leaf ( 2".WACert.CertChain.NoiseCertificateRleafF - intermediate ( 2".WACert.CertChain.NoiseCertificateR intermediate� -NoiseCertificate -details ( Rdetails - signature ( R signature� -Details -serial ( Rserial" - issuerSerial ( R issuerSerial -key ( Rkey - notBefore (R notBefore -notAfter (RnotAfterB"Z go.mau.fi/whatsmeow/proto/waCert \ No newline at end of file diff --git a/vendor/go.mau.fi/whatsmeow/proto/waChatLockSettings/WAProtobufsChatLockSettings.pb.go b/vendor/go.mau.fi/whatsmeow/proto/waChatLockSettings/WAProtobufsChatLockSettings.pb.go deleted file mode 100644 index dbf33ca5e4..0000000000 --- a/vendor/go.mau.fi/whatsmeow/proto/waChatLockSettings/WAProtobufsChatLockSettings.pb.go +++ /dev/null @@ -1,150 +0,0 @@ -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.34.2 -// protoc v3.21.12 -// source: waChatLockSettings/WAProtobufsChatLockSettings.proto - -package waChatLockSettings - -import ( - reflect "reflect" - sync "sync" - - waUserPassword "go.mau.fi/whatsmeow/proto/waUserPassword" - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - - _ "embed" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -type ChatLockSettings struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - HideLockedChats *bool `protobuf:"varint,1,opt,name=hideLockedChats" json:"hideLockedChats,omitempty"` - SecretCode *waUserPassword.UserPassword `protobuf:"bytes,2,opt,name=secretCode" json:"secretCode,omitempty"` -} - -func (x *ChatLockSettings) Reset() { - *x = ChatLockSettings{} - if protoimpl.UnsafeEnabled { - mi := &file_waChatLockSettings_WAProtobufsChatLockSettings_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ChatLockSettings) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ChatLockSettings) ProtoMessage() {} - -func (x *ChatLockSettings) ProtoReflect() protoreflect.Message { - mi := &file_waChatLockSettings_WAProtobufsChatLockSettings_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ChatLockSettings.ProtoReflect.Descriptor instead. -func (*ChatLockSettings) Descriptor() ([]byte, []int) { - return file_waChatLockSettings_WAProtobufsChatLockSettings_proto_rawDescGZIP(), []int{0} -} - -func (x *ChatLockSettings) GetHideLockedChats() bool { - if x != nil && x.HideLockedChats != nil { - return *x.HideLockedChats - } - return false -} - -func (x *ChatLockSettings) GetSecretCode() *waUserPassword.UserPassword { - if x != nil { - return x.SecretCode - } - return nil -} - -var File_waChatLockSettings_WAProtobufsChatLockSettings_proto protoreflect.FileDescriptor - -//go:embed WAProtobufsChatLockSettings.pb.raw -var file_waChatLockSettings_WAProtobufsChatLockSettings_proto_rawDesc []byte - -var ( - file_waChatLockSettings_WAProtobufsChatLockSettings_proto_rawDescOnce sync.Once - file_waChatLockSettings_WAProtobufsChatLockSettings_proto_rawDescData = file_waChatLockSettings_WAProtobufsChatLockSettings_proto_rawDesc -) - -func file_waChatLockSettings_WAProtobufsChatLockSettings_proto_rawDescGZIP() []byte { - file_waChatLockSettings_WAProtobufsChatLockSettings_proto_rawDescOnce.Do(func() { - file_waChatLockSettings_WAProtobufsChatLockSettings_proto_rawDescData = protoimpl.X.CompressGZIP(file_waChatLockSettings_WAProtobufsChatLockSettings_proto_rawDescData) - }) - return file_waChatLockSettings_WAProtobufsChatLockSettings_proto_rawDescData -} - -var file_waChatLockSettings_WAProtobufsChatLockSettings_proto_msgTypes = make([]protoimpl.MessageInfo, 1) -var file_waChatLockSettings_WAProtobufsChatLockSettings_proto_goTypes = []any{ - (*ChatLockSettings)(nil), // 0: WAProtobufsChatLockSettings.ChatLockSettings - (*waUserPassword.UserPassword)(nil), // 1: WAProtobufsUserPassword.UserPassword -} -var file_waChatLockSettings_WAProtobufsChatLockSettings_proto_depIdxs = []int32{ - 1, // 0: WAProtobufsChatLockSettings.ChatLockSettings.secretCode:type_name -> WAProtobufsUserPassword.UserPassword - 1, // [1:1] is the sub-list for method output_type - 1, // [1:1] is the sub-list for method input_type - 1, // [1:1] is the sub-list for extension type_name - 1, // [1:1] is the sub-list for extension extendee - 0, // [0:1] is the sub-list for field type_name -} - -func init() { file_waChatLockSettings_WAProtobufsChatLockSettings_proto_init() } -func file_waChatLockSettings_WAProtobufsChatLockSettings_proto_init() { - if File_waChatLockSettings_WAProtobufsChatLockSettings_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_waChatLockSettings_WAProtobufsChatLockSettings_proto_msgTypes[0].Exporter = func(v any, i int) any { - switch v := v.(*ChatLockSettings); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_waChatLockSettings_WAProtobufsChatLockSettings_proto_rawDesc, - NumEnums: 0, - NumMessages: 1, - NumExtensions: 0, - NumServices: 0, - }, - GoTypes: file_waChatLockSettings_WAProtobufsChatLockSettings_proto_goTypes, - DependencyIndexes: file_waChatLockSettings_WAProtobufsChatLockSettings_proto_depIdxs, - MessageInfos: file_waChatLockSettings_WAProtobufsChatLockSettings_proto_msgTypes, - }.Build() - File_waChatLockSettings_WAProtobufsChatLockSettings_proto = out.File - file_waChatLockSettings_WAProtobufsChatLockSettings_proto_rawDesc = nil - file_waChatLockSettings_WAProtobufsChatLockSettings_proto_goTypes = nil - file_waChatLockSettings_WAProtobufsChatLockSettings_proto_depIdxs = nil -} diff --git a/vendor/go.mau.fi/whatsmeow/proto/waChatLockSettings/WAProtobufsChatLockSettings.pb.raw b/vendor/go.mau.fi/whatsmeow/proto/waChatLockSettings/WAProtobufsChatLockSettings.pb.raw deleted file mode 100644 index 92c0c34340..0000000000 --- a/vendor/go.mau.fi/whatsmeow/proto/waChatLockSettings/WAProtobufsChatLockSettings.pb.raw +++ /dev/null @@ -1,7 +0,0 @@ - -4waChatLockSettings/WAProtobufsChatLockSettings.protoWAProtobufsChatLockSettings,waUserPassword/WAProtobufsUserPassword.proto"� -ChatLockSettings( -hideLockedChats (RhideLockedChatsE - -secretCode ( 2%.WAProtobufsUserPassword.UserPasswordR -secretCodeB.Z,go.mau.fi/whatsmeow/proto/waChatLockSettings \ No newline at end of file diff --git a/vendor/go.mau.fi/whatsmeow/proto/waChatLockSettings/WAProtobufsChatLockSettings.proto b/vendor/go.mau.fi/whatsmeow/proto/waChatLockSettings/WAProtobufsChatLockSettings.proto deleted file mode 100644 index 574529a524..0000000000 --- a/vendor/go.mau.fi/whatsmeow/proto/waChatLockSettings/WAProtobufsChatLockSettings.proto +++ /dev/null @@ -1,10 +0,0 @@ -syntax = "proto2"; -package WAProtobufsChatLockSettings; -option go_package = "go.mau.fi/whatsmeow/proto/waChatLockSettings"; - -import "waUserPassword/WAProtobufsUserPassword.proto"; - -message ChatLockSettings { - optional bool hideLockedChats = 1; - optional WAProtobufsUserPassword.UserPassword secretCode = 2; -} diff --git a/vendor/go.mau.fi/whatsmeow/proto/waChatLockSettings/WAWebProtobufsChatLockSettings.pb.go b/vendor/go.mau.fi/whatsmeow/proto/waChatLockSettings/WAWebProtobufsChatLockSettings.pb.go new file mode 100644 index 0000000000..fae5ba172f --- /dev/null +++ b/vendor/go.mau.fi/whatsmeow/proto/waChatLockSettings/WAWebProtobufsChatLockSettings.pb.go @@ -0,0 +1,138 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.36.10 +// protoc v3.21.12 +// source: waChatLockSettings/WAWebProtobufsChatLockSettings.proto + +package waChatLockSettings + +import ( + reflect "reflect" + sync "sync" + unsafe "unsafe" + + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + + waUserPassword "go.mau.fi/whatsmeow/proto/waUserPassword" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type ChatLockSettings struct { + state protoimpl.MessageState `protogen:"open.v1"` + HideLockedChats *bool `protobuf:"varint,1,opt,name=hideLockedChats" json:"hideLockedChats,omitempty"` + SecretCode *waUserPassword.UserPassword `protobuf:"bytes,2,opt,name=secretCode" json:"secretCode,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ChatLockSettings) Reset() { + *x = ChatLockSettings{} + mi := &file_waChatLockSettings_WAWebProtobufsChatLockSettings_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ChatLockSettings) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ChatLockSettings) ProtoMessage() {} + +func (x *ChatLockSettings) ProtoReflect() protoreflect.Message { + mi := &file_waChatLockSettings_WAWebProtobufsChatLockSettings_proto_msgTypes[0] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ChatLockSettings.ProtoReflect.Descriptor instead. +func (*ChatLockSettings) Descriptor() ([]byte, []int) { + return file_waChatLockSettings_WAWebProtobufsChatLockSettings_proto_rawDescGZIP(), []int{0} +} + +func (x *ChatLockSettings) GetHideLockedChats() bool { + if x != nil && x.HideLockedChats != nil { + return *x.HideLockedChats + } + return false +} + +func (x *ChatLockSettings) GetSecretCode() *waUserPassword.UserPassword { + if x != nil { + return x.SecretCode + } + return nil +} + +var File_waChatLockSettings_WAWebProtobufsChatLockSettings_proto protoreflect.FileDescriptor + +const file_waChatLockSettings_WAWebProtobufsChatLockSettings_proto_rawDesc = "" + + "\n" + + "7waChatLockSettings/WAWebProtobufsChatLockSettings.proto\x12\x1eWAWebProtobufsChatLockSettings\x1a/waUserPassword/WAWebProtobufsUserPassword.proto\"\x86\x01\n" + + "\x10ChatLockSettings\x12(\n" + + "\x0fhideLockedChats\x18\x01 \x01(\bR\x0fhideLockedChats\x12H\n" + + "\n" + + "secretCode\x18\x02 \x01(\v2(.WAWebProtobufsUserPassword.UserPasswordR\n" + + "secretCodeB.Z,go.mau.fi/whatsmeow/proto/waChatLockSettings" + +var ( + file_waChatLockSettings_WAWebProtobufsChatLockSettings_proto_rawDescOnce sync.Once + file_waChatLockSettings_WAWebProtobufsChatLockSettings_proto_rawDescData []byte +) + +func file_waChatLockSettings_WAWebProtobufsChatLockSettings_proto_rawDescGZIP() []byte { + file_waChatLockSettings_WAWebProtobufsChatLockSettings_proto_rawDescOnce.Do(func() { + file_waChatLockSettings_WAWebProtobufsChatLockSettings_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_waChatLockSettings_WAWebProtobufsChatLockSettings_proto_rawDesc), len(file_waChatLockSettings_WAWebProtobufsChatLockSettings_proto_rawDesc))) + }) + return file_waChatLockSettings_WAWebProtobufsChatLockSettings_proto_rawDescData +} + +var file_waChatLockSettings_WAWebProtobufsChatLockSettings_proto_msgTypes = make([]protoimpl.MessageInfo, 1) +var file_waChatLockSettings_WAWebProtobufsChatLockSettings_proto_goTypes = []any{ + (*ChatLockSettings)(nil), // 0: WAWebProtobufsChatLockSettings.ChatLockSettings + (*waUserPassword.UserPassword)(nil), // 1: WAWebProtobufsUserPassword.UserPassword +} +var file_waChatLockSettings_WAWebProtobufsChatLockSettings_proto_depIdxs = []int32{ + 1, // 0: WAWebProtobufsChatLockSettings.ChatLockSettings.secretCode:type_name -> WAWebProtobufsUserPassword.UserPassword + 1, // [1:1] is the sub-list for method output_type + 1, // [1:1] is the sub-list for method input_type + 1, // [1:1] is the sub-list for extension type_name + 1, // [1:1] is the sub-list for extension extendee + 0, // [0:1] is the sub-list for field type_name +} + +func init() { file_waChatLockSettings_WAWebProtobufsChatLockSettings_proto_init() } +func file_waChatLockSettings_WAWebProtobufsChatLockSettings_proto_init() { + if File_waChatLockSettings_WAWebProtobufsChatLockSettings_proto != nil { + return + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: unsafe.Slice(unsafe.StringData(file_waChatLockSettings_WAWebProtobufsChatLockSettings_proto_rawDesc), len(file_waChatLockSettings_WAWebProtobufsChatLockSettings_proto_rawDesc)), + NumEnums: 0, + NumMessages: 1, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_waChatLockSettings_WAWebProtobufsChatLockSettings_proto_goTypes, + DependencyIndexes: file_waChatLockSettings_WAWebProtobufsChatLockSettings_proto_depIdxs, + MessageInfos: file_waChatLockSettings_WAWebProtobufsChatLockSettings_proto_msgTypes, + }.Build() + File_waChatLockSettings_WAWebProtobufsChatLockSettings_proto = out.File + file_waChatLockSettings_WAWebProtobufsChatLockSettings_proto_goTypes = nil + file_waChatLockSettings_WAWebProtobufsChatLockSettings_proto_depIdxs = nil +} diff --git a/vendor/go.mau.fi/whatsmeow/proto/waChatLockSettings/WAWebProtobufsChatLockSettings.proto b/vendor/go.mau.fi/whatsmeow/proto/waChatLockSettings/WAWebProtobufsChatLockSettings.proto new file mode 100644 index 0000000000..598be63fcd --- /dev/null +++ b/vendor/go.mau.fi/whatsmeow/proto/waChatLockSettings/WAWebProtobufsChatLockSettings.proto @@ -0,0 +1,10 @@ +syntax = "proto2"; +package WAWebProtobufsChatLockSettings; +option go_package = "go.mau.fi/whatsmeow/proto/waChatLockSettings"; + +import "waUserPassword/WAWebProtobufsUserPassword.proto"; + +message ChatLockSettings { + optional bool hideLockedChats = 1; + optional WAWebProtobufsUserPassword.UserPassword secretCode = 2; +} diff --git a/vendor/go.mau.fi/whatsmeow/proto/waCommon/WACommon.pb.go b/vendor/go.mau.fi/whatsmeow/proto/waCommon/WACommon.pb.go index 756697d53b..5675b14981 100644 --- a/vendor/go.mau.fi/whatsmeow/proto/waCommon/WACommon.pb.go +++ b/vendor/go.mau.fi/whatsmeow/proto/waCommon/WACommon.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 +// protoc-gen-go v1.36.10 // protoc v3.21.12 // source: waCommon/WACommon.proto @@ -9,11 +9,10 @@ package waCommon import ( reflect "reflect" sync "sync" + unsafe "unsafe" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" - - _ "embed" ) const ( @@ -144,24 +143,136 @@ func (Command_CommandType) EnumDescriptor() ([]byte, []int) { return file_waCommon_WACommon_proto_rawDescGZIP(), []int{1, 0} } +type Mention_MentionType int32 + +const ( + Mention_PROFILE Mention_MentionType = 0 +) + +// Enum value maps for Mention_MentionType. +var ( + Mention_MentionType_name = map[int32]string{ + 0: "PROFILE", + } + Mention_MentionType_value = map[string]int32{ + "PROFILE": 0, + } +) + +func (x Mention_MentionType) Enum() *Mention_MentionType { + p := new(Mention_MentionType) + *p = x + return p +} + +func (x Mention_MentionType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (Mention_MentionType) Descriptor() protoreflect.EnumDescriptor { + return file_waCommon_WACommon_proto_enumTypes[2].Descriptor() +} + +func (Mention_MentionType) Type() protoreflect.EnumType { + return &file_waCommon_WACommon_proto_enumTypes[2] +} + +func (x Mention_MentionType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *Mention_MentionType) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = Mention_MentionType(num) + return nil +} + +// Deprecated: Use Mention_MentionType.Descriptor instead. +func (Mention_MentionType) EnumDescriptor() ([]byte, []int) { + return file_waCommon_WACommon_proto_rawDescGZIP(), []int{2, 0} +} + +type LimitSharing_Trigger int32 + +const ( + LimitSharing_UNKNOWN LimitSharing_Trigger = 0 + LimitSharing_CHAT_SETTING LimitSharing_Trigger = 1 + LimitSharing_BIZ_SUPPORTS_FB_HOSTING LimitSharing_Trigger = 2 + LimitSharing_UNKNOWN_GROUP LimitSharing_Trigger = 3 +) + +// Enum value maps for LimitSharing_Trigger. +var ( + LimitSharing_Trigger_name = map[int32]string{ + 0: "UNKNOWN", + 1: "CHAT_SETTING", + 2: "BIZ_SUPPORTS_FB_HOSTING", + 3: "UNKNOWN_GROUP", + } + LimitSharing_Trigger_value = map[string]int32{ + "UNKNOWN": 0, + "CHAT_SETTING": 1, + "BIZ_SUPPORTS_FB_HOSTING": 2, + "UNKNOWN_GROUP": 3, + } +) + +func (x LimitSharing_Trigger) Enum() *LimitSharing_Trigger { + p := new(LimitSharing_Trigger) + *p = x + return p +} + +func (x LimitSharing_Trigger) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (LimitSharing_Trigger) Descriptor() protoreflect.EnumDescriptor { + return file_waCommon_WACommon_proto_enumTypes[3].Descriptor() +} + +func (LimitSharing_Trigger) Type() protoreflect.EnumType { + return &file_waCommon_WACommon_proto_enumTypes[3] +} + +func (x LimitSharing_Trigger) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *LimitSharing_Trigger) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = LimitSharing_Trigger(num) + return nil +} + +// Deprecated: Use LimitSharing_Trigger.Descriptor instead. +func (LimitSharing_Trigger) EnumDescriptor() ([]byte, []int) { + return file_waCommon_WACommon_proto_rawDescGZIP(), []int{5, 0} +} + type MessageKey struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + RemoteJID *string `protobuf:"bytes,1,opt,name=remoteJID" json:"remoteJID,omitempty"` + FromMe *bool `protobuf:"varint,2,opt,name=fromMe" json:"fromMe,omitempty"` + ID *string `protobuf:"bytes,3,opt,name=ID" json:"ID,omitempty"` + Participant *string `protobuf:"bytes,4,opt,name=participant" json:"participant,omitempty"` unknownFields protoimpl.UnknownFields - - RemoteJID *string `protobuf:"bytes,1,opt,name=remoteJID" json:"remoteJID,omitempty"` - FromMe *bool `protobuf:"varint,2,opt,name=fromMe" json:"fromMe,omitempty"` - ID *string `protobuf:"bytes,3,opt,name=ID" json:"ID,omitempty"` - Participant *string `protobuf:"bytes,4,opt,name=participant" json:"participant,omitempty"` + sizeCache protoimpl.SizeCache } func (x *MessageKey) Reset() { *x = MessageKey{} - if protoimpl.UnsafeEnabled { - mi := &file_waCommon_WACommon_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waCommon_WACommon_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *MessageKey) String() string { @@ -172,7 +283,7 @@ func (*MessageKey) ProtoMessage() {} func (x *MessageKey) ProtoReflect() protoreflect.Message { mi := &file_waCommon_WACommon_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -216,23 +327,20 @@ func (x *MessageKey) GetParticipant() string { } type Command struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - CommandType *Command_CommandType `protobuf:"varint,1,opt,name=commandType,enum=WACommon.Command_CommandType" json:"commandType,omitempty"` - Offset *uint32 `protobuf:"varint,2,opt,name=offset" json:"offset,omitempty"` - Length *uint32 `protobuf:"varint,3,opt,name=length" json:"length,omitempty"` - ValidationToken *string `protobuf:"bytes,4,opt,name=validationToken" json:"validationToken,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + CommandType *Command_CommandType `protobuf:"varint,1,opt,name=commandType,enum=WACommon.Command_CommandType" json:"commandType,omitempty"` + Offset *uint32 `protobuf:"varint,2,opt,name=offset" json:"offset,omitempty"` + Length *uint32 `protobuf:"varint,3,opt,name=length" json:"length,omitempty"` + ValidationToken *string `protobuf:"bytes,4,opt,name=validationToken" json:"validationToken,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *Command) Reset() { *x = Command{} - if protoimpl.UnsafeEnabled { - mi := &file_waCommon_WACommon_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waCommon_WACommon_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Command) String() string { @@ -243,7 +351,7 @@ func (*Command) ProtoMessage() {} func (x *Command) ProtoReflect() protoreflect.Message { mi := &file_waCommon_WACommon_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -286,23 +394,89 @@ func (x *Command) GetValidationToken() string { return "" } -type MessageText struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache +type Mention struct { + state protoimpl.MessageState `protogen:"open.v1"` + MentionType *Mention_MentionType `protobuf:"varint,1,opt,name=mentionType,enum=WACommon.Mention_MentionType" json:"mentionType,omitempty"` + MentionedJID *string `protobuf:"bytes,2,opt,name=mentionedJID" json:"mentionedJID,omitempty"` + Offset *uint32 `protobuf:"varint,3,opt,name=offset" json:"offset,omitempty"` + Length *uint32 `protobuf:"varint,4,opt,name=length" json:"length,omitempty"` unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} - Text *string `protobuf:"bytes,1,opt,name=text" json:"text,omitempty"` - MentionedJID []string `protobuf:"bytes,2,rep,name=mentionedJID" json:"mentionedJID,omitempty"` - Commands []*Command `protobuf:"bytes,3,rep,name=commands" json:"commands,omitempty"` +func (x *Mention) Reset() { + *x = Mention{} + mi := &file_waCommon_WACommon_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *MessageText) Reset() { - *x = MessageText{} - if protoimpl.UnsafeEnabled { - mi := &file_waCommon_WACommon_proto_msgTypes[2] +func (x *Mention) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Mention) ProtoMessage() {} + +func (x *Mention) ProtoReflect() protoreflect.Message { + mi := &file_waCommon_WACommon_proto_msgTypes[2] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Mention.ProtoReflect.Descriptor instead. +func (*Mention) Descriptor() ([]byte, []int) { + return file_waCommon_WACommon_proto_rawDescGZIP(), []int{2} +} + +func (x *Mention) GetMentionType() Mention_MentionType { + if x != nil && x.MentionType != nil { + return *x.MentionType + } + return Mention_PROFILE +} + +func (x *Mention) GetMentionedJID() string { + if x != nil && x.MentionedJID != nil { + return *x.MentionedJID + } + return "" +} + +func (x *Mention) GetOffset() uint32 { + if x != nil && x.Offset != nil { + return *x.Offset } + return 0 +} + +func (x *Mention) GetLength() uint32 { + if x != nil && x.Length != nil { + return *x.Length + } + return 0 +} + +type MessageText struct { + state protoimpl.MessageState `protogen:"open.v1"` + Text *string `protobuf:"bytes,1,opt,name=text" json:"text,omitempty"` + MentionedJID []string `protobuf:"bytes,2,rep,name=mentionedJID" json:"mentionedJID,omitempty"` + Commands []*Command `protobuf:"bytes,3,rep,name=commands" json:"commands,omitempty"` + Mentions []*Mention `protobuf:"bytes,4,rep,name=mentions" json:"mentions,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *MessageText) Reset() { + *x = MessageText{} + mi := &file_waCommon_WACommon_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *MessageText) String() string { @@ -312,8 +486,8 @@ func (x *MessageText) String() string { func (*MessageText) ProtoMessage() {} func (x *MessageText) ProtoReflect() protoreflect.Message { - mi := &file_waCommon_WACommon_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_waCommon_WACommon_proto_msgTypes[3] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -325,7 +499,7 @@ func (x *MessageText) ProtoReflect() protoreflect.Message { // Deprecated: Use MessageText.ProtoReflect.Descriptor instead. func (*MessageText) Descriptor() ([]byte, []int) { - return file_waCommon_WACommon_proto_rawDescGZIP(), []int{2} + return file_waCommon_WACommon_proto_rawDescGZIP(), []int{3} } func (x *MessageText) GetText() string { @@ -349,22 +523,26 @@ func (x *MessageText) GetCommands() []*Command { return nil } +func (x *MessageText) GetMentions() []*Mention { + if x != nil { + return x.Mentions + } + return nil +} + type SubProtocol struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Payload []byte `protobuf:"bytes,1,opt,name=payload" json:"payload,omitempty"` + Version *int32 `protobuf:"varint,2,opt,name=version" json:"version,omitempty"` unknownFields protoimpl.UnknownFields - - Payload []byte `protobuf:"bytes,1,opt,name=payload" json:"payload,omitempty"` - Version *int32 `protobuf:"varint,2,opt,name=version" json:"version,omitempty"` + sizeCache protoimpl.SizeCache } func (x *SubProtocol) Reset() { *x = SubProtocol{} - if protoimpl.UnsafeEnabled { - mi := &file_waCommon_WACommon_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waCommon_WACommon_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *SubProtocol) String() string { @@ -374,8 +552,8 @@ func (x *SubProtocol) String() string { func (*SubProtocol) ProtoMessage() {} func (x *SubProtocol) ProtoReflect() protoreflect.Message { - mi := &file_waCommon_WACommon_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_waCommon_WACommon_proto_msgTypes[4] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -387,7 +565,7 @@ func (x *SubProtocol) ProtoReflect() protoreflect.Message { // Deprecated: Use SubProtocol.ProtoReflect.Descriptor instead. func (*SubProtocol) Descriptor() ([]byte, []int) { - return file_waCommon_WACommon_proto_rawDescGZIP(), []int{3} + return file_waCommon_WACommon_proto_rawDescGZIP(), []int{4} } func (x *SubProtocol) GetPayload() []byte { @@ -404,41 +582,165 @@ func (x *SubProtocol) GetVersion() int32 { return 0 } +type LimitSharing struct { + state protoimpl.MessageState `protogen:"open.v1"` + SharingLimited *bool `protobuf:"varint,1,opt,name=sharingLimited" json:"sharingLimited,omitempty"` + Trigger *LimitSharing_Trigger `protobuf:"varint,2,opt,name=trigger,enum=WACommon.LimitSharing_Trigger" json:"trigger,omitempty"` + LimitSharingSettingTimestamp *int64 `protobuf:"varint,3,opt,name=limitSharingSettingTimestamp" json:"limitSharingSettingTimestamp,omitempty"` + InitiatedByMe *bool `protobuf:"varint,4,opt,name=initiatedByMe" json:"initiatedByMe,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *LimitSharing) Reset() { + *x = LimitSharing{} + mi := &file_waCommon_WACommon_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *LimitSharing) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*LimitSharing) ProtoMessage() {} + +func (x *LimitSharing) ProtoReflect() protoreflect.Message { + mi := &file_waCommon_WACommon_proto_msgTypes[5] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use LimitSharing.ProtoReflect.Descriptor instead. +func (*LimitSharing) Descriptor() ([]byte, []int) { + return file_waCommon_WACommon_proto_rawDescGZIP(), []int{5} +} + +func (x *LimitSharing) GetSharingLimited() bool { + if x != nil && x.SharingLimited != nil { + return *x.SharingLimited + } + return false +} + +func (x *LimitSharing) GetTrigger() LimitSharing_Trigger { + if x != nil && x.Trigger != nil { + return *x.Trigger + } + return LimitSharing_UNKNOWN +} + +func (x *LimitSharing) GetLimitSharingSettingTimestamp() int64 { + if x != nil && x.LimitSharingSettingTimestamp != nil { + return *x.LimitSharingSettingTimestamp + } + return 0 +} + +func (x *LimitSharing) GetInitiatedByMe() bool { + if x != nil && x.InitiatedByMe != nil { + return *x.InitiatedByMe + } + return false +} + var File_waCommon_WACommon_proto protoreflect.FileDescriptor -//go:embed WACommon.pb.raw -var file_waCommon_WACommon_proto_rawDesc []byte +const file_waCommon_WACommon_proto_rawDesc = "" + + "\n" + + "\x17waCommon/WACommon.proto\x12\bWACommon\"t\n" + + "\n" + + "MessageKey\x12\x1c\n" + + "\tremoteJID\x18\x01 \x01(\tR\tremoteJID\x12\x16\n" + + "\x06fromMe\x18\x02 \x01(\bR\x06fromMe\x12\x0e\n" + + "\x02ID\x18\x03 \x01(\tR\x02ID\x12 \n" + + "\vparticipant\x18\x04 \x01(\tR\vparticipant\"\xe5\x01\n" + + "\aCommand\x12?\n" + + "\vcommandType\x18\x01 \x01(\x0e2\x1d.WACommon.Command.CommandTypeR\vcommandType\x12\x16\n" + + "\x06offset\x18\x02 \x01(\rR\x06offset\x12\x16\n" + + "\x06length\x18\x03 \x01(\rR\x06length\x12(\n" + + "\x0fvalidationToken\x18\x04 \x01(\tR\x0fvalidationToken\"?\n" + + "\vCommandType\x12\f\n" + + "\bEVERYONE\x10\x01\x12\n" + + "\n" + + "\x06SILENT\x10\x02\x12\x06\n" + + "\x02AI\x10\x03\x12\x0e\n" + + "\n" + + "AI_IMAGINE\x10\x04\"\xba\x01\n" + + "\aMention\x12?\n" + + "\vmentionType\x18\x01 \x01(\x0e2\x1d.WACommon.Mention.MentionTypeR\vmentionType\x12\"\n" + + "\fmentionedJID\x18\x02 \x01(\tR\fmentionedJID\x12\x16\n" + + "\x06offset\x18\x03 \x01(\rR\x06offset\x12\x16\n" + + "\x06length\x18\x04 \x01(\rR\x06length\"\x1a\n" + + "\vMentionType\x12\v\n" + + "\aPROFILE\x10\x00\"\xa3\x01\n" + + "\vMessageText\x12\x12\n" + + "\x04text\x18\x01 \x01(\tR\x04text\x12\"\n" + + "\fmentionedJID\x18\x02 \x03(\tR\fmentionedJID\x12-\n" + + "\bcommands\x18\x03 \x03(\v2\x11.WACommon.CommandR\bcommands\x12-\n" + + "\bmentions\x18\x04 \x03(\v2\x11.WACommon.MentionR\bmentions\"A\n" + + "\vSubProtocol\x12\x18\n" + + "\apayload\x18\x01 \x01(\fR\apayload\x12\x18\n" + + "\aversion\x18\x02 \x01(\x05R\aversion\"\xb4\x02\n" + + "\fLimitSharing\x12&\n" + + "\x0esharingLimited\x18\x01 \x01(\bR\x0esharingLimited\x128\n" + + "\atrigger\x18\x02 \x01(\x0e2\x1e.WACommon.LimitSharing.TriggerR\atrigger\x12B\n" + + "\x1climitSharingSettingTimestamp\x18\x03 \x01(\x03R\x1climitSharingSettingTimestamp\x12$\n" + + "\rinitiatedByMe\x18\x04 \x01(\bR\rinitiatedByMe\"X\n" + + "\aTrigger\x12\v\n" + + "\aUNKNOWN\x10\x00\x12\x10\n" + + "\fCHAT_SETTING\x10\x01\x12\x1b\n" + + "\x17BIZ_SUPPORTS_FB_HOSTING\x10\x02\x12\x11\n" + + "\rUNKNOWN_GROUP\x10\x03*F\n" + + "\x13FutureProofBehavior\x12\x0f\n" + + "\vPLACEHOLDER\x10\x00\x12\x12\n" + + "\x0eNO_PLACEHOLDER\x10\x01\x12\n" + + "\n" + + "\x06IGNORE\x10\x02B$Z\"go.mau.fi/whatsmeow/proto/waCommon" var ( file_waCommon_WACommon_proto_rawDescOnce sync.Once - file_waCommon_WACommon_proto_rawDescData = file_waCommon_WACommon_proto_rawDesc + file_waCommon_WACommon_proto_rawDescData []byte ) func file_waCommon_WACommon_proto_rawDescGZIP() []byte { file_waCommon_WACommon_proto_rawDescOnce.Do(func() { - file_waCommon_WACommon_proto_rawDescData = protoimpl.X.CompressGZIP(file_waCommon_WACommon_proto_rawDescData) + file_waCommon_WACommon_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_waCommon_WACommon_proto_rawDesc), len(file_waCommon_WACommon_proto_rawDesc))) }) return file_waCommon_WACommon_proto_rawDescData } -var file_waCommon_WACommon_proto_enumTypes = make([]protoimpl.EnumInfo, 2) -var file_waCommon_WACommon_proto_msgTypes = make([]protoimpl.MessageInfo, 4) +var file_waCommon_WACommon_proto_enumTypes = make([]protoimpl.EnumInfo, 4) +var file_waCommon_WACommon_proto_msgTypes = make([]protoimpl.MessageInfo, 6) var file_waCommon_WACommon_proto_goTypes = []any{ - (FutureProofBehavior)(0), // 0: WACommon.FutureProofBehavior - (Command_CommandType)(0), // 1: WACommon.Command.CommandType - (*MessageKey)(nil), // 2: WACommon.MessageKey - (*Command)(nil), // 3: WACommon.Command - (*MessageText)(nil), // 4: WACommon.MessageText - (*SubProtocol)(nil), // 5: WACommon.SubProtocol + (FutureProofBehavior)(0), // 0: WACommon.FutureProofBehavior + (Command_CommandType)(0), // 1: WACommon.Command.CommandType + (Mention_MentionType)(0), // 2: WACommon.Mention.MentionType + (LimitSharing_Trigger)(0), // 3: WACommon.LimitSharing.Trigger + (*MessageKey)(nil), // 4: WACommon.MessageKey + (*Command)(nil), // 5: WACommon.Command + (*Mention)(nil), // 6: WACommon.Mention + (*MessageText)(nil), // 7: WACommon.MessageText + (*SubProtocol)(nil), // 8: WACommon.SubProtocol + (*LimitSharing)(nil), // 9: WACommon.LimitSharing } var file_waCommon_WACommon_proto_depIdxs = []int32{ 1, // 0: WACommon.Command.commandType:type_name -> WACommon.Command.CommandType - 3, // 1: WACommon.MessageText.commands:type_name -> WACommon.Command - 2, // [2:2] is the sub-list for method output_type - 2, // [2:2] is the sub-list for method input_type - 2, // [2:2] is the sub-list for extension type_name - 2, // [2:2] is the sub-list for extension extendee - 0, // [0:2] is the sub-list for field type_name + 2, // 1: WACommon.Mention.mentionType:type_name -> WACommon.Mention.MentionType + 5, // 2: WACommon.MessageText.commands:type_name -> WACommon.Command + 6, // 3: WACommon.MessageText.mentions:type_name -> WACommon.Mention + 3, // 4: WACommon.LimitSharing.trigger:type_name -> WACommon.LimitSharing.Trigger + 5, // [5:5] is the sub-list for method output_type + 5, // [5:5] is the sub-list for method input_type + 5, // [5:5] is the sub-list for extension type_name + 5, // [5:5] is the sub-list for extension extendee + 0, // [0:5] is the sub-list for field type_name } func init() { file_waCommon_WACommon_proto_init() } @@ -446,63 +748,13 @@ func file_waCommon_WACommon_proto_init() { if File_waCommon_WACommon_proto != nil { return } - if !protoimpl.UnsafeEnabled { - file_waCommon_WACommon_proto_msgTypes[0].Exporter = func(v any, i int) any { - switch v := v.(*MessageKey); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waCommon_WACommon_proto_msgTypes[1].Exporter = func(v any, i int) any { - switch v := v.(*Command); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waCommon_WACommon_proto_msgTypes[2].Exporter = func(v any, i int) any { - switch v := v.(*MessageText); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waCommon_WACommon_proto_msgTypes[3].Exporter = func(v any, i int) any { - switch v := v.(*SubProtocol); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_waCommon_WACommon_proto_rawDesc, - NumEnums: 2, - NumMessages: 4, + RawDescriptor: unsafe.Slice(unsafe.StringData(file_waCommon_WACommon_proto_rawDesc), len(file_waCommon_WACommon_proto_rawDesc)), + NumEnums: 4, + NumMessages: 6, NumExtensions: 0, NumServices: 0, }, @@ -512,7 +764,6 @@ func file_waCommon_WACommon_proto_init() { MessageInfos: file_waCommon_WACommon_proto_msgTypes, }.Build() File_waCommon_WACommon_proto = out.File - file_waCommon_WACommon_proto_rawDesc = nil file_waCommon_WACommon_proto_goTypes = nil file_waCommon_WACommon_proto_depIdxs = nil } diff --git a/vendor/go.mau.fi/whatsmeow/proto/waCommon/WACommon.pb.raw b/vendor/go.mau.fi/whatsmeow/proto/waCommon/WACommon.pb.raw deleted file mode 100644 index 7d8083043a..0000000000 Binary files a/vendor/go.mau.fi/whatsmeow/proto/waCommon/WACommon.pb.raw and /dev/null differ diff --git a/vendor/go.mau.fi/whatsmeow/proto/waCommon/WACommon.proto b/vendor/go.mau.fi/whatsmeow/proto/waCommon/WACommon.proto index 85082cdd28..c75cd1748c 100644 --- a/vendor/go.mau.fi/whatsmeow/proto/waCommon/WACommon.proto +++ b/vendor/go.mau.fi/whatsmeow/proto/waCommon/WACommon.proto @@ -29,13 +29,39 @@ message Command { optional string validationToken = 4; } +message Mention { + enum MentionType { + PROFILE = 0; + } + + optional MentionType mentionType = 1; + optional string mentionedJID = 2; + optional uint32 offset = 3; + optional uint32 length = 4; +} + message MessageText { optional string text = 1; repeated string mentionedJID = 2; repeated Command commands = 3; + repeated Mention mentions = 4; } message SubProtocol { optional bytes payload = 1; optional int32 version = 2; } + +message LimitSharing { + enum Trigger { + UNKNOWN = 0; + CHAT_SETTING = 1; + BIZ_SUPPORTS_FB_HOSTING = 2; + UNKNOWN_GROUP = 3; + } + + optional bool sharingLimited = 1; + optional Trigger trigger = 2; + optional int64 limitSharingSettingTimestamp = 3; + optional bool initiatedByMe = 4; +} diff --git a/vendor/go.mau.fi/whatsmeow/proto/waCommon/legacy.go b/vendor/go.mau.fi/whatsmeow/proto/waCommon/legacy.go deleted file mode 100644 index cde4c85865..0000000000 --- a/vendor/go.mau.fi/whatsmeow/proto/waCommon/legacy.go +++ /dev/null @@ -1,11 +0,0 @@ -package waCommon - -// Deprecated: Use GetID -func (x *MessageKey) GetId() string { - return x.GetID() -} - -// Deprecated: Use GetRemoteJID -func (x *MessageKey) GetRemoteJid() string { - return x.GetRemoteJID() -} diff --git a/vendor/go.mau.fi/whatsmeow/proto/waCompanionReg/WACompanionReg.pb.go b/vendor/go.mau.fi/whatsmeow/proto/waCompanionReg/WACompanionReg.pb.go new file mode 100644 index 0000000000..17792e9063 --- /dev/null +++ b/vendor/go.mau.fi/whatsmeow/proto/waCompanionReg/WACompanionReg.pb.go @@ -0,0 +1,1032 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.36.10 +// protoc v3.21.12 +// source: waCompanionReg/WACompanionReg.proto + +package waCompanionReg + +import ( + reflect "reflect" + sync "sync" + unsafe "unsafe" + + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type DeviceProps_PlatformType int32 + +const ( + DeviceProps_UNKNOWN DeviceProps_PlatformType = 0 + DeviceProps_CHROME DeviceProps_PlatformType = 1 + DeviceProps_FIREFOX DeviceProps_PlatformType = 2 + DeviceProps_IE DeviceProps_PlatformType = 3 + DeviceProps_OPERA DeviceProps_PlatformType = 4 + DeviceProps_SAFARI DeviceProps_PlatformType = 5 + DeviceProps_EDGE DeviceProps_PlatformType = 6 + DeviceProps_DESKTOP DeviceProps_PlatformType = 7 + DeviceProps_IPAD DeviceProps_PlatformType = 8 + DeviceProps_ANDROID_TABLET DeviceProps_PlatformType = 9 + DeviceProps_OHANA DeviceProps_PlatformType = 10 + DeviceProps_ALOHA DeviceProps_PlatformType = 11 + DeviceProps_CATALINA DeviceProps_PlatformType = 12 + DeviceProps_TCL_TV DeviceProps_PlatformType = 13 + DeviceProps_IOS_PHONE DeviceProps_PlatformType = 14 + DeviceProps_IOS_CATALYST DeviceProps_PlatformType = 15 + DeviceProps_ANDROID_PHONE DeviceProps_PlatformType = 16 + DeviceProps_ANDROID_AMBIGUOUS DeviceProps_PlatformType = 17 + DeviceProps_WEAR_OS DeviceProps_PlatformType = 18 + DeviceProps_AR_WRIST DeviceProps_PlatformType = 19 + DeviceProps_AR_DEVICE DeviceProps_PlatformType = 20 + DeviceProps_UWP DeviceProps_PlatformType = 21 + DeviceProps_VR DeviceProps_PlatformType = 22 + DeviceProps_CLOUD_API DeviceProps_PlatformType = 23 + DeviceProps_SMARTGLASSES DeviceProps_PlatformType = 24 +) + +// Enum value maps for DeviceProps_PlatformType. +var ( + DeviceProps_PlatformType_name = map[int32]string{ + 0: "UNKNOWN", + 1: "CHROME", + 2: "FIREFOX", + 3: "IE", + 4: "OPERA", + 5: "SAFARI", + 6: "EDGE", + 7: "DESKTOP", + 8: "IPAD", + 9: "ANDROID_TABLET", + 10: "OHANA", + 11: "ALOHA", + 12: "CATALINA", + 13: "TCL_TV", + 14: "IOS_PHONE", + 15: "IOS_CATALYST", + 16: "ANDROID_PHONE", + 17: "ANDROID_AMBIGUOUS", + 18: "WEAR_OS", + 19: "AR_WRIST", + 20: "AR_DEVICE", + 21: "UWP", + 22: "VR", + 23: "CLOUD_API", + 24: "SMARTGLASSES", + } + DeviceProps_PlatformType_value = map[string]int32{ + "UNKNOWN": 0, + "CHROME": 1, + "FIREFOX": 2, + "IE": 3, + "OPERA": 4, + "SAFARI": 5, + "EDGE": 6, + "DESKTOP": 7, + "IPAD": 8, + "ANDROID_TABLET": 9, + "OHANA": 10, + "ALOHA": 11, + "CATALINA": 12, + "TCL_TV": 13, + "IOS_PHONE": 14, + "IOS_CATALYST": 15, + "ANDROID_PHONE": 16, + "ANDROID_AMBIGUOUS": 17, + "WEAR_OS": 18, + "AR_WRIST": 19, + "AR_DEVICE": 20, + "UWP": 21, + "VR": 22, + "CLOUD_API": 23, + "SMARTGLASSES": 24, + } +) + +func (x DeviceProps_PlatformType) Enum() *DeviceProps_PlatformType { + p := new(DeviceProps_PlatformType) + *p = x + return p +} + +func (x DeviceProps_PlatformType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (DeviceProps_PlatformType) Descriptor() protoreflect.EnumDescriptor { + return file_waCompanionReg_WACompanionReg_proto_enumTypes[0].Descriptor() +} + +func (DeviceProps_PlatformType) Type() protoreflect.EnumType { + return &file_waCompanionReg_WACompanionReg_proto_enumTypes[0] +} + +func (x DeviceProps_PlatformType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *DeviceProps_PlatformType) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = DeviceProps_PlatformType(num) + return nil +} + +// Deprecated: Use DeviceProps_PlatformType.Descriptor instead. +func (DeviceProps_PlatformType) EnumDescriptor() ([]byte, []int) { + return file_waCompanionReg_WACompanionReg_proto_rawDescGZIP(), []int{0, 0} +} + +type DeviceProps struct { + state protoimpl.MessageState `protogen:"open.v1"` + Os *string `protobuf:"bytes,1,opt,name=os" json:"os,omitempty"` + Version *DeviceProps_AppVersion `protobuf:"bytes,2,opt,name=version" json:"version,omitempty"` + PlatformType *DeviceProps_PlatformType `protobuf:"varint,3,opt,name=platformType,enum=WACompanionReg.DeviceProps_PlatformType" json:"platformType,omitempty"` + RequireFullSync *bool `protobuf:"varint,4,opt,name=requireFullSync" json:"requireFullSync,omitempty"` + HistorySyncConfig *DeviceProps_HistorySyncConfig `protobuf:"bytes,5,opt,name=historySyncConfig" json:"historySyncConfig,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *DeviceProps) Reset() { + *x = DeviceProps{} + mi := &file_waCompanionReg_WACompanionReg_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *DeviceProps) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DeviceProps) ProtoMessage() {} + +func (x *DeviceProps) ProtoReflect() protoreflect.Message { + mi := &file_waCompanionReg_WACompanionReg_proto_msgTypes[0] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DeviceProps.ProtoReflect.Descriptor instead. +func (*DeviceProps) Descriptor() ([]byte, []int) { + return file_waCompanionReg_WACompanionReg_proto_rawDescGZIP(), []int{0} +} + +func (x *DeviceProps) GetOs() string { + if x != nil && x.Os != nil { + return *x.Os + } + return "" +} + +func (x *DeviceProps) GetVersion() *DeviceProps_AppVersion { + if x != nil { + return x.Version + } + return nil +} + +func (x *DeviceProps) GetPlatformType() DeviceProps_PlatformType { + if x != nil && x.PlatformType != nil { + return *x.PlatformType + } + return DeviceProps_UNKNOWN +} + +func (x *DeviceProps) GetRequireFullSync() bool { + if x != nil && x.RequireFullSync != nil { + return *x.RequireFullSync + } + return false +} + +func (x *DeviceProps) GetHistorySyncConfig() *DeviceProps_HistorySyncConfig { + if x != nil { + return x.HistorySyncConfig + } + return nil +} + +type CompanionEphemeralIdentity struct { + state protoimpl.MessageState `protogen:"open.v1"` + PublicKey []byte `protobuf:"bytes,1,opt,name=publicKey" json:"publicKey,omitempty"` + DeviceType *DeviceProps_PlatformType `protobuf:"varint,2,opt,name=deviceType,enum=WACompanionReg.DeviceProps_PlatformType" json:"deviceType,omitempty"` + Ref *string `protobuf:"bytes,3,opt,name=ref" json:"ref,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *CompanionEphemeralIdentity) Reset() { + *x = CompanionEphemeralIdentity{} + mi := &file_waCompanionReg_WACompanionReg_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *CompanionEphemeralIdentity) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CompanionEphemeralIdentity) ProtoMessage() {} + +func (x *CompanionEphemeralIdentity) ProtoReflect() protoreflect.Message { + mi := &file_waCompanionReg_WACompanionReg_proto_msgTypes[1] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CompanionEphemeralIdentity.ProtoReflect.Descriptor instead. +func (*CompanionEphemeralIdentity) Descriptor() ([]byte, []int) { + return file_waCompanionReg_WACompanionReg_proto_rawDescGZIP(), []int{1} +} + +func (x *CompanionEphemeralIdentity) GetPublicKey() []byte { + if x != nil { + return x.PublicKey + } + return nil +} + +func (x *CompanionEphemeralIdentity) GetDeviceType() DeviceProps_PlatformType { + if x != nil && x.DeviceType != nil { + return *x.DeviceType + } + return DeviceProps_UNKNOWN +} + +func (x *CompanionEphemeralIdentity) GetRef() string { + if x != nil && x.Ref != nil { + return *x.Ref + } + return "" +} + +type CompanionCommitment struct { + state protoimpl.MessageState `protogen:"open.v1"` + Hash []byte `protobuf:"bytes,1,opt,name=hash" json:"hash,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *CompanionCommitment) Reset() { + *x = CompanionCommitment{} + mi := &file_waCompanionReg_WACompanionReg_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *CompanionCommitment) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CompanionCommitment) ProtoMessage() {} + +func (x *CompanionCommitment) ProtoReflect() protoreflect.Message { + mi := &file_waCompanionReg_WACompanionReg_proto_msgTypes[2] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CompanionCommitment.ProtoReflect.Descriptor instead. +func (*CompanionCommitment) Descriptor() ([]byte, []int) { + return file_waCompanionReg_WACompanionReg_proto_rawDescGZIP(), []int{2} +} + +func (x *CompanionCommitment) GetHash() []byte { + if x != nil { + return x.Hash + } + return nil +} + +type ProloguePayload struct { + state protoimpl.MessageState `protogen:"open.v1"` + CompanionEphemeralIdentity []byte `protobuf:"bytes,1,opt,name=companionEphemeralIdentity" json:"companionEphemeralIdentity,omitempty"` + Commitment *CompanionCommitment `protobuf:"bytes,2,opt,name=commitment" json:"commitment,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ProloguePayload) Reset() { + *x = ProloguePayload{} + mi := &file_waCompanionReg_WACompanionReg_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ProloguePayload) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ProloguePayload) ProtoMessage() {} + +func (x *ProloguePayload) ProtoReflect() protoreflect.Message { + mi := &file_waCompanionReg_WACompanionReg_proto_msgTypes[3] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ProloguePayload.ProtoReflect.Descriptor instead. +func (*ProloguePayload) Descriptor() ([]byte, []int) { + return file_waCompanionReg_WACompanionReg_proto_rawDescGZIP(), []int{3} +} + +func (x *ProloguePayload) GetCompanionEphemeralIdentity() []byte { + if x != nil { + return x.CompanionEphemeralIdentity + } + return nil +} + +func (x *ProloguePayload) GetCommitment() *CompanionCommitment { + if x != nil { + return x.Commitment + } + return nil +} + +type PrimaryEphemeralIdentity struct { + state protoimpl.MessageState `protogen:"open.v1"` + PublicKey []byte `protobuf:"bytes,1,opt,name=publicKey" json:"publicKey,omitempty"` + Nonce []byte `protobuf:"bytes,2,opt,name=nonce" json:"nonce,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *PrimaryEphemeralIdentity) Reset() { + *x = PrimaryEphemeralIdentity{} + mi := &file_waCompanionReg_WACompanionReg_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *PrimaryEphemeralIdentity) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PrimaryEphemeralIdentity) ProtoMessage() {} + +func (x *PrimaryEphemeralIdentity) ProtoReflect() protoreflect.Message { + mi := &file_waCompanionReg_WACompanionReg_proto_msgTypes[4] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PrimaryEphemeralIdentity.ProtoReflect.Descriptor instead. +func (*PrimaryEphemeralIdentity) Descriptor() ([]byte, []int) { + return file_waCompanionReg_WACompanionReg_proto_rawDescGZIP(), []int{4} +} + +func (x *PrimaryEphemeralIdentity) GetPublicKey() []byte { + if x != nil { + return x.PublicKey + } + return nil +} + +func (x *PrimaryEphemeralIdentity) GetNonce() []byte { + if x != nil { + return x.Nonce + } + return nil +} + +type PairingRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + CompanionPublicKey []byte `protobuf:"bytes,1,opt,name=companionPublicKey" json:"companionPublicKey,omitempty"` + CompanionIdentityKey []byte `protobuf:"bytes,2,opt,name=companionIdentityKey" json:"companionIdentityKey,omitempty"` + AdvSecret []byte `protobuf:"bytes,3,opt,name=advSecret" json:"advSecret,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *PairingRequest) Reset() { + *x = PairingRequest{} + mi := &file_waCompanionReg_WACompanionReg_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *PairingRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PairingRequest) ProtoMessage() {} + +func (x *PairingRequest) ProtoReflect() protoreflect.Message { + mi := &file_waCompanionReg_WACompanionReg_proto_msgTypes[5] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PairingRequest.ProtoReflect.Descriptor instead. +func (*PairingRequest) Descriptor() ([]byte, []int) { + return file_waCompanionReg_WACompanionReg_proto_rawDescGZIP(), []int{5} +} + +func (x *PairingRequest) GetCompanionPublicKey() []byte { + if x != nil { + return x.CompanionPublicKey + } + return nil +} + +func (x *PairingRequest) GetCompanionIdentityKey() []byte { + if x != nil { + return x.CompanionIdentityKey + } + return nil +} + +func (x *PairingRequest) GetAdvSecret() []byte { + if x != nil { + return x.AdvSecret + } + return nil +} + +type EncryptedPairingRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + EncryptedPayload []byte `protobuf:"bytes,1,opt,name=encryptedPayload" json:"encryptedPayload,omitempty"` + IV []byte `protobuf:"bytes,2,opt,name=IV" json:"IV,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *EncryptedPairingRequest) Reset() { + *x = EncryptedPairingRequest{} + mi := &file_waCompanionReg_WACompanionReg_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *EncryptedPairingRequest) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EncryptedPairingRequest) ProtoMessage() {} + +func (x *EncryptedPairingRequest) ProtoReflect() protoreflect.Message { + mi := &file_waCompanionReg_WACompanionReg_proto_msgTypes[6] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use EncryptedPairingRequest.ProtoReflect.Descriptor instead. +func (*EncryptedPairingRequest) Descriptor() ([]byte, []int) { + return file_waCompanionReg_WACompanionReg_proto_rawDescGZIP(), []int{6} +} + +func (x *EncryptedPairingRequest) GetEncryptedPayload() []byte { + if x != nil { + return x.EncryptedPayload + } + return nil +} + +func (x *EncryptedPairingRequest) GetIV() []byte { + if x != nil { + return x.IV + } + return nil +} + +type ClientPairingProps struct { + state protoimpl.MessageState `protogen:"open.v1"` + IsChatDbLidMigrated *bool `protobuf:"varint,1,opt,name=isChatDbLidMigrated" json:"isChatDbLidMigrated,omitempty"` + IsSyncdPureLidSession *bool `protobuf:"varint,2,opt,name=isSyncdPureLidSession" json:"isSyncdPureLidSession,omitempty"` + IsSyncdSnapshotRecoveryEnabled *bool `protobuf:"varint,3,opt,name=isSyncdSnapshotRecoveryEnabled" json:"isSyncdSnapshotRecoveryEnabled,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ClientPairingProps) Reset() { + *x = ClientPairingProps{} + mi := &file_waCompanionReg_WACompanionReg_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ClientPairingProps) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ClientPairingProps) ProtoMessage() {} + +func (x *ClientPairingProps) ProtoReflect() protoreflect.Message { + mi := &file_waCompanionReg_WACompanionReg_proto_msgTypes[7] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ClientPairingProps.ProtoReflect.Descriptor instead. +func (*ClientPairingProps) Descriptor() ([]byte, []int) { + return file_waCompanionReg_WACompanionReg_proto_rawDescGZIP(), []int{7} +} + +func (x *ClientPairingProps) GetIsChatDbLidMigrated() bool { + if x != nil && x.IsChatDbLidMigrated != nil { + return *x.IsChatDbLidMigrated + } + return false +} + +func (x *ClientPairingProps) GetIsSyncdPureLidSession() bool { + if x != nil && x.IsSyncdPureLidSession != nil { + return *x.IsSyncdPureLidSession + } + return false +} + +func (x *ClientPairingProps) GetIsSyncdSnapshotRecoveryEnabled() bool { + if x != nil && x.IsSyncdSnapshotRecoveryEnabled != nil { + return *x.IsSyncdSnapshotRecoveryEnabled + } + return false +} + +type DeviceProps_HistorySyncConfig struct { + state protoimpl.MessageState `protogen:"open.v1"` + FullSyncDaysLimit *uint32 `protobuf:"varint,1,opt,name=fullSyncDaysLimit" json:"fullSyncDaysLimit,omitempty"` + FullSyncSizeMbLimit *uint32 `protobuf:"varint,2,opt,name=fullSyncSizeMbLimit" json:"fullSyncSizeMbLimit,omitempty"` + StorageQuotaMb *uint32 `protobuf:"varint,3,opt,name=storageQuotaMb" json:"storageQuotaMb,omitempty"` + InlineInitialPayloadInE2EeMsg *bool `protobuf:"varint,4,opt,name=inlineInitialPayloadInE2EeMsg" json:"inlineInitialPayloadInE2EeMsg,omitempty"` + RecentSyncDaysLimit *uint32 `protobuf:"varint,5,opt,name=recentSyncDaysLimit" json:"recentSyncDaysLimit,omitempty"` + SupportCallLogHistory *bool `protobuf:"varint,6,opt,name=supportCallLogHistory" json:"supportCallLogHistory,omitempty"` + SupportBotUserAgentChatHistory *bool `protobuf:"varint,7,opt,name=supportBotUserAgentChatHistory" json:"supportBotUserAgentChatHistory,omitempty"` + SupportCagReactionsAndPolls *bool `protobuf:"varint,8,opt,name=supportCagReactionsAndPolls" json:"supportCagReactionsAndPolls,omitempty"` + SupportBizHostedMsg *bool `protobuf:"varint,9,opt,name=supportBizHostedMsg" json:"supportBizHostedMsg,omitempty"` + SupportRecentSyncChunkMessageCountTuning *bool `protobuf:"varint,10,opt,name=supportRecentSyncChunkMessageCountTuning" json:"supportRecentSyncChunkMessageCountTuning,omitempty"` + SupportHostedGroupMsg *bool `protobuf:"varint,11,opt,name=supportHostedGroupMsg" json:"supportHostedGroupMsg,omitempty"` + SupportFbidBotChatHistory *bool `protobuf:"varint,12,opt,name=supportFbidBotChatHistory" json:"supportFbidBotChatHistory,omitempty"` + SupportAddOnHistorySyncMigration *bool `protobuf:"varint,13,opt,name=supportAddOnHistorySyncMigration" json:"supportAddOnHistorySyncMigration,omitempty"` + SupportMessageAssociation *bool `protobuf:"varint,14,opt,name=supportMessageAssociation" json:"supportMessageAssociation,omitempty"` + SupportGroupHistory *bool `protobuf:"varint,15,opt,name=supportGroupHistory" json:"supportGroupHistory,omitempty"` + OnDemandReady *bool `protobuf:"varint,16,opt,name=onDemandReady" json:"onDemandReady,omitempty"` + SupportGuestChat *bool `protobuf:"varint,17,opt,name=supportGuestChat" json:"supportGuestChat,omitempty"` + CompleteOnDemandReady *bool `protobuf:"varint,18,opt,name=completeOnDemandReady" json:"completeOnDemandReady,omitempty"` + ThumbnailSyncDaysLimit *uint32 `protobuf:"varint,19,opt,name=thumbnailSyncDaysLimit" json:"thumbnailSyncDaysLimit,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *DeviceProps_HistorySyncConfig) Reset() { + *x = DeviceProps_HistorySyncConfig{} + mi := &file_waCompanionReg_WACompanionReg_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *DeviceProps_HistorySyncConfig) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DeviceProps_HistorySyncConfig) ProtoMessage() {} + +func (x *DeviceProps_HistorySyncConfig) ProtoReflect() protoreflect.Message { + mi := &file_waCompanionReg_WACompanionReg_proto_msgTypes[8] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DeviceProps_HistorySyncConfig.ProtoReflect.Descriptor instead. +func (*DeviceProps_HistorySyncConfig) Descriptor() ([]byte, []int) { + return file_waCompanionReg_WACompanionReg_proto_rawDescGZIP(), []int{0, 0} +} + +func (x *DeviceProps_HistorySyncConfig) GetFullSyncDaysLimit() uint32 { + if x != nil && x.FullSyncDaysLimit != nil { + return *x.FullSyncDaysLimit + } + return 0 +} + +func (x *DeviceProps_HistorySyncConfig) GetFullSyncSizeMbLimit() uint32 { + if x != nil && x.FullSyncSizeMbLimit != nil { + return *x.FullSyncSizeMbLimit + } + return 0 +} + +func (x *DeviceProps_HistorySyncConfig) GetStorageQuotaMb() uint32 { + if x != nil && x.StorageQuotaMb != nil { + return *x.StorageQuotaMb + } + return 0 +} + +func (x *DeviceProps_HistorySyncConfig) GetInlineInitialPayloadInE2EeMsg() bool { + if x != nil && x.InlineInitialPayloadInE2EeMsg != nil { + return *x.InlineInitialPayloadInE2EeMsg + } + return false +} + +func (x *DeviceProps_HistorySyncConfig) GetRecentSyncDaysLimit() uint32 { + if x != nil && x.RecentSyncDaysLimit != nil { + return *x.RecentSyncDaysLimit + } + return 0 +} + +func (x *DeviceProps_HistorySyncConfig) GetSupportCallLogHistory() bool { + if x != nil && x.SupportCallLogHistory != nil { + return *x.SupportCallLogHistory + } + return false +} + +func (x *DeviceProps_HistorySyncConfig) GetSupportBotUserAgentChatHistory() bool { + if x != nil && x.SupportBotUserAgentChatHistory != nil { + return *x.SupportBotUserAgentChatHistory + } + return false +} + +func (x *DeviceProps_HistorySyncConfig) GetSupportCagReactionsAndPolls() bool { + if x != nil && x.SupportCagReactionsAndPolls != nil { + return *x.SupportCagReactionsAndPolls + } + return false +} + +func (x *DeviceProps_HistorySyncConfig) GetSupportBizHostedMsg() bool { + if x != nil && x.SupportBizHostedMsg != nil { + return *x.SupportBizHostedMsg + } + return false +} + +func (x *DeviceProps_HistorySyncConfig) GetSupportRecentSyncChunkMessageCountTuning() bool { + if x != nil && x.SupportRecentSyncChunkMessageCountTuning != nil { + return *x.SupportRecentSyncChunkMessageCountTuning + } + return false +} + +func (x *DeviceProps_HistorySyncConfig) GetSupportHostedGroupMsg() bool { + if x != nil && x.SupportHostedGroupMsg != nil { + return *x.SupportHostedGroupMsg + } + return false +} + +func (x *DeviceProps_HistorySyncConfig) GetSupportFbidBotChatHistory() bool { + if x != nil && x.SupportFbidBotChatHistory != nil { + return *x.SupportFbidBotChatHistory + } + return false +} + +func (x *DeviceProps_HistorySyncConfig) GetSupportAddOnHistorySyncMigration() bool { + if x != nil && x.SupportAddOnHistorySyncMigration != nil { + return *x.SupportAddOnHistorySyncMigration + } + return false +} + +func (x *DeviceProps_HistorySyncConfig) GetSupportMessageAssociation() bool { + if x != nil && x.SupportMessageAssociation != nil { + return *x.SupportMessageAssociation + } + return false +} + +func (x *DeviceProps_HistorySyncConfig) GetSupportGroupHistory() bool { + if x != nil && x.SupportGroupHistory != nil { + return *x.SupportGroupHistory + } + return false +} + +func (x *DeviceProps_HistorySyncConfig) GetOnDemandReady() bool { + if x != nil && x.OnDemandReady != nil { + return *x.OnDemandReady + } + return false +} + +func (x *DeviceProps_HistorySyncConfig) GetSupportGuestChat() bool { + if x != nil && x.SupportGuestChat != nil { + return *x.SupportGuestChat + } + return false +} + +func (x *DeviceProps_HistorySyncConfig) GetCompleteOnDemandReady() bool { + if x != nil && x.CompleteOnDemandReady != nil { + return *x.CompleteOnDemandReady + } + return false +} + +func (x *DeviceProps_HistorySyncConfig) GetThumbnailSyncDaysLimit() uint32 { + if x != nil && x.ThumbnailSyncDaysLimit != nil { + return *x.ThumbnailSyncDaysLimit + } + return 0 +} + +type DeviceProps_AppVersion struct { + state protoimpl.MessageState `protogen:"open.v1"` + Primary *uint32 `protobuf:"varint,1,opt,name=primary" json:"primary,omitempty"` + Secondary *uint32 `protobuf:"varint,2,opt,name=secondary" json:"secondary,omitempty"` + Tertiary *uint32 `protobuf:"varint,3,opt,name=tertiary" json:"tertiary,omitempty"` + Quaternary *uint32 `protobuf:"varint,4,opt,name=quaternary" json:"quaternary,omitempty"` + Quinary *uint32 `protobuf:"varint,5,opt,name=quinary" json:"quinary,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *DeviceProps_AppVersion) Reset() { + *x = DeviceProps_AppVersion{} + mi := &file_waCompanionReg_WACompanionReg_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *DeviceProps_AppVersion) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DeviceProps_AppVersion) ProtoMessage() {} + +func (x *DeviceProps_AppVersion) ProtoReflect() protoreflect.Message { + mi := &file_waCompanionReg_WACompanionReg_proto_msgTypes[9] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DeviceProps_AppVersion.ProtoReflect.Descriptor instead. +func (*DeviceProps_AppVersion) Descriptor() ([]byte, []int) { + return file_waCompanionReg_WACompanionReg_proto_rawDescGZIP(), []int{0, 1} +} + +func (x *DeviceProps_AppVersion) GetPrimary() uint32 { + if x != nil && x.Primary != nil { + return *x.Primary + } + return 0 +} + +func (x *DeviceProps_AppVersion) GetSecondary() uint32 { + if x != nil && x.Secondary != nil { + return *x.Secondary + } + return 0 +} + +func (x *DeviceProps_AppVersion) GetTertiary() uint32 { + if x != nil && x.Tertiary != nil { + return *x.Tertiary + } + return 0 +} + +func (x *DeviceProps_AppVersion) GetQuaternary() uint32 { + if x != nil && x.Quaternary != nil { + return *x.Quaternary + } + return 0 +} + +func (x *DeviceProps_AppVersion) GetQuinary() uint32 { + if x != nil && x.Quinary != nil { + return *x.Quinary + } + return 0 +} + +var File_waCompanionReg_WACompanionReg_proto protoreflect.FileDescriptor + +const file_waCompanionReg_WACompanionReg_proto_rawDesc = "" + + "\n" + + "#waCompanionReg/WACompanionReg.proto\x12\x0eWACompanionReg\"\x87\x0f\n" + + "\vDeviceProps\x12\x0e\n" + + "\x02os\x18\x01 \x01(\tR\x02os\x12@\n" + + "\aversion\x18\x02 \x01(\v2&.WACompanionReg.DeviceProps.AppVersionR\aversion\x12L\n" + + "\fplatformType\x18\x03 \x01(\x0e2(.WACompanionReg.DeviceProps.PlatformTypeR\fplatformType\x12(\n" + + "\x0frequireFullSync\x18\x04 \x01(\bR\x0frequireFullSync\x12[\n" + + "\x11historySyncConfig\x18\x05 \x01(\v2-.WACompanionReg.DeviceProps.HistorySyncConfigR\x11historySyncConfig\x1a\xd1\b\n" + + "\x11HistorySyncConfig\x12,\n" + + "\x11fullSyncDaysLimit\x18\x01 \x01(\rR\x11fullSyncDaysLimit\x120\n" + + "\x13fullSyncSizeMbLimit\x18\x02 \x01(\rR\x13fullSyncSizeMbLimit\x12&\n" + + "\x0estorageQuotaMb\x18\x03 \x01(\rR\x0estorageQuotaMb\x12D\n" + + "\x1dinlineInitialPayloadInE2EeMsg\x18\x04 \x01(\bR\x1dinlineInitialPayloadInE2EeMsg\x120\n" + + "\x13recentSyncDaysLimit\x18\x05 \x01(\rR\x13recentSyncDaysLimit\x124\n" + + "\x15supportCallLogHistory\x18\x06 \x01(\bR\x15supportCallLogHistory\x12F\n" + + "\x1esupportBotUserAgentChatHistory\x18\a \x01(\bR\x1esupportBotUserAgentChatHistory\x12@\n" + + "\x1bsupportCagReactionsAndPolls\x18\b \x01(\bR\x1bsupportCagReactionsAndPolls\x120\n" + + "\x13supportBizHostedMsg\x18\t \x01(\bR\x13supportBizHostedMsg\x12Z\n" + + "(supportRecentSyncChunkMessageCountTuning\x18\n" + + " \x01(\bR(supportRecentSyncChunkMessageCountTuning\x124\n" + + "\x15supportHostedGroupMsg\x18\v \x01(\bR\x15supportHostedGroupMsg\x12<\n" + + "\x19supportFbidBotChatHistory\x18\f \x01(\bR\x19supportFbidBotChatHistory\x12J\n" + + " supportAddOnHistorySyncMigration\x18\r \x01(\bR supportAddOnHistorySyncMigration\x12<\n" + + "\x19supportMessageAssociation\x18\x0e \x01(\bR\x19supportMessageAssociation\x120\n" + + "\x13supportGroupHistory\x18\x0f \x01(\bR\x13supportGroupHistory\x12$\n" + + "\ronDemandReady\x18\x10 \x01(\bR\ronDemandReady\x12*\n" + + "\x10supportGuestChat\x18\x11 \x01(\bR\x10supportGuestChat\x124\n" + + "\x15completeOnDemandReady\x18\x12 \x01(\bR\x15completeOnDemandReady\x126\n" + + "\x16thumbnailSyncDaysLimit\x18\x13 \x01(\rR\x16thumbnailSyncDaysLimit\x1a\x9a\x01\n" + + "\n" + + "AppVersion\x12\x18\n" + + "\aprimary\x18\x01 \x01(\rR\aprimary\x12\x1c\n" + + "\tsecondary\x18\x02 \x01(\rR\tsecondary\x12\x1a\n" + + "\btertiary\x18\x03 \x01(\rR\btertiary\x12\x1e\n" + + "\n" + + "quaternary\x18\x04 \x01(\rR\n" + + "quaternary\x12\x18\n" + + "\aquinary\x18\x05 \x01(\rR\aquinary\"\xdf\x02\n" + + "\fPlatformType\x12\v\n" + + "\aUNKNOWN\x10\x00\x12\n" + + "\n" + + "\x06CHROME\x10\x01\x12\v\n" + + "\aFIREFOX\x10\x02\x12\x06\n" + + "\x02IE\x10\x03\x12\t\n" + + "\x05OPERA\x10\x04\x12\n" + + "\n" + + "\x06SAFARI\x10\x05\x12\b\n" + + "\x04EDGE\x10\x06\x12\v\n" + + "\aDESKTOP\x10\a\x12\b\n" + + "\x04IPAD\x10\b\x12\x12\n" + + "\x0eANDROID_TABLET\x10\t\x12\t\n" + + "\x05OHANA\x10\n" + + "\x12\t\n" + + "\x05ALOHA\x10\v\x12\f\n" + + "\bCATALINA\x10\f\x12\n" + + "\n" + + "\x06TCL_TV\x10\r\x12\r\n" + + "\tIOS_PHONE\x10\x0e\x12\x10\n" + + "\fIOS_CATALYST\x10\x0f\x12\x11\n" + + "\rANDROID_PHONE\x10\x10\x12\x15\n" + + "\x11ANDROID_AMBIGUOUS\x10\x11\x12\v\n" + + "\aWEAR_OS\x10\x12\x12\f\n" + + "\bAR_WRIST\x10\x13\x12\r\n" + + "\tAR_DEVICE\x10\x14\x12\a\n" + + "\x03UWP\x10\x15\x12\x06\n" + + "\x02VR\x10\x16\x12\r\n" + + "\tCLOUD_API\x10\x17\x12\x10\n" + + "\fSMARTGLASSES\x10\x18\"\x96\x01\n" + + "\x1aCompanionEphemeralIdentity\x12\x1c\n" + + "\tpublicKey\x18\x01 \x01(\fR\tpublicKey\x12H\n" + + "\n" + + "deviceType\x18\x02 \x01(\x0e2(.WACompanionReg.DeviceProps.PlatformTypeR\n" + + "deviceType\x12\x10\n" + + "\x03ref\x18\x03 \x01(\tR\x03ref\")\n" + + "\x13CompanionCommitment\x12\x12\n" + + "\x04hash\x18\x01 \x01(\fR\x04hash\"\x96\x01\n" + + "\x0fProloguePayload\x12>\n" + + "\x1acompanionEphemeralIdentity\x18\x01 \x01(\fR\x1acompanionEphemeralIdentity\x12C\n" + + "\n" + + "commitment\x18\x02 \x01(\v2#.WACompanionReg.CompanionCommitmentR\n" + + "commitment\"N\n" + + "\x18PrimaryEphemeralIdentity\x12\x1c\n" + + "\tpublicKey\x18\x01 \x01(\fR\tpublicKey\x12\x14\n" + + "\x05nonce\x18\x02 \x01(\fR\x05nonce\"\x92\x01\n" + + "\x0ePairingRequest\x12.\n" + + "\x12companionPublicKey\x18\x01 \x01(\fR\x12companionPublicKey\x122\n" + + "\x14companionIdentityKey\x18\x02 \x01(\fR\x14companionIdentityKey\x12\x1c\n" + + "\tadvSecret\x18\x03 \x01(\fR\tadvSecret\"U\n" + + "\x17EncryptedPairingRequest\x12*\n" + + "\x10encryptedPayload\x18\x01 \x01(\fR\x10encryptedPayload\x12\x0e\n" + + "\x02IV\x18\x02 \x01(\fR\x02IV\"\xc4\x01\n" + + "\x12ClientPairingProps\x120\n" + + "\x13isChatDbLidMigrated\x18\x01 \x01(\bR\x13isChatDbLidMigrated\x124\n" + + "\x15isSyncdPureLidSession\x18\x02 \x01(\bR\x15isSyncdPureLidSession\x12F\n" + + "\x1eisSyncdSnapshotRecoveryEnabled\x18\x03 \x01(\bR\x1eisSyncdSnapshotRecoveryEnabledB*Z(go.mau.fi/whatsmeow/proto/waCompanionReg" + +var ( + file_waCompanionReg_WACompanionReg_proto_rawDescOnce sync.Once + file_waCompanionReg_WACompanionReg_proto_rawDescData []byte +) + +func file_waCompanionReg_WACompanionReg_proto_rawDescGZIP() []byte { + file_waCompanionReg_WACompanionReg_proto_rawDescOnce.Do(func() { + file_waCompanionReg_WACompanionReg_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_waCompanionReg_WACompanionReg_proto_rawDesc), len(file_waCompanionReg_WACompanionReg_proto_rawDesc))) + }) + return file_waCompanionReg_WACompanionReg_proto_rawDescData +} + +var file_waCompanionReg_WACompanionReg_proto_enumTypes = make([]protoimpl.EnumInfo, 1) +var file_waCompanionReg_WACompanionReg_proto_msgTypes = make([]protoimpl.MessageInfo, 10) +var file_waCompanionReg_WACompanionReg_proto_goTypes = []any{ + (DeviceProps_PlatformType)(0), // 0: WACompanionReg.DeviceProps.PlatformType + (*DeviceProps)(nil), // 1: WACompanionReg.DeviceProps + (*CompanionEphemeralIdentity)(nil), // 2: WACompanionReg.CompanionEphemeralIdentity + (*CompanionCommitment)(nil), // 3: WACompanionReg.CompanionCommitment + (*ProloguePayload)(nil), // 4: WACompanionReg.ProloguePayload + (*PrimaryEphemeralIdentity)(nil), // 5: WACompanionReg.PrimaryEphemeralIdentity + (*PairingRequest)(nil), // 6: WACompanionReg.PairingRequest + (*EncryptedPairingRequest)(nil), // 7: WACompanionReg.EncryptedPairingRequest + (*ClientPairingProps)(nil), // 8: WACompanionReg.ClientPairingProps + (*DeviceProps_HistorySyncConfig)(nil), // 9: WACompanionReg.DeviceProps.HistorySyncConfig + (*DeviceProps_AppVersion)(nil), // 10: WACompanionReg.DeviceProps.AppVersion +} +var file_waCompanionReg_WACompanionReg_proto_depIdxs = []int32{ + 10, // 0: WACompanionReg.DeviceProps.version:type_name -> WACompanionReg.DeviceProps.AppVersion + 0, // 1: WACompanionReg.DeviceProps.platformType:type_name -> WACompanionReg.DeviceProps.PlatformType + 9, // 2: WACompanionReg.DeviceProps.historySyncConfig:type_name -> WACompanionReg.DeviceProps.HistorySyncConfig + 0, // 3: WACompanionReg.CompanionEphemeralIdentity.deviceType:type_name -> WACompanionReg.DeviceProps.PlatformType + 3, // 4: WACompanionReg.ProloguePayload.commitment:type_name -> WACompanionReg.CompanionCommitment + 5, // [5:5] is the sub-list for method output_type + 5, // [5:5] is the sub-list for method input_type + 5, // [5:5] is the sub-list for extension type_name + 5, // [5:5] is the sub-list for extension extendee + 0, // [0:5] is the sub-list for field type_name +} + +func init() { file_waCompanionReg_WACompanionReg_proto_init() } +func file_waCompanionReg_WACompanionReg_proto_init() { + if File_waCompanionReg_WACompanionReg_proto != nil { + return + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: unsafe.Slice(unsafe.StringData(file_waCompanionReg_WACompanionReg_proto_rawDesc), len(file_waCompanionReg_WACompanionReg_proto_rawDesc)), + NumEnums: 1, + NumMessages: 10, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_waCompanionReg_WACompanionReg_proto_goTypes, + DependencyIndexes: file_waCompanionReg_WACompanionReg_proto_depIdxs, + EnumInfos: file_waCompanionReg_WACompanionReg_proto_enumTypes, + MessageInfos: file_waCompanionReg_WACompanionReg_proto_msgTypes, + }.Build() + File_waCompanionReg_WACompanionReg_proto = out.File + file_waCompanionReg_WACompanionReg_proto_goTypes = nil + file_waCompanionReg_WACompanionReg_proto_depIdxs = nil +} diff --git a/vendor/go.mau.fi/whatsmeow/proto/waCompanionReg/WAWebProtobufsCompanionReg.proto b/vendor/go.mau.fi/whatsmeow/proto/waCompanionReg/WACompanionReg.proto similarity index 70% rename from vendor/go.mau.fi/whatsmeow/proto/waCompanionReg/WAWebProtobufsCompanionReg.proto rename to vendor/go.mau.fi/whatsmeow/proto/waCompanionReg/WACompanionReg.proto index b490e9897d..9c759161dd 100644 --- a/vendor/go.mau.fi/whatsmeow/proto/waCompanionReg/WAWebProtobufsCompanionReg.proto +++ b/vendor/go.mau.fi/whatsmeow/proto/waCompanionReg/WACompanionReg.proto @@ -1,5 +1,5 @@ syntax = "proto2"; -package WAWebProtobufsCompanionReg; +package WACompanionReg; option go_package = "go.mau.fi/whatsmeow/proto/waCompanionReg"; message DeviceProps { @@ -28,6 +28,7 @@ message DeviceProps { UWP = 21; VR = 22; CLOUD_API = 23; + SMARTGLASSES = 24; } message HistorySyncConfig { @@ -43,6 +44,13 @@ message DeviceProps { optional bool supportRecentSyncChunkMessageCountTuning = 10; optional bool supportHostedGroupMsg = 11; optional bool supportFbidBotChatHistory = 12; + optional bool supportAddOnHistorySyncMigration = 13; + optional bool supportMessageAssociation = 14; + optional bool supportGroupHistory = 15; + optional bool onDemandReady = 16; + optional bool supportGuestChat = 17; + optional bool completeOnDemandReady = 18; + optional uint32 thumbnailSyncDaysLimit = 19; } message AppVersion { @@ -66,8 +74,24 @@ message CompanionEphemeralIdentity { optional string ref = 3; } +message CompanionCommitment { + optional bytes hash = 1; +} + +message ProloguePayload { + optional bytes companionEphemeralIdentity = 1; + optional CompanionCommitment commitment = 2; +} + message PrimaryEphemeralIdentity { optional bytes publicKey = 1; + optional bytes nonce = 2; +} + +message PairingRequest { + optional bytes companionPublicKey = 1; + optional bytes companionIdentityKey = 2; + optional bytes advSecret = 3; } message EncryptedPairingRequest { @@ -77,4 +101,6 @@ message EncryptedPairingRequest { message ClientPairingProps { optional bool isChatDbLidMigrated = 1; + optional bool isSyncdPureLidSession = 2; + optional bool isSyncdSnapshotRecoveryEnabled = 3; } diff --git a/vendor/go.mau.fi/whatsmeow/proto/waCompanionReg/WAWebProtobufsCompanionReg.pb.go b/vendor/go.mau.fi/whatsmeow/proto/waCompanionReg/WAWebProtobufsCompanionReg.pb.go deleted file mode 100644 index 9e7ef79bd2..0000000000 --- a/vendor/go.mau.fi/whatsmeow/proto/waCompanionReg/WAWebProtobufsCompanionReg.pb.go +++ /dev/null @@ -1,804 +0,0 @@ -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.34.2 -// protoc v3.21.12 -// source: waCompanionReg/WAWebProtobufsCompanionReg.proto - -package waCompanionReg - -import ( - reflect "reflect" - sync "sync" - - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - - _ "embed" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -type DeviceProps_PlatformType int32 - -const ( - DeviceProps_UNKNOWN DeviceProps_PlatformType = 0 - DeviceProps_CHROME DeviceProps_PlatformType = 1 - DeviceProps_FIREFOX DeviceProps_PlatformType = 2 - DeviceProps_IE DeviceProps_PlatformType = 3 - DeviceProps_OPERA DeviceProps_PlatformType = 4 - DeviceProps_SAFARI DeviceProps_PlatformType = 5 - DeviceProps_EDGE DeviceProps_PlatformType = 6 - DeviceProps_DESKTOP DeviceProps_PlatformType = 7 - DeviceProps_IPAD DeviceProps_PlatformType = 8 - DeviceProps_ANDROID_TABLET DeviceProps_PlatformType = 9 - DeviceProps_OHANA DeviceProps_PlatformType = 10 - DeviceProps_ALOHA DeviceProps_PlatformType = 11 - DeviceProps_CATALINA DeviceProps_PlatformType = 12 - DeviceProps_TCL_TV DeviceProps_PlatformType = 13 - DeviceProps_IOS_PHONE DeviceProps_PlatformType = 14 - DeviceProps_IOS_CATALYST DeviceProps_PlatformType = 15 - DeviceProps_ANDROID_PHONE DeviceProps_PlatformType = 16 - DeviceProps_ANDROID_AMBIGUOUS DeviceProps_PlatformType = 17 - DeviceProps_WEAR_OS DeviceProps_PlatformType = 18 - DeviceProps_AR_WRIST DeviceProps_PlatformType = 19 - DeviceProps_AR_DEVICE DeviceProps_PlatformType = 20 - DeviceProps_UWP DeviceProps_PlatformType = 21 - DeviceProps_VR DeviceProps_PlatformType = 22 - DeviceProps_CLOUD_API DeviceProps_PlatformType = 23 -) - -// Enum value maps for DeviceProps_PlatformType. -var ( - DeviceProps_PlatformType_name = map[int32]string{ - 0: "UNKNOWN", - 1: "CHROME", - 2: "FIREFOX", - 3: "IE", - 4: "OPERA", - 5: "SAFARI", - 6: "EDGE", - 7: "DESKTOP", - 8: "IPAD", - 9: "ANDROID_TABLET", - 10: "OHANA", - 11: "ALOHA", - 12: "CATALINA", - 13: "TCL_TV", - 14: "IOS_PHONE", - 15: "IOS_CATALYST", - 16: "ANDROID_PHONE", - 17: "ANDROID_AMBIGUOUS", - 18: "WEAR_OS", - 19: "AR_WRIST", - 20: "AR_DEVICE", - 21: "UWP", - 22: "VR", - 23: "CLOUD_API", - } - DeviceProps_PlatformType_value = map[string]int32{ - "UNKNOWN": 0, - "CHROME": 1, - "FIREFOX": 2, - "IE": 3, - "OPERA": 4, - "SAFARI": 5, - "EDGE": 6, - "DESKTOP": 7, - "IPAD": 8, - "ANDROID_TABLET": 9, - "OHANA": 10, - "ALOHA": 11, - "CATALINA": 12, - "TCL_TV": 13, - "IOS_PHONE": 14, - "IOS_CATALYST": 15, - "ANDROID_PHONE": 16, - "ANDROID_AMBIGUOUS": 17, - "WEAR_OS": 18, - "AR_WRIST": 19, - "AR_DEVICE": 20, - "UWP": 21, - "VR": 22, - "CLOUD_API": 23, - } -) - -func (x DeviceProps_PlatformType) Enum() *DeviceProps_PlatformType { - p := new(DeviceProps_PlatformType) - *p = x - return p -} - -func (x DeviceProps_PlatformType) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (DeviceProps_PlatformType) Descriptor() protoreflect.EnumDescriptor { - return file_waCompanionReg_WAWebProtobufsCompanionReg_proto_enumTypes[0].Descriptor() -} - -func (DeviceProps_PlatformType) Type() protoreflect.EnumType { - return &file_waCompanionReg_WAWebProtobufsCompanionReg_proto_enumTypes[0] -} - -func (x DeviceProps_PlatformType) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Do not use. -func (x *DeviceProps_PlatformType) UnmarshalJSON(b []byte) error { - num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) - if err != nil { - return err - } - *x = DeviceProps_PlatformType(num) - return nil -} - -// Deprecated: Use DeviceProps_PlatformType.Descriptor instead. -func (DeviceProps_PlatformType) EnumDescriptor() ([]byte, []int) { - return file_waCompanionReg_WAWebProtobufsCompanionReg_proto_rawDescGZIP(), []int{0, 0} -} - -type DeviceProps struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Os *string `protobuf:"bytes,1,opt,name=os" json:"os,omitempty"` - Version *DeviceProps_AppVersion `protobuf:"bytes,2,opt,name=version" json:"version,omitempty"` - PlatformType *DeviceProps_PlatformType `protobuf:"varint,3,opt,name=platformType,enum=WAWebProtobufsCompanionReg.DeviceProps_PlatformType" json:"platformType,omitempty"` - RequireFullSync *bool `protobuf:"varint,4,opt,name=requireFullSync" json:"requireFullSync,omitempty"` - HistorySyncConfig *DeviceProps_HistorySyncConfig `protobuf:"bytes,5,opt,name=historySyncConfig" json:"historySyncConfig,omitempty"` -} - -func (x *DeviceProps) Reset() { - *x = DeviceProps{} - if protoimpl.UnsafeEnabled { - mi := &file_waCompanionReg_WAWebProtobufsCompanionReg_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *DeviceProps) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*DeviceProps) ProtoMessage() {} - -func (x *DeviceProps) ProtoReflect() protoreflect.Message { - mi := &file_waCompanionReg_WAWebProtobufsCompanionReg_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use DeviceProps.ProtoReflect.Descriptor instead. -func (*DeviceProps) Descriptor() ([]byte, []int) { - return file_waCompanionReg_WAWebProtobufsCompanionReg_proto_rawDescGZIP(), []int{0} -} - -func (x *DeviceProps) GetOs() string { - if x != nil && x.Os != nil { - return *x.Os - } - return "" -} - -func (x *DeviceProps) GetVersion() *DeviceProps_AppVersion { - if x != nil { - return x.Version - } - return nil -} - -func (x *DeviceProps) GetPlatformType() DeviceProps_PlatformType { - if x != nil && x.PlatformType != nil { - return *x.PlatformType - } - return DeviceProps_UNKNOWN -} - -func (x *DeviceProps) GetRequireFullSync() bool { - if x != nil && x.RequireFullSync != nil { - return *x.RequireFullSync - } - return false -} - -func (x *DeviceProps) GetHistorySyncConfig() *DeviceProps_HistorySyncConfig { - if x != nil { - return x.HistorySyncConfig - } - return nil -} - -type CompanionEphemeralIdentity struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - PublicKey []byte `protobuf:"bytes,1,opt,name=publicKey" json:"publicKey,omitempty"` - DeviceType *DeviceProps_PlatformType `protobuf:"varint,2,opt,name=deviceType,enum=WAWebProtobufsCompanionReg.DeviceProps_PlatformType" json:"deviceType,omitempty"` - Ref *string `protobuf:"bytes,3,opt,name=ref" json:"ref,omitempty"` -} - -func (x *CompanionEphemeralIdentity) Reset() { - *x = CompanionEphemeralIdentity{} - if protoimpl.UnsafeEnabled { - mi := &file_waCompanionReg_WAWebProtobufsCompanionReg_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CompanionEphemeralIdentity) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CompanionEphemeralIdentity) ProtoMessage() {} - -func (x *CompanionEphemeralIdentity) ProtoReflect() protoreflect.Message { - mi := &file_waCompanionReg_WAWebProtobufsCompanionReg_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use CompanionEphemeralIdentity.ProtoReflect.Descriptor instead. -func (*CompanionEphemeralIdentity) Descriptor() ([]byte, []int) { - return file_waCompanionReg_WAWebProtobufsCompanionReg_proto_rawDescGZIP(), []int{1} -} - -func (x *CompanionEphemeralIdentity) GetPublicKey() []byte { - if x != nil { - return x.PublicKey - } - return nil -} - -func (x *CompanionEphemeralIdentity) GetDeviceType() DeviceProps_PlatformType { - if x != nil && x.DeviceType != nil { - return *x.DeviceType - } - return DeviceProps_UNKNOWN -} - -func (x *CompanionEphemeralIdentity) GetRef() string { - if x != nil && x.Ref != nil { - return *x.Ref - } - return "" -} - -type PrimaryEphemeralIdentity struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - PublicKey []byte `protobuf:"bytes,1,opt,name=publicKey" json:"publicKey,omitempty"` -} - -func (x *PrimaryEphemeralIdentity) Reset() { - *x = PrimaryEphemeralIdentity{} - if protoimpl.UnsafeEnabled { - mi := &file_waCompanionReg_WAWebProtobufsCompanionReg_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PrimaryEphemeralIdentity) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PrimaryEphemeralIdentity) ProtoMessage() {} - -func (x *PrimaryEphemeralIdentity) ProtoReflect() protoreflect.Message { - mi := &file_waCompanionReg_WAWebProtobufsCompanionReg_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use PrimaryEphemeralIdentity.ProtoReflect.Descriptor instead. -func (*PrimaryEphemeralIdentity) Descriptor() ([]byte, []int) { - return file_waCompanionReg_WAWebProtobufsCompanionReg_proto_rawDescGZIP(), []int{2} -} - -func (x *PrimaryEphemeralIdentity) GetPublicKey() []byte { - if x != nil { - return x.PublicKey - } - return nil -} - -type EncryptedPairingRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - EncryptedPayload []byte `protobuf:"bytes,1,opt,name=encryptedPayload" json:"encryptedPayload,omitempty"` - IV []byte `protobuf:"bytes,2,opt,name=IV" json:"IV,omitempty"` -} - -func (x *EncryptedPairingRequest) Reset() { - *x = EncryptedPairingRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_waCompanionReg_WAWebProtobufsCompanionReg_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *EncryptedPairingRequest) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*EncryptedPairingRequest) ProtoMessage() {} - -func (x *EncryptedPairingRequest) ProtoReflect() protoreflect.Message { - mi := &file_waCompanionReg_WAWebProtobufsCompanionReg_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use EncryptedPairingRequest.ProtoReflect.Descriptor instead. -func (*EncryptedPairingRequest) Descriptor() ([]byte, []int) { - return file_waCompanionReg_WAWebProtobufsCompanionReg_proto_rawDescGZIP(), []int{3} -} - -func (x *EncryptedPairingRequest) GetEncryptedPayload() []byte { - if x != nil { - return x.EncryptedPayload - } - return nil -} - -func (x *EncryptedPairingRequest) GetIV() []byte { - if x != nil { - return x.IV - } - return nil -} - -type ClientPairingProps struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - IsChatDbLidMigrated *bool `protobuf:"varint,1,opt,name=isChatDbLidMigrated" json:"isChatDbLidMigrated,omitempty"` -} - -func (x *ClientPairingProps) Reset() { - *x = ClientPairingProps{} - if protoimpl.UnsafeEnabled { - mi := &file_waCompanionReg_WAWebProtobufsCompanionReg_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ClientPairingProps) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ClientPairingProps) ProtoMessage() {} - -func (x *ClientPairingProps) ProtoReflect() protoreflect.Message { - mi := &file_waCompanionReg_WAWebProtobufsCompanionReg_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ClientPairingProps.ProtoReflect.Descriptor instead. -func (*ClientPairingProps) Descriptor() ([]byte, []int) { - return file_waCompanionReg_WAWebProtobufsCompanionReg_proto_rawDescGZIP(), []int{4} -} - -func (x *ClientPairingProps) GetIsChatDbLidMigrated() bool { - if x != nil && x.IsChatDbLidMigrated != nil { - return *x.IsChatDbLidMigrated - } - return false -} - -type DeviceProps_HistorySyncConfig struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - FullSyncDaysLimit *uint32 `protobuf:"varint,1,opt,name=fullSyncDaysLimit" json:"fullSyncDaysLimit,omitempty"` - FullSyncSizeMbLimit *uint32 `protobuf:"varint,2,opt,name=fullSyncSizeMbLimit" json:"fullSyncSizeMbLimit,omitempty"` - StorageQuotaMb *uint32 `protobuf:"varint,3,opt,name=storageQuotaMb" json:"storageQuotaMb,omitempty"` - InlineInitialPayloadInE2EeMsg *bool `protobuf:"varint,4,opt,name=inlineInitialPayloadInE2EeMsg" json:"inlineInitialPayloadInE2EeMsg,omitempty"` - RecentSyncDaysLimit *uint32 `protobuf:"varint,5,opt,name=recentSyncDaysLimit" json:"recentSyncDaysLimit,omitempty"` - SupportCallLogHistory *bool `protobuf:"varint,6,opt,name=supportCallLogHistory" json:"supportCallLogHistory,omitempty"` - SupportBotUserAgentChatHistory *bool `protobuf:"varint,7,opt,name=supportBotUserAgentChatHistory" json:"supportBotUserAgentChatHistory,omitempty"` - SupportCagReactionsAndPolls *bool `protobuf:"varint,8,opt,name=supportCagReactionsAndPolls" json:"supportCagReactionsAndPolls,omitempty"` - SupportBizHostedMsg *bool `protobuf:"varint,9,opt,name=supportBizHostedMsg" json:"supportBizHostedMsg,omitempty"` - SupportRecentSyncChunkMessageCountTuning *bool `protobuf:"varint,10,opt,name=supportRecentSyncChunkMessageCountTuning" json:"supportRecentSyncChunkMessageCountTuning,omitempty"` - SupportHostedGroupMsg *bool `protobuf:"varint,11,opt,name=supportHostedGroupMsg" json:"supportHostedGroupMsg,omitempty"` - SupportFbidBotChatHistory *bool `protobuf:"varint,12,opt,name=supportFbidBotChatHistory" json:"supportFbidBotChatHistory,omitempty"` -} - -func (x *DeviceProps_HistorySyncConfig) Reset() { - *x = DeviceProps_HistorySyncConfig{} - if protoimpl.UnsafeEnabled { - mi := &file_waCompanionReg_WAWebProtobufsCompanionReg_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *DeviceProps_HistorySyncConfig) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*DeviceProps_HistorySyncConfig) ProtoMessage() {} - -func (x *DeviceProps_HistorySyncConfig) ProtoReflect() protoreflect.Message { - mi := &file_waCompanionReg_WAWebProtobufsCompanionReg_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use DeviceProps_HistorySyncConfig.ProtoReflect.Descriptor instead. -func (*DeviceProps_HistorySyncConfig) Descriptor() ([]byte, []int) { - return file_waCompanionReg_WAWebProtobufsCompanionReg_proto_rawDescGZIP(), []int{0, 0} -} - -func (x *DeviceProps_HistorySyncConfig) GetFullSyncDaysLimit() uint32 { - if x != nil && x.FullSyncDaysLimit != nil { - return *x.FullSyncDaysLimit - } - return 0 -} - -func (x *DeviceProps_HistorySyncConfig) GetFullSyncSizeMbLimit() uint32 { - if x != nil && x.FullSyncSizeMbLimit != nil { - return *x.FullSyncSizeMbLimit - } - return 0 -} - -func (x *DeviceProps_HistorySyncConfig) GetStorageQuotaMb() uint32 { - if x != nil && x.StorageQuotaMb != nil { - return *x.StorageQuotaMb - } - return 0 -} - -func (x *DeviceProps_HistorySyncConfig) GetInlineInitialPayloadInE2EeMsg() bool { - if x != nil && x.InlineInitialPayloadInE2EeMsg != nil { - return *x.InlineInitialPayloadInE2EeMsg - } - return false -} - -func (x *DeviceProps_HistorySyncConfig) GetRecentSyncDaysLimit() uint32 { - if x != nil && x.RecentSyncDaysLimit != nil { - return *x.RecentSyncDaysLimit - } - return 0 -} - -func (x *DeviceProps_HistorySyncConfig) GetSupportCallLogHistory() bool { - if x != nil && x.SupportCallLogHistory != nil { - return *x.SupportCallLogHistory - } - return false -} - -func (x *DeviceProps_HistorySyncConfig) GetSupportBotUserAgentChatHistory() bool { - if x != nil && x.SupportBotUserAgentChatHistory != nil { - return *x.SupportBotUserAgentChatHistory - } - return false -} - -func (x *DeviceProps_HistorySyncConfig) GetSupportCagReactionsAndPolls() bool { - if x != nil && x.SupportCagReactionsAndPolls != nil { - return *x.SupportCagReactionsAndPolls - } - return false -} - -func (x *DeviceProps_HistorySyncConfig) GetSupportBizHostedMsg() bool { - if x != nil && x.SupportBizHostedMsg != nil { - return *x.SupportBizHostedMsg - } - return false -} - -func (x *DeviceProps_HistorySyncConfig) GetSupportRecentSyncChunkMessageCountTuning() bool { - if x != nil && x.SupportRecentSyncChunkMessageCountTuning != nil { - return *x.SupportRecentSyncChunkMessageCountTuning - } - return false -} - -func (x *DeviceProps_HistorySyncConfig) GetSupportHostedGroupMsg() bool { - if x != nil && x.SupportHostedGroupMsg != nil { - return *x.SupportHostedGroupMsg - } - return false -} - -func (x *DeviceProps_HistorySyncConfig) GetSupportFbidBotChatHistory() bool { - if x != nil && x.SupportFbidBotChatHistory != nil { - return *x.SupportFbidBotChatHistory - } - return false -} - -type DeviceProps_AppVersion struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Primary *uint32 `protobuf:"varint,1,opt,name=primary" json:"primary,omitempty"` - Secondary *uint32 `protobuf:"varint,2,opt,name=secondary" json:"secondary,omitempty"` - Tertiary *uint32 `protobuf:"varint,3,opt,name=tertiary" json:"tertiary,omitempty"` - Quaternary *uint32 `protobuf:"varint,4,opt,name=quaternary" json:"quaternary,omitempty"` - Quinary *uint32 `protobuf:"varint,5,opt,name=quinary" json:"quinary,omitempty"` -} - -func (x *DeviceProps_AppVersion) Reset() { - *x = DeviceProps_AppVersion{} - if protoimpl.UnsafeEnabled { - mi := &file_waCompanionReg_WAWebProtobufsCompanionReg_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *DeviceProps_AppVersion) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*DeviceProps_AppVersion) ProtoMessage() {} - -func (x *DeviceProps_AppVersion) ProtoReflect() protoreflect.Message { - mi := &file_waCompanionReg_WAWebProtobufsCompanionReg_proto_msgTypes[6] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use DeviceProps_AppVersion.ProtoReflect.Descriptor instead. -func (*DeviceProps_AppVersion) Descriptor() ([]byte, []int) { - return file_waCompanionReg_WAWebProtobufsCompanionReg_proto_rawDescGZIP(), []int{0, 1} -} - -func (x *DeviceProps_AppVersion) GetPrimary() uint32 { - if x != nil && x.Primary != nil { - return *x.Primary - } - return 0 -} - -func (x *DeviceProps_AppVersion) GetSecondary() uint32 { - if x != nil && x.Secondary != nil { - return *x.Secondary - } - return 0 -} - -func (x *DeviceProps_AppVersion) GetTertiary() uint32 { - if x != nil && x.Tertiary != nil { - return *x.Tertiary - } - return 0 -} - -func (x *DeviceProps_AppVersion) GetQuaternary() uint32 { - if x != nil && x.Quaternary != nil { - return *x.Quaternary - } - return 0 -} - -func (x *DeviceProps_AppVersion) GetQuinary() uint32 { - if x != nil && x.Quinary != nil { - return *x.Quinary - } - return 0 -} - -var File_waCompanionReg_WAWebProtobufsCompanionReg_proto protoreflect.FileDescriptor - -//go:embed WAWebProtobufsCompanionReg.pb.raw -var file_waCompanionReg_WAWebProtobufsCompanionReg_proto_rawDesc []byte - -var ( - file_waCompanionReg_WAWebProtobufsCompanionReg_proto_rawDescOnce sync.Once - file_waCompanionReg_WAWebProtobufsCompanionReg_proto_rawDescData = file_waCompanionReg_WAWebProtobufsCompanionReg_proto_rawDesc -) - -func file_waCompanionReg_WAWebProtobufsCompanionReg_proto_rawDescGZIP() []byte { - file_waCompanionReg_WAWebProtobufsCompanionReg_proto_rawDescOnce.Do(func() { - file_waCompanionReg_WAWebProtobufsCompanionReg_proto_rawDescData = protoimpl.X.CompressGZIP(file_waCompanionReg_WAWebProtobufsCompanionReg_proto_rawDescData) - }) - return file_waCompanionReg_WAWebProtobufsCompanionReg_proto_rawDescData -} - -var file_waCompanionReg_WAWebProtobufsCompanionReg_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_waCompanionReg_WAWebProtobufsCompanionReg_proto_msgTypes = make([]protoimpl.MessageInfo, 7) -var file_waCompanionReg_WAWebProtobufsCompanionReg_proto_goTypes = []any{ - (DeviceProps_PlatformType)(0), // 0: WAWebProtobufsCompanionReg.DeviceProps.PlatformType - (*DeviceProps)(nil), // 1: WAWebProtobufsCompanionReg.DeviceProps - (*CompanionEphemeralIdentity)(nil), // 2: WAWebProtobufsCompanionReg.CompanionEphemeralIdentity - (*PrimaryEphemeralIdentity)(nil), // 3: WAWebProtobufsCompanionReg.PrimaryEphemeralIdentity - (*EncryptedPairingRequest)(nil), // 4: WAWebProtobufsCompanionReg.EncryptedPairingRequest - (*ClientPairingProps)(nil), // 5: WAWebProtobufsCompanionReg.ClientPairingProps - (*DeviceProps_HistorySyncConfig)(nil), // 6: WAWebProtobufsCompanionReg.DeviceProps.HistorySyncConfig - (*DeviceProps_AppVersion)(nil), // 7: WAWebProtobufsCompanionReg.DeviceProps.AppVersion -} -var file_waCompanionReg_WAWebProtobufsCompanionReg_proto_depIdxs = []int32{ - 7, // 0: WAWebProtobufsCompanionReg.DeviceProps.version:type_name -> WAWebProtobufsCompanionReg.DeviceProps.AppVersion - 0, // 1: WAWebProtobufsCompanionReg.DeviceProps.platformType:type_name -> WAWebProtobufsCompanionReg.DeviceProps.PlatformType - 6, // 2: WAWebProtobufsCompanionReg.DeviceProps.historySyncConfig:type_name -> WAWebProtobufsCompanionReg.DeviceProps.HistorySyncConfig - 0, // 3: WAWebProtobufsCompanionReg.CompanionEphemeralIdentity.deviceType:type_name -> WAWebProtobufsCompanionReg.DeviceProps.PlatformType - 4, // [4:4] is the sub-list for method output_type - 4, // [4:4] is the sub-list for method input_type - 4, // [4:4] is the sub-list for extension type_name - 4, // [4:4] is the sub-list for extension extendee - 0, // [0:4] is the sub-list for field type_name -} - -func init() { file_waCompanionReg_WAWebProtobufsCompanionReg_proto_init() } -func file_waCompanionReg_WAWebProtobufsCompanionReg_proto_init() { - if File_waCompanionReg_WAWebProtobufsCompanionReg_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_waCompanionReg_WAWebProtobufsCompanionReg_proto_msgTypes[0].Exporter = func(v any, i int) any { - switch v := v.(*DeviceProps); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waCompanionReg_WAWebProtobufsCompanionReg_proto_msgTypes[1].Exporter = func(v any, i int) any { - switch v := v.(*CompanionEphemeralIdentity); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waCompanionReg_WAWebProtobufsCompanionReg_proto_msgTypes[2].Exporter = func(v any, i int) any { - switch v := v.(*PrimaryEphemeralIdentity); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waCompanionReg_WAWebProtobufsCompanionReg_proto_msgTypes[3].Exporter = func(v any, i int) any { - switch v := v.(*EncryptedPairingRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waCompanionReg_WAWebProtobufsCompanionReg_proto_msgTypes[4].Exporter = func(v any, i int) any { - switch v := v.(*ClientPairingProps); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waCompanionReg_WAWebProtobufsCompanionReg_proto_msgTypes[5].Exporter = func(v any, i int) any { - switch v := v.(*DeviceProps_HistorySyncConfig); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waCompanionReg_WAWebProtobufsCompanionReg_proto_msgTypes[6].Exporter = func(v any, i int) any { - switch v := v.(*DeviceProps_AppVersion); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_waCompanionReg_WAWebProtobufsCompanionReg_proto_rawDesc, - NumEnums: 1, - NumMessages: 7, - NumExtensions: 0, - NumServices: 0, - }, - GoTypes: file_waCompanionReg_WAWebProtobufsCompanionReg_proto_goTypes, - DependencyIndexes: file_waCompanionReg_WAWebProtobufsCompanionReg_proto_depIdxs, - EnumInfos: file_waCompanionReg_WAWebProtobufsCompanionReg_proto_enumTypes, - MessageInfos: file_waCompanionReg_WAWebProtobufsCompanionReg_proto_msgTypes, - }.Build() - File_waCompanionReg_WAWebProtobufsCompanionReg_proto = out.File - file_waCompanionReg_WAWebProtobufsCompanionReg_proto_rawDesc = nil - file_waCompanionReg_WAWebProtobufsCompanionReg_proto_goTypes = nil - file_waCompanionReg_WAWebProtobufsCompanionReg_proto_depIdxs = nil -} diff --git a/vendor/go.mau.fi/whatsmeow/proto/waCompanionReg/WAWebProtobufsCompanionReg.pb.raw b/vendor/go.mau.fi/whatsmeow/proto/waCompanionReg/WAWebProtobufsCompanionReg.pb.raw deleted file mode 100644 index e02c560a5a..0000000000 Binary files a/vendor/go.mau.fi/whatsmeow/proto/waCompanionReg/WAWebProtobufsCompanionReg.pb.raw and /dev/null differ diff --git a/vendor/go.mau.fi/whatsmeow/proto/waConsumerApplication/WAConsumerApplication.pb.go b/vendor/go.mau.fi/whatsmeow/proto/waConsumerApplication/WAConsumerApplication.pb.go index 21bd069301..850207c5e2 100644 --- a/vendor/go.mau.fi/whatsmeow/proto/waConsumerApplication/WAConsumerApplication.pb.go +++ b/vendor/go.mau.fi/whatsmeow/proto/waConsumerApplication/WAConsumerApplication.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 +// protoc-gen-go v1.36.10 // protoc v3.21.12 // source: waConsumerApplication/WAConsumerApplication.proto @@ -9,12 +9,12 @@ package waConsumerApplication import ( reflect "reflect" sync "sync" + unsafe "unsafe" - waCommon "go.mau.fi/whatsmeow/proto/waCommon" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" - _ "embed" + waCommon "go.mau.fi/whatsmeow/proto/waCommon" ) const ( @@ -208,21 +208,18 @@ func (ConsumerApplication_ExtendedTextMessage_PreviewType) EnumDescriptor() ([]b } type ConsumerApplication struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Payload *ConsumerApplication_Payload `protobuf:"bytes,1,opt,name=payload" json:"payload,omitempty"` + Metadata *ConsumerApplication_Metadata `protobuf:"bytes,2,opt,name=metadata" json:"metadata,omitempty"` unknownFields protoimpl.UnknownFields - - Payload *ConsumerApplication_Payload `protobuf:"bytes,1,opt,name=payload" json:"payload,omitempty"` - Metadata *ConsumerApplication_Metadata `protobuf:"bytes,2,opt,name=metadata" json:"metadata,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ConsumerApplication) Reset() { *x = ConsumerApplication{} - if protoimpl.UnsafeEnabled { - mi := &file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ConsumerApplication) String() string { @@ -233,7 +230,7 @@ func (*ConsumerApplication) ProtoMessage() {} func (x *ConsumerApplication) ProtoReflect() protoreflect.Message { mi := &file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -263,26 +260,23 @@ func (x *ConsumerApplication) GetMetadata() *ConsumerApplication_Metadata { } type ConsumerApplication_Payload struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Types that are assignable to Payload: + state protoimpl.MessageState `protogen:"open.v1"` + // Types that are valid to be assigned to Payload: // // *ConsumerApplication_Payload_Content // *ConsumerApplication_Payload_ApplicationData // *ConsumerApplication_Payload_Signal // *ConsumerApplication_Payload_SubProtocol - Payload isConsumerApplication_Payload_Payload `protobuf_oneof:"payload"` + Payload isConsumerApplication_Payload_Payload `protobuf_oneof:"payload"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ConsumerApplication_Payload) Reset() { *x = ConsumerApplication_Payload{} - if protoimpl.UnsafeEnabled { - mi := &file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ConsumerApplication_Payload) String() string { @@ -293,7 +287,7 @@ func (*ConsumerApplication_Payload) ProtoMessage() {} func (x *ConsumerApplication_Payload) ProtoReflect() protoreflect.Message { mi := &file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -308,37 +302,45 @@ func (*ConsumerApplication_Payload) Descriptor() ([]byte, []int) { return file_waConsumerApplication_WAConsumerApplication_proto_rawDescGZIP(), []int{0, 0} } -func (m *ConsumerApplication_Payload) GetPayload() isConsumerApplication_Payload_Payload { - if m != nil { - return m.Payload +func (x *ConsumerApplication_Payload) GetPayload() isConsumerApplication_Payload_Payload { + if x != nil { + return x.Payload } return nil } func (x *ConsumerApplication_Payload) GetContent() *ConsumerApplication_Content { - if x, ok := x.GetPayload().(*ConsumerApplication_Payload_Content); ok { - return x.Content + if x != nil { + if x, ok := x.Payload.(*ConsumerApplication_Payload_Content); ok { + return x.Content + } } return nil } func (x *ConsumerApplication_Payload) GetApplicationData() *ConsumerApplication_ApplicationData { - if x, ok := x.GetPayload().(*ConsumerApplication_Payload_ApplicationData); ok { - return x.ApplicationData + if x != nil { + if x, ok := x.Payload.(*ConsumerApplication_Payload_ApplicationData); ok { + return x.ApplicationData + } } return nil } func (x *ConsumerApplication_Payload) GetSignal() *ConsumerApplication_Signal { - if x, ok := x.GetPayload().(*ConsumerApplication_Payload_Signal); ok { - return x.Signal + if x != nil { + if x, ok := x.Payload.(*ConsumerApplication_Payload_Signal); ok { + return x.Signal + } } return nil } func (x *ConsumerApplication_Payload) GetSubProtocol() *ConsumerApplication_SubProtocolPayload { - if x, ok := x.GetPayload().(*ConsumerApplication_Payload_SubProtocol); ok { - return x.SubProtocol + if x != nil { + if x, ok := x.Payload.(*ConsumerApplication_Payload_SubProtocol); ok { + return x.SubProtocol + } } return nil } @@ -372,20 +374,17 @@ func (*ConsumerApplication_Payload_Signal) isConsumerApplication_Payload_Payload func (*ConsumerApplication_Payload_SubProtocol) isConsumerApplication_Payload_Payload() {} type ConsumerApplication_SubProtocolPayload struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + FutureProof *waCommon.FutureProofBehavior `protobuf:"varint,1,opt,name=futureProof,enum=WACommon.FutureProofBehavior" json:"futureProof,omitempty"` unknownFields protoimpl.UnknownFields - - FutureProof *waCommon.FutureProofBehavior `protobuf:"varint,1,opt,name=futureProof,enum=WACommon.FutureProofBehavior" json:"futureProof,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ConsumerApplication_SubProtocolPayload) Reset() { *x = ConsumerApplication_SubProtocolPayload{} - if protoimpl.UnsafeEnabled { - mi := &file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ConsumerApplication_SubProtocolPayload) String() string { @@ -396,7 +395,7 @@ func (*ConsumerApplication_SubProtocolPayload) ProtoMessage() {} func (x *ConsumerApplication_SubProtocolPayload) ProtoReflect() protoreflect.Message { mi := &file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -419,20 +418,17 @@ func (x *ConsumerApplication_SubProtocolPayload) GetFutureProof() waCommon.Futur } type ConsumerApplication_Metadata struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` SpecialTextSize *ConsumerApplication_Metadata_SpecialTextSize `protobuf:"varint,1,opt,name=specialTextSize,enum=WAConsumerApplication.ConsumerApplication_Metadata_SpecialTextSize" json:"specialTextSize,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ConsumerApplication_Metadata) Reset() { *x = ConsumerApplication_Metadata{} - if protoimpl.UnsafeEnabled { - mi := &file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ConsumerApplication_Metadata) String() string { @@ -443,7 +439,7 @@ func (*ConsumerApplication_Metadata) ProtoMessage() {} func (x *ConsumerApplication_Metadata) ProtoReflect() protoreflect.Message { mi := &file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -466,18 +462,16 @@ func (x *ConsumerApplication_Metadata) GetSpecialTextSize() ConsumerApplication_ } type ConsumerApplication_Signal struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ConsumerApplication_Signal) Reset() { *x = ConsumerApplication_Signal{} - if protoimpl.UnsafeEnabled { - mi := &file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ConsumerApplication_Signal) String() string { @@ -488,7 +482,7 @@ func (*ConsumerApplication_Signal) ProtoMessage() {} func (x *ConsumerApplication_Signal) ProtoReflect() protoreflect.Message { mi := &file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -504,23 +498,20 @@ func (*ConsumerApplication_Signal) Descriptor() ([]byte, []int) { } type ConsumerApplication_ApplicationData struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Types that are assignable to ApplicationContent: + state protoimpl.MessageState `protogen:"open.v1"` + // Types that are valid to be assigned to ApplicationContent: // // *ConsumerApplication_ApplicationData_Revoke ApplicationContent isConsumerApplication_ApplicationData_ApplicationContent `protobuf_oneof:"applicationContent"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ConsumerApplication_ApplicationData) Reset() { *x = ConsumerApplication_ApplicationData{} - if protoimpl.UnsafeEnabled { - mi := &file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ConsumerApplication_ApplicationData) String() string { @@ -531,7 +522,7 @@ func (*ConsumerApplication_ApplicationData) ProtoMessage() {} func (x *ConsumerApplication_ApplicationData) ProtoReflect() protoreflect.Message { mi := &file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -546,16 +537,18 @@ func (*ConsumerApplication_ApplicationData) Descriptor() ([]byte, []int) { return file_waConsumerApplication_WAConsumerApplication_proto_rawDescGZIP(), []int{0, 4} } -func (m *ConsumerApplication_ApplicationData) GetApplicationContent() isConsumerApplication_ApplicationData_ApplicationContent { - if m != nil { - return m.ApplicationContent +func (x *ConsumerApplication_ApplicationData) GetApplicationContent() isConsumerApplication_ApplicationData_ApplicationContent { + if x != nil { + return x.ApplicationContent } return nil } func (x *ConsumerApplication_ApplicationData) GetRevoke() *ConsumerApplication_RevokeMessage { - if x, ok := x.GetApplicationContent().(*ConsumerApplication_ApplicationData_Revoke); ok { - return x.Revoke + if x != nil { + if x, ok := x.ApplicationContent.(*ConsumerApplication_ApplicationData_Revoke); ok { + return x.Revoke + } } return nil } @@ -572,11 +565,8 @@ func (*ConsumerApplication_ApplicationData_Revoke) isConsumerApplication_Applica } type ConsumerApplication_Content struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Types that are assignable to Content: + state protoimpl.MessageState `protogen:"open.v1"` + // Types that are valid to be assigned to Content: // // *ConsumerApplication_Content_MessageText // *ConsumerApplication_Content_ImageMessage @@ -596,16 +586,16 @@ type ConsumerApplication_Content struct { // *ConsumerApplication_Content_PollCreationMessage // *ConsumerApplication_Content_PollUpdateMessage // *ConsumerApplication_Content_EditMessage - Content isConsumerApplication_Content_Content `protobuf_oneof:"content"` + Content isConsumerApplication_Content_Content `protobuf_oneof:"content"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ConsumerApplication_Content) Reset() { *x = ConsumerApplication_Content{} - if protoimpl.UnsafeEnabled { - mi := &file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ConsumerApplication_Content) String() string { @@ -616,7 +606,7 @@ func (*ConsumerApplication_Content) ProtoMessage() {} func (x *ConsumerApplication_Content) ProtoReflect() protoreflect.Message { mi := &file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[6] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -631,135 +621,171 @@ func (*ConsumerApplication_Content) Descriptor() ([]byte, []int) { return file_waConsumerApplication_WAConsumerApplication_proto_rawDescGZIP(), []int{0, 5} } -func (m *ConsumerApplication_Content) GetContent() isConsumerApplication_Content_Content { - if m != nil { - return m.Content +func (x *ConsumerApplication_Content) GetContent() isConsumerApplication_Content_Content { + if x != nil { + return x.Content } return nil } func (x *ConsumerApplication_Content) GetMessageText() *waCommon.MessageText { - if x, ok := x.GetContent().(*ConsumerApplication_Content_MessageText); ok { - return x.MessageText + if x != nil { + if x, ok := x.Content.(*ConsumerApplication_Content_MessageText); ok { + return x.MessageText + } } return nil } func (x *ConsumerApplication_Content) GetImageMessage() *ConsumerApplication_ImageMessage { - if x, ok := x.GetContent().(*ConsumerApplication_Content_ImageMessage); ok { - return x.ImageMessage + if x != nil { + if x, ok := x.Content.(*ConsumerApplication_Content_ImageMessage); ok { + return x.ImageMessage + } } return nil } func (x *ConsumerApplication_Content) GetContactMessage() *ConsumerApplication_ContactMessage { - if x, ok := x.GetContent().(*ConsumerApplication_Content_ContactMessage); ok { - return x.ContactMessage + if x != nil { + if x, ok := x.Content.(*ConsumerApplication_Content_ContactMessage); ok { + return x.ContactMessage + } } return nil } func (x *ConsumerApplication_Content) GetLocationMessage() *ConsumerApplication_LocationMessage { - if x, ok := x.GetContent().(*ConsumerApplication_Content_LocationMessage); ok { - return x.LocationMessage + if x != nil { + if x, ok := x.Content.(*ConsumerApplication_Content_LocationMessage); ok { + return x.LocationMessage + } } return nil } func (x *ConsumerApplication_Content) GetExtendedTextMessage() *ConsumerApplication_ExtendedTextMessage { - if x, ok := x.GetContent().(*ConsumerApplication_Content_ExtendedTextMessage); ok { - return x.ExtendedTextMessage + if x != nil { + if x, ok := x.Content.(*ConsumerApplication_Content_ExtendedTextMessage); ok { + return x.ExtendedTextMessage + } } return nil } func (x *ConsumerApplication_Content) GetStatusTextMessage() *ConsumerApplication_StatusTextMesage { - if x, ok := x.GetContent().(*ConsumerApplication_Content_StatusTextMessage); ok { - return x.StatusTextMessage + if x != nil { + if x, ok := x.Content.(*ConsumerApplication_Content_StatusTextMessage); ok { + return x.StatusTextMessage + } } return nil } func (x *ConsumerApplication_Content) GetDocumentMessage() *ConsumerApplication_DocumentMessage { - if x, ok := x.GetContent().(*ConsumerApplication_Content_DocumentMessage); ok { - return x.DocumentMessage + if x != nil { + if x, ok := x.Content.(*ConsumerApplication_Content_DocumentMessage); ok { + return x.DocumentMessage + } } return nil } func (x *ConsumerApplication_Content) GetAudioMessage() *ConsumerApplication_AudioMessage { - if x, ok := x.GetContent().(*ConsumerApplication_Content_AudioMessage); ok { - return x.AudioMessage + if x != nil { + if x, ok := x.Content.(*ConsumerApplication_Content_AudioMessage); ok { + return x.AudioMessage + } } return nil } func (x *ConsumerApplication_Content) GetVideoMessage() *ConsumerApplication_VideoMessage { - if x, ok := x.GetContent().(*ConsumerApplication_Content_VideoMessage); ok { - return x.VideoMessage + if x != nil { + if x, ok := x.Content.(*ConsumerApplication_Content_VideoMessage); ok { + return x.VideoMessage + } } return nil } func (x *ConsumerApplication_Content) GetContactsArrayMessage() *ConsumerApplication_ContactsArrayMessage { - if x, ok := x.GetContent().(*ConsumerApplication_Content_ContactsArrayMessage); ok { - return x.ContactsArrayMessage + if x != nil { + if x, ok := x.Content.(*ConsumerApplication_Content_ContactsArrayMessage); ok { + return x.ContactsArrayMessage + } } return nil } func (x *ConsumerApplication_Content) GetLiveLocationMessage() *ConsumerApplication_LiveLocationMessage { - if x, ok := x.GetContent().(*ConsumerApplication_Content_LiveLocationMessage); ok { - return x.LiveLocationMessage + if x != nil { + if x, ok := x.Content.(*ConsumerApplication_Content_LiveLocationMessage); ok { + return x.LiveLocationMessage + } } return nil } func (x *ConsumerApplication_Content) GetStickerMessage() *ConsumerApplication_StickerMessage { - if x, ok := x.GetContent().(*ConsumerApplication_Content_StickerMessage); ok { - return x.StickerMessage + if x != nil { + if x, ok := x.Content.(*ConsumerApplication_Content_StickerMessage); ok { + return x.StickerMessage + } } return nil } func (x *ConsumerApplication_Content) GetGroupInviteMessage() *ConsumerApplication_GroupInviteMessage { - if x, ok := x.GetContent().(*ConsumerApplication_Content_GroupInviteMessage); ok { - return x.GroupInviteMessage + if x != nil { + if x, ok := x.Content.(*ConsumerApplication_Content_GroupInviteMessage); ok { + return x.GroupInviteMessage + } } return nil } func (x *ConsumerApplication_Content) GetViewOnceMessage() *ConsumerApplication_ViewOnceMessage { - if x, ok := x.GetContent().(*ConsumerApplication_Content_ViewOnceMessage); ok { - return x.ViewOnceMessage + if x != nil { + if x, ok := x.Content.(*ConsumerApplication_Content_ViewOnceMessage); ok { + return x.ViewOnceMessage + } } return nil } func (x *ConsumerApplication_Content) GetReactionMessage() *ConsumerApplication_ReactionMessage { - if x, ok := x.GetContent().(*ConsumerApplication_Content_ReactionMessage); ok { - return x.ReactionMessage + if x != nil { + if x, ok := x.Content.(*ConsumerApplication_Content_ReactionMessage); ok { + return x.ReactionMessage + } } return nil } func (x *ConsumerApplication_Content) GetPollCreationMessage() *ConsumerApplication_PollCreationMessage { - if x, ok := x.GetContent().(*ConsumerApplication_Content_PollCreationMessage); ok { - return x.PollCreationMessage + if x != nil { + if x, ok := x.Content.(*ConsumerApplication_Content_PollCreationMessage); ok { + return x.PollCreationMessage + } } return nil } func (x *ConsumerApplication_Content) GetPollUpdateMessage() *ConsumerApplication_PollUpdateMessage { - if x, ok := x.GetContent().(*ConsumerApplication_Content_PollUpdateMessage); ok { - return x.PollUpdateMessage + if x != nil { + if x, ok := x.Content.(*ConsumerApplication_Content_PollUpdateMessage); ok { + return x.PollUpdateMessage + } } return nil } func (x *ConsumerApplication_Content) GetEditMessage() *ConsumerApplication_EditMessage { - if x, ok := x.GetContent().(*ConsumerApplication_Content_EditMessage); ok { - return x.EditMessage + if x != nil { + if x, ok := x.Content.(*ConsumerApplication_Content_EditMessage); ok { + return x.EditMessage + } } return nil } @@ -877,22 +903,19 @@ func (*ConsumerApplication_Content_PollUpdateMessage) isConsumerApplication_Cont func (*ConsumerApplication_Content_EditMessage) isConsumerApplication_Content_Content() {} type ConsumerApplication_EditMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Key *waCommon.MessageKey `protobuf:"bytes,1,opt,name=key" json:"key,omitempty"` + Message *waCommon.MessageText `protobuf:"bytes,2,opt,name=message" json:"message,omitempty"` + TimestampMS *int64 `protobuf:"varint,3,opt,name=timestampMS" json:"timestampMS,omitempty"` unknownFields protoimpl.UnknownFields - - Key *waCommon.MessageKey `protobuf:"bytes,1,opt,name=key" json:"key,omitempty"` - Message *waCommon.MessageText `protobuf:"bytes,2,opt,name=message" json:"message,omitempty"` - TimestampMS *int64 `protobuf:"varint,3,opt,name=timestampMS" json:"timestampMS,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ConsumerApplication_EditMessage) Reset() { *x = ConsumerApplication_EditMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ConsumerApplication_EditMessage) String() string { @@ -903,7 +926,7 @@ func (*ConsumerApplication_EditMessage) ProtoMessage() {} func (x *ConsumerApplication_EditMessage) ProtoReflect() protoreflect.Message { mi := &file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[7] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -940,20 +963,17 @@ func (x *ConsumerApplication_EditMessage) GetTimestampMS() int64 { } type ConsumerApplication_PollAddOptionMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + PollOption []*ConsumerApplication_Option `protobuf:"bytes,1,rep,name=pollOption" json:"pollOption,omitempty"` unknownFields protoimpl.UnknownFields - - PollOption []*ConsumerApplication_Option `protobuf:"bytes,1,rep,name=pollOption" json:"pollOption,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ConsumerApplication_PollAddOptionMessage) Reset() { *x = ConsumerApplication_PollAddOptionMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[8] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ConsumerApplication_PollAddOptionMessage) String() string { @@ -964,7 +984,7 @@ func (*ConsumerApplication_PollAddOptionMessage) ProtoMessage() {} func (x *ConsumerApplication_PollAddOptionMessage) ProtoReflect() protoreflect.Message { mi := &file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[8] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -987,21 +1007,18 @@ func (x *ConsumerApplication_PollAddOptionMessage) GetPollOption() []*ConsumerAp } type ConsumerApplication_PollVoteMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - SelectedOptions [][]byte `protobuf:"bytes,1,rep,name=selectedOptions" json:"selectedOptions,omitempty"` - SenderTimestampMS *int64 `protobuf:"varint,2,opt,name=senderTimestampMS" json:"senderTimestampMS,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + SelectedOptions [][]byte `protobuf:"bytes,1,rep,name=selectedOptions" json:"selectedOptions,omitempty"` + SenderTimestampMS *int64 `protobuf:"varint,2,opt,name=senderTimestampMS" json:"senderTimestampMS,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ConsumerApplication_PollVoteMessage) Reset() { *x = ConsumerApplication_PollVoteMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[9] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ConsumerApplication_PollVoteMessage) String() string { @@ -1012,7 +1029,7 @@ func (*ConsumerApplication_PollVoteMessage) ProtoMessage() {} func (x *ConsumerApplication_PollVoteMessage) ProtoReflect() protoreflect.Message { mi := &file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[9] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1042,21 +1059,18 @@ func (x *ConsumerApplication_PollVoteMessage) GetSenderTimestampMS() int64 { } type ConsumerApplication_PollEncValue struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + EncPayload []byte `protobuf:"bytes,1,opt,name=encPayload" json:"encPayload,omitempty"` + EncIV []byte `protobuf:"bytes,2,opt,name=encIV" json:"encIV,omitempty"` unknownFields protoimpl.UnknownFields - - EncPayload []byte `protobuf:"bytes,1,opt,name=encPayload" json:"encPayload,omitempty"` - EncIV []byte `protobuf:"bytes,2,opt,name=encIV" json:"encIV,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ConsumerApplication_PollEncValue) Reset() { *x = ConsumerApplication_PollEncValue{} - if protoimpl.UnsafeEnabled { - mi := &file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[10] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ConsumerApplication_PollEncValue) String() string { @@ -1067,7 +1081,7 @@ func (*ConsumerApplication_PollEncValue) ProtoMessage() {} func (x *ConsumerApplication_PollEncValue) ProtoReflect() protoreflect.Message { mi := &file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[10] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1097,22 +1111,19 @@ func (x *ConsumerApplication_PollEncValue) GetEncIV() []byte { } type ConsumerApplication_PollUpdateMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` PollCreationMessageKey *waCommon.MessageKey `protobuf:"bytes,1,opt,name=pollCreationMessageKey" json:"pollCreationMessageKey,omitempty"` Vote *ConsumerApplication_PollEncValue `protobuf:"bytes,2,opt,name=vote" json:"vote,omitempty"` AddOption *ConsumerApplication_PollEncValue `protobuf:"bytes,3,opt,name=addOption" json:"addOption,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ConsumerApplication_PollUpdateMessage) Reset() { *x = ConsumerApplication_PollUpdateMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[11] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ConsumerApplication_PollUpdateMessage) String() string { @@ -1123,7 +1134,7 @@ func (*ConsumerApplication_PollUpdateMessage) ProtoMessage() {} func (x *ConsumerApplication_PollUpdateMessage) ProtoReflect() protoreflect.Message { mi := &file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[11] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1160,23 +1171,20 @@ func (x *ConsumerApplication_PollUpdateMessage) GetAddOption() *ConsumerApplicat } type ConsumerApplication_PollCreationMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` EncKey []byte `protobuf:"bytes,1,opt,name=encKey" json:"encKey,omitempty"` Name *string `protobuf:"bytes,2,opt,name=name" json:"name,omitempty"` Options []*ConsumerApplication_Option `protobuf:"bytes,3,rep,name=options" json:"options,omitempty"` SelectableOptionsCount *uint32 `protobuf:"varint,4,opt,name=selectableOptionsCount" json:"selectableOptionsCount,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ConsumerApplication_PollCreationMessage) Reset() { *x = ConsumerApplication_PollCreationMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[12] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ConsumerApplication_PollCreationMessage) String() string { @@ -1187,7 +1195,7 @@ func (*ConsumerApplication_PollCreationMessage) ProtoMessage() {} func (x *ConsumerApplication_PollCreationMessage) ProtoReflect() protoreflect.Message { mi := &file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[12] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1231,20 +1239,17 @@ func (x *ConsumerApplication_PollCreationMessage) GetSelectableOptionsCount() ui } type ConsumerApplication_Option struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + OptionName *string `protobuf:"bytes,1,opt,name=optionName" json:"optionName,omitempty"` unknownFields protoimpl.UnknownFields - - OptionName *string `protobuf:"bytes,1,opt,name=optionName" json:"optionName,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ConsumerApplication_Option) Reset() { *x = ConsumerApplication_Option{} - if protoimpl.UnsafeEnabled { - mi := &file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[13] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ConsumerApplication_Option) String() string { @@ -1255,7 +1260,7 @@ func (*ConsumerApplication_Option) ProtoMessage() {} func (x *ConsumerApplication_Option) ProtoReflect() protoreflect.Message { mi := &file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[13] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1278,25 +1283,22 @@ func (x *ConsumerApplication_Option) GetOptionName() string { } type ConsumerApplication_ReactionMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Key *waCommon.MessageKey `protobuf:"bytes,1,opt,name=key" json:"key,omitempty"` - Text *string `protobuf:"bytes,2,opt,name=text" json:"text,omitempty"` - GroupingKey *string `protobuf:"bytes,3,opt,name=groupingKey" json:"groupingKey,omitempty"` - SenderTimestampMS *int64 `protobuf:"varint,4,opt,name=senderTimestampMS" json:"senderTimestampMS,omitempty"` - ReactionMetadataDataclassData *string `protobuf:"bytes,5,opt,name=reactionMetadataDataclassData" json:"reactionMetadataDataclassData,omitempty"` - Style *int32 `protobuf:"varint,6,opt,name=style" json:"style,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Key *waCommon.MessageKey `protobuf:"bytes,1,opt,name=key" json:"key,omitempty"` + Text *string `protobuf:"bytes,2,opt,name=text" json:"text,omitempty"` + GroupingKey *string `protobuf:"bytes,3,opt,name=groupingKey" json:"groupingKey,omitempty"` + SenderTimestampMS *int64 `protobuf:"varint,4,opt,name=senderTimestampMS" json:"senderTimestampMS,omitempty"` + ReactionMetadataDataclassData *string `protobuf:"bytes,5,opt,name=reactionMetadataDataclassData" json:"reactionMetadataDataclassData,omitempty"` + Style *int32 `protobuf:"varint,6,opt,name=style" json:"style,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ConsumerApplication_ReactionMessage) Reset() { *x = ConsumerApplication_ReactionMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[14] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ConsumerApplication_ReactionMessage) String() string { @@ -1307,7 +1309,7 @@ func (*ConsumerApplication_ReactionMessage) ProtoMessage() {} func (x *ConsumerApplication_ReactionMessage) ProtoReflect() protoreflect.Message { mi := &file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[14] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1365,20 +1367,17 @@ func (x *ConsumerApplication_ReactionMessage) GetStyle() int32 { } type ConsumerApplication_RevokeMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Key *waCommon.MessageKey `protobuf:"bytes,1,opt,name=key" json:"key,omitempty"` unknownFields protoimpl.UnknownFields - - Key *waCommon.MessageKey `protobuf:"bytes,1,opt,name=key" json:"key,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ConsumerApplication_RevokeMessage) Reset() { *x = ConsumerApplication_RevokeMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[15] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ConsumerApplication_RevokeMessage) String() string { @@ -1389,7 +1388,7 @@ func (*ConsumerApplication_RevokeMessage) ProtoMessage() {} func (x *ConsumerApplication_RevokeMessage) ProtoReflect() protoreflect.Message { mi := &file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[15] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1412,24 +1411,21 @@ func (x *ConsumerApplication_RevokeMessage) GetKey() *waCommon.MessageKey { } type ConsumerApplication_ViewOnceMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Types that are assignable to ViewOnceContent: + state protoimpl.MessageState `protogen:"open.v1"` + // Types that are valid to be assigned to ViewOnceContent: // // *ConsumerApplication_ViewOnceMessage_ImageMessage // *ConsumerApplication_ViewOnceMessage_VideoMessage ViewOnceContent isConsumerApplication_ViewOnceMessage_ViewOnceContent `protobuf_oneof:"viewOnceContent"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ConsumerApplication_ViewOnceMessage) Reset() { *x = ConsumerApplication_ViewOnceMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[16] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[16] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ConsumerApplication_ViewOnceMessage) String() string { @@ -1440,7 +1436,7 @@ func (*ConsumerApplication_ViewOnceMessage) ProtoMessage() {} func (x *ConsumerApplication_ViewOnceMessage) ProtoReflect() protoreflect.Message { mi := &file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[16] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1455,23 +1451,27 @@ func (*ConsumerApplication_ViewOnceMessage) Descriptor() ([]byte, []int) { return file_waConsumerApplication_WAConsumerApplication_proto_rawDescGZIP(), []int{0, 15} } -func (m *ConsumerApplication_ViewOnceMessage) GetViewOnceContent() isConsumerApplication_ViewOnceMessage_ViewOnceContent { - if m != nil { - return m.ViewOnceContent +func (x *ConsumerApplication_ViewOnceMessage) GetViewOnceContent() isConsumerApplication_ViewOnceMessage_ViewOnceContent { + if x != nil { + return x.ViewOnceContent } return nil } func (x *ConsumerApplication_ViewOnceMessage) GetImageMessage() *ConsumerApplication_ImageMessage { - if x, ok := x.GetViewOnceContent().(*ConsumerApplication_ViewOnceMessage_ImageMessage); ok { - return x.ImageMessage + if x != nil { + if x, ok := x.ViewOnceContent.(*ConsumerApplication_ViewOnceMessage_ImageMessage); ok { + return x.ImageMessage + } } return nil } func (x *ConsumerApplication_ViewOnceMessage) GetVideoMessage() *ConsumerApplication_VideoMessage { - if x, ok := x.GetViewOnceContent().(*ConsumerApplication_ViewOnceMessage_VideoMessage); ok { - return x.VideoMessage + if x != nil { + if x, ok := x.ViewOnceContent.(*ConsumerApplication_ViewOnceMessage_VideoMessage); ok { + return x.VideoMessage + } } return nil } @@ -1495,25 +1495,22 @@ func (*ConsumerApplication_ViewOnceMessage_VideoMessage) isConsumerApplication_V } type ConsumerApplication_GroupInviteMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - GroupJID *string `protobuf:"bytes,1,opt,name=groupJID" json:"groupJID,omitempty"` - InviteCode *string `protobuf:"bytes,2,opt,name=inviteCode" json:"inviteCode,omitempty"` - InviteExpiration *int64 `protobuf:"varint,3,opt,name=inviteExpiration" json:"inviteExpiration,omitempty"` - GroupName *string `protobuf:"bytes,4,opt,name=groupName" json:"groupName,omitempty"` - JPEGThumbnail []byte `protobuf:"bytes,5,opt,name=JPEGThumbnail" json:"JPEGThumbnail,omitempty"` - Caption *waCommon.MessageText `protobuf:"bytes,6,opt,name=caption" json:"caption,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + GroupJID *string `protobuf:"bytes,1,opt,name=groupJID" json:"groupJID,omitempty"` + InviteCode *string `protobuf:"bytes,2,opt,name=inviteCode" json:"inviteCode,omitempty"` + InviteExpiration *int64 `protobuf:"varint,3,opt,name=inviteExpiration" json:"inviteExpiration,omitempty"` + GroupName *string `protobuf:"bytes,4,opt,name=groupName" json:"groupName,omitempty"` + JPEGThumbnail []byte `protobuf:"bytes,5,opt,name=JPEGThumbnail" json:"JPEGThumbnail,omitempty"` + Caption *waCommon.MessageText `protobuf:"bytes,6,opt,name=caption" json:"caption,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ConsumerApplication_GroupInviteMessage) Reset() { *x = ConsumerApplication_GroupInviteMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[17] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[17] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ConsumerApplication_GroupInviteMessage) String() string { @@ -1524,7 +1521,7 @@ func (*ConsumerApplication_GroupInviteMessage) ProtoMessage() {} func (x *ConsumerApplication_GroupInviteMessage) ProtoReflect() protoreflect.Message { mi := &file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[17] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1582,10 +1579,7 @@ func (x *ConsumerApplication_GroupInviteMessage) GetCaption() *waCommon.MessageT } type ConsumerApplication_LiveLocationMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` Location *ConsumerApplication_Location `protobuf:"bytes,1,opt,name=location" json:"location,omitempty"` AccuracyInMeters *uint32 `protobuf:"varint,2,opt,name=accuracyInMeters" json:"accuracyInMeters,omitempty"` SpeedInMps *float32 `protobuf:"fixed32,3,opt,name=speedInMps" json:"speedInMps,omitempty"` @@ -1593,15 +1587,15 @@ type ConsumerApplication_LiveLocationMessage struct { Caption *waCommon.MessageText `protobuf:"bytes,5,opt,name=caption" json:"caption,omitempty"` SequenceNumber *int64 `protobuf:"varint,6,opt,name=sequenceNumber" json:"sequenceNumber,omitempty"` TimeOffset *uint32 `protobuf:"varint,7,opt,name=timeOffset" json:"timeOffset,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ConsumerApplication_LiveLocationMessage) Reset() { *x = ConsumerApplication_LiveLocationMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[18] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[18] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ConsumerApplication_LiveLocationMessage) String() string { @@ -1612,7 +1606,7 @@ func (*ConsumerApplication_LiveLocationMessage) ProtoMessage() {} func (x *ConsumerApplication_LiveLocationMessage) ProtoReflect() protoreflect.Message { mi := &file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[18] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1677,21 +1671,18 @@ func (x *ConsumerApplication_LiveLocationMessage) GetTimeOffset() uint32 { } type ConsumerApplication_ContactsArrayMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + DisplayName *string `protobuf:"bytes,1,opt,name=displayName" json:"displayName,omitempty"` + Contacts []*ConsumerApplication_ContactMessage `protobuf:"bytes,2,rep,name=contacts" json:"contacts,omitempty"` unknownFields protoimpl.UnknownFields - - DisplayName *string `protobuf:"bytes,1,opt,name=displayName" json:"displayName,omitempty"` - Contacts []*ConsumerApplication_ContactMessage `protobuf:"bytes,2,rep,name=contacts" json:"contacts,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ConsumerApplication_ContactsArrayMessage) Reset() { *x = ConsumerApplication_ContactsArrayMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[19] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[19] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ConsumerApplication_ContactsArrayMessage) String() string { @@ -1702,7 +1693,7 @@ func (*ConsumerApplication_ContactsArrayMessage) ProtoMessage() {} func (x *ConsumerApplication_ContactsArrayMessage) ProtoReflect() protoreflect.Message { mi := &file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[19] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1732,20 +1723,17 @@ func (x *ConsumerApplication_ContactsArrayMessage) GetContacts() []*ConsumerAppl } type ConsumerApplication_ContactMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Contact *waCommon.SubProtocol `protobuf:"bytes,1,opt,name=contact" json:"contact,omitempty"` unknownFields protoimpl.UnknownFields - - Contact *waCommon.SubProtocol `protobuf:"bytes,1,opt,name=contact" json:"contact,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ConsumerApplication_ContactMessage) Reset() { *x = ConsumerApplication_ContactMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[20] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[20] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ConsumerApplication_ContactMessage) String() string { @@ -1756,7 +1744,7 @@ func (*ConsumerApplication_ContactMessage) ProtoMessage() {} func (x *ConsumerApplication_ContactMessage) ProtoReflect() protoreflect.Message { mi := &file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[20] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1779,23 +1767,20 @@ func (x *ConsumerApplication_ContactMessage) GetContact() *waCommon.SubProtocol } type ConsumerApplication_StatusTextMesage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` Text *ConsumerApplication_ExtendedTextMessage `protobuf:"bytes,1,opt,name=text" json:"text,omitempty"` TextArgb *uint32 `protobuf:"fixed32,6,opt,name=textArgb" json:"textArgb,omitempty"` BackgroundArgb *uint32 `protobuf:"fixed32,7,opt,name=backgroundArgb" json:"backgroundArgb,omitempty"` Font *ConsumerApplication_StatusTextMesage_FontType `protobuf:"varint,8,opt,name=font,enum=WAConsumerApplication.ConsumerApplication_StatusTextMesage_FontType" json:"font,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ConsumerApplication_StatusTextMesage) Reset() { *x = ConsumerApplication_StatusTextMesage{} - if protoimpl.UnsafeEnabled { - mi := &file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[21] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[21] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ConsumerApplication_StatusTextMesage) String() string { @@ -1806,7 +1791,7 @@ func (*ConsumerApplication_StatusTextMesage) ProtoMessage() {} func (x *ConsumerApplication_StatusTextMesage) ProtoReflect() protoreflect.Message { mi := &file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[21] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1850,26 +1835,23 @@ func (x *ConsumerApplication_StatusTextMesage) GetFont() ConsumerApplication_Sta } type ConsumerApplication_ExtendedTextMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Text *waCommon.MessageText `protobuf:"bytes,1,opt,name=text" json:"text,omitempty"` + MatchedText *string `protobuf:"bytes,2,opt,name=matchedText" json:"matchedText,omitempty"` + CanonicalURL *string `protobuf:"bytes,3,opt,name=canonicalURL" json:"canonicalURL,omitempty"` + Description *string `protobuf:"bytes,4,opt,name=description" json:"description,omitempty"` + Title *string `protobuf:"bytes,5,opt,name=title" json:"title,omitempty"` + Thumbnail *waCommon.SubProtocol `protobuf:"bytes,6,opt,name=thumbnail" json:"thumbnail,omitempty"` + PreviewType *ConsumerApplication_ExtendedTextMessage_PreviewType `protobuf:"varint,7,opt,name=previewType,enum=WAConsumerApplication.ConsumerApplication_ExtendedTextMessage_PreviewType" json:"previewType,omitempty"` unknownFields protoimpl.UnknownFields - - Text *waCommon.MessageText `protobuf:"bytes,1,opt,name=text" json:"text,omitempty"` - MatchedText *string `protobuf:"bytes,2,opt,name=matchedText" json:"matchedText,omitempty"` - CanonicalURL *string `protobuf:"bytes,3,opt,name=canonicalURL" json:"canonicalURL,omitempty"` - Description *string `protobuf:"bytes,4,opt,name=description" json:"description,omitempty"` - Title *string `protobuf:"bytes,5,opt,name=title" json:"title,omitempty"` - Thumbnail *waCommon.SubProtocol `protobuf:"bytes,6,opt,name=thumbnail" json:"thumbnail,omitempty"` - PreviewType *ConsumerApplication_ExtendedTextMessage_PreviewType `protobuf:"varint,7,opt,name=previewType,enum=WAConsumerApplication.ConsumerApplication_ExtendedTextMessage_PreviewType" json:"previewType,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ConsumerApplication_ExtendedTextMessage) Reset() { *x = ConsumerApplication_ExtendedTextMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[22] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[22] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ConsumerApplication_ExtendedTextMessage) String() string { @@ -1880,7 +1862,7 @@ func (*ConsumerApplication_ExtendedTextMessage) ProtoMessage() {} func (x *ConsumerApplication_ExtendedTextMessage) ProtoReflect() protoreflect.Message { mi := &file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[22] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1945,21 +1927,18 @@ func (x *ConsumerApplication_ExtendedTextMessage) GetPreviewType() ConsumerAppli } type ConsumerApplication_LocationMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Location *ConsumerApplication_Location `protobuf:"bytes,1,opt,name=location" json:"location,omitempty"` + Address *string `protobuf:"bytes,2,opt,name=address" json:"address,omitempty"` unknownFields protoimpl.UnknownFields - - Location *ConsumerApplication_Location `protobuf:"bytes,1,opt,name=location" json:"location,omitempty"` - Address *string `protobuf:"bytes,2,opt,name=address" json:"address,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ConsumerApplication_LocationMessage) Reset() { *x = ConsumerApplication_LocationMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[23] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[23] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ConsumerApplication_LocationMessage) String() string { @@ -1970,7 +1949,7 @@ func (*ConsumerApplication_LocationMessage) ProtoMessage() {} func (x *ConsumerApplication_LocationMessage) ProtoReflect() protoreflect.Message { mi := &file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[23] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2000,20 +1979,17 @@ func (x *ConsumerApplication_LocationMessage) GetAddress() string { } type ConsumerApplication_StickerMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Sticker *waCommon.SubProtocol `protobuf:"bytes,1,opt,name=sticker" json:"sticker,omitempty"` unknownFields protoimpl.UnknownFields - - Sticker *waCommon.SubProtocol `protobuf:"bytes,1,opt,name=sticker" json:"sticker,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ConsumerApplication_StickerMessage) Reset() { *x = ConsumerApplication_StickerMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[24] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[24] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ConsumerApplication_StickerMessage) String() string { @@ -2024,7 +2000,7 @@ func (*ConsumerApplication_StickerMessage) ProtoMessage() {} func (x *ConsumerApplication_StickerMessage) ProtoReflect() protoreflect.Message { mi := &file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[24] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2047,21 +2023,18 @@ func (x *ConsumerApplication_StickerMessage) GetSticker() *waCommon.SubProtocol } type ConsumerApplication_DocumentMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Document *waCommon.SubProtocol `protobuf:"bytes,1,opt,name=document" json:"document,omitempty"` + FileName *string `protobuf:"bytes,2,opt,name=fileName" json:"fileName,omitempty"` unknownFields protoimpl.UnknownFields - - Document *waCommon.SubProtocol `protobuf:"bytes,1,opt,name=document" json:"document,omitempty"` - FileName *string `protobuf:"bytes,2,opt,name=fileName" json:"fileName,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ConsumerApplication_DocumentMessage) Reset() { *x = ConsumerApplication_DocumentMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[25] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[25] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ConsumerApplication_DocumentMessage) String() string { @@ -2072,7 +2045,7 @@ func (*ConsumerApplication_DocumentMessage) ProtoMessage() {} func (x *ConsumerApplication_DocumentMessage) ProtoReflect() protoreflect.Message { mi := &file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[25] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2102,21 +2075,18 @@ func (x *ConsumerApplication_DocumentMessage) GetFileName() string { } type ConsumerApplication_VideoMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Video *waCommon.SubProtocol `protobuf:"bytes,1,opt,name=video" json:"video,omitempty"` + Caption *waCommon.MessageText `protobuf:"bytes,2,opt,name=caption" json:"caption,omitempty"` unknownFields protoimpl.UnknownFields - - Video *waCommon.SubProtocol `protobuf:"bytes,1,opt,name=video" json:"video,omitempty"` - Caption *waCommon.MessageText `protobuf:"bytes,2,opt,name=caption" json:"caption,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ConsumerApplication_VideoMessage) Reset() { *x = ConsumerApplication_VideoMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[26] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[26] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ConsumerApplication_VideoMessage) String() string { @@ -2127,7 +2097,7 @@ func (*ConsumerApplication_VideoMessage) ProtoMessage() {} func (x *ConsumerApplication_VideoMessage) ProtoReflect() protoreflect.Message { mi := &file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[26] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2157,21 +2127,18 @@ func (x *ConsumerApplication_VideoMessage) GetCaption() *waCommon.MessageText { } type ConsumerApplication_AudioMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Audio *waCommon.SubProtocol `protobuf:"bytes,1,opt,name=audio" json:"audio,omitempty"` + PTT *bool `protobuf:"varint,2,opt,name=PTT" json:"PTT,omitempty"` unknownFields protoimpl.UnknownFields - - Audio *waCommon.SubProtocol `protobuf:"bytes,1,opt,name=audio" json:"audio,omitempty"` - PTT *bool `protobuf:"varint,2,opt,name=PTT" json:"PTT,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ConsumerApplication_AudioMessage) Reset() { *x = ConsumerApplication_AudioMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[27] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[27] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ConsumerApplication_AudioMessage) String() string { @@ -2182,7 +2149,7 @@ func (*ConsumerApplication_AudioMessage) ProtoMessage() {} func (x *ConsumerApplication_AudioMessage) ProtoReflect() protoreflect.Message { mi := &file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[27] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2212,21 +2179,18 @@ func (x *ConsumerApplication_AudioMessage) GetPTT() bool { } type ConsumerApplication_ImageMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Image *waCommon.SubProtocol `protobuf:"bytes,1,opt,name=image" json:"image,omitempty"` + Caption *waCommon.MessageText `protobuf:"bytes,2,opt,name=caption" json:"caption,omitempty"` unknownFields protoimpl.UnknownFields - - Image *waCommon.SubProtocol `protobuf:"bytes,1,opt,name=image" json:"image,omitempty"` - Caption *waCommon.MessageText `protobuf:"bytes,2,opt,name=caption" json:"caption,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ConsumerApplication_ImageMessage) Reset() { *x = ConsumerApplication_ImageMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[28] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[28] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ConsumerApplication_ImageMessage) String() string { @@ -2237,7 +2201,7 @@ func (*ConsumerApplication_ImageMessage) ProtoMessage() {} func (x *ConsumerApplication_ImageMessage) ProtoReflect() protoreflect.Message { mi := &file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[28] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2267,24 +2231,21 @@ func (x *ConsumerApplication_ImageMessage) GetCaption() *waCommon.MessageText { } type ConsumerApplication_InteractiveAnnotation struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Types that are assignable to Action: + state protoimpl.MessageState `protogen:"open.v1"` + // Types that are valid to be assigned to Action: // // *ConsumerApplication_InteractiveAnnotation_Location Action isConsumerApplication_InteractiveAnnotation_Action `protobuf_oneof:"action"` PolygonVertices []*ConsumerApplication_Point `protobuf:"bytes,1,rep,name=polygonVertices" json:"polygonVertices,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ConsumerApplication_InteractiveAnnotation) Reset() { *x = ConsumerApplication_InteractiveAnnotation{} - if protoimpl.UnsafeEnabled { - mi := &file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[29] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[29] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ConsumerApplication_InteractiveAnnotation) String() string { @@ -2295,7 +2256,7 @@ func (*ConsumerApplication_InteractiveAnnotation) ProtoMessage() {} func (x *ConsumerApplication_InteractiveAnnotation) ProtoReflect() protoreflect.Message { mi := &file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[29] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2310,16 +2271,18 @@ func (*ConsumerApplication_InteractiveAnnotation) Descriptor() ([]byte, []int) { return file_waConsumerApplication_WAConsumerApplication_proto_rawDescGZIP(), []int{0, 28} } -func (m *ConsumerApplication_InteractiveAnnotation) GetAction() isConsumerApplication_InteractiveAnnotation_Action { - if m != nil { - return m.Action +func (x *ConsumerApplication_InteractiveAnnotation) GetAction() isConsumerApplication_InteractiveAnnotation_Action { + if x != nil { + return x.Action } return nil } func (x *ConsumerApplication_InteractiveAnnotation) GetLocation() *ConsumerApplication_Location { - if x, ok := x.GetAction().(*ConsumerApplication_InteractiveAnnotation_Location); ok { - return x.Location + if x != nil { + if x, ok := x.Action.(*ConsumerApplication_InteractiveAnnotation_Location); ok { + return x.Location + } } return nil } @@ -2343,21 +2306,18 @@ func (*ConsumerApplication_InteractiveAnnotation_Location) isConsumerApplication } type ConsumerApplication_Point struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + X *float64 `protobuf:"fixed64,1,opt,name=x" json:"x,omitempty"` + Y *float64 `protobuf:"fixed64,2,opt,name=y" json:"y,omitempty"` unknownFields protoimpl.UnknownFields - - X *float64 `protobuf:"fixed64,1,opt,name=x" json:"x,omitempty"` - Y *float64 `protobuf:"fixed64,2,opt,name=y" json:"y,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ConsumerApplication_Point) Reset() { *x = ConsumerApplication_Point{} - if protoimpl.UnsafeEnabled { - mi := &file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[30] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[30] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ConsumerApplication_Point) String() string { @@ -2368,7 +2328,7 @@ func (*ConsumerApplication_Point) ProtoMessage() {} func (x *ConsumerApplication_Point) ProtoReflect() protoreflect.Message { mi := &file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[30] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2398,22 +2358,19 @@ func (x *ConsumerApplication_Point) GetY() float64 { } type ConsumerApplication_Location struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - DegreesLatitude *float64 `protobuf:"fixed64,1,opt,name=degreesLatitude" json:"degreesLatitude,omitempty"` - DegreesLongitude *float64 `protobuf:"fixed64,2,opt,name=degreesLongitude" json:"degreesLongitude,omitempty"` - Name *string `protobuf:"bytes,3,opt,name=name" json:"name,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + DegreesLatitude *float64 `protobuf:"fixed64,1,opt,name=degreesLatitude" json:"degreesLatitude,omitempty"` + DegreesLongitude *float64 `protobuf:"fixed64,2,opt,name=degreesLongitude" json:"degreesLongitude,omitempty"` + Name *string `protobuf:"bytes,3,opt,name=name" json:"name,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ConsumerApplication_Location) Reset() { *x = ConsumerApplication_Location{} - if protoimpl.UnsafeEnabled { - mi := &file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[31] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[31] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ConsumerApplication_Location) String() string { @@ -2424,7 +2381,7 @@ func (*ConsumerApplication_Location) ProtoMessage() {} func (x *ConsumerApplication_Location) ProtoReflect() protoreflect.Message { mi := &file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[31] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2461,20 +2418,17 @@ func (x *ConsumerApplication_Location) GetName() string { } type ConsumerApplication_MediaPayload struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Protocol *waCommon.SubProtocol `protobuf:"bytes,1,opt,name=protocol" json:"protocol,omitempty"` unknownFields protoimpl.UnknownFields - - Protocol *waCommon.SubProtocol `protobuf:"bytes,1,opt,name=protocol" json:"protocol,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ConsumerApplication_MediaPayload) Reset() { *x = ConsumerApplication_MediaPayload{} - if protoimpl.UnsafeEnabled { - mi := &file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[32] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[32] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ConsumerApplication_MediaPayload) String() string { @@ -2485,7 +2439,7 @@ func (*ConsumerApplication_MediaPayload) ProtoMessage() {} func (x *ConsumerApplication_MediaPayload) ProtoReflect() protoreflect.Message { mi := &file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[32] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2509,17 +2463,183 @@ func (x *ConsumerApplication_MediaPayload) GetProtocol() *waCommon.SubProtocol { var File_waConsumerApplication_WAConsumerApplication_proto protoreflect.FileDescriptor -//go:embed WAConsumerApplication.pb.raw -var file_waConsumerApplication_WAConsumerApplication_proto_rawDesc []byte +const file_waConsumerApplication_WAConsumerApplication_proto_rawDesc = "" + + "\n" + + "1waConsumerApplication/WAConsumerApplication.proto\x12\x15WAConsumerApplication\x1a\x17waCommon/WACommon.proto\"\x9d6\n" + + "\x13ConsumerApplication\x12L\n" + + "\apayload\x18\x01 \x01(\v22.WAConsumerApplication.ConsumerApplication.PayloadR\apayload\x12O\n" + + "\bmetadata\x18\x02 \x01(\v23.WAConsumerApplication.ConsumerApplication.MetadataR\bmetadata\x1a\xfc\x02\n" + + "\aPayload\x12N\n" + + "\acontent\x18\x01 \x01(\v22.WAConsumerApplication.ConsumerApplication.ContentH\x00R\acontent\x12f\n" + + "\x0fapplicationData\x18\x02 \x01(\v2:.WAConsumerApplication.ConsumerApplication.ApplicationDataH\x00R\x0fapplicationData\x12K\n" + + "\x06signal\x18\x03 \x01(\v21.WAConsumerApplication.ConsumerApplication.SignalH\x00R\x06signal\x12a\n" + + "\vsubProtocol\x18\x04 \x01(\v2=.WAConsumerApplication.ConsumerApplication.SubProtocolPayloadH\x00R\vsubProtocolB\t\n" + + "\apayload\x1aU\n" + + "\x12SubProtocolPayload\x12?\n" + + "\vfutureProof\x18\x01 \x01(\x0e2\x1d.WACommon.FutureProofBehaviorR\vfutureProof\x1a\xae\x01\n" + + "\bMetadata\x12m\n" + + "\x0fspecialTextSize\x18\x01 \x01(\x0e2C.WAConsumerApplication.ConsumerApplication.Metadata.SpecialTextSizeR\x0fspecialTextSize\"3\n" + + "\x0fSpecialTextSize\x12\t\n" + + "\x05SMALL\x10\x01\x12\n" + + "\n" + + "\x06MEDIUM\x10\x02\x12\t\n" + + "\x05LARGE\x10\x03\x1a\b\n" + + "\x06Signal\x1a{\n" + + "\x0fApplicationData\x12R\n" + + "\x06revoke\x18\x01 \x01(\v28.WAConsumerApplication.ConsumerApplication.RevokeMessageH\x00R\x06revokeB\x14\n" + + "\x12applicationContent\x1a\xd1\x0e\n" + + "\aContent\x129\n" + + "\vmessageText\x18\x01 \x01(\v2\x15.WACommon.MessageTextH\x00R\vmessageText\x12]\n" + + "\fimageMessage\x18\x02 \x01(\v27.WAConsumerApplication.ConsumerApplication.ImageMessageH\x00R\fimageMessage\x12c\n" + + "\x0econtactMessage\x18\x03 \x01(\v29.WAConsumerApplication.ConsumerApplication.ContactMessageH\x00R\x0econtactMessage\x12f\n" + + "\x0flocationMessage\x18\x04 \x01(\v2:.WAConsumerApplication.ConsumerApplication.LocationMessageH\x00R\x0flocationMessage\x12r\n" + + "\x13extendedTextMessage\x18\x05 \x01(\v2>.WAConsumerApplication.ConsumerApplication.ExtendedTextMessageH\x00R\x13extendedTextMessage\x12k\n" + + "\x11statusTextMessage\x18\x06 \x01(\v2;.WAConsumerApplication.ConsumerApplication.StatusTextMesageH\x00R\x11statusTextMessage\x12f\n" + + "\x0fdocumentMessage\x18\a \x01(\v2:.WAConsumerApplication.ConsumerApplication.DocumentMessageH\x00R\x0fdocumentMessage\x12]\n" + + "\faudioMessage\x18\b \x01(\v27.WAConsumerApplication.ConsumerApplication.AudioMessageH\x00R\faudioMessage\x12]\n" + + "\fvideoMessage\x18\t \x01(\v27.WAConsumerApplication.ConsumerApplication.VideoMessageH\x00R\fvideoMessage\x12u\n" + + "\x14contactsArrayMessage\x18\n" + + " \x01(\v2?.WAConsumerApplication.ConsumerApplication.ContactsArrayMessageH\x00R\x14contactsArrayMessage\x12r\n" + + "\x13liveLocationMessage\x18\v \x01(\v2>.WAConsumerApplication.ConsumerApplication.LiveLocationMessageH\x00R\x13liveLocationMessage\x12c\n" + + "\x0estickerMessage\x18\f \x01(\v29.WAConsumerApplication.ConsumerApplication.StickerMessageH\x00R\x0estickerMessage\x12o\n" + + "\x12groupInviteMessage\x18\r \x01(\v2=.WAConsumerApplication.ConsumerApplication.GroupInviteMessageH\x00R\x12groupInviteMessage\x12f\n" + + "\x0fviewOnceMessage\x18\x0e \x01(\v2:.WAConsumerApplication.ConsumerApplication.ViewOnceMessageH\x00R\x0fviewOnceMessage\x12f\n" + + "\x0freactionMessage\x18\x10 \x01(\v2:.WAConsumerApplication.ConsumerApplication.ReactionMessageH\x00R\x0freactionMessage\x12r\n" + + "\x13pollCreationMessage\x18\x11 \x01(\v2>.WAConsumerApplication.ConsumerApplication.PollCreationMessageH\x00R\x13pollCreationMessage\x12l\n" + + "\x11pollUpdateMessage\x18\x12 \x01(\v2<.WAConsumerApplication.ConsumerApplication.PollUpdateMessageH\x00R\x11pollUpdateMessage\x12Z\n" + + "\veditMessage\x18\x13 \x01(\v26.WAConsumerApplication.ConsumerApplication.EditMessageH\x00R\veditMessageB\t\n" + + "\acontent\x1a\x88\x01\n" + + "\vEditMessage\x12&\n" + + "\x03key\x18\x01 \x01(\v2\x14.WACommon.MessageKeyR\x03key\x12/\n" + + "\amessage\x18\x02 \x01(\v2\x15.WACommon.MessageTextR\amessage\x12 \n" + + "\vtimestampMS\x18\x03 \x01(\x03R\vtimestampMS\x1ai\n" + + "\x14PollAddOptionMessage\x12Q\n" + + "\n" + + "pollOption\x18\x01 \x03(\v21.WAConsumerApplication.ConsumerApplication.OptionR\n" + + "pollOption\x1ai\n" + + "\x0fPollVoteMessage\x12(\n" + + "\x0fselectedOptions\x18\x01 \x03(\fR\x0fselectedOptions\x12,\n" + + "\x11senderTimestampMS\x18\x02 \x01(\x03R\x11senderTimestampMS\x1aD\n" + + "\fPollEncValue\x12\x1e\n" + + "\n" + + "encPayload\x18\x01 \x01(\fR\n" + + "encPayload\x12\x14\n" + + "\x05encIV\x18\x02 \x01(\fR\x05encIV\x1a\x85\x02\n" + + "\x11PollUpdateMessage\x12L\n" + + "\x16pollCreationMessageKey\x18\x01 \x01(\v2\x14.WACommon.MessageKeyR\x16pollCreationMessageKey\x12K\n" + + "\x04vote\x18\x02 \x01(\v27.WAConsumerApplication.ConsumerApplication.PollEncValueR\x04vote\x12U\n" + + "\taddOption\x18\x03 \x01(\v27.WAConsumerApplication.ConsumerApplication.PollEncValueR\taddOption\x1a\xc6\x01\n" + + "\x13PollCreationMessage\x12\x16\n" + + "\x06encKey\x18\x01 \x01(\fR\x06encKey\x12\x12\n" + + "\x04name\x18\x02 \x01(\tR\x04name\x12K\n" + + "\aoptions\x18\x03 \x03(\v21.WAConsumerApplication.ConsumerApplication.OptionR\aoptions\x126\n" + + "\x16selectableOptionsCount\x18\x04 \x01(\rR\x16selectableOptionsCount\x1a(\n" + + "\x06Option\x12\x1e\n" + + "\n" + + "optionName\x18\x01 \x01(\tR\n" + + "optionName\x1a\xf9\x01\n" + + "\x0fReactionMessage\x12&\n" + + "\x03key\x18\x01 \x01(\v2\x14.WACommon.MessageKeyR\x03key\x12\x12\n" + + "\x04text\x18\x02 \x01(\tR\x04text\x12 \n" + + "\vgroupingKey\x18\x03 \x01(\tR\vgroupingKey\x12,\n" + + "\x11senderTimestampMS\x18\x04 \x01(\x03R\x11senderTimestampMS\x12D\n" + + "\x1dreactionMetadataDataclassData\x18\x05 \x01(\tR\x1dreactionMetadataDataclassData\x12\x14\n" + + "\x05style\x18\x06 \x01(\x05R\x05style\x1a7\n" + + "\rRevokeMessage\x12&\n" + + "\x03key\x18\x01 \x01(\v2\x14.WACommon.MessageKeyR\x03key\x1a\xe2\x01\n" + + "\x0fViewOnceMessage\x12]\n" + + "\fimageMessage\x18\x01 \x01(\v27.WAConsumerApplication.ConsumerApplication.ImageMessageH\x00R\fimageMessage\x12]\n" + + "\fvideoMessage\x18\x02 \x01(\v27.WAConsumerApplication.ConsumerApplication.VideoMessageH\x00R\fvideoMessageB\x11\n" + + "\x0fviewOnceContent\x1a\xf1\x01\n" + + "\x12GroupInviteMessage\x12\x1a\n" + + "\bgroupJID\x18\x01 \x01(\tR\bgroupJID\x12\x1e\n" + + "\n" + + "inviteCode\x18\x02 \x01(\tR\n" + + "inviteCode\x12*\n" + + "\x10inviteExpiration\x18\x03 \x01(\x03R\x10inviteExpiration\x12\x1c\n" + + "\tgroupName\x18\x04 \x01(\tR\tgroupName\x12$\n" + + "\rJPEGThumbnail\x18\x05 \x01(\fR\rJPEGThumbnail\x12/\n" + + "\acaption\x18\x06 \x01(\v2\x15.WACommon.MessageTextR\acaption\x1a\xf9\x02\n" + + "\x13LiveLocationMessage\x12O\n" + + "\blocation\x18\x01 \x01(\v23.WAConsumerApplication.ConsumerApplication.LocationR\blocation\x12*\n" + + "\x10accuracyInMeters\x18\x02 \x01(\rR\x10accuracyInMeters\x12\x1e\n" + + "\n" + + "speedInMps\x18\x03 \x01(\x02R\n" + + "speedInMps\x12L\n" + + "!degreesClockwiseFromMagneticNorth\x18\x04 \x01(\rR!degreesClockwiseFromMagneticNorth\x12/\n" + + "\acaption\x18\x05 \x01(\v2\x15.WACommon.MessageTextR\acaption\x12&\n" + + "\x0esequenceNumber\x18\x06 \x01(\x03R\x0esequenceNumber\x12\x1e\n" + + "\n" + + "timeOffset\x18\a \x01(\rR\n" + + "timeOffset\x1a\x8f\x01\n" + + "\x14ContactsArrayMessage\x12 \n" + + "\vdisplayName\x18\x01 \x01(\tR\vdisplayName\x12U\n" + + "\bcontacts\x18\x02 \x03(\v29.WAConsumerApplication.ConsumerApplication.ContactMessageR\bcontacts\x1aA\n" + + "\x0eContactMessage\x12/\n" + + "\acontact\x18\x01 \x01(\v2\x15.WACommon.SubProtocolR\acontact\x1a\xfc\x02\n" + + "\x10StatusTextMesage\x12R\n" + + "\x04text\x18\x01 \x01(\v2>.WAConsumerApplication.ConsumerApplication.ExtendedTextMessageR\x04text\x12\x1a\n" + + "\btextArgb\x18\x06 \x01(\aR\btextArgb\x12&\n" + + "\x0ebackgroundArgb\x18\a \x01(\aR\x0ebackgroundArgb\x12X\n" + + "\x04font\x18\b \x01(\x0e2D.WAConsumerApplication.ConsumerApplication.StatusTextMesage.FontTypeR\x04font\"v\n" + + "\bFontType\x12\x0e\n" + + "\n" + + "SANS_SERIF\x10\x00\x12\t\n" + + "\x05SERIF\x10\x01\x12\x13\n" + + "\x0fNORICAN_REGULAR\x10\x02\x12\x11\n" + + "\rBRYNDAN_WRITE\x10\x03\x12\x15\n" + + "\x11BEBASNEUE_REGULAR\x10\x04\x12\x10\n" + + "\fOSWALD_HEAVY\x10\x05\x1a\x85\x03\n" + + "\x13ExtendedTextMessage\x12)\n" + + "\x04text\x18\x01 \x01(\v2\x15.WACommon.MessageTextR\x04text\x12 \n" + + "\vmatchedText\x18\x02 \x01(\tR\vmatchedText\x12\"\n" + + "\fcanonicalURL\x18\x03 \x01(\tR\fcanonicalURL\x12 \n" + + "\vdescription\x18\x04 \x01(\tR\vdescription\x12\x14\n" + + "\x05title\x18\x05 \x01(\tR\x05title\x123\n" + + "\tthumbnail\x18\x06 \x01(\v2\x15.WACommon.SubProtocolR\tthumbnail\x12l\n" + + "\vpreviewType\x18\a \x01(\x0e2J.WAConsumerApplication.ConsumerApplication.ExtendedTextMessage.PreviewTypeR\vpreviewType\"\"\n" + + "\vPreviewType\x12\b\n" + + "\x04NONE\x10\x00\x12\t\n" + + "\x05VIDEO\x10\x01\x1a|\n" + + "\x0fLocationMessage\x12O\n" + + "\blocation\x18\x01 \x01(\v23.WAConsumerApplication.ConsumerApplication.LocationR\blocation\x12\x18\n" + + "\aaddress\x18\x02 \x01(\tR\aaddress\x1aA\n" + + "\x0eStickerMessage\x12/\n" + + "\asticker\x18\x01 \x01(\v2\x15.WACommon.SubProtocolR\asticker\x1a`\n" + + "\x0fDocumentMessage\x121\n" + + "\bdocument\x18\x01 \x01(\v2\x15.WACommon.SubProtocolR\bdocument\x12\x1a\n" + + "\bfileName\x18\x02 \x01(\tR\bfileName\x1al\n" + + "\fVideoMessage\x12+\n" + + "\x05video\x18\x01 \x01(\v2\x15.WACommon.SubProtocolR\x05video\x12/\n" + + "\acaption\x18\x02 \x01(\v2\x15.WACommon.MessageTextR\acaption\x1aM\n" + + "\fAudioMessage\x12+\n" + + "\x05audio\x18\x01 \x01(\v2\x15.WACommon.SubProtocolR\x05audio\x12\x10\n" + + "\x03PTT\x18\x02 \x01(\bR\x03PTT\x1al\n" + + "\fImageMessage\x12+\n" + + "\x05image\x18\x01 \x01(\v2\x15.WACommon.SubProtocolR\x05image\x12/\n" + + "\acaption\x18\x02 \x01(\v2\x15.WACommon.MessageTextR\acaption\x1a\xd0\x01\n" + + "\x15InteractiveAnnotation\x12Q\n" + + "\blocation\x18\x02 \x01(\v23.WAConsumerApplication.ConsumerApplication.LocationH\x00R\blocation\x12Z\n" + + "\x0fpolygonVertices\x18\x01 \x03(\v20.WAConsumerApplication.ConsumerApplication.PointR\x0fpolygonVerticesB\b\n" + + "\x06action\x1a#\n" + + "\x05Point\x12\f\n" + + "\x01x\x18\x01 \x01(\x01R\x01x\x12\f\n" + + "\x01y\x18\x02 \x01(\x01R\x01y\x1at\n" + + "\bLocation\x12(\n" + + "\x0fdegreesLatitude\x18\x01 \x01(\x01R\x0fdegreesLatitude\x12*\n" + + "\x10degreesLongitude\x18\x02 \x01(\x01R\x10degreesLongitude\x12\x12\n" + + "\x04name\x18\x03 \x01(\tR\x04name\x1aA\n" + + "\fMediaPayload\x121\n" + + "\bprotocol\x18\x01 \x01(\v2\x15.WACommon.SubProtocolR\bprotocolB1Z/go.mau.fi/whatsmeow/proto/waConsumerApplication" var ( file_waConsumerApplication_WAConsumerApplication_proto_rawDescOnce sync.Once - file_waConsumerApplication_WAConsumerApplication_proto_rawDescData = file_waConsumerApplication_WAConsumerApplication_proto_rawDesc + file_waConsumerApplication_WAConsumerApplication_proto_rawDescData []byte ) func file_waConsumerApplication_WAConsumerApplication_proto_rawDescGZIP() []byte { file_waConsumerApplication_WAConsumerApplication_proto_rawDescOnce.Do(func() { - file_waConsumerApplication_WAConsumerApplication_proto_rawDescData = protoimpl.X.CompressGZIP(file_waConsumerApplication_WAConsumerApplication_proto_rawDescData) + file_waConsumerApplication_WAConsumerApplication_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_waConsumerApplication_WAConsumerApplication_proto_rawDesc), len(file_waConsumerApplication_WAConsumerApplication_proto_rawDesc))) }) return file_waConsumerApplication_WAConsumerApplication_proto_rawDescData } @@ -2640,404 +2760,6 @@ func file_waConsumerApplication_WAConsumerApplication_proto_init() { if File_waConsumerApplication_WAConsumerApplication_proto != nil { return } - if !protoimpl.UnsafeEnabled { - file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[0].Exporter = func(v any, i int) any { - switch v := v.(*ConsumerApplication); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[1].Exporter = func(v any, i int) any { - switch v := v.(*ConsumerApplication_Payload); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[2].Exporter = func(v any, i int) any { - switch v := v.(*ConsumerApplication_SubProtocolPayload); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[3].Exporter = func(v any, i int) any { - switch v := v.(*ConsumerApplication_Metadata); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[4].Exporter = func(v any, i int) any { - switch v := v.(*ConsumerApplication_Signal); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[5].Exporter = func(v any, i int) any { - switch v := v.(*ConsumerApplication_ApplicationData); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[6].Exporter = func(v any, i int) any { - switch v := v.(*ConsumerApplication_Content); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[7].Exporter = func(v any, i int) any { - switch v := v.(*ConsumerApplication_EditMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[8].Exporter = func(v any, i int) any { - switch v := v.(*ConsumerApplication_PollAddOptionMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[9].Exporter = func(v any, i int) any { - switch v := v.(*ConsumerApplication_PollVoteMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[10].Exporter = func(v any, i int) any { - switch v := v.(*ConsumerApplication_PollEncValue); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[11].Exporter = func(v any, i int) any { - switch v := v.(*ConsumerApplication_PollUpdateMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[12].Exporter = func(v any, i int) any { - switch v := v.(*ConsumerApplication_PollCreationMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[13].Exporter = func(v any, i int) any { - switch v := v.(*ConsumerApplication_Option); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[14].Exporter = func(v any, i int) any { - switch v := v.(*ConsumerApplication_ReactionMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[15].Exporter = func(v any, i int) any { - switch v := v.(*ConsumerApplication_RevokeMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[16].Exporter = func(v any, i int) any { - switch v := v.(*ConsumerApplication_ViewOnceMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[17].Exporter = func(v any, i int) any { - switch v := v.(*ConsumerApplication_GroupInviteMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[18].Exporter = func(v any, i int) any { - switch v := v.(*ConsumerApplication_LiveLocationMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[19].Exporter = func(v any, i int) any { - switch v := v.(*ConsumerApplication_ContactsArrayMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[20].Exporter = func(v any, i int) any { - switch v := v.(*ConsumerApplication_ContactMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[21].Exporter = func(v any, i int) any { - switch v := v.(*ConsumerApplication_StatusTextMesage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[22].Exporter = func(v any, i int) any { - switch v := v.(*ConsumerApplication_ExtendedTextMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[23].Exporter = func(v any, i int) any { - switch v := v.(*ConsumerApplication_LocationMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[24].Exporter = func(v any, i int) any { - switch v := v.(*ConsumerApplication_StickerMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[25].Exporter = func(v any, i int) any { - switch v := v.(*ConsumerApplication_DocumentMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[26].Exporter = func(v any, i int) any { - switch v := v.(*ConsumerApplication_VideoMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[27].Exporter = func(v any, i int) any { - switch v := v.(*ConsumerApplication_AudioMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[28].Exporter = func(v any, i int) any { - switch v := v.(*ConsumerApplication_ImageMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[29].Exporter = func(v any, i int) any { - switch v := v.(*ConsumerApplication_InteractiveAnnotation); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[30].Exporter = func(v any, i int) any { - switch v := v.(*ConsumerApplication_Point); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[31].Exporter = func(v any, i int) any { - switch v := v.(*ConsumerApplication_Location); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[32].Exporter = func(v any, i int) any { - switch v := v.(*ConsumerApplication_MediaPayload); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } file_waConsumerApplication_WAConsumerApplication_proto_msgTypes[1].OneofWrappers = []any{ (*ConsumerApplication_Payload_Content)(nil), (*ConsumerApplication_Payload_ApplicationData)(nil), @@ -3078,7 +2800,7 @@ func file_waConsumerApplication_WAConsumerApplication_proto_init() { out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_waConsumerApplication_WAConsumerApplication_proto_rawDesc, + RawDescriptor: unsafe.Slice(unsafe.StringData(file_waConsumerApplication_WAConsumerApplication_proto_rawDesc), len(file_waConsumerApplication_WAConsumerApplication_proto_rawDesc)), NumEnums: 3, NumMessages: 33, NumExtensions: 0, @@ -3090,7 +2812,6 @@ func file_waConsumerApplication_WAConsumerApplication_proto_init() { MessageInfos: file_waConsumerApplication_WAConsumerApplication_proto_msgTypes, }.Build() File_waConsumerApplication_WAConsumerApplication_proto = out.File - file_waConsumerApplication_WAConsumerApplication_proto_rawDesc = nil file_waConsumerApplication_WAConsumerApplication_proto_goTypes = nil file_waConsumerApplication_WAConsumerApplication_proto_depIdxs = nil } diff --git a/vendor/go.mau.fi/whatsmeow/proto/waConsumerApplication/WAConsumerApplication.pb.raw b/vendor/go.mau.fi/whatsmeow/proto/waConsumerApplication/WAConsumerApplication.pb.raw deleted file mode 100644 index 6964bb5b9b..0000000000 Binary files a/vendor/go.mau.fi/whatsmeow/proto/waConsumerApplication/WAConsumerApplication.pb.raw and /dev/null differ diff --git a/vendor/go.mau.fi/whatsmeow/proto/waDeviceCapabilities/WAProtobufsDeviceCapabilities.pb.go b/vendor/go.mau.fi/whatsmeow/proto/waDeviceCapabilities/WAProtobufsDeviceCapabilities.pb.go deleted file mode 100644 index ef9d20d91b..0000000000 --- a/vendor/go.mau.fi/whatsmeow/proto/waDeviceCapabilities/WAProtobufsDeviceCapabilities.pb.go +++ /dev/null @@ -1,202 +0,0 @@ -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.34.2 -// protoc v3.21.12 -// source: waDeviceCapabilities/WAProtobufsDeviceCapabilities.proto - -package waDeviceCapabilities - -import ( - reflect "reflect" - sync "sync" - - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - - _ "embed" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -type DeviceCapabilities_ChatLockSupportLevel int32 - -const ( - DeviceCapabilities_NONE DeviceCapabilities_ChatLockSupportLevel = 0 - DeviceCapabilities_MINIMAL DeviceCapabilities_ChatLockSupportLevel = 1 - DeviceCapabilities_FULL DeviceCapabilities_ChatLockSupportLevel = 2 -) - -// Enum value maps for DeviceCapabilities_ChatLockSupportLevel. -var ( - DeviceCapabilities_ChatLockSupportLevel_name = map[int32]string{ - 0: "NONE", - 1: "MINIMAL", - 2: "FULL", - } - DeviceCapabilities_ChatLockSupportLevel_value = map[string]int32{ - "NONE": 0, - "MINIMAL": 1, - "FULL": 2, - } -) - -func (x DeviceCapabilities_ChatLockSupportLevel) Enum() *DeviceCapabilities_ChatLockSupportLevel { - p := new(DeviceCapabilities_ChatLockSupportLevel) - *p = x - return p -} - -func (x DeviceCapabilities_ChatLockSupportLevel) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (DeviceCapabilities_ChatLockSupportLevel) Descriptor() protoreflect.EnumDescriptor { - return file_waDeviceCapabilities_WAProtobufsDeviceCapabilities_proto_enumTypes[0].Descriptor() -} - -func (DeviceCapabilities_ChatLockSupportLevel) Type() protoreflect.EnumType { - return &file_waDeviceCapabilities_WAProtobufsDeviceCapabilities_proto_enumTypes[0] -} - -func (x DeviceCapabilities_ChatLockSupportLevel) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Do not use. -func (x *DeviceCapabilities_ChatLockSupportLevel) UnmarshalJSON(b []byte) error { - num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) - if err != nil { - return err - } - *x = DeviceCapabilities_ChatLockSupportLevel(num) - return nil -} - -// Deprecated: Use DeviceCapabilities_ChatLockSupportLevel.Descriptor instead. -func (DeviceCapabilities_ChatLockSupportLevel) EnumDescriptor() ([]byte, []int) { - return file_waDeviceCapabilities_WAProtobufsDeviceCapabilities_proto_rawDescGZIP(), []int{0, 0} -} - -type DeviceCapabilities struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - ChatLockSupportLevel *DeviceCapabilities_ChatLockSupportLevel `protobuf:"varint,1,opt,name=chatLockSupportLevel,enum=WAProtobufsDeviceCapabilities.DeviceCapabilities_ChatLockSupportLevel" json:"chatLockSupportLevel,omitempty"` -} - -func (x *DeviceCapabilities) Reset() { - *x = DeviceCapabilities{} - if protoimpl.UnsafeEnabled { - mi := &file_waDeviceCapabilities_WAProtobufsDeviceCapabilities_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *DeviceCapabilities) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*DeviceCapabilities) ProtoMessage() {} - -func (x *DeviceCapabilities) ProtoReflect() protoreflect.Message { - mi := &file_waDeviceCapabilities_WAProtobufsDeviceCapabilities_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use DeviceCapabilities.ProtoReflect.Descriptor instead. -func (*DeviceCapabilities) Descriptor() ([]byte, []int) { - return file_waDeviceCapabilities_WAProtobufsDeviceCapabilities_proto_rawDescGZIP(), []int{0} -} - -func (x *DeviceCapabilities) GetChatLockSupportLevel() DeviceCapabilities_ChatLockSupportLevel { - if x != nil && x.ChatLockSupportLevel != nil { - return *x.ChatLockSupportLevel - } - return DeviceCapabilities_NONE -} - -var File_waDeviceCapabilities_WAProtobufsDeviceCapabilities_proto protoreflect.FileDescriptor - -//go:embed WAProtobufsDeviceCapabilities.pb.raw -var file_waDeviceCapabilities_WAProtobufsDeviceCapabilities_proto_rawDesc []byte - -var ( - file_waDeviceCapabilities_WAProtobufsDeviceCapabilities_proto_rawDescOnce sync.Once - file_waDeviceCapabilities_WAProtobufsDeviceCapabilities_proto_rawDescData = file_waDeviceCapabilities_WAProtobufsDeviceCapabilities_proto_rawDesc -) - -func file_waDeviceCapabilities_WAProtobufsDeviceCapabilities_proto_rawDescGZIP() []byte { - file_waDeviceCapabilities_WAProtobufsDeviceCapabilities_proto_rawDescOnce.Do(func() { - file_waDeviceCapabilities_WAProtobufsDeviceCapabilities_proto_rawDescData = protoimpl.X.CompressGZIP(file_waDeviceCapabilities_WAProtobufsDeviceCapabilities_proto_rawDescData) - }) - return file_waDeviceCapabilities_WAProtobufsDeviceCapabilities_proto_rawDescData -} - -var file_waDeviceCapabilities_WAProtobufsDeviceCapabilities_proto_enumTypes = make([]protoimpl.EnumInfo, 1) -var file_waDeviceCapabilities_WAProtobufsDeviceCapabilities_proto_msgTypes = make([]protoimpl.MessageInfo, 1) -var file_waDeviceCapabilities_WAProtobufsDeviceCapabilities_proto_goTypes = []any{ - (DeviceCapabilities_ChatLockSupportLevel)(0), // 0: WAProtobufsDeviceCapabilities.DeviceCapabilities.ChatLockSupportLevel - (*DeviceCapabilities)(nil), // 1: WAProtobufsDeviceCapabilities.DeviceCapabilities -} -var file_waDeviceCapabilities_WAProtobufsDeviceCapabilities_proto_depIdxs = []int32{ - 0, // 0: WAProtobufsDeviceCapabilities.DeviceCapabilities.chatLockSupportLevel:type_name -> WAProtobufsDeviceCapabilities.DeviceCapabilities.ChatLockSupportLevel - 1, // [1:1] is the sub-list for method output_type - 1, // [1:1] is the sub-list for method input_type - 1, // [1:1] is the sub-list for extension type_name - 1, // [1:1] is the sub-list for extension extendee - 0, // [0:1] is the sub-list for field type_name -} - -func init() { file_waDeviceCapabilities_WAProtobufsDeviceCapabilities_proto_init() } -func file_waDeviceCapabilities_WAProtobufsDeviceCapabilities_proto_init() { - if File_waDeviceCapabilities_WAProtobufsDeviceCapabilities_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_waDeviceCapabilities_WAProtobufsDeviceCapabilities_proto_msgTypes[0].Exporter = func(v any, i int) any { - switch v := v.(*DeviceCapabilities); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_waDeviceCapabilities_WAProtobufsDeviceCapabilities_proto_rawDesc, - NumEnums: 1, - NumMessages: 1, - NumExtensions: 0, - NumServices: 0, - }, - GoTypes: file_waDeviceCapabilities_WAProtobufsDeviceCapabilities_proto_goTypes, - DependencyIndexes: file_waDeviceCapabilities_WAProtobufsDeviceCapabilities_proto_depIdxs, - EnumInfos: file_waDeviceCapabilities_WAProtobufsDeviceCapabilities_proto_enumTypes, - MessageInfos: file_waDeviceCapabilities_WAProtobufsDeviceCapabilities_proto_msgTypes, - }.Build() - File_waDeviceCapabilities_WAProtobufsDeviceCapabilities_proto = out.File - file_waDeviceCapabilities_WAProtobufsDeviceCapabilities_proto_rawDesc = nil - file_waDeviceCapabilities_WAProtobufsDeviceCapabilities_proto_goTypes = nil - file_waDeviceCapabilities_WAProtobufsDeviceCapabilities_proto_depIdxs = nil -} diff --git a/vendor/go.mau.fi/whatsmeow/proto/waDeviceCapabilities/WAProtobufsDeviceCapabilities.pb.raw b/vendor/go.mau.fi/whatsmeow/proto/waDeviceCapabilities/WAProtobufsDeviceCapabilities.pb.raw deleted file mode 100644 index 27c69f6a89..0000000000 Binary files a/vendor/go.mau.fi/whatsmeow/proto/waDeviceCapabilities/WAProtobufsDeviceCapabilities.pb.raw and /dev/null differ diff --git a/vendor/go.mau.fi/whatsmeow/proto/waDeviceCapabilities/WAProtobufsDeviceCapabilities.proto b/vendor/go.mau.fi/whatsmeow/proto/waDeviceCapabilities/WAProtobufsDeviceCapabilities.proto deleted file mode 100644 index d64c1cf1a1..0000000000 --- a/vendor/go.mau.fi/whatsmeow/proto/waDeviceCapabilities/WAProtobufsDeviceCapabilities.proto +++ /dev/null @@ -1,13 +0,0 @@ -syntax = "proto2"; -package WAProtobufsDeviceCapabilities; -option go_package = "go.mau.fi/whatsmeow/proto/waDeviceCapabilities"; - -message DeviceCapabilities { - enum ChatLockSupportLevel { - NONE = 0; - MINIMAL = 1; - FULL = 2; - } - - optional ChatLockSupportLevel chatLockSupportLevel = 1; -} diff --git a/vendor/go.mau.fi/whatsmeow/proto/waDeviceCapabilities/WAWebProtobufsDeviceCapabilities.pb.go b/vendor/go.mau.fi/whatsmeow/proto/waDeviceCapabilities/WAWebProtobufsDeviceCapabilities.pb.go new file mode 100644 index 0000000000..02758ffd74 --- /dev/null +++ b/vendor/go.mau.fi/whatsmeow/proto/waDeviceCapabilities/WAWebProtobufsDeviceCapabilities.pb.go @@ -0,0 +1,557 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.36.10 +// protoc v3.21.12 +// source: waDeviceCapabilities/WAWebProtobufsDeviceCapabilities.proto + +package waDeviceCapabilities + +import ( + reflect "reflect" + sync "sync" + unsafe "unsafe" + + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type DeviceCapabilities_MemberNameTagPrimarySupport int32 + +const ( + DeviceCapabilities_DISABLED DeviceCapabilities_MemberNameTagPrimarySupport = 0 + DeviceCapabilities_RECEIVER_ENABLED DeviceCapabilities_MemberNameTagPrimarySupport = 1 + DeviceCapabilities_SENDER_ENABLED DeviceCapabilities_MemberNameTagPrimarySupport = 2 +) + +// Enum value maps for DeviceCapabilities_MemberNameTagPrimarySupport. +var ( + DeviceCapabilities_MemberNameTagPrimarySupport_name = map[int32]string{ + 0: "DISABLED", + 1: "RECEIVER_ENABLED", + 2: "SENDER_ENABLED", + } + DeviceCapabilities_MemberNameTagPrimarySupport_value = map[string]int32{ + "DISABLED": 0, + "RECEIVER_ENABLED": 1, + "SENDER_ENABLED": 2, + } +) + +func (x DeviceCapabilities_MemberNameTagPrimarySupport) Enum() *DeviceCapabilities_MemberNameTagPrimarySupport { + p := new(DeviceCapabilities_MemberNameTagPrimarySupport) + *p = x + return p +} + +func (x DeviceCapabilities_MemberNameTagPrimarySupport) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (DeviceCapabilities_MemberNameTagPrimarySupport) Descriptor() protoreflect.EnumDescriptor { + return file_waDeviceCapabilities_WAWebProtobufsDeviceCapabilities_proto_enumTypes[0].Descriptor() +} + +func (DeviceCapabilities_MemberNameTagPrimarySupport) Type() protoreflect.EnumType { + return &file_waDeviceCapabilities_WAWebProtobufsDeviceCapabilities_proto_enumTypes[0] +} + +func (x DeviceCapabilities_MemberNameTagPrimarySupport) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *DeviceCapabilities_MemberNameTagPrimarySupport) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = DeviceCapabilities_MemberNameTagPrimarySupport(num) + return nil +} + +// Deprecated: Use DeviceCapabilities_MemberNameTagPrimarySupport.Descriptor instead. +func (DeviceCapabilities_MemberNameTagPrimarySupport) EnumDescriptor() ([]byte, []int) { + return file_waDeviceCapabilities_WAWebProtobufsDeviceCapabilities_proto_rawDescGZIP(), []int{0, 0} +} + +type DeviceCapabilities_ChatLockSupportLevel int32 + +const ( + DeviceCapabilities_NONE DeviceCapabilities_ChatLockSupportLevel = 0 + DeviceCapabilities_MINIMAL DeviceCapabilities_ChatLockSupportLevel = 1 + DeviceCapabilities_FULL DeviceCapabilities_ChatLockSupportLevel = 2 +) + +// Enum value maps for DeviceCapabilities_ChatLockSupportLevel. +var ( + DeviceCapabilities_ChatLockSupportLevel_name = map[int32]string{ + 0: "NONE", + 1: "MINIMAL", + 2: "FULL", + } + DeviceCapabilities_ChatLockSupportLevel_value = map[string]int32{ + "NONE": 0, + "MINIMAL": 1, + "FULL": 2, + } +) + +func (x DeviceCapabilities_ChatLockSupportLevel) Enum() *DeviceCapabilities_ChatLockSupportLevel { + p := new(DeviceCapabilities_ChatLockSupportLevel) + *p = x + return p +} + +func (x DeviceCapabilities_ChatLockSupportLevel) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (DeviceCapabilities_ChatLockSupportLevel) Descriptor() protoreflect.EnumDescriptor { + return file_waDeviceCapabilities_WAWebProtobufsDeviceCapabilities_proto_enumTypes[1].Descriptor() +} + +func (DeviceCapabilities_ChatLockSupportLevel) Type() protoreflect.EnumType { + return &file_waDeviceCapabilities_WAWebProtobufsDeviceCapabilities_proto_enumTypes[1] +} + +func (x DeviceCapabilities_ChatLockSupportLevel) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *DeviceCapabilities_ChatLockSupportLevel) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = DeviceCapabilities_ChatLockSupportLevel(num) + return nil +} + +// Deprecated: Use DeviceCapabilities_ChatLockSupportLevel.Descriptor instead. +func (DeviceCapabilities_ChatLockSupportLevel) EnumDescriptor() ([]byte, []int) { + return file_waDeviceCapabilities_WAWebProtobufsDeviceCapabilities_proto_rawDescGZIP(), []int{0, 1} +} + +type DeviceCapabilities_AiThread_SupportLevel int32 + +const ( + DeviceCapabilities_AiThread_NONE DeviceCapabilities_AiThread_SupportLevel = 0 + DeviceCapabilities_AiThread_INFRA DeviceCapabilities_AiThread_SupportLevel = 1 + DeviceCapabilities_AiThread_FULL DeviceCapabilities_AiThread_SupportLevel = 2 +) + +// Enum value maps for DeviceCapabilities_AiThread_SupportLevel. +var ( + DeviceCapabilities_AiThread_SupportLevel_name = map[int32]string{ + 0: "NONE", + 1: "INFRA", + 2: "FULL", + } + DeviceCapabilities_AiThread_SupportLevel_value = map[string]int32{ + "NONE": 0, + "INFRA": 1, + "FULL": 2, + } +) + +func (x DeviceCapabilities_AiThread_SupportLevel) Enum() *DeviceCapabilities_AiThread_SupportLevel { + p := new(DeviceCapabilities_AiThread_SupportLevel) + *p = x + return p +} + +func (x DeviceCapabilities_AiThread_SupportLevel) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (DeviceCapabilities_AiThread_SupportLevel) Descriptor() protoreflect.EnumDescriptor { + return file_waDeviceCapabilities_WAWebProtobufsDeviceCapabilities_proto_enumTypes[2].Descriptor() +} + +func (DeviceCapabilities_AiThread_SupportLevel) Type() protoreflect.EnumType { + return &file_waDeviceCapabilities_WAWebProtobufsDeviceCapabilities_proto_enumTypes[2] +} + +func (x DeviceCapabilities_AiThread_SupportLevel) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *DeviceCapabilities_AiThread_SupportLevel) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = DeviceCapabilities_AiThread_SupportLevel(num) + return nil +} + +// Deprecated: Use DeviceCapabilities_AiThread_SupportLevel.Descriptor instead. +func (DeviceCapabilities_AiThread_SupportLevel) EnumDescriptor() ([]byte, []int) { + return file_waDeviceCapabilities_WAWebProtobufsDeviceCapabilities_proto_rawDescGZIP(), []int{0, 0, 0} +} + +type DeviceCapabilities struct { + state protoimpl.MessageState `protogen:"open.v1"` + ChatLockSupportLevel *DeviceCapabilities_ChatLockSupportLevel `protobuf:"varint,1,opt,name=chatLockSupportLevel,enum=WAWebProtobufsDeviceCapabilities.DeviceCapabilities_ChatLockSupportLevel" json:"chatLockSupportLevel,omitempty"` + LidMigration *DeviceCapabilities_LIDMigration `protobuf:"bytes,2,opt,name=lidMigration" json:"lidMigration,omitempty"` + BusinessBroadcast *DeviceCapabilities_BusinessBroadcast `protobuf:"bytes,3,opt,name=businessBroadcast" json:"businessBroadcast,omitempty"` + UserHasAvatar *DeviceCapabilities_UserHasAvatar `protobuf:"bytes,4,opt,name=userHasAvatar" json:"userHasAvatar,omitempty"` + MemberNameTagPrimarySupport *DeviceCapabilities_MemberNameTagPrimarySupport `protobuf:"varint,5,opt,name=memberNameTagPrimarySupport,enum=WAWebProtobufsDeviceCapabilities.DeviceCapabilities_MemberNameTagPrimarySupport" json:"memberNameTagPrimarySupport,omitempty"` + AiThread *DeviceCapabilities_AiThread `protobuf:"bytes,6,opt,name=aiThread" json:"aiThread,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *DeviceCapabilities) Reset() { + *x = DeviceCapabilities{} + mi := &file_waDeviceCapabilities_WAWebProtobufsDeviceCapabilities_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *DeviceCapabilities) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DeviceCapabilities) ProtoMessage() {} + +func (x *DeviceCapabilities) ProtoReflect() protoreflect.Message { + mi := &file_waDeviceCapabilities_WAWebProtobufsDeviceCapabilities_proto_msgTypes[0] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DeviceCapabilities.ProtoReflect.Descriptor instead. +func (*DeviceCapabilities) Descriptor() ([]byte, []int) { + return file_waDeviceCapabilities_WAWebProtobufsDeviceCapabilities_proto_rawDescGZIP(), []int{0} +} + +func (x *DeviceCapabilities) GetChatLockSupportLevel() DeviceCapabilities_ChatLockSupportLevel { + if x != nil && x.ChatLockSupportLevel != nil { + return *x.ChatLockSupportLevel + } + return DeviceCapabilities_NONE +} + +func (x *DeviceCapabilities) GetLidMigration() *DeviceCapabilities_LIDMigration { + if x != nil { + return x.LidMigration + } + return nil +} + +func (x *DeviceCapabilities) GetBusinessBroadcast() *DeviceCapabilities_BusinessBroadcast { + if x != nil { + return x.BusinessBroadcast + } + return nil +} + +func (x *DeviceCapabilities) GetUserHasAvatar() *DeviceCapabilities_UserHasAvatar { + if x != nil { + return x.UserHasAvatar + } + return nil +} + +func (x *DeviceCapabilities) GetMemberNameTagPrimarySupport() DeviceCapabilities_MemberNameTagPrimarySupport { + if x != nil && x.MemberNameTagPrimarySupport != nil { + return *x.MemberNameTagPrimarySupport + } + return DeviceCapabilities_DISABLED +} + +func (x *DeviceCapabilities) GetAiThread() *DeviceCapabilities_AiThread { + if x != nil { + return x.AiThread + } + return nil +} + +type DeviceCapabilities_AiThread struct { + state protoimpl.MessageState `protogen:"open.v1"` + SupportLevel *DeviceCapabilities_AiThread_SupportLevel `protobuf:"varint,1,opt,name=supportLevel,enum=WAWebProtobufsDeviceCapabilities.DeviceCapabilities_AiThread_SupportLevel" json:"supportLevel,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *DeviceCapabilities_AiThread) Reset() { + *x = DeviceCapabilities_AiThread{} + mi := &file_waDeviceCapabilities_WAWebProtobufsDeviceCapabilities_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *DeviceCapabilities_AiThread) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DeviceCapabilities_AiThread) ProtoMessage() {} + +func (x *DeviceCapabilities_AiThread) ProtoReflect() protoreflect.Message { + mi := &file_waDeviceCapabilities_WAWebProtobufsDeviceCapabilities_proto_msgTypes[1] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DeviceCapabilities_AiThread.ProtoReflect.Descriptor instead. +func (*DeviceCapabilities_AiThread) Descriptor() ([]byte, []int) { + return file_waDeviceCapabilities_WAWebProtobufsDeviceCapabilities_proto_rawDescGZIP(), []int{0, 0} +} + +func (x *DeviceCapabilities_AiThread) GetSupportLevel() DeviceCapabilities_AiThread_SupportLevel { + if x != nil && x.SupportLevel != nil { + return *x.SupportLevel + } + return DeviceCapabilities_AiThread_NONE +} + +type DeviceCapabilities_UserHasAvatar struct { + state protoimpl.MessageState `protogen:"open.v1"` + UserHasAvatar *bool `protobuf:"varint,1,opt,name=userHasAvatar" json:"userHasAvatar,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *DeviceCapabilities_UserHasAvatar) Reset() { + *x = DeviceCapabilities_UserHasAvatar{} + mi := &file_waDeviceCapabilities_WAWebProtobufsDeviceCapabilities_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *DeviceCapabilities_UserHasAvatar) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DeviceCapabilities_UserHasAvatar) ProtoMessage() {} + +func (x *DeviceCapabilities_UserHasAvatar) ProtoReflect() protoreflect.Message { + mi := &file_waDeviceCapabilities_WAWebProtobufsDeviceCapabilities_proto_msgTypes[2] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DeviceCapabilities_UserHasAvatar.ProtoReflect.Descriptor instead. +func (*DeviceCapabilities_UserHasAvatar) Descriptor() ([]byte, []int) { + return file_waDeviceCapabilities_WAWebProtobufsDeviceCapabilities_proto_rawDescGZIP(), []int{0, 1} +} + +func (x *DeviceCapabilities_UserHasAvatar) GetUserHasAvatar() bool { + if x != nil && x.UserHasAvatar != nil { + return *x.UserHasAvatar + } + return false +} + +type DeviceCapabilities_BusinessBroadcast struct { + state protoimpl.MessageState `protogen:"open.v1"` + ImportListEnabled *bool `protobuf:"varint,1,opt,name=importListEnabled" json:"importListEnabled,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *DeviceCapabilities_BusinessBroadcast) Reset() { + *x = DeviceCapabilities_BusinessBroadcast{} + mi := &file_waDeviceCapabilities_WAWebProtobufsDeviceCapabilities_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *DeviceCapabilities_BusinessBroadcast) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DeviceCapabilities_BusinessBroadcast) ProtoMessage() {} + +func (x *DeviceCapabilities_BusinessBroadcast) ProtoReflect() protoreflect.Message { + mi := &file_waDeviceCapabilities_WAWebProtobufsDeviceCapabilities_proto_msgTypes[3] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DeviceCapabilities_BusinessBroadcast.ProtoReflect.Descriptor instead. +func (*DeviceCapabilities_BusinessBroadcast) Descriptor() ([]byte, []int) { + return file_waDeviceCapabilities_WAWebProtobufsDeviceCapabilities_proto_rawDescGZIP(), []int{0, 2} +} + +func (x *DeviceCapabilities_BusinessBroadcast) GetImportListEnabled() bool { + if x != nil && x.ImportListEnabled != nil { + return *x.ImportListEnabled + } + return false +} + +type DeviceCapabilities_LIDMigration struct { + state protoimpl.MessageState `protogen:"open.v1"` + ChatDbMigrationTimestamp *uint64 `protobuf:"varint,1,opt,name=chatDbMigrationTimestamp" json:"chatDbMigrationTimestamp,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *DeviceCapabilities_LIDMigration) Reset() { + *x = DeviceCapabilities_LIDMigration{} + mi := &file_waDeviceCapabilities_WAWebProtobufsDeviceCapabilities_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *DeviceCapabilities_LIDMigration) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DeviceCapabilities_LIDMigration) ProtoMessage() {} + +func (x *DeviceCapabilities_LIDMigration) ProtoReflect() protoreflect.Message { + mi := &file_waDeviceCapabilities_WAWebProtobufsDeviceCapabilities_proto_msgTypes[4] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DeviceCapabilities_LIDMigration.ProtoReflect.Descriptor instead. +func (*DeviceCapabilities_LIDMigration) Descriptor() ([]byte, []int) { + return file_waDeviceCapabilities_WAWebProtobufsDeviceCapabilities_proto_rawDescGZIP(), []int{0, 3} +} + +func (x *DeviceCapabilities_LIDMigration) GetChatDbMigrationTimestamp() uint64 { + if x != nil && x.ChatDbMigrationTimestamp != nil { + return *x.ChatDbMigrationTimestamp + } + return 0 +} + +var File_waDeviceCapabilities_WAWebProtobufsDeviceCapabilities_proto protoreflect.FileDescriptor + +const file_waDeviceCapabilities_WAWebProtobufsDeviceCapabilities_proto_rawDesc = "" + + "\n" + + ";waDeviceCapabilities/WAWebProtobufsDeviceCapabilities.proto\x12 WAWebProtobufsDeviceCapabilities\"\xcc\t\n" + + "\x12DeviceCapabilities\x12}\n" + + "\x14chatLockSupportLevel\x18\x01 \x01(\x0e2I.WAWebProtobufsDeviceCapabilities.DeviceCapabilities.ChatLockSupportLevelR\x14chatLockSupportLevel\x12e\n" + + "\flidMigration\x18\x02 \x01(\v2A.WAWebProtobufsDeviceCapabilities.DeviceCapabilities.LIDMigrationR\flidMigration\x12t\n" + + "\x11businessBroadcast\x18\x03 \x01(\v2F.WAWebProtobufsDeviceCapabilities.DeviceCapabilities.BusinessBroadcastR\x11businessBroadcast\x12h\n" + + "\ruserHasAvatar\x18\x04 \x01(\v2B.WAWebProtobufsDeviceCapabilities.DeviceCapabilities.UserHasAvatarR\ruserHasAvatar\x12\x92\x01\n" + + "\x1bmemberNameTagPrimarySupport\x18\x05 \x01(\x0e2P.WAWebProtobufsDeviceCapabilities.DeviceCapabilities.MemberNameTagPrimarySupportR\x1bmemberNameTagPrimarySupport\x12Y\n" + + "\baiThread\x18\x06 \x01(\v2=.WAWebProtobufsDeviceCapabilities.DeviceCapabilities.AiThreadR\baiThread\x1a\xa9\x01\n" + + "\bAiThread\x12n\n" + + "\fsupportLevel\x18\x01 \x01(\x0e2J.WAWebProtobufsDeviceCapabilities.DeviceCapabilities.AiThread.SupportLevelR\fsupportLevel\"-\n" + + "\fSupportLevel\x12\b\n" + + "\x04NONE\x10\x00\x12\t\n" + + "\x05INFRA\x10\x01\x12\b\n" + + "\x04FULL\x10\x02\x1a5\n" + + "\rUserHasAvatar\x12$\n" + + "\ruserHasAvatar\x18\x01 \x01(\bR\ruserHasAvatar\x1aA\n" + + "\x11BusinessBroadcast\x12,\n" + + "\x11importListEnabled\x18\x01 \x01(\bR\x11importListEnabled\x1aJ\n" + + "\fLIDMigration\x12:\n" + + "\x18chatDbMigrationTimestamp\x18\x01 \x01(\x04R\x18chatDbMigrationTimestamp\"U\n" + + "\x1bMemberNameTagPrimarySupport\x12\f\n" + + "\bDISABLED\x10\x00\x12\x14\n" + + "\x10RECEIVER_ENABLED\x10\x01\x12\x12\n" + + "\x0eSENDER_ENABLED\x10\x02\"7\n" + + "\x14ChatLockSupportLevel\x12\b\n" + + "\x04NONE\x10\x00\x12\v\n" + + "\aMINIMAL\x10\x01\x12\b\n" + + "\x04FULL\x10\x02B0Z.go.mau.fi/whatsmeow/proto/waDeviceCapabilities" + +var ( + file_waDeviceCapabilities_WAWebProtobufsDeviceCapabilities_proto_rawDescOnce sync.Once + file_waDeviceCapabilities_WAWebProtobufsDeviceCapabilities_proto_rawDescData []byte +) + +func file_waDeviceCapabilities_WAWebProtobufsDeviceCapabilities_proto_rawDescGZIP() []byte { + file_waDeviceCapabilities_WAWebProtobufsDeviceCapabilities_proto_rawDescOnce.Do(func() { + file_waDeviceCapabilities_WAWebProtobufsDeviceCapabilities_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_waDeviceCapabilities_WAWebProtobufsDeviceCapabilities_proto_rawDesc), len(file_waDeviceCapabilities_WAWebProtobufsDeviceCapabilities_proto_rawDesc))) + }) + return file_waDeviceCapabilities_WAWebProtobufsDeviceCapabilities_proto_rawDescData +} + +var file_waDeviceCapabilities_WAWebProtobufsDeviceCapabilities_proto_enumTypes = make([]protoimpl.EnumInfo, 3) +var file_waDeviceCapabilities_WAWebProtobufsDeviceCapabilities_proto_msgTypes = make([]protoimpl.MessageInfo, 5) +var file_waDeviceCapabilities_WAWebProtobufsDeviceCapabilities_proto_goTypes = []any{ + (DeviceCapabilities_MemberNameTagPrimarySupport)(0), // 0: WAWebProtobufsDeviceCapabilities.DeviceCapabilities.MemberNameTagPrimarySupport + (DeviceCapabilities_ChatLockSupportLevel)(0), // 1: WAWebProtobufsDeviceCapabilities.DeviceCapabilities.ChatLockSupportLevel + (DeviceCapabilities_AiThread_SupportLevel)(0), // 2: WAWebProtobufsDeviceCapabilities.DeviceCapabilities.AiThread.SupportLevel + (*DeviceCapabilities)(nil), // 3: WAWebProtobufsDeviceCapabilities.DeviceCapabilities + (*DeviceCapabilities_AiThread)(nil), // 4: WAWebProtobufsDeviceCapabilities.DeviceCapabilities.AiThread + (*DeviceCapabilities_UserHasAvatar)(nil), // 5: WAWebProtobufsDeviceCapabilities.DeviceCapabilities.UserHasAvatar + (*DeviceCapabilities_BusinessBroadcast)(nil), // 6: WAWebProtobufsDeviceCapabilities.DeviceCapabilities.BusinessBroadcast + (*DeviceCapabilities_LIDMigration)(nil), // 7: WAWebProtobufsDeviceCapabilities.DeviceCapabilities.LIDMigration +} +var file_waDeviceCapabilities_WAWebProtobufsDeviceCapabilities_proto_depIdxs = []int32{ + 1, // 0: WAWebProtobufsDeviceCapabilities.DeviceCapabilities.chatLockSupportLevel:type_name -> WAWebProtobufsDeviceCapabilities.DeviceCapabilities.ChatLockSupportLevel + 7, // 1: WAWebProtobufsDeviceCapabilities.DeviceCapabilities.lidMigration:type_name -> WAWebProtobufsDeviceCapabilities.DeviceCapabilities.LIDMigration + 6, // 2: WAWebProtobufsDeviceCapabilities.DeviceCapabilities.businessBroadcast:type_name -> WAWebProtobufsDeviceCapabilities.DeviceCapabilities.BusinessBroadcast + 5, // 3: WAWebProtobufsDeviceCapabilities.DeviceCapabilities.userHasAvatar:type_name -> WAWebProtobufsDeviceCapabilities.DeviceCapabilities.UserHasAvatar + 0, // 4: WAWebProtobufsDeviceCapabilities.DeviceCapabilities.memberNameTagPrimarySupport:type_name -> WAWebProtobufsDeviceCapabilities.DeviceCapabilities.MemberNameTagPrimarySupport + 4, // 5: WAWebProtobufsDeviceCapabilities.DeviceCapabilities.aiThread:type_name -> WAWebProtobufsDeviceCapabilities.DeviceCapabilities.AiThread + 2, // 6: WAWebProtobufsDeviceCapabilities.DeviceCapabilities.AiThread.supportLevel:type_name -> WAWebProtobufsDeviceCapabilities.DeviceCapabilities.AiThread.SupportLevel + 7, // [7:7] is the sub-list for method output_type + 7, // [7:7] is the sub-list for method input_type + 7, // [7:7] is the sub-list for extension type_name + 7, // [7:7] is the sub-list for extension extendee + 0, // [0:7] is the sub-list for field type_name +} + +func init() { file_waDeviceCapabilities_WAWebProtobufsDeviceCapabilities_proto_init() } +func file_waDeviceCapabilities_WAWebProtobufsDeviceCapabilities_proto_init() { + if File_waDeviceCapabilities_WAWebProtobufsDeviceCapabilities_proto != nil { + return + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: unsafe.Slice(unsafe.StringData(file_waDeviceCapabilities_WAWebProtobufsDeviceCapabilities_proto_rawDesc), len(file_waDeviceCapabilities_WAWebProtobufsDeviceCapabilities_proto_rawDesc)), + NumEnums: 3, + NumMessages: 5, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_waDeviceCapabilities_WAWebProtobufsDeviceCapabilities_proto_goTypes, + DependencyIndexes: file_waDeviceCapabilities_WAWebProtobufsDeviceCapabilities_proto_depIdxs, + EnumInfos: file_waDeviceCapabilities_WAWebProtobufsDeviceCapabilities_proto_enumTypes, + MessageInfos: file_waDeviceCapabilities_WAWebProtobufsDeviceCapabilities_proto_msgTypes, + }.Build() + File_waDeviceCapabilities_WAWebProtobufsDeviceCapabilities_proto = out.File + file_waDeviceCapabilities_WAWebProtobufsDeviceCapabilities_proto_goTypes = nil + file_waDeviceCapabilities_WAWebProtobufsDeviceCapabilities_proto_depIdxs = nil +} diff --git a/vendor/go.mau.fi/whatsmeow/proto/waDeviceCapabilities/WAWebProtobufsDeviceCapabilities.proto b/vendor/go.mau.fi/whatsmeow/proto/waDeviceCapabilities/WAWebProtobufsDeviceCapabilities.proto new file mode 100644 index 0000000000..31d4e5448d --- /dev/null +++ b/vendor/go.mau.fi/whatsmeow/proto/waDeviceCapabilities/WAWebProtobufsDeviceCapabilities.proto @@ -0,0 +1,46 @@ +syntax = "proto2"; +package WAWebProtobufsDeviceCapabilities; +option go_package = "go.mau.fi/whatsmeow/proto/waDeviceCapabilities"; + +message DeviceCapabilities { + enum MemberNameTagPrimarySupport { + DISABLED = 0; + RECEIVER_ENABLED = 1; + SENDER_ENABLED = 2; + } + + enum ChatLockSupportLevel { + NONE = 0; + MINIMAL = 1; + FULL = 2; + } + + message AiThread { + enum SupportLevel { + NONE = 0; + INFRA = 1; + FULL = 2; + } + + optional SupportLevel supportLevel = 1; + } + + message UserHasAvatar { + optional bool userHasAvatar = 1; + } + + message BusinessBroadcast { + optional bool importListEnabled = 1; + } + + message LIDMigration { + optional uint64 chatDbMigrationTimestamp = 1; + } + + optional ChatLockSupportLevel chatLockSupportLevel = 1; + optional LIDMigration lidMigration = 2; + optional BusinessBroadcast businessBroadcast = 3; + optional UserHasAvatar userHasAvatar = 4; + optional MemberNameTagPrimarySupport memberNameTagPrimarySupport = 5; + optional AiThread aiThread = 6; +} diff --git a/vendor/go.mau.fi/whatsmeow/proto/waE2E/WAWebProtobufsE2E.pb.go b/vendor/go.mau.fi/whatsmeow/proto/waE2E/WAWebProtobufsE2E.pb.go index b130ff05f9..51e60b88f1 100644 --- a/vendor/go.mau.fi/whatsmeow/proto/waE2E/WAWebProtobufsE2E.pb.go +++ b/vendor/go.mau.fi/whatsmeow/proto/waE2E/WAWebProtobufsE2E.pb.go @@ -1,7 +1,7 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 -// protoc v3.21.12 +// protoc-gen-go v1.36.11 +// protoc v6.33.5 // source: waE2E/WAWebProtobufsE2E.proto package waE2E @@ -9,15 +9,17 @@ package waE2E import ( reflect "reflect" sync "sync" + unsafe "unsafe" + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + + waAICommon "go.mau.fi/whatsmeow/proto/waAICommon" waAdv "go.mau.fi/whatsmeow/proto/waAdv" waCommon "go.mau.fi/whatsmeow/proto/waCommon" waCompanionReg "go.mau.fi/whatsmeow/proto/waCompanionReg" waMmsRetry "go.mau.fi/whatsmeow/proto/waMmsRetry" - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - - _ "embed" + waStatusAttributions "go.mau.fi/whatsmeow/proto/waStatusAttributions" ) const ( @@ -27,37 +29,167 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) +type PollType int32 + +const ( + PollType_POLL PollType = 0 + PollType_QUIZ PollType = 1 +) + +// Enum value maps for PollType. +var ( + PollType_name = map[int32]string{ + 0: "POLL", + 1: "QUIZ", + } + PollType_value = map[string]int32{ + "POLL": 0, + "QUIZ": 1, + } +) + +func (x PollType) Enum() *PollType { + p := new(PollType) + *p = x + return p +} + +func (x PollType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (PollType) Descriptor() protoreflect.EnumDescriptor { + return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[0].Descriptor() +} + +func (PollType) Type() protoreflect.EnumType { + return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[0] +} + +func (x PollType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *PollType) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = PollType(num) + return nil +} + +// Deprecated: Use PollType.Descriptor instead. +func (PollType) EnumDescriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{0} +} + +type PollContentType int32 + +const ( + PollContentType_UNKNOWN_POLL_CONTENT_TYPE PollContentType = 0 + PollContentType_TEXT PollContentType = 1 + PollContentType_IMAGE PollContentType = 2 +) + +// Enum value maps for PollContentType. +var ( + PollContentType_name = map[int32]string{ + 0: "UNKNOWN_POLL_CONTENT_TYPE", + 1: "TEXT", + 2: "IMAGE", + } + PollContentType_value = map[string]int32{ + "UNKNOWN_POLL_CONTENT_TYPE": 0, + "TEXT": 1, + "IMAGE": 2, + } +) + +func (x PollContentType) Enum() *PollContentType { + p := new(PollContentType) + *p = x + return p +} + +func (x PollContentType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (PollContentType) Descriptor() protoreflect.EnumDescriptor { + return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[1].Descriptor() +} + +func (PollContentType) Type() protoreflect.EnumType { + return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[1] +} + +func (x PollContentType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *PollContentType) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = PollContentType(num) + return nil +} + +// Deprecated: Use PollContentType.Descriptor instead. +func (PollContentType) EnumDescriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{1} +} + type PeerDataOperationRequestType int32 const ( - PeerDataOperationRequestType_UPLOAD_STICKER PeerDataOperationRequestType = 0 - PeerDataOperationRequestType_SEND_RECENT_STICKER_BOOTSTRAP PeerDataOperationRequestType = 1 - PeerDataOperationRequestType_GENERATE_LINK_PREVIEW PeerDataOperationRequestType = 2 - PeerDataOperationRequestType_HISTORY_SYNC_ON_DEMAND PeerDataOperationRequestType = 3 - PeerDataOperationRequestType_PLACEHOLDER_MESSAGE_RESEND PeerDataOperationRequestType = 4 - PeerDataOperationRequestType_WAFFLE_LINKING_NONCE_FETCH PeerDataOperationRequestType = 5 - PeerDataOperationRequestType_FULL_HISTORY_SYNC_ON_DEMAND PeerDataOperationRequestType = 6 + PeerDataOperationRequestType_UPLOAD_STICKER PeerDataOperationRequestType = 0 + PeerDataOperationRequestType_SEND_RECENT_STICKER_BOOTSTRAP PeerDataOperationRequestType = 1 + PeerDataOperationRequestType_GENERATE_LINK_PREVIEW PeerDataOperationRequestType = 2 + PeerDataOperationRequestType_HISTORY_SYNC_ON_DEMAND PeerDataOperationRequestType = 3 + PeerDataOperationRequestType_PLACEHOLDER_MESSAGE_RESEND PeerDataOperationRequestType = 4 + PeerDataOperationRequestType_WAFFLE_LINKING_NONCE_FETCH PeerDataOperationRequestType = 5 + PeerDataOperationRequestType_FULL_HISTORY_SYNC_ON_DEMAND PeerDataOperationRequestType = 6 + PeerDataOperationRequestType_COMPANION_META_NONCE_FETCH PeerDataOperationRequestType = 7 + PeerDataOperationRequestType_COMPANION_SYNCD_SNAPSHOT_FATAL_RECOVERY PeerDataOperationRequestType = 8 + PeerDataOperationRequestType_COMPANION_CANONICAL_USER_NONCE_FETCH PeerDataOperationRequestType = 9 + PeerDataOperationRequestType_HISTORY_SYNC_CHUNK_RETRY PeerDataOperationRequestType = 10 + PeerDataOperationRequestType_GALAXY_FLOW_ACTION PeerDataOperationRequestType = 11 ) // Enum value maps for PeerDataOperationRequestType. var ( PeerDataOperationRequestType_name = map[int32]string{ - 0: "UPLOAD_STICKER", - 1: "SEND_RECENT_STICKER_BOOTSTRAP", - 2: "GENERATE_LINK_PREVIEW", - 3: "HISTORY_SYNC_ON_DEMAND", - 4: "PLACEHOLDER_MESSAGE_RESEND", - 5: "WAFFLE_LINKING_NONCE_FETCH", - 6: "FULL_HISTORY_SYNC_ON_DEMAND", + 0: "UPLOAD_STICKER", + 1: "SEND_RECENT_STICKER_BOOTSTRAP", + 2: "GENERATE_LINK_PREVIEW", + 3: "HISTORY_SYNC_ON_DEMAND", + 4: "PLACEHOLDER_MESSAGE_RESEND", + 5: "WAFFLE_LINKING_NONCE_FETCH", + 6: "FULL_HISTORY_SYNC_ON_DEMAND", + 7: "COMPANION_META_NONCE_FETCH", + 8: "COMPANION_SYNCD_SNAPSHOT_FATAL_RECOVERY", + 9: "COMPANION_CANONICAL_USER_NONCE_FETCH", + 10: "HISTORY_SYNC_CHUNK_RETRY", + 11: "GALAXY_FLOW_ACTION", } PeerDataOperationRequestType_value = map[string]int32{ - "UPLOAD_STICKER": 0, - "SEND_RECENT_STICKER_BOOTSTRAP": 1, - "GENERATE_LINK_PREVIEW": 2, - "HISTORY_SYNC_ON_DEMAND": 3, - "PLACEHOLDER_MESSAGE_RESEND": 4, - "WAFFLE_LINKING_NONCE_FETCH": 5, - "FULL_HISTORY_SYNC_ON_DEMAND": 6, + "UPLOAD_STICKER": 0, + "SEND_RECENT_STICKER_BOOTSTRAP": 1, + "GENERATE_LINK_PREVIEW": 2, + "HISTORY_SYNC_ON_DEMAND": 3, + "PLACEHOLDER_MESSAGE_RESEND": 4, + "WAFFLE_LINKING_NONCE_FETCH": 5, + "FULL_HISTORY_SYNC_ON_DEMAND": 6, + "COMPANION_META_NONCE_FETCH": 7, + "COMPANION_SYNCD_SNAPSHOT_FATAL_RECOVERY": 8, + "COMPANION_CANONICAL_USER_NONCE_FETCH": 9, + "HISTORY_SYNC_CHUNK_RETRY": 10, + "GALAXY_FLOW_ACTION": 11, } ) @@ -72,11 +204,11 @@ func (x PeerDataOperationRequestType) String() string { } func (PeerDataOperationRequestType) Descriptor() protoreflect.EnumDescriptor { - return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[0].Descriptor() + return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[2].Descriptor() } func (PeerDataOperationRequestType) Type() protoreflect.EnumType { - return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[0] + return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[2] } func (x PeerDataOperationRequestType) Number() protoreflect.EnumNumber { @@ -95,81 +227,205 @@ func (x *PeerDataOperationRequestType) UnmarshalJSON(b []byte) error { // Deprecated: Use PeerDataOperationRequestType.Descriptor instead. func (PeerDataOperationRequestType) EnumDescriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{0} + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{2} } -type SessionSource int32 +type HistorySyncType int32 const ( - SessionSource_NULL_STATE SessionSource = 1 - SessionSource_TYPEAHEAD SessionSource = 2 - SessionSource_USER_INPUT SessionSource = 3 - SessionSource_EMU_FLASH SessionSource = 4 - SessionSource_EMU_FLASH_FOLLOWUP SessionSource = 5 - SessionSource_VOICE SessionSource = 6 + HistorySyncType_INITIAL_BOOTSTRAP HistorySyncType = 0 + HistorySyncType_INITIAL_STATUS_V3 HistorySyncType = 1 + HistorySyncType_FULL HistorySyncType = 2 + HistorySyncType_RECENT HistorySyncType = 3 + HistorySyncType_PUSH_NAME HistorySyncType = 4 + HistorySyncType_NON_BLOCKING_DATA HistorySyncType = 5 + HistorySyncType_ON_DEMAND HistorySyncType = 6 + HistorySyncType_NO_HISTORY HistorySyncType = 7 + HistorySyncType_MESSAGE_ACCESS_STATUS HistorySyncType = 8 ) -// Enum value maps for SessionSource. +// Enum value maps for HistorySyncType. var ( - SessionSource_name = map[int32]string{ - 1: "NULL_STATE", - 2: "TYPEAHEAD", - 3: "USER_INPUT", - 4: "EMU_FLASH", - 5: "EMU_FLASH_FOLLOWUP", - 6: "VOICE", - } - SessionSource_value = map[string]int32{ - "NULL_STATE": 1, - "TYPEAHEAD": 2, - "USER_INPUT": 3, - "EMU_FLASH": 4, - "EMU_FLASH_FOLLOWUP": 5, - "VOICE": 6, + HistorySyncType_name = map[int32]string{ + 0: "INITIAL_BOOTSTRAP", + 1: "INITIAL_STATUS_V3", + 2: "FULL", + 3: "RECENT", + 4: "PUSH_NAME", + 5: "NON_BLOCKING_DATA", + 6: "ON_DEMAND", + 7: "NO_HISTORY", + 8: "MESSAGE_ACCESS_STATUS", + } + HistorySyncType_value = map[string]int32{ + "INITIAL_BOOTSTRAP": 0, + "INITIAL_STATUS_V3": 1, + "FULL": 2, + "RECENT": 3, + "PUSH_NAME": 4, + "NON_BLOCKING_DATA": 5, + "ON_DEMAND": 6, + "NO_HISTORY": 7, + "MESSAGE_ACCESS_STATUS": 8, } ) -func (x SessionSource) Enum() *SessionSource { - p := new(SessionSource) +func (x HistorySyncType) Enum() *HistorySyncType { + p := new(HistorySyncType) *p = x return p } -func (x SessionSource) String() string { +func (x HistorySyncType) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } -func (SessionSource) Descriptor() protoreflect.EnumDescriptor { - return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[1].Descriptor() +func (HistorySyncType) Descriptor() protoreflect.EnumDescriptor { + return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[3].Descriptor() } -func (SessionSource) Type() protoreflect.EnumType { - return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[1] +func (HistorySyncType) Type() protoreflect.EnumType { + return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[3] } -func (x SessionSource) Number() protoreflect.EnumNumber { +func (x HistorySyncType) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Do not use. -func (x *SessionSource) UnmarshalJSON(b []byte) error { +func (x *HistorySyncType) UnmarshalJSON(b []byte) error { num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) if err != nil { return err } - *x = SessionSource(num) + *x = HistorySyncType(num) return nil } -// Deprecated: Use SessionSource.Descriptor instead. -func (SessionSource) EnumDescriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{1} +// Deprecated: Use HistorySyncType.Descriptor instead. +func (HistorySyncType) EnumDescriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{3} +} + +type MediaKeyDomain int32 + +const ( + MediaKeyDomain_MEDIA_KEY_DOMAIN_UNKNOWN MediaKeyDomain = 0 + MediaKeyDomain_MEDIA_KEY_DOMAIN_E2EE MediaKeyDomain = 1 + MediaKeyDomain_MEDIA_KEY_DOMAIN_NON_E2EE MediaKeyDomain = 2 +) + +// Enum value maps for MediaKeyDomain. +var ( + MediaKeyDomain_name = map[int32]string{ + 0: "MEDIA_KEY_DOMAIN_UNKNOWN", + 1: "MEDIA_KEY_DOMAIN_E2EE", + 2: "MEDIA_KEY_DOMAIN_NON_E2EE", + } + MediaKeyDomain_value = map[string]int32{ + "MEDIA_KEY_DOMAIN_UNKNOWN": 0, + "MEDIA_KEY_DOMAIN_E2EE": 1, + "MEDIA_KEY_DOMAIN_NON_E2EE": 2, + } +) + +func (x MediaKeyDomain) Enum() *MediaKeyDomain { + p := new(MediaKeyDomain) + *p = x + return p +} + +func (x MediaKeyDomain) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (MediaKeyDomain) Descriptor() protoreflect.EnumDescriptor { + return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[4].Descriptor() +} + +func (MediaKeyDomain) Type() protoreflect.EnumType { + return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[4] +} + +func (x MediaKeyDomain) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *MediaKeyDomain) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = MediaKeyDomain(num) + return nil +} + +// Deprecated: Use MediaKeyDomain.Descriptor instead. +func (MediaKeyDomain) EnumDescriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{4} +} + +type WebLinkRenderConfig int32 + +const ( + WebLinkRenderConfig_WEBVIEW WebLinkRenderConfig = 0 + WebLinkRenderConfig_SYSTEM WebLinkRenderConfig = 1 +) + +// Enum value maps for WebLinkRenderConfig. +var ( + WebLinkRenderConfig_name = map[int32]string{ + 0: "WEBVIEW", + 1: "SYSTEM", + } + WebLinkRenderConfig_value = map[string]int32{ + "WEBVIEW": 0, + "SYSTEM": 1, + } +) + +func (x WebLinkRenderConfig) Enum() *WebLinkRenderConfig { + p := new(WebLinkRenderConfig) + *p = x + return p +} + +func (x WebLinkRenderConfig) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (WebLinkRenderConfig) Descriptor() protoreflect.EnumDescriptor { + return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[5].Descriptor() +} + +func (WebLinkRenderConfig) Type() protoreflect.EnumType { + return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[5] +} + +func (x WebLinkRenderConfig) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *WebLinkRenderConfig) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = WebLinkRenderConfig(num) + return nil +} + +// Deprecated: Use WebLinkRenderConfig.Descriptor instead. +func (WebLinkRenderConfig) EnumDescriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{5} } type KeepType int32 const ( - KeepType_UNKNOWN KeepType = 0 + KeepType_UNKNOWN_KEEP_TYPE KeepType = 0 KeepType_KEEP_FOR_ALL KeepType = 1 KeepType_UNDO_KEEP_FOR_ALL KeepType = 2 ) @@ -177,12 +433,12 @@ const ( // Enum value maps for KeepType. var ( KeepType_name = map[int32]string{ - 0: "UNKNOWN", + 0: "UNKNOWN_KEEP_TYPE", 1: "KEEP_FOR_ALL", 2: "UNDO_KEEP_FOR_ALL", } KeepType_value = map[string]int32{ - "UNKNOWN": 0, + "UNKNOWN_KEEP_TYPE": 0, "KEEP_FOR_ALL": 1, "UNDO_KEEP_FOR_ALL": 2, } @@ -199,11 +455,11 @@ func (x KeepType) String() string { } func (KeepType) Descriptor() protoreflect.EnumDescriptor { - return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[2].Descriptor() + return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[6].Descriptor() } func (KeepType) Type() protoreflect.EnumType { - return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[2] + return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[6] } func (x KeepType) Number() protoreflect.EnumNumber { @@ -222,7 +478,66 @@ func (x *KeepType) UnmarshalJSON(b []byte) error { // Deprecated: Use KeepType.Descriptor instead. func (KeepType) EnumDescriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{2} + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{6} +} + +type StickerPackMessage_StickerPackOrigin int32 + +const ( + StickerPackMessage_FIRST_PARTY StickerPackMessage_StickerPackOrigin = 0 + StickerPackMessage_THIRD_PARTY StickerPackMessage_StickerPackOrigin = 1 + StickerPackMessage_USER_CREATED StickerPackMessage_StickerPackOrigin = 2 +) + +// Enum value maps for StickerPackMessage_StickerPackOrigin. +var ( + StickerPackMessage_StickerPackOrigin_name = map[int32]string{ + 0: "FIRST_PARTY", + 1: "THIRD_PARTY", + 2: "USER_CREATED", + } + StickerPackMessage_StickerPackOrigin_value = map[string]int32{ + "FIRST_PARTY": 0, + "THIRD_PARTY": 1, + "USER_CREATED": 2, + } +) + +func (x StickerPackMessage_StickerPackOrigin) Enum() *StickerPackMessage_StickerPackOrigin { + p := new(StickerPackMessage_StickerPackOrigin) + *p = x + return p +} + +func (x StickerPackMessage_StickerPackOrigin) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (StickerPackMessage_StickerPackOrigin) Descriptor() protoreflect.EnumDescriptor { + return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[7].Descriptor() +} + +func (StickerPackMessage_StickerPackOrigin) Type() protoreflect.EnumType { + return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[7] +} + +func (x StickerPackMessage_StickerPackOrigin) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *StickerPackMessage_StickerPackOrigin) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = StickerPackMessage_StickerPackOrigin(num) + return nil +} + +// Deprecated: Use StickerPackMessage_StickerPackOrigin.Descriptor instead. +func (StickerPackMessage_StickerPackOrigin) EnumDescriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{0, 0} } type PlaceholderMessage_PlaceholderType int32 @@ -252,11 +567,11 @@ func (x PlaceholderMessage_PlaceholderType) String() string { } func (PlaceholderMessage_PlaceholderType) Descriptor() protoreflect.EnumDescriptor { - return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[3].Descriptor() + return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[8].Descriptor() } func (PlaceholderMessage_PlaceholderType) Type() protoreflect.EnumType { - return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[3] + return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[8] } func (x PlaceholderMessage_PlaceholderType) Number() protoreflect.EnumNumber { @@ -275,7 +590,7 @@ func (x *PlaceholderMessage_PlaceholderType) UnmarshalJSON(b []byte) error { // Deprecated: Use PlaceholderMessage_PlaceholderType.Descriptor instead. func (PlaceholderMessage_PlaceholderType) EnumDescriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{0, 0} + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{1, 0} } type BCallMessage_MediaType int32 @@ -311,11 +626,11 @@ func (x BCallMessage_MediaType) String() string { } func (BCallMessage_MediaType) Descriptor() protoreflect.EnumDescriptor { - return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[4].Descriptor() + return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[9].Descriptor() } func (BCallMessage_MediaType) Type() protoreflect.EnumType { - return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[4] + return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[9] } func (x BCallMessage_MediaType) Number() protoreflect.EnumNumber { @@ -334,7 +649,7 @@ func (x *BCallMessage_MediaType) UnmarshalJSON(b []byte) error { // Deprecated: Use BCallMessage_MediaType.Descriptor instead. func (BCallMessage_MediaType) EnumDescriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{1, 0} + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{2, 0} } type CallLogMessage_CallOutcome int32 @@ -385,11 +700,11 @@ func (x CallLogMessage_CallOutcome) String() string { } func (CallLogMessage_CallOutcome) Descriptor() protoreflect.EnumDescriptor { - return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[5].Descriptor() + return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[10].Descriptor() } func (CallLogMessage_CallOutcome) Type() protoreflect.EnumType { - return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[5] + return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[10] } func (x CallLogMessage_CallOutcome) Number() protoreflect.EnumNumber { @@ -408,7 +723,7 @@ func (x *CallLogMessage_CallOutcome) UnmarshalJSON(b []byte) error { // Deprecated: Use CallLogMessage_CallOutcome.Descriptor instead. func (CallLogMessage_CallOutcome) EnumDescriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{2, 0} + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{3, 0} } type CallLogMessage_CallType int32 @@ -444,11 +759,11 @@ func (x CallLogMessage_CallType) String() string { } func (CallLogMessage_CallType) Descriptor() protoreflect.EnumDescriptor { - return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[6].Descriptor() + return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[11].Descriptor() } func (CallLogMessage_CallType) Type() protoreflect.EnumType { - return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[6] + return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[11] } func (x CallLogMessage_CallType) Number() protoreflect.EnumNumber { @@ -467,7 +782,7 @@ func (x *CallLogMessage_CallType) UnmarshalJSON(b []byte) error { // Deprecated: Use CallLogMessage_CallType.Descriptor instead. func (CallLogMessage_CallType) EnumDescriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{2, 1} + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{3, 1} } type ScheduledCallEditMessage_EditType int32 @@ -500,11 +815,11 @@ func (x ScheduledCallEditMessage_EditType) String() string { } func (ScheduledCallEditMessage_EditType) Descriptor() protoreflect.EnumDescriptor { - return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[7].Descriptor() + return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[12].Descriptor() } func (ScheduledCallEditMessage_EditType) Type() protoreflect.EnumType { - return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[7] + return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[12] } func (x ScheduledCallEditMessage_EditType) Number() protoreflect.EnumNumber { @@ -523,7 +838,7 @@ func (x *ScheduledCallEditMessage_EditType) UnmarshalJSON(b []byte) error { // Deprecated: Use ScheduledCallEditMessage_EditType.Descriptor instead. func (ScheduledCallEditMessage_EditType) EnumDescriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{3, 0} + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{4, 0} } type ScheduledCallCreationMessage_CallType int32 @@ -559,11 +874,11 @@ func (x ScheduledCallCreationMessage_CallType) String() string { } func (ScheduledCallCreationMessage_CallType) Descriptor() protoreflect.EnumDescriptor { - return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[8].Descriptor() + return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[13].Descriptor() } func (ScheduledCallCreationMessage_CallType) Type() protoreflect.EnumType { - return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[8] + return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[13] } func (x ScheduledCallCreationMessage_CallType) Number() protoreflect.EnumNumber { @@ -582,7 +897,7 @@ func (x *ScheduledCallCreationMessage_CallType) UnmarshalJSON(b []byte) error { // Deprecated: Use ScheduledCallCreationMessage_CallType.Descriptor instead. func (ScheduledCallCreationMessage_CallType) EnumDescriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{4, 0} + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{5, 0} } type EventResponseMessage_EventResponseType int32 @@ -621,11 +936,11 @@ func (x EventResponseMessage_EventResponseType) String() string { } func (EventResponseMessage_EventResponseType) Descriptor() protoreflect.EnumDescriptor { - return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[9].Descriptor() + return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[14].Descriptor() } func (EventResponseMessage_EventResponseType) Type() protoreflect.EnumType { - return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[9] + return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[14] } func (x EventResponseMessage_EventResponseType) Number() protoreflect.EnumNumber { @@ -644,7 +959,7 @@ func (x *EventResponseMessage_EventResponseType) UnmarshalJSON(b []byte) error { // Deprecated: Use EventResponseMessage_EventResponseType.Descriptor instead. func (EventResponseMessage_EventResponseType) EnumDescriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{5, 0} + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{6, 0} } type PinInChatMessage_Type int32 @@ -680,11 +995,11 @@ func (x PinInChatMessage_Type) String() string { } func (PinInChatMessage_Type) Descriptor() protoreflect.EnumDescriptor { - return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[10].Descriptor() + return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[15].Descriptor() } func (PinInChatMessage_Type) Type() protoreflect.EnumType { - return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[10] + return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[15] } func (x PinInChatMessage_Type) Number() protoreflect.EnumNumber { @@ -703,7 +1018,63 @@ func (x *PinInChatMessage_Type) UnmarshalJSON(b []byte) error { // Deprecated: Use PinInChatMessage_Type.Descriptor instead. func (PinInChatMessage_Type) EnumDescriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{6, 0} + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{7, 0} +} + +type StatusStickerInteractionMessage_StatusStickerType int32 + +const ( + StatusStickerInteractionMessage_UNKNOWN StatusStickerInteractionMessage_StatusStickerType = 0 + StatusStickerInteractionMessage_REACTION StatusStickerInteractionMessage_StatusStickerType = 1 +) + +// Enum value maps for StatusStickerInteractionMessage_StatusStickerType. +var ( + StatusStickerInteractionMessage_StatusStickerType_name = map[int32]string{ + 0: "UNKNOWN", + 1: "REACTION", + } + StatusStickerInteractionMessage_StatusStickerType_value = map[string]int32{ + "UNKNOWN": 0, + "REACTION": 1, + } +) + +func (x StatusStickerInteractionMessage_StatusStickerType) Enum() *StatusStickerInteractionMessage_StatusStickerType { + p := new(StatusStickerInteractionMessage_StatusStickerType) + *p = x + return p +} + +func (x StatusStickerInteractionMessage_StatusStickerType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (StatusStickerInteractionMessage_StatusStickerType) Descriptor() protoreflect.EnumDescriptor { + return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[16].Descriptor() +} + +func (StatusStickerInteractionMessage_StatusStickerType) Type() protoreflect.EnumType { + return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[16] +} + +func (x StatusStickerInteractionMessage_StatusStickerType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *StatusStickerInteractionMessage_StatusStickerType) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = StatusStickerInteractionMessage_StatusStickerType(num) + return nil +} + +// Deprecated: Use StatusStickerInteractionMessage_StatusStickerType.Descriptor instead. +func (StatusStickerInteractionMessage_StatusStickerType) EnumDescriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{8, 0} } type ButtonsResponseMessage_Type int32 @@ -736,11 +1107,11 @@ func (x ButtonsResponseMessage_Type) String() string { } func (ButtonsResponseMessage_Type) Descriptor() protoreflect.EnumDescriptor { - return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[11].Descriptor() + return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[17].Descriptor() } func (ButtonsResponseMessage_Type) Type() protoreflect.EnumType { - return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[11] + return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[17] } func (x ButtonsResponseMessage_Type) Number() protoreflect.EnumNumber { @@ -759,7 +1130,7 @@ func (x *ButtonsResponseMessage_Type) UnmarshalJSON(b []byte) error { // Deprecated: Use ButtonsResponseMessage_Type.Descriptor instead. func (ButtonsResponseMessage_Type) EnumDescriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{7, 0} + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{9, 0} } type ButtonsMessage_HeaderType int32 @@ -807,11 +1178,11 @@ func (x ButtonsMessage_HeaderType) String() string { } func (ButtonsMessage_HeaderType) Descriptor() protoreflect.EnumDescriptor { - return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[12].Descriptor() + return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[18].Descriptor() } func (ButtonsMessage_HeaderType) Type() protoreflect.EnumType { - return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[12] + return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[18] } func (x ButtonsMessage_HeaderType) Number() protoreflect.EnumNumber { @@ -830,7 +1201,7 @@ func (x *ButtonsMessage_HeaderType) UnmarshalJSON(b []byte) error { // Deprecated: Use ButtonsMessage_HeaderType.Descriptor instead. func (ButtonsMessage_HeaderType) EnumDescriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{8, 0} + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{10, 0} } type ButtonsMessage_Button_Type int32 @@ -866,11 +1237,11 @@ func (x ButtonsMessage_Button_Type) String() string { } func (ButtonsMessage_Button_Type) Descriptor() protoreflect.EnumDescriptor { - return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[13].Descriptor() + return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[19].Descriptor() } func (ButtonsMessage_Button_Type) Type() protoreflect.EnumType { - return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[13] + return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[19] } func (x ButtonsMessage_Button_Type) Number() protoreflect.EnumNumber { @@ -889,14 +1260,17 @@ func (x *ButtonsMessage_Button_Type) UnmarshalJSON(b []byte) error { // Deprecated: Use ButtonsMessage_Button_Type.Descriptor instead. func (ButtonsMessage_Button_Type) EnumDescriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{8, 0, 0} + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{10, 0, 0} } type SecretEncryptedMessage_SecretEncType int32 const ( - SecretEncryptedMessage_UNKNOWN SecretEncryptedMessage_SecretEncType = 0 - SecretEncryptedMessage_EVENT_EDIT SecretEncryptedMessage_SecretEncType = 1 + SecretEncryptedMessage_UNKNOWN SecretEncryptedMessage_SecretEncType = 0 + SecretEncryptedMessage_EVENT_EDIT SecretEncryptedMessage_SecretEncType = 1 + SecretEncryptedMessage_MESSAGE_EDIT SecretEncryptedMessage_SecretEncType = 2 + SecretEncryptedMessage_MESSAGE_SCHEDULE SecretEncryptedMessage_SecretEncType = 3 + SecretEncryptedMessage_POLL_EDIT SecretEncryptedMessage_SecretEncType = 4 ) // Enum value maps for SecretEncryptedMessage_SecretEncType. @@ -904,10 +1278,16 @@ var ( SecretEncryptedMessage_SecretEncType_name = map[int32]string{ 0: "UNKNOWN", 1: "EVENT_EDIT", + 2: "MESSAGE_EDIT", + 3: "MESSAGE_SCHEDULE", + 4: "POLL_EDIT", } SecretEncryptedMessage_SecretEncType_value = map[string]int32{ - "UNKNOWN": 0, - "EVENT_EDIT": 1, + "UNKNOWN": 0, + "EVENT_EDIT": 1, + "MESSAGE_EDIT": 2, + "MESSAGE_SCHEDULE": 3, + "POLL_EDIT": 4, } ) @@ -922,11 +1302,11 @@ func (x SecretEncryptedMessage_SecretEncType) String() string { } func (SecretEncryptedMessage_SecretEncType) Descriptor() protoreflect.EnumDescriptor { - return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[14].Descriptor() + return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[20].Descriptor() } func (SecretEncryptedMessage_SecretEncType) Type() protoreflect.EnumType { - return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[14] + return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[20] } func (x SecretEncryptedMessage_SecretEncType) Number() protoreflect.EnumNumber { @@ -945,7 +1325,7 @@ func (x *SecretEncryptedMessage_SecretEncType) UnmarshalJSON(b []byte) error { // Deprecated: Use SecretEncryptedMessage_SecretEncType.Descriptor instead. func (SecretEncryptedMessage_SecretEncType) EnumDescriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{9, 0} + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{11, 0} } type GroupInviteMessage_GroupType int32 @@ -978,11 +1358,11 @@ func (x GroupInviteMessage_GroupType) String() string { } func (GroupInviteMessage_GroupType) Descriptor() protoreflect.EnumDescriptor { - return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[15].Descriptor() + return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[21].Descriptor() } func (GroupInviteMessage_GroupType) Type() protoreflect.EnumType { - return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[15] + return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[21] } func (x GroupInviteMessage_GroupType) Number() protoreflect.EnumNumber { @@ -1001,7 +1381,7 @@ func (x *GroupInviteMessage_GroupType) UnmarshalJSON(b []byte) error { // Deprecated: Use GroupInviteMessage_GroupType.Descriptor instead. func (GroupInviteMessage_GroupType) EnumDescriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{10, 0} + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{12, 0} } type InteractiveResponseMessage_Body_Format int32 @@ -1034,11 +1414,11 @@ func (x InteractiveResponseMessage_Body_Format) String() string { } func (InteractiveResponseMessage_Body_Format) Descriptor() protoreflect.EnumDescriptor { - return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[16].Descriptor() + return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[22].Descriptor() } func (InteractiveResponseMessage_Body_Format) Type() protoreflect.EnumType { - return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[16] + return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[22] } func (x InteractiveResponseMessage_Body_Format) Number() protoreflect.EnumNumber { @@ -1057,7 +1437,66 @@ func (x *InteractiveResponseMessage_Body_Format) UnmarshalJSON(b []byte) error { // Deprecated: Use InteractiveResponseMessage_Body_Format.Descriptor instead. func (InteractiveResponseMessage_Body_Format) EnumDescriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{11, 0, 0} + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{13, 0, 0} +} + +type InteractiveMessage_CarouselMessage_CarouselCardType int32 + +const ( + InteractiveMessage_CarouselMessage_UNKNOWN InteractiveMessage_CarouselMessage_CarouselCardType = 0 + InteractiveMessage_CarouselMessage_HSCROLL_CARDS InteractiveMessage_CarouselMessage_CarouselCardType = 1 + InteractiveMessage_CarouselMessage_ALBUM_IMAGE InteractiveMessage_CarouselMessage_CarouselCardType = 2 +) + +// Enum value maps for InteractiveMessage_CarouselMessage_CarouselCardType. +var ( + InteractiveMessage_CarouselMessage_CarouselCardType_name = map[int32]string{ + 0: "UNKNOWN", + 1: "HSCROLL_CARDS", + 2: "ALBUM_IMAGE", + } + InteractiveMessage_CarouselMessage_CarouselCardType_value = map[string]int32{ + "UNKNOWN": 0, + "HSCROLL_CARDS": 1, + "ALBUM_IMAGE": 2, + } +) + +func (x InteractiveMessage_CarouselMessage_CarouselCardType) Enum() *InteractiveMessage_CarouselMessage_CarouselCardType { + p := new(InteractiveMessage_CarouselMessage_CarouselCardType) + *p = x + return p +} + +func (x InteractiveMessage_CarouselMessage_CarouselCardType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (InteractiveMessage_CarouselMessage_CarouselCardType) Descriptor() protoreflect.EnumDescriptor { + return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[23].Descriptor() +} + +func (InteractiveMessage_CarouselMessage_CarouselCardType) Type() protoreflect.EnumType { + return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[23] +} + +func (x InteractiveMessage_CarouselMessage_CarouselCardType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *InteractiveMessage_CarouselMessage_CarouselCardType) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = InteractiveMessage_CarouselMessage_CarouselCardType(num) + return nil +} + +// Deprecated: Use InteractiveMessage_CarouselMessage_CarouselCardType.Descriptor instead. +func (InteractiveMessage_CarouselMessage_CarouselCardType) EnumDescriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{14, 0, 0} } type InteractiveMessage_ShopMessage_Surface int32 @@ -1096,11 +1535,11 @@ func (x InteractiveMessage_ShopMessage_Surface) String() string { } func (InteractiveMessage_ShopMessage_Surface) Descriptor() protoreflect.EnumDescriptor { - return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[17].Descriptor() + return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[24].Descriptor() } func (InteractiveMessage_ShopMessage_Surface) Type() protoreflect.EnumType { - return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[17] + return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[24] } func (x InteractiveMessage_ShopMessage_Surface) Number() protoreflect.EnumNumber { @@ -1119,7 +1558,7 @@ func (x *InteractiveMessage_ShopMessage_Surface) UnmarshalJSON(b []byte) error { // Deprecated: Use InteractiveMessage_ShopMessage_Surface.Descriptor instead. func (InteractiveMessage_ShopMessage_Surface) EnumDescriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{12, 0, 0} + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{14, 1, 0} } type ListResponseMessage_ListType int32 @@ -1152,11 +1591,11 @@ func (x ListResponseMessage_ListType) String() string { } func (ListResponseMessage_ListType) Descriptor() protoreflect.EnumDescriptor { - return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[18].Descriptor() + return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[25].Descriptor() } func (ListResponseMessage_ListType) Type() protoreflect.EnumType { - return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[18] + return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[25] } func (x ListResponseMessage_ListType) Number() protoreflect.EnumNumber { @@ -1175,7 +1614,7 @@ func (x *ListResponseMessage_ListType) UnmarshalJSON(b []byte) error { // Deprecated: Use ListResponseMessage_ListType.Descriptor instead. func (ListResponseMessage_ListType) EnumDescriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{13, 0} + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{15, 0} } type ListMessage_ListType int32 @@ -1211,11 +1650,11 @@ func (x ListMessage_ListType) String() string { } func (ListMessage_ListType) Descriptor() protoreflect.EnumDescriptor { - return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[19].Descriptor() + return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[26].Descriptor() } func (ListMessage_ListType) Type() protoreflect.EnumType { - return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[19] + return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[26] } func (x ListMessage_ListType) Number() protoreflect.EnumNumber { @@ -1234,7 +1673,7 @@ func (x *ListMessage_ListType) UnmarshalJSON(b []byte) error { // Deprecated: Use ListMessage_ListType.Descriptor instead. func (ListMessage_ListType) EnumDescriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{14, 0} + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{16, 0} } type OrderMessage_OrderSurface int32 @@ -1264,11 +1703,11 @@ func (x OrderMessage_OrderSurface) String() string { } func (OrderMessage_OrderSurface) Descriptor() protoreflect.EnumDescriptor { - return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[20].Descriptor() + return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[27].Descriptor() } func (OrderMessage_OrderSurface) Type() protoreflect.EnumType { - return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[20] + return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[27] } func (x OrderMessage_OrderSurface) Number() protoreflect.EnumNumber { @@ -1287,7 +1726,7 @@ func (x *OrderMessage_OrderSurface) UnmarshalJSON(b []byte) error { // Deprecated: Use OrderMessage_OrderSurface.Descriptor instead. func (OrderMessage_OrderSurface) EnumDescriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{15, 0} + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{17, 0} } type OrderMessage_OrderStatus int32 @@ -1323,11 +1762,11 @@ func (x OrderMessage_OrderStatus) String() string { } func (OrderMessage_OrderStatus) Descriptor() protoreflect.EnumDescriptor { - return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[21].Descriptor() + return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[28].Descriptor() } func (OrderMessage_OrderStatus) Type() protoreflect.EnumType { - return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[21] + return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[28] } func (x OrderMessage_OrderStatus) Number() protoreflect.EnumNumber { @@ -1346,7 +1785,60 @@ func (x *OrderMessage_OrderStatus) UnmarshalJSON(b []byte) error { // Deprecated: Use OrderMessage_OrderStatus.Descriptor instead. func (OrderMessage_OrderStatus) EnumDescriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{15, 1} + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{17, 1} +} + +type StatusQuotedMessage_StatusQuotedMessageType int32 + +const ( + StatusQuotedMessage_QUESTION_ANSWER StatusQuotedMessage_StatusQuotedMessageType = 1 +) + +// Enum value maps for StatusQuotedMessage_StatusQuotedMessageType. +var ( + StatusQuotedMessage_StatusQuotedMessageType_name = map[int32]string{ + 1: "QUESTION_ANSWER", + } + StatusQuotedMessage_StatusQuotedMessageType_value = map[string]int32{ + "QUESTION_ANSWER": 1, + } +) + +func (x StatusQuotedMessage_StatusQuotedMessageType) Enum() *StatusQuotedMessage_StatusQuotedMessageType { + p := new(StatusQuotedMessage_StatusQuotedMessageType) + *p = x + return p +} + +func (x StatusQuotedMessage_StatusQuotedMessageType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (StatusQuotedMessage_StatusQuotedMessageType) Descriptor() protoreflect.EnumDescriptor { + return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[29].Descriptor() +} + +func (StatusQuotedMessage_StatusQuotedMessageType) Type() protoreflect.EnumType { + return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[29] +} + +func (x StatusQuotedMessage_StatusQuotedMessageType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *StatusQuotedMessage_StatusQuotedMessageType) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = StatusQuotedMessage_StatusQuotedMessageType(num) + return nil +} + +// Deprecated: Use StatusQuotedMessage_StatusQuotedMessageType.Descriptor instead. +func (StatusQuotedMessage_StatusQuotedMessageType) EnumDescriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{18, 0} } type PaymentInviteMessage_ServiceType int32 @@ -1385,11 +1877,11 @@ func (x PaymentInviteMessage_ServiceType) String() string { } func (PaymentInviteMessage_ServiceType) Descriptor() protoreflect.EnumDescriptor { - return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[22].Descriptor() + return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[30].Descriptor() } func (PaymentInviteMessage_ServiceType) Type() protoreflect.EnumType { - return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[22] + return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[30] } func (x PaymentInviteMessage_ServiceType) Number() protoreflect.EnumNumber { @@ -1408,7 +1900,7 @@ func (x *PaymentInviteMessage_ServiceType) UnmarshalJSON(b []byte) error { // Deprecated: Use PaymentInviteMessage_ServiceType.Descriptor instead. func (PaymentInviteMessage_ServiceType) EnumDescriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{16, 0} + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{19, 0} } type HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeComponent_CalendarType int32 @@ -1441,11 +1933,11 @@ func (x HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeC } func (HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeComponent_CalendarType) Descriptor() protoreflect.EnumDescriptor { - return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[23].Descriptor() + return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[31].Descriptor() } func (HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeComponent_CalendarType) Type() protoreflect.EnumType { - return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[23] + return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[31] } func (x HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeComponent_CalendarType) Number() protoreflect.EnumNumber { @@ -1464,7 +1956,7 @@ func (x *HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTime // Deprecated: Use HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeComponent_CalendarType.Descriptor instead. func (HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeComponent_CalendarType) EnumDescriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{17, 0, 0, 0, 0} + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{20, 0, 0, 0, 0} } type HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeComponent_DayOfWeekType int32 @@ -1512,11 +2004,11 @@ func (x HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeC } func (HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeComponent_DayOfWeekType) Descriptor() protoreflect.EnumDescriptor { - return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[24].Descriptor() + return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[32].Descriptor() } func (HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeComponent_DayOfWeekType) Type() protoreflect.EnumType { - return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[24] + return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[32] } func (x HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeComponent_DayOfWeekType) Number() protoreflect.EnumNumber { @@ -1535,16 +2027,87 @@ func (x *HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTime // Deprecated: Use HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeComponent_DayOfWeekType.Descriptor instead. func (HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeComponent_DayOfWeekType) EnumDescriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{17, 0, 0, 0, 1} + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{20, 0, 0, 0, 1} +} + +type PeerDataOperationRequestResponseMessage_PeerDataOperationResult_HistorySyncChunkRetryResponseCode int32 + +const ( + PeerDataOperationRequestResponseMessage_PeerDataOperationResult_GENERATION_ERROR PeerDataOperationRequestResponseMessage_PeerDataOperationResult_HistorySyncChunkRetryResponseCode = 1 + PeerDataOperationRequestResponseMessage_PeerDataOperationResult_CHUNK_CONSUMED PeerDataOperationRequestResponseMessage_PeerDataOperationResult_HistorySyncChunkRetryResponseCode = 2 + PeerDataOperationRequestResponseMessage_PeerDataOperationResult_TIMEOUT PeerDataOperationRequestResponseMessage_PeerDataOperationResult_HistorySyncChunkRetryResponseCode = 3 + PeerDataOperationRequestResponseMessage_PeerDataOperationResult_SESSION_EXHAUSTED PeerDataOperationRequestResponseMessage_PeerDataOperationResult_HistorySyncChunkRetryResponseCode = 4 + PeerDataOperationRequestResponseMessage_PeerDataOperationResult_CHUNK_EXHAUSTED PeerDataOperationRequestResponseMessage_PeerDataOperationResult_HistorySyncChunkRetryResponseCode = 5 + PeerDataOperationRequestResponseMessage_PeerDataOperationResult_DUPLICATED_REQUEST PeerDataOperationRequestResponseMessage_PeerDataOperationResult_HistorySyncChunkRetryResponseCode = 6 +) + +// Enum value maps for PeerDataOperationRequestResponseMessage_PeerDataOperationResult_HistorySyncChunkRetryResponseCode. +var ( + PeerDataOperationRequestResponseMessage_PeerDataOperationResult_HistorySyncChunkRetryResponseCode_name = map[int32]string{ + 1: "GENERATION_ERROR", + 2: "CHUNK_CONSUMED", + 3: "TIMEOUT", + 4: "SESSION_EXHAUSTED", + 5: "CHUNK_EXHAUSTED", + 6: "DUPLICATED_REQUEST", + } + PeerDataOperationRequestResponseMessage_PeerDataOperationResult_HistorySyncChunkRetryResponseCode_value = map[string]int32{ + "GENERATION_ERROR": 1, + "CHUNK_CONSUMED": 2, + "TIMEOUT": 3, + "SESSION_EXHAUSTED": 4, + "CHUNK_EXHAUSTED": 5, + "DUPLICATED_REQUEST": 6, + } +) + +func (x PeerDataOperationRequestResponseMessage_PeerDataOperationResult_HistorySyncChunkRetryResponseCode) Enum() *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_HistorySyncChunkRetryResponseCode { + p := new(PeerDataOperationRequestResponseMessage_PeerDataOperationResult_HistorySyncChunkRetryResponseCode) + *p = x + return p +} + +func (x PeerDataOperationRequestResponseMessage_PeerDataOperationResult_HistorySyncChunkRetryResponseCode) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (PeerDataOperationRequestResponseMessage_PeerDataOperationResult_HistorySyncChunkRetryResponseCode) Descriptor() protoreflect.EnumDescriptor { + return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[33].Descriptor() +} + +func (PeerDataOperationRequestResponseMessage_PeerDataOperationResult_HistorySyncChunkRetryResponseCode) Type() protoreflect.EnumType { + return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[33] +} + +func (x PeerDataOperationRequestResponseMessage_PeerDataOperationResult_HistorySyncChunkRetryResponseCode) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_HistorySyncChunkRetryResponseCode) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = PeerDataOperationRequestResponseMessage_PeerDataOperationResult_HistorySyncChunkRetryResponseCode(num) + return nil +} + +// Deprecated: Use PeerDataOperationRequestResponseMessage_PeerDataOperationResult_HistorySyncChunkRetryResponseCode.Descriptor instead. +func (PeerDataOperationRequestResponseMessage_PeerDataOperationResult_HistorySyncChunkRetryResponseCode) EnumDescriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{21, 0, 0} } type PeerDataOperationRequestResponseMessage_PeerDataOperationResult_FullHistorySyncOnDemandResponseCode int32 const ( - PeerDataOperationRequestResponseMessage_PeerDataOperationResult_REQUEST_SUCCESS PeerDataOperationRequestResponseMessage_PeerDataOperationResult_FullHistorySyncOnDemandResponseCode = 0 - PeerDataOperationRequestResponseMessage_PeerDataOperationResult_REQUEST_TIME_EXPIRED PeerDataOperationRequestResponseMessage_PeerDataOperationResult_FullHistorySyncOnDemandResponseCode = 1 - PeerDataOperationRequestResponseMessage_PeerDataOperationResult_DECLINED_SHARING_HISTORY PeerDataOperationRequestResponseMessage_PeerDataOperationResult_FullHistorySyncOnDemandResponseCode = 2 - PeerDataOperationRequestResponseMessage_PeerDataOperationResult_GENERIC_ERROR PeerDataOperationRequestResponseMessage_PeerDataOperationResult_FullHistorySyncOnDemandResponseCode = 3 + PeerDataOperationRequestResponseMessage_PeerDataOperationResult_REQUEST_SUCCESS PeerDataOperationRequestResponseMessage_PeerDataOperationResult_FullHistorySyncOnDemandResponseCode = 0 + PeerDataOperationRequestResponseMessage_PeerDataOperationResult_REQUEST_TIME_EXPIRED PeerDataOperationRequestResponseMessage_PeerDataOperationResult_FullHistorySyncOnDemandResponseCode = 1 + PeerDataOperationRequestResponseMessage_PeerDataOperationResult_DECLINED_SHARING_HISTORY PeerDataOperationRequestResponseMessage_PeerDataOperationResult_FullHistorySyncOnDemandResponseCode = 2 + PeerDataOperationRequestResponseMessage_PeerDataOperationResult_GENERIC_ERROR PeerDataOperationRequestResponseMessage_PeerDataOperationResult_FullHistorySyncOnDemandResponseCode = 3 + PeerDataOperationRequestResponseMessage_PeerDataOperationResult_ERROR_REQUEST_ON_NON_SMB_PRIMARY PeerDataOperationRequestResponseMessage_PeerDataOperationResult_FullHistorySyncOnDemandResponseCode = 4 + PeerDataOperationRequestResponseMessage_PeerDataOperationResult_ERROR_HOSTED_DEVICE_NOT_CONNECTED PeerDataOperationRequestResponseMessage_PeerDataOperationResult_FullHistorySyncOnDemandResponseCode = 5 + PeerDataOperationRequestResponseMessage_PeerDataOperationResult_ERROR_HOSTED_DEVICE_LOGIN_TIME_NOT_SET PeerDataOperationRequestResponseMessage_PeerDataOperationResult_FullHistorySyncOnDemandResponseCode = 6 ) // Enum value maps for PeerDataOperationRequestResponseMessage_PeerDataOperationResult_FullHistorySyncOnDemandResponseCode. @@ -1554,12 +2117,18 @@ var ( 1: "REQUEST_TIME_EXPIRED", 2: "DECLINED_SHARING_HISTORY", 3: "GENERIC_ERROR", + 4: "ERROR_REQUEST_ON_NON_SMB_PRIMARY", + 5: "ERROR_HOSTED_DEVICE_NOT_CONNECTED", + 6: "ERROR_HOSTED_DEVICE_LOGIN_TIME_NOT_SET", } PeerDataOperationRequestResponseMessage_PeerDataOperationResult_FullHistorySyncOnDemandResponseCode_value = map[string]int32{ - "REQUEST_SUCCESS": 0, - "REQUEST_TIME_EXPIRED": 1, - "DECLINED_SHARING_HISTORY": 2, - "GENERIC_ERROR": 3, + "REQUEST_SUCCESS": 0, + "REQUEST_TIME_EXPIRED": 1, + "DECLINED_SHARING_HISTORY": 2, + "GENERIC_ERROR": 3, + "ERROR_REQUEST_ON_NON_SMB_PRIMARY": 4, + "ERROR_HOSTED_DEVICE_NOT_CONNECTED": 5, + "ERROR_HOSTED_DEVICE_LOGIN_TIME_NOT_SET": 6, } ) @@ -1574,11 +2143,11 @@ func (x PeerDataOperationRequestResponseMessage_PeerDataOperationResult_FullHist } func (PeerDataOperationRequestResponseMessage_PeerDataOperationResult_FullHistorySyncOnDemandResponseCode) Descriptor() protoreflect.EnumDescriptor { - return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[25].Descriptor() + return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[34].Descriptor() } func (PeerDataOperationRequestResponseMessage_PeerDataOperationResult_FullHistorySyncOnDemandResponseCode) Type() protoreflect.EnumType { - return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[25] + return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[34] } func (x PeerDataOperationRequestResponseMessage_PeerDataOperationResult_FullHistorySyncOnDemandResponseCode) Number() protoreflect.EnumNumber { @@ -1597,81 +2166,63 @@ func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_FullHis // Deprecated: Use PeerDataOperationRequestResponseMessage_PeerDataOperationResult_FullHistorySyncOnDemandResponseCode.Descriptor instead. func (PeerDataOperationRequestResponseMessage_PeerDataOperationResult_FullHistorySyncOnDemandResponseCode) EnumDescriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{18, 0, 0} + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{21, 0, 1} } -type HistorySyncNotification_HistorySyncType int32 +type PeerDataOperationRequestMessage_GalaxyFlowAction_GalaxyFlowActionType int32 const ( - HistorySyncNotification_INITIAL_BOOTSTRAP HistorySyncNotification_HistorySyncType = 0 - HistorySyncNotification_INITIAL_STATUS_V3 HistorySyncNotification_HistorySyncType = 1 - HistorySyncNotification_FULL HistorySyncNotification_HistorySyncType = 2 - HistorySyncNotification_RECENT HistorySyncNotification_HistorySyncType = 3 - HistorySyncNotification_PUSH_NAME HistorySyncNotification_HistorySyncType = 4 - HistorySyncNotification_NON_BLOCKING_DATA HistorySyncNotification_HistorySyncType = 5 - HistorySyncNotification_ON_DEMAND HistorySyncNotification_HistorySyncType = 6 - HistorySyncNotification_NO_HISTORY HistorySyncNotification_HistorySyncType = 7 + PeerDataOperationRequestMessage_GalaxyFlowAction_NOTIFY_LAUNCH PeerDataOperationRequestMessage_GalaxyFlowAction_GalaxyFlowActionType = 1 + PeerDataOperationRequestMessage_GalaxyFlowAction_DOWNLOAD_RESPONSES PeerDataOperationRequestMessage_GalaxyFlowAction_GalaxyFlowActionType = 2 ) -// Enum value maps for HistorySyncNotification_HistorySyncType. +// Enum value maps for PeerDataOperationRequestMessage_GalaxyFlowAction_GalaxyFlowActionType. var ( - HistorySyncNotification_HistorySyncType_name = map[int32]string{ - 0: "INITIAL_BOOTSTRAP", - 1: "INITIAL_STATUS_V3", - 2: "FULL", - 3: "RECENT", - 4: "PUSH_NAME", - 5: "NON_BLOCKING_DATA", - 6: "ON_DEMAND", - 7: "NO_HISTORY", + PeerDataOperationRequestMessage_GalaxyFlowAction_GalaxyFlowActionType_name = map[int32]string{ + 1: "NOTIFY_LAUNCH", + 2: "DOWNLOAD_RESPONSES", } - HistorySyncNotification_HistorySyncType_value = map[string]int32{ - "INITIAL_BOOTSTRAP": 0, - "INITIAL_STATUS_V3": 1, - "FULL": 2, - "RECENT": 3, - "PUSH_NAME": 4, - "NON_BLOCKING_DATA": 5, - "ON_DEMAND": 6, - "NO_HISTORY": 7, + PeerDataOperationRequestMessage_GalaxyFlowAction_GalaxyFlowActionType_value = map[string]int32{ + "NOTIFY_LAUNCH": 1, + "DOWNLOAD_RESPONSES": 2, } ) -func (x HistorySyncNotification_HistorySyncType) Enum() *HistorySyncNotification_HistorySyncType { - p := new(HistorySyncNotification_HistorySyncType) +func (x PeerDataOperationRequestMessage_GalaxyFlowAction_GalaxyFlowActionType) Enum() *PeerDataOperationRequestMessage_GalaxyFlowAction_GalaxyFlowActionType { + p := new(PeerDataOperationRequestMessage_GalaxyFlowAction_GalaxyFlowActionType) *p = x return p } -func (x HistorySyncNotification_HistorySyncType) String() string { +func (x PeerDataOperationRequestMessage_GalaxyFlowAction_GalaxyFlowActionType) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } -func (HistorySyncNotification_HistorySyncType) Descriptor() protoreflect.EnumDescriptor { - return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[26].Descriptor() +func (PeerDataOperationRequestMessage_GalaxyFlowAction_GalaxyFlowActionType) Descriptor() protoreflect.EnumDescriptor { + return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[35].Descriptor() } -func (HistorySyncNotification_HistorySyncType) Type() protoreflect.EnumType { - return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[26] +func (PeerDataOperationRequestMessage_GalaxyFlowAction_GalaxyFlowActionType) Type() protoreflect.EnumType { + return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[35] } -func (x HistorySyncNotification_HistorySyncType) Number() protoreflect.EnumNumber { +func (x PeerDataOperationRequestMessage_GalaxyFlowAction_GalaxyFlowActionType) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Do not use. -func (x *HistorySyncNotification_HistorySyncType) UnmarshalJSON(b []byte) error { +func (x *PeerDataOperationRequestMessage_GalaxyFlowAction_GalaxyFlowActionType) UnmarshalJSON(b []byte) error { num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) if err != nil { return err } - *x = HistorySyncNotification_HistorySyncType(num) + *x = PeerDataOperationRequestMessage_GalaxyFlowAction_GalaxyFlowActionType(num) return nil } -// Deprecated: Use HistorySyncNotification_HistorySyncType.Descriptor instead. -func (HistorySyncNotification_HistorySyncType) EnumDescriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{19, 0} +// Deprecated: Use PeerDataOperationRequestMessage_GalaxyFlowAction_GalaxyFlowActionType.Descriptor instead. +func (PeerDataOperationRequestMessage_GalaxyFlowAction_GalaxyFlowActionType) EnumDescriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{22, 0, 0} } type RequestWelcomeMessageMetadata_LocalChatState int32 @@ -1704,11 +2255,11 @@ func (x RequestWelcomeMessageMetadata_LocalChatState) String() string { } func (RequestWelcomeMessageMetadata_LocalChatState) Descriptor() protoreflect.EnumDescriptor { - return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[27].Descriptor() + return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[36].Descriptor() } func (RequestWelcomeMessageMetadata_LocalChatState) Type() protoreflect.EnumType { - return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[27] + return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[36] } func (x RequestWelcomeMessageMetadata_LocalChatState) Number() protoreflect.EnumNumber { @@ -1727,7 +2278,7 @@ func (x *RequestWelcomeMessageMetadata_LocalChatState) UnmarshalJSON(b []byte) e // Deprecated: Use RequestWelcomeMessageMetadata_LocalChatState.Descriptor instead. func (RequestWelcomeMessageMetadata_LocalChatState) EnumDescriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{20, 0} + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{23, 0} } type ProtocolMessage_Type int32 @@ -1754,6 +2305,13 @@ const ( ProtocolMessage_REMINDER_MESSAGE ProtocolMessage_Type = 23 ProtocolMessage_BOT_MEMU_ONBOARDING_MESSAGE ProtocolMessage_Type = 24 ProtocolMessage_STATUS_MENTION_MESSAGE ProtocolMessage_Type = 25 + ProtocolMessage_STOP_GENERATION_MESSAGE ProtocolMessage_Type = 26 + ProtocolMessage_LIMIT_SHARING ProtocolMessage_Type = 27 + ProtocolMessage_AI_PSI_METADATA ProtocolMessage_Type = 28 + ProtocolMessage_AI_QUERY_FANOUT ProtocolMessage_Type = 29 + ProtocolMessage_GROUP_MEMBER_LABEL_CHANGE ProtocolMessage_Type = 30 + ProtocolMessage_AI_MEDIA_COLLECTION_MESSAGE ProtocolMessage_Type = 31 + ProtocolMessage_MESSAGE_UNSCHEDULE ProtocolMessage_Type = 32 ) // Enum value maps for ProtocolMessage_Type. @@ -1780,6 +2338,13 @@ var ( 23: "REMINDER_MESSAGE", 24: "BOT_MEMU_ONBOARDING_MESSAGE", 25: "STATUS_MENTION_MESSAGE", + 26: "STOP_GENERATION_MESSAGE", + 27: "LIMIT_SHARING", + 28: "AI_PSI_METADATA", + 29: "AI_QUERY_FANOUT", + 30: "GROUP_MEMBER_LABEL_CHANGE", + 31: "AI_MEDIA_COLLECTION_MESSAGE", + 32: "MESSAGE_UNSCHEDULE", } ProtocolMessage_Type_value = map[string]int32{ "REVOKE": 0, @@ -1803,6 +2368,13 @@ var ( "REMINDER_MESSAGE": 23, "BOT_MEMU_ONBOARDING_MESSAGE": 24, "STATUS_MENTION_MESSAGE": 25, + "STOP_GENERATION_MESSAGE": 26, + "LIMIT_SHARING": 27, + "AI_PSI_METADATA": 28, + "AI_QUERY_FANOUT": 29, + "GROUP_MEMBER_LABEL_CHANGE": 30, + "AI_MEDIA_COLLECTION_MESSAGE": 31, + "MESSAGE_UNSCHEDULE": 32, } ) @@ -1817,11 +2389,11 @@ func (x ProtocolMessage_Type) String() string { } func (ProtocolMessage_Type) Descriptor() protoreflect.EnumDescriptor { - return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[28].Descriptor() + return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[37].Descriptor() } func (ProtocolMessage_Type) Type() protoreflect.EnumType { - return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[28] + return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[37] } func (x ProtocolMessage_Type) Number() protoreflect.EnumNumber { @@ -1840,7 +2412,7 @@ func (x *ProtocolMessage_Type) UnmarshalJSON(b []byte) error { // Deprecated: Use ProtocolMessage_Type.Descriptor instead. func (ProtocolMessage_Type) EnumDescriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{21, 0} + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{24, 0} } type CloudAPIThreadControlNotification_CloudAPIThreadControl int32 @@ -1876,11 +2448,11 @@ func (x CloudAPIThreadControlNotification_CloudAPIThreadControl) String() string } func (CloudAPIThreadControlNotification_CloudAPIThreadControl) Descriptor() protoreflect.EnumDescriptor { - return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[29].Descriptor() + return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[38].Descriptor() } func (CloudAPIThreadControlNotification_CloudAPIThreadControl) Type() protoreflect.EnumType { - return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[29] + return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[38] } func (x CloudAPIThreadControlNotification_CloudAPIThreadControl) Number() protoreflect.EnumNumber { @@ -1899,270 +2471,63 @@ func (x *CloudAPIThreadControlNotification_CloudAPIThreadControl) UnmarshalJSON( // Deprecated: Use CloudAPIThreadControlNotification_CloudAPIThreadControl.Descriptor instead. func (CloudAPIThreadControlNotification_CloudAPIThreadControl) EnumDescriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{22, 0} + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{25, 0} } -type BotFeedbackMessage_ReportKind int32 +type VideoMessage_VideoSourceType int32 const ( - BotFeedbackMessage_GENERIC BotFeedbackMessage_ReportKind = 0 + VideoMessage_USER_VIDEO VideoMessage_VideoSourceType = 0 + VideoMessage_AI_GENERATED VideoMessage_VideoSourceType = 1 ) -// Enum value maps for BotFeedbackMessage_ReportKind. +// Enum value maps for VideoMessage_VideoSourceType. var ( - BotFeedbackMessage_ReportKind_name = map[int32]string{ - 0: "GENERIC", + VideoMessage_VideoSourceType_name = map[int32]string{ + 0: "USER_VIDEO", + 1: "AI_GENERATED", } - BotFeedbackMessage_ReportKind_value = map[string]int32{ - "GENERIC": 0, - } -) - -func (x BotFeedbackMessage_ReportKind) Enum() *BotFeedbackMessage_ReportKind { - p := new(BotFeedbackMessage_ReportKind) - *p = x - return p -} - -func (x BotFeedbackMessage_ReportKind) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (BotFeedbackMessage_ReportKind) Descriptor() protoreflect.EnumDescriptor { - return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[30].Descriptor() -} - -func (BotFeedbackMessage_ReportKind) Type() protoreflect.EnumType { - return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[30] -} - -func (x BotFeedbackMessage_ReportKind) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Do not use. -func (x *BotFeedbackMessage_ReportKind) UnmarshalJSON(b []byte) error { - num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) - if err != nil { - return err - } - *x = BotFeedbackMessage_ReportKind(num) - return nil -} - -// Deprecated: Use BotFeedbackMessage_ReportKind.Descriptor instead. -func (BotFeedbackMessage_ReportKind) EnumDescriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{23, 0} -} - -type BotFeedbackMessage_BotFeedbackKindMultiplePositive int32 - -const ( - BotFeedbackMessage_BOT_FEEDBACK_MULTIPLE_POSITIVE_GENERIC BotFeedbackMessage_BotFeedbackKindMultiplePositive = 1 -) - -// Enum value maps for BotFeedbackMessage_BotFeedbackKindMultiplePositive. -var ( - BotFeedbackMessage_BotFeedbackKindMultiplePositive_name = map[int32]string{ - 1: "BOT_FEEDBACK_MULTIPLE_POSITIVE_GENERIC", - } - BotFeedbackMessage_BotFeedbackKindMultiplePositive_value = map[string]int32{ - "BOT_FEEDBACK_MULTIPLE_POSITIVE_GENERIC": 1, - } -) - -func (x BotFeedbackMessage_BotFeedbackKindMultiplePositive) Enum() *BotFeedbackMessage_BotFeedbackKindMultiplePositive { - p := new(BotFeedbackMessage_BotFeedbackKindMultiplePositive) - *p = x - return p -} - -func (x BotFeedbackMessage_BotFeedbackKindMultiplePositive) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (BotFeedbackMessage_BotFeedbackKindMultiplePositive) Descriptor() protoreflect.EnumDescriptor { - return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[31].Descriptor() -} - -func (BotFeedbackMessage_BotFeedbackKindMultiplePositive) Type() protoreflect.EnumType { - return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[31] -} - -func (x BotFeedbackMessage_BotFeedbackKindMultiplePositive) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Do not use. -func (x *BotFeedbackMessage_BotFeedbackKindMultiplePositive) UnmarshalJSON(b []byte) error { - num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) - if err != nil { - return err - } - *x = BotFeedbackMessage_BotFeedbackKindMultiplePositive(num) - return nil -} - -// Deprecated: Use BotFeedbackMessage_BotFeedbackKindMultiplePositive.Descriptor instead. -func (BotFeedbackMessage_BotFeedbackKindMultiplePositive) EnumDescriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{23, 1} -} - -type BotFeedbackMessage_BotFeedbackKindMultipleNegative int32 - -const ( - BotFeedbackMessage_BOT_FEEDBACK_MULTIPLE_NEGATIVE_GENERIC BotFeedbackMessage_BotFeedbackKindMultipleNegative = 1 - BotFeedbackMessage_BOT_FEEDBACK_MULTIPLE_NEGATIVE_HELPFUL BotFeedbackMessage_BotFeedbackKindMultipleNegative = 2 - BotFeedbackMessage_BOT_FEEDBACK_MULTIPLE_NEGATIVE_INTERESTING BotFeedbackMessage_BotFeedbackKindMultipleNegative = 4 - BotFeedbackMessage_BOT_FEEDBACK_MULTIPLE_NEGATIVE_ACCURATE BotFeedbackMessage_BotFeedbackKindMultipleNegative = 8 - BotFeedbackMessage_BOT_FEEDBACK_MULTIPLE_NEGATIVE_SAFE BotFeedbackMessage_BotFeedbackKindMultipleNegative = 16 - BotFeedbackMessage_BOT_FEEDBACK_MULTIPLE_NEGATIVE_OTHER BotFeedbackMessage_BotFeedbackKindMultipleNegative = 32 - BotFeedbackMessage_BOT_FEEDBACK_MULTIPLE_NEGATIVE_REFUSED BotFeedbackMessage_BotFeedbackKindMultipleNegative = 64 - BotFeedbackMessage_BOT_FEEDBACK_MULTIPLE_NEGATIVE_NOT_VISUALLY_APPEALING BotFeedbackMessage_BotFeedbackKindMultipleNegative = 128 - BotFeedbackMessage_BOT_FEEDBACK_MULTIPLE_NEGATIVE_NOT_RELEVANT_TO_TEXT BotFeedbackMessage_BotFeedbackKindMultipleNegative = 256 -) - -// Enum value maps for BotFeedbackMessage_BotFeedbackKindMultipleNegative. -var ( - BotFeedbackMessage_BotFeedbackKindMultipleNegative_name = map[int32]string{ - 1: "BOT_FEEDBACK_MULTIPLE_NEGATIVE_GENERIC", - 2: "BOT_FEEDBACK_MULTIPLE_NEGATIVE_HELPFUL", - 4: "BOT_FEEDBACK_MULTIPLE_NEGATIVE_INTERESTING", - 8: "BOT_FEEDBACK_MULTIPLE_NEGATIVE_ACCURATE", - 16: "BOT_FEEDBACK_MULTIPLE_NEGATIVE_SAFE", - 32: "BOT_FEEDBACK_MULTIPLE_NEGATIVE_OTHER", - 64: "BOT_FEEDBACK_MULTIPLE_NEGATIVE_REFUSED", - 128: "BOT_FEEDBACK_MULTIPLE_NEGATIVE_NOT_VISUALLY_APPEALING", - 256: "BOT_FEEDBACK_MULTIPLE_NEGATIVE_NOT_RELEVANT_TO_TEXT", - } - BotFeedbackMessage_BotFeedbackKindMultipleNegative_value = map[string]int32{ - "BOT_FEEDBACK_MULTIPLE_NEGATIVE_GENERIC": 1, - "BOT_FEEDBACK_MULTIPLE_NEGATIVE_HELPFUL": 2, - "BOT_FEEDBACK_MULTIPLE_NEGATIVE_INTERESTING": 4, - "BOT_FEEDBACK_MULTIPLE_NEGATIVE_ACCURATE": 8, - "BOT_FEEDBACK_MULTIPLE_NEGATIVE_SAFE": 16, - "BOT_FEEDBACK_MULTIPLE_NEGATIVE_OTHER": 32, - "BOT_FEEDBACK_MULTIPLE_NEGATIVE_REFUSED": 64, - "BOT_FEEDBACK_MULTIPLE_NEGATIVE_NOT_VISUALLY_APPEALING": 128, - "BOT_FEEDBACK_MULTIPLE_NEGATIVE_NOT_RELEVANT_TO_TEXT": 256, - } -) - -func (x BotFeedbackMessage_BotFeedbackKindMultipleNegative) Enum() *BotFeedbackMessage_BotFeedbackKindMultipleNegative { - p := new(BotFeedbackMessage_BotFeedbackKindMultipleNegative) - *p = x - return p -} - -func (x BotFeedbackMessage_BotFeedbackKindMultipleNegative) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (BotFeedbackMessage_BotFeedbackKindMultipleNegative) Descriptor() protoreflect.EnumDescriptor { - return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[32].Descriptor() -} - -func (BotFeedbackMessage_BotFeedbackKindMultipleNegative) Type() protoreflect.EnumType { - return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[32] -} - -func (x BotFeedbackMessage_BotFeedbackKindMultipleNegative) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Do not use. -func (x *BotFeedbackMessage_BotFeedbackKindMultipleNegative) UnmarshalJSON(b []byte) error { - num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) - if err != nil { - return err - } - *x = BotFeedbackMessage_BotFeedbackKindMultipleNegative(num) - return nil -} - -// Deprecated: Use BotFeedbackMessage_BotFeedbackKindMultipleNegative.Descriptor instead. -func (BotFeedbackMessage_BotFeedbackKindMultipleNegative) EnumDescriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{23, 2} -} - -type BotFeedbackMessage_BotFeedbackKind int32 - -const ( - BotFeedbackMessage_BOT_FEEDBACK_POSITIVE BotFeedbackMessage_BotFeedbackKind = 0 - BotFeedbackMessage_BOT_FEEDBACK_NEGATIVE_GENERIC BotFeedbackMessage_BotFeedbackKind = 1 - BotFeedbackMessage_BOT_FEEDBACK_NEGATIVE_HELPFUL BotFeedbackMessage_BotFeedbackKind = 2 - BotFeedbackMessage_BOT_FEEDBACK_NEGATIVE_INTERESTING BotFeedbackMessage_BotFeedbackKind = 3 - BotFeedbackMessage_BOT_FEEDBACK_NEGATIVE_ACCURATE BotFeedbackMessage_BotFeedbackKind = 4 - BotFeedbackMessage_BOT_FEEDBACK_NEGATIVE_SAFE BotFeedbackMessage_BotFeedbackKind = 5 - BotFeedbackMessage_BOT_FEEDBACK_NEGATIVE_OTHER BotFeedbackMessage_BotFeedbackKind = 6 - BotFeedbackMessage_BOT_FEEDBACK_NEGATIVE_REFUSED BotFeedbackMessage_BotFeedbackKind = 7 - BotFeedbackMessage_BOT_FEEDBACK_NEGATIVE_NOT_VISUALLY_APPEALING BotFeedbackMessage_BotFeedbackKind = 8 - BotFeedbackMessage_BOT_FEEDBACK_NEGATIVE_NOT_RELEVANT_TO_TEXT BotFeedbackMessage_BotFeedbackKind = 9 -) - -// Enum value maps for BotFeedbackMessage_BotFeedbackKind. -var ( - BotFeedbackMessage_BotFeedbackKind_name = map[int32]string{ - 0: "BOT_FEEDBACK_POSITIVE", - 1: "BOT_FEEDBACK_NEGATIVE_GENERIC", - 2: "BOT_FEEDBACK_NEGATIVE_HELPFUL", - 3: "BOT_FEEDBACK_NEGATIVE_INTERESTING", - 4: "BOT_FEEDBACK_NEGATIVE_ACCURATE", - 5: "BOT_FEEDBACK_NEGATIVE_SAFE", - 6: "BOT_FEEDBACK_NEGATIVE_OTHER", - 7: "BOT_FEEDBACK_NEGATIVE_REFUSED", - 8: "BOT_FEEDBACK_NEGATIVE_NOT_VISUALLY_APPEALING", - 9: "BOT_FEEDBACK_NEGATIVE_NOT_RELEVANT_TO_TEXT", - } - BotFeedbackMessage_BotFeedbackKind_value = map[string]int32{ - "BOT_FEEDBACK_POSITIVE": 0, - "BOT_FEEDBACK_NEGATIVE_GENERIC": 1, - "BOT_FEEDBACK_NEGATIVE_HELPFUL": 2, - "BOT_FEEDBACK_NEGATIVE_INTERESTING": 3, - "BOT_FEEDBACK_NEGATIVE_ACCURATE": 4, - "BOT_FEEDBACK_NEGATIVE_SAFE": 5, - "BOT_FEEDBACK_NEGATIVE_OTHER": 6, - "BOT_FEEDBACK_NEGATIVE_REFUSED": 7, - "BOT_FEEDBACK_NEGATIVE_NOT_VISUALLY_APPEALING": 8, - "BOT_FEEDBACK_NEGATIVE_NOT_RELEVANT_TO_TEXT": 9, + VideoMessage_VideoSourceType_value = map[string]int32{ + "USER_VIDEO": 0, + "AI_GENERATED": 1, } ) -func (x BotFeedbackMessage_BotFeedbackKind) Enum() *BotFeedbackMessage_BotFeedbackKind { - p := new(BotFeedbackMessage_BotFeedbackKind) +func (x VideoMessage_VideoSourceType) Enum() *VideoMessage_VideoSourceType { + p := new(VideoMessage_VideoSourceType) *p = x return p } -func (x BotFeedbackMessage_BotFeedbackKind) String() string { +func (x VideoMessage_VideoSourceType) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } -func (BotFeedbackMessage_BotFeedbackKind) Descriptor() protoreflect.EnumDescriptor { - return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[33].Descriptor() +func (VideoMessage_VideoSourceType) Descriptor() protoreflect.EnumDescriptor { + return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[39].Descriptor() } -func (BotFeedbackMessage_BotFeedbackKind) Type() protoreflect.EnumType { - return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[33] +func (VideoMessage_VideoSourceType) Type() protoreflect.EnumType { + return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[39] } -func (x BotFeedbackMessage_BotFeedbackKind) Number() protoreflect.EnumNumber { +func (x VideoMessage_VideoSourceType) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Do not use. -func (x *BotFeedbackMessage_BotFeedbackKind) UnmarshalJSON(b []byte) error { +func (x *VideoMessage_VideoSourceType) UnmarshalJSON(b []byte) error { num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) if err != nil { return err } - *x = BotFeedbackMessage_BotFeedbackKind(num) + *x = VideoMessage_VideoSourceType(num) return nil } -// Deprecated: Use BotFeedbackMessage_BotFeedbackKind.Descriptor instead. -func (BotFeedbackMessage_BotFeedbackKind) EnumDescriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{23, 3} +// Deprecated: Use VideoMessage_VideoSourceType.Descriptor instead. +func (VideoMessage_VideoSourceType) EnumDescriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{26, 0} } type VideoMessage_Attribution int32 @@ -2171,6 +2536,7 @@ const ( VideoMessage_NONE VideoMessage_Attribution = 0 VideoMessage_GIPHY VideoMessage_Attribution = 1 VideoMessage_TENOR VideoMessage_Attribution = 2 + VideoMessage_KLIPY VideoMessage_Attribution = 3 ) // Enum value maps for VideoMessage_Attribution. @@ -2179,11 +2545,13 @@ var ( 0: "NONE", 1: "GIPHY", 2: "TENOR", + 3: "KLIPY", } VideoMessage_Attribution_value = map[string]int32{ "NONE": 0, "GIPHY": 1, "TENOR": 2, + "KLIPY": 3, } ) @@ -2198,11 +2566,11 @@ func (x VideoMessage_Attribution) String() string { } func (VideoMessage_Attribution) Descriptor() protoreflect.EnumDescriptor { - return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[34].Descriptor() + return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[40].Descriptor() } func (VideoMessage_Attribution) Type() protoreflect.EnumType { - return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[34] + return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[40] } func (x VideoMessage_Attribution) Number() protoreflect.EnumNumber { @@ -2221,7 +2589,7 @@ func (x *VideoMessage_Attribution) UnmarshalJSON(b []byte) error { // Deprecated: Use VideoMessage_Attribution.Descriptor instead. func (VideoMessage_Attribution) EnumDescriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{24, 0} + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{26, 1} } type ExtendedTextMessage_InviteLinkGroupType int32 @@ -2260,11 +2628,11 @@ func (x ExtendedTextMessage_InviteLinkGroupType) String() string { } func (ExtendedTextMessage_InviteLinkGroupType) Descriptor() protoreflect.EnumDescriptor { - return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[35].Descriptor() + return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[41].Descriptor() } func (ExtendedTextMessage_InviteLinkGroupType) Type() protoreflect.EnumType { - return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[35] + return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[41] } func (x ExtendedTextMessage_InviteLinkGroupType) Number() protoreflect.EnumNumber { @@ -2283,7 +2651,7 @@ func (x *ExtendedTextMessage_InviteLinkGroupType) UnmarshalJSON(b []byte) error // Deprecated: Use ExtendedTextMessage_InviteLinkGroupType.Descriptor instead. func (ExtendedTextMessage_InviteLinkGroupType) EnumDescriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{25, 0} + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{27, 0} } type ExtendedTextMessage_PreviewType int32 @@ -2294,6 +2662,7 @@ const ( ExtendedTextMessage_PLACEHOLDER ExtendedTextMessage_PreviewType = 4 ExtendedTextMessage_IMAGE ExtendedTextMessage_PreviewType = 5 ExtendedTextMessage_PAYMENT_LINKS ExtendedTextMessage_PreviewType = 6 + ExtendedTextMessage_PROFILE ExtendedTextMessage_PreviewType = 7 ) // Enum value maps for ExtendedTextMessage_PreviewType. @@ -2304,6 +2673,7 @@ var ( 4: "PLACEHOLDER", 5: "IMAGE", 6: "PAYMENT_LINKS", + 7: "PROFILE", } ExtendedTextMessage_PreviewType_value = map[string]int32{ "NONE": 0, @@ -2311,6 +2681,7 @@ var ( "PLACEHOLDER": 4, "IMAGE": 5, "PAYMENT_LINKS": 6, + "PROFILE": 7, } ) @@ -2325,11 +2696,11 @@ func (x ExtendedTextMessage_PreviewType) String() string { } func (ExtendedTextMessage_PreviewType) Descriptor() protoreflect.EnumDescriptor { - return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[36].Descriptor() + return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[42].Descriptor() } func (ExtendedTextMessage_PreviewType) Type() protoreflect.EnumType { - return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[36] + return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[42] } func (x ExtendedTextMessage_PreviewType) Number() protoreflect.EnumNumber { @@ -2348,7 +2719,7 @@ func (x *ExtendedTextMessage_PreviewType) UnmarshalJSON(b []byte) error { // Deprecated: Use ExtendedTextMessage_PreviewType.Descriptor instead. func (ExtendedTextMessage_PreviewType) EnumDescriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{25, 1} + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{27, 1} } type ExtendedTextMessage_FontType int32 @@ -2399,11 +2770,11 @@ func (x ExtendedTextMessage_FontType) String() string { } func (ExtendedTextMessage_FontType) Descriptor() protoreflect.EnumDescriptor { - return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[37].Descriptor() + return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[43].Descriptor() } func (ExtendedTextMessage_FontType) Type() protoreflect.EnumType { - return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[37] + return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[43] } func (x ExtendedTextMessage_FontType) Number() protoreflect.EnumNumber { @@ -2422,1287 +2793,3169 @@ func (x *ExtendedTextMessage_FontType) UnmarshalJSON(b []byte) error { // Deprecated: Use ExtendedTextMessage_FontType.Descriptor instead. func (ExtendedTextMessage_FontType) EnumDescriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{25, 2} + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{27, 2} } -type InvoiceMessage_AttachmentType int32 +type LinkPreviewMetadata_SocialMediaPostType int32 const ( - InvoiceMessage_IMAGE InvoiceMessage_AttachmentType = 0 - InvoiceMessage_PDF InvoiceMessage_AttachmentType = 1 + LinkPreviewMetadata_NONE LinkPreviewMetadata_SocialMediaPostType = 0 + LinkPreviewMetadata_REEL LinkPreviewMetadata_SocialMediaPostType = 1 + LinkPreviewMetadata_LIVE_VIDEO LinkPreviewMetadata_SocialMediaPostType = 2 + LinkPreviewMetadata_LONG_VIDEO LinkPreviewMetadata_SocialMediaPostType = 3 + LinkPreviewMetadata_SINGLE_IMAGE LinkPreviewMetadata_SocialMediaPostType = 4 + LinkPreviewMetadata_CAROUSEL LinkPreviewMetadata_SocialMediaPostType = 5 ) -// Enum value maps for InvoiceMessage_AttachmentType. +// Enum value maps for LinkPreviewMetadata_SocialMediaPostType. var ( - InvoiceMessage_AttachmentType_name = map[int32]string{ - 0: "IMAGE", - 1: "PDF", - } - InvoiceMessage_AttachmentType_value = map[string]int32{ - "IMAGE": 0, - "PDF": 1, + LinkPreviewMetadata_SocialMediaPostType_name = map[int32]string{ + 0: "NONE", + 1: "REEL", + 2: "LIVE_VIDEO", + 3: "LONG_VIDEO", + 4: "SINGLE_IMAGE", + 5: "CAROUSEL", + } + LinkPreviewMetadata_SocialMediaPostType_value = map[string]int32{ + "NONE": 0, + "REEL": 1, + "LIVE_VIDEO": 2, + "LONG_VIDEO": 3, + "SINGLE_IMAGE": 4, + "CAROUSEL": 5, } ) -func (x InvoiceMessage_AttachmentType) Enum() *InvoiceMessage_AttachmentType { - p := new(InvoiceMessage_AttachmentType) +func (x LinkPreviewMetadata_SocialMediaPostType) Enum() *LinkPreviewMetadata_SocialMediaPostType { + p := new(LinkPreviewMetadata_SocialMediaPostType) *p = x return p } -func (x InvoiceMessage_AttachmentType) String() string { +func (x LinkPreviewMetadata_SocialMediaPostType) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } -func (InvoiceMessage_AttachmentType) Descriptor() protoreflect.EnumDescriptor { - return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[38].Descriptor() +func (LinkPreviewMetadata_SocialMediaPostType) Descriptor() protoreflect.EnumDescriptor { + return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[44].Descriptor() } -func (InvoiceMessage_AttachmentType) Type() protoreflect.EnumType { - return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[38] +func (LinkPreviewMetadata_SocialMediaPostType) Type() protoreflect.EnumType { + return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[44] } -func (x InvoiceMessage_AttachmentType) Number() protoreflect.EnumNumber { +func (x LinkPreviewMetadata_SocialMediaPostType) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Do not use. -func (x *InvoiceMessage_AttachmentType) UnmarshalJSON(b []byte) error { +func (x *LinkPreviewMetadata_SocialMediaPostType) UnmarshalJSON(b []byte) error { num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) if err != nil { return err } - *x = InvoiceMessage_AttachmentType(num) + *x = LinkPreviewMetadata_SocialMediaPostType(num) return nil } -// Deprecated: Use InvoiceMessage_AttachmentType.Descriptor instead. -func (InvoiceMessage_AttachmentType) EnumDescriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{26, 0} +// Deprecated: Use LinkPreviewMetadata_SocialMediaPostType.Descriptor instead. +func (LinkPreviewMetadata_SocialMediaPostType) EnumDescriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{28, 0} } -type ImageMessage_ImageSourceType int32 +type PaymentLinkMetadata_PaymentLinkHeader_PaymentLinkHeaderType int32 const ( - ImageMessage_USER_IMAGE ImageMessage_ImageSourceType = 0 - ImageMessage_AI_GENERATED ImageMessage_ImageSourceType = 1 - ImageMessage_AI_MODIFIED ImageMessage_ImageSourceType = 2 + PaymentLinkMetadata_PaymentLinkHeader_LINK_PREVIEW PaymentLinkMetadata_PaymentLinkHeader_PaymentLinkHeaderType = 0 + PaymentLinkMetadata_PaymentLinkHeader_ORDER PaymentLinkMetadata_PaymentLinkHeader_PaymentLinkHeaderType = 1 ) -// Enum value maps for ImageMessage_ImageSourceType. +// Enum value maps for PaymentLinkMetadata_PaymentLinkHeader_PaymentLinkHeaderType. var ( - ImageMessage_ImageSourceType_name = map[int32]string{ - 0: "USER_IMAGE", - 1: "AI_GENERATED", - 2: "AI_MODIFIED", + PaymentLinkMetadata_PaymentLinkHeader_PaymentLinkHeaderType_name = map[int32]string{ + 0: "LINK_PREVIEW", + 1: "ORDER", } - ImageMessage_ImageSourceType_value = map[string]int32{ - "USER_IMAGE": 0, - "AI_GENERATED": 1, - "AI_MODIFIED": 2, + PaymentLinkMetadata_PaymentLinkHeader_PaymentLinkHeaderType_value = map[string]int32{ + "LINK_PREVIEW": 0, + "ORDER": 1, } ) -func (x ImageMessage_ImageSourceType) Enum() *ImageMessage_ImageSourceType { - p := new(ImageMessage_ImageSourceType) +func (x PaymentLinkMetadata_PaymentLinkHeader_PaymentLinkHeaderType) Enum() *PaymentLinkMetadata_PaymentLinkHeader_PaymentLinkHeaderType { + p := new(PaymentLinkMetadata_PaymentLinkHeader_PaymentLinkHeaderType) *p = x return p } -func (x ImageMessage_ImageSourceType) String() string { +func (x PaymentLinkMetadata_PaymentLinkHeader_PaymentLinkHeaderType) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } -func (ImageMessage_ImageSourceType) Descriptor() protoreflect.EnumDescriptor { - return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[39].Descriptor() +func (PaymentLinkMetadata_PaymentLinkHeader_PaymentLinkHeaderType) Descriptor() protoreflect.EnumDescriptor { + return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[45].Descriptor() } -func (ImageMessage_ImageSourceType) Type() protoreflect.EnumType { - return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[39] +func (PaymentLinkMetadata_PaymentLinkHeader_PaymentLinkHeaderType) Type() protoreflect.EnumType { + return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[45] } -func (x ImageMessage_ImageSourceType) Number() protoreflect.EnumNumber { +func (x PaymentLinkMetadata_PaymentLinkHeader_PaymentLinkHeaderType) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Do not use. -func (x *ImageMessage_ImageSourceType) UnmarshalJSON(b []byte) error { +func (x *PaymentLinkMetadata_PaymentLinkHeader_PaymentLinkHeaderType) UnmarshalJSON(b []byte) error { num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) if err != nil { return err } - *x = ImageMessage_ImageSourceType(num) + *x = PaymentLinkMetadata_PaymentLinkHeader_PaymentLinkHeaderType(num) return nil } -// Deprecated: Use ImageMessage_ImageSourceType.Descriptor instead. -func (ImageMessage_ImageSourceType) EnumDescriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{27, 0} +// Deprecated: Use PaymentLinkMetadata_PaymentLinkHeader_PaymentLinkHeaderType.Descriptor instead. +func (PaymentLinkMetadata_PaymentLinkHeader_PaymentLinkHeaderType) EnumDescriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{29, 0, 0} } -type ContextInfo_ForwardedNewsletterMessageInfo_ContentType int32 +type StatusNotificationMessage_StatusNotificationType int32 const ( - ContextInfo_ForwardedNewsletterMessageInfo_UPDATE ContextInfo_ForwardedNewsletterMessageInfo_ContentType = 1 - ContextInfo_ForwardedNewsletterMessageInfo_UPDATE_CARD ContextInfo_ForwardedNewsletterMessageInfo_ContentType = 2 - ContextInfo_ForwardedNewsletterMessageInfo_LINK_CARD ContextInfo_ForwardedNewsletterMessageInfo_ContentType = 3 + StatusNotificationMessage_UNKNOWN StatusNotificationMessage_StatusNotificationType = 0 + StatusNotificationMessage_STATUS_ADD_YOURS StatusNotificationMessage_StatusNotificationType = 1 + StatusNotificationMessage_STATUS_RESHARE StatusNotificationMessage_StatusNotificationType = 2 + StatusNotificationMessage_STATUS_QUESTION_ANSWER_RESHARE StatusNotificationMessage_StatusNotificationType = 3 ) -// Enum value maps for ContextInfo_ForwardedNewsletterMessageInfo_ContentType. +// Enum value maps for StatusNotificationMessage_StatusNotificationType. var ( - ContextInfo_ForwardedNewsletterMessageInfo_ContentType_name = map[int32]string{ - 1: "UPDATE", - 2: "UPDATE_CARD", - 3: "LINK_CARD", + StatusNotificationMessage_StatusNotificationType_name = map[int32]string{ + 0: "UNKNOWN", + 1: "STATUS_ADD_YOURS", + 2: "STATUS_RESHARE", + 3: "STATUS_QUESTION_ANSWER_RESHARE", } - ContextInfo_ForwardedNewsletterMessageInfo_ContentType_value = map[string]int32{ - "UPDATE": 1, - "UPDATE_CARD": 2, - "LINK_CARD": 3, + StatusNotificationMessage_StatusNotificationType_value = map[string]int32{ + "UNKNOWN": 0, + "STATUS_ADD_YOURS": 1, + "STATUS_RESHARE": 2, + "STATUS_QUESTION_ANSWER_RESHARE": 3, } ) -func (x ContextInfo_ForwardedNewsletterMessageInfo_ContentType) Enum() *ContextInfo_ForwardedNewsletterMessageInfo_ContentType { - p := new(ContextInfo_ForwardedNewsletterMessageInfo_ContentType) +func (x StatusNotificationMessage_StatusNotificationType) Enum() *StatusNotificationMessage_StatusNotificationType { + p := new(StatusNotificationMessage_StatusNotificationType) *p = x return p } -func (x ContextInfo_ForwardedNewsletterMessageInfo_ContentType) String() string { +func (x StatusNotificationMessage_StatusNotificationType) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } -func (ContextInfo_ForwardedNewsletterMessageInfo_ContentType) Descriptor() protoreflect.EnumDescriptor { - return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[40].Descriptor() +func (StatusNotificationMessage_StatusNotificationType) Descriptor() protoreflect.EnumDescriptor { + return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[46].Descriptor() } -func (ContextInfo_ForwardedNewsletterMessageInfo_ContentType) Type() protoreflect.EnumType { - return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[40] +func (StatusNotificationMessage_StatusNotificationType) Type() protoreflect.EnumType { + return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[46] } -func (x ContextInfo_ForwardedNewsletterMessageInfo_ContentType) Number() protoreflect.EnumNumber { +func (x StatusNotificationMessage_StatusNotificationType) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Do not use. -func (x *ContextInfo_ForwardedNewsletterMessageInfo_ContentType) UnmarshalJSON(b []byte) error { +func (x *StatusNotificationMessage_StatusNotificationType) UnmarshalJSON(b []byte) error { num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) if err != nil { return err } - *x = ContextInfo_ForwardedNewsletterMessageInfo_ContentType(num) + *x = StatusNotificationMessage_StatusNotificationType(num) return nil } -// Deprecated: Use ContextInfo_ForwardedNewsletterMessageInfo_ContentType.Descriptor instead. -func (ContextInfo_ForwardedNewsletterMessageInfo_ContentType) EnumDescriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{28, 0, 0} +// Deprecated: Use StatusNotificationMessage_StatusNotificationType.Descriptor instead. +func (StatusNotificationMessage_StatusNotificationType) EnumDescriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{30, 0} } -type ContextInfo_ExternalAdReplyInfo_MediaType int32 +type InvoiceMessage_AttachmentType int32 const ( - ContextInfo_ExternalAdReplyInfo_NONE ContextInfo_ExternalAdReplyInfo_MediaType = 0 - ContextInfo_ExternalAdReplyInfo_IMAGE ContextInfo_ExternalAdReplyInfo_MediaType = 1 - ContextInfo_ExternalAdReplyInfo_VIDEO ContextInfo_ExternalAdReplyInfo_MediaType = 2 + InvoiceMessage_IMAGE InvoiceMessage_AttachmentType = 0 + InvoiceMessage_PDF InvoiceMessage_AttachmentType = 1 ) -// Enum value maps for ContextInfo_ExternalAdReplyInfo_MediaType. +// Enum value maps for InvoiceMessage_AttachmentType. var ( - ContextInfo_ExternalAdReplyInfo_MediaType_name = map[int32]string{ - 0: "NONE", - 1: "IMAGE", - 2: "VIDEO", + InvoiceMessage_AttachmentType_name = map[int32]string{ + 0: "IMAGE", + 1: "PDF", } - ContextInfo_ExternalAdReplyInfo_MediaType_value = map[string]int32{ - "NONE": 0, - "IMAGE": 1, - "VIDEO": 2, + InvoiceMessage_AttachmentType_value = map[string]int32{ + "IMAGE": 0, + "PDF": 1, } ) -func (x ContextInfo_ExternalAdReplyInfo_MediaType) Enum() *ContextInfo_ExternalAdReplyInfo_MediaType { - p := new(ContextInfo_ExternalAdReplyInfo_MediaType) +func (x InvoiceMessage_AttachmentType) Enum() *InvoiceMessage_AttachmentType { + p := new(InvoiceMessage_AttachmentType) *p = x return p } -func (x ContextInfo_ExternalAdReplyInfo_MediaType) String() string { +func (x InvoiceMessage_AttachmentType) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } -func (ContextInfo_ExternalAdReplyInfo_MediaType) Descriptor() protoreflect.EnumDescriptor { - return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[41].Descriptor() +func (InvoiceMessage_AttachmentType) Descriptor() protoreflect.EnumDescriptor { + return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[47].Descriptor() } -func (ContextInfo_ExternalAdReplyInfo_MediaType) Type() protoreflect.EnumType { - return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[41] +func (InvoiceMessage_AttachmentType) Type() protoreflect.EnumType { + return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[47] } -func (x ContextInfo_ExternalAdReplyInfo_MediaType) Number() protoreflect.EnumNumber { +func (x InvoiceMessage_AttachmentType) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Do not use. -func (x *ContextInfo_ExternalAdReplyInfo_MediaType) UnmarshalJSON(b []byte) error { +func (x *InvoiceMessage_AttachmentType) UnmarshalJSON(b []byte) error { num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) if err != nil { return err } - *x = ContextInfo_ExternalAdReplyInfo_MediaType(num) + *x = InvoiceMessage_AttachmentType(num) return nil } -// Deprecated: Use ContextInfo_ExternalAdReplyInfo_MediaType.Descriptor instead. -func (ContextInfo_ExternalAdReplyInfo_MediaType) EnumDescriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{28, 1, 0} -} - -type ContextInfo_AdReplyInfo_MediaType int32 +// Deprecated: Use InvoiceMessage_AttachmentType.Descriptor instead. +func (InvoiceMessage_AttachmentType) EnumDescriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{31, 0} +} + +type ImageMessage_ImageSourceType int32 const ( - ContextInfo_AdReplyInfo_NONE ContextInfo_AdReplyInfo_MediaType = 0 - ContextInfo_AdReplyInfo_IMAGE ContextInfo_AdReplyInfo_MediaType = 1 - ContextInfo_AdReplyInfo_VIDEO ContextInfo_AdReplyInfo_MediaType = 2 + ImageMessage_USER_IMAGE ImageMessage_ImageSourceType = 0 + ImageMessage_AI_GENERATED ImageMessage_ImageSourceType = 1 + ImageMessage_AI_MODIFIED ImageMessage_ImageSourceType = 2 + ImageMessage_RASTERIZED_TEXT_STATUS ImageMessage_ImageSourceType = 3 ) -// Enum value maps for ContextInfo_AdReplyInfo_MediaType. +// Enum value maps for ImageMessage_ImageSourceType. var ( - ContextInfo_AdReplyInfo_MediaType_name = map[int32]string{ - 0: "NONE", - 1: "IMAGE", - 2: "VIDEO", + ImageMessage_ImageSourceType_name = map[int32]string{ + 0: "USER_IMAGE", + 1: "AI_GENERATED", + 2: "AI_MODIFIED", + 3: "RASTERIZED_TEXT_STATUS", } - ContextInfo_AdReplyInfo_MediaType_value = map[string]int32{ - "NONE": 0, - "IMAGE": 1, - "VIDEO": 2, + ImageMessage_ImageSourceType_value = map[string]int32{ + "USER_IMAGE": 0, + "AI_GENERATED": 1, + "AI_MODIFIED": 2, + "RASTERIZED_TEXT_STATUS": 3, } ) -func (x ContextInfo_AdReplyInfo_MediaType) Enum() *ContextInfo_AdReplyInfo_MediaType { - p := new(ContextInfo_AdReplyInfo_MediaType) +func (x ImageMessage_ImageSourceType) Enum() *ImageMessage_ImageSourceType { + p := new(ImageMessage_ImageSourceType) *p = x return p } -func (x ContextInfo_AdReplyInfo_MediaType) String() string { +func (x ImageMessage_ImageSourceType) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } -func (ContextInfo_AdReplyInfo_MediaType) Descriptor() protoreflect.EnumDescriptor { - return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[42].Descriptor() +func (ImageMessage_ImageSourceType) Descriptor() protoreflect.EnumDescriptor { + return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[48].Descriptor() } -func (ContextInfo_AdReplyInfo_MediaType) Type() protoreflect.EnumType { - return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[42] +func (ImageMessage_ImageSourceType) Type() protoreflect.EnumType { + return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[48] } -func (x ContextInfo_AdReplyInfo_MediaType) Number() protoreflect.EnumNumber { +func (x ImageMessage_ImageSourceType) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Do not use. -func (x *ContextInfo_AdReplyInfo_MediaType) UnmarshalJSON(b []byte) error { +func (x *ImageMessage_ImageSourceType) UnmarshalJSON(b []byte) error { num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) if err != nil { return err } - *x = ContextInfo_AdReplyInfo_MediaType(num) + *x = ImageMessage_ImageSourceType(num) return nil } -// Deprecated: Use ContextInfo_AdReplyInfo_MediaType.Descriptor instead. -func (ContextInfo_AdReplyInfo_MediaType) EnumDescriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{28, 2, 0} +// Deprecated: Use ImageMessage_ImageSourceType.Descriptor instead. +func (ImageMessage_ImageSourceType) EnumDescriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{32, 0} } -type BotPluginMetadata_PluginType int32 +type ContextInfo_QuotedType int32 const ( - BotPluginMetadata_REELS BotPluginMetadata_PluginType = 1 - BotPluginMetadata_SEARCH BotPluginMetadata_PluginType = 2 + ContextInfo_EXPLICIT ContextInfo_QuotedType = 0 + ContextInfo_AUTO ContextInfo_QuotedType = 1 ) -// Enum value maps for BotPluginMetadata_PluginType. +// Enum value maps for ContextInfo_QuotedType. var ( - BotPluginMetadata_PluginType_name = map[int32]string{ - 1: "REELS", - 2: "SEARCH", + ContextInfo_QuotedType_name = map[int32]string{ + 0: "EXPLICIT", + 1: "AUTO", } - BotPluginMetadata_PluginType_value = map[string]int32{ - "REELS": 1, - "SEARCH": 2, + ContextInfo_QuotedType_value = map[string]int32{ + "EXPLICIT": 0, + "AUTO": 1, } ) -func (x BotPluginMetadata_PluginType) Enum() *BotPluginMetadata_PluginType { - p := new(BotPluginMetadata_PluginType) +func (x ContextInfo_QuotedType) Enum() *ContextInfo_QuotedType { + p := new(ContextInfo_QuotedType) *p = x return p } -func (x BotPluginMetadata_PluginType) String() string { +func (x ContextInfo_QuotedType) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } -func (BotPluginMetadata_PluginType) Descriptor() protoreflect.EnumDescriptor { - return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[43].Descriptor() +func (ContextInfo_QuotedType) Descriptor() protoreflect.EnumDescriptor { + return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[49].Descriptor() } -func (BotPluginMetadata_PluginType) Type() protoreflect.EnumType { - return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[43] +func (ContextInfo_QuotedType) Type() protoreflect.EnumType { + return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[49] } -func (x BotPluginMetadata_PluginType) Number() protoreflect.EnumNumber { +func (x ContextInfo_QuotedType) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Do not use. -func (x *BotPluginMetadata_PluginType) UnmarshalJSON(b []byte) error { +func (x *ContextInfo_QuotedType) UnmarshalJSON(b []byte) error { num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) if err != nil { return err } - *x = BotPluginMetadata_PluginType(num) + *x = ContextInfo_QuotedType(num) return nil } -// Deprecated: Use BotPluginMetadata_PluginType.Descriptor instead. -func (BotPluginMetadata_PluginType) EnumDescriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{29, 0} +// Deprecated: Use ContextInfo_QuotedType.Descriptor instead. +func (ContextInfo_QuotedType) EnumDescriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{33, 0} } -type BotPluginMetadata_SearchProvider int32 +type ContextInfo_ForwardOrigin int32 const ( - BotPluginMetadata_BING BotPluginMetadata_SearchProvider = 1 - BotPluginMetadata_GOOGLE BotPluginMetadata_SearchProvider = 2 + ContextInfo_UNKNOWN ContextInfo_ForwardOrigin = 0 + ContextInfo_CHAT ContextInfo_ForwardOrigin = 1 + ContextInfo_STATUS ContextInfo_ForwardOrigin = 2 + ContextInfo_CHANNELS ContextInfo_ForwardOrigin = 3 + ContextInfo_META_AI ContextInfo_ForwardOrigin = 4 + ContextInfo_UGC ContextInfo_ForwardOrigin = 5 ) -// Enum value maps for BotPluginMetadata_SearchProvider. +// Enum value maps for ContextInfo_ForwardOrigin. var ( - BotPluginMetadata_SearchProvider_name = map[int32]string{ - 1: "BING", - 2: "GOOGLE", + ContextInfo_ForwardOrigin_name = map[int32]string{ + 0: "UNKNOWN", + 1: "CHAT", + 2: "STATUS", + 3: "CHANNELS", + 4: "META_AI", + 5: "UGC", } - BotPluginMetadata_SearchProvider_value = map[string]int32{ - "BING": 1, - "GOOGLE": 2, + ContextInfo_ForwardOrigin_value = map[string]int32{ + "UNKNOWN": 0, + "CHAT": 1, + "STATUS": 2, + "CHANNELS": 3, + "META_AI": 4, + "UGC": 5, } ) -func (x BotPluginMetadata_SearchProvider) Enum() *BotPluginMetadata_SearchProvider { - p := new(BotPluginMetadata_SearchProvider) +func (x ContextInfo_ForwardOrigin) Enum() *ContextInfo_ForwardOrigin { + p := new(ContextInfo_ForwardOrigin) *p = x return p } -func (x BotPluginMetadata_SearchProvider) String() string { +func (x ContextInfo_ForwardOrigin) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } -func (BotPluginMetadata_SearchProvider) Descriptor() protoreflect.EnumDescriptor { - return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[44].Descriptor() +func (ContextInfo_ForwardOrigin) Descriptor() protoreflect.EnumDescriptor { + return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[50].Descriptor() } -func (BotPluginMetadata_SearchProvider) Type() protoreflect.EnumType { - return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[44] +func (ContextInfo_ForwardOrigin) Type() protoreflect.EnumType { + return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[50] } -func (x BotPluginMetadata_SearchProvider) Number() protoreflect.EnumNumber { +func (x ContextInfo_ForwardOrigin) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Do not use. -func (x *BotPluginMetadata_SearchProvider) UnmarshalJSON(b []byte) error { +func (x *ContextInfo_ForwardOrigin) UnmarshalJSON(b []byte) error { num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) if err != nil { return err } - *x = BotPluginMetadata_SearchProvider(num) + *x = ContextInfo_ForwardOrigin(num) return nil } -// Deprecated: Use BotPluginMetadata_SearchProvider.Descriptor instead. -func (BotPluginMetadata_SearchProvider) EnumDescriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{29, 1} +// Deprecated: Use ContextInfo_ForwardOrigin.Descriptor instead. +func (ContextInfo_ForwardOrigin) EnumDescriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{33, 1} } -type BotMediaMetadata_OrientationType int32 +type ContextInfo_StatusSourceType int32 const ( - BotMediaMetadata_CENTER BotMediaMetadata_OrientationType = 1 - BotMediaMetadata_LEFT BotMediaMetadata_OrientationType = 2 - BotMediaMetadata_RIGHT BotMediaMetadata_OrientationType = 3 + ContextInfo_IMAGE ContextInfo_StatusSourceType = 0 + ContextInfo_VIDEO ContextInfo_StatusSourceType = 1 + ContextInfo_GIF ContextInfo_StatusSourceType = 2 + ContextInfo_AUDIO ContextInfo_StatusSourceType = 3 + ContextInfo_TEXT ContextInfo_StatusSourceType = 4 + ContextInfo_MUSIC_STANDALONE ContextInfo_StatusSourceType = 5 ) -// Enum value maps for BotMediaMetadata_OrientationType. +// Enum value maps for ContextInfo_StatusSourceType. var ( - BotMediaMetadata_OrientationType_name = map[int32]string{ - 1: "CENTER", - 2: "LEFT", - 3: "RIGHT", - } - BotMediaMetadata_OrientationType_value = map[string]int32{ - "CENTER": 1, - "LEFT": 2, - "RIGHT": 3, + ContextInfo_StatusSourceType_name = map[int32]string{ + 0: "IMAGE", + 1: "VIDEO", + 2: "GIF", + 3: "AUDIO", + 4: "TEXT", + 5: "MUSIC_STANDALONE", + } + ContextInfo_StatusSourceType_value = map[string]int32{ + "IMAGE": 0, + "VIDEO": 1, + "GIF": 2, + "AUDIO": 3, + "TEXT": 4, + "MUSIC_STANDALONE": 5, } ) -func (x BotMediaMetadata_OrientationType) Enum() *BotMediaMetadata_OrientationType { - p := new(BotMediaMetadata_OrientationType) +func (x ContextInfo_StatusSourceType) Enum() *ContextInfo_StatusSourceType { + p := new(ContextInfo_StatusSourceType) *p = x return p } -func (x BotMediaMetadata_OrientationType) String() string { +func (x ContextInfo_StatusSourceType) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } -func (BotMediaMetadata_OrientationType) Descriptor() protoreflect.EnumDescriptor { - return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[45].Descriptor() +func (ContextInfo_StatusSourceType) Descriptor() protoreflect.EnumDescriptor { + return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[51].Descriptor() } -func (BotMediaMetadata_OrientationType) Type() protoreflect.EnumType { - return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[45] +func (ContextInfo_StatusSourceType) Type() protoreflect.EnumType { + return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[51] } -func (x BotMediaMetadata_OrientationType) Number() protoreflect.EnumNumber { +func (x ContextInfo_StatusSourceType) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Do not use. -func (x *BotMediaMetadata_OrientationType) UnmarshalJSON(b []byte) error { +func (x *ContextInfo_StatusSourceType) UnmarshalJSON(b []byte) error { num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) if err != nil { return err } - *x = BotMediaMetadata_OrientationType(num) + *x = ContextInfo_StatusSourceType(num) return nil } -// Deprecated: Use BotMediaMetadata_OrientationType.Descriptor instead. -func (BotMediaMetadata_OrientationType) EnumDescriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{30, 0} +// Deprecated: Use ContextInfo_StatusSourceType.Descriptor instead. +func (ContextInfo_StatusSourceType) EnumDescriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{33, 2} } -type BotReminderMetadata_ReminderFrequency int32 +type ContextInfo_PairedMediaType int32 const ( - BotReminderMetadata_ONCE BotReminderMetadata_ReminderFrequency = 1 - BotReminderMetadata_DAILY BotReminderMetadata_ReminderFrequency = 2 - BotReminderMetadata_WEEKLY BotReminderMetadata_ReminderFrequency = 3 - BotReminderMetadata_BIWEEKLY BotReminderMetadata_ReminderFrequency = 4 - BotReminderMetadata_MONTHLY BotReminderMetadata_ReminderFrequency = 5 + ContextInfo_NOT_PAIRED_MEDIA ContextInfo_PairedMediaType = 0 + ContextInfo_SD_VIDEO_PARENT ContextInfo_PairedMediaType = 1 + ContextInfo_HD_VIDEO_CHILD ContextInfo_PairedMediaType = 2 + ContextInfo_SD_IMAGE_PARENT ContextInfo_PairedMediaType = 3 + ContextInfo_HD_IMAGE_CHILD ContextInfo_PairedMediaType = 4 + ContextInfo_MOTION_PHOTO_PARENT ContextInfo_PairedMediaType = 5 + ContextInfo_MOTION_PHOTO_CHILD ContextInfo_PairedMediaType = 6 + ContextInfo_HEVC_VIDEO_PARENT ContextInfo_PairedMediaType = 7 + ContextInfo_HEVC_VIDEO_CHILD ContextInfo_PairedMediaType = 8 ) -// Enum value maps for BotReminderMetadata_ReminderFrequency. +// Enum value maps for ContextInfo_PairedMediaType. var ( - BotReminderMetadata_ReminderFrequency_name = map[int32]string{ - 1: "ONCE", - 2: "DAILY", - 3: "WEEKLY", - 4: "BIWEEKLY", - 5: "MONTHLY", - } - BotReminderMetadata_ReminderFrequency_value = map[string]int32{ - "ONCE": 1, - "DAILY": 2, - "WEEKLY": 3, - "BIWEEKLY": 4, - "MONTHLY": 5, + ContextInfo_PairedMediaType_name = map[int32]string{ + 0: "NOT_PAIRED_MEDIA", + 1: "SD_VIDEO_PARENT", + 2: "HD_VIDEO_CHILD", + 3: "SD_IMAGE_PARENT", + 4: "HD_IMAGE_CHILD", + 5: "MOTION_PHOTO_PARENT", + 6: "MOTION_PHOTO_CHILD", + 7: "HEVC_VIDEO_PARENT", + 8: "HEVC_VIDEO_CHILD", + } + ContextInfo_PairedMediaType_value = map[string]int32{ + "NOT_PAIRED_MEDIA": 0, + "SD_VIDEO_PARENT": 1, + "HD_VIDEO_CHILD": 2, + "SD_IMAGE_PARENT": 3, + "HD_IMAGE_CHILD": 4, + "MOTION_PHOTO_PARENT": 5, + "MOTION_PHOTO_CHILD": 6, + "HEVC_VIDEO_PARENT": 7, + "HEVC_VIDEO_CHILD": 8, } ) -func (x BotReminderMetadata_ReminderFrequency) Enum() *BotReminderMetadata_ReminderFrequency { - p := new(BotReminderMetadata_ReminderFrequency) +func (x ContextInfo_PairedMediaType) Enum() *ContextInfo_PairedMediaType { + p := new(ContextInfo_PairedMediaType) *p = x return p } -func (x BotReminderMetadata_ReminderFrequency) String() string { +func (x ContextInfo_PairedMediaType) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } -func (BotReminderMetadata_ReminderFrequency) Descriptor() protoreflect.EnumDescriptor { - return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[46].Descriptor() +func (ContextInfo_PairedMediaType) Descriptor() protoreflect.EnumDescriptor { + return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[52].Descriptor() } -func (BotReminderMetadata_ReminderFrequency) Type() protoreflect.EnumType { - return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[46] +func (ContextInfo_PairedMediaType) Type() protoreflect.EnumType { + return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[52] } -func (x BotReminderMetadata_ReminderFrequency) Number() protoreflect.EnumNumber { +func (x ContextInfo_PairedMediaType) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Do not use. -func (x *BotReminderMetadata_ReminderFrequency) UnmarshalJSON(b []byte) error { +func (x *ContextInfo_PairedMediaType) UnmarshalJSON(b []byte) error { num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) if err != nil { return err } - *x = BotReminderMetadata_ReminderFrequency(num) + *x = ContextInfo_PairedMediaType(num) return nil } -// Deprecated: Use BotReminderMetadata_ReminderFrequency.Descriptor instead. -func (BotReminderMetadata_ReminderFrequency) EnumDescriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{31, 0} +// Deprecated: Use ContextInfo_PairedMediaType.Descriptor instead. +func (ContextInfo_PairedMediaType) EnumDescriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{33, 3} } -type BotReminderMetadata_ReminderAction int32 +type ContextInfo_StatusAttributionType int32 const ( - BotReminderMetadata_NOTIFY BotReminderMetadata_ReminderAction = 1 - BotReminderMetadata_CREATE BotReminderMetadata_ReminderAction = 2 - BotReminderMetadata_DELETE BotReminderMetadata_ReminderAction = 3 - BotReminderMetadata_UPDATE BotReminderMetadata_ReminderAction = 4 + ContextInfo_NONE ContextInfo_StatusAttributionType = 0 + ContextInfo_RESHARED_FROM_MENTION ContextInfo_StatusAttributionType = 1 + ContextInfo_RESHARED_FROM_POST ContextInfo_StatusAttributionType = 2 + ContextInfo_RESHARED_FROM_POST_MANY_TIMES ContextInfo_StatusAttributionType = 3 + ContextInfo_FORWARDED_FROM_STATUS ContextInfo_StatusAttributionType = 4 ) -// Enum value maps for BotReminderMetadata_ReminderAction. +// Enum value maps for ContextInfo_StatusAttributionType. var ( - BotReminderMetadata_ReminderAction_name = map[int32]string{ - 1: "NOTIFY", - 2: "CREATE", - 3: "DELETE", - 4: "UPDATE", - } - BotReminderMetadata_ReminderAction_value = map[string]int32{ - "NOTIFY": 1, - "CREATE": 2, - "DELETE": 3, - "UPDATE": 4, + ContextInfo_StatusAttributionType_name = map[int32]string{ + 0: "NONE", + 1: "RESHARED_FROM_MENTION", + 2: "RESHARED_FROM_POST", + 3: "RESHARED_FROM_POST_MANY_TIMES", + 4: "FORWARDED_FROM_STATUS", + } + ContextInfo_StatusAttributionType_value = map[string]int32{ + "NONE": 0, + "RESHARED_FROM_MENTION": 1, + "RESHARED_FROM_POST": 2, + "RESHARED_FROM_POST_MANY_TIMES": 3, + "FORWARDED_FROM_STATUS": 4, } ) -func (x BotReminderMetadata_ReminderAction) Enum() *BotReminderMetadata_ReminderAction { - p := new(BotReminderMetadata_ReminderAction) +func (x ContextInfo_StatusAttributionType) Enum() *ContextInfo_StatusAttributionType { + p := new(ContextInfo_StatusAttributionType) *p = x return p } -func (x BotReminderMetadata_ReminderAction) String() string { +func (x ContextInfo_StatusAttributionType) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } -func (BotReminderMetadata_ReminderAction) Descriptor() protoreflect.EnumDescriptor { - return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[47].Descriptor() +func (ContextInfo_StatusAttributionType) Descriptor() protoreflect.EnumDescriptor { + return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[53].Descriptor() } -func (BotReminderMetadata_ReminderAction) Type() protoreflect.EnumType { - return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[47] +func (ContextInfo_StatusAttributionType) Type() protoreflect.EnumType { + return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[53] } -func (x BotReminderMetadata_ReminderAction) Number() protoreflect.EnumNumber { +func (x ContextInfo_StatusAttributionType) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Do not use. -func (x *BotReminderMetadata_ReminderAction) UnmarshalJSON(b []byte) error { +func (x *ContextInfo_StatusAttributionType) UnmarshalJSON(b []byte) error { num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) if err != nil { return err } - *x = BotReminderMetadata_ReminderAction(num) + *x = ContextInfo_StatusAttributionType(num) return nil } -// Deprecated: Use BotReminderMetadata_ReminderAction.Descriptor instead. -func (BotReminderMetadata_ReminderAction) EnumDescriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{31, 1} +// Deprecated: Use ContextInfo_StatusAttributionType.Descriptor instead. +func (ContextInfo_StatusAttributionType) EnumDescriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{33, 4} } -type BotModelMetadata_PremiumModelStatus int32 +type ContextInfo_StatusAudienceMetadata_AudienceType int32 const ( - BotModelMetadata_AVAILABLE BotModelMetadata_PremiumModelStatus = 1 - BotModelMetadata_QUOTA_EXCEED_LIMIT BotModelMetadata_PremiumModelStatus = 2 + ContextInfo_StatusAudienceMetadata_UNKNOWN ContextInfo_StatusAudienceMetadata_AudienceType = 0 + ContextInfo_StatusAudienceMetadata_CLOSE_FRIENDS ContextInfo_StatusAudienceMetadata_AudienceType = 1 ) -// Enum value maps for BotModelMetadata_PremiumModelStatus. +// Enum value maps for ContextInfo_StatusAudienceMetadata_AudienceType. var ( - BotModelMetadata_PremiumModelStatus_name = map[int32]string{ - 1: "AVAILABLE", - 2: "QUOTA_EXCEED_LIMIT", + ContextInfo_StatusAudienceMetadata_AudienceType_name = map[int32]string{ + 0: "UNKNOWN", + 1: "CLOSE_FRIENDS", } - BotModelMetadata_PremiumModelStatus_value = map[string]int32{ - "AVAILABLE": 1, - "QUOTA_EXCEED_LIMIT": 2, + ContextInfo_StatusAudienceMetadata_AudienceType_value = map[string]int32{ + "UNKNOWN": 0, + "CLOSE_FRIENDS": 1, } ) -func (x BotModelMetadata_PremiumModelStatus) Enum() *BotModelMetadata_PremiumModelStatus { - p := new(BotModelMetadata_PremiumModelStatus) +func (x ContextInfo_StatusAudienceMetadata_AudienceType) Enum() *ContextInfo_StatusAudienceMetadata_AudienceType { + p := new(ContextInfo_StatusAudienceMetadata_AudienceType) *p = x return p } -func (x BotModelMetadata_PremiumModelStatus) String() string { +func (x ContextInfo_StatusAudienceMetadata_AudienceType) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } -func (BotModelMetadata_PremiumModelStatus) Descriptor() protoreflect.EnumDescriptor { - return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[48].Descriptor() +func (ContextInfo_StatusAudienceMetadata_AudienceType) Descriptor() protoreflect.EnumDescriptor { + return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[54].Descriptor() } -func (BotModelMetadata_PremiumModelStatus) Type() protoreflect.EnumType { - return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[48] +func (ContextInfo_StatusAudienceMetadata_AudienceType) Type() protoreflect.EnumType { + return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[54] } -func (x BotModelMetadata_PremiumModelStatus) Number() protoreflect.EnumNumber { +func (x ContextInfo_StatusAudienceMetadata_AudienceType) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Do not use. -func (x *BotModelMetadata_PremiumModelStatus) UnmarshalJSON(b []byte) error { +func (x *ContextInfo_StatusAudienceMetadata_AudienceType) UnmarshalJSON(b []byte) error { num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) if err != nil { return err } - *x = BotModelMetadata_PremiumModelStatus(num) + *x = ContextInfo_StatusAudienceMetadata_AudienceType(num) return nil } -// Deprecated: Use BotModelMetadata_PremiumModelStatus.Descriptor instead. -func (BotModelMetadata_PremiumModelStatus) EnumDescriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{32, 0} +// Deprecated: Use ContextInfo_StatusAudienceMetadata_AudienceType.Descriptor instead. +func (ContextInfo_StatusAudienceMetadata_AudienceType) EnumDescriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{33, 0, 0} } -type BotModelMetadata_ModelType int32 +type ContextInfo_DataSharingContext_DataSharingFlags int32 const ( - BotModelMetadata_LLAMA_PROD BotModelMetadata_ModelType = 1 - BotModelMetadata_LLAMA_PROD_PREMIUM BotModelMetadata_ModelType = 2 + ContextInfo_DataSharingContext_SHOW_MM_DISCLOSURE_ON_CLICK ContextInfo_DataSharingContext_DataSharingFlags = 1 + ContextInfo_DataSharingContext_SHOW_MM_DISCLOSURE_ON_READ ContextInfo_DataSharingContext_DataSharingFlags = 2 ) -// Enum value maps for BotModelMetadata_ModelType. +// Enum value maps for ContextInfo_DataSharingContext_DataSharingFlags. var ( - BotModelMetadata_ModelType_name = map[int32]string{ - 1: "LLAMA_PROD", - 2: "LLAMA_PROD_PREMIUM", + ContextInfo_DataSharingContext_DataSharingFlags_name = map[int32]string{ + 1: "SHOW_MM_DISCLOSURE_ON_CLICK", + 2: "SHOW_MM_DISCLOSURE_ON_READ", } - BotModelMetadata_ModelType_value = map[string]int32{ - "LLAMA_PROD": 1, - "LLAMA_PROD_PREMIUM": 2, + ContextInfo_DataSharingContext_DataSharingFlags_value = map[string]int32{ + "SHOW_MM_DISCLOSURE_ON_CLICK": 1, + "SHOW_MM_DISCLOSURE_ON_READ": 2, } ) -func (x BotModelMetadata_ModelType) Enum() *BotModelMetadata_ModelType { - p := new(BotModelMetadata_ModelType) +func (x ContextInfo_DataSharingContext_DataSharingFlags) Enum() *ContextInfo_DataSharingContext_DataSharingFlags { + p := new(ContextInfo_DataSharingContext_DataSharingFlags) *p = x return p } -func (x BotModelMetadata_ModelType) String() string { +func (x ContextInfo_DataSharingContext_DataSharingFlags) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } -func (BotModelMetadata_ModelType) Descriptor() protoreflect.EnumDescriptor { - return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[49].Descriptor() +func (ContextInfo_DataSharingContext_DataSharingFlags) Descriptor() protoreflect.EnumDescriptor { + return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[55].Descriptor() } -func (BotModelMetadata_ModelType) Type() protoreflect.EnumType { - return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[49] +func (ContextInfo_DataSharingContext_DataSharingFlags) Type() protoreflect.EnumType { + return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[55] } -func (x BotModelMetadata_ModelType) Number() protoreflect.EnumNumber { +func (x ContextInfo_DataSharingContext_DataSharingFlags) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Do not use. -func (x *BotModelMetadata_ModelType) UnmarshalJSON(b []byte) error { +func (x *ContextInfo_DataSharingContext_DataSharingFlags) UnmarshalJSON(b []byte) error { num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) if err != nil { return err } - *x = BotModelMetadata_ModelType(num) + *x = ContextInfo_DataSharingContext_DataSharingFlags(num) return nil } -// Deprecated: Use BotModelMetadata_ModelType.Descriptor instead. -func (BotModelMetadata_ModelType) EnumDescriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{32, 1} +// Deprecated: Use ContextInfo_DataSharingContext_DataSharingFlags.Descriptor instead. +func (ContextInfo_DataSharingContext_DataSharingFlags) EnumDescriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{33, 1, 0} } -type MessageAssociation_AssociationType int32 +type ContextInfo_ForwardedNewsletterMessageInfo_ContentType int32 const ( - MessageAssociation_UNKNOWN MessageAssociation_AssociationType = 0 - MessageAssociation_MEDIA_ALBUM MessageAssociation_AssociationType = 1 - MessageAssociation_BOT_PLUGIN MessageAssociation_AssociationType = 2 - MessageAssociation_EVENT_COVER_IMAGE MessageAssociation_AssociationType = 3 - MessageAssociation_STATUS_POLL MessageAssociation_AssociationType = 4 + ContextInfo_ForwardedNewsletterMessageInfo_UPDATE ContextInfo_ForwardedNewsletterMessageInfo_ContentType = 1 + ContextInfo_ForwardedNewsletterMessageInfo_UPDATE_CARD ContextInfo_ForwardedNewsletterMessageInfo_ContentType = 2 + ContextInfo_ForwardedNewsletterMessageInfo_LINK_CARD ContextInfo_ForwardedNewsletterMessageInfo_ContentType = 3 ) -// Enum value maps for MessageAssociation_AssociationType. +// Enum value maps for ContextInfo_ForwardedNewsletterMessageInfo_ContentType. var ( - MessageAssociation_AssociationType_name = map[int32]string{ - 0: "UNKNOWN", - 1: "MEDIA_ALBUM", - 2: "BOT_PLUGIN", - 3: "EVENT_COVER_IMAGE", - 4: "STATUS_POLL", + ContextInfo_ForwardedNewsletterMessageInfo_ContentType_name = map[int32]string{ + 1: "UPDATE", + 2: "UPDATE_CARD", + 3: "LINK_CARD", } - MessageAssociation_AssociationType_value = map[string]int32{ - "UNKNOWN": 0, - "MEDIA_ALBUM": 1, - "BOT_PLUGIN": 2, - "EVENT_COVER_IMAGE": 3, - "STATUS_POLL": 4, + ContextInfo_ForwardedNewsletterMessageInfo_ContentType_value = map[string]int32{ + "UPDATE": 1, + "UPDATE_CARD": 2, + "LINK_CARD": 3, } ) -func (x MessageAssociation_AssociationType) Enum() *MessageAssociation_AssociationType { - p := new(MessageAssociation_AssociationType) +func (x ContextInfo_ForwardedNewsletterMessageInfo_ContentType) Enum() *ContextInfo_ForwardedNewsletterMessageInfo_ContentType { + p := new(ContextInfo_ForwardedNewsletterMessageInfo_ContentType) *p = x return p } -func (x MessageAssociation_AssociationType) String() string { +func (x ContextInfo_ForwardedNewsletterMessageInfo_ContentType) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } -func (MessageAssociation_AssociationType) Descriptor() protoreflect.EnumDescriptor { - return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[50].Descriptor() +func (ContextInfo_ForwardedNewsletterMessageInfo_ContentType) Descriptor() protoreflect.EnumDescriptor { + return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[56].Descriptor() } -func (MessageAssociation_AssociationType) Type() protoreflect.EnumType { - return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[50] +func (ContextInfo_ForwardedNewsletterMessageInfo_ContentType) Type() protoreflect.EnumType { + return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[56] } -func (x MessageAssociation_AssociationType) Number() protoreflect.EnumNumber { +func (x ContextInfo_ForwardedNewsletterMessageInfo_ContentType) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Do not use. -func (x *MessageAssociation_AssociationType) UnmarshalJSON(b []byte) error { +func (x *ContextInfo_ForwardedNewsletterMessageInfo_ContentType) UnmarshalJSON(b []byte) error { num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) if err != nil { return err } - *x = MessageAssociation_AssociationType(num) + *x = ContextInfo_ForwardedNewsletterMessageInfo_ContentType(num) return nil } -// Deprecated: Use MessageAssociation_AssociationType.Descriptor instead. -func (MessageAssociation_AssociationType) EnumDescriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{33, 0} +// Deprecated: Use ContextInfo_ForwardedNewsletterMessageInfo_ContentType.Descriptor instead. +func (ContextInfo_ForwardedNewsletterMessageInfo_ContentType) EnumDescriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{33, 2, 0} } -type MessageContextInfo_MessageAddonExpiryType int32 +type ContextInfo_ExternalAdReplyInfo_AdType int32 const ( - MessageContextInfo_STATIC MessageContextInfo_MessageAddonExpiryType = 1 - MessageContextInfo_DEPENDENT_ON_PARENT MessageContextInfo_MessageAddonExpiryType = 2 + ContextInfo_ExternalAdReplyInfo_CTWA ContextInfo_ExternalAdReplyInfo_AdType = 0 + ContextInfo_ExternalAdReplyInfo_CAWC ContextInfo_ExternalAdReplyInfo_AdType = 1 ) -// Enum value maps for MessageContextInfo_MessageAddonExpiryType. +// Enum value maps for ContextInfo_ExternalAdReplyInfo_AdType. var ( - MessageContextInfo_MessageAddonExpiryType_name = map[int32]string{ - 1: "STATIC", - 2: "DEPENDENT_ON_PARENT", + ContextInfo_ExternalAdReplyInfo_AdType_name = map[int32]string{ + 0: "CTWA", + 1: "CAWC", } - MessageContextInfo_MessageAddonExpiryType_value = map[string]int32{ - "STATIC": 1, - "DEPENDENT_ON_PARENT": 2, + ContextInfo_ExternalAdReplyInfo_AdType_value = map[string]int32{ + "CTWA": 0, + "CAWC": 1, } ) -func (x MessageContextInfo_MessageAddonExpiryType) Enum() *MessageContextInfo_MessageAddonExpiryType { - p := new(MessageContextInfo_MessageAddonExpiryType) +func (x ContextInfo_ExternalAdReplyInfo_AdType) Enum() *ContextInfo_ExternalAdReplyInfo_AdType { + p := new(ContextInfo_ExternalAdReplyInfo_AdType) *p = x return p } -func (x MessageContextInfo_MessageAddonExpiryType) String() string { +func (x ContextInfo_ExternalAdReplyInfo_AdType) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } -func (MessageContextInfo_MessageAddonExpiryType) Descriptor() protoreflect.EnumDescriptor { - return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[51].Descriptor() +func (ContextInfo_ExternalAdReplyInfo_AdType) Descriptor() protoreflect.EnumDescriptor { + return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[57].Descriptor() } -func (MessageContextInfo_MessageAddonExpiryType) Type() protoreflect.EnumType { - return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[51] +func (ContextInfo_ExternalAdReplyInfo_AdType) Type() protoreflect.EnumType { + return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[57] } -func (x MessageContextInfo_MessageAddonExpiryType) Number() protoreflect.EnumNumber { +func (x ContextInfo_ExternalAdReplyInfo_AdType) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Do not use. -func (x *MessageContextInfo_MessageAddonExpiryType) UnmarshalJSON(b []byte) error { +func (x *ContextInfo_ExternalAdReplyInfo_AdType) UnmarshalJSON(b []byte) error { num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) if err != nil { return err } - *x = MessageContextInfo_MessageAddonExpiryType(num) + *x = ContextInfo_ExternalAdReplyInfo_AdType(num) return nil } -// Deprecated: Use MessageContextInfo_MessageAddonExpiryType.Descriptor instead. -func (MessageContextInfo_MessageAddonExpiryType) EnumDescriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{34, 0} +// Deprecated: Use ContextInfo_ExternalAdReplyInfo_AdType.Descriptor instead. +func (ContextInfo_ExternalAdReplyInfo_AdType) EnumDescriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{33, 3, 0} } -type HydratedTemplateButton_HydratedURLButton_WebviewPresentationType int32 +type ContextInfo_ExternalAdReplyInfo_MediaType int32 const ( - HydratedTemplateButton_HydratedURLButton_FULL HydratedTemplateButton_HydratedURLButton_WebviewPresentationType = 1 - HydratedTemplateButton_HydratedURLButton_TALL HydratedTemplateButton_HydratedURLButton_WebviewPresentationType = 2 - HydratedTemplateButton_HydratedURLButton_COMPACT HydratedTemplateButton_HydratedURLButton_WebviewPresentationType = 3 + ContextInfo_ExternalAdReplyInfo_NONE ContextInfo_ExternalAdReplyInfo_MediaType = 0 + ContextInfo_ExternalAdReplyInfo_IMAGE ContextInfo_ExternalAdReplyInfo_MediaType = 1 + ContextInfo_ExternalAdReplyInfo_VIDEO ContextInfo_ExternalAdReplyInfo_MediaType = 2 ) -// Enum value maps for HydratedTemplateButton_HydratedURLButton_WebviewPresentationType. +// Enum value maps for ContextInfo_ExternalAdReplyInfo_MediaType. var ( - HydratedTemplateButton_HydratedURLButton_WebviewPresentationType_name = map[int32]string{ - 1: "FULL", - 2: "TALL", - 3: "COMPACT", + ContextInfo_ExternalAdReplyInfo_MediaType_name = map[int32]string{ + 0: "NONE", + 1: "IMAGE", + 2: "VIDEO", } - HydratedTemplateButton_HydratedURLButton_WebviewPresentationType_value = map[string]int32{ - "FULL": 1, - "TALL": 2, - "COMPACT": 3, + ContextInfo_ExternalAdReplyInfo_MediaType_value = map[string]int32{ + "NONE": 0, + "IMAGE": 1, + "VIDEO": 2, } ) -func (x HydratedTemplateButton_HydratedURLButton_WebviewPresentationType) Enum() *HydratedTemplateButton_HydratedURLButton_WebviewPresentationType { - p := new(HydratedTemplateButton_HydratedURLButton_WebviewPresentationType) +func (x ContextInfo_ExternalAdReplyInfo_MediaType) Enum() *ContextInfo_ExternalAdReplyInfo_MediaType { + p := new(ContextInfo_ExternalAdReplyInfo_MediaType) *p = x return p } -func (x HydratedTemplateButton_HydratedURLButton_WebviewPresentationType) String() string { +func (x ContextInfo_ExternalAdReplyInfo_MediaType) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } -func (HydratedTemplateButton_HydratedURLButton_WebviewPresentationType) Descriptor() protoreflect.EnumDescriptor { - return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[52].Descriptor() +func (ContextInfo_ExternalAdReplyInfo_MediaType) Descriptor() protoreflect.EnumDescriptor { + return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[58].Descriptor() } -func (HydratedTemplateButton_HydratedURLButton_WebviewPresentationType) Type() protoreflect.EnumType { - return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[52] +func (ContextInfo_ExternalAdReplyInfo_MediaType) Type() protoreflect.EnumType { + return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[58] } -func (x HydratedTemplateButton_HydratedURLButton_WebviewPresentationType) Number() protoreflect.EnumNumber { +func (x ContextInfo_ExternalAdReplyInfo_MediaType) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Do not use. -func (x *HydratedTemplateButton_HydratedURLButton_WebviewPresentationType) UnmarshalJSON(b []byte) error { +func (x *ContextInfo_ExternalAdReplyInfo_MediaType) UnmarshalJSON(b []byte) error { num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) if err != nil { return err } - *x = HydratedTemplateButton_HydratedURLButton_WebviewPresentationType(num) + *x = ContextInfo_ExternalAdReplyInfo_MediaType(num) return nil } -// Deprecated: Use HydratedTemplateButton_HydratedURLButton_WebviewPresentationType.Descriptor instead. -func (HydratedTemplateButton_HydratedURLButton_WebviewPresentationType) EnumDescriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{35, 0, 0} +// Deprecated: Use ContextInfo_ExternalAdReplyInfo_MediaType.Descriptor instead. +func (ContextInfo_ExternalAdReplyInfo_MediaType) EnumDescriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{33, 3, 1} } -type PaymentBackground_Type int32 +type ContextInfo_AdReplyInfo_MediaType int32 const ( - PaymentBackground_UNKNOWN PaymentBackground_Type = 0 - PaymentBackground_DEFAULT PaymentBackground_Type = 1 + ContextInfo_AdReplyInfo_NONE ContextInfo_AdReplyInfo_MediaType = 0 + ContextInfo_AdReplyInfo_IMAGE ContextInfo_AdReplyInfo_MediaType = 1 + ContextInfo_AdReplyInfo_VIDEO ContextInfo_AdReplyInfo_MediaType = 2 ) -// Enum value maps for PaymentBackground_Type. +// Enum value maps for ContextInfo_AdReplyInfo_MediaType. var ( - PaymentBackground_Type_name = map[int32]string{ - 0: "UNKNOWN", - 1: "DEFAULT", + ContextInfo_AdReplyInfo_MediaType_name = map[int32]string{ + 0: "NONE", + 1: "IMAGE", + 2: "VIDEO", } - PaymentBackground_Type_value = map[string]int32{ - "UNKNOWN": 0, - "DEFAULT": 1, + ContextInfo_AdReplyInfo_MediaType_value = map[string]int32{ + "NONE": 0, + "IMAGE": 1, + "VIDEO": 2, } ) -func (x PaymentBackground_Type) Enum() *PaymentBackground_Type { - p := new(PaymentBackground_Type) +func (x ContextInfo_AdReplyInfo_MediaType) Enum() *ContextInfo_AdReplyInfo_MediaType { + p := new(ContextInfo_AdReplyInfo_MediaType) *p = x return p } -func (x PaymentBackground_Type) String() string { +func (x ContextInfo_AdReplyInfo_MediaType) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } -func (PaymentBackground_Type) Descriptor() protoreflect.EnumDescriptor { - return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[53].Descriptor() +func (ContextInfo_AdReplyInfo_MediaType) Descriptor() protoreflect.EnumDescriptor { + return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[59].Descriptor() } -func (PaymentBackground_Type) Type() protoreflect.EnumType { - return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[53] +func (ContextInfo_AdReplyInfo_MediaType) Type() protoreflect.EnumType { + return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[59] } -func (x PaymentBackground_Type) Number() protoreflect.EnumNumber { +func (x ContextInfo_AdReplyInfo_MediaType) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Do not use. -func (x *PaymentBackground_Type) UnmarshalJSON(b []byte) error { +func (x *ContextInfo_AdReplyInfo_MediaType) UnmarshalJSON(b []byte) error { num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) if err != nil { return err } - *x = PaymentBackground_Type(num) + *x = ContextInfo_AdReplyInfo_MediaType(num) return nil } -// Deprecated: Use PaymentBackground_Type.Descriptor instead. -func (PaymentBackground_Type) EnumDescriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{36, 0} +// Deprecated: Use ContextInfo_AdReplyInfo_MediaType.Descriptor instead. +func (ContextInfo_AdReplyInfo_MediaType) EnumDescriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{33, 4, 0} } -type DisappearingMode_Trigger int32 +type MessageAssociation_AssociationType int32 const ( - DisappearingMode_UNKNOWN DisappearingMode_Trigger = 0 - DisappearingMode_CHAT_SETTING DisappearingMode_Trigger = 1 - DisappearingMode_ACCOUNT_SETTING DisappearingMode_Trigger = 2 - DisappearingMode_BULK_CHANGE DisappearingMode_Trigger = 3 - DisappearingMode_BIZ_SUPPORTS_FB_HOSTING DisappearingMode_Trigger = 4 - DisappearingMode_UNKNOWN_GROUPS DisappearingMode_Trigger = 5 + MessageAssociation_UNKNOWN MessageAssociation_AssociationType = 0 + MessageAssociation_MEDIA_ALBUM MessageAssociation_AssociationType = 1 + MessageAssociation_BOT_PLUGIN MessageAssociation_AssociationType = 2 + MessageAssociation_EVENT_COVER_IMAGE MessageAssociation_AssociationType = 3 + MessageAssociation_STATUS_POLL MessageAssociation_AssociationType = 4 + MessageAssociation_HD_VIDEO_DUAL_UPLOAD MessageAssociation_AssociationType = 5 + MessageAssociation_STATUS_EXTERNAL_RESHARE MessageAssociation_AssociationType = 6 + MessageAssociation_MEDIA_POLL MessageAssociation_AssociationType = 7 + MessageAssociation_STATUS_ADD_YOURS MessageAssociation_AssociationType = 8 + MessageAssociation_STATUS_NOTIFICATION MessageAssociation_AssociationType = 9 + MessageAssociation_HD_IMAGE_DUAL_UPLOAD MessageAssociation_AssociationType = 10 + MessageAssociation_STICKER_ANNOTATION MessageAssociation_AssociationType = 11 + MessageAssociation_MOTION_PHOTO MessageAssociation_AssociationType = 12 + MessageAssociation_STATUS_LINK_ACTION MessageAssociation_AssociationType = 13 + MessageAssociation_VIEW_ALL_REPLIES MessageAssociation_AssociationType = 14 + MessageAssociation_STATUS_ADD_YOURS_AI_IMAGINE MessageAssociation_AssociationType = 15 + MessageAssociation_STATUS_QUESTION MessageAssociation_AssociationType = 16 + MessageAssociation_STATUS_ADD_YOURS_DIWALI MessageAssociation_AssociationType = 17 + MessageAssociation_STATUS_REACTION MessageAssociation_AssociationType = 18 + MessageAssociation_HEVC_VIDEO_DUAL_UPLOAD MessageAssociation_AssociationType = 19 ) -// Enum value maps for DisappearingMode_Trigger. +// Enum value maps for MessageAssociation_AssociationType. var ( - DisappearingMode_Trigger_name = map[int32]string{ - 0: "UNKNOWN", - 1: "CHAT_SETTING", - 2: "ACCOUNT_SETTING", - 3: "BULK_CHANGE", - 4: "BIZ_SUPPORTS_FB_HOSTING", - 5: "UNKNOWN_GROUPS", + MessageAssociation_AssociationType_name = map[int32]string{ + 0: "UNKNOWN", + 1: "MEDIA_ALBUM", + 2: "BOT_PLUGIN", + 3: "EVENT_COVER_IMAGE", + 4: "STATUS_POLL", + 5: "HD_VIDEO_DUAL_UPLOAD", + 6: "STATUS_EXTERNAL_RESHARE", + 7: "MEDIA_POLL", + 8: "STATUS_ADD_YOURS", + 9: "STATUS_NOTIFICATION", + 10: "HD_IMAGE_DUAL_UPLOAD", + 11: "STICKER_ANNOTATION", + 12: "MOTION_PHOTO", + 13: "STATUS_LINK_ACTION", + 14: "VIEW_ALL_REPLIES", + 15: "STATUS_ADD_YOURS_AI_IMAGINE", + 16: "STATUS_QUESTION", + 17: "STATUS_ADD_YOURS_DIWALI", + 18: "STATUS_REACTION", + 19: "HEVC_VIDEO_DUAL_UPLOAD", } - DisappearingMode_Trigger_value = map[string]int32{ - "UNKNOWN": 0, - "CHAT_SETTING": 1, - "ACCOUNT_SETTING": 2, - "BULK_CHANGE": 3, - "BIZ_SUPPORTS_FB_HOSTING": 4, - "UNKNOWN_GROUPS": 5, + MessageAssociation_AssociationType_value = map[string]int32{ + "UNKNOWN": 0, + "MEDIA_ALBUM": 1, + "BOT_PLUGIN": 2, + "EVENT_COVER_IMAGE": 3, + "STATUS_POLL": 4, + "HD_VIDEO_DUAL_UPLOAD": 5, + "STATUS_EXTERNAL_RESHARE": 6, + "MEDIA_POLL": 7, + "STATUS_ADD_YOURS": 8, + "STATUS_NOTIFICATION": 9, + "HD_IMAGE_DUAL_UPLOAD": 10, + "STICKER_ANNOTATION": 11, + "MOTION_PHOTO": 12, + "STATUS_LINK_ACTION": 13, + "VIEW_ALL_REPLIES": 14, + "STATUS_ADD_YOURS_AI_IMAGINE": 15, + "STATUS_QUESTION": 16, + "STATUS_ADD_YOURS_DIWALI": 17, + "STATUS_REACTION": 18, + "HEVC_VIDEO_DUAL_UPLOAD": 19, } ) -func (x DisappearingMode_Trigger) Enum() *DisappearingMode_Trigger { - p := new(DisappearingMode_Trigger) +func (x MessageAssociation_AssociationType) Enum() *MessageAssociation_AssociationType { + p := new(MessageAssociation_AssociationType) *p = x return p } -func (x DisappearingMode_Trigger) String() string { +func (x MessageAssociation_AssociationType) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } -func (DisappearingMode_Trigger) Descriptor() protoreflect.EnumDescriptor { - return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[54].Descriptor() +func (MessageAssociation_AssociationType) Descriptor() protoreflect.EnumDescriptor { + return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[60].Descriptor() } -func (DisappearingMode_Trigger) Type() protoreflect.EnumType { - return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[54] +func (MessageAssociation_AssociationType) Type() protoreflect.EnumType { + return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[60] } -func (x DisappearingMode_Trigger) Number() protoreflect.EnumNumber { +func (x MessageAssociation_AssociationType) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Do not use. -func (x *DisappearingMode_Trigger) UnmarshalJSON(b []byte) error { +func (x *MessageAssociation_AssociationType) UnmarshalJSON(b []byte) error { num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) if err != nil { return err } - *x = DisappearingMode_Trigger(num) + *x = MessageAssociation_AssociationType(num) return nil } -// Deprecated: Use DisappearingMode_Trigger.Descriptor instead. -func (DisappearingMode_Trigger) EnumDescriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{37, 0} +// Deprecated: Use MessageAssociation_AssociationType.Descriptor instead. +func (MessageAssociation_AssociationType) EnumDescriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{34, 0} } -type DisappearingMode_Initiator int32 +type ThreadID_ThreadType int32 const ( - DisappearingMode_CHANGED_IN_CHAT DisappearingMode_Initiator = 0 - DisappearingMode_INITIATED_BY_ME DisappearingMode_Initiator = 1 - DisappearingMode_INITIATED_BY_OTHER DisappearingMode_Initiator = 2 - DisappearingMode_BIZ_UPGRADE_FB_HOSTING DisappearingMode_Initiator = 3 + ThreadID_UNKNOWN ThreadID_ThreadType = 0 + ThreadID_VIEW_REPLIES ThreadID_ThreadType = 1 + ThreadID_AI_THREAD ThreadID_ThreadType = 2 ) -// Enum value maps for DisappearingMode_Initiator. +// Enum value maps for ThreadID_ThreadType. var ( - DisappearingMode_Initiator_name = map[int32]string{ - 0: "CHANGED_IN_CHAT", - 1: "INITIATED_BY_ME", - 2: "INITIATED_BY_OTHER", - 3: "BIZ_UPGRADE_FB_HOSTING", + ThreadID_ThreadType_name = map[int32]string{ + 0: "UNKNOWN", + 1: "VIEW_REPLIES", + 2: "AI_THREAD", } - DisappearingMode_Initiator_value = map[string]int32{ - "CHANGED_IN_CHAT": 0, - "INITIATED_BY_ME": 1, - "INITIATED_BY_OTHER": 2, - "BIZ_UPGRADE_FB_HOSTING": 3, + ThreadID_ThreadType_value = map[string]int32{ + "UNKNOWN": 0, + "VIEW_REPLIES": 1, + "AI_THREAD": 2, } ) -func (x DisappearingMode_Initiator) Enum() *DisappearingMode_Initiator { - p := new(DisappearingMode_Initiator) +func (x ThreadID_ThreadType) Enum() *ThreadID_ThreadType { + p := new(ThreadID_ThreadType) *p = x return p } -func (x DisappearingMode_Initiator) String() string { +func (x ThreadID_ThreadType) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } -func (DisappearingMode_Initiator) Descriptor() protoreflect.EnumDescriptor { - return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[55].Descriptor() +func (ThreadID_ThreadType) Descriptor() protoreflect.EnumDescriptor { + return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[61].Descriptor() } -func (DisappearingMode_Initiator) Type() protoreflect.EnumType { - return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[55] +func (ThreadID_ThreadType) Type() protoreflect.EnumType { + return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[61] } -func (x DisappearingMode_Initiator) Number() protoreflect.EnumNumber { +func (x ThreadID_ThreadType) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Do not use. -func (x *DisappearingMode_Initiator) UnmarshalJSON(b []byte) error { +func (x *ThreadID_ThreadType) UnmarshalJSON(b []byte) error { num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) if err != nil { return err } - *x = DisappearingMode_Initiator(num) + *x = ThreadID_ThreadType(num) return nil } -// Deprecated: Use DisappearingMode_Initiator.Descriptor instead. -func (DisappearingMode_Initiator) EnumDescriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{37, 1} +// Deprecated: Use ThreadID_ThreadType.Descriptor instead. +func (ThreadID_ThreadType) EnumDescriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{35, 0} } -type ProcessedVideo_VideoQuality int32 +type MessageContextInfo_MessageAddonExpiryType int32 const ( - ProcessedVideo_UNDEFINED ProcessedVideo_VideoQuality = 0 - ProcessedVideo_LOW ProcessedVideo_VideoQuality = 1 - ProcessedVideo_MID ProcessedVideo_VideoQuality = 2 - ProcessedVideo_HIGH ProcessedVideo_VideoQuality = 3 + MessageContextInfo_STATIC MessageContextInfo_MessageAddonExpiryType = 1 + MessageContextInfo_DEPENDENT_ON_PARENT MessageContextInfo_MessageAddonExpiryType = 2 ) -// Enum value maps for ProcessedVideo_VideoQuality. +// Enum value maps for MessageContextInfo_MessageAddonExpiryType. var ( - ProcessedVideo_VideoQuality_name = map[int32]string{ - 0: "UNDEFINED", - 1: "LOW", - 2: "MID", - 3: "HIGH", + MessageContextInfo_MessageAddonExpiryType_name = map[int32]string{ + 1: "STATIC", + 2: "DEPENDENT_ON_PARENT", } - ProcessedVideo_VideoQuality_value = map[string]int32{ - "UNDEFINED": 0, - "LOW": 1, - "MID": 2, - "HIGH": 3, + MessageContextInfo_MessageAddonExpiryType_value = map[string]int32{ + "STATIC": 1, + "DEPENDENT_ON_PARENT": 2, } ) -func (x ProcessedVideo_VideoQuality) Enum() *ProcessedVideo_VideoQuality { - p := new(ProcessedVideo_VideoQuality) +func (x MessageContextInfo_MessageAddonExpiryType) Enum() *MessageContextInfo_MessageAddonExpiryType { + p := new(MessageContextInfo_MessageAddonExpiryType) *p = x return p } -func (x ProcessedVideo_VideoQuality) String() string { +func (x MessageContextInfo_MessageAddonExpiryType) String() string { return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } -func (ProcessedVideo_VideoQuality) Descriptor() protoreflect.EnumDescriptor { - return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[56].Descriptor() +func (MessageContextInfo_MessageAddonExpiryType) Descriptor() protoreflect.EnumDescriptor { + return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[62].Descriptor() } -func (ProcessedVideo_VideoQuality) Type() protoreflect.EnumType { - return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[56] +func (MessageContextInfo_MessageAddonExpiryType) Type() protoreflect.EnumType { + return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[62] } -func (x ProcessedVideo_VideoQuality) Number() protoreflect.EnumNumber { +func (x MessageContextInfo_MessageAddonExpiryType) Number() protoreflect.EnumNumber { return protoreflect.EnumNumber(x) } // Deprecated: Do not use. -func (x *ProcessedVideo_VideoQuality) UnmarshalJSON(b []byte) error { +func (x *MessageContextInfo_MessageAddonExpiryType) UnmarshalJSON(b []byte) error { num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) if err != nil { return err } - *x = ProcessedVideo_VideoQuality(num) + *x = MessageContextInfo_MessageAddonExpiryType(num) return nil } -// Deprecated: Use ProcessedVideo_VideoQuality.Descriptor instead. -func (ProcessedVideo_VideoQuality) EnumDescriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{38, 0} +// Deprecated: Use MessageContextInfo_MessageAddonExpiryType.Descriptor instead. +func (MessageContextInfo_MessageAddonExpiryType) EnumDescriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{36, 0} } -type PlaceholderMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +type InteractiveAnnotation_StatusLinkType int32 - Type *PlaceholderMessage_PlaceholderType `protobuf:"varint,1,opt,name=type,enum=WAWebProtobufsE2E.PlaceholderMessage_PlaceholderType" json:"type,omitempty"` -} +const ( + InteractiveAnnotation_RASTERIZED_LINK_PREVIEW InteractiveAnnotation_StatusLinkType = 1 + InteractiveAnnotation_RASTERIZED_LINK_TRUNCATED InteractiveAnnotation_StatusLinkType = 2 + InteractiveAnnotation_RASTERIZED_LINK_FULL_URL InteractiveAnnotation_StatusLinkType = 3 +) -func (x *PlaceholderMessage) Reset() { - *x = PlaceholderMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) +// Enum value maps for InteractiveAnnotation_StatusLinkType. +var ( + InteractiveAnnotation_StatusLinkType_name = map[int32]string{ + 1: "RASTERIZED_LINK_PREVIEW", + 2: "RASTERIZED_LINK_TRUNCATED", + 3: "RASTERIZED_LINK_FULL_URL", } -} + InteractiveAnnotation_StatusLinkType_value = map[string]int32{ + "RASTERIZED_LINK_PREVIEW": 1, + "RASTERIZED_LINK_TRUNCATED": 2, + "RASTERIZED_LINK_FULL_URL": 3, + } +) -func (x *PlaceholderMessage) String() string { - return protoimpl.X.MessageStringOf(x) +func (x InteractiveAnnotation_StatusLinkType) Enum() *InteractiveAnnotation_StatusLinkType { + p := new(InteractiveAnnotation_StatusLinkType) + *p = x + return p } -func (*PlaceholderMessage) ProtoMessage() {} - -func (x *PlaceholderMessage) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) +func (x InteractiveAnnotation_StatusLinkType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } -// Deprecated: Use PlaceholderMessage.ProtoReflect.Descriptor instead. -func (*PlaceholderMessage) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{0} +func (InteractiveAnnotation_StatusLinkType) Descriptor() protoreflect.EnumDescriptor { + return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[63].Descriptor() } -func (x *PlaceholderMessage) GetType() PlaceholderMessage_PlaceholderType { - if x != nil && x.Type != nil { - return *x.Type - } - return PlaceholderMessage_MASK_LINKED_DEVICES +func (InteractiveAnnotation_StatusLinkType) Type() protoreflect.EnumType { + return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[63] } -type BCallMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - SessionID *string `protobuf:"bytes,1,opt,name=sessionID" json:"sessionID,omitempty"` - MediaType *BCallMessage_MediaType `protobuf:"varint,2,opt,name=mediaType,enum=WAWebProtobufsE2E.BCallMessage_MediaType" json:"mediaType,omitempty"` - MasterKey []byte `protobuf:"bytes,3,opt,name=masterKey" json:"masterKey,omitempty"` - Caption *string `protobuf:"bytes,4,opt,name=caption" json:"caption,omitempty"` +func (x InteractiveAnnotation_StatusLinkType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) } -func (x *BCallMessage) Reset() { - *x = BCallMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) +// Deprecated: Do not use. +func (x *InteractiveAnnotation_StatusLinkType) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err } + *x = InteractiveAnnotation_StatusLinkType(num) + return nil } -func (x *BCallMessage) String() string { - return protoimpl.X.MessageStringOf(x) +// Deprecated: Use InteractiveAnnotation_StatusLinkType.Descriptor instead. +func (InteractiveAnnotation_StatusLinkType) EnumDescriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{37, 0} } -func (*BCallMessage) ProtoMessage() {} +type HydratedTemplateButton_HydratedURLButton_WebviewPresentationType int32 -func (x *BCallMessage) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms +const ( + HydratedTemplateButton_HydratedURLButton_FULL HydratedTemplateButton_HydratedURLButton_WebviewPresentationType = 1 + HydratedTemplateButton_HydratedURLButton_TALL HydratedTemplateButton_HydratedURLButton_WebviewPresentationType = 2 + HydratedTemplateButton_HydratedURLButton_COMPACT HydratedTemplateButton_HydratedURLButton_WebviewPresentationType = 3 +) + +// Enum value maps for HydratedTemplateButton_HydratedURLButton_WebviewPresentationType. +var ( + HydratedTemplateButton_HydratedURLButton_WebviewPresentationType_name = map[int32]string{ + 1: "FULL", + 2: "TALL", + 3: "COMPACT", } - return mi.MessageOf(x) + HydratedTemplateButton_HydratedURLButton_WebviewPresentationType_value = map[string]int32{ + "FULL": 1, + "TALL": 2, + "COMPACT": 3, + } +) + +func (x HydratedTemplateButton_HydratedURLButton_WebviewPresentationType) Enum() *HydratedTemplateButton_HydratedURLButton_WebviewPresentationType { + p := new(HydratedTemplateButton_HydratedURLButton_WebviewPresentationType) + *p = x + return p } -// Deprecated: Use BCallMessage.ProtoReflect.Descriptor instead. -func (*BCallMessage) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{1} +func (x HydratedTemplateButton_HydratedURLButton_WebviewPresentationType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) } -func (x *BCallMessage) GetSessionID() string { - if x != nil && x.SessionID != nil { - return *x.SessionID - } - return "" +func (HydratedTemplateButton_HydratedURLButton_WebviewPresentationType) Descriptor() protoreflect.EnumDescriptor { + return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[64].Descriptor() } -func (x *BCallMessage) GetMediaType() BCallMessage_MediaType { - if x != nil && x.MediaType != nil { - return *x.MediaType - } - return BCallMessage_UNKNOWN +func (HydratedTemplateButton_HydratedURLButton_WebviewPresentationType) Type() protoreflect.EnumType { + return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[64] } -func (x *BCallMessage) GetMasterKey() []byte { - if x != nil { - return x.MasterKey - } - return nil +func (x HydratedTemplateButton_HydratedURLButton_WebviewPresentationType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) } -func (x *BCallMessage) GetCaption() string { - if x != nil && x.Caption != nil { - return *x.Caption +// Deprecated: Do not use. +func (x *HydratedTemplateButton_HydratedURLButton_WebviewPresentationType) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err } - return "" + *x = HydratedTemplateButton_HydratedURLButton_WebviewPresentationType(num) + return nil } -type CallLogMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - IsVideo *bool `protobuf:"varint,1,opt,name=isVideo" json:"isVideo,omitempty"` - CallOutcome *CallLogMessage_CallOutcome `protobuf:"varint,2,opt,name=callOutcome,enum=WAWebProtobufsE2E.CallLogMessage_CallOutcome" json:"callOutcome,omitempty"` - DurationSecs *int64 `protobuf:"varint,3,opt,name=durationSecs" json:"durationSecs,omitempty"` - CallType *CallLogMessage_CallType `protobuf:"varint,4,opt,name=callType,enum=WAWebProtobufsE2E.CallLogMessage_CallType" json:"callType,omitempty"` - Participants []*CallLogMessage_CallParticipant `protobuf:"bytes,5,rep,name=participants" json:"participants,omitempty"` +// Deprecated: Use HydratedTemplateButton_HydratedURLButton_WebviewPresentationType.Descriptor instead. +func (HydratedTemplateButton_HydratedURLButton_WebviewPresentationType) EnumDescriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{38, 0, 0} } -func (x *CallLogMessage) Reset() { - *x = CallLogMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[2] +type PaymentBackground_Type int32 + +const ( + PaymentBackground_UNKNOWN PaymentBackground_Type = 0 + PaymentBackground_DEFAULT PaymentBackground_Type = 1 +) + +// Enum value maps for PaymentBackground_Type. +var ( + PaymentBackground_Type_name = map[int32]string{ + 0: "UNKNOWN", + 1: "DEFAULT", + } + PaymentBackground_Type_value = map[string]int32{ + "UNKNOWN": 0, + "DEFAULT": 1, + } +) + +func (x PaymentBackground_Type) Enum() *PaymentBackground_Type { + p := new(PaymentBackground_Type) + *p = x + return p +} + +func (x PaymentBackground_Type) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (PaymentBackground_Type) Descriptor() protoreflect.EnumDescriptor { + return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[65].Descriptor() +} + +func (PaymentBackground_Type) Type() protoreflect.EnumType { + return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[65] +} + +func (x PaymentBackground_Type) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *PaymentBackground_Type) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = PaymentBackground_Type(num) + return nil +} + +// Deprecated: Use PaymentBackground_Type.Descriptor instead. +func (PaymentBackground_Type) EnumDescriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{39, 0} +} + +type DisappearingMode_Trigger int32 + +const ( + DisappearingMode_UNKNOWN DisappearingMode_Trigger = 0 + DisappearingMode_CHAT_SETTING DisappearingMode_Trigger = 1 + DisappearingMode_ACCOUNT_SETTING DisappearingMode_Trigger = 2 + DisappearingMode_BULK_CHANGE DisappearingMode_Trigger = 3 + DisappearingMode_BIZ_SUPPORTS_FB_HOSTING DisappearingMode_Trigger = 4 + DisappearingMode_UNKNOWN_GROUPS DisappearingMode_Trigger = 5 +) + +// Enum value maps for DisappearingMode_Trigger. +var ( + DisappearingMode_Trigger_name = map[int32]string{ + 0: "UNKNOWN", + 1: "CHAT_SETTING", + 2: "ACCOUNT_SETTING", + 3: "BULK_CHANGE", + 4: "BIZ_SUPPORTS_FB_HOSTING", + 5: "UNKNOWN_GROUPS", + } + DisappearingMode_Trigger_value = map[string]int32{ + "UNKNOWN": 0, + "CHAT_SETTING": 1, + "ACCOUNT_SETTING": 2, + "BULK_CHANGE": 3, + "BIZ_SUPPORTS_FB_HOSTING": 4, + "UNKNOWN_GROUPS": 5, + } +) + +func (x DisappearingMode_Trigger) Enum() *DisappearingMode_Trigger { + p := new(DisappearingMode_Trigger) + *p = x + return p +} + +func (x DisappearingMode_Trigger) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (DisappearingMode_Trigger) Descriptor() protoreflect.EnumDescriptor { + return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[66].Descriptor() +} + +func (DisappearingMode_Trigger) Type() protoreflect.EnumType { + return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[66] +} + +func (x DisappearingMode_Trigger) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *DisappearingMode_Trigger) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = DisappearingMode_Trigger(num) + return nil +} + +// Deprecated: Use DisappearingMode_Trigger.Descriptor instead. +func (DisappearingMode_Trigger) EnumDescriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{40, 0} +} + +type DisappearingMode_Initiator int32 + +const ( + DisappearingMode_CHANGED_IN_CHAT DisappearingMode_Initiator = 0 + DisappearingMode_INITIATED_BY_ME DisappearingMode_Initiator = 1 + DisappearingMode_INITIATED_BY_OTHER DisappearingMode_Initiator = 2 + DisappearingMode_BIZ_UPGRADE_FB_HOSTING DisappearingMode_Initiator = 3 +) + +// Enum value maps for DisappearingMode_Initiator. +var ( + DisappearingMode_Initiator_name = map[int32]string{ + 0: "CHANGED_IN_CHAT", + 1: "INITIATED_BY_ME", + 2: "INITIATED_BY_OTHER", + 3: "BIZ_UPGRADE_FB_HOSTING", + } + DisappearingMode_Initiator_value = map[string]int32{ + "CHANGED_IN_CHAT": 0, + "INITIATED_BY_ME": 1, + "INITIATED_BY_OTHER": 2, + "BIZ_UPGRADE_FB_HOSTING": 3, + } +) + +func (x DisappearingMode_Initiator) Enum() *DisappearingMode_Initiator { + p := new(DisappearingMode_Initiator) + *p = x + return p +} + +func (x DisappearingMode_Initiator) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (DisappearingMode_Initiator) Descriptor() protoreflect.EnumDescriptor { + return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[67].Descriptor() +} + +func (DisappearingMode_Initiator) Type() protoreflect.EnumType { + return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[67] +} + +func (x DisappearingMode_Initiator) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *DisappearingMode_Initiator) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = DisappearingMode_Initiator(num) + return nil +} + +// Deprecated: Use DisappearingMode_Initiator.Descriptor instead. +func (DisappearingMode_Initiator) EnumDescriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{40, 1} +} + +type ProcessedVideo_VideoQuality int32 + +const ( + ProcessedVideo_UNDEFINED ProcessedVideo_VideoQuality = 0 + ProcessedVideo_LOW ProcessedVideo_VideoQuality = 1 + ProcessedVideo_MID ProcessedVideo_VideoQuality = 2 + ProcessedVideo_HIGH ProcessedVideo_VideoQuality = 3 +) + +// Enum value maps for ProcessedVideo_VideoQuality. +var ( + ProcessedVideo_VideoQuality_name = map[int32]string{ + 0: "UNDEFINED", + 1: "LOW", + 2: "MID", + 3: "HIGH", + } + ProcessedVideo_VideoQuality_value = map[string]int32{ + "UNDEFINED": 0, + "LOW": 1, + "MID": 2, + "HIGH": 3, + } +) + +func (x ProcessedVideo_VideoQuality) Enum() *ProcessedVideo_VideoQuality { + p := new(ProcessedVideo_VideoQuality) + *p = x + return p +} + +func (x ProcessedVideo_VideoQuality) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (ProcessedVideo_VideoQuality) Descriptor() protoreflect.EnumDescriptor { + return file_waE2E_WAWebProtobufsE2E_proto_enumTypes[68].Descriptor() +} + +func (ProcessedVideo_VideoQuality) Type() protoreflect.EnumType { + return &file_waE2E_WAWebProtobufsE2E_proto_enumTypes[68] +} + +func (x ProcessedVideo_VideoQuality) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *ProcessedVideo_VideoQuality) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = ProcessedVideo_VideoQuality(num) + return nil +} + +// Deprecated: Use ProcessedVideo_VideoQuality.Descriptor instead. +func (ProcessedVideo_VideoQuality) EnumDescriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{41, 0} +} + +type StickerPackMessage struct { + state protoimpl.MessageState `protogen:"open.v1"` + StickerPackID *string `protobuf:"bytes,1,opt,name=stickerPackID" json:"stickerPackID,omitempty"` + Name *string `protobuf:"bytes,2,opt,name=name" json:"name,omitempty"` + Publisher *string `protobuf:"bytes,3,opt,name=publisher" json:"publisher,omitempty"` + Stickers []*StickerPackMessage_Sticker `protobuf:"bytes,4,rep,name=stickers" json:"stickers,omitempty"` + FileLength *uint64 `protobuf:"varint,5,opt,name=fileLength" json:"fileLength,omitempty"` + FileSHA256 []byte `protobuf:"bytes,6,opt,name=fileSHA256" json:"fileSHA256,omitempty"` + FileEncSHA256 []byte `protobuf:"bytes,7,opt,name=fileEncSHA256" json:"fileEncSHA256,omitempty"` + MediaKey []byte `protobuf:"bytes,8,opt,name=mediaKey" json:"mediaKey,omitempty"` + DirectPath *string `protobuf:"bytes,9,opt,name=directPath" json:"directPath,omitempty"` + Caption *string `protobuf:"bytes,10,opt,name=caption" json:"caption,omitempty"` + ContextInfo *ContextInfo `protobuf:"bytes,11,opt,name=contextInfo" json:"contextInfo,omitempty"` + PackDescription *string `protobuf:"bytes,12,opt,name=packDescription" json:"packDescription,omitempty"` + MediaKeyTimestamp *int64 `protobuf:"varint,13,opt,name=mediaKeyTimestamp" json:"mediaKeyTimestamp,omitempty"` + TrayIconFileName *string `protobuf:"bytes,14,opt,name=trayIconFileName" json:"trayIconFileName,omitempty"` + ThumbnailDirectPath *string `protobuf:"bytes,15,opt,name=thumbnailDirectPath" json:"thumbnailDirectPath,omitempty"` + ThumbnailSHA256 []byte `protobuf:"bytes,16,opt,name=thumbnailSHA256" json:"thumbnailSHA256,omitempty"` + ThumbnailEncSHA256 []byte `protobuf:"bytes,17,opt,name=thumbnailEncSHA256" json:"thumbnailEncSHA256,omitempty"` + ThumbnailHeight *uint32 `protobuf:"varint,18,opt,name=thumbnailHeight" json:"thumbnailHeight,omitempty"` + ThumbnailWidth *uint32 `protobuf:"varint,19,opt,name=thumbnailWidth" json:"thumbnailWidth,omitempty"` + ImageDataHash *string `protobuf:"bytes,20,opt,name=imageDataHash" json:"imageDataHash,omitempty"` + StickerPackSize *uint64 `protobuf:"varint,21,opt,name=stickerPackSize" json:"stickerPackSize,omitempty"` + StickerPackOrigin *StickerPackMessage_StickerPackOrigin `protobuf:"varint,22,opt,name=stickerPackOrigin,enum=WAWebProtobufsE2E.StickerPackMessage_StickerPackOrigin" json:"stickerPackOrigin,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *StickerPackMessage) Reset() { + *x = StickerPackMessage{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *StickerPackMessage) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StickerPackMessage) ProtoMessage() {} + +func (x *StickerPackMessage) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[0] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StickerPackMessage.ProtoReflect.Descriptor instead. +func (*StickerPackMessage) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{0} +} + +func (x *StickerPackMessage) GetStickerPackID() string { + if x != nil && x.StickerPackID != nil { + return *x.StickerPackID + } + return "" +} + +func (x *StickerPackMessage) GetName() string { + if x != nil && x.Name != nil { + return *x.Name + } + return "" +} + +func (x *StickerPackMessage) GetPublisher() string { + if x != nil && x.Publisher != nil { + return *x.Publisher + } + return "" +} + +func (x *StickerPackMessage) GetStickers() []*StickerPackMessage_Sticker { + if x != nil { + return x.Stickers + } + return nil +} + +func (x *StickerPackMessage) GetFileLength() uint64 { + if x != nil && x.FileLength != nil { + return *x.FileLength + } + return 0 +} + +func (x *StickerPackMessage) GetFileSHA256() []byte { + if x != nil { + return x.FileSHA256 + } + return nil +} + +func (x *StickerPackMessage) GetFileEncSHA256() []byte { + if x != nil { + return x.FileEncSHA256 + } + return nil +} + +func (x *StickerPackMessage) GetMediaKey() []byte { + if x != nil { + return x.MediaKey + } + return nil +} + +func (x *StickerPackMessage) GetDirectPath() string { + if x != nil && x.DirectPath != nil { + return *x.DirectPath + } + return "" +} + +func (x *StickerPackMessage) GetCaption() string { + if x != nil && x.Caption != nil { + return *x.Caption + } + return "" +} + +func (x *StickerPackMessage) GetContextInfo() *ContextInfo { + if x != nil { + return x.ContextInfo + } + return nil +} + +func (x *StickerPackMessage) GetPackDescription() string { + if x != nil && x.PackDescription != nil { + return *x.PackDescription + } + return "" +} + +func (x *StickerPackMessage) GetMediaKeyTimestamp() int64 { + if x != nil && x.MediaKeyTimestamp != nil { + return *x.MediaKeyTimestamp + } + return 0 +} + +func (x *StickerPackMessage) GetTrayIconFileName() string { + if x != nil && x.TrayIconFileName != nil { + return *x.TrayIconFileName + } + return "" +} + +func (x *StickerPackMessage) GetThumbnailDirectPath() string { + if x != nil && x.ThumbnailDirectPath != nil { + return *x.ThumbnailDirectPath + } + return "" +} + +func (x *StickerPackMessage) GetThumbnailSHA256() []byte { + if x != nil { + return x.ThumbnailSHA256 + } + return nil +} + +func (x *StickerPackMessage) GetThumbnailEncSHA256() []byte { + if x != nil { + return x.ThumbnailEncSHA256 + } + return nil +} + +func (x *StickerPackMessage) GetThumbnailHeight() uint32 { + if x != nil && x.ThumbnailHeight != nil { + return *x.ThumbnailHeight + } + return 0 +} + +func (x *StickerPackMessage) GetThumbnailWidth() uint32 { + if x != nil && x.ThumbnailWidth != nil { + return *x.ThumbnailWidth + } + return 0 +} + +func (x *StickerPackMessage) GetImageDataHash() string { + if x != nil && x.ImageDataHash != nil { + return *x.ImageDataHash + } + return "" +} + +func (x *StickerPackMessage) GetStickerPackSize() uint64 { + if x != nil && x.StickerPackSize != nil { + return *x.StickerPackSize + } + return 0 +} + +func (x *StickerPackMessage) GetStickerPackOrigin() StickerPackMessage_StickerPackOrigin { + if x != nil && x.StickerPackOrigin != nil { + return *x.StickerPackOrigin + } + return StickerPackMessage_FIRST_PARTY +} + +type PlaceholderMessage struct { + state protoimpl.MessageState `protogen:"open.v1"` + Type *PlaceholderMessage_PlaceholderType `protobuf:"varint,1,opt,name=type,enum=WAWebProtobufsE2E.PlaceholderMessage_PlaceholderType" json:"type,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *PlaceholderMessage) Reset() { + *x = PlaceholderMessage{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *PlaceholderMessage) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PlaceholderMessage) ProtoMessage() {} + +func (x *PlaceholderMessage) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[1] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PlaceholderMessage.ProtoReflect.Descriptor instead. +func (*PlaceholderMessage) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{1} +} + +func (x *PlaceholderMessage) GetType() PlaceholderMessage_PlaceholderType { + if x != nil && x.Type != nil { + return *x.Type + } + return PlaceholderMessage_MASK_LINKED_DEVICES +} + +type BCallMessage struct { + state protoimpl.MessageState `protogen:"open.v1"` + SessionID *string `protobuf:"bytes,1,opt,name=sessionID" json:"sessionID,omitempty"` + MediaType *BCallMessage_MediaType `protobuf:"varint,2,opt,name=mediaType,enum=WAWebProtobufsE2E.BCallMessage_MediaType" json:"mediaType,omitempty"` + MasterKey []byte `protobuf:"bytes,3,opt,name=masterKey" json:"masterKey,omitempty"` + Caption *string `protobuf:"bytes,4,opt,name=caption" json:"caption,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BCallMessage) Reset() { + *x = BCallMessage{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BCallMessage) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BCallMessage) ProtoMessage() {} + +func (x *BCallMessage) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[2] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BCallMessage.ProtoReflect.Descriptor instead. +func (*BCallMessage) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{2} +} + +func (x *BCallMessage) GetSessionID() string { + if x != nil && x.SessionID != nil { + return *x.SessionID + } + return "" +} + +func (x *BCallMessage) GetMediaType() BCallMessage_MediaType { + if x != nil && x.MediaType != nil { + return *x.MediaType + } + return BCallMessage_UNKNOWN +} + +func (x *BCallMessage) GetMasterKey() []byte { + if x != nil { + return x.MasterKey + } + return nil +} + +func (x *BCallMessage) GetCaption() string { + if x != nil && x.Caption != nil { + return *x.Caption + } + return "" +} + +type CallLogMessage struct { + state protoimpl.MessageState `protogen:"open.v1"` + IsVideo *bool `protobuf:"varint,1,opt,name=isVideo" json:"isVideo,omitempty"` + CallOutcome *CallLogMessage_CallOutcome `protobuf:"varint,2,opt,name=callOutcome,enum=WAWebProtobufsE2E.CallLogMessage_CallOutcome" json:"callOutcome,omitempty"` + DurationSecs *int64 `protobuf:"varint,3,opt,name=durationSecs" json:"durationSecs,omitempty"` + CallType *CallLogMessage_CallType `protobuf:"varint,4,opt,name=callType,enum=WAWebProtobufsE2E.CallLogMessage_CallType" json:"callType,omitempty"` + Participants []*CallLogMessage_CallParticipant `protobuf:"bytes,5,rep,name=participants" json:"participants,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *CallLogMessage) Reset() { + *x = CallLogMessage{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *CallLogMessage) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CallLogMessage) ProtoMessage() {} + +func (x *CallLogMessage) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[3] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CallLogMessage.ProtoReflect.Descriptor instead. +func (*CallLogMessage) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{3} +} + +func (x *CallLogMessage) GetIsVideo() bool { + if x != nil && x.IsVideo != nil { + return *x.IsVideo + } + return false +} + +func (x *CallLogMessage) GetCallOutcome() CallLogMessage_CallOutcome { + if x != nil && x.CallOutcome != nil { + return *x.CallOutcome + } + return CallLogMessage_CONNECTED +} + +func (x *CallLogMessage) GetDurationSecs() int64 { + if x != nil && x.DurationSecs != nil { + return *x.DurationSecs + } + return 0 +} + +func (x *CallLogMessage) GetCallType() CallLogMessage_CallType { + if x != nil && x.CallType != nil { + return *x.CallType + } + return CallLogMessage_REGULAR +} + +func (x *CallLogMessage) GetParticipants() []*CallLogMessage_CallParticipant { + if x != nil { + return x.Participants + } + return nil +} + +type ScheduledCallEditMessage struct { + state protoimpl.MessageState `protogen:"open.v1"` + Key *waCommon.MessageKey `protobuf:"bytes,1,opt,name=key" json:"key,omitempty"` + EditType *ScheduledCallEditMessage_EditType `protobuf:"varint,2,opt,name=editType,enum=WAWebProtobufsE2E.ScheduledCallEditMessage_EditType" json:"editType,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ScheduledCallEditMessage) Reset() { + *x = ScheduledCallEditMessage{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ScheduledCallEditMessage) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ScheduledCallEditMessage) ProtoMessage() {} + +func (x *ScheduledCallEditMessage) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[4] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ScheduledCallEditMessage.ProtoReflect.Descriptor instead. +func (*ScheduledCallEditMessage) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{4} +} + +func (x *ScheduledCallEditMessage) GetKey() *waCommon.MessageKey { + if x != nil { + return x.Key + } + return nil +} + +func (x *ScheduledCallEditMessage) GetEditType() ScheduledCallEditMessage_EditType { + if x != nil && x.EditType != nil { + return *x.EditType + } + return ScheduledCallEditMessage_UNKNOWN +} + +type ScheduledCallCreationMessage struct { + state protoimpl.MessageState `protogen:"open.v1"` + ScheduledTimestampMS *int64 `protobuf:"varint,1,opt,name=scheduledTimestampMS" json:"scheduledTimestampMS,omitempty"` + CallType *ScheduledCallCreationMessage_CallType `protobuf:"varint,2,opt,name=callType,enum=WAWebProtobufsE2E.ScheduledCallCreationMessage_CallType" json:"callType,omitempty"` + Title *string `protobuf:"bytes,3,opt,name=title" json:"title,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ScheduledCallCreationMessage) Reset() { + *x = ScheduledCallCreationMessage{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ScheduledCallCreationMessage) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ScheduledCallCreationMessage) ProtoMessage() {} + +func (x *ScheduledCallCreationMessage) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[5] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ScheduledCallCreationMessage.ProtoReflect.Descriptor instead. +func (*ScheduledCallCreationMessage) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{5} +} + +func (x *ScheduledCallCreationMessage) GetScheduledTimestampMS() int64 { + if x != nil && x.ScheduledTimestampMS != nil { + return *x.ScheduledTimestampMS + } + return 0 +} + +func (x *ScheduledCallCreationMessage) GetCallType() ScheduledCallCreationMessage_CallType { + if x != nil && x.CallType != nil { + return *x.CallType + } + return ScheduledCallCreationMessage_UNKNOWN +} + +func (x *ScheduledCallCreationMessage) GetTitle() string { + if x != nil && x.Title != nil { + return *x.Title + } + return "" +} + +type EventResponseMessage struct { + state protoimpl.MessageState `protogen:"open.v1"` + Response *EventResponseMessage_EventResponseType `protobuf:"varint,1,opt,name=response,enum=WAWebProtobufsE2E.EventResponseMessage_EventResponseType" json:"response,omitempty"` + TimestampMS *int64 `protobuf:"varint,2,opt,name=timestampMS" json:"timestampMS,omitempty"` + ExtraGuestCount *int32 `protobuf:"varint,3,opt,name=extraGuestCount" json:"extraGuestCount,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *EventResponseMessage) Reset() { + *x = EventResponseMessage{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *EventResponseMessage) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EventResponseMessage) ProtoMessage() {} + +func (x *EventResponseMessage) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[6] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use EventResponseMessage.ProtoReflect.Descriptor instead. +func (*EventResponseMessage) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{6} +} + +func (x *EventResponseMessage) GetResponse() EventResponseMessage_EventResponseType { + if x != nil && x.Response != nil { + return *x.Response + } + return EventResponseMessage_UNKNOWN +} + +func (x *EventResponseMessage) GetTimestampMS() int64 { + if x != nil && x.TimestampMS != nil { + return *x.TimestampMS + } + return 0 +} + +func (x *EventResponseMessage) GetExtraGuestCount() int32 { + if x != nil && x.ExtraGuestCount != nil { + return *x.ExtraGuestCount + } + return 0 +} + +type PinInChatMessage struct { + state protoimpl.MessageState `protogen:"open.v1"` + Key *waCommon.MessageKey `protobuf:"bytes,1,opt,name=key" json:"key,omitempty"` + Type *PinInChatMessage_Type `protobuf:"varint,2,opt,name=type,enum=WAWebProtobufsE2E.PinInChatMessage_Type" json:"type,omitempty"` + SenderTimestampMS *int64 `protobuf:"varint,3,opt,name=senderTimestampMS" json:"senderTimestampMS,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *PinInChatMessage) Reset() { + *x = PinInChatMessage{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *PinInChatMessage) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PinInChatMessage) ProtoMessage() {} + +func (x *PinInChatMessage) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[7] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PinInChatMessage.ProtoReflect.Descriptor instead. +func (*PinInChatMessage) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{7} +} + +func (x *PinInChatMessage) GetKey() *waCommon.MessageKey { + if x != nil { + return x.Key + } + return nil +} + +func (x *PinInChatMessage) GetType() PinInChatMessage_Type { + if x != nil && x.Type != nil { + return *x.Type + } + return PinInChatMessage_UNKNOWN_TYPE +} + +func (x *PinInChatMessage) GetSenderTimestampMS() int64 { + if x != nil && x.SenderTimestampMS != nil { + return *x.SenderTimestampMS + } + return 0 +} + +type StatusStickerInteractionMessage struct { + state protoimpl.MessageState `protogen:"open.v1"` + Key *waCommon.MessageKey `protobuf:"bytes,1,opt,name=key" json:"key,omitempty"` + StickerKey *string `protobuf:"bytes,2,opt,name=stickerKey" json:"stickerKey,omitempty"` + Type *StatusStickerInteractionMessage_StatusStickerType `protobuf:"varint,3,opt,name=type,enum=WAWebProtobufsE2E.StatusStickerInteractionMessage_StatusStickerType" json:"type,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *StatusStickerInteractionMessage) Reset() { + *x = StatusStickerInteractionMessage{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *StatusStickerInteractionMessage) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StatusStickerInteractionMessage) ProtoMessage() {} + +func (x *StatusStickerInteractionMessage) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[8] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StatusStickerInteractionMessage.ProtoReflect.Descriptor instead. +func (*StatusStickerInteractionMessage) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{8} +} + +func (x *StatusStickerInteractionMessage) GetKey() *waCommon.MessageKey { + if x != nil { + return x.Key + } + return nil +} + +func (x *StatusStickerInteractionMessage) GetStickerKey() string { + if x != nil && x.StickerKey != nil { + return *x.StickerKey + } + return "" +} + +func (x *StatusStickerInteractionMessage) GetType() StatusStickerInteractionMessage_StatusStickerType { + if x != nil && x.Type != nil { + return *x.Type + } + return StatusStickerInteractionMessage_UNKNOWN +} + +type ButtonsResponseMessage struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Types that are valid to be assigned to Response: + // + // *ButtonsResponseMessage_SelectedDisplayText + Response isButtonsResponseMessage_Response `protobuf_oneof:"response"` + SelectedButtonID *string `protobuf:"bytes,1,opt,name=selectedButtonID" json:"selectedButtonID,omitempty"` + ContextInfo *ContextInfo `protobuf:"bytes,3,opt,name=contextInfo" json:"contextInfo,omitempty"` + Type *ButtonsResponseMessage_Type `protobuf:"varint,4,opt,name=type,enum=WAWebProtobufsE2E.ButtonsResponseMessage_Type" json:"type,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ButtonsResponseMessage) Reset() { + *x = ButtonsResponseMessage{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ButtonsResponseMessage) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ButtonsResponseMessage) ProtoMessage() {} + +func (x *ButtonsResponseMessage) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[9] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ButtonsResponseMessage.ProtoReflect.Descriptor instead. +func (*ButtonsResponseMessage) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{9} +} + +func (x *ButtonsResponseMessage) GetResponse() isButtonsResponseMessage_Response { + if x != nil { + return x.Response + } + return nil +} + +func (x *ButtonsResponseMessage) GetSelectedDisplayText() string { + if x != nil { + if x, ok := x.Response.(*ButtonsResponseMessage_SelectedDisplayText); ok { + return x.SelectedDisplayText + } + } + return "" +} + +func (x *ButtonsResponseMessage) GetSelectedButtonID() string { + if x != nil && x.SelectedButtonID != nil { + return *x.SelectedButtonID + } + return "" +} + +func (x *ButtonsResponseMessage) GetContextInfo() *ContextInfo { + if x != nil { + return x.ContextInfo + } + return nil +} + +func (x *ButtonsResponseMessage) GetType() ButtonsResponseMessage_Type { + if x != nil && x.Type != nil { + return *x.Type + } + return ButtonsResponseMessage_UNKNOWN +} + +type isButtonsResponseMessage_Response interface { + isButtonsResponseMessage_Response() +} + +type ButtonsResponseMessage_SelectedDisplayText struct { + SelectedDisplayText string `protobuf:"bytes,2,opt,name=selectedDisplayText,oneof"` +} + +func (*ButtonsResponseMessage_SelectedDisplayText) isButtonsResponseMessage_Response() {} + +type ButtonsMessage struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Types that are valid to be assigned to Header: + // + // *ButtonsMessage_Text + // *ButtonsMessage_DocumentMessage + // *ButtonsMessage_ImageMessage + // *ButtonsMessage_VideoMessage + // *ButtonsMessage_LocationMessage + Header isButtonsMessage_Header `protobuf_oneof:"header"` + ContentText *string `protobuf:"bytes,6,opt,name=contentText" json:"contentText,omitempty"` + FooterText *string `protobuf:"bytes,7,opt,name=footerText" json:"footerText,omitempty"` + ContextInfo *ContextInfo `protobuf:"bytes,8,opt,name=contextInfo" json:"contextInfo,omitempty"` + Buttons []*ButtonsMessage_Button `protobuf:"bytes,9,rep,name=buttons" json:"buttons,omitempty"` + HeaderType *ButtonsMessage_HeaderType `protobuf:"varint,10,opt,name=headerType,enum=WAWebProtobufsE2E.ButtonsMessage_HeaderType" json:"headerType,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ButtonsMessage) Reset() { + *x = ButtonsMessage{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ButtonsMessage) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ButtonsMessage) ProtoMessage() {} + +func (x *ButtonsMessage) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[10] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ButtonsMessage.ProtoReflect.Descriptor instead. +func (*ButtonsMessage) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{10} +} + +func (x *ButtonsMessage) GetHeader() isButtonsMessage_Header { + if x != nil { + return x.Header + } + return nil +} + +func (x *ButtonsMessage) GetText() string { + if x != nil { + if x, ok := x.Header.(*ButtonsMessage_Text); ok { + return x.Text + } + } + return "" +} + +func (x *ButtonsMessage) GetDocumentMessage() *DocumentMessage { + if x != nil { + if x, ok := x.Header.(*ButtonsMessage_DocumentMessage); ok { + return x.DocumentMessage + } + } + return nil +} + +func (x *ButtonsMessage) GetImageMessage() *ImageMessage { + if x != nil { + if x, ok := x.Header.(*ButtonsMessage_ImageMessage); ok { + return x.ImageMessage + } + } + return nil +} + +func (x *ButtonsMessage) GetVideoMessage() *VideoMessage { + if x != nil { + if x, ok := x.Header.(*ButtonsMessage_VideoMessage); ok { + return x.VideoMessage + } + } + return nil +} + +func (x *ButtonsMessage) GetLocationMessage() *LocationMessage { + if x != nil { + if x, ok := x.Header.(*ButtonsMessage_LocationMessage); ok { + return x.LocationMessage + } + } + return nil +} + +func (x *ButtonsMessage) GetContentText() string { + if x != nil && x.ContentText != nil { + return *x.ContentText + } + return "" +} + +func (x *ButtonsMessage) GetFooterText() string { + if x != nil && x.FooterText != nil { + return *x.FooterText + } + return "" +} + +func (x *ButtonsMessage) GetContextInfo() *ContextInfo { + if x != nil { + return x.ContextInfo + } + return nil +} + +func (x *ButtonsMessage) GetButtons() []*ButtonsMessage_Button { + if x != nil { + return x.Buttons + } + return nil +} + +func (x *ButtonsMessage) GetHeaderType() ButtonsMessage_HeaderType { + if x != nil && x.HeaderType != nil { + return *x.HeaderType + } + return ButtonsMessage_UNKNOWN +} + +type isButtonsMessage_Header interface { + isButtonsMessage_Header() +} + +type ButtonsMessage_Text struct { + Text string `protobuf:"bytes,1,opt,name=text,oneof"` +} + +type ButtonsMessage_DocumentMessage struct { + DocumentMessage *DocumentMessage `protobuf:"bytes,2,opt,name=documentMessage,oneof"` +} + +type ButtonsMessage_ImageMessage struct { + ImageMessage *ImageMessage `protobuf:"bytes,3,opt,name=imageMessage,oneof"` +} + +type ButtonsMessage_VideoMessage struct { + VideoMessage *VideoMessage `protobuf:"bytes,4,opt,name=videoMessage,oneof"` +} + +type ButtonsMessage_LocationMessage struct { + LocationMessage *LocationMessage `protobuf:"bytes,5,opt,name=locationMessage,oneof"` +} + +func (*ButtonsMessage_Text) isButtonsMessage_Header() {} + +func (*ButtonsMessage_DocumentMessage) isButtonsMessage_Header() {} + +func (*ButtonsMessage_ImageMessage) isButtonsMessage_Header() {} + +func (*ButtonsMessage_VideoMessage) isButtonsMessage_Header() {} + +func (*ButtonsMessage_LocationMessage) isButtonsMessage_Header() {} + +type SecretEncryptedMessage struct { + state protoimpl.MessageState `protogen:"open.v1"` + TargetMessageKey *waCommon.MessageKey `protobuf:"bytes,1,opt,name=targetMessageKey" json:"targetMessageKey,omitempty"` + EncPayload []byte `protobuf:"bytes,2,opt,name=encPayload" json:"encPayload,omitempty"` + EncIV []byte `protobuf:"bytes,3,opt,name=encIV" json:"encIV,omitempty"` + SecretEncType *SecretEncryptedMessage_SecretEncType `protobuf:"varint,4,opt,name=secretEncType,enum=WAWebProtobufsE2E.SecretEncryptedMessage_SecretEncType" json:"secretEncType,omitempty"` + RemoteKeyID *string `protobuf:"bytes,5,opt,name=remoteKeyID" json:"remoteKeyID,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *SecretEncryptedMessage) Reset() { + *x = SecretEncryptedMessage{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *SecretEncryptedMessage) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SecretEncryptedMessage) ProtoMessage() {} + +func (x *SecretEncryptedMessage) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[11] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SecretEncryptedMessage.ProtoReflect.Descriptor instead. +func (*SecretEncryptedMessage) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{11} +} + +func (x *SecretEncryptedMessage) GetTargetMessageKey() *waCommon.MessageKey { + if x != nil { + return x.TargetMessageKey + } + return nil +} + +func (x *SecretEncryptedMessage) GetEncPayload() []byte { + if x != nil { + return x.EncPayload + } + return nil +} + +func (x *SecretEncryptedMessage) GetEncIV() []byte { + if x != nil { + return x.EncIV + } + return nil +} + +func (x *SecretEncryptedMessage) GetSecretEncType() SecretEncryptedMessage_SecretEncType { + if x != nil && x.SecretEncType != nil { + return *x.SecretEncType + } + return SecretEncryptedMessage_UNKNOWN +} + +func (x *SecretEncryptedMessage) GetRemoteKeyID() string { + if x != nil && x.RemoteKeyID != nil { + return *x.RemoteKeyID + } + return "" +} + +type GroupInviteMessage struct { + state protoimpl.MessageState `protogen:"open.v1"` + GroupJID *string `protobuf:"bytes,1,opt,name=groupJID" json:"groupJID,omitempty"` + InviteCode *string `protobuf:"bytes,2,opt,name=inviteCode" json:"inviteCode,omitempty"` + InviteExpiration *int64 `protobuf:"varint,3,opt,name=inviteExpiration" json:"inviteExpiration,omitempty"` + GroupName *string `protobuf:"bytes,4,opt,name=groupName" json:"groupName,omitempty"` + JPEGThumbnail []byte `protobuf:"bytes,5,opt,name=JPEGThumbnail" json:"JPEGThumbnail,omitempty"` + Caption *string `protobuf:"bytes,6,opt,name=caption" json:"caption,omitempty"` + ContextInfo *ContextInfo `protobuf:"bytes,7,opt,name=contextInfo" json:"contextInfo,omitempty"` + GroupType *GroupInviteMessage_GroupType `protobuf:"varint,8,opt,name=groupType,enum=WAWebProtobufsE2E.GroupInviteMessage_GroupType" json:"groupType,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *GroupInviteMessage) Reset() { + *x = GroupInviteMessage{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *GroupInviteMessage) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GroupInviteMessage) ProtoMessage() {} + +func (x *GroupInviteMessage) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[12] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GroupInviteMessage.ProtoReflect.Descriptor instead. +func (*GroupInviteMessage) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{12} +} + +func (x *GroupInviteMessage) GetGroupJID() string { + if x != nil && x.GroupJID != nil { + return *x.GroupJID + } + return "" +} + +func (x *GroupInviteMessage) GetInviteCode() string { + if x != nil && x.InviteCode != nil { + return *x.InviteCode + } + return "" +} + +func (x *GroupInviteMessage) GetInviteExpiration() int64 { + if x != nil && x.InviteExpiration != nil { + return *x.InviteExpiration + } + return 0 +} + +func (x *GroupInviteMessage) GetGroupName() string { + if x != nil && x.GroupName != nil { + return *x.GroupName + } + return "" +} + +func (x *GroupInviteMessage) GetJPEGThumbnail() []byte { + if x != nil { + return x.JPEGThumbnail + } + return nil +} + +func (x *GroupInviteMessage) GetCaption() string { + if x != nil && x.Caption != nil { + return *x.Caption + } + return "" +} + +func (x *GroupInviteMessage) GetContextInfo() *ContextInfo { + if x != nil { + return x.ContextInfo + } + return nil +} + +func (x *GroupInviteMessage) GetGroupType() GroupInviteMessage_GroupType { + if x != nil && x.GroupType != nil { + return *x.GroupType + } + return GroupInviteMessage_DEFAULT +} + +type InteractiveResponseMessage struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Types that are valid to be assigned to InteractiveResponseMessage: + // + // *InteractiveResponseMessage_NativeFlowResponseMessage_ + InteractiveResponseMessage isInteractiveResponseMessage_InteractiveResponseMessage `protobuf_oneof:"interactiveResponseMessage"` + Body *InteractiveResponseMessage_Body `protobuf:"bytes,1,opt,name=body" json:"body,omitempty"` + ContextInfo *ContextInfo `protobuf:"bytes,15,opt,name=contextInfo" json:"contextInfo,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *InteractiveResponseMessage) Reset() { + *x = InteractiveResponseMessage{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *InteractiveResponseMessage) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*InteractiveResponseMessage) ProtoMessage() {} + +func (x *InteractiveResponseMessage) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[13] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use InteractiveResponseMessage.ProtoReflect.Descriptor instead. +func (*InteractiveResponseMessage) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{13} +} + +func (x *InteractiveResponseMessage) GetInteractiveResponseMessage() isInteractiveResponseMessage_InteractiveResponseMessage { + if x != nil { + return x.InteractiveResponseMessage + } + return nil +} + +func (x *InteractiveResponseMessage) GetNativeFlowResponseMessage() *InteractiveResponseMessage_NativeFlowResponseMessage { + if x != nil { + if x, ok := x.InteractiveResponseMessage.(*InteractiveResponseMessage_NativeFlowResponseMessage_); ok { + return x.NativeFlowResponseMessage + } + } + return nil +} + +func (x *InteractiveResponseMessage) GetBody() *InteractiveResponseMessage_Body { + if x != nil { + return x.Body + } + return nil +} + +func (x *InteractiveResponseMessage) GetContextInfo() *ContextInfo { + if x != nil { + return x.ContextInfo + } + return nil +} + +type isInteractiveResponseMessage_InteractiveResponseMessage interface { + isInteractiveResponseMessage_InteractiveResponseMessage() +} + +type InteractiveResponseMessage_NativeFlowResponseMessage_ struct { + NativeFlowResponseMessage *InteractiveResponseMessage_NativeFlowResponseMessage `protobuf:"bytes,2,opt,name=nativeFlowResponseMessage,oneof"` +} + +func (*InteractiveResponseMessage_NativeFlowResponseMessage_) isInteractiveResponseMessage_InteractiveResponseMessage() { +} + +type InteractiveMessage struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Types that are valid to be assigned to InteractiveMessage: + // + // *InteractiveMessage_ShopStorefrontMessage + // *InteractiveMessage_CollectionMessage_ + // *InteractiveMessage_NativeFlowMessage_ + // *InteractiveMessage_CarouselMessage_ + InteractiveMessage isInteractiveMessage_InteractiveMessage `protobuf_oneof:"interactiveMessage"` + Header *InteractiveMessage_Header `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"` + Body *InteractiveMessage_Body `protobuf:"bytes,2,opt,name=body" json:"body,omitempty"` + Footer *InteractiveMessage_Footer `protobuf:"bytes,3,opt,name=footer" json:"footer,omitempty"` + BloksWidget *InteractiveMessage_BloksWidget `protobuf:"bytes,8,opt,name=bloksWidget" json:"bloksWidget,omitempty"` + ContextInfo *ContextInfo `protobuf:"bytes,15,opt,name=contextInfo" json:"contextInfo,omitempty"` + UrlTrackingMap *UrlTrackingMap `protobuf:"bytes,16,opt,name=urlTrackingMap" json:"urlTrackingMap,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *InteractiveMessage) Reset() { + *x = InteractiveMessage{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *InteractiveMessage) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*InteractiveMessage) ProtoMessage() {} + +func (x *InteractiveMessage) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[14] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use InteractiveMessage.ProtoReflect.Descriptor instead. +func (*InteractiveMessage) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{14} +} + +func (x *InteractiveMessage) GetInteractiveMessage() isInteractiveMessage_InteractiveMessage { + if x != nil { + return x.InteractiveMessage + } + return nil +} + +func (x *InteractiveMessage) GetShopStorefrontMessage() *InteractiveMessage_ShopMessage { + if x != nil { + if x, ok := x.InteractiveMessage.(*InteractiveMessage_ShopStorefrontMessage); ok { + return x.ShopStorefrontMessage + } + } + return nil +} + +func (x *InteractiveMessage) GetCollectionMessage() *InteractiveMessage_CollectionMessage { + if x != nil { + if x, ok := x.InteractiveMessage.(*InteractiveMessage_CollectionMessage_); ok { + return x.CollectionMessage + } + } + return nil +} + +func (x *InteractiveMessage) GetNativeFlowMessage() *InteractiveMessage_NativeFlowMessage { + if x != nil { + if x, ok := x.InteractiveMessage.(*InteractiveMessage_NativeFlowMessage_); ok { + return x.NativeFlowMessage + } + } + return nil +} + +func (x *InteractiveMessage) GetCarouselMessage() *InteractiveMessage_CarouselMessage { + if x != nil { + if x, ok := x.InteractiveMessage.(*InteractiveMessage_CarouselMessage_); ok { + return x.CarouselMessage + } + } + return nil +} + +func (x *InteractiveMessage) GetHeader() *InteractiveMessage_Header { + if x != nil { + return x.Header + } + return nil +} + +func (x *InteractiveMessage) GetBody() *InteractiveMessage_Body { + if x != nil { + return x.Body + } + return nil +} + +func (x *InteractiveMessage) GetFooter() *InteractiveMessage_Footer { + if x != nil { + return x.Footer + } + return nil +} + +func (x *InteractiveMessage) GetBloksWidget() *InteractiveMessage_BloksWidget { + if x != nil { + return x.BloksWidget + } + return nil +} + +func (x *InteractiveMessage) GetContextInfo() *ContextInfo { + if x != nil { + return x.ContextInfo + } + return nil +} + +func (x *InteractiveMessage) GetUrlTrackingMap() *UrlTrackingMap { + if x != nil { + return x.UrlTrackingMap + } + return nil +} + +type isInteractiveMessage_InteractiveMessage interface { + isInteractiveMessage_InteractiveMessage() +} + +type InteractiveMessage_ShopStorefrontMessage struct { + ShopStorefrontMessage *InteractiveMessage_ShopMessage `protobuf:"bytes,4,opt,name=shopStorefrontMessage,oneof"` +} + +type InteractiveMessage_CollectionMessage_ struct { + CollectionMessage *InteractiveMessage_CollectionMessage `protobuf:"bytes,5,opt,name=collectionMessage,oneof"` +} + +type InteractiveMessage_NativeFlowMessage_ struct { + NativeFlowMessage *InteractiveMessage_NativeFlowMessage `protobuf:"bytes,6,opt,name=nativeFlowMessage,oneof"` +} + +type InteractiveMessage_CarouselMessage_ struct { + CarouselMessage *InteractiveMessage_CarouselMessage `protobuf:"bytes,7,opt,name=carouselMessage,oneof"` +} + +func (*InteractiveMessage_ShopStorefrontMessage) isInteractiveMessage_InteractiveMessage() {} + +func (*InteractiveMessage_CollectionMessage_) isInteractiveMessage_InteractiveMessage() {} + +func (*InteractiveMessage_NativeFlowMessage_) isInteractiveMessage_InteractiveMessage() {} + +func (*InteractiveMessage_CarouselMessage_) isInteractiveMessage_InteractiveMessage() {} + +type ListResponseMessage struct { + state protoimpl.MessageState `protogen:"open.v1"` + Title *string `protobuf:"bytes,1,opt,name=title" json:"title,omitempty"` + ListType *ListResponseMessage_ListType `protobuf:"varint,2,opt,name=listType,enum=WAWebProtobufsE2E.ListResponseMessage_ListType" json:"listType,omitempty"` + SingleSelectReply *ListResponseMessage_SingleSelectReply `protobuf:"bytes,3,opt,name=singleSelectReply" json:"singleSelectReply,omitempty"` + ContextInfo *ContextInfo `protobuf:"bytes,4,opt,name=contextInfo" json:"contextInfo,omitempty"` + Description *string `protobuf:"bytes,5,opt,name=description" json:"description,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ListResponseMessage) Reset() { + *x = ListResponseMessage{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ListResponseMessage) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListResponseMessage) ProtoMessage() {} + +func (x *ListResponseMessage) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[15] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListResponseMessage.ProtoReflect.Descriptor instead. +func (*ListResponseMessage) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{15} +} + +func (x *ListResponseMessage) GetTitle() string { + if x != nil && x.Title != nil { + return *x.Title + } + return "" +} + +func (x *ListResponseMessage) GetListType() ListResponseMessage_ListType { + if x != nil && x.ListType != nil { + return *x.ListType + } + return ListResponseMessage_UNKNOWN +} + +func (x *ListResponseMessage) GetSingleSelectReply() *ListResponseMessage_SingleSelectReply { + if x != nil { + return x.SingleSelectReply + } + return nil +} + +func (x *ListResponseMessage) GetContextInfo() *ContextInfo { + if x != nil { + return x.ContextInfo + } + return nil +} + +func (x *ListResponseMessage) GetDescription() string { + if x != nil && x.Description != nil { + return *x.Description + } + return "" +} + +type ListMessage struct { + state protoimpl.MessageState `protogen:"open.v1"` + Title *string `protobuf:"bytes,1,opt,name=title" json:"title,omitempty"` + Description *string `protobuf:"bytes,2,opt,name=description" json:"description,omitempty"` + ButtonText *string `protobuf:"bytes,3,opt,name=buttonText" json:"buttonText,omitempty"` + ListType *ListMessage_ListType `protobuf:"varint,4,opt,name=listType,enum=WAWebProtobufsE2E.ListMessage_ListType" json:"listType,omitempty"` + Sections []*ListMessage_Section `protobuf:"bytes,5,rep,name=sections" json:"sections,omitempty"` + ProductListInfo *ListMessage_ProductListInfo `protobuf:"bytes,6,opt,name=productListInfo" json:"productListInfo,omitempty"` + FooterText *string `protobuf:"bytes,7,opt,name=footerText" json:"footerText,omitempty"` + ContextInfo *ContextInfo `protobuf:"bytes,8,opt,name=contextInfo" json:"contextInfo,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ListMessage) Reset() { + *x = ListMessage{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[16] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ListMessage) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ListMessage) ProtoMessage() {} + +func (x *ListMessage) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[16] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ListMessage.ProtoReflect.Descriptor instead. +func (*ListMessage) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{16} +} + +func (x *ListMessage) GetTitle() string { + if x != nil && x.Title != nil { + return *x.Title + } + return "" +} + +func (x *ListMessage) GetDescription() string { + if x != nil && x.Description != nil { + return *x.Description + } + return "" +} + +func (x *ListMessage) GetButtonText() string { + if x != nil && x.ButtonText != nil { + return *x.ButtonText + } + return "" +} + +func (x *ListMessage) GetListType() ListMessage_ListType { + if x != nil && x.ListType != nil { + return *x.ListType + } + return ListMessage_UNKNOWN +} + +func (x *ListMessage) GetSections() []*ListMessage_Section { + if x != nil { + return x.Sections + } + return nil +} + +func (x *ListMessage) GetProductListInfo() *ListMessage_ProductListInfo { + if x != nil { + return x.ProductListInfo + } + return nil +} + +func (x *ListMessage) GetFooterText() string { + if x != nil && x.FooterText != nil { + return *x.FooterText } + return "" } -func (x *CallLogMessage) String() string { +func (x *ListMessage) GetContextInfo() *ContextInfo { + if x != nil { + return x.ContextInfo + } + return nil +} + +type OrderMessage struct { + state protoimpl.MessageState `protogen:"open.v1"` + OrderID *string `protobuf:"bytes,1,opt,name=orderID" json:"orderID,omitempty"` + Thumbnail []byte `protobuf:"bytes,2,opt,name=thumbnail" json:"thumbnail,omitempty"` + ItemCount *int32 `protobuf:"varint,3,opt,name=itemCount" json:"itemCount,omitempty"` + Status *OrderMessage_OrderStatus `protobuf:"varint,4,opt,name=status,enum=WAWebProtobufsE2E.OrderMessage_OrderStatus" json:"status,omitempty"` + Surface *OrderMessage_OrderSurface `protobuf:"varint,5,opt,name=surface,enum=WAWebProtobufsE2E.OrderMessage_OrderSurface" json:"surface,omitempty"` + Message *string `protobuf:"bytes,6,opt,name=message" json:"message,omitempty"` + OrderTitle *string `protobuf:"bytes,7,opt,name=orderTitle" json:"orderTitle,omitempty"` + SellerJID *string `protobuf:"bytes,8,opt,name=sellerJID" json:"sellerJID,omitempty"` + Token *string `protobuf:"bytes,9,opt,name=token" json:"token,omitempty"` + TotalAmount1000 *int64 `protobuf:"varint,10,opt,name=totalAmount1000" json:"totalAmount1000,omitempty"` + TotalCurrencyCode *string `protobuf:"bytes,11,opt,name=totalCurrencyCode" json:"totalCurrencyCode,omitempty"` + ContextInfo *ContextInfo `protobuf:"bytes,17,opt,name=contextInfo" json:"contextInfo,omitempty"` + MessageVersion *int32 `protobuf:"varint,12,opt,name=messageVersion" json:"messageVersion,omitempty"` + OrderRequestMessageID *waCommon.MessageKey `protobuf:"bytes,13,opt,name=orderRequestMessageID" json:"orderRequestMessageID,omitempty"` + CatalogType *string `protobuf:"bytes,15,opt,name=catalogType" json:"catalogType,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *OrderMessage) Reset() { + *x = OrderMessage{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[17] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *OrderMessage) String() string { return protoimpl.X.MessageStringOf(x) } -func (*CallLogMessage) ProtoMessage() {} +func (*OrderMessage) ProtoMessage() {} -func (x *CallLogMessage) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { +func (x *OrderMessage) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[17] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -3712,73 +5965,283 @@ func (x *CallLogMessage) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use CallLogMessage.ProtoReflect.Descriptor instead. -func (*CallLogMessage) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{2} +// Deprecated: Use OrderMessage.ProtoReflect.Descriptor instead. +func (*OrderMessage) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{17} } -func (x *CallLogMessage) GetIsVideo() bool { - if x != nil && x.IsVideo != nil { - return *x.IsVideo +func (x *OrderMessage) GetOrderID() string { + if x != nil && x.OrderID != nil { + return *x.OrderID } - return false + return "" } -func (x *CallLogMessage) GetCallOutcome() CallLogMessage_CallOutcome { - if x != nil && x.CallOutcome != nil { - return *x.CallOutcome +func (x *OrderMessage) GetThumbnail() []byte { + if x != nil { + return x.Thumbnail } - return CallLogMessage_CONNECTED + return nil } -func (x *CallLogMessage) GetDurationSecs() int64 { - if x != nil && x.DurationSecs != nil { - return *x.DurationSecs +func (x *OrderMessage) GetItemCount() int32 { + if x != nil && x.ItemCount != nil { + return *x.ItemCount } return 0 } -func (x *CallLogMessage) GetCallType() CallLogMessage_CallType { - if x != nil && x.CallType != nil { - return *x.CallType +func (x *OrderMessage) GetStatus() OrderMessage_OrderStatus { + if x != nil && x.Status != nil { + return *x.Status } - return CallLogMessage_REGULAR + return OrderMessage_INQUIRY } -func (x *CallLogMessage) GetParticipants() []*CallLogMessage_CallParticipant { +func (x *OrderMessage) GetSurface() OrderMessage_OrderSurface { + if x != nil && x.Surface != nil { + return *x.Surface + } + return OrderMessage_CATALOG +} + +func (x *OrderMessage) GetMessage() string { + if x != nil && x.Message != nil { + return *x.Message + } + return "" +} + +func (x *OrderMessage) GetOrderTitle() string { + if x != nil && x.OrderTitle != nil { + return *x.OrderTitle + } + return "" +} + +func (x *OrderMessage) GetSellerJID() string { + if x != nil && x.SellerJID != nil { + return *x.SellerJID + } + return "" +} + +func (x *OrderMessage) GetToken() string { + if x != nil && x.Token != nil { + return *x.Token + } + return "" +} + +func (x *OrderMessage) GetTotalAmount1000() int64 { + if x != nil && x.TotalAmount1000 != nil { + return *x.TotalAmount1000 + } + return 0 +} + +func (x *OrderMessage) GetTotalCurrencyCode() string { + if x != nil && x.TotalCurrencyCode != nil { + return *x.TotalCurrencyCode + } + return "" +} + +func (x *OrderMessage) GetContextInfo() *ContextInfo { if x != nil { - return x.Participants + return x.ContextInfo } return nil } -type ScheduledCallEditMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +func (x *OrderMessage) GetMessageVersion() int32 { + if x != nil && x.MessageVersion != nil { + return *x.MessageVersion + } + return 0 +} - Key *waCommon.MessageKey `protobuf:"bytes,1,opt,name=key" json:"key,omitempty"` - EditType *ScheduledCallEditMessage_EditType `protobuf:"varint,2,opt,name=editType,enum=WAWebProtobufsE2E.ScheduledCallEditMessage_EditType" json:"editType,omitempty"` +func (x *OrderMessage) GetOrderRequestMessageID() *waCommon.MessageKey { + if x != nil { + return x.OrderRequestMessageID + } + return nil } -func (x *ScheduledCallEditMessage) Reset() { - *x = ScheduledCallEditMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[3] +func (x *OrderMessage) GetCatalogType() string { + if x != nil && x.CatalogType != nil { + return *x.CatalogType + } + return "" +} + +type StatusQuotedMessage struct { + state protoimpl.MessageState `protogen:"open.v1"` + Type *StatusQuotedMessage_StatusQuotedMessageType `protobuf:"varint,1,opt,name=type,enum=WAWebProtobufsE2E.StatusQuotedMessage_StatusQuotedMessageType" json:"type,omitempty"` + Text *string `protobuf:"bytes,2,opt,name=text" json:"text,omitempty"` + Thumbnail []byte `protobuf:"bytes,3,opt,name=thumbnail" json:"thumbnail,omitempty"` + OriginalStatusID *waCommon.MessageKey `protobuf:"bytes,4,opt,name=originalStatusID" json:"originalStatusID,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *StatusQuotedMessage) Reset() { + *x = StatusQuotedMessage{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[18] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *StatusQuotedMessage) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StatusQuotedMessage) ProtoMessage() {} + +func (x *StatusQuotedMessage) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[18] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StatusQuotedMessage.ProtoReflect.Descriptor instead. +func (*StatusQuotedMessage) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{18} +} + +func (x *StatusQuotedMessage) GetType() StatusQuotedMessage_StatusQuotedMessageType { + if x != nil && x.Type != nil { + return *x.Type + } + return StatusQuotedMessage_QUESTION_ANSWER +} + +func (x *StatusQuotedMessage) GetText() string { + if x != nil && x.Text != nil { + return *x.Text + } + return "" +} + +func (x *StatusQuotedMessage) GetThumbnail() []byte { + if x != nil { + return x.Thumbnail + } + return nil +} + +func (x *StatusQuotedMessage) GetOriginalStatusID() *waCommon.MessageKey { + if x != nil { + return x.OriginalStatusID + } + return nil +} + +type PaymentInviteMessage struct { + state protoimpl.MessageState `protogen:"open.v1"` + ServiceType *PaymentInviteMessage_ServiceType `protobuf:"varint,1,opt,name=serviceType,enum=WAWebProtobufsE2E.PaymentInviteMessage_ServiceType" json:"serviceType,omitempty"` + ExpiryTimestamp *int64 `protobuf:"varint,2,opt,name=expiryTimestamp" json:"expiryTimestamp,omitempty"` + IncentiveEligible *bool `protobuf:"varint,3,opt,name=incentiveEligible" json:"incentiveEligible,omitempty"` + ReferralID *string `protobuf:"bytes,4,opt,name=referralID" json:"referralID,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *PaymentInviteMessage) Reset() { + *x = PaymentInviteMessage{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[19] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *PaymentInviteMessage) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PaymentInviteMessage) ProtoMessage() {} + +func (x *PaymentInviteMessage) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[19] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PaymentInviteMessage.ProtoReflect.Descriptor instead. +func (*PaymentInviteMessage) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{19} +} + +func (x *PaymentInviteMessage) GetServiceType() PaymentInviteMessage_ServiceType { + if x != nil && x.ServiceType != nil { + return *x.ServiceType + } + return PaymentInviteMessage_UNKNOWN +} + +func (x *PaymentInviteMessage) GetExpiryTimestamp() int64 { + if x != nil && x.ExpiryTimestamp != nil { + return *x.ExpiryTimestamp + } + return 0 +} + +func (x *PaymentInviteMessage) GetIncentiveEligible() bool { + if x != nil && x.IncentiveEligible != nil { + return *x.IncentiveEligible + } + return false +} + +func (x *PaymentInviteMessage) GetReferralID() string { + if x != nil && x.ReferralID != nil { + return *x.ReferralID } + return "" +} + +type HighlyStructuredMessage struct { + state protoimpl.MessageState `protogen:"open.v1"` + Namespace *string `protobuf:"bytes,1,opt,name=namespace" json:"namespace,omitempty"` + ElementName *string `protobuf:"bytes,2,opt,name=elementName" json:"elementName,omitempty"` + Params []string `protobuf:"bytes,3,rep,name=params" json:"params,omitempty"` + FallbackLg *string `protobuf:"bytes,4,opt,name=fallbackLg" json:"fallbackLg,omitempty"` + FallbackLc *string `protobuf:"bytes,5,opt,name=fallbackLc" json:"fallbackLc,omitempty"` + LocalizableParams []*HighlyStructuredMessage_HSMLocalizableParameter `protobuf:"bytes,6,rep,name=localizableParams" json:"localizableParams,omitempty"` + DeterministicLg *string `protobuf:"bytes,7,opt,name=deterministicLg" json:"deterministicLg,omitempty"` + DeterministicLc *string `protobuf:"bytes,8,opt,name=deterministicLc" json:"deterministicLc,omitempty"` + HydratedHsm *TemplateMessage `protobuf:"bytes,9,opt,name=hydratedHsm" json:"hydratedHsm,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *HighlyStructuredMessage) Reset() { + *x = HighlyStructuredMessage{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[20] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *ScheduledCallEditMessage) String() string { +func (x *HighlyStructuredMessage) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ScheduledCallEditMessage) ProtoMessage() {} +func (*HighlyStructuredMessage) ProtoMessage() {} -func (x *ScheduledCallEditMessage) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { +func (x *HighlyStructuredMessage) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[20] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -3788,116 +6251,99 @@ func (x *ScheduledCallEditMessage) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ScheduledCallEditMessage.ProtoReflect.Descriptor instead. -func (*ScheduledCallEditMessage) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{3} +// Deprecated: Use HighlyStructuredMessage.ProtoReflect.Descriptor instead. +func (*HighlyStructuredMessage) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{20} } -func (x *ScheduledCallEditMessage) GetKey() *waCommon.MessageKey { - if x != nil { - return x.Key +func (x *HighlyStructuredMessage) GetNamespace() string { + if x != nil && x.Namespace != nil { + return *x.Namespace } - return nil + return "" } -func (x *ScheduledCallEditMessage) GetEditType() ScheduledCallEditMessage_EditType { - if x != nil && x.EditType != nil { - return *x.EditType +func (x *HighlyStructuredMessage) GetElementName() string { + if x != nil && x.ElementName != nil { + return *x.ElementName } - return ScheduledCallEditMessage_UNKNOWN -} - -type ScheduledCallCreationMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - ScheduledTimestampMS *int64 `protobuf:"varint,1,opt,name=scheduledTimestampMS" json:"scheduledTimestampMS,omitempty"` - CallType *ScheduledCallCreationMessage_CallType `protobuf:"varint,2,opt,name=callType,enum=WAWebProtobufsE2E.ScheduledCallCreationMessage_CallType" json:"callType,omitempty"` - Title *string `protobuf:"bytes,3,opt,name=title" json:"title,omitempty"` + return "" } -func (x *ScheduledCallCreationMessage) Reset() { - *x = ScheduledCallCreationMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) +func (x *HighlyStructuredMessage) GetParams() []string { + if x != nil { + return x.Params } + return nil } -func (x *ScheduledCallCreationMessage) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ScheduledCallCreationMessage) ProtoMessage() {} - -func (x *ScheduledCallCreationMessage) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms +func (x *HighlyStructuredMessage) GetFallbackLg() string { + if x != nil && x.FallbackLg != nil { + return *x.FallbackLg } - return mi.MessageOf(x) + return "" } -// Deprecated: Use ScheduledCallCreationMessage.ProtoReflect.Descriptor instead. -func (*ScheduledCallCreationMessage) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{4} +func (x *HighlyStructuredMessage) GetFallbackLc() string { + if x != nil && x.FallbackLc != nil { + return *x.FallbackLc + } + return "" } -func (x *ScheduledCallCreationMessage) GetScheduledTimestampMS() int64 { - if x != nil && x.ScheduledTimestampMS != nil { - return *x.ScheduledTimestampMS +func (x *HighlyStructuredMessage) GetLocalizableParams() []*HighlyStructuredMessage_HSMLocalizableParameter { + if x != nil { + return x.LocalizableParams } - return 0 + return nil } -func (x *ScheduledCallCreationMessage) GetCallType() ScheduledCallCreationMessage_CallType { - if x != nil && x.CallType != nil { - return *x.CallType +func (x *HighlyStructuredMessage) GetDeterministicLg() string { + if x != nil && x.DeterministicLg != nil { + return *x.DeterministicLg } - return ScheduledCallCreationMessage_UNKNOWN + return "" } -func (x *ScheduledCallCreationMessage) GetTitle() string { - if x != nil && x.Title != nil { - return *x.Title +func (x *HighlyStructuredMessage) GetDeterministicLc() string { + if x != nil && x.DeterministicLc != nil { + return *x.DeterministicLc } return "" } -type EventResponseMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +func (x *HighlyStructuredMessage) GetHydratedHsm() *TemplateMessage { + if x != nil { + return x.HydratedHsm + } + return nil +} - Response *EventResponseMessage_EventResponseType `protobuf:"varint,1,opt,name=response,enum=WAWebProtobufsE2E.EventResponseMessage_EventResponseType" json:"response,omitempty"` - TimestampMS *int64 `protobuf:"varint,2,opt,name=timestampMS" json:"timestampMS,omitempty"` - ExtraGuestCount *int32 `protobuf:"varint,3,opt,name=extraGuestCount" json:"extraGuestCount,omitempty"` +type PeerDataOperationRequestResponseMessage struct { + state protoimpl.MessageState `protogen:"open.v1"` + PeerDataOperationRequestType *PeerDataOperationRequestType `protobuf:"varint,1,opt,name=peerDataOperationRequestType,enum=WAWebProtobufsE2E.PeerDataOperationRequestType" json:"peerDataOperationRequestType,omitempty"` + StanzaID *string `protobuf:"bytes,2,opt,name=stanzaID" json:"stanzaID,omitempty"` + PeerDataOperationResult []*PeerDataOperationRequestResponseMessage_PeerDataOperationResult `protobuf:"bytes,3,rep,name=peerDataOperationResult" json:"peerDataOperationResult,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *EventResponseMessage) Reset() { - *x = EventResponseMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *PeerDataOperationRequestResponseMessage) Reset() { + *x = PeerDataOperationRequestResponseMessage{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[21] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *EventResponseMessage) String() string { +func (x *PeerDataOperationRequestResponseMessage) String() string { return protoimpl.X.MessageStringOf(x) } -func (*EventResponseMessage) ProtoMessage() {} +func (*PeerDataOperationRequestResponseMessage) ProtoMessage() {} -func (x *EventResponseMessage) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { +func (x *PeerDataOperationRequestResponseMessage) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[21] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -3907,60 +6353,64 @@ func (x *EventResponseMessage) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use EventResponseMessage.ProtoReflect.Descriptor instead. -func (*EventResponseMessage) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{5} +// Deprecated: Use PeerDataOperationRequestResponseMessage.ProtoReflect.Descriptor instead. +func (*PeerDataOperationRequestResponseMessage) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{21} } -func (x *EventResponseMessage) GetResponse() EventResponseMessage_EventResponseType { - if x != nil && x.Response != nil { - return *x.Response +func (x *PeerDataOperationRequestResponseMessage) GetPeerDataOperationRequestType() PeerDataOperationRequestType { + if x != nil && x.PeerDataOperationRequestType != nil { + return *x.PeerDataOperationRequestType } - return EventResponseMessage_UNKNOWN + return PeerDataOperationRequestType_UPLOAD_STICKER } -func (x *EventResponseMessage) GetTimestampMS() int64 { - if x != nil && x.TimestampMS != nil { - return *x.TimestampMS +func (x *PeerDataOperationRequestResponseMessage) GetStanzaID() string { + if x != nil && x.StanzaID != nil { + return *x.StanzaID } - return 0 + return "" } -func (x *EventResponseMessage) GetExtraGuestCount() int32 { - if x != nil && x.ExtraGuestCount != nil { - return *x.ExtraGuestCount +func (x *PeerDataOperationRequestResponseMessage) GetPeerDataOperationResult() []*PeerDataOperationRequestResponseMessage_PeerDataOperationResult { + if x != nil { + return x.PeerDataOperationResult } - return 0 + return nil } -type PinInChatMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Key *waCommon.MessageKey `protobuf:"bytes,1,opt,name=key" json:"key,omitempty"` - Type *PinInChatMessage_Type `protobuf:"varint,2,opt,name=type,enum=WAWebProtobufsE2E.PinInChatMessage_Type" json:"type,omitempty"` - SenderTimestampMS *int64 `protobuf:"varint,3,opt,name=senderTimestampMS" json:"senderTimestampMS,omitempty"` +type PeerDataOperationRequestMessage struct { + state protoimpl.MessageState `protogen:"open.v1"` + PeerDataOperationRequestType *PeerDataOperationRequestType `protobuf:"varint,1,opt,name=peerDataOperationRequestType,enum=WAWebProtobufsE2E.PeerDataOperationRequestType" json:"peerDataOperationRequestType,omitempty"` + RequestStickerReupload []*PeerDataOperationRequestMessage_RequestStickerReupload `protobuf:"bytes,2,rep,name=requestStickerReupload" json:"requestStickerReupload,omitempty"` + RequestURLPreview []*PeerDataOperationRequestMessage_RequestUrlPreview `protobuf:"bytes,3,rep,name=requestURLPreview" json:"requestURLPreview,omitempty"` + HistorySyncOnDemandRequest *PeerDataOperationRequestMessage_HistorySyncOnDemandRequest `protobuf:"bytes,4,opt,name=historySyncOnDemandRequest" json:"historySyncOnDemandRequest,omitempty"` + PlaceholderMessageResendRequest []*PeerDataOperationRequestMessage_PlaceholderMessageResendRequest `protobuf:"bytes,5,rep,name=placeholderMessageResendRequest" json:"placeholderMessageResendRequest,omitempty"` + FullHistorySyncOnDemandRequest *PeerDataOperationRequestMessage_FullHistorySyncOnDemandRequest `protobuf:"bytes,6,opt,name=fullHistorySyncOnDemandRequest" json:"fullHistorySyncOnDemandRequest,omitempty"` + SyncdCollectionFatalRecoveryRequest *PeerDataOperationRequestMessage_SyncDCollectionFatalRecoveryRequest `protobuf:"bytes,7,opt,name=syncdCollectionFatalRecoveryRequest" json:"syncdCollectionFatalRecoveryRequest,omitempty"` + HistorySyncChunkRetryRequest *PeerDataOperationRequestMessage_HistorySyncChunkRetryRequest `protobuf:"bytes,8,opt,name=historySyncChunkRetryRequest" json:"historySyncChunkRetryRequest,omitempty"` + GalaxyFlowAction *PeerDataOperationRequestMessage_GalaxyFlowAction `protobuf:"bytes,9,opt,name=galaxyFlowAction" json:"galaxyFlowAction,omitempty"` + CompanionCanonicalUserNonceFetchRequest *PeerDataOperationRequestMessage_CompanionCanonicalUserNonceFetchRequest `protobuf:"bytes,10,opt,name=companionCanonicalUserNonceFetchRequest" json:"companionCanonicalUserNonceFetchRequest,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *PinInChatMessage) Reset() { - *x = PinInChatMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *PeerDataOperationRequestMessage) Reset() { + *x = PeerDataOperationRequestMessage{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[22] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *PinInChatMessage) String() string { +func (x *PeerDataOperationRequestMessage) String() string { return protoimpl.X.MessageStringOf(x) } -func (*PinInChatMessage) ProtoMessage() {} +func (*PeerDataOperationRequestMessage) ProtoMessage() {} -func (x *PinInChatMessage) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[6] - if protoimpl.UnsafeEnabled && x != nil { +func (x *PeerDataOperationRequestMessage) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[22] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -3970,161 +6420,173 @@ func (x *PinInChatMessage) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use PinInChatMessage.ProtoReflect.Descriptor instead. -func (*PinInChatMessage) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{6} +// Deprecated: Use PeerDataOperationRequestMessage.ProtoReflect.Descriptor instead. +func (*PeerDataOperationRequestMessage) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{22} } -func (x *PinInChatMessage) GetKey() *waCommon.MessageKey { - if x != nil { - return x.Key +func (x *PeerDataOperationRequestMessage) GetPeerDataOperationRequestType() PeerDataOperationRequestType { + if x != nil && x.PeerDataOperationRequestType != nil { + return *x.PeerDataOperationRequestType } - return nil + return PeerDataOperationRequestType_UPLOAD_STICKER } -func (x *PinInChatMessage) GetType() PinInChatMessage_Type { - if x != nil && x.Type != nil { - return *x.Type +func (x *PeerDataOperationRequestMessage) GetRequestStickerReupload() []*PeerDataOperationRequestMessage_RequestStickerReupload { + if x != nil { + return x.RequestStickerReupload } - return PinInChatMessage_UNKNOWN_TYPE + return nil } -func (x *PinInChatMessage) GetSenderTimestampMS() int64 { - if x != nil && x.SenderTimestampMS != nil { - return *x.SenderTimestampMS +func (x *PeerDataOperationRequestMessage) GetRequestURLPreview() []*PeerDataOperationRequestMessage_RequestUrlPreview { + if x != nil { + return x.RequestURLPreview } - return 0 -} - -type ButtonsResponseMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Types that are assignable to Response: - // - // *ButtonsResponseMessage_SelectedDisplayText - Response isButtonsResponseMessage_Response `protobuf_oneof:"response"` - SelectedButtonID *string `protobuf:"bytes,1,opt,name=selectedButtonID" json:"selectedButtonID,omitempty"` - ContextInfo *ContextInfo `protobuf:"bytes,3,opt,name=contextInfo" json:"contextInfo,omitempty"` - Type *ButtonsResponseMessage_Type `protobuf:"varint,4,opt,name=type,enum=WAWebProtobufsE2E.ButtonsResponseMessage_Type" json:"type,omitempty"` + return nil } -func (x *ButtonsResponseMessage) Reset() { - *x = ButtonsResponseMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) +func (x *PeerDataOperationRequestMessage) GetHistorySyncOnDemandRequest() *PeerDataOperationRequestMessage_HistorySyncOnDemandRequest { + if x != nil { + return x.HistorySyncOnDemandRequest } + return nil } -func (x *ButtonsResponseMessage) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ButtonsResponseMessage) ProtoMessage() {} - -func (x *ButtonsResponseMessage) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[7] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms +func (x *PeerDataOperationRequestMessage) GetPlaceholderMessageResendRequest() []*PeerDataOperationRequestMessage_PlaceholderMessageResendRequest { + if x != nil { + return x.PlaceholderMessageResendRequest } - return mi.MessageOf(x) + return nil } -// Deprecated: Use ButtonsResponseMessage.ProtoReflect.Descriptor instead. -func (*ButtonsResponseMessage) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{7} +func (x *PeerDataOperationRequestMessage) GetFullHistorySyncOnDemandRequest() *PeerDataOperationRequestMessage_FullHistorySyncOnDemandRequest { + if x != nil { + return x.FullHistorySyncOnDemandRequest + } + return nil } -func (m *ButtonsResponseMessage) GetResponse() isButtonsResponseMessage_Response { - if m != nil { - return m.Response +func (x *PeerDataOperationRequestMessage) GetSyncdCollectionFatalRecoveryRequest() *PeerDataOperationRequestMessage_SyncDCollectionFatalRecoveryRequest { + if x != nil { + return x.SyncdCollectionFatalRecoveryRequest } return nil } -func (x *ButtonsResponseMessage) GetSelectedDisplayText() string { - if x, ok := x.GetResponse().(*ButtonsResponseMessage_SelectedDisplayText); ok { - return x.SelectedDisplayText +func (x *PeerDataOperationRequestMessage) GetHistorySyncChunkRetryRequest() *PeerDataOperationRequestMessage_HistorySyncChunkRetryRequest { + if x != nil { + return x.HistorySyncChunkRetryRequest } - return "" + return nil } -func (x *ButtonsResponseMessage) GetSelectedButtonID() string { - if x != nil && x.SelectedButtonID != nil { - return *x.SelectedButtonID +func (x *PeerDataOperationRequestMessage) GetGalaxyFlowAction() *PeerDataOperationRequestMessage_GalaxyFlowAction { + if x != nil { + return x.GalaxyFlowAction } - return "" + return nil } -func (x *ButtonsResponseMessage) GetContextInfo() *ContextInfo { +func (x *PeerDataOperationRequestMessage) GetCompanionCanonicalUserNonceFetchRequest() *PeerDataOperationRequestMessage_CompanionCanonicalUserNonceFetchRequest { if x != nil { - return x.ContextInfo + return x.CompanionCanonicalUserNonceFetchRequest } return nil } -func (x *ButtonsResponseMessage) GetType() ButtonsResponseMessage_Type { - if x != nil && x.Type != nil { - return *x.Type - } - return ButtonsResponseMessage_UNKNOWN +type RequestWelcomeMessageMetadata struct { + state protoimpl.MessageState `protogen:"open.v1"` + LocalChatState *RequestWelcomeMessageMetadata_LocalChatState `protobuf:"varint,1,opt,name=localChatState,enum=WAWebProtobufsE2E.RequestWelcomeMessageMetadata_LocalChatState" json:"localChatState,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -type isButtonsResponseMessage_Response interface { - isButtonsResponseMessage_Response() +func (x *RequestWelcomeMessageMetadata) Reset() { + *x = RequestWelcomeMessageMetadata{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[23] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -type ButtonsResponseMessage_SelectedDisplayText struct { - SelectedDisplayText string `protobuf:"bytes,2,opt,name=selectedDisplayText,oneof"` +func (x *RequestWelcomeMessageMetadata) String() string { + return protoimpl.X.MessageStringOf(x) } -func (*ButtonsResponseMessage_SelectedDisplayText) isButtonsResponseMessage_Response() {} +func (*RequestWelcomeMessageMetadata) ProtoMessage() {} -type ButtonsMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +func (x *RequestWelcomeMessageMetadata) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[23] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} - // Types that are assignable to Header: - // - // *ButtonsMessage_Text - // *ButtonsMessage_DocumentMessage - // *ButtonsMessage_ImageMessage - // *ButtonsMessage_VideoMessage - // *ButtonsMessage_LocationMessage - Header isButtonsMessage_Header `protobuf_oneof:"header"` - ContentText *string `protobuf:"bytes,6,opt,name=contentText" json:"contentText,omitempty"` - FooterText *string `protobuf:"bytes,7,opt,name=footerText" json:"footerText,omitempty"` - ContextInfo *ContextInfo `protobuf:"bytes,8,opt,name=contextInfo" json:"contextInfo,omitempty"` - Buttons []*ButtonsMessage_Button `protobuf:"bytes,9,rep,name=buttons" json:"buttons,omitempty"` - HeaderType *ButtonsMessage_HeaderType `protobuf:"varint,10,opt,name=headerType,enum=WAWebProtobufsE2E.ButtonsMessage_HeaderType" json:"headerType,omitempty"` +// Deprecated: Use RequestWelcomeMessageMetadata.ProtoReflect.Descriptor instead. +func (*RequestWelcomeMessageMetadata) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{23} } -func (x *ButtonsMessage) Reset() { - *x = ButtonsMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[8] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) +func (x *RequestWelcomeMessageMetadata) GetLocalChatState() RequestWelcomeMessageMetadata_LocalChatState { + if x != nil && x.LocalChatState != nil { + return *x.LocalChatState } + return RequestWelcomeMessageMetadata_EMPTY } -func (x *ButtonsMessage) String() string { +type ProtocolMessage struct { + state protoimpl.MessageState `protogen:"open.v1"` + Key *waCommon.MessageKey `protobuf:"bytes,1,opt,name=key" json:"key,omitempty"` + Type *ProtocolMessage_Type `protobuf:"varint,2,opt,name=type,enum=WAWebProtobufsE2E.ProtocolMessage_Type" json:"type,omitempty"` + EphemeralExpiration *uint32 `protobuf:"varint,4,opt,name=ephemeralExpiration" json:"ephemeralExpiration,omitempty"` + EphemeralSettingTimestamp *int64 `protobuf:"varint,5,opt,name=ephemeralSettingTimestamp" json:"ephemeralSettingTimestamp,omitempty"` + HistorySyncNotification *HistorySyncNotification `protobuf:"bytes,6,opt,name=historySyncNotification" json:"historySyncNotification,omitempty"` + AppStateSyncKeyShare *AppStateSyncKeyShare `protobuf:"bytes,7,opt,name=appStateSyncKeyShare" json:"appStateSyncKeyShare,omitempty"` + AppStateSyncKeyRequest *AppStateSyncKeyRequest `protobuf:"bytes,8,opt,name=appStateSyncKeyRequest" json:"appStateSyncKeyRequest,omitempty"` + InitialSecurityNotificationSettingSync *InitialSecurityNotificationSettingSync `protobuf:"bytes,9,opt,name=initialSecurityNotificationSettingSync" json:"initialSecurityNotificationSettingSync,omitempty"` + AppStateFatalExceptionNotification *AppStateFatalExceptionNotification `protobuf:"bytes,10,opt,name=appStateFatalExceptionNotification" json:"appStateFatalExceptionNotification,omitempty"` + DisappearingMode *DisappearingMode `protobuf:"bytes,11,opt,name=disappearingMode" json:"disappearingMode,omitempty"` + EditedMessage *Message `protobuf:"bytes,14,opt,name=editedMessage" json:"editedMessage,omitempty"` + TimestampMS *int64 `protobuf:"varint,15,opt,name=timestampMS" json:"timestampMS,omitempty"` + PeerDataOperationRequestMessage *PeerDataOperationRequestMessage `protobuf:"bytes,16,opt,name=peerDataOperationRequestMessage" json:"peerDataOperationRequestMessage,omitempty"` + PeerDataOperationRequestResponseMessage *PeerDataOperationRequestResponseMessage `protobuf:"bytes,17,opt,name=peerDataOperationRequestResponseMessage" json:"peerDataOperationRequestResponseMessage,omitempty"` + BotFeedbackMessage *waAICommon.BotFeedbackMessage `protobuf:"bytes,18,opt,name=botFeedbackMessage" json:"botFeedbackMessage,omitempty"` + InvokerJID *string `protobuf:"bytes,19,opt,name=invokerJID" json:"invokerJID,omitempty"` + RequestWelcomeMessageMetadata *RequestWelcomeMessageMetadata `protobuf:"bytes,20,opt,name=requestWelcomeMessageMetadata" json:"requestWelcomeMessageMetadata,omitempty"` + MediaNotifyMessage *MediaNotifyMessage `protobuf:"bytes,21,opt,name=mediaNotifyMessage" json:"mediaNotifyMessage,omitempty"` + CloudApiThreadControlNotification *CloudAPIThreadControlNotification `protobuf:"bytes,22,opt,name=cloudApiThreadControlNotification" json:"cloudApiThreadControlNotification,omitempty"` + LidMigrationMappingSyncMessage *LIDMigrationMappingSyncMessage `protobuf:"bytes,23,opt,name=lidMigrationMappingSyncMessage" json:"lidMigrationMappingSyncMessage,omitempty"` + LimitSharing *waCommon.LimitSharing `protobuf:"bytes,24,opt,name=limitSharing" json:"limitSharing,omitempty"` + AiPsiMetadata []byte `protobuf:"bytes,25,opt,name=aiPsiMetadata" json:"aiPsiMetadata,omitempty"` + AiQueryFanout *AIQueryFanout `protobuf:"bytes,26,opt,name=aiQueryFanout" json:"aiQueryFanout,omitempty"` + MemberLabel *MemberLabel `protobuf:"bytes,27,opt,name=memberLabel" json:"memberLabel,omitempty"` + AiMediaCollectionMessage *waAICommon.AIMediaCollectionMessage `protobuf:"bytes,28,opt,name=aiMediaCollectionMessage" json:"aiMediaCollectionMessage,omitempty"` + AfterReadDurationMS *uint32 `protobuf:"varint,29,opt,name=afterReadDurationMS" json:"afterReadDurationMS,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ProtocolMessage) Reset() { + *x = ProtocolMessage{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[24] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ProtocolMessage) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ButtonsMessage) ProtoMessage() {} +func (*ProtocolMessage) ProtoMessage() {} -func (x *ButtonsMessage) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[8] - if protoimpl.UnsafeEnabled && x != nil { +func (x *ProtocolMessage) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[24] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -4134,226 +6596,221 @@ func (x *ButtonsMessage) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ButtonsMessage.ProtoReflect.Descriptor instead. -func (*ButtonsMessage) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{8} +// Deprecated: Use ProtocolMessage.ProtoReflect.Descriptor instead. +func (*ProtocolMessage) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{24} } -func (m *ButtonsMessage) GetHeader() isButtonsMessage_Header { - if m != nil { - return m.Header +func (x *ProtocolMessage) GetKey() *waCommon.MessageKey { + if x != nil { + return x.Key } return nil } -func (x *ButtonsMessage) GetText() string { - if x, ok := x.GetHeader().(*ButtonsMessage_Text); ok { - return x.Text +func (x *ProtocolMessage) GetType() ProtocolMessage_Type { + if x != nil && x.Type != nil { + return *x.Type } - return "" + return ProtocolMessage_REVOKE } -func (x *ButtonsMessage) GetDocumentMessage() *DocumentMessage { - if x, ok := x.GetHeader().(*ButtonsMessage_DocumentMessage); ok { - return x.DocumentMessage +func (x *ProtocolMessage) GetEphemeralExpiration() uint32 { + if x != nil && x.EphemeralExpiration != nil { + return *x.EphemeralExpiration } - return nil + return 0 } -func (x *ButtonsMessage) GetImageMessage() *ImageMessage { - if x, ok := x.GetHeader().(*ButtonsMessage_ImageMessage); ok { - return x.ImageMessage +func (x *ProtocolMessage) GetEphemeralSettingTimestamp() int64 { + if x != nil && x.EphemeralSettingTimestamp != nil { + return *x.EphemeralSettingTimestamp } - return nil + return 0 } -func (x *ButtonsMessage) GetVideoMessage() *VideoMessage { - if x, ok := x.GetHeader().(*ButtonsMessage_VideoMessage); ok { - return x.VideoMessage +func (x *ProtocolMessage) GetHistorySyncNotification() *HistorySyncNotification { + if x != nil { + return x.HistorySyncNotification } return nil } -func (x *ButtonsMessage) GetLocationMessage() *LocationMessage { - if x, ok := x.GetHeader().(*ButtonsMessage_LocationMessage); ok { - return x.LocationMessage +func (x *ProtocolMessage) GetAppStateSyncKeyShare() *AppStateSyncKeyShare { + if x != nil { + return x.AppStateSyncKeyShare } return nil } -func (x *ButtonsMessage) GetContentText() string { - if x != nil && x.ContentText != nil { - return *x.ContentText +func (x *ProtocolMessage) GetAppStateSyncKeyRequest() *AppStateSyncKeyRequest { + if x != nil { + return x.AppStateSyncKeyRequest } - return "" + return nil } -func (x *ButtonsMessage) GetFooterText() string { - if x != nil && x.FooterText != nil { - return *x.FooterText +func (x *ProtocolMessage) GetInitialSecurityNotificationSettingSync() *InitialSecurityNotificationSettingSync { + if x != nil { + return x.InitialSecurityNotificationSettingSync } - return "" + return nil } -func (x *ButtonsMessage) GetContextInfo() *ContextInfo { +func (x *ProtocolMessage) GetAppStateFatalExceptionNotification() *AppStateFatalExceptionNotification { if x != nil { - return x.ContextInfo + return x.AppStateFatalExceptionNotification } return nil } -func (x *ButtonsMessage) GetButtons() []*ButtonsMessage_Button { +func (x *ProtocolMessage) GetDisappearingMode() *DisappearingMode { if x != nil { - return x.Buttons + return x.DisappearingMode } return nil } -func (x *ButtonsMessage) GetHeaderType() ButtonsMessage_HeaderType { - if x != nil && x.HeaderType != nil { - return *x.HeaderType +func (x *ProtocolMessage) GetEditedMessage() *Message { + if x != nil { + return x.EditedMessage } - return ButtonsMessage_UNKNOWN -} - -type isButtonsMessage_Header interface { - isButtonsMessage_Header() + return nil } -type ButtonsMessage_Text struct { - Text string `protobuf:"bytes,1,opt,name=text,oneof"` +func (x *ProtocolMessage) GetTimestampMS() int64 { + if x != nil && x.TimestampMS != nil { + return *x.TimestampMS + } + return 0 } -type ButtonsMessage_DocumentMessage struct { - DocumentMessage *DocumentMessage `protobuf:"bytes,2,opt,name=documentMessage,oneof"` +func (x *ProtocolMessage) GetPeerDataOperationRequestMessage() *PeerDataOperationRequestMessage { + if x != nil { + return x.PeerDataOperationRequestMessage + } + return nil } -type ButtonsMessage_ImageMessage struct { - ImageMessage *ImageMessage `protobuf:"bytes,3,opt,name=imageMessage,oneof"` +func (x *ProtocolMessage) GetPeerDataOperationRequestResponseMessage() *PeerDataOperationRequestResponseMessage { + if x != nil { + return x.PeerDataOperationRequestResponseMessage + } + return nil } -type ButtonsMessage_VideoMessage struct { - VideoMessage *VideoMessage `protobuf:"bytes,4,opt,name=videoMessage,oneof"` +func (x *ProtocolMessage) GetBotFeedbackMessage() *waAICommon.BotFeedbackMessage { + if x != nil { + return x.BotFeedbackMessage + } + return nil } -type ButtonsMessage_LocationMessage struct { - LocationMessage *LocationMessage `protobuf:"bytes,5,opt,name=locationMessage,oneof"` +func (x *ProtocolMessage) GetInvokerJID() string { + if x != nil && x.InvokerJID != nil { + return *x.InvokerJID + } + return "" } -func (*ButtonsMessage_Text) isButtonsMessage_Header() {} - -func (*ButtonsMessage_DocumentMessage) isButtonsMessage_Header() {} - -func (*ButtonsMessage_ImageMessage) isButtonsMessage_Header() {} - -func (*ButtonsMessage_VideoMessage) isButtonsMessage_Header() {} - -func (*ButtonsMessage_LocationMessage) isButtonsMessage_Header() {} - -type SecretEncryptedMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - TargetMessageKey *waCommon.MessageKey `protobuf:"bytes,1,opt,name=targetMessageKey" json:"targetMessageKey,omitempty"` - EncPayload []byte `protobuf:"bytes,2,opt,name=encPayload" json:"encPayload,omitempty"` - EncIV []byte `protobuf:"bytes,3,opt,name=encIV" json:"encIV,omitempty"` - SecretEncType *SecretEncryptedMessage_SecretEncType `protobuf:"varint,4,opt,name=secretEncType,enum=WAWebProtobufsE2E.SecretEncryptedMessage_SecretEncType" json:"secretEncType,omitempty"` +func (x *ProtocolMessage) GetRequestWelcomeMessageMetadata() *RequestWelcomeMessageMetadata { + if x != nil { + return x.RequestWelcomeMessageMetadata + } + return nil } -func (x *SecretEncryptedMessage) Reset() { - *x = SecretEncryptedMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[9] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) +func (x *ProtocolMessage) GetMediaNotifyMessage() *MediaNotifyMessage { + if x != nil { + return x.MediaNotifyMessage } + return nil } -func (x *SecretEncryptedMessage) String() string { - return protoimpl.X.MessageStringOf(x) +func (x *ProtocolMessage) GetCloudApiThreadControlNotification() *CloudAPIThreadControlNotification { + if x != nil { + return x.CloudApiThreadControlNotification + } + return nil } -func (*SecretEncryptedMessage) ProtoMessage() {} - -func (x *SecretEncryptedMessage) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[9] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms +func (x *ProtocolMessage) GetLidMigrationMappingSyncMessage() *LIDMigrationMappingSyncMessage { + if x != nil { + return x.LidMigrationMappingSyncMessage } - return mi.MessageOf(x) + return nil } -// Deprecated: Use SecretEncryptedMessage.ProtoReflect.Descriptor instead. -func (*SecretEncryptedMessage) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{9} +func (x *ProtocolMessage) GetLimitSharing() *waCommon.LimitSharing { + if x != nil { + return x.LimitSharing + } + return nil } -func (x *SecretEncryptedMessage) GetTargetMessageKey() *waCommon.MessageKey { +func (x *ProtocolMessage) GetAiPsiMetadata() []byte { if x != nil { - return x.TargetMessageKey + return x.AiPsiMetadata } return nil } -func (x *SecretEncryptedMessage) GetEncPayload() []byte { +func (x *ProtocolMessage) GetAiQueryFanout() *AIQueryFanout { if x != nil { - return x.EncPayload + return x.AiQueryFanout } return nil } -func (x *SecretEncryptedMessage) GetEncIV() []byte { +func (x *ProtocolMessage) GetMemberLabel() *MemberLabel { if x != nil { - return x.EncIV + return x.MemberLabel } return nil } -func (x *SecretEncryptedMessage) GetSecretEncType() SecretEncryptedMessage_SecretEncType { - if x != nil && x.SecretEncType != nil { - return *x.SecretEncType +func (x *ProtocolMessage) GetAiMediaCollectionMessage() *waAICommon.AIMediaCollectionMessage { + if x != nil { + return x.AiMediaCollectionMessage } - return SecretEncryptedMessage_UNKNOWN + return nil } -type GroupInviteMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +func (x *ProtocolMessage) GetAfterReadDurationMS() uint32 { + if x != nil && x.AfterReadDurationMS != nil { + return *x.AfterReadDurationMS + } + return 0 +} - GroupJID *string `protobuf:"bytes,1,opt,name=groupJID" json:"groupJID,omitempty"` - InviteCode *string `protobuf:"bytes,2,opt,name=inviteCode" json:"inviteCode,omitempty"` - InviteExpiration *int64 `protobuf:"varint,3,opt,name=inviteExpiration" json:"inviteExpiration,omitempty"` - GroupName *string `protobuf:"bytes,4,opt,name=groupName" json:"groupName,omitempty"` - JPEGThumbnail []byte `protobuf:"bytes,5,opt,name=JPEGThumbnail" json:"JPEGThumbnail,omitempty"` - Caption *string `protobuf:"bytes,6,opt,name=caption" json:"caption,omitempty"` - ContextInfo *ContextInfo `protobuf:"bytes,7,opt,name=contextInfo" json:"contextInfo,omitempty"` - GroupType *GroupInviteMessage_GroupType `protobuf:"varint,8,opt,name=groupType,enum=WAWebProtobufsE2E.GroupInviteMessage_GroupType" json:"groupType,omitempty"` +type CloudAPIThreadControlNotification struct { + state protoimpl.MessageState `protogen:"open.v1"` + Status *CloudAPIThreadControlNotification_CloudAPIThreadControl `protobuf:"varint,1,opt,name=status,enum=WAWebProtobufsE2E.CloudAPIThreadControlNotification_CloudAPIThreadControl" json:"status,omitempty"` + SenderNotificationTimestampMS *int64 `protobuf:"varint,2,opt,name=senderNotificationTimestampMS" json:"senderNotificationTimestampMS,omitempty"` + ConsumerLid *string `protobuf:"bytes,3,opt,name=consumerLid" json:"consumerLid,omitempty"` + ConsumerPhoneNumber *string `protobuf:"bytes,4,opt,name=consumerPhoneNumber" json:"consumerPhoneNumber,omitempty"` + NotificationContent *CloudAPIThreadControlNotification_CloudAPIThreadControlNotificationContent `protobuf:"bytes,5,opt,name=notificationContent" json:"notificationContent,omitempty"` + ShouldSuppressNotification *bool `protobuf:"varint,6,opt,name=shouldSuppressNotification" json:"shouldSuppressNotification,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *GroupInviteMessage) Reset() { - *x = GroupInviteMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[10] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *CloudAPIThreadControlNotification) Reset() { + *x = CloudAPIThreadControlNotification{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[25] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *GroupInviteMessage) String() string { +func (x *CloudAPIThreadControlNotification) String() string { return protoimpl.X.MessageStringOf(x) } -func (*GroupInviteMessage) ProtoMessage() {} +func (*CloudAPIThreadControlNotification) ProtoMessage() {} -func (x *GroupInviteMessage) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[10] - if protoimpl.UnsafeEnabled && x != nil { +func (x *CloudAPIThreadControlNotification) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[25] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -4363,98 +6820,105 @@ func (x *GroupInviteMessage) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use GroupInviteMessage.ProtoReflect.Descriptor instead. -func (*GroupInviteMessage) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{10} -} - -func (x *GroupInviteMessage) GetGroupJID() string { - if x != nil && x.GroupJID != nil { - return *x.GroupJID - } - return "" +// Deprecated: Use CloudAPIThreadControlNotification.ProtoReflect.Descriptor instead. +func (*CloudAPIThreadControlNotification) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{25} } -func (x *GroupInviteMessage) GetInviteCode() string { - if x != nil && x.InviteCode != nil { - return *x.InviteCode +func (x *CloudAPIThreadControlNotification) GetStatus() CloudAPIThreadControlNotification_CloudAPIThreadControl { + if x != nil && x.Status != nil { + return *x.Status } - return "" + return CloudAPIThreadControlNotification_UNKNOWN } -func (x *GroupInviteMessage) GetInviteExpiration() int64 { - if x != nil && x.InviteExpiration != nil { - return *x.InviteExpiration +func (x *CloudAPIThreadControlNotification) GetSenderNotificationTimestampMS() int64 { + if x != nil && x.SenderNotificationTimestampMS != nil { + return *x.SenderNotificationTimestampMS } return 0 } -func (x *GroupInviteMessage) GetGroupName() string { - if x != nil && x.GroupName != nil { - return *x.GroupName +func (x *CloudAPIThreadControlNotification) GetConsumerLid() string { + if x != nil && x.ConsumerLid != nil { + return *x.ConsumerLid } return "" } -func (x *GroupInviteMessage) GetJPEGThumbnail() []byte { - if x != nil { - return x.JPEGThumbnail - } - return nil -} - -func (x *GroupInviteMessage) GetCaption() string { - if x != nil && x.Caption != nil { - return *x.Caption +func (x *CloudAPIThreadControlNotification) GetConsumerPhoneNumber() string { + if x != nil && x.ConsumerPhoneNumber != nil { + return *x.ConsumerPhoneNumber } return "" } -func (x *GroupInviteMessage) GetContextInfo() *ContextInfo { +func (x *CloudAPIThreadControlNotification) GetNotificationContent() *CloudAPIThreadControlNotification_CloudAPIThreadControlNotificationContent { if x != nil { - return x.ContextInfo + return x.NotificationContent } return nil } -func (x *GroupInviteMessage) GetGroupType() GroupInviteMessage_GroupType { - if x != nil && x.GroupType != nil { - return *x.GroupType +func (x *CloudAPIThreadControlNotification) GetShouldSuppressNotification() bool { + if x != nil && x.ShouldSuppressNotification != nil { + return *x.ShouldSuppressNotification } - return GroupInviteMessage_DEFAULT + return false } -type InteractiveResponseMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Types that are assignable to InteractiveResponseMessage: - // - // *InteractiveResponseMessage_NativeFlowResponseMessage_ - InteractiveResponseMessage isInteractiveResponseMessage_InteractiveResponseMessage `protobuf_oneof:"interactiveResponseMessage"` - Body *InteractiveResponseMessage_Body `protobuf:"bytes,1,opt,name=body" json:"body,omitempty"` - ContextInfo *ContextInfo `protobuf:"bytes,15,opt,name=contextInfo" json:"contextInfo,omitempty"` +type VideoMessage struct { + state protoimpl.MessageState `protogen:"open.v1"` + URL *string `protobuf:"bytes,1,opt,name=URL" json:"URL,omitempty"` + Mimetype *string `protobuf:"bytes,2,opt,name=mimetype" json:"mimetype,omitempty"` + FileSHA256 []byte `protobuf:"bytes,3,opt,name=fileSHA256" json:"fileSHA256,omitempty"` + FileLength *uint64 `protobuf:"varint,4,opt,name=fileLength" json:"fileLength,omitempty"` + Seconds *uint32 `protobuf:"varint,5,opt,name=seconds" json:"seconds,omitempty"` + MediaKey []byte `protobuf:"bytes,6,opt,name=mediaKey" json:"mediaKey,omitempty"` + Caption *string `protobuf:"bytes,7,opt,name=caption" json:"caption,omitempty"` + GifPlayback *bool `protobuf:"varint,8,opt,name=gifPlayback" json:"gifPlayback,omitempty"` + Height *uint32 `protobuf:"varint,9,opt,name=height" json:"height,omitempty"` + Width *uint32 `protobuf:"varint,10,opt,name=width" json:"width,omitempty"` + FileEncSHA256 []byte `protobuf:"bytes,11,opt,name=fileEncSHA256" json:"fileEncSHA256,omitempty"` + InteractiveAnnotations []*InteractiveAnnotation `protobuf:"bytes,12,rep,name=interactiveAnnotations" json:"interactiveAnnotations,omitempty"` + DirectPath *string `protobuf:"bytes,13,opt,name=directPath" json:"directPath,omitempty"` + MediaKeyTimestamp *int64 `protobuf:"varint,14,opt,name=mediaKeyTimestamp" json:"mediaKeyTimestamp,omitempty"` + JPEGThumbnail []byte `protobuf:"bytes,16,opt,name=JPEGThumbnail" json:"JPEGThumbnail,omitempty"` + ContextInfo *ContextInfo `protobuf:"bytes,17,opt,name=contextInfo" json:"contextInfo,omitempty"` + StreamingSidecar []byte `protobuf:"bytes,18,opt,name=streamingSidecar" json:"streamingSidecar,omitempty"` + GifAttribution *VideoMessage_Attribution `protobuf:"varint,19,opt,name=gifAttribution,enum=WAWebProtobufsE2E.VideoMessage_Attribution" json:"gifAttribution,omitempty"` + ViewOnce *bool `protobuf:"varint,20,opt,name=viewOnce" json:"viewOnce,omitempty"` + ThumbnailDirectPath *string `protobuf:"bytes,21,opt,name=thumbnailDirectPath" json:"thumbnailDirectPath,omitempty"` + ThumbnailSHA256 []byte `protobuf:"bytes,22,opt,name=thumbnailSHA256" json:"thumbnailSHA256,omitempty"` + ThumbnailEncSHA256 []byte `protobuf:"bytes,23,opt,name=thumbnailEncSHA256" json:"thumbnailEncSHA256,omitempty"` + StaticURL *string `protobuf:"bytes,24,opt,name=staticURL" json:"staticURL,omitempty"` + Annotations []*InteractiveAnnotation `protobuf:"bytes,25,rep,name=annotations" json:"annotations,omitempty"` + AccessibilityLabel *string `protobuf:"bytes,26,opt,name=accessibilityLabel" json:"accessibilityLabel,omitempty"` + ProcessedVideos []*ProcessedVideo `protobuf:"bytes,27,rep,name=processedVideos" json:"processedVideos,omitempty"` + ExternalShareFullVideoDurationInSeconds *uint32 `protobuf:"varint,28,opt,name=externalShareFullVideoDurationInSeconds" json:"externalShareFullVideoDurationInSeconds,omitempty"` + MotionPhotoPresentationOffsetMS *uint64 `protobuf:"varint,29,opt,name=motionPhotoPresentationOffsetMS" json:"motionPhotoPresentationOffsetMS,omitempty"` + MetadataURL *string `protobuf:"bytes,30,opt,name=metadataURL" json:"metadataURL,omitempty"` + VideoSourceType *VideoMessage_VideoSourceType `protobuf:"varint,31,opt,name=videoSourceType,enum=WAWebProtobufsE2E.VideoMessage_VideoSourceType" json:"videoSourceType,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *InteractiveResponseMessage) Reset() { - *x = InteractiveResponseMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[11] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *VideoMessage) Reset() { + *x = VideoMessage{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[26] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *InteractiveResponseMessage) String() string { +func (x *VideoMessage) String() string { return protoimpl.X.MessageStringOf(x) } -func (*InteractiveResponseMessage) ProtoMessage() {} +func (*VideoMessage) ProtoMessage() {} -func (x *InteractiveResponseMessage) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[11] - if protoimpl.UnsafeEnabled && x != nil { +func (x *VideoMessage) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[26] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -4464,221 +6928,275 @@ func (x *InteractiveResponseMessage) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use InteractiveResponseMessage.ProtoReflect.Descriptor instead. -func (*InteractiveResponseMessage) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{11} +// Deprecated: Use VideoMessage.ProtoReflect.Descriptor instead. +func (*VideoMessage) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{26} } -func (m *InteractiveResponseMessage) GetInteractiveResponseMessage() isInteractiveResponseMessage_InteractiveResponseMessage { - if m != nil { - return m.InteractiveResponseMessage +func (x *VideoMessage) GetURL() string { + if x != nil && x.URL != nil { + return *x.URL } - return nil + return "" } -func (x *InteractiveResponseMessage) GetNativeFlowResponseMessage() *InteractiveResponseMessage_NativeFlowResponseMessage { - if x, ok := x.GetInteractiveResponseMessage().(*InteractiveResponseMessage_NativeFlowResponseMessage_); ok { - return x.NativeFlowResponseMessage +func (x *VideoMessage) GetMimetype() string { + if x != nil && x.Mimetype != nil { + return *x.Mimetype } - return nil + return "" } -func (x *InteractiveResponseMessage) GetBody() *InteractiveResponseMessage_Body { +func (x *VideoMessage) GetFileSHA256() []byte { if x != nil { - return x.Body + return x.FileSHA256 } return nil } -func (x *InteractiveResponseMessage) GetContextInfo() *ContextInfo { +func (x *VideoMessage) GetFileLength() uint64 { + if x != nil && x.FileLength != nil { + return *x.FileLength + } + return 0 +} + +func (x *VideoMessage) GetSeconds() uint32 { + if x != nil && x.Seconds != nil { + return *x.Seconds + } + return 0 +} + +func (x *VideoMessage) GetMediaKey() []byte { if x != nil { - return x.ContextInfo + return x.MediaKey } return nil } -type isInteractiveResponseMessage_InteractiveResponseMessage interface { - isInteractiveResponseMessage_InteractiveResponseMessage() +func (x *VideoMessage) GetCaption() string { + if x != nil && x.Caption != nil { + return *x.Caption + } + return "" } -type InteractiveResponseMessage_NativeFlowResponseMessage_ struct { - NativeFlowResponseMessage *InteractiveResponseMessage_NativeFlowResponseMessage `protobuf:"bytes,2,opt,name=nativeFlowResponseMessage,oneof"` +func (x *VideoMessage) GetGifPlayback() bool { + if x != nil && x.GifPlayback != nil { + return *x.GifPlayback + } + return false } -func (*InteractiveResponseMessage_NativeFlowResponseMessage_) isInteractiveResponseMessage_InteractiveResponseMessage() { +func (x *VideoMessage) GetHeight() uint32 { + if x != nil && x.Height != nil { + return *x.Height + } + return 0 } -type InteractiveMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Types that are assignable to InteractiveMessage: - // - // *InteractiveMessage_ShopStorefrontMessage - // *InteractiveMessage_CollectionMessage_ - // *InteractiveMessage_NativeFlowMessage_ - // *InteractiveMessage_CarouselMessage_ - InteractiveMessage isInteractiveMessage_InteractiveMessage `protobuf_oneof:"interactiveMessage"` - Header *InteractiveMessage_Header `protobuf:"bytes,1,opt,name=header" json:"header,omitempty"` - Body *InteractiveMessage_Body `protobuf:"bytes,2,opt,name=body" json:"body,omitempty"` - Footer *InteractiveMessage_Footer `protobuf:"bytes,3,opt,name=footer" json:"footer,omitempty"` - ContextInfo *ContextInfo `protobuf:"bytes,15,opt,name=contextInfo" json:"contextInfo,omitempty"` +func (x *VideoMessage) GetWidth() uint32 { + if x != nil && x.Width != nil { + return *x.Width + } + return 0 } -func (x *InteractiveMessage) Reset() { - *x = InteractiveMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[12] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) +func (x *VideoMessage) GetFileEncSHA256() []byte { + if x != nil { + return x.FileEncSHA256 } + return nil } -func (x *InteractiveMessage) String() string { - return protoimpl.X.MessageStringOf(x) +func (x *VideoMessage) GetInteractiveAnnotations() []*InteractiveAnnotation { + if x != nil { + return x.InteractiveAnnotations + } + return nil } -func (*InteractiveMessage) ProtoMessage() {} +func (x *VideoMessage) GetDirectPath() string { + if x != nil && x.DirectPath != nil { + return *x.DirectPath + } + return "" +} -func (x *InteractiveMessage) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[12] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms +func (x *VideoMessage) GetMediaKeyTimestamp() int64 { + if x != nil && x.MediaKeyTimestamp != nil { + return *x.MediaKeyTimestamp } - return mi.MessageOf(x) + return 0 } -// Deprecated: Use InteractiveMessage.ProtoReflect.Descriptor instead. -func (*InteractiveMessage) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{12} +func (x *VideoMessage) GetJPEGThumbnail() []byte { + if x != nil { + return x.JPEGThumbnail + } + return nil } -func (m *InteractiveMessage) GetInteractiveMessage() isInteractiveMessage_InteractiveMessage { - if m != nil { - return m.InteractiveMessage +func (x *VideoMessage) GetContextInfo() *ContextInfo { + if x != nil { + return x.ContextInfo } return nil } -func (x *InteractiveMessage) GetShopStorefrontMessage() *InteractiveMessage_ShopMessage { - if x, ok := x.GetInteractiveMessage().(*InteractiveMessage_ShopStorefrontMessage); ok { - return x.ShopStorefrontMessage +func (x *VideoMessage) GetStreamingSidecar() []byte { + if x != nil { + return x.StreamingSidecar } return nil } -func (x *InteractiveMessage) GetCollectionMessage() *InteractiveMessage_CollectionMessage { - if x, ok := x.GetInteractiveMessage().(*InteractiveMessage_CollectionMessage_); ok { - return x.CollectionMessage +func (x *VideoMessage) GetGifAttribution() VideoMessage_Attribution { + if x != nil && x.GifAttribution != nil { + return *x.GifAttribution } - return nil + return VideoMessage_NONE } -func (x *InteractiveMessage) GetNativeFlowMessage() *InteractiveMessage_NativeFlowMessage { - if x, ok := x.GetInteractiveMessage().(*InteractiveMessage_NativeFlowMessage_); ok { - return x.NativeFlowMessage +func (x *VideoMessage) GetViewOnce() bool { + if x != nil && x.ViewOnce != nil { + return *x.ViewOnce } - return nil + return false } -func (x *InteractiveMessage) GetCarouselMessage() *InteractiveMessage_CarouselMessage { - if x, ok := x.GetInteractiveMessage().(*InteractiveMessage_CarouselMessage_); ok { - return x.CarouselMessage +func (x *VideoMessage) GetThumbnailDirectPath() string { + if x != nil && x.ThumbnailDirectPath != nil { + return *x.ThumbnailDirectPath } - return nil + return "" } -func (x *InteractiveMessage) GetHeader() *InteractiveMessage_Header { +func (x *VideoMessage) GetThumbnailSHA256() []byte { if x != nil { - return x.Header + return x.ThumbnailSHA256 } return nil } -func (x *InteractiveMessage) GetBody() *InteractiveMessage_Body { +func (x *VideoMessage) GetThumbnailEncSHA256() []byte { if x != nil { - return x.Body + return x.ThumbnailEncSHA256 } return nil } -func (x *InteractiveMessage) GetFooter() *InteractiveMessage_Footer { - if x != nil { - return x.Footer +func (x *VideoMessage) GetStaticURL() string { + if x != nil && x.StaticURL != nil { + return *x.StaticURL } - return nil + return "" } -func (x *InteractiveMessage) GetContextInfo() *ContextInfo { +func (x *VideoMessage) GetAnnotations() []*InteractiveAnnotation { if x != nil { - return x.ContextInfo + return x.Annotations } return nil } -type isInteractiveMessage_InteractiveMessage interface { - isInteractiveMessage_InteractiveMessage() +func (x *VideoMessage) GetAccessibilityLabel() string { + if x != nil && x.AccessibilityLabel != nil { + return *x.AccessibilityLabel + } + return "" } -type InteractiveMessage_ShopStorefrontMessage struct { - ShopStorefrontMessage *InteractiveMessage_ShopMessage `protobuf:"bytes,4,opt,name=shopStorefrontMessage,oneof"` +func (x *VideoMessage) GetProcessedVideos() []*ProcessedVideo { + if x != nil { + return x.ProcessedVideos + } + return nil } -type InteractiveMessage_CollectionMessage_ struct { - CollectionMessage *InteractiveMessage_CollectionMessage `protobuf:"bytes,5,opt,name=collectionMessage,oneof"` +func (x *VideoMessage) GetExternalShareFullVideoDurationInSeconds() uint32 { + if x != nil && x.ExternalShareFullVideoDurationInSeconds != nil { + return *x.ExternalShareFullVideoDurationInSeconds + } + return 0 } -type InteractiveMessage_NativeFlowMessage_ struct { - NativeFlowMessage *InteractiveMessage_NativeFlowMessage `protobuf:"bytes,6,opt,name=nativeFlowMessage,oneof"` +func (x *VideoMessage) GetMotionPhotoPresentationOffsetMS() uint64 { + if x != nil && x.MotionPhotoPresentationOffsetMS != nil { + return *x.MotionPhotoPresentationOffsetMS + } + return 0 } -type InteractiveMessage_CarouselMessage_ struct { - CarouselMessage *InteractiveMessage_CarouselMessage `protobuf:"bytes,7,opt,name=carouselMessage,oneof"` +func (x *VideoMessage) GetMetadataURL() string { + if x != nil && x.MetadataURL != nil { + return *x.MetadataURL + } + return "" } -func (*InteractiveMessage_ShopStorefrontMessage) isInteractiveMessage_InteractiveMessage() {} - -func (*InteractiveMessage_CollectionMessage_) isInteractiveMessage_InteractiveMessage() {} - -func (*InteractiveMessage_NativeFlowMessage_) isInteractiveMessage_InteractiveMessage() {} - -func (*InteractiveMessage_CarouselMessage_) isInteractiveMessage_InteractiveMessage() {} - -type ListResponseMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +func (x *VideoMessage) GetVideoSourceType() VideoMessage_VideoSourceType { + if x != nil && x.VideoSourceType != nil { + return *x.VideoSourceType + } + return VideoMessage_USER_VIDEO +} - Title *string `protobuf:"bytes,1,opt,name=title" json:"title,omitempty"` - ListType *ListResponseMessage_ListType `protobuf:"varint,2,opt,name=listType,enum=WAWebProtobufsE2E.ListResponseMessage_ListType" json:"listType,omitempty"` - SingleSelectReply *ListResponseMessage_SingleSelectReply `protobuf:"bytes,3,opt,name=singleSelectReply" json:"singleSelectReply,omitempty"` - ContextInfo *ContextInfo `protobuf:"bytes,4,opt,name=contextInfo" json:"contextInfo,omitempty"` - Description *string `protobuf:"bytes,5,opt,name=description" json:"description,omitempty"` +type ExtendedTextMessage struct { + state protoimpl.MessageState `protogen:"open.v1"` + Text *string `protobuf:"bytes,1,opt,name=text" json:"text,omitempty"` + MatchedText *string `protobuf:"bytes,2,opt,name=matchedText" json:"matchedText,omitempty"` + Description *string `protobuf:"bytes,5,opt,name=description" json:"description,omitempty"` + Title *string `protobuf:"bytes,6,opt,name=title" json:"title,omitempty"` + TextArgb *uint32 `protobuf:"fixed32,7,opt,name=textArgb" json:"textArgb,omitempty"` + BackgroundArgb *uint32 `protobuf:"fixed32,8,opt,name=backgroundArgb" json:"backgroundArgb,omitempty"` + Font *ExtendedTextMessage_FontType `protobuf:"varint,9,opt,name=font,enum=WAWebProtobufsE2E.ExtendedTextMessage_FontType" json:"font,omitempty"` + PreviewType *ExtendedTextMessage_PreviewType `protobuf:"varint,10,opt,name=previewType,enum=WAWebProtobufsE2E.ExtendedTextMessage_PreviewType" json:"previewType,omitempty"` + JPEGThumbnail []byte `protobuf:"bytes,16,opt,name=JPEGThumbnail" json:"JPEGThumbnail,omitempty"` + ContextInfo *ContextInfo `protobuf:"bytes,17,opt,name=contextInfo" json:"contextInfo,omitempty"` + DoNotPlayInline *bool `protobuf:"varint,18,opt,name=doNotPlayInline" json:"doNotPlayInline,omitempty"` + ThumbnailDirectPath *string `protobuf:"bytes,19,opt,name=thumbnailDirectPath" json:"thumbnailDirectPath,omitempty"` + ThumbnailSHA256 []byte `protobuf:"bytes,20,opt,name=thumbnailSHA256" json:"thumbnailSHA256,omitempty"` + ThumbnailEncSHA256 []byte `protobuf:"bytes,21,opt,name=thumbnailEncSHA256" json:"thumbnailEncSHA256,omitempty"` + MediaKey []byte `protobuf:"bytes,22,opt,name=mediaKey" json:"mediaKey,omitempty"` + MediaKeyTimestamp *int64 `protobuf:"varint,23,opt,name=mediaKeyTimestamp" json:"mediaKeyTimestamp,omitempty"` + ThumbnailHeight *uint32 `protobuf:"varint,24,opt,name=thumbnailHeight" json:"thumbnailHeight,omitempty"` + ThumbnailWidth *uint32 `protobuf:"varint,25,opt,name=thumbnailWidth" json:"thumbnailWidth,omitempty"` + InviteLinkGroupType *ExtendedTextMessage_InviteLinkGroupType `protobuf:"varint,26,opt,name=inviteLinkGroupType,enum=WAWebProtobufsE2E.ExtendedTextMessage_InviteLinkGroupType" json:"inviteLinkGroupType,omitempty"` + InviteLinkParentGroupSubjectV2 *string `protobuf:"bytes,27,opt,name=inviteLinkParentGroupSubjectV2" json:"inviteLinkParentGroupSubjectV2,omitempty"` + InviteLinkParentGroupThumbnailV2 []byte `protobuf:"bytes,28,opt,name=inviteLinkParentGroupThumbnailV2" json:"inviteLinkParentGroupThumbnailV2,omitempty"` + InviteLinkGroupTypeV2 *ExtendedTextMessage_InviteLinkGroupType `protobuf:"varint,29,opt,name=inviteLinkGroupTypeV2,enum=WAWebProtobufsE2E.ExtendedTextMessage_InviteLinkGroupType" json:"inviteLinkGroupTypeV2,omitempty"` + ViewOnce *bool `protobuf:"varint,30,opt,name=viewOnce" json:"viewOnce,omitempty"` + VideoHeight *uint32 `protobuf:"varint,31,opt,name=videoHeight" json:"videoHeight,omitempty"` + VideoWidth *uint32 `protobuf:"varint,32,opt,name=videoWidth" json:"videoWidth,omitempty"` + FaviconMMSMetadata *MMSThumbnailMetadata `protobuf:"bytes,33,opt,name=faviconMMSMetadata" json:"faviconMMSMetadata,omitempty"` + LinkPreviewMetadata *LinkPreviewMetadata `protobuf:"bytes,34,opt,name=linkPreviewMetadata" json:"linkPreviewMetadata,omitempty"` + PaymentLinkMetadata *PaymentLinkMetadata `protobuf:"bytes,35,opt,name=paymentLinkMetadata" json:"paymentLinkMetadata,omitempty"` + EndCardTiles []*VideoEndCard `protobuf:"bytes,36,rep,name=endCardTiles" json:"endCardTiles,omitempty"` + VideoContentURL *string `protobuf:"bytes,37,opt,name=videoContentURL" json:"videoContentURL,omitempty"` + MusicMetadata *EmbeddedMusic `protobuf:"bytes,38,opt,name=musicMetadata" json:"musicMetadata,omitempty"` + PaymentExtendedMetadata *PaymentExtendedMetadata `protobuf:"bytes,39,opt,name=paymentExtendedMetadata" json:"paymentExtendedMetadata,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *ListResponseMessage) Reset() { - *x = ListResponseMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[13] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *ExtendedTextMessage) Reset() { + *x = ExtendedTextMessage{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[27] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *ListResponseMessage) String() string { +func (x *ExtendedTextMessage) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ListResponseMessage) ProtoMessage() {} +func (*ExtendedTextMessage) ProtoMessage() {} -func (x *ListResponseMessage) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[13] - if protoimpl.UnsafeEnabled && x != nil { +func (x *ExtendedTextMessage) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[27] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -4688,188 +7206,266 @@ func (x *ListResponseMessage) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ListResponseMessage.ProtoReflect.Descriptor instead. -func (*ListResponseMessage) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{13} +// Deprecated: Use ExtendedTextMessage.ProtoReflect.Descriptor instead. +func (*ExtendedTextMessage) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{27} } -func (x *ListResponseMessage) GetTitle() string { +func (x *ExtendedTextMessage) GetText() string { + if x != nil && x.Text != nil { + return *x.Text + } + return "" +} + +func (x *ExtendedTextMessage) GetMatchedText() string { + if x != nil && x.MatchedText != nil { + return *x.MatchedText + } + return "" +} + +func (x *ExtendedTextMessage) GetDescription() string { + if x != nil && x.Description != nil { + return *x.Description + } + return "" +} + +func (x *ExtendedTextMessage) GetTitle() string { if x != nil && x.Title != nil { return *x.Title } return "" } -func (x *ListResponseMessage) GetListType() ListResponseMessage_ListType { - if x != nil && x.ListType != nil { - return *x.ListType +func (x *ExtendedTextMessage) GetTextArgb() uint32 { + if x != nil && x.TextArgb != nil { + return *x.TextArgb } - return ListResponseMessage_UNKNOWN + return 0 } -func (x *ListResponseMessage) GetSingleSelectReply() *ListResponseMessage_SingleSelectReply { +func (x *ExtendedTextMessage) GetBackgroundArgb() uint32 { + if x != nil && x.BackgroundArgb != nil { + return *x.BackgroundArgb + } + return 0 +} + +func (x *ExtendedTextMessage) GetFont() ExtendedTextMessage_FontType { + if x != nil && x.Font != nil { + return *x.Font + } + return ExtendedTextMessage_SYSTEM +} + +func (x *ExtendedTextMessage) GetPreviewType() ExtendedTextMessage_PreviewType { + if x != nil && x.PreviewType != nil { + return *x.PreviewType + } + return ExtendedTextMessage_NONE +} + +func (x *ExtendedTextMessage) GetJPEGThumbnail() []byte { if x != nil { - return x.SingleSelectReply + return x.JPEGThumbnail } return nil } -func (x *ListResponseMessage) GetContextInfo() *ContextInfo { +func (x *ExtendedTextMessage) GetContextInfo() *ContextInfo { if x != nil { return x.ContextInfo } return nil } -func (x *ListResponseMessage) GetDescription() string { - if x != nil && x.Description != nil { - return *x.Description +func (x *ExtendedTextMessage) GetDoNotPlayInline() bool { + if x != nil && x.DoNotPlayInline != nil { + return *x.DoNotPlayInline + } + return false +} + +func (x *ExtendedTextMessage) GetThumbnailDirectPath() string { + if x != nil && x.ThumbnailDirectPath != nil { + return *x.ThumbnailDirectPath } return "" } -type ListMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +func (x *ExtendedTextMessage) GetThumbnailSHA256() []byte { + if x != nil { + return x.ThumbnailSHA256 + } + return nil +} - Title *string `protobuf:"bytes,1,opt,name=title" json:"title,omitempty"` - Description *string `protobuf:"bytes,2,opt,name=description" json:"description,omitempty"` - ButtonText *string `protobuf:"bytes,3,opt,name=buttonText" json:"buttonText,omitempty"` - ListType *ListMessage_ListType `protobuf:"varint,4,opt,name=listType,enum=WAWebProtobufsE2E.ListMessage_ListType" json:"listType,omitempty"` - Sections []*ListMessage_Section `protobuf:"bytes,5,rep,name=sections" json:"sections,omitempty"` - ProductListInfo *ListMessage_ProductListInfo `protobuf:"bytes,6,opt,name=productListInfo" json:"productListInfo,omitempty"` - FooterText *string `protobuf:"bytes,7,opt,name=footerText" json:"footerText,omitempty"` - ContextInfo *ContextInfo `protobuf:"bytes,8,opt,name=contextInfo" json:"contextInfo,omitempty"` +func (x *ExtendedTextMessage) GetThumbnailEncSHA256() []byte { + if x != nil { + return x.ThumbnailEncSHA256 + } + return nil +} + +func (x *ExtendedTextMessage) GetMediaKey() []byte { + if x != nil { + return x.MediaKey + } + return nil +} + +func (x *ExtendedTextMessage) GetMediaKeyTimestamp() int64 { + if x != nil && x.MediaKeyTimestamp != nil { + return *x.MediaKeyTimestamp + } + return 0 +} + +func (x *ExtendedTextMessage) GetThumbnailHeight() uint32 { + if x != nil && x.ThumbnailHeight != nil { + return *x.ThumbnailHeight + } + return 0 +} + +func (x *ExtendedTextMessage) GetThumbnailWidth() uint32 { + if x != nil && x.ThumbnailWidth != nil { + return *x.ThumbnailWidth + } + return 0 +} + +func (x *ExtendedTextMessage) GetInviteLinkGroupType() ExtendedTextMessage_InviteLinkGroupType { + if x != nil && x.InviteLinkGroupType != nil { + return *x.InviteLinkGroupType + } + return ExtendedTextMessage_DEFAULT } -func (x *ListMessage) Reset() { - *x = ListMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[14] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) +func (x *ExtendedTextMessage) GetInviteLinkParentGroupSubjectV2() string { + if x != nil && x.InviteLinkParentGroupSubjectV2 != nil { + return *x.InviteLinkParentGroupSubjectV2 } + return "" } -func (x *ListMessage) String() string { - return protoimpl.X.MessageStringOf(x) +func (x *ExtendedTextMessage) GetInviteLinkParentGroupThumbnailV2() []byte { + if x != nil { + return x.InviteLinkParentGroupThumbnailV2 + } + return nil } -func (*ListMessage) ProtoMessage() {} - -func (x *ListMessage) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[14] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms +func (x *ExtendedTextMessage) GetInviteLinkGroupTypeV2() ExtendedTextMessage_InviteLinkGroupType { + if x != nil && x.InviteLinkGroupTypeV2 != nil { + return *x.InviteLinkGroupTypeV2 } - return mi.MessageOf(x) + return ExtendedTextMessage_DEFAULT } -// Deprecated: Use ListMessage.ProtoReflect.Descriptor instead. -func (*ListMessage) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{14} +func (x *ExtendedTextMessage) GetViewOnce() bool { + if x != nil && x.ViewOnce != nil { + return *x.ViewOnce + } + return false } -func (x *ListMessage) GetTitle() string { - if x != nil && x.Title != nil { - return *x.Title +func (x *ExtendedTextMessage) GetVideoHeight() uint32 { + if x != nil && x.VideoHeight != nil { + return *x.VideoHeight } - return "" + return 0 } -func (x *ListMessage) GetDescription() string { - if x != nil && x.Description != nil { - return *x.Description +func (x *ExtendedTextMessage) GetVideoWidth() uint32 { + if x != nil && x.VideoWidth != nil { + return *x.VideoWidth } - return "" + return 0 } -func (x *ListMessage) GetButtonText() string { - if x != nil && x.ButtonText != nil { - return *x.ButtonText +func (x *ExtendedTextMessage) GetFaviconMMSMetadata() *MMSThumbnailMetadata { + if x != nil { + return x.FaviconMMSMetadata } - return "" + return nil } -func (x *ListMessage) GetListType() ListMessage_ListType { - if x != nil && x.ListType != nil { - return *x.ListType +func (x *ExtendedTextMessage) GetLinkPreviewMetadata() *LinkPreviewMetadata { + if x != nil { + return x.LinkPreviewMetadata } - return ListMessage_UNKNOWN + return nil } -func (x *ListMessage) GetSections() []*ListMessage_Section { +func (x *ExtendedTextMessage) GetPaymentLinkMetadata() *PaymentLinkMetadata { if x != nil { - return x.Sections + return x.PaymentLinkMetadata } return nil } -func (x *ListMessage) GetProductListInfo() *ListMessage_ProductListInfo { +func (x *ExtendedTextMessage) GetEndCardTiles() []*VideoEndCard { if x != nil { - return x.ProductListInfo + return x.EndCardTiles } return nil } -func (x *ListMessage) GetFooterText() string { - if x != nil && x.FooterText != nil { - return *x.FooterText +func (x *ExtendedTextMessage) GetVideoContentURL() string { + if x != nil && x.VideoContentURL != nil { + return *x.VideoContentURL } return "" } -func (x *ListMessage) GetContextInfo() *ContextInfo { +func (x *ExtendedTextMessage) GetMusicMetadata() *EmbeddedMusic { if x != nil { - return x.ContextInfo + return x.MusicMetadata } return nil } -type OrderMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +func (x *ExtendedTextMessage) GetPaymentExtendedMetadata() *PaymentExtendedMetadata { + if x != nil { + return x.PaymentExtendedMetadata + } + return nil +} - OrderID *string `protobuf:"bytes,1,opt,name=orderID" json:"orderID,omitempty"` - Thumbnail []byte `protobuf:"bytes,2,opt,name=thumbnail" json:"thumbnail,omitempty"` - ItemCount *int32 `protobuf:"varint,3,opt,name=itemCount" json:"itemCount,omitempty"` - Status *OrderMessage_OrderStatus `protobuf:"varint,4,opt,name=status,enum=WAWebProtobufsE2E.OrderMessage_OrderStatus" json:"status,omitempty"` - Surface *OrderMessage_OrderSurface `protobuf:"varint,5,opt,name=surface,enum=WAWebProtobufsE2E.OrderMessage_OrderSurface" json:"surface,omitempty"` - Message *string `protobuf:"bytes,6,opt,name=message" json:"message,omitempty"` - OrderTitle *string `protobuf:"bytes,7,opt,name=orderTitle" json:"orderTitle,omitempty"` - SellerJID *string `protobuf:"bytes,8,opt,name=sellerJID" json:"sellerJID,omitempty"` - Token *string `protobuf:"bytes,9,opt,name=token" json:"token,omitempty"` - TotalAmount1000 *int64 `protobuf:"varint,10,opt,name=totalAmount1000" json:"totalAmount1000,omitempty"` - TotalCurrencyCode *string `protobuf:"bytes,11,opt,name=totalCurrencyCode" json:"totalCurrencyCode,omitempty"` - ContextInfo *ContextInfo `protobuf:"bytes,17,opt,name=contextInfo" json:"contextInfo,omitempty"` - MessageVersion *int32 `protobuf:"varint,12,opt,name=messageVersion" json:"messageVersion,omitempty"` - OrderRequestMessageID *waCommon.MessageKey `protobuf:"bytes,13,opt,name=orderRequestMessageID" json:"orderRequestMessageID,omitempty"` +type LinkPreviewMetadata struct { + state protoimpl.MessageState `protogen:"open.v1"` + PaymentLinkMetadata *PaymentLinkMetadata `protobuf:"bytes,1,opt,name=paymentLinkMetadata" json:"paymentLinkMetadata,omitempty"` + UrlMetadata *URLMetadata `protobuf:"bytes,2,opt,name=urlMetadata" json:"urlMetadata,omitempty"` + FbExperimentID *uint32 `protobuf:"varint,3,opt,name=fbExperimentID" json:"fbExperimentID,omitempty"` + LinkMediaDuration *uint32 `protobuf:"varint,4,opt,name=linkMediaDuration" json:"linkMediaDuration,omitempty"` + SocialMediaPostType *LinkPreviewMetadata_SocialMediaPostType `protobuf:"varint,5,opt,name=socialMediaPostType,enum=WAWebProtobufsE2E.LinkPreviewMetadata_SocialMediaPostType" json:"socialMediaPostType,omitempty"` + LinkInlineVideoMuted *bool `protobuf:"varint,6,opt,name=linkInlineVideoMuted" json:"linkInlineVideoMuted,omitempty"` + VideoContentURL *string `protobuf:"bytes,7,opt,name=videoContentURL" json:"videoContentURL,omitempty"` + MusicMetadata *EmbeddedMusic `protobuf:"bytes,8,opt,name=musicMetadata" json:"musicMetadata,omitempty"` + VideoContentCaption *string `protobuf:"bytes,9,opt,name=videoContentCaption" json:"videoContentCaption,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *OrderMessage) Reset() { - *x = OrderMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[15] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *LinkPreviewMetadata) Reset() { + *x = LinkPreviewMetadata{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[28] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *OrderMessage) String() string { +func (x *LinkPreviewMetadata) String() string { return protoimpl.X.MessageStringOf(x) } -func (*OrderMessage) ProtoMessage() {} +func (*LinkPreviewMetadata) ProtoMessage() {} -func (x *OrderMessage) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[15] - if protoimpl.UnsafeEnabled && x != nil { +func (x *LinkPreviewMetadata) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[28] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -4879,136 +7475,159 @@ func (x *OrderMessage) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use OrderMessage.ProtoReflect.Descriptor instead. -func (*OrderMessage) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{15} +// Deprecated: Use LinkPreviewMetadata.ProtoReflect.Descriptor instead. +func (*LinkPreviewMetadata) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{28} } -func (x *OrderMessage) GetOrderID() string { - if x != nil && x.OrderID != nil { - return *x.OrderID +func (x *LinkPreviewMetadata) GetPaymentLinkMetadata() *PaymentLinkMetadata { + if x != nil { + return x.PaymentLinkMetadata } - return "" + return nil } -func (x *OrderMessage) GetThumbnail() []byte { +func (x *LinkPreviewMetadata) GetUrlMetadata() *URLMetadata { if x != nil { - return x.Thumbnail + return x.UrlMetadata } return nil } -func (x *OrderMessage) GetItemCount() int32 { - if x != nil && x.ItemCount != nil { - return *x.ItemCount +func (x *LinkPreviewMetadata) GetFbExperimentID() uint32 { + if x != nil && x.FbExperimentID != nil { + return *x.FbExperimentID } return 0 } -func (x *OrderMessage) GetStatus() OrderMessage_OrderStatus { - if x != nil && x.Status != nil { - return *x.Status +func (x *LinkPreviewMetadata) GetLinkMediaDuration() uint32 { + if x != nil && x.LinkMediaDuration != nil { + return *x.LinkMediaDuration } - return OrderMessage_INQUIRY + return 0 } -func (x *OrderMessage) GetSurface() OrderMessage_OrderSurface { - if x != nil && x.Surface != nil { - return *x.Surface +func (x *LinkPreviewMetadata) GetSocialMediaPostType() LinkPreviewMetadata_SocialMediaPostType { + if x != nil && x.SocialMediaPostType != nil { + return *x.SocialMediaPostType } - return OrderMessage_CATALOG + return LinkPreviewMetadata_NONE } -func (x *OrderMessage) GetMessage() string { - if x != nil && x.Message != nil { - return *x.Message +func (x *LinkPreviewMetadata) GetLinkInlineVideoMuted() bool { + if x != nil && x.LinkInlineVideoMuted != nil { + return *x.LinkInlineVideoMuted } - return "" + return false } -func (x *OrderMessage) GetOrderTitle() string { - if x != nil && x.OrderTitle != nil { - return *x.OrderTitle +func (x *LinkPreviewMetadata) GetVideoContentURL() string { + if x != nil && x.VideoContentURL != nil { + return *x.VideoContentURL } return "" } -func (x *OrderMessage) GetSellerJID() string { - if x != nil && x.SellerJID != nil { - return *x.SellerJID +func (x *LinkPreviewMetadata) GetMusicMetadata() *EmbeddedMusic { + if x != nil { + return x.MusicMetadata } - return "" + return nil } -func (x *OrderMessage) GetToken() string { - if x != nil && x.Token != nil { - return *x.Token +func (x *LinkPreviewMetadata) GetVideoContentCaption() string { + if x != nil && x.VideoContentCaption != nil { + return *x.VideoContentCaption } return "" } -func (x *OrderMessage) GetTotalAmount1000() int64 { - if x != nil && x.TotalAmount1000 != nil { - return *x.TotalAmount1000 - } - return 0 +type PaymentLinkMetadata struct { + state protoimpl.MessageState `protogen:"open.v1"` + Button *PaymentLinkMetadata_PaymentLinkButton `protobuf:"bytes,1,opt,name=button" json:"button,omitempty"` + Header *PaymentLinkMetadata_PaymentLinkHeader `protobuf:"bytes,2,opt,name=header" json:"header,omitempty"` + Provider *PaymentLinkMetadata_PaymentLinkProvider `protobuf:"bytes,3,opt,name=provider" json:"provider,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *OrderMessage) GetTotalCurrencyCode() string { - if x != nil && x.TotalCurrencyCode != nil { - return *x.TotalCurrencyCode +func (x *PaymentLinkMetadata) Reset() { + *x = PaymentLinkMetadata{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[29] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *PaymentLinkMetadata) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PaymentLinkMetadata) ProtoMessage() {} + +func (x *PaymentLinkMetadata) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[29] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return "" + return mi.MessageOf(x) } -func (x *OrderMessage) GetContextInfo() *ContextInfo { +// Deprecated: Use PaymentLinkMetadata.ProtoReflect.Descriptor instead. +func (*PaymentLinkMetadata) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{29} +} + +func (x *PaymentLinkMetadata) GetButton() *PaymentLinkMetadata_PaymentLinkButton { if x != nil { - return x.ContextInfo + return x.Button } return nil } -func (x *OrderMessage) GetMessageVersion() int32 { - if x != nil && x.MessageVersion != nil { - return *x.MessageVersion +func (x *PaymentLinkMetadata) GetHeader() *PaymentLinkMetadata_PaymentLinkHeader { + if x != nil { + return x.Header } - return 0 + return nil } -func (x *OrderMessage) GetOrderRequestMessageID() *waCommon.MessageKey { +func (x *PaymentLinkMetadata) GetProvider() *PaymentLinkMetadata_PaymentLinkProvider { if x != nil { - return x.OrderRequestMessageID + return x.Provider } return nil } -type PaymentInviteMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - ServiceType *PaymentInviteMessage_ServiceType `protobuf:"varint,1,opt,name=serviceType,enum=WAWebProtobufsE2E.PaymentInviteMessage_ServiceType" json:"serviceType,omitempty"` - ExpiryTimestamp *int64 `protobuf:"varint,2,opt,name=expiryTimestamp" json:"expiryTimestamp,omitempty"` +type StatusNotificationMessage struct { + state protoimpl.MessageState `protogen:"open.v1"` + ResponseMessageKey *waCommon.MessageKey `protobuf:"bytes,1,opt,name=responseMessageKey" json:"responseMessageKey,omitempty"` + OriginalMessageKey *waCommon.MessageKey `protobuf:"bytes,2,opt,name=originalMessageKey" json:"originalMessageKey,omitempty"` + Type *StatusNotificationMessage_StatusNotificationType `protobuf:"varint,3,opt,name=type,enum=WAWebProtobufsE2E.StatusNotificationMessage_StatusNotificationType" json:"type,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *PaymentInviteMessage) Reset() { - *x = PaymentInviteMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[16] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *StatusNotificationMessage) Reset() { + *x = StatusNotificationMessage{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[30] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *PaymentInviteMessage) String() string { +func (x *StatusNotificationMessage) String() string { return protoimpl.X.MessageStringOf(x) } -func (*PaymentInviteMessage) ProtoMessage() {} +func (*StatusNotificationMessage) ProtoMessage() {} -func (x *PaymentInviteMessage) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[16] - if protoimpl.UnsafeEnabled && x != nil { +func (x *StatusNotificationMessage) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[30] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -5018,59 +7637,64 @@ func (x *PaymentInviteMessage) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use PaymentInviteMessage.ProtoReflect.Descriptor instead. -func (*PaymentInviteMessage) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{16} +// Deprecated: Use StatusNotificationMessage.ProtoReflect.Descriptor instead. +func (*StatusNotificationMessage) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{30} } -func (x *PaymentInviteMessage) GetServiceType() PaymentInviteMessage_ServiceType { - if x != nil && x.ServiceType != nil { - return *x.ServiceType +func (x *StatusNotificationMessage) GetResponseMessageKey() *waCommon.MessageKey { + if x != nil { + return x.ResponseMessageKey } - return PaymentInviteMessage_UNKNOWN + return nil } -func (x *PaymentInviteMessage) GetExpiryTimestamp() int64 { - if x != nil && x.ExpiryTimestamp != nil { - return *x.ExpiryTimestamp +func (x *StatusNotificationMessage) GetOriginalMessageKey() *waCommon.MessageKey { + if x != nil { + return x.OriginalMessageKey } - return 0 + return nil } -type HighlyStructuredMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +func (x *StatusNotificationMessage) GetType() StatusNotificationMessage_StatusNotificationType { + if x != nil && x.Type != nil { + return *x.Type + } + return StatusNotificationMessage_UNKNOWN +} - Namespace *string `protobuf:"bytes,1,opt,name=namespace" json:"namespace,omitempty"` - ElementName *string `protobuf:"bytes,2,opt,name=elementName" json:"elementName,omitempty"` - Params []string `protobuf:"bytes,3,rep,name=params" json:"params,omitempty"` - FallbackLg *string `protobuf:"bytes,4,opt,name=fallbackLg" json:"fallbackLg,omitempty"` - FallbackLc *string `protobuf:"bytes,5,opt,name=fallbackLc" json:"fallbackLc,omitempty"` - LocalizableParams []*HighlyStructuredMessage_HSMLocalizableParameter `protobuf:"bytes,6,rep,name=localizableParams" json:"localizableParams,omitempty"` - DeterministicLg *string `protobuf:"bytes,7,opt,name=deterministicLg" json:"deterministicLg,omitempty"` - DeterministicLc *string `protobuf:"bytes,8,opt,name=deterministicLc" json:"deterministicLc,omitempty"` - HydratedHsm *TemplateMessage `protobuf:"bytes,9,opt,name=hydratedHsm" json:"hydratedHsm,omitempty"` +type InvoiceMessage struct { + state protoimpl.MessageState `protogen:"open.v1"` + Note *string `protobuf:"bytes,1,opt,name=note" json:"note,omitempty"` + Token *string `protobuf:"bytes,2,opt,name=token" json:"token,omitempty"` + AttachmentType *InvoiceMessage_AttachmentType `protobuf:"varint,3,opt,name=attachmentType,enum=WAWebProtobufsE2E.InvoiceMessage_AttachmentType" json:"attachmentType,omitempty"` + AttachmentMimetype *string `protobuf:"bytes,4,opt,name=attachmentMimetype" json:"attachmentMimetype,omitempty"` + AttachmentMediaKey []byte `protobuf:"bytes,5,opt,name=attachmentMediaKey" json:"attachmentMediaKey,omitempty"` + AttachmentMediaKeyTimestamp *int64 `protobuf:"varint,6,opt,name=attachmentMediaKeyTimestamp" json:"attachmentMediaKeyTimestamp,omitempty"` + AttachmentFileSHA256 []byte `protobuf:"bytes,7,opt,name=attachmentFileSHA256" json:"attachmentFileSHA256,omitempty"` + AttachmentFileEncSHA256 []byte `protobuf:"bytes,8,opt,name=attachmentFileEncSHA256" json:"attachmentFileEncSHA256,omitempty"` + AttachmentDirectPath *string `protobuf:"bytes,9,opt,name=attachmentDirectPath" json:"attachmentDirectPath,omitempty"` + AttachmentJPEGThumbnail []byte `protobuf:"bytes,10,opt,name=attachmentJPEGThumbnail" json:"attachmentJPEGThumbnail,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *HighlyStructuredMessage) Reset() { - *x = HighlyStructuredMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[17] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *InvoiceMessage) Reset() { + *x = InvoiceMessage{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[31] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *HighlyStructuredMessage) String() string { +func (x *InvoiceMessage) String() string { return protoimpl.X.MessageStringOf(x) } -func (*HighlyStructuredMessage) ProtoMessage() {} +func (*InvoiceMessage) ProtoMessage() {} -func (x *HighlyStructuredMessage) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[17] - if protoimpl.UnsafeEnabled && x != nil { +func (x *InvoiceMessage) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[31] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -5080,102 +7704,133 @@ func (x *HighlyStructuredMessage) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use HighlyStructuredMessage.ProtoReflect.Descriptor instead. -func (*HighlyStructuredMessage) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{17} +// Deprecated: Use InvoiceMessage.ProtoReflect.Descriptor instead. +func (*InvoiceMessage) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{31} } -func (x *HighlyStructuredMessage) GetNamespace() string { - if x != nil && x.Namespace != nil { - return *x.Namespace +func (x *InvoiceMessage) GetNote() string { + if x != nil && x.Note != nil { + return *x.Note } return "" } -func (x *HighlyStructuredMessage) GetElementName() string { - if x != nil && x.ElementName != nil { - return *x.ElementName +func (x *InvoiceMessage) GetToken() string { + if x != nil && x.Token != nil { + return *x.Token } return "" } -func (x *HighlyStructuredMessage) GetParams() []string { - if x != nil { - return x.Params +func (x *InvoiceMessage) GetAttachmentType() InvoiceMessage_AttachmentType { + if x != nil && x.AttachmentType != nil { + return *x.AttachmentType } - return nil + return InvoiceMessage_IMAGE } -func (x *HighlyStructuredMessage) GetFallbackLg() string { - if x != nil && x.FallbackLg != nil { - return *x.FallbackLg +func (x *InvoiceMessage) GetAttachmentMimetype() string { + if x != nil && x.AttachmentMimetype != nil { + return *x.AttachmentMimetype } return "" } -func (x *HighlyStructuredMessage) GetFallbackLc() string { - if x != nil && x.FallbackLc != nil { - return *x.FallbackLc +func (x *InvoiceMessage) GetAttachmentMediaKey() []byte { + if x != nil { + return x.AttachmentMediaKey } - return "" + return nil } -func (x *HighlyStructuredMessage) GetLocalizableParams() []*HighlyStructuredMessage_HSMLocalizableParameter { +func (x *InvoiceMessage) GetAttachmentMediaKeyTimestamp() int64 { + if x != nil && x.AttachmentMediaKeyTimestamp != nil { + return *x.AttachmentMediaKeyTimestamp + } + return 0 +} + +func (x *InvoiceMessage) GetAttachmentFileSHA256() []byte { if x != nil { - return x.LocalizableParams + return x.AttachmentFileSHA256 } return nil } -func (x *HighlyStructuredMessage) GetDeterministicLg() string { - if x != nil && x.DeterministicLg != nil { - return *x.DeterministicLg +func (x *InvoiceMessage) GetAttachmentFileEncSHA256() []byte { + if x != nil { + return x.AttachmentFileEncSHA256 } - return "" + return nil } -func (x *HighlyStructuredMessage) GetDeterministicLc() string { - if x != nil && x.DeterministicLc != nil { - return *x.DeterministicLc +func (x *InvoiceMessage) GetAttachmentDirectPath() string { + if x != nil && x.AttachmentDirectPath != nil { + return *x.AttachmentDirectPath } return "" } -func (x *HighlyStructuredMessage) GetHydratedHsm() *TemplateMessage { +func (x *InvoiceMessage) GetAttachmentJPEGThumbnail() []byte { if x != nil { - return x.HydratedHsm + return x.AttachmentJPEGThumbnail } return nil } -type PeerDataOperationRequestResponseMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - PeerDataOperationRequestType *PeerDataOperationRequestType `protobuf:"varint,1,opt,name=peerDataOperationRequestType,enum=WAWebProtobufsE2E.PeerDataOperationRequestType" json:"peerDataOperationRequestType,omitempty"` - StanzaID *string `protobuf:"bytes,2,opt,name=stanzaID" json:"stanzaID,omitempty"` - PeerDataOperationResult []*PeerDataOperationRequestResponseMessage_PeerDataOperationResult `protobuf:"bytes,3,rep,name=peerDataOperationResult" json:"peerDataOperationResult,omitempty"` +type ImageMessage struct { + state protoimpl.MessageState `protogen:"open.v1"` + URL *string `protobuf:"bytes,1,opt,name=URL" json:"URL,omitempty"` + Mimetype *string `protobuf:"bytes,2,opt,name=mimetype" json:"mimetype,omitempty"` + Caption *string `protobuf:"bytes,3,opt,name=caption" json:"caption,omitempty"` + FileSHA256 []byte `protobuf:"bytes,4,opt,name=fileSHA256" json:"fileSHA256,omitempty"` + FileLength *uint64 `protobuf:"varint,5,opt,name=fileLength" json:"fileLength,omitempty"` + Height *uint32 `protobuf:"varint,6,opt,name=height" json:"height,omitempty"` + Width *uint32 `protobuf:"varint,7,opt,name=width" json:"width,omitempty"` + MediaKey []byte `protobuf:"bytes,8,opt,name=mediaKey" json:"mediaKey,omitempty"` + FileEncSHA256 []byte `protobuf:"bytes,9,opt,name=fileEncSHA256" json:"fileEncSHA256,omitempty"` + InteractiveAnnotations []*InteractiveAnnotation `protobuf:"bytes,10,rep,name=interactiveAnnotations" json:"interactiveAnnotations,omitempty"` + DirectPath *string `protobuf:"bytes,11,opt,name=directPath" json:"directPath,omitempty"` + MediaKeyTimestamp *int64 `protobuf:"varint,12,opt,name=mediaKeyTimestamp" json:"mediaKeyTimestamp,omitempty"` + JPEGThumbnail []byte `protobuf:"bytes,16,opt,name=JPEGThumbnail" json:"JPEGThumbnail,omitempty"` + ContextInfo *ContextInfo `protobuf:"bytes,17,opt,name=contextInfo" json:"contextInfo,omitempty"` + FirstScanSidecar []byte `protobuf:"bytes,18,opt,name=firstScanSidecar" json:"firstScanSidecar,omitempty"` + FirstScanLength *uint32 `protobuf:"varint,19,opt,name=firstScanLength" json:"firstScanLength,omitempty"` + ExperimentGroupID *uint32 `protobuf:"varint,20,opt,name=experimentGroupID" json:"experimentGroupID,omitempty"` + ScansSidecar []byte `protobuf:"bytes,21,opt,name=scansSidecar" json:"scansSidecar,omitempty"` + ScanLengths []uint32 `protobuf:"varint,22,rep,name=scanLengths" json:"scanLengths,omitempty"` + MidQualityFileSHA256 []byte `protobuf:"bytes,23,opt,name=midQualityFileSHA256" json:"midQualityFileSHA256,omitempty"` + MidQualityFileEncSHA256 []byte `protobuf:"bytes,24,opt,name=midQualityFileEncSHA256" json:"midQualityFileEncSHA256,omitempty"` + ViewOnce *bool `protobuf:"varint,25,opt,name=viewOnce" json:"viewOnce,omitempty"` + ThumbnailDirectPath *string `protobuf:"bytes,26,opt,name=thumbnailDirectPath" json:"thumbnailDirectPath,omitempty"` + ThumbnailSHA256 []byte `protobuf:"bytes,27,opt,name=thumbnailSHA256" json:"thumbnailSHA256,omitempty"` + ThumbnailEncSHA256 []byte `protobuf:"bytes,28,opt,name=thumbnailEncSHA256" json:"thumbnailEncSHA256,omitempty"` + StaticURL *string `protobuf:"bytes,29,opt,name=staticURL" json:"staticURL,omitempty"` + Annotations []*InteractiveAnnotation `protobuf:"bytes,30,rep,name=annotations" json:"annotations,omitempty"` + ImageSourceType *ImageMessage_ImageSourceType `protobuf:"varint,31,opt,name=imageSourceType,enum=WAWebProtobufsE2E.ImageMessage_ImageSourceType" json:"imageSourceType,omitempty"` + AccessibilityLabel *string `protobuf:"bytes,32,opt,name=accessibilityLabel" json:"accessibilityLabel,omitempty"` + QrURL *string `protobuf:"bytes,34,opt,name=qrURL" json:"qrURL,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *PeerDataOperationRequestResponseMessage) Reset() { - *x = PeerDataOperationRequestResponseMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[18] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *ImageMessage) Reset() { + *x = ImageMessage{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[32] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *PeerDataOperationRequestResponseMessage) String() string { +func (x *ImageMessage) String() string { return protoimpl.X.MessageStringOf(x) } -func (*PeerDataOperationRequestResponseMessage) ProtoMessage() {} +func (*ImageMessage) ProtoMessage() {} -func (x *PeerDataOperationRequestResponseMessage) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[18] - if protoimpl.UnsafeEnabled && x != nil { +func (x *ImageMessage) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[32] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -5185,275 +7840,301 @@ func (x *PeerDataOperationRequestResponseMessage) ProtoReflect() protoreflect.Me return mi.MessageOf(x) } -// Deprecated: Use PeerDataOperationRequestResponseMessage.ProtoReflect.Descriptor instead. -func (*PeerDataOperationRequestResponseMessage) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{18} +// Deprecated: Use ImageMessage.ProtoReflect.Descriptor instead. +func (*ImageMessage) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{32} } -func (x *PeerDataOperationRequestResponseMessage) GetPeerDataOperationRequestType() PeerDataOperationRequestType { - if x != nil && x.PeerDataOperationRequestType != nil { - return *x.PeerDataOperationRequestType +func (x *ImageMessage) GetURL() string { + if x != nil && x.URL != nil { + return *x.URL } - return PeerDataOperationRequestType_UPLOAD_STICKER + return "" } -func (x *PeerDataOperationRequestResponseMessage) GetStanzaID() string { - if x != nil && x.StanzaID != nil { - return *x.StanzaID +func (x *ImageMessage) GetMimetype() string { + if x != nil && x.Mimetype != nil { + return *x.Mimetype } return "" } -func (x *PeerDataOperationRequestResponseMessage) GetPeerDataOperationResult() []*PeerDataOperationRequestResponseMessage_PeerDataOperationResult { +func (x *ImageMessage) GetCaption() string { + if x != nil && x.Caption != nil { + return *x.Caption + } + return "" +} + +func (x *ImageMessage) GetFileSHA256() []byte { if x != nil { - return x.PeerDataOperationResult + return x.FileSHA256 } return nil } -type HistorySyncNotification struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +func (x *ImageMessage) GetFileLength() uint64 { + if x != nil && x.FileLength != nil { + return *x.FileLength + } + return 0 +} - FileSHA256 []byte `protobuf:"bytes,1,opt,name=fileSHA256" json:"fileSHA256,omitempty"` - FileLength *uint64 `protobuf:"varint,2,opt,name=fileLength" json:"fileLength,omitempty"` - MediaKey []byte `protobuf:"bytes,3,opt,name=mediaKey" json:"mediaKey,omitempty"` - FileEncSHA256 []byte `protobuf:"bytes,4,opt,name=fileEncSHA256" json:"fileEncSHA256,omitempty"` - DirectPath *string `protobuf:"bytes,5,opt,name=directPath" json:"directPath,omitempty"` - SyncType *HistorySyncNotification_HistorySyncType `protobuf:"varint,6,opt,name=syncType,enum=WAWebProtobufsE2E.HistorySyncNotification_HistorySyncType" json:"syncType,omitempty"` - ChunkOrder *uint32 `protobuf:"varint,7,opt,name=chunkOrder" json:"chunkOrder,omitempty"` - OriginalMessageID *string `protobuf:"bytes,8,opt,name=originalMessageID" json:"originalMessageID,omitempty"` - Progress *uint32 `protobuf:"varint,9,opt,name=progress" json:"progress,omitempty"` - OldestMsgInChunkTimestampSec *int64 `protobuf:"varint,10,opt,name=oldestMsgInChunkTimestampSec" json:"oldestMsgInChunkTimestampSec,omitempty"` - InitialHistBootstrapInlinePayload []byte `protobuf:"bytes,11,opt,name=initialHistBootstrapInlinePayload" json:"initialHistBootstrapInlinePayload,omitempty"` - PeerDataRequestSessionID *string `protobuf:"bytes,12,opt,name=peerDataRequestSessionID" json:"peerDataRequestSessionID,omitempty"` - FullHistorySyncOnDemandRequestMetadata *FullHistorySyncOnDemandRequestMetadata `protobuf:"bytes,13,opt,name=fullHistorySyncOnDemandRequestMetadata" json:"fullHistorySyncOnDemandRequestMetadata,omitempty"` - EncHandle *string `protobuf:"bytes,14,opt,name=encHandle" json:"encHandle,omitempty"` +func (x *ImageMessage) GetHeight() uint32 { + if x != nil && x.Height != nil { + return *x.Height + } + return 0 } -func (x *HistorySyncNotification) Reset() { - *x = HistorySyncNotification{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[19] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) +func (x *ImageMessage) GetWidth() uint32 { + if x != nil && x.Width != nil { + return *x.Width } + return 0 } -func (x *HistorySyncNotification) String() string { - return protoimpl.X.MessageStringOf(x) +func (x *ImageMessage) GetMediaKey() []byte { + if x != nil { + return x.MediaKey + } + return nil } -func (*HistorySyncNotification) ProtoMessage() {} +func (x *ImageMessage) GetFileEncSHA256() []byte { + if x != nil { + return x.FileEncSHA256 + } + return nil +} -func (x *HistorySyncNotification) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[19] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms +func (x *ImageMessage) GetInteractiveAnnotations() []*InteractiveAnnotation { + if x != nil { + return x.InteractiveAnnotations } - return mi.MessageOf(x) + return nil } -// Deprecated: Use HistorySyncNotification.ProtoReflect.Descriptor instead. -func (*HistorySyncNotification) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{19} +func (x *ImageMessage) GetDirectPath() string { + if x != nil && x.DirectPath != nil { + return *x.DirectPath + } + return "" } -func (x *HistorySyncNotification) GetFileSHA256() []byte { +func (x *ImageMessage) GetMediaKeyTimestamp() int64 { + if x != nil && x.MediaKeyTimestamp != nil { + return *x.MediaKeyTimestamp + } + return 0 +} + +func (x *ImageMessage) GetJPEGThumbnail() []byte { if x != nil { - return x.FileSHA256 + return x.JPEGThumbnail } return nil } -func (x *HistorySyncNotification) GetFileLength() uint64 { - if x != nil && x.FileLength != nil { - return *x.FileLength +func (x *ImageMessage) GetContextInfo() *ContextInfo { + if x != nil { + return x.ContextInfo + } + return nil +} + +func (x *ImageMessage) GetFirstScanSidecar() []byte { + if x != nil { + return x.FirstScanSidecar + } + return nil +} + +func (x *ImageMessage) GetFirstScanLength() uint32 { + if x != nil && x.FirstScanLength != nil { + return *x.FirstScanLength } return 0 } -func (x *HistorySyncNotification) GetMediaKey() []byte { +func (x *ImageMessage) GetExperimentGroupID() uint32 { + if x != nil && x.ExperimentGroupID != nil { + return *x.ExperimentGroupID + } + return 0 +} + +func (x *ImageMessage) GetScansSidecar() []byte { if x != nil { - return x.MediaKey + return x.ScansSidecar } return nil } -func (x *HistorySyncNotification) GetFileEncSHA256() []byte { +func (x *ImageMessage) GetScanLengths() []uint32 { if x != nil { - return x.FileEncSHA256 + return x.ScanLengths } return nil } -func (x *HistorySyncNotification) GetDirectPath() string { - if x != nil && x.DirectPath != nil { - return *x.DirectPath +func (x *ImageMessage) GetMidQualityFileSHA256() []byte { + if x != nil { + return x.MidQualityFileSHA256 } - return "" + return nil } -func (x *HistorySyncNotification) GetSyncType() HistorySyncNotification_HistorySyncType { - if x != nil && x.SyncType != nil { - return *x.SyncType +func (x *ImageMessage) GetMidQualityFileEncSHA256() []byte { + if x != nil { + return x.MidQualityFileEncSHA256 } - return HistorySyncNotification_INITIAL_BOOTSTRAP + return nil } -func (x *HistorySyncNotification) GetChunkOrder() uint32 { - if x != nil && x.ChunkOrder != nil { - return *x.ChunkOrder +func (x *ImageMessage) GetViewOnce() bool { + if x != nil && x.ViewOnce != nil { + return *x.ViewOnce } - return 0 + return false } -func (x *HistorySyncNotification) GetOriginalMessageID() string { - if x != nil && x.OriginalMessageID != nil { - return *x.OriginalMessageID +func (x *ImageMessage) GetThumbnailDirectPath() string { + if x != nil && x.ThumbnailDirectPath != nil { + return *x.ThumbnailDirectPath } return "" } -func (x *HistorySyncNotification) GetProgress() uint32 { - if x != nil && x.Progress != nil { - return *x.Progress - } - return 0 -} - -func (x *HistorySyncNotification) GetOldestMsgInChunkTimestampSec() int64 { - if x != nil && x.OldestMsgInChunkTimestampSec != nil { - return *x.OldestMsgInChunkTimestampSec +func (x *ImageMessage) GetThumbnailSHA256() []byte { + if x != nil { + return x.ThumbnailSHA256 } - return 0 + return nil } -func (x *HistorySyncNotification) GetInitialHistBootstrapInlinePayload() []byte { +func (x *ImageMessage) GetThumbnailEncSHA256() []byte { if x != nil { - return x.InitialHistBootstrapInlinePayload + return x.ThumbnailEncSHA256 } return nil } -func (x *HistorySyncNotification) GetPeerDataRequestSessionID() string { - if x != nil && x.PeerDataRequestSessionID != nil { - return *x.PeerDataRequestSessionID +func (x *ImageMessage) GetStaticURL() string { + if x != nil && x.StaticURL != nil { + return *x.StaticURL } return "" } -func (x *HistorySyncNotification) GetFullHistorySyncOnDemandRequestMetadata() *FullHistorySyncOnDemandRequestMetadata { +func (x *ImageMessage) GetAnnotations() []*InteractiveAnnotation { if x != nil { - return x.FullHistorySyncOnDemandRequestMetadata + return x.Annotations } return nil } -func (x *HistorySyncNotification) GetEncHandle() string { - if x != nil && x.EncHandle != nil { - return *x.EncHandle - } - return "" -} - -type RequestWelcomeMessageMetadata struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - LocalChatState *RequestWelcomeMessageMetadata_LocalChatState `protobuf:"varint,1,opt,name=localChatState,enum=WAWebProtobufsE2E.RequestWelcomeMessageMetadata_LocalChatState" json:"localChatState,omitempty"` -} - -func (x *RequestWelcomeMessageMetadata) Reset() { - *x = RequestWelcomeMessageMetadata{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[20] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) +func (x *ImageMessage) GetImageSourceType() ImageMessage_ImageSourceType { + if x != nil && x.ImageSourceType != nil { + return *x.ImageSourceType } + return ImageMessage_USER_IMAGE } -func (x *RequestWelcomeMessageMetadata) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*RequestWelcomeMessageMetadata) ProtoMessage() {} - -func (x *RequestWelcomeMessageMetadata) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[20] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms +func (x *ImageMessage) GetAccessibilityLabel() string { + if x != nil && x.AccessibilityLabel != nil { + return *x.AccessibilityLabel } - return mi.MessageOf(x) -} - -// Deprecated: Use RequestWelcomeMessageMetadata.ProtoReflect.Descriptor instead. -func (*RequestWelcomeMessageMetadata) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{20} + return "" } -func (x *RequestWelcomeMessageMetadata) GetLocalChatState() RequestWelcomeMessageMetadata_LocalChatState { - if x != nil && x.LocalChatState != nil { - return *x.LocalChatState +func (x *ImageMessage) GetQrURL() string { + if x != nil && x.QrURL != nil { + return *x.QrURL } - return RequestWelcomeMessageMetadata_EMPTY + return "" } -type ProtocolMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Key *waCommon.MessageKey `protobuf:"bytes,1,opt,name=key" json:"key,omitempty"` - Type *ProtocolMessage_Type `protobuf:"varint,2,opt,name=type,enum=WAWebProtobufsE2E.ProtocolMessage_Type" json:"type,omitempty"` - EphemeralExpiration *uint32 `protobuf:"varint,4,opt,name=ephemeralExpiration" json:"ephemeralExpiration,omitempty"` - EphemeralSettingTimestamp *int64 `protobuf:"varint,5,opt,name=ephemeralSettingTimestamp" json:"ephemeralSettingTimestamp,omitempty"` - HistorySyncNotification *HistorySyncNotification `protobuf:"bytes,6,opt,name=historySyncNotification" json:"historySyncNotification,omitempty"` - AppStateSyncKeyShare *AppStateSyncKeyShare `protobuf:"bytes,7,opt,name=appStateSyncKeyShare" json:"appStateSyncKeyShare,omitempty"` - AppStateSyncKeyRequest *AppStateSyncKeyRequest `protobuf:"bytes,8,opt,name=appStateSyncKeyRequest" json:"appStateSyncKeyRequest,omitempty"` - InitialSecurityNotificationSettingSync *InitialSecurityNotificationSettingSync `protobuf:"bytes,9,opt,name=initialSecurityNotificationSettingSync" json:"initialSecurityNotificationSettingSync,omitempty"` - AppStateFatalExceptionNotification *AppStateFatalExceptionNotification `protobuf:"bytes,10,opt,name=appStateFatalExceptionNotification" json:"appStateFatalExceptionNotification,omitempty"` - DisappearingMode *DisappearingMode `protobuf:"bytes,11,opt,name=disappearingMode" json:"disappearingMode,omitempty"` - EditedMessage *Message `protobuf:"bytes,14,opt,name=editedMessage" json:"editedMessage,omitempty"` - TimestampMS *int64 `protobuf:"varint,15,opt,name=timestampMS" json:"timestampMS,omitempty"` - PeerDataOperationRequestMessage *PeerDataOperationRequestMessage `protobuf:"bytes,16,opt,name=peerDataOperationRequestMessage" json:"peerDataOperationRequestMessage,omitempty"` - PeerDataOperationRequestResponseMessage *PeerDataOperationRequestResponseMessage `protobuf:"bytes,17,opt,name=peerDataOperationRequestResponseMessage" json:"peerDataOperationRequestResponseMessage,omitempty"` - BotFeedbackMessage *BotFeedbackMessage `protobuf:"bytes,18,opt,name=botFeedbackMessage" json:"botFeedbackMessage,omitempty"` - InvokerJID *string `protobuf:"bytes,19,opt,name=invokerJID" json:"invokerJID,omitempty"` - RequestWelcomeMessageMetadata *RequestWelcomeMessageMetadata `protobuf:"bytes,20,opt,name=requestWelcomeMessageMetadata" json:"requestWelcomeMessageMetadata,omitempty"` - MediaNotifyMessage *MediaNotifyMessage `protobuf:"bytes,21,opt,name=mediaNotifyMessage" json:"mediaNotifyMessage,omitempty"` - CloudApiThreadControlNotification *CloudAPIThreadControlNotification `protobuf:"bytes,22,opt,name=cloudApiThreadControlNotification" json:"cloudApiThreadControlNotification,omitempty"` - LidMigrationMappingSyncMessage *LIDMigrationMappingSyncMessage `protobuf:"bytes,23,opt,name=lidMigrationMappingSyncMessage" json:"lidMigrationMappingSyncMessage,omitempty"` +type ContextInfo struct { + state protoimpl.MessageState `protogen:"open.v1"` + StanzaID *string `protobuf:"bytes,1,opt,name=stanzaID" json:"stanzaID,omitempty"` + Participant *string `protobuf:"bytes,2,opt,name=participant" json:"participant,omitempty"` + QuotedMessage *Message `protobuf:"bytes,3,opt,name=quotedMessage" json:"quotedMessage,omitempty"` + RemoteJID *string `protobuf:"bytes,4,opt,name=remoteJID" json:"remoteJID,omitempty"` + MentionedJID []string `protobuf:"bytes,15,rep,name=mentionedJID" json:"mentionedJID,omitempty"` + ConversionSource *string `protobuf:"bytes,18,opt,name=conversionSource" json:"conversionSource,omitempty"` + ConversionData []byte `protobuf:"bytes,19,opt,name=conversionData" json:"conversionData,omitempty"` + ConversionDelaySeconds *uint32 `protobuf:"varint,20,opt,name=conversionDelaySeconds" json:"conversionDelaySeconds,omitempty"` + ForwardingScore *uint32 `protobuf:"varint,21,opt,name=forwardingScore" json:"forwardingScore,omitempty"` + IsForwarded *bool `protobuf:"varint,22,opt,name=isForwarded" json:"isForwarded,omitempty"` + QuotedAd *ContextInfo_AdReplyInfo `protobuf:"bytes,23,opt,name=quotedAd" json:"quotedAd,omitempty"` + PlaceholderKey *waCommon.MessageKey `protobuf:"bytes,24,opt,name=placeholderKey" json:"placeholderKey,omitempty"` + Expiration *uint32 `protobuf:"varint,25,opt,name=expiration" json:"expiration,omitempty"` + EphemeralSettingTimestamp *int64 `protobuf:"varint,26,opt,name=ephemeralSettingTimestamp" json:"ephemeralSettingTimestamp,omitempty"` + EphemeralSharedSecret []byte `protobuf:"bytes,27,opt,name=ephemeralSharedSecret" json:"ephemeralSharedSecret,omitempty"` + ExternalAdReply *ContextInfo_ExternalAdReplyInfo `protobuf:"bytes,28,opt,name=externalAdReply" json:"externalAdReply,omitempty"` + EntryPointConversionSource *string `protobuf:"bytes,29,opt,name=entryPointConversionSource" json:"entryPointConversionSource,omitempty"` + EntryPointConversionApp *string `protobuf:"bytes,30,opt,name=entryPointConversionApp" json:"entryPointConversionApp,omitempty"` + EntryPointConversionDelaySeconds *uint32 `protobuf:"varint,31,opt,name=entryPointConversionDelaySeconds" json:"entryPointConversionDelaySeconds,omitempty"` + DisappearingMode *DisappearingMode `protobuf:"bytes,32,opt,name=disappearingMode" json:"disappearingMode,omitempty"` + ActionLink *ActionLink `protobuf:"bytes,33,opt,name=actionLink" json:"actionLink,omitempty"` + GroupSubject *string `protobuf:"bytes,34,opt,name=groupSubject" json:"groupSubject,omitempty"` + ParentGroupJID *string `protobuf:"bytes,35,opt,name=parentGroupJID" json:"parentGroupJID,omitempty"` + TrustBannerType *string `protobuf:"bytes,37,opt,name=trustBannerType" json:"trustBannerType,omitempty"` + TrustBannerAction *uint32 `protobuf:"varint,38,opt,name=trustBannerAction" json:"trustBannerAction,omitempty"` + IsSampled *bool `protobuf:"varint,39,opt,name=isSampled" json:"isSampled,omitempty"` + GroupMentions []*GroupMention `protobuf:"bytes,40,rep,name=groupMentions" json:"groupMentions,omitempty"` + Utm *ContextInfo_UTMInfo `protobuf:"bytes,41,opt,name=utm" json:"utm,omitempty"` + ForwardedNewsletterMessageInfo *ContextInfo_ForwardedNewsletterMessageInfo `protobuf:"bytes,43,opt,name=forwardedNewsletterMessageInfo" json:"forwardedNewsletterMessageInfo,omitempty"` + BusinessMessageForwardInfo *ContextInfo_BusinessMessageForwardInfo `protobuf:"bytes,44,opt,name=businessMessageForwardInfo" json:"businessMessageForwardInfo,omitempty"` + SmbClientCampaignID *string `protobuf:"bytes,45,opt,name=smbClientCampaignID" json:"smbClientCampaignID,omitempty"` + SmbServerCampaignID *string `protobuf:"bytes,46,opt,name=smbServerCampaignID" json:"smbServerCampaignID,omitempty"` + DataSharingContext *ContextInfo_DataSharingContext `protobuf:"bytes,47,opt,name=dataSharingContext" json:"dataSharingContext,omitempty"` + AlwaysShowAdAttribution *bool `protobuf:"varint,48,opt,name=alwaysShowAdAttribution" json:"alwaysShowAdAttribution,omitempty"` + FeatureEligibilities *ContextInfo_FeatureEligibilities `protobuf:"bytes,49,opt,name=featureEligibilities" json:"featureEligibilities,omitempty"` + EntryPointConversionExternalSource *string `protobuf:"bytes,50,opt,name=entryPointConversionExternalSource" json:"entryPointConversionExternalSource,omitempty"` + EntryPointConversionExternalMedium *string `protobuf:"bytes,51,opt,name=entryPointConversionExternalMedium" json:"entryPointConversionExternalMedium,omitempty"` + CtwaSignals *string `protobuf:"bytes,54,opt,name=ctwaSignals" json:"ctwaSignals,omitempty"` + CtwaPayload []byte `protobuf:"bytes,55,opt,name=ctwaPayload" json:"ctwaPayload,omitempty"` + ForwardedAiBotMessageInfo *waAICommon.ForwardedAIBotMessageInfo `protobuf:"bytes,56,opt,name=forwardedAiBotMessageInfo" json:"forwardedAiBotMessageInfo,omitempty"` + StatusAttributionType *ContextInfo_StatusAttributionType `protobuf:"varint,57,opt,name=statusAttributionType,enum=WAWebProtobufsE2E.ContextInfo_StatusAttributionType" json:"statusAttributionType,omitempty"` + UrlTrackingMap *UrlTrackingMap `protobuf:"bytes,58,opt,name=urlTrackingMap" json:"urlTrackingMap,omitempty"` + PairedMediaType *ContextInfo_PairedMediaType `protobuf:"varint,59,opt,name=pairedMediaType,enum=WAWebProtobufsE2E.ContextInfo_PairedMediaType" json:"pairedMediaType,omitempty"` + RankingVersion *uint32 `protobuf:"varint,60,opt,name=rankingVersion" json:"rankingVersion,omitempty"` + MemberLabel *MemberLabel `protobuf:"bytes,62,opt,name=memberLabel" json:"memberLabel,omitempty"` + IsQuestion *bool `protobuf:"varint,63,opt,name=isQuestion" json:"isQuestion,omitempty"` + StatusSourceType *ContextInfo_StatusSourceType `protobuf:"varint,64,opt,name=statusSourceType,enum=WAWebProtobufsE2E.ContextInfo_StatusSourceType" json:"statusSourceType,omitempty"` + StatusAttributions []*waStatusAttributions.StatusAttribution `protobuf:"bytes,65,rep,name=statusAttributions" json:"statusAttributions,omitempty"` + IsGroupStatus *bool `protobuf:"varint,66,opt,name=isGroupStatus" json:"isGroupStatus,omitempty"` + ForwardOrigin *ContextInfo_ForwardOrigin `protobuf:"varint,67,opt,name=forwardOrigin,enum=WAWebProtobufsE2E.ContextInfo_ForwardOrigin" json:"forwardOrigin,omitempty"` + QuestionReplyQuotedMessage *ContextInfo_QuestionReplyQuotedMessage `protobuf:"bytes,68,opt,name=questionReplyQuotedMessage" json:"questionReplyQuotedMessage,omitempty"` + StatusAudienceMetadata *ContextInfo_StatusAudienceMetadata `protobuf:"bytes,69,opt,name=statusAudienceMetadata" json:"statusAudienceMetadata,omitempty"` + NonJIDMentions *uint32 `protobuf:"varint,70,opt,name=nonJIDMentions" json:"nonJIDMentions,omitempty"` + QuotedType *ContextInfo_QuotedType `protobuf:"varint,71,opt,name=quotedType,enum=WAWebProtobufsE2E.ContextInfo_QuotedType" json:"quotedType,omitempty"` + BotMessageSharingInfo *waAICommon.BotMessageSharingInfo `protobuf:"bytes,72,opt,name=botMessageSharingInfo" json:"botMessageSharingInfo,omitempty"` + IsSpoiler *bool `protobuf:"varint,73,opt,name=isSpoiler" json:"isSpoiler,omitempty"` + MediaDomainInfo *MediaDomainInfo `protobuf:"bytes,74,opt,name=mediaDomainInfo" json:"mediaDomainInfo,omitempty"` + PartiallySelectedContent *ContextInfo_PartiallySelectedContent `protobuf:"bytes,75,opt,name=partiallySelectedContent" json:"partiallySelectedContent,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *ProtocolMessage) Reset() { - *x = ProtocolMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[21] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *ContextInfo) Reset() { + *x = ContextInfo{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[33] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *ProtocolMessage) String() string { +func (x *ContextInfo) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ProtocolMessage) ProtoMessage() {} +func (*ContextInfo) ProtoMessage() {} -func (x *ProtocolMessage) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[21] - if protoimpl.UnsafeEnabled && x != nil { +func (x *ContextInfo) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[33] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -5463,607 +8144,567 @@ func (x *ProtocolMessage) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ProtocolMessage.ProtoReflect.Descriptor instead. -func (*ProtocolMessage) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{21} -} - -func (x *ProtocolMessage) GetKey() *waCommon.MessageKey { - if x != nil { - return x.Key - } - return nil -} - -func (x *ProtocolMessage) GetType() ProtocolMessage_Type { - if x != nil && x.Type != nil { - return *x.Type - } - return ProtocolMessage_REVOKE -} - -func (x *ProtocolMessage) GetEphemeralExpiration() uint32 { - if x != nil && x.EphemeralExpiration != nil { - return *x.EphemeralExpiration - } - return 0 +// Deprecated: Use ContextInfo.ProtoReflect.Descriptor instead. +func (*ContextInfo) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{33} } -func (x *ProtocolMessage) GetEphemeralSettingTimestamp() int64 { - if x != nil && x.EphemeralSettingTimestamp != nil { - return *x.EphemeralSettingTimestamp +func (x *ContextInfo) GetStanzaID() string { + if x != nil && x.StanzaID != nil { + return *x.StanzaID } - return 0 + return "" } -func (x *ProtocolMessage) GetHistorySyncNotification() *HistorySyncNotification { - if x != nil { - return x.HistorySyncNotification +func (x *ContextInfo) GetParticipant() string { + if x != nil && x.Participant != nil { + return *x.Participant } - return nil + return "" } -func (x *ProtocolMessage) GetAppStateSyncKeyShare() *AppStateSyncKeyShare { +func (x *ContextInfo) GetQuotedMessage() *Message { if x != nil { - return x.AppStateSyncKeyShare + return x.QuotedMessage } return nil } -func (x *ProtocolMessage) GetAppStateSyncKeyRequest() *AppStateSyncKeyRequest { - if x != nil { - return x.AppStateSyncKeyRequest +func (x *ContextInfo) GetRemoteJID() string { + if x != nil && x.RemoteJID != nil { + return *x.RemoteJID } - return nil + return "" } -func (x *ProtocolMessage) GetInitialSecurityNotificationSettingSync() *InitialSecurityNotificationSettingSync { +func (x *ContextInfo) GetMentionedJID() []string { if x != nil { - return x.InitialSecurityNotificationSettingSync + return x.MentionedJID } return nil } -func (x *ProtocolMessage) GetAppStateFatalExceptionNotification() *AppStateFatalExceptionNotification { - if x != nil { - return x.AppStateFatalExceptionNotification +func (x *ContextInfo) GetConversionSource() string { + if x != nil && x.ConversionSource != nil { + return *x.ConversionSource } - return nil + return "" } -func (x *ProtocolMessage) GetDisappearingMode() *DisappearingMode { +func (x *ContextInfo) GetConversionData() []byte { if x != nil { - return x.DisappearingMode + return x.ConversionData } return nil } -func (x *ProtocolMessage) GetEditedMessage() *Message { - if x != nil { - return x.EditedMessage +func (x *ContextInfo) GetConversionDelaySeconds() uint32 { + if x != nil && x.ConversionDelaySeconds != nil { + return *x.ConversionDelaySeconds } - return nil + return 0 } -func (x *ProtocolMessage) GetTimestampMS() int64 { - if x != nil && x.TimestampMS != nil { - return *x.TimestampMS +func (x *ContextInfo) GetForwardingScore() uint32 { + if x != nil && x.ForwardingScore != nil { + return *x.ForwardingScore } return 0 } -func (x *ProtocolMessage) GetPeerDataOperationRequestMessage() *PeerDataOperationRequestMessage { - if x != nil { - return x.PeerDataOperationRequestMessage +func (x *ContextInfo) GetIsForwarded() bool { + if x != nil && x.IsForwarded != nil { + return *x.IsForwarded } - return nil + return false } -func (x *ProtocolMessage) GetPeerDataOperationRequestResponseMessage() *PeerDataOperationRequestResponseMessage { +func (x *ContextInfo) GetQuotedAd() *ContextInfo_AdReplyInfo { if x != nil { - return x.PeerDataOperationRequestResponseMessage + return x.QuotedAd } return nil } -func (x *ProtocolMessage) GetBotFeedbackMessage() *BotFeedbackMessage { +func (x *ContextInfo) GetPlaceholderKey() *waCommon.MessageKey { if x != nil { - return x.BotFeedbackMessage + return x.PlaceholderKey } return nil } -func (x *ProtocolMessage) GetInvokerJID() string { - if x != nil && x.InvokerJID != nil { - return *x.InvokerJID +func (x *ContextInfo) GetExpiration() uint32 { + if x != nil && x.Expiration != nil { + return *x.Expiration } - return "" + return 0 } -func (x *ProtocolMessage) GetRequestWelcomeMessageMetadata() *RequestWelcomeMessageMetadata { - if x != nil { - return x.RequestWelcomeMessageMetadata +func (x *ContextInfo) GetEphemeralSettingTimestamp() int64 { + if x != nil && x.EphemeralSettingTimestamp != nil { + return *x.EphemeralSettingTimestamp } - return nil + return 0 } -func (x *ProtocolMessage) GetMediaNotifyMessage() *MediaNotifyMessage { +func (x *ContextInfo) GetEphemeralSharedSecret() []byte { if x != nil { - return x.MediaNotifyMessage + return x.EphemeralSharedSecret } return nil } -func (x *ProtocolMessage) GetCloudApiThreadControlNotification() *CloudAPIThreadControlNotification { +func (x *ContextInfo) GetExternalAdReply() *ContextInfo_ExternalAdReplyInfo { if x != nil { - return x.CloudApiThreadControlNotification + return x.ExternalAdReply } return nil } -func (x *ProtocolMessage) GetLidMigrationMappingSyncMessage() *LIDMigrationMappingSyncMessage { - if x != nil { - return x.LidMigrationMappingSyncMessage +func (x *ContextInfo) GetEntryPointConversionSource() string { + if x != nil && x.EntryPointConversionSource != nil { + return *x.EntryPointConversionSource } - return nil -} - -type CloudAPIThreadControlNotification struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Status *CloudAPIThreadControlNotification_CloudAPIThreadControl `protobuf:"varint,1,opt,name=status,enum=WAWebProtobufsE2E.CloudAPIThreadControlNotification_CloudAPIThreadControl" json:"status,omitempty"` - SenderNotificationTimestampMS *int64 `protobuf:"varint,2,opt,name=senderNotificationTimestampMS" json:"senderNotificationTimestampMS,omitempty"` - ConsumerLid *string `protobuf:"bytes,3,opt,name=consumerLid" json:"consumerLid,omitempty"` - ConsumerPhoneNumber *string `protobuf:"bytes,4,opt,name=consumerPhoneNumber" json:"consumerPhoneNumber,omitempty"` + return "" } -func (x *CloudAPIThreadControlNotification) Reset() { - *x = CloudAPIThreadControlNotification{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[22] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) +func (x *ContextInfo) GetEntryPointConversionApp() string { + if x != nil && x.EntryPointConversionApp != nil { + return *x.EntryPointConversionApp } + return "" } -func (x *CloudAPIThreadControlNotification) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CloudAPIThreadControlNotification) ProtoMessage() {} - -func (x *CloudAPIThreadControlNotification) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[22] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms +func (x *ContextInfo) GetEntryPointConversionDelaySeconds() uint32 { + if x != nil && x.EntryPointConversionDelaySeconds != nil { + return *x.EntryPointConversionDelaySeconds } - return mi.MessageOf(x) -} - -// Deprecated: Use CloudAPIThreadControlNotification.ProtoReflect.Descriptor instead. -func (*CloudAPIThreadControlNotification) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{22} + return 0 } -func (x *CloudAPIThreadControlNotification) GetStatus() CloudAPIThreadControlNotification_CloudAPIThreadControl { - if x != nil && x.Status != nil { - return *x.Status +func (x *ContextInfo) GetDisappearingMode() *DisappearingMode { + if x != nil { + return x.DisappearingMode } - return CloudAPIThreadControlNotification_UNKNOWN + return nil } -func (x *CloudAPIThreadControlNotification) GetSenderNotificationTimestampMS() int64 { - if x != nil && x.SenderNotificationTimestampMS != nil { - return *x.SenderNotificationTimestampMS +func (x *ContextInfo) GetActionLink() *ActionLink { + if x != nil { + return x.ActionLink } - return 0 + return nil } -func (x *CloudAPIThreadControlNotification) GetConsumerLid() string { - if x != nil && x.ConsumerLid != nil { - return *x.ConsumerLid +func (x *ContextInfo) GetGroupSubject() string { + if x != nil && x.GroupSubject != nil { + return *x.GroupSubject } return "" } -func (x *CloudAPIThreadControlNotification) GetConsumerPhoneNumber() string { - if x != nil && x.ConsumerPhoneNumber != nil { - return *x.ConsumerPhoneNumber +func (x *ContextInfo) GetParentGroupJID() string { + if x != nil && x.ParentGroupJID != nil { + return *x.ParentGroupJID } return "" } -type BotFeedbackMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - MessageKey *waCommon.MessageKey `protobuf:"bytes,1,opt,name=messageKey" json:"messageKey,omitempty"` - Kind *BotFeedbackMessage_BotFeedbackKind `protobuf:"varint,2,opt,name=kind,enum=WAWebProtobufsE2E.BotFeedbackMessage_BotFeedbackKind" json:"kind,omitempty"` - Text *string `protobuf:"bytes,3,opt,name=text" json:"text,omitempty"` - KindNegative *uint64 `protobuf:"varint,4,opt,name=kindNegative" json:"kindNegative,omitempty"` - KindPositive *uint64 `protobuf:"varint,5,opt,name=kindPositive" json:"kindPositive,omitempty"` - KindReport *BotFeedbackMessage_ReportKind `protobuf:"varint,6,opt,name=kindReport,enum=WAWebProtobufsE2E.BotFeedbackMessage_ReportKind" json:"kindReport,omitempty"` +func (x *ContextInfo) GetTrustBannerType() string { + if x != nil && x.TrustBannerType != nil { + return *x.TrustBannerType + } + return "" } -func (x *BotFeedbackMessage) Reset() { - *x = BotFeedbackMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[23] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) +func (x *ContextInfo) GetTrustBannerAction() uint32 { + if x != nil && x.TrustBannerAction != nil { + return *x.TrustBannerAction } + return 0 } -func (x *BotFeedbackMessage) String() string { - return protoimpl.X.MessageStringOf(x) +func (x *ContextInfo) GetIsSampled() bool { + if x != nil && x.IsSampled != nil { + return *x.IsSampled + } + return false } -func (*BotFeedbackMessage) ProtoMessage() {} - -func (x *BotFeedbackMessage) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[23] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms +func (x *ContextInfo) GetGroupMentions() []*GroupMention { + if x != nil { + return x.GroupMentions } - return mi.MessageOf(x) + return nil } -// Deprecated: Use BotFeedbackMessage.ProtoReflect.Descriptor instead. -func (*BotFeedbackMessage) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{23} +func (x *ContextInfo) GetUtm() *ContextInfo_UTMInfo { + if x != nil { + return x.Utm + } + return nil } -func (x *BotFeedbackMessage) GetMessageKey() *waCommon.MessageKey { +func (x *ContextInfo) GetForwardedNewsletterMessageInfo() *ContextInfo_ForwardedNewsletterMessageInfo { if x != nil { - return x.MessageKey + return x.ForwardedNewsletterMessageInfo } return nil } -func (x *BotFeedbackMessage) GetKind() BotFeedbackMessage_BotFeedbackKind { - if x != nil && x.Kind != nil { - return *x.Kind +func (x *ContextInfo) GetBusinessMessageForwardInfo() *ContextInfo_BusinessMessageForwardInfo { + if x != nil { + return x.BusinessMessageForwardInfo } - return BotFeedbackMessage_BOT_FEEDBACK_POSITIVE + return nil } -func (x *BotFeedbackMessage) GetText() string { - if x != nil && x.Text != nil { - return *x.Text +func (x *ContextInfo) GetSmbClientCampaignID() string { + if x != nil && x.SmbClientCampaignID != nil { + return *x.SmbClientCampaignID } return "" } -func (x *BotFeedbackMessage) GetKindNegative() uint64 { - if x != nil && x.KindNegative != nil { - return *x.KindNegative +func (x *ContextInfo) GetSmbServerCampaignID() string { + if x != nil && x.SmbServerCampaignID != nil { + return *x.SmbServerCampaignID } - return 0 + return "" } -func (x *BotFeedbackMessage) GetKindPositive() uint64 { - if x != nil && x.KindPositive != nil { - return *x.KindPositive +func (x *ContextInfo) GetDataSharingContext() *ContextInfo_DataSharingContext { + if x != nil { + return x.DataSharingContext } - return 0 + return nil } -func (x *BotFeedbackMessage) GetKindReport() BotFeedbackMessage_ReportKind { - if x != nil && x.KindReport != nil { - return *x.KindReport +func (x *ContextInfo) GetAlwaysShowAdAttribution() bool { + if x != nil && x.AlwaysShowAdAttribution != nil { + return *x.AlwaysShowAdAttribution } - return BotFeedbackMessage_GENERIC + return false } -type VideoMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - URL *string `protobuf:"bytes,1,opt,name=URL" json:"URL,omitempty"` - Mimetype *string `protobuf:"bytes,2,opt,name=mimetype" json:"mimetype,omitempty"` - FileSHA256 []byte `protobuf:"bytes,3,opt,name=fileSHA256" json:"fileSHA256,omitempty"` - FileLength *uint64 `protobuf:"varint,4,opt,name=fileLength" json:"fileLength,omitempty"` - Seconds *uint32 `protobuf:"varint,5,opt,name=seconds" json:"seconds,omitempty"` - MediaKey []byte `protobuf:"bytes,6,opt,name=mediaKey" json:"mediaKey,omitempty"` - Caption *string `protobuf:"bytes,7,opt,name=caption" json:"caption,omitempty"` - GifPlayback *bool `protobuf:"varint,8,opt,name=gifPlayback" json:"gifPlayback,omitempty"` - Height *uint32 `protobuf:"varint,9,opt,name=height" json:"height,omitempty"` - Width *uint32 `protobuf:"varint,10,opt,name=width" json:"width,omitempty"` - FileEncSHA256 []byte `protobuf:"bytes,11,opt,name=fileEncSHA256" json:"fileEncSHA256,omitempty"` - InteractiveAnnotations []*InteractiveAnnotation `protobuf:"bytes,12,rep,name=interactiveAnnotations" json:"interactiveAnnotations,omitempty"` - DirectPath *string `protobuf:"bytes,13,opt,name=directPath" json:"directPath,omitempty"` - MediaKeyTimestamp *int64 `protobuf:"varint,14,opt,name=mediaKeyTimestamp" json:"mediaKeyTimestamp,omitempty"` - JPEGThumbnail []byte `protobuf:"bytes,16,opt,name=JPEGThumbnail" json:"JPEGThumbnail,omitempty"` - ContextInfo *ContextInfo `protobuf:"bytes,17,opt,name=contextInfo" json:"contextInfo,omitempty"` - StreamingSidecar []byte `protobuf:"bytes,18,opt,name=streamingSidecar" json:"streamingSidecar,omitempty"` - GifAttribution *VideoMessage_Attribution `protobuf:"varint,19,opt,name=gifAttribution,enum=WAWebProtobufsE2E.VideoMessage_Attribution" json:"gifAttribution,omitempty"` - ViewOnce *bool `protobuf:"varint,20,opt,name=viewOnce" json:"viewOnce,omitempty"` - ThumbnailDirectPath *string `protobuf:"bytes,21,opt,name=thumbnailDirectPath" json:"thumbnailDirectPath,omitempty"` - ThumbnailSHA256 []byte `protobuf:"bytes,22,opt,name=thumbnailSHA256" json:"thumbnailSHA256,omitempty"` - ThumbnailEncSHA256 []byte `protobuf:"bytes,23,opt,name=thumbnailEncSHA256" json:"thumbnailEncSHA256,omitempty"` - StaticURL *string `protobuf:"bytes,24,opt,name=staticURL" json:"staticURL,omitempty"` - Annotations []*InteractiveAnnotation `protobuf:"bytes,25,rep,name=annotations" json:"annotations,omitempty"` - AccessibilityLabel *string `protobuf:"bytes,26,opt,name=accessibilityLabel" json:"accessibilityLabel,omitempty"` - ProcessedVideos []*ProcessedVideo `protobuf:"bytes,27,rep,name=processedVideos" json:"processedVideos,omitempty"` +func (x *ContextInfo) GetFeatureEligibilities() *ContextInfo_FeatureEligibilities { + if x != nil { + return x.FeatureEligibilities + } + return nil } -func (x *VideoMessage) Reset() { - *x = VideoMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[24] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) +func (x *ContextInfo) GetEntryPointConversionExternalSource() string { + if x != nil && x.EntryPointConversionExternalSource != nil { + return *x.EntryPointConversionExternalSource } + return "" } -func (x *VideoMessage) String() string { - return protoimpl.X.MessageStringOf(x) +func (x *ContextInfo) GetEntryPointConversionExternalMedium() string { + if x != nil && x.EntryPointConversionExternalMedium != nil { + return *x.EntryPointConversionExternalMedium + } + return "" } -func (*VideoMessage) ProtoMessage() {} - -func (x *VideoMessage) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[24] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms +func (x *ContextInfo) GetCtwaSignals() string { + if x != nil && x.CtwaSignals != nil { + return *x.CtwaSignals } - return mi.MessageOf(x) + return "" } -// Deprecated: Use VideoMessage.ProtoReflect.Descriptor instead. -func (*VideoMessage) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{24} +func (x *ContextInfo) GetCtwaPayload() []byte { + if x != nil { + return x.CtwaPayload + } + return nil } -func (x *VideoMessage) GetURL() string { - if x != nil && x.URL != nil { - return *x.URL +func (x *ContextInfo) GetForwardedAiBotMessageInfo() *waAICommon.ForwardedAIBotMessageInfo { + if x != nil { + return x.ForwardedAiBotMessageInfo } - return "" + return nil } -func (x *VideoMessage) GetMimetype() string { - if x != nil && x.Mimetype != nil { - return *x.Mimetype +func (x *ContextInfo) GetStatusAttributionType() ContextInfo_StatusAttributionType { + if x != nil && x.StatusAttributionType != nil { + return *x.StatusAttributionType } - return "" + return ContextInfo_NONE } -func (x *VideoMessage) GetFileSHA256() []byte { +func (x *ContextInfo) GetUrlTrackingMap() *UrlTrackingMap { if x != nil { - return x.FileSHA256 + return x.UrlTrackingMap } return nil } -func (x *VideoMessage) GetFileLength() uint64 { - if x != nil && x.FileLength != nil { - return *x.FileLength +func (x *ContextInfo) GetPairedMediaType() ContextInfo_PairedMediaType { + if x != nil && x.PairedMediaType != nil { + return *x.PairedMediaType } - return 0 + return ContextInfo_NOT_PAIRED_MEDIA } -func (x *VideoMessage) GetSeconds() uint32 { - if x != nil && x.Seconds != nil { - return *x.Seconds +func (x *ContextInfo) GetRankingVersion() uint32 { + if x != nil && x.RankingVersion != nil { + return *x.RankingVersion } return 0 } -func (x *VideoMessage) GetMediaKey() []byte { +func (x *ContextInfo) GetMemberLabel() *MemberLabel { if x != nil { - return x.MediaKey + return x.MemberLabel } return nil } -func (x *VideoMessage) GetCaption() string { - if x != nil && x.Caption != nil { - return *x.Caption +func (x *ContextInfo) GetIsQuestion() bool { + if x != nil && x.IsQuestion != nil { + return *x.IsQuestion + } + return false +} + +func (x *ContextInfo) GetStatusSourceType() ContextInfo_StatusSourceType { + if x != nil && x.StatusSourceType != nil { + return *x.StatusSourceType } - return "" + return ContextInfo_IMAGE } -func (x *VideoMessage) GetGifPlayback() bool { - if x != nil && x.GifPlayback != nil { - return *x.GifPlayback +func (x *ContextInfo) GetStatusAttributions() []*waStatusAttributions.StatusAttribution { + if x != nil { + return x.StatusAttributions } - return false + return nil } -func (x *VideoMessage) GetHeight() uint32 { - if x != nil && x.Height != nil { - return *x.Height +func (x *ContextInfo) GetIsGroupStatus() bool { + if x != nil && x.IsGroupStatus != nil { + return *x.IsGroupStatus } - return 0 + return false } -func (x *VideoMessage) GetWidth() uint32 { - if x != nil && x.Width != nil { - return *x.Width +func (x *ContextInfo) GetForwardOrigin() ContextInfo_ForwardOrigin { + if x != nil && x.ForwardOrigin != nil { + return *x.ForwardOrigin } - return 0 + return ContextInfo_UNKNOWN } -func (x *VideoMessage) GetFileEncSHA256() []byte { +func (x *ContextInfo) GetQuestionReplyQuotedMessage() *ContextInfo_QuestionReplyQuotedMessage { if x != nil { - return x.FileEncSHA256 + return x.QuestionReplyQuotedMessage } return nil } -func (x *VideoMessage) GetInteractiveAnnotations() []*InteractiveAnnotation { +func (x *ContextInfo) GetStatusAudienceMetadata() *ContextInfo_StatusAudienceMetadata { if x != nil { - return x.InteractiveAnnotations + return x.StatusAudienceMetadata } return nil } -func (x *VideoMessage) GetDirectPath() string { - if x != nil && x.DirectPath != nil { - return *x.DirectPath +func (x *ContextInfo) GetNonJIDMentions() uint32 { + if x != nil && x.NonJIDMentions != nil { + return *x.NonJIDMentions } - return "" + return 0 } -func (x *VideoMessage) GetMediaKeyTimestamp() int64 { - if x != nil && x.MediaKeyTimestamp != nil { - return *x.MediaKeyTimestamp +func (x *ContextInfo) GetQuotedType() ContextInfo_QuotedType { + if x != nil && x.QuotedType != nil { + return *x.QuotedType } - return 0 + return ContextInfo_EXPLICIT } -func (x *VideoMessage) GetJPEGThumbnail() []byte { +func (x *ContextInfo) GetBotMessageSharingInfo() *waAICommon.BotMessageSharingInfo { if x != nil { - return x.JPEGThumbnail + return x.BotMessageSharingInfo } return nil } -func (x *VideoMessage) GetContextInfo() *ContextInfo { +func (x *ContextInfo) GetIsSpoiler() bool { + if x != nil && x.IsSpoiler != nil { + return *x.IsSpoiler + } + return false +} + +func (x *ContextInfo) GetMediaDomainInfo() *MediaDomainInfo { if x != nil { - return x.ContextInfo + return x.MediaDomainInfo } return nil } -func (x *VideoMessage) GetStreamingSidecar() []byte { +func (x *ContextInfo) GetPartiallySelectedContent() *ContextInfo_PartiallySelectedContent { if x != nil { - return x.StreamingSidecar + return x.PartiallySelectedContent } return nil } -func (x *VideoMessage) GetGifAttribution() VideoMessage_Attribution { - if x != nil && x.GifAttribution != nil { - return *x.GifAttribution - } - return VideoMessage_NONE +type MessageAssociation struct { + state protoimpl.MessageState `protogen:"open.v1"` + AssociationType *MessageAssociation_AssociationType `protobuf:"varint,1,opt,name=associationType,enum=WAWebProtobufsE2E.MessageAssociation_AssociationType" json:"associationType,omitempty"` + ParentMessageKey *waCommon.MessageKey `protobuf:"bytes,2,opt,name=parentMessageKey" json:"parentMessageKey,omitempty"` + MessageIndex *int32 `protobuf:"varint,3,opt,name=messageIndex" json:"messageIndex,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *VideoMessage) GetViewOnce() bool { - if x != nil && x.ViewOnce != nil { - return *x.ViewOnce - } - return false +func (x *MessageAssociation) Reset() { + *x = MessageAssociation{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[34] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *VideoMessage) GetThumbnailDirectPath() string { - if x != nil && x.ThumbnailDirectPath != nil { - return *x.ThumbnailDirectPath - } - return "" +func (x *MessageAssociation) String() string { + return protoimpl.X.MessageStringOf(x) } -func (x *VideoMessage) GetThumbnailSHA256() []byte { +func (*MessageAssociation) ProtoMessage() {} + +func (x *MessageAssociation) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[34] if x != nil { - return x.ThumbnailSHA256 + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return nil + return mi.MessageOf(x) } -func (x *VideoMessage) GetThumbnailEncSHA256() []byte { +// Deprecated: Use MessageAssociation.ProtoReflect.Descriptor instead. +func (*MessageAssociation) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{34} +} + +func (x *MessageAssociation) GetAssociationType() MessageAssociation_AssociationType { + if x != nil && x.AssociationType != nil { + return *x.AssociationType + } + return MessageAssociation_UNKNOWN +} + +func (x *MessageAssociation) GetParentMessageKey() *waCommon.MessageKey { if x != nil { - return x.ThumbnailEncSHA256 + return x.ParentMessageKey } return nil } -func (x *VideoMessage) GetStaticURL() string { - if x != nil && x.StaticURL != nil { - return *x.StaticURL +func (x *MessageAssociation) GetMessageIndex() int32 { + if x != nil && x.MessageIndex != nil { + return *x.MessageIndex } - return "" + return 0 } -func (x *VideoMessage) GetAnnotations() []*InteractiveAnnotation { +type ThreadID struct { + state protoimpl.MessageState `protogen:"open.v1"` + ThreadType *ThreadID_ThreadType `protobuf:"varint,1,opt,name=threadType,enum=WAWebProtobufsE2E.ThreadID_ThreadType" json:"threadType,omitempty"` + ThreadKey *waCommon.MessageKey `protobuf:"bytes,2,opt,name=threadKey" json:"threadKey,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ThreadID) Reset() { + *x = ThreadID{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[35] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ThreadID) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ThreadID) ProtoMessage() {} + +func (x *ThreadID) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[35] if x != nil { - return x.Annotations + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return nil + return mi.MessageOf(x) } -func (x *VideoMessage) GetAccessibilityLabel() string { - if x != nil && x.AccessibilityLabel != nil { - return *x.AccessibilityLabel +// Deprecated: Use ThreadID.ProtoReflect.Descriptor instead. +func (*ThreadID) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{35} +} + +func (x *ThreadID) GetThreadType() ThreadID_ThreadType { + if x != nil && x.ThreadType != nil { + return *x.ThreadType } - return "" + return ThreadID_UNKNOWN } -func (x *VideoMessage) GetProcessedVideos() []*ProcessedVideo { +func (x *ThreadID) GetThreadKey() *waCommon.MessageKey { if x != nil { - return x.ProcessedVideos + return x.ThreadKey } return nil } -type ExtendedTextMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Text *string `protobuf:"bytes,1,opt,name=text" json:"text,omitempty"` - MatchedText *string `protobuf:"bytes,2,opt,name=matchedText" json:"matchedText,omitempty"` - CanonicalURL *string `protobuf:"bytes,4,opt,name=canonicalURL" json:"canonicalURL,omitempty"` - Description *string `protobuf:"bytes,5,opt,name=description" json:"description,omitempty"` - Title *string `protobuf:"bytes,6,opt,name=title" json:"title,omitempty"` - TextArgb *uint32 `protobuf:"fixed32,7,opt,name=textArgb" json:"textArgb,omitempty"` - BackgroundArgb *uint32 `protobuf:"fixed32,8,opt,name=backgroundArgb" json:"backgroundArgb,omitempty"` - Font *ExtendedTextMessage_FontType `protobuf:"varint,9,opt,name=font,enum=WAWebProtobufsE2E.ExtendedTextMessage_FontType" json:"font,omitempty"` - PreviewType *ExtendedTextMessage_PreviewType `protobuf:"varint,10,opt,name=previewType,enum=WAWebProtobufsE2E.ExtendedTextMessage_PreviewType" json:"previewType,omitempty"` - JPEGThumbnail []byte `protobuf:"bytes,16,opt,name=JPEGThumbnail" json:"JPEGThumbnail,omitempty"` - ContextInfo *ContextInfo `protobuf:"bytes,17,opt,name=contextInfo" json:"contextInfo,omitempty"` - DoNotPlayInline *bool `protobuf:"varint,18,opt,name=doNotPlayInline" json:"doNotPlayInline,omitempty"` - ThumbnailDirectPath *string `protobuf:"bytes,19,opt,name=thumbnailDirectPath" json:"thumbnailDirectPath,omitempty"` - ThumbnailSHA256 []byte `protobuf:"bytes,20,opt,name=thumbnailSHA256" json:"thumbnailSHA256,omitempty"` - ThumbnailEncSHA256 []byte `protobuf:"bytes,21,opt,name=thumbnailEncSHA256" json:"thumbnailEncSHA256,omitempty"` - MediaKey []byte `protobuf:"bytes,22,opt,name=mediaKey" json:"mediaKey,omitempty"` - MediaKeyTimestamp *int64 `protobuf:"varint,23,opt,name=mediaKeyTimestamp" json:"mediaKeyTimestamp,omitempty"` - ThumbnailHeight *uint32 `protobuf:"varint,24,opt,name=thumbnailHeight" json:"thumbnailHeight,omitempty"` - ThumbnailWidth *uint32 `protobuf:"varint,25,opt,name=thumbnailWidth" json:"thumbnailWidth,omitempty"` - InviteLinkGroupType *ExtendedTextMessage_InviteLinkGroupType `protobuf:"varint,26,opt,name=inviteLinkGroupType,enum=WAWebProtobufsE2E.ExtendedTextMessage_InviteLinkGroupType" json:"inviteLinkGroupType,omitempty"` - InviteLinkParentGroupSubjectV2 *string `protobuf:"bytes,27,opt,name=inviteLinkParentGroupSubjectV2" json:"inviteLinkParentGroupSubjectV2,omitempty"` - InviteLinkParentGroupThumbnailV2 []byte `protobuf:"bytes,28,opt,name=inviteLinkParentGroupThumbnailV2" json:"inviteLinkParentGroupThumbnailV2,omitempty"` - InviteLinkGroupTypeV2 *ExtendedTextMessage_InviteLinkGroupType `protobuf:"varint,29,opt,name=inviteLinkGroupTypeV2,enum=WAWebProtobufsE2E.ExtendedTextMessage_InviteLinkGroupType" json:"inviteLinkGroupTypeV2,omitempty"` - ViewOnce *bool `protobuf:"varint,30,opt,name=viewOnce" json:"viewOnce,omitempty"` - VideoHeight *uint32 `protobuf:"varint,31,opt,name=videoHeight" json:"videoHeight,omitempty"` - VideoWidth *uint32 `protobuf:"varint,32,opt,name=videoWidth" json:"videoWidth,omitempty"` +type MessageContextInfo struct { + state protoimpl.MessageState `protogen:"open.v1"` + DeviceListMetadata *DeviceListMetadata `protobuf:"bytes,1,opt,name=deviceListMetadata" json:"deviceListMetadata,omitempty"` + DeviceListMetadataVersion *int32 `protobuf:"varint,2,opt,name=deviceListMetadataVersion" json:"deviceListMetadataVersion,omitempty"` + MessageSecret []byte `protobuf:"bytes,3,opt,name=messageSecret" json:"messageSecret,omitempty"` + PaddingBytes []byte `protobuf:"bytes,4,opt,name=paddingBytes" json:"paddingBytes,omitempty"` + MessageAddOnDurationInSecs *uint32 `protobuf:"varint,5,opt,name=messageAddOnDurationInSecs" json:"messageAddOnDurationInSecs,omitempty"` + BotMessageSecret []byte `protobuf:"bytes,6,opt,name=botMessageSecret" json:"botMessageSecret,omitempty"` + BotMetadata *waAICommon.BotMetadata `protobuf:"bytes,7,opt,name=botMetadata" json:"botMetadata,omitempty"` + ReportingTokenVersion *int32 `protobuf:"varint,8,opt,name=reportingTokenVersion" json:"reportingTokenVersion,omitempty"` + MessageAddOnExpiryType *MessageContextInfo_MessageAddonExpiryType `protobuf:"varint,9,opt,name=messageAddOnExpiryType,enum=WAWebProtobufsE2E.MessageContextInfo_MessageAddonExpiryType" json:"messageAddOnExpiryType,omitempty"` + MessageAssociation *MessageAssociation `protobuf:"bytes,10,opt,name=messageAssociation" json:"messageAssociation,omitempty"` + CapiCreatedGroup *bool `protobuf:"varint,11,opt,name=capiCreatedGroup" json:"capiCreatedGroup,omitempty"` + SupportPayload *string `protobuf:"bytes,12,opt,name=supportPayload" json:"supportPayload,omitempty"` + LimitSharing *waCommon.LimitSharing `protobuf:"bytes,13,opt,name=limitSharing" json:"limitSharing,omitempty"` + LimitSharingV2 *waCommon.LimitSharing `protobuf:"bytes,14,opt,name=limitSharingV2" json:"limitSharingV2,omitempty"` + ThreadID []*ThreadID `protobuf:"bytes,15,rep,name=threadID" json:"threadID,omitempty"` + WeblinkRenderConfig *WebLinkRenderConfig `protobuf:"varint,16,opt,name=weblinkRenderConfig,enum=WAWebProtobufsE2E.WebLinkRenderConfig" json:"weblinkRenderConfig,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *ExtendedTextMessage) Reset() { - *x = ExtendedTextMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[25] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *MessageContextInfo) Reset() { + *x = MessageContextInfo{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[36] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *ExtendedTextMessage) String() string { +func (x *MessageContextInfo) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ExtendedTextMessage) ProtoMessage() {} +func (*MessageContextInfo) ProtoMessage() {} -func (x *ExtendedTextMessage) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[25] - if protoimpl.UnsafeEnabled && x != nil { +func (x *MessageContextInfo) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[36] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -6073,228 +8714,298 @@ func (x *ExtendedTextMessage) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ExtendedTextMessage.ProtoReflect.Descriptor instead. -func (*ExtendedTextMessage) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{25} +// Deprecated: Use MessageContextInfo.ProtoReflect.Descriptor instead. +func (*MessageContextInfo) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{36} } -func (x *ExtendedTextMessage) GetText() string { - if x != nil && x.Text != nil { - return *x.Text +func (x *MessageContextInfo) GetDeviceListMetadata() *DeviceListMetadata { + if x != nil { + return x.DeviceListMetadata } - return "" + return nil } -func (x *ExtendedTextMessage) GetMatchedText() string { - if x != nil && x.MatchedText != nil { - return *x.MatchedText +func (x *MessageContextInfo) GetDeviceListMetadataVersion() int32 { + if x != nil && x.DeviceListMetadataVersion != nil { + return *x.DeviceListMetadataVersion } - return "" + return 0 } -func (x *ExtendedTextMessage) GetCanonicalURL() string { - if x != nil && x.CanonicalURL != nil { - return *x.CanonicalURL +func (x *MessageContextInfo) GetMessageSecret() []byte { + if x != nil { + return x.MessageSecret } - return "" + return nil } -func (x *ExtendedTextMessage) GetDescription() string { - if x != nil && x.Description != nil { - return *x.Description +func (x *MessageContextInfo) GetPaddingBytes() []byte { + if x != nil { + return x.PaddingBytes } - return "" + return nil } -func (x *ExtendedTextMessage) GetTitle() string { - if x != nil && x.Title != nil { - return *x.Title +func (x *MessageContextInfo) GetMessageAddOnDurationInSecs() uint32 { + if x != nil && x.MessageAddOnDurationInSecs != nil { + return *x.MessageAddOnDurationInSecs } - return "" + return 0 +} + +func (x *MessageContextInfo) GetBotMessageSecret() []byte { + if x != nil { + return x.BotMessageSecret + } + return nil +} + +func (x *MessageContextInfo) GetBotMetadata() *waAICommon.BotMetadata { + if x != nil { + return x.BotMetadata + } + return nil +} + +func (x *MessageContextInfo) GetReportingTokenVersion() int32 { + if x != nil && x.ReportingTokenVersion != nil { + return *x.ReportingTokenVersion + } + return 0 +} + +func (x *MessageContextInfo) GetMessageAddOnExpiryType() MessageContextInfo_MessageAddonExpiryType { + if x != nil && x.MessageAddOnExpiryType != nil { + return *x.MessageAddOnExpiryType + } + return MessageContextInfo_STATIC } -func (x *ExtendedTextMessage) GetTextArgb() uint32 { - if x != nil && x.TextArgb != nil { - return *x.TextArgb +func (x *MessageContextInfo) GetMessageAssociation() *MessageAssociation { + if x != nil { + return x.MessageAssociation } - return 0 + return nil } -func (x *ExtendedTextMessage) GetBackgroundArgb() uint32 { - if x != nil && x.BackgroundArgb != nil { - return *x.BackgroundArgb +func (x *MessageContextInfo) GetCapiCreatedGroup() bool { + if x != nil && x.CapiCreatedGroup != nil { + return *x.CapiCreatedGroup } - return 0 + return false } -func (x *ExtendedTextMessage) GetFont() ExtendedTextMessage_FontType { - if x != nil && x.Font != nil { - return *x.Font +func (x *MessageContextInfo) GetSupportPayload() string { + if x != nil && x.SupportPayload != nil { + return *x.SupportPayload } - return ExtendedTextMessage_SYSTEM + return "" } -func (x *ExtendedTextMessage) GetPreviewType() ExtendedTextMessage_PreviewType { - if x != nil && x.PreviewType != nil { - return *x.PreviewType +func (x *MessageContextInfo) GetLimitSharing() *waCommon.LimitSharing { + if x != nil { + return x.LimitSharing } - return ExtendedTextMessage_NONE + return nil } -func (x *ExtendedTextMessage) GetJPEGThumbnail() []byte { +func (x *MessageContextInfo) GetLimitSharingV2() *waCommon.LimitSharing { if x != nil { - return x.JPEGThumbnail + return x.LimitSharingV2 } return nil } -func (x *ExtendedTextMessage) GetContextInfo() *ContextInfo { +func (x *MessageContextInfo) GetThreadID() []*ThreadID { if x != nil { - return x.ContextInfo + return x.ThreadID } return nil } -func (x *ExtendedTextMessage) GetDoNotPlayInline() bool { - if x != nil && x.DoNotPlayInline != nil { - return *x.DoNotPlayInline +func (x *MessageContextInfo) GetWeblinkRenderConfig() WebLinkRenderConfig { + if x != nil && x.WeblinkRenderConfig != nil { + return *x.WeblinkRenderConfig } - return false + return WebLinkRenderConfig_WEBVIEW } -func (x *ExtendedTextMessage) GetThumbnailDirectPath() string { - if x != nil && x.ThumbnailDirectPath != nil { - return *x.ThumbnailDirectPath - } - return "" +type InteractiveAnnotation struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Types that are valid to be assigned to Action: + // + // *InteractiveAnnotation_Location + // *InteractiveAnnotation_Newsletter + // *InteractiveAnnotation_EmbeddedAction + // *InteractiveAnnotation_TapAction + Action isInteractiveAnnotation_Action `protobuf_oneof:"action"` + PolygonVertices []*Point `protobuf:"bytes,1,rep,name=polygonVertices" json:"polygonVertices,omitempty"` + ShouldSkipConfirmation *bool `protobuf:"varint,4,opt,name=shouldSkipConfirmation" json:"shouldSkipConfirmation,omitempty"` + EmbeddedContent *EmbeddedContent `protobuf:"bytes,5,opt,name=embeddedContent" json:"embeddedContent,omitempty"` + StatusLinkType *InteractiveAnnotation_StatusLinkType `protobuf:"varint,8,opt,name=statusLinkType,enum=WAWebProtobufsE2E.InteractiveAnnotation_StatusLinkType" json:"statusLinkType,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *ExtendedTextMessage) GetThumbnailSHA256() []byte { +func (x *InteractiveAnnotation) Reset() { + *x = InteractiveAnnotation{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[37] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *InteractiveAnnotation) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*InteractiveAnnotation) ProtoMessage() {} + +func (x *InteractiveAnnotation) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[37] if x != nil { - return x.ThumbnailSHA256 + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return nil + return mi.MessageOf(x) } -func (x *ExtendedTextMessage) GetThumbnailEncSHA256() []byte { +// Deprecated: Use InteractiveAnnotation.ProtoReflect.Descriptor instead. +func (*InteractiveAnnotation) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{37} +} + +func (x *InteractiveAnnotation) GetAction() isInteractiveAnnotation_Action { if x != nil { - return x.ThumbnailEncSHA256 + return x.Action } return nil } -func (x *ExtendedTextMessage) GetMediaKey() []byte { +func (x *InteractiveAnnotation) GetLocation() *Location { if x != nil { - return x.MediaKey + if x, ok := x.Action.(*InteractiveAnnotation_Location); ok { + return x.Location + } } return nil } -func (x *ExtendedTextMessage) GetMediaKeyTimestamp() int64 { - if x != nil && x.MediaKeyTimestamp != nil { - return *x.MediaKeyTimestamp +func (x *InteractiveAnnotation) GetNewsletter() *ContextInfo_ForwardedNewsletterMessageInfo { + if x != nil { + if x, ok := x.Action.(*InteractiveAnnotation_Newsletter); ok { + return x.Newsletter + } } - return 0 + return nil } -func (x *ExtendedTextMessage) GetThumbnailHeight() uint32 { - if x != nil && x.ThumbnailHeight != nil { - return *x.ThumbnailHeight +func (x *InteractiveAnnotation) GetEmbeddedAction() bool { + if x != nil { + if x, ok := x.Action.(*InteractiveAnnotation_EmbeddedAction); ok { + return x.EmbeddedAction + } } - return 0 + return false } -func (x *ExtendedTextMessage) GetThumbnailWidth() uint32 { - if x != nil && x.ThumbnailWidth != nil { - return *x.ThumbnailWidth +func (x *InteractiveAnnotation) GetTapAction() *TapLinkAction { + if x != nil { + if x, ok := x.Action.(*InteractiveAnnotation_TapAction); ok { + return x.TapAction + } } - return 0 + return nil } -func (x *ExtendedTextMessage) GetInviteLinkGroupType() ExtendedTextMessage_InviteLinkGroupType { - if x != nil && x.InviteLinkGroupType != nil { - return *x.InviteLinkGroupType +func (x *InteractiveAnnotation) GetPolygonVertices() []*Point { + if x != nil { + return x.PolygonVertices } - return ExtendedTextMessage_DEFAULT + return nil } -func (x *ExtendedTextMessage) GetInviteLinkParentGroupSubjectV2() string { - if x != nil && x.InviteLinkParentGroupSubjectV2 != nil { - return *x.InviteLinkParentGroupSubjectV2 +func (x *InteractiveAnnotation) GetShouldSkipConfirmation() bool { + if x != nil && x.ShouldSkipConfirmation != nil { + return *x.ShouldSkipConfirmation } - return "" + return false } -func (x *ExtendedTextMessage) GetInviteLinkParentGroupThumbnailV2() []byte { +func (x *InteractiveAnnotation) GetEmbeddedContent() *EmbeddedContent { if x != nil { - return x.InviteLinkParentGroupThumbnailV2 + return x.EmbeddedContent } return nil } -func (x *ExtendedTextMessage) GetInviteLinkGroupTypeV2() ExtendedTextMessage_InviteLinkGroupType { - if x != nil && x.InviteLinkGroupTypeV2 != nil { - return *x.InviteLinkGroupTypeV2 +func (x *InteractiveAnnotation) GetStatusLinkType() InteractiveAnnotation_StatusLinkType { + if x != nil && x.StatusLinkType != nil { + return *x.StatusLinkType } - return ExtendedTextMessage_DEFAULT + return InteractiveAnnotation_RASTERIZED_LINK_PREVIEW } -func (x *ExtendedTextMessage) GetViewOnce() bool { - if x != nil && x.ViewOnce != nil { - return *x.ViewOnce - } - return false +type isInteractiveAnnotation_Action interface { + isInteractiveAnnotation_Action() } -func (x *ExtendedTextMessage) GetVideoHeight() uint32 { - if x != nil && x.VideoHeight != nil { - return *x.VideoHeight - } - return 0 +type InteractiveAnnotation_Location struct { + Location *Location `protobuf:"bytes,2,opt,name=location,oneof"` } -func (x *ExtendedTextMessage) GetVideoWidth() uint32 { - if x != nil && x.VideoWidth != nil { - return *x.VideoWidth - } - return 0 +type InteractiveAnnotation_Newsletter struct { + Newsletter *ContextInfo_ForwardedNewsletterMessageInfo `protobuf:"bytes,3,opt,name=newsletter,oneof"` } -type InvoiceMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +type InteractiveAnnotation_EmbeddedAction struct { + EmbeddedAction bool `protobuf:"varint,6,opt,name=embeddedAction,oneof"` +} - Note *string `protobuf:"bytes,1,opt,name=note" json:"note,omitempty"` - Token *string `protobuf:"bytes,2,opt,name=token" json:"token,omitempty"` - AttachmentType *InvoiceMessage_AttachmentType `protobuf:"varint,3,opt,name=attachmentType,enum=WAWebProtobufsE2E.InvoiceMessage_AttachmentType" json:"attachmentType,omitempty"` - AttachmentMimetype *string `protobuf:"bytes,4,opt,name=attachmentMimetype" json:"attachmentMimetype,omitempty"` - AttachmentMediaKey []byte `protobuf:"bytes,5,opt,name=attachmentMediaKey" json:"attachmentMediaKey,omitempty"` - AttachmentMediaKeyTimestamp *int64 `protobuf:"varint,6,opt,name=attachmentMediaKeyTimestamp" json:"attachmentMediaKeyTimestamp,omitempty"` - AttachmentFileSHA256 []byte `protobuf:"bytes,7,opt,name=attachmentFileSHA256" json:"attachmentFileSHA256,omitempty"` - AttachmentFileEncSHA256 []byte `protobuf:"bytes,8,opt,name=attachmentFileEncSHA256" json:"attachmentFileEncSHA256,omitempty"` - AttachmentDirectPath *string `protobuf:"bytes,9,opt,name=attachmentDirectPath" json:"attachmentDirectPath,omitempty"` - AttachmentJPEGThumbnail []byte `protobuf:"bytes,10,opt,name=attachmentJPEGThumbnail" json:"attachmentJPEGThumbnail,omitempty"` +type InteractiveAnnotation_TapAction struct { + TapAction *TapLinkAction `protobuf:"bytes,7,opt,name=tapAction,oneof"` } -func (x *InvoiceMessage) Reset() { - *x = InvoiceMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[26] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (*InteractiveAnnotation_Location) isInteractiveAnnotation_Action() {} + +func (*InteractiveAnnotation_Newsletter) isInteractiveAnnotation_Action() {} + +func (*InteractiveAnnotation_EmbeddedAction) isInteractiveAnnotation_Action() {} + +func (*InteractiveAnnotation_TapAction) isInteractiveAnnotation_Action() {} + +type HydratedTemplateButton struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Types that are valid to be assigned to HydratedButton: + // + // *HydratedTemplateButton_QuickReplyButton + // *HydratedTemplateButton_UrlButton + // *HydratedTemplateButton_CallButton + HydratedButton isHydratedTemplateButton_HydratedButton `protobuf_oneof:"hydratedButton"` + Index *uint32 `protobuf:"varint,4,opt,name=index" json:"index,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *InvoiceMessage) String() string { +func (x *HydratedTemplateButton) Reset() { + *x = HydratedTemplateButton{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[38] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *HydratedTemplateButton) String() string { return protoimpl.X.MessageStringOf(x) } -func (*InvoiceMessage) ProtoMessage() {} +func (*HydratedTemplateButton) ProtoMessage() {} -func (x *InvoiceMessage) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[26] - if protoimpl.UnsafeEnabled && x != nil { +func (x *HydratedTemplateButton) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[38] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -6304,135 +9015,106 @@ func (x *InvoiceMessage) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use InvoiceMessage.ProtoReflect.Descriptor instead. -func (*InvoiceMessage) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{26} -} - -func (x *InvoiceMessage) GetNote() string { - if x != nil && x.Note != nil { - return *x.Note - } - return "" +// Deprecated: Use HydratedTemplateButton.ProtoReflect.Descriptor instead. +func (*HydratedTemplateButton) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{38} } -func (x *InvoiceMessage) GetToken() string { - if x != nil && x.Token != nil { - return *x.Token +func (x *HydratedTemplateButton) GetHydratedButton() isHydratedTemplateButton_HydratedButton { + if x != nil { + return x.HydratedButton } - return "" + return nil } -func (x *InvoiceMessage) GetAttachmentType() InvoiceMessage_AttachmentType { - if x != nil && x.AttachmentType != nil { - return *x.AttachmentType +func (x *HydratedTemplateButton) GetQuickReplyButton() *HydratedTemplateButton_HydratedQuickReplyButton { + if x != nil { + if x, ok := x.HydratedButton.(*HydratedTemplateButton_QuickReplyButton); ok { + return x.QuickReplyButton + } } - return InvoiceMessage_IMAGE + return nil } -func (x *InvoiceMessage) GetAttachmentMimetype() string { - if x != nil && x.AttachmentMimetype != nil { - return *x.AttachmentMimetype +func (x *HydratedTemplateButton) GetUrlButton() *HydratedTemplateButton_HydratedURLButton { + if x != nil { + if x, ok := x.HydratedButton.(*HydratedTemplateButton_UrlButton); ok { + return x.UrlButton + } } - return "" + return nil } -func (x *InvoiceMessage) GetAttachmentMediaKey() []byte { +func (x *HydratedTemplateButton) GetCallButton() *HydratedTemplateButton_HydratedCallButton { if x != nil { - return x.AttachmentMediaKey + if x, ok := x.HydratedButton.(*HydratedTemplateButton_CallButton); ok { + return x.CallButton + } } return nil } -func (x *InvoiceMessage) GetAttachmentMediaKeyTimestamp() int64 { - if x != nil && x.AttachmentMediaKeyTimestamp != nil { - return *x.AttachmentMediaKeyTimestamp +func (x *HydratedTemplateButton) GetIndex() uint32 { + if x != nil && x.Index != nil { + return *x.Index } return 0 } -func (x *InvoiceMessage) GetAttachmentFileSHA256() []byte { - if x != nil { - return x.AttachmentFileSHA256 - } - return nil +type isHydratedTemplateButton_HydratedButton interface { + isHydratedTemplateButton_HydratedButton() } - -func (x *InvoiceMessage) GetAttachmentFileEncSHA256() []byte { - if x != nil { - return x.AttachmentFileEncSHA256 - } - return nil + +type HydratedTemplateButton_QuickReplyButton struct { + QuickReplyButton *HydratedTemplateButton_HydratedQuickReplyButton `protobuf:"bytes,1,opt,name=quickReplyButton,oneof"` } -func (x *InvoiceMessage) GetAttachmentDirectPath() string { - if x != nil && x.AttachmentDirectPath != nil { - return *x.AttachmentDirectPath - } - return "" +type HydratedTemplateButton_UrlButton struct { + UrlButton *HydratedTemplateButton_HydratedURLButton `protobuf:"bytes,2,opt,name=urlButton,oneof"` } -func (x *InvoiceMessage) GetAttachmentJPEGThumbnail() []byte { - if x != nil { - return x.AttachmentJPEGThumbnail - } - return nil +type HydratedTemplateButton_CallButton struct { + CallButton *HydratedTemplateButton_HydratedCallButton `protobuf:"bytes,3,opt,name=callButton,oneof"` } -type ImageMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +func (*HydratedTemplateButton_QuickReplyButton) isHydratedTemplateButton_HydratedButton() {} - URL *string `protobuf:"bytes,1,opt,name=URL" json:"URL,omitempty"` - Mimetype *string `protobuf:"bytes,2,opt,name=mimetype" json:"mimetype,omitempty"` - Caption *string `protobuf:"bytes,3,opt,name=caption" json:"caption,omitempty"` - FileSHA256 []byte `protobuf:"bytes,4,opt,name=fileSHA256" json:"fileSHA256,omitempty"` - FileLength *uint64 `protobuf:"varint,5,opt,name=fileLength" json:"fileLength,omitempty"` - Height *uint32 `protobuf:"varint,6,opt,name=height" json:"height,omitempty"` - Width *uint32 `protobuf:"varint,7,opt,name=width" json:"width,omitempty"` - MediaKey []byte `protobuf:"bytes,8,opt,name=mediaKey" json:"mediaKey,omitempty"` - FileEncSHA256 []byte `protobuf:"bytes,9,opt,name=fileEncSHA256" json:"fileEncSHA256,omitempty"` - InteractiveAnnotations []*InteractiveAnnotation `protobuf:"bytes,10,rep,name=interactiveAnnotations" json:"interactiveAnnotations,omitempty"` - DirectPath *string `protobuf:"bytes,11,opt,name=directPath" json:"directPath,omitempty"` - MediaKeyTimestamp *int64 `protobuf:"varint,12,opt,name=mediaKeyTimestamp" json:"mediaKeyTimestamp,omitempty"` - JPEGThumbnail []byte `protobuf:"bytes,16,opt,name=JPEGThumbnail" json:"JPEGThumbnail,omitempty"` - ContextInfo *ContextInfo `protobuf:"bytes,17,opt,name=contextInfo" json:"contextInfo,omitempty"` - FirstScanSidecar []byte `protobuf:"bytes,18,opt,name=firstScanSidecar" json:"firstScanSidecar,omitempty"` - FirstScanLength *uint32 `protobuf:"varint,19,opt,name=firstScanLength" json:"firstScanLength,omitempty"` - ExperimentGroupID *uint32 `protobuf:"varint,20,opt,name=experimentGroupID" json:"experimentGroupID,omitempty"` - ScansSidecar []byte `protobuf:"bytes,21,opt,name=scansSidecar" json:"scansSidecar,omitempty"` - ScanLengths []uint32 `protobuf:"varint,22,rep,name=scanLengths" json:"scanLengths,omitempty"` - MidQualityFileSHA256 []byte `protobuf:"bytes,23,opt,name=midQualityFileSHA256" json:"midQualityFileSHA256,omitempty"` - MidQualityFileEncSHA256 []byte `protobuf:"bytes,24,opt,name=midQualityFileEncSHA256" json:"midQualityFileEncSHA256,omitempty"` - ViewOnce *bool `protobuf:"varint,25,opt,name=viewOnce" json:"viewOnce,omitempty"` - ThumbnailDirectPath *string `protobuf:"bytes,26,opt,name=thumbnailDirectPath" json:"thumbnailDirectPath,omitempty"` - ThumbnailSHA256 []byte `protobuf:"bytes,27,opt,name=thumbnailSHA256" json:"thumbnailSHA256,omitempty"` - ThumbnailEncSHA256 []byte `protobuf:"bytes,28,opt,name=thumbnailEncSHA256" json:"thumbnailEncSHA256,omitempty"` - StaticURL *string `protobuf:"bytes,29,opt,name=staticURL" json:"staticURL,omitempty"` - Annotations []*InteractiveAnnotation `protobuf:"bytes,30,rep,name=annotations" json:"annotations,omitempty"` - ImageSourceType *ImageMessage_ImageSourceType `protobuf:"varint,31,opt,name=imageSourceType,enum=WAWebProtobufsE2E.ImageMessage_ImageSourceType" json:"imageSourceType,omitempty"` - AccessibilityLabel *string `protobuf:"bytes,32,opt,name=accessibilityLabel" json:"accessibilityLabel,omitempty"` +func (*HydratedTemplateButton_UrlButton) isHydratedTemplateButton_HydratedButton() {} + +func (*HydratedTemplateButton_CallButton) isHydratedTemplateButton_HydratedButton() {} + +type PaymentBackground struct { + state protoimpl.MessageState `protogen:"open.v1"` + ID *string `protobuf:"bytes,1,opt,name=ID" json:"ID,omitempty"` + FileLength *uint64 `protobuf:"varint,2,opt,name=fileLength" json:"fileLength,omitempty"` + Width *uint32 `protobuf:"varint,3,opt,name=width" json:"width,omitempty"` + Height *uint32 `protobuf:"varint,4,opt,name=height" json:"height,omitempty"` + Mimetype *string `protobuf:"bytes,5,opt,name=mimetype" json:"mimetype,omitempty"` + PlaceholderArgb *uint32 `protobuf:"fixed32,6,opt,name=placeholderArgb" json:"placeholderArgb,omitempty"` + TextArgb *uint32 `protobuf:"fixed32,7,opt,name=textArgb" json:"textArgb,omitempty"` + SubtextArgb *uint32 `protobuf:"fixed32,8,opt,name=subtextArgb" json:"subtextArgb,omitempty"` + MediaData *PaymentBackground_MediaData `protobuf:"bytes,9,opt,name=mediaData" json:"mediaData,omitempty"` + Type *PaymentBackground_Type `protobuf:"varint,10,opt,name=type,enum=WAWebProtobufsE2E.PaymentBackground_Type" json:"type,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *ImageMessage) Reset() { - *x = ImageMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[27] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *PaymentBackground) Reset() { + *x = PaymentBackground{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[39] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *ImageMessage) String() string { +func (x *PaymentBackground) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ImageMessage) ProtoMessage() {} +func (*PaymentBackground) ProtoMessage() {} -func (x *ImageMessage) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[27] - if protoimpl.UnsafeEnabled && x != nil { +func (x *PaymentBackground) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[39] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -6442,276 +9124,370 @@ func (x *ImageMessage) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ImageMessage.ProtoReflect.Descriptor instead. -func (*ImageMessage) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{27} +// Deprecated: Use PaymentBackground.ProtoReflect.Descriptor instead. +func (*PaymentBackground) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{39} } -func (x *ImageMessage) GetURL() string { - if x != nil && x.URL != nil { - return *x.URL +func (x *PaymentBackground) GetID() string { + if x != nil && x.ID != nil { + return *x.ID } return "" } -func (x *ImageMessage) GetMimetype() string { - if x != nil && x.Mimetype != nil { - return *x.Mimetype +func (x *PaymentBackground) GetFileLength() uint64 { + if x != nil && x.FileLength != nil { + return *x.FileLength } - return "" + return 0 } -func (x *ImageMessage) GetCaption() string { - if x != nil && x.Caption != nil { - return *x.Caption +func (x *PaymentBackground) GetWidth() uint32 { + if x != nil && x.Width != nil { + return *x.Width } - return "" + return 0 } -func (x *ImageMessage) GetFileSHA256() []byte { - if x != nil { - return x.FileSHA256 +func (x *PaymentBackground) GetHeight() uint32 { + if x != nil && x.Height != nil { + return *x.Height } - return nil + return 0 } -func (x *ImageMessage) GetFileLength() uint64 { - if x != nil && x.FileLength != nil { - return *x.FileLength +func (x *PaymentBackground) GetMimetype() string { + if x != nil && x.Mimetype != nil { + return *x.Mimetype } - return 0 + return "" } -func (x *ImageMessage) GetHeight() uint32 { - if x != nil && x.Height != nil { - return *x.Height +func (x *PaymentBackground) GetPlaceholderArgb() uint32 { + if x != nil && x.PlaceholderArgb != nil { + return *x.PlaceholderArgb } return 0 } -func (x *ImageMessage) GetWidth() uint32 { - if x != nil && x.Width != nil { - return *x.Width +func (x *PaymentBackground) GetTextArgb() uint32 { + if x != nil && x.TextArgb != nil { + return *x.TextArgb } return 0 } -func (x *ImageMessage) GetMediaKey() []byte { - if x != nil { - return x.MediaKey +func (x *PaymentBackground) GetSubtextArgb() uint32 { + if x != nil && x.SubtextArgb != nil { + return *x.SubtextArgb } - return nil + return 0 } -func (x *ImageMessage) GetFileEncSHA256() []byte { +func (x *PaymentBackground) GetMediaData() *PaymentBackground_MediaData { if x != nil { - return x.FileEncSHA256 + return x.MediaData } return nil } -func (x *ImageMessage) GetInteractiveAnnotations() []*InteractiveAnnotation { - if x != nil { - return x.InteractiveAnnotations +func (x *PaymentBackground) GetType() PaymentBackground_Type { + if x != nil && x.Type != nil { + return *x.Type } - return nil + return PaymentBackground_UNKNOWN } -func (x *ImageMessage) GetDirectPath() string { - if x != nil && x.DirectPath != nil { - return *x.DirectPath - } - return "" +type DisappearingMode struct { + state protoimpl.MessageState `protogen:"open.v1"` + Initiator *DisappearingMode_Initiator `protobuf:"varint,1,opt,name=initiator,enum=WAWebProtobufsE2E.DisappearingMode_Initiator" json:"initiator,omitempty"` + Trigger *DisappearingMode_Trigger `protobuf:"varint,2,opt,name=trigger,enum=WAWebProtobufsE2E.DisappearingMode_Trigger" json:"trigger,omitempty"` + InitiatorDeviceJID *string `protobuf:"bytes,3,opt,name=initiatorDeviceJID" json:"initiatorDeviceJID,omitempty"` + InitiatedByMe *bool `protobuf:"varint,4,opt,name=initiatedByMe" json:"initiatedByMe,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *ImageMessage) GetMediaKeyTimestamp() int64 { - if x != nil && x.MediaKeyTimestamp != nil { - return *x.MediaKeyTimestamp - } - return 0 +func (x *DisappearingMode) Reset() { + *x = DisappearingMode{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[40] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *ImageMessage) GetJPEGThumbnail() []byte { - if x != nil { - return x.JPEGThumbnail - } - return nil +func (x *DisappearingMode) String() string { + return protoimpl.X.MessageStringOf(x) } -func (x *ImageMessage) GetContextInfo() *ContextInfo { +func (*DisappearingMode) ProtoMessage() {} + +func (x *DisappearingMode) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[40] if x != nil { - return x.ContextInfo + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return nil + return mi.MessageOf(x) } -func (x *ImageMessage) GetFirstScanSidecar() []byte { - if x != nil { - return x.FirstScanSidecar - } - return nil +// Deprecated: Use DisappearingMode.ProtoReflect.Descriptor instead. +func (*DisappearingMode) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{40} } -func (x *ImageMessage) GetFirstScanLength() uint32 { - if x != nil && x.FirstScanLength != nil { - return *x.FirstScanLength +func (x *DisappearingMode) GetInitiator() DisappearingMode_Initiator { + if x != nil && x.Initiator != nil { + return *x.Initiator } - return 0 + return DisappearingMode_CHANGED_IN_CHAT } -func (x *ImageMessage) GetExperimentGroupID() uint32 { - if x != nil && x.ExperimentGroupID != nil { - return *x.ExperimentGroupID +func (x *DisappearingMode) GetTrigger() DisappearingMode_Trigger { + if x != nil && x.Trigger != nil { + return *x.Trigger } - return 0 + return DisappearingMode_UNKNOWN } -func (x *ImageMessage) GetScansSidecar() []byte { - if x != nil { - return x.ScansSidecar +func (x *DisappearingMode) GetInitiatorDeviceJID() string { + if x != nil && x.InitiatorDeviceJID != nil { + return *x.InitiatorDeviceJID } - return nil + return "" } -func (x *ImageMessage) GetScanLengths() []uint32 { - if x != nil { - return x.ScanLengths +func (x *DisappearingMode) GetInitiatedByMe() bool { + if x != nil && x.InitiatedByMe != nil { + return *x.InitiatedByMe } - return nil + return false } -func (x *ImageMessage) GetMidQualityFileSHA256() []byte { - if x != nil { - return x.MidQualityFileSHA256 - } - return nil +type ProcessedVideo struct { + state protoimpl.MessageState `protogen:"open.v1"` + DirectPath *string `protobuf:"bytes,1,opt,name=directPath" json:"directPath,omitempty"` + FileSHA256 []byte `protobuf:"bytes,2,opt,name=fileSHA256" json:"fileSHA256,omitempty"` + Height *uint32 `protobuf:"varint,3,opt,name=height" json:"height,omitempty"` + Width *uint32 `protobuf:"varint,4,opt,name=width" json:"width,omitempty"` + FileLength *uint64 `protobuf:"varint,5,opt,name=fileLength" json:"fileLength,omitempty"` + Bitrate *uint32 `protobuf:"varint,6,opt,name=bitrate" json:"bitrate,omitempty"` + Quality *ProcessedVideo_VideoQuality `protobuf:"varint,7,opt,name=quality,enum=WAWebProtobufsE2E.ProcessedVideo_VideoQuality" json:"quality,omitempty"` + Capabilities []string `protobuf:"bytes,8,rep,name=capabilities" json:"capabilities,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *ImageMessage) GetMidQualityFileEncSHA256() []byte { +func (x *ProcessedVideo) Reset() { + *x = ProcessedVideo{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[41] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ProcessedVideo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ProcessedVideo) ProtoMessage() {} + +func (x *ProcessedVideo) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[41] if x != nil { - return x.MidQualityFileEncSHA256 + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return nil + return mi.MessageOf(x) } -func (x *ImageMessage) GetViewOnce() bool { - if x != nil && x.ViewOnce != nil { - return *x.ViewOnce - } - return false +// Deprecated: Use ProcessedVideo.ProtoReflect.Descriptor instead. +func (*ProcessedVideo) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{41} } -func (x *ImageMessage) GetThumbnailDirectPath() string { - if x != nil && x.ThumbnailDirectPath != nil { - return *x.ThumbnailDirectPath +func (x *ProcessedVideo) GetDirectPath() string { + if x != nil && x.DirectPath != nil { + return *x.DirectPath } return "" } -func (x *ImageMessage) GetThumbnailSHA256() []byte { +func (x *ProcessedVideo) GetFileSHA256() []byte { if x != nil { - return x.ThumbnailSHA256 + return x.FileSHA256 } return nil } -func (x *ImageMessage) GetThumbnailEncSHA256() []byte { - if x != nil { - return x.ThumbnailEncSHA256 +func (x *ProcessedVideo) GetHeight() uint32 { + if x != nil && x.Height != nil { + return *x.Height } - return nil + return 0 } -func (x *ImageMessage) GetStaticURL() string { - if x != nil && x.StaticURL != nil { - return *x.StaticURL +func (x *ProcessedVideo) GetWidth() uint32 { + if x != nil && x.Width != nil { + return *x.Width } - return "" + return 0 } -func (x *ImageMessage) GetAnnotations() []*InteractiveAnnotation { - if x != nil { - return x.Annotations +func (x *ProcessedVideo) GetFileLength() uint64 { + if x != nil && x.FileLength != nil { + return *x.FileLength } - return nil + return 0 } -func (x *ImageMessage) GetImageSourceType() ImageMessage_ImageSourceType { - if x != nil && x.ImageSourceType != nil { - return *x.ImageSourceType +func (x *ProcessedVideo) GetBitrate() uint32 { + if x != nil && x.Bitrate != nil { + return *x.Bitrate } - return ImageMessage_USER_IMAGE + return 0 } -func (x *ImageMessage) GetAccessibilityLabel() string { - if x != nil && x.AccessibilityLabel != nil { - return *x.AccessibilityLabel +func (x *ProcessedVideo) GetQuality() ProcessedVideo_VideoQuality { + if x != nil && x.Quality != nil { + return *x.Quality } - return "" + return ProcessedVideo_UNDEFINED } -type ContextInfo struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +func (x *ProcessedVideo) GetCapabilities() []string { + if x != nil { + return x.Capabilities + } + return nil +} - StanzaID *string `protobuf:"bytes,1,opt,name=stanzaID" json:"stanzaID,omitempty"` - Participant *string `protobuf:"bytes,2,opt,name=participant" json:"participant,omitempty"` - QuotedMessage *Message `protobuf:"bytes,3,opt,name=quotedMessage" json:"quotedMessage,omitempty"` - RemoteJID *string `protobuf:"bytes,4,opt,name=remoteJID" json:"remoteJID,omitempty"` - MentionedJID []string `protobuf:"bytes,15,rep,name=mentionedJID" json:"mentionedJID,omitempty"` - ConversionSource *string `protobuf:"bytes,18,opt,name=conversionSource" json:"conversionSource,omitempty"` - ConversionData []byte `protobuf:"bytes,19,opt,name=conversionData" json:"conversionData,omitempty"` - ConversionDelaySeconds *uint32 `protobuf:"varint,20,opt,name=conversionDelaySeconds" json:"conversionDelaySeconds,omitempty"` - ForwardingScore *uint32 `protobuf:"varint,21,opt,name=forwardingScore" json:"forwardingScore,omitempty"` - IsForwarded *bool `protobuf:"varint,22,opt,name=isForwarded" json:"isForwarded,omitempty"` - QuotedAd *ContextInfo_AdReplyInfo `protobuf:"bytes,23,opt,name=quotedAd" json:"quotedAd,omitempty"` - PlaceholderKey *waCommon.MessageKey `protobuf:"bytes,24,opt,name=placeholderKey" json:"placeholderKey,omitempty"` - Expiration *uint32 `protobuf:"varint,25,opt,name=expiration" json:"expiration,omitempty"` - EphemeralSettingTimestamp *int64 `protobuf:"varint,26,opt,name=ephemeralSettingTimestamp" json:"ephemeralSettingTimestamp,omitempty"` - EphemeralSharedSecret []byte `protobuf:"bytes,27,opt,name=ephemeralSharedSecret" json:"ephemeralSharedSecret,omitempty"` - ExternalAdReply *ContextInfo_ExternalAdReplyInfo `protobuf:"bytes,28,opt,name=externalAdReply" json:"externalAdReply,omitempty"` - EntryPointConversionSource *string `protobuf:"bytes,29,opt,name=entryPointConversionSource" json:"entryPointConversionSource,omitempty"` - EntryPointConversionApp *string `protobuf:"bytes,30,opt,name=entryPointConversionApp" json:"entryPointConversionApp,omitempty"` - EntryPointConversionDelaySeconds *uint32 `protobuf:"varint,31,opt,name=entryPointConversionDelaySeconds" json:"entryPointConversionDelaySeconds,omitempty"` - DisappearingMode *DisappearingMode `protobuf:"bytes,32,opt,name=disappearingMode" json:"disappearingMode,omitempty"` - ActionLink *ActionLink `protobuf:"bytes,33,opt,name=actionLink" json:"actionLink,omitempty"` - GroupSubject *string `protobuf:"bytes,34,opt,name=groupSubject" json:"groupSubject,omitempty"` - ParentGroupJID *string `protobuf:"bytes,35,opt,name=parentGroupJID" json:"parentGroupJID,omitempty"` - TrustBannerType *string `protobuf:"bytes,37,opt,name=trustBannerType" json:"trustBannerType,omitempty"` - TrustBannerAction *uint32 `protobuf:"varint,38,opt,name=trustBannerAction" json:"trustBannerAction,omitempty"` - IsSampled *bool `protobuf:"varint,39,opt,name=isSampled" json:"isSampled,omitempty"` - GroupMentions []*GroupMention `protobuf:"bytes,40,rep,name=groupMentions" json:"groupMentions,omitempty"` - Utm *ContextInfo_UTMInfo `protobuf:"bytes,41,opt,name=utm" json:"utm,omitempty"` - ForwardedNewsletterMessageInfo *ContextInfo_ForwardedNewsletterMessageInfo `protobuf:"bytes,43,opt,name=forwardedNewsletterMessageInfo" json:"forwardedNewsletterMessageInfo,omitempty"` - BusinessMessageForwardInfo *ContextInfo_BusinessMessageForwardInfo `protobuf:"bytes,44,opt,name=businessMessageForwardInfo" json:"businessMessageForwardInfo,omitempty"` - SmbClientCampaignID *string `protobuf:"bytes,45,opt,name=smbClientCampaignID" json:"smbClientCampaignID,omitempty"` - SmbServerCampaignID *string `protobuf:"bytes,46,opt,name=smbServerCampaignID" json:"smbServerCampaignID,omitempty"` - DataSharingContext *ContextInfo_DataSharingContext `protobuf:"bytes,47,opt,name=dataSharingContext" json:"dataSharingContext,omitempty"` - AlwaysShowAdAttribution *bool `protobuf:"varint,48,opt,name=alwaysShowAdAttribution" json:"alwaysShowAdAttribution,omitempty"` - FeatureEligibilities *ContextInfo_FeatureEligibilities `protobuf:"bytes,49,opt,name=featureEligibilities" json:"featureEligibilities,omitempty"` - EntryPointConversionExternalSource *string `protobuf:"bytes,50,opt,name=entryPointConversionExternalSource" json:"entryPointConversionExternalSource,omitempty"` - EntryPointConversionExternalMedium *string `protobuf:"bytes,51,opt,name=entryPointConversionExternalMedium" json:"entryPointConversionExternalMedium,omitempty"` +type Message struct { + state protoimpl.MessageState `protogen:"open.v1"` + Conversation *string `protobuf:"bytes,1,opt,name=conversation" json:"conversation,omitempty"` + SenderKeyDistributionMessage *SenderKeyDistributionMessage `protobuf:"bytes,2,opt,name=senderKeyDistributionMessage" json:"senderKeyDistributionMessage,omitempty"` + ImageMessage *ImageMessage `protobuf:"bytes,3,opt,name=imageMessage" json:"imageMessage,omitempty"` + ContactMessage *ContactMessage `protobuf:"bytes,4,opt,name=contactMessage" json:"contactMessage,omitempty"` + LocationMessage *LocationMessage `protobuf:"bytes,5,opt,name=locationMessage" json:"locationMessage,omitempty"` + ExtendedTextMessage *ExtendedTextMessage `protobuf:"bytes,6,opt,name=extendedTextMessage" json:"extendedTextMessage,omitempty"` + DocumentMessage *DocumentMessage `protobuf:"bytes,7,opt,name=documentMessage" json:"documentMessage,omitempty"` + AudioMessage *AudioMessage `protobuf:"bytes,8,opt,name=audioMessage" json:"audioMessage,omitempty"` + VideoMessage *VideoMessage `protobuf:"bytes,9,opt,name=videoMessage" json:"videoMessage,omitempty"` + Call *Call `protobuf:"bytes,10,opt,name=call" json:"call,omitempty"` + Chat *Chat `protobuf:"bytes,11,opt,name=chat" json:"chat,omitempty"` + ProtocolMessage *ProtocolMessage `protobuf:"bytes,12,opt,name=protocolMessage" json:"protocolMessage,omitempty"` + ContactsArrayMessage *ContactsArrayMessage `protobuf:"bytes,13,opt,name=contactsArrayMessage" json:"contactsArrayMessage,omitempty"` + HighlyStructuredMessage *HighlyStructuredMessage `protobuf:"bytes,14,opt,name=highlyStructuredMessage" json:"highlyStructuredMessage,omitempty"` + FastRatchetKeySenderKeyDistributionMessage *SenderKeyDistributionMessage `protobuf:"bytes,15,opt,name=fastRatchetKeySenderKeyDistributionMessage" json:"fastRatchetKeySenderKeyDistributionMessage,omitempty"` + SendPaymentMessage *SendPaymentMessage `protobuf:"bytes,16,opt,name=sendPaymentMessage" json:"sendPaymentMessage,omitempty"` + LiveLocationMessage *LiveLocationMessage `protobuf:"bytes,18,opt,name=liveLocationMessage" json:"liveLocationMessage,omitempty"` + RequestPaymentMessage *RequestPaymentMessage `protobuf:"bytes,22,opt,name=requestPaymentMessage" json:"requestPaymentMessage,omitempty"` + DeclinePaymentRequestMessage *DeclinePaymentRequestMessage `protobuf:"bytes,23,opt,name=declinePaymentRequestMessage" json:"declinePaymentRequestMessage,omitempty"` + CancelPaymentRequestMessage *CancelPaymentRequestMessage `protobuf:"bytes,24,opt,name=cancelPaymentRequestMessage" json:"cancelPaymentRequestMessage,omitempty"` + TemplateMessage *TemplateMessage `protobuf:"bytes,25,opt,name=templateMessage" json:"templateMessage,omitempty"` + StickerMessage *StickerMessage `protobuf:"bytes,26,opt,name=stickerMessage" json:"stickerMessage,omitempty"` + GroupInviteMessage *GroupInviteMessage `protobuf:"bytes,28,opt,name=groupInviteMessage" json:"groupInviteMessage,omitempty"` + TemplateButtonReplyMessage *TemplateButtonReplyMessage `protobuf:"bytes,29,opt,name=templateButtonReplyMessage" json:"templateButtonReplyMessage,omitempty"` + ProductMessage *ProductMessage `protobuf:"bytes,30,opt,name=productMessage" json:"productMessage,omitempty"` + DeviceSentMessage *DeviceSentMessage `protobuf:"bytes,31,opt,name=deviceSentMessage" json:"deviceSentMessage,omitempty"` + MessageContextInfo *MessageContextInfo `protobuf:"bytes,35,opt,name=messageContextInfo" json:"messageContextInfo,omitempty"` + ListMessage *ListMessage `protobuf:"bytes,36,opt,name=listMessage" json:"listMessage,omitempty"` + ViewOnceMessage *FutureProofMessage `protobuf:"bytes,37,opt,name=viewOnceMessage" json:"viewOnceMessage,omitempty"` + OrderMessage *OrderMessage `protobuf:"bytes,38,opt,name=orderMessage" json:"orderMessage,omitempty"` + ListResponseMessage *ListResponseMessage `protobuf:"bytes,39,opt,name=listResponseMessage" json:"listResponseMessage,omitempty"` + EphemeralMessage *FutureProofMessage `protobuf:"bytes,40,opt,name=ephemeralMessage" json:"ephemeralMessage,omitempty"` + InvoiceMessage *InvoiceMessage `protobuf:"bytes,41,opt,name=invoiceMessage" json:"invoiceMessage,omitempty"` + ButtonsMessage *ButtonsMessage `protobuf:"bytes,42,opt,name=buttonsMessage" json:"buttonsMessage,omitempty"` + ButtonsResponseMessage *ButtonsResponseMessage `protobuf:"bytes,43,opt,name=buttonsResponseMessage" json:"buttonsResponseMessage,omitempty"` + PaymentInviteMessage *PaymentInviteMessage `protobuf:"bytes,44,opt,name=paymentInviteMessage" json:"paymentInviteMessage,omitempty"` + InteractiveMessage *InteractiveMessage `protobuf:"bytes,45,opt,name=interactiveMessage" json:"interactiveMessage,omitempty"` + ReactionMessage *ReactionMessage `protobuf:"bytes,46,opt,name=reactionMessage" json:"reactionMessage,omitempty"` + StickerSyncRmrMessage *StickerSyncRMRMessage `protobuf:"bytes,47,opt,name=stickerSyncRmrMessage" json:"stickerSyncRmrMessage,omitempty"` + InteractiveResponseMessage *InteractiveResponseMessage `protobuf:"bytes,48,opt,name=interactiveResponseMessage" json:"interactiveResponseMessage,omitempty"` + PollCreationMessage *PollCreationMessage `protobuf:"bytes,49,opt,name=pollCreationMessage" json:"pollCreationMessage,omitempty"` + PollUpdateMessage *PollUpdateMessage `protobuf:"bytes,50,opt,name=pollUpdateMessage" json:"pollUpdateMessage,omitempty"` + KeepInChatMessage *KeepInChatMessage `protobuf:"bytes,51,opt,name=keepInChatMessage" json:"keepInChatMessage,omitempty"` + DocumentWithCaptionMessage *FutureProofMessage `protobuf:"bytes,53,opt,name=documentWithCaptionMessage" json:"documentWithCaptionMessage,omitempty"` + RequestPhoneNumberMessage *RequestPhoneNumberMessage `protobuf:"bytes,54,opt,name=requestPhoneNumberMessage" json:"requestPhoneNumberMessage,omitempty"` + ViewOnceMessageV2 *FutureProofMessage `protobuf:"bytes,55,opt,name=viewOnceMessageV2" json:"viewOnceMessageV2,omitempty"` + EncReactionMessage *EncReactionMessage `protobuf:"bytes,56,opt,name=encReactionMessage" json:"encReactionMessage,omitempty"` + EditedMessage *FutureProofMessage `protobuf:"bytes,58,opt,name=editedMessage" json:"editedMessage,omitempty"` + ViewOnceMessageV2Extension *FutureProofMessage `protobuf:"bytes,59,opt,name=viewOnceMessageV2Extension" json:"viewOnceMessageV2Extension,omitempty"` + PollCreationMessageV2 *PollCreationMessage `protobuf:"bytes,60,opt,name=pollCreationMessageV2" json:"pollCreationMessageV2,omitempty"` + ScheduledCallCreationMessage *ScheduledCallCreationMessage `protobuf:"bytes,61,opt,name=scheduledCallCreationMessage" json:"scheduledCallCreationMessage,omitempty"` + GroupMentionedMessage *FutureProofMessage `protobuf:"bytes,62,opt,name=groupMentionedMessage" json:"groupMentionedMessage,omitempty"` + PinInChatMessage *PinInChatMessage `protobuf:"bytes,63,opt,name=pinInChatMessage" json:"pinInChatMessage,omitempty"` + PollCreationMessageV3 *PollCreationMessage `protobuf:"bytes,64,opt,name=pollCreationMessageV3" json:"pollCreationMessageV3,omitempty"` + ScheduledCallEditMessage *ScheduledCallEditMessage `protobuf:"bytes,65,opt,name=scheduledCallEditMessage" json:"scheduledCallEditMessage,omitempty"` + PtvMessage *VideoMessage `protobuf:"bytes,66,opt,name=ptvMessage" json:"ptvMessage,omitempty"` + BotInvokeMessage *FutureProofMessage `protobuf:"bytes,67,opt,name=botInvokeMessage" json:"botInvokeMessage,omitempty"` + CallLogMesssage *CallLogMessage `protobuf:"bytes,69,opt,name=callLogMesssage" json:"callLogMesssage,omitempty"` + MessageHistoryBundle *MessageHistoryBundle `protobuf:"bytes,70,opt,name=messageHistoryBundle" json:"messageHistoryBundle,omitempty"` + EncCommentMessage *EncCommentMessage `protobuf:"bytes,71,opt,name=encCommentMessage" json:"encCommentMessage,omitempty"` + BcallMessage *BCallMessage `protobuf:"bytes,72,opt,name=bcallMessage" json:"bcallMessage,omitempty"` + LottieStickerMessage *FutureProofMessage `protobuf:"bytes,74,opt,name=lottieStickerMessage" json:"lottieStickerMessage,omitempty"` + EventMessage *EventMessage `protobuf:"bytes,75,opt,name=eventMessage" json:"eventMessage,omitempty"` + EncEventResponseMessage *EncEventResponseMessage `protobuf:"bytes,76,opt,name=encEventResponseMessage" json:"encEventResponseMessage,omitempty"` + CommentMessage *CommentMessage `protobuf:"bytes,77,opt,name=commentMessage" json:"commentMessage,omitempty"` + NewsletterAdminInviteMessage *NewsletterAdminInviteMessage `protobuf:"bytes,78,opt,name=newsletterAdminInviteMessage" json:"newsletterAdminInviteMessage,omitempty"` + PlaceholderMessage *PlaceholderMessage `protobuf:"bytes,80,opt,name=placeholderMessage" json:"placeholderMessage,omitempty"` + SecretEncryptedMessage *SecretEncryptedMessage `protobuf:"bytes,82,opt,name=secretEncryptedMessage" json:"secretEncryptedMessage,omitempty"` + AlbumMessage *AlbumMessage `protobuf:"bytes,83,opt,name=albumMessage" json:"albumMessage,omitempty"` + EventCoverImage *FutureProofMessage `protobuf:"bytes,85,opt,name=eventCoverImage" json:"eventCoverImage,omitempty"` + StickerPackMessage *StickerPackMessage `protobuf:"bytes,86,opt,name=stickerPackMessage" json:"stickerPackMessage,omitempty"` + StatusMentionMessage *FutureProofMessage `protobuf:"bytes,87,opt,name=statusMentionMessage" json:"statusMentionMessage,omitempty"` + PollResultSnapshotMessage *PollResultSnapshotMessage `protobuf:"bytes,88,opt,name=pollResultSnapshotMessage" json:"pollResultSnapshotMessage,omitempty"` + PollCreationOptionImageMessage *FutureProofMessage `protobuf:"bytes,90,opt,name=pollCreationOptionImageMessage" json:"pollCreationOptionImageMessage,omitempty"` + AssociatedChildMessage *FutureProofMessage `protobuf:"bytes,91,opt,name=associatedChildMessage" json:"associatedChildMessage,omitempty"` + GroupStatusMentionMessage *FutureProofMessage `protobuf:"bytes,92,opt,name=groupStatusMentionMessage" json:"groupStatusMentionMessage,omitempty"` + PollCreationMessageV4 *FutureProofMessage `protobuf:"bytes,93,opt,name=pollCreationMessageV4" json:"pollCreationMessageV4,omitempty"` + StatusAddYours *FutureProofMessage `protobuf:"bytes,95,opt,name=statusAddYours" json:"statusAddYours,omitempty"` + GroupStatusMessage *FutureProofMessage `protobuf:"bytes,96,opt,name=groupStatusMessage" json:"groupStatusMessage,omitempty"` + RichResponseMessage *AIRichResponseMessage `protobuf:"bytes,97,opt,name=richResponseMessage" json:"richResponseMessage,omitempty"` + StatusNotificationMessage *StatusNotificationMessage `protobuf:"bytes,98,opt,name=statusNotificationMessage" json:"statusNotificationMessage,omitempty"` + LimitSharingMessage *FutureProofMessage `protobuf:"bytes,99,opt,name=limitSharingMessage" json:"limitSharingMessage,omitempty"` + BotTaskMessage *FutureProofMessage `protobuf:"bytes,100,opt,name=botTaskMessage" json:"botTaskMessage,omitempty"` + QuestionMessage *FutureProofMessage `protobuf:"bytes,101,opt,name=questionMessage" json:"questionMessage,omitempty"` + MessageHistoryNotice *MessageHistoryNotice `protobuf:"bytes,102,opt,name=messageHistoryNotice" json:"messageHistoryNotice,omitempty"` + GroupStatusMessageV2 *FutureProofMessage `protobuf:"bytes,103,opt,name=groupStatusMessageV2" json:"groupStatusMessageV2,omitempty"` + BotForwardedMessage *FutureProofMessage `protobuf:"bytes,104,opt,name=botForwardedMessage" json:"botForwardedMessage,omitempty"` + StatusQuestionAnswerMessage *StatusQuestionAnswerMessage `protobuf:"bytes,105,opt,name=statusQuestionAnswerMessage" json:"statusQuestionAnswerMessage,omitempty"` + QuestionReplyMessage *FutureProofMessage `protobuf:"bytes,106,opt,name=questionReplyMessage" json:"questionReplyMessage,omitempty"` + QuestionResponseMessage *QuestionResponseMessage `protobuf:"bytes,107,opt,name=questionResponseMessage" json:"questionResponseMessage,omitempty"` + StatusQuotedMessage *StatusQuotedMessage `protobuf:"bytes,109,opt,name=statusQuotedMessage" json:"statusQuotedMessage,omitempty"` + StatusStickerInteractionMessage *StatusStickerInteractionMessage `protobuf:"bytes,110,opt,name=statusStickerInteractionMessage" json:"statusStickerInteractionMessage,omitempty"` + PollCreationMessageV5 *PollCreationMessage `protobuf:"bytes,111,opt,name=pollCreationMessageV5" json:"pollCreationMessageV5,omitempty"` + NewsletterFollowerInviteMessageV2 *NewsletterFollowerInviteMessage `protobuf:"bytes,113,opt,name=newsletterFollowerInviteMessageV2" json:"newsletterFollowerInviteMessageV2,omitempty"` + PollResultSnapshotMessageV3 *PollResultSnapshotMessage `protobuf:"bytes,115,opt,name=pollResultSnapshotMessageV3" json:"pollResultSnapshotMessageV3,omitempty"` + NewsletterAdminProfileMessage *FutureProofMessage `protobuf:"bytes,116,opt,name=newsletterAdminProfileMessage" json:"newsletterAdminProfileMessage,omitempty"` + NewsletterAdminProfileMessageV2 *FutureProofMessage `protobuf:"bytes,117,opt,name=newsletterAdminProfileMessageV2" json:"newsletterAdminProfileMessageV2,omitempty"` + SpoilerMessage *FutureProofMessage `protobuf:"bytes,118,opt,name=spoilerMessage" json:"spoilerMessage,omitempty"` + PollCreationMessageV6 *FutureProofMessage `protobuf:"bytes,119,opt,name=pollCreationMessageV6" json:"pollCreationMessageV6,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *ContextInfo) Reset() { - *x = ContextInfo{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[28] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *Message) Reset() { + *x = Message{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[42] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *ContextInfo) String() string { +func (x *Message) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ContextInfo) ProtoMessage() {} +func (*Message) ProtoMessage() {} -func (x *ContextInfo) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[28] - if protoimpl.UnsafeEnabled && x != nil { +func (x *Message) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[42] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -6721,848 +9497,790 @@ func (x *ContextInfo) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ContextInfo.ProtoReflect.Descriptor instead. -func (*ContextInfo) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{28} +// Deprecated: Use Message.ProtoReflect.Descriptor instead. +func (*Message) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{42} } -func (x *ContextInfo) GetStanzaID() string { - if x != nil && x.StanzaID != nil { - return *x.StanzaID +func (x *Message) GetConversation() string { + if x != nil && x.Conversation != nil { + return *x.Conversation } return "" } -func (x *ContextInfo) GetParticipant() string { - if x != nil && x.Participant != nil { - return *x.Participant +func (x *Message) GetSenderKeyDistributionMessage() *SenderKeyDistributionMessage { + if x != nil { + return x.SenderKeyDistributionMessage } - return "" + return nil } -func (x *ContextInfo) GetQuotedMessage() *Message { +func (x *Message) GetImageMessage() *ImageMessage { if x != nil { - return x.QuotedMessage + return x.ImageMessage } return nil } -func (x *ContextInfo) GetRemoteJID() string { - if x != nil && x.RemoteJID != nil { - return *x.RemoteJID +func (x *Message) GetContactMessage() *ContactMessage { + if x != nil { + return x.ContactMessage } - return "" + return nil } -func (x *ContextInfo) GetMentionedJID() []string { +func (x *Message) GetLocationMessage() *LocationMessage { if x != nil { - return x.MentionedJID + return x.LocationMessage } return nil } -func (x *ContextInfo) GetConversionSource() string { - if x != nil && x.ConversionSource != nil { - return *x.ConversionSource +func (x *Message) GetExtendedTextMessage() *ExtendedTextMessage { + if x != nil { + return x.ExtendedTextMessage } - return "" + return nil } -func (x *ContextInfo) GetConversionData() []byte { +func (x *Message) GetDocumentMessage() *DocumentMessage { if x != nil { - return x.ConversionData + return x.DocumentMessage } return nil } -func (x *ContextInfo) GetConversionDelaySeconds() uint32 { - if x != nil && x.ConversionDelaySeconds != nil { - return *x.ConversionDelaySeconds +func (x *Message) GetAudioMessage() *AudioMessage { + if x != nil { + return x.AudioMessage } - return 0 + return nil } -func (x *ContextInfo) GetForwardingScore() uint32 { - if x != nil && x.ForwardingScore != nil { - return *x.ForwardingScore +func (x *Message) GetVideoMessage() *VideoMessage { + if x != nil { + return x.VideoMessage } - return 0 + return nil } -func (x *ContextInfo) GetIsForwarded() bool { - if x != nil && x.IsForwarded != nil { - return *x.IsForwarded +func (x *Message) GetCall() *Call { + if x != nil { + return x.Call } - return false + return nil } -func (x *ContextInfo) GetQuotedAd() *ContextInfo_AdReplyInfo { +func (x *Message) GetChat() *Chat { if x != nil { - return x.QuotedAd + return x.Chat } return nil } -func (x *ContextInfo) GetPlaceholderKey() *waCommon.MessageKey { +func (x *Message) GetProtocolMessage() *ProtocolMessage { if x != nil { - return x.PlaceholderKey + return x.ProtocolMessage } return nil } -func (x *ContextInfo) GetExpiration() uint32 { - if x != nil && x.Expiration != nil { - return *x.Expiration +func (x *Message) GetContactsArrayMessage() *ContactsArrayMessage { + if x != nil { + return x.ContactsArrayMessage } - return 0 + return nil } -func (x *ContextInfo) GetEphemeralSettingTimestamp() int64 { - if x != nil && x.EphemeralSettingTimestamp != nil { - return *x.EphemeralSettingTimestamp +func (x *Message) GetHighlyStructuredMessage() *HighlyStructuredMessage { + if x != nil { + return x.HighlyStructuredMessage } - return 0 + return nil } -func (x *ContextInfo) GetEphemeralSharedSecret() []byte { +func (x *Message) GetFastRatchetKeySenderKeyDistributionMessage() *SenderKeyDistributionMessage { if x != nil { - return x.EphemeralSharedSecret + return x.FastRatchetKeySenderKeyDistributionMessage } return nil } -func (x *ContextInfo) GetExternalAdReply() *ContextInfo_ExternalAdReplyInfo { +func (x *Message) GetSendPaymentMessage() *SendPaymentMessage { if x != nil { - return x.ExternalAdReply + return x.SendPaymentMessage } return nil } -func (x *ContextInfo) GetEntryPointConversionSource() string { - if x != nil && x.EntryPointConversionSource != nil { - return *x.EntryPointConversionSource +func (x *Message) GetLiveLocationMessage() *LiveLocationMessage { + if x != nil { + return x.LiveLocationMessage } - return "" + return nil } -func (x *ContextInfo) GetEntryPointConversionApp() string { - if x != nil && x.EntryPointConversionApp != nil { - return *x.EntryPointConversionApp +func (x *Message) GetRequestPaymentMessage() *RequestPaymentMessage { + if x != nil { + return x.RequestPaymentMessage } - return "" + return nil } -func (x *ContextInfo) GetEntryPointConversionDelaySeconds() uint32 { - if x != nil && x.EntryPointConversionDelaySeconds != nil { - return *x.EntryPointConversionDelaySeconds +func (x *Message) GetDeclinePaymentRequestMessage() *DeclinePaymentRequestMessage { + if x != nil { + return x.DeclinePaymentRequestMessage } - return 0 + return nil } -func (x *ContextInfo) GetDisappearingMode() *DisappearingMode { +func (x *Message) GetCancelPaymentRequestMessage() *CancelPaymentRequestMessage { if x != nil { - return x.DisappearingMode + return x.CancelPaymentRequestMessage } return nil } -func (x *ContextInfo) GetActionLink() *ActionLink { +func (x *Message) GetTemplateMessage() *TemplateMessage { if x != nil { - return x.ActionLink + return x.TemplateMessage } return nil } -func (x *ContextInfo) GetGroupSubject() string { - if x != nil && x.GroupSubject != nil { - return *x.GroupSubject +func (x *Message) GetStickerMessage() *StickerMessage { + if x != nil { + return x.StickerMessage } - return "" + return nil } -func (x *ContextInfo) GetParentGroupJID() string { - if x != nil && x.ParentGroupJID != nil { - return *x.ParentGroupJID +func (x *Message) GetGroupInviteMessage() *GroupInviteMessage { + if x != nil { + return x.GroupInviteMessage } - return "" + return nil } -func (x *ContextInfo) GetTrustBannerType() string { - if x != nil && x.TrustBannerType != nil { - return *x.TrustBannerType +func (x *Message) GetTemplateButtonReplyMessage() *TemplateButtonReplyMessage { + if x != nil { + return x.TemplateButtonReplyMessage } - return "" + return nil } -func (x *ContextInfo) GetTrustBannerAction() uint32 { - if x != nil && x.TrustBannerAction != nil { - return *x.TrustBannerAction +func (x *Message) GetProductMessage() *ProductMessage { + if x != nil { + return x.ProductMessage } - return 0 + return nil } -func (x *ContextInfo) GetIsSampled() bool { - if x != nil && x.IsSampled != nil { - return *x.IsSampled +func (x *Message) GetDeviceSentMessage() *DeviceSentMessage { + if x != nil { + return x.DeviceSentMessage } - return false + return nil } -func (x *ContextInfo) GetGroupMentions() []*GroupMention { +func (x *Message) GetMessageContextInfo() *MessageContextInfo { if x != nil { - return x.GroupMentions + return x.MessageContextInfo } return nil } -func (x *ContextInfo) GetUtm() *ContextInfo_UTMInfo { +func (x *Message) GetListMessage() *ListMessage { if x != nil { - return x.Utm + return x.ListMessage } return nil } -func (x *ContextInfo) GetForwardedNewsletterMessageInfo() *ContextInfo_ForwardedNewsletterMessageInfo { +func (x *Message) GetViewOnceMessage() *FutureProofMessage { if x != nil { - return x.ForwardedNewsletterMessageInfo + return x.ViewOnceMessage } return nil } -func (x *ContextInfo) GetBusinessMessageForwardInfo() *ContextInfo_BusinessMessageForwardInfo { +func (x *Message) GetOrderMessage() *OrderMessage { if x != nil { - return x.BusinessMessageForwardInfo + return x.OrderMessage } return nil } -func (x *ContextInfo) GetSmbClientCampaignID() string { - if x != nil && x.SmbClientCampaignID != nil { - return *x.SmbClientCampaignID +func (x *Message) GetListResponseMessage() *ListResponseMessage { + if x != nil { + return x.ListResponseMessage } - return "" + return nil } -func (x *ContextInfo) GetSmbServerCampaignID() string { - if x != nil && x.SmbServerCampaignID != nil { - return *x.SmbServerCampaignID +func (x *Message) GetEphemeralMessage() *FutureProofMessage { + if x != nil { + return x.EphemeralMessage } - return "" + return nil } -func (x *ContextInfo) GetDataSharingContext() *ContextInfo_DataSharingContext { +func (x *Message) GetInvoiceMessage() *InvoiceMessage { if x != nil { - return x.DataSharingContext + return x.InvoiceMessage } return nil } -func (x *ContextInfo) GetAlwaysShowAdAttribution() bool { - if x != nil && x.AlwaysShowAdAttribution != nil { - return *x.AlwaysShowAdAttribution +func (x *Message) GetButtonsMessage() *ButtonsMessage { + if x != nil { + return x.ButtonsMessage } - return false + return nil } -func (x *ContextInfo) GetFeatureEligibilities() *ContextInfo_FeatureEligibilities { +func (x *Message) GetButtonsResponseMessage() *ButtonsResponseMessage { if x != nil { - return x.FeatureEligibilities + return x.ButtonsResponseMessage } return nil } -func (x *ContextInfo) GetEntryPointConversionExternalSource() string { - if x != nil && x.EntryPointConversionExternalSource != nil { - return *x.EntryPointConversionExternalSource +func (x *Message) GetPaymentInviteMessage() *PaymentInviteMessage { + if x != nil { + return x.PaymentInviteMessage } - return "" + return nil } -func (x *ContextInfo) GetEntryPointConversionExternalMedium() string { - if x != nil && x.EntryPointConversionExternalMedium != nil { - return *x.EntryPointConversionExternalMedium +func (x *Message) GetInteractiveMessage() *InteractiveMessage { + if x != nil { + return x.InteractiveMessage } - return "" + return nil } -type BotPluginMetadata struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Provider *BotPluginMetadata_SearchProvider `protobuf:"varint,1,opt,name=provider,enum=WAWebProtobufsE2E.BotPluginMetadata_SearchProvider" json:"provider,omitempty"` - PluginType *BotPluginMetadata_PluginType `protobuf:"varint,2,opt,name=pluginType,enum=WAWebProtobufsE2E.BotPluginMetadata_PluginType" json:"pluginType,omitempty"` - ThumbnailCDNURL *string `protobuf:"bytes,3,opt,name=thumbnailCDNURL" json:"thumbnailCDNURL,omitempty"` - ProfilePhotoCDNURL *string `protobuf:"bytes,4,opt,name=profilePhotoCDNURL" json:"profilePhotoCDNURL,omitempty"` - SearchProviderURL *string `protobuf:"bytes,5,opt,name=searchProviderURL" json:"searchProviderURL,omitempty"` - ReferenceIndex *uint32 `protobuf:"varint,6,opt,name=referenceIndex" json:"referenceIndex,omitempty"` - ExpectedLinksCount *uint32 `protobuf:"varint,7,opt,name=expectedLinksCount" json:"expectedLinksCount,omitempty"` - SearchQuery *string `protobuf:"bytes,9,opt,name=searchQuery" json:"searchQuery,omitempty"` - ParentPluginMessageKey *waCommon.MessageKey `protobuf:"bytes,10,opt,name=parentPluginMessageKey" json:"parentPluginMessageKey,omitempty"` - DeprecatedField *BotPluginMetadata_PluginType `protobuf:"varint,11,opt,name=deprecatedField,enum=WAWebProtobufsE2E.BotPluginMetadata_PluginType" json:"deprecatedField,omitempty"` - ParentPluginType *BotPluginMetadata_PluginType `protobuf:"varint,12,opt,name=parentPluginType,enum=WAWebProtobufsE2E.BotPluginMetadata_PluginType" json:"parentPluginType,omitempty"` -} - -func (x *BotPluginMetadata) Reset() { - *x = BotPluginMetadata{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[29] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) +func (x *Message) GetReactionMessage() *ReactionMessage { + if x != nil { + return x.ReactionMessage } + return nil } -func (x *BotPluginMetadata) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*BotPluginMetadata) ProtoMessage() {} - -func (x *BotPluginMetadata) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[29] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms +func (x *Message) GetStickerSyncRmrMessage() *StickerSyncRMRMessage { + if x != nil { + return x.StickerSyncRmrMessage } - return mi.MessageOf(x) + return nil } -// Deprecated: Use BotPluginMetadata.ProtoReflect.Descriptor instead. -func (*BotPluginMetadata) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{29} +func (x *Message) GetInteractiveResponseMessage() *InteractiveResponseMessage { + if x != nil { + return x.InteractiveResponseMessage + } + return nil } -func (x *BotPluginMetadata) GetProvider() BotPluginMetadata_SearchProvider { - if x != nil && x.Provider != nil { - return *x.Provider +func (x *Message) GetPollCreationMessage() *PollCreationMessage { + if x != nil { + return x.PollCreationMessage } - return BotPluginMetadata_BING + return nil } -func (x *BotPluginMetadata) GetPluginType() BotPluginMetadata_PluginType { - if x != nil && x.PluginType != nil { - return *x.PluginType +func (x *Message) GetPollUpdateMessage() *PollUpdateMessage { + if x != nil { + return x.PollUpdateMessage } - return BotPluginMetadata_REELS + return nil } -func (x *BotPluginMetadata) GetThumbnailCDNURL() string { - if x != nil && x.ThumbnailCDNURL != nil { - return *x.ThumbnailCDNURL +func (x *Message) GetKeepInChatMessage() *KeepInChatMessage { + if x != nil { + return x.KeepInChatMessage } - return "" + return nil } -func (x *BotPluginMetadata) GetProfilePhotoCDNURL() string { - if x != nil && x.ProfilePhotoCDNURL != nil { - return *x.ProfilePhotoCDNURL +func (x *Message) GetDocumentWithCaptionMessage() *FutureProofMessage { + if x != nil { + return x.DocumentWithCaptionMessage } - return "" + return nil } -func (x *BotPluginMetadata) GetSearchProviderURL() string { - if x != nil && x.SearchProviderURL != nil { - return *x.SearchProviderURL +func (x *Message) GetRequestPhoneNumberMessage() *RequestPhoneNumberMessage { + if x != nil { + return x.RequestPhoneNumberMessage } - return "" + return nil } -func (x *BotPluginMetadata) GetReferenceIndex() uint32 { - if x != nil && x.ReferenceIndex != nil { - return *x.ReferenceIndex +func (x *Message) GetViewOnceMessageV2() *FutureProofMessage { + if x != nil { + return x.ViewOnceMessageV2 } - return 0 + return nil } -func (x *BotPluginMetadata) GetExpectedLinksCount() uint32 { - if x != nil && x.ExpectedLinksCount != nil { - return *x.ExpectedLinksCount +func (x *Message) GetEncReactionMessage() *EncReactionMessage { + if x != nil { + return x.EncReactionMessage } - return 0 + return nil } -func (x *BotPluginMetadata) GetSearchQuery() string { - if x != nil && x.SearchQuery != nil { - return *x.SearchQuery +func (x *Message) GetEditedMessage() *FutureProofMessage { + if x != nil { + return x.EditedMessage } - return "" + return nil } -func (x *BotPluginMetadata) GetParentPluginMessageKey() *waCommon.MessageKey { +func (x *Message) GetViewOnceMessageV2Extension() *FutureProofMessage { if x != nil { - return x.ParentPluginMessageKey + return x.ViewOnceMessageV2Extension } return nil } -func (x *BotPluginMetadata) GetDeprecatedField() BotPluginMetadata_PluginType { - if x != nil && x.DeprecatedField != nil { - return *x.DeprecatedField +func (x *Message) GetPollCreationMessageV2() *PollCreationMessage { + if x != nil { + return x.PollCreationMessageV2 } - return BotPluginMetadata_REELS + return nil } -func (x *BotPluginMetadata) GetParentPluginType() BotPluginMetadata_PluginType { - if x != nil && x.ParentPluginType != nil { - return *x.ParentPluginType +func (x *Message) GetScheduledCallCreationMessage() *ScheduledCallCreationMessage { + if x != nil { + return x.ScheduledCallCreationMessage } - return BotPluginMetadata_REELS + return nil } -type BotMediaMetadata struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - FileSHA256 *string `protobuf:"bytes,1,opt,name=fileSHA256" json:"fileSHA256,omitempty"` - MediaKey *string `protobuf:"bytes,2,opt,name=mediaKey" json:"mediaKey,omitempty"` - FileEncSHA256 *string `protobuf:"bytes,3,opt,name=fileEncSHA256" json:"fileEncSHA256,omitempty"` - DirectPath *string `protobuf:"bytes,4,opt,name=directPath" json:"directPath,omitempty"` - MediaKeyTimestamp *int64 `protobuf:"varint,5,opt,name=mediaKeyTimestamp" json:"mediaKeyTimestamp,omitempty"` - Mimetype *string `protobuf:"bytes,6,opt,name=mimetype" json:"mimetype,omitempty"` - OrientationType *BotMediaMetadata_OrientationType `protobuf:"varint,7,opt,name=orientationType,enum=WAWebProtobufsE2E.BotMediaMetadata_OrientationType" json:"orientationType,omitempty"` +func (x *Message) GetGroupMentionedMessage() *FutureProofMessage { + if x != nil { + return x.GroupMentionedMessage + } + return nil } -func (x *BotMediaMetadata) Reset() { - *x = BotMediaMetadata{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[30] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) +func (x *Message) GetPinInChatMessage() *PinInChatMessage { + if x != nil { + return x.PinInChatMessage } + return nil } -func (x *BotMediaMetadata) String() string { - return protoimpl.X.MessageStringOf(x) +func (x *Message) GetPollCreationMessageV3() *PollCreationMessage { + if x != nil { + return x.PollCreationMessageV3 + } + return nil } -func (*BotMediaMetadata) ProtoMessage() {} - -func (x *BotMediaMetadata) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[30] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms +func (x *Message) GetScheduledCallEditMessage() *ScheduledCallEditMessage { + if x != nil { + return x.ScheduledCallEditMessage } - return mi.MessageOf(x) + return nil } -// Deprecated: Use BotMediaMetadata.ProtoReflect.Descriptor instead. -func (*BotMediaMetadata) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{30} +func (x *Message) GetPtvMessage() *VideoMessage { + if x != nil { + return x.PtvMessage + } + return nil } -func (x *BotMediaMetadata) GetFileSHA256() string { - if x != nil && x.FileSHA256 != nil { - return *x.FileSHA256 +func (x *Message) GetBotInvokeMessage() *FutureProofMessage { + if x != nil { + return x.BotInvokeMessage } - return "" + return nil } -func (x *BotMediaMetadata) GetMediaKey() string { - if x != nil && x.MediaKey != nil { - return *x.MediaKey +func (x *Message) GetCallLogMesssage() *CallLogMessage { + if x != nil { + return x.CallLogMesssage } - return "" + return nil } -func (x *BotMediaMetadata) GetFileEncSHA256() string { - if x != nil && x.FileEncSHA256 != nil { - return *x.FileEncSHA256 +func (x *Message) GetMessageHistoryBundle() *MessageHistoryBundle { + if x != nil { + return x.MessageHistoryBundle } - return "" + return nil } -func (x *BotMediaMetadata) GetDirectPath() string { - if x != nil && x.DirectPath != nil { - return *x.DirectPath +func (x *Message) GetEncCommentMessage() *EncCommentMessage { + if x != nil { + return x.EncCommentMessage } - return "" + return nil } -func (x *BotMediaMetadata) GetMediaKeyTimestamp() int64 { - if x != nil && x.MediaKeyTimestamp != nil { - return *x.MediaKeyTimestamp +func (x *Message) GetBcallMessage() *BCallMessage { + if x != nil { + return x.BcallMessage } - return 0 + return nil } -func (x *BotMediaMetadata) GetMimetype() string { - if x != nil && x.Mimetype != nil { - return *x.Mimetype +func (x *Message) GetLottieStickerMessage() *FutureProofMessage { + if x != nil { + return x.LottieStickerMessage } - return "" + return nil } -func (x *BotMediaMetadata) GetOrientationType() BotMediaMetadata_OrientationType { - if x != nil && x.OrientationType != nil { - return *x.OrientationType +func (x *Message) GetEventMessage() *EventMessage { + if x != nil { + return x.EventMessage } - return BotMediaMetadata_CENTER + return nil } -type BotReminderMetadata struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - RequestMessageKey *waCommon.MessageKey `protobuf:"bytes,1,opt,name=requestMessageKey" json:"requestMessageKey,omitempty"` - Action *BotReminderMetadata_ReminderAction `protobuf:"varint,2,opt,name=action,enum=WAWebProtobufsE2E.BotReminderMetadata_ReminderAction" json:"action,omitempty"` - Name *string `protobuf:"bytes,3,opt,name=name" json:"name,omitempty"` - NextTriggerTimestamp *uint64 `protobuf:"varint,4,opt,name=nextTriggerTimestamp" json:"nextTriggerTimestamp,omitempty"` - Frequency *BotReminderMetadata_ReminderFrequency `protobuf:"varint,5,opt,name=frequency,enum=WAWebProtobufsE2E.BotReminderMetadata_ReminderFrequency" json:"frequency,omitempty"` +func (x *Message) GetEncEventResponseMessage() *EncEventResponseMessage { + if x != nil { + return x.EncEventResponseMessage + } + return nil } -func (x *BotReminderMetadata) Reset() { - *x = BotReminderMetadata{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[31] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) +func (x *Message) GetCommentMessage() *CommentMessage { + if x != nil { + return x.CommentMessage } + return nil } -func (x *BotReminderMetadata) String() string { - return protoimpl.X.MessageStringOf(x) +func (x *Message) GetNewsletterAdminInviteMessage() *NewsletterAdminInviteMessage { + if x != nil { + return x.NewsletterAdminInviteMessage + } + return nil } -func (*BotReminderMetadata) ProtoMessage() {} - -func (x *BotReminderMetadata) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[31] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms +func (x *Message) GetPlaceholderMessage() *PlaceholderMessage { + if x != nil { + return x.PlaceholderMessage } - return mi.MessageOf(x) + return nil } -// Deprecated: Use BotReminderMetadata.ProtoReflect.Descriptor instead. -func (*BotReminderMetadata) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{31} +func (x *Message) GetSecretEncryptedMessage() *SecretEncryptedMessage { + if x != nil { + return x.SecretEncryptedMessage + } + return nil } -func (x *BotReminderMetadata) GetRequestMessageKey() *waCommon.MessageKey { +func (x *Message) GetAlbumMessage() *AlbumMessage { if x != nil { - return x.RequestMessageKey + return x.AlbumMessage } return nil } -func (x *BotReminderMetadata) GetAction() BotReminderMetadata_ReminderAction { - if x != nil && x.Action != nil { - return *x.Action +func (x *Message) GetEventCoverImage() *FutureProofMessage { + if x != nil { + return x.EventCoverImage } - return BotReminderMetadata_NOTIFY + return nil } -func (x *BotReminderMetadata) GetName() string { - if x != nil && x.Name != nil { - return *x.Name +func (x *Message) GetStickerPackMessage() *StickerPackMessage { + if x != nil { + return x.StickerPackMessage } - return "" + return nil } -func (x *BotReminderMetadata) GetNextTriggerTimestamp() uint64 { - if x != nil && x.NextTriggerTimestamp != nil { - return *x.NextTriggerTimestamp +func (x *Message) GetStatusMentionMessage() *FutureProofMessage { + if x != nil { + return x.StatusMentionMessage } - return 0 + return nil } -func (x *BotReminderMetadata) GetFrequency() BotReminderMetadata_ReminderFrequency { - if x != nil && x.Frequency != nil { - return *x.Frequency +func (x *Message) GetPollResultSnapshotMessage() *PollResultSnapshotMessage { + if x != nil { + return x.PollResultSnapshotMessage } - return BotReminderMetadata_ONCE + return nil } -type BotModelMetadata struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - ModelType *BotModelMetadata_ModelType `protobuf:"varint,1,opt,name=modelType,enum=WAWebProtobufsE2E.BotModelMetadata_ModelType" json:"modelType,omitempty"` - PremiumModelStatus *BotModelMetadata_PremiumModelStatus `protobuf:"varint,2,opt,name=premiumModelStatus,enum=WAWebProtobufsE2E.BotModelMetadata_PremiumModelStatus" json:"premiumModelStatus,omitempty"` +func (x *Message) GetPollCreationOptionImageMessage() *FutureProofMessage { + if x != nil { + return x.PollCreationOptionImageMessage + } + return nil } -func (x *BotModelMetadata) Reset() { - *x = BotModelMetadata{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[32] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) +func (x *Message) GetAssociatedChildMessage() *FutureProofMessage { + if x != nil { + return x.AssociatedChildMessage } + return nil } -func (x *BotModelMetadata) String() string { - return protoimpl.X.MessageStringOf(x) +func (x *Message) GetGroupStatusMentionMessage() *FutureProofMessage { + if x != nil { + return x.GroupStatusMentionMessage + } + return nil } -func (*BotModelMetadata) ProtoMessage() {} - -func (x *BotModelMetadata) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[32] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms +func (x *Message) GetPollCreationMessageV4() *FutureProofMessage { + if x != nil { + return x.PollCreationMessageV4 } - return mi.MessageOf(x) + return nil } -// Deprecated: Use BotModelMetadata.ProtoReflect.Descriptor instead. -func (*BotModelMetadata) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{32} +func (x *Message) GetStatusAddYours() *FutureProofMessage { + if x != nil { + return x.StatusAddYours + } + return nil } -func (x *BotModelMetadata) GetModelType() BotModelMetadata_ModelType { - if x != nil && x.ModelType != nil { - return *x.ModelType +func (x *Message) GetGroupStatusMessage() *FutureProofMessage { + if x != nil { + return x.GroupStatusMessage } - return BotModelMetadata_LLAMA_PROD + return nil } -func (x *BotModelMetadata) GetPremiumModelStatus() BotModelMetadata_PremiumModelStatus { - if x != nil && x.PremiumModelStatus != nil { - return *x.PremiumModelStatus +func (x *Message) GetRichResponseMessage() *AIRichResponseMessage { + if x != nil { + return x.RichResponseMessage } - return BotModelMetadata_AVAILABLE + return nil } -type MessageAssociation struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - AssociationType *MessageAssociation_AssociationType `protobuf:"varint,1,opt,name=associationType,enum=WAWebProtobufsE2E.MessageAssociation_AssociationType" json:"associationType,omitempty"` - ParentMessageKey *waCommon.MessageKey `protobuf:"bytes,2,opt,name=parentMessageKey" json:"parentMessageKey,omitempty"` +func (x *Message) GetStatusNotificationMessage() *StatusNotificationMessage { + if x != nil { + return x.StatusNotificationMessage + } + return nil } -func (x *MessageAssociation) Reset() { - *x = MessageAssociation{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[33] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) +func (x *Message) GetLimitSharingMessage() *FutureProofMessage { + if x != nil { + return x.LimitSharingMessage } + return nil } -func (x *MessageAssociation) String() string { - return protoimpl.X.MessageStringOf(x) +func (x *Message) GetBotTaskMessage() *FutureProofMessage { + if x != nil { + return x.BotTaskMessage + } + return nil } -func (*MessageAssociation) ProtoMessage() {} - -func (x *MessageAssociation) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[33] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms +func (x *Message) GetQuestionMessage() *FutureProofMessage { + if x != nil { + return x.QuestionMessage } - return mi.MessageOf(x) + return nil } -// Deprecated: Use MessageAssociation.ProtoReflect.Descriptor instead. -func (*MessageAssociation) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{33} +func (x *Message) GetMessageHistoryNotice() *MessageHistoryNotice { + if x != nil { + return x.MessageHistoryNotice + } + return nil } -func (x *MessageAssociation) GetAssociationType() MessageAssociation_AssociationType { - if x != nil && x.AssociationType != nil { - return *x.AssociationType +func (x *Message) GetGroupStatusMessageV2() *FutureProofMessage { + if x != nil { + return x.GroupStatusMessageV2 } - return MessageAssociation_UNKNOWN + return nil } -func (x *MessageAssociation) GetParentMessageKey() *waCommon.MessageKey { +func (x *Message) GetBotForwardedMessage() *FutureProofMessage { if x != nil { - return x.ParentMessageKey + return x.BotForwardedMessage } return nil } -type MessageContextInfo struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - DeviceListMetadata *DeviceListMetadata `protobuf:"bytes,1,opt,name=deviceListMetadata" json:"deviceListMetadata,omitempty"` - DeviceListMetadataVersion *int32 `protobuf:"varint,2,opt,name=deviceListMetadataVersion" json:"deviceListMetadataVersion,omitempty"` - MessageSecret []byte `protobuf:"bytes,3,opt,name=messageSecret" json:"messageSecret,omitempty"` - PaddingBytes []byte `protobuf:"bytes,4,opt,name=paddingBytes" json:"paddingBytes,omitempty"` - MessageAddOnDurationInSecs *uint32 `protobuf:"varint,5,opt,name=messageAddOnDurationInSecs" json:"messageAddOnDurationInSecs,omitempty"` - BotMessageSecret []byte `protobuf:"bytes,6,opt,name=botMessageSecret" json:"botMessageSecret,omitempty"` - BotMetadata *BotMetadata `protobuf:"bytes,7,opt,name=botMetadata" json:"botMetadata,omitempty"` - ReportingTokenVersion *int32 `protobuf:"varint,8,opt,name=reportingTokenVersion" json:"reportingTokenVersion,omitempty"` - MessageAddOnExpiryType *MessageContextInfo_MessageAddonExpiryType `protobuf:"varint,9,opt,name=messageAddOnExpiryType,enum=WAWebProtobufsE2E.MessageContextInfo_MessageAddonExpiryType" json:"messageAddOnExpiryType,omitempty"` - MessageAssociation *MessageAssociation `protobuf:"bytes,10,opt,name=messageAssociation" json:"messageAssociation,omitempty"` - CapiCreatedGroup *bool `protobuf:"varint,11,opt,name=capiCreatedGroup" json:"capiCreatedGroup,omitempty"` - SupportPayload *string `protobuf:"bytes,12,opt,name=supportPayload" json:"supportPayload,omitempty"` +func (x *Message) GetStatusQuestionAnswerMessage() *StatusQuestionAnswerMessage { + if x != nil { + return x.StatusQuestionAnswerMessage + } + return nil } -func (x *MessageContextInfo) Reset() { - *x = MessageContextInfo{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[34] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) +func (x *Message) GetQuestionReplyMessage() *FutureProofMessage { + if x != nil { + return x.QuestionReplyMessage } + return nil } -func (x *MessageContextInfo) String() string { - return protoimpl.X.MessageStringOf(x) +func (x *Message) GetQuestionResponseMessage() *QuestionResponseMessage { + if x != nil { + return x.QuestionResponseMessage + } + return nil } -func (*MessageContextInfo) ProtoMessage() {} - -func (x *MessageContextInfo) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[34] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms +func (x *Message) GetStatusQuotedMessage() *StatusQuotedMessage { + if x != nil { + return x.StatusQuotedMessage } - return mi.MessageOf(x) + return nil } -// Deprecated: Use MessageContextInfo.ProtoReflect.Descriptor instead. -func (*MessageContextInfo) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{34} +func (x *Message) GetStatusStickerInteractionMessage() *StatusStickerInteractionMessage { + if x != nil { + return x.StatusStickerInteractionMessage + } + return nil } -func (x *MessageContextInfo) GetDeviceListMetadata() *DeviceListMetadata { +func (x *Message) GetPollCreationMessageV5() *PollCreationMessage { if x != nil { - return x.DeviceListMetadata + return x.PollCreationMessageV5 } return nil } -func (x *MessageContextInfo) GetDeviceListMetadataVersion() int32 { - if x != nil && x.DeviceListMetadataVersion != nil { - return *x.DeviceListMetadataVersion +func (x *Message) GetNewsletterFollowerInviteMessageV2() *NewsletterFollowerInviteMessage { + if x != nil { + return x.NewsletterFollowerInviteMessageV2 } - return 0 + return nil } -func (x *MessageContextInfo) GetMessageSecret() []byte { +func (x *Message) GetPollResultSnapshotMessageV3() *PollResultSnapshotMessage { if x != nil { - return x.MessageSecret + return x.PollResultSnapshotMessageV3 } return nil } -func (x *MessageContextInfo) GetPaddingBytes() []byte { +func (x *Message) GetNewsletterAdminProfileMessage() *FutureProofMessage { if x != nil { - return x.PaddingBytes + return x.NewsletterAdminProfileMessage } return nil } -func (x *MessageContextInfo) GetMessageAddOnDurationInSecs() uint32 { - if x != nil && x.MessageAddOnDurationInSecs != nil { - return *x.MessageAddOnDurationInSecs +func (x *Message) GetNewsletterAdminProfileMessageV2() *FutureProofMessage { + if x != nil { + return x.NewsletterAdminProfileMessageV2 } - return 0 + return nil } -func (x *MessageContextInfo) GetBotMessageSecret() []byte { +func (x *Message) GetSpoilerMessage() *FutureProofMessage { if x != nil { - return x.BotMessageSecret + return x.SpoilerMessage } return nil } -func (x *MessageContextInfo) GetBotMetadata() *BotMetadata { +func (x *Message) GetPollCreationMessageV6() *FutureProofMessage { if x != nil { - return x.BotMetadata + return x.PollCreationMessageV6 } return nil } -func (x *MessageContextInfo) GetReportingTokenVersion() int32 { - if x != nil && x.ReportingTokenVersion != nil { - return *x.ReportingTokenVersion - } - return 0 +type AlbumMessage struct { + state protoimpl.MessageState `protogen:"open.v1"` + ExpectedImageCount *uint32 `protobuf:"varint,2,opt,name=expectedImageCount" json:"expectedImageCount,omitempty"` + ExpectedVideoCount *uint32 `protobuf:"varint,3,opt,name=expectedVideoCount" json:"expectedVideoCount,omitempty"` + ContextInfo *ContextInfo `protobuf:"bytes,17,opt,name=contextInfo" json:"contextInfo,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *MessageContextInfo) GetMessageAddOnExpiryType() MessageContextInfo_MessageAddonExpiryType { - if x != nil && x.MessageAddOnExpiryType != nil { - return *x.MessageAddOnExpiryType - } - return MessageContextInfo_STATIC +func (x *AlbumMessage) Reset() { + *x = AlbumMessage{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[43] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *MessageContextInfo) GetMessageAssociation() *MessageAssociation { +func (x *AlbumMessage) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AlbumMessage) ProtoMessage() {} + +func (x *AlbumMessage) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[43] if x != nil { - return x.MessageAssociation + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return nil + return mi.MessageOf(x) +} + +// Deprecated: Use AlbumMessage.ProtoReflect.Descriptor instead. +func (*AlbumMessage) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{43} +} + +func (x *AlbumMessage) GetExpectedImageCount() uint32 { + if x != nil && x.ExpectedImageCount != nil { + return *x.ExpectedImageCount + } + return 0 } -func (x *MessageContextInfo) GetCapiCreatedGroup() bool { - if x != nil && x.CapiCreatedGroup != nil { - return *x.CapiCreatedGroup +func (x *AlbumMessage) GetExpectedVideoCount() uint32 { + if x != nil && x.ExpectedVideoCount != nil { + return *x.ExpectedVideoCount } - return false + return 0 } -func (x *MessageContextInfo) GetSupportPayload() string { - if x != nil && x.SupportPayload != nil { - return *x.SupportPayload +func (x *AlbumMessage) GetContextInfo() *ContextInfo { + if x != nil { + return x.ContextInfo } - return "" + return nil } -type HydratedTemplateButton struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Types that are assignable to HydratedButton: - // - // *HydratedTemplateButton_QuickReplyButton - // *HydratedTemplateButton_UrlButton - // *HydratedTemplateButton_CallButton - HydratedButton isHydratedTemplateButton_HydratedButton `protobuf_oneof:"hydratedButton"` - Index *uint32 `protobuf:"varint,4,opt,name=index" json:"index,omitempty"` +type MessageHistoryMetadata struct { + state protoimpl.MessageState `protogen:"open.v1"` + HistoryReceivers []string `protobuf:"bytes,1,rep,name=historyReceivers" json:"historyReceivers,omitempty"` + OldestMessageTimestamp *int64 `protobuf:"varint,2,opt,name=oldestMessageTimestamp" json:"oldestMessageTimestamp,omitempty"` + MessageCount *int64 `protobuf:"varint,3,opt,name=messageCount" json:"messageCount,omitempty"` + NonHistoryReceivers []string `protobuf:"bytes,4,rep,name=nonHistoryReceivers" json:"nonHistoryReceivers,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *HydratedTemplateButton) Reset() { - *x = HydratedTemplateButton{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[35] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *MessageHistoryMetadata) Reset() { + *x = MessageHistoryMetadata{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[44] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *HydratedTemplateButton) String() string { +func (x *MessageHistoryMetadata) String() string { return protoimpl.X.MessageStringOf(x) } -func (*HydratedTemplateButton) ProtoMessage() {} +func (*MessageHistoryMetadata) ProtoMessage() {} -func (x *HydratedTemplateButton) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[35] - if protoimpl.UnsafeEnabled && x != nil { +func (x *MessageHistoryMetadata) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[44] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -7572,103 +10290,121 @@ func (x *HydratedTemplateButton) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use HydratedTemplateButton.ProtoReflect.Descriptor instead. -func (*HydratedTemplateButton) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{35} +// Deprecated: Use MessageHistoryMetadata.ProtoReflect.Descriptor instead. +func (*MessageHistoryMetadata) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{44} } -func (m *HydratedTemplateButton) GetHydratedButton() isHydratedTemplateButton_HydratedButton { - if m != nil { - return m.HydratedButton +func (x *MessageHistoryMetadata) GetHistoryReceivers() []string { + if x != nil { + return x.HistoryReceivers } return nil } -func (x *HydratedTemplateButton) GetQuickReplyButton() *HydratedTemplateButton_HydratedQuickReplyButton { - if x, ok := x.GetHydratedButton().(*HydratedTemplateButton_QuickReplyButton); ok { - return x.QuickReplyButton +func (x *MessageHistoryMetadata) GetOldestMessageTimestamp() int64 { + if x != nil && x.OldestMessageTimestamp != nil { + return *x.OldestMessageTimestamp } - return nil + return 0 } -func (x *HydratedTemplateButton) GetUrlButton() *HydratedTemplateButton_HydratedURLButton { - if x, ok := x.GetHydratedButton().(*HydratedTemplateButton_UrlButton); ok { - return x.UrlButton +func (x *MessageHistoryMetadata) GetMessageCount() int64 { + if x != nil && x.MessageCount != nil { + return *x.MessageCount } - return nil + return 0 } -func (x *HydratedTemplateButton) GetCallButton() *HydratedTemplateButton_HydratedCallButton { - if x, ok := x.GetHydratedButton().(*HydratedTemplateButton_CallButton); ok { - return x.CallButton +func (x *MessageHistoryMetadata) GetNonHistoryReceivers() []string { + if x != nil { + return x.NonHistoryReceivers } return nil } -func (x *HydratedTemplateButton) GetIndex() uint32 { - if x != nil && x.Index != nil { - return *x.Index - } - return 0 +type MessageHistoryNotice struct { + state protoimpl.MessageState `protogen:"open.v1"` + ContextInfo *ContextInfo `protobuf:"bytes,1,opt,name=contextInfo" json:"contextInfo,omitempty"` + MessageHistoryMetadata *MessageHistoryMetadata `protobuf:"bytes,2,opt,name=messageHistoryMetadata" json:"messageHistoryMetadata,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -type isHydratedTemplateButton_HydratedButton interface { - isHydratedTemplateButton_HydratedButton() +func (x *MessageHistoryNotice) Reset() { + *x = MessageHistoryNotice{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[45] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -type HydratedTemplateButton_QuickReplyButton struct { - QuickReplyButton *HydratedTemplateButton_HydratedQuickReplyButton `protobuf:"bytes,1,opt,name=quickReplyButton,oneof"` +func (x *MessageHistoryNotice) String() string { + return protoimpl.X.MessageStringOf(x) } -type HydratedTemplateButton_UrlButton struct { - UrlButton *HydratedTemplateButton_HydratedURLButton `protobuf:"bytes,2,opt,name=urlButton,oneof"` -} +func (*MessageHistoryNotice) ProtoMessage() {} -type HydratedTemplateButton_CallButton struct { - CallButton *HydratedTemplateButton_HydratedCallButton `protobuf:"bytes,3,opt,name=callButton,oneof"` +func (x *MessageHistoryNotice) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[45] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -func (*HydratedTemplateButton_QuickReplyButton) isHydratedTemplateButton_HydratedButton() {} - -func (*HydratedTemplateButton_UrlButton) isHydratedTemplateButton_HydratedButton() {} +// Deprecated: Use MessageHistoryNotice.ProtoReflect.Descriptor instead. +func (*MessageHistoryNotice) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{45} +} -func (*HydratedTemplateButton_CallButton) isHydratedTemplateButton_HydratedButton() {} +func (x *MessageHistoryNotice) GetContextInfo() *ContextInfo { + if x != nil { + return x.ContextInfo + } + return nil +} -type PaymentBackground struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +func (x *MessageHistoryNotice) GetMessageHistoryMetadata() *MessageHistoryMetadata { + if x != nil { + return x.MessageHistoryMetadata + } + return nil +} - ID *string `protobuf:"bytes,1,opt,name=ID" json:"ID,omitempty"` - FileLength *uint64 `protobuf:"varint,2,opt,name=fileLength" json:"fileLength,omitempty"` - Width *uint32 `protobuf:"varint,3,opt,name=width" json:"width,omitempty"` - Height *uint32 `protobuf:"varint,4,opt,name=height" json:"height,omitempty"` - Mimetype *string `protobuf:"bytes,5,opt,name=mimetype" json:"mimetype,omitempty"` - PlaceholderArgb *uint32 `protobuf:"fixed32,6,opt,name=placeholderArgb" json:"placeholderArgb,omitempty"` - TextArgb *uint32 `protobuf:"fixed32,7,opt,name=textArgb" json:"textArgb,omitempty"` - SubtextArgb *uint32 `protobuf:"fixed32,8,opt,name=subtextArgb" json:"subtextArgb,omitempty"` - MediaData *PaymentBackground_MediaData `protobuf:"bytes,9,opt,name=mediaData" json:"mediaData,omitempty"` - Type *PaymentBackground_Type `protobuf:"varint,10,opt,name=type,enum=WAWebProtobufsE2E.PaymentBackground_Type" json:"type,omitempty"` +type MessageHistoryBundle struct { + state protoimpl.MessageState `protogen:"open.v1"` + Mimetype *string `protobuf:"bytes,1,opt,name=mimetype" json:"mimetype,omitempty"` + FileSHA256 []byte `protobuf:"bytes,2,opt,name=fileSHA256" json:"fileSHA256,omitempty"` + MediaKey []byte `protobuf:"bytes,3,opt,name=mediaKey" json:"mediaKey,omitempty"` + FileEncSHA256 []byte `protobuf:"bytes,4,opt,name=fileEncSHA256" json:"fileEncSHA256,omitempty"` + DirectPath *string `protobuf:"bytes,5,opt,name=directPath" json:"directPath,omitempty"` + MediaKeyTimestamp *int64 `protobuf:"varint,6,opt,name=mediaKeyTimestamp" json:"mediaKeyTimestamp,omitempty"` + ContextInfo *ContextInfo `protobuf:"bytes,7,opt,name=contextInfo" json:"contextInfo,omitempty"` + MessageHistoryMetadata *MessageHistoryMetadata `protobuf:"bytes,8,opt,name=messageHistoryMetadata" json:"messageHistoryMetadata,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *PaymentBackground) Reset() { - *x = PaymentBackground{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[36] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *MessageHistoryBundle) Reset() { + *x = MessageHistoryBundle{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[46] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *PaymentBackground) String() string { +func (x *MessageHistoryBundle) String() string { return protoimpl.X.MessageStringOf(x) } -func (*PaymentBackground) ProtoMessage() {} +func (*MessageHistoryBundle) ProtoMessage() {} -func (x *PaymentBackground) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[36] - if protoimpl.UnsafeEnabled && x != nil { +func (x *MessageHistoryBundle) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[46] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -7678,110 +10414,92 @@ func (x *PaymentBackground) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use PaymentBackground.ProtoReflect.Descriptor instead. -func (*PaymentBackground) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{36} +// Deprecated: Use MessageHistoryBundle.ProtoReflect.Descriptor instead. +func (*MessageHistoryBundle) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{46} } -func (x *PaymentBackground) GetID() string { - if x != nil && x.ID != nil { - return *x.ID +func (x *MessageHistoryBundle) GetMimetype() string { + if x != nil && x.Mimetype != nil { + return *x.Mimetype } return "" } -func (x *PaymentBackground) GetFileLength() uint64 { - if x != nil && x.FileLength != nil { - return *x.FileLength +func (x *MessageHistoryBundle) GetFileSHA256() []byte { + if x != nil { + return x.FileSHA256 } - return 0 + return nil } -func (x *PaymentBackground) GetWidth() uint32 { - if x != nil && x.Width != nil { - return *x.Width +func (x *MessageHistoryBundle) GetMediaKey() []byte { + if x != nil { + return x.MediaKey } - return 0 + return nil } -func (x *PaymentBackground) GetHeight() uint32 { - if x != nil && x.Height != nil { - return *x.Height +func (x *MessageHistoryBundle) GetFileEncSHA256() []byte { + if x != nil { + return x.FileEncSHA256 } - return 0 + return nil } -func (x *PaymentBackground) GetMimetype() string { - if x != nil && x.Mimetype != nil { - return *x.Mimetype +func (x *MessageHistoryBundle) GetDirectPath() string { + if x != nil && x.DirectPath != nil { + return *x.DirectPath } return "" } -func (x *PaymentBackground) GetPlaceholderArgb() uint32 { - if x != nil && x.PlaceholderArgb != nil { - return *x.PlaceholderArgb - } - return 0 -} - -func (x *PaymentBackground) GetTextArgb() uint32 { - if x != nil && x.TextArgb != nil { - return *x.TextArgb - } - return 0 -} - -func (x *PaymentBackground) GetSubtextArgb() uint32 { - if x != nil && x.SubtextArgb != nil { - return *x.SubtextArgb +func (x *MessageHistoryBundle) GetMediaKeyTimestamp() int64 { + if x != nil && x.MediaKeyTimestamp != nil { + return *x.MediaKeyTimestamp } return 0 } -func (x *PaymentBackground) GetMediaData() *PaymentBackground_MediaData { +func (x *MessageHistoryBundle) GetContextInfo() *ContextInfo { if x != nil { - return x.MediaData + return x.ContextInfo } return nil } -func (x *PaymentBackground) GetType() PaymentBackground_Type { - if x != nil && x.Type != nil { - return *x.Type +func (x *MessageHistoryBundle) GetMessageHistoryMetadata() *MessageHistoryMetadata { + if x != nil { + return x.MessageHistoryMetadata } - return PaymentBackground_UNKNOWN + return nil } -type DisappearingMode struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Initiator *DisappearingMode_Initiator `protobuf:"varint,1,opt,name=initiator,enum=WAWebProtobufsE2E.DisappearingMode_Initiator" json:"initiator,omitempty"` - Trigger *DisappearingMode_Trigger `protobuf:"varint,2,opt,name=trigger,enum=WAWebProtobufsE2E.DisappearingMode_Trigger" json:"trigger,omitempty"` - InitiatorDeviceJID *string `protobuf:"bytes,3,opt,name=initiatorDeviceJID" json:"initiatorDeviceJID,omitempty"` - InitiatedByMe *bool `protobuf:"varint,4,opt,name=initiatedByMe" json:"initiatedByMe,omitempty"` +type EncEventResponseMessage struct { + state protoimpl.MessageState `protogen:"open.v1"` + EventCreationMessageKey *waCommon.MessageKey `protobuf:"bytes,1,opt,name=eventCreationMessageKey" json:"eventCreationMessageKey,omitempty"` + EncPayload []byte `protobuf:"bytes,2,opt,name=encPayload" json:"encPayload,omitempty"` + EncIV []byte `protobuf:"bytes,3,opt,name=encIV" json:"encIV,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *DisappearingMode) Reset() { - *x = DisappearingMode{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[37] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *EncEventResponseMessage) Reset() { + *x = EncEventResponseMessage{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[47] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *DisappearingMode) String() string { +func (x *EncEventResponseMessage) String() string { return protoimpl.X.MessageStringOf(x) } -func (*DisappearingMode) ProtoMessage() {} +func (*EncEventResponseMessage) ProtoMessage() {} -func (x *DisappearingMode) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[37] - if protoimpl.UnsafeEnabled && x != nil { +func (x *EncEventResponseMessage) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[47] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -7791,72 +10509,66 @@ func (x *DisappearingMode) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use DisappearingMode.ProtoReflect.Descriptor instead. -func (*DisappearingMode) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{37} -} - -func (x *DisappearingMode) GetInitiator() DisappearingMode_Initiator { - if x != nil && x.Initiator != nil { - return *x.Initiator - } - return DisappearingMode_CHANGED_IN_CHAT +// Deprecated: Use EncEventResponseMessage.ProtoReflect.Descriptor instead. +func (*EncEventResponseMessage) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{47} } -func (x *DisappearingMode) GetTrigger() DisappearingMode_Trigger { - if x != nil && x.Trigger != nil { - return *x.Trigger +func (x *EncEventResponseMessage) GetEventCreationMessageKey() *waCommon.MessageKey { + if x != nil { + return x.EventCreationMessageKey } - return DisappearingMode_UNKNOWN + return nil } -func (x *DisappearingMode) GetInitiatorDeviceJID() string { - if x != nil && x.InitiatorDeviceJID != nil { - return *x.InitiatorDeviceJID +func (x *EncEventResponseMessage) GetEncPayload() []byte { + if x != nil { + return x.EncPayload } - return "" + return nil } -func (x *DisappearingMode) GetInitiatedByMe() bool { - if x != nil && x.InitiatedByMe != nil { - return *x.InitiatedByMe +func (x *EncEventResponseMessage) GetEncIV() []byte { + if x != nil { + return x.EncIV } - return false -} - -type ProcessedVideo struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields + return nil +} - DirectPath *string `protobuf:"bytes,1,opt,name=directPath" json:"directPath,omitempty"` - FileSHA256 []byte `protobuf:"bytes,2,opt,name=fileSHA256" json:"fileSHA256,omitempty"` - Height *uint32 `protobuf:"varint,3,opt,name=height" json:"height,omitempty"` - Width *uint32 `protobuf:"varint,4,opt,name=width" json:"width,omitempty"` - FileLength *uint64 `protobuf:"varint,5,opt,name=fileLength" json:"fileLength,omitempty"` - Bitrate *uint32 `protobuf:"varint,6,opt,name=bitrate" json:"bitrate,omitempty"` - Quality *ProcessedVideo_VideoQuality `protobuf:"varint,7,opt,name=quality,enum=WAWebProtobufsE2E.ProcessedVideo_VideoQuality" json:"quality,omitempty"` - Capabilities []string `protobuf:"bytes,8,rep,name=capabilities" json:"capabilities,omitempty"` +type EventMessage struct { + state protoimpl.MessageState `protogen:"open.v1"` + ContextInfo *ContextInfo `protobuf:"bytes,1,opt,name=contextInfo" json:"contextInfo,omitempty"` + IsCanceled *bool `protobuf:"varint,2,opt,name=isCanceled" json:"isCanceled,omitempty"` + Name *string `protobuf:"bytes,3,opt,name=name" json:"name,omitempty"` + Description *string `protobuf:"bytes,4,opt,name=description" json:"description,omitempty"` + Location *LocationMessage `protobuf:"bytes,5,opt,name=location" json:"location,omitempty"` + JoinLink *string `protobuf:"bytes,6,opt,name=joinLink" json:"joinLink,omitempty"` + StartTime *int64 `protobuf:"varint,7,opt,name=startTime" json:"startTime,omitempty"` + EndTime *int64 `protobuf:"varint,8,opt,name=endTime" json:"endTime,omitempty"` + ExtraGuestsAllowed *bool `protobuf:"varint,9,opt,name=extraGuestsAllowed" json:"extraGuestsAllowed,omitempty"` + IsScheduleCall *bool `protobuf:"varint,10,opt,name=isScheduleCall" json:"isScheduleCall,omitempty"` + HasReminder *bool `protobuf:"varint,11,opt,name=hasReminder" json:"hasReminder,omitempty"` + ReminderOffsetSec *int64 `protobuf:"varint,12,opt,name=reminderOffsetSec" json:"reminderOffsetSec,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *ProcessedVideo) Reset() { - *x = ProcessedVideo{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[38] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *EventMessage) Reset() { + *x = EventMessage{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[48] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *ProcessedVideo) String() string { +func (x *EventMessage) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ProcessedVideo) ProtoMessage() {} +func (*EventMessage) ProtoMessage() {} -func (x *ProcessedVideo) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[38] - if protoimpl.UnsafeEnabled && x != nil { +func (x *EventMessage) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[48] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -7866,165 +10578,119 @@ func (x *ProcessedVideo) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ProcessedVideo.ProtoReflect.Descriptor instead. -func (*ProcessedVideo) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{38} +// Deprecated: Use EventMessage.ProtoReflect.Descriptor instead. +func (*EventMessage) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{48} } -func (x *ProcessedVideo) GetDirectPath() string { - if x != nil && x.DirectPath != nil { - return *x.DirectPath +func (x *EventMessage) GetContextInfo() *ContextInfo { + if x != nil { + return x.ContextInfo + } + return nil +} + +func (x *EventMessage) GetIsCanceled() bool { + if x != nil && x.IsCanceled != nil { + return *x.IsCanceled + } + return false +} + +func (x *EventMessage) GetName() string { + if x != nil && x.Name != nil { + return *x.Name } return "" } -func (x *ProcessedVideo) GetFileSHA256() []byte { +func (x *EventMessage) GetDescription() string { + if x != nil && x.Description != nil { + return *x.Description + } + return "" +} + +func (x *EventMessage) GetLocation() *LocationMessage { if x != nil { - return x.FileSHA256 + return x.Location } return nil } -func (x *ProcessedVideo) GetHeight() uint32 { - if x != nil && x.Height != nil { - return *x.Height +func (x *EventMessage) GetJoinLink() string { + if x != nil && x.JoinLink != nil { + return *x.JoinLink } - return 0 + return "" } -func (x *ProcessedVideo) GetWidth() uint32 { - if x != nil && x.Width != nil { - return *x.Width +func (x *EventMessage) GetStartTime() int64 { + if x != nil && x.StartTime != nil { + return *x.StartTime } return 0 } -func (x *ProcessedVideo) GetFileLength() uint64 { - if x != nil && x.FileLength != nil { - return *x.FileLength +func (x *EventMessage) GetEndTime() int64 { + if x != nil && x.EndTime != nil { + return *x.EndTime } return 0 } -func (x *ProcessedVideo) GetBitrate() uint32 { - if x != nil && x.Bitrate != nil { - return *x.Bitrate +func (x *EventMessage) GetExtraGuestsAllowed() bool { + if x != nil && x.ExtraGuestsAllowed != nil { + return *x.ExtraGuestsAllowed } - return 0 + return false } -func (x *ProcessedVideo) GetQuality() ProcessedVideo_VideoQuality { - if x != nil && x.Quality != nil { - return *x.Quality +func (x *EventMessage) GetIsScheduleCall() bool { + if x != nil && x.IsScheduleCall != nil { + return *x.IsScheduleCall } - return ProcessedVideo_UNDEFINED + return false } -func (x *ProcessedVideo) GetCapabilities() []string { - if x != nil { - return x.Capabilities +func (x *EventMessage) GetHasReminder() bool { + if x != nil && x.HasReminder != nil { + return *x.HasReminder } - return nil + return false } -type Message struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +func (x *EventMessage) GetReminderOffsetSec() int64 { + if x != nil && x.ReminderOffsetSec != nil { + return *x.ReminderOffsetSec + } + return 0 +} - Conversation *string `protobuf:"bytes,1,opt,name=conversation" json:"conversation,omitempty"` - SenderKeyDistributionMessage *SenderKeyDistributionMessage `protobuf:"bytes,2,opt,name=senderKeyDistributionMessage" json:"senderKeyDistributionMessage,omitempty"` - ImageMessage *ImageMessage `protobuf:"bytes,3,opt,name=imageMessage" json:"imageMessage,omitempty"` - ContactMessage *ContactMessage `protobuf:"bytes,4,opt,name=contactMessage" json:"contactMessage,omitempty"` - LocationMessage *LocationMessage `protobuf:"bytes,5,opt,name=locationMessage" json:"locationMessage,omitempty"` - ExtendedTextMessage *ExtendedTextMessage `protobuf:"bytes,6,opt,name=extendedTextMessage" json:"extendedTextMessage,omitempty"` - DocumentMessage *DocumentMessage `protobuf:"bytes,7,opt,name=documentMessage" json:"documentMessage,omitempty"` - AudioMessage *AudioMessage `protobuf:"bytes,8,opt,name=audioMessage" json:"audioMessage,omitempty"` - VideoMessage *VideoMessage `protobuf:"bytes,9,opt,name=videoMessage" json:"videoMessage,omitempty"` - Call *Call `protobuf:"bytes,10,opt,name=call" json:"call,omitempty"` - Chat *Chat `protobuf:"bytes,11,opt,name=chat" json:"chat,omitempty"` - ProtocolMessage *ProtocolMessage `protobuf:"bytes,12,opt,name=protocolMessage" json:"protocolMessage,omitempty"` - ContactsArrayMessage *ContactsArrayMessage `protobuf:"bytes,13,opt,name=contactsArrayMessage" json:"contactsArrayMessage,omitempty"` - HighlyStructuredMessage *HighlyStructuredMessage `protobuf:"bytes,14,opt,name=highlyStructuredMessage" json:"highlyStructuredMessage,omitempty"` - FastRatchetKeySenderKeyDistributionMessage *SenderKeyDistributionMessage `protobuf:"bytes,15,opt,name=fastRatchetKeySenderKeyDistributionMessage" json:"fastRatchetKeySenderKeyDistributionMessage,omitempty"` - SendPaymentMessage *SendPaymentMessage `protobuf:"bytes,16,opt,name=sendPaymentMessage" json:"sendPaymentMessage,omitempty"` - LiveLocationMessage *LiveLocationMessage `protobuf:"bytes,18,opt,name=liveLocationMessage" json:"liveLocationMessage,omitempty"` - RequestPaymentMessage *RequestPaymentMessage `protobuf:"bytes,22,opt,name=requestPaymentMessage" json:"requestPaymentMessage,omitempty"` - DeclinePaymentRequestMessage *DeclinePaymentRequestMessage `protobuf:"bytes,23,opt,name=declinePaymentRequestMessage" json:"declinePaymentRequestMessage,omitempty"` - CancelPaymentRequestMessage *CancelPaymentRequestMessage `protobuf:"bytes,24,opt,name=cancelPaymentRequestMessage" json:"cancelPaymentRequestMessage,omitempty"` - TemplateMessage *TemplateMessage `protobuf:"bytes,25,opt,name=templateMessage" json:"templateMessage,omitempty"` - StickerMessage *StickerMessage `protobuf:"bytes,26,opt,name=stickerMessage" json:"stickerMessage,omitempty"` - GroupInviteMessage *GroupInviteMessage `protobuf:"bytes,28,opt,name=groupInviteMessage" json:"groupInviteMessage,omitempty"` - TemplateButtonReplyMessage *TemplateButtonReplyMessage `protobuf:"bytes,29,opt,name=templateButtonReplyMessage" json:"templateButtonReplyMessage,omitempty"` - ProductMessage *ProductMessage `protobuf:"bytes,30,opt,name=productMessage" json:"productMessage,omitempty"` - DeviceSentMessage *DeviceSentMessage `protobuf:"bytes,31,opt,name=deviceSentMessage" json:"deviceSentMessage,omitempty"` - MessageContextInfo *MessageContextInfo `protobuf:"bytes,35,opt,name=messageContextInfo" json:"messageContextInfo,omitempty"` - ListMessage *ListMessage `protobuf:"bytes,36,opt,name=listMessage" json:"listMessage,omitempty"` - ViewOnceMessage *FutureProofMessage `protobuf:"bytes,37,opt,name=viewOnceMessage" json:"viewOnceMessage,omitempty"` - OrderMessage *OrderMessage `protobuf:"bytes,38,opt,name=orderMessage" json:"orderMessage,omitempty"` - ListResponseMessage *ListResponseMessage `protobuf:"bytes,39,opt,name=listResponseMessage" json:"listResponseMessage,omitempty"` - EphemeralMessage *FutureProofMessage `protobuf:"bytes,40,opt,name=ephemeralMessage" json:"ephemeralMessage,omitempty"` - InvoiceMessage *InvoiceMessage `protobuf:"bytes,41,opt,name=invoiceMessage" json:"invoiceMessage,omitempty"` - ButtonsMessage *ButtonsMessage `protobuf:"bytes,42,opt,name=buttonsMessage" json:"buttonsMessage,omitempty"` - ButtonsResponseMessage *ButtonsResponseMessage `protobuf:"bytes,43,opt,name=buttonsResponseMessage" json:"buttonsResponseMessage,omitempty"` - PaymentInviteMessage *PaymentInviteMessage `protobuf:"bytes,44,opt,name=paymentInviteMessage" json:"paymentInviteMessage,omitempty"` - InteractiveMessage *InteractiveMessage `protobuf:"bytes,45,opt,name=interactiveMessage" json:"interactiveMessage,omitempty"` - ReactionMessage *ReactionMessage `protobuf:"bytes,46,opt,name=reactionMessage" json:"reactionMessage,omitempty"` - StickerSyncRmrMessage *StickerSyncRMRMessage `protobuf:"bytes,47,opt,name=stickerSyncRmrMessage" json:"stickerSyncRmrMessage,omitempty"` - InteractiveResponseMessage *InteractiveResponseMessage `protobuf:"bytes,48,opt,name=interactiveResponseMessage" json:"interactiveResponseMessage,omitempty"` - PollCreationMessage *PollCreationMessage `protobuf:"bytes,49,opt,name=pollCreationMessage" json:"pollCreationMessage,omitempty"` - PollUpdateMessage *PollUpdateMessage `protobuf:"bytes,50,opt,name=pollUpdateMessage" json:"pollUpdateMessage,omitempty"` - KeepInChatMessage *KeepInChatMessage `protobuf:"bytes,51,opt,name=keepInChatMessage" json:"keepInChatMessage,omitempty"` - DocumentWithCaptionMessage *FutureProofMessage `protobuf:"bytes,53,opt,name=documentWithCaptionMessage" json:"documentWithCaptionMessage,omitempty"` - RequestPhoneNumberMessage *RequestPhoneNumberMessage `protobuf:"bytes,54,opt,name=requestPhoneNumberMessage" json:"requestPhoneNumberMessage,omitempty"` - ViewOnceMessageV2 *FutureProofMessage `protobuf:"bytes,55,opt,name=viewOnceMessageV2" json:"viewOnceMessageV2,omitempty"` - EncReactionMessage *EncReactionMessage `protobuf:"bytes,56,opt,name=encReactionMessage" json:"encReactionMessage,omitempty"` - EditedMessage *FutureProofMessage `protobuf:"bytes,58,opt,name=editedMessage" json:"editedMessage,omitempty"` - ViewOnceMessageV2Extension *FutureProofMessage `protobuf:"bytes,59,opt,name=viewOnceMessageV2Extension" json:"viewOnceMessageV2Extension,omitempty"` - PollCreationMessageV2 *PollCreationMessage `protobuf:"bytes,60,opt,name=pollCreationMessageV2" json:"pollCreationMessageV2,omitempty"` - ScheduledCallCreationMessage *ScheduledCallCreationMessage `protobuf:"bytes,61,opt,name=scheduledCallCreationMessage" json:"scheduledCallCreationMessage,omitempty"` - GroupMentionedMessage *FutureProofMessage `protobuf:"bytes,62,opt,name=groupMentionedMessage" json:"groupMentionedMessage,omitempty"` - PinInChatMessage *PinInChatMessage `protobuf:"bytes,63,opt,name=pinInChatMessage" json:"pinInChatMessage,omitempty"` - PollCreationMessageV3 *PollCreationMessage `protobuf:"bytes,64,opt,name=pollCreationMessageV3" json:"pollCreationMessageV3,omitempty"` - ScheduledCallEditMessage *ScheduledCallEditMessage `protobuf:"bytes,65,opt,name=scheduledCallEditMessage" json:"scheduledCallEditMessage,omitempty"` - PtvMessage *VideoMessage `protobuf:"bytes,66,opt,name=ptvMessage" json:"ptvMessage,omitempty"` - BotInvokeMessage *FutureProofMessage `protobuf:"bytes,67,opt,name=botInvokeMessage" json:"botInvokeMessage,omitempty"` - CallLogMesssage *CallLogMessage `protobuf:"bytes,69,opt,name=callLogMesssage" json:"callLogMesssage,omitempty"` - MessageHistoryBundle *MessageHistoryBundle `protobuf:"bytes,70,opt,name=messageHistoryBundle" json:"messageHistoryBundle,omitempty"` - EncCommentMessage *EncCommentMessage `protobuf:"bytes,71,opt,name=encCommentMessage" json:"encCommentMessage,omitempty"` - BcallMessage *BCallMessage `protobuf:"bytes,72,opt,name=bcallMessage" json:"bcallMessage,omitempty"` - LottieStickerMessage *FutureProofMessage `protobuf:"bytes,74,opt,name=lottieStickerMessage" json:"lottieStickerMessage,omitempty"` - EventMessage *EventMessage `protobuf:"bytes,75,opt,name=eventMessage" json:"eventMessage,omitempty"` - EncEventResponseMessage *EncEventResponseMessage `protobuf:"bytes,76,opt,name=encEventResponseMessage" json:"encEventResponseMessage,omitempty"` - CommentMessage *CommentMessage `protobuf:"bytes,77,opt,name=commentMessage" json:"commentMessage,omitempty"` - NewsletterAdminInviteMessage *NewsletterAdminInviteMessage `protobuf:"bytes,78,opt,name=newsletterAdminInviteMessage" json:"newsletterAdminInviteMessage,omitempty"` - PlaceholderMessage *PlaceholderMessage `protobuf:"bytes,80,opt,name=placeholderMessage" json:"placeholderMessage,omitempty"` - SecretEncryptedMessage *SecretEncryptedMessage `protobuf:"bytes,82,opt,name=secretEncryptedMessage" json:"secretEncryptedMessage,omitempty"` - AlbumMessage *AlbumMessage `protobuf:"bytes,83,opt,name=albumMessage" json:"albumMessage,omitempty"` - EventCoverImage *FutureProofMessage `protobuf:"bytes,85,opt,name=eventCoverImage" json:"eventCoverImage,omitempty"` - StickerPackMessage *StickerPackMessage `protobuf:"bytes,86,opt,name=stickerPackMessage" json:"stickerPackMessage,omitempty"` - StatusMentionMessage *FutureProofMessage `protobuf:"bytes,87,opt,name=statusMentionMessage" json:"statusMentionMessage,omitempty"` - PollResultSnapshotMessage *PollResultSnapshotMessage `protobuf:"bytes,88,opt,name=pollResultSnapshotMessage" json:"pollResultSnapshotMessage,omitempty"` +type CommentMessage struct { + state protoimpl.MessageState `protogen:"open.v1"` + Message *Message `protobuf:"bytes,1,opt,name=message" json:"message,omitempty"` + TargetMessageKey *waCommon.MessageKey `protobuf:"bytes,2,opt,name=targetMessageKey" json:"targetMessageKey,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *Message) Reset() { - *x = Message{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[39] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *CommentMessage) Reset() { + *x = CommentMessage{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[49] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *Message) String() string { +func (x *CommentMessage) String() string { return protoimpl.X.MessageStringOf(x) } -func (*Message) ProtoMessage() {} +func (*CommentMessage) ProtoMessage() {} -func (x *Message) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[39] - if protoimpl.UnsafeEnabled && x != nil { +func (x *CommentMessage) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[49] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -8034,566 +10700,609 @@ func (x *Message) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use Message.ProtoReflect.Descriptor instead. -func (*Message) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{39} -} - -func (x *Message) GetConversation() string { - if x != nil && x.Conversation != nil { - return *x.Conversation - } - return "" +// Deprecated: Use CommentMessage.ProtoReflect.Descriptor instead. +func (*CommentMessage) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{49} } -func (x *Message) GetSenderKeyDistributionMessage() *SenderKeyDistributionMessage { +func (x *CommentMessage) GetMessage() *Message { if x != nil { - return x.SenderKeyDistributionMessage + return x.Message } return nil } -func (x *Message) GetImageMessage() *ImageMessage { +func (x *CommentMessage) GetTargetMessageKey() *waCommon.MessageKey { if x != nil { - return x.ImageMessage + return x.TargetMessageKey } return nil } -func (x *Message) GetContactMessage() *ContactMessage { - if x != nil { - return x.ContactMessage - } - return nil +type EncCommentMessage struct { + state protoimpl.MessageState `protogen:"open.v1"` + TargetMessageKey *waCommon.MessageKey `protobuf:"bytes,1,opt,name=targetMessageKey" json:"targetMessageKey,omitempty"` + EncPayload []byte `protobuf:"bytes,2,opt,name=encPayload" json:"encPayload,omitempty"` + EncIV []byte `protobuf:"bytes,3,opt,name=encIV" json:"encIV,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *Message) GetLocationMessage() *LocationMessage { - if x != nil { - return x.LocationMessage - } - return nil +func (x *EncCommentMessage) Reset() { + *x = EncCommentMessage{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[50] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *Message) GetExtendedTextMessage() *ExtendedTextMessage { - if x != nil { - return x.ExtendedTextMessage - } - return nil +func (x *EncCommentMessage) String() string { + return protoimpl.X.MessageStringOf(x) } -func (x *Message) GetDocumentMessage() *DocumentMessage { +func (*EncCommentMessage) ProtoMessage() {} + +func (x *EncCommentMessage) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[50] if x != nil { - return x.DocumentMessage + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return nil + return mi.MessageOf(x) } -func (x *Message) GetAudioMessage() *AudioMessage { - if x != nil { - return x.AudioMessage - } - return nil +// Deprecated: Use EncCommentMessage.ProtoReflect.Descriptor instead. +func (*EncCommentMessage) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{50} } -func (x *Message) GetVideoMessage() *VideoMessage { +func (x *EncCommentMessage) GetTargetMessageKey() *waCommon.MessageKey { if x != nil { - return x.VideoMessage + return x.TargetMessageKey } return nil } -func (x *Message) GetCall() *Call { +func (x *EncCommentMessage) GetEncPayload() []byte { if x != nil { - return x.Call + return x.EncPayload } return nil } -func (x *Message) GetChat() *Chat { +func (x *EncCommentMessage) GetEncIV() []byte { if x != nil { - return x.Chat + return x.EncIV } return nil } -func (x *Message) GetProtocolMessage() *ProtocolMessage { - if x != nil { - return x.ProtocolMessage - } - return nil +type EncReactionMessage struct { + state protoimpl.MessageState `protogen:"open.v1"` + TargetMessageKey *waCommon.MessageKey `protobuf:"bytes,1,opt,name=targetMessageKey" json:"targetMessageKey,omitempty"` + EncPayload []byte `protobuf:"bytes,2,opt,name=encPayload" json:"encPayload,omitempty"` + EncIV []byte `protobuf:"bytes,3,opt,name=encIV" json:"encIV,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *Message) GetContactsArrayMessage() *ContactsArrayMessage { - if x != nil { - return x.ContactsArrayMessage - } - return nil +func (x *EncReactionMessage) Reset() { + *x = EncReactionMessage{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[51] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *Message) GetHighlyStructuredMessage() *HighlyStructuredMessage { - if x != nil { - return x.HighlyStructuredMessage - } - return nil +func (x *EncReactionMessage) String() string { + return protoimpl.X.MessageStringOf(x) } -func (x *Message) GetFastRatchetKeySenderKeyDistributionMessage() *SenderKeyDistributionMessage { +func (*EncReactionMessage) ProtoMessage() {} + +func (x *EncReactionMessage) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[51] if x != nil { - return x.FastRatchetKeySenderKeyDistributionMessage + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return nil + return mi.MessageOf(x) } -func (x *Message) GetSendPaymentMessage() *SendPaymentMessage { +// Deprecated: Use EncReactionMessage.ProtoReflect.Descriptor instead. +func (*EncReactionMessage) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{51} +} + +func (x *EncReactionMessage) GetTargetMessageKey() *waCommon.MessageKey { if x != nil { - return x.SendPaymentMessage + return x.TargetMessageKey } return nil } -func (x *Message) GetLiveLocationMessage() *LiveLocationMessage { +func (x *EncReactionMessage) GetEncPayload() []byte { if x != nil { - return x.LiveLocationMessage + return x.EncPayload } return nil } -func (x *Message) GetRequestPaymentMessage() *RequestPaymentMessage { +func (x *EncReactionMessage) GetEncIV() []byte { if x != nil { - return x.RequestPaymentMessage + return x.EncIV } return nil } -func (x *Message) GetDeclinePaymentRequestMessage() *DeclinePaymentRequestMessage { +type KeepInChatMessage struct { + state protoimpl.MessageState `protogen:"open.v1"` + Key *waCommon.MessageKey `protobuf:"bytes,1,opt,name=key" json:"key,omitempty"` + KeepType *KeepType `protobuf:"varint,2,opt,name=keepType,enum=WAWebProtobufsE2E.KeepType" json:"keepType,omitempty"` + TimestampMS *int64 `protobuf:"varint,3,opt,name=timestampMS" json:"timestampMS,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *KeepInChatMessage) Reset() { + *x = KeepInChatMessage{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[52] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *KeepInChatMessage) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*KeepInChatMessage) ProtoMessage() {} + +func (x *KeepInChatMessage) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[52] if x != nil { - return x.DeclinePaymentRequestMessage + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return nil + return mi.MessageOf(x) } -func (x *Message) GetCancelPaymentRequestMessage() *CancelPaymentRequestMessage { - if x != nil { - return x.CancelPaymentRequestMessage - } - return nil +// Deprecated: Use KeepInChatMessage.ProtoReflect.Descriptor instead. +func (*KeepInChatMessage) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{52} } -func (x *Message) GetTemplateMessage() *TemplateMessage { +func (x *KeepInChatMessage) GetKey() *waCommon.MessageKey { if x != nil { - return x.TemplateMessage + return x.Key } return nil } -func (x *Message) GetStickerMessage() *StickerMessage { - if x != nil { - return x.StickerMessage +func (x *KeepInChatMessage) GetKeepType() KeepType { + if x != nil && x.KeepType != nil { + return *x.KeepType } - return nil + return KeepType_UNKNOWN_KEEP_TYPE } -func (x *Message) GetGroupInviteMessage() *GroupInviteMessage { - if x != nil { - return x.GroupInviteMessage +func (x *KeepInChatMessage) GetTimestampMS() int64 { + if x != nil && x.TimestampMS != nil { + return *x.TimestampMS } - return nil + return 0 } -func (x *Message) GetTemplateButtonReplyMessage() *TemplateButtonReplyMessage { - if x != nil { - return x.TemplateButtonReplyMessage - } - return nil +type QuestionResponseMessage struct { + state protoimpl.MessageState `protogen:"open.v1"` + Key *waCommon.MessageKey `protobuf:"bytes,1,opt,name=key" json:"key,omitempty"` + Text *string `protobuf:"bytes,2,opt,name=text" json:"text,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *Message) GetProductMessage() *ProductMessage { - if x != nil { - return x.ProductMessage - } - return nil +func (x *QuestionResponseMessage) Reset() { + *x = QuestionResponseMessage{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[53] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *Message) GetDeviceSentMessage() *DeviceSentMessage { - if x != nil { - return x.DeviceSentMessage - } - return nil +func (x *QuestionResponseMessage) String() string { + return protoimpl.X.MessageStringOf(x) } -func (x *Message) GetMessageContextInfo() *MessageContextInfo { +func (*QuestionResponseMessage) ProtoMessage() {} + +func (x *QuestionResponseMessage) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[53] if x != nil { - return x.MessageContextInfo + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return nil + return mi.MessageOf(x) } -func (x *Message) GetListMessage() *ListMessage { - if x != nil { - return x.ListMessage - } - return nil +// Deprecated: Use QuestionResponseMessage.ProtoReflect.Descriptor instead. +func (*QuestionResponseMessage) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{53} } -func (x *Message) GetViewOnceMessage() *FutureProofMessage { +func (x *QuestionResponseMessage) GetKey() *waCommon.MessageKey { if x != nil { - return x.ViewOnceMessage + return x.Key } return nil } -func (x *Message) GetOrderMessage() *OrderMessage { - if x != nil { - return x.OrderMessage +func (x *QuestionResponseMessage) GetText() string { + if x != nil && x.Text != nil { + return *x.Text } - return nil + return "" } -func (x *Message) GetListResponseMessage() *ListResponseMessage { - if x != nil { - return x.ListResponseMessage - } - return nil +type StatusQuestionAnswerMessage struct { + state protoimpl.MessageState `protogen:"open.v1"` + Key *waCommon.MessageKey `protobuf:"bytes,1,opt,name=key" json:"key,omitempty"` + Text *string `protobuf:"bytes,2,opt,name=text" json:"text,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *Message) GetEphemeralMessage() *FutureProofMessage { - if x != nil { - return x.EphemeralMessage - } - return nil +func (x *StatusQuestionAnswerMessage) Reset() { + *x = StatusQuestionAnswerMessage{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[54] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *Message) GetInvoiceMessage() *InvoiceMessage { - if x != nil { - return x.InvoiceMessage - } - return nil +func (x *StatusQuestionAnswerMessage) String() string { + return protoimpl.X.MessageStringOf(x) } -func (x *Message) GetButtonsMessage() *ButtonsMessage { +func (*StatusQuestionAnswerMessage) ProtoMessage() {} + +func (x *StatusQuestionAnswerMessage) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[54] if x != nil { - return x.ButtonsMessage + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return nil + return mi.MessageOf(x) } -func (x *Message) GetButtonsResponseMessage() *ButtonsResponseMessage { - if x != nil { - return x.ButtonsResponseMessage - } - return nil +// Deprecated: Use StatusQuestionAnswerMessage.ProtoReflect.Descriptor instead. +func (*StatusQuestionAnswerMessage) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{54} } -func (x *Message) GetPaymentInviteMessage() *PaymentInviteMessage { +func (x *StatusQuestionAnswerMessage) GetKey() *waCommon.MessageKey { if x != nil { - return x.PaymentInviteMessage + return x.Key } return nil } -func (x *Message) GetInteractiveMessage() *InteractiveMessage { - if x != nil { - return x.InteractiveMessage +func (x *StatusQuestionAnswerMessage) GetText() string { + if x != nil && x.Text != nil { + return *x.Text } - return nil + return "" } -func (x *Message) GetReactionMessage() *ReactionMessage { - if x != nil { - return x.ReactionMessage - } - return nil +type PollResultSnapshotMessage struct { + state protoimpl.MessageState `protogen:"open.v1"` + Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + PollVotes []*PollResultSnapshotMessage_PollVote `protobuf:"bytes,2,rep,name=pollVotes" json:"pollVotes,omitempty"` + ContextInfo *ContextInfo `protobuf:"bytes,3,opt,name=contextInfo" json:"contextInfo,omitempty"` + PollType *PollType `protobuf:"varint,4,opt,name=pollType,enum=WAWebProtobufsE2E.PollType" json:"pollType,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *Message) GetStickerSyncRmrMessage() *StickerSyncRMRMessage { - if x != nil { - return x.StickerSyncRmrMessage - } - return nil +func (x *PollResultSnapshotMessage) Reset() { + *x = PollResultSnapshotMessage{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[55] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *Message) GetInteractiveResponseMessage() *InteractiveResponseMessage { - if x != nil { - return x.InteractiveResponseMessage - } - return nil +func (x *PollResultSnapshotMessage) String() string { + return protoimpl.X.MessageStringOf(x) } -func (x *Message) GetPollCreationMessage() *PollCreationMessage { +func (*PollResultSnapshotMessage) ProtoMessage() {} + +func (x *PollResultSnapshotMessage) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[55] if x != nil { - return x.PollCreationMessage + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return nil + return mi.MessageOf(x) } -func (x *Message) GetPollUpdateMessage() *PollUpdateMessage { - if x != nil { - return x.PollUpdateMessage - } - return nil +// Deprecated: Use PollResultSnapshotMessage.ProtoReflect.Descriptor instead. +func (*PollResultSnapshotMessage) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{55} } -func (x *Message) GetKeepInChatMessage() *KeepInChatMessage { - if x != nil { - return x.KeepInChatMessage +func (x *PollResultSnapshotMessage) GetName() string { + if x != nil && x.Name != nil { + return *x.Name } - return nil + return "" } -func (x *Message) GetDocumentWithCaptionMessage() *FutureProofMessage { +func (x *PollResultSnapshotMessage) GetPollVotes() []*PollResultSnapshotMessage_PollVote { if x != nil { - return x.DocumentWithCaptionMessage + return x.PollVotes } return nil } -func (x *Message) GetRequestPhoneNumberMessage() *RequestPhoneNumberMessage { +func (x *PollResultSnapshotMessage) GetContextInfo() *ContextInfo { if x != nil { - return x.RequestPhoneNumberMessage + return x.ContextInfo } return nil } -func (x *Message) GetViewOnceMessageV2() *FutureProofMessage { - if x != nil { - return x.ViewOnceMessageV2 +func (x *PollResultSnapshotMessage) GetPollType() PollType { + if x != nil && x.PollType != nil { + return *x.PollType } - return nil + return PollType_POLL } -func (x *Message) GetEncReactionMessage() *EncReactionMessage { - if x != nil { - return x.EncReactionMessage - } - return nil +type PollVoteMessage struct { + state protoimpl.MessageState `protogen:"open.v1"` + SelectedOptions [][]byte `protobuf:"bytes,1,rep,name=selectedOptions" json:"selectedOptions,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *Message) GetEditedMessage() *FutureProofMessage { - if x != nil { - return x.EditedMessage - } - return nil +func (x *PollVoteMessage) Reset() { + *x = PollVoteMessage{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[56] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *Message) GetViewOnceMessageV2Extension() *FutureProofMessage { - if x != nil { - return x.ViewOnceMessageV2Extension - } - return nil +func (x *PollVoteMessage) String() string { + return protoimpl.X.MessageStringOf(x) } -func (x *Message) GetPollCreationMessageV2() *PollCreationMessage { +func (*PollVoteMessage) ProtoMessage() {} + +func (x *PollVoteMessage) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[56] if x != nil { - return x.PollCreationMessageV2 + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return nil + return mi.MessageOf(x) } -func (x *Message) GetScheduledCallCreationMessage() *ScheduledCallCreationMessage { - if x != nil { - return x.ScheduledCallCreationMessage - } - return nil +// Deprecated: Use PollVoteMessage.ProtoReflect.Descriptor instead. +func (*PollVoteMessage) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{56} } -func (x *Message) GetGroupMentionedMessage() *FutureProofMessage { +func (x *PollVoteMessage) GetSelectedOptions() [][]byte { if x != nil { - return x.GroupMentionedMessage + return x.SelectedOptions } return nil } -func (x *Message) GetPinInChatMessage() *PinInChatMessage { - if x != nil { - return x.PinInChatMessage - } - return nil +type PollEncValue struct { + state protoimpl.MessageState `protogen:"open.v1"` + EncPayload []byte `protobuf:"bytes,1,opt,name=encPayload" json:"encPayload,omitempty"` + EncIV []byte `protobuf:"bytes,2,opt,name=encIV" json:"encIV,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *Message) GetPollCreationMessageV3() *PollCreationMessage { - if x != nil { - return x.PollCreationMessageV3 - } - return nil +func (x *PollEncValue) Reset() { + *x = PollEncValue{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[57] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *Message) GetScheduledCallEditMessage() *ScheduledCallEditMessage { - if x != nil { - return x.ScheduledCallEditMessage - } - return nil +func (x *PollEncValue) String() string { + return protoimpl.X.MessageStringOf(x) } -func (x *Message) GetPtvMessage() *VideoMessage { +func (*PollEncValue) ProtoMessage() {} + +func (x *PollEncValue) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[57] if x != nil { - return x.PtvMessage + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return nil + return mi.MessageOf(x) } -func (x *Message) GetBotInvokeMessage() *FutureProofMessage { - if x != nil { - return x.BotInvokeMessage - } - return nil +// Deprecated: Use PollEncValue.ProtoReflect.Descriptor instead. +func (*PollEncValue) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{57} } -func (x *Message) GetCallLogMesssage() *CallLogMessage { +func (x *PollEncValue) GetEncPayload() []byte { if x != nil { - return x.CallLogMesssage + return x.EncPayload } return nil } -func (x *Message) GetMessageHistoryBundle() *MessageHistoryBundle { +func (x *PollEncValue) GetEncIV() []byte { if x != nil { - return x.MessageHistoryBundle + return x.EncIV } return nil } -func (x *Message) GetEncCommentMessage() *EncCommentMessage { - if x != nil { - return x.EncCommentMessage - } - return nil +type PollUpdateMessageMetadata struct { + state protoimpl.MessageState `protogen:"open.v1"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *Message) GetBcallMessage() *BCallMessage { - if x != nil { - return x.BcallMessage - } - return nil +func (x *PollUpdateMessageMetadata) Reset() { + *x = PollUpdateMessageMetadata{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[58] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *Message) GetLottieStickerMessage() *FutureProofMessage { - if x != nil { - return x.LottieStickerMessage - } - return nil +func (x *PollUpdateMessageMetadata) String() string { + return protoimpl.X.MessageStringOf(x) } -func (x *Message) GetEventMessage() *EventMessage { +func (*PollUpdateMessageMetadata) ProtoMessage() {} + +func (x *PollUpdateMessageMetadata) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[58] if x != nil { - return x.EventMessage + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return nil + return mi.MessageOf(x) } -func (x *Message) GetEncEventResponseMessage() *EncEventResponseMessage { - if x != nil { - return x.EncEventResponseMessage - } - return nil +// Deprecated: Use PollUpdateMessageMetadata.ProtoReflect.Descriptor instead. +func (*PollUpdateMessageMetadata) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{58} } -func (x *Message) GetCommentMessage() *CommentMessage { - if x != nil { - return x.CommentMessage - } - return nil +type PollUpdateMessage struct { + state protoimpl.MessageState `protogen:"open.v1"` + PollCreationMessageKey *waCommon.MessageKey `protobuf:"bytes,1,opt,name=pollCreationMessageKey" json:"pollCreationMessageKey,omitempty"` + Vote *PollEncValue `protobuf:"bytes,2,opt,name=vote" json:"vote,omitempty"` + Metadata *PollUpdateMessageMetadata `protobuf:"bytes,3,opt,name=metadata" json:"metadata,omitempty"` + SenderTimestampMS *int64 `protobuf:"varint,4,opt,name=senderTimestampMS" json:"senderTimestampMS,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *Message) GetNewsletterAdminInviteMessage() *NewsletterAdminInviteMessage { - if x != nil { - return x.NewsletterAdminInviteMessage - } - return nil +func (x *PollUpdateMessage) Reset() { + *x = PollUpdateMessage{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[59] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *Message) GetPlaceholderMessage() *PlaceholderMessage { - if x != nil { - return x.PlaceholderMessage - } - return nil +func (x *PollUpdateMessage) String() string { + return protoimpl.X.MessageStringOf(x) } -func (x *Message) GetSecretEncryptedMessage() *SecretEncryptedMessage { +func (*PollUpdateMessage) ProtoMessage() {} + +func (x *PollUpdateMessage) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[59] if x != nil { - return x.SecretEncryptedMessage + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return nil + return mi.MessageOf(x) } -func (x *Message) GetAlbumMessage() *AlbumMessage { - if x != nil { - return x.AlbumMessage - } - return nil +// Deprecated: Use PollUpdateMessage.ProtoReflect.Descriptor instead. +func (*PollUpdateMessage) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{59} } -func (x *Message) GetEventCoverImage() *FutureProofMessage { +func (x *PollUpdateMessage) GetPollCreationMessageKey() *waCommon.MessageKey { if x != nil { - return x.EventCoverImage + return x.PollCreationMessageKey } return nil } -func (x *Message) GetStickerPackMessage() *StickerPackMessage { +func (x *PollUpdateMessage) GetVote() *PollEncValue { if x != nil { - return x.StickerPackMessage + return x.Vote } return nil } -func (x *Message) GetStatusMentionMessage() *FutureProofMessage { +func (x *PollUpdateMessage) GetMetadata() *PollUpdateMessageMetadata { if x != nil { - return x.StatusMentionMessage + return x.Metadata } return nil } -func (x *Message) GetPollResultSnapshotMessage() *PollResultSnapshotMessage { - if x != nil { - return x.PollResultSnapshotMessage +func (x *PollUpdateMessage) GetSenderTimestampMS() int64 { + if x != nil && x.SenderTimestampMS != nil { + return *x.SenderTimestampMS } - return nil + return 0 } -type StickerPackMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - StickerPackID *string `protobuf:"bytes,1,opt,name=stickerPackID" json:"stickerPackID,omitempty"` - Name *string `protobuf:"bytes,2,opt,name=name" json:"name,omitempty"` - Publisher *string `protobuf:"bytes,3,opt,name=publisher" json:"publisher,omitempty"` - Stickers []*StickerPackMessage_Sticker `protobuf:"bytes,4,rep,name=stickers" json:"stickers,omitempty"` - FileSize *uint64 `protobuf:"varint,5,opt,name=fileSize" json:"fileSize,omitempty"` - FileSHA256 []byte `protobuf:"bytes,6,opt,name=fileSHA256" json:"fileSHA256,omitempty"` - FileEncSHA256 []byte `protobuf:"bytes,7,opt,name=fileEncSHA256" json:"fileEncSHA256,omitempty"` - MediaKey []byte `protobuf:"bytes,8,opt,name=mediaKey" json:"mediaKey,omitempty"` - DirectPath *string `protobuf:"bytes,9,opt,name=directPath" json:"directPath,omitempty"` - Caption *string `protobuf:"bytes,10,opt,name=caption" json:"caption,omitempty"` - ContextInfo *ContextInfo `protobuf:"bytes,11,opt,name=contextInfo" json:"contextInfo,omitempty"` - PackDescription *string `protobuf:"bytes,12,opt,name=packDescription" json:"packDescription,omitempty"` - MediaKeyTimestamp *int64 `protobuf:"varint,13,opt,name=mediaKeyTimestamp" json:"mediaKeyTimestamp,omitempty"` - TrayIconFileName *string `protobuf:"bytes,14,opt,name=trayIconFileName" json:"trayIconFileName,omitempty"` - ThumbnailDirectPath *string `protobuf:"bytes,15,opt,name=thumbnailDirectPath" json:"thumbnailDirectPath,omitempty"` - ThumbnailSHA256 []byte `protobuf:"bytes,16,opt,name=thumbnailSHA256" json:"thumbnailSHA256,omitempty"` - ThumbnailEncSHA256 []byte `protobuf:"bytes,17,opt,name=thumbnailEncSHA256" json:"thumbnailEncSHA256,omitempty"` - ThumbnailHeight *uint32 `protobuf:"varint,18,opt,name=thumbnailHeight" json:"thumbnailHeight,omitempty"` - ThumbnailWidth *uint32 `protobuf:"varint,19,opt,name=thumbnailWidth" json:"thumbnailWidth,omitempty"` +type PollCreationMessage struct { + state protoimpl.MessageState `protogen:"open.v1"` + EncKey []byte `protobuf:"bytes,1,opt,name=encKey" json:"encKey,omitempty"` + Name *string `protobuf:"bytes,2,opt,name=name" json:"name,omitempty"` + Options []*PollCreationMessage_Option `protobuf:"bytes,3,rep,name=options" json:"options,omitempty"` + SelectableOptionsCount *uint32 `protobuf:"varint,4,opt,name=selectableOptionsCount" json:"selectableOptionsCount,omitempty"` + ContextInfo *ContextInfo `protobuf:"bytes,5,opt,name=contextInfo" json:"contextInfo,omitempty"` + PollContentType *PollContentType `protobuf:"varint,6,opt,name=pollContentType,enum=WAWebProtobufsE2E.PollContentType" json:"pollContentType,omitempty"` + PollType *PollType `protobuf:"varint,7,opt,name=pollType,enum=WAWebProtobufsE2E.PollType" json:"pollType,omitempty"` + CorrectAnswer *PollCreationMessage_Option `protobuf:"bytes,8,opt,name=correctAnswer" json:"correctAnswer,omitempty"` + EndTime *int64 `protobuf:"varint,9,opt,name=endTime" json:"endTime,omitempty"` + HideParticipantName *bool `protobuf:"varint,10,opt,name=hideParticipantName" json:"hideParticipantName,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *StickerPackMessage) Reset() { - *x = StickerPackMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[40] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *PollCreationMessage) Reset() { + *x = PollCreationMessage{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[60] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *StickerPackMessage) String() string { +func (x *PollCreationMessage) String() string { return protoimpl.X.MessageStringOf(x) } -func (*StickerPackMessage) ProtoMessage() {} +func (*PollCreationMessage) ProtoMessage() {} -func (x *StickerPackMessage) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[40] - if protoimpl.UnsafeEnabled && x != nil { +func (x *PollCreationMessage) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[60] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -8603,171 +11312,232 @@ func (x *StickerPackMessage) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use StickerPackMessage.ProtoReflect.Descriptor instead. -func (*StickerPackMessage) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{40} +// Deprecated: Use PollCreationMessage.ProtoReflect.Descriptor instead. +func (*PollCreationMessage) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{60} } -func (x *StickerPackMessage) GetStickerPackID() string { - if x != nil && x.StickerPackID != nil { - return *x.StickerPackID +func (x *PollCreationMessage) GetEncKey() []byte { + if x != nil { + return x.EncKey } - return "" + return nil } -func (x *StickerPackMessage) GetName() string { +func (x *PollCreationMessage) GetName() string { if x != nil && x.Name != nil { return *x.Name } return "" } -func (x *StickerPackMessage) GetPublisher() string { - if x != nil && x.Publisher != nil { - return *x.Publisher - } - return "" -} - -func (x *StickerPackMessage) GetStickers() []*StickerPackMessage_Sticker { +func (x *PollCreationMessage) GetOptions() []*PollCreationMessage_Option { if x != nil { - return x.Stickers + return x.Options } return nil } -func (x *StickerPackMessage) GetFileSize() uint64 { - if x != nil && x.FileSize != nil { - return *x.FileSize +func (x *PollCreationMessage) GetSelectableOptionsCount() uint32 { + if x != nil && x.SelectableOptionsCount != nil { + return *x.SelectableOptionsCount } return 0 } -func (x *StickerPackMessage) GetFileSHA256() []byte { +func (x *PollCreationMessage) GetContextInfo() *ContextInfo { if x != nil { - return x.FileSHA256 + return x.ContextInfo } return nil } -func (x *StickerPackMessage) GetFileEncSHA256() []byte { - if x != nil { - return x.FileEncSHA256 +func (x *PollCreationMessage) GetPollContentType() PollContentType { + if x != nil && x.PollContentType != nil { + return *x.PollContentType } - return nil + return PollContentType_UNKNOWN_POLL_CONTENT_TYPE } -func (x *StickerPackMessage) GetMediaKey() []byte { +func (x *PollCreationMessage) GetPollType() PollType { + if x != nil && x.PollType != nil { + return *x.PollType + } + return PollType_POLL +} + +func (x *PollCreationMessage) GetCorrectAnswer() *PollCreationMessage_Option { if x != nil { - return x.MediaKey + return x.CorrectAnswer } return nil } -func (x *StickerPackMessage) GetDirectPath() string { - if x != nil && x.DirectPath != nil { - return *x.DirectPath +func (x *PollCreationMessage) GetEndTime() int64 { + if x != nil && x.EndTime != nil { + return *x.EndTime } - return "" + return 0 } -func (x *StickerPackMessage) GetCaption() string { - if x != nil && x.Caption != nil { - return *x.Caption +func (x *PollCreationMessage) GetHideParticipantName() bool { + if x != nil && x.HideParticipantName != nil { + return *x.HideParticipantName } - return "" + return false +} + +type StickerSyncRMRMessage struct { + state protoimpl.MessageState `protogen:"open.v1"` + Filehash []string `protobuf:"bytes,1,rep,name=filehash" json:"filehash,omitempty"` + RmrSource *string `protobuf:"bytes,2,opt,name=rmrSource" json:"rmrSource,omitempty"` + RequestTimestamp *int64 `protobuf:"varint,3,opt,name=requestTimestamp" json:"requestTimestamp,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *StickerSyncRMRMessage) Reset() { + *x = StickerSyncRMRMessage{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[61] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *StickerSyncRMRMessage) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StickerSyncRMRMessage) ProtoMessage() {} + +func (x *StickerSyncRMRMessage) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[61] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -func (x *StickerPackMessage) GetContextInfo() *ContextInfo { +// Deprecated: Use StickerSyncRMRMessage.ProtoReflect.Descriptor instead. +func (*StickerSyncRMRMessage) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{61} +} + +func (x *StickerSyncRMRMessage) GetFilehash() []string { if x != nil { - return x.ContextInfo + return x.Filehash } return nil } -func (x *StickerPackMessage) GetPackDescription() string { - if x != nil && x.PackDescription != nil { - return *x.PackDescription +func (x *StickerSyncRMRMessage) GetRmrSource() string { + if x != nil && x.RmrSource != nil { + return *x.RmrSource } return "" } -func (x *StickerPackMessage) GetMediaKeyTimestamp() int64 { - if x != nil && x.MediaKeyTimestamp != nil { - return *x.MediaKeyTimestamp +func (x *StickerSyncRMRMessage) GetRequestTimestamp() int64 { + if x != nil && x.RequestTimestamp != nil { + return *x.RequestTimestamp } return 0 } -func (x *StickerPackMessage) GetTrayIconFileName() string { - if x != nil && x.TrayIconFileName != nil { - return *x.TrayIconFileName - } - return "" +type ReactionMessage struct { + state protoimpl.MessageState `protogen:"open.v1"` + Key *waCommon.MessageKey `protobuf:"bytes,1,opt,name=key" json:"key,omitempty"` + Text *string `protobuf:"bytes,2,opt,name=text" json:"text,omitempty"` + GroupingKey *string `protobuf:"bytes,3,opt,name=groupingKey" json:"groupingKey,omitempty"` + SenderTimestampMS *int64 `protobuf:"varint,4,opt,name=senderTimestampMS" json:"senderTimestampMS,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *StickerPackMessage) GetThumbnailDirectPath() string { - if x != nil && x.ThumbnailDirectPath != nil { - return *x.ThumbnailDirectPath - } - return "" +func (x *ReactionMessage) Reset() { + *x = ReactionMessage{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[62] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *StickerPackMessage) GetThumbnailSHA256() []byte { +func (x *ReactionMessage) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ReactionMessage) ProtoMessage() {} + +func (x *ReactionMessage) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[62] if x != nil { - return x.ThumbnailSHA256 + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return nil + return mi.MessageOf(x) } -func (x *StickerPackMessage) GetThumbnailEncSHA256() []byte { +// Deprecated: Use ReactionMessage.ProtoReflect.Descriptor instead. +func (*ReactionMessage) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{62} +} + +func (x *ReactionMessage) GetKey() *waCommon.MessageKey { if x != nil { - return x.ThumbnailEncSHA256 + return x.Key } return nil } -func (x *StickerPackMessage) GetThumbnailHeight() uint32 { - if x != nil && x.ThumbnailHeight != nil { - return *x.ThumbnailHeight +func (x *ReactionMessage) GetText() string { + if x != nil && x.Text != nil { + return *x.Text } - return 0 + return "" } -func (x *StickerPackMessage) GetThumbnailWidth() uint32 { - if x != nil && x.ThumbnailWidth != nil { - return *x.ThumbnailWidth +func (x *ReactionMessage) GetGroupingKey() string { + if x != nil && x.GroupingKey != nil { + return *x.GroupingKey + } + return "" +} + +func (x *ReactionMessage) GetSenderTimestampMS() int64 { + if x != nil && x.SenderTimestampMS != nil { + return *x.SenderTimestampMS } return 0 } -type AlbumMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache +type FutureProofMessage struct { + state protoimpl.MessageState `protogen:"open.v1"` + Message *Message `protobuf:"bytes,1,opt,name=message" json:"message,omitempty"` unknownFields protoimpl.UnknownFields - - Caption *string `protobuf:"bytes,1,opt,name=caption" json:"caption,omitempty"` - ContextInfo *ContextInfo `protobuf:"bytes,17,opt,name=contextInfo" json:"contextInfo,omitempty"` + sizeCache protoimpl.SizeCache } -func (x *AlbumMessage) Reset() { - *x = AlbumMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[41] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *FutureProofMessage) Reset() { + *x = FutureProofMessage{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[63] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *AlbumMessage) String() string { +func (x *FutureProofMessage) String() string { return protoimpl.X.MessageStringOf(x) } -func (*AlbumMessage) ProtoMessage() {} +func (*FutureProofMessage) ProtoMessage() {} -func (x *AlbumMessage) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[41] - if protoimpl.UnsafeEnabled && x != nil { +func (x *FutureProofMessage) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[63] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -8777,58 +11547,43 @@ func (x *AlbumMessage) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use AlbumMessage.ProtoReflect.Descriptor instead. -func (*AlbumMessage) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{41} -} - -func (x *AlbumMessage) GetCaption() string { - if x != nil && x.Caption != nil { - return *x.Caption - } - return "" +// Deprecated: Use FutureProofMessage.ProtoReflect.Descriptor instead. +func (*FutureProofMessage) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{63} } -func (x *AlbumMessage) GetContextInfo() *ContextInfo { +func (x *FutureProofMessage) GetMessage() *Message { if x != nil { - return x.ContextInfo + return x.Message } return nil } -type MessageHistoryBundle struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Mimetype *string `protobuf:"bytes,2,opt,name=mimetype" json:"mimetype,omitempty"` - FileSHA256 []byte `protobuf:"bytes,3,opt,name=fileSHA256" json:"fileSHA256,omitempty"` - MediaKey []byte `protobuf:"bytes,5,opt,name=mediaKey" json:"mediaKey,omitempty"` - FileEncSHA256 []byte `protobuf:"bytes,6,opt,name=fileEncSHA256" json:"fileEncSHA256,omitempty"` - DirectPath *string `protobuf:"bytes,7,opt,name=directPath" json:"directPath,omitempty"` - MediaKeyTimestamp *int64 `protobuf:"varint,8,opt,name=mediaKeyTimestamp" json:"mediaKeyTimestamp,omitempty"` - ContextInfo *ContextInfo `protobuf:"bytes,9,opt,name=contextInfo" json:"contextInfo,omitempty"` - Participants []string `protobuf:"bytes,10,rep,name=participants" json:"participants,omitempty"` +type DeviceSentMessage struct { + state protoimpl.MessageState `protogen:"open.v1"` + DestinationJID *string `protobuf:"bytes,1,opt,name=destinationJID" json:"destinationJID,omitempty"` + Message *Message `protobuf:"bytes,2,opt,name=message" json:"message,omitempty"` + Phash *string `protobuf:"bytes,3,opt,name=phash" json:"phash,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *MessageHistoryBundle) Reset() { - *x = MessageHistoryBundle{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[42] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *DeviceSentMessage) Reset() { + *x = DeviceSentMessage{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[64] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *MessageHistoryBundle) String() string { +func (x *DeviceSentMessage) String() string { return protoimpl.X.MessageStringOf(x) } -func (*MessageHistoryBundle) ProtoMessage() {} +func (*DeviceSentMessage) ProtoMessage() {} -func (x *MessageHistoryBundle) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[42] - if protoimpl.UnsafeEnabled && x != nil { +func (x *DeviceSentMessage) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[64] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -8838,95 +11593,103 @@ func (x *MessageHistoryBundle) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use MessageHistoryBundle.ProtoReflect.Descriptor instead. -func (*MessageHistoryBundle) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{42} +// Deprecated: Use DeviceSentMessage.ProtoReflect.Descriptor instead. +func (*DeviceSentMessage) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{64} } -func (x *MessageHistoryBundle) GetMimetype() string { - if x != nil && x.Mimetype != nil { - return *x.Mimetype +func (x *DeviceSentMessage) GetDestinationJID() string { + if x != nil && x.DestinationJID != nil { + return *x.DestinationJID } return "" } -func (x *MessageHistoryBundle) GetFileSHA256() []byte { +func (x *DeviceSentMessage) GetMessage() *Message { if x != nil { - return x.FileSHA256 + return x.Message } return nil } -func (x *MessageHistoryBundle) GetMediaKey() []byte { - if x != nil { - return x.MediaKey +func (x *DeviceSentMessage) GetPhash() string { + if x != nil && x.Phash != nil { + return *x.Phash } - return nil + return "" } -func (x *MessageHistoryBundle) GetFileEncSHA256() []byte { - if x != nil { - return x.FileEncSHA256 - } - return nil +type RequestPhoneNumberMessage struct { + state protoimpl.MessageState `protogen:"open.v1"` + ContextInfo *ContextInfo `protobuf:"bytes,1,opt,name=contextInfo" json:"contextInfo,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *MessageHistoryBundle) GetDirectPath() string { - if x != nil && x.DirectPath != nil { - return *x.DirectPath - } - return "" +func (x *RequestPhoneNumberMessage) Reset() { + *x = RequestPhoneNumberMessage{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[65] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *MessageHistoryBundle) GetMediaKeyTimestamp() int64 { - if x != nil && x.MediaKeyTimestamp != nil { - return *x.MediaKeyTimestamp - } - return 0 +func (x *RequestPhoneNumberMessage) String() string { + return protoimpl.X.MessageStringOf(x) } -func (x *MessageHistoryBundle) GetContextInfo() *ContextInfo { +func (*RequestPhoneNumberMessage) ProtoMessage() {} + +func (x *RequestPhoneNumberMessage) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[65] if x != nil { - return x.ContextInfo + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return nil + return mi.MessageOf(x) +} + +// Deprecated: Use RequestPhoneNumberMessage.ProtoReflect.Descriptor instead. +func (*RequestPhoneNumberMessage) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{65} } -func (x *MessageHistoryBundle) GetParticipants() []string { +func (x *RequestPhoneNumberMessage) GetContextInfo() *ContextInfo { if x != nil { - return x.Participants + return x.ContextInfo } return nil } -type EncEventResponseMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - EventCreationMessageKey *waCommon.MessageKey `protobuf:"bytes,1,opt,name=eventCreationMessageKey" json:"eventCreationMessageKey,omitempty"` - EncPayload []byte `protobuf:"bytes,2,opt,name=encPayload" json:"encPayload,omitempty"` - EncIV []byte `protobuf:"bytes,3,opt,name=encIV" json:"encIV,omitempty"` +type NewsletterFollowerInviteMessage struct { + state protoimpl.MessageState `protogen:"open.v1"` + NewsletterJID *string `protobuf:"bytes,1,opt,name=newsletterJID" json:"newsletterJID,omitempty"` + NewsletterName *string `protobuf:"bytes,2,opt,name=newsletterName" json:"newsletterName,omitempty"` + JPEGThumbnail []byte `protobuf:"bytes,3,opt,name=JPEGThumbnail" json:"JPEGThumbnail,omitempty"` + Caption *string `protobuf:"bytes,4,opt,name=caption" json:"caption,omitempty"` + ContextInfo *ContextInfo `protobuf:"bytes,5,opt,name=contextInfo" json:"contextInfo,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *EncEventResponseMessage) Reset() { - *x = EncEventResponseMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[43] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *NewsletterFollowerInviteMessage) Reset() { + *x = NewsletterFollowerInviteMessage{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[66] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *EncEventResponseMessage) String() string { +func (x *NewsletterFollowerInviteMessage) String() string { return protoimpl.X.MessageStringOf(x) } -func (*EncEventResponseMessage) ProtoMessage() {} +func (*NewsletterFollowerInviteMessage) ProtoMessage() {} -func (x *EncEventResponseMessage) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[43] - if protoimpl.UnsafeEnabled && x != nil { +func (x *NewsletterFollowerInviteMessage) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[66] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -8936,66 +11699,74 @@ func (x *EncEventResponseMessage) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use EncEventResponseMessage.ProtoReflect.Descriptor instead. -func (*EncEventResponseMessage) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{43} +// Deprecated: Use NewsletterFollowerInviteMessage.ProtoReflect.Descriptor instead. +func (*NewsletterFollowerInviteMessage) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{66} } -func (x *EncEventResponseMessage) GetEventCreationMessageKey() *waCommon.MessageKey { - if x != nil { - return x.EventCreationMessageKey +func (x *NewsletterFollowerInviteMessage) GetNewsletterJID() string { + if x != nil && x.NewsletterJID != nil { + return *x.NewsletterJID } - return nil + return "" } -func (x *EncEventResponseMessage) GetEncPayload() []byte { - if x != nil { - return x.EncPayload +func (x *NewsletterFollowerInviteMessage) GetNewsletterName() string { + if x != nil && x.NewsletterName != nil { + return *x.NewsletterName } - return nil + return "" } -func (x *EncEventResponseMessage) GetEncIV() []byte { +func (x *NewsletterFollowerInviteMessage) GetJPEGThumbnail() []byte { if x != nil { - return x.EncIV + return x.JPEGThumbnail } return nil } -type EventMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +func (x *NewsletterFollowerInviteMessage) GetCaption() string { + if x != nil && x.Caption != nil { + return *x.Caption + } + return "" +} + +func (x *NewsletterFollowerInviteMessage) GetContextInfo() *ContextInfo { + if x != nil { + return x.ContextInfo + } + return nil +} - ContextInfo *ContextInfo `protobuf:"bytes,1,opt,name=contextInfo" json:"contextInfo,omitempty"` - IsCanceled *bool `protobuf:"varint,2,opt,name=isCanceled" json:"isCanceled,omitempty"` - Name *string `protobuf:"bytes,3,opt,name=name" json:"name,omitempty"` - Description *string `protobuf:"bytes,4,opt,name=description" json:"description,omitempty"` - Location *LocationMessage `protobuf:"bytes,5,opt,name=location" json:"location,omitempty"` - JoinLink *string `protobuf:"bytes,6,opt,name=joinLink" json:"joinLink,omitempty"` - StartTime *int64 `protobuf:"varint,7,opt,name=startTime" json:"startTime,omitempty"` - EndTime *int64 `protobuf:"varint,8,opt,name=endTime" json:"endTime,omitempty"` - ExtraGuestsAllowed *bool `protobuf:"varint,9,opt,name=extraGuestsAllowed" json:"extraGuestsAllowed,omitempty"` +type NewsletterAdminInviteMessage struct { + state protoimpl.MessageState `protogen:"open.v1"` + NewsletterJID *string `protobuf:"bytes,1,opt,name=newsletterJID" json:"newsletterJID,omitempty"` + NewsletterName *string `protobuf:"bytes,2,opt,name=newsletterName" json:"newsletterName,omitempty"` + JPEGThumbnail []byte `protobuf:"bytes,3,opt,name=JPEGThumbnail" json:"JPEGThumbnail,omitempty"` + Caption *string `protobuf:"bytes,4,opt,name=caption" json:"caption,omitempty"` + InviteExpiration *int64 `protobuf:"varint,5,opt,name=inviteExpiration" json:"inviteExpiration,omitempty"` + ContextInfo *ContextInfo `protobuf:"bytes,6,opt,name=contextInfo" json:"contextInfo,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *EventMessage) Reset() { - *x = EventMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[44] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *NewsletterAdminInviteMessage) Reset() { + *x = NewsletterAdminInviteMessage{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[67] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *EventMessage) String() string { +func (x *NewsletterAdminInviteMessage) String() string { return protoimpl.X.MessageStringOf(x) } -func (*EventMessage) ProtoMessage() {} +func (*NewsletterAdminInviteMessage) ProtoMessage() {} -func (x *EventMessage) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[44] - if protoimpl.UnsafeEnabled && x != nil { +func (x *NewsletterAdminInviteMessage) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[67] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -9005,101 +11776,81 @@ func (x *EventMessage) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use EventMessage.ProtoReflect.Descriptor instead. -func (*EventMessage) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{44} -} - -func (x *EventMessage) GetContextInfo() *ContextInfo { - if x != nil { - return x.ContextInfo - } - return nil -} - -func (x *EventMessage) GetIsCanceled() bool { - if x != nil && x.IsCanceled != nil { - return *x.IsCanceled - } - return false +// Deprecated: Use NewsletterAdminInviteMessage.ProtoReflect.Descriptor instead. +func (*NewsletterAdminInviteMessage) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{67} } -func (x *EventMessage) GetName() string { - if x != nil && x.Name != nil { - return *x.Name +func (x *NewsletterAdminInviteMessage) GetNewsletterJID() string { + if x != nil && x.NewsletterJID != nil { + return *x.NewsletterJID } return "" } -func (x *EventMessage) GetDescription() string { - if x != nil && x.Description != nil { - return *x.Description +func (x *NewsletterAdminInviteMessage) GetNewsletterName() string { + if x != nil && x.NewsletterName != nil { + return *x.NewsletterName } return "" } -func (x *EventMessage) GetLocation() *LocationMessage { +func (x *NewsletterAdminInviteMessage) GetJPEGThumbnail() []byte { if x != nil { - return x.Location + return x.JPEGThumbnail } return nil } -func (x *EventMessage) GetJoinLink() string { - if x != nil && x.JoinLink != nil { - return *x.JoinLink +func (x *NewsletterAdminInviteMessage) GetCaption() string { + if x != nil && x.Caption != nil { + return *x.Caption } return "" } -func (x *EventMessage) GetStartTime() int64 { - if x != nil && x.StartTime != nil { - return *x.StartTime - } - return 0 -} - -func (x *EventMessage) GetEndTime() int64 { - if x != nil && x.EndTime != nil { - return *x.EndTime +func (x *NewsletterAdminInviteMessage) GetInviteExpiration() int64 { + if x != nil && x.InviteExpiration != nil { + return *x.InviteExpiration } return 0 } -func (x *EventMessage) GetExtraGuestsAllowed() bool { - if x != nil && x.ExtraGuestsAllowed != nil { - return *x.ExtraGuestsAllowed +func (x *NewsletterAdminInviteMessage) GetContextInfo() *ContextInfo { + if x != nil { + return x.ContextInfo } - return false + return nil } -type CommentMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Message *Message `protobuf:"bytes,1,opt,name=message" json:"message,omitempty"` - TargetMessageKey *waCommon.MessageKey `protobuf:"bytes,2,opt,name=targetMessageKey" json:"targetMessageKey,omitempty"` +type ProductMessage struct { + state protoimpl.MessageState `protogen:"open.v1"` + Product *ProductMessage_ProductSnapshot `protobuf:"bytes,1,opt,name=product" json:"product,omitempty"` + BusinessOwnerJID *string `protobuf:"bytes,2,opt,name=businessOwnerJID" json:"businessOwnerJID,omitempty"` + Catalog *ProductMessage_CatalogSnapshot `protobuf:"bytes,4,opt,name=catalog" json:"catalog,omitempty"` + Body *string `protobuf:"bytes,5,opt,name=body" json:"body,omitempty"` + Footer *string `protobuf:"bytes,6,opt,name=footer" json:"footer,omitempty"` + ContextInfo *ContextInfo `protobuf:"bytes,17,opt,name=contextInfo" json:"contextInfo,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *CommentMessage) Reset() { - *x = CommentMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[45] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *ProductMessage) Reset() { + *x = ProductMessage{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[68] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *CommentMessage) String() string { +func (x *ProductMessage) String() string { return protoimpl.X.MessageStringOf(x) } -func (*CommentMessage) ProtoMessage() {} +func (*ProductMessage) ProtoMessage() {} -func (x *CommentMessage) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[45] - if protoimpl.UnsafeEnabled && x != nil { +func (x *ProductMessage) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[68] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -9109,53 +11860,80 @@ func (x *CommentMessage) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use CommentMessage.ProtoReflect.Descriptor instead. -func (*CommentMessage) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{45} +// Deprecated: Use ProductMessage.ProtoReflect.Descriptor instead. +func (*ProductMessage) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{68} } -func (x *CommentMessage) GetMessage() *Message { +func (x *ProductMessage) GetProduct() *ProductMessage_ProductSnapshot { if x != nil { - return x.Message + return x.Product } return nil } -func (x *CommentMessage) GetTargetMessageKey() *waCommon.MessageKey { +func (x *ProductMessage) GetBusinessOwnerJID() string { + if x != nil && x.BusinessOwnerJID != nil { + return *x.BusinessOwnerJID + } + return "" +} + +func (x *ProductMessage) GetCatalog() *ProductMessage_CatalogSnapshot { if x != nil { - return x.TargetMessageKey + return x.Catalog } return nil } -type EncCommentMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +func (x *ProductMessage) GetBody() string { + if x != nil && x.Body != nil { + return *x.Body + } + return "" +} - TargetMessageKey *waCommon.MessageKey `protobuf:"bytes,1,opt,name=targetMessageKey" json:"targetMessageKey,omitempty"` - EncPayload []byte `protobuf:"bytes,2,opt,name=encPayload" json:"encPayload,omitempty"` - EncIV []byte `protobuf:"bytes,3,opt,name=encIV" json:"encIV,omitempty"` +func (x *ProductMessage) GetFooter() string { + if x != nil && x.Footer != nil { + return *x.Footer + } + return "" } -func (x *EncCommentMessage) Reset() { - *x = EncCommentMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[46] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) +func (x *ProductMessage) GetContextInfo() *ContextInfo { + if x != nil { + return x.ContextInfo } + return nil } -func (x *EncCommentMessage) String() string { +type TemplateButtonReplyMessage struct { + state protoimpl.MessageState `protogen:"open.v1"` + SelectedID *string `protobuf:"bytes,1,opt,name=selectedID" json:"selectedID,omitempty"` + SelectedDisplayText *string `protobuf:"bytes,2,opt,name=selectedDisplayText" json:"selectedDisplayText,omitempty"` + ContextInfo *ContextInfo `protobuf:"bytes,3,opt,name=contextInfo" json:"contextInfo,omitempty"` + SelectedIndex *uint32 `protobuf:"varint,4,opt,name=selectedIndex" json:"selectedIndex,omitempty"` + SelectedCarouselCardIndex *uint32 `protobuf:"varint,5,opt,name=selectedCarouselCardIndex" json:"selectedCarouselCardIndex,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *TemplateButtonReplyMessage) Reset() { + *x = TemplateButtonReplyMessage{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[69] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *TemplateButtonReplyMessage) String() string { return protoimpl.X.MessageStringOf(x) } -func (*EncCommentMessage) ProtoMessage() {} +func (*TemplateButtonReplyMessage) ProtoMessage() {} -func (x *EncCommentMessage) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[46] - if protoimpl.UnsafeEnabled && x != nil { +func (x *TemplateButtonReplyMessage) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[69] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -9165,60 +11943,77 @@ func (x *EncCommentMessage) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use EncCommentMessage.ProtoReflect.Descriptor instead. -func (*EncCommentMessage) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{46} +// Deprecated: Use TemplateButtonReplyMessage.ProtoReflect.Descriptor instead. +func (*TemplateButtonReplyMessage) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{69} } -func (x *EncCommentMessage) GetTargetMessageKey() *waCommon.MessageKey { - if x != nil { - return x.TargetMessageKey +func (x *TemplateButtonReplyMessage) GetSelectedID() string { + if x != nil && x.SelectedID != nil { + return *x.SelectedID } - return nil + return "" } -func (x *EncCommentMessage) GetEncPayload() []byte { - if x != nil { - return x.EncPayload +func (x *TemplateButtonReplyMessage) GetSelectedDisplayText() string { + if x != nil && x.SelectedDisplayText != nil { + return *x.SelectedDisplayText } - return nil + return "" } -func (x *EncCommentMessage) GetEncIV() []byte { +func (x *TemplateButtonReplyMessage) GetContextInfo() *ContextInfo { if x != nil { - return x.EncIV + return x.ContextInfo } return nil } -type EncReactionMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - TargetMessageKey *waCommon.MessageKey `protobuf:"bytes,1,opt,name=targetMessageKey" json:"targetMessageKey,omitempty"` - EncPayload []byte `protobuf:"bytes,2,opt,name=encPayload" json:"encPayload,omitempty"` - EncIV []byte `protobuf:"bytes,3,opt,name=encIV" json:"encIV,omitempty"` +func (x *TemplateButtonReplyMessage) GetSelectedIndex() uint32 { + if x != nil && x.SelectedIndex != nil { + return *x.SelectedIndex + } + return 0 } -func (x *EncReactionMessage) Reset() { - *x = EncReactionMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[47] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) +func (x *TemplateButtonReplyMessage) GetSelectedCarouselCardIndex() uint32 { + if x != nil && x.SelectedCarouselCardIndex != nil { + return *x.SelectedCarouselCardIndex } + return 0 } -func (x *EncReactionMessage) String() string { +type TemplateMessage struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Types that are valid to be assigned to Format: + // + // *TemplateMessage_FourRowTemplate_ + // *TemplateMessage_HydratedFourRowTemplate_ + // *TemplateMessage_InteractiveMessageTemplate + Format isTemplateMessage_Format `protobuf_oneof:"format"` + ContextInfo *ContextInfo `protobuf:"bytes,3,opt,name=contextInfo" json:"contextInfo,omitempty"` + HydratedTemplate *TemplateMessage_HydratedFourRowTemplate `protobuf:"bytes,4,opt,name=hydratedTemplate" json:"hydratedTemplate,omitempty"` + TemplateID *string `protobuf:"bytes,9,opt,name=templateID" json:"templateID,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *TemplateMessage) Reset() { + *x = TemplateMessage{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[70] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *TemplateMessage) String() string { return protoimpl.X.MessageStringOf(x) } -func (*EncReactionMessage) ProtoMessage() {} +func (*TemplateMessage) ProtoMessage() {} -func (x *EncReactionMessage) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[47] - if protoimpl.UnsafeEnabled && x != nil { +func (x *TemplateMessage) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[70] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -9228,123 +12023,131 @@ func (x *EncReactionMessage) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use EncReactionMessage.ProtoReflect.Descriptor instead. -func (*EncReactionMessage) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{47} +// Deprecated: Use TemplateMessage.ProtoReflect.Descriptor instead. +func (*TemplateMessage) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{70} } -func (x *EncReactionMessage) GetTargetMessageKey() *waCommon.MessageKey { +func (x *TemplateMessage) GetFormat() isTemplateMessage_Format { + if x != nil { + return x.Format + } + return nil +} + +func (x *TemplateMessage) GetFourRowTemplate() *TemplateMessage_FourRowTemplate { + if x != nil { + if x, ok := x.Format.(*TemplateMessage_FourRowTemplate_); ok { + return x.FourRowTemplate + } + } + return nil +} + +func (x *TemplateMessage) GetHydratedFourRowTemplate() *TemplateMessage_HydratedFourRowTemplate { if x != nil { - return x.TargetMessageKey + if x, ok := x.Format.(*TemplateMessage_HydratedFourRowTemplate_); ok { + return x.HydratedFourRowTemplate + } } return nil } -func (x *EncReactionMessage) GetEncPayload() []byte { +func (x *TemplateMessage) GetInteractiveMessageTemplate() *InteractiveMessage { if x != nil { - return x.EncPayload + if x, ok := x.Format.(*TemplateMessage_InteractiveMessageTemplate); ok { + return x.InteractiveMessageTemplate + } } return nil } -func (x *EncReactionMessage) GetEncIV() []byte { +func (x *TemplateMessage) GetContextInfo() *ContextInfo { if x != nil { - return x.EncIV + return x.ContextInfo } return nil } -type KeepInChatMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Key *waCommon.MessageKey `protobuf:"bytes,1,opt,name=key" json:"key,omitempty"` - KeepType *KeepType `protobuf:"varint,2,opt,name=keepType,enum=WAWebProtobufsE2E.KeepType" json:"keepType,omitempty"` - TimestampMS *int64 `protobuf:"varint,3,opt,name=timestampMS" json:"timestampMS,omitempty"` +func (x *TemplateMessage) GetHydratedTemplate() *TemplateMessage_HydratedFourRowTemplate { + if x != nil { + return x.HydratedTemplate + } + return nil } -func (x *KeepInChatMessage) Reset() { - *x = KeepInChatMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[48] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) +func (x *TemplateMessage) GetTemplateID() string { + if x != nil && x.TemplateID != nil { + return *x.TemplateID } + return "" } -func (x *KeepInChatMessage) String() string { - return protoimpl.X.MessageStringOf(x) +type isTemplateMessage_Format interface { + isTemplateMessage_Format() } -func (*KeepInChatMessage) ProtoMessage() {} - -func (x *KeepInChatMessage) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[48] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) +type TemplateMessage_FourRowTemplate_ struct { + FourRowTemplate *TemplateMessage_FourRowTemplate `protobuf:"bytes,1,opt,name=fourRowTemplate,oneof"` } -// Deprecated: Use KeepInChatMessage.ProtoReflect.Descriptor instead. -func (*KeepInChatMessage) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{48} +type TemplateMessage_HydratedFourRowTemplate_ struct { + HydratedFourRowTemplate *TemplateMessage_HydratedFourRowTemplate `protobuf:"bytes,2,opt,name=hydratedFourRowTemplate,oneof"` } -func (x *KeepInChatMessage) GetKey() *waCommon.MessageKey { - if x != nil { - return x.Key - } - return nil +type TemplateMessage_InteractiveMessageTemplate struct { + InteractiveMessageTemplate *InteractiveMessage `protobuf:"bytes,5,opt,name=interactiveMessageTemplate,oneof"` } -func (x *KeepInChatMessage) GetKeepType() KeepType { - if x != nil && x.KeepType != nil { - return *x.KeepType - } - return KeepType_UNKNOWN -} +func (*TemplateMessage_FourRowTemplate_) isTemplateMessage_Format() {} -func (x *KeepInChatMessage) GetTimestampMS() int64 { - if x != nil && x.TimestampMS != nil { - return *x.TimestampMS - } - return 0 -} +func (*TemplateMessage_HydratedFourRowTemplate_) isTemplateMessage_Format() {} -type PollResultSnapshotMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +func (*TemplateMessage_InteractiveMessageTemplate) isTemplateMessage_Format() {} - Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` - PollVotes []*PollResultSnapshotMessage_PollVote `protobuf:"bytes,2,rep,name=pollVotes" json:"pollVotes,omitempty"` - ContextInfo *ContextInfo `protobuf:"bytes,3,opt,name=contextInfo" json:"contextInfo,omitempty"` +type StickerMessage struct { + state protoimpl.MessageState `protogen:"open.v1"` + URL *string `protobuf:"bytes,1,opt,name=URL" json:"URL,omitempty"` + FileSHA256 []byte `protobuf:"bytes,2,opt,name=fileSHA256" json:"fileSHA256,omitempty"` + FileEncSHA256 []byte `protobuf:"bytes,3,opt,name=fileEncSHA256" json:"fileEncSHA256,omitempty"` + MediaKey []byte `protobuf:"bytes,4,opt,name=mediaKey" json:"mediaKey,omitempty"` + Mimetype *string `protobuf:"bytes,5,opt,name=mimetype" json:"mimetype,omitempty"` + Height *uint32 `protobuf:"varint,6,opt,name=height" json:"height,omitempty"` + Width *uint32 `protobuf:"varint,7,opt,name=width" json:"width,omitempty"` + DirectPath *string `protobuf:"bytes,8,opt,name=directPath" json:"directPath,omitempty"` + FileLength *uint64 `protobuf:"varint,9,opt,name=fileLength" json:"fileLength,omitempty"` + MediaKeyTimestamp *int64 `protobuf:"varint,10,opt,name=mediaKeyTimestamp" json:"mediaKeyTimestamp,omitempty"` + FirstFrameLength *uint32 `protobuf:"varint,11,opt,name=firstFrameLength" json:"firstFrameLength,omitempty"` + FirstFrameSidecar []byte `protobuf:"bytes,12,opt,name=firstFrameSidecar" json:"firstFrameSidecar,omitempty"` + IsAnimated *bool `protobuf:"varint,13,opt,name=isAnimated" json:"isAnimated,omitempty"` + PngThumbnail []byte `protobuf:"bytes,16,opt,name=pngThumbnail" json:"pngThumbnail,omitempty"` + ContextInfo *ContextInfo `protobuf:"bytes,17,opt,name=contextInfo" json:"contextInfo,omitempty"` + StickerSentTS *int64 `protobuf:"varint,18,opt,name=stickerSentTS" json:"stickerSentTS,omitempty"` + IsAvatar *bool `protobuf:"varint,19,opt,name=isAvatar" json:"isAvatar,omitempty"` + IsAiSticker *bool `protobuf:"varint,20,opt,name=isAiSticker" json:"isAiSticker,omitempty"` + IsLottie *bool `protobuf:"varint,21,opt,name=isLottie" json:"isLottie,omitempty"` + AccessibilityLabel *string `protobuf:"bytes,22,opt,name=accessibilityLabel" json:"accessibilityLabel,omitempty"` + Premium *int32 `protobuf:"varint,24,opt,name=premium" json:"premium,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *PollResultSnapshotMessage) Reset() { - *x = PollResultSnapshotMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[49] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *StickerMessage) Reset() { + *x = StickerMessage{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[71] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *PollResultSnapshotMessage) String() string { +func (x *StickerMessage) String() string { return protoimpl.X.MessageStringOf(x) } -func (*PollResultSnapshotMessage) ProtoMessage() {} +func (*StickerMessage) ProtoMessage() {} -func (x *PollResultSnapshotMessage) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[49] - if protoimpl.UnsafeEnabled && x != nil { +func (x *StickerMessage) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[71] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -9354,158 +12157,190 @@ func (x *PollResultSnapshotMessage) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use PollResultSnapshotMessage.ProtoReflect.Descriptor instead. -func (*PollResultSnapshotMessage) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{49} +// Deprecated: Use StickerMessage.ProtoReflect.Descriptor instead. +func (*StickerMessage) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{71} } -func (x *PollResultSnapshotMessage) GetName() string { - if x != nil && x.Name != nil { - return *x.Name +func (x *StickerMessage) GetURL() string { + if x != nil && x.URL != nil { + return *x.URL } return "" } -func (x *PollResultSnapshotMessage) GetPollVotes() []*PollResultSnapshotMessage_PollVote { +func (x *StickerMessage) GetFileSHA256() []byte { if x != nil { - return x.PollVotes + return x.FileSHA256 } return nil } -func (x *PollResultSnapshotMessage) GetContextInfo() *ContextInfo { +func (x *StickerMessage) GetFileEncSHA256() []byte { if x != nil { - return x.ContextInfo + return x.FileEncSHA256 } return nil } -type PollVoteMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +func (x *StickerMessage) GetMediaKey() []byte { + if x != nil { + return x.MediaKey + } + return nil +} - SelectedOptions [][]byte `protobuf:"bytes,1,rep,name=selectedOptions" json:"selectedOptions,omitempty"` +func (x *StickerMessage) GetMimetype() string { + if x != nil && x.Mimetype != nil { + return *x.Mimetype + } + return "" } -func (x *PollVoteMessage) Reset() { - *x = PollVoteMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[50] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) +func (x *StickerMessage) GetHeight() uint32 { + if x != nil && x.Height != nil { + return *x.Height } + return 0 } -func (x *PollVoteMessage) String() string { - return protoimpl.X.MessageStringOf(x) +func (x *StickerMessage) GetWidth() uint32 { + if x != nil && x.Width != nil { + return *x.Width + } + return 0 } -func (*PollVoteMessage) ProtoMessage() {} +func (x *StickerMessage) GetDirectPath() string { + if x != nil && x.DirectPath != nil { + return *x.DirectPath + } + return "" +} -func (x *PollVoteMessage) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[50] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms +func (x *StickerMessage) GetFileLength() uint64 { + if x != nil && x.FileLength != nil { + return *x.FileLength } - return mi.MessageOf(x) + return 0 } -// Deprecated: Use PollVoteMessage.ProtoReflect.Descriptor instead. -func (*PollVoteMessage) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{50} +func (x *StickerMessage) GetMediaKeyTimestamp() int64 { + if x != nil && x.MediaKeyTimestamp != nil { + return *x.MediaKeyTimestamp + } + return 0 } -func (x *PollVoteMessage) GetSelectedOptions() [][]byte { +func (x *StickerMessage) GetFirstFrameLength() uint32 { + if x != nil && x.FirstFrameLength != nil { + return *x.FirstFrameLength + } + return 0 +} + +func (x *StickerMessage) GetFirstFrameSidecar() []byte { if x != nil { - return x.SelectedOptions + return x.FirstFrameSidecar } return nil } -type PollEncValue struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +func (x *StickerMessage) GetIsAnimated() bool { + if x != nil && x.IsAnimated != nil { + return *x.IsAnimated + } + return false +} - EncPayload []byte `protobuf:"bytes,1,opt,name=encPayload" json:"encPayload,omitempty"` - EncIV []byte `protobuf:"bytes,2,opt,name=encIV" json:"encIV,omitempty"` +func (x *StickerMessage) GetPngThumbnail() []byte { + if x != nil { + return x.PngThumbnail + } + return nil } -func (x *PollEncValue) Reset() { - *x = PollEncValue{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[51] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) +func (x *StickerMessage) GetContextInfo() *ContextInfo { + if x != nil { + return x.ContextInfo } + return nil } -func (x *PollEncValue) String() string { - return protoimpl.X.MessageStringOf(x) +func (x *StickerMessage) GetStickerSentTS() int64 { + if x != nil && x.StickerSentTS != nil { + return *x.StickerSentTS + } + return 0 } -func (*PollEncValue) ProtoMessage() {} +func (x *StickerMessage) GetIsAvatar() bool { + if x != nil && x.IsAvatar != nil { + return *x.IsAvatar + } + return false +} -func (x *PollEncValue) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[51] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms +func (x *StickerMessage) GetIsAiSticker() bool { + if x != nil && x.IsAiSticker != nil { + return *x.IsAiSticker } - return mi.MessageOf(x) + return false } -// Deprecated: Use PollEncValue.ProtoReflect.Descriptor instead. -func (*PollEncValue) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{51} +func (x *StickerMessage) GetIsLottie() bool { + if x != nil && x.IsLottie != nil { + return *x.IsLottie + } + return false } -func (x *PollEncValue) GetEncPayload() []byte { - if x != nil { - return x.EncPayload +func (x *StickerMessage) GetAccessibilityLabel() string { + if x != nil && x.AccessibilityLabel != nil { + return *x.AccessibilityLabel } - return nil + return "" } -func (x *PollEncValue) GetEncIV() []byte { - if x != nil { - return x.EncIV +func (x *StickerMessage) GetPremium() int32 { + if x != nil && x.Premium != nil { + return *x.Premium } - return nil + return 0 } -type PollUpdateMessageMetadata struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +type LiveLocationMessage struct { + state protoimpl.MessageState `protogen:"open.v1"` + DegreesLatitude *float64 `protobuf:"fixed64,1,opt,name=degreesLatitude" json:"degreesLatitude,omitempty"` + DegreesLongitude *float64 `protobuf:"fixed64,2,opt,name=degreesLongitude" json:"degreesLongitude,omitempty"` + AccuracyInMeters *uint32 `protobuf:"varint,3,opt,name=accuracyInMeters" json:"accuracyInMeters,omitempty"` + SpeedInMps *float32 `protobuf:"fixed32,4,opt,name=speedInMps" json:"speedInMps,omitempty"` + DegreesClockwiseFromMagneticNorth *uint32 `protobuf:"varint,5,opt,name=degreesClockwiseFromMagneticNorth" json:"degreesClockwiseFromMagneticNorth,omitempty"` + Caption *string `protobuf:"bytes,6,opt,name=caption" json:"caption,omitempty"` + SequenceNumber *int64 `protobuf:"varint,7,opt,name=sequenceNumber" json:"sequenceNumber,omitempty"` + TimeOffset *uint32 `protobuf:"varint,8,opt,name=timeOffset" json:"timeOffset,omitempty"` + JPEGThumbnail []byte `protobuf:"bytes,16,opt,name=JPEGThumbnail" json:"JPEGThumbnail,omitempty"` + ContextInfo *ContextInfo `protobuf:"bytes,17,opt,name=contextInfo" json:"contextInfo,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *PollUpdateMessageMetadata) Reset() { - *x = PollUpdateMessageMetadata{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[52] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *LiveLocationMessage) Reset() { + *x = LiveLocationMessage{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[72] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *PollUpdateMessageMetadata) String() string { +func (x *LiveLocationMessage) String() string { return protoimpl.X.MessageStringOf(x) } -func (*PollUpdateMessageMetadata) ProtoMessage() {} +func (*LiveLocationMessage) ProtoMessage() {} -func (x *PollUpdateMessageMetadata) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[52] - if protoimpl.UnsafeEnabled && x != nil { +func (x *LiveLocationMessage) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[72] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -9515,112 +12350,104 @@ func (x *PollUpdateMessageMetadata) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use PollUpdateMessageMetadata.ProtoReflect.Descriptor instead. -func (*PollUpdateMessageMetadata) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{52} +// Deprecated: Use LiveLocationMessage.ProtoReflect.Descriptor instead. +func (*LiveLocationMessage) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{72} } -type PollUpdateMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - PollCreationMessageKey *waCommon.MessageKey `protobuf:"bytes,1,opt,name=pollCreationMessageKey" json:"pollCreationMessageKey,omitempty"` - Vote *PollEncValue `protobuf:"bytes,2,opt,name=vote" json:"vote,omitempty"` - Metadata *PollUpdateMessageMetadata `protobuf:"bytes,3,opt,name=metadata" json:"metadata,omitempty"` - SenderTimestampMS *int64 `protobuf:"varint,4,opt,name=senderTimestampMS" json:"senderTimestampMS,omitempty"` +func (x *LiveLocationMessage) GetDegreesLatitude() float64 { + if x != nil && x.DegreesLatitude != nil { + return *x.DegreesLatitude + } + return 0 } -func (x *PollUpdateMessage) Reset() { - *x = PollUpdateMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[53] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) +func (x *LiveLocationMessage) GetDegreesLongitude() float64 { + if x != nil && x.DegreesLongitude != nil { + return *x.DegreesLongitude } + return 0 } -func (x *PollUpdateMessage) String() string { - return protoimpl.X.MessageStringOf(x) +func (x *LiveLocationMessage) GetAccuracyInMeters() uint32 { + if x != nil && x.AccuracyInMeters != nil { + return *x.AccuracyInMeters + } + return 0 } -func (*PollUpdateMessage) ProtoMessage() {} +func (x *LiveLocationMessage) GetSpeedInMps() float32 { + if x != nil && x.SpeedInMps != nil { + return *x.SpeedInMps + } + return 0 +} -func (x *PollUpdateMessage) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[53] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms +func (x *LiveLocationMessage) GetDegreesClockwiseFromMagneticNorth() uint32 { + if x != nil && x.DegreesClockwiseFromMagneticNorth != nil { + return *x.DegreesClockwiseFromMagneticNorth } - return mi.MessageOf(x) + return 0 } -// Deprecated: Use PollUpdateMessage.ProtoReflect.Descriptor instead. -func (*PollUpdateMessage) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{53} +func (x *LiveLocationMessage) GetCaption() string { + if x != nil && x.Caption != nil { + return *x.Caption + } + return "" } -func (x *PollUpdateMessage) GetPollCreationMessageKey() *waCommon.MessageKey { - if x != nil { - return x.PollCreationMessageKey +func (x *LiveLocationMessage) GetSequenceNumber() int64 { + if x != nil && x.SequenceNumber != nil { + return *x.SequenceNumber } - return nil + return 0 } -func (x *PollUpdateMessage) GetVote() *PollEncValue { - if x != nil { - return x.Vote +func (x *LiveLocationMessage) GetTimeOffset() uint32 { + if x != nil && x.TimeOffset != nil { + return *x.TimeOffset } - return nil + return 0 } -func (x *PollUpdateMessage) GetMetadata() *PollUpdateMessageMetadata { +func (x *LiveLocationMessage) GetJPEGThumbnail() []byte { if x != nil { - return x.Metadata + return x.JPEGThumbnail } return nil } -func (x *PollUpdateMessage) GetSenderTimestampMS() int64 { - if x != nil && x.SenderTimestampMS != nil { - return *x.SenderTimestampMS +func (x *LiveLocationMessage) GetContextInfo() *ContextInfo { + if x != nil { + return x.ContextInfo } - return 0 + return nil } -type PollCreationMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache +type CancelPaymentRequestMessage struct { + state protoimpl.MessageState `protogen:"open.v1"` + Key *waCommon.MessageKey `protobuf:"bytes,1,opt,name=key" json:"key,omitempty"` unknownFields protoimpl.UnknownFields - - EncKey []byte `protobuf:"bytes,1,opt,name=encKey" json:"encKey,omitempty"` - Name *string `protobuf:"bytes,2,opt,name=name" json:"name,omitempty"` - Options []*PollCreationMessage_Option `protobuf:"bytes,3,rep,name=options" json:"options,omitempty"` - SelectableOptionsCount *uint32 `protobuf:"varint,4,opt,name=selectableOptionsCount" json:"selectableOptionsCount,omitempty"` - ContextInfo *ContextInfo `protobuf:"bytes,5,opt,name=contextInfo" json:"contextInfo,omitempty"` + sizeCache protoimpl.SizeCache } -func (x *PollCreationMessage) Reset() { - *x = PollCreationMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[54] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *CancelPaymentRequestMessage) Reset() { + *x = CancelPaymentRequestMessage{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[73] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *PollCreationMessage) String() string { +func (x *CancelPaymentRequestMessage) String() string { return protoimpl.X.MessageStringOf(x) } -func (*PollCreationMessage) ProtoMessage() {} +func (*CancelPaymentRequestMessage) ProtoMessage() {} -func (x *PollCreationMessage) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[54] - if protoimpl.UnsafeEnabled && x != nil { +func (x *CancelPaymentRequestMessage) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[73] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -9630,74 +12457,91 @@ func (x *PollCreationMessage) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use PollCreationMessage.ProtoReflect.Descriptor instead. -func (*PollCreationMessage) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{54} +// Deprecated: Use CancelPaymentRequestMessage.ProtoReflect.Descriptor instead. +func (*CancelPaymentRequestMessage) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{73} } -func (x *PollCreationMessage) GetEncKey() []byte { +func (x *CancelPaymentRequestMessage) GetKey() *waCommon.MessageKey { if x != nil { - return x.EncKey + return x.Key } return nil } -func (x *PollCreationMessage) GetName() string { - if x != nil && x.Name != nil { - return *x.Name - } - return "" +type DeclinePaymentRequestMessage struct { + state protoimpl.MessageState `protogen:"open.v1"` + Key *waCommon.MessageKey `protobuf:"bytes,1,opt,name=key" json:"key,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *PollCreationMessage) GetOptions() []*PollCreationMessage_Option { +func (x *DeclinePaymentRequestMessage) Reset() { + *x = DeclinePaymentRequestMessage{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[74] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *DeclinePaymentRequestMessage) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DeclinePaymentRequestMessage) ProtoMessage() {} + +func (x *DeclinePaymentRequestMessage) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[74] if x != nil { - return x.Options + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return nil + return mi.MessageOf(x) } -func (x *PollCreationMessage) GetSelectableOptionsCount() uint32 { - if x != nil && x.SelectableOptionsCount != nil { - return *x.SelectableOptionsCount - } - return 0 +// Deprecated: Use DeclinePaymentRequestMessage.ProtoReflect.Descriptor instead. +func (*DeclinePaymentRequestMessage) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{74} } -func (x *PollCreationMessage) GetContextInfo() *ContextInfo { +func (x *DeclinePaymentRequestMessage) GetKey() *waCommon.MessageKey { if x != nil { - return x.ContextInfo + return x.Key } return nil } -type StickerSyncRMRMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Filehash []string `protobuf:"bytes,1,rep,name=filehash" json:"filehash,omitempty"` - RmrSource *string `protobuf:"bytes,2,opt,name=rmrSource" json:"rmrSource,omitempty"` - RequestTimestamp *int64 `protobuf:"varint,3,opt,name=requestTimestamp" json:"requestTimestamp,omitempty"` +type RequestPaymentMessage struct { + state protoimpl.MessageState `protogen:"open.v1"` + NoteMessage *Message `protobuf:"bytes,4,opt,name=noteMessage" json:"noteMessage,omitempty"` + CurrencyCodeIso4217 *string `protobuf:"bytes,1,opt,name=currencyCodeIso4217" json:"currencyCodeIso4217,omitempty"` + Amount1000 *uint64 `protobuf:"varint,2,opt,name=amount1000" json:"amount1000,omitempty"` + RequestFrom *string `protobuf:"bytes,3,opt,name=requestFrom" json:"requestFrom,omitempty"` + ExpiryTimestamp *int64 `protobuf:"varint,5,opt,name=expiryTimestamp" json:"expiryTimestamp,omitempty"` + Amount *Money `protobuf:"bytes,6,opt,name=amount" json:"amount,omitempty"` + Background *PaymentBackground `protobuf:"bytes,7,opt,name=background" json:"background,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *StickerSyncRMRMessage) Reset() { - *x = StickerSyncRMRMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[55] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *RequestPaymentMessage) Reset() { + *x = RequestPaymentMessage{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[75] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *StickerSyncRMRMessage) String() string { +func (x *RequestPaymentMessage) String() string { return protoimpl.X.MessageStringOf(x) } -func (*StickerSyncRMRMessage) ProtoMessage() {} +func (*RequestPaymentMessage) ProtoMessage() {} -func (x *StickerSyncRMRMessage) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[55] - if protoimpl.UnsafeEnabled && x != nil { +func (x *RequestPaymentMessage) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[75] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -9707,61 +12551,86 @@ func (x *StickerSyncRMRMessage) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use StickerSyncRMRMessage.ProtoReflect.Descriptor instead. -func (*StickerSyncRMRMessage) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{55} +// Deprecated: Use RequestPaymentMessage.ProtoReflect.Descriptor instead. +func (*RequestPaymentMessage) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{75} } -func (x *StickerSyncRMRMessage) GetFilehash() []string { +func (x *RequestPaymentMessage) GetNoteMessage() *Message { if x != nil { - return x.Filehash + return x.NoteMessage } return nil } -func (x *StickerSyncRMRMessage) GetRmrSource() string { - if x != nil && x.RmrSource != nil { - return *x.RmrSource +func (x *RequestPaymentMessage) GetCurrencyCodeIso4217() string { + if x != nil && x.CurrencyCodeIso4217 != nil { + return *x.CurrencyCodeIso4217 } return "" } -func (x *StickerSyncRMRMessage) GetRequestTimestamp() int64 { - if x != nil && x.RequestTimestamp != nil { - return *x.RequestTimestamp +func (x *RequestPaymentMessage) GetAmount1000() uint64 { + if x != nil && x.Amount1000 != nil { + return *x.Amount1000 } return 0 } -type ReactionMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +func (x *RequestPaymentMessage) GetRequestFrom() string { + if x != nil && x.RequestFrom != nil { + return *x.RequestFrom + } + return "" +} - Key *waCommon.MessageKey `protobuf:"bytes,1,opt,name=key" json:"key,omitempty"` - Text *string `protobuf:"bytes,2,opt,name=text" json:"text,omitempty"` - GroupingKey *string `protobuf:"bytes,3,opt,name=groupingKey" json:"groupingKey,omitempty"` - SenderTimestampMS *int64 `protobuf:"varint,4,opt,name=senderTimestampMS" json:"senderTimestampMS,omitempty"` +func (x *RequestPaymentMessage) GetExpiryTimestamp() int64 { + if x != nil && x.ExpiryTimestamp != nil { + return *x.ExpiryTimestamp + } + return 0 } -func (x *ReactionMessage) Reset() { - *x = ReactionMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[56] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) +func (x *RequestPaymentMessage) GetAmount() *Money { + if x != nil { + return x.Amount } + return nil } -func (x *ReactionMessage) String() string { +func (x *RequestPaymentMessage) GetBackground() *PaymentBackground { + if x != nil { + return x.Background + } + return nil +} + +type SendPaymentMessage struct { + state protoimpl.MessageState `protogen:"open.v1"` + NoteMessage *Message `protobuf:"bytes,2,opt,name=noteMessage" json:"noteMessage,omitempty"` + RequestMessageKey *waCommon.MessageKey `protobuf:"bytes,3,opt,name=requestMessageKey" json:"requestMessageKey,omitempty"` + Background *PaymentBackground `protobuf:"bytes,4,opt,name=background" json:"background,omitempty"` + TransactionData *string `protobuf:"bytes,5,opt,name=transactionData" json:"transactionData,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *SendPaymentMessage) Reset() { + *x = SendPaymentMessage{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[76] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *SendPaymentMessage) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ReactionMessage) ProtoMessage() {} +func (*SendPaymentMessage) ProtoMessage() {} -func (x *ReactionMessage) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[56] - if protoimpl.UnsafeEnabled && x != nil { +func (x *SendPaymentMessage) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[76] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -9771,65 +12640,64 @@ func (x *ReactionMessage) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ReactionMessage.ProtoReflect.Descriptor instead. -func (*ReactionMessage) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{56} +// Deprecated: Use SendPaymentMessage.ProtoReflect.Descriptor instead. +func (*SendPaymentMessage) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{76} } -func (x *ReactionMessage) GetKey() *waCommon.MessageKey { +func (x *SendPaymentMessage) GetNoteMessage() *Message { if x != nil { - return x.Key + return x.NoteMessage } return nil } -func (x *ReactionMessage) GetText() string { - if x != nil && x.Text != nil { - return *x.Text +func (x *SendPaymentMessage) GetRequestMessageKey() *waCommon.MessageKey { + if x != nil { + return x.RequestMessageKey } - return "" + return nil } -func (x *ReactionMessage) GetGroupingKey() string { - if x != nil && x.GroupingKey != nil { - return *x.GroupingKey +func (x *SendPaymentMessage) GetBackground() *PaymentBackground { + if x != nil { + return x.Background } - return "" + return nil } -func (x *ReactionMessage) GetSenderTimestampMS() int64 { - if x != nil && x.SenderTimestampMS != nil { - return *x.SenderTimestampMS +func (x *SendPaymentMessage) GetTransactionData() string { + if x != nil && x.TransactionData != nil { + return *x.TransactionData } - return 0 + return "" } -type FutureProofMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache +type ContactsArrayMessage struct { + state protoimpl.MessageState `protogen:"open.v1"` + DisplayName *string `protobuf:"bytes,1,opt,name=displayName" json:"displayName,omitempty"` + Contacts []*ContactMessage `protobuf:"bytes,2,rep,name=contacts" json:"contacts,omitempty"` + ContextInfo *ContextInfo `protobuf:"bytes,17,opt,name=contextInfo" json:"contextInfo,omitempty"` unknownFields protoimpl.UnknownFields - - Message *Message `protobuf:"bytes,1,opt,name=message" json:"message,omitempty"` + sizeCache protoimpl.SizeCache } -func (x *FutureProofMessage) Reset() { - *x = FutureProofMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[57] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *ContactsArrayMessage) Reset() { + *x = ContactsArrayMessage{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[77] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *FutureProofMessage) String() string { +func (x *ContactsArrayMessage) String() string { return protoimpl.X.MessageStringOf(x) } -func (*FutureProofMessage) ProtoMessage() {} +func (*ContactsArrayMessage) ProtoMessage() {} -func (x *FutureProofMessage) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[57] - if protoimpl.UnsafeEnabled && x != nil { +func (x *ContactsArrayMessage) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[77] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -9839,46 +12707,55 @@ func (x *FutureProofMessage) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use FutureProofMessage.ProtoReflect.Descriptor instead. -func (*FutureProofMessage) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{57} +// Deprecated: Use ContactsArrayMessage.ProtoReflect.Descriptor instead. +func (*ContactsArrayMessage) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{77} } -func (x *FutureProofMessage) GetMessage() *Message { +func (x *ContactsArrayMessage) GetDisplayName() string { + if x != nil && x.DisplayName != nil { + return *x.DisplayName + } + return "" +} + +func (x *ContactsArrayMessage) GetContacts() []*ContactMessage { if x != nil { - return x.Message + return x.Contacts } return nil } -type DeviceSentMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +func (x *ContactsArrayMessage) GetContextInfo() *ContextInfo { + if x != nil { + return x.ContextInfo + } + return nil +} - DestinationJID *string `protobuf:"bytes,1,opt,name=destinationJID" json:"destinationJID,omitempty"` - Message *Message `protobuf:"bytes,2,opt,name=message" json:"message,omitempty"` - Phash *string `protobuf:"bytes,3,opt,name=phash" json:"phash,omitempty"` +type InitialSecurityNotificationSettingSync struct { + state protoimpl.MessageState `protogen:"open.v1"` + SecurityNotificationEnabled *bool `protobuf:"varint,1,opt,name=securityNotificationEnabled" json:"securityNotificationEnabled,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *DeviceSentMessage) Reset() { - *x = DeviceSentMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[58] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *InitialSecurityNotificationSettingSync) Reset() { + *x = InitialSecurityNotificationSettingSync{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[78] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *DeviceSentMessage) String() string { +func (x *InitialSecurityNotificationSettingSync) String() string { return protoimpl.X.MessageStringOf(x) } -func (*DeviceSentMessage) ProtoMessage() {} +func (*InitialSecurityNotificationSettingSync) ProtoMessage() {} -func (x *DeviceSentMessage) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[58] - if protoimpl.UnsafeEnabled && x != nil { +func (x *InitialSecurityNotificationSettingSync) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[78] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -9888,58 +12765,42 @@ func (x *DeviceSentMessage) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use DeviceSentMessage.ProtoReflect.Descriptor instead. -func (*DeviceSentMessage) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{58} -} - -func (x *DeviceSentMessage) GetDestinationJID() string { - if x != nil && x.DestinationJID != nil { - return *x.DestinationJID - } - return "" -} - -func (x *DeviceSentMessage) GetMessage() *Message { - if x != nil { - return x.Message - } - return nil +// Deprecated: Use InitialSecurityNotificationSettingSync.ProtoReflect.Descriptor instead. +func (*InitialSecurityNotificationSettingSync) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{78} } -func (x *DeviceSentMessage) GetPhash() string { - if x != nil && x.Phash != nil { - return *x.Phash +func (x *InitialSecurityNotificationSettingSync) GetSecurityNotificationEnabled() bool { + if x != nil && x.SecurityNotificationEnabled != nil { + return *x.SecurityNotificationEnabled } - return "" + return false } -type RequestPhoneNumberMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - ContextInfo *ContextInfo `protobuf:"bytes,1,opt,name=contextInfo" json:"contextInfo,omitempty"` +type FullHistorySyncOnDemandConfig struct { + state protoimpl.MessageState `protogen:"open.v1"` + HistoryFromTimestamp *uint64 `protobuf:"varint,1,opt,name=historyFromTimestamp" json:"historyFromTimestamp,omitempty"` + HistoryDurationDays *uint32 `protobuf:"varint,2,opt,name=historyDurationDays" json:"historyDurationDays,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *RequestPhoneNumberMessage) Reset() { - *x = RequestPhoneNumberMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[59] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *FullHistorySyncOnDemandConfig) Reset() { + *x = FullHistorySyncOnDemandConfig{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[79] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *RequestPhoneNumberMessage) String() string { +func (x *FullHistorySyncOnDemandConfig) String() string { return protoimpl.X.MessageStringOf(x) } -func (*RequestPhoneNumberMessage) ProtoMessage() {} +func (*FullHistorySyncOnDemandConfig) ProtoMessage() {} -func (x *RequestPhoneNumberMessage) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[59] - if protoimpl.UnsafeEnabled && x != nil { +func (x *FullHistorySyncOnDemandConfig) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[79] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -9949,49 +12810,50 @@ func (x *RequestPhoneNumberMessage) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use RequestPhoneNumberMessage.ProtoReflect.Descriptor instead. -func (*RequestPhoneNumberMessage) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{59} +// Deprecated: Use FullHistorySyncOnDemandConfig.ProtoReflect.Descriptor instead. +func (*FullHistorySyncOnDemandConfig) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{79} } -func (x *RequestPhoneNumberMessage) GetContextInfo() *ContextInfo { - if x != nil { - return x.ContextInfo +func (x *FullHistorySyncOnDemandConfig) GetHistoryFromTimestamp() uint64 { + if x != nil && x.HistoryFromTimestamp != nil { + return *x.HistoryFromTimestamp } - return nil + return 0 } -type NewsletterAdminInviteMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +func (x *FullHistorySyncOnDemandConfig) GetHistoryDurationDays() uint32 { + if x != nil && x.HistoryDurationDays != nil { + return *x.HistoryDurationDays + } + return 0 +} - NewsletterJID *string `protobuf:"bytes,1,opt,name=newsletterJID" json:"newsletterJID,omitempty"` - NewsletterName *string `protobuf:"bytes,2,opt,name=newsletterName" json:"newsletterName,omitempty"` - JPEGThumbnail []byte `protobuf:"bytes,3,opt,name=JPEGThumbnail" json:"JPEGThumbnail,omitempty"` - Caption *string `protobuf:"bytes,4,opt,name=caption" json:"caption,omitempty"` - InviteExpiration *int64 `protobuf:"varint,5,opt,name=inviteExpiration" json:"inviteExpiration,omitempty"` - ContextInfo *ContextInfo `protobuf:"bytes,6,opt,name=contextInfo" json:"contextInfo,omitempty"` +type FullHistorySyncOnDemandRequestMetadata struct { + state protoimpl.MessageState `protogen:"open.v1"` + RequestID *string `protobuf:"bytes,1,opt,name=requestID" json:"requestID,omitempty"` + BusinessProduct *string `protobuf:"bytes,2,opt,name=businessProduct" json:"businessProduct,omitempty"` + OpaqueClientData []byte `protobuf:"bytes,3,opt,name=opaqueClientData" json:"opaqueClientData,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *NewsletterAdminInviteMessage) Reset() { - *x = NewsletterAdminInviteMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[60] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *FullHistorySyncOnDemandRequestMetadata) Reset() { + *x = FullHistorySyncOnDemandRequestMetadata{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[80] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *NewsletterAdminInviteMessage) String() string { +func (x *FullHistorySyncOnDemandRequestMetadata) String() string { return protoimpl.X.MessageStringOf(x) } -func (*NewsletterAdminInviteMessage) ProtoMessage() {} +func (*FullHistorySyncOnDemandRequestMetadata) ProtoMessage() {} -func (x *NewsletterAdminInviteMessage) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[60] - if protoimpl.UnsafeEnabled && x != nil { +func (x *FullHistorySyncOnDemandRequestMetadata) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[80] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -10001,84 +12863,107 @@ func (x *NewsletterAdminInviteMessage) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use NewsletterAdminInviteMessage.ProtoReflect.Descriptor instead. -func (*NewsletterAdminInviteMessage) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{60} +// Deprecated: Use FullHistorySyncOnDemandRequestMetadata.ProtoReflect.Descriptor instead. +func (*FullHistorySyncOnDemandRequestMetadata) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{80} } -func (x *NewsletterAdminInviteMessage) GetNewsletterJID() string { - if x != nil && x.NewsletterJID != nil { - return *x.NewsletterJID +func (x *FullHistorySyncOnDemandRequestMetadata) GetRequestID() string { + if x != nil && x.RequestID != nil { + return *x.RequestID } return "" } -func (x *NewsletterAdminInviteMessage) GetNewsletterName() string { - if x != nil && x.NewsletterName != nil { - return *x.NewsletterName +func (x *FullHistorySyncOnDemandRequestMetadata) GetBusinessProduct() string { + if x != nil && x.BusinessProduct != nil { + return *x.BusinessProduct } return "" } -func (x *NewsletterAdminInviteMessage) GetJPEGThumbnail() []byte { +func (x *FullHistorySyncOnDemandRequestMetadata) GetOpaqueClientData() []byte { if x != nil { - return x.JPEGThumbnail + return x.OpaqueClientData } return nil } -func (x *NewsletterAdminInviteMessage) GetCaption() string { - if x != nil && x.Caption != nil { - return *x.Caption - } - return "" +type AppStateFatalExceptionNotification struct { + state protoimpl.MessageState `protogen:"open.v1"` + CollectionNames []string `protobuf:"bytes,1,rep,name=collectionNames" json:"collectionNames,omitempty"` + Timestamp *int64 `protobuf:"varint,2,opt,name=timestamp" json:"timestamp,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *NewsletterAdminInviteMessage) GetInviteExpiration() int64 { - if x != nil && x.InviteExpiration != nil { - return *x.InviteExpiration +func (x *AppStateFatalExceptionNotification) Reset() { + *x = AppStateFatalExceptionNotification{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[81] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *AppStateFatalExceptionNotification) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AppStateFatalExceptionNotification) ProtoMessage() {} + +func (x *AppStateFatalExceptionNotification) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[81] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return 0 + return mi.MessageOf(x) } -func (x *NewsletterAdminInviteMessage) GetContextInfo() *ContextInfo { +// Deprecated: Use AppStateFatalExceptionNotification.ProtoReflect.Descriptor instead. +func (*AppStateFatalExceptionNotification) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{81} +} + +func (x *AppStateFatalExceptionNotification) GetCollectionNames() []string { if x != nil { - return x.ContextInfo + return x.CollectionNames } return nil } -type ProductMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +func (x *AppStateFatalExceptionNotification) GetTimestamp() int64 { + if x != nil && x.Timestamp != nil { + return *x.Timestamp + } + return 0 +} - Product *ProductMessage_ProductSnapshot `protobuf:"bytes,1,opt,name=product" json:"product,omitempty"` - BusinessOwnerJID *string `protobuf:"bytes,2,opt,name=businessOwnerJID" json:"businessOwnerJID,omitempty"` - Catalog *ProductMessage_CatalogSnapshot `protobuf:"bytes,4,opt,name=catalog" json:"catalog,omitempty"` - Body *string `protobuf:"bytes,5,opt,name=body" json:"body,omitempty"` - Footer *string `protobuf:"bytes,6,opt,name=footer" json:"footer,omitempty"` - ContextInfo *ContextInfo `protobuf:"bytes,17,opt,name=contextInfo" json:"contextInfo,omitempty"` +type AppStateSyncKeyRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + KeyIDs []*AppStateSyncKeyId `protobuf:"bytes,1,rep,name=keyIDs" json:"keyIDs,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *ProductMessage) Reset() { - *x = ProductMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[61] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *AppStateSyncKeyRequest) Reset() { + *x = AppStateSyncKeyRequest{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[82] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *ProductMessage) String() string { +func (x *AppStateSyncKeyRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ProductMessage) ProtoMessage() {} +func (*AppStateSyncKeyRequest) ProtoMessage() {} -func (x *ProductMessage) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[61] - if protoimpl.UnsafeEnabled && x != nil { +func (x *AppStateSyncKeyRequest) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[82] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -10088,83 +12973,87 @@ func (x *ProductMessage) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ProductMessage.ProtoReflect.Descriptor instead. -func (*ProductMessage) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{61} +// Deprecated: Use AppStateSyncKeyRequest.ProtoReflect.Descriptor instead. +func (*AppStateSyncKeyRequest) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{82} } -func (x *ProductMessage) GetProduct() *ProductMessage_ProductSnapshot { +func (x *AppStateSyncKeyRequest) GetKeyIDs() []*AppStateSyncKeyId { if x != nil { - return x.Product + return x.KeyIDs } return nil } -func (x *ProductMessage) GetBusinessOwnerJID() string { - if x != nil && x.BusinessOwnerJID != nil { - return *x.BusinessOwnerJID - } - return "" +type AppStateSyncKeyShare struct { + state protoimpl.MessageState `protogen:"open.v1"` + Keys []*AppStateSyncKey `protobuf:"bytes,1,rep,name=keys" json:"keys,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *ProductMessage) GetCatalog() *ProductMessage_CatalogSnapshot { - if x != nil { - return x.Catalog - } - return nil +func (x *AppStateSyncKeyShare) Reset() { + *x = AppStateSyncKeyShare{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[83] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *ProductMessage) GetBody() string { - if x != nil && x.Body != nil { - return *x.Body - } - return "" +func (x *AppStateSyncKeyShare) String() string { + return protoimpl.X.MessageStringOf(x) } -func (x *ProductMessage) GetFooter() string { - if x != nil && x.Footer != nil { - return *x.Footer +func (*AppStateSyncKeyShare) ProtoMessage() {} + +func (x *AppStateSyncKeyShare) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[83] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return "" + return mi.MessageOf(x) } -func (x *ProductMessage) GetContextInfo() *ContextInfo { +// Deprecated: Use AppStateSyncKeyShare.ProtoReflect.Descriptor instead. +func (*AppStateSyncKeyShare) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{83} +} + +func (x *AppStateSyncKeyShare) GetKeys() []*AppStateSyncKey { if x != nil { - return x.ContextInfo + return x.Keys } return nil } -type TemplateButtonReplyMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache +type AppStateSyncKeyData struct { + state protoimpl.MessageState `protogen:"open.v1"` + KeyData []byte `protobuf:"bytes,1,opt,name=keyData" json:"keyData,omitempty"` + Fingerprint *AppStateSyncKeyFingerprint `protobuf:"bytes,2,opt,name=fingerprint" json:"fingerprint,omitempty"` + Timestamp *int64 `protobuf:"varint,3,opt,name=timestamp" json:"timestamp,omitempty"` unknownFields protoimpl.UnknownFields - - SelectedID *string `protobuf:"bytes,1,opt,name=selectedID" json:"selectedID,omitempty"` - SelectedDisplayText *string `protobuf:"bytes,2,opt,name=selectedDisplayText" json:"selectedDisplayText,omitempty"` - ContextInfo *ContextInfo `protobuf:"bytes,3,opt,name=contextInfo" json:"contextInfo,omitempty"` - SelectedIndex *uint32 `protobuf:"varint,4,opt,name=selectedIndex" json:"selectedIndex,omitempty"` - SelectedCarouselCardIndex *uint32 `protobuf:"varint,5,opt,name=selectedCarouselCardIndex" json:"selectedCarouselCardIndex,omitempty"` + sizeCache protoimpl.SizeCache } -func (x *TemplateButtonReplyMessage) Reset() { - *x = TemplateButtonReplyMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[62] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *AppStateSyncKeyData) Reset() { + *x = AppStateSyncKeyData{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[84] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *TemplateButtonReplyMessage) String() string { +func (x *AppStateSyncKeyData) String() string { return protoimpl.X.MessageStringOf(x) } -func (*TemplateButtonReplyMessage) ProtoMessage() {} +func (*AppStateSyncKeyData) ProtoMessage() {} -func (x *TemplateButtonReplyMessage) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[62] - if protoimpl.UnsafeEnabled && x != nil { +func (x *AppStateSyncKeyData) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[84] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -10174,80 +13063,57 @@ func (x *TemplateButtonReplyMessage) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use TemplateButtonReplyMessage.ProtoReflect.Descriptor instead. -func (*TemplateButtonReplyMessage) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{62} -} - -func (x *TemplateButtonReplyMessage) GetSelectedID() string { - if x != nil && x.SelectedID != nil { - return *x.SelectedID - } - return "" -} - -func (x *TemplateButtonReplyMessage) GetSelectedDisplayText() string { - if x != nil && x.SelectedDisplayText != nil { - return *x.SelectedDisplayText - } - return "" +// Deprecated: Use AppStateSyncKeyData.ProtoReflect.Descriptor instead. +func (*AppStateSyncKeyData) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{84} } -func (x *TemplateButtonReplyMessage) GetContextInfo() *ContextInfo { +func (x *AppStateSyncKeyData) GetKeyData() []byte { if x != nil { - return x.ContextInfo + return x.KeyData } return nil } -func (x *TemplateButtonReplyMessage) GetSelectedIndex() uint32 { - if x != nil && x.SelectedIndex != nil { - return *x.SelectedIndex +func (x *AppStateSyncKeyData) GetFingerprint() *AppStateSyncKeyFingerprint { + if x != nil { + return x.Fingerprint } - return 0 + return nil } -func (x *TemplateButtonReplyMessage) GetSelectedCarouselCardIndex() uint32 { - if x != nil && x.SelectedCarouselCardIndex != nil { - return *x.SelectedCarouselCardIndex +func (x *AppStateSyncKeyData) GetTimestamp() int64 { + if x != nil && x.Timestamp != nil { + return *x.Timestamp } return 0 } -type TemplateMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache +type AppStateSyncKeyFingerprint struct { + state protoimpl.MessageState `protogen:"open.v1"` + RawID *uint32 `protobuf:"varint,1,opt,name=rawID" json:"rawID,omitempty"` + CurrentIndex *uint32 `protobuf:"varint,2,opt,name=currentIndex" json:"currentIndex,omitempty"` + DeviceIndexes []uint32 `protobuf:"varint,3,rep,packed,name=deviceIndexes" json:"deviceIndexes,omitempty"` unknownFields protoimpl.UnknownFields - - // Types that are assignable to Format: - // - // *TemplateMessage_FourRowTemplate_ - // *TemplateMessage_HydratedFourRowTemplate_ - // *TemplateMessage_InteractiveMessageTemplate - Format isTemplateMessage_Format `protobuf_oneof:"format"` - ContextInfo *ContextInfo `protobuf:"bytes,3,opt,name=contextInfo" json:"contextInfo,omitempty"` - HydratedTemplate *TemplateMessage_HydratedFourRowTemplate `protobuf:"bytes,4,opt,name=hydratedTemplate" json:"hydratedTemplate,omitempty"` - TemplateID *string `protobuf:"bytes,9,opt,name=templateID" json:"templateID,omitempty"` + sizeCache protoimpl.SizeCache } -func (x *TemplateMessage) Reset() { - *x = TemplateMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[63] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *AppStateSyncKeyFingerprint) Reset() { + *x = AppStateSyncKeyFingerprint{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[85] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *TemplateMessage) String() string { +func (x *AppStateSyncKeyFingerprint) String() string { return protoimpl.X.MessageStringOf(x) } -func (*TemplateMessage) ProtoMessage() {} +func (*AppStateSyncKeyFingerprint) ProtoMessage() {} -func (x *TemplateMessage) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[63] - if protoimpl.UnsafeEnabled && x != nil { +func (x *AppStateSyncKeyFingerprint) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[85] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -10257,127 +13123,165 @@ func (x *TemplateMessage) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use TemplateMessage.ProtoReflect.Descriptor instead. -func (*TemplateMessage) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{63} +// Deprecated: Use AppStateSyncKeyFingerprint.ProtoReflect.Descriptor instead. +func (*AppStateSyncKeyFingerprint) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{85} } -func (m *TemplateMessage) GetFormat() isTemplateMessage_Format { - if m != nil { - return m.Format +func (x *AppStateSyncKeyFingerprint) GetRawID() uint32 { + if x != nil && x.RawID != nil { + return *x.RawID } - return nil + return 0 } -func (x *TemplateMessage) GetFourRowTemplate() *TemplateMessage_FourRowTemplate { - if x, ok := x.GetFormat().(*TemplateMessage_FourRowTemplate_); ok { - return x.FourRowTemplate +func (x *AppStateSyncKeyFingerprint) GetCurrentIndex() uint32 { + if x != nil && x.CurrentIndex != nil { + return *x.CurrentIndex } - return nil + return 0 } -func (x *TemplateMessage) GetHydratedFourRowTemplate() *TemplateMessage_HydratedFourRowTemplate { - if x, ok := x.GetFormat().(*TemplateMessage_HydratedFourRowTemplate_); ok { - return x.HydratedFourRowTemplate +func (x *AppStateSyncKeyFingerprint) GetDeviceIndexes() []uint32 { + if x != nil { + return x.DeviceIndexes } return nil } -func (x *TemplateMessage) GetInteractiveMessageTemplate() *InteractiveMessage { - if x, ok := x.GetFormat().(*TemplateMessage_InteractiveMessageTemplate); ok { - return x.InteractiveMessageTemplate - } - return nil +type AppStateSyncKeyId struct { + state protoimpl.MessageState `protogen:"open.v1"` + KeyID []byte `protobuf:"bytes,1,opt,name=keyID" json:"keyID,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *TemplateMessage) GetContextInfo() *ContextInfo { - if x != nil { - return x.ContextInfo - } - return nil +func (x *AppStateSyncKeyId) Reset() { + *x = AppStateSyncKeyId{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[86] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *TemplateMessage) GetHydratedTemplate() *TemplateMessage_HydratedFourRowTemplate { - if x != nil { - return x.HydratedTemplate - } - return nil +func (x *AppStateSyncKeyId) String() string { + return protoimpl.X.MessageStringOf(x) } -func (x *TemplateMessage) GetTemplateID() string { - if x != nil && x.TemplateID != nil { - return *x.TemplateID +func (*AppStateSyncKeyId) ProtoMessage() {} + +func (x *AppStateSyncKeyId) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[86] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return "" + return mi.MessageOf(x) } -type isTemplateMessage_Format interface { - isTemplateMessage_Format() +// Deprecated: Use AppStateSyncKeyId.ProtoReflect.Descriptor instead. +func (*AppStateSyncKeyId) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{86} } -type TemplateMessage_FourRowTemplate_ struct { - FourRowTemplate *TemplateMessage_FourRowTemplate `protobuf:"bytes,1,opt,name=fourRowTemplate,oneof"` +func (x *AppStateSyncKeyId) GetKeyID() []byte { + if x != nil { + return x.KeyID + } + return nil } -type TemplateMessage_HydratedFourRowTemplate_ struct { - HydratedFourRowTemplate *TemplateMessage_HydratedFourRowTemplate `protobuf:"bytes,2,opt,name=hydratedFourRowTemplate,oneof"` +type AppStateSyncKey struct { + state protoimpl.MessageState `protogen:"open.v1"` + KeyID *AppStateSyncKeyId `protobuf:"bytes,1,opt,name=keyID" json:"keyID,omitempty"` + KeyData *AppStateSyncKeyData `protobuf:"bytes,2,opt,name=keyData" json:"keyData,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -type TemplateMessage_InteractiveMessageTemplate struct { - InteractiveMessageTemplate *InteractiveMessage `protobuf:"bytes,5,opt,name=interactiveMessageTemplate,oneof"` +func (x *AppStateSyncKey) Reset() { + *x = AppStateSyncKey{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[87] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (*TemplateMessage_FourRowTemplate_) isTemplateMessage_Format() {} +func (x *AppStateSyncKey) String() string { + return protoimpl.X.MessageStringOf(x) +} -func (*TemplateMessage_HydratedFourRowTemplate_) isTemplateMessage_Format() {} +func (*AppStateSyncKey) ProtoMessage() {} -func (*TemplateMessage_InteractiveMessageTemplate) isTemplateMessage_Format() {} +func (x *AppStateSyncKey) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[87] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} -type StickerMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +// Deprecated: Use AppStateSyncKey.ProtoReflect.Descriptor instead. +func (*AppStateSyncKey) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{87} +} - URL *string `protobuf:"bytes,1,opt,name=URL" json:"URL,omitempty"` - FileSHA256 []byte `protobuf:"bytes,2,opt,name=fileSHA256" json:"fileSHA256,omitempty"` - FileEncSHA256 []byte `protobuf:"bytes,3,opt,name=fileEncSHA256" json:"fileEncSHA256,omitempty"` - MediaKey []byte `protobuf:"bytes,4,opt,name=mediaKey" json:"mediaKey,omitempty"` - Mimetype *string `protobuf:"bytes,5,opt,name=mimetype" json:"mimetype,omitempty"` - Height *uint32 `protobuf:"varint,6,opt,name=height" json:"height,omitempty"` - Width *uint32 `protobuf:"varint,7,opt,name=width" json:"width,omitempty"` - DirectPath *string `protobuf:"bytes,8,opt,name=directPath" json:"directPath,omitempty"` - FileLength *uint64 `protobuf:"varint,9,opt,name=fileLength" json:"fileLength,omitempty"` - MediaKeyTimestamp *int64 `protobuf:"varint,10,opt,name=mediaKeyTimestamp" json:"mediaKeyTimestamp,omitempty"` - FirstFrameLength *uint32 `protobuf:"varint,11,opt,name=firstFrameLength" json:"firstFrameLength,omitempty"` - FirstFrameSidecar []byte `protobuf:"bytes,12,opt,name=firstFrameSidecar" json:"firstFrameSidecar,omitempty"` - IsAnimated *bool `protobuf:"varint,13,opt,name=isAnimated" json:"isAnimated,omitempty"` - PngThumbnail []byte `protobuf:"bytes,16,opt,name=pngThumbnail" json:"pngThumbnail,omitempty"` - ContextInfo *ContextInfo `protobuf:"bytes,17,opt,name=contextInfo" json:"contextInfo,omitempty"` - StickerSentTS *int64 `protobuf:"varint,18,opt,name=stickerSentTS" json:"stickerSentTS,omitempty"` - IsAvatar *bool `protobuf:"varint,19,opt,name=isAvatar" json:"isAvatar,omitempty"` - IsAiSticker *bool `protobuf:"varint,20,opt,name=isAiSticker" json:"isAiSticker,omitempty"` - IsLottie *bool `protobuf:"varint,21,opt,name=isLottie" json:"isLottie,omitempty"` - AccessibilityLabel *string `protobuf:"bytes,22,opt,name=accessibilityLabel" json:"accessibilityLabel,omitempty"` +func (x *AppStateSyncKey) GetKeyID() *AppStateSyncKeyId { + if x != nil { + return x.KeyID + } + return nil } -func (x *StickerMessage) Reset() { - *x = StickerMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[64] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) +func (x *AppStateSyncKey) GetKeyData() *AppStateSyncKeyData { + if x != nil { + return x.KeyData } + return nil } -func (x *StickerMessage) String() string { +type HistorySyncNotification struct { + state protoimpl.MessageState `protogen:"open.v1"` + FileSHA256 []byte `protobuf:"bytes,1,opt,name=fileSHA256" json:"fileSHA256,omitempty"` + FileLength *uint64 `protobuf:"varint,2,opt,name=fileLength" json:"fileLength,omitempty"` + MediaKey []byte `protobuf:"bytes,3,opt,name=mediaKey" json:"mediaKey,omitempty"` + FileEncSHA256 []byte `protobuf:"bytes,4,opt,name=fileEncSHA256" json:"fileEncSHA256,omitempty"` + DirectPath *string `protobuf:"bytes,5,opt,name=directPath" json:"directPath,omitempty"` + SyncType *HistorySyncType `protobuf:"varint,6,opt,name=syncType,enum=WAWebProtobufsE2E.HistorySyncType" json:"syncType,omitempty"` + ChunkOrder *uint32 `protobuf:"varint,7,opt,name=chunkOrder" json:"chunkOrder,omitempty"` + OriginalMessageID *string `protobuf:"bytes,8,opt,name=originalMessageID" json:"originalMessageID,omitempty"` + Progress *uint32 `protobuf:"varint,9,opt,name=progress" json:"progress,omitempty"` + OldestMsgInChunkTimestampSec *int64 `protobuf:"varint,10,opt,name=oldestMsgInChunkTimestampSec" json:"oldestMsgInChunkTimestampSec,omitempty"` + InitialHistBootstrapInlinePayload []byte `protobuf:"bytes,11,opt,name=initialHistBootstrapInlinePayload" json:"initialHistBootstrapInlinePayload,omitempty"` + PeerDataRequestSessionID *string `protobuf:"bytes,12,opt,name=peerDataRequestSessionID" json:"peerDataRequestSessionID,omitempty"` + FullHistorySyncOnDemandRequestMetadata *FullHistorySyncOnDemandRequestMetadata `protobuf:"bytes,13,opt,name=fullHistorySyncOnDemandRequestMetadata" json:"fullHistorySyncOnDemandRequestMetadata,omitempty"` + EncHandle *string `protobuf:"bytes,14,opt,name=encHandle" json:"encHandle,omitempty"` + MessageAccessStatus *HistorySyncMessageAccessStatus `protobuf:"bytes,15,opt,name=messageAccessStatus" json:"messageAccessStatus,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *HistorySyncNotification) Reset() { + *x = HistorySyncNotification{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[88] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *HistorySyncNotification) String() string { return protoimpl.X.MessageStringOf(x) } -func (*StickerMessage) ProtoMessage() {} +func (*HistorySyncNotification) ProtoMessage() {} -func (x *StickerMessage) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[64] - if protoimpl.UnsafeEnabled && x != nil { +func (x *HistorySyncNotification) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[88] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -10387,186 +13291,245 @@ func (x *StickerMessage) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use StickerMessage.ProtoReflect.Descriptor instead. -func (*StickerMessage) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{64} -} - -func (x *StickerMessage) GetURL() string { - if x != nil && x.URL != nil { - return *x.URL - } - return "" +// Deprecated: Use HistorySyncNotification.ProtoReflect.Descriptor instead. +func (*HistorySyncNotification) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{88} } -func (x *StickerMessage) GetFileSHA256() []byte { +func (x *HistorySyncNotification) GetFileSHA256() []byte { if x != nil { return x.FileSHA256 } return nil } -func (x *StickerMessage) GetFileEncSHA256() []byte { +func (x *HistorySyncNotification) GetFileLength() uint64 { + if x != nil && x.FileLength != nil { + return *x.FileLength + } + return 0 +} + +func (x *HistorySyncNotification) GetMediaKey() []byte { if x != nil { - return x.FileEncSHA256 + return x.MediaKey } return nil } -func (x *StickerMessage) GetMediaKey() []byte { +func (x *HistorySyncNotification) GetFileEncSHA256() []byte { if x != nil { - return x.MediaKey + return x.FileEncSHA256 } return nil } -func (x *StickerMessage) GetMimetype() string { - if x != nil && x.Mimetype != nil { - return *x.Mimetype +func (x *HistorySyncNotification) GetDirectPath() string { + if x != nil && x.DirectPath != nil { + return *x.DirectPath } return "" } -func (x *StickerMessage) GetHeight() uint32 { - if x != nil && x.Height != nil { - return *x.Height +func (x *HistorySyncNotification) GetSyncType() HistorySyncType { + if x != nil && x.SyncType != nil { + return *x.SyncType } - return 0 + return HistorySyncType_INITIAL_BOOTSTRAP } -func (x *StickerMessage) GetWidth() uint32 { - if x != nil && x.Width != nil { - return *x.Width +func (x *HistorySyncNotification) GetChunkOrder() uint32 { + if x != nil && x.ChunkOrder != nil { + return *x.ChunkOrder } return 0 } -func (x *StickerMessage) GetDirectPath() string { - if x != nil && x.DirectPath != nil { - return *x.DirectPath +func (x *HistorySyncNotification) GetOriginalMessageID() string { + if x != nil && x.OriginalMessageID != nil { + return *x.OriginalMessageID } return "" } -func (x *StickerMessage) GetFileLength() uint64 { - if x != nil && x.FileLength != nil { - return *x.FileLength +func (x *HistorySyncNotification) GetProgress() uint32 { + if x != nil && x.Progress != nil { + return *x.Progress } return 0 } -func (x *StickerMessage) GetMediaKeyTimestamp() int64 { - if x != nil && x.MediaKeyTimestamp != nil { - return *x.MediaKeyTimestamp +func (x *HistorySyncNotification) GetOldestMsgInChunkTimestampSec() int64 { + if x != nil && x.OldestMsgInChunkTimestampSec != nil { + return *x.OldestMsgInChunkTimestampSec } return 0 } -func (x *StickerMessage) GetFirstFrameLength() uint32 { - if x != nil && x.FirstFrameLength != nil { - return *x.FirstFrameLength +func (x *HistorySyncNotification) GetInitialHistBootstrapInlinePayload() []byte { + if x != nil { + return x.InitialHistBootstrapInlinePayload } - return 0 + return nil } -func (x *StickerMessage) GetFirstFrameSidecar() []byte { +func (x *HistorySyncNotification) GetPeerDataRequestSessionID() string { + if x != nil && x.PeerDataRequestSessionID != nil { + return *x.PeerDataRequestSessionID + } + return "" +} + +func (x *HistorySyncNotification) GetFullHistorySyncOnDemandRequestMetadata() *FullHistorySyncOnDemandRequestMetadata { if x != nil { - return x.FirstFrameSidecar + return x.FullHistorySyncOnDemandRequestMetadata } return nil } -func (x *StickerMessage) GetIsAnimated() bool { - if x != nil && x.IsAnimated != nil { - return *x.IsAnimated +func (x *HistorySyncNotification) GetEncHandle() string { + if x != nil && x.EncHandle != nil { + return *x.EncHandle } - return false + return "" } -func (x *StickerMessage) GetPngThumbnail() []byte { +func (x *HistorySyncNotification) GetMessageAccessStatus() *HistorySyncMessageAccessStatus { if x != nil { - return x.PngThumbnail + return x.MessageAccessStatus } return nil } -func (x *StickerMessage) GetContextInfo() *ContextInfo { +type HistorySyncMessageAccessStatus struct { + state protoimpl.MessageState `protogen:"open.v1"` + CompleteAccessGranted *bool `protobuf:"varint,1,opt,name=completeAccessGranted" json:"completeAccessGranted,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *HistorySyncMessageAccessStatus) Reset() { + *x = HistorySyncMessageAccessStatus{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[89] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *HistorySyncMessageAccessStatus) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*HistorySyncMessageAccessStatus) ProtoMessage() {} + +func (x *HistorySyncMessageAccessStatus) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[89] if x != nil { - return x.ContextInfo + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return nil + return mi.MessageOf(x) } -func (x *StickerMessage) GetStickerSentTS() int64 { - if x != nil && x.StickerSentTS != nil { - return *x.StickerSentTS - } - return 0 +// Deprecated: Use HistorySyncMessageAccessStatus.ProtoReflect.Descriptor instead. +func (*HistorySyncMessageAccessStatus) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{89} } -func (x *StickerMessage) GetIsAvatar() bool { - if x != nil && x.IsAvatar != nil { - return *x.IsAvatar +func (x *HistorySyncMessageAccessStatus) GetCompleteAccessGranted() bool { + if x != nil && x.CompleteAccessGranted != nil { + return *x.CompleteAccessGranted } return false } -func (x *StickerMessage) GetIsAiSticker() bool { - if x != nil && x.IsAiSticker != nil { - return *x.IsAiSticker - } - return false +type Chat struct { + state protoimpl.MessageState `protogen:"open.v1"` + DisplayName *string `protobuf:"bytes,1,opt,name=displayName" json:"displayName,omitempty"` + ID *string `protobuf:"bytes,2,opt,name=ID" json:"ID,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *StickerMessage) GetIsLottie() bool { - if x != nil && x.IsLottie != nil { - return *x.IsLottie +func (x *Chat) Reset() { + *x = Chat{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[90] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *Chat) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Chat) ProtoMessage() {} + +func (x *Chat) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[90] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return false + return mi.MessageOf(x) } -func (x *StickerMessage) GetAccessibilityLabel() string { - if x != nil && x.AccessibilityLabel != nil { - return *x.AccessibilityLabel +// Deprecated: Use Chat.ProtoReflect.Descriptor instead. +func (*Chat) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{90} +} + +func (x *Chat) GetDisplayName() string { + if x != nil && x.DisplayName != nil { + return *x.DisplayName } return "" } -type LiveLocationMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +func (x *Chat) GetID() string { + if x != nil && x.ID != nil { + return *x.ID + } + return "" +} - DegreesLatitude *float64 `protobuf:"fixed64,1,opt,name=degreesLatitude" json:"degreesLatitude,omitempty"` - DegreesLongitude *float64 `protobuf:"fixed64,2,opt,name=degreesLongitude" json:"degreesLongitude,omitempty"` - AccuracyInMeters *uint32 `protobuf:"varint,3,opt,name=accuracyInMeters" json:"accuracyInMeters,omitempty"` - SpeedInMps *float32 `protobuf:"fixed32,4,opt,name=speedInMps" json:"speedInMps,omitempty"` - DegreesClockwiseFromMagneticNorth *uint32 `protobuf:"varint,5,opt,name=degreesClockwiseFromMagneticNorth" json:"degreesClockwiseFromMagneticNorth,omitempty"` - Caption *string `protobuf:"bytes,6,opt,name=caption" json:"caption,omitempty"` - SequenceNumber *int64 `protobuf:"varint,7,opt,name=sequenceNumber" json:"sequenceNumber,omitempty"` - TimeOffset *uint32 `protobuf:"varint,8,opt,name=timeOffset" json:"timeOffset,omitempty"` - JPEGThumbnail []byte `protobuf:"bytes,16,opt,name=JPEGThumbnail" json:"JPEGThumbnail,omitempty"` - ContextInfo *ContextInfo `protobuf:"bytes,17,opt,name=contextInfo" json:"contextInfo,omitempty"` +type Call struct { + state protoimpl.MessageState `protogen:"open.v1"` + CallKey []byte `protobuf:"bytes,1,opt,name=callKey" json:"callKey,omitempty"` + ConversionSource *string `protobuf:"bytes,2,opt,name=conversionSource" json:"conversionSource,omitempty"` + ConversionData []byte `protobuf:"bytes,3,opt,name=conversionData" json:"conversionData,omitempty"` + ConversionDelaySeconds *uint32 `protobuf:"varint,4,opt,name=conversionDelaySeconds" json:"conversionDelaySeconds,omitempty"` + CtwaSignals *string `protobuf:"bytes,5,opt,name=ctwaSignals" json:"ctwaSignals,omitempty"` + CtwaPayload []byte `protobuf:"bytes,6,opt,name=ctwaPayload" json:"ctwaPayload,omitempty"` + ContextInfo *ContextInfo `protobuf:"bytes,7,opt,name=contextInfo" json:"contextInfo,omitempty"` + NativeFlowCallButtonPayload *string `protobuf:"bytes,8,opt,name=nativeFlowCallButtonPayload" json:"nativeFlowCallButtonPayload,omitempty"` + DeeplinkPayload *string `protobuf:"bytes,9,opt,name=deeplinkPayload" json:"deeplinkPayload,omitempty"` + MessageContextInfo *MessageContextInfo `protobuf:"bytes,10,opt,name=messageContextInfo" json:"messageContextInfo,omitempty"` + CallEntryPoint *uint32 `protobuf:"varint,11,opt,name=callEntryPoint" json:"callEntryPoint,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *LiveLocationMessage) Reset() { - *x = LiveLocationMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[65] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *Call) Reset() { + *x = Call{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[91] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *LiveLocationMessage) String() string { +func (x *Call) String() string { return protoimpl.X.MessageStringOf(x) } -func (*LiveLocationMessage) ProtoMessage() {} +func (*Call) ProtoMessage() {} -func (x *LiveLocationMessage) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[65] - if protoimpl.UnsafeEnabled && x != nil { +func (x *Call) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[91] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -10576,107 +13539,126 @@ func (x *LiveLocationMessage) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use LiveLocationMessage.ProtoReflect.Descriptor instead. -func (*LiveLocationMessage) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{65} +// Deprecated: Use Call.ProtoReflect.Descriptor instead. +func (*Call) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{91} } -func (x *LiveLocationMessage) GetDegreesLatitude() float64 { - if x != nil && x.DegreesLatitude != nil { - return *x.DegreesLatitude +func (x *Call) GetCallKey() []byte { + if x != nil { + return x.CallKey } - return 0 + return nil } -func (x *LiveLocationMessage) GetDegreesLongitude() float64 { - if x != nil && x.DegreesLongitude != nil { - return *x.DegreesLongitude +func (x *Call) GetConversionSource() string { + if x != nil && x.ConversionSource != nil { + return *x.ConversionSource } - return 0 + return "" } -func (x *LiveLocationMessage) GetAccuracyInMeters() uint32 { - if x != nil && x.AccuracyInMeters != nil { - return *x.AccuracyInMeters +func (x *Call) GetConversionData() []byte { + if x != nil { + return x.ConversionData + } + return nil +} + +func (x *Call) GetConversionDelaySeconds() uint32 { + if x != nil && x.ConversionDelaySeconds != nil { + return *x.ConversionDelaySeconds } return 0 } -func (x *LiveLocationMessage) GetSpeedInMps() float32 { - if x != nil && x.SpeedInMps != nil { - return *x.SpeedInMps +func (x *Call) GetCtwaSignals() string { + if x != nil && x.CtwaSignals != nil { + return *x.CtwaSignals } - return 0 + return "" } -func (x *LiveLocationMessage) GetDegreesClockwiseFromMagneticNorth() uint32 { - if x != nil && x.DegreesClockwiseFromMagneticNorth != nil { - return *x.DegreesClockwiseFromMagneticNorth +func (x *Call) GetCtwaPayload() []byte { + if x != nil { + return x.CtwaPayload } - return 0 + return nil } -func (x *LiveLocationMessage) GetCaption() string { - if x != nil && x.Caption != nil { - return *x.Caption +func (x *Call) GetContextInfo() *ContextInfo { + if x != nil { + return x.ContextInfo } - return "" + return nil } -func (x *LiveLocationMessage) GetSequenceNumber() int64 { - if x != nil && x.SequenceNumber != nil { - return *x.SequenceNumber +func (x *Call) GetNativeFlowCallButtonPayload() string { + if x != nil && x.NativeFlowCallButtonPayload != nil { + return *x.NativeFlowCallButtonPayload } - return 0 + return "" } -func (x *LiveLocationMessage) GetTimeOffset() uint32 { - if x != nil && x.TimeOffset != nil { - return *x.TimeOffset +func (x *Call) GetDeeplinkPayload() string { + if x != nil && x.DeeplinkPayload != nil { + return *x.DeeplinkPayload } - return 0 + return "" } -func (x *LiveLocationMessage) GetJPEGThumbnail() []byte { +func (x *Call) GetMessageContextInfo() *MessageContextInfo { if x != nil { - return x.JPEGThumbnail + return x.MessageContextInfo } return nil } -func (x *LiveLocationMessage) GetContextInfo() *ContextInfo { - if x != nil { - return x.ContextInfo +func (x *Call) GetCallEntryPoint() uint32 { + if x != nil && x.CallEntryPoint != nil { + return *x.CallEntryPoint } - return nil + return 0 } -type CancelPaymentRequestMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Key *waCommon.MessageKey `protobuf:"bytes,1,opt,name=key" json:"key,omitempty"` +type AudioMessage struct { + state protoimpl.MessageState `protogen:"open.v1"` + URL *string `protobuf:"bytes,1,opt,name=URL" json:"URL,omitempty"` + Mimetype *string `protobuf:"bytes,2,opt,name=mimetype" json:"mimetype,omitempty"` + FileSHA256 []byte `protobuf:"bytes,3,opt,name=fileSHA256" json:"fileSHA256,omitempty"` + FileLength *uint64 `protobuf:"varint,4,opt,name=fileLength" json:"fileLength,omitempty"` + Seconds *uint32 `protobuf:"varint,5,opt,name=seconds" json:"seconds,omitempty"` + PTT *bool `protobuf:"varint,6,opt,name=PTT" json:"PTT,omitempty"` + MediaKey []byte `protobuf:"bytes,7,opt,name=mediaKey" json:"mediaKey,omitempty"` + FileEncSHA256 []byte `protobuf:"bytes,8,opt,name=fileEncSHA256" json:"fileEncSHA256,omitempty"` + DirectPath *string `protobuf:"bytes,9,opt,name=directPath" json:"directPath,omitempty"` + MediaKeyTimestamp *int64 `protobuf:"varint,10,opt,name=mediaKeyTimestamp" json:"mediaKeyTimestamp,omitempty"` + ContextInfo *ContextInfo `protobuf:"bytes,17,opt,name=contextInfo" json:"contextInfo,omitempty"` + StreamingSidecar []byte `protobuf:"bytes,18,opt,name=streamingSidecar" json:"streamingSidecar,omitempty"` + Waveform []byte `protobuf:"bytes,19,opt,name=waveform" json:"waveform,omitempty"` + BackgroundArgb *uint32 `protobuf:"fixed32,20,opt,name=backgroundArgb" json:"backgroundArgb,omitempty"` + ViewOnce *bool `protobuf:"varint,21,opt,name=viewOnce" json:"viewOnce,omitempty"` + AccessibilityLabel *string `protobuf:"bytes,22,opt,name=accessibilityLabel" json:"accessibilityLabel,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *CancelPaymentRequestMessage) Reset() { - *x = CancelPaymentRequestMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[66] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *AudioMessage) Reset() { + *x = AudioMessage{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[92] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *CancelPaymentRequestMessage) String() string { +func (x *AudioMessage) String() string { return protoimpl.X.MessageStringOf(x) } -func (*CancelPaymentRequestMessage) ProtoMessage() {} +func (*AudioMessage) ProtoMessage() {} -func (x *CancelPaymentRequestMessage) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[66] - if protoimpl.UnsafeEnabled && x != nil { +func (x *AudioMessage) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[92] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -10686,97 +13668,166 @@ func (x *CancelPaymentRequestMessage) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use CancelPaymentRequestMessage.ProtoReflect.Descriptor instead. -func (*CancelPaymentRequestMessage) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{66} +// Deprecated: Use AudioMessage.ProtoReflect.Descriptor instead. +func (*AudioMessage) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{92} } -func (x *CancelPaymentRequestMessage) GetKey() *waCommon.MessageKey { +func (x *AudioMessage) GetURL() string { + if x != nil && x.URL != nil { + return *x.URL + } + return "" +} + +func (x *AudioMessage) GetMimetype() string { + if x != nil && x.Mimetype != nil { + return *x.Mimetype + } + return "" +} + +func (x *AudioMessage) GetFileSHA256() []byte { if x != nil { - return x.Key + return x.FileSHA256 } return nil } -type DeclinePaymentRequestMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +func (x *AudioMessage) GetFileLength() uint64 { + if x != nil && x.FileLength != nil { + return *x.FileLength + } + return 0 +} - Key *waCommon.MessageKey `protobuf:"bytes,1,opt,name=key" json:"key,omitempty"` +func (x *AudioMessage) GetSeconds() uint32 { + if x != nil && x.Seconds != nil { + return *x.Seconds + } + return 0 } -func (x *DeclinePaymentRequestMessage) Reset() { - *x = DeclinePaymentRequestMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[67] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) +func (x *AudioMessage) GetPTT() bool { + if x != nil && x.PTT != nil { + return *x.PTT } + return false } -func (x *DeclinePaymentRequestMessage) String() string { - return protoimpl.X.MessageStringOf(x) +func (x *AudioMessage) GetMediaKey() []byte { + if x != nil { + return x.MediaKey + } + return nil } -func (*DeclinePaymentRequestMessage) ProtoMessage() {} +func (x *AudioMessage) GetFileEncSHA256() []byte { + if x != nil { + return x.FileEncSHA256 + } + return nil +} -func (x *DeclinePaymentRequestMessage) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[67] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms +func (x *AudioMessage) GetDirectPath() string { + if x != nil && x.DirectPath != nil { + return *x.DirectPath } - return mi.MessageOf(x) + return "" } -// Deprecated: Use DeclinePaymentRequestMessage.ProtoReflect.Descriptor instead. -func (*DeclinePaymentRequestMessage) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{67} +func (x *AudioMessage) GetMediaKeyTimestamp() int64 { + if x != nil && x.MediaKeyTimestamp != nil { + return *x.MediaKeyTimestamp + } + return 0 } -func (x *DeclinePaymentRequestMessage) GetKey() *waCommon.MessageKey { +func (x *AudioMessage) GetContextInfo() *ContextInfo { if x != nil { - return x.Key + return x.ContextInfo } return nil } -type RequestPaymentMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +func (x *AudioMessage) GetStreamingSidecar() []byte { + if x != nil { + return x.StreamingSidecar + } + return nil +} - NoteMessage *Message `protobuf:"bytes,4,opt,name=noteMessage" json:"noteMessage,omitempty"` - CurrencyCodeIso4217 *string `protobuf:"bytes,1,opt,name=currencyCodeIso4217" json:"currencyCodeIso4217,omitempty"` - Amount1000 *uint64 `protobuf:"varint,2,opt,name=amount1000" json:"amount1000,omitempty"` - RequestFrom *string `protobuf:"bytes,3,opt,name=requestFrom" json:"requestFrom,omitempty"` - ExpiryTimestamp *int64 `protobuf:"varint,5,opt,name=expiryTimestamp" json:"expiryTimestamp,omitempty"` - Amount *Money `protobuf:"bytes,6,opt,name=amount" json:"amount,omitempty"` - Background *PaymentBackground `protobuf:"bytes,7,opt,name=background" json:"background,omitempty"` +func (x *AudioMessage) GetWaveform() []byte { + if x != nil { + return x.Waveform + } + return nil } -func (x *RequestPaymentMessage) Reset() { - *x = RequestPaymentMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[68] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) +func (x *AudioMessage) GetBackgroundArgb() uint32 { + if x != nil && x.BackgroundArgb != nil { + return *x.BackgroundArgb } + return 0 } -func (x *RequestPaymentMessage) String() string { +func (x *AudioMessage) GetViewOnce() bool { + if x != nil && x.ViewOnce != nil { + return *x.ViewOnce + } + return false +} + +func (x *AudioMessage) GetAccessibilityLabel() string { + if x != nil && x.AccessibilityLabel != nil { + return *x.AccessibilityLabel + } + return "" +} + +type DocumentMessage struct { + state protoimpl.MessageState `protogen:"open.v1"` + URL *string `protobuf:"bytes,1,opt,name=URL" json:"URL,omitempty"` + Mimetype *string `protobuf:"bytes,2,opt,name=mimetype" json:"mimetype,omitempty"` + Title *string `protobuf:"bytes,3,opt,name=title" json:"title,omitempty"` + FileSHA256 []byte `protobuf:"bytes,4,opt,name=fileSHA256" json:"fileSHA256,omitempty"` + FileLength *uint64 `protobuf:"varint,5,opt,name=fileLength" json:"fileLength,omitempty"` + PageCount *uint32 `protobuf:"varint,6,opt,name=pageCount" json:"pageCount,omitempty"` + MediaKey []byte `protobuf:"bytes,7,opt,name=mediaKey" json:"mediaKey,omitempty"` + FileName *string `protobuf:"bytes,8,opt,name=fileName" json:"fileName,omitempty"` + FileEncSHA256 []byte `protobuf:"bytes,9,opt,name=fileEncSHA256" json:"fileEncSHA256,omitempty"` + DirectPath *string `protobuf:"bytes,10,opt,name=directPath" json:"directPath,omitempty"` + MediaKeyTimestamp *int64 `protobuf:"varint,11,opt,name=mediaKeyTimestamp" json:"mediaKeyTimestamp,omitempty"` + ContactVcard *bool `protobuf:"varint,12,opt,name=contactVcard" json:"contactVcard,omitempty"` + ThumbnailDirectPath *string `protobuf:"bytes,13,opt,name=thumbnailDirectPath" json:"thumbnailDirectPath,omitempty"` + ThumbnailSHA256 []byte `protobuf:"bytes,14,opt,name=thumbnailSHA256" json:"thumbnailSHA256,omitempty"` + ThumbnailEncSHA256 []byte `protobuf:"bytes,15,opt,name=thumbnailEncSHA256" json:"thumbnailEncSHA256,omitempty"` + JPEGThumbnail []byte `protobuf:"bytes,16,opt,name=JPEGThumbnail" json:"JPEGThumbnail,omitempty"` + ContextInfo *ContextInfo `protobuf:"bytes,17,opt,name=contextInfo" json:"contextInfo,omitempty"` + ThumbnailHeight *uint32 `protobuf:"varint,18,opt,name=thumbnailHeight" json:"thumbnailHeight,omitempty"` + ThumbnailWidth *uint32 `protobuf:"varint,19,opt,name=thumbnailWidth" json:"thumbnailWidth,omitempty"` + Caption *string `protobuf:"bytes,20,opt,name=caption" json:"caption,omitempty"` + AccessibilityLabel *string `protobuf:"bytes,21,opt,name=accessibilityLabel" json:"accessibilityLabel,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *DocumentMessage) Reset() { + *x = DocumentMessage{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[93] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *DocumentMessage) String() string { return protoimpl.X.MessageStringOf(x) } -func (*RequestPaymentMessage) ProtoMessage() {} +func (*DocumentMessage) ProtoMessage() {} -func (x *RequestPaymentMessage) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[68] - if protoimpl.UnsafeEnabled && x != nil { +func (x *DocumentMessage) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[93] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -10786,151 +13837,181 @@ func (x *RequestPaymentMessage) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use RequestPaymentMessage.ProtoReflect.Descriptor instead. -func (*RequestPaymentMessage) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{68} +// Deprecated: Use DocumentMessage.ProtoReflect.Descriptor instead. +func (*DocumentMessage) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{93} } -func (x *RequestPaymentMessage) GetNoteMessage() *Message { - if x != nil { - return x.NoteMessage +func (x *DocumentMessage) GetURL() string { + if x != nil && x.URL != nil { + return *x.URL } - return nil + return "" } -func (x *RequestPaymentMessage) GetCurrencyCodeIso4217() string { - if x != nil && x.CurrencyCodeIso4217 != nil { - return *x.CurrencyCodeIso4217 +func (x *DocumentMessage) GetMimetype() string { + if x != nil && x.Mimetype != nil { + return *x.Mimetype } return "" } -func (x *RequestPaymentMessage) GetAmount1000() uint64 { - if x != nil && x.Amount1000 != nil { - return *x.Amount1000 +func (x *DocumentMessage) GetTitle() string { + if x != nil && x.Title != nil { + return *x.Title } - return 0 + return "" } -func (x *RequestPaymentMessage) GetRequestFrom() string { - if x != nil && x.RequestFrom != nil { - return *x.RequestFrom +func (x *DocumentMessage) GetFileSHA256() []byte { + if x != nil { + return x.FileSHA256 } - return "" + return nil } -func (x *RequestPaymentMessage) GetExpiryTimestamp() int64 { - if x != nil && x.ExpiryTimestamp != nil { - return *x.ExpiryTimestamp +func (x *DocumentMessage) GetFileLength() uint64 { + if x != nil && x.FileLength != nil { + return *x.FileLength } return 0 } -func (x *RequestPaymentMessage) GetAmount() *Money { +func (x *DocumentMessage) GetPageCount() uint32 { + if x != nil && x.PageCount != nil { + return *x.PageCount + } + return 0 +} + +func (x *DocumentMessage) GetMediaKey() []byte { if x != nil { - return x.Amount + return x.MediaKey } return nil } -func (x *RequestPaymentMessage) GetBackground() *PaymentBackground { +func (x *DocumentMessage) GetFileName() string { + if x != nil && x.FileName != nil { + return *x.FileName + } + return "" +} + +func (x *DocumentMessage) GetFileEncSHA256() []byte { if x != nil { - return x.Background + return x.FileEncSHA256 } return nil } -type SendPaymentMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - NoteMessage *Message `protobuf:"bytes,2,opt,name=noteMessage" json:"noteMessage,omitempty"` - RequestMessageKey *waCommon.MessageKey `protobuf:"bytes,3,opt,name=requestMessageKey" json:"requestMessageKey,omitempty"` - Background *PaymentBackground `protobuf:"bytes,4,opt,name=background" json:"background,omitempty"` +func (x *DocumentMessage) GetDirectPath() string { + if x != nil && x.DirectPath != nil { + return *x.DirectPath + } + return "" } -func (x *SendPaymentMessage) Reset() { - *x = SendPaymentMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[69] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) +func (x *DocumentMessage) GetMediaKeyTimestamp() int64 { + if x != nil && x.MediaKeyTimestamp != nil { + return *x.MediaKeyTimestamp } + return 0 } -func (x *SendPaymentMessage) String() string { - return protoimpl.X.MessageStringOf(x) +func (x *DocumentMessage) GetContactVcard() bool { + if x != nil && x.ContactVcard != nil { + return *x.ContactVcard + } + return false } -func (*SendPaymentMessage) ProtoMessage() {} - -func (x *SendPaymentMessage) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[69] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms +func (x *DocumentMessage) GetThumbnailDirectPath() string { + if x != nil && x.ThumbnailDirectPath != nil { + return *x.ThumbnailDirectPath } - return mi.MessageOf(x) + return "" } -// Deprecated: Use SendPaymentMessage.ProtoReflect.Descriptor instead. -func (*SendPaymentMessage) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{69} +func (x *DocumentMessage) GetThumbnailSHA256() []byte { + if x != nil { + return x.ThumbnailSHA256 + } + return nil } -func (x *SendPaymentMessage) GetNoteMessage() *Message { +func (x *DocumentMessage) GetThumbnailEncSHA256() []byte { if x != nil { - return x.NoteMessage + return x.ThumbnailEncSHA256 } return nil } -func (x *SendPaymentMessage) GetRequestMessageKey() *waCommon.MessageKey { +func (x *DocumentMessage) GetJPEGThumbnail() []byte { if x != nil { - return x.RequestMessageKey + return x.JPEGThumbnail } return nil } -func (x *SendPaymentMessage) GetBackground() *PaymentBackground { +func (x *DocumentMessage) GetContextInfo() *ContextInfo { if x != nil { - return x.Background + return x.ContextInfo } return nil } -type ContactsArrayMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +func (x *DocumentMessage) GetThumbnailHeight() uint32 { + if x != nil && x.ThumbnailHeight != nil { + return *x.ThumbnailHeight + } + return 0 +} - DisplayName *string `protobuf:"bytes,1,opt,name=displayName" json:"displayName,omitempty"` - Contacts []*ContactMessage `protobuf:"bytes,2,rep,name=contacts" json:"contacts,omitempty"` - ContextInfo *ContextInfo `protobuf:"bytes,17,opt,name=contextInfo" json:"contextInfo,omitempty"` +func (x *DocumentMessage) GetThumbnailWidth() uint32 { + if x != nil && x.ThumbnailWidth != nil { + return *x.ThumbnailWidth + } + return 0 } -func (x *ContactsArrayMessage) Reset() { - *x = ContactsArrayMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[70] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) +func (x *DocumentMessage) GetCaption() string { + if x != nil && x.Caption != nil { + return *x.Caption + } + return "" +} + +func (x *DocumentMessage) GetAccessibilityLabel() string { + if x != nil && x.AccessibilityLabel != nil { + return *x.AccessibilityLabel } + return "" } -func (x *ContactsArrayMessage) String() string { +type URLMetadata struct { + state protoimpl.MessageState `protogen:"open.v1"` + FbExperimentID *uint32 `protobuf:"varint,1,opt,name=fbExperimentID" json:"fbExperimentID,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *URLMetadata) Reset() { + *x = URLMetadata{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[94] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *URLMetadata) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ContactsArrayMessage) ProtoMessage() {} +func (*URLMetadata) ProtoMessage() {} -func (x *ContactsArrayMessage) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[70] - if protoimpl.UnsafeEnabled && x != nil { +func (x *URLMetadata) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[94] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -10940,58 +14021,42 @@ func (x *ContactsArrayMessage) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ContactsArrayMessage.ProtoReflect.Descriptor instead. -func (*ContactsArrayMessage) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{70} -} - -func (x *ContactsArrayMessage) GetDisplayName() string { - if x != nil && x.DisplayName != nil { - return *x.DisplayName - } - return "" -} - -func (x *ContactsArrayMessage) GetContacts() []*ContactMessage { - if x != nil { - return x.Contacts - } - return nil +// Deprecated: Use URLMetadata.ProtoReflect.Descriptor instead. +func (*URLMetadata) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{94} } -func (x *ContactsArrayMessage) GetContextInfo() *ContextInfo { - if x != nil { - return x.ContextInfo +func (x *URLMetadata) GetFbExperimentID() uint32 { + if x != nil && x.FbExperimentID != nil { + return *x.FbExperimentID } - return nil + return 0 } -type InitialSecurityNotificationSettingSync struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache +type PaymentExtendedMetadata struct { + state protoimpl.MessageState `protogen:"open.v1"` + Type *uint32 `protobuf:"varint,1,opt,name=type" json:"type,omitempty"` + Platform *string `protobuf:"bytes,2,opt,name=platform" json:"platform,omitempty"` unknownFields protoimpl.UnknownFields - - SecurityNotificationEnabled *bool `protobuf:"varint,1,opt,name=securityNotificationEnabled" json:"securityNotificationEnabled,omitempty"` + sizeCache protoimpl.SizeCache } -func (x *InitialSecurityNotificationSettingSync) Reset() { - *x = InitialSecurityNotificationSettingSync{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[71] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *PaymentExtendedMetadata) Reset() { + *x = PaymentExtendedMetadata{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[95] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *InitialSecurityNotificationSettingSync) String() string { +func (x *PaymentExtendedMetadata) String() string { return protoimpl.X.MessageStringOf(x) } -func (*InitialSecurityNotificationSettingSync) ProtoMessage() {} +func (*PaymentExtendedMetadata) ProtoMessage() {} -func (x *InitialSecurityNotificationSettingSync) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[71] - if protoimpl.UnsafeEnabled && x != nil { +func (x *PaymentExtendedMetadata) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[95] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -11001,49 +14066,54 @@ func (x *InitialSecurityNotificationSettingSync) ProtoReflect() protoreflect.Mes return mi.MessageOf(x) } -// Deprecated: Use InitialSecurityNotificationSettingSync.ProtoReflect.Descriptor instead. -func (*InitialSecurityNotificationSettingSync) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{71} +// Deprecated: Use PaymentExtendedMetadata.ProtoReflect.Descriptor instead. +func (*PaymentExtendedMetadata) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{95} } -func (x *InitialSecurityNotificationSettingSync) GetSecurityNotificationEnabled() bool { - if x != nil && x.SecurityNotificationEnabled != nil { - return *x.SecurityNotificationEnabled +func (x *PaymentExtendedMetadata) GetType() uint32 { + if x != nil && x.Type != nil { + return *x.Type } - return false + return 0 } -type PeerDataOperationRequestMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +func (x *PaymentExtendedMetadata) GetPlatform() string { + if x != nil && x.Platform != nil { + return *x.Platform + } + return "" +} - PeerDataOperationRequestType *PeerDataOperationRequestType `protobuf:"varint,1,opt,name=peerDataOperationRequestType,enum=WAWebProtobufsE2E.PeerDataOperationRequestType" json:"peerDataOperationRequestType,omitempty"` - RequestStickerReupload []*PeerDataOperationRequestMessage_RequestStickerReupload `protobuf:"bytes,2,rep,name=requestStickerReupload" json:"requestStickerReupload,omitempty"` - RequestURLPreview []*PeerDataOperationRequestMessage_RequestUrlPreview `protobuf:"bytes,3,rep,name=requestURLPreview" json:"requestURLPreview,omitempty"` - HistorySyncOnDemandRequest *PeerDataOperationRequestMessage_HistorySyncOnDemandRequest `protobuf:"bytes,4,opt,name=historySyncOnDemandRequest" json:"historySyncOnDemandRequest,omitempty"` - PlaceholderMessageResendRequest []*PeerDataOperationRequestMessage_PlaceholderMessageResendRequest `protobuf:"bytes,5,rep,name=placeholderMessageResendRequest" json:"placeholderMessageResendRequest,omitempty"` - FullHistorySyncOnDemandRequest *PeerDataOperationRequestMessage_FullHistorySyncOnDemandRequest `protobuf:"bytes,6,opt,name=fullHistorySyncOnDemandRequest" json:"fullHistorySyncOnDemandRequest,omitempty"` +type MMSThumbnailMetadata struct { + state protoimpl.MessageState `protogen:"open.v1"` + ThumbnailDirectPath *string `protobuf:"bytes,1,opt,name=thumbnailDirectPath" json:"thumbnailDirectPath,omitempty"` + ThumbnailSHA256 []byte `protobuf:"bytes,2,opt,name=thumbnailSHA256" json:"thumbnailSHA256,omitempty"` + ThumbnailEncSHA256 []byte `protobuf:"bytes,3,opt,name=thumbnailEncSHA256" json:"thumbnailEncSHA256,omitempty"` + MediaKey []byte `protobuf:"bytes,4,opt,name=mediaKey" json:"mediaKey,omitempty"` + MediaKeyTimestamp *int64 `protobuf:"varint,5,opt,name=mediaKeyTimestamp" json:"mediaKeyTimestamp,omitempty"` + ThumbnailHeight *uint32 `protobuf:"varint,6,opt,name=thumbnailHeight" json:"thumbnailHeight,omitempty"` + ThumbnailWidth *uint32 `protobuf:"varint,7,opt,name=thumbnailWidth" json:"thumbnailWidth,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *PeerDataOperationRequestMessage) Reset() { - *x = PeerDataOperationRequestMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[72] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *MMSThumbnailMetadata) Reset() { + *x = MMSThumbnailMetadata{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[96] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *PeerDataOperationRequestMessage) String() string { +func (x *MMSThumbnailMetadata) String() string { return protoimpl.X.MessageStringOf(x) } -func (*PeerDataOperationRequestMessage) ProtoMessage() {} +func (*MMSThumbnailMetadata) ProtoMessage() {} -func (x *PeerDataOperationRequestMessage) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[72] - if protoimpl.UnsafeEnabled && x != nil { +func (x *MMSThumbnailMetadata) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[96] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -11053,79 +14123,94 @@ func (x *PeerDataOperationRequestMessage) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use PeerDataOperationRequestMessage.ProtoReflect.Descriptor instead. -func (*PeerDataOperationRequestMessage) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{72} +// Deprecated: Use MMSThumbnailMetadata.ProtoReflect.Descriptor instead. +func (*MMSThumbnailMetadata) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{96} } -func (x *PeerDataOperationRequestMessage) GetPeerDataOperationRequestType() PeerDataOperationRequestType { - if x != nil && x.PeerDataOperationRequestType != nil { - return *x.PeerDataOperationRequestType +func (x *MMSThumbnailMetadata) GetThumbnailDirectPath() string { + if x != nil && x.ThumbnailDirectPath != nil { + return *x.ThumbnailDirectPath } - return PeerDataOperationRequestType_UPLOAD_STICKER + return "" } -func (x *PeerDataOperationRequestMessage) GetRequestStickerReupload() []*PeerDataOperationRequestMessage_RequestStickerReupload { +func (x *MMSThumbnailMetadata) GetThumbnailSHA256() []byte { if x != nil { - return x.RequestStickerReupload + return x.ThumbnailSHA256 } return nil } -func (x *PeerDataOperationRequestMessage) GetRequestURLPreview() []*PeerDataOperationRequestMessage_RequestUrlPreview { +func (x *MMSThumbnailMetadata) GetThumbnailEncSHA256() []byte { if x != nil { - return x.RequestURLPreview + return x.ThumbnailEncSHA256 } return nil } -func (x *PeerDataOperationRequestMessage) GetHistorySyncOnDemandRequest() *PeerDataOperationRequestMessage_HistorySyncOnDemandRequest { +func (x *MMSThumbnailMetadata) GetMediaKey() []byte { if x != nil { - return x.HistorySyncOnDemandRequest + return x.MediaKey } return nil } -func (x *PeerDataOperationRequestMessage) GetPlaceholderMessageResendRequest() []*PeerDataOperationRequestMessage_PlaceholderMessageResendRequest { - if x != nil { - return x.PlaceholderMessageResendRequest +func (x *MMSThumbnailMetadata) GetMediaKeyTimestamp() int64 { + if x != nil && x.MediaKeyTimestamp != nil { + return *x.MediaKeyTimestamp } - return nil + return 0 } -func (x *PeerDataOperationRequestMessage) GetFullHistorySyncOnDemandRequest() *PeerDataOperationRequestMessage_FullHistorySyncOnDemandRequest { - if x != nil { - return x.FullHistorySyncOnDemandRequest +func (x *MMSThumbnailMetadata) GetThumbnailHeight() uint32 { + if x != nil && x.ThumbnailHeight != nil { + return *x.ThumbnailHeight } - return nil + return 0 } -type FullHistorySyncOnDemandRequestMetadata struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +func (x *MMSThumbnailMetadata) GetThumbnailWidth() uint32 { + if x != nil && x.ThumbnailWidth != nil { + return *x.ThumbnailWidth + } + return 0 +} - RequestID *string `protobuf:"bytes,1,opt,name=requestID" json:"requestID,omitempty"` +type LocationMessage struct { + state protoimpl.MessageState `protogen:"open.v1"` + DegreesLatitude *float64 `protobuf:"fixed64,1,opt,name=degreesLatitude" json:"degreesLatitude,omitempty"` + DegreesLongitude *float64 `protobuf:"fixed64,2,opt,name=degreesLongitude" json:"degreesLongitude,omitempty"` + Name *string `protobuf:"bytes,3,opt,name=name" json:"name,omitempty"` + Address *string `protobuf:"bytes,4,opt,name=address" json:"address,omitempty"` + URL *string `protobuf:"bytes,5,opt,name=URL" json:"URL,omitempty"` + IsLive *bool `protobuf:"varint,6,opt,name=isLive" json:"isLive,omitempty"` + AccuracyInMeters *uint32 `protobuf:"varint,7,opt,name=accuracyInMeters" json:"accuracyInMeters,omitempty"` + SpeedInMps *float32 `protobuf:"fixed32,8,opt,name=speedInMps" json:"speedInMps,omitempty"` + DegreesClockwiseFromMagneticNorth *uint32 `protobuf:"varint,9,opt,name=degreesClockwiseFromMagneticNorth" json:"degreesClockwiseFromMagneticNorth,omitempty"` + Comment *string `protobuf:"bytes,11,opt,name=comment" json:"comment,omitempty"` + JPEGThumbnail []byte `protobuf:"bytes,16,opt,name=JPEGThumbnail" json:"JPEGThumbnail,omitempty"` + ContextInfo *ContextInfo `protobuf:"bytes,17,opt,name=contextInfo" json:"contextInfo,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *FullHistorySyncOnDemandRequestMetadata) Reset() { - *x = FullHistorySyncOnDemandRequestMetadata{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[73] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *LocationMessage) Reset() { + *x = LocationMessage{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[97] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *FullHistorySyncOnDemandRequestMetadata) String() string { +func (x *LocationMessage) String() string { return protoimpl.X.MessageStringOf(x) } -func (*FullHistorySyncOnDemandRequestMetadata) ProtoMessage() {} +func (*LocationMessage) ProtoMessage() {} -func (x *FullHistorySyncOnDemandRequestMetadata) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[73] - if protoimpl.UnsafeEnabled && x != nil { +func (x *LocationMessage) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[97] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -11135,99 +14220,121 @@ func (x *FullHistorySyncOnDemandRequestMetadata) ProtoReflect() protoreflect.Mes return mi.MessageOf(x) } -// Deprecated: Use FullHistorySyncOnDemandRequestMetadata.ProtoReflect.Descriptor instead. -func (*FullHistorySyncOnDemandRequestMetadata) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{73} +// Deprecated: Use LocationMessage.ProtoReflect.Descriptor instead. +func (*LocationMessage) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{97} +} + +func (x *LocationMessage) GetDegreesLatitude() float64 { + if x != nil && x.DegreesLatitude != nil { + return *x.DegreesLatitude + } + return 0 +} + +func (x *LocationMessage) GetDegreesLongitude() float64 { + if x != nil && x.DegreesLongitude != nil { + return *x.DegreesLongitude + } + return 0 +} + +func (x *LocationMessage) GetName() string { + if x != nil && x.Name != nil { + return *x.Name + } + return "" +} + +func (x *LocationMessage) GetAddress() string { + if x != nil && x.Address != nil { + return *x.Address + } + return "" } -func (x *FullHistorySyncOnDemandRequestMetadata) GetRequestID() string { - if x != nil && x.RequestID != nil { - return *x.RequestID +func (x *LocationMessage) GetURL() string { + if x != nil && x.URL != nil { + return *x.URL } return "" } -type AppStateFatalExceptionNotification struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - CollectionNames []string `protobuf:"bytes,1,rep,name=collectionNames" json:"collectionNames,omitempty"` - Timestamp *int64 `protobuf:"varint,2,opt,name=timestamp" json:"timestamp,omitempty"` +func (x *LocationMessage) GetIsLive() bool { + if x != nil && x.IsLive != nil { + return *x.IsLive + } + return false } -func (x *AppStateFatalExceptionNotification) Reset() { - *x = AppStateFatalExceptionNotification{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[74] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) +func (x *LocationMessage) GetAccuracyInMeters() uint32 { + if x != nil && x.AccuracyInMeters != nil { + return *x.AccuracyInMeters } + return 0 } -func (x *AppStateFatalExceptionNotification) String() string { - return protoimpl.X.MessageStringOf(x) +func (x *LocationMessage) GetSpeedInMps() float32 { + if x != nil && x.SpeedInMps != nil { + return *x.SpeedInMps + } + return 0 } -func (*AppStateFatalExceptionNotification) ProtoMessage() {} - -func (x *AppStateFatalExceptionNotification) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[74] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms +func (x *LocationMessage) GetDegreesClockwiseFromMagneticNorth() uint32 { + if x != nil && x.DegreesClockwiseFromMagneticNorth != nil { + return *x.DegreesClockwiseFromMagneticNorth } - return mi.MessageOf(x) + return 0 } -// Deprecated: Use AppStateFatalExceptionNotification.ProtoReflect.Descriptor instead. -func (*AppStateFatalExceptionNotification) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{74} +func (x *LocationMessage) GetComment() string { + if x != nil && x.Comment != nil { + return *x.Comment + } + return "" } -func (x *AppStateFatalExceptionNotification) GetCollectionNames() []string { +func (x *LocationMessage) GetJPEGThumbnail() []byte { if x != nil { - return x.CollectionNames + return x.JPEGThumbnail } return nil } -func (x *AppStateFatalExceptionNotification) GetTimestamp() int64 { - if x != nil && x.Timestamp != nil { - return *x.Timestamp +func (x *LocationMessage) GetContextInfo() *ContextInfo { + if x != nil { + return x.ContextInfo } - return 0 + return nil } -type AppStateSyncKeyRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache +type ContactMessage struct { + state protoimpl.MessageState `protogen:"open.v1"` + DisplayName *string `protobuf:"bytes,1,opt,name=displayName" json:"displayName,omitempty"` + Vcard *string `protobuf:"bytes,16,opt,name=vcard" json:"vcard,omitempty"` + ContextInfo *ContextInfo `protobuf:"bytes,17,opt,name=contextInfo" json:"contextInfo,omitempty"` + IsSelfContact *bool `protobuf:"varint,18,opt,name=isSelfContact" json:"isSelfContact,omitempty"` unknownFields protoimpl.UnknownFields - - KeyIDs []*AppStateSyncKeyId `protobuf:"bytes,1,rep,name=keyIDs" json:"keyIDs,omitempty"` + sizeCache protoimpl.SizeCache } -func (x *AppStateSyncKeyRequest) Reset() { - *x = AppStateSyncKeyRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[75] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *ContactMessage) Reset() { + *x = ContactMessage{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[98] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *AppStateSyncKeyRequest) String() string { +func (x *ContactMessage) String() string { return protoimpl.X.MessageStringOf(x) } -func (*AppStateSyncKeyRequest) ProtoMessage() {} +func (*ContactMessage) ProtoMessage() {} -func (x *AppStateSyncKeyRequest) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[75] - if protoimpl.UnsafeEnabled && x != nil { +func (x *ContactMessage) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[98] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -11237,44 +14344,63 @@ func (x *AppStateSyncKeyRequest) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use AppStateSyncKeyRequest.ProtoReflect.Descriptor instead. -func (*AppStateSyncKeyRequest) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{75} +// Deprecated: Use ContactMessage.ProtoReflect.Descriptor instead. +func (*ContactMessage) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{98} } -func (x *AppStateSyncKeyRequest) GetKeyIDs() []*AppStateSyncKeyId { +func (x *ContactMessage) GetDisplayName() string { + if x != nil && x.DisplayName != nil { + return *x.DisplayName + } + return "" +} + +func (x *ContactMessage) GetVcard() string { + if x != nil && x.Vcard != nil { + return *x.Vcard + } + return "" +} + +func (x *ContactMessage) GetContextInfo() *ContextInfo { if x != nil { - return x.KeyIDs + return x.ContextInfo } return nil } -type AppStateSyncKeyShare struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +func (x *ContactMessage) GetIsSelfContact() bool { + if x != nil && x.IsSelfContact != nil { + return *x.IsSelfContact + } + return false +} - Keys []*AppStateSyncKey `protobuf:"bytes,1,rep,name=keys" json:"keys,omitempty"` +type SenderKeyDistributionMessage struct { + state protoimpl.MessageState `protogen:"open.v1"` + GroupID *string `protobuf:"bytes,1,opt,name=groupID" json:"groupID,omitempty"` + AxolotlSenderKeyDistributionMessage []byte `protobuf:"bytes,2,opt,name=axolotlSenderKeyDistributionMessage" json:"axolotlSenderKeyDistributionMessage,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *AppStateSyncKeyShare) Reset() { - *x = AppStateSyncKeyShare{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[76] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *SenderKeyDistributionMessage) Reset() { + *x = SenderKeyDistributionMessage{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[99] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *AppStateSyncKeyShare) String() string { +func (x *SenderKeyDistributionMessage) String() string { return protoimpl.X.MessageStringOf(x) } -func (*AppStateSyncKeyShare) ProtoMessage() {} +func (*SenderKeyDistributionMessage) ProtoMessage() {} -func (x *AppStateSyncKeyShare) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[76] - if protoimpl.UnsafeEnabled && x != nil { +func (x *SenderKeyDistributionMessage) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[99] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -11284,46 +14410,51 @@ func (x *AppStateSyncKeyShare) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use AppStateSyncKeyShare.ProtoReflect.Descriptor instead. -func (*AppStateSyncKeyShare) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{76} +// Deprecated: Use SenderKeyDistributionMessage.ProtoReflect.Descriptor instead. +func (*SenderKeyDistributionMessage) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{99} } -func (x *AppStateSyncKeyShare) GetKeys() []*AppStateSyncKey { +func (x *SenderKeyDistributionMessage) GetGroupID() string { + if x != nil && x.GroupID != nil { + return *x.GroupID + } + return "" +} + +func (x *SenderKeyDistributionMessage) GetAxolotlSenderKeyDistributionMessage() []byte { if x != nil { - return x.Keys + return x.AxolotlSenderKeyDistributionMessage } return nil } -type AppStateSyncKeyData struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - KeyData []byte `protobuf:"bytes,1,opt,name=keyData" json:"keyData,omitempty"` - Fingerprint *AppStateSyncKeyFingerprint `protobuf:"bytes,2,opt,name=fingerprint" json:"fingerprint,omitempty"` - Timestamp *int64 `protobuf:"varint,3,opt,name=timestamp" json:"timestamp,omitempty"` +type VideoEndCard struct { + state protoimpl.MessageState `protogen:"open.v1"` + Username *string `protobuf:"bytes,1,req,name=username" json:"username,omitempty"` + Caption *string `protobuf:"bytes,2,req,name=caption" json:"caption,omitempty"` + ThumbnailImageURL *string `protobuf:"bytes,3,req,name=thumbnailImageURL" json:"thumbnailImageURL,omitempty"` + ProfilePictureURL *string `protobuf:"bytes,4,req,name=profilePictureURL" json:"profilePictureURL,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *AppStateSyncKeyData) Reset() { - *x = AppStateSyncKeyData{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[77] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *VideoEndCard) Reset() { + *x = VideoEndCard{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[100] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *AppStateSyncKeyData) String() string { +func (x *VideoEndCard) String() string { return protoimpl.X.MessageStringOf(x) } -func (*AppStateSyncKeyData) ProtoMessage() {} +func (*VideoEndCard) ProtoMessage() {} -func (x *AppStateSyncKeyData) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[77] - if protoimpl.UnsafeEnabled && x != nil { +func (x *VideoEndCard) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[100] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -11333,60 +14464,63 @@ func (x *AppStateSyncKeyData) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use AppStateSyncKeyData.ProtoReflect.Descriptor instead. -func (*AppStateSyncKeyData) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{77} +// Deprecated: Use VideoEndCard.ProtoReflect.Descriptor instead. +func (*VideoEndCard) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{100} } -func (x *AppStateSyncKeyData) GetKeyData() []byte { - if x != nil { - return x.KeyData +func (x *VideoEndCard) GetUsername() string { + if x != nil && x.Username != nil { + return *x.Username } - return nil + return "" } -func (x *AppStateSyncKeyData) GetFingerprint() *AppStateSyncKeyFingerprint { - if x != nil { - return x.Fingerprint +func (x *VideoEndCard) GetCaption() string { + if x != nil && x.Caption != nil { + return *x.Caption } - return nil + return "" } -func (x *AppStateSyncKeyData) GetTimestamp() int64 { - if x != nil && x.Timestamp != nil { - return *x.Timestamp +func (x *VideoEndCard) GetThumbnailImageURL() string { + if x != nil && x.ThumbnailImageURL != nil { + return *x.ThumbnailImageURL } - return 0 + return "" } -type AppStateSyncKeyFingerprint struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +func (x *VideoEndCard) GetProfilePictureURL() string { + if x != nil && x.ProfilePictureURL != nil { + return *x.ProfilePictureURL + } + return "" +} - RawID *uint32 `protobuf:"varint,1,opt,name=rawID" json:"rawID,omitempty"` - CurrentIndex *uint32 `protobuf:"varint,2,opt,name=currentIndex" json:"currentIndex,omitempty"` - DeviceIndexes []uint32 `protobuf:"varint,3,rep,packed,name=deviceIndexes" json:"deviceIndexes,omitempty"` +type MediaDomainInfo struct { + state protoimpl.MessageState `protogen:"open.v1"` + MediaKeyDomain *MediaKeyDomain `protobuf:"varint,1,opt,name=mediaKeyDomain,enum=WAWebProtobufsE2E.MediaKeyDomain" json:"mediaKeyDomain,omitempty"` + E2EeMediaKey []byte `protobuf:"bytes,2,opt,name=e2EeMediaKey" json:"e2EeMediaKey,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *AppStateSyncKeyFingerprint) Reset() { - *x = AppStateSyncKeyFingerprint{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[78] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *MediaDomainInfo) Reset() { + *x = MediaDomainInfo{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[101] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *AppStateSyncKeyFingerprint) String() string { +func (x *MediaDomainInfo) String() string { return protoimpl.X.MessageStringOf(x) } -func (*AppStateSyncKeyFingerprint) ProtoMessage() {} +func (*MediaDomainInfo) ProtoMessage() {} -func (x *AppStateSyncKeyFingerprint) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[78] - if protoimpl.UnsafeEnabled && x != nil { +func (x *MediaDomainInfo) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[101] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -11396,58 +14530,55 @@ func (x *AppStateSyncKeyFingerprint) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use AppStateSyncKeyFingerprint.ProtoReflect.Descriptor instead. -func (*AppStateSyncKeyFingerprint) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{78} -} - -func (x *AppStateSyncKeyFingerprint) GetRawID() uint32 { - if x != nil && x.RawID != nil { - return *x.RawID - } - return 0 +// Deprecated: Use MediaDomainInfo.ProtoReflect.Descriptor instead. +func (*MediaDomainInfo) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{101} } -func (x *AppStateSyncKeyFingerprint) GetCurrentIndex() uint32 { - if x != nil && x.CurrentIndex != nil { - return *x.CurrentIndex +func (x *MediaDomainInfo) GetMediaKeyDomain() MediaKeyDomain { + if x != nil && x.MediaKeyDomain != nil { + return *x.MediaKeyDomain } - return 0 + return MediaKeyDomain_MEDIA_KEY_DOMAIN_UNKNOWN } -func (x *AppStateSyncKeyFingerprint) GetDeviceIndexes() []uint32 { +func (x *MediaDomainInfo) GetE2EeMediaKey() []byte { if x != nil { - return x.DeviceIndexes + return x.E2EeMediaKey } return nil } -type AppStateSyncKeyId struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - KeyID []byte `protobuf:"bytes,1,opt,name=keyID" json:"keyID,omitempty"` +type DeviceListMetadata struct { + state protoimpl.MessageState `protogen:"open.v1"` + SenderKeyHash []byte `protobuf:"bytes,1,opt,name=senderKeyHash" json:"senderKeyHash,omitempty"` + SenderTimestamp *uint64 `protobuf:"varint,2,opt,name=senderTimestamp" json:"senderTimestamp,omitempty"` + SenderKeyIndexes []uint32 `protobuf:"varint,3,rep,packed,name=senderKeyIndexes" json:"senderKeyIndexes,omitempty"` + SenderAccountType *waAdv.ADVEncryptionType `protobuf:"varint,4,opt,name=senderAccountType,enum=WAAdv.ADVEncryptionType" json:"senderAccountType,omitempty"` + ReceiverAccountType *waAdv.ADVEncryptionType `protobuf:"varint,5,opt,name=receiverAccountType,enum=WAAdv.ADVEncryptionType" json:"receiverAccountType,omitempty"` + RecipientKeyHash []byte `protobuf:"bytes,8,opt,name=recipientKeyHash" json:"recipientKeyHash,omitempty"` + RecipientTimestamp *uint64 `protobuf:"varint,9,opt,name=recipientTimestamp" json:"recipientTimestamp,omitempty"` + RecipientKeyIndexes []uint32 `protobuf:"varint,10,rep,packed,name=recipientKeyIndexes" json:"recipientKeyIndexes,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *AppStateSyncKeyId) Reset() { - *x = AppStateSyncKeyId{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[79] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *DeviceListMetadata) Reset() { + *x = DeviceListMetadata{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[102] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *AppStateSyncKeyId) String() string { +func (x *DeviceListMetadata) String() string { return protoimpl.X.MessageStringOf(x) } -func (*AppStateSyncKeyId) ProtoMessage() {} +func (*DeviceListMetadata) ProtoMessage() {} -func (x *AppStateSyncKeyId) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[79] - if protoimpl.UnsafeEnabled && x != nil { +func (x *DeviceListMetadata) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[102] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -11457,100 +14588,91 @@ func (x *AppStateSyncKeyId) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use AppStateSyncKeyId.ProtoReflect.Descriptor instead. -func (*AppStateSyncKeyId) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{79} +// Deprecated: Use DeviceListMetadata.ProtoReflect.Descriptor instead. +func (*DeviceListMetadata) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{102} } -func (x *AppStateSyncKeyId) GetKeyID() []byte { +func (x *DeviceListMetadata) GetSenderKeyHash() []byte { if x != nil { - return x.KeyID + return x.SenderKeyHash } return nil } -type AppStateSyncKey struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - KeyID *AppStateSyncKeyId `protobuf:"bytes,1,opt,name=keyID" json:"keyID,omitempty"` - KeyData *AppStateSyncKeyData `protobuf:"bytes,2,opt,name=keyData" json:"keyData,omitempty"` -} - -func (x *AppStateSyncKey) Reset() { - *x = AppStateSyncKey{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[80] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) +func (x *DeviceListMetadata) GetSenderTimestamp() uint64 { + if x != nil && x.SenderTimestamp != nil { + return *x.SenderTimestamp } + return 0 } -func (x *AppStateSyncKey) String() string { - return protoimpl.X.MessageStringOf(x) +func (x *DeviceListMetadata) GetSenderKeyIndexes() []uint32 { + if x != nil { + return x.SenderKeyIndexes + } + return nil } -func (*AppStateSyncKey) ProtoMessage() {} - -func (x *AppStateSyncKey) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[80] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms +func (x *DeviceListMetadata) GetSenderAccountType() waAdv.ADVEncryptionType { + if x != nil && x.SenderAccountType != nil { + return *x.SenderAccountType } - return mi.MessageOf(x) + return waAdv.ADVEncryptionType(0) } -// Deprecated: Use AppStateSyncKey.ProtoReflect.Descriptor instead. -func (*AppStateSyncKey) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{80} +func (x *DeviceListMetadata) GetReceiverAccountType() waAdv.ADVEncryptionType { + if x != nil && x.ReceiverAccountType != nil { + return *x.ReceiverAccountType + } + return waAdv.ADVEncryptionType(0) } -func (x *AppStateSyncKey) GetKeyID() *AppStateSyncKeyId { +func (x *DeviceListMetadata) GetRecipientKeyHash() []byte { if x != nil { - return x.KeyID + return x.RecipientKeyHash } return nil } -func (x *AppStateSyncKey) GetKeyData() *AppStateSyncKeyData { +func (x *DeviceListMetadata) GetRecipientTimestamp() uint64 { + if x != nil && x.RecipientTimestamp != nil { + return *x.RecipientTimestamp + } + return 0 +} + +func (x *DeviceListMetadata) GetRecipientKeyIndexes() []uint32 { if x != nil { - return x.KeyData + return x.RecipientKeyIndexes } return nil } -type Chat struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache +type EmbeddedMessage struct { + state protoimpl.MessageState `protogen:"open.v1"` + StanzaID *string `protobuf:"bytes,1,opt,name=stanzaID" json:"stanzaID,omitempty"` + Message *Message `protobuf:"bytes,2,opt,name=message" json:"message,omitempty"` unknownFields protoimpl.UnknownFields - - DisplayName *string `protobuf:"bytes,1,opt,name=displayName" json:"displayName,omitempty"` - ID *string `protobuf:"bytes,2,opt,name=ID" json:"ID,omitempty"` + sizeCache protoimpl.SizeCache } -func (x *Chat) Reset() { - *x = Chat{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[81] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *EmbeddedMessage) Reset() { + *x = EmbeddedMessage{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[103] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *Chat) String() string { +func (x *EmbeddedMessage) String() string { return protoimpl.X.MessageStringOf(x) } -func (*Chat) ProtoMessage() {} +func (*EmbeddedMessage) ProtoMessage() {} -func (x *Chat) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[81] - if protoimpl.UnsafeEnabled && x != nil { +func (x *EmbeddedMessage) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[103] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -11560,54 +14682,61 @@ func (x *Chat) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use Chat.ProtoReflect.Descriptor instead. -func (*Chat) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{81} +// Deprecated: Use EmbeddedMessage.ProtoReflect.Descriptor instead. +func (*EmbeddedMessage) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{103} } -func (x *Chat) GetDisplayName() string { - if x != nil && x.DisplayName != nil { - return *x.DisplayName +func (x *EmbeddedMessage) GetStanzaID() string { + if x != nil && x.StanzaID != nil { + return *x.StanzaID } return "" } -func (x *Chat) GetID() string { - if x != nil && x.ID != nil { - return *x.ID +func (x *EmbeddedMessage) GetMessage() *Message { + if x != nil { + return x.Message } - return "" + return nil } -type Call struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - CallKey []byte `protobuf:"bytes,1,opt,name=callKey" json:"callKey,omitempty"` - ConversionSource *string `protobuf:"bytes,2,opt,name=conversionSource" json:"conversionSource,omitempty"` - ConversionData []byte `protobuf:"bytes,3,opt,name=conversionData" json:"conversionData,omitempty"` - ConversionDelaySeconds *uint32 `protobuf:"varint,4,opt,name=conversionDelaySeconds" json:"conversionDelaySeconds,omitempty"` +type EmbeddedMusic struct { + state protoimpl.MessageState `protogen:"open.v1"` + MusicContentMediaID *string `protobuf:"bytes,1,opt,name=musicContentMediaID" json:"musicContentMediaID,omitempty"` + SongID *string `protobuf:"bytes,2,opt,name=songID" json:"songID,omitempty"` + Author *string `protobuf:"bytes,3,opt,name=author" json:"author,omitempty"` + Title *string `protobuf:"bytes,4,opt,name=title" json:"title,omitempty"` + ArtworkDirectPath *string `protobuf:"bytes,5,opt,name=artworkDirectPath" json:"artworkDirectPath,omitempty"` + ArtworkSHA256 []byte `protobuf:"bytes,6,opt,name=artworkSHA256" json:"artworkSHA256,omitempty"` + ArtworkEncSHA256 []byte `protobuf:"bytes,7,opt,name=artworkEncSHA256" json:"artworkEncSHA256,omitempty"` + ArtistAttribution *string `protobuf:"bytes,8,opt,name=artistAttribution" json:"artistAttribution,omitempty"` + CountryBlocklist []byte `protobuf:"bytes,9,opt,name=countryBlocklist" json:"countryBlocklist,omitempty"` + IsExplicit *bool `protobuf:"varint,10,opt,name=isExplicit" json:"isExplicit,omitempty"` + ArtworkMediaKey []byte `protobuf:"bytes,11,opt,name=artworkMediaKey" json:"artworkMediaKey,omitempty"` + MusicSongStartTimeInMS *int64 `protobuf:"varint,12,opt,name=musicSongStartTimeInMS" json:"musicSongStartTimeInMS,omitempty"` + DerivedContentStartTimeInMS *int64 `protobuf:"varint,13,opt,name=derivedContentStartTimeInMS" json:"derivedContentStartTimeInMS,omitempty"` + OverlapDurationInMS *int64 `protobuf:"varint,14,opt,name=overlapDurationInMS" json:"overlapDurationInMS,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *Call) Reset() { - *x = Call{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[82] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *EmbeddedMusic) Reset() { + *x = EmbeddedMusic{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[104] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *Call) String() string { +func (x *EmbeddedMusic) String() string { return protoimpl.X.MessageStringOf(x) } -func (*Call) ProtoMessage() {} +func (*EmbeddedMusic) ProtoMessage() {} -func (x *Call) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[82] - if protoimpl.UnsafeEnabled && x != nil { +func (x *EmbeddedMusic) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[104] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -11617,252 +14746,215 @@ func (x *Call) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use Call.ProtoReflect.Descriptor instead. -func (*Call) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{82} +// Deprecated: Use EmbeddedMusic.ProtoReflect.Descriptor instead. +func (*EmbeddedMusic) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{104} } -func (x *Call) GetCallKey() []byte { - if x != nil { - return x.CallKey +func (x *EmbeddedMusic) GetMusicContentMediaID() string { + if x != nil && x.MusicContentMediaID != nil { + return *x.MusicContentMediaID } - return nil + return "" } -func (x *Call) GetConversionSource() string { - if x != nil && x.ConversionSource != nil { - return *x.ConversionSource +func (x *EmbeddedMusic) GetSongID() string { + if x != nil && x.SongID != nil { + return *x.SongID } return "" } -func (x *Call) GetConversionData() []byte { - if x != nil { - return x.ConversionData +func (x *EmbeddedMusic) GetAuthor() string { + if x != nil && x.Author != nil { + return *x.Author } - return nil + return "" } -func (x *Call) GetConversionDelaySeconds() uint32 { - if x != nil && x.ConversionDelaySeconds != nil { - return *x.ConversionDelaySeconds +func (x *EmbeddedMusic) GetTitle() string { + if x != nil && x.Title != nil { + return *x.Title } - return 0 -} - -type AudioMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - URL *string `protobuf:"bytes,1,opt,name=URL" json:"URL,omitempty"` - Mimetype *string `protobuf:"bytes,2,opt,name=mimetype" json:"mimetype,omitempty"` - FileSHA256 []byte `protobuf:"bytes,3,opt,name=fileSHA256" json:"fileSHA256,omitempty"` - FileLength *uint64 `protobuf:"varint,4,opt,name=fileLength" json:"fileLength,omitempty"` - Seconds *uint32 `protobuf:"varint,5,opt,name=seconds" json:"seconds,omitempty"` - PTT *bool `protobuf:"varint,6,opt,name=PTT" json:"PTT,omitempty"` - MediaKey []byte `protobuf:"bytes,7,opt,name=mediaKey" json:"mediaKey,omitempty"` - FileEncSHA256 []byte `protobuf:"bytes,8,opt,name=fileEncSHA256" json:"fileEncSHA256,omitempty"` - DirectPath *string `protobuf:"bytes,9,opt,name=directPath" json:"directPath,omitempty"` - MediaKeyTimestamp *int64 `protobuf:"varint,10,opt,name=mediaKeyTimestamp" json:"mediaKeyTimestamp,omitempty"` - ContextInfo *ContextInfo `protobuf:"bytes,17,opt,name=contextInfo" json:"contextInfo,omitempty"` - StreamingSidecar []byte `protobuf:"bytes,18,opt,name=streamingSidecar" json:"streamingSidecar,omitempty"` - Waveform []byte `protobuf:"bytes,19,opt,name=waveform" json:"waveform,omitempty"` - BackgroundArgb *uint32 `protobuf:"fixed32,20,opt,name=backgroundArgb" json:"backgroundArgb,omitempty"` - ViewOnce *bool `protobuf:"varint,21,opt,name=viewOnce" json:"viewOnce,omitempty"` - AccessibilityLabel *string `protobuf:"bytes,22,opt,name=accessibilityLabel" json:"accessibilityLabel,omitempty"` + return "" } -func (x *AudioMessage) Reset() { - *x = AudioMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[83] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) +func (x *EmbeddedMusic) GetArtworkDirectPath() string { + if x != nil && x.ArtworkDirectPath != nil { + return *x.ArtworkDirectPath } + return "" } -func (x *AudioMessage) String() string { - return protoimpl.X.MessageStringOf(x) +func (x *EmbeddedMusic) GetArtworkSHA256() []byte { + if x != nil { + return x.ArtworkSHA256 + } + return nil } -func (*AudioMessage) ProtoMessage() {} - -func (x *AudioMessage) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[83] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms +func (x *EmbeddedMusic) GetArtworkEncSHA256() []byte { + if x != nil { + return x.ArtworkEncSHA256 } - return mi.MessageOf(x) + return nil } -// Deprecated: Use AudioMessage.ProtoReflect.Descriptor instead. -func (*AudioMessage) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{83} +func (x *EmbeddedMusic) GetArtistAttribution() string { + if x != nil && x.ArtistAttribution != nil { + return *x.ArtistAttribution + } + return "" } -func (x *AudioMessage) GetURL() string { - if x != nil && x.URL != nil { - return *x.URL +func (x *EmbeddedMusic) GetCountryBlocklist() []byte { + if x != nil { + return x.CountryBlocklist } - return "" + return nil } -func (x *AudioMessage) GetMimetype() string { - if x != nil && x.Mimetype != nil { - return *x.Mimetype +func (x *EmbeddedMusic) GetIsExplicit() bool { + if x != nil && x.IsExplicit != nil { + return *x.IsExplicit } - return "" + return false } -func (x *AudioMessage) GetFileSHA256() []byte { +func (x *EmbeddedMusic) GetArtworkMediaKey() []byte { if x != nil { - return x.FileSHA256 + return x.ArtworkMediaKey } return nil } -func (x *AudioMessage) GetFileLength() uint64 { - if x != nil && x.FileLength != nil { - return *x.FileLength +func (x *EmbeddedMusic) GetMusicSongStartTimeInMS() int64 { + if x != nil && x.MusicSongStartTimeInMS != nil { + return *x.MusicSongStartTimeInMS } return 0 } -func (x *AudioMessage) GetSeconds() uint32 { - if x != nil && x.Seconds != nil { - return *x.Seconds +func (x *EmbeddedMusic) GetDerivedContentStartTimeInMS() int64 { + if x != nil && x.DerivedContentStartTimeInMS != nil { + return *x.DerivedContentStartTimeInMS } return 0 } -func (x *AudioMessage) GetPTT() bool { - if x != nil && x.PTT != nil { - return *x.PTT +func (x *EmbeddedMusic) GetOverlapDurationInMS() int64 { + if x != nil && x.OverlapDurationInMS != nil { + return *x.OverlapDurationInMS } - return false + return 0 } -func (x *AudioMessage) GetMediaKey() []byte { - if x != nil { - return x.MediaKey - } - return nil +type EmbeddedContent struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Types that are valid to be assigned to Content: + // + // *EmbeddedContent_EmbeddedMessage + // *EmbeddedContent_EmbeddedMusic + Content isEmbeddedContent_Content `protobuf_oneof:"content"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *AudioMessage) GetFileEncSHA256() []byte { - if x != nil { - return x.FileEncSHA256 - } - return nil +func (x *EmbeddedContent) Reset() { + *x = EmbeddedContent{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[105] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *AudioMessage) GetDirectPath() string { - if x != nil && x.DirectPath != nil { - return *x.DirectPath +func (x *EmbeddedContent) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*EmbeddedContent) ProtoMessage() {} + +func (x *EmbeddedContent) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[105] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return "" + return mi.MessageOf(x) } -func (x *AudioMessage) GetMediaKeyTimestamp() int64 { - if x != nil && x.MediaKeyTimestamp != nil { - return *x.MediaKeyTimestamp - } - return 0 +// Deprecated: Use EmbeddedContent.ProtoReflect.Descriptor instead. +func (*EmbeddedContent) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{105} } -func (x *AudioMessage) GetContextInfo() *ContextInfo { +func (x *EmbeddedContent) GetContent() isEmbeddedContent_Content { if x != nil { - return x.ContextInfo + return x.Content } return nil } -func (x *AudioMessage) GetStreamingSidecar() []byte { +func (x *EmbeddedContent) GetEmbeddedMessage() *EmbeddedMessage { if x != nil { - return x.StreamingSidecar + if x, ok := x.Content.(*EmbeddedContent_EmbeddedMessage); ok { + return x.EmbeddedMessage + } } return nil } -func (x *AudioMessage) GetWaveform() []byte { +func (x *EmbeddedContent) GetEmbeddedMusic() *EmbeddedMusic { if x != nil { - return x.Waveform + if x, ok := x.Content.(*EmbeddedContent_EmbeddedMusic); ok { + return x.EmbeddedMusic + } } return nil } -func (x *AudioMessage) GetBackgroundArgb() uint32 { - if x != nil && x.BackgroundArgb != nil { - return *x.BackgroundArgb - } - return 0 +type isEmbeddedContent_Content interface { + isEmbeddedContent_Content() } -func (x *AudioMessage) GetViewOnce() bool { - if x != nil && x.ViewOnce != nil { - return *x.ViewOnce - } - return false +type EmbeddedContent_EmbeddedMessage struct { + EmbeddedMessage *EmbeddedMessage `protobuf:"bytes,1,opt,name=embeddedMessage,oneof"` } -func (x *AudioMessage) GetAccessibilityLabel() string { - if x != nil && x.AccessibilityLabel != nil { - return *x.AccessibilityLabel - } - return "" +type EmbeddedContent_EmbeddedMusic struct { + EmbeddedMusic *EmbeddedMusic `protobuf:"bytes,2,opt,name=embeddedMusic,oneof"` } -type DocumentMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +func (*EmbeddedContent_EmbeddedMessage) isEmbeddedContent_Content() {} + +func (*EmbeddedContent_EmbeddedMusic) isEmbeddedContent_Content() {} - URL *string `protobuf:"bytes,1,opt,name=URL" json:"URL,omitempty"` - Mimetype *string `protobuf:"bytes,2,opt,name=mimetype" json:"mimetype,omitempty"` - Title *string `protobuf:"bytes,3,opt,name=title" json:"title,omitempty"` - FileSHA256 []byte `protobuf:"bytes,4,opt,name=fileSHA256" json:"fileSHA256,omitempty"` - FileLength *uint64 `protobuf:"varint,5,opt,name=fileLength" json:"fileLength,omitempty"` - PageCount *uint32 `protobuf:"varint,6,opt,name=pageCount" json:"pageCount,omitempty"` - MediaKey []byte `protobuf:"bytes,7,opt,name=mediaKey" json:"mediaKey,omitempty"` - FileName *string `protobuf:"bytes,8,opt,name=fileName" json:"fileName,omitempty"` - FileEncSHA256 []byte `protobuf:"bytes,9,opt,name=fileEncSHA256" json:"fileEncSHA256,omitempty"` - DirectPath *string `protobuf:"bytes,10,opt,name=directPath" json:"directPath,omitempty"` - MediaKeyTimestamp *int64 `protobuf:"varint,11,opt,name=mediaKeyTimestamp" json:"mediaKeyTimestamp,omitempty"` - ContactVcard *bool `protobuf:"varint,12,opt,name=contactVcard" json:"contactVcard,omitempty"` - ThumbnailDirectPath *string `protobuf:"bytes,13,opt,name=thumbnailDirectPath" json:"thumbnailDirectPath,omitempty"` - ThumbnailSHA256 []byte `protobuf:"bytes,14,opt,name=thumbnailSHA256" json:"thumbnailSHA256,omitempty"` - ThumbnailEncSHA256 []byte `protobuf:"bytes,15,opt,name=thumbnailEncSHA256" json:"thumbnailEncSHA256,omitempty"` - JPEGThumbnail []byte `protobuf:"bytes,16,opt,name=JPEGThumbnail" json:"JPEGThumbnail,omitempty"` - ContextInfo *ContextInfo `protobuf:"bytes,17,opt,name=contextInfo" json:"contextInfo,omitempty"` - ThumbnailHeight *uint32 `protobuf:"varint,18,opt,name=thumbnailHeight" json:"thumbnailHeight,omitempty"` - ThumbnailWidth *uint32 `protobuf:"varint,19,opt,name=thumbnailWidth" json:"thumbnailWidth,omitempty"` - Caption *string `protobuf:"bytes,20,opt,name=caption" json:"caption,omitempty"` - AccessibilityLabel *string `protobuf:"bytes,21,opt,name=accessibilityLabel" json:"accessibilityLabel,omitempty"` +type TapLinkAction struct { + state protoimpl.MessageState `protogen:"open.v1"` + Title *string `protobuf:"bytes,1,opt,name=title" json:"title,omitempty"` + TapURL *string `protobuf:"bytes,2,opt,name=tapURL" json:"tapURL,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *DocumentMessage) Reset() { - *x = DocumentMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[84] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *TapLinkAction) Reset() { + *x = TapLinkAction{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[106] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *DocumentMessage) String() string { +func (x *TapLinkAction) String() string { return protoimpl.X.MessageStringOf(x) } -func (*DocumentMessage) ProtoMessage() {} +func (*TapLinkAction) ProtoMessage() {} -func (x *DocumentMessage) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[84] - if protoimpl.UnsafeEnabled && x != nil { +func (x *TapLinkAction) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[106] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -11872,195 +14964,284 @@ func (x *DocumentMessage) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use DocumentMessage.ProtoReflect.Descriptor instead. -func (*DocumentMessage) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{84} +// Deprecated: Use TapLinkAction.ProtoReflect.Descriptor instead. +func (*TapLinkAction) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{106} } -func (x *DocumentMessage) GetURL() string { - if x != nil && x.URL != nil { - return *x.URL +func (x *TapLinkAction) GetTitle() string { + if x != nil && x.Title != nil { + return *x.Title } return "" } -func (x *DocumentMessage) GetMimetype() string { - if x != nil && x.Mimetype != nil { - return *x.Mimetype +func (x *TapLinkAction) GetTapURL() string { + if x != nil && x.TapURL != nil { + return *x.TapURL } return "" } -func (x *DocumentMessage) GetTitle() string { - if x != nil && x.Title != nil { - return *x.Title - } - return "" +type Point struct { + state protoimpl.MessageState `protogen:"open.v1"` + XDeprecated *int32 `protobuf:"varint,1,opt,name=xDeprecated" json:"xDeprecated,omitempty"` + YDeprecated *int32 `protobuf:"varint,2,opt,name=yDeprecated" json:"yDeprecated,omitempty"` + X *float64 `protobuf:"fixed64,3,opt,name=x" json:"x,omitempty"` + Y *float64 `protobuf:"fixed64,4,opt,name=y" json:"y,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *DocumentMessage) GetFileSHA256() []byte { +func (x *Point) Reset() { + *x = Point{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[107] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *Point) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Point) ProtoMessage() {} + +func (x *Point) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[107] if x != nil { - return x.FileSHA256 + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return nil + return mi.MessageOf(x) } -func (x *DocumentMessage) GetFileLength() uint64 { - if x != nil && x.FileLength != nil { - return *x.FileLength +// Deprecated: Use Point.ProtoReflect.Descriptor instead. +func (*Point) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{107} +} + +func (x *Point) GetXDeprecated() int32 { + if x != nil && x.XDeprecated != nil { + return *x.XDeprecated } return 0 } -func (x *DocumentMessage) GetPageCount() uint32 { - if x != nil && x.PageCount != nil { - return *x.PageCount +func (x *Point) GetYDeprecated() int32 { + if x != nil && x.YDeprecated != nil { + return *x.YDeprecated } return 0 } -func (x *DocumentMessage) GetMediaKey() []byte { - if x != nil { - return x.MediaKey +func (x *Point) GetX() float64 { + if x != nil && x.X != nil { + return *x.X } - return nil + return 0 } -func (x *DocumentMessage) GetFileName() string { - if x != nil && x.FileName != nil { - return *x.FileName +func (x *Point) GetY() float64 { + if x != nil && x.Y != nil { + return *x.Y } - return "" + return 0 } -func (x *DocumentMessage) GetFileEncSHA256() []byte { +type Location struct { + state protoimpl.MessageState `protogen:"open.v1"` + DegreesLatitude *float64 `protobuf:"fixed64,1,opt,name=degreesLatitude" json:"degreesLatitude,omitempty"` + DegreesLongitude *float64 `protobuf:"fixed64,2,opt,name=degreesLongitude" json:"degreesLongitude,omitempty"` + Name *string `protobuf:"bytes,3,opt,name=name" json:"name,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *Location) Reset() { + *x = Location{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[108] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *Location) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Location) ProtoMessage() {} + +func (x *Location) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[108] if x != nil { - return x.FileEncSHA256 + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return nil + return mi.MessageOf(x) } -func (x *DocumentMessage) GetDirectPath() string { - if x != nil && x.DirectPath != nil { - return *x.DirectPath - } - return "" +// Deprecated: Use Location.ProtoReflect.Descriptor instead. +func (*Location) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{108} } -func (x *DocumentMessage) GetMediaKeyTimestamp() int64 { - if x != nil && x.MediaKeyTimestamp != nil { - return *x.MediaKeyTimestamp +func (x *Location) GetDegreesLatitude() float64 { + if x != nil && x.DegreesLatitude != nil { + return *x.DegreesLatitude } return 0 } -func (x *DocumentMessage) GetContactVcard() bool { - if x != nil && x.ContactVcard != nil { - return *x.ContactVcard +func (x *Location) GetDegreesLongitude() float64 { + if x != nil && x.DegreesLongitude != nil { + return *x.DegreesLongitude } - return false + return 0 } -func (x *DocumentMessage) GetThumbnailDirectPath() string { - if x != nil && x.ThumbnailDirectPath != nil { - return *x.ThumbnailDirectPath +func (x *Location) GetName() string { + if x != nil && x.Name != nil { + return *x.Name } return "" } -func (x *DocumentMessage) GetThumbnailSHA256() []byte { +type TemplateButton struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Types that are valid to be assigned to Button: + // + // *TemplateButton_QuickReplyButton_ + // *TemplateButton_UrlButton + // *TemplateButton_CallButton_ + Button isTemplateButton_Button `protobuf_oneof:"button"` + Index *uint32 `protobuf:"varint,4,opt,name=index" json:"index,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *TemplateButton) Reset() { + *x = TemplateButton{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[109] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *TemplateButton) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TemplateButton) ProtoMessage() {} + +func (x *TemplateButton) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[109] if x != nil { - return x.ThumbnailSHA256 + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TemplateButton.ProtoReflect.Descriptor instead. +func (*TemplateButton) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{109} +} + +func (x *TemplateButton) GetButton() isTemplateButton_Button { + if x != nil { + return x.Button } return nil } -func (x *DocumentMessage) GetThumbnailEncSHA256() []byte { +func (x *TemplateButton) GetQuickReplyButton() *TemplateButton_QuickReplyButton { if x != nil { - return x.ThumbnailEncSHA256 + if x, ok := x.Button.(*TemplateButton_QuickReplyButton_); ok { + return x.QuickReplyButton + } } return nil } -func (x *DocumentMessage) GetJPEGThumbnail() []byte { +func (x *TemplateButton) GetUrlButton() *TemplateButton_URLButton { if x != nil { - return x.JPEGThumbnail + if x, ok := x.Button.(*TemplateButton_UrlButton); ok { + return x.UrlButton + } } return nil } -func (x *DocumentMessage) GetContextInfo() *ContextInfo { +func (x *TemplateButton) GetCallButton() *TemplateButton_CallButton { if x != nil { - return x.ContextInfo + if x, ok := x.Button.(*TemplateButton_CallButton_); ok { + return x.CallButton + } } return nil } -func (x *DocumentMessage) GetThumbnailHeight() uint32 { - if x != nil && x.ThumbnailHeight != nil { - return *x.ThumbnailHeight +func (x *TemplateButton) GetIndex() uint32 { + if x != nil && x.Index != nil { + return *x.Index } return 0 } -func (x *DocumentMessage) GetThumbnailWidth() uint32 { - if x != nil && x.ThumbnailWidth != nil { - return *x.ThumbnailWidth - } - return 0 +type isTemplateButton_Button interface { + isTemplateButton_Button() +} + +type TemplateButton_QuickReplyButton_ struct { + QuickReplyButton *TemplateButton_QuickReplyButton `protobuf:"bytes,1,opt,name=quickReplyButton,oneof"` +} + +type TemplateButton_UrlButton struct { + UrlButton *TemplateButton_URLButton `protobuf:"bytes,2,opt,name=urlButton,oneof"` } -func (x *DocumentMessage) GetCaption() string { - if x != nil && x.Caption != nil { - return *x.Caption - } - return "" +type TemplateButton_CallButton_ struct { + CallButton *TemplateButton_CallButton `protobuf:"bytes,3,opt,name=callButton,oneof"` } -func (x *DocumentMessage) GetAccessibilityLabel() string { - if x != nil && x.AccessibilityLabel != nil { - return *x.AccessibilityLabel - } - return "" -} +func (*TemplateButton_QuickReplyButton_) isTemplateButton_Button() {} -type LocationMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +func (*TemplateButton_UrlButton) isTemplateButton_Button() {} + +func (*TemplateButton_CallButton_) isTemplateButton_Button() {} - DegreesLatitude *float64 `protobuf:"fixed64,1,opt,name=degreesLatitude" json:"degreesLatitude,omitempty"` - DegreesLongitude *float64 `protobuf:"fixed64,2,opt,name=degreesLongitude" json:"degreesLongitude,omitempty"` - Name *string `protobuf:"bytes,3,opt,name=name" json:"name,omitempty"` - Address *string `protobuf:"bytes,4,opt,name=address" json:"address,omitempty"` - URL *string `protobuf:"bytes,5,opt,name=URL" json:"URL,omitempty"` - IsLive *bool `protobuf:"varint,6,opt,name=isLive" json:"isLive,omitempty"` - AccuracyInMeters *uint32 `protobuf:"varint,7,opt,name=accuracyInMeters" json:"accuracyInMeters,omitempty"` - SpeedInMps *float32 `protobuf:"fixed32,8,opt,name=speedInMps" json:"speedInMps,omitempty"` - DegreesClockwiseFromMagneticNorth *uint32 `protobuf:"varint,9,opt,name=degreesClockwiseFromMagneticNorth" json:"degreesClockwiseFromMagneticNorth,omitempty"` - Comment *string `protobuf:"bytes,11,opt,name=comment" json:"comment,omitempty"` - JPEGThumbnail []byte `protobuf:"bytes,16,opt,name=JPEGThumbnail" json:"JPEGThumbnail,omitempty"` - ContextInfo *ContextInfo `protobuf:"bytes,17,opt,name=contextInfo" json:"contextInfo,omitempty"` +type Money struct { + state protoimpl.MessageState `protogen:"open.v1"` + Value *int64 `protobuf:"varint,1,opt,name=value" json:"value,omitempty"` + Offset *uint32 `protobuf:"varint,2,opt,name=offset" json:"offset,omitempty"` + CurrencyCode *string `protobuf:"bytes,3,opt,name=currencyCode" json:"currencyCode,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *LocationMessage) Reset() { - *x = LocationMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[85] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *Money) Reset() { + *x = Money{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[110] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *LocationMessage) String() string { +func (x *Money) String() string { return protoimpl.X.MessageStringOf(x) } -func (*LocationMessage) ProtoMessage() {} +func (*Money) ProtoMessage() {} -func (x *LocationMessage) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[85] - if protoimpl.UnsafeEnabled && x != nil { +func (x *Money) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[110] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -12070,123 +15251,108 @@ func (x *LocationMessage) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use LocationMessage.ProtoReflect.Descriptor instead. -func (*LocationMessage) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{85} +// Deprecated: Use Money.ProtoReflect.Descriptor instead. +func (*Money) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{110} } -func (x *LocationMessage) GetDegreesLatitude() float64 { - if x != nil && x.DegreesLatitude != nil { - return *x.DegreesLatitude +func (x *Money) GetValue() int64 { + if x != nil && x.Value != nil { + return *x.Value } return 0 } -func (x *LocationMessage) GetDegreesLongitude() float64 { - if x != nil && x.DegreesLongitude != nil { - return *x.DegreesLongitude +func (x *Money) GetOffset() uint32 { + if x != nil && x.Offset != nil { + return *x.Offset } return 0 } -func (x *LocationMessage) GetName() string { - if x != nil && x.Name != nil { - return *x.Name +func (x *Money) GetCurrencyCode() string { + if x != nil && x.CurrencyCode != nil { + return *x.CurrencyCode } return "" } -func (x *LocationMessage) GetAddress() string { - if x != nil && x.Address != nil { - return *x.Address - } - return "" +type ActionLink struct { + state protoimpl.MessageState `protogen:"open.v1"` + URL *string `protobuf:"bytes,1,opt,name=URL" json:"URL,omitempty"` + ButtonTitle *string `protobuf:"bytes,2,opt,name=buttonTitle" json:"buttonTitle,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *LocationMessage) GetURL() string { - if x != nil && x.URL != nil { - return *x.URL - } - return "" +func (x *ActionLink) Reset() { + *x = ActionLink{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[111] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *LocationMessage) GetIsLive() bool { - if x != nil && x.IsLive != nil { - return *x.IsLive - } - return false +func (x *ActionLink) String() string { + return protoimpl.X.MessageStringOf(x) } -func (x *LocationMessage) GetAccuracyInMeters() uint32 { - if x != nil && x.AccuracyInMeters != nil { - return *x.AccuracyInMeters - } - return 0 -} +func (*ActionLink) ProtoMessage() {} -func (x *LocationMessage) GetSpeedInMps() float32 { - if x != nil && x.SpeedInMps != nil { - return *x.SpeedInMps +func (x *ActionLink) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[111] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return 0 + return mi.MessageOf(x) } -func (x *LocationMessage) GetDegreesClockwiseFromMagneticNorth() uint32 { - if x != nil && x.DegreesClockwiseFromMagneticNorth != nil { - return *x.DegreesClockwiseFromMagneticNorth - } - return 0 +// Deprecated: Use ActionLink.ProtoReflect.Descriptor instead. +func (*ActionLink) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{111} } -func (x *LocationMessage) GetComment() string { - if x != nil && x.Comment != nil { - return *x.Comment +func (x *ActionLink) GetURL() string { + if x != nil && x.URL != nil { + return *x.URL } return "" } -func (x *LocationMessage) GetJPEGThumbnail() []byte { - if x != nil { - return x.JPEGThumbnail - } - return nil -} - -func (x *LocationMessage) GetContextInfo() *ContextInfo { - if x != nil { - return x.ContextInfo +func (x *ActionLink) GetButtonTitle() string { + if x != nil && x.ButtonTitle != nil { + return *x.ButtonTitle } - return nil + return "" } -type ContactMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache +type GroupMention struct { + state protoimpl.MessageState `protogen:"open.v1"` + GroupJID *string `protobuf:"bytes,1,opt,name=groupJID" json:"groupJID,omitempty"` + GroupSubject *string `protobuf:"bytes,2,opt,name=groupSubject" json:"groupSubject,omitempty"` unknownFields protoimpl.UnknownFields - - DisplayName *string `protobuf:"bytes,1,opt,name=displayName" json:"displayName,omitempty"` - Vcard *string `protobuf:"bytes,16,opt,name=vcard" json:"vcard,omitempty"` - ContextInfo *ContextInfo `protobuf:"bytes,17,opt,name=contextInfo" json:"contextInfo,omitempty"` + sizeCache protoimpl.SizeCache } -func (x *ContactMessage) Reset() { - *x = ContactMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[86] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *GroupMention) Reset() { + *x = GroupMention{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[112] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *ContactMessage) String() string { +func (x *GroupMention) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ContactMessage) ProtoMessage() {} +func (*GroupMention) ProtoMessage() {} -func (x *ContactMessage) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[86] - if protoimpl.UnsafeEnabled && x != nil { +func (x *GroupMention) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[112] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -12196,59 +15362,50 @@ func (x *ContactMessage) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ContactMessage.ProtoReflect.Descriptor instead. -func (*ContactMessage) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{86} +// Deprecated: Use GroupMention.ProtoReflect.Descriptor instead. +func (*GroupMention) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{112} } -func (x *ContactMessage) GetDisplayName() string { - if x != nil && x.DisplayName != nil { - return *x.DisplayName +func (x *GroupMention) GetGroupJID() string { + if x != nil && x.GroupJID != nil { + return *x.GroupJID } return "" } -func (x *ContactMessage) GetVcard() string { - if x != nil && x.Vcard != nil { - return *x.Vcard +func (x *GroupMention) GetGroupSubject() string { + if x != nil && x.GroupSubject != nil { + return *x.GroupSubject } return "" } -func (x *ContactMessage) GetContextInfo() *ContextInfo { - if x != nil { - return x.ContextInfo - } - return nil -} - -type SenderKeyDistributionMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache +type MessageSecretMessage struct { + state protoimpl.MessageState `protogen:"open.v1"` + Version *int32 `protobuf:"fixed32,1,opt,name=version" json:"version,omitempty"` + EncIV []byte `protobuf:"bytes,2,opt,name=encIV" json:"encIV,omitempty"` + EncPayload []byte `protobuf:"bytes,3,opt,name=encPayload" json:"encPayload,omitempty"` unknownFields protoimpl.UnknownFields - - GroupID *string `protobuf:"bytes,1,opt,name=groupID" json:"groupID,omitempty"` - AxolotlSenderKeyDistributionMessage []byte `protobuf:"bytes,2,opt,name=axolotlSenderKeyDistributionMessage" json:"axolotlSenderKeyDistributionMessage,omitempty"` + sizeCache protoimpl.SizeCache } -func (x *SenderKeyDistributionMessage) Reset() { - *x = SenderKeyDistributionMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[87] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *MessageSecretMessage) Reset() { + *x = MessageSecretMessage{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[113] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *SenderKeyDistributionMessage) String() string { +func (x *MessageSecretMessage) String() string { return protoimpl.X.MessageStringOf(x) } -func (*SenderKeyDistributionMessage) ProtoMessage() {} +func (*MessageSecretMessage) ProtoMessage() {} -func (x *SenderKeyDistributionMessage) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[87] - if protoimpl.UnsafeEnabled && x != nil { +func (x *MessageSecretMessage) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[113] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -12258,55 +15415,57 @@ func (x *SenderKeyDistributionMessage) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use SenderKeyDistributionMessage.ProtoReflect.Descriptor instead. -func (*SenderKeyDistributionMessage) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{87} +// Deprecated: Use MessageSecretMessage.ProtoReflect.Descriptor instead. +func (*MessageSecretMessage) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{113} } -func (x *SenderKeyDistributionMessage) GetGroupID() string { - if x != nil && x.GroupID != nil { - return *x.GroupID +func (x *MessageSecretMessage) GetVersion() int32 { + if x != nil && x.Version != nil { + return *x.Version } - return "" + return 0 } -func (x *SenderKeyDistributionMessage) GetAxolotlSenderKeyDistributionMessage() []byte { +func (x *MessageSecretMessage) GetEncIV() []byte { if x != nil { - return x.AxolotlSenderKeyDistributionMessage + return x.EncIV } return nil } -type BotAvatarMetadata struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +func (x *MessageSecretMessage) GetEncPayload() []byte { + if x != nil { + return x.EncPayload + } + return nil +} - Sentiment *uint32 `protobuf:"varint,1,opt,name=sentiment" json:"sentiment,omitempty"` - BehaviorGraph *string `protobuf:"bytes,2,opt,name=behaviorGraph" json:"behaviorGraph,omitempty"` - Action *uint32 `protobuf:"varint,3,opt,name=action" json:"action,omitempty"` - Intensity *uint32 `protobuf:"varint,4,opt,name=intensity" json:"intensity,omitempty"` - WordCount *uint32 `protobuf:"varint,5,opt,name=wordCount" json:"wordCount,omitempty"` +type MediaNotifyMessage struct { + state protoimpl.MessageState `protogen:"open.v1"` + ExpressPathURL *string `protobuf:"bytes,1,opt,name=expressPathURL" json:"expressPathURL,omitempty"` + FileEncSHA256 []byte `protobuf:"bytes,2,opt,name=fileEncSHA256" json:"fileEncSHA256,omitempty"` + FileLength *uint64 `protobuf:"varint,3,opt,name=fileLength" json:"fileLength,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *BotAvatarMetadata) Reset() { - *x = BotAvatarMetadata{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[88] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *MediaNotifyMessage) Reset() { + *x = MediaNotifyMessage{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[114] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *BotAvatarMetadata) String() string { +func (x *MediaNotifyMessage) String() string { return protoimpl.X.MessageStringOf(x) } -func (*BotAvatarMetadata) ProtoMessage() {} +func (*MediaNotifyMessage) ProtoMessage() {} -func (x *BotAvatarMetadata) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[88] - if protoimpl.UnsafeEnabled && x != nil { +func (x *MediaNotifyMessage) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[114] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -12316,73 +15475,55 @@ func (x *BotAvatarMetadata) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use BotAvatarMetadata.ProtoReflect.Descriptor instead. -func (*BotAvatarMetadata) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{88} -} - -func (x *BotAvatarMetadata) GetSentiment() uint32 { - if x != nil && x.Sentiment != nil { - return *x.Sentiment - } - return 0 -} - -func (x *BotAvatarMetadata) GetBehaviorGraph() string { - if x != nil && x.BehaviorGraph != nil { - return *x.BehaviorGraph - } - return "" +// Deprecated: Use MediaNotifyMessage.ProtoReflect.Descriptor instead. +func (*MediaNotifyMessage) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{114} } -func (x *BotAvatarMetadata) GetAction() uint32 { - if x != nil && x.Action != nil { - return *x.Action +func (x *MediaNotifyMessage) GetExpressPathURL() string { + if x != nil && x.ExpressPathURL != nil { + return *x.ExpressPathURL } - return 0 + return "" } -func (x *BotAvatarMetadata) GetIntensity() uint32 { - if x != nil && x.Intensity != nil { - return *x.Intensity +func (x *MediaNotifyMessage) GetFileEncSHA256() []byte { + if x != nil { + return x.FileEncSHA256 } - return 0 + return nil } -func (x *BotAvatarMetadata) GetWordCount() uint32 { - if x != nil && x.WordCount != nil { - return *x.WordCount +func (x *MediaNotifyMessage) GetFileLength() uint64 { + if x != nil && x.FileLength != nil { + return *x.FileLength } return 0 } -type BotSuggestedPromptMetadata struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - SuggestedPrompts []string `protobuf:"bytes,1,rep,name=suggestedPrompts" json:"suggestedPrompts,omitempty"` - SelectedPromptIndex *uint32 `protobuf:"varint,2,opt,name=selectedPromptIndex" json:"selectedPromptIndex,omitempty"` +type LIDMigrationMappingSyncMessage struct { + state protoimpl.MessageState `protogen:"open.v1"` + EncodedMappingPayload []byte `protobuf:"bytes,1,opt,name=encodedMappingPayload" json:"encodedMappingPayload,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *BotSuggestedPromptMetadata) Reset() { - *x = BotSuggestedPromptMetadata{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[89] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *LIDMigrationMappingSyncMessage) Reset() { + *x = LIDMigrationMappingSyncMessage{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[115] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *BotSuggestedPromptMetadata) String() string { +func (x *LIDMigrationMappingSyncMessage) String() string { return protoimpl.X.MessageStringOf(x) } -func (*BotSuggestedPromptMetadata) ProtoMessage() {} +func (*LIDMigrationMappingSyncMessage) ProtoMessage() {} -func (x *BotSuggestedPromptMetadata) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[89] - if protoimpl.UnsafeEnabled && x != nil { +func (x *LIDMigrationMappingSyncMessage) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[115] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -12392,52 +15533,41 @@ func (x *BotSuggestedPromptMetadata) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use BotSuggestedPromptMetadata.ProtoReflect.Descriptor instead. -func (*BotSuggestedPromptMetadata) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{89} +// Deprecated: Use LIDMigrationMappingSyncMessage.ProtoReflect.Descriptor instead. +func (*LIDMigrationMappingSyncMessage) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{115} } -func (x *BotSuggestedPromptMetadata) GetSuggestedPrompts() []string { +func (x *LIDMigrationMappingSyncMessage) GetEncodedMappingPayload() []byte { if x != nil { - return x.SuggestedPrompts + return x.EncodedMappingPayload } return nil } -func (x *BotSuggestedPromptMetadata) GetSelectedPromptIndex() uint32 { - if x != nil && x.SelectedPromptIndex != nil { - return *x.SelectedPromptIndex - } - return 0 -} - -type BotSessionMetadata struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - SessionID *string `protobuf:"bytes,1,opt,name=sessionID" json:"sessionID,omitempty"` - SessionSource *SessionSource `protobuf:"varint,2,opt,name=sessionSource,enum=WAWebProtobufsE2E.SessionSource" json:"sessionSource,omitempty"` +type UrlTrackingMap struct { + state protoimpl.MessageState `protogen:"open.v1"` + UrlTrackingMapElements []*UrlTrackingMap_UrlTrackingMapElement `protobuf:"bytes,1,rep,name=urlTrackingMapElements" json:"urlTrackingMapElements,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *BotSessionMetadata) Reset() { - *x = BotSessionMetadata{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[90] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *UrlTrackingMap) Reset() { + *x = UrlTrackingMap{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[116] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *BotSessionMetadata) String() string { +func (x *UrlTrackingMap) String() string { return protoimpl.X.MessageStringOf(x) } -func (*BotSessionMetadata) ProtoMessage() {} +func (*UrlTrackingMap) ProtoMessage() {} -func (x *BotSessionMetadata) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[90] - if protoimpl.UnsafeEnabled && x != nil { +func (x *UrlTrackingMap) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[116] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -12447,51 +15577,42 @@ func (x *BotSessionMetadata) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use BotSessionMetadata.ProtoReflect.Descriptor instead. -func (*BotSessionMetadata) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{90} -} - -func (x *BotSessionMetadata) GetSessionID() string { - if x != nil && x.SessionID != nil { - return *x.SessionID - } - return "" +// Deprecated: Use UrlTrackingMap.ProtoReflect.Descriptor instead. +func (*UrlTrackingMap) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{116} } -func (x *BotSessionMetadata) GetSessionSource() SessionSource { - if x != nil && x.SessionSource != nil { - return *x.SessionSource +func (x *UrlTrackingMap) GetUrlTrackingMapElements() []*UrlTrackingMap_UrlTrackingMapElement { + if x != nil { + return x.UrlTrackingMapElements } - return SessionSource_NULL_STATE + return nil } -type BotMemuMetadata struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - FaceImages []*BotMediaMetadata `protobuf:"bytes,1,rep,name=faceImages" json:"faceImages,omitempty"` +type MemberLabel struct { + state protoimpl.MessageState `protogen:"open.v1"` + Label *string `protobuf:"bytes,1,opt,name=label" json:"label,omitempty"` + LabelTimestamp *int64 `protobuf:"varint,2,opt,name=labelTimestamp" json:"labelTimestamp,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *BotMemuMetadata) Reset() { - *x = BotMemuMetadata{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[91] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *MemberLabel) Reset() { + *x = MemberLabel{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[117] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *BotMemuMetadata) String() string { +func (x *MemberLabel) String() string { return protoimpl.X.MessageStringOf(x) } -func (*BotMemuMetadata) ProtoMessage() {} +func (*MemberLabel) ProtoMessage() {} -func (x *BotMemuMetadata) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[91] - if protoimpl.UnsafeEnabled && x != nil { +func (x *MemberLabel) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[117] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -12501,53 +15622,51 @@ func (x *BotMemuMetadata) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use BotMemuMetadata.ProtoReflect.Descriptor instead. -func (*BotMemuMetadata) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{91} +// Deprecated: Use MemberLabel.ProtoReflect.Descriptor instead. +func (*MemberLabel) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{117} } -func (x *BotMemuMetadata) GetFaceImages() []*BotMediaMetadata { - if x != nil { - return x.FaceImages +func (x *MemberLabel) GetLabel() string { + if x != nil && x.Label != nil { + return *x.Label } - return nil + return "" } -type BotMetadata struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - AvatarMetadata *BotAvatarMetadata `protobuf:"bytes,1,opt,name=avatarMetadata" json:"avatarMetadata,omitempty"` - PersonaID *string `protobuf:"bytes,2,opt,name=personaID" json:"personaID,omitempty"` - PluginMetadata *BotPluginMetadata `protobuf:"bytes,3,opt,name=pluginMetadata" json:"pluginMetadata,omitempty"` - SuggestedPromptMetadata *BotSuggestedPromptMetadata `protobuf:"bytes,4,opt,name=suggestedPromptMetadata" json:"suggestedPromptMetadata,omitempty"` - InvokerJID *string `protobuf:"bytes,5,opt,name=invokerJID" json:"invokerJID,omitempty"` - SearchMetadata *BotSessionMetadata `protobuf:"bytes,6,opt,name=searchMetadata" json:"searchMetadata,omitempty"` - MemuMetadata *BotMemuMetadata `protobuf:"bytes,7,opt,name=memuMetadata" json:"memuMetadata,omitempty"` - Timezone *string `protobuf:"bytes,8,opt,name=timezone" json:"timezone,omitempty"` - ReminderMetadata *BotReminderMetadata `protobuf:"bytes,9,opt,name=reminderMetadata" json:"reminderMetadata,omitempty"` - ModelMetadata *BotModelMetadata `protobuf:"bytes,10,opt,name=modelMetadata" json:"modelMetadata,omitempty"` -} - -func (x *BotMetadata) Reset() { - *x = BotMetadata{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[92] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) +func (x *MemberLabel) GetLabelTimestamp() int64 { + if x != nil && x.LabelTimestamp != nil { + return *x.LabelTimestamp } + return 0 +} + +type AIRichResponseMessage struct { + state protoimpl.MessageState `protogen:"open.v1"` + MessageType *waAICommon.AIRichResponseMessageType `protobuf:"varint,1,opt,name=messageType,enum=WAWebProtobufsAICommon.AIRichResponseMessageType" json:"messageType,omitempty"` + Submessages []*waAICommon.AIRichResponseSubMessage `protobuf:"bytes,2,rep,name=submessages" json:"submessages,omitempty"` + UnifiedResponse *waAICommon.AIRichResponseUnifiedResponse `protobuf:"bytes,3,opt,name=unifiedResponse" json:"unifiedResponse,omitempty"` + ContextInfo *ContextInfo `protobuf:"bytes,4,opt,name=contextInfo" json:"contextInfo,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *AIRichResponseMessage) Reset() { + *x = AIRichResponseMessage{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[118] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *BotMetadata) String() string { +func (x *AIRichResponseMessage) String() string { return protoimpl.X.MessageStringOf(x) } -func (*BotMetadata) ProtoMessage() {} +func (*AIRichResponseMessage) ProtoMessage() {} -func (x *BotMetadata) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[92] - if protoimpl.UnsafeEnabled && x != nil { +func (x *AIRichResponseMessage) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[118] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -12557,114 +15676,127 @@ func (x *BotMetadata) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use BotMetadata.ProtoReflect.Descriptor instead. -func (*BotMetadata) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{92} +// Deprecated: Use AIRichResponseMessage.ProtoReflect.Descriptor instead. +func (*AIRichResponseMessage) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{118} } -func (x *BotMetadata) GetAvatarMetadata() *BotAvatarMetadata { - if x != nil { - return x.AvatarMetadata +func (x *AIRichResponseMessage) GetMessageType() waAICommon.AIRichResponseMessageType { + if x != nil && x.MessageType != nil { + return *x.MessageType } - return nil + return waAICommon.AIRichResponseMessageType(0) } -func (x *BotMetadata) GetPersonaID() string { - if x != nil && x.PersonaID != nil { - return *x.PersonaID +func (x *AIRichResponseMessage) GetSubmessages() []*waAICommon.AIRichResponseSubMessage { + if x != nil { + return x.Submessages } - return "" + return nil } -func (x *BotMetadata) GetPluginMetadata() *BotPluginMetadata { +func (x *AIRichResponseMessage) GetUnifiedResponse() *waAICommon.AIRichResponseUnifiedResponse { if x != nil { - return x.PluginMetadata + return x.UnifiedResponse } return nil } -func (x *BotMetadata) GetSuggestedPromptMetadata() *BotSuggestedPromptMetadata { +func (x *AIRichResponseMessage) GetContextInfo() *ContextInfo { if x != nil { - return x.SuggestedPromptMetadata + return x.ContextInfo } return nil } -func (x *BotMetadata) GetInvokerJID() string { - if x != nil && x.InvokerJID != nil { - return *x.InvokerJID - } - return "" +type AIQueryFanout struct { + state protoimpl.MessageState `protogen:"open.v1"` + MessageKey *waCommon.MessageKey `protobuf:"bytes,1,opt,name=messageKey" json:"messageKey,omitempty"` + Message *Message `protobuf:"bytes,2,opt,name=message" json:"message,omitempty"` + Timestamp *int64 `protobuf:"varint,3,opt,name=timestamp" json:"timestamp,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *BotMetadata) GetSearchMetadata() *BotSessionMetadata { - if x != nil { - return x.SearchMetadata - } - return nil +func (x *AIQueryFanout) Reset() { + *x = AIQueryFanout{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[119] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *BotMetadata) GetMemuMetadata() *BotMemuMetadata { +func (x *AIQueryFanout) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AIQueryFanout) ProtoMessage() {} + +func (x *AIQueryFanout) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[119] if x != nil { - return x.MemuMetadata + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return nil + return mi.MessageOf(x) } -func (x *BotMetadata) GetTimezone() string { - if x != nil && x.Timezone != nil { - return *x.Timezone - } - return "" +// Deprecated: Use AIQueryFanout.ProtoReflect.Descriptor instead. +func (*AIQueryFanout) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{119} } -func (x *BotMetadata) GetReminderMetadata() *BotReminderMetadata { +func (x *AIQueryFanout) GetMessageKey() *waCommon.MessageKey { if x != nil { - return x.ReminderMetadata + return x.MessageKey } return nil } -func (x *BotMetadata) GetModelMetadata() *BotModelMetadata { +func (x *AIQueryFanout) GetMessage() *Message { if x != nil { - return x.ModelMetadata + return x.Message } return nil } -type DeviceListMetadata struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +func (x *AIQueryFanout) GetTimestamp() int64 { + if x != nil && x.Timestamp != nil { + return *x.Timestamp + } + return 0 +} - SenderKeyHash []byte `protobuf:"bytes,1,opt,name=senderKeyHash" json:"senderKeyHash,omitempty"` - SenderTimestamp *uint64 `protobuf:"varint,2,opt,name=senderTimestamp" json:"senderTimestamp,omitempty"` - SenderKeyIndexes []uint32 `protobuf:"varint,3,rep,packed,name=senderKeyIndexes" json:"senderKeyIndexes,omitempty"` - SenderAccountType *waAdv.ADVEncryptionType `protobuf:"varint,4,opt,name=senderAccountType,enum=WAAdv.ADVEncryptionType" json:"senderAccountType,omitempty"` - ReceiverAccountType *waAdv.ADVEncryptionType `protobuf:"varint,5,opt,name=receiverAccountType,enum=WAAdv.ADVEncryptionType" json:"receiverAccountType,omitempty"` - RecipientKeyHash []byte `protobuf:"bytes,8,opt,name=recipientKeyHash" json:"recipientKeyHash,omitempty"` - RecipientTimestamp *uint64 `protobuf:"varint,9,opt,name=recipientTimestamp" json:"recipientTimestamp,omitempty"` - RecipientKeyIndexes []uint32 `protobuf:"varint,10,rep,packed,name=recipientKeyIndexes" json:"recipientKeyIndexes,omitempty"` +type StickerPackMessage_Sticker struct { + state protoimpl.MessageState `protogen:"open.v1"` + FileName *string `protobuf:"bytes,1,opt,name=fileName" json:"fileName,omitempty"` + IsAnimated *bool `protobuf:"varint,2,opt,name=isAnimated" json:"isAnimated,omitempty"` + Emojis []string `protobuf:"bytes,3,rep,name=emojis" json:"emojis,omitempty"` + AccessibilityLabel *string `protobuf:"bytes,4,opt,name=accessibilityLabel" json:"accessibilityLabel,omitempty"` + IsLottie *bool `protobuf:"varint,5,opt,name=isLottie" json:"isLottie,omitempty"` + Mimetype *string `protobuf:"bytes,6,opt,name=mimetype" json:"mimetype,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *DeviceListMetadata) Reset() { - *x = DeviceListMetadata{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[93] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *StickerPackMessage_Sticker) Reset() { + *x = StickerPackMessage_Sticker{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[120] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *DeviceListMetadata) String() string { +func (x *StickerPackMessage_Sticker) String() string { return protoimpl.X.MessageStringOf(x) } -func (*DeviceListMetadata) ProtoMessage() {} +func (*StickerPackMessage_Sticker) ProtoMessage() {} -func (x *DeviceListMetadata) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[93] - if protoimpl.UnsafeEnabled && x != nil { +func (x *StickerPackMessage_Sticker) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[120] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -12674,94 +15806,77 @@ func (x *DeviceListMetadata) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use DeviceListMetadata.ProtoReflect.Descriptor instead. -func (*DeviceListMetadata) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{93} +// Deprecated: Use StickerPackMessage_Sticker.ProtoReflect.Descriptor instead. +func (*StickerPackMessage_Sticker) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{0, 0} } -func (x *DeviceListMetadata) GetSenderKeyHash() []byte { - if x != nil { - return x.SenderKeyHash +func (x *StickerPackMessage_Sticker) GetFileName() string { + if x != nil && x.FileName != nil { + return *x.FileName } - return nil + return "" } -func (x *DeviceListMetadata) GetSenderTimestamp() uint64 { - if x != nil && x.SenderTimestamp != nil { - return *x.SenderTimestamp +func (x *StickerPackMessage_Sticker) GetIsAnimated() bool { + if x != nil && x.IsAnimated != nil { + return *x.IsAnimated } - return 0 + return false } -func (x *DeviceListMetadata) GetSenderKeyIndexes() []uint32 { +func (x *StickerPackMessage_Sticker) GetEmojis() []string { if x != nil { - return x.SenderKeyIndexes + return x.Emojis } return nil } -func (x *DeviceListMetadata) GetSenderAccountType() waAdv.ADVEncryptionType { - if x != nil && x.SenderAccountType != nil { - return *x.SenderAccountType - } - return waAdv.ADVEncryptionType(0) -} - -func (x *DeviceListMetadata) GetReceiverAccountType() waAdv.ADVEncryptionType { - if x != nil && x.ReceiverAccountType != nil { - return *x.ReceiverAccountType - } - return waAdv.ADVEncryptionType(0) -} - -func (x *DeviceListMetadata) GetRecipientKeyHash() []byte { - if x != nil { - return x.RecipientKeyHash +func (x *StickerPackMessage_Sticker) GetAccessibilityLabel() string { + if x != nil && x.AccessibilityLabel != nil { + return *x.AccessibilityLabel } - return nil + return "" } -func (x *DeviceListMetadata) GetRecipientTimestamp() uint64 { - if x != nil && x.RecipientTimestamp != nil { - return *x.RecipientTimestamp +func (x *StickerPackMessage_Sticker) GetIsLottie() bool { + if x != nil && x.IsLottie != nil { + return *x.IsLottie } - return 0 + return false } -func (x *DeviceListMetadata) GetRecipientKeyIndexes() []uint32 { - if x != nil { - return x.RecipientKeyIndexes +func (x *StickerPackMessage_Sticker) GetMimetype() string { + if x != nil && x.Mimetype != nil { + return *x.Mimetype } - return nil + return "" } -type EmbeddedMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache +type CallLogMessage_CallParticipant struct { + state protoimpl.MessageState `protogen:"open.v1"` + JID *string `protobuf:"bytes,1,opt,name=JID" json:"JID,omitempty"` + CallOutcome *CallLogMessage_CallOutcome `protobuf:"varint,2,opt,name=callOutcome,enum=WAWebProtobufsE2E.CallLogMessage_CallOutcome" json:"callOutcome,omitempty"` unknownFields protoimpl.UnknownFields - - StanzaID *string `protobuf:"bytes,1,opt,name=stanzaID" json:"stanzaID,omitempty"` - Message *Message `protobuf:"bytes,2,opt,name=message" json:"message,omitempty"` + sizeCache protoimpl.SizeCache } -func (x *EmbeddedMessage) Reset() { - *x = EmbeddedMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[94] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *CallLogMessage_CallParticipant) Reset() { + *x = CallLogMessage_CallParticipant{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[121] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *EmbeddedMessage) String() string { +func (x *CallLogMessage_CallParticipant) String() string { return protoimpl.X.MessageStringOf(x) } -func (*EmbeddedMessage) ProtoMessage() {} +func (*CallLogMessage_CallParticipant) ProtoMessage() {} -func (x *EmbeddedMessage) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[94] - if protoimpl.UnsafeEnabled && x != nil { +func (x *CallLogMessage_CallParticipant) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[121] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -12771,59 +15886,51 @@ func (x *EmbeddedMessage) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use EmbeddedMessage.ProtoReflect.Descriptor instead. -func (*EmbeddedMessage) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{94} +// Deprecated: Use CallLogMessage_CallParticipant.ProtoReflect.Descriptor instead. +func (*CallLogMessage_CallParticipant) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{3, 0} } -func (x *EmbeddedMessage) GetStanzaID() string { - if x != nil && x.StanzaID != nil { - return *x.StanzaID +func (x *CallLogMessage_CallParticipant) GetJID() string { + if x != nil && x.JID != nil { + return *x.JID } return "" } -func (x *EmbeddedMessage) GetMessage() *Message { - if x != nil { - return x.Message +func (x *CallLogMessage_CallParticipant) GetCallOutcome() CallLogMessage_CallOutcome { + if x != nil && x.CallOutcome != nil { + return *x.CallOutcome } - return nil + return CallLogMessage_CONNECTED } -type EmbeddedMusic struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - MusicContentMediaID *string `protobuf:"bytes,1,opt,name=musicContentMediaID" json:"musicContentMediaID,omitempty"` - SongID *string `protobuf:"bytes,2,opt,name=songID" json:"songID,omitempty"` - Author *string `protobuf:"bytes,3,opt,name=author" json:"author,omitempty"` - Title *string `protobuf:"bytes,4,opt,name=title" json:"title,omitempty"` - ArtworkDirectPath *string `protobuf:"bytes,5,opt,name=artworkDirectPath" json:"artworkDirectPath,omitempty"` - ArtworkSHA256 []byte `protobuf:"bytes,6,opt,name=artworkSHA256" json:"artworkSHA256,omitempty"` - ArtworkEncSHA256 []byte `protobuf:"bytes,7,opt,name=artworkEncSHA256" json:"artworkEncSHA256,omitempty"` - ArtistAttribution *string `protobuf:"bytes,8,opt,name=artistAttribution" json:"artistAttribution,omitempty"` - CountryBlocklist []byte `protobuf:"bytes,9,opt,name=countryBlocklist" json:"countryBlocklist,omitempty"` +type ButtonsMessage_Button struct { + state protoimpl.MessageState `protogen:"open.v1"` + ButtonID *string `protobuf:"bytes,1,opt,name=buttonID" json:"buttonID,omitempty"` + ButtonText *ButtonsMessage_Button_ButtonText `protobuf:"bytes,2,opt,name=buttonText" json:"buttonText,omitempty"` + Type *ButtonsMessage_Button_Type `protobuf:"varint,3,opt,name=type,enum=WAWebProtobufsE2E.ButtonsMessage_Button_Type" json:"type,omitempty"` + NativeFlowInfo *ButtonsMessage_Button_NativeFlowInfo `protobuf:"bytes,4,opt,name=nativeFlowInfo" json:"nativeFlowInfo,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *EmbeddedMusic) Reset() { - *x = EmbeddedMusic{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[95] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *ButtonsMessage_Button) Reset() { + *x = ButtonsMessage_Button{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[122] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *EmbeddedMusic) String() string { +func (x *ButtonsMessage_Button) String() string { return protoimpl.X.MessageStringOf(x) } -func (*EmbeddedMusic) ProtoMessage() {} +func (*ButtonsMessage_Button) ProtoMessage() {} -func (x *EmbeddedMusic) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[95] - if protoimpl.UnsafeEnabled && x != nil { +func (x *ButtonsMessage_Button) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[122] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -12833,104 +15940,63 @@ func (x *EmbeddedMusic) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use EmbeddedMusic.ProtoReflect.Descriptor instead. -func (*EmbeddedMusic) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{95} -} - -func (x *EmbeddedMusic) GetMusicContentMediaID() string { - if x != nil && x.MusicContentMediaID != nil { - return *x.MusicContentMediaID - } - return "" -} - -func (x *EmbeddedMusic) GetSongID() string { - if x != nil && x.SongID != nil { - return *x.SongID - } - return "" -} - -func (x *EmbeddedMusic) GetAuthor() string { - if x != nil && x.Author != nil { - return *x.Author - } - return "" -} - -func (x *EmbeddedMusic) GetTitle() string { - if x != nil && x.Title != nil { - return *x.Title - } - return "" +// Deprecated: Use ButtonsMessage_Button.ProtoReflect.Descriptor instead. +func (*ButtonsMessage_Button) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{10, 0} } -func (x *EmbeddedMusic) GetArtworkDirectPath() string { - if x != nil && x.ArtworkDirectPath != nil { - return *x.ArtworkDirectPath +func (x *ButtonsMessage_Button) GetButtonID() string { + if x != nil && x.ButtonID != nil { + return *x.ButtonID } return "" } -func (x *EmbeddedMusic) GetArtworkSHA256() []byte { - if x != nil { - return x.ArtworkSHA256 - } - return nil -} - -func (x *EmbeddedMusic) GetArtworkEncSHA256() []byte { +func (x *ButtonsMessage_Button) GetButtonText() *ButtonsMessage_Button_ButtonText { if x != nil { - return x.ArtworkEncSHA256 + return x.ButtonText } return nil } -func (x *EmbeddedMusic) GetArtistAttribution() string { - if x != nil && x.ArtistAttribution != nil { - return *x.ArtistAttribution +func (x *ButtonsMessage_Button) GetType() ButtonsMessage_Button_Type { + if x != nil && x.Type != nil { + return *x.Type } - return "" + return ButtonsMessage_Button_UNKNOWN } -func (x *EmbeddedMusic) GetCountryBlocklist() []byte { +func (x *ButtonsMessage_Button) GetNativeFlowInfo() *ButtonsMessage_Button_NativeFlowInfo { if x != nil { - return x.CountryBlocklist + return x.NativeFlowInfo } return nil } -type EmbeddedContent struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache +type ButtonsMessage_Button_NativeFlowInfo struct { + state protoimpl.MessageState `protogen:"open.v1"` + Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + ParamsJSON *string `protobuf:"bytes,2,opt,name=paramsJSON" json:"paramsJSON,omitempty"` unknownFields protoimpl.UnknownFields - - // Types that are assignable to Content: - // - // *EmbeddedContent_EmbeddedMessage - // *EmbeddedContent_EmbeddedMusic - Content isEmbeddedContent_Content `protobuf_oneof:"content"` + sizeCache protoimpl.SizeCache } -func (x *EmbeddedContent) Reset() { - *x = EmbeddedContent{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[96] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *ButtonsMessage_Button_NativeFlowInfo) Reset() { + *x = ButtonsMessage_Button_NativeFlowInfo{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[123] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *EmbeddedContent) String() string { +func (x *ButtonsMessage_Button_NativeFlowInfo) String() string { return protoimpl.X.MessageStringOf(x) } -func (*EmbeddedContent) ProtoMessage() {} +func (*ButtonsMessage_Button_NativeFlowInfo) ProtoMessage() {} -func (x *EmbeddedContent) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[96] - if protoimpl.UnsafeEnabled && x != nil { +func (x *ButtonsMessage_Button_NativeFlowInfo) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[123] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -12940,82 +16006,93 @@ func (x *EmbeddedContent) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use EmbeddedContent.ProtoReflect.Descriptor instead. -func (*EmbeddedContent) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{96} +// Deprecated: Use ButtonsMessage_Button_NativeFlowInfo.ProtoReflect.Descriptor instead. +func (*ButtonsMessage_Button_NativeFlowInfo) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{10, 0, 0} } -func (m *EmbeddedContent) GetContent() isEmbeddedContent_Content { - if m != nil { - return m.Content +func (x *ButtonsMessage_Button_NativeFlowInfo) GetName() string { + if x != nil && x.Name != nil { + return *x.Name } - return nil + return "" } -func (x *EmbeddedContent) GetEmbeddedMessage() *EmbeddedMessage { - if x, ok := x.GetContent().(*EmbeddedContent_EmbeddedMessage); ok { - return x.EmbeddedMessage +func (x *ButtonsMessage_Button_NativeFlowInfo) GetParamsJSON() string { + if x != nil && x.ParamsJSON != nil { + return *x.ParamsJSON } - return nil + return "" } -func (x *EmbeddedContent) GetEmbeddedMusic() *EmbeddedMusic { - if x, ok := x.GetContent().(*EmbeddedContent_EmbeddedMusic); ok { - return x.EmbeddedMusic - } - return nil +type ButtonsMessage_Button_ButtonText struct { + state protoimpl.MessageState `protogen:"open.v1"` + DisplayText *string `protobuf:"bytes,1,opt,name=displayText" json:"displayText,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -type isEmbeddedContent_Content interface { - isEmbeddedContent_Content() +func (x *ButtonsMessage_Button_ButtonText) Reset() { + *x = ButtonsMessage_Button_ButtonText{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[124] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -type EmbeddedContent_EmbeddedMessage struct { - EmbeddedMessage *EmbeddedMessage `protobuf:"bytes,1,opt,name=embeddedMessage,oneof"` +func (x *ButtonsMessage_Button_ButtonText) String() string { + return protoimpl.X.MessageStringOf(x) } -type EmbeddedContent_EmbeddedMusic struct { - EmbeddedMusic *EmbeddedMusic `protobuf:"bytes,2,opt,name=embeddedMusic,oneof"` +func (*ButtonsMessage_Button_ButtonText) ProtoMessage() {} + +func (x *ButtonsMessage_Button_ButtonText) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[124] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -func (*EmbeddedContent_EmbeddedMessage) isEmbeddedContent_Content() {} +// Deprecated: Use ButtonsMessage_Button_ButtonText.ProtoReflect.Descriptor instead. +func (*ButtonsMessage_Button_ButtonText) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{10, 0, 1} +} -func (*EmbeddedContent_EmbeddedMusic) isEmbeddedContent_Content() {} +func (x *ButtonsMessage_Button_ButtonText) GetDisplayText() string { + if x != nil && x.DisplayText != nil { + return *x.DisplayText + } + return "" +} -type InteractiveAnnotation struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache +type InteractiveResponseMessage_Body struct { + state protoimpl.MessageState `protogen:"open.v1"` + Text *string `protobuf:"bytes,1,opt,name=text" json:"text,omitempty"` + Format *InteractiveResponseMessage_Body_Format `protobuf:"varint,2,opt,name=format,enum=WAWebProtobufsE2E.InteractiveResponseMessage_Body_Format" json:"format,omitempty"` unknownFields protoimpl.UnknownFields - - // Types that are assignable to Action: - // - // *InteractiveAnnotation_Location - // *InteractiveAnnotation_Newsletter - // *InteractiveAnnotation_EmbeddedAction - Action isInteractiveAnnotation_Action `protobuf_oneof:"action"` - PolygonVertices []*Point `protobuf:"bytes,1,rep,name=polygonVertices" json:"polygonVertices,omitempty"` - ShouldSkipConfirmation *bool `protobuf:"varint,4,opt,name=shouldSkipConfirmation" json:"shouldSkipConfirmation,omitempty"` - EmbeddedContent *EmbeddedContent `protobuf:"bytes,5,opt,name=embeddedContent" json:"embeddedContent,omitempty"` + sizeCache protoimpl.SizeCache } -func (x *InteractiveAnnotation) Reset() { - *x = InteractiveAnnotation{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[97] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *InteractiveResponseMessage_Body) Reset() { + *x = InteractiveResponseMessage_Body{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[125] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *InteractiveAnnotation) String() string { +func (x *InteractiveResponseMessage_Body) String() string { return protoimpl.X.MessageStringOf(x) } -func (*InteractiveAnnotation) ProtoMessage() {} +func (*InteractiveResponseMessage_Body) ProtoMessage() {} -func (x *InteractiveAnnotation) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[97] - if protoimpl.UnsafeEnabled && x != nil { +func (x *InteractiveResponseMessage_Body) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[125] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -13025,111 +16102,110 @@ func (x *InteractiveAnnotation) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use InteractiveAnnotation.ProtoReflect.Descriptor instead. -func (*InteractiveAnnotation) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{97} +// Deprecated: Use InteractiveResponseMessage_Body.ProtoReflect.Descriptor instead. +func (*InteractiveResponseMessage_Body) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{13, 0} } -func (m *InteractiveAnnotation) GetAction() isInteractiveAnnotation_Action { - if m != nil { - return m.Action +func (x *InteractiveResponseMessage_Body) GetText() string { + if x != nil && x.Text != nil { + return *x.Text } - return nil + return "" } -func (x *InteractiveAnnotation) GetLocation() *Location { - if x, ok := x.GetAction().(*InteractiveAnnotation_Location); ok { - return x.Location +func (x *InteractiveResponseMessage_Body) GetFormat() InteractiveResponseMessage_Body_Format { + if x != nil && x.Format != nil { + return *x.Format } - return nil + return InteractiveResponseMessage_Body_DEFAULT } -func (x *InteractiveAnnotation) GetNewsletter() *ContextInfo_ForwardedNewsletterMessageInfo { - if x, ok := x.GetAction().(*InteractiveAnnotation_Newsletter); ok { - return x.Newsletter - } - return nil +type InteractiveResponseMessage_NativeFlowResponseMessage struct { + state protoimpl.MessageState `protogen:"open.v1"` + Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + ParamsJSON *string `protobuf:"bytes,2,opt,name=paramsJSON" json:"paramsJSON,omitempty"` + Version *int32 `protobuf:"varint,3,opt,name=version" json:"version,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *InteractiveAnnotation) GetEmbeddedAction() bool { - if x, ok := x.GetAction().(*InteractiveAnnotation_EmbeddedAction); ok { - return x.EmbeddedAction - } - return false +func (x *InteractiveResponseMessage_NativeFlowResponseMessage) Reset() { + *x = InteractiveResponseMessage_NativeFlowResponseMessage{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[126] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *InteractiveAnnotation) GetPolygonVertices() []*Point { - if x != nil { - return x.PolygonVertices - } - return nil +func (x *InteractiveResponseMessage_NativeFlowResponseMessage) String() string { + return protoimpl.X.MessageStringOf(x) } -func (x *InteractiveAnnotation) GetShouldSkipConfirmation() bool { - if x != nil && x.ShouldSkipConfirmation != nil { - return *x.ShouldSkipConfirmation - } - return false -} +func (*InteractiveResponseMessage_NativeFlowResponseMessage) ProtoMessage() {} -func (x *InteractiveAnnotation) GetEmbeddedContent() *EmbeddedContent { +func (x *InteractiveResponseMessage_NativeFlowResponseMessage) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[126] if x != nil { - return x.EmbeddedContent + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return nil -} - -type isInteractiveAnnotation_Action interface { - isInteractiveAnnotation_Action() + return mi.MessageOf(x) } -type InteractiveAnnotation_Location struct { - Location *Location `protobuf:"bytes,2,opt,name=location,oneof"` +// Deprecated: Use InteractiveResponseMessage_NativeFlowResponseMessage.ProtoReflect.Descriptor instead. +func (*InteractiveResponseMessage_NativeFlowResponseMessage) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{13, 1} } -type InteractiveAnnotation_Newsletter struct { - Newsletter *ContextInfo_ForwardedNewsletterMessageInfo `protobuf:"bytes,3,opt,name=newsletter,oneof"` +func (x *InteractiveResponseMessage_NativeFlowResponseMessage) GetName() string { + if x != nil && x.Name != nil { + return *x.Name + } + return "" } -type InteractiveAnnotation_EmbeddedAction struct { - EmbeddedAction bool `protobuf:"varint,6,opt,name=embeddedAction,oneof"` +func (x *InteractiveResponseMessage_NativeFlowResponseMessage) GetParamsJSON() string { + if x != nil && x.ParamsJSON != nil { + return *x.ParamsJSON + } + return "" } -func (*InteractiveAnnotation_Location) isInteractiveAnnotation_Action() {} - -func (*InteractiveAnnotation_Newsletter) isInteractiveAnnotation_Action() {} - -func (*InteractiveAnnotation_EmbeddedAction) isInteractiveAnnotation_Action() {} - -type Point struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +func (x *InteractiveResponseMessage_NativeFlowResponseMessage) GetVersion() int32 { + if x != nil && x.Version != nil { + return *x.Version + } + return 0 +} - XDeprecated *int32 `protobuf:"varint,1,opt,name=xDeprecated" json:"xDeprecated,omitempty"` - YDeprecated *int32 `protobuf:"varint,2,opt,name=yDeprecated" json:"yDeprecated,omitempty"` - X *float64 `protobuf:"fixed64,3,opt,name=x" json:"x,omitempty"` - Y *float64 `protobuf:"fixed64,4,opt,name=y" json:"y,omitempty"` +type InteractiveMessage_CarouselMessage struct { + state protoimpl.MessageState `protogen:"open.v1"` + Cards []*InteractiveMessage `protobuf:"bytes,1,rep,name=cards" json:"cards,omitempty"` + MessageVersion *int32 `protobuf:"varint,2,opt,name=messageVersion" json:"messageVersion,omitempty"` + CarouselCardType *InteractiveMessage_CarouselMessage_CarouselCardType `protobuf:"varint,3,opt,name=carouselCardType,enum=WAWebProtobufsE2E.InteractiveMessage_CarouselMessage_CarouselCardType" json:"carouselCardType,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *Point) Reset() { - *x = Point{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[98] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *InteractiveMessage_CarouselMessage) Reset() { + *x = InteractiveMessage_CarouselMessage{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[127] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *Point) String() string { +func (x *InteractiveMessage_CarouselMessage) String() string { return protoimpl.X.MessageStringOf(x) } -func (*Point) ProtoMessage() {} +func (*InteractiveMessage_CarouselMessage) ProtoMessage() {} -func (x *Point) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[98] - if protoimpl.UnsafeEnabled && x != nil { +func (x *InteractiveMessage_CarouselMessage) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[127] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -13139,67 +16215,57 @@ func (x *Point) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use Point.ProtoReflect.Descriptor instead. -func (*Point) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{98} -} - -func (x *Point) GetXDeprecated() int32 { - if x != nil && x.XDeprecated != nil { - return *x.XDeprecated - } - return 0 +// Deprecated: Use InteractiveMessage_CarouselMessage.ProtoReflect.Descriptor instead. +func (*InteractiveMessage_CarouselMessage) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{14, 0} } -func (x *Point) GetYDeprecated() int32 { - if x != nil && x.YDeprecated != nil { - return *x.YDeprecated +func (x *InteractiveMessage_CarouselMessage) GetCards() []*InteractiveMessage { + if x != nil { + return x.Cards } - return 0 + return nil } -func (x *Point) GetX() float64 { - if x != nil && x.X != nil { - return *x.X +func (x *InteractiveMessage_CarouselMessage) GetMessageVersion() int32 { + if x != nil && x.MessageVersion != nil { + return *x.MessageVersion } return 0 } -func (x *Point) GetY() float64 { - if x != nil && x.Y != nil { - return *x.Y +func (x *InteractiveMessage_CarouselMessage) GetCarouselCardType() InteractiveMessage_CarouselMessage_CarouselCardType { + if x != nil && x.CarouselCardType != nil { + return *x.CarouselCardType } - return 0 + return InteractiveMessage_CarouselMessage_UNKNOWN } -type Location struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - DegreesLatitude *float64 `protobuf:"fixed64,1,opt,name=degreesLatitude" json:"degreesLatitude,omitempty"` - DegreesLongitude *float64 `protobuf:"fixed64,2,opt,name=degreesLongitude" json:"degreesLongitude,omitempty"` - Name *string `protobuf:"bytes,3,opt,name=name" json:"name,omitempty"` +type InteractiveMessage_ShopMessage struct { + state protoimpl.MessageState `protogen:"open.v1"` + ID *string `protobuf:"bytes,1,opt,name=ID" json:"ID,omitempty"` + Surface *InteractiveMessage_ShopMessage_Surface `protobuf:"varint,2,opt,name=surface,enum=WAWebProtobufsE2E.InteractiveMessage_ShopMessage_Surface" json:"surface,omitempty"` + MessageVersion *int32 `protobuf:"varint,3,opt,name=messageVersion" json:"messageVersion,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *Location) Reset() { - *x = Location{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[99] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *InteractiveMessage_ShopMessage) Reset() { + *x = InteractiveMessage_ShopMessage{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[128] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *Location) String() string { +func (x *InteractiveMessage_ShopMessage) String() string { return protoimpl.X.MessageStringOf(x) } -func (*Location) ProtoMessage() {} +func (*InteractiveMessage_ShopMessage) ProtoMessage() {} -func (x *Location) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[99] - if protoimpl.UnsafeEnabled && x != nil { +func (x *InteractiveMessage_ShopMessage) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[128] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -13209,64 +16275,57 @@ func (x *Location) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use Location.ProtoReflect.Descriptor instead. -func (*Location) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{99} +// Deprecated: Use InteractiveMessage_ShopMessage.ProtoReflect.Descriptor instead. +func (*InteractiveMessage_ShopMessage) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{14, 1} } -func (x *Location) GetDegreesLatitude() float64 { - if x != nil && x.DegreesLatitude != nil { - return *x.DegreesLatitude +func (x *InteractiveMessage_ShopMessage) GetID() string { + if x != nil && x.ID != nil { + return *x.ID } - return 0 + return "" } -func (x *Location) GetDegreesLongitude() float64 { - if x != nil && x.DegreesLongitude != nil { - return *x.DegreesLongitude +func (x *InteractiveMessage_ShopMessage) GetSurface() InteractiveMessage_ShopMessage_Surface { + if x != nil && x.Surface != nil { + return *x.Surface } - return 0 + return InteractiveMessage_ShopMessage_UNKNOWN_SURFACE } -func (x *Location) GetName() string { - if x != nil && x.Name != nil { - return *x.Name +func (x *InteractiveMessage_ShopMessage) GetMessageVersion() int32 { + if x != nil && x.MessageVersion != nil { + return *x.MessageVersion } - return "" + return 0 } -type TemplateButton struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Types that are assignable to Button: - // - // *TemplateButton_QuickReplyButton_ - // *TemplateButton_UrlButton - // *TemplateButton_CallButton_ - Button isTemplateButton_Button `protobuf_oneof:"button"` - Index *uint32 `protobuf:"varint,4,opt,name=index" json:"index,omitempty"` +type InteractiveMessage_NativeFlowMessage struct { + state protoimpl.MessageState `protogen:"open.v1"` + Buttons []*InteractiveMessage_NativeFlowMessage_NativeFlowButton `protobuf:"bytes,1,rep,name=buttons" json:"buttons,omitempty"` + MessageParamsJSON *string `protobuf:"bytes,2,opt,name=messageParamsJSON" json:"messageParamsJSON,omitempty"` + MessageVersion *int32 `protobuf:"varint,3,opt,name=messageVersion" json:"messageVersion,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *TemplateButton) Reset() { - *x = TemplateButton{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[100] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *InteractiveMessage_NativeFlowMessage) Reset() { + *x = InteractiveMessage_NativeFlowMessage{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[129] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *TemplateButton) String() string { +func (x *InteractiveMessage_NativeFlowMessage) String() string { return protoimpl.X.MessageStringOf(x) } -func (*TemplateButton) ProtoMessage() {} +func (*InteractiveMessage_NativeFlowMessage) ProtoMessage() {} -func (x *TemplateButton) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[100] - if protoimpl.UnsafeEnabled && x != nil { +func (x *InteractiveMessage_NativeFlowMessage) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[129] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -13276,96 +16335,117 @@ func (x *TemplateButton) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use TemplateButton.ProtoReflect.Descriptor instead. -func (*TemplateButton) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{100} +// Deprecated: Use InteractiveMessage_NativeFlowMessage.ProtoReflect.Descriptor instead. +func (*InteractiveMessage_NativeFlowMessage) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{14, 2} } -func (m *TemplateButton) GetButton() isTemplateButton_Button { - if m != nil { - return m.Button +func (x *InteractiveMessage_NativeFlowMessage) GetButtons() []*InteractiveMessage_NativeFlowMessage_NativeFlowButton { + if x != nil { + return x.Buttons } return nil } -func (x *TemplateButton) GetQuickReplyButton() *TemplateButton_QuickReplyButton { - if x, ok := x.GetButton().(*TemplateButton_QuickReplyButton_); ok { - return x.QuickReplyButton +func (x *InteractiveMessage_NativeFlowMessage) GetMessageParamsJSON() string { + if x != nil && x.MessageParamsJSON != nil { + return *x.MessageParamsJSON } - return nil + return "" } -func (x *TemplateButton) GetUrlButton() *TemplateButton_URLButton { - if x, ok := x.GetButton().(*TemplateButton_UrlButton); ok { - return x.UrlButton +func (x *InteractiveMessage_NativeFlowMessage) GetMessageVersion() int32 { + if x != nil && x.MessageVersion != nil { + return *x.MessageVersion } - return nil + return 0 } -func (x *TemplateButton) GetCallButton() *TemplateButton_CallButton { - if x, ok := x.GetButton().(*TemplateButton_CallButton_); ok { - return x.CallButton - } - return nil +type InteractiveMessage_CollectionMessage struct { + state protoimpl.MessageState `protogen:"open.v1"` + BizJID *string `protobuf:"bytes,1,opt,name=bizJID" json:"bizJID,omitempty"` + ID *string `protobuf:"bytes,2,opt,name=ID" json:"ID,omitempty"` + MessageVersion *int32 `protobuf:"varint,3,opt,name=messageVersion" json:"messageVersion,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *TemplateButton) GetIndex() uint32 { - if x != nil && x.Index != nil { - return *x.Index - } - return 0 +func (x *InteractiveMessage_CollectionMessage) Reset() { + *x = InteractiveMessage_CollectionMessage{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[130] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -type isTemplateButton_Button interface { - isTemplateButton_Button() +func (x *InteractiveMessage_CollectionMessage) String() string { + return protoimpl.X.MessageStringOf(x) } -type TemplateButton_QuickReplyButton_ struct { - QuickReplyButton *TemplateButton_QuickReplyButton `protobuf:"bytes,1,opt,name=quickReplyButton,oneof"` -} +func (*InteractiveMessage_CollectionMessage) ProtoMessage() {} -type TemplateButton_UrlButton struct { - UrlButton *TemplateButton_URLButton `protobuf:"bytes,2,opt,name=urlButton,oneof"` +func (x *InteractiveMessage_CollectionMessage) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[130] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -type TemplateButton_CallButton_ struct { - CallButton *TemplateButton_CallButton `protobuf:"bytes,3,opt,name=callButton,oneof"` +// Deprecated: Use InteractiveMessage_CollectionMessage.ProtoReflect.Descriptor instead. +func (*InteractiveMessage_CollectionMessage) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{14, 3} } -func (*TemplateButton_QuickReplyButton_) isTemplateButton_Button() {} +func (x *InteractiveMessage_CollectionMessage) GetBizJID() string { + if x != nil && x.BizJID != nil { + return *x.BizJID + } + return "" +} -func (*TemplateButton_UrlButton) isTemplateButton_Button() {} +func (x *InteractiveMessage_CollectionMessage) GetID() string { + if x != nil && x.ID != nil { + return *x.ID + } + return "" +} -func (*TemplateButton_CallButton_) isTemplateButton_Button() {} +func (x *InteractiveMessage_CollectionMessage) GetMessageVersion() int32 { + if x != nil && x.MessageVersion != nil { + return *x.MessageVersion + } + return 0 +} -type Money struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache +type InteractiveMessage_BloksWidget struct { + state protoimpl.MessageState `protogen:"open.v1"` + Uuid *string `protobuf:"bytes,1,opt,name=uuid" json:"uuid,omitempty"` + Data *string `protobuf:"bytes,2,opt,name=data" json:"data,omitempty"` + Type *string `protobuf:"bytes,3,opt,name=type" json:"type,omitempty"` unknownFields protoimpl.UnknownFields - - Value *int64 `protobuf:"varint,1,opt,name=value" json:"value,omitempty"` - Offset *uint32 `protobuf:"varint,2,opt,name=offset" json:"offset,omitempty"` - CurrencyCode *string `protobuf:"bytes,3,opt,name=currencyCode" json:"currencyCode,omitempty"` + sizeCache protoimpl.SizeCache } -func (x *Money) Reset() { - *x = Money{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[101] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *InteractiveMessage_BloksWidget) Reset() { + *x = InteractiveMessage_BloksWidget{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[131] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *Money) String() string { +func (x *InteractiveMessage_BloksWidget) String() string { return protoimpl.X.MessageStringOf(x) } -func (*Money) ProtoMessage() {} +func (*InteractiveMessage_BloksWidget) ProtoMessage() {} -func (x *Money) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[101] - if protoimpl.UnsafeEnabled && x != nil { +func (x *InteractiveMessage_BloksWidget) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[131] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -13375,59 +16455,60 @@ func (x *Money) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use Money.ProtoReflect.Descriptor instead. -func (*Money) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{101} +// Deprecated: Use InteractiveMessage_BloksWidget.ProtoReflect.Descriptor instead. +func (*InteractiveMessage_BloksWidget) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{14, 4} } -func (x *Money) GetValue() int64 { - if x != nil && x.Value != nil { - return *x.Value +func (x *InteractiveMessage_BloksWidget) GetUuid() string { + if x != nil && x.Uuid != nil { + return *x.Uuid } - return 0 + return "" } -func (x *Money) GetOffset() uint32 { - if x != nil && x.Offset != nil { - return *x.Offset +func (x *InteractiveMessage_BloksWidget) GetData() string { + if x != nil && x.Data != nil { + return *x.Data } - return 0 + return "" } -func (x *Money) GetCurrencyCode() string { - if x != nil && x.CurrencyCode != nil { - return *x.CurrencyCode +func (x *InteractiveMessage_BloksWidget) GetType() string { + if x != nil && x.Type != nil { + return *x.Type } return "" } -type ActionLink struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - URL *string `protobuf:"bytes,1,opt,name=URL" json:"URL,omitempty"` - ButtonTitle *string `protobuf:"bytes,2,opt,name=buttonTitle" json:"buttonTitle,omitempty"` +type InteractiveMessage_Footer struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Types that are valid to be assigned to Media: + // + // *InteractiveMessage_Footer_AudioMessage + Media isInteractiveMessage_Footer_Media `protobuf_oneof:"media"` + Text *string `protobuf:"bytes,1,opt,name=text" json:"text,omitempty"` + HasMediaAttachment *bool `protobuf:"varint,3,opt,name=hasMediaAttachment" json:"hasMediaAttachment,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *ActionLink) Reset() { - *x = ActionLink{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[102] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *InteractiveMessage_Footer) Reset() { + *x = InteractiveMessage_Footer{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[132] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *ActionLink) String() string { +func (x *InteractiveMessage_Footer) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ActionLink) ProtoMessage() {} +func (*InteractiveMessage_Footer) ProtoMessage() {} -func (x *ActionLink) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[102] - if protoimpl.UnsafeEnabled && x != nil { +func (x *InteractiveMessage_Footer) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[132] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -13437,52 +16518,74 @@ func (x *ActionLink) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ActionLink.ProtoReflect.Descriptor instead. -func (*ActionLink) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{102} +// Deprecated: Use InteractiveMessage_Footer.ProtoReflect.Descriptor instead. +func (*InteractiveMessage_Footer) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{14, 5} } -func (x *ActionLink) GetURL() string { - if x != nil && x.URL != nil { - return *x.URL +func (x *InteractiveMessage_Footer) GetMedia() isInteractiveMessage_Footer_Media { + if x != nil { + return x.Media } - return "" + return nil } -func (x *ActionLink) GetButtonTitle() string { - if x != nil && x.ButtonTitle != nil { - return *x.ButtonTitle +func (x *InteractiveMessage_Footer) GetAudioMessage() *AudioMessage { + if x != nil { + if x, ok := x.Media.(*InteractiveMessage_Footer_AudioMessage); ok { + return x.AudioMessage + } + } + return nil +} + +func (x *InteractiveMessage_Footer) GetText() string { + if x != nil && x.Text != nil { + return *x.Text } return "" } -type GroupMention struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +func (x *InteractiveMessage_Footer) GetHasMediaAttachment() bool { + if x != nil && x.HasMediaAttachment != nil { + return *x.HasMediaAttachment + } + return false +} - GroupJID *string `protobuf:"bytes,1,opt,name=groupJID" json:"groupJID,omitempty"` - GroupSubject *string `protobuf:"bytes,2,opt,name=groupSubject" json:"groupSubject,omitempty"` +type isInteractiveMessage_Footer_Media interface { + isInteractiveMessage_Footer_Media() } -func (x *GroupMention) Reset() { - *x = GroupMention{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[103] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +type InteractiveMessage_Footer_AudioMessage struct { + AudioMessage *AudioMessage `protobuf:"bytes,2,opt,name=audioMessage,oneof"` } -func (x *GroupMention) String() string { +func (*InteractiveMessage_Footer_AudioMessage) isInteractiveMessage_Footer_Media() {} + +type InteractiveMessage_Body struct { + state protoimpl.MessageState `protogen:"open.v1"` + Text *string `protobuf:"bytes,1,opt,name=text" json:"text,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *InteractiveMessage_Body) Reset() { + *x = InteractiveMessage_Body{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[133] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *InteractiveMessage_Body) String() string { return protoimpl.X.MessageStringOf(x) } -func (*GroupMention) ProtoMessage() {} +func (*InteractiveMessage_Body) ProtoMessage() {} -func (x *GroupMention) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[103] - if protoimpl.UnsafeEnabled && x != nil { +func (x *InteractiveMessage_Body) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[133] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -13492,53 +16595,53 @@ func (x *GroupMention) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use GroupMention.ProtoReflect.Descriptor instead. -func (*GroupMention) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{103} -} - -func (x *GroupMention) GetGroupJID() string { - if x != nil && x.GroupJID != nil { - return *x.GroupJID - } - return "" +// Deprecated: Use InteractiveMessage_Body.ProtoReflect.Descriptor instead. +func (*InteractiveMessage_Body) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{14, 6} } -func (x *GroupMention) GetGroupSubject() string { - if x != nil && x.GroupSubject != nil { - return *x.GroupSubject +func (x *InteractiveMessage_Body) GetText() string { + if x != nil && x.Text != nil { + return *x.Text } return "" } -type MessageSecretMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Version *int32 `protobuf:"fixed32,1,opt,name=version" json:"version,omitempty"` - EncIV []byte `protobuf:"bytes,2,opt,name=encIV" json:"encIV,omitempty"` - EncPayload []byte `protobuf:"bytes,3,opt,name=encPayload" json:"encPayload,omitempty"` +type InteractiveMessage_Header struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Types that are valid to be assigned to Media: + // + // *InteractiveMessage_Header_DocumentMessage + // *InteractiveMessage_Header_ImageMessage + // *InteractiveMessage_Header_JPEGThumbnail + // *InteractiveMessage_Header_VideoMessage + // *InteractiveMessage_Header_LocationMessage + // *InteractiveMessage_Header_ProductMessage + Media isInteractiveMessage_Header_Media `protobuf_oneof:"media"` + Title *string `protobuf:"bytes,1,opt,name=title" json:"title,omitempty"` + Subtitle *string `protobuf:"bytes,2,opt,name=subtitle" json:"subtitle,omitempty"` + HasMediaAttachment *bool `protobuf:"varint,5,opt,name=hasMediaAttachment" json:"hasMediaAttachment,omitempty"` + BloksWidget *InteractiveMessage_BloksWidget `protobuf:"bytes,10,opt,name=bloksWidget" json:"bloksWidget,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *MessageSecretMessage) Reset() { - *x = MessageSecretMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[104] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *InteractiveMessage_Header) Reset() { + *x = InteractiveMessage_Header{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[134] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *MessageSecretMessage) String() string { +func (x *InteractiveMessage_Header) String() string { return protoimpl.X.MessageStringOf(x) } -func (*MessageSecretMessage) ProtoMessage() {} +func (*InteractiveMessage_Header) ProtoMessage() {} -func (x *MessageSecretMessage) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[104] - if protoimpl.UnsafeEnabled && x != nil { +func (x *InteractiveMessage_Header) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[134] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -13548,121 +16651,164 @@ func (x *MessageSecretMessage) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use MessageSecretMessage.ProtoReflect.Descriptor instead. -func (*MessageSecretMessage) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{104} +// Deprecated: Use InteractiveMessage_Header.ProtoReflect.Descriptor instead. +func (*InteractiveMessage_Header) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{14, 7} } -func (x *MessageSecretMessage) GetVersion() int32 { - if x != nil && x.Version != nil { - return *x.Version +func (x *InteractiveMessage_Header) GetMedia() isInteractiveMessage_Header_Media { + if x != nil { + return x.Media } - return 0 + return nil } -func (x *MessageSecretMessage) GetEncIV() []byte { +func (x *InteractiveMessage_Header) GetDocumentMessage() *DocumentMessage { if x != nil { - return x.EncIV + if x, ok := x.Media.(*InteractiveMessage_Header_DocumentMessage); ok { + return x.DocumentMessage + } } return nil } -func (x *MessageSecretMessage) GetEncPayload() []byte { +func (x *InteractiveMessage_Header) GetImageMessage() *ImageMessage { if x != nil { - return x.EncPayload + if x, ok := x.Media.(*InteractiveMessage_Header_ImageMessage); ok { + return x.ImageMessage + } } return nil } -type MediaNotifyMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - ExpressPathURL *string `protobuf:"bytes,1,opt,name=expressPathURL" json:"expressPathURL,omitempty"` - FileEncSHA256 []byte `protobuf:"bytes,2,opt,name=fileEncSHA256" json:"fileEncSHA256,omitempty"` - FileLength *uint64 `protobuf:"varint,3,opt,name=fileLength" json:"fileLength,omitempty"` +func (x *InteractiveMessage_Header) GetJPEGThumbnail() []byte { + if x != nil { + if x, ok := x.Media.(*InteractiveMessage_Header_JPEGThumbnail); ok { + return x.JPEGThumbnail + } + } + return nil } -func (x *MediaNotifyMessage) Reset() { - *x = MediaNotifyMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[105] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) +func (x *InteractiveMessage_Header) GetVideoMessage() *VideoMessage { + if x != nil { + if x, ok := x.Media.(*InteractiveMessage_Header_VideoMessage); ok { + return x.VideoMessage + } } + return nil } -func (x *MediaNotifyMessage) String() string { - return protoimpl.X.MessageStringOf(x) +func (x *InteractiveMessage_Header) GetLocationMessage() *LocationMessage { + if x != nil { + if x, ok := x.Media.(*InteractiveMessage_Header_LocationMessage); ok { + return x.LocationMessage + } + } + return nil } -func (*MediaNotifyMessage) ProtoMessage() {} - -func (x *MediaNotifyMessage) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[105] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) +func (x *InteractiveMessage_Header) GetProductMessage() *ProductMessage { + if x != nil { + if x, ok := x.Media.(*InteractiveMessage_Header_ProductMessage); ok { + return x.ProductMessage } - return ms } - return mi.MessageOf(x) + return nil } -// Deprecated: Use MediaNotifyMessage.ProtoReflect.Descriptor instead. -func (*MediaNotifyMessage) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{105} +func (x *InteractiveMessage_Header) GetTitle() string { + if x != nil && x.Title != nil { + return *x.Title + } + return "" } -func (x *MediaNotifyMessage) GetExpressPathURL() string { - if x != nil && x.ExpressPathURL != nil { - return *x.ExpressPathURL +func (x *InteractiveMessage_Header) GetSubtitle() string { + if x != nil && x.Subtitle != nil { + return *x.Subtitle } return "" } -func (x *MediaNotifyMessage) GetFileEncSHA256() []byte { +func (x *InteractiveMessage_Header) GetHasMediaAttachment() bool { + if x != nil && x.HasMediaAttachment != nil { + return *x.HasMediaAttachment + } + return false +} + +func (x *InteractiveMessage_Header) GetBloksWidget() *InteractiveMessage_BloksWidget { if x != nil { - return x.FileEncSHA256 + return x.BloksWidget } return nil } -func (x *MediaNotifyMessage) GetFileLength() uint64 { - if x != nil && x.FileLength != nil { - return *x.FileLength - } - return 0 +type isInteractiveMessage_Header_Media interface { + isInteractiveMessage_Header_Media() +} + +type InteractiveMessage_Header_DocumentMessage struct { + DocumentMessage *DocumentMessage `protobuf:"bytes,3,opt,name=documentMessage,oneof"` +} + +type InteractiveMessage_Header_ImageMessage struct { + ImageMessage *ImageMessage `protobuf:"bytes,4,opt,name=imageMessage,oneof"` +} + +type InteractiveMessage_Header_JPEGThumbnail struct { + JPEGThumbnail []byte `protobuf:"bytes,6,opt,name=JPEGThumbnail,oneof"` +} + +type InteractiveMessage_Header_VideoMessage struct { + VideoMessage *VideoMessage `protobuf:"bytes,7,opt,name=videoMessage,oneof"` +} + +type InteractiveMessage_Header_LocationMessage struct { + LocationMessage *LocationMessage `protobuf:"bytes,8,opt,name=locationMessage,oneof"` +} + +type InteractiveMessage_Header_ProductMessage struct { + ProductMessage *ProductMessage `protobuf:"bytes,9,opt,name=productMessage,oneof"` } -type LIDMigrationMappingSyncMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +func (*InteractiveMessage_Header_DocumentMessage) isInteractiveMessage_Header_Media() {} + +func (*InteractiveMessage_Header_ImageMessage) isInteractiveMessage_Header_Media() {} + +func (*InteractiveMessage_Header_JPEGThumbnail) isInteractiveMessage_Header_Media() {} + +func (*InteractiveMessage_Header_VideoMessage) isInteractiveMessage_Header_Media() {} + +func (*InteractiveMessage_Header_LocationMessage) isInteractiveMessage_Header_Media() {} + +func (*InteractiveMessage_Header_ProductMessage) isInteractiveMessage_Header_Media() {} - EncodedMappingPayload []byte `protobuf:"bytes,1,opt,name=encodedMappingPayload" json:"encodedMappingPayload,omitempty"` +type InteractiveMessage_NativeFlowMessage_NativeFlowButton struct { + state protoimpl.MessageState `protogen:"open.v1"` + Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + ButtonParamsJSON *string `protobuf:"bytes,2,opt,name=buttonParamsJSON" json:"buttonParamsJSON,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *LIDMigrationMappingSyncMessage) Reset() { - *x = LIDMigrationMappingSyncMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[106] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *InteractiveMessage_NativeFlowMessage_NativeFlowButton) Reset() { + *x = InteractiveMessage_NativeFlowMessage_NativeFlowButton{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[135] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *LIDMigrationMappingSyncMessage) String() string { +func (x *InteractiveMessage_NativeFlowMessage_NativeFlowButton) String() string { return protoimpl.X.MessageStringOf(x) } -func (*LIDMigrationMappingSyncMessage) ProtoMessage() {} +func (*InteractiveMessage_NativeFlowMessage_NativeFlowButton) ProtoMessage() {} -func (x *LIDMigrationMappingSyncMessage) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[106] - if protoimpl.UnsafeEnabled && x != nil { +func (x *InteractiveMessage_NativeFlowMessage_NativeFlowButton) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[135] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -13672,45 +16818,48 @@ func (x *LIDMigrationMappingSyncMessage) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use LIDMigrationMappingSyncMessage.ProtoReflect.Descriptor instead. -func (*LIDMigrationMappingSyncMessage) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{106} +// Deprecated: Use InteractiveMessage_NativeFlowMessage_NativeFlowButton.ProtoReflect.Descriptor instead. +func (*InteractiveMessage_NativeFlowMessage_NativeFlowButton) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{14, 2, 0} } -func (x *LIDMigrationMappingSyncMessage) GetEncodedMappingPayload() []byte { - if x != nil { - return x.EncodedMappingPayload +func (x *InteractiveMessage_NativeFlowMessage_NativeFlowButton) GetName() string { + if x != nil && x.Name != nil { + return *x.Name } - return nil + return "" } -type CallLogMessage_CallParticipant struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +func (x *InteractiveMessage_NativeFlowMessage_NativeFlowButton) GetButtonParamsJSON() string { + if x != nil && x.ButtonParamsJSON != nil { + return *x.ButtonParamsJSON + } + return "" +} - JID *string `protobuf:"bytes,1,opt,name=JID" json:"JID,omitempty"` - CallOutcome *CallLogMessage_CallOutcome `protobuf:"varint,2,opt,name=callOutcome,enum=WAWebProtobufsE2E.CallLogMessage_CallOutcome" json:"callOutcome,omitempty"` +type ListResponseMessage_SingleSelectReply struct { + state protoimpl.MessageState `protogen:"open.v1"` + SelectedRowID *string `protobuf:"bytes,1,opt,name=selectedRowID" json:"selectedRowID,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *CallLogMessage_CallParticipant) Reset() { - *x = CallLogMessage_CallParticipant{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[107] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *ListResponseMessage_SingleSelectReply) Reset() { + *x = ListResponseMessage_SingleSelectReply{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[136] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *CallLogMessage_CallParticipant) String() string { +func (x *ListResponseMessage_SingleSelectReply) String() string { return protoimpl.X.MessageStringOf(x) } -func (*CallLogMessage_CallParticipant) ProtoMessage() {} +func (*ListResponseMessage_SingleSelectReply) ProtoMessage() {} -func (x *CallLogMessage_CallParticipant) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[107] - if protoimpl.UnsafeEnabled && x != nil { +func (x *ListResponseMessage_SingleSelectReply) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[136] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -13720,54 +16869,43 @@ func (x *CallLogMessage_CallParticipant) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use CallLogMessage_CallParticipant.ProtoReflect.Descriptor instead. -func (*CallLogMessage_CallParticipant) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{2, 0} +// Deprecated: Use ListResponseMessage_SingleSelectReply.ProtoReflect.Descriptor instead. +func (*ListResponseMessage_SingleSelectReply) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{15, 0} } -func (x *CallLogMessage_CallParticipant) GetJID() string { - if x != nil && x.JID != nil { - return *x.JID +func (x *ListResponseMessage_SingleSelectReply) GetSelectedRowID() string { + if x != nil && x.SelectedRowID != nil { + return *x.SelectedRowID } return "" } -func (x *CallLogMessage_CallParticipant) GetCallOutcome() CallLogMessage_CallOutcome { - if x != nil && x.CallOutcome != nil { - return *x.CallOutcome - } - return CallLogMessage_CONNECTED -} - -type ButtonsMessage_Button struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - ButtonID *string `protobuf:"bytes,1,opt,name=buttonID" json:"buttonID,omitempty"` - ButtonText *ButtonsMessage_Button_ButtonText `protobuf:"bytes,2,opt,name=buttonText" json:"buttonText,omitempty"` - Type *ButtonsMessage_Button_Type `protobuf:"varint,3,opt,name=type,enum=WAWebProtobufsE2E.ButtonsMessage_Button_Type" json:"type,omitempty"` - NativeFlowInfo *ButtonsMessage_Button_NativeFlowInfo `protobuf:"bytes,4,opt,name=nativeFlowInfo" json:"nativeFlowInfo,omitempty"` +type ListMessage_ProductListInfo struct { + state protoimpl.MessageState `protogen:"open.v1"` + ProductSections []*ListMessage_ProductSection `protobuf:"bytes,1,rep,name=productSections" json:"productSections,omitempty"` + HeaderImage *ListMessage_ProductListHeaderImage `protobuf:"bytes,2,opt,name=headerImage" json:"headerImage,omitempty"` + BusinessOwnerJID *string `protobuf:"bytes,3,opt,name=businessOwnerJID" json:"businessOwnerJID,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *ButtonsMessage_Button) Reset() { - *x = ButtonsMessage_Button{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[108] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *ListMessage_ProductListInfo) Reset() { + *x = ListMessage_ProductListInfo{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[137] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *ButtonsMessage_Button) String() string { +func (x *ListMessage_ProductListInfo) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ButtonsMessage_Button) ProtoMessage() {} +func (*ListMessage_ProductListInfo) ProtoMessage() {} -func (x *ButtonsMessage_Button) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[108] - if protoimpl.UnsafeEnabled && x != nil { +func (x *ListMessage_ProductListInfo) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[137] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -13777,66 +16915,56 @@ func (x *ButtonsMessage_Button) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ButtonsMessage_Button.ProtoReflect.Descriptor instead. -func (*ButtonsMessage_Button) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{8, 0} -} - -func (x *ButtonsMessage_Button) GetButtonID() string { - if x != nil && x.ButtonID != nil { - return *x.ButtonID - } - return "" +// Deprecated: Use ListMessage_ProductListInfo.ProtoReflect.Descriptor instead. +func (*ListMessage_ProductListInfo) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{16, 0} } -func (x *ButtonsMessage_Button) GetButtonText() *ButtonsMessage_Button_ButtonText { +func (x *ListMessage_ProductListInfo) GetProductSections() []*ListMessage_ProductSection { if x != nil { - return x.ButtonText + return x.ProductSections } return nil } -func (x *ButtonsMessage_Button) GetType() ButtonsMessage_Button_Type { - if x != nil && x.Type != nil { - return *x.Type +func (x *ListMessage_ProductListInfo) GetHeaderImage() *ListMessage_ProductListHeaderImage { + if x != nil { + return x.HeaderImage } - return ButtonsMessage_Button_UNKNOWN + return nil } -func (x *ButtonsMessage_Button) GetNativeFlowInfo() *ButtonsMessage_Button_NativeFlowInfo { - if x != nil { - return x.NativeFlowInfo +func (x *ListMessage_ProductListInfo) GetBusinessOwnerJID() string { + if x != nil && x.BusinessOwnerJID != nil { + return *x.BusinessOwnerJID } - return nil + return "" } -type ButtonsMessage_Button_NativeFlowInfo struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache +type ListMessage_ProductListHeaderImage struct { + state protoimpl.MessageState `protogen:"open.v1"` + ProductID *string `protobuf:"bytes,1,opt,name=productID" json:"productID,omitempty"` + JPEGThumbnail []byte `protobuf:"bytes,2,opt,name=JPEGThumbnail" json:"JPEGThumbnail,omitempty"` unknownFields protoimpl.UnknownFields - - Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` - ParamsJSON *string `protobuf:"bytes,2,opt,name=paramsJSON" json:"paramsJSON,omitempty"` + sizeCache protoimpl.SizeCache } -func (x *ButtonsMessage_Button_NativeFlowInfo) Reset() { - *x = ButtonsMessage_Button_NativeFlowInfo{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[109] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *ListMessage_ProductListHeaderImage) Reset() { + *x = ListMessage_ProductListHeaderImage{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[138] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *ButtonsMessage_Button_NativeFlowInfo) String() string { +func (x *ListMessage_ProductListHeaderImage) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ButtonsMessage_Button_NativeFlowInfo) ProtoMessage() {} +func (*ListMessage_ProductListHeaderImage) ProtoMessage() {} -func (x *ButtonsMessage_Button_NativeFlowInfo) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[109] - if protoimpl.UnsafeEnabled && x != nil { +func (x *ListMessage_ProductListHeaderImage) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[138] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -13846,51 +16974,49 @@ func (x *ButtonsMessage_Button_NativeFlowInfo) ProtoReflect() protoreflect.Messa return mi.MessageOf(x) } -// Deprecated: Use ButtonsMessage_Button_NativeFlowInfo.ProtoReflect.Descriptor instead. -func (*ButtonsMessage_Button_NativeFlowInfo) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{8, 0, 0} +// Deprecated: Use ListMessage_ProductListHeaderImage.ProtoReflect.Descriptor instead. +func (*ListMessage_ProductListHeaderImage) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{16, 1} } -func (x *ButtonsMessage_Button_NativeFlowInfo) GetName() string { - if x != nil && x.Name != nil { - return *x.Name +func (x *ListMessage_ProductListHeaderImage) GetProductID() string { + if x != nil && x.ProductID != nil { + return *x.ProductID } return "" } -func (x *ButtonsMessage_Button_NativeFlowInfo) GetParamsJSON() string { - if x != nil && x.ParamsJSON != nil { - return *x.ParamsJSON +func (x *ListMessage_ProductListHeaderImage) GetJPEGThumbnail() []byte { + if x != nil { + return x.JPEGThumbnail } - return "" + return nil } -type ButtonsMessage_Button_ButtonText struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache +type ListMessage_ProductSection struct { + state protoimpl.MessageState `protogen:"open.v1"` + Title *string `protobuf:"bytes,1,opt,name=title" json:"title,omitempty"` + Products []*ListMessage_Product `protobuf:"bytes,2,rep,name=products" json:"products,omitempty"` unknownFields protoimpl.UnknownFields - - DisplayText *string `protobuf:"bytes,1,opt,name=displayText" json:"displayText,omitempty"` + sizeCache protoimpl.SizeCache } -func (x *ButtonsMessage_Button_ButtonText) Reset() { - *x = ButtonsMessage_Button_ButtonText{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[110] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *ListMessage_ProductSection) Reset() { + *x = ListMessage_ProductSection{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[139] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *ButtonsMessage_Button_ButtonText) String() string { +func (x *ListMessage_ProductSection) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ButtonsMessage_Button_ButtonText) ProtoMessage() {} +func (*ListMessage_ProductSection) ProtoMessage() {} -func (x *ButtonsMessage_Button_ButtonText) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[110] - if protoimpl.UnsafeEnabled && x != nil { +func (x *ListMessage_ProductSection) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[139] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -13900,45 +17026,48 @@ func (x *ButtonsMessage_Button_ButtonText) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ButtonsMessage_Button_ButtonText.ProtoReflect.Descriptor instead. -func (*ButtonsMessage_Button_ButtonText) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{8, 0, 1} +// Deprecated: Use ListMessage_ProductSection.ProtoReflect.Descriptor instead. +func (*ListMessage_ProductSection) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{16, 2} } -func (x *ButtonsMessage_Button_ButtonText) GetDisplayText() string { - if x != nil && x.DisplayText != nil { - return *x.DisplayText +func (x *ListMessage_ProductSection) GetTitle() string { + if x != nil && x.Title != nil { + return *x.Title } return "" } -type InteractiveResponseMessage_Body struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +func (x *ListMessage_ProductSection) GetProducts() []*ListMessage_Product { + if x != nil { + return x.Products + } + return nil +} - Text *string `protobuf:"bytes,1,opt,name=text" json:"text,omitempty"` - Format *InteractiveResponseMessage_Body_Format `protobuf:"varint,2,opt,name=format,enum=WAWebProtobufsE2E.InteractiveResponseMessage_Body_Format" json:"format,omitempty"` +type ListMessage_Product struct { + state protoimpl.MessageState `protogen:"open.v1"` + ProductID *string `protobuf:"bytes,1,opt,name=productID" json:"productID,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *InteractiveResponseMessage_Body) Reset() { - *x = InteractiveResponseMessage_Body{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[111] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *ListMessage_Product) Reset() { + *x = ListMessage_Product{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[140] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *InteractiveResponseMessage_Body) String() string { +func (x *ListMessage_Product) String() string { return protoimpl.X.MessageStringOf(x) } -func (*InteractiveResponseMessage_Body) ProtoMessage() {} +func (*ListMessage_Product) ProtoMessage() {} -func (x *InteractiveResponseMessage_Body) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[111] - if protoimpl.UnsafeEnabled && x != nil { +func (x *ListMessage_Product) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[140] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -13948,53 +17077,42 @@ func (x *InteractiveResponseMessage_Body) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use InteractiveResponseMessage_Body.ProtoReflect.Descriptor instead. -func (*InteractiveResponseMessage_Body) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{11, 0} -} - -func (x *InteractiveResponseMessage_Body) GetText() string { - if x != nil && x.Text != nil { - return *x.Text - } - return "" +// Deprecated: Use ListMessage_Product.ProtoReflect.Descriptor instead. +func (*ListMessage_Product) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{16, 3} } - -func (x *InteractiveResponseMessage_Body) GetFormat() InteractiveResponseMessage_Body_Format { - if x != nil && x.Format != nil { - return *x.Format + +func (x *ListMessage_Product) GetProductID() string { + if x != nil && x.ProductID != nil { + return *x.ProductID } - return InteractiveResponseMessage_Body_DEFAULT + return "" } -type InteractiveResponseMessage_NativeFlowResponseMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache +type ListMessage_Section struct { + state protoimpl.MessageState `protogen:"open.v1"` + Title *string `protobuf:"bytes,1,opt,name=title" json:"title,omitempty"` + Rows []*ListMessage_Row `protobuf:"bytes,2,rep,name=rows" json:"rows,omitempty"` unknownFields protoimpl.UnknownFields - - Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` - ParamsJSON *string `protobuf:"bytes,2,opt,name=paramsJSON" json:"paramsJSON,omitempty"` - Version *int32 `protobuf:"varint,3,opt,name=version" json:"version,omitempty"` + sizeCache protoimpl.SizeCache } -func (x *InteractiveResponseMessage_NativeFlowResponseMessage) Reset() { - *x = InteractiveResponseMessage_NativeFlowResponseMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[112] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *ListMessage_Section) Reset() { + *x = ListMessage_Section{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[141] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *InteractiveResponseMessage_NativeFlowResponseMessage) String() string { +func (x *ListMessage_Section) String() string { return protoimpl.X.MessageStringOf(x) } -func (*InteractiveResponseMessage_NativeFlowResponseMessage) ProtoMessage() {} +func (*ListMessage_Section) ProtoMessage() {} -func (x *InteractiveResponseMessage_NativeFlowResponseMessage) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[112] - if protoimpl.UnsafeEnabled && x != nil { +func (x *ListMessage_Section) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[141] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -14004,60 +17122,50 @@ func (x *InteractiveResponseMessage_NativeFlowResponseMessage) ProtoReflect() pr return mi.MessageOf(x) } -// Deprecated: Use InteractiveResponseMessage_NativeFlowResponseMessage.ProtoReflect.Descriptor instead. -func (*InteractiveResponseMessage_NativeFlowResponseMessage) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{11, 1} -} - -func (x *InteractiveResponseMessage_NativeFlowResponseMessage) GetName() string { - if x != nil && x.Name != nil { - return *x.Name - } - return "" +// Deprecated: Use ListMessage_Section.ProtoReflect.Descriptor instead. +func (*ListMessage_Section) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{16, 4} } -func (x *InteractiveResponseMessage_NativeFlowResponseMessage) GetParamsJSON() string { - if x != nil && x.ParamsJSON != nil { - return *x.ParamsJSON +func (x *ListMessage_Section) GetTitle() string { + if x != nil && x.Title != nil { + return *x.Title } return "" } -func (x *InteractiveResponseMessage_NativeFlowResponseMessage) GetVersion() int32 { - if x != nil && x.Version != nil { - return *x.Version +func (x *ListMessage_Section) GetRows() []*ListMessage_Row { + if x != nil { + return x.Rows } - return 0 + return nil } -type InteractiveMessage_ShopMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache +type ListMessage_Row struct { + state protoimpl.MessageState `protogen:"open.v1"` + Title *string `protobuf:"bytes,1,opt,name=title" json:"title,omitempty"` + Description *string `protobuf:"bytes,2,opt,name=description" json:"description,omitempty"` + RowID *string `protobuf:"bytes,3,opt,name=rowID" json:"rowID,omitempty"` unknownFields protoimpl.UnknownFields - - ID *string `protobuf:"bytes,1,opt,name=ID" json:"ID,omitempty"` - Surface *InteractiveMessage_ShopMessage_Surface `protobuf:"varint,2,opt,name=surface,enum=WAWebProtobufsE2E.InteractiveMessage_ShopMessage_Surface" json:"surface,omitempty"` - MessageVersion *int32 `protobuf:"varint,3,opt,name=messageVersion" json:"messageVersion,omitempty"` + sizeCache protoimpl.SizeCache } -func (x *InteractiveMessage_ShopMessage) Reset() { - *x = InteractiveMessage_ShopMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[113] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *ListMessage_Row) Reset() { + *x = ListMessage_Row{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[142] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *InteractiveMessage_ShopMessage) String() string { +func (x *ListMessage_Row) String() string { return protoimpl.X.MessageStringOf(x) } -func (*InteractiveMessage_ShopMessage) ProtoMessage() {} +func (*ListMessage_Row) ProtoMessage() {} -func (x *InteractiveMessage_ShopMessage) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[113] - if protoimpl.UnsafeEnabled && x != nil { +func (x *ListMessage_Row) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[142] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -14067,59 +17175,60 @@ func (x *InteractiveMessage_ShopMessage) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use InteractiveMessage_ShopMessage.ProtoReflect.Descriptor instead. -func (*InteractiveMessage_ShopMessage) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{12, 0} +// Deprecated: Use ListMessage_Row.ProtoReflect.Descriptor instead. +func (*ListMessage_Row) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{16, 5} } -func (x *InteractiveMessage_ShopMessage) GetID() string { - if x != nil && x.ID != nil { - return *x.ID +func (x *ListMessage_Row) GetTitle() string { + if x != nil && x.Title != nil { + return *x.Title } return "" } -func (x *InteractiveMessage_ShopMessage) GetSurface() InteractiveMessage_ShopMessage_Surface { - if x != nil && x.Surface != nil { - return *x.Surface +func (x *ListMessage_Row) GetDescription() string { + if x != nil && x.Description != nil { + return *x.Description } - return InteractiveMessage_ShopMessage_UNKNOWN_SURFACE + return "" } -func (x *InteractiveMessage_ShopMessage) GetMessageVersion() int32 { - if x != nil && x.MessageVersion != nil { - return *x.MessageVersion +func (x *ListMessage_Row) GetRowID() string { + if x != nil && x.RowID != nil { + return *x.RowID } - return 0 + return "" } -type InteractiveMessage_CarouselMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache +type HighlyStructuredMessage_HSMLocalizableParameter struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Types that are valid to be assigned to ParamOneof: + // + // *HighlyStructuredMessage_HSMLocalizableParameter_Currency + // *HighlyStructuredMessage_HSMLocalizableParameter_DateTime + ParamOneof isHighlyStructuredMessage_HSMLocalizableParameter_ParamOneof `protobuf_oneof:"paramOneof"` + Default *string `protobuf:"bytes,1,opt,name=default" json:"default,omitempty"` unknownFields protoimpl.UnknownFields - - Cards []*InteractiveMessage `protobuf:"bytes,1,rep,name=cards" json:"cards,omitempty"` - MessageVersion *int32 `protobuf:"varint,2,opt,name=messageVersion" json:"messageVersion,omitempty"` + sizeCache protoimpl.SizeCache } -func (x *InteractiveMessage_CarouselMessage) Reset() { - *x = InteractiveMessage_CarouselMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[114] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *HighlyStructuredMessage_HSMLocalizableParameter) Reset() { + *x = HighlyStructuredMessage_HSMLocalizableParameter{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[143] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *InteractiveMessage_CarouselMessage) String() string { +func (x *HighlyStructuredMessage_HSMLocalizableParameter) String() string { return protoimpl.X.MessageStringOf(x) } -func (*InteractiveMessage_CarouselMessage) ProtoMessage() {} +func (*HighlyStructuredMessage_HSMLocalizableParameter) ProtoMessage() {} -func (x *InteractiveMessage_CarouselMessage) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[114] - if protoimpl.UnsafeEnabled && x != nil { +func (x *HighlyStructuredMessage_HSMLocalizableParameter) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[143] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -14129,116 +17238,88 @@ func (x *InteractiveMessage_CarouselMessage) ProtoReflect() protoreflect.Message return mi.MessageOf(x) } -// Deprecated: Use InteractiveMessage_CarouselMessage.ProtoReflect.Descriptor instead. -func (*InteractiveMessage_CarouselMessage) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{12, 1} +// Deprecated: Use HighlyStructuredMessage_HSMLocalizableParameter.ProtoReflect.Descriptor instead. +func (*HighlyStructuredMessage_HSMLocalizableParameter) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{20, 0} } -func (x *InteractiveMessage_CarouselMessage) GetCards() []*InteractiveMessage { +func (x *HighlyStructuredMessage_HSMLocalizableParameter) GetParamOneof() isHighlyStructuredMessage_HSMLocalizableParameter_ParamOneof { if x != nil { - return x.Cards + return x.ParamOneof } return nil } -func (x *InteractiveMessage_CarouselMessage) GetMessageVersion() int32 { - if x != nil && x.MessageVersion != nil { - return *x.MessageVersion +func (x *HighlyStructuredMessage_HSMLocalizableParameter) GetCurrency() *HighlyStructuredMessage_HSMLocalizableParameter_HSMCurrency { + if x != nil { + if x, ok := x.ParamOneof.(*HighlyStructuredMessage_HSMLocalizableParameter_Currency); ok { + return x.Currency + } } - return 0 -} - -type InteractiveMessage_NativeFlowMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Buttons []*InteractiveMessage_NativeFlowMessage_NativeFlowButton `protobuf:"bytes,1,rep,name=buttons" json:"buttons,omitempty"` - MessageParamsJSON *string `protobuf:"bytes,2,opt,name=messageParamsJSON" json:"messageParamsJSON,omitempty"` - MessageVersion *int32 `protobuf:"varint,3,opt,name=messageVersion" json:"messageVersion,omitempty"` + return nil } -func (x *InteractiveMessage_NativeFlowMessage) Reset() { - *x = InteractiveMessage_NativeFlowMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[115] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) +func (x *HighlyStructuredMessage_HSMLocalizableParameter) GetDateTime() *HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime { + if x != nil { + if x, ok := x.ParamOneof.(*HighlyStructuredMessage_HSMLocalizableParameter_DateTime); ok { + return x.DateTime + } } + return nil } -func (x *InteractiveMessage_NativeFlowMessage) String() string { - return protoimpl.X.MessageStringOf(x) +func (x *HighlyStructuredMessage_HSMLocalizableParameter) GetDefault() string { + if x != nil && x.Default != nil { + return *x.Default + } + return "" } -func (*InteractiveMessage_NativeFlowMessage) ProtoMessage() {} - -func (x *InteractiveMessage_NativeFlowMessage) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[115] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) +type isHighlyStructuredMessage_HSMLocalizableParameter_ParamOneof interface { + isHighlyStructuredMessage_HSMLocalizableParameter_ParamOneof() } -// Deprecated: Use InteractiveMessage_NativeFlowMessage.ProtoReflect.Descriptor instead. -func (*InteractiveMessage_NativeFlowMessage) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{12, 2} +type HighlyStructuredMessage_HSMLocalizableParameter_Currency struct { + Currency *HighlyStructuredMessage_HSMLocalizableParameter_HSMCurrency `protobuf:"bytes,2,opt,name=currency,oneof"` } -func (x *InteractiveMessage_NativeFlowMessage) GetButtons() []*InteractiveMessage_NativeFlowMessage_NativeFlowButton { - if x != nil { - return x.Buttons - } - return nil +type HighlyStructuredMessage_HSMLocalizableParameter_DateTime struct { + DateTime *HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime `protobuf:"bytes,3,opt,name=dateTime,oneof"` } -func (x *InteractiveMessage_NativeFlowMessage) GetMessageParamsJSON() string { - if x != nil && x.MessageParamsJSON != nil { - return *x.MessageParamsJSON - } - return "" +func (*HighlyStructuredMessage_HSMLocalizableParameter_Currency) isHighlyStructuredMessage_HSMLocalizableParameter_ParamOneof() { } -func (x *InteractiveMessage_NativeFlowMessage) GetMessageVersion() int32 { - if x != nil && x.MessageVersion != nil { - return *x.MessageVersion - } - return 0 +func (*HighlyStructuredMessage_HSMLocalizableParameter_DateTime) isHighlyStructuredMessage_HSMLocalizableParameter_ParamOneof() { } -type InteractiveMessage_CollectionMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache +type HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Types that are valid to be assigned to DatetimeOneof: + // + // *HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_Component + // *HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_UnixEpoch + DatetimeOneof isHighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_DatetimeOneof `protobuf_oneof:"datetimeOneof"` unknownFields protoimpl.UnknownFields - - BizJID *string `protobuf:"bytes,1,opt,name=bizJID" json:"bizJID,omitempty"` - ID *string `protobuf:"bytes,2,opt,name=ID" json:"ID,omitempty"` - MessageVersion *int32 `protobuf:"varint,3,opt,name=messageVersion" json:"messageVersion,omitempty"` + sizeCache protoimpl.SizeCache } -func (x *InteractiveMessage_CollectionMessage) Reset() { - *x = InteractiveMessage_CollectionMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[116] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime) Reset() { + *x = HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[144] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *InteractiveMessage_CollectionMessage) String() string { +func (x *HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime) String() string { return protoimpl.X.MessageStringOf(x) } -func (*InteractiveMessage_CollectionMessage) ProtoMessage() {} +func (*HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime) ProtoMessage() {} -func (x *InteractiveMessage_CollectionMessage) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[116] - if protoimpl.UnsafeEnabled && x != nil { +func (x *HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[144] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -14248,105 +17329,78 @@ func (x *InteractiveMessage_CollectionMessage) ProtoReflect() protoreflect.Messa return mi.MessageOf(x) } -// Deprecated: Use InteractiveMessage_CollectionMessage.ProtoReflect.Descriptor instead. -func (*InteractiveMessage_CollectionMessage) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{12, 3} -} - -func (x *InteractiveMessage_CollectionMessage) GetBizJID() string { - if x != nil && x.BizJID != nil { - return *x.BizJID - } - return "" +// Deprecated: Use HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime.ProtoReflect.Descriptor instead. +func (*HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{20, 0, 0} } -func (x *InteractiveMessage_CollectionMessage) GetID() string { - if x != nil && x.ID != nil { - return *x.ID +func (x *HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime) GetDatetimeOneof() isHighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_DatetimeOneof { + if x != nil { + return x.DatetimeOneof } - return "" + return nil } -func (x *InteractiveMessage_CollectionMessage) GetMessageVersion() int32 { - if x != nil && x.MessageVersion != nil { - return *x.MessageVersion +func (x *HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime) GetComponent() *HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeComponent { + if x != nil { + if x, ok := x.DatetimeOneof.(*HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_Component); ok { + return x.Component + } } - return 0 -} - -type InteractiveMessage_Footer struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Text *string `protobuf:"bytes,1,opt,name=text" json:"text,omitempty"` + return nil } -func (x *InteractiveMessage_Footer) Reset() { - *x = InteractiveMessage_Footer{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[117] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) +func (x *HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime) GetUnixEpoch() *HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeUnixEpoch { + if x != nil { + if x, ok := x.DatetimeOneof.(*HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_UnixEpoch); ok { + return x.UnixEpoch + } } + return nil } -func (x *InteractiveMessage_Footer) String() string { - return protoimpl.X.MessageStringOf(x) +type isHighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_DatetimeOneof interface { + isHighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_DatetimeOneof() } -func (*InteractiveMessage_Footer) ProtoMessage() {} +type HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_Component struct { + Component *HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeComponent `protobuf:"bytes,1,opt,name=component,oneof"` +} -func (x *InteractiveMessage_Footer) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[117] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) +type HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_UnixEpoch struct { + UnixEpoch *HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeUnixEpoch `protobuf:"bytes,2,opt,name=unixEpoch,oneof"` } -// Deprecated: Use InteractiveMessage_Footer.ProtoReflect.Descriptor instead. -func (*InteractiveMessage_Footer) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{12, 4} +func (*HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_Component) isHighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_DatetimeOneof() { } -func (x *InteractiveMessage_Footer) GetText() string { - if x != nil && x.Text != nil { - return *x.Text - } - return "" +func (*HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_UnixEpoch) isHighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_DatetimeOneof() { } -type InteractiveMessage_Body struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache +type HighlyStructuredMessage_HSMLocalizableParameter_HSMCurrency struct { + state protoimpl.MessageState `protogen:"open.v1"` + CurrencyCode *string `protobuf:"bytes,1,opt,name=currencyCode" json:"currencyCode,omitempty"` + Amount1000 *int64 `protobuf:"varint,2,opt,name=amount1000" json:"amount1000,omitempty"` unknownFields protoimpl.UnknownFields - - Text *string `protobuf:"bytes,1,opt,name=text" json:"text,omitempty"` + sizeCache protoimpl.SizeCache } -func (x *InteractiveMessage_Body) Reset() { - *x = InteractiveMessage_Body{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[118] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *HighlyStructuredMessage_HSMLocalizableParameter_HSMCurrency) Reset() { + *x = HighlyStructuredMessage_HSMLocalizableParameter_HSMCurrency{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[145] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *InteractiveMessage_Body) String() string { +func (x *HighlyStructuredMessage_HSMLocalizableParameter_HSMCurrency) String() string { return protoimpl.X.MessageStringOf(x) } -func (*InteractiveMessage_Body) ProtoMessage() {} +func (*HighlyStructuredMessage_HSMLocalizableParameter_HSMCurrency) ProtoMessage() {} -func (x *InteractiveMessage_Body) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[118] - if protoimpl.UnsafeEnabled && x != nil { +func (x *HighlyStructuredMessage_HSMLocalizableParameter_HSMCurrency) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[145] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -14356,55 +17410,55 @@ func (x *InteractiveMessage_Body) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use InteractiveMessage_Body.ProtoReflect.Descriptor instead. -func (*InteractiveMessage_Body) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{12, 5} +// Deprecated: Use HighlyStructuredMessage_HSMLocalizableParameter_HSMCurrency.ProtoReflect.Descriptor instead. +func (*HighlyStructuredMessage_HSMLocalizableParameter_HSMCurrency) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{20, 0, 1} } -func (x *InteractiveMessage_Body) GetText() string { - if x != nil && x.Text != nil { - return *x.Text +func (x *HighlyStructuredMessage_HSMLocalizableParameter_HSMCurrency) GetCurrencyCode() string { + if x != nil && x.CurrencyCode != nil { + return *x.CurrencyCode } return "" } -type InteractiveMessage_Header struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +func (x *HighlyStructuredMessage_HSMLocalizableParameter_HSMCurrency) GetAmount1000() int64 { + if x != nil && x.Amount1000 != nil { + return *x.Amount1000 + } + return 0 +} - // Types that are assignable to Media: - // - // *InteractiveMessage_Header_DocumentMessage - // *InteractiveMessage_Header_ImageMessage - // *InteractiveMessage_Header_JPEGThumbnail - // *InteractiveMessage_Header_VideoMessage - // *InteractiveMessage_Header_LocationMessage - // *InteractiveMessage_Header_ProductMessage - Media isInteractiveMessage_Header_Media `protobuf_oneof:"media"` - Title *string `protobuf:"bytes,1,opt,name=title" json:"title,omitempty"` - Subtitle *string `protobuf:"bytes,2,opt,name=subtitle" json:"subtitle,omitempty"` - HasMediaAttachment *bool `protobuf:"varint,5,opt,name=hasMediaAttachment" json:"hasMediaAttachment,omitempty"` +type HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeComponent struct { + state protoimpl.MessageState `protogen:"open.v1"` + DayOfWeek *HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeComponent_DayOfWeekType `protobuf:"varint,1,opt,name=dayOfWeek,enum=WAWebProtobufsE2E.HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeComponent_DayOfWeekType" json:"dayOfWeek,omitempty"` + Year *uint32 `protobuf:"varint,2,opt,name=year" json:"year,omitempty"` + Month *uint32 `protobuf:"varint,3,opt,name=month" json:"month,omitempty"` + DayOfMonth *uint32 `protobuf:"varint,4,opt,name=dayOfMonth" json:"dayOfMonth,omitempty"` + Hour *uint32 `protobuf:"varint,5,opt,name=hour" json:"hour,omitempty"` + Minute *uint32 `protobuf:"varint,6,opt,name=minute" json:"minute,omitempty"` + Calendar *HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeComponent_CalendarType `protobuf:"varint,7,opt,name=calendar,enum=WAWebProtobufsE2E.HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeComponent_CalendarType" json:"calendar,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *InteractiveMessage_Header) Reset() { - *x = InteractiveMessage_Header{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[119] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeComponent) Reset() { + *x = HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeComponent{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[146] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *InteractiveMessage_Header) String() string { +func (x *HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeComponent) String() string { return protoimpl.X.MessageStringOf(x) } -func (*InteractiveMessage_Header) ProtoMessage() {} +func (*HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeComponent) ProtoMessage() { +} -func (x *InteractiveMessage_Header) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[119] - if protoimpl.UnsafeEnabled && x != nil { +func (x *HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeComponent) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[146] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -14414,202 +17468,262 @@ func (x *InteractiveMessage_Header) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use InteractiveMessage_Header.ProtoReflect.Descriptor instead. -func (*InteractiveMessage_Header) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{12, 6} +// Deprecated: Use HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeComponent.ProtoReflect.Descriptor instead. +func (*HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeComponent) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{20, 0, 0, 0} } -func (m *InteractiveMessage_Header) GetMedia() isInteractiveMessage_Header_Media { - if m != nil { - return m.Media +func (x *HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeComponent) GetDayOfWeek() HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeComponent_DayOfWeekType { + if x != nil && x.DayOfWeek != nil { + return *x.DayOfWeek } - return nil + return HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeComponent_MONDAY } -func (x *InteractiveMessage_Header) GetDocumentMessage() *DocumentMessage { - if x, ok := x.GetMedia().(*InteractiveMessage_Header_DocumentMessage); ok { - return x.DocumentMessage +func (x *HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeComponent) GetYear() uint32 { + if x != nil && x.Year != nil { + return *x.Year } - return nil + return 0 } -func (x *InteractiveMessage_Header) GetImageMessage() *ImageMessage { - if x, ok := x.GetMedia().(*InteractiveMessage_Header_ImageMessage); ok { - return x.ImageMessage +func (x *HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeComponent) GetMonth() uint32 { + if x != nil && x.Month != nil { + return *x.Month } - return nil + return 0 } -func (x *InteractiveMessage_Header) GetJPEGThumbnail() []byte { - if x, ok := x.GetMedia().(*InteractiveMessage_Header_JPEGThumbnail); ok { - return x.JPEGThumbnail +func (x *HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeComponent) GetDayOfMonth() uint32 { + if x != nil && x.DayOfMonth != nil { + return *x.DayOfMonth } - return nil + return 0 } -func (x *InteractiveMessage_Header) GetVideoMessage() *VideoMessage { - if x, ok := x.GetMedia().(*InteractiveMessage_Header_VideoMessage); ok { - return x.VideoMessage +func (x *HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeComponent) GetHour() uint32 { + if x != nil && x.Hour != nil { + return *x.Hour } - return nil + return 0 } -func (x *InteractiveMessage_Header) GetLocationMessage() *LocationMessage { - if x, ok := x.GetMedia().(*InteractiveMessage_Header_LocationMessage); ok { - return x.LocationMessage +func (x *HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeComponent) GetMinute() uint32 { + if x != nil && x.Minute != nil { + return *x.Minute } - return nil + return 0 } -func (x *InteractiveMessage_Header) GetProductMessage() *ProductMessage { - if x, ok := x.GetMedia().(*InteractiveMessage_Header_ProductMessage); ok { - return x.ProductMessage +func (x *HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeComponent) GetCalendar() HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeComponent_CalendarType { + if x != nil && x.Calendar != nil { + return *x.Calendar } - return nil + return HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeComponent_GREGORIAN } -func (x *InteractiveMessage_Header) GetTitle() string { - if x != nil && x.Title != nil { - return *x.Title - } - return "" +type HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeUnixEpoch struct { + state protoimpl.MessageState `protogen:"open.v1"` + Timestamp *int64 `protobuf:"varint,1,opt,name=timestamp" json:"timestamp,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *InteractiveMessage_Header) GetSubtitle() string { - if x != nil && x.Subtitle != nil { - return *x.Subtitle - } - return "" +func (x *HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeUnixEpoch) Reset() { + *x = HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeUnixEpoch{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[147] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *InteractiveMessage_Header) GetHasMediaAttachment() bool { - if x != nil && x.HasMediaAttachment != nil { - return *x.HasMediaAttachment - } - return false +func (x *HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeUnixEpoch) String() string { + return protoimpl.X.MessageStringOf(x) } -type isInteractiveMessage_Header_Media interface { - isInteractiveMessage_Header_Media() +func (*HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeUnixEpoch) ProtoMessage() { } -type InteractiveMessage_Header_DocumentMessage struct { - DocumentMessage *DocumentMessage `protobuf:"bytes,3,opt,name=documentMessage,oneof"` +func (x *HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeUnixEpoch) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[147] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -type InteractiveMessage_Header_ImageMessage struct { - ImageMessage *ImageMessage `protobuf:"bytes,4,opt,name=imageMessage,oneof"` +// Deprecated: Use HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeUnixEpoch.ProtoReflect.Descriptor instead. +func (*HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeUnixEpoch) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{20, 0, 0, 1} } -type InteractiveMessage_Header_JPEGThumbnail struct { - JPEGThumbnail []byte `protobuf:"bytes,6,opt,name=JPEGThumbnail,oneof"` +func (x *HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeUnixEpoch) GetTimestamp() int64 { + if x != nil && x.Timestamp != nil { + return *x.Timestamp + } + return 0 } -type InteractiveMessage_Header_VideoMessage struct { - VideoMessage *VideoMessage `protobuf:"bytes,7,opt,name=videoMessage,oneof"` +type PeerDataOperationRequestResponseMessage_PeerDataOperationResult struct { + state protoimpl.MessageState `protogen:"open.v1"` + MediaUploadResult *waMmsRetry.MediaRetryNotification_ResultType `protobuf:"varint,1,opt,name=mediaUploadResult,enum=WAMmsRetry.MediaRetryNotification_ResultType" json:"mediaUploadResult,omitempty"` + StickerMessage *StickerMessage `protobuf:"bytes,2,opt,name=stickerMessage" json:"stickerMessage,omitempty"` + LinkPreviewResponse *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_LinkPreviewResponse `protobuf:"bytes,3,opt,name=linkPreviewResponse" json:"linkPreviewResponse,omitempty"` + PlaceholderMessageResendResponse *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_PlaceholderMessageResendResponse `protobuf:"bytes,4,opt,name=placeholderMessageResendResponse" json:"placeholderMessageResendResponse,omitempty"` + WaffleNonceFetchRequestResponse *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_WaffleNonceFetchResponse `protobuf:"bytes,5,opt,name=waffleNonceFetchRequestResponse" json:"waffleNonceFetchRequestResponse,omitempty"` + FullHistorySyncOnDemandRequestResponse *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_FullHistorySyncOnDemandRequestResponse `protobuf:"bytes,6,opt,name=fullHistorySyncOnDemandRequestResponse" json:"fullHistorySyncOnDemandRequestResponse,omitempty"` + CompanionMetaNonceFetchRequestResponse *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_CompanionMetaNonceFetchResponse `protobuf:"bytes,7,opt,name=companionMetaNonceFetchRequestResponse" json:"companionMetaNonceFetchRequestResponse,omitempty"` + SyncdSnapshotFatalRecoveryResponse *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_SyncDSnapshotFatalRecoveryResponse `protobuf:"bytes,8,opt,name=syncdSnapshotFatalRecoveryResponse" json:"syncdSnapshotFatalRecoveryResponse,omitempty"` + CompanionCanonicalUserNonceFetchRequestResponse *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_CompanionCanonicalUserNonceFetchResponse `protobuf:"bytes,9,opt,name=companionCanonicalUserNonceFetchRequestResponse" json:"companionCanonicalUserNonceFetchRequestResponse,omitempty"` + HistorySyncChunkRetryResponse *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_HistorySyncChunkRetryResponse `protobuf:"bytes,10,opt,name=historySyncChunkRetryResponse" json:"historySyncChunkRetryResponse,omitempty"` + FlowResponsesCsvBundle *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_FlowResponsesCsvBundle `protobuf:"bytes,11,opt,name=flowResponsesCsvBundle" json:"flowResponsesCsvBundle,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -type InteractiveMessage_Header_LocationMessage struct { - LocationMessage *LocationMessage `protobuf:"bytes,8,opt,name=locationMessage,oneof"` +func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult) Reset() { + *x = PeerDataOperationRequestResponseMessage_PeerDataOperationResult{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[148] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -type InteractiveMessage_Header_ProductMessage struct { - ProductMessage *ProductMessage `protobuf:"bytes,9,opt,name=productMessage,oneof"` +func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult) String() string { + return protoimpl.X.MessageStringOf(x) } -func (*InteractiveMessage_Header_DocumentMessage) isInteractiveMessage_Header_Media() {} - -func (*InteractiveMessage_Header_ImageMessage) isInteractiveMessage_Header_Media() {} - -func (*InteractiveMessage_Header_JPEGThumbnail) isInteractiveMessage_Header_Media() {} +func (*PeerDataOperationRequestResponseMessage_PeerDataOperationResult) ProtoMessage() {} -func (*InteractiveMessage_Header_VideoMessage) isInteractiveMessage_Header_Media() {} +func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[148] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} -func (*InteractiveMessage_Header_LocationMessage) isInteractiveMessage_Header_Media() {} +// Deprecated: Use PeerDataOperationRequestResponseMessage_PeerDataOperationResult.ProtoReflect.Descriptor instead. +func (*PeerDataOperationRequestResponseMessage_PeerDataOperationResult) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{21, 0} +} -func (*InteractiveMessage_Header_ProductMessage) isInteractiveMessage_Header_Media() {} +func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult) GetMediaUploadResult() waMmsRetry.MediaRetryNotification_ResultType { + if x != nil && x.MediaUploadResult != nil { + return *x.MediaUploadResult + } + return waMmsRetry.MediaRetryNotification_ResultType(0) +} -type InteractiveMessage_NativeFlowMessage_NativeFlowButton struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult) GetStickerMessage() *StickerMessage { + if x != nil { + return x.StickerMessage + } + return nil +} - Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` - ButtonParamsJSON *string `protobuf:"bytes,2,opt,name=buttonParamsJSON" json:"buttonParamsJSON,omitempty"` +func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult) GetLinkPreviewResponse() *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_LinkPreviewResponse { + if x != nil { + return x.LinkPreviewResponse + } + return nil } -func (x *InteractiveMessage_NativeFlowMessage_NativeFlowButton) Reset() { - *x = InteractiveMessage_NativeFlowMessage_NativeFlowButton{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[120] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) +func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult) GetPlaceholderMessageResendResponse() *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_PlaceholderMessageResendResponse { + if x != nil { + return x.PlaceholderMessageResendResponse } + return nil } -func (x *InteractiveMessage_NativeFlowMessage_NativeFlowButton) String() string { - return protoimpl.X.MessageStringOf(x) +func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult) GetWaffleNonceFetchRequestResponse() *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_WaffleNonceFetchResponse { + if x != nil { + return x.WaffleNonceFetchRequestResponse + } + return nil } -func (*InteractiveMessage_NativeFlowMessage_NativeFlowButton) ProtoMessage() {} +func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult) GetFullHistorySyncOnDemandRequestResponse() *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_FullHistorySyncOnDemandRequestResponse { + if x != nil { + return x.FullHistorySyncOnDemandRequestResponse + } + return nil +} -func (x *InteractiveMessage_NativeFlowMessage_NativeFlowButton) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[120] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms +func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult) GetCompanionMetaNonceFetchRequestResponse() *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_CompanionMetaNonceFetchResponse { + if x != nil { + return x.CompanionMetaNonceFetchRequestResponse } - return mi.MessageOf(x) + return nil } -// Deprecated: Use InteractiveMessage_NativeFlowMessage_NativeFlowButton.ProtoReflect.Descriptor instead. -func (*InteractiveMessage_NativeFlowMessage_NativeFlowButton) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{12, 2, 0} +func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult) GetSyncdSnapshotFatalRecoveryResponse() *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_SyncDSnapshotFatalRecoveryResponse { + if x != nil { + return x.SyncdSnapshotFatalRecoveryResponse + } + return nil } -func (x *InteractiveMessage_NativeFlowMessage_NativeFlowButton) GetName() string { - if x != nil && x.Name != nil { - return *x.Name +func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult) GetCompanionCanonicalUserNonceFetchRequestResponse() *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_CompanionCanonicalUserNonceFetchResponse { + if x != nil { + return x.CompanionCanonicalUserNonceFetchRequestResponse } - return "" + return nil } -func (x *InteractiveMessage_NativeFlowMessage_NativeFlowButton) GetButtonParamsJSON() string { - if x != nil && x.ButtonParamsJSON != nil { - return *x.ButtonParamsJSON +func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult) GetHistorySyncChunkRetryResponse() *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_HistorySyncChunkRetryResponse { + if x != nil { + return x.HistorySyncChunkRetryResponse } - return "" + return nil } -type ListResponseMessage_SingleSelectReply struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult) GetFlowResponsesCsvBundle() *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_FlowResponsesCsvBundle { + if x != nil { + return x.FlowResponsesCsvBundle + } + return nil +} - SelectedRowID *string `protobuf:"bytes,1,opt,name=selectedRowID" json:"selectedRowID,omitempty"` +type PeerDataOperationRequestResponseMessage_PeerDataOperationResult_FlowResponsesCsvBundle struct { + state protoimpl.MessageState `protogen:"open.v1"` + FlowID *string `protobuf:"bytes,1,opt,name=flowID" json:"flowID,omitempty"` + GalaxyFlowDownloadRequestID *string `protobuf:"bytes,2,opt,name=galaxyFlowDownloadRequestID" json:"galaxyFlowDownloadRequestID,omitempty"` + FileName *string `protobuf:"bytes,3,opt,name=fileName" json:"fileName,omitempty"` + Mimetype *string `protobuf:"bytes,4,opt,name=mimetype" json:"mimetype,omitempty"` + FileSHA256 []byte `protobuf:"bytes,5,opt,name=fileSHA256" json:"fileSHA256,omitempty"` + MediaKey []byte `protobuf:"bytes,6,opt,name=mediaKey" json:"mediaKey,omitempty"` + FileEncSHA256 []byte `protobuf:"bytes,7,opt,name=fileEncSHA256" json:"fileEncSHA256,omitempty"` + DirectPath *string `protobuf:"bytes,8,opt,name=directPath" json:"directPath,omitempty"` + MediaKeyTimestamp *int64 `protobuf:"varint,9,opt,name=mediaKeyTimestamp" json:"mediaKeyTimestamp,omitempty"` + FileLength *uint64 `protobuf:"varint,10,opt,name=fileLength" json:"fileLength,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *ListResponseMessage_SingleSelectReply) Reset() { - *x = ListResponseMessage_SingleSelectReply{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[121] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_FlowResponsesCsvBundle) Reset() { + *x = PeerDataOperationRequestResponseMessage_PeerDataOperationResult_FlowResponsesCsvBundle{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[149] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *ListResponseMessage_SingleSelectReply) String() string { +func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_FlowResponsesCsvBundle) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ListResponseMessage_SingleSelectReply) ProtoMessage() {} +func (*PeerDataOperationRequestResponseMessage_PeerDataOperationResult_FlowResponsesCsvBundle) ProtoMessage() { +} -func (x *ListResponseMessage_SingleSelectReply) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[121] - if protoimpl.UnsafeEnabled && x != nil { +func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_FlowResponsesCsvBundle) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[149] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -14619,108 +17733,109 @@ func (x *ListResponseMessage_SingleSelectReply) ProtoReflect() protoreflect.Mess return mi.MessageOf(x) } -// Deprecated: Use ListResponseMessage_SingleSelectReply.ProtoReflect.Descriptor instead. -func (*ListResponseMessage_SingleSelectReply) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{13, 0} +// Deprecated: Use PeerDataOperationRequestResponseMessage_PeerDataOperationResult_FlowResponsesCsvBundle.ProtoReflect.Descriptor instead. +func (*PeerDataOperationRequestResponseMessage_PeerDataOperationResult_FlowResponsesCsvBundle) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{21, 0, 0} } -func (x *ListResponseMessage_SingleSelectReply) GetSelectedRowID() string { - if x != nil && x.SelectedRowID != nil { - return *x.SelectedRowID +func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_FlowResponsesCsvBundle) GetFlowID() string { + if x != nil && x.FlowID != nil { + return *x.FlowID } return "" } -type ListMessage_ProductListInfo struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - ProductSections []*ListMessage_ProductSection `protobuf:"bytes,1,rep,name=productSections" json:"productSections,omitempty"` - HeaderImage *ListMessage_ProductListHeaderImage `protobuf:"bytes,2,opt,name=headerImage" json:"headerImage,omitempty"` - BusinessOwnerJID *string `protobuf:"bytes,3,opt,name=businessOwnerJID" json:"businessOwnerJID,omitempty"` -} - -func (x *ListMessage_ProductListInfo) Reset() { - *x = ListMessage_ProductListInfo{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[122] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) +func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_FlowResponsesCsvBundle) GetGalaxyFlowDownloadRequestID() string { + if x != nil && x.GalaxyFlowDownloadRequestID != nil { + return *x.GalaxyFlowDownloadRequestID } + return "" } -func (x *ListMessage_ProductListInfo) String() string { - return protoimpl.X.MessageStringOf(x) +func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_FlowResponsesCsvBundle) GetFileName() string { + if x != nil && x.FileName != nil { + return *x.FileName + } + return "" } -func (*ListMessage_ProductListInfo) ProtoMessage() {} - -func (x *ListMessage_ProductListInfo) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[122] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms +func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_FlowResponsesCsvBundle) GetMimetype() string { + if x != nil && x.Mimetype != nil { + return *x.Mimetype } - return mi.MessageOf(x) + return "" } -// Deprecated: Use ListMessage_ProductListInfo.ProtoReflect.Descriptor instead. -func (*ListMessage_ProductListInfo) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{14, 0} +func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_FlowResponsesCsvBundle) GetFileSHA256() []byte { + if x != nil { + return x.FileSHA256 + } + return nil } -func (x *ListMessage_ProductListInfo) GetProductSections() []*ListMessage_ProductSection { +func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_FlowResponsesCsvBundle) GetMediaKey() []byte { if x != nil { - return x.ProductSections + return x.MediaKey } return nil } -func (x *ListMessage_ProductListInfo) GetHeaderImage() *ListMessage_ProductListHeaderImage { +func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_FlowResponsesCsvBundle) GetFileEncSHA256() []byte { if x != nil { - return x.HeaderImage + return x.FileEncSHA256 } return nil } -func (x *ListMessage_ProductListInfo) GetBusinessOwnerJID() string { - if x != nil && x.BusinessOwnerJID != nil { - return *x.BusinessOwnerJID +func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_FlowResponsesCsvBundle) GetDirectPath() string { + if x != nil && x.DirectPath != nil { + return *x.DirectPath } return "" } -type ListMessage_ProductListHeaderImage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - ProductID *string `protobuf:"bytes,1,opt,name=productID" json:"productID,omitempty"` - JPEGThumbnail []byte `protobuf:"bytes,2,opt,name=JPEGThumbnail" json:"JPEGThumbnail,omitempty"` +func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_FlowResponsesCsvBundle) GetMediaKeyTimestamp() int64 { + if x != nil && x.MediaKeyTimestamp != nil { + return *x.MediaKeyTimestamp + } + return 0 } -func (x *ListMessage_ProductListHeaderImage) Reset() { - *x = ListMessage_ProductListHeaderImage{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[123] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) +func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_FlowResponsesCsvBundle) GetFileLength() uint64 { + if x != nil && x.FileLength != nil { + return *x.FileLength } + return 0 } -func (x *ListMessage_ProductListHeaderImage) String() string { +type PeerDataOperationRequestResponseMessage_PeerDataOperationResult_HistorySyncChunkRetryResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + SyncType *HistorySyncType `protobuf:"varint,1,opt,name=syncType,enum=WAWebProtobufsE2E.HistorySyncType" json:"syncType,omitempty"` + ChunkOrder *uint32 `protobuf:"varint,2,opt,name=chunkOrder" json:"chunkOrder,omitempty"` + RequestID *string `protobuf:"bytes,3,opt,name=requestID" json:"requestID,omitempty"` + ResponseCode *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_HistorySyncChunkRetryResponseCode `protobuf:"varint,4,opt,name=responseCode,enum=WAWebProtobufsE2E.PeerDataOperationRequestResponseMessage_PeerDataOperationResult_HistorySyncChunkRetryResponseCode" json:"responseCode,omitempty"` + CanRecover *bool `protobuf:"varint,5,opt,name=canRecover" json:"canRecover,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_HistorySyncChunkRetryResponse) Reset() { + *x = PeerDataOperationRequestResponseMessage_PeerDataOperationResult_HistorySyncChunkRetryResponse{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[150] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_HistorySyncChunkRetryResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ListMessage_ProductListHeaderImage) ProtoMessage() {} +func (*PeerDataOperationRequestResponseMessage_PeerDataOperationResult_HistorySyncChunkRetryResponse) ProtoMessage() { +} -func (x *ListMessage_ProductListHeaderImage) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[123] - if protoimpl.UnsafeEnabled && x != nil { +func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_HistorySyncChunkRetryResponse) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[150] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -14730,52 +17845,71 @@ func (x *ListMessage_ProductListHeaderImage) ProtoReflect() protoreflect.Message return mi.MessageOf(x) } -// Deprecated: Use ListMessage_ProductListHeaderImage.ProtoReflect.Descriptor instead. -func (*ListMessage_ProductListHeaderImage) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{14, 1} +// Deprecated: Use PeerDataOperationRequestResponseMessage_PeerDataOperationResult_HistorySyncChunkRetryResponse.ProtoReflect.Descriptor instead. +func (*PeerDataOperationRequestResponseMessage_PeerDataOperationResult_HistorySyncChunkRetryResponse) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{21, 0, 1} } -func (x *ListMessage_ProductListHeaderImage) GetProductID() string { - if x != nil && x.ProductID != nil { - return *x.ProductID +func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_HistorySyncChunkRetryResponse) GetSyncType() HistorySyncType { + if x != nil && x.SyncType != nil { + return *x.SyncType } - return "" + return HistorySyncType_INITIAL_BOOTSTRAP } -func (x *ListMessage_ProductListHeaderImage) GetJPEGThumbnail() []byte { - if x != nil { - return x.JPEGThumbnail +func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_HistorySyncChunkRetryResponse) GetChunkOrder() uint32 { + if x != nil && x.ChunkOrder != nil { + return *x.ChunkOrder } - return nil + return 0 } -type ListMessage_ProductSection struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_HistorySyncChunkRetryResponse) GetRequestID() string { + if x != nil && x.RequestID != nil { + return *x.RequestID + } + return "" +} - Title *string `protobuf:"bytes,1,opt,name=title" json:"title,omitempty"` - Products []*ListMessage_Product `protobuf:"bytes,2,rep,name=products" json:"products,omitempty"` +func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_HistorySyncChunkRetryResponse) GetResponseCode() PeerDataOperationRequestResponseMessage_PeerDataOperationResult_HistorySyncChunkRetryResponseCode { + if x != nil && x.ResponseCode != nil { + return *x.ResponseCode + } + return PeerDataOperationRequestResponseMessage_PeerDataOperationResult_GENERATION_ERROR } -func (x *ListMessage_ProductSection) Reset() { - *x = ListMessage_ProductSection{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[124] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) +func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_HistorySyncChunkRetryResponse) GetCanRecover() bool { + if x != nil && x.CanRecover != nil { + return *x.CanRecover } + return false } -func (x *ListMessage_ProductSection) String() string { +type PeerDataOperationRequestResponseMessage_PeerDataOperationResult_SyncDSnapshotFatalRecoveryResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + CollectionSnapshot []byte `protobuf:"bytes,1,opt,name=collectionSnapshot" json:"collectionSnapshot,omitempty"` + IsCompressed *bool `protobuf:"varint,2,opt,name=isCompressed" json:"isCompressed,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_SyncDSnapshotFatalRecoveryResponse) Reset() { + *x = PeerDataOperationRequestResponseMessage_PeerDataOperationResult_SyncDSnapshotFatalRecoveryResponse{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[151] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_SyncDSnapshotFatalRecoveryResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ListMessage_ProductSection) ProtoMessage() {} +func (*PeerDataOperationRequestResponseMessage_PeerDataOperationResult_SyncDSnapshotFatalRecoveryResponse) ProtoMessage() { +} -func (x *ListMessage_ProductSection) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[124] - if protoimpl.UnsafeEnabled && x != nil { +func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_SyncDSnapshotFatalRecoveryResponse) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[151] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -14785,51 +17919,51 @@ func (x *ListMessage_ProductSection) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ListMessage_ProductSection.ProtoReflect.Descriptor instead. -func (*ListMessage_ProductSection) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{14, 2} +// Deprecated: Use PeerDataOperationRequestResponseMessage_PeerDataOperationResult_SyncDSnapshotFatalRecoveryResponse.ProtoReflect.Descriptor instead. +func (*PeerDataOperationRequestResponseMessage_PeerDataOperationResult_SyncDSnapshotFatalRecoveryResponse) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{21, 0, 2} } -func (x *ListMessage_ProductSection) GetTitle() string { - if x != nil && x.Title != nil { - return *x.Title +func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_SyncDSnapshotFatalRecoveryResponse) GetCollectionSnapshot() []byte { + if x != nil { + return x.CollectionSnapshot } - return "" + return nil } -func (x *ListMessage_ProductSection) GetProducts() []*ListMessage_Product { - if x != nil { - return x.Products +func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_SyncDSnapshotFatalRecoveryResponse) GetIsCompressed() bool { + if x != nil && x.IsCompressed != nil { + return *x.IsCompressed } - return nil + return false } -type ListMessage_Product struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache +type PeerDataOperationRequestResponseMessage_PeerDataOperationResult_CompanionCanonicalUserNonceFetchResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Nonce *string `protobuf:"bytes,1,opt,name=nonce" json:"nonce,omitempty"` + WaFbid *string `protobuf:"bytes,2,opt,name=waFbid" json:"waFbid,omitempty"` + ForceRefresh *bool `protobuf:"varint,3,opt,name=forceRefresh" json:"forceRefresh,omitempty"` unknownFields protoimpl.UnknownFields - - ProductID *string `protobuf:"bytes,1,opt,name=productID" json:"productID,omitempty"` + sizeCache protoimpl.SizeCache } -func (x *ListMessage_Product) Reset() { - *x = ListMessage_Product{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[125] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_CompanionCanonicalUserNonceFetchResponse) Reset() { + *x = PeerDataOperationRequestResponseMessage_PeerDataOperationResult_CompanionCanonicalUserNonceFetchResponse{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[152] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *ListMessage_Product) String() string { +func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_CompanionCanonicalUserNonceFetchResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ListMessage_Product) ProtoMessage() {} +func (*PeerDataOperationRequestResponseMessage_PeerDataOperationResult_CompanionCanonicalUserNonceFetchResponse) ProtoMessage() { +} -func (x *ListMessage_Product) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[125] - if protoimpl.UnsafeEnabled && x != nil { +func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_CompanionCanonicalUserNonceFetchResponse) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[152] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -14839,45 +17973,56 @@ func (x *ListMessage_Product) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ListMessage_Product.ProtoReflect.Descriptor instead. -func (*ListMessage_Product) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{14, 3} +// Deprecated: Use PeerDataOperationRequestResponseMessage_PeerDataOperationResult_CompanionCanonicalUserNonceFetchResponse.ProtoReflect.Descriptor instead. +func (*PeerDataOperationRequestResponseMessage_PeerDataOperationResult_CompanionCanonicalUserNonceFetchResponse) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{21, 0, 3} } -func (x *ListMessage_Product) GetProductID() string { - if x != nil && x.ProductID != nil { - return *x.ProductID +func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_CompanionCanonicalUserNonceFetchResponse) GetNonce() string { + if x != nil && x.Nonce != nil { + return *x.Nonce } return "" } -type ListMessage_Section struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Title *string `protobuf:"bytes,1,opt,name=title" json:"title,omitempty"` - Rows []*ListMessage_Row `protobuf:"bytes,2,rep,name=rows" json:"rows,omitempty"` +func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_CompanionCanonicalUserNonceFetchResponse) GetWaFbid() string { + if x != nil && x.WaFbid != nil { + return *x.WaFbid + } + return "" } -func (x *ListMessage_Section) Reset() { - *x = ListMessage_Section{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[126] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) +func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_CompanionCanonicalUserNonceFetchResponse) GetForceRefresh() bool { + if x != nil && x.ForceRefresh != nil { + return *x.ForceRefresh } + return false +} + +type PeerDataOperationRequestResponseMessage_PeerDataOperationResult_CompanionMetaNonceFetchResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Nonce *string `protobuf:"bytes,1,opt,name=nonce" json:"nonce,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_CompanionMetaNonceFetchResponse) Reset() { + *x = PeerDataOperationRequestResponseMessage_PeerDataOperationResult_CompanionMetaNonceFetchResponse{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[153] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *ListMessage_Section) String() string { +func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_CompanionMetaNonceFetchResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ListMessage_Section) ProtoMessage() {} +func (*PeerDataOperationRequestResponseMessage_PeerDataOperationResult_CompanionMetaNonceFetchResponse) ProtoMessage() { +} -func (x *ListMessage_Section) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[126] - if protoimpl.UnsafeEnabled && x != nil { +func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_CompanionMetaNonceFetchResponse) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[153] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -14887,53 +18032,43 @@ func (x *ListMessage_Section) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ListMessage_Section.ProtoReflect.Descriptor instead. -func (*ListMessage_Section) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{14, 4} +// Deprecated: Use PeerDataOperationRequestResponseMessage_PeerDataOperationResult_CompanionMetaNonceFetchResponse.ProtoReflect.Descriptor instead. +func (*PeerDataOperationRequestResponseMessage_PeerDataOperationResult_CompanionMetaNonceFetchResponse) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{21, 0, 4} } -func (x *ListMessage_Section) GetTitle() string { - if x != nil && x.Title != nil { - return *x.Title +func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_CompanionMetaNonceFetchResponse) GetNonce() string { + if x != nil && x.Nonce != nil { + return *x.Nonce } return "" } -func (x *ListMessage_Section) GetRows() []*ListMessage_Row { - if x != nil { - return x.Rows - } - return nil -} - -type ListMessage_Row struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache +type PeerDataOperationRequestResponseMessage_PeerDataOperationResult_WaffleNonceFetchResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + Nonce *string `protobuf:"bytes,1,opt,name=nonce" json:"nonce,omitempty"` + WaEntFbid *string `protobuf:"bytes,2,opt,name=waEntFbid" json:"waEntFbid,omitempty"` unknownFields protoimpl.UnknownFields - - Title *string `protobuf:"bytes,1,opt,name=title" json:"title,omitempty"` - Description *string `protobuf:"bytes,2,opt,name=description" json:"description,omitempty"` - RowID *string `protobuf:"bytes,3,opt,name=rowID" json:"rowID,omitempty"` + sizeCache protoimpl.SizeCache } -func (x *ListMessage_Row) Reset() { - *x = ListMessage_Row{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[127] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_WaffleNonceFetchResponse) Reset() { + *x = PeerDataOperationRequestResponseMessage_PeerDataOperationResult_WaffleNonceFetchResponse{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[154] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *ListMessage_Row) String() string { +func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_WaffleNonceFetchResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ListMessage_Row) ProtoMessage() {} +func (*PeerDataOperationRequestResponseMessage_PeerDataOperationResult_WaffleNonceFetchResponse) ProtoMessage() { +} -func (x *ListMessage_Row) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[127] - if protoimpl.UnsafeEnabled && x != nil { +func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_WaffleNonceFetchResponse) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[154] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -14943,63 +18078,50 @@ func (x *ListMessage_Row) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ListMessage_Row.ProtoReflect.Descriptor instead. -func (*ListMessage_Row) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{14, 5} -} - -func (x *ListMessage_Row) GetTitle() string { - if x != nil && x.Title != nil { - return *x.Title - } - return "" +// Deprecated: Use PeerDataOperationRequestResponseMessage_PeerDataOperationResult_WaffleNonceFetchResponse.ProtoReflect.Descriptor instead. +func (*PeerDataOperationRequestResponseMessage_PeerDataOperationResult_WaffleNonceFetchResponse) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{21, 0, 5} } -func (x *ListMessage_Row) GetDescription() string { - if x != nil && x.Description != nil { - return *x.Description +func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_WaffleNonceFetchResponse) GetNonce() string { + if x != nil && x.Nonce != nil { + return *x.Nonce } return "" } -func (x *ListMessage_Row) GetRowID() string { - if x != nil && x.RowID != nil { - return *x.RowID +func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_WaffleNonceFetchResponse) GetWaEntFbid() string { + if x != nil && x.WaEntFbid != nil { + return *x.WaEntFbid } return "" } -type HighlyStructuredMessage_HSMLocalizableParameter struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Types that are assignable to ParamOneof: - // - // *HighlyStructuredMessage_HSMLocalizableParameter_Currency - // *HighlyStructuredMessage_HSMLocalizableParameter_DateTime - ParamOneof isHighlyStructuredMessage_HSMLocalizableParameter_ParamOneof `protobuf_oneof:"paramOneof"` - Default *string `protobuf:"bytes,1,opt,name=default" json:"default,omitempty"` +type PeerDataOperationRequestResponseMessage_PeerDataOperationResult_FullHistorySyncOnDemandRequestResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + RequestMetadata *FullHistorySyncOnDemandRequestMetadata `protobuf:"bytes,1,opt,name=requestMetadata" json:"requestMetadata,omitempty"` + ResponseCode *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_FullHistorySyncOnDemandResponseCode `protobuf:"varint,2,opt,name=responseCode,enum=WAWebProtobufsE2E.PeerDataOperationRequestResponseMessage_PeerDataOperationResult_FullHistorySyncOnDemandResponseCode" json:"responseCode,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *HighlyStructuredMessage_HSMLocalizableParameter) Reset() { - *x = HighlyStructuredMessage_HSMLocalizableParameter{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[128] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_FullHistorySyncOnDemandRequestResponse) Reset() { + *x = PeerDataOperationRequestResponseMessage_PeerDataOperationResult_FullHistorySyncOnDemandRequestResponse{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[155] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *HighlyStructuredMessage_HSMLocalizableParameter) String() string { +func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_FullHistorySyncOnDemandRequestResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*HighlyStructuredMessage_HSMLocalizableParameter) ProtoMessage() {} +func (*PeerDataOperationRequestResponseMessage_PeerDataOperationResult_FullHistorySyncOnDemandRequestResponse) ProtoMessage() { +} -func (x *HighlyStructuredMessage_HSMLocalizableParameter) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[128] - if protoimpl.UnsafeEnabled && x != nil { +func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_FullHistorySyncOnDemandRequestResponse) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[155] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -15009,87 +18131,101 @@ func (x *HighlyStructuredMessage_HSMLocalizableParameter) ProtoReflect() protore return mi.MessageOf(x) } -// Deprecated: Use HighlyStructuredMessage_HSMLocalizableParameter.ProtoReflect.Descriptor instead. -func (*HighlyStructuredMessage_HSMLocalizableParameter) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{17, 0} +// Deprecated: Use PeerDataOperationRequestResponseMessage_PeerDataOperationResult_FullHistorySyncOnDemandRequestResponse.ProtoReflect.Descriptor instead. +func (*PeerDataOperationRequestResponseMessage_PeerDataOperationResult_FullHistorySyncOnDemandRequestResponse) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{21, 0, 6} } -func (m *HighlyStructuredMessage_HSMLocalizableParameter) GetParamOneof() isHighlyStructuredMessage_HSMLocalizableParameter_ParamOneof { - if m != nil { - return m.ParamOneof +func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_FullHistorySyncOnDemandRequestResponse) GetRequestMetadata() *FullHistorySyncOnDemandRequestMetadata { + if x != nil { + return x.RequestMetadata } return nil } -func (x *HighlyStructuredMessage_HSMLocalizableParameter) GetCurrency() *HighlyStructuredMessage_HSMLocalizableParameter_HSMCurrency { - if x, ok := x.GetParamOneof().(*HighlyStructuredMessage_HSMLocalizableParameter_Currency); ok { - return x.Currency +func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_FullHistorySyncOnDemandRequestResponse) GetResponseCode() PeerDataOperationRequestResponseMessage_PeerDataOperationResult_FullHistorySyncOnDemandResponseCode { + if x != nil && x.ResponseCode != nil { + return *x.ResponseCode } - return nil + return PeerDataOperationRequestResponseMessage_PeerDataOperationResult_REQUEST_SUCCESS } -func (x *HighlyStructuredMessage_HSMLocalizableParameter) GetDateTime() *HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime { - if x, ok := x.GetParamOneof().(*HighlyStructuredMessage_HSMLocalizableParameter_DateTime); ok { - return x.DateTime - } - return nil +type PeerDataOperationRequestResponseMessage_PeerDataOperationResult_PlaceholderMessageResendResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + WebMessageInfoBytes []byte `protobuf:"bytes,1,opt,name=webMessageInfoBytes" json:"webMessageInfoBytes,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *HighlyStructuredMessage_HSMLocalizableParameter) GetDefault() string { - if x != nil && x.Default != nil { - return *x.Default - } - return "" +func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_PlaceholderMessageResendResponse) Reset() { + *x = PeerDataOperationRequestResponseMessage_PeerDataOperationResult_PlaceholderMessageResendResponse{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[156] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -type isHighlyStructuredMessage_HSMLocalizableParameter_ParamOneof interface { - isHighlyStructuredMessage_HSMLocalizableParameter_ParamOneof() +func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_PlaceholderMessageResendResponse) String() string { + return protoimpl.X.MessageStringOf(x) } -type HighlyStructuredMessage_HSMLocalizableParameter_Currency struct { - Currency *HighlyStructuredMessage_HSMLocalizableParameter_HSMCurrency `protobuf:"bytes,2,opt,name=currency,oneof"` +func (*PeerDataOperationRequestResponseMessage_PeerDataOperationResult_PlaceholderMessageResendResponse) ProtoMessage() { } -type HighlyStructuredMessage_HSMLocalizableParameter_DateTime struct { - DateTime *HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime `protobuf:"bytes,3,opt,name=dateTime,oneof"` +func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_PlaceholderMessageResendResponse) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[156] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -func (*HighlyStructuredMessage_HSMLocalizableParameter_Currency) isHighlyStructuredMessage_HSMLocalizableParameter_ParamOneof() { +// Deprecated: Use PeerDataOperationRequestResponseMessage_PeerDataOperationResult_PlaceholderMessageResendResponse.ProtoReflect.Descriptor instead. +func (*PeerDataOperationRequestResponseMessage_PeerDataOperationResult_PlaceholderMessageResendResponse) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{21, 0, 7} } -func (*HighlyStructuredMessage_HSMLocalizableParameter_DateTime) isHighlyStructuredMessage_HSMLocalizableParameter_ParamOneof() { +func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_PlaceholderMessageResendResponse) GetWebMessageInfoBytes() []byte { + if x != nil { + return x.WebMessageInfoBytes + } + return nil } -type HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Types that are assignable to DatetimeOneof: - // - // *HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_Component - // *HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_UnixEpoch - DatetimeOneof isHighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_DatetimeOneof `protobuf_oneof:"datetimeOneof"` +type PeerDataOperationRequestResponseMessage_PeerDataOperationResult_LinkPreviewResponse struct { + state protoimpl.MessageState `protogen:"open.v1"` + URL *string `protobuf:"bytes,1,opt,name=URL" json:"URL,omitempty"` + Title *string `protobuf:"bytes,2,opt,name=title" json:"title,omitempty"` + Description *string `protobuf:"bytes,3,opt,name=description" json:"description,omitempty"` + ThumbData []byte `protobuf:"bytes,4,opt,name=thumbData" json:"thumbData,omitempty"` + MatchText *string `protobuf:"bytes,6,opt,name=matchText" json:"matchText,omitempty"` + PreviewType *string `protobuf:"bytes,7,opt,name=previewType" json:"previewType,omitempty"` + HqThumbnail *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_LinkPreviewResponse_LinkPreviewHighQualityThumbnail `protobuf:"bytes,8,opt,name=hqThumbnail" json:"hqThumbnail,omitempty"` + PreviewMetadata *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_LinkPreviewResponse_PaymentLinkPreviewMetadata `protobuf:"bytes,9,opt,name=previewMetadata" json:"previewMetadata,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime) Reset() { - *x = HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[129] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_LinkPreviewResponse) Reset() { + *x = PeerDataOperationRequestResponseMessage_PeerDataOperationResult_LinkPreviewResponse{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[157] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime) String() string { +func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_LinkPreviewResponse) String() string { return protoimpl.X.MessageStringOf(x) } -func (*HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime) ProtoMessage() {} +func (*PeerDataOperationRequestResponseMessage_PeerDataOperationResult_LinkPreviewResponse) ProtoMessage() { +} -func (x *HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[129] - if protoimpl.UnsafeEnabled && x != nil { +func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_LinkPreviewResponse) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[157] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -15099,77 +18235,95 @@ func (x *HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime) ProtoRefle return mi.MessageOf(x) } -// Deprecated: Use HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime.ProtoReflect.Descriptor instead. -func (*HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{17, 0, 0} +// Deprecated: Use PeerDataOperationRequestResponseMessage_PeerDataOperationResult_LinkPreviewResponse.ProtoReflect.Descriptor instead. +func (*PeerDataOperationRequestResponseMessage_PeerDataOperationResult_LinkPreviewResponse) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{21, 0, 8} } -func (m *HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime) GetDatetimeOneof() isHighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_DatetimeOneof { - if m != nil { - return m.DatetimeOneof +func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_LinkPreviewResponse) GetURL() string { + if x != nil && x.URL != nil { + return *x.URL } - return nil + return "" } -func (x *HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime) GetComponent() *HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeComponent { - if x, ok := x.GetDatetimeOneof().(*HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_Component); ok { - return x.Component +func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_LinkPreviewResponse) GetTitle() string { + if x != nil && x.Title != nil { + return *x.Title } - return nil + return "" } -func (x *HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime) GetUnixEpoch() *HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeUnixEpoch { - if x, ok := x.GetDatetimeOneof().(*HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_UnixEpoch); ok { - return x.UnixEpoch +func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_LinkPreviewResponse) GetDescription() string { + if x != nil && x.Description != nil { + return *x.Description } - return nil + return "" } -type isHighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_DatetimeOneof interface { - isHighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_DatetimeOneof() +func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_LinkPreviewResponse) GetThumbData() []byte { + if x != nil { + return x.ThumbData + } + return nil } -type HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_Component struct { - Component *HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeComponent `protobuf:"bytes,1,opt,name=component,oneof"` +func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_LinkPreviewResponse) GetMatchText() string { + if x != nil && x.MatchText != nil { + return *x.MatchText + } + return "" } -type HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_UnixEpoch struct { - UnixEpoch *HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeUnixEpoch `protobuf:"bytes,2,opt,name=unixEpoch,oneof"` +func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_LinkPreviewResponse) GetPreviewType() string { + if x != nil && x.PreviewType != nil { + return *x.PreviewType + } + return "" } -func (*HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_Component) isHighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_DatetimeOneof() { +func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_LinkPreviewResponse) GetHqThumbnail() *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_LinkPreviewResponse_LinkPreviewHighQualityThumbnail { + if x != nil { + return x.HqThumbnail + } + return nil } -func (*HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_UnixEpoch) isHighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_DatetimeOneof() { +func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_LinkPreviewResponse) GetPreviewMetadata() *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_LinkPreviewResponse_PaymentLinkPreviewMetadata { + if x != nil { + return x.PreviewMetadata + } + return nil } -type HighlyStructuredMessage_HSMLocalizableParameter_HSMCurrency struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - CurrencyCode *string `protobuf:"bytes,1,opt,name=currencyCode" json:"currencyCode,omitempty"` - Amount1000 *int64 `protobuf:"varint,2,opt,name=amount1000" json:"amount1000,omitempty"` +type PeerDataOperationRequestResponseMessage_PeerDataOperationResult_LinkPreviewResponse_PaymentLinkPreviewMetadata struct { + state protoimpl.MessageState `protogen:"open.v1"` + IsBusinessVerified *bool `protobuf:"varint,1,opt,name=isBusinessVerified" json:"isBusinessVerified,omitempty"` + ProviderName *string `protobuf:"bytes,2,opt,name=providerName" json:"providerName,omitempty"` + Amount *string `protobuf:"bytes,3,opt,name=amount" json:"amount,omitempty"` + Offset *string `protobuf:"bytes,4,opt,name=offset" json:"offset,omitempty"` + Currency *string `protobuf:"bytes,5,opt,name=currency" json:"currency,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *HighlyStructuredMessage_HSMLocalizableParameter_HSMCurrency) Reset() { - *x = HighlyStructuredMessage_HSMLocalizableParameter_HSMCurrency{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[130] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_LinkPreviewResponse_PaymentLinkPreviewMetadata) Reset() { + *x = PeerDataOperationRequestResponseMessage_PeerDataOperationResult_LinkPreviewResponse_PaymentLinkPreviewMetadata{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[158] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *HighlyStructuredMessage_HSMLocalizableParameter_HSMCurrency) String() string { +func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_LinkPreviewResponse_PaymentLinkPreviewMetadata) String() string { return protoimpl.X.MessageStringOf(x) } -func (*HighlyStructuredMessage_HSMLocalizableParameter_HSMCurrency) ProtoMessage() {} +func (*PeerDataOperationRequestResponseMessage_PeerDataOperationResult_LinkPreviewResponse_PaymentLinkPreviewMetadata) ProtoMessage() { +} -func (x *HighlyStructuredMessage_HSMLocalizableParameter_HSMCurrency) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[130] - if protoimpl.UnsafeEnabled && x != nil { +func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_LinkPreviewResponse_PaymentLinkPreviewMetadata) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[158] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -15179,58 +18333,76 @@ func (x *HighlyStructuredMessage_HSMLocalizableParameter_HSMCurrency) ProtoRefle return mi.MessageOf(x) } -// Deprecated: Use HighlyStructuredMessage_HSMLocalizableParameter_HSMCurrency.ProtoReflect.Descriptor instead. -func (*HighlyStructuredMessage_HSMLocalizableParameter_HSMCurrency) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{17, 0, 1} +// Deprecated: Use PeerDataOperationRequestResponseMessage_PeerDataOperationResult_LinkPreviewResponse_PaymentLinkPreviewMetadata.ProtoReflect.Descriptor instead. +func (*PeerDataOperationRequestResponseMessage_PeerDataOperationResult_LinkPreviewResponse_PaymentLinkPreviewMetadata) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{21, 0, 8, 0} } -func (x *HighlyStructuredMessage_HSMLocalizableParameter_HSMCurrency) GetCurrencyCode() string { - if x != nil && x.CurrencyCode != nil { - return *x.CurrencyCode +func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_LinkPreviewResponse_PaymentLinkPreviewMetadata) GetIsBusinessVerified() bool { + if x != nil && x.IsBusinessVerified != nil { + return *x.IsBusinessVerified + } + return false +} + +func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_LinkPreviewResponse_PaymentLinkPreviewMetadata) GetProviderName() string { + if x != nil && x.ProviderName != nil { + return *x.ProviderName + } + return "" +} + +func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_LinkPreviewResponse_PaymentLinkPreviewMetadata) GetAmount() string { + if x != nil && x.Amount != nil { + return *x.Amount } return "" } -func (x *HighlyStructuredMessage_HSMLocalizableParameter_HSMCurrency) GetAmount1000() int64 { - if x != nil && x.Amount1000 != nil { - return *x.Amount1000 +func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_LinkPreviewResponse_PaymentLinkPreviewMetadata) GetOffset() string { + if x != nil && x.Offset != nil { + return *x.Offset } - return 0 + return "" } -type HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeComponent struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_LinkPreviewResponse_PaymentLinkPreviewMetadata) GetCurrency() string { + if x != nil && x.Currency != nil { + return *x.Currency + } + return "" +} - DayOfWeek *HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeComponent_DayOfWeekType `protobuf:"varint,1,opt,name=dayOfWeek,enum=WAWebProtobufsE2E.HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeComponent_DayOfWeekType" json:"dayOfWeek,omitempty"` - Year *uint32 `protobuf:"varint,2,opt,name=year" json:"year,omitempty"` - Month *uint32 `protobuf:"varint,3,opt,name=month" json:"month,omitempty"` - DayOfMonth *uint32 `protobuf:"varint,4,opt,name=dayOfMonth" json:"dayOfMonth,omitempty"` - Hour *uint32 `protobuf:"varint,5,opt,name=hour" json:"hour,omitempty"` - Minute *uint32 `protobuf:"varint,6,opt,name=minute" json:"minute,omitempty"` - Calendar *HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeComponent_CalendarType `protobuf:"varint,7,opt,name=calendar,enum=WAWebProtobufsE2E.HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeComponent_CalendarType" json:"calendar,omitempty"` +type PeerDataOperationRequestResponseMessage_PeerDataOperationResult_LinkPreviewResponse_LinkPreviewHighQualityThumbnail struct { + state protoimpl.MessageState `protogen:"open.v1"` + DirectPath *string `protobuf:"bytes,1,opt,name=directPath" json:"directPath,omitempty"` + ThumbHash *string `protobuf:"bytes,2,opt,name=thumbHash" json:"thumbHash,omitempty"` + EncThumbHash *string `protobuf:"bytes,3,opt,name=encThumbHash" json:"encThumbHash,omitempty"` + MediaKey []byte `protobuf:"bytes,4,opt,name=mediaKey" json:"mediaKey,omitempty"` + MediaKeyTimestampMS *int64 `protobuf:"varint,5,opt,name=mediaKeyTimestampMS" json:"mediaKeyTimestampMS,omitempty"` + ThumbWidth *int32 `protobuf:"varint,6,opt,name=thumbWidth" json:"thumbWidth,omitempty"` + ThumbHeight *int32 `protobuf:"varint,7,opt,name=thumbHeight" json:"thumbHeight,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeComponent) Reset() { - *x = HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeComponent{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[131] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_LinkPreviewResponse_LinkPreviewHighQualityThumbnail) Reset() { + *x = PeerDataOperationRequestResponseMessage_PeerDataOperationResult_LinkPreviewResponse_LinkPreviewHighQualityThumbnail{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[159] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeComponent) String() string { +func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_LinkPreviewResponse_LinkPreviewHighQualityThumbnail) String() string { return protoimpl.X.MessageStringOf(x) } -func (*HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeComponent) ProtoMessage() { +func (*PeerDataOperationRequestResponseMessage_PeerDataOperationResult_LinkPreviewResponse_LinkPreviewHighQualityThumbnail) ProtoMessage() { } -func (x *HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeComponent) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[131] - if protoimpl.UnsafeEnabled && x != nil { +func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_LinkPreviewResponse_LinkPreviewHighQualityThumbnail) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[159] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -15240,87 +18412,87 @@ func (x *HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTime return mi.MessageOf(x) } -// Deprecated: Use HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeComponent.ProtoReflect.Descriptor instead. -func (*HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeComponent) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{17, 0, 0, 0} +// Deprecated: Use PeerDataOperationRequestResponseMessage_PeerDataOperationResult_LinkPreviewResponse_LinkPreviewHighQualityThumbnail.ProtoReflect.Descriptor instead. +func (*PeerDataOperationRequestResponseMessage_PeerDataOperationResult_LinkPreviewResponse_LinkPreviewHighQualityThumbnail) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{21, 0, 8, 1} } -func (x *HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeComponent) GetDayOfWeek() HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeComponent_DayOfWeekType { - if x != nil && x.DayOfWeek != nil { - return *x.DayOfWeek +func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_LinkPreviewResponse_LinkPreviewHighQualityThumbnail) GetDirectPath() string { + if x != nil && x.DirectPath != nil { + return *x.DirectPath } - return HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeComponent_MONDAY + return "" } -func (x *HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeComponent) GetYear() uint32 { - if x != nil && x.Year != nil { - return *x.Year +func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_LinkPreviewResponse_LinkPreviewHighQualityThumbnail) GetThumbHash() string { + if x != nil && x.ThumbHash != nil { + return *x.ThumbHash } - return 0 + return "" } -func (x *HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeComponent) GetMonth() uint32 { - if x != nil && x.Month != nil { - return *x.Month +func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_LinkPreviewResponse_LinkPreviewHighQualityThumbnail) GetEncThumbHash() string { + if x != nil && x.EncThumbHash != nil { + return *x.EncThumbHash } - return 0 + return "" } -func (x *HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeComponent) GetDayOfMonth() uint32 { - if x != nil && x.DayOfMonth != nil { - return *x.DayOfMonth +func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_LinkPreviewResponse_LinkPreviewHighQualityThumbnail) GetMediaKey() []byte { + if x != nil { + return x.MediaKey } - return 0 + return nil } -func (x *HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeComponent) GetHour() uint32 { - if x != nil && x.Hour != nil { - return *x.Hour +func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_LinkPreviewResponse_LinkPreviewHighQualityThumbnail) GetMediaKeyTimestampMS() int64 { + if x != nil && x.MediaKeyTimestampMS != nil { + return *x.MediaKeyTimestampMS } return 0 } -func (x *HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeComponent) GetMinute() uint32 { - if x != nil && x.Minute != nil { - return *x.Minute +func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_LinkPreviewResponse_LinkPreviewHighQualityThumbnail) GetThumbWidth() int32 { + if x != nil && x.ThumbWidth != nil { + return *x.ThumbWidth } return 0 } -func (x *HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeComponent) GetCalendar() HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeComponent_CalendarType { - if x != nil && x.Calendar != nil { - return *x.Calendar +func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_LinkPreviewResponse_LinkPreviewHighQualityThumbnail) GetThumbHeight() int32 { + if x != nil && x.ThumbHeight != nil { + return *x.ThumbHeight } - return HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeComponent_GREGORIAN + return 0 } -type HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeUnixEpoch struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Timestamp *int64 `protobuf:"varint,1,opt,name=timestamp" json:"timestamp,omitempty"` +type PeerDataOperationRequestMessage_GalaxyFlowAction struct { + state protoimpl.MessageState `protogen:"open.v1"` + Type *PeerDataOperationRequestMessage_GalaxyFlowAction_GalaxyFlowActionType `protobuf:"varint,1,opt,name=type,enum=WAWebProtobufsE2E.PeerDataOperationRequestMessage_GalaxyFlowAction_GalaxyFlowActionType" json:"type,omitempty"` + FlowID *string `protobuf:"bytes,2,opt,name=flowID" json:"flowID,omitempty"` + StanzaID *string `protobuf:"bytes,3,opt,name=stanzaID" json:"stanzaID,omitempty"` + GalaxyFlowDownloadRequestID *string `protobuf:"bytes,4,opt,name=galaxyFlowDownloadRequestID" json:"galaxyFlowDownloadRequestID,omitempty"` + AgmID *string `protobuf:"bytes,5,opt,name=agmID" json:"agmID,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeUnixEpoch) Reset() { - *x = HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeUnixEpoch{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[132] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *PeerDataOperationRequestMessage_GalaxyFlowAction) Reset() { + *x = PeerDataOperationRequestMessage_GalaxyFlowAction{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[160] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeUnixEpoch) String() string { +func (x *PeerDataOperationRequestMessage_GalaxyFlowAction) String() string { return protoimpl.X.MessageStringOf(x) } -func (*HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeUnixEpoch) ProtoMessage() { -} +func (*PeerDataOperationRequestMessage_GalaxyFlowAction) ProtoMessage() {} -func (x *HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeUnixEpoch) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[132] - if protoimpl.UnsafeEnabled && x != nil { +func (x *PeerDataOperationRequestMessage_GalaxyFlowAction) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[160] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -15330,133 +18502,116 @@ func (x *HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTime return mi.MessageOf(x) } -// Deprecated: Use HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeUnixEpoch.ProtoReflect.Descriptor instead. -func (*HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeUnixEpoch) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{17, 0, 0, 1} +// Deprecated: Use PeerDataOperationRequestMessage_GalaxyFlowAction.ProtoReflect.Descriptor instead. +func (*PeerDataOperationRequestMessage_GalaxyFlowAction) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{22, 0} } -func (x *HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeUnixEpoch) GetTimestamp() int64 { - if x != nil && x.Timestamp != nil { - return *x.Timestamp +func (x *PeerDataOperationRequestMessage_GalaxyFlowAction) GetType() PeerDataOperationRequestMessage_GalaxyFlowAction_GalaxyFlowActionType { + if x != nil && x.Type != nil { + return *x.Type } - return 0 + return PeerDataOperationRequestMessage_GalaxyFlowAction_NOTIFY_LAUNCH } -type PeerDataOperationRequestResponseMessage_PeerDataOperationResult struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - MediaUploadResult *waMmsRetry.MediaRetryNotification_ResultType `protobuf:"varint,1,opt,name=mediaUploadResult,enum=WAMmsRetry.MediaRetryNotification_ResultType" json:"mediaUploadResult,omitempty"` - StickerMessage *StickerMessage `protobuf:"bytes,2,opt,name=stickerMessage" json:"stickerMessage,omitempty"` - LinkPreviewResponse *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_LinkPreviewResponse `protobuf:"bytes,3,opt,name=linkPreviewResponse" json:"linkPreviewResponse,omitempty"` - PlaceholderMessageResendResponse *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_PlaceholderMessageResendResponse `protobuf:"bytes,4,opt,name=placeholderMessageResendResponse" json:"placeholderMessageResendResponse,omitempty"` - WaffleNonceFetchRequestResponse *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_WaffleNonceFetchResponse `protobuf:"bytes,5,opt,name=waffleNonceFetchRequestResponse" json:"waffleNonceFetchRequestResponse,omitempty"` - FullHistorySyncOnDemandRequestResponse *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_FullHistorySyncOnDemandRequestResponse `protobuf:"bytes,6,opt,name=fullHistorySyncOnDemandRequestResponse" json:"fullHistorySyncOnDemandRequestResponse,omitempty"` +func (x *PeerDataOperationRequestMessage_GalaxyFlowAction) GetFlowID() string { + if x != nil && x.FlowID != nil { + return *x.FlowID + } + return "" } -func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult) Reset() { - *x = PeerDataOperationRequestResponseMessage_PeerDataOperationResult{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[133] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) +func (x *PeerDataOperationRequestMessage_GalaxyFlowAction) GetStanzaID() string { + if x != nil && x.StanzaID != nil { + return *x.StanzaID } + return "" } -func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult) String() string { - return protoimpl.X.MessageStringOf(x) +func (x *PeerDataOperationRequestMessage_GalaxyFlowAction) GetGalaxyFlowDownloadRequestID() string { + if x != nil && x.GalaxyFlowDownloadRequestID != nil { + return *x.GalaxyFlowDownloadRequestID + } + return "" } -func (*PeerDataOperationRequestResponseMessage_PeerDataOperationResult) ProtoMessage() {} - -func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[133] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms +func (x *PeerDataOperationRequestMessage_GalaxyFlowAction) GetAgmID() string { + if x != nil && x.AgmID != nil { + return *x.AgmID } - return mi.MessageOf(x) + return "" } -// Deprecated: Use PeerDataOperationRequestResponseMessage_PeerDataOperationResult.ProtoReflect.Descriptor instead. -func (*PeerDataOperationRequestResponseMessage_PeerDataOperationResult) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{18, 0} +type PeerDataOperationRequestMessage_CompanionCanonicalUserNonceFetchRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + RegistrationTraceID *string `protobuf:"bytes,1,opt,name=registrationTraceID" json:"registrationTraceID,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult) GetMediaUploadResult() waMmsRetry.MediaRetryNotification_ResultType { - if x != nil && x.MediaUploadResult != nil { - return *x.MediaUploadResult - } - return waMmsRetry.MediaRetryNotification_ResultType(0) +func (x *PeerDataOperationRequestMessage_CompanionCanonicalUserNonceFetchRequest) Reset() { + *x = PeerDataOperationRequestMessage_CompanionCanonicalUserNonceFetchRequest{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[161] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult) GetStickerMessage() *StickerMessage { - if x != nil { - return x.StickerMessage - } - return nil +func (x *PeerDataOperationRequestMessage_CompanionCanonicalUserNonceFetchRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult) GetLinkPreviewResponse() *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_LinkPreviewResponse { - if x != nil { - return x.LinkPreviewResponse - } - return nil -} +func (*PeerDataOperationRequestMessage_CompanionCanonicalUserNonceFetchRequest) ProtoMessage() {} -func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult) GetPlaceholderMessageResendResponse() *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_PlaceholderMessageResendResponse { +func (x *PeerDataOperationRequestMessage_CompanionCanonicalUserNonceFetchRequest) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[161] if x != nil { - return x.PlaceholderMessageResendResponse + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return nil + return mi.MessageOf(x) } -func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult) GetWaffleNonceFetchRequestResponse() *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_WaffleNonceFetchResponse { - if x != nil { - return x.WaffleNonceFetchRequestResponse - } - return nil +// Deprecated: Use PeerDataOperationRequestMessage_CompanionCanonicalUserNonceFetchRequest.ProtoReflect.Descriptor instead. +func (*PeerDataOperationRequestMessage_CompanionCanonicalUserNonceFetchRequest) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{22, 1} } -func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult) GetFullHistorySyncOnDemandRequestResponse() *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_FullHistorySyncOnDemandRequestResponse { - if x != nil { - return x.FullHistorySyncOnDemandRequestResponse +func (x *PeerDataOperationRequestMessage_CompanionCanonicalUserNonceFetchRequest) GetRegistrationTraceID() string { + if x != nil && x.RegistrationTraceID != nil { + return *x.RegistrationTraceID } - return nil + return "" } -type PeerDataOperationRequestResponseMessage_PeerDataOperationResult_WaffleNonceFetchResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Nonce *string `protobuf:"bytes,1,opt,name=nonce" json:"nonce,omitempty"` - WaEntFbid *string `protobuf:"bytes,2,opt,name=waEntFbid" json:"waEntFbid,omitempty"` +type PeerDataOperationRequestMessage_HistorySyncChunkRetryRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + SyncType *HistorySyncType `protobuf:"varint,1,opt,name=syncType,enum=WAWebProtobufsE2E.HistorySyncType" json:"syncType,omitempty"` + ChunkOrder *uint32 `protobuf:"varint,2,opt,name=chunkOrder" json:"chunkOrder,omitempty"` + ChunkNotificationID *string `protobuf:"bytes,3,opt,name=chunkNotificationID" json:"chunkNotificationID,omitempty"` + RegenerateChunk *bool `protobuf:"varint,4,opt,name=regenerateChunk" json:"regenerateChunk,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_WaffleNonceFetchResponse) Reset() { - *x = PeerDataOperationRequestResponseMessage_PeerDataOperationResult_WaffleNonceFetchResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[134] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *PeerDataOperationRequestMessage_HistorySyncChunkRetryRequest) Reset() { + *x = PeerDataOperationRequestMessage_HistorySyncChunkRetryRequest{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[162] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_WaffleNonceFetchResponse) String() string { +func (x *PeerDataOperationRequestMessage_HistorySyncChunkRetryRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*PeerDataOperationRequestResponseMessage_PeerDataOperationResult_WaffleNonceFetchResponse) ProtoMessage() { -} +func (*PeerDataOperationRequestMessage_HistorySyncChunkRetryRequest) ProtoMessage() {} -func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_WaffleNonceFetchResponse) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[134] - if protoimpl.UnsafeEnabled && x != nil { +func (x *PeerDataOperationRequestMessage_HistorySyncChunkRetryRequest) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[162] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -15466,53 +18621,63 @@ func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_WaffleN return mi.MessageOf(x) } -// Deprecated: Use PeerDataOperationRequestResponseMessage_PeerDataOperationResult_WaffleNonceFetchResponse.ProtoReflect.Descriptor instead. -func (*PeerDataOperationRequestResponseMessage_PeerDataOperationResult_WaffleNonceFetchResponse) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{18, 0, 0} +// Deprecated: Use PeerDataOperationRequestMessage_HistorySyncChunkRetryRequest.ProtoReflect.Descriptor instead. +func (*PeerDataOperationRequestMessage_HistorySyncChunkRetryRequest) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{22, 2} } -func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_WaffleNonceFetchResponse) GetNonce() string { - if x != nil && x.Nonce != nil { - return *x.Nonce +func (x *PeerDataOperationRequestMessage_HistorySyncChunkRetryRequest) GetSyncType() HistorySyncType { + if x != nil && x.SyncType != nil { + return *x.SyncType } - return "" + return HistorySyncType_INITIAL_BOOTSTRAP } -func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_WaffleNonceFetchResponse) GetWaEntFbid() string { - if x != nil && x.WaEntFbid != nil { - return *x.WaEntFbid +func (x *PeerDataOperationRequestMessage_HistorySyncChunkRetryRequest) GetChunkOrder() uint32 { + if x != nil && x.ChunkOrder != nil { + return *x.ChunkOrder + } + return 0 +} + +func (x *PeerDataOperationRequestMessage_HistorySyncChunkRetryRequest) GetChunkNotificationID() string { + if x != nil && x.ChunkNotificationID != nil { + return *x.ChunkNotificationID } return "" } -type PeerDataOperationRequestResponseMessage_PeerDataOperationResult_FullHistorySyncOnDemandRequestResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +func (x *PeerDataOperationRequestMessage_HistorySyncChunkRetryRequest) GetRegenerateChunk() bool { + if x != nil && x.RegenerateChunk != nil { + return *x.RegenerateChunk + } + return false +} - RequestMetadata *FullHistorySyncOnDemandRequestMetadata `protobuf:"bytes,1,opt,name=requestMetadata" json:"requestMetadata,omitempty"` - ResponseCode *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_FullHistorySyncOnDemandResponseCode `protobuf:"varint,2,opt,name=responseCode,enum=WAWebProtobufsE2E.PeerDataOperationRequestResponseMessage_PeerDataOperationResult_FullHistorySyncOnDemandResponseCode" json:"responseCode,omitempty"` +type PeerDataOperationRequestMessage_SyncDCollectionFatalRecoveryRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + CollectionName *string `protobuf:"bytes,1,opt,name=collectionName" json:"collectionName,omitempty"` + Timestamp *int64 `protobuf:"varint,2,opt,name=timestamp" json:"timestamp,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_FullHistorySyncOnDemandRequestResponse) Reset() { - *x = PeerDataOperationRequestResponseMessage_PeerDataOperationResult_FullHistorySyncOnDemandRequestResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[135] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *PeerDataOperationRequestMessage_SyncDCollectionFatalRecoveryRequest) Reset() { + *x = PeerDataOperationRequestMessage_SyncDCollectionFatalRecoveryRequest{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[163] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_FullHistorySyncOnDemandRequestResponse) String() string { +func (x *PeerDataOperationRequestMessage_SyncDCollectionFatalRecoveryRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*PeerDataOperationRequestResponseMessage_PeerDataOperationResult_FullHistorySyncOnDemandRequestResponse) ProtoMessage() { -} +func (*PeerDataOperationRequestMessage_SyncDCollectionFatalRecoveryRequest) ProtoMessage() {} -func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_FullHistorySyncOnDemandRequestResponse) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[135] - if protoimpl.UnsafeEnabled && x != nil { +func (x *PeerDataOperationRequestMessage_SyncDCollectionFatalRecoveryRequest) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[163] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -15522,52 +18687,48 @@ func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_FullHis return mi.MessageOf(x) } -// Deprecated: Use PeerDataOperationRequestResponseMessage_PeerDataOperationResult_FullHistorySyncOnDemandRequestResponse.ProtoReflect.Descriptor instead. -func (*PeerDataOperationRequestResponseMessage_PeerDataOperationResult_FullHistorySyncOnDemandRequestResponse) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{18, 0, 1} +// Deprecated: Use PeerDataOperationRequestMessage_SyncDCollectionFatalRecoveryRequest.ProtoReflect.Descriptor instead. +func (*PeerDataOperationRequestMessage_SyncDCollectionFatalRecoveryRequest) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{22, 3} } -func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_FullHistorySyncOnDemandRequestResponse) GetRequestMetadata() *FullHistorySyncOnDemandRequestMetadata { - if x != nil { - return x.RequestMetadata +func (x *PeerDataOperationRequestMessage_SyncDCollectionFatalRecoveryRequest) GetCollectionName() string { + if x != nil && x.CollectionName != nil { + return *x.CollectionName } - return nil + return "" } -func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_FullHistorySyncOnDemandRequestResponse) GetResponseCode() PeerDataOperationRequestResponseMessage_PeerDataOperationResult_FullHistorySyncOnDemandResponseCode { - if x != nil && x.ResponseCode != nil { - return *x.ResponseCode +func (x *PeerDataOperationRequestMessage_SyncDCollectionFatalRecoveryRequest) GetTimestamp() int64 { + if x != nil && x.Timestamp != nil { + return *x.Timestamp } - return PeerDataOperationRequestResponseMessage_PeerDataOperationResult_REQUEST_SUCCESS + return 0 } -type PeerDataOperationRequestResponseMessage_PeerDataOperationResult_PlaceholderMessageResendResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache +type PeerDataOperationRequestMessage_PlaceholderMessageResendRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + MessageKey *waCommon.MessageKey `protobuf:"bytes,1,opt,name=messageKey" json:"messageKey,omitempty"` unknownFields protoimpl.UnknownFields - - WebMessageInfoBytes []byte `protobuf:"bytes,1,opt,name=webMessageInfoBytes" json:"webMessageInfoBytes,omitempty"` -} - -func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_PlaceholderMessageResendResponse) Reset() { - *x = PeerDataOperationRequestResponseMessage_PeerDataOperationResult_PlaceholderMessageResendResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[136] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + sizeCache protoimpl.SizeCache } -func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_PlaceholderMessageResendResponse) String() string { - return protoimpl.X.MessageStringOf(x) +func (x *PeerDataOperationRequestMessage_PlaceholderMessageResendRequest) Reset() { + *x = PeerDataOperationRequestMessage_PlaceholderMessageResendRequest{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[164] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (*PeerDataOperationRequestResponseMessage_PeerDataOperationResult_PlaceholderMessageResendResponse) ProtoMessage() { +func (x *PeerDataOperationRequestMessage_PlaceholderMessageResendRequest) String() string { + return protoimpl.X.MessageStringOf(x) } -func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_PlaceholderMessageResendResponse) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[136] - if protoimpl.UnsafeEnabled && x != nil { +func (*PeerDataOperationRequestMessage_PlaceholderMessageResendRequest) ProtoMessage() {} + +func (x *PeerDataOperationRequestMessage_PlaceholderMessageResendRequest) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[164] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -15577,52 +18738,43 @@ func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_Placeho return mi.MessageOf(x) } -// Deprecated: Use PeerDataOperationRequestResponseMessage_PeerDataOperationResult_PlaceholderMessageResendResponse.ProtoReflect.Descriptor instead. -func (*PeerDataOperationRequestResponseMessage_PeerDataOperationResult_PlaceholderMessageResendResponse) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{18, 0, 2} +// Deprecated: Use PeerDataOperationRequestMessage_PlaceholderMessageResendRequest.ProtoReflect.Descriptor instead. +func (*PeerDataOperationRequestMessage_PlaceholderMessageResendRequest) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{22, 4} } -func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_PlaceholderMessageResendResponse) GetWebMessageInfoBytes() []byte { +func (x *PeerDataOperationRequestMessage_PlaceholderMessageResendRequest) GetMessageKey() *waCommon.MessageKey { if x != nil { - return x.WebMessageInfoBytes + return x.MessageKey } return nil } -type PeerDataOperationRequestResponseMessage_PeerDataOperationResult_LinkPreviewResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - URL *string `protobuf:"bytes,1,opt,name=URL" json:"URL,omitempty"` - Title *string `protobuf:"bytes,2,opt,name=title" json:"title,omitempty"` - Description *string `protobuf:"bytes,3,opt,name=description" json:"description,omitempty"` - ThumbData []byte `protobuf:"bytes,4,opt,name=thumbData" json:"thumbData,omitempty"` - CanonicalURL *string `protobuf:"bytes,5,opt,name=canonicalURL" json:"canonicalURL,omitempty"` - MatchText *string `protobuf:"bytes,6,opt,name=matchText" json:"matchText,omitempty"` - PreviewType *string `protobuf:"bytes,7,opt,name=previewType" json:"previewType,omitempty"` - HqThumbnail *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_LinkPreviewResponse_LinkPreviewHighQualityThumbnail `protobuf:"bytes,8,opt,name=hqThumbnail" json:"hqThumbnail,omitempty"` +type PeerDataOperationRequestMessage_FullHistorySyncOnDemandRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + RequestMetadata *FullHistorySyncOnDemandRequestMetadata `protobuf:"bytes,1,opt,name=requestMetadata" json:"requestMetadata,omitempty"` + HistorySyncConfig *waCompanionReg.DeviceProps_HistorySyncConfig `protobuf:"bytes,2,opt,name=historySyncConfig" json:"historySyncConfig,omitempty"` + FullHistorySyncOnDemandConfig *FullHistorySyncOnDemandConfig `protobuf:"bytes,3,opt,name=fullHistorySyncOnDemandConfig" json:"fullHistorySyncOnDemandConfig,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_LinkPreviewResponse) Reset() { - *x = PeerDataOperationRequestResponseMessage_PeerDataOperationResult_LinkPreviewResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[137] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *PeerDataOperationRequestMessage_FullHistorySyncOnDemandRequest) Reset() { + *x = PeerDataOperationRequestMessage_FullHistorySyncOnDemandRequest{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[165] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_LinkPreviewResponse) String() string { +func (x *PeerDataOperationRequestMessage_FullHistorySyncOnDemandRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*PeerDataOperationRequestResponseMessage_PeerDataOperationResult_LinkPreviewResponse) ProtoMessage() { -} +func (*PeerDataOperationRequestMessage_FullHistorySyncOnDemandRequest) ProtoMessage() {} -func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_LinkPreviewResponse) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[137] - if protoimpl.UnsafeEnabled && x != nil { +func (x *PeerDataOperationRequestMessage_FullHistorySyncOnDemandRequest) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[165] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -15632,100 +18784,60 @@ func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_LinkPre return mi.MessageOf(x) } -// Deprecated: Use PeerDataOperationRequestResponseMessage_PeerDataOperationResult_LinkPreviewResponse.ProtoReflect.Descriptor instead. -func (*PeerDataOperationRequestResponseMessage_PeerDataOperationResult_LinkPreviewResponse) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{18, 0, 3} -} - -func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_LinkPreviewResponse) GetURL() string { - if x != nil && x.URL != nil { - return *x.URL - } - return "" -} - -func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_LinkPreviewResponse) GetTitle() string { - if x != nil && x.Title != nil { - return *x.Title - } - return "" -} - -func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_LinkPreviewResponse) GetDescription() string { - if x != nil && x.Description != nil { - return *x.Description - } - return "" +// Deprecated: Use PeerDataOperationRequestMessage_FullHistorySyncOnDemandRequest.ProtoReflect.Descriptor instead. +func (*PeerDataOperationRequestMessage_FullHistorySyncOnDemandRequest) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{22, 5} } -func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_LinkPreviewResponse) GetThumbData() []byte { +func (x *PeerDataOperationRequestMessage_FullHistorySyncOnDemandRequest) GetRequestMetadata() *FullHistorySyncOnDemandRequestMetadata { if x != nil { - return x.ThumbData + return x.RequestMetadata } return nil } -func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_LinkPreviewResponse) GetCanonicalURL() string { - if x != nil && x.CanonicalURL != nil { - return *x.CanonicalURL - } - return "" -} - -func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_LinkPreviewResponse) GetMatchText() string { - if x != nil && x.MatchText != nil { - return *x.MatchText - } - return "" -} - -func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_LinkPreviewResponse) GetPreviewType() string { - if x != nil && x.PreviewType != nil { - return *x.PreviewType +func (x *PeerDataOperationRequestMessage_FullHistorySyncOnDemandRequest) GetHistorySyncConfig() *waCompanionReg.DeviceProps_HistorySyncConfig { + if x != nil { + return x.HistorySyncConfig } - return "" + return nil } -func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_LinkPreviewResponse) GetHqThumbnail() *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_LinkPreviewResponse_LinkPreviewHighQualityThumbnail { +func (x *PeerDataOperationRequestMessage_FullHistorySyncOnDemandRequest) GetFullHistorySyncOnDemandConfig() *FullHistorySyncOnDemandConfig { if x != nil { - return x.HqThumbnail + return x.FullHistorySyncOnDemandConfig } return nil } -type PeerDataOperationRequestResponseMessage_PeerDataOperationResult_LinkPreviewResponse_LinkPreviewHighQualityThumbnail struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - DirectPath *string `protobuf:"bytes,1,opt,name=directPath" json:"directPath,omitempty"` - ThumbHash *string `protobuf:"bytes,2,opt,name=thumbHash" json:"thumbHash,omitempty"` - EncThumbHash *string `protobuf:"bytes,3,opt,name=encThumbHash" json:"encThumbHash,omitempty"` - MediaKey []byte `protobuf:"bytes,4,opt,name=mediaKey" json:"mediaKey,omitempty"` - MediaKeyTimestampMS *int64 `protobuf:"varint,5,opt,name=mediaKeyTimestampMS" json:"mediaKeyTimestampMS,omitempty"` - ThumbWidth *int32 `protobuf:"varint,6,opt,name=thumbWidth" json:"thumbWidth,omitempty"` - ThumbHeight *int32 `protobuf:"varint,7,opt,name=thumbHeight" json:"thumbHeight,omitempty"` +type PeerDataOperationRequestMessage_HistorySyncOnDemandRequest struct { + state protoimpl.MessageState `protogen:"open.v1"` + ChatJID *string `protobuf:"bytes,1,opt,name=chatJID" json:"chatJID,omitempty"` + OldestMsgID *string `protobuf:"bytes,2,opt,name=oldestMsgID" json:"oldestMsgID,omitempty"` + OldestMsgFromMe *bool `protobuf:"varint,3,opt,name=oldestMsgFromMe" json:"oldestMsgFromMe,omitempty"` + OnDemandMsgCount *int32 `protobuf:"varint,4,opt,name=onDemandMsgCount" json:"onDemandMsgCount,omitempty"` + OldestMsgTimestampMS *int64 `protobuf:"varint,5,opt,name=oldestMsgTimestampMS" json:"oldestMsgTimestampMS,omitempty"` + AccountLid *string `protobuf:"bytes,6,opt,name=accountLid" json:"accountLid,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_LinkPreviewResponse_LinkPreviewHighQualityThumbnail) Reset() { - *x = PeerDataOperationRequestResponseMessage_PeerDataOperationResult_LinkPreviewResponse_LinkPreviewHighQualityThumbnail{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[138] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *PeerDataOperationRequestMessage_HistorySyncOnDemandRequest) Reset() { + *x = PeerDataOperationRequestMessage_HistorySyncOnDemandRequest{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[166] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_LinkPreviewResponse_LinkPreviewHighQualityThumbnail) String() string { +func (x *PeerDataOperationRequestMessage_HistorySyncOnDemandRequest) String() string { return protoimpl.X.MessageStringOf(x) } -func (*PeerDataOperationRequestResponseMessage_PeerDataOperationResult_LinkPreviewResponse_LinkPreviewHighQualityThumbnail) ProtoMessage() { -} +func (*PeerDataOperationRequestMessage_HistorySyncOnDemandRequest) ProtoMessage() {} -func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_LinkPreviewResponse_LinkPreviewHighQualityThumbnail) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[138] - if protoimpl.UnsafeEnabled && x != nil { +func (x *PeerDataOperationRequestMessage_HistorySyncOnDemandRequest) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[166] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -15735,90 +18847,77 @@ func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_LinkPre return mi.MessageOf(x) } -// Deprecated: Use PeerDataOperationRequestResponseMessage_PeerDataOperationResult_LinkPreviewResponse_LinkPreviewHighQualityThumbnail.ProtoReflect.Descriptor instead. -func (*PeerDataOperationRequestResponseMessage_PeerDataOperationResult_LinkPreviewResponse_LinkPreviewHighQualityThumbnail) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{18, 0, 3, 0} -} - -func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_LinkPreviewResponse_LinkPreviewHighQualityThumbnail) GetDirectPath() string { - if x != nil && x.DirectPath != nil { - return *x.DirectPath - } - return "" +// Deprecated: Use PeerDataOperationRequestMessage_HistorySyncOnDemandRequest.ProtoReflect.Descriptor instead. +func (*PeerDataOperationRequestMessage_HistorySyncOnDemandRequest) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{22, 6} } -func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_LinkPreviewResponse_LinkPreviewHighQualityThumbnail) GetThumbHash() string { - if x != nil && x.ThumbHash != nil { - return *x.ThumbHash +func (x *PeerDataOperationRequestMessage_HistorySyncOnDemandRequest) GetChatJID() string { + if x != nil && x.ChatJID != nil { + return *x.ChatJID } return "" } -func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_LinkPreviewResponse_LinkPreviewHighQualityThumbnail) GetEncThumbHash() string { - if x != nil && x.EncThumbHash != nil { - return *x.EncThumbHash +func (x *PeerDataOperationRequestMessage_HistorySyncOnDemandRequest) GetOldestMsgID() string { + if x != nil && x.OldestMsgID != nil { + return *x.OldestMsgID } return "" } -func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_LinkPreviewResponse_LinkPreviewHighQualityThumbnail) GetMediaKey() []byte { - if x != nil { - return x.MediaKey +func (x *PeerDataOperationRequestMessage_HistorySyncOnDemandRequest) GetOldestMsgFromMe() bool { + if x != nil && x.OldestMsgFromMe != nil { + return *x.OldestMsgFromMe } - return nil + return false } -func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_LinkPreviewResponse_LinkPreviewHighQualityThumbnail) GetMediaKeyTimestampMS() int64 { - if x != nil && x.MediaKeyTimestampMS != nil { - return *x.MediaKeyTimestampMS +func (x *PeerDataOperationRequestMessage_HistorySyncOnDemandRequest) GetOnDemandMsgCount() int32 { + if x != nil && x.OnDemandMsgCount != nil { + return *x.OnDemandMsgCount } return 0 } -func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_LinkPreviewResponse_LinkPreviewHighQualityThumbnail) GetThumbWidth() int32 { - if x != nil && x.ThumbWidth != nil { - return *x.ThumbWidth +func (x *PeerDataOperationRequestMessage_HistorySyncOnDemandRequest) GetOldestMsgTimestampMS() int64 { + if x != nil && x.OldestMsgTimestampMS != nil { + return *x.OldestMsgTimestampMS } return 0 } -func (x *PeerDataOperationRequestResponseMessage_PeerDataOperationResult_LinkPreviewResponse_LinkPreviewHighQualityThumbnail) GetThumbHeight() int32 { - if x != nil && x.ThumbHeight != nil { - return *x.ThumbHeight +func (x *PeerDataOperationRequestMessage_HistorySyncOnDemandRequest) GetAccountLid() string { + if x != nil && x.AccountLid != nil { + return *x.AccountLid } - return 0 + return "" } -type ContextInfo_ForwardedNewsletterMessageInfo struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - NewsletterJID *string `protobuf:"bytes,1,opt,name=newsletterJID" json:"newsletterJID,omitempty"` - ServerMessageID *int32 `protobuf:"varint,2,opt,name=serverMessageID" json:"serverMessageID,omitempty"` - NewsletterName *string `protobuf:"bytes,3,opt,name=newsletterName" json:"newsletterName,omitempty"` - ContentType *ContextInfo_ForwardedNewsletterMessageInfo_ContentType `protobuf:"varint,4,opt,name=contentType,enum=WAWebProtobufsE2E.ContextInfo_ForwardedNewsletterMessageInfo_ContentType" json:"contentType,omitempty"` - AccessibilityText *string `protobuf:"bytes,5,opt,name=accessibilityText" json:"accessibilityText,omitempty"` +type PeerDataOperationRequestMessage_RequestUrlPreview struct { + state protoimpl.MessageState `protogen:"open.v1"` + URL *string `protobuf:"bytes,1,opt,name=URL" json:"URL,omitempty"` + IncludeHqThumbnail *bool `protobuf:"varint,2,opt,name=includeHqThumbnail" json:"includeHqThumbnail,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *ContextInfo_ForwardedNewsletterMessageInfo) Reset() { - *x = ContextInfo_ForwardedNewsletterMessageInfo{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[139] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *PeerDataOperationRequestMessage_RequestUrlPreview) Reset() { + *x = PeerDataOperationRequestMessage_RequestUrlPreview{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[167] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *ContextInfo_ForwardedNewsletterMessageInfo) String() string { +func (x *PeerDataOperationRequestMessage_RequestUrlPreview) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ContextInfo_ForwardedNewsletterMessageInfo) ProtoMessage() {} +func (*PeerDataOperationRequestMessage_RequestUrlPreview) ProtoMessage() {} -func (x *ContextInfo_ForwardedNewsletterMessageInfo) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[139] - if protoimpl.UnsafeEnabled && x != nil { +func (x *PeerDataOperationRequestMessage_RequestUrlPreview) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[167] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -15828,87 +18927,48 @@ func (x *ContextInfo_ForwardedNewsletterMessageInfo) ProtoReflect() protoreflect return mi.MessageOf(x) } -// Deprecated: Use ContextInfo_ForwardedNewsletterMessageInfo.ProtoReflect.Descriptor instead. -func (*ContextInfo_ForwardedNewsletterMessageInfo) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{28, 0} -} - -func (x *ContextInfo_ForwardedNewsletterMessageInfo) GetNewsletterJID() string { - if x != nil && x.NewsletterJID != nil { - return *x.NewsletterJID - } - return "" -} - -func (x *ContextInfo_ForwardedNewsletterMessageInfo) GetServerMessageID() int32 { - if x != nil && x.ServerMessageID != nil { - return *x.ServerMessageID - } - return 0 +// Deprecated: Use PeerDataOperationRequestMessage_RequestUrlPreview.ProtoReflect.Descriptor instead. +func (*PeerDataOperationRequestMessage_RequestUrlPreview) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{22, 7} } -func (x *ContextInfo_ForwardedNewsletterMessageInfo) GetNewsletterName() string { - if x != nil && x.NewsletterName != nil { - return *x.NewsletterName +func (x *PeerDataOperationRequestMessage_RequestUrlPreview) GetURL() string { + if x != nil && x.URL != nil { + return *x.URL } return "" } -func (x *ContextInfo_ForwardedNewsletterMessageInfo) GetContentType() ContextInfo_ForwardedNewsletterMessageInfo_ContentType { - if x != nil && x.ContentType != nil { - return *x.ContentType - } - return ContextInfo_ForwardedNewsletterMessageInfo_UPDATE -} - -func (x *ContextInfo_ForwardedNewsletterMessageInfo) GetAccessibilityText() string { - if x != nil && x.AccessibilityText != nil { - return *x.AccessibilityText +func (x *PeerDataOperationRequestMessage_RequestUrlPreview) GetIncludeHqThumbnail() bool { + if x != nil && x.IncludeHqThumbnail != nil { + return *x.IncludeHqThumbnail } - return "" + return false } -type ContextInfo_ExternalAdReplyInfo struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache +type PeerDataOperationRequestMessage_RequestStickerReupload struct { + state protoimpl.MessageState `protogen:"open.v1"` + FileSHA256 *string `protobuf:"bytes,1,opt,name=fileSHA256" json:"fileSHA256,omitempty"` unknownFields protoimpl.UnknownFields - - Title *string `protobuf:"bytes,1,opt,name=title" json:"title,omitempty"` - Body *string `protobuf:"bytes,2,opt,name=body" json:"body,omitempty"` - MediaType *ContextInfo_ExternalAdReplyInfo_MediaType `protobuf:"varint,3,opt,name=mediaType,enum=WAWebProtobufsE2E.ContextInfo_ExternalAdReplyInfo_MediaType" json:"mediaType,omitempty"` - ThumbnailURL *string `protobuf:"bytes,4,opt,name=thumbnailURL" json:"thumbnailURL,omitempty"` - MediaURL *string `protobuf:"bytes,5,opt,name=mediaURL" json:"mediaURL,omitempty"` - Thumbnail []byte `protobuf:"bytes,6,opt,name=thumbnail" json:"thumbnail,omitempty"` - SourceType *string `protobuf:"bytes,7,opt,name=sourceType" json:"sourceType,omitempty"` - SourceID *string `protobuf:"bytes,8,opt,name=sourceID" json:"sourceID,omitempty"` - SourceURL *string `protobuf:"bytes,9,opt,name=sourceURL" json:"sourceURL,omitempty"` - ContainsAutoReply *bool `protobuf:"varint,10,opt,name=containsAutoReply" json:"containsAutoReply,omitempty"` - RenderLargerThumbnail *bool `protobuf:"varint,11,opt,name=renderLargerThumbnail" json:"renderLargerThumbnail,omitempty"` - ShowAdAttribution *bool `protobuf:"varint,12,opt,name=showAdAttribution" json:"showAdAttribution,omitempty"` - CtwaClid *string `protobuf:"bytes,13,opt,name=ctwaClid" json:"ctwaClid,omitempty"` - Ref *string `protobuf:"bytes,14,opt,name=ref" json:"ref,omitempty"` - ClickToWhatsappCall *bool `protobuf:"varint,15,opt,name=clickToWhatsappCall" json:"clickToWhatsappCall,omitempty"` - AdContextPreviewDismissed *bool `protobuf:"varint,16,opt,name=adContextPreviewDismissed" json:"adContextPreviewDismissed,omitempty"` + sizeCache protoimpl.SizeCache } -func (x *ContextInfo_ExternalAdReplyInfo) Reset() { - *x = ContextInfo_ExternalAdReplyInfo{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[140] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *PeerDataOperationRequestMessage_RequestStickerReupload) Reset() { + *x = PeerDataOperationRequestMessage_RequestStickerReupload{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[168] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *ContextInfo_ExternalAdReplyInfo) String() string { +func (x *PeerDataOperationRequestMessage_RequestStickerReupload) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ContextInfo_ExternalAdReplyInfo) ProtoMessage() {} +func (*PeerDataOperationRequestMessage_RequestStickerReupload) ProtoMessage() {} -func (x *ContextInfo_ExternalAdReplyInfo) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[140] - if protoimpl.UnsafeEnabled && x != nil { +func (x *PeerDataOperationRequestMessage_RequestStickerReupload) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[168] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -15918,152 +18978,137 @@ func (x *ContextInfo_ExternalAdReplyInfo) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ContextInfo_ExternalAdReplyInfo.ProtoReflect.Descriptor instead. -func (*ContextInfo_ExternalAdReplyInfo) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{28, 1} -} - -func (x *ContextInfo_ExternalAdReplyInfo) GetTitle() string { - if x != nil && x.Title != nil { - return *x.Title - } - return "" +// Deprecated: Use PeerDataOperationRequestMessage_RequestStickerReupload.ProtoReflect.Descriptor instead. +func (*PeerDataOperationRequestMessage_RequestStickerReupload) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{22, 8} } -func (x *ContextInfo_ExternalAdReplyInfo) GetBody() string { - if x != nil && x.Body != nil { - return *x.Body +func (x *PeerDataOperationRequestMessage_RequestStickerReupload) GetFileSHA256() string { + if x != nil && x.FileSHA256 != nil { + return *x.FileSHA256 } return "" } -func (x *ContextInfo_ExternalAdReplyInfo) GetMediaType() ContextInfo_ExternalAdReplyInfo_MediaType { - if x != nil && x.MediaType != nil { - return *x.MediaType - } - return ContextInfo_ExternalAdReplyInfo_NONE +type CloudAPIThreadControlNotification_CloudAPIThreadControlNotificationContent struct { + state protoimpl.MessageState `protogen:"open.v1"` + HandoffNotificationText *string `protobuf:"bytes,1,opt,name=handoffNotificationText" json:"handoffNotificationText,omitempty"` + ExtraJSON *string `protobuf:"bytes,2,opt,name=extraJSON" json:"extraJSON,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *ContextInfo_ExternalAdReplyInfo) GetThumbnailURL() string { - if x != nil && x.ThumbnailURL != nil { - return *x.ThumbnailURL - } - return "" +func (x *CloudAPIThreadControlNotification_CloudAPIThreadControlNotificationContent) Reset() { + *x = CloudAPIThreadControlNotification_CloudAPIThreadControlNotificationContent{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[169] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *ContextInfo_ExternalAdReplyInfo) GetMediaURL() string { - if x != nil && x.MediaURL != nil { - return *x.MediaURL - } - return "" +func (x *CloudAPIThreadControlNotification_CloudAPIThreadControlNotificationContent) String() string { + return protoimpl.X.MessageStringOf(x) } -func (x *ContextInfo_ExternalAdReplyInfo) GetThumbnail() []byte { +func (*CloudAPIThreadControlNotification_CloudAPIThreadControlNotificationContent) ProtoMessage() {} + +func (x *CloudAPIThreadControlNotification_CloudAPIThreadControlNotificationContent) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[169] if x != nil { - return x.Thumbnail + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return nil + return mi.MessageOf(x) } -func (x *ContextInfo_ExternalAdReplyInfo) GetSourceType() string { - if x != nil && x.SourceType != nil { - return *x.SourceType - } - return "" +// Deprecated: Use CloudAPIThreadControlNotification_CloudAPIThreadControlNotificationContent.ProtoReflect.Descriptor instead. +func (*CloudAPIThreadControlNotification_CloudAPIThreadControlNotificationContent) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{25, 0} } -func (x *ContextInfo_ExternalAdReplyInfo) GetSourceID() string { - if x != nil && x.SourceID != nil { - return *x.SourceID +func (x *CloudAPIThreadControlNotification_CloudAPIThreadControlNotificationContent) GetHandoffNotificationText() string { + if x != nil && x.HandoffNotificationText != nil { + return *x.HandoffNotificationText } return "" } -func (x *ContextInfo_ExternalAdReplyInfo) GetSourceURL() string { - if x != nil && x.SourceURL != nil { - return *x.SourceURL +func (x *CloudAPIThreadControlNotification_CloudAPIThreadControlNotificationContent) GetExtraJSON() string { + if x != nil && x.ExtraJSON != nil { + return *x.ExtraJSON } return "" } -func (x *ContextInfo_ExternalAdReplyInfo) GetContainsAutoReply() bool { - if x != nil && x.ContainsAutoReply != nil { - return *x.ContainsAutoReply - } - return false +type PaymentLinkMetadata_PaymentLinkHeader struct { + state protoimpl.MessageState `protogen:"open.v1"` + HeaderType *PaymentLinkMetadata_PaymentLinkHeader_PaymentLinkHeaderType `protobuf:"varint,1,opt,name=headerType,enum=WAWebProtobufsE2E.PaymentLinkMetadata_PaymentLinkHeader_PaymentLinkHeaderType" json:"headerType,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *ContextInfo_ExternalAdReplyInfo) GetRenderLargerThumbnail() bool { - if x != nil && x.RenderLargerThumbnail != nil { - return *x.RenderLargerThumbnail - } - return false +func (x *PaymentLinkMetadata_PaymentLinkHeader) Reset() { + *x = PaymentLinkMetadata_PaymentLinkHeader{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[170] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *ContextInfo_ExternalAdReplyInfo) GetShowAdAttribution() bool { - if x != nil && x.ShowAdAttribution != nil { - return *x.ShowAdAttribution - } - return false +func (x *PaymentLinkMetadata_PaymentLinkHeader) String() string { + return protoimpl.X.MessageStringOf(x) } -func (x *ContextInfo_ExternalAdReplyInfo) GetCtwaClid() string { - if x != nil && x.CtwaClid != nil { - return *x.CtwaClid - } - return "" -} +func (*PaymentLinkMetadata_PaymentLinkHeader) ProtoMessage() {} -func (x *ContextInfo_ExternalAdReplyInfo) GetRef() string { - if x != nil && x.Ref != nil { - return *x.Ref +func (x *PaymentLinkMetadata_PaymentLinkHeader) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[170] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return "" + return mi.MessageOf(x) } -func (x *ContextInfo_ExternalAdReplyInfo) GetClickToWhatsappCall() bool { - if x != nil && x.ClickToWhatsappCall != nil { - return *x.ClickToWhatsappCall - } - return false +// Deprecated: Use PaymentLinkMetadata_PaymentLinkHeader.ProtoReflect.Descriptor instead. +func (*PaymentLinkMetadata_PaymentLinkHeader) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{29, 0} } -func (x *ContextInfo_ExternalAdReplyInfo) GetAdContextPreviewDismissed() bool { - if x != nil && x.AdContextPreviewDismissed != nil { - return *x.AdContextPreviewDismissed +func (x *PaymentLinkMetadata_PaymentLinkHeader) GetHeaderType() PaymentLinkMetadata_PaymentLinkHeader_PaymentLinkHeaderType { + if x != nil && x.HeaderType != nil { + return *x.HeaderType } - return false + return PaymentLinkMetadata_PaymentLinkHeader_LINK_PREVIEW } -type ContextInfo_AdReplyInfo struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache +type PaymentLinkMetadata_PaymentLinkProvider struct { + state protoimpl.MessageState `protogen:"open.v1"` + ParamsJSON *string `protobuf:"bytes,1,opt,name=paramsJSON" json:"paramsJSON,omitempty"` unknownFields protoimpl.UnknownFields - - AdvertiserName *string `protobuf:"bytes,1,opt,name=advertiserName" json:"advertiserName,omitempty"` - MediaType *ContextInfo_AdReplyInfo_MediaType `protobuf:"varint,2,opt,name=mediaType,enum=WAWebProtobufsE2E.ContextInfo_AdReplyInfo_MediaType" json:"mediaType,omitempty"` - JPEGThumbnail []byte `protobuf:"bytes,16,opt,name=JPEGThumbnail" json:"JPEGThumbnail,omitempty"` - Caption *string `protobuf:"bytes,17,opt,name=caption" json:"caption,omitempty"` + sizeCache protoimpl.SizeCache } -func (x *ContextInfo_AdReplyInfo) Reset() { - *x = ContextInfo_AdReplyInfo{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[141] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *PaymentLinkMetadata_PaymentLinkProvider) Reset() { + *x = PaymentLinkMetadata_PaymentLinkProvider{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[171] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *ContextInfo_AdReplyInfo) String() string { +func (x *PaymentLinkMetadata_PaymentLinkProvider) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ContextInfo_AdReplyInfo) ProtoMessage() {} +func (*PaymentLinkMetadata_PaymentLinkProvider) ProtoMessage() {} -func (x *ContextInfo_AdReplyInfo) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[141] - if protoimpl.UnsafeEnabled && x != nil { +func (x *PaymentLinkMetadata_PaymentLinkProvider) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[171] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -16073,67 +19118,87 @@ func (x *ContextInfo_AdReplyInfo) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ContextInfo_AdReplyInfo.ProtoReflect.Descriptor instead. -func (*ContextInfo_AdReplyInfo) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{28, 2} +// Deprecated: Use PaymentLinkMetadata_PaymentLinkProvider.ProtoReflect.Descriptor instead. +func (*PaymentLinkMetadata_PaymentLinkProvider) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{29, 1} } -func (x *ContextInfo_AdReplyInfo) GetAdvertiserName() string { - if x != nil && x.AdvertiserName != nil { - return *x.AdvertiserName +func (x *PaymentLinkMetadata_PaymentLinkProvider) GetParamsJSON() string { + if x != nil && x.ParamsJSON != nil { + return *x.ParamsJSON } return "" } -func (x *ContextInfo_AdReplyInfo) GetMediaType() ContextInfo_AdReplyInfo_MediaType { - if x != nil && x.MediaType != nil { - return *x.MediaType - } - return ContextInfo_AdReplyInfo_NONE +type PaymentLinkMetadata_PaymentLinkButton struct { + state protoimpl.MessageState `protogen:"open.v1"` + DisplayText *string `protobuf:"bytes,1,opt,name=displayText" json:"displayText,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *ContextInfo_AdReplyInfo) GetJPEGThumbnail() []byte { +func (x *PaymentLinkMetadata_PaymentLinkButton) Reset() { + *x = PaymentLinkMetadata_PaymentLinkButton{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[172] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *PaymentLinkMetadata_PaymentLinkButton) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PaymentLinkMetadata_PaymentLinkButton) ProtoMessage() {} + +func (x *PaymentLinkMetadata_PaymentLinkButton) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[172] if x != nil { - return x.JPEGThumbnail + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return nil + return mi.MessageOf(x) } -func (x *ContextInfo_AdReplyInfo) GetCaption() string { - if x != nil && x.Caption != nil { - return *x.Caption +// Deprecated: Use PaymentLinkMetadata_PaymentLinkButton.ProtoReflect.Descriptor instead. +func (*PaymentLinkMetadata_PaymentLinkButton) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{29, 2} +} + +func (x *PaymentLinkMetadata_PaymentLinkButton) GetDisplayText() string { + if x != nil && x.DisplayText != nil { + return *x.DisplayText } return "" } -type ContextInfo_FeatureEligibilities struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache +type ContextInfo_StatusAudienceMetadata struct { + state protoimpl.MessageState `protogen:"open.v1"` + AudienceType *ContextInfo_StatusAudienceMetadata_AudienceType `protobuf:"varint,1,opt,name=audienceType,enum=WAWebProtobufsE2E.ContextInfo_StatusAudienceMetadata_AudienceType" json:"audienceType,omitempty"` + ListName *string `protobuf:"bytes,2,opt,name=listName" json:"listName,omitempty"` + ListEmoji *string `protobuf:"bytes,3,opt,name=listEmoji" json:"listEmoji,omitempty"` unknownFields protoimpl.UnknownFields - - CannotBeReactedTo *bool `protobuf:"varint,1,opt,name=cannotBeReactedTo" json:"cannotBeReactedTo,omitempty"` - CannotBeRanked *bool `protobuf:"varint,2,opt,name=cannotBeRanked" json:"cannotBeRanked,omitempty"` - CanRequestFeedback *bool `protobuf:"varint,3,opt,name=canRequestFeedback" json:"canRequestFeedback,omitempty"` + sizeCache protoimpl.SizeCache } -func (x *ContextInfo_FeatureEligibilities) Reset() { - *x = ContextInfo_FeatureEligibilities{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[142] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *ContextInfo_StatusAudienceMetadata) Reset() { + *x = ContextInfo_StatusAudienceMetadata{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[173] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *ContextInfo_FeatureEligibilities) String() string { +func (x *ContextInfo_StatusAudienceMetadata) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ContextInfo_FeatureEligibilities) ProtoMessage() {} +func (*ContextInfo_StatusAudienceMetadata) ProtoMessage() {} -func (x *ContextInfo_FeatureEligibilities) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[142] - if protoimpl.UnsafeEnabled && x != nil { +func (x *ContextInfo_StatusAudienceMetadata) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[173] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -16143,49 +19208,47 @@ func (x *ContextInfo_FeatureEligibilities) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ContextInfo_FeatureEligibilities.ProtoReflect.Descriptor instead. -func (*ContextInfo_FeatureEligibilities) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{28, 3} +// Deprecated: Use ContextInfo_StatusAudienceMetadata.ProtoReflect.Descriptor instead. +func (*ContextInfo_StatusAudienceMetadata) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{33, 0} } -func (x *ContextInfo_FeatureEligibilities) GetCannotBeReactedTo() bool { - if x != nil && x.CannotBeReactedTo != nil { - return *x.CannotBeReactedTo +func (x *ContextInfo_StatusAudienceMetadata) GetAudienceType() ContextInfo_StatusAudienceMetadata_AudienceType { + if x != nil && x.AudienceType != nil { + return *x.AudienceType } - return false + return ContextInfo_StatusAudienceMetadata_UNKNOWN } -func (x *ContextInfo_FeatureEligibilities) GetCannotBeRanked() bool { - if x != nil && x.CannotBeRanked != nil { - return *x.CannotBeRanked +func (x *ContextInfo_StatusAudienceMetadata) GetListName() string { + if x != nil && x.ListName != nil { + return *x.ListName } - return false + return "" } -func (x *ContextInfo_FeatureEligibilities) GetCanRequestFeedback() bool { - if x != nil && x.CanRequestFeedback != nil { - return *x.CanRequestFeedback +func (x *ContextInfo_StatusAudienceMetadata) GetListEmoji() string { + if x != nil && x.ListEmoji != nil { + return *x.ListEmoji } - return false + return "" } type ContextInfo_DataSharingContext struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` ShowMmDisclosure *bool `protobuf:"varint,1,opt,name=showMmDisclosure" json:"showMmDisclosure,omitempty"` EncryptedSignalTokenConsented *string `protobuf:"bytes,2,opt,name=encryptedSignalTokenConsented" json:"encryptedSignalTokenConsented,omitempty"` Parameters []*ContextInfo_DataSharingContext_Parameters `protobuf:"bytes,3,rep,name=parameters" json:"parameters,omitempty"` + DataSharingFlags *int32 `protobuf:"varint,4,opt,name=dataSharingFlags" json:"dataSharingFlags,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ContextInfo_DataSharingContext) Reset() { *x = ContextInfo_DataSharingContext{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[143] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[174] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ContextInfo_DataSharingContext) String() string { @@ -16195,8 +19258,8 @@ func (x *ContextInfo_DataSharingContext) String() string { func (*ContextInfo_DataSharingContext) ProtoMessage() {} func (x *ContextInfo_DataSharingContext) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[143] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[174] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -16208,7 +19271,7 @@ func (x *ContextInfo_DataSharingContext) ProtoReflect() protoreflect.Message { // Deprecated: Use ContextInfo_DataSharingContext.ProtoReflect.Descriptor instead. func (*ContextInfo_DataSharingContext) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{28, 4} + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{33, 1} } func (x *ContextInfo_DataSharingContext) GetShowMmDisclosure() bool { @@ -16232,33 +19295,146 @@ func (x *ContextInfo_DataSharingContext) GetParameters() []*ContextInfo_DataShar return nil } -type ContextInfo_UTMInfo struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +func (x *ContextInfo_DataSharingContext) GetDataSharingFlags() int32 { + if x != nil && x.DataSharingFlags != nil { + return *x.DataSharingFlags + } + return 0 +} + +type ContextInfo_ForwardedNewsletterMessageInfo struct { + state protoimpl.MessageState `protogen:"open.v1"` + NewsletterJID *string `protobuf:"bytes,1,opt,name=newsletterJID" json:"newsletterJID,omitempty"` + ServerMessageID *int32 `protobuf:"varint,2,opt,name=serverMessageID" json:"serverMessageID,omitempty"` + NewsletterName *string `protobuf:"bytes,3,opt,name=newsletterName" json:"newsletterName,omitempty"` + ContentType *ContextInfo_ForwardedNewsletterMessageInfo_ContentType `protobuf:"varint,4,opt,name=contentType,enum=WAWebProtobufsE2E.ContextInfo_ForwardedNewsletterMessageInfo_ContentType" json:"contentType,omitempty"` + AccessibilityText *string `protobuf:"bytes,5,opt,name=accessibilityText" json:"accessibilityText,omitempty"` + ProfileName *string `protobuf:"bytes,6,opt,name=profileName" json:"profileName,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ContextInfo_ForwardedNewsletterMessageInfo) Reset() { + *x = ContextInfo_ForwardedNewsletterMessageInfo{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[175] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ContextInfo_ForwardedNewsletterMessageInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ContextInfo_ForwardedNewsletterMessageInfo) ProtoMessage() {} + +func (x *ContextInfo_ForwardedNewsletterMessageInfo) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[175] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ContextInfo_ForwardedNewsletterMessageInfo.ProtoReflect.Descriptor instead. +func (*ContextInfo_ForwardedNewsletterMessageInfo) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{33, 2} +} + +func (x *ContextInfo_ForwardedNewsletterMessageInfo) GetNewsletterJID() string { + if x != nil && x.NewsletterJID != nil { + return *x.NewsletterJID + } + return "" +} + +func (x *ContextInfo_ForwardedNewsletterMessageInfo) GetServerMessageID() int32 { + if x != nil && x.ServerMessageID != nil { + return *x.ServerMessageID + } + return 0 +} + +func (x *ContextInfo_ForwardedNewsletterMessageInfo) GetNewsletterName() string { + if x != nil && x.NewsletterName != nil { + return *x.NewsletterName + } + return "" +} + +func (x *ContextInfo_ForwardedNewsletterMessageInfo) GetContentType() ContextInfo_ForwardedNewsletterMessageInfo_ContentType { + if x != nil && x.ContentType != nil { + return *x.ContentType + } + return ContextInfo_ForwardedNewsletterMessageInfo_UPDATE +} + +func (x *ContextInfo_ForwardedNewsletterMessageInfo) GetAccessibilityText() string { + if x != nil && x.AccessibilityText != nil { + return *x.AccessibilityText + } + return "" +} + +func (x *ContextInfo_ForwardedNewsletterMessageInfo) GetProfileName() string { + if x != nil && x.ProfileName != nil { + return *x.ProfileName + } + return "" +} - UtmSource *string `protobuf:"bytes,1,opt,name=utmSource" json:"utmSource,omitempty"` - UtmCampaign *string `protobuf:"bytes,2,opt,name=utmCampaign" json:"utmCampaign,omitempty"` +type ContextInfo_ExternalAdReplyInfo struct { + state protoimpl.MessageState `protogen:"open.v1"` + Title *string `protobuf:"bytes,1,opt,name=title" json:"title,omitempty"` + Body *string `protobuf:"bytes,2,opt,name=body" json:"body,omitempty"` + MediaType *ContextInfo_ExternalAdReplyInfo_MediaType `protobuf:"varint,3,opt,name=mediaType,enum=WAWebProtobufsE2E.ContextInfo_ExternalAdReplyInfo_MediaType" json:"mediaType,omitempty"` + ThumbnailURL *string `protobuf:"bytes,4,opt,name=thumbnailURL" json:"thumbnailURL,omitempty"` + MediaURL *string `protobuf:"bytes,5,opt,name=mediaURL" json:"mediaURL,omitempty"` + Thumbnail []byte `protobuf:"bytes,6,opt,name=thumbnail" json:"thumbnail,omitempty"` + SourceType *string `protobuf:"bytes,7,opt,name=sourceType" json:"sourceType,omitempty"` + SourceID *string `protobuf:"bytes,8,opt,name=sourceID" json:"sourceID,omitempty"` + SourceURL *string `protobuf:"bytes,9,opt,name=sourceURL" json:"sourceURL,omitempty"` + ContainsAutoReply *bool `protobuf:"varint,10,opt,name=containsAutoReply" json:"containsAutoReply,omitempty"` + RenderLargerThumbnail *bool `protobuf:"varint,11,opt,name=renderLargerThumbnail" json:"renderLargerThumbnail,omitempty"` + ShowAdAttribution *bool `protobuf:"varint,12,opt,name=showAdAttribution" json:"showAdAttribution,omitempty"` + CtwaClid *string `protobuf:"bytes,13,opt,name=ctwaClid" json:"ctwaClid,omitempty"` + Ref *string `protobuf:"bytes,14,opt,name=ref" json:"ref,omitempty"` + ClickToWhatsappCall *bool `protobuf:"varint,15,opt,name=clickToWhatsappCall" json:"clickToWhatsappCall,omitempty"` + AdContextPreviewDismissed *bool `protobuf:"varint,16,opt,name=adContextPreviewDismissed" json:"adContextPreviewDismissed,omitempty"` + SourceApp *string `protobuf:"bytes,17,opt,name=sourceApp" json:"sourceApp,omitempty"` + AutomatedGreetingMessageShown *bool `protobuf:"varint,18,opt,name=automatedGreetingMessageShown" json:"automatedGreetingMessageShown,omitempty"` + GreetingMessageBody *string `protobuf:"bytes,19,opt,name=greetingMessageBody" json:"greetingMessageBody,omitempty"` + CtaPayload *string `protobuf:"bytes,20,opt,name=ctaPayload" json:"ctaPayload,omitempty"` + DisableNudge *bool `protobuf:"varint,21,opt,name=disableNudge" json:"disableNudge,omitempty"` + OriginalImageURL *string `protobuf:"bytes,22,opt,name=originalImageURL" json:"originalImageURL,omitempty"` + AutomatedGreetingMessageCtaType *string `protobuf:"bytes,23,opt,name=automatedGreetingMessageCtaType" json:"automatedGreetingMessageCtaType,omitempty"` + WtwaAdFormat *bool `protobuf:"varint,24,opt,name=wtwaAdFormat" json:"wtwaAdFormat,omitempty"` + AdType *ContextInfo_ExternalAdReplyInfo_AdType `protobuf:"varint,25,opt,name=adType,enum=WAWebProtobufsE2E.ContextInfo_ExternalAdReplyInfo_AdType" json:"adType,omitempty"` + WtwaWebsiteURL *string `protobuf:"bytes,26,opt,name=wtwaWebsiteURL" json:"wtwaWebsiteURL,omitempty"` + AdPreviewURL *string `protobuf:"bytes,27,opt,name=adPreviewURL" json:"adPreviewURL,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *ContextInfo_UTMInfo) Reset() { - *x = ContextInfo_UTMInfo{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[144] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *ContextInfo_ExternalAdReplyInfo) Reset() { + *x = ContextInfo_ExternalAdReplyInfo{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[176] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *ContextInfo_UTMInfo) String() string { +func (x *ContextInfo_ExternalAdReplyInfo) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ContextInfo_UTMInfo) ProtoMessage() {} +func (*ContextInfo_ExternalAdReplyInfo) ProtoMessage() {} -func (x *ContextInfo_UTMInfo) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[144] - if protoimpl.UnsafeEnabled && x != nil { +func (x *ContextInfo_ExternalAdReplyInfo) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[176] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -16268,180 +19444,226 @@ func (x *ContextInfo_UTMInfo) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ContextInfo_UTMInfo.ProtoReflect.Descriptor instead. -func (*ContextInfo_UTMInfo) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{28, 5} +// Deprecated: Use ContextInfo_ExternalAdReplyInfo.ProtoReflect.Descriptor instead. +func (*ContextInfo_ExternalAdReplyInfo) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{33, 3} } -func (x *ContextInfo_UTMInfo) GetUtmSource() string { - if x != nil && x.UtmSource != nil { - return *x.UtmSource +func (x *ContextInfo_ExternalAdReplyInfo) GetTitle() string { + if x != nil && x.Title != nil { + return *x.Title } return "" } -func (x *ContextInfo_UTMInfo) GetUtmCampaign() string { - if x != nil && x.UtmCampaign != nil { - return *x.UtmCampaign +func (x *ContextInfo_ExternalAdReplyInfo) GetBody() string { + if x != nil && x.Body != nil { + return *x.Body } return "" } -type ContextInfo_BusinessMessageForwardInfo struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - BusinessOwnerJID *string `protobuf:"bytes,1,opt,name=businessOwnerJID" json:"businessOwnerJID,omitempty"` +func (x *ContextInfo_ExternalAdReplyInfo) GetMediaType() ContextInfo_ExternalAdReplyInfo_MediaType { + if x != nil && x.MediaType != nil { + return *x.MediaType + } + return ContextInfo_ExternalAdReplyInfo_NONE } -func (x *ContextInfo_BusinessMessageForwardInfo) Reset() { - *x = ContextInfo_BusinessMessageForwardInfo{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[145] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) +func (x *ContextInfo_ExternalAdReplyInfo) GetThumbnailURL() string { + if x != nil && x.ThumbnailURL != nil { + return *x.ThumbnailURL } + return "" } -func (x *ContextInfo_BusinessMessageForwardInfo) String() string { - return protoimpl.X.MessageStringOf(x) +func (x *ContextInfo_ExternalAdReplyInfo) GetMediaURL() string { + if x != nil && x.MediaURL != nil { + return *x.MediaURL + } + return "" } -func (*ContextInfo_BusinessMessageForwardInfo) ProtoMessage() {} +func (x *ContextInfo_ExternalAdReplyInfo) GetThumbnail() []byte { + if x != nil { + return x.Thumbnail + } + return nil +} -func (x *ContextInfo_BusinessMessageForwardInfo) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[145] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms +func (x *ContextInfo_ExternalAdReplyInfo) GetSourceType() string { + if x != nil && x.SourceType != nil { + return *x.SourceType } - return mi.MessageOf(x) + return "" } -// Deprecated: Use ContextInfo_BusinessMessageForwardInfo.ProtoReflect.Descriptor instead. -func (*ContextInfo_BusinessMessageForwardInfo) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{28, 6} +func (x *ContextInfo_ExternalAdReplyInfo) GetSourceID() string { + if x != nil && x.SourceID != nil { + return *x.SourceID + } + return "" } -func (x *ContextInfo_BusinessMessageForwardInfo) GetBusinessOwnerJID() string { - if x != nil && x.BusinessOwnerJID != nil { - return *x.BusinessOwnerJID +func (x *ContextInfo_ExternalAdReplyInfo) GetSourceURL() string { + if x != nil && x.SourceURL != nil { + return *x.SourceURL } return "" } -type ContextInfo_DataSharingContext_Parameters struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +func (x *ContextInfo_ExternalAdReplyInfo) GetContainsAutoReply() bool { + if x != nil && x.ContainsAutoReply != nil { + return *x.ContainsAutoReply + } + return false +} - Key *string `protobuf:"bytes,1,opt,name=key" json:"key,omitempty"` - StringData *string `protobuf:"bytes,2,opt,name=stringData" json:"stringData,omitempty"` - IntData *int64 `protobuf:"varint,3,opt,name=intData" json:"intData,omitempty"` - FloatData *float32 `protobuf:"fixed32,4,opt,name=floatData" json:"floatData,omitempty"` - Contents *ContextInfo_DataSharingContext_Parameters `protobuf:"bytes,5,opt,name=contents" json:"contents,omitempty"` +func (x *ContextInfo_ExternalAdReplyInfo) GetRenderLargerThumbnail() bool { + if x != nil && x.RenderLargerThumbnail != nil { + return *x.RenderLargerThumbnail + } + return false } -func (x *ContextInfo_DataSharingContext_Parameters) Reset() { - *x = ContextInfo_DataSharingContext_Parameters{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[146] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) +func (x *ContextInfo_ExternalAdReplyInfo) GetShowAdAttribution() bool { + if x != nil && x.ShowAdAttribution != nil { + return *x.ShowAdAttribution } + return false } -func (x *ContextInfo_DataSharingContext_Parameters) String() string { - return protoimpl.X.MessageStringOf(x) +func (x *ContextInfo_ExternalAdReplyInfo) GetCtwaClid() string { + if x != nil && x.CtwaClid != nil { + return *x.CtwaClid + } + return "" } -func (*ContextInfo_DataSharingContext_Parameters) ProtoMessage() {} +func (x *ContextInfo_ExternalAdReplyInfo) GetRef() string { + if x != nil && x.Ref != nil { + return *x.Ref + } + return "" +} -func (x *ContextInfo_DataSharingContext_Parameters) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[146] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms +func (x *ContextInfo_ExternalAdReplyInfo) GetClickToWhatsappCall() bool { + if x != nil && x.ClickToWhatsappCall != nil { + return *x.ClickToWhatsappCall } - return mi.MessageOf(x) + return false } -// Deprecated: Use ContextInfo_DataSharingContext_Parameters.ProtoReflect.Descriptor instead. -func (*ContextInfo_DataSharingContext_Parameters) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{28, 4, 0} +func (x *ContextInfo_ExternalAdReplyInfo) GetAdContextPreviewDismissed() bool { + if x != nil && x.AdContextPreviewDismissed != nil { + return *x.AdContextPreviewDismissed + } + return false } -func (x *ContextInfo_DataSharingContext_Parameters) GetKey() string { - if x != nil && x.Key != nil { - return *x.Key +func (x *ContextInfo_ExternalAdReplyInfo) GetSourceApp() string { + if x != nil && x.SourceApp != nil { + return *x.SourceApp } return "" } -func (x *ContextInfo_DataSharingContext_Parameters) GetStringData() string { - if x != nil && x.StringData != nil { - return *x.StringData +func (x *ContextInfo_ExternalAdReplyInfo) GetAutomatedGreetingMessageShown() bool { + if x != nil && x.AutomatedGreetingMessageShown != nil { + return *x.AutomatedGreetingMessageShown + } + return false +} + +func (x *ContextInfo_ExternalAdReplyInfo) GetGreetingMessageBody() string { + if x != nil && x.GreetingMessageBody != nil { + return *x.GreetingMessageBody } return "" } -func (x *ContextInfo_DataSharingContext_Parameters) GetIntData() int64 { - if x != nil && x.IntData != nil { - return *x.IntData +func (x *ContextInfo_ExternalAdReplyInfo) GetCtaPayload() string { + if x != nil && x.CtaPayload != nil { + return *x.CtaPayload } - return 0 + return "" } -func (x *ContextInfo_DataSharingContext_Parameters) GetFloatData() float32 { - if x != nil && x.FloatData != nil { - return *x.FloatData +func (x *ContextInfo_ExternalAdReplyInfo) GetDisableNudge() bool { + if x != nil && x.DisableNudge != nil { + return *x.DisableNudge } - return 0 + return false } -func (x *ContextInfo_DataSharingContext_Parameters) GetContents() *ContextInfo_DataSharingContext_Parameters { - if x != nil { - return x.Contents +func (x *ContextInfo_ExternalAdReplyInfo) GetOriginalImageURL() string { + if x != nil && x.OriginalImageURL != nil { + return *x.OriginalImageURL } - return nil + return "" } -type HydratedTemplateButton_HydratedURLButton struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +func (x *ContextInfo_ExternalAdReplyInfo) GetAutomatedGreetingMessageCtaType() string { + if x != nil && x.AutomatedGreetingMessageCtaType != nil { + return *x.AutomatedGreetingMessageCtaType + } + return "" +} - DisplayText *string `protobuf:"bytes,1,opt,name=displayText" json:"displayText,omitempty"` - URL *string `protobuf:"bytes,2,opt,name=URL" json:"URL,omitempty"` - ConsentedUsersURL *string `protobuf:"bytes,3,opt,name=consentedUsersURL" json:"consentedUsersURL,omitempty"` - WebviewPresentation *HydratedTemplateButton_HydratedURLButton_WebviewPresentationType `protobuf:"varint,4,opt,name=webviewPresentation,enum=WAWebProtobufsE2E.HydratedTemplateButton_HydratedURLButton_WebviewPresentationType" json:"webviewPresentation,omitempty"` +func (x *ContextInfo_ExternalAdReplyInfo) GetWtwaAdFormat() bool { + if x != nil && x.WtwaAdFormat != nil { + return *x.WtwaAdFormat + } + return false } -func (x *HydratedTemplateButton_HydratedURLButton) Reset() { - *x = HydratedTemplateButton_HydratedURLButton{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[147] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) +func (x *ContextInfo_ExternalAdReplyInfo) GetAdType() ContextInfo_ExternalAdReplyInfo_AdType { + if x != nil && x.AdType != nil { + return *x.AdType } + return ContextInfo_ExternalAdReplyInfo_CTWA } -func (x *HydratedTemplateButton_HydratedURLButton) String() string { +func (x *ContextInfo_ExternalAdReplyInfo) GetWtwaWebsiteURL() string { + if x != nil && x.WtwaWebsiteURL != nil { + return *x.WtwaWebsiteURL + } + return "" +} + +func (x *ContextInfo_ExternalAdReplyInfo) GetAdPreviewURL() string { + if x != nil && x.AdPreviewURL != nil { + return *x.AdPreviewURL + } + return "" +} + +type ContextInfo_AdReplyInfo struct { + state protoimpl.MessageState `protogen:"open.v1"` + AdvertiserName *string `protobuf:"bytes,1,opt,name=advertiserName" json:"advertiserName,omitempty"` + MediaType *ContextInfo_AdReplyInfo_MediaType `protobuf:"varint,2,opt,name=mediaType,enum=WAWebProtobufsE2E.ContextInfo_AdReplyInfo_MediaType" json:"mediaType,omitempty"` + JPEGThumbnail []byte `protobuf:"bytes,16,opt,name=JPEGThumbnail" json:"JPEGThumbnail,omitempty"` + Caption *string `protobuf:"bytes,17,opt,name=caption" json:"caption,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ContextInfo_AdReplyInfo) Reset() { + *x = ContextInfo_AdReplyInfo{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[177] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ContextInfo_AdReplyInfo) String() string { return protoimpl.X.MessageStringOf(x) } -func (*HydratedTemplateButton_HydratedURLButton) ProtoMessage() {} +func (*ContextInfo_AdReplyInfo) ProtoMessage() {} -func (x *HydratedTemplateButton_HydratedURLButton) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[147] - if protoimpl.UnsafeEnabled && x != nil { +func (x *ContextInfo_AdReplyInfo) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[177] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -16451,66 +19673,62 @@ func (x *HydratedTemplateButton_HydratedURLButton) ProtoReflect() protoreflect.M return mi.MessageOf(x) } -// Deprecated: Use HydratedTemplateButton_HydratedURLButton.ProtoReflect.Descriptor instead. -func (*HydratedTemplateButton_HydratedURLButton) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{35, 0} +// Deprecated: Use ContextInfo_AdReplyInfo.ProtoReflect.Descriptor instead. +func (*ContextInfo_AdReplyInfo) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{33, 4} } -func (x *HydratedTemplateButton_HydratedURLButton) GetDisplayText() string { - if x != nil && x.DisplayText != nil { - return *x.DisplayText +func (x *ContextInfo_AdReplyInfo) GetAdvertiserName() string { + if x != nil && x.AdvertiserName != nil { + return *x.AdvertiserName } return "" } -func (x *HydratedTemplateButton_HydratedURLButton) GetURL() string { - if x != nil && x.URL != nil { - return *x.URL +func (x *ContextInfo_AdReplyInfo) GetMediaType() ContextInfo_AdReplyInfo_MediaType { + if x != nil && x.MediaType != nil { + return *x.MediaType } - return "" + return ContextInfo_AdReplyInfo_NONE } -func (x *HydratedTemplateButton_HydratedURLButton) GetConsentedUsersURL() string { - if x != nil && x.ConsentedUsersURL != nil { - return *x.ConsentedUsersURL +func (x *ContextInfo_AdReplyInfo) GetJPEGThumbnail() []byte { + if x != nil { + return x.JPEGThumbnail } - return "" + return nil } -func (x *HydratedTemplateButton_HydratedURLButton) GetWebviewPresentation() HydratedTemplateButton_HydratedURLButton_WebviewPresentationType { - if x != nil && x.WebviewPresentation != nil { - return *x.WebviewPresentation +func (x *ContextInfo_AdReplyInfo) GetCaption() string { + if x != nil && x.Caption != nil { + return *x.Caption } - return HydratedTemplateButton_HydratedURLButton_FULL + return "" } -type HydratedTemplateButton_HydratedCallButton struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache +type ContextInfo_PartiallySelectedContent struct { + state protoimpl.MessageState `protogen:"open.v1"` + Text *string `protobuf:"bytes,1,opt,name=text" json:"text,omitempty"` unknownFields protoimpl.UnknownFields - - DisplayText *string `protobuf:"bytes,1,opt,name=displayText" json:"displayText,omitempty"` - PhoneNumber *string `protobuf:"bytes,2,opt,name=phoneNumber" json:"phoneNumber,omitempty"` + sizeCache protoimpl.SizeCache } -func (x *HydratedTemplateButton_HydratedCallButton) Reset() { - *x = HydratedTemplateButton_HydratedCallButton{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[148] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *ContextInfo_PartiallySelectedContent) Reset() { + *x = ContextInfo_PartiallySelectedContent{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[178] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *HydratedTemplateButton_HydratedCallButton) String() string { +func (x *ContextInfo_PartiallySelectedContent) String() string { return protoimpl.X.MessageStringOf(x) } -func (*HydratedTemplateButton_HydratedCallButton) ProtoMessage() {} +func (*ContextInfo_PartiallySelectedContent) ProtoMessage() {} -func (x *HydratedTemplateButton_HydratedCallButton) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[148] - if protoimpl.UnsafeEnabled && x != nil { +func (x *ContextInfo_PartiallySelectedContent) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[178] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -16520,52 +19738,45 @@ func (x *HydratedTemplateButton_HydratedCallButton) ProtoReflect() protoreflect. return mi.MessageOf(x) } -// Deprecated: Use HydratedTemplateButton_HydratedCallButton.ProtoReflect.Descriptor instead. -func (*HydratedTemplateButton_HydratedCallButton) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{35, 1} -} - -func (x *HydratedTemplateButton_HydratedCallButton) GetDisplayText() string { - if x != nil && x.DisplayText != nil { - return *x.DisplayText - } - return "" +// Deprecated: Use ContextInfo_PartiallySelectedContent.ProtoReflect.Descriptor instead. +func (*ContextInfo_PartiallySelectedContent) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{33, 5} } -func (x *HydratedTemplateButton_HydratedCallButton) GetPhoneNumber() string { - if x != nil && x.PhoneNumber != nil { - return *x.PhoneNumber +func (x *ContextInfo_PartiallySelectedContent) GetText() string { + if x != nil && x.Text != nil { + return *x.Text } return "" } -type HydratedTemplateButton_HydratedQuickReplyButton struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - DisplayText *string `protobuf:"bytes,1,opt,name=displayText" json:"displayText,omitempty"` - ID *string `protobuf:"bytes,2,opt,name=ID" json:"ID,omitempty"` +type ContextInfo_FeatureEligibilities struct { + state protoimpl.MessageState `protogen:"open.v1"` + CannotBeReactedTo *bool `protobuf:"varint,1,opt,name=cannotBeReactedTo" json:"cannotBeReactedTo,omitempty"` + CannotBeRanked *bool `protobuf:"varint,2,opt,name=cannotBeRanked" json:"cannotBeRanked,omitempty"` + CanRequestFeedback *bool `protobuf:"varint,3,opt,name=canRequestFeedback" json:"canRequestFeedback,omitempty"` + CanBeReshared *bool `protobuf:"varint,4,opt,name=canBeReshared" json:"canBeReshared,omitempty"` + CanReceiveMultiReact *bool `protobuf:"varint,5,opt,name=canReceiveMultiReact" json:"canReceiveMultiReact,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *HydratedTemplateButton_HydratedQuickReplyButton) Reset() { - *x = HydratedTemplateButton_HydratedQuickReplyButton{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[149] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *ContextInfo_FeatureEligibilities) Reset() { + *x = ContextInfo_FeatureEligibilities{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[179] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *HydratedTemplateButton_HydratedQuickReplyButton) String() string { +func (x *ContextInfo_FeatureEligibilities) String() string { return protoimpl.X.MessageStringOf(x) } -func (*HydratedTemplateButton_HydratedQuickReplyButton) ProtoMessage() {} +func (*ContextInfo_FeatureEligibilities) ProtoMessage() {} -func (x *HydratedTemplateButton_HydratedQuickReplyButton) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[149] - if protoimpl.UnsafeEnabled && x != nil { +func (x *ContextInfo_FeatureEligibilities) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[179] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -16575,55 +19786,71 @@ func (x *HydratedTemplateButton_HydratedQuickReplyButton) ProtoReflect() protore return mi.MessageOf(x) } -// Deprecated: Use HydratedTemplateButton_HydratedQuickReplyButton.ProtoReflect.Descriptor instead. -func (*HydratedTemplateButton_HydratedQuickReplyButton) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{35, 2} +// Deprecated: Use ContextInfo_FeatureEligibilities.ProtoReflect.Descriptor instead. +func (*ContextInfo_FeatureEligibilities) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{33, 6} } -func (x *HydratedTemplateButton_HydratedQuickReplyButton) GetDisplayText() string { - if x != nil && x.DisplayText != nil { - return *x.DisplayText +func (x *ContextInfo_FeatureEligibilities) GetCannotBeReactedTo() bool { + if x != nil && x.CannotBeReactedTo != nil { + return *x.CannotBeReactedTo } - return "" + return false } -func (x *HydratedTemplateButton_HydratedQuickReplyButton) GetID() string { - if x != nil && x.ID != nil { - return *x.ID +func (x *ContextInfo_FeatureEligibilities) GetCannotBeRanked() bool { + if x != nil && x.CannotBeRanked != nil { + return *x.CannotBeRanked } - return "" + return false } -type PaymentBackground_MediaData struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +func (x *ContextInfo_FeatureEligibilities) GetCanRequestFeedback() bool { + if x != nil && x.CanRequestFeedback != nil { + return *x.CanRequestFeedback + } + return false +} - MediaKey []byte `protobuf:"bytes,1,opt,name=mediaKey" json:"mediaKey,omitempty"` - MediaKeyTimestamp *int64 `protobuf:"varint,2,opt,name=mediaKeyTimestamp" json:"mediaKeyTimestamp,omitempty"` - FileSHA256 []byte `protobuf:"bytes,3,opt,name=fileSHA256" json:"fileSHA256,omitempty"` - FileEncSHA256 []byte `protobuf:"bytes,4,opt,name=fileEncSHA256" json:"fileEncSHA256,omitempty"` - DirectPath *string `protobuf:"bytes,5,opt,name=directPath" json:"directPath,omitempty"` +func (x *ContextInfo_FeatureEligibilities) GetCanBeReshared() bool { + if x != nil && x.CanBeReshared != nil { + return *x.CanBeReshared + } + return false } -func (x *PaymentBackground_MediaData) Reset() { - *x = PaymentBackground_MediaData{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[150] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) +func (x *ContextInfo_FeatureEligibilities) GetCanReceiveMultiReact() bool { + if x != nil && x.CanReceiveMultiReact != nil { + return *x.CanReceiveMultiReact } + return false } -func (x *PaymentBackground_MediaData) String() string { +type ContextInfo_QuestionReplyQuotedMessage struct { + state protoimpl.MessageState `protogen:"open.v1"` + ServerQuestionID *int32 `protobuf:"varint,1,opt,name=serverQuestionID" json:"serverQuestionID,omitempty"` + QuotedQuestion *Message `protobuf:"bytes,2,opt,name=quotedQuestion" json:"quotedQuestion,omitempty"` + QuotedResponse *Message `protobuf:"bytes,3,opt,name=quotedResponse" json:"quotedResponse,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ContextInfo_QuestionReplyQuotedMessage) Reset() { + *x = ContextInfo_QuestionReplyQuotedMessage{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[180] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ContextInfo_QuestionReplyQuotedMessage) String() string { return protoimpl.X.MessageStringOf(x) } -func (*PaymentBackground_MediaData) ProtoMessage() {} +func (*ContextInfo_QuestionReplyQuotedMessage) ProtoMessage() {} -func (x *PaymentBackground_MediaData) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[150] - if protoimpl.UnsafeEnabled && x != nil { +func (x *ContextInfo_QuestionReplyQuotedMessage) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[180] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -16633,77 +19860,56 @@ func (x *PaymentBackground_MediaData) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use PaymentBackground_MediaData.ProtoReflect.Descriptor instead. -func (*PaymentBackground_MediaData) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{36, 0} -} - -func (x *PaymentBackground_MediaData) GetMediaKey() []byte { - if x != nil { - return x.MediaKey - } - return nil +// Deprecated: Use ContextInfo_QuestionReplyQuotedMessage.ProtoReflect.Descriptor instead. +func (*ContextInfo_QuestionReplyQuotedMessage) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{33, 7} } -func (x *PaymentBackground_MediaData) GetMediaKeyTimestamp() int64 { - if x != nil && x.MediaKeyTimestamp != nil { - return *x.MediaKeyTimestamp +func (x *ContextInfo_QuestionReplyQuotedMessage) GetServerQuestionID() int32 { + if x != nil && x.ServerQuestionID != nil { + return *x.ServerQuestionID } return 0 } -func (x *PaymentBackground_MediaData) GetFileSHA256() []byte { +func (x *ContextInfo_QuestionReplyQuotedMessage) GetQuotedQuestion() *Message { if x != nil { - return x.FileSHA256 + return x.QuotedQuestion } return nil } -func (x *PaymentBackground_MediaData) GetFileEncSHA256() []byte { +func (x *ContextInfo_QuestionReplyQuotedMessage) GetQuotedResponse() *Message { if x != nil { - return x.FileEncSHA256 + return x.QuotedResponse } return nil } -func (x *PaymentBackground_MediaData) GetDirectPath() string { - if x != nil && x.DirectPath != nil { - return *x.DirectPath - } - return "" -} - -type StickerPackMessage_Sticker struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache +type ContextInfo_UTMInfo struct { + state protoimpl.MessageState `protogen:"open.v1"` + UtmSource *string `protobuf:"bytes,1,opt,name=utmSource" json:"utmSource,omitempty"` + UtmCampaign *string `protobuf:"bytes,2,opt,name=utmCampaign" json:"utmCampaign,omitempty"` unknownFields protoimpl.UnknownFields - - FileName *string `protobuf:"bytes,1,opt,name=fileName" json:"fileName,omitempty"` - IsAnimated *bool `protobuf:"varint,2,opt,name=isAnimated" json:"isAnimated,omitempty"` - Emojis []string `protobuf:"bytes,3,rep,name=emojis" json:"emojis,omitempty"` - AccessibilityLabel *string `protobuf:"bytes,4,opt,name=accessibilityLabel" json:"accessibilityLabel,omitempty"` - IsLottie *bool `protobuf:"varint,5,opt,name=isLottie" json:"isLottie,omitempty"` - Mimetype *string `protobuf:"bytes,6,opt,name=mimetype" json:"mimetype,omitempty"` + sizeCache protoimpl.SizeCache } -func (x *StickerPackMessage_Sticker) Reset() { - *x = StickerPackMessage_Sticker{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[151] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *ContextInfo_UTMInfo) Reset() { + *x = ContextInfo_UTMInfo{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[181] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *StickerPackMessage_Sticker) String() string { +func (x *ContextInfo_UTMInfo) String() string { return protoimpl.X.MessageStringOf(x) } -func (*StickerPackMessage_Sticker) ProtoMessage() {} +func (*ContextInfo_UTMInfo) ProtoMessage() {} -func (x *StickerPackMessage_Sticker) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[151] - if protoimpl.UnsafeEnabled && x != nil { +func (x *ContextInfo_UTMInfo) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[181] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -16713,80 +19919,48 @@ func (x *StickerPackMessage_Sticker) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use StickerPackMessage_Sticker.ProtoReflect.Descriptor instead. -func (*StickerPackMessage_Sticker) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{40, 0} -} - -func (x *StickerPackMessage_Sticker) GetFileName() string { - if x != nil && x.FileName != nil { - return *x.FileName - } - return "" -} - -func (x *StickerPackMessage_Sticker) GetIsAnimated() bool { - if x != nil && x.IsAnimated != nil { - return *x.IsAnimated - } - return false -} - -func (x *StickerPackMessage_Sticker) GetEmojis() []string { - if x != nil { - return x.Emojis - } - return nil +// Deprecated: Use ContextInfo_UTMInfo.ProtoReflect.Descriptor instead. +func (*ContextInfo_UTMInfo) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{33, 8} } -func (x *StickerPackMessage_Sticker) GetAccessibilityLabel() string { - if x != nil && x.AccessibilityLabel != nil { - return *x.AccessibilityLabel +func (x *ContextInfo_UTMInfo) GetUtmSource() string { + if x != nil && x.UtmSource != nil { + return *x.UtmSource } return "" } -func (x *StickerPackMessage_Sticker) GetIsLottie() bool { - if x != nil && x.IsLottie != nil { - return *x.IsLottie - } - return false -} - -func (x *StickerPackMessage_Sticker) GetMimetype() string { - if x != nil && x.Mimetype != nil { - return *x.Mimetype +func (x *ContextInfo_UTMInfo) GetUtmCampaign() string { + if x != nil && x.UtmCampaign != nil { + return *x.UtmCampaign } return "" } -type PollResultSnapshotMessage_PollVote struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - OptionName *string `protobuf:"bytes,1,opt,name=optionName" json:"optionName,omitempty"` - OptionVoteCount *int64 `protobuf:"varint,2,opt,name=optionVoteCount" json:"optionVoteCount,omitempty"` +type ContextInfo_BusinessMessageForwardInfo struct { + state protoimpl.MessageState `protogen:"open.v1"` + BusinessOwnerJID *string `protobuf:"bytes,1,opt,name=businessOwnerJID" json:"businessOwnerJID,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *PollResultSnapshotMessage_PollVote) Reset() { - *x = PollResultSnapshotMessage_PollVote{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[152] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *ContextInfo_BusinessMessageForwardInfo) Reset() { + *x = ContextInfo_BusinessMessageForwardInfo{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[182] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *PollResultSnapshotMessage_PollVote) String() string { +func (x *ContextInfo_BusinessMessageForwardInfo) String() string { return protoimpl.X.MessageStringOf(x) } -func (*PollResultSnapshotMessage_PollVote) ProtoMessage() {} +func (*ContextInfo_BusinessMessageForwardInfo) ProtoMessage() {} -func (x *PollResultSnapshotMessage_PollVote) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[152] - if protoimpl.UnsafeEnabled && x != nil { +func (x *ContextInfo_BusinessMessageForwardInfo) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[182] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -16796,51 +19970,45 @@ func (x *PollResultSnapshotMessage_PollVote) ProtoReflect() protoreflect.Message return mi.MessageOf(x) } -// Deprecated: Use PollResultSnapshotMessage_PollVote.ProtoReflect.Descriptor instead. -func (*PollResultSnapshotMessage_PollVote) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{49, 0} +// Deprecated: Use ContextInfo_BusinessMessageForwardInfo.ProtoReflect.Descriptor instead. +func (*ContextInfo_BusinessMessageForwardInfo) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{33, 9} } -func (x *PollResultSnapshotMessage_PollVote) GetOptionName() string { - if x != nil && x.OptionName != nil { - return *x.OptionName +func (x *ContextInfo_BusinessMessageForwardInfo) GetBusinessOwnerJID() string { + if x != nil && x.BusinessOwnerJID != nil { + return *x.BusinessOwnerJID } return "" } -func (x *PollResultSnapshotMessage_PollVote) GetOptionVoteCount() int64 { - if x != nil && x.OptionVoteCount != nil { - return *x.OptionVoteCount - } - return 0 -} - -type PollCreationMessage_Option struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache +type ContextInfo_DataSharingContext_Parameters struct { + state protoimpl.MessageState `protogen:"open.v1"` + Key *string `protobuf:"bytes,1,opt,name=key" json:"key,omitempty"` + StringData *string `protobuf:"bytes,2,opt,name=stringData" json:"stringData,omitempty"` + IntData *int64 `protobuf:"varint,3,opt,name=intData" json:"intData,omitempty"` + FloatData *float32 `protobuf:"fixed32,4,opt,name=floatData" json:"floatData,omitempty"` + Contents *ContextInfo_DataSharingContext_Parameters `protobuf:"bytes,5,opt,name=contents" json:"contents,omitempty"` unknownFields protoimpl.UnknownFields - - OptionName *string `protobuf:"bytes,1,opt,name=optionName" json:"optionName,omitempty"` + sizeCache protoimpl.SizeCache } -func (x *PollCreationMessage_Option) Reset() { - *x = PollCreationMessage_Option{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[153] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *ContextInfo_DataSharingContext_Parameters) Reset() { + *x = ContextInfo_DataSharingContext_Parameters{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[183] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *PollCreationMessage_Option) String() string { +func (x *ContextInfo_DataSharingContext_Parameters) String() string { return protoimpl.X.MessageStringOf(x) } -func (*PollCreationMessage_Option) ProtoMessage() {} +func (*ContextInfo_DataSharingContext_Parameters) ProtoMessage() {} -func (x *PollCreationMessage_Option) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[153] - if protoimpl.UnsafeEnabled && x != nil { +func (x *ContextInfo_DataSharingContext_Parameters) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[183] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -16850,54 +20018,72 @@ func (x *PollCreationMessage_Option) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use PollCreationMessage_Option.ProtoReflect.Descriptor instead. -func (*PollCreationMessage_Option) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{54, 0} +// Deprecated: Use ContextInfo_DataSharingContext_Parameters.ProtoReflect.Descriptor instead. +func (*ContextInfo_DataSharingContext_Parameters) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{33, 1, 0} } -func (x *PollCreationMessage_Option) GetOptionName() string { - if x != nil && x.OptionName != nil { - return *x.OptionName +func (x *ContextInfo_DataSharingContext_Parameters) GetKey() string { + if x != nil && x.Key != nil { + return *x.Key + } + return "" +} + +func (x *ContextInfo_DataSharingContext_Parameters) GetStringData() string { + if x != nil && x.StringData != nil { + return *x.StringData + } + return "" +} + +func (x *ContextInfo_DataSharingContext_Parameters) GetIntData() int64 { + if x != nil && x.IntData != nil { + return *x.IntData + } + return 0 +} + +func (x *ContextInfo_DataSharingContext_Parameters) GetFloatData() float32 { + if x != nil && x.FloatData != nil { + return *x.FloatData } - return "" + return 0 } -type ProductMessage_ProductSnapshot struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +func (x *ContextInfo_DataSharingContext_Parameters) GetContents() *ContextInfo_DataSharingContext_Parameters { + if x != nil { + return x.Contents + } + return nil +} - ProductImage *ImageMessage `protobuf:"bytes,1,opt,name=productImage" json:"productImage,omitempty"` - ProductID *string `protobuf:"bytes,2,opt,name=productID" json:"productID,omitempty"` - Title *string `protobuf:"bytes,3,opt,name=title" json:"title,omitempty"` - Description *string `protobuf:"bytes,4,opt,name=description" json:"description,omitempty"` - CurrencyCode *string `protobuf:"bytes,5,opt,name=currencyCode" json:"currencyCode,omitempty"` - PriceAmount1000 *int64 `protobuf:"varint,6,opt,name=priceAmount1000" json:"priceAmount1000,omitempty"` - RetailerID *string `protobuf:"bytes,7,opt,name=retailerID" json:"retailerID,omitempty"` - URL *string `protobuf:"bytes,8,opt,name=URL" json:"URL,omitempty"` - ProductImageCount *uint32 `protobuf:"varint,9,opt,name=productImageCount" json:"productImageCount,omitempty"` - FirstImageID *string `protobuf:"bytes,11,opt,name=firstImageID" json:"firstImageID,omitempty"` - SalePriceAmount1000 *int64 `protobuf:"varint,12,opt,name=salePriceAmount1000" json:"salePriceAmount1000,omitempty"` +type HydratedTemplateButton_HydratedURLButton struct { + state protoimpl.MessageState `protogen:"open.v1"` + DisplayText *string `protobuf:"bytes,1,opt,name=displayText" json:"displayText,omitempty"` + URL *string `protobuf:"bytes,2,opt,name=URL" json:"URL,omitempty"` + ConsentedUsersURL *string `protobuf:"bytes,3,opt,name=consentedUsersURL" json:"consentedUsersURL,omitempty"` + WebviewPresentation *HydratedTemplateButton_HydratedURLButton_WebviewPresentationType `protobuf:"varint,4,opt,name=webviewPresentation,enum=WAWebProtobufsE2E.HydratedTemplateButton_HydratedURLButton_WebviewPresentationType" json:"webviewPresentation,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *ProductMessage_ProductSnapshot) Reset() { - *x = ProductMessage_ProductSnapshot{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[154] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *HydratedTemplateButton_HydratedURLButton) Reset() { + *x = HydratedTemplateButton_HydratedURLButton{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[184] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *ProductMessage_ProductSnapshot) String() string { +func (x *HydratedTemplateButton_HydratedURLButton) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ProductMessage_ProductSnapshot) ProtoMessage() {} +func (*HydratedTemplateButton_HydratedURLButton) ProtoMessage() {} -func (x *ProductMessage_ProductSnapshot) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[154] - if protoimpl.UnsafeEnabled && x != nil { +func (x *HydratedTemplateButton_HydratedURLButton) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[184] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -16907,116 +20093,115 @@ func (x *ProductMessage_ProductSnapshot) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ProductMessage_ProductSnapshot.ProtoReflect.Descriptor instead. -func (*ProductMessage_ProductSnapshot) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{61, 0} +// Deprecated: Use HydratedTemplateButton_HydratedURLButton.ProtoReflect.Descriptor instead. +func (*HydratedTemplateButton_HydratedURLButton) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{38, 0} } -func (x *ProductMessage_ProductSnapshot) GetProductImage() *ImageMessage { - if x != nil { - return x.ProductImage +func (x *HydratedTemplateButton_HydratedURLButton) GetDisplayText() string { + if x != nil && x.DisplayText != nil { + return *x.DisplayText } - return nil + return "" } -func (x *ProductMessage_ProductSnapshot) GetProductID() string { - if x != nil && x.ProductID != nil { - return *x.ProductID +func (x *HydratedTemplateButton_HydratedURLButton) GetURL() string { + if x != nil && x.URL != nil { + return *x.URL } return "" } -func (x *ProductMessage_ProductSnapshot) GetTitle() string { - if x != nil && x.Title != nil { - return *x.Title +func (x *HydratedTemplateButton_HydratedURLButton) GetConsentedUsersURL() string { + if x != nil && x.ConsentedUsersURL != nil { + return *x.ConsentedUsersURL } return "" } -func (x *ProductMessage_ProductSnapshot) GetDescription() string { - if x != nil && x.Description != nil { - return *x.Description +func (x *HydratedTemplateButton_HydratedURLButton) GetWebviewPresentation() HydratedTemplateButton_HydratedURLButton_WebviewPresentationType { + if x != nil && x.WebviewPresentation != nil { + return *x.WebviewPresentation } - return "" + return HydratedTemplateButton_HydratedURLButton_FULL } -func (x *ProductMessage_ProductSnapshot) GetCurrencyCode() string { - if x != nil && x.CurrencyCode != nil { - return *x.CurrencyCode - } - return "" +type HydratedTemplateButton_HydratedCallButton struct { + state protoimpl.MessageState `protogen:"open.v1"` + DisplayText *string `protobuf:"bytes,1,opt,name=displayText" json:"displayText,omitempty"` + PhoneNumber *string `protobuf:"bytes,2,opt,name=phoneNumber" json:"phoneNumber,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *ProductMessage_ProductSnapshot) GetPriceAmount1000() int64 { - if x != nil && x.PriceAmount1000 != nil { - return *x.PriceAmount1000 - } - return 0 +func (x *HydratedTemplateButton_HydratedCallButton) Reset() { + *x = HydratedTemplateButton_HydratedCallButton{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[185] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *ProductMessage_ProductSnapshot) GetRetailerID() string { - if x != nil && x.RetailerID != nil { - return *x.RetailerID - } - return "" +func (x *HydratedTemplateButton_HydratedCallButton) String() string { + return protoimpl.X.MessageStringOf(x) } -func (x *ProductMessage_ProductSnapshot) GetURL() string { - if x != nil && x.URL != nil { - return *x.URL +func (*HydratedTemplateButton_HydratedCallButton) ProtoMessage() {} + +func (x *HydratedTemplateButton_HydratedCallButton) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[185] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return "" + return mi.MessageOf(x) } -func (x *ProductMessage_ProductSnapshot) GetProductImageCount() uint32 { - if x != nil && x.ProductImageCount != nil { - return *x.ProductImageCount - } - return 0 +// Deprecated: Use HydratedTemplateButton_HydratedCallButton.ProtoReflect.Descriptor instead. +func (*HydratedTemplateButton_HydratedCallButton) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{38, 1} } -func (x *ProductMessage_ProductSnapshot) GetFirstImageID() string { - if x != nil && x.FirstImageID != nil { - return *x.FirstImageID +func (x *HydratedTemplateButton_HydratedCallButton) GetDisplayText() string { + if x != nil && x.DisplayText != nil { + return *x.DisplayText } return "" } -func (x *ProductMessage_ProductSnapshot) GetSalePriceAmount1000() int64 { - if x != nil && x.SalePriceAmount1000 != nil { - return *x.SalePriceAmount1000 +func (x *HydratedTemplateButton_HydratedCallButton) GetPhoneNumber() string { + if x != nil && x.PhoneNumber != nil { + return *x.PhoneNumber } - return 0 + return "" } -type ProductMessage_CatalogSnapshot struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache +type HydratedTemplateButton_HydratedQuickReplyButton struct { + state protoimpl.MessageState `protogen:"open.v1"` + DisplayText *string `protobuf:"bytes,1,opt,name=displayText" json:"displayText,omitempty"` + ID *string `protobuf:"bytes,2,opt,name=ID" json:"ID,omitempty"` unknownFields protoimpl.UnknownFields - - CatalogImage *ImageMessage `protobuf:"bytes,1,opt,name=catalogImage" json:"catalogImage,omitempty"` - Title *string `protobuf:"bytes,2,opt,name=title" json:"title,omitempty"` - Description *string `protobuf:"bytes,3,opt,name=description" json:"description,omitempty"` + sizeCache protoimpl.SizeCache } -func (x *ProductMessage_CatalogSnapshot) Reset() { - *x = ProductMessage_CatalogSnapshot{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[155] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *HydratedTemplateButton_HydratedQuickReplyButton) Reset() { + *x = HydratedTemplateButton_HydratedQuickReplyButton{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[186] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *ProductMessage_CatalogSnapshot) String() string { +func (x *HydratedTemplateButton_HydratedQuickReplyButton) String() string { return protoimpl.X.MessageStringOf(x) } -func (*ProductMessage_CatalogSnapshot) ProtoMessage() {} +func (*HydratedTemplateButton_HydratedQuickReplyButton) ProtoMessage() {} -func (x *ProductMessage_CatalogSnapshot) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[155] - if protoimpl.UnsafeEnabled && x != nil { +func (x *HydratedTemplateButton_HydratedQuickReplyButton) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[186] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -17026,70 +20211,52 @@ func (x *ProductMessage_CatalogSnapshot) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use ProductMessage_CatalogSnapshot.ProtoReflect.Descriptor instead. -func (*ProductMessage_CatalogSnapshot) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{61, 1} -} - -func (x *ProductMessage_CatalogSnapshot) GetCatalogImage() *ImageMessage { - if x != nil { - return x.CatalogImage - } - return nil +// Deprecated: Use HydratedTemplateButton_HydratedQuickReplyButton.ProtoReflect.Descriptor instead. +func (*HydratedTemplateButton_HydratedQuickReplyButton) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{38, 2} } -func (x *ProductMessage_CatalogSnapshot) GetTitle() string { - if x != nil && x.Title != nil { - return *x.Title +func (x *HydratedTemplateButton_HydratedQuickReplyButton) GetDisplayText() string { + if x != nil && x.DisplayText != nil { + return *x.DisplayText } return "" } -func (x *ProductMessage_CatalogSnapshot) GetDescription() string { - if x != nil && x.Description != nil { - return *x.Description +func (x *HydratedTemplateButton_HydratedQuickReplyButton) GetID() string { + if x != nil && x.ID != nil { + return *x.ID } return "" } -type TemplateMessage_HydratedFourRowTemplate struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Types that are assignable to Title: - // - // *TemplateMessage_HydratedFourRowTemplate_DocumentMessage - // *TemplateMessage_HydratedFourRowTemplate_HydratedTitleText - // *TemplateMessage_HydratedFourRowTemplate_ImageMessage - // *TemplateMessage_HydratedFourRowTemplate_VideoMessage - // *TemplateMessage_HydratedFourRowTemplate_LocationMessage - Title isTemplateMessage_HydratedFourRowTemplate_Title `protobuf_oneof:"title"` - HydratedContentText *string `protobuf:"bytes,6,opt,name=hydratedContentText" json:"hydratedContentText,omitempty"` - HydratedFooterText *string `protobuf:"bytes,7,opt,name=hydratedFooterText" json:"hydratedFooterText,omitempty"` - HydratedButtons []*HydratedTemplateButton `protobuf:"bytes,8,rep,name=hydratedButtons" json:"hydratedButtons,omitempty"` - TemplateID *string `protobuf:"bytes,9,opt,name=templateID" json:"templateID,omitempty"` - MaskLinkedDevices *bool `protobuf:"varint,10,opt,name=maskLinkedDevices" json:"maskLinkedDevices,omitempty"` +type PaymentBackground_MediaData struct { + state protoimpl.MessageState `protogen:"open.v1"` + MediaKey []byte `protobuf:"bytes,1,opt,name=mediaKey" json:"mediaKey,omitempty"` + MediaKeyTimestamp *int64 `protobuf:"varint,2,opt,name=mediaKeyTimestamp" json:"mediaKeyTimestamp,omitempty"` + FileSHA256 []byte `protobuf:"bytes,3,opt,name=fileSHA256" json:"fileSHA256,omitempty"` + FileEncSHA256 []byte `protobuf:"bytes,4,opt,name=fileEncSHA256" json:"fileEncSHA256,omitempty"` + DirectPath *string `protobuf:"bytes,5,opt,name=directPath" json:"directPath,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *TemplateMessage_HydratedFourRowTemplate) Reset() { - *x = TemplateMessage_HydratedFourRowTemplate{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[156] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *PaymentBackground_MediaData) Reset() { + *x = PaymentBackground_MediaData{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[187] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *TemplateMessage_HydratedFourRowTemplate) String() string { +func (x *PaymentBackground_MediaData) String() string { return protoimpl.X.MessageStringOf(x) } -func (*TemplateMessage_HydratedFourRowTemplate) ProtoMessage() {} +func (*PaymentBackground_MediaData) ProtoMessage() {} -func (x *TemplateMessage_HydratedFourRowTemplate) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[156] - if protoimpl.UnsafeEnabled && x != nil { +func (x *PaymentBackground_MediaData) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[187] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -17099,163 +20266,184 @@ func (x *TemplateMessage_HydratedFourRowTemplate) ProtoReflect() protoreflect.Me return mi.MessageOf(x) } -// Deprecated: Use TemplateMessage_HydratedFourRowTemplate.ProtoReflect.Descriptor instead. -func (*TemplateMessage_HydratedFourRowTemplate) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{63, 0} -} - -func (m *TemplateMessage_HydratedFourRowTemplate) GetTitle() isTemplateMessage_HydratedFourRowTemplate_Title { - if m != nil { - return m.Title - } - return nil +// Deprecated: Use PaymentBackground_MediaData.ProtoReflect.Descriptor instead. +func (*PaymentBackground_MediaData) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{39, 0} } -func (x *TemplateMessage_HydratedFourRowTemplate) GetDocumentMessage() *DocumentMessage { - if x, ok := x.GetTitle().(*TemplateMessage_HydratedFourRowTemplate_DocumentMessage); ok { - return x.DocumentMessage +func (x *PaymentBackground_MediaData) GetMediaKey() []byte { + if x != nil { + return x.MediaKey } return nil } -func (x *TemplateMessage_HydratedFourRowTemplate) GetHydratedTitleText() string { - if x, ok := x.GetTitle().(*TemplateMessage_HydratedFourRowTemplate_HydratedTitleText); ok { - return x.HydratedTitleText - } - return "" -} - -func (x *TemplateMessage_HydratedFourRowTemplate) GetImageMessage() *ImageMessage { - if x, ok := x.GetTitle().(*TemplateMessage_HydratedFourRowTemplate_ImageMessage); ok { - return x.ImageMessage +func (x *PaymentBackground_MediaData) GetMediaKeyTimestamp() int64 { + if x != nil && x.MediaKeyTimestamp != nil { + return *x.MediaKeyTimestamp } - return nil + return 0 } -func (x *TemplateMessage_HydratedFourRowTemplate) GetVideoMessage() *VideoMessage { - if x, ok := x.GetTitle().(*TemplateMessage_HydratedFourRowTemplate_VideoMessage); ok { - return x.VideoMessage +func (x *PaymentBackground_MediaData) GetFileSHA256() []byte { + if x != nil { + return x.FileSHA256 } return nil } -func (x *TemplateMessage_HydratedFourRowTemplate) GetLocationMessage() *LocationMessage { - if x, ok := x.GetTitle().(*TemplateMessage_HydratedFourRowTemplate_LocationMessage); ok { - return x.LocationMessage +func (x *PaymentBackground_MediaData) GetFileEncSHA256() []byte { + if x != nil { + return x.FileEncSHA256 } return nil } -func (x *TemplateMessage_HydratedFourRowTemplate) GetHydratedContentText() string { - if x != nil && x.HydratedContentText != nil { - return *x.HydratedContentText +func (x *PaymentBackground_MediaData) GetDirectPath() string { + if x != nil && x.DirectPath != nil { + return *x.DirectPath } return "" } -func (x *TemplateMessage_HydratedFourRowTemplate) GetHydratedFooterText() string { - if x != nil && x.HydratedFooterText != nil { - return *x.HydratedFooterText - } - return "" +type PollResultSnapshotMessage_PollVote struct { + state protoimpl.MessageState `protogen:"open.v1"` + OptionName *string `protobuf:"bytes,1,opt,name=optionName" json:"optionName,omitempty"` + OptionVoteCount *int64 `protobuf:"varint,2,opt,name=optionVoteCount" json:"optionVoteCount,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *TemplateMessage_HydratedFourRowTemplate) GetHydratedButtons() []*HydratedTemplateButton { - if x != nil { - return x.HydratedButtons - } - return nil +func (x *PollResultSnapshotMessage_PollVote) Reset() { + *x = PollResultSnapshotMessage_PollVote{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[188] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *TemplateMessage_HydratedFourRowTemplate) GetTemplateID() string { - if x != nil && x.TemplateID != nil { - return *x.TemplateID - } - return "" +func (x *PollResultSnapshotMessage_PollVote) String() string { + return protoimpl.X.MessageStringOf(x) } -func (x *TemplateMessage_HydratedFourRowTemplate) GetMaskLinkedDevices() bool { - if x != nil && x.MaskLinkedDevices != nil { - return *x.MaskLinkedDevices +func (*PollResultSnapshotMessage_PollVote) ProtoMessage() {} + +func (x *PollResultSnapshotMessage_PollVote) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[188] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } - return false + return mi.MessageOf(x) } -type isTemplateMessage_HydratedFourRowTemplate_Title interface { - isTemplateMessage_HydratedFourRowTemplate_Title() +// Deprecated: Use PollResultSnapshotMessage_PollVote.ProtoReflect.Descriptor instead. +func (*PollResultSnapshotMessage_PollVote) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{55, 0} } -type TemplateMessage_HydratedFourRowTemplate_DocumentMessage struct { - DocumentMessage *DocumentMessage `protobuf:"bytes,1,opt,name=documentMessage,oneof"` +func (x *PollResultSnapshotMessage_PollVote) GetOptionName() string { + if x != nil && x.OptionName != nil { + return *x.OptionName + } + return "" } -type TemplateMessage_HydratedFourRowTemplate_HydratedTitleText struct { - HydratedTitleText string `protobuf:"bytes,2,opt,name=hydratedTitleText,oneof"` +func (x *PollResultSnapshotMessage_PollVote) GetOptionVoteCount() int64 { + if x != nil && x.OptionVoteCount != nil { + return *x.OptionVoteCount + } + return 0 } -type TemplateMessage_HydratedFourRowTemplate_ImageMessage struct { - ImageMessage *ImageMessage `protobuf:"bytes,3,opt,name=imageMessage,oneof"` +type PollCreationMessage_Option struct { + state protoimpl.MessageState `protogen:"open.v1"` + OptionName *string `protobuf:"bytes,1,opt,name=optionName" json:"optionName,omitempty"` + OptionHash *string `protobuf:"bytes,2,opt,name=optionHash" json:"optionHash,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -type TemplateMessage_HydratedFourRowTemplate_VideoMessage struct { - VideoMessage *VideoMessage `protobuf:"bytes,4,opt,name=videoMessage,oneof"` +func (x *PollCreationMessage_Option) Reset() { + *x = PollCreationMessage_Option{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[189] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -type TemplateMessage_HydratedFourRowTemplate_LocationMessage struct { - LocationMessage *LocationMessage `protobuf:"bytes,5,opt,name=locationMessage,oneof"` +func (x *PollCreationMessage_Option) String() string { + return protoimpl.X.MessageStringOf(x) } -func (*TemplateMessage_HydratedFourRowTemplate_DocumentMessage) isTemplateMessage_HydratedFourRowTemplate_Title() { -} +func (*PollCreationMessage_Option) ProtoMessage() {} -func (*TemplateMessage_HydratedFourRowTemplate_HydratedTitleText) isTemplateMessage_HydratedFourRowTemplate_Title() { +func (x *PollCreationMessage_Option) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[189] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -func (*TemplateMessage_HydratedFourRowTemplate_ImageMessage) isTemplateMessage_HydratedFourRowTemplate_Title() { +// Deprecated: Use PollCreationMessage_Option.ProtoReflect.Descriptor instead. +func (*PollCreationMessage_Option) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{60, 0} } -func (*TemplateMessage_HydratedFourRowTemplate_VideoMessage) isTemplateMessage_HydratedFourRowTemplate_Title() { +func (x *PollCreationMessage_Option) GetOptionName() string { + if x != nil && x.OptionName != nil { + return *x.OptionName + } + return "" } -func (*TemplateMessage_HydratedFourRowTemplate_LocationMessage) isTemplateMessage_HydratedFourRowTemplate_Title() { +func (x *PollCreationMessage_Option) GetOptionHash() string { + if x != nil && x.OptionHash != nil { + return *x.OptionHash + } + return "" } -type TemplateMessage_FourRowTemplate struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Types that are assignable to Title: - // - // *TemplateMessage_FourRowTemplate_DocumentMessage - // *TemplateMessage_FourRowTemplate_HighlyStructuredMessage - // *TemplateMessage_FourRowTemplate_ImageMessage - // *TemplateMessage_FourRowTemplate_VideoMessage - // *TemplateMessage_FourRowTemplate_LocationMessage - Title isTemplateMessage_FourRowTemplate_Title `protobuf_oneof:"title"` - Content *HighlyStructuredMessage `protobuf:"bytes,6,opt,name=content" json:"content,omitempty"` - Footer *HighlyStructuredMessage `protobuf:"bytes,7,opt,name=footer" json:"footer,omitempty"` - Buttons []*TemplateButton `protobuf:"bytes,8,rep,name=buttons" json:"buttons,omitempty"` +type ProductMessage_ProductSnapshot struct { + state protoimpl.MessageState `protogen:"open.v1"` + ProductImage *ImageMessage `protobuf:"bytes,1,opt,name=productImage" json:"productImage,omitempty"` + ProductID *string `protobuf:"bytes,2,opt,name=productID" json:"productID,omitempty"` + Title *string `protobuf:"bytes,3,opt,name=title" json:"title,omitempty"` + Description *string `protobuf:"bytes,4,opt,name=description" json:"description,omitempty"` + CurrencyCode *string `protobuf:"bytes,5,opt,name=currencyCode" json:"currencyCode,omitempty"` + PriceAmount1000 *int64 `protobuf:"varint,6,opt,name=priceAmount1000" json:"priceAmount1000,omitempty"` + RetailerID *string `protobuf:"bytes,7,opt,name=retailerID" json:"retailerID,omitempty"` + URL *string `protobuf:"bytes,8,opt,name=URL" json:"URL,omitempty"` + ProductImageCount *uint32 `protobuf:"varint,9,opt,name=productImageCount" json:"productImageCount,omitempty"` + FirstImageID *string `protobuf:"bytes,11,opt,name=firstImageID" json:"firstImageID,omitempty"` + SalePriceAmount1000 *int64 `protobuf:"varint,12,opt,name=salePriceAmount1000" json:"salePriceAmount1000,omitempty"` + SignedURL *string `protobuf:"bytes,13,opt,name=signedURL" json:"signedURL,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *TemplateMessage_FourRowTemplate) Reset() { - *x = TemplateMessage_FourRowTemplate{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[157] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *ProductMessage_ProductSnapshot) Reset() { + *x = ProductMessage_ProductSnapshot{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[190] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *TemplateMessage_FourRowTemplate) String() string { +func (x *ProductMessage_ProductSnapshot) String() string { return protoimpl.X.MessageStringOf(x) } -func (*TemplateMessage_FourRowTemplate) ProtoMessage() {} +func (*ProductMessage_ProductSnapshot) ProtoMessage() {} -func (x *TemplateMessage_FourRowTemplate) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[157] - if protoimpl.UnsafeEnabled && x != nil { +func (x *ProductMessage_ProductSnapshot) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[190] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -17265,135 +20453,190 @@ func (x *TemplateMessage_FourRowTemplate) ProtoReflect() protoreflect.Message { return mi.MessageOf(x) } -// Deprecated: Use TemplateMessage_FourRowTemplate.ProtoReflect.Descriptor instead. -func (*TemplateMessage_FourRowTemplate) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{63, 1} +// Deprecated: Use ProductMessage_ProductSnapshot.ProtoReflect.Descriptor instead. +func (*ProductMessage_ProductSnapshot) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{68, 0} } -func (m *TemplateMessage_FourRowTemplate) GetTitle() isTemplateMessage_FourRowTemplate_Title { - if m != nil { - return m.Title +func (x *ProductMessage_ProductSnapshot) GetProductImage() *ImageMessage { + if x != nil { + return x.ProductImage } return nil } -func (x *TemplateMessage_FourRowTemplate) GetDocumentMessage() *DocumentMessage { - if x, ok := x.GetTitle().(*TemplateMessage_FourRowTemplate_DocumentMessage); ok { - return x.DocumentMessage +func (x *ProductMessage_ProductSnapshot) GetProductID() string { + if x != nil && x.ProductID != nil { + return *x.ProductID } - return nil + return "" } -func (x *TemplateMessage_FourRowTemplate) GetHighlyStructuredMessage() *HighlyStructuredMessage { - if x, ok := x.GetTitle().(*TemplateMessage_FourRowTemplate_HighlyStructuredMessage); ok { - return x.HighlyStructuredMessage +func (x *ProductMessage_ProductSnapshot) GetTitle() string { + if x != nil && x.Title != nil { + return *x.Title } - return nil + return "" } -func (x *TemplateMessage_FourRowTemplate) GetImageMessage() *ImageMessage { - if x, ok := x.GetTitle().(*TemplateMessage_FourRowTemplate_ImageMessage); ok { - return x.ImageMessage +func (x *ProductMessage_ProductSnapshot) GetDescription() string { + if x != nil && x.Description != nil { + return *x.Description } - return nil + return "" } -func (x *TemplateMessage_FourRowTemplate) GetVideoMessage() *VideoMessage { - if x, ok := x.GetTitle().(*TemplateMessage_FourRowTemplate_VideoMessage); ok { - return x.VideoMessage +func (x *ProductMessage_ProductSnapshot) GetCurrencyCode() string { + if x != nil && x.CurrencyCode != nil { + return *x.CurrencyCode } - return nil + return "" } -func (x *TemplateMessage_FourRowTemplate) GetLocationMessage() *LocationMessage { - if x, ok := x.GetTitle().(*TemplateMessage_FourRowTemplate_LocationMessage); ok { - return x.LocationMessage +func (x *ProductMessage_ProductSnapshot) GetPriceAmount1000() int64 { + if x != nil && x.PriceAmount1000 != nil { + return *x.PriceAmount1000 } - return nil + return 0 } -func (x *TemplateMessage_FourRowTemplate) GetContent() *HighlyStructuredMessage { - if x != nil { - return x.Content +func (x *ProductMessage_ProductSnapshot) GetRetailerID() string { + if x != nil && x.RetailerID != nil { + return *x.RetailerID } - return nil + return "" } -func (x *TemplateMessage_FourRowTemplate) GetFooter() *HighlyStructuredMessage { - if x != nil { - return x.Footer +func (x *ProductMessage_ProductSnapshot) GetURL() string { + if x != nil && x.URL != nil { + return *x.URL } - return nil + return "" } -func (x *TemplateMessage_FourRowTemplate) GetButtons() []*TemplateButton { - if x != nil { - return x.Buttons +func (x *ProductMessage_ProductSnapshot) GetProductImageCount() uint32 { + if x != nil && x.ProductImageCount != nil { + return *x.ProductImageCount } - return nil + return 0 } -type isTemplateMessage_FourRowTemplate_Title interface { - isTemplateMessage_FourRowTemplate_Title() +func (x *ProductMessage_ProductSnapshot) GetFirstImageID() string { + if x != nil && x.FirstImageID != nil { + return *x.FirstImageID + } + return "" } -type TemplateMessage_FourRowTemplate_DocumentMessage struct { - DocumentMessage *DocumentMessage `protobuf:"bytes,1,opt,name=documentMessage,oneof"` +func (x *ProductMessage_ProductSnapshot) GetSalePriceAmount1000() int64 { + if x != nil && x.SalePriceAmount1000 != nil { + return *x.SalePriceAmount1000 + } + return 0 } -type TemplateMessage_FourRowTemplate_HighlyStructuredMessage struct { - HighlyStructuredMessage *HighlyStructuredMessage `protobuf:"bytes,2,opt,name=highlyStructuredMessage,oneof"` +func (x *ProductMessage_ProductSnapshot) GetSignedURL() string { + if x != nil && x.SignedURL != nil { + return *x.SignedURL + } + return "" } -type TemplateMessage_FourRowTemplate_ImageMessage struct { - ImageMessage *ImageMessage `protobuf:"bytes,3,opt,name=imageMessage,oneof"` +type ProductMessage_CatalogSnapshot struct { + state protoimpl.MessageState `protogen:"open.v1"` + CatalogImage *ImageMessage `protobuf:"bytes,1,opt,name=catalogImage" json:"catalogImage,omitempty"` + Title *string `protobuf:"bytes,2,opt,name=title" json:"title,omitempty"` + Description *string `protobuf:"bytes,3,opt,name=description" json:"description,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -type TemplateMessage_FourRowTemplate_VideoMessage struct { - VideoMessage *VideoMessage `protobuf:"bytes,4,opt,name=videoMessage,oneof"` +func (x *ProductMessage_CatalogSnapshot) Reset() { + *x = ProductMessage_CatalogSnapshot{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[191] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -type TemplateMessage_FourRowTemplate_LocationMessage struct { - LocationMessage *LocationMessage `protobuf:"bytes,5,opt,name=locationMessage,oneof"` +func (x *ProductMessage_CatalogSnapshot) String() string { + return protoimpl.X.MessageStringOf(x) } -func (*TemplateMessage_FourRowTemplate_DocumentMessage) isTemplateMessage_FourRowTemplate_Title() {} +func (*ProductMessage_CatalogSnapshot) ProtoMessage() {} -func (*TemplateMessage_FourRowTemplate_HighlyStructuredMessage) isTemplateMessage_FourRowTemplate_Title() { +func (x *ProductMessage_CatalogSnapshot) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[191] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) } -func (*TemplateMessage_FourRowTemplate_ImageMessage) isTemplateMessage_FourRowTemplate_Title() {} +// Deprecated: Use ProductMessage_CatalogSnapshot.ProtoReflect.Descriptor instead. +func (*ProductMessage_CatalogSnapshot) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{68, 1} +} -func (*TemplateMessage_FourRowTemplate_VideoMessage) isTemplateMessage_FourRowTemplate_Title() {} +func (x *ProductMessage_CatalogSnapshot) GetCatalogImage() *ImageMessage { + if x != nil { + return x.CatalogImage + } + return nil +} -func (*TemplateMessage_FourRowTemplate_LocationMessage) isTemplateMessage_FourRowTemplate_Title() {} +func (x *ProductMessage_CatalogSnapshot) GetTitle() string { + if x != nil && x.Title != nil { + return *x.Title + } + return "" +} -type PeerDataOperationRequestMessage_PlaceholderMessageResendRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +func (x *ProductMessage_CatalogSnapshot) GetDescription() string { + if x != nil && x.Description != nil { + return *x.Description + } + return "" +} - MessageKey *waCommon.MessageKey `protobuf:"bytes,1,opt,name=messageKey" json:"messageKey,omitempty"` +type TemplateMessage_HydratedFourRowTemplate struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Types that are valid to be assigned to Title: + // + // *TemplateMessage_HydratedFourRowTemplate_DocumentMessage + // *TemplateMessage_HydratedFourRowTemplate_HydratedTitleText + // *TemplateMessage_HydratedFourRowTemplate_ImageMessage + // *TemplateMessage_HydratedFourRowTemplate_VideoMessage + // *TemplateMessage_HydratedFourRowTemplate_LocationMessage + Title isTemplateMessage_HydratedFourRowTemplate_Title `protobuf_oneof:"title"` + HydratedContentText *string `protobuf:"bytes,6,opt,name=hydratedContentText" json:"hydratedContentText,omitempty"` + HydratedFooterText *string `protobuf:"bytes,7,opt,name=hydratedFooterText" json:"hydratedFooterText,omitempty"` + HydratedButtons []*HydratedTemplateButton `protobuf:"bytes,8,rep,name=hydratedButtons" json:"hydratedButtons,omitempty"` + TemplateID *string `protobuf:"bytes,9,opt,name=templateID" json:"templateID,omitempty"` + MaskLinkedDevices *bool `protobuf:"varint,10,opt,name=maskLinkedDevices" json:"maskLinkedDevices,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *PeerDataOperationRequestMessage_PlaceholderMessageResendRequest) Reset() { - *x = PeerDataOperationRequestMessage_PlaceholderMessageResendRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[158] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +func (x *TemplateMessage_HydratedFourRowTemplate) Reset() { + *x = TemplateMessage_HydratedFourRowTemplate{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[192] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *PeerDataOperationRequestMessage_PlaceholderMessageResendRequest) String() string { +func (x *TemplateMessage_HydratedFourRowTemplate) String() string { return protoimpl.X.MessageStringOf(x) } -func (*PeerDataOperationRequestMessage_PlaceholderMessageResendRequest) ProtoMessage() {} +func (*TemplateMessage_HydratedFourRowTemplate) ProtoMessage() {} -func (x *PeerDataOperationRequestMessage_PlaceholderMessageResendRequest) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[158] - if protoimpl.UnsafeEnabled && x != nil { +func (x *TemplateMessage_HydratedFourRowTemplate) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[192] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -17403,179 +20646,170 @@ func (x *PeerDataOperationRequestMessage_PlaceholderMessageResendRequest) ProtoR return mi.MessageOf(x) } -// Deprecated: Use PeerDataOperationRequestMessage_PlaceholderMessageResendRequest.ProtoReflect.Descriptor instead. -func (*PeerDataOperationRequestMessage_PlaceholderMessageResendRequest) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{72, 0} +// Deprecated: Use TemplateMessage_HydratedFourRowTemplate.ProtoReflect.Descriptor instead. +func (*TemplateMessage_HydratedFourRowTemplate) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{70, 0} } -func (x *PeerDataOperationRequestMessage_PlaceholderMessageResendRequest) GetMessageKey() *waCommon.MessageKey { +func (x *TemplateMessage_HydratedFourRowTemplate) GetTitle() isTemplateMessage_HydratedFourRowTemplate_Title { if x != nil { - return x.MessageKey + return x.Title } return nil } -type PeerDataOperationRequestMessage_FullHistorySyncOnDemandRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - RequestMetadata *FullHistorySyncOnDemandRequestMetadata `protobuf:"bytes,1,opt,name=requestMetadata" json:"requestMetadata,omitempty"` - HistorySyncConfig *waCompanionReg.DeviceProps_HistorySyncConfig `protobuf:"bytes,2,opt,name=historySyncConfig" json:"historySyncConfig,omitempty"` +func (x *TemplateMessage_HydratedFourRowTemplate) GetDocumentMessage() *DocumentMessage { + if x != nil { + if x, ok := x.Title.(*TemplateMessage_HydratedFourRowTemplate_DocumentMessage); ok { + return x.DocumentMessage + } + } + return nil } -func (x *PeerDataOperationRequestMessage_FullHistorySyncOnDemandRequest) Reset() { - *x = PeerDataOperationRequestMessage_FullHistorySyncOnDemandRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[159] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) +func (x *TemplateMessage_HydratedFourRowTemplate) GetHydratedTitleText() string { + if x != nil { + if x, ok := x.Title.(*TemplateMessage_HydratedFourRowTemplate_HydratedTitleText); ok { + return x.HydratedTitleText + } } + return "" } -func (x *PeerDataOperationRequestMessage_FullHistorySyncOnDemandRequest) String() string { - return protoimpl.X.MessageStringOf(x) +func (x *TemplateMessage_HydratedFourRowTemplate) GetImageMessage() *ImageMessage { + if x != nil { + if x, ok := x.Title.(*TemplateMessage_HydratedFourRowTemplate_ImageMessage); ok { + return x.ImageMessage + } + } + return nil } -func (*PeerDataOperationRequestMessage_FullHistorySyncOnDemandRequest) ProtoMessage() {} +func (x *TemplateMessage_HydratedFourRowTemplate) GetVideoMessage() *VideoMessage { + if x != nil { + if x, ok := x.Title.(*TemplateMessage_HydratedFourRowTemplate_VideoMessage); ok { + return x.VideoMessage + } + } + return nil +} -func (x *PeerDataOperationRequestMessage_FullHistorySyncOnDemandRequest) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[159] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) +func (x *TemplateMessage_HydratedFourRowTemplate) GetLocationMessage() *LocationMessage { + if x != nil { + if x, ok := x.Title.(*TemplateMessage_HydratedFourRowTemplate_LocationMessage); ok { + return x.LocationMessage } - return ms } - return mi.MessageOf(x) + return nil } -// Deprecated: Use PeerDataOperationRequestMessage_FullHistorySyncOnDemandRequest.ProtoReflect.Descriptor instead. -func (*PeerDataOperationRequestMessage_FullHistorySyncOnDemandRequest) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{72, 1} +func (x *TemplateMessage_HydratedFourRowTemplate) GetHydratedContentText() string { + if x != nil && x.HydratedContentText != nil { + return *x.HydratedContentText + } + return "" } -func (x *PeerDataOperationRequestMessage_FullHistorySyncOnDemandRequest) GetRequestMetadata() *FullHistorySyncOnDemandRequestMetadata { - if x != nil { - return x.RequestMetadata +func (x *TemplateMessage_HydratedFourRowTemplate) GetHydratedFooterText() string { + if x != nil && x.HydratedFooterText != nil { + return *x.HydratedFooterText } - return nil + return "" } -func (x *PeerDataOperationRequestMessage_FullHistorySyncOnDemandRequest) GetHistorySyncConfig() *waCompanionReg.DeviceProps_HistorySyncConfig { +func (x *TemplateMessage_HydratedFourRowTemplate) GetHydratedButtons() []*HydratedTemplateButton { if x != nil { - return x.HistorySyncConfig + return x.HydratedButtons } return nil } -type PeerDataOperationRequestMessage_HistorySyncOnDemandRequest struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - ChatJID *string `protobuf:"bytes,1,opt,name=chatJID" json:"chatJID,omitempty"` - OldestMsgID *string `protobuf:"bytes,2,opt,name=oldestMsgID" json:"oldestMsgID,omitempty"` - OldestMsgFromMe *bool `protobuf:"varint,3,opt,name=oldestMsgFromMe" json:"oldestMsgFromMe,omitempty"` - OnDemandMsgCount *int32 `protobuf:"varint,4,opt,name=onDemandMsgCount" json:"onDemandMsgCount,omitempty"` - OldestMsgTimestampMS *int64 `protobuf:"varint,5,opt,name=oldestMsgTimestampMS" json:"oldestMsgTimestampMS,omitempty"` +func (x *TemplateMessage_HydratedFourRowTemplate) GetTemplateID() string { + if x != nil && x.TemplateID != nil { + return *x.TemplateID + } + return "" } -func (x *PeerDataOperationRequestMessage_HistorySyncOnDemandRequest) Reset() { - *x = PeerDataOperationRequestMessage_HistorySyncOnDemandRequest{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[160] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) +func (x *TemplateMessage_HydratedFourRowTemplate) GetMaskLinkedDevices() bool { + if x != nil && x.MaskLinkedDevices != nil { + return *x.MaskLinkedDevices } + return false } -func (x *PeerDataOperationRequestMessage_HistorySyncOnDemandRequest) String() string { - return protoimpl.X.MessageStringOf(x) +type isTemplateMessage_HydratedFourRowTemplate_Title interface { + isTemplateMessage_HydratedFourRowTemplate_Title() } -func (*PeerDataOperationRequestMessage_HistorySyncOnDemandRequest) ProtoMessage() {} +type TemplateMessage_HydratedFourRowTemplate_DocumentMessage struct { + DocumentMessage *DocumentMessage `protobuf:"bytes,1,opt,name=documentMessage,oneof"` +} -func (x *PeerDataOperationRequestMessage_HistorySyncOnDemandRequest) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[160] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) +type TemplateMessage_HydratedFourRowTemplate_HydratedTitleText struct { + HydratedTitleText string `protobuf:"bytes,2,opt,name=hydratedTitleText,oneof"` } -// Deprecated: Use PeerDataOperationRequestMessage_HistorySyncOnDemandRequest.ProtoReflect.Descriptor instead. -func (*PeerDataOperationRequestMessage_HistorySyncOnDemandRequest) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{72, 2} +type TemplateMessage_HydratedFourRowTemplate_ImageMessage struct { + ImageMessage *ImageMessage `protobuf:"bytes,3,opt,name=imageMessage,oneof"` } -func (x *PeerDataOperationRequestMessage_HistorySyncOnDemandRequest) GetChatJID() string { - if x != nil && x.ChatJID != nil { - return *x.ChatJID - } - return "" +type TemplateMessage_HydratedFourRowTemplate_VideoMessage struct { + VideoMessage *VideoMessage `protobuf:"bytes,4,opt,name=videoMessage,oneof"` } -func (x *PeerDataOperationRequestMessage_HistorySyncOnDemandRequest) GetOldestMsgID() string { - if x != nil && x.OldestMsgID != nil { - return *x.OldestMsgID - } - return "" +type TemplateMessage_HydratedFourRowTemplate_LocationMessage struct { + LocationMessage *LocationMessage `protobuf:"bytes,5,opt,name=locationMessage,oneof"` } -func (x *PeerDataOperationRequestMessage_HistorySyncOnDemandRequest) GetOldestMsgFromMe() bool { - if x != nil && x.OldestMsgFromMe != nil { - return *x.OldestMsgFromMe - } - return false +func (*TemplateMessage_HydratedFourRowTemplate_DocumentMessage) isTemplateMessage_HydratedFourRowTemplate_Title() { } -func (x *PeerDataOperationRequestMessage_HistorySyncOnDemandRequest) GetOnDemandMsgCount() int32 { - if x != nil && x.OnDemandMsgCount != nil { - return *x.OnDemandMsgCount - } - return 0 +func (*TemplateMessage_HydratedFourRowTemplate_HydratedTitleText) isTemplateMessage_HydratedFourRowTemplate_Title() { } -func (x *PeerDataOperationRequestMessage_HistorySyncOnDemandRequest) GetOldestMsgTimestampMS() int64 { - if x != nil && x.OldestMsgTimestampMS != nil { - return *x.OldestMsgTimestampMS - } - return 0 +func (*TemplateMessage_HydratedFourRowTemplate_ImageMessage) isTemplateMessage_HydratedFourRowTemplate_Title() { } -type PeerDataOperationRequestMessage_RequestUrlPreview struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +func (*TemplateMessage_HydratedFourRowTemplate_VideoMessage) isTemplateMessage_HydratedFourRowTemplate_Title() { +} - URL *string `protobuf:"bytes,1,opt,name=URL" json:"URL,omitempty"` - IncludeHqThumbnail *bool `protobuf:"varint,2,opt,name=includeHqThumbnail" json:"includeHqThumbnail,omitempty"` +func (*TemplateMessage_HydratedFourRowTemplate_LocationMessage) isTemplateMessage_HydratedFourRowTemplate_Title() { } -func (x *PeerDataOperationRequestMessage_RequestUrlPreview) Reset() { - *x = PeerDataOperationRequestMessage_RequestUrlPreview{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[161] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } +type TemplateMessage_FourRowTemplate struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Types that are valid to be assigned to Title: + // + // *TemplateMessage_FourRowTemplate_DocumentMessage + // *TemplateMessage_FourRowTemplate_HighlyStructuredMessage + // *TemplateMessage_FourRowTemplate_ImageMessage + // *TemplateMessage_FourRowTemplate_VideoMessage + // *TemplateMessage_FourRowTemplate_LocationMessage + Title isTemplateMessage_FourRowTemplate_Title `protobuf_oneof:"title"` + Content *HighlyStructuredMessage `protobuf:"bytes,6,opt,name=content" json:"content,omitempty"` + Footer *HighlyStructuredMessage `protobuf:"bytes,7,opt,name=footer" json:"footer,omitempty"` + Buttons []*TemplateButton `protobuf:"bytes,8,rep,name=buttons" json:"buttons,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } -func (x *PeerDataOperationRequestMessage_RequestUrlPreview) String() string { +func (x *TemplateMessage_FourRowTemplate) Reset() { + *x = TemplateMessage_FourRowTemplate{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[193] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *TemplateMessage_FourRowTemplate) String() string { return protoimpl.X.MessageStringOf(x) } -func (*PeerDataOperationRequestMessage_RequestUrlPreview) ProtoMessage() {} +func (*TemplateMessage_FourRowTemplate) ProtoMessage() {} -func (x *PeerDataOperationRequestMessage_RequestUrlPreview) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[161] - if protoimpl.UnsafeEnabled && x != nil { +func (x *TemplateMessage_FourRowTemplate) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[193] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -17585,88 +20819,132 @@ func (x *PeerDataOperationRequestMessage_RequestUrlPreview) ProtoReflect() proto return mi.MessageOf(x) } -// Deprecated: Use PeerDataOperationRequestMessage_RequestUrlPreview.ProtoReflect.Descriptor instead. -func (*PeerDataOperationRequestMessage_RequestUrlPreview) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{72, 3} +// Deprecated: Use TemplateMessage_FourRowTemplate.ProtoReflect.Descriptor instead. +func (*TemplateMessage_FourRowTemplate) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{70, 1} } -func (x *PeerDataOperationRequestMessage_RequestUrlPreview) GetURL() string { - if x != nil && x.URL != nil { - return *x.URL +func (x *TemplateMessage_FourRowTemplate) GetTitle() isTemplateMessage_FourRowTemplate_Title { + if x != nil { + return x.Title } - return "" + return nil } -func (x *PeerDataOperationRequestMessage_RequestUrlPreview) GetIncludeHqThumbnail() bool { - if x != nil && x.IncludeHqThumbnail != nil { - return *x.IncludeHqThumbnail +func (x *TemplateMessage_FourRowTemplate) GetDocumentMessage() *DocumentMessage { + if x != nil { + if x, ok := x.Title.(*TemplateMessage_FourRowTemplate_DocumentMessage); ok { + return x.DocumentMessage + } } - return false + return nil } -type PeerDataOperationRequestMessage_RequestStickerReupload struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +func (x *TemplateMessage_FourRowTemplate) GetHighlyStructuredMessage() *HighlyStructuredMessage { + if x != nil { + if x, ok := x.Title.(*TemplateMessage_FourRowTemplate_HighlyStructuredMessage); ok { + return x.HighlyStructuredMessage + } + } + return nil +} - FileSHA256 *string `protobuf:"bytes,1,opt,name=fileSHA256" json:"fileSHA256,omitempty"` +func (x *TemplateMessage_FourRowTemplate) GetImageMessage() *ImageMessage { + if x != nil { + if x, ok := x.Title.(*TemplateMessage_FourRowTemplate_ImageMessage); ok { + return x.ImageMessage + } + } + return nil } -func (x *PeerDataOperationRequestMessage_RequestStickerReupload) Reset() { - *x = PeerDataOperationRequestMessage_RequestStickerReupload{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[162] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) +func (x *TemplateMessage_FourRowTemplate) GetVideoMessage() *VideoMessage { + if x != nil { + if x, ok := x.Title.(*TemplateMessage_FourRowTemplate_VideoMessage); ok { + return x.VideoMessage + } } + return nil } -func (x *PeerDataOperationRequestMessage_RequestStickerReupload) String() string { - return protoimpl.X.MessageStringOf(x) +func (x *TemplateMessage_FourRowTemplate) GetLocationMessage() *LocationMessage { + if x != nil { + if x, ok := x.Title.(*TemplateMessage_FourRowTemplate_LocationMessage); ok { + return x.LocationMessage + } + } + return nil } -func (*PeerDataOperationRequestMessage_RequestStickerReupload) ProtoMessage() {} +func (x *TemplateMessage_FourRowTemplate) GetContent() *HighlyStructuredMessage { + if x != nil { + return x.Content + } + return nil +} -func (x *PeerDataOperationRequestMessage_RequestStickerReupload) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[162] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms +func (x *TemplateMessage_FourRowTemplate) GetFooter() *HighlyStructuredMessage { + if x != nil { + return x.Footer } - return mi.MessageOf(x) + return nil +} + +func (x *TemplateMessage_FourRowTemplate) GetButtons() []*TemplateButton { + if x != nil { + return x.Buttons + } + return nil +} + +type isTemplateMessage_FourRowTemplate_Title interface { + isTemplateMessage_FourRowTemplate_Title() +} + +type TemplateMessage_FourRowTemplate_DocumentMessage struct { + DocumentMessage *DocumentMessage `protobuf:"bytes,1,opt,name=documentMessage,oneof"` +} + +type TemplateMessage_FourRowTemplate_HighlyStructuredMessage struct { + HighlyStructuredMessage *HighlyStructuredMessage `protobuf:"bytes,2,opt,name=highlyStructuredMessage,oneof"` +} + +type TemplateMessage_FourRowTemplate_ImageMessage struct { + ImageMessage *ImageMessage `protobuf:"bytes,3,opt,name=imageMessage,oneof"` +} + +type TemplateMessage_FourRowTemplate_VideoMessage struct { + VideoMessage *VideoMessage `protobuf:"bytes,4,opt,name=videoMessage,oneof"` } -// Deprecated: Use PeerDataOperationRequestMessage_RequestStickerReupload.ProtoReflect.Descriptor instead. -func (*PeerDataOperationRequestMessage_RequestStickerReupload) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{72, 4} +type TemplateMessage_FourRowTemplate_LocationMessage struct { + LocationMessage *LocationMessage `protobuf:"bytes,5,opt,name=locationMessage,oneof"` } -func (x *PeerDataOperationRequestMessage_RequestStickerReupload) GetFileSHA256() string { - if x != nil && x.FileSHA256 != nil { - return *x.FileSHA256 - } - return "" +func (*TemplateMessage_FourRowTemplate_DocumentMessage) isTemplateMessage_FourRowTemplate_Title() {} + +func (*TemplateMessage_FourRowTemplate_HighlyStructuredMessage) isTemplateMessage_FourRowTemplate_Title() { } +func (*TemplateMessage_FourRowTemplate_ImageMessage) isTemplateMessage_FourRowTemplate_Title() {} + +func (*TemplateMessage_FourRowTemplate_VideoMessage) isTemplateMessage_FourRowTemplate_Title() {} + +func (*TemplateMessage_FourRowTemplate_LocationMessage) isTemplateMessage_FourRowTemplate_Title() {} + type TemplateButton_CallButton struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + DisplayText *HighlyStructuredMessage `protobuf:"bytes,1,opt,name=displayText" json:"displayText,omitempty"` + PhoneNumber *HighlyStructuredMessage `protobuf:"bytes,2,opt,name=phoneNumber" json:"phoneNumber,omitempty"` unknownFields protoimpl.UnknownFields - - DisplayText *HighlyStructuredMessage `protobuf:"bytes,1,opt,name=displayText" json:"displayText,omitempty"` - PhoneNumber *HighlyStructuredMessage `protobuf:"bytes,2,opt,name=phoneNumber" json:"phoneNumber,omitempty"` + sizeCache protoimpl.SizeCache } func (x *TemplateButton_CallButton) Reset() { *x = TemplateButton_CallButton{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[163] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[194] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *TemplateButton_CallButton) String() string { @@ -17676,8 +20954,8 @@ func (x *TemplateButton_CallButton) String() string { func (*TemplateButton_CallButton) ProtoMessage() {} func (x *TemplateButton_CallButton) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[163] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[194] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -17689,7 +20967,7 @@ func (x *TemplateButton_CallButton) ProtoReflect() protoreflect.Message { // Deprecated: Use TemplateButton_CallButton.ProtoReflect.Descriptor instead. func (*TemplateButton_CallButton) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{100, 0} + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{109, 0} } func (x *TemplateButton_CallButton) GetDisplayText() *HighlyStructuredMessage { @@ -17707,21 +20985,18 @@ func (x *TemplateButton_CallButton) GetPhoneNumber() *HighlyStructuredMessage { } type TemplateButton_URLButton struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + DisplayText *HighlyStructuredMessage `protobuf:"bytes,1,opt,name=displayText" json:"displayText,omitempty"` + URL *HighlyStructuredMessage `protobuf:"bytes,2,opt,name=URL" json:"URL,omitempty"` unknownFields protoimpl.UnknownFields - - DisplayText *HighlyStructuredMessage `protobuf:"bytes,1,opt,name=displayText" json:"displayText,omitempty"` - URL *HighlyStructuredMessage `protobuf:"bytes,2,opt,name=URL" json:"URL,omitempty"` + sizeCache protoimpl.SizeCache } func (x *TemplateButton_URLButton) Reset() { *x = TemplateButton_URLButton{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[164] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[195] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *TemplateButton_URLButton) String() string { @@ -17731,8 +21006,8 @@ func (x *TemplateButton_URLButton) String() string { func (*TemplateButton_URLButton) ProtoMessage() {} func (x *TemplateButton_URLButton) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[164] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[195] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -17744,7 +21019,7 @@ func (x *TemplateButton_URLButton) ProtoReflect() protoreflect.Message { // Deprecated: Use TemplateButton_URLButton.ProtoReflect.Descriptor instead. func (*TemplateButton_URLButton) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{100, 1} + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{109, 1} } func (x *TemplateButton_URLButton) GetDisplayText() *HighlyStructuredMessage { @@ -17762,21 +21037,18 @@ func (x *TemplateButton_URLButton) GetURL() *HighlyStructuredMessage { } type TemplateButton_QuickReplyButton struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + DisplayText *HighlyStructuredMessage `protobuf:"bytes,1,opt,name=displayText" json:"displayText,omitempty"` + ID *string `protobuf:"bytes,2,opt,name=ID" json:"ID,omitempty"` unknownFields protoimpl.UnknownFields - - DisplayText *HighlyStructuredMessage `protobuf:"bytes,1,opt,name=displayText" json:"displayText,omitempty"` - ID *string `protobuf:"bytes,2,opt,name=ID" json:"ID,omitempty"` + sizeCache protoimpl.SizeCache } func (x *TemplateButton_QuickReplyButton) Reset() { *x = TemplateButton_QuickReplyButton{} - if protoimpl.UnsafeEnabled { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[165] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[196] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *TemplateButton_QuickReplyButton) String() string { @@ -17786,8 +21058,8 @@ func (x *TemplateButton_QuickReplyButton) String() string { func (*TemplateButton_QuickReplyButton) ProtoMessage() {} func (x *TemplateButton_QuickReplyButton) ProtoReflect() protoreflect.Message { - mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[165] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[196] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -17799,7 +21071,7 @@ func (x *TemplateButton_QuickReplyButton) ProtoReflect() protoreflect.Message { // Deprecated: Use TemplateButton_QuickReplyButton.ProtoReflect.Descriptor instead. func (*TemplateButton_QuickReplyButton) Descriptor() ([]byte, []int) { - return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{100, 2} + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{109, 2} } func (x *TemplateButton_QuickReplyButton) GetDisplayText() *HighlyStructuredMessage { @@ -17816,601 +21088,2793 @@ func (x *TemplateButton_QuickReplyButton) GetID() string { return "" } +type UrlTrackingMap_UrlTrackingMapElement struct { + state protoimpl.MessageState `protogen:"open.v1"` + OriginalURL *string `protobuf:"bytes,1,opt,name=originalURL" json:"originalURL,omitempty"` + UnconsentedUsersURL *string `protobuf:"bytes,2,opt,name=unconsentedUsersURL" json:"unconsentedUsersURL,omitempty"` + ConsentedUsersURL *string `protobuf:"bytes,3,opt,name=consentedUsersURL" json:"consentedUsersURL,omitempty"` + CardIndex *uint32 `protobuf:"varint,4,opt,name=cardIndex" json:"cardIndex,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *UrlTrackingMap_UrlTrackingMapElement) Reset() { + *x = UrlTrackingMap_UrlTrackingMapElement{} + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[197] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *UrlTrackingMap_UrlTrackingMapElement) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UrlTrackingMap_UrlTrackingMapElement) ProtoMessage() {} + +func (x *UrlTrackingMap_UrlTrackingMapElement) ProtoReflect() protoreflect.Message { + mi := &file_waE2E_WAWebProtobufsE2E_proto_msgTypes[197] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UrlTrackingMap_UrlTrackingMapElement.ProtoReflect.Descriptor instead. +func (*UrlTrackingMap_UrlTrackingMapElement) Descriptor() ([]byte, []int) { + return file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP(), []int{116, 0} +} + +func (x *UrlTrackingMap_UrlTrackingMapElement) GetOriginalURL() string { + if x != nil && x.OriginalURL != nil { + return *x.OriginalURL + } + return "" +} + +func (x *UrlTrackingMap_UrlTrackingMapElement) GetUnconsentedUsersURL() string { + if x != nil && x.UnconsentedUsersURL != nil { + return *x.UnconsentedUsersURL + } + return "" +} + +func (x *UrlTrackingMap_UrlTrackingMapElement) GetConsentedUsersURL() string { + if x != nil && x.ConsentedUsersURL != nil { + return *x.ConsentedUsersURL + } + return "" +} + +func (x *UrlTrackingMap_UrlTrackingMapElement) GetCardIndex() uint32 { + if x != nil && x.CardIndex != nil { + return *x.CardIndex + } + return 0 +} + var File_waE2E_WAWebProtobufsE2E_proto protoreflect.FileDescriptor -//go:embed WAWebProtobufsE2E.pb.raw -var file_waE2E_WAWebProtobufsE2E_proto_rawDesc []byte +const file_waE2E_WAWebProtobufsE2E_proto_rawDesc = "" + + "\n" + + "\x1dwaE2E/WAWebProtobufsE2E.proto\x12\x11WAWebProtobufsE2E\x1a'waAICommon/WAWebProtobufsAICommon.proto\x1a\x11waAdv/WAAdv.proto\x1a#waCompanionReg/WACompanionReg.proto\x1a\x1bwaMmsRetry/WAMmsRetry.proto\x1a\x17waCommon/WACommon.proto\x1a/waStatusAttributions/WAStatusAttributions.proto\"\xdf\t\n" + + "\x12StickerPackMessage\x12$\n" + + "\rstickerPackID\x18\x01 \x01(\tR\rstickerPackID\x12\x12\n" + + "\x04name\x18\x02 \x01(\tR\x04name\x12\x1c\n" + + "\tpublisher\x18\x03 \x01(\tR\tpublisher\x12I\n" + + "\bstickers\x18\x04 \x03(\v2-.WAWebProtobufsE2E.StickerPackMessage.StickerR\bstickers\x12\x1e\n" + + "\n" + + "fileLength\x18\x05 \x01(\x04R\n" + + "fileLength\x12\x1e\n" + + "\n" + + "fileSHA256\x18\x06 \x01(\fR\n" + + "fileSHA256\x12$\n" + + "\rfileEncSHA256\x18\a \x01(\fR\rfileEncSHA256\x12\x1a\n" + + "\bmediaKey\x18\b \x01(\fR\bmediaKey\x12\x1e\n" + + "\n" + + "directPath\x18\t \x01(\tR\n" + + "directPath\x12\x18\n" + + "\acaption\x18\n" + + " \x01(\tR\acaption\x12@\n" + + "\vcontextInfo\x18\v \x01(\v2\x1e.WAWebProtobufsE2E.ContextInfoR\vcontextInfo\x12(\n" + + "\x0fpackDescription\x18\f \x01(\tR\x0fpackDescription\x12,\n" + + "\x11mediaKeyTimestamp\x18\r \x01(\x03R\x11mediaKeyTimestamp\x12*\n" + + "\x10trayIconFileName\x18\x0e \x01(\tR\x10trayIconFileName\x120\n" + + "\x13thumbnailDirectPath\x18\x0f \x01(\tR\x13thumbnailDirectPath\x12(\n" + + "\x0fthumbnailSHA256\x18\x10 \x01(\fR\x0fthumbnailSHA256\x12.\n" + + "\x12thumbnailEncSHA256\x18\x11 \x01(\fR\x12thumbnailEncSHA256\x12(\n" + + "\x0fthumbnailHeight\x18\x12 \x01(\rR\x0fthumbnailHeight\x12&\n" + + "\x0ethumbnailWidth\x18\x13 \x01(\rR\x0ethumbnailWidth\x12$\n" + + "\rimageDataHash\x18\x14 \x01(\tR\rimageDataHash\x12(\n" + + "\x0fstickerPackSize\x18\x15 \x01(\x04R\x0fstickerPackSize\x12e\n" + + "\x11stickerPackOrigin\x18\x16 \x01(\x0e27.WAWebProtobufsE2E.StickerPackMessage.StickerPackOriginR\x11stickerPackOrigin\x1a\xc5\x01\n" + + "\aSticker\x12\x1a\n" + + "\bfileName\x18\x01 \x01(\tR\bfileName\x12\x1e\n" + + "\n" + + "isAnimated\x18\x02 \x01(\bR\n" + + "isAnimated\x12\x16\n" + + "\x06emojis\x18\x03 \x03(\tR\x06emojis\x12.\n" + + "\x12accessibilityLabel\x18\x04 \x01(\tR\x12accessibilityLabel\x12\x1a\n" + + "\bisLottie\x18\x05 \x01(\bR\bisLottie\x12\x1a\n" + + "\bmimetype\x18\x06 \x01(\tR\bmimetype\"G\n" + + "\x11StickerPackOrigin\x12\x0f\n" + + "\vFIRST_PARTY\x10\x00\x12\x0f\n" + + "\vTHIRD_PARTY\x10\x01\x12\x10\n" + + "\fUSER_CREATED\x10\x02\"\x8b\x01\n" + + "\x12PlaceholderMessage\x12I\n" + + "\x04type\x18\x01 \x01(\x0e25.WAWebProtobufsE2E.PlaceholderMessage.PlaceholderTypeR\x04type\"*\n" + + "\x0fPlaceholderType\x12\x17\n" + + "\x13MASK_LINKED_DEVICES\x10\x00\"\xdd\x01\n" + + "\fBCallMessage\x12\x1c\n" + + "\tsessionID\x18\x01 \x01(\tR\tsessionID\x12G\n" + + "\tmediaType\x18\x02 \x01(\x0e2).WAWebProtobufsE2E.BCallMessage.MediaTypeR\tmediaType\x12\x1c\n" + + "\tmasterKey\x18\x03 \x01(\fR\tmasterKey\x12\x18\n" + + "\acaption\x18\x04 \x01(\tR\acaption\".\n" + + "\tMediaType\x12\v\n" + + "\aUNKNOWN\x10\x00\x12\t\n" + + "\x05AUDIO\x10\x01\x12\t\n" + + "\x05VIDEO\x10\x02\"\x8d\x05\n" + + "\x0eCallLogMessage\x12\x18\n" + + "\aisVideo\x18\x01 \x01(\bR\aisVideo\x12O\n" + + "\vcallOutcome\x18\x02 \x01(\x0e2-.WAWebProtobufsE2E.CallLogMessage.CallOutcomeR\vcallOutcome\x12\"\n" + + "\fdurationSecs\x18\x03 \x01(\x03R\fdurationSecs\x12F\n" + + "\bcallType\x18\x04 \x01(\x0e2*.WAWebProtobufsE2E.CallLogMessage.CallTypeR\bcallType\x12U\n" + + "\fparticipants\x18\x05 \x03(\v21.WAWebProtobufsE2E.CallLogMessage.CallParticipantR\fparticipants\x1at\n" + + "\x0fCallParticipant\x12\x10\n" + + "\x03JID\x18\x01 \x01(\tR\x03JID\x12O\n" + + "\vcallOutcome\x18\x02 \x01(\x0e2-.WAWebProtobufsE2E.CallLogMessage.CallOutcomeR\vcallOutcome\"\x99\x01\n" + + "\vCallOutcome\x12\r\n" + + "\tCONNECTED\x10\x00\x12\n" + + "\n" + + "\x06MISSED\x10\x01\x12\n" + + "\n" + + "\x06FAILED\x10\x02\x12\f\n" + + "\bREJECTED\x10\x03\x12\x16\n" + + "\x12ACCEPTED_ELSEWHERE\x10\x04\x12\v\n" + + "\aONGOING\x10\x05\x12\x13\n" + + "\x0fSILENCED_BY_DND\x10\x06\x12\x1b\n" + + "\x17SILENCED_UNKNOWN_CALLER\x10\a\";\n" + + "\bCallType\x12\v\n" + + "\aREGULAR\x10\x00\x12\x12\n" + + "\x0eSCHEDULED_CALL\x10\x01\x12\x0e\n" + + "\n" + + "VOICE_CHAT\x10\x02\"\xb9\x01\n" + + "\x18ScheduledCallEditMessage\x12&\n" + + "\x03key\x18\x01 \x01(\v2\x14.WACommon.MessageKeyR\x03key\x12P\n" + + "\beditType\x18\x02 \x01(\x0e24.WAWebProtobufsE2E.ScheduledCallEditMessage.EditTypeR\beditType\"#\n" + + "\bEditType\x12\v\n" + + "\aUNKNOWN\x10\x00\x12\n" + + "\n" + + "\x06CANCEL\x10\x01\"\xed\x01\n" + + "\x1cScheduledCallCreationMessage\x122\n" + + "\x14scheduledTimestampMS\x18\x01 \x01(\x03R\x14scheduledTimestampMS\x12T\n" + + "\bcallType\x18\x02 \x01(\x0e28.WAWebProtobufsE2E.ScheduledCallCreationMessage.CallTypeR\bcallType\x12\x14\n" + + "\x05title\x18\x03 \x01(\tR\x05title\"-\n" + + "\bCallType\x12\v\n" + + "\aUNKNOWN\x10\x00\x12\t\n" + + "\x05VOICE\x10\x01\x12\t\n" + + "\x05VIDEO\x10\x02\"\x80\x02\n" + + "\x14EventResponseMessage\x12U\n" + + "\bresponse\x18\x01 \x01(\x0e29.WAWebProtobufsE2E.EventResponseMessage.EventResponseTypeR\bresponse\x12 \n" + + "\vtimestampMS\x18\x02 \x01(\x03R\vtimestampMS\x12(\n" + + "\x0fextraGuestCount\x18\x03 \x01(\x05R\x0fextraGuestCount\"E\n" + + "\x11EventResponseType\x12\v\n" + + "\aUNKNOWN\x10\x00\x12\t\n" + + "\x05GOING\x10\x01\x12\r\n" + + "\tNOT_GOING\x10\x02\x12\t\n" + + "\x05MAYBE\x10\x03\"\xe4\x01\n" + + "\x10PinInChatMessage\x12&\n" + + "\x03key\x18\x01 \x01(\v2\x14.WACommon.MessageKeyR\x03key\x12<\n" + + "\x04type\x18\x02 \x01(\x0e2(.WAWebProtobufsE2E.PinInChatMessage.TypeR\x04type\x12,\n" + + "\x11senderTimestampMS\x18\x03 \x01(\x03R\x11senderTimestampMS\"<\n" + + "\x04Type\x12\x10\n" + + "\fUNKNOWN_TYPE\x10\x00\x12\x0f\n" + + "\vPIN_FOR_ALL\x10\x01\x12\x11\n" + + "\rUNPIN_FOR_ALL\x10\x02\"\xf3\x01\n" + + "\x1fStatusStickerInteractionMessage\x12&\n" + + "\x03key\x18\x01 \x01(\v2\x14.WACommon.MessageKeyR\x03key\x12\x1e\n" + + "\n" + + "stickerKey\x18\x02 \x01(\tR\n" + + "stickerKey\x12X\n" + + "\x04type\x18\x03 \x01(\x0e2D.WAWebProtobufsE2E.StatusStickerInteractionMessage.StatusStickerTypeR\x04type\".\n" + + "\x11StatusStickerType\x12\v\n" + + "\aUNKNOWN\x10\x00\x12\f\n" + + "\bREACTION\x10\x01\"\xb1\x02\n" + + "\x16ButtonsResponseMessage\x122\n" + + "\x13selectedDisplayText\x18\x02 \x01(\tH\x00R\x13selectedDisplayText\x12*\n" + + "\x10selectedButtonID\x18\x01 \x01(\tR\x10selectedButtonID\x12@\n" + + "\vcontextInfo\x18\x03 \x01(\v2\x1e.WAWebProtobufsE2E.ContextInfoR\vcontextInfo\x12B\n" + + "\x04type\x18\x04 \x01(\x0e2..WAWebProtobufsE2E.ButtonsResponseMessage.TypeR\x04type\"%\n" + + "\x04Type\x12\v\n" + + "\aUNKNOWN\x10\x00\x12\x10\n" + + "\fDISPLAY_TEXT\x10\x01B\n" + + "\n" + + "\bresponse\"\xa0\t\n" + + "\x0eButtonsMessage\x12\x14\n" + + "\x04text\x18\x01 \x01(\tH\x00R\x04text\x12N\n" + + "\x0fdocumentMessage\x18\x02 \x01(\v2\".WAWebProtobufsE2E.DocumentMessageH\x00R\x0fdocumentMessage\x12E\n" + + "\fimageMessage\x18\x03 \x01(\v2\x1f.WAWebProtobufsE2E.ImageMessageH\x00R\fimageMessage\x12E\n" + + "\fvideoMessage\x18\x04 \x01(\v2\x1f.WAWebProtobufsE2E.VideoMessageH\x00R\fvideoMessage\x12N\n" + + "\x0flocationMessage\x18\x05 \x01(\v2\".WAWebProtobufsE2E.LocationMessageH\x00R\x0flocationMessage\x12 \n" + + "\vcontentText\x18\x06 \x01(\tR\vcontentText\x12\x1e\n" + + "\n" + + "footerText\x18\a \x01(\tR\n" + + "footerText\x12@\n" + + "\vcontextInfo\x18\b \x01(\v2\x1e.WAWebProtobufsE2E.ContextInfoR\vcontextInfo\x12B\n" + + "\abuttons\x18\t \x03(\v2(.WAWebProtobufsE2E.ButtonsMessage.ButtonR\abuttons\x12L\n" + + "\n" + + "headerType\x18\n" + + " \x01(\x0e2,.WAWebProtobufsE2E.ButtonsMessage.HeaderTypeR\n" + + "headerType\x1a\xc7\x03\n" + + "\x06Button\x12\x1a\n" + + "\bbuttonID\x18\x01 \x01(\tR\bbuttonID\x12S\n" + + "\n" + + "buttonText\x18\x02 \x01(\v23.WAWebProtobufsE2E.ButtonsMessage.Button.ButtonTextR\n" + + "buttonText\x12A\n" + + "\x04type\x18\x03 \x01(\x0e2-.WAWebProtobufsE2E.ButtonsMessage.Button.TypeR\x04type\x12_\n" + + "\x0enativeFlowInfo\x18\x04 \x01(\v27.WAWebProtobufsE2E.ButtonsMessage.Button.NativeFlowInfoR\x0enativeFlowInfo\x1aD\n" + + "\x0eNativeFlowInfo\x12\x12\n" + + "\x04name\x18\x01 \x01(\tR\x04name\x12\x1e\n" + + "\n" + + "paramsJSON\x18\x02 \x01(\tR\n" + + "paramsJSON\x1a.\n" + + "\n" + + "ButtonText\x12 \n" + + "\vdisplayText\x18\x01 \x01(\tR\vdisplayText\"2\n" + + "\x04Type\x12\v\n" + + "\aUNKNOWN\x10\x00\x12\f\n" + + "\bRESPONSE\x10\x01\x12\x0f\n" + + "\vNATIVE_FLOW\x10\x02\"`\n" + + "\n" + + "HeaderType\x12\v\n" + + "\aUNKNOWN\x10\x00\x12\t\n" + + "\x05EMPTY\x10\x01\x12\b\n" + + "\x04TEXT\x10\x02\x12\f\n" + + "\bDOCUMENT\x10\x03\x12\t\n" + + "\x05IMAGE\x10\x04\x12\t\n" + + "\x05VIDEO\x10\x05\x12\f\n" + + "\bLOCATION\x10\x06B\b\n" + + "\x06header\"\xf6\x02\n" + + "\x16SecretEncryptedMessage\x12@\n" + + "\x10targetMessageKey\x18\x01 \x01(\v2\x14.WACommon.MessageKeyR\x10targetMessageKey\x12\x1e\n" + + "\n" + + "encPayload\x18\x02 \x01(\fR\n" + + "encPayload\x12\x14\n" + + "\x05encIV\x18\x03 \x01(\fR\x05encIV\x12]\n" + + "\rsecretEncType\x18\x04 \x01(\x0e27.WAWebProtobufsE2E.SecretEncryptedMessage.SecretEncTypeR\rsecretEncType\x12 \n" + + "\vremoteKeyID\x18\x05 \x01(\tR\vremoteKeyID\"c\n" + + "\rSecretEncType\x12\v\n" + + "\aUNKNOWN\x10\x00\x12\x0e\n" + + "\n" + + "EVENT_EDIT\x10\x01\x12\x10\n" + + "\fMESSAGE_EDIT\x10\x02\x12\x14\n" + + "\x10MESSAGE_SCHEDULE\x10\x03\x12\r\n" + + "\tPOLL_EDIT\x10\x04\"\x91\x03\n" + + "\x12GroupInviteMessage\x12\x1a\n" + + "\bgroupJID\x18\x01 \x01(\tR\bgroupJID\x12\x1e\n" + + "\n" + + "inviteCode\x18\x02 \x01(\tR\n" + + "inviteCode\x12*\n" + + "\x10inviteExpiration\x18\x03 \x01(\x03R\x10inviteExpiration\x12\x1c\n" + + "\tgroupName\x18\x04 \x01(\tR\tgroupName\x12$\n" + + "\rJPEGThumbnail\x18\x05 \x01(\fR\rJPEGThumbnail\x12\x18\n" + + "\acaption\x18\x06 \x01(\tR\acaption\x12@\n" + + "\vcontextInfo\x18\a \x01(\v2\x1e.WAWebProtobufsE2E.ContextInfoR\vcontextInfo\x12M\n" + + "\tgroupType\x18\b \x01(\x0e2/.WAWebProtobufsE2E.GroupInviteMessage.GroupTypeR\tgroupType\"$\n" + + "\tGroupType\x12\v\n" + + "\aDEFAULT\x10\x00\x12\n" + + "\n" + + "\x06PARENT\x10\x01\"\xd2\x04\n" + + "\x1aInteractiveResponseMessage\x12\x87\x01\n" + + "\x19nativeFlowResponseMessage\x18\x02 \x01(\v2G.WAWebProtobufsE2E.InteractiveResponseMessage.NativeFlowResponseMessageH\x00R\x19nativeFlowResponseMessage\x12F\n" + + "\x04body\x18\x01 \x01(\v22.WAWebProtobufsE2E.InteractiveResponseMessage.BodyR\x04body\x12@\n" + + "\vcontextInfo\x18\x0f \x01(\v2\x1e.WAWebProtobufsE2E.ContextInfoR\vcontextInfo\x1a\x96\x01\n" + + "\x04Body\x12\x12\n" + + "\x04text\x18\x01 \x01(\tR\x04text\x12Q\n" + + "\x06format\x18\x02 \x01(\x0e29.WAWebProtobufsE2E.InteractiveResponseMessage.Body.FormatR\x06format\"'\n" + + "\x06Format\x12\v\n" + + "\aDEFAULT\x10\x00\x12\x10\n" + + "\fEXTENSIONS_1\x10\x01\x1ai\n" + + "\x19NativeFlowResponseMessage\x12\x12\n" + + "\x04name\x18\x01 \x01(\tR\x04name\x12\x1e\n" + + "\n" + + "paramsJSON\x18\x02 \x01(\tR\n" + + "paramsJSON\x12\x18\n" + + "\aversion\x18\x03 \x01(\x05R\aversionB\x1c\n" + + "\x1ainteractiveResponseMessage\"\xfc\x14\n" + + "\x12InteractiveMessage\x12i\n" + + "\x15shopStorefrontMessage\x18\x04 \x01(\v21.WAWebProtobufsE2E.InteractiveMessage.ShopMessageH\x00R\x15shopStorefrontMessage\x12g\n" + + "\x11collectionMessage\x18\x05 \x01(\v27.WAWebProtobufsE2E.InteractiveMessage.CollectionMessageH\x00R\x11collectionMessage\x12g\n" + + "\x11nativeFlowMessage\x18\x06 \x01(\v27.WAWebProtobufsE2E.InteractiveMessage.NativeFlowMessageH\x00R\x11nativeFlowMessage\x12a\n" + + "\x0fcarouselMessage\x18\a \x01(\v25.WAWebProtobufsE2E.InteractiveMessage.CarouselMessageH\x00R\x0fcarouselMessage\x12D\n" + + "\x06header\x18\x01 \x01(\v2,.WAWebProtobufsE2E.InteractiveMessage.HeaderR\x06header\x12>\n" + + "\x04body\x18\x02 \x01(\v2*.WAWebProtobufsE2E.InteractiveMessage.BodyR\x04body\x12D\n" + + "\x06footer\x18\x03 \x01(\v2,.WAWebProtobufsE2E.InteractiveMessage.FooterR\x06footer\x12S\n" + + "\vbloksWidget\x18\b \x01(\v21.WAWebProtobufsE2E.InteractiveMessage.BloksWidgetR\vbloksWidget\x12@\n" + + "\vcontextInfo\x18\x0f \x01(\v2\x1e.WAWebProtobufsE2E.ContextInfoR\vcontextInfo\x12I\n" + + "\x0eurlTrackingMap\x18\x10 \x01(\v2!.WAWebProtobufsE2E.UrlTrackingMapR\x0eurlTrackingMap\x1a\xaf\x02\n" + + "\x0fCarouselMessage\x12;\n" + + "\x05cards\x18\x01 \x03(\v2%.WAWebProtobufsE2E.InteractiveMessageR\x05cards\x12&\n" + + "\x0emessageVersion\x18\x02 \x01(\x05R\x0emessageVersion\x12r\n" + + "\x10carouselCardType\x18\x03 \x01(\x0e2F.WAWebProtobufsE2E.InteractiveMessage.CarouselMessage.CarouselCardTypeR\x10carouselCardType\"C\n" + + "\x10CarouselCardType\x12\v\n" + + "\aUNKNOWN\x10\x00\x12\x11\n" + + "\rHSCROLL_CARDS\x10\x01\x12\x0f\n" + + "\vALBUM_IMAGE\x10\x02\x1a\xd2\x01\n" + + "\vShopMessage\x12\x0e\n" + + "\x02ID\x18\x01 \x01(\tR\x02ID\x12S\n" + + "\asurface\x18\x02 \x01(\x0e29.WAWebProtobufsE2E.InteractiveMessage.ShopMessage.SurfaceR\asurface\x12&\n" + + "\x0emessageVersion\x18\x03 \x01(\x05R\x0emessageVersion\"6\n" + + "\aSurface\x12\x13\n" + + "\x0fUNKNOWN_SURFACE\x10\x00\x12\x06\n" + + "\x02FB\x10\x01\x12\x06\n" + + "\x02IG\x10\x02\x12\x06\n" + + "\x02WA\x10\x03\x1a\xa1\x02\n" + + "\x11NativeFlowMessage\x12b\n" + + "\abuttons\x18\x01 \x03(\v2H.WAWebProtobufsE2E.InteractiveMessage.NativeFlowMessage.NativeFlowButtonR\abuttons\x12,\n" + + "\x11messageParamsJSON\x18\x02 \x01(\tR\x11messageParamsJSON\x12&\n" + + "\x0emessageVersion\x18\x03 \x01(\x05R\x0emessageVersion\x1aR\n" + + "\x10NativeFlowButton\x12\x12\n" + + "\x04name\x18\x01 \x01(\tR\x04name\x12*\n" + + "\x10buttonParamsJSON\x18\x02 \x01(\tR\x10buttonParamsJSON\x1ac\n" + + "\x11CollectionMessage\x12\x16\n" + + "\x06bizJID\x18\x01 \x01(\tR\x06bizJID\x12\x0e\n" + + "\x02ID\x18\x02 \x01(\tR\x02ID\x12&\n" + + "\x0emessageVersion\x18\x03 \x01(\x05R\x0emessageVersion\x1aI\n" + + "\vBloksWidget\x12\x12\n" + + "\x04uuid\x18\x01 \x01(\tR\x04uuid\x12\x12\n" + + "\x04data\x18\x02 \x01(\tR\x04data\x12\x12\n" + + "\x04type\x18\x03 \x01(\tR\x04type\x1a\x9c\x01\n" + + "\x06Footer\x12E\n" + + "\faudioMessage\x18\x02 \x01(\v2\x1f.WAWebProtobufsE2E.AudioMessageH\x00R\faudioMessage\x12\x12\n" + + "\x04text\x18\x01 \x01(\tR\x04text\x12.\n" + + "\x12hasMediaAttachment\x18\x03 \x01(\bR\x12hasMediaAttachmentB\a\n" + + "\x05media\x1a\x1a\n" + + "\x04Body\x12\x12\n" + + "\x04text\x18\x01 \x01(\tR\x04text\x1a\xeb\x04\n" + + "\x06Header\x12N\n" + + "\x0fdocumentMessage\x18\x03 \x01(\v2\".WAWebProtobufsE2E.DocumentMessageH\x00R\x0fdocumentMessage\x12E\n" + + "\fimageMessage\x18\x04 \x01(\v2\x1f.WAWebProtobufsE2E.ImageMessageH\x00R\fimageMessage\x12&\n" + + "\rJPEGThumbnail\x18\x06 \x01(\fH\x00R\rJPEGThumbnail\x12E\n" + + "\fvideoMessage\x18\a \x01(\v2\x1f.WAWebProtobufsE2E.VideoMessageH\x00R\fvideoMessage\x12N\n" + + "\x0flocationMessage\x18\b \x01(\v2\".WAWebProtobufsE2E.LocationMessageH\x00R\x0flocationMessage\x12K\n" + + "\x0eproductMessage\x18\t \x01(\v2!.WAWebProtobufsE2E.ProductMessageH\x00R\x0eproductMessage\x12\x14\n" + + "\x05title\x18\x01 \x01(\tR\x05title\x12\x1a\n" + + "\bsubtitle\x18\x02 \x01(\tR\bsubtitle\x12.\n" + + "\x12hasMediaAttachment\x18\x05 \x01(\bR\x12hasMediaAttachment\x12S\n" + + "\vbloksWidget\x18\n" + + " \x01(\v21.WAWebProtobufsE2E.InteractiveMessage.BloksWidgetR\vbloksWidgetB\a\n" + + "\x05mediaB\x14\n" + + "\x12interactiveMessage\"\xab\x03\n" + + "\x13ListResponseMessage\x12\x14\n" + + "\x05title\x18\x01 \x01(\tR\x05title\x12K\n" + + "\blistType\x18\x02 \x01(\x0e2/.WAWebProtobufsE2E.ListResponseMessage.ListTypeR\blistType\x12f\n" + + "\x11singleSelectReply\x18\x03 \x01(\v28.WAWebProtobufsE2E.ListResponseMessage.SingleSelectReplyR\x11singleSelectReply\x12@\n" + + "\vcontextInfo\x18\x04 \x01(\v2\x1e.WAWebProtobufsE2E.ContextInfoR\vcontextInfo\x12 \n" + + "\vdescription\x18\x05 \x01(\tR\vdescription\x1a9\n" + + "\x11SingleSelectReply\x12$\n" + + "\rselectedRowID\x18\x01 \x01(\tR\rselectedRowID\"*\n" + + "\bListType\x12\v\n" + + "\aUNKNOWN\x10\x00\x12\x11\n" + + "\rSINGLE_SELECT\x10\x01\"\xfb\b\n" + + "\vListMessage\x12\x14\n" + + "\x05title\x18\x01 \x01(\tR\x05title\x12 \n" + + "\vdescription\x18\x02 \x01(\tR\vdescription\x12\x1e\n" + + "\n" + + "buttonText\x18\x03 \x01(\tR\n" + + "buttonText\x12C\n" + + "\blistType\x18\x04 \x01(\x0e2'.WAWebProtobufsE2E.ListMessage.ListTypeR\blistType\x12B\n" + + "\bsections\x18\x05 \x03(\v2&.WAWebProtobufsE2E.ListMessage.SectionR\bsections\x12X\n" + + "\x0fproductListInfo\x18\x06 \x01(\v2..WAWebProtobufsE2E.ListMessage.ProductListInfoR\x0fproductListInfo\x12\x1e\n" + + "\n" + + "footerText\x18\a \x01(\tR\n" + + "footerText\x12@\n" + + "\vcontextInfo\x18\b \x01(\v2\x1e.WAWebProtobufsE2E.ContextInfoR\vcontextInfo\x1a\xef\x01\n" + + "\x0fProductListInfo\x12W\n" + + "\x0fproductSections\x18\x01 \x03(\v2-.WAWebProtobufsE2E.ListMessage.ProductSectionR\x0fproductSections\x12W\n" + + "\vheaderImage\x18\x02 \x01(\v25.WAWebProtobufsE2E.ListMessage.ProductListHeaderImageR\vheaderImage\x12*\n" + + "\x10businessOwnerJID\x18\x03 \x01(\tR\x10businessOwnerJID\x1a\\\n" + + "\x16ProductListHeaderImage\x12\x1c\n" + + "\tproductID\x18\x01 \x01(\tR\tproductID\x12$\n" + + "\rJPEGThumbnail\x18\x02 \x01(\fR\rJPEGThumbnail\x1aj\n" + + "\x0eProductSection\x12\x14\n" + + "\x05title\x18\x01 \x01(\tR\x05title\x12B\n" + + "\bproducts\x18\x02 \x03(\v2&.WAWebProtobufsE2E.ListMessage.ProductR\bproducts\x1a'\n" + + "\aProduct\x12\x1c\n" + + "\tproductID\x18\x01 \x01(\tR\tproductID\x1aW\n" + + "\aSection\x12\x14\n" + + "\x05title\x18\x01 \x01(\tR\x05title\x126\n" + + "\x04rows\x18\x02 \x03(\v2\".WAWebProtobufsE2E.ListMessage.RowR\x04rows\x1aS\n" + + "\x03Row\x12\x14\n" + + "\x05title\x18\x01 \x01(\tR\x05title\x12 \n" + + "\vdescription\x18\x02 \x01(\tR\vdescription\x12\x14\n" + + "\x05rowID\x18\x03 \x01(\tR\x05rowID\"<\n" + + "\bListType\x12\v\n" + + "\aUNKNOWN\x10\x00\x12\x11\n" + + "\rSINGLE_SELECT\x10\x01\x12\x10\n" + + "\fPRODUCT_LIST\x10\x02\"\xe4\x05\n" + + "\fOrderMessage\x12\x18\n" + + "\aorderID\x18\x01 \x01(\tR\aorderID\x12\x1c\n" + + "\tthumbnail\x18\x02 \x01(\fR\tthumbnail\x12\x1c\n" + + "\titemCount\x18\x03 \x01(\x05R\titemCount\x12C\n" + + "\x06status\x18\x04 \x01(\x0e2+.WAWebProtobufsE2E.OrderMessage.OrderStatusR\x06status\x12F\n" + + "\asurface\x18\x05 \x01(\x0e2,.WAWebProtobufsE2E.OrderMessage.OrderSurfaceR\asurface\x12\x18\n" + + "\amessage\x18\x06 \x01(\tR\amessage\x12\x1e\n" + + "\n" + + "orderTitle\x18\a \x01(\tR\n" + + "orderTitle\x12\x1c\n" + + "\tsellerJID\x18\b \x01(\tR\tsellerJID\x12\x14\n" + + "\x05token\x18\t \x01(\tR\x05token\x12(\n" + + "\x0ftotalAmount1000\x18\n" + + " \x01(\x03R\x0ftotalAmount1000\x12,\n" + + "\x11totalCurrencyCode\x18\v \x01(\tR\x11totalCurrencyCode\x12@\n" + + "\vcontextInfo\x18\x11 \x01(\v2\x1e.WAWebProtobufsE2E.ContextInfoR\vcontextInfo\x12&\n" + + "\x0emessageVersion\x18\f \x01(\x05R\x0emessageVersion\x12J\n" + + "\x15orderRequestMessageID\x18\r \x01(\v2\x14.WACommon.MessageKeyR\x15orderRequestMessageID\x12 \n" + + "\vcatalogType\x18\x0f \x01(\tR\vcatalogType\"\x1b\n" + + "\fOrderSurface\x12\v\n" + + "\aCATALOG\x10\x01\"6\n" + + "\vOrderStatus\x12\v\n" + + "\aINQUIRY\x10\x01\x12\f\n" + + "\bACCEPTED\x10\x02\x12\f\n" + + "\bDECLINED\x10\x03\"\x8d\x02\n" + + "\x13StatusQuotedMessage\x12R\n" + + "\x04type\x18\x01 \x01(\x0e2>.WAWebProtobufsE2E.StatusQuotedMessage.StatusQuotedMessageTypeR\x04type\x12\x12\n" + + "\x04text\x18\x02 \x01(\tR\x04text\x12\x1c\n" + + "\tthumbnail\x18\x03 \x01(\fR\tthumbnail\x12@\n" + + "\x10originalStatusID\x18\x04 \x01(\v2\x14.WACommon.MessageKeyR\x10originalStatusID\".\n" + + "\x17StatusQuotedMessageType\x12\x13\n" + + "\x0fQUESTION_ANSWER\x10\x01\"\x9f\x02\n" + + "\x14PaymentInviteMessage\x12U\n" + + "\vserviceType\x18\x01 \x01(\x0e23.WAWebProtobufsE2E.PaymentInviteMessage.ServiceTypeR\vserviceType\x12(\n" + + "\x0fexpiryTimestamp\x18\x02 \x01(\x03R\x0fexpiryTimestamp\x12,\n" + + "\x11incentiveEligible\x18\x03 \x01(\bR\x11incentiveEligible\x12\x1e\n" + + "\n" + + "referralID\x18\x04 \x01(\tR\n" + + "referralID\"8\n" + + "\vServiceType\x12\v\n" + + "\aUNKNOWN\x10\x00\x12\t\n" + + "\x05FBPAY\x10\x01\x12\b\n" + + "\x04NOVI\x10\x02\x12\a\n" + + "\x03UPI\x10\x03\"\xe0\r\n" + + "\x17HighlyStructuredMessage\x12\x1c\n" + + "\tnamespace\x18\x01 \x01(\tR\tnamespace\x12 \n" + + "\velementName\x18\x02 \x01(\tR\velementName\x12\x16\n" + + "\x06params\x18\x03 \x03(\tR\x06params\x12\x1e\n" + + "\n" + + "fallbackLg\x18\x04 \x01(\tR\n" + + "fallbackLg\x12\x1e\n" + + "\n" + + "fallbackLc\x18\x05 \x01(\tR\n" + + "fallbackLc\x12p\n" + + "\x11localizableParams\x18\x06 \x03(\v2B.WAWebProtobufsE2E.HighlyStructuredMessage.HSMLocalizableParameterR\x11localizableParams\x12(\n" + + "\x0fdeterministicLg\x18\a \x01(\tR\x0fdeterministicLg\x12(\n" + + "\x0fdeterministicLc\x18\b \x01(\tR\x0fdeterministicLc\x12D\n" + + "\vhydratedHsm\x18\t \x01(\v2\".WAWebProtobufsE2E.TemplateMessageR\vhydratedHsm\x1a\xa0\n" + + "\n" + + "\x17HSMLocalizableParameter\x12l\n" + + "\bcurrency\x18\x02 \x01(\v2N.WAWebProtobufsE2E.HighlyStructuredMessage.HSMLocalizableParameter.HSMCurrencyH\x00R\bcurrency\x12l\n" + + "\bdateTime\x18\x03 \x01(\v2N.WAWebProtobufsE2E.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTimeH\x00R\bdateTime\x12\x18\n" + + "\adefault\x18\x01 \x01(\tR\adefault\x1a\xad\a\n" + + "\vHSMDateTime\x12\x83\x01\n" + + "\tcomponent\x18\x01 \x01(\v2c.WAWebProtobufsE2E.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime.HSMDateTimeComponentH\x00R\tcomponent\x12\x83\x01\n" + + "\tunixEpoch\x18\x02 \x01(\v2c.WAWebProtobufsE2E.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime.HSMDateTimeUnixEpochH\x00R\tunixEpoch\x1a\xca\x04\n" + + "\x14HSMDateTimeComponent\x12\x8f\x01\n" + + "\tdayOfWeek\x18\x01 \x01(\x0e2q.WAWebProtobufsE2E.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime.HSMDateTimeComponent.DayOfWeekTypeR\tdayOfWeek\x12\x12\n" + + "\x04year\x18\x02 \x01(\rR\x04year\x12\x14\n" + + "\x05month\x18\x03 \x01(\rR\x05month\x12\x1e\n" + + "\n" + + "dayOfMonth\x18\x04 \x01(\rR\n" + + "dayOfMonth\x12\x12\n" + + "\x04hour\x18\x05 \x01(\rR\x04hour\x12\x16\n" + + "\x06minute\x18\x06 \x01(\rR\x06minute\x12\x8c\x01\n" + + "\bcalendar\x18\a \x01(\x0e2p.WAWebProtobufsE2E.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime.HSMDateTimeComponent.CalendarTypeR\bcalendar\".\n" + + "\fCalendarType\x12\r\n" + + "\tGREGORIAN\x10\x01\x12\x0f\n" + + "\vSOLAR_HIJRI\x10\x02\"k\n" + + "\rDayOfWeekType\x12\n" + + "\n" + + "\x06MONDAY\x10\x01\x12\v\n" + + "\aTUESDAY\x10\x02\x12\r\n" + + "\tWEDNESDAY\x10\x03\x12\f\n" + + "\bTHURSDAY\x10\x04\x12\n" + + "\n" + + "\x06FRIDAY\x10\x05\x12\f\n" + + "\bSATURDAY\x10\x06\x12\n" + + "\n" + + "\x06SUNDAY\x10\a\x1a4\n" + + "\x14HSMDateTimeUnixEpoch\x12\x1c\n" + + "\ttimestamp\x18\x01 \x01(\x03R\ttimestampB\x0f\n" + + "\rdatetimeOneof\x1aQ\n" + + "\vHSMCurrency\x12\"\n" + + "\fcurrencyCode\x18\x01 \x01(\tR\fcurrencyCode\x12\x1e\n" + + "\n" + + "amount1000\x18\x02 \x01(\x03R\n" + + "amount1000B\f\n" + + "\n" + + "paramOneof\"\xbe(\n" + + "'PeerDataOperationRequestResponseMessage\x12s\n" + + "\x1cpeerDataOperationRequestType\x18\x01 \x01(\x0e2/.WAWebProtobufsE2E.PeerDataOperationRequestTypeR\x1cpeerDataOperationRequestType\x12\x1a\n" + + "\bstanzaID\x18\x02 \x01(\tR\bstanzaID\x12\x8c\x01\n" + + "\x17peerDataOperationResult\x18\x03 \x03(\v2R.WAWebProtobufsE2E.PeerDataOperationRequestResponseMessage.PeerDataOperationResultR\x17peerDataOperationResult\x1a\xf2%\n" + + "\x17PeerDataOperationResult\x12[\n" + + "\x11mediaUploadResult\x18\x01 \x01(\x0e2-.WAMmsRetry.MediaRetryNotification.ResultTypeR\x11mediaUploadResult\x12I\n" + + "\x0estickerMessage\x18\x02 \x01(\v2!.WAWebProtobufsE2E.StickerMessageR\x0estickerMessage\x12\x98\x01\n" + + "\x13linkPreviewResponse\x18\x03 \x01(\v2f.WAWebProtobufsE2E.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.LinkPreviewResponseR\x13linkPreviewResponse\x12\xbf\x01\n" + + " placeholderMessageResendResponse\x18\x04 \x01(\v2s.WAWebProtobufsE2E.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.PlaceholderMessageResendResponseR placeholderMessageResendResponse\x12\xb5\x01\n" + + "\x1fwaffleNonceFetchRequestResponse\x18\x05 \x01(\v2k.WAWebProtobufsE2E.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.WaffleNonceFetchResponseR\x1fwaffleNonceFetchRequestResponse\x12\xd1\x01\n" + + "&fullHistorySyncOnDemandRequestResponse\x18\x06 \x01(\v2y.WAWebProtobufsE2E.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.FullHistorySyncOnDemandRequestResponseR&fullHistorySyncOnDemandRequestResponse\x12\xca\x01\n" + + "&companionMetaNonceFetchRequestResponse\x18\a \x01(\v2r.WAWebProtobufsE2E.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.CompanionMetaNonceFetchResponseR&companionMetaNonceFetchRequestResponse\x12\xc5\x01\n" + + "\"syncdSnapshotFatalRecoveryResponse\x18\b \x01(\v2u.WAWebProtobufsE2E.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.SyncDSnapshotFatalRecoveryResponseR\"syncdSnapshotFatalRecoveryResponse\x12\xe5\x01\n" + + "/companionCanonicalUserNonceFetchRequestResponse\x18\t \x01(\v2{.WAWebProtobufsE2E.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.CompanionCanonicalUserNonceFetchResponseR/companionCanonicalUserNonceFetchRequestResponse\x12\xb6\x01\n" + + "\x1dhistorySyncChunkRetryResponse\x18\n" + + " \x01(\v2p.WAWebProtobufsE2E.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.HistorySyncChunkRetryResponseR\x1dhistorySyncChunkRetryResponse\x12\xa1\x01\n" + + "\x16flowResponsesCsvBundle\x18\v \x01(\v2i.WAWebProtobufsE2E.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.FlowResponsesCsvBundleR\x16flowResponsesCsvBundle\x1a\xfa\x02\n" + + "\x16FlowResponsesCsvBundle\x12\x16\n" + + "\x06flowID\x18\x01 \x01(\tR\x06flowID\x12@\n" + + "\x1bgalaxyFlowDownloadRequestID\x18\x02 \x01(\tR\x1bgalaxyFlowDownloadRequestID\x12\x1a\n" + + "\bfileName\x18\x03 \x01(\tR\bfileName\x12\x1a\n" + + "\bmimetype\x18\x04 \x01(\tR\bmimetype\x12\x1e\n" + + "\n" + + "fileSHA256\x18\x05 \x01(\fR\n" + + "fileSHA256\x12\x1a\n" + + "\bmediaKey\x18\x06 \x01(\fR\bmediaKey\x12$\n" + + "\rfileEncSHA256\x18\a \x01(\fR\rfileEncSHA256\x12\x1e\n" + + "\n" + + "directPath\x18\b \x01(\tR\n" + + "directPath\x12,\n" + + "\x11mediaKeyTimestamp\x18\t \x01(\x03R\x11mediaKeyTimestamp\x12\x1e\n" + + "\n" + + "fileLength\x18\n" + + " \x01(\x04R\n" + + "fileLength\x1a\xd8\x02\n" + + "\x1dHistorySyncChunkRetryResponse\x12>\n" + + "\bsyncType\x18\x01 \x01(\x0e2\".WAWebProtobufsE2E.HistorySyncTypeR\bsyncType\x12\x1e\n" + + "\n" + + "chunkOrder\x18\x02 \x01(\rR\n" + + "chunkOrder\x12\x1c\n" + + "\trequestID\x18\x03 \x01(\tR\trequestID\x12\x98\x01\n" + + "\fresponseCode\x18\x04 \x01(\x0e2t.WAWebProtobufsE2E.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.HistorySyncChunkRetryResponseCodeR\fresponseCode\x12\x1e\n" + + "\n" + + "canRecover\x18\x05 \x01(\bR\n" + + "canRecover\x1ax\n" + + "\"SyncDSnapshotFatalRecoveryResponse\x12.\n" + + "\x12collectionSnapshot\x18\x01 \x01(\fR\x12collectionSnapshot\x12\"\n" + + "\fisCompressed\x18\x02 \x01(\bR\fisCompressed\x1a|\n" + + "(CompanionCanonicalUserNonceFetchResponse\x12\x14\n" + + "\x05nonce\x18\x01 \x01(\tR\x05nonce\x12\x16\n" + + "\x06waFbid\x18\x02 \x01(\tR\x06waFbid\x12\"\n" + + "\fforceRefresh\x18\x03 \x01(\bR\fforceRefresh\x1a7\n" + + "\x1fCompanionMetaNonceFetchResponse\x12\x14\n" + + "\x05nonce\x18\x01 \x01(\tR\x05nonce\x1aN\n" + + "\x18WaffleNonceFetchResponse\x12\x14\n" + + "\x05nonce\x18\x01 \x01(\tR\x05nonce\x12\x1c\n" + + "\twaEntFbid\x18\x02 \x01(\tR\twaEntFbid\x1a\xaa\x02\n" + + "&FullHistorySyncOnDemandRequestResponse\x12c\n" + + "\x0frequestMetadata\x18\x01 \x01(\v29.WAWebProtobufsE2E.FullHistorySyncOnDemandRequestMetadataR\x0frequestMetadata\x12\x9a\x01\n" + + "\fresponseCode\x18\x02 \x01(\x0e2v.WAWebProtobufsE2E.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.FullHistorySyncOnDemandResponseCodeR\fresponseCode\x1aT\n" + + " PlaceholderMessageResendResponse\x120\n" + + "\x13webMessageInfoBytes\x18\x01 \x01(\fR\x13webMessageInfoBytes\x1a\xed\a\n" + + "\x13LinkPreviewResponse\x12\x10\n" + + "\x03URL\x18\x01 \x01(\tR\x03URL\x12\x14\n" + + "\x05title\x18\x02 \x01(\tR\x05title\x12 \n" + + "\vdescription\x18\x03 \x01(\tR\vdescription\x12\x1c\n" + + "\tthumbData\x18\x04 \x01(\fR\tthumbData\x12\x1c\n" + + "\tmatchText\x18\x06 \x01(\tR\tmatchText\x12 \n" + + "\vpreviewType\x18\a \x01(\tR\vpreviewType\x12\xa9\x01\n" + + "\vhqThumbnail\x18\b \x01(\v2\x86\x01.WAWebProtobufsE2E.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.LinkPreviewResponse.LinkPreviewHighQualityThumbnailR\vhqThumbnail\x12\xac\x01\n" + + "\x0fpreviewMetadata\x18\t \x01(\v2\x81\x01.WAWebProtobufsE2E.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.LinkPreviewResponse.PaymentLinkPreviewMetadataR\x0fpreviewMetadata\x1a\xbc\x01\n" + + "\x1aPaymentLinkPreviewMetadata\x12.\n" + + "\x12isBusinessVerified\x18\x01 \x01(\bR\x12isBusinessVerified\x12\"\n" + + "\fproviderName\x18\x02 \x01(\tR\fproviderName\x12\x16\n" + + "\x06amount\x18\x03 \x01(\tR\x06amount\x12\x16\n" + + "\x06offset\x18\x04 \x01(\tR\x06offset\x12\x1a\n" + + "\bcurrency\x18\x05 \x01(\tR\bcurrency\x1a\x93\x02\n" + + "\x1fLinkPreviewHighQualityThumbnail\x12\x1e\n" + + "\n" + + "directPath\x18\x01 \x01(\tR\n" + + "directPath\x12\x1c\n" + + "\tthumbHash\x18\x02 \x01(\tR\tthumbHash\x12\"\n" + + "\fencThumbHash\x18\x03 \x01(\tR\fencThumbHash\x12\x1a\n" + + "\bmediaKey\x18\x04 \x01(\fR\bmediaKey\x120\n" + + "\x13mediaKeyTimestampMS\x18\x05 \x01(\x03R\x13mediaKeyTimestampMS\x12\x1e\n" + + "\n" + + "thumbWidth\x18\x06 \x01(\x05R\n" + + "thumbWidth\x12 \n" + + "\vthumbHeight\x18\a \x01(\x05R\vthumbHeight\"\x9e\x01\n" + + "!HistorySyncChunkRetryResponseCode\x12\x14\n" + + "\x10GENERATION_ERROR\x10\x01\x12\x12\n" + + "\x0eCHUNK_CONSUMED\x10\x02\x12\v\n" + + "\aTIMEOUT\x10\x03\x12\x15\n" + + "\x11SESSION_EXHAUSTED\x10\x04\x12\x13\n" + + "\x0fCHUNK_EXHAUSTED\x10\x05\x12\x16\n" + + "\x12DUPLICATED_REQUEST\x10\x06\"\xfe\x01\n" + + "#FullHistorySyncOnDemandResponseCode\x12\x13\n" + + "\x0fREQUEST_SUCCESS\x10\x00\x12\x18\n" + + "\x14REQUEST_TIME_EXPIRED\x10\x01\x12\x1c\n" + + "\x18DECLINED_SHARING_HISTORY\x10\x02\x12\x11\n" + + "\rGENERIC_ERROR\x10\x03\x12$\n" + + " ERROR_REQUEST_ON_NON_SMB_PRIMARY\x10\x04\x12%\n" + + "!ERROR_HOSTED_DEVICE_NOT_CONNECTED\x10\x05\x12*\n" + + "&ERROR_HOSTED_DEVICE_LOGIN_TIME_NOT_SET\x10\x06\"\x87\x18\n" + + "\x1fPeerDataOperationRequestMessage\x12s\n" + + "\x1cpeerDataOperationRequestType\x18\x01 \x01(\x0e2/.WAWebProtobufsE2E.PeerDataOperationRequestTypeR\x1cpeerDataOperationRequestType\x12\x81\x01\n" + + "\x16requestStickerReupload\x18\x02 \x03(\v2I.WAWebProtobufsE2E.PeerDataOperationRequestMessage.RequestStickerReuploadR\x16requestStickerReupload\x12r\n" + + "\x11requestURLPreview\x18\x03 \x03(\v2D.WAWebProtobufsE2E.PeerDataOperationRequestMessage.RequestUrlPreviewR\x11requestURLPreview\x12\x8d\x01\n" + + "\x1ahistorySyncOnDemandRequest\x18\x04 \x01(\v2M.WAWebProtobufsE2E.PeerDataOperationRequestMessage.HistorySyncOnDemandRequestR\x1ahistorySyncOnDemandRequest\x12\x9c\x01\n" + + "\x1fplaceholderMessageResendRequest\x18\x05 \x03(\v2R.WAWebProtobufsE2E.PeerDataOperationRequestMessage.PlaceholderMessageResendRequestR\x1fplaceholderMessageResendRequest\x12\x99\x01\n" + + "\x1efullHistorySyncOnDemandRequest\x18\x06 \x01(\v2Q.WAWebProtobufsE2E.PeerDataOperationRequestMessage.FullHistorySyncOnDemandRequestR\x1efullHistorySyncOnDemandRequest\x12\xa8\x01\n" + + "#syncdCollectionFatalRecoveryRequest\x18\a \x01(\v2V.WAWebProtobufsE2E.PeerDataOperationRequestMessage.SyncDCollectionFatalRecoveryRequestR#syncdCollectionFatalRecoveryRequest\x12\x93\x01\n" + + "\x1chistorySyncChunkRetryRequest\x18\b \x01(\v2O.WAWebProtobufsE2E.PeerDataOperationRequestMessage.HistorySyncChunkRetryRequestR\x1chistorySyncChunkRetryRequest\x12o\n" + + "\x10galaxyFlowAction\x18\t \x01(\v2C.WAWebProtobufsE2E.PeerDataOperationRequestMessage.GalaxyFlowActionR\x10galaxyFlowAction\x12\xb4\x01\n" + + "'companionCanonicalUserNonceFetchRequest\x18\n" + + " \x01(\v2Z.WAWebProtobufsE2E.PeerDataOperationRequestMessage.CompanionCanonicalUserNonceFetchRequestR'companionCanonicalUserNonceFetchRequest\x1a\xcf\x02\n" + + "\x10GalaxyFlowAction\x12l\n" + + "\x04type\x18\x01 \x01(\x0e2X.WAWebProtobufsE2E.PeerDataOperationRequestMessage.GalaxyFlowAction.GalaxyFlowActionTypeR\x04type\x12\x16\n" + + "\x06flowID\x18\x02 \x01(\tR\x06flowID\x12\x1a\n" + + "\bstanzaID\x18\x03 \x01(\tR\bstanzaID\x12@\n" + + "\x1bgalaxyFlowDownloadRequestID\x18\x04 \x01(\tR\x1bgalaxyFlowDownloadRequestID\x12\x14\n" + + "\x05agmID\x18\x05 \x01(\tR\x05agmID\"A\n" + + "\x14GalaxyFlowActionType\x12\x11\n" + + "\rNOTIFY_LAUNCH\x10\x01\x12\x16\n" + + "\x12DOWNLOAD_RESPONSES\x10\x02\x1a[\n" + + "'CompanionCanonicalUserNonceFetchRequest\x120\n" + + "\x13registrationTraceID\x18\x01 \x01(\tR\x13registrationTraceID\x1a\xda\x01\n" + + "\x1cHistorySyncChunkRetryRequest\x12>\n" + + "\bsyncType\x18\x01 \x01(\x0e2\".WAWebProtobufsE2E.HistorySyncTypeR\bsyncType\x12\x1e\n" + + "\n" + + "chunkOrder\x18\x02 \x01(\rR\n" + + "chunkOrder\x120\n" + + "\x13chunkNotificationID\x18\x03 \x01(\tR\x13chunkNotificationID\x12(\n" + + "\x0fregenerateChunk\x18\x04 \x01(\bR\x0fregenerateChunk\x1ak\n" + + "#SyncDCollectionFatalRecoveryRequest\x12&\n" + + "\x0ecollectionName\x18\x01 \x01(\tR\x0ecollectionName\x12\x1c\n" + + "\ttimestamp\x18\x02 \x01(\x03R\ttimestamp\x1aW\n" + + "\x1fPlaceholderMessageResendRequest\x124\n" + + "\n" + + "messageKey\x18\x01 \x01(\v2\x14.WACommon.MessageKeyR\n" + + "messageKey\x1a\xda\x02\n" + + "\x1eFullHistorySyncOnDemandRequest\x12c\n" + + "\x0frequestMetadata\x18\x01 \x01(\v29.WAWebProtobufsE2E.FullHistorySyncOnDemandRequestMetadataR\x0frequestMetadata\x12[\n" + + "\x11historySyncConfig\x18\x02 \x01(\v2-.WACompanionReg.DeviceProps.HistorySyncConfigR\x11historySyncConfig\x12v\n" + + "\x1dfullHistorySyncOnDemandConfig\x18\x03 \x01(\v20.WAWebProtobufsE2E.FullHistorySyncOnDemandConfigR\x1dfullHistorySyncOnDemandConfig\x1a\x82\x02\n" + + "\x1aHistorySyncOnDemandRequest\x12\x18\n" + + "\achatJID\x18\x01 \x01(\tR\achatJID\x12 \n" + + "\voldestMsgID\x18\x02 \x01(\tR\voldestMsgID\x12(\n" + + "\x0foldestMsgFromMe\x18\x03 \x01(\bR\x0foldestMsgFromMe\x12*\n" + + "\x10onDemandMsgCount\x18\x04 \x01(\x05R\x10onDemandMsgCount\x122\n" + + "\x14oldestMsgTimestampMS\x18\x05 \x01(\x03R\x14oldestMsgTimestampMS\x12\x1e\n" + + "\n" + + "accountLid\x18\x06 \x01(\tR\n" + + "accountLid\x1aU\n" + + "\x11RequestUrlPreview\x12\x10\n" + + "\x03URL\x18\x01 \x01(\tR\x03URL\x12.\n" + + "\x12includeHqThumbnail\x18\x02 \x01(\bR\x12includeHqThumbnail\x1a8\n" + + "\x16RequestStickerReupload\x12\x1e\n" + + "\n" + + "fileSHA256\x18\x01 \x01(\tR\n" + + "fileSHA256\"\xb4\x01\n" + + "\x1dRequestWelcomeMessageMetadata\x12g\n" + + "\x0elocalChatState\x18\x01 \x01(\x0e2?.WAWebProtobufsE2E.RequestWelcomeMessageMetadata.LocalChatStateR\x0elocalChatState\"*\n" + + "\x0eLocalChatState\x12\t\n" + + "\x05EMPTY\x10\x00\x12\r\n" + + "\tNON_EMPTY\x10\x01\"\x92\x18\n" + + "\x0fProtocolMessage\x12&\n" + + "\x03key\x18\x01 \x01(\v2\x14.WACommon.MessageKeyR\x03key\x12;\n" + + "\x04type\x18\x02 \x01(\x0e2'.WAWebProtobufsE2E.ProtocolMessage.TypeR\x04type\x120\n" + + "\x13ephemeralExpiration\x18\x04 \x01(\rR\x13ephemeralExpiration\x12<\n" + + "\x19ephemeralSettingTimestamp\x18\x05 \x01(\x03R\x19ephemeralSettingTimestamp\x12d\n" + + "\x17historySyncNotification\x18\x06 \x01(\v2*.WAWebProtobufsE2E.HistorySyncNotificationR\x17historySyncNotification\x12[\n" + + "\x14appStateSyncKeyShare\x18\a \x01(\v2'.WAWebProtobufsE2E.AppStateSyncKeyShareR\x14appStateSyncKeyShare\x12a\n" + + "\x16appStateSyncKeyRequest\x18\b \x01(\v2).WAWebProtobufsE2E.AppStateSyncKeyRequestR\x16appStateSyncKeyRequest\x12\x91\x01\n" + + "&initialSecurityNotificationSettingSync\x18\t \x01(\v29.WAWebProtobufsE2E.InitialSecurityNotificationSettingSyncR&initialSecurityNotificationSettingSync\x12\x85\x01\n" + + "\"appStateFatalExceptionNotification\x18\n" + + " \x01(\v25.WAWebProtobufsE2E.AppStateFatalExceptionNotificationR\"appStateFatalExceptionNotification\x12O\n" + + "\x10disappearingMode\x18\v \x01(\v2#.WAWebProtobufsE2E.DisappearingModeR\x10disappearingMode\x12@\n" + + "\reditedMessage\x18\x0e \x01(\v2\x1a.WAWebProtobufsE2E.MessageR\reditedMessage\x12 \n" + + "\vtimestampMS\x18\x0f \x01(\x03R\vtimestampMS\x12|\n" + + "\x1fpeerDataOperationRequestMessage\x18\x10 \x01(\v22.WAWebProtobufsE2E.PeerDataOperationRequestMessageR\x1fpeerDataOperationRequestMessage\x12\x94\x01\n" + + "'peerDataOperationRequestResponseMessage\x18\x11 \x01(\v2:.WAWebProtobufsE2E.PeerDataOperationRequestResponseMessageR'peerDataOperationRequestResponseMessage\x12Z\n" + + "\x12botFeedbackMessage\x18\x12 \x01(\v2*.WAWebProtobufsAICommon.BotFeedbackMessageR\x12botFeedbackMessage\x12\x1e\n" + + "\n" + + "invokerJID\x18\x13 \x01(\tR\n" + + "invokerJID\x12v\n" + + "\x1drequestWelcomeMessageMetadata\x18\x14 \x01(\v20.WAWebProtobufsE2E.RequestWelcomeMessageMetadataR\x1drequestWelcomeMessageMetadata\x12U\n" + + "\x12mediaNotifyMessage\x18\x15 \x01(\v2%.WAWebProtobufsE2E.MediaNotifyMessageR\x12mediaNotifyMessage\x12\x82\x01\n" + + "!cloudApiThreadControlNotification\x18\x16 \x01(\v24.WAWebProtobufsE2E.CloudAPIThreadControlNotificationR!cloudApiThreadControlNotification\x12y\n" + + "\x1elidMigrationMappingSyncMessage\x18\x17 \x01(\v21.WAWebProtobufsE2E.LIDMigrationMappingSyncMessageR\x1elidMigrationMappingSyncMessage\x12:\n" + + "\flimitSharing\x18\x18 \x01(\v2\x16.WACommon.LimitSharingR\flimitSharing\x12$\n" + + "\raiPsiMetadata\x18\x19 \x01(\fR\raiPsiMetadata\x12F\n" + + "\raiQueryFanout\x18\x1a \x01(\v2 .WAWebProtobufsE2E.AIQueryFanoutR\raiQueryFanout\x12@\n" + + "\vmemberLabel\x18\x1b \x01(\v2\x1e.WAWebProtobufsE2E.MemberLabelR\vmemberLabel\x12l\n" + + "\x18aiMediaCollectionMessage\x18\x1c \x01(\v20.WAWebProtobufsAICommon.AIMediaCollectionMessageR\x18aiMediaCollectionMessage\x120\n" + + "\x13afterReadDurationMS\x18\x1d \x01(\rR\x13afterReadDurationMS\"\xc6\x06\n" + + "\x04Type\x12\n" + + "\n" + + "\x06REVOKE\x10\x00\x12\x15\n" + + "\x11EPHEMERAL_SETTING\x10\x03\x12\x1b\n" + + "\x17EPHEMERAL_SYNC_RESPONSE\x10\x04\x12\x1d\n" + + "\x19HISTORY_SYNC_NOTIFICATION\x10\x05\x12\x1c\n" + + "\x18APP_STATE_SYNC_KEY_SHARE\x10\x06\x12\x1e\n" + + "\x1aAPP_STATE_SYNC_KEY_REQUEST\x10\a\x12\x1f\n" + + "\x1bMSG_FANOUT_BACKFILL_REQUEST\x10\b\x12.\n" + + "*INITIAL_SECURITY_NOTIFICATION_SETTING_SYNC\x10\t\x12*\n" + + "&APP_STATE_FATAL_EXCEPTION_NOTIFICATION\x10\n" + + "\x12\x16\n" + + "\x12SHARE_PHONE_NUMBER\x10\v\x12\x10\n" + + "\fMESSAGE_EDIT\x10\x0e\x12'\n" + + "#PEER_DATA_OPERATION_REQUEST_MESSAGE\x10\x10\x120\n" + + ",PEER_DATA_OPERATION_REQUEST_RESPONSE_MESSAGE\x10\x11\x12\x1b\n" + + "\x17REQUEST_WELCOME_MESSAGE\x10\x12\x12\x18\n" + + "\x14BOT_FEEDBACK_MESSAGE\x10\x13\x12\x18\n" + + "\x14MEDIA_NOTIFY_MESSAGE\x10\x14\x12)\n" + + "%CLOUD_API_THREAD_CONTROL_NOTIFICATION\x10\x15\x12\x1e\n" + + "\x1aLID_MIGRATION_MAPPING_SYNC\x10\x16\x12\x14\n" + + "\x10REMINDER_MESSAGE\x10\x17\x12\x1f\n" + + "\x1bBOT_MEMU_ONBOARDING_MESSAGE\x10\x18\x12\x1a\n" + + "\x16STATUS_MENTION_MESSAGE\x10\x19\x12\x1b\n" + + "\x17STOP_GENERATION_MESSAGE\x10\x1a\x12\x11\n" + + "\rLIMIT_SHARING\x10\x1b\x12\x13\n" + + "\x0fAI_PSI_METADATA\x10\x1c\x12\x13\n" + + "\x0fAI_QUERY_FANOUT\x10\x1d\x12\x1d\n" + + "\x19GROUP_MEMBER_LABEL_CHANGE\x10\x1e\x12\x1f\n" + + "\x1bAI_MEDIA_COLLECTION_MESSAGE\x10\x1f\x12\x16\n" + + "\x12MESSAGE_UNSCHEDULE\x10 \"\xc5\x05\n" + + "!CloudAPIThreadControlNotification\x12b\n" + + "\x06status\x18\x01 \x01(\x0e2J.WAWebProtobufsE2E.CloudAPIThreadControlNotification.CloudAPIThreadControlR\x06status\x12D\n" + + "\x1dsenderNotificationTimestampMS\x18\x02 \x01(\x03R\x1dsenderNotificationTimestampMS\x12 \n" + + "\vconsumerLid\x18\x03 \x01(\tR\vconsumerLid\x120\n" + + "\x13consumerPhoneNumber\x18\x04 \x01(\tR\x13consumerPhoneNumber\x12\x8f\x01\n" + + "\x13notificationContent\x18\x05 \x01(\v2].WAWebProtobufsE2E.CloudAPIThreadControlNotification.CloudAPIThreadControlNotificationContentR\x13notificationContent\x12>\n" + + "\x1ashouldSuppressNotification\x18\x06 \x01(\bR\x1ashouldSuppressNotification\x1a\x82\x01\n" + + "(CloudAPIThreadControlNotificationContent\x128\n" + + "\x17handoffNotificationText\x18\x01 \x01(\tR\x17handoffNotificationText\x12\x1c\n" + + "\textraJSON\x18\x02 \x01(\tR\textraJSON\"K\n" + + "\x15CloudAPIThreadControl\x12\v\n" + + "\aUNKNOWN\x10\x00\x12\x12\n" + + "\x0eCONTROL_PASSED\x10\x01\x12\x11\n" + + "\rCONTROL_TAKEN\x10\x02\"\xfa\v\n" + + "\fVideoMessage\x12\x10\n" + + "\x03URL\x18\x01 \x01(\tR\x03URL\x12\x1a\n" + + "\bmimetype\x18\x02 \x01(\tR\bmimetype\x12\x1e\n" + + "\n" + + "fileSHA256\x18\x03 \x01(\fR\n" + + "fileSHA256\x12\x1e\n" + + "\n" + + "fileLength\x18\x04 \x01(\x04R\n" + + "fileLength\x12\x18\n" + + "\aseconds\x18\x05 \x01(\rR\aseconds\x12\x1a\n" + + "\bmediaKey\x18\x06 \x01(\fR\bmediaKey\x12\x18\n" + + "\acaption\x18\a \x01(\tR\acaption\x12 \n" + + "\vgifPlayback\x18\b \x01(\bR\vgifPlayback\x12\x16\n" + + "\x06height\x18\t \x01(\rR\x06height\x12\x14\n" + + "\x05width\x18\n" + + " \x01(\rR\x05width\x12$\n" + + "\rfileEncSHA256\x18\v \x01(\fR\rfileEncSHA256\x12`\n" + + "\x16interactiveAnnotations\x18\f \x03(\v2(.WAWebProtobufsE2E.InteractiveAnnotationR\x16interactiveAnnotations\x12\x1e\n" + + "\n" + + "directPath\x18\r \x01(\tR\n" + + "directPath\x12,\n" + + "\x11mediaKeyTimestamp\x18\x0e \x01(\x03R\x11mediaKeyTimestamp\x12$\n" + + "\rJPEGThumbnail\x18\x10 \x01(\fR\rJPEGThumbnail\x12@\n" + + "\vcontextInfo\x18\x11 \x01(\v2\x1e.WAWebProtobufsE2E.ContextInfoR\vcontextInfo\x12*\n" + + "\x10streamingSidecar\x18\x12 \x01(\fR\x10streamingSidecar\x12S\n" + + "\x0egifAttribution\x18\x13 \x01(\x0e2+.WAWebProtobufsE2E.VideoMessage.AttributionR\x0egifAttribution\x12\x1a\n" + + "\bviewOnce\x18\x14 \x01(\bR\bviewOnce\x120\n" + + "\x13thumbnailDirectPath\x18\x15 \x01(\tR\x13thumbnailDirectPath\x12(\n" + + "\x0fthumbnailSHA256\x18\x16 \x01(\fR\x0fthumbnailSHA256\x12.\n" + + "\x12thumbnailEncSHA256\x18\x17 \x01(\fR\x12thumbnailEncSHA256\x12\x1c\n" + + "\tstaticURL\x18\x18 \x01(\tR\tstaticURL\x12J\n" + + "\vannotations\x18\x19 \x03(\v2(.WAWebProtobufsE2E.InteractiveAnnotationR\vannotations\x12.\n" + + "\x12accessibilityLabel\x18\x1a \x01(\tR\x12accessibilityLabel\x12K\n" + + "\x0fprocessedVideos\x18\x1b \x03(\v2!.WAWebProtobufsE2E.ProcessedVideoR\x0fprocessedVideos\x12X\n" + + "'externalShareFullVideoDurationInSeconds\x18\x1c \x01(\rR'externalShareFullVideoDurationInSeconds\x12H\n" + + "\x1fmotionPhotoPresentationOffsetMS\x18\x1d \x01(\x04R\x1fmotionPhotoPresentationOffsetMS\x12 \n" + + "\vmetadataURL\x18\x1e \x01(\tR\vmetadataURL\x12Y\n" + + "\x0fvideoSourceType\x18\x1f \x01(\x0e2/.WAWebProtobufsE2E.VideoMessage.VideoSourceTypeR\x0fvideoSourceType\"3\n" + + "\x0fVideoSourceType\x12\x0e\n" + + "\n" + + "USER_VIDEO\x10\x00\x12\x10\n" + + "\fAI_GENERATED\x10\x01\"8\n" + + "\vAttribution\x12\b\n" + + "\x04NONE\x10\x00\x12\t\n" + + "\x05GIPHY\x10\x01\x12\t\n" + + "\x05TENOR\x10\x02\x12\t\n" + + "\x05KLIPY\x10\x03\"\xe9\x10\n" + + "\x13ExtendedTextMessage\x12\x12\n" + + "\x04text\x18\x01 \x01(\tR\x04text\x12 \n" + + "\vmatchedText\x18\x02 \x01(\tR\vmatchedText\x12 \n" + + "\vdescription\x18\x05 \x01(\tR\vdescription\x12\x14\n" + + "\x05title\x18\x06 \x01(\tR\x05title\x12\x1a\n" + + "\btextArgb\x18\a \x01(\aR\btextArgb\x12&\n" + + "\x0ebackgroundArgb\x18\b \x01(\aR\x0ebackgroundArgb\x12C\n" + + "\x04font\x18\t \x01(\x0e2/.WAWebProtobufsE2E.ExtendedTextMessage.FontTypeR\x04font\x12T\n" + + "\vpreviewType\x18\n" + + " \x01(\x0e22.WAWebProtobufsE2E.ExtendedTextMessage.PreviewTypeR\vpreviewType\x12$\n" + + "\rJPEGThumbnail\x18\x10 \x01(\fR\rJPEGThumbnail\x12@\n" + + "\vcontextInfo\x18\x11 \x01(\v2\x1e.WAWebProtobufsE2E.ContextInfoR\vcontextInfo\x12(\n" + + "\x0fdoNotPlayInline\x18\x12 \x01(\bR\x0fdoNotPlayInline\x120\n" + + "\x13thumbnailDirectPath\x18\x13 \x01(\tR\x13thumbnailDirectPath\x12(\n" + + "\x0fthumbnailSHA256\x18\x14 \x01(\fR\x0fthumbnailSHA256\x12.\n" + + "\x12thumbnailEncSHA256\x18\x15 \x01(\fR\x12thumbnailEncSHA256\x12\x1a\n" + + "\bmediaKey\x18\x16 \x01(\fR\bmediaKey\x12,\n" + + "\x11mediaKeyTimestamp\x18\x17 \x01(\x03R\x11mediaKeyTimestamp\x12(\n" + + "\x0fthumbnailHeight\x18\x18 \x01(\rR\x0fthumbnailHeight\x12&\n" + + "\x0ethumbnailWidth\x18\x19 \x01(\rR\x0ethumbnailWidth\x12l\n" + + "\x13inviteLinkGroupType\x18\x1a \x01(\x0e2:.WAWebProtobufsE2E.ExtendedTextMessage.InviteLinkGroupTypeR\x13inviteLinkGroupType\x12F\n" + + "\x1einviteLinkParentGroupSubjectV2\x18\x1b \x01(\tR\x1einviteLinkParentGroupSubjectV2\x12J\n" + + " inviteLinkParentGroupThumbnailV2\x18\x1c \x01(\fR inviteLinkParentGroupThumbnailV2\x12p\n" + + "\x15inviteLinkGroupTypeV2\x18\x1d \x01(\x0e2:.WAWebProtobufsE2E.ExtendedTextMessage.InviteLinkGroupTypeR\x15inviteLinkGroupTypeV2\x12\x1a\n" + + "\bviewOnce\x18\x1e \x01(\bR\bviewOnce\x12 \n" + + "\vvideoHeight\x18\x1f \x01(\rR\vvideoHeight\x12\x1e\n" + + "\n" + + "videoWidth\x18 \x01(\rR\n" + + "videoWidth\x12W\n" + + "\x12faviconMMSMetadata\x18! \x01(\v2'.WAWebProtobufsE2E.MMSThumbnailMetadataR\x12faviconMMSMetadata\x12X\n" + + "\x13linkPreviewMetadata\x18\" \x01(\v2&.WAWebProtobufsE2E.LinkPreviewMetadataR\x13linkPreviewMetadata\x12X\n" + + "\x13paymentLinkMetadata\x18# \x01(\v2&.WAWebProtobufsE2E.PaymentLinkMetadataR\x13paymentLinkMetadata\x12C\n" + + "\fendCardTiles\x18$ \x03(\v2\x1f.WAWebProtobufsE2E.VideoEndCardR\fendCardTiles\x12(\n" + + "\x0fvideoContentURL\x18% \x01(\tR\x0fvideoContentURL\x12F\n" + + "\rmusicMetadata\x18& \x01(\v2 .WAWebProtobufsE2E.EmbeddedMusicR\rmusicMetadata\x12d\n" + + "\x17paymentExtendedMetadata\x18' \x01(\v2*.WAWebProtobufsE2E.PaymentExtendedMetadataR\x17paymentExtendedMetadata\"H\n" + + "\x13InviteLinkGroupType\x12\v\n" + + "\aDEFAULT\x10\x00\x12\n" + + "\n" + + "\x06PARENT\x10\x01\x12\a\n" + + "\x03SUB\x10\x02\x12\x0f\n" + + "\vDEFAULT_SUB\x10\x03\"^\n" + + "\vPreviewType\x12\b\n" + + "\x04NONE\x10\x00\x12\t\n" + + "\x05VIDEO\x10\x01\x12\x0f\n" + + "\vPLACEHOLDER\x10\x04\x12\t\n" + + "\x05IMAGE\x10\x05\x12\x11\n" + + "\rPAYMENT_LINKS\x10\x06\x12\v\n" + + "\aPROFILE\x10\a\"\xa4\x01\n" + + "\bFontType\x12\n" + + "\n" + + "\x06SYSTEM\x10\x00\x12\x0f\n" + + "\vSYSTEM_TEXT\x10\x01\x12\r\n" + + "\tFB_SCRIPT\x10\x02\x12\x0f\n" + + "\vSYSTEM_BOLD\x10\x06\x12\x19\n" + + "\x15MORNINGBREEZE_REGULAR\x10\a\x12\x15\n" + + "\x11CALISTOGA_REGULAR\x10\b\x12\x12\n" + + "\x0eEXO2_EXTRABOLD\x10\t\x12\x15\n" + + "\x11COURIERPRIME_BOLD\x10\n" + + "\"\xb8\x05\n" + + "\x13LinkPreviewMetadata\x12X\n" + + "\x13paymentLinkMetadata\x18\x01 \x01(\v2&.WAWebProtobufsE2E.PaymentLinkMetadataR\x13paymentLinkMetadata\x12@\n" + + "\vurlMetadata\x18\x02 \x01(\v2\x1e.WAWebProtobufsE2E.URLMetadataR\vurlMetadata\x12&\n" + + "\x0efbExperimentID\x18\x03 \x01(\rR\x0efbExperimentID\x12,\n" + + "\x11linkMediaDuration\x18\x04 \x01(\rR\x11linkMediaDuration\x12l\n" + + "\x13socialMediaPostType\x18\x05 \x01(\x0e2:.WAWebProtobufsE2E.LinkPreviewMetadata.SocialMediaPostTypeR\x13socialMediaPostType\x122\n" + + "\x14linkInlineVideoMuted\x18\x06 \x01(\bR\x14linkInlineVideoMuted\x12(\n" + + "\x0fvideoContentURL\x18\a \x01(\tR\x0fvideoContentURL\x12F\n" + + "\rmusicMetadata\x18\b \x01(\v2 .WAWebProtobufsE2E.EmbeddedMusicR\rmusicMetadata\x120\n" + + "\x13videoContentCaption\x18\t \x01(\tR\x13videoContentCaption\"i\n" + + "\x13SocialMediaPostType\x12\b\n" + + "\x04NONE\x10\x00\x12\b\n" + + "\x04REEL\x10\x01\x12\x0e\n" + + "\n" + + "LIVE_VIDEO\x10\x02\x12\x0e\n" + + "\n" + + "LONG_VIDEO\x10\x03\x12\x10\n" + + "\fSINGLE_IMAGE\x10\x04\x12\f\n" + + "\bCAROUSEL\x10\x05\"\xbb\x04\n" + + "\x13PaymentLinkMetadata\x12P\n" + + "\x06button\x18\x01 \x01(\v28.WAWebProtobufsE2E.PaymentLinkMetadata.PaymentLinkButtonR\x06button\x12P\n" + + "\x06header\x18\x02 \x01(\v28.WAWebProtobufsE2E.PaymentLinkMetadata.PaymentLinkHeaderR\x06header\x12V\n" + + "\bprovider\x18\x03 \x01(\v2:.WAWebProtobufsE2E.PaymentLinkMetadata.PaymentLinkProviderR\bprovider\x1a\xb9\x01\n" + + "\x11PaymentLinkHeader\x12n\n" + + "\n" + + "headerType\x18\x01 \x01(\x0e2N.WAWebProtobufsE2E.PaymentLinkMetadata.PaymentLinkHeader.PaymentLinkHeaderTypeR\n" + + "headerType\"4\n" + + "\x15PaymentLinkHeaderType\x12\x10\n" + + "\fLINK_PREVIEW\x10\x00\x12\t\n" + + "\x05ORDER\x10\x01\x1a5\n" + + "\x13PaymentLinkProvider\x12\x1e\n" + + "\n" + + "paramsJSON\x18\x01 \x01(\tR\n" + + "paramsJSON\x1a5\n" + + "\x11PaymentLinkButton\x12 \n" + + "\vdisplayText\x18\x01 \x01(\tR\vdisplayText\"\xf5\x02\n" + + "\x19StatusNotificationMessage\x12D\n" + + "\x12responseMessageKey\x18\x01 \x01(\v2\x14.WACommon.MessageKeyR\x12responseMessageKey\x12D\n" + + "\x12originalMessageKey\x18\x02 \x01(\v2\x14.WACommon.MessageKeyR\x12originalMessageKey\x12W\n" + + "\x04type\x18\x03 \x01(\x0e2C.WAWebProtobufsE2E.StatusNotificationMessage.StatusNotificationTypeR\x04type\"s\n" + + "\x16StatusNotificationType\x12\v\n" + + "\aUNKNOWN\x10\x00\x12\x14\n" + + "\x10STATUS_ADD_YOURS\x10\x01\x12\x12\n" + + "\x0eSTATUS_RESHARE\x10\x02\x12\"\n" + + "\x1eSTATUS_QUESTION_ANSWER_RESHARE\x10\x03\"\xb8\x04\n" + + "\x0eInvoiceMessage\x12\x12\n" + + "\x04note\x18\x01 \x01(\tR\x04note\x12\x14\n" + + "\x05token\x18\x02 \x01(\tR\x05token\x12X\n" + + "\x0eattachmentType\x18\x03 \x01(\x0e20.WAWebProtobufsE2E.InvoiceMessage.AttachmentTypeR\x0eattachmentType\x12.\n" + + "\x12attachmentMimetype\x18\x04 \x01(\tR\x12attachmentMimetype\x12.\n" + + "\x12attachmentMediaKey\x18\x05 \x01(\fR\x12attachmentMediaKey\x12@\n" + + "\x1battachmentMediaKeyTimestamp\x18\x06 \x01(\x03R\x1battachmentMediaKeyTimestamp\x122\n" + + "\x14attachmentFileSHA256\x18\a \x01(\fR\x14attachmentFileSHA256\x128\n" + + "\x17attachmentFileEncSHA256\x18\b \x01(\fR\x17attachmentFileEncSHA256\x122\n" + + "\x14attachmentDirectPath\x18\t \x01(\tR\x14attachmentDirectPath\x128\n" + + "\x17attachmentJPEGThumbnail\x18\n" + + " \x01(\fR\x17attachmentJPEGThumbnail\"$\n" + + "\x0eAttachmentType\x12\t\n" + + "\x05IMAGE\x10\x00\x12\a\n" + + "\x03PDF\x10\x01\"\xeb\n" + + "\n" + + "\fImageMessage\x12\x10\n" + + "\x03URL\x18\x01 \x01(\tR\x03URL\x12\x1a\n" + + "\bmimetype\x18\x02 \x01(\tR\bmimetype\x12\x18\n" + + "\acaption\x18\x03 \x01(\tR\acaption\x12\x1e\n" + + "\n" + + "fileSHA256\x18\x04 \x01(\fR\n" + + "fileSHA256\x12\x1e\n" + + "\n" + + "fileLength\x18\x05 \x01(\x04R\n" + + "fileLength\x12\x16\n" + + "\x06height\x18\x06 \x01(\rR\x06height\x12\x14\n" + + "\x05width\x18\a \x01(\rR\x05width\x12\x1a\n" + + "\bmediaKey\x18\b \x01(\fR\bmediaKey\x12$\n" + + "\rfileEncSHA256\x18\t \x01(\fR\rfileEncSHA256\x12`\n" + + "\x16interactiveAnnotations\x18\n" + + " \x03(\v2(.WAWebProtobufsE2E.InteractiveAnnotationR\x16interactiveAnnotations\x12\x1e\n" + + "\n" + + "directPath\x18\v \x01(\tR\n" + + "directPath\x12,\n" + + "\x11mediaKeyTimestamp\x18\f \x01(\x03R\x11mediaKeyTimestamp\x12$\n" + + "\rJPEGThumbnail\x18\x10 \x01(\fR\rJPEGThumbnail\x12@\n" + + "\vcontextInfo\x18\x11 \x01(\v2\x1e.WAWebProtobufsE2E.ContextInfoR\vcontextInfo\x12*\n" + + "\x10firstScanSidecar\x18\x12 \x01(\fR\x10firstScanSidecar\x12(\n" + + "\x0ffirstScanLength\x18\x13 \x01(\rR\x0ffirstScanLength\x12,\n" + + "\x11experimentGroupID\x18\x14 \x01(\rR\x11experimentGroupID\x12\"\n" + + "\fscansSidecar\x18\x15 \x01(\fR\fscansSidecar\x12 \n" + + "\vscanLengths\x18\x16 \x03(\rR\vscanLengths\x122\n" + + "\x14midQualityFileSHA256\x18\x17 \x01(\fR\x14midQualityFileSHA256\x128\n" + + "\x17midQualityFileEncSHA256\x18\x18 \x01(\fR\x17midQualityFileEncSHA256\x12\x1a\n" + + "\bviewOnce\x18\x19 \x01(\bR\bviewOnce\x120\n" + + "\x13thumbnailDirectPath\x18\x1a \x01(\tR\x13thumbnailDirectPath\x12(\n" + + "\x0fthumbnailSHA256\x18\x1b \x01(\fR\x0fthumbnailSHA256\x12.\n" + + "\x12thumbnailEncSHA256\x18\x1c \x01(\fR\x12thumbnailEncSHA256\x12\x1c\n" + + "\tstaticURL\x18\x1d \x01(\tR\tstaticURL\x12J\n" + + "\vannotations\x18\x1e \x03(\v2(.WAWebProtobufsE2E.InteractiveAnnotationR\vannotations\x12Y\n" + + "\x0fimageSourceType\x18\x1f \x01(\x0e2/.WAWebProtobufsE2E.ImageMessage.ImageSourceTypeR\x0fimageSourceType\x12.\n" + + "\x12accessibilityLabel\x18 \x01(\tR\x12accessibilityLabel\x12\x14\n" + + "\x05qrURL\x18\" \x01(\tR\x05qrURL\"`\n" + + "\x0fImageSourceType\x12\x0e\n" + + "\n" + + "USER_IMAGE\x10\x00\x12\x10\n" + + "\fAI_GENERATED\x10\x01\x12\x0f\n" + + "\vAI_MODIFIED\x10\x02\x12\x1a\n" + + "\x16RASTERIZED_TEXT_STATUS\x10\x03\"\xdc<\n" + + "\vContextInfo\x12\x1a\n" + + "\bstanzaID\x18\x01 \x01(\tR\bstanzaID\x12 \n" + + "\vparticipant\x18\x02 \x01(\tR\vparticipant\x12@\n" + + "\rquotedMessage\x18\x03 \x01(\v2\x1a.WAWebProtobufsE2E.MessageR\rquotedMessage\x12\x1c\n" + + "\tremoteJID\x18\x04 \x01(\tR\tremoteJID\x12\"\n" + + "\fmentionedJID\x18\x0f \x03(\tR\fmentionedJID\x12*\n" + + "\x10conversionSource\x18\x12 \x01(\tR\x10conversionSource\x12&\n" + + "\x0econversionData\x18\x13 \x01(\fR\x0econversionData\x126\n" + + "\x16conversionDelaySeconds\x18\x14 \x01(\rR\x16conversionDelaySeconds\x12(\n" + + "\x0fforwardingScore\x18\x15 \x01(\rR\x0fforwardingScore\x12 \n" + + "\visForwarded\x18\x16 \x01(\bR\visForwarded\x12F\n" + + "\bquotedAd\x18\x17 \x01(\v2*.WAWebProtobufsE2E.ContextInfo.AdReplyInfoR\bquotedAd\x12<\n" + + "\x0eplaceholderKey\x18\x18 \x01(\v2\x14.WACommon.MessageKeyR\x0eplaceholderKey\x12\x1e\n" + + "\n" + + "expiration\x18\x19 \x01(\rR\n" + + "expiration\x12<\n" + + "\x19ephemeralSettingTimestamp\x18\x1a \x01(\x03R\x19ephemeralSettingTimestamp\x124\n" + + "\x15ephemeralSharedSecret\x18\x1b \x01(\fR\x15ephemeralSharedSecret\x12\\\n" + + "\x0fexternalAdReply\x18\x1c \x01(\v22.WAWebProtobufsE2E.ContextInfo.ExternalAdReplyInfoR\x0fexternalAdReply\x12>\n" + + "\x1aentryPointConversionSource\x18\x1d \x01(\tR\x1aentryPointConversionSource\x128\n" + + "\x17entryPointConversionApp\x18\x1e \x01(\tR\x17entryPointConversionApp\x12J\n" + + " entryPointConversionDelaySeconds\x18\x1f \x01(\rR entryPointConversionDelaySeconds\x12O\n" + + "\x10disappearingMode\x18 \x01(\v2#.WAWebProtobufsE2E.DisappearingModeR\x10disappearingMode\x12=\n" + + "\n" + + "actionLink\x18! \x01(\v2\x1d.WAWebProtobufsE2E.ActionLinkR\n" + + "actionLink\x12\"\n" + + "\fgroupSubject\x18\" \x01(\tR\fgroupSubject\x12&\n" + + "\x0eparentGroupJID\x18# \x01(\tR\x0eparentGroupJID\x12(\n" + + "\x0ftrustBannerType\x18% \x01(\tR\x0ftrustBannerType\x12,\n" + + "\x11trustBannerAction\x18& \x01(\rR\x11trustBannerAction\x12\x1c\n" + + "\tisSampled\x18' \x01(\bR\tisSampled\x12E\n" + + "\rgroupMentions\x18( \x03(\v2\x1f.WAWebProtobufsE2E.GroupMentionR\rgroupMentions\x128\n" + + "\x03utm\x18) \x01(\v2&.WAWebProtobufsE2E.ContextInfo.UTMInfoR\x03utm\x12\x85\x01\n" + + "\x1eforwardedNewsletterMessageInfo\x18+ \x01(\v2=.WAWebProtobufsE2E.ContextInfo.ForwardedNewsletterMessageInfoR\x1eforwardedNewsletterMessageInfo\x12y\n" + + "\x1abusinessMessageForwardInfo\x18, \x01(\v29.WAWebProtobufsE2E.ContextInfo.BusinessMessageForwardInfoR\x1abusinessMessageForwardInfo\x120\n" + + "\x13smbClientCampaignID\x18- \x01(\tR\x13smbClientCampaignID\x120\n" + + "\x13smbServerCampaignID\x18. \x01(\tR\x13smbServerCampaignID\x12a\n" + + "\x12dataSharingContext\x18/ \x01(\v21.WAWebProtobufsE2E.ContextInfo.DataSharingContextR\x12dataSharingContext\x128\n" + + "\x17alwaysShowAdAttribution\x180 \x01(\bR\x17alwaysShowAdAttribution\x12g\n" + + "\x14featureEligibilities\x181 \x01(\v23.WAWebProtobufsE2E.ContextInfo.FeatureEligibilitiesR\x14featureEligibilities\x12N\n" + + "\"entryPointConversionExternalSource\x182 \x01(\tR\"entryPointConversionExternalSource\x12N\n" + + "\"entryPointConversionExternalMedium\x183 \x01(\tR\"entryPointConversionExternalMedium\x12 \n" + + "\vctwaSignals\x186 \x01(\tR\vctwaSignals\x12 \n" + + "\vctwaPayload\x187 \x01(\fR\vctwaPayload\x12o\n" + + "\x19forwardedAiBotMessageInfo\x188 \x01(\v21.WAWebProtobufsAICommon.ForwardedAIBotMessageInfoR\x19forwardedAiBotMessageInfo\x12j\n" + + "\x15statusAttributionType\x189 \x01(\x0e24.WAWebProtobufsE2E.ContextInfo.StatusAttributionTypeR\x15statusAttributionType\x12I\n" + + "\x0eurlTrackingMap\x18: \x01(\v2!.WAWebProtobufsE2E.UrlTrackingMapR\x0eurlTrackingMap\x12X\n" + + "\x0fpairedMediaType\x18; \x01(\x0e2..WAWebProtobufsE2E.ContextInfo.PairedMediaTypeR\x0fpairedMediaType\x12&\n" + + "\x0erankingVersion\x18< \x01(\rR\x0erankingVersion\x12@\n" + + "\vmemberLabel\x18> \x01(\v2\x1e.WAWebProtobufsE2E.MemberLabelR\vmemberLabel\x12\x1e\n" + + "\n" + + "isQuestion\x18? \x01(\bR\n" + + "isQuestion\x12[\n" + + "\x10statusSourceType\x18@ \x01(\x0e2/.WAWebProtobufsE2E.ContextInfo.StatusSourceTypeR\x10statusSourceType\x12W\n" + + "\x12statusAttributions\x18A \x03(\v2'.WAStatusAttributions.StatusAttributionR\x12statusAttributions\x12$\n" + + "\risGroupStatus\x18B \x01(\bR\risGroupStatus\x12R\n" + + "\rforwardOrigin\x18C \x01(\x0e2,.WAWebProtobufsE2E.ContextInfo.ForwardOriginR\rforwardOrigin\x12y\n" + + "\x1aquestionReplyQuotedMessage\x18D \x01(\v29.WAWebProtobufsE2E.ContextInfo.QuestionReplyQuotedMessageR\x1aquestionReplyQuotedMessage\x12m\n" + + "\x16statusAudienceMetadata\x18E \x01(\v25.WAWebProtobufsE2E.ContextInfo.StatusAudienceMetadataR\x16statusAudienceMetadata\x12&\n" + + "\x0enonJIDMentions\x18F \x01(\rR\x0enonJIDMentions\x12I\n" + + "\n" + + "quotedType\x18G \x01(\x0e2).WAWebProtobufsE2E.ContextInfo.QuotedTypeR\n" + + "quotedType\x12c\n" + + "\x15botMessageSharingInfo\x18H \x01(\v2-.WAWebProtobufsAICommon.BotMessageSharingInfoR\x15botMessageSharingInfo\x12\x1c\n" + + "\tisSpoiler\x18I \x01(\bR\tisSpoiler\x12L\n" + + "\x0fmediaDomainInfo\x18J \x01(\v2\".WAWebProtobufsE2E.MediaDomainInfoR\x0fmediaDomainInfo\x12s\n" + + "\x18partiallySelectedContent\x18K \x01(\v27.WAWebProtobufsE2E.ContextInfo.PartiallySelectedContentR\x18partiallySelectedContent\x1a\xea\x01\n" + + "\x16StatusAudienceMetadata\x12f\n" + + "\faudienceType\x18\x01 \x01(\x0e2B.WAWebProtobufsE2E.ContextInfo.StatusAudienceMetadata.AudienceTypeR\faudienceType\x12\x1a\n" + + "\blistName\x18\x02 \x01(\tR\blistName\x12\x1c\n" + + "\tlistEmoji\x18\x03 \x01(\tR\tlistEmoji\".\n" + + "\fAudienceType\x12\v\n" + + "\aUNKNOWN\x10\x00\x12\x11\n" + + "\rCLOSE_FRIENDS\x10\x01\x1a\xb8\x04\n" + + "\x12DataSharingContext\x12*\n" + + "\x10showMmDisclosure\x18\x01 \x01(\bR\x10showMmDisclosure\x12D\n" + + "\x1dencryptedSignalTokenConsented\x18\x02 \x01(\tR\x1dencryptedSignalTokenConsented\x12\\\n" + + "\n" + + "parameters\x18\x03 \x03(\v2<.WAWebProtobufsE2E.ContextInfo.DataSharingContext.ParametersR\n" + + "parameters\x12*\n" + + "\x10dataSharingFlags\x18\x04 \x01(\x05R\x10dataSharingFlags\x1a\xd0\x01\n" + + "\n" + + "Parameters\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12\x1e\n" + + "\n" + + "stringData\x18\x02 \x01(\tR\n" + + "stringData\x12\x18\n" + + "\aintData\x18\x03 \x01(\x03R\aintData\x12\x1c\n" + + "\tfloatData\x18\x04 \x01(\x02R\tfloatData\x12X\n" + + "\bcontents\x18\x05 \x01(\v2<.WAWebProtobufsE2E.ContextInfo.DataSharingContext.ParametersR\bcontents\"S\n" + + "\x10DataSharingFlags\x12\x1f\n" + + "\x1bSHOW_MM_DISCLOSURE_ON_CLICK\x10\x01\x12\x1e\n" + + "\x1aSHOW_MM_DISCLOSURE_ON_READ\x10\x02\x1a\x90\x03\n" + + "\x1eForwardedNewsletterMessageInfo\x12$\n" + + "\rnewsletterJID\x18\x01 \x01(\tR\rnewsletterJID\x12(\n" + + "\x0fserverMessageID\x18\x02 \x01(\x05R\x0fserverMessageID\x12&\n" + + "\x0enewsletterName\x18\x03 \x01(\tR\x0enewsletterName\x12k\n" + + "\vcontentType\x18\x04 \x01(\x0e2I.WAWebProtobufsE2E.ContextInfo.ForwardedNewsletterMessageInfo.ContentTypeR\vcontentType\x12,\n" + + "\x11accessibilityText\x18\x05 \x01(\tR\x11accessibilityText\x12 \n" + + "\vprofileName\x18\x06 \x01(\tR\vprofileName\"9\n" + + "\vContentType\x12\n" + + "\n" + + "\x06UPDATE\x10\x01\x12\x0f\n" + + "\vUPDATE_CARD\x10\x02\x12\r\n" + + "\tLINK_CARD\x10\x03\x1a\xe1\t\n" + + "\x13ExternalAdReplyInfo\x12\x14\n" + + "\x05title\x18\x01 \x01(\tR\x05title\x12\x12\n" + + "\x04body\x18\x02 \x01(\tR\x04body\x12Z\n" + + "\tmediaType\x18\x03 \x01(\x0e2<.WAWebProtobufsE2E.ContextInfo.ExternalAdReplyInfo.MediaTypeR\tmediaType\x12\"\n" + + "\fthumbnailURL\x18\x04 \x01(\tR\fthumbnailURL\x12\x1a\n" + + "\bmediaURL\x18\x05 \x01(\tR\bmediaURL\x12\x1c\n" + + "\tthumbnail\x18\x06 \x01(\fR\tthumbnail\x12\x1e\n" + + "\n" + + "sourceType\x18\a \x01(\tR\n" + + "sourceType\x12\x1a\n" + + "\bsourceID\x18\b \x01(\tR\bsourceID\x12\x1c\n" + + "\tsourceURL\x18\t \x01(\tR\tsourceURL\x12,\n" + + "\x11containsAutoReply\x18\n" + + " \x01(\bR\x11containsAutoReply\x124\n" + + "\x15renderLargerThumbnail\x18\v \x01(\bR\x15renderLargerThumbnail\x12,\n" + + "\x11showAdAttribution\x18\f \x01(\bR\x11showAdAttribution\x12\x1a\n" + + "\bctwaClid\x18\r \x01(\tR\bctwaClid\x12\x10\n" + + "\x03ref\x18\x0e \x01(\tR\x03ref\x120\n" + + "\x13clickToWhatsappCall\x18\x0f \x01(\bR\x13clickToWhatsappCall\x12<\n" + + "\x19adContextPreviewDismissed\x18\x10 \x01(\bR\x19adContextPreviewDismissed\x12\x1c\n" + + "\tsourceApp\x18\x11 \x01(\tR\tsourceApp\x12D\n" + + "\x1dautomatedGreetingMessageShown\x18\x12 \x01(\bR\x1dautomatedGreetingMessageShown\x120\n" + + "\x13greetingMessageBody\x18\x13 \x01(\tR\x13greetingMessageBody\x12\x1e\n" + + "\n" + + "ctaPayload\x18\x14 \x01(\tR\n" + + "ctaPayload\x12\"\n" + + "\fdisableNudge\x18\x15 \x01(\bR\fdisableNudge\x12*\n" + + "\x10originalImageURL\x18\x16 \x01(\tR\x10originalImageURL\x12H\n" + + "\x1fautomatedGreetingMessageCtaType\x18\x17 \x01(\tR\x1fautomatedGreetingMessageCtaType\x12\"\n" + + "\fwtwaAdFormat\x18\x18 \x01(\bR\fwtwaAdFormat\x12Q\n" + + "\x06adType\x18\x19 \x01(\x0e29.WAWebProtobufsE2E.ContextInfo.ExternalAdReplyInfo.AdTypeR\x06adType\x12&\n" + + "\x0ewtwaWebsiteURL\x18\x1a \x01(\tR\x0ewtwaWebsiteURL\x12\"\n" + + "\fadPreviewURL\x18\x1b \x01(\tR\fadPreviewURL\"\x1c\n" + + "\x06AdType\x12\b\n" + + "\x04CTWA\x10\x00\x12\b\n" + + "\x04CAWC\x10\x01\"+\n" + + "\tMediaType\x12\b\n" + + "\x04NONE\x10\x00\x12\t\n" + + "\x05IMAGE\x10\x01\x12\t\n" + + "\x05VIDEO\x10\x02\x1a\xf6\x01\n" + + "\vAdReplyInfo\x12&\n" + + "\x0eadvertiserName\x18\x01 \x01(\tR\x0eadvertiserName\x12R\n" + + "\tmediaType\x18\x02 \x01(\x0e24.WAWebProtobufsE2E.ContextInfo.AdReplyInfo.MediaTypeR\tmediaType\x12$\n" + + "\rJPEGThumbnail\x18\x10 \x01(\fR\rJPEGThumbnail\x12\x18\n" + + "\acaption\x18\x11 \x01(\tR\acaption\"+\n" + + "\tMediaType\x12\b\n" + + "\x04NONE\x10\x00\x12\t\n" + + "\x05IMAGE\x10\x01\x12\t\n" + + "\x05VIDEO\x10\x02\x1a.\n" + + "\x18PartiallySelectedContent\x12\x12\n" + + "\x04text\x18\x01 \x01(\tR\x04text\x1a\xf6\x01\n" + + "\x14FeatureEligibilities\x12,\n" + + "\x11cannotBeReactedTo\x18\x01 \x01(\bR\x11cannotBeReactedTo\x12&\n" + + "\x0ecannotBeRanked\x18\x02 \x01(\bR\x0ecannotBeRanked\x12.\n" + + "\x12canRequestFeedback\x18\x03 \x01(\bR\x12canRequestFeedback\x12$\n" + + "\rcanBeReshared\x18\x04 \x01(\bR\rcanBeReshared\x122\n" + + "\x14canReceiveMultiReact\x18\x05 \x01(\bR\x14canReceiveMultiReact\x1a\xd0\x01\n" + + "\x1aQuestionReplyQuotedMessage\x12*\n" + + "\x10serverQuestionID\x18\x01 \x01(\x05R\x10serverQuestionID\x12B\n" + + "\x0equotedQuestion\x18\x02 \x01(\v2\x1a.WAWebProtobufsE2E.MessageR\x0equotedQuestion\x12B\n" + + "\x0equotedResponse\x18\x03 \x01(\v2\x1a.WAWebProtobufsE2E.MessageR\x0equotedResponse\x1aI\n" + + "\aUTMInfo\x12\x1c\n" + + "\tutmSource\x18\x01 \x01(\tR\tutmSource\x12 \n" + + "\vutmCampaign\x18\x02 \x01(\tR\vutmCampaign\x1aH\n" + + "\x1aBusinessMessageForwardInfo\x12*\n" + + "\x10businessOwnerJID\x18\x01 \x01(\tR\x10businessOwnerJID\"$\n" + + "\n" + + "QuotedType\x12\f\n" + + "\bEXPLICIT\x10\x00\x12\b\n" + + "\x04AUTO\x10\x01\"V\n" + + "\rForwardOrigin\x12\v\n" + + "\aUNKNOWN\x10\x00\x12\b\n" + + "\x04CHAT\x10\x01\x12\n" + + "\n" + + "\x06STATUS\x10\x02\x12\f\n" + + "\bCHANNELS\x10\x03\x12\v\n" + + "\aMETA_AI\x10\x04\x12\a\n" + + "\x03UGC\x10\x05\"\\\n" + + "\x10StatusSourceType\x12\t\n" + + "\x05IMAGE\x10\x00\x12\t\n" + + "\x05VIDEO\x10\x01\x12\a\n" + + "\x03GIF\x10\x02\x12\t\n" + + "\x05AUDIO\x10\x03\x12\b\n" + + "\x04TEXT\x10\x04\x12\x14\n" + + "\x10MUSIC_STANDALONE\x10\x05\"\xd7\x01\n" + + "\x0fPairedMediaType\x12\x14\n" + + "\x10NOT_PAIRED_MEDIA\x10\x00\x12\x13\n" + + "\x0fSD_VIDEO_PARENT\x10\x01\x12\x12\n" + + "\x0eHD_VIDEO_CHILD\x10\x02\x12\x13\n" + + "\x0fSD_IMAGE_PARENT\x10\x03\x12\x12\n" + + "\x0eHD_IMAGE_CHILD\x10\x04\x12\x17\n" + + "\x13MOTION_PHOTO_PARENT\x10\x05\x12\x16\n" + + "\x12MOTION_PHOTO_CHILD\x10\x06\x12\x15\n" + + "\x11HEVC_VIDEO_PARENT\x10\a\x12\x14\n" + + "\x10HEVC_VIDEO_CHILD\x10\b\"\x92\x01\n" + + "\x15StatusAttributionType\x12\b\n" + + "\x04NONE\x10\x00\x12\x19\n" + + "\x15RESHARED_FROM_MENTION\x10\x01\x12\x16\n" + + "\x12RESHARED_FROM_POST\x10\x02\x12!\n" + + "\x1dRESHARED_FROM_POST_MANY_TIMES\x10\x03\x12\x19\n" + + "\x15FORWARDED_FROM_STATUS\x10\x04\"\xb1\x05\n" + + "\x12MessageAssociation\x12_\n" + + "\x0fassociationType\x18\x01 \x01(\x0e25.WAWebProtobufsE2E.MessageAssociation.AssociationTypeR\x0fassociationType\x12@\n" + + "\x10parentMessageKey\x18\x02 \x01(\v2\x14.WACommon.MessageKeyR\x10parentMessageKey\x12\"\n" + + "\fmessageIndex\x18\x03 \x01(\x05R\fmessageIndex\"\xd3\x03\n" + + "\x0fAssociationType\x12\v\n" + + "\aUNKNOWN\x10\x00\x12\x0f\n" + + "\vMEDIA_ALBUM\x10\x01\x12\x0e\n" + + "\n" + + "BOT_PLUGIN\x10\x02\x12\x15\n" + + "\x11EVENT_COVER_IMAGE\x10\x03\x12\x0f\n" + + "\vSTATUS_POLL\x10\x04\x12\x18\n" + + "\x14HD_VIDEO_DUAL_UPLOAD\x10\x05\x12\x1b\n" + + "\x17STATUS_EXTERNAL_RESHARE\x10\x06\x12\x0e\n" + + "\n" + + "MEDIA_POLL\x10\a\x12\x14\n" + + "\x10STATUS_ADD_YOURS\x10\b\x12\x17\n" + + "\x13STATUS_NOTIFICATION\x10\t\x12\x18\n" + + "\x14HD_IMAGE_DUAL_UPLOAD\x10\n" + + "\x12\x16\n" + + "\x12STICKER_ANNOTATION\x10\v\x12\x10\n" + + "\fMOTION_PHOTO\x10\f\x12\x16\n" + + "\x12STATUS_LINK_ACTION\x10\r\x12\x14\n" + + "\x10VIEW_ALL_REPLIES\x10\x0e\x12\x1f\n" + + "\x1bSTATUS_ADD_YOURS_AI_IMAGINE\x10\x0f\x12\x13\n" + + "\x0fSTATUS_QUESTION\x10\x10\x12\x1b\n" + + "\x17STATUS_ADD_YOURS_DIWALI\x10\x11\x12\x13\n" + + "\x0fSTATUS_REACTION\x10\x12\x12\x1a\n" + + "\x16HEVC_VIDEO_DUAL_UPLOAD\x10\x13\"\xc2\x01\n" + + "\bThreadID\x12F\n" + + "\n" + + "threadType\x18\x01 \x01(\x0e2&.WAWebProtobufsE2E.ThreadID.ThreadTypeR\n" + + "threadType\x122\n" + + "\tthreadKey\x18\x02 \x01(\v2\x14.WACommon.MessageKeyR\tthreadKey\":\n" + + "\n" + + "ThreadType\x12\v\n" + + "\aUNKNOWN\x10\x00\x12\x10\n" + + "\fVIEW_REPLIES\x10\x01\x12\r\n" + + "\tAI_THREAD\x10\x02\"\xcb\b\n" + + "\x12MessageContextInfo\x12U\n" + + "\x12deviceListMetadata\x18\x01 \x01(\v2%.WAWebProtobufsE2E.DeviceListMetadataR\x12deviceListMetadata\x12<\n" + + "\x19deviceListMetadataVersion\x18\x02 \x01(\x05R\x19deviceListMetadataVersion\x12$\n" + + "\rmessageSecret\x18\x03 \x01(\fR\rmessageSecret\x12\"\n" + + "\fpaddingBytes\x18\x04 \x01(\fR\fpaddingBytes\x12>\n" + + "\x1amessageAddOnDurationInSecs\x18\x05 \x01(\rR\x1amessageAddOnDurationInSecs\x12*\n" + + "\x10botMessageSecret\x18\x06 \x01(\fR\x10botMessageSecret\x12E\n" + + "\vbotMetadata\x18\a \x01(\v2#.WAWebProtobufsAICommon.BotMetadataR\vbotMetadata\x124\n" + + "\x15reportingTokenVersion\x18\b \x01(\x05R\x15reportingTokenVersion\x12t\n" + + "\x16messageAddOnExpiryType\x18\t \x01(\x0e2<.WAWebProtobufsE2E.MessageContextInfo.MessageAddonExpiryTypeR\x16messageAddOnExpiryType\x12U\n" + + "\x12messageAssociation\x18\n" + + " \x01(\v2%.WAWebProtobufsE2E.MessageAssociationR\x12messageAssociation\x12*\n" + + "\x10capiCreatedGroup\x18\v \x01(\bR\x10capiCreatedGroup\x12&\n" + + "\x0esupportPayload\x18\f \x01(\tR\x0esupportPayload\x12:\n" + + "\flimitSharing\x18\r \x01(\v2\x16.WACommon.LimitSharingR\flimitSharing\x12>\n" + + "\x0elimitSharingV2\x18\x0e \x01(\v2\x16.WACommon.LimitSharingR\x0elimitSharingV2\x127\n" + + "\bthreadID\x18\x0f \x03(\v2\x1b.WAWebProtobufsE2E.ThreadIDR\bthreadID\x12X\n" + + "\x13weblinkRenderConfig\x18\x10 \x01(\x0e2&.WAWebProtobufsE2E.WebLinkRenderConfigR\x13weblinkRenderConfig\"=\n" + + "\x16MessageAddonExpiryType\x12\n" + + "\n" + + "\x06STATIC\x10\x01\x12\x17\n" + + "\x13DEPENDENT_ON_PARENT\x10\x02\"\xc0\x05\n" + + "\x15InteractiveAnnotation\x129\n" + + "\blocation\x18\x02 \x01(\v2\x1b.WAWebProtobufsE2E.LocationH\x00R\blocation\x12_\n" + + "\n" + + "newsletter\x18\x03 \x01(\v2=.WAWebProtobufsE2E.ContextInfo.ForwardedNewsletterMessageInfoH\x00R\n" + + "newsletter\x12(\n" + + "\x0eembeddedAction\x18\x06 \x01(\bH\x00R\x0eembeddedAction\x12@\n" + + "\ttapAction\x18\a \x01(\v2 .WAWebProtobufsE2E.TapLinkActionH\x00R\ttapAction\x12B\n" + + "\x0fpolygonVertices\x18\x01 \x03(\v2\x18.WAWebProtobufsE2E.PointR\x0fpolygonVertices\x126\n" + + "\x16shouldSkipConfirmation\x18\x04 \x01(\bR\x16shouldSkipConfirmation\x12L\n" + + "\x0fembeddedContent\x18\x05 \x01(\v2\".WAWebProtobufsE2E.EmbeddedContentR\x0fembeddedContent\x12_\n" + + "\x0estatusLinkType\x18\b \x01(\x0e27.WAWebProtobufsE2E.InteractiveAnnotation.StatusLinkTypeR\x0estatusLinkType\"j\n" + + "\x0eStatusLinkType\x12\x1b\n" + + "\x17RASTERIZED_LINK_PREVIEW\x10\x01\x12\x1d\n" + + "\x19RASTERIZED_LINK_TRUNCATED\x10\x02\x12\x1c\n" + + "\x18RASTERIZED_LINK_FULL_URL\x10\x03B\b\n" + + "\x06action\"\xd3\x06\n" + + "\x16HydratedTemplateButton\x12p\n" + + "\x10quickReplyButton\x18\x01 \x01(\v2B.WAWebProtobufsE2E.HydratedTemplateButton.HydratedQuickReplyButtonH\x00R\x10quickReplyButton\x12[\n" + + "\turlButton\x18\x02 \x01(\v2;.WAWebProtobufsE2E.HydratedTemplateButton.HydratedURLButtonH\x00R\turlButton\x12^\n" + + "\n" + + "callButton\x18\x03 \x01(\v2<.WAWebProtobufsE2E.HydratedTemplateButton.HydratedCallButtonH\x00R\n" + + "callButton\x12\x14\n" + + "\x05index\x18\x04 \x01(\rR\x05index\x1a\xb9\x02\n" + + "\x11HydratedURLButton\x12 \n" + + "\vdisplayText\x18\x01 \x01(\tR\vdisplayText\x12\x10\n" + + "\x03URL\x18\x02 \x01(\tR\x03URL\x12,\n" + + "\x11consentedUsersURL\x18\x03 \x01(\tR\x11consentedUsersURL\x12\x85\x01\n" + + "\x13webviewPresentation\x18\x04 \x01(\x0e2S.WAWebProtobufsE2E.HydratedTemplateButton.HydratedURLButton.WebviewPresentationTypeR\x13webviewPresentation\":\n" + + "\x17WebviewPresentationType\x12\b\n" + + "\x04FULL\x10\x01\x12\b\n" + + "\x04TALL\x10\x02\x12\v\n" + + "\aCOMPACT\x10\x03\x1aX\n" + + "\x12HydratedCallButton\x12 \n" + + "\vdisplayText\x18\x01 \x01(\tR\vdisplayText\x12 \n" + + "\vphoneNumber\x18\x02 \x01(\tR\vphoneNumber\x1aL\n" + + "\x18HydratedQuickReplyButton\x12 \n" + + "\vdisplayText\x18\x01 \x01(\tR\vdisplayText\x12\x0e\n" + + "\x02ID\x18\x02 \x01(\tR\x02IDB\x10\n" + + "\x0ehydratedButton\"\xe2\x04\n" + + "\x11PaymentBackground\x12\x0e\n" + + "\x02ID\x18\x01 \x01(\tR\x02ID\x12\x1e\n" + + "\n" + + "fileLength\x18\x02 \x01(\x04R\n" + + "fileLength\x12\x14\n" + + "\x05width\x18\x03 \x01(\rR\x05width\x12\x16\n" + + "\x06height\x18\x04 \x01(\rR\x06height\x12\x1a\n" + + "\bmimetype\x18\x05 \x01(\tR\bmimetype\x12(\n" + + "\x0fplaceholderArgb\x18\x06 \x01(\aR\x0fplaceholderArgb\x12\x1a\n" + + "\btextArgb\x18\a \x01(\aR\btextArgb\x12 \n" + + "\vsubtextArgb\x18\b \x01(\aR\vsubtextArgb\x12L\n" + + "\tmediaData\x18\t \x01(\v2..WAWebProtobufsE2E.PaymentBackground.MediaDataR\tmediaData\x12=\n" + + "\x04type\x18\n" + + " \x01(\x0e2).WAWebProtobufsE2E.PaymentBackground.TypeR\x04type\x1a\xbb\x01\n" + + "\tMediaData\x12\x1a\n" + + "\bmediaKey\x18\x01 \x01(\fR\bmediaKey\x12,\n" + + "\x11mediaKeyTimestamp\x18\x02 \x01(\x03R\x11mediaKeyTimestamp\x12\x1e\n" + + "\n" + + "fileSHA256\x18\x03 \x01(\fR\n" + + "fileSHA256\x12$\n" + + "\rfileEncSHA256\x18\x04 \x01(\fR\rfileEncSHA256\x12\x1e\n" + + "\n" + + "directPath\x18\x05 \x01(\tR\n" + + "directPath\" \n" + + "\x04Type\x12\v\n" + + "\aUNKNOWN\x10\x00\x12\v\n" + + "\aDEFAULT\x10\x01\"\xe8\x03\n" + + "\x10DisappearingMode\x12K\n" + + "\tinitiator\x18\x01 \x01(\x0e2-.WAWebProtobufsE2E.DisappearingMode.InitiatorR\tinitiator\x12E\n" + + "\atrigger\x18\x02 \x01(\x0e2+.WAWebProtobufsE2E.DisappearingMode.TriggerR\atrigger\x12.\n" + + "\x12initiatorDeviceJID\x18\x03 \x01(\tR\x12initiatorDeviceJID\x12$\n" + + "\rinitiatedByMe\x18\x04 \x01(\bR\rinitiatedByMe\"\x7f\n" + + "\aTrigger\x12\v\n" + + "\aUNKNOWN\x10\x00\x12\x10\n" + + "\fCHAT_SETTING\x10\x01\x12\x13\n" + + "\x0fACCOUNT_SETTING\x10\x02\x12\x0f\n" + + "\vBULK_CHANGE\x10\x03\x12\x1b\n" + + "\x17BIZ_SUPPORTS_FB_HOSTING\x10\x04\x12\x12\n" + + "\x0eUNKNOWN_GROUPS\x10\x05\"i\n" + + "\tInitiator\x12\x13\n" + + "\x0fCHANGED_IN_CHAT\x10\x00\x12\x13\n" + + "\x0fINITIATED_BY_ME\x10\x01\x12\x16\n" + + "\x12INITIATED_BY_OTHER\x10\x02\x12\x1a\n" + + "\x16BIZ_UPGRADE_FB_HOSTING\x10\x03\"\xe1\x02\n" + + "\x0eProcessedVideo\x12\x1e\n" + + "\n" + + "directPath\x18\x01 \x01(\tR\n" + + "directPath\x12\x1e\n" + + "\n" + + "fileSHA256\x18\x02 \x01(\fR\n" + + "fileSHA256\x12\x16\n" + + "\x06height\x18\x03 \x01(\rR\x06height\x12\x14\n" + + "\x05width\x18\x04 \x01(\rR\x05width\x12\x1e\n" + + "\n" + + "fileLength\x18\x05 \x01(\x04R\n" + + "fileLength\x12\x18\n" + + "\abitrate\x18\x06 \x01(\rR\abitrate\x12H\n" + + "\aquality\x18\a \x01(\x0e2..WAWebProtobufsE2E.ProcessedVideo.VideoQualityR\aquality\x12\"\n" + + "\fcapabilities\x18\b \x03(\tR\fcapabilities\"9\n" + + "\fVideoQuality\x12\r\n" + + "\tUNDEFINED\x10\x00\x12\a\n" + + "\x03LOW\x10\x01\x12\a\n" + + "\x03MID\x10\x02\x12\b\n" + + "\x04HIGH\x10\x03\"\xc1E\n" + + "\aMessage\x12\"\n" + + "\fconversation\x18\x01 \x01(\tR\fconversation\x12s\n" + + "\x1csenderKeyDistributionMessage\x18\x02 \x01(\v2/.WAWebProtobufsE2E.SenderKeyDistributionMessageR\x1csenderKeyDistributionMessage\x12C\n" + + "\fimageMessage\x18\x03 \x01(\v2\x1f.WAWebProtobufsE2E.ImageMessageR\fimageMessage\x12I\n" + + "\x0econtactMessage\x18\x04 \x01(\v2!.WAWebProtobufsE2E.ContactMessageR\x0econtactMessage\x12L\n" + + "\x0flocationMessage\x18\x05 \x01(\v2\".WAWebProtobufsE2E.LocationMessageR\x0flocationMessage\x12X\n" + + "\x13extendedTextMessage\x18\x06 \x01(\v2&.WAWebProtobufsE2E.ExtendedTextMessageR\x13extendedTextMessage\x12L\n" + + "\x0fdocumentMessage\x18\a \x01(\v2\".WAWebProtobufsE2E.DocumentMessageR\x0fdocumentMessage\x12C\n" + + "\faudioMessage\x18\b \x01(\v2\x1f.WAWebProtobufsE2E.AudioMessageR\faudioMessage\x12C\n" + + "\fvideoMessage\x18\t \x01(\v2\x1f.WAWebProtobufsE2E.VideoMessageR\fvideoMessage\x12+\n" + + "\x04call\x18\n" + + " \x01(\v2\x17.WAWebProtobufsE2E.CallR\x04call\x12+\n" + + "\x04chat\x18\v \x01(\v2\x17.WAWebProtobufsE2E.ChatR\x04chat\x12L\n" + + "\x0fprotocolMessage\x18\f \x01(\v2\".WAWebProtobufsE2E.ProtocolMessageR\x0fprotocolMessage\x12[\n" + + "\x14contactsArrayMessage\x18\r \x01(\v2'.WAWebProtobufsE2E.ContactsArrayMessageR\x14contactsArrayMessage\x12d\n" + + "\x17highlyStructuredMessage\x18\x0e \x01(\v2*.WAWebProtobufsE2E.HighlyStructuredMessageR\x17highlyStructuredMessage\x12\x8f\x01\n" + + "*fastRatchetKeySenderKeyDistributionMessage\x18\x0f \x01(\v2/.WAWebProtobufsE2E.SenderKeyDistributionMessageR*fastRatchetKeySenderKeyDistributionMessage\x12U\n" + + "\x12sendPaymentMessage\x18\x10 \x01(\v2%.WAWebProtobufsE2E.SendPaymentMessageR\x12sendPaymentMessage\x12X\n" + + "\x13liveLocationMessage\x18\x12 \x01(\v2&.WAWebProtobufsE2E.LiveLocationMessageR\x13liveLocationMessage\x12^\n" + + "\x15requestPaymentMessage\x18\x16 \x01(\v2(.WAWebProtobufsE2E.RequestPaymentMessageR\x15requestPaymentMessage\x12s\n" + + "\x1cdeclinePaymentRequestMessage\x18\x17 \x01(\v2/.WAWebProtobufsE2E.DeclinePaymentRequestMessageR\x1cdeclinePaymentRequestMessage\x12p\n" + + "\x1bcancelPaymentRequestMessage\x18\x18 \x01(\v2..WAWebProtobufsE2E.CancelPaymentRequestMessageR\x1bcancelPaymentRequestMessage\x12L\n" + + "\x0ftemplateMessage\x18\x19 \x01(\v2\".WAWebProtobufsE2E.TemplateMessageR\x0ftemplateMessage\x12I\n" + + "\x0estickerMessage\x18\x1a \x01(\v2!.WAWebProtobufsE2E.StickerMessageR\x0estickerMessage\x12U\n" + + "\x12groupInviteMessage\x18\x1c \x01(\v2%.WAWebProtobufsE2E.GroupInviteMessageR\x12groupInviteMessage\x12m\n" + + "\x1atemplateButtonReplyMessage\x18\x1d \x01(\v2-.WAWebProtobufsE2E.TemplateButtonReplyMessageR\x1atemplateButtonReplyMessage\x12I\n" + + "\x0eproductMessage\x18\x1e \x01(\v2!.WAWebProtobufsE2E.ProductMessageR\x0eproductMessage\x12R\n" + + "\x11deviceSentMessage\x18\x1f \x01(\v2$.WAWebProtobufsE2E.DeviceSentMessageR\x11deviceSentMessage\x12U\n" + + "\x12messageContextInfo\x18# \x01(\v2%.WAWebProtobufsE2E.MessageContextInfoR\x12messageContextInfo\x12@\n" + + "\vlistMessage\x18$ \x01(\v2\x1e.WAWebProtobufsE2E.ListMessageR\vlistMessage\x12O\n" + + "\x0fviewOnceMessage\x18% \x01(\v2%.WAWebProtobufsE2E.FutureProofMessageR\x0fviewOnceMessage\x12C\n" + + "\forderMessage\x18& \x01(\v2\x1f.WAWebProtobufsE2E.OrderMessageR\forderMessage\x12X\n" + + "\x13listResponseMessage\x18' \x01(\v2&.WAWebProtobufsE2E.ListResponseMessageR\x13listResponseMessage\x12Q\n" + + "\x10ephemeralMessage\x18( \x01(\v2%.WAWebProtobufsE2E.FutureProofMessageR\x10ephemeralMessage\x12I\n" + + "\x0einvoiceMessage\x18) \x01(\v2!.WAWebProtobufsE2E.InvoiceMessageR\x0einvoiceMessage\x12I\n" + + "\x0ebuttonsMessage\x18* \x01(\v2!.WAWebProtobufsE2E.ButtonsMessageR\x0ebuttonsMessage\x12a\n" + + "\x16buttonsResponseMessage\x18+ \x01(\v2).WAWebProtobufsE2E.ButtonsResponseMessageR\x16buttonsResponseMessage\x12[\n" + + "\x14paymentInviteMessage\x18, \x01(\v2'.WAWebProtobufsE2E.PaymentInviteMessageR\x14paymentInviteMessage\x12U\n" + + "\x12interactiveMessage\x18- \x01(\v2%.WAWebProtobufsE2E.InteractiveMessageR\x12interactiveMessage\x12L\n" + + "\x0freactionMessage\x18. \x01(\v2\".WAWebProtobufsE2E.ReactionMessageR\x0freactionMessage\x12^\n" + + "\x15stickerSyncRmrMessage\x18/ \x01(\v2(.WAWebProtobufsE2E.StickerSyncRMRMessageR\x15stickerSyncRmrMessage\x12m\n" + + "\x1ainteractiveResponseMessage\x180 \x01(\v2-.WAWebProtobufsE2E.InteractiveResponseMessageR\x1ainteractiveResponseMessage\x12X\n" + + "\x13pollCreationMessage\x181 \x01(\v2&.WAWebProtobufsE2E.PollCreationMessageR\x13pollCreationMessage\x12R\n" + + "\x11pollUpdateMessage\x182 \x01(\v2$.WAWebProtobufsE2E.PollUpdateMessageR\x11pollUpdateMessage\x12R\n" + + "\x11keepInChatMessage\x183 \x01(\v2$.WAWebProtobufsE2E.KeepInChatMessageR\x11keepInChatMessage\x12e\n" + + "\x1adocumentWithCaptionMessage\x185 \x01(\v2%.WAWebProtobufsE2E.FutureProofMessageR\x1adocumentWithCaptionMessage\x12j\n" + + "\x19requestPhoneNumberMessage\x186 \x01(\v2,.WAWebProtobufsE2E.RequestPhoneNumberMessageR\x19requestPhoneNumberMessage\x12S\n" + + "\x11viewOnceMessageV2\x187 \x01(\v2%.WAWebProtobufsE2E.FutureProofMessageR\x11viewOnceMessageV2\x12U\n" + + "\x12encReactionMessage\x188 \x01(\v2%.WAWebProtobufsE2E.EncReactionMessageR\x12encReactionMessage\x12K\n" + + "\reditedMessage\x18: \x01(\v2%.WAWebProtobufsE2E.FutureProofMessageR\reditedMessage\x12e\n" + + "\x1aviewOnceMessageV2Extension\x18; \x01(\v2%.WAWebProtobufsE2E.FutureProofMessageR\x1aviewOnceMessageV2Extension\x12\\\n" + + "\x15pollCreationMessageV2\x18< \x01(\v2&.WAWebProtobufsE2E.PollCreationMessageR\x15pollCreationMessageV2\x12s\n" + + "\x1cscheduledCallCreationMessage\x18= \x01(\v2/.WAWebProtobufsE2E.ScheduledCallCreationMessageR\x1cscheduledCallCreationMessage\x12[\n" + + "\x15groupMentionedMessage\x18> \x01(\v2%.WAWebProtobufsE2E.FutureProofMessageR\x15groupMentionedMessage\x12O\n" + + "\x10pinInChatMessage\x18? \x01(\v2#.WAWebProtobufsE2E.PinInChatMessageR\x10pinInChatMessage\x12\\\n" + + "\x15pollCreationMessageV3\x18@ \x01(\v2&.WAWebProtobufsE2E.PollCreationMessageR\x15pollCreationMessageV3\x12g\n" + + "\x18scheduledCallEditMessage\x18A \x01(\v2+.WAWebProtobufsE2E.ScheduledCallEditMessageR\x18scheduledCallEditMessage\x12?\n" + + "\n" + + "ptvMessage\x18B \x01(\v2\x1f.WAWebProtobufsE2E.VideoMessageR\n" + + "ptvMessage\x12Q\n" + + "\x10botInvokeMessage\x18C \x01(\v2%.WAWebProtobufsE2E.FutureProofMessageR\x10botInvokeMessage\x12K\n" + + "\x0fcallLogMesssage\x18E \x01(\v2!.WAWebProtobufsE2E.CallLogMessageR\x0fcallLogMesssage\x12[\n" + + "\x14messageHistoryBundle\x18F \x01(\v2'.WAWebProtobufsE2E.MessageHistoryBundleR\x14messageHistoryBundle\x12R\n" + + "\x11encCommentMessage\x18G \x01(\v2$.WAWebProtobufsE2E.EncCommentMessageR\x11encCommentMessage\x12C\n" + + "\fbcallMessage\x18H \x01(\v2\x1f.WAWebProtobufsE2E.BCallMessageR\fbcallMessage\x12Y\n" + + "\x14lottieStickerMessage\x18J \x01(\v2%.WAWebProtobufsE2E.FutureProofMessageR\x14lottieStickerMessage\x12C\n" + + "\feventMessage\x18K \x01(\v2\x1f.WAWebProtobufsE2E.EventMessageR\feventMessage\x12d\n" + + "\x17encEventResponseMessage\x18L \x01(\v2*.WAWebProtobufsE2E.EncEventResponseMessageR\x17encEventResponseMessage\x12I\n" + + "\x0ecommentMessage\x18M \x01(\v2!.WAWebProtobufsE2E.CommentMessageR\x0ecommentMessage\x12s\n" + + "\x1cnewsletterAdminInviteMessage\x18N \x01(\v2/.WAWebProtobufsE2E.NewsletterAdminInviteMessageR\x1cnewsletterAdminInviteMessage\x12U\n" + + "\x12placeholderMessage\x18P \x01(\v2%.WAWebProtobufsE2E.PlaceholderMessageR\x12placeholderMessage\x12a\n" + + "\x16secretEncryptedMessage\x18R \x01(\v2).WAWebProtobufsE2E.SecretEncryptedMessageR\x16secretEncryptedMessage\x12C\n" + + "\falbumMessage\x18S \x01(\v2\x1f.WAWebProtobufsE2E.AlbumMessageR\falbumMessage\x12O\n" + + "\x0feventCoverImage\x18U \x01(\v2%.WAWebProtobufsE2E.FutureProofMessageR\x0feventCoverImage\x12U\n" + + "\x12stickerPackMessage\x18V \x01(\v2%.WAWebProtobufsE2E.StickerPackMessageR\x12stickerPackMessage\x12Y\n" + + "\x14statusMentionMessage\x18W \x01(\v2%.WAWebProtobufsE2E.FutureProofMessageR\x14statusMentionMessage\x12j\n" + + "\x19pollResultSnapshotMessage\x18X \x01(\v2,.WAWebProtobufsE2E.PollResultSnapshotMessageR\x19pollResultSnapshotMessage\x12m\n" + + "\x1epollCreationOptionImageMessage\x18Z \x01(\v2%.WAWebProtobufsE2E.FutureProofMessageR\x1epollCreationOptionImageMessage\x12]\n" + + "\x16associatedChildMessage\x18[ \x01(\v2%.WAWebProtobufsE2E.FutureProofMessageR\x16associatedChildMessage\x12c\n" + + "\x19groupStatusMentionMessage\x18\\ \x01(\v2%.WAWebProtobufsE2E.FutureProofMessageR\x19groupStatusMentionMessage\x12[\n" + + "\x15pollCreationMessageV4\x18] \x01(\v2%.WAWebProtobufsE2E.FutureProofMessageR\x15pollCreationMessageV4\x12M\n" + + "\x0estatusAddYours\x18_ \x01(\v2%.WAWebProtobufsE2E.FutureProofMessageR\x0estatusAddYours\x12U\n" + + "\x12groupStatusMessage\x18` \x01(\v2%.WAWebProtobufsE2E.FutureProofMessageR\x12groupStatusMessage\x12Z\n" + + "\x13richResponseMessage\x18a \x01(\v2(.WAWebProtobufsE2E.AIRichResponseMessageR\x13richResponseMessage\x12j\n" + + "\x19statusNotificationMessage\x18b \x01(\v2,.WAWebProtobufsE2E.StatusNotificationMessageR\x19statusNotificationMessage\x12W\n" + + "\x13limitSharingMessage\x18c \x01(\v2%.WAWebProtobufsE2E.FutureProofMessageR\x13limitSharingMessage\x12M\n" + + "\x0ebotTaskMessage\x18d \x01(\v2%.WAWebProtobufsE2E.FutureProofMessageR\x0ebotTaskMessage\x12O\n" + + "\x0fquestionMessage\x18e \x01(\v2%.WAWebProtobufsE2E.FutureProofMessageR\x0fquestionMessage\x12[\n" + + "\x14messageHistoryNotice\x18f \x01(\v2'.WAWebProtobufsE2E.MessageHistoryNoticeR\x14messageHistoryNotice\x12Y\n" + + "\x14groupStatusMessageV2\x18g \x01(\v2%.WAWebProtobufsE2E.FutureProofMessageR\x14groupStatusMessageV2\x12W\n" + + "\x13botForwardedMessage\x18h \x01(\v2%.WAWebProtobufsE2E.FutureProofMessageR\x13botForwardedMessage\x12p\n" + + "\x1bstatusQuestionAnswerMessage\x18i \x01(\v2..WAWebProtobufsE2E.StatusQuestionAnswerMessageR\x1bstatusQuestionAnswerMessage\x12Y\n" + + "\x14questionReplyMessage\x18j \x01(\v2%.WAWebProtobufsE2E.FutureProofMessageR\x14questionReplyMessage\x12d\n" + + "\x17questionResponseMessage\x18k \x01(\v2*.WAWebProtobufsE2E.QuestionResponseMessageR\x17questionResponseMessage\x12X\n" + + "\x13statusQuotedMessage\x18m \x01(\v2&.WAWebProtobufsE2E.StatusQuotedMessageR\x13statusQuotedMessage\x12|\n" + + "\x1fstatusStickerInteractionMessage\x18n \x01(\v22.WAWebProtobufsE2E.StatusStickerInteractionMessageR\x1fstatusStickerInteractionMessage\x12\\\n" + + "\x15pollCreationMessageV5\x18o \x01(\v2&.WAWebProtobufsE2E.PollCreationMessageR\x15pollCreationMessageV5\x12\x80\x01\n" + + "!newsletterFollowerInviteMessageV2\x18q \x01(\v22.WAWebProtobufsE2E.NewsletterFollowerInviteMessageR!newsletterFollowerInviteMessageV2\x12n\n" + + "\x1bpollResultSnapshotMessageV3\x18s \x01(\v2,.WAWebProtobufsE2E.PollResultSnapshotMessageR\x1bpollResultSnapshotMessageV3\x12k\n" + + "\x1dnewsletterAdminProfileMessage\x18t \x01(\v2%.WAWebProtobufsE2E.FutureProofMessageR\x1dnewsletterAdminProfileMessage\x12o\n" + + "\x1fnewsletterAdminProfileMessageV2\x18u \x01(\v2%.WAWebProtobufsE2E.FutureProofMessageR\x1fnewsletterAdminProfileMessageV2\x12M\n" + + "\x0espoilerMessage\x18v \x01(\v2%.WAWebProtobufsE2E.FutureProofMessageR\x0espoilerMessage\x12[\n" + + "\x15pollCreationMessageV6\x18w \x01(\v2%.WAWebProtobufsE2E.FutureProofMessageR\x15pollCreationMessageV6\"\xb0\x01\n" + + "\fAlbumMessage\x12.\n" + + "\x12expectedImageCount\x18\x02 \x01(\rR\x12expectedImageCount\x12.\n" + + "\x12expectedVideoCount\x18\x03 \x01(\rR\x12expectedVideoCount\x12@\n" + + "\vcontextInfo\x18\x11 \x01(\v2\x1e.WAWebProtobufsE2E.ContextInfoR\vcontextInfo\"\xd2\x01\n" + + "\x16MessageHistoryMetadata\x12*\n" + + "\x10historyReceivers\x18\x01 \x03(\tR\x10historyReceivers\x126\n" + + "\x16oldestMessageTimestamp\x18\x02 \x01(\x03R\x16oldestMessageTimestamp\x12\"\n" + + "\fmessageCount\x18\x03 \x01(\x03R\fmessageCount\x120\n" + + "\x13nonHistoryReceivers\x18\x04 \x03(\tR\x13nonHistoryReceivers\"\xbb\x01\n" + + "\x14MessageHistoryNotice\x12@\n" + + "\vcontextInfo\x18\x01 \x01(\v2\x1e.WAWebProtobufsE2E.ContextInfoR\vcontextInfo\x12a\n" + + "\x16messageHistoryMetadata\x18\x02 \x01(\v2).WAWebProtobufsE2E.MessageHistoryMetadataR\x16messageHistoryMetadata\"\x87\x03\n" + + "\x14MessageHistoryBundle\x12\x1a\n" + + "\bmimetype\x18\x01 \x01(\tR\bmimetype\x12\x1e\n" + + "\n" + + "fileSHA256\x18\x02 \x01(\fR\n" + + "fileSHA256\x12\x1a\n" + + "\bmediaKey\x18\x03 \x01(\fR\bmediaKey\x12$\n" + + "\rfileEncSHA256\x18\x04 \x01(\fR\rfileEncSHA256\x12\x1e\n" + + "\n" + + "directPath\x18\x05 \x01(\tR\n" + + "directPath\x12,\n" + + "\x11mediaKeyTimestamp\x18\x06 \x01(\x03R\x11mediaKeyTimestamp\x12@\n" + + "\vcontextInfo\x18\a \x01(\v2\x1e.WAWebProtobufsE2E.ContextInfoR\vcontextInfo\x12a\n" + + "\x16messageHistoryMetadata\x18\b \x01(\v2).WAWebProtobufsE2E.MessageHistoryMetadataR\x16messageHistoryMetadata\"\x9f\x01\n" + + "\x17EncEventResponseMessage\x12N\n" + + "\x17eventCreationMessageKey\x18\x01 \x01(\v2\x14.WACommon.MessageKeyR\x17eventCreationMessageKey\x12\x1e\n" + + "\n" + + "encPayload\x18\x02 \x01(\fR\n" + + "encPayload\x12\x14\n" + + "\x05encIV\x18\x03 \x01(\fR\x05encIV\"\xe2\x03\n" + + "\fEventMessage\x12@\n" + + "\vcontextInfo\x18\x01 \x01(\v2\x1e.WAWebProtobufsE2E.ContextInfoR\vcontextInfo\x12\x1e\n" + + "\n" + + "isCanceled\x18\x02 \x01(\bR\n" + + "isCanceled\x12\x12\n" + + "\x04name\x18\x03 \x01(\tR\x04name\x12 \n" + + "\vdescription\x18\x04 \x01(\tR\vdescription\x12>\n" + + "\blocation\x18\x05 \x01(\v2\".WAWebProtobufsE2E.LocationMessageR\blocation\x12\x1a\n" + + "\bjoinLink\x18\x06 \x01(\tR\bjoinLink\x12\x1c\n" + + "\tstartTime\x18\a \x01(\x03R\tstartTime\x12\x18\n" + + "\aendTime\x18\b \x01(\x03R\aendTime\x12.\n" + + "\x12extraGuestsAllowed\x18\t \x01(\bR\x12extraGuestsAllowed\x12&\n" + + "\x0eisScheduleCall\x18\n" + + " \x01(\bR\x0eisScheduleCall\x12 \n" + + "\vhasReminder\x18\v \x01(\bR\vhasReminder\x12,\n" + + "\x11reminderOffsetSec\x18\f \x01(\x03R\x11reminderOffsetSec\"\x88\x01\n" + + "\x0eCommentMessage\x124\n" + + "\amessage\x18\x01 \x01(\v2\x1a.WAWebProtobufsE2E.MessageR\amessage\x12@\n" + + "\x10targetMessageKey\x18\x02 \x01(\v2\x14.WACommon.MessageKeyR\x10targetMessageKey\"\x8b\x01\n" + + "\x11EncCommentMessage\x12@\n" + + "\x10targetMessageKey\x18\x01 \x01(\v2\x14.WACommon.MessageKeyR\x10targetMessageKey\x12\x1e\n" + + "\n" + + "encPayload\x18\x02 \x01(\fR\n" + + "encPayload\x12\x14\n" + + "\x05encIV\x18\x03 \x01(\fR\x05encIV\"\x8c\x01\n" + + "\x12EncReactionMessage\x12@\n" + + "\x10targetMessageKey\x18\x01 \x01(\v2\x14.WACommon.MessageKeyR\x10targetMessageKey\x12\x1e\n" + + "\n" + + "encPayload\x18\x02 \x01(\fR\n" + + "encPayload\x12\x14\n" + + "\x05encIV\x18\x03 \x01(\fR\x05encIV\"\x96\x01\n" + + "\x11KeepInChatMessage\x12&\n" + + "\x03key\x18\x01 \x01(\v2\x14.WACommon.MessageKeyR\x03key\x127\n" + + "\bkeepType\x18\x02 \x01(\x0e2\x1b.WAWebProtobufsE2E.KeepTypeR\bkeepType\x12 \n" + + "\vtimestampMS\x18\x03 \x01(\x03R\vtimestampMS\"U\n" + + "\x17QuestionResponseMessage\x12&\n" + + "\x03key\x18\x01 \x01(\v2\x14.WACommon.MessageKeyR\x03key\x12\x12\n" + + "\x04text\x18\x02 \x01(\tR\x04text\"Y\n" + + "\x1bStatusQuestionAnswerMessage\x12&\n" + + "\x03key\x18\x01 \x01(\v2\x14.WACommon.MessageKeyR\x03key\x12\x12\n" + + "\x04text\x18\x02 \x01(\tR\x04text\"\xd5\x02\n" + + "\x19PollResultSnapshotMessage\x12\x12\n" + + "\x04name\x18\x01 \x01(\tR\x04name\x12S\n" + + "\tpollVotes\x18\x02 \x03(\v25.WAWebProtobufsE2E.PollResultSnapshotMessage.PollVoteR\tpollVotes\x12@\n" + + "\vcontextInfo\x18\x03 \x01(\v2\x1e.WAWebProtobufsE2E.ContextInfoR\vcontextInfo\x127\n" + + "\bpollType\x18\x04 \x01(\x0e2\x1b.WAWebProtobufsE2E.PollTypeR\bpollType\x1aT\n" + + "\bPollVote\x12\x1e\n" + + "\n" + + "optionName\x18\x01 \x01(\tR\n" + + "optionName\x12(\n" + + "\x0foptionVoteCount\x18\x02 \x01(\x03R\x0foptionVoteCount\";\n" + + "\x0fPollVoteMessage\x12(\n" + + "\x0fselectedOptions\x18\x01 \x03(\fR\x0fselectedOptions\"D\n" + + "\fPollEncValue\x12\x1e\n" + + "\n" + + "encPayload\x18\x01 \x01(\fR\n" + + "encPayload\x12\x14\n" + + "\x05encIV\x18\x02 \x01(\fR\x05encIV\"\x1b\n" + + "\x19PollUpdateMessageMetadata\"\x8e\x02\n" + + "\x11PollUpdateMessage\x12L\n" + + "\x16pollCreationMessageKey\x18\x01 \x01(\v2\x14.WACommon.MessageKeyR\x16pollCreationMessageKey\x123\n" + + "\x04vote\x18\x02 \x01(\v2\x1f.WAWebProtobufsE2E.PollEncValueR\x04vote\x12H\n" + + "\bmetadata\x18\x03 \x01(\v2,.WAWebProtobufsE2E.PollUpdateMessageMetadataR\bmetadata\x12,\n" + + "\x11senderTimestampMS\x18\x04 \x01(\x03R\x11senderTimestampMS\"\xf6\x04\n" + + "\x13PollCreationMessage\x12\x16\n" + + "\x06encKey\x18\x01 \x01(\fR\x06encKey\x12\x12\n" + + "\x04name\x18\x02 \x01(\tR\x04name\x12G\n" + + "\aoptions\x18\x03 \x03(\v2-.WAWebProtobufsE2E.PollCreationMessage.OptionR\aoptions\x126\n" + + "\x16selectableOptionsCount\x18\x04 \x01(\rR\x16selectableOptionsCount\x12@\n" + + "\vcontextInfo\x18\x05 \x01(\v2\x1e.WAWebProtobufsE2E.ContextInfoR\vcontextInfo\x12L\n" + + "\x0fpollContentType\x18\x06 \x01(\x0e2\".WAWebProtobufsE2E.PollContentTypeR\x0fpollContentType\x127\n" + + "\bpollType\x18\a \x01(\x0e2\x1b.WAWebProtobufsE2E.PollTypeR\bpollType\x12S\n" + + "\rcorrectAnswer\x18\b \x01(\v2-.WAWebProtobufsE2E.PollCreationMessage.OptionR\rcorrectAnswer\x12\x18\n" + + "\aendTime\x18\t \x01(\x03R\aendTime\x120\n" + + "\x13hideParticipantName\x18\n" + + " \x01(\bR\x13hideParticipantName\x1aH\n" + + "\x06Option\x12\x1e\n" + + "\n" + + "optionName\x18\x01 \x01(\tR\n" + + "optionName\x12\x1e\n" + + "\n" + + "optionHash\x18\x02 \x01(\tR\n" + + "optionHash\"}\n" + + "\x15StickerSyncRMRMessage\x12\x1a\n" + + "\bfilehash\x18\x01 \x03(\tR\bfilehash\x12\x1c\n" + + "\trmrSource\x18\x02 \x01(\tR\trmrSource\x12*\n" + + "\x10requestTimestamp\x18\x03 \x01(\x03R\x10requestTimestamp\"\x9d\x01\n" + + "\x0fReactionMessage\x12&\n" + + "\x03key\x18\x01 \x01(\v2\x14.WACommon.MessageKeyR\x03key\x12\x12\n" + + "\x04text\x18\x02 \x01(\tR\x04text\x12 \n" + + "\vgroupingKey\x18\x03 \x01(\tR\vgroupingKey\x12,\n" + + "\x11senderTimestampMS\x18\x04 \x01(\x03R\x11senderTimestampMS\"J\n" + + "\x12FutureProofMessage\x124\n" + + "\amessage\x18\x01 \x01(\v2\x1a.WAWebProtobufsE2E.MessageR\amessage\"\x87\x01\n" + + "\x11DeviceSentMessage\x12&\n" + + "\x0edestinationJID\x18\x01 \x01(\tR\x0edestinationJID\x124\n" + + "\amessage\x18\x02 \x01(\v2\x1a.WAWebProtobufsE2E.MessageR\amessage\x12\x14\n" + + "\x05phash\x18\x03 \x01(\tR\x05phash\"]\n" + + "\x19RequestPhoneNumberMessage\x12@\n" + + "\vcontextInfo\x18\x01 \x01(\v2\x1e.WAWebProtobufsE2E.ContextInfoR\vcontextInfo\"\xf1\x01\n" + + "\x1fNewsletterFollowerInviteMessage\x12$\n" + + "\rnewsletterJID\x18\x01 \x01(\tR\rnewsletterJID\x12&\n" + + "\x0enewsletterName\x18\x02 \x01(\tR\x0enewsletterName\x12$\n" + + "\rJPEGThumbnail\x18\x03 \x01(\fR\rJPEGThumbnail\x12\x18\n" + + "\acaption\x18\x04 \x01(\tR\acaption\x12@\n" + + "\vcontextInfo\x18\x05 \x01(\v2\x1e.WAWebProtobufsE2E.ContextInfoR\vcontextInfo\"\x9a\x02\n" + + "\x1cNewsletterAdminInviteMessage\x12$\n" + + "\rnewsletterJID\x18\x01 \x01(\tR\rnewsletterJID\x12&\n" + + "\x0enewsletterName\x18\x02 \x01(\tR\x0enewsletterName\x12$\n" + + "\rJPEGThumbnail\x18\x03 \x01(\fR\rJPEGThumbnail\x12\x18\n" + + "\acaption\x18\x04 \x01(\tR\acaption\x12*\n" + + "\x10inviteExpiration\x18\x05 \x01(\x03R\x10inviteExpiration\x12@\n" + + "\vcontextInfo\x18\x06 \x01(\v2\x1e.WAWebProtobufsE2E.ContextInfoR\vcontextInfo\"\xa6\a\n" + + "\x0eProductMessage\x12K\n" + + "\aproduct\x18\x01 \x01(\v21.WAWebProtobufsE2E.ProductMessage.ProductSnapshotR\aproduct\x12*\n" + + "\x10businessOwnerJID\x18\x02 \x01(\tR\x10businessOwnerJID\x12K\n" + + "\acatalog\x18\x04 \x01(\v21.WAWebProtobufsE2E.ProductMessage.CatalogSnapshotR\acatalog\x12\x12\n" + + "\x04body\x18\x05 \x01(\tR\x04body\x12\x16\n" + + "\x06footer\x18\x06 \x01(\tR\x06footer\x12@\n" + + "\vcontextInfo\x18\x11 \x01(\v2\x1e.WAWebProtobufsE2E.ContextInfoR\vcontextInfo\x1a\xce\x03\n" + + "\x0fProductSnapshot\x12C\n" + + "\fproductImage\x18\x01 \x01(\v2\x1f.WAWebProtobufsE2E.ImageMessageR\fproductImage\x12\x1c\n" + + "\tproductID\x18\x02 \x01(\tR\tproductID\x12\x14\n" + + "\x05title\x18\x03 \x01(\tR\x05title\x12 \n" + + "\vdescription\x18\x04 \x01(\tR\vdescription\x12\"\n" + + "\fcurrencyCode\x18\x05 \x01(\tR\fcurrencyCode\x12(\n" + + "\x0fpriceAmount1000\x18\x06 \x01(\x03R\x0fpriceAmount1000\x12\x1e\n" + + "\n" + + "retailerID\x18\a \x01(\tR\n" + + "retailerID\x12\x10\n" + + "\x03URL\x18\b \x01(\tR\x03URL\x12,\n" + + "\x11productImageCount\x18\t \x01(\rR\x11productImageCount\x12\"\n" + + "\ffirstImageID\x18\v \x01(\tR\ffirstImageID\x120\n" + + "\x13salePriceAmount1000\x18\f \x01(\x03R\x13salePriceAmount1000\x12\x1c\n" + + "\tsignedURL\x18\r \x01(\tR\tsignedURL\x1a\x8e\x01\n" + + "\x0fCatalogSnapshot\x12C\n" + + "\fcatalogImage\x18\x01 \x01(\v2\x1f.WAWebProtobufsE2E.ImageMessageR\fcatalogImage\x12\x14\n" + + "\x05title\x18\x02 \x01(\tR\x05title\x12 \n" + + "\vdescription\x18\x03 \x01(\tR\vdescription\"\x94\x02\n" + + "\x1aTemplateButtonReplyMessage\x12\x1e\n" + + "\n" + + "selectedID\x18\x01 \x01(\tR\n" + + "selectedID\x120\n" + + "\x13selectedDisplayText\x18\x02 \x01(\tR\x13selectedDisplayText\x12@\n" + + "\vcontextInfo\x18\x03 \x01(\v2\x1e.WAWebProtobufsE2E.ContextInfoR\vcontextInfo\x12$\n" + + "\rselectedIndex\x18\x04 \x01(\rR\rselectedIndex\x12<\n" + + "\x19selectedCarouselCardIndex\x18\x05 \x01(\rR\x19selectedCarouselCardIndex\"\xa8\x0e\n" + + "\x0fTemplateMessage\x12^\n" + + "\x0ffourRowTemplate\x18\x01 \x01(\v22.WAWebProtobufsE2E.TemplateMessage.FourRowTemplateH\x00R\x0ffourRowTemplate\x12v\n" + + "\x17hydratedFourRowTemplate\x18\x02 \x01(\v2:.WAWebProtobufsE2E.TemplateMessage.HydratedFourRowTemplateH\x00R\x17hydratedFourRowTemplate\x12g\n" + + "\x1ainteractiveMessageTemplate\x18\x05 \x01(\v2%.WAWebProtobufsE2E.InteractiveMessageH\x00R\x1ainteractiveMessageTemplate\x12@\n" + + "\vcontextInfo\x18\x03 \x01(\v2\x1e.WAWebProtobufsE2E.ContextInfoR\vcontextInfo\x12f\n" + + "\x10hydratedTemplate\x18\x04 \x01(\v2:.WAWebProtobufsE2E.TemplateMessage.HydratedFourRowTemplateR\x10hydratedTemplate\x12\x1e\n" + + "\n" + + "templateID\x18\t \x01(\tR\n" + + "templateID\x1a\x85\x05\n" + + "\x17HydratedFourRowTemplate\x12N\n" + + "\x0fdocumentMessage\x18\x01 \x01(\v2\".WAWebProtobufsE2E.DocumentMessageH\x00R\x0fdocumentMessage\x12.\n" + + "\x11hydratedTitleText\x18\x02 \x01(\tH\x00R\x11hydratedTitleText\x12E\n" + + "\fimageMessage\x18\x03 \x01(\v2\x1f.WAWebProtobufsE2E.ImageMessageH\x00R\fimageMessage\x12E\n" + + "\fvideoMessage\x18\x04 \x01(\v2\x1f.WAWebProtobufsE2E.VideoMessageH\x00R\fvideoMessage\x12N\n" + + "\x0flocationMessage\x18\x05 \x01(\v2\".WAWebProtobufsE2E.LocationMessageH\x00R\x0flocationMessage\x120\n" + + "\x13hydratedContentText\x18\x06 \x01(\tR\x13hydratedContentText\x12.\n" + + "\x12hydratedFooterText\x18\a \x01(\tR\x12hydratedFooterText\x12S\n" + + "\x0fhydratedButtons\x18\b \x03(\v2).WAWebProtobufsE2E.HydratedTemplateButtonR\x0fhydratedButtons\x12\x1e\n" + + "\n" + + "templateID\x18\t \x01(\tR\n" + + "templateID\x12,\n" + + "\x11maskLinkedDevices\x18\n" + + " \x01(\bR\x11maskLinkedDevicesB\a\n" + + "\x05title\x1a\xf7\x04\n" + + "\x0fFourRowTemplate\x12N\n" + + "\x0fdocumentMessage\x18\x01 \x01(\v2\".WAWebProtobufsE2E.DocumentMessageH\x00R\x0fdocumentMessage\x12f\n" + + "\x17highlyStructuredMessage\x18\x02 \x01(\v2*.WAWebProtobufsE2E.HighlyStructuredMessageH\x00R\x17highlyStructuredMessage\x12E\n" + + "\fimageMessage\x18\x03 \x01(\v2\x1f.WAWebProtobufsE2E.ImageMessageH\x00R\fimageMessage\x12E\n" + + "\fvideoMessage\x18\x04 \x01(\v2\x1f.WAWebProtobufsE2E.VideoMessageH\x00R\fvideoMessage\x12N\n" + + "\x0flocationMessage\x18\x05 \x01(\v2\".WAWebProtobufsE2E.LocationMessageH\x00R\x0flocationMessage\x12D\n" + + "\acontent\x18\x06 \x01(\v2*.WAWebProtobufsE2E.HighlyStructuredMessageR\acontent\x12B\n" + + "\x06footer\x18\a \x01(\v2*.WAWebProtobufsE2E.HighlyStructuredMessageR\x06footer\x12;\n" + + "\abuttons\x18\b \x03(\v2!.WAWebProtobufsE2E.TemplateButtonR\abuttonsB\a\n" + + "\x05titleB\b\n" + + "\x06format\"\xe6\x05\n" + + "\x0eStickerMessage\x12\x10\n" + + "\x03URL\x18\x01 \x01(\tR\x03URL\x12\x1e\n" + + "\n" + + "fileSHA256\x18\x02 \x01(\fR\n" + + "fileSHA256\x12$\n" + + "\rfileEncSHA256\x18\x03 \x01(\fR\rfileEncSHA256\x12\x1a\n" + + "\bmediaKey\x18\x04 \x01(\fR\bmediaKey\x12\x1a\n" + + "\bmimetype\x18\x05 \x01(\tR\bmimetype\x12\x16\n" + + "\x06height\x18\x06 \x01(\rR\x06height\x12\x14\n" + + "\x05width\x18\a \x01(\rR\x05width\x12\x1e\n" + + "\n" + + "directPath\x18\b \x01(\tR\n" + + "directPath\x12\x1e\n" + + "\n" + + "fileLength\x18\t \x01(\x04R\n" + + "fileLength\x12,\n" + + "\x11mediaKeyTimestamp\x18\n" + + " \x01(\x03R\x11mediaKeyTimestamp\x12*\n" + + "\x10firstFrameLength\x18\v \x01(\rR\x10firstFrameLength\x12,\n" + + "\x11firstFrameSidecar\x18\f \x01(\fR\x11firstFrameSidecar\x12\x1e\n" + + "\n" + + "isAnimated\x18\r \x01(\bR\n" + + "isAnimated\x12\"\n" + + "\fpngThumbnail\x18\x10 \x01(\fR\fpngThumbnail\x12@\n" + + "\vcontextInfo\x18\x11 \x01(\v2\x1e.WAWebProtobufsE2E.ContextInfoR\vcontextInfo\x12$\n" + + "\rstickerSentTS\x18\x12 \x01(\x03R\rstickerSentTS\x12\x1a\n" + + "\bisAvatar\x18\x13 \x01(\bR\bisAvatar\x12 \n" + + "\visAiSticker\x18\x14 \x01(\bR\visAiSticker\x12\x1a\n" + + "\bisLottie\x18\x15 \x01(\bR\bisLottie\x12.\n" + + "\x12accessibilityLabel\x18\x16 \x01(\tR\x12accessibilityLabel\x12\x18\n" + + "\apremium\x18\x18 \x01(\x05R\apremium\"\xcf\x03\n" + + "\x13LiveLocationMessage\x12(\n" + + "\x0fdegreesLatitude\x18\x01 \x01(\x01R\x0fdegreesLatitude\x12*\n" + + "\x10degreesLongitude\x18\x02 \x01(\x01R\x10degreesLongitude\x12*\n" + + "\x10accuracyInMeters\x18\x03 \x01(\rR\x10accuracyInMeters\x12\x1e\n" + + "\n" + + "speedInMps\x18\x04 \x01(\x02R\n" + + "speedInMps\x12L\n" + + "!degreesClockwiseFromMagneticNorth\x18\x05 \x01(\rR!degreesClockwiseFromMagneticNorth\x12\x18\n" + + "\acaption\x18\x06 \x01(\tR\acaption\x12&\n" + + "\x0esequenceNumber\x18\a \x01(\x03R\x0esequenceNumber\x12\x1e\n" + + "\n" + + "timeOffset\x18\b \x01(\rR\n" + + "timeOffset\x12$\n" + + "\rJPEGThumbnail\x18\x10 \x01(\fR\rJPEGThumbnail\x12@\n" + + "\vcontextInfo\x18\x11 \x01(\v2\x1e.WAWebProtobufsE2E.ContextInfoR\vcontextInfo\"E\n" + + "\x1bCancelPaymentRequestMessage\x12&\n" + + "\x03key\x18\x01 \x01(\v2\x14.WACommon.MessageKeyR\x03key\"F\n" + + "\x1cDeclinePaymentRequestMessage\x12&\n" + + "\x03key\x18\x01 \x01(\v2\x14.WACommon.MessageKeyR\x03key\"\xeb\x02\n" + + "\x15RequestPaymentMessage\x12<\n" + + "\vnoteMessage\x18\x04 \x01(\v2\x1a.WAWebProtobufsE2E.MessageR\vnoteMessage\x120\n" + + "\x13currencyCodeIso4217\x18\x01 \x01(\tR\x13currencyCodeIso4217\x12\x1e\n" + + "\n" + + "amount1000\x18\x02 \x01(\x04R\n" + + "amount1000\x12 \n" + + "\vrequestFrom\x18\x03 \x01(\tR\vrequestFrom\x12(\n" + + "\x0fexpiryTimestamp\x18\x05 \x01(\x03R\x0fexpiryTimestamp\x120\n" + + "\x06amount\x18\x06 \x01(\v2\x18.WAWebProtobufsE2E.MoneyR\x06amount\x12D\n" + + "\n" + + "background\x18\a \x01(\v2$.WAWebProtobufsE2E.PaymentBackgroundR\n" + + "background\"\x86\x02\n" + + "\x12SendPaymentMessage\x12<\n" + + "\vnoteMessage\x18\x02 \x01(\v2\x1a.WAWebProtobufsE2E.MessageR\vnoteMessage\x12B\n" + + "\x11requestMessageKey\x18\x03 \x01(\v2\x14.WACommon.MessageKeyR\x11requestMessageKey\x12D\n" + + "\n" + + "background\x18\x04 \x01(\v2$.WAWebProtobufsE2E.PaymentBackgroundR\n" + + "background\x12(\n" + + "\x0ftransactionData\x18\x05 \x01(\tR\x0ftransactionData\"\xb9\x01\n" + + "\x14ContactsArrayMessage\x12 \n" + + "\vdisplayName\x18\x01 \x01(\tR\vdisplayName\x12=\n" + + "\bcontacts\x18\x02 \x03(\v2!.WAWebProtobufsE2E.ContactMessageR\bcontacts\x12@\n" + + "\vcontextInfo\x18\x11 \x01(\v2\x1e.WAWebProtobufsE2E.ContextInfoR\vcontextInfo\"j\n" + + "&InitialSecurityNotificationSettingSync\x12@\n" + + "\x1bsecurityNotificationEnabled\x18\x01 \x01(\bR\x1bsecurityNotificationEnabled\"\x85\x01\n" + + "\x1dFullHistorySyncOnDemandConfig\x122\n" + + "\x14historyFromTimestamp\x18\x01 \x01(\x04R\x14historyFromTimestamp\x120\n" + + "\x13historyDurationDays\x18\x02 \x01(\rR\x13historyDurationDays\"\x9c\x01\n" + + "&FullHistorySyncOnDemandRequestMetadata\x12\x1c\n" + + "\trequestID\x18\x01 \x01(\tR\trequestID\x12(\n" + + "\x0fbusinessProduct\x18\x02 \x01(\tR\x0fbusinessProduct\x12*\n" + + "\x10opaqueClientData\x18\x03 \x01(\fR\x10opaqueClientData\"l\n" + + "\"AppStateFatalExceptionNotification\x12(\n" + + "\x0fcollectionNames\x18\x01 \x03(\tR\x0fcollectionNames\x12\x1c\n" + + "\ttimestamp\x18\x02 \x01(\x03R\ttimestamp\"V\n" + + "\x16AppStateSyncKeyRequest\x12<\n" + + "\x06keyIDs\x18\x01 \x03(\v2$.WAWebProtobufsE2E.AppStateSyncKeyIdR\x06keyIDs\"N\n" + + "\x14AppStateSyncKeyShare\x126\n" + + "\x04keys\x18\x01 \x03(\v2\".WAWebProtobufsE2E.AppStateSyncKeyR\x04keys\"\x9e\x01\n" + + "\x13AppStateSyncKeyData\x12\x18\n" + + "\akeyData\x18\x01 \x01(\fR\akeyData\x12O\n" + + "\vfingerprint\x18\x02 \x01(\v2-.WAWebProtobufsE2E.AppStateSyncKeyFingerprintR\vfingerprint\x12\x1c\n" + + "\ttimestamp\x18\x03 \x01(\x03R\ttimestamp\"\x80\x01\n" + + "\x1aAppStateSyncKeyFingerprint\x12\x14\n" + + "\x05rawID\x18\x01 \x01(\rR\x05rawID\x12\"\n" + + "\fcurrentIndex\x18\x02 \x01(\rR\fcurrentIndex\x12(\n" + + "\rdeviceIndexes\x18\x03 \x03(\rB\x02\x10\x01R\rdeviceIndexes\")\n" + + "\x11AppStateSyncKeyId\x12\x14\n" + + "\x05keyID\x18\x01 \x01(\fR\x05keyID\"\x8f\x01\n" + + "\x0fAppStateSyncKey\x12:\n" + + "\x05keyID\x18\x01 \x01(\v2$.WAWebProtobufsE2E.AppStateSyncKeyIdR\x05keyID\x12@\n" + + "\akeyData\x18\x02 \x01(\v2&.WAWebProtobufsE2E.AppStateSyncKeyDataR\akeyData\"\xca\x06\n" + + "\x17HistorySyncNotification\x12\x1e\n" + + "\n" + + "fileSHA256\x18\x01 \x01(\fR\n" + + "fileSHA256\x12\x1e\n" + + "\n" + + "fileLength\x18\x02 \x01(\x04R\n" + + "fileLength\x12\x1a\n" + + "\bmediaKey\x18\x03 \x01(\fR\bmediaKey\x12$\n" + + "\rfileEncSHA256\x18\x04 \x01(\fR\rfileEncSHA256\x12\x1e\n" + + "\n" + + "directPath\x18\x05 \x01(\tR\n" + + "directPath\x12>\n" + + "\bsyncType\x18\x06 \x01(\x0e2\".WAWebProtobufsE2E.HistorySyncTypeR\bsyncType\x12\x1e\n" + + "\n" + + "chunkOrder\x18\a \x01(\rR\n" + + "chunkOrder\x12,\n" + + "\x11originalMessageID\x18\b \x01(\tR\x11originalMessageID\x12\x1a\n" + + "\bprogress\x18\t \x01(\rR\bprogress\x12B\n" + + "\x1coldestMsgInChunkTimestampSec\x18\n" + + " \x01(\x03R\x1coldestMsgInChunkTimestampSec\x12L\n" + + "!initialHistBootstrapInlinePayload\x18\v \x01(\fR!initialHistBootstrapInlinePayload\x12:\n" + + "\x18peerDataRequestSessionID\x18\f \x01(\tR\x18peerDataRequestSessionID\x12\x91\x01\n" + + "&fullHistorySyncOnDemandRequestMetadata\x18\r \x01(\v29.WAWebProtobufsE2E.FullHistorySyncOnDemandRequestMetadataR&fullHistorySyncOnDemandRequestMetadata\x12\x1c\n" + + "\tencHandle\x18\x0e \x01(\tR\tencHandle\x12c\n" + + "\x13messageAccessStatus\x18\x0f \x01(\v21.WAWebProtobufsE2E.HistorySyncMessageAccessStatusR\x13messageAccessStatus\"V\n" + + "\x1eHistorySyncMessageAccessStatus\x124\n" + + "\x15completeAccessGranted\x18\x01 \x01(\bR\x15completeAccessGranted\"8\n" + + "\x04Chat\x12 \n" + + "\vdisplayName\x18\x01 \x01(\tR\vdisplayName\x12\x0e\n" + + "\x02ID\x18\x02 \x01(\tR\x02ID\"\x9d\x04\n" + + "\x04Call\x12\x18\n" + + "\acallKey\x18\x01 \x01(\fR\acallKey\x12*\n" + + "\x10conversionSource\x18\x02 \x01(\tR\x10conversionSource\x12&\n" + + "\x0econversionData\x18\x03 \x01(\fR\x0econversionData\x126\n" + + "\x16conversionDelaySeconds\x18\x04 \x01(\rR\x16conversionDelaySeconds\x12 \n" + + "\vctwaSignals\x18\x05 \x01(\tR\vctwaSignals\x12 \n" + + "\vctwaPayload\x18\x06 \x01(\fR\vctwaPayload\x12@\n" + + "\vcontextInfo\x18\a \x01(\v2\x1e.WAWebProtobufsE2E.ContextInfoR\vcontextInfo\x12@\n" + + "\x1bnativeFlowCallButtonPayload\x18\b \x01(\tR\x1bnativeFlowCallButtonPayload\x12(\n" + + "\x0fdeeplinkPayload\x18\t \x01(\tR\x0fdeeplinkPayload\x12U\n" + + "\x12messageContextInfo\x18\n" + + " \x01(\v2%.WAWebProtobufsE2E.MessageContextInfoR\x12messageContextInfo\x12&\n" + + "\x0ecallEntryPoint\x18\v \x01(\rR\x0ecallEntryPoint\"\xb6\x04\n" + + "\fAudioMessage\x12\x10\n" + + "\x03URL\x18\x01 \x01(\tR\x03URL\x12\x1a\n" + + "\bmimetype\x18\x02 \x01(\tR\bmimetype\x12\x1e\n" + + "\n" + + "fileSHA256\x18\x03 \x01(\fR\n" + + "fileSHA256\x12\x1e\n" + + "\n" + + "fileLength\x18\x04 \x01(\x04R\n" + + "fileLength\x12\x18\n" + + "\aseconds\x18\x05 \x01(\rR\aseconds\x12\x10\n" + + "\x03PTT\x18\x06 \x01(\bR\x03PTT\x12\x1a\n" + + "\bmediaKey\x18\a \x01(\fR\bmediaKey\x12$\n" + + "\rfileEncSHA256\x18\b \x01(\fR\rfileEncSHA256\x12\x1e\n" + + "\n" + + "directPath\x18\t \x01(\tR\n" + + "directPath\x12,\n" + + "\x11mediaKeyTimestamp\x18\n" + + " \x01(\x03R\x11mediaKeyTimestamp\x12@\n" + + "\vcontextInfo\x18\x11 \x01(\v2\x1e.WAWebProtobufsE2E.ContextInfoR\vcontextInfo\x12*\n" + + "\x10streamingSidecar\x18\x12 \x01(\fR\x10streamingSidecar\x12\x1a\n" + + "\bwaveform\x18\x13 \x01(\fR\bwaveform\x12&\n" + + "\x0ebackgroundArgb\x18\x14 \x01(\aR\x0ebackgroundArgb\x12\x1a\n" + + "\bviewOnce\x18\x15 \x01(\bR\bviewOnce\x12.\n" + + "\x12accessibilityLabel\x18\x16 \x01(\tR\x12accessibilityLabel\"\x93\x06\n" + + "\x0fDocumentMessage\x12\x10\n" + + "\x03URL\x18\x01 \x01(\tR\x03URL\x12\x1a\n" + + "\bmimetype\x18\x02 \x01(\tR\bmimetype\x12\x14\n" + + "\x05title\x18\x03 \x01(\tR\x05title\x12\x1e\n" + + "\n" + + "fileSHA256\x18\x04 \x01(\fR\n" + + "fileSHA256\x12\x1e\n" + + "\n" + + "fileLength\x18\x05 \x01(\x04R\n" + + "fileLength\x12\x1c\n" + + "\tpageCount\x18\x06 \x01(\rR\tpageCount\x12\x1a\n" + + "\bmediaKey\x18\a \x01(\fR\bmediaKey\x12\x1a\n" + + "\bfileName\x18\b \x01(\tR\bfileName\x12$\n" + + "\rfileEncSHA256\x18\t \x01(\fR\rfileEncSHA256\x12\x1e\n" + + "\n" + + "directPath\x18\n" + + " \x01(\tR\n" + + "directPath\x12,\n" + + "\x11mediaKeyTimestamp\x18\v \x01(\x03R\x11mediaKeyTimestamp\x12\"\n" + + "\fcontactVcard\x18\f \x01(\bR\fcontactVcard\x120\n" + + "\x13thumbnailDirectPath\x18\r \x01(\tR\x13thumbnailDirectPath\x12(\n" + + "\x0fthumbnailSHA256\x18\x0e \x01(\fR\x0fthumbnailSHA256\x12.\n" + + "\x12thumbnailEncSHA256\x18\x0f \x01(\fR\x12thumbnailEncSHA256\x12$\n" + + "\rJPEGThumbnail\x18\x10 \x01(\fR\rJPEGThumbnail\x12@\n" + + "\vcontextInfo\x18\x11 \x01(\v2\x1e.WAWebProtobufsE2E.ContextInfoR\vcontextInfo\x12(\n" + + "\x0fthumbnailHeight\x18\x12 \x01(\rR\x0fthumbnailHeight\x12&\n" + + "\x0ethumbnailWidth\x18\x13 \x01(\rR\x0ethumbnailWidth\x12\x18\n" + + "\acaption\x18\x14 \x01(\tR\acaption\x12.\n" + + "\x12accessibilityLabel\x18\x15 \x01(\tR\x12accessibilityLabel\"5\n" + + "\vURLMetadata\x12&\n" + + "\x0efbExperimentID\x18\x01 \x01(\rR\x0efbExperimentID\"I\n" + + "\x17PaymentExtendedMetadata\x12\x12\n" + + "\x04type\x18\x01 \x01(\rR\x04type\x12\x1a\n" + + "\bplatform\x18\x02 \x01(\tR\bplatform\"\xbe\x02\n" + + "\x14MMSThumbnailMetadata\x120\n" + + "\x13thumbnailDirectPath\x18\x01 \x01(\tR\x13thumbnailDirectPath\x12(\n" + + "\x0fthumbnailSHA256\x18\x02 \x01(\fR\x0fthumbnailSHA256\x12.\n" + + "\x12thumbnailEncSHA256\x18\x03 \x01(\fR\x12thumbnailEncSHA256\x12\x1a\n" + + "\bmediaKey\x18\x04 \x01(\fR\bmediaKey\x12,\n" + + "\x11mediaKeyTimestamp\x18\x05 \x01(\x03R\x11mediaKeyTimestamp\x12(\n" + + "\x0fthumbnailHeight\x18\x06 \x01(\rR\x0fthumbnailHeight\x12&\n" + + "\x0ethumbnailWidth\x18\a \x01(\rR\x0ethumbnailWidth\"\xdb\x03\n" + + "\x0fLocationMessage\x12(\n" + + "\x0fdegreesLatitude\x18\x01 \x01(\x01R\x0fdegreesLatitude\x12*\n" + + "\x10degreesLongitude\x18\x02 \x01(\x01R\x10degreesLongitude\x12\x12\n" + + "\x04name\x18\x03 \x01(\tR\x04name\x12\x18\n" + + "\aaddress\x18\x04 \x01(\tR\aaddress\x12\x10\n" + + "\x03URL\x18\x05 \x01(\tR\x03URL\x12\x16\n" + + "\x06isLive\x18\x06 \x01(\bR\x06isLive\x12*\n" + + "\x10accuracyInMeters\x18\a \x01(\rR\x10accuracyInMeters\x12\x1e\n" + + "\n" + + "speedInMps\x18\b \x01(\x02R\n" + + "speedInMps\x12L\n" + + "!degreesClockwiseFromMagneticNorth\x18\t \x01(\rR!degreesClockwiseFromMagneticNorth\x12\x18\n" + + "\acomment\x18\v \x01(\tR\acomment\x12$\n" + + "\rJPEGThumbnail\x18\x10 \x01(\fR\rJPEGThumbnail\x12@\n" + + "\vcontextInfo\x18\x11 \x01(\v2\x1e.WAWebProtobufsE2E.ContextInfoR\vcontextInfo\"\xb0\x01\n" + + "\x0eContactMessage\x12 \n" + + "\vdisplayName\x18\x01 \x01(\tR\vdisplayName\x12\x14\n" + + "\x05vcard\x18\x10 \x01(\tR\x05vcard\x12@\n" + + "\vcontextInfo\x18\x11 \x01(\v2\x1e.WAWebProtobufsE2E.ContextInfoR\vcontextInfo\x12$\n" + + "\risSelfContact\x18\x12 \x01(\bR\risSelfContact\"\x8a\x01\n" + + "\x1cSenderKeyDistributionMessage\x12\x18\n" + + "\agroupID\x18\x01 \x01(\tR\agroupID\x12P\n" + + "#axolotlSenderKeyDistributionMessage\x18\x02 \x01(\fR#axolotlSenderKeyDistributionMessage\"\xa0\x01\n" + + "\fVideoEndCard\x12\x1a\n" + + "\busername\x18\x01 \x02(\tR\busername\x12\x18\n" + + "\acaption\x18\x02 \x02(\tR\acaption\x12,\n" + + "\x11thumbnailImageURL\x18\x03 \x02(\tR\x11thumbnailImageURL\x12,\n" + + "\x11profilePictureURL\x18\x04 \x02(\tR\x11profilePictureURL\"\x80\x01\n" + + "\x0fMediaDomainInfo\x12I\n" + + "\x0emediaKeyDomain\x18\x01 \x01(\x0e2!.WAWebProtobufsE2E.MediaKeyDomainR\x0emediaKeyDomain\x12\"\n" + + "\fe2EeMediaKey\x18\x02 \x01(\fR\fe2EeMediaKey\"\xba\x03\n" + + "\x12DeviceListMetadata\x12$\n" + + "\rsenderKeyHash\x18\x01 \x01(\fR\rsenderKeyHash\x12(\n" + + "\x0fsenderTimestamp\x18\x02 \x01(\x04R\x0fsenderTimestamp\x12.\n" + + "\x10senderKeyIndexes\x18\x03 \x03(\rB\x02\x10\x01R\x10senderKeyIndexes\x12F\n" + + "\x11senderAccountType\x18\x04 \x01(\x0e2\x18.WAAdv.ADVEncryptionTypeR\x11senderAccountType\x12J\n" + + "\x13receiverAccountType\x18\x05 \x01(\x0e2\x18.WAAdv.ADVEncryptionTypeR\x13receiverAccountType\x12*\n" + + "\x10recipientKeyHash\x18\b \x01(\fR\x10recipientKeyHash\x12.\n" + + "\x12recipientTimestamp\x18\t \x01(\x04R\x12recipientTimestamp\x124\n" + + "\x13recipientKeyIndexes\x18\n" + + " \x03(\rB\x02\x10\x01R\x13recipientKeyIndexes\"c\n" + + "\x0fEmbeddedMessage\x12\x1a\n" + + "\bstanzaID\x18\x01 \x01(\tR\bstanzaID\x124\n" + + "\amessage\x18\x02 \x01(\v2\x1a.WAWebProtobufsE2E.MessageR\amessage\"\xd7\x04\n" + + "\rEmbeddedMusic\x120\n" + + "\x13musicContentMediaID\x18\x01 \x01(\tR\x13musicContentMediaID\x12\x16\n" + + "\x06songID\x18\x02 \x01(\tR\x06songID\x12\x16\n" + + "\x06author\x18\x03 \x01(\tR\x06author\x12\x14\n" + + "\x05title\x18\x04 \x01(\tR\x05title\x12,\n" + + "\x11artworkDirectPath\x18\x05 \x01(\tR\x11artworkDirectPath\x12$\n" + + "\rartworkSHA256\x18\x06 \x01(\fR\rartworkSHA256\x12*\n" + + "\x10artworkEncSHA256\x18\a \x01(\fR\x10artworkEncSHA256\x12,\n" + + "\x11artistAttribution\x18\b \x01(\tR\x11artistAttribution\x12*\n" + + "\x10countryBlocklist\x18\t \x01(\fR\x10countryBlocklist\x12\x1e\n" + + "\n" + + "isExplicit\x18\n" + + " \x01(\bR\n" + + "isExplicit\x12(\n" + + "\x0fartworkMediaKey\x18\v \x01(\fR\x0fartworkMediaKey\x126\n" + + "\x16musicSongStartTimeInMS\x18\f \x01(\x03R\x16musicSongStartTimeInMS\x12@\n" + + "\x1bderivedContentStartTimeInMS\x18\r \x01(\x03R\x1bderivedContentStartTimeInMS\x120\n" + + "\x13overlapDurationInMS\x18\x0e \x01(\x03R\x13overlapDurationInMS\"\xb6\x01\n" + + "\x0fEmbeddedContent\x12N\n" + + "\x0fembeddedMessage\x18\x01 \x01(\v2\".WAWebProtobufsE2E.EmbeddedMessageH\x00R\x0fembeddedMessage\x12H\n" + + "\rembeddedMusic\x18\x02 \x01(\v2 .WAWebProtobufsE2E.EmbeddedMusicH\x00R\rembeddedMusicB\t\n" + + "\acontent\"=\n" + + "\rTapLinkAction\x12\x14\n" + + "\x05title\x18\x01 \x01(\tR\x05title\x12\x16\n" + + "\x06tapURL\x18\x02 \x01(\tR\x06tapURL\"g\n" + + "\x05Point\x12 \n" + + "\vxDeprecated\x18\x01 \x01(\x05R\vxDeprecated\x12 \n" + + "\vyDeprecated\x18\x02 \x01(\x05R\vyDeprecated\x12\f\n" + + "\x01x\x18\x03 \x01(\x01R\x01x\x12\f\n" + + "\x01y\x18\x04 \x01(\x01R\x01y\"t\n" + + "\bLocation\x12(\n" + + "\x0fdegreesLatitude\x18\x01 \x01(\x01R\x0fdegreesLatitude\x12*\n" + + "\x10degreesLongitude\x18\x02 \x01(\x01R\x10degreesLongitude\x12\x12\n" + + "\x04name\x18\x03 \x01(\tR\x04name\"\xe6\x05\n" + + "\x0eTemplateButton\x12`\n" + + "\x10quickReplyButton\x18\x01 \x01(\v22.WAWebProtobufsE2E.TemplateButton.QuickReplyButtonH\x00R\x10quickReplyButton\x12K\n" + + "\turlButton\x18\x02 \x01(\v2+.WAWebProtobufsE2E.TemplateButton.URLButtonH\x00R\turlButton\x12N\n" + + "\n" + + "callButton\x18\x03 \x01(\v2,.WAWebProtobufsE2E.TemplateButton.CallButtonH\x00R\n" + + "callButton\x12\x14\n" + + "\x05index\x18\x04 \x01(\rR\x05index\x1a\xa8\x01\n" + + "\n" + + "CallButton\x12L\n" + + "\vdisplayText\x18\x01 \x01(\v2*.WAWebProtobufsE2E.HighlyStructuredMessageR\vdisplayText\x12L\n" + + "\vphoneNumber\x18\x02 \x01(\v2*.WAWebProtobufsE2E.HighlyStructuredMessageR\vphoneNumber\x1a\x97\x01\n" + + "\tURLButton\x12L\n" + + "\vdisplayText\x18\x01 \x01(\v2*.WAWebProtobufsE2E.HighlyStructuredMessageR\vdisplayText\x12<\n" + + "\x03URL\x18\x02 \x01(\v2*.WAWebProtobufsE2E.HighlyStructuredMessageR\x03URL\x1ap\n" + + "\x10QuickReplyButton\x12L\n" + + "\vdisplayText\x18\x01 \x01(\v2*.WAWebProtobufsE2E.HighlyStructuredMessageR\vdisplayText\x12\x0e\n" + + "\x02ID\x18\x02 \x01(\tR\x02IDB\b\n" + + "\x06button\"Y\n" + + "\x05Money\x12\x14\n" + + "\x05value\x18\x01 \x01(\x03R\x05value\x12\x16\n" + + "\x06offset\x18\x02 \x01(\rR\x06offset\x12\"\n" + + "\fcurrencyCode\x18\x03 \x01(\tR\fcurrencyCode\"@\n" + + "\n" + + "ActionLink\x12\x10\n" + + "\x03URL\x18\x01 \x01(\tR\x03URL\x12 \n" + + "\vbuttonTitle\x18\x02 \x01(\tR\vbuttonTitle\"N\n" + + "\fGroupMention\x12\x1a\n" + + "\bgroupJID\x18\x01 \x01(\tR\bgroupJID\x12\"\n" + + "\fgroupSubject\x18\x02 \x01(\tR\fgroupSubject\"f\n" + + "\x14MessageSecretMessage\x12\x18\n" + + "\aversion\x18\x01 \x01(\x0fR\aversion\x12\x14\n" + + "\x05encIV\x18\x02 \x01(\fR\x05encIV\x12\x1e\n" + + "\n" + + "encPayload\x18\x03 \x01(\fR\n" + + "encPayload\"\x82\x01\n" + + "\x12MediaNotifyMessage\x12&\n" + + "\x0eexpressPathURL\x18\x01 \x01(\tR\x0eexpressPathURL\x12$\n" + + "\rfileEncSHA256\x18\x02 \x01(\fR\rfileEncSHA256\x12\x1e\n" + + "\n" + + "fileLength\x18\x03 \x01(\x04R\n" + + "fileLength\"V\n" + + "\x1eLIDMigrationMappingSyncMessage\x124\n" + + "\x15encodedMappingPayload\x18\x01 \x01(\fR\x15encodedMappingPayload\"\xbb\x02\n" + + "\x0eUrlTrackingMap\x12o\n" + + "\x16urlTrackingMapElements\x18\x01 \x03(\v27.WAWebProtobufsE2E.UrlTrackingMap.UrlTrackingMapElementR\x16urlTrackingMapElements\x1a\xb7\x01\n" + + "\x15UrlTrackingMapElement\x12 \n" + + "\voriginalURL\x18\x01 \x01(\tR\voriginalURL\x120\n" + + "\x13unconsentedUsersURL\x18\x02 \x01(\tR\x13unconsentedUsersURL\x12,\n" + + "\x11consentedUsersURL\x18\x03 \x01(\tR\x11consentedUsersURL\x12\x1c\n" + + "\tcardIndex\x18\x04 \x01(\rR\tcardIndex\"K\n" + + "\vMemberLabel\x12\x14\n" + + "\x05label\x18\x01 \x01(\tR\x05label\x12&\n" + + "\x0elabelTimestamp\x18\x02 \x01(\x03R\x0elabelTimestamp\"\xe3\x02\n" + + "\x15AIRichResponseMessage\x12S\n" + + "\vmessageType\x18\x01 \x01(\x0e21.WAWebProtobufsAICommon.AIRichResponseMessageTypeR\vmessageType\x12R\n" + + "\vsubmessages\x18\x02 \x03(\v20.WAWebProtobufsAICommon.AIRichResponseSubMessageR\vsubmessages\x12_\n" + + "\x0funifiedResponse\x18\x03 \x01(\v25.WAWebProtobufsAICommon.AIRichResponseUnifiedResponseR\x0funifiedResponse\x12@\n" + + "\vcontextInfo\x18\x04 \x01(\v2\x1e.WAWebProtobufsE2E.ContextInfoR\vcontextInfo\"\x99\x01\n" + + "\rAIQueryFanout\x124\n" + + "\n" + + "messageKey\x18\x01 \x01(\v2\x14.WACommon.MessageKeyR\n" + + "messageKey\x124\n" + + "\amessage\x18\x02 \x01(\v2\x1a.WAWebProtobufsE2E.MessageR\amessage\x12\x1c\n" + + "\ttimestamp\x18\x03 \x01(\x03R\ttimestamp*\x1e\n" + + "\bPollType\x12\b\n" + + "\x04POLL\x10\x00\x12\b\n" + + "\x04QUIZ\x10\x01*E\n" + + "\x0fPollContentType\x12\x1d\n" + + "\x19UNKNOWN_POLL_CONTENT_TYPE\x10\x00\x12\b\n" + + "\x04TEXT\x10\x01\x12\t\n" + + "\x05IMAGE\x10\x02*\x9a\x03\n" + + "\x1cPeerDataOperationRequestType\x12\x12\n" + + "\x0eUPLOAD_STICKER\x10\x00\x12!\n" + + "\x1dSEND_RECENT_STICKER_BOOTSTRAP\x10\x01\x12\x19\n" + + "\x15GENERATE_LINK_PREVIEW\x10\x02\x12\x1a\n" + + "\x16HISTORY_SYNC_ON_DEMAND\x10\x03\x12\x1e\n" + + "\x1aPLACEHOLDER_MESSAGE_RESEND\x10\x04\x12\x1e\n" + + "\x1aWAFFLE_LINKING_NONCE_FETCH\x10\x05\x12\x1f\n" + + "\x1bFULL_HISTORY_SYNC_ON_DEMAND\x10\x06\x12\x1e\n" + + "\x1aCOMPANION_META_NONCE_FETCH\x10\a\x12+\n" + + "'COMPANION_SYNCD_SNAPSHOT_FATAL_RECOVERY\x10\b\x12(\n" + + "$COMPANION_CANONICAL_USER_NONCE_FETCH\x10\t\x12\x1c\n" + + "\x18HISTORY_SYNC_CHUNK_RETRY\x10\n" + + "\x12\x16\n" + + "\x12GALAXY_FLOW_ACTION\x10\v*\xb5\x01\n" + + "\x0fHistorySyncType\x12\x15\n" + + "\x11INITIAL_BOOTSTRAP\x10\x00\x12\x15\n" + + "\x11INITIAL_STATUS_V3\x10\x01\x12\b\n" + + "\x04FULL\x10\x02\x12\n" + + "\n" + + "\x06RECENT\x10\x03\x12\r\n" + + "\tPUSH_NAME\x10\x04\x12\x15\n" + + "\x11NON_BLOCKING_DATA\x10\x05\x12\r\n" + + "\tON_DEMAND\x10\x06\x12\x0e\n" + + "\n" + + "NO_HISTORY\x10\a\x12\x19\n" + + "\x15MESSAGE_ACCESS_STATUS\x10\b*h\n" + + "\x0eMediaKeyDomain\x12\x1c\n" + + "\x18MEDIA_KEY_DOMAIN_UNKNOWN\x10\x00\x12\x19\n" + + "\x15MEDIA_KEY_DOMAIN_E2EE\x10\x01\x12\x1d\n" + + "\x19MEDIA_KEY_DOMAIN_NON_E2EE\x10\x02*.\n" + + "\x13WebLinkRenderConfig\x12\v\n" + + "\aWEBVIEW\x10\x00\x12\n" + + "\n" + + "\x06SYSTEM\x10\x01*J\n" + + "\bKeepType\x12\x15\n" + + "\x11UNKNOWN_KEEP_TYPE\x10\x00\x12\x10\n" + + "\fKEEP_FOR_ALL\x10\x01\x12\x15\n" + + "\x11UNDO_KEEP_FOR_ALL\x10\x02B!Z\x1fgo.mau.fi/whatsmeow/proto/waE2E" var ( file_waE2E_WAWebProtobufsE2E_proto_rawDescOnce sync.Once - file_waE2E_WAWebProtobufsE2E_proto_rawDescData = file_waE2E_WAWebProtobufsE2E_proto_rawDesc + file_waE2E_WAWebProtobufsE2E_proto_rawDescData []byte ) func file_waE2E_WAWebProtobufsE2E_proto_rawDescGZIP() []byte { file_waE2E_WAWebProtobufsE2E_proto_rawDescOnce.Do(func() { - file_waE2E_WAWebProtobufsE2E_proto_rawDescData = protoimpl.X.CompressGZIP(file_waE2E_WAWebProtobufsE2E_proto_rawDescData) + file_waE2E_WAWebProtobufsE2E_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_waE2E_WAWebProtobufsE2E_proto_rawDesc), len(file_waE2E_WAWebProtobufsE2E_proto_rawDesc))) }) return file_waE2E_WAWebProtobufsE2E_proto_rawDescData } -var file_waE2E_WAWebProtobufsE2E_proto_enumTypes = make([]protoimpl.EnumInfo, 57) -var file_waE2E_WAWebProtobufsE2E_proto_msgTypes = make([]protoimpl.MessageInfo, 166) +var file_waE2E_WAWebProtobufsE2E_proto_enumTypes = make([]protoimpl.EnumInfo, 69) +var file_waE2E_WAWebProtobufsE2E_proto_msgTypes = make([]protoimpl.MessageInfo, 198) var file_waE2E_WAWebProtobufsE2E_proto_goTypes = []any{ - (PeerDataOperationRequestType)(0), // 0: WAWebProtobufsE2E.PeerDataOperationRequestType - (SessionSource)(0), // 1: WAWebProtobufsE2E.SessionSource - (KeepType)(0), // 2: WAWebProtobufsE2E.KeepType - (PlaceholderMessage_PlaceholderType)(0), // 3: WAWebProtobufsE2E.PlaceholderMessage.PlaceholderType - (BCallMessage_MediaType)(0), // 4: WAWebProtobufsE2E.BCallMessage.MediaType - (CallLogMessage_CallOutcome)(0), // 5: WAWebProtobufsE2E.CallLogMessage.CallOutcome - (CallLogMessage_CallType)(0), // 6: WAWebProtobufsE2E.CallLogMessage.CallType - (ScheduledCallEditMessage_EditType)(0), // 7: WAWebProtobufsE2E.ScheduledCallEditMessage.EditType - (ScheduledCallCreationMessage_CallType)(0), // 8: WAWebProtobufsE2E.ScheduledCallCreationMessage.CallType - (EventResponseMessage_EventResponseType)(0), // 9: WAWebProtobufsE2E.EventResponseMessage.EventResponseType - (PinInChatMessage_Type)(0), // 10: WAWebProtobufsE2E.PinInChatMessage.Type - (ButtonsResponseMessage_Type)(0), // 11: WAWebProtobufsE2E.ButtonsResponseMessage.Type - (ButtonsMessage_HeaderType)(0), // 12: WAWebProtobufsE2E.ButtonsMessage.HeaderType - (ButtonsMessage_Button_Type)(0), // 13: WAWebProtobufsE2E.ButtonsMessage.Button.Type - (SecretEncryptedMessage_SecretEncType)(0), // 14: WAWebProtobufsE2E.SecretEncryptedMessage.SecretEncType - (GroupInviteMessage_GroupType)(0), // 15: WAWebProtobufsE2E.GroupInviteMessage.GroupType - (InteractiveResponseMessage_Body_Format)(0), // 16: WAWebProtobufsE2E.InteractiveResponseMessage.Body.Format - (InteractiveMessage_ShopMessage_Surface)(0), // 17: WAWebProtobufsE2E.InteractiveMessage.ShopMessage.Surface - (ListResponseMessage_ListType)(0), // 18: WAWebProtobufsE2E.ListResponseMessage.ListType - (ListMessage_ListType)(0), // 19: WAWebProtobufsE2E.ListMessage.ListType - (OrderMessage_OrderSurface)(0), // 20: WAWebProtobufsE2E.OrderMessage.OrderSurface - (OrderMessage_OrderStatus)(0), // 21: WAWebProtobufsE2E.OrderMessage.OrderStatus - (PaymentInviteMessage_ServiceType)(0), // 22: WAWebProtobufsE2E.PaymentInviteMessage.ServiceType - (HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeComponent_CalendarType)(0), // 23: WAWebProtobufsE2E.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime.HSMDateTimeComponent.CalendarType - (HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeComponent_DayOfWeekType)(0), // 24: WAWebProtobufsE2E.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime.HSMDateTimeComponent.DayOfWeekType - (PeerDataOperationRequestResponseMessage_PeerDataOperationResult_FullHistorySyncOnDemandResponseCode)(0), // 25: WAWebProtobufsE2E.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.FullHistorySyncOnDemandResponseCode - (HistorySyncNotification_HistorySyncType)(0), // 26: WAWebProtobufsE2E.HistorySyncNotification.HistorySyncType - (RequestWelcomeMessageMetadata_LocalChatState)(0), // 27: WAWebProtobufsE2E.RequestWelcomeMessageMetadata.LocalChatState - (ProtocolMessage_Type)(0), // 28: WAWebProtobufsE2E.ProtocolMessage.Type - (CloudAPIThreadControlNotification_CloudAPIThreadControl)(0), // 29: WAWebProtobufsE2E.CloudAPIThreadControlNotification.CloudAPIThreadControl - (BotFeedbackMessage_ReportKind)(0), // 30: WAWebProtobufsE2E.BotFeedbackMessage.ReportKind - (BotFeedbackMessage_BotFeedbackKindMultiplePositive)(0), // 31: WAWebProtobufsE2E.BotFeedbackMessage.BotFeedbackKindMultiplePositive - (BotFeedbackMessage_BotFeedbackKindMultipleNegative)(0), // 32: WAWebProtobufsE2E.BotFeedbackMessage.BotFeedbackKindMultipleNegative - (BotFeedbackMessage_BotFeedbackKind)(0), // 33: WAWebProtobufsE2E.BotFeedbackMessage.BotFeedbackKind - (VideoMessage_Attribution)(0), // 34: WAWebProtobufsE2E.VideoMessage.Attribution - (ExtendedTextMessage_InviteLinkGroupType)(0), // 35: WAWebProtobufsE2E.ExtendedTextMessage.InviteLinkGroupType - (ExtendedTextMessage_PreviewType)(0), // 36: WAWebProtobufsE2E.ExtendedTextMessage.PreviewType - (ExtendedTextMessage_FontType)(0), // 37: WAWebProtobufsE2E.ExtendedTextMessage.FontType - (InvoiceMessage_AttachmentType)(0), // 38: WAWebProtobufsE2E.InvoiceMessage.AttachmentType - (ImageMessage_ImageSourceType)(0), // 39: WAWebProtobufsE2E.ImageMessage.ImageSourceType - (ContextInfo_ForwardedNewsletterMessageInfo_ContentType)(0), // 40: WAWebProtobufsE2E.ContextInfo.ForwardedNewsletterMessageInfo.ContentType - (ContextInfo_ExternalAdReplyInfo_MediaType)(0), // 41: WAWebProtobufsE2E.ContextInfo.ExternalAdReplyInfo.MediaType - (ContextInfo_AdReplyInfo_MediaType)(0), // 42: WAWebProtobufsE2E.ContextInfo.AdReplyInfo.MediaType - (BotPluginMetadata_PluginType)(0), // 43: WAWebProtobufsE2E.BotPluginMetadata.PluginType - (BotPluginMetadata_SearchProvider)(0), // 44: WAWebProtobufsE2E.BotPluginMetadata.SearchProvider - (BotMediaMetadata_OrientationType)(0), // 45: WAWebProtobufsE2E.BotMediaMetadata.OrientationType - (BotReminderMetadata_ReminderFrequency)(0), // 46: WAWebProtobufsE2E.BotReminderMetadata.ReminderFrequency - (BotReminderMetadata_ReminderAction)(0), // 47: WAWebProtobufsE2E.BotReminderMetadata.ReminderAction - (BotModelMetadata_PremiumModelStatus)(0), // 48: WAWebProtobufsE2E.BotModelMetadata.PremiumModelStatus - (BotModelMetadata_ModelType)(0), // 49: WAWebProtobufsE2E.BotModelMetadata.ModelType - (MessageAssociation_AssociationType)(0), // 50: WAWebProtobufsE2E.MessageAssociation.AssociationType - (MessageContextInfo_MessageAddonExpiryType)(0), // 51: WAWebProtobufsE2E.MessageContextInfo.MessageAddonExpiryType - (HydratedTemplateButton_HydratedURLButton_WebviewPresentationType)(0), // 52: WAWebProtobufsE2E.HydratedTemplateButton.HydratedURLButton.WebviewPresentationType - (PaymentBackground_Type)(0), // 53: WAWebProtobufsE2E.PaymentBackground.Type - (DisappearingMode_Trigger)(0), // 54: WAWebProtobufsE2E.DisappearingMode.Trigger - (DisappearingMode_Initiator)(0), // 55: WAWebProtobufsE2E.DisappearingMode.Initiator - (ProcessedVideo_VideoQuality)(0), // 56: WAWebProtobufsE2E.ProcessedVideo.VideoQuality - (*PlaceholderMessage)(nil), // 57: WAWebProtobufsE2E.PlaceholderMessage - (*BCallMessage)(nil), // 58: WAWebProtobufsE2E.BCallMessage - (*CallLogMessage)(nil), // 59: WAWebProtobufsE2E.CallLogMessage - (*ScheduledCallEditMessage)(nil), // 60: WAWebProtobufsE2E.ScheduledCallEditMessage - (*ScheduledCallCreationMessage)(nil), // 61: WAWebProtobufsE2E.ScheduledCallCreationMessage - (*EventResponseMessage)(nil), // 62: WAWebProtobufsE2E.EventResponseMessage - (*PinInChatMessage)(nil), // 63: WAWebProtobufsE2E.PinInChatMessage - (*ButtonsResponseMessage)(nil), // 64: WAWebProtobufsE2E.ButtonsResponseMessage - (*ButtonsMessage)(nil), // 65: WAWebProtobufsE2E.ButtonsMessage - (*SecretEncryptedMessage)(nil), // 66: WAWebProtobufsE2E.SecretEncryptedMessage - (*GroupInviteMessage)(nil), // 67: WAWebProtobufsE2E.GroupInviteMessage - (*InteractiveResponseMessage)(nil), // 68: WAWebProtobufsE2E.InteractiveResponseMessage - (*InteractiveMessage)(nil), // 69: WAWebProtobufsE2E.InteractiveMessage - (*ListResponseMessage)(nil), // 70: WAWebProtobufsE2E.ListResponseMessage - (*ListMessage)(nil), // 71: WAWebProtobufsE2E.ListMessage - (*OrderMessage)(nil), // 72: WAWebProtobufsE2E.OrderMessage - (*PaymentInviteMessage)(nil), // 73: WAWebProtobufsE2E.PaymentInviteMessage - (*HighlyStructuredMessage)(nil), // 74: WAWebProtobufsE2E.HighlyStructuredMessage - (*PeerDataOperationRequestResponseMessage)(nil), // 75: WAWebProtobufsE2E.PeerDataOperationRequestResponseMessage - (*HistorySyncNotification)(nil), // 76: WAWebProtobufsE2E.HistorySyncNotification - (*RequestWelcomeMessageMetadata)(nil), // 77: WAWebProtobufsE2E.RequestWelcomeMessageMetadata - (*ProtocolMessage)(nil), // 78: WAWebProtobufsE2E.ProtocolMessage - (*CloudAPIThreadControlNotification)(nil), // 79: WAWebProtobufsE2E.CloudAPIThreadControlNotification - (*BotFeedbackMessage)(nil), // 80: WAWebProtobufsE2E.BotFeedbackMessage - (*VideoMessage)(nil), // 81: WAWebProtobufsE2E.VideoMessage - (*ExtendedTextMessage)(nil), // 82: WAWebProtobufsE2E.ExtendedTextMessage - (*InvoiceMessage)(nil), // 83: WAWebProtobufsE2E.InvoiceMessage - (*ImageMessage)(nil), // 84: WAWebProtobufsE2E.ImageMessage - (*ContextInfo)(nil), // 85: WAWebProtobufsE2E.ContextInfo - (*BotPluginMetadata)(nil), // 86: WAWebProtobufsE2E.BotPluginMetadata - (*BotMediaMetadata)(nil), // 87: WAWebProtobufsE2E.BotMediaMetadata - (*BotReminderMetadata)(nil), // 88: WAWebProtobufsE2E.BotReminderMetadata - (*BotModelMetadata)(nil), // 89: WAWebProtobufsE2E.BotModelMetadata - (*MessageAssociation)(nil), // 90: WAWebProtobufsE2E.MessageAssociation - (*MessageContextInfo)(nil), // 91: WAWebProtobufsE2E.MessageContextInfo - (*HydratedTemplateButton)(nil), // 92: WAWebProtobufsE2E.HydratedTemplateButton - (*PaymentBackground)(nil), // 93: WAWebProtobufsE2E.PaymentBackground - (*DisappearingMode)(nil), // 94: WAWebProtobufsE2E.DisappearingMode - (*ProcessedVideo)(nil), // 95: WAWebProtobufsE2E.ProcessedVideo - (*Message)(nil), // 96: WAWebProtobufsE2E.Message - (*StickerPackMessage)(nil), // 97: WAWebProtobufsE2E.StickerPackMessage - (*AlbumMessage)(nil), // 98: WAWebProtobufsE2E.AlbumMessage - (*MessageHistoryBundle)(nil), // 99: WAWebProtobufsE2E.MessageHistoryBundle - (*EncEventResponseMessage)(nil), // 100: WAWebProtobufsE2E.EncEventResponseMessage - (*EventMessage)(nil), // 101: WAWebProtobufsE2E.EventMessage - (*CommentMessage)(nil), // 102: WAWebProtobufsE2E.CommentMessage - (*EncCommentMessage)(nil), // 103: WAWebProtobufsE2E.EncCommentMessage - (*EncReactionMessage)(nil), // 104: WAWebProtobufsE2E.EncReactionMessage - (*KeepInChatMessage)(nil), // 105: WAWebProtobufsE2E.KeepInChatMessage - (*PollResultSnapshotMessage)(nil), // 106: WAWebProtobufsE2E.PollResultSnapshotMessage - (*PollVoteMessage)(nil), // 107: WAWebProtobufsE2E.PollVoteMessage - (*PollEncValue)(nil), // 108: WAWebProtobufsE2E.PollEncValue - (*PollUpdateMessageMetadata)(nil), // 109: WAWebProtobufsE2E.PollUpdateMessageMetadata - (*PollUpdateMessage)(nil), // 110: WAWebProtobufsE2E.PollUpdateMessage - (*PollCreationMessage)(nil), // 111: WAWebProtobufsE2E.PollCreationMessage - (*StickerSyncRMRMessage)(nil), // 112: WAWebProtobufsE2E.StickerSyncRMRMessage - (*ReactionMessage)(nil), // 113: WAWebProtobufsE2E.ReactionMessage - (*FutureProofMessage)(nil), // 114: WAWebProtobufsE2E.FutureProofMessage - (*DeviceSentMessage)(nil), // 115: WAWebProtobufsE2E.DeviceSentMessage - (*RequestPhoneNumberMessage)(nil), // 116: WAWebProtobufsE2E.RequestPhoneNumberMessage - (*NewsletterAdminInviteMessage)(nil), // 117: WAWebProtobufsE2E.NewsletterAdminInviteMessage - (*ProductMessage)(nil), // 118: WAWebProtobufsE2E.ProductMessage - (*TemplateButtonReplyMessage)(nil), // 119: WAWebProtobufsE2E.TemplateButtonReplyMessage - (*TemplateMessage)(nil), // 120: WAWebProtobufsE2E.TemplateMessage - (*StickerMessage)(nil), // 121: WAWebProtobufsE2E.StickerMessage - (*LiveLocationMessage)(nil), // 122: WAWebProtobufsE2E.LiveLocationMessage - (*CancelPaymentRequestMessage)(nil), // 123: WAWebProtobufsE2E.CancelPaymentRequestMessage - (*DeclinePaymentRequestMessage)(nil), // 124: WAWebProtobufsE2E.DeclinePaymentRequestMessage - (*RequestPaymentMessage)(nil), // 125: WAWebProtobufsE2E.RequestPaymentMessage - (*SendPaymentMessage)(nil), // 126: WAWebProtobufsE2E.SendPaymentMessage - (*ContactsArrayMessage)(nil), // 127: WAWebProtobufsE2E.ContactsArrayMessage - (*InitialSecurityNotificationSettingSync)(nil), // 128: WAWebProtobufsE2E.InitialSecurityNotificationSettingSync - (*PeerDataOperationRequestMessage)(nil), // 129: WAWebProtobufsE2E.PeerDataOperationRequestMessage - (*FullHistorySyncOnDemandRequestMetadata)(nil), // 130: WAWebProtobufsE2E.FullHistorySyncOnDemandRequestMetadata - (*AppStateFatalExceptionNotification)(nil), // 131: WAWebProtobufsE2E.AppStateFatalExceptionNotification - (*AppStateSyncKeyRequest)(nil), // 132: WAWebProtobufsE2E.AppStateSyncKeyRequest - (*AppStateSyncKeyShare)(nil), // 133: WAWebProtobufsE2E.AppStateSyncKeyShare - (*AppStateSyncKeyData)(nil), // 134: WAWebProtobufsE2E.AppStateSyncKeyData - (*AppStateSyncKeyFingerprint)(nil), // 135: WAWebProtobufsE2E.AppStateSyncKeyFingerprint - (*AppStateSyncKeyId)(nil), // 136: WAWebProtobufsE2E.AppStateSyncKeyId - (*AppStateSyncKey)(nil), // 137: WAWebProtobufsE2E.AppStateSyncKey - (*Chat)(nil), // 138: WAWebProtobufsE2E.Chat - (*Call)(nil), // 139: WAWebProtobufsE2E.Call - (*AudioMessage)(nil), // 140: WAWebProtobufsE2E.AudioMessage - (*DocumentMessage)(nil), // 141: WAWebProtobufsE2E.DocumentMessage - (*LocationMessage)(nil), // 142: WAWebProtobufsE2E.LocationMessage - (*ContactMessage)(nil), // 143: WAWebProtobufsE2E.ContactMessage - (*SenderKeyDistributionMessage)(nil), // 144: WAWebProtobufsE2E.SenderKeyDistributionMessage - (*BotAvatarMetadata)(nil), // 145: WAWebProtobufsE2E.BotAvatarMetadata - (*BotSuggestedPromptMetadata)(nil), // 146: WAWebProtobufsE2E.BotSuggestedPromptMetadata - (*BotSessionMetadata)(nil), // 147: WAWebProtobufsE2E.BotSessionMetadata - (*BotMemuMetadata)(nil), // 148: WAWebProtobufsE2E.BotMemuMetadata - (*BotMetadata)(nil), // 149: WAWebProtobufsE2E.BotMetadata - (*DeviceListMetadata)(nil), // 150: WAWebProtobufsE2E.DeviceListMetadata - (*EmbeddedMessage)(nil), // 151: WAWebProtobufsE2E.EmbeddedMessage - (*EmbeddedMusic)(nil), // 152: WAWebProtobufsE2E.EmbeddedMusic - (*EmbeddedContent)(nil), // 153: WAWebProtobufsE2E.EmbeddedContent - (*InteractiveAnnotation)(nil), // 154: WAWebProtobufsE2E.InteractiveAnnotation - (*Point)(nil), // 155: WAWebProtobufsE2E.Point - (*Location)(nil), // 156: WAWebProtobufsE2E.Location - (*TemplateButton)(nil), // 157: WAWebProtobufsE2E.TemplateButton - (*Money)(nil), // 158: WAWebProtobufsE2E.Money - (*ActionLink)(nil), // 159: WAWebProtobufsE2E.ActionLink - (*GroupMention)(nil), // 160: WAWebProtobufsE2E.GroupMention - (*MessageSecretMessage)(nil), // 161: WAWebProtobufsE2E.MessageSecretMessage - (*MediaNotifyMessage)(nil), // 162: WAWebProtobufsE2E.MediaNotifyMessage - (*LIDMigrationMappingSyncMessage)(nil), // 163: WAWebProtobufsE2E.LIDMigrationMappingSyncMessage - (*CallLogMessage_CallParticipant)(nil), // 164: WAWebProtobufsE2E.CallLogMessage.CallParticipant - (*ButtonsMessage_Button)(nil), // 165: WAWebProtobufsE2E.ButtonsMessage.Button - (*ButtonsMessage_Button_NativeFlowInfo)(nil), // 166: WAWebProtobufsE2E.ButtonsMessage.Button.NativeFlowInfo - (*ButtonsMessage_Button_ButtonText)(nil), // 167: WAWebProtobufsE2E.ButtonsMessage.Button.ButtonText - (*InteractiveResponseMessage_Body)(nil), // 168: WAWebProtobufsE2E.InteractiveResponseMessage.Body - (*InteractiveResponseMessage_NativeFlowResponseMessage)(nil), // 169: WAWebProtobufsE2E.InteractiveResponseMessage.NativeFlowResponseMessage - (*InteractiveMessage_ShopMessage)(nil), // 170: WAWebProtobufsE2E.InteractiveMessage.ShopMessage - (*InteractiveMessage_CarouselMessage)(nil), // 171: WAWebProtobufsE2E.InteractiveMessage.CarouselMessage - (*InteractiveMessage_NativeFlowMessage)(nil), // 172: WAWebProtobufsE2E.InteractiveMessage.NativeFlowMessage - (*InteractiveMessage_CollectionMessage)(nil), // 173: WAWebProtobufsE2E.InteractiveMessage.CollectionMessage - (*InteractiveMessage_Footer)(nil), // 174: WAWebProtobufsE2E.InteractiveMessage.Footer - (*InteractiveMessage_Body)(nil), // 175: WAWebProtobufsE2E.InteractiveMessage.Body - (*InteractiveMessage_Header)(nil), // 176: WAWebProtobufsE2E.InteractiveMessage.Header - (*InteractiveMessage_NativeFlowMessage_NativeFlowButton)(nil), // 177: WAWebProtobufsE2E.InteractiveMessage.NativeFlowMessage.NativeFlowButton - (*ListResponseMessage_SingleSelectReply)(nil), // 178: WAWebProtobufsE2E.ListResponseMessage.SingleSelectReply - (*ListMessage_ProductListInfo)(nil), // 179: WAWebProtobufsE2E.ListMessage.ProductListInfo - (*ListMessage_ProductListHeaderImage)(nil), // 180: WAWebProtobufsE2E.ListMessage.ProductListHeaderImage - (*ListMessage_ProductSection)(nil), // 181: WAWebProtobufsE2E.ListMessage.ProductSection - (*ListMessage_Product)(nil), // 182: WAWebProtobufsE2E.ListMessage.Product - (*ListMessage_Section)(nil), // 183: WAWebProtobufsE2E.ListMessage.Section - (*ListMessage_Row)(nil), // 184: WAWebProtobufsE2E.ListMessage.Row - (*HighlyStructuredMessage_HSMLocalizableParameter)(nil), // 185: WAWebProtobufsE2E.HighlyStructuredMessage.HSMLocalizableParameter - (*HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime)(nil), // 186: WAWebProtobufsE2E.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime - (*HighlyStructuredMessage_HSMLocalizableParameter_HSMCurrency)(nil), // 187: WAWebProtobufsE2E.HighlyStructuredMessage.HSMLocalizableParameter.HSMCurrency - (*HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeComponent)(nil), // 188: WAWebProtobufsE2E.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime.HSMDateTimeComponent - (*HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeUnixEpoch)(nil), // 189: WAWebProtobufsE2E.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime.HSMDateTimeUnixEpoch - (*PeerDataOperationRequestResponseMessage_PeerDataOperationResult)(nil), // 190: WAWebProtobufsE2E.PeerDataOperationRequestResponseMessage.PeerDataOperationResult - (*PeerDataOperationRequestResponseMessage_PeerDataOperationResult_WaffleNonceFetchResponse)(nil), // 191: WAWebProtobufsE2E.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.WaffleNonceFetchResponse - (*PeerDataOperationRequestResponseMessage_PeerDataOperationResult_FullHistorySyncOnDemandRequestResponse)(nil), // 192: WAWebProtobufsE2E.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.FullHistorySyncOnDemandRequestResponse - (*PeerDataOperationRequestResponseMessage_PeerDataOperationResult_PlaceholderMessageResendResponse)(nil), // 193: WAWebProtobufsE2E.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.PlaceholderMessageResendResponse - (*PeerDataOperationRequestResponseMessage_PeerDataOperationResult_LinkPreviewResponse)(nil), // 194: WAWebProtobufsE2E.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.LinkPreviewResponse - (*PeerDataOperationRequestResponseMessage_PeerDataOperationResult_LinkPreviewResponse_LinkPreviewHighQualityThumbnail)(nil), // 195: WAWebProtobufsE2E.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.LinkPreviewResponse.LinkPreviewHighQualityThumbnail - (*ContextInfo_ForwardedNewsletterMessageInfo)(nil), // 196: WAWebProtobufsE2E.ContextInfo.ForwardedNewsletterMessageInfo - (*ContextInfo_ExternalAdReplyInfo)(nil), // 197: WAWebProtobufsE2E.ContextInfo.ExternalAdReplyInfo - (*ContextInfo_AdReplyInfo)(nil), // 198: WAWebProtobufsE2E.ContextInfo.AdReplyInfo - (*ContextInfo_FeatureEligibilities)(nil), // 199: WAWebProtobufsE2E.ContextInfo.FeatureEligibilities - (*ContextInfo_DataSharingContext)(nil), // 200: WAWebProtobufsE2E.ContextInfo.DataSharingContext - (*ContextInfo_UTMInfo)(nil), // 201: WAWebProtobufsE2E.ContextInfo.UTMInfo - (*ContextInfo_BusinessMessageForwardInfo)(nil), // 202: WAWebProtobufsE2E.ContextInfo.BusinessMessageForwardInfo - (*ContextInfo_DataSharingContext_Parameters)(nil), // 203: WAWebProtobufsE2E.ContextInfo.DataSharingContext.Parameters - (*HydratedTemplateButton_HydratedURLButton)(nil), // 204: WAWebProtobufsE2E.HydratedTemplateButton.HydratedURLButton - (*HydratedTemplateButton_HydratedCallButton)(nil), // 205: WAWebProtobufsE2E.HydratedTemplateButton.HydratedCallButton - (*HydratedTemplateButton_HydratedQuickReplyButton)(nil), // 206: WAWebProtobufsE2E.HydratedTemplateButton.HydratedQuickReplyButton - (*PaymentBackground_MediaData)(nil), // 207: WAWebProtobufsE2E.PaymentBackground.MediaData - (*StickerPackMessage_Sticker)(nil), // 208: WAWebProtobufsE2E.StickerPackMessage.Sticker - (*PollResultSnapshotMessage_PollVote)(nil), // 209: WAWebProtobufsE2E.PollResultSnapshotMessage.PollVote - (*PollCreationMessage_Option)(nil), // 210: WAWebProtobufsE2E.PollCreationMessage.Option - (*ProductMessage_ProductSnapshot)(nil), // 211: WAWebProtobufsE2E.ProductMessage.ProductSnapshot - (*ProductMessage_CatalogSnapshot)(nil), // 212: WAWebProtobufsE2E.ProductMessage.CatalogSnapshot - (*TemplateMessage_HydratedFourRowTemplate)(nil), // 213: WAWebProtobufsE2E.TemplateMessage.HydratedFourRowTemplate - (*TemplateMessage_FourRowTemplate)(nil), // 214: WAWebProtobufsE2E.TemplateMessage.FourRowTemplate - (*PeerDataOperationRequestMessage_PlaceholderMessageResendRequest)(nil), // 215: WAWebProtobufsE2E.PeerDataOperationRequestMessage.PlaceholderMessageResendRequest - (*PeerDataOperationRequestMessage_FullHistorySyncOnDemandRequest)(nil), // 216: WAWebProtobufsE2E.PeerDataOperationRequestMessage.FullHistorySyncOnDemandRequest - (*PeerDataOperationRequestMessage_HistorySyncOnDemandRequest)(nil), // 217: WAWebProtobufsE2E.PeerDataOperationRequestMessage.HistorySyncOnDemandRequest - (*PeerDataOperationRequestMessage_RequestUrlPreview)(nil), // 218: WAWebProtobufsE2E.PeerDataOperationRequestMessage.RequestUrlPreview - (*PeerDataOperationRequestMessage_RequestStickerReupload)(nil), // 219: WAWebProtobufsE2E.PeerDataOperationRequestMessage.RequestStickerReupload - (*TemplateButton_CallButton)(nil), // 220: WAWebProtobufsE2E.TemplateButton.CallButton - (*TemplateButton_URLButton)(nil), // 221: WAWebProtobufsE2E.TemplateButton.URLButton - (*TemplateButton_QuickReplyButton)(nil), // 222: WAWebProtobufsE2E.TemplateButton.QuickReplyButton - (*waCommon.MessageKey)(nil), // 223: WACommon.MessageKey - (waAdv.ADVEncryptionType)(0), // 224: WAAdv.ADVEncryptionType - (waMmsRetry.MediaRetryNotification_ResultType)(0), // 225: WAMmsRetry.MediaRetryNotification.ResultType - (*waCompanionReg.DeviceProps_HistorySyncConfig)(nil), // 226: WAWebProtobufsCompanionReg.DeviceProps.HistorySyncConfig + (PollType)(0), // 0: WAWebProtobufsE2E.PollType + (PollContentType)(0), // 1: WAWebProtobufsE2E.PollContentType + (PeerDataOperationRequestType)(0), // 2: WAWebProtobufsE2E.PeerDataOperationRequestType + (HistorySyncType)(0), // 3: WAWebProtobufsE2E.HistorySyncType + (MediaKeyDomain)(0), // 4: WAWebProtobufsE2E.MediaKeyDomain + (WebLinkRenderConfig)(0), // 5: WAWebProtobufsE2E.WebLinkRenderConfig + (KeepType)(0), // 6: WAWebProtobufsE2E.KeepType + (StickerPackMessage_StickerPackOrigin)(0), // 7: WAWebProtobufsE2E.StickerPackMessage.StickerPackOrigin + (PlaceholderMessage_PlaceholderType)(0), // 8: WAWebProtobufsE2E.PlaceholderMessage.PlaceholderType + (BCallMessage_MediaType)(0), // 9: WAWebProtobufsE2E.BCallMessage.MediaType + (CallLogMessage_CallOutcome)(0), // 10: WAWebProtobufsE2E.CallLogMessage.CallOutcome + (CallLogMessage_CallType)(0), // 11: WAWebProtobufsE2E.CallLogMessage.CallType + (ScheduledCallEditMessage_EditType)(0), // 12: WAWebProtobufsE2E.ScheduledCallEditMessage.EditType + (ScheduledCallCreationMessage_CallType)(0), // 13: WAWebProtobufsE2E.ScheduledCallCreationMessage.CallType + (EventResponseMessage_EventResponseType)(0), // 14: WAWebProtobufsE2E.EventResponseMessage.EventResponseType + (PinInChatMessage_Type)(0), // 15: WAWebProtobufsE2E.PinInChatMessage.Type + (StatusStickerInteractionMessage_StatusStickerType)(0), // 16: WAWebProtobufsE2E.StatusStickerInteractionMessage.StatusStickerType + (ButtonsResponseMessage_Type)(0), // 17: WAWebProtobufsE2E.ButtonsResponseMessage.Type + (ButtonsMessage_HeaderType)(0), // 18: WAWebProtobufsE2E.ButtonsMessage.HeaderType + (ButtonsMessage_Button_Type)(0), // 19: WAWebProtobufsE2E.ButtonsMessage.Button.Type + (SecretEncryptedMessage_SecretEncType)(0), // 20: WAWebProtobufsE2E.SecretEncryptedMessage.SecretEncType + (GroupInviteMessage_GroupType)(0), // 21: WAWebProtobufsE2E.GroupInviteMessage.GroupType + (InteractiveResponseMessage_Body_Format)(0), // 22: WAWebProtobufsE2E.InteractiveResponseMessage.Body.Format + (InteractiveMessage_CarouselMessage_CarouselCardType)(0), // 23: WAWebProtobufsE2E.InteractiveMessage.CarouselMessage.CarouselCardType + (InteractiveMessage_ShopMessage_Surface)(0), // 24: WAWebProtobufsE2E.InteractiveMessage.ShopMessage.Surface + (ListResponseMessage_ListType)(0), // 25: WAWebProtobufsE2E.ListResponseMessage.ListType + (ListMessage_ListType)(0), // 26: WAWebProtobufsE2E.ListMessage.ListType + (OrderMessage_OrderSurface)(0), // 27: WAWebProtobufsE2E.OrderMessage.OrderSurface + (OrderMessage_OrderStatus)(0), // 28: WAWebProtobufsE2E.OrderMessage.OrderStatus + (StatusQuotedMessage_StatusQuotedMessageType)(0), // 29: WAWebProtobufsE2E.StatusQuotedMessage.StatusQuotedMessageType + (PaymentInviteMessage_ServiceType)(0), // 30: WAWebProtobufsE2E.PaymentInviteMessage.ServiceType + (HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeComponent_CalendarType)(0), // 31: WAWebProtobufsE2E.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime.HSMDateTimeComponent.CalendarType + (HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeComponent_DayOfWeekType)(0), // 32: WAWebProtobufsE2E.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime.HSMDateTimeComponent.DayOfWeekType + (PeerDataOperationRequestResponseMessage_PeerDataOperationResult_HistorySyncChunkRetryResponseCode)(0), // 33: WAWebProtobufsE2E.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.HistorySyncChunkRetryResponseCode + (PeerDataOperationRequestResponseMessage_PeerDataOperationResult_FullHistorySyncOnDemandResponseCode)(0), // 34: WAWebProtobufsE2E.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.FullHistorySyncOnDemandResponseCode + (PeerDataOperationRequestMessage_GalaxyFlowAction_GalaxyFlowActionType)(0), // 35: WAWebProtobufsE2E.PeerDataOperationRequestMessage.GalaxyFlowAction.GalaxyFlowActionType + (RequestWelcomeMessageMetadata_LocalChatState)(0), // 36: WAWebProtobufsE2E.RequestWelcomeMessageMetadata.LocalChatState + (ProtocolMessage_Type)(0), // 37: WAWebProtobufsE2E.ProtocolMessage.Type + (CloudAPIThreadControlNotification_CloudAPIThreadControl)(0), // 38: WAWebProtobufsE2E.CloudAPIThreadControlNotification.CloudAPIThreadControl + (VideoMessage_VideoSourceType)(0), // 39: WAWebProtobufsE2E.VideoMessage.VideoSourceType + (VideoMessage_Attribution)(0), // 40: WAWebProtobufsE2E.VideoMessage.Attribution + (ExtendedTextMessage_InviteLinkGroupType)(0), // 41: WAWebProtobufsE2E.ExtendedTextMessage.InviteLinkGroupType + (ExtendedTextMessage_PreviewType)(0), // 42: WAWebProtobufsE2E.ExtendedTextMessage.PreviewType + (ExtendedTextMessage_FontType)(0), // 43: WAWebProtobufsE2E.ExtendedTextMessage.FontType + (LinkPreviewMetadata_SocialMediaPostType)(0), // 44: WAWebProtobufsE2E.LinkPreviewMetadata.SocialMediaPostType + (PaymentLinkMetadata_PaymentLinkHeader_PaymentLinkHeaderType)(0), // 45: WAWebProtobufsE2E.PaymentLinkMetadata.PaymentLinkHeader.PaymentLinkHeaderType + (StatusNotificationMessage_StatusNotificationType)(0), // 46: WAWebProtobufsE2E.StatusNotificationMessage.StatusNotificationType + (InvoiceMessage_AttachmentType)(0), // 47: WAWebProtobufsE2E.InvoiceMessage.AttachmentType + (ImageMessage_ImageSourceType)(0), // 48: WAWebProtobufsE2E.ImageMessage.ImageSourceType + (ContextInfo_QuotedType)(0), // 49: WAWebProtobufsE2E.ContextInfo.QuotedType + (ContextInfo_ForwardOrigin)(0), // 50: WAWebProtobufsE2E.ContextInfo.ForwardOrigin + (ContextInfo_StatusSourceType)(0), // 51: WAWebProtobufsE2E.ContextInfo.StatusSourceType + (ContextInfo_PairedMediaType)(0), // 52: WAWebProtobufsE2E.ContextInfo.PairedMediaType + (ContextInfo_StatusAttributionType)(0), // 53: WAWebProtobufsE2E.ContextInfo.StatusAttributionType + (ContextInfo_StatusAudienceMetadata_AudienceType)(0), // 54: WAWebProtobufsE2E.ContextInfo.StatusAudienceMetadata.AudienceType + (ContextInfo_DataSharingContext_DataSharingFlags)(0), // 55: WAWebProtobufsE2E.ContextInfo.DataSharingContext.DataSharingFlags + (ContextInfo_ForwardedNewsletterMessageInfo_ContentType)(0), // 56: WAWebProtobufsE2E.ContextInfo.ForwardedNewsletterMessageInfo.ContentType + (ContextInfo_ExternalAdReplyInfo_AdType)(0), // 57: WAWebProtobufsE2E.ContextInfo.ExternalAdReplyInfo.AdType + (ContextInfo_ExternalAdReplyInfo_MediaType)(0), // 58: WAWebProtobufsE2E.ContextInfo.ExternalAdReplyInfo.MediaType + (ContextInfo_AdReplyInfo_MediaType)(0), // 59: WAWebProtobufsE2E.ContextInfo.AdReplyInfo.MediaType + (MessageAssociation_AssociationType)(0), // 60: WAWebProtobufsE2E.MessageAssociation.AssociationType + (ThreadID_ThreadType)(0), // 61: WAWebProtobufsE2E.ThreadID.ThreadType + (MessageContextInfo_MessageAddonExpiryType)(0), // 62: WAWebProtobufsE2E.MessageContextInfo.MessageAddonExpiryType + (InteractiveAnnotation_StatusLinkType)(0), // 63: WAWebProtobufsE2E.InteractiveAnnotation.StatusLinkType + (HydratedTemplateButton_HydratedURLButton_WebviewPresentationType)(0), // 64: WAWebProtobufsE2E.HydratedTemplateButton.HydratedURLButton.WebviewPresentationType + (PaymentBackground_Type)(0), // 65: WAWebProtobufsE2E.PaymentBackground.Type + (DisappearingMode_Trigger)(0), // 66: WAWebProtobufsE2E.DisappearingMode.Trigger + (DisappearingMode_Initiator)(0), // 67: WAWebProtobufsE2E.DisappearingMode.Initiator + (ProcessedVideo_VideoQuality)(0), // 68: WAWebProtobufsE2E.ProcessedVideo.VideoQuality + (*StickerPackMessage)(nil), // 69: WAWebProtobufsE2E.StickerPackMessage + (*PlaceholderMessage)(nil), // 70: WAWebProtobufsE2E.PlaceholderMessage + (*BCallMessage)(nil), // 71: WAWebProtobufsE2E.BCallMessage + (*CallLogMessage)(nil), // 72: WAWebProtobufsE2E.CallLogMessage + (*ScheduledCallEditMessage)(nil), // 73: WAWebProtobufsE2E.ScheduledCallEditMessage + (*ScheduledCallCreationMessage)(nil), // 74: WAWebProtobufsE2E.ScheduledCallCreationMessage + (*EventResponseMessage)(nil), // 75: WAWebProtobufsE2E.EventResponseMessage + (*PinInChatMessage)(nil), // 76: WAWebProtobufsE2E.PinInChatMessage + (*StatusStickerInteractionMessage)(nil), // 77: WAWebProtobufsE2E.StatusStickerInteractionMessage + (*ButtonsResponseMessage)(nil), // 78: WAWebProtobufsE2E.ButtonsResponseMessage + (*ButtonsMessage)(nil), // 79: WAWebProtobufsE2E.ButtonsMessage + (*SecretEncryptedMessage)(nil), // 80: WAWebProtobufsE2E.SecretEncryptedMessage + (*GroupInviteMessage)(nil), // 81: WAWebProtobufsE2E.GroupInviteMessage + (*InteractiveResponseMessage)(nil), // 82: WAWebProtobufsE2E.InteractiveResponseMessage + (*InteractiveMessage)(nil), // 83: WAWebProtobufsE2E.InteractiveMessage + (*ListResponseMessage)(nil), // 84: WAWebProtobufsE2E.ListResponseMessage + (*ListMessage)(nil), // 85: WAWebProtobufsE2E.ListMessage + (*OrderMessage)(nil), // 86: WAWebProtobufsE2E.OrderMessage + (*StatusQuotedMessage)(nil), // 87: WAWebProtobufsE2E.StatusQuotedMessage + (*PaymentInviteMessage)(nil), // 88: WAWebProtobufsE2E.PaymentInviteMessage + (*HighlyStructuredMessage)(nil), // 89: WAWebProtobufsE2E.HighlyStructuredMessage + (*PeerDataOperationRequestResponseMessage)(nil), // 90: WAWebProtobufsE2E.PeerDataOperationRequestResponseMessage + (*PeerDataOperationRequestMessage)(nil), // 91: WAWebProtobufsE2E.PeerDataOperationRequestMessage + (*RequestWelcomeMessageMetadata)(nil), // 92: WAWebProtobufsE2E.RequestWelcomeMessageMetadata + (*ProtocolMessage)(nil), // 93: WAWebProtobufsE2E.ProtocolMessage + (*CloudAPIThreadControlNotification)(nil), // 94: WAWebProtobufsE2E.CloudAPIThreadControlNotification + (*VideoMessage)(nil), // 95: WAWebProtobufsE2E.VideoMessage + (*ExtendedTextMessage)(nil), // 96: WAWebProtobufsE2E.ExtendedTextMessage + (*LinkPreviewMetadata)(nil), // 97: WAWebProtobufsE2E.LinkPreviewMetadata + (*PaymentLinkMetadata)(nil), // 98: WAWebProtobufsE2E.PaymentLinkMetadata + (*StatusNotificationMessage)(nil), // 99: WAWebProtobufsE2E.StatusNotificationMessage + (*InvoiceMessage)(nil), // 100: WAWebProtobufsE2E.InvoiceMessage + (*ImageMessage)(nil), // 101: WAWebProtobufsE2E.ImageMessage + (*ContextInfo)(nil), // 102: WAWebProtobufsE2E.ContextInfo + (*MessageAssociation)(nil), // 103: WAWebProtobufsE2E.MessageAssociation + (*ThreadID)(nil), // 104: WAWebProtobufsE2E.ThreadID + (*MessageContextInfo)(nil), // 105: WAWebProtobufsE2E.MessageContextInfo + (*InteractiveAnnotation)(nil), // 106: WAWebProtobufsE2E.InteractiveAnnotation + (*HydratedTemplateButton)(nil), // 107: WAWebProtobufsE2E.HydratedTemplateButton + (*PaymentBackground)(nil), // 108: WAWebProtobufsE2E.PaymentBackground + (*DisappearingMode)(nil), // 109: WAWebProtobufsE2E.DisappearingMode + (*ProcessedVideo)(nil), // 110: WAWebProtobufsE2E.ProcessedVideo + (*Message)(nil), // 111: WAWebProtobufsE2E.Message + (*AlbumMessage)(nil), // 112: WAWebProtobufsE2E.AlbumMessage + (*MessageHistoryMetadata)(nil), // 113: WAWebProtobufsE2E.MessageHistoryMetadata + (*MessageHistoryNotice)(nil), // 114: WAWebProtobufsE2E.MessageHistoryNotice + (*MessageHistoryBundle)(nil), // 115: WAWebProtobufsE2E.MessageHistoryBundle + (*EncEventResponseMessage)(nil), // 116: WAWebProtobufsE2E.EncEventResponseMessage + (*EventMessage)(nil), // 117: WAWebProtobufsE2E.EventMessage + (*CommentMessage)(nil), // 118: WAWebProtobufsE2E.CommentMessage + (*EncCommentMessage)(nil), // 119: WAWebProtobufsE2E.EncCommentMessage + (*EncReactionMessage)(nil), // 120: WAWebProtobufsE2E.EncReactionMessage + (*KeepInChatMessage)(nil), // 121: WAWebProtobufsE2E.KeepInChatMessage + (*QuestionResponseMessage)(nil), // 122: WAWebProtobufsE2E.QuestionResponseMessage + (*StatusQuestionAnswerMessage)(nil), // 123: WAWebProtobufsE2E.StatusQuestionAnswerMessage + (*PollResultSnapshotMessage)(nil), // 124: WAWebProtobufsE2E.PollResultSnapshotMessage + (*PollVoteMessage)(nil), // 125: WAWebProtobufsE2E.PollVoteMessage + (*PollEncValue)(nil), // 126: WAWebProtobufsE2E.PollEncValue + (*PollUpdateMessageMetadata)(nil), // 127: WAWebProtobufsE2E.PollUpdateMessageMetadata + (*PollUpdateMessage)(nil), // 128: WAWebProtobufsE2E.PollUpdateMessage + (*PollCreationMessage)(nil), // 129: WAWebProtobufsE2E.PollCreationMessage + (*StickerSyncRMRMessage)(nil), // 130: WAWebProtobufsE2E.StickerSyncRMRMessage + (*ReactionMessage)(nil), // 131: WAWebProtobufsE2E.ReactionMessage + (*FutureProofMessage)(nil), // 132: WAWebProtobufsE2E.FutureProofMessage + (*DeviceSentMessage)(nil), // 133: WAWebProtobufsE2E.DeviceSentMessage + (*RequestPhoneNumberMessage)(nil), // 134: WAWebProtobufsE2E.RequestPhoneNumberMessage + (*NewsletterFollowerInviteMessage)(nil), // 135: WAWebProtobufsE2E.NewsletterFollowerInviteMessage + (*NewsletterAdminInviteMessage)(nil), // 136: WAWebProtobufsE2E.NewsletterAdminInviteMessage + (*ProductMessage)(nil), // 137: WAWebProtobufsE2E.ProductMessage + (*TemplateButtonReplyMessage)(nil), // 138: WAWebProtobufsE2E.TemplateButtonReplyMessage + (*TemplateMessage)(nil), // 139: WAWebProtobufsE2E.TemplateMessage + (*StickerMessage)(nil), // 140: WAWebProtobufsE2E.StickerMessage + (*LiveLocationMessage)(nil), // 141: WAWebProtobufsE2E.LiveLocationMessage + (*CancelPaymentRequestMessage)(nil), // 142: WAWebProtobufsE2E.CancelPaymentRequestMessage + (*DeclinePaymentRequestMessage)(nil), // 143: WAWebProtobufsE2E.DeclinePaymentRequestMessage + (*RequestPaymentMessage)(nil), // 144: WAWebProtobufsE2E.RequestPaymentMessage + (*SendPaymentMessage)(nil), // 145: WAWebProtobufsE2E.SendPaymentMessage + (*ContactsArrayMessage)(nil), // 146: WAWebProtobufsE2E.ContactsArrayMessage + (*InitialSecurityNotificationSettingSync)(nil), // 147: WAWebProtobufsE2E.InitialSecurityNotificationSettingSync + (*FullHistorySyncOnDemandConfig)(nil), // 148: WAWebProtobufsE2E.FullHistorySyncOnDemandConfig + (*FullHistorySyncOnDemandRequestMetadata)(nil), // 149: WAWebProtobufsE2E.FullHistorySyncOnDemandRequestMetadata + (*AppStateFatalExceptionNotification)(nil), // 150: WAWebProtobufsE2E.AppStateFatalExceptionNotification + (*AppStateSyncKeyRequest)(nil), // 151: WAWebProtobufsE2E.AppStateSyncKeyRequest + (*AppStateSyncKeyShare)(nil), // 152: WAWebProtobufsE2E.AppStateSyncKeyShare + (*AppStateSyncKeyData)(nil), // 153: WAWebProtobufsE2E.AppStateSyncKeyData + (*AppStateSyncKeyFingerprint)(nil), // 154: WAWebProtobufsE2E.AppStateSyncKeyFingerprint + (*AppStateSyncKeyId)(nil), // 155: WAWebProtobufsE2E.AppStateSyncKeyId + (*AppStateSyncKey)(nil), // 156: WAWebProtobufsE2E.AppStateSyncKey + (*HistorySyncNotification)(nil), // 157: WAWebProtobufsE2E.HistorySyncNotification + (*HistorySyncMessageAccessStatus)(nil), // 158: WAWebProtobufsE2E.HistorySyncMessageAccessStatus + (*Chat)(nil), // 159: WAWebProtobufsE2E.Chat + (*Call)(nil), // 160: WAWebProtobufsE2E.Call + (*AudioMessage)(nil), // 161: WAWebProtobufsE2E.AudioMessage + (*DocumentMessage)(nil), // 162: WAWebProtobufsE2E.DocumentMessage + (*URLMetadata)(nil), // 163: WAWebProtobufsE2E.URLMetadata + (*PaymentExtendedMetadata)(nil), // 164: WAWebProtobufsE2E.PaymentExtendedMetadata + (*MMSThumbnailMetadata)(nil), // 165: WAWebProtobufsE2E.MMSThumbnailMetadata + (*LocationMessage)(nil), // 166: WAWebProtobufsE2E.LocationMessage + (*ContactMessage)(nil), // 167: WAWebProtobufsE2E.ContactMessage + (*SenderKeyDistributionMessage)(nil), // 168: WAWebProtobufsE2E.SenderKeyDistributionMessage + (*VideoEndCard)(nil), // 169: WAWebProtobufsE2E.VideoEndCard + (*MediaDomainInfo)(nil), // 170: WAWebProtobufsE2E.MediaDomainInfo + (*DeviceListMetadata)(nil), // 171: WAWebProtobufsE2E.DeviceListMetadata + (*EmbeddedMessage)(nil), // 172: WAWebProtobufsE2E.EmbeddedMessage + (*EmbeddedMusic)(nil), // 173: WAWebProtobufsE2E.EmbeddedMusic + (*EmbeddedContent)(nil), // 174: WAWebProtobufsE2E.EmbeddedContent + (*TapLinkAction)(nil), // 175: WAWebProtobufsE2E.TapLinkAction + (*Point)(nil), // 176: WAWebProtobufsE2E.Point + (*Location)(nil), // 177: WAWebProtobufsE2E.Location + (*TemplateButton)(nil), // 178: WAWebProtobufsE2E.TemplateButton + (*Money)(nil), // 179: WAWebProtobufsE2E.Money + (*ActionLink)(nil), // 180: WAWebProtobufsE2E.ActionLink + (*GroupMention)(nil), // 181: WAWebProtobufsE2E.GroupMention + (*MessageSecretMessage)(nil), // 182: WAWebProtobufsE2E.MessageSecretMessage + (*MediaNotifyMessage)(nil), // 183: WAWebProtobufsE2E.MediaNotifyMessage + (*LIDMigrationMappingSyncMessage)(nil), // 184: WAWebProtobufsE2E.LIDMigrationMappingSyncMessage + (*UrlTrackingMap)(nil), // 185: WAWebProtobufsE2E.UrlTrackingMap + (*MemberLabel)(nil), // 186: WAWebProtobufsE2E.MemberLabel + (*AIRichResponseMessage)(nil), // 187: WAWebProtobufsE2E.AIRichResponseMessage + (*AIQueryFanout)(nil), // 188: WAWebProtobufsE2E.AIQueryFanout + (*StickerPackMessage_Sticker)(nil), // 189: WAWebProtobufsE2E.StickerPackMessage.Sticker + (*CallLogMessage_CallParticipant)(nil), // 190: WAWebProtobufsE2E.CallLogMessage.CallParticipant + (*ButtonsMessage_Button)(nil), // 191: WAWebProtobufsE2E.ButtonsMessage.Button + (*ButtonsMessage_Button_NativeFlowInfo)(nil), // 192: WAWebProtobufsE2E.ButtonsMessage.Button.NativeFlowInfo + (*ButtonsMessage_Button_ButtonText)(nil), // 193: WAWebProtobufsE2E.ButtonsMessage.Button.ButtonText + (*InteractiveResponseMessage_Body)(nil), // 194: WAWebProtobufsE2E.InteractiveResponseMessage.Body + (*InteractiveResponseMessage_NativeFlowResponseMessage)(nil), // 195: WAWebProtobufsE2E.InteractiveResponseMessage.NativeFlowResponseMessage + (*InteractiveMessage_CarouselMessage)(nil), // 196: WAWebProtobufsE2E.InteractiveMessage.CarouselMessage + (*InteractiveMessage_ShopMessage)(nil), // 197: WAWebProtobufsE2E.InteractiveMessage.ShopMessage + (*InteractiveMessage_NativeFlowMessage)(nil), // 198: WAWebProtobufsE2E.InteractiveMessage.NativeFlowMessage + (*InteractiveMessage_CollectionMessage)(nil), // 199: WAWebProtobufsE2E.InteractiveMessage.CollectionMessage + (*InteractiveMessage_BloksWidget)(nil), // 200: WAWebProtobufsE2E.InteractiveMessage.BloksWidget + (*InteractiveMessage_Footer)(nil), // 201: WAWebProtobufsE2E.InteractiveMessage.Footer + (*InteractiveMessage_Body)(nil), // 202: WAWebProtobufsE2E.InteractiveMessage.Body + (*InteractiveMessage_Header)(nil), // 203: WAWebProtobufsE2E.InteractiveMessage.Header + (*InteractiveMessage_NativeFlowMessage_NativeFlowButton)(nil), // 204: WAWebProtobufsE2E.InteractiveMessage.NativeFlowMessage.NativeFlowButton + (*ListResponseMessage_SingleSelectReply)(nil), // 205: WAWebProtobufsE2E.ListResponseMessage.SingleSelectReply + (*ListMessage_ProductListInfo)(nil), // 206: WAWebProtobufsE2E.ListMessage.ProductListInfo + (*ListMessage_ProductListHeaderImage)(nil), // 207: WAWebProtobufsE2E.ListMessage.ProductListHeaderImage + (*ListMessage_ProductSection)(nil), // 208: WAWebProtobufsE2E.ListMessage.ProductSection + (*ListMessage_Product)(nil), // 209: WAWebProtobufsE2E.ListMessage.Product + (*ListMessage_Section)(nil), // 210: WAWebProtobufsE2E.ListMessage.Section + (*ListMessage_Row)(nil), // 211: WAWebProtobufsE2E.ListMessage.Row + (*HighlyStructuredMessage_HSMLocalizableParameter)(nil), // 212: WAWebProtobufsE2E.HighlyStructuredMessage.HSMLocalizableParameter + (*HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime)(nil), // 213: WAWebProtobufsE2E.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime + (*HighlyStructuredMessage_HSMLocalizableParameter_HSMCurrency)(nil), // 214: WAWebProtobufsE2E.HighlyStructuredMessage.HSMLocalizableParameter.HSMCurrency + (*HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeComponent)(nil), // 215: WAWebProtobufsE2E.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime.HSMDateTimeComponent + (*HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeUnixEpoch)(nil), // 216: WAWebProtobufsE2E.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime.HSMDateTimeUnixEpoch + (*PeerDataOperationRequestResponseMessage_PeerDataOperationResult)(nil), // 217: WAWebProtobufsE2E.PeerDataOperationRequestResponseMessage.PeerDataOperationResult + (*PeerDataOperationRequestResponseMessage_PeerDataOperationResult_FlowResponsesCsvBundle)(nil), // 218: WAWebProtobufsE2E.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.FlowResponsesCsvBundle + (*PeerDataOperationRequestResponseMessage_PeerDataOperationResult_HistorySyncChunkRetryResponse)(nil), // 219: WAWebProtobufsE2E.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.HistorySyncChunkRetryResponse + (*PeerDataOperationRequestResponseMessage_PeerDataOperationResult_SyncDSnapshotFatalRecoveryResponse)(nil), // 220: WAWebProtobufsE2E.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.SyncDSnapshotFatalRecoveryResponse + (*PeerDataOperationRequestResponseMessage_PeerDataOperationResult_CompanionCanonicalUserNonceFetchResponse)(nil), // 221: WAWebProtobufsE2E.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.CompanionCanonicalUserNonceFetchResponse + (*PeerDataOperationRequestResponseMessage_PeerDataOperationResult_CompanionMetaNonceFetchResponse)(nil), // 222: WAWebProtobufsE2E.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.CompanionMetaNonceFetchResponse + (*PeerDataOperationRequestResponseMessage_PeerDataOperationResult_WaffleNonceFetchResponse)(nil), // 223: WAWebProtobufsE2E.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.WaffleNonceFetchResponse + (*PeerDataOperationRequestResponseMessage_PeerDataOperationResult_FullHistorySyncOnDemandRequestResponse)(nil), // 224: WAWebProtobufsE2E.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.FullHistorySyncOnDemandRequestResponse + (*PeerDataOperationRequestResponseMessage_PeerDataOperationResult_PlaceholderMessageResendResponse)(nil), // 225: WAWebProtobufsE2E.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.PlaceholderMessageResendResponse + (*PeerDataOperationRequestResponseMessage_PeerDataOperationResult_LinkPreviewResponse)(nil), // 226: WAWebProtobufsE2E.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.LinkPreviewResponse + (*PeerDataOperationRequestResponseMessage_PeerDataOperationResult_LinkPreviewResponse_PaymentLinkPreviewMetadata)(nil), // 227: WAWebProtobufsE2E.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.LinkPreviewResponse.PaymentLinkPreviewMetadata + (*PeerDataOperationRequestResponseMessage_PeerDataOperationResult_LinkPreviewResponse_LinkPreviewHighQualityThumbnail)(nil), // 228: WAWebProtobufsE2E.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.LinkPreviewResponse.LinkPreviewHighQualityThumbnail + (*PeerDataOperationRequestMessage_GalaxyFlowAction)(nil), // 229: WAWebProtobufsE2E.PeerDataOperationRequestMessage.GalaxyFlowAction + (*PeerDataOperationRequestMessage_CompanionCanonicalUserNonceFetchRequest)(nil), // 230: WAWebProtobufsE2E.PeerDataOperationRequestMessage.CompanionCanonicalUserNonceFetchRequest + (*PeerDataOperationRequestMessage_HistorySyncChunkRetryRequest)(nil), // 231: WAWebProtobufsE2E.PeerDataOperationRequestMessage.HistorySyncChunkRetryRequest + (*PeerDataOperationRequestMessage_SyncDCollectionFatalRecoveryRequest)(nil), // 232: WAWebProtobufsE2E.PeerDataOperationRequestMessage.SyncDCollectionFatalRecoveryRequest + (*PeerDataOperationRequestMessage_PlaceholderMessageResendRequest)(nil), // 233: WAWebProtobufsE2E.PeerDataOperationRequestMessage.PlaceholderMessageResendRequest + (*PeerDataOperationRequestMessage_FullHistorySyncOnDemandRequest)(nil), // 234: WAWebProtobufsE2E.PeerDataOperationRequestMessage.FullHistorySyncOnDemandRequest + (*PeerDataOperationRequestMessage_HistorySyncOnDemandRequest)(nil), // 235: WAWebProtobufsE2E.PeerDataOperationRequestMessage.HistorySyncOnDemandRequest + (*PeerDataOperationRequestMessage_RequestUrlPreview)(nil), // 236: WAWebProtobufsE2E.PeerDataOperationRequestMessage.RequestUrlPreview + (*PeerDataOperationRequestMessage_RequestStickerReupload)(nil), // 237: WAWebProtobufsE2E.PeerDataOperationRequestMessage.RequestStickerReupload + (*CloudAPIThreadControlNotification_CloudAPIThreadControlNotificationContent)(nil), // 238: WAWebProtobufsE2E.CloudAPIThreadControlNotification.CloudAPIThreadControlNotificationContent + (*PaymentLinkMetadata_PaymentLinkHeader)(nil), // 239: WAWebProtobufsE2E.PaymentLinkMetadata.PaymentLinkHeader + (*PaymentLinkMetadata_PaymentLinkProvider)(nil), // 240: WAWebProtobufsE2E.PaymentLinkMetadata.PaymentLinkProvider + (*PaymentLinkMetadata_PaymentLinkButton)(nil), // 241: WAWebProtobufsE2E.PaymentLinkMetadata.PaymentLinkButton + (*ContextInfo_StatusAudienceMetadata)(nil), // 242: WAWebProtobufsE2E.ContextInfo.StatusAudienceMetadata + (*ContextInfo_DataSharingContext)(nil), // 243: WAWebProtobufsE2E.ContextInfo.DataSharingContext + (*ContextInfo_ForwardedNewsletterMessageInfo)(nil), // 244: WAWebProtobufsE2E.ContextInfo.ForwardedNewsletterMessageInfo + (*ContextInfo_ExternalAdReplyInfo)(nil), // 245: WAWebProtobufsE2E.ContextInfo.ExternalAdReplyInfo + (*ContextInfo_AdReplyInfo)(nil), // 246: WAWebProtobufsE2E.ContextInfo.AdReplyInfo + (*ContextInfo_PartiallySelectedContent)(nil), // 247: WAWebProtobufsE2E.ContextInfo.PartiallySelectedContent + (*ContextInfo_FeatureEligibilities)(nil), // 248: WAWebProtobufsE2E.ContextInfo.FeatureEligibilities + (*ContextInfo_QuestionReplyQuotedMessage)(nil), // 249: WAWebProtobufsE2E.ContextInfo.QuestionReplyQuotedMessage + (*ContextInfo_UTMInfo)(nil), // 250: WAWebProtobufsE2E.ContextInfo.UTMInfo + (*ContextInfo_BusinessMessageForwardInfo)(nil), // 251: WAWebProtobufsE2E.ContextInfo.BusinessMessageForwardInfo + (*ContextInfo_DataSharingContext_Parameters)(nil), // 252: WAWebProtobufsE2E.ContextInfo.DataSharingContext.Parameters + (*HydratedTemplateButton_HydratedURLButton)(nil), // 253: WAWebProtobufsE2E.HydratedTemplateButton.HydratedURLButton + (*HydratedTemplateButton_HydratedCallButton)(nil), // 254: WAWebProtobufsE2E.HydratedTemplateButton.HydratedCallButton + (*HydratedTemplateButton_HydratedQuickReplyButton)(nil), // 255: WAWebProtobufsE2E.HydratedTemplateButton.HydratedQuickReplyButton + (*PaymentBackground_MediaData)(nil), // 256: WAWebProtobufsE2E.PaymentBackground.MediaData + (*PollResultSnapshotMessage_PollVote)(nil), // 257: WAWebProtobufsE2E.PollResultSnapshotMessage.PollVote + (*PollCreationMessage_Option)(nil), // 258: WAWebProtobufsE2E.PollCreationMessage.Option + (*ProductMessage_ProductSnapshot)(nil), // 259: WAWebProtobufsE2E.ProductMessage.ProductSnapshot + (*ProductMessage_CatalogSnapshot)(nil), // 260: WAWebProtobufsE2E.ProductMessage.CatalogSnapshot + (*TemplateMessage_HydratedFourRowTemplate)(nil), // 261: WAWebProtobufsE2E.TemplateMessage.HydratedFourRowTemplate + (*TemplateMessage_FourRowTemplate)(nil), // 262: WAWebProtobufsE2E.TemplateMessage.FourRowTemplate + (*TemplateButton_CallButton)(nil), // 263: WAWebProtobufsE2E.TemplateButton.CallButton + (*TemplateButton_URLButton)(nil), // 264: WAWebProtobufsE2E.TemplateButton.URLButton + (*TemplateButton_QuickReplyButton)(nil), // 265: WAWebProtobufsE2E.TemplateButton.QuickReplyButton + (*UrlTrackingMap_UrlTrackingMapElement)(nil), // 266: WAWebProtobufsE2E.UrlTrackingMap.UrlTrackingMapElement + (*waCommon.MessageKey)(nil), // 267: WACommon.MessageKey + (*waAICommon.BotFeedbackMessage)(nil), // 268: WAWebProtobufsAICommon.BotFeedbackMessage + (*waCommon.LimitSharing)(nil), // 269: WACommon.LimitSharing + (*waAICommon.AIMediaCollectionMessage)(nil), // 270: WAWebProtobufsAICommon.AIMediaCollectionMessage + (*waAICommon.ForwardedAIBotMessageInfo)(nil), // 271: WAWebProtobufsAICommon.ForwardedAIBotMessageInfo + (*waStatusAttributions.StatusAttribution)(nil), // 272: WAStatusAttributions.StatusAttribution + (*waAICommon.BotMessageSharingInfo)(nil), // 273: WAWebProtobufsAICommon.BotMessageSharingInfo + (*waAICommon.BotMetadata)(nil), // 274: WAWebProtobufsAICommon.BotMetadata + (waAdv.ADVEncryptionType)(0), // 275: WAAdv.ADVEncryptionType + (waAICommon.AIRichResponseMessageType)(0), // 276: WAWebProtobufsAICommon.AIRichResponseMessageType + (*waAICommon.AIRichResponseSubMessage)(nil), // 277: WAWebProtobufsAICommon.AIRichResponseSubMessage + (*waAICommon.AIRichResponseUnifiedResponse)(nil), // 278: WAWebProtobufsAICommon.AIRichResponseUnifiedResponse + (waMmsRetry.MediaRetryNotification_ResultType)(0), // 279: WAMmsRetry.MediaRetryNotification.ResultType + (*waCompanionReg.DeviceProps_HistorySyncConfig)(nil), // 280: WACompanionReg.DeviceProps.HistorySyncConfig } var file_waE2E_WAWebProtobufsE2E_proto_depIdxs = []int32{ - 3, // 0: WAWebProtobufsE2E.PlaceholderMessage.type:type_name -> WAWebProtobufsE2E.PlaceholderMessage.PlaceholderType - 4, // 1: WAWebProtobufsE2E.BCallMessage.mediaType:type_name -> WAWebProtobufsE2E.BCallMessage.MediaType - 5, // 2: WAWebProtobufsE2E.CallLogMessage.callOutcome:type_name -> WAWebProtobufsE2E.CallLogMessage.CallOutcome - 6, // 3: WAWebProtobufsE2E.CallLogMessage.callType:type_name -> WAWebProtobufsE2E.CallLogMessage.CallType - 164, // 4: WAWebProtobufsE2E.CallLogMessage.participants:type_name -> WAWebProtobufsE2E.CallLogMessage.CallParticipant - 223, // 5: WAWebProtobufsE2E.ScheduledCallEditMessage.key:type_name -> WACommon.MessageKey - 7, // 6: WAWebProtobufsE2E.ScheduledCallEditMessage.editType:type_name -> WAWebProtobufsE2E.ScheduledCallEditMessage.EditType - 8, // 7: WAWebProtobufsE2E.ScheduledCallCreationMessage.callType:type_name -> WAWebProtobufsE2E.ScheduledCallCreationMessage.CallType - 9, // 8: WAWebProtobufsE2E.EventResponseMessage.response:type_name -> WAWebProtobufsE2E.EventResponseMessage.EventResponseType - 223, // 9: WAWebProtobufsE2E.PinInChatMessage.key:type_name -> WACommon.MessageKey - 10, // 10: WAWebProtobufsE2E.PinInChatMessage.type:type_name -> WAWebProtobufsE2E.PinInChatMessage.Type - 85, // 11: WAWebProtobufsE2E.ButtonsResponseMessage.contextInfo:type_name -> WAWebProtobufsE2E.ContextInfo - 11, // 12: WAWebProtobufsE2E.ButtonsResponseMessage.type:type_name -> WAWebProtobufsE2E.ButtonsResponseMessage.Type - 141, // 13: WAWebProtobufsE2E.ButtonsMessage.documentMessage:type_name -> WAWebProtobufsE2E.DocumentMessage - 84, // 14: WAWebProtobufsE2E.ButtonsMessage.imageMessage:type_name -> WAWebProtobufsE2E.ImageMessage - 81, // 15: WAWebProtobufsE2E.ButtonsMessage.videoMessage:type_name -> WAWebProtobufsE2E.VideoMessage - 142, // 16: WAWebProtobufsE2E.ButtonsMessage.locationMessage:type_name -> WAWebProtobufsE2E.LocationMessage - 85, // 17: WAWebProtobufsE2E.ButtonsMessage.contextInfo:type_name -> WAWebProtobufsE2E.ContextInfo - 165, // 18: WAWebProtobufsE2E.ButtonsMessage.buttons:type_name -> WAWebProtobufsE2E.ButtonsMessage.Button - 12, // 19: WAWebProtobufsE2E.ButtonsMessage.headerType:type_name -> WAWebProtobufsE2E.ButtonsMessage.HeaderType - 223, // 20: WAWebProtobufsE2E.SecretEncryptedMessage.targetMessageKey:type_name -> WACommon.MessageKey - 14, // 21: WAWebProtobufsE2E.SecretEncryptedMessage.secretEncType:type_name -> WAWebProtobufsE2E.SecretEncryptedMessage.SecretEncType - 85, // 22: WAWebProtobufsE2E.GroupInviteMessage.contextInfo:type_name -> WAWebProtobufsE2E.ContextInfo - 15, // 23: WAWebProtobufsE2E.GroupInviteMessage.groupType:type_name -> WAWebProtobufsE2E.GroupInviteMessage.GroupType - 169, // 24: WAWebProtobufsE2E.InteractiveResponseMessage.nativeFlowResponseMessage:type_name -> WAWebProtobufsE2E.InteractiveResponseMessage.NativeFlowResponseMessage - 168, // 25: WAWebProtobufsE2E.InteractiveResponseMessage.body:type_name -> WAWebProtobufsE2E.InteractiveResponseMessage.Body - 85, // 26: WAWebProtobufsE2E.InteractiveResponseMessage.contextInfo:type_name -> WAWebProtobufsE2E.ContextInfo - 170, // 27: WAWebProtobufsE2E.InteractiveMessage.shopStorefrontMessage:type_name -> WAWebProtobufsE2E.InteractiveMessage.ShopMessage - 173, // 28: WAWebProtobufsE2E.InteractiveMessage.collectionMessage:type_name -> WAWebProtobufsE2E.InteractiveMessage.CollectionMessage - 172, // 29: WAWebProtobufsE2E.InteractiveMessage.nativeFlowMessage:type_name -> WAWebProtobufsE2E.InteractiveMessage.NativeFlowMessage - 171, // 30: WAWebProtobufsE2E.InteractiveMessage.carouselMessage:type_name -> WAWebProtobufsE2E.InteractiveMessage.CarouselMessage - 176, // 31: WAWebProtobufsE2E.InteractiveMessage.header:type_name -> WAWebProtobufsE2E.InteractiveMessage.Header - 175, // 32: WAWebProtobufsE2E.InteractiveMessage.body:type_name -> WAWebProtobufsE2E.InteractiveMessage.Body - 174, // 33: WAWebProtobufsE2E.InteractiveMessage.footer:type_name -> WAWebProtobufsE2E.InteractiveMessage.Footer - 85, // 34: WAWebProtobufsE2E.InteractiveMessage.contextInfo:type_name -> WAWebProtobufsE2E.ContextInfo - 18, // 35: WAWebProtobufsE2E.ListResponseMessage.listType:type_name -> WAWebProtobufsE2E.ListResponseMessage.ListType - 178, // 36: WAWebProtobufsE2E.ListResponseMessage.singleSelectReply:type_name -> WAWebProtobufsE2E.ListResponseMessage.SingleSelectReply - 85, // 37: WAWebProtobufsE2E.ListResponseMessage.contextInfo:type_name -> WAWebProtobufsE2E.ContextInfo - 19, // 38: WAWebProtobufsE2E.ListMessage.listType:type_name -> WAWebProtobufsE2E.ListMessage.ListType - 183, // 39: WAWebProtobufsE2E.ListMessage.sections:type_name -> WAWebProtobufsE2E.ListMessage.Section - 179, // 40: WAWebProtobufsE2E.ListMessage.productListInfo:type_name -> WAWebProtobufsE2E.ListMessage.ProductListInfo - 85, // 41: WAWebProtobufsE2E.ListMessage.contextInfo:type_name -> WAWebProtobufsE2E.ContextInfo - 21, // 42: WAWebProtobufsE2E.OrderMessage.status:type_name -> WAWebProtobufsE2E.OrderMessage.OrderStatus - 20, // 43: WAWebProtobufsE2E.OrderMessage.surface:type_name -> WAWebProtobufsE2E.OrderMessage.OrderSurface - 85, // 44: WAWebProtobufsE2E.OrderMessage.contextInfo:type_name -> WAWebProtobufsE2E.ContextInfo - 223, // 45: WAWebProtobufsE2E.OrderMessage.orderRequestMessageID:type_name -> WACommon.MessageKey - 22, // 46: WAWebProtobufsE2E.PaymentInviteMessage.serviceType:type_name -> WAWebProtobufsE2E.PaymentInviteMessage.ServiceType - 185, // 47: WAWebProtobufsE2E.HighlyStructuredMessage.localizableParams:type_name -> WAWebProtobufsE2E.HighlyStructuredMessage.HSMLocalizableParameter - 120, // 48: WAWebProtobufsE2E.HighlyStructuredMessage.hydratedHsm:type_name -> WAWebProtobufsE2E.TemplateMessage - 0, // 49: WAWebProtobufsE2E.PeerDataOperationRequestResponseMessage.peerDataOperationRequestType:type_name -> WAWebProtobufsE2E.PeerDataOperationRequestType - 190, // 50: WAWebProtobufsE2E.PeerDataOperationRequestResponseMessage.peerDataOperationResult:type_name -> WAWebProtobufsE2E.PeerDataOperationRequestResponseMessage.PeerDataOperationResult - 26, // 51: WAWebProtobufsE2E.HistorySyncNotification.syncType:type_name -> WAWebProtobufsE2E.HistorySyncNotification.HistorySyncType - 130, // 52: WAWebProtobufsE2E.HistorySyncNotification.fullHistorySyncOnDemandRequestMetadata:type_name -> WAWebProtobufsE2E.FullHistorySyncOnDemandRequestMetadata - 27, // 53: WAWebProtobufsE2E.RequestWelcomeMessageMetadata.localChatState:type_name -> WAWebProtobufsE2E.RequestWelcomeMessageMetadata.LocalChatState - 223, // 54: WAWebProtobufsE2E.ProtocolMessage.key:type_name -> WACommon.MessageKey - 28, // 55: WAWebProtobufsE2E.ProtocolMessage.type:type_name -> WAWebProtobufsE2E.ProtocolMessage.Type - 76, // 56: WAWebProtobufsE2E.ProtocolMessage.historySyncNotification:type_name -> WAWebProtobufsE2E.HistorySyncNotification - 133, // 57: WAWebProtobufsE2E.ProtocolMessage.appStateSyncKeyShare:type_name -> WAWebProtobufsE2E.AppStateSyncKeyShare - 132, // 58: WAWebProtobufsE2E.ProtocolMessage.appStateSyncKeyRequest:type_name -> WAWebProtobufsE2E.AppStateSyncKeyRequest - 128, // 59: WAWebProtobufsE2E.ProtocolMessage.initialSecurityNotificationSettingSync:type_name -> WAWebProtobufsE2E.InitialSecurityNotificationSettingSync - 131, // 60: WAWebProtobufsE2E.ProtocolMessage.appStateFatalExceptionNotification:type_name -> WAWebProtobufsE2E.AppStateFatalExceptionNotification - 94, // 61: WAWebProtobufsE2E.ProtocolMessage.disappearingMode:type_name -> WAWebProtobufsE2E.DisappearingMode - 96, // 62: WAWebProtobufsE2E.ProtocolMessage.editedMessage:type_name -> WAWebProtobufsE2E.Message - 129, // 63: WAWebProtobufsE2E.ProtocolMessage.peerDataOperationRequestMessage:type_name -> WAWebProtobufsE2E.PeerDataOperationRequestMessage - 75, // 64: WAWebProtobufsE2E.ProtocolMessage.peerDataOperationRequestResponseMessage:type_name -> WAWebProtobufsE2E.PeerDataOperationRequestResponseMessage - 80, // 65: WAWebProtobufsE2E.ProtocolMessage.botFeedbackMessage:type_name -> WAWebProtobufsE2E.BotFeedbackMessage - 77, // 66: WAWebProtobufsE2E.ProtocolMessage.requestWelcomeMessageMetadata:type_name -> WAWebProtobufsE2E.RequestWelcomeMessageMetadata - 162, // 67: WAWebProtobufsE2E.ProtocolMessage.mediaNotifyMessage:type_name -> WAWebProtobufsE2E.MediaNotifyMessage - 79, // 68: WAWebProtobufsE2E.ProtocolMessage.cloudApiThreadControlNotification:type_name -> WAWebProtobufsE2E.CloudAPIThreadControlNotification - 163, // 69: WAWebProtobufsE2E.ProtocolMessage.lidMigrationMappingSyncMessage:type_name -> WAWebProtobufsE2E.LIDMigrationMappingSyncMessage - 29, // 70: WAWebProtobufsE2E.CloudAPIThreadControlNotification.status:type_name -> WAWebProtobufsE2E.CloudAPIThreadControlNotification.CloudAPIThreadControl - 223, // 71: WAWebProtobufsE2E.BotFeedbackMessage.messageKey:type_name -> WACommon.MessageKey - 33, // 72: WAWebProtobufsE2E.BotFeedbackMessage.kind:type_name -> WAWebProtobufsE2E.BotFeedbackMessage.BotFeedbackKind - 30, // 73: WAWebProtobufsE2E.BotFeedbackMessage.kindReport:type_name -> WAWebProtobufsE2E.BotFeedbackMessage.ReportKind - 154, // 74: WAWebProtobufsE2E.VideoMessage.interactiveAnnotations:type_name -> WAWebProtobufsE2E.InteractiveAnnotation - 85, // 75: WAWebProtobufsE2E.VideoMessage.contextInfo:type_name -> WAWebProtobufsE2E.ContextInfo - 34, // 76: WAWebProtobufsE2E.VideoMessage.gifAttribution:type_name -> WAWebProtobufsE2E.VideoMessage.Attribution - 154, // 77: WAWebProtobufsE2E.VideoMessage.annotations:type_name -> WAWebProtobufsE2E.InteractiveAnnotation - 95, // 78: WAWebProtobufsE2E.VideoMessage.processedVideos:type_name -> WAWebProtobufsE2E.ProcessedVideo - 37, // 79: WAWebProtobufsE2E.ExtendedTextMessage.font:type_name -> WAWebProtobufsE2E.ExtendedTextMessage.FontType - 36, // 80: WAWebProtobufsE2E.ExtendedTextMessage.previewType:type_name -> WAWebProtobufsE2E.ExtendedTextMessage.PreviewType - 85, // 81: WAWebProtobufsE2E.ExtendedTextMessage.contextInfo:type_name -> WAWebProtobufsE2E.ContextInfo - 35, // 82: WAWebProtobufsE2E.ExtendedTextMessage.inviteLinkGroupType:type_name -> WAWebProtobufsE2E.ExtendedTextMessage.InviteLinkGroupType - 35, // 83: WAWebProtobufsE2E.ExtendedTextMessage.inviteLinkGroupTypeV2:type_name -> WAWebProtobufsE2E.ExtendedTextMessage.InviteLinkGroupType - 38, // 84: WAWebProtobufsE2E.InvoiceMessage.attachmentType:type_name -> WAWebProtobufsE2E.InvoiceMessage.AttachmentType - 154, // 85: WAWebProtobufsE2E.ImageMessage.interactiveAnnotations:type_name -> WAWebProtobufsE2E.InteractiveAnnotation - 85, // 86: WAWebProtobufsE2E.ImageMessage.contextInfo:type_name -> WAWebProtobufsE2E.ContextInfo - 154, // 87: WAWebProtobufsE2E.ImageMessage.annotations:type_name -> WAWebProtobufsE2E.InteractiveAnnotation - 39, // 88: WAWebProtobufsE2E.ImageMessage.imageSourceType:type_name -> WAWebProtobufsE2E.ImageMessage.ImageSourceType - 96, // 89: WAWebProtobufsE2E.ContextInfo.quotedMessage:type_name -> WAWebProtobufsE2E.Message - 198, // 90: WAWebProtobufsE2E.ContextInfo.quotedAd:type_name -> WAWebProtobufsE2E.ContextInfo.AdReplyInfo - 223, // 91: WAWebProtobufsE2E.ContextInfo.placeholderKey:type_name -> WACommon.MessageKey - 197, // 92: WAWebProtobufsE2E.ContextInfo.externalAdReply:type_name -> WAWebProtobufsE2E.ContextInfo.ExternalAdReplyInfo - 94, // 93: WAWebProtobufsE2E.ContextInfo.disappearingMode:type_name -> WAWebProtobufsE2E.DisappearingMode - 159, // 94: WAWebProtobufsE2E.ContextInfo.actionLink:type_name -> WAWebProtobufsE2E.ActionLink - 160, // 95: WAWebProtobufsE2E.ContextInfo.groupMentions:type_name -> WAWebProtobufsE2E.GroupMention - 201, // 96: WAWebProtobufsE2E.ContextInfo.utm:type_name -> WAWebProtobufsE2E.ContextInfo.UTMInfo - 196, // 97: WAWebProtobufsE2E.ContextInfo.forwardedNewsletterMessageInfo:type_name -> WAWebProtobufsE2E.ContextInfo.ForwardedNewsletterMessageInfo - 202, // 98: WAWebProtobufsE2E.ContextInfo.businessMessageForwardInfo:type_name -> WAWebProtobufsE2E.ContextInfo.BusinessMessageForwardInfo - 200, // 99: WAWebProtobufsE2E.ContextInfo.dataSharingContext:type_name -> WAWebProtobufsE2E.ContextInfo.DataSharingContext - 199, // 100: WAWebProtobufsE2E.ContextInfo.featureEligibilities:type_name -> WAWebProtobufsE2E.ContextInfo.FeatureEligibilities - 44, // 101: WAWebProtobufsE2E.BotPluginMetadata.provider:type_name -> WAWebProtobufsE2E.BotPluginMetadata.SearchProvider - 43, // 102: WAWebProtobufsE2E.BotPluginMetadata.pluginType:type_name -> WAWebProtobufsE2E.BotPluginMetadata.PluginType - 223, // 103: WAWebProtobufsE2E.BotPluginMetadata.parentPluginMessageKey:type_name -> WACommon.MessageKey - 43, // 104: WAWebProtobufsE2E.BotPluginMetadata.deprecatedField:type_name -> WAWebProtobufsE2E.BotPluginMetadata.PluginType - 43, // 105: WAWebProtobufsE2E.BotPluginMetadata.parentPluginType:type_name -> WAWebProtobufsE2E.BotPluginMetadata.PluginType - 45, // 106: WAWebProtobufsE2E.BotMediaMetadata.orientationType:type_name -> WAWebProtobufsE2E.BotMediaMetadata.OrientationType - 223, // 107: WAWebProtobufsE2E.BotReminderMetadata.requestMessageKey:type_name -> WACommon.MessageKey - 47, // 108: WAWebProtobufsE2E.BotReminderMetadata.action:type_name -> WAWebProtobufsE2E.BotReminderMetadata.ReminderAction - 46, // 109: WAWebProtobufsE2E.BotReminderMetadata.frequency:type_name -> WAWebProtobufsE2E.BotReminderMetadata.ReminderFrequency - 49, // 110: WAWebProtobufsE2E.BotModelMetadata.modelType:type_name -> WAWebProtobufsE2E.BotModelMetadata.ModelType - 48, // 111: WAWebProtobufsE2E.BotModelMetadata.premiumModelStatus:type_name -> WAWebProtobufsE2E.BotModelMetadata.PremiumModelStatus - 50, // 112: WAWebProtobufsE2E.MessageAssociation.associationType:type_name -> WAWebProtobufsE2E.MessageAssociation.AssociationType - 223, // 113: WAWebProtobufsE2E.MessageAssociation.parentMessageKey:type_name -> WACommon.MessageKey - 150, // 114: WAWebProtobufsE2E.MessageContextInfo.deviceListMetadata:type_name -> WAWebProtobufsE2E.DeviceListMetadata - 149, // 115: WAWebProtobufsE2E.MessageContextInfo.botMetadata:type_name -> WAWebProtobufsE2E.BotMetadata - 51, // 116: WAWebProtobufsE2E.MessageContextInfo.messageAddOnExpiryType:type_name -> WAWebProtobufsE2E.MessageContextInfo.MessageAddonExpiryType - 90, // 117: WAWebProtobufsE2E.MessageContextInfo.messageAssociation:type_name -> WAWebProtobufsE2E.MessageAssociation - 206, // 118: WAWebProtobufsE2E.HydratedTemplateButton.quickReplyButton:type_name -> WAWebProtobufsE2E.HydratedTemplateButton.HydratedQuickReplyButton - 204, // 119: WAWebProtobufsE2E.HydratedTemplateButton.urlButton:type_name -> WAWebProtobufsE2E.HydratedTemplateButton.HydratedURLButton - 205, // 120: WAWebProtobufsE2E.HydratedTemplateButton.callButton:type_name -> WAWebProtobufsE2E.HydratedTemplateButton.HydratedCallButton - 207, // 121: WAWebProtobufsE2E.PaymentBackground.mediaData:type_name -> WAWebProtobufsE2E.PaymentBackground.MediaData - 53, // 122: WAWebProtobufsE2E.PaymentBackground.type:type_name -> WAWebProtobufsE2E.PaymentBackground.Type - 55, // 123: WAWebProtobufsE2E.DisappearingMode.initiator:type_name -> WAWebProtobufsE2E.DisappearingMode.Initiator - 54, // 124: WAWebProtobufsE2E.DisappearingMode.trigger:type_name -> WAWebProtobufsE2E.DisappearingMode.Trigger - 56, // 125: WAWebProtobufsE2E.ProcessedVideo.quality:type_name -> WAWebProtobufsE2E.ProcessedVideo.VideoQuality - 144, // 126: WAWebProtobufsE2E.Message.senderKeyDistributionMessage:type_name -> WAWebProtobufsE2E.SenderKeyDistributionMessage - 84, // 127: WAWebProtobufsE2E.Message.imageMessage:type_name -> WAWebProtobufsE2E.ImageMessage - 143, // 128: WAWebProtobufsE2E.Message.contactMessage:type_name -> WAWebProtobufsE2E.ContactMessage - 142, // 129: WAWebProtobufsE2E.Message.locationMessage:type_name -> WAWebProtobufsE2E.LocationMessage - 82, // 130: WAWebProtobufsE2E.Message.extendedTextMessage:type_name -> WAWebProtobufsE2E.ExtendedTextMessage - 141, // 131: WAWebProtobufsE2E.Message.documentMessage:type_name -> WAWebProtobufsE2E.DocumentMessage - 140, // 132: WAWebProtobufsE2E.Message.audioMessage:type_name -> WAWebProtobufsE2E.AudioMessage - 81, // 133: WAWebProtobufsE2E.Message.videoMessage:type_name -> WAWebProtobufsE2E.VideoMessage - 139, // 134: WAWebProtobufsE2E.Message.call:type_name -> WAWebProtobufsE2E.Call - 138, // 135: WAWebProtobufsE2E.Message.chat:type_name -> WAWebProtobufsE2E.Chat - 78, // 136: WAWebProtobufsE2E.Message.protocolMessage:type_name -> WAWebProtobufsE2E.ProtocolMessage - 127, // 137: WAWebProtobufsE2E.Message.contactsArrayMessage:type_name -> WAWebProtobufsE2E.ContactsArrayMessage - 74, // 138: WAWebProtobufsE2E.Message.highlyStructuredMessage:type_name -> WAWebProtobufsE2E.HighlyStructuredMessage - 144, // 139: WAWebProtobufsE2E.Message.fastRatchetKeySenderKeyDistributionMessage:type_name -> WAWebProtobufsE2E.SenderKeyDistributionMessage - 126, // 140: WAWebProtobufsE2E.Message.sendPaymentMessage:type_name -> WAWebProtobufsE2E.SendPaymentMessage - 122, // 141: WAWebProtobufsE2E.Message.liveLocationMessage:type_name -> WAWebProtobufsE2E.LiveLocationMessage - 125, // 142: WAWebProtobufsE2E.Message.requestPaymentMessage:type_name -> WAWebProtobufsE2E.RequestPaymentMessage - 124, // 143: WAWebProtobufsE2E.Message.declinePaymentRequestMessage:type_name -> WAWebProtobufsE2E.DeclinePaymentRequestMessage - 123, // 144: WAWebProtobufsE2E.Message.cancelPaymentRequestMessage:type_name -> WAWebProtobufsE2E.CancelPaymentRequestMessage - 120, // 145: WAWebProtobufsE2E.Message.templateMessage:type_name -> WAWebProtobufsE2E.TemplateMessage - 121, // 146: WAWebProtobufsE2E.Message.stickerMessage:type_name -> WAWebProtobufsE2E.StickerMessage - 67, // 147: WAWebProtobufsE2E.Message.groupInviteMessage:type_name -> WAWebProtobufsE2E.GroupInviteMessage - 119, // 148: WAWebProtobufsE2E.Message.templateButtonReplyMessage:type_name -> WAWebProtobufsE2E.TemplateButtonReplyMessage - 118, // 149: WAWebProtobufsE2E.Message.productMessage:type_name -> WAWebProtobufsE2E.ProductMessage - 115, // 150: WAWebProtobufsE2E.Message.deviceSentMessage:type_name -> WAWebProtobufsE2E.DeviceSentMessage - 91, // 151: WAWebProtobufsE2E.Message.messageContextInfo:type_name -> WAWebProtobufsE2E.MessageContextInfo - 71, // 152: WAWebProtobufsE2E.Message.listMessage:type_name -> WAWebProtobufsE2E.ListMessage - 114, // 153: WAWebProtobufsE2E.Message.viewOnceMessage:type_name -> WAWebProtobufsE2E.FutureProofMessage - 72, // 154: WAWebProtobufsE2E.Message.orderMessage:type_name -> WAWebProtobufsE2E.OrderMessage - 70, // 155: WAWebProtobufsE2E.Message.listResponseMessage:type_name -> WAWebProtobufsE2E.ListResponseMessage - 114, // 156: WAWebProtobufsE2E.Message.ephemeralMessage:type_name -> WAWebProtobufsE2E.FutureProofMessage - 83, // 157: WAWebProtobufsE2E.Message.invoiceMessage:type_name -> WAWebProtobufsE2E.InvoiceMessage - 65, // 158: WAWebProtobufsE2E.Message.buttonsMessage:type_name -> WAWebProtobufsE2E.ButtonsMessage - 64, // 159: WAWebProtobufsE2E.Message.buttonsResponseMessage:type_name -> WAWebProtobufsE2E.ButtonsResponseMessage - 73, // 160: WAWebProtobufsE2E.Message.paymentInviteMessage:type_name -> WAWebProtobufsE2E.PaymentInviteMessage - 69, // 161: WAWebProtobufsE2E.Message.interactiveMessage:type_name -> WAWebProtobufsE2E.InteractiveMessage - 113, // 162: WAWebProtobufsE2E.Message.reactionMessage:type_name -> WAWebProtobufsE2E.ReactionMessage - 112, // 163: WAWebProtobufsE2E.Message.stickerSyncRmrMessage:type_name -> WAWebProtobufsE2E.StickerSyncRMRMessage - 68, // 164: WAWebProtobufsE2E.Message.interactiveResponseMessage:type_name -> WAWebProtobufsE2E.InteractiveResponseMessage - 111, // 165: WAWebProtobufsE2E.Message.pollCreationMessage:type_name -> WAWebProtobufsE2E.PollCreationMessage - 110, // 166: WAWebProtobufsE2E.Message.pollUpdateMessage:type_name -> WAWebProtobufsE2E.PollUpdateMessage - 105, // 167: WAWebProtobufsE2E.Message.keepInChatMessage:type_name -> WAWebProtobufsE2E.KeepInChatMessage - 114, // 168: WAWebProtobufsE2E.Message.documentWithCaptionMessage:type_name -> WAWebProtobufsE2E.FutureProofMessage - 116, // 169: WAWebProtobufsE2E.Message.requestPhoneNumberMessage:type_name -> WAWebProtobufsE2E.RequestPhoneNumberMessage - 114, // 170: WAWebProtobufsE2E.Message.viewOnceMessageV2:type_name -> WAWebProtobufsE2E.FutureProofMessage - 104, // 171: WAWebProtobufsE2E.Message.encReactionMessage:type_name -> WAWebProtobufsE2E.EncReactionMessage - 114, // 172: WAWebProtobufsE2E.Message.editedMessage:type_name -> WAWebProtobufsE2E.FutureProofMessage - 114, // 173: WAWebProtobufsE2E.Message.viewOnceMessageV2Extension:type_name -> WAWebProtobufsE2E.FutureProofMessage - 111, // 174: WAWebProtobufsE2E.Message.pollCreationMessageV2:type_name -> WAWebProtobufsE2E.PollCreationMessage - 61, // 175: WAWebProtobufsE2E.Message.scheduledCallCreationMessage:type_name -> WAWebProtobufsE2E.ScheduledCallCreationMessage - 114, // 176: WAWebProtobufsE2E.Message.groupMentionedMessage:type_name -> WAWebProtobufsE2E.FutureProofMessage - 63, // 177: WAWebProtobufsE2E.Message.pinInChatMessage:type_name -> WAWebProtobufsE2E.PinInChatMessage - 111, // 178: WAWebProtobufsE2E.Message.pollCreationMessageV3:type_name -> WAWebProtobufsE2E.PollCreationMessage - 60, // 179: WAWebProtobufsE2E.Message.scheduledCallEditMessage:type_name -> WAWebProtobufsE2E.ScheduledCallEditMessage - 81, // 180: WAWebProtobufsE2E.Message.ptvMessage:type_name -> WAWebProtobufsE2E.VideoMessage - 114, // 181: WAWebProtobufsE2E.Message.botInvokeMessage:type_name -> WAWebProtobufsE2E.FutureProofMessage - 59, // 182: WAWebProtobufsE2E.Message.callLogMesssage:type_name -> WAWebProtobufsE2E.CallLogMessage - 99, // 183: WAWebProtobufsE2E.Message.messageHistoryBundle:type_name -> WAWebProtobufsE2E.MessageHistoryBundle - 103, // 184: WAWebProtobufsE2E.Message.encCommentMessage:type_name -> WAWebProtobufsE2E.EncCommentMessage - 58, // 185: WAWebProtobufsE2E.Message.bcallMessage:type_name -> WAWebProtobufsE2E.BCallMessage - 114, // 186: WAWebProtobufsE2E.Message.lottieStickerMessage:type_name -> WAWebProtobufsE2E.FutureProofMessage - 101, // 187: WAWebProtobufsE2E.Message.eventMessage:type_name -> WAWebProtobufsE2E.EventMessage - 100, // 188: WAWebProtobufsE2E.Message.encEventResponseMessage:type_name -> WAWebProtobufsE2E.EncEventResponseMessage - 102, // 189: WAWebProtobufsE2E.Message.commentMessage:type_name -> WAWebProtobufsE2E.CommentMessage - 117, // 190: WAWebProtobufsE2E.Message.newsletterAdminInviteMessage:type_name -> WAWebProtobufsE2E.NewsletterAdminInviteMessage - 57, // 191: WAWebProtobufsE2E.Message.placeholderMessage:type_name -> WAWebProtobufsE2E.PlaceholderMessage - 66, // 192: WAWebProtobufsE2E.Message.secretEncryptedMessage:type_name -> WAWebProtobufsE2E.SecretEncryptedMessage - 98, // 193: WAWebProtobufsE2E.Message.albumMessage:type_name -> WAWebProtobufsE2E.AlbumMessage - 114, // 194: WAWebProtobufsE2E.Message.eventCoverImage:type_name -> WAWebProtobufsE2E.FutureProofMessage - 97, // 195: WAWebProtobufsE2E.Message.stickerPackMessage:type_name -> WAWebProtobufsE2E.StickerPackMessage - 114, // 196: WAWebProtobufsE2E.Message.statusMentionMessage:type_name -> WAWebProtobufsE2E.FutureProofMessage - 106, // 197: WAWebProtobufsE2E.Message.pollResultSnapshotMessage:type_name -> WAWebProtobufsE2E.PollResultSnapshotMessage - 208, // 198: WAWebProtobufsE2E.StickerPackMessage.stickers:type_name -> WAWebProtobufsE2E.StickerPackMessage.Sticker - 85, // 199: WAWebProtobufsE2E.StickerPackMessage.contextInfo:type_name -> WAWebProtobufsE2E.ContextInfo - 85, // 200: WAWebProtobufsE2E.AlbumMessage.contextInfo:type_name -> WAWebProtobufsE2E.ContextInfo - 85, // 201: WAWebProtobufsE2E.MessageHistoryBundle.contextInfo:type_name -> WAWebProtobufsE2E.ContextInfo - 223, // 202: WAWebProtobufsE2E.EncEventResponseMessage.eventCreationMessageKey:type_name -> WACommon.MessageKey - 85, // 203: WAWebProtobufsE2E.EventMessage.contextInfo:type_name -> WAWebProtobufsE2E.ContextInfo - 142, // 204: WAWebProtobufsE2E.EventMessage.location:type_name -> WAWebProtobufsE2E.LocationMessage - 96, // 205: WAWebProtobufsE2E.CommentMessage.message:type_name -> WAWebProtobufsE2E.Message - 223, // 206: WAWebProtobufsE2E.CommentMessage.targetMessageKey:type_name -> WACommon.MessageKey - 223, // 207: WAWebProtobufsE2E.EncCommentMessage.targetMessageKey:type_name -> WACommon.MessageKey - 223, // 208: WAWebProtobufsE2E.EncReactionMessage.targetMessageKey:type_name -> WACommon.MessageKey - 223, // 209: WAWebProtobufsE2E.KeepInChatMessage.key:type_name -> WACommon.MessageKey - 2, // 210: WAWebProtobufsE2E.KeepInChatMessage.keepType:type_name -> WAWebProtobufsE2E.KeepType - 209, // 211: WAWebProtobufsE2E.PollResultSnapshotMessage.pollVotes:type_name -> WAWebProtobufsE2E.PollResultSnapshotMessage.PollVote - 85, // 212: WAWebProtobufsE2E.PollResultSnapshotMessage.contextInfo:type_name -> WAWebProtobufsE2E.ContextInfo - 223, // 213: WAWebProtobufsE2E.PollUpdateMessage.pollCreationMessageKey:type_name -> WACommon.MessageKey - 108, // 214: WAWebProtobufsE2E.PollUpdateMessage.vote:type_name -> WAWebProtobufsE2E.PollEncValue - 109, // 215: WAWebProtobufsE2E.PollUpdateMessage.metadata:type_name -> WAWebProtobufsE2E.PollUpdateMessageMetadata - 210, // 216: WAWebProtobufsE2E.PollCreationMessage.options:type_name -> WAWebProtobufsE2E.PollCreationMessage.Option - 85, // 217: WAWebProtobufsE2E.PollCreationMessage.contextInfo:type_name -> WAWebProtobufsE2E.ContextInfo - 223, // 218: WAWebProtobufsE2E.ReactionMessage.key:type_name -> WACommon.MessageKey - 96, // 219: WAWebProtobufsE2E.FutureProofMessage.message:type_name -> WAWebProtobufsE2E.Message - 96, // 220: WAWebProtobufsE2E.DeviceSentMessage.message:type_name -> WAWebProtobufsE2E.Message - 85, // 221: WAWebProtobufsE2E.RequestPhoneNumberMessage.contextInfo:type_name -> WAWebProtobufsE2E.ContextInfo - 85, // 222: WAWebProtobufsE2E.NewsletterAdminInviteMessage.contextInfo:type_name -> WAWebProtobufsE2E.ContextInfo - 211, // 223: WAWebProtobufsE2E.ProductMessage.product:type_name -> WAWebProtobufsE2E.ProductMessage.ProductSnapshot - 212, // 224: WAWebProtobufsE2E.ProductMessage.catalog:type_name -> WAWebProtobufsE2E.ProductMessage.CatalogSnapshot - 85, // 225: WAWebProtobufsE2E.ProductMessage.contextInfo:type_name -> WAWebProtobufsE2E.ContextInfo - 85, // 226: WAWebProtobufsE2E.TemplateButtonReplyMessage.contextInfo:type_name -> WAWebProtobufsE2E.ContextInfo - 214, // 227: WAWebProtobufsE2E.TemplateMessage.fourRowTemplate:type_name -> WAWebProtobufsE2E.TemplateMessage.FourRowTemplate - 213, // 228: WAWebProtobufsE2E.TemplateMessage.hydratedFourRowTemplate:type_name -> WAWebProtobufsE2E.TemplateMessage.HydratedFourRowTemplate - 69, // 229: WAWebProtobufsE2E.TemplateMessage.interactiveMessageTemplate:type_name -> WAWebProtobufsE2E.InteractiveMessage - 85, // 230: WAWebProtobufsE2E.TemplateMessage.contextInfo:type_name -> WAWebProtobufsE2E.ContextInfo - 213, // 231: WAWebProtobufsE2E.TemplateMessage.hydratedTemplate:type_name -> WAWebProtobufsE2E.TemplateMessage.HydratedFourRowTemplate - 85, // 232: WAWebProtobufsE2E.StickerMessage.contextInfo:type_name -> WAWebProtobufsE2E.ContextInfo - 85, // 233: WAWebProtobufsE2E.LiveLocationMessage.contextInfo:type_name -> WAWebProtobufsE2E.ContextInfo - 223, // 234: WAWebProtobufsE2E.CancelPaymentRequestMessage.key:type_name -> WACommon.MessageKey - 223, // 235: WAWebProtobufsE2E.DeclinePaymentRequestMessage.key:type_name -> WACommon.MessageKey - 96, // 236: WAWebProtobufsE2E.RequestPaymentMessage.noteMessage:type_name -> WAWebProtobufsE2E.Message - 158, // 237: WAWebProtobufsE2E.RequestPaymentMessage.amount:type_name -> WAWebProtobufsE2E.Money - 93, // 238: WAWebProtobufsE2E.RequestPaymentMessage.background:type_name -> WAWebProtobufsE2E.PaymentBackground - 96, // 239: WAWebProtobufsE2E.SendPaymentMessage.noteMessage:type_name -> WAWebProtobufsE2E.Message - 223, // 240: WAWebProtobufsE2E.SendPaymentMessage.requestMessageKey:type_name -> WACommon.MessageKey - 93, // 241: WAWebProtobufsE2E.SendPaymentMessage.background:type_name -> WAWebProtobufsE2E.PaymentBackground - 143, // 242: WAWebProtobufsE2E.ContactsArrayMessage.contacts:type_name -> WAWebProtobufsE2E.ContactMessage - 85, // 243: WAWebProtobufsE2E.ContactsArrayMessage.contextInfo:type_name -> WAWebProtobufsE2E.ContextInfo - 0, // 244: WAWebProtobufsE2E.PeerDataOperationRequestMessage.peerDataOperationRequestType:type_name -> WAWebProtobufsE2E.PeerDataOperationRequestType - 219, // 245: WAWebProtobufsE2E.PeerDataOperationRequestMessage.requestStickerReupload:type_name -> WAWebProtobufsE2E.PeerDataOperationRequestMessage.RequestStickerReupload - 218, // 246: WAWebProtobufsE2E.PeerDataOperationRequestMessage.requestURLPreview:type_name -> WAWebProtobufsE2E.PeerDataOperationRequestMessage.RequestUrlPreview - 217, // 247: WAWebProtobufsE2E.PeerDataOperationRequestMessage.historySyncOnDemandRequest:type_name -> WAWebProtobufsE2E.PeerDataOperationRequestMessage.HistorySyncOnDemandRequest - 215, // 248: WAWebProtobufsE2E.PeerDataOperationRequestMessage.placeholderMessageResendRequest:type_name -> WAWebProtobufsE2E.PeerDataOperationRequestMessage.PlaceholderMessageResendRequest - 216, // 249: WAWebProtobufsE2E.PeerDataOperationRequestMessage.fullHistorySyncOnDemandRequest:type_name -> WAWebProtobufsE2E.PeerDataOperationRequestMessage.FullHistorySyncOnDemandRequest - 136, // 250: WAWebProtobufsE2E.AppStateSyncKeyRequest.keyIDs:type_name -> WAWebProtobufsE2E.AppStateSyncKeyId - 137, // 251: WAWebProtobufsE2E.AppStateSyncKeyShare.keys:type_name -> WAWebProtobufsE2E.AppStateSyncKey - 135, // 252: WAWebProtobufsE2E.AppStateSyncKeyData.fingerprint:type_name -> WAWebProtobufsE2E.AppStateSyncKeyFingerprint - 136, // 253: WAWebProtobufsE2E.AppStateSyncKey.keyID:type_name -> WAWebProtobufsE2E.AppStateSyncKeyId - 134, // 254: WAWebProtobufsE2E.AppStateSyncKey.keyData:type_name -> WAWebProtobufsE2E.AppStateSyncKeyData - 85, // 255: WAWebProtobufsE2E.AudioMessage.contextInfo:type_name -> WAWebProtobufsE2E.ContextInfo - 85, // 256: WAWebProtobufsE2E.DocumentMessage.contextInfo:type_name -> WAWebProtobufsE2E.ContextInfo - 85, // 257: WAWebProtobufsE2E.LocationMessage.contextInfo:type_name -> WAWebProtobufsE2E.ContextInfo - 85, // 258: WAWebProtobufsE2E.ContactMessage.contextInfo:type_name -> WAWebProtobufsE2E.ContextInfo - 1, // 259: WAWebProtobufsE2E.BotSessionMetadata.sessionSource:type_name -> WAWebProtobufsE2E.SessionSource - 87, // 260: WAWebProtobufsE2E.BotMemuMetadata.faceImages:type_name -> WAWebProtobufsE2E.BotMediaMetadata - 145, // 261: WAWebProtobufsE2E.BotMetadata.avatarMetadata:type_name -> WAWebProtobufsE2E.BotAvatarMetadata - 86, // 262: WAWebProtobufsE2E.BotMetadata.pluginMetadata:type_name -> WAWebProtobufsE2E.BotPluginMetadata - 146, // 263: WAWebProtobufsE2E.BotMetadata.suggestedPromptMetadata:type_name -> WAWebProtobufsE2E.BotSuggestedPromptMetadata - 147, // 264: WAWebProtobufsE2E.BotMetadata.searchMetadata:type_name -> WAWebProtobufsE2E.BotSessionMetadata - 148, // 265: WAWebProtobufsE2E.BotMetadata.memuMetadata:type_name -> WAWebProtobufsE2E.BotMemuMetadata - 88, // 266: WAWebProtobufsE2E.BotMetadata.reminderMetadata:type_name -> WAWebProtobufsE2E.BotReminderMetadata - 89, // 267: WAWebProtobufsE2E.BotMetadata.modelMetadata:type_name -> WAWebProtobufsE2E.BotModelMetadata - 224, // 268: WAWebProtobufsE2E.DeviceListMetadata.senderAccountType:type_name -> WAAdv.ADVEncryptionType - 224, // 269: WAWebProtobufsE2E.DeviceListMetadata.receiverAccountType:type_name -> WAAdv.ADVEncryptionType - 96, // 270: WAWebProtobufsE2E.EmbeddedMessage.message:type_name -> WAWebProtobufsE2E.Message - 151, // 271: WAWebProtobufsE2E.EmbeddedContent.embeddedMessage:type_name -> WAWebProtobufsE2E.EmbeddedMessage - 152, // 272: WAWebProtobufsE2E.EmbeddedContent.embeddedMusic:type_name -> WAWebProtobufsE2E.EmbeddedMusic - 156, // 273: WAWebProtobufsE2E.InteractiveAnnotation.location:type_name -> WAWebProtobufsE2E.Location - 196, // 274: WAWebProtobufsE2E.InteractiveAnnotation.newsletter:type_name -> WAWebProtobufsE2E.ContextInfo.ForwardedNewsletterMessageInfo - 155, // 275: WAWebProtobufsE2E.InteractiveAnnotation.polygonVertices:type_name -> WAWebProtobufsE2E.Point - 153, // 276: WAWebProtobufsE2E.InteractiveAnnotation.embeddedContent:type_name -> WAWebProtobufsE2E.EmbeddedContent - 222, // 277: WAWebProtobufsE2E.TemplateButton.quickReplyButton:type_name -> WAWebProtobufsE2E.TemplateButton.QuickReplyButton - 221, // 278: WAWebProtobufsE2E.TemplateButton.urlButton:type_name -> WAWebProtobufsE2E.TemplateButton.URLButton - 220, // 279: WAWebProtobufsE2E.TemplateButton.callButton:type_name -> WAWebProtobufsE2E.TemplateButton.CallButton - 5, // 280: WAWebProtobufsE2E.CallLogMessage.CallParticipant.callOutcome:type_name -> WAWebProtobufsE2E.CallLogMessage.CallOutcome - 167, // 281: WAWebProtobufsE2E.ButtonsMessage.Button.buttonText:type_name -> WAWebProtobufsE2E.ButtonsMessage.Button.ButtonText - 13, // 282: WAWebProtobufsE2E.ButtonsMessage.Button.type:type_name -> WAWebProtobufsE2E.ButtonsMessage.Button.Type - 166, // 283: WAWebProtobufsE2E.ButtonsMessage.Button.nativeFlowInfo:type_name -> WAWebProtobufsE2E.ButtonsMessage.Button.NativeFlowInfo - 16, // 284: WAWebProtobufsE2E.InteractiveResponseMessage.Body.format:type_name -> WAWebProtobufsE2E.InteractiveResponseMessage.Body.Format - 17, // 285: WAWebProtobufsE2E.InteractiveMessage.ShopMessage.surface:type_name -> WAWebProtobufsE2E.InteractiveMessage.ShopMessage.Surface - 69, // 286: WAWebProtobufsE2E.InteractiveMessage.CarouselMessage.cards:type_name -> WAWebProtobufsE2E.InteractiveMessage - 177, // 287: WAWebProtobufsE2E.InteractiveMessage.NativeFlowMessage.buttons:type_name -> WAWebProtobufsE2E.InteractiveMessage.NativeFlowMessage.NativeFlowButton - 141, // 288: WAWebProtobufsE2E.InteractiveMessage.Header.documentMessage:type_name -> WAWebProtobufsE2E.DocumentMessage - 84, // 289: WAWebProtobufsE2E.InteractiveMessage.Header.imageMessage:type_name -> WAWebProtobufsE2E.ImageMessage - 81, // 290: WAWebProtobufsE2E.InteractiveMessage.Header.videoMessage:type_name -> WAWebProtobufsE2E.VideoMessage - 142, // 291: WAWebProtobufsE2E.InteractiveMessage.Header.locationMessage:type_name -> WAWebProtobufsE2E.LocationMessage - 118, // 292: WAWebProtobufsE2E.InteractiveMessage.Header.productMessage:type_name -> WAWebProtobufsE2E.ProductMessage - 181, // 293: WAWebProtobufsE2E.ListMessage.ProductListInfo.productSections:type_name -> WAWebProtobufsE2E.ListMessage.ProductSection - 180, // 294: WAWebProtobufsE2E.ListMessage.ProductListInfo.headerImage:type_name -> WAWebProtobufsE2E.ListMessage.ProductListHeaderImage - 182, // 295: WAWebProtobufsE2E.ListMessage.ProductSection.products:type_name -> WAWebProtobufsE2E.ListMessage.Product - 184, // 296: WAWebProtobufsE2E.ListMessage.Section.rows:type_name -> WAWebProtobufsE2E.ListMessage.Row - 187, // 297: WAWebProtobufsE2E.HighlyStructuredMessage.HSMLocalizableParameter.currency:type_name -> WAWebProtobufsE2E.HighlyStructuredMessage.HSMLocalizableParameter.HSMCurrency - 186, // 298: WAWebProtobufsE2E.HighlyStructuredMessage.HSMLocalizableParameter.dateTime:type_name -> WAWebProtobufsE2E.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime - 188, // 299: WAWebProtobufsE2E.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime.component:type_name -> WAWebProtobufsE2E.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime.HSMDateTimeComponent - 189, // 300: WAWebProtobufsE2E.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime.unixEpoch:type_name -> WAWebProtobufsE2E.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime.HSMDateTimeUnixEpoch - 24, // 301: WAWebProtobufsE2E.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime.HSMDateTimeComponent.dayOfWeek:type_name -> WAWebProtobufsE2E.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime.HSMDateTimeComponent.DayOfWeekType - 23, // 302: WAWebProtobufsE2E.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime.HSMDateTimeComponent.calendar:type_name -> WAWebProtobufsE2E.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime.HSMDateTimeComponent.CalendarType - 225, // 303: WAWebProtobufsE2E.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.mediaUploadResult:type_name -> WAMmsRetry.MediaRetryNotification.ResultType - 121, // 304: WAWebProtobufsE2E.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.stickerMessage:type_name -> WAWebProtobufsE2E.StickerMessage - 194, // 305: WAWebProtobufsE2E.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.linkPreviewResponse:type_name -> WAWebProtobufsE2E.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.LinkPreviewResponse - 193, // 306: WAWebProtobufsE2E.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.placeholderMessageResendResponse:type_name -> WAWebProtobufsE2E.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.PlaceholderMessageResendResponse - 191, // 307: WAWebProtobufsE2E.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.waffleNonceFetchRequestResponse:type_name -> WAWebProtobufsE2E.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.WaffleNonceFetchResponse - 192, // 308: WAWebProtobufsE2E.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.fullHistorySyncOnDemandRequestResponse:type_name -> WAWebProtobufsE2E.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.FullHistorySyncOnDemandRequestResponse - 130, // 309: WAWebProtobufsE2E.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.FullHistorySyncOnDemandRequestResponse.requestMetadata:type_name -> WAWebProtobufsE2E.FullHistorySyncOnDemandRequestMetadata - 25, // 310: WAWebProtobufsE2E.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.FullHistorySyncOnDemandRequestResponse.responseCode:type_name -> WAWebProtobufsE2E.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.FullHistorySyncOnDemandResponseCode - 195, // 311: WAWebProtobufsE2E.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.LinkPreviewResponse.hqThumbnail:type_name -> WAWebProtobufsE2E.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.LinkPreviewResponse.LinkPreviewHighQualityThumbnail - 40, // 312: WAWebProtobufsE2E.ContextInfo.ForwardedNewsletterMessageInfo.contentType:type_name -> WAWebProtobufsE2E.ContextInfo.ForwardedNewsletterMessageInfo.ContentType - 41, // 313: WAWebProtobufsE2E.ContextInfo.ExternalAdReplyInfo.mediaType:type_name -> WAWebProtobufsE2E.ContextInfo.ExternalAdReplyInfo.MediaType - 42, // 314: WAWebProtobufsE2E.ContextInfo.AdReplyInfo.mediaType:type_name -> WAWebProtobufsE2E.ContextInfo.AdReplyInfo.MediaType - 203, // 315: WAWebProtobufsE2E.ContextInfo.DataSharingContext.parameters:type_name -> WAWebProtobufsE2E.ContextInfo.DataSharingContext.Parameters - 203, // 316: WAWebProtobufsE2E.ContextInfo.DataSharingContext.Parameters.contents:type_name -> WAWebProtobufsE2E.ContextInfo.DataSharingContext.Parameters - 52, // 317: WAWebProtobufsE2E.HydratedTemplateButton.HydratedURLButton.webviewPresentation:type_name -> WAWebProtobufsE2E.HydratedTemplateButton.HydratedURLButton.WebviewPresentationType - 84, // 318: WAWebProtobufsE2E.ProductMessage.ProductSnapshot.productImage:type_name -> WAWebProtobufsE2E.ImageMessage - 84, // 319: WAWebProtobufsE2E.ProductMessage.CatalogSnapshot.catalogImage:type_name -> WAWebProtobufsE2E.ImageMessage - 141, // 320: WAWebProtobufsE2E.TemplateMessage.HydratedFourRowTemplate.documentMessage:type_name -> WAWebProtobufsE2E.DocumentMessage - 84, // 321: WAWebProtobufsE2E.TemplateMessage.HydratedFourRowTemplate.imageMessage:type_name -> WAWebProtobufsE2E.ImageMessage - 81, // 322: WAWebProtobufsE2E.TemplateMessage.HydratedFourRowTemplate.videoMessage:type_name -> WAWebProtobufsE2E.VideoMessage - 142, // 323: WAWebProtobufsE2E.TemplateMessage.HydratedFourRowTemplate.locationMessage:type_name -> WAWebProtobufsE2E.LocationMessage - 92, // 324: WAWebProtobufsE2E.TemplateMessage.HydratedFourRowTemplate.hydratedButtons:type_name -> WAWebProtobufsE2E.HydratedTemplateButton - 141, // 325: WAWebProtobufsE2E.TemplateMessage.FourRowTemplate.documentMessage:type_name -> WAWebProtobufsE2E.DocumentMessage - 74, // 326: WAWebProtobufsE2E.TemplateMessage.FourRowTemplate.highlyStructuredMessage:type_name -> WAWebProtobufsE2E.HighlyStructuredMessage - 84, // 327: WAWebProtobufsE2E.TemplateMessage.FourRowTemplate.imageMessage:type_name -> WAWebProtobufsE2E.ImageMessage - 81, // 328: WAWebProtobufsE2E.TemplateMessage.FourRowTemplate.videoMessage:type_name -> WAWebProtobufsE2E.VideoMessage - 142, // 329: WAWebProtobufsE2E.TemplateMessage.FourRowTemplate.locationMessage:type_name -> WAWebProtobufsE2E.LocationMessage - 74, // 330: WAWebProtobufsE2E.TemplateMessage.FourRowTemplate.content:type_name -> WAWebProtobufsE2E.HighlyStructuredMessage - 74, // 331: WAWebProtobufsE2E.TemplateMessage.FourRowTemplate.footer:type_name -> WAWebProtobufsE2E.HighlyStructuredMessage - 157, // 332: WAWebProtobufsE2E.TemplateMessage.FourRowTemplate.buttons:type_name -> WAWebProtobufsE2E.TemplateButton - 223, // 333: WAWebProtobufsE2E.PeerDataOperationRequestMessage.PlaceholderMessageResendRequest.messageKey:type_name -> WACommon.MessageKey - 130, // 334: WAWebProtobufsE2E.PeerDataOperationRequestMessage.FullHistorySyncOnDemandRequest.requestMetadata:type_name -> WAWebProtobufsE2E.FullHistorySyncOnDemandRequestMetadata - 226, // 335: WAWebProtobufsE2E.PeerDataOperationRequestMessage.FullHistorySyncOnDemandRequest.historySyncConfig:type_name -> WAWebProtobufsCompanionReg.DeviceProps.HistorySyncConfig - 74, // 336: WAWebProtobufsE2E.TemplateButton.CallButton.displayText:type_name -> WAWebProtobufsE2E.HighlyStructuredMessage - 74, // 337: WAWebProtobufsE2E.TemplateButton.CallButton.phoneNumber:type_name -> WAWebProtobufsE2E.HighlyStructuredMessage - 74, // 338: WAWebProtobufsE2E.TemplateButton.URLButton.displayText:type_name -> WAWebProtobufsE2E.HighlyStructuredMessage - 74, // 339: WAWebProtobufsE2E.TemplateButton.URLButton.URL:type_name -> WAWebProtobufsE2E.HighlyStructuredMessage - 74, // 340: WAWebProtobufsE2E.TemplateButton.QuickReplyButton.displayText:type_name -> WAWebProtobufsE2E.HighlyStructuredMessage - 341, // [341:341] is the sub-list for method output_type - 341, // [341:341] is the sub-list for method input_type - 341, // [341:341] is the sub-list for extension type_name - 341, // [341:341] is the sub-list for extension extendee - 0, // [0:341] is the sub-list for field type_name + 189, // 0: WAWebProtobufsE2E.StickerPackMessage.stickers:type_name -> WAWebProtobufsE2E.StickerPackMessage.Sticker + 102, // 1: WAWebProtobufsE2E.StickerPackMessage.contextInfo:type_name -> WAWebProtobufsE2E.ContextInfo + 7, // 2: WAWebProtobufsE2E.StickerPackMessage.stickerPackOrigin:type_name -> WAWebProtobufsE2E.StickerPackMessage.StickerPackOrigin + 8, // 3: WAWebProtobufsE2E.PlaceholderMessage.type:type_name -> WAWebProtobufsE2E.PlaceholderMessage.PlaceholderType + 9, // 4: WAWebProtobufsE2E.BCallMessage.mediaType:type_name -> WAWebProtobufsE2E.BCallMessage.MediaType + 10, // 5: WAWebProtobufsE2E.CallLogMessage.callOutcome:type_name -> WAWebProtobufsE2E.CallLogMessage.CallOutcome + 11, // 6: WAWebProtobufsE2E.CallLogMessage.callType:type_name -> WAWebProtobufsE2E.CallLogMessage.CallType + 190, // 7: WAWebProtobufsE2E.CallLogMessage.participants:type_name -> WAWebProtobufsE2E.CallLogMessage.CallParticipant + 267, // 8: WAWebProtobufsE2E.ScheduledCallEditMessage.key:type_name -> WACommon.MessageKey + 12, // 9: WAWebProtobufsE2E.ScheduledCallEditMessage.editType:type_name -> WAWebProtobufsE2E.ScheduledCallEditMessage.EditType + 13, // 10: WAWebProtobufsE2E.ScheduledCallCreationMessage.callType:type_name -> WAWebProtobufsE2E.ScheduledCallCreationMessage.CallType + 14, // 11: WAWebProtobufsE2E.EventResponseMessage.response:type_name -> WAWebProtobufsE2E.EventResponseMessage.EventResponseType + 267, // 12: WAWebProtobufsE2E.PinInChatMessage.key:type_name -> WACommon.MessageKey + 15, // 13: WAWebProtobufsE2E.PinInChatMessage.type:type_name -> WAWebProtobufsE2E.PinInChatMessage.Type + 267, // 14: WAWebProtobufsE2E.StatusStickerInteractionMessage.key:type_name -> WACommon.MessageKey + 16, // 15: WAWebProtobufsE2E.StatusStickerInteractionMessage.type:type_name -> WAWebProtobufsE2E.StatusStickerInteractionMessage.StatusStickerType + 102, // 16: WAWebProtobufsE2E.ButtonsResponseMessage.contextInfo:type_name -> WAWebProtobufsE2E.ContextInfo + 17, // 17: WAWebProtobufsE2E.ButtonsResponseMessage.type:type_name -> WAWebProtobufsE2E.ButtonsResponseMessage.Type + 162, // 18: WAWebProtobufsE2E.ButtonsMessage.documentMessage:type_name -> WAWebProtobufsE2E.DocumentMessage + 101, // 19: WAWebProtobufsE2E.ButtonsMessage.imageMessage:type_name -> WAWebProtobufsE2E.ImageMessage + 95, // 20: WAWebProtobufsE2E.ButtonsMessage.videoMessage:type_name -> WAWebProtobufsE2E.VideoMessage + 166, // 21: WAWebProtobufsE2E.ButtonsMessage.locationMessage:type_name -> WAWebProtobufsE2E.LocationMessage + 102, // 22: WAWebProtobufsE2E.ButtonsMessage.contextInfo:type_name -> WAWebProtobufsE2E.ContextInfo + 191, // 23: WAWebProtobufsE2E.ButtonsMessage.buttons:type_name -> WAWebProtobufsE2E.ButtonsMessage.Button + 18, // 24: WAWebProtobufsE2E.ButtonsMessage.headerType:type_name -> WAWebProtobufsE2E.ButtonsMessage.HeaderType + 267, // 25: WAWebProtobufsE2E.SecretEncryptedMessage.targetMessageKey:type_name -> WACommon.MessageKey + 20, // 26: WAWebProtobufsE2E.SecretEncryptedMessage.secretEncType:type_name -> WAWebProtobufsE2E.SecretEncryptedMessage.SecretEncType + 102, // 27: WAWebProtobufsE2E.GroupInviteMessage.contextInfo:type_name -> WAWebProtobufsE2E.ContextInfo + 21, // 28: WAWebProtobufsE2E.GroupInviteMessage.groupType:type_name -> WAWebProtobufsE2E.GroupInviteMessage.GroupType + 195, // 29: WAWebProtobufsE2E.InteractiveResponseMessage.nativeFlowResponseMessage:type_name -> WAWebProtobufsE2E.InteractiveResponseMessage.NativeFlowResponseMessage + 194, // 30: WAWebProtobufsE2E.InteractiveResponseMessage.body:type_name -> WAWebProtobufsE2E.InteractiveResponseMessage.Body + 102, // 31: WAWebProtobufsE2E.InteractiveResponseMessage.contextInfo:type_name -> WAWebProtobufsE2E.ContextInfo + 197, // 32: WAWebProtobufsE2E.InteractiveMessage.shopStorefrontMessage:type_name -> WAWebProtobufsE2E.InteractiveMessage.ShopMessage + 199, // 33: WAWebProtobufsE2E.InteractiveMessage.collectionMessage:type_name -> WAWebProtobufsE2E.InteractiveMessage.CollectionMessage + 198, // 34: WAWebProtobufsE2E.InteractiveMessage.nativeFlowMessage:type_name -> WAWebProtobufsE2E.InteractiveMessage.NativeFlowMessage + 196, // 35: WAWebProtobufsE2E.InteractiveMessage.carouselMessage:type_name -> WAWebProtobufsE2E.InteractiveMessage.CarouselMessage + 203, // 36: WAWebProtobufsE2E.InteractiveMessage.header:type_name -> WAWebProtobufsE2E.InteractiveMessage.Header + 202, // 37: WAWebProtobufsE2E.InteractiveMessage.body:type_name -> WAWebProtobufsE2E.InteractiveMessage.Body + 201, // 38: WAWebProtobufsE2E.InteractiveMessage.footer:type_name -> WAWebProtobufsE2E.InteractiveMessage.Footer + 200, // 39: WAWebProtobufsE2E.InteractiveMessage.bloksWidget:type_name -> WAWebProtobufsE2E.InteractiveMessage.BloksWidget + 102, // 40: WAWebProtobufsE2E.InteractiveMessage.contextInfo:type_name -> WAWebProtobufsE2E.ContextInfo + 185, // 41: WAWebProtobufsE2E.InteractiveMessage.urlTrackingMap:type_name -> WAWebProtobufsE2E.UrlTrackingMap + 25, // 42: WAWebProtobufsE2E.ListResponseMessage.listType:type_name -> WAWebProtobufsE2E.ListResponseMessage.ListType + 205, // 43: WAWebProtobufsE2E.ListResponseMessage.singleSelectReply:type_name -> WAWebProtobufsE2E.ListResponseMessage.SingleSelectReply + 102, // 44: WAWebProtobufsE2E.ListResponseMessage.contextInfo:type_name -> WAWebProtobufsE2E.ContextInfo + 26, // 45: WAWebProtobufsE2E.ListMessage.listType:type_name -> WAWebProtobufsE2E.ListMessage.ListType + 210, // 46: WAWebProtobufsE2E.ListMessage.sections:type_name -> WAWebProtobufsE2E.ListMessage.Section + 206, // 47: WAWebProtobufsE2E.ListMessage.productListInfo:type_name -> WAWebProtobufsE2E.ListMessage.ProductListInfo + 102, // 48: WAWebProtobufsE2E.ListMessage.contextInfo:type_name -> WAWebProtobufsE2E.ContextInfo + 28, // 49: WAWebProtobufsE2E.OrderMessage.status:type_name -> WAWebProtobufsE2E.OrderMessage.OrderStatus + 27, // 50: WAWebProtobufsE2E.OrderMessage.surface:type_name -> WAWebProtobufsE2E.OrderMessage.OrderSurface + 102, // 51: WAWebProtobufsE2E.OrderMessage.contextInfo:type_name -> WAWebProtobufsE2E.ContextInfo + 267, // 52: WAWebProtobufsE2E.OrderMessage.orderRequestMessageID:type_name -> WACommon.MessageKey + 29, // 53: WAWebProtobufsE2E.StatusQuotedMessage.type:type_name -> WAWebProtobufsE2E.StatusQuotedMessage.StatusQuotedMessageType + 267, // 54: WAWebProtobufsE2E.StatusQuotedMessage.originalStatusID:type_name -> WACommon.MessageKey + 30, // 55: WAWebProtobufsE2E.PaymentInviteMessage.serviceType:type_name -> WAWebProtobufsE2E.PaymentInviteMessage.ServiceType + 212, // 56: WAWebProtobufsE2E.HighlyStructuredMessage.localizableParams:type_name -> WAWebProtobufsE2E.HighlyStructuredMessage.HSMLocalizableParameter + 139, // 57: WAWebProtobufsE2E.HighlyStructuredMessage.hydratedHsm:type_name -> WAWebProtobufsE2E.TemplateMessage + 2, // 58: WAWebProtobufsE2E.PeerDataOperationRequestResponseMessage.peerDataOperationRequestType:type_name -> WAWebProtobufsE2E.PeerDataOperationRequestType + 217, // 59: WAWebProtobufsE2E.PeerDataOperationRequestResponseMessage.peerDataOperationResult:type_name -> WAWebProtobufsE2E.PeerDataOperationRequestResponseMessage.PeerDataOperationResult + 2, // 60: WAWebProtobufsE2E.PeerDataOperationRequestMessage.peerDataOperationRequestType:type_name -> WAWebProtobufsE2E.PeerDataOperationRequestType + 237, // 61: WAWebProtobufsE2E.PeerDataOperationRequestMessage.requestStickerReupload:type_name -> WAWebProtobufsE2E.PeerDataOperationRequestMessage.RequestStickerReupload + 236, // 62: WAWebProtobufsE2E.PeerDataOperationRequestMessage.requestURLPreview:type_name -> WAWebProtobufsE2E.PeerDataOperationRequestMessage.RequestUrlPreview + 235, // 63: WAWebProtobufsE2E.PeerDataOperationRequestMessage.historySyncOnDemandRequest:type_name -> WAWebProtobufsE2E.PeerDataOperationRequestMessage.HistorySyncOnDemandRequest + 233, // 64: WAWebProtobufsE2E.PeerDataOperationRequestMessage.placeholderMessageResendRequest:type_name -> WAWebProtobufsE2E.PeerDataOperationRequestMessage.PlaceholderMessageResendRequest + 234, // 65: WAWebProtobufsE2E.PeerDataOperationRequestMessage.fullHistorySyncOnDemandRequest:type_name -> WAWebProtobufsE2E.PeerDataOperationRequestMessage.FullHistorySyncOnDemandRequest + 232, // 66: WAWebProtobufsE2E.PeerDataOperationRequestMessage.syncdCollectionFatalRecoveryRequest:type_name -> WAWebProtobufsE2E.PeerDataOperationRequestMessage.SyncDCollectionFatalRecoveryRequest + 231, // 67: WAWebProtobufsE2E.PeerDataOperationRequestMessage.historySyncChunkRetryRequest:type_name -> WAWebProtobufsE2E.PeerDataOperationRequestMessage.HistorySyncChunkRetryRequest + 229, // 68: WAWebProtobufsE2E.PeerDataOperationRequestMessage.galaxyFlowAction:type_name -> WAWebProtobufsE2E.PeerDataOperationRequestMessage.GalaxyFlowAction + 230, // 69: WAWebProtobufsE2E.PeerDataOperationRequestMessage.companionCanonicalUserNonceFetchRequest:type_name -> WAWebProtobufsE2E.PeerDataOperationRequestMessage.CompanionCanonicalUserNonceFetchRequest + 36, // 70: WAWebProtobufsE2E.RequestWelcomeMessageMetadata.localChatState:type_name -> WAWebProtobufsE2E.RequestWelcomeMessageMetadata.LocalChatState + 267, // 71: WAWebProtobufsE2E.ProtocolMessage.key:type_name -> WACommon.MessageKey + 37, // 72: WAWebProtobufsE2E.ProtocolMessage.type:type_name -> WAWebProtobufsE2E.ProtocolMessage.Type + 157, // 73: WAWebProtobufsE2E.ProtocolMessage.historySyncNotification:type_name -> WAWebProtobufsE2E.HistorySyncNotification + 152, // 74: WAWebProtobufsE2E.ProtocolMessage.appStateSyncKeyShare:type_name -> WAWebProtobufsE2E.AppStateSyncKeyShare + 151, // 75: WAWebProtobufsE2E.ProtocolMessage.appStateSyncKeyRequest:type_name -> WAWebProtobufsE2E.AppStateSyncKeyRequest + 147, // 76: WAWebProtobufsE2E.ProtocolMessage.initialSecurityNotificationSettingSync:type_name -> WAWebProtobufsE2E.InitialSecurityNotificationSettingSync + 150, // 77: WAWebProtobufsE2E.ProtocolMessage.appStateFatalExceptionNotification:type_name -> WAWebProtobufsE2E.AppStateFatalExceptionNotification + 109, // 78: WAWebProtobufsE2E.ProtocolMessage.disappearingMode:type_name -> WAWebProtobufsE2E.DisappearingMode + 111, // 79: WAWebProtobufsE2E.ProtocolMessage.editedMessage:type_name -> WAWebProtobufsE2E.Message + 91, // 80: WAWebProtobufsE2E.ProtocolMessage.peerDataOperationRequestMessage:type_name -> WAWebProtobufsE2E.PeerDataOperationRequestMessage + 90, // 81: WAWebProtobufsE2E.ProtocolMessage.peerDataOperationRequestResponseMessage:type_name -> WAWebProtobufsE2E.PeerDataOperationRequestResponseMessage + 268, // 82: WAWebProtobufsE2E.ProtocolMessage.botFeedbackMessage:type_name -> WAWebProtobufsAICommon.BotFeedbackMessage + 92, // 83: WAWebProtobufsE2E.ProtocolMessage.requestWelcomeMessageMetadata:type_name -> WAWebProtobufsE2E.RequestWelcomeMessageMetadata + 183, // 84: WAWebProtobufsE2E.ProtocolMessage.mediaNotifyMessage:type_name -> WAWebProtobufsE2E.MediaNotifyMessage + 94, // 85: WAWebProtobufsE2E.ProtocolMessage.cloudApiThreadControlNotification:type_name -> WAWebProtobufsE2E.CloudAPIThreadControlNotification + 184, // 86: WAWebProtobufsE2E.ProtocolMessage.lidMigrationMappingSyncMessage:type_name -> WAWebProtobufsE2E.LIDMigrationMappingSyncMessage + 269, // 87: WAWebProtobufsE2E.ProtocolMessage.limitSharing:type_name -> WACommon.LimitSharing + 188, // 88: WAWebProtobufsE2E.ProtocolMessage.aiQueryFanout:type_name -> WAWebProtobufsE2E.AIQueryFanout + 186, // 89: WAWebProtobufsE2E.ProtocolMessage.memberLabel:type_name -> WAWebProtobufsE2E.MemberLabel + 270, // 90: WAWebProtobufsE2E.ProtocolMessage.aiMediaCollectionMessage:type_name -> WAWebProtobufsAICommon.AIMediaCollectionMessage + 38, // 91: WAWebProtobufsE2E.CloudAPIThreadControlNotification.status:type_name -> WAWebProtobufsE2E.CloudAPIThreadControlNotification.CloudAPIThreadControl + 238, // 92: WAWebProtobufsE2E.CloudAPIThreadControlNotification.notificationContent:type_name -> WAWebProtobufsE2E.CloudAPIThreadControlNotification.CloudAPIThreadControlNotificationContent + 106, // 93: WAWebProtobufsE2E.VideoMessage.interactiveAnnotations:type_name -> WAWebProtobufsE2E.InteractiveAnnotation + 102, // 94: WAWebProtobufsE2E.VideoMessage.contextInfo:type_name -> WAWebProtobufsE2E.ContextInfo + 40, // 95: WAWebProtobufsE2E.VideoMessage.gifAttribution:type_name -> WAWebProtobufsE2E.VideoMessage.Attribution + 106, // 96: WAWebProtobufsE2E.VideoMessage.annotations:type_name -> WAWebProtobufsE2E.InteractiveAnnotation + 110, // 97: WAWebProtobufsE2E.VideoMessage.processedVideos:type_name -> WAWebProtobufsE2E.ProcessedVideo + 39, // 98: WAWebProtobufsE2E.VideoMessage.videoSourceType:type_name -> WAWebProtobufsE2E.VideoMessage.VideoSourceType + 43, // 99: WAWebProtobufsE2E.ExtendedTextMessage.font:type_name -> WAWebProtobufsE2E.ExtendedTextMessage.FontType + 42, // 100: WAWebProtobufsE2E.ExtendedTextMessage.previewType:type_name -> WAWebProtobufsE2E.ExtendedTextMessage.PreviewType + 102, // 101: WAWebProtobufsE2E.ExtendedTextMessage.contextInfo:type_name -> WAWebProtobufsE2E.ContextInfo + 41, // 102: WAWebProtobufsE2E.ExtendedTextMessage.inviteLinkGroupType:type_name -> WAWebProtobufsE2E.ExtendedTextMessage.InviteLinkGroupType + 41, // 103: WAWebProtobufsE2E.ExtendedTextMessage.inviteLinkGroupTypeV2:type_name -> WAWebProtobufsE2E.ExtendedTextMessage.InviteLinkGroupType + 165, // 104: WAWebProtobufsE2E.ExtendedTextMessage.faviconMMSMetadata:type_name -> WAWebProtobufsE2E.MMSThumbnailMetadata + 97, // 105: WAWebProtobufsE2E.ExtendedTextMessage.linkPreviewMetadata:type_name -> WAWebProtobufsE2E.LinkPreviewMetadata + 98, // 106: WAWebProtobufsE2E.ExtendedTextMessage.paymentLinkMetadata:type_name -> WAWebProtobufsE2E.PaymentLinkMetadata + 169, // 107: WAWebProtobufsE2E.ExtendedTextMessage.endCardTiles:type_name -> WAWebProtobufsE2E.VideoEndCard + 173, // 108: WAWebProtobufsE2E.ExtendedTextMessage.musicMetadata:type_name -> WAWebProtobufsE2E.EmbeddedMusic + 164, // 109: WAWebProtobufsE2E.ExtendedTextMessage.paymentExtendedMetadata:type_name -> WAWebProtobufsE2E.PaymentExtendedMetadata + 98, // 110: WAWebProtobufsE2E.LinkPreviewMetadata.paymentLinkMetadata:type_name -> WAWebProtobufsE2E.PaymentLinkMetadata + 163, // 111: WAWebProtobufsE2E.LinkPreviewMetadata.urlMetadata:type_name -> WAWebProtobufsE2E.URLMetadata + 44, // 112: WAWebProtobufsE2E.LinkPreviewMetadata.socialMediaPostType:type_name -> WAWebProtobufsE2E.LinkPreviewMetadata.SocialMediaPostType + 173, // 113: WAWebProtobufsE2E.LinkPreviewMetadata.musicMetadata:type_name -> WAWebProtobufsE2E.EmbeddedMusic + 241, // 114: WAWebProtobufsE2E.PaymentLinkMetadata.button:type_name -> WAWebProtobufsE2E.PaymentLinkMetadata.PaymentLinkButton + 239, // 115: WAWebProtobufsE2E.PaymentLinkMetadata.header:type_name -> WAWebProtobufsE2E.PaymentLinkMetadata.PaymentLinkHeader + 240, // 116: WAWebProtobufsE2E.PaymentLinkMetadata.provider:type_name -> WAWebProtobufsE2E.PaymentLinkMetadata.PaymentLinkProvider + 267, // 117: WAWebProtobufsE2E.StatusNotificationMessage.responseMessageKey:type_name -> WACommon.MessageKey + 267, // 118: WAWebProtobufsE2E.StatusNotificationMessage.originalMessageKey:type_name -> WACommon.MessageKey + 46, // 119: WAWebProtobufsE2E.StatusNotificationMessage.type:type_name -> WAWebProtobufsE2E.StatusNotificationMessage.StatusNotificationType + 47, // 120: WAWebProtobufsE2E.InvoiceMessage.attachmentType:type_name -> WAWebProtobufsE2E.InvoiceMessage.AttachmentType + 106, // 121: WAWebProtobufsE2E.ImageMessage.interactiveAnnotations:type_name -> WAWebProtobufsE2E.InteractiveAnnotation + 102, // 122: WAWebProtobufsE2E.ImageMessage.contextInfo:type_name -> WAWebProtobufsE2E.ContextInfo + 106, // 123: WAWebProtobufsE2E.ImageMessage.annotations:type_name -> WAWebProtobufsE2E.InteractiveAnnotation + 48, // 124: WAWebProtobufsE2E.ImageMessage.imageSourceType:type_name -> WAWebProtobufsE2E.ImageMessage.ImageSourceType + 111, // 125: WAWebProtobufsE2E.ContextInfo.quotedMessage:type_name -> WAWebProtobufsE2E.Message + 246, // 126: WAWebProtobufsE2E.ContextInfo.quotedAd:type_name -> WAWebProtobufsE2E.ContextInfo.AdReplyInfo + 267, // 127: WAWebProtobufsE2E.ContextInfo.placeholderKey:type_name -> WACommon.MessageKey + 245, // 128: WAWebProtobufsE2E.ContextInfo.externalAdReply:type_name -> WAWebProtobufsE2E.ContextInfo.ExternalAdReplyInfo + 109, // 129: WAWebProtobufsE2E.ContextInfo.disappearingMode:type_name -> WAWebProtobufsE2E.DisappearingMode + 180, // 130: WAWebProtobufsE2E.ContextInfo.actionLink:type_name -> WAWebProtobufsE2E.ActionLink + 181, // 131: WAWebProtobufsE2E.ContextInfo.groupMentions:type_name -> WAWebProtobufsE2E.GroupMention + 250, // 132: WAWebProtobufsE2E.ContextInfo.utm:type_name -> WAWebProtobufsE2E.ContextInfo.UTMInfo + 244, // 133: WAWebProtobufsE2E.ContextInfo.forwardedNewsletterMessageInfo:type_name -> WAWebProtobufsE2E.ContextInfo.ForwardedNewsletterMessageInfo + 251, // 134: WAWebProtobufsE2E.ContextInfo.businessMessageForwardInfo:type_name -> WAWebProtobufsE2E.ContextInfo.BusinessMessageForwardInfo + 243, // 135: WAWebProtobufsE2E.ContextInfo.dataSharingContext:type_name -> WAWebProtobufsE2E.ContextInfo.DataSharingContext + 248, // 136: WAWebProtobufsE2E.ContextInfo.featureEligibilities:type_name -> WAWebProtobufsE2E.ContextInfo.FeatureEligibilities + 271, // 137: WAWebProtobufsE2E.ContextInfo.forwardedAiBotMessageInfo:type_name -> WAWebProtobufsAICommon.ForwardedAIBotMessageInfo + 53, // 138: WAWebProtobufsE2E.ContextInfo.statusAttributionType:type_name -> WAWebProtobufsE2E.ContextInfo.StatusAttributionType + 185, // 139: WAWebProtobufsE2E.ContextInfo.urlTrackingMap:type_name -> WAWebProtobufsE2E.UrlTrackingMap + 52, // 140: WAWebProtobufsE2E.ContextInfo.pairedMediaType:type_name -> WAWebProtobufsE2E.ContextInfo.PairedMediaType + 186, // 141: WAWebProtobufsE2E.ContextInfo.memberLabel:type_name -> WAWebProtobufsE2E.MemberLabel + 51, // 142: WAWebProtobufsE2E.ContextInfo.statusSourceType:type_name -> WAWebProtobufsE2E.ContextInfo.StatusSourceType + 272, // 143: WAWebProtobufsE2E.ContextInfo.statusAttributions:type_name -> WAStatusAttributions.StatusAttribution + 50, // 144: WAWebProtobufsE2E.ContextInfo.forwardOrigin:type_name -> WAWebProtobufsE2E.ContextInfo.ForwardOrigin + 249, // 145: WAWebProtobufsE2E.ContextInfo.questionReplyQuotedMessage:type_name -> WAWebProtobufsE2E.ContextInfo.QuestionReplyQuotedMessage + 242, // 146: WAWebProtobufsE2E.ContextInfo.statusAudienceMetadata:type_name -> WAWebProtobufsE2E.ContextInfo.StatusAudienceMetadata + 49, // 147: WAWebProtobufsE2E.ContextInfo.quotedType:type_name -> WAWebProtobufsE2E.ContextInfo.QuotedType + 273, // 148: WAWebProtobufsE2E.ContextInfo.botMessageSharingInfo:type_name -> WAWebProtobufsAICommon.BotMessageSharingInfo + 170, // 149: WAWebProtobufsE2E.ContextInfo.mediaDomainInfo:type_name -> WAWebProtobufsE2E.MediaDomainInfo + 247, // 150: WAWebProtobufsE2E.ContextInfo.partiallySelectedContent:type_name -> WAWebProtobufsE2E.ContextInfo.PartiallySelectedContent + 60, // 151: WAWebProtobufsE2E.MessageAssociation.associationType:type_name -> WAWebProtobufsE2E.MessageAssociation.AssociationType + 267, // 152: WAWebProtobufsE2E.MessageAssociation.parentMessageKey:type_name -> WACommon.MessageKey + 61, // 153: WAWebProtobufsE2E.ThreadID.threadType:type_name -> WAWebProtobufsE2E.ThreadID.ThreadType + 267, // 154: WAWebProtobufsE2E.ThreadID.threadKey:type_name -> WACommon.MessageKey + 171, // 155: WAWebProtobufsE2E.MessageContextInfo.deviceListMetadata:type_name -> WAWebProtobufsE2E.DeviceListMetadata + 274, // 156: WAWebProtobufsE2E.MessageContextInfo.botMetadata:type_name -> WAWebProtobufsAICommon.BotMetadata + 62, // 157: WAWebProtobufsE2E.MessageContextInfo.messageAddOnExpiryType:type_name -> WAWebProtobufsE2E.MessageContextInfo.MessageAddonExpiryType + 103, // 158: WAWebProtobufsE2E.MessageContextInfo.messageAssociation:type_name -> WAWebProtobufsE2E.MessageAssociation + 269, // 159: WAWebProtobufsE2E.MessageContextInfo.limitSharing:type_name -> WACommon.LimitSharing + 269, // 160: WAWebProtobufsE2E.MessageContextInfo.limitSharingV2:type_name -> WACommon.LimitSharing + 104, // 161: WAWebProtobufsE2E.MessageContextInfo.threadID:type_name -> WAWebProtobufsE2E.ThreadID + 5, // 162: WAWebProtobufsE2E.MessageContextInfo.weblinkRenderConfig:type_name -> WAWebProtobufsE2E.WebLinkRenderConfig + 177, // 163: WAWebProtobufsE2E.InteractiveAnnotation.location:type_name -> WAWebProtobufsE2E.Location + 244, // 164: WAWebProtobufsE2E.InteractiveAnnotation.newsletter:type_name -> WAWebProtobufsE2E.ContextInfo.ForwardedNewsletterMessageInfo + 175, // 165: WAWebProtobufsE2E.InteractiveAnnotation.tapAction:type_name -> WAWebProtobufsE2E.TapLinkAction + 176, // 166: WAWebProtobufsE2E.InteractiveAnnotation.polygonVertices:type_name -> WAWebProtobufsE2E.Point + 174, // 167: WAWebProtobufsE2E.InteractiveAnnotation.embeddedContent:type_name -> WAWebProtobufsE2E.EmbeddedContent + 63, // 168: WAWebProtobufsE2E.InteractiveAnnotation.statusLinkType:type_name -> WAWebProtobufsE2E.InteractiveAnnotation.StatusLinkType + 255, // 169: WAWebProtobufsE2E.HydratedTemplateButton.quickReplyButton:type_name -> WAWebProtobufsE2E.HydratedTemplateButton.HydratedQuickReplyButton + 253, // 170: WAWebProtobufsE2E.HydratedTemplateButton.urlButton:type_name -> WAWebProtobufsE2E.HydratedTemplateButton.HydratedURLButton + 254, // 171: WAWebProtobufsE2E.HydratedTemplateButton.callButton:type_name -> WAWebProtobufsE2E.HydratedTemplateButton.HydratedCallButton + 256, // 172: WAWebProtobufsE2E.PaymentBackground.mediaData:type_name -> WAWebProtobufsE2E.PaymentBackground.MediaData + 65, // 173: WAWebProtobufsE2E.PaymentBackground.type:type_name -> WAWebProtobufsE2E.PaymentBackground.Type + 67, // 174: WAWebProtobufsE2E.DisappearingMode.initiator:type_name -> WAWebProtobufsE2E.DisappearingMode.Initiator + 66, // 175: WAWebProtobufsE2E.DisappearingMode.trigger:type_name -> WAWebProtobufsE2E.DisappearingMode.Trigger + 68, // 176: WAWebProtobufsE2E.ProcessedVideo.quality:type_name -> WAWebProtobufsE2E.ProcessedVideo.VideoQuality + 168, // 177: WAWebProtobufsE2E.Message.senderKeyDistributionMessage:type_name -> WAWebProtobufsE2E.SenderKeyDistributionMessage + 101, // 178: WAWebProtobufsE2E.Message.imageMessage:type_name -> WAWebProtobufsE2E.ImageMessage + 167, // 179: WAWebProtobufsE2E.Message.contactMessage:type_name -> WAWebProtobufsE2E.ContactMessage + 166, // 180: WAWebProtobufsE2E.Message.locationMessage:type_name -> WAWebProtobufsE2E.LocationMessage + 96, // 181: WAWebProtobufsE2E.Message.extendedTextMessage:type_name -> WAWebProtobufsE2E.ExtendedTextMessage + 162, // 182: WAWebProtobufsE2E.Message.documentMessage:type_name -> WAWebProtobufsE2E.DocumentMessage + 161, // 183: WAWebProtobufsE2E.Message.audioMessage:type_name -> WAWebProtobufsE2E.AudioMessage + 95, // 184: WAWebProtobufsE2E.Message.videoMessage:type_name -> WAWebProtobufsE2E.VideoMessage + 160, // 185: WAWebProtobufsE2E.Message.call:type_name -> WAWebProtobufsE2E.Call + 159, // 186: WAWebProtobufsE2E.Message.chat:type_name -> WAWebProtobufsE2E.Chat + 93, // 187: WAWebProtobufsE2E.Message.protocolMessage:type_name -> WAWebProtobufsE2E.ProtocolMessage + 146, // 188: WAWebProtobufsE2E.Message.contactsArrayMessage:type_name -> WAWebProtobufsE2E.ContactsArrayMessage + 89, // 189: WAWebProtobufsE2E.Message.highlyStructuredMessage:type_name -> WAWebProtobufsE2E.HighlyStructuredMessage + 168, // 190: WAWebProtobufsE2E.Message.fastRatchetKeySenderKeyDistributionMessage:type_name -> WAWebProtobufsE2E.SenderKeyDistributionMessage + 145, // 191: WAWebProtobufsE2E.Message.sendPaymentMessage:type_name -> WAWebProtobufsE2E.SendPaymentMessage + 141, // 192: WAWebProtobufsE2E.Message.liveLocationMessage:type_name -> WAWebProtobufsE2E.LiveLocationMessage + 144, // 193: WAWebProtobufsE2E.Message.requestPaymentMessage:type_name -> WAWebProtobufsE2E.RequestPaymentMessage + 143, // 194: WAWebProtobufsE2E.Message.declinePaymentRequestMessage:type_name -> WAWebProtobufsE2E.DeclinePaymentRequestMessage + 142, // 195: WAWebProtobufsE2E.Message.cancelPaymentRequestMessage:type_name -> WAWebProtobufsE2E.CancelPaymentRequestMessage + 139, // 196: WAWebProtobufsE2E.Message.templateMessage:type_name -> WAWebProtobufsE2E.TemplateMessage + 140, // 197: WAWebProtobufsE2E.Message.stickerMessage:type_name -> WAWebProtobufsE2E.StickerMessage + 81, // 198: WAWebProtobufsE2E.Message.groupInviteMessage:type_name -> WAWebProtobufsE2E.GroupInviteMessage + 138, // 199: WAWebProtobufsE2E.Message.templateButtonReplyMessage:type_name -> WAWebProtobufsE2E.TemplateButtonReplyMessage + 137, // 200: WAWebProtobufsE2E.Message.productMessage:type_name -> WAWebProtobufsE2E.ProductMessage + 133, // 201: WAWebProtobufsE2E.Message.deviceSentMessage:type_name -> WAWebProtobufsE2E.DeviceSentMessage + 105, // 202: WAWebProtobufsE2E.Message.messageContextInfo:type_name -> WAWebProtobufsE2E.MessageContextInfo + 85, // 203: WAWebProtobufsE2E.Message.listMessage:type_name -> WAWebProtobufsE2E.ListMessage + 132, // 204: WAWebProtobufsE2E.Message.viewOnceMessage:type_name -> WAWebProtobufsE2E.FutureProofMessage + 86, // 205: WAWebProtobufsE2E.Message.orderMessage:type_name -> WAWebProtobufsE2E.OrderMessage + 84, // 206: WAWebProtobufsE2E.Message.listResponseMessage:type_name -> WAWebProtobufsE2E.ListResponseMessage + 132, // 207: WAWebProtobufsE2E.Message.ephemeralMessage:type_name -> WAWebProtobufsE2E.FutureProofMessage + 100, // 208: WAWebProtobufsE2E.Message.invoiceMessage:type_name -> WAWebProtobufsE2E.InvoiceMessage + 79, // 209: WAWebProtobufsE2E.Message.buttonsMessage:type_name -> WAWebProtobufsE2E.ButtonsMessage + 78, // 210: WAWebProtobufsE2E.Message.buttonsResponseMessage:type_name -> WAWebProtobufsE2E.ButtonsResponseMessage + 88, // 211: WAWebProtobufsE2E.Message.paymentInviteMessage:type_name -> WAWebProtobufsE2E.PaymentInviteMessage + 83, // 212: WAWebProtobufsE2E.Message.interactiveMessage:type_name -> WAWebProtobufsE2E.InteractiveMessage + 131, // 213: WAWebProtobufsE2E.Message.reactionMessage:type_name -> WAWebProtobufsE2E.ReactionMessage + 130, // 214: WAWebProtobufsE2E.Message.stickerSyncRmrMessage:type_name -> WAWebProtobufsE2E.StickerSyncRMRMessage + 82, // 215: WAWebProtobufsE2E.Message.interactiveResponseMessage:type_name -> WAWebProtobufsE2E.InteractiveResponseMessage + 129, // 216: WAWebProtobufsE2E.Message.pollCreationMessage:type_name -> WAWebProtobufsE2E.PollCreationMessage + 128, // 217: WAWebProtobufsE2E.Message.pollUpdateMessage:type_name -> WAWebProtobufsE2E.PollUpdateMessage + 121, // 218: WAWebProtobufsE2E.Message.keepInChatMessage:type_name -> WAWebProtobufsE2E.KeepInChatMessage + 132, // 219: WAWebProtobufsE2E.Message.documentWithCaptionMessage:type_name -> WAWebProtobufsE2E.FutureProofMessage + 134, // 220: WAWebProtobufsE2E.Message.requestPhoneNumberMessage:type_name -> WAWebProtobufsE2E.RequestPhoneNumberMessage + 132, // 221: WAWebProtobufsE2E.Message.viewOnceMessageV2:type_name -> WAWebProtobufsE2E.FutureProofMessage + 120, // 222: WAWebProtobufsE2E.Message.encReactionMessage:type_name -> WAWebProtobufsE2E.EncReactionMessage + 132, // 223: WAWebProtobufsE2E.Message.editedMessage:type_name -> WAWebProtobufsE2E.FutureProofMessage + 132, // 224: WAWebProtobufsE2E.Message.viewOnceMessageV2Extension:type_name -> WAWebProtobufsE2E.FutureProofMessage + 129, // 225: WAWebProtobufsE2E.Message.pollCreationMessageV2:type_name -> WAWebProtobufsE2E.PollCreationMessage + 74, // 226: WAWebProtobufsE2E.Message.scheduledCallCreationMessage:type_name -> WAWebProtobufsE2E.ScheduledCallCreationMessage + 132, // 227: WAWebProtobufsE2E.Message.groupMentionedMessage:type_name -> WAWebProtobufsE2E.FutureProofMessage + 76, // 228: WAWebProtobufsE2E.Message.pinInChatMessage:type_name -> WAWebProtobufsE2E.PinInChatMessage + 129, // 229: WAWebProtobufsE2E.Message.pollCreationMessageV3:type_name -> WAWebProtobufsE2E.PollCreationMessage + 73, // 230: WAWebProtobufsE2E.Message.scheduledCallEditMessage:type_name -> WAWebProtobufsE2E.ScheduledCallEditMessage + 95, // 231: WAWebProtobufsE2E.Message.ptvMessage:type_name -> WAWebProtobufsE2E.VideoMessage + 132, // 232: WAWebProtobufsE2E.Message.botInvokeMessage:type_name -> WAWebProtobufsE2E.FutureProofMessage + 72, // 233: WAWebProtobufsE2E.Message.callLogMesssage:type_name -> WAWebProtobufsE2E.CallLogMessage + 115, // 234: WAWebProtobufsE2E.Message.messageHistoryBundle:type_name -> WAWebProtobufsE2E.MessageHistoryBundle + 119, // 235: WAWebProtobufsE2E.Message.encCommentMessage:type_name -> WAWebProtobufsE2E.EncCommentMessage + 71, // 236: WAWebProtobufsE2E.Message.bcallMessage:type_name -> WAWebProtobufsE2E.BCallMessage + 132, // 237: WAWebProtobufsE2E.Message.lottieStickerMessage:type_name -> WAWebProtobufsE2E.FutureProofMessage + 117, // 238: WAWebProtobufsE2E.Message.eventMessage:type_name -> WAWebProtobufsE2E.EventMessage + 116, // 239: WAWebProtobufsE2E.Message.encEventResponseMessage:type_name -> WAWebProtobufsE2E.EncEventResponseMessage + 118, // 240: WAWebProtobufsE2E.Message.commentMessage:type_name -> WAWebProtobufsE2E.CommentMessage + 136, // 241: WAWebProtobufsE2E.Message.newsletterAdminInviteMessage:type_name -> WAWebProtobufsE2E.NewsletterAdminInviteMessage + 70, // 242: WAWebProtobufsE2E.Message.placeholderMessage:type_name -> WAWebProtobufsE2E.PlaceholderMessage + 80, // 243: WAWebProtobufsE2E.Message.secretEncryptedMessage:type_name -> WAWebProtobufsE2E.SecretEncryptedMessage + 112, // 244: WAWebProtobufsE2E.Message.albumMessage:type_name -> WAWebProtobufsE2E.AlbumMessage + 132, // 245: WAWebProtobufsE2E.Message.eventCoverImage:type_name -> WAWebProtobufsE2E.FutureProofMessage + 69, // 246: WAWebProtobufsE2E.Message.stickerPackMessage:type_name -> WAWebProtobufsE2E.StickerPackMessage + 132, // 247: WAWebProtobufsE2E.Message.statusMentionMessage:type_name -> WAWebProtobufsE2E.FutureProofMessage + 124, // 248: WAWebProtobufsE2E.Message.pollResultSnapshotMessage:type_name -> WAWebProtobufsE2E.PollResultSnapshotMessage + 132, // 249: WAWebProtobufsE2E.Message.pollCreationOptionImageMessage:type_name -> WAWebProtobufsE2E.FutureProofMessage + 132, // 250: WAWebProtobufsE2E.Message.associatedChildMessage:type_name -> WAWebProtobufsE2E.FutureProofMessage + 132, // 251: WAWebProtobufsE2E.Message.groupStatusMentionMessage:type_name -> WAWebProtobufsE2E.FutureProofMessage + 132, // 252: WAWebProtobufsE2E.Message.pollCreationMessageV4:type_name -> WAWebProtobufsE2E.FutureProofMessage + 132, // 253: WAWebProtobufsE2E.Message.statusAddYours:type_name -> WAWebProtobufsE2E.FutureProofMessage + 132, // 254: WAWebProtobufsE2E.Message.groupStatusMessage:type_name -> WAWebProtobufsE2E.FutureProofMessage + 187, // 255: WAWebProtobufsE2E.Message.richResponseMessage:type_name -> WAWebProtobufsE2E.AIRichResponseMessage + 99, // 256: WAWebProtobufsE2E.Message.statusNotificationMessage:type_name -> WAWebProtobufsE2E.StatusNotificationMessage + 132, // 257: WAWebProtobufsE2E.Message.limitSharingMessage:type_name -> WAWebProtobufsE2E.FutureProofMessage + 132, // 258: WAWebProtobufsE2E.Message.botTaskMessage:type_name -> WAWebProtobufsE2E.FutureProofMessage + 132, // 259: WAWebProtobufsE2E.Message.questionMessage:type_name -> WAWebProtobufsE2E.FutureProofMessage + 114, // 260: WAWebProtobufsE2E.Message.messageHistoryNotice:type_name -> WAWebProtobufsE2E.MessageHistoryNotice + 132, // 261: WAWebProtobufsE2E.Message.groupStatusMessageV2:type_name -> WAWebProtobufsE2E.FutureProofMessage + 132, // 262: WAWebProtobufsE2E.Message.botForwardedMessage:type_name -> WAWebProtobufsE2E.FutureProofMessage + 123, // 263: WAWebProtobufsE2E.Message.statusQuestionAnswerMessage:type_name -> WAWebProtobufsE2E.StatusQuestionAnswerMessage + 132, // 264: WAWebProtobufsE2E.Message.questionReplyMessage:type_name -> WAWebProtobufsE2E.FutureProofMessage + 122, // 265: WAWebProtobufsE2E.Message.questionResponseMessage:type_name -> WAWebProtobufsE2E.QuestionResponseMessage + 87, // 266: WAWebProtobufsE2E.Message.statusQuotedMessage:type_name -> WAWebProtobufsE2E.StatusQuotedMessage + 77, // 267: WAWebProtobufsE2E.Message.statusStickerInteractionMessage:type_name -> WAWebProtobufsE2E.StatusStickerInteractionMessage + 129, // 268: WAWebProtobufsE2E.Message.pollCreationMessageV5:type_name -> WAWebProtobufsE2E.PollCreationMessage + 135, // 269: WAWebProtobufsE2E.Message.newsletterFollowerInviteMessageV2:type_name -> WAWebProtobufsE2E.NewsletterFollowerInviteMessage + 124, // 270: WAWebProtobufsE2E.Message.pollResultSnapshotMessageV3:type_name -> WAWebProtobufsE2E.PollResultSnapshotMessage + 132, // 271: WAWebProtobufsE2E.Message.newsletterAdminProfileMessage:type_name -> WAWebProtobufsE2E.FutureProofMessage + 132, // 272: WAWebProtobufsE2E.Message.newsletterAdminProfileMessageV2:type_name -> WAWebProtobufsE2E.FutureProofMessage + 132, // 273: WAWebProtobufsE2E.Message.spoilerMessage:type_name -> WAWebProtobufsE2E.FutureProofMessage + 132, // 274: WAWebProtobufsE2E.Message.pollCreationMessageV6:type_name -> WAWebProtobufsE2E.FutureProofMessage + 102, // 275: WAWebProtobufsE2E.AlbumMessage.contextInfo:type_name -> WAWebProtobufsE2E.ContextInfo + 102, // 276: WAWebProtobufsE2E.MessageHistoryNotice.contextInfo:type_name -> WAWebProtobufsE2E.ContextInfo + 113, // 277: WAWebProtobufsE2E.MessageHistoryNotice.messageHistoryMetadata:type_name -> WAWebProtobufsE2E.MessageHistoryMetadata + 102, // 278: WAWebProtobufsE2E.MessageHistoryBundle.contextInfo:type_name -> WAWebProtobufsE2E.ContextInfo + 113, // 279: WAWebProtobufsE2E.MessageHistoryBundle.messageHistoryMetadata:type_name -> WAWebProtobufsE2E.MessageHistoryMetadata + 267, // 280: WAWebProtobufsE2E.EncEventResponseMessage.eventCreationMessageKey:type_name -> WACommon.MessageKey + 102, // 281: WAWebProtobufsE2E.EventMessage.contextInfo:type_name -> WAWebProtobufsE2E.ContextInfo + 166, // 282: WAWebProtobufsE2E.EventMessage.location:type_name -> WAWebProtobufsE2E.LocationMessage + 111, // 283: WAWebProtobufsE2E.CommentMessage.message:type_name -> WAWebProtobufsE2E.Message + 267, // 284: WAWebProtobufsE2E.CommentMessage.targetMessageKey:type_name -> WACommon.MessageKey + 267, // 285: WAWebProtobufsE2E.EncCommentMessage.targetMessageKey:type_name -> WACommon.MessageKey + 267, // 286: WAWebProtobufsE2E.EncReactionMessage.targetMessageKey:type_name -> WACommon.MessageKey + 267, // 287: WAWebProtobufsE2E.KeepInChatMessage.key:type_name -> WACommon.MessageKey + 6, // 288: WAWebProtobufsE2E.KeepInChatMessage.keepType:type_name -> WAWebProtobufsE2E.KeepType + 267, // 289: WAWebProtobufsE2E.QuestionResponseMessage.key:type_name -> WACommon.MessageKey + 267, // 290: WAWebProtobufsE2E.StatusQuestionAnswerMessage.key:type_name -> WACommon.MessageKey + 257, // 291: WAWebProtobufsE2E.PollResultSnapshotMessage.pollVotes:type_name -> WAWebProtobufsE2E.PollResultSnapshotMessage.PollVote + 102, // 292: WAWebProtobufsE2E.PollResultSnapshotMessage.contextInfo:type_name -> WAWebProtobufsE2E.ContextInfo + 0, // 293: WAWebProtobufsE2E.PollResultSnapshotMessage.pollType:type_name -> WAWebProtobufsE2E.PollType + 267, // 294: WAWebProtobufsE2E.PollUpdateMessage.pollCreationMessageKey:type_name -> WACommon.MessageKey + 126, // 295: WAWebProtobufsE2E.PollUpdateMessage.vote:type_name -> WAWebProtobufsE2E.PollEncValue + 127, // 296: WAWebProtobufsE2E.PollUpdateMessage.metadata:type_name -> WAWebProtobufsE2E.PollUpdateMessageMetadata + 258, // 297: WAWebProtobufsE2E.PollCreationMessage.options:type_name -> WAWebProtobufsE2E.PollCreationMessage.Option + 102, // 298: WAWebProtobufsE2E.PollCreationMessage.contextInfo:type_name -> WAWebProtobufsE2E.ContextInfo + 1, // 299: WAWebProtobufsE2E.PollCreationMessage.pollContentType:type_name -> WAWebProtobufsE2E.PollContentType + 0, // 300: WAWebProtobufsE2E.PollCreationMessage.pollType:type_name -> WAWebProtobufsE2E.PollType + 258, // 301: WAWebProtobufsE2E.PollCreationMessage.correctAnswer:type_name -> WAWebProtobufsE2E.PollCreationMessage.Option + 267, // 302: WAWebProtobufsE2E.ReactionMessage.key:type_name -> WACommon.MessageKey + 111, // 303: WAWebProtobufsE2E.FutureProofMessage.message:type_name -> WAWebProtobufsE2E.Message + 111, // 304: WAWebProtobufsE2E.DeviceSentMessage.message:type_name -> WAWebProtobufsE2E.Message + 102, // 305: WAWebProtobufsE2E.RequestPhoneNumberMessage.contextInfo:type_name -> WAWebProtobufsE2E.ContextInfo + 102, // 306: WAWebProtobufsE2E.NewsletterFollowerInviteMessage.contextInfo:type_name -> WAWebProtobufsE2E.ContextInfo + 102, // 307: WAWebProtobufsE2E.NewsletterAdminInviteMessage.contextInfo:type_name -> WAWebProtobufsE2E.ContextInfo + 259, // 308: WAWebProtobufsE2E.ProductMessage.product:type_name -> WAWebProtobufsE2E.ProductMessage.ProductSnapshot + 260, // 309: WAWebProtobufsE2E.ProductMessage.catalog:type_name -> WAWebProtobufsE2E.ProductMessage.CatalogSnapshot + 102, // 310: WAWebProtobufsE2E.ProductMessage.contextInfo:type_name -> WAWebProtobufsE2E.ContextInfo + 102, // 311: WAWebProtobufsE2E.TemplateButtonReplyMessage.contextInfo:type_name -> WAWebProtobufsE2E.ContextInfo + 262, // 312: WAWebProtobufsE2E.TemplateMessage.fourRowTemplate:type_name -> WAWebProtobufsE2E.TemplateMessage.FourRowTemplate + 261, // 313: WAWebProtobufsE2E.TemplateMessage.hydratedFourRowTemplate:type_name -> WAWebProtobufsE2E.TemplateMessage.HydratedFourRowTemplate + 83, // 314: WAWebProtobufsE2E.TemplateMessage.interactiveMessageTemplate:type_name -> WAWebProtobufsE2E.InteractiveMessage + 102, // 315: WAWebProtobufsE2E.TemplateMessage.contextInfo:type_name -> WAWebProtobufsE2E.ContextInfo + 261, // 316: WAWebProtobufsE2E.TemplateMessage.hydratedTemplate:type_name -> WAWebProtobufsE2E.TemplateMessage.HydratedFourRowTemplate + 102, // 317: WAWebProtobufsE2E.StickerMessage.contextInfo:type_name -> WAWebProtobufsE2E.ContextInfo + 102, // 318: WAWebProtobufsE2E.LiveLocationMessage.contextInfo:type_name -> WAWebProtobufsE2E.ContextInfo + 267, // 319: WAWebProtobufsE2E.CancelPaymentRequestMessage.key:type_name -> WACommon.MessageKey + 267, // 320: WAWebProtobufsE2E.DeclinePaymentRequestMessage.key:type_name -> WACommon.MessageKey + 111, // 321: WAWebProtobufsE2E.RequestPaymentMessage.noteMessage:type_name -> WAWebProtobufsE2E.Message + 179, // 322: WAWebProtobufsE2E.RequestPaymentMessage.amount:type_name -> WAWebProtobufsE2E.Money + 108, // 323: WAWebProtobufsE2E.RequestPaymentMessage.background:type_name -> WAWebProtobufsE2E.PaymentBackground + 111, // 324: WAWebProtobufsE2E.SendPaymentMessage.noteMessage:type_name -> WAWebProtobufsE2E.Message + 267, // 325: WAWebProtobufsE2E.SendPaymentMessage.requestMessageKey:type_name -> WACommon.MessageKey + 108, // 326: WAWebProtobufsE2E.SendPaymentMessage.background:type_name -> WAWebProtobufsE2E.PaymentBackground + 167, // 327: WAWebProtobufsE2E.ContactsArrayMessage.contacts:type_name -> WAWebProtobufsE2E.ContactMessage + 102, // 328: WAWebProtobufsE2E.ContactsArrayMessage.contextInfo:type_name -> WAWebProtobufsE2E.ContextInfo + 155, // 329: WAWebProtobufsE2E.AppStateSyncKeyRequest.keyIDs:type_name -> WAWebProtobufsE2E.AppStateSyncKeyId + 156, // 330: WAWebProtobufsE2E.AppStateSyncKeyShare.keys:type_name -> WAWebProtobufsE2E.AppStateSyncKey + 154, // 331: WAWebProtobufsE2E.AppStateSyncKeyData.fingerprint:type_name -> WAWebProtobufsE2E.AppStateSyncKeyFingerprint + 155, // 332: WAWebProtobufsE2E.AppStateSyncKey.keyID:type_name -> WAWebProtobufsE2E.AppStateSyncKeyId + 153, // 333: WAWebProtobufsE2E.AppStateSyncKey.keyData:type_name -> WAWebProtobufsE2E.AppStateSyncKeyData + 3, // 334: WAWebProtobufsE2E.HistorySyncNotification.syncType:type_name -> WAWebProtobufsE2E.HistorySyncType + 149, // 335: WAWebProtobufsE2E.HistorySyncNotification.fullHistorySyncOnDemandRequestMetadata:type_name -> WAWebProtobufsE2E.FullHistorySyncOnDemandRequestMetadata + 158, // 336: WAWebProtobufsE2E.HistorySyncNotification.messageAccessStatus:type_name -> WAWebProtobufsE2E.HistorySyncMessageAccessStatus + 102, // 337: WAWebProtobufsE2E.Call.contextInfo:type_name -> WAWebProtobufsE2E.ContextInfo + 105, // 338: WAWebProtobufsE2E.Call.messageContextInfo:type_name -> WAWebProtobufsE2E.MessageContextInfo + 102, // 339: WAWebProtobufsE2E.AudioMessage.contextInfo:type_name -> WAWebProtobufsE2E.ContextInfo + 102, // 340: WAWebProtobufsE2E.DocumentMessage.contextInfo:type_name -> WAWebProtobufsE2E.ContextInfo + 102, // 341: WAWebProtobufsE2E.LocationMessage.contextInfo:type_name -> WAWebProtobufsE2E.ContextInfo + 102, // 342: WAWebProtobufsE2E.ContactMessage.contextInfo:type_name -> WAWebProtobufsE2E.ContextInfo + 4, // 343: WAWebProtobufsE2E.MediaDomainInfo.mediaKeyDomain:type_name -> WAWebProtobufsE2E.MediaKeyDomain + 275, // 344: WAWebProtobufsE2E.DeviceListMetadata.senderAccountType:type_name -> WAAdv.ADVEncryptionType + 275, // 345: WAWebProtobufsE2E.DeviceListMetadata.receiverAccountType:type_name -> WAAdv.ADVEncryptionType + 111, // 346: WAWebProtobufsE2E.EmbeddedMessage.message:type_name -> WAWebProtobufsE2E.Message + 172, // 347: WAWebProtobufsE2E.EmbeddedContent.embeddedMessage:type_name -> WAWebProtobufsE2E.EmbeddedMessage + 173, // 348: WAWebProtobufsE2E.EmbeddedContent.embeddedMusic:type_name -> WAWebProtobufsE2E.EmbeddedMusic + 265, // 349: WAWebProtobufsE2E.TemplateButton.quickReplyButton:type_name -> WAWebProtobufsE2E.TemplateButton.QuickReplyButton + 264, // 350: WAWebProtobufsE2E.TemplateButton.urlButton:type_name -> WAWebProtobufsE2E.TemplateButton.URLButton + 263, // 351: WAWebProtobufsE2E.TemplateButton.callButton:type_name -> WAWebProtobufsE2E.TemplateButton.CallButton + 266, // 352: WAWebProtobufsE2E.UrlTrackingMap.urlTrackingMapElements:type_name -> WAWebProtobufsE2E.UrlTrackingMap.UrlTrackingMapElement + 276, // 353: WAWebProtobufsE2E.AIRichResponseMessage.messageType:type_name -> WAWebProtobufsAICommon.AIRichResponseMessageType + 277, // 354: WAWebProtobufsE2E.AIRichResponseMessage.submessages:type_name -> WAWebProtobufsAICommon.AIRichResponseSubMessage + 278, // 355: WAWebProtobufsE2E.AIRichResponseMessage.unifiedResponse:type_name -> WAWebProtobufsAICommon.AIRichResponseUnifiedResponse + 102, // 356: WAWebProtobufsE2E.AIRichResponseMessage.contextInfo:type_name -> WAWebProtobufsE2E.ContextInfo + 267, // 357: WAWebProtobufsE2E.AIQueryFanout.messageKey:type_name -> WACommon.MessageKey + 111, // 358: WAWebProtobufsE2E.AIQueryFanout.message:type_name -> WAWebProtobufsE2E.Message + 10, // 359: WAWebProtobufsE2E.CallLogMessage.CallParticipant.callOutcome:type_name -> WAWebProtobufsE2E.CallLogMessage.CallOutcome + 193, // 360: WAWebProtobufsE2E.ButtonsMessage.Button.buttonText:type_name -> WAWebProtobufsE2E.ButtonsMessage.Button.ButtonText + 19, // 361: WAWebProtobufsE2E.ButtonsMessage.Button.type:type_name -> WAWebProtobufsE2E.ButtonsMessage.Button.Type + 192, // 362: WAWebProtobufsE2E.ButtonsMessage.Button.nativeFlowInfo:type_name -> WAWebProtobufsE2E.ButtonsMessage.Button.NativeFlowInfo + 22, // 363: WAWebProtobufsE2E.InteractiveResponseMessage.Body.format:type_name -> WAWebProtobufsE2E.InteractiveResponseMessage.Body.Format + 83, // 364: WAWebProtobufsE2E.InteractiveMessage.CarouselMessage.cards:type_name -> WAWebProtobufsE2E.InteractiveMessage + 23, // 365: WAWebProtobufsE2E.InteractiveMessage.CarouselMessage.carouselCardType:type_name -> WAWebProtobufsE2E.InteractiveMessage.CarouselMessage.CarouselCardType + 24, // 366: WAWebProtobufsE2E.InteractiveMessage.ShopMessage.surface:type_name -> WAWebProtobufsE2E.InteractiveMessage.ShopMessage.Surface + 204, // 367: WAWebProtobufsE2E.InteractiveMessage.NativeFlowMessage.buttons:type_name -> WAWebProtobufsE2E.InteractiveMessage.NativeFlowMessage.NativeFlowButton + 161, // 368: WAWebProtobufsE2E.InteractiveMessage.Footer.audioMessage:type_name -> WAWebProtobufsE2E.AudioMessage + 162, // 369: WAWebProtobufsE2E.InteractiveMessage.Header.documentMessage:type_name -> WAWebProtobufsE2E.DocumentMessage + 101, // 370: WAWebProtobufsE2E.InteractiveMessage.Header.imageMessage:type_name -> WAWebProtobufsE2E.ImageMessage + 95, // 371: WAWebProtobufsE2E.InteractiveMessage.Header.videoMessage:type_name -> WAWebProtobufsE2E.VideoMessage + 166, // 372: WAWebProtobufsE2E.InteractiveMessage.Header.locationMessage:type_name -> WAWebProtobufsE2E.LocationMessage + 137, // 373: WAWebProtobufsE2E.InteractiveMessage.Header.productMessage:type_name -> WAWebProtobufsE2E.ProductMessage + 200, // 374: WAWebProtobufsE2E.InteractiveMessage.Header.bloksWidget:type_name -> WAWebProtobufsE2E.InteractiveMessage.BloksWidget + 208, // 375: WAWebProtobufsE2E.ListMessage.ProductListInfo.productSections:type_name -> WAWebProtobufsE2E.ListMessage.ProductSection + 207, // 376: WAWebProtobufsE2E.ListMessage.ProductListInfo.headerImage:type_name -> WAWebProtobufsE2E.ListMessage.ProductListHeaderImage + 209, // 377: WAWebProtobufsE2E.ListMessage.ProductSection.products:type_name -> WAWebProtobufsE2E.ListMessage.Product + 211, // 378: WAWebProtobufsE2E.ListMessage.Section.rows:type_name -> WAWebProtobufsE2E.ListMessage.Row + 214, // 379: WAWebProtobufsE2E.HighlyStructuredMessage.HSMLocalizableParameter.currency:type_name -> WAWebProtobufsE2E.HighlyStructuredMessage.HSMLocalizableParameter.HSMCurrency + 213, // 380: WAWebProtobufsE2E.HighlyStructuredMessage.HSMLocalizableParameter.dateTime:type_name -> WAWebProtobufsE2E.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime + 215, // 381: WAWebProtobufsE2E.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime.component:type_name -> WAWebProtobufsE2E.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime.HSMDateTimeComponent + 216, // 382: WAWebProtobufsE2E.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime.unixEpoch:type_name -> WAWebProtobufsE2E.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime.HSMDateTimeUnixEpoch + 32, // 383: WAWebProtobufsE2E.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime.HSMDateTimeComponent.dayOfWeek:type_name -> WAWebProtobufsE2E.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime.HSMDateTimeComponent.DayOfWeekType + 31, // 384: WAWebProtobufsE2E.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime.HSMDateTimeComponent.calendar:type_name -> WAWebProtobufsE2E.HighlyStructuredMessage.HSMLocalizableParameter.HSMDateTime.HSMDateTimeComponent.CalendarType + 279, // 385: WAWebProtobufsE2E.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.mediaUploadResult:type_name -> WAMmsRetry.MediaRetryNotification.ResultType + 140, // 386: WAWebProtobufsE2E.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.stickerMessage:type_name -> WAWebProtobufsE2E.StickerMessage + 226, // 387: WAWebProtobufsE2E.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.linkPreviewResponse:type_name -> WAWebProtobufsE2E.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.LinkPreviewResponse + 225, // 388: WAWebProtobufsE2E.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.placeholderMessageResendResponse:type_name -> WAWebProtobufsE2E.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.PlaceholderMessageResendResponse + 223, // 389: WAWebProtobufsE2E.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.waffleNonceFetchRequestResponse:type_name -> WAWebProtobufsE2E.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.WaffleNonceFetchResponse + 224, // 390: WAWebProtobufsE2E.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.fullHistorySyncOnDemandRequestResponse:type_name -> WAWebProtobufsE2E.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.FullHistorySyncOnDemandRequestResponse + 222, // 391: WAWebProtobufsE2E.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.companionMetaNonceFetchRequestResponse:type_name -> WAWebProtobufsE2E.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.CompanionMetaNonceFetchResponse + 220, // 392: WAWebProtobufsE2E.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.syncdSnapshotFatalRecoveryResponse:type_name -> WAWebProtobufsE2E.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.SyncDSnapshotFatalRecoveryResponse + 221, // 393: WAWebProtobufsE2E.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.companionCanonicalUserNonceFetchRequestResponse:type_name -> WAWebProtobufsE2E.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.CompanionCanonicalUserNonceFetchResponse + 219, // 394: WAWebProtobufsE2E.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.historySyncChunkRetryResponse:type_name -> WAWebProtobufsE2E.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.HistorySyncChunkRetryResponse + 218, // 395: WAWebProtobufsE2E.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.flowResponsesCsvBundle:type_name -> WAWebProtobufsE2E.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.FlowResponsesCsvBundle + 3, // 396: WAWebProtobufsE2E.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.HistorySyncChunkRetryResponse.syncType:type_name -> WAWebProtobufsE2E.HistorySyncType + 33, // 397: WAWebProtobufsE2E.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.HistorySyncChunkRetryResponse.responseCode:type_name -> WAWebProtobufsE2E.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.HistorySyncChunkRetryResponseCode + 149, // 398: WAWebProtobufsE2E.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.FullHistorySyncOnDemandRequestResponse.requestMetadata:type_name -> WAWebProtobufsE2E.FullHistorySyncOnDemandRequestMetadata + 34, // 399: WAWebProtobufsE2E.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.FullHistorySyncOnDemandRequestResponse.responseCode:type_name -> WAWebProtobufsE2E.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.FullHistorySyncOnDemandResponseCode + 228, // 400: WAWebProtobufsE2E.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.LinkPreviewResponse.hqThumbnail:type_name -> WAWebProtobufsE2E.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.LinkPreviewResponse.LinkPreviewHighQualityThumbnail + 227, // 401: WAWebProtobufsE2E.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.LinkPreviewResponse.previewMetadata:type_name -> WAWebProtobufsE2E.PeerDataOperationRequestResponseMessage.PeerDataOperationResult.LinkPreviewResponse.PaymentLinkPreviewMetadata + 35, // 402: WAWebProtobufsE2E.PeerDataOperationRequestMessage.GalaxyFlowAction.type:type_name -> WAWebProtobufsE2E.PeerDataOperationRequestMessage.GalaxyFlowAction.GalaxyFlowActionType + 3, // 403: WAWebProtobufsE2E.PeerDataOperationRequestMessage.HistorySyncChunkRetryRequest.syncType:type_name -> WAWebProtobufsE2E.HistorySyncType + 267, // 404: WAWebProtobufsE2E.PeerDataOperationRequestMessage.PlaceholderMessageResendRequest.messageKey:type_name -> WACommon.MessageKey + 149, // 405: WAWebProtobufsE2E.PeerDataOperationRequestMessage.FullHistorySyncOnDemandRequest.requestMetadata:type_name -> WAWebProtobufsE2E.FullHistorySyncOnDemandRequestMetadata + 280, // 406: WAWebProtobufsE2E.PeerDataOperationRequestMessage.FullHistorySyncOnDemandRequest.historySyncConfig:type_name -> WACompanionReg.DeviceProps.HistorySyncConfig + 148, // 407: WAWebProtobufsE2E.PeerDataOperationRequestMessage.FullHistorySyncOnDemandRequest.fullHistorySyncOnDemandConfig:type_name -> WAWebProtobufsE2E.FullHistorySyncOnDemandConfig + 45, // 408: WAWebProtobufsE2E.PaymentLinkMetadata.PaymentLinkHeader.headerType:type_name -> WAWebProtobufsE2E.PaymentLinkMetadata.PaymentLinkHeader.PaymentLinkHeaderType + 54, // 409: WAWebProtobufsE2E.ContextInfo.StatusAudienceMetadata.audienceType:type_name -> WAWebProtobufsE2E.ContextInfo.StatusAudienceMetadata.AudienceType + 252, // 410: WAWebProtobufsE2E.ContextInfo.DataSharingContext.parameters:type_name -> WAWebProtobufsE2E.ContextInfo.DataSharingContext.Parameters + 56, // 411: WAWebProtobufsE2E.ContextInfo.ForwardedNewsletterMessageInfo.contentType:type_name -> WAWebProtobufsE2E.ContextInfo.ForwardedNewsletterMessageInfo.ContentType + 58, // 412: WAWebProtobufsE2E.ContextInfo.ExternalAdReplyInfo.mediaType:type_name -> WAWebProtobufsE2E.ContextInfo.ExternalAdReplyInfo.MediaType + 57, // 413: WAWebProtobufsE2E.ContextInfo.ExternalAdReplyInfo.adType:type_name -> WAWebProtobufsE2E.ContextInfo.ExternalAdReplyInfo.AdType + 59, // 414: WAWebProtobufsE2E.ContextInfo.AdReplyInfo.mediaType:type_name -> WAWebProtobufsE2E.ContextInfo.AdReplyInfo.MediaType + 111, // 415: WAWebProtobufsE2E.ContextInfo.QuestionReplyQuotedMessage.quotedQuestion:type_name -> WAWebProtobufsE2E.Message + 111, // 416: WAWebProtobufsE2E.ContextInfo.QuestionReplyQuotedMessage.quotedResponse:type_name -> WAWebProtobufsE2E.Message + 252, // 417: WAWebProtobufsE2E.ContextInfo.DataSharingContext.Parameters.contents:type_name -> WAWebProtobufsE2E.ContextInfo.DataSharingContext.Parameters + 64, // 418: WAWebProtobufsE2E.HydratedTemplateButton.HydratedURLButton.webviewPresentation:type_name -> WAWebProtobufsE2E.HydratedTemplateButton.HydratedURLButton.WebviewPresentationType + 101, // 419: WAWebProtobufsE2E.ProductMessage.ProductSnapshot.productImage:type_name -> WAWebProtobufsE2E.ImageMessage + 101, // 420: WAWebProtobufsE2E.ProductMessage.CatalogSnapshot.catalogImage:type_name -> WAWebProtobufsE2E.ImageMessage + 162, // 421: WAWebProtobufsE2E.TemplateMessage.HydratedFourRowTemplate.documentMessage:type_name -> WAWebProtobufsE2E.DocumentMessage + 101, // 422: WAWebProtobufsE2E.TemplateMessage.HydratedFourRowTemplate.imageMessage:type_name -> WAWebProtobufsE2E.ImageMessage + 95, // 423: WAWebProtobufsE2E.TemplateMessage.HydratedFourRowTemplate.videoMessage:type_name -> WAWebProtobufsE2E.VideoMessage + 166, // 424: WAWebProtobufsE2E.TemplateMessage.HydratedFourRowTemplate.locationMessage:type_name -> WAWebProtobufsE2E.LocationMessage + 107, // 425: WAWebProtobufsE2E.TemplateMessage.HydratedFourRowTemplate.hydratedButtons:type_name -> WAWebProtobufsE2E.HydratedTemplateButton + 162, // 426: WAWebProtobufsE2E.TemplateMessage.FourRowTemplate.documentMessage:type_name -> WAWebProtobufsE2E.DocumentMessage + 89, // 427: WAWebProtobufsE2E.TemplateMessage.FourRowTemplate.highlyStructuredMessage:type_name -> WAWebProtobufsE2E.HighlyStructuredMessage + 101, // 428: WAWebProtobufsE2E.TemplateMessage.FourRowTemplate.imageMessage:type_name -> WAWebProtobufsE2E.ImageMessage + 95, // 429: WAWebProtobufsE2E.TemplateMessage.FourRowTemplate.videoMessage:type_name -> WAWebProtobufsE2E.VideoMessage + 166, // 430: WAWebProtobufsE2E.TemplateMessage.FourRowTemplate.locationMessage:type_name -> WAWebProtobufsE2E.LocationMessage + 89, // 431: WAWebProtobufsE2E.TemplateMessage.FourRowTemplate.content:type_name -> WAWebProtobufsE2E.HighlyStructuredMessage + 89, // 432: WAWebProtobufsE2E.TemplateMessage.FourRowTemplate.footer:type_name -> WAWebProtobufsE2E.HighlyStructuredMessage + 178, // 433: WAWebProtobufsE2E.TemplateMessage.FourRowTemplate.buttons:type_name -> WAWebProtobufsE2E.TemplateButton + 89, // 434: WAWebProtobufsE2E.TemplateButton.CallButton.displayText:type_name -> WAWebProtobufsE2E.HighlyStructuredMessage + 89, // 435: WAWebProtobufsE2E.TemplateButton.CallButton.phoneNumber:type_name -> WAWebProtobufsE2E.HighlyStructuredMessage + 89, // 436: WAWebProtobufsE2E.TemplateButton.URLButton.displayText:type_name -> WAWebProtobufsE2E.HighlyStructuredMessage + 89, // 437: WAWebProtobufsE2E.TemplateButton.URLButton.URL:type_name -> WAWebProtobufsE2E.HighlyStructuredMessage + 89, // 438: WAWebProtobufsE2E.TemplateButton.QuickReplyButton.displayText:type_name -> WAWebProtobufsE2E.HighlyStructuredMessage + 439, // [439:439] is the sub-list for method output_type + 439, // [439:439] is the sub-list for method input_type + 439, // [439:439] is the sub-list for extension type_name + 439, // [439:439] is the sub-list for extension extendee + 0, // [0:439] is the sub-list for field type_name } func init() { file_waE2E_WAWebProtobufsE2E_proto_init() } @@ -18418,2044 +23882,54 @@ func file_waE2E_WAWebProtobufsE2E_proto_init() { if File_waE2E_WAWebProtobufsE2E_proto != nil { return } - if !protoimpl.UnsafeEnabled { - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[0].Exporter = func(v any, i int) any { - switch v := v.(*PlaceholderMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[1].Exporter = func(v any, i int) any { - switch v := v.(*BCallMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[2].Exporter = func(v any, i int) any { - switch v := v.(*CallLogMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[3].Exporter = func(v any, i int) any { - switch v := v.(*ScheduledCallEditMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[4].Exporter = func(v any, i int) any { - switch v := v.(*ScheduledCallCreationMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[5].Exporter = func(v any, i int) any { - switch v := v.(*EventResponseMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[6].Exporter = func(v any, i int) any { - switch v := v.(*PinInChatMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[7].Exporter = func(v any, i int) any { - switch v := v.(*ButtonsResponseMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[8].Exporter = func(v any, i int) any { - switch v := v.(*ButtonsMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[9].Exporter = func(v any, i int) any { - switch v := v.(*SecretEncryptedMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[10].Exporter = func(v any, i int) any { - switch v := v.(*GroupInviteMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[11].Exporter = func(v any, i int) any { - switch v := v.(*InteractiveResponseMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[12].Exporter = func(v any, i int) any { - switch v := v.(*InteractiveMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[13].Exporter = func(v any, i int) any { - switch v := v.(*ListResponseMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[14].Exporter = func(v any, i int) any { - switch v := v.(*ListMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[15].Exporter = func(v any, i int) any { - switch v := v.(*OrderMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[16].Exporter = func(v any, i int) any { - switch v := v.(*PaymentInviteMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[17].Exporter = func(v any, i int) any { - switch v := v.(*HighlyStructuredMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[18].Exporter = func(v any, i int) any { - switch v := v.(*PeerDataOperationRequestResponseMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[19].Exporter = func(v any, i int) any { - switch v := v.(*HistorySyncNotification); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[20].Exporter = func(v any, i int) any { - switch v := v.(*RequestWelcomeMessageMetadata); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[21].Exporter = func(v any, i int) any { - switch v := v.(*ProtocolMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[22].Exporter = func(v any, i int) any { - switch v := v.(*CloudAPIThreadControlNotification); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[23].Exporter = func(v any, i int) any { - switch v := v.(*BotFeedbackMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[24].Exporter = func(v any, i int) any { - switch v := v.(*VideoMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[25].Exporter = func(v any, i int) any { - switch v := v.(*ExtendedTextMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[26].Exporter = func(v any, i int) any { - switch v := v.(*InvoiceMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[27].Exporter = func(v any, i int) any { - switch v := v.(*ImageMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[28].Exporter = func(v any, i int) any { - switch v := v.(*ContextInfo); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[29].Exporter = func(v any, i int) any { - switch v := v.(*BotPluginMetadata); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[30].Exporter = func(v any, i int) any { - switch v := v.(*BotMediaMetadata); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[31].Exporter = func(v any, i int) any { - switch v := v.(*BotReminderMetadata); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[32].Exporter = func(v any, i int) any { - switch v := v.(*BotModelMetadata); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[33].Exporter = func(v any, i int) any { - switch v := v.(*MessageAssociation); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[34].Exporter = func(v any, i int) any { - switch v := v.(*MessageContextInfo); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[35].Exporter = func(v any, i int) any { - switch v := v.(*HydratedTemplateButton); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[36].Exporter = func(v any, i int) any { - switch v := v.(*PaymentBackground); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[37].Exporter = func(v any, i int) any { - switch v := v.(*DisappearingMode); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[38].Exporter = func(v any, i int) any { - switch v := v.(*ProcessedVideo); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[39].Exporter = func(v any, i int) any { - switch v := v.(*Message); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[40].Exporter = func(v any, i int) any { - switch v := v.(*StickerPackMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[41].Exporter = func(v any, i int) any { - switch v := v.(*AlbumMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[42].Exporter = func(v any, i int) any { - switch v := v.(*MessageHistoryBundle); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[43].Exporter = func(v any, i int) any { - switch v := v.(*EncEventResponseMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[44].Exporter = func(v any, i int) any { - switch v := v.(*EventMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[45].Exporter = func(v any, i int) any { - switch v := v.(*CommentMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[46].Exporter = func(v any, i int) any { - switch v := v.(*EncCommentMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[47].Exporter = func(v any, i int) any { - switch v := v.(*EncReactionMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[48].Exporter = func(v any, i int) any { - switch v := v.(*KeepInChatMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[49].Exporter = func(v any, i int) any { - switch v := v.(*PollResultSnapshotMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[50].Exporter = func(v any, i int) any { - switch v := v.(*PollVoteMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[51].Exporter = func(v any, i int) any { - switch v := v.(*PollEncValue); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[52].Exporter = func(v any, i int) any { - switch v := v.(*PollUpdateMessageMetadata); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[53].Exporter = func(v any, i int) any { - switch v := v.(*PollUpdateMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[54].Exporter = func(v any, i int) any { - switch v := v.(*PollCreationMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[55].Exporter = func(v any, i int) any { - switch v := v.(*StickerSyncRMRMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[56].Exporter = func(v any, i int) any { - switch v := v.(*ReactionMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[57].Exporter = func(v any, i int) any { - switch v := v.(*FutureProofMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[58].Exporter = func(v any, i int) any { - switch v := v.(*DeviceSentMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[59].Exporter = func(v any, i int) any { - switch v := v.(*RequestPhoneNumberMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[60].Exporter = func(v any, i int) any { - switch v := v.(*NewsletterAdminInviteMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[61].Exporter = func(v any, i int) any { - switch v := v.(*ProductMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[62].Exporter = func(v any, i int) any { - switch v := v.(*TemplateButtonReplyMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[63].Exporter = func(v any, i int) any { - switch v := v.(*TemplateMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[64].Exporter = func(v any, i int) any { - switch v := v.(*StickerMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[65].Exporter = func(v any, i int) any { - switch v := v.(*LiveLocationMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[66].Exporter = func(v any, i int) any { - switch v := v.(*CancelPaymentRequestMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[67].Exporter = func(v any, i int) any { - switch v := v.(*DeclinePaymentRequestMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[68].Exporter = func(v any, i int) any { - switch v := v.(*RequestPaymentMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[69].Exporter = func(v any, i int) any { - switch v := v.(*SendPaymentMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[70].Exporter = func(v any, i int) any { - switch v := v.(*ContactsArrayMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[71].Exporter = func(v any, i int) any { - switch v := v.(*InitialSecurityNotificationSettingSync); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[72].Exporter = func(v any, i int) any { - switch v := v.(*PeerDataOperationRequestMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[73].Exporter = func(v any, i int) any { - switch v := v.(*FullHistorySyncOnDemandRequestMetadata); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[74].Exporter = func(v any, i int) any { - switch v := v.(*AppStateFatalExceptionNotification); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[75].Exporter = func(v any, i int) any { - switch v := v.(*AppStateSyncKeyRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[76].Exporter = func(v any, i int) any { - switch v := v.(*AppStateSyncKeyShare); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[77].Exporter = func(v any, i int) any { - switch v := v.(*AppStateSyncKeyData); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[78].Exporter = func(v any, i int) any { - switch v := v.(*AppStateSyncKeyFingerprint); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[79].Exporter = func(v any, i int) any { - switch v := v.(*AppStateSyncKeyId); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[80].Exporter = func(v any, i int) any { - switch v := v.(*AppStateSyncKey); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[81].Exporter = func(v any, i int) any { - switch v := v.(*Chat); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[82].Exporter = func(v any, i int) any { - switch v := v.(*Call); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[83].Exporter = func(v any, i int) any { - switch v := v.(*AudioMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[84].Exporter = func(v any, i int) any { - switch v := v.(*DocumentMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[85].Exporter = func(v any, i int) any { - switch v := v.(*LocationMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[86].Exporter = func(v any, i int) any { - switch v := v.(*ContactMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[87].Exporter = func(v any, i int) any { - switch v := v.(*SenderKeyDistributionMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[88].Exporter = func(v any, i int) any { - switch v := v.(*BotAvatarMetadata); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[89].Exporter = func(v any, i int) any { - switch v := v.(*BotSuggestedPromptMetadata); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[90].Exporter = func(v any, i int) any { - switch v := v.(*BotSessionMetadata); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[91].Exporter = func(v any, i int) any { - switch v := v.(*BotMemuMetadata); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[92].Exporter = func(v any, i int) any { - switch v := v.(*BotMetadata); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[93].Exporter = func(v any, i int) any { - switch v := v.(*DeviceListMetadata); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[94].Exporter = func(v any, i int) any { - switch v := v.(*EmbeddedMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[95].Exporter = func(v any, i int) any { - switch v := v.(*EmbeddedMusic); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[96].Exporter = func(v any, i int) any { - switch v := v.(*EmbeddedContent); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[97].Exporter = func(v any, i int) any { - switch v := v.(*InteractiveAnnotation); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[98].Exporter = func(v any, i int) any { - switch v := v.(*Point); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[99].Exporter = func(v any, i int) any { - switch v := v.(*Location); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[100].Exporter = func(v any, i int) any { - switch v := v.(*TemplateButton); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[101].Exporter = func(v any, i int) any { - switch v := v.(*Money); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[102].Exporter = func(v any, i int) any { - switch v := v.(*ActionLink); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[103].Exporter = func(v any, i int) any { - switch v := v.(*GroupMention); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[104].Exporter = func(v any, i int) any { - switch v := v.(*MessageSecretMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[105].Exporter = func(v any, i int) any { - switch v := v.(*MediaNotifyMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[106].Exporter = func(v any, i int) any { - switch v := v.(*LIDMigrationMappingSyncMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[107].Exporter = func(v any, i int) any { - switch v := v.(*CallLogMessage_CallParticipant); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[108].Exporter = func(v any, i int) any { - switch v := v.(*ButtonsMessage_Button); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[109].Exporter = func(v any, i int) any { - switch v := v.(*ButtonsMessage_Button_NativeFlowInfo); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[110].Exporter = func(v any, i int) any { - switch v := v.(*ButtonsMessage_Button_ButtonText); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[111].Exporter = func(v any, i int) any { - switch v := v.(*InteractiveResponseMessage_Body); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[112].Exporter = func(v any, i int) any { - switch v := v.(*InteractiveResponseMessage_NativeFlowResponseMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[113].Exporter = func(v any, i int) any { - switch v := v.(*InteractiveMessage_ShopMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[114].Exporter = func(v any, i int) any { - switch v := v.(*InteractiveMessage_CarouselMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[115].Exporter = func(v any, i int) any { - switch v := v.(*InteractiveMessage_NativeFlowMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[116].Exporter = func(v any, i int) any { - switch v := v.(*InteractiveMessage_CollectionMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[117].Exporter = func(v any, i int) any { - switch v := v.(*InteractiveMessage_Footer); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[118].Exporter = func(v any, i int) any { - switch v := v.(*InteractiveMessage_Body); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[119].Exporter = func(v any, i int) any { - switch v := v.(*InteractiveMessage_Header); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[120].Exporter = func(v any, i int) any { - switch v := v.(*InteractiveMessage_NativeFlowMessage_NativeFlowButton); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[121].Exporter = func(v any, i int) any { - switch v := v.(*ListResponseMessage_SingleSelectReply); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[122].Exporter = func(v any, i int) any { - switch v := v.(*ListMessage_ProductListInfo); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[123].Exporter = func(v any, i int) any { - switch v := v.(*ListMessage_ProductListHeaderImage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[124].Exporter = func(v any, i int) any { - switch v := v.(*ListMessage_ProductSection); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[125].Exporter = func(v any, i int) any { - switch v := v.(*ListMessage_Product); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[126].Exporter = func(v any, i int) any { - switch v := v.(*ListMessage_Section); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[127].Exporter = func(v any, i int) any { - switch v := v.(*ListMessage_Row); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[128].Exporter = func(v any, i int) any { - switch v := v.(*HighlyStructuredMessage_HSMLocalizableParameter); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[129].Exporter = func(v any, i int) any { - switch v := v.(*HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[130].Exporter = func(v any, i int) any { - switch v := v.(*HighlyStructuredMessage_HSMLocalizableParameter_HSMCurrency); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[131].Exporter = func(v any, i int) any { - switch v := v.(*HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeComponent); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[132].Exporter = func(v any, i int) any { - switch v := v.(*HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_HSMDateTimeUnixEpoch); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[133].Exporter = func(v any, i int) any { - switch v := v.(*PeerDataOperationRequestResponseMessage_PeerDataOperationResult); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[134].Exporter = func(v any, i int) any { - switch v := v.(*PeerDataOperationRequestResponseMessage_PeerDataOperationResult_WaffleNonceFetchResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[135].Exporter = func(v any, i int) any { - switch v := v.(*PeerDataOperationRequestResponseMessage_PeerDataOperationResult_FullHistorySyncOnDemandRequestResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[136].Exporter = func(v any, i int) any { - switch v := v.(*PeerDataOperationRequestResponseMessage_PeerDataOperationResult_PlaceholderMessageResendResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[137].Exporter = func(v any, i int) any { - switch v := v.(*PeerDataOperationRequestResponseMessage_PeerDataOperationResult_LinkPreviewResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[138].Exporter = func(v any, i int) any { - switch v := v.(*PeerDataOperationRequestResponseMessage_PeerDataOperationResult_LinkPreviewResponse_LinkPreviewHighQualityThumbnail); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[139].Exporter = func(v any, i int) any { - switch v := v.(*ContextInfo_ForwardedNewsletterMessageInfo); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[140].Exporter = func(v any, i int) any { - switch v := v.(*ContextInfo_ExternalAdReplyInfo); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[141].Exporter = func(v any, i int) any { - switch v := v.(*ContextInfo_AdReplyInfo); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[142].Exporter = func(v any, i int) any { - switch v := v.(*ContextInfo_FeatureEligibilities); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[143].Exporter = func(v any, i int) any { - switch v := v.(*ContextInfo_DataSharingContext); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[144].Exporter = func(v any, i int) any { - switch v := v.(*ContextInfo_UTMInfo); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[145].Exporter = func(v any, i int) any { - switch v := v.(*ContextInfo_BusinessMessageForwardInfo); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[146].Exporter = func(v any, i int) any { - switch v := v.(*ContextInfo_DataSharingContext_Parameters); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[147].Exporter = func(v any, i int) any { - switch v := v.(*HydratedTemplateButton_HydratedURLButton); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[148].Exporter = func(v any, i int) any { - switch v := v.(*HydratedTemplateButton_HydratedCallButton); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[149].Exporter = func(v any, i int) any { - switch v := v.(*HydratedTemplateButton_HydratedQuickReplyButton); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[150].Exporter = func(v any, i int) any { - switch v := v.(*PaymentBackground_MediaData); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[151].Exporter = func(v any, i int) any { - switch v := v.(*StickerPackMessage_Sticker); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[152].Exporter = func(v any, i int) any { - switch v := v.(*PollResultSnapshotMessage_PollVote); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[153].Exporter = func(v any, i int) any { - switch v := v.(*PollCreationMessage_Option); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[154].Exporter = func(v any, i int) any { - switch v := v.(*ProductMessage_ProductSnapshot); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[155].Exporter = func(v any, i int) any { - switch v := v.(*ProductMessage_CatalogSnapshot); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[156].Exporter = func(v any, i int) any { - switch v := v.(*TemplateMessage_HydratedFourRowTemplate); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[157].Exporter = func(v any, i int) any { - switch v := v.(*TemplateMessage_FourRowTemplate); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[158].Exporter = func(v any, i int) any { - switch v := v.(*PeerDataOperationRequestMessage_PlaceholderMessageResendRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[159].Exporter = func(v any, i int) any { - switch v := v.(*PeerDataOperationRequestMessage_FullHistorySyncOnDemandRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[160].Exporter = func(v any, i int) any { - switch v := v.(*PeerDataOperationRequestMessage_HistorySyncOnDemandRequest); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[161].Exporter = func(v any, i int) any { - switch v := v.(*PeerDataOperationRequestMessage_RequestUrlPreview); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[162].Exporter = func(v any, i int) any { - switch v := v.(*PeerDataOperationRequestMessage_RequestStickerReupload); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[163].Exporter = func(v any, i int) any { - switch v := v.(*TemplateButton_CallButton); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[164].Exporter = func(v any, i int) any { - switch v := v.(*TemplateButton_URLButton); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[165].Exporter = func(v any, i int) any { - switch v := v.(*TemplateButton_QuickReplyButton); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[7].OneofWrappers = []any{ + file_waE2E_WAWebProtobufsE2E_proto_msgTypes[9].OneofWrappers = []any{ (*ButtonsResponseMessage_SelectedDisplayText)(nil), } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[8].OneofWrappers = []any{ + file_waE2E_WAWebProtobufsE2E_proto_msgTypes[10].OneofWrappers = []any{ (*ButtonsMessage_Text)(nil), (*ButtonsMessage_DocumentMessage)(nil), (*ButtonsMessage_ImageMessage)(nil), (*ButtonsMessage_VideoMessage)(nil), (*ButtonsMessage_LocationMessage)(nil), } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[11].OneofWrappers = []any{ + file_waE2E_WAWebProtobufsE2E_proto_msgTypes[13].OneofWrappers = []any{ (*InteractiveResponseMessage_NativeFlowResponseMessage_)(nil), } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[12].OneofWrappers = []any{ + file_waE2E_WAWebProtobufsE2E_proto_msgTypes[14].OneofWrappers = []any{ (*InteractiveMessage_ShopStorefrontMessage)(nil), (*InteractiveMessage_CollectionMessage_)(nil), (*InteractiveMessage_NativeFlowMessage_)(nil), (*InteractiveMessage_CarouselMessage_)(nil), } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[35].OneofWrappers = []any{ + file_waE2E_WAWebProtobufsE2E_proto_msgTypes[37].OneofWrappers = []any{ + (*InteractiveAnnotation_Location)(nil), + (*InteractiveAnnotation_Newsletter)(nil), + (*InteractiveAnnotation_EmbeddedAction)(nil), + (*InteractiveAnnotation_TapAction)(nil), + } + file_waE2E_WAWebProtobufsE2E_proto_msgTypes[38].OneofWrappers = []any{ (*HydratedTemplateButton_QuickReplyButton)(nil), (*HydratedTemplateButton_UrlButton)(nil), (*HydratedTemplateButton_CallButton)(nil), } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[63].OneofWrappers = []any{ + file_waE2E_WAWebProtobufsE2E_proto_msgTypes[70].OneofWrappers = []any{ (*TemplateMessage_FourRowTemplate_)(nil), (*TemplateMessage_HydratedFourRowTemplate_)(nil), (*TemplateMessage_InteractiveMessageTemplate)(nil), } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[96].OneofWrappers = []any{ + file_waE2E_WAWebProtobufsE2E_proto_msgTypes[105].OneofWrappers = []any{ (*EmbeddedContent_EmbeddedMessage)(nil), (*EmbeddedContent_EmbeddedMusic)(nil), } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[97].OneofWrappers = []any{ - (*InteractiveAnnotation_Location)(nil), - (*InteractiveAnnotation_Newsletter)(nil), - (*InteractiveAnnotation_EmbeddedAction)(nil), - } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[100].OneofWrappers = []any{ + file_waE2E_WAWebProtobufsE2E_proto_msgTypes[109].OneofWrappers = []any{ (*TemplateButton_QuickReplyButton_)(nil), (*TemplateButton_UrlButton)(nil), (*TemplateButton_CallButton_)(nil), } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[119].OneofWrappers = []any{ + file_waE2E_WAWebProtobufsE2E_proto_msgTypes[132].OneofWrappers = []any{ + (*InteractiveMessage_Footer_AudioMessage)(nil), + } + file_waE2E_WAWebProtobufsE2E_proto_msgTypes[134].OneofWrappers = []any{ (*InteractiveMessage_Header_DocumentMessage)(nil), (*InteractiveMessage_Header_ImageMessage)(nil), (*InteractiveMessage_Header_JPEGThumbnail)(nil), @@ -20463,22 +23937,22 @@ func file_waE2E_WAWebProtobufsE2E_proto_init() { (*InteractiveMessage_Header_LocationMessage)(nil), (*InteractiveMessage_Header_ProductMessage)(nil), } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[128].OneofWrappers = []any{ + file_waE2E_WAWebProtobufsE2E_proto_msgTypes[143].OneofWrappers = []any{ (*HighlyStructuredMessage_HSMLocalizableParameter_Currency)(nil), (*HighlyStructuredMessage_HSMLocalizableParameter_DateTime)(nil), } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[129].OneofWrappers = []any{ + file_waE2E_WAWebProtobufsE2E_proto_msgTypes[144].OneofWrappers = []any{ (*HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_Component)(nil), (*HighlyStructuredMessage_HSMLocalizableParameter_HSMDateTime_UnixEpoch)(nil), } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[156].OneofWrappers = []any{ + file_waE2E_WAWebProtobufsE2E_proto_msgTypes[192].OneofWrappers = []any{ (*TemplateMessage_HydratedFourRowTemplate_DocumentMessage)(nil), (*TemplateMessage_HydratedFourRowTemplate_HydratedTitleText)(nil), (*TemplateMessage_HydratedFourRowTemplate_ImageMessage)(nil), (*TemplateMessage_HydratedFourRowTemplate_VideoMessage)(nil), (*TemplateMessage_HydratedFourRowTemplate_LocationMessage)(nil), } - file_waE2E_WAWebProtobufsE2E_proto_msgTypes[157].OneofWrappers = []any{ + file_waE2E_WAWebProtobufsE2E_proto_msgTypes[193].OneofWrappers = []any{ (*TemplateMessage_FourRowTemplate_DocumentMessage)(nil), (*TemplateMessage_FourRowTemplate_HighlyStructuredMessage)(nil), (*TemplateMessage_FourRowTemplate_ImageMessage)(nil), @@ -20489,9 +23963,9 @@ func file_waE2E_WAWebProtobufsE2E_proto_init() { out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_waE2E_WAWebProtobufsE2E_proto_rawDesc, - NumEnums: 57, - NumMessages: 166, + RawDescriptor: unsafe.Slice(unsafe.StringData(file_waE2E_WAWebProtobufsE2E_proto_rawDesc), len(file_waE2E_WAWebProtobufsE2E_proto_rawDesc)), + NumEnums: 69, + NumMessages: 198, NumExtensions: 0, NumServices: 0, }, @@ -20501,7 +23975,6 @@ func file_waE2E_WAWebProtobufsE2E_proto_init() { MessageInfos: file_waE2E_WAWebProtobufsE2E_proto_msgTypes, }.Build() File_waE2E_WAWebProtobufsE2E_proto = out.File - file_waE2E_WAWebProtobufsE2E_proto_rawDesc = nil file_waE2E_WAWebProtobufsE2E_proto_goTypes = nil file_waE2E_WAWebProtobufsE2E_proto_depIdxs = nil } diff --git a/vendor/go.mau.fi/whatsmeow/proto/waE2E/WAWebProtobufsE2E.pb.raw b/vendor/go.mau.fi/whatsmeow/proto/waE2E/WAWebProtobufsE2E.pb.raw deleted file mode 100644 index 401511e257..0000000000 Binary files a/vendor/go.mau.fi/whatsmeow/proto/waE2E/WAWebProtobufsE2E.pb.raw and /dev/null differ diff --git a/vendor/go.mau.fi/whatsmeow/proto/waE2E/WAWebProtobufsE2E.proto b/vendor/go.mau.fi/whatsmeow/proto/waE2E/WAWebProtobufsE2E.proto index 909d7ca1c5..6d46bb9e4f 100644 --- a/vendor/go.mau.fi/whatsmeow/proto/waE2E/WAWebProtobufsE2E.proto +++ b/vendor/go.mau.fi/whatsmeow/proto/waE2E/WAWebProtobufsE2E.proto @@ -2,10 +2,23 @@ syntax = "proto2"; package WAWebProtobufsE2E; option go_package = "go.mau.fi/whatsmeow/proto/waE2E"; +import "waAICommon/WAWebProtobufsAICommon.proto"; import "waAdv/WAAdv.proto"; -import "waCompanionReg/WAWebProtobufsCompanionReg.proto"; +import "waCompanionReg/WACompanionReg.proto"; import "waMmsRetry/WAMmsRetry.proto"; import "waCommon/WACommon.proto"; +import "waStatusAttributions/WAStatusAttributions.proto"; + +enum PollType { + POLL = 0; + QUIZ = 1; +} + +enum PollContentType { + UNKNOWN_POLL_CONTENT_TYPE = 0; + TEXT = 1; + IMAGE = 2; +} enum PeerDataOperationRequestType { UPLOAD_STICKER = 0; @@ -15,23 +28,82 @@ enum PeerDataOperationRequestType { PLACEHOLDER_MESSAGE_RESEND = 4; WAFFLE_LINKING_NONCE_FETCH = 5; FULL_HISTORY_SYNC_ON_DEMAND = 6; + COMPANION_META_NONCE_FETCH = 7; + COMPANION_SYNCD_SNAPSHOT_FATAL_RECOVERY = 8; + COMPANION_CANONICAL_USER_NONCE_FETCH = 9; + HISTORY_SYNC_CHUNK_RETRY = 10; + GALAXY_FLOW_ACTION = 11; } -enum SessionSource { - NULL_STATE = 1; - TYPEAHEAD = 2; - USER_INPUT = 3; - EMU_FLASH = 4; - EMU_FLASH_FOLLOWUP = 5; - VOICE = 6; +enum HistorySyncType { + INITIAL_BOOTSTRAP = 0; + INITIAL_STATUS_V3 = 1; + FULL = 2; + RECENT = 3; + PUSH_NAME = 4; + NON_BLOCKING_DATA = 5; + ON_DEMAND = 6; + NO_HISTORY = 7; + MESSAGE_ACCESS_STATUS = 8; +} + +enum MediaKeyDomain { + MEDIA_KEY_DOMAIN_UNKNOWN = 0; + MEDIA_KEY_DOMAIN_E2EE = 1; + MEDIA_KEY_DOMAIN_NON_E2EE = 2; +} + +enum WebLinkRenderConfig { + WEBVIEW = 0; + SYSTEM = 1; } enum KeepType { - UNKNOWN = 0; + UNKNOWN_KEEP_TYPE = 0; KEEP_FOR_ALL = 1; UNDO_KEEP_FOR_ALL = 2; } +message StickerPackMessage { + enum StickerPackOrigin { + FIRST_PARTY = 0; + THIRD_PARTY = 1; + USER_CREATED = 2; + } + + message Sticker { + optional string fileName = 1; + optional bool isAnimated = 2; + repeated string emojis = 3; + optional string accessibilityLabel = 4; + optional bool isLottie = 5; + optional string mimetype = 6; + } + + optional string stickerPackID = 1; + optional string name = 2; + optional string publisher = 3; + repeated Sticker stickers = 4; + optional uint64 fileLength = 5; + optional bytes fileSHA256 = 6; + optional bytes fileEncSHA256 = 7; + optional bytes mediaKey = 8; + optional string directPath = 9; + optional string caption = 10; + optional ContextInfo contextInfo = 11; + optional string packDescription = 12; + optional int64 mediaKeyTimestamp = 13; + optional string trayIconFileName = 14; + optional string thumbnailDirectPath = 15; + optional bytes thumbnailSHA256 = 16; + optional bytes thumbnailEncSHA256 = 17; + optional uint32 thumbnailHeight = 18; + optional uint32 thumbnailWidth = 19; + optional string imageDataHash = 20; + optional uint64 stickerPackSize = 21; + optional StickerPackOrigin stickerPackOrigin = 22; +} + message PlaceholderMessage { enum PlaceholderType { MASK_LINKED_DEVICES = 0; @@ -130,6 +202,17 @@ message PinInChatMessage { optional int64 senderTimestampMS = 3; } +message StatusStickerInteractionMessage { + enum StatusStickerType { + UNKNOWN = 0; + REACTION = 1; + } + + optional WACommon.MessageKey key = 1; + optional string stickerKey = 2; + optional StatusStickerType type = 3; +} + message ButtonsResponseMessage { enum Type { UNKNOWN = 0; @@ -197,12 +280,16 @@ message SecretEncryptedMessage { enum SecretEncType { UNKNOWN = 0; EVENT_EDIT = 1; + MESSAGE_EDIT = 2; + MESSAGE_SCHEDULE = 3; + POLL_EDIT = 4; } optional WACommon.MessageKey targetMessageKey = 1; optional bytes encPayload = 2; optional bytes encIV = 3; optional SecretEncType secretEncType = 4; + optional string remoteKeyID = 5; } message GroupInviteMessage { @@ -247,6 +334,18 @@ message InteractiveResponseMessage { } message InteractiveMessage { + message CarouselMessage { + enum CarouselCardType { + UNKNOWN = 0; + HSCROLL_CARDS = 1; + ALBUM_IMAGE = 2; + } + + repeated InteractiveMessage cards = 1; + optional int32 messageVersion = 2; + optional CarouselCardType carouselCardType = 3; + } + message ShopMessage { enum Surface { UNKNOWN_SURFACE = 0; @@ -260,11 +359,6 @@ message InteractiveMessage { optional int32 messageVersion = 3; } - message CarouselMessage { - repeated InteractiveMessage cards = 1; - optional int32 messageVersion = 2; - } - message NativeFlowMessage { message NativeFlowButton { optional string name = 1; @@ -282,8 +376,19 @@ message InteractiveMessage { optional int32 messageVersion = 3; } + message BloksWidget { + optional string uuid = 1; + optional string data = 2; + optional string type = 3; + } + message Footer { + oneof media { + AudioMessage audioMessage = 2; + } + optional string text = 1; + optional bool hasMediaAttachment = 3; } message Body { @@ -303,6 +408,7 @@ message InteractiveMessage { optional string title = 1; optional string subtitle = 2; optional bool hasMediaAttachment = 5; + optional BloksWidget bloksWidget = 10; } oneof interactiveMessage { @@ -315,7 +421,9 @@ message InteractiveMessage { optional Header header = 1; optional Body body = 2; optional Footer footer = 3; + optional BloksWidget bloksWidget = 8; optional ContextInfo contextInfo = 15; + optional UrlTrackingMap urlTrackingMap = 16; } message ListResponseMessage { @@ -408,6 +516,18 @@ message OrderMessage { optional ContextInfo contextInfo = 17; optional int32 messageVersion = 12; optional WACommon.MessageKey orderRequestMessageID = 13; + optional string catalogType = 15; +} + +message StatusQuotedMessage { + enum StatusQuotedMessageType { + QUESTION_ANSWER = 1; + } + + optional StatusQuotedMessageType type = 1; + optional string text = 2; + optional bytes thumbnail = 3; + optional WACommon.MessageKey originalStatusID = 4; } message PaymentInviteMessage { @@ -420,6 +540,8 @@ message PaymentInviteMessage { optional ServiceType serviceType = 1; optional int64 expiryTimestamp = 2; + optional bool incentiveEligible = 3; + optional string referralID = 4; } message HighlyStructuredMessage { @@ -486,11 +608,59 @@ message HighlyStructuredMessage { message PeerDataOperationRequestResponseMessage { message PeerDataOperationResult { + enum HistorySyncChunkRetryResponseCode { + GENERATION_ERROR = 1; + CHUNK_CONSUMED = 2; + TIMEOUT = 3; + SESSION_EXHAUSTED = 4; + CHUNK_EXHAUSTED = 5; + DUPLICATED_REQUEST = 6; + } + enum FullHistorySyncOnDemandResponseCode { REQUEST_SUCCESS = 0; REQUEST_TIME_EXPIRED = 1; DECLINED_SHARING_HISTORY = 2; GENERIC_ERROR = 3; + ERROR_REQUEST_ON_NON_SMB_PRIMARY = 4; + ERROR_HOSTED_DEVICE_NOT_CONNECTED = 5; + ERROR_HOSTED_DEVICE_LOGIN_TIME_NOT_SET = 6; + } + + message FlowResponsesCsvBundle { + optional string flowID = 1; + optional string galaxyFlowDownloadRequestID = 2; + optional string fileName = 3; + optional string mimetype = 4; + optional bytes fileSHA256 = 5; + optional bytes mediaKey = 6; + optional bytes fileEncSHA256 = 7; + optional string directPath = 8; + optional int64 mediaKeyTimestamp = 9; + optional uint64 fileLength = 10; + } + + message HistorySyncChunkRetryResponse { + optional HistorySyncType syncType = 1; + optional uint32 chunkOrder = 2; + optional string requestID = 3; + optional HistorySyncChunkRetryResponseCode responseCode = 4; + optional bool canRecover = 5; + } + + message SyncDSnapshotFatalRecoveryResponse { + optional bytes collectionSnapshot = 1; + optional bool isCompressed = 2; + } + + message CompanionCanonicalUserNonceFetchResponse { + optional string nonce = 1; + optional string waFbid = 2; + optional bool forceRefresh = 3; + } + + message CompanionMetaNonceFetchResponse { + optional string nonce = 1; } message WaffleNonceFetchResponse { @@ -508,6 +678,14 @@ message PeerDataOperationRequestResponseMessage { } message LinkPreviewResponse { + message PaymentLinkPreviewMetadata { + optional bool isBusinessVerified = 1; + optional string providerName = 2; + optional string amount = 3; + optional string offset = 4; + optional string currency = 5; + } + message LinkPreviewHighQualityThumbnail { optional string directPath = 1; optional string thumbHash = 2; @@ -522,10 +700,10 @@ message PeerDataOperationRequestResponseMessage { optional string title = 2; optional string description = 3; optional bytes thumbData = 4; - optional string canonicalURL = 5; optional string matchText = 6; optional string previewType = 7; optional LinkPreviewHighQualityThumbnail hqThumbnail = 8; + optional PaymentLinkPreviewMetadata previewMetadata = 9; } optional WAMmsRetry.MediaRetryNotification.ResultType mediaUploadResult = 1; @@ -534,6 +712,11 @@ message PeerDataOperationRequestResponseMessage { optional PlaceholderMessageResendResponse placeholderMessageResendResponse = 4; optional WaffleNonceFetchResponse waffleNonceFetchRequestResponse = 5; optional FullHistorySyncOnDemandRequestResponse fullHistorySyncOnDemandRequestResponse = 6; + optional CompanionMetaNonceFetchResponse companionMetaNonceFetchRequestResponse = 7; + optional SyncDSnapshotFatalRecoveryResponse syncdSnapshotFatalRecoveryResponse = 8; + optional CompanionCanonicalUserNonceFetchResponse companionCanonicalUserNonceFetchRequestResponse = 9; + optional HistorySyncChunkRetryResponse historySyncChunkRetryResponse = 10; + optional FlowResponsesCsvBundle flowResponsesCsvBundle = 11; } optional PeerDataOperationRequestType peerDataOperationRequestType = 1; @@ -541,32 +724,74 @@ message PeerDataOperationRequestResponseMessage { repeated PeerDataOperationResult peerDataOperationResult = 3; } -message HistorySyncNotification { - enum HistorySyncType { - INITIAL_BOOTSTRAP = 0; - INITIAL_STATUS_V3 = 1; - FULL = 2; - RECENT = 3; - PUSH_NAME = 4; - NON_BLOCKING_DATA = 5; - ON_DEMAND = 6; - NO_HISTORY = 7; +message PeerDataOperationRequestMessage { + message GalaxyFlowAction { + enum GalaxyFlowActionType { + NOTIFY_LAUNCH = 1; + DOWNLOAD_RESPONSES = 2; + } + + optional GalaxyFlowActionType type = 1; + optional string flowID = 2; + optional string stanzaID = 3; + optional string galaxyFlowDownloadRequestID = 4; + optional string agmID = 5; } - optional bytes fileSHA256 = 1; - optional uint64 fileLength = 2; - optional bytes mediaKey = 3; - optional bytes fileEncSHA256 = 4; - optional string directPath = 5; - optional HistorySyncType syncType = 6; - optional uint32 chunkOrder = 7; - optional string originalMessageID = 8; - optional uint32 progress = 9; - optional int64 oldestMsgInChunkTimestampSec = 10; - optional bytes initialHistBootstrapInlinePayload = 11; - optional string peerDataRequestSessionID = 12; - optional FullHistorySyncOnDemandRequestMetadata fullHistorySyncOnDemandRequestMetadata = 13; - optional string encHandle = 14; + message CompanionCanonicalUserNonceFetchRequest { + optional string registrationTraceID = 1; + } + + message HistorySyncChunkRetryRequest { + optional HistorySyncType syncType = 1; + optional uint32 chunkOrder = 2; + optional string chunkNotificationID = 3; + optional bool regenerateChunk = 4; + } + + message SyncDCollectionFatalRecoveryRequest { + optional string collectionName = 1; + optional int64 timestamp = 2; + } + + message PlaceholderMessageResendRequest { + optional WACommon.MessageKey messageKey = 1; + } + + message FullHistorySyncOnDemandRequest { + optional FullHistorySyncOnDemandRequestMetadata requestMetadata = 1; + optional WACompanionReg.DeviceProps.HistorySyncConfig historySyncConfig = 2; + optional FullHistorySyncOnDemandConfig fullHistorySyncOnDemandConfig = 3; + } + + message HistorySyncOnDemandRequest { + optional string chatJID = 1; + optional string oldestMsgID = 2; + optional bool oldestMsgFromMe = 3; + optional int32 onDemandMsgCount = 4; + optional int64 oldestMsgTimestampMS = 5; + optional string accountLid = 6; + } + + message RequestUrlPreview { + optional string URL = 1; + optional bool includeHqThumbnail = 2; + } + + message RequestStickerReupload { + optional string fileSHA256 = 1; + } + + optional PeerDataOperationRequestType peerDataOperationRequestType = 1; + repeated RequestStickerReupload requestStickerReupload = 2; + repeated RequestUrlPreview requestURLPreview = 3; + optional HistorySyncOnDemandRequest historySyncOnDemandRequest = 4; + repeated PlaceholderMessageResendRequest placeholderMessageResendRequest = 5; + optional FullHistorySyncOnDemandRequest fullHistorySyncOnDemandRequest = 6; + optional SyncDCollectionFatalRecoveryRequest syncdCollectionFatalRecoveryRequest = 7; + optional HistorySyncChunkRetryRequest historySyncChunkRetryRequest = 8; + optional GalaxyFlowAction galaxyFlowAction = 9; + optional CompanionCanonicalUserNonceFetchRequest companionCanonicalUserNonceFetchRequest = 10; } message RequestWelcomeMessageMetadata { @@ -601,6 +826,13 @@ message ProtocolMessage { REMINDER_MESSAGE = 23; BOT_MEMU_ONBOARDING_MESSAGE = 24; STATUS_MENTION_MESSAGE = 25; + STOP_GENERATION_MESSAGE = 26; + LIMIT_SHARING = 27; + AI_PSI_METADATA = 28; + AI_QUERY_FANOUT = 29; + GROUP_MEMBER_LABEL_CHANGE = 30; + AI_MEDIA_COLLECTION_MESSAGE = 31; + MESSAGE_UNSCHEDULE = 32; } optional WACommon.MessageKey key = 1; @@ -617,12 +849,18 @@ message ProtocolMessage { optional int64 timestampMS = 15; optional PeerDataOperationRequestMessage peerDataOperationRequestMessage = 16; optional PeerDataOperationRequestResponseMessage peerDataOperationRequestResponseMessage = 17; - optional BotFeedbackMessage botFeedbackMessage = 18; + optional WAWebProtobufsAICommon.BotFeedbackMessage botFeedbackMessage = 18; optional string invokerJID = 19; optional RequestWelcomeMessageMetadata requestWelcomeMessageMetadata = 20; optional MediaNotifyMessage mediaNotifyMessage = 21; optional CloudAPIThreadControlNotification cloudApiThreadControlNotification = 22; optional LIDMigrationMappingSyncMessage lidMigrationMappingSyncMessage = 23; + optional WACommon.LimitSharing limitSharing = 24; + optional bytes aiPsiMetadata = 25; + optional AIQueryFanout aiQueryFanout = 26; + optional MemberLabel memberLabel = 27; + optional WAWebProtobufsAICommon.AIMediaCollectionMessage aiMediaCollectionMessage = 28; + optional uint32 afterReadDurationMS = 29; } message CloudAPIThreadControlNotification { @@ -632,59 +870,30 @@ message CloudAPIThreadControlNotification { CONTROL_TAKEN = 2; } + message CloudAPIThreadControlNotificationContent { + optional string handoffNotificationText = 1; + optional string extraJSON = 2; + } + optional CloudAPIThreadControl status = 1; optional int64 senderNotificationTimestampMS = 2; optional string consumerLid = 3; optional string consumerPhoneNumber = 4; + optional CloudAPIThreadControlNotificationContent notificationContent = 5; + optional bool shouldSuppressNotification = 6; } -message BotFeedbackMessage { - enum ReportKind { - GENERIC = 0; - } - - enum BotFeedbackKindMultiplePositive { - BOT_FEEDBACK_MULTIPLE_POSITIVE_GENERIC = 1; - } - - enum BotFeedbackKindMultipleNegative { - BOT_FEEDBACK_MULTIPLE_NEGATIVE_GENERIC = 1; - BOT_FEEDBACK_MULTIPLE_NEGATIVE_HELPFUL = 2; - BOT_FEEDBACK_MULTIPLE_NEGATIVE_INTERESTING = 4; - BOT_FEEDBACK_MULTIPLE_NEGATIVE_ACCURATE = 8; - BOT_FEEDBACK_MULTIPLE_NEGATIVE_SAFE = 16; - BOT_FEEDBACK_MULTIPLE_NEGATIVE_OTHER = 32; - BOT_FEEDBACK_MULTIPLE_NEGATIVE_REFUSED = 64; - BOT_FEEDBACK_MULTIPLE_NEGATIVE_NOT_VISUALLY_APPEALING = 128; - BOT_FEEDBACK_MULTIPLE_NEGATIVE_NOT_RELEVANT_TO_TEXT = 256; - } - - enum BotFeedbackKind { - BOT_FEEDBACK_POSITIVE = 0; - BOT_FEEDBACK_NEGATIVE_GENERIC = 1; - BOT_FEEDBACK_NEGATIVE_HELPFUL = 2; - BOT_FEEDBACK_NEGATIVE_INTERESTING = 3; - BOT_FEEDBACK_NEGATIVE_ACCURATE = 4; - BOT_FEEDBACK_NEGATIVE_SAFE = 5; - BOT_FEEDBACK_NEGATIVE_OTHER = 6; - BOT_FEEDBACK_NEGATIVE_REFUSED = 7; - BOT_FEEDBACK_NEGATIVE_NOT_VISUALLY_APPEALING = 8; - BOT_FEEDBACK_NEGATIVE_NOT_RELEVANT_TO_TEXT = 9; +message VideoMessage { + enum VideoSourceType { + USER_VIDEO = 0; + AI_GENERATED = 1; } - optional WACommon.MessageKey messageKey = 1; - optional BotFeedbackKind kind = 2; - optional string text = 3; - optional uint64 kindNegative = 4; - optional uint64 kindPositive = 5; - optional ReportKind kindReport = 6; -} - -message VideoMessage { enum Attribution { NONE = 0; GIPHY = 1; TENOR = 2; + KLIPY = 3; } optional string URL = 1; @@ -713,6 +922,10 @@ message VideoMessage { repeated InteractiveAnnotation annotations = 25; optional string accessibilityLabel = 26; repeated ProcessedVideo processedVideos = 27; + optional uint32 externalShareFullVideoDurationInSeconds = 28; + optional uint64 motionPhotoPresentationOffsetMS = 29; + optional string metadataURL = 30; + optional VideoSourceType videoSourceType = 31; } message ExtendedTextMessage { @@ -729,6 +942,7 @@ message ExtendedTextMessage { PLACEHOLDER = 4; IMAGE = 5; PAYMENT_LINKS = 6; + PROFILE = 7; } enum FontType { @@ -744,7 +958,6 @@ message ExtendedTextMessage { optional string text = 1; optional string matchedText = 2; - optional string canonicalURL = 4; optional string description = 5; optional string title = 6; optional fixed32 textArgb = 7; @@ -768,6 +981,70 @@ message ExtendedTextMessage { optional bool viewOnce = 30; optional uint32 videoHeight = 31; optional uint32 videoWidth = 32; + optional MMSThumbnailMetadata faviconMMSMetadata = 33; + optional LinkPreviewMetadata linkPreviewMetadata = 34; + optional PaymentLinkMetadata paymentLinkMetadata = 35; + repeated VideoEndCard endCardTiles = 36; + optional string videoContentURL = 37; + optional EmbeddedMusic musicMetadata = 38; + optional PaymentExtendedMetadata paymentExtendedMetadata = 39; +} + +message LinkPreviewMetadata { + enum SocialMediaPostType { + NONE = 0; + REEL = 1; + LIVE_VIDEO = 2; + LONG_VIDEO = 3; + SINGLE_IMAGE = 4; + CAROUSEL = 5; + } + + optional PaymentLinkMetadata paymentLinkMetadata = 1; + optional URLMetadata urlMetadata = 2; + optional uint32 fbExperimentID = 3; + optional uint32 linkMediaDuration = 4; + optional SocialMediaPostType socialMediaPostType = 5; + optional bool linkInlineVideoMuted = 6; + optional string videoContentURL = 7; + optional EmbeddedMusic musicMetadata = 8; + optional string videoContentCaption = 9; +} + +message PaymentLinkMetadata { + message PaymentLinkHeader { + enum PaymentLinkHeaderType { + LINK_PREVIEW = 0; + ORDER = 1; + } + + optional PaymentLinkHeaderType headerType = 1; + } + + message PaymentLinkProvider { + optional string paramsJSON = 1; + } + + message PaymentLinkButton { + optional string displayText = 1; + } + + optional PaymentLinkButton button = 1; + optional PaymentLinkHeader header = 2; + optional PaymentLinkProvider provider = 3; +} + +message StatusNotificationMessage { + enum StatusNotificationType { + UNKNOWN = 0; + STATUS_ADD_YOURS = 1; + STATUS_RESHARE = 2; + STATUS_QUESTION_ANSWER_RESHARE = 3; + } + + optional WACommon.MessageKey responseMessageKey = 1; + optional WACommon.MessageKey originalMessageKey = 2; + optional StatusNotificationType type = 3; } message InvoiceMessage { @@ -793,6 +1070,7 @@ message ImageMessage { USER_IMAGE = 0; AI_GENERATED = 1; AI_MODIFIED = 2; + RASTERIZED_TEXT_STATUS = 3; } optional string URL = 1; @@ -824,9 +1102,84 @@ message ImageMessage { repeated InteractiveAnnotation annotations = 30; optional ImageSourceType imageSourceType = 31; optional string accessibilityLabel = 32; + optional string qrURL = 34; } message ContextInfo { + enum QuotedType { + EXPLICIT = 0; + AUTO = 1; + } + + enum ForwardOrigin { + UNKNOWN = 0; + CHAT = 1; + STATUS = 2; + CHANNELS = 3; + META_AI = 4; + UGC = 5; + } + + enum StatusSourceType { + IMAGE = 0; + VIDEO = 1; + GIF = 2; + AUDIO = 3; + TEXT = 4; + MUSIC_STANDALONE = 5; + } + + enum PairedMediaType { + NOT_PAIRED_MEDIA = 0; + SD_VIDEO_PARENT = 1; + HD_VIDEO_CHILD = 2; + SD_IMAGE_PARENT = 3; + HD_IMAGE_CHILD = 4; + MOTION_PHOTO_PARENT = 5; + MOTION_PHOTO_CHILD = 6; + HEVC_VIDEO_PARENT = 7; + HEVC_VIDEO_CHILD = 8; + } + + enum StatusAttributionType { + NONE = 0; + RESHARED_FROM_MENTION = 1; + RESHARED_FROM_POST = 2; + RESHARED_FROM_POST_MANY_TIMES = 3; + FORWARDED_FROM_STATUS = 4; + } + + message StatusAudienceMetadata { + enum AudienceType { + UNKNOWN = 0; + CLOSE_FRIENDS = 1; + } + + optional AudienceType audienceType = 1; + optional string listName = 2; + optional string listEmoji = 3; + } + + message DataSharingContext { + enum DataSharingFlags { + SHOW_MM_DISCLOSURE_ON_CLICK = 1; + SHOW_MM_DISCLOSURE_ON_READ = 2; + } + + message Parameters { + optional string key = 1; + optional string stringData = 2; + optional int64 intData = 3; + optional float floatData = 4; + optional Parameters contents = 5; + } + + optional bool showMmDisclosure = 1; + optional string encryptedSignalTokenConsented = 2; + repeated Parameters parameters = 3; + optional int32 dataSharingFlags = 4; + } + message ForwardedNewsletterMessageInfo { enum ContentType { UPDATE = 1; @@ -839,9 +1192,15 @@ message ContextInfo { optional string newsletterName = 3; optional ContentType contentType = 4; optional string accessibilityText = 5; + optional string profileName = 6; } message ExternalAdReplyInfo { + enum AdType { + CTWA = 0; + CAWC = 1; + } + enum MediaType { NONE = 0; IMAGE = 1; @@ -864,6 +1223,17 @@ message ContextInfo { optional string ref = 14; optional bool clickToWhatsappCall = 15; optional bool adContextPreviewDismissed = 16; + optional string sourceApp = 17; + optional bool automatedGreetingMessageShown = 18; + optional string greetingMessageBody = 19; + optional string ctaPayload = 20; + optional bool disableNudge = 21; + optional string originalImageURL = 22; + optional string automatedGreetingMessageCtaType = 23; + optional bool wtwaAdFormat = 24; + optional AdType adType = 25; + optional string wtwaWebsiteURL = 26; + optional string adPreviewURL = 27; } message AdReplyInfo { @@ -879,24 +1249,22 @@ message ContextInfo { optional string caption = 17; } + message PartiallySelectedContent { + optional string text = 1; + } + message FeatureEligibilities { optional bool cannotBeReactedTo = 1; optional bool cannotBeRanked = 2; optional bool canRequestFeedback = 3; + optional bool canBeReshared = 4; + optional bool canReceiveMultiReact = 5; } - message DataSharingContext { - message Parameters { - optional string key = 1; - optional string stringData = 2; - optional int64 intData = 3; - optional float floatData = 4; - optional Parameters contents = 5; - } - - optional bool showMmDisclosure = 1; - optional string encryptedSignalTokenConsented = 2; - repeated Parameters parameters = 3; + message QuestionReplyQuotedMessage { + optional int32 serverQuestionID = 1; + optional Message quotedQuestion = 2; + optional Message quotedResponse = 3; } message UTMInfo { @@ -945,84 +1313,27 @@ message ContextInfo { optional FeatureEligibilities featureEligibilities = 49; optional string entryPointConversionExternalSource = 50; optional string entryPointConversionExternalMedium = 51; -} - -message BotPluginMetadata { - enum PluginType { - REELS = 1; - SEARCH = 2; - } - - enum SearchProvider { - BING = 1; - GOOGLE = 2; - } - - optional SearchProvider provider = 1; - optional PluginType pluginType = 2; - optional string thumbnailCDNURL = 3; - optional string profilePhotoCDNURL = 4; - optional string searchProviderURL = 5; - optional uint32 referenceIndex = 6; - optional uint32 expectedLinksCount = 7; - optional string searchQuery = 9; - optional WACommon.MessageKey parentPluginMessageKey = 10; - optional PluginType deprecatedField = 11; - optional PluginType parentPluginType = 12; -} - -message BotMediaMetadata { - enum OrientationType { - CENTER = 1; - LEFT = 2; - RIGHT = 3; - } - - optional string fileSHA256 = 1; - optional string mediaKey = 2; - optional string fileEncSHA256 = 3; - optional string directPath = 4; - optional int64 mediaKeyTimestamp = 5; - optional string mimetype = 6; - optional OrientationType orientationType = 7; -} - -message BotReminderMetadata { - enum ReminderFrequency { - ONCE = 1; - DAILY = 2; - WEEKLY = 3; - BIWEEKLY = 4; - MONTHLY = 5; - } - - enum ReminderAction { - NOTIFY = 1; - CREATE = 2; - DELETE = 3; - UPDATE = 4; - } - - optional WACommon.MessageKey requestMessageKey = 1; - optional ReminderAction action = 2; - optional string name = 3; - optional uint64 nextTriggerTimestamp = 4; - optional ReminderFrequency frequency = 5; -} - -message BotModelMetadata { - enum PremiumModelStatus { - AVAILABLE = 1; - QUOTA_EXCEED_LIMIT = 2; - } - - enum ModelType { - LLAMA_PROD = 1; - LLAMA_PROD_PREMIUM = 2; - } - - optional ModelType modelType = 1; - optional PremiumModelStatus premiumModelStatus = 2; + optional string ctwaSignals = 54; + optional bytes ctwaPayload = 55; + optional WAWebProtobufsAICommon.ForwardedAIBotMessageInfo forwardedAiBotMessageInfo = 56; + optional StatusAttributionType statusAttributionType = 57; + optional UrlTrackingMap urlTrackingMap = 58; + optional PairedMediaType pairedMediaType = 59; + optional uint32 rankingVersion = 60; + optional MemberLabel memberLabel = 62; + optional bool isQuestion = 63; + optional StatusSourceType statusSourceType = 64; + repeated WAStatusAttributions.StatusAttribution statusAttributions = 65; + optional bool isGroupStatus = 66; + optional ForwardOrigin forwardOrigin = 67; + optional QuestionReplyQuotedMessage questionReplyQuotedMessage = 68; + optional StatusAudienceMetadata statusAudienceMetadata = 69; + optional uint32 nonJIDMentions = 70; + optional QuotedType quotedType = 71; + optional WAWebProtobufsAICommon.BotMessageSharingInfo botMessageSharingInfo = 72; + optional bool isSpoiler = 73; + optional MediaDomainInfo mediaDomainInfo = 74; + optional PartiallySelectedContent partiallySelectedContent = 75; } message MessageAssociation { @@ -1032,10 +1343,37 @@ message MessageAssociation { BOT_PLUGIN = 2; EVENT_COVER_IMAGE = 3; STATUS_POLL = 4; + HD_VIDEO_DUAL_UPLOAD = 5; + STATUS_EXTERNAL_RESHARE = 6; + MEDIA_POLL = 7; + STATUS_ADD_YOURS = 8; + STATUS_NOTIFICATION = 9; + HD_IMAGE_DUAL_UPLOAD = 10; + STICKER_ANNOTATION = 11; + MOTION_PHOTO = 12; + STATUS_LINK_ACTION = 13; + VIEW_ALL_REPLIES = 14; + STATUS_ADD_YOURS_AI_IMAGINE = 15; + STATUS_QUESTION = 16; + STATUS_ADD_YOURS_DIWALI = 17; + STATUS_REACTION = 18; + HEVC_VIDEO_DUAL_UPLOAD = 19; } optional AssociationType associationType = 1; optional WACommon.MessageKey parentMessageKey = 2; + optional int32 messageIndex = 3; +} + +message ThreadID { + enum ThreadType { + UNKNOWN = 0; + VIEW_REPLIES = 1; + AI_THREAD = 2; + } + + optional ThreadType threadType = 1; + optional WACommon.MessageKey threadKey = 2; } message MessageContextInfo { @@ -1050,12 +1388,36 @@ message MessageContextInfo { optional bytes paddingBytes = 4; optional uint32 messageAddOnDurationInSecs = 5; optional bytes botMessageSecret = 6; - optional BotMetadata botMetadata = 7; + optional WAWebProtobufsAICommon.BotMetadata botMetadata = 7; optional int32 reportingTokenVersion = 8; optional MessageAddonExpiryType messageAddOnExpiryType = 9; optional MessageAssociation messageAssociation = 10; optional bool capiCreatedGroup = 11; optional string supportPayload = 12; + optional WACommon.LimitSharing limitSharing = 13; + optional WACommon.LimitSharing limitSharingV2 = 14; + repeated ThreadID threadID = 15; + optional WebLinkRenderConfig weblinkRenderConfig = 16; +} + +message InteractiveAnnotation { + enum StatusLinkType { + RASTERIZED_LINK_PREVIEW = 1; + RASTERIZED_LINK_TRUNCATED = 2; + RASTERIZED_LINK_FULL_URL = 3; + } + + oneof action { + Location location = 2; + ContextInfo.ForwardedNewsletterMessageInfo newsletter = 3; + bool embeddedAction = 6; + TapLinkAction tapAction = 7; + } + + repeated Point polygonVertices = 1; + optional bool shouldSkipConfirmation = 4; + optional EmbeddedContent embeddedContent = 5; + optional StatusLinkType statusLinkType = 8; } message HydratedTemplateButton { @@ -1232,53 +1594,61 @@ message Message { optional StickerPackMessage stickerPackMessage = 86; optional FutureProofMessage statusMentionMessage = 87; optional PollResultSnapshotMessage pollResultSnapshotMessage = 88; + optional FutureProofMessage pollCreationOptionImageMessage = 90; + optional FutureProofMessage associatedChildMessage = 91; + optional FutureProofMessage groupStatusMentionMessage = 92; + optional FutureProofMessage pollCreationMessageV4 = 93; + optional FutureProofMessage statusAddYours = 95; + optional FutureProofMessage groupStatusMessage = 96; + optional AIRichResponseMessage richResponseMessage = 97; + optional StatusNotificationMessage statusNotificationMessage = 98; + optional FutureProofMessage limitSharingMessage = 99; + optional FutureProofMessage botTaskMessage = 100; + optional FutureProofMessage questionMessage = 101; + optional MessageHistoryNotice messageHistoryNotice = 102; + optional FutureProofMessage groupStatusMessageV2 = 103; + optional FutureProofMessage botForwardedMessage = 104; + optional StatusQuestionAnswerMessage statusQuestionAnswerMessage = 105; + optional FutureProofMessage questionReplyMessage = 106; + optional QuestionResponseMessage questionResponseMessage = 107; + optional StatusQuotedMessage statusQuotedMessage = 109; + optional StatusStickerInteractionMessage statusStickerInteractionMessage = 110; + optional PollCreationMessage pollCreationMessageV5 = 111; + optional NewsletterFollowerInviteMessage newsletterFollowerInviteMessageV2 = 113; + optional PollResultSnapshotMessage pollResultSnapshotMessageV3 = 115; + optional FutureProofMessage newsletterAdminProfileMessage = 116; + optional FutureProofMessage newsletterAdminProfileMessageV2 = 117; + optional FutureProofMessage spoilerMessage = 118; + optional FutureProofMessage pollCreationMessageV6 = 119; } -message StickerPackMessage { - message Sticker { - optional string fileName = 1; - optional bool isAnimated = 2; - repeated string emojis = 3; - optional string accessibilityLabel = 4; - optional bool isLottie = 5; - optional string mimetype = 6; - } +message AlbumMessage { + optional uint32 expectedImageCount = 2; + optional uint32 expectedVideoCount = 3; + optional ContextInfo contextInfo = 17; +} - optional string stickerPackID = 1; - optional string name = 2; - optional string publisher = 3; - repeated Sticker stickers = 4; - optional uint64 fileSize = 5; - optional bytes fileSHA256 = 6; - optional bytes fileEncSHA256 = 7; - optional bytes mediaKey = 8; - optional string directPath = 9; - optional string caption = 10; - optional ContextInfo contextInfo = 11; - optional string packDescription = 12; - optional int64 mediaKeyTimestamp = 13; - optional string trayIconFileName = 14; - optional string thumbnailDirectPath = 15; - optional bytes thumbnailSHA256 = 16; - optional bytes thumbnailEncSHA256 = 17; - optional uint32 thumbnailHeight = 18; - optional uint32 thumbnailWidth = 19; +message MessageHistoryMetadata { + repeated string historyReceivers = 1; + optional int64 oldestMessageTimestamp = 2; + optional int64 messageCount = 3; + repeated string nonHistoryReceivers = 4; } -message AlbumMessage { - optional string caption = 1; - optional ContextInfo contextInfo = 17; +message MessageHistoryNotice { + optional ContextInfo contextInfo = 1; + optional MessageHistoryMetadata messageHistoryMetadata = 2; } message MessageHistoryBundle { - optional string mimetype = 2; - optional bytes fileSHA256 = 3; - optional bytes mediaKey = 5; - optional bytes fileEncSHA256 = 6; - optional string directPath = 7; - optional int64 mediaKeyTimestamp = 8; - optional ContextInfo contextInfo = 9; - repeated string participants = 10; + optional string mimetype = 1; + optional bytes fileSHA256 = 2; + optional bytes mediaKey = 3; + optional bytes fileEncSHA256 = 4; + optional string directPath = 5; + optional int64 mediaKeyTimestamp = 6; + optional ContextInfo contextInfo = 7; + optional MessageHistoryMetadata messageHistoryMetadata = 8; } message EncEventResponseMessage { @@ -1297,6 +1667,9 @@ message EventMessage { optional int64 startTime = 7; optional int64 endTime = 8; optional bool extraGuestsAllowed = 9; + optional bool isScheduleCall = 10; + optional bool hasReminder = 11; + optional int64 reminderOffsetSec = 12; } message CommentMessage { @@ -1322,6 +1695,16 @@ message KeepInChatMessage { optional int64 timestampMS = 3; } +message QuestionResponseMessage { + optional WACommon.MessageKey key = 1; + optional string text = 2; +} + +message StatusQuestionAnswerMessage { + optional WACommon.MessageKey key = 1; + optional string text = 2; +} + message PollResultSnapshotMessage { message PollVote { optional string optionName = 1; @@ -1331,6 +1714,7 @@ message PollResultSnapshotMessage { optional string name = 1; repeated PollVote pollVotes = 2; optional ContextInfo contextInfo = 3; + optional PollType pollType = 4; } message PollVoteMessage { @@ -1355,6 +1739,7 @@ message PollUpdateMessage { message PollCreationMessage { message Option { optional string optionName = 1; + optional string optionHash = 2; } optional bytes encKey = 1; @@ -1362,6 +1747,11 @@ message PollCreationMessage { repeated Option options = 3; optional uint32 selectableOptionsCount = 4; optional ContextInfo contextInfo = 5; + optional PollContentType pollContentType = 6; + optional PollType pollType = 7; + optional Option correctAnswer = 8; + optional int64 endTime = 9; + optional bool hideParticipantName = 10; } message StickerSyncRMRMessage { @@ -1391,6 +1781,14 @@ message RequestPhoneNumberMessage { optional ContextInfo contextInfo = 1; } +message NewsletterFollowerInviteMessage { + optional string newsletterJID = 1; + optional string newsletterName = 2; + optional bytes JPEGThumbnail = 3; + optional string caption = 4; + optional ContextInfo contextInfo = 5; +} + message NewsletterAdminInviteMessage { optional string newsletterJID = 1; optional string newsletterName = 2; @@ -1413,6 +1811,7 @@ message ProductMessage { optional uint32 productImageCount = 9; optional string firstImageID = 11; optional int64 salePriceAmount1000 = 12; + optional string signedURL = 13; } message CatalogSnapshot { @@ -1500,6 +1899,7 @@ message StickerMessage { optional bool isAiSticker = 20; optional bool isLottie = 21; optional string accessibilityLabel = 22; + optional int32 premium = 24; } message LiveLocationMessage { @@ -1537,6 +1937,7 @@ message SendPaymentMessage { optional Message noteMessage = 2; optional WACommon.MessageKey requestMessageKey = 3; optional PaymentBackground background = 4; + optional string transactionData = 5; } message ContactsArrayMessage { @@ -1549,43 +1950,15 @@ message InitialSecurityNotificationSettingSync { optional bool securityNotificationEnabled = 1; } -message PeerDataOperationRequestMessage { - message PlaceholderMessageResendRequest { - optional WACommon.MessageKey messageKey = 1; - } - - message FullHistorySyncOnDemandRequest { - optional FullHistorySyncOnDemandRequestMetadata requestMetadata = 1; - optional WAWebProtobufsCompanionReg.DeviceProps.HistorySyncConfig historySyncConfig = 2; - } - - message HistorySyncOnDemandRequest { - optional string chatJID = 1; - optional string oldestMsgID = 2; - optional bool oldestMsgFromMe = 3; - optional int32 onDemandMsgCount = 4; - optional int64 oldestMsgTimestampMS = 5; - } - - message RequestUrlPreview { - optional string URL = 1; - optional bool includeHqThumbnail = 2; - } - - message RequestStickerReupload { - optional string fileSHA256 = 1; - } - - optional PeerDataOperationRequestType peerDataOperationRequestType = 1; - repeated RequestStickerReupload requestStickerReupload = 2; - repeated RequestUrlPreview requestURLPreview = 3; - optional HistorySyncOnDemandRequest historySyncOnDemandRequest = 4; - repeated PlaceholderMessageResendRequest placeholderMessageResendRequest = 5; - optional FullHistorySyncOnDemandRequest fullHistorySyncOnDemandRequest = 6; +message FullHistorySyncOnDemandConfig { + optional uint64 historyFromTimestamp = 1; + optional uint32 historyDurationDays = 2; } message FullHistorySyncOnDemandRequestMetadata { optional string requestID = 1; + optional string businessProduct = 2; + optional bytes opaqueClientData = 3; } message AppStateFatalExceptionNotification { @@ -1622,6 +1995,28 @@ message AppStateSyncKey { optional AppStateSyncKeyData keyData = 2; } +message HistorySyncNotification { + optional bytes fileSHA256 = 1; + optional uint64 fileLength = 2; + optional bytes mediaKey = 3; + optional bytes fileEncSHA256 = 4; + optional string directPath = 5; + optional HistorySyncType syncType = 6; + optional uint32 chunkOrder = 7; + optional string originalMessageID = 8; + optional uint32 progress = 9; + optional int64 oldestMsgInChunkTimestampSec = 10; + optional bytes initialHistBootstrapInlinePayload = 11; + optional string peerDataRequestSessionID = 12; + optional FullHistorySyncOnDemandRequestMetadata fullHistorySyncOnDemandRequestMetadata = 13; + optional string encHandle = 14; + optional HistorySyncMessageAccessStatus messageAccessStatus = 15; +} + +message HistorySyncMessageAccessStatus { + optional bool completeAccessGranted = 1; +} + message Chat { optional string displayName = 1; optional string ID = 2; @@ -1632,6 +2027,13 @@ message Call { optional string conversionSource = 2; optional bytes conversionData = 3; optional uint32 conversionDelaySeconds = 4; + optional string ctwaSignals = 5; + optional bytes ctwaPayload = 6; + optional ContextInfo contextInfo = 7; + optional string nativeFlowCallButtonPayload = 8; + optional string deeplinkPayload = 9; + optional MessageContextInfo messageContextInfo = 10; + optional uint32 callEntryPoint = 11; } message AudioMessage { @@ -1677,6 +2079,25 @@ message DocumentMessage { optional string accessibilityLabel = 21; } +message URLMetadata { + optional uint32 fbExperimentID = 1; +} + +message PaymentExtendedMetadata { + optional uint32 type = 1; + optional string platform = 2; +} + +message MMSThumbnailMetadata { + optional string thumbnailDirectPath = 1; + optional bytes thumbnailSHA256 = 2; + optional bytes thumbnailEncSHA256 = 3; + optional bytes mediaKey = 4; + optional int64 mediaKeyTimestamp = 5; + optional uint32 thumbnailHeight = 6; + optional uint32 thumbnailWidth = 7; +} + message LocationMessage { optional double degreesLatitude = 1; optional double degreesLongitude = 2; @@ -1696,6 +2117,7 @@ message ContactMessage { optional string displayName = 1; optional string vcard = 16; optional ContextInfo contextInfo = 17; + optional bool isSelfContact = 18; } message SenderKeyDistributionMessage { @@ -1703,39 +2125,16 @@ message SenderKeyDistributionMessage { optional bytes axolotlSenderKeyDistributionMessage = 2; } -message BotAvatarMetadata { - optional uint32 sentiment = 1; - optional string behaviorGraph = 2; - optional uint32 action = 3; - optional uint32 intensity = 4; - optional uint32 wordCount = 5; +message VideoEndCard { + required string username = 1; + required string caption = 2; + required string thumbnailImageURL = 3; + required string profilePictureURL = 4; } -message BotSuggestedPromptMetadata { - repeated string suggestedPrompts = 1; - optional uint32 selectedPromptIndex = 2; -} - -message BotSessionMetadata { - optional string sessionID = 1; - optional SessionSource sessionSource = 2; -} - -message BotMemuMetadata { - repeated BotMediaMetadata faceImages = 1; -} - -message BotMetadata { - optional BotAvatarMetadata avatarMetadata = 1; - optional string personaID = 2; - optional BotPluginMetadata pluginMetadata = 3; - optional BotSuggestedPromptMetadata suggestedPromptMetadata = 4; - optional string invokerJID = 5; - optional BotSessionMetadata searchMetadata = 6; - optional BotMemuMetadata memuMetadata = 7; - optional string timezone = 8; - optional BotReminderMetadata reminderMetadata = 9; - optional BotModelMetadata modelMetadata = 10; +message MediaDomainInfo { + optional MediaKeyDomain mediaKeyDomain = 1; + optional bytes e2EeMediaKey = 2; } message DeviceListMetadata { @@ -1764,6 +2163,11 @@ message EmbeddedMusic { optional bytes artworkEncSHA256 = 7; optional string artistAttribution = 8; optional bytes countryBlocklist = 9; + optional bool isExplicit = 10; + optional bytes artworkMediaKey = 11; + optional int64 musicSongStartTimeInMS = 12; + optional int64 derivedContentStartTimeInMS = 13; + optional int64 overlapDurationInMS = 14; } message EmbeddedContent { @@ -1773,16 +2177,9 @@ message EmbeddedContent { } } -message InteractiveAnnotation { - oneof action { - Location location = 2; - ContextInfo.ForwardedNewsletterMessageInfo newsletter = 3; - bool embeddedAction = 6; - } - - repeated Point polygonVertices = 1; - optional bool shouldSkipConfirmation = 4; - optional EmbeddedContent embeddedContent = 5; +message TapLinkAction { + optional string title = 1; + optional string tapURL = 2; } message Point { @@ -1854,3 +2251,32 @@ message MediaNotifyMessage { message LIDMigrationMappingSyncMessage { optional bytes encodedMappingPayload = 1; } + +message UrlTrackingMap { + message UrlTrackingMapElement { + optional string originalURL = 1; + optional string unconsentedUsersURL = 2; + optional string consentedUsersURL = 3; + optional uint32 cardIndex = 4; + } + + repeated UrlTrackingMapElement urlTrackingMapElements = 1; +} + +message MemberLabel { + optional string label = 1; + optional int64 labelTimestamp = 2; +} + +message AIRichResponseMessage { + optional WAWebProtobufsAICommon.AIRichResponseMessageType messageType = 1; + repeated WAWebProtobufsAICommon.AIRichResponseSubMessage submessages = 2; + optional WAWebProtobufsAICommon.AIRichResponseUnifiedResponse unifiedResponse = 3; + optional ContextInfo contextInfo = 4; +} + +message AIQueryFanout { + optional WACommon.MessageKey messageKey = 1; + optional Message message = 2; + optional int64 timestamp = 3; +} diff --git a/vendor/go.mau.fi/whatsmeow/proto/waE2E/legacy.go b/vendor/go.mau.fi/whatsmeow/proto/waE2E/legacy.go deleted file mode 100644 index c5af65f167..0000000000 --- a/vendor/go.mau.fi/whatsmeow/proto/waE2E/legacy.go +++ /dev/null @@ -1,31 +0,0 @@ -package waE2E - -// Deprecated: Use GetKeyID -func (x *AppStateSyncKey) GetKeyId() *AppStateSyncKeyId { - return x.GetKeyID() -} - -// Deprecated: Use GetKeyID -func (x *AppStateSyncKeyId) GetKeyId() []byte { - return x.GetKeyID() -} - -// Deprecated: Use GetStanzaID -func (x *PeerDataOperationRequestResponseMessage) GetStanzaId() string { - return x.GetStanzaID() -} - -// Deprecated: Use GetMentionedJID -func (x *ContextInfo) GetMentionedJid() []string { - return x.GetMentionedJID() -} - -// Deprecated: Use GetRemoteJID -func (x *ContextInfo) GetRemoteJid() string { - return x.GetRemoteJID() -} - -// Deprecated: Use GetStanzaID -func (x *ContextInfo) GetStanzaId() string { - return x.GetStanzaID() -} diff --git a/vendor/go.mau.fi/whatsmeow/proto/waEphemeral/WAWebProtobufsEphemeral.pb.go b/vendor/go.mau.fi/whatsmeow/proto/waEphemeral/WAWebProtobufsEphemeral.pb.go index 2529771933..ee6916a65e 100644 --- a/vendor/go.mau.fi/whatsmeow/proto/waEphemeral/WAWebProtobufsEphemeral.pb.go +++ b/vendor/go.mau.fi/whatsmeow/proto/waEphemeral/WAWebProtobufsEphemeral.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 +// protoc-gen-go v1.36.10 // protoc v3.21.12 // source: waEphemeral/WAWebProtobufsEphemeral.proto @@ -9,11 +9,10 @@ package waEphemeral import ( reflect "reflect" sync "sync" + unsafe "unsafe" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" - - _ "embed" ) const ( @@ -24,21 +23,18 @@ const ( ) type EphemeralSetting struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Duration *int32 `protobuf:"fixed32,1,opt,name=duration" json:"duration,omitempty"` + Timestamp *int64 `protobuf:"fixed64,2,opt,name=timestamp" json:"timestamp,omitempty"` unknownFields protoimpl.UnknownFields - - Duration *int32 `protobuf:"fixed32,1,opt,name=duration" json:"duration,omitempty"` - Timestamp *int64 `protobuf:"fixed64,2,opt,name=timestamp" json:"timestamp,omitempty"` + sizeCache protoimpl.SizeCache } func (x *EphemeralSetting) Reset() { *x = EphemeralSetting{} - if protoimpl.UnsafeEnabled { - mi := &file_waEphemeral_WAWebProtobufsEphemeral_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waEphemeral_WAWebProtobufsEphemeral_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *EphemeralSetting) String() string { @@ -49,7 +45,7 @@ func (*EphemeralSetting) ProtoMessage() {} func (x *EphemeralSetting) ProtoReflect() protoreflect.Message { mi := &file_waEphemeral_WAWebProtobufsEphemeral_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -80,17 +76,21 @@ func (x *EphemeralSetting) GetTimestamp() int64 { var File_waEphemeral_WAWebProtobufsEphemeral_proto protoreflect.FileDescriptor -//go:embed WAWebProtobufsEphemeral.pb.raw -var file_waEphemeral_WAWebProtobufsEphemeral_proto_rawDesc []byte +const file_waEphemeral_WAWebProtobufsEphemeral_proto_rawDesc = "" + + "\n" + + ")waEphemeral/WAWebProtobufsEphemeral.proto\x12\x17WAWebProtobufsEphemeral\"L\n" + + "\x10EphemeralSetting\x12\x1a\n" + + "\bduration\x18\x01 \x01(\x0fR\bduration\x12\x1c\n" + + "\ttimestamp\x18\x02 \x01(\x10R\ttimestampB'Z%go.mau.fi/whatsmeow/proto/waEphemeral" var ( file_waEphemeral_WAWebProtobufsEphemeral_proto_rawDescOnce sync.Once - file_waEphemeral_WAWebProtobufsEphemeral_proto_rawDescData = file_waEphemeral_WAWebProtobufsEphemeral_proto_rawDesc + file_waEphemeral_WAWebProtobufsEphemeral_proto_rawDescData []byte ) func file_waEphemeral_WAWebProtobufsEphemeral_proto_rawDescGZIP() []byte { file_waEphemeral_WAWebProtobufsEphemeral_proto_rawDescOnce.Do(func() { - file_waEphemeral_WAWebProtobufsEphemeral_proto_rawDescData = protoimpl.X.CompressGZIP(file_waEphemeral_WAWebProtobufsEphemeral_proto_rawDescData) + file_waEphemeral_WAWebProtobufsEphemeral_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_waEphemeral_WAWebProtobufsEphemeral_proto_rawDesc), len(file_waEphemeral_WAWebProtobufsEphemeral_proto_rawDesc))) }) return file_waEphemeral_WAWebProtobufsEphemeral_proto_rawDescData } @@ -112,25 +112,11 @@ func file_waEphemeral_WAWebProtobufsEphemeral_proto_init() { if File_waEphemeral_WAWebProtobufsEphemeral_proto != nil { return } - if !protoimpl.UnsafeEnabled { - file_waEphemeral_WAWebProtobufsEphemeral_proto_msgTypes[0].Exporter = func(v any, i int) any { - switch v := v.(*EphemeralSetting); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_waEphemeral_WAWebProtobufsEphemeral_proto_rawDesc, + RawDescriptor: unsafe.Slice(unsafe.StringData(file_waEphemeral_WAWebProtobufsEphemeral_proto_rawDesc), len(file_waEphemeral_WAWebProtobufsEphemeral_proto_rawDesc)), NumEnums: 0, NumMessages: 1, NumExtensions: 0, @@ -141,7 +127,6 @@ func file_waEphemeral_WAWebProtobufsEphemeral_proto_init() { MessageInfos: file_waEphemeral_WAWebProtobufsEphemeral_proto_msgTypes, }.Build() File_waEphemeral_WAWebProtobufsEphemeral_proto = out.File - file_waEphemeral_WAWebProtobufsEphemeral_proto_rawDesc = nil file_waEphemeral_WAWebProtobufsEphemeral_proto_goTypes = nil file_waEphemeral_WAWebProtobufsEphemeral_proto_depIdxs = nil } diff --git a/vendor/go.mau.fi/whatsmeow/proto/waEphemeral/WAWebProtobufsEphemeral.pb.raw b/vendor/go.mau.fi/whatsmeow/proto/waEphemeral/WAWebProtobufsEphemeral.pb.raw deleted file mode 100644 index 851ffd9b63..0000000000 --- a/vendor/go.mau.fi/whatsmeow/proto/waEphemeral/WAWebProtobufsEphemeral.pb.raw +++ /dev/null @@ -1,5 +0,0 @@ - -)waEphemeral/WAWebProtobufsEphemeral.protoWAWebProtobufsEphemeral"L -EphemeralSetting -duration (Rduration - timestamp (R timestampB'Z%go.mau.fi/whatsmeow/proto/waEphemeral \ No newline at end of file diff --git a/vendor/go.mau.fi/whatsmeow/proto/waHistorySync/WAWebProtobufsHistorySync.pb.go b/vendor/go.mau.fi/whatsmeow/proto/waHistorySync/WAWebProtobufsHistorySync.pb.go index debd7bdfd1..bac1528de9 100644 --- a/vendor/go.mau.fi/whatsmeow/proto/waHistorySync/WAWebProtobufsHistorySync.pb.go +++ b/vendor/go.mau.fi/whatsmeow/proto/waHistorySync/WAWebProtobufsHistorySync.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 +// protoc-gen-go v1.36.10 // protoc v3.21.12 // source: waHistorySync/WAWebProtobufsHistorySync.proto @@ -9,15 +9,16 @@ package waHistorySync import ( reflect "reflect" sync "sync" + unsafe "unsafe" + + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" waChatLockSettings "go.mau.fi/whatsmeow/proto/waChatLockSettings" + waCommon "go.mau.fi/whatsmeow/proto/waCommon" waE2E "go.mau.fi/whatsmeow/proto/waE2E" waSyncAction "go.mau.fi/whatsmeow/proto/waSyncAction" waWeb "go.mau.fi/whatsmeow/proto/waWeb" - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - - _ "embed" ) const ( @@ -275,9 +276,10 @@ func (HistorySync_HistorySyncType) EnumDescriptor() ([]byte, []int) { type Conversation_EndOfHistoryTransferType int32 const ( - Conversation_COMPLETE_BUT_MORE_MESSAGES_REMAIN_ON_PRIMARY Conversation_EndOfHistoryTransferType = 0 - Conversation_COMPLETE_AND_NO_MORE_MESSAGE_REMAIN_ON_PRIMARY Conversation_EndOfHistoryTransferType = 1 - Conversation_COMPLETE_ON_DEMAND_SYNC_BUT_MORE_MSG_REMAIN_ON_PRIMARY Conversation_EndOfHistoryTransferType = 2 + Conversation_COMPLETE_BUT_MORE_MESSAGES_REMAIN_ON_PRIMARY Conversation_EndOfHistoryTransferType = 0 + Conversation_COMPLETE_AND_NO_MORE_MESSAGE_REMAIN_ON_PRIMARY Conversation_EndOfHistoryTransferType = 1 + Conversation_COMPLETE_ON_DEMAND_SYNC_BUT_MORE_MSG_REMAIN_ON_PRIMARY Conversation_EndOfHistoryTransferType = 2 + Conversation_COMPLETE_ON_DEMAND_SYNC_WITH_MORE_MSG_ON_PRIMARY_BUT_NO_ACCESS Conversation_EndOfHistoryTransferType = 3 ) // Enum value maps for Conversation_EndOfHistoryTransferType. @@ -286,11 +288,13 @@ var ( 0: "COMPLETE_BUT_MORE_MESSAGES_REMAIN_ON_PRIMARY", 1: "COMPLETE_AND_NO_MORE_MESSAGE_REMAIN_ON_PRIMARY", 2: "COMPLETE_ON_DEMAND_SYNC_BUT_MORE_MSG_REMAIN_ON_PRIMARY", + 3: "COMPLETE_ON_DEMAND_SYNC_WITH_MORE_MSG_ON_PRIMARY_BUT_NO_ACCESS", } Conversation_EndOfHistoryTransferType_value = map[string]int32{ - "COMPLETE_BUT_MORE_MESSAGES_REMAIN_ON_PRIMARY": 0, - "COMPLETE_AND_NO_MORE_MESSAGE_REMAIN_ON_PRIMARY": 1, - "COMPLETE_ON_DEMAND_SYNC_BUT_MORE_MSG_REMAIN_ON_PRIMARY": 2, + "COMPLETE_BUT_MORE_MESSAGES_REMAIN_ON_PRIMARY": 0, + "COMPLETE_AND_NO_MORE_MESSAGE_REMAIN_ON_PRIMARY": 1, + "COMPLETE_ON_DEMAND_SYNC_BUT_MORE_MSG_REMAIN_ON_PRIMARY": 2, + "COMPLETE_ON_DEMAND_SYNC_WITH_MORE_MSG_ON_PRIMARY_BUT_NO_ACCESS": 3, } ) @@ -447,34 +451,33 @@ func (PastParticipant_LeaveReason) EnumDescriptor() ([]byte, []int) { } type HistorySync struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - SyncType *HistorySync_HistorySyncType `protobuf:"varint,1,req,name=syncType,enum=WAWebProtobufsHistorySync.HistorySync_HistorySyncType" json:"syncType,omitempty"` - Conversations []*Conversation `protobuf:"bytes,2,rep,name=conversations" json:"conversations,omitempty"` - StatusV3Messages []*waWeb.WebMessageInfo `protobuf:"bytes,3,rep,name=statusV3Messages" json:"statusV3Messages,omitempty"` - ChunkOrder *uint32 `protobuf:"varint,5,opt,name=chunkOrder" json:"chunkOrder,omitempty"` - Progress *uint32 `protobuf:"varint,6,opt,name=progress" json:"progress,omitempty"` - Pushnames []*Pushname `protobuf:"bytes,7,rep,name=pushnames" json:"pushnames,omitempty"` - GlobalSettings *GlobalSettings `protobuf:"bytes,8,opt,name=globalSettings" json:"globalSettings,omitempty"` - ThreadIDUserSecret []byte `protobuf:"bytes,9,opt,name=threadIDUserSecret" json:"threadIDUserSecret,omitempty"` - ThreadDsTimeframeOffset *uint32 `protobuf:"varint,10,opt,name=threadDsTimeframeOffset" json:"threadDsTimeframeOffset,omitempty"` - RecentStickers []*StickerMetadata `protobuf:"bytes,11,rep,name=recentStickers" json:"recentStickers,omitempty"` - PastParticipants []*PastParticipants `protobuf:"bytes,12,rep,name=pastParticipants" json:"pastParticipants,omitempty"` - CallLogRecords []*waSyncAction.CallLogRecord `protobuf:"bytes,13,rep,name=callLogRecords" json:"callLogRecords,omitempty"` - AiWaitListState *HistorySync_BotAIWaitListState `protobuf:"varint,14,opt,name=aiWaitListState,enum=WAWebProtobufsHistorySync.HistorySync_BotAIWaitListState" json:"aiWaitListState,omitempty"` - PhoneNumberToLidMappings []*PhoneNumberToLIDMapping `protobuf:"bytes,15,rep,name=phoneNumberToLidMappings" json:"phoneNumberToLidMappings,omitempty"` - CompanionMetaNonce *string `protobuf:"bytes,16,opt,name=companionMetaNonce" json:"companionMetaNonce,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + SyncType *HistorySync_HistorySyncType `protobuf:"varint,1,req,name=syncType,enum=WAWebProtobufsHistorySync.HistorySync_HistorySyncType" json:"syncType,omitempty"` + Conversations []*Conversation `protobuf:"bytes,2,rep,name=conversations" json:"conversations,omitempty"` + StatusV3Messages []*waWeb.WebMessageInfo `protobuf:"bytes,3,rep,name=statusV3Messages" json:"statusV3Messages,omitempty"` + ChunkOrder *uint32 `protobuf:"varint,5,opt,name=chunkOrder" json:"chunkOrder,omitempty"` + Progress *uint32 `protobuf:"varint,6,opt,name=progress" json:"progress,omitempty"` + Pushnames []*Pushname `protobuf:"bytes,7,rep,name=pushnames" json:"pushnames,omitempty"` + GlobalSettings *GlobalSettings `protobuf:"bytes,8,opt,name=globalSettings" json:"globalSettings,omitempty"` + ThreadIDUserSecret []byte `protobuf:"bytes,9,opt,name=threadIDUserSecret" json:"threadIDUserSecret,omitempty"` + ThreadDsTimeframeOffset *uint32 `protobuf:"varint,10,opt,name=threadDsTimeframeOffset" json:"threadDsTimeframeOffset,omitempty"` + RecentStickers []*StickerMetadata `protobuf:"bytes,11,rep,name=recentStickers" json:"recentStickers,omitempty"` + PastParticipants []*PastParticipants `protobuf:"bytes,12,rep,name=pastParticipants" json:"pastParticipants,omitempty"` + CallLogRecords []*waSyncAction.CallLogRecord `protobuf:"bytes,13,rep,name=callLogRecords" json:"callLogRecords,omitempty"` + AiWaitListState *HistorySync_BotAIWaitListState `protobuf:"varint,14,opt,name=aiWaitListState,enum=WAWebProtobufsHistorySync.HistorySync_BotAIWaitListState" json:"aiWaitListState,omitempty"` + PhoneNumberToLidMappings []*PhoneNumberToLIDMapping `protobuf:"bytes,15,rep,name=phoneNumberToLidMappings" json:"phoneNumberToLidMappings,omitempty"` + CompanionMetaNonce *string `protobuf:"bytes,16,opt,name=companionMetaNonce" json:"companionMetaNonce,omitempty"` + ShareableChatIdentifierEncryptionKey []byte `protobuf:"bytes,17,opt,name=shareableChatIdentifierEncryptionKey" json:"shareableChatIdentifierEncryptionKey,omitempty"` + Accounts []*Account `protobuf:"bytes,18,rep,name=accounts" json:"accounts,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *HistorySync) Reset() { *x = HistorySync{} - if protoimpl.UnsafeEnabled { - mi := &file_waHistorySync_WAWebProtobufsHistorySync_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waHistorySync_WAWebProtobufsHistorySync_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *HistorySync) String() string { @@ -485,7 +488,7 @@ func (*HistorySync) ProtoMessage() {} func (x *HistorySync) ProtoReflect() protoreflect.Message { mi := &file_waHistorySync_WAWebProtobufsHistorySync_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -605,68 +608,85 @@ func (x *HistorySync) GetCompanionMetaNonce() string { return "" } -type Conversation struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +func (x *HistorySync) GetShareableChatIdentifierEncryptionKey() []byte { + if x != nil { + return x.ShareableChatIdentifierEncryptionKey + } + return nil +} - ID *string `protobuf:"bytes,1,req,name=ID" json:"ID,omitempty"` - Messages []*HistorySyncMsg `protobuf:"bytes,2,rep,name=messages" json:"messages,omitempty"` - NewJID *string `protobuf:"bytes,3,opt,name=newJID" json:"newJID,omitempty"` - OldJID *string `protobuf:"bytes,4,opt,name=oldJID" json:"oldJID,omitempty"` - LastMsgTimestamp *uint64 `protobuf:"varint,5,opt,name=lastMsgTimestamp" json:"lastMsgTimestamp,omitempty"` - UnreadCount *uint32 `protobuf:"varint,6,opt,name=unreadCount" json:"unreadCount,omitempty"` - ReadOnly *bool `protobuf:"varint,7,opt,name=readOnly" json:"readOnly,omitempty"` - EndOfHistoryTransfer *bool `protobuf:"varint,8,opt,name=endOfHistoryTransfer" json:"endOfHistoryTransfer,omitempty"` - EphemeralExpiration *uint32 `protobuf:"varint,9,opt,name=ephemeralExpiration" json:"ephemeralExpiration,omitempty"` - EphemeralSettingTimestamp *int64 `protobuf:"varint,10,opt,name=ephemeralSettingTimestamp" json:"ephemeralSettingTimestamp,omitempty"` - EndOfHistoryTransferType *Conversation_EndOfHistoryTransferType `protobuf:"varint,11,opt,name=endOfHistoryTransferType,enum=WAWebProtobufsHistorySync.Conversation_EndOfHistoryTransferType" json:"endOfHistoryTransferType,omitempty"` - ConversationTimestamp *uint64 `protobuf:"varint,12,opt,name=conversationTimestamp" json:"conversationTimestamp,omitempty"` - Name *string `protobuf:"bytes,13,opt,name=name" json:"name,omitempty"` - PHash *string `protobuf:"bytes,14,opt,name=pHash" json:"pHash,omitempty"` - NotSpam *bool `protobuf:"varint,15,opt,name=notSpam" json:"notSpam,omitempty"` - Archived *bool `protobuf:"varint,16,opt,name=archived" json:"archived,omitempty"` - DisappearingMode *waE2E.DisappearingMode `protobuf:"bytes,17,opt,name=disappearingMode" json:"disappearingMode,omitempty"` - UnreadMentionCount *uint32 `protobuf:"varint,18,opt,name=unreadMentionCount" json:"unreadMentionCount,omitempty"` - MarkedAsUnread *bool `protobuf:"varint,19,opt,name=markedAsUnread" json:"markedAsUnread,omitempty"` - Participant []*GroupParticipant `protobuf:"bytes,20,rep,name=participant" json:"participant,omitempty"` - TcToken []byte `protobuf:"bytes,21,opt,name=tcToken" json:"tcToken,omitempty"` - TcTokenTimestamp *uint64 `protobuf:"varint,22,opt,name=tcTokenTimestamp" json:"tcTokenTimestamp,omitempty"` - ContactPrimaryIdentityKey []byte `protobuf:"bytes,23,opt,name=contactPrimaryIdentityKey" json:"contactPrimaryIdentityKey,omitempty"` - Pinned *uint32 `protobuf:"varint,24,opt,name=pinned" json:"pinned,omitempty"` - MuteEndTime *uint64 `protobuf:"varint,25,opt,name=muteEndTime" json:"muteEndTime,omitempty"` - Wallpaper *WallpaperSettings `protobuf:"bytes,26,opt,name=wallpaper" json:"wallpaper,omitempty"` - MediaVisibility *MediaVisibility `protobuf:"varint,27,opt,name=mediaVisibility,enum=WAWebProtobufsHistorySync.MediaVisibility" json:"mediaVisibility,omitempty"` - TcTokenSenderTimestamp *uint64 `protobuf:"varint,28,opt,name=tcTokenSenderTimestamp" json:"tcTokenSenderTimestamp,omitempty"` - Suspended *bool `protobuf:"varint,29,opt,name=suspended" json:"suspended,omitempty"` - Terminated *bool `protobuf:"varint,30,opt,name=terminated" json:"terminated,omitempty"` - CreatedAt *uint64 `protobuf:"varint,31,opt,name=createdAt" json:"createdAt,omitempty"` - CreatedBy *string `protobuf:"bytes,32,opt,name=createdBy" json:"createdBy,omitempty"` - Description *string `protobuf:"bytes,33,opt,name=description" json:"description,omitempty"` - Support *bool `protobuf:"varint,34,opt,name=support" json:"support,omitempty"` - IsParentGroup *bool `protobuf:"varint,35,opt,name=isParentGroup" json:"isParentGroup,omitempty"` - ParentGroupID *string `protobuf:"bytes,37,opt,name=parentGroupID" json:"parentGroupID,omitempty"` - IsDefaultSubgroup *bool `protobuf:"varint,36,opt,name=isDefaultSubgroup" json:"isDefaultSubgroup,omitempty"` - DisplayName *string `protobuf:"bytes,38,opt,name=displayName" json:"displayName,omitempty"` - PnJID *string `protobuf:"bytes,39,opt,name=pnJID" json:"pnJID,omitempty"` - ShareOwnPn *bool `protobuf:"varint,40,opt,name=shareOwnPn" json:"shareOwnPn,omitempty"` - PnhDuplicateLidThread *bool `protobuf:"varint,41,opt,name=pnhDuplicateLidThread" json:"pnhDuplicateLidThread,omitempty"` - LidJID *string `protobuf:"bytes,42,opt,name=lidJID" json:"lidJID,omitempty"` - Username *string `protobuf:"bytes,43,opt,name=username" json:"username,omitempty"` - LidOriginType *string `protobuf:"bytes,44,opt,name=lidOriginType" json:"lidOriginType,omitempty"` - CommentsCount *uint32 `protobuf:"varint,45,opt,name=commentsCount" json:"commentsCount,omitempty"` - Locked *bool `protobuf:"varint,46,opt,name=locked" json:"locked,omitempty"` - SystemMessageToInsert *PrivacySystemMessage `protobuf:"varint,47,opt,name=systemMessageToInsert,enum=WAWebProtobufsHistorySync.PrivacySystemMessage" json:"systemMessageToInsert,omitempty"` - CapiCreatedGroup *bool `protobuf:"varint,48,opt,name=capiCreatedGroup" json:"capiCreatedGroup,omitempty"` +func (x *HistorySync) GetAccounts() []*Account { + if x != nil { + return x.Accounts + } + return nil +} + +type Conversation struct { + state protoimpl.MessageState `protogen:"open.v1"` + ID *string `protobuf:"bytes,1,req,name=ID" json:"ID,omitempty"` + Messages []*HistorySyncMsg `protobuf:"bytes,2,rep,name=messages" json:"messages,omitempty"` + NewJID *string `protobuf:"bytes,3,opt,name=newJID" json:"newJID,omitempty"` + OldJID *string `protobuf:"bytes,4,opt,name=oldJID" json:"oldJID,omitempty"` + LastMsgTimestamp *uint64 `protobuf:"varint,5,opt,name=lastMsgTimestamp" json:"lastMsgTimestamp,omitempty"` + UnreadCount *uint32 `protobuf:"varint,6,opt,name=unreadCount" json:"unreadCount,omitempty"` + ReadOnly *bool `protobuf:"varint,7,opt,name=readOnly" json:"readOnly,omitempty"` + EndOfHistoryTransfer *bool `protobuf:"varint,8,opt,name=endOfHistoryTransfer" json:"endOfHistoryTransfer,omitempty"` + EphemeralExpiration *uint32 `protobuf:"varint,9,opt,name=ephemeralExpiration" json:"ephemeralExpiration,omitempty"` + EphemeralSettingTimestamp *int64 `protobuf:"varint,10,opt,name=ephemeralSettingTimestamp" json:"ephemeralSettingTimestamp,omitempty"` + EndOfHistoryTransferType *Conversation_EndOfHistoryTransferType `protobuf:"varint,11,opt,name=endOfHistoryTransferType,enum=WAWebProtobufsHistorySync.Conversation_EndOfHistoryTransferType" json:"endOfHistoryTransferType,omitempty"` + ConversationTimestamp *uint64 `protobuf:"varint,12,opt,name=conversationTimestamp" json:"conversationTimestamp,omitempty"` + Name *string `protobuf:"bytes,13,opt,name=name" json:"name,omitempty"` + PHash *string `protobuf:"bytes,14,opt,name=pHash" json:"pHash,omitempty"` + NotSpam *bool `protobuf:"varint,15,opt,name=notSpam" json:"notSpam,omitempty"` + Archived *bool `protobuf:"varint,16,opt,name=archived" json:"archived,omitempty"` + DisappearingMode *waE2E.DisappearingMode `protobuf:"bytes,17,opt,name=disappearingMode" json:"disappearingMode,omitempty"` + UnreadMentionCount *uint32 `protobuf:"varint,18,opt,name=unreadMentionCount" json:"unreadMentionCount,omitempty"` + MarkedAsUnread *bool `protobuf:"varint,19,opt,name=markedAsUnread" json:"markedAsUnread,omitempty"` + Participant []*GroupParticipant `protobuf:"bytes,20,rep,name=participant" json:"participant,omitempty"` + TcToken []byte `protobuf:"bytes,21,opt,name=tcToken" json:"tcToken,omitempty"` + TcTokenTimestamp *uint64 `protobuf:"varint,22,opt,name=tcTokenTimestamp" json:"tcTokenTimestamp,omitempty"` + ContactPrimaryIdentityKey []byte `protobuf:"bytes,23,opt,name=contactPrimaryIdentityKey" json:"contactPrimaryIdentityKey,omitempty"` + Pinned *uint32 `protobuf:"varint,24,opt,name=pinned" json:"pinned,omitempty"` + MuteEndTime *uint64 `protobuf:"varint,25,opt,name=muteEndTime" json:"muteEndTime,omitempty"` + Wallpaper *WallpaperSettings `protobuf:"bytes,26,opt,name=wallpaper" json:"wallpaper,omitempty"` + MediaVisibility *MediaVisibility `protobuf:"varint,27,opt,name=mediaVisibility,enum=WAWebProtobufsHistorySync.MediaVisibility" json:"mediaVisibility,omitempty"` + TcTokenSenderTimestamp *uint64 `protobuf:"varint,28,opt,name=tcTokenSenderTimestamp" json:"tcTokenSenderTimestamp,omitempty"` + Suspended *bool `protobuf:"varint,29,opt,name=suspended" json:"suspended,omitempty"` + Terminated *bool `protobuf:"varint,30,opt,name=terminated" json:"terminated,omitempty"` + CreatedAt *uint64 `protobuf:"varint,31,opt,name=createdAt" json:"createdAt,omitempty"` + CreatedBy *string `protobuf:"bytes,32,opt,name=createdBy" json:"createdBy,omitempty"` + Description *string `protobuf:"bytes,33,opt,name=description" json:"description,omitempty"` + Support *bool `protobuf:"varint,34,opt,name=support" json:"support,omitempty"` + IsParentGroup *bool `protobuf:"varint,35,opt,name=isParentGroup" json:"isParentGroup,omitempty"` + ParentGroupID *string `protobuf:"bytes,37,opt,name=parentGroupID" json:"parentGroupID,omitempty"` + IsDefaultSubgroup *bool `protobuf:"varint,36,opt,name=isDefaultSubgroup" json:"isDefaultSubgroup,omitempty"` + DisplayName *string `protobuf:"bytes,38,opt,name=displayName" json:"displayName,omitempty"` + PnJID *string `protobuf:"bytes,39,opt,name=pnJID" json:"pnJID,omitempty"` + ShareOwnPn *bool `protobuf:"varint,40,opt,name=shareOwnPn" json:"shareOwnPn,omitempty"` + PnhDuplicateLidThread *bool `protobuf:"varint,41,opt,name=pnhDuplicateLidThread" json:"pnhDuplicateLidThread,omitempty"` + LidJID *string `protobuf:"bytes,42,opt,name=lidJID" json:"lidJID,omitempty"` + Username *string `protobuf:"bytes,43,opt,name=username" json:"username,omitempty"` + LidOriginType *string `protobuf:"bytes,44,opt,name=lidOriginType" json:"lidOriginType,omitempty"` + CommentsCount *uint32 `protobuf:"varint,45,opt,name=commentsCount" json:"commentsCount,omitempty"` + Locked *bool `protobuf:"varint,46,opt,name=locked" json:"locked,omitempty"` + SystemMessageToInsert *PrivacySystemMessage `protobuf:"varint,47,opt,name=systemMessageToInsert,enum=WAWebProtobufsHistorySync.PrivacySystemMessage" json:"systemMessageToInsert,omitempty"` + CapiCreatedGroup *bool `protobuf:"varint,48,opt,name=capiCreatedGroup" json:"capiCreatedGroup,omitempty"` + AccountLid *string `protobuf:"bytes,49,opt,name=accountLid" json:"accountLid,omitempty"` + LimitSharing *bool `protobuf:"varint,50,opt,name=limitSharing" json:"limitSharing,omitempty"` + LimitSharingSettingTimestamp *int64 `protobuf:"varint,51,opt,name=limitSharingSettingTimestamp" json:"limitSharingSettingTimestamp,omitempty"` + LimitSharingTrigger *waCommon.LimitSharing_Trigger `protobuf:"varint,52,opt,name=limitSharingTrigger,enum=WACommon.LimitSharing_Trigger" json:"limitSharingTrigger,omitempty"` + LimitSharingInitiatedByMe *bool `protobuf:"varint,53,opt,name=limitSharingInitiatedByMe" json:"limitSharingInitiatedByMe,omitempty"` + MaibaAiThreadEnabled *bool `protobuf:"varint,54,opt,name=maibaAiThreadEnabled" json:"maibaAiThreadEnabled,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *Conversation) Reset() { *x = Conversation{} - if protoimpl.UnsafeEnabled { - mi := &file_waHistorySync_WAWebProtobufsHistorySync_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waHistorySync_WAWebProtobufsHistorySync_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Conversation) String() string { @@ -677,7 +697,7 @@ func (*Conversation) ProtoMessage() {} func (x *Conversation) ProtoReflect() protoreflect.Message { mi := &file_waHistorySync_WAWebProtobufsHistorySync_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1028,22 +1048,62 @@ func (x *Conversation) GetCapiCreatedGroup() bool { return false } +func (x *Conversation) GetAccountLid() string { + if x != nil && x.AccountLid != nil { + return *x.AccountLid + } + return "" +} + +func (x *Conversation) GetLimitSharing() bool { + if x != nil && x.LimitSharing != nil { + return *x.LimitSharing + } + return false +} + +func (x *Conversation) GetLimitSharingSettingTimestamp() int64 { + if x != nil && x.LimitSharingSettingTimestamp != nil { + return *x.LimitSharingSettingTimestamp + } + return 0 +} + +func (x *Conversation) GetLimitSharingTrigger() waCommon.LimitSharing_Trigger { + if x != nil && x.LimitSharingTrigger != nil { + return *x.LimitSharingTrigger + } + return waCommon.LimitSharing_Trigger(0) +} + +func (x *Conversation) GetLimitSharingInitiatedByMe() bool { + if x != nil && x.LimitSharingInitiatedByMe != nil { + return *x.LimitSharingInitiatedByMe + } + return false +} + +func (x *Conversation) GetMaibaAiThreadEnabled() bool { + if x != nil && x.MaibaAiThreadEnabled != nil { + return *x.MaibaAiThreadEnabled + } + return false +} + type GroupParticipant struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + UserJID *string `protobuf:"bytes,1,req,name=userJID" json:"userJID,omitempty"` + Rank *GroupParticipant_Rank `protobuf:"varint,2,opt,name=rank,enum=WAWebProtobufsHistorySync.GroupParticipant_Rank" json:"rank,omitempty"` + MemberLabel *waE2E.MemberLabel `protobuf:"bytes,3,opt,name=memberLabel" json:"memberLabel,omitempty"` unknownFields protoimpl.UnknownFields - - UserJID *string `protobuf:"bytes,1,req,name=userJID" json:"userJID,omitempty"` - Rank *GroupParticipant_Rank `protobuf:"varint,2,opt,name=rank,enum=WAWebProtobufsHistorySync.GroupParticipant_Rank" json:"rank,omitempty"` + sizeCache protoimpl.SizeCache } func (x *GroupParticipant) Reset() { *x = GroupParticipant{} - if protoimpl.UnsafeEnabled { - mi := &file_waHistorySync_WAWebProtobufsHistorySync_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waHistorySync_WAWebProtobufsHistorySync_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GroupParticipant) String() string { @@ -1054,7 +1114,7 @@ func (*GroupParticipant) ProtoMessage() {} func (x *GroupParticipant) ProtoReflect() protoreflect.Message { mi := &file_waHistorySync_WAWebProtobufsHistorySync_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1083,23 +1143,27 @@ func (x *GroupParticipant) GetRank() GroupParticipant_Rank { return GroupParticipant_REGULAR } +func (x *GroupParticipant) GetMemberLabel() *waE2E.MemberLabel { + if x != nil { + return x.MemberLabel + } + return nil +} + type PastParticipant struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + UserJID *string `protobuf:"bytes,1,opt,name=userJID" json:"userJID,omitempty"` + LeaveReason *PastParticipant_LeaveReason `protobuf:"varint,2,opt,name=leaveReason,enum=WAWebProtobufsHistorySync.PastParticipant_LeaveReason" json:"leaveReason,omitempty"` + LeaveTS *uint64 `protobuf:"varint,3,opt,name=leaveTS" json:"leaveTS,omitempty"` unknownFields protoimpl.UnknownFields - - UserJID *string `protobuf:"bytes,1,opt,name=userJID" json:"userJID,omitempty"` - LeaveReason *PastParticipant_LeaveReason `protobuf:"varint,2,opt,name=leaveReason,enum=WAWebProtobufsHistorySync.PastParticipant_LeaveReason" json:"leaveReason,omitempty"` - LeaveTS *uint64 `protobuf:"varint,3,opt,name=leaveTS" json:"leaveTS,omitempty"` + sizeCache protoimpl.SizeCache } func (x *PastParticipant) Reset() { *x = PastParticipant{} - if protoimpl.UnsafeEnabled { - mi := &file_waHistorySync_WAWebProtobufsHistorySync_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waHistorySync_WAWebProtobufsHistorySync_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *PastParticipant) String() string { @@ -1110,7 +1174,7 @@ func (*PastParticipant) ProtoMessage() {} func (x *PastParticipant) ProtoReflect() protoreflect.Message { mi := &file_waHistorySync_WAWebProtobufsHistorySync_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1147,21 +1211,18 @@ func (x *PastParticipant) GetLeaveTS() uint64 { } type PhoneNumberToLIDMapping struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + PnJID *string `protobuf:"bytes,1,opt,name=pnJID" json:"pnJID,omitempty"` + LidJID *string `protobuf:"bytes,2,opt,name=lidJID" json:"lidJID,omitempty"` unknownFields protoimpl.UnknownFields - - PnJID *string `protobuf:"bytes,1,opt,name=pnJID" json:"pnJID,omitempty"` - LidJID *string `protobuf:"bytes,2,opt,name=lidJID" json:"lidJID,omitempty"` + sizeCache protoimpl.SizeCache } func (x *PhoneNumberToLIDMapping) Reset() { *x = PhoneNumberToLIDMapping{} - if protoimpl.UnsafeEnabled { - mi := &file_waHistorySync_WAWebProtobufsHistorySync_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waHistorySync_WAWebProtobufsHistorySync_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *PhoneNumberToLIDMapping) String() string { @@ -1172,7 +1233,7 @@ func (*PhoneNumberToLIDMapping) ProtoMessage() {} func (x *PhoneNumberToLIDMapping) ProtoReflect() protoreflect.Message { mi := &file_waHistorySync_WAWebProtobufsHistorySync_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1201,22 +1262,87 @@ func (x *PhoneNumberToLIDMapping) GetLidJID() string { return "" } +type Account struct { + state protoimpl.MessageState `protogen:"open.v1"` + Lid *string `protobuf:"bytes,1,opt,name=lid" json:"lid,omitempty"` + Username *string `protobuf:"bytes,2,opt,name=username" json:"username,omitempty"` + CountryCode *string `protobuf:"bytes,3,opt,name=countryCode" json:"countryCode,omitempty"` + IsUsernameDeleted *bool `protobuf:"varint,4,opt,name=isUsernameDeleted" json:"isUsernameDeleted,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *Account) Reset() { + *x = Account{} + mi := &file_waHistorySync_WAWebProtobufsHistorySync_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *Account) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Account) ProtoMessage() {} + +func (x *Account) ProtoReflect() protoreflect.Message { + mi := &file_waHistorySync_WAWebProtobufsHistorySync_proto_msgTypes[5] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Account.ProtoReflect.Descriptor instead. +func (*Account) Descriptor() ([]byte, []int) { + return file_waHistorySync_WAWebProtobufsHistorySync_proto_rawDescGZIP(), []int{5} +} + +func (x *Account) GetLid() string { + if x != nil && x.Lid != nil { + return *x.Lid + } + return "" +} + +func (x *Account) GetUsername() string { + if x != nil && x.Username != nil { + return *x.Username + } + return "" +} + +func (x *Account) GetCountryCode() string { + if x != nil && x.CountryCode != nil { + return *x.CountryCode + } + return "" +} + +func (x *Account) GetIsUsernameDeleted() bool { + if x != nil && x.IsUsernameDeleted != nil { + return *x.IsUsernameDeleted + } + return false +} + type HistorySyncMsg struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Message *waWeb.WebMessageInfo `protobuf:"bytes,1,opt,name=message" json:"message,omitempty"` + MsgOrderID *uint64 `protobuf:"varint,2,opt,name=msgOrderID" json:"msgOrderID,omitempty"` unknownFields protoimpl.UnknownFields - - Message *waWeb.WebMessageInfo `protobuf:"bytes,1,opt,name=message" json:"message,omitempty"` - MsgOrderID *uint64 `protobuf:"varint,2,opt,name=msgOrderID" json:"msgOrderID,omitempty"` + sizeCache protoimpl.SizeCache } func (x *HistorySyncMsg) Reset() { *x = HistorySyncMsg{} - if protoimpl.UnsafeEnabled { - mi := &file_waHistorySync_WAWebProtobufsHistorySync_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waHistorySync_WAWebProtobufsHistorySync_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *HistorySyncMsg) String() string { @@ -1226,8 +1352,8 @@ func (x *HistorySyncMsg) String() string { func (*HistorySyncMsg) ProtoMessage() {} func (x *HistorySyncMsg) ProtoReflect() protoreflect.Message { - mi := &file_waHistorySync_WAWebProtobufsHistorySync_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_waHistorySync_WAWebProtobufsHistorySync_proto_msgTypes[6] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1239,7 +1365,7 @@ func (x *HistorySyncMsg) ProtoReflect() protoreflect.Message { // Deprecated: Use HistorySyncMsg.ProtoReflect.Descriptor instead. func (*HistorySyncMsg) Descriptor() ([]byte, []int) { - return file_waHistorySync_WAWebProtobufsHistorySync_proto_rawDescGZIP(), []int{5} + return file_waHistorySync_WAWebProtobufsHistorySync_proto_rawDescGZIP(), []int{6} } func (x *HistorySyncMsg) GetMessage() *waWeb.WebMessageInfo { @@ -1257,21 +1383,18 @@ func (x *HistorySyncMsg) GetMsgOrderID() uint64 { } type Pushname struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + ID *string `protobuf:"bytes,1,opt,name=ID" json:"ID,omitempty"` + Pushname *string `protobuf:"bytes,2,opt,name=pushname" json:"pushname,omitempty"` unknownFields protoimpl.UnknownFields - - ID *string `protobuf:"bytes,1,opt,name=ID" json:"ID,omitempty"` - Pushname *string `protobuf:"bytes,2,opt,name=pushname" json:"pushname,omitempty"` + sizeCache protoimpl.SizeCache } func (x *Pushname) Reset() { *x = Pushname{} - if protoimpl.UnsafeEnabled { - mi := &file_waHistorySync_WAWebProtobufsHistorySync_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waHistorySync_WAWebProtobufsHistorySync_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Pushname) String() string { @@ -1281,8 +1404,8 @@ func (x *Pushname) String() string { func (*Pushname) ProtoMessage() {} func (x *Pushname) ProtoReflect() protoreflect.Message { - mi := &file_waHistorySync_WAWebProtobufsHistorySync_proto_msgTypes[6] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_waHistorySync_WAWebProtobufsHistorySync_proto_msgTypes[7] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1294,7 +1417,7 @@ func (x *Pushname) ProtoReflect() protoreflect.Message { // Deprecated: Use Pushname.ProtoReflect.Descriptor instead. func (*Pushname) Descriptor() ([]byte, []int) { - return file_waHistorySync_WAWebProtobufsHistorySync_proto_rawDescGZIP(), []int{6} + return file_waHistorySync_WAWebProtobufsHistorySync_proto_rawDescGZIP(), []int{7} } func (x *Pushname) GetID() string { @@ -1312,21 +1435,18 @@ func (x *Pushname) GetPushname() string { } type WallpaperSettings struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Filename *string `protobuf:"bytes,1,opt,name=filename" json:"filename,omitempty"` + Opacity *uint32 `protobuf:"varint,2,opt,name=opacity" json:"opacity,omitempty"` unknownFields protoimpl.UnknownFields - - Filename *string `protobuf:"bytes,1,opt,name=filename" json:"filename,omitempty"` - Opacity *uint32 `protobuf:"varint,2,opt,name=opacity" json:"opacity,omitempty"` + sizeCache protoimpl.SizeCache } func (x *WallpaperSettings) Reset() { *x = WallpaperSettings{} - if protoimpl.UnsafeEnabled { - mi := &file_waHistorySync_WAWebProtobufsHistorySync_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waHistorySync_WAWebProtobufsHistorySync_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *WallpaperSettings) String() string { @@ -1336,8 +1456,8 @@ func (x *WallpaperSettings) String() string { func (*WallpaperSettings) ProtoMessage() {} func (x *WallpaperSettings) ProtoReflect() protoreflect.Message { - mi := &file_waHistorySync_WAWebProtobufsHistorySync_proto_msgTypes[7] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_waHistorySync_WAWebProtobufsHistorySync_proto_msgTypes[8] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1349,7 +1469,7 @@ func (x *WallpaperSettings) ProtoReflect() protoreflect.Message { // Deprecated: Use WallpaperSettings.ProtoReflect.Descriptor instead. func (*WallpaperSettings) Descriptor() ([]byte, []int) { - return file_waHistorySync_WAWebProtobufsHistorySync_proto_rawDescGZIP(), []int{7} + return file_waHistorySync_WAWebProtobufsHistorySync_proto_rawDescGZIP(), []int{8} } func (x *WallpaperSettings) GetFilename() string { @@ -1367,10 +1487,7 @@ func (x *WallpaperSettings) GetOpacity() uint32 { } type GlobalSettings struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` LightThemeWallpaper *WallpaperSettings `protobuf:"bytes,1,opt,name=lightThemeWallpaper" json:"lightThemeWallpaper,omitempty"` MediaVisibility *MediaVisibility `protobuf:"varint,2,opt,name=mediaVisibility,enum=WAWebProtobufsHistorySync.MediaVisibility" json:"mediaVisibility,omitempty"` DarkThemeWallpaper *WallpaperSettings `protobuf:"bytes,3,opt,name=darkThemeWallpaper" json:"darkThemeWallpaper,omitempty"` @@ -1390,15 +1507,16 @@ type GlobalSettings struct { IndividualNotificationSettings *NotificationSettings `protobuf:"bytes,17,opt,name=individualNotificationSettings" json:"individualNotificationSettings,omitempty"` GroupNotificationSettings *NotificationSettings `protobuf:"bytes,18,opt,name=groupNotificationSettings" json:"groupNotificationSettings,omitempty"` ChatLockSettings *waChatLockSettings.ChatLockSettings `protobuf:"bytes,19,opt,name=chatLockSettings" json:"chatLockSettings,omitempty"` + ChatDbLidMigrationTimestamp *int64 `protobuf:"varint,20,opt,name=chatDbLidMigrationTimestamp" json:"chatDbLidMigrationTimestamp,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *GlobalSettings) Reset() { *x = GlobalSettings{} - if protoimpl.UnsafeEnabled { - mi := &file_waHistorySync_WAWebProtobufsHistorySync_proto_msgTypes[8] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waHistorySync_WAWebProtobufsHistorySync_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GlobalSettings) String() string { @@ -1408,8 +1526,8 @@ func (x *GlobalSettings) String() string { func (*GlobalSettings) ProtoMessage() {} func (x *GlobalSettings) ProtoReflect() protoreflect.Message { - mi := &file_waHistorySync_WAWebProtobufsHistorySync_proto_msgTypes[8] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_waHistorySync_WAWebProtobufsHistorySync_proto_msgTypes[9] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1421,7 +1539,7 @@ func (x *GlobalSettings) ProtoReflect() protoreflect.Message { // Deprecated: Use GlobalSettings.ProtoReflect.Descriptor instead. func (*GlobalSettings) Descriptor() ([]byte, []int) { - return file_waHistorySync_WAWebProtobufsHistorySync_proto_rawDescGZIP(), []int{8} + return file_waHistorySync_WAWebProtobufsHistorySync_proto_rawDescGZIP(), []int{9} } func (x *GlobalSettings) GetLightThemeWallpaper() *WallpaperSettings { @@ -1557,24 +1675,28 @@ func (x *GlobalSettings) GetChatLockSettings() *waChatLockSettings.ChatLockSetti return nil } -type AutoDownloadSettings struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +func (x *GlobalSettings) GetChatDbLidMigrationTimestamp() int64 { + if x != nil && x.ChatDbLidMigrationTimestamp != nil { + return *x.ChatDbLidMigrationTimestamp + } + return 0 +} - DownloadImages *bool `protobuf:"varint,1,opt,name=downloadImages" json:"downloadImages,omitempty"` - DownloadAudio *bool `protobuf:"varint,2,opt,name=downloadAudio" json:"downloadAudio,omitempty"` - DownloadVideo *bool `protobuf:"varint,3,opt,name=downloadVideo" json:"downloadVideo,omitempty"` - DownloadDocuments *bool `protobuf:"varint,4,opt,name=downloadDocuments" json:"downloadDocuments,omitempty"` +type AutoDownloadSettings struct { + state protoimpl.MessageState `protogen:"open.v1"` + DownloadImages *bool `protobuf:"varint,1,opt,name=downloadImages" json:"downloadImages,omitempty"` + DownloadAudio *bool `protobuf:"varint,2,opt,name=downloadAudio" json:"downloadAudio,omitempty"` + DownloadVideo *bool `protobuf:"varint,3,opt,name=downloadVideo" json:"downloadVideo,omitempty"` + DownloadDocuments *bool `protobuf:"varint,4,opt,name=downloadDocuments" json:"downloadDocuments,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *AutoDownloadSettings) Reset() { *x = AutoDownloadSettings{} - if protoimpl.UnsafeEnabled { - mi := &file_waHistorySync_WAWebProtobufsHistorySync_proto_msgTypes[9] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waHistorySync_WAWebProtobufsHistorySync_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *AutoDownloadSettings) String() string { @@ -1584,8 +1706,8 @@ func (x *AutoDownloadSettings) String() string { func (*AutoDownloadSettings) ProtoMessage() {} func (x *AutoDownloadSettings) ProtoReflect() protoreflect.Message { - mi := &file_waHistorySync_WAWebProtobufsHistorySync_proto_msgTypes[9] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_waHistorySync_WAWebProtobufsHistorySync_proto_msgTypes[10] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1597,7 +1719,7 @@ func (x *AutoDownloadSettings) ProtoReflect() protoreflect.Message { // Deprecated: Use AutoDownloadSettings.ProtoReflect.Descriptor instead. func (*AutoDownloadSettings) Descriptor() ([]byte, []int) { - return file_waHistorySync_WAWebProtobufsHistorySync_proto_rawDescGZIP(), []int{9} + return file_waHistorySync_WAWebProtobufsHistorySync_proto_rawDescGZIP(), []int{10} } func (x *AutoDownloadSettings) GetDownloadImages() bool { @@ -1629,31 +1751,30 @@ func (x *AutoDownloadSettings) GetDownloadDocuments() bool { } type StickerMetadata struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - URL *string `protobuf:"bytes,1,opt,name=URL" json:"URL,omitempty"` - FileSHA256 []byte `protobuf:"bytes,2,opt,name=fileSHA256" json:"fileSHA256,omitempty"` - FileEncSHA256 []byte `protobuf:"bytes,3,opt,name=fileEncSHA256" json:"fileEncSHA256,omitempty"` - MediaKey []byte `protobuf:"bytes,4,opt,name=mediaKey" json:"mediaKey,omitempty"` - Mimetype *string `protobuf:"bytes,5,opt,name=mimetype" json:"mimetype,omitempty"` - Height *uint32 `protobuf:"varint,6,opt,name=height" json:"height,omitempty"` - Width *uint32 `protobuf:"varint,7,opt,name=width" json:"width,omitempty"` - DirectPath *string `protobuf:"bytes,8,opt,name=directPath" json:"directPath,omitempty"` - FileLength *uint64 `protobuf:"varint,9,opt,name=fileLength" json:"fileLength,omitempty"` - Weight *float32 `protobuf:"fixed32,10,opt,name=weight" json:"weight,omitempty"` - LastStickerSentTS *int64 `protobuf:"varint,11,opt,name=lastStickerSentTS" json:"lastStickerSentTS,omitempty"` - IsLottie *bool `protobuf:"varint,12,opt,name=isLottie" json:"isLottie,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + URL *string `protobuf:"bytes,1,opt,name=URL" json:"URL,omitempty"` + FileSHA256 []byte `protobuf:"bytes,2,opt,name=fileSHA256" json:"fileSHA256,omitempty"` + FileEncSHA256 []byte `protobuf:"bytes,3,opt,name=fileEncSHA256" json:"fileEncSHA256,omitempty"` + MediaKey []byte `protobuf:"bytes,4,opt,name=mediaKey" json:"mediaKey,omitempty"` + Mimetype *string `protobuf:"bytes,5,opt,name=mimetype" json:"mimetype,omitempty"` + Height *uint32 `protobuf:"varint,6,opt,name=height" json:"height,omitempty"` + Width *uint32 `protobuf:"varint,7,opt,name=width" json:"width,omitempty"` + DirectPath *string `protobuf:"bytes,8,opt,name=directPath" json:"directPath,omitempty"` + FileLength *uint64 `protobuf:"varint,9,opt,name=fileLength" json:"fileLength,omitempty"` + Weight *float32 `protobuf:"fixed32,10,opt,name=weight" json:"weight,omitempty"` + LastStickerSentTS *int64 `protobuf:"varint,11,opt,name=lastStickerSentTS" json:"lastStickerSentTS,omitempty"` + IsLottie *bool `protobuf:"varint,12,opt,name=isLottie" json:"isLottie,omitempty"` + ImageHash *string `protobuf:"bytes,13,opt,name=imageHash" json:"imageHash,omitempty"` + IsAvatarSticker *bool `protobuf:"varint,14,opt,name=isAvatarSticker" json:"isAvatarSticker,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *StickerMetadata) Reset() { *x = StickerMetadata{} - if protoimpl.UnsafeEnabled { - mi := &file_waHistorySync_WAWebProtobufsHistorySync_proto_msgTypes[10] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waHistorySync_WAWebProtobufsHistorySync_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *StickerMetadata) String() string { @@ -1663,8 +1784,8 @@ func (x *StickerMetadata) String() string { func (*StickerMetadata) ProtoMessage() {} func (x *StickerMetadata) ProtoReflect() protoreflect.Message { - mi := &file_waHistorySync_WAWebProtobufsHistorySync_proto_msgTypes[10] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_waHistorySync_WAWebProtobufsHistorySync_proto_msgTypes[11] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1676,7 +1797,7 @@ func (x *StickerMetadata) ProtoReflect() protoreflect.Message { // Deprecated: Use StickerMetadata.ProtoReflect.Descriptor instead. func (*StickerMetadata) Descriptor() ([]byte, []int) { - return file_waHistorySync_WAWebProtobufsHistorySync_proto_rawDescGZIP(), []int{10} + return file_waHistorySync_WAWebProtobufsHistorySync_proto_rawDescGZIP(), []int{11} } func (x *StickerMetadata) GetURL() string { @@ -1763,22 +1884,33 @@ func (x *StickerMetadata) GetIsLottie() bool { return false } -type PastParticipants struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +func (x *StickerMetadata) GetImageHash() string { + if x != nil && x.ImageHash != nil { + return *x.ImageHash + } + return "" +} + +func (x *StickerMetadata) GetIsAvatarSticker() bool { + if x != nil && x.IsAvatarSticker != nil { + return *x.IsAvatarSticker + } + return false +} - GroupJID *string `protobuf:"bytes,1,opt,name=groupJID" json:"groupJID,omitempty"` - PastParticipants []*PastParticipant `protobuf:"bytes,2,rep,name=pastParticipants" json:"pastParticipants,omitempty"` +type PastParticipants struct { + state protoimpl.MessageState `protogen:"open.v1"` + GroupJID *string `protobuf:"bytes,1,opt,name=groupJID" json:"groupJID,omitempty"` + PastParticipants []*PastParticipant `protobuf:"bytes,2,rep,name=pastParticipants" json:"pastParticipants,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *PastParticipants) Reset() { *x = PastParticipants{} - if protoimpl.UnsafeEnabled { - mi := &file_waHistorySync_WAWebProtobufsHistorySync_proto_msgTypes[11] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waHistorySync_WAWebProtobufsHistorySync_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *PastParticipants) String() string { @@ -1788,8 +1920,8 @@ func (x *PastParticipants) String() string { func (*PastParticipants) ProtoMessage() {} func (x *PastParticipants) ProtoReflect() protoreflect.Message { - mi := &file_waHistorySync_WAWebProtobufsHistorySync_proto_msgTypes[11] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_waHistorySync_WAWebProtobufsHistorySync_proto_msgTypes[12] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1801,7 +1933,7 @@ func (x *PastParticipants) ProtoReflect() protoreflect.Message { // Deprecated: Use PastParticipants.ProtoReflect.Descriptor instead. func (*PastParticipants) Descriptor() ([]byte, []int) { - return file_waHistorySync_WAWebProtobufsHistorySync_proto_rawDescGZIP(), []int{11} + return file_waHistorySync_WAWebProtobufsHistorySync_proto_rawDescGZIP(), []int{12} } func (x *PastParticipants) GetGroupJID() string { @@ -1819,21 +1951,18 @@ func (x *PastParticipants) GetPastParticipants() []*PastParticipant { } type AvatarUserSettings struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + FBID *string `protobuf:"bytes,1,opt,name=FBID" json:"FBID,omitempty"` + Password *string `protobuf:"bytes,2,opt,name=password" json:"password,omitempty"` unknownFields protoimpl.UnknownFields - - FBID *string `protobuf:"bytes,1,opt,name=FBID" json:"FBID,omitempty"` - Password *string `protobuf:"bytes,2,opt,name=password" json:"password,omitempty"` + sizeCache protoimpl.SizeCache } func (x *AvatarUserSettings) Reset() { *x = AvatarUserSettings{} - if protoimpl.UnsafeEnabled { - mi := &file_waHistorySync_WAWebProtobufsHistorySync_proto_msgTypes[12] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waHistorySync_WAWebProtobufsHistorySync_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *AvatarUserSettings) String() string { @@ -1843,8 +1972,8 @@ func (x *AvatarUserSettings) String() string { func (*AvatarUserSettings) ProtoMessage() {} func (x *AvatarUserSettings) ProtoReflect() protoreflect.Message { - mi := &file_waHistorySync_WAWebProtobufsHistorySync_proto_msgTypes[12] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_waHistorySync_WAWebProtobufsHistorySync_proto_msgTypes[13] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1856,7 +1985,7 @@ func (x *AvatarUserSettings) ProtoReflect() protoreflect.Message { // Deprecated: Use AvatarUserSettings.ProtoReflect.Descriptor instead. func (*AvatarUserSettings) Descriptor() ([]byte, []int) { - return file_waHistorySync_WAWebProtobufsHistorySync_proto_rawDescGZIP(), []int{12} + return file_waHistorySync_WAWebProtobufsHistorySync_proto_rawDescGZIP(), []int{13} } func (x *AvatarUserSettings) GetFBID() string { @@ -1874,25 +2003,22 @@ func (x *AvatarUserSettings) GetPassword() string { } type NotificationSettings struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - MessageVibrate *string `protobuf:"bytes,1,opt,name=messageVibrate" json:"messageVibrate,omitempty"` - MessagePopup *string `protobuf:"bytes,2,opt,name=messagePopup" json:"messagePopup,omitempty"` - MessageLight *string `protobuf:"bytes,3,opt,name=messageLight" json:"messageLight,omitempty"` - LowPriorityNotifications *bool `protobuf:"varint,4,opt,name=lowPriorityNotifications" json:"lowPriorityNotifications,omitempty"` - ReactionsMuted *bool `protobuf:"varint,5,opt,name=reactionsMuted" json:"reactionsMuted,omitempty"` - CallVibrate *string `protobuf:"bytes,6,opt,name=callVibrate" json:"callVibrate,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + MessageVibrate *string `protobuf:"bytes,1,opt,name=messageVibrate" json:"messageVibrate,omitempty"` + MessagePopup *string `protobuf:"bytes,2,opt,name=messagePopup" json:"messagePopup,omitempty"` + MessageLight *string `protobuf:"bytes,3,opt,name=messageLight" json:"messageLight,omitempty"` + LowPriorityNotifications *bool `protobuf:"varint,4,opt,name=lowPriorityNotifications" json:"lowPriorityNotifications,omitempty"` + ReactionsMuted *bool `protobuf:"varint,5,opt,name=reactionsMuted" json:"reactionsMuted,omitempty"` + CallVibrate *string `protobuf:"bytes,6,opt,name=callVibrate" json:"callVibrate,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *NotificationSettings) Reset() { *x = NotificationSettings{} - if protoimpl.UnsafeEnabled { - mi := &file_waHistorySync_WAWebProtobufsHistorySync_proto_msgTypes[13] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waHistorySync_WAWebProtobufsHistorySync_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *NotificationSettings) String() string { @@ -1902,8 +2028,8 @@ func (x *NotificationSettings) String() string { func (*NotificationSettings) ProtoMessage() {} func (x *NotificationSettings) ProtoReflect() protoreflect.Message { - mi := &file_waHistorySync_WAWebProtobufsHistorySync_proto_msgTypes[13] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_waHistorySync_WAWebProtobufsHistorySync_proto_msgTypes[14] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1915,7 +2041,7 @@ func (x *NotificationSettings) ProtoReflect() protoreflect.Message { // Deprecated: Use NotificationSettings.ProtoReflect.Descriptor instead. func (*NotificationSettings) Descriptor() ([]byte, []int) { - return file_waHistorySync_WAWebProtobufsHistorySync_proto_rawDescGZIP(), []int{13} + return file_waHistorySync_WAWebProtobufsHistorySync_proto_rawDescGZIP(), []int{14} } func (x *NotificationSettings) GetMessageVibrate() string { @@ -1962,23 +2088,230 @@ func (x *NotificationSettings) GetCallVibrate() string { var File_waHistorySync_WAWebProtobufsHistorySync_proto protoreflect.FileDescriptor -//go:embed WAWebProtobufsHistorySync.pb.raw -var file_waHistorySync_WAWebProtobufsHistorySync_proto_rawDesc []byte +const file_waHistorySync_WAWebProtobufsHistorySync_proto_rawDesc = "" + + "\n" + + "-waHistorySync/WAWebProtobufsHistorySync.proto\x12\x19WAWebProtobufsHistorySync\x1a*waSyncAction/WAWebProtobufSyncAction.proto\x1a7waChatLockSettings/WAWebProtobufsChatLockSettings.proto\x1a\x1dwaE2E/WAWebProtobufsE2E.proto\x1a\x17waCommon/WACommon.proto\x1a\x1dwaWeb/WAWebProtobufsWeb.proto\"\x97\v\n" + + "\vHistorySync\x12R\n" + + "\bsyncType\x18\x01 \x02(\x0e26.WAWebProtobufsHistorySync.HistorySync.HistorySyncTypeR\bsyncType\x12M\n" + + "\rconversations\x18\x02 \x03(\v2'.WAWebProtobufsHistorySync.ConversationR\rconversations\x12M\n" + + "\x10statusV3Messages\x18\x03 \x03(\v2!.WAWebProtobufsWeb.WebMessageInfoR\x10statusV3Messages\x12\x1e\n" + + "\n" + + "chunkOrder\x18\x05 \x01(\rR\n" + + "chunkOrder\x12\x1a\n" + + "\bprogress\x18\x06 \x01(\rR\bprogress\x12A\n" + + "\tpushnames\x18\a \x03(\v2#.WAWebProtobufsHistorySync.PushnameR\tpushnames\x12Q\n" + + "\x0eglobalSettings\x18\b \x01(\v2).WAWebProtobufsHistorySync.GlobalSettingsR\x0eglobalSettings\x12.\n" + + "\x12threadIDUserSecret\x18\t \x01(\fR\x12threadIDUserSecret\x128\n" + + "\x17threadDsTimeframeOffset\x18\n" + + " \x01(\rR\x17threadDsTimeframeOffset\x12R\n" + + "\x0erecentStickers\x18\v \x03(\v2*.WAWebProtobufsHistorySync.StickerMetadataR\x0erecentStickers\x12W\n" + + "\x10pastParticipants\x18\f \x03(\v2+.WAWebProtobufsHistorySync.PastParticipantsR\x10pastParticipants\x12N\n" + + "\x0ecallLogRecords\x18\r \x03(\v2&.WAWebProtobufSyncAction.CallLogRecordR\x0ecallLogRecords\x12c\n" + + "\x0faiWaitListState\x18\x0e \x01(\x0e29.WAWebProtobufsHistorySync.HistorySync.BotAIWaitListStateR\x0faiWaitListState\x12n\n" + + "\x18phoneNumberToLidMappings\x18\x0f \x03(\v22.WAWebProtobufsHistorySync.PhoneNumberToLIDMappingR\x18phoneNumberToLidMappings\x12.\n" + + "\x12companionMetaNonce\x18\x10 \x01(\tR\x12companionMetaNonce\x12R\n" + + "$shareableChatIdentifierEncryptionKey\x18\x11 \x01(\fR$shareableChatIdentifierEncryptionKey\x12>\n" + + "\baccounts\x18\x12 \x03(\v2\".WAWebProtobufsHistorySync.AccountR\baccounts\"7\n" + + "\x12BotAIWaitListState\x12\x0f\n" + + "\vIN_WAITLIST\x10\x00\x12\x10\n" + + "\fAI_AVAILABLE\x10\x01\"\x8a\x01\n" + + "\x0fHistorySyncType\x12\x15\n" + + "\x11INITIAL_BOOTSTRAP\x10\x00\x12\x15\n" + + "\x11INITIAL_STATUS_V3\x10\x01\x12\b\n" + + "\x04FULL\x10\x02\x12\n" + + "\n" + + "\x06RECENT\x10\x03\x12\r\n" + + "\tPUSH_NAME\x10\x04\x12\x15\n" + + "\x11NON_BLOCKING_DATA\x10\x05\x12\r\n" + + "\tON_DEMAND\x10\x06\"\xff\x14\n" + + "\fConversation\x12\x0e\n" + + "\x02ID\x18\x01 \x02(\tR\x02ID\x12E\n" + + "\bmessages\x18\x02 \x03(\v2).WAWebProtobufsHistorySync.HistorySyncMsgR\bmessages\x12\x16\n" + + "\x06newJID\x18\x03 \x01(\tR\x06newJID\x12\x16\n" + + "\x06oldJID\x18\x04 \x01(\tR\x06oldJID\x12*\n" + + "\x10lastMsgTimestamp\x18\x05 \x01(\x04R\x10lastMsgTimestamp\x12 \n" + + "\vunreadCount\x18\x06 \x01(\rR\vunreadCount\x12\x1a\n" + + "\breadOnly\x18\a \x01(\bR\breadOnly\x122\n" + + "\x14endOfHistoryTransfer\x18\b \x01(\bR\x14endOfHistoryTransfer\x120\n" + + "\x13ephemeralExpiration\x18\t \x01(\rR\x13ephemeralExpiration\x12<\n" + + "\x19ephemeralSettingTimestamp\x18\n" + + " \x01(\x03R\x19ephemeralSettingTimestamp\x12|\n" + + "\x18endOfHistoryTransferType\x18\v \x01(\x0e2@.WAWebProtobufsHistorySync.Conversation.EndOfHistoryTransferTypeR\x18endOfHistoryTransferType\x124\n" + + "\x15conversationTimestamp\x18\f \x01(\x04R\x15conversationTimestamp\x12\x12\n" + + "\x04name\x18\r \x01(\tR\x04name\x12\x14\n" + + "\x05pHash\x18\x0e \x01(\tR\x05pHash\x12\x18\n" + + "\anotSpam\x18\x0f \x01(\bR\anotSpam\x12\x1a\n" + + "\barchived\x18\x10 \x01(\bR\barchived\x12O\n" + + "\x10disappearingMode\x18\x11 \x01(\v2#.WAWebProtobufsE2E.DisappearingModeR\x10disappearingMode\x12.\n" + + "\x12unreadMentionCount\x18\x12 \x01(\rR\x12unreadMentionCount\x12&\n" + + "\x0emarkedAsUnread\x18\x13 \x01(\bR\x0emarkedAsUnread\x12M\n" + + "\vparticipant\x18\x14 \x03(\v2+.WAWebProtobufsHistorySync.GroupParticipantR\vparticipant\x12\x18\n" + + "\atcToken\x18\x15 \x01(\fR\atcToken\x12*\n" + + "\x10tcTokenTimestamp\x18\x16 \x01(\x04R\x10tcTokenTimestamp\x12<\n" + + "\x19contactPrimaryIdentityKey\x18\x17 \x01(\fR\x19contactPrimaryIdentityKey\x12\x16\n" + + "\x06pinned\x18\x18 \x01(\rR\x06pinned\x12 \n" + + "\vmuteEndTime\x18\x19 \x01(\x04R\vmuteEndTime\x12J\n" + + "\twallpaper\x18\x1a \x01(\v2,.WAWebProtobufsHistorySync.WallpaperSettingsR\twallpaper\x12T\n" + + "\x0fmediaVisibility\x18\x1b \x01(\x0e2*.WAWebProtobufsHistorySync.MediaVisibilityR\x0fmediaVisibility\x126\n" + + "\x16tcTokenSenderTimestamp\x18\x1c \x01(\x04R\x16tcTokenSenderTimestamp\x12\x1c\n" + + "\tsuspended\x18\x1d \x01(\bR\tsuspended\x12\x1e\n" + + "\n" + + "terminated\x18\x1e \x01(\bR\n" + + "terminated\x12\x1c\n" + + "\tcreatedAt\x18\x1f \x01(\x04R\tcreatedAt\x12\x1c\n" + + "\tcreatedBy\x18 \x01(\tR\tcreatedBy\x12 \n" + + "\vdescription\x18! \x01(\tR\vdescription\x12\x18\n" + + "\asupport\x18\" \x01(\bR\asupport\x12$\n" + + "\risParentGroup\x18# \x01(\bR\risParentGroup\x12$\n" + + "\rparentGroupID\x18% \x01(\tR\rparentGroupID\x12,\n" + + "\x11isDefaultSubgroup\x18$ \x01(\bR\x11isDefaultSubgroup\x12 \n" + + "\vdisplayName\x18& \x01(\tR\vdisplayName\x12\x14\n" + + "\x05pnJID\x18' \x01(\tR\x05pnJID\x12\x1e\n" + + "\n" + + "shareOwnPn\x18( \x01(\bR\n" + + "shareOwnPn\x124\n" + + "\x15pnhDuplicateLidThread\x18) \x01(\bR\x15pnhDuplicateLidThread\x12\x16\n" + + "\x06lidJID\x18* \x01(\tR\x06lidJID\x12\x1a\n" + + "\busername\x18+ \x01(\tR\busername\x12$\n" + + "\rlidOriginType\x18, \x01(\tR\rlidOriginType\x12$\n" + + "\rcommentsCount\x18- \x01(\rR\rcommentsCount\x12\x16\n" + + "\x06locked\x18. \x01(\bR\x06locked\x12e\n" + + "\x15systemMessageToInsert\x18/ \x01(\x0e2/.WAWebProtobufsHistorySync.PrivacySystemMessageR\x15systemMessageToInsert\x12*\n" + + "\x10capiCreatedGroup\x180 \x01(\bR\x10capiCreatedGroup\x12\x1e\n" + + "\n" + + "accountLid\x181 \x01(\tR\n" + + "accountLid\x12\"\n" + + "\flimitSharing\x182 \x01(\bR\flimitSharing\x12B\n" + + "\x1climitSharingSettingTimestamp\x183 \x01(\x03R\x1climitSharingSettingTimestamp\x12P\n" + + "\x13limitSharingTrigger\x184 \x01(\x0e2\x1e.WACommon.LimitSharing.TriggerR\x13limitSharingTrigger\x12<\n" + + "\x19limitSharingInitiatedByMe\x185 \x01(\bR\x19limitSharingInitiatedByMe\x122\n" + + "\x14maibaAiThreadEnabled\x186 \x01(\bR\x14maibaAiThreadEnabled\"\x80\x02\n" + + "\x18EndOfHistoryTransferType\x120\n" + + ",COMPLETE_BUT_MORE_MESSAGES_REMAIN_ON_PRIMARY\x10\x00\x122\n" + + ".COMPLETE_AND_NO_MORE_MESSAGE_REMAIN_ON_PRIMARY\x10\x01\x12:\n" + + "6COMPLETE_ON_DEMAND_SYNC_BUT_MORE_MSG_REMAIN_ON_PRIMARY\x10\x02\x12B\n" + + ">COMPLETE_ON_DEMAND_SYNC_WITH_MORE_MSG_ON_PRIMARY_BUT_NO_ACCESS\x10\x03\"\xe4\x01\n" + + "\x10GroupParticipant\x12\x18\n" + + "\auserJID\x18\x01 \x02(\tR\auserJID\x12D\n" + + "\x04rank\x18\x02 \x01(\x0e20.WAWebProtobufsHistorySync.GroupParticipant.RankR\x04rank\x12@\n" + + "\vmemberLabel\x18\x03 \x01(\v2\x1e.WAWebProtobufsE2E.MemberLabelR\vmemberLabel\".\n" + + "\x04Rank\x12\v\n" + + "\aREGULAR\x10\x00\x12\t\n" + + "\x05ADMIN\x10\x01\x12\x0e\n" + + "\n" + + "SUPERADMIN\x10\x02\"\xc5\x01\n" + + "\x0fPastParticipant\x12\x18\n" + + "\auserJID\x18\x01 \x01(\tR\auserJID\x12X\n" + + "\vleaveReason\x18\x02 \x01(\x0e26.WAWebProtobufsHistorySync.PastParticipant.LeaveReasonR\vleaveReason\x12\x18\n" + + "\aleaveTS\x18\x03 \x01(\x04R\aleaveTS\"$\n" + + "\vLeaveReason\x12\b\n" + + "\x04LEFT\x10\x00\x12\v\n" + + "\aREMOVED\x10\x01\"G\n" + + "\x17PhoneNumberToLIDMapping\x12\x14\n" + + "\x05pnJID\x18\x01 \x01(\tR\x05pnJID\x12\x16\n" + + "\x06lidJID\x18\x02 \x01(\tR\x06lidJID\"\x87\x01\n" + + "\aAccount\x12\x10\n" + + "\x03lid\x18\x01 \x01(\tR\x03lid\x12\x1a\n" + + "\busername\x18\x02 \x01(\tR\busername\x12 \n" + + "\vcountryCode\x18\x03 \x01(\tR\vcountryCode\x12,\n" + + "\x11isUsernameDeleted\x18\x04 \x01(\bR\x11isUsernameDeleted\"m\n" + + "\x0eHistorySyncMsg\x12;\n" + + "\amessage\x18\x01 \x01(\v2!.WAWebProtobufsWeb.WebMessageInfoR\amessage\x12\x1e\n" + + "\n" + + "msgOrderID\x18\x02 \x01(\x04R\n" + + "msgOrderID\"6\n" + + "\bPushname\x12\x0e\n" + + "\x02ID\x18\x01 \x01(\tR\x02ID\x12\x1a\n" + + "\bpushname\x18\x02 \x01(\tR\bpushname\"I\n" + + "\x11WallpaperSettings\x12\x1a\n" + + "\bfilename\x18\x01 \x01(\tR\bfilename\x12\x18\n" + + "\aopacity\x18\x02 \x01(\rR\aopacity\"\x9a\f\n" + + "\x0eGlobalSettings\x12^\n" + + "\x13lightThemeWallpaper\x18\x01 \x01(\v2,.WAWebProtobufsHistorySync.WallpaperSettingsR\x13lightThemeWallpaper\x12T\n" + + "\x0fmediaVisibility\x18\x02 \x01(\x0e2*.WAWebProtobufsHistorySync.MediaVisibilityR\x0fmediaVisibility\x12\\\n" + + "\x12darkThemeWallpaper\x18\x03 \x01(\v2,.WAWebProtobufsHistorySync.WallpaperSettingsR\x12darkThemeWallpaper\x12[\n" + + "\x10autoDownloadWiFi\x18\x04 \x01(\v2/.WAWebProtobufsHistorySync.AutoDownloadSettingsR\x10autoDownloadWiFi\x12c\n" + + "\x14autoDownloadCellular\x18\x05 \x01(\v2/.WAWebProtobufsHistorySync.AutoDownloadSettingsR\x14autoDownloadCellular\x12a\n" + + "\x13autoDownloadRoaming\x18\x06 \x01(\v2/.WAWebProtobufsHistorySync.AutoDownloadSettingsR\x13autoDownloadRoaming\x12N\n" + + "\"showIndividualNotificationsPreview\x18\a \x01(\bR\"showIndividualNotificationsPreview\x12D\n" + + "\x1dshowGroupNotificationsPreview\x18\b \x01(\bR\x1dshowGroupNotificationsPreview\x12:\n" + + "\x18disappearingModeDuration\x18\t \x01(\x05R\x18disappearingModeDuration\x12<\n" + + "\x19disappearingModeTimestamp\x18\n" + + " \x01(\x03R\x19disappearingModeTimestamp\x12]\n" + + "\x12avatarUserSettings\x18\v \x01(\v2-.WAWebProtobufsHistorySync.AvatarUserSettingsR\x12avatarUserSettings\x12\x1a\n" + + "\bfontSize\x18\f \x01(\x05R\bfontSize\x124\n" + + "\x15securityNotifications\x18\r \x01(\bR\x15securityNotifications\x12.\n" + + "\x12autoUnarchiveChats\x18\x0e \x01(\bR\x12autoUnarchiveChats\x12*\n" + + "\x10videoQualityMode\x18\x0f \x01(\x05R\x10videoQualityMode\x12*\n" + + "\x10photoQualityMode\x18\x10 \x01(\x05R\x10photoQualityMode\x12w\n" + + "\x1eindividualNotificationSettings\x18\x11 \x01(\v2/.WAWebProtobufsHistorySync.NotificationSettingsR\x1eindividualNotificationSettings\x12m\n" + + "\x19groupNotificationSettings\x18\x12 \x01(\v2/.WAWebProtobufsHistorySync.NotificationSettingsR\x19groupNotificationSettings\x12\\\n" + + "\x10chatLockSettings\x18\x13 \x01(\v20.WAWebProtobufsChatLockSettings.ChatLockSettingsR\x10chatLockSettings\x12@\n" + + "\x1bchatDbLidMigrationTimestamp\x18\x14 \x01(\x03R\x1bchatDbLidMigrationTimestamp\"\xb8\x01\n" + + "\x14AutoDownloadSettings\x12&\n" + + "\x0edownloadImages\x18\x01 \x01(\bR\x0edownloadImages\x12$\n" + + "\rdownloadAudio\x18\x02 \x01(\bR\rdownloadAudio\x12$\n" + + "\rdownloadVideo\x18\x03 \x01(\bR\rdownloadVideo\x12,\n" + + "\x11downloadDocuments\x18\x04 \x01(\bR\x11downloadDocuments\"\xb9\x03\n" + + "\x0fStickerMetadata\x12\x10\n" + + "\x03URL\x18\x01 \x01(\tR\x03URL\x12\x1e\n" + + "\n" + + "fileSHA256\x18\x02 \x01(\fR\n" + + "fileSHA256\x12$\n" + + "\rfileEncSHA256\x18\x03 \x01(\fR\rfileEncSHA256\x12\x1a\n" + + "\bmediaKey\x18\x04 \x01(\fR\bmediaKey\x12\x1a\n" + + "\bmimetype\x18\x05 \x01(\tR\bmimetype\x12\x16\n" + + "\x06height\x18\x06 \x01(\rR\x06height\x12\x14\n" + + "\x05width\x18\a \x01(\rR\x05width\x12\x1e\n" + + "\n" + + "directPath\x18\b \x01(\tR\n" + + "directPath\x12\x1e\n" + + "\n" + + "fileLength\x18\t \x01(\x04R\n" + + "fileLength\x12\x16\n" + + "\x06weight\x18\n" + + " \x01(\x02R\x06weight\x12,\n" + + "\x11lastStickerSentTS\x18\v \x01(\x03R\x11lastStickerSentTS\x12\x1a\n" + + "\bisLottie\x18\f \x01(\bR\bisLottie\x12\x1c\n" + + "\timageHash\x18\r \x01(\tR\timageHash\x12(\n" + + "\x0fisAvatarSticker\x18\x0e \x01(\bR\x0fisAvatarSticker\"\x86\x01\n" + + "\x10PastParticipants\x12\x1a\n" + + "\bgroupJID\x18\x01 \x01(\tR\bgroupJID\x12V\n" + + "\x10pastParticipants\x18\x02 \x03(\v2*.WAWebProtobufsHistorySync.PastParticipantR\x10pastParticipants\"D\n" + + "\x12AvatarUserSettings\x12\x12\n" + + "\x04FBID\x18\x01 \x01(\tR\x04FBID\x12\x1a\n" + + "\bpassword\x18\x02 \x01(\tR\bpassword\"\x8c\x02\n" + + "\x14NotificationSettings\x12&\n" + + "\x0emessageVibrate\x18\x01 \x01(\tR\x0emessageVibrate\x12\"\n" + + "\fmessagePopup\x18\x02 \x01(\tR\fmessagePopup\x12\"\n" + + "\fmessageLight\x18\x03 \x01(\tR\fmessageLight\x12:\n" + + "\x18lowPriorityNotifications\x18\x04 \x01(\bR\x18lowPriorityNotifications\x12&\n" + + "\x0ereactionsMuted\x18\x05 \x01(\bR\x0ereactionsMuted\x12 \n" + + "\vcallVibrate\x18\x06 \x01(\tR\vcallVibrate*/\n" + + "\x0fMediaVisibility\x12\v\n" + + "\aDEFAULT\x10\x00\x12\a\n" + + "\x03OFF\x10\x01\x12\x06\n" + + "\x02ON\x10\x02*E\n" + + "\x14PrivacySystemMessage\x12\f\n" + + "\bE2EE_MSG\x10\x01\x12\x0e\n" + + "\n" + + "NE2EE_SELF\x10\x02\x12\x0f\n" + + "\vNE2EE_OTHER\x10\x03B)Z'go.mau.fi/whatsmeow/proto/waHistorySync" var ( file_waHistorySync_WAWebProtobufsHistorySync_proto_rawDescOnce sync.Once - file_waHistorySync_WAWebProtobufsHistorySync_proto_rawDescData = file_waHistorySync_WAWebProtobufsHistorySync_proto_rawDesc + file_waHistorySync_WAWebProtobufsHistorySync_proto_rawDescData []byte ) func file_waHistorySync_WAWebProtobufsHistorySync_proto_rawDescGZIP() []byte { file_waHistorySync_WAWebProtobufsHistorySync_proto_rawDescOnce.Do(func() { - file_waHistorySync_WAWebProtobufsHistorySync_proto_rawDescData = protoimpl.X.CompressGZIP(file_waHistorySync_WAWebProtobufsHistorySync_proto_rawDescData) + file_waHistorySync_WAWebProtobufsHistorySync_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_waHistorySync_WAWebProtobufsHistorySync_proto_rawDesc), len(file_waHistorySync_WAWebProtobufsHistorySync_proto_rawDesc))) }) return file_waHistorySync_WAWebProtobufsHistorySync_proto_rawDescData } var file_waHistorySync_WAWebProtobufsHistorySync_proto_enumTypes = make([]protoimpl.EnumInfo, 7) -var file_waHistorySync_WAWebProtobufsHistorySync_proto_msgTypes = make([]protoimpl.MessageInfo, 14) +var file_waHistorySync_WAWebProtobufsHistorySync_proto_msgTypes = make([]protoimpl.MessageInfo, 15) var file_waHistorySync_WAWebProtobufsHistorySync_proto_goTypes = []any{ (MediaVisibility)(0), // 0: WAWebProtobufsHistorySync.MediaVisibility (PrivacySystemMessage)(0), // 1: WAWebProtobufsHistorySync.PrivacySystemMessage @@ -1992,57 +2325,63 @@ var file_waHistorySync_WAWebProtobufsHistorySync_proto_goTypes = []any{ (*GroupParticipant)(nil), // 9: WAWebProtobufsHistorySync.GroupParticipant (*PastParticipant)(nil), // 10: WAWebProtobufsHistorySync.PastParticipant (*PhoneNumberToLIDMapping)(nil), // 11: WAWebProtobufsHistorySync.PhoneNumberToLIDMapping - (*HistorySyncMsg)(nil), // 12: WAWebProtobufsHistorySync.HistorySyncMsg - (*Pushname)(nil), // 13: WAWebProtobufsHistorySync.Pushname - (*WallpaperSettings)(nil), // 14: WAWebProtobufsHistorySync.WallpaperSettings - (*GlobalSettings)(nil), // 15: WAWebProtobufsHistorySync.GlobalSettings - (*AutoDownloadSettings)(nil), // 16: WAWebProtobufsHistorySync.AutoDownloadSettings - (*StickerMetadata)(nil), // 17: WAWebProtobufsHistorySync.StickerMetadata - (*PastParticipants)(nil), // 18: WAWebProtobufsHistorySync.PastParticipants - (*AvatarUserSettings)(nil), // 19: WAWebProtobufsHistorySync.AvatarUserSettings - (*NotificationSettings)(nil), // 20: WAWebProtobufsHistorySync.NotificationSettings - (*waWeb.WebMessageInfo)(nil), // 21: WAWebProtobufsWeb.WebMessageInfo - (*waSyncAction.CallLogRecord)(nil), // 22: WASyncAction.CallLogRecord - (*waE2E.DisappearingMode)(nil), // 23: WAWebProtobufsE2E.DisappearingMode - (*waChatLockSettings.ChatLockSettings)(nil), // 24: WAProtobufsChatLockSettings.ChatLockSettings + (*Account)(nil), // 12: WAWebProtobufsHistorySync.Account + (*HistorySyncMsg)(nil), // 13: WAWebProtobufsHistorySync.HistorySyncMsg + (*Pushname)(nil), // 14: WAWebProtobufsHistorySync.Pushname + (*WallpaperSettings)(nil), // 15: WAWebProtobufsHistorySync.WallpaperSettings + (*GlobalSettings)(nil), // 16: WAWebProtobufsHistorySync.GlobalSettings + (*AutoDownloadSettings)(nil), // 17: WAWebProtobufsHistorySync.AutoDownloadSettings + (*StickerMetadata)(nil), // 18: WAWebProtobufsHistorySync.StickerMetadata + (*PastParticipants)(nil), // 19: WAWebProtobufsHistorySync.PastParticipants + (*AvatarUserSettings)(nil), // 20: WAWebProtobufsHistorySync.AvatarUserSettings + (*NotificationSettings)(nil), // 21: WAWebProtobufsHistorySync.NotificationSettings + (*waWeb.WebMessageInfo)(nil), // 22: WAWebProtobufsWeb.WebMessageInfo + (*waSyncAction.CallLogRecord)(nil), // 23: WAWebProtobufSyncAction.CallLogRecord + (*waE2E.DisappearingMode)(nil), // 24: WAWebProtobufsE2E.DisappearingMode + (waCommon.LimitSharing_Trigger)(0), // 25: WACommon.LimitSharing.Trigger + (*waE2E.MemberLabel)(nil), // 26: WAWebProtobufsE2E.MemberLabel + (*waChatLockSettings.ChatLockSettings)(nil), // 27: WAWebProtobufsChatLockSettings.ChatLockSettings } var file_waHistorySync_WAWebProtobufsHistorySync_proto_depIdxs = []int32{ 3, // 0: WAWebProtobufsHistorySync.HistorySync.syncType:type_name -> WAWebProtobufsHistorySync.HistorySync.HistorySyncType 8, // 1: WAWebProtobufsHistorySync.HistorySync.conversations:type_name -> WAWebProtobufsHistorySync.Conversation - 21, // 2: WAWebProtobufsHistorySync.HistorySync.statusV3Messages:type_name -> WAWebProtobufsWeb.WebMessageInfo - 13, // 3: WAWebProtobufsHistorySync.HistorySync.pushnames:type_name -> WAWebProtobufsHistorySync.Pushname - 15, // 4: WAWebProtobufsHistorySync.HistorySync.globalSettings:type_name -> WAWebProtobufsHistorySync.GlobalSettings - 17, // 5: WAWebProtobufsHistorySync.HistorySync.recentStickers:type_name -> WAWebProtobufsHistorySync.StickerMetadata - 18, // 6: WAWebProtobufsHistorySync.HistorySync.pastParticipants:type_name -> WAWebProtobufsHistorySync.PastParticipants - 22, // 7: WAWebProtobufsHistorySync.HistorySync.callLogRecords:type_name -> WASyncAction.CallLogRecord + 22, // 2: WAWebProtobufsHistorySync.HistorySync.statusV3Messages:type_name -> WAWebProtobufsWeb.WebMessageInfo + 14, // 3: WAWebProtobufsHistorySync.HistorySync.pushnames:type_name -> WAWebProtobufsHistorySync.Pushname + 16, // 4: WAWebProtobufsHistorySync.HistorySync.globalSettings:type_name -> WAWebProtobufsHistorySync.GlobalSettings + 18, // 5: WAWebProtobufsHistorySync.HistorySync.recentStickers:type_name -> WAWebProtobufsHistorySync.StickerMetadata + 19, // 6: WAWebProtobufsHistorySync.HistorySync.pastParticipants:type_name -> WAWebProtobufsHistorySync.PastParticipants + 23, // 7: WAWebProtobufsHistorySync.HistorySync.callLogRecords:type_name -> WAWebProtobufSyncAction.CallLogRecord 2, // 8: WAWebProtobufsHistorySync.HistorySync.aiWaitListState:type_name -> WAWebProtobufsHistorySync.HistorySync.BotAIWaitListState 11, // 9: WAWebProtobufsHistorySync.HistorySync.phoneNumberToLidMappings:type_name -> WAWebProtobufsHistorySync.PhoneNumberToLIDMapping - 12, // 10: WAWebProtobufsHistorySync.Conversation.messages:type_name -> WAWebProtobufsHistorySync.HistorySyncMsg - 4, // 11: WAWebProtobufsHistorySync.Conversation.endOfHistoryTransferType:type_name -> WAWebProtobufsHistorySync.Conversation.EndOfHistoryTransferType - 23, // 12: WAWebProtobufsHistorySync.Conversation.disappearingMode:type_name -> WAWebProtobufsE2E.DisappearingMode - 9, // 13: WAWebProtobufsHistorySync.Conversation.participant:type_name -> WAWebProtobufsHistorySync.GroupParticipant - 14, // 14: WAWebProtobufsHistorySync.Conversation.wallpaper:type_name -> WAWebProtobufsHistorySync.WallpaperSettings - 0, // 15: WAWebProtobufsHistorySync.Conversation.mediaVisibility:type_name -> WAWebProtobufsHistorySync.MediaVisibility - 1, // 16: WAWebProtobufsHistorySync.Conversation.systemMessageToInsert:type_name -> WAWebProtobufsHistorySync.PrivacySystemMessage - 5, // 17: WAWebProtobufsHistorySync.GroupParticipant.rank:type_name -> WAWebProtobufsHistorySync.GroupParticipant.Rank - 6, // 18: WAWebProtobufsHistorySync.PastParticipant.leaveReason:type_name -> WAWebProtobufsHistorySync.PastParticipant.LeaveReason - 21, // 19: WAWebProtobufsHistorySync.HistorySyncMsg.message:type_name -> WAWebProtobufsWeb.WebMessageInfo - 14, // 20: WAWebProtobufsHistorySync.GlobalSettings.lightThemeWallpaper:type_name -> WAWebProtobufsHistorySync.WallpaperSettings - 0, // 21: WAWebProtobufsHistorySync.GlobalSettings.mediaVisibility:type_name -> WAWebProtobufsHistorySync.MediaVisibility - 14, // 22: WAWebProtobufsHistorySync.GlobalSettings.darkThemeWallpaper:type_name -> WAWebProtobufsHistorySync.WallpaperSettings - 16, // 23: WAWebProtobufsHistorySync.GlobalSettings.autoDownloadWiFi:type_name -> WAWebProtobufsHistorySync.AutoDownloadSettings - 16, // 24: WAWebProtobufsHistorySync.GlobalSettings.autoDownloadCellular:type_name -> WAWebProtobufsHistorySync.AutoDownloadSettings - 16, // 25: WAWebProtobufsHistorySync.GlobalSettings.autoDownloadRoaming:type_name -> WAWebProtobufsHistorySync.AutoDownloadSettings - 19, // 26: WAWebProtobufsHistorySync.GlobalSettings.avatarUserSettings:type_name -> WAWebProtobufsHistorySync.AvatarUserSettings - 20, // 27: WAWebProtobufsHistorySync.GlobalSettings.individualNotificationSettings:type_name -> WAWebProtobufsHistorySync.NotificationSettings - 20, // 28: WAWebProtobufsHistorySync.GlobalSettings.groupNotificationSettings:type_name -> WAWebProtobufsHistorySync.NotificationSettings - 24, // 29: WAWebProtobufsHistorySync.GlobalSettings.chatLockSettings:type_name -> WAProtobufsChatLockSettings.ChatLockSettings - 10, // 30: WAWebProtobufsHistorySync.PastParticipants.pastParticipants:type_name -> WAWebProtobufsHistorySync.PastParticipant - 31, // [31:31] is the sub-list for method output_type - 31, // [31:31] is the sub-list for method input_type - 31, // [31:31] is the sub-list for extension type_name - 31, // [31:31] is the sub-list for extension extendee - 0, // [0:31] is the sub-list for field type_name + 12, // 10: WAWebProtobufsHistorySync.HistorySync.accounts:type_name -> WAWebProtobufsHistorySync.Account + 13, // 11: WAWebProtobufsHistorySync.Conversation.messages:type_name -> WAWebProtobufsHistorySync.HistorySyncMsg + 4, // 12: WAWebProtobufsHistorySync.Conversation.endOfHistoryTransferType:type_name -> WAWebProtobufsHistorySync.Conversation.EndOfHistoryTransferType + 24, // 13: WAWebProtobufsHistorySync.Conversation.disappearingMode:type_name -> WAWebProtobufsE2E.DisappearingMode + 9, // 14: WAWebProtobufsHistorySync.Conversation.participant:type_name -> WAWebProtobufsHistorySync.GroupParticipant + 15, // 15: WAWebProtobufsHistorySync.Conversation.wallpaper:type_name -> WAWebProtobufsHistorySync.WallpaperSettings + 0, // 16: WAWebProtobufsHistorySync.Conversation.mediaVisibility:type_name -> WAWebProtobufsHistorySync.MediaVisibility + 1, // 17: WAWebProtobufsHistorySync.Conversation.systemMessageToInsert:type_name -> WAWebProtobufsHistorySync.PrivacySystemMessage + 25, // 18: WAWebProtobufsHistorySync.Conversation.limitSharingTrigger:type_name -> WACommon.LimitSharing.Trigger + 5, // 19: WAWebProtobufsHistorySync.GroupParticipant.rank:type_name -> WAWebProtobufsHistorySync.GroupParticipant.Rank + 26, // 20: WAWebProtobufsHistorySync.GroupParticipant.memberLabel:type_name -> WAWebProtobufsE2E.MemberLabel + 6, // 21: WAWebProtobufsHistorySync.PastParticipant.leaveReason:type_name -> WAWebProtobufsHistorySync.PastParticipant.LeaveReason + 22, // 22: WAWebProtobufsHistorySync.HistorySyncMsg.message:type_name -> WAWebProtobufsWeb.WebMessageInfo + 15, // 23: WAWebProtobufsHistorySync.GlobalSettings.lightThemeWallpaper:type_name -> WAWebProtobufsHistorySync.WallpaperSettings + 0, // 24: WAWebProtobufsHistorySync.GlobalSettings.mediaVisibility:type_name -> WAWebProtobufsHistorySync.MediaVisibility + 15, // 25: WAWebProtobufsHistorySync.GlobalSettings.darkThemeWallpaper:type_name -> WAWebProtobufsHistorySync.WallpaperSettings + 17, // 26: WAWebProtobufsHistorySync.GlobalSettings.autoDownloadWiFi:type_name -> WAWebProtobufsHistorySync.AutoDownloadSettings + 17, // 27: WAWebProtobufsHistorySync.GlobalSettings.autoDownloadCellular:type_name -> WAWebProtobufsHistorySync.AutoDownloadSettings + 17, // 28: WAWebProtobufsHistorySync.GlobalSettings.autoDownloadRoaming:type_name -> WAWebProtobufsHistorySync.AutoDownloadSettings + 20, // 29: WAWebProtobufsHistorySync.GlobalSettings.avatarUserSettings:type_name -> WAWebProtobufsHistorySync.AvatarUserSettings + 21, // 30: WAWebProtobufsHistorySync.GlobalSettings.individualNotificationSettings:type_name -> WAWebProtobufsHistorySync.NotificationSettings + 21, // 31: WAWebProtobufsHistorySync.GlobalSettings.groupNotificationSettings:type_name -> WAWebProtobufsHistorySync.NotificationSettings + 27, // 32: WAWebProtobufsHistorySync.GlobalSettings.chatLockSettings:type_name -> WAWebProtobufsChatLockSettings.ChatLockSettings + 10, // 33: WAWebProtobufsHistorySync.PastParticipants.pastParticipants:type_name -> WAWebProtobufsHistorySync.PastParticipant + 34, // [34:34] is the sub-list for method output_type + 34, // [34:34] is the sub-list for method input_type + 34, // [34:34] is the sub-list for extension type_name + 34, // [34:34] is the sub-list for extension extendee + 0, // [0:34] is the sub-list for field type_name } func init() { file_waHistorySync_WAWebProtobufsHistorySync_proto_init() } @@ -2050,183 +2389,13 @@ func file_waHistorySync_WAWebProtobufsHistorySync_proto_init() { if File_waHistorySync_WAWebProtobufsHistorySync_proto != nil { return } - if !protoimpl.UnsafeEnabled { - file_waHistorySync_WAWebProtobufsHistorySync_proto_msgTypes[0].Exporter = func(v any, i int) any { - switch v := v.(*HistorySync); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waHistorySync_WAWebProtobufsHistorySync_proto_msgTypes[1].Exporter = func(v any, i int) any { - switch v := v.(*Conversation); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waHistorySync_WAWebProtobufsHistorySync_proto_msgTypes[2].Exporter = func(v any, i int) any { - switch v := v.(*GroupParticipant); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waHistorySync_WAWebProtobufsHistorySync_proto_msgTypes[3].Exporter = func(v any, i int) any { - switch v := v.(*PastParticipant); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waHistorySync_WAWebProtobufsHistorySync_proto_msgTypes[4].Exporter = func(v any, i int) any { - switch v := v.(*PhoneNumberToLIDMapping); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waHistorySync_WAWebProtobufsHistorySync_proto_msgTypes[5].Exporter = func(v any, i int) any { - switch v := v.(*HistorySyncMsg); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waHistorySync_WAWebProtobufsHistorySync_proto_msgTypes[6].Exporter = func(v any, i int) any { - switch v := v.(*Pushname); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waHistorySync_WAWebProtobufsHistorySync_proto_msgTypes[7].Exporter = func(v any, i int) any { - switch v := v.(*WallpaperSettings); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waHistorySync_WAWebProtobufsHistorySync_proto_msgTypes[8].Exporter = func(v any, i int) any { - switch v := v.(*GlobalSettings); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waHistorySync_WAWebProtobufsHistorySync_proto_msgTypes[9].Exporter = func(v any, i int) any { - switch v := v.(*AutoDownloadSettings); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waHistorySync_WAWebProtobufsHistorySync_proto_msgTypes[10].Exporter = func(v any, i int) any { - switch v := v.(*StickerMetadata); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waHistorySync_WAWebProtobufsHistorySync_proto_msgTypes[11].Exporter = func(v any, i int) any { - switch v := v.(*PastParticipants); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waHistorySync_WAWebProtobufsHistorySync_proto_msgTypes[12].Exporter = func(v any, i int) any { - switch v := v.(*AvatarUserSettings); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waHistorySync_WAWebProtobufsHistorySync_proto_msgTypes[13].Exporter = func(v any, i int) any { - switch v := v.(*NotificationSettings); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_waHistorySync_WAWebProtobufsHistorySync_proto_rawDesc, + RawDescriptor: unsafe.Slice(unsafe.StringData(file_waHistorySync_WAWebProtobufsHistorySync_proto_rawDesc), len(file_waHistorySync_WAWebProtobufsHistorySync_proto_rawDesc)), NumEnums: 7, - NumMessages: 14, + NumMessages: 15, NumExtensions: 0, NumServices: 0, }, @@ -2236,7 +2405,6 @@ func file_waHistorySync_WAWebProtobufsHistorySync_proto_init() { MessageInfos: file_waHistorySync_WAWebProtobufsHistorySync_proto_msgTypes, }.Build() File_waHistorySync_WAWebProtobufsHistorySync_proto = out.File - file_waHistorySync_WAWebProtobufsHistorySync_proto_rawDesc = nil file_waHistorySync_WAWebProtobufsHistorySync_proto_goTypes = nil file_waHistorySync_WAWebProtobufsHistorySync_proto_depIdxs = nil } diff --git a/vendor/go.mau.fi/whatsmeow/proto/waHistorySync/WAWebProtobufsHistorySync.pb.raw b/vendor/go.mau.fi/whatsmeow/proto/waHistorySync/WAWebProtobufsHistorySync.pb.raw deleted file mode 100644 index 683f347a31..0000000000 Binary files a/vendor/go.mau.fi/whatsmeow/proto/waHistorySync/WAWebProtobufsHistorySync.pb.raw and /dev/null differ diff --git a/vendor/go.mau.fi/whatsmeow/proto/waHistorySync/WAWebProtobufsHistorySync.proto b/vendor/go.mau.fi/whatsmeow/proto/waHistorySync/WAWebProtobufsHistorySync.proto index bf5dbe4829..958b0d90ef 100644 --- a/vendor/go.mau.fi/whatsmeow/proto/waHistorySync/WAWebProtobufsHistorySync.proto +++ b/vendor/go.mau.fi/whatsmeow/proto/waHistorySync/WAWebProtobufsHistorySync.proto @@ -2,9 +2,10 @@ syntax = "proto2"; package WAWebProtobufsHistorySync; option go_package = "go.mau.fi/whatsmeow/proto/waHistorySync"; -import "waSyncAction/WASyncAction.proto"; -import "waChatLockSettings/WAProtobufsChatLockSettings.proto"; +import "waSyncAction/WAWebProtobufSyncAction.proto"; +import "waChatLockSettings/WAWebProtobufsChatLockSettings.proto"; import "waE2E/WAWebProtobufsE2E.proto"; +import "waCommon/WACommon.proto"; import "waWeb/WAWebProtobufsWeb.proto"; enum MediaVisibility { @@ -46,10 +47,12 @@ message HistorySync { optional uint32 threadDsTimeframeOffset = 10; repeated StickerMetadata recentStickers = 11; repeated PastParticipants pastParticipants = 12; - repeated WASyncAction.CallLogRecord callLogRecords = 13; + repeated WAWebProtobufSyncAction.CallLogRecord callLogRecords = 13; optional BotAIWaitListState aiWaitListState = 14; repeated PhoneNumberToLIDMapping phoneNumberToLidMappings = 15; optional string companionMetaNonce = 16; + optional bytes shareableChatIdentifierEncryptionKey = 17; + repeated Account accounts = 18; } message Conversation { @@ -57,6 +60,7 @@ message Conversation { COMPLETE_BUT_MORE_MESSAGES_REMAIN_ON_PRIMARY = 0; COMPLETE_AND_NO_MORE_MESSAGE_REMAIN_ON_PRIMARY = 1; COMPLETE_ON_DEMAND_SYNC_BUT_MORE_MSG_REMAIN_ON_PRIMARY = 2; + COMPLETE_ON_DEMAND_SYNC_WITH_MORE_MSG_ON_PRIMARY_BUT_NO_ACCESS = 3; } required string ID = 1; @@ -107,6 +111,12 @@ message Conversation { optional bool locked = 46; optional PrivacySystemMessage systemMessageToInsert = 47; optional bool capiCreatedGroup = 48; + optional string accountLid = 49; + optional bool limitSharing = 50; + optional int64 limitSharingSettingTimestamp = 51; + optional WACommon.LimitSharing.Trigger limitSharingTrigger = 52; + optional bool limitSharingInitiatedByMe = 53; + optional bool maibaAiThreadEnabled = 54; } message GroupParticipant { @@ -118,6 +128,7 @@ message GroupParticipant { required string userJID = 1; optional Rank rank = 2; + optional WAWebProtobufsE2E.MemberLabel memberLabel = 3; } message PastParticipant { @@ -136,6 +147,13 @@ message PhoneNumberToLIDMapping { optional string lidJID = 2; } +message Account { + optional string lid = 1; + optional string username = 2; + optional string countryCode = 3; + optional bool isUsernameDeleted = 4; +} + message HistorySyncMsg { optional WAWebProtobufsWeb.WebMessageInfo message = 1; optional uint64 msgOrderID = 2; @@ -170,7 +188,8 @@ message GlobalSettings { optional int32 photoQualityMode = 16; optional NotificationSettings individualNotificationSettings = 17; optional NotificationSettings groupNotificationSettings = 18; - optional WAProtobufsChatLockSettings.ChatLockSettings chatLockSettings = 19; + optional WAWebProtobufsChatLockSettings.ChatLockSettings chatLockSettings = 19; + optional int64 chatDbLidMigrationTimestamp = 20; } message AutoDownloadSettings { @@ -193,6 +212,8 @@ message StickerMetadata { optional float weight = 10; optional int64 lastStickerSentTS = 11; optional bool isLottie = 12; + optional string imageHash = 13; + optional bool isAvatarSticker = 14; } message PastParticipants { diff --git a/vendor/go.mau.fi/whatsmeow/proto/waHistorySync/legacy.go b/vendor/go.mau.fi/whatsmeow/proto/waHistorySync/legacy.go deleted file mode 100644 index 410a80fe27..0000000000 --- a/vendor/go.mau.fi/whatsmeow/proto/waHistorySync/legacy.go +++ /dev/null @@ -1,11 +0,0 @@ -package waHistorySync - -// Deprecated: Use GetID -func (x *Conversation) GetId() string { - return x.GetID() -} - -// Deprecated: Use GetID -func (x *Pushname) GetId() string { - return x.GetID() -} diff --git a/vendor/go.mau.fi/whatsmeow/proto/waLidMigrationSyncPayload/WAWebProtobufLidMigrationSyncPayload.pb.go b/vendor/go.mau.fi/whatsmeow/proto/waLidMigrationSyncPayload/WAWebProtobufLidMigrationSyncPayload.pb.go new file mode 100644 index 0000000000..c091c5427b --- /dev/null +++ b/vendor/go.mau.fi/whatsmeow/proto/waLidMigrationSyncPayload/WAWebProtobufLidMigrationSyncPayload.pb.go @@ -0,0 +1,198 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.36.10 +// protoc v3.21.12 +// source: waLidMigrationSyncPayload/WAWebProtobufLidMigrationSyncPayload.proto + +package waLidMigrationSyncPayload + +import ( + reflect "reflect" + sync "sync" + unsafe "unsafe" + + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type LIDMigrationMapping struct { + state protoimpl.MessageState `protogen:"open.v1"` + Pn *uint64 `protobuf:"varint,1,req,name=pn" json:"pn,omitempty"` + AssignedLid *uint64 `protobuf:"varint,2,req,name=assignedLid" json:"assignedLid,omitempty"` + LatestLid *uint64 `protobuf:"varint,3,opt,name=latestLid" json:"latestLid,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *LIDMigrationMapping) Reset() { + *x = LIDMigrationMapping{} + mi := &file_waLidMigrationSyncPayload_WAWebProtobufLidMigrationSyncPayload_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *LIDMigrationMapping) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*LIDMigrationMapping) ProtoMessage() {} + +func (x *LIDMigrationMapping) ProtoReflect() protoreflect.Message { + mi := &file_waLidMigrationSyncPayload_WAWebProtobufLidMigrationSyncPayload_proto_msgTypes[0] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use LIDMigrationMapping.ProtoReflect.Descriptor instead. +func (*LIDMigrationMapping) Descriptor() ([]byte, []int) { + return file_waLidMigrationSyncPayload_WAWebProtobufLidMigrationSyncPayload_proto_rawDescGZIP(), []int{0} +} + +func (x *LIDMigrationMapping) GetPn() uint64 { + if x != nil && x.Pn != nil { + return *x.Pn + } + return 0 +} + +func (x *LIDMigrationMapping) GetAssignedLid() uint64 { + if x != nil && x.AssignedLid != nil { + return *x.AssignedLid + } + return 0 +} + +func (x *LIDMigrationMapping) GetLatestLid() uint64 { + if x != nil && x.LatestLid != nil { + return *x.LatestLid + } + return 0 +} + +type LIDMigrationMappingSyncPayload struct { + state protoimpl.MessageState `protogen:"open.v1"` + PnToLidMappings []*LIDMigrationMapping `protobuf:"bytes,1,rep,name=pnToLidMappings" json:"pnToLidMappings,omitempty"` + ChatDbMigrationTimestamp *uint64 `protobuf:"varint,2,opt,name=chatDbMigrationTimestamp" json:"chatDbMigrationTimestamp,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *LIDMigrationMappingSyncPayload) Reset() { + *x = LIDMigrationMappingSyncPayload{} + mi := &file_waLidMigrationSyncPayload_WAWebProtobufLidMigrationSyncPayload_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *LIDMigrationMappingSyncPayload) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*LIDMigrationMappingSyncPayload) ProtoMessage() {} + +func (x *LIDMigrationMappingSyncPayload) ProtoReflect() protoreflect.Message { + mi := &file_waLidMigrationSyncPayload_WAWebProtobufLidMigrationSyncPayload_proto_msgTypes[1] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use LIDMigrationMappingSyncPayload.ProtoReflect.Descriptor instead. +func (*LIDMigrationMappingSyncPayload) Descriptor() ([]byte, []int) { + return file_waLidMigrationSyncPayload_WAWebProtobufLidMigrationSyncPayload_proto_rawDescGZIP(), []int{1} +} + +func (x *LIDMigrationMappingSyncPayload) GetPnToLidMappings() []*LIDMigrationMapping { + if x != nil { + return x.PnToLidMappings + } + return nil +} + +func (x *LIDMigrationMappingSyncPayload) GetChatDbMigrationTimestamp() uint64 { + if x != nil && x.ChatDbMigrationTimestamp != nil { + return *x.ChatDbMigrationTimestamp + } + return 0 +} + +var File_waLidMigrationSyncPayload_WAWebProtobufLidMigrationSyncPayload_proto protoreflect.FileDescriptor + +const file_waLidMigrationSyncPayload_WAWebProtobufLidMigrationSyncPayload_proto_rawDesc = "" + + "\n" + + "DwaLidMigrationSyncPayload/WAWebProtobufLidMigrationSyncPayload.proto\x12$WAWebProtobufLidMigrationSyncPayload\"e\n" + + "\x13LIDMigrationMapping\x12\x0e\n" + + "\x02pn\x18\x01 \x02(\x04R\x02pn\x12 \n" + + "\vassignedLid\x18\x02 \x02(\x04R\vassignedLid\x12\x1c\n" + + "\tlatestLid\x18\x03 \x01(\x04R\tlatestLid\"\xc1\x01\n" + + "\x1eLIDMigrationMappingSyncPayload\x12c\n" + + "\x0fpnToLidMappings\x18\x01 \x03(\v29.WAWebProtobufLidMigrationSyncPayload.LIDMigrationMappingR\x0fpnToLidMappings\x12:\n" + + "\x18chatDbMigrationTimestamp\x18\x02 \x01(\x04R\x18chatDbMigrationTimestampB5Z3go.mau.fi/whatsmeow/proto/waLidMigrationSyncPayload" + +var ( + file_waLidMigrationSyncPayload_WAWebProtobufLidMigrationSyncPayload_proto_rawDescOnce sync.Once + file_waLidMigrationSyncPayload_WAWebProtobufLidMigrationSyncPayload_proto_rawDescData []byte +) + +func file_waLidMigrationSyncPayload_WAWebProtobufLidMigrationSyncPayload_proto_rawDescGZIP() []byte { + file_waLidMigrationSyncPayload_WAWebProtobufLidMigrationSyncPayload_proto_rawDescOnce.Do(func() { + file_waLidMigrationSyncPayload_WAWebProtobufLidMigrationSyncPayload_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_waLidMigrationSyncPayload_WAWebProtobufLidMigrationSyncPayload_proto_rawDesc), len(file_waLidMigrationSyncPayload_WAWebProtobufLidMigrationSyncPayload_proto_rawDesc))) + }) + return file_waLidMigrationSyncPayload_WAWebProtobufLidMigrationSyncPayload_proto_rawDescData +} + +var file_waLidMigrationSyncPayload_WAWebProtobufLidMigrationSyncPayload_proto_msgTypes = make([]protoimpl.MessageInfo, 2) +var file_waLidMigrationSyncPayload_WAWebProtobufLidMigrationSyncPayload_proto_goTypes = []any{ + (*LIDMigrationMapping)(nil), // 0: WAWebProtobufLidMigrationSyncPayload.LIDMigrationMapping + (*LIDMigrationMappingSyncPayload)(nil), // 1: WAWebProtobufLidMigrationSyncPayload.LIDMigrationMappingSyncPayload +} +var file_waLidMigrationSyncPayload_WAWebProtobufLidMigrationSyncPayload_proto_depIdxs = []int32{ + 0, // 0: WAWebProtobufLidMigrationSyncPayload.LIDMigrationMappingSyncPayload.pnToLidMappings:type_name -> WAWebProtobufLidMigrationSyncPayload.LIDMigrationMapping + 1, // [1:1] is the sub-list for method output_type + 1, // [1:1] is the sub-list for method input_type + 1, // [1:1] is the sub-list for extension type_name + 1, // [1:1] is the sub-list for extension extendee + 0, // [0:1] is the sub-list for field type_name +} + +func init() { file_waLidMigrationSyncPayload_WAWebProtobufLidMigrationSyncPayload_proto_init() } +func file_waLidMigrationSyncPayload_WAWebProtobufLidMigrationSyncPayload_proto_init() { + if File_waLidMigrationSyncPayload_WAWebProtobufLidMigrationSyncPayload_proto != nil { + return + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: unsafe.Slice(unsafe.StringData(file_waLidMigrationSyncPayload_WAWebProtobufLidMigrationSyncPayload_proto_rawDesc), len(file_waLidMigrationSyncPayload_WAWebProtobufLidMigrationSyncPayload_proto_rawDesc)), + NumEnums: 0, + NumMessages: 2, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_waLidMigrationSyncPayload_WAWebProtobufLidMigrationSyncPayload_proto_goTypes, + DependencyIndexes: file_waLidMigrationSyncPayload_WAWebProtobufLidMigrationSyncPayload_proto_depIdxs, + MessageInfos: file_waLidMigrationSyncPayload_WAWebProtobufLidMigrationSyncPayload_proto_msgTypes, + }.Build() + File_waLidMigrationSyncPayload_WAWebProtobufLidMigrationSyncPayload_proto = out.File + file_waLidMigrationSyncPayload_WAWebProtobufLidMigrationSyncPayload_proto_goTypes = nil + file_waLidMigrationSyncPayload_WAWebProtobufLidMigrationSyncPayload_proto_depIdxs = nil +} diff --git a/vendor/go.mau.fi/whatsmeow/proto/waLidMigrationSyncPayload/WAWebProtobufLidMigrationSyncPayload.proto b/vendor/go.mau.fi/whatsmeow/proto/waLidMigrationSyncPayload/WAWebProtobufLidMigrationSyncPayload.proto new file mode 100644 index 0000000000..a0b044d147 --- /dev/null +++ b/vendor/go.mau.fi/whatsmeow/proto/waLidMigrationSyncPayload/WAWebProtobufLidMigrationSyncPayload.proto @@ -0,0 +1,14 @@ +syntax = "proto2"; +package WAWebProtobufLidMigrationSyncPayload; +option go_package = "go.mau.fi/whatsmeow/proto/waLidMigrationSyncPayload"; + +message LIDMigrationMapping { + required uint64 pn = 1; + required uint64 assignedLid = 2; + optional uint64 latestLid = 3; +} + +message LIDMigrationMappingSyncPayload { + repeated LIDMigrationMapping pnToLidMappings = 1; + optional uint64 chatDbMigrationTimestamp = 2; +} diff --git a/vendor/go.mau.fi/whatsmeow/proto/waMediaTransport/WAMediaTransport.pb.go b/vendor/go.mau.fi/whatsmeow/proto/waMediaTransport/WAMediaTransport.pb.go index b0f3bfe39f..d79f20c3dd 100644 --- a/vendor/go.mau.fi/whatsmeow/proto/waMediaTransport/WAMediaTransport.pb.go +++ b/vendor/go.mau.fi/whatsmeow/proto/waMediaTransport/WAMediaTransport.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 +// protoc-gen-go v1.36.10 // protoc v3.21.12 // source: waMediaTransport/WAMediaTransport.proto @@ -9,12 +9,12 @@ package waMediaTransport import ( reflect "reflect" sync "sync" + unsafe "unsafe" - waCommon "go.mau.fi/whatsmeow/proto/waCommon" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" - _ "embed" + waCommon "go.mau.fi/whatsmeow/proto/waCommon" ) const ( @@ -264,21 +264,18 @@ func (AudioTransport_Integral_AudioFormat) EnumDescriptor() ([]byte, []int) { } type WAMediaTransport struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Integral *WAMediaTransport_Integral `protobuf:"bytes,1,opt,name=integral" json:"integral,omitempty"` + Ancillary *WAMediaTransport_Ancillary `protobuf:"bytes,2,opt,name=ancillary" json:"ancillary,omitempty"` unknownFields protoimpl.UnknownFields - - Integral *WAMediaTransport_Integral `protobuf:"bytes,1,opt,name=integral" json:"integral,omitempty"` - Ancillary *WAMediaTransport_Ancillary `protobuf:"bytes,2,opt,name=ancillary" json:"ancillary,omitempty"` + sizeCache protoimpl.SizeCache } func (x *WAMediaTransport) Reset() { *x = WAMediaTransport{} - if protoimpl.UnsafeEnabled { - mi := &file_waMediaTransport_WAMediaTransport_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waMediaTransport_WAMediaTransport_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *WAMediaTransport) String() string { @@ -289,7 +286,7 @@ func (*WAMediaTransport) ProtoMessage() {} func (x *WAMediaTransport) ProtoReflect() protoreflect.Message { mi := &file_waMediaTransport_WAMediaTransport_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -319,21 +316,18 @@ func (x *WAMediaTransport) GetAncillary() *WAMediaTransport_Ancillary { } type ImageTransport struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Integral *ImageTransport_Integral `protobuf:"bytes,1,opt,name=integral" json:"integral,omitempty"` + Ancillary *ImageTransport_Ancillary `protobuf:"bytes,2,opt,name=ancillary" json:"ancillary,omitempty"` unknownFields protoimpl.UnknownFields - - Integral *ImageTransport_Integral `protobuf:"bytes,1,opt,name=integral" json:"integral,omitempty"` - Ancillary *ImageTransport_Ancillary `protobuf:"bytes,2,opt,name=ancillary" json:"ancillary,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ImageTransport) Reset() { *x = ImageTransport{} - if protoimpl.UnsafeEnabled { - mi := &file_waMediaTransport_WAMediaTransport_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waMediaTransport_WAMediaTransport_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ImageTransport) String() string { @@ -344,7 +338,7 @@ func (*ImageTransport) ProtoMessage() {} func (x *ImageTransport) ProtoReflect() protoreflect.Message { mi := &file_waMediaTransport_WAMediaTransport_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -374,21 +368,18 @@ func (x *ImageTransport) GetAncillary() *ImageTransport_Ancillary { } type VideoTransport struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Integral *VideoTransport_Integral `protobuf:"bytes,1,opt,name=integral" json:"integral,omitempty"` + Ancillary *VideoTransport_Ancillary `protobuf:"bytes,2,opt,name=ancillary" json:"ancillary,omitempty"` unknownFields protoimpl.UnknownFields - - Integral *VideoTransport_Integral `protobuf:"bytes,1,opt,name=integral" json:"integral,omitempty"` - Ancillary *VideoTransport_Ancillary `protobuf:"bytes,2,opt,name=ancillary" json:"ancillary,omitempty"` + sizeCache protoimpl.SizeCache } func (x *VideoTransport) Reset() { *x = VideoTransport{} - if protoimpl.UnsafeEnabled { - mi := &file_waMediaTransport_WAMediaTransport_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waMediaTransport_WAMediaTransport_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *VideoTransport) String() string { @@ -399,7 +390,7 @@ func (*VideoTransport) ProtoMessage() {} func (x *VideoTransport) ProtoReflect() protoreflect.Message { mi := &file_waMediaTransport_WAMediaTransport_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -429,21 +420,18 @@ func (x *VideoTransport) GetAncillary() *VideoTransport_Ancillary { } type AudioTransport struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Integral *AudioTransport_Integral `protobuf:"bytes,1,opt,name=integral" json:"integral,omitempty"` + Ancillary *AudioTransport_Ancillary `protobuf:"bytes,2,opt,name=ancillary" json:"ancillary,omitempty"` unknownFields protoimpl.UnknownFields - - Integral *AudioTransport_Integral `protobuf:"bytes,1,opt,name=integral" json:"integral,omitempty"` - Ancillary *AudioTransport_Ancillary `protobuf:"bytes,2,opt,name=ancillary" json:"ancillary,omitempty"` + sizeCache protoimpl.SizeCache } func (x *AudioTransport) Reset() { *x = AudioTransport{} - if protoimpl.UnsafeEnabled { - mi := &file_waMediaTransport_WAMediaTransport_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waMediaTransport_WAMediaTransport_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *AudioTransport) String() string { @@ -454,7 +442,7 @@ func (*AudioTransport) ProtoMessage() {} func (x *AudioTransport) ProtoReflect() protoreflect.Message { mi := &file_waMediaTransport_WAMediaTransport_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -484,21 +472,18 @@ func (x *AudioTransport) GetAncillary() *AudioTransport_Ancillary { } type DocumentTransport struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Integral *DocumentTransport_Integral `protobuf:"bytes,1,opt,name=integral" json:"integral,omitempty"` + Ancillary *DocumentTransport_Ancillary `protobuf:"bytes,2,opt,name=ancillary" json:"ancillary,omitempty"` unknownFields protoimpl.UnknownFields - - Integral *DocumentTransport_Integral `protobuf:"bytes,1,opt,name=integral" json:"integral,omitempty"` - Ancillary *DocumentTransport_Ancillary `protobuf:"bytes,2,opt,name=ancillary" json:"ancillary,omitempty"` + sizeCache protoimpl.SizeCache } func (x *DocumentTransport) Reset() { *x = DocumentTransport{} - if protoimpl.UnsafeEnabled { - mi := &file_waMediaTransport_WAMediaTransport_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waMediaTransport_WAMediaTransport_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *DocumentTransport) String() string { @@ -509,7 +494,7 @@ func (*DocumentTransport) ProtoMessage() {} func (x *DocumentTransport) ProtoReflect() protoreflect.Message { mi := &file_waMediaTransport_WAMediaTransport_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -539,21 +524,18 @@ func (x *DocumentTransport) GetAncillary() *DocumentTransport_Ancillary { } type StickerTransport struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Integral *StickerTransport_Integral `protobuf:"bytes,1,opt,name=integral" json:"integral,omitempty"` + Ancillary *StickerTransport_Ancillary `protobuf:"bytes,2,opt,name=ancillary" json:"ancillary,omitempty"` unknownFields protoimpl.UnknownFields - - Integral *StickerTransport_Integral `protobuf:"bytes,1,opt,name=integral" json:"integral,omitempty"` - Ancillary *StickerTransport_Ancillary `protobuf:"bytes,2,opt,name=ancillary" json:"ancillary,omitempty"` + sizeCache protoimpl.SizeCache } func (x *StickerTransport) Reset() { *x = StickerTransport{} - if protoimpl.UnsafeEnabled { - mi := &file_waMediaTransport_WAMediaTransport_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waMediaTransport_WAMediaTransport_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *StickerTransport) String() string { @@ -564,7 +546,7 @@ func (*StickerTransport) ProtoMessage() {} func (x *StickerTransport) ProtoReflect() protoreflect.Message { mi := &file_waMediaTransport_WAMediaTransport_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -594,21 +576,18 @@ func (x *StickerTransport) GetAncillary() *StickerTransport_Ancillary { } type ContactTransport struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Integral *ContactTransport_Integral `protobuf:"bytes,1,opt,name=integral" json:"integral,omitempty"` + Ancillary *ContactTransport_Ancillary `protobuf:"bytes,2,opt,name=ancillary" json:"ancillary,omitempty"` unknownFields protoimpl.UnknownFields - - Integral *ContactTransport_Integral `protobuf:"bytes,1,opt,name=integral" json:"integral,omitempty"` - Ancillary *ContactTransport_Ancillary `protobuf:"bytes,2,opt,name=ancillary" json:"ancillary,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ContactTransport) Reset() { *x = ContactTransport{} - if protoimpl.UnsafeEnabled { - mi := &file_waMediaTransport_WAMediaTransport_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waMediaTransport_WAMediaTransport_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ContactTransport) String() string { @@ -619,7 +598,7 @@ func (*ContactTransport) ProtoMessage() {} func (x *ContactTransport) ProtoReflect() protoreflect.Message { mi := &file_waMediaTransport_WAMediaTransport_proto_msgTypes[6] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -649,23 +628,20 @@ func (x *ContactTransport) GetAncillary() *ContactTransport_Ancillary { } type WAMediaTransport_Ancillary struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + FileLength *uint64 `protobuf:"varint,1,opt,name=fileLength" json:"fileLength,omitempty"` + Mimetype *string `protobuf:"bytes,2,opt,name=mimetype" json:"mimetype,omitempty"` + Thumbnail *WAMediaTransport_Ancillary_Thumbnail `protobuf:"bytes,3,opt,name=thumbnail" json:"thumbnail,omitempty"` + ObjectID *string `protobuf:"bytes,4,opt,name=objectID" json:"objectID,omitempty"` unknownFields protoimpl.UnknownFields - - FileLength *uint64 `protobuf:"varint,1,opt,name=fileLength" json:"fileLength,omitempty"` - Mimetype *string `protobuf:"bytes,2,opt,name=mimetype" json:"mimetype,omitempty"` - Thumbnail *WAMediaTransport_Ancillary_Thumbnail `protobuf:"bytes,3,opt,name=thumbnail" json:"thumbnail,omitempty"` - ObjectID *string `protobuf:"bytes,4,opt,name=objectID" json:"objectID,omitempty"` + sizeCache protoimpl.SizeCache } func (x *WAMediaTransport_Ancillary) Reset() { *x = WAMediaTransport_Ancillary{} - if protoimpl.UnsafeEnabled { - mi := &file_waMediaTransport_WAMediaTransport_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waMediaTransport_WAMediaTransport_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *WAMediaTransport_Ancillary) String() string { @@ -676,7 +652,7 @@ func (*WAMediaTransport_Ancillary) ProtoMessage() {} func (x *WAMediaTransport_Ancillary) ProtoReflect() protoreflect.Message { mi := &file_waMediaTransport_WAMediaTransport_proto_msgTypes[7] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -720,24 +696,21 @@ func (x *WAMediaTransport_Ancillary) GetObjectID() string { } type WAMediaTransport_Integral struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - FileSHA256 []byte `protobuf:"bytes,1,opt,name=fileSHA256" json:"fileSHA256,omitempty"` - MediaKey []byte `protobuf:"bytes,2,opt,name=mediaKey" json:"mediaKey,omitempty"` - FileEncSHA256 []byte `protobuf:"bytes,3,opt,name=fileEncSHA256" json:"fileEncSHA256,omitempty"` - DirectPath *string `protobuf:"bytes,4,opt,name=directPath" json:"directPath,omitempty"` - MediaKeyTimestamp *int64 `protobuf:"varint,5,opt,name=mediaKeyTimestamp" json:"mediaKeyTimestamp,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + FileSHA256 []byte `protobuf:"bytes,1,opt,name=fileSHA256" json:"fileSHA256,omitempty"` + MediaKey []byte `protobuf:"bytes,2,opt,name=mediaKey" json:"mediaKey,omitempty"` + FileEncSHA256 []byte `protobuf:"bytes,3,opt,name=fileEncSHA256" json:"fileEncSHA256,omitempty"` + DirectPath *string `protobuf:"bytes,4,opt,name=directPath" json:"directPath,omitempty"` + MediaKeyTimestamp *int64 `protobuf:"varint,5,opt,name=mediaKeyTimestamp" json:"mediaKeyTimestamp,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *WAMediaTransport_Integral) Reset() { *x = WAMediaTransport_Integral{} - if protoimpl.UnsafeEnabled { - mi := &file_waMediaTransport_WAMediaTransport_proto_msgTypes[8] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waMediaTransport_WAMediaTransport_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *WAMediaTransport_Integral) String() string { @@ -748,7 +721,7 @@ func (*WAMediaTransport_Integral) ProtoMessage() {} func (x *WAMediaTransport_Integral) ProtoReflect() protoreflect.Message { mi := &file_waMediaTransport_WAMediaTransport_proto_msgTypes[8] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -799,23 +772,20 @@ func (x *WAMediaTransport_Integral) GetMediaKeyTimestamp() int64 { } type WAMediaTransport_Ancillary_Thumbnail struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` JPEGThumbnail []byte `protobuf:"bytes,1,opt,name=JPEGThumbnail" json:"JPEGThumbnail,omitempty"` DownloadableThumbnail *WAMediaTransport_Ancillary_Thumbnail_DownloadableThumbnail `protobuf:"bytes,2,opt,name=downloadableThumbnail" json:"downloadableThumbnail,omitempty"` ThumbnailWidth *uint32 `protobuf:"varint,3,opt,name=thumbnailWidth" json:"thumbnailWidth,omitempty"` ThumbnailHeight *uint32 `protobuf:"varint,4,opt,name=thumbnailHeight" json:"thumbnailHeight,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *WAMediaTransport_Ancillary_Thumbnail) Reset() { *x = WAMediaTransport_Ancillary_Thumbnail{} - if protoimpl.UnsafeEnabled { - mi := &file_waMediaTransport_WAMediaTransport_proto_msgTypes[9] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waMediaTransport_WAMediaTransport_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *WAMediaTransport_Ancillary_Thumbnail) String() string { @@ -826,7 +796,7 @@ func (*WAMediaTransport_Ancillary_Thumbnail) ProtoMessage() {} func (x *WAMediaTransport_Ancillary_Thumbnail) ProtoReflect() protoreflect.Message { mi := &file_waMediaTransport_WAMediaTransport_proto_msgTypes[9] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -870,27 +840,24 @@ func (x *WAMediaTransport_Ancillary_Thumbnail) GetThumbnailHeight() uint32 { } type WAMediaTransport_Ancillary_Thumbnail_DownloadableThumbnail struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - FileSHA256 []byte `protobuf:"bytes,1,opt,name=fileSHA256" json:"fileSHA256,omitempty"` - FileEncSHA256 []byte `protobuf:"bytes,2,opt,name=fileEncSHA256" json:"fileEncSHA256,omitempty"` - DirectPath *string `protobuf:"bytes,3,opt,name=directPath" json:"directPath,omitempty"` - MediaKey []byte `protobuf:"bytes,4,opt,name=mediaKey" json:"mediaKey,omitempty"` - MediaKeyTimestamp *int64 `protobuf:"varint,5,opt,name=mediaKeyTimestamp" json:"mediaKeyTimestamp,omitempty"` - ObjectID *string `protobuf:"bytes,6,opt,name=objectID" json:"objectID,omitempty"` - ThumbnailScansSidecar []byte `protobuf:"bytes,7,opt,name=thumbnailScansSidecar" json:"thumbnailScansSidecar,omitempty"` - ThumbnailScanLengths []uint32 `protobuf:"varint,8,rep,name=thumbnailScanLengths" json:"thumbnailScanLengths,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + FileSHA256 []byte `protobuf:"bytes,1,opt,name=fileSHA256" json:"fileSHA256,omitempty"` + FileEncSHA256 []byte `protobuf:"bytes,2,opt,name=fileEncSHA256" json:"fileEncSHA256,omitempty"` + DirectPath *string `protobuf:"bytes,3,opt,name=directPath" json:"directPath,omitempty"` + MediaKey []byte `protobuf:"bytes,4,opt,name=mediaKey" json:"mediaKey,omitempty"` + MediaKeyTimestamp *int64 `protobuf:"varint,5,opt,name=mediaKeyTimestamp" json:"mediaKeyTimestamp,omitempty"` + ObjectID *string `protobuf:"bytes,6,opt,name=objectID" json:"objectID,omitempty"` + ThumbnailScansSidecar []byte `protobuf:"bytes,7,opt,name=thumbnailScansSidecar" json:"thumbnailScansSidecar,omitempty"` + ThumbnailScanLengths []uint32 `protobuf:"varint,8,rep,name=thumbnailScanLengths" json:"thumbnailScanLengths,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *WAMediaTransport_Ancillary_Thumbnail_DownloadableThumbnail) Reset() { *x = WAMediaTransport_Ancillary_Thumbnail_DownloadableThumbnail{} - if protoimpl.UnsafeEnabled { - mi := &file_waMediaTransport_WAMediaTransport_proto_msgTypes[10] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waMediaTransport_WAMediaTransport_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *WAMediaTransport_Ancillary_Thumbnail_DownloadableThumbnail) String() string { @@ -901,7 +868,7 @@ func (*WAMediaTransport_Ancillary_Thumbnail_DownloadableThumbnail) ProtoMessage( func (x *WAMediaTransport_Ancillary_Thumbnail_DownloadableThumbnail) ProtoReflect() protoreflect.Message { mi := &file_waMediaTransport_WAMediaTransport_proto_msgTypes[10] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -973,25 +940,24 @@ func (x *WAMediaTransport_Ancillary_Thumbnail_DownloadableThumbnail) GetThumbnai } type ImageTransport_Ancillary struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Height *uint32 `protobuf:"varint,1,opt,name=height" json:"height,omitempty"` - Width *uint32 `protobuf:"varint,2,opt,name=width" json:"width,omitempty"` - ScansSidecar []byte `protobuf:"bytes,3,opt,name=scansSidecar" json:"scansSidecar,omitempty"` - ScanLengths []uint32 `protobuf:"varint,4,rep,name=scanLengths" json:"scanLengths,omitempty"` - MidQualityFileSHA256 []byte `protobuf:"bytes,5,opt,name=midQualityFileSHA256" json:"midQualityFileSHA256,omitempty"` - HdType *ImageTransport_Ancillary_HdType `protobuf:"varint,6,opt,name=hdType,enum=WAMediaTransport.ImageTransport_Ancillary_HdType" json:"hdType,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Height *uint32 `protobuf:"varint,1,opt,name=height" json:"height,omitempty"` + Width *uint32 `protobuf:"varint,2,opt,name=width" json:"width,omitempty"` + ScansSidecar []byte `protobuf:"bytes,3,opt,name=scansSidecar" json:"scansSidecar,omitempty"` + ScanLengths []uint32 `protobuf:"varint,4,rep,name=scanLengths" json:"scanLengths,omitempty"` + MidQualityFileSHA256 []byte `protobuf:"bytes,5,opt,name=midQualityFileSHA256" json:"midQualityFileSHA256,omitempty"` + HdType *ImageTransport_Ancillary_HdType `protobuf:"varint,6,opt,name=hdType,enum=WAMediaTransport.ImageTransport_Ancillary_HdType" json:"hdType,omitempty"` + MemoriesConceptScores []float32 `protobuf:"fixed32,7,rep,packed,name=memoriesConceptScores" json:"memoriesConceptScores,omitempty"` + MemoriesConceptIDs []uint32 `protobuf:"varint,8,rep,packed,name=memoriesConceptIDs" json:"memoriesConceptIDs,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ImageTransport_Ancillary) Reset() { *x = ImageTransport_Ancillary{} - if protoimpl.UnsafeEnabled { - mi := &file_waMediaTransport_WAMediaTransport_proto_msgTypes[11] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waMediaTransport_WAMediaTransport_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ImageTransport_Ancillary) String() string { @@ -1002,7 +968,7 @@ func (*ImageTransport_Ancillary) ProtoMessage() {} func (x *ImageTransport_Ancillary) ProtoReflect() protoreflect.Message { mi := &file_waMediaTransport_WAMediaTransport_proto_msgTypes[11] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1059,21 +1025,32 @@ func (x *ImageTransport_Ancillary) GetHdType() ImageTransport_Ancillary_HdType { return ImageTransport_Ancillary_NONE } +func (x *ImageTransport_Ancillary) GetMemoriesConceptScores() []float32 { + if x != nil { + return x.MemoriesConceptScores + } + return nil +} + +func (x *ImageTransport_Ancillary) GetMemoriesConceptIDs() []uint32 { + if x != nil { + return x.MemoriesConceptIDs + } + return nil +} + type ImageTransport_Integral struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Transport *WAMediaTransport `protobuf:"bytes,1,opt,name=transport" json:"transport,omitempty"` unknownFields protoimpl.UnknownFields - - Transport *WAMediaTransport `protobuf:"bytes,1,opt,name=transport" json:"transport,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ImageTransport_Integral) Reset() { *x = ImageTransport_Integral{} - if protoimpl.UnsafeEnabled { - mi := &file_waMediaTransport_WAMediaTransport_proto_msgTypes[12] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waMediaTransport_WAMediaTransport_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ImageTransport_Integral) String() string { @@ -1084,7 +1061,7 @@ func (*ImageTransport_Integral) ProtoMessage() {} func (x *ImageTransport_Integral) ProtoReflect() protoreflect.Message { mi := &file_waMediaTransport_WAMediaTransport_proto_msgTypes[12] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1107,26 +1084,25 @@ func (x *ImageTransport_Integral) GetTransport() *WAMediaTransport { } type VideoTransport_Ancillary struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Seconds *uint32 `protobuf:"varint,1,opt,name=seconds" json:"seconds,omitempty"` - Caption *waCommon.MessageText `protobuf:"bytes,2,opt,name=caption" json:"caption,omitempty"` - GifPlayback *bool `protobuf:"varint,3,opt,name=gifPlayback" json:"gifPlayback,omitempty"` - Height *uint32 `protobuf:"varint,4,opt,name=height" json:"height,omitempty"` - Width *uint32 `protobuf:"varint,5,opt,name=width" json:"width,omitempty"` - Sidecar []byte `protobuf:"bytes,6,opt,name=sidecar" json:"sidecar,omitempty"` - GifAttribution *VideoTransport_Ancillary_Attribution `protobuf:"varint,7,opt,name=gifAttribution,enum=WAMediaTransport.VideoTransport_Ancillary_Attribution" json:"gifAttribution,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Seconds *uint32 `protobuf:"varint,1,opt,name=seconds" json:"seconds,omitempty"` + Caption *waCommon.MessageText `protobuf:"bytes,2,opt,name=caption" json:"caption,omitempty"` + GifPlayback *bool `protobuf:"varint,3,opt,name=gifPlayback" json:"gifPlayback,omitempty"` + Height *uint32 `protobuf:"varint,4,opt,name=height" json:"height,omitempty"` + Width *uint32 `protobuf:"varint,5,opt,name=width" json:"width,omitempty"` + Sidecar []byte `protobuf:"bytes,6,opt,name=sidecar" json:"sidecar,omitempty"` + GifAttribution *VideoTransport_Ancillary_Attribution `protobuf:"varint,7,opt,name=gifAttribution,enum=WAMediaTransport.VideoTransport_Ancillary_Attribution" json:"gifAttribution,omitempty"` + AccessibilityLabel *string `protobuf:"bytes,8,opt,name=accessibilityLabel" json:"accessibilityLabel,omitempty"` + IsHd *bool `protobuf:"varint,9,opt,name=isHd" json:"isHd,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *VideoTransport_Ancillary) Reset() { *x = VideoTransport_Ancillary{} - if protoimpl.UnsafeEnabled { - mi := &file_waMediaTransport_WAMediaTransport_proto_msgTypes[13] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waMediaTransport_WAMediaTransport_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *VideoTransport_Ancillary) String() string { @@ -1137,7 +1113,7 @@ func (*VideoTransport_Ancillary) ProtoMessage() {} func (x *VideoTransport_Ancillary) ProtoReflect() protoreflect.Message { mi := &file_waMediaTransport_WAMediaTransport_proto_msgTypes[13] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1201,21 +1177,32 @@ func (x *VideoTransport_Ancillary) GetGifAttribution() VideoTransport_Ancillary_ return VideoTransport_Ancillary_NONE } +func (x *VideoTransport_Ancillary) GetAccessibilityLabel() string { + if x != nil && x.AccessibilityLabel != nil { + return *x.AccessibilityLabel + } + return "" +} + +func (x *VideoTransport_Ancillary) GetIsHd() bool { + if x != nil && x.IsHd != nil { + return *x.IsHd + } + return false +} + type VideoTransport_Integral struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Transport *WAMediaTransport `protobuf:"bytes,1,opt,name=transport" json:"transport,omitempty"` unknownFields protoimpl.UnknownFields - - Transport *WAMediaTransport `protobuf:"bytes,1,opt,name=transport" json:"transport,omitempty"` + sizeCache protoimpl.SizeCache } func (x *VideoTransport_Integral) Reset() { *x = VideoTransport_Integral{} - if protoimpl.UnsafeEnabled { - mi := &file_waMediaTransport_WAMediaTransport_proto_msgTypes[14] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waMediaTransport_WAMediaTransport_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *VideoTransport_Integral) String() string { @@ -1226,7 +1213,7 @@ func (*VideoTransport_Integral) ProtoMessage() {} func (x *VideoTransport_Integral) ProtoReflect() protoreflect.Message { mi := &file_waMediaTransport_WAMediaTransport_proto_msgTypes[14] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1249,21 +1236,20 @@ func (x *VideoTransport_Integral) GetTransport() *WAMediaTransport { } type AudioTransport_Ancillary struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Seconds *uint32 `protobuf:"varint,1,opt,name=seconds" json:"seconds,omitempty"` + AvatarAudio *AudioTransport_Ancillary_AvatarAudio `protobuf:"bytes,2,opt,name=avatarAudio" json:"avatarAudio,omitempty"` + WaveformData *string `protobuf:"bytes,3,opt,name=waveformData" json:"waveformData,omitempty"` + Waveform []byte `protobuf:"bytes,4,opt,name=waveform" json:"waveform,omitempty"` unknownFields protoimpl.UnknownFields - - Seconds *uint32 `protobuf:"varint,1,opt,name=seconds" json:"seconds,omitempty"` - AvatarAudio *AudioTransport_Ancillary_AvatarAudio `protobuf:"bytes,2,opt,name=avatarAudio" json:"avatarAudio,omitempty"` + sizeCache protoimpl.SizeCache } func (x *AudioTransport_Ancillary) Reset() { *x = AudioTransport_Ancillary{} - if protoimpl.UnsafeEnabled { - mi := &file_waMediaTransport_WAMediaTransport_proto_msgTypes[15] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waMediaTransport_WAMediaTransport_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *AudioTransport_Ancillary) String() string { @@ -1274,7 +1260,7 @@ func (*AudioTransport_Ancillary) ProtoMessage() {} func (x *AudioTransport_Ancillary) ProtoReflect() protoreflect.Message { mi := &file_waMediaTransport_WAMediaTransport_proto_msgTypes[15] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1303,22 +1289,33 @@ func (x *AudioTransport_Ancillary) GetAvatarAudio() *AudioTransport_Ancillary_Av return nil } +func (x *AudioTransport_Ancillary) GetWaveformData() string { + if x != nil && x.WaveformData != nil { + return *x.WaveformData + } + return "" +} + +func (x *AudioTransport_Ancillary) GetWaveform() []byte { + if x != nil { + return x.Waveform + } + return nil +} + type AudioTransport_Integral struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Transport *WAMediaTransport `protobuf:"bytes,1,opt,name=transport" json:"transport,omitempty"` + AudioFormat *AudioTransport_Integral_AudioFormat `protobuf:"varint,2,opt,name=audioFormat,enum=WAMediaTransport.AudioTransport_Integral_AudioFormat" json:"audioFormat,omitempty"` unknownFields protoimpl.UnknownFields - - Transport *WAMediaTransport `protobuf:"bytes,1,opt,name=transport" json:"transport,omitempty"` - AudioFormat *AudioTransport_Integral_AudioFormat `protobuf:"varint,2,opt,name=audioFormat,enum=WAMediaTransport.AudioTransport_Integral_AudioFormat" json:"audioFormat,omitempty"` + sizeCache protoimpl.SizeCache } func (x *AudioTransport_Integral) Reset() { *x = AudioTransport_Integral{} - if protoimpl.UnsafeEnabled { - mi := &file_waMediaTransport_WAMediaTransport_proto_msgTypes[16] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waMediaTransport_WAMediaTransport_proto_msgTypes[16] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *AudioTransport_Integral) String() string { @@ -1329,7 +1326,7 @@ func (*AudioTransport_Integral) ProtoMessage() {} func (x *AudioTransport_Integral) ProtoReflect() protoreflect.Message { mi := &file_waMediaTransport_WAMediaTransport_proto_msgTypes[16] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1359,21 +1356,18 @@ func (x *AudioTransport_Integral) GetAudioFormat() AudioTransport_Integral_Audio } type AudioTransport_Ancillary_AvatarAudio struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` PoseID *uint32 `protobuf:"varint,1,opt,name=poseID" json:"poseID,omitempty"` AvatarAnimations []*AudioTransport_Ancillary_AvatarAudio_DownloadableAvatarAnimations `protobuf:"bytes,2,rep,name=avatarAnimations" json:"avatarAnimations,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *AudioTransport_Ancillary_AvatarAudio) Reset() { *x = AudioTransport_Ancillary_AvatarAudio{} - if protoimpl.UnsafeEnabled { - mi := &file_waMediaTransport_WAMediaTransport_proto_msgTypes[17] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waMediaTransport_WAMediaTransport_proto_msgTypes[17] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *AudioTransport_Ancillary_AvatarAudio) String() string { @@ -1384,7 +1378,7 @@ func (*AudioTransport_Ancillary_AvatarAudio) ProtoMessage() {} func (x *AudioTransport_Ancillary_AvatarAudio) ProtoReflect() protoreflect.Message { mi := &file_waMediaTransport_WAMediaTransport_proto_msgTypes[17] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1414,10 +1408,7 @@ func (x *AudioTransport_Ancillary_AvatarAudio) GetAvatarAnimations() []*AudioTra } type AudioTransport_Ancillary_AvatarAudio_DownloadableAvatarAnimations struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` FileSHA256 []byte `protobuf:"bytes,1,opt,name=fileSHA256" json:"fileSHA256,omitempty"` FileEncSHA256 []byte `protobuf:"bytes,2,opt,name=fileEncSHA256" json:"fileEncSHA256,omitempty"` DirectPath *string `protobuf:"bytes,3,opt,name=directPath" json:"directPath,omitempty"` @@ -1425,15 +1416,15 @@ type AudioTransport_Ancillary_AvatarAudio_DownloadableAvatarAnimations struct { MediaKeyTimestamp *int64 `protobuf:"varint,5,opt,name=mediaKeyTimestamp" json:"mediaKeyTimestamp,omitempty"` ObjectID *string `protobuf:"bytes,6,opt,name=objectID" json:"objectID,omitempty"` AnimationsType *AudioTransport_Ancillary_AvatarAudio_AnimationsType `protobuf:"varint,7,opt,name=animationsType,enum=WAMediaTransport.AudioTransport_Ancillary_AvatarAudio_AnimationsType" json:"animationsType,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *AudioTransport_Ancillary_AvatarAudio_DownloadableAvatarAnimations) Reset() { *x = AudioTransport_Ancillary_AvatarAudio_DownloadableAvatarAnimations{} - if protoimpl.UnsafeEnabled { - mi := &file_waMediaTransport_WAMediaTransport_proto_msgTypes[18] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waMediaTransport_WAMediaTransport_proto_msgTypes[18] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *AudioTransport_Ancillary_AvatarAudio_DownloadableAvatarAnimations) String() string { @@ -1444,7 +1435,7 @@ func (*AudioTransport_Ancillary_AvatarAudio_DownloadableAvatarAnimations) ProtoM func (x *AudioTransport_Ancillary_AvatarAudio_DownloadableAvatarAnimations) ProtoReflect() protoreflect.Message { mi := &file_waMediaTransport_WAMediaTransport_proto_msgTypes[18] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1509,20 +1500,17 @@ func (x *AudioTransport_Ancillary_AvatarAudio_DownloadableAvatarAnimations) GetA } type DocumentTransport_Ancillary struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + PageCount *uint32 `protobuf:"varint,1,opt,name=pageCount" json:"pageCount,omitempty"` unknownFields protoimpl.UnknownFields - - PageCount *uint32 `protobuf:"varint,1,opt,name=pageCount" json:"pageCount,omitempty"` + sizeCache protoimpl.SizeCache } func (x *DocumentTransport_Ancillary) Reset() { *x = DocumentTransport_Ancillary{} - if protoimpl.UnsafeEnabled { - mi := &file_waMediaTransport_WAMediaTransport_proto_msgTypes[19] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waMediaTransport_WAMediaTransport_proto_msgTypes[19] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *DocumentTransport_Ancillary) String() string { @@ -1533,7 +1521,7 @@ func (*DocumentTransport_Ancillary) ProtoMessage() {} func (x *DocumentTransport_Ancillary) ProtoReflect() protoreflect.Message { mi := &file_waMediaTransport_WAMediaTransport_proto_msgTypes[19] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1556,20 +1544,17 @@ func (x *DocumentTransport_Ancillary) GetPageCount() uint32 { } type DocumentTransport_Integral struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Transport *WAMediaTransport `protobuf:"bytes,1,opt,name=transport" json:"transport,omitempty"` unknownFields protoimpl.UnknownFields - - Transport *WAMediaTransport `protobuf:"bytes,1,opt,name=transport" json:"transport,omitempty"` + sizeCache protoimpl.SizeCache } func (x *DocumentTransport_Integral) Reset() { *x = DocumentTransport_Integral{} - if protoimpl.UnsafeEnabled { - mi := &file_waMediaTransport_WAMediaTransport_proto_msgTypes[20] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waMediaTransport_WAMediaTransport_proto_msgTypes[20] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *DocumentTransport_Integral) String() string { @@ -1580,7 +1565,7 @@ func (*DocumentTransport_Integral) ProtoMessage() {} func (x *DocumentTransport_Integral) ProtoReflect() protoreflect.Message { mi := &file_waMediaTransport_WAMediaTransport_proto_msgTypes[20] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1603,27 +1588,25 @@ func (x *DocumentTransport_Integral) GetTransport() *WAMediaTransport { } type StickerTransport_Ancillary struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - PageCount *uint32 `protobuf:"varint,1,opt,name=pageCount" json:"pageCount,omitempty"` - Height *uint32 `protobuf:"varint,2,opt,name=height" json:"height,omitempty"` - Width *uint32 `protobuf:"varint,3,opt,name=width" json:"width,omitempty"` - FirstFrameLength *uint32 `protobuf:"varint,4,opt,name=firstFrameLength" json:"firstFrameLength,omitempty"` - FirstFrameSidecar []byte `protobuf:"bytes,5,opt,name=firstFrameSidecar" json:"firstFrameSidecar,omitempty"` - MustacheText *string `protobuf:"bytes,6,opt,name=mustacheText" json:"mustacheText,omitempty"` - IsThirdParty *bool `protobuf:"varint,7,opt,name=isThirdParty" json:"isThirdParty,omitempty"` - ReceiverFetchID *string `protobuf:"bytes,8,opt,name=receiverFetchID" json:"receiverFetchID,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + PageCount *uint32 `protobuf:"varint,1,opt,name=pageCount" json:"pageCount,omitempty"` + Height *uint32 `protobuf:"varint,2,opt,name=height" json:"height,omitempty"` + Width *uint32 `protobuf:"varint,3,opt,name=width" json:"width,omitempty"` + FirstFrameLength *uint32 `protobuf:"varint,4,opt,name=firstFrameLength" json:"firstFrameLength,omitempty"` + FirstFrameSidecar []byte `protobuf:"bytes,5,opt,name=firstFrameSidecar" json:"firstFrameSidecar,omitempty"` + MustacheText *string `protobuf:"bytes,6,opt,name=mustacheText" json:"mustacheText,omitempty"` + IsThirdParty *bool `protobuf:"varint,7,opt,name=isThirdParty" json:"isThirdParty,omitempty"` + ReceiverFetchID *string `protobuf:"bytes,8,opt,name=receiverFetchID" json:"receiverFetchID,omitempty"` + AccessibilityLabel *string `protobuf:"bytes,9,opt,name=accessibilityLabel" json:"accessibilityLabel,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *StickerTransport_Ancillary) Reset() { *x = StickerTransport_Ancillary{} - if protoimpl.UnsafeEnabled { - mi := &file_waMediaTransport_WAMediaTransport_proto_msgTypes[21] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waMediaTransport_WAMediaTransport_proto_msgTypes[21] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *StickerTransport_Ancillary) String() string { @@ -1634,7 +1617,7 @@ func (*StickerTransport_Ancillary) ProtoMessage() {} func (x *StickerTransport_Ancillary) ProtoReflect() protoreflect.Message { mi := &file_waMediaTransport_WAMediaTransport_proto_msgTypes[21] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1705,23 +1688,27 @@ func (x *StickerTransport_Ancillary) GetReceiverFetchID() string { return "" } -type StickerTransport_Integral struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +func (x *StickerTransport_Ancillary) GetAccessibilityLabel() string { + if x != nil && x.AccessibilityLabel != nil { + return *x.AccessibilityLabel + } + return "" +} - Transport *WAMediaTransport `protobuf:"bytes,1,opt,name=transport" json:"transport,omitempty"` - IsAnimated *bool `protobuf:"varint,2,opt,name=isAnimated" json:"isAnimated,omitempty"` - ReceiverFetchID *string `protobuf:"bytes,3,opt,name=receiverFetchID" json:"receiverFetchID,omitempty"` +type StickerTransport_Integral struct { + state protoimpl.MessageState `protogen:"open.v1"` + Transport *WAMediaTransport `protobuf:"bytes,1,opt,name=transport" json:"transport,omitempty"` + IsAnimated *bool `protobuf:"varint,2,opt,name=isAnimated" json:"isAnimated,omitempty"` + ReceiverFetchID *string `protobuf:"bytes,3,opt,name=receiverFetchID" json:"receiverFetchID,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *StickerTransport_Integral) Reset() { *x = StickerTransport_Integral{} - if protoimpl.UnsafeEnabled { - mi := &file_waMediaTransport_WAMediaTransport_proto_msgTypes[22] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waMediaTransport_WAMediaTransport_proto_msgTypes[22] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *StickerTransport_Integral) String() string { @@ -1732,7 +1719,7 @@ func (*StickerTransport_Integral) ProtoMessage() {} func (x *StickerTransport_Integral) ProtoReflect() protoreflect.Message { mi := &file_waMediaTransport_WAMediaTransport_proto_msgTypes[22] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1769,20 +1756,17 @@ func (x *StickerTransport_Integral) GetReceiverFetchID() string { } type ContactTransport_Ancillary struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + DisplayName *string `protobuf:"bytes,1,opt,name=displayName" json:"displayName,omitempty"` unknownFields protoimpl.UnknownFields - - DisplayName *string `protobuf:"bytes,1,opt,name=displayName" json:"displayName,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ContactTransport_Ancillary) Reset() { *x = ContactTransport_Ancillary{} - if protoimpl.UnsafeEnabled { - mi := &file_waMediaTransport_WAMediaTransport_proto_msgTypes[23] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waMediaTransport_WAMediaTransport_proto_msgTypes[23] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ContactTransport_Ancillary) String() string { @@ -1793,7 +1777,7 @@ func (*ContactTransport_Ancillary) ProtoMessage() {} func (x *ContactTransport_Ancillary) ProtoReflect() protoreflect.Message { mi := &file_waMediaTransport_WAMediaTransport_proto_msgTypes[23] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1816,24 +1800,21 @@ func (x *ContactTransport_Ancillary) GetDisplayName() string { } type ContactTransport_Integral struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Types that are assignable to Contact: + state protoimpl.MessageState `protogen:"open.v1"` + // Types that are valid to be assigned to Contact: // // *ContactTransport_Integral_Vcard // *ContactTransport_Integral_DownloadableVcard - Contact isContactTransport_Integral_Contact `protobuf_oneof:"contact"` + Contact isContactTransport_Integral_Contact `protobuf_oneof:"contact"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ContactTransport_Integral) Reset() { *x = ContactTransport_Integral{} - if protoimpl.UnsafeEnabled { - mi := &file_waMediaTransport_WAMediaTransport_proto_msgTypes[24] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waMediaTransport_WAMediaTransport_proto_msgTypes[24] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ContactTransport_Integral) String() string { @@ -1844,7 +1825,7 @@ func (*ContactTransport_Integral) ProtoMessage() {} func (x *ContactTransport_Integral) ProtoReflect() protoreflect.Message { mi := &file_waMediaTransport_WAMediaTransport_proto_msgTypes[24] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1859,23 +1840,27 @@ func (*ContactTransport_Integral) Descriptor() ([]byte, []int) { return file_waMediaTransport_WAMediaTransport_proto_rawDescGZIP(), []int{6, 1} } -func (m *ContactTransport_Integral) GetContact() isContactTransport_Integral_Contact { - if m != nil { - return m.Contact +func (x *ContactTransport_Integral) GetContact() isContactTransport_Integral_Contact { + if x != nil { + return x.Contact } return nil } func (x *ContactTransport_Integral) GetVcard() string { - if x, ok := x.GetContact().(*ContactTransport_Integral_Vcard); ok { - return x.Vcard + if x != nil { + if x, ok := x.Contact.(*ContactTransport_Integral_Vcard); ok { + return x.Vcard + } } return "" } func (x *ContactTransport_Integral) GetDownloadableVcard() *WAMediaTransport { - if x, ok := x.GetContact().(*ContactTransport_Integral_DownloadableVcard); ok { - return x.DownloadableVcard + if x != nil { + if x, ok := x.Contact.(*ContactTransport_Integral_DownloadableVcard); ok { + return x.DownloadableVcard + } } return nil } @@ -1898,17 +1883,166 @@ func (*ContactTransport_Integral_DownloadableVcard) isContactTransport_Integral_ var File_waMediaTransport_WAMediaTransport_proto protoreflect.FileDescriptor -//go:embed WAMediaTransport.pb.raw -var file_waMediaTransport_WAMediaTransport_proto_rawDesc []byte +const file_waMediaTransport_WAMediaTransport_proto_rawDesc = "" + + "\n" + + "'waMediaTransport/WAMediaTransport.proto\x12\x10WAMediaTransport\x1a\x17waCommon/WACommon.proto\"\xfb\b\n" + + "\x10WAMediaTransport\x12G\n" + + "\bintegral\x18\x01 \x01(\v2+.WAMediaTransport.WAMediaTransport.IntegralR\bintegral\x12J\n" + + "\tancillary\x18\x02 \x01(\v2,.WAMediaTransport.WAMediaTransport.AncillaryR\tancillary\x1a\x94\x06\n" + + "\tAncillary\x12\x1e\n" + + "\n" + + "fileLength\x18\x01 \x01(\x04R\n" + + "fileLength\x12\x1a\n" + + "\bmimetype\x18\x02 \x01(\tR\bmimetype\x12T\n" + + "\tthumbnail\x18\x03 \x01(\v26.WAMediaTransport.WAMediaTransport.Ancillary.ThumbnailR\tthumbnail\x12\x1a\n" + + "\bobjectID\x18\x04 \x01(\tR\bobjectID\x1a\xd8\x04\n" + + "\tThumbnail\x12$\n" + + "\rJPEGThumbnail\x18\x01 \x01(\fR\rJPEGThumbnail\x12\x82\x01\n" + + "\x15downloadableThumbnail\x18\x02 \x01(\v2L.WAMediaTransport.WAMediaTransport.Ancillary.Thumbnail.DownloadableThumbnailR\x15downloadableThumbnail\x12&\n" + + "\x0ethumbnailWidth\x18\x03 \x01(\rR\x0ethumbnailWidth\x12(\n" + + "\x0fthumbnailHeight\x18\x04 \x01(\rR\x0fthumbnailHeight\x1a\xcd\x02\n" + + "\x15DownloadableThumbnail\x12\x1e\n" + + "\n" + + "fileSHA256\x18\x01 \x01(\fR\n" + + "fileSHA256\x12$\n" + + "\rfileEncSHA256\x18\x02 \x01(\fR\rfileEncSHA256\x12\x1e\n" + + "\n" + + "directPath\x18\x03 \x01(\tR\n" + + "directPath\x12\x1a\n" + + "\bmediaKey\x18\x04 \x01(\fR\bmediaKey\x12,\n" + + "\x11mediaKeyTimestamp\x18\x05 \x01(\x03R\x11mediaKeyTimestamp\x12\x1a\n" + + "\bobjectID\x18\x06 \x01(\tR\bobjectID\x124\n" + + "\x15thumbnailScansSidecar\x18\a \x01(\fR\x15thumbnailScansSidecar\x122\n" + + "\x14thumbnailScanLengths\x18\b \x03(\rR\x14thumbnailScanLengths\x1a\xba\x01\n" + + "\bIntegral\x12\x1e\n" + + "\n" + + "fileSHA256\x18\x01 \x01(\fR\n" + + "fileSHA256\x12\x1a\n" + + "\bmediaKey\x18\x02 \x01(\fR\bmediaKey\x12$\n" + + "\rfileEncSHA256\x18\x03 \x01(\fR\rfileEncSHA256\x12\x1e\n" + + "\n" + + "directPath\x18\x04 \x01(\tR\n" + + "directPath\x12,\n" + + "\x11mediaKeyTimestamp\x18\x05 \x01(\x03R\x11mediaKeyTimestamp\"\x88\x05\n" + + "\x0eImageTransport\x12E\n" + + "\bintegral\x18\x01 \x01(\v2).WAMediaTransport.ImageTransport.IntegralR\bintegral\x12H\n" + + "\tancillary\x18\x02 \x01(\v2*.WAMediaTransport.ImageTransport.AncillaryR\tancillary\x1a\x96\x03\n" + + "\tAncillary\x12\x16\n" + + "\x06height\x18\x01 \x01(\rR\x06height\x12\x14\n" + + "\x05width\x18\x02 \x01(\rR\x05width\x12\"\n" + + "\fscansSidecar\x18\x03 \x01(\fR\fscansSidecar\x12 \n" + + "\vscanLengths\x18\x04 \x03(\rR\vscanLengths\x122\n" + + "\x14midQualityFileSHA256\x18\x05 \x01(\fR\x14midQualityFileSHA256\x12I\n" + + "\x06hdType\x18\x06 \x01(\x0e21.WAMediaTransport.ImageTransport.Ancillary.HdTypeR\x06hdType\x128\n" + + "\x15memoriesConceptScores\x18\a \x03(\x02B\x02\x10\x01R\x15memoriesConceptScores\x122\n" + + "\x12memoriesConceptIDs\x18\b \x03(\rB\x02\x10\x01R\x12memoriesConceptIDs\"(\n" + + "\x06HdType\x12\b\n" + + "\x04NONE\x10\x00\x12\t\n" + + "\x05LQ_4K\x10\x01\x12\t\n" + + "\x05HQ_4K\x10\x02\x1aL\n" + + "\bIntegral\x12@\n" + + "\ttransport\x18\x01 \x01(\v2\".WAMediaTransport.WAMediaTransportR\ttransport\"\x85\x05\n" + + "\x0eVideoTransport\x12E\n" + + "\bintegral\x18\x01 \x01(\v2).WAMediaTransport.VideoTransport.IntegralR\bintegral\x12H\n" + + "\tancillary\x18\x02 \x01(\v2*.WAMediaTransport.VideoTransport.AncillaryR\tancillary\x1a\x93\x03\n" + + "\tAncillary\x12\x18\n" + + "\aseconds\x18\x01 \x01(\rR\aseconds\x12/\n" + + "\acaption\x18\x02 \x01(\v2\x15.WACommon.MessageTextR\acaption\x12 \n" + + "\vgifPlayback\x18\x03 \x01(\bR\vgifPlayback\x12\x16\n" + + "\x06height\x18\x04 \x01(\rR\x06height\x12\x14\n" + + "\x05width\x18\x05 \x01(\rR\x05width\x12\x18\n" + + "\asidecar\x18\x06 \x01(\fR\asidecar\x12^\n" + + "\x0egifAttribution\x18\a \x01(\x0e26.WAMediaTransport.VideoTransport.Ancillary.AttributionR\x0egifAttribution\x12.\n" + + "\x12accessibilityLabel\x18\b \x01(\tR\x12accessibilityLabel\x12\x12\n" + + "\x04isHd\x18\t \x01(\bR\x04isHd\"-\n" + + "\vAttribution\x12\b\n" + + "\x04NONE\x10\x00\x12\t\n" + + "\x05GIPHY\x10\x01\x12\t\n" + + "\x05TENOR\x10\x02\x1aL\n" + + "\bIntegral\x12@\n" + + "\ttransport\x18\x01 \x01(\v2\".WAMediaTransport.WAMediaTransportR\ttransport\"\x8e\t\n" + + "\x0eAudioTransport\x12E\n" + + "\bintegral\x18\x01 \x01(\v2).WAMediaTransport.AudioTransport.IntegralR\bintegral\x12H\n" + + "\tancillary\x18\x02 \x01(\v2*.WAMediaTransport.AudioTransport.AncillaryR\tancillary\x1a\x9c\x06\n" + + "\tAncillary\x12\x18\n" + + "\aseconds\x18\x01 \x01(\rR\aseconds\x12X\n" + + "\vavatarAudio\x18\x02 \x01(\v26.WAMediaTransport.AudioTransport.Ancillary.AvatarAudioR\vavatarAudio\x12\"\n" + + "\fwaveformData\x18\x03 \x01(\tR\fwaveformData\x12\x1a\n" + + "\bwaveform\x18\x04 \x01(\fR\bwaveform\x1a\xda\x04\n" + + "\vAvatarAudio\x12\x16\n" + + "\x06poseID\x18\x01 \x01(\rR\x06poseID\x12\x7f\n" + + "\x10avatarAnimations\x18\x02 \x03(\v2S.WAMediaTransport.AudioTransport.Ancillary.AvatarAudio.DownloadableAvatarAnimationsR\x10avatarAnimations\x1a\xd9\x02\n" + + "\x1cDownloadableAvatarAnimations\x12\x1e\n" + + "\n" + + "fileSHA256\x18\x01 \x01(\fR\n" + + "fileSHA256\x12$\n" + + "\rfileEncSHA256\x18\x02 \x01(\fR\rfileEncSHA256\x12\x1e\n" + + "\n" + + "directPath\x18\x03 \x01(\tR\n" + + "directPath\x12\x1a\n" + + "\bmediaKey\x18\x04 \x01(\fR\bmediaKey\x12,\n" + + "\x11mediaKeyTimestamp\x18\x05 \x01(\x03R\x11mediaKeyTimestamp\x12\x1a\n" + + "\bobjectID\x18\x06 \x01(\tR\bobjectID\x12m\n" + + "\x0eanimationsType\x18\a \x01(\x0e2E.WAMediaTransport.AudioTransport.Ancillary.AvatarAudio.AnimationsTypeR\x0eanimationsType\"V\n" + + "\x0eAnimationsType\x12\r\n" + + "\tTALKING_A\x10\x00\x12\n" + + "\n" + + "\x06IDLE_A\x10\x01\x12\r\n" + + "\tTALKING_B\x10\x02\x12\n" + + "\n" + + "\x06IDLE_B\x10\x03\x12\x0e\n" + + "\n" + + "BACKGROUND\x10\x04\x1a\xcb\x01\n" + + "\bIntegral\x12@\n" + + "\ttransport\x18\x01 \x01(\v2\".WAMediaTransport.WAMediaTransportR\ttransport\x12W\n" + + "\vaudioFormat\x18\x02 \x01(\x0e25.WAMediaTransport.AudioTransport.Integral.AudioFormatR\vaudioFormat\"$\n" + + "\vAudioFormat\x12\v\n" + + "\aUNKNOWN\x10\x00\x12\b\n" + + "\x04OPUS\x10\x01\"\xa3\x02\n" + + "\x11DocumentTransport\x12H\n" + + "\bintegral\x18\x01 \x01(\v2,.WAMediaTransport.DocumentTransport.IntegralR\bintegral\x12K\n" + + "\tancillary\x18\x02 \x01(\v2-.WAMediaTransport.DocumentTransport.AncillaryR\tancillary\x1a)\n" + + "\tAncillary\x12\x1c\n" + + "\tpageCount\x18\x01 \x01(\rR\tpageCount\x1aL\n" + + "\bIntegral\x12@\n" + + "\ttransport\x18\x01 \x01(\v2\".WAMediaTransport.WAMediaTransportR\ttransport\"\x96\x05\n" + + "\x10StickerTransport\x12G\n" + + "\bintegral\x18\x01 \x01(\v2+.WAMediaTransport.StickerTransport.IntegralR\bintegral\x12J\n" + + "\tancillary\x18\x02 \x01(\v2,.WAMediaTransport.StickerTransport.AncillaryR\tancillary\x1a\xd3\x02\n" + + "\tAncillary\x12\x1c\n" + + "\tpageCount\x18\x01 \x01(\rR\tpageCount\x12\x16\n" + + "\x06height\x18\x02 \x01(\rR\x06height\x12\x14\n" + + "\x05width\x18\x03 \x01(\rR\x05width\x12*\n" + + "\x10firstFrameLength\x18\x04 \x01(\rR\x10firstFrameLength\x12,\n" + + "\x11firstFrameSidecar\x18\x05 \x01(\fR\x11firstFrameSidecar\x12\"\n" + + "\fmustacheText\x18\x06 \x01(\tR\fmustacheText\x12\"\n" + + "\fisThirdParty\x18\a \x01(\bR\fisThirdParty\x12(\n" + + "\x0freceiverFetchID\x18\b \x01(\tR\x0freceiverFetchID\x12.\n" + + "\x12accessibilityLabel\x18\t \x01(\tR\x12accessibilityLabel\x1a\x96\x01\n" + + "\bIntegral\x12@\n" + + "\ttransport\x18\x01 \x01(\v2\".WAMediaTransport.WAMediaTransportR\ttransport\x12\x1e\n" + + "\n" + + "isAnimated\x18\x02 \x01(\bR\n" + + "isAnimated\x12(\n" + + "\x0freceiverFetchID\x18\x03 \x01(\tR\x0freceiverFetchID\"\xda\x02\n" + + "\x10ContactTransport\x12G\n" + + "\bintegral\x18\x01 \x01(\v2+.WAMediaTransport.ContactTransport.IntegralR\bintegral\x12J\n" + + "\tancillary\x18\x02 \x01(\v2,.WAMediaTransport.ContactTransport.AncillaryR\tancillary\x1a-\n" + + "\tAncillary\x12 \n" + + "\vdisplayName\x18\x01 \x01(\tR\vdisplayName\x1a\x81\x01\n" + + "\bIntegral\x12\x16\n" + + "\x05vcard\x18\x01 \x01(\tH\x00R\x05vcard\x12R\n" + + "\x11downloadableVcard\x18\x02 \x01(\v2\".WAMediaTransport.WAMediaTransportH\x00R\x11downloadableVcardB\t\n" + + "\acontactB,Z*go.mau.fi/whatsmeow/proto/waMediaTransport" var ( file_waMediaTransport_WAMediaTransport_proto_rawDescOnce sync.Once - file_waMediaTransport_WAMediaTransport_proto_rawDescData = file_waMediaTransport_WAMediaTransport_proto_rawDesc + file_waMediaTransport_WAMediaTransport_proto_rawDescData []byte ) func file_waMediaTransport_WAMediaTransport_proto_rawDescGZIP() []byte { file_waMediaTransport_WAMediaTransport_proto_rawDescOnce.Do(func() { - file_waMediaTransport_WAMediaTransport_proto_rawDescData = protoimpl.X.CompressGZIP(file_waMediaTransport_WAMediaTransport_proto_rawDescData) + file_waMediaTransport_WAMediaTransport_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_waMediaTransport_WAMediaTransport_proto_rawDesc), len(file_waMediaTransport_WAMediaTransport_proto_rawDesc))) }) return file_waMediaTransport_WAMediaTransport_proto_rawDescData } @@ -1989,308 +2123,6 @@ func file_waMediaTransport_WAMediaTransport_proto_init() { if File_waMediaTransport_WAMediaTransport_proto != nil { return } - if !protoimpl.UnsafeEnabled { - file_waMediaTransport_WAMediaTransport_proto_msgTypes[0].Exporter = func(v any, i int) any { - switch v := v.(*WAMediaTransport); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waMediaTransport_WAMediaTransport_proto_msgTypes[1].Exporter = func(v any, i int) any { - switch v := v.(*ImageTransport); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waMediaTransport_WAMediaTransport_proto_msgTypes[2].Exporter = func(v any, i int) any { - switch v := v.(*VideoTransport); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waMediaTransport_WAMediaTransport_proto_msgTypes[3].Exporter = func(v any, i int) any { - switch v := v.(*AudioTransport); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waMediaTransport_WAMediaTransport_proto_msgTypes[4].Exporter = func(v any, i int) any { - switch v := v.(*DocumentTransport); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waMediaTransport_WAMediaTransport_proto_msgTypes[5].Exporter = func(v any, i int) any { - switch v := v.(*StickerTransport); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waMediaTransport_WAMediaTransport_proto_msgTypes[6].Exporter = func(v any, i int) any { - switch v := v.(*ContactTransport); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waMediaTransport_WAMediaTransport_proto_msgTypes[7].Exporter = func(v any, i int) any { - switch v := v.(*WAMediaTransport_Ancillary); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waMediaTransport_WAMediaTransport_proto_msgTypes[8].Exporter = func(v any, i int) any { - switch v := v.(*WAMediaTransport_Integral); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waMediaTransport_WAMediaTransport_proto_msgTypes[9].Exporter = func(v any, i int) any { - switch v := v.(*WAMediaTransport_Ancillary_Thumbnail); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waMediaTransport_WAMediaTransport_proto_msgTypes[10].Exporter = func(v any, i int) any { - switch v := v.(*WAMediaTransport_Ancillary_Thumbnail_DownloadableThumbnail); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waMediaTransport_WAMediaTransport_proto_msgTypes[11].Exporter = func(v any, i int) any { - switch v := v.(*ImageTransport_Ancillary); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waMediaTransport_WAMediaTransport_proto_msgTypes[12].Exporter = func(v any, i int) any { - switch v := v.(*ImageTransport_Integral); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waMediaTransport_WAMediaTransport_proto_msgTypes[13].Exporter = func(v any, i int) any { - switch v := v.(*VideoTransport_Ancillary); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waMediaTransport_WAMediaTransport_proto_msgTypes[14].Exporter = func(v any, i int) any { - switch v := v.(*VideoTransport_Integral); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waMediaTransport_WAMediaTransport_proto_msgTypes[15].Exporter = func(v any, i int) any { - switch v := v.(*AudioTransport_Ancillary); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waMediaTransport_WAMediaTransport_proto_msgTypes[16].Exporter = func(v any, i int) any { - switch v := v.(*AudioTransport_Integral); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waMediaTransport_WAMediaTransport_proto_msgTypes[17].Exporter = func(v any, i int) any { - switch v := v.(*AudioTransport_Ancillary_AvatarAudio); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waMediaTransport_WAMediaTransport_proto_msgTypes[18].Exporter = func(v any, i int) any { - switch v := v.(*AudioTransport_Ancillary_AvatarAudio_DownloadableAvatarAnimations); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waMediaTransport_WAMediaTransport_proto_msgTypes[19].Exporter = func(v any, i int) any { - switch v := v.(*DocumentTransport_Ancillary); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waMediaTransport_WAMediaTransport_proto_msgTypes[20].Exporter = func(v any, i int) any { - switch v := v.(*DocumentTransport_Integral); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waMediaTransport_WAMediaTransport_proto_msgTypes[21].Exporter = func(v any, i int) any { - switch v := v.(*StickerTransport_Ancillary); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waMediaTransport_WAMediaTransport_proto_msgTypes[22].Exporter = func(v any, i int) any { - switch v := v.(*StickerTransport_Integral); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waMediaTransport_WAMediaTransport_proto_msgTypes[23].Exporter = func(v any, i int) any { - switch v := v.(*ContactTransport_Ancillary); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waMediaTransport_WAMediaTransport_proto_msgTypes[24].Exporter = func(v any, i int) any { - switch v := v.(*ContactTransport_Integral); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } file_waMediaTransport_WAMediaTransport_proto_msgTypes[24].OneofWrappers = []any{ (*ContactTransport_Integral_Vcard)(nil), (*ContactTransport_Integral_DownloadableVcard)(nil), @@ -2299,7 +2131,7 @@ func file_waMediaTransport_WAMediaTransport_proto_init() { out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_waMediaTransport_WAMediaTransport_proto_rawDesc, + RawDescriptor: unsafe.Slice(unsafe.StringData(file_waMediaTransport_WAMediaTransport_proto_rawDesc), len(file_waMediaTransport_WAMediaTransport_proto_rawDesc)), NumEnums: 4, NumMessages: 25, NumExtensions: 0, @@ -2311,7 +2143,6 @@ func file_waMediaTransport_WAMediaTransport_proto_init() { MessageInfos: file_waMediaTransport_WAMediaTransport_proto_msgTypes, }.Build() File_waMediaTransport_WAMediaTransport_proto = out.File - file_waMediaTransport_WAMediaTransport_proto_rawDesc = nil file_waMediaTransport_WAMediaTransport_proto_goTypes = nil file_waMediaTransport_WAMediaTransport_proto_depIdxs = nil } diff --git a/vendor/go.mau.fi/whatsmeow/proto/waMediaTransport/WAMediaTransport.pb.raw b/vendor/go.mau.fi/whatsmeow/proto/waMediaTransport/WAMediaTransport.pb.raw deleted file mode 100644 index beb765467e..0000000000 Binary files a/vendor/go.mau.fi/whatsmeow/proto/waMediaTransport/WAMediaTransport.pb.raw and /dev/null differ diff --git a/vendor/go.mau.fi/whatsmeow/proto/waMediaTransport/WAMediaTransport.proto b/vendor/go.mau.fi/whatsmeow/proto/waMediaTransport/WAMediaTransport.proto index 3b924b9e86..59ef7d9557 100644 --- a/vendor/go.mau.fi/whatsmeow/proto/waMediaTransport/WAMediaTransport.proto +++ b/vendor/go.mau.fi/whatsmeow/proto/waMediaTransport/WAMediaTransport.proto @@ -56,6 +56,8 @@ message ImageTransport { repeated uint32 scanLengths = 4; optional bytes midQualityFileSHA256 = 5; optional HdType hdType = 6; + repeated float memoriesConceptScores = 7 [packed=true]; + repeated uint32 memoriesConceptIDs = 8 [packed=true]; } message Integral { @@ -81,6 +83,8 @@ message VideoTransport { optional uint32 width = 5; optional bytes sidecar = 6; optional Attribution gifAttribution = 7; + optional string accessibilityLabel = 8; + optional bool isHd = 9; } message Integral { @@ -118,6 +122,8 @@ message AudioTransport { optional uint32 seconds = 1; optional AvatarAudio avatarAudio = 2; + optional string waveformData = 3; + optional bytes waveform = 4; } message Integral { @@ -157,6 +163,7 @@ message StickerTransport { optional string mustacheText = 6; optional bool isThirdParty = 7; optional string receiverFetchID = 8; + optional string accessibilityLabel = 9; } message Integral { diff --git a/vendor/go.mau.fi/whatsmeow/proto/waMmsRetry/WAMmsRetry.pb.go b/vendor/go.mau.fi/whatsmeow/proto/waMmsRetry/WAMmsRetry.pb.go index 1529da6737..6128a8090b 100644 --- a/vendor/go.mau.fi/whatsmeow/proto/waMmsRetry/WAMmsRetry.pb.go +++ b/vendor/go.mau.fi/whatsmeow/proto/waMmsRetry/WAMmsRetry.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 +// protoc-gen-go v1.36.10 // protoc v3.21.12 // source: waMmsRetry/WAMmsRetry.proto @@ -9,11 +9,10 @@ package waMmsRetry import ( reflect "reflect" sync "sync" + unsafe "unsafe" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" - - _ "embed" ) const ( @@ -86,22 +85,20 @@ func (MediaRetryNotification_ResultType) EnumDescriptor() ([]byte, []int) { } type MediaRetryNotification struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + StanzaID *string `protobuf:"bytes,1,opt,name=stanzaID" json:"stanzaID,omitempty"` + DirectPath *string `protobuf:"bytes,2,opt,name=directPath" json:"directPath,omitempty"` + Result *MediaRetryNotification_ResultType `protobuf:"varint,3,opt,name=result,enum=WAMmsRetry.MediaRetryNotification_ResultType" json:"result,omitempty"` + MessageSecret []byte `protobuf:"bytes,4,opt,name=messageSecret" json:"messageSecret,omitempty"` unknownFields protoimpl.UnknownFields - - StanzaID *string `protobuf:"bytes,1,opt,name=stanzaID" json:"stanzaID,omitempty"` - DirectPath *string `protobuf:"bytes,2,opt,name=directPath" json:"directPath,omitempty"` - Result *MediaRetryNotification_ResultType `protobuf:"varint,3,opt,name=result,enum=WAMmsRetry.MediaRetryNotification_ResultType" json:"result,omitempty"` + sizeCache protoimpl.SizeCache } func (x *MediaRetryNotification) Reset() { *x = MediaRetryNotification{} - if protoimpl.UnsafeEnabled { - mi := &file_waMmsRetry_WAMmsRetry_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waMmsRetry_WAMmsRetry_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *MediaRetryNotification) String() string { @@ -112,7 +109,7 @@ func (*MediaRetryNotification) ProtoMessage() {} func (x *MediaRetryNotification) ProtoReflect() protoreflect.Message { mi := &file_waMmsRetry_WAMmsRetry_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -148,21 +145,25 @@ func (x *MediaRetryNotification) GetResult() MediaRetryNotification_ResultType { return MediaRetryNotification_GENERAL_ERROR } +func (x *MediaRetryNotification) GetMessageSecret() []byte { + if x != nil { + return x.MessageSecret + } + return nil +} + type ServerErrorReceipt struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + StanzaID *string `protobuf:"bytes,1,opt,name=stanzaID" json:"stanzaID,omitempty"` unknownFields protoimpl.UnknownFields - - StanzaID *string `protobuf:"bytes,1,opt,name=stanzaID" json:"stanzaID,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ServerErrorReceipt) Reset() { *x = ServerErrorReceipt{} - if protoimpl.UnsafeEnabled { - mi := &file_waMmsRetry_WAMmsRetry_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waMmsRetry_WAMmsRetry_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ServerErrorReceipt) String() string { @@ -173,7 +174,7 @@ func (*ServerErrorReceipt) ProtoMessage() {} func (x *ServerErrorReceipt) ProtoReflect() protoreflect.Message { mi := &file_waMmsRetry_WAMmsRetry_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -197,17 +198,34 @@ func (x *ServerErrorReceipt) GetStanzaID() string { var File_waMmsRetry_WAMmsRetry_proto protoreflect.FileDescriptor -//go:embed WAMmsRetry.pb.raw -var file_waMmsRetry_WAMmsRetry_proto_rawDesc []byte +const file_waMmsRetry_WAMmsRetry_proto_rawDesc = "" + + "\n" + + "\x1bwaMmsRetry/WAMmsRetry.proto\x12\n" + + "WAMmsRetry\"\x94\x02\n" + + "\x16MediaRetryNotification\x12\x1a\n" + + "\bstanzaID\x18\x01 \x01(\tR\bstanzaID\x12\x1e\n" + + "\n" + + "directPath\x18\x02 \x01(\tR\n" + + "directPath\x12E\n" + + "\x06result\x18\x03 \x01(\x0e2-.WAMmsRetry.MediaRetryNotification.ResultTypeR\x06result\x12$\n" + + "\rmessageSecret\x18\x04 \x01(\fR\rmessageSecret\"Q\n" + + "\n" + + "ResultType\x12\x11\n" + + "\rGENERAL_ERROR\x10\x00\x12\v\n" + + "\aSUCCESS\x10\x01\x12\r\n" + + "\tNOT_FOUND\x10\x02\x12\x14\n" + + "\x10DECRYPTION_ERROR\x10\x03\"0\n" + + "\x12ServerErrorReceipt\x12\x1a\n" + + "\bstanzaID\x18\x01 \x01(\tR\bstanzaIDB&Z$go.mau.fi/whatsmeow/proto/waMmsRetry" var ( file_waMmsRetry_WAMmsRetry_proto_rawDescOnce sync.Once - file_waMmsRetry_WAMmsRetry_proto_rawDescData = file_waMmsRetry_WAMmsRetry_proto_rawDesc + file_waMmsRetry_WAMmsRetry_proto_rawDescData []byte ) func file_waMmsRetry_WAMmsRetry_proto_rawDescGZIP() []byte { file_waMmsRetry_WAMmsRetry_proto_rawDescOnce.Do(func() { - file_waMmsRetry_WAMmsRetry_proto_rawDescData = protoimpl.X.CompressGZIP(file_waMmsRetry_WAMmsRetry_proto_rawDescData) + file_waMmsRetry_WAMmsRetry_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_waMmsRetry_WAMmsRetry_proto_rawDesc), len(file_waMmsRetry_WAMmsRetry_proto_rawDesc))) }) return file_waMmsRetry_WAMmsRetry_proto_rawDescData } @@ -233,37 +251,11 @@ func file_waMmsRetry_WAMmsRetry_proto_init() { if File_waMmsRetry_WAMmsRetry_proto != nil { return } - if !protoimpl.UnsafeEnabled { - file_waMmsRetry_WAMmsRetry_proto_msgTypes[0].Exporter = func(v any, i int) any { - switch v := v.(*MediaRetryNotification); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waMmsRetry_WAMmsRetry_proto_msgTypes[1].Exporter = func(v any, i int) any { - switch v := v.(*ServerErrorReceipt); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_waMmsRetry_WAMmsRetry_proto_rawDesc, + RawDescriptor: unsafe.Slice(unsafe.StringData(file_waMmsRetry_WAMmsRetry_proto_rawDesc), len(file_waMmsRetry_WAMmsRetry_proto_rawDesc)), NumEnums: 1, NumMessages: 2, NumExtensions: 0, @@ -275,7 +267,6 @@ func file_waMmsRetry_WAMmsRetry_proto_init() { MessageInfos: file_waMmsRetry_WAMmsRetry_proto_msgTypes, }.Build() File_waMmsRetry_WAMmsRetry_proto = out.File - file_waMmsRetry_WAMmsRetry_proto_rawDesc = nil file_waMmsRetry_WAMmsRetry_proto_goTypes = nil file_waMmsRetry_WAMmsRetry_proto_depIdxs = nil } diff --git a/vendor/go.mau.fi/whatsmeow/proto/waMmsRetry/WAMmsRetry.pb.raw b/vendor/go.mau.fi/whatsmeow/proto/waMmsRetry/WAMmsRetry.pb.raw deleted file mode 100644 index aa22282a34..0000000000 Binary files a/vendor/go.mau.fi/whatsmeow/proto/waMmsRetry/WAMmsRetry.pb.raw and /dev/null differ diff --git a/vendor/go.mau.fi/whatsmeow/proto/waMmsRetry/WAMmsRetry.proto b/vendor/go.mau.fi/whatsmeow/proto/waMmsRetry/WAMmsRetry.proto index 0b298c8747..c6b18610c6 100644 --- a/vendor/go.mau.fi/whatsmeow/proto/waMmsRetry/WAMmsRetry.proto +++ b/vendor/go.mau.fi/whatsmeow/proto/waMmsRetry/WAMmsRetry.proto @@ -13,6 +13,7 @@ message MediaRetryNotification { optional string stanzaID = 1; optional string directPath = 2; optional ResultType result = 3; + optional bytes messageSecret = 4; } message ServerErrorReceipt { diff --git a/vendor/go.mau.fi/whatsmeow/proto/waMsgApplication/WAMsgApplication.pb.go b/vendor/go.mau.fi/whatsmeow/proto/waMsgApplication/WAMsgApplication.pb.go index d1d225e5f3..b11c278707 100644 --- a/vendor/go.mau.fi/whatsmeow/proto/waMsgApplication/WAMsgApplication.pb.go +++ b/vendor/go.mau.fi/whatsmeow/proto/waMsgApplication/WAMsgApplication.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 +// protoc-gen-go v1.36.10 // protoc v3.21.12 // source: waMsgApplication/WAMsgApplication.proto @@ -9,12 +9,12 @@ package waMsgApplication import ( reflect "reflect" sync "sync" + unsafe "unsafe" - waCommon "go.mau.fi/whatsmeow/proto/waCommon" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" - _ "embed" + waCommon "go.mau.fi/whatsmeow/proto/waCommon" ) const ( @@ -83,22 +83,81 @@ func (MessageApplication_Metadata_ThreadType) EnumDescriptor() ([]byte, []int) { return file_waMsgApplication_WAMsgApplication_proto_rawDescGZIP(), []int{0, 0, 0} } +type MessageApplication_EphemeralSetting_EphemeralityType int32 + +const ( + MessageApplication_EphemeralSetting_UNKNOWN MessageApplication_EphemeralSetting_EphemeralityType = 0 + MessageApplication_EphemeralSetting_SEEN_ONCE MessageApplication_EphemeralSetting_EphemeralityType = 1 + MessageApplication_EphemeralSetting_SEEN_BASED_WITH_TIMER MessageApplication_EphemeralSetting_EphemeralityType = 2 + MessageApplication_EphemeralSetting_SEND_BASED_WITH_TIMER MessageApplication_EphemeralSetting_EphemeralityType = 3 +) + +// Enum value maps for MessageApplication_EphemeralSetting_EphemeralityType. +var ( + MessageApplication_EphemeralSetting_EphemeralityType_name = map[int32]string{ + 0: "UNKNOWN", + 1: "SEEN_ONCE", + 2: "SEEN_BASED_WITH_TIMER", + 3: "SEND_BASED_WITH_TIMER", + } + MessageApplication_EphemeralSetting_EphemeralityType_value = map[string]int32{ + "UNKNOWN": 0, + "SEEN_ONCE": 1, + "SEEN_BASED_WITH_TIMER": 2, + "SEND_BASED_WITH_TIMER": 3, + } +) + +func (x MessageApplication_EphemeralSetting_EphemeralityType) Enum() *MessageApplication_EphemeralSetting_EphemeralityType { + p := new(MessageApplication_EphemeralSetting_EphemeralityType) + *p = x + return p +} + +func (x MessageApplication_EphemeralSetting_EphemeralityType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (MessageApplication_EphemeralSetting_EphemeralityType) Descriptor() protoreflect.EnumDescriptor { + return file_waMsgApplication_WAMsgApplication_proto_enumTypes[1].Descriptor() +} + +func (MessageApplication_EphemeralSetting_EphemeralityType) Type() protoreflect.EnumType { + return &file_waMsgApplication_WAMsgApplication_proto_enumTypes[1] +} + +func (x MessageApplication_EphemeralSetting_EphemeralityType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *MessageApplication_EphemeralSetting_EphemeralityType) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = MessageApplication_EphemeralSetting_EphemeralityType(num) + return nil +} + +// Deprecated: Use MessageApplication_EphemeralSetting_EphemeralityType.Descriptor instead. +func (MessageApplication_EphemeralSetting_EphemeralityType) EnumDescriptor() ([]byte, []int) { + return file_waMsgApplication_WAMsgApplication_proto_rawDescGZIP(), []int{0, 6, 0} +} + type MessageApplication struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Payload *MessageApplication_Payload `protobuf:"bytes,1,opt,name=payload" json:"payload,omitempty"` + Metadata *MessageApplication_Metadata `protobuf:"bytes,2,opt,name=metadata" json:"metadata,omitempty"` unknownFields protoimpl.UnknownFields - - Payload *MessageApplication_Payload `protobuf:"bytes,1,opt,name=payload" json:"payload,omitempty"` - Metadata *MessageApplication_Metadata `protobuf:"bytes,2,opt,name=metadata" json:"metadata,omitempty"` + sizeCache protoimpl.SizeCache } func (x *MessageApplication) Reset() { *x = MessageApplication{} - if protoimpl.UnsafeEnabled { - mi := &file_waMsgApplication_WAMsgApplication_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waMsgApplication_WAMsgApplication_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *MessageApplication) String() string { @@ -109,7 +168,7 @@ func (*MessageApplication) ProtoMessage() {} func (x *MessageApplication) ProtoReflect() protoreflect.Message { mi := &file_waMsgApplication_WAMsgApplication_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -139,11 +198,8 @@ func (x *MessageApplication) GetMetadata() *MessageApplication_Metadata { } type MessageApplication_Metadata struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Types that are assignable to Ephemeral: + state protoimpl.MessageState `protogen:"open.v1"` + // Types that are valid to be assigned to Ephemeral: // // *MessageApplication_Metadata_ChatEphemeralSetting // *MessageApplication_Metadata_EphemeralSettingList @@ -162,15 +218,16 @@ type MessageApplication_Metadata struct { GroupIndex *uint32 `protobuf:"varint,15,opt,name=groupIndex" json:"groupIndex,omitempty"` BotResponseID *string `protobuf:"bytes,16,opt,name=botResponseID" json:"botResponseID,omitempty"` CollapsibleID *string `protobuf:"bytes,17,opt,name=collapsibleID" json:"collapsibleID,omitempty"` + SecondaryOtid *string `protobuf:"bytes,18,opt,name=secondaryOtid" json:"secondaryOtid,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *MessageApplication_Metadata) Reset() { *x = MessageApplication_Metadata{} - if protoimpl.UnsafeEnabled { - mi := &file_waMsgApplication_WAMsgApplication_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waMsgApplication_WAMsgApplication_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *MessageApplication_Metadata) String() string { @@ -181,7 +238,7 @@ func (*MessageApplication_Metadata) ProtoMessage() {} func (x *MessageApplication_Metadata) ProtoReflect() protoreflect.Message { mi := &file_waMsgApplication_WAMsgApplication_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -196,30 +253,36 @@ func (*MessageApplication_Metadata) Descriptor() ([]byte, []int) { return file_waMsgApplication_WAMsgApplication_proto_rawDescGZIP(), []int{0, 0} } -func (m *MessageApplication_Metadata) GetEphemeral() isMessageApplication_Metadata_Ephemeral { - if m != nil { - return m.Ephemeral +func (x *MessageApplication_Metadata) GetEphemeral() isMessageApplication_Metadata_Ephemeral { + if x != nil { + return x.Ephemeral } return nil } func (x *MessageApplication_Metadata) GetChatEphemeralSetting() *MessageApplication_EphemeralSetting { - if x, ok := x.GetEphemeral().(*MessageApplication_Metadata_ChatEphemeralSetting); ok { - return x.ChatEphemeralSetting + if x != nil { + if x, ok := x.Ephemeral.(*MessageApplication_Metadata_ChatEphemeralSetting); ok { + return x.ChatEphemeralSetting + } } return nil } func (x *MessageApplication_Metadata) GetEphemeralSettingList() *MessageApplication_Metadata_EphemeralSettingMap { - if x, ok := x.GetEphemeral().(*MessageApplication_Metadata_EphemeralSettingList); ok { - return x.EphemeralSettingList + if x != nil { + if x, ok := x.Ephemeral.(*MessageApplication_Metadata_EphemeralSettingList); ok { + return x.EphemeralSettingList + } } return nil } func (x *MessageApplication_Metadata) GetEphemeralSharedSecret() []byte { - if x, ok := x.GetEphemeral().(*MessageApplication_Metadata_EphemeralSharedSecret); ok { - return x.EphemeralSharedSecret + if x != nil { + if x, ok := x.Ephemeral.(*MessageApplication_Metadata_EphemeralSharedSecret); ok { + return x.EphemeralSharedSecret + } } return nil } @@ -315,6 +378,13 @@ func (x *MessageApplication_Metadata) GetCollapsibleID() string { return "" } +func (x *MessageApplication_Metadata) GetSecondaryOtid() string { + if x != nil && x.SecondaryOtid != nil { + return *x.SecondaryOtid + } + return "" +} + type isMessageApplication_Metadata_Ephemeral interface { isMessageApplication_Metadata_Ephemeral() } @@ -338,26 +408,23 @@ func (*MessageApplication_Metadata_EphemeralSettingList) isMessageApplication_Me func (*MessageApplication_Metadata_EphemeralSharedSecret) isMessageApplication_Metadata_Ephemeral() {} type MessageApplication_Payload struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Types that are assignable to Content: + state protoimpl.MessageState `protogen:"open.v1"` + // Types that are valid to be assigned to Content: // // *MessageApplication_Payload_CoreContent // *MessageApplication_Payload_Signal // *MessageApplication_Payload_ApplicationData // *MessageApplication_Payload_SubProtocol - Content isMessageApplication_Payload_Content `protobuf_oneof:"content"` + Content isMessageApplication_Payload_Content `protobuf_oneof:"content"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *MessageApplication_Payload) Reset() { *x = MessageApplication_Payload{} - if protoimpl.UnsafeEnabled { - mi := &file_waMsgApplication_WAMsgApplication_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waMsgApplication_WAMsgApplication_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *MessageApplication_Payload) String() string { @@ -368,7 +435,7 @@ func (*MessageApplication_Payload) ProtoMessage() {} func (x *MessageApplication_Payload) ProtoReflect() protoreflect.Message { mi := &file_waMsgApplication_WAMsgApplication_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -383,37 +450,45 @@ func (*MessageApplication_Payload) Descriptor() ([]byte, []int) { return file_waMsgApplication_WAMsgApplication_proto_rawDescGZIP(), []int{0, 1} } -func (m *MessageApplication_Payload) GetContent() isMessageApplication_Payload_Content { - if m != nil { - return m.Content +func (x *MessageApplication_Payload) GetContent() isMessageApplication_Payload_Content { + if x != nil { + return x.Content } return nil } func (x *MessageApplication_Payload) GetCoreContent() *MessageApplication_Content { - if x, ok := x.GetContent().(*MessageApplication_Payload_CoreContent); ok { - return x.CoreContent + if x != nil { + if x, ok := x.Content.(*MessageApplication_Payload_CoreContent); ok { + return x.CoreContent + } } return nil } func (x *MessageApplication_Payload) GetSignal() *MessageApplication_Signal { - if x, ok := x.GetContent().(*MessageApplication_Payload_Signal); ok { - return x.Signal + if x != nil { + if x, ok := x.Content.(*MessageApplication_Payload_Signal); ok { + return x.Signal + } } return nil } func (x *MessageApplication_Payload) GetApplicationData() *MessageApplication_ApplicationData { - if x, ok := x.GetContent().(*MessageApplication_Payload_ApplicationData); ok { - return x.ApplicationData + if x != nil { + if x, ok := x.Content.(*MessageApplication_Payload_ApplicationData); ok { + return x.ApplicationData + } } return nil } func (x *MessageApplication_Payload) GetSubProtocol() *MessageApplication_SubProtocolPayload { - if x, ok := x.GetContent().(*MessageApplication_Payload_SubProtocol); ok { - return x.SubProtocol + if x != nil { + if x, ok := x.Content.(*MessageApplication_Payload_SubProtocol); ok { + return x.SubProtocol + } } return nil } @@ -447,11 +522,8 @@ func (*MessageApplication_Payload_ApplicationData) isMessageApplication_Payload_ func (*MessageApplication_Payload_SubProtocol) isMessageApplication_Payload_Content() {} type MessageApplication_SubProtocolPayload struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Types that are assignable to SubProtocol: + state protoimpl.MessageState `protogen:"open.v1"` + // Types that are valid to be assigned to SubProtocol: // // *MessageApplication_SubProtocolPayload_ConsumerMessage // *MessageApplication_SubProtocolPayload_BusinessMessage @@ -459,17 +531,17 @@ type MessageApplication_SubProtocolPayload struct { // *MessageApplication_SubProtocolPayload_MultiDevice // *MessageApplication_SubProtocolPayload_Voip // *MessageApplication_SubProtocolPayload_Armadillo - SubProtocol isMessageApplication_SubProtocolPayload_SubProtocol `protobuf_oneof:"subProtocol"` - FutureProof *waCommon.FutureProofBehavior `protobuf:"varint,1,opt,name=futureProof,enum=WACommon.FutureProofBehavior" json:"futureProof,omitempty"` + SubProtocol isMessageApplication_SubProtocolPayload_SubProtocol `protobuf_oneof:"subProtocol"` + FutureProof *waCommon.FutureProofBehavior `protobuf:"varint,1,opt,name=futureProof,enum=WACommon.FutureProofBehavior" json:"futureProof,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *MessageApplication_SubProtocolPayload) Reset() { *x = MessageApplication_SubProtocolPayload{} - if protoimpl.UnsafeEnabled { - mi := &file_waMsgApplication_WAMsgApplication_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waMsgApplication_WAMsgApplication_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *MessageApplication_SubProtocolPayload) String() string { @@ -480,7 +552,7 @@ func (*MessageApplication_SubProtocolPayload) ProtoMessage() {} func (x *MessageApplication_SubProtocolPayload) ProtoReflect() protoreflect.Message { mi := &file_waMsgApplication_WAMsgApplication_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -495,51 +567,63 @@ func (*MessageApplication_SubProtocolPayload) Descriptor() ([]byte, []int) { return file_waMsgApplication_WAMsgApplication_proto_rawDescGZIP(), []int{0, 2} } -func (m *MessageApplication_SubProtocolPayload) GetSubProtocol() isMessageApplication_SubProtocolPayload_SubProtocol { - if m != nil { - return m.SubProtocol +func (x *MessageApplication_SubProtocolPayload) GetSubProtocol() isMessageApplication_SubProtocolPayload_SubProtocol { + if x != nil { + return x.SubProtocol } return nil } func (x *MessageApplication_SubProtocolPayload) GetConsumerMessage() *waCommon.SubProtocol { - if x, ok := x.GetSubProtocol().(*MessageApplication_SubProtocolPayload_ConsumerMessage); ok { - return x.ConsumerMessage + if x != nil { + if x, ok := x.SubProtocol.(*MessageApplication_SubProtocolPayload_ConsumerMessage); ok { + return x.ConsumerMessage + } } return nil } func (x *MessageApplication_SubProtocolPayload) GetBusinessMessage() *waCommon.SubProtocol { - if x, ok := x.GetSubProtocol().(*MessageApplication_SubProtocolPayload_BusinessMessage); ok { - return x.BusinessMessage + if x != nil { + if x, ok := x.SubProtocol.(*MessageApplication_SubProtocolPayload_BusinessMessage); ok { + return x.BusinessMessage + } } return nil } func (x *MessageApplication_SubProtocolPayload) GetPaymentMessage() *waCommon.SubProtocol { - if x, ok := x.GetSubProtocol().(*MessageApplication_SubProtocolPayload_PaymentMessage); ok { - return x.PaymentMessage + if x != nil { + if x, ok := x.SubProtocol.(*MessageApplication_SubProtocolPayload_PaymentMessage); ok { + return x.PaymentMessage + } } return nil } func (x *MessageApplication_SubProtocolPayload) GetMultiDevice() *waCommon.SubProtocol { - if x, ok := x.GetSubProtocol().(*MessageApplication_SubProtocolPayload_MultiDevice); ok { - return x.MultiDevice + if x != nil { + if x, ok := x.SubProtocol.(*MessageApplication_SubProtocolPayload_MultiDevice); ok { + return x.MultiDevice + } } return nil } func (x *MessageApplication_SubProtocolPayload) GetVoip() *waCommon.SubProtocol { - if x, ok := x.GetSubProtocol().(*MessageApplication_SubProtocolPayload_Voip); ok { - return x.Voip + if x != nil { + if x, ok := x.SubProtocol.(*MessageApplication_SubProtocolPayload_Voip); ok { + return x.Voip + } } return nil } func (x *MessageApplication_SubProtocolPayload) GetArmadillo() *waCommon.SubProtocol { - if x, ok := x.GetSubProtocol().(*MessageApplication_SubProtocolPayload_Armadillo); ok { - return x.Armadillo + if x != nil { + if x, ok := x.SubProtocol.(*MessageApplication_SubProtocolPayload_Armadillo); ok { + return x.Armadillo + } } return nil } @@ -598,18 +682,16 @@ func (*MessageApplication_SubProtocolPayload_Armadillo) isMessageApplication_Sub } type MessageApplication_ApplicationData struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *MessageApplication_ApplicationData) Reset() { *x = MessageApplication_ApplicationData{} - if protoimpl.UnsafeEnabled { - mi := &file_waMsgApplication_WAMsgApplication_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waMsgApplication_WAMsgApplication_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *MessageApplication_ApplicationData) String() string { @@ -620,7 +702,7 @@ func (*MessageApplication_ApplicationData) ProtoMessage() {} func (x *MessageApplication_ApplicationData) ProtoReflect() protoreflect.Message { mi := &file_waMsgApplication_WAMsgApplication_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -636,18 +718,16 @@ func (*MessageApplication_ApplicationData) Descriptor() ([]byte, []int) { } type MessageApplication_Signal struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *MessageApplication_Signal) Reset() { *x = MessageApplication_Signal{} - if protoimpl.UnsafeEnabled { - mi := &file_waMsgApplication_WAMsgApplication_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waMsgApplication_WAMsgApplication_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *MessageApplication_Signal) String() string { @@ -658,7 +738,7 @@ func (*MessageApplication_Signal) ProtoMessage() {} func (x *MessageApplication_Signal) ProtoReflect() protoreflect.Message { mi := &file_waMsgApplication_WAMsgApplication_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -674,18 +754,16 @@ func (*MessageApplication_Signal) Descriptor() ([]byte, []int) { } type MessageApplication_Content struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *MessageApplication_Content) Reset() { *x = MessageApplication_Content{} - if protoimpl.UnsafeEnabled { - mi := &file_waMsgApplication_WAMsgApplication_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waMsgApplication_WAMsgApplication_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *MessageApplication_Content) String() string { @@ -696,7 +774,7 @@ func (*MessageApplication_Content) ProtoMessage() {} func (x *MessageApplication_Content) ProtoReflect() protoreflect.Message { mi := &file_waMsgApplication_WAMsgApplication_proto_msgTypes[6] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -712,22 +790,20 @@ func (*MessageApplication_Content) Descriptor() ([]byte, []int) { } type MessageApplication_EphemeralSetting struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - EphemeralExpiration *uint32 `protobuf:"varint,2,opt,name=ephemeralExpiration" json:"ephemeralExpiration,omitempty"` - EphemeralSettingTimestamp *int64 `protobuf:"varint,3,opt,name=ephemeralSettingTimestamp" json:"ephemeralSettingTimestamp,omitempty"` - IsEphemeralSettingReset *bool `protobuf:"varint,4,opt,name=isEphemeralSettingReset" json:"isEphemeralSettingReset,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + EphemeralExpiration *uint32 `protobuf:"varint,2,opt,name=ephemeralExpiration" json:"ephemeralExpiration,omitempty"` + EphemeralSettingTimestamp *int64 `protobuf:"varint,3,opt,name=ephemeralSettingTimestamp" json:"ephemeralSettingTimestamp,omitempty"` + EphemeralityType *MessageApplication_EphemeralSetting_EphemeralityType `protobuf:"varint,5,opt,name=ephemeralityType,enum=WAMsgApplication.MessageApplication_EphemeralSetting_EphemeralityType" json:"ephemeralityType,omitempty"` + IsEphemeralSettingReset *bool `protobuf:"varint,4,opt,name=isEphemeralSettingReset" json:"isEphemeralSettingReset,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *MessageApplication_EphemeralSetting) Reset() { *x = MessageApplication_EphemeralSetting{} - if protoimpl.UnsafeEnabled { - mi := &file_waMsgApplication_WAMsgApplication_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waMsgApplication_WAMsgApplication_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *MessageApplication_EphemeralSetting) String() string { @@ -738,7 +814,7 @@ func (*MessageApplication_EphemeralSetting) ProtoMessage() {} func (x *MessageApplication_EphemeralSetting) ProtoReflect() protoreflect.Message { mi := &file_waMsgApplication_WAMsgApplication_proto_msgTypes[7] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -767,6 +843,13 @@ func (x *MessageApplication_EphemeralSetting) GetEphemeralSettingTimestamp() int return 0 } +func (x *MessageApplication_EphemeralSetting) GetEphemeralityType() MessageApplication_EphemeralSetting_EphemeralityType { + if x != nil && x.EphemeralityType != nil { + return *x.EphemeralityType + } + return MessageApplication_EphemeralSetting_UNKNOWN +} + func (x *MessageApplication_EphemeralSetting) GetIsEphemeralSettingReset() bool { if x != nil && x.IsEphemeralSettingReset != nil { return *x.IsEphemeralSettingReset @@ -775,23 +858,20 @@ func (x *MessageApplication_EphemeralSetting) GetIsEphemeralSettingReset() bool } type MessageApplication_Metadata_QuotedMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + StanzaID *string `protobuf:"bytes,1,opt,name=stanzaID" json:"stanzaID,omitempty"` + RemoteJID *string `protobuf:"bytes,2,opt,name=remoteJID" json:"remoteJID,omitempty"` + Participant *string `protobuf:"bytes,3,opt,name=participant" json:"participant,omitempty"` + Payload *MessageApplication_Payload `protobuf:"bytes,4,opt,name=payload" json:"payload,omitempty"` unknownFields protoimpl.UnknownFields - - StanzaID *string `protobuf:"bytes,1,opt,name=stanzaID" json:"stanzaID,omitempty"` - RemoteJID *string `protobuf:"bytes,2,opt,name=remoteJID" json:"remoteJID,omitempty"` - Participant *string `protobuf:"bytes,3,opt,name=participant" json:"participant,omitempty"` - Payload *MessageApplication_Payload `protobuf:"bytes,4,opt,name=payload" json:"payload,omitempty"` + sizeCache protoimpl.SizeCache } func (x *MessageApplication_Metadata_QuotedMessage) Reset() { *x = MessageApplication_Metadata_QuotedMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_waMsgApplication_WAMsgApplication_proto_msgTypes[8] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waMsgApplication_WAMsgApplication_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *MessageApplication_Metadata_QuotedMessage) String() string { @@ -802,7 +882,7 @@ func (*MessageApplication_Metadata_QuotedMessage) ProtoMessage() {} func (x *MessageApplication_Metadata_QuotedMessage) ProtoReflect() protoreflect.Message { mi := &file_waMsgApplication_WAMsgApplication_proto_msgTypes[8] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -846,21 +926,18 @@ func (x *MessageApplication_Metadata_QuotedMessage) GetPayload() *MessageApplica } type MessageApplication_Metadata_EphemeralSettingMap struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` ChatJID *string `protobuf:"bytes,1,opt,name=chatJID" json:"chatJID,omitempty"` EphemeralSetting *MessageApplication_EphemeralSetting `protobuf:"bytes,2,opt,name=ephemeralSetting" json:"ephemeralSetting,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *MessageApplication_Metadata_EphemeralSettingMap) Reset() { *x = MessageApplication_Metadata_EphemeralSettingMap{} - if protoimpl.UnsafeEnabled { - mi := &file_waMsgApplication_WAMsgApplication_proto_msgTypes[9] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waMsgApplication_WAMsgApplication_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *MessageApplication_Metadata_EphemeralSettingMap) String() string { @@ -871,7 +948,7 @@ func (*MessageApplication_Metadata_EphemeralSettingMap) ProtoMessage() {} func (x *MessageApplication_Metadata_EphemeralSettingMap) ProtoReflect() protoreflect.Message { mi := &file_waMsgApplication_WAMsgApplication_proto_msgTypes[9] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -902,64 +979,136 @@ func (x *MessageApplication_Metadata_EphemeralSettingMap) GetEphemeralSetting() var File_waMsgApplication_WAMsgApplication_proto protoreflect.FileDescriptor -//go:embed WAMsgApplication.pb.raw -var file_waMsgApplication_WAMsgApplication_proto_rawDesc []byte +const file_waMsgApplication_WAMsgApplication_proto_rawDesc = "" + + "\n" + + "'waMsgApplication/WAMsgApplication.proto\x12\x10WAMsgApplication\x1a\x17waCommon/WACommon.proto\"\x8e\x16\n" + + "\x12MessageApplication\x12F\n" + + "\apayload\x18\x01 \x01(\v2,.WAMsgApplication.MessageApplication.PayloadR\apayload\x12I\n" + + "\bmetadata\x18\x02 \x01(\v2-.WAMsgApplication.MessageApplication.MetadataR\bmetadata\x1a\xe7\n" + + "\n" + + "\bMetadata\x12k\n" + + "\x14chatEphemeralSetting\x18\x01 \x01(\v25.WAMsgApplication.MessageApplication.EphemeralSettingH\x00R\x14chatEphemeralSetting\x12w\n" + + "\x14ephemeralSettingList\x18\x02 \x01(\v2A.WAMsgApplication.MessageApplication.Metadata.EphemeralSettingMapH\x00R\x14ephemeralSettingList\x126\n" + + "\x15ephemeralSharedSecret\x18\x03 \x01(\fH\x00R\x15ephemeralSharedSecret\x12(\n" + + "\x0fforwardingScore\x18\x05 \x01(\rR\x0fforwardingScore\x12 \n" + + "\visForwarded\x18\x06 \x01(\bR\visForwarded\x12A\n" + + "\x10businessMetadata\x18\a \x01(\v2\x15.WACommon.SubProtocolR\x10businessMetadata\x12 \n" + + "\vfrankingKey\x18\b \x01(\fR\vfrankingKey\x12(\n" + + "\x0ffrankingVersion\x18\t \x01(\x05R\x0ffrankingVersion\x12a\n" + + "\rquotedMessage\x18\n" + + " \x01(\v2;.WAMsgApplication.MessageApplication.Metadata.QuotedMessageR\rquotedMessage\x12X\n" + + "\n" + + "threadType\x18\v \x01(\x0e28.WAMsgApplication.MessageApplication.Metadata.ThreadTypeR\n" + + "threadType\x12<\n" + + "\x19readonlyMetadataDataclass\x18\f \x01(\tR\x19readonlyMetadataDataclass\x12\x18\n" + + "\agroupID\x18\r \x01(\tR\agroupID\x12\x1c\n" + + "\tgroupSize\x18\x0e \x01(\rR\tgroupSize\x12\x1e\n" + + "\n" + + "groupIndex\x18\x0f \x01(\rR\n" + + "groupIndex\x12$\n" + + "\rbotResponseID\x18\x10 \x01(\tR\rbotResponseID\x12$\n" + + "\rcollapsibleID\x18\x11 \x01(\tR\rcollapsibleID\x12$\n" + + "\rsecondaryOtid\x18\x12 \x01(\tR\rsecondaryOtid\x1a\xb3\x01\n" + + "\rQuotedMessage\x12\x1a\n" + + "\bstanzaID\x18\x01 \x01(\tR\bstanzaID\x12\x1c\n" + + "\tremoteJID\x18\x02 \x01(\tR\tremoteJID\x12 \n" + + "\vparticipant\x18\x03 \x01(\tR\vparticipant\x12F\n" + + "\apayload\x18\x04 \x01(\v2,.WAMsgApplication.MessageApplication.PayloadR\apayload\x1a\x92\x01\n" + + "\x13EphemeralSettingMap\x12\x18\n" + + "\achatJID\x18\x01 \x01(\tR\achatJID\x12a\n" + + "\x10ephemeralSetting\x18\x02 \x01(\v25.WAMsgApplication.MessageApplication.EphemeralSettingR\x10ephemeralSetting\"E\n" + + "\n" + + "ThreadType\x12\v\n" + + "\aDEFAULT\x10\x00\x12\x0f\n" + + "\vVANISH_MODE\x10\x01\x12\x19\n" + + "\x15DISAPPEARING_MESSAGES\x10\x02B\v\n" + + "\tephemeral\x1a\xec\x02\n" + + "\aPayload\x12P\n" + + "\vcoreContent\x18\x01 \x01(\v2,.WAMsgApplication.MessageApplication.ContentH\x00R\vcoreContent\x12E\n" + + "\x06signal\x18\x02 \x01(\v2+.WAMsgApplication.MessageApplication.SignalH\x00R\x06signal\x12`\n" + + "\x0fapplicationData\x18\x03 \x01(\v24.WAMsgApplication.MessageApplication.ApplicationDataH\x00R\x0fapplicationData\x12[\n" + + "\vsubProtocol\x18\x04 \x01(\v27.WAMsgApplication.MessageApplication.SubProtocolPayloadH\x00R\vsubProtocolB\t\n" + + "\acontent\x1a\xca\x03\n" + + "\x12SubProtocolPayload\x12A\n" + + "\x0fconsumerMessage\x18\x02 \x01(\v2\x15.WACommon.SubProtocolH\x00R\x0fconsumerMessage\x12A\n" + + "\x0fbusinessMessage\x18\x03 \x01(\v2\x15.WACommon.SubProtocolH\x00R\x0fbusinessMessage\x12?\n" + + "\x0epaymentMessage\x18\x04 \x01(\v2\x15.WACommon.SubProtocolH\x00R\x0epaymentMessage\x129\n" + + "\vmultiDevice\x18\x05 \x01(\v2\x15.WACommon.SubProtocolH\x00R\vmultiDevice\x12+\n" + + "\x04voip\x18\x06 \x01(\v2\x15.WACommon.SubProtocolH\x00R\x04voip\x125\n" + + "\tarmadillo\x18\a \x01(\v2\x15.WACommon.SubProtocolH\x00R\tarmadillo\x12?\n" + + "\vfutureProof\x18\x01 \x01(\x0e2\x1d.WACommon.FutureProofBehaviorR\vfutureProofB\r\n" + + "\vsubProtocol\x1a\x11\n" + + "\x0fApplicationData\x1a\b\n" + + "\x06Signal\x1a\t\n" + + "\aContent\x1a\x96\x03\n" + + "\x10EphemeralSetting\x120\n" + + "\x13ephemeralExpiration\x18\x02 \x01(\rR\x13ephemeralExpiration\x12<\n" + + "\x19ephemeralSettingTimestamp\x18\x03 \x01(\x03R\x19ephemeralSettingTimestamp\x12r\n" + + "\x10ephemeralityType\x18\x05 \x01(\x0e2F.WAMsgApplication.MessageApplication.EphemeralSetting.EphemeralityTypeR\x10ephemeralityType\x128\n" + + "\x17isEphemeralSettingReset\x18\x04 \x01(\bR\x17isEphemeralSettingReset\"d\n" + + "\x10EphemeralityType\x12\v\n" + + "\aUNKNOWN\x10\x00\x12\r\n" + + "\tSEEN_ONCE\x10\x01\x12\x19\n" + + "\x15SEEN_BASED_WITH_TIMER\x10\x02\x12\x19\n" + + "\x15SEND_BASED_WITH_TIMER\x10\x03B,Z*go.mau.fi/whatsmeow/proto/waMsgApplication" var ( file_waMsgApplication_WAMsgApplication_proto_rawDescOnce sync.Once - file_waMsgApplication_WAMsgApplication_proto_rawDescData = file_waMsgApplication_WAMsgApplication_proto_rawDesc + file_waMsgApplication_WAMsgApplication_proto_rawDescData []byte ) func file_waMsgApplication_WAMsgApplication_proto_rawDescGZIP() []byte { file_waMsgApplication_WAMsgApplication_proto_rawDescOnce.Do(func() { - file_waMsgApplication_WAMsgApplication_proto_rawDescData = protoimpl.X.CompressGZIP(file_waMsgApplication_WAMsgApplication_proto_rawDescData) + file_waMsgApplication_WAMsgApplication_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_waMsgApplication_WAMsgApplication_proto_rawDesc), len(file_waMsgApplication_WAMsgApplication_proto_rawDesc))) }) return file_waMsgApplication_WAMsgApplication_proto_rawDescData } -var file_waMsgApplication_WAMsgApplication_proto_enumTypes = make([]protoimpl.EnumInfo, 1) +var file_waMsgApplication_WAMsgApplication_proto_enumTypes = make([]protoimpl.EnumInfo, 2) var file_waMsgApplication_WAMsgApplication_proto_msgTypes = make([]protoimpl.MessageInfo, 10) var file_waMsgApplication_WAMsgApplication_proto_goTypes = []any{ - (MessageApplication_Metadata_ThreadType)(0), // 0: WAMsgApplication.MessageApplication.Metadata.ThreadType - (*MessageApplication)(nil), // 1: WAMsgApplication.MessageApplication - (*MessageApplication_Metadata)(nil), // 2: WAMsgApplication.MessageApplication.Metadata - (*MessageApplication_Payload)(nil), // 3: WAMsgApplication.MessageApplication.Payload - (*MessageApplication_SubProtocolPayload)(nil), // 4: WAMsgApplication.MessageApplication.SubProtocolPayload - (*MessageApplication_ApplicationData)(nil), // 5: WAMsgApplication.MessageApplication.ApplicationData - (*MessageApplication_Signal)(nil), // 6: WAMsgApplication.MessageApplication.Signal - (*MessageApplication_Content)(nil), // 7: WAMsgApplication.MessageApplication.Content - (*MessageApplication_EphemeralSetting)(nil), // 8: WAMsgApplication.MessageApplication.EphemeralSetting - (*MessageApplication_Metadata_QuotedMessage)(nil), // 9: WAMsgApplication.MessageApplication.Metadata.QuotedMessage - (*MessageApplication_Metadata_EphemeralSettingMap)(nil), // 10: WAMsgApplication.MessageApplication.Metadata.EphemeralSettingMap - (*waCommon.SubProtocol)(nil), // 11: WACommon.SubProtocol - (waCommon.FutureProofBehavior)(0), // 12: WACommon.FutureProofBehavior + (MessageApplication_Metadata_ThreadType)(0), // 0: WAMsgApplication.MessageApplication.Metadata.ThreadType + (MessageApplication_EphemeralSetting_EphemeralityType)(0), // 1: WAMsgApplication.MessageApplication.EphemeralSetting.EphemeralityType + (*MessageApplication)(nil), // 2: WAMsgApplication.MessageApplication + (*MessageApplication_Metadata)(nil), // 3: WAMsgApplication.MessageApplication.Metadata + (*MessageApplication_Payload)(nil), // 4: WAMsgApplication.MessageApplication.Payload + (*MessageApplication_SubProtocolPayload)(nil), // 5: WAMsgApplication.MessageApplication.SubProtocolPayload + (*MessageApplication_ApplicationData)(nil), // 6: WAMsgApplication.MessageApplication.ApplicationData + (*MessageApplication_Signal)(nil), // 7: WAMsgApplication.MessageApplication.Signal + (*MessageApplication_Content)(nil), // 8: WAMsgApplication.MessageApplication.Content + (*MessageApplication_EphemeralSetting)(nil), // 9: WAMsgApplication.MessageApplication.EphemeralSetting + (*MessageApplication_Metadata_QuotedMessage)(nil), // 10: WAMsgApplication.MessageApplication.Metadata.QuotedMessage + (*MessageApplication_Metadata_EphemeralSettingMap)(nil), // 11: WAMsgApplication.MessageApplication.Metadata.EphemeralSettingMap + (*waCommon.SubProtocol)(nil), // 12: WACommon.SubProtocol + (waCommon.FutureProofBehavior)(0), // 13: WACommon.FutureProofBehavior } var file_waMsgApplication_WAMsgApplication_proto_depIdxs = []int32{ - 3, // 0: WAMsgApplication.MessageApplication.payload:type_name -> WAMsgApplication.MessageApplication.Payload - 2, // 1: WAMsgApplication.MessageApplication.metadata:type_name -> WAMsgApplication.MessageApplication.Metadata - 8, // 2: WAMsgApplication.MessageApplication.Metadata.chatEphemeralSetting:type_name -> WAMsgApplication.MessageApplication.EphemeralSetting - 10, // 3: WAMsgApplication.MessageApplication.Metadata.ephemeralSettingList:type_name -> WAMsgApplication.MessageApplication.Metadata.EphemeralSettingMap - 11, // 4: WAMsgApplication.MessageApplication.Metadata.businessMetadata:type_name -> WACommon.SubProtocol - 9, // 5: WAMsgApplication.MessageApplication.Metadata.quotedMessage:type_name -> WAMsgApplication.MessageApplication.Metadata.QuotedMessage + 4, // 0: WAMsgApplication.MessageApplication.payload:type_name -> WAMsgApplication.MessageApplication.Payload + 3, // 1: WAMsgApplication.MessageApplication.metadata:type_name -> WAMsgApplication.MessageApplication.Metadata + 9, // 2: WAMsgApplication.MessageApplication.Metadata.chatEphemeralSetting:type_name -> WAMsgApplication.MessageApplication.EphemeralSetting + 11, // 3: WAMsgApplication.MessageApplication.Metadata.ephemeralSettingList:type_name -> WAMsgApplication.MessageApplication.Metadata.EphemeralSettingMap + 12, // 4: WAMsgApplication.MessageApplication.Metadata.businessMetadata:type_name -> WACommon.SubProtocol + 10, // 5: WAMsgApplication.MessageApplication.Metadata.quotedMessage:type_name -> WAMsgApplication.MessageApplication.Metadata.QuotedMessage 0, // 6: WAMsgApplication.MessageApplication.Metadata.threadType:type_name -> WAMsgApplication.MessageApplication.Metadata.ThreadType - 7, // 7: WAMsgApplication.MessageApplication.Payload.coreContent:type_name -> WAMsgApplication.MessageApplication.Content - 6, // 8: WAMsgApplication.MessageApplication.Payload.signal:type_name -> WAMsgApplication.MessageApplication.Signal - 5, // 9: WAMsgApplication.MessageApplication.Payload.applicationData:type_name -> WAMsgApplication.MessageApplication.ApplicationData - 4, // 10: WAMsgApplication.MessageApplication.Payload.subProtocol:type_name -> WAMsgApplication.MessageApplication.SubProtocolPayload - 11, // 11: WAMsgApplication.MessageApplication.SubProtocolPayload.consumerMessage:type_name -> WACommon.SubProtocol - 11, // 12: WAMsgApplication.MessageApplication.SubProtocolPayload.businessMessage:type_name -> WACommon.SubProtocol - 11, // 13: WAMsgApplication.MessageApplication.SubProtocolPayload.paymentMessage:type_name -> WACommon.SubProtocol - 11, // 14: WAMsgApplication.MessageApplication.SubProtocolPayload.multiDevice:type_name -> WACommon.SubProtocol - 11, // 15: WAMsgApplication.MessageApplication.SubProtocolPayload.voip:type_name -> WACommon.SubProtocol - 11, // 16: WAMsgApplication.MessageApplication.SubProtocolPayload.armadillo:type_name -> WACommon.SubProtocol - 12, // 17: WAMsgApplication.MessageApplication.SubProtocolPayload.futureProof:type_name -> WACommon.FutureProofBehavior - 3, // 18: WAMsgApplication.MessageApplication.Metadata.QuotedMessage.payload:type_name -> WAMsgApplication.MessageApplication.Payload - 8, // 19: WAMsgApplication.MessageApplication.Metadata.EphemeralSettingMap.ephemeralSetting:type_name -> WAMsgApplication.MessageApplication.EphemeralSetting - 20, // [20:20] is the sub-list for method output_type - 20, // [20:20] is the sub-list for method input_type - 20, // [20:20] is the sub-list for extension type_name - 20, // [20:20] is the sub-list for extension extendee - 0, // [0:20] is the sub-list for field type_name + 8, // 7: WAMsgApplication.MessageApplication.Payload.coreContent:type_name -> WAMsgApplication.MessageApplication.Content + 7, // 8: WAMsgApplication.MessageApplication.Payload.signal:type_name -> WAMsgApplication.MessageApplication.Signal + 6, // 9: WAMsgApplication.MessageApplication.Payload.applicationData:type_name -> WAMsgApplication.MessageApplication.ApplicationData + 5, // 10: WAMsgApplication.MessageApplication.Payload.subProtocol:type_name -> WAMsgApplication.MessageApplication.SubProtocolPayload + 12, // 11: WAMsgApplication.MessageApplication.SubProtocolPayload.consumerMessage:type_name -> WACommon.SubProtocol + 12, // 12: WAMsgApplication.MessageApplication.SubProtocolPayload.businessMessage:type_name -> WACommon.SubProtocol + 12, // 13: WAMsgApplication.MessageApplication.SubProtocolPayload.paymentMessage:type_name -> WACommon.SubProtocol + 12, // 14: WAMsgApplication.MessageApplication.SubProtocolPayload.multiDevice:type_name -> WACommon.SubProtocol + 12, // 15: WAMsgApplication.MessageApplication.SubProtocolPayload.voip:type_name -> WACommon.SubProtocol + 12, // 16: WAMsgApplication.MessageApplication.SubProtocolPayload.armadillo:type_name -> WACommon.SubProtocol + 13, // 17: WAMsgApplication.MessageApplication.SubProtocolPayload.futureProof:type_name -> WACommon.FutureProofBehavior + 1, // 18: WAMsgApplication.MessageApplication.EphemeralSetting.ephemeralityType:type_name -> WAMsgApplication.MessageApplication.EphemeralSetting.EphemeralityType + 4, // 19: WAMsgApplication.MessageApplication.Metadata.QuotedMessage.payload:type_name -> WAMsgApplication.MessageApplication.Payload + 9, // 20: WAMsgApplication.MessageApplication.Metadata.EphemeralSettingMap.ephemeralSetting:type_name -> WAMsgApplication.MessageApplication.EphemeralSetting + 21, // [21:21] is the sub-list for method output_type + 21, // [21:21] is the sub-list for method input_type + 21, // [21:21] is the sub-list for extension type_name + 21, // [21:21] is the sub-list for extension extendee + 0, // [0:21] is the sub-list for field type_name } func init() { file_waMsgApplication_WAMsgApplication_proto_init() } @@ -967,128 +1116,6 @@ func file_waMsgApplication_WAMsgApplication_proto_init() { if File_waMsgApplication_WAMsgApplication_proto != nil { return } - if !protoimpl.UnsafeEnabled { - file_waMsgApplication_WAMsgApplication_proto_msgTypes[0].Exporter = func(v any, i int) any { - switch v := v.(*MessageApplication); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waMsgApplication_WAMsgApplication_proto_msgTypes[1].Exporter = func(v any, i int) any { - switch v := v.(*MessageApplication_Metadata); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waMsgApplication_WAMsgApplication_proto_msgTypes[2].Exporter = func(v any, i int) any { - switch v := v.(*MessageApplication_Payload); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waMsgApplication_WAMsgApplication_proto_msgTypes[3].Exporter = func(v any, i int) any { - switch v := v.(*MessageApplication_SubProtocolPayload); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waMsgApplication_WAMsgApplication_proto_msgTypes[4].Exporter = func(v any, i int) any { - switch v := v.(*MessageApplication_ApplicationData); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waMsgApplication_WAMsgApplication_proto_msgTypes[5].Exporter = func(v any, i int) any { - switch v := v.(*MessageApplication_Signal); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waMsgApplication_WAMsgApplication_proto_msgTypes[6].Exporter = func(v any, i int) any { - switch v := v.(*MessageApplication_Content); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waMsgApplication_WAMsgApplication_proto_msgTypes[7].Exporter = func(v any, i int) any { - switch v := v.(*MessageApplication_EphemeralSetting); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waMsgApplication_WAMsgApplication_proto_msgTypes[8].Exporter = func(v any, i int) any { - switch v := v.(*MessageApplication_Metadata_QuotedMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waMsgApplication_WAMsgApplication_proto_msgTypes[9].Exporter = func(v any, i int) any { - switch v := v.(*MessageApplication_Metadata_EphemeralSettingMap); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } file_waMsgApplication_WAMsgApplication_proto_msgTypes[1].OneofWrappers = []any{ (*MessageApplication_Metadata_ChatEphemeralSetting)(nil), (*MessageApplication_Metadata_EphemeralSettingList)(nil), @@ -1112,8 +1139,8 @@ func file_waMsgApplication_WAMsgApplication_proto_init() { out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_waMsgApplication_WAMsgApplication_proto_rawDesc, - NumEnums: 1, + RawDescriptor: unsafe.Slice(unsafe.StringData(file_waMsgApplication_WAMsgApplication_proto_rawDesc), len(file_waMsgApplication_WAMsgApplication_proto_rawDesc)), + NumEnums: 2, NumMessages: 10, NumExtensions: 0, NumServices: 0, @@ -1124,7 +1151,6 @@ func file_waMsgApplication_WAMsgApplication_proto_init() { MessageInfos: file_waMsgApplication_WAMsgApplication_proto_msgTypes, }.Build() File_waMsgApplication_WAMsgApplication_proto = out.File - file_waMsgApplication_WAMsgApplication_proto_rawDesc = nil file_waMsgApplication_WAMsgApplication_proto_goTypes = nil file_waMsgApplication_WAMsgApplication_proto_depIdxs = nil } diff --git a/vendor/go.mau.fi/whatsmeow/proto/waMsgApplication/WAMsgApplication.pb.raw b/vendor/go.mau.fi/whatsmeow/proto/waMsgApplication/WAMsgApplication.pb.raw deleted file mode 100644 index d9bfeed9a9..0000000000 Binary files a/vendor/go.mau.fi/whatsmeow/proto/waMsgApplication/WAMsgApplication.pb.raw and /dev/null differ diff --git a/vendor/go.mau.fi/whatsmeow/proto/waMsgApplication/WAMsgApplication.proto b/vendor/go.mau.fi/whatsmeow/proto/waMsgApplication/WAMsgApplication.proto index 1bbe533024..282e527346 100644 --- a/vendor/go.mau.fi/whatsmeow/proto/waMsgApplication/WAMsgApplication.proto +++ b/vendor/go.mau.fi/whatsmeow/proto/waMsgApplication/WAMsgApplication.proto @@ -43,6 +43,7 @@ message MessageApplication { optional uint32 groupIndex = 15; optional string botResponseID = 16; optional string collapsibleID = 17; + optional string secondaryOtid = 18; } message Payload { @@ -77,8 +78,16 @@ message MessageApplication { } message EphemeralSetting { + enum EphemeralityType { + UNKNOWN = 0; + SEEN_ONCE = 1; + SEEN_BASED_WITH_TIMER = 2; + SEND_BASED_WITH_TIMER = 3; + } + optional uint32 ephemeralExpiration = 2; optional int64 ephemeralSettingTimestamp = 3; + optional EphemeralityType ephemeralityType = 5; optional bool isEphemeralSettingReset = 4; } diff --git a/vendor/go.mau.fi/whatsmeow/proto/waMsgTransport/WAMsgTransport.pb.go b/vendor/go.mau.fi/whatsmeow/proto/waMsgTransport/WAMsgTransport.pb.go index 893949363b..c0b2faf10a 100644 --- a/vendor/go.mau.fi/whatsmeow/proto/waMsgTransport/WAMsgTransport.pb.go +++ b/vendor/go.mau.fi/whatsmeow/proto/waMsgTransport/WAMsgTransport.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 +// protoc-gen-go v1.36.10 // protoc v3.21.12 // source: waMsgTransport/WAMsgTransport.proto @@ -9,12 +9,12 @@ package waMsgTransport import ( reflect "reflect" sync "sync" + unsafe "unsafe" - waCommon "go.mau.fi/whatsmeow/proto/waCommon" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" - _ "embed" + waCommon "go.mau.fi/whatsmeow/proto/waCommon" ) const ( @@ -87,21 +87,18 @@ func (MessageTransport_Protocol_Ancillary_BackupDirective_ActionType) EnumDescri } type MessageTransport struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Payload *MessageTransport_Payload `protobuf:"bytes,1,opt,name=payload" json:"payload,omitempty"` + Protocol *MessageTransport_Protocol `protobuf:"bytes,2,opt,name=protocol" json:"protocol,omitempty"` unknownFields protoimpl.UnknownFields - - Payload *MessageTransport_Payload `protobuf:"bytes,1,opt,name=payload" json:"payload,omitempty"` - Protocol *MessageTransport_Protocol `protobuf:"bytes,2,opt,name=protocol" json:"protocol,omitempty"` + sizeCache protoimpl.SizeCache } func (x *MessageTransport) Reset() { *x = MessageTransport{} - if protoimpl.UnsafeEnabled { - mi := &file_waMsgTransport_WAMsgTransport_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waMsgTransport_WAMsgTransport_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *MessageTransport) String() string { @@ -112,7 +109,7 @@ func (*MessageTransport) ProtoMessage() {} func (x *MessageTransport) ProtoReflect() protoreflect.Message { mi := &file_waMsgTransport_WAMsgTransport_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -142,23 +139,20 @@ func (x *MessageTransport) GetProtocol() *MessageTransport_Protocol { } type DeviceListMetadata struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - SenderKeyHash []byte `protobuf:"bytes,1,opt,name=senderKeyHash" json:"senderKeyHash,omitempty"` - SenderTimestamp *uint64 `protobuf:"varint,2,opt,name=senderTimestamp" json:"senderTimestamp,omitempty"` - RecipientKeyHash []byte `protobuf:"bytes,8,opt,name=recipientKeyHash" json:"recipientKeyHash,omitempty"` - RecipientTimestamp *uint64 `protobuf:"varint,9,opt,name=recipientTimestamp" json:"recipientTimestamp,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + SenderKeyHash []byte `protobuf:"bytes,1,opt,name=senderKeyHash" json:"senderKeyHash,omitempty"` + SenderTimestamp *uint64 `protobuf:"varint,2,opt,name=senderTimestamp" json:"senderTimestamp,omitempty"` + RecipientKeyHash []byte `protobuf:"bytes,8,opt,name=recipientKeyHash" json:"recipientKeyHash,omitempty"` + RecipientTimestamp *uint64 `protobuf:"varint,9,opt,name=recipientTimestamp" json:"recipientTimestamp,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *DeviceListMetadata) Reset() { *x = DeviceListMetadata{} - if protoimpl.UnsafeEnabled { - mi := &file_waMsgTransport_WAMsgTransport_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waMsgTransport_WAMsgTransport_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *DeviceListMetadata) String() string { @@ -169,7 +163,7 @@ func (*DeviceListMetadata) ProtoMessage() {} func (x *DeviceListMetadata) ProtoReflect() protoreflect.Message { mi := &file_waMsgTransport_WAMsgTransport_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -213,21 +207,18 @@ func (x *DeviceListMetadata) GetRecipientTimestamp() uint64 { } type MessageTransport_Payload struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` ApplicationPayload *waCommon.SubProtocol `protobuf:"bytes,1,opt,name=applicationPayload" json:"applicationPayload,omitempty"` FutureProof *waCommon.FutureProofBehavior `protobuf:"varint,3,opt,name=futureProof,enum=WACommon.FutureProofBehavior" json:"futureProof,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *MessageTransport_Payload) Reset() { *x = MessageTransport_Payload{} - if protoimpl.UnsafeEnabled { - mi := &file_waMsgTransport_WAMsgTransport_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waMsgTransport_WAMsgTransport_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *MessageTransport_Payload) String() string { @@ -238,7 +229,7 @@ func (*MessageTransport_Payload) ProtoMessage() {} func (x *MessageTransport_Payload) ProtoReflect() protoreflect.Message { mi := &file_waMsgTransport_WAMsgTransport_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -268,21 +259,18 @@ func (x *MessageTransport_Payload) GetFutureProof() waCommon.FutureProofBehavior } type MessageTransport_Protocol struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Integral *MessageTransport_Protocol_Integral `protobuf:"bytes,1,opt,name=integral" json:"integral,omitempty"` + Ancillary *MessageTransport_Protocol_Ancillary `protobuf:"bytes,2,opt,name=ancillary" json:"ancillary,omitempty"` unknownFields protoimpl.UnknownFields - - Integral *MessageTransport_Protocol_Integral `protobuf:"bytes,1,opt,name=integral" json:"integral,omitempty"` - Ancillary *MessageTransport_Protocol_Ancillary `protobuf:"bytes,2,opt,name=ancillary" json:"ancillary,omitempty"` + sizeCache protoimpl.SizeCache } func (x *MessageTransport_Protocol) Reset() { *x = MessageTransport_Protocol{} - if protoimpl.UnsafeEnabled { - mi := &file_waMsgTransport_WAMsgTransport_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waMsgTransport_WAMsgTransport_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *MessageTransport_Protocol) String() string { @@ -293,7 +281,7 @@ func (*MessageTransport_Protocol) ProtoMessage() {} func (x *MessageTransport_Protocol) ProtoReflect() protoreflect.Message { mi := &file_waMsgTransport_WAMsgTransport_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -323,23 +311,20 @@ func (x *MessageTransport_Protocol) GetAncillary() *MessageTransport_Protocol_An } type MessageTransport_Protocol_Ancillary struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` Skdm *MessageTransport_Protocol_Ancillary_SenderKeyDistributionMessage `protobuf:"bytes,2,opt,name=skdm" json:"skdm,omitempty"` DeviceListMetadata *DeviceListMetadata `protobuf:"bytes,3,opt,name=deviceListMetadata" json:"deviceListMetadata,omitempty"` Icdc *MessageTransport_Protocol_Ancillary_ICDCParticipantDevices `protobuf:"bytes,4,opt,name=icdc" json:"icdc,omitempty"` BackupDirective *MessageTransport_Protocol_Ancillary_BackupDirective `protobuf:"bytes,5,opt,name=backupDirective" json:"backupDirective,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *MessageTransport_Protocol_Ancillary) Reset() { *x = MessageTransport_Protocol_Ancillary{} - if protoimpl.UnsafeEnabled { - mi := &file_waMsgTransport_WAMsgTransport_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waMsgTransport_WAMsgTransport_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *MessageTransport_Protocol_Ancillary) String() string { @@ -350,7 +335,7 @@ func (*MessageTransport_Protocol_Ancillary) ProtoMessage() {} func (x *MessageTransport_Protocol_Ancillary) ProtoReflect() protoreflect.Message { mi := &file_waMsgTransport_WAMsgTransport_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -394,21 +379,18 @@ func (x *MessageTransport_Protocol_Ancillary) GetBackupDirective() *MessageTrans } type MessageTransport_Protocol_Integral struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Padding []byte `protobuf:"bytes,1,opt,name=padding" json:"padding,omitempty"` + DSM *MessageTransport_Protocol_Integral_DeviceSentMessage `protobuf:"bytes,2,opt,name=DSM" json:"DSM,omitempty"` unknownFields protoimpl.UnknownFields - - Padding []byte `protobuf:"bytes,1,opt,name=padding" json:"padding,omitempty"` - DSM *MessageTransport_Protocol_Integral_DeviceSentMessage `protobuf:"bytes,2,opt,name=DSM" json:"DSM,omitempty"` + sizeCache protoimpl.SizeCache } func (x *MessageTransport_Protocol_Integral) Reset() { *x = MessageTransport_Protocol_Integral{} - if protoimpl.UnsafeEnabled { - mi := &file_waMsgTransport_WAMsgTransport_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waMsgTransport_WAMsgTransport_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *MessageTransport_Protocol_Integral) String() string { @@ -419,7 +401,7 @@ func (*MessageTransport_Protocol_Integral) ProtoMessage() {} func (x *MessageTransport_Protocol_Integral) ProtoReflect() protoreflect.Message { mi := &file_waMsgTransport_WAMsgTransport_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -449,22 +431,19 @@ func (x *MessageTransport_Protocol_Integral) GetDSM() *MessageTransport_Protocol } type MessageTransport_Protocol_Ancillary_BackupDirective struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` MessageID *string `protobuf:"bytes,1,opt,name=messageID" json:"messageID,omitempty"` ActionType *MessageTransport_Protocol_Ancillary_BackupDirective_ActionType `protobuf:"varint,2,opt,name=actionType,enum=WAMsgTransport.MessageTransport_Protocol_Ancillary_BackupDirective_ActionType" json:"actionType,omitempty"` SupplementalKey *string `protobuf:"bytes,3,opt,name=supplementalKey" json:"supplementalKey,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *MessageTransport_Protocol_Ancillary_BackupDirective) Reset() { *x = MessageTransport_Protocol_Ancillary_BackupDirective{} - if protoimpl.UnsafeEnabled { - mi := &file_waMsgTransport_WAMsgTransport_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waMsgTransport_WAMsgTransport_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *MessageTransport_Protocol_Ancillary_BackupDirective) String() string { @@ -475,7 +454,7 @@ func (*MessageTransport_Protocol_Ancillary_BackupDirective) ProtoMessage() {} func (x *MessageTransport_Protocol_Ancillary_BackupDirective) ProtoReflect() protoreflect.Message { mi := &file_waMsgTransport_WAMsgTransport_proto_msgTypes[6] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -512,22 +491,19 @@ func (x *MessageTransport_Protocol_Ancillary_BackupDirective) GetSupplementalKey } type MessageTransport_Protocol_Ancillary_ICDCParticipantDevices struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` SenderIdentity *MessageTransport_Protocol_Ancillary_ICDCParticipantDevices_ICDCIdentityListDescription `protobuf:"bytes,1,opt,name=senderIdentity" json:"senderIdentity,omitempty"` RecipientIdentities []*MessageTransport_Protocol_Ancillary_ICDCParticipantDevices_ICDCIdentityListDescription `protobuf:"bytes,2,rep,name=recipientIdentities" json:"recipientIdentities,omitempty"` RecipientUserJIDs []string `protobuf:"bytes,3,rep,name=recipientUserJIDs" json:"recipientUserJIDs,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *MessageTransport_Protocol_Ancillary_ICDCParticipantDevices) Reset() { *x = MessageTransport_Protocol_Ancillary_ICDCParticipantDevices{} - if protoimpl.UnsafeEnabled { - mi := &file_waMsgTransport_WAMsgTransport_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waMsgTransport_WAMsgTransport_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *MessageTransport_Protocol_Ancillary_ICDCParticipantDevices) String() string { @@ -538,7 +514,7 @@ func (*MessageTransport_Protocol_Ancillary_ICDCParticipantDevices) ProtoMessage( func (x *MessageTransport_Protocol_Ancillary_ICDCParticipantDevices) ProtoReflect() protoreflect.Message { mi := &file_waMsgTransport_WAMsgTransport_proto_msgTypes[7] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -575,21 +551,18 @@ func (x *MessageTransport_Protocol_Ancillary_ICDCParticipantDevices) GetRecipien } type MessageTransport_Protocol_Ancillary_SenderKeyDistributionMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - GroupID *string `protobuf:"bytes,1,opt,name=groupID" json:"groupID,omitempty"` - AxolotlSenderKeyDistributionMessage []byte `protobuf:"bytes,2,opt,name=axolotlSenderKeyDistributionMessage" json:"axolotlSenderKeyDistributionMessage,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + GroupID *string `protobuf:"bytes,1,opt,name=groupID" json:"groupID,omitempty"` + AxolotlSenderKeyDistributionMessage []byte `protobuf:"bytes,2,opt,name=axolotlSenderKeyDistributionMessage" json:"axolotlSenderKeyDistributionMessage,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *MessageTransport_Protocol_Ancillary_SenderKeyDistributionMessage) Reset() { *x = MessageTransport_Protocol_Ancillary_SenderKeyDistributionMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_waMsgTransport_WAMsgTransport_proto_msgTypes[8] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waMsgTransport_WAMsgTransport_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *MessageTransport_Protocol_Ancillary_SenderKeyDistributionMessage) String() string { @@ -600,7 +573,7 @@ func (*MessageTransport_Protocol_Ancillary_SenderKeyDistributionMessage) ProtoMe func (x *MessageTransport_Protocol_Ancillary_SenderKeyDistributionMessage) ProtoReflect() protoreflect.Message { mi := &file_waMsgTransport_WAMsgTransport_proto_msgTypes[8] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -630,23 +603,20 @@ func (x *MessageTransport_Protocol_Ancillary_SenderKeyDistributionMessage) GetAx } type MessageTransport_Protocol_Ancillary_ICDCParticipantDevices_ICDCIdentityListDescription struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Seq *int32 `protobuf:"varint,1,opt,name=seq" json:"seq,omitempty"` - SigningDevice []byte `protobuf:"bytes,2,opt,name=signingDevice" json:"signingDevice,omitempty"` - UnknownDevices [][]byte `protobuf:"bytes,3,rep,name=unknownDevices" json:"unknownDevices,omitempty"` - UnknownDeviceIDs []int32 `protobuf:"varint,4,rep,name=unknownDeviceIDs" json:"unknownDeviceIDs,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Seq *int32 `protobuf:"varint,1,opt,name=seq" json:"seq,omitempty"` + SigningDevice []byte `protobuf:"bytes,2,opt,name=signingDevice" json:"signingDevice,omitempty"` + UnknownDevices [][]byte `protobuf:"bytes,3,rep,name=unknownDevices" json:"unknownDevices,omitempty"` + UnknownDeviceIDs []int32 `protobuf:"varint,4,rep,name=unknownDeviceIDs" json:"unknownDeviceIDs,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *MessageTransport_Protocol_Ancillary_ICDCParticipantDevices_ICDCIdentityListDescription) Reset() { *x = MessageTransport_Protocol_Ancillary_ICDCParticipantDevices_ICDCIdentityListDescription{} - if protoimpl.UnsafeEnabled { - mi := &file_waMsgTransport_WAMsgTransport_proto_msgTypes[9] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waMsgTransport_WAMsgTransport_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *MessageTransport_Protocol_Ancillary_ICDCParticipantDevices_ICDCIdentityListDescription) String() string { @@ -658,7 +628,7 @@ func (*MessageTransport_Protocol_Ancillary_ICDCParticipantDevices_ICDCIdentityLi func (x *MessageTransport_Protocol_Ancillary_ICDCParticipantDevices_ICDCIdentityListDescription) ProtoReflect() protoreflect.Message { mi := &file_waMsgTransport_WAMsgTransport_proto_msgTypes[9] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -702,21 +672,18 @@ func (x *MessageTransport_Protocol_Ancillary_ICDCParticipantDevices_ICDCIdentity } type MessageTransport_Protocol_Integral_DeviceSentMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - DestinationJID *string `protobuf:"bytes,1,opt,name=destinationJID" json:"destinationJID,omitempty"` - Phash *string `protobuf:"bytes,2,opt,name=phash" json:"phash,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + DestinationJID *string `protobuf:"bytes,1,opt,name=destinationJID" json:"destinationJID,omitempty"` + Phash *string `protobuf:"bytes,2,opt,name=phash" json:"phash,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *MessageTransport_Protocol_Integral_DeviceSentMessage) Reset() { *x = MessageTransport_Protocol_Integral_DeviceSentMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_waMsgTransport_WAMsgTransport_proto_msgTypes[10] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waMsgTransport_WAMsgTransport_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *MessageTransport_Protocol_Integral_DeviceSentMessage) String() string { @@ -727,7 +694,7 @@ func (*MessageTransport_Protocol_Integral_DeviceSentMessage) ProtoMessage() {} func (x *MessageTransport_Protocol_Integral_DeviceSentMessage) ProtoReflect() protoreflect.Message { mi := &file_waMsgTransport_WAMsgTransport_proto_msgTypes[10] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -758,17 +725,70 @@ func (x *MessageTransport_Protocol_Integral_DeviceSentMessage) GetPhash() string var File_waMsgTransport_WAMsgTransport_proto protoreflect.FileDescriptor -//go:embed WAMsgTransport.pb.raw -var file_waMsgTransport_WAMsgTransport_proto_rawDesc []byte +const file_waMsgTransport_WAMsgTransport_proto_rawDesc = "" + + "\n" + + "#waMsgTransport/WAMsgTransport.proto\x12\x0eWAMsgTransport\x1a\x17waCommon/WACommon.proto\"\x8b\x10\n" + + "\x10MessageTransport\x12B\n" + + "\apayload\x18\x01 \x01(\v2(.WAMsgTransport.MessageTransport.PayloadR\apayload\x12E\n" + + "\bprotocol\x18\x02 \x01(\v2).WAMsgTransport.MessageTransport.ProtocolR\bprotocol\x1a\x91\x01\n" + + "\aPayload\x12E\n" + + "\x12applicationPayload\x18\x01 \x01(\v2\x15.WACommon.SubProtocolR\x12applicationPayload\x12?\n" + + "\vfutureProof\x18\x03 \x01(\x0e2\x1d.WACommon.FutureProofBehaviorR\vfutureProof\x1a\xd7\r\n" + + "\bProtocol\x12N\n" + + "\bintegral\x18\x01 \x01(\v22.WAMsgTransport.MessageTransport.Protocol.IntegralR\bintegral\x12Q\n" + + "\tancillary\x18\x02 \x01(\v23.WAMsgTransport.MessageTransport.Protocol.AncillaryR\tancillary\x1a\xd5\n" + + "\n" + + "\tAncillary\x12d\n" + + "\x04skdm\x18\x02 \x01(\v2P.WAMsgTransport.MessageTransport.Protocol.Ancillary.SenderKeyDistributionMessageR\x04skdm\x12R\n" + + "\x12deviceListMetadata\x18\x03 \x01(\v2\".WAMsgTransport.DeviceListMetadataR\x12deviceListMetadata\x12^\n" + + "\x04icdc\x18\x04 \x01(\v2J.WAMsgTransport.MessageTransport.Protocol.Ancillary.ICDCParticipantDevicesR\x04icdc\x12m\n" + + "\x0fbackupDirective\x18\x05 \x01(\v2C.WAMsgTransport.MessageTransport.Protocol.Ancillary.BackupDirectiveR\x0fbackupDirective\x1a\x90\x02\n" + + "\x0fBackupDirective\x12\x1c\n" + + "\tmessageID\x18\x01 \x01(\tR\tmessageID\x12n\n" + + "\n" + + "actionType\x18\x02 \x01(\x0e2N.WAMsgTransport.MessageTransport.Protocol.Ancillary.BackupDirective.ActionTypeR\n" + + "actionType\x12(\n" + + "\x0fsupplementalKey\x18\x03 \x01(\tR\x0fsupplementalKey\"E\n" + + "\n" + + "ActionType\x12\b\n" + + "\x04NOOP\x10\x00\x12\n" + + "\n" + + "\x06UPSERT\x10\x01\x12\n" + + "\n" + + "\x06DELETE\x10\x02\x12\x15\n" + + "\x11UPSERT_AND_DELETE\x10\x03\x1a\x9e\x04\n" + + "\x16ICDCParticipantDevices\x12\x8e\x01\n" + + "\x0esenderIdentity\x18\x01 \x01(\v2f.WAMsgTransport.MessageTransport.Protocol.Ancillary.ICDCParticipantDevices.ICDCIdentityListDescriptionR\x0esenderIdentity\x12\x98\x01\n" + + "\x13recipientIdentities\x18\x02 \x03(\v2f.WAMsgTransport.MessageTransport.Protocol.Ancillary.ICDCParticipantDevices.ICDCIdentityListDescriptionR\x13recipientIdentities\x12,\n" + + "\x11recipientUserJIDs\x18\x03 \x03(\tR\x11recipientUserJIDs\x1a\xa9\x01\n" + + "\x1bICDCIdentityListDescription\x12\x10\n" + + "\x03seq\x18\x01 \x01(\x05R\x03seq\x12$\n" + + "\rsigningDevice\x18\x02 \x01(\fR\rsigningDevice\x12&\n" + + "\x0eunknownDevices\x18\x03 \x03(\fR\x0eunknownDevices\x12*\n" + + "\x10unknownDeviceIDs\x18\x04 \x03(\x05R\x10unknownDeviceIDs\x1a\x8a\x01\n" + + "\x1cSenderKeyDistributionMessage\x12\x18\n" + + "\agroupID\x18\x01 \x01(\tR\agroupID\x12P\n" + + "#axolotlSenderKeyDistributionMessage\x18\x02 \x01(\fR#axolotlSenderKeyDistributionMessage\x1a\xcf\x01\n" + + "\bIntegral\x12\x18\n" + + "\apadding\x18\x01 \x01(\fR\apadding\x12V\n" + + "\x03DSM\x18\x02 \x01(\v2D.WAMsgTransport.MessageTransport.Protocol.Integral.DeviceSentMessageR\x03DSM\x1aQ\n" + + "\x11DeviceSentMessage\x12&\n" + + "\x0edestinationJID\x18\x01 \x01(\tR\x0edestinationJID\x12\x14\n" + + "\x05phash\x18\x02 \x01(\tR\x05phash\"\xc0\x01\n" + + "\x12DeviceListMetadata\x12$\n" + + "\rsenderKeyHash\x18\x01 \x01(\fR\rsenderKeyHash\x12(\n" + + "\x0fsenderTimestamp\x18\x02 \x01(\x04R\x0fsenderTimestamp\x12*\n" + + "\x10recipientKeyHash\x18\b \x01(\fR\x10recipientKeyHash\x12.\n" + + "\x12recipientTimestamp\x18\t \x01(\x04R\x12recipientTimestampB*Z(go.mau.fi/whatsmeow/proto/waMsgTransport" var ( file_waMsgTransport_WAMsgTransport_proto_rawDescOnce sync.Once - file_waMsgTransport_WAMsgTransport_proto_rawDescData = file_waMsgTransport_WAMsgTransport_proto_rawDesc + file_waMsgTransport_WAMsgTransport_proto_rawDescData []byte ) func file_waMsgTransport_WAMsgTransport_proto_rawDescGZIP() []byte { file_waMsgTransport_WAMsgTransport_proto_rawDescOnce.Do(func() { - file_waMsgTransport_WAMsgTransport_proto_rawDescData = protoimpl.X.CompressGZIP(file_waMsgTransport_WAMsgTransport_proto_rawDescData) + file_waMsgTransport_WAMsgTransport_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_waMsgTransport_WAMsgTransport_proto_rawDesc), len(file_waMsgTransport_WAMsgTransport_proto_rawDesc))) }) return file_waMsgTransport_WAMsgTransport_proto_rawDescData } @@ -818,145 +838,11 @@ func file_waMsgTransport_WAMsgTransport_proto_init() { if File_waMsgTransport_WAMsgTransport_proto != nil { return } - if !protoimpl.UnsafeEnabled { - file_waMsgTransport_WAMsgTransport_proto_msgTypes[0].Exporter = func(v any, i int) any { - switch v := v.(*MessageTransport); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waMsgTransport_WAMsgTransport_proto_msgTypes[1].Exporter = func(v any, i int) any { - switch v := v.(*DeviceListMetadata); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waMsgTransport_WAMsgTransport_proto_msgTypes[2].Exporter = func(v any, i int) any { - switch v := v.(*MessageTransport_Payload); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waMsgTransport_WAMsgTransport_proto_msgTypes[3].Exporter = func(v any, i int) any { - switch v := v.(*MessageTransport_Protocol); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waMsgTransport_WAMsgTransport_proto_msgTypes[4].Exporter = func(v any, i int) any { - switch v := v.(*MessageTransport_Protocol_Ancillary); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waMsgTransport_WAMsgTransport_proto_msgTypes[5].Exporter = func(v any, i int) any { - switch v := v.(*MessageTransport_Protocol_Integral); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waMsgTransport_WAMsgTransport_proto_msgTypes[6].Exporter = func(v any, i int) any { - switch v := v.(*MessageTransport_Protocol_Ancillary_BackupDirective); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waMsgTransport_WAMsgTransport_proto_msgTypes[7].Exporter = func(v any, i int) any { - switch v := v.(*MessageTransport_Protocol_Ancillary_ICDCParticipantDevices); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waMsgTransport_WAMsgTransport_proto_msgTypes[8].Exporter = func(v any, i int) any { - switch v := v.(*MessageTransport_Protocol_Ancillary_SenderKeyDistributionMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waMsgTransport_WAMsgTransport_proto_msgTypes[9].Exporter = func(v any, i int) any { - switch v := v.(*MessageTransport_Protocol_Ancillary_ICDCParticipantDevices_ICDCIdentityListDescription); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waMsgTransport_WAMsgTransport_proto_msgTypes[10].Exporter = func(v any, i int) any { - switch v := v.(*MessageTransport_Protocol_Integral_DeviceSentMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_waMsgTransport_WAMsgTransport_proto_rawDesc, + RawDescriptor: unsafe.Slice(unsafe.StringData(file_waMsgTransport_WAMsgTransport_proto_rawDesc), len(file_waMsgTransport_WAMsgTransport_proto_rawDesc)), NumEnums: 1, NumMessages: 11, NumExtensions: 0, @@ -968,7 +854,6 @@ func file_waMsgTransport_WAMsgTransport_proto_init() { MessageInfos: file_waMsgTransport_WAMsgTransport_proto_msgTypes, }.Build() File_waMsgTransport_WAMsgTransport_proto = out.File - file_waMsgTransport_WAMsgTransport_proto_rawDesc = nil file_waMsgTransport_WAMsgTransport_proto_goTypes = nil file_waMsgTransport_WAMsgTransport_proto_depIdxs = nil } diff --git a/vendor/go.mau.fi/whatsmeow/proto/waMsgTransport/WAMsgTransport.pb.raw b/vendor/go.mau.fi/whatsmeow/proto/waMsgTransport/WAMsgTransport.pb.raw deleted file mode 100644 index befef488ec..0000000000 Binary files a/vendor/go.mau.fi/whatsmeow/proto/waMsgTransport/WAMsgTransport.pb.raw and /dev/null differ diff --git a/vendor/go.mau.fi/whatsmeow/proto/waMsgTransport/extra.go b/vendor/go.mau.fi/whatsmeow/proto/waMsgTransport/extra.go index c774dfee89..d8758f1e7f 100644 --- a/vendor/go.mau.fi/whatsmeow/proto/waMsgTransport/extra.go +++ b/vendor/go.mau.fi/whatsmeow/proto/waMsgTransport/extra.go @@ -2,18 +2,19 @@ package waMsgTransport import ( "go.mau.fi/whatsmeow/proto/armadilloutil" + "go.mau.fi/whatsmeow/proto/instamadilloTransportPayload" "go.mau.fi/whatsmeow/proto/waMsgApplication" ) const ( - MessageApplicationVersion = 2 + FBMessageApplicationVersion = 2 + IGMessageApplicationVersion = 3 ) -func (msg *MessageTransport_Payload) Decode() (*waMsgApplication.MessageApplication, error) { - return armadilloutil.Unmarshal(&waMsgApplication.MessageApplication{}, msg.GetApplicationPayload(), MessageApplicationVersion) +func (msg *MessageTransport_Payload) DecodeFB() (*waMsgApplication.MessageApplication, error) { + return armadilloutil.Unmarshal(&waMsgApplication.MessageApplication{}, msg.GetApplicationPayload(), FBMessageApplicationVersion) } -func (msg *MessageTransport_Payload) Set(payload *waMsgApplication.MessageApplication) (err error) { - msg.ApplicationPayload, err = armadilloutil.Marshal(payload, MessageApplicationVersion) - return +func (msg *MessageTransport_Payload) DecodeIG() (*instamadilloTransportPayload.TransportPayload, error) { + return armadilloutil.Unmarshal(&instamadilloTransportPayload.TransportPayload{}, msg.GetApplicationPayload(), IGMessageApplicationVersion) } diff --git a/vendor/go.mau.fi/whatsmeow/proto/waMultiDevice/WAMultiDevice.pb.go b/vendor/go.mau.fi/whatsmeow/proto/waMultiDevice/WAMultiDevice.pb.go index 1349093a1a..17691d4b41 100644 --- a/vendor/go.mau.fi/whatsmeow/proto/waMultiDevice/WAMultiDevice.pb.go +++ b/vendor/go.mau.fi/whatsmeow/proto/waMultiDevice/WAMultiDevice.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 +// protoc-gen-go v1.36.10 // protoc v3.21.12 // source: waMultiDevice/WAMultiDevice.proto @@ -9,11 +9,10 @@ package waMultiDevice import ( reflect "reflect" sync "sync" + unsafe "unsafe" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" - - _ "embed" ) const ( @@ -24,21 +23,18 @@ const ( ) type MultiDevice struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Payload *MultiDevice_Payload `protobuf:"bytes,1,opt,name=payload" json:"payload,omitempty"` + Metadata *MultiDevice_Metadata `protobuf:"bytes,2,opt,name=metadata" json:"metadata,omitempty"` unknownFields protoimpl.UnknownFields - - Payload *MultiDevice_Payload `protobuf:"bytes,1,opt,name=payload" json:"payload,omitempty"` - Metadata *MultiDevice_Metadata `protobuf:"bytes,2,opt,name=metadata" json:"metadata,omitempty"` + sizeCache protoimpl.SizeCache } func (x *MultiDevice) Reset() { *x = MultiDevice{} - if protoimpl.UnsafeEnabled { - mi := &file_waMultiDevice_WAMultiDevice_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waMultiDevice_WAMultiDevice_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *MultiDevice) String() string { @@ -49,7 +45,7 @@ func (*MultiDevice) ProtoMessage() {} func (x *MultiDevice) ProtoReflect() protoreflect.Message { mi := &file_waMultiDevice_WAMultiDevice_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -79,18 +75,16 @@ func (x *MultiDevice) GetMetadata() *MultiDevice_Metadata { } type MultiDevice_Metadata struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *MultiDevice_Metadata) Reset() { *x = MultiDevice_Metadata{} - if protoimpl.UnsafeEnabled { - mi := &file_waMultiDevice_WAMultiDevice_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waMultiDevice_WAMultiDevice_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *MultiDevice_Metadata) String() string { @@ -101,7 +95,7 @@ func (*MultiDevice_Metadata) ProtoMessage() {} func (x *MultiDevice_Metadata) ProtoReflect() protoreflect.Message { mi := &file_waMultiDevice_WAMultiDevice_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -117,24 +111,21 @@ func (*MultiDevice_Metadata) Descriptor() ([]byte, []int) { } type MultiDevice_Payload struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Types that are assignable to Payload: + state protoimpl.MessageState `protogen:"open.v1"` + // Types that are valid to be assigned to Payload: // // *MultiDevice_Payload_ApplicationData // *MultiDevice_Payload_Signal - Payload isMultiDevice_Payload_Payload `protobuf_oneof:"payload"` + Payload isMultiDevice_Payload_Payload `protobuf_oneof:"payload"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *MultiDevice_Payload) Reset() { *x = MultiDevice_Payload{} - if protoimpl.UnsafeEnabled { - mi := &file_waMultiDevice_WAMultiDevice_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waMultiDevice_WAMultiDevice_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *MultiDevice_Payload) String() string { @@ -145,7 +136,7 @@ func (*MultiDevice_Payload) ProtoMessage() {} func (x *MultiDevice_Payload) ProtoReflect() protoreflect.Message { mi := &file_waMultiDevice_WAMultiDevice_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -160,23 +151,27 @@ func (*MultiDevice_Payload) Descriptor() ([]byte, []int) { return file_waMultiDevice_WAMultiDevice_proto_rawDescGZIP(), []int{0, 1} } -func (m *MultiDevice_Payload) GetPayload() isMultiDevice_Payload_Payload { - if m != nil { - return m.Payload +func (x *MultiDevice_Payload) GetPayload() isMultiDevice_Payload_Payload { + if x != nil { + return x.Payload } return nil } func (x *MultiDevice_Payload) GetApplicationData() *MultiDevice_ApplicationData { - if x, ok := x.GetPayload().(*MultiDevice_Payload_ApplicationData); ok { - return x.ApplicationData + if x != nil { + if x, ok := x.Payload.(*MultiDevice_Payload_ApplicationData); ok { + return x.ApplicationData + } } return nil } func (x *MultiDevice_Payload) GetSignal() *MultiDevice_Signal { - if x, ok := x.GetPayload().(*MultiDevice_Payload_Signal); ok { - return x.Signal + if x != nil { + if x, ok := x.Payload.(*MultiDevice_Payload_Signal); ok { + return x.Signal + } } return nil } @@ -198,24 +193,21 @@ func (*MultiDevice_Payload_ApplicationData) isMultiDevice_Payload_Payload() {} func (*MultiDevice_Payload_Signal) isMultiDevice_Payload_Payload() {} type MultiDevice_ApplicationData struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Types that are assignable to ApplicationData: + state protoimpl.MessageState `protogen:"open.v1"` + // Types that are valid to be assigned to ApplicationData: // // *MultiDevice_ApplicationData_AppStateSyncKeyShare // *MultiDevice_ApplicationData_AppStateSyncKeyRequest ApplicationData isMultiDevice_ApplicationData_ApplicationData `protobuf_oneof:"applicationData"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *MultiDevice_ApplicationData) Reset() { *x = MultiDevice_ApplicationData{} - if protoimpl.UnsafeEnabled { - mi := &file_waMultiDevice_WAMultiDevice_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waMultiDevice_WAMultiDevice_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *MultiDevice_ApplicationData) String() string { @@ -226,7 +218,7 @@ func (*MultiDevice_ApplicationData) ProtoMessage() {} func (x *MultiDevice_ApplicationData) ProtoReflect() protoreflect.Message { mi := &file_waMultiDevice_WAMultiDevice_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -241,23 +233,27 @@ func (*MultiDevice_ApplicationData) Descriptor() ([]byte, []int) { return file_waMultiDevice_WAMultiDevice_proto_rawDescGZIP(), []int{0, 2} } -func (m *MultiDevice_ApplicationData) GetApplicationData() isMultiDevice_ApplicationData_ApplicationData { - if m != nil { - return m.ApplicationData +func (x *MultiDevice_ApplicationData) GetApplicationData() isMultiDevice_ApplicationData_ApplicationData { + if x != nil { + return x.ApplicationData } return nil } func (x *MultiDevice_ApplicationData) GetAppStateSyncKeyShare() *MultiDevice_ApplicationData_AppStateSyncKeyShareMessage { - if x, ok := x.GetApplicationData().(*MultiDevice_ApplicationData_AppStateSyncKeyShare); ok { - return x.AppStateSyncKeyShare + if x != nil { + if x, ok := x.ApplicationData.(*MultiDevice_ApplicationData_AppStateSyncKeyShare); ok { + return x.AppStateSyncKeyShare + } } return nil } func (x *MultiDevice_ApplicationData) GetAppStateSyncKeyRequest() *MultiDevice_ApplicationData_AppStateSyncKeyRequestMessage { - if x, ok := x.GetApplicationData().(*MultiDevice_ApplicationData_AppStateSyncKeyRequest); ok { - return x.AppStateSyncKeyRequest + if x != nil { + if x, ok := x.ApplicationData.(*MultiDevice_ApplicationData_AppStateSyncKeyRequest); ok { + return x.AppStateSyncKeyRequest + } } return nil } @@ -281,18 +277,16 @@ func (*MultiDevice_ApplicationData_AppStateSyncKeyRequest) isMultiDevice_Applica } type MultiDevice_Signal struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *MultiDevice_Signal) Reset() { *x = MultiDevice_Signal{} - if protoimpl.UnsafeEnabled { - mi := &file_waMultiDevice_WAMultiDevice_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waMultiDevice_WAMultiDevice_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *MultiDevice_Signal) String() string { @@ -303,7 +297,7 @@ func (*MultiDevice_Signal) ProtoMessage() {} func (x *MultiDevice_Signal) ProtoReflect() protoreflect.Message { mi := &file_waMultiDevice_WAMultiDevice_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -319,20 +313,17 @@ func (*MultiDevice_Signal) Descriptor() ([]byte, []int) { } type MultiDevice_ApplicationData_AppStateSyncKeyRequestMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + KeyIDs []*MultiDevice_ApplicationData_AppStateSyncKeyId `protobuf:"bytes,1,rep,name=keyIDs" json:"keyIDs,omitempty"` unknownFields protoimpl.UnknownFields - - KeyIDs []*MultiDevice_ApplicationData_AppStateSyncKeyId `protobuf:"bytes,1,rep,name=keyIDs" json:"keyIDs,omitempty"` + sizeCache protoimpl.SizeCache } func (x *MultiDevice_ApplicationData_AppStateSyncKeyRequestMessage) Reset() { *x = MultiDevice_ApplicationData_AppStateSyncKeyRequestMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_waMultiDevice_WAMultiDevice_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waMultiDevice_WAMultiDevice_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *MultiDevice_ApplicationData_AppStateSyncKeyRequestMessage) String() string { @@ -343,7 +334,7 @@ func (*MultiDevice_ApplicationData_AppStateSyncKeyRequestMessage) ProtoMessage() func (x *MultiDevice_ApplicationData_AppStateSyncKeyRequestMessage) ProtoReflect() protoreflect.Message { mi := &file_waMultiDevice_WAMultiDevice_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -366,20 +357,17 @@ func (x *MultiDevice_ApplicationData_AppStateSyncKeyRequestMessage) GetKeyIDs() } type MultiDevice_ApplicationData_AppStateSyncKeyShareMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Keys []*MultiDevice_ApplicationData_AppStateSyncKey `protobuf:"bytes,1,rep,name=keys" json:"keys,omitempty"` unknownFields protoimpl.UnknownFields - - Keys []*MultiDevice_ApplicationData_AppStateSyncKey `protobuf:"bytes,1,rep,name=keys" json:"keys,omitempty"` + sizeCache protoimpl.SizeCache } func (x *MultiDevice_ApplicationData_AppStateSyncKeyShareMessage) Reset() { *x = MultiDevice_ApplicationData_AppStateSyncKeyShareMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_waMultiDevice_WAMultiDevice_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waMultiDevice_WAMultiDevice_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *MultiDevice_ApplicationData_AppStateSyncKeyShareMessage) String() string { @@ -390,7 +378,7 @@ func (*MultiDevice_ApplicationData_AppStateSyncKeyShareMessage) ProtoMessage() { func (x *MultiDevice_ApplicationData_AppStateSyncKeyShareMessage) ProtoReflect() protoreflect.Message { mi := &file_waMultiDevice_WAMultiDevice_proto_msgTypes[6] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -413,21 +401,18 @@ func (x *MultiDevice_ApplicationData_AppStateSyncKeyShareMessage) GetKeys() []*M } type MultiDevice_ApplicationData_AppStateSyncKey struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + KeyID *MultiDevice_ApplicationData_AppStateSyncKeyId `protobuf:"bytes,1,opt,name=keyID" json:"keyID,omitempty"` + KeyData *MultiDevice_ApplicationData_AppStateSyncKey_AppStateSyncKeyData `protobuf:"bytes,2,opt,name=keyData" json:"keyData,omitempty"` unknownFields protoimpl.UnknownFields - - KeyID *MultiDevice_ApplicationData_AppStateSyncKeyId `protobuf:"bytes,1,opt,name=keyID" json:"keyID,omitempty"` - KeyData *MultiDevice_ApplicationData_AppStateSyncKey_AppStateSyncKeyData `protobuf:"bytes,2,opt,name=keyData" json:"keyData,omitempty"` + sizeCache protoimpl.SizeCache } func (x *MultiDevice_ApplicationData_AppStateSyncKey) Reset() { *x = MultiDevice_ApplicationData_AppStateSyncKey{} - if protoimpl.UnsafeEnabled { - mi := &file_waMultiDevice_WAMultiDevice_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waMultiDevice_WAMultiDevice_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *MultiDevice_ApplicationData_AppStateSyncKey) String() string { @@ -438,7 +423,7 @@ func (*MultiDevice_ApplicationData_AppStateSyncKey) ProtoMessage() {} func (x *MultiDevice_ApplicationData_AppStateSyncKey) ProtoReflect() protoreflect.Message { mi := &file_waMultiDevice_WAMultiDevice_proto_msgTypes[7] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -468,20 +453,17 @@ func (x *MultiDevice_ApplicationData_AppStateSyncKey) GetKeyData() *MultiDevice_ } type MultiDevice_ApplicationData_AppStateSyncKeyId struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + KeyID []byte `protobuf:"bytes,1,opt,name=keyID" json:"keyID,omitempty"` unknownFields protoimpl.UnknownFields - - KeyID []byte `protobuf:"bytes,1,opt,name=keyID" json:"keyID,omitempty"` + sizeCache protoimpl.SizeCache } func (x *MultiDevice_ApplicationData_AppStateSyncKeyId) Reset() { *x = MultiDevice_ApplicationData_AppStateSyncKeyId{} - if protoimpl.UnsafeEnabled { - mi := &file_waMultiDevice_WAMultiDevice_proto_msgTypes[8] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waMultiDevice_WAMultiDevice_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *MultiDevice_ApplicationData_AppStateSyncKeyId) String() string { @@ -492,7 +474,7 @@ func (*MultiDevice_ApplicationData_AppStateSyncKeyId) ProtoMessage() {} func (x *MultiDevice_ApplicationData_AppStateSyncKeyId) ProtoReflect() protoreflect.Message { mi := &file_waMultiDevice_WAMultiDevice_proto_msgTypes[8] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -515,22 +497,19 @@ func (x *MultiDevice_ApplicationData_AppStateSyncKeyId) GetKeyID() []byte { } type MultiDevice_ApplicationData_AppStateSyncKey_AppStateSyncKeyData struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + KeyData []byte `protobuf:"bytes,1,opt,name=keyData" json:"keyData,omitempty"` + Fingerprint *MultiDevice_ApplicationData_AppStateSyncKey_AppStateSyncKeyData_AppStateSyncKeyFingerprint `protobuf:"bytes,2,opt,name=fingerprint" json:"fingerprint,omitempty"` + Timestamp *int64 `protobuf:"varint,3,opt,name=timestamp" json:"timestamp,omitempty"` unknownFields protoimpl.UnknownFields - - KeyData []byte `protobuf:"bytes,1,opt,name=keyData" json:"keyData,omitempty"` - Fingerprint *MultiDevice_ApplicationData_AppStateSyncKey_AppStateSyncKeyData_AppStateSyncKeyFingerprint `protobuf:"bytes,2,opt,name=fingerprint" json:"fingerprint,omitempty"` - Timestamp *int64 `protobuf:"varint,3,opt,name=timestamp" json:"timestamp,omitempty"` + sizeCache protoimpl.SizeCache } func (x *MultiDevice_ApplicationData_AppStateSyncKey_AppStateSyncKeyData) Reset() { *x = MultiDevice_ApplicationData_AppStateSyncKey_AppStateSyncKeyData{} - if protoimpl.UnsafeEnabled { - mi := &file_waMultiDevice_WAMultiDevice_proto_msgTypes[9] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waMultiDevice_WAMultiDevice_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *MultiDevice_ApplicationData_AppStateSyncKey_AppStateSyncKeyData) String() string { @@ -541,7 +520,7 @@ func (*MultiDevice_ApplicationData_AppStateSyncKey_AppStateSyncKeyData) ProtoMes func (x *MultiDevice_ApplicationData_AppStateSyncKey_AppStateSyncKeyData) ProtoReflect() protoreflect.Message { mi := &file_waMultiDevice_WAMultiDevice_proto_msgTypes[9] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -578,22 +557,19 @@ func (x *MultiDevice_ApplicationData_AppStateSyncKey_AppStateSyncKeyData) GetTim } type MultiDevice_ApplicationData_AppStateSyncKey_AppStateSyncKeyData_AppStateSyncKeyFingerprint struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + RawID *uint32 `protobuf:"varint,1,opt,name=rawID" json:"rawID,omitempty"` + CurrentIndex *uint32 `protobuf:"varint,2,opt,name=currentIndex" json:"currentIndex,omitempty"` + DeviceIndexes []uint32 `protobuf:"varint,3,rep,packed,name=deviceIndexes" json:"deviceIndexes,omitempty"` unknownFields protoimpl.UnknownFields - - RawID *uint32 `protobuf:"varint,1,opt,name=rawID" json:"rawID,omitempty"` - CurrentIndex *uint32 `protobuf:"varint,2,opt,name=currentIndex" json:"currentIndex,omitempty"` - DeviceIndexes []uint32 `protobuf:"varint,3,rep,packed,name=deviceIndexes" json:"deviceIndexes,omitempty"` + sizeCache protoimpl.SizeCache } func (x *MultiDevice_ApplicationData_AppStateSyncKey_AppStateSyncKeyData_AppStateSyncKeyFingerprint) Reset() { *x = MultiDevice_ApplicationData_AppStateSyncKey_AppStateSyncKeyData_AppStateSyncKeyFingerprint{} - if protoimpl.UnsafeEnabled { - mi := &file_waMultiDevice_WAMultiDevice_proto_msgTypes[10] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waMultiDevice_WAMultiDevice_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *MultiDevice_ApplicationData_AppStateSyncKey_AppStateSyncKeyData_AppStateSyncKeyFingerprint) String() string { @@ -605,7 +581,7 @@ func (*MultiDevice_ApplicationData_AppStateSyncKey_AppStateSyncKeyData_AppStateS func (x *MultiDevice_ApplicationData_AppStateSyncKey_AppStateSyncKeyData_AppStateSyncKeyFingerprint) ProtoReflect() protoreflect.Message { mi := &file_waMultiDevice_WAMultiDevice_proto_msgTypes[10] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -643,17 +619,49 @@ func (x *MultiDevice_ApplicationData_AppStateSyncKey_AppStateSyncKeyData_AppStat var File_waMultiDevice_WAMultiDevice_proto protoreflect.FileDescriptor -//go:embed WAMultiDevice.pb.raw -var file_waMultiDevice_WAMultiDevice_proto_rawDesc []byte +const file_waMultiDevice_WAMultiDevice_proto_rawDesc = "" + + "\n" + + "!waMultiDevice/WAMultiDevice.proto\x12\rWAMultiDevice\"\xbc\v\n" + + "\vMultiDevice\x12<\n" + + "\apayload\x18\x01 \x01(\v2\".WAMultiDevice.MultiDevice.PayloadR\apayload\x12?\n" + + "\bmetadata\x18\x02 \x01(\v2#.WAMultiDevice.MultiDevice.MetadataR\bmetadata\x1a\n" + + "\n" + + "\bMetadata\x1a\xa9\x01\n" + + "\aPayload\x12V\n" + + "\x0fapplicationData\x18\x01 \x01(\v2*.WAMultiDevice.MultiDevice.ApplicationDataH\x00R\x0fapplicationData\x12;\n" + + "\x06signal\x18\x02 \x01(\v2!.WAMultiDevice.MultiDevice.SignalH\x00R\x06signalB\t\n" + + "\apayload\x1a\xeb\b\n" + + "\x0fApplicationData\x12|\n" + + "\x14appStateSyncKeyShare\x18\x01 \x01(\v2F.WAMultiDevice.MultiDevice.ApplicationData.AppStateSyncKeyShareMessageH\x00R\x14appStateSyncKeyShare\x12\x82\x01\n" + + "\x16appStateSyncKeyRequest\x18\x02 \x01(\v2H.WAMultiDevice.MultiDevice.ApplicationData.AppStateSyncKeyRequestMessageH\x00R\x16appStateSyncKeyRequest\x1au\n" + + "\x1dAppStateSyncKeyRequestMessage\x12T\n" + + "\x06keyIDs\x18\x01 \x03(\v2<.WAMultiDevice.MultiDevice.ApplicationData.AppStateSyncKeyIdR\x06keyIDs\x1am\n" + + "\x1bAppStateSyncKeyShareMessage\x12N\n" + + "\x04keys\x18\x01 \x03(\v2:.WAMultiDevice.MultiDevice.ApplicationData.AppStateSyncKeyR\x04keys\x1a\xb0\x04\n" + + "\x0fAppStateSyncKey\x12R\n" + + "\x05keyID\x18\x01 \x01(\v2<.WAMultiDevice.MultiDevice.ApplicationData.AppStateSyncKeyIdR\x05keyID\x12h\n" + + "\akeyData\x18\x02 \x01(\v2N.WAMultiDevice.MultiDevice.ApplicationData.AppStateSyncKey.AppStateSyncKeyDataR\akeyData\x1a\xde\x02\n" + + "\x13AppStateSyncKeyData\x12\x18\n" + + "\akeyData\x18\x01 \x01(\fR\akeyData\x12\x8b\x01\n" + + "\vfingerprint\x18\x02 \x01(\v2i.WAMultiDevice.MultiDevice.ApplicationData.AppStateSyncKey.AppStateSyncKeyData.AppStateSyncKeyFingerprintR\vfingerprint\x12\x1c\n" + + "\ttimestamp\x18\x03 \x01(\x03R\ttimestamp\x1a\x80\x01\n" + + "\x1aAppStateSyncKeyFingerprint\x12\x14\n" + + "\x05rawID\x18\x01 \x01(\rR\x05rawID\x12\"\n" + + "\fcurrentIndex\x18\x02 \x01(\rR\fcurrentIndex\x12(\n" + + "\rdeviceIndexes\x18\x03 \x03(\rB\x02\x10\x01R\rdeviceIndexes\x1a)\n" + + "\x11AppStateSyncKeyId\x12\x14\n" + + "\x05keyID\x18\x01 \x01(\fR\x05keyIDB\x11\n" + + "\x0fapplicationData\x1a\b\n" + + "\x06SignalB)Z'go.mau.fi/whatsmeow/proto/waMultiDevice" var ( file_waMultiDevice_WAMultiDevice_proto_rawDescOnce sync.Once - file_waMultiDevice_WAMultiDevice_proto_rawDescData = file_waMultiDevice_WAMultiDevice_proto_rawDesc + file_waMultiDevice_WAMultiDevice_proto_rawDescData []byte ) func file_waMultiDevice_WAMultiDevice_proto_rawDescGZIP() []byte { file_waMultiDevice_WAMultiDevice_proto_rawDescOnce.Do(func() { - file_waMultiDevice_WAMultiDevice_proto_rawDescData = protoimpl.X.CompressGZIP(file_waMultiDevice_WAMultiDevice_proto_rawDescData) + file_waMultiDevice_WAMultiDevice_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_waMultiDevice_WAMultiDevice_proto_rawDesc), len(file_waMultiDevice_WAMultiDevice_proto_rawDesc))) }) return file_waMultiDevice_WAMultiDevice_proto_rawDescData } @@ -696,140 +704,6 @@ func file_waMultiDevice_WAMultiDevice_proto_init() { if File_waMultiDevice_WAMultiDevice_proto != nil { return } - if !protoimpl.UnsafeEnabled { - file_waMultiDevice_WAMultiDevice_proto_msgTypes[0].Exporter = func(v any, i int) any { - switch v := v.(*MultiDevice); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waMultiDevice_WAMultiDevice_proto_msgTypes[1].Exporter = func(v any, i int) any { - switch v := v.(*MultiDevice_Metadata); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waMultiDevice_WAMultiDevice_proto_msgTypes[2].Exporter = func(v any, i int) any { - switch v := v.(*MultiDevice_Payload); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waMultiDevice_WAMultiDevice_proto_msgTypes[3].Exporter = func(v any, i int) any { - switch v := v.(*MultiDevice_ApplicationData); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waMultiDevice_WAMultiDevice_proto_msgTypes[4].Exporter = func(v any, i int) any { - switch v := v.(*MultiDevice_Signal); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waMultiDevice_WAMultiDevice_proto_msgTypes[5].Exporter = func(v any, i int) any { - switch v := v.(*MultiDevice_ApplicationData_AppStateSyncKeyRequestMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waMultiDevice_WAMultiDevice_proto_msgTypes[6].Exporter = func(v any, i int) any { - switch v := v.(*MultiDevice_ApplicationData_AppStateSyncKeyShareMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waMultiDevice_WAMultiDevice_proto_msgTypes[7].Exporter = func(v any, i int) any { - switch v := v.(*MultiDevice_ApplicationData_AppStateSyncKey); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waMultiDevice_WAMultiDevice_proto_msgTypes[8].Exporter = func(v any, i int) any { - switch v := v.(*MultiDevice_ApplicationData_AppStateSyncKeyId); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waMultiDevice_WAMultiDevice_proto_msgTypes[9].Exporter = func(v any, i int) any { - switch v := v.(*MultiDevice_ApplicationData_AppStateSyncKey_AppStateSyncKeyData); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waMultiDevice_WAMultiDevice_proto_msgTypes[10].Exporter = func(v any, i int) any { - switch v := v.(*MultiDevice_ApplicationData_AppStateSyncKey_AppStateSyncKeyData_AppStateSyncKeyFingerprint); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } file_waMultiDevice_WAMultiDevice_proto_msgTypes[2].OneofWrappers = []any{ (*MultiDevice_Payload_ApplicationData)(nil), (*MultiDevice_Payload_Signal)(nil), @@ -842,7 +716,7 @@ func file_waMultiDevice_WAMultiDevice_proto_init() { out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_waMultiDevice_WAMultiDevice_proto_rawDesc, + RawDescriptor: unsafe.Slice(unsafe.StringData(file_waMultiDevice_WAMultiDevice_proto_rawDesc), len(file_waMultiDevice_WAMultiDevice_proto_rawDesc)), NumEnums: 0, NumMessages: 11, NumExtensions: 0, @@ -853,7 +727,6 @@ func file_waMultiDevice_WAMultiDevice_proto_init() { MessageInfos: file_waMultiDevice_WAMultiDevice_proto_msgTypes, }.Build() File_waMultiDevice_WAMultiDevice_proto = out.File - file_waMultiDevice_WAMultiDevice_proto_rawDesc = nil file_waMultiDevice_WAMultiDevice_proto_goTypes = nil file_waMultiDevice_WAMultiDevice_proto_depIdxs = nil } diff --git a/vendor/go.mau.fi/whatsmeow/proto/waMultiDevice/WAMultiDevice.pb.raw b/vendor/go.mau.fi/whatsmeow/proto/waMultiDevice/WAMultiDevice.pb.raw deleted file mode 100644 index 41d9cb1cc9..0000000000 Binary files a/vendor/go.mau.fi/whatsmeow/proto/waMultiDevice/WAMultiDevice.pb.raw and /dev/null differ diff --git a/vendor/go.mau.fi/whatsmeow/proto/waQuickPromotionSurfaces/WAWebProtobufsQuickPromotionSurfaces.pb.go b/vendor/go.mau.fi/whatsmeow/proto/waQuickPromotionSurfaces/WAWebProtobufsQuickPromotionSurfaces.pb.go index 3f2a3b4e58..2837eb66e6 100644 --- a/vendor/go.mau.fi/whatsmeow/proto/waQuickPromotionSurfaces/WAWebProtobufsQuickPromotionSurfaces.pb.go +++ b/vendor/go.mau.fi/whatsmeow/proto/waQuickPromotionSurfaces/WAWebProtobufsQuickPromotionSurfaces.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 +// protoc-gen-go v1.36.10 // protoc v3.21.12 // source: waQuickPromotionSurfaces/WAWebProtobufsQuickPromotionSurfaces.proto @@ -9,11 +9,10 @@ package waQuickPromotionSurfaces import ( reflect "reflect" sync "sync" + unsafe "unsafe" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" - - _ "embed" ) const ( @@ -198,18 +197,16 @@ func (QP_ClauseType) EnumDescriptor() ([]byte, []int) { } type QP struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *QP) Reset() { *x = QP{} - if protoimpl.UnsafeEnabled { - mi := &file_waQuickPromotionSurfaces_WAWebProtobufsQuickPromotionSurfaces_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waQuickPromotionSurfaces_WAWebProtobufsQuickPromotionSurfaces_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *QP) String() string { @@ -220,7 +217,7 @@ func (*QP) ProtoMessage() {} func (x *QP) ProtoReflect() protoreflect.Message { mi := &file_waQuickPromotionSurfaces_WAWebProtobufsQuickPromotionSurfaces_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -236,22 +233,19 @@ func (*QP) Descriptor() ([]byte, []int) { } type QP_FilterClause struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + ClauseType *QP_ClauseType `protobuf:"varint,1,req,name=clauseType,enum=WAWebProtobufsQuickPromotionSurfaces.QP_ClauseType" json:"clauseType,omitempty"` + Clauses []*QP_FilterClause `protobuf:"bytes,2,rep,name=clauses" json:"clauses,omitempty"` + Filters []*QP_Filter `protobuf:"bytes,3,rep,name=filters" json:"filters,omitempty"` unknownFields protoimpl.UnknownFields - - ClauseType *QP_ClauseType `protobuf:"varint,1,req,name=clauseType,enum=WAWebProtobufsQuickPromotionSurfaces.QP_ClauseType" json:"clauseType,omitempty"` - Clauses []*QP_FilterClause `protobuf:"bytes,2,rep,name=clauses" json:"clauses,omitempty"` - Filters []*QP_Filter `protobuf:"bytes,3,rep,name=filters" json:"filters,omitempty"` + sizeCache protoimpl.SizeCache } func (x *QP_FilterClause) Reset() { *x = QP_FilterClause{} - if protoimpl.UnsafeEnabled { - mi := &file_waQuickPromotionSurfaces_WAWebProtobufsQuickPromotionSurfaces_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waQuickPromotionSurfaces_WAWebProtobufsQuickPromotionSurfaces_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *QP_FilterClause) String() string { @@ -262,7 +256,7 @@ func (*QP_FilterClause) ProtoMessage() {} func (x *QP_FilterClause) ProtoReflect() protoreflect.Message { mi := &file_waQuickPromotionSurfaces_WAWebProtobufsQuickPromotionSurfaces_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -299,23 +293,20 @@ func (x *QP_FilterClause) GetFilters() []*QP_Filter { } type QP_Filter struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` FilterName *string `protobuf:"bytes,1,req,name=filterName" json:"filterName,omitempty"` Parameters []*QP_FilterParameters `protobuf:"bytes,2,rep,name=parameters" json:"parameters,omitempty"` FilterResult *QP_FilterResult `protobuf:"varint,3,opt,name=filterResult,enum=WAWebProtobufsQuickPromotionSurfaces.QP_FilterResult" json:"filterResult,omitempty"` ClientNotSupportedConfig *QP_FilterClientNotSupportedConfig `protobuf:"varint,4,req,name=clientNotSupportedConfig,enum=WAWebProtobufsQuickPromotionSurfaces.QP_FilterClientNotSupportedConfig" json:"clientNotSupportedConfig,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *QP_Filter) Reset() { *x = QP_Filter{} - if protoimpl.UnsafeEnabled { - mi := &file_waQuickPromotionSurfaces_WAWebProtobufsQuickPromotionSurfaces_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waQuickPromotionSurfaces_WAWebProtobufsQuickPromotionSurfaces_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *QP_Filter) String() string { @@ -326,7 +317,7 @@ func (*QP_Filter) ProtoMessage() {} func (x *QP_Filter) ProtoReflect() protoreflect.Message { mi := &file_waQuickPromotionSurfaces_WAWebProtobufsQuickPromotionSurfaces_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -370,21 +361,18 @@ func (x *QP_Filter) GetClientNotSupportedConfig() QP_FilterClientNotSupportedCon } type QP_FilterParameters struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Key *string `protobuf:"bytes,1,opt,name=key" json:"key,omitempty"` + Value *string `protobuf:"bytes,2,opt,name=value" json:"value,omitempty"` unknownFields protoimpl.UnknownFields - - Key *string `protobuf:"bytes,1,opt,name=key" json:"key,omitempty"` - Value *string `protobuf:"bytes,2,opt,name=value" json:"value,omitempty"` + sizeCache protoimpl.SizeCache } func (x *QP_FilterParameters) Reset() { *x = QP_FilterParameters{} - if protoimpl.UnsafeEnabled { - mi := &file_waQuickPromotionSurfaces_WAWebProtobufsQuickPromotionSurfaces_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waQuickPromotionSurfaces_WAWebProtobufsQuickPromotionSurfaces_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *QP_FilterParameters) String() string { @@ -395,7 +383,7 @@ func (*QP_FilterParameters) ProtoMessage() {} func (x *QP_FilterParameters) ProtoReflect() protoreflect.Message { mi := &file_waQuickPromotionSurfaces_WAWebProtobufsQuickPromotionSurfaces_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -426,17 +414,49 @@ func (x *QP_FilterParameters) GetValue() string { var File_waQuickPromotionSurfaces_WAWebProtobufsQuickPromotionSurfaces_proto protoreflect.FileDescriptor -//go:embed WAWebProtobufsQuickPromotionSurfaces.pb.raw -var file_waQuickPromotionSurfaces_WAWebProtobufsQuickPromotionSurfaces_proto_rawDesc []byte +const file_waQuickPromotionSurfaces_WAWebProtobufsQuickPromotionSurfaces_proto_rawDesc = "" + + "\n" + + "CwaQuickPromotionSurfaces/WAWebProtobufsQuickPromotionSurfaces.proto\x12$WAWebProtobufsQuickPromotionSurfaces\"\xcf\x06\n" + + "\x02QP\x1a\xff\x01\n" + + "\fFilterClause\x12S\n" + + "\n" + + "clauseType\x18\x01 \x02(\x0e23.WAWebProtobufsQuickPromotionSurfaces.QP.ClauseTypeR\n" + + "clauseType\x12O\n" + + "\aclauses\x18\x02 \x03(\v25.WAWebProtobufsQuickPromotionSurfaces.QP.FilterClauseR\aclauses\x12I\n" + + "\afilters\x18\x03 \x03(\v2/.WAWebProtobufsQuickPromotionSurfaces.QP.FilterR\afilters\x1a\xe4\x02\n" + + "\x06Filter\x12\x1e\n" + + "\n" + + "filterName\x18\x01 \x02(\tR\n" + + "filterName\x12Y\n" + + "\n" + + "parameters\x18\x02 \x03(\v29.WAWebProtobufsQuickPromotionSurfaces.QP.FilterParametersR\n" + + "parameters\x12Y\n" + + "\ffilterResult\x18\x03 \x01(\x0e25.WAWebProtobufsQuickPromotionSurfaces.QP.FilterResultR\ffilterResult\x12\x83\x01\n" + + "\x18clientNotSupportedConfig\x18\x04 \x02(\x0e2G.WAWebProtobufsQuickPromotionSurfaces.QP.FilterClientNotSupportedConfigR\x18clientNotSupportedConfig\x1a:\n" + + "\x10FilterParameters\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12\x14\n" + + "\x05value\x18\x02 \x01(\tR\x05value\"0\n" + + "\fFilterResult\x12\b\n" + + "\x04TRUE\x10\x01\x12\t\n" + + "\x05FALSE\x10\x02\x12\v\n" + + "\aUNKNOWN\x10\x03\"J\n" + + "\x1eFilterClientNotSupportedConfig\x12\x13\n" + + "\x0fPASS_BY_DEFAULT\x10\x01\x12\x13\n" + + "\x0fFAIL_BY_DEFAULT\x10\x02\"&\n" + + "\n" + + "ClauseType\x12\a\n" + + "\x03AND\x10\x01\x12\x06\n" + + "\x02OR\x10\x02\x12\a\n" + + "\x03NOR\x10\x03B4Z2go.mau.fi/whatsmeow/proto/waQuickPromotionSurfaces" var ( file_waQuickPromotionSurfaces_WAWebProtobufsQuickPromotionSurfaces_proto_rawDescOnce sync.Once - file_waQuickPromotionSurfaces_WAWebProtobufsQuickPromotionSurfaces_proto_rawDescData = file_waQuickPromotionSurfaces_WAWebProtobufsQuickPromotionSurfaces_proto_rawDesc + file_waQuickPromotionSurfaces_WAWebProtobufsQuickPromotionSurfaces_proto_rawDescData []byte ) func file_waQuickPromotionSurfaces_WAWebProtobufsQuickPromotionSurfaces_proto_rawDescGZIP() []byte { file_waQuickPromotionSurfaces_WAWebProtobufsQuickPromotionSurfaces_proto_rawDescOnce.Do(func() { - file_waQuickPromotionSurfaces_WAWebProtobufsQuickPromotionSurfaces_proto_rawDescData = protoimpl.X.CompressGZIP(file_waQuickPromotionSurfaces_WAWebProtobufsQuickPromotionSurfaces_proto_rawDescData) + file_waQuickPromotionSurfaces_WAWebProtobufsQuickPromotionSurfaces_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_waQuickPromotionSurfaces_WAWebProtobufsQuickPromotionSurfaces_proto_rawDesc), len(file_waQuickPromotionSurfaces_WAWebProtobufsQuickPromotionSurfaces_proto_rawDesc))) }) return file_waQuickPromotionSurfaces_WAWebProtobufsQuickPromotionSurfaces_proto_rawDescData } @@ -471,61 +491,11 @@ func file_waQuickPromotionSurfaces_WAWebProtobufsQuickPromotionSurfaces_proto_in if File_waQuickPromotionSurfaces_WAWebProtobufsQuickPromotionSurfaces_proto != nil { return } - if !protoimpl.UnsafeEnabled { - file_waQuickPromotionSurfaces_WAWebProtobufsQuickPromotionSurfaces_proto_msgTypes[0].Exporter = func(v any, i int) any { - switch v := v.(*QP); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waQuickPromotionSurfaces_WAWebProtobufsQuickPromotionSurfaces_proto_msgTypes[1].Exporter = func(v any, i int) any { - switch v := v.(*QP_FilterClause); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waQuickPromotionSurfaces_WAWebProtobufsQuickPromotionSurfaces_proto_msgTypes[2].Exporter = func(v any, i int) any { - switch v := v.(*QP_Filter); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waQuickPromotionSurfaces_WAWebProtobufsQuickPromotionSurfaces_proto_msgTypes[3].Exporter = func(v any, i int) any { - switch v := v.(*QP_FilterParameters); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_waQuickPromotionSurfaces_WAWebProtobufsQuickPromotionSurfaces_proto_rawDesc, + RawDescriptor: unsafe.Slice(unsafe.StringData(file_waQuickPromotionSurfaces_WAWebProtobufsQuickPromotionSurfaces_proto_rawDesc), len(file_waQuickPromotionSurfaces_WAWebProtobufsQuickPromotionSurfaces_proto_rawDesc)), NumEnums: 3, NumMessages: 4, NumExtensions: 0, @@ -537,7 +507,6 @@ func file_waQuickPromotionSurfaces_WAWebProtobufsQuickPromotionSurfaces_proto_in MessageInfos: file_waQuickPromotionSurfaces_WAWebProtobufsQuickPromotionSurfaces_proto_msgTypes, }.Build() File_waQuickPromotionSurfaces_WAWebProtobufsQuickPromotionSurfaces_proto = out.File - file_waQuickPromotionSurfaces_WAWebProtobufsQuickPromotionSurfaces_proto_rawDesc = nil file_waQuickPromotionSurfaces_WAWebProtobufsQuickPromotionSurfaces_proto_goTypes = nil file_waQuickPromotionSurfaces_WAWebProtobufsQuickPromotionSurfaces_proto_depIdxs = nil } diff --git a/vendor/go.mau.fi/whatsmeow/proto/waQuickPromotionSurfaces/WAWebProtobufsQuickPromotionSurfaces.pb.raw b/vendor/go.mau.fi/whatsmeow/proto/waQuickPromotionSurfaces/WAWebProtobufsQuickPromotionSurfaces.pb.raw deleted file mode 100644 index dce0662462..0000000000 --- a/vendor/go.mau.fi/whatsmeow/proto/waQuickPromotionSurfaces/WAWebProtobufsQuickPromotionSurfaces.pb.raw +++ /dev/null @@ -1,33 +0,0 @@ - -CwaQuickPromotionSurfaces/WAWebProtobufsQuickPromotionSurfaces.proto$WAWebProtobufsQuickPromotionSurfaces"� -QP� - FilterClauseS - -clauseType (23.WAWebProtobufsQuickPromotionSurfaces.QP.ClauseTypeR -clauseTypeO -clauses ( 25.WAWebProtobufsQuickPromotionSurfaces.QP.FilterClauseRclausesI -filters ( 2/.WAWebProtobufsQuickPromotionSurfaces.QP.FilterRfilters� -Filter - -filterName ( R -filterNameY - -parameters ( 29.WAWebProtobufsQuickPromotionSurfaces.QP.FilterParametersR -parametersY - filterResult (25.WAWebProtobufsQuickPromotionSurfaces.QP.FilterResultR filterResult� -clientNotSupportedConfig (2G.WAWebProtobufsQuickPromotionSurfaces.QP.FilterClientNotSupportedConfigRclientNotSupportedConfig: -FilterParameters -key ( Rkey -value ( Rvalue"0 - FilterResult -TRUE -FALSE -UNKNOWN"J -FilterClientNotSupportedConfig -PASS_BY_DEFAULT -FAIL_BY_DEFAULT"& - -ClauseType -AND -OR -NORB4Z2go.mau.fi/whatsmeow/proto/waQuickPromotionSurfaces \ No newline at end of file diff --git a/vendor/go.mau.fi/whatsmeow/proto/waServerSync/WAServerSync.pb.go b/vendor/go.mau.fi/whatsmeow/proto/waServerSync/WAServerSync.pb.go index 9d496477e0..65afc7104e 100644 --- a/vendor/go.mau.fi/whatsmeow/proto/waServerSync/WAServerSync.pb.go +++ b/vendor/go.mau.fi/whatsmeow/proto/waServerSync/WAServerSync.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 +// protoc-gen-go v1.36.10 // protoc v3.21.12 // source: waServerSync/WAServerSync.proto @@ -9,11 +9,10 @@ package waServerSync import ( reflect "reflect" sync "sync" + unsafe "unsafe" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" - - _ "embed" ) const ( @@ -80,21 +79,18 @@ func (SyncdMutation_SyncdOperation) EnumDescriptor() ([]byte, []int) { } type SyncdMutation struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Operation *SyncdMutation_SyncdOperation `protobuf:"varint,1,opt,name=operation,enum=WAServerSync.SyncdMutation_SyncdOperation" json:"operation,omitempty"` + Record *SyncdRecord `protobuf:"bytes,2,opt,name=record" json:"record,omitempty"` unknownFields protoimpl.UnknownFields - - Operation *SyncdMutation_SyncdOperation `protobuf:"varint,1,opt,name=operation,enum=WAServerSync.SyncdMutation_SyncdOperation" json:"operation,omitempty"` - Record *SyncdRecord `protobuf:"bytes,2,opt,name=record" json:"record,omitempty"` + sizeCache protoimpl.SizeCache } func (x *SyncdMutation) Reset() { *x = SyncdMutation{} - if protoimpl.UnsafeEnabled { - mi := &file_waServerSync_WAServerSync_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waServerSync_WAServerSync_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *SyncdMutation) String() string { @@ -105,7 +101,7 @@ func (*SyncdMutation) ProtoMessage() {} func (x *SyncdMutation) ProtoReflect() protoreflect.Message { mi := &file_waServerSync_WAServerSync_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -135,20 +131,17 @@ func (x *SyncdMutation) GetRecord() *SyncdRecord { } type SyncdVersion struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Version *uint64 `protobuf:"varint,1,opt,name=version" json:"version,omitempty"` unknownFields protoimpl.UnknownFields - - Version *uint64 `protobuf:"varint,1,opt,name=version" json:"version,omitempty"` + sizeCache protoimpl.SizeCache } func (x *SyncdVersion) Reset() { *x = SyncdVersion{} - if protoimpl.UnsafeEnabled { - mi := &file_waServerSync_WAServerSync_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waServerSync_WAServerSync_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *SyncdVersion) String() string { @@ -159,7 +152,7 @@ func (*SyncdVersion) ProtoMessage() {} func (x *SyncdVersion) ProtoReflect() protoreflect.Message { mi := &file_waServerSync_WAServerSync_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -182,21 +175,18 @@ func (x *SyncdVersion) GetVersion() uint64 { } type ExitCode struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Code *uint64 `protobuf:"varint,1,opt,name=code" json:"code,omitempty"` + Text *string `protobuf:"bytes,2,opt,name=text" json:"text,omitempty"` unknownFields protoimpl.UnknownFields - - Code *uint64 `protobuf:"varint,1,opt,name=code" json:"code,omitempty"` - Text *string `protobuf:"bytes,2,opt,name=text" json:"text,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ExitCode) Reset() { *x = ExitCode{} - if protoimpl.UnsafeEnabled { - mi := &file_waServerSync_WAServerSync_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waServerSync_WAServerSync_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ExitCode) String() string { @@ -207,7 +197,7 @@ func (*ExitCode) ProtoMessage() {} func (x *ExitCode) ProtoReflect() protoreflect.Message { mi := &file_waServerSync_WAServerSync_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -237,20 +227,17 @@ func (x *ExitCode) GetText() string { } type SyncdIndex struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Blob []byte `protobuf:"bytes,1,opt,name=blob" json:"blob,omitempty"` unknownFields protoimpl.UnknownFields - - Blob []byte `protobuf:"bytes,1,opt,name=blob" json:"blob,omitempty"` + sizeCache protoimpl.SizeCache } func (x *SyncdIndex) Reset() { *x = SyncdIndex{} - if protoimpl.UnsafeEnabled { - mi := &file_waServerSync_WAServerSync_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waServerSync_WAServerSync_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *SyncdIndex) String() string { @@ -261,7 +248,7 @@ func (*SyncdIndex) ProtoMessage() {} func (x *SyncdIndex) ProtoReflect() protoreflect.Message { mi := &file_waServerSync_WAServerSync_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -284,20 +271,17 @@ func (x *SyncdIndex) GetBlob() []byte { } type SyncdValue struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Blob []byte `protobuf:"bytes,1,opt,name=blob" json:"blob,omitempty"` unknownFields protoimpl.UnknownFields - - Blob []byte `protobuf:"bytes,1,opt,name=blob" json:"blob,omitempty"` + sizeCache protoimpl.SizeCache } func (x *SyncdValue) Reset() { *x = SyncdValue{} - if protoimpl.UnsafeEnabled { - mi := &file_waServerSync_WAServerSync_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waServerSync_WAServerSync_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *SyncdValue) String() string { @@ -308,7 +292,7 @@ func (*SyncdValue) ProtoMessage() {} func (x *SyncdValue) ProtoReflect() protoreflect.Message { mi := &file_waServerSync_WAServerSync_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -331,20 +315,17 @@ func (x *SyncdValue) GetBlob() []byte { } type KeyId struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + ID []byte `protobuf:"bytes,1,opt,name=ID" json:"ID,omitempty"` unknownFields protoimpl.UnknownFields - - ID []byte `protobuf:"bytes,1,opt,name=ID" json:"ID,omitempty"` + sizeCache protoimpl.SizeCache } func (x *KeyId) Reset() { *x = KeyId{} - if protoimpl.UnsafeEnabled { - mi := &file_waServerSync_WAServerSync_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waServerSync_WAServerSync_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *KeyId) String() string { @@ -355,7 +336,7 @@ func (*KeyId) ProtoMessage() {} func (x *KeyId) ProtoReflect() protoreflect.Message { mi := &file_waServerSync_WAServerSync_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -378,22 +359,19 @@ func (x *KeyId) GetID() []byte { } type SyncdRecord struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Index *SyncdIndex `protobuf:"bytes,1,opt,name=index" json:"index,omitempty"` + Value *SyncdValue `protobuf:"bytes,2,opt,name=value" json:"value,omitempty"` + KeyID *KeyId `protobuf:"bytes,3,opt,name=keyID" json:"keyID,omitempty"` unknownFields protoimpl.UnknownFields - - Index *SyncdIndex `protobuf:"bytes,1,opt,name=index" json:"index,omitempty"` - Value *SyncdValue `protobuf:"bytes,2,opt,name=value" json:"value,omitempty"` - KeyID *KeyId `protobuf:"bytes,3,opt,name=keyID" json:"keyID,omitempty"` + sizeCache protoimpl.SizeCache } func (x *SyncdRecord) Reset() { *x = SyncdRecord{} - if protoimpl.UnsafeEnabled { - mi := &file_waServerSync_WAServerSync_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waServerSync_WAServerSync_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *SyncdRecord) String() string { @@ -404,7 +382,7 @@ func (*SyncdRecord) ProtoMessage() {} func (x *SyncdRecord) ProtoReflect() protoreflect.Message { mi := &file_waServerSync_WAServerSync_proto_msgTypes[6] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -441,25 +419,22 @@ func (x *SyncdRecord) GetKeyID() *KeyId { } type ExternalBlobReference struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + MediaKey []byte `protobuf:"bytes,1,opt,name=mediaKey" json:"mediaKey,omitempty"` + DirectPath *string `protobuf:"bytes,2,opt,name=directPath" json:"directPath,omitempty"` + Handle *string `protobuf:"bytes,3,opt,name=handle" json:"handle,omitempty"` + FileSizeBytes *uint64 `protobuf:"varint,4,opt,name=fileSizeBytes" json:"fileSizeBytes,omitempty"` + FileSHA256 []byte `protobuf:"bytes,5,opt,name=fileSHA256" json:"fileSHA256,omitempty"` + FileEncSHA256 []byte `protobuf:"bytes,6,opt,name=fileEncSHA256" json:"fileEncSHA256,omitempty"` unknownFields protoimpl.UnknownFields - - MediaKey []byte `protobuf:"bytes,1,opt,name=mediaKey" json:"mediaKey,omitempty"` - DirectPath *string `protobuf:"bytes,2,opt,name=directPath" json:"directPath,omitempty"` - Handle *string `protobuf:"bytes,3,opt,name=handle" json:"handle,omitempty"` - FileSizeBytes *uint64 `protobuf:"varint,4,opt,name=fileSizeBytes" json:"fileSizeBytes,omitempty"` - FileSHA256 []byte `protobuf:"bytes,5,opt,name=fileSHA256" json:"fileSHA256,omitempty"` - FileEncSHA256 []byte `protobuf:"bytes,6,opt,name=fileEncSHA256" json:"fileEncSHA256,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ExternalBlobReference) Reset() { *x = ExternalBlobReference{} - if protoimpl.UnsafeEnabled { - mi := &file_waServerSync_WAServerSync_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waServerSync_WAServerSync_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ExternalBlobReference) String() string { @@ -470,7 +445,7 @@ func (*ExternalBlobReference) ProtoMessage() {} func (x *ExternalBlobReference) ProtoReflect() protoreflect.Message { mi := &file_waServerSync_WAServerSync_proto_msgTypes[7] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -528,23 +503,20 @@ func (x *ExternalBlobReference) GetFileEncSHA256() []byte { } type SyncdSnapshot struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Version *SyncdVersion `protobuf:"bytes,1,opt,name=version" json:"version,omitempty"` + Records []*SyncdRecord `protobuf:"bytes,2,rep,name=records" json:"records,omitempty"` + Mac []byte `protobuf:"bytes,3,opt,name=mac" json:"mac,omitempty"` + KeyID *KeyId `protobuf:"bytes,4,opt,name=keyID" json:"keyID,omitempty"` unknownFields protoimpl.UnknownFields - - Version *SyncdVersion `protobuf:"bytes,1,opt,name=version" json:"version,omitempty"` - Records []*SyncdRecord `protobuf:"bytes,2,rep,name=records" json:"records,omitempty"` - Mac []byte `protobuf:"bytes,3,opt,name=mac" json:"mac,omitempty"` - KeyID *KeyId `protobuf:"bytes,4,opt,name=keyID" json:"keyID,omitempty"` + sizeCache protoimpl.SizeCache } func (x *SyncdSnapshot) Reset() { *x = SyncdSnapshot{} - if protoimpl.UnsafeEnabled { - mi := &file_waServerSync_WAServerSync_proto_msgTypes[8] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waServerSync_WAServerSync_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *SyncdSnapshot) String() string { @@ -555,7 +527,7 @@ func (*SyncdSnapshot) ProtoMessage() {} func (x *SyncdSnapshot) ProtoReflect() protoreflect.Message { mi := &file_waServerSync_WAServerSync_proto_msgTypes[8] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -599,20 +571,17 @@ func (x *SyncdSnapshot) GetKeyID() *KeyId { } type SyncdMutations struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Mutations []*SyncdMutation `protobuf:"bytes,1,rep,name=mutations" json:"mutations,omitempty"` unknownFields protoimpl.UnknownFields - - Mutations []*SyncdMutation `protobuf:"bytes,1,rep,name=mutations" json:"mutations,omitempty"` + sizeCache protoimpl.SizeCache } func (x *SyncdMutations) Reset() { *x = SyncdMutations{} - if protoimpl.UnsafeEnabled { - mi := &file_waServerSync_WAServerSync_proto_msgTypes[9] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waServerSync_WAServerSync_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *SyncdMutations) String() string { @@ -623,7 +592,7 @@ func (*SyncdMutations) ProtoMessage() {} func (x *SyncdMutations) ProtoReflect() protoreflect.Message { mi := &file_waServerSync_WAServerSync_proto_msgTypes[9] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -646,10 +615,7 @@ func (x *SyncdMutations) GetMutations() []*SyncdMutation { } type SyncdPatch struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` Version *SyncdVersion `protobuf:"bytes,1,opt,name=version" json:"version,omitempty"` Mutations []*SyncdMutation `protobuf:"bytes,2,rep,name=mutations" json:"mutations,omitempty"` ExternalMutations *ExternalBlobReference `protobuf:"bytes,3,opt,name=externalMutations" json:"externalMutations,omitempty"` @@ -659,15 +625,15 @@ type SyncdPatch struct { ExitCode *ExitCode `protobuf:"bytes,7,opt,name=exitCode" json:"exitCode,omitempty"` DeviceIndex *uint32 `protobuf:"varint,8,opt,name=deviceIndex" json:"deviceIndex,omitempty"` ClientDebugData []byte `protobuf:"bytes,9,opt,name=clientDebugData" json:"clientDebugData,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *SyncdPatch) Reset() { *x = SyncdPatch{} - if protoimpl.UnsafeEnabled { - mi := &file_waServerSync_WAServerSync_proto_msgTypes[10] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waServerSync_WAServerSync_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *SyncdPatch) String() string { @@ -678,7 +644,7 @@ func (*SyncdPatch) ProtoMessage() {} func (x *SyncdPatch) ProtoReflect() protoreflect.Message { mi := &file_waServerSync_WAServerSync_proto_msgTypes[10] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -758,17 +724,71 @@ func (x *SyncdPatch) GetClientDebugData() []byte { var File_waServerSync_WAServerSync_proto protoreflect.FileDescriptor -//go:embed WAServerSync.pb.raw -var file_waServerSync_WAServerSync_proto_rawDesc []byte +const file_waServerSync_WAServerSync_proto_rawDesc = "" + + "\n" + + "\x1fwaServerSync/WAServerSync.proto\x12\fWAServerSync\"\xb3\x01\n" + + "\rSyncdMutation\x12H\n" + + "\toperation\x18\x01 \x01(\x0e2*.WAServerSync.SyncdMutation.SyncdOperationR\toperation\x121\n" + + "\x06record\x18\x02 \x01(\v2\x19.WAServerSync.SyncdRecordR\x06record\"%\n" + + "\x0eSyncdOperation\x12\a\n" + + "\x03SET\x10\x00\x12\n" + + "\n" + + "\x06REMOVE\x10\x01\"(\n" + + "\fSyncdVersion\x12\x18\n" + + "\aversion\x18\x01 \x01(\x04R\aversion\"2\n" + + "\bExitCode\x12\x12\n" + + "\x04code\x18\x01 \x01(\x04R\x04code\x12\x12\n" + + "\x04text\x18\x02 \x01(\tR\x04text\" \n" + + "\n" + + "SyncdIndex\x12\x12\n" + + "\x04blob\x18\x01 \x01(\fR\x04blob\" \n" + + "\n" + + "SyncdValue\x12\x12\n" + + "\x04blob\x18\x01 \x01(\fR\x04blob\"\x17\n" + + "\x05KeyId\x12\x0e\n" + + "\x02ID\x18\x01 \x01(\fR\x02ID\"\x98\x01\n" + + "\vSyncdRecord\x12.\n" + + "\x05index\x18\x01 \x01(\v2\x18.WAServerSync.SyncdIndexR\x05index\x12.\n" + + "\x05value\x18\x02 \x01(\v2\x18.WAServerSync.SyncdValueR\x05value\x12)\n" + + "\x05keyID\x18\x03 \x01(\v2\x13.WAServerSync.KeyIdR\x05keyID\"\xd7\x01\n" + + "\x15ExternalBlobReference\x12\x1a\n" + + "\bmediaKey\x18\x01 \x01(\fR\bmediaKey\x12\x1e\n" + + "\n" + + "directPath\x18\x02 \x01(\tR\n" + + "directPath\x12\x16\n" + + "\x06handle\x18\x03 \x01(\tR\x06handle\x12$\n" + + "\rfileSizeBytes\x18\x04 \x01(\x04R\rfileSizeBytes\x12\x1e\n" + + "\n" + + "fileSHA256\x18\x05 \x01(\fR\n" + + "fileSHA256\x12$\n" + + "\rfileEncSHA256\x18\x06 \x01(\fR\rfileEncSHA256\"\xb7\x01\n" + + "\rSyncdSnapshot\x124\n" + + "\aversion\x18\x01 \x01(\v2\x1a.WAServerSync.SyncdVersionR\aversion\x123\n" + + "\arecords\x18\x02 \x03(\v2\x19.WAServerSync.SyncdRecordR\arecords\x12\x10\n" + + "\x03mac\x18\x03 \x01(\fR\x03mac\x12)\n" + + "\x05keyID\x18\x04 \x01(\v2\x13.WAServerSync.KeyIdR\x05keyID\"K\n" + + "\x0eSyncdMutations\x129\n" + + "\tmutations\x18\x01 \x03(\v2\x1b.WAServerSync.SyncdMutationR\tmutations\"\xb9\x03\n" + + "\n" + + "SyncdPatch\x124\n" + + "\aversion\x18\x01 \x01(\v2\x1a.WAServerSync.SyncdVersionR\aversion\x129\n" + + "\tmutations\x18\x02 \x03(\v2\x1b.WAServerSync.SyncdMutationR\tmutations\x12Q\n" + + "\x11externalMutations\x18\x03 \x01(\v2#.WAServerSync.ExternalBlobReferenceR\x11externalMutations\x12 \n" + + "\vsnapshotMAC\x18\x04 \x01(\fR\vsnapshotMAC\x12\x1a\n" + + "\bpatchMAC\x18\x05 \x01(\fR\bpatchMAC\x12)\n" + + "\x05keyID\x18\x06 \x01(\v2\x13.WAServerSync.KeyIdR\x05keyID\x122\n" + + "\bexitCode\x18\a \x01(\v2\x16.WAServerSync.ExitCodeR\bexitCode\x12 \n" + + "\vdeviceIndex\x18\b \x01(\rR\vdeviceIndex\x12(\n" + + "\x0fclientDebugData\x18\t \x01(\fR\x0fclientDebugDataB(Z&go.mau.fi/whatsmeow/proto/waServerSync" var ( file_waServerSync_WAServerSync_proto_rawDescOnce sync.Once - file_waServerSync_WAServerSync_proto_rawDescData = file_waServerSync_WAServerSync_proto_rawDesc + file_waServerSync_WAServerSync_proto_rawDescData []byte ) func file_waServerSync_WAServerSync_proto_rawDescGZIP() []byte { file_waServerSync_WAServerSync_proto_rawDescOnce.Do(func() { - file_waServerSync_WAServerSync_proto_rawDescData = protoimpl.X.CompressGZIP(file_waServerSync_WAServerSync_proto_rawDescData) + file_waServerSync_WAServerSync_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_waServerSync_WAServerSync_proto_rawDesc), len(file_waServerSync_WAServerSync_proto_rawDesc))) }) return file_waServerSync_WAServerSync_proto_rawDescData } @@ -816,145 +836,11 @@ func file_waServerSync_WAServerSync_proto_init() { if File_waServerSync_WAServerSync_proto != nil { return } - if !protoimpl.UnsafeEnabled { - file_waServerSync_WAServerSync_proto_msgTypes[0].Exporter = func(v any, i int) any { - switch v := v.(*SyncdMutation); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waServerSync_WAServerSync_proto_msgTypes[1].Exporter = func(v any, i int) any { - switch v := v.(*SyncdVersion); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waServerSync_WAServerSync_proto_msgTypes[2].Exporter = func(v any, i int) any { - switch v := v.(*ExitCode); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waServerSync_WAServerSync_proto_msgTypes[3].Exporter = func(v any, i int) any { - switch v := v.(*SyncdIndex); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waServerSync_WAServerSync_proto_msgTypes[4].Exporter = func(v any, i int) any { - switch v := v.(*SyncdValue); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waServerSync_WAServerSync_proto_msgTypes[5].Exporter = func(v any, i int) any { - switch v := v.(*KeyId); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waServerSync_WAServerSync_proto_msgTypes[6].Exporter = func(v any, i int) any { - switch v := v.(*SyncdRecord); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waServerSync_WAServerSync_proto_msgTypes[7].Exporter = func(v any, i int) any { - switch v := v.(*ExternalBlobReference); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waServerSync_WAServerSync_proto_msgTypes[8].Exporter = func(v any, i int) any { - switch v := v.(*SyncdSnapshot); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waServerSync_WAServerSync_proto_msgTypes[9].Exporter = func(v any, i int) any { - switch v := v.(*SyncdMutations); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waServerSync_WAServerSync_proto_msgTypes[10].Exporter = func(v any, i int) any { - switch v := v.(*SyncdPatch); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_waServerSync_WAServerSync_proto_rawDesc, + RawDescriptor: unsafe.Slice(unsafe.StringData(file_waServerSync_WAServerSync_proto_rawDesc), len(file_waServerSync_WAServerSync_proto_rawDesc)), NumEnums: 1, NumMessages: 11, NumExtensions: 0, @@ -966,7 +852,6 @@ func file_waServerSync_WAServerSync_proto_init() { MessageInfos: file_waServerSync_WAServerSync_proto_msgTypes, }.Build() File_waServerSync_WAServerSync_proto = out.File - file_waServerSync_WAServerSync_proto_rawDesc = nil file_waServerSync_WAServerSync_proto_goTypes = nil file_waServerSync_WAServerSync_proto_depIdxs = nil } diff --git a/vendor/go.mau.fi/whatsmeow/proto/waServerSync/WAServerSync.pb.raw b/vendor/go.mau.fi/whatsmeow/proto/waServerSync/WAServerSync.pb.raw deleted file mode 100644 index 8e26c95f62..0000000000 Binary files a/vendor/go.mau.fi/whatsmeow/proto/waServerSync/WAServerSync.pb.raw and /dev/null differ diff --git a/vendor/go.mau.fi/whatsmeow/proto/waServerSync/legacy.go b/vendor/go.mau.fi/whatsmeow/proto/waServerSync/legacy.go deleted file mode 100644 index 5c3af3d3c6..0000000000 --- a/vendor/go.mau.fi/whatsmeow/proto/waServerSync/legacy.go +++ /dev/null @@ -1,31 +0,0 @@ -package waServerSync - -// Deprecated: Use GetKeyID -func (x *SyncdRecord) GetKeyId() *KeyId { - return x.GetKeyID() -} - -// Deprecated: Use GetKeyID -func (x *SyncdSnapshot) GetKeyId() *KeyId { - return x.GetKeyID() -} - -// Deprecated: Use GetKeyID -func (x *SyncdPatch) GetKeyId() *KeyId { - return x.GetKeyID() -} - -// Deprecated: Use GetSnapshotMAC -func (x *SyncdPatch) GetSnapshotMac() []byte { - return x.GetSnapshotMAC() -} - -// Deprecated: Use GetPatchMAC -func (x *SyncdPatch) GetPatchMac() []byte { - return x.GetPatchMAC() -} - -// Deprecated: Use GetID -func (x *KeyId) GetId() []byte { - return x.GetID() -} diff --git a/vendor/go.mau.fi/whatsmeow/proto/waStatusAttributions/WAStatusAttributions.pb.go b/vendor/go.mau.fi/whatsmeow/proto/waStatusAttributions/WAStatusAttributions.pb.go new file mode 100644 index 0000000000..5b529c2333 --- /dev/null +++ b/vendor/go.mau.fi/whatsmeow/proto/waStatusAttributions/WAStatusAttributions.pb.go @@ -0,0 +1,1100 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.36.10 +// protoc v3.21.12 +// source: waStatusAttributions/WAStatusAttributions.proto + +package waStatusAttributions + +import ( + reflect "reflect" + sync "sync" + unsafe "unsafe" + + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type StatusAttribution_Type int32 + +const ( + StatusAttribution_UNKNOWN StatusAttribution_Type = 0 + StatusAttribution_RESHARE StatusAttribution_Type = 1 + StatusAttribution_EXTERNAL_SHARE StatusAttribution_Type = 2 + StatusAttribution_MUSIC StatusAttribution_Type = 3 + StatusAttribution_STATUS_MENTION StatusAttribution_Type = 4 + StatusAttribution_GROUP_STATUS StatusAttribution_Type = 5 + StatusAttribution_RL_ATTRIBUTION StatusAttribution_Type = 6 + StatusAttribution_AI_CREATED StatusAttribution_Type = 7 + StatusAttribution_LAYOUTS StatusAttribution_Type = 8 +) + +// Enum value maps for StatusAttribution_Type. +var ( + StatusAttribution_Type_name = map[int32]string{ + 0: "UNKNOWN", + 1: "RESHARE", + 2: "EXTERNAL_SHARE", + 3: "MUSIC", + 4: "STATUS_MENTION", + 5: "GROUP_STATUS", + 6: "RL_ATTRIBUTION", + 7: "AI_CREATED", + 8: "LAYOUTS", + } + StatusAttribution_Type_value = map[string]int32{ + "UNKNOWN": 0, + "RESHARE": 1, + "EXTERNAL_SHARE": 2, + "MUSIC": 3, + "STATUS_MENTION": 4, + "GROUP_STATUS": 5, + "RL_ATTRIBUTION": 6, + "AI_CREATED": 7, + "LAYOUTS": 8, + } +) + +func (x StatusAttribution_Type) Enum() *StatusAttribution_Type { + p := new(StatusAttribution_Type) + *p = x + return p +} + +func (x StatusAttribution_Type) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (StatusAttribution_Type) Descriptor() protoreflect.EnumDescriptor { + return file_waStatusAttributions_WAStatusAttributions_proto_enumTypes[0].Descriptor() +} + +func (StatusAttribution_Type) Type() protoreflect.EnumType { + return &file_waStatusAttributions_WAStatusAttributions_proto_enumTypes[0] +} + +func (x StatusAttribution_Type) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *StatusAttribution_Type) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = StatusAttribution_Type(num) + return nil +} + +// Deprecated: Use StatusAttribution_Type.Descriptor instead. +func (StatusAttribution_Type) EnumDescriptor() ([]byte, []int) { + return file_waStatusAttributions_WAStatusAttributions_proto_rawDescGZIP(), []int{0, 0} +} + +type StatusAttribution_AiCreatedAttribution_Source int32 + +const ( + StatusAttribution_AiCreatedAttribution_UNKNOWN StatusAttribution_AiCreatedAttribution_Source = 0 + StatusAttribution_AiCreatedAttribution_STATUS_MIMICRY StatusAttribution_AiCreatedAttribution_Source = 1 +) + +// Enum value maps for StatusAttribution_AiCreatedAttribution_Source. +var ( + StatusAttribution_AiCreatedAttribution_Source_name = map[int32]string{ + 0: "UNKNOWN", + 1: "STATUS_MIMICRY", + } + StatusAttribution_AiCreatedAttribution_Source_value = map[string]int32{ + "UNKNOWN": 0, + "STATUS_MIMICRY": 1, + } +) + +func (x StatusAttribution_AiCreatedAttribution_Source) Enum() *StatusAttribution_AiCreatedAttribution_Source { + p := new(StatusAttribution_AiCreatedAttribution_Source) + *p = x + return p +} + +func (x StatusAttribution_AiCreatedAttribution_Source) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (StatusAttribution_AiCreatedAttribution_Source) Descriptor() protoreflect.EnumDescriptor { + return file_waStatusAttributions_WAStatusAttributions_proto_enumTypes[1].Descriptor() +} + +func (StatusAttribution_AiCreatedAttribution_Source) Type() protoreflect.EnumType { + return &file_waStatusAttributions_WAStatusAttributions_proto_enumTypes[1] +} + +func (x StatusAttribution_AiCreatedAttribution_Source) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *StatusAttribution_AiCreatedAttribution_Source) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = StatusAttribution_AiCreatedAttribution_Source(num) + return nil +} + +// Deprecated: Use StatusAttribution_AiCreatedAttribution_Source.Descriptor instead. +func (StatusAttribution_AiCreatedAttribution_Source) EnumDescriptor() ([]byte, []int) { + return file_waStatusAttributions_WAStatusAttributions_proto_rawDescGZIP(), []int{0, 0, 0} +} + +type StatusAttribution_RLAttribution_Source int32 + +const ( + StatusAttribution_RLAttribution_UNKNOWN StatusAttribution_RLAttribution_Source = 0 + StatusAttribution_RLAttribution_RAY_BAN_META_GLASSES StatusAttribution_RLAttribution_Source = 1 + StatusAttribution_RLAttribution_OAKLEY_META_GLASSES StatusAttribution_RLAttribution_Source = 2 + StatusAttribution_RLAttribution_HYPERNOVA_GLASSES StatusAttribution_RLAttribution_Source = 3 +) + +// Enum value maps for StatusAttribution_RLAttribution_Source. +var ( + StatusAttribution_RLAttribution_Source_name = map[int32]string{ + 0: "UNKNOWN", + 1: "RAY_BAN_META_GLASSES", + 2: "OAKLEY_META_GLASSES", + 3: "HYPERNOVA_GLASSES", + } + StatusAttribution_RLAttribution_Source_value = map[string]int32{ + "UNKNOWN": 0, + "RAY_BAN_META_GLASSES": 1, + "OAKLEY_META_GLASSES": 2, + "HYPERNOVA_GLASSES": 3, + } +) + +func (x StatusAttribution_RLAttribution_Source) Enum() *StatusAttribution_RLAttribution_Source { + p := new(StatusAttribution_RLAttribution_Source) + *p = x + return p +} + +func (x StatusAttribution_RLAttribution_Source) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (StatusAttribution_RLAttribution_Source) Descriptor() protoreflect.EnumDescriptor { + return file_waStatusAttributions_WAStatusAttributions_proto_enumTypes[2].Descriptor() +} + +func (StatusAttribution_RLAttribution_Source) Type() protoreflect.EnumType { + return &file_waStatusAttributions_WAStatusAttributions_proto_enumTypes[2] +} + +func (x StatusAttribution_RLAttribution_Source) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *StatusAttribution_RLAttribution_Source) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = StatusAttribution_RLAttribution_Source(num) + return nil +} + +// Deprecated: Use StatusAttribution_RLAttribution_Source.Descriptor instead. +func (StatusAttribution_RLAttribution_Source) EnumDescriptor() ([]byte, []int) { + return file_waStatusAttributions_WAStatusAttributions_proto_rawDescGZIP(), []int{0, 1, 0} +} + +type StatusAttribution_ExternalShare_Source int32 + +const ( + StatusAttribution_ExternalShare_UNKNOWN StatusAttribution_ExternalShare_Source = 0 + StatusAttribution_ExternalShare_INSTAGRAM StatusAttribution_ExternalShare_Source = 1 + StatusAttribution_ExternalShare_FACEBOOK StatusAttribution_ExternalShare_Source = 2 + StatusAttribution_ExternalShare_MESSENGER StatusAttribution_ExternalShare_Source = 3 + StatusAttribution_ExternalShare_SPOTIFY StatusAttribution_ExternalShare_Source = 4 + StatusAttribution_ExternalShare_YOUTUBE StatusAttribution_ExternalShare_Source = 5 + StatusAttribution_ExternalShare_PINTEREST StatusAttribution_ExternalShare_Source = 6 + StatusAttribution_ExternalShare_THREADS StatusAttribution_ExternalShare_Source = 7 + StatusAttribution_ExternalShare_APPLE_MUSIC StatusAttribution_ExternalShare_Source = 8 + StatusAttribution_ExternalShare_SHARECHAT StatusAttribution_ExternalShare_Source = 9 + StatusAttribution_ExternalShare_GOOGLE_PHOTOS StatusAttribution_ExternalShare_Source = 10 +) + +// Enum value maps for StatusAttribution_ExternalShare_Source. +var ( + StatusAttribution_ExternalShare_Source_name = map[int32]string{ + 0: "UNKNOWN", + 1: "INSTAGRAM", + 2: "FACEBOOK", + 3: "MESSENGER", + 4: "SPOTIFY", + 5: "YOUTUBE", + 6: "PINTEREST", + 7: "THREADS", + 8: "APPLE_MUSIC", + 9: "SHARECHAT", + 10: "GOOGLE_PHOTOS", + } + StatusAttribution_ExternalShare_Source_value = map[string]int32{ + "UNKNOWN": 0, + "INSTAGRAM": 1, + "FACEBOOK": 2, + "MESSENGER": 3, + "SPOTIFY": 4, + "YOUTUBE": 5, + "PINTEREST": 6, + "THREADS": 7, + "APPLE_MUSIC": 8, + "SHARECHAT": 9, + "GOOGLE_PHOTOS": 10, + } +) + +func (x StatusAttribution_ExternalShare_Source) Enum() *StatusAttribution_ExternalShare_Source { + p := new(StatusAttribution_ExternalShare_Source) + *p = x + return p +} + +func (x StatusAttribution_ExternalShare_Source) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (StatusAttribution_ExternalShare_Source) Descriptor() protoreflect.EnumDescriptor { + return file_waStatusAttributions_WAStatusAttributions_proto_enumTypes[3].Descriptor() +} + +func (StatusAttribution_ExternalShare_Source) Type() protoreflect.EnumType { + return &file_waStatusAttributions_WAStatusAttributions_proto_enumTypes[3] +} + +func (x StatusAttribution_ExternalShare_Source) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *StatusAttribution_ExternalShare_Source) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = StatusAttribution_ExternalShare_Source(num) + return nil +} + +// Deprecated: Use StatusAttribution_ExternalShare_Source.Descriptor instead. +func (StatusAttribution_ExternalShare_Source) EnumDescriptor() ([]byte, []int) { + return file_waStatusAttributions_WAStatusAttributions_proto_rawDescGZIP(), []int{0, 2, 0} +} + +type StatusAttribution_StatusReshare_Source int32 + +const ( + StatusAttribution_StatusReshare_UNKNOWN StatusAttribution_StatusReshare_Source = 0 + StatusAttribution_StatusReshare_INTERNAL_RESHARE StatusAttribution_StatusReshare_Source = 1 + StatusAttribution_StatusReshare_MENTION_RESHARE StatusAttribution_StatusReshare_Source = 2 + StatusAttribution_StatusReshare_CHANNEL_RESHARE StatusAttribution_StatusReshare_Source = 3 + StatusAttribution_StatusReshare_FORWARD StatusAttribution_StatusReshare_Source = 4 +) + +// Enum value maps for StatusAttribution_StatusReshare_Source. +var ( + StatusAttribution_StatusReshare_Source_name = map[int32]string{ + 0: "UNKNOWN", + 1: "INTERNAL_RESHARE", + 2: "MENTION_RESHARE", + 3: "CHANNEL_RESHARE", + 4: "FORWARD", + } + StatusAttribution_StatusReshare_Source_value = map[string]int32{ + "UNKNOWN": 0, + "INTERNAL_RESHARE": 1, + "MENTION_RESHARE": 2, + "CHANNEL_RESHARE": 3, + "FORWARD": 4, + } +) + +func (x StatusAttribution_StatusReshare_Source) Enum() *StatusAttribution_StatusReshare_Source { + p := new(StatusAttribution_StatusReshare_Source) + *p = x + return p +} + +func (x StatusAttribution_StatusReshare_Source) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (StatusAttribution_StatusReshare_Source) Descriptor() protoreflect.EnumDescriptor { + return file_waStatusAttributions_WAStatusAttributions_proto_enumTypes[4].Descriptor() +} + +func (StatusAttribution_StatusReshare_Source) Type() protoreflect.EnumType { + return &file_waStatusAttributions_WAStatusAttributions_proto_enumTypes[4] +} + +func (x StatusAttribution_StatusReshare_Source) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *StatusAttribution_StatusReshare_Source) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = StatusAttribution_StatusReshare_Source(num) + return nil +} + +// Deprecated: Use StatusAttribution_StatusReshare_Source.Descriptor instead. +func (StatusAttribution_StatusReshare_Source) EnumDescriptor() ([]byte, []int) { + return file_waStatusAttributions_WAStatusAttributions_proto_rawDescGZIP(), []int{0, 3, 0} +} + +type StatusAttribution struct { + state protoimpl.MessageState `protogen:"open.v1"` + // Types that are valid to be assigned to AttributionData: + // + // *StatusAttribution_StatusReshare_ + // *StatusAttribution_ExternalShare_ + // *StatusAttribution_Music_ + // *StatusAttribution_GroupStatus_ + // *StatusAttribution_RlAttribution + // *StatusAttribution_AiCreatedAttribution_ + AttributionData isStatusAttribution_AttributionData `protobuf_oneof:"attributionData"` + Type *StatusAttribution_Type `protobuf:"varint,1,opt,name=type,enum=WAStatusAttributions.StatusAttribution_Type" json:"type,omitempty"` + ActionURL *string `protobuf:"bytes,2,opt,name=actionURL" json:"actionURL,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *StatusAttribution) Reset() { + *x = StatusAttribution{} + mi := &file_waStatusAttributions_WAStatusAttributions_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *StatusAttribution) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StatusAttribution) ProtoMessage() {} + +func (x *StatusAttribution) ProtoReflect() protoreflect.Message { + mi := &file_waStatusAttributions_WAStatusAttributions_proto_msgTypes[0] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StatusAttribution.ProtoReflect.Descriptor instead. +func (*StatusAttribution) Descriptor() ([]byte, []int) { + return file_waStatusAttributions_WAStatusAttributions_proto_rawDescGZIP(), []int{0} +} + +func (x *StatusAttribution) GetAttributionData() isStatusAttribution_AttributionData { + if x != nil { + return x.AttributionData + } + return nil +} + +func (x *StatusAttribution) GetStatusReshare() *StatusAttribution_StatusReshare { + if x != nil { + if x, ok := x.AttributionData.(*StatusAttribution_StatusReshare_); ok { + return x.StatusReshare + } + } + return nil +} + +func (x *StatusAttribution) GetExternalShare() *StatusAttribution_ExternalShare { + if x != nil { + if x, ok := x.AttributionData.(*StatusAttribution_ExternalShare_); ok { + return x.ExternalShare + } + } + return nil +} + +func (x *StatusAttribution) GetMusic() *StatusAttribution_Music { + if x != nil { + if x, ok := x.AttributionData.(*StatusAttribution_Music_); ok { + return x.Music + } + } + return nil +} + +func (x *StatusAttribution) GetGroupStatus() *StatusAttribution_GroupStatus { + if x != nil { + if x, ok := x.AttributionData.(*StatusAttribution_GroupStatus_); ok { + return x.GroupStatus + } + } + return nil +} + +func (x *StatusAttribution) GetRlAttribution() *StatusAttribution_RLAttribution { + if x != nil { + if x, ok := x.AttributionData.(*StatusAttribution_RlAttribution); ok { + return x.RlAttribution + } + } + return nil +} + +func (x *StatusAttribution) GetAiCreatedAttribution() *StatusAttribution_AiCreatedAttribution { + if x != nil { + if x, ok := x.AttributionData.(*StatusAttribution_AiCreatedAttribution_); ok { + return x.AiCreatedAttribution + } + } + return nil +} + +func (x *StatusAttribution) GetType() StatusAttribution_Type { + if x != nil && x.Type != nil { + return *x.Type + } + return StatusAttribution_UNKNOWN +} + +func (x *StatusAttribution) GetActionURL() string { + if x != nil && x.ActionURL != nil { + return *x.ActionURL + } + return "" +} + +type isStatusAttribution_AttributionData interface { + isStatusAttribution_AttributionData() +} + +type StatusAttribution_StatusReshare_ struct { + StatusReshare *StatusAttribution_StatusReshare `protobuf:"bytes,3,opt,name=statusReshare,oneof"` +} + +type StatusAttribution_ExternalShare_ struct { + ExternalShare *StatusAttribution_ExternalShare `protobuf:"bytes,4,opt,name=externalShare,oneof"` +} + +type StatusAttribution_Music_ struct { + Music *StatusAttribution_Music `protobuf:"bytes,5,opt,name=music,oneof"` +} + +type StatusAttribution_GroupStatus_ struct { + GroupStatus *StatusAttribution_GroupStatus `protobuf:"bytes,6,opt,name=groupStatus,oneof"` +} + +type StatusAttribution_RlAttribution struct { + RlAttribution *StatusAttribution_RLAttribution `protobuf:"bytes,7,opt,name=rlAttribution,oneof"` +} + +type StatusAttribution_AiCreatedAttribution_ struct { + AiCreatedAttribution *StatusAttribution_AiCreatedAttribution `protobuf:"bytes,8,opt,name=aiCreatedAttribution,oneof"` +} + +func (*StatusAttribution_StatusReshare_) isStatusAttribution_AttributionData() {} + +func (*StatusAttribution_ExternalShare_) isStatusAttribution_AttributionData() {} + +func (*StatusAttribution_Music_) isStatusAttribution_AttributionData() {} + +func (*StatusAttribution_GroupStatus_) isStatusAttribution_AttributionData() {} + +func (*StatusAttribution_RlAttribution) isStatusAttribution_AttributionData() {} + +func (*StatusAttribution_AiCreatedAttribution_) isStatusAttribution_AttributionData() {} + +type StatusAttribution_AiCreatedAttribution struct { + state protoimpl.MessageState `protogen:"open.v1"` + Source *StatusAttribution_AiCreatedAttribution_Source `protobuf:"varint,1,opt,name=source,enum=WAStatusAttributions.StatusAttribution_AiCreatedAttribution_Source" json:"source,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *StatusAttribution_AiCreatedAttribution) Reset() { + *x = StatusAttribution_AiCreatedAttribution{} + mi := &file_waStatusAttributions_WAStatusAttributions_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *StatusAttribution_AiCreatedAttribution) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StatusAttribution_AiCreatedAttribution) ProtoMessage() {} + +func (x *StatusAttribution_AiCreatedAttribution) ProtoReflect() protoreflect.Message { + mi := &file_waStatusAttributions_WAStatusAttributions_proto_msgTypes[1] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StatusAttribution_AiCreatedAttribution.ProtoReflect.Descriptor instead. +func (*StatusAttribution_AiCreatedAttribution) Descriptor() ([]byte, []int) { + return file_waStatusAttributions_WAStatusAttributions_proto_rawDescGZIP(), []int{0, 0} +} + +func (x *StatusAttribution_AiCreatedAttribution) GetSource() StatusAttribution_AiCreatedAttribution_Source { + if x != nil && x.Source != nil { + return *x.Source + } + return StatusAttribution_AiCreatedAttribution_UNKNOWN +} + +type StatusAttribution_RLAttribution struct { + state protoimpl.MessageState `protogen:"open.v1"` + Source *StatusAttribution_RLAttribution_Source `protobuf:"varint,1,opt,name=source,enum=WAStatusAttributions.StatusAttribution_RLAttribution_Source" json:"source,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *StatusAttribution_RLAttribution) Reset() { + *x = StatusAttribution_RLAttribution{} + mi := &file_waStatusAttributions_WAStatusAttributions_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *StatusAttribution_RLAttribution) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StatusAttribution_RLAttribution) ProtoMessage() {} + +func (x *StatusAttribution_RLAttribution) ProtoReflect() protoreflect.Message { + mi := &file_waStatusAttributions_WAStatusAttributions_proto_msgTypes[2] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StatusAttribution_RLAttribution.ProtoReflect.Descriptor instead. +func (*StatusAttribution_RLAttribution) Descriptor() ([]byte, []int) { + return file_waStatusAttributions_WAStatusAttributions_proto_rawDescGZIP(), []int{0, 1} +} + +func (x *StatusAttribution_RLAttribution) GetSource() StatusAttribution_RLAttribution_Source { + if x != nil && x.Source != nil { + return *x.Source + } + return StatusAttribution_RLAttribution_UNKNOWN +} + +type StatusAttribution_ExternalShare struct { + state protoimpl.MessageState `protogen:"open.v1"` + ActionURL *string `protobuf:"bytes,1,opt,name=actionURL" json:"actionURL,omitempty"` + Source *StatusAttribution_ExternalShare_Source `protobuf:"varint,2,opt,name=source,enum=WAStatusAttributions.StatusAttribution_ExternalShare_Source" json:"source,omitempty"` + Duration *int32 `protobuf:"varint,3,opt,name=duration" json:"duration,omitempty"` + ActionFallbackURL *string `protobuf:"bytes,4,opt,name=actionFallbackURL" json:"actionFallbackURL,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *StatusAttribution_ExternalShare) Reset() { + *x = StatusAttribution_ExternalShare{} + mi := &file_waStatusAttributions_WAStatusAttributions_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *StatusAttribution_ExternalShare) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StatusAttribution_ExternalShare) ProtoMessage() {} + +func (x *StatusAttribution_ExternalShare) ProtoReflect() protoreflect.Message { + mi := &file_waStatusAttributions_WAStatusAttributions_proto_msgTypes[3] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StatusAttribution_ExternalShare.ProtoReflect.Descriptor instead. +func (*StatusAttribution_ExternalShare) Descriptor() ([]byte, []int) { + return file_waStatusAttributions_WAStatusAttributions_proto_rawDescGZIP(), []int{0, 2} +} + +func (x *StatusAttribution_ExternalShare) GetActionURL() string { + if x != nil && x.ActionURL != nil { + return *x.ActionURL + } + return "" +} + +func (x *StatusAttribution_ExternalShare) GetSource() StatusAttribution_ExternalShare_Source { + if x != nil && x.Source != nil { + return *x.Source + } + return StatusAttribution_ExternalShare_UNKNOWN +} + +func (x *StatusAttribution_ExternalShare) GetDuration() int32 { + if x != nil && x.Duration != nil { + return *x.Duration + } + return 0 +} + +func (x *StatusAttribution_ExternalShare) GetActionFallbackURL() string { + if x != nil && x.ActionFallbackURL != nil { + return *x.ActionFallbackURL + } + return "" +} + +type StatusAttribution_StatusReshare struct { + state protoimpl.MessageState `protogen:"open.v1"` + Source *StatusAttribution_StatusReshare_Source `protobuf:"varint,1,opt,name=source,enum=WAStatusAttributions.StatusAttribution_StatusReshare_Source" json:"source,omitempty"` + Metadata *StatusAttribution_StatusReshare_Metadata `protobuf:"bytes,2,opt,name=metadata" json:"metadata,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *StatusAttribution_StatusReshare) Reset() { + *x = StatusAttribution_StatusReshare{} + mi := &file_waStatusAttributions_WAStatusAttributions_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *StatusAttribution_StatusReshare) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StatusAttribution_StatusReshare) ProtoMessage() {} + +func (x *StatusAttribution_StatusReshare) ProtoReflect() protoreflect.Message { + mi := &file_waStatusAttributions_WAStatusAttributions_proto_msgTypes[4] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StatusAttribution_StatusReshare.ProtoReflect.Descriptor instead. +func (*StatusAttribution_StatusReshare) Descriptor() ([]byte, []int) { + return file_waStatusAttributions_WAStatusAttributions_proto_rawDescGZIP(), []int{0, 3} +} + +func (x *StatusAttribution_StatusReshare) GetSource() StatusAttribution_StatusReshare_Source { + if x != nil && x.Source != nil { + return *x.Source + } + return StatusAttribution_StatusReshare_UNKNOWN +} + +func (x *StatusAttribution_StatusReshare) GetMetadata() *StatusAttribution_StatusReshare_Metadata { + if x != nil { + return x.Metadata + } + return nil +} + +type StatusAttribution_GroupStatus struct { + state protoimpl.MessageState `protogen:"open.v1"` + AuthorJID *string `protobuf:"bytes,1,opt,name=authorJID" json:"authorJID,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *StatusAttribution_GroupStatus) Reset() { + *x = StatusAttribution_GroupStatus{} + mi := &file_waStatusAttributions_WAStatusAttributions_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *StatusAttribution_GroupStatus) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StatusAttribution_GroupStatus) ProtoMessage() {} + +func (x *StatusAttribution_GroupStatus) ProtoReflect() protoreflect.Message { + mi := &file_waStatusAttributions_WAStatusAttributions_proto_msgTypes[5] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StatusAttribution_GroupStatus.ProtoReflect.Descriptor instead. +func (*StatusAttribution_GroupStatus) Descriptor() ([]byte, []int) { + return file_waStatusAttributions_WAStatusAttributions_proto_rawDescGZIP(), []int{0, 4} +} + +func (x *StatusAttribution_GroupStatus) GetAuthorJID() string { + if x != nil && x.AuthorJID != nil { + return *x.AuthorJID + } + return "" +} + +type StatusAttribution_Music struct { + state protoimpl.MessageState `protogen:"open.v1"` + AuthorName *string `protobuf:"bytes,1,opt,name=authorName" json:"authorName,omitempty"` + SongID *string `protobuf:"bytes,2,opt,name=songID" json:"songID,omitempty"` + Title *string `protobuf:"bytes,3,opt,name=title" json:"title,omitempty"` + Author *string `protobuf:"bytes,4,opt,name=author" json:"author,omitempty"` + ArtistAttribution *string `protobuf:"bytes,5,opt,name=artistAttribution" json:"artistAttribution,omitempty"` + IsExplicit *bool `protobuf:"varint,6,opt,name=isExplicit" json:"isExplicit,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *StatusAttribution_Music) Reset() { + *x = StatusAttribution_Music{} + mi := &file_waStatusAttributions_WAStatusAttributions_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *StatusAttribution_Music) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StatusAttribution_Music) ProtoMessage() {} + +func (x *StatusAttribution_Music) ProtoReflect() protoreflect.Message { + mi := &file_waStatusAttributions_WAStatusAttributions_proto_msgTypes[6] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StatusAttribution_Music.ProtoReflect.Descriptor instead. +func (*StatusAttribution_Music) Descriptor() ([]byte, []int) { + return file_waStatusAttributions_WAStatusAttributions_proto_rawDescGZIP(), []int{0, 5} +} + +func (x *StatusAttribution_Music) GetAuthorName() string { + if x != nil && x.AuthorName != nil { + return *x.AuthorName + } + return "" +} + +func (x *StatusAttribution_Music) GetSongID() string { + if x != nil && x.SongID != nil { + return *x.SongID + } + return "" +} + +func (x *StatusAttribution_Music) GetTitle() string { + if x != nil && x.Title != nil { + return *x.Title + } + return "" +} + +func (x *StatusAttribution_Music) GetAuthor() string { + if x != nil && x.Author != nil { + return *x.Author + } + return "" +} + +func (x *StatusAttribution_Music) GetArtistAttribution() string { + if x != nil && x.ArtistAttribution != nil { + return *x.ArtistAttribution + } + return "" +} + +func (x *StatusAttribution_Music) GetIsExplicit() bool { + if x != nil && x.IsExplicit != nil { + return *x.IsExplicit + } + return false +} + +type StatusAttribution_StatusReshare_Metadata struct { + state protoimpl.MessageState `protogen:"open.v1"` + Duration *int32 `protobuf:"varint,1,opt,name=duration" json:"duration,omitempty"` + ChannelJID *string `protobuf:"bytes,2,opt,name=channelJID" json:"channelJID,omitempty"` + ChannelMessageID *int32 `protobuf:"varint,3,opt,name=channelMessageID" json:"channelMessageID,omitempty"` + HasMultipleReshares *bool `protobuf:"varint,4,opt,name=hasMultipleReshares" json:"hasMultipleReshares,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *StatusAttribution_StatusReshare_Metadata) Reset() { + *x = StatusAttribution_StatusReshare_Metadata{} + mi := &file_waStatusAttributions_WAStatusAttributions_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *StatusAttribution_StatusReshare_Metadata) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StatusAttribution_StatusReshare_Metadata) ProtoMessage() {} + +func (x *StatusAttribution_StatusReshare_Metadata) ProtoReflect() protoreflect.Message { + mi := &file_waStatusAttributions_WAStatusAttributions_proto_msgTypes[7] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StatusAttribution_StatusReshare_Metadata.ProtoReflect.Descriptor instead. +func (*StatusAttribution_StatusReshare_Metadata) Descriptor() ([]byte, []int) { + return file_waStatusAttributions_WAStatusAttributions_proto_rawDescGZIP(), []int{0, 3, 0} +} + +func (x *StatusAttribution_StatusReshare_Metadata) GetDuration() int32 { + if x != nil && x.Duration != nil { + return *x.Duration + } + return 0 +} + +func (x *StatusAttribution_StatusReshare_Metadata) GetChannelJID() string { + if x != nil && x.ChannelJID != nil { + return *x.ChannelJID + } + return "" +} + +func (x *StatusAttribution_StatusReshare_Metadata) GetChannelMessageID() int32 { + if x != nil && x.ChannelMessageID != nil { + return *x.ChannelMessageID + } + return 0 +} + +func (x *StatusAttribution_StatusReshare_Metadata) GetHasMultipleReshares() bool { + if x != nil && x.HasMultipleReshares != nil { + return *x.HasMultipleReshares + } + return false +} + +var File_waStatusAttributions_WAStatusAttributions_proto protoreflect.FileDescriptor + +const file_waStatusAttributions_WAStatusAttributions_proto_rawDesc = "" + + "\n" + + "/waStatusAttributions/WAStatusAttributions.proto\x12\x14WAStatusAttributions\"\xf1\x11\n" + + "\x11StatusAttribution\x12]\n" + + "\rstatusReshare\x18\x03 \x01(\v25.WAStatusAttributions.StatusAttribution.StatusReshareH\x00R\rstatusReshare\x12]\n" + + "\rexternalShare\x18\x04 \x01(\v25.WAStatusAttributions.StatusAttribution.ExternalShareH\x00R\rexternalShare\x12E\n" + + "\x05music\x18\x05 \x01(\v2-.WAStatusAttributions.StatusAttribution.MusicH\x00R\x05music\x12W\n" + + "\vgroupStatus\x18\x06 \x01(\v23.WAStatusAttributions.StatusAttribution.GroupStatusH\x00R\vgroupStatus\x12]\n" + + "\rrlAttribution\x18\a \x01(\v25.WAStatusAttributions.StatusAttribution.RLAttributionH\x00R\rrlAttribution\x12r\n" + + "\x14aiCreatedAttribution\x18\b \x01(\v2<.WAStatusAttributions.StatusAttribution.AiCreatedAttributionH\x00R\x14aiCreatedAttribution\x12@\n" + + "\x04type\x18\x01 \x01(\x0e2,.WAStatusAttributions.StatusAttribution.TypeR\x04type\x12\x1c\n" + + "\tactionURL\x18\x02 \x01(\tR\tactionURL\x1a\x9e\x01\n" + + "\x14AiCreatedAttribution\x12[\n" + + "\x06source\x18\x01 \x01(\x0e2C.WAStatusAttributions.StatusAttribution.AiCreatedAttribution.SourceR\x06source\")\n" + + "\x06Source\x12\v\n" + + "\aUNKNOWN\x10\x00\x12\x12\n" + + "\x0eSTATUS_MIMICRY\x10\x01\x1a\xc6\x01\n" + + "\rRLAttribution\x12T\n" + + "\x06source\x18\x01 \x01(\x0e2<.WAStatusAttributions.StatusAttribution.RLAttribution.SourceR\x06source\"_\n" + + "\x06Source\x12\v\n" + + "\aUNKNOWN\x10\x00\x12\x18\n" + + "\x14RAY_BAN_META_GLASSES\x10\x01\x12\x17\n" + + "\x13OAKLEY_META_GLASSES\x10\x02\x12\x15\n" + + "\x11HYPERNOVA_GLASSES\x10\x03\x1a\xfa\x02\n" + + "\rExternalShare\x12\x1c\n" + + "\tactionURL\x18\x01 \x01(\tR\tactionURL\x12T\n" + + "\x06source\x18\x02 \x01(\x0e2<.WAStatusAttributions.StatusAttribution.ExternalShare.SourceR\x06source\x12\x1a\n" + + "\bduration\x18\x03 \x01(\x05R\bduration\x12,\n" + + "\x11actionFallbackURL\x18\x04 \x01(\tR\x11actionFallbackURL\"\xaa\x01\n" + + "\x06Source\x12\v\n" + + "\aUNKNOWN\x10\x00\x12\r\n" + + "\tINSTAGRAM\x10\x01\x12\f\n" + + "\bFACEBOOK\x10\x02\x12\r\n" + + "\tMESSENGER\x10\x03\x12\v\n" + + "\aSPOTIFY\x10\x04\x12\v\n" + + "\aYOUTUBE\x10\x05\x12\r\n" + + "\tPINTEREST\x10\x06\x12\v\n" + + "\aTHREADS\x10\a\x12\x0f\n" + + "\vAPPLE_MUSIC\x10\b\x12\r\n" + + "\tSHARECHAT\x10\t\x12\x11\n" + + "\rGOOGLE_PHOTOS\x10\n" + + "\x1a\xcc\x03\n" + + "\rStatusReshare\x12T\n" + + "\x06source\x18\x01 \x01(\x0e2<.WAStatusAttributions.StatusAttribution.StatusReshare.SourceR\x06source\x12Z\n" + + "\bmetadata\x18\x02 \x01(\v2>.WAStatusAttributions.StatusAttribution.StatusReshare.MetadataR\bmetadata\x1a\xa4\x01\n" + + "\bMetadata\x12\x1a\n" + + "\bduration\x18\x01 \x01(\x05R\bduration\x12\x1e\n" + + "\n" + + "channelJID\x18\x02 \x01(\tR\n" + + "channelJID\x12*\n" + + "\x10channelMessageID\x18\x03 \x01(\x05R\x10channelMessageID\x120\n" + + "\x13hasMultipleReshares\x18\x04 \x01(\bR\x13hasMultipleReshares\"b\n" + + "\x06Source\x12\v\n" + + "\aUNKNOWN\x10\x00\x12\x14\n" + + "\x10INTERNAL_RESHARE\x10\x01\x12\x13\n" + + "\x0fMENTION_RESHARE\x10\x02\x12\x13\n" + + "\x0fCHANNEL_RESHARE\x10\x03\x12\v\n" + + "\aFORWARD\x10\x04\x1a+\n" + + "\vGroupStatus\x12\x1c\n" + + "\tauthorJID\x18\x01 \x01(\tR\tauthorJID\x1a\xbb\x01\n" + + "\x05Music\x12\x1e\n" + + "\n" + + "authorName\x18\x01 \x01(\tR\n" + + "authorName\x12\x16\n" + + "\x06songID\x18\x02 \x01(\tR\x06songID\x12\x14\n" + + "\x05title\x18\x03 \x01(\tR\x05title\x12\x16\n" + + "\x06author\x18\x04 \x01(\tR\x06author\x12,\n" + + "\x11artistAttribution\x18\x05 \x01(\tR\x11artistAttribution\x12\x1e\n" + + "\n" + + "isExplicit\x18\x06 \x01(\bR\n" + + "isExplicit\"\x96\x01\n" + + "\x04Type\x12\v\n" + + "\aUNKNOWN\x10\x00\x12\v\n" + + "\aRESHARE\x10\x01\x12\x12\n" + + "\x0eEXTERNAL_SHARE\x10\x02\x12\t\n" + + "\x05MUSIC\x10\x03\x12\x12\n" + + "\x0eSTATUS_MENTION\x10\x04\x12\x10\n" + + "\fGROUP_STATUS\x10\x05\x12\x12\n" + + "\x0eRL_ATTRIBUTION\x10\x06\x12\x0e\n" + + "\n" + + "AI_CREATED\x10\a\x12\v\n" + + "\aLAYOUTS\x10\bB\x11\n" + + "\x0fattributionDataB0Z.go.mau.fi/whatsmeow/proto/waStatusAttributions" + +var ( + file_waStatusAttributions_WAStatusAttributions_proto_rawDescOnce sync.Once + file_waStatusAttributions_WAStatusAttributions_proto_rawDescData []byte +) + +func file_waStatusAttributions_WAStatusAttributions_proto_rawDescGZIP() []byte { + file_waStatusAttributions_WAStatusAttributions_proto_rawDescOnce.Do(func() { + file_waStatusAttributions_WAStatusAttributions_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_waStatusAttributions_WAStatusAttributions_proto_rawDesc), len(file_waStatusAttributions_WAStatusAttributions_proto_rawDesc))) + }) + return file_waStatusAttributions_WAStatusAttributions_proto_rawDescData +} + +var file_waStatusAttributions_WAStatusAttributions_proto_enumTypes = make([]protoimpl.EnumInfo, 5) +var file_waStatusAttributions_WAStatusAttributions_proto_msgTypes = make([]protoimpl.MessageInfo, 8) +var file_waStatusAttributions_WAStatusAttributions_proto_goTypes = []any{ + (StatusAttribution_Type)(0), // 0: WAStatusAttributions.StatusAttribution.Type + (StatusAttribution_AiCreatedAttribution_Source)(0), // 1: WAStatusAttributions.StatusAttribution.AiCreatedAttribution.Source + (StatusAttribution_RLAttribution_Source)(0), // 2: WAStatusAttributions.StatusAttribution.RLAttribution.Source + (StatusAttribution_ExternalShare_Source)(0), // 3: WAStatusAttributions.StatusAttribution.ExternalShare.Source + (StatusAttribution_StatusReshare_Source)(0), // 4: WAStatusAttributions.StatusAttribution.StatusReshare.Source + (*StatusAttribution)(nil), // 5: WAStatusAttributions.StatusAttribution + (*StatusAttribution_AiCreatedAttribution)(nil), // 6: WAStatusAttributions.StatusAttribution.AiCreatedAttribution + (*StatusAttribution_RLAttribution)(nil), // 7: WAStatusAttributions.StatusAttribution.RLAttribution + (*StatusAttribution_ExternalShare)(nil), // 8: WAStatusAttributions.StatusAttribution.ExternalShare + (*StatusAttribution_StatusReshare)(nil), // 9: WAStatusAttributions.StatusAttribution.StatusReshare + (*StatusAttribution_GroupStatus)(nil), // 10: WAStatusAttributions.StatusAttribution.GroupStatus + (*StatusAttribution_Music)(nil), // 11: WAStatusAttributions.StatusAttribution.Music + (*StatusAttribution_StatusReshare_Metadata)(nil), // 12: WAStatusAttributions.StatusAttribution.StatusReshare.Metadata +} +var file_waStatusAttributions_WAStatusAttributions_proto_depIdxs = []int32{ + 9, // 0: WAStatusAttributions.StatusAttribution.statusReshare:type_name -> WAStatusAttributions.StatusAttribution.StatusReshare + 8, // 1: WAStatusAttributions.StatusAttribution.externalShare:type_name -> WAStatusAttributions.StatusAttribution.ExternalShare + 11, // 2: WAStatusAttributions.StatusAttribution.music:type_name -> WAStatusAttributions.StatusAttribution.Music + 10, // 3: WAStatusAttributions.StatusAttribution.groupStatus:type_name -> WAStatusAttributions.StatusAttribution.GroupStatus + 7, // 4: WAStatusAttributions.StatusAttribution.rlAttribution:type_name -> WAStatusAttributions.StatusAttribution.RLAttribution + 6, // 5: WAStatusAttributions.StatusAttribution.aiCreatedAttribution:type_name -> WAStatusAttributions.StatusAttribution.AiCreatedAttribution + 0, // 6: WAStatusAttributions.StatusAttribution.type:type_name -> WAStatusAttributions.StatusAttribution.Type + 1, // 7: WAStatusAttributions.StatusAttribution.AiCreatedAttribution.source:type_name -> WAStatusAttributions.StatusAttribution.AiCreatedAttribution.Source + 2, // 8: WAStatusAttributions.StatusAttribution.RLAttribution.source:type_name -> WAStatusAttributions.StatusAttribution.RLAttribution.Source + 3, // 9: WAStatusAttributions.StatusAttribution.ExternalShare.source:type_name -> WAStatusAttributions.StatusAttribution.ExternalShare.Source + 4, // 10: WAStatusAttributions.StatusAttribution.StatusReshare.source:type_name -> WAStatusAttributions.StatusAttribution.StatusReshare.Source + 12, // 11: WAStatusAttributions.StatusAttribution.StatusReshare.metadata:type_name -> WAStatusAttributions.StatusAttribution.StatusReshare.Metadata + 12, // [12:12] is the sub-list for method output_type + 12, // [12:12] is the sub-list for method input_type + 12, // [12:12] is the sub-list for extension type_name + 12, // [12:12] is the sub-list for extension extendee + 0, // [0:12] is the sub-list for field type_name +} + +func init() { file_waStatusAttributions_WAStatusAttributions_proto_init() } +func file_waStatusAttributions_WAStatusAttributions_proto_init() { + if File_waStatusAttributions_WAStatusAttributions_proto != nil { + return + } + file_waStatusAttributions_WAStatusAttributions_proto_msgTypes[0].OneofWrappers = []any{ + (*StatusAttribution_StatusReshare_)(nil), + (*StatusAttribution_ExternalShare_)(nil), + (*StatusAttribution_Music_)(nil), + (*StatusAttribution_GroupStatus_)(nil), + (*StatusAttribution_RlAttribution)(nil), + (*StatusAttribution_AiCreatedAttribution_)(nil), + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: unsafe.Slice(unsafe.StringData(file_waStatusAttributions_WAStatusAttributions_proto_rawDesc), len(file_waStatusAttributions_WAStatusAttributions_proto_rawDesc)), + NumEnums: 5, + NumMessages: 8, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_waStatusAttributions_WAStatusAttributions_proto_goTypes, + DependencyIndexes: file_waStatusAttributions_WAStatusAttributions_proto_depIdxs, + EnumInfos: file_waStatusAttributions_WAStatusAttributions_proto_enumTypes, + MessageInfos: file_waStatusAttributions_WAStatusAttributions_proto_msgTypes, + }.Build() + File_waStatusAttributions_WAStatusAttributions_proto = out.File + file_waStatusAttributions_WAStatusAttributions_proto_goTypes = nil + file_waStatusAttributions_WAStatusAttributions_proto_depIdxs = nil +} diff --git a/vendor/go.mau.fi/whatsmeow/proto/waStatusAttributions/WAStatusAttributions.proto b/vendor/go.mau.fi/whatsmeow/proto/waStatusAttributions/WAStatusAttributions.proto new file mode 100644 index 0000000000..617a8d25ed --- /dev/null +++ b/vendor/go.mau.fi/whatsmeow/proto/waStatusAttributions/WAStatusAttributions.proto @@ -0,0 +1,103 @@ +syntax = "proto2"; +package WAStatusAttributions; +option go_package = "go.mau.fi/whatsmeow/proto/waStatusAttributions"; + +message StatusAttribution { + enum Type { + UNKNOWN = 0; + RESHARE = 1; + EXTERNAL_SHARE = 2; + MUSIC = 3; + STATUS_MENTION = 4; + GROUP_STATUS = 5; + RL_ATTRIBUTION = 6; + AI_CREATED = 7; + LAYOUTS = 8; + } + + message AiCreatedAttribution { + enum Source { + UNKNOWN = 0; + STATUS_MIMICRY = 1; + } + + optional Source source = 1; + } + + message RLAttribution { + enum Source { + UNKNOWN = 0; + RAY_BAN_META_GLASSES = 1; + OAKLEY_META_GLASSES = 2; + HYPERNOVA_GLASSES = 3; + } + + optional Source source = 1; + } + + message ExternalShare { + enum Source { + UNKNOWN = 0; + INSTAGRAM = 1; + FACEBOOK = 2; + MESSENGER = 3; + SPOTIFY = 4; + YOUTUBE = 5; + PINTEREST = 6; + THREADS = 7; + APPLE_MUSIC = 8; + SHARECHAT = 9; + GOOGLE_PHOTOS = 10; + } + + optional string actionURL = 1; + optional Source source = 2; + optional int32 duration = 3; + optional string actionFallbackURL = 4; + } + + message StatusReshare { + enum Source { + UNKNOWN = 0; + INTERNAL_RESHARE = 1; + MENTION_RESHARE = 2; + CHANNEL_RESHARE = 3; + FORWARD = 4; + } + + message Metadata { + optional int32 duration = 1; + optional string channelJID = 2; + optional int32 channelMessageID = 3; + optional bool hasMultipleReshares = 4; + } + + optional Source source = 1; + optional Metadata metadata = 2; + } + + message GroupStatus { + optional string authorJID = 1; + } + + message Music { + optional string authorName = 1; + optional string songID = 2; + optional string title = 3; + optional string author = 4; + optional string artistAttribution = 5; + optional bool isExplicit = 6; + } + + oneof attributionData { + StatusReshare statusReshare = 3; + ExternalShare externalShare = 4; + Music music = 5; + GroupStatus groupStatus = 6; + RLAttribution rlAttribution = 7; + AiCreatedAttribution aiCreatedAttribution = 8; + } + + optional Type type = 1; + optional string actionURL = 2; +} diff --git a/vendor/go.mau.fi/whatsmeow/proto/waSyncAction/WASyncAction.pb.go b/vendor/go.mau.fi/whatsmeow/proto/waSyncAction/WASyncAction.pb.go deleted file mode 100644 index e9d447aff7..0000000000 --- a/vendor/go.mau.fi/whatsmeow/proto/waSyncAction/WASyncAction.pb.go +++ /dev/null @@ -1,5378 +0,0 @@ -// Code generated by protoc-gen-go. DO NOT EDIT. -// versions: -// protoc-gen-go v1.34.2 -// protoc v3.21.12 -// source: waSyncAction/WASyncAction.proto - -package waSyncAction - -import ( - reflect "reflect" - sync "sync" - - waChatLockSettings "go.mau.fi/whatsmeow/proto/waChatLockSettings" - waCommon "go.mau.fi/whatsmeow/proto/waCommon" - waDeviceCapabilities "go.mau.fi/whatsmeow/proto/waDeviceCapabilities" - protoreflect "google.golang.org/protobuf/reflect/protoreflect" - protoimpl "google.golang.org/protobuf/runtime/protoimpl" - - _ "embed" -) - -const ( - // Verify that this generated code is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) - // Verify that runtime/protoimpl is sufficiently up-to-date. - _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) -) - -type CallLogRecord_CallType int32 - -const ( - CallLogRecord_REGULAR CallLogRecord_CallType = 0 - CallLogRecord_SCHEDULED_CALL CallLogRecord_CallType = 1 - CallLogRecord_VOICE_CHAT CallLogRecord_CallType = 2 -) - -// Enum value maps for CallLogRecord_CallType. -var ( - CallLogRecord_CallType_name = map[int32]string{ - 0: "REGULAR", - 1: "SCHEDULED_CALL", - 2: "VOICE_CHAT", - } - CallLogRecord_CallType_value = map[string]int32{ - "REGULAR": 0, - "SCHEDULED_CALL": 1, - "VOICE_CHAT": 2, - } -) - -func (x CallLogRecord_CallType) Enum() *CallLogRecord_CallType { - p := new(CallLogRecord_CallType) - *p = x - return p -} - -func (x CallLogRecord_CallType) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (CallLogRecord_CallType) Descriptor() protoreflect.EnumDescriptor { - return file_waSyncAction_WASyncAction_proto_enumTypes[0].Descriptor() -} - -func (CallLogRecord_CallType) Type() protoreflect.EnumType { - return &file_waSyncAction_WASyncAction_proto_enumTypes[0] -} - -func (x CallLogRecord_CallType) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Do not use. -func (x *CallLogRecord_CallType) UnmarshalJSON(b []byte) error { - num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) - if err != nil { - return err - } - *x = CallLogRecord_CallType(num) - return nil -} - -// Deprecated: Use CallLogRecord_CallType.Descriptor instead. -func (CallLogRecord_CallType) EnumDescriptor() ([]byte, []int) { - return file_waSyncAction_WASyncAction_proto_rawDescGZIP(), []int{0, 0} -} - -type CallLogRecord_SilenceReason int32 - -const ( - CallLogRecord_NONE CallLogRecord_SilenceReason = 0 - CallLogRecord_SCHEDULED CallLogRecord_SilenceReason = 1 - CallLogRecord_PRIVACY CallLogRecord_SilenceReason = 2 - CallLogRecord_LIGHTWEIGHT CallLogRecord_SilenceReason = 3 -) - -// Enum value maps for CallLogRecord_SilenceReason. -var ( - CallLogRecord_SilenceReason_name = map[int32]string{ - 0: "NONE", - 1: "SCHEDULED", - 2: "PRIVACY", - 3: "LIGHTWEIGHT", - } - CallLogRecord_SilenceReason_value = map[string]int32{ - "NONE": 0, - "SCHEDULED": 1, - "PRIVACY": 2, - "LIGHTWEIGHT": 3, - } -) - -func (x CallLogRecord_SilenceReason) Enum() *CallLogRecord_SilenceReason { - p := new(CallLogRecord_SilenceReason) - *p = x - return p -} - -func (x CallLogRecord_SilenceReason) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (CallLogRecord_SilenceReason) Descriptor() protoreflect.EnumDescriptor { - return file_waSyncAction_WASyncAction_proto_enumTypes[1].Descriptor() -} - -func (CallLogRecord_SilenceReason) Type() protoreflect.EnumType { - return &file_waSyncAction_WASyncAction_proto_enumTypes[1] -} - -func (x CallLogRecord_SilenceReason) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Do not use. -func (x *CallLogRecord_SilenceReason) UnmarshalJSON(b []byte) error { - num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) - if err != nil { - return err - } - *x = CallLogRecord_SilenceReason(num) - return nil -} - -// Deprecated: Use CallLogRecord_SilenceReason.Descriptor instead. -func (CallLogRecord_SilenceReason) EnumDescriptor() ([]byte, []int) { - return file_waSyncAction_WASyncAction_proto_rawDescGZIP(), []int{0, 1} -} - -type CallLogRecord_CallResult int32 - -const ( - CallLogRecord_CONNECTED CallLogRecord_CallResult = 0 - CallLogRecord_REJECTED CallLogRecord_CallResult = 1 - CallLogRecord_CANCELLED CallLogRecord_CallResult = 2 - CallLogRecord_ACCEPTEDELSEWHERE CallLogRecord_CallResult = 3 - CallLogRecord_MISSED CallLogRecord_CallResult = 4 - CallLogRecord_INVALID CallLogRecord_CallResult = 5 - CallLogRecord_UNAVAILABLE CallLogRecord_CallResult = 6 - CallLogRecord_UPCOMING CallLogRecord_CallResult = 7 - CallLogRecord_FAILED CallLogRecord_CallResult = 8 - CallLogRecord_ABANDONED CallLogRecord_CallResult = 9 - CallLogRecord_ONGOING CallLogRecord_CallResult = 10 -) - -// Enum value maps for CallLogRecord_CallResult. -var ( - CallLogRecord_CallResult_name = map[int32]string{ - 0: "CONNECTED", - 1: "REJECTED", - 2: "CANCELLED", - 3: "ACCEPTEDELSEWHERE", - 4: "MISSED", - 5: "INVALID", - 6: "UNAVAILABLE", - 7: "UPCOMING", - 8: "FAILED", - 9: "ABANDONED", - 10: "ONGOING", - } - CallLogRecord_CallResult_value = map[string]int32{ - "CONNECTED": 0, - "REJECTED": 1, - "CANCELLED": 2, - "ACCEPTEDELSEWHERE": 3, - "MISSED": 4, - "INVALID": 5, - "UNAVAILABLE": 6, - "UPCOMING": 7, - "FAILED": 8, - "ABANDONED": 9, - "ONGOING": 10, - } -) - -func (x CallLogRecord_CallResult) Enum() *CallLogRecord_CallResult { - p := new(CallLogRecord_CallResult) - *p = x - return p -} - -func (x CallLogRecord_CallResult) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (CallLogRecord_CallResult) Descriptor() protoreflect.EnumDescriptor { - return file_waSyncAction_WASyncAction_proto_enumTypes[2].Descriptor() -} - -func (CallLogRecord_CallResult) Type() protoreflect.EnumType { - return &file_waSyncAction_WASyncAction_proto_enumTypes[2] -} - -func (x CallLogRecord_CallResult) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Do not use. -func (x *CallLogRecord_CallResult) UnmarshalJSON(b []byte) error { - num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) - if err != nil { - return err - } - *x = CallLogRecord_CallResult(num) - return nil -} - -// Deprecated: Use CallLogRecord_CallResult.Descriptor instead. -func (CallLogRecord_CallResult) EnumDescriptor() ([]byte, []int) { - return file_waSyncAction_WASyncAction_proto_rawDescGZIP(), []int{0, 2} -} - -type WaffleAccountLinkStateAction_AccountLinkState int32 - -const ( - WaffleAccountLinkStateAction_ACTIVE WaffleAccountLinkStateAction_AccountLinkState = 0 -) - -// Enum value maps for WaffleAccountLinkStateAction_AccountLinkState. -var ( - WaffleAccountLinkStateAction_AccountLinkState_name = map[int32]string{ - 0: "ACTIVE", - } - WaffleAccountLinkStateAction_AccountLinkState_value = map[string]int32{ - "ACTIVE": 0, - } -) - -func (x WaffleAccountLinkStateAction_AccountLinkState) Enum() *WaffleAccountLinkStateAction_AccountLinkState { - p := new(WaffleAccountLinkStateAction_AccountLinkState) - *p = x - return p -} - -func (x WaffleAccountLinkStateAction_AccountLinkState) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (WaffleAccountLinkStateAction_AccountLinkState) Descriptor() protoreflect.EnumDescriptor { - return file_waSyncAction_WASyncAction_proto_enumTypes[3].Descriptor() -} - -func (WaffleAccountLinkStateAction_AccountLinkState) Type() protoreflect.EnumType { - return &file_waSyncAction_WASyncAction_proto_enumTypes[3] -} - -func (x WaffleAccountLinkStateAction_AccountLinkState) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Do not use. -func (x *WaffleAccountLinkStateAction_AccountLinkState) UnmarshalJSON(b []byte) error { - num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) - if err != nil { - return err - } - *x = WaffleAccountLinkStateAction_AccountLinkState(num) - return nil -} - -// Deprecated: Use WaffleAccountLinkStateAction_AccountLinkState.Descriptor instead. -func (WaffleAccountLinkStateAction_AccountLinkState) EnumDescriptor() ([]byte, []int) { - return file_waSyncAction_WASyncAction_proto_rawDescGZIP(), []int{1, 0} -} - -type MerchantPaymentPartnerAction_Status int32 - -const ( - MerchantPaymentPartnerAction_ACTIVE MerchantPaymentPartnerAction_Status = 0 - MerchantPaymentPartnerAction_INACTIVE MerchantPaymentPartnerAction_Status = 1 -) - -// Enum value maps for MerchantPaymentPartnerAction_Status. -var ( - MerchantPaymentPartnerAction_Status_name = map[int32]string{ - 0: "ACTIVE", - 1: "INACTIVE", - } - MerchantPaymentPartnerAction_Status_value = map[string]int32{ - "ACTIVE": 0, - "INACTIVE": 1, - } -) - -func (x MerchantPaymentPartnerAction_Status) Enum() *MerchantPaymentPartnerAction_Status { - p := new(MerchantPaymentPartnerAction_Status) - *p = x - return p -} - -func (x MerchantPaymentPartnerAction_Status) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (MerchantPaymentPartnerAction_Status) Descriptor() protoreflect.EnumDescriptor { - return file_waSyncAction_WASyncAction_proto_enumTypes[4].Descriptor() -} - -func (MerchantPaymentPartnerAction_Status) Type() protoreflect.EnumType { - return &file_waSyncAction_WASyncAction_proto_enumTypes[4] -} - -func (x MerchantPaymentPartnerAction_Status) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Do not use. -func (x *MerchantPaymentPartnerAction_Status) UnmarshalJSON(b []byte) error { - num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) - if err != nil { - return err - } - *x = MerchantPaymentPartnerAction_Status(num) - return nil -} - -// Deprecated: Use MerchantPaymentPartnerAction_Status.Descriptor instead. -func (MerchantPaymentPartnerAction_Status) EnumDescriptor() ([]byte, []int) { - return file_waSyncAction_WASyncAction_proto_rawDescGZIP(), []int{2, 0} -} - -type NoteEditAction_NoteType int32 - -const ( - NoteEditAction_UNSTRUCTURED NoteEditAction_NoteType = 1 - NoteEditAction_STRUCTURED NoteEditAction_NoteType = 2 -) - -// Enum value maps for NoteEditAction_NoteType. -var ( - NoteEditAction_NoteType_name = map[int32]string{ - 1: "UNSTRUCTURED", - 2: "STRUCTURED", - } - NoteEditAction_NoteType_value = map[string]int32{ - "UNSTRUCTURED": 1, - "STRUCTURED": 2, - } -) - -func (x NoteEditAction_NoteType) Enum() *NoteEditAction_NoteType { - p := new(NoteEditAction_NoteType) - *p = x - return p -} - -func (x NoteEditAction_NoteType) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (NoteEditAction_NoteType) Descriptor() protoreflect.EnumDescriptor { - return file_waSyncAction_WASyncAction_proto_enumTypes[5].Descriptor() -} - -func (NoteEditAction_NoteType) Type() protoreflect.EnumType { - return &file_waSyncAction_WASyncAction_proto_enumTypes[5] -} - -func (x NoteEditAction_NoteType) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Do not use. -func (x *NoteEditAction_NoteType) UnmarshalJSON(b []byte) error { - num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) - if err != nil { - return err - } - *x = NoteEditAction_NoteType(num) - return nil -} - -// Deprecated: Use NoteEditAction_NoteType.Descriptor instead. -func (NoteEditAction_NoteType) EnumDescriptor() ([]byte, []int) { - return file_waSyncAction_WASyncAction_proto_rawDescGZIP(), []int{3, 0} -} - -type StatusPrivacyAction_StatusDistributionMode int32 - -const ( - StatusPrivacyAction_ALLOW_LIST StatusPrivacyAction_StatusDistributionMode = 0 - StatusPrivacyAction_DENY_LIST StatusPrivacyAction_StatusDistributionMode = 1 - StatusPrivacyAction_CONTACTS StatusPrivacyAction_StatusDistributionMode = 2 -) - -// Enum value maps for StatusPrivacyAction_StatusDistributionMode. -var ( - StatusPrivacyAction_StatusDistributionMode_name = map[int32]string{ - 0: "ALLOW_LIST", - 1: "DENY_LIST", - 2: "CONTACTS", - } - StatusPrivacyAction_StatusDistributionMode_value = map[string]int32{ - "ALLOW_LIST": 0, - "DENY_LIST": 1, - "CONTACTS": 2, - } -) - -func (x StatusPrivacyAction_StatusDistributionMode) Enum() *StatusPrivacyAction_StatusDistributionMode { - p := new(StatusPrivacyAction_StatusDistributionMode) - *p = x - return p -} - -func (x StatusPrivacyAction_StatusDistributionMode) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (StatusPrivacyAction_StatusDistributionMode) Descriptor() protoreflect.EnumDescriptor { - return file_waSyncAction_WASyncAction_proto_enumTypes[6].Descriptor() -} - -func (StatusPrivacyAction_StatusDistributionMode) Type() protoreflect.EnumType { - return &file_waSyncAction_WASyncAction_proto_enumTypes[6] -} - -func (x StatusPrivacyAction_StatusDistributionMode) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Do not use. -func (x *StatusPrivacyAction_StatusDistributionMode) UnmarshalJSON(b []byte) error { - num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) - if err != nil { - return err - } - *x = StatusPrivacyAction_StatusDistributionMode(num) - return nil -} - -// Deprecated: Use StatusPrivacyAction_StatusDistributionMode.Descriptor instead. -func (StatusPrivacyAction_StatusDistributionMode) EnumDescriptor() ([]byte, []int) { - return file_waSyncAction_WASyncAction_proto_rawDescGZIP(), []int{4, 0} -} - -type MarketingMessageAction_MarketingMessagePrototypeType int32 - -const ( - MarketingMessageAction_PERSONALIZED MarketingMessageAction_MarketingMessagePrototypeType = 0 -) - -// Enum value maps for MarketingMessageAction_MarketingMessagePrototypeType. -var ( - MarketingMessageAction_MarketingMessagePrototypeType_name = map[int32]string{ - 0: "PERSONALIZED", - } - MarketingMessageAction_MarketingMessagePrototypeType_value = map[string]int32{ - "PERSONALIZED": 0, - } -) - -func (x MarketingMessageAction_MarketingMessagePrototypeType) Enum() *MarketingMessageAction_MarketingMessagePrototypeType { - p := new(MarketingMessageAction_MarketingMessagePrototypeType) - *p = x - return p -} - -func (x MarketingMessageAction_MarketingMessagePrototypeType) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (MarketingMessageAction_MarketingMessagePrototypeType) Descriptor() protoreflect.EnumDescriptor { - return file_waSyncAction_WASyncAction_proto_enumTypes[7].Descriptor() -} - -func (MarketingMessageAction_MarketingMessagePrototypeType) Type() protoreflect.EnumType { - return &file_waSyncAction_WASyncAction_proto_enumTypes[7] -} - -func (x MarketingMessageAction_MarketingMessagePrototypeType) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Do not use. -func (x *MarketingMessageAction_MarketingMessagePrototypeType) UnmarshalJSON(b []byte) error { - num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) - if err != nil { - return err - } - *x = MarketingMessageAction_MarketingMessagePrototypeType(num) - return nil -} - -// Deprecated: Use MarketingMessageAction_MarketingMessagePrototypeType.Descriptor instead. -func (MarketingMessageAction_MarketingMessagePrototypeType) EnumDescriptor() ([]byte, []int) { - return file_waSyncAction_WASyncAction_proto_rawDescGZIP(), []int{5, 0} -} - -type PatchDebugData_Platform int32 - -const ( - PatchDebugData_ANDROID PatchDebugData_Platform = 0 - PatchDebugData_SMBA PatchDebugData_Platform = 1 - PatchDebugData_IPHONE PatchDebugData_Platform = 2 - PatchDebugData_SMBI PatchDebugData_Platform = 3 - PatchDebugData_WEB PatchDebugData_Platform = 4 - PatchDebugData_UWP PatchDebugData_Platform = 5 - PatchDebugData_DARWIN PatchDebugData_Platform = 6 -) - -// Enum value maps for PatchDebugData_Platform. -var ( - PatchDebugData_Platform_name = map[int32]string{ - 0: "ANDROID", - 1: "SMBA", - 2: "IPHONE", - 3: "SMBI", - 4: "WEB", - 5: "UWP", - 6: "DARWIN", - } - PatchDebugData_Platform_value = map[string]int32{ - "ANDROID": 0, - "SMBA": 1, - "IPHONE": 2, - "SMBI": 3, - "WEB": 4, - "UWP": 5, - "DARWIN": 6, - } -) - -func (x PatchDebugData_Platform) Enum() *PatchDebugData_Platform { - p := new(PatchDebugData_Platform) - *p = x - return p -} - -func (x PatchDebugData_Platform) String() string { - return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) -} - -func (PatchDebugData_Platform) Descriptor() protoreflect.EnumDescriptor { - return file_waSyncAction_WASyncAction_proto_enumTypes[8].Descriptor() -} - -func (PatchDebugData_Platform) Type() protoreflect.EnumType { - return &file_waSyncAction_WASyncAction_proto_enumTypes[8] -} - -func (x PatchDebugData_Platform) Number() protoreflect.EnumNumber { - return protoreflect.EnumNumber(x) -} - -// Deprecated: Do not use. -func (x *PatchDebugData_Platform) UnmarshalJSON(b []byte) error { - num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) - if err != nil { - return err - } - *x = PatchDebugData_Platform(num) - return nil -} - -// Deprecated: Use PatchDebugData_Platform.Descriptor instead. -func (PatchDebugData_Platform) EnumDescriptor() ([]byte, []int) { - return file_waSyncAction_WASyncAction_proto_rawDescGZIP(), []int{6, 0} -} - -type CallLogRecord struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - CallResult *CallLogRecord_CallResult `protobuf:"varint,1,opt,name=callResult,enum=WASyncAction.CallLogRecord_CallResult" json:"callResult,omitempty"` - IsDndMode *bool `protobuf:"varint,2,opt,name=isDndMode" json:"isDndMode,omitempty"` - SilenceReason *CallLogRecord_SilenceReason `protobuf:"varint,3,opt,name=silenceReason,enum=WASyncAction.CallLogRecord_SilenceReason" json:"silenceReason,omitempty"` - Duration *int64 `protobuf:"varint,4,opt,name=duration" json:"duration,omitempty"` - StartTime *int64 `protobuf:"varint,5,opt,name=startTime" json:"startTime,omitempty"` - IsIncoming *bool `protobuf:"varint,6,opt,name=isIncoming" json:"isIncoming,omitempty"` - IsVideo *bool `protobuf:"varint,7,opt,name=isVideo" json:"isVideo,omitempty"` - IsCallLink *bool `protobuf:"varint,8,opt,name=isCallLink" json:"isCallLink,omitempty"` - CallLinkToken *string `protobuf:"bytes,9,opt,name=callLinkToken" json:"callLinkToken,omitempty"` - ScheduledCallID *string `protobuf:"bytes,10,opt,name=scheduledCallID" json:"scheduledCallID,omitempty"` - CallID *string `protobuf:"bytes,11,opt,name=callID" json:"callID,omitempty"` - CallCreatorJID *string `protobuf:"bytes,12,opt,name=callCreatorJID" json:"callCreatorJID,omitempty"` - GroupJID *string `protobuf:"bytes,13,opt,name=groupJID" json:"groupJID,omitempty"` - Participants []*CallLogRecord_ParticipantInfo `protobuf:"bytes,14,rep,name=participants" json:"participants,omitempty"` - CallType *CallLogRecord_CallType `protobuf:"varint,15,opt,name=callType,enum=WASyncAction.CallLogRecord_CallType" json:"callType,omitempty"` -} - -func (x *CallLogRecord) Reset() { - *x = CallLogRecord{} - if protoimpl.UnsafeEnabled { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CallLogRecord) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CallLogRecord) ProtoMessage() {} - -func (x *CallLogRecord) ProtoReflect() protoreflect.Message { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use CallLogRecord.ProtoReflect.Descriptor instead. -func (*CallLogRecord) Descriptor() ([]byte, []int) { - return file_waSyncAction_WASyncAction_proto_rawDescGZIP(), []int{0} -} - -func (x *CallLogRecord) GetCallResult() CallLogRecord_CallResult { - if x != nil && x.CallResult != nil { - return *x.CallResult - } - return CallLogRecord_CONNECTED -} - -func (x *CallLogRecord) GetIsDndMode() bool { - if x != nil && x.IsDndMode != nil { - return *x.IsDndMode - } - return false -} - -func (x *CallLogRecord) GetSilenceReason() CallLogRecord_SilenceReason { - if x != nil && x.SilenceReason != nil { - return *x.SilenceReason - } - return CallLogRecord_NONE -} - -func (x *CallLogRecord) GetDuration() int64 { - if x != nil && x.Duration != nil { - return *x.Duration - } - return 0 -} - -func (x *CallLogRecord) GetStartTime() int64 { - if x != nil && x.StartTime != nil { - return *x.StartTime - } - return 0 -} - -func (x *CallLogRecord) GetIsIncoming() bool { - if x != nil && x.IsIncoming != nil { - return *x.IsIncoming - } - return false -} - -func (x *CallLogRecord) GetIsVideo() bool { - if x != nil && x.IsVideo != nil { - return *x.IsVideo - } - return false -} - -func (x *CallLogRecord) GetIsCallLink() bool { - if x != nil && x.IsCallLink != nil { - return *x.IsCallLink - } - return false -} - -func (x *CallLogRecord) GetCallLinkToken() string { - if x != nil && x.CallLinkToken != nil { - return *x.CallLinkToken - } - return "" -} - -func (x *CallLogRecord) GetScheduledCallID() string { - if x != nil && x.ScheduledCallID != nil { - return *x.ScheduledCallID - } - return "" -} - -func (x *CallLogRecord) GetCallID() string { - if x != nil && x.CallID != nil { - return *x.CallID - } - return "" -} - -func (x *CallLogRecord) GetCallCreatorJID() string { - if x != nil && x.CallCreatorJID != nil { - return *x.CallCreatorJID - } - return "" -} - -func (x *CallLogRecord) GetGroupJID() string { - if x != nil && x.GroupJID != nil { - return *x.GroupJID - } - return "" -} - -func (x *CallLogRecord) GetParticipants() []*CallLogRecord_ParticipantInfo { - if x != nil { - return x.Participants - } - return nil -} - -func (x *CallLogRecord) GetCallType() CallLogRecord_CallType { - if x != nil && x.CallType != nil { - return *x.CallType - } - return CallLogRecord_REGULAR -} - -type WaffleAccountLinkStateAction struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - LinkState *WaffleAccountLinkStateAction_AccountLinkState `protobuf:"varint,2,opt,name=linkState,enum=WASyncAction.WaffleAccountLinkStateAction_AccountLinkState" json:"linkState,omitempty"` -} - -func (x *WaffleAccountLinkStateAction) Reset() { - *x = WaffleAccountLinkStateAction{} - if protoimpl.UnsafeEnabled { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *WaffleAccountLinkStateAction) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*WaffleAccountLinkStateAction) ProtoMessage() {} - -func (x *WaffleAccountLinkStateAction) ProtoReflect() protoreflect.Message { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use WaffleAccountLinkStateAction.ProtoReflect.Descriptor instead. -func (*WaffleAccountLinkStateAction) Descriptor() ([]byte, []int) { - return file_waSyncAction_WASyncAction_proto_rawDescGZIP(), []int{1} -} - -func (x *WaffleAccountLinkStateAction) GetLinkState() WaffleAccountLinkStateAction_AccountLinkState { - if x != nil && x.LinkState != nil { - return *x.LinkState - } - return WaffleAccountLinkStateAction_ACTIVE -} - -type MerchantPaymentPartnerAction struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Status *MerchantPaymentPartnerAction_Status `protobuf:"varint,1,req,name=status,enum=WASyncAction.MerchantPaymentPartnerAction_Status" json:"status,omitempty"` - Country *string `protobuf:"bytes,2,req,name=country" json:"country,omitempty"` - GatewayName *string `protobuf:"bytes,3,opt,name=gatewayName" json:"gatewayName,omitempty"` - CredentialID *string `protobuf:"bytes,4,opt,name=credentialID" json:"credentialID,omitempty"` -} - -func (x *MerchantPaymentPartnerAction) Reset() { - *x = MerchantPaymentPartnerAction{} - if protoimpl.UnsafeEnabled { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *MerchantPaymentPartnerAction) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*MerchantPaymentPartnerAction) ProtoMessage() {} - -func (x *MerchantPaymentPartnerAction) ProtoReflect() protoreflect.Message { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use MerchantPaymentPartnerAction.ProtoReflect.Descriptor instead. -func (*MerchantPaymentPartnerAction) Descriptor() ([]byte, []int) { - return file_waSyncAction_WASyncAction_proto_rawDescGZIP(), []int{2} -} - -func (x *MerchantPaymentPartnerAction) GetStatus() MerchantPaymentPartnerAction_Status { - if x != nil && x.Status != nil { - return *x.Status - } - return MerchantPaymentPartnerAction_ACTIVE -} - -func (x *MerchantPaymentPartnerAction) GetCountry() string { - if x != nil && x.Country != nil { - return *x.Country - } - return "" -} - -func (x *MerchantPaymentPartnerAction) GetGatewayName() string { - if x != nil && x.GatewayName != nil { - return *x.GatewayName - } - return "" -} - -func (x *MerchantPaymentPartnerAction) GetCredentialID() string { - if x != nil && x.CredentialID != nil { - return *x.CredentialID - } - return "" -} - -type NoteEditAction struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Type *NoteEditAction_NoteType `protobuf:"varint,1,opt,name=type,enum=WASyncAction.NoteEditAction_NoteType" json:"type,omitempty"` - ChatJID *string `protobuf:"bytes,2,opt,name=chatJID" json:"chatJID,omitempty"` - CreatedAt *int64 `protobuf:"varint,3,opt,name=createdAt" json:"createdAt,omitempty"` - Deleted *bool `protobuf:"varint,4,opt,name=deleted" json:"deleted,omitempty"` - UnstructuredContent *string `protobuf:"bytes,5,opt,name=unstructuredContent" json:"unstructuredContent,omitempty"` -} - -func (x *NoteEditAction) Reset() { - *x = NoteEditAction{} - if protoimpl.UnsafeEnabled { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *NoteEditAction) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*NoteEditAction) ProtoMessage() {} - -func (x *NoteEditAction) ProtoReflect() protoreflect.Message { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use NoteEditAction.ProtoReflect.Descriptor instead. -func (*NoteEditAction) Descriptor() ([]byte, []int) { - return file_waSyncAction_WASyncAction_proto_rawDescGZIP(), []int{3} -} - -func (x *NoteEditAction) GetType() NoteEditAction_NoteType { - if x != nil && x.Type != nil { - return *x.Type - } - return NoteEditAction_UNSTRUCTURED -} - -func (x *NoteEditAction) GetChatJID() string { - if x != nil && x.ChatJID != nil { - return *x.ChatJID - } - return "" -} - -func (x *NoteEditAction) GetCreatedAt() int64 { - if x != nil && x.CreatedAt != nil { - return *x.CreatedAt - } - return 0 -} - -func (x *NoteEditAction) GetDeleted() bool { - if x != nil && x.Deleted != nil { - return *x.Deleted - } - return false -} - -func (x *NoteEditAction) GetUnstructuredContent() string { - if x != nil && x.UnstructuredContent != nil { - return *x.UnstructuredContent - } - return "" -} - -type StatusPrivacyAction struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Mode *StatusPrivacyAction_StatusDistributionMode `protobuf:"varint,1,opt,name=mode,enum=WASyncAction.StatusPrivacyAction_StatusDistributionMode" json:"mode,omitempty"` - UserJID []string `protobuf:"bytes,2,rep,name=userJID" json:"userJID,omitempty"` -} - -func (x *StatusPrivacyAction) Reset() { - *x = StatusPrivacyAction{} - if protoimpl.UnsafeEnabled { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *StatusPrivacyAction) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*StatusPrivacyAction) ProtoMessage() {} - -func (x *StatusPrivacyAction) ProtoReflect() protoreflect.Message { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use StatusPrivacyAction.ProtoReflect.Descriptor instead. -func (*StatusPrivacyAction) Descriptor() ([]byte, []int) { - return file_waSyncAction_WASyncAction_proto_rawDescGZIP(), []int{4} -} - -func (x *StatusPrivacyAction) GetMode() StatusPrivacyAction_StatusDistributionMode { - if x != nil && x.Mode != nil { - return *x.Mode - } - return StatusPrivacyAction_ALLOW_LIST -} - -func (x *StatusPrivacyAction) GetUserJID() []string { - if x != nil { - return x.UserJID - } - return nil -} - -type MarketingMessageAction struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` - Message *string `protobuf:"bytes,2,opt,name=message" json:"message,omitempty"` - Type *MarketingMessageAction_MarketingMessagePrototypeType `protobuf:"varint,3,opt,name=type,enum=WASyncAction.MarketingMessageAction_MarketingMessagePrototypeType" json:"type,omitempty"` - CreatedAt *int64 `protobuf:"varint,4,opt,name=createdAt" json:"createdAt,omitempty"` - LastSentAt *int64 `protobuf:"varint,5,opt,name=lastSentAt" json:"lastSentAt,omitempty"` - IsDeleted *bool `protobuf:"varint,6,opt,name=isDeleted" json:"isDeleted,omitempty"` - MediaID *string `protobuf:"bytes,7,opt,name=mediaID" json:"mediaID,omitempty"` -} - -func (x *MarketingMessageAction) Reset() { - *x = MarketingMessageAction{} - if protoimpl.UnsafeEnabled { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *MarketingMessageAction) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*MarketingMessageAction) ProtoMessage() {} - -func (x *MarketingMessageAction) ProtoReflect() protoreflect.Message { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use MarketingMessageAction.ProtoReflect.Descriptor instead. -func (*MarketingMessageAction) Descriptor() ([]byte, []int) { - return file_waSyncAction_WASyncAction_proto_rawDescGZIP(), []int{5} -} - -func (x *MarketingMessageAction) GetName() string { - if x != nil && x.Name != nil { - return *x.Name - } - return "" -} - -func (x *MarketingMessageAction) GetMessage() string { - if x != nil && x.Message != nil { - return *x.Message - } - return "" -} - -func (x *MarketingMessageAction) GetType() MarketingMessageAction_MarketingMessagePrototypeType { - if x != nil && x.Type != nil { - return *x.Type - } - return MarketingMessageAction_PERSONALIZED -} - -func (x *MarketingMessageAction) GetCreatedAt() int64 { - if x != nil && x.CreatedAt != nil { - return *x.CreatedAt - } - return 0 -} - -func (x *MarketingMessageAction) GetLastSentAt() int64 { - if x != nil && x.LastSentAt != nil { - return *x.LastSentAt - } - return 0 -} - -func (x *MarketingMessageAction) GetIsDeleted() bool { - if x != nil && x.IsDeleted != nil { - return *x.IsDeleted - } - return false -} - -func (x *MarketingMessageAction) GetMediaID() string { - if x != nil && x.MediaID != nil { - return *x.MediaID - } - return "" -} - -type PatchDebugData struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - CurrentLthash []byte `protobuf:"bytes,1,opt,name=currentLthash" json:"currentLthash,omitempty"` - NewLthash []byte `protobuf:"bytes,2,opt,name=newLthash" json:"newLthash,omitempty"` - PatchVersion []byte `protobuf:"bytes,3,opt,name=patchVersion" json:"patchVersion,omitempty"` - CollectionName []byte `protobuf:"bytes,4,opt,name=collectionName" json:"collectionName,omitempty"` - FirstFourBytesFromAHashOfSnapshotMACKey []byte `protobuf:"bytes,5,opt,name=firstFourBytesFromAHashOfSnapshotMACKey" json:"firstFourBytesFromAHashOfSnapshotMACKey,omitempty"` - NewLthashSubtract []byte `protobuf:"bytes,6,opt,name=newLthashSubtract" json:"newLthashSubtract,omitempty"` - NumberAdd *int32 `protobuf:"varint,7,opt,name=numberAdd" json:"numberAdd,omitempty"` - NumberRemove *int32 `protobuf:"varint,8,opt,name=numberRemove" json:"numberRemove,omitempty"` - NumberOverride *int32 `protobuf:"varint,9,opt,name=numberOverride" json:"numberOverride,omitempty"` - SenderPlatform *PatchDebugData_Platform `protobuf:"varint,10,opt,name=senderPlatform,enum=WASyncAction.PatchDebugData_Platform" json:"senderPlatform,omitempty"` - IsSenderPrimary *bool `protobuf:"varint,11,opt,name=isSenderPrimary" json:"isSenderPrimary,omitempty"` -} - -func (x *PatchDebugData) Reset() { - *x = PatchDebugData{} - if protoimpl.UnsafeEnabled { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PatchDebugData) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PatchDebugData) ProtoMessage() {} - -func (x *PatchDebugData) ProtoReflect() protoreflect.Message { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[6] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use PatchDebugData.ProtoReflect.Descriptor instead. -func (*PatchDebugData) Descriptor() ([]byte, []int) { - return file_waSyncAction_WASyncAction_proto_rawDescGZIP(), []int{6} -} - -func (x *PatchDebugData) GetCurrentLthash() []byte { - if x != nil { - return x.CurrentLthash - } - return nil -} - -func (x *PatchDebugData) GetNewLthash() []byte { - if x != nil { - return x.NewLthash - } - return nil -} - -func (x *PatchDebugData) GetPatchVersion() []byte { - if x != nil { - return x.PatchVersion - } - return nil -} - -func (x *PatchDebugData) GetCollectionName() []byte { - if x != nil { - return x.CollectionName - } - return nil -} - -func (x *PatchDebugData) GetFirstFourBytesFromAHashOfSnapshotMACKey() []byte { - if x != nil { - return x.FirstFourBytesFromAHashOfSnapshotMACKey - } - return nil -} - -func (x *PatchDebugData) GetNewLthashSubtract() []byte { - if x != nil { - return x.NewLthashSubtract - } - return nil -} - -func (x *PatchDebugData) GetNumberAdd() int32 { - if x != nil && x.NumberAdd != nil { - return *x.NumberAdd - } - return 0 -} - -func (x *PatchDebugData) GetNumberRemove() int32 { - if x != nil && x.NumberRemove != nil { - return *x.NumberRemove - } - return 0 -} - -func (x *PatchDebugData) GetNumberOverride() int32 { - if x != nil && x.NumberOverride != nil { - return *x.NumberOverride - } - return 0 -} - -func (x *PatchDebugData) GetSenderPlatform() PatchDebugData_Platform { - if x != nil && x.SenderPlatform != nil { - return *x.SenderPlatform - } - return PatchDebugData_ANDROID -} - -func (x *PatchDebugData) GetIsSenderPrimary() bool { - if x != nil && x.IsSenderPrimary != nil { - return *x.IsSenderPrimary - } - return false -} - -type RecentEmojiWeight struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Emoji *string `protobuf:"bytes,1,opt,name=emoji" json:"emoji,omitempty"` - Weight *float32 `protobuf:"fixed32,2,opt,name=weight" json:"weight,omitempty"` -} - -func (x *RecentEmojiWeight) Reset() { - *x = RecentEmojiWeight{} - if protoimpl.UnsafeEnabled { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *RecentEmojiWeight) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*RecentEmojiWeight) ProtoMessage() {} - -func (x *RecentEmojiWeight) ProtoReflect() protoreflect.Message { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[7] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use RecentEmojiWeight.ProtoReflect.Descriptor instead. -func (*RecentEmojiWeight) Descriptor() ([]byte, []int) { - return file_waSyncAction_WASyncAction_proto_rawDescGZIP(), []int{7} -} - -func (x *RecentEmojiWeight) GetEmoji() string { - if x != nil && x.Emoji != nil { - return *x.Emoji - } - return "" -} - -func (x *RecentEmojiWeight) GetWeight() float32 { - if x != nil && x.Weight != nil { - return *x.Weight - } - return 0 -} - -type SyncActionValue struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Timestamp *int64 `protobuf:"varint,1,opt,name=timestamp" json:"timestamp,omitempty"` - StarAction *StarAction `protobuf:"bytes,2,opt,name=starAction" json:"starAction,omitempty"` - ContactAction *ContactAction `protobuf:"bytes,3,opt,name=contactAction" json:"contactAction,omitempty"` - MuteAction *MuteAction `protobuf:"bytes,4,opt,name=muteAction" json:"muteAction,omitempty"` - PinAction *PinAction `protobuf:"bytes,5,opt,name=pinAction" json:"pinAction,omitempty"` - SecurityNotificationSetting *SecurityNotificationSetting `protobuf:"bytes,6,opt,name=securityNotificationSetting" json:"securityNotificationSetting,omitempty"` - PushNameSetting *PushNameSetting `protobuf:"bytes,7,opt,name=pushNameSetting" json:"pushNameSetting,omitempty"` - QuickReplyAction *QuickReplyAction `protobuf:"bytes,8,opt,name=quickReplyAction" json:"quickReplyAction,omitempty"` - RecentEmojiWeightsAction *RecentEmojiWeightsAction `protobuf:"bytes,11,opt,name=recentEmojiWeightsAction" json:"recentEmojiWeightsAction,omitempty"` - LabelEditAction *LabelEditAction `protobuf:"bytes,14,opt,name=labelEditAction" json:"labelEditAction,omitempty"` - LabelAssociationAction *LabelAssociationAction `protobuf:"bytes,15,opt,name=labelAssociationAction" json:"labelAssociationAction,omitempty"` - LocaleSetting *LocaleSetting `protobuf:"bytes,16,opt,name=localeSetting" json:"localeSetting,omitempty"` - ArchiveChatAction *ArchiveChatAction `protobuf:"bytes,17,opt,name=archiveChatAction" json:"archiveChatAction,omitempty"` - DeleteMessageForMeAction *DeleteMessageForMeAction `protobuf:"bytes,18,opt,name=deleteMessageForMeAction" json:"deleteMessageForMeAction,omitempty"` - KeyExpiration *KeyExpiration `protobuf:"bytes,19,opt,name=keyExpiration" json:"keyExpiration,omitempty"` - MarkChatAsReadAction *MarkChatAsReadAction `protobuf:"bytes,20,opt,name=markChatAsReadAction" json:"markChatAsReadAction,omitempty"` - ClearChatAction *ClearChatAction `protobuf:"bytes,21,opt,name=clearChatAction" json:"clearChatAction,omitempty"` - DeleteChatAction *DeleteChatAction `protobuf:"bytes,22,opt,name=deleteChatAction" json:"deleteChatAction,omitempty"` - UnarchiveChatsSetting *UnarchiveChatsSetting `protobuf:"bytes,23,opt,name=unarchiveChatsSetting" json:"unarchiveChatsSetting,omitempty"` - PrimaryFeature *PrimaryFeature `protobuf:"bytes,24,opt,name=primaryFeature" json:"primaryFeature,omitempty"` - AndroidUnsupportedActions *AndroidUnsupportedActions `protobuf:"bytes,26,opt,name=androidUnsupportedActions" json:"androidUnsupportedActions,omitempty"` - AgentAction *AgentAction `protobuf:"bytes,27,opt,name=agentAction" json:"agentAction,omitempty"` - SubscriptionAction *SubscriptionAction `protobuf:"bytes,28,opt,name=subscriptionAction" json:"subscriptionAction,omitempty"` - UserStatusMuteAction *UserStatusMuteAction `protobuf:"bytes,29,opt,name=userStatusMuteAction" json:"userStatusMuteAction,omitempty"` - TimeFormatAction *TimeFormatAction `protobuf:"bytes,30,opt,name=timeFormatAction" json:"timeFormatAction,omitempty"` - NuxAction *NuxAction `protobuf:"bytes,31,opt,name=nuxAction" json:"nuxAction,omitempty"` - PrimaryVersionAction *PrimaryVersionAction `protobuf:"bytes,32,opt,name=primaryVersionAction" json:"primaryVersionAction,omitempty"` - StickerAction *StickerAction `protobuf:"bytes,33,opt,name=stickerAction" json:"stickerAction,omitempty"` - RemoveRecentStickerAction *RemoveRecentStickerAction `protobuf:"bytes,34,opt,name=removeRecentStickerAction" json:"removeRecentStickerAction,omitempty"` - ChatAssignment *ChatAssignmentAction `protobuf:"bytes,35,opt,name=chatAssignment" json:"chatAssignment,omitempty"` - ChatAssignmentOpenedStatus *ChatAssignmentOpenedStatusAction `protobuf:"bytes,36,opt,name=chatAssignmentOpenedStatus" json:"chatAssignmentOpenedStatus,omitempty"` - PnForLidChatAction *PnForLidChatAction `protobuf:"bytes,37,opt,name=pnForLidChatAction" json:"pnForLidChatAction,omitempty"` - MarketingMessageAction *MarketingMessageAction `protobuf:"bytes,38,opt,name=marketingMessageAction" json:"marketingMessageAction,omitempty"` - MarketingMessageBroadcastAction *MarketingMessageBroadcastAction `protobuf:"bytes,39,opt,name=marketingMessageBroadcastAction" json:"marketingMessageBroadcastAction,omitempty"` - ExternalWebBetaAction *ExternalWebBetaAction `protobuf:"bytes,40,opt,name=externalWebBetaAction" json:"externalWebBetaAction,omitempty"` - PrivacySettingRelayAllCalls *PrivacySettingRelayAllCalls `protobuf:"bytes,41,opt,name=privacySettingRelayAllCalls" json:"privacySettingRelayAllCalls,omitempty"` - CallLogAction *CallLogAction `protobuf:"bytes,42,opt,name=callLogAction" json:"callLogAction,omitempty"` - StatusPrivacy *StatusPrivacyAction `protobuf:"bytes,44,opt,name=statusPrivacy" json:"statusPrivacy,omitempty"` - BotWelcomeRequestAction *BotWelcomeRequestAction `protobuf:"bytes,45,opt,name=botWelcomeRequestAction" json:"botWelcomeRequestAction,omitempty"` - DeleteIndividualCallLog *DeleteIndividualCallLogAction `protobuf:"bytes,46,opt,name=deleteIndividualCallLog" json:"deleteIndividualCallLog,omitempty"` - LabelReorderingAction *LabelReorderingAction `protobuf:"bytes,47,opt,name=labelReorderingAction" json:"labelReorderingAction,omitempty"` - PaymentInfoAction *PaymentInfoAction `protobuf:"bytes,48,opt,name=paymentInfoAction" json:"paymentInfoAction,omitempty"` - CustomPaymentMethodsAction *CustomPaymentMethodsAction `protobuf:"bytes,49,opt,name=customPaymentMethodsAction" json:"customPaymentMethodsAction,omitempty"` - LockChatAction *LockChatAction `protobuf:"bytes,50,opt,name=lockChatAction" json:"lockChatAction,omitempty"` - ChatLockSettings *waChatLockSettings.ChatLockSettings `protobuf:"bytes,51,opt,name=chatLockSettings" json:"chatLockSettings,omitempty"` - WamoUserIdentifierAction *WamoUserIdentifierAction `protobuf:"bytes,52,opt,name=wamoUserIdentifierAction" json:"wamoUserIdentifierAction,omitempty"` - PrivacySettingDisableLinkPreviewsAction *PrivacySettingDisableLinkPreviewsAction `protobuf:"bytes,53,opt,name=privacySettingDisableLinkPreviewsAction" json:"privacySettingDisableLinkPreviewsAction,omitempty"` - DeviceCapabilities *waDeviceCapabilities.DeviceCapabilities `protobuf:"bytes,54,opt,name=deviceCapabilities" json:"deviceCapabilities,omitempty"` - NoteEditAction *NoteEditAction `protobuf:"bytes,55,opt,name=noteEditAction" json:"noteEditAction,omitempty"` - FavoritesAction *FavoritesAction `protobuf:"bytes,56,opt,name=favoritesAction" json:"favoritesAction,omitempty"` - MerchantPaymentPartnerAction *MerchantPaymentPartnerAction `protobuf:"bytes,57,opt,name=merchantPaymentPartnerAction" json:"merchantPaymentPartnerAction,omitempty"` - WaffleAccountLinkStateAction *WaffleAccountLinkStateAction `protobuf:"bytes,58,opt,name=waffleAccountLinkStateAction" json:"waffleAccountLinkStateAction,omitempty"` -} - -func (x *SyncActionValue) Reset() { - *x = SyncActionValue{} - if protoimpl.UnsafeEnabled { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[8] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SyncActionValue) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SyncActionValue) ProtoMessage() {} - -func (x *SyncActionValue) ProtoReflect() protoreflect.Message { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[8] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SyncActionValue.ProtoReflect.Descriptor instead. -func (*SyncActionValue) Descriptor() ([]byte, []int) { - return file_waSyncAction_WASyncAction_proto_rawDescGZIP(), []int{8} -} - -func (x *SyncActionValue) GetTimestamp() int64 { - if x != nil && x.Timestamp != nil { - return *x.Timestamp - } - return 0 -} - -func (x *SyncActionValue) GetStarAction() *StarAction { - if x != nil { - return x.StarAction - } - return nil -} - -func (x *SyncActionValue) GetContactAction() *ContactAction { - if x != nil { - return x.ContactAction - } - return nil -} - -func (x *SyncActionValue) GetMuteAction() *MuteAction { - if x != nil { - return x.MuteAction - } - return nil -} - -func (x *SyncActionValue) GetPinAction() *PinAction { - if x != nil { - return x.PinAction - } - return nil -} - -func (x *SyncActionValue) GetSecurityNotificationSetting() *SecurityNotificationSetting { - if x != nil { - return x.SecurityNotificationSetting - } - return nil -} - -func (x *SyncActionValue) GetPushNameSetting() *PushNameSetting { - if x != nil { - return x.PushNameSetting - } - return nil -} - -func (x *SyncActionValue) GetQuickReplyAction() *QuickReplyAction { - if x != nil { - return x.QuickReplyAction - } - return nil -} - -func (x *SyncActionValue) GetRecentEmojiWeightsAction() *RecentEmojiWeightsAction { - if x != nil { - return x.RecentEmojiWeightsAction - } - return nil -} - -func (x *SyncActionValue) GetLabelEditAction() *LabelEditAction { - if x != nil { - return x.LabelEditAction - } - return nil -} - -func (x *SyncActionValue) GetLabelAssociationAction() *LabelAssociationAction { - if x != nil { - return x.LabelAssociationAction - } - return nil -} - -func (x *SyncActionValue) GetLocaleSetting() *LocaleSetting { - if x != nil { - return x.LocaleSetting - } - return nil -} - -func (x *SyncActionValue) GetArchiveChatAction() *ArchiveChatAction { - if x != nil { - return x.ArchiveChatAction - } - return nil -} - -func (x *SyncActionValue) GetDeleteMessageForMeAction() *DeleteMessageForMeAction { - if x != nil { - return x.DeleteMessageForMeAction - } - return nil -} - -func (x *SyncActionValue) GetKeyExpiration() *KeyExpiration { - if x != nil { - return x.KeyExpiration - } - return nil -} - -func (x *SyncActionValue) GetMarkChatAsReadAction() *MarkChatAsReadAction { - if x != nil { - return x.MarkChatAsReadAction - } - return nil -} - -func (x *SyncActionValue) GetClearChatAction() *ClearChatAction { - if x != nil { - return x.ClearChatAction - } - return nil -} - -func (x *SyncActionValue) GetDeleteChatAction() *DeleteChatAction { - if x != nil { - return x.DeleteChatAction - } - return nil -} - -func (x *SyncActionValue) GetUnarchiveChatsSetting() *UnarchiveChatsSetting { - if x != nil { - return x.UnarchiveChatsSetting - } - return nil -} - -func (x *SyncActionValue) GetPrimaryFeature() *PrimaryFeature { - if x != nil { - return x.PrimaryFeature - } - return nil -} - -func (x *SyncActionValue) GetAndroidUnsupportedActions() *AndroidUnsupportedActions { - if x != nil { - return x.AndroidUnsupportedActions - } - return nil -} - -func (x *SyncActionValue) GetAgentAction() *AgentAction { - if x != nil { - return x.AgentAction - } - return nil -} - -func (x *SyncActionValue) GetSubscriptionAction() *SubscriptionAction { - if x != nil { - return x.SubscriptionAction - } - return nil -} - -func (x *SyncActionValue) GetUserStatusMuteAction() *UserStatusMuteAction { - if x != nil { - return x.UserStatusMuteAction - } - return nil -} - -func (x *SyncActionValue) GetTimeFormatAction() *TimeFormatAction { - if x != nil { - return x.TimeFormatAction - } - return nil -} - -func (x *SyncActionValue) GetNuxAction() *NuxAction { - if x != nil { - return x.NuxAction - } - return nil -} - -func (x *SyncActionValue) GetPrimaryVersionAction() *PrimaryVersionAction { - if x != nil { - return x.PrimaryVersionAction - } - return nil -} - -func (x *SyncActionValue) GetStickerAction() *StickerAction { - if x != nil { - return x.StickerAction - } - return nil -} - -func (x *SyncActionValue) GetRemoveRecentStickerAction() *RemoveRecentStickerAction { - if x != nil { - return x.RemoveRecentStickerAction - } - return nil -} - -func (x *SyncActionValue) GetChatAssignment() *ChatAssignmentAction { - if x != nil { - return x.ChatAssignment - } - return nil -} - -func (x *SyncActionValue) GetChatAssignmentOpenedStatus() *ChatAssignmentOpenedStatusAction { - if x != nil { - return x.ChatAssignmentOpenedStatus - } - return nil -} - -func (x *SyncActionValue) GetPnForLidChatAction() *PnForLidChatAction { - if x != nil { - return x.PnForLidChatAction - } - return nil -} - -func (x *SyncActionValue) GetMarketingMessageAction() *MarketingMessageAction { - if x != nil { - return x.MarketingMessageAction - } - return nil -} - -func (x *SyncActionValue) GetMarketingMessageBroadcastAction() *MarketingMessageBroadcastAction { - if x != nil { - return x.MarketingMessageBroadcastAction - } - return nil -} - -func (x *SyncActionValue) GetExternalWebBetaAction() *ExternalWebBetaAction { - if x != nil { - return x.ExternalWebBetaAction - } - return nil -} - -func (x *SyncActionValue) GetPrivacySettingRelayAllCalls() *PrivacySettingRelayAllCalls { - if x != nil { - return x.PrivacySettingRelayAllCalls - } - return nil -} - -func (x *SyncActionValue) GetCallLogAction() *CallLogAction { - if x != nil { - return x.CallLogAction - } - return nil -} - -func (x *SyncActionValue) GetStatusPrivacy() *StatusPrivacyAction { - if x != nil { - return x.StatusPrivacy - } - return nil -} - -func (x *SyncActionValue) GetBotWelcomeRequestAction() *BotWelcomeRequestAction { - if x != nil { - return x.BotWelcomeRequestAction - } - return nil -} - -func (x *SyncActionValue) GetDeleteIndividualCallLog() *DeleteIndividualCallLogAction { - if x != nil { - return x.DeleteIndividualCallLog - } - return nil -} - -func (x *SyncActionValue) GetLabelReorderingAction() *LabelReorderingAction { - if x != nil { - return x.LabelReorderingAction - } - return nil -} - -func (x *SyncActionValue) GetPaymentInfoAction() *PaymentInfoAction { - if x != nil { - return x.PaymentInfoAction - } - return nil -} - -func (x *SyncActionValue) GetCustomPaymentMethodsAction() *CustomPaymentMethodsAction { - if x != nil { - return x.CustomPaymentMethodsAction - } - return nil -} - -func (x *SyncActionValue) GetLockChatAction() *LockChatAction { - if x != nil { - return x.LockChatAction - } - return nil -} - -func (x *SyncActionValue) GetChatLockSettings() *waChatLockSettings.ChatLockSettings { - if x != nil { - return x.ChatLockSettings - } - return nil -} - -func (x *SyncActionValue) GetWamoUserIdentifierAction() *WamoUserIdentifierAction { - if x != nil { - return x.WamoUserIdentifierAction - } - return nil -} - -func (x *SyncActionValue) GetPrivacySettingDisableLinkPreviewsAction() *PrivacySettingDisableLinkPreviewsAction { - if x != nil { - return x.PrivacySettingDisableLinkPreviewsAction - } - return nil -} - -func (x *SyncActionValue) GetDeviceCapabilities() *waDeviceCapabilities.DeviceCapabilities { - if x != nil { - return x.DeviceCapabilities - } - return nil -} - -func (x *SyncActionValue) GetNoteEditAction() *NoteEditAction { - if x != nil { - return x.NoteEditAction - } - return nil -} - -func (x *SyncActionValue) GetFavoritesAction() *FavoritesAction { - if x != nil { - return x.FavoritesAction - } - return nil -} - -func (x *SyncActionValue) GetMerchantPaymentPartnerAction() *MerchantPaymentPartnerAction { - if x != nil { - return x.MerchantPaymentPartnerAction - } - return nil -} - -func (x *SyncActionValue) GetWaffleAccountLinkStateAction() *WaffleAccountLinkStateAction { - if x != nil { - return x.WaffleAccountLinkStateAction - } - return nil -} - -type FavoritesAction struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Favorites []*FavoritesAction_Favorite `protobuf:"bytes,1,rep,name=favorites" json:"favorites,omitempty"` -} - -func (x *FavoritesAction) Reset() { - *x = FavoritesAction{} - if protoimpl.UnsafeEnabled { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[9] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *FavoritesAction) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*FavoritesAction) ProtoMessage() {} - -func (x *FavoritesAction) ProtoReflect() protoreflect.Message { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[9] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use FavoritesAction.ProtoReflect.Descriptor instead. -func (*FavoritesAction) Descriptor() ([]byte, []int) { - return file_waSyncAction_WASyncAction_proto_rawDescGZIP(), []int{9} -} - -func (x *FavoritesAction) GetFavorites() []*FavoritesAction_Favorite { - if x != nil { - return x.Favorites - } - return nil -} - -type PrivacySettingDisableLinkPreviewsAction struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - IsPreviewsDisabled *bool `protobuf:"varint,1,opt,name=isPreviewsDisabled" json:"isPreviewsDisabled,omitempty"` -} - -func (x *PrivacySettingDisableLinkPreviewsAction) Reset() { - *x = PrivacySettingDisableLinkPreviewsAction{} - if protoimpl.UnsafeEnabled { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[10] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PrivacySettingDisableLinkPreviewsAction) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PrivacySettingDisableLinkPreviewsAction) ProtoMessage() {} - -func (x *PrivacySettingDisableLinkPreviewsAction) ProtoReflect() protoreflect.Message { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[10] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use PrivacySettingDisableLinkPreviewsAction.ProtoReflect.Descriptor instead. -func (*PrivacySettingDisableLinkPreviewsAction) Descriptor() ([]byte, []int) { - return file_waSyncAction_WASyncAction_proto_rawDescGZIP(), []int{10} -} - -func (x *PrivacySettingDisableLinkPreviewsAction) GetIsPreviewsDisabled() bool { - if x != nil && x.IsPreviewsDisabled != nil { - return *x.IsPreviewsDisabled - } - return false -} - -type WamoUserIdentifierAction struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Identifier *string `protobuf:"bytes,1,opt,name=identifier" json:"identifier,omitempty"` -} - -func (x *WamoUserIdentifierAction) Reset() { - *x = WamoUserIdentifierAction{} - if protoimpl.UnsafeEnabled { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[11] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *WamoUserIdentifierAction) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*WamoUserIdentifierAction) ProtoMessage() {} - -func (x *WamoUserIdentifierAction) ProtoReflect() protoreflect.Message { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[11] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use WamoUserIdentifierAction.ProtoReflect.Descriptor instead. -func (*WamoUserIdentifierAction) Descriptor() ([]byte, []int) { - return file_waSyncAction_WASyncAction_proto_rawDescGZIP(), []int{11} -} - -func (x *WamoUserIdentifierAction) GetIdentifier() string { - if x != nil && x.Identifier != nil { - return *x.Identifier - } - return "" -} - -type LockChatAction struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Locked *bool `protobuf:"varint,1,opt,name=locked" json:"locked,omitempty"` -} - -func (x *LockChatAction) Reset() { - *x = LockChatAction{} - if protoimpl.UnsafeEnabled { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[12] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *LockChatAction) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*LockChatAction) ProtoMessage() {} - -func (x *LockChatAction) ProtoReflect() protoreflect.Message { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[12] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use LockChatAction.ProtoReflect.Descriptor instead. -func (*LockChatAction) Descriptor() ([]byte, []int) { - return file_waSyncAction_WASyncAction_proto_rawDescGZIP(), []int{12} -} - -func (x *LockChatAction) GetLocked() bool { - if x != nil && x.Locked != nil { - return *x.Locked - } - return false -} - -type CustomPaymentMethodsAction struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - CustomPaymentMethods []*CustomPaymentMethod `protobuf:"bytes,1,rep,name=customPaymentMethods" json:"customPaymentMethods,omitempty"` -} - -func (x *CustomPaymentMethodsAction) Reset() { - *x = CustomPaymentMethodsAction{} - if protoimpl.UnsafeEnabled { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[13] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CustomPaymentMethodsAction) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CustomPaymentMethodsAction) ProtoMessage() {} - -func (x *CustomPaymentMethodsAction) ProtoReflect() protoreflect.Message { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[13] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use CustomPaymentMethodsAction.ProtoReflect.Descriptor instead. -func (*CustomPaymentMethodsAction) Descriptor() ([]byte, []int) { - return file_waSyncAction_WASyncAction_proto_rawDescGZIP(), []int{13} -} - -func (x *CustomPaymentMethodsAction) GetCustomPaymentMethods() []*CustomPaymentMethod { - if x != nil { - return x.CustomPaymentMethods - } - return nil -} - -type CustomPaymentMethod struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - CredentialID *string `protobuf:"bytes,1,req,name=credentialID" json:"credentialID,omitempty"` - Country *string `protobuf:"bytes,2,req,name=country" json:"country,omitempty"` - Type *string `protobuf:"bytes,3,req,name=type" json:"type,omitempty"` - Metadata []*CustomPaymentMethodMetadata `protobuf:"bytes,4,rep,name=metadata" json:"metadata,omitempty"` -} - -func (x *CustomPaymentMethod) Reset() { - *x = CustomPaymentMethod{} - if protoimpl.UnsafeEnabled { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[14] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CustomPaymentMethod) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CustomPaymentMethod) ProtoMessage() {} - -func (x *CustomPaymentMethod) ProtoReflect() protoreflect.Message { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[14] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use CustomPaymentMethod.ProtoReflect.Descriptor instead. -func (*CustomPaymentMethod) Descriptor() ([]byte, []int) { - return file_waSyncAction_WASyncAction_proto_rawDescGZIP(), []int{14} -} - -func (x *CustomPaymentMethod) GetCredentialID() string { - if x != nil && x.CredentialID != nil { - return *x.CredentialID - } - return "" -} - -func (x *CustomPaymentMethod) GetCountry() string { - if x != nil && x.Country != nil { - return *x.Country - } - return "" -} - -func (x *CustomPaymentMethod) GetType() string { - if x != nil && x.Type != nil { - return *x.Type - } - return "" -} - -func (x *CustomPaymentMethod) GetMetadata() []*CustomPaymentMethodMetadata { - if x != nil { - return x.Metadata - } - return nil -} - -type CustomPaymentMethodMetadata struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Key *string `protobuf:"bytes,1,req,name=key" json:"key,omitempty"` - Value *string `protobuf:"bytes,2,req,name=value" json:"value,omitempty"` -} - -func (x *CustomPaymentMethodMetadata) Reset() { - *x = CustomPaymentMethodMetadata{} - if protoimpl.UnsafeEnabled { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[15] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CustomPaymentMethodMetadata) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CustomPaymentMethodMetadata) ProtoMessage() {} - -func (x *CustomPaymentMethodMetadata) ProtoReflect() protoreflect.Message { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[15] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use CustomPaymentMethodMetadata.ProtoReflect.Descriptor instead. -func (*CustomPaymentMethodMetadata) Descriptor() ([]byte, []int) { - return file_waSyncAction_WASyncAction_proto_rawDescGZIP(), []int{15} -} - -func (x *CustomPaymentMethodMetadata) GetKey() string { - if x != nil && x.Key != nil { - return *x.Key - } - return "" -} - -func (x *CustomPaymentMethodMetadata) GetValue() string { - if x != nil && x.Value != nil { - return *x.Value - } - return "" -} - -type PaymentInfoAction struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Cpi *string `protobuf:"bytes,1,opt,name=cpi" json:"cpi,omitempty"` -} - -func (x *PaymentInfoAction) Reset() { - *x = PaymentInfoAction{} - if protoimpl.UnsafeEnabled { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[16] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PaymentInfoAction) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PaymentInfoAction) ProtoMessage() {} - -func (x *PaymentInfoAction) ProtoReflect() protoreflect.Message { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[16] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use PaymentInfoAction.ProtoReflect.Descriptor instead. -func (*PaymentInfoAction) Descriptor() ([]byte, []int) { - return file_waSyncAction_WASyncAction_proto_rawDescGZIP(), []int{16} -} - -func (x *PaymentInfoAction) GetCpi() string { - if x != nil && x.Cpi != nil { - return *x.Cpi - } - return "" -} - -type LabelReorderingAction struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - SortedLabelIDs []int32 `protobuf:"varint,1,rep,name=sortedLabelIDs" json:"sortedLabelIDs,omitempty"` -} - -func (x *LabelReorderingAction) Reset() { - *x = LabelReorderingAction{} - if protoimpl.UnsafeEnabled { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[17] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *LabelReorderingAction) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*LabelReorderingAction) ProtoMessage() {} - -func (x *LabelReorderingAction) ProtoReflect() protoreflect.Message { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[17] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use LabelReorderingAction.ProtoReflect.Descriptor instead. -func (*LabelReorderingAction) Descriptor() ([]byte, []int) { - return file_waSyncAction_WASyncAction_proto_rawDescGZIP(), []int{17} -} - -func (x *LabelReorderingAction) GetSortedLabelIDs() []int32 { - if x != nil { - return x.SortedLabelIDs - } - return nil -} - -type DeleteIndividualCallLogAction struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - PeerJID *string `protobuf:"bytes,1,opt,name=peerJID" json:"peerJID,omitempty"` - IsIncoming *bool `protobuf:"varint,2,opt,name=isIncoming" json:"isIncoming,omitempty"` -} - -func (x *DeleteIndividualCallLogAction) Reset() { - *x = DeleteIndividualCallLogAction{} - if protoimpl.UnsafeEnabled { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[18] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *DeleteIndividualCallLogAction) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*DeleteIndividualCallLogAction) ProtoMessage() {} - -func (x *DeleteIndividualCallLogAction) ProtoReflect() protoreflect.Message { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[18] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use DeleteIndividualCallLogAction.ProtoReflect.Descriptor instead. -func (*DeleteIndividualCallLogAction) Descriptor() ([]byte, []int) { - return file_waSyncAction_WASyncAction_proto_rawDescGZIP(), []int{18} -} - -func (x *DeleteIndividualCallLogAction) GetPeerJID() string { - if x != nil && x.PeerJID != nil { - return *x.PeerJID - } - return "" -} - -func (x *DeleteIndividualCallLogAction) GetIsIncoming() bool { - if x != nil && x.IsIncoming != nil { - return *x.IsIncoming - } - return false -} - -type BotWelcomeRequestAction struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - IsSent *bool `protobuf:"varint,1,opt,name=isSent" json:"isSent,omitempty"` -} - -func (x *BotWelcomeRequestAction) Reset() { - *x = BotWelcomeRequestAction{} - if protoimpl.UnsafeEnabled { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[19] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *BotWelcomeRequestAction) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*BotWelcomeRequestAction) ProtoMessage() {} - -func (x *BotWelcomeRequestAction) ProtoReflect() protoreflect.Message { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[19] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use BotWelcomeRequestAction.ProtoReflect.Descriptor instead. -func (*BotWelcomeRequestAction) Descriptor() ([]byte, []int) { - return file_waSyncAction_WASyncAction_proto_rawDescGZIP(), []int{19} -} - -func (x *BotWelcomeRequestAction) GetIsSent() bool { - if x != nil && x.IsSent != nil { - return *x.IsSent - } - return false -} - -type CallLogAction struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - CallLogRecord *CallLogRecord `protobuf:"bytes,1,opt,name=callLogRecord" json:"callLogRecord,omitempty"` -} - -func (x *CallLogAction) Reset() { - *x = CallLogAction{} - if protoimpl.UnsafeEnabled { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[20] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CallLogAction) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CallLogAction) ProtoMessage() {} - -func (x *CallLogAction) ProtoReflect() protoreflect.Message { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[20] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use CallLogAction.ProtoReflect.Descriptor instead. -func (*CallLogAction) Descriptor() ([]byte, []int) { - return file_waSyncAction_WASyncAction_proto_rawDescGZIP(), []int{20} -} - -func (x *CallLogAction) GetCallLogRecord() *CallLogRecord { - if x != nil { - return x.CallLogRecord - } - return nil -} - -type PrivacySettingRelayAllCalls struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - IsEnabled *bool `protobuf:"varint,1,opt,name=isEnabled" json:"isEnabled,omitempty"` -} - -func (x *PrivacySettingRelayAllCalls) Reset() { - *x = PrivacySettingRelayAllCalls{} - if protoimpl.UnsafeEnabled { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[21] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PrivacySettingRelayAllCalls) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PrivacySettingRelayAllCalls) ProtoMessage() {} - -func (x *PrivacySettingRelayAllCalls) ProtoReflect() protoreflect.Message { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[21] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use PrivacySettingRelayAllCalls.ProtoReflect.Descriptor instead. -func (*PrivacySettingRelayAllCalls) Descriptor() ([]byte, []int) { - return file_waSyncAction_WASyncAction_proto_rawDescGZIP(), []int{21} -} - -func (x *PrivacySettingRelayAllCalls) GetIsEnabled() bool { - if x != nil && x.IsEnabled != nil { - return *x.IsEnabled - } - return false -} - -type ExternalWebBetaAction struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - IsOptIn *bool `protobuf:"varint,1,opt,name=isOptIn" json:"isOptIn,omitempty"` -} - -func (x *ExternalWebBetaAction) Reset() { - *x = ExternalWebBetaAction{} - if protoimpl.UnsafeEnabled { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[22] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ExternalWebBetaAction) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ExternalWebBetaAction) ProtoMessage() {} - -func (x *ExternalWebBetaAction) ProtoReflect() protoreflect.Message { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[22] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ExternalWebBetaAction.ProtoReflect.Descriptor instead. -func (*ExternalWebBetaAction) Descriptor() ([]byte, []int) { - return file_waSyncAction_WASyncAction_proto_rawDescGZIP(), []int{22} -} - -func (x *ExternalWebBetaAction) GetIsOptIn() bool { - if x != nil && x.IsOptIn != nil { - return *x.IsOptIn - } - return false -} - -type MarketingMessageBroadcastAction struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - RepliedCount *int32 `protobuf:"varint,1,opt,name=repliedCount" json:"repliedCount,omitempty"` -} - -func (x *MarketingMessageBroadcastAction) Reset() { - *x = MarketingMessageBroadcastAction{} - if protoimpl.UnsafeEnabled { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[23] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *MarketingMessageBroadcastAction) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*MarketingMessageBroadcastAction) ProtoMessage() {} - -func (x *MarketingMessageBroadcastAction) ProtoReflect() protoreflect.Message { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[23] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use MarketingMessageBroadcastAction.ProtoReflect.Descriptor instead. -func (*MarketingMessageBroadcastAction) Descriptor() ([]byte, []int) { - return file_waSyncAction_WASyncAction_proto_rawDescGZIP(), []int{23} -} - -func (x *MarketingMessageBroadcastAction) GetRepliedCount() int32 { - if x != nil && x.RepliedCount != nil { - return *x.RepliedCount - } - return 0 -} - -type PnForLidChatAction struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - PnJID *string `protobuf:"bytes,1,opt,name=pnJID" json:"pnJID,omitempty"` -} - -func (x *PnForLidChatAction) Reset() { - *x = PnForLidChatAction{} - if protoimpl.UnsafeEnabled { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[24] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PnForLidChatAction) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PnForLidChatAction) ProtoMessage() {} - -func (x *PnForLidChatAction) ProtoReflect() protoreflect.Message { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[24] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use PnForLidChatAction.ProtoReflect.Descriptor instead. -func (*PnForLidChatAction) Descriptor() ([]byte, []int) { - return file_waSyncAction_WASyncAction_proto_rawDescGZIP(), []int{24} -} - -func (x *PnForLidChatAction) GetPnJID() string { - if x != nil && x.PnJID != nil { - return *x.PnJID - } - return "" -} - -type ChatAssignmentOpenedStatusAction struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - ChatOpened *bool `protobuf:"varint,1,opt,name=chatOpened" json:"chatOpened,omitempty"` -} - -func (x *ChatAssignmentOpenedStatusAction) Reset() { - *x = ChatAssignmentOpenedStatusAction{} - if protoimpl.UnsafeEnabled { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[25] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ChatAssignmentOpenedStatusAction) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ChatAssignmentOpenedStatusAction) ProtoMessage() {} - -func (x *ChatAssignmentOpenedStatusAction) ProtoReflect() protoreflect.Message { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[25] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ChatAssignmentOpenedStatusAction.ProtoReflect.Descriptor instead. -func (*ChatAssignmentOpenedStatusAction) Descriptor() ([]byte, []int) { - return file_waSyncAction_WASyncAction_proto_rawDescGZIP(), []int{25} -} - -func (x *ChatAssignmentOpenedStatusAction) GetChatOpened() bool { - if x != nil && x.ChatOpened != nil { - return *x.ChatOpened - } - return false -} - -type ChatAssignmentAction struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - DeviceAgentID *string `protobuf:"bytes,1,opt,name=deviceAgentID" json:"deviceAgentID,omitempty"` -} - -func (x *ChatAssignmentAction) Reset() { - *x = ChatAssignmentAction{} - if protoimpl.UnsafeEnabled { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[26] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ChatAssignmentAction) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ChatAssignmentAction) ProtoMessage() {} - -func (x *ChatAssignmentAction) ProtoReflect() protoreflect.Message { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[26] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ChatAssignmentAction.ProtoReflect.Descriptor instead. -func (*ChatAssignmentAction) Descriptor() ([]byte, []int) { - return file_waSyncAction_WASyncAction_proto_rawDescGZIP(), []int{26} -} - -func (x *ChatAssignmentAction) GetDeviceAgentID() string { - if x != nil && x.DeviceAgentID != nil { - return *x.DeviceAgentID - } - return "" -} - -type StickerAction struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - URL *string `protobuf:"bytes,1,opt,name=URL" json:"URL,omitempty"` - FileEncSHA256 []byte `protobuf:"bytes,2,opt,name=fileEncSHA256" json:"fileEncSHA256,omitempty"` - MediaKey []byte `protobuf:"bytes,3,opt,name=mediaKey" json:"mediaKey,omitempty"` - Mimetype *string `protobuf:"bytes,4,opt,name=mimetype" json:"mimetype,omitempty"` - Height *uint32 `protobuf:"varint,5,opt,name=height" json:"height,omitempty"` - Width *uint32 `protobuf:"varint,6,opt,name=width" json:"width,omitempty"` - DirectPath *string `protobuf:"bytes,7,opt,name=directPath" json:"directPath,omitempty"` - FileLength *uint64 `protobuf:"varint,8,opt,name=fileLength" json:"fileLength,omitempty"` - IsFavorite *bool `protobuf:"varint,9,opt,name=isFavorite" json:"isFavorite,omitempty"` - DeviceIDHint *uint32 `protobuf:"varint,10,opt,name=deviceIDHint" json:"deviceIDHint,omitempty"` - IsLottie *bool `protobuf:"varint,11,opt,name=isLottie" json:"isLottie,omitempty"` -} - -func (x *StickerAction) Reset() { - *x = StickerAction{} - if protoimpl.UnsafeEnabled { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[27] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *StickerAction) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*StickerAction) ProtoMessage() {} - -func (x *StickerAction) ProtoReflect() protoreflect.Message { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[27] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use StickerAction.ProtoReflect.Descriptor instead. -func (*StickerAction) Descriptor() ([]byte, []int) { - return file_waSyncAction_WASyncAction_proto_rawDescGZIP(), []int{27} -} - -func (x *StickerAction) GetURL() string { - if x != nil && x.URL != nil { - return *x.URL - } - return "" -} - -func (x *StickerAction) GetFileEncSHA256() []byte { - if x != nil { - return x.FileEncSHA256 - } - return nil -} - -func (x *StickerAction) GetMediaKey() []byte { - if x != nil { - return x.MediaKey - } - return nil -} - -func (x *StickerAction) GetMimetype() string { - if x != nil && x.Mimetype != nil { - return *x.Mimetype - } - return "" -} - -func (x *StickerAction) GetHeight() uint32 { - if x != nil && x.Height != nil { - return *x.Height - } - return 0 -} - -func (x *StickerAction) GetWidth() uint32 { - if x != nil && x.Width != nil { - return *x.Width - } - return 0 -} - -func (x *StickerAction) GetDirectPath() string { - if x != nil && x.DirectPath != nil { - return *x.DirectPath - } - return "" -} - -func (x *StickerAction) GetFileLength() uint64 { - if x != nil && x.FileLength != nil { - return *x.FileLength - } - return 0 -} - -func (x *StickerAction) GetIsFavorite() bool { - if x != nil && x.IsFavorite != nil { - return *x.IsFavorite - } - return false -} - -func (x *StickerAction) GetDeviceIDHint() uint32 { - if x != nil && x.DeviceIDHint != nil { - return *x.DeviceIDHint - } - return 0 -} - -func (x *StickerAction) GetIsLottie() bool { - if x != nil && x.IsLottie != nil { - return *x.IsLottie - } - return false -} - -type RemoveRecentStickerAction struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - LastStickerSentTS *int64 `protobuf:"varint,1,opt,name=lastStickerSentTS" json:"lastStickerSentTS,omitempty"` -} - -func (x *RemoveRecentStickerAction) Reset() { - *x = RemoveRecentStickerAction{} - if protoimpl.UnsafeEnabled { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[28] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *RemoveRecentStickerAction) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*RemoveRecentStickerAction) ProtoMessage() {} - -func (x *RemoveRecentStickerAction) ProtoReflect() protoreflect.Message { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[28] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use RemoveRecentStickerAction.ProtoReflect.Descriptor instead. -func (*RemoveRecentStickerAction) Descriptor() ([]byte, []int) { - return file_waSyncAction_WASyncAction_proto_rawDescGZIP(), []int{28} -} - -func (x *RemoveRecentStickerAction) GetLastStickerSentTS() int64 { - if x != nil && x.LastStickerSentTS != nil { - return *x.LastStickerSentTS - } - return 0 -} - -type PrimaryVersionAction struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Version *string `protobuf:"bytes,1,opt,name=version" json:"version,omitempty"` -} - -func (x *PrimaryVersionAction) Reset() { - *x = PrimaryVersionAction{} - if protoimpl.UnsafeEnabled { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[29] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PrimaryVersionAction) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PrimaryVersionAction) ProtoMessage() {} - -func (x *PrimaryVersionAction) ProtoReflect() protoreflect.Message { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[29] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use PrimaryVersionAction.ProtoReflect.Descriptor instead. -func (*PrimaryVersionAction) Descriptor() ([]byte, []int) { - return file_waSyncAction_WASyncAction_proto_rawDescGZIP(), []int{29} -} - -func (x *PrimaryVersionAction) GetVersion() string { - if x != nil && x.Version != nil { - return *x.Version - } - return "" -} - -type NuxAction struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Acknowledged *bool `protobuf:"varint,1,opt,name=acknowledged" json:"acknowledged,omitempty"` -} - -func (x *NuxAction) Reset() { - *x = NuxAction{} - if protoimpl.UnsafeEnabled { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[30] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *NuxAction) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*NuxAction) ProtoMessage() {} - -func (x *NuxAction) ProtoReflect() protoreflect.Message { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[30] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use NuxAction.ProtoReflect.Descriptor instead. -func (*NuxAction) Descriptor() ([]byte, []int) { - return file_waSyncAction_WASyncAction_proto_rawDescGZIP(), []int{30} -} - -func (x *NuxAction) GetAcknowledged() bool { - if x != nil && x.Acknowledged != nil { - return *x.Acknowledged - } - return false -} - -type TimeFormatAction struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - IsTwentyFourHourFormatEnabled *bool `protobuf:"varint,1,opt,name=isTwentyFourHourFormatEnabled" json:"isTwentyFourHourFormatEnabled,omitempty"` -} - -func (x *TimeFormatAction) Reset() { - *x = TimeFormatAction{} - if protoimpl.UnsafeEnabled { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[31] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *TimeFormatAction) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*TimeFormatAction) ProtoMessage() {} - -func (x *TimeFormatAction) ProtoReflect() protoreflect.Message { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[31] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use TimeFormatAction.ProtoReflect.Descriptor instead. -func (*TimeFormatAction) Descriptor() ([]byte, []int) { - return file_waSyncAction_WASyncAction_proto_rawDescGZIP(), []int{31} -} - -func (x *TimeFormatAction) GetIsTwentyFourHourFormatEnabled() bool { - if x != nil && x.IsTwentyFourHourFormatEnabled != nil { - return *x.IsTwentyFourHourFormatEnabled - } - return false -} - -type UserStatusMuteAction struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Muted *bool `protobuf:"varint,1,opt,name=muted" json:"muted,omitempty"` -} - -func (x *UserStatusMuteAction) Reset() { - *x = UserStatusMuteAction{} - if protoimpl.UnsafeEnabled { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[32] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *UserStatusMuteAction) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*UserStatusMuteAction) ProtoMessage() {} - -func (x *UserStatusMuteAction) ProtoReflect() protoreflect.Message { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[32] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use UserStatusMuteAction.ProtoReflect.Descriptor instead. -func (*UserStatusMuteAction) Descriptor() ([]byte, []int) { - return file_waSyncAction_WASyncAction_proto_rawDescGZIP(), []int{32} -} - -func (x *UserStatusMuteAction) GetMuted() bool { - if x != nil && x.Muted != nil { - return *x.Muted - } - return false -} - -type SubscriptionAction struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - IsDeactivated *bool `protobuf:"varint,1,opt,name=isDeactivated" json:"isDeactivated,omitempty"` - IsAutoRenewing *bool `protobuf:"varint,2,opt,name=isAutoRenewing" json:"isAutoRenewing,omitempty"` - ExpirationDate *int64 `protobuf:"varint,3,opt,name=expirationDate" json:"expirationDate,omitempty"` -} - -func (x *SubscriptionAction) Reset() { - *x = SubscriptionAction{} - if protoimpl.UnsafeEnabled { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[33] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SubscriptionAction) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SubscriptionAction) ProtoMessage() {} - -func (x *SubscriptionAction) ProtoReflect() protoreflect.Message { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[33] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SubscriptionAction.ProtoReflect.Descriptor instead. -func (*SubscriptionAction) Descriptor() ([]byte, []int) { - return file_waSyncAction_WASyncAction_proto_rawDescGZIP(), []int{33} -} - -func (x *SubscriptionAction) GetIsDeactivated() bool { - if x != nil && x.IsDeactivated != nil { - return *x.IsDeactivated - } - return false -} - -func (x *SubscriptionAction) GetIsAutoRenewing() bool { - if x != nil && x.IsAutoRenewing != nil { - return *x.IsAutoRenewing - } - return false -} - -func (x *SubscriptionAction) GetExpirationDate() int64 { - if x != nil && x.ExpirationDate != nil { - return *x.ExpirationDate - } - return 0 -} - -type AgentAction struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` - DeviceID *int32 `protobuf:"varint,2,opt,name=deviceID" json:"deviceID,omitempty"` - IsDeleted *bool `protobuf:"varint,3,opt,name=isDeleted" json:"isDeleted,omitempty"` -} - -func (x *AgentAction) Reset() { - *x = AgentAction{} - if protoimpl.UnsafeEnabled { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[34] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *AgentAction) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*AgentAction) ProtoMessage() {} - -func (x *AgentAction) ProtoReflect() protoreflect.Message { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[34] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use AgentAction.ProtoReflect.Descriptor instead. -func (*AgentAction) Descriptor() ([]byte, []int) { - return file_waSyncAction_WASyncAction_proto_rawDescGZIP(), []int{34} -} - -func (x *AgentAction) GetName() string { - if x != nil && x.Name != nil { - return *x.Name - } - return "" -} - -func (x *AgentAction) GetDeviceID() int32 { - if x != nil && x.DeviceID != nil { - return *x.DeviceID - } - return 0 -} - -func (x *AgentAction) GetIsDeleted() bool { - if x != nil && x.IsDeleted != nil { - return *x.IsDeleted - } - return false -} - -type AndroidUnsupportedActions struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Allowed *bool `protobuf:"varint,1,opt,name=allowed" json:"allowed,omitempty"` -} - -func (x *AndroidUnsupportedActions) Reset() { - *x = AndroidUnsupportedActions{} - if protoimpl.UnsafeEnabled { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[35] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *AndroidUnsupportedActions) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*AndroidUnsupportedActions) ProtoMessage() {} - -func (x *AndroidUnsupportedActions) ProtoReflect() protoreflect.Message { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[35] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use AndroidUnsupportedActions.ProtoReflect.Descriptor instead. -func (*AndroidUnsupportedActions) Descriptor() ([]byte, []int) { - return file_waSyncAction_WASyncAction_proto_rawDescGZIP(), []int{35} -} - -func (x *AndroidUnsupportedActions) GetAllowed() bool { - if x != nil && x.Allowed != nil { - return *x.Allowed - } - return false -} - -type PrimaryFeature struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Flags []string `protobuf:"bytes,1,rep,name=flags" json:"flags,omitempty"` -} - -func (x *PrimaryFeature) Reset() { - *x = PrimaryFeature{} - if protoimpl.UnsafeEnabled { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[36] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PrimaryFeature) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PrimaryFeature) ProtoMessage() {} - -func (x *PrimaryFeature) ProtoReflect() protoreflect.Message { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[36] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use PrimaryFeature.ProtoReflect.Descriptor instead. -func (*PrimaryFeature) Descriptor() ([]byte, []int) { - return file_waSyncAction_WASyncAction_proto_rawDescGZIP(), []int{36} -} - -func (x *PrimaryFeature) GetFlags() []string { - if x != nil { - return x.Flags - } - return nil -} - -type KeyExpiration struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - ExpiredKeyEpoch *int32 `protobuf:"varint,1,opt,name=expiredKeyEpoch" json:"expiredKeyEpoch,omitempty"` -} - -func (x *KeyExpiration) Reset() { - *x = KeyExpiration{} - if protoimpl.UnsafeEnabled { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[37] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *KeyExpiration) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*KeyExpiration) ProtoMessage() {} - -func (x *KeyExpiration) ProtoReflect() protoreflect.Message { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[37] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use KeyExpiration.ProtoReflect.Descriptor instead. -func (*KeyExpiration) Descriptor() ([]byte, []int) { - return file_waSyncAction_WASyncAction_proto_rawDescGZIP(), []int{37} -} - -func (x *KeyExpiration) GetExpiredKeyEpoch() int32 { - if x != nil && x.ExpiredKeyEpoch != nil { - return *x.ExpiredKeyEpoch - } - return 0 -} - -type SyncActionMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Key *waCommon.MessageKey `protobuf:"bytes,1,opt,name=key" json:"key,omitempty"` - Timestamp *int64 `protobuf:"varint,2,opt,name=timestamp" json:"timestamp,omitempty"` -} - -func (x *SyncActionMessage) Reset() { - *x = SyncActionMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[38] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SyncActionMessage) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SyncActionMessage) ProtoMessage() {} - -func (x *SyncActionMessage) ProtoReflect() protoreflect.Message { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[38] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SyncActionMessage.ProtoReflect.Descriptor instead. -func (*SyncActionMessage) Descriptor() ([]byte, []int) { - return file_waSyncAction_WASyncAction_proto_rawDescGZIP(), []int{38} -} - -func (x *SyncActionMessage) GetKey() *waCommon.MessageKey { - if x != nil { - return x.Key - } - return nil -} - -func (x *SyncActionMessage) GetTimestamp() int64 { - if x != nil && x.Timestamp != nil { - return *x.Timestamp - } - return 0 -} - -type SyncActionMessageRange struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - LastMessageTimestamp *int64 `protobuf:"varint,1,opt,name=lastMessageTimestamp" json:"lastMessageTimestamp,omitempty"` - LastSystemMessageTimestamp *int64 `protobuf:"varint,2,opt,name=lastSystemMessageTimestamp" json:"lastSystemMessageTimestamp,omitempty"` - Messages []*SyncActionMessage `protobuf:"bytes,3,rep,name=messages" json:"messages,omitempty"` -} - -func (x *SyncActionMessageRange) Reset() { - *x = SyncActionMessageRange{} - if protoimpl.UnsafeEnabled { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[39] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SyncActionMessageRange) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SyncActionMessageRange) ProtoMessage() {} - -func (x *SyncActionMessageRange) ProtoReflect() protoreflect.Message { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[39] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SyncActionMessageRange.ProtoReflect.Descriptor instead. -func (*SyncActionMessageRange) Descriptor() ([]byte, []int) { - return file_waSyncAction_WASyncAction_proto_rawDescGZIP(), []int{39} -} - -func (x *SyncActionMessageRange) GetLastMessageTimestamp() int64 { - if x != nil && x.LastMessageTimestamp != nil { - return *x.LastMessageTimestamp - } - return 0 -} - -func (x *SyncActionMessageRange) GetLastSystemMessageTimestamp() int64 { - if x != nil && x.LastSystemMessageTimestamp != nil { - return *x.LastSystemMessageTimestamp - } - return 0 -} - -func (x *SyncActionMessageRange) GetMessages() []*SyncActionMessage { - if x != nil { - return x.Messages - } - return nil -} - -type UnarchiveChatsSetting struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - UnarchiveChats *bool `protobuf:"varint,1,opt,name=unarchiveChats" json:"unarchiveChats,omitempty"` -} - -func (x *UnarchiveChatsSetting) Reset() { - *x = UnarchiveChatsSetting{} - if protoimpl.UnsafeEnabled { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[40] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *UnarchiveChatsSetting) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*UnarchiveChatsSetting) ProtoMessage() {} - -func (x *UnarchiveChatsSetting) ProtoReflect() protoreflect.Message { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[40] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use UnarchiveChatsSetting.ProtoReflect.Descriptor instead. -func (*UnarchiveChatsSetting) Descriptor() ([]byte, []int) { - return file_waSyncAction_WASyncAction_proto_rawDescGZIP(), []int{40} -} - -func (x *UnarchiveChatsSetting) GetUnarchiveChats() bool { - if x != nil && x.UnarchiveChats != nil { - return *x.UnarchiveChats - } - return false -} - -type DeleteChatAction struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - MessageRange *SyncActionMessageRange `protobuf:"bytes,1,opt,name=messageRange" json:"messageRange,omitempty"` -} - -func (x *DeleteChatAction) Reset() { - *x = DeleteChatAction{} - if protoimpl.UnsafeEnabled { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[41] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *DeleteChatAction) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*DeleteChatAction) ProtoMessage() {} - -func (x *DeleteChatAction) ProtoReflect() protoreflect.Message { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[41] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use DeleteChatAction.ProtoReflect.Descriptor instead. -func (*DeleteChatAction) Descriptor() ([]byte, []int) { - return file_waSyncAction_WASyncAction_proto_rawDescGZIP(), []int{41} -} - -func (x *DeleteChatAction) GetMessageRange() *SyncActionMessageRange { - if x != nil { - return x.MessageRange - } - return nil -} - -type ClearChatAction struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - MessageRange *SyncActionMessageRange `protobuf:"bytes,1,opt,name=messageRange" json:"messageRange,omitempty"` -} - -func (x *ClearChatAction) Reset() { - *x = ClearChatAction{} - if protoimpl.UnsafeEnabled { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[42] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ClearChatAction) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ClearChatAction) ProtoMessage() {} - -func (x *ClearChatAction) ProtoReflect() protoreflect.Message { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[42] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ClearChatAction.ProtoReflect.Descriptor instead. -func (*ClearChatAction) Descriptor() ([]byte, []int) { - return file_waSyncAction_WASyncAction_proto_rawDescGZIP(), []int{42} -} - -func (x *ClearChatAction) GetMessageRange() *SyncActionMessageRange { - if x != nil { - return x.MessageRange - } - return nil -} - -type MarkChatAsReadAction struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Read *bool `protobuf:"varint,1,opt,name=read" json:"read,omitempty"` - MessageRange *SyncActionMessageRange `protobuf:"bytes,2,opt,name=messageRange" json:"messageRange,omitempty"` -} - -func (x *MarkChatAsReadAction) Reset() { - *x = MarkChatAsReadAction{} - if protoimpl.UnsafeEnabled { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[43] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *MarkChatAsReadAction) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*MarkChatAsReadAction) ProtoMessage() {} - -func (x *MarkChatAsReadAction) ProtoReflect() protoreflect.Message { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[43] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use MarkChatAsReadAction.ProtoReflect.Descriptor instead. -func (*MarkChatAsReadAction) Descriptor() ([]byte, []int) { - return file_waSyncAction_WASyncAction_proto_rawDescGZIP(), []int{43} -} - -func (x *MarkChatAsReadAction) GetRead() bool { - if x != nil && x.Read != nil { - return *x.Read - } - return false -} - -func (x *MarkChatAsReadAction) GetMessageRange() *SyncActionMessageRange { - if x != nil { - return x.MessageRange - } - return nil -} - -type DeleteMessageForMeAction struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - DeleteMedia *bool `protobuf:"varint,1,opt,name=deleteMedia" json:"deleteMedia,omitempty"` - MessageTimestamp *int64 `protobuf:"varint,2,opt,name=messageTimestamp" json:"messageTimestamp,omitempty"` -} - -func (x *DeleteMessageForMeAction) Reset() { - *x = DeleteMessageForMeAction{} - if protoimpl.UnsafeEnabled { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[44] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *DeleteMessageForMeAction) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*DeleteMessageForMeAction) ProtoMessage() {} - -func (x *DeleteMessageForMeAction) ProtoReflect() protoreflect.Message { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[44] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use DeleteMessageForMeAction.ProtoReflect.Descriptor instead. -func (*DeleteMessageForMeAction) Descriptor() ([]byte, []int) { - return file_waSyncAction_WASyncAction_proto_rawDescGZIP(), []int{44} -} - -func (x *DeleteMessageForMeAction) GetDeleteMedia() bool { - if x != nil && x.DeleteMedia != nil { - return *x.DeleteMedia - } - return false -} - -func (x *DeleteMessageForMeAction) GetMessageTimestamp() int64 { - if x != nil && x.MessageTimestamp != nil { - return *x.MessageTimestamp - } - return 0 -} - -type ArchiveChatAction struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Archived *bool `protobuf:"varint,1,opt,name=archived" json:"archived,omitempty"` - MessageRange *SyncActionMessageRange `protobuf:"bytes,2,opt,name=messageRange" json:"messageRange,omitempty"` -} - -func (x *ArchiveChatAction) Reset() { - *x = ArchiveChatAction{} - if protoimpl.UnsafeEnabled { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[45] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ArchiveChatAction) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ArchiveChatAction) ProtoMessage() {} - -func (x *ArchiveChatAction) ProtoReflect() protoreflect.Message { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[45] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ArchiveChatAction.ProtoReflect.Descriptor instead. -func (*ArchiveChatAction) Descriptor() ([]byte, []int) { - return file_waSyncAction_WASyncAction_proto_rawDescGZIP(), []int{45} -} - -func (x *ArchiveChatAction) GetArchived() bool { - if x != nil && x.Archived != nil { - return *x.Archived - } - return false -} - -func (x *ArchiveChatAction) GetMessageRange() *SyncActionMessageRange { - if x != nil { - return x.MessageRange - } - return nil -} - -type RecentEmojiWeightsAction struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Weights []*RecentEmojiWeight `protobuf:"bytes,1,rep,name=weights" json:"weights,omitempty"` -} - -func (x *RecentEmojiWeightsAction) Reset() { - *x = RecentEmojiWeightsAction{} - if protoimpl.UnsafeEnabled { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[46] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *RecentEmojiWeightsAction) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*RecentEmojiWeightsAction) ProtoMessage() {} - -func (x *RecentEmojiWeightsAction) ProtoReflect() protoreflect.Message { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[46] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use RecentEmojiWeightsAction.ProtoReflect.Descriptor instead. -func (*RecentEmojiWeightsAction) Descriptor() ([]byte, []int) { - return file_waSyncAction_WASyncAction_proto_rawDescGZIP(), []int{46} -} - -func (x *RecentEmojiWeightsAction) GetWeights() []*RecentEmojiWeight { - if x != nil { - return x.Weights - } - return nil -} - -type LabelEditAction struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` - Color *int32 `protobuf:"varint,2,opt,name=color" json:"color,omitempty"` - PredefinedID *int32 `protobuf:"varint,3,opt,name=predefinedID" json:"predefinedID,omitempty"` - Deleted *bool `protobuf:"varint,4,opt,name=deleted" json:"deleted,omitempty"` - OrderIndex *int32 `protobuf:"varint,5,opt,name=orderIndex" json:"orderIndex,omitempty"` -} - -func (x *LabelEditAction) Reset() { - *x = LabelEditAction{} - if protoimpl.UnsafeEnabled { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[47] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *LabelEditAction) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*LabelEditAction) ProtoMessage() {} - -func (x *LabelEditAction) ProtoReflect() protoreflect.Message { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[47] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use LabelEditAction.ProtoReflect.Descriptor instead. -func (*LabelEditAction) Descriptor() ([]byte, []int) { - return file_waSyncAction_WASyncAction_proto_rawDescGZIP(), []int{47} -} - -func (x *LabelEditAction) GetName() string { - if x != nil && x.Name != nil { - return *x.Name - } - return "" -} - -func (x *LabelEditAction) GetColor() int32 { - if x != nil && x.Color != nil { - return *x.Color - } - return 0 -} - -func (x *LabelEditAction) GetPredefinedID() int32 { - if x != nil && x.PredefinedID != nil { - return *x.PredefinedID - } - return 0 -} - -func (x *LabelEditAction) GetDeleted() bool { - if x != nil && x.Deleted != nil { - return *x.Deleted - } - return false -} - -func (x *LabelEditAction) GetOrderIndex() int32 { - if x != nil && x.OrderIndex != nil { - return *x.OrderIndex - } - return 0 -} - -type LabelAssociationAction struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Labeled *bool `protobuf:"varint,1,opt,name=labeled" json:"labeled,omitempty"` -} - -func (x *LabelAssociationAction) Reset() { - *x = LabelAssociationAction{} - if protoimpl.UnsafeEnabled { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[48] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *LabelAssociationAction) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*LabelAssociationAction) ProtoMessage() {} - -func (x *LabelAssociationAction) ProtoReflect() protoreflect.Message { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[48] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use LabelAssociationAction.ProtoReflect.Descriptor instead. -func (*LabelAssociationAction) Descriptor() ([]byte, []int) { - return file_waSyncAction_WASyncAction_proto_rawDescGZIP(), []int{48} -} - -func (x *LabelAssociationAction) GetLabeled() bool { - if x != nil && x.Labeled != nil { - return *x.Labeled - } - return false -} - -type QuickReplyAction struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Shortcut *string `protobuf:"bytes,1,opt,name=shortcut" json:"shortcut,omitempty"` - Message *string `protobuf:"bytes,2,opt,name=message" json:"message,omitempty"` - Keywords []string `protobuf:"bytes,3,rep,name=keywords" json:"keywords,omitempty"` - Count *int32 `protobuf:"varint,4,opt,name=count" json:"count,omitempty"` - Deleted *bool `protobuf:"varint,5,opt,name=deleted" json:"deleted,omitempty"` -} - -func (x *QuickReplyAction) Reset() { - *x = QuickReplyAction{} - if protoimpl.UnsafeEnabled { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[49] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *QuickReplyAction) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*QuickReplyAction) ProtoMessage() {} - -func (x *QuickReplyAction) ProtoReflect() protoreflect.Message { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[49] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use QuickReplyAction.ProtoReflect.Descriptor instead. -func (*QuickReplyAction) Descriptor() ([]byte, []int) { - return file_waSyncAction_WASyncAction_proto_rawDescGZIP(), []int{49} -} - -func (x *QuickReplyAction) GetShortcut() string { - if x != nil && x.Shortcut != nil { - return *x.Shortcut - } - return "" -} - -func (x *QuickReplyAction) GetMessage() string { - if x != nil && x.Message != nil { - return *x.Message - } - return "" -} - -func (x *QuickReplyAction) GetKeywords() []string { - if x != nil { - return x.Keywords - } - return nil -} - -func (x *QuickReplyAction) GetCount() int32 { - if x != nil && x.Count != nil { - return *x.Count - } - return 0 -} - -func (x *QuickReplyAction) GetDeleted() bool { - if x != nil && x.Deleted != nil { - return *x.Deleted - } - return false -} - -type LocaleSetting struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Locale *string `protobuf:"bytes,1,opt,name=locale" json:"locale,omitempty"` -} - -func (x *LocaleSetting) Reset() { - *x = LocaleSetting{} - if protoimpl.UnsafeEnabled { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[50] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *LocaleSetting) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*LocaleSetting) ProtoMessage() {} - -func (x *LocaleSetting) ProtoReflect() protoreflect.Message { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[50] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use LocaleSetting.ProtoReflect.Descriptor instead. -func (*LocaleSetting) Descriptor() ([]byte, []int) { - return file_waSyncAction_WASyncAction_proto_rawDescGZIP(), []int{50} -} - -func (x *LocaleSetting) GetLocale() string { - if x != nil && x.Locale != nil { - return *x.Locale - } - return "" -} - -type PushNameSetting struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` -} - -func (x *PushNameSetting) Reset() { - *x = PushNameSetting{} - if protoimpl.UnsafeEnabled { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[51] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PushNameSetting) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PushNameSetting) ProtoMessage() {} - -func (x *PushNameSetting) ProtoReflect() protoreflect.Message { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[51] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use PushNameSetting.ProtoReflect.Descriptor instead. -func (*PushNameSetting) Descriptor() ([]byte, []int) { - return file_waSyncAction_WASyncAction_proto_rawDescGZIP(), []int{51} -} - -func (x *PushNameSetting) GetName() string { - if x != nil && x.Name != nil { - return *x.Name - } - return "" -} - -type SecurityNotificationSetting struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - ShowNotification *bool `protobuf:"varint,1,opt,name=showNotification" json:"showNotification,omitempty"` -} - -func (x *SecurityNotificationSetting) Reset() { - *x = SecurityNotificationSetting{} - if protoimpl.UnsafeEnabled { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[52] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SecurityNotificationSetting) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SecurityNotificationSetting) ProtoMessage() {} - -func (x *SecurityNotificationSetting) ProtoReflect() protoreflect.Message { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[52] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SecurityNotificationSetting.ProtoReflect.Descriptor instead. -func (*SecurityNotificationSetting) Descriptor() ([]byte, []int) { - return file_waSyncAction_WASyncAction_proto_rawDescGZIP(), []int{52} -} - -func (x *SecurityNotificationSetting) GetShowNotification() bool { - if x != nil && x.ShowNotification != nil { - return *x.ShowNotification - } - return false -} - -type PinAction struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Pinned *bool `protobuf:"varint,1,opt,name=pinned" json:"pinned,omitempty"` -} - -func (x *PinAction) Reset() { - *x = PinAction{} - if protoimpl.UnsafeEnabled { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[53] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *PinAction) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*PinAction) ProtoMessage() {} - -func (x *PinAction) ProtoReflect() protoreflect.Message { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[53] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use PinAction.ProtoReflect.Descriptor instead. -func (*PinAction) Descriptor() ([]byte, []int) { - return file_waSyncAction_WASyncAction_proto_rawDescGZIP(), []int{53} -} - -func (x *PinAction) GetPinned() bool { - if x != nil && x.Pinned != nil { - return *x.Pinned - } - return false -} - -type MuteAction struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Muted *bool `protobuf:"varint,1,opt,name=muted" json:"muted,omitempty"` - MuteEndTimestamp *int64 `protobuf:"varint,2,opt,name=muteEndTimestamp" json:"muteEndTimestamp,omitempty"` - AutoMuted *bool `protobuf:"varint,3,opt,name=autoMuted" json:"autoMuted,omitempty"` -} - -func (x *MuteAction) Reset() { - *x = MuteAction{} - if protoimpl.UnsafeEnabled { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[54] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *MuteAction) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*MuteAction) ProtoMessage() {} - -func (x *MuteAction) ProtoReflect() protoreflect.Message { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[54] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use MuteAction.ProtoReflect.Descriptor instead. -func (*MuteAction) Descriptor() ([]byte, []int) { - return file_waSyncAction_WASyncAction_proto_rawDescGZIP(), []int{54} -} - -func (x *MuteAction) GetMuted() bool { - if x != nil && x.Muted != nil { - return *x.Muted - } - return false -} - -func (x *MuteAction) GetMuteEndTimestamp() int64 { - if x != nil && x.MuteEndTimestamp != nil { - return *x.MuteEndTimestamp - } - return 0 -} - -func (x *MuteAction) GetAutoMuted() bool { - if x != nil && x.AutoMuted != nil { - return *x.AutoMuted - } - return false -} - -type ContactAction struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - FullName *string `protobuf:"bytes,1,opt,name=fullName" json:"fullName,omitempty"` - FirstName *string `protobuf:"bytes,2,opt,name=firstName" json:"firstName,omitempty"` - LidJID *string `protobuf:"bytes,3,opt,name=lidJID" json:"lidJID,omitempty"` - SaveOnPrimaryAddressbook *bool `protobuf:"varint,4,opt,name=saveOnPrimaryAddressbook" json:"saveOnPrimaryAddressbook,omitempty"` -} - -func (x *ContactAction) Reset() { - *x = ContactAction{} - if protoimpl.UnsafeEnabled { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[55] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *ContactAction) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ContactAction) ProtoMessage() {} - -func (x *ContactAction) ProtoReflect() protoreflect.Message { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[55] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ContactAction.ProtoReflect.Descriptor instead. -func (*ContactAction) Descriptor() ([]byte, []int) { - return file_waSyncAction_WASyncAction_proto_rawDescGZIP(), []int{55} -} - -func (x *ContactAction) GetFullName() string { - if x != nil && x.FullName != nil { - return *x.FullName - } - return "" -} - -func (x *ContactAction) GetFirstName() string { - if x != nil && x.FirstName != nil { - return *x.FirstName - } - return "" -} - -func (x *ContactAction) GetLidJID() string { - if x != nil && x.LidJID != nil { - return *x.LidJID - } - return "" -} - -func (x *ContactAction) GetSaveOnPrimaryAddressbook() bool { - if x != nil && x.SaveOnPrimaryAddressbook != nil { - return *x.SaveOnPrimaryAddressbook - } - return false -} - -type StarAction struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Starred *bool `protobuf:"varint,1,opt,name=starred" json:"starred,omitempty"` -} - -func (x *StarAction) Reset() { - *x = StarAction{} - if protoimpl.UnsafeEnabled { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[56] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *StarAction) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*StarAction) ProtoMessage() {} - -func (x *StarAction) ProtoReflect() protoreflect.Message { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[56] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use StarAction.ProtoReflect.Descriptor instead. -func (*StarAction) Descriptor() ([]byte, []int) { - return file_waSyncAction_WASyncAction_proto_rawDescGZIP(), []int{56} -} - -func (x *StarAction) GetStarred() bool { - if x != nil && x.Starred != nil { - return *x.Starred - } - return false -} - -type SyncActionData struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Index []byte `protobuf:"bytes,1,opt,name=index" json:"index,omitempty"` - Value *SyncActionValue `protobuf:"bytes,2,opt,name=value" json:"value,omitempty"` - Padding []byte `protobuf:"bytes,3,opt,name=padding" json:"padding,omitempty"` - Version *int32 `protobuf:"varint,4,opt,name=version" json:"version,omitempty"` -} - -func (x *SyncActionData) Reset() { - *x = SyncActionData{} - if protoimpl.UnsafeEnabled { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[57] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *SyncActionData) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*SyncActionData) ProtoMessage() {} - -func (x *SyncActionData) ProtoReflect() protoreflect.Message { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[57] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use SyncActionData.ProtoReflect.Descriptor instead. -func (*SyncActionData) Descriptor() ([]byte, []int) { - return file_waSyncAction_WASyncAction_proto_rawDescGZIP(), []int{57} -} - -func (x *SyncActionData) GetIndex() []byte { - if x != nil { - return x.Index - } - return nil -} - -func (x *SyncActionData) GetValue() *SyncActionValue { - if x != nil { - return x.Value - } - return nil -} - -func (x *SyncActionData) GetPadding() []byte { - if x != nil { - return x.Padding - } - return nil -} - -func (x *SyncActionData) GetVersion() int32 { - if x != nil && x.Version != nil { - return *x.Version - } - return 0 -} - -type CallLogRecord_ParticipantInfo struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - UserJID *string `protobuf:"bytes,1,opt,name=userJID" json:"userJID,omitempty"` - CallResult *CallLogRecord_CallResult `protobuf:"varint,2,opt,name=callResult,enum=WASyncAction.CallLogRecord_CallResult" json:"callResult,omitempty"` -} - -func (x *CallLogRecord_ParticipantInfo) Reset() { - *x = CallLogRecord_ParticipantInfo{} - if protoimpl.UnsafeEnabled { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[58] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *CallLogRecord_ParticipantInfo) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*CallLogRecord_ParticipantInfo) ProtoMessage() {} - -func (x *CallLogRecord_ParticipantInfo) ProtoReflect() protoreflect.Message { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[58] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use CallLogRecord_ParticipantInfo.ProtoReflect.Descriptor instead. -func (*CallLogRecord_ParticipantInfo) Descriptor() ([]byte, []int) { - return file_waSyncAction_WASyncAction_proto_rawDescGZIP(), []int{0, 0} -} - -func (x *CallLogRecord_ParticipantInfo) GetUserJID() string { - if x != nil && x.UserJID != nil { - return *x.UserJID - } - return "" -} - -func (x *CallLogRecord_ParticipantInfo) GetCallResult() CallLogRecord_CallResult { - if x != nil && x.CallResult != nil { - return *x.CallResult - } - return CallLogRecord_CONNECTED -} - -type FavoritesAction_Favorite struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - ID *string `protobuf:"bytes,1,opt,name=ID" json:"ID,omitempty"` -} - -func (x *FavoritesAction_Favorite) Reset() { - *x = FavoritesAction_Favorite{} - if protoimpl.UnsafeEnabled { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[59] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } -} - -func (x *FavoritesAction_Favorite) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*FavoritesAction_Favorite) ProtoMessage() {} - -func (x *FavoritesAction_Favorite) ProtoReflect() protoreflect.Message { - mi := &file_waSyncAction_WASyncAction_proto_msgTypes[59] - if protoimpl.UnsafeEnabled && x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use FavoritesAction_Favorite.ProtoReflect.Descriptor instead. -func (*FavoritesAction_Favorite) Descriptor() ([]byte, []int) { - return file_waSyncAction_WASyncAction_proto_rawDescGZIP(), []int{9, 0} -} - -func (x *FavoritesAction_Favorite) GetID() string { - if x != nil && x.ID != nil { - return *x.ID - } - return "" -} - -var File_waSyncAction_WASyncAction_proto protoreflect.FileDescriptor - -//go:embed WASyncAction.pb.raw -var file_waSyncAction_WASyncAction_proto_rawDesc []byte - -var ( - file_waSyncAction_WASyncAction_proto_rawDescOnce sync.Once - file_waSyncAction_WASyncAction_proto_rawDescData = file_waSyncAction_WASyncAction_proto_rawDesc -) - -func file_waSyncAction_WASyncAction_proto_rawDescGZIP() []byte { - file_waSyncAction_WASyncAction_proto_rawDescOnce.Do(func() { - file_waSyncAction_WASyncAction_proto_rawDescData = protoimpl.X.CompressGZIP(file_waSyncAction_WASyncAction_proto_rawDescData) - }) - return file_waSyncAction_WASyncAction_proto_rawDescData -} - -var file_waSyncAction_WASyncAction_proto_enumTypes = make([]protoimpl.EnumInfo, 9) -var file_waSyncAction_WASyncAction_proto_msgTypes = make([]protoimpl.MessageInfo, 60) -var file_waSyncAction_WASyncAction_proto_goTypes = []any{ - (CallLogRecord_CallType)(0), // 0: WASyncAction.CallLogRecord.CallType - (CallLogRecord_SilenceReason)(0), // 1: WASyncAction.CallLogRecord.SilenceReason - (CallLogRecord_CallResult)(0), // 2: WASyncAction.CallLogRecord.CallResult - (WaffleAccountLinkStateAction_AccountLinkState)(0), // 3: WASyncAction.WaffleAccountLinkStateAction.AccountLinkState - (MerchantPaymentPartnerAction_Status)(0), // 4: WASyncAction.MerchantPaymentPartnerAction.Status - (NoteEditAction_NoteType)(0), // 5: WASyncAction.NoteEditAction.NoteType - (StatusPrivacyAction_StatusDistributionMode)(0), // 6: WASyncAction.StatusPrivacyAction.StatusDistributionMode - (MarketingMessageAction_MarketingMessagePrototypeType)(0), // 7: WASyncAction.MarketingMessageAction.MarketingMessagePrototypeType - (PatchDebugData_Platform)(0), // 8: WASyncAction.PatchDebugData.Platform - (*CallLogRecord)(nil), // 9: WASyncAction.CallLogRecord - (*WaffleAccountLinkStateAction)(nil), // 10: WASyncAction.WaffleAccountLinkStateAction - (*MerchantPaymentPartnerAction)(nil), // 11: WASyncAction.MerchantPaymentPartnerAction - (*NoteEditAction)(nil), // 12: WASyncAction.NoteEditAction - (*StatusPrivacyAction)(nil), // 13: WASyncAction.StatusPrivacyAction - (*MarketingMessageAction)(nil), // 14: WASyncAction.MarketingMessageAction - (*PatchDebugData)(nil), // 15: WASyncAction.PatchDebugData - (*RecentEmojiWeight)(nil), // 16: WASyncAction.RecentEmojiWeight - (*SyncActionValue)(nil), // 17: WASyncAction.SyncActionValue - (*FavoritesAction)(nil), // 18: WASyncAction.FavoritesAction - (*PrivacySettingDisableLinkPreviewsAction)(nil), // 19: WASyncAction.PrivacySettingDisableLinkPreviewsAction - (*WamoUserIdentifierAction)(nil), // 20: WASyncAction.WamoUserIdentifierAction - (*LockChatAction)(nil), // 21: WASyncAction.LockChatAction - (*CustomPaymentMethodsAction)(nil), // 22: WASyncAction.CustomPaymentMethodsAction - (*CustomPaymentMethod)(nil), // 23: WASyncAction.CustomPaymentMethod - (*CustomPaymentMethodMetadata)(nil), // 24: WASyncAction.CustomPaymentMethodMetadata - (*PaymentInfoAction)(nil), // 25: WASyncAction.PaymentInfoAction - (*LabelReorderingAction)(nil), // 26: WASyncAction.LabelReorderingAction - (*DeleteIndividualCallLogAction)(nil), // 27: WASyncAction.DeleteIndividualCallLogAction - (*BotWelcomeRequestAction)(nil), // 28: WASyncAction.BotWelcomeRequestAction - (*CallLogAction)(nil), // 29: WASyncAction.CallLogAction - (*PrivacySettingRelayAllCalls)(nil), // 30: WASyncAction.PrivacySettingRelayAllCalls - (*ExternalWebBetaAction)(nil), // 31: WASyncAction.ExternalWebBetaAction - (*MarketingMessageBroadcastAction)(nil), // 32: WASyncAction.MarketingMessageBroadcastAction - (*PnForLidChatAction)(nil), // 33: WASyncAction.PnForLidChatAction - (*ChatAssignmentOpenedStatusAction)(nil), // 34: WASyncAction.ChatAssignmentOpenedStatusAction - (*ChatAssignmentAction)(nil), // 35: WASyncAction.ChatAssignmentAction - (*StickerAction)(nil), // 36: WASyncAction.StickerAction - (*RemoveRecentStickerAction)(nil), // 37: WASyncAction.RemoveRecentStickerAction - (*PrimaryVersionAction)(nil), // 38: WASyncAction.PrimaryVersionAction - (*NuxAction)(nil), // 39: WASyncAction.NuxAction - (*TimeFormatAction)(nil), // 40: WASyncAction.TimeFormatAction - (*UserStatusMuteAction)(nil), // 41: WASyncAction.UserStatusMuteAction - (*SubscriptionAction)(nil), // 42: WASyncAction.SubscriptionAction - (*AgentAction)(nil), // 43: WASyncAction.AgentAction - (*AndroidUnsupportedActions)(nil), // 44: WASyncAction.AndroidUnsupportedActions - (*PrimaryFeature)(nil), // 45: WASyncAction.PrimaryFeature - (*KeyExpiration)(nil), // 46: WASyncAction.KeyExpiration - (*SyncActionMessage)(nil), // 47: WASyncAction.SyncActionMessage - (*SyncActionMessageRange)(nil), // 48: WASyncAction.SyncActionMessageRange - (*UnarchiveChatsSetting)(nil), // 49: WASyncAction.UnarchiveChatsSetting - (*DeleteChatAction)(nil), // 50: WASyncAction.DeleteChatAction - (*ClearChatAction)(nil), // 51: WASyncAction.ClearChatAction - (*MarkChatAsReadAction)(nil), // 52: WASyncAction.MarkChatAsReadAction - (*DeleteMessageForMeAction)(nil), // 53: WASyncAction.DeleteMessageForMeAction - (*ArchiveChatAction)(nil), // 54: WASyncAction.ArchiveChatAction - (*RecentEmojiWeightsAction)(nil), // 55: WASyncAction.RecentEmojiWeightsAction - (*LabelEditAction)(nil), // 56: WASyncAction.LabelEditAction - (*LabelAssociationAction)(nil), // 57: WASyncAction.LabelAssociationAction - (*QuickReplyAction)(nil), // 58: WASyncAction.QuickReplyAction - (*LocaleSetting)(nil), // 59: WASyncAction.LocaleSetting - (*PushNameSetting)(nil), // 60: WASyncAction.PushNameSetting - (*SecurityNotificationSetting)(nil), // 61: WASyncAction.SecurityNotificationSetting - (*PinAction)(nil), // 62: WASyncAction.PinAction - (*MuteAction)(nil), // 63: WASyncAction.MuteAction - (*ContactAction)(nil), // 64: WASyncAction.ContactAction - (*StarAction)(nil), // 65: WASyncAction.StarAction - (*SyncActionData)(nil), // 66: WASyncAction.SyncActionData - (*CallLogRecord_ParticipantInfo)(nil), // 67: WASyncAction.CallLogRecord.ParticipantInfo - (*FavoritesAction_Favorite)(nil), // 68: WASyncAction.FavoritesAction.Favorite - (*waChatLockSettings.ChatLockSettings)(nil), // 69: WAProtobufsChatLockSettings.ChatLockSettings - (*waDeviceCapabilities.DeviceCapabilities)(nil), // 70: WAProtobufsDeviceCapabilities.DeviceCapabilities - (*waCommon.MessageKey)(nil), // 71: WACommon.MessageKey -} -var file_waSyncAction_WASyncAction_proto_depIdxs = []int32{ - 2, // 0: WASyncAction.CallLogRecord.callResult:type_name -> WASyncAction.CallLogRecord.CallResult - 1, // 1: WASyncAction.CallLogRecord.silenceReason:type_name -> WASyncAction.CallLogRecord.SilenceReason - 67, // 2: WASyncAction.CallLogRecord.participants:type_name -> WASyncAction.CallLogRecord.ParticipantInfo - 0, // 3: WASyncAction.CallLogRecord.callType:type_name -> WASyncAction.CallLogRecord.CallType - 3, // 4: WASyncAction.WaffleAccountLinkStateAction.linkState:type_name -> WASyncAction.WaffleAccountLinkStateAction.AccountLinkState - 4, // 5: WASyncAction.MerchantPaymentPartnerAction.status:type_name -> WASyncAction.MerchantPaymentPartnerAction.Status - 5, // 6: WASyncAction.NoteEditAction.type:type_name -> WASyncAction.NoteEditAction.NoteType - 6, // 7: WASyncAction.StatusPrivacyAction.mode:type_name -> WASyncAction.StatusPrivacyAction.StatusDistributionMode - 7, // 8: WASyncAction.MarketingMessageAction.type:type_name -> WASyncAction.MarketingMessageAction.MarketingMessagePrototypeType - 8, // 9: WASyncAction.PatchDebugData.senderPlatform:type_name -> WASyncAction.PatchDebugData.Platform - 65, // 10: WASyncAction.SyncActionValue.starAction:type_name -> WASyncAction.StarAction - 64, // 11: WASyncAction.SyncActionValue.contactAction:type_name -> WASyncAction.ContactAction - 63, // 12: WASyncAction.SyncActionValue.muteAction:type_name -> WASyncAction.MuteAction - 62, // 13: WASyncAction.SyncActionValue.pinAction:type_name -> WASyncAction.PinAction - 61, // 14: WASyncAction.SyncActionValue.securityNotificationSetting:type_name -> WASyncAction.SecurityNotificationSetting - 60, // 15: WASyncAction.SyncActionValue.pushNameSetting:type_name -> WASyncAction.PushNameSetting - 58, // 16: WASyncAction.SyncActionValue.quickReplyAction:type_name -> WASyncAction.QuickReplyAction - 55, // 17: WASyncAction.SyncActionValue.recentEmojiWeightsAction:type_name -> WASyncAction.RecentEmojiWeightsAction - 56, // 18: WASyncAction.SyncActionValue.labelEditAction:type_name -> WASyncAction.LabelEditAction - 57, // 19: WASyncAction.SyncActionValue.labelAssociationAction:type_name -> WASyncAction.LabelAssociationAction - 59, // 20: WASyncAction.SyncActionValue.localeSetting:type_name -> WASyncAction.LocaleSetting - 54, // 21: WASyncAction.SyncActionValue.archiveChatAction:type_name -> WASyncAction.ArchiveChatAction - 53, // 22: WASyncAction.SyncActionValue.deleteMessageForMeAction:type_name -> WASyncAction.DeleteMessageForMeAction - 46, // 23: WASyncAction.SyncActionValue.keyExpiration:type_name -> WASyncAction.KeyExpiration - 52, // 24: WASyncAction.SyncActionValue.markChatAsReadAction:type_name -> WASyncAction.MarkChatAsReadAction - 51, // 25: WASyncAction.SyncActionValue.clearChatAction:type_name -> WASyncAction.ClearChatAction - 50, // 26: WASyncAction.SyncActionValue.deleteChatAction:type_name -> WASyncAction.DeleteChatAction - 49, // 27: WASyncAction.SyncActionValue.unarchiveChatsSetting:type_name -> WASyncAction.UnarchiveChatsSetting - 45, // 28: WASyncAction.SyncActionValue.primaryFeature:type_name -> WASyncAction.PrimaryFeature - 44, // 29: WASyncAction.SyncActionValue.androidUnsupportedActions:type_name -> WASyncAction.AndroidUnsupportedActions - 43, // 30: WASyncAction.SyncActionValue.agentAction:type_name -> WASyncAction.AgentAction - 42, // 31: WASyncAction.SyncActionValue.subscriptionAction:type_name -> WASyncAction.SubscriptionAction - 41, // 32: WASyncAction.SyncActionValue.userStatusMuteAction:type_name -> WASyncAction.UserStatusMuteAction - 40, // 33: WASyncAction.SyncActionValue.timeFormatAction:type_name -> WASyncAction.TimeFormatAction - 39, // 34: WASyncAction.SyncActionValue.nuxAction:type_name -> WASyncAction.NuxAction - 38, // 35: WASyncAction.SyncActionValue.primaryVersionAction:type_name -> WASyncAction.PrimaryVersionAction - 36, // 36: WASyncAction.SyncActionValue.stickerAction:type_name -> WASyncAction.StickerAction - 37, // 37: WASyncAction.SyncActionValue.removeRecentStickerAction:type_name -> WASyncAction.RemoveRecentStickerAction - 35, // 38: WASyncAction.SyncActionValue.chatAssignment:type_name -> WASyncAction.ChatAssignmentAction - 34, // 39: WASyncAction.SyncActionValue.chatAssignmentOpenedStatus:type_name -> WASyncAction.ChatAssignmentOpenedStatusAction - 33, // 40: WASyncAction.SyncActionValue.pnForLidChatAction:type_name -> WASyncAction.PnForLidChatAction - 14, // 41: WASyncAction.SyncActionValue.marketingMessageAction:type_name -> WASyncAction.MarketingMessageAction - 32, // 42: WASyncAction.SyncActionValue.marketingMessageBroadcastAction:type_name -> WASyncAction.MarketingMessageBroadcastAction - 31, // 43: WASyncAction.SyncActionValue.externalWebBetaAction:type_name -> WASyncAction.ExternalWebBetaAction - 30, // 44: WASyncAction.SyncActionValue.privacySettingRelayAllCalls:type_name -> WASyncAction.PrivacySettingRelayAllCalls - 29, // 45: WASyncAction.SyncActionValue.callLogAction:type_name -> WASyncAction.CallLogAction - 13, // 46: WASyncAction.SyncActionValue.statusPrivacy:type_name -> WASyncAction.StatusPrivacyAction - 28, // 47: WASyncAction.SyncActionValue.botWelcomeRequestAction:type_name -> WASyncAction.BotWelcomeRequestAction - 27, // 48: WASyncAction.SyncActionValue.deleteIndividualCallLog:type_name -> WASyncAction.DeleteIndividualCallLogAction - 26, // 49: WASyncAction.SyncActionValue.labelReorderingAction:type_name -> WASyncAction.LabelReorderingAction - 25, // 50: WASyncAction.SyncActionValue.paymentInfoAction:type_name -> WASyncAction.PaymentInfoAction - 22, // 51: WASyncAction.SyncActionValue.customPaymentMethodsAction:type_name -> WASyncAction.CustomPaymentMethodsAction - 21, // 52: WASyncAction.SyncActionValue.lockChatAction:type_name -> WASyncAction.LockChatAction - 69, // 53: WASyncAction.SyncActionValue.chatLockSettings:type_name -> WAProtobufsChatLockSettings.ChatLockSettings - 20, // 54: WASyncAction.SyncActionValue.wamoUserIdentifierAction:type_name -> WASyncAction.WamoUserIdentifierAction - 19, // 55: WASyncAction.SyncActionValue.privacySettingDisableLinkPreviewsAction:type_name -> WASyncAction.PrivacySettingDisableLinkPreviewsAction - 70, // 56: WASyncAction.SyncActionValue.deviceCapabilities:type_name -> WAProtobufsDeviceCapabilities.DeviceCapabilities - 12, // 57: WASyncAction.SyncActionValue.noteEditAction:type_name -> WASyncAction.NoteEditAction - 18, // 58: WASyncAction.SyncActionValue.favoritesAction:type_name -> WASyncAction.FavoritesAction - 11, // 59: WASyncAction.SyncActionValue.merchantPaymentPartnerAction:type_name -> WASyncAction.MerchantPaymentPartnerAction - 10, // 60: WASyncAction.SyncActionValue.waffleAccountLinkStateAction:type_name -> WASyncAction.WaffleAccountLinkStateAction - 68, // 61: WASyncAction.FavoritesAction.favorites:type_name -> WASyncAction.FavoritesAction.Favorite - 23, // 62: WASyncAction.CustomPaymentMethodsAction.customPaymentMethods:type_name -> WASyncAction.CustomPaymentMethod - 24, // 63: WASyncAction.CustomPaymentMethod.metadata:type_name -> WASyncAction.CustomPaymentMethodMetadata - 9, // 64: WASyncAction.CallLogAction.callLogRecord:type_name -> WASyncAction.CallLogRecord - 71, // 65: WASyncAction.SyncActionMessage.key:type_name -> WACommon.MessageKey - 47, // 66: WASyncAction.SyncActionMessageRange.messages:type_name -> WASyncAction.SyncActionMessage - 48, // 67: WASyncAction.DeleteChatAction.messageRange:type_name -> WASyncAction.SyncActionMessageRange - 48, // 68: WASyncAction.ClearChatAction.messageRange:type_name -> WASyncAction.SyncActionMessageRange - 48, // 69: WASyncAction.MarkChatAsReadAction.messageRange:type_name -> WASyncAction.SyncActionMessageRange - 48, // 70: WASyncAction.ArchiveChatAction.messageRange:type_name -> WASyncAction.SyncActionMessageRange - 16, // 71: WASyncAction.RecentEmojiWeightsAction.weights:type_name -> WASyncAction.RecentEmojiWeight - 17, // 72: WASyncAction.SyncActionData.value:type_name -> WASyncAction.SyncActionValue - 2, // 73: WASyncAction.CallLogRecord.ParticipantInfo.callResult:type_name -> WASyncAction.CallLogRecord.CallResult - 74, // [74:74] is the sub-list for method output_type - 74, // [74:74] is the sub-list for method input_type - 74, // [74:74] is the sub-list for extension type_name - 74, // [74:74] is the sub-list for extension extendee - 0, // [0:74] is the sub-list for field type_name -} - -func init() { file_waSyncAction_WASyncAction_proto_init() } -func file_waSyncAction_WASyncAction_proto_init() { - if File_waSyncAction_WASyncAction_proto != nil { - return - } - if !protoimpl.UnsafeEnabled { - file_waSyncAction_WASyncAction_proto_msgTypes[0].Exporter = func(v any, i int) any { - switch v := v.(*CallLogRecord); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waSyncAction_WASyncAction_proto_msgTypes[1].Exporter = func(v any, i int) any { - switch v := v.(*WaffleAccountLinkStateAction); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waSyncAction_WASyncAction_proto_msgTypes[2].Exporter = func(v any, i int) any { - switch v := v.(*MerchantPaymentPartnerAction); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waSyncAction_WASyncAction_proto_msgTypes[3].Exporter = func(v any, i int) any { - switch v := v.(*NoteEditAction); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waSyncAction_WASyncAction_proto_msgTypes[4].Exporter = func(v any, i int) any { - switch v := v.(*StatusPrivacyAction); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waSyncAction_WASyncAction_proto_msgTypes[5].Exporter = func(v any, i int) any { - switch v := v.(*MarketingMessageAction); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waSyncAction_WASyncAction_proto_msgTypes[6].Exporter = func(v any, i int) any { - switch v := v.(*PatchDebugData); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waSyncAction_WASyncAction_proto_msgTypes[7].Exporter = func(v any, i int) any { - switch v := v.(*RecentEmojiWeight); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waSyncAction_WASyncAction_proto_msgTypes[8].Exporter = func(v any, i int) any { - switch v := v.(*SyncActionValue); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waSyncAction_WASyncAction_proto_msgTypes[9].Exporter = func(v any, i int) any { - switch v := v.(*FavoritesAction); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waSyncAction_WASyncAction_proto_msgTypes[10].Exporter = func(v any, i int) any { - switch v := v.(*PrivacySettingDisableLinkPreviewsAction); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waSyncAction_WASyncAction_proto_msgTypes[11].Exporter = func(v any, i int) any { - switch v := v.(*WamoUserIdentifierAction); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waSyncAction_WASyncAction_proto_msgTypes[12].Exporter = func(v any, i int) any { - switch v := v.(*LockChatAction); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waSyncAction_WASyncAction_proto_msgTypes[13].Exporter = func(v any, i int) any { - switch v := v.(*CustomPaymentMethodsAction); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waSyncAction_WASyncAction_proto_msgTypes[14].Exporter = func(v any, i int) any { - switch v := v.(*CustomPaymentMethod); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waSyncAction_WASyncAction_proto_msgTypes[15].Exporter = func(v any, i int) any { - switch v := v.(*CustomPaymentMethodMetadata); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waSyncAction_WASyncAction_proto_msgTypes[16].Exporter = func(v any, i int) any { - switch v := v.(*PaymentInfoAction); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waSyncAction_WASyncAction_proto_msgTypes[17].Exporter = func(v any, i int) any { - switch v := v.(*LabelReorderingAction); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waSyncAction_WASyncAction_proto_msgTypes[18].Exporter = func(v any, i int) any { - switch v := v.(*DeleteIndividualCallLogAction); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waSyncAction_WASyncAction_proto_msgTypes[19].Exporter = func(v any, i int) any { - switch v := v.(*BotWelcomeRequestAction); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waSyncAction_WASyncAction_proto_msgTypes[20].Exporter = func(v any, i int) any { - switch v := v.(*CallLogAction); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waSyncAction_WASyncAction_proto_msgTypes[21].Exporter = func(v any, i int) any { - switch v := v.(*PrivacySettingRelayAllCalls); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waSyncAction_WASyncAction_proto_msgTypes[22].Exporter = func(v any, i int) any { - switch v := v.(*ExternalWebBetaAction); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waSyncAction_WASyncAction_proto_msgTypes[23].Exporter = func(v any, i int) any { - switch v := v.(*MarketingMessageBroadcastAction); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waSyncAction_WASyncAction_proto_msgTypes[24].Exporter = func(v any, i int) any { - switch v := v.(*PnForLidChatAction); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waSyncAction_WASyncAction_proto_msgTypes[25].Exporter = func(v any, i int) any { - switch v := v.(*ChatAssignmentOpenedStatusAction); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waSyncAction_WASyncAction_proto_msgTypes[26].Exporter = func(v any, i int) any { - switch v := v.(*ChatAssignmentAction); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waSyncAction_WASyncAction_proto_msgTypes[27].Exporter = func(v any, i int) any { - switch v := v.(*StickerAction); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waSyncAction_WASyncAction_proto_msgTypes[28].Exporter = func(v any, i int) any { - switch v := v.(*RemoveRecentStickerAction); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waSyncAction_WASyncAction_proto_msgTypes[29].Exporter = func(v any, i int) any { - switch v := v.(*PrimaryVersionAction); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waSyncAction_WASyncAction_proto_msgTypes[30].Exporter = func(v any, i int) any { - switch v := v.(*NuxAction); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waSyncAction_WASyncAction_proto_msgTypes[31].Exporter = func(v any, i int) any { - switch v := v.(*TimeFormatAction); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waSyncAction_WASyncAction_proto_msgTypes[32].Exporter = func(v any, i int) any { - switch v := v.(*UserStatusMuteAction); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waSyncAction_WASyncAction_proto_msgTypes[33].Exporter = func(v any, i int) any { - switch v := v.(*SubscriptionAction); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waSyncAction_WASyncAction_proto_msgTypes[34].Exporter = func(v any, i int) any { - switch v := v.(*AgentAction); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waSyncAction_WASyncAction_proto_msgTypes[35].Exporter = func(v any, i int) any { - switch v := v.(*AndroidUnsupportedActions); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waSyncAction_WASyncAction_proto_msgTypes[36].Exporter = func(v any, i int) any { - switch v := v.(*PrimaryFeature); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waSyncAction_WASyncAction_proto_msgTypes[37].Exporter = func(v any, i int) any { - switch v := v.(*KeyExpiration); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waSyncAction_WASyncAction_proto_msgTypes[38].Exporter = func(v any, i int) any { - switch v := v.(*SyncActionMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waSyncAction_WASyncAction_proto_msgTypes[39].Exporter = func(v any, i int) any { - switch v := v.(*SyncActionMessageRange); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waSyncAction_WASyncAction_proto_msgTypes[40].Exporter = func(v any, i int) any { - switch v := v.(*UnarchiveChatsSetting); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waSyncAction_WASyncAction_proto_msgTypes[41].Exporter = func(v any, i int) any { - switch v := v.(*DeleteChatAction); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waSyncAction_WASyncAction_proto_msgTypes[42].Exporter = func(v any, i int) any { - switch v := v.(*ClearChatAction); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waSyncAction_WASyncAction_proto_msgTypes[43].Exporter = func(v any, i int) any { - switch v := v.(*MarkChatAsReadAction); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waSyncAction_WASyncAction_proto_msgTypes[44].Exporter = func(v any, i int) any { - switch v := v.(*DeleteMessageForMeAction); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waSyncAction_WASyncAction_proto_msgTypes[45].Exporter = func(v any, i int) any { - switch v := v.(*ArchiveChatAction); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waSyncAction_WASyncAction_proto_msgTypes[46].Exporter = func(v any, i int) any { - switch v := v.(*RecentEmojiWeightsAction); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waSyncAction_WASyncAction_proto_msgTypes[47].Exporter = func(v any, i int) any { - switch v := v.(*LabelEditAction); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waSyncAction_WASyncAction_proto_msgTypes[48].Exporter = func(v any, i int) any { - switch v := v.(*LabelAssociationAction); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waSyncAction_WASyncAction_proto_msgTypes[49].Exporter = func(v any, i int) any { - switch v := v.(*QuickReplyAction); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waSyncAction_WASyncAction_proto_msgTypes[50].Exporter = func(v any, i int) any { - switch v := v.(*LocaleSetting); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waSyncAction_WASyncAction_proto_msgTypes[51].Exporter = func(v any, i int) any { - switch v := v.(*PushNameSetting); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waSyncAction_WASyncAction_proto_msgTypes[52].Exporter = func(v any, i int) any { - switch v := v.(*SecurityNotificationSetting); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waSyncAction_WASyncAction_proto_msgTypes[53].Exporter = func(v any, i int) any { - switch v := v.(*PinAction); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waSyncAction_WASyncAction_proto_msgTypes[54].Exporter = func(v any, i int) any { - switch v := v.(*MuteAction); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waSyncAction_WASyncAction_proto_msgTypes[55].Exporter = func(v any, i int) any { - switch v := v.(*ContactAction); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waSyncAction_WASyncAction_proto_msgTypes[56].Exporter = func(v any, i int) any { - switch v := v.(*StarAction); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waSyncAction_WASyncAction_proto_msgTypes[57].Exporter = func(v any, i int) any { - switch v := v.(*SyncActionData); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waSyncAction_WASyncAction_proto_msgTypes[58].Exporter = func(v any, i int) any { - switch v := v.(*CallLogRecord_ParticipantInfo); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waSyncAction_WASyncAction_proto_msgTypes[59].Exporter = func(v any, i int) any { - switch v := v.(*FavoritesAction_Favorite); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - type x struct{} - out := protoimpl.TypeBuilder{ - File: protoimpl.DescBuilder{ - GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_waSyncAction_WASyncAction_proto_rawDesc, - NumEnums: 9, - NumMessages: 60, - NumExtensions: 0, - NumServices: 0, - }, - GoTypes: file_waSyncAction_WASyncAction_proto_goTypes, - DependencyIndexes: file_waSyncAction_WASyncAction_proto_depIdxs, - EnumInfos: file_waSyncAction_WASyncAction_proto_enumTypes, - MessageInfos: file_waSyncAction_WASyncAction_proto_msgTypes, - }.Build() - File_waSyncAction_WASyncAction_proto = out.File - file_waSyncAction_WASyncAction_proto_rawDesc = nil - file_waSyncAction_WASyncAction_proto_goTypes = nil - file_waSyncAction_WASyncAction_proto_depIdxs = nil -} diff --git a/vendor/go.mau.fi/whatsmeow/proto/waSyncAction/WASyncAction.pb.raw b/vendor/go.mau.fi/whatsmeow/proto/waSyncAction/WASyncAction.pb.raw deleted file mode 100644 index f66c81cead..0000000000 Binary files a/vendor/go.mau.fi/whatsmeow/proto/waSyncAction/WASyncAction.pb.raw and /dev/null differ diff --git a/vendor/go.mau.fi/whatsmeow/proto/waSyncAction/WASyncAction.proto b/vendor/go.mau.fi/whatsmeow/proto/waSyncAction/WASyncAction.proto deleted file mode 100644 index a2a9adedb5..0000000000 --- a/vendor/go.mau.fi/whatsmeow/proto/waSyncAction/WASyncAction.proto +++ /dev/null @@ -1,440 +0,0 @@ -syntax = "proto2"; -package WASyncAction; -option go_package = "go.mau.fi/whatsmeow/proto/waSyncAction"; - -import "waChatLockSettings/WAProtobufsChatLockSettings.proto"; -import "waDeviceCapabilities/WAProtobufsDeviceCapabilities.proto"; -import "waCommon/WACommon.proto"; - -message CallLogRecord { - enum CallType { - REGULAR = 0; - SCHEDULED_CALL = 1; - VOICE_CHAT = 2; - } - - enum SilenceReason { - NONE = 0; - SCHEDULED = 1; - PRIVACY = 2; - LIGHTWEIGHT = 3; - } - - enum CallResult { - CONNECTED = 0; - REJECTED = 1; - CANCELLED = 2; - ACCEPTEDELSEWHERE = 3; - MISSED = 4; - INVALID = 5; - UNAVAILABLE = 6; - UPCOMING = 7; - FAILED = 8; - ABANDONED = 9; - ONGOING = 10; - } - - message ParticipantInfo { - optional string userJID = 1; - optional CallResult callResult = 2; - } - - optional CallResult callResult = 1; - optional bool isDndMode = 2; - optional SilenceReason silenceReason = 3; - optional int64 duration = 4; - optional int64 startTime = 5; - optional bool isIncoming = 6; - optional bool isVideo = 7; - optional bool isCallLink = 8; - optional string callLinkToken = 9; - optional string scheduledCallID = 10; - optional string callID = 11; - optional string callCreatorJID = 12; - optional string groupJID = 13; - repeated ParticipantInfo participants = 14; - optional CallType callType = 15; -} - -message WaffleAccountLinkStateAction { - enum AccountLinkState { - ACTIVE = 0; - } - - optional AccountLinkState linkState = 2; -} - -message MerchantPaymentPartnerAction { - enum Status { - ACTIVE = 0; - INACTIVE = 1; - } - - required Status status = 1; - required string country = 2; - optional string gatewayName = 3; - optional string credentialID = 4; -} - -message NoteEditAction { - enum NoteType { - UNSTRUCTURED = 1; - STRUCTURED = 2; - } - - optional NoteType type = 1; - optional string chatJID = 2; - optional int64 createdAt = 3; - optional bool deleted = 4; - optional string unstructuredContent = 5; -} - -message StatusPrivacyAction { - enum StatusDistributionMode { - ALLOW_LIST = 0; - DENY_LIST = 1; - CONTACTS = 2; - } - - optional StatusDistributionMode mode = 1; - repeated string userJID = 2; -} - -message MarketingMessageAction { - enum MarketingMessagePrototypeType { - PERSONALIZED = 0; - } - - optional string name = 1; - optional string message = 2; - optional MarketingMessagePrototypeType type = 3; - optional int64 createdAt = 4; - optional int64 lastSentAt = 5; - optional bool isDeleted = 6; - optional string mediaID = 7; -} - -message PatchDebugData { - enum Platform { - ANDROID = 0; - SMBA = 1; - IPHONE = 2; - SMBI = 3; - WEB = 4; - UWP = 5; - DARWIN = 6; - } - - optional bytes currentLthash = 1; - optional bytes newLthash = 2; - optional bytes patchVersion = 3; - optional bytes collectionName = 4; - optional bytes firstFourBytesFromAHashOfSnapshotMACKey = 5; - optional bytes newLthashSubtract = 6; - optional int32 numberAdd = 7; - optional int32 numberRemove = 8; - optional int32 numberOverride = 9; - optional Platform senderPlatform = 10; - optional bool isSenderPrimary = 11; -} - -message RecentEmojiWeight { - optional string emoji = 1; - optional float weight = 2; -} - -message SyncActionValue { - optional int64 timestamp = 1; - optional StarAction starAction = 2; - optional ContactAction contactAction = 3; - optional MuteAction muteAction = 4; - optional PinAction pinAction = 5; - optional SecurityNotificationSetting securityNotificationSetting = 6; - optional PushNameSetting pushNameSetting = 7; - optional QuickReplyAction quickReplyAction = 8; - optional RecentEmojiWeightsAction recentEmojiWeightsAction = 11; - optional LabelEditAction labelEditAction = 14; - optional LabelAssociationAction labelAssociationAction = 15; - optional LocaleSetting localeSetting = 16; - optional ArchiveChatAction archiveChatAction = 17; - optional DeleteMessageForMeAction deleteMessageForMeAction = 18; - optional KeyExpiration keyExpiration = 19; - optional MarkChatAsReadAction markChatAsReadAction = 20; - optional ClearChatAction clearChatAction = 21; - optional DeleteChatAction deleteChatAction = 22; - optional UnarchiveChatsSetting unarchiveChatsSetting = 23; - optional PrimaryFeature primaryFeature = 24; - optional AndroidUnsupportedActions androidUnsupportedActions = 26; - optional AgentAction agentAction = 27; - optional SubscriptionAction subscriptionAction = 28; - optional UserStatusMuteAction userStatusMuteAction = 29; - optional TimeFormatAction timeFormatAction = 30; - optional NuxAction nuxAction = 31; - optional PrimaryVersionAction primaryVersionAction = 32; - optional StickerAction stickerAction = 33; - optional RemoveRecentStickerAction removeRecentStickerAction = 34; - optional ChatAssignmentAction chatAssignment = 35; - optional ChatAssignmentOpenedStatusAction chatAssignmentOpenedStatus = 36; - optional PnForLidChatAction pnForLidChatAction = 37; - optional MarketingMessageAction marketingMessageAction = 38; - optional MarketingMessageBroadcastAction marketingMessageBroadcastAction = 39; - optional ExternalWebBetaAction externalWebBetaAction = 40; - optional PrivacySettingRelayAllCalls privacySettingRelayAllCalls = 41; - optional CallLogAction callLogAction = 42; - optional StatusPrivacyAction statusPrivacy = 44; - optional BotWelcomeRequestAction botWelcomeRequestAction = 45; - optional DeleteIndividualCallLogAction deleteIndividualCallLog = 46; - optional LabelReorderingAction labelReorderingAction = 47; - optional PaymentInfoAction paymentInfoAction = 48; - optional CustomPaymentMethodsAction customPaymentMethodsAction = 49; - optional LockChatAction lockChatAction = 50; - optional WAProtobufsChatLockSettings.ChatLockSettings chatLockSettings = 51; - optional WamoUserIdentifierAction wamoUserIdentifierAction = 52; - optional PrivacySettingDisableLinkPreviewsAction privacySettingDisableLinkPreviewsAction = 53; - optional WAProtobufsDeviceCapabilities.DeviceCapabilities deviceCapabilities = 54; - optional NoteEditAction noteEditAction = 55; - optional FavoritesAction favoritesAction = 56; - optional MerchantPaymentPartnerAction merchantPaymentPartnerAction = 57; - optional WaffleAccountLinkStateAction waffleAccountLinkStateAction = 58; -} - -message FavoritesAction { - message Favorite { - optional string ID = 1; - } - - repeated Favorite favorites = 1; -} - -message PrivacySettingDisableLinkPreviewsAction { - optional bool isPreviewsDisabled = 1; -} - -message WamoUserIdentifierAction { - optional string identifier = 1; -} - -message LockChatAction { - optional bool locked = 1; -} - -message CustomPaymentMethodsAction { - repeated CustomPaymentMethod customPaymentMethods = 1; -} - -message CustomPaymentMethod { - required string credentialID = 1; - required string country = 2; - required string type = 3; - repeated CustomPaymentMethodMetadata metadata = 4; -} - -message CustomPaymentMethodMetadata { - required string key = 1; - required string value = 2; -} - -message PaymentInfoAction { - optional string cpi = 1; -} - -message LabelReorderingAction { - repeated int32 sortedLabelIDs = 1; -} - -message DeleteIndividualCallLogAction { - optional string peerJID = 1; - optional bool isIncoming = 2; -} - -message BotWelcomeRequestAction { - optional bool isSent = 1; -} - -message CallLogAction { - optional CallLogRecord callLogRecord = 1; -} - -message PrivacySettingRelayAllCalls { - optional bool isEnabled = 1; -} - -message ExternalWebBetaAction { - optional bool isOptIn = 1; -} - -message MarketingMessageBroadcastAction { - optional int32 repliedCount = 1; -} - -message PnForLidChatAction { - optional string pnJID = 1; -} - -message ChatAssignmentOpenedStatusAction { - optional bool chatOpened = 1; -} - -message ChatAssignmentAction { - optional string deviceAgentID = 1; -} - -message StickerAction { - optional string URL = 1; - optional bytes fileEncSHA256 = 2; - optional bytes mediaKey = 3; - optional string mimetype = 4; - optional uint32 height = 5; - optional uint32 width = 6; - optional string directPath = 7; - optional uint64 fileLength = 8; - optional bool isFavorite = 9; - optional uint32 deviceIDHint = 10; - optional bool isLottie = 11; -} - -message RemoveRecentStickerAction { - optional int64 lastStickerSentTS = 1; -} - -message PrimaryVersionAction { - optional string version = 1; -} - -message NuxAction { - optional bool acknowledged = 1; -} - -message TimeFormatAction { - optional bool isTwentyFourHourFormatEnabled = 1; -} - -message UserStatusMuteAction { - optional bool muted = 1; -} - -message SubscriptionAction { - optional bool isDeactivated = 1; - optional bool isAutoRenewing = 2; - optional int64 expirationDate = 3; -} - -message AgentAction { - optional string name = 1; - optional int32 deviceID = 2; - optional bool isDeleted = 3; -} - -message AndroidUnsupportedActions { - optional bool allowed = 1; -} - -message PrimaryFeature { - repeated string flags = 1; -} - -message KeyExpiration { - optional int32 expiredKeyEpoch = 1; -} - -message SyncActionMessage { - optional WACommon.MessageKey key = 1; - optional int64 timestamp = 2; -} - -message SyncActionMessageRange { - optional int64 lastMessageTimestamp = 1; - optional int64 lastSystemMessageTimestamp = 2; - repeated SyncActionMessage messages = 3; -} - -message UnarchiveChatsSetting { - optional bool unarchiveChats = 1; -} - -message DeleteChatAction { - optional SyncActionMessageRange messageRange = 1; -} - -message ClearChatAction { - optional SyncActionMessageRange messageRange = 1; -} - -message MarkChatAsReadAction { - optional bool read = 1; - optional SyncActionMessageRange messageRange = 2; -} - -message DeleteMessageForMeAction { - optional bool deleteMedia = 1; - optional int64 messageTimestamp = 2; -} - -message ArchiveChatAction { - optional bool archived = 1; - optional SyncActionMessageRange messageRange = 2; -} - -message RecentEmojiWeightsAction { - repeated RecentEmojiWeight weights = 1; -} - -message LabelEditAction { - optional string name = 1; - optional int32 color = 2; - optional int32 predefinedID = 3; - optional bool deleted = 4; - optional int32 orderIndex = 5; -} - -message LabelAssociationAction { - optional bool labeled = 1; -} - -message QuickReplyAction { - optional string shortcut = 1; - optional string message = 2; - repeated string keywords = 3; - optional int32 count = 4; - optional bool deleted = 5; -} - -message LocaleSetting { - optional string locale = 1; -} - -message PushNameSetting { - optional string name = 1; -} - -message SecurityNotificationSetting { - optional bool showNotification = 1; -} - -message PinAction { - optional bool pinned = 1; -} - -message MuteAction { - optional bool muted = 1; - optional int64 muteEndTimestamp = 2; - optional bool autoMuted = 3; -} - -message ContactAction { - optional string fullName = 1; - optional string firstName = 2; - optional string lidJID = 3; - optional bool saveOnPrimaryAddressbook = 4; -} - -message StarAction { - optional bool starred = 1; -} - -message SyncActionData { - optional bytes index = 1; - optional SyncActionValue value = 2; - optional bytes padding = 3; - optional int32 version = 4; -} diff --git a/vendor/go.mau.fi/whatsmeow/proto/waSyncAction/WAWebProtobufSyncAction.pb.go b/vendor/go.mau.fi/whatsmeow/proto/waSyncAction/WAWebProtobufSyncAction.pb.go new file mode 100644 index 0000000000..9f69538116 --- /dev/null +++ b/vendor/go.mau.fi/whatsmeow/proto/waSyncAction/WAWebProtobufSyncAction.pb.go @@ -0,0 +1,7840 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.36.11 +// protoc v6.33.5 +// source: waSyncAction/WAWebProtobufSyncAction.proto + +package waSyncAction + +import ( + reflect "reflect" + sync "sync" + unsafe "unsafe" + + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + + waChatLockSettings "go.mau.fi/whatsmeow/proto/waChatLockSettings" + waCommon "go.mau.fi/whatsmeow/proto/waCommon" + waDeviceCapabilities "go.mau.fi/whatsmeow/proto/waDeviceCapabilities" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type CollectionName int32 + +const ( + CollectionName_COLLECTION_NAME_UNKNOWN CollectionName = 0 + CollectionName_REGULAR CollectionName = 1 + CollectionName_REGULAR_LOW CollectionName = 2 + CollectionName_REGULAR_HIGH CollectionName = 3 + CollectionName_CRITICAL_BLOCK CollectionName = 4 + CollectionName_CRITICAL_UNBLOCK_LOW CollectionName = 5 +) + +// Enum value maps for CollectionName. +var ( + CollectionName_name = map[int32]string{ + 0: "COLLECTION_NAME_UNKNOWN", + 1: "REGULAR", + 2: "REGULAR_LOW", + 3: "REGULAR_HIGH", + 4: "CRITICAL_BLOCK", + 5: "CRITICAL_UNBLOCK_LOW", + } + CollectionName_value = map[string]int32{ + "COLLECTION_NAME_UNKNOWN": 0, + "REGULAR": 1, + "REGULAR_LOW": 2, + "REGULAR_HIGH": 3, + "CRITICAL_BLOCK": 4, + "CRITICAL_UNBLOCK_LOW": 5, + } +) + +func (x CollectionName) Enum() *CollectionName { + p := new(CollectionName) + *p = x + return p +} + +func (x CollectionName) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (CollectionName) Descriptor() protoreflect.EnumDescriptor { + return file_waSyncAction_WAWebProtobufSyncAction_proto_enumTypes[0].Descriptor() +} + +func (CollectionName) Type() protoreflect.EnumType { + return &file_waSyncAction_WAWebProtobufSyncAction_proto_enumTypes[0] +} + +func (x CollectionName) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *CollectionName) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = CollectionName(num) + return nil +} + +// Deprecated: Use CollectionName.Descriptor instead. +func (CollectionName) EnumDescriptor() ([]byte, []int) { + return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{0} +} + +type MutationProps int32 + +const ( + MutationProps_STAR_ACTION MutationProps = 2 + MutationProps_CONTACT_ACTION MutationProps = 3 + MutationProps_MUTE_ACTION MutationProps = 4 + MutationProps_PIN_ACTION MutationProps = 5 + MutationProps_SECURITY_NOTIFICATION_SETTING MutationProps = 6 + MutationProps_PUSH_NAME_SETTING MutationProps = 7 + MutationProps_QUICK_REPLY_ACTION MutationProps = 8 + MutationProps_RECENT_EMOJI_WEIGHTS_ACTION MutationProps = 11 + MutationProps_LABEL_MESSAGE_ACTION MutationProps = 13 + MutationProps_LABEL_EDIT_ACTION MutationProps = 14 + MutationProps_LABEL_ASSOCIATION_ACTION MutationProps = 15 + MutationProps_LOCALE_SETTING MutationProps = 16 + MutationProps_ARCHIVE_CHAT_ACTION MutationProps = 17 + MutationProps_DELETE_MESSAGE_FOR_ME_ACTION MutationProps = 18 + MutationProps_KEY_EXPIRATION MutationProps = 19 + MutationProps_MARK_CHAT_AS_READ_ACTION MutationProps = 20 + MutationProps_CLEAR_CHAT_ACTION MutationProps = 21 + MutationProps_DELETE_CHAT_ACTION MutationProps = 22 + MutationProps_UNARCHIVE_CHATS_SETTING MutationProps = 23 + MutationProps_PRIMARY_FEATURE MutationProps = 24 + MutationProps_ANDROID_UNSUPPORTED_ACTIONS MutationProps = 26 + MutationProps_AGENT_ACTION MutationProps = 27 + MutationProps_SUBSCRIPTION_ACTION MutationProps = 28 + MutationProps_USER_STATUS_MUTE_ACTION MutationProps = 29 + MutationProps_TIME_FORMAT_ACTION MutationProps = 30 + MutationProps_NUX_ACTION MutationProps = 31 + MutationProps_PRIMARY_VERSION_ACTION MutationProps = 32 + MutationProps_STICKER_ACTION MutationProps = 33 + MutationProps_REMOVE_RECENT_STICKER_ACTION MutationProps = 34 + MutationProps_CHAT_ASSIGNMENT MutationProps = 35 + MutationProps_CHAT_ASSIGNMENT_OPENED_STATUS MutationProps = 36 + MutationProps_PN_FOR_LID_CHAT_ACTION MutationProps = 37 + MutationProps_MARKETING_MESSAGE_ACTION MutationProps = 38 + MutationProps_MARKETING_MESSAGE_BROADCAST_ACTION MutationProps = 39 + MutationProps_EXTERNAL_WEB_BETA_ACTION MutationProps = 40 + MutationProps_PRIVACY_SETTING_RELAY_ALL_CALLS MutationProps = 41 + MutationProps_CALL_LOG_ACTION MutationProps = 42 + MutationProps_UGC_BOT MutationProps = 43 + MutationProps_STATUS_PRIVACY MutationProps = 44 + MutationProps_BOT_WELCOME_REQUEST_ACTION MutationProps = 45 + MutationProps_DELETE_INDIVIDUAL_CALL_LOG MutationProps = 46 + MutationProps_LABEL_REORDERING_ACTION MutationProps = 47 + MutationProps_PAYMENT_INFO_ACTION MutationProps = 48 + MutationProps_CUSTOM_PAYMENT_METHODS_ACTION MutationProps = 49 + MutationProps_LOCK_CHAT_ACTION MutationProps = 50 + MutationProps_CHAT_LOCK_SETTINGS MutationProps = 51 + MutationProps_WAMO_USER_IDENTIFIER_ACTION MutationProps = 52 + MutationProps_PRIVACY_SETTING_DISABLE_LINK_PREVIEWS_ACTION MutationProps = 53 + MutationProps_DEVICE_CAPABILITIES MutationProps = 54 + MutationProps_NOTE_EDIT_ACTION MutationProps = 55 + MutationProps_FAVORITES_ACTION MutationProps = 56 + MutationProps_MERCHANT_PAYMENT_PARTNER_ACTION MutationProps = 57 + MutationProps_WAFFLE_ACCOUNT_LINK_STATE_ACTION MutationProps = 58 + MutationProps_USERNAME_CHAT_START_MODE MutationProps = 59 + MutationProps_NOTIFICATION_ACTIVITY_SETTING_ACTION MutationProps = 60 + MutationProps_LID_CONTACT_ACTION MutationProps = 61 + MutationProps_CTWA_PER_CUSTOMER_DATA_SHARING_ACTION MutationProps = 62 + MutationProps_PAYMENT_TOS_ACTION MutationProps = 63 + MutationProps_PRIVACY_SETTING_CHANNELS_PERSONALISED_RECOMMENDATION_ACTION MutationProps = 64 + MutationProps_BUSINESS_BROADCAST_ASSOCIATION_ACTION MutationProps = 65 + MutationProps_DETECTED_OUTCOMES_STATUS_ACTION MutationProps = 66 + MutationProps_MAIBA_AI_FEATURES_CONTROL_ACTION MutationProps = 68 + MutationProps_BUSINESS_BROADCAST_LIST_ACTION MutationProps = 69 + MutationProps_MUSIC_USER_ID_ACTION MutationProps = 70 + MutationProps_STATUS_POST_OPT_IN_NOTIFICATION_PREFERENCES_ACTION MutationProps = 71 + MutationProps_AVATAR_UPDATED_ACTION MutationProps = 72 + MutationProps_GALAXY_FLOW_ACTION MutationProps = 73 + MutationProps_PRIVATE_PROCESSING_SETTING_ACTION MutationProps = 74 + MutationProps_NEWSLETTER_SAVED_INTERESTS_ACTION MutationProps = 75 + MutationProps_AI_THREAD_RENAME_ACTION MutationProps = 76 + MutationProps_INTERACTIVE_MESSAGE_ACTION MutationProps = 77 + MutationProps_SETTINGS_SYNC_ACTION MutationProps = 78 + MutationProps_OUT_CONTACT_ACTION MutationProps = 79 + MutationProps_NCT_SALT_SYNC_ACTION MutationProps = 80 + MutationProps_SHARE_OWN_PN MutationProps = 10001 + MutationProps_BUSINESS_BROADCAST_ACTION MutationProps = 10002 + MutationProps_AI_THREAD_DELETE_ACTION MutationProps = 10003 +) + +// Enum value maps for MutationProps. +var ( + MutationProps_name = map[int32]string{ + 2: "STAR_ACTION", + 3: "CONTACT_ACTION", + 4: "MUTE_ACTION", + 5: "PIN_ACTION", + 6: "SECURITY_NOTIFICATION_SETTING", + 7: "PUSH_NAME_SETTING", + 8: "QUICK_REPLY_ACTION", + 11: "RECENT_EMOJI_WEIGHTS_ACTION", + 13: "LABEL_MESSAGE_ACTION", + 14: "LABEL_EDIT_ACTION", + 15: "LABEL_ASSOCIATION_ACTION", + 16: "LOCALE_SETTING", + 17: "ARCHIVE_CHAT_ACTION", + 18: "DELETE_MESSAGE_FOR_ME_ACTION", + 19: "KEY_EXPIRATION", + 20: "MARK_CHAT_AS_READ_ACTION", + 21: "CLEAR_CHAT_ACTION", + 22: "DELETE_CHAT_ACTION", + 23: "UNARCHIVE_CHATS_SETTING", + 24: "PRIMARY_FEATURE", + 26: "ANDROID_UNSUPPORTED_ACTIONS", + 27: "AGENT_ACTION", + 28: "SUBSCRIPTION_ACTION", + 29: "USER_STATUS_MUTE_ACTION", + 30: "TIME_FORMAT_ACTION", + 31: "NUX_ACTION", + 32: "PRIMARY_VERSION_ACTION", + 33: "STICKER_ACTION", + 34: "REMOVE_RECENT_STICKER_ACTION", + 35: "CHAT_ASSIGNMENT", + 36: "CHAT_ASSIGNMENT_OPENED_STATUS", + 37: "PN_FOR_LID_CHAT_ACTION", + 38: "MARKETING_MESSAGE_ACTION", + 39: "MARKETING_MESSAGE_BROADCAST_ACTION", + 40: "EXTERNAL_WEB_BETA_ACTION", + 41: "PRIVACY_SETTING_RELAY_ALL_CALLS", + 42: "CALL_LOG_ACTION", + 43: "UGC_BOT", + 44: "STATUS_PRIVACY", + 45: "BOT_WELCOME_REQUEST_ACTION", + 46: "DELETE_INDIVIDUAL_CALL_LOG", + 47: "LABEL_REORDERING_ACTION", + 48: "PAYMENT_INFO_ACTION", + 49: "CUSTOM_PAYMENT_METHODS_ACTION", + 50: "LOCK_CHAT_ACTION", + 51: "CHAT_LOCK_SETTINGS", + 52: "WAMO_USER_IDENTIFIER_ACTION", + 53: "PRIVACY_SETTING_DISABLE_LINK_PREVIEWS_ACTION", + 54: "DEVICE_CAPABILITIES", + 55: "NOTE_EDIT_ACTION", + 56: "FAVORITES_ACTION", + 57: "MERCHANT_PAYMENT_PARTNER_ACTION", + 58: "WAFFLE_ACCOUNT_LINK_STATE_ACTION", + 59: "USERNAME_CHAT_START_MODE", + 60: "NOTIFICATION_ACTIVITY_SETTING_ACTION", + 61: "LID_CONTACT_ACTION", + 62: "CTWA_PER_CUSTOMER_DATA_SHARING_ACTION", + 63: "PAYMENT_TOS_ACTION", + 64: "PRIVACY_SETTING_CHANNELS_PERSONALISED_RECOMMENDATION_ACTION", + 65: "BUSINESS_BROADCAST_ASSOCIATION_ACTION", + 66: "DETECTED_OUTCOMES_STATUS_ACTION", + 68: "MAIBA_AI_FEATURES_CONTROL_ACTION", + 69: "BUSINESS_BROADCAST_LIST_ACTION", + 70: "MUSIC_USER_ID_ACTION", + 71: "STATUS_POST_OPT_IN_NOTIFICATION_PREFERENCES_ACTION", + 72: "AVATAR_UPDATED_ACTION", + 73: "GALAXY_FLOW_ACTION", + 74: "PRIVATE_PROCESSING_SETTING_ACTION", + 75: "NEWSLETTER_SAVED_INTERESTS_ACTION", + 76: "AI_THREAD_RENAME_ACTION", + 77: "INTERACTIVE_MESSAGE_ACTION", + 78: "SETTINGS_SYNC_ACTION", + 79: "OUT_CONTACT_ACTION", + 80: "NCT_SALT_SYNC_ACTION", + 10001: "SHARE_OWN_PN", + 10002: "BUSINESS_BROADCAST_ACTION", + 10003: "AI_THREAD_DELETE_ACTION", + } + MutationProps_value = map[string]int32{ + "STAR_ACTION": 2, + "CONTACT_ACTION": 3, + "MUTE_ACTION": 4, + "PIN_ACTION": 5, + "SECURITY_NOTIFICATION_SETTING": 6, + "PUSH_NAME_SETTING": 7, + "QUICK_REPLY_ACTION": 8, + "RECENT_EMOJI_WEIGHTS_ACTION": 11, + "LABEL_MESSAGE_ACTION": 13, + "LABEL_EDIT_ACTION": 14, + "LABEL_ASSOCIATION_ACTION": 15, + "LOCALE_SETTING": 16, + "ARCHIVE_CHAT_ACTION": 17, + "DELETE_MESSAGE_FOR_ME_ACTION": 18, + "KEY_EXPIRATION": 19, + "MARK_CHAT_AS_READ_ACTION": 20, + "CLEAR_CHAT_ACTION": 21, + "DELETE_CHAT_ACTION": 22, + "UNARCHIVE_CHATS_SETTING": 23, + "PRIMARY_FEATURE": 24, + "ANDROID_UNSUPPORTED_ACTIONS": 26, + "AGENT_ACTION": 27, + "SUBSCRIPTION_ACTION": 28, + "USER_STATUS_MUTE_ACTION": 29, + "TIME_FORMAT_ACTION": 30, + "NUX_ACTION": 31, + "PRIMARY_VERSION_ACTION": 32, + "STICKER_ACTION": 33, + "REMOVE_RECENT_STICKER_ACTION": 34, + "CHAT_ASSIGNMENT": 35, + "CHAT_ASSIGNMENT_OPENED_STATUS": 36, + "PN_FOR_LID_CHAT_ACTION": 37, + "MARKETING_MESSAGE_ACTION": 38, + "MARKETING_MESSAGE_BROADCAST_ACTION": 39, + "EXTERNAL_WEB_BETA_ACTION": 40, + "PRIVACY_SETTING_RELAY_ALL_CALLS": 41, + "CALL_LOG_ACTION": 42, + "UGC_BOT": 43, + "STATUS_PRIVACY": 44, + "BOT_WELCOME_REQUEST_ACTION": 45, + "DELETE_INDIVIDUAL_CALL_LOG": 46, + "LABEL_REORDERING_ACTION": 47, + "PAYMENT_INFO_ACTION": 48, + "CUSTOM_PAYMENT_METHODS_ACTION": 49, + "LOCK_CHAT_ACTION": 50, + "CHAT_LOCK_SETTINGS": 51, + "WAMO_USER_IDENTIFIER_ACTION": 52, + "PRIVACY_SETTING_DISABLE_LINK_PREVIEWS_ACTION": 53, + "DEVICE_CAPABILITIES": 54, + "NOTE_EDIT_ACTION": 55, + "FAVORITES_ACTION": 56, + "MERCHANT_PAYMENT_PARTNER_ACTION": 57, + "WAFFLE_ACCOUNT_LINK_STATE_ACTION": 58, + "USERNAME_CHAT_START_MODE": 59, + "NOTIFICATION_ACTIVITY_SETTING_ACTION": 60, + "LID_CONTACT_ACTION": 61, + "CTWA_PER_CUSTOMER_DATA_SHARING_ACTION": 62, + "PAYMENT_TOS_ACTION": 63, + "PRIVACY_SETTING_CHANNELS_PERSONALISED_RECOMMENDATION_ACTION": 64, + "BUSINESS_BROADCAST_ASSOCIATION_ACTION": 65, + "DETECTED_OUTCOMES_STATUS_ACTION": 66, + "MAIBA_AI_FEATURES_CONTROL_ACTION": 68, + "BUSINESS_BROADCAST_LIST_ACTION": 69, + "MUSIC_USER_ID_ACTION": 70, + "STATUS_POST_OPT_IN_NOTIFICATION_PREFERENCES_ACTION": 71, + "AVATAR_UPDATED_ACTION": 72, + "GALAXY_FLOW_ACTION": 73, + "PRIVATE_PROCESSING_SETTING_ACTION": 74, + "NEWSLETTER_SAVED_INTERESTS_ACTION": 75, + "AI_THREAD_RENAME_ACTION": 76, + "INTERACTIVE_MESSAGE_ACTION": 77, + "SETTINGS_SYNC_ACTION": 78, + "OUT_CONTACT_ACTION": 79, + "NCT_SALT_SYNC_ACTION": 80, + "SHARE_OWN_PN": 10001, + "BUSINESS_BROADCAST_ACTION": 10002, + "AI_THREAD_DELETE_ACTION": 10003, + } +) + +func (x MutationProps) Enum() *MutationProps { + p := new(MutationProps) + *p = x + return p +} + +func (x MutationProps) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (MutationProps) Descriptor() protoreflect.EnumDescriptor { + return file_waSyncAction_WAWebProtobufSyncAction_proto_enumTypes[1].Descriptor() +} + +func (MutationProps) Type() protoreflect.EnumType { + return &file_waSyncAction_WAWebProtobufSyncAction_proto_enumTypes[1] +} + +func (x MutationProps) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *MutationProps) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = MutationProps(num) + return nil +} + +// Deprecated: Use MutationProps.Descriptor instead. +func (MutationProps) EnumDescriptor() ([]byte, []int) { + return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{1} +} + +type CallLogRecord_CallType int32 + +const ( + CallLogRecord_REGULAR CallLogRecord_CallType = 0 + CallLogRecord_SCHEDULED_CALL CallLogRecord_CallType = 1 + CallLogRecord_VOICE_CHAT CallLogRecord_CallType = 2 +) + +// Enum value maps for CallLogRecord_CallType. +var ( + CallLogRecord_CallType_name = map[int32]string{ + 0: "REGULAR", + 1: "SCHEDULED_CALL", + 2: "VOICE_CHAT", + } + CallLogRecord_CallType_value = map[string]int32{ + "REGULAR": 0, + "SCHEDULED_CALL": 1, + "VOICE_CHAT": 2, + } +) + +func (x CallLogRecord_CallType) Enum() *CallLogRecord_CallType { + p := new(CallLogRecord_CallType) + *p = x + return p +} + +func (x CallLogRecord_CallType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (CallLogRecord_CallType) Descriptor() protoreflect.EnumDescriptor { + return file_waSyncAction_WAWebProtobufSyncAction_proto_enumTypes[2].Descriptor() +} + +func (CallLogRecord_CallType) Type() protoreflect.EnumType { + return &file_waSyncAction_WAWebProtobufSyncAction_proto_enumTypes[2] +} + +func (x CallLogRecord_CallType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *CallLogRecord_CallType) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = CallLogRecord_CallType(num) + return nil +} + +// Deprecated: Use CallLogRecord_CallType.Descriptor instead. +func (CallLogRecord_CallType) EnumDescriptor() ([]byte, []int) { + return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{0, 0} +} + +type CallLogRecord_SilenceReason int32 + +const ( + CallLogRecord_NONE CallLogRecord_SilenceReason = 0 + CallLogRecord_SCHEDULED CallLogRecord_SilenceReason = 1 + CallLogRecord_PRIVACY CallLogRecord_SilenceReason = 2 + CallLogRecord_LIGHTWEIGHT CallLogRecord_SilenceReason = 3 +) + +// Enum value maps for CallLogRecord_SilenceReason. +var ( + CallLogRecord_SilenceReason_name = map[int32]string{ + 0: "NONE", + 1: "SCHEDULED", + 2: "PRIVACY", + 3: "LIGHTWEIGHT", + } + CallLogRecord_SilenceReason_value = map[string]int32{ + "NONE": 0, + "SCHEDULED": 1, + "PRIVACY": 2, + "LIGHTWEIGHT": 3, + } +) + +func (x CallLogRecord_SilenceReason) Enum() *CallLogRecord_SilenceReason { + p := new(CallLogRecord_SilenceReason) + *p = x + return p +} + +func (x CallLogRecord_SilenceReason) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (CallLogRecord_SilenceReason) Descriptor() protoreflect.EnumDescriptor { + return file_waSyncAction_WAWebProtobufSyncAction_proto_enumTypes[3].Descriptor() +} + +func (CallLogRecord_SilenceReason) Type() protoreflect.EnumType { + return &file_waSyncAction_WAWebProtobufSyncAction_proto_enumTypes[3] +} + +func (x CallLogRecord_SilenceReason) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *CallLogRecord_SilenceReason) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = CallLogRecord_SilenceReason(num) + return nil +} + +// Deprecated: Use CallLogRecord_SilenceReason.Descriptor instead. +func (CallLogRecord_SilenceReason) EnumDescriptor() ([]byte, []int) { + return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{0, 1} +} + +type CallLogRecord_CallResult int32 + +const ( + CallLogRecord_CONNECTED CallLogRecord_CallResult = 0 + CallLogRecord_REJECTED CallLogRecord_CallResult = 1 + CallLogRecord_CANCELLED CallLogRecord_CallResult = 2 + CallLogRecord_ACCEPTEDELSEWHERE CallLogRecord_CallResult = 3 + CallLogRecord_MISSED CallLogRecord_CallResult = 4 + CallLogRecord_INVALID CallLogRecord_CallResult = 5 + CallLogRecord_UNAVAILABLE CallLogRecord_CallResult = 6 + CallLogRecord_UPCOMING CallLogRecord_CallResult = 7 + CallLogRecord_FAILED CallLogRecord_CallResult = 8 + CallLogRecord_ABANDONED CallLogRecord_CallResult = 9 + CallLogRecord_ONGOING CallLogRecord_CallResult = 10 +) + +// Enum value maps for CallLogRecord_CallResult. +var ( + CallLogRecord_CallResult_name = map[int32]string{ + 0: "CONNECTED", + 1: "REJECTED", + 2: "CANCELLED", + 3: "ACCEPTEDELSEWHERE", + 4: "MISSED", + 5: "INVALID", + 6: "UNAVAILABLE", + 7: "UPCOMING", + 8: "FAILED", + 9: "ABANDONED", + 10: "ONGOING", + } + CallLogRecord_CallResult_value = map[string]int32{ + "CONNECTED": 0, + "REJECTED": 1, + "CANCELLED": 2, + "ACCEPTEDELSEWHERE": 3, + "MISSED": 4, + "INVALID": 5, + "UNAVAILABLE": 6, + "UPCOMING": 7, + "FAILED": 8, + "ABANDONED": 9, + "ONGOING": 10, + } +) + +func (x CallLogRecord_CallResult) Enum() *CallLogRecord_CallResult { + p := new(CallLogRecord_CallResult) + *p = x + return p +} + +func (x CallLogRecord_CallResult) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (CallLogRecord_CallResult) Descriptor() protoreflect.EnumDescriptor { + return file_waSyncAction_WAWebProtobufSyncAction_proto_enumTypes[4].Descriptor() +} + +func (CallLogRecord_CallResult) Type() protoreflect.EnumType { + return &file_waSyncAction_WAWebProtobufSyncAction_proto_enumTypes[4] +} + +func (x CallLogRecord_CallResult) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *CallLogRecord_CallResult) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = CallLogRecord_CallResult(num) + return nil +} + +// Deprecated: Use CallLogRecord_CallResult.Descriptor instead. +func (CallLogRecord_CallResult) EnumDescriptor() ([]byte, []int) { + return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{0, 2} +} + +type SettingsSyncAction_MediaQualitySetting int32 + +const ( + SettingsSyncAction_MEDIA_QUALITY_UNKNOWN SettingsSyncAction_MediaQualitySetting = 0 + SettingsSyncAction_STANDARD SettingsSyncAction_MediaQualitySetting = 1 + SettingsSyncAction_HD SettingsSyncAction_MediaQualitySetting = 2 +) + +// Enum value maps for SettingsSyncAction_MediaQualitySetting. +var ( + SettingsSyncAction_MediaQualitySetting_name = map[int32]string{ + 0: "MEDIA_QUALITY_UNKNOWN", + 1: "STANDARD", + 2: "HD", + } + SettingsSyncAction_MediaQualitySetting_value = map[string]int32{ + "MEDIA_QUALITY_UNKNOWN": 0, + "STANDARD": 1, + "HD": 2, + } +) + +func (x SettingsSyncAction_MediaQualitySetting) Enum() *SettingsSyncAction_MediaQualitySetting { + p := new(SettingsSyncAction_MediaQualitySetting) + *p = x + return p +} + +func (x SettingsSyncAction_MediaQualitySetting) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (SettingsSyncAction_MediaQualitySetting) Descriptor() protoreflect.EnumDescriptor { + return file_waSyncAction_WAWebProtobufSyncAction_proto_enumTypes[5].Descriptor() +} + +func (SettingsSyncAction_MediaQualitySetting) Type() protoreflect.EnumType { + return &file_waSyncAction_WAWebProtobufSyncAction_proto_enumTypes[5] +} + +func (x SettingsSyncAction_MediaQualitySetting) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *SettingsSyncAction_MediaQualitySetting) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = SettingsSyncAction_MediaQualitySetting(num) + return nil +} + +// Deprecated: Use SettingsSyncAction_MediaQualitySetting.Descriptor instead. +func (SettingsSyncAction_MediaQualitySetting) EnumDescriptor() ([]byte, []int) { + return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{1, 0} +} + +type SettingsSyncAction_DisplayMode int32 + +const ( + SettingsSyncAction_DISPLAY_MODE_UNKNOWN SettingsSyncAction_DisplayMode = 0 + SettingsSyncAction_ALWAYS SettingsSyncAction_DisplayMode = 1 + SettingsSyncAction_NEVER SettingsSyncAction_DisplayMode = 2 + SettingsSyncAction_ONLY_WHEN_APP_IS_OPEN SettingsSyncAction_DisplayMode = 3 +) + +// Enum value maps for SettingsSyncAction_DisplayMode. +var ( + SettingsSyncAction_DisplayMode_name = map[int32]string{ + 0: "DISPLAY_MODE_UNKNOWN", + 1: "ALWAYS", + 2: "NEVER", + 3: "ONLY_WHEN_APP_IS_OPEN", + } + SettingsSyncAction_DisplayMode_value = map[string]int32{ + "DISPLAY_MODE_UNKNOWN": 0, + "ALWAYS": 1, + "NEVER": 2, + "ONLY_WHEN_APP_IS_OPEN": 3, + } +) + +func (x SettingsSyncAction_DisplayMode) Enum() *SettingsSyncAction_DisplayMode { + p := new(SettingsSyncAction_DisplayMode) + *p = x + return p +} + +func (x SettingsSyncAction_DisplayMode) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (SettingsSyncAction_DisplayMode) Descriptor() protoreflect.EnumDescriptor { + return file_waSyncAction_WAWebProtobufSyncAction_proto_enumTypes[6].Descriptor() +} + +func (SettingsSyncAction_DisplayMode) Type() protoreflect.EnumType { + return &file_waSyncAction_WAWebProtobufSyncAction_proto_enumTypes[6] +} + +func (x SettingsSyncAction_DisplayMode) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *SettingsSyncAction_DisplayMode) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = SettingsSyncAction_DisplayMode(num) + return nil +} + +// Deprecated: Use SettingsSyncAction_DisplayMode.Descriptor instead. +func (SettingsSyncAction_DisplayMode) EnumDescriptor() ([]byte, []int) { + return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{1, 1} +} + +type SettingsSyncAction_SettingKey int32 + +const ( + SettingsSyncAction_SETTING_KEY_UNKNOWN SettingsSyncAction_SettingKey = 0 + SettingsSyncAction_START_AT_LOGIN SettingsSyncAction_SettingKey = 1 + SettingsSyncAction_MINIMIZE_TO_TRAY SettingsSyncAction_SettingKey = 2 + SettingsSyncAction_LANGUAGE SettingsSyncAction_SettingKey = 3 + SettingsSyncAction_REPLACE_TEXT_WITH_EMOJI SettingsSyncAction_SettingKey = 4 + SettingsSyncAction_BANNER_NOTIFICATION_DISPLAY_MODE SettingsSyncAction_SettingKey = 5 + SettingsSyncAction_UNREAD_COUNTER_BADGE_DISPLAY_MODE SettingsSyncAction_SettingKey = 6 + SettingsSyncAction_IS_MESSAGES_NOTIFICATION_ENABLED SettingsSyncAction_SettingKey = 7 + SettingsSyncAction_IS_CALLS_NOTIFICATION_ENABLED SettingsSyncAction_SettingKey = 8 + SettingsSyncAction_IS_REACTIONS_NOTIFICATION_ENABLED SettingsSyncAction_SettingKey = 9 + SettingsSyncAction_IS_STATUS_REACTIONS_NOTIFICATION_ENABLED SettingsSyncAction_SettingKey = 10 + SettingsSyncAction_IS_TEXT_PREVIEW_FOR_NOTIFICATION_ENABLED SettingsSyncAction_SettingKey = 11 + SettingsSyncAction_DEFAULT_NOTIFICATION_TONE_ID SettingsSyncAction_SettingKey = 12 + SettingsSyncAction_GROUP_DEFAULT_NOTIFICATION_TONE_ID SettingsSyncAction_SettingKey = 13 + SettingsSyncAction_APP_THEME SettingsSyncAction_SettingKey = 14 + SettingsSyncAction_WALLPAPER_ID SettingsSyncAction_SettingKey = 15 + SettingsSyncAction_IS_DOODLE_WALLPAPER_ENABLED SettingsSyncAction_SettingKey = 16 + SettingsSyncAction_FONT_SIZE SettingsSyncAction_SettingKey = 17 + SettingsSyncAction_IS_PHOTOS_AUTODOWNLOAD_ENABLED SettingsSyncAction_SettingKey = 18 + SettingsSyncAction_IS_AUDIOS_AUTODOWNLOAD_ENABLED SettingsSyncAction_SettingKey = 19 + SettingsSyncAction_IS_VIDEOS_AUTODOWNLOAD_ENABLED SettingsSyncAction_SettingKey = 20 + SettingsSyncAction_IS_DOCUMENTS_AUTODOWNLOAD_ENABLED SettingsSyncAction_SettingKey = 21 + SettingsSyncAction_DISABLE_LINK_PREVIEWS SettingsSyncAction_SettingKey = 22 + SettingsSyncAction_NOTIFICATION_TONE_ID SettingsSyncAction_SettingKey = 23 + SettingsSyncAction_MEDIA_UPLOAD_QUALITY SettingsSyncAction_SettingKey = 24 + SettingsSyncAction_IS_SPELL_CHECK_ENABLED SettingsSyncAction_SettingKey = 25 + SettingsSyncAction_IS_ENTER_TO_SEND_ENABLED SettingsSyncAction_SettingKey = 26 + SettingsSyncAction_IS_GROUP_MESSAGE_NOTIFICATION_ENABLED SettingsSyncAction_SettingKey = 27 + SettingsSyncAction_IS_GROUP_REACTIONS_NOTIFICATION_ENABLED SettingsSyncAction_SettingKey = 28 + SettingsSyncAction_IS_STATUS_NOTIFICATION_ENABLED SettingsSyncAction_SettingKey = 29 + SettingsSyncAction_STATUS_NOTIFICATION_TONE_ID SettingsSyncAction_SettingKey = 30 + SettingsSyncAction_SHOULD_PLAY_SOUND_FOR_CALL_NOTIFICATION SettingsSyncAction_SettingKey = 31 +) + +// Enum value maps for SettingsSyncAction_SettingKey. +var ( + SettingsSyncAction_SettingKey_name = map[int32]string{ + 0: "SETTING_KEY_UNKNOWN", + 1: "START_AT_LOGIN", + 2: "MINIMIZE_TO_TRAY", + 3: "LANGUAGE", + 4: "REPLACE_TEXT_WITH_EMOJI", + 5: "BANNER_NOTIFICATION_DISPLAY_MODE", + 6: "UNREAD_COUNTER_BADGE_DISPLAY_MODE", + 7: "IS_MESSAGES_NOTIFICATION_ENABLED", + 8: "IS_CALLS_NOTIFICATION_ENABLED", + 9: "IS_REACTIONS_NOTIFICATION_ENABLED", + 10: "IS_STATUS_REACTIONS_NOTIFICATION_ENABLED", + 11: "IS_TEXT_PREVIEW_FOR_NOTIFICATION_ENABLED", + 12: "DEFAULT_NOTIFICATION_TONE_ID", + 13: "GROUP_DEFAULT_NOTIFICATION_TONE_ID", + 14: "APP_THEME", + 15: "WALLPAPER_ID", + 16: "IS_DOODLE_WALLPAPER_ENABLED", + 17: "FONT_SIZE", + 18: "IS_PHOTOS_AUTODOWNLOAD_ENABLED", + 19: "IS_AUDIOS_AUTODOWNLOAD_ENABLED", + 20: "IS_VIDEOS_AUTODOWNLOAD_ENABLED", + 21: "IS_DOCUMENTS_AUTODOWNLOAD_ENABLED", + 22: "DISABLE_LINK_PREVIEWS", + 23: "NOTIFICATION_TONE_ID", + 24: "MEDIA_UPLOAD_QUALITY", + 25: "IS_SPELL_CHECK_ENABLED", + 26: "IS_ENTER_TO_SEND_ENABLED", + 27: "IS_GROUP_MESSAGE_NOTIFICATION_ENABLED", + 28: "IS_GROUP_REACTIONS_NOTIFICATION_ENABLED", + 29: "IS_STATUS_NOTIFICATION_ENABLED", + 30: "STATUS_NOTIFICATION_TONE_ID", + 31: "SHOULD_PLAY_SOUND_FOR_CALL_NOTIFICATION", + } + SettingsSyncAction_SettingKey_value = map[string]int32{ + "SETTING_KEY_UNKNOWN": 0, + "START_AT_LOGIN": 1, + "MINIMIZE_TO_TRAY": 2, + "LANGUAGE": 3, + "REPLACE_TEXT_WITH_EMOJI": 4, + "BANNER_NOTIFICATION_DISPLAY_MODE": 5, + "UNREAD_COUNTER_BADGE_DISPLAY_MODE": 6, + "IS_MESSAGES_NOTIFICATION_ENABLED": 7, + "IS_CALLS_NOTIFICATION_ENABLED": 8, + "IS_REACTIONS_NOTIFICATION_ENABLED": 9, + "IS_STATUS_REACTIONS_NOTIFICATION_ENABLED": 10, + "IS_TEXT_PREVIEW_FOR_NOTIFICATION_ENABLED": 11, + "DEFAULT_NOTIFICATION_TONE_ID": 12, + "GROUP_DEFAULT_NOTIFICATION_TONE_ID": 13, + "APP_THEME": 14, + "WALLPAPER_ID": 15, + "IS_DOODLE_WALLPAPER_ENABLED": 16, + "FONT_SIZE": 17, + "IS_PHOTOS_AUTODOWNLOAD_ENABLED": 18, + "IS_AUDIOS_AUTODOWNLOAD_ENABLED": 19, + "IS_VIDEOS_AUTODOWNLOAD_ENABLED": 20, + "IS_DOCUMENTS_AUTODOWNLOAD_ENABLED": 21, + "DISABLE_LINK_PREVIEWS": 22, + "NOTIFICATION_TONE_ID": 23, + "MEDIA_UPLOAD_QUALITY": 24, + "IS_SPELL_CHECK_ENABLED": 25, + "IS_ENTER_TO_SEND_ENABLED": 26, + "IS_GROUP_MESSAGE_NOTIFICATION_ENABLED": 27, + "IS_GROUP_REACTIONS_NOTIFICATION_ENABLED": 28, + "IS_STATUS_NOTIFICATION_ENABLED": 29, + "STATUS_NOTIFICATION_TONE_ID": 30, + "SHOULD_PLAY_SOUND_FOR_CALL_NOTIFICATION": 31, + } +) + +func (x SettingsSyncAction_SettingKey) Enum() *SettingsSyncAction_SettingKey { + p := new(SettingsSyncAction_SettingKey) + *p = x + return p +} + +func (x SettingsSyncAction_SettingKey) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (SettingsSyncAction_SettingKey) Descriptor() protoreflect.EnumDescriptor { + return file_waSyncAction_WAWebProtobufSyncAction_proto_enumTypes[7].Descriptor() +} + +func (SettingsSyncAction_SettingKey) Type() protoreflect.EnumType { + return &file_waSyncAction_WAWebProtobufSyncAction_proto_enumTypes[7] +} + +func (x SettingsSyncAction_SettingKey) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *SettingsSyncAction_SettingKey) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = SettingsSyncAction_SettingKey(num) + return nil +} + +// Deprecated: Use SettingsSyncAction_SettingKey.Descriptor instead. +func (SettingsSyncAction_SettingKey) EnumDescriptor() ([]byte, []int) { + return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{1, 2} +} + +type SettingsSyncAction_SettingPlatform int32 + +const ( + SettingsSyncAction_PLATFORM_UNKNOWN SettingsSyncAction_SettingPlatform = 0 + SettingsSyncAction_WEB SettingsSyncAction_SettingPlatform = 1 + SettingsSyncAction_HYBRID SettingsSyncAction_SettingPlatform = 2 + SettingsSyncAction_WINDOWS SettingsSyncAction_SettingPlatform = 3 + SettingsSyncAction_MAC SettingsSyncAction_SettingPlatform = 4 +) + +// Enum value maps for SettingsSyncAction_SettingPlatform. +var ( + SettingsSyncAction_SettingPlatform_name = map[int32]string{ + 0: "PLATFORM_UNKNOWN", + 1: "WEB", + 2: "HYBRID", + 3: "WINDOWS", + 4: "MAC", + } + SettingsSyncAction_SettingPlatform_value = map[string]int32{ + "PLATFORM_UNKNOWN": 0, + "WEB": 1, + "HYBRID": 2, + "WINDOWS": 3, + "MAC": 4, + } +) + +func (x SettingsSyncAction_SettingPlatform) Enum() *SettingsSyncAction_SettingPlatform { + p := new(SettingsSyncAction_SettingPlatform) + *p = x + return p +} + +func (x SettingsSyncAction_SettingPlatform) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (SettingsSyncAction_SettingPlatform) Descriptor() protoreflect.EnumDescriptor { + return file_waSyncAction_WAWebProtobufSyncAction_proto_enumTypes[8].Descriptor() +} + +func (SettingsSyncAction_SettingPlatform) Type() protoreflect.EnumType { + return &file_waSyncAction_WAWebProtobufSyncAction_proto_enumTypes[8] +} + +func (x SettingsSyncAction_SettingPlatform) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *SettingsSyncAction_SettingPlatform) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = SettingsSyncAction_SettingPlatform(num) + return nil +} + +// Deprecated: Use SettingsSyncAction_SettingPlatform.Descriptor instead. +func (SettingsSyncAction_SettingPlatform) EnumDescriptor() ([]byte, []int) { + return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{1, 3} +} + +type InteractiveMessageAction_InteractiveMessageActionMode int32 + +const ( + InteractiveMessageAction_DISABLE_CTA InteractiveMessageAction_InteractiveMessageActionMode = 1 +) + +// Enum value maps for InteractiveMessageAction_InteractiveMessageActionMode. +var ( + InteractiveMessageAction_InteractiveMessageActionMode_name = map[int32]string{ + 1: "DISABLE_CTA", + } + InteractiveMessageAction_InteractiveMessageActionMode_value = map[string]int32{ + "DISABLE_CTA": 1, + } +) + +func (x InteractiveMessageAction_InteractiveMessageActionMode) Enum() *InteractiveMessageAction_InteractiveMessageActionMode { + p := new(InteractiveMessageAction_InteractiveMessageActionMode) + *p = x + return p +} + +func (x InteractiveMessageAction_InteractiveMessageActionMode) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (InteractiveMessageAction_InteractiveMessageActionMode) Descriptor() protoreflect.EnumDescriptor { + return file_waSyncAction_WAWebProtobufSyncAction_proto_enumTypes[9].Descriptor() +} + +func (InteractiveMessageAction_InteractiveMessageActionMode) Type() protoreflect.EnumType { + return &file_waSyncAction_WAWebProtobufSyncAction_proto_enumTypes[9] +} + +func (x InteractiveMessageAction_InteractiveMessageActionMode) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *InteractiveMessageAction_InteractiveMessageActionMode) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = InteractiveMessageAction_InteractiveMessageActionMode(num) + return nil +} + +// Deprecated: Use InteractiveMessageAction_InteractiveMessageActionMode.Descriptor instead. +func (InteractiveMessageAction_InteractiveMessageActionMode) EnumDescriptor() ([]byte, []int) { + return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{2, 0} +} + +type PrivateProcessingSettingAction_PrivateProcessingStatus int32 + +const ( + PrivateProcessingSettingAction_UNDEFINED PrivateProcessingSettingAction_PrivateProcessingStatus = 0 + PrivateProcessingSettingAction_ENABLED PrivateProcessingSettingAction_PrivateProcessingStatus = 1 + PrivateProcessingSettingAction_DISABLED PrivateProcessingSettingAction_PrivateProcessingStatus = 2 +) + +// Enum value maps for PrivateProcessingSettingAction_PrivateProcessingStatus. +var ( + PrivateProcessingSettingAction_PrivateProcessingStatus_name = map[int32]string{ + 0: "UNDEFINED", + 1: "ENABLED", + 2: "DISABLED", + } + PrivateProcessingSettingAction_PrivateProcessingStatus_value = map[string]int32{ + "UNDEFINED": 0, + "ENABLED": 1, + "DISABLED": 2, + } +) + +func (x PrivateProcessingSettingAction_PrivateProcessingStatus) Enum() *PrivateProcessingSettingAction_PrivateProcessingStatus { + p := new(PrivateProcessingSettingAction_PrivateProcessingStatus) + *p = x + return p +} + +func (x PrivateProcessingSettingAction_PrivateProcessingStatus) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (PrivateProcessingSettingAction_PrivateProcessingStatus) Descriptor() protoreflect.EnumDescriptor { + return file_waSyncAction_WAWebProtobufSyncAction_proto_enumTypes[10].Descriptor() +} + +func (PrivateProcessingSettingAction_PrivateProcessingStatus) Type() protoreflect.EnumType { + return &file_waSyncAction_WAWebProtobufSyncAction_proto_enumTypes[10] +} + +func (x PrivateProcessingSettingAction_PrivateProcessingStatus) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *PrivateProcessingSettingAction_PrivateProcessingStatus) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = PrivateProcessingSettingAction_PrivateProcessingStatus(num) + return nil +} + +// Deprecated: Use PrivateProcessingSettingAction_PrivateProcessingStatus.Descriptor instead. +func (PrivateProcessingSettingAction_PrivateProcessingStatus) EnumDescriptor() ([]byte, []int) { + return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{3, 0} +} + +type AvatarUpdatedAction_AvatarEventType int32 + +const ( + AvatarUpdatedAction_UPDATED AvatarUpdatedAction_AvatarEventType = 0 + AvatarUpdatedAction_CREATED AvatarUpdatedAction_AvatarEventType = 1 + AvatarUpdatedAction_DELETED AvatarUpdatedAction_AvatarEventType = 2 +) + +// Enum value maps for AvatarUpdatedAction_AvatarEventType. +var ( + AvatarUpdatedAction_AvatarEventType_name = map[int32]string{ + 0: "UPDATED", + 1: "CREATED", + 2: "DELETED", + } + AvatarUpdatedAction_AvatarEventType_value = map[string]int32{ + "UPDATED": 0, + "CREATED": 1, + "DELETED": 2, + } +) + +func (x AvatarUpdatedAction_AvatarEventType) Enum() *AvatarUpdatedAction_AvatarEventType { + p := new(AvatarUpdatedAction_AvatarEventType) + *p = x + return p +} + +func (x AvatarUpdatedAction_AvatarEventType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (AvatarUpdatedAction_AvatarEventType) Descriptor() protoreflect.EnumDescriptor { + return file_waSyncAction_WAWebProtobufSyncAction_proto_enumTypes[11].Descriptor() +} + +func (AvatarUpdatedAction_AvatarEventType) Type() protoreflect.EnumType { + return &file_waSyncAction_WAWebProtobufSyncAction_proto_enumTypes[11] +} + +func (x AvatarUpdatedAction_AvatarEventType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *AvatarUpdatedAction_AvatarEventType) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = AvatarUpdatedAction_AvatarEventType(num) + return nil +} + +// Deprecated: Use AvatarUpdatedAction_AvatarEventType.Descriptor instead. +func (AvatarUpdatedAction_AvatarEventType) EnumDescriptor() ([]byte, []int) { + return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{4, 0} +} + +type MaibaAIFeaturesControlAction_MaibaAIFeatureStatus int32 + +const ( + MaibaAIFeaturesControlAction_ENABLED MaibaAIFeaturesControlAction_MaibaAIFeatureStatus = 0 + MaibaAIFeaturesControlAction_ENABLED_HAS_LEARNING MaibaAIFeaturesControlAction_MaibaAIFeatureStatus = 1 + MaibaAIFeaturesControlAction_DISABLED MaibaAIFeaturesControlAction_MaibaAIFeatureStatus = 2 +) + +// Enum value maps for MaibaAIFeaturesControlAction_MaibaAIFeatureStatus. +var ( + MaibaAIFeaturesControlAction_MaibaAIFeatureStatus_name = map[int32]string{ + 0: "ENABLED", + 1: "ENABLED_HAS_LEARNING", + 2: "DISABLED", + } + MaibaAIFeaturesControlAction_MaibaAIFeatureStatus_value = map[string]int32{ + "ENABLED": 0, + "ENABLED_HAS_LEARNING": 1, + "DISABLED": 2, + } +) + +func (x MaibaAIFeaturesControlAction_MaibaAIFeatureStatus) Enum() *MaibaAIFeaturesControlAction_MaibaAIFeatureStatus { + p := new(MaibaAIFeaturesControlAction_MaibaAIFeatureStatus) + *p = x + return p +} + +func (x MaibaAIFeaturesControlAction_MaibaAIFeatureStatus) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (MaibaAIFeaturesControlAction_MaibaAIFeatureStatus) Descriptor() protoreflect.EnumDescriptor { + return file_waSyncAction_WAWebProtobufSyncAction_proto_enumTypes[12].Descriptor() +} + +func (MaibaAIFeaturesControlAction_MaibaAIFeatureStatus) Type() protoreflect.EnumType { + return &file_waSyncAction_WAWebProtobufSyncAction_proto_enumTypes[12] +} + +func (x MaibaAIFeaturesControlAction_MaibaAIFeatureStatus) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *MaibaAIFeaturesControlAction_MaibaAIFeatureStatus) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = MaibaAIFeaturesControlAction_MaibaAIFeatureStatus(num) + return nil +} + +// Deprecated: Use MaibaAIFeaturesControlAction_MaibaAIFeatureStatus.Descriptor instead. +func (MaibaAIFeaturesControlAction_MaibaAIFeatureStatus) EnumDescriptor() ([]byte, []int) { + return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{5, 0} +} + +type PaymentTosAction_PaymentNotice int32 + +const ( + PaymentTosAction_BR_PAY_PRIVACY_POLICY PaymentTosAction_PaymentNotice = 0 +) + +// Enum value maps for PaymentTosAction_PaymentNotice. +var ( + PaymentTosAction_PaymentNotice_name = map[int32]string{ + 0: "BR_PAY_PRIVACY_POLICY", + } + PaymentTosAction_PaymentNotice_value = map[string]int32{ + "BR_PAY_PRIVACY_POLICY": 0, + } +) + +func (x PaymentTosAction_PaymentNotice) Enum() *PaymentTosAction_PaymentNotice { + p := new(PaymentTosAction_PaymentNotice) + *p = x + return p +} + +func (x PaymentTosAction_PaymentNotice) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (PaymentTosAction_PaymentNotice) Descriptor() protoreflect.EnumDescriptor { + return file_waSyncAction_WAWebProtobufSyncAction_proto_enumTypes[13].Descriptor() +} + +func (PaymentTosAction_PaymentNotice) Type() protoreflect.EnumType { + return &file_waSyncAction_WAWebProtobufSyncAction_proto_enumTypes[13] +} + +func (x PaymentTosAction_PaymentNotice) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *PaymentTosAction_PaymentNotice) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = PaymentTosAction_PaymentNotice(num) + return nil +} + +// Deprecated: Use PaymentTosAction_PaymentNotice.Descriptor instead. +func (PaymentTosAction_PaymentNotice) EnumDescriptor() ([]byte, []int) { + return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{6, 0} +} + +type NotificationActivitySettingAction_NotificationActivitySetting int32 + +const ( + NotificationActivitySettingAction_DEFAULT_ALL_MESSAGES NotificationActivitySettingAction_NotificationActivitySetting = 0 + NotificationActivitySettingAction_ALL_MESSAGES NotificationActivitySettingAction_NotificationActivitySetting = 1 + NotificationActivitySettingAction_HIGHLIGHTS NotificationActivitySettingAction_NotificationActivitySetting = 2 + NotificationActivitySettingAction_DEFAULT_HIGHLIGHTS NotificationActivitySettingAction_NotificationActivitySetting = 3 +) + +// Enum value maps for NotificationActivitySettingAction_NotificationActivitySetting. +var ( + NotificationActivitySettingAction_NotificationActivitySetting_name = map[int32]string{ + 0: "DEFAULT_ALL_MESSAGES", + 1: "ALL_MESSAGES", + 2: "HIGHLIGHTS", + 3: "DEFAULT_HIGHLIGHTS", + } + NotificationActivitySettingAction_NotificationActivitySetting_value = map[string]int32{ + "DEFAULT_ALL_MESSAGES": 0, + "ALL_MESSAGES": 1, + "HIGHLIGHTS": 2, + "DEFAULT_HIGHLIGHTS": 3, + } +) + +func (x NotificationActivitySettingAction_NotificationActivitySetting) Enum() *NotificationActivitySettingAction_NotificationActivitySetting { + p := new(NotificationActivitySettingAction_NotificationActivitySetting) + *p = x + return p +} + +func (x NotificationActivitySettingAction_NotificationActivitySetting) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (NotificationActivitySettingAction_NotificationActivitySetting) Descriptor() protoreflect.EnumDescriptor { + return file_waSyncAction_WAWebProtobufSyncAction_proto_enumTypes[14].Descriptor() +} + +func (NotificationActivitySettingAction_NotificationActivitySetting) Type() protoreflect.EnumType { + return &file_waSyncAction_WAWebProtobufSyncAction_proto_enumTypes[14] +} + +func (x NotificationActivitySettingAction_NotificationActivitySetting) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *NotificationActivitySettingAction_NotificationActivitySetting) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = NotificationActivitySettingAction_NotificationActivitySetting(num) + return nil +} + +// Deprecated: Use NotificationActivitySettingAction_NotificationActivitySetting.Descriptor instead. +func (NotificationActivitySettingAction_NotificationActivitySetting) EnumDescriptor() ([]byte, []int) { + return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{7, 0} +} + +type WaffleAccountLinkStateAction_AccountLinkState int32 + +const ( + WaffleAccountLinkStateAction_ACTIVE WaffleAccountLinkStateAction_AccountLinkState = 0 + WaffleAccountLinkStateAction_PAUSED WaffleAccountLinkStateAction_AccountLinkState = 1 + WaffleAccountLinkStateAction_UNLINKED WaffleAccountLinkStateAction_AccountLinkState = 2 +) + +// Enum value maps for WaffleAccountLinkStateAction_AccountLinkState. +var ( + WaffleAccountLinkStateAction_AccountLinkState_name = map[int32]string{ + 0: "ACTIVE", + 1: "PAUSED", + 2: "UNLINKED", + } + WaffleAccountLinkStateAction_AccountLinkState_value = map[string]int32{ + "ACTIVE": 0, + "PAUSED": 1, + "UNLINKED": 2, + } +) + +func (x WaffleAccountLinkStateAction_AccountLinkState) Enum() *WaffleAccountLinkStateAction_AccountLinkState { + p := new(WaffleAccountLinkStateAction_AccountLinkState) + *p = x + return p +} + +func (x WaffleAccountLinkStateAction_AccountLinkState) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (WaffleAccountLinkStateAction_AccountLinkState) Descriptor() protoreflect.EnumDescriptor { + return file_waSyncAction_WAWebProtobufSyncAction_proto_enumTypes[15].Descriptor() +} + +func (WaffleAccountLinkStateAction_AccountLinkState) Type() protoreflect.EnumType { + return &file_waSyncAction_WAWebProtobufSyncAction_proto_enumTypes[15] +} + +func (x WaffleAccountLinkStateAction_AccountLinkState) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *WaffleAccountLinkStateAction_AccountLinkState) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = WaffleAccountLinkStateAction_AccountLinkState(num) + return nil +} + +// Deprecated: Use WaffleAccountLinkStateAction_AccountLinkState.Descriptor instead. +func (WaffleAccountLinkStateAction_AccountLinkState) EnumDescriptor() ([]byte, []int) { + return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{8, 0} +} + +type MerchantPaymentPartnerAction_Status int32 + +const ( + MerchantPaymentPartnerAction_ACTIVE MerchantPaymentPartnerAction_Status = 0 + MerchantPaymentPartnerAction_INACTIVE MerchantPaymentPartnerAction_Status = 1 +) + +// Enum value maps for MerchantPaymentPartnerAction_Status. +var ( + MerchantPaymentPartnerAction_Status_name = map[int32]string{ + 0: "ACTIVE", + 1: "INACTIVE", + } + MerchantPaymentPartnerAction_Status_value = map[string]int32{ + "ACTIVE": 0, + "INACTIVE": 1, + } +) + +func (x MerchantPaymentPartnerAction_Status) Enum() *MerchantPaymentPartnerAction_Status { + p := new(MerchantPaymentPartnerAction_Status) + *p = x + return p +} + +func (x MerchantPaymentPartnerAction_Status) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (MerchantPaymentPartnerAction_Status) Descriptor() protoreflect.EnumDescriptor { + return file_waSyncAction_WAWebProtobufSyncAction_proto_enumTypes[16].Descriptor() +} + +func (MerchantPaymentPartnerAction_Status) Type() protoreflect.EnumType { + return &file_waSyncAction_WAWebProtobufSyncAction_proto_enumTypes[16] +} + +func (x MerchantPaymentPartnerAction_Status) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *MerchantPaymentPartnerAction_Status) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = MerchantPaymentPartnerAction_Status(num) + return nil +} + +// Deprecated: Use MerchantPaymentPartnerAction_Status.Descriptor instead. +func (MerchantPaymentPartnerAction_Status) EnumDescriptor() ([]byte, []int) { + return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{9, 0} +} + +type NoteEditAction_NoteType int32 + +const ( + NoteEditAction_UNSTRUCTURED NoteEditAction_NoteType = 1 + NoteEditAction_STRUCTURED NoteEditAction_NoteType = 2 +) + +// Enum value maps for NoteEditAction_NoteType. +var ( + NoteEditAction_NoteType_name = map[int32]string{ + 1: "UNSTRUCTURED", + 2: "STRUCTURED", + } + NoteEditAction_NoteType_value = map[string]int32{ + "UNSTRUCTURED": 1, + "STRUCTURED": 2, + } +) + +func (x NoteEditAction_NoteType) Enum() *NoteEditAction_NoteType { + p := new(NoteEditAction_NoteType) + *p = x + return p +} + +func (x NoteEditAction_NoteType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (NoteEditAction_NoteType) Descriptor() protoreflect.EnumDescriptor { + return file_waSyncAction_WAWebProtobufSyncAction_proto_enumTypes[17].Descriptor() +} + +func (NoteEditAction_NoteType) Type() protoreflect.EnumType { + return &file_waSyncAction_WAWebProtobufSyncAction_proto_enumTypes[17] +} + +func (x NoteEditAction_NoteType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *NoteEditAction_NoteType) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = NoteEditAction_NoteType(num) + return nil +} + +// Deprecated: Use NoteEditAction_NoteType.Descriptor instead. +func (NoteEditAction_NoteType) EnumDescriptor() ([]byte, []int) { + return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{10, 0} +} + +type StatusPrivacyAction_StatusDistributionMode int32 + +const ( + StatusPrivacyAction_ALLOW_LIST StatusPrivacyAction_StatusDistributionMode = 0 + StatusPrivacyAction_DENY_LIST StatusPrivacyAction_StatusDistributionMode = 1 + StatusPrivacyAction_CONTACTS StatusPrivacyAction_StatusDistributionMode = 2 + StatusPrivacyAction_CLOSE_FRIENDS StatusPrivacyAction_StatusDistributionMode = 3 +) + +// Enum value maps for StatusPrivacyAction_StatusDistributionMode. +var ( + StatusPrivacyAction_StatusDistributionMode_name = map[int32]string{ + 0: "ALLOW_LIST", + 1: "DENY_LIST", + 2: "CONTACTS", + 3: "CLOSE_FRIENDS", + } + StatusPrivacyAction_StatusDistributionMode_value = map[string]int32{ + "ALLOW_LIST": 0, + "DENY_LIST": 1, + "CONTACTS": 2, + "CLOSE_FRIENDS": 3, + } +) + +func (x StatusPrivacyAction_StatusDistributionMode) Enum() *StatusPrivacyAction_StatusDistributionMode { + p := new(StatusPrivacyAction_StatusDistributionMode) + *p = x + return p +} + +func (x StatusPrivacyAction_StatusDistributionMode) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (StatusPrivacyAction_StatusDistributionMode) Descriptor() protoreflect.EnumDescriptor { + return file_waSyncAction_WAWebProtobufSyncAction_proto_enumTypes[18].Descriptor() +} + +func (StatusPrivacyAction_StatusDistributionMode) Type() protoreflect.EnumType { + return &file_waSyncAction_WAWebProtobufSyncAction_proto_enumTypes[18] +} + +func (x StatusPrivacyAction_StatusDistributionMode) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *StatusPrivacyAction_StatusDistributionMode) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = StatusPrivacyAction_StatusDistributionMode(num) + return nil +} + +// Deprecated: Use StatusPrivacyAction_StatusDistributionMode.Descriptor instead. +func (StatusPrivacyAction_StatusDistributionMode) EnumDescriptor() ([]byte, []int) { + return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{11, 0} +} + +type MarketingMessageAction_MarketingMessagePrototypeType int32 + +const ( + MarketingMessageAction_PERSONALIZED MarketingMessageAction_MarketingMessagePrototypeType = 0 +) + +// Enum value maps for MarketingMessageAction_MarketingMessagePrototypeType. +var ( + MarketingMessageAction_MarketingMessagePrototypeType_name = map[int32]string{ + 0: "PERSONALIZED", + } + MarketingMessageAction_MarketingMessagePrototypeType_value = map[string]int32{ + "PERSONALIZED": 0, + } +) + +func (x MarketingMessageAction_MarketingMessagePrototypeType) Enum() *MarketingMessageAction_MarketingMessagePrototypeType { + p := new(MarketingMessageAction_MarketingMessagePrototypeType) + *p = x + return p +} + +func (x MarketingMessageAction_MarketingMessagePrototypeType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (MarketingMessageAction_MarketingMessagePrototypeType) Descriptor() protoreflect.EnumDescriptor { + return file_waSyncAction_WAWebProtobufSyncAction_proto_enumTypes[19].Descriptor() +} + +func (MarketingMessageAction_MarketingMessagePrototypeType) Type() protoreflect.EnumType { + return &file_waSyncAction_WAWebProtobufSyncAction_proto_enumTypes[19] +} + +func (x MarketingMessageAction_MarketingMessagePrototypeType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *MarketingMessageAction_MarketingMessagePrototypeType) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = MarketingMessageAction_MarketingMessagePrototypeType(num) + return nil +} + +// Deprecated: Use MarketingMessageAction_MarketingMessagePrototypeType.Descriptor instead. +func (MarketingMessageAction_MarketingMessagePrototypeType) EnumDescriptor() ([]byte, []int) { + return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{12, 0} +} + +type UsernameChatStartModeAction_ChatStartMode int32 + +const ( + UsernameChatStartModeAction_LID UsernameChatStartModeAction_ChatStartMode = 1 + UsernameChatStartModeAction_PN UsernameChatStartModeAction_ChatStartMode = 2 +) + +// Enum value maps for UsernameChatStartModeAction_ChatStartMode. +var ( + UsernameChatStartModeAction_ChatStartMode_name = map[int32]string{ + 1: "LID", + 2: "PN", + } + UsernameChatStartModeAction_ChatStartMode_value = map[string]int32{ + "LID": 1, + "PN": 2, + } +) + +func (x UsernameChatStartModeAction_ChatStartMode) Enum() *UsernameChatStartModeAction_ChatStartMode { + p := new(UsernameChatStartModeAction_ChatStartMode) + *p = x + return p +} + +func (x UsernameChatStartModeAction_ChatStartMode) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (UsernameChatStartModeAction_ChatStartMode) Descriptor() protoreflect.EnumDescriptor { + return file_waSyncAction_WAWebProtobufSyncAction_proto_enumTypes[20].Descriptor() +} + +func (UsernameChatStartModeAction_ChatStartMode) Type() protoreflect.EnumType { + return &file_waSyncAction_WAWebProtobufSyncAction_proto_enumTypes[20] +} + +func (x UsernameChatStartModeAction_ChatStartMode) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *UsernameChatStartModeAction_ChatStartMode) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = UsernameChatStartModeAction_ChatStartMode(num) + return nil +} + +// Deprecated: Use UsernameChatStartModeAction_ChatStartMode.Descriptor instead. +func (UsernameChatStartModeAction_ChatStartMode) EnumDescriptor() ([]byte, []int) { + return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{13, 0} +} + +type LabelEditAction_ListType int32 + +const ( + LabelEditAction_NONE LabelEditAction_ListType = 0 + LabelEditAction_UNREAD LabelEditAction_ListType = 1 + LabelEditAction_GROUPS LabelEditAction_ListType = 2 + LabelEditAction_FAVORITES LabelEditAction_ListType = 3 + LabelEditAction_PREDEFINED LabelEditAction_ListType = 4 + LabelEditAction_CUSTOM LabelEditAction_ListType = 5 + LabelEditAction_COMMUNITY LabelEditAction_ListType = 6 + LabelEditAction_SERVER_ASSIGNED LabelEditAction_ListType = 7 + LabelEditAction_DRAFTED LabelEditAction_ListType = 8 + LabelEditAction_AI_HANDOFF LabelEditAction_ListType = 9 +) + +// Enum value maps for LabelEditAction_ListType. +var ( + LabelEditAction_ListType_name = map[int32]string{ + 0: "NONE", + 1: "UNREAD", + 2: "GROUPS", + 3: "FAVORITES", + 4: "PREDEFINED", + 5: "CUSTOM", + 6: "COMMUNITY", + 7: "SERVER_ASSIGNED", + 8: "DRAFTED", + 9: "AI_HANDOFF", + } + LabelEditAction_ListType_value = map[string]int32{ + "NONE": 0, + "UNREAD": 1, + "GROUPS": 2, + "FAVORITES": 3, + "PREDEFINED": 4, + "CUSTOM": 5, + "COMMUNITY": 6, + "SERVER_ASSIGNED": 7, + "DRAFTED": 8, + "AI_HANDOFF": 9, + } +) + +func (x LabelEditAction_ListType) Enum() *LabelEditAction_ListType { + p := new(LabelEditAction_ListType) + *p = x + return p +} + +func (x LabelEditAction_ListType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (LabelEditAction_ListType) Descriptor() protoreflect.EnumDescriptor { + return file_waSyncAction_WAWebProtobufSyncAction_proto_enumTypes[21].Descriptor() +} + +func (LabelEditAction_ListType) Type() protoreflect.EnumType { + return &file_waSyncAction_WAWebProtobufSyncAction_proto_enumTypes[21] +} + +func (x LabelEditAction_ListType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *LabelEditAction_ListType) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = LabelEditAction_ListType(num) + return nil +} + +// Deprecated: Use LabelEditAction_ListType.Descriptor instead. +func (LabelEditAction_ListType) EnumDescriptor() ([]byte, []int) { + return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{14, 0} +} + +type PatchDebugData_Platform int32 + +const ( + PatchDebugData_ANDROID PatchDebugData_Platform = 0 + PatchDebugData_SMBA PatchDebugData_Platform = 1 + PatchDebugData_IPHONE PatchDebugData_Platform = 2 + PatchDebugData_SMBI PatchDebugData_Platform = 3 + PatchDebugData_WEB PatchDebugData_Platform = 4 + PatchDebugData_UWP PatchDebugData_Platform = 5 + PatchDebugData_DARWIN PatchDebugData_Platform = 6 + PatchDebugData_IPAD PatchDebugData_Platform = 7 + PatchDebugData_WEAROS PatchDebugData_Platform = 8 + PatchDebugData_WASG PatchDebugData_Platform = 9 + PatchDebugData_WEARM PatchDebugData_Platform = 10 + PatchDebugData_CAPI PatchDebugData_Platform = 11 +) + +// Enum value maps for PatchDebugData_Platform. +var ( + PatchDebugData_Platform_name = map[int32]string{ + 0: "ANDROID", + 1: "SMBA", + 2: "IPHONE", + 3: "SMBI", + 4: "WEB", + 5: "UWP", + 6: "DARWIN", + 7: "IPAD", + 8: "WEAROS", + 9: "WASG", + 10: "WEARM", + 11: "CAPI", + } + PatchDebugData_Platform_value = map[string]int32{ + "ANDROID": 0, + "SMBA": 1, + "IPHONE": 2, + "SMBI": 3, + "WEB": 4, + "UWP": 5, + "DARWIN": 6, + "IPAD": 7, + "WEAROS": 8, + "WASG": 9, + "WEARM": 10, + "CAPI": 11, + } +) + +func (x PatchDebugData_Platform) Enum() *PatchDebugData_Platform { + p := new(PatchDebugData_Platform) + *p = x + return p +} + +func (x PatchDebugData_Platform) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (PatchDebugData_Platform) Descriptor() protoreflect.EnumDescriptor { + return file_waSyncAction_WAWebProtobufSyncAction_proto_enumTypes[22].Descriptor() +} + +func (PatchDebugData_Platform) Type() protoreflect.EnumType { + return &file_waSyncAction_WAWebProtobufSyncAction_proto_enumTypes[22] +} + +func (x PatchDebugData_Platform) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *PatchDebugData_Platform) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = PatchDebugData_Platform(num) + return nil +} + +// Deprecated: Use PatchDebugData_Platform.Descriptor instead. +func (PatchDebugData_Platform) EnumDescriptor() ([]byte, []int) { + return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{15, 0} +} + +type CallLogRecord struct { + state protoimpl.MessageState `protogen:"open.v1"` + CallResult *CallLogRecord_CallResult `protobuf:"varint,1,opt,name=callResult,enum=WAWebProtobufSyncAction.CallLogRecord_CallResult" json:"callResult,omitempty"` + IsDndMode *bool `protobuf:"varint,2,opt,name=isDndMode" json:"isDndMode,omitempty"` + SilenceReason *CallLogRecord_SilenceReason `protobuf:"varint,3,opt,name=silenceReason,enum=WAWebProtobufSyncAction.CallLogRecord_SilenceReason" json:"silenceReason,omitempty"` + Duration *int64 `protobuf:"varint,4,opt,name=duration" json:"duration,omitempty"` + StartTime *int64 `protobuf:"varint,5,opt,name=startTime" json:"startTime,omitempty"` + IsIncoming *bool `protobuf:"varint,6,opt,name=isIncoming" json:"isIncoming,omitempty"` + IsVideo *bool `protobuf:"varint,7,opt,name=isVideo" json:"isVideo,omitempty"` + IsCallLink *bool `protobuf:"varint,8,opt,name=isCallLink" json:"isCallLink,omitempty"` + CallLinkToken *string `protobuf:"bytes,9,opt,name=callLinkToken" json:"callLinkToken,omitempty"` + ScheduledCallID *string `protobuf:"bytes,10,opt,name=scheduledCallID" json:"scheduledCallID,omitempty"` + CallID *string `protobuf:"bytes,11,opt,name=callID" json:"callID,omitempty"` + CallCreatorJID *string `protobuf:"bytes,12,opt,name=callCreatorJID" json:"callCreatorJID,omitempty"` + GroupJID *string `protobuf:"bytes,13,opt,name=groupJID" json:"groupJID,omitempty"` + Participants []*CallLogRecord_ParticipantInfo `protobuf:"bytes,14,rep,name=participants" json:"participants,omitempty"` + CallType *CallLogRecord_CallType `protobuf:"varint,15,opt,name=callType,enum=WAWebProtobufSyncAction.CallLogRecord_CallType" json:"callType,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *CallLogRecord) Reset() { + *x = CallLogRecord{} + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *CallLogRecord) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CallLogRecord) ProtoMessage() {} + +func (x *CallLogRecord) ProtoReflect() protoreflect.Message { + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[0] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CallLogRecord.ProtoReflect.Descriptor instead. +func (*CallLogRecord) Descriptor() ([]byte, []int) { + return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{0} +} + +func (x *CallLogRecord) GetCallResult() CallLogRecord_CallResult { + if x != nil && x.CallResult != nil { + return *x.CallResult + } + return CallLogRecord_CONNECTED +} + +func (x *CallLogRecord) GetIsDndMode() bool { + if x != nil && x.IsDndMode != nil { + return *x.IsDndMode + } + return false +} + +func (x *CallLogRecord) GetSilenceReason() CallLogRecord_SilenceReason { + if x != nil && x.SilenceReason != nil { + return *x.SilenceReason + } + return CallLogRecord_NONE +} + +func (x *CallLogRecord) GetDuration() int64 { + if x != nil && x.Duration != nil { + return *x.Duration + } + return 0 +} + +func (x *CallLogRecord) GetStartTime() int64 { + if x != nil && x.StartTime != nil { + return *x.StartTime + } + return 0 +} + +func (x *CallLogRecord) GetIsIncoming() bool { + if x != nil && x.IsIncoming != nil { + return *x.IsIncoming + } + return false +} + +func (x *CallLogRecord) GetIsVideo() bool { + if x != nil && x.IsVideo != nil { + return *x.IsVideo + } + return false +} + +func (x *CallLogRecord) GetIsCallLink() bool { + if x != nil && x.IsCallLink != nil { + return *x.IsCallLink + } + return false +} + +func (x *CallLogRecord) GetCallLinkToken() string { + if x != nil && x.CallLinkToken != nil { + return *x.CallLinkToken + } + return "" +} + +func (x *CallLogRecord) GetScheduledCallID() string { + if x != nil && x.ScheduledCallID != nil { + return *x.ScheduledCallID + } + return "" +} + +func (x *CallLogRecord) GetCallID() string { + if x != nil && x.CallID != nil { + return *x.CallID + } + return "" +} + +func (x *CallLogRecord) GetCallCreatorJID() string { + if x != nil && x.CallCreatorJID != nil { + return *x.CallCreatorJID + } + return "" +} + +func (x *CallLogRecord) GetGroupJID() string { + if x != nil && x.GroupJID != nil { + return *x.GroupJID + } + return "" +} + +func (x *CallLogRecord) GetParticipants() []*CallLogRecord_ParticipantInfo { + if x != nil { + return x.Participants + } + return nil +} + +func (x *CallLogRecord) GetCallType() CallLogRecord_CallType { + if x != nil && x.CallType != nil { + return *x.CallType + } + return CallLogRecord_REGULAR +} + +type SettingsSyncAction struct { + state protoimpl.MessageState `protogen:"open.v1"` + StartAtLogin *bool `protobuf:"varint,1,opt,name=startAtLogin" json:"startAtLogin,omitempty"` + MinimizeToTray *bool `protobuf:"varint,2,opt,name=minimizeToTray" json:"minimizeToTray,omitempty"` + Language *string `protobuf:"bytes,3,opt,name=language" json:"language,omitempty"` + ReplaceTextWithEmoji *bool `protobuf:"varint,4,opt,name=replaceTextWithEmoji" json:"replaceTextWithEmoji,omitempty"` + BannerNotificationDisplayMode *SettingsSyncAction_DisplayMode `protobuf:"varint,5,opt,name=bannerNotificationDisplayMode,enum=WAWebProtobufSyncAction.SettingsSyncAction_DisplayMode" json:"bannerNotificationDisplayMode,omitempty"` + UnreadCounterBadgeDisplayMode *SettingsSyncAction_DisplayMode `protobuf:"varint,6,opt,name=unreadCounterBadgeDisplayMode,enum=WAWebProtobufSyncAction.SettingsSyncAction_DisplayMode" json:"unreadCounterBadgeDisplayMode,omitempty"` + IsMessagesNotificationEnabled *bool `protobuf:"varint,7,opt,name=isMessagesNotificationEnabled" json:"isMessagesNotificationEnabled,omitempty"` + IsCallsNotificationEnabled *bool `protobuf:"varint,8,opt,name=isCallsNotificationEnabled" json:"isCallsNotificationEnabled,omitempty"` + IsReactionsNotificationEnabled *bool `protobuf:"varint,9,opt,name=isReactionsNotificationEnabled" json:"isReactionsNotificationEnabled,omitempty"` + IsStatusReactionsNotificationEnabled *bool `protobuf:"varint,10,opt,name=isStatusReactionsNotificationEnabled" json:"isStatusReactionsNotificationEnabled,omitempty"` + IsTextPreviewForNotificationEnabled *bool `protobuf:"varint,11,opt,name=isTextPreviewForNotificationEnabled" json:"isTextPreviewForNotificationEnabled,omitempty"` + DefaultNotificationToneID *int32 `protobuf:"varint,12,opt,name=defaultNotificationToneID" json:"defaultNotificationToneID,omitempty"` + GroupDefaultNotificationToneID *int32 `protobuf:"varint,13,opt,name=groupDefaultNotificationToneID" json:"groupDefaultNotificationToneID,omitempty"` + AppTheme *int32 `protobuf:"varint,14,opt,name=appTheme" json:"appTheme,omitempty"` + WallpaperID *int32 `protobuf:"varint,15,opt,name=wallpaperID" json:"wallpaperID,omitempty"` + IsDoodleWallpaperEnabled *bool `protobuf:"varint,16,opt,name=isDoodleWallpaperEnabled" json:"isDoodleWallpaperEnabled,omitempty"` + FontSize *int32 `protobuf:"varint,17,opt,name=fontSize" json:"fontSize,omitempty"` + IsPhotosAutodownloadEnabled *bool `protobuf:"varint,18,opt,name=isPhotosAutodownloadEnabled" json:"isPhotosAutodownloadEnabled,omitempty"` + IsAudiosAutodownloadEnabled *bool `protobuf:"varint,19,opt,name=isAudiosAutodownloadEnabled" json:"isAudiosAutodownloadEnabled,omitempty"` + IsVideosAutodownloadEnabled *bool `protobuf:"varint,20,opt,name=isVideosAutodownloadEnabled" json:"isVideosAutodownloadEnabled,omitempty"` + IsDocumentsAutodownloadEnabled *bool `protobuf:"varint,21,opt,name=isDocumentsAutodownloadEnabled" json:"isDocumentsAutodownloadEnabled,omitempty"` + DisableLinkPreviews *bool `protobuf:"varint,22,opt,name=disableLinkPreviews" json:"disableLinkPreviews,omitempty"` + NotificationToneID *int32 `protobuf:"varint,23,opt,name=notificationToneID" json:"notificationToneID,omitempty"` + MediaUploadQuality *SettingsSyncAction_MediaQualitySetting `protobuf:"varint,24,opt,name=mediaUploadQuality,enum=WAWebProtobufSyncAction.SettingsSyncAction_MediaQualitySetting" json:"mediaUploadQuality,omitempty"` + IsSpellCheckEnabled *bool `protobuf:"varint,25,opt,name=isSpellCheckEnabled" json:"isSpellCheckEnabled,omitempty"` + IsEnterToSendEnabled *bool `protobuf:"varint,26,opt,name=isEnterToSendEnabled" json:"isEnterToSendEnabled,omitempty"` + IsGroupMessageNotificationEnabled *bool `protobuf:"varint,27,opt,name=isGroupMessageNotificationEnabled" json:"isGroupMessageNotificationEnabled,omitempty"` + IsGroupReactionsNotificationEnabled *bool `protobuf:"varint,28,opt,name=isGroupReactionsNotificationEnabled" json:"isGroupReactionsNotificationEnabled,omitempty"` + IsStatusNotificationEnabled *bool `protobuf:"varint,29,opt,name=isStatusNotificationEnabled" json:"isStatusNotificationEnabled,omitempty"` + StatusNotificationToneID *int32 `protobuf:"varint,30,opt,name=statusNotificationToneID" json:"statusNotificationToneID,omitempty"` + ShouldPlaySoundForCallNotification *bool `protobuf:"varint,31,opt,name=shouldPlaySoundForCallNotification" json:"shouldPlaySoundForCallNotification,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *SettingsSyncAction) Reset() { + *x = SettingsSyncAction{} + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *SettingsSyncAction) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SettingsSyncAction) ProtoMessage() {} + +func (x *SettingsSyncAction) ProtoReflect() protoreflect.Message { + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[1] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SettingsSyncAction.ProtoReflect.Descriptor instead. +func (*SettingsSyncAction) Descriptor() ([]byte, []int) { + return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{1} +} + +func (x *SettingsSyncAction) GetStartAtLogin() bool { + if x != nil && x.StartAtLogin != nil { + return *x.StartAtLogin + } + return false +} + +func (x *SettingsSyncAction) GetMinimizeToTray() bool { + if x != nil && x.MinimizeToTray != nil { + return *x.MinimizeToTray + } + return false +} + +func (x *SettingsSyncAction) GetLanguage() string { + if x != nil && x.Language != nil { + return *x.Language + } + return "" +} + +func (x *SettingsSyncAction) GetReplaceTextWithEmoji() bool { + if x != nil && x.ReplaceTextWithEmoji != nil { + return *x.ReplaceTextWithEmoji + } + return false +} + +func (x *SettingsSyncAction) GetBannerNotificationDisplayMode() SettingsSyncAction_DisplayMode { + if x != nil && x.BannerNotificationDisplayMode != nil { + return *x.BannerNotificationDisplayMode + } + return SettingsSyncAction_DISPLAY_MODE_UNKNOWN +} + +func (x *SettingsSyncAction) GetUnreadCounterBadgeDisplayMode() SettingsSyncAction_DisplayMode { + if x != nil && x.UnreadCounterBadgeDisplayMode != nil { + return *x.UnreadCounterBadgeDisplayMode + } + return SettingsSyncAction_DISPLAY_MODE_UNKNOWN +} + +func (x *SettingsSyncAction) GetIsMessagesNotificationEnabled() bool { + if x != nil && x.IsMessagesNotificationEnabled != nil { + return *x.IsMessagesNotificationEnabled + } + return false +} + +func (x *SettingsSyncAction) GetIsCallsNotificationEnabled() bool { + if x != nil && x.IsCallsNotificationEnabled != nil { + return *x.IsCallsNotificationEnabled + } + return false +} + +func (x *SettingsSyncAction) GetIsReactionsNotificationEnabled() bool { + if x != nil && x.IsReactionsNotificationEnabled != nil { + return *x.IsReactionsNotificationEnabled + } + return false +} + +func (x *SettingsSyncAction) GetIsStatusReactionsNotificationEnabled() bool { + if x != nil && x.IsStatusReactionsNotificationEnabled != nil { + return *x.IsStatusReactionsNotificationEnabled + } + return false +} + +func (x *SettingsSyncAction) GetIsTextPreviewForNotificationEnabled() bool { + if x != nil && x.IsTextPreviewForNotificationEnabled != nil { + return *x.IsTextPreviewForNotificationEnabled + } + return false +} + +func (x *SettingsSyncAction) GetDefaultNotificationToneID() int32 { + if x != nil && x.DefaultNotificationToneID != nil { + return *x.DefaultNotificationToneID + } + return 0 +} + +func (x *SettingsSyncAction) GetGroupDefaultNotificationToneID() int32 { + if x != nil && x.GroupDefaultNotificationToneID != nil { + return *x.GroupDefaultNotificationToneID + } + return 0 +} + +func (x *SettingsSyncAction) GetAppTheme() int32 { + if x != nil && x.AppTheme != nil { + return *x.AppTheme + } + return 0 +} + +func (x *SettingsSyncAction) GetWallpaperID() int32 { + if x != nil && x.WallpaperID != nil { + return *x.WallpaperID + } + return 0 +} + +func (x *SettingsSyncAction) GetIsDoodleWallpaperEnabled() bool { + if x != nil && x.IsDoodleWallpaperEnabled != nil { + return *x.IsDoodleWallpaperEnabled + } + return false +} + +func (x *SettingsSyncAction) GetFontSize() int32 { + if x != nil && x.FontSize != nil { + return *x.FontSize + } + return 0 +} + +func (x *SettingsSyncAction) GetIsPhotosAutodownloadEnabled() bool { + if x != nil && x.IsPhotosAutodownloadEnabled != nil { + return *x.IsPhotosAutodownloadEnabled + } + return false +} + +func (x *SettingsSyncAction) GetIsAudiosAutodownloadEnabled() bool { + if x != nil && x.IsAudiosAutodownloadEnabled != nil { + return *x.IsAudiosAutodownloadEnabled + } + return false +} + +func (x *SettingsSyncAction) GetIsVideosAutodownloadEnabled() bool { + if x != nil && x.IsVideosAutodownloadEnabled != nil { + return *x.IsVideosAutodownloadEnabled + } + return false +} + +func (x *SettingsSyncAction) GetIsDocumentsAutodownloadEnabled() bool { + if x != nil && x.IsDocumentsAutodownloadEnabled != nil { + return *x.IsDocumentsAutodownloadEnabled + } + return false +} + +func (x *SettingsSyncAction) GetDisableLinkPreviews() bool { + if x != nil && x.DisableLinkPreviews != nil { + return *x.DisableLinkPreviews + } + return false +} + +func (x *SettingsSyncAction) GetNotificationToneID() int32 { + if x != nil && x.NotificationToneID != nil { + return *x.NotificationToneID + } + return 0 +} + +func (x *SettingsSyncAction) GetMediaUploadQuality() SettingsSyncAction_MediaQualitySetting { + if x != nil && x.MediaUploadQuality != nil { + return *x.MediaUploadQuality + } + return SettingsSyncAction_MEDIA_QUALITY_UNKNOWN +} + +func (x *SettingsSyncAction) GetIsSpellCheckEnabled() bool { + if x != nil && x.IsSpellCheckEnabled != nil { + return *x.IsSpellCheckEnabled + } + return false +} + +func (x *SettingsSyncAction) GetIsEnterToSendEnabled() bool { + if x != nil && x.IsEnterToSendEnabled != nil { + return *x.IsEnterToSendEnabled + } + return false +} + +func (x *SettingsSyncAction) GetIsGroupMessageNotificationEnabled() bool { + if x != nil && x.IsGroupMessageNotificationEnabled != nil { + return *x.IsGroupMessageNotificationEnabled + } + return false +} + +func (x *SettingsSyncAction) GetIsGroupReactionsNotificationEnabled() bool { + if x != nil && x.IsGroupReactionsNotificationEnabled != nil { + return *x.IsGroupReactionsNotificationEnabled + } + return false +} + +func (x *SettingsSyncAction) GetIsStatusNotificationEnabled() bool { + if x != nil && x.IsStatusNotificationEnabled != nil { + return *x.IsStatusNotificationEnabled + } + return false +} + +func (x *SettingsSyncAction) GetStatusNotificationToneID() int32 { + if x != nil && x.StatusNotificationToneID != nil { + return *x.StatusNotificationToneID + } + return 0 +} + +func (x *SettingsSyncAction) GetShouldPlaySoundForCallNotification() bool { + if x != nil && x.ShouldPlaySoundForCallNotification != nil { + return *x.ShouldPlaySoundForCallNotification + } + return false +} + +type InteractiveMessageAction struct { + state protoimpl.MessageState `protogen:"open.v1"` + Type *InteractiveMessageAction_InteractiveMessageActionMode `protobuf:"varint,1,req,name=type,enum=WAWebProtobufSyncAction.InteractiveMessageAction_InteractiveMessageActionMode" json:"type,omitempty"` + AgmID *string `protobuf:"bytes,2,opt,name=agmID" json:"agmID,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *InteractiveMessageAction) Reset() { + *x = InteractiveMessageAction{} + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *InteractiveMessageAction) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*InteractiveMessageAction) ProtoMessage() {} + +func (x *InteractiveMessageAction) ProtoReflect() protoreflect.Message { + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[2] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use InteractiveMessageAction.ProtoReflect.Descriptor instead. +func (*InteractiveMessageAction) Descriptor() ([]byte, []int) { + return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{2} +} + +func (x *InteractiveMessageAction) GetType() InteractiveMessageAction_InteractiveMessageActionMode { + if x != nil && x.Type != nil { + return *x.Type + } + return InteractiveMessageAction_DISABLE_CTA +} + +func (x *InteractiveMessageAction) GetAgmID() string { + if x != nil && x.AgmID != nil { + return *x.AgmID + } + return "" +} + +type PrivateProcessingSettingAction struct { + state protoimpl.MessageState `protogen:"open.v1"` + PrivateProcessingStatus *PrivateProcessingSettingAction_PrivateProcessingStatus `protobuf:"varint,1,opt,name=privateProcessingStatus,enum=WAWebProtobufSyncAction.PrivateProcessingSettingAction_PrivateProcessingStatus" json:"privateProcessingStatus,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *PrivateProcessingSettingAction) Reset() { + *x = PrivateProcessingSettingAction{} + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *PrivateProcessingSettingAction) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PrivateProcessingSettingAction) ProtoMessage() {} + +func (x *PrivateProcessingSettingAction) ProtoReflect() protoreflect.Message { + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[3] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PrivateProcessingSettingAction.ProtoReflect.Descriptor instead. +func (*PrivateProcessingSettingAction) Descriptor() ([]byte, []int) { + return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{3} +} + +func (x *PrivateProcessingSettingAction) GetPrivateProcessingStatus() PrivateProcessingSettingAction_PrivateProcessingStatus { + if x != nil && x.PrivateProcessingStatus != nil { + return *x.PrivateProcessingStatus + } + return PrivateProcessingSettingAction_UNDEFINED +} + +type AvatarUpdatedAction struct { + state protoimpl.MessageState `protogen:"open.v1"` + EventType *AvatarUpdatedAction_AvatarEventType `protobuf:"varint,1,opt,name=eventType,enum=WAWebProtobufSyncAction.AvatarUpdatedAction_AvatarEventType" json:"eventType,omitempty"` + RecentAvatarStickers []*StickerAction `protobuf:"bytes,2,rep,name=recentAvatarStickers" json:"recentAvatarStickers,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *AvatarUpdatedAction) Reset() { + *x = AvatarUpdatedAction{} + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *AvatarUpdatedAction) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AvatarUpdatedAction) ProtoMessage() {} + +func (x *AvatarUpdatedAction) ProtoReflect() protoreflect.Message { + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[4] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AvatarUpdatedAction.ProtoReflect.Descriptor instead. +func (*AvatarUpdatedAction) Descriptor() ([]byte, []int) { + return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{4} +} + +func (x *AvatarUpdatedAction) GetEventType() AvatarUpdatedAction_AvatarEventType { + if x != nil && x.EventType != nil { + return *x.EventType + } + return AvatarUpdatedAction_UPDATED +} + +func (x *AvatarUpdatedAction) GetRecentAvatarStickers() []*StickerAction { + if x != nil { + return x.RecentAvatarStickers + } + return nil +} + +type MaibaAIFeaturesControlAction struct { + state protoimpl.MessageState `protogen:"open.v1"` + AiFeatureStatus *MaibaAIFeaturesControlAction_MaibaAIFeatureStatus `protobuf:"varint,1,opt,name=aiFeatureStatus,enum=WAWebProtobufSyncAction.MaibaAIFeaturesControlAction_MaibaAIFeatureStatus" json:"aiFeatureStatus,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *MaibaAIFeaturesControlAction) Reset() { + *x = MaibaAIFeaturesControlAction{} + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *MaibaAIFeaturesControlAction) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MaibaAIFeaturesControlAction) ProtoMessage() {} + +func (x *MaibaAIFeaturesControlAction) ProtoReflect() protoreflect.Message { + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[5] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MaibaAIFeaturesControlAction.ProtoReflect.Descriptor instead. +func (*MaibaAIFeaturesControlAction) Descriptor() ([]byte, []int) { + return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{5} +} + +func (x *MaibaAIFeaturesControlAction) GetAiFeatureStatus() MaibaAIFeaturesControlAction_MaibaAIFeatureStatus { + if x != nil && x.AiFeatureStatus != nil { + return *x.AiFeatureStatus + } + return MaibaAIFeaturesControlAction_ENABLED +} + +type PaymentTosAction struct { + state protoimpl.MessageState `protogen:"open.v1"` + PaymentNotice *PaymentTosAction_PaymentNotice `protobuf:"varint,1,req,name=paymentNotice,enum=WAWebProtobufSyncAction.PaymentTosAction_PaymentNotice" json:"paymentNotice,omitempty"` + Accepted *bool `protobuf:"varint,2,req,name=accepted" json:"accepted,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *PaymentTosAction) Reset() { + *x = PaymentTosAction{} + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *PaymentTosAction) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PaymentTosAction) ProtoMessage() {} + +func (x *PaymentTosAction) ProtoReflect() protoreflect.Message { + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[6] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PaymentTosAction.ProtoReflect.Descriptor instead. +func (*PaymentTosAction) Descriptor() ([]byte, []int) { + return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{6} +} + +func (x *PaymentTosAction) GetPaymentNotice() PaymentTosAction_PaymentNotice { + if x != nil && x.PaymentNotice != nil { + return *x.PaymentNotice + } + return PaymentTosAction_BR_PAY_PRIVACY_POLICY +} + +func (x *PaymentTosAction) GetAccepted() bool { + if x != nil && x.Accepted != nil { + return *x.Accepted + } + return false +} + +type NotificationActivitySettingAction struct { + state protoimpl.MessageState `protogen:"open.v1"` + NotificationActivitySetting *NotificationActivitySettingAction_NotificationActivitySetting `protobuf:"varint,1,opt,name=notificationActivitySetting,enum=WAWebProtobufSyncAction.NotificationActivitySettingAction_NotificationActivitySetting" json:"notificationActivitySetting,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *NotificationActivitySettingAction) Reset() { + *x = NotificationActivitySettingAction{} + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *NotificationActivitySettingAction) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*NotificationActivitySettingAction) ProtoMessage() {} + +func (x *NotificationActivitySettingAction) ProtoReflect() protoreflect.Message { + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[7] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use NotificationActivitySettingAction.ProtoReflect.Descriptor instead. +func (*NotificationActivitySettingAction) Descriptor() ([]byte, []int) { + return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{7} +} + +func (x *NotificationActivitySettingAction) GetNotificationActivitySetting() NotificationActivitySettingAction_NotificationActivitySetting { + if x != nil && x.NotificationActivitySetting != nil { + return *x.NotificationActivitySetting + } + return NotificationActivitySettingAction_DEFAULT_ALL_MESSAGES +} + +type WaffleAccountLinkStateAction struct { + state protoimpl.MessageState `protogen:"open.v1"` + LinkState *WaffleAccountLinkStateAction_AccountLinkState `protobuf:"varint,2,opt,name=linkState,enum=WAWebProtobufSyncAction.WaffleAccountLinkStateAction_AccountLinkState" json:"linkState,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *WaffleAccountLinkStateAction) Reset() { + *x = WaffleAccountLinkStateAction{} + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *WaffleAccountLinkStateAction) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*WaffleAccountLinkStateAction) ProtoMessage() {} + +func (x *WaffleAccountLinkStateAction) ProtoReflect() protoreflect.Message { + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[8] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use WaffleAccountLinkStateAction.ProtoReflect.Descriptor instead. +func (*WaffleAccountLinkStateAction) Descriptor() ([]byte, []int) { + return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{8} +} + +func (x *WaffleAccountLinkStateAction) GetLinkState() WaffleAccountLinkStateAction_AccountLinkState { + if x != nil && x.LinkState != nil { + return *x.LinkState + } + return WaffleAccountLinkStateAction_ACTIVE +} + +type MerchantPaymentPartnerAction struct { + state protoimpl.MessageState `protogen:"open.v1"` + Status *MerchantPaymentPartnerAction_Status `protobuf:"varint,1,req,name=status,enum=WAWebProtobufSyncAction.MerchantPaymentPartnerAction_Status" json:"status,omitempty"` + Country *string `protobuf:"bytes,2,req,name=country" json:"country,omitempty"` + GatewayName *string `protobuf:"bytes,3,opt,name=gatewayName" json:"gatewayName,omitempty"` + CredentialID *string `protobuf:"bytes,4,opt,name=credentialID" json:"credentialID,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *MerchantPaymentPartnerAction) Reset() { + *x = MerchantPaymentPartnerAction{} + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *MerchantPaymentPartnerAction) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MerchantPaymentPartnerAction) ProtoMessage() {} + +func (x *MerchantPaymentPartnerAction) ProtoReflect() protoreflect.Message { + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[9] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MerchantPaymentPartnerAction.ProtoReflect.Descriptor instead. +func (*MerchantPaymentPartnerAction) Descriptor() ([]byte, []int) { + return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{9} +} + +func (x *MerchantPaymentPartnerAction) GetStatus() MerchantPaymentPartnerAction_Status { + if x != nil && x.Status != nil { + return *x.Status + } + return MerchantPaymentPartnerAction_ACTIVE +} + +func (x *MerchantPaymentPartnerAction) GetCountry() string { + if x != nil && x.Country != nil { + return *x.Country + } + return "" +} + +func (x *MerchantPaymentPartnerAction) GetGatewayName() string { + if x != nil && x.GatewayName != nil { + return *x.GatewayName + } + return "" +} + +func (x *MerchantPaymentPartnerAction) GetCredentialID() string { + if x != nil && x.CredentialID != nil { + return *x.CredentialID + } + return "" +} + +type NoteEditAction struct { + state protoimpl.MessageState `protogen:"open.v1"` + Type *NoteEditAction_NoteType `protobuf:"varint,1,opt,name=type,enum=WAWebProtobufSyncAction.NoteEditAction_NoteType" json:"type,omitempty"` + ChatJID *string `protobuf:"bytes,2,opt,name=chatJID" json:"chatJID,omitempty"` + CreatedAt *int64 `protobuf:"varint,3,opt,name=createdAt" json:"createdAt,omitempty"` + Deleted *bool `protobuf:"varint,4,opt,name=deleted" json:"deleted,omitempty"` + UnstructuredContent *string `protobuf:"bytes,5,opt,name=unstructuredContent" json:"unstructuredContent,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *NoteEditAction) Reset() { + *x = NoteEditAction{} + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *NoteEditAction) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*NoteEditAction) ProtoMessage() {} + +func (x *NoteEditAction) ProtoReflect() protoreflect.Message { + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[10] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use NoteEditAction.ProtoReflect.Descriptor instead. +func (*NoteEditAction) Descriptor() ([]byte, []int) { + return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{10} +} + +func (x *NoteEditAction) GetType() NoteEditAction_NoteType { + if x != nil && x.Type != nil { + return *x.Type + } + return NoteEditAction_UNSTRUCTURED +} + +func (x *NoteEditAction) GetChatJID() string { + if x != nil && x.ChatJID != nil { + return *x.ChatJID + } + return "" +} + +func (x *NoteEditAction) GetCreatedAt() int64 { + if x != nil && x.CreatedAt != nil { + return *x.CreatedAt + } + return 0 +} + +func (x *NoteEditAction) GetDeleted() bool { + if x != nil && x.Deleted != nil { + return *x.Deleted + } + return false +} + +func (x *NoteEditAction) GetUnstructuredContent() string { + if x != nil && x.UnstructuredContent != nil { + return *x.UnstructuredContent + } + return "" +} + +type StatusPrivacyAction struct { + state protoimpl.MessageState `protogen:"open.v1"` + Mode *StatusPrivacyAction_StatusDistributionMode `protobuf:"varint,1,opt,name=mode,enum=WAWebProtobufSyncAction.StatusPrivacyAction_StatusDistributionMode" json:"mode,omitempty"` + UserJID []string `protobuf:"bytes,2,rep,name=userJID" json:"userJID,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *StatusPrivacyAction) Reset() { + *x = StatusPrivacyAction{} + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *StatusPrivacyAction) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StatusPrivacyAction) ProtoMessage() {} + +func (x *StatusPrivacyAction) ProtoReflect() protoreflect.Message { + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[11] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StatusPrivacyAction.ProtoReflect.Descriptor instead. +func (*StatusPrivacyAction) Descriptor() ([]byte, []int) { + return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{11} +} + +func (x *StatusPrivacyAction) GetMode() StatusPrivacyAction_StatusDistributionMode { + if x != nil && x.Mode != nil { + return *x.Mode + } + return StatusPrivacyAction_ALLOW_LIST +} + +func (x *StatusPrivacyAction) GetUserJID() []string { + if x != nil { + return x.UserJID + } + return nil +} + +type MarketingMessageAction struct { + state protoimpl.MessageState `protogen:"open.v1"` + Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + Message *string `protobuf:"bytes,2,opt,name=message" json:"message,omitempty"` + Type *MarketingMessageAction_MarketingMessagePrototypeType `protobuf:"varint,3,opt,name=type,enum=WAWebProtobufSyncAction.MarketingMessageAction_MarketingMessagePrototypeType" json:"type,omitempty"` + CreatedAt *int64 `protobuf:"varint,4,opt,name=createdAt" json:"createdAt,omitempty"` + LastSentAt *int64 `protobuf:"varint,5,opt,name=lastSentAt" json:"lastSentAt,omitempty"` + IsDeleted *bool `protobuf:"varint,6,opt,name=isDeleted" json:"isDeleted,omitempty"` + MediaID *string `protobuf:"bytes,7,opt,name=mediaID" json:"mediaID,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *MarketingMessageAction) Reset() { + *x = MarketingMessageAction{} + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *MarketingMessageAction) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MarketingMessageAction) ProtoMessage() {} + +func (x *MarketingMessageAction) ProtoReflect() protoreflect.Message { + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[12] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MarketingMessageAction.ProtoReflect.Descriptor instead. +func (*MarketingMessageAction) Descriptor() ([]byte, []int) { + return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{12} +} + +func (x *MarketingMessageAction) GetName() string { + if x != nil && x.Name != nil { + return *x.Name + } + return "" +} + +func (x *MarketingMessageAction) GetMessage() string { + if x != nil && x.Message != nil { + return *x.Message + } + return "" +} + +func (x *MarketingMessageAction) GetType() MarketingMessageAction_MarketingMessagePrototypeType { + if x != nil && x.Type != nil { + return *x.Type + } + return MarketingMessageAction_PERSONALIZED +} + +func (x *MarketingMessageAction) GetCreatedAt() int64 { + if x != nil && x.CreatedAt != nil { + return *x.CreatedAt + } + return 0 +} + +func (x *MarketingMessageAction) GetLastSentAt() int64 { + if x != nil && x.LastSentAt != nil { + return *x.LastSentAt + } + return 0 +} + +func (x *MarketingMessageAction) GetIsDeleted() bool { + if x != nil && x.IsDeleted != nil { + return *x.IsDeleted + } + return false +} + +func (x *MarketingMessageAction) GetMediaID() string { + if x != nil && x.MediaID != nil { + return *x.MediaID + } + return "" +} + +type UsernameChatStartModeAction struct { + state protoimpl.MessageState `protogen:"open.v1"` + ChatStartMode *UsernameChatStartModeAction_ChatStartMode `protobuf:"varint,1,opt,name=chatStartMode,enum=WAWebProtobufSyncAction.UsernameChatStartModeAction_ChatStartMode" json:"chatStartMode,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *UsernameChatStartModeAction) Reset() { + *x = UsernameChatStartModeAction{} + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *UsernameChatStartModeAction) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UsernameChatStartModeAction) ProtoMessage() {} + +func (x *UsernameChatStartModeAction) ProtoReflect() protoreflect.Message { + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[13] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UsernameChatStartModeAction.ProtoReflect.Descriptor instead. +func (*UsernameChatStartModeAction) Descriptor() ([]byte, []int) { + return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{13} +} + +func (x *UsernameChatStartModeAction) GetChatStartMode() UsernameChatStartModeAction_ChatStartMode { + if x != nil && x.ChatStartMode != nil { + return *x.ChatStartMode + } + return UsernameChatStartModeAction_LID +} + +type LabelEditAction struct { + state protoimpl.MessageState `protogen:"open.v1"` + Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + Color *int32 `protobuf:"varint,2,opt,name=color" json:"color,omitempty"` + PredefinedID *int32 `protobuf:"varint,3,opt,name=predefinedID" json:"predefinedID,omitempty"` + Deleted *bool `protobuf:"varint,4,opt,name=deleted" json:"deleted,omitempty"` + OrderIndex *int32 `protobuf:"varint,5,opt,name=orderIndex" json:"orderIndex,omitempty"` + IsActive *bool `protobuf:"varint,6,opt,name=isActive" json:"isActive,omitempty"` + Type *LabelEditAction_ListType `protobuf:"varint,7,opt,name=type,enum=WAWebProtobufSyncAction.LabelEditAction_ListType" json:"type,omitempty"` + IsImmutable *bool `protobuf:"varint,8,opt,name=isImmutable" json:"isImmutable,omitempty"` + MuteEndTimeMS *int64 `protobuf:"varint,9,opt,name=muteEndTimeMS" json:"muteEndTimeMS,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *LabelEditAction) Reset() { + *x = LabelEditAction{} + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *LabelEditAction) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*LabelEditAction) ProtoMessage() {} + +func (x *LabelEditAction) ProtoReflect() protoreflect.Message { + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[14] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use LabelEditAction.ProtoReflect.Descriptor instead. +func (*LabelEditAction) Descriptor() ([]byte, []int) { + return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{14} +} + +func (x *LabelEditAction) GetName() string { + if x != nil && x.Name != nil { + return *x.Name + } + return "" +} + +func (x *LabelEditAction) GetColor() int32 { + if x != nil && x.Color != nil { + return *x.Color + } + return 0 +} + +func (x *LabelEditAction) GetPredefinedID() int32 { + if x != nil && x.PredefinedID != nil { + return *x.PredefinedID + } + return 0 +} + +func (x *LabelEditAction) GetDeleted() bool { + if x != nil && x.Deleted != nil { + return *x.Deleted + } + return false +} + +func (x *LabelEditAction) GetOrderIndex() int32 { + if x != nil && x.OrderIndex != nil { + return *x.OrderIndex + } + return 0 +} + +func (x *LabelEditAction) GetIsActive() bool { + if x != nil && x.IsActive != nil { + return *x.IsActive + } + return false +} + +func (x *LabelEditAction) GetType() LabelEditAction_ListType { + if x != nil && x.Type != nil { + return *x.Type + } + return LabelEditAction_NONE +} + +func (x *LabelEditAction) GetIsImmutable() bool { + if x != nil && x.IsImmutable != nil { + return *x.IsImmutable + } + return false +} + +func (x *LabelEditAction) GetMuteEndTimeMS() int64 { + if x != nil && x.MuteEndTimeMS != nil { + return *x.MuteEndTimeMS + } + return 0 +} + +type PatchDebugData struct { + state protoimpl.MessageState `protogen:"open.v1"` + CurrentLthash []byte `protobuf:"bytes,1,opt,name=currentLthash" json:"currentLthash,omitempty"` + NewLthash []byte `protobuf:"bytes,2,opt,name=newLthash" json:"newLthash,omitempty"` + PatchVersion []byte `protobuf:"bytes,3,opt,name=patchVersion" json:"patchVersion,omitempty"` + CollectionName []byte `protobuf:"bytes,4,opt,name=collectionName" json:"collectionName,omitempty"` + FirstFourBytesFromAHashOfSnapshotMACKey []byte `protobuf:"bytes,5,opt,name=firstFourBytesFromAHashOfSnapshotMACKey" json:"firstFourBytesFromAHashOfSnapshotMACKey,omitempty"` + NewLthashSubtract []byte `protobuf:"bytes,6,opt,name=newLthashSubtract" json:"newLthashSubtract,omitempty"` + NumberAdd *int32 `protobuf:"varint,7,opt,name=numberAdd" json:"numberAdd,omitempty"` + NumberRemove *int32 `protobuf:"varint,8,opt,name=numberRemove" json:"numberRemove,omitempty"` + NumberOverride *int32 `protobuf:"varint,9,opt,name=numberOverride" json:"numberOverride,omitempty"` + SenderPlatform *PatchDebugData_Platform `protobuf:"varint,10,opt,name=senderPlatform,enum=WAWebProtobufSyncAction.PatchDebugData_Platform" json:"senderPlatform,omitempty"` + IsSenderPrimary *bool `protobuf:"varint,11,opt,name=isSenderPrimary" json:"isSenderPrimary,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *PatchDebugData) Reset() { + *x = PatchDebugData{} + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *PatchDebugData) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PatchDebugData) ProtoMessage() {} + +func (x *PatchDebugData) ProtoReflect() protoreflect.Message { + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[15] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PatchDebugData.ProtoReflect.Descriptor instead. +func (*PatchDebugData) Descriptor() ([]byte, []int) { + return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{15} +} + +func (x *PatchDebugData) GetCurrentLthash() []byte { + if x != nil { + return x.CurrentLthash + } + return nil +} + +func (x *PatchDebugData) GetNewLthash() []byte { + if x != nil { + return x.NewLthash + } + return nil +} + +func (x *PatchDebugData) GetPatchVersion() []byte { + if x != nil { + return x.PatchVersion + } + return nil +} + +func (x *PatchDebugData) GetCollectionName() []byte { + if x != nil { + return x.CollectionName + } + return nil +} + +func (x *PatchDebugData) GetFirstFourBytesFromAHashOfSnapshotMACKey() []byte { + if x != nil { + return x.FirstFourBytesFromAHashOfSnapshotMACKey + } + return nil +} + +func (x *PatchDebugData) GetNewLthashSubtract() []byte { + if x != nil { + return x.NewLthashSubtract + } + return nil +} + +func (x *PatchDebugData) GetNumberAdd() int32 { + if x != nil && x.NumberAdd != nil { + return *x.NumberAdd + } + return 0 +} + +func (x *PatchDebugData) GetNumberRemove() int32 { + if x != nil && x.NumberRemove != nil { + return *x.NumberRemove + } + return 0 +} + +func (x *PatchDebugData) GetNumberOverride() int32 { + if x != nil && x.NumberOverride != nil { + return *x.NumberOverride + } + return 0 +} + +func (x *PatchDebugData) GetSenderPlatform() PatchDebugData_Platform { + if x != nil && x.SenderPlatform != nil { + return *x.SenderPlatform + } + return PatchDebugData_ANDROID +} + +func (x *PatchDebugData) GetIsSenderPrimary() bool { + if x != nil && x.IsSenderPrimary != nil { + return *x.IsSenderPrimary + } + return false +} + +type RecentEmojiWeight struct { + state protoimpl.MessageState `protogen:"open.v1"` + Emoji *string `protobuf:"bytes,1,opt,name=emoji" json:"emoji,omitempty"` + Weight *float32 `protobuf:"fixed32,2,opt,name=weight" json:"weight,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *RecentEmojiWeight) Reset() { + *x = RecentEmojiWeight{} + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[16] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *RecentEmojiWeight) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RecentEmojiWeight) ProtoMessage() {} + +func (x *RecentEmojiWeight) ProtoReflect() protoreflect.Message { + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[16] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RecentEmojiWeight.ProtoReflect.Descriptor instead. +func (*RecentEmojiWeight) Descriptor() ([]byte, []int) { + return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{16} +} + +func (x *RecentEmojiWeight) GetEmoji() string { + if x != nil && x.Emoji != nil { + return *x.Emoji + } + return "" +} + +func (x *RecentEmojiWeight) GetWeight() float32 { + if x != nil && x.Weight != nil { + return *x.Weight + } + return 0 +} + +type SyncActionValue struct { + state protoimpl.MessageState `protogen:"open.v1"` + Timestamp *int64 `protobuf:"varint,1,opt,name=timestamp" json:"timestamp,omitempty"` + StarAction *StarAction `protobuf:"bytes,2,opt,name=starAction" json:"starAction,omitempty"` + ContactAction *ContactAction `protobuf:"bytes,3,opt,name=contactAction" json:"contactAction,omitempty"` + MuteAction *MuteAction `protobuf:"bytes,4,opt,name=muteAction" json:"muteAction,omitempty"` + PinAction *PinAction `protobuf:"bytes,5,opt,name=pinAction" json:"pinAction,omitempty"` + PushNameSetting *PushNameSetting `protobuf:"bytes,7,opt,name=pushNameSetting" json:"pushNameSetting,omitempty"` + QuickReplyAction *QuickReplyAction `protobuf:"bytes,8,opt,name=quickReplyAction" json:"quickReplyAction,omitempty"` + RecentEmojiWeightsAction *RecentEmojiWeightsAction `protobuf:"bytes,11,opt,name=recentEmojiWeightsAction" json:"recentEmojiWeightsAction,omitempty"` + LabelEditAction *LabelEditAction `protobuf:"bytes,14,opt,name=labelEditAction" json:"labelEditAction,omitempty"` + LabelAssociationAction *LabelAssociationAction `protobuf:"bytes,15,opt,name=labelAssociationAction" json:"labelAssociationAction,omitempty"` + LocaleSetting *LocaleSetting `protobuf:"bytes,16,opt,name=localeSetting" json:"localeSetting,omitempty"` + ArchiveChatAction *ArchiveChatAction `protobuf:"bytes,17,opt,name=archiveChatAction" json:"archiveChatAction,omitempty"` + DeleteMessageForMeAction *DeleteMessageForMeAction `protobuf:"bytes,18,opt,name=deleteMessageForMeAction" json:"deleteMessageForMeAction,omitempty"` + KeyExpiration *KeyExpiration `protobuf:"bytes,19,opt,name=keyExpiration" json:"keyExpiration,omitempty"` + MarkChatAsReadAction *MarkChatAsReadAction `protobuf:"bytes,20,opt,name=markChatAsReadAction" json:"markChatAsReadAction,omitempty"` + ClearChatAction *ClearChatAction `protobuf:"bytes,21,opt,name=clearChatAction" json:"clearChatAction,omitempty"` + DeleteChatAction *DeleteChatAction `protobuf:"bytes,22,opt,name=deleteChatAction" json:"deleteChatAction,omitempty"` + UnarchiveChatsSetting *UnarchiveChatsSetting `protobuf:"bytes,23,opt,name=unarchiveChatsSetting" json:"unarchiveChatsSetting,omitempty"` + PrimaryFeature *PrimaryFeature `protobuf:"bytes,24,opt,name=primaryFeature" json:"primaryFeature,omitempty"` + AndroidUnsupportedActions *AndroidUnsupportedActions `protobuf:"bytes,26,opt,name=androidUnsupportedActions" json:"androidUnsupportedActions,omitempty"` + AgentAction *AgentAction `protobuf:"bytes,27,opt,name=agentAction" json:"agentAction,omitempty"` + SubscriptionAction *SubscriptionAction `protobuf:"bytes,28,opt,name=subscriptionAction" json:"subscriptionAction,omitempty"` + UserStatusMuteAction *UserStatusMuteAction `protobuf:"bytes,29,opt,name=userStatusMuteAction" json:"userStatusMuteAction,omitempty"` + TimeFormatAction *TimeFormatAction `protobuf:"bytes,30,opt,name=timeFormatAction" json:"timeFormatAction,omitempty"` + NuxAction *NuxAction `protobuf:"bytes,31,opt,name=nuxAction" json:"nuxAction,omitempty"` + PrimaryVersionAction *PrimaryVersionAction `protobuf:"bytes,32,opt,name=primaryVersionAction" json:"primaryVersionAction,omitempty"` + StickerAction *StickerAction `protobuf:"bytes,33,opt,name=stickerAction" json:"stickerAction,omitempty"` + RemoveRecentStickerAction *RemoveRecentStickerAction `protobuf:"bytes,34,opt,name=removeRecentStickerAction" json:"removeRecentStickerAction,omitempty"` + ChatAssignment *ChatAssignmentAction `protobuf:"bytes,35,opt,name=chatAssignment" json:"chatAssignment,omitempty"` + ChatAssignmentOpenedStatus *ChatAssignmentOpenedStatusAction `protobuf:"bytes,36,opt,name=chatAssignmentOpenedStatus" json:"chatAssignmentOpenedStatus,omitempty"` + PnForLidChatAction *PnForLidChatAction `protobuf:"bytes,37,opt,name=pnForLidChatAction" json:"pnForLidChatAction,omitempty"` + MarketingMessageAction *MarketingMessageAction `protobuf:"bytes,38,opt,name=marketingMessageAction" json:"marketingMessageAction,omitempty"` + MarketingMessageBroadcastAction *MarketingMessageBroadcastAction `protobuf:"bytes,39,opt,name=marketingMessageBroadcastAction" json:"marketingMessageBroadcastAction,omitempty"` + ExternalWebBetaAction *ExternalWebBetaAction `protobuf:"bytes,40,opt,name=externalWebBetaAction" json:"externalWebBetaAction,omitempty"` + PrivacySettingRelayAllCalls *PrivacySettingRelayAllCalls `protobuf:"bytes,41,opt,name=privacySettingRelayAllCalls" json:"privacySettingRelayAllCalls,omitempty"` + CallLogAction *CallLogAction `protobuf:"bytes,42,opt,name=callLogAction" json:"callLogAction,omitempty"` + UgcBot *UGCBot `protobuf:"bytes,43,opt,name=ugcBot" json:"ugcBot,omitempty"` + StatusPrivacy *StatusPrivacyAction `protobuf:"bytes,44,opt,name=statusPrivacy" json:"statusPrivacy,omitempty"` + BotWelcomeRequestAction *BotWelcomeRequestAction `protobuf:"bytes,45,opt,name=botWelcomeRequestAction" json:"botWelcomeRequestAction,omitempty"` + DeleteIndividualCallLog *DeleteIndividualCallLogAction `protobuf:"bytes,46,opt,name=deleteIndividualCallLog" json:"deleteIndividualCallLog,omitempty"` + LabelReorderingAction *LabelReorderingAction `protobuf:"bytes,47,opt,name=labelReorderingAction" json:"labelReorderingAction,omitempty"` + PaymentInfoAction *PaymentInfoAction `protobuf:"bytes,48,opt,name=paymentInfoAction" json:"paymentInfoAction,omitempty"` + CustomPaymentMethodsAction *CustomPaymentMethodsAction `protobuf:"bytes,49,opt,name=customPaymentMethodsAction" json:"customPaymentMethodsAction,omitempty"` + LockChatAction *LockChatAction `protobuf:"bytes,50,opt,name=lockChatAction" json:"lockChatAction,omitempty"` + ChatLockSettings *waChatLockSettings.ChatLockSettings `protobuf:"bytes,51,opt,name=chatLockSettings" json:"chatLockSettings,omitempty"` + WamoUserIdentifierAction *WamoUserIdentifierAction `protobuf:"bytes,52,opt,name=wamoUserIdentifierAction" json:"wamoUserIdentifierAction,omitempty"` + PrivacySettingDisableLinkPreviewsAction *PrivacySettingDisableLinkPreviewsAction `protobuf:"bytes,53,opt,name=privacySettingDisableLinkPreviewsAction" json:"privacySettingDisableLinkPreviewsAction,omitempty"` + DeviceCapabilities *waDeviceCapabilities.DeviceCapabilities `protobuf:"bytes,54,opt,name=deviceCapabilities" json:"deviceCapabilities,omitempty"` + NoteEditAction *NoteEditAction `protobuf:"bytes,55,opt,name=noteEditAction" json:"noteEditAction,omitempty"` + FavoritesAction *FavoritesAction `protobuf:"bytes,56,opt,name=favoritesAction" json:"favoritesAction,omitempty"` + MerchantPaymentPartnerAction *MerchantPaymentPartnerAction `protobuf:"bytes,57,opt,name=merchantPaymentPartnerAction" json:"merchantPaymentPartnerAction,omitempty"` + WaffleAccountLinkStateAction *WaffleAccountLinkStateAction `protobuf:"bytes,58,opt,name=waffleAccountLinkStateAction" json:"waffleAccountLinkStateAction,omitempty"` + UsernameChatStartMode *UsernameChatStartModeAction `protobuf:"bytes,59,opt,name=usernameChatStartMode" json:"usernameChatStartMode,omitempty"` + NotificationActivitySettingAction *NotificationActivitySettingAction `protobuf:"bytes,60,opt,name=notificationActivitySettingAction" json:"notificationActivitySettingAction,omitempty"` + LidContactAction *LidContactAction `protobuf:"bytes,61,opt,name=lidContactAction" json:"lidContactAction,omitempty"` + CtwaPerCustomerDataSharingAction *CtwaPerCustomerDataSharingAction `protobuf:"bytes,62,opt,name=ctwaPerCustomerDataSharingAction" json:"ctwaPerCustomerDataSharingAction,omitempty"` + PaymentTosAction *PaymentTosAction `protobuf:"bytes,63,opt,name=paymentTosAction" json:"paymentTosAction,omitempty"` + PrivacySettingChannelsPersonalisedRecommendationAction *PrivacySettingChannelsPersonalisedRecommendationAction `protobuf:"bytes,64,opt,name=privacySettingChannelsPersonalisedRecommendationAction" json:"privacySettingChannelsPersonalisedRecommendationAction,omitempty"` + DetectedOutcomesStatusAction *DetectedOutcomesStatusAction `protobuf:"bytes,66,opt,name=detectedOutcomesStatusAction" json:"detectedOutcomesStatusAction,omitempty"` + MaibaAiFeaturesControlAction *MaibaAIFeaturesControlAction `protobuf:"bytes,68,opt,name=maibaAiFeaturesControlAction" json:"maibaAiFeaturesControlAction,omitempty"` + BusinessBroadcastListAction *BusinessBroadcastListAction `protobuf:"bytes,69,opt,name=businessBroadcastListAction" json:"businessBroadcastListAction,omitempty"` + MusicUserIDAction *MusicUserIdAction `protobuf:"bytes,70,opt,name=musicUserIDAction" json:"musicUserIDAction,omitempty"` + StatusPostOptInNotificationPreferencesAction *StatusPostOptInNotificationPreferencesAction `protobuf:"bytes,71,opt,name=statusPostOptInNotificationPreferencesAction" json:"statusPostOptInNotificationPreferencesAction,omitempty"` + AvatarUpdatedAction *AvatarUpdatedAction `protobuf:"bytes,72,opt,name=avatarUpdatedAction" json:"avatarUpdatedAction,omitempty"` + PrivateProcessingSettingAction *PrivateProcessingSettingAction `protobuf:"bytes,74,opt,name=privateProcessingSettingAction" json:"privateProcessingSettingAction,omitempty"` + NewsletterSavedInterestsAction *NewsletterSavedInterestsAction `protobuf:"bytes,75,opt,name=newsletterSavedInterestsAction" json:"newsletterSavedInterestsAction,omitempty"` + AiThreadRenameAction *AiThreadRenameAction `protobuf:"bytes,76,opt,name=aiThreadRenameAction" json:"aiThreadRenameAction,omitempty"` + InteractiveMessageAction *InteractiveMessageAction `protobuf:"bytes,77,opt,name=interactiveMessageAction" json:"interactiveMessageAction,omitempty"` + SettingsSyncAction *SettingsSyncAction `protobuf:"bytes,78,opt,name=settingsSyncAction" json:"settingsSyncAction,omitempty"` + OutContactAction *OutContactAction `protobuf:"bytes,79,opt,name=outContactAction" json:"outContactAction,omitempty"` + NctSaltSyncAction *NctSaltSyncAction `protobuf:"bytes,80,opt,name=nctSaltSyncAction" json:"nctSaltSyncAction,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *SyncActionValue) Reset() { + *x = SyncActionValue{} + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[17] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *SyncActionValue) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SyncActionValue) ProtoMessage() {} + +func (x *SyncActionValue) ProtoReflect() protoreflect.Message { + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[17] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SyncActionValue.ProtoReflect.Descriptor instead. +func (*SyncActionValue) Descriptor() ([]byte, []int) { + return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{17} +} + +func (x *SyncActionValue) GetTimestamp() int64 { + if x != nil && x.Timestamp != nil { + return *x.Timestamp + } + return 0 +} + +func (x *SyncActionValue) GetStarAction() *StarAction { + if x != nil { + return x.StarAction + } + return nil +} + +func (x *SyncActionValue) GetContactAction() *ContactAction { + if x != nil { + return x.ContactAction + } + return nil +} + +func (x *SyncActionValue) GetMuteAction() *MuteAction { + if x != nil { + return x.MuteAction + } + return nil +} + +func (x *SyncActionValue) GetPinAction() *PinAction { + if x != nil { + return x.PinAction + } + return nil +} + +func (x *SyncActionValue) GetPushNameSetting() *PushNameSetting { + if x != nil { + return x.PushNameSetting + } + return nil +} + +func (x *SyncActionValue) GetQuickReplyAction() *QuickReplyAction { + if x != nil { + return x.QuickReplyAction + } + return nil +} + +func (x *SyncActionValue) GetRecentEmojiWeightsAction() *RecentEmojiWeightsAction { + if x != nil { + return x.RecentEmojiWeightsAction + } + return nil +} + +func (x *SyncActionValue) GetLabelEditAction() *LabelEditAction { + if x != nil { + return x.LabelEditAction + } + return nil +} + +func (x *SyncActionValue) GetLabelAssociationAction() *LabelAssociationAction { + if x != nil { + return x.LabelAssociationAction + } + return nil +} + +func (x *SyncActionValue) GetLocaleSetting() *LocaleSetting { + if x != nil { + return x.LocaleSetting + } + return nil +} + +func (x *SyncActionValue) GetArchiveChatAction() *ArchiveChatAction { + if x != nil { + return x.ArchiveChatAction + } + return nil +} + +func (x *SyncActionValue) GetDeleteMessageForMeAction() *DeleteMessageForMeAction { + if x != nil { + return x.DeleteMessageForMeAction + } + return nil +} + +func (x *SyncActionValue) GetKeyExpiration() *KeyExpiration { + if x != nil { + return x.KeyExpiration + } + return nil +} + +func (x *SyncActionValue) GetMarkChatAsReadAction() *MarkChatAsReadAction { + if x != nil { + return x.MarkChatAsReadAction + } + return nil +} + +func (x *SyncActionValue) GetClearChatAction() *ClearChatAction { + if x != nil { + return x.ClearChatAction + } + return nil +} + +func (x *SyncActionValue) GetDeleteChatAction() *DeleteChatAction { + if x != nil { + return x.DeleteChatAction + } + return nil +} + +func (x *SyncActionValue) GetUnarchiveChatsSetting() *UnarchiveChatsSetting { + if x != nil { + return x.UnarchiveChatsSetting + } + return nil +} + +func (x *SyncActionValue) GetPrimaryFeature() *PrimaryFeature { + if x != nil { + return x.PrimaryFeature + } + return nil +} + +func (x *SyncActionValue) GetAndroidUnsupportedActions() *AndroidUnsupportedActions { + if x != nil { + return x.AndroidUnsupportedActions + } + return nil +} + +func (x *SyncActionValue) GetAgentAction() *AgentAction { + if x != nil { + return x.AgentAction + } + return nil +} + +func (x *SyncActionValue) GetSubscriptionAction() *SubscriptionAction { + if x != nil { + return x.SubscriptionAction + } + return nil +} + +func (x *SyncActionValue) GetUserStatusMuteAction() *UserStatusMuteAction { + if x != nil { + return x.UserStatusMuteAction + } + return nil +} + +func (x *SyncActionValue) GetTimeFormatAction() *TimeFormatAction { + if x != nil { + return x.TimeFormatAction + } + return nil +} + +func (x *SyncActionValue) GetNuxAction() *NuxAction { + if x != nil { + return x.NuxAction + } + return nil +} + +func (x *SyncActionValue) GetPrimaryVersionAction() *PrimaryVersionAction { + if x != nil { + return x.PrimaryVersionAction + } + return nil +} + +func (x *SyncActionValue) GetStickerAction() *StickerAction { + if x != nil { + return x.StickerAction + } + return nil +} + +func (x *SyncActionValue) GetRemoveRecentStickerAction() *RemoveRecentStickerAction { + if x != nil { + return x.RemoveRecentStickerAction + } + return nil +} + +func (x *SyncActionValue) GetChatAssignment() *ChatAssignmentAction { + if x != nil { + return x.ChatAssignment + } + return nil +} + +func (x *SyncActionValue) GetChatAssignmentOpenedStatus() *ChatAssignmentOpenedStatusAction { + if x != nil { + return x.ChatAssignmentOpenedStatus + } + return nil +} + +func (x *SyncActionValue) GetPnForLidChatAction() *PnForLidChatAction { + if x != nil { + return x.PnForLidChatAction + } + return nil +} + +func (x *SyncActionValue) GetMarketingMessageAction() *MarketingMessageAction { + if x != nil { + return x.MarketingMessageAction + } + return nil +} + +func (x *SyncActionValue) GetMarketingMessageBroadcastAction() *MarketingMessageBroadcastAction { + if x != nil { + return x.MarketingMessageBroadcastAction + } + return nil +} + +func (x *SyncActionValue) GetExternalWebBetaAction() *ExternalWebBetaAction { + if x != nil { + return x.ExternalWebBetaAction + } + return nil +} + +func (x *SyncActionValue) GetPrivacySettingRelayAllCalls() *PrivacySettingRelayAllCalls { + if x != nil { + return x.PrivacySettingRelayAllCalls + } + return nil +} + +func (x *SyncActionValue) GetCallLogAction() *CallLogAction { + if x != nil { + return x.CallLogAction + } + return nil +} + +func (x *SyncActionValue) GetUgcBot() *UGCBot { + if x != nil { + return x.UgcBot + } + return nil +} + +func (x *SyncActionValue) GetStatusPrivacy() *StatusPrivacyAction { + if x != nil { + return x.StatusPrivacy + } + return nil +} + +func (x *SyncActionValue) GetBotWelcomeRequestAction() *BotWelcomeRequestAction { + if x != nil { + return x.BotWelcomeRequestAction + } + return nil +} + +func (x *SyncActionValue) GetDeleteIndividualCallLog() *DeleteIndividualCallLogAction { + if x != nil { + return x.DeleteIndividualCallLog + } + return nil +} + +func (x *SyncActionValue) GetLabelReorderingAction() *LabelReorderingAction { + if x != nil { + return x.LabelReorderingAction + } + return nil +} + +func (x *SyncActionValue) GetPaymentInfoAction() *PaymentInfoAction { + if x != nil { + return x.PaymentInfoAction + } + return nil +} + +func (x *SyncActionValue) GetCustomPaymentMethodsAction() *CustomPaymentMethodsAction { + if x != nil { + return x.CustomPaymentMethodsAction + } + return nil +} + +func (x *SyncActionValue) GetLockChatAction() *LockChatAction { + if x != nil { + return x.LockChatAction + } + return nil +} + +func (x *SyncActionValue) GetChatLockSettings() *waChatLockSettings.ChatLockSettings { + if x != nil { + return x.ChatLockSettings + } + return nil +} + +func (x *SyncActionValue) GetWamoUserIdentifierAction() *WamoUserIdentifierAction { + if x != nil { + return x.WamoUserIdentifierAction + } + return nil +} + +func (x *SyncActionValue) GetPrivacySettingDisableLinkPreviewsAction() *PrivacySettingDisableLinkPreviewsAction { + if x != nil { + return x.PrivacySettingDisableLinkPreviewsAction + } + return nil +} + +func (x *SyncActionValue) GetDeviceCapabilities() *waDeviceCapabilities.DeviceCapabilities { + if x != nil { + return x.DeviceCapabilities + } + return nil +} + +func (x *SyncActionValue) GetNoteEditAction() *NoteEditAction { + if x != nil { + return x.NoteEditAction + } + return nil +} + +func (x *SyncActionValue) GetFavoritesAction() *FavoritesAction { + if x != nil { + return x.FavoritesAction + } + return nil +} + +func (x *SyncActionValue) GetMerchantPaymentPartnerAction() *MerchantPaymentPartnerAction { + if x != nil { + return x.MerchantPaymentPartnerAction + } + return nil +} + +func (x *SyncActionValue) GetWaffleAccountLinkStateAction() *WaffleAccountLinkStateAction { + if x != nil { + return x.WaffleAccountLinkStateAction + } + return nil +} + +func (x *SyncActionValue) GetUsernameChatStartMode() *UsernameChatStartModeAction { + if x != nil { + return x.UsernameChatStartMode + } + return nil +} + +func (x *SyncActionValue) GetNotificationActivitySettingAction() *NotificationActivitySettingAction { + if x != nil { + return x.NotificationActivitySettingAction + } + return nil +} + +func (x *SyncActionValue) GetLidContactAction() *LidContactAction { + if x != nil { + return x.LidContactAction + } + return nil +} + +func (x *SyncActionValue) GetCtwaPerCustomerDataSharingAction() *CtwaPerCustomerDataSharingAction { + if x != nil { + return x.CtwaPerCustomerDataSharingAction + } + return nil +} + +func (x *SyncActionValue) GetPaymentTosAction() *PaymentTosAction { + if x != nil { + return x.PaymentTosAction + } + return nil +} + +func (x *SyncActionValue) GetPrivacySettingChannelsPersonalisedRecommendationAction() *PrivacySettingChannelsPersonalisedRecommendationAction { + if x != nil { + return x.PrivacySettingChannelsPersonalisedRecommendationAction + } + return nil +} + +func (x *SyncActionValue) GetDetectedOutcomesStatusAction() *DetectedOutcomesStatusAction { + if x != nil { + return x.DetectedOutcomesStatusAction + } + return nil +} + +func (x *SyncActionValue) GetMaibaAiFeaturesControlAction() *MaibaAIFeaturesControlAction { + if x != nil { + return x.MaibaAiFeaturesControlAction + } + return nil +} + +func (x *SyncActionValue) GetBusinessBroadcastListAction() *BusinessBroadcastListAction { + if x != nil { + return x.BusinessBroadcastListAction + } + return nil +} + +func (x *SyncActionValue) GetMusicUserIDAction() *MusicUserIdAction { + if x != nil { + return x.MusicUserIDAction + } + return nil +} + +func (x *SyncActionValue) GetStatusPostOptInNotificationPreferencesAction() *StatusPostOptInNotificationPreferencesAction { + if x != nil { + return x.StatusPostOptInNotificationPreferencesAction + } + return nil +} + +func (x *SyncActionValue) GetAvatarUpdatedAction() *AvatarUpdatedAction { + if x != nil { + return x.AvatarUpdatedAction + } + return nil +} + +func (x *SyncActionValue) GetPrivateProcessingSettingAction() *PrivateProcessingSettingAction { + if x != nil { + return x.PrivateProcessingSettingAction + } + return nil +} + +func (x *SyncActionValue) GetNewsletterSavedInterestsAction() *NewsletterSavedInterestsAction { + if x != nil { + return x.NewsletterSavedInterestsAction + } + return nil +} + +func (x *SyncActionValue) GetAiThreadRenameAction() *AiThreadRenameAction { + if x != nil { + return x.AiThreadRenameAction + } + return nil +} + +func (x *SyncActionValue) GetInteractiveMessageAction() *InteractiveMessageAction { + if x != nil { + return x.InteractiveMessageAction + } + return nil +} + +func (x *SyncActionValue) GetSettingsSyncAction() *SettingsSyncAction { + if x != nil { + return x.SettingsSyncAction + } + return nil +} + +func (x *SyncActionValue) GetOutContactAction() *OutContactAction { + if x != nil { + return x.OutContactAction + } + return nil +} + +func (x *SyncActionValue) GetNctSaltSyncAction() *NctSaltSyncAction { + if x != nil { + return x.NctSaltSyncAction + } + return nil +} + +type NctSaltSyncAction struct { + state protoimpl.MessageState `protogen:"open.v1"` + Salt []byte `protobuf:"bytes,1,opt,name=salt" json:"salt,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *NctSaltSyncAction) Reset() { + *x = NctSaltSyncAction{} + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[18] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *NctSaltSyncAction) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*NctSaltSyncAction) ProtoMessage() {} + +func (x *NctSaltSyncAction) ProtoReflect() protoreflect.Message { + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[18] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use NctSaltSyncAction.ProtoReflect.Descriptor instead. +func (*NctSaltSyncAction) Descriptor() ([]byte, []int) { + return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{18} +} + +func (x *NctSaltSyncAction) GetSalt() []byte { + if x != nil { + return x.Salt + } + return nil +} + +type AiThreadRenameAction struct { + state protoimpl.MessageState `protogen:"open.v1"` + NewTitle *string `protobuf:"bytes,1,opt,name=newTitle" json:"newTitle,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *AiThreadRenameAction) Reset() { + *x = AiThreadRenameAction{} + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[19] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *AiThreadRenameAction) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AiThreadRenameAction) ProtoMessage() {} + +func (x *AiThreadRenameAction) ProtoReflect() protoreflect.Message { + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[19] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AiThreadRenameAction.ProtoReflect.Descriptor instead. +func (*AiThreadRenameAction) Descriptor() ([]byte, []int) { + return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{19} +} + +func (x *AiThreadRenameAction) GetNewTitle() string { + if x != nil && x.NewTitle != nil { + return *x.NewTitle + } + return "" +} + +type StatusPostOptInNotificationPreferencesAction struct { + state protoimpl.MessageState `protogen:"open.v1"` + Enabled *bool `protobuf:"varint,1,opt,name=enabled" json:"enabled,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *StatusPostOptInNotificationPreferencesAction) Reset() { + *x = StatusPostOptInNotificationPreferencesAction{} + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[20] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *StatusPostOptInNotificationPreferencesAction) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StatusPostOptInNotificationPreferencesAction) ProtoMessage() {} + +func (x *StatusPostOptInNotificationPreferencesAction) ProtoReflect() protoreflect.Message { + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[20] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StatusPostOptInNotificationPreferencesAction.ProtoReflect.Descriptor instead. +func (*StatusPostOptInNotificationPreferencesAction) Descriptor() ([]byte, []int) { + return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{20} +} + +func (x *StatusPostOptInNotificationPreferencesAction) GetEnabled() bool { + if x != nil && x.Enabled != nil { + return *x.Enabled + } + return false +} + +type BroadcastListParticipant struct { + state protoimpl.MessageState `protogen:"open.v1"` + LidJID *string `protobuf:"bytes,1,req,name=lidJID" json:"lidJID,omitempty"` + PnJID *string `protobuf:"bytes,2,opt,name=pnJID" json:"pnJID,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BroadcastListParticipant) Reset() { + *x = BroadcastListParticipant{} + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[21] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BroadcastListParticipant) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BroadcastListParticipant) ProtoMessage() {} + +func (x *BroadcastListParticipant) ProtoReflect() protoreflect.Message { + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[21] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BroadcastListParticipant.ProtoReflect.Descriptor instead. +func (*BroadcastListParticipant) Descriptor() ([]byte, []int) { + return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{21} +} + +func (x *BroadcastListParticipant) GetLidJID() string { + if x != nil && x.LidJID != nil { + return *x.LidJID + } + return "" +} + +func (x *BroadcastListParticipant) GetPnJID() string { + if x != nil && x.PnJID != nil { + return *x.PnJID + } + return "" +} + +type BusinessBroadcastListAction struct { + state protoimpl.MessageState `protogen:"open.v1"` + Deleted *bool `protobuf:"varint,1,opt,name=deleted" json:"deleted,omitempty"` + Participants []*BroadcastListParticipant `protobuf:"bytes,2,rep,name=participants" json:"participants,omitempty"` + ListName *string `protobuf:"bytes,3,opt,name=listName" json:"listName,omitempty"` + LabelIDs []string `protobuf:"bytes,4,rep,name=labelIDs" json:"labelIDs,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BusinessBroadcastListAction) Reset() { + *x = BusinessBroadcastListAction{} + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[22] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BusinessBroadcastListAction) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BusinessBroadcastListAction) ProtoMessage() {} + +func (x *BusinessBroadcastListAction) ProtoReflect() protoreflect.Message { + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[22] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BusinessBroadcastListAction.ProtoReflect.Descriptor instead. +func (*BusinessBroadcastListAction) Descriptor() ([]byte, []int) { + return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{22} +} + +func (x *BusinessBroadcastListAction) GetDeleted() bool { + if x != nil && x.Deleted != nil { + return *x.Deleted + } + return false +} + +func (x *BusinessBroadcastListAction) GetParticipants() []*BroadcastListParticipant { + if x != nil { + return x.Participants + } + return nil +} + +func (x *BusinessBroadcastListAction) GetListName() string { + if x != nil && x.ListName != nil { + return *x.ListName + } + return "" +} + +func (x *BusinessBroadcastListAction) GetLabelIDs() []string { + if x != nil { + return x.LabelIDs + } + return nil +} + +type BusinessBroadcastAssociationAction struct { + state protoimpl.MessageState `protogen:"open.v1"` + Deleted *bool `protobuf:"varint,1,opt,name=deleted" json:"deleted,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BusinessBroadcastAssociationAction) Reset() { + *x = BusinessBroadcastAssociationAction{} + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[23] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BusinessBroadcastAssociationAction) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BusinessBroadcastAssociationAction) ProtoMessage() {} + +func (x *BusinessBroadcastAssociationAction) ProtoReflect() protoreflect.Message { + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[23] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BusinessBroadcastAssociationAction.ProtoReflect.Descriptor instead. +func (*BusinessBroadcastAssociationAction) Descriptor() ([]byte, []int) { + return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{23} +} + +func (x *BusinessBroadcastAssociationAction) GetDeleted() bool { + if x != nil && x.Deleted != nil { + return *x.Deleted + } + return false +} + +type CtwaPerCustomerDataSharingAction struct { + state protoimpl.MessageState `protogen:"open.v1"` + IsCtwaPerCustomerDataSharingEnabled *bool `protobuf:"varint,1,opt,name=isCtwaPerCustomerDataSharingEnabled" json:"isCtwaPerCustomerDataSharingEnabled,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *CtwaPerCustomerDataSharingAction) Reset() { + *x = CtwaPerCustomerDataSharingAction{} + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[24] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *CtwaPerCustomerDataSharingAction) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CtwaPerCustomerDataSharingAction) ProtoMessage() {} + +func (x *CtwaPerCustomerDataSharingAction) ProtoReflect() protoreflect.Message { + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[24] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CtwaPerCustomerDataSharingAction.ProtoReflect.Descriptor instead. +func (*CtwaPerCustomerDataSharingAction) Descriptor() ([]byte, []int) { + return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{24} +} + +func (x *CtwaPerCustomerDataSharingAction) GetIsCtwaPerCustomerDataSharingEnabled() bool { + if x != nil && x.IsCtwaPerCustomerDataSharingEnabled != nil { + return *x.IsCtwaPerCustomerDataSharingEnabled + } + return false +} + +type OutContactAction struct { + state protoimpl.MessageState `protogen:"open.v1"` + FullName *string `protobuf:"bytes,1,opt,name=fullName" json:"fullName,omitempty"` + FirstName *string `protobuf:"bytes,2,opt,name=firstName" json:"firstName,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *OutContactAction) Reset() { + *x = OutContactAction{} + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[25] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *OutContactAction) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*OutContactAction) ProtoMessage() {} + +func (x *OutContactAction) ProtoReflect() protoreflect.Message { + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[25] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use OutContactAction.ProtoReflect.Descriptor instead. +func (*OutContactAction) Descriptor() ([]byte, []int) { + return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{25} +} + +func (x *OutContactAction) GetFullName() string { + if x != nil && x.FullName != nil { + return *x.FullName + } + return "" +} + +func (x *OutContactAction) GetFirstName() string { + if x != nil && x.FirstName != nil { + return *x.FirstName + } + return "" +} + +type LidContactAction struct { + state protoimpl.MessageState `protogen:"open.v1"` + FullName *string `protobuf:"bytes,1,opt,name=fullName" json:"fullName,omitempty"` + FirstName *string `protobuf:"bytes,2,opt,name=firstName" json:"firstName,omitempty"` + Username *string `protobuf:"bytes,3,opt,name=username" json:"username,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *LidContactAction) Reset() { + *x = LidContactAction{} + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[26] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *LidContactAction) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*LidContactAction) ProtoMessage() {} + +func (x *LidContactAction) ProtoReflect() protoreflect.Message { + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[26] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use LidContactAction.ProtoReflect.Descriptor instead. +func (*LidContactAction) Descriptor() ([]byte, []int) { + return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{26} +} + +func (x *LidContactAction) GetFullName() string { + if x != nil && x.FullName != nil { + return *x.FullName + } + return "" +} + +func (x *LidContactAction) GetFirstName() string { + if x != nil && x.FirstName != nil { + return *x.FirstName + } + return "" +} + +func (x *LidContactAction) GetUsername() string { + if x != nil && x.Username != nil { + return *x.Username + } + return "" +} + +type FavoritesAction struct { + state protoimpl.MessageState `protogen:"open.v1"` + Favorites []*FavoritesAction_Favorite `protobuf:"bytes,1,rep,name=favorites" json:"favorites,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *FavoritesAction) Reset() { + *x = FavoritesAction{} + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[27] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *FavoritesAction) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*FavoritesAction) ProtoMessage() {} + +func (x *FavoritesAction) ProtoReflect() protoreflect.Message { + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[27] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use FavoritesAction.ProtoReflect.Descriptor instead. +func (*FavoritesAction) Descriptor() ([]byte, []int) { + return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{27} +} + +func (x *FavoritesAction) GetFavorites() []*FavoritesAction_Favorite { + if x != nil { + return x.Favorites + } + return nil +} + +type PrivacySettingChannelsPersonalisedRecommendationAction struct { + state protoimpl.MessageState `protogen:"open.v1"` + IsUserOptedOut *bool `protobuf:"varint,1,opt,name=isUserOptedOut" json:"isUserOptedOut,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *PrivacySettingChannelsPersonalisedRecommendationAction) Reset() { + *x = PrivacySettingChannelsPersonalisedRecommendationAction{} + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[28] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *PrivacySettingChannelsPersonalisedRecommendationAction) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PrivacySettingChannelsPersonalisedRecommendationAction) ProtoMessage() {} + +func (x *PrivacySettingChannelsPersonalisedRecommendationAction) ProtoReflect() protoreflect.Message { + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[28] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PrivacySettingChannelsPersonalisedRecommendationAction.ProtoReflect.Descriptor instead. +func (*PrivacySettingChannelsPersonalisedRecommendationAction) Descriptor() ([]byte, []int) { + return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{28} +} + +func (x *PrivacySettingChannelsPersonalisedRecommendationAction) GetIsUserOptedOut() bool { + if x != nil && x.IsUserOptedOut != nil { + return *x.IsUserOptedOut + } + return false +} + +type PrivacySettingDisableLinkPreviewsAction struct { + state protoimpl.MessageState `protogen:"open.v1"` + IsPreviewsDisabled *bool `protobuf:"varint,1,opt,name=isPreviewsDisabled" json:"isPreviewsDisabled,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *PrivacySettingDisableLinkPreviewsAction) Reset() { + *x = PrivacySettingDisableLinkPreviewsAction{} + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[29] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *PrivacySettingDisableLinkPreviewsAction) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PrivacySettingDisableLinkPreviewsAction) ProtoMessage() {} + +func (x *PrivacySettingDisableLinkPreviewsAction) ProtoReflect() protoreflect.Message { + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[29] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PrivacySettingDisableLinkPreviewsAction.ProtoReflect.Descriptor instead. +func (*PrivacySettingDisableLinkPreviewsAction) Descriptor() ([]byte, []int) { + return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{29} +} + +func (x *PrivacySettingDisableLinkPreviewsAction) GetIsPreviewsDisabled() bool { + if x != nil && x.IsPreviewsDisabled != nil { + return *x.IsPreviewsDisabled + } + return false +} + +type WamoUserIdentifierAction struct { + state protoimpl.MessageState `protogen:"open.v1"` + Identifier *string `protobuf:"bytes,1,opt,name=identifier" json:"identifier,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *WamoUserIdentifierAction) Reset() { + *x = WamoUserIdentifierAction{} + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[30] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *WamoUserIdentifierAction) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*WamoUserIdentifierAction) ProtoMessage() {} + +func (x *WamoUserIdentifierAction) ProtoReflect() protoreflect.Message { + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[30] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use WamoUserIdentifierAction.ProtoReflect.Descriptor instead. +func (*WamoUserIdentifierAction) Descriptor() ([]byte, []int) { + return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{30} +} + +func (x *WamoUserIdentifierAction) GetIdentifier() string { + if x != nil && x.Identifier != nil { + return *x.Identifier + } + return "" +} + +type LockChatAction struct { + state protoimpl.MessageState `protogen:"open.v1"` + Locked *bool `protobuf:"varint,1,opt,name=locked" json:"locked,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *LockChatAction) Reset() { + *x = LockChatAction{} + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[31] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *LockChatAction) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*LockChatAction) ProtoMessage() {} + +func (x *LockChatAction) ProtoReflect() protoreflect.Message { + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[31] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use LockChatAction.ProtoReflect.Descriptor instead. +func (*LockChatAction) Descriptor() ([]byte, []int) { + return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{31} +} + +func (x *LockChatAction) GetLocked() bool { + if x != nil && x.Locked != nil { + return *x.Locked + } + return false +} + +type CustomPaymentMethodsAction struct { + state protoimpl.MessageState `protogen:"open.v1"` + CustomPaymentMethods []*CustomPaymentMethod `protobuf:"bytes,1,rep,name=customPaymentMethods" json:"customPaymentMethods,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *CustomPaymentMethodsAction) Reset() { + *x = CustomPaymentMethodsAction{} + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[32] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *CustomPaymentMethodsAction) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CustomPaymentMethodsAction) ProtoMessage() {} + +func (x *CustomPaymentMethodsAction) ProtoReflect() protoreflect.Message { + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[32] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CustomPaymentMethodsAction.ProtoReflect.Descriptor instead. +func (*CustomPaymentMethodsAction) Descriptor() ([]byte, []int) { + return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{32} +} + +func (x *CustomPaymentMethodsAction) GetCustomPaymentMethods() []*CustomPaymentMethod { + if x != nil { + return x.CustomPaymentMethods + } + return nil +} + +type CustomPaymentMethod struct { + state protoimpl.MessageState `protogen:"open.v1"` + CredentialID *string `protobuf:"bytes,1,req,name=credentialID" json:"credentialID,omitempty"` + Country *string `protobuf:"bytes,2,req,name=country" json:"country,omitempty"` + Type *string `protobuf:"bytes,3,req,name=type" json:"type,omitempty"` + Metadata []*CustomPaymentMethodMetadata `protobuf:"bytes,4,rep,name=metadata" json:"metadata,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *CustomPaymentMethod) Reset() { + *x = CustomPaymentMethod{} + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[33] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *CustomPaymentMethod) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CustomPaymentMethod) ProtoMessage() {} + +func (x *CustomPaymentMethod) ProtoReflect() protoreflect.Message { + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[33] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CustomPaymentMethod.ProtoReflect.Descriptor instead. +func (*CustomPaymentMethod) Descriptor() ([]byte, []int) { + return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{33} +} + +func (x *CustomPaymentMethod) GetCredentialID() string { + if x != nil && x.CredentialID != nil { + return *x.CredentialID + } + return "" +} + +func (x *CustomPaymentMethod) GetCountry() string { + if x != nil && x.Country != nil { + return *x.Country + } + return "" +} + +func (x *CustomPaymentMethod) GetType() string { + if x != nil && x.Type != nil { + return *x.Type + } + return "" +} + +func (x *CustomPaymentMethod) GetMetadata() []*CustomPaymentMethodMetadata { + if x != nil { + return x.Metadata + } + return nil +} + +type CustomPaymentMethodMetadata struct { + state protoimpl.MessageState `protogen:"open.v1"` + Key *string `protobuf:"bytes,1,req,name=key" json:"key,omitempty"` + Value *string `protobuf:"bytes,2,req,name=value" json:"value,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *CustomPaymentMethodMetadata) Reset() { + *x = CustomPaymentMethodMetadata{} + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[34] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *CustomPaymentMethodMetadata) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CustomPaymentMethodMetadata) ProtoMessage() {} + +func (x *CustomPaymentMethodMetadata) ProtoReflect() protoreflect.Message { + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[34] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CustomPaymentMethodMetadata.ProtoReflect.Descriptor instead. +func (*CustomPaymentMethodMetadata) Descriptor() ([]byte, []int) { + return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{34} +} + +func (x *CustomPaymentMethodMetadata) GetKey() string { + if x != nil && x.Key != nil { + return *x.Key + } + return "" +} + +func (x *CustomPaymentMethodMetadata) GetValue() string { + if x != nil && x.Value != nil { + return *x.Value + } + return "" +} + +type PaymentInfoAction struct { + state protoimpl.MessageState `protogen:"open.v1"` + Cpi *string `protobuf:"bytes,1,opt,name=cpi" json:"cpi,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *PaymentInfoAction) Reset() { + *x = PaymentInfoAction{} + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[35] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *PaymentInfoAction) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PaymentInfoAction) ProtoMessage() {} + +func (x *PaymentInfoAction) ProtoReflect() protoreflect.Message { + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[35] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PaymentInfoAction.ProtoReflect.Descriptor instead. +func (*PaymentInfoAction) Descriptor() ([]byte, []int) { + return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{35} +} + +func (x *PaymentInfoAction) GetCpi() string { + if x != nil && x.Cpi != nil { + return *x.Cpi + } + return "" +} + +type LabelReorderingAction struct { + state protoimpl.MessageState `protogen:"open.v1"` + SortedLabelIDs []int32 `protobuf:"varint,1,rep,name=sortedLabelIDs" json:"sortedLabelIDs,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *LabelReorderingAction) Reset() { + *x = LabelReorderingAction{} + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[36] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *LabelReorderingAction) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*LabelReorderingAction) ProtoMessage() {} + +func (x *LabelReorderingAction) ProtoReflect() protoreflect.Message { + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[36] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use LabelReorderingAction.ProtoReflect.Descriptor instead. +func (*LabelReorderingAction) Descriptor() ([]byte, []int) { + return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{36} +} + +func (x *LabelReorderingAction) GetSortedLabelIDs() []int32 { + if x != nil { + return x.SortedLabelIDs + } + return nil +} + +type DeleteIndividualCallLogAction struct { + state protoimpl.MessageState `protogen:"open.v1"` + PeerJID *string `protobuf:"bytes,1,opt,name=peerJID" json:"peerJID,omitempty"` + IsIncoming *bool `protobuf:"varint,2,opt,name=isIncoming" json:"isIncoming,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *DeleteIndividualCallLogAction) Reset() { + *x = DeleteIndividualCallLogAction{} + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[37] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *DeleteIndividualCallLogAction) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DeleteIndividualCallLogAction) ProtoMessage() {} + +func (x *DeleteIndividualCallLogAction) ProtoReflect() protoreflect.Message { + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[37] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DeleteIndividualCallLogAction.ProtoReflect.Descriptor instead. +func (*DeleteIndividualCallLogAction) Descriptor() ([]byte, []int) { + return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{37} +} + +func (x *DeleteIndividualCallLogAction) GetPeerJID() string { + if x != nil && x.PeerJID != nil { + return *x.PeerJID + } + return "" +} + +func (x *DeleteIndividualCallLogAction) GetIsIncoming() bool { + if x != nil && x.IsIncoming != nil { + return *x.IsIncoming + } + return false +} + +type BotWelcomeRequestAction struct { + state protoimpl.MessageState `protogen:"open.v1"` + IsSent *bool `protobuf:"varint,1,opt,name=isSent" json:"isSent,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *BotWelcomeRequestAction) Reset() { + *x = BotWelcomeRequestAction{} + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[38] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *BotWelcomeRequestAction) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*BotWelcomeRequestAction) ProtoMessage() {} + +func (x *BotWelcomeRequestAction) ProtoReflect() protoreflect.Message { + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[38] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use BotWelcomeRequestAction.ProtoReflect.Descriptor instead. +func (*BotWelcomeRequestAction) Descriptor() ([]byte, []int) { + return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{38} +} + +func (x *BotWelcomeRequestAction) GetIsSent() bool { + if x != nil && x.IsSent != nil { + return *x.IsSent + } + return false +} + +type NewsletterSavedInterestsAction struct { + state protoimpl.MessageState `protogen:"open.v1"` + NewsletterSavedInterests *string `protobuf:"bytes,1,opt,name=newsletterSavedInterests" json:"newsletterSavedInterests,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *NewsletterSavedInterestsAction) Reset() { + *x = NewsletterSavedInterestsAction{} + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[39] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *NewsletterSavedInterestsAction) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*NewsletterSavedInterestsAction) ProtoMessage() {} + +func (x *NewsletterSavedInterestsAction) ProtoReflect() protoreflect.Message { + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[39] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use NewsletterSavedInterestsAction.ProtoReflect.Descriptor instead. +func (*NewsletterSavedInterestsAction) Descriptor() ([]byte, []int) { + return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{39} +} + +func (x *NewsletterSavedInterestsAction) GetNewsletterSavedInterests() string { + if x != nil && x.NewsletterSavedInterests != nil { + return *x.NewsletterSavedInterests + } + return "" +} + +type MusicUserIdAction struct { + state protoimpl.MessageState `protogen:"open.v1"` + MusicUserID *string `protobuf:"bytes,1,opt,name=musicUserID" json:"musicUserID,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *MusicUserIdAction) Reset() { + *x = MusicUserIdAction{} + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[40] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *MusicUserIdAction) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MusicUserIdAction) ProtoMessage() {} + +func (x *MusicUserIdAction) ProtoReflect() protoreflect.Message { + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[40] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MusicUserIdAction.ProtoReflect.Descriptor instead. +func (*MusicUserIdAction) Descriptor() ([]byte, []int) { + return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{40} +} + +func (x *MusicUserIdAction) GetMusicUserID() string { + if x != nil && x.MusicUserID != nil { + return *x.MusicUserID + } + return "" +} + +type UGCBot struct { + state protoimpl.MessageState `protogen:"open.v1"` + Definition []byte `protobuf:"bytes,1,opt,name=definition" json:"definition,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *UGCBot) Reset() { + *x = UGCBot{} + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[41] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *UGCBot) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UGCBot) ProtoMessage() {} + +func (x *UGCBot) ProtoReflect() protoreflect.Message { + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[41] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UGCBot.ProtoReflect.Descriptor instead. +func (*UGCBot) Descriptor() ([]byte, []int) { + return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{41} +} + +func (x *UGCBot) GetDefinition() []byte { + if x != nil { + return x.Definition + } + return nil +} + +type CallLogAction struct { + state protoimpl.MessageState `protogen:"open.v1"` + CallLogRecord *CallLogRecord `protobuf:"bytes,1,opt,name=callLogRecord" json:"callLogRecord,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *CallLogAction) Reset() { + *x = CallLogAction{} + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[42] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *CallLogAction) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CallLogAction) ProtoMessage() {} + +func (x *CallLogAction) ProtoReflect() protoreflect.Message { + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[42] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CallLogAction.ProtoReflect.Descriptor instead. +func (*CallLogAction) Descriptor() ([]byte, []int) { + return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{42} +} + +func (x *CallLogAction) GetCallLogRecord() *CallLogRecord { + if x != nil { + return x.CallLogRecord + } + return nil +} + +type PrivacySettingRelayAllCalls struct { + state protoimpl.MessageState `protogen:"open.v1"` + IsEnabled *bool `protobuf:"varint,1,opt,name=isEnabled" json:"isEnabled,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *PrivacySettingRelayAllCalls) Reset() { + *x = PrivacySettingRelayAllCalls{} + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[43] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *PrivacySettingRelayAllCalls) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PrivacySettingRelayAllCalls) ProtoMessage() {} + +func (x *PrivacySettingRelayAllCalls) ProtoReflect() protoreflect.Message { + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[43] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PrivacySettingRelayAllCalls.ProtoReflect.Descriptor instead. +func (*PrivacySettingRelayAllCalls) Descriptor() ([]byte, []int) { + return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{43} +} + +func (x *PrivacySettingRelayAllCalls) GetIsEnabled() bool { + if x != nil && x.IsEnabled != nil { + return *x.IsEnabled + } + return false +} + +type DetectedOutcomesStatusAction struct { + state protoimpl.MessageState `protogen:"open.v1"` + IsEnabled *bool `protobuf:"varint,1,opt,name=isEnabled" json:"isEnabled,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *DetectedOutcomesStatusAction) Reset() { + *x = DetectedOutcomesStatusAction{} + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[44] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *DetectedOutcomesStatusAction) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DetectedOutcomesStatusAction) ProtoMessage() {} + +func (x *DetectedOutcomesStatusAction) ProtoReflect() protoreflect.Message { + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[44] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DetectedOutcomesStatusAction.ProtoReflect.Descriptor instead. +func (*DetectedOutcomesStatusAction) Descriptor() ([]byte, []int) { + return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{44} +} + +func (x *DetectedOutcomesStatusAction) GetIsEnabled() bool { + if x != nil && x.IsEnabled != nil { + return *x.IsEnabled + } + return false +} + +type ExternalWebBetaAction struct { + state protoimpl.MessageState `protogen:"open.v1"` + IsOptIn *bool `protobuf:"varint,1,opt,name=isOptIn" json:"isOptIn,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ExternalWebBetaAction) Reset() { + *x = ExternalWebBetaAction{} + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[45] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ExternalWebBetaAction) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ExternalWebBetaAction) ProtoMessage() {} + +func (x *ExternalWebBetaAction) ProtoReflect() protoreflect.Message { + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[45] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ExternalWebBetaAction.ProtoReflect.Descriptor instead. +func (*ExternalWebBetaAction) Descriptor() ([]byte, []int) { + return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{45} +} + +func (x *ExternalWebBetaAction) GetIsOptIn() bool { + if x != nil && x.IsOptIn != nil { + return *x.IsOptIn + } + return false +} + +type MarketingMessageBroadcastAction struct { + state protoimpl.MessageState `protogen:"open.v1"` + RepliedCount *int32 `protobuf:"varint,1,opt,name=repliedCount" json:"repliedCount,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *MarketingMessageBroadcastAction) Reset() { + *x = MarketingMessageBroadcastAction{} + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[46] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *MarketingMessageBroadcastAction) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MarketingMessageBroadcastAction) ProtoMessage() {} + +func (x *MarketingMessageBroadcastAction) ProtoReflect() protoreflect.Message { + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[46] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MarketingMessageBroadcastAction.ProtoReflect.Descriptor instead. +func (*MarketingMessageBroadcastAction) Descriptor() ([]byte, []int) { + return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{46} +} + +func (x *MarketingMessageBroadcastAction) GetRepliedCount() int32 { + if x != nil && x.RepliedCount != nil { + return *x.RepliedCount + } + return 0 +} + +type PnForLidChatAction struct { + state protoimpl.MessageState `protogen:"open.v1"` + PnJID *string `protobuf:"bytes,1,opt,name=pnJID" json:"pnJID,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *PnForLidChatAction) Reset() { + *x = PnForLidChatAction{} + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[47] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *PnForLidChatAction) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PnForLidChatAction) ProtoMessage() {} + +func (x *PnForLidChatAction) ProtoReflect() protoreflect.Message { + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[47] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PnForLidChatAction.ProtoReflect.Descriptor instead. +func (*PnForLidChatAction) Descriptor() ([]byte, []int) { + return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{47} +} + +func (x *PnForLidChatAction) GetPnJID() string { + if x != nil && x.PnJID != nil { + return *x.PnJID + } + return "" +} + +type ChatAssignmentOpenedStatusAction struct { + state protoimpl.MessageState `protogen:"open.v1"` + ChatOpened *bool `protobuf:"varint,1,opt,name=chatOpened" json:"chatOpened,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ChatAssignmentOpenedStatusAction) Reset() { + *x = ChatAssignmentOpenedStatusAction{} + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[48] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ChatAssignmentOpenedStatusAction) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ChatAssignmentOpenedStatusAction) ProtoMessage() {} + +func (x *ChatAssignmentOpenedStatusAction) ProtoReflect() protoreflect.Message { + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[48] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ChatAssignmentOpenedStatusAction.ProtoReflect.Descriptor instead. +func (*ChatAssignmentOpenedStatusAction) Descriptor() ([]byte, []int) { + return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{48} +} + +func (x *ChatAssignmentOpenedStatusAction) GetChatOpened() bool { + if x != nil && x.ChatOpened != nil { + return *x.ChatOpened + } + return false +} + +type ChatAssignmentAction struct { + state protoimpl.MessageState `protogen:"open.v1"` + DeviceAgentID *string `protobuf:"bytes,1,opt,name=deviceAgentID" json:"deviceAgentID,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ChatAssignmentAction) Reset() { + *x = ChatAssignmentAction{} + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[49] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ChatAssignmentAction) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ChatAssignmentAction) ProtoMessage() {} + +func (x *ChatAssignmentAction) ProtoReflect() protoreflect.Message { + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[49] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ChatAssignmentAction.ProtoReflect.Descriptor instead. +func (*ChatAssignmentAction) Descriptor() ([]byte, []int) { + return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{49} +} + +func (x *ChatAssignmentAction) GetDeviceAgentID() string { + if x != nil && x.DeviceAgentID != nil { + return *x.DeviceAgentID + } + return "" +} + +type StickerAction struct { + state protoimpl.MessageState `protogen:"open.v1"` + URL *string `protobuf:"bytes,1,opt,name=URL" json:"URL,omitempty"` + FileEncSHA256 []byte `protobuf:"bytes,2,opt,name=fileEncSHA256" json:"fileEncSHA256,omitempty"` + MediaKey []byte `protobuf:"bytes,3,opt,name=mediaKey" json:"mediaKey,omitempty"` + Mimetype *string `protobuf:"bytes,4,opt,name=mimetype" json:"mimetype,omitempty"` + Height *uint32 `protobuf:"varint,5,opt,name=height" json:"height,omitempty"` + Width *uint32 `protobuf:"varint,6,opt,name=width" json:"width,omitempty"` + DirectPath *string `protobuf:"bytes,7,opt,name=directPath" json:"directPath,omitempty"` + FileLength *uint64 `protobuf:"varint,8,opt,name=fileLength" json:"fileLength,omitempty"` + IsFavorite *bool `protobuf:"varint,9,opt,name=isFavorite" json:"isFavorite,omitempty"` + DeviceIDHint *uint32 `protobuf:"varint,10,opt,name=deviceIDHint" json:"deviceIDHint,omitempty"` + IsLottie *bool `protobuf:"varint,11,opt,name=isLottie" json:"isLottie,omitempty"` + ImageHash *string `protobuf:"bytes,12,opt,name=imageHash" json:"imageHash,omitempty"` + IsAvatarSticker *bool `protobuf:"varint,13,opt,name=isAvatarSticker" json:"isAvatarSticker,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *StickerAction) Reset() { + *x = StickerAction{} + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[50] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *StickerAction) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StickerAction) ProtoMessage() {} + +func (x *StickerAction) ProtoReflect() protoreflect.Message { + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[50] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StickerAction.ProtoReflect.Descriptor instead. +func (*StickerAction) Descriptor() ([]byte, []int) { + return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{50} +} + +func (x *StickerAction) GetURL() string { + if x != nil && x.URL != nil { + return *x.URL + } + return "" +} + +func (x *StickerAction) GetFileEncSHA256() []byte { + if x != nil { + return x.FileEncSHA256 + } + return nil +} + +func (x *StickerAction) GetMediaKey() []byte { + if x != nil { + return x.MediaKey + } + return nil +} + +func (x *StickerAction) GetMimetype() string { + if x != nil && x.Mimetype != nil { + return *x.Mimetype + } + return "" +} + +func (x *StickerAction) GetHeight() uint32 { + if x != nil && x.Height != nil { + return *x.Height + } + return 0 +} + +func (x *StickerAction) GetWidth() uint32 { + if x != nil && x.Width != nil { + return *x.Width + } + return 0 +} + +func (x *StickerAction) GetDirectPath() string { + if x != nil && x.DirectPath != nil { + return *x.DirectPath + } + return "" +} + +func (x *StickerAction) GetFileLength() uint64 { + if x != nil && x.FileLength != nil { + return *x.FileLength + } + return 0 +} + +func (x *StickerAction) GetIsFavorite() bool { + if x != nil && x.IsFavorite != nil { + return *x.IsFavorite + } + return false +} + +func (x *StickerAction) GetDeviceIDHint() uint32 { + if x != nil && x.DeviceIDHint != nil { + return *x.DeviceIDHint + } + return 0 +} + +func (x *StickerAction) GetIsLottie() bool { + if x != nil && x.IsLottie != nil { + return *x.IsLottie + } + return false +} + +func (x *StickerAction) GetImageHash() string { + if x != nil && x.ImageHash != nil { + return *x.ImageHash + } + return "" +} + +func (x *StickerAction) GetIsAvatarSticker() bool { + if x != nil && x.IsAvatarSticker != nil { + return *x.IsAvatarSticker + } + return false +} + +type RemoveRecentStickerAction struct { + state protoimpl.MessageState `protogen:"open.v1"` + LastStickerSentTS *int64 `protobuf:"varint,1,opt,name=lastStickerSentTS" json:"lastStickerSentTS,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *RemoveRecentStickerAction) Reset() { + *x = RemoveRecentStickerAction{} + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[51] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *RemoveRecentStickerAction) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RemoveRecentStickerAction) ProtoMessage() {} + +func (x *RemoveRecentStickerAction) ProtoReflect() protoreflect.Message { + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[51] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RemoveRecentStickerAction.ProtoReflect.Descriptor instead. +func (*RemoveRecentStickerAction) Descriptor() ([]byte, []int) { + return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{51} +} + +func (x *RemoveRecentStickerAction) GetLastStickerSentTS() int64 { + if x != nil && x.LastStickerSentTS != nil { + return *x.LastStickerSentTS + } + return 0 +} + +type PrimaryVersionAction struct { + state protoimpl.MessageState `protogen:"open.v1"` + Version *string `protobuf:"bytes,1,opt,name=version" json:"version,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *PrimaryVersionAction) Reset() { + *x = PrimaryVersionAction{} + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[52] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *PrimaryVersionAction) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PrimaryVersionAction) ProtoMessage() {} + +func (x *PrimaryVersionAction) ProtoReflect() protoreflect.Message { + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[52] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PrimaryVersionAction.ProtoReflect.Descriptor instead. +func (*PrimaryVersionAction) Descriptor() ([]byte, []int) { + return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{52} +} + +func (x *PrimaryVersionAction) GetVersion() string { + if x != nil && x.Version != nil { + return *x.Version + } + return "" +} + +type NuxAction struct { + state protoimpl.MessageState `protogen:"open.v1"` + Acknowledged *bool `protobuf:"varint,1,opt,name=acknowledged" json:"acknowledged,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *NuxAction) Reset() { + *x = NuxAction{} + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[53] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *NuxAction) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*NuxAction) ProtoMessage() {} + +func (x *NuxAction) ProtoReflect() protoreflect.Message { + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[53] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use NuxAction.ProtoReflect.Descriptor instead. +func (*NuxAction) Descriptor() ([]byte, []int) { + return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{53} +} + +func (x *NuxAction) GetAcknowledged() bool { + if x != nil && x.Acknowledged != nil { + return *x.Acknowledged + } + return false +} + +type TimeFormatAction struct { + state protoimpl.MessageState `protogen:"open.v1"` + IsTwentyFourHourFormatEnabled *bool `protobuf:"varint,1,opt,name=isTwentyFourHourFormatEnabled" json:"isTwentyFourHourFormatEnabled,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *TimeFormatAction) Reset() { + *x = TimeFormatAction{} + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[54] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *TimeFormatAction) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*TimeFormatAction) ProtoMessage() {} + +func (x *TimeFormatAction) ProtoReflect() protoreflect.Message { + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[54] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use TimeFormatAction.ProtoReflect.Descriptor instead. +func (*TimeFormatAction) Descriptor() ([]byte, []int) { + return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{54} +} + +func (x *TimeFormatAction) GetIsTwentyFourHourFormatEnabled() bool { + if x != nil && x.IsTwentyFourHourFormatEnabled != nil { + return *x.IsTwentyFourHourFormatEnabled + } + return false +} + +type UserStatusMuteAction struct { + state protoimpl.MessageState `protogen:"open.v1"` + Muted *bool `protobuf:"varint,1,opt,name=muted" json:"muted,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *UserStatusMuteAction) Reset() { + *x = UserStatusMuteAction{} + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[55] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *UserStatusMuteAction) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UserStatusMuteAction) ProtoMessage() {} + +func (x *UserStatusMuteAction) ProtoReflect() protoreflect.Message { + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[55] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UserStatusMuteAction.ProtoReflect.Descriptor instead. +func (*UserStatusMuteAction) Descriptor() ([]byte, []int) { + return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{55} +} + +func (x *UserStatusMuteAction) GetMuted() bool { + if x != nil && x.Muted != nil { + return *x.Muted + } + return false +} + +type SubscriptionAction struct { + state protoimpl.MessageState `protogen:"open.v1"` + IsDeactivated *bool `protobuf:"varint,1,opt,name=isDeactivated" json:"isDeactivated,omitempty"` + IsAutoRenewing *bool `protobuf:"varint,2,opt,name=isAutoRenewing" json:"isAutoRenewing,omitempty"` + ExpirationDate *int64 `protobuf:"varint,3,opt,name=expirationDate" json:"expirationDate,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *SubscriptionAction) Reset() { + *x = SubscriptionAction{} + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[56] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *SubscriptionAction) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SubscriptionAction) ProtoMessage() {} + +func (x *SubscriptionAction) ProtoReflect() protoreflect.Message { + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[56] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SubscriptionAction.ProtoReflect.Descriptor instead. +func (*SubscriptionAction) Descriptor() ([]byte, []int) { + return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{56} +} + +func (x *SubscriptionAction) GetIsDeactivated() bool { + if x != nil && x.IsDeactivated != nil { + return *x.IsDeactivated + } + return false +} + +func (x *SubscriptionAction) GetIsAutoRenewing() bool { + if x != nil && x.IsAutoRenewing != nil { + return *x.IsAutoRenewing + } + return false +} + +func (x *SubscriptionAction) GetExpirationDate() int64 { + if x != nil && x.ExpirationDate != nil { + return *x.ExpirationDate + } + return 0 +} + +type AgentAction struct { + state protoimpl.MessageState `protogen:"open.v1"` + Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + DeviceID *int32 `protobuf:"varint,2,opt,name=deviceID" json:"deviceID,omitempty"` + IsDeleted *bool `protobuf:"varint,3,opt,name=isDeleted" json:"isDeleted,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *AgentAction) Reset() { + *x = AgentAction{} + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[57] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *AgentAction) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AgentAction) ProtoMessage() {} + +func (x *AgentAction) ProtoReflect() protoreflect.Message { + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[57] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AgentAction.ProtoReflect.Descriptor instead. +func (*AgentAction) Descriptor() ([]byte, []int) { + return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{57} +} + +func (x *AgentAction) GetName() string { + if x != nil && x.Name != nil { + return *x.Name + } + return "" +} + +func (x *AgentAction) GetDeviceID() int32 { + if x != nil && x.DeviceID != nil { + return *x.DeviceID + } + return 0 +} + +func (x *AgentAction) GetIsDeleted() bool { + if x != nil && x.IsDeleted != nil { + return *x.IsDeleted + } + return false +} + +type AndroidUnsupportedActions struct { + state protoimpl.MessageState `protogen:"open.v1"` + Allowed *bool `protobuf:"varint,1,opt,name=allowed" json:"allowed,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *AndroidUnsupportedActions) Reset() { + *x = AndroidUnsupportedActions{} + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[58] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *AndroidUnsupportedActions) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*AndroidUnsupportedActions) ProtoMessage() {} + +func (x *AndroidUnsupportedActions) ProtoReflect() protoreflect.Message { + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[58] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use AndroidUnsupportedActions.ProtoReflect.Descriptor instead. +func (*AndroidUnsupportedActions) Descriptor() ([]byte, []int) { + return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{58} +} + +func (x *AndroidUnsupportedActions) GetAllowed() bool { + if x != nil && x.Allowed != nil { + return *x.Allowed + } + return false +} + +type PrimaryFeature struct { + state protoimpl.MessageState `protogen:"open.v1"` + Flags []string `protobuf:"bytes,1,rep,name=flags" json:"flags,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *PrimaryFeature) Reset() { + *x = PrimaryFeature{} + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[59] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *PrimaryFeature) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PrimaryFeature) ProtoMessage() {} + +func (x *PrimaryFeature) ProtoReflect() protoreflect.Message { + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[59] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PrimaryFeature.ProtoReflect.Descriptor instead. +func (*PrimaryFeature) Descriptor() ([]byte, []int) { + return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{59} +} + +func (x *PrimaryFeature) GetFlags() []string { + if x != nil { + return x.Flags + } + return nil +} + +type KeyExpiration struct { + state protoimpl.MessageState `protogen:"open.v1"` + ExpiredKeyEpoch *int32 `protobuf:"varint,1,opt,name=expiredKeyEpoch" json:"expiredKeyEpoch,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *KeyExpiration) Reset() { + *x = KeyExpiration{} + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[60] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *KeyExpiration) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*KeyExpiration) ProtoMessage() {} + +func (x *KeyExpiration) ProtoReflect() protoreflect.Message { + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[60] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use KeyExpiration.ProtoReflect.Descriptor instead. +func (*KeyExpiration) Descriptor() ([]byte, []int) { + return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{60} +} + +func (x *KeyExpiration) GetExpiredKeyEpoch() int32 { + if x != nil && x.ExpiredKeyEpoch != nil { + return *x.ExpiredKeyEpoch + } + return 0 +} + +type SyncActionMessage struct { + state protoimpl.MessageState `protogen:"open.v1"` + Key *waCommon.MessageKey `protobuf:"bytes,1,opt,name=key" json:"key,omitempty"` + Timestamp *int64 `protobuf:"varint,2,opt,name=timestamp" json:"timestamp,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *SyncActionMessage) Reset() { + *x = SyncActionMessage{} + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[61] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *SyncActionMessage) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SyncActionMessage) ProtoMessage() {} + +func (x *SyncActionMessage) ProtoReflect() protoreflect.Message { + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[61] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SyncActionMessage.ProtoReflect.Descriptor instead. +func (*SyncActionMessage) Descriptor() ([]byte, []int) { + return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{61} +} + +func (x *SyncActionMessage) GetKey() *waCommon.MessageKey { + if x != nil { + return x.Key + } + return nil +} + +func (x *SyncActionMessage) GetTimestamp() int64 { + if x != nil && x.Timestamp != nil { + return *x.Timestamp + } + return 0 +} + +type SyncActionMessageRange struct { + state protoimpl.MessageState `protogen:"open.v1"` + LastMessageTimestamp *int64 `protobuf:"varint,1,opt,name=lastMessageTimestamp" json:"lastMessageTimestamp,omitempty"` + LastSystemMessageTimestamp *int64 `protobuf:"varint,2,opt,name=lastSystemMessageTimestamp" json:"lastSystemMessageTimestamp,omitempty"` + Messages []*SyncActionMessage `protobuf:"bytes,3,rep,name=messages" json:"messages,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *SyncActionMessageRange) Reset() { + *x = SyncActionMessageRange{} + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[62] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *SyncActionMessageRange) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SyncActionMessageRange) ProtoMessage() {} + +func (x *SyncActionMessageRange) ProtoReflect() protoreflect.Message { + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[62] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SyncActionMessageRange.ProtoReflect.Descriptor instead. +func (*SyncActionMessageRange) Descriptor() ([]byte, []int) { + return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{62} +} + +func (x *SyncActionMessageRange) GetLastMessageTimestamp() int64 { + if x != nil && x.LastMessageTimestamp != nil { + return *x.LastMessageTimestamp + } + return 0 +} + +func (x *SyncActionMessageRange) GetLastSystemMessageTimestamp() int64 { + if x != nil && x.LastSystemMessageTimestamp != nil { + return *x.LastSystemMessageTimestamp + } + return 0 +} + +func (x *SyncActionMessageRange) GetMessages() []*SyncActionMessage { + if x != nil { + return x.Messages + } + return nil +} + +type UnarchiveChatsSetting struct { + state protoimpl.MessageState `protogen:"open.v1"` + UnarchiveChats *bool `protobuf:"varint,1,opt,name=unarchiveChats" json:"unarchiveChats,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *UnarchiveChatsSetting) Reset() { + *x = UnarchiveChatsSetting{} + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[63] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *UnarchiveChatsSetting) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*UnarchiveChatsSetting) ProtoMessage() {} + +func (x *UnarchiveChatsSetting) ProtoReflect() protoreflect.Message { + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[63] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use UnarchiveChatsSetting.ProtoReflect.Descriptor instead. +func (*UnarchiveChatsSetting) Descriptor() ([]byte, []int) { + return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{63} +} + +func (x *UnarchiveChatsSetting) GetUnarchiveChats() bool { + if x != nil && x.UnarchiveChats != nil { + return *x.UnarchiveChats + } + return false +} + +type DeleteChatAction struct { + state protoimpl.MessageState `protogen:"open.v1"` + MessageRange *SyncActionMessageRange `protobuf:"bytes,1,opt,name=messageRange" json:"messageRange,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *DeleteChatAction) Reset() { + *x = DeleteChatAction{} + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[64] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *DeleteChatAction) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DeleteChatAction) ProtoMessage() {} + +func (x *DeleteChatAction) ProtoReflect() protoreflect.Message { + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[64] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DeleteChatAction.ProtoReflect.Descriptor instead. +func (*DeleteChatAction) Descriptor() ([]byte, []int) { + return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{64} +} + +func (x *DeleteChatAction) GetMessageRange() *SyncActionMessageRange { + if x != nil { + return x.MessageRange + } + return nil +} + +type ClearChatAction struct { + state protoimpl.MessageState `protogen:"open.v1"` + MessageRange *SyncActionMessageRange `protobuf:"bytes,1,opt,name=messageRange" json:"messageRange,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ClearChatAction) Reset() { + *x = ClearChatAction{} + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[65] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ClearChatAction) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ClearChatAction) ProtoMessage() {} + +func (x *ClearChatAction) ProtoReflect() protoreflect.Message { + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[65] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ClearChatAction.ProtoReflect.Descriptor instead. +func (*ClearChatAction) Descriptor() ([]byte, []int) { + return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{65} +} + +func (x *ClearChatAction) GetMessageRange() *SyncActionMessageRange { + if x != nil { + return x.MessageRange + } + return nil +} + +type MarkChatAsReadAction struct { + state protoimpl.MessageState `protogen:"open.v1"` + Read *bool `protobuf:"varint,1,opt,name=read" json:"read,omitempty"` + MessageRange *SyncActionMessageRange `protobuf:"bytes,2,opt,name=messageRange" json:"messageRange,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *MarkChatAsReadAction) Reset() { + *x = MarkChatAsReadAction{} + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[66] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *MarkChatAsReadAction) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MarkChatAsReadAction) ProtoMessage() {} + +func (x *MarkChatAsReadAction) ProtoReflect() protoreflect.Message { + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[66] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MarkChatAsReadAction.ProtoReflect.Descriptor instead. +func (*MarkChatAsReadAction) Descriptor() ([]byte, []int) { + return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{66} +} + +func (x *MarkChatAsReadAction) GetRead() bool { + if x != nil && x.Read != nil { + return *x.Read + } + return false +} + +func (x *MarkChatAsReadAction) GetMessageRange() *SyncActionMessageRange { + if x != nil { + return x.MessageRange + } + return nil +} + +type DeleteMessageForMeAction struct { + state protoimpl.MessageState `protogen:"open.v1"` + DeleteMedia *bool `protobuf:"varint,1,opt,name=deleteMedia" json:"deleteMedia,omitempty"` + MessageTimestamp *int64 `protobuf:"varint,2,opt,name=messageTimestamp" json:"messageTimestamp,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *DeleteMessageForMeAction) Reset() { + *x = DeleteMessageForMeAction{} + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[67] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *DeleteMessageForMeAction) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*DeleteMessageForMeAction) ProtoMessage() {} + +func (x *DeleteMessageForMeAction) ProtoReflect() protoreflect.Message { + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[67] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use DeleteMessageForMeAction.ProtoReflect.Descriptor instead. +func (*DeleteMessageForMeAction) Descriptor() ([]byte, []int) { + return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{67} +} + +func (x *DeleteMessageForMeAction) GetDeleteMedia() bool { + if x != nil && x.DeleteMedia != nil { + return *x.DeleteMedia + } + return false +} + +func (x *DeleteMessageForMeAction) GetMessageTimestamp() int64 { + if x != nil && x.MessageTimestamp != nil { + return *x.MessageTimestamp + } + return 0 +} + +type ArchiveChatAction struct { + state protoimpl.MessageState `protogen:"open.v1"` + Archived *bool `protobuf:"varint,1,opt,name=archived" json:"archived,omitempty"` + MessageRange *SyncActionMessageRange `protobuf:"bytes,2,opt,name=messageRange" json:"messageRange,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ArchiveChatAction) Reset() { + *x = ArchiveChatAction{} + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[68] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ArchiveChatAction) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ArchiveChatAction) ProtoMessage() {} + +func (x *ArchiveChatAction) ProtoReflect() protoreflect.Message { + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[68] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ArchiveChatAction.ProtoReflect.Descriptor instead. +func (*ArchiveChatAction) Descriptor() ([]byte, []int) { + return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{68} +} + +func (x *ArchiveChatAction) GetArchived() bool { + if x != nil && x.Archived != nil { + return *x.Archived + } + return false +} + +func (x *ArchiveChatAction) GetMessageRange() *SyncActionMessageRange { + if x != nil { + return x.MessageRange + } + return nil +} + +type RecentEmojiWeightsAction struct { + state protoimpl.MessageState `protogen:"open.v1"` + Weights []*RecentEmojiWeight `protobuf:"bytes,1,rep,name=weights" json:"weights,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *RecentEmojiWeightsAction) Reset() { + *x = RecentEmojiWeightsAction{} + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[69] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *RecentEmojiWeightsAction) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*RecentEmojiWeightsAction) ProtoMessage() {} + +func (x *RecentEmojiWeightsAction) ProtoReflect() protoreflect.Message { + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[69] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use RecentEmojiWeightsAction.ProtoReflect.Descriptor instead. +func (*RecentEmojiWeightsAction) Descriptor() ([]byte, []int) { + return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{69} +} + +func (x *RecentEmojiWeightsAction) GetWeights() []*RecentEmojiWeight { + if x != nil { + return x.Weights + } + return nil +} + +type LabelAssociationAction struct { + state protoimpl.MessageState `protogen:"open.v1"` + Labeled *bool `protobuf:"varint,1,opt,name=labeled" json:"labeled,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *LabelAssociationAction) Reset() { + *x = LabelAssociationAction{} + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[70] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *LabelAssociationAction) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*LabelAssociationAction) ProtoMessage() {} + +func (x *LabelAssociationAction) ProtoReflect() protoreflect.Message { + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[70] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use LabelAssociationAction.ProtoReflect.Descriptor instead. +func (*LabelAssociationAction) Descriptor() ([]byte, []int) { + return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{70} +} + +func (x *LabelAssociationAction) GetLabeled() bool { + if x != nil && x.Labeled != nil { + return *x.Labeled + } + return false +} + +type QuickReplyAction struct { + state protoimpl.MessageState `protogen:"open.v1"` + Shortcut *string `protobuf:"bytes,1,opt,name=shortcut" json:"shortcut,omitempty"` + Message *string `protobuf:"bytes,2,opt,name=message" json:"message,omitempty"` + Keywords []string `protobuf:"bytes,3,rep,name=keywords" json:"keywords,omitempty"` + Count *int32 `protobuf:"varint,4,opt,name=count" json:"count,omitempty"` + Deleted *bool `protobuf:"varint,5,opt,name=deleted" json:"deleted,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *QuickReplyAction) Reset() { + *x = QuickReplyAction{} + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[71] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *QuickReplyAction) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QuickReplyAction) ProtoMessage() {} + +func (x *QuickReplyAction) ProtoReflect() protoreflect.Message { + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[71] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use QuickReplyAction.ProtoReflect.Descriptor instead. +func (*QuickReplyAction) Descriptor() ([]byte, []int) { + return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{71} +} + +func (x *QuickReplyAction) GetShortcut() string { + if x != nil && x.Shortcut != nil { + return *x.Shortcut + } + return "" +} + +func (x *QuickReplyAction) GetMessage() string { + if x != nil && x.Message != nil { + return *x.Message + } + return "" +} + +func (x *QuickReplyAction) GetKeywords() []string { + if x != nil { + return x.Keywords + } + return nil +} + +func (x *QuickReplyAction) GetCount() int32 { + if x != nil && x.Count != nil { + return *x.Count + } + return 0 +} + +func (x *QuickReplyAction) GetDeleted() bool { + if x != nil && x.Deleted != nil { + return *x.Deleted + } + return false +} + +type LocaleSetting struct { + state protoimpl.MessageState `protogen:"open.v1"` + Locale *string `protobuf:"bytes,1,opt,name=locale" json:"locale,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *LocaleSetting) Reset() { + *x = LocaleSetting{} + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[72] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *LocaleSetting) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*LocaleSetting) ProtoMessage() {} + +func (x *LocaleSetting) ProtoReflect() protoreflect.Message { + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[72] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use LocaleSetting.ProtoReflect.Descriptor instead. +func (*LocaleSetting) Descriptor() ([]byte, []int) { + return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{72} +} + +func (x *LocaleSetting) GetLocale() string { + if x != nil && x.Locale != nil { + return *x.Locale + } + return "" +} + +type PushNameSetting struct { + state protoimpl.MessageState `protogen:"open.v1"` + Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *PushNameSetting) Reset() { + *x = PushNameSetting{} + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[73] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *PushNameSetting) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PushNameSetting) ProtoMessage() {} + +func (x *PushNameSetting) ProtoReflect() protoreflect.Message { + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[73] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PushNameSetting.ProtoReflect.Descriptor instead. +func (*PushNameSetting) Descriptor() ([]byte, []int) { + return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{73} +} + +func (x *PushNameSetting) GetName() string { + if x != nil && x.Name != nil { + return *x.Name + } + return "" +} + +type PinAction struct { + state protoimpl.MessageState `protogen:"open.v1"` + Pinned *bool `protobuf:"varint,1,opt,name=pinned" json:"pinned,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *PinAction) Reset() { + *x = PinAction{} + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[74] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *PinAction) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*PinAction) ProtoMessage() {} + +func (x *PinAction) ProtoReflect() protoreflect.Message { + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[74] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use PinAction.ProtoReflect.Descriptor instead. +func (*PinAction) Descriptor() ([]byte, []int) { + return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{74} +} + +func (x *PinAction) GetPinned() bool { + if x != nil && x.Pinned != nil { + return *x.Pinned + } + return false +} + +type MuteAction struct { + state protoimpl.MessageState `protogen:"open.v1"` + Muted *bool `protobuf:"varint,1,opt,name=muted" json:"muted,omitempty"` + MuteEndTimestamp *int64 `protobuf:"varint,2,opt,name=muteEndTimestamp" json:"muteEndTimestamp,omitempty"` + AutoMuted *bool `protobuf:"varint,3,opt,name=autoMuted" json:"autoMuted,omitempty"` + MuteEveryoneMentionEndTimestamp *int64 `protobuf:"varint,4,opt,name=muteEveryoneMentionEndTimestamp" json:"muteEveryoneMentionEndTimestamp,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *MuteAction) Reset() { + *x = MuteAction{} + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[75] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *MuteAction) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*MuteAction) ProtoMessage() {} + +func (x *MuteAction) ProtoReflect() protoreflect.Message { + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[75] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use MuteAction.ProtoReflect.Descriptor instead. +func (*MuteAction) Descriptor() ([]byte, []int) { + return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{75} +} + +func (x *MuteAction) GetMuted() bool { + if x != nil && x.Muted != nil { + return *x.Muted + } + return false +} + +func (x *MuteAction) GetMuteEndTimestamp() int64 { + if x != nil && x.MuteEndTimestamp != nil { + return *x.MuteEndTimestamp + } + return 0 +} + +func (x *MuteAction) GetAutoMuted() bool { + if x != nil && x.AutoMuted != nil { + return *x.AutoMuted + } + return false +} + +func (x *MuteAction) GetMuteEveryoneMentionEndTimestamp() int64 { + if x != nil && x.MuteEveryoneMentionEndTimestamp != nil { + return *x.MuteEveryoneMentionEndTimestamp + } + return 0 +} + +type ContactAction struct { + state protoimpl.MessageState `protogen:"open.v1"` + FullName *string `protobuf:"bytes,1,opt,name=fullName" json:"fullName,omitempty"` + FirstName *string `protobuf:"bytes,2,opt,name=firstName" json:"firstName,omitempty"` + LidJID *string `protobuf:"bytes,3,opt,name=lidJID" json:"lidJID,omitempty"` + SaveOnPrimaryAddressbook *bool `protobuf:"varint,4,opt,name=saveOnPrimaryAddressbook" json:"saveOnPrimaryAddressbook,omitempty"` + PnJID *string `protobuf:"bytes,5,opt,name=pnJID" json:"pnJID,omitempty"` + Username *string `protobuf:"bytes,6,opt,name=username" json:"username,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *ContactAction) Reset() { + *x = ContactAction{} + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[76] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *ContactAction) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*ContactAction) ProtoMessage() {} + +func (x *ContactAction) ProtoReflect() protoreflect.Message { + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[76] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use ContactAction.ProtoReflect.Descriptor instead. +func (*ContactAction) Descriptor() ([]byte, []int) { + return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{76} +} + +func (x *ContactAction) GetFullName() string { + if x != nil && x.FullName != nil { + return *x.FullName + } + return "" +} + +func (x *ContactAction) GetFirstName() string { + if x != nil && x.FirstName != nil { + return *x.FirstName + } + return "" +} + +func (x *ContactAction) GetLidJID() string { + if x != nil && x.LidJID != nil { + return *x.LidJID + } + return "" +} + +func (x *ContactAction) GetSaveOnPrimaryAddressbook() bool { + if x != nil && x.SaveOnPrimaryAddressbook != nil { + return *x.SaveOnPrimaryAddressbook + } + return false +} + +func (x *ContactAction) GetPnJID() string { + if x != nil && x.PnJID != nil { + return *x.PnJID + } + return "" +} + +func (x *ContactAction) GetUsername() string { + if x != nil && x.Username != nil { + return *x.Username + } + return "" +} + +type StarAction struct { + state protoimpl.MessageState `protogen:"open.v1"` + Starred *bool `protobuf:"varint,1,opt,name=starred" json:"starred,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *StarAction) Reset() { + *x = StarAction{} + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[77] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *StarAction) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*StarAction) ProtoMessage() {} + +func (x *StarAction) ProtoReflect() protoreflect.Message { + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[77] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use StarAction.ProtoReflect.Descriptor instead. +func (*StarAction) Descriptor() ([]byte, []int) { + return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{77} +} + +func (x *StarAction) GetStarred() bool { + if x != nil && x.Starred != nil { + return *x.Starred + } + return false +} + +type SyncActionData struct { + state protoimpl.MessageState `protogen:"open.v1"` + Index []byte `protobuf:"bytes,1,opt,name=index" json:"index,omitempty"` + Value *SyncActionValue `protobuf:"bytes,2,opt,name=value" json:"value,omitempty"` + Padding []byte `protobuf:"bytes,3,opt,name=padding" json:"padding,omitempty"` + Version *int32 `protobuf:"varint,4,opt,name=version" json:"version,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *SyncActionData) Reset() { + *x = SyncActionData{} + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[78] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *SyncActionData) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SyncActionData) ProtoMessage() {} + +func (x *SyncActionData) ProtoReflect() protoreflect.Message { + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[78] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SyncActionData.ProtoReflect.Descriptor instead. +func (*SyncActionData) Descriptor() ([]byte, []int) { + return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{78} +} + +func (x *SyncActionData) GetIndex() []byte { + if x != nil { + return x.Index + } + return nil +} + +func (x *SyncActionData) GetValue() *SyncActionValue { + if x != nil { + return x.Value + } + return nil +} + +func (x *SyncActionData) GetPadding() []byte { + if x != nil { + return x.Padding + } + return nil +} + +func (x *SyncActionData) GetVersion() int32 { + if x != nil && x.Version != nil { + return *x.Version + } + return 0 +} + +type CallLogRecord_ParticipantInfo struct { + state protoimpl.MessageState `protogen:"open.v1"` + UserJID *string `protobuf:"bytes,1,opt,name=userJID" json:"userJID,omitempty"` + CallResult *CallLogRecord_CallResult `protobuf:"varint,2,opt,name=callResult,enum=WAWebProtobufSyncAction.CallLogRecord_CallResult" json:"callResult,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *CallLogRecord_ParticipantInfo) Reset() { + *x = CallLogRecord_ParticipantInfo{} + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[79] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *CallLogRecord_ParticipantInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*CallLogRecord_ParticipantInfo) ProtoMessage() {} + +func (x *CallLogRecord_ParticipantInfo) ProtoReflect() protoreflect.Message { + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[79] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use CallLogRecord_ParticipantInfo.ProtoReflect.Descriptor instead. +func (*CallLogRecord_ParticipantInfo) Descriptor() ([]byte, []int) { + return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{0, 0} +} + +func (x *CallLogRecord_ParticipantInfo) GetUserJID() string { + if x != nil && x.UserJID != nil { + return *x.UserJID + } + return "" +} + +func (x *CallLogRecord_ParticipantInfo) GetCallResult() CallLogRecord_CallResult { + if x != nil && x.CallResult != nil { + return *x.CallResult + } + return CallLogRecord_CONNECTED +} + +type FavoritesAction_Favorite struct { + state protoimpl.MessageState `protogen:"open.v1"` + ID *string `protobuf:"bytes,1,opt,name=ID" json:"ID,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *FavoritesAction_Favorite) Reset() { + *x = FavoritesAction_Favorite{} + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[80] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *FavoritesAction_Favorite) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*FavoritesAction_Favorite) ProtoMessage() {} + +func (x *FavoritesAction_Favorite) ProtoReflect() protoreflect.Message { + mi := &file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes[80] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use FavoritesAction_Favorite.ProtoReflect.Descriptor instead. +func (*FavoritesAction_Favorite) Descriptor() ([]byte, []int) { + return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP(), []int{27, 0} +} + +func (x *FavoritesAction_Favorite) GetID() string { + if x != nil && x.ID != nil { + return *x.ID + } + return "" +} + +var File_waSyncAction_WAWebProtobufSyncAction_proto protoreflect.FileDescriptor + +const file_waSyncAction_WAWebProtobufSyncAction_proto_rawDesc = "" + + "\n" + + "*waSyncAction/WAWebProtobufSyncAction.proto\x12\x17WAWebProtobufSyncAction\x1a7waChatLockSettings/WAWebProtobufsChatLockSettings.proto\x1a;waDeviceCapabilities/WAWebProtobufsDeviceCapabilities.proto\x1a\x17waCommon/WACommon.proto\"\xfc\b\n" + + "\rCallLogRecord\x12Q\n" + + "\n" + + "callResult\x18\x01 \x01(\x0e21.WAWebProtobufSyncAction.CallLogRecord.CallResultR\n" + + "callResult\x12\x1c\n" + + "\tisDndMode\x18\x02 \x01(\bR\tisDndMode\x12Z\n" + + "\rsilenceReason\x18\x03 \x01(\x0e24.WAWebProtobufSyncAction.CallLogRecord.SilenceReasonR\rsilenceReason\x12\x1a\n" + + "\bduration\x18\x04 \x01(\x03R\bduration\x12\x1c\n" + + "\tstartTime\x18\x05 \x01(\x03R\tstartTime\x12\x1e\n" + + "\n" + + "isIncoming\x18\x06 \x01(\bR\n" + + "isIncoming\x12\x18\n" + + "\aisVideo\x18\a \x01(\bR\aisVideo\x12\x1e\n" + + "\n" + + "isCallLink\x18\b \x01(\bR\n" + + "isCallLink\x12$\n" + + "\rcallLinkToken\x18\t \x01(\tR\rcallLinkToken\x12(\n" + + "\x0fscheduledCallID\x18\n" + + " \x01(\tR\x0fscheduledCallID\x12\x16\n" + + "\x06callID\x18\v \x01(\tR\x06callID\x12&\n" + + "\x0ecallCreatorJID\x18\f \x01(\tR\x0ecallCreatorJID\x12\x1a\n" + + "\bgroupJID\x18\r \x01(\tR\bgroupJID\x12Z\n" + + "\fparticipants\x18\x0e \x03(\v26.WAWebProtobufSyncAction.CallLogRecord.ParticipantInfoR\fparticipants\x12K\n" + + "\bcallType\x18\x0f \x01(\x0e2/.WAWebProtobufSyncAction.CallLogRecord.CallTypeR\bcallType\x1a~\n" + + "\x0fParticipantInfo\x12\x18\n" + + "\auserJID\x18\x01 \x01(\tR\auserJID\x12Q\n" + + "\n" + + "callResult\x18\x02 \x01(\x0e21.WAWebProtobufSyncAction.CallLogRecord.CallResultR\n" + + "callResult\";\n" + + "\bCallType\x12\v\n" + + "\aREGULAR\x10\x00\x12\x12\n" + + "\x0eSCHEDULED_CALL\x10\x01\x12\x0e\n" + + "\n" + + "VOICE_CHAT\x10\x02\"F\n" + + "\rSilenceReason\x12\b\n" + + "\x04NONE\x10\x00\x12\r\n" + + "\tSCHEDULED\x10\x01\x12\v\n" + + "\aPRIVACY\x10\x02\x12\x0f\n" + + "\vLIGHTWEIGHT\x10\x03\"\xaf\x01\n" + + "\n" + + "CallResult\x12\r\n" + + "\tCONNECTED\x10\x00\x12\f\n" + + "\bREJECTED\x10\x01\x12\r\n" + + "\tCANCELLED\x10\x02\x12\x15\n" + + "\x11ACCEPTEDELSEWHERE\x10\x03\x12\n" + + "\n" + + "\x06MISSED\x10\x04\x12\v\n" + + "\aINVALID\x10\x05\x12\x0f\n" + + "\vUNAVAILABLE\x10\x06\x12\f\n" + + "\bUPCOMING\x10\a\x12\n" + + "\n" + + "\x06FAILED\x10\b\x12\r\n" + + "\tABANDONED\x10\t\x12\v\n" + + "\aONGOING\x10\n" + + "\"\x81\x1a\n" + + "\x12SettingsSyncAction\x12\"\n" + + "\fstartAtLogin\x18\x01 \x01(\bR\fstartAtLogin\x12&\n" + + "\x0eminimizeToTray\x18\x02 \x01(\bR\x0eminimizeToTray\x12\x1a\n" + + "\blanguage\x18\x03 \x01(\tR\blanguage\x122\n" + + "\x14replaceTextWithEmoji\x18\x04 \x01(\bR\x14replaceTextWithEmoji\x12}\n" + + "\x1dbannerNotificationDisplayMode\x18\x05 \x01(\x0e27.WAWebProtobufSyncAction.SettingsSyncAction.DisplayModeR\x1dbannerNotificationDisplayMode\x12}\n" + + "\x1dunreadCounterBadgeDisplayMode\x18\x06 \x01(\x0e27.WAWebProtobufSyncAction.SettingsSyncAction.DisplayModeR\x1dunreadCounterBadgeDisplayMode\x12D\n" + + "\x1disMessagesNotificationEnabled\x18\a \x01(\bR\x1disMessagesNotificationEnabled\x12>\n" + + "\x1aisCallsNotificationEnabled\x18\b \x01(\bR\x1aisCallsNotificationEnabled\x12F\n" + + "\x1eisReactionsNotificationEnabled\x18\t \x01(\bR\x1eisReactionsNotificationEnabled\x12R\n" + + "$isStatusReactionsNotificationEnabled\x18\n" + + " \x01(\bR$isStatusReactionsNotificationEnabled\x12P\n" + + "#isTextPreviewForNotificationEnabled\x18\v \x01(\bR#isTextPreviewForNotificationEnabled\x12<\n" + + "\x19defaultNotificationToneID\x18\f \x01(\x05R\x19defaultNotificationToneID\x12F\n" + + "\x1egroupDefaultNotificationToneID\x18\r \x01(\x05R\x1egroupDefaultNotificationToneID\x12\x1a\n" + + "\bappTheme\x18\x0e \x01(\x05R\bappTheme\x12 \n" + + "\vwallpaperID\x18\x0f \x01(\x05R\vwallpaperID\x12:\n" + + "\x18isDoodleWallpaperEnabled\x18\x10 \x01(\bR\x18isDoodleWallpaperEnabled\x12\x1a\n" + + "\bfontSize\x18\x11 \x01(\x05R\bfontSize\x12@\n" + + "\x1bisPhotosAutodownloadEnabled\x18\x12 \x01(\bR\x1bisPhotosAutodownloadEnabled\x12@\n" + + "\x1bisAudiosAutodownloadEnabled\x18\x13 \x01(\bR\x1bisAudiosAutodownloadEnabled\x12@\n" + + "\x1bisVideosAutodownloadEnabled\x18\x14 \x01(\bR\x1bisVideosAutodownloadEnabled\x12F\n" + + "\x1eisDocumentsAutodownloadEnabled\x18\x15 \x01(\bR\x1eisDocumentsAutodownloadEnabled\x120\n" + + "\x13disableLinkPreviews\x18\x16 \x01(\bR\x13disableLinkPreviews\x12.\n" + + "\x12notificationToneID\x18\x17 \x01(\x05R\x12notificationToneID\x12o\n" + + "\x12mediaUploadQuality\x18\x18 \x01(\x0e2?.WAWebProtobufSyncAction.SettingsSyncAction.MediaQualitySettingR\x12mediaUploadQuality\x120\n" + + "\x13isSpellCheckEnabled\x18\x19 \x01(\bR\x13isSpellCheckEnabled\x122\n" + + "\x14isEnterToSendEnabled\x18\x1a \x01(\bR\x14isEnterToSendEnabled\x12L\n" + + "!isGroupMessageNotificationEnabled\x18\x1b \x01(\bR!isGroupMessageNotificationEnabled\x12P\n" + + "#isGroupReactionsNotificationEnabled\x18\x1c \x01(\bR#isGroupReactionsNotificationEnabled\x12@\n" + + "\x1bisStatusNotificationEnabled\x18\x1d \x01(\bR\x1bisStatusNotificationEnabled\x12:\n" + + "\x18statusNotificationToneID\x18\x1e \x01(\x05R\x18statusNotificationToneID\x12N\n" + + "\"shouldPlaySoundForCallNotification\x18\x1f \x01(\bR\"shouldPlaySoundForCallNotification\"F\n" + + "\x13MediaQualitySetting\x12\x19\n" + + "\x15MEDIA_QUALITY_UNKNOWN\x10\x00\x12\f\n" + + "\bSTANDARD\x10\x01\x12\x06\n" + + "\x02HD\x10\x02\"Y\n" + + "\vDisplayMode\x12\x18\n" + + "\x14DISPLAY_MODE_UNKNOWN\x10\x00\x12\n" + + "\n" + + "\x06ALWAYS\x10\x01\x12\t\n" + + "\x05NEVER\x10\x02\x12\x19\n" + + "\x15ONLY_WHEN_APP_IS_OPEN\x10\x03\"\x94\b\n" + + "\n" + + "SettingKey\x12\x17\n" + + "\x13SETTING_KEY_UNKNOWN\x10\x00\x12\x12\n" + + "\x0eSTART_AT_LOGIN\x10\x01\x12\x14\n" + + "\x10MINIMIZE_TO_TRAY\x10\x02\x12\f\n" + + "\bLANGUAGE\x10\x03\x12\x1b\n" + + "\x17REPLACE_TEXT_WITH_EMOJI\x10\x04\x12$\n" + + " BANNER_NOTIFICATION_DISPLAY_MODE\x10\x05\x12%\n" + + "!UNREAD_COUNTER_BADGE_DISPLAY_MODE\x10\x06\x12$\n" + + " IS_MESSAGES_NOTIFICATION_ENABLED\x10\a\x12!\n" + + "\x1dIS_CALLS_NOTIFICATION_ENABLED\x10\b\x12%\n" + + "!IS_REACTIONS_NOTIFICATION_ENABLED\x10\t\x12,\n" + + "(IS_STATUS_REACTIONS_NOTIFICATION_ENABLED\x10\n" + + "\x12,\n" + + "(IS_TEXT_PREVIEW_FOR_NOTIFICATION_ENABLED\x10\v\x12 \n" + + "\x1cDEFAULT_NOTIFICATION_TONE_ID\x10\f\x12&\n" + + "\"GROUP_DEFAULT_NOTIFICATION_TONE_ID\x10\r\x12\r\n" + + "\tAPP_THEME\x10\x0e\x12\x10\n" + + "\fWALLPAPER_ID\x10\x0f\x12\x1f\n" + + "\x1bIS_DOODLE_WALLPAPER_ENABLED\x10\x10\x12\r\n" + + "\tFONT_SIZE\x10\x11\x12\"\n" + + "\x1eIS_PHOTOS_AUTODOWNLOAD_ENABLED\x10\x12\x12\"\n" + + "\x1eIS_AUDIOS_AUTODOWNLOAD_ENABLED\x10\x13\x12\"\n" + + "\x1eIS_VIDEOS_AUTODOWNLOAD_ENABLED\x10\x14\x12%\n" + + "!IS_DOCUMENTS_AUTODOWNLOAD_ENABLED\x10\x15\x12\x19\n" + + "\x15DISABLE_LINK_PREVIEWS\x10\x16\x12\x18\n" + + "\x14NOTIFICATION_TONE_ID\x10\x17\x12\x18\n" + + "\x14MEDIA_UPLOAD_QUALITY\x10\x18\x12\x1a\n" + + "\x16IS_SPELL_CHECK_ENABLED\x10\x19\x12\x1c\n" + + "\x18IS_ENTER_TO_SEND_ENABLED\x10\x1a\x12)\n" + + "%IS_GROUP_MESSAGE_NOTIFICATION_ENABLED\x10\x1b\x12+\n" + + "'IS_GROUP_REACTIONS_NOTIFICATION_ENABLED\x10\x1c\x12\"\n" + + "\x1eIS_STATUS_NOTIFICATION_ENABLED\x10\x1d\x12\x1f\n" + + "\x1bSTATUS_NOTIFICATION_TONE_ID\x10\x1e\x12+\n" + + "'SHOULD_PLAY_SOUND_FOR_CALL_NOTIFICATION\x10\x1f\"R\n" + + "\x0fSettingPlatform\x12\x14\n" + + "\x10PLATFORM_UNKNOWN\x10\x00\x12\a\n" + + "\x03WEB\x10\x01\x12\n" + + "\n" + + "\x06HYBRID\x10\x02\x12\v\n" + + "\aWINDOWS\x10\x03\x12\a\n" + + "\x03MAC\x10\x04\"\xc5\x01\n" + + "\x18InteractiveMessageAction\x12b\n" + + "\x04type\x18\x01 \x02(\x0e2N.WAWebProtobufSyncAction.InteractiveMessageAction.InteractiveMessageActionModeR\x04type\x12\x14\n" + + "\x05agmID\x18\x02 \x01(\tR\x05agmID\"/\n" + + "\x1cInteractiveMessageActionMode\x12\x0f\n" + + "\vDISABLE_CTA\x10\x01\"\xf1\x01\n" + + "\x1ePrivateProcessingSettingAction\x12\x89\x01\n" + + "\x17privateProcessingStatus\x18\x01 \x01(\x0e2O.WAWebProtobufSyncAction.PrivateProcessingSettingAction.PrivateProcessingStatusR\x17privateProcessingStatus\"C\n" + + "\x17PrivateProcessingStatus\x12\r\n" + + "\tUNDEFINED\x10\x00\x12\v\n" + + "\aENABLED\x10\x01\x12\f\n" + + "\bDISABLED\x10\x02\"\x87\x02\n" + + "\x13AvatarUpdatedAction\x12Z\n" + + "\teventType\x18\x01 \x01(\x0e2<.WAWebProtobufSyncAction.AvatarUpdatedAction.AvatarEventTypeR\teventType\x12Z\n" + + "\x14recentAvatarStickers\x18\x02 \x03(\v2&.WAWebProtobufSyncAction.StickerActionR\x14recentAvatarStickers\"8\n" + + "\x0fAvatarEventType\x12\v\n" + + "\aUPDATED\x10\x00\x12\v\n" + + "\aCREATED\x10\x01\x12\v\n" + + "\aDELETED\x10\x02\"\xe1\x01\n" + + "\x1cMaibaAIFeaturesControlAction\x12t\n" + + "\x0faiFeatureStatus\x18\x01 \x01(\x0e2J.WAWebProtobufSyncAction.MaibaAIFeaturesControlAction.MaibaAIFeatureStatusR\x0faiFeatureStatus\"K\n" + + "\x14MaibaAIFeatureStatus\x12\v\n" + + "\aENABLED\x10\x00\x12\x18\n" + + "\x14ENABLED_HAS_LEARNING\x10\x01\x12\f\n" + + "\bDISABLED\x10\x02\"\xb9\x01\n" + + "\x10PaymentTosAction\x12]\n" + + "\rpaymentNotice\x18\x01 \x02(\x0e27.WAWebProtobufSyncAction.PaymentTosAction.PaymentNoticeR\rpaymentNotice\x12\x1a\n" + + "\baccepted\x18\x02 \x02(\bR\baccepted\"*\n" + + "\rPaymentNotice\x12\x19\n" + + "\x15BR_PAY_PRIVACY_POLICY\x10\x00\"\xb1\x02\n" + + "!NotificationActivitySettingAction\x12\x98\x01\n" + + "\x1bnotificationActivitySetting\x18\x01 \x01(\x0e2V.WAWebProtobufSyncAction.NotificationActivitySettingAction.NotificationActivitySettingR\x1bnotificationActivitySetting\"q\n" + + "\x1bNotificationActivitySetting\x12\x18\n" + + "\x14DEFAULT_ALL_MESSAGES\x10\x00\x12\x10\n" + + "\fALL_MESSAGES\x10\x01\x12\x0e\n" + + "\n" + + "HIGHLIGHTS\x10\x02\x12\x16\n" + + "\x12DEFAULT_HIGHLIGHTS\x10\x03\"\xbe\x01\n" + + "\x1cWaffleAccountLinkStateAction\x12d\n" + + "\tlinkState\x18\x02 \x01(\x0e2F.WAWebProtobufSyncAction.WaffleAccountLinkStateAction.AccountLinkStateR\tlinkState\"8\n" + + "\x10AccountLinkState\x12\n" + + "\n" + + "\x06ACTIVE\x10\x00\x12\n" + + "\n" + + "\x06PAUSED\x10\x01\x12\f\n" + + "\bUNLINKED\x10\x02\"\xf8\x01\n" + + "\x1cMerchantPaymentPartnerAction\x12T\n" + + "\x06status\x18\x01 \x02(\x0e2<.WAWebProtobufSyncAction.MerchantPaymentPartnerAction.StatusR\x06status\x12\x18\n" + + "\acountry\x18\x02 \x02(\tR\acountry\x12 \n" + + "\vgatewayName\x18\x03 \x01(\tR\vgatewayName\x12\"\n" + + "\fcredentialID\x18\x04 \x01(\tR\fcredentialID\"\"\n" + + "\x06Status\x12\n" + + "\n" + + "\x06ACTIVE\x10\x00\x12\f\n" + + "\bINACTIVE\x10\x01\"\x88\x02\n" + + "\x0eNoteEditAction\x12D\n" + + "\x04type\x18\x01 \x01(\x0e20.WAWebProtobufSyncAction.NoteEditAction.NoteTypeR\x04type\x12\x18\n" + + "\achatJID\x18\x02 \x01(\tR\achatJID\x12\x1c\n" + + "\tcreatedAt\x18\x03 \x01(\x03R\tcreatedAt\x12\x18\n" + + "\adeleted\x18\x04 \x01(\bR\adeleted\x120\n" + + "\x13unstructuredContent\x18\x05 \x01(\tR\x13unstructuredContent\",\n" + + "\bNoteType\x12\x10\n" + + "\fUNSTRUCTURED\x10\x01\x12\x0e\n" + + "\n" + + "STRUCTURED\x10\x02\"\xe2\x01\n" + + "\x13StatusPrivacyAction\x12W\n" + + "\x04mode\x18\x01 \x01(\x0e2C.WAWebProtobufSyncAction.StatusPrivacyAction.StatusDistributionModeR\x04mode\x12\x18\n" + + "\auserJID\x18\x02 \x03(\tR\auserJID\"X\n" + + "\x16StatusDistributionMode\x12\x0e\n" + + "\n" + + "ALLOW_LIST\x10\x00\x12\r\n" + + "\tDENY_LIST\x10\x01\x12\f\n" + + "\bCONTACTS\x10\x02\x12\x11\n" + + "\rCLOSE_FRIENDS\x10\x03\"\xd2\x02\n" + + "\x16MarketingMessageAction\x12\x12\n" + + "\x04name\x18\x01 \x01(\tR\x04name\x12\x18\n" + + "\amessage\x18\x02 \x01(\tR\amessage\x12a\n" + + "\x04type\x18\x03 \x01(\x0e2M.WAWebProtobufSyncAction.MarketingMessageAction.MarketingMessagePrototypeTypeR\x04type\x12\x1c\n" + + "\tcreatedAt\x18\x04 \x01(\x03R\tcreatedAt\x12\x1e\n" + + "\n" + + "lastSentAt\x18\x05 \x01(\x03R\n" + + "lastSentAt\x12\x1c\n" + + "\tisDeleted\x18\x06 \x01(\bR\tisDeleted\x12\x18\n" + + "\amediaID\x18\a \x01(\tR\amediaID\"1\n" + + "\x1dMarketingMessagePrototypeType\x12\x10\n" + + "\fPERSONALIZED\x10\x00\"\xa9\x01\n" + + "\x1bUsernameChatStartModeAction\x12h\n" + + "\rchatStartMode\x18\x01 \x01(\x0e2B.WAWebProtobufSyncAction.UsernameChatStartModeAction.ChatStartModeR\rchatStartMode\" \n" + + "\rChatStartMode\x12\a\n" + + "\x03LID\x10\x01\x12\x06\n" + + "\x02PN\x10\x02\"\xdf\x03\n" + + "\x0fLabelEditAction\x12\x12\n" + + "\x04name\x18\x01 \x01(\tR\x04name\x12\x14\n" + + "\x05color\x18\x02 \x01(\x05R\x05color\x12\"\n" + + "\fpredefinedID\x18\x03 \x01(\x05R\fpredefinedID\x12\x18\n" + + "\adeleted\x18\x04 \x01(\bR\adeleted\x12\x1e\n" + + "\n" + + "orderIndex\x18\x05 \x01(\x05R\n" + + "orderIndex\x12\x1a\n" + + "\bisActive\x18\x06 \x01(\bR\bisActive\x12E\n" + + "\x04type\x18\a \x01(\x0e21.WAWebProtobufSyncAction.LabelEditAction.ListTypeR\x04type\x12 \n" + + "\visImmutable\x18\b \x01(\bR\visImmutable\x12$\n" + + "\rmuteEndTimeMS\x18\t \x01(\x03R\rmuteEndTimeMS\"\x98\x01\n" + + "\bListType\x12\b\n" + + "\x04NONE\x10\x00\x12\n" + + "\n" + + "\x06UNREAD\x10\x01\x12\n" + + "\n" + + "\x06GROUPS\x10\x02\x12\r\n" + + "\tFAVORITES\x10\x03\x12\x0e\n" + + "\n" + + "PREDEFINED\x10\x04\x12\n" + + "\n" + + "\x06CUSTOM\x10\x05\x12\r\n" + + "\tCOMMUNITY\x10\x06\x12\x13\n" + + "\x0fSERVER_ASSIGNED\x10\a\x12\v\n" + + "\aDRAFTED\x10\b\x12\x0e\n" + + "\n" + + "AI_HANDOFF\x10\t\"\xa3\x05\n" + + "\x0ePatchDebugData\x12$\n" + + "\rcurrentLthash\x18\x01 \x01(\fR\rcurrentLthash\x12\x1c\n" + + "\tnewLthash\x18\x02 \x01(\fR\tnewLthash\x12\"\n" + + "\fpatchVersion\x18\x03 \x01(\fR\fpatchVersion\x12&\n" + + "\x0ecollectionName\x18\x04 \x01(\fR\x0ecollectionName\x12X\n" + + "'firstFourBytesFromAHashOfSnapshotMACKey\x18\x05 \x01(\fR'firstFourBytesFromAHashOfSnapshotMACKey\x12,\n" + + "\x11newLthashSubtract\x18\x06 \x01(\fR\x11newLthashSubtract\x12\x1c\n" + + "\tnumberAdd\x18\a \x01(\x05R\tnumberAdd\x12\"\n" + + "\fnumberRemove\x18\b \x01(\x05R\fnumberRemove\x12&\n" + + "\x0enumberOverride\x18\t \x01(\x05R\x0enumberOverride\x12X\n" + + "\x0esenderPlatform\x18\n" + + " \x01(\x0e20.WAWebProtobufSyncAction.PatchDebugData.PlatformR\x0esenderPlatform\x12(\n" + + "\x0fisSenderPrimary\x18\v \x01(\bR\x0fisSenderPrimary\"\x8a\x01\n" + + "\bPlatform\x12\v\n" + + "\aANDROID\x10\x00\x12\b\n" + + "\x04SMBA\x10\x01\x12\n" + + "\n" + + "\x06IPHONE\x10\x02\x12\b\n" + + "\x04SMBI\x10\x03\x12\a\n" + + "\x03WEB\x10\x04\x12\a\n" + + "\x03UWP\x10\x05\x12\n" + + "\n" + + "\x06DARWIN\x10\x06\x12\b\n" + + "\x04IPAD\x10\a\x12\n" + + "\n" + + "\x06WEAROS\x10\b\x12\b\n" + + "\x04WASG\x10\t\x12\t\n" + + "\x05WEARM\x10\n" + + "\x12\b\n" + + "\x04CAPI\x10\v\"A\n" + + "\x11RecentEmojiWeight\x12\x14\n" + + "\x05emoji\x18\x01 \x01(\tR\x05emoji\x12\x16\n" + + "\x06weight\x18\x02 \x01(\x02R\x06weight\"\xd27\n" + + "\x0fSyncActionValue\x12\x1c\n" + + "\ttimestamp\x18\x01 \x01(\x03R\ttimestamp\x12C\n" + + "\n" + + "starAction\x18\x02 \x01(\v2#.WAWebProtobufSyncAction.StarActionR\n" + + "starAction\x12L\n" + + "\rcontactAction\x18\x03 \x01(\v2&.WAWebProtobufSyncAction.ContactActionR\rcontactAction\x12C\n" + + "\n" + + "muteAction\x18\x04 \x01(\v2#.WAWebProtobufSyncAction.MuteActionR\n" + + "muteAction\x12@\n" + + "\tpinAction\x18\x05 \x01(\v2\".WAWebProtobufSyncAction.PinActionR\tpinAction\x12R\n" + + "\x0fpushNameSetting\x18\a \x01(\v2(.WAWebProtobufSyncAction.PushNameSettingR\x0fpushNameSetting\x12U\n" + + "\x10quickReplyAction\x18\b \x01(\v2).WAWebProtobufSyncAction.QuickReplyActionR\x10quickReplyAction\x12m\n" + + "\x18recentEmojiWeightsAction\x18\v \x01(\v21.WAWebProtobufSyncAction.RecentEmojiWeightsActionR\x18recentEmojiWeightsAction\x12R\n" + + "\x0flabelEditAction\x18\x0e \x01(\v2(.WAWebProtobufSyncAction.LabelEditActionR\x0flabelEditAction\x12g\n" + + "\x16labelAssociationAction\x18\x0f \x01(\v2/.WAWebProtobufSyncAction.LabelAssociationActionR\x16labelAssociationAction\x12L\n" + + "\rlocaleSetting\x18\x10 \x01(\v2&.WAWebProtobufSyncAction.LocaleSettingR\rlocaleSetting\x12X\n" + + "\x11archiveChatAction\x18\x11 \x01(\v2*.WAWebProtobufSyncAction.ArchiveChatActionR\x11archiveChatAction\x12m\n" + + "\x18deleteMessageForMeAction\x18\x12 \x01(\v21.WAWebProtobufSyncAction.DeleteMessageForMeActionR\x18deleteMessageForMeAction\x12L\n" + + "\rkeyExpiration\x18\x13 \x01(\v2&.WAWebProtobufSyncAction.KeyExpirationR\rkeyExpiration\x12a\n" + + "\x14markChatAsReadAction\x18\x14 \x01(\v2-.WAWebProtobufSyncAction.MarkChatAsReadActionR\x14markChatAsReadAction\x12R\n" + + "\x0fclearChatAction\x18\x15 \x01(\v2(.WAWebProtobufSyncAction.ClearChatActionR\x0fclearChatAction\x12U\n" + + "\x10deleteChatAction\x18\x16 \x01(\v2).WAWebProtobufSyncAction.DeleteChatActionR\x10deleteChatAction\x12d\n" + + "\x15unarchiveChatsSetting\x18\x17 \x01(\v2..WAWebProtobufSyncAction.UnarchiveChatsSettingR\x15unarchiveChatsSetting\x12O\n" + + "\x0eprimaryFeature\x18\x18 \x01(\v2'.WAWebProtobufSyncAction.PrimaryFeatureR\x0eprimaryFeature\x12p\n" + + "\x19androidUnsupportedActions\x18\x1a \x01(\v22.WAWebProtobufSyncAction.AndroidUnsupportedActionsR\x19androidUnsupportedActions\x12F\n" + + "\vagentAction\x18\x1b \x01(\v2$.WAWebProtobufSyncAction.AgentActionR\vagentAction\x12[\n" + + "\x12subscriptionAction\x18\x1c \x01(\v2+.WAWebProtobufSyncAction.SubscriptionActionR\x12subscriptionAction\x12a\n" + + "\x14userStatusMuteAction\x18\x1d \x01(\v2-.WAWebProtobufSyncAction.UserStatusMuteActionR\x14userStatusMuteAction\x12U\n" + + "\x10timeFormatAction\x18\x1e \x01(\v2).WAWebProtobufSyncAction.TimeFormatActionR\x10timeFormatAction\x12@\n" + + "\tnuxAction\x18\x1f \x01(\v2\".WAWebProtobufSyncAction.NuxActionR\tnuxAction\x12a\n" + + "\x14primaryVersionAction\x18 \x01(\v2-.WAWebProtobufSyncAction.PrimaryVersionActionR\x14primaryVersionAction\x12L\n" + + "\rstickerAction\x18! \x01(\v2&.WAWebProtobufSyncAction.StickerActionR\rstickerAction\x12p\n" + + "\x19removeRecentStickerAction\x18\" \x01(\v22.WAWebProtobufSyncAction.RemoveRecentStickerActionR\x19removeRecentStickerAction\x12U\n" + + "\x0echatAssignment\x18# \x01(\v2-.WAWebProtobufSyncAction.ChatAssignmentActionR\x0echatAssignment\x12y\n" + + "\x1achatAssignmentOpenedStatus\x18$ \x01(\v29.WAWebProtobufSyncAction.ChatAssignmentOpenedStatusActionR\x1achatAssignmentOpenedStatus\x12[\n" + + "\x12pnForLidChatAction\x18% \x01(\v2+.WAWebProtobufSyncAction.PnForLidChatActionR\x12pnForLidChatAction\x12g\n" + + "\x16marketingMessageAction\x18& \x01(\v2/.WAWebProtobufSyncAction.MarketingMessageActionR\x16marketingMessageAction\x12\x82\x01\n" + + "\x1fmarketingMessageBroadcastAction\x18' \x01(\v28.WAWebProtobufSyncAction.MarketingMessageBroadcastActionR\x1fmarketingMessageBroadcastAction\x12d\n" + + "\x15externalWebBetaAction\x18( \x01(\v2..WAWebProtobufSyncAction.ExternalWebBetaActionR\x15externalWebBetaAction\x12v\n" + + "\x1bprivacySettingRelayAllCalls\x18) \x01(\v24.WAWebProtobufSyncAction.PrivacySettingRelayAllCallsR\x1bprivacySettingRelayAllCalls\x12L\n" + + "\rcallLogAction\x18* \x01(\v2&.WAWebProtobufSyncAction.CallLogActionR\rcallLogAction\x127\n" + + "\x06ugcBot\x18+ \x01(\v2\x1f.WAWebProtobufSyncAction.UGCBotR\x06ugcBot\x12R\n" + + "\rstatusPrivacy\x18, \x01(\v2,.WAWebProtobufSyncAction.StatusPrivacyActionR\rstatusPrivacy\x12j\n" + + "\x17botWelcomeRequestAction\x18- \x01(\v20.WAWebProtobufSyncAction.BotWelcomeRequestActionR\x17botWelcomeRequestAction\x12p\n" + + "\x17deleteIndividualCallLog\x18. \x01(\v26.WAWebProtobufSyncAction.DeleteIndividualCallLogActionR\x17deleteIndividualCallLog\x12d\n" + + "\x15labelReorderingAction\x18/ \x01(\v2..WAWebProtobufSyncAction.LabelReorderingActionR\x15labelReorderingAction\x12X\n" + + "\x11paymentInfoAction\x180 \x01(\v2*.WAWebProtobufSyncAction.PaymentInfoActionR\x11paymentInfoAction\x12s\n" + + "\x1acustomPaymentMethodsAction\x181 \x01(\v23.WAWebProtobufSyncAction.CustomPaymentMethodsActionR\x1acustomPaymentMethodsAction\x12O\n" + + "\x0elockChatAction\x182 \x01(\v2'.WAWebProtobufSyncAction.LockChatActionR\x0elockChatAction\x12\\\n" + + "\x10chatLockSettings\x183 \x01(\v20.WAWebProtobufsChatLockSettings.ChatLockSettingsR\x10chatLockSettings\x12m\n" + + "\x18wamoUserIdentifierAction\x184 \x01(\v21.WAWebProtobufSyncAction.WamoUserIdentifierActionR\x18wamoUserIdentifierAction\x12\x9a\x01\n" + + "'privacySettingDisableLinkPreviewsAction\x185 \x01(\v2@.WAWebProtobufSyncAction.PrivacySettingDisableLinkPreviewsActionR'privacySettingDisableLinkPreviewsAction\x12d\n" + + "\x12deviceCapabilities\x186 \x01(\v24.WAWebProtobufsDeviceCapabilities.DeviceCapabilitiesR\x12deviceCapabilities\x12O\n" + + "\x0enoteEditAction\x187 \x01(\v2'.WAWebProtobufSyncAction.NoteEditActionR\x0enoteEditAction\x12R\n" + + "\x0ffavoritesAction\x188 \x01(\v2(.WAWebProtobufSyncAction.FavoritesActionR\x0ffavoritesAction\x12y\n" + + "\x1cmerchantPaymentPartnerAction\x189 \x01(\v25.WAWebProtobufSyncAction.MerchantPaymentPartnerActionR\x1cmerchantPaymentPartnerAction\x12y\n" + + "\x1cwaffleAccountLinkStateAction\x18: \x01(\v25.WAWebProtobufSyncAction.WaffleAccountLinkStateActionR\x1cwaffleAccountLinkStateAction\x12j\n" + + "\x15usernameChatStartMode\x18; \x01(\v24.WAWebProtobufSyncAction.UsernameChatStartModeActionR\x15usernameChatStartMode\x12\x88\x01\n" + + "!notificationActivitySettingAction\x18< \x01(\v2:.WAWebProtobufSyncAction.NotificationActivitySettingActionR!notificationActivitySettingAction\x12U\n" + + "\x10lidContactAction\x18= \x01(\v2).WAWebProtobufSyncAction.LidContactActionR\x10lidContactAction\x12\x85\x01\n" + + " ctwaPerCustomerDataSharingAction\x18> \x01(\v29.WAWebProtobufSyncAction.CtwaPerCustomerDataSharingActionR ctwaPerCustomerDataSharingAction\x12U\n" + + "\x10paymentTosAction\x18? \x01(\v2).WAWebProtobufSyncAction.PaymentTosActionR\x10paymentTosAction\x12\xc7\x01\n" + + "6privacySettingChannelsPersonalisedRecommendationAction\x18@ \x01(\v2O.WAWebProtobufSyncAction.PrivacySettingChannelsPersonalisedRecommendationActionR6privacySettingChannelsPersonalisedRecommendationAction\x12y\n" + + "\x1cdetectedOutcomesStatusAction\x18B \x01(\v25.WAWebProtobufSyncAction.DetectedOutcomesStatusActionR\x1cdetectedOutcomesStatusAction\x12y\n" + + "\x1cmaibaAiFeaturesControlAction\x18D \x01(\v25.WAWebProtobufSyncAction.MaibaAIFeaturesControlActionR\x1cmaibaAiFeaturesControlAction\x12v\n" + + "\x1bbusinessBroadcastListAction\x18E \x01(\v24.WAWebProtobufSyncAction.BusinessBroadcastListActionR\x1bbusinessBroadcastListAction\x12X\n" + + "\x11musicUserIDAction\x18F \x01(\v2*.WAWebProtobufSyncAction.MusicUserIdActionR\x11musicUserIDAction\x12\xa9\x01\n" + + ",statusPostOptInNotificationPreferencesAction\x18G \x01(\v2E.WAWebProtobufSyncAction.StatusPostOptInNotificationPreferencesActionR,statusPostOptInNotificationPreferencesAction\x12^\n" + + "\x13avatarUpdatedAction\x18H \x01(\v2,.WAWebProtobufSyncAction.AvatarUpdatedActionR\x13avatarUpdatedAction\x12\x7f\n" + + "\x1eprivateProcessingSettingAction\x18J \x01(\v27.WAWebProtobufSyncAction.PrivateProcessingSettingActionR\x1eprivateProcessingSettingAction\x12\x7f\n" + + "\x1enewsletterSavedInterestsAction\x18K \x01(\v27.WAWebProtobufSyncAction.NewsletterSavedInterestsActionR\x1enewsletterSavedInterestsAction\x12a\n" + + "\x14aiThreadRenameAction\x18L \x01(\v2-.WAWebProtobufSyncAction.AiThreadRenameActionR\x14aiThreadRenameAction\x12m\n" + + "\x18interactiveMessageAction\x18M \x01(\v21.WAWebProtobufSyncAction.InteractiveMessageActionR\x18interactiveMessageAction\x12[\n" + + "\x12settingsSyncAction\x18N \x01(\v2+.WAWebProtobufSyncAction.SettingsSyncActionR\x12settingsSyncAction\x12U\n" + + "\x10outContactAction\x18O \x01(\v2).WAWebProtobufSyncAction.OutContactActionR\x10outContactAction\x12X\n" + + "\x11nctSaltSyncAction\x18P \x01(\v2*.WAWebProtobufSyncAction.NctSaltSyncActionR\x11nctSaltSyncAction\"'\n" + + "\x11NctSaltSyncAction\x12\x12\n" + + "\x04salt\x18\x01 \x01(\fR\x04salt\"2\n" + + "\x14AiThreadRenameAction\x12\x1a\n" + + "\bnewTitle\x18\x01 \x01(\tR\bnewTitle\"H\n" + + ",StatusPostOptInNotificationPreferencesAction\x12\x18\n" + + "\aenabled\x18\x01 \x01(\bR\aenabled\"H\n" + + "\x18BroadcastListParticipant\x12\x16\n" + + "\x06lidJID\x18\x01 \x02(\tR\x06lidJID\x12\x14\n" + + "\x05pnJID\x18\x02 \x01(\tR\x05pnJID\"\xc6\x01\n" + + "\x1bBusinessBroadcastListAction\x12\x18\n" + + "\adeleted\x18\x01 \x01(\bR\adeleted\x12U\n" + + "\fparticipants\x18\x02 \x03(\v21.WAWebProtobufSyncAction.BroadcastListParticipantR\fparticipants\x12\x1a\n" + + "\blistName\x18\x03 \x01(\tR\blistName\x12\x1a\n" + + "\blabelIDs\x18\x04 \x03(\tR\blabelIDs\">\n" + + "\"BusinessBroadcastAssociationAction\x12\x18\n" + + "\adeleted\x18\x01 \x01(\bR\adeleted\"t\n" + + " CtwaPerCustomerDataSharingAction\x12P\n" + + "#isCtwaPerCustomerDataSharingEnabled\x18\x01 \x01(\bR#isCtwaPerCustomerDataSharingEnabled\"L\n" + + "\x10OutContactAction\x12\x1a\n" + + "\bfullName\x18\x01 \x01(\tR\bfullName\x12\x1c\n" + + "\tfirstName\x18\x02 \x01(\tR\tfirstName\"h\n" + + "\x10LidContactAction\x12\x1a\n" + + "\bfullName\x18\x01 \x01(\tR\bfullName\x12\x1c\n" + + "\tfirstName\x18\x02 \x01(\tR\tfirstName\x12\x1a\n" + + "\busername\x18\x03 \x01(\tR\busername\"~\n" + + "\x0fFavoritesAction\x12O\n" + + "\tfavorites\x18\x01 \x03(\v21.WAWebProtobufSyncAction.FavoritesAction.FavoriteR\tfavorites\x1a\x1a\n" + + "\bFavorite\x12\x0e\n" + + "\x02ID\x18\x01 \x01(\tR\x02ID\"`\n" + + "6PrivacySettingChannelsPersonalisedRecommendationAction\x12&\n" + + "\x0eisUserOptedOut\x18\x01 \x01(\bR\x0eisUserOptedOut\"Y\n" + + "'PrivacySettingDisableLinkPreviewsAction\x12.\n" + + "\x12isPreviewsDisabled\x18\x01 \x01(\bR\x12isPreviewsDisabled\":\n" + + "\x18WamoUserIdentifierAction\x12\x1e\n" + + "\n" + + "identifier\x18\x01 \x01(\tR\n" + + "identifier\"(\n" + + "\x0eLockChatAction\x12\x16\n" + + "\x06locked\x18\x01 \x01(\bR\x06locked\"~\n" + + "\x1aCustomPaymentMethodsAction\x12`\n" + + "\x14customPaymentMethods\x18\x01 \x03(\v2,.WAWebProtobufSyncAction.CustomPaymentMethodR\x14customPaymentMethods\"\xb9\x01\n" + + "\x13CustomPaymentMethod\x12\"\n" + + "\fcredentialID\x18\x01 \x02(\tR\fcredentialID\x12\x18\n" + + "\acountry\x18\x02 \x02(\tR\acountry\x12\x12\n" + + "\x04type\x18\x03 \x02(\tR\x04type\x12P\n" + + "\bmetadata\x18\x04 \x03(\v24.WAWebProtobufSyncAction.CustomPaymentMethodMetadataR\bmetadata\"E\n" + + "\x1bCustomPaymentMethodMetadata\x12\x10\n" + + "\x03key\x18\x01 \x02(\tR\x03key\x12\x14\n" + + "\x05value\x18\x02 \x02(\tR\x05value\"%\n" + + "\x11PaymentInfoAction\x12\x10\n" + + "\x03cpi\x18\x01 \x01(\tR\x03cpi\"?\n" + + "\x15LabelReorderingAction\x12&\n" + + "\x0esortedLabelIDs\x18\x01 \x03(\x05R\x0esortedLabelIDs\"Y\n" + + "\x1dDeleteIndividualCallLogAction\x12\x18\n" + + "\apeerJID\x18\x01 \x01(\tR\apeerJID\x12\x1e\n" + + "\n" + + "isIncoming\x18\x02 \x01(\bR\n" + + "isIncoming\"1\n" + + "\x17BotWelcomeRequestAction\x12\x16\n" + + "\x06isSent\x18\x01 \x01(\bR\x06isSent\"\\\n" + + "\x1eNewsletterSavedInterestsAction\x12:\n" + + "\x18newsletterSavedInterests\x18\x01 \x01(\tR\x18newsletterSavedInterests\"5\n" + + "\x11MusicUserIdAction\x12 \n" + + "\vmusicUserID\x18\x01 \x01(\tR\vmusicUserID\"(\n" + + "\x06UGCBot\x12\x1e\n" + + "\n" + + "definition\x18\x01 \x01(\fR\n" + + "definition\"]\n" + + "\rCallLogAction\x12L\n" + + "\rcallLogRecord\x18\x01 \x01(\v2&.WAWebProtobufSyncAction.CallLogRecordR\rcallLogRecord\";\n" + + "\x1bPrivacySettingRelayAllCalls\x12\x1c\n" + + "\tisEnabled\x18\x01 \x01(\bR\tisEnabled\"<\n" + + "\x1cDetectedOutcomesStatusAction\x12\x1c\n" + + "\tisEnabled\x18\x01 \x01(\bR\tisEnabled\"1\n" + + "\x15ExternalWebBetaAction\x12\x18\n" + + "\aisOptIn\x18\x01 \x01(\bR\aisOptIn\"E\n" + + "\x1fMarketingMessageBroadcastAction\x12\"\n" + + "\frepliedCount\x18\x01 \x01(\x05R\frepliedCount\"*\n" + + "\x12PnForLidChatAction\x12\x14\n" + + "\x05pnJID\x18\x01 \x01(\tR\x05pnJID\"B\n" + + " ChatAssignmentOpenedStatusAction\x12\x1e\n" + + "\n" + + "chatOpened\x18\x01 \x01(\bR\n" + + "chatOpened\"<\n" + + "\x14ChatAssignmentAction\x12$\n" + + "\rdeviceAgentID\x18\x01 \x01(\tR\rdeviceAgentID\"\x95\x03\n" + + "\rStickerAction\x12\x10\n" + + "\x03URL\x18\x01 \x01(\tR\x03URL\x12$\n" + + "\rfileEncSHA256\x18\x02 \x01(\fR\rfileEncSHA256\x12\x1a\n" + + "\bmediaKey\x18\x03 \x01(\fR\bmediaKey\x12\x1a\n" + + "\bmimetype\x18\x04 \x01(\tR\bmimetype\x12\x16\n" + + "\x06height\x18\x05 \x01(\rR\x06height\x12\x14\n" + + "\x05width\x18\x06 \x01(\rR\x05width\x12\x1e\n" + + "\n" + + "directPath\x18\a \x01(\tR\n" + + "directPath\x12\x1e\n" + + "\n" + + "fileLength\x18\b \x01(\x04R\n" + + "fileLength\x12\x1e\n" + + "\n" + + "isFavorite\x18\t \x01(\bR\n" + + "isFavorite\x12\"\n" + + "\fdeviceIDHint\x18\n" + + " \x01(\rR\fdeviceIDHint\x12\x1a\n" + + "\bisLottie\x18\v \x01(\bR\bisLottie\x12\x1c\n" + + "\timageHash\x18\f \x01(\tR\timageHash\x12(\n" + + "\x0fisAvatarSticker\x18\r \x01(\bR\x0fisAvatarSticker\"I\n" + + "\x19RemoveRecentStickerAction\x12,\n" + + "\x11lastStickerSentTS\x18\x01 \x01(\x03R\x11lastStickerSentTS\"0\n" + + "\x14PrimaryVersionAction\x12\x18\n" + + "\aversion\x18\x01 \x01(\tR\aversion\"/\n" + + "\tNuxAction\x12\"\n" + + "\facknowledged\x18\x01 \x01(\bR\facknowledged\"X\n" + + "\x10TimeFormatAction\x12D\n" + + "\x1disTwentyFourHourFormatEnabled\x18\x01 \x01(\bR\x1disTwentyFourHourFormatEnabled\",\n" + + "\x14UserStatusMuteAction\x12\x14\n" + + "\x05muted\x18\x01 \x01(\bR\x05muted\"\x8a\x01\n" + + "\x12SubscriptionAction\x12$\n" + + "\risDeactivated\x18\x01 \x01(\bR\risDeactivated\x12&\n" + + "\x0eisAutoRenewing\x18\x02 \x01(\bR\x0eisAutoRenewing\x12&\n" + + "\x0eexpirationDate\x18\x03 \x01(\x03R\x0eexpirationDate\"[\n" + + "\vAgentAction\x12\x12\n" + + "\x04name\x18\x01 \x01(\tR\x04name\x12\x1a\n" + + "\bdeviceID\x18\x02 \x01(\x05R\bdeviceID\x12\x1c\n" + + "\tisDeleted\x18\x03 \x01(\bR\tisDeleted\"5\n" + + "\x19AndroidUnsupportedActions\x12\x18\n" + + "\aallowed\x18\x01 \x01(\bR\aallowed\"&\n" + + "\x0ePrimaryFeature\x12\x14\n" + + "\x05flags\x18\x01 \x03(\tR\x05flags\"9\n" + + "\rKeyExpiration\x12(\n" + + "\x0fexpiredKeyEpoch\x18\x01 \x01(\x05R\x0fexpiredKeyEpoch\"Y\n" + + "\x11SyncActionMessage\x12&\n" + + "\x03key\x18\x01 \x01(\v2\x14.WACommon.MessageKeyR\x03key\x12\x1c\n" + + "\ttimestamp\x18\x02 \x01(\x03R\ttimestamp\"\xd4\x01\n" + + "\x16SyncActionMessageRange\x122\n" + + "\x14lastMessageTimestamp\x18\x01 \x01(\x03R\x14lastMessageTimestamp\x12>\n" + + "\x1alastSystemMessageTimestamp\x18\x02 \x01(\x03R\x1alastSystemMessageTimestamp\x12F\n" + + "\bmessages\x18\x03 \x03(\v2*.WAWebProtobufSyncAction.SyncActionMessageR\bmessages\"?\n" + + "\x15UnarchiveChatsSetting\x12&\n" + + "\x0eunarchiveChats\x18\x01 \x01(\bR\x0eunarchiveChats\"g\n" + + "\x10DeleteChatAction\x12S\n" + + "\fmessageRange\x18\x01 \x01(\v2/.WAWebProtobufSyncAction.SyncActionMessageRangeR\fmessageRange\"f\n" + + "\x0fClearChatAction\x12S\n" + + "\fmessageRange\x18\x01 \x01(\v2/.WAWebProtobufSyncAction.SyncActionMessageRangeR\fmessageRange\"\x7f\n" + + "\x14MarkChatAsReadAction\x12\x12\n" + + "\x04read\x18\x01 \x01(\bR\x04read\x12S\n" + + "\fmessageRange\x18\x02 \x01(\v2/.WAWebProtobufSyncAction.SyncActionMessageRangeR\fmessageRange\"h\n" + + "\x18DeleteMessageForMeAction\x12 \n" + + "\vdeleteMedia\x18\x01 \x01(\bR\vdeleteMedia\x12*\n" + + "\x10messageTimestamp\x18\x02 \x01(\x03R\x10messageTimestamp\"\x84\x01\n" + + "\x11ArchiveChatAction\x12\x1a\n" + + "\barchived\x18\x01 \x01(\bR\barchived\x12S\n" + + "\fmessageRange\x18\x02 \x01(\v2/.WAWebProtobufSyncAction.SyncActionMessageRangeR\fmessageRange\"`\n" + + "\x18RecentEmojiWeightsAction\x12D\n" + + "\aweights\x18\x01 \x03(\v2*.WAWebProtobufSyncAction.RecentEmojiWeightR\aweights\"2\n" + + "\x16LabelAssociationAction\x12\x18\n" + + "\alabeled\x18\x01 \x01(\bR\alabeled\"\x94\x01\n" + + "\x10QuickReplyAction\x12\x1a\n" + + "\bshortcut\x18\x01 \x01(\tR\bshortcut\x12\x18\n" + + "\amessage\x18\x02 \x01(\tR\amessage\x12\x1a\n" + + "\bkeywords\x18\x03 \x03(\tR\bkeywords\x12\x14\n" + + "\x05count\x18\x04 \x01(\x05R\x05count\x12\x18\n" + + "\adeleted\x18\x05 \x01(\bR\adeleted\"'\n" + + "\rLocaleSetting\x12\x16\n" + + "\x06locale\x18\x01 \x01(\tR\x06locale\"%\n" + + "\x0fPushNameSetting\x12\x12\n" + + "\x04name\x18\x01 \x01(\tR\x04name\"#\n" + + "\tPinAction\x12\x16\n" + + "\x06pinned\x18\x01 \x01(\bR\x06pinned\"\xb6\x01\n" + + "\n" + + "MuteAction\x12\x14\n" + + "\x05muted\x18\x01 \x01(\bR\x05muted\x12*\n" + + "\x10muteEndTimestamp\x18\x02 \x01(\x03R\x10muteEndTimestamp\x12\x1c\n" + + "\tautoMuted\x18\x03 \x01(\bR\tautoMuted\x12H\n" + + "\x1fmuteEveryoneMentionEndTimestamp\x18\x04 \x01(\x03R\x1fmuteEveryoneMentionEndTimestamp\"\xcf\x01\n" + + "\rContactAction\x12\x1a\n" + + "\bfullName\x18\x01 \x01(\tR\bfullName\x12\x1c\n" + + "\tfirstName\x18\x02 \x01(\tR\tfirstName\x12\x16\n" + + "\x06lidJID\x18\x03 \x01(\tR\x06lidJID\x12:\n" + + "\x18saveOnPrimaryAddressbook\x18\x04 \x01(\bR\x18saveOnPrimaryAddressbook\x12\x14\n" + + "\x05pnJID\x18\x05 \x01(\tR\x05pnJID\x12\x1a\n" + + "\busername\x18\x06 \x01(\tR\busername\"&\n" + + "\n" + + "StarAction\x12\x18\n" + + "\astarred\x18\x01 \x01(\bR\astarred\"\x9a\x01\n" + + "\x0eSyncActionData\x12\x14\n" + + "\x05index\x18\x01 \x01(\fR\x05index\x12>\n" + + "\x05value\x18\x02 \x01(\v2(.WAWebProtobufSyncAction.SyncActionValueR\x05value\x12\x18\n" + + "\apadding\x18\x03 \x01(\fR\apadding\x12\x18\n" + + "\aversion\x18\x04 \x01(\x05R\aversion*\x8b\x01\n" + + "\x0eCollectionName\x12\x1b\n" + + "\x17COLLECTION_NAME_UNKNOWN\x10\x00\x12\v\n" + + "\aREGULAR\x10\x01\x12\x0f\n" + + "\vREGULAR_LOW\x10\x02\x12\x10\n" + + "\fREGULAR_HIGH\x10\x03\x12\x12\n" + + "\x0eCRITICAL_BLOCK\x10\x04\x12\x18\n" + + "\x14CRITICAL_UNBLOCK_LOW\x10\x05*\xc4\x11\n" + + "\rMutationProps\x12\x0f\n" + + "\vSTAR_ACTION\x10\x02\x12\x12\n" + + "\x0eCONTACT_ACTION\x10\x03\x12\x0f\n" + + "\vMUTE_ACTION\x10\x04\x12\x0e\n" + + "\n" + + "PIN_ACTION\x10\x05\x12!\n" + + "\x1dSECURITY_NOTIFICATION_SETTING\x10\x06\x12\x15\n" + + "\x11PUSH_NAME_SETTING\x10\a\x12\x16\n" + + "\x12QUICK_REPLY_ACTION\x10\b\x12\x1f\n" + + "\x1bRECENT_EMOJI_WEIGHTS_ACTION\x10\v\x12\x18\n" + + "\x14LABEL_MESSAGE_ACTION\x10\r\x12\x15\n" + + "\x11LABEL_EDIT_ACTION\x10\x0e\x12\x1c\n" + + "\x18LABEL_ASSOCIATION_ACTION\x10\x0f\x12\x12\n" + + "\x0eLOCALE_SETTING\x10\x10\x12\x17\n" + + "\x13ARCHIVE_CHAT_ACTION\x10\x11\x12 \n" + + "\x1cDELETE_MESSAGE_FOR_ME_ACTION\x10\x12\x12\x12\n" + + "\x0eKEY_EXPIRATION\x10\x13\x12\x1c\n" + + "\x18MARK_CHAT_AS_READ_ACTION\x10\x14\x12\x15\n" + + "\x11CLEAR_CHAT_ACTION\x10\x15\x12\x16\n" + + "\x12DELETE_CHAT_ACTION\x10\x16\x12\x1b\n" + + "\x17UNARCHIVE_CHATS_SETTING\x10\x17\x12\x13\n" + + "\x0fPRIMARY_FEATURE\x10\x18\x12\x1f\n" + + "\x1bANDROID_UNSUPPORTED_ACTIONS\x10\x1a\x12\x10\n" + + "\fAGENT_ACTION\x10\x1b\x12\x17\n" + + "\x13SUBSCRIPTION_ACTION\x10\x1c\x12\x1b\n" + + "\x17USER_STATUS_MUTE_ACTION\x10\x1d\x12\x16\n" + + "\x12TIME_FORMAT_ACTION\x10\x1e\x12\x0e\n" + + "\n" + + "NUX_ACTION\x10\x1f\x12\x1a\n" + + "\x16PRIMARY_VERSION_ACTION\x10 \x12\x12\n" + + "\x0eSTICKER_ACTION\x10!\x12 \n" + + "\x1cREMOVE_RECENT_STICKER_ACTION\x10\"\x12\x13\n" + + "\x0fCHAT_ASSIGNMENT\x10#\x12!\n" + + "\x1dCHAT_ASSIGNMENT_OPENED_STATUS\x10$\x12\x1a\n" + + "\x16PN_FOR_LID_CHAT_ACTION\x10%\x12\x1c\n" + + "\x18MARKETING_MESSAGE_ACTION\x10&\x12&\n" + + "\"MARKETING_MESSAGE_BROADCAST_ACTION\x10'\x12\x1c\n" + + "\x18EXTERNAL_WEB_BETA_ACTION\x10(\x12#\n" + + "\x1fPRIVACY_SETTING_RELAY_ALL_CALLS\x10)\x12\x13\n" + + "\x0fCALL_LOG_ACTION\x10*\x12\v\n" + + "\aUGC_BOT\x10+\x12\x12\n" + + "\x0eSTATUS_PRIVACY\x10,\x12\x1e\n" + + "\x1aBOT_WELCOME_REQUEST_ACTION\x10-\x12\x1e\n" + + "\x1aDELETE_INDIVIDUAL_CALL_LOG\x10.\x12\x1b\n" + + "\x17LABEL_REORDERING_ACTION\x10/\x12\x17\n" + + "\x13PAYMENT_INFO_ACTION\x100\x12!\n" + + "\x1dCUSTOM_PAYMENT_METHODS_ACTION\x101\x12\x14\n" + + "\x10LOCK_CHAT_ACTION\x102\x12\x16\n" + + "\x12CHAT_LOCK_SETTINGS\x103\x12\x1f\n" + + "\x1bWAMO_USER_IDENTIFIER_ACTION\x104\x120\n" + + ",PRIVACY_SETTING_DISABLE_LINK_PREVIEWS_ACTION\x105\x12\x17\n" + + "\x13DEVICE_CAPABILITIES\x106\x12\x14\n" + + "\x10NOTE_EDIT_ACTION\x107\x12\x14\n" + + "\x10FAVORITES_ACTION\x108\x12#\n" + + "\x1fMERCHANT_PAYMENT_PARTNER_ACTION\x109\x12$\n" + + " WAFFLE_ACCOUNT_LINK_STATE_ACTION\x10:\x12\x1c\n" + + "\x18USERNAME_CHAT_START_MODE\x10;\x12(\n" + + "$NOTIFICATION_ACTIVITY_SETTING_ACTION\x10<\x12\x16\n" + + "\x12LID_CONTACT_ACTION\x10=\x12)\n" + + "%CTWA_PER_CUSTOMER_DATA_SHARING_ACTION\x10>\x12\x16\n" + + "\x12PAYMENT_TOS_ACTION\x10?\x12?\n" + + ";PRIVACY_SETTING_CHANNELS_PERSONALISED_RECOMMENDATION_ACTION\x10@\x12)\n" + + "%BUSINESS_BROADCAST_ASSOCIATION_ACTION\x10A\x12#\n" + + "\x1fDETECTED_OUTCOMES_STATUS_ACTION\x10B\x12$\n" + + " MAIBA_AI_FEATURES_CONTROL_ACTION\x10D\x12\"\n" + + "\x1eBUSINESS_BROADCAST_LIST_ACTION\x10E\x12\x18\n" + + "\x14MUSIC_USER_ID_ACTION\x10F\x126\n" + + "2STATUS_POST_OPT_IN_NOTIFICATION_PREFERENCES_ACTION\x10G\x12\x19\n" + + "\x15AVATAR_UPDATED_ACTION\x10H\x12\x16\n" + + "\x12GALAXY_FLOW_ACTION\x10I\x12%\n" + + "!PRIVATE_PROCESSING_SETTING_ACTION\x10J\x12%\n" + + "!NEWSLETTER_SAVED_INTERESTS_ACTION\x10K\x12\x1b\n" + + "\x17AI_THREAD_RENAME_ACTION\x10L\x12\x1e\n" + + "\x1aINTERACTIVE_MESSAGE_ACTION\x10M\x12\x18\n" + + "\x14SETTINGS_SYNC_ACTION\x10N\x12\x16\n" + + "\x12OUT_CONTACT_ACTION\x10O\x12\x18\n" + + "\x14NCT_SALT_SYNC_ACTION\x10P\x12\x11\n" + + "\fSHARE_OWN_PN\x10\x91N\x12\x1e\n" + + "\x19BUSINESS_BROADCAST_ACTION\x10\x92N\x12\x1c\n" + + "\x17AI_THREAD_DELETE_ACTION\x10\x93NB(Z&go.mau.fi/whatsmeow/proto/waSyncAction" + +var ( + file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescOnce sync.Once + file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescData []byte +) + +func file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescGZIP() []byte { + file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescOnce.Do(func() { + file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_waSyncAction_WAWebProtobufSyncAction_proto_rawDesc), len(file_waSyncAction_WAWebProtobufSyncAction_proto_rawDesc))) + }) + return file_waSyncAction_WAWebProtobufSyncAction_proto_rawDescData +} + +var file_waSyncAction_WAWebProtobufSyncAction_proto_enumTypes = make([]protoimpl.EnumInfo, 23) +var file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes = make([]protoimpl.MessageInfo, 81) +var file_waSyncAction_WAWebProtobufSyncAction_proto_goTypes = []any{ + (CollectionName)(0), // 0: WAWebProtobufSyncAction.CollectionName + (MutationProps)(0), // 1: WAWebProtobufSyncAction.MutationProps + (CallLogRecord_CallType)(0), // 2: WAWebProtobufSyncAction.CallLogRecord.CallType + (CallLogRecord_SilenceReason)(0), // 3: WAWebProtobufSyncAction.CallLogRecord.SilenceReason + (CallLogRecord_CallResult)(0), // 4: WAWebProtobufSyncAction.CallLogRecord.CallResult + (SettingsSyncAction_MediaQualitySetting)(0), // 5: WAWebProtobufSyncAction.SettingsSyncAction.MediaQualitySetting + (SettingsSyncAction_DisplayMode)(0), // 6: WAWebProtobufSyncAction.SettingsSyncAction.DisplayMode + (SettingsSyncAction_SettingKey)(0), // 7: WAWebProtobufSyncAction.SettingsSyncAction.SettingKey + (SettingsSyncAction_SettingPlatform)(0), // 8: WAWebProtobufSyncAction.SettingsSyncAction.SettingPlatform + (InteractiveMessageAction_InteractiveMessageActionMode)(0), // 9: WAWebProtobufSyncAction.InteractiveMessageAction.InteractiveMessageActionMode + (PrivateProcessingSettingAction_PrivateProcessingStatus)(0), // 10: WAWebProtobufSyncAction.PrivateProcessingSettingAction.PrivateProcessingStatus + (AvatarUpdatedAction_AvatarEventType)(0), // 11: WAWebProtobufSyncAction.AvatarUpdatedAction.AvatarEventType + (MaibaAIFeaturesControlAction_MaibaAIFeatureStatus)(0), // 12: WAWebProtobufSyncAction.MaibaAIFeaturesControlAction.MaibaAIFeatureStatus + (PaymentTosAction_PaymentNotice)(0), // 13: WAWebProtobufSyncAction.PaymentTosAction.PaymentNotice + (NotificationActivitySettingAction_NotificationActivitySetting)(0), // 14: WAWebProtobufSyncAction.NotificationActivitySettingAction.NotificationActivitySetting + (WaffleAccountLinkStateAction_AccountLinkState)(0), // 15: WAWebProtobufSyncAction.WaffleAccountLinkStateAction.AccountLinkState + (MerchantPaymentPartnerAction_Status)(0), // 16: WAWebProtobufSyncAction.MerchantPaymentPartnerAction.Status + (NoteEditAction_NoteType)(0), // 17: WAWebProtobufSyncAction.NoteEditAction.NoteType + (StatusPrivacyAction_StatusDistributionMode)(0), // 18: WAWebProtobufSyncAction.StatusPrivacyAction.StatusDistributionMode + (MarketingMessageAction_MarketingMessagePrototypeType)(0), // 19: WAWebProtobufSyncAction.MarketingMessageAction.MarketingMessagePrototypeType + (UsernameChatStartModeAction_ChatStartMode)(0), // 20: WAWebProtobufSyncAction.UsernameChatStartModeAction.ChatStartMode + (LabelEditAction_ListType)(0), // 21: WAWebProtobufSyncAction.LabelEditAction.ListType + (PatchDebugData_Platform)(0), // 22: WAWebProtobufSyncAction.PatchDebugData.Platform + (*CallLogRecord)(nil), // 23: WAWebProtobufSyncAction.CallLogRecord + (*SettingsSyncAction)(nil), // 24: WAWebProtobufSyncAction.SettingsSyncAction + (*InteractiveMessageAction)(nil), // 25: WAWebProtobufSyncAction.InteractiveMessageAction + (*PrivateProcessingSettingAction)(nil), // 26: WAWebProtobufSyncAction.PrivateProcessingSettingAction + (*AvatarUpdatedAction)(nil), // 27: WAWebProtobufSyncAction.AvatarUpdatedAction + (*MaibaAIFeaturesControlAction)(nil), // 28: WAWebProtobufSyncAction.MaibaAIFeaturesControlAction + (*PaymentTosAction)(nil), // 29: WAWebProtobufSyncAction.PaymentTosAction + (*NotificationActivitySettingAction)(nil), // 30: WAWebProtobufSyncAction.NotificationActivitySettingAction + (*WaffleAccountLinkStateAction)(nil), // 31: WAWebProtobufSyncAction.WaffleAccountLinkStateAction + (*MerchantPaymentPartnerAction)(nil), // 32: WAWebProtobufSyncAction.MerchantPaymentPartnerAction + (*NoteEditAction)(nil), // 33: WAWebProtobufSyncAction.NoteEditAction + (*StatusPrivacyAction)(nil), // 34: WAWebProtobufSyncAction.StatusPrivacyAction + (*MarketingMessageAction)(nil), // 35: WAWebProtobufSyncAction.MarketingMessageAction + (*UsernameChatStartModeAction)(nil), // 36: WAWebProtobufSyncAction.UsernameChatStartModeAction + (*LabelEditAction)(nil), // 37: WAWebProtobufSyncAction.LabelEditAction + (*PatchDebugData)(nil), // 38: WAWebProtobufSyncAction.PatchDebugData + (*RecentEmojiWeight)(nil), // 39: WAWebProtobufSyncAction.RecentEmojiWeight + (*SyncActionValue)(nil), // 40: WAWebProtobufSyncAction.SyncActionValue + (*NctSaltSyncAction)(nil), // 41: WAWebProtobufSyncAction.NctSaltSyncAction + (*AiThreadRenameAction)(nil), // 42: WAWebProtobufSyncAction.AiThreadRenameAction + (*StatusPostOptInNotificationPreferencesAction)(nil), // 43: WAWebProtobufSyncAction.StatusPostOptInNotificationPreferencesAction + (*BroadcastListParticipant)(nil), // 44: WAWebProtobufSyncAction.BroadcastListParticipant + (*BusinessBroadcastListAction)(nil), // 45: WAWebProtobufSyncAction.BusinessBroadcastListAction + (*BusinessBroadcastAssociationAction)(nil), // 46: WAWebProtobufSyncAction.BusinessBroadcastAssociationAction + (*CtwaPerCustomerDataSharingAction)(nil), // 47: WAWebProtobufSyncAction.CtwaPerCustomerDataSharingAction + (*OutContactAction)(nil), // 48: WAWebProtobufSyncAction.OutContactAction + (*LidContactAction)(nil), // 49: WAWebProtobufSyncAction.LidContactAction + (*FavoritesAction)(nil), // 50: WAWebProtobufSyncAction.FavoritesAction + (*PrivacySettingChannelsPersonalisedRecommendationAction)(nil), // 51: WAWebProtobufSyncAction.PrivacySettingChannelsPersonalisedRecommendationAction + (*PrivacySettingDisableLinkPreviewsAction)(nil), // 52: WAWebProtobufSyncAction.PrivacySettingDisableLinkPreviewsAction + (*WamoUserIdentifierAction)(nil), // 53: WAWebProtobufSyncAction.WamoUserIdentifierAction + (*LockChatAction)(nil), // 54: WAWebProtobufSyncAction.LockChatAction + (*CustomPaymentMethodsAction)(nil), // 55: WAWebProtobufSyncAction.CustomPaymentMethodsAction + (*CustomPaymentMethod)(nil), // 56: WAWebProtobufSyncAction.CustomPaymentMethod + (*CustomPaymentMethodMetadata)(nil), // 57: WAWebProtobufSyncAction.CustomPaymentMethodMetadata + (*PaymentInfoAction)(nil), // 58: WAWebProtobufSyncAction.PaymentInfoAction + (*LabelReorderingAction)(nil), // 59: WAWebProtobufSyncAction.LabelReorderingAction + (*DeleteIndividualCallLogAction)(nil), // 60: WAWebProtobufSyncAction.DeleteIndividualCallLogAction + (*BotWelcomeRequestAction)(nil), // 61: WAWebProtobufSyncAction.BotWelcomeRequestAction + (*NewsletterSavedInterestsAction)(nil), // 62: WAWebProtobufSyncAction.NewsletterSavedInterestsAction + (*MusicUserIdAction)(nil), // 63: WAWebProtobufSyncAction.MusicUserIdAction + (*UGCBot)(nil), // 64: WAWebProtobufSyncAction.UGCBot + (*CallLogAction)(nil), // 65: WAWebProtobufSyncAction.CallLogAction + (*PrivacySettingRelayAllCalls)(nil), // 66: WAWebProtobufSyncAction.PrivacySettingRelayAllCalls + (*DetectedOutcomesStatusAction)(nil), // 67: WAWebProtobufSyncAction.DetectedOutcomesStatusAction + (*ExternalWebBetaAction)(nil), // 68: WAWebProtobufSyncAction.ExternalWebBetaAction + (*MarketingMessageBroadcastAction)(nil), // 69: WAWebProtobufSyncAction.MarketingMessageBroadcastAction + (*PnForLidChatAction)(nil), // 70: WAWebProtobufSyncAction.PnForLidChatAction + (*ChatAssignmentOpenedStatusAction)(nil), // 71: WAWebProtobufSyncAction.ChatAssignmentOpenedStatusAction + (*ChatAssignmentAction)(nil), // 72: WAWebProtobufSyncAction.ChatAssignmentAction + (*StickerAction)(nil), // 73: WAWebProtobufSyncAction.StickerAction + (*RemoveRecentStickerAction)(nil), // 74: WAWebProtobufSyncAction.RemoveRecentStickerAction + (*PrimaryVersionAction)(nil), // 75: WAWebProtobufSyncAction.PrimaryVersionAction + (*NuxAction)(nil), // 76: WAWebProtobufSyncAction.NuxAction + (*TimeFormatAction)(nil), // 77: WAWebProtobufSyncAction.TimeFormatAction + (*UserStatusMuteAction)(nil), // 78: WAWebProtobufSyncAction.UserStatusMuteAction + (*SubscriptionAction)(nil), // 79: WAWebProtobufSyncAction.SubscriptionAction + (*AgentAction)(nil), // 80: WAWebProtobufSyncAction.AgentAction + (*AndroidUnsupportedActions)(nil), // 81: WAWebProtobufSyncAction.AndroidUnsupportedActions + (*PrimaryFeature)(nil), // 82: WAWebProtobufSyncAction.PrimaryFeature + (*KeyExpiration)(nil), // 83: WAWebProtobufSyncAction.KeyExpiration + (*SyncActionMessage)(nil), // 84: WAWebProtobufSyncAction.SyncActionMessage + (*SyncActionMessageRange)(nil), // 85: WAWebProtobufSyncAction.SyncActionMessageRange + (*UnarchiveChatsSetting)(nil), // 86: WAWebProtobufSyncAction.UnarchiveChatsSetting + (*DeleteChatAction)(nil), // 87: WAWebProtobufSyncAction.DeleteChatAction + (*ClearChatAction)(nil), // 88: WAWebProtobufSyncAction.ClearChatAction + (*MarkChatAsReadAction)(nil), // 89: WAWebProtobufSyncAction.MarkChatAsReadAction + (*DeleteMessageForMeAction)(nil), // 90: WAWebProtobufSyncAction.DeleteMessageForMeAction + (*ArchiveChatAction)(nil), // 91: WAWebProtobufSyncAction.ArchiveChatAction + (*RecentEmojiWeightsAction)(nil), // 92: WAWebProtobufSyncAction.RecentEmojiWeightsAction + (*LabelAssociationAction)(nil), // 93: WAWebProtobufSyncAction.LabelAssociationAction + (*QuickReplyAction)(nil), // 94: WAWebProtobufSyncAction.QuickReplyAction + (*LocaleSetting)(nil), // 95: WAWebProtobufSyncAction.LocaleSetting + (*PushNameSetting)(nil), // 96: WAWebProtobufSyncAction.PushNameSetting + (*PinAction)(nil), // 97: WAWebProtobufSyncAction.PinAction + (*MuteAction)(nil), // 98: WAWebProtobufSyncAction.MuteAction + (*ContactAction)(nil), // 99: WAWebProtobufSyncAction.ContactAction + (*StarAction)(nil), // 100: WAWebProtobufSyncAction.StarAction + (*SyncActionData)(nil), // 101: WAWebProtobufSyncAction.SyncActionData + (*CallLogRecord_ParticipantInfo)(nil), // 102: WAWebProtobufSyncAction.CallLogRecord.ParticipantInfo + (*FavoritesAction_Favorite)(nil), // 103: WAWebProtobufSyncAction.FavoritesAction.Favorite + (*waChatLockSettings.ChatLockSettings)(nil), // 104: WAWebProtobufsChatLockSettings.ChatLockSettings + (*waDeviceCapabilities.DeviceCapabilities)(nil), // 105: WAWebProtobufsDeviceCapabilities.DeviceCapabilities + (*waCommon.MessageKey)(nil), // 106: WACommon.MessageKey +} +var file_waSyncAction_WAWebProtobufSyncAction_proto_depIdxs = []int32{ + 4, // 0: WAWebProtobufSyncAction.CallLogRecord.callResult:type_name -> WAWebProtobufSyncAction.CallLogRecord.CallResult + 3, // 1: WAWebProtobufSyncAction.CallLogRecord.silenceReason:type_name -> WAWebProtobufSyncAction.CallLogRecord.SilenceReason + 102, // 2: WAWebProtobufSyncAction.CallLogRecord.participants:type_name -> WAWebProtobufSyncAction.CallLogRecord.ParticipantInfo + 2, // 3: WAWebProtobufSyncAction.CallLogRecord.callType:type_name -> WAWebProtobufSyncAction.CallLogRecord.CallType + 6, // 4: WAWebProtobufSyncAction.SettingsSyncAction.bannerNotificationDisplayMode:type_name -> WAWebProtobufSyncAction.SettingsSyncAction.DisplayMode + 6, // 5: WAWebProtobufSyncAction.SettingsSyncAction.unreadCounterBadgeDisplayMode:type_name -> WAWebProtobufSyncAction.SettingsSyncAction.DisplayMode + 5, // 6: WAWebProtobufSyncAction.SettingsSyncAction.mediaUploadQuality:type_name -> WAWebProtobufSyncAction.SettingsSyncAction.MediaQualitySetting + 9, // 7: WAWebProtobufSyncAction.InteractiveMessageAction.type:type_name -> WAWebProtobufSyncAction.InteractiveMessageAction.InteractiveMessageActionMode + 10, // 8: WAWebProtobufSyncAction.PrivateProcessingSettingAction.privateProcessingStatus:type_name -> WAWebProtobufSyncAction.PrivateProcessingSettingAction.PrivateProcessingStatus + 11, // 9: WAWebProtobufSyncAction.AvatarUpdatedAction.eventType:type_name -> WAWebProtobufSyncAction.AvatarUpdatedAction.AvatarEventType + 73, // 10: WAWebProtobufSyncAction.AvatarUpdatedAction.recentAvatarStickers:type_name -> WAWebProtobufSyncAction.StickerAction + 12, // 11: WAWebProtobufSyncAction.MaibaAIFeaturesControlAction.aiFeatureStatus:type_name -> WAWebProtobufSyncAction.MaibaAIFeaturesControlAction.MaibaAIFeatureStatus + 13, // 12: WAWebProtobufSyncAction.PaymentTosAction.paymentNotice:type_name -> WAWebProtobufSyncAction.PaymentTosAction.PaymentNotice + 14, // 13: WAWebProtobufSyncAction.NotificationActivitySettingAction.notificationActivitySetting:type_name -> WAWebProtobufSyncAction.NotificationActivitySettingAction.NotificationActivitySetting + 15, // 14: WAWebProtobufSyncAction.WaffleAccountLinkStateAction.linkState:type_name -> WAWebProtobufSyncAction.WaffleAccountLinkStateAction.AccountLinkState + 16, // 15: WAWebProtobufSyncAction.MerchantPaymentPartnerAction.status:type_name -> WAWebProtobufSyncAction.MerchantPaymentPartnerAction.Status + 17, // 16: WAWebProtobufSyncAction.NoteEditAction.type:type_name -> WAWebProtobufSyncAction.NoteEditAction.NoteType + 18, // 17: WAWebProtobufSyncAction.StatusPrivacyAction.mode:type_name -> WAWebProtobufSyncAction.StatusPrivacyAction.StatusDistributionMode + 19, // 18: WAWebProtobufSyncAction.MarketingMessageAction.type:type_name -> WAWebProtobufSyncAction.MarketingMessageAction.MarketingMessagePrototypeType + 20, // 19: WAWebProtobufSyncAction.UsernameChatStartModeAction.chatStartMode:type_name -> WAWebProtobufSyncAction.UsernameChatStartModeAction.ChatStartMode + 21, // 20: WAWebProtobufSyncAction.LabelEditAction.type:type_name -> WAWebProtobufSyncAction.LabelEditAction.ListType + 22, // 21: WAWebProtobufSyncAction.PatchDebugData.senderPlatform:type_name -> WAWebProtobufSyncAction.PatchDebugData.Platform + 100, // 22: WAWebProtobufSyncAction.SyncActionValue.starAction:type_name -> WAWebProtobufSyncAction.StarAction + 99, // 23: WAWebProtobufSyncAction.SyncActionValue.contactAction:type_name -> WAWebProtobufSyncAction.ContactAction + 98, // 24: WAWebProtobufSyncAction.SyncActionValue.muteAction:type_name -> WAWebProtobufSyncAction.MuteAction + 97, // 25: WAWebProtobufSyncAction.SyncActionValue.pinAction:type_name -> WAWebProtobufSyncAction.PinAction + 96, // 26: WAWebProtobufSyncAction.SyncActionValue.pushNameSetting:type_name -> WAWebProtobufSyncAction.PushNameSetting + 94, // 27: WAWebProtobufSyncAction.SyncActionValue.quickReplyAction:type_name -> WAWebProtobufSyncAction.QuickReplyAction + 92, // 28: WAWebProtobufSyncAction.SyncActionValue.recentEmojiWeightsAction:type_name -> WAWebProtobufSyncAction.RecentEmojiWeightsAction + 37, // 29: WAWebProtobufSyncAction.SyncActionValue.labelEditAction:type_name -> WAWebProtobufSyncAction.LabelEditAction + 93, // 30: WAWebProtobufSyncAction.SyncActionValue.labelAssociationAction:type_name -> WAWebProtobufSyncAction.LabelAssociationAction + 95, // 31: WAWebProtobufSyncAction.SyncActionValue.localeSetting:type_name -> WAWebProtobufSyncAction.LocaleSetting + 91, // 32: WAWebProtobufSyncAction.SyncActionValue.archiveChatAction:type_name -> WAWebProtobufSyncAction.ArchiveChatAction + 90, // 33: WAWebProtobufSyncAction.SyncActionValue.deleteMessageForMeAction:type_name -> WAWebProtobufSyncAction.DeleteMessageForMeAction + 83, // 34: WAWebProtobufSyncAction.SyncActionValue.keyExpiration:type_name -> WAWebProtobufSyncAction.KeyExpiration + 89, // 35: WAWebProtobufSyncAction.SyncActionValue.markChatAsReadAction:type_name -> WAWebProtobufSyncAction.MarkChatAsReadAction + 88, // 36: WAWebProtobufSyncAction.SyncActionValue.clearChatAction:type_name -> WAWebProtobufSyncAction.ClearChatAction + 87, // 37: WAWebProtobufSyncAction.SyncActionValue.deleteChatAction:type_name -> WAWebProtobufSyncAction.DeleteChatAction + 86, // 38: WAWebProtobufSyncAction.SyncActionValue.unarchiveChatsSetting:type_name -> WAWebProtobufSyncAction.UnarchiveChatsSetting + 82, // 39: WAWebProtobufSyncAction.SyncActionValue.primaryFeature:type_name -> WAWebProtobufSyncAction.PrimaryFeature + 81, // 40: WAWebProtobufSyncAction.SyncActionValue.androidUnsupportedActions:type_name -> WAWebProtobufSyncAction.AndroidUnsupportedActions + 80, // 41: WAWebProtobufSyncAction.SyncActionValue.agentAction:type_name -> WAWebProtobufSyncAction.AgentAction + 79, // 42: WAWebProtobufSyncAction.SyncActionValue.subscriptionAction:type_name -> WAWebProtobufSyncAction.SubscriptionAction + 78, // 43: WAWebProtobufSyncAction.SyncActionValue.userStatusMuteAction:type_name -> WAWebProtobufSyncAction.UserStatusMuteAction + 77, // 44: WAWebProtobufSyncAction.SyncActionValue.timeFormatAction:type_name -> WAWebProtobufSyncAction.TimeFormatAction + 76, // 45: WAWebProtobufSyncAction.SyncActionValue.nuxAction:type_name -> WAWebProtobufSyncAction.NuxAction + 75, // 46: WAWebProtobufSyncAction.SyncActionValue.primaryVersionAction:type_name -> WAWebProtobufSyncAction.PrimaryVersionAction + 73, // 47: WAWebProtobufSyncAction.SyncActionValue.stickerAction:type_name -> WAWebProtobufSyncAction.StickerAction + 74, // 48: WAWebProtobufSyncAction.SyncActionValue.removeRecentStickerAction:type_name -> WAWebProtobufSyncAction.RemoveRecentStickerAction + 72, // 49: WAWebProtobufSyncAction.SyncActionValue.chatAssignment:type_name -> WAWebProtobufSyncAction.ChatAssignmentAction + 71, // 50: WAWebProtobufSyncAction.SyncActionValue.chatAssignmentOpenedStatus:type_name -> WAWebProtobufSyncAction.ChatAssignmentOpenedStatusAction + 70, // 51: WAWebProtobufSyncAction.SyncActionValue.pnForLidChatAction:type_name -> WAWebProtobufSyncAction.PnForLidChatAction + 35, // 52: WAWebProtobufSyncAction.SyncActionValue.marketingMessageAction:type_name -> WAWebProtobufSyncAction.MarketingMessageAction + 69, // 53: WAWebProtobufSyncAction.SyncActionValue.marketingMessageBroadcastAction:type_name -> WAWebProtobufSyncAction.MarketingMessageBroadcastAction + 68, // 54: WAWebProtobufSyncAction.SyncActionValue.externalWebBetaAction:type_name -> WAWebProtobufSyncAction.ExternalWebBetaAction + 66, // 55: WAWebProtobufSyncAction.SyncActionValue.privacySettingRelayAllCalls:type_name -> WAWebProtobufSyncAction.PrivacySettingRelayAllCalls + 65, // 56: WAWebProtobufSyncAction.SyncActionValue.callLogAction:type_name -> WAWebProtobufSyncAction.CallLogAction + 64, // 57: WAWebProtobufSyncAction.SyncActionValue.ugcBot:type_name -> WAWebProtobufSyncAction.UGCBot + 34, // 58: WAWebProtobufSyncAction.SyncActionValue.statusPrivacy:type_name -> WAWebProtobufSyncAction.StatusPrivacyAction + 61, // 59: WAWebProtobufSyncAction.SyncActionValue.botWelcomeRequestAction:type_name -> WAWebProtobufSyncAction.BotWelcomeRequestAction + 60, // 60: WAWebProtobufSyncAction.SyncActionValue.deleteIndividualCallLog:type_name -> WAWebProtobufSyncAction.DeleteIndividualCallLogAction + 59, // 61: WAWebProtobufSyncAction.SyncActionValue.labelReorderingAction:type_name -> WAWebProtobufSyncAction.LabelReorderingAction + 58, // 62: WAWebProtobufSyncAction.SyncActionValue.paymentInfoAction:type_name -> WAWebProtobufSyncAction.PaymentInfoAction + 55, // 63: WAWebProtobufSyncAction.SyncActionValue.customPaymentMethodsAction:type_name -> WAWebProtobufSyncAction.CustomPaymentMethodsAction + 54, // 64: WAWebProtobufSyncAction.SyncActionValue.lockChatAction:type_name -> WAWebProtobufSyncAction.LockChatAction + 104, // 65: WAWebProtobufSyncAction.SyncActionValue.chatLockSettings:type_name -> WAWebProtobufsChatLockSettings.ChatLockSettings + 53, // 66: WAWebProtobufSyncAction.SyncActionValue.wamoUserIdentifierAction:type_name -> WAWebProtobufSyncAction.WamoUserIdentifierAction + 52, // 67: WAWebProtobufSyncAction.SyncActionValue.privacySettingDisableLinkPreviewsAction:type_name -> WAWebProtobufSyncAction.PrivacySettingDisableLinkPreviewsAction + 105, // 68: WAWebProtobufSyncAction.SyncActionValue.deviceCapabilities:type_name -> WAWebProtobufsDeviceCapabilities.DeviceCapabilities + 33, // 69: WAWebProtobufSyncAction.SyncActionValue.noteEditAction:type_name -> WAWebProtobufSyncAction.NoteEditAction + 50, // 70: WAWebProtobufSyncAction.SyncActionValue.favoritesAction:type_name -> WAWebProtobufSyncAction.FavoritesAction + 32, // 71: WAWebProtobufSyncAction.SyncActionValue.merchantPaymentPartnerAction:type_name -> WAWebProtobufSyncAction.MerchantPaymentPartnerAction + 31, // 72: WAWebProtobufSyncAction.SyncActionValue.waffleAccountLinkStateAction:type_name -> WAWebProtobufSyncAction.WaffleAccountLinkStateAction + 36, // 73: WAWebProtobufSyncAction.SyncActionValue.usernameChatStartMode:type_name -> WAWebProtobufSyncAction.UsernameChatStartModeAction + 30, // 74: WAWebProtobufSyncAction.SyncActionValue.notificationActivitySettingAction:type_name -> WAWebProtobufSyncAction.NotificationActivitySettingAction + 49, // 75: WAWebProtobufSyncAction.SyncActionValue.lidContactAction:type_name -> WAWebProtobufSyncAction.LidContactAction + 47, // 76: WAWebProtobufSyncAction.SyncActionValue.ctwaPerCustomerDataSharingAction:type_name -> WAWebProtobufSyncAction.CtwaPerCustomerDataSharingAction + 29, // 77: WAWebProtobufSyncAction.SyncActionValue.paymentTosAction:type_name -> WAWebProtobufSyncAction.PaymentTosAction + 51, // 78: WAWebProtobufSyncAction.SyncActionValue.privacySettingChannelsPersonalisedRecommendationAction:type_name -> WAWebProtobufSyncAction.PrivacySettingChannelsPersonalisedRecommendationAction + 67, // 79: WAWebProtobufSyncAction.SyncActionValue.detectedOutcomesStatusAction:type_name -> WAWebProtobufSyncAction.DetectedOutcomesStatusAction + 28, // 80: WAWebProtobufSyncAction.SyncActionValue.maibaAiFeaturesControlAction:type_name -> WAWebProtobufSyncAction.MaibaAIFeaturesControlAction + 45, // 81: WAWebProtobufSyncAction.SyncActionValue.businessBroadcastListAction:type_name -> WAWebProtobufSyncAction.BusinessBroadcastListAction + 63, // 82: WAWebProtobufSyncAction.SyncActionValue.musicUserIDAction:type_name -> WAWebProtobufSyncAction.MusicUserIdAction + 43, // 83: WAWebProtobufSyncAction.SyncActionValue.statusPostOptInNotificationPreferencesAction:type_name -> WAWebProtobufSyncAction.StatusPostOptInNotificationPreferencesAction + 27, // 84: WAWebProtobufSyncAction.SyncActionValue.avatarUpdatedAction:type_name -> WAWebProtobufSyncAction.AvatarUpdatedAction + 26, // 85: WAWebProtobufSyncAction.SyncActionValue.privateProcessingSettingAction:type_name -> WAWebProtobufSyncAction.PrivateProcessingSettingAction + 62, // 86: WAWebProtobufSyncAction.SyncActionValue.newsletterSavedInterestsAction:type_name -> WAWebProtobufSyncAction.NewsletterSavedInterestsAction + 42, // 87: WAWebProtobufSyncAction.SyncActionValue.aiThreadRenameAction:type_name -> WAWebProtobufSyncAction.AiThreadRenameAction + 25, // 88: WAWebProtobufSyncAction.SyncActionValue.interactiveMessageAction:type_name -> WAWebProtobufSyncAction.InteractiveMessageAction + 24, // 89: WAWebProtobufSyncAction.SyncActionValue.settingsSyncAction:type_name -> WAWebProtobufSyncAction.SettingsSyncAction + 48, // 90: WAWebProtobufSyncAction.SyncActionValue.outContactAction:type_name -> WAWebProtobufSyncAction.OutContactAction + 41, // 91: WAWebProtobufSyncAction.SyncActionValue.nctSaltSyncAction:type_name -> WAWebProtobufSyncAction.NctSaltSyncAction + 44, // 92: WAWebProtobufSyncAction.BusinessBroadcastListAction.participants:type_name -> WAWebProtobufSyncAction.BroadcastListParticipant + 103, // 93: WAWebProtobufSyncAction.FavoritesAction.favorites:type_name -> WAWebProtobufSyncAction.FavoritesAction.Favorite + 56, // 94: WAWebProtobufSyncAction.CustomPaymentMethodsAction.customPaymentMethods:type_name -> WAWebProtobufSyncAction.CustomPaymentMethod + 57, // 95: WAWebProtobufSyncAction.CustomPaymentMethod.metadata:type_name -> WAWebProtobufSyncAction.CustomPaymentMethodMetadata + 23, // 96: WAWebProtobufSyncAction.CallLogAction.callLogRecord:type_name -> WAWebProtobufSyncAction.CallLogRecord + 106, // 97: WAWebProtobufSyncAction.SyncActionMessage.key:type_name -> WACommon.MessageKey + 84, // 98: WAWebProtobufSyncAction.SyncActionMessageRange.messages:type_name -> WAWebProtobufSyncAction.SyncActionMessage + 85, // 99: WAWebProtobufSyncAction.DeleteChatAction.messageRange:type_name -> WAWebProtobufSyncAction.SyncActionMessageRange + 85, // 100: WAWebProtobufSyncAction.ClearChatAction.messageRange:type_name -> WAWebProtobufSyncAction.SyncActionMessageRange + 85, // 101: WAWebProtobufSyncAction.MarkChatAsReadAction.messageRange:type_name -> WAWebProtobufSyncAction.SyncActionMessageRange + 85, // 102: WAWebProtobufSyncAction.ArchiveChatAction.messageRange:type_name -> WAWebProtobufSyncAction.SyncActionMessageRange + 39, // 103: WAWebProtobufSyncAction.RecentEmojiWeightsAction.weights:type_name -> WAWebProtobufSyncAction.RecentEmojiWeight + 40, // 104: WAWebProtobufSyncAction.SyncActionData.value:type_name -> WAWebProtobufSyncAction.SyncActionValue + 4, // 105: WAWebProtobufSyncAction.CallLogRecord.ParticipantInfo.callResult:type_name -> WAWebProtobufSyncAction.CallLogRecord.CallResult + 106, // [106:106] is the sub-list for method output_type + 106, // [106:106] is the sub-list for method input_type + 106, // [106:106] is the sub-list for extension type_name + 106, // [106:106] is the sub-list for extension extendee + 0, // [0:106] is the sub-list for field type_name +} + +func init() { file_waSyncAction_WAWebProtobufSyncAction_proto_init() } +func file_waSyncAction_WAWebProtobufSyncAction_proto_init() { + if File_waSyncAction_WAWebProtobufSyncAction_proto != nil { + return + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: unsafe.Slice(unsafe.StringData(file_waSyncAction_WAWebProtobufSyncAction_proto_rawDesc), len(file_waSyncAction_WAWebProtobufSyncAction_proto_rawDesc)), + NumEnums: 23, + NumMessages: 81, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_waSyncAction_WAWebProtobufSyncAction_proto_goTypes, + DependencyIndexes: file_waSyncAction_WAWebProtobufSyncAction_proto_depIdxs, + EnumInfos: file_waSyncAction_WAWebProtobufSyncAction_proto_enumTypes, + MessageInfos: file_waSyncAction_WAWebProtobufSyncAction_proto_msgTypes, + }.Build() + File_waSyncAction_WAWebProtobufSyncAction_proto = out.File + file_waSyncAction_WAWebProtobufSyncAction_proto_goTypes = nil + file_waSyncAction_WAWebProtobufSyncAction_proto_depIdxs = nil +} diff --git a/vendor/go.mau.fi/whatsmeow/proto/waSyncAction/WAWebProtobufSyncAction.proto b/vendor/go.mau.fi/whatsmeow/proto/waSyncAction/WAWebProtobufSyncAction.proto new file mode 100644 index 0000000000..c1f826caf3 --- /dev/null +++ b/vendor/go.mau.fi/whatsmeow/proto/waSyncAction/WAWebProtobufSyncAction.proto @@ -0,0 +1,895 @@ +syntax = "proto2"; +package WAWebProtobufSyncAction; +option go_package = "go.mau.fi/whatsmeow/proto/waSyncAction"; + +import "waChatLockSettings/WAWebProtobufsChatLockSettings.proto"; +import "waDeviceCapabilities/WAWebProtobufsDeviceCapabilities.proto"; +import "waCommon/WACommon.proto"; + +enum CollectionName { + COLLECTION_NAME_UNKNOWN = 0; + REGULAR = 1; + REGULAR_LOW = 2; + REGULAR_HIGH = 3; + CRITICAL_BLOCK = 4; + CRITICAL_UNBLOCK_LOW = 5; +} + +enum MutationProps { + STAR_ACTION = 2; + CONTACT_ACTION = 3; + MUTE_ACTION = 4; + PIN_ACTION = 5; + SECURITY_NOTIFICATION_SETTING = 6; + PUSH_NAME_SETTING = 7; + QUICK_REPLY_ACTION = 8; + RECENT_EMOJI_WEIGHTS_ACTION = 11; + LABEL_MESSAGE_ACTION = 13; + LABEL_EDIT_ACTION = 14; + LABEL_ASSOCIATION_ACTION = 15; + LOCALE_SETTING = 16; + ARCHIVE_CHAT_ACTION = 17; + DELETE_MESSAGE_FOR_ME_ACTION = 18; + KEY_EXPIRATION = 19; + MARK_CHAT_AS_READ_ACTION = 20; + CLEAR_CHAT_ACTION = 21; + DELETE_CHAT_ACTION = 22; + UNARCHIVE_CHATS_SETTING = 23; + PRIMARY_FEATURE = 24; + ANDROID_UNSUPPORTED_ACTIONS = 26; + AGENT_ACTION = 27; + SUBSCRIPTION_ACTION = 28; + USER_STATUS_MUTE_ACTION = 29; + TIME_FORMAT_ACTION = 30; + NUX_ACTION = 31; + PRIMARY_VERSION_ACTION = 32; + STICKER_ACTION = 33; + REMOVE_RECENT_STICKER_ACTION = 34; + CHAT_ASSIGNMENT = 35; + CHAT_ASSIGNMENT_OPENED_STATUS = 36; + PN_FOR_LID_CHAT_ACTION = 37; + MARKETING_MESSAGE_ACTION = 38; + MARKETING_MESSAGE_BROADCAST_ACTION = 39; + EXTERNAL_WEB_BETA_ACTION = 40; + PRIVACY_SETTING_RELAY_ALL_CALLS = 41; + CALL_LOG_ACTION = 42; + UGC_BOT = 43; + STATUS_PRIVACY = 44; + BOT_WELCOME_REQUEST_ACTION = 45; + DELETE_INDIVIDUAL_CALL_LOG = 46; + LABEL_REORDERING_ACTION = 47; + PAYMENT_INFO_ACTION = 48; + CUSTOM_PAYMENT_METHODS_ACTION = 49; + LOCK_CHAT_ACTION = 50; + CHAT_LOCK_SETTINGS = 51; + WAMO_USER_IDENTIFIER_ACTION = 52; + PRIVACY_SETTING_DISABLE_LINK_PREVIEWS_ACTION = 53; + DEVICE_CAPABILITIES = 54; + NOTE_EDIT_ACTION = 55; + FAVORITES_ACTION = 56; + MERCHANT_PAYMENT_PARTNER_ACTION = 57; + WAFFLE_ACCOUNT_LINK_STATE_ACTION = 58; + USERNAME_CHAT_START_MODE = 59; + NOTIFICATION_ACTIVITY_SETTING_ACTION = 60; + LID_CONTACT_ACTION = 61; + CTWA_PER_CUSTOMER_DATA_SHARING_ACTION = 62; + PAYMENT_TOS_ACTION = 63; + PRIVACY_SETTING_CHANNELS_PERSONALISED_RECOMMENDATION_ACTION = 64; + BUSINESS_BROADCAST_ASSOCIATION_ACTION = 65; + DETECTED_OUTCOMES_STATUS_ACTION = 66; + MAIBA_AI_FEATURES_CONTROL_ACTION = 68; + BUSINESS_BROADCAST_LIST_ACTION = 69; + MUSIC_USER_ID_ACTION = 70; + STATUS_POST_OPT_IN_NOTIFICATION_PREFERENCES_ACTION = 71; + AVATAR_UPDATED_ACTION = 72; + GALAXY_FLOW_ACTION = 73; + PRIVATE_PROCESSING_SETTING_ACTION = 74; + NEWSLETTER_SAVED_INTERESTS_ACTION = 75; + AI_THREAD_RENAME_ACTION = 76; + INTERACTIVE_MESSAGE_ACTION = 77; + SETTINGS_SYNC_ACTION = 78; + OUT_CONTACT_ACTION = 79; + NCT_SALT_SYNC_ACTION = 80; + SHARE_OWN_PN = 10001; + BUSINESS_BROADCAST_ACTION = 10002; + AI_THREAD_DELETE_ACTION = 10003; +} + +message CallLogRecord { + enum CallType { + REGULAR = 0; + SCHEDULED_CALL = 1; + VOICE_CHAT = 2; + } + + enum SilenceReason { + NONE = 0; + SCHEDULED = 1; + PRIVACY = 2; + LIGHTWEIGHT = 3; + } + + enum CallResult { + CONNECTED = 0; + REJECTED = 1; + CANCELLED = 2; + ACCEPTEDELSEWHERE = 3; + MISSED = 4; + INVALID = 5; + UNAVAILABLE = 6; + UPCOMING = 7; + FAILED = 8; + ABANDONED = 9; + ONGOING = 10; + } + + message ParticipantInfo { + optional string userJID = 1; + optional CallResult callResult = 2; + } + + optional CallResult callResult = 1; + optional bool isDndMode = 2; + optional SilenceReason silenceReason = 3; + optional int64 duration = 4; + optional int64 startTime = 5; + optional bool isIncoming = 6; + optional bool isVideo = 7; + optional bool isCallLink = 8; + optional string callLinkToken = 9; + optional string scheduledCallID = 10; + optional string callID = 11; + optional string callCreatorJID = 12; + optional string groupJID = 13; + repeated ParticipantInfo participants = 14; + optional CallType callType = 15; +} + +message SettingsSyncAction { + enum MediaQualitySetting { + MEDIA_QUALITY_UNKNOWN = 0; + STANDARD = 1; + HD = 2; + } + + enum DisplayMode { + DISPLAY_MODE_UNKNOWN = 0; + ALWAYS = 1; + NEVER = 2; + ONLY_WHEN_APP_IS_OPEN = 3; + } + + enum SettingKey { + SETTING_KEY_UNKNOWN = 0; + START_AT_LOGIN = 1; + MINIMIZE_TO_TRAY = 2; + LANGUAGE = 3; + REPLACE_TEXT_WITH_EMOJI = 4; + BANNER_NOTIFICATION_DISPLAY_MODE = 5; + UNREAD_COUNTER_BADGE_DISPLAY_MODE = 6; + IS_MESSAGES_NOTIFICATION_ENABLED = 7; + IS_CALLS_NOTIFICATION_ENABLED = 8; + IS_REACTIONS_NOTIFICATION_ENABLED = 9; + IS_STATUS_REACTIONS_NOTIFICATION_ENABLED = 10; + IS_TEXT_PREVIEW_FOR_NOTIFICATION_ENABLED = 11; + DEFAULT_NOTIFICATION_TONE_ID = 12; + GROUP_DEFAULT_NOTIFICATION_TONE_ID = 13; + APP_THEME = 14; + WALLPAPER_ID = 15; + IS_DOODLE_WALLPAPER_ENABLED = 16; + FONT_SIZE = 17; + IS_PHOTOS_AUTODOWNLOAD_ENABLED = 18; + IS_AUDIOS_AUTODOWNLOAD_ENABLED = 19; + IS_VIDEOS_AUTODOWNLOAD_ENABLED = 20; + IS_DOCUMENTS_AUTODOWNLOAD_ENABLED = 21; + DISABLE_LINK_PREVIEWS = 22; + NOTIFICATION_TONE_ID = 23; + MEDIA_UPLOAD_QUALITY = 24; + IS_SPELL_CHECK_ENABLED = 25; + IS_ENTER_TO_SEND_ENABLED = 26; + IS_GROUP_MESSAGE_NOTIFICATION_ENABLED = 27; + IS_GROUP_REACTIONS_NOTIFICATION_ENABLED = 28; + IS_STATUS_NOTIFICATION_ENABLED = 29; + STATUS_NOTIFICATION_TONE_ID = 30; + SHOULD_PLAY_SOUND_FOR_CALL_NOTIFICATION = 31; + } + + enum SettingPlatform { + PLATFORM_UNKNOWN = 0; + WEB = 1; + HYBRID = 2; + WINDOWS = 3; + MAC = 4; + } + + optional bool startAtLogin = 1; + optional bool minimizeToTray = 2; + optional string language = 3; + optional bool replaceTextWithEmoji = 4; + optional DisplayMode bannerNotificationDisplayMode = 5; + optional DisplayMode unreadCounterBadgeDisplayMode = 6; + optional bool isMessagesNotificationEnabled = 7; + optional bool isCallsNotificationEnabled = 8; + optional bool isReactionsNotificationEnabled = 9; + optional bool isStatusReactionsNotificationEnabled = 10; + optional bool isTextPreviewForNotificationEnabled = 11; + optional int32 defaultNotificationToneID = 12; + optional int32 groupDefaultNotificationToneID = 13; + optional int32 appTheme = 14; + optional int32 wallpaperID = 15; + optional bool isDoodleWallpaperEnabled = 16; + optional int32 fontSize = 17; + optional bool isPhotosAutodownloadEnabled = 18; + optional bool isAudiosAutodownloadEnabled = 19; + optional bool isVideosAutodownloadEnabled = 20; + optional bool isDocumentsAutodownloadEnabled = 21; + optional bool disableLinkPreviews = 22; + optional int32 notificationToneID = 23; + optional MediaQualitySetting mediaUploadQuality = 24; + optional bool isSpellCheckEnabled = 25; + optional bool isEnterToSendEnabled = 26; + optional bool isGroupMessageNotificationEnabled = 27; + optional bool isGroupReactionsNotificationEnabled = 28; + optional bool isStatusNotificationEnabled = 29; + optional int32 statusNotificationToneID = 30; + optional bool shouldPlaySoundForCallNotification = 31; +} + +message InteractiveMessageAction { + enum InteractiveMessageActionMode { + DISABLE_CTA = 1; + } + + required InteractiveMessageActionMode type = 1; + optional string agmID = 2; +} + +message PrivateProcessingSettingAction { + enum PrivateProcessingStatus { + UNDEFINED = 0; + ENABLED = 1; + DISABLED = 2; + } + + optional PrivateProcessingStatus privateProcessingStatus = 1; +} + +message AvatarUpdatedAction { + enum AvatarEventType { + UPDATED = 0; + CREATED = 1; + DELETED = 2; + } + + optional AvatarEventType eventType = 1; + repeated StickerAction recentAvatarStickers = 2; +} + +message MaibaAIFeaturesControlAction { + enum MaibaAIFeatureStatus { + ENABLED = 0; + ENABLED_HAS_LEARNING = 1; + DISABLED = 2; + } + + optional MaibaAIFeatureStatus aiFeatureStatus = 1; +} + +message PaymentTosAction { + enum PaymentNotice { + BR_PAY_PRIVACY_POLICY = 0; + } + + required PaymentNotice paymentNotice = 1; + required bool accepted = 2; +} + +message NotificationActivitySettingAction { + enum NotificationActivitySetting { + DEFAULT_ALL_MESSAGES = 0; + ALL_MESSAGES = 1; + HIGHLIGHTS = 2; + DEFAULT_HIGHLIGHTS = 3; + } + + optional NotificationActivitySetting notificationActivitySetting = 1; +} + +message WaffleAccountLinkStateAction { + enum AccountLinkState { + ACTIVE = 0; + PAUSED = 1; + UNLINKED = 2; + } + + optional AccountLinkState linkState = 2; +} + +message MerchantPaymentPartnerAction { + enum Status { + ACTIVE = 0; + INACTIVE = 1; + } + + required Status status = 1; + required string country = 2; + optional string gatewayName = 3; + optional string credentialID = 4; +} + +message NoteEditAction { + enum NoteType { + UNSTRUCTURED = 1; + STRUCTURED = 2; + } + + optional NoteType type = 1; + optional string chatJID = 2; + optional int64 createdAt = 3; + optional bool deleted = 4; + optional string unstructuredContent = 5; +} + +message StatusPrivacyAction { + enum StatusDistributionMode { + ALLOW_LIST = 0; + DENY_LIST = 1; + CONTACTS = 2; + CLOSE_FRIENDS = 3; + } + + optional StatusDistributionMode mode = 1; + repeated string userJID = 2; +} + +message MarketingMessageAction { + enum MarketingMessagePrototypeType { + PERSONALIZED = 0; + } + + optional string name = 1; + optional string message = 2; + optional MarketingMessagePrototypeType type = 3; + optional int64 createdAt = 4; + optional int64 lastSentAt = 5; + optional bool isDeleted = 6; + optional string mediaID = 7; +} + +message UsernameChatStartModeAction { + enum ChatStartMode { + LID = 1; + PN = 2; + } + + optional ChatStartMode chatStartMode = 1; +} + +message LabelEditAction { + enum ListType { + NONE = 0; + UNREAD = 1; + GROUPS = 2; + FAVORITES = 3; + PREDEFINED = 4; + CUSTOM = 5; + COMMUNITY = 6; + SERVER_ASSIGNED = 7; + DRAFTED = 8; + AI_HANDOFF = 9; + } + + optional string name = 1; + optional int32 color = 2; + optional int32 predefinedID = 3; + optional bool deleted = 4; + optional int32 orderIndex = 5; + optional bool isActive = 6; + optional ListType type = 7; + optional bool isImmutable = 8; + optional int64 muteEndTimeMS = 9; +} + +message PatchDebugData { + enum Platform { + ANDROID = 0; + SMBA = 1; + IPHONE = 2; + SMBI = 3; + WEB = 4; + UWP = 5; + DARWIN = 6; + IPAD = 7; + WEAROS = 8; + WASG = 9; + WEARM = 10; + CAPI = 11; + } + + optional bytes currentLthash = 1; + optional bytes newLthash = 2; + optional bytes patchVersion = 3; + optional bytes collectionName = 4; + optional bytes firstFourBytesFromAHashOfSnapshotMACKey = 5; + optional bytes newLthashSubtract = 6; + optional int32 numberAdd = 7; + optional int32 numberRemove = 8; + optional int32 numberOverride = 9; + optional Platform senderPlatform = 10; + optional bool isSenderPrimary = 11; +} + +/* +enum MutationName { + STAR_ACTION = star; + CONTACT_ACTION = contact; + MUTE_ACTION = mute; + PIN_ACTION = pin_v1; + SECURITY_NOTIFICATION_SETTING = setting_securityNotification; + PUSH_NAME_SETTING = setting_pushName; + QUICK_REPLY_ACTION = quick_reply; + RECENT_EMOJI_WEIGHTS_ACTION = recent_emoji_weights_action; + LABEL_MESSAGE_ACTION = label_message; + LABEL_EDIT_ACTION = label_edit; + LABEL_ASSOCIATION_ACTION = label_jid; + LOCALE_SETTING = setting_locale; + ARCHIVE_CHAT_ACTION = archive; + DELETE_MESSAGE_FOR_ME_ACTION = deleteMessageForMe; + KEY_EXPIRATION = sentinel; + MARK_CHAT_AS_READ_ACTION = markChatAsRead; + CLEAR_CHAT_ACTION = clearChat; + DELETE_CHAT_ACTION = deleteChat; + UNARCHIVE_CHATS_SETTING = setting_unarchiveChats; + PRIMARY_FEATURE = primary_feature; + ANDROID_UNSUPPORTED_ACTIONS = android_unsupported_actions; + AGENT_ACTION = deviceAgent; + SUBSCRIPTION_ACTION = subscription; + USER_STATUS_MUTE_ACTION = userStatusMute; + TIME_FORMAT_ACTION = time_format; + NUX_ACTION = nux; + PRIMARY_VERSION_ACTION = primary_version; + STICKER_ACTION = favoriteSticker; + REMOVE_RECENT_STICKER_ACTION = removeRecentSticker; + CHAT_ASSIGNMENT = agentChatAssignment; + CHAT_ASSIGNMENT_OPENED_STATUS = agentChatAssignmentOpenedStatus; + PN_FOR_LID_CHAT_ACTION = pnForLidChat; + MARKETING_MESSAGE_ACTION = marketingMessage; + MARKETING_MESSAGE_BROADCAST_ACTION = marketingMessageBroadcast; + EXTERNAL_WEB_BETA_ACTION = external_web_beta; + PRIVACY_SETTING_RELAY_ALL_CALLS = setting_relayAllCalls; + CALL_LOG_ACTION = call_log; + UGC_BOT = ugc_bot; + STATUS_PRIVACY = status_privacy; + BOT_WELCOME_REQUEST_ACTION = bot_welcome_request; + DELETE_INDIVIDUAL_CALL_LOG = delete_individual_call_log; + LABEL_REORDERING_ACTION = label_reordering; + PAYMENT_INFO_ACTION = payment_info; + CUSTOM_PAYMENT_METHODS_ACTION = custom_payment_methods; + LOCK_CHAT_ACTION = lock; + CHAT_LOCK_SETTINGS = setting_chatLock; + WAMO_USER_IDENTIFIER_ACTION = generated_wui; + PRIVACY_SETTING_DISABLE_LINK_PREVIEWS_ACTION = setting_disableLinkPreviews; + DEVICE_CAPABILITIES = device_capabilities; + NOTE_EDIT_ACTION = note_edit; + FAVORITES_ACTION = favorites; + MERCHANT_PAYMENT_PARTNER_ACTION = merchant_payment_partner; + WAFFLE_ACCOUNT_LINK_STATE_ACTION = waffle_account_link_state; + USERNAME_CHAT_START_MODE = usernameChatStartMode; + NOTIFICATION_ACTIVITY_SETTING_ACTION = notificationActivitySetting; + LID_CONTACT_ACTION = lid_contact; + CTWA_PER_CUSTOMER_DATA_SHARING_ACTION = ctwaPerCustomerDataSharing; + PAYMENT_TOS_ACTION = payment_tos; + PRIVACY_SETTING_CHANNELS_PERSONALISED_RECOMMENDATION_ACTION = setting_channels_personalised_recommendation_optout; + BUSINESS_BROADCAST_ASSOCIATION_ACTION = broadcast_jid; + DETECTED_OUTCOMES_STATUS_ACTION = detected_outcomes_status_action; + MAIBA_AI_FEATURES_CONTROL_ACTION = maiba_ai_features_control; + BUSINESS_BROADCAST_LIST_ACTION = business_broadcast_list; + MUSIC_USER_ID_ACTION = music_user_id; + STATUS_POST_OPT_IN_NOTIFICATION_PREFERENCES_ACTION = status_post_opt_in_notification_preferences_action; + AVATAR_UPDATED_ACTION = avatar_updated_action; + GALAXY_FLOW_ACTION = galaxy_flow_action; + PRIVATE_PROCESSING_SETTING_ACTION = private_processing_setting; + NEWSLETTER_SAVED_INTERESTS_ACTION = newsletter_saved_interests; + AI_THREAD_RENAME_ACTION = ai_thread_rename; + INTERACTIVE_MESSAGE_ACTION = interactive_message_action; + SETTINGS_SYNC_ACTION = settings_sync; + OUT_CONTACT_ACTION = out_contact; + NCT_SALT_SYNC_ACTION = nct_salt_sync; + SHARE_OWN_PN = shareOwnPn; + BUSINESS_BROADCAST_ACTION = broadcast; + AI_THREAD_DELETE_ACTION = ai_thread_delete; +} +*/ + +/* +enum CollectionName { +} +*/ + +/* +enum CollectionNameStr { + REGULAR = regular; + REGULAR_LOW = regular_low; + REGULAR_HIGH = regular_high; + CRITICAL_BLOCK = critical_block; + CRITICAL_UNBLOCK_LOW = critical_unblock_low; +} +*/ + +message RecentEmojiWeight { + optional string emoji = 1; + optional float weight = 2; +} + +message SyncActionValue { + optional int64 timestamp = 1; + optional StarAction starAction = 2; + optional ContactAction contactAction = 3; + optional MuteAction muteAction = 4; + optional PinAction pinAction = 5; + optional PushNameSetting pushNameSetting = 7; + optional QuickReplyAction quickReplyAction = 8; + optional RecentEmojiWeightsAction recentEmojiWeightsAction = 11; + optional LabelEditAction labelEditAction = 14; + optional LabelAssociationAction labelAssociationAction = 15; + optional LocaleSetting localeSetting = 16; + optional ArchiveChatAction archiveChatAction = 17; + optional DeleteMessageForMeAction deleteMessageForMeAction = 18; + optional KeyExpiration keyExpiration = 19; + optional MarkChatAsReadAction markChatAsReadAction = 20; + optional ClearChatAction clearChatAction = 21; + optional DeleteChatAction deleteChatAction = 22; + optional UnarchiveChatsSetting unarchiveChatsSetting = 23; + optional PrimaryFeature primaryFeature = 24; + optional AndroidUnsupportedActions androidUnsupportedActions = 26; + optional AgentAction agentAction = 27; + optional SubscriptionAction subscriptionAction = 28; + optional UserStatusMuteAction userStatusMuteAction = 29; + optional TimeFormatAction timeFormatAction = 30; + optional NuxAction nuxAction = 31; + optional PrimaryVersionAction primaryVersionAction = 32; + optional StickerAction stickerAction = 33; + optional RemoveRecentStickerAction removeRecentStickerAction = 34; + optional ChatAssignmentAction chatAssignment = 35; + optional ChatAssignmentOpenedStatusAction chatAssignmentOpenedStatus = 36; + optional PnForLidChatAction pnForLidChatAction = 37; + optional MarketingMessageAction marketingMessageAction = 38; + optional MarketingMessageBroadcastAction marketingMessageBroadcastAction = 39; + optional ExternalWebBetaAction externalWebBetaAction = 40; + optional PrivacySettingRelayAllCalls privacySettingRelayAllCalls = 41; + optional CallLogAction callLogAction = 42; + optional UGCBot ugcBot = 43; + optional StatusPrivacyAction statusPrivacy = 44; + optional BotWelcomeRequestAction botWelcomeRequestAction = 45; + optional DeleteIndividualCallLogAction deleteIndividualCallLog = 46; + optional LabelReorderingAction labelReorderingAction = 47; + optional PaymentInfoAction paymentInfoAction = 48; + optional CustomPaymentMethodsAction customPaymentMethodsAction = 49; + optional LockChatAction lockChatAction = 50; + optional WAWebProtobufsChatLockSettings.ChatLockSettings chatLockSettings = 51; + optional WamoUserIdentifierAction wamoUserIdentifierAction = 52; + optional PrivacySettingDisableLinkPreviewsAction privacySettingDisableLinkPreviewsAction = 53; + optional WAWebProtobufsDeviceCapabilities.DeviceCapabilities deviceCapabilities = 54; + optional NoteEditAction noteEditAction = 55; + optional FavoritesAction favoritesAction = 56; + optional MerchantPaymentPartnerAction merchantPaymentPartnerAction = 57; + optional WaffleAccountLinkStateAction waffleAccountLinkStateAction = 58; + optional UsernameChatStartModeAction usernameChatStartMode = 59; + optional NotificationActivitySettingAction notificationActivitySettingAction = 60; + optional LidContactAction lidContactAction = 61; + optional CtwaPerCustomerDataSharingAction ctwaPerCustomerDataSharingAction = 62; + optional PaymentTosAction paymentTosAction = 63; + optional PrivacySettingChannelsPersonalisedRecommendationAction privacySettingChannelsPersonalisedRecommendationAction = 64; + optional DetectedOutcomesStatusAction detectedOutcomesStatusAction = 66; + optional MaibaAIFeaturesControlAction maibaAiFeaturesControlAction = 68; + optional BusinessBroadcastListAction businessBroadcastListAction = 69; + optional MusicUserIdAction musicUserIDAction = 70; + optional StatusPostOptInNotificationPreferencesAction statusPostOptInNotificationPreferencesAction = 71; + optional AvatarUpdatedAction avatarUpdatedAction = 72; + optional PrivateProcessingSettingAction privateProcessingSettingAction = 74; + optional NewsletterSavedInterestsAction newsletterSavedInterestsAction = 75; + optional AiThreadRenameAction aiThreadRenameAction = 76; + optional InteractiveMessageAction interactiveMessageAction = 77; + optional SettingsSyncAction settingsSyncAction = 78; + optional OutContactAction outContactAction = 79; + optional NctSaltSyncAction nctSaltSyncAction = 80; +} + +message NctSaltSyncAction { + optional bytes salt = 1; +} + +message AiThreadRenameAction { + optional string newTitle = 1; +} + +message StatusPostOptInNotificationPreferencesAction { + optional bool enabled = 1; +} + +message BroadcastListParticipant { + required string lidJID = 1; + optional string pnJID = 2; +} + +message BusinessBroadcastListAction { + optional bool deleted = 1; + repeated BroadcastListParticipant participants = 2; + optional string listName = 3; + repeated string labelIDs = 4; +} + +message BusinessBroadcastAssociationAction { + optional bool deleted = 1; +} + +message CtwaPerCustomerDataSharingAction { + optional bool isCtwaPerCustomerDataSharingEnabled = 1; +} + +message OutContactAction { + optional string fullName = 1; + optional string firstName = 2; +} + +message LidContactAction { + optional string fullName = 1; + optional string firstName = 2; + optional string username = 3; +} + +message FavoritesAction { + message Favorite { + optional string ID = 1; + } + + repeated Favorite favorites = 1; +} + +message PrivacySettingChannelsPersonalisedRecommendationAction { + optional bool isUserOptedOut = 1; +} + +message PrivacySettingDisableLinkPreviewsAction { + optional bool isPreviewsDisabled = 1; +} + +message WamoUserIdentifierAction { + optional string identifier = 1; +} + +message LockChatAction { + optional bool locked = 1; +} + +message CustomPaymentMethodsAction { + repeated CustomPaymentMethod customPaymentMethods = 1; +} + +message CustomPaymentMethod { + required string credentialID = 1; + required string country = 2; + required string type = 3; + repeated CustomPaymentMethodMetadata metadata = 4; +} + +message CustomPaymentMethodMetadata { + required string key = 1; + required string value = 2; +} + +message PaymentInfoAction { + optional string cpi = 1; +} + +message LabelReorderingAction { + repeated int32 sortedLabelIDs = 1; +} + +message DeleteIndividualCallLogAction { + optional string peerJID = 1; + optional bool isIncoming = 2; +} + +message BotWelcomeRequestAction { + optional bool isSent = 1; +} + +message NewsletterSavedInterestsAction { + optional string newsletterSavedInterests = 1; +} + +message MusicUserIdAction { + optional string musicUserID = 1; + // TODO switch to proto3 and enable this + //optional map music_user_id_map = 2; +} + +message UGCBot { + optional bytes definition = 1; +} + +message CallLogAction { + optional CallLogRecord callLogRecord = 1; +} + +message PrivacySettingRelayAllCalls { + optional bool isEnabled = 1; +} + +message DetectedOutcomesStatusAction { + optional bool isEnabled = 1; +} + +message ExternalWebBetaAction { + optional bool isOptIn = 1; +} + +message MarketingMessageBroadcastAction { + optional int32 repliedCount = 1; +} + +message PnForLidChatAction { + optional string pnJID = 1; +} + +message ChatAssignmentOpenedStatusAction { + optional bool chatOpened = 1; +} + +message ChatAssignmentAction { + optional string deviceAgentID = 1; +} + +message StickerAction { + optional string URL = 1; + optional bytes fileEncSHA256 = 2; + optional bytes mediaKey = 3; + optional string mimetype = 4; + optional uint32 height = 5; + optional uint32 width = 6; + optional string directPath = 7; + optional uint64 fileLength = 8; + optional bool isFavorite = 9; + optional uint32 deviceIDHint = 10; + optional bool isLottie = 11; + optional string imageHash = 12; + optional bool isAvatarSticker = 13; +} + +message RemoveRecentStickerAction { + optional int64 lastStickerSentTS = 1; +} + +message PrimaryVersionAction { + optional string version = 1; +} + +message NuxAction { + optional bool acknowledged = 1; +} + +message TimeFormatAction { + optional bool isTwentyFourHourFormatEnabled = 1; +} + +message UserStatusMuteAction { + optional bool muted = 1; +} + +message SubscriptionAction { + optional bool isDeactivated = 1; + optional bool isAutoRenewing = 2; + optional int64 expirationDate = 3; +} + +message AgentAction { + optional string name = 1; + optional int32 deviceID = 2; + optional bool isDeleted = 3; +} + +message AndroidUnsupportedActions { + optional bool allowed = 1; +} + +message PrimaryFeature { + repeated string flags = 1; +} + +message KeyExpiration { + optional int32 expiredKeyEpoch = 1; +} + +message SyncActionMessage { + optional WACommon.MessageKey key = 1; + optional int64 timestamp = 2; +} + +message SyncActionMessageRange { + optional int64 lastMessageTimestamp = 1; + optional int64 lastSystemMessageTimestamp = 2; + repeated SyncActionMessage messages = 3; +} + +message UnarchiveChatsSetting { + optional bool unarchiveChats = 1; +} + +message DeleteChatAction { + optional SyncActionMessageRange messageRange = 1; +} + +message ClearChatAction { + optional SyncActionMessageRange messageRange = 1; +} + +message MarkChatAsReadAction { + optional bool read = 1; + optional SyncActionMessageRange messageRange = 2; +} + +message DeleteMessageForMeAction { + optional bool deleteMedia = 1; + optional int64 messageTimestamp = 2; +} + +message ArchiveChatAction { + optional bool archived = 1; + optional SyncActionMessageRange messageRange = 2; +} + +message RecentEmojiWeightsAction { + repeated RecentEmojiWeight weights = 1; +} + +message LabelAssociationAction { + optional bool labeled = 1; +} + +message QuickReplyAction { + optional string shortcut = 1; + optional string message = 2; + repeated string keywords = 3; + optional int32 count = 4; + optional bool deleted = 5; +} + +message LocaleSetting { + optional string locale = 1; +} + +message PushNameSetting { + optional string name = 1; +} + +message PinAction { + optional bool pinned = 1; +} + +message MuteAction { + optional bool muted = 1; + optional int64 muteEndTimestamp = 2; + optional bool autoMuted = 3; + optional int64 muteEveryoneMentionEndTimestamp = 4; +} + +message ContactAction { + optional string fullName = 1; + optional string firstName = 2; + optional string lidJID = 3; + optional bool saveOnPrimaryAddressbook = 4; + optional string pnJID = 5; + optional string username = 6; +} + +message StarAction { + optional bool starred = 1; +} + +message SyncActionData { + optional bytes index = 1; + optional SyncActionValue value = 2; + optional bytes padding = 3; + optional int32 version = 4; +} diff --git a/vendor/go.mau.fi/whatsmeow/proto/waSyncdSnapshotRecovery/WAWebProtobufsSyncdSnapshotRecovery.pb.go b/vendor/go.mau.fi/whatsmeow/proto/waSyncdSnapshotRecovery/WAWebProtobufsSyncdSnapshotRecovery.pb.go new file mode 100644 index 0000000000..853a48ce05 --- /dev/null +++ b/vendor/go.mau.fi/whatsmeow/proto/waSyncdSnapshotRecovery/WAWebProtobufsSyncdSnapshotRecovery.pb.go @@ -0,0 +1,268 @@ +// Code generated by protoc-gen-go. DO NOT EDIT. +// versions: +// protoc-gen-go v1.36.10 +// protoc v3.21.12 +// source: waSyncdSnapshotRecovery/WAWebProtobufsSyncdSnapshotRecovery.proto + +package waSyncdSnapshotRecovery + +import ( + reflect "reflect" + sync "sync" + unsafe "unsafe" + + protoreflect "google.golang.org/protobuf/reflect/protoreflect" + protoimpl "google.golang.org/protobuf/runtime/protoimpl" + + waSyncAction "go.mau.fi/whatsmeow/proto/waSyncAction" +) + +const ( + // Verify that this generated code is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion) + // Verify that runtime/protoimpl is sufficiently up-to-date. + _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) +) + +type SyncdSnapshotRecovery struct { + state protoimpl.MessageState `protogen:"open.v1"` + Version *SyncdVersion `protobuf:"bytes,1,opt,name=version" json:"version,omitempty"` + CollectionName *string `protobuf:"bytes,2,opt,name=collectionName" json:"collectionName,omitempty"` + MutationRecords []*SyncdPlainTextRecord `protobuf:"bytes,3,rep,name=mutationRecords" json:"mutationRecords,omitempty"` + CollectionLthash []byte `protobuf:"bytes,4,opt,name=collectionLthash" json:"collectionLthash,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *SyncdSnapshotRecovery) Reset() { + *x = SyncdSnapshotRecovery{} + mi := &file_waSyncdSnapshotRecovery_WAWebProtobufsSyncdSnapshotRecovery_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *SyncdSnapshotRecovery) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SyncdSnapshotRecovery) ProtoMessage() {} + +func (x *SyncdSnapshotRecovery) ProtoReflect() protoreflect.Message { + mi := &file_waSyncdSnapshotRecovery_WAWebProtobufsSyncdSnapshotRecovery_proto_msgTypes[0] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SyncdSnapshotRecovery.ProtoReflect.Descriptor instead. +func (*SyncdSnapshotRecovery) Descriptor() ([]byte, []int) { + return file_waSyncdSnapshotRecovery_WAWebProtobufsSyncdSnapshotRecovery_proto_rawDescGZIP(), []int{0} +} + +func (x *SyncdSnapshotRecovery) GetVersion() *SyncdVersion { + if x != nil { + return x.Version + } + return nil +} + +func (x *SyncdSnapshotRecovery) GetCollectionName() string { + if x != nil && x.CollectionName != nil { + return *x.CollectionName + } + return "" +} + +func (x *SyncdSnapshotRecovery) GetMutationRecords() []*SyncdPlainTextRecord { + if x != nil { + return x.MutationRecords + } + return nil +} + +func (x *SyncdSnapshotRecovery) GetCollectionLthash() []byte { + if x != nil { + return x.CollectionLthash + } + return nil +} + +type SyncdPlainTextRecord struct { + state protoimpl.MessageState `protogen:"open.v1"` + Value *waSyncAction.SyncActionData `protobuf:"bytes,1,opt,name=value" json:"value,omitempty"` + KeyID []byte `protobuf:"bytes,2,opt,name=keyID" json:"keyID,omitempty"` + Mac []byte `protobuf:"bytes,3,opt,name=mac" json:"mac,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *SyncdPlainTextRecord) Reset() { + *x = SyncdPlainTextRecord{} + mi := &file_waSyncdSnapshotRecovery_WAWebProtobufsSyncdSnapshotRecovery_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *SyncdPlainTextRecord) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SyncdPlainTextRecord) ProtoMessage() {} + +func (x *SyncdPlainTextRecord) ProtoReflect() protoreflect.Message { + mi := &file_waSyncdSnapshotRecovery_WAWebProtobufsSyncdSnapshotRecovery_proto_msgTypes[1] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SyncdPlainTextRecord.ProtoReflect.Descriptor instead. +func (*SyncdPlainTextRecord) Descriptor() ([]byte, []int) { + return file_waSyncdSnapshotRecovery_WAWebProtobufsSyncdSnapshotRecovery_proto_rawDescGZIP(), []int{1} +} + +func (x *SyncdPlainTextRecord) GetValue() *waSyncAction.SyncActionData { + if x != nil { + return x.Value + } + return nil +} + +func (x *SyncdPlainTextRecord) GetKeyID() []byte { + if x != nil { + return x.KeyID + } + return nil +} + +func (x *SyncdPlainTextRecord) GetMac() []byte { + if x != nil { + return x.Mac + } + return nil +} + +type SyncdVersion struct { + state protoimpl.MessageState `protogen:"open.v1"` + Version *uint64 `protobuf:"varint,1,opt,name=version" json:"version,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *SyncdVersion) Reset() { + *x = SyncdVersion{} + mi := &file_waSyncdSnapshotRecovery_WAWebProtobufsSyncdSnapshotRecovery_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *SyncdVersion) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*SyncdVersion) ProtoMessage() {} + +func (x *SyncdVersion) ProtoReflect() protoreflect.Message { + mi := &file_waSyncdSnapshotRecovery_WAWebProtobufsSyncdSnapshotRecovery_proto_msgTypes[2] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use SyncdVersion.ProtoReflect.Descriptor instead. +func (*SyncdVersion) Descriptor() ([]byte, []int) { + return file_waSyncdSnapshotRecovery_WAWebProtobufsSyncdSnapshotRecovery_proto_rawDescGZIP(), []int{2} +} + +func (x *SyncdVersion) GetVersion() uint64 { + if x != nil && x.Version != nil { + return *x.Version + } + return 0 +} + +var File_waSyncdSnapshotRecovery_WAWebProtobufsSyncdSnapshotRecovery_proto protoreflect.FileDescriptor + +const file_waSyncdSnapshotRecovery_WAWebProtobufsSyncdSnapshotRecovery_proto_rawDesc = "" + + "\n" + + "AwaSyncdSnapshotRecovery/WAWebProtobufsSyncdSnapshotRecovery.proto\x12#WAWebProtobufsSyncdSnapshotRecovery\x1a*waSyncAction/WAWebProtobufSyncAction.proto\"\x9d\x02\n" + + "\x15SyncdSnapshotRecovery\x12K\n" + + "\aversion\x18\x01 \x01(\v21.WAWebProtobufsSyncdSnapshotRecovery.SyncdVersionR\aversion\x12&\n" + + "\x0ecollectionName\x18\x02 \x01(\tR\x0ecollectionName\x12c\n" + + "\x0fmutationRecords\x18\x03 \x03(\v29.WAWebProtobufsSyncdSnapshotRecovery.SyncdPlainTextRecordR\x0fmutationRecords\x12*\n" + + "\x10collectionLthash\x18\x04 \x01(\fR\x10collectionLthash\"}\n" + + "\x14SyncdPlainTextRecord\x12=\n" + + "\x05value\x18\x01 \x01(\v2'.WAWebProtobufSyncAction.SyncActionDataR\x05value\x12\x14\n" + + "\x05keyID\x18\x02 \x01(\fR\x05keyID\x12\x10\n" + + "\x03mac\x18\x03 \x01(\fR\x03mac\"(\n" + + "\fSyncdVersion\x12\x18\n" + + "\aversion\x18\x01 \x01(\x04R\aversionB3Z1go.mau.fi/whatsmeow/proto/waSyncdSnapshotRecovery" + +var ( + file_waSyncdSnapshotRecovery_WAWebProtobufsSyncdSnapshotRecovery_proto_rawDescOnce sync.Once + file_waSyncdSnapshotRecovery_WAWebProtobufsSyncdSnapshotRecovery_proto_rawDescData []byte +) + +func file_waSyncdSnapshotRecovery_WAWebProtobufsSyncdSnapshotRecovery_proto_rawDescGZIP() []byte { + file_waSyncdSnapshotRecovery_WAWebProtobufsSyncdSnapshotRecovery_proto_rawDescOnce.Do(func() { + file_waSyncdSnapshotRecovery_WAWebProtobufsSyncdSnapshotRecovery_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_waSyncdSnapshotRecovery_WAWebProtobufsSyncdSnapshotRecovery_proto_rawDesc), len(file_waSyncdSnapshotRecovery_WAWebProtobufsSyncdSnapshotRecovery_proto_rawDesc))) + }) + return file_waSyncdSnapshotRecovery_WAWebProtobufsSyncdSnapshotRecovery_proto_rawDescData +} + +var file_waSyncdSnapshotRecovery_WAWebProtobufsSyncdSnapshotRecovery_proto_msgTypes = make([]protoimpl.MessageInfo, 3) +var file_waSyncdSnapshotRecovery_WAWebProtobufsSyncdSnapshotRecovery_proto_goTypes = []any{ + (*SyncdSnapshotRecovery)(nil), // 0: WAWebProtobufsSyncdSnapshotRecovery.SyncdSnapshotRecovery + (*SyncdPlainTextRecord)(nil), // 1: WAWebProtobufsSyncdSnapshotRecovery.SyncdPlainTextRecord + (*SyncdVersion)(nil), // 2: WAWebProtobufsSyncdSnapshotRecovery.SyncdVersion + (*waSyncAction.SyncActionData)(nil), // 3: WAWebProtobufSyncAction.SyncActionData +} +var file_waSyncdSnapshotRecovery_WAWebProtobufsSyncdSnapshotRecovery_proto_depIdxs = []int32{ + 2, // 0: WAWebProtobufsSyncdSnapshotRecovery.SyncdSnapshotRecovery.version:type_name -> WAWebProtobufsSyncdSnapshotRecovery.SyncdVersion + 1, // 1: WAWebProtobufsSyncdSnapshotRecovery.SyncdSnapshotRecovery.mutationRecords:type_name -> WAWebProtobufsSyncdSnapshotRecovery.SyncdPlainTextRecord + 3, // 2: WAWebProtobufsSyncdSnapshotRecovery.SyncdPlainTextRecord.value:type_name -> WAWebProtobufSyncAction.SyncActionData + 3, // [3:3] is the sub-list for method output_type + 3, // [3:3] is the sub-list for method input_type + 3, // [3:3] is the sub-list for extension type_name + 3, // [3:3] is the sub-list for extension extendee + 0, // [0:3] is the sub-list for field type_name +} + +func init() { file_waSyncdSnapshotRecovery_WAWebProtobufsSyncdSnapshotRecovery_proto_init() } +func file_waSyncdSnapshotRecovery_WAWebProtobufsSyncdSnapshotRecovery_proto_init() { + if File_waSyncdSnapshotRecovery_WAWebProtobufsSyncdSnapshotRecovery_proto != nil { + return + } + type x struct{} + out := protoimpl.TypeBuilder{ + File: protoimpl.DescBuilder{ + GoPackagePath: reflect.TypeOf(x{}).PkgPath(), + RawDescriptor: unsafe.Slice(unsafe.StringData(file_waSyncdSnapshotRecovery_WAWebProtobufsSyncdSnapshotRecovery_proto_rawDesc), len(file_waSyncdSnapshotRecovery_WAWebProtobufsSyncdSnapshotRecovery_proto_rawDesc)), + NumEnums: 0, + NumMessages: 3, + NumExtensions: 0, + NumServices: 0, + }, + GoTypes: file_waSyncdSnapshotRecovery_WAWebProtobufsSyncdSnapshotRecovery_proto_goTypes, + DependencyIndexes: file_waSyncdSnapshotRecovery_WAWebProtobufsSyncdSnapshotRecovery_proto_depIdxs, + MessageInfos: file_waSyncdSnapshotRecovery_WAWebProtobufsSyncdSnapshotRecovery_proto_msgTypes, + }.Build() + File_waSyncdSnapshotRecovery_WAWebProtobufsSyncdSnapshotRecovery_proto = out.File + file_waSyncdSnapshotRecovery_WAWebProtobufsSyncdSnapshotRecovery_proto_goTypes = nil + file_waSyncdSnapshotRecovery_WAWebProtobufsSyncdSnapshotRecovery_proto_depIdxs = nil +} diff --git a/vendor/go.mau.fi/whatsmeow/proto/waSyncdSnapshotRecovery/WAWebProtobufsSyncdSnapshotRecovery.proto b/vendor/go.mau.fi/whatsmeow/proto/waSyncdSnapshotRecovery/WAWebProtobufsSyncdSnapshotRecovery.proto new file mode 100644 index 0000000000..2e93695f07 --- /dev/null +++ b/vendor/go.mau.fi/whatsmeow/proto/waSyncdSnapshotRecovery/WAWebProtobufsSyncdSnapshotRecovery.proto @@ -0,0 +1,22 @@ +syntax = "proto2"; +package WAWebProtobufsSyncdSnapshotRecovery; +option go_package = "go.mau.fi/whatsmeow/proto/waSyncdSnapshotRecovery"; + +import "waSyncAction/WAWebProtobufSyncAction.proto"; + +message SyncdSnapshotRecovery { + optional SyncdVersion version = 1; + optional string collectionName = 2; + repeated SyncdPlainTextRecord mutationRecords = 3; + optional bytes collectionLthash = 4; +} + +message SyncdPlainTextRecord { + optional WAWebProtobufSyncAction.SyncActionData value = 1; + optional bytes keyID = 2; + optional bytes mac = 3; +} + +message SyncdVersion { + optional uint64 version = 1; +} diff --git a/vendor/go.mau.fi/whatsmeow/proto/waUserPassword/WAProtobufsUserPassword.pb.raw b/vendor/go.mau.fi/whatsmeow/proto/waUserPassword/WAProtobufsUserPassword.pb.raw deleted file mode 100644 index bae794d2ac..0000000000 Binary files a/vendor/go.mau.fi/whatsmeow/proto/waUserPassword/WAProtobufsUserPassword.pb.raw and /dev/null differ diff --git a/vendor/go.mau.fi/whatsmeow/proto/waUserPassword/WAProtobufsUserPassword.pb.go b/vendor/go.mau.fi/whatsmeow/proto/waUserPassword/WAWebProtobufsUserPassword.pb.go similarity index 53% rename from vendor/go.mau.fi/whatsmeow/proto/waUserPassword/WAProtobufsUserPassword.pb.go rename to vendor/go.mau.fi/whatsmeow/proto/waUserPassword/WAWebProtobufsUserPassword.pb.go index bff8e175f5..b40e551ddd 100644 --- a/vendor/go.mau.fi/whatsmeow/proto/waUserPassword/WAProtobufsUserPassword.pb.go +++ b/vendor/go.mau.fi/whatsmeow/proto/waUserPassword/WAWebProtobufsUserPassword.pb.go @@ -1,19 +1,18 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 +// protoc-gen-go v1.36.10 // protoc v3.21.12 -// source: waUserPassword/WAProtobufsUserPassword.proto +// source: waUserPassword/WAWebProtobufsUserPassword.proto package waUserPassword import ( reflect "reflect" sync "sync" + unsafe "unsafe" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" - - _ "embed" ) const ( @@ -56,11 +55,11 @@ func (x UserPassword_Transformer) String() string { } func (UserPassword_Transformer) Descriptor() protoreflect.EnumDescriptor { - return file_waUserPassword_WAProtobufsUserPassword_proto_enumTypes[0].Descriptor() + return file_waUserPassword_WAWebProtobufsUserPassword_proto_enumTypes[0].Descriptor() } func (UserPassword_Transformer) Type() protoreflect.EnumType { - return &file_waUserPassword_WAProtobufsUserPassword_proto_enumTypes[0] + return &file_waUserPassword_WAWebProtobufsUserPassword_proto_enumTypes[0] } func (x UserPassword_Transformer) Number() protoreflect.EnumNumber { @@ -79,7 +78,7 @@ func (x *UserPassword_Transformer) UnmarshalJSON(b []byte) error { // Deprecated: Use UserPassword_Transformer.Descriptor instead. func (UserPassword_Transformer) EnumDescriptor() ([]byte, []int) { - return file_waUserPassword_WAProtobufsUserPassword_proto_rawDescGZIP(), []int{0, 0} + return file_waUserPassword_WAWebProtobufsUserPassword_proto_rawDescGZIP(), []int{0, 0} } type UserPassword_Encoding int32 @@ -112,11 +111,11 @@ func (x UserPassword_Encoding) String() string { } func (UserPassword_Encoding) Descriptor() protoreflect.EnumDescriptor { - return file_waUserPassword_WAProtobufsUserPassword_proto_enumTypes[1].Descriptor() + return file_waUserPassword_WAWebProtobufsUserPassword_proto_enumTypes[1].Descriptor() } func (UserPassword_Encoding) Type() protoreflect.EnumType { - return &file_waUserPassword_WAProtobufsUserPassword_proto_enumTypes[1] + return &file_waUserPassword_WAWebProtobufsUserPassword_proto_enumTypes[1] } func (x UserPassword_Encoding) Number() protoreflect.EnumNumber { @@ -135,27 +134,24 @@ func (x *UserPassword_Encoding) UnmarshalJSON(b []byte) error { // Deprecated: Use UserPassword_Encoding.Descriptor instead. func (UserPassword_Encoding) EnumDescriptor() ([]byte, []int) { - return file_waUserPassword_WAProtobufsUserPassword_proto_rawDescGZIP(), []int{0, 1} + return file_waUserPassword_WAWebProtobufsUserPassword_proto_rawDescGZIP(), []int{0, 1} } type UserPassword struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Encoding *UserPassword_Encoding `protobuf:"varint,1,opt,name=encoding,enum=WAProtobufsUserPassword.UserPassword_Encoding" json:"encoding,omitempty"` - Transformer *UserPassword_Transformer `protobuf:"varint,2,opt,name=transformer,enum=WAProtobufsUserPassword.UserPassword_Transformer" json:"transformer,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Encoding *UserPassword_Encoding `protobuf:"varint,1,opt,name=encoding,enum=WAWebProtobufsUserPassword.UserPassword_Encoding" json:"encoding,omitempty"` + Transformer *UserPassword_Transformer `protobuf:"varint,2,opt,name=transformer,enum=WAWebProtobufsUserPassword.UserPassword_Transformer" json:"transformer,omitempty"` TransformerArg []*UserPassword_TransformerArg `protobuf:"bytes,3,rep,name=transformerArg" json:"transformerArg,omitempty"` TransformedData []byte `protobuf:"bytes,4,opt,name=transformedData" json:"transformedData,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *UserPassword) Reset() { *x = UserPassword{} - if protoimpl.UnsafeEnabled { - mi := &file_waUserPassword_WAProtobufsUserPassword_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waUserPassword_WAWebProtobufsUserPassword_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *UserPassword) String() string { @@ -165,8 +161,8 @@ func (x *UserPassword) String() string { func (*UserPassword) ProtoMessage() {} func (x *UserPassword) ProtoReflect() protoreflect.Message { - mi := &file_waUserPassword_WAProtobufsUserPassword_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_waUserPassword_WAWebProtobufsUserPassword_proto_msgTypes[0] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -178,7 +174,7 @@ func (x *UserPassword) ProtoReflect() protoreflect.Message { // Deprecated: Use UserPassword.ProtoReflect.Descriptor instead. func (*UserPassword) Descriptor() ([]byte, []int) { - return file_waUserPassword_WAProtobufsUserPassword_proto_rawDescGZIP(), []int{0} + return file_waUserPassword_WAWebProtobufsUserPassword_proto_rawDescGZIP(), []int{0} } func (x *UserPassword) GetEncoding() UserPassword_Encoding { @@ -210,21 +206,18 @@ func (x *UserPassword) GetTransformedData() []byte { } type UserPassword_TransformerArg struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Key *string `protobuf:"bytes,1,opt,name=key" json:"key,omitempty"` + Value *UserPassword_TransformerArg_Value `protobuf:"bytes,2,opt,name=value" json:"value,omitempty"` unknownFields protoimpl.UnknownFields - - Key *string `protobuf:"bytes,1,opt,name=key" json:"key,omitempty"` - Value *UserPassword_TransformerArg_Value `protobuf:"bytes,2,opt,name=value" json:"value,omitempty"` + sizeCache protoimpl.SizeCache } func (x *UserPassword_TransformerArg) Reset() { *x = UserPassword_TransformerArg{} - if protoimpl.UnsafeEnabled { - mi := &file_waUserPassword_WAProtobufsUserPassword_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waUserPassword_WAWebProtobufsUserPassword_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *UserPassword_TransformerArg) String() string { @@ -234,8 +227,8 @@ func (x *UserPassword_TransformerArg) String() string { func (*UserPassword_TransformerArg) ProtoMessage() {} func (x *UserPassword_TransformerArg) ProtoReflect() protoreflect.Message { - mi := &file_waUserPassword_WAProtobufsUserPassword_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_waUserPassword_WAWebProtobufsUserPassword_proto_msgTypes[1] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -247,7 +240,7 @@ func (x *UserPassword_TransformerArg) ProtoReflect() protoreflect.Message { // Deprecated: Use UserPassword_TransformerArg.ProtoReflect.Descriptor instead. func (*UserPassword_TransformerArg) Descriptor() ([]byte, []int) { - return file_waUserPassword_WAProtobufsUserPassword_proto_rawDescGZIP(), []int{0, 0} + return file_waUserPassword_WAWebProtobufsUserPassword_proto_rawDescGZIP(), []int{0, 0} } func (x *UserPassword_TransformerArg) GetKey() string { @@ -265,24 +258,21 @@ func (x *UserPassword_TransformerArg) GetValue() *UserPassword_TransformerArg_Va } type UserPassword_TransformerArg_Value struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Types that are assignable to Value: + state protoimpl.MessageState `protogen:"open.v1"` + // Types that are valid to be assigned to Value: // // *UserPassword_TransformerArg_Value_AsBlob // *UserPassword_TransformerArg_Value_AsUnsignedInteger - Value isUserPassword_TransformerArg_Value_Value `protobuf_oneof:"value"` + Value isUserPassword_TransformerArg_Value_Value `protobuf_oneof:"value"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *UserPassword_TransformerArg_Value) Reset() { *x = UserPassword_TransformerArg_Value{} - if protoimpl.UnsafeEnabled { - mi := &file_waUserPassword_WAProtobufsUserPassword_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waUserPassword_WAWebProtobufsUserPassword_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *UserPassword_TransformerArg_Value) String() string { @@ -292,8 +282,8 @@ func (x *UserPassword_TransformerArg_Value) String() string { func (*UserPassword_TransformerArg_Value) ProtoMessage() {} func (x *UserPassword_TransformerArg_Value) ProtoReflect() protoreflect.Message { - mi := &file_waUserPassword_WAProtobufsUserPassword_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_waUserPassword_WAWebProtobufsUserPassword_proto_msgTypes[2] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -305,26 +295,30 @@ func (x *UserPassword_TransformerArg_Value) ProtoReflect() protoreflect.Message // Deprecated: Use UserPassword_TransformerArg_Value.ProtoReflect.Descriptor instead. func (*UserPassword_TransformerArg_Value) Descriptor() ([]byte, []int) { - return file_waUserPassword_WAProtobufsUserPassword_proto_rawDescGZIP(), []int{0, 0, 0} + return file_waUserPassword_WAWebProtobufsUserPassword_proto_rawDescGZIP(), []int{0, 0, 0} } -func (m *UserPassword_TransformerArg_Value) GetValue() isUserPassword_TransformerArg_Value_Value { - if m != nil { - return m.Value +func (x *UserPassword_TransformerArg_Value) GetValue() isUserPassword_TransformerArg_Value_Value { + if x != nil { + return x.Value } return nil } func (x *UserPassword_TransformerArg_Value) GetAsBlob() []byte { - if x, ok := x.GetValue().(*UserPassword_TransformerArg_Value_AsBlob); ok { - return x.AsBlob + if x != nil { + if x, ok := x.Value.(*UserPassword_TransformerArg_Value_AsBlob); ok { + return x.AsBlob + } } return nil } func (x *UserPassword_TransformerArg_Value) GetAsUnsignedInteger() uint32 { - if x, ok := x.GetValue().(*UserPassword_TransformerArg_Value_AsUnsignedInteger); ok { - return x.AsUnsignedInteger + if x != nil { + if x, ok := x.Value.(*UserPassword_TransformerArg_Value_AsUnsignedInteger); ok { + return x.AsUnsignedInteger + } } return 0 } @@ -346,37 +340,57 @@ func (*UserPassword_TransformerArg_Value_AsBlob) isUserPassword_TransformerArg_V func (*UserPassword_TransformerArg_Value_AsUnsignedInteger) isUserPassword_TransformerArg_Value_Value() { } -var File_waUserPassword_WAProtobufsUserPassword_proto protoreflect.FileDescriptor - -//go:embed WAProtobufsUserPassword.pb.raw -var file_waUserPassword_WAProtobufsUserPassword_proto_rawDesc []byte +var File_waUserPassword_WAWebProtobufsUserPassword_proto protoreflect.FileDescriptor + +const file_waUserPassword_WAWebProtobufsUserPassword_proto_rawDesc = "" + + "\n" + + "/waUserPassword/WAWebProtobufsUserPassword.proto\x12\x1aWAWebProtobufsUserPassword\"\x86\x05\n" + + "\fUserPassword\x12M\n" + + "\bencoding\x18\x01 \x01(\x0e21.WAWebProtobufsUserPassword.UserPassword.EncodingR\bencoding\x12V\n" + + "\vtransformer\x18\x02 \x01(\x0e24.WAWebProtobufsUserPassword.UserPassword.TransformerR\vtransformer\x12_\n" + + "\x0etransformerArg\x18\x03 \x03(\v27.WAWebProtobufsUserPassword.UserPassword.TransformerArgR\x0etransformerArg\x12(\n" + + "\x0ftransformedData\x18\x04 \x01(\fR\x0ftransformedData\x1a\xd3\x01\n" + + "\x0eTransformerArg\x12\x10\n" + + "\x03key\x18\x01 \x01(\tR\x03key\x12S\n" + + "\x05value\x18\x02 \x01(\v2=.WAWebProtobufsUserPassword.UserPassword.TransformerArg.ValueR\x05value\x1aZ\n" + + "\x05Value\x12\x18\n" + + "\x06asBlob\x18\x01 \x01(\fH\x00R\x06asBlob\x12.\n" + + "\x11asUnsignedInteger\x18\x02 \x01(\rH\x00R\x11asUnsignedIntegerB\a\n" + + "\x05value\"G\n" + + "\vTransformer\x12\b\n" + + "\x04NONE\x10\x00\x12\x16\n" + + "\x12PBKDF2_HMAC_SHA512\x10\x01\x12\x16\n" + + "\x12PBKDF2_HMAC_SHA384\x10\x02\"%\n" + + "\bEncoding\x12\b\n" + + "\x04UTF8\x10\x00\x12\x0f\n" + + "\vUTF8_BROKEN\x10\x01B*Z(go.mau.fi/whatsmeow/proto/waUserPassword" var ( - file_waUserPassword_WAProtobufsUserPassword_proto_rawDescOnce sync.Once - file_waUserPassword_WAProtobufsUserPassword_proto_rawDescData = file_waUserPassword_WAProtobufsUserPassword_proto_rawDesc + file_waUserPassword_WAWebProtobufsUserPassword_proto_rawDescOnce sync.Once + file_waUserPassword_WAWebProtobufsUserPassword_proto_rawDescData []byte ) -func file_waUserPassword_WAProtobufsUserPassword_proto_rawDescGZIP() []byte { - file_waUserPassword_WAProtobufsUserPassword_proto_rawDescOnce.Do(func() { - file_waUserPassword_WAProtobufsUserPassword_proto_rawDescData = protoimpl.X.CompressGZIP(file_waUserPassword_WAProtobufsUserPassword_proto_rawDescData) +func file_waUserPassword_WAWebProtobufsUserPassword_proto_rawDescGZIP() []byte { + file_waUserPassword_WAWebProtobufsUserPassword_proto_rawDescOnce.Do(func() { + file_waUserPassword_WAWebProtobufsUserPassword_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_waUserPassword_WAWebProtobufsUserPassword_proto_rawDesc), len(file_waUserPassword_WAWebProtobufsUserPassword_proto_rawDesc))) }) - return file_waUserPassword_WAProtobufsUserPassword_proto_rawDescData -} - -var file_waUserPassword_WAProtobufsUserPassword_proto_enumTypes = make([]protoimpl.EnumInfo, 2) -var file_waUserPassword_WAProtobufsUserPassword_proto_msgTypes = make([]protoimpl.MessageInfo, 3) -var file_waUserPassword_WAProtobufsUserPassword_proto_goTypes = []any{ - (UserPassword_Transformer)(0), // 0: WAProtobufsUserPassword.UserPassword.Transformer - (UserPassword_Encoding)(0), // 1: WAProtobufsUserPassword.UserPassword.Encoding - (*UserPassword)(nil), // 2: WAProtobufsUserPassword.UserPassword - (*UserPassword_TransformerArg)(nil), // 3: WAProtobufsUserPassword.UserPassword.TransformerArg - (*UserPassword_TransformerArg_Value)(nil), // 4: WAProtobufsUserPassword.UserPassword.TransformerArg.Value -} -var file_waUserPassword_WAProtobufsUserPassword_proto_depIdxs = []int32{ - 1, // 0: WAProtobufsUserPassword.UserPassword.encoding:type_name -> WAProtobufsUserPassword.UserPassword.Encoding - 0, // 1: WAProtobufsUserPassword.UserPassword.transformer:type_name -> WAProtobufsUserPassword.UserPassword.Transformer - 3, // 2: WAProtobufsUserPassword.UserPassword.transformerArg:type_name -> WAProtobufsUserPassword.UserPassword.TransformerArg - 4, // 3: WAProtobufsUserPassword.UserPassword.TransformerArg.value:type_name -> WAProtobufsUserPassword.UserPassword.TransformerArg.Value + return file_waUserPassword_WAWebProtobufsUserPassword_proto_rawDescData +} + +var file_waUserPassword_WAWebProtobufsUserPassword_proto_enumTypes = make([]protoimpl.EnumInfo, 2) +var file_waUserPassword_WAWebProtobufsUserPassword_proto_msgTypes = make([]protoimpl.MessageInfo, 3) +var file_waUserPassword_WAWebProtobufsUserPassword_proto_goTypes = []any{ + (UserPassword_Transformer)(0), // 0: WAWebProtobufsUserPassword.UserPassword.Transformer + (UserPassword_Encoding)(0), // 1: WAWebProtobufsUserPassword.UserPassword.Encoding + (*UserPassword)(nil), // 2: WAWebProtobufsUserPassword.UserPassword + (*UserPassword_TransformerArg)(nil), // 3: WAWebProtobufsUserPassword.UserPassword.TransformerArg + (*UserPassword_TransformerArg_Value)(nil), // 4: WAWebProtobufsUserPassword.UserPassword.TransformerArg.Value +} +var file_waUserPassword_WAWebProtobufsUserPassword_proto_depIdxs = []int32{ + 1, // 0: WAWebProtobufsUserPassword.UserPassword.encoding:type_name -> WAWebProtobufsUserPassword.UserPassword.Encoding + 0, // 1: WAWebProtobufsUserPassword.UserPassword.transformer:type_name -> WAWebProtobufsUserPassword.UserPassword.Transformer + 3, // 2: WAWebProtobufsUserPassword.UserPassword.transformerArg:type_name -> WAWebProtobufsUserPassword.UserPassword.TransformerArg + 4, // 3: WAWebProtobufsUserPassword.UserPassword.TransformerArg.value:type_name -> WAWebProtobufsUserPassword.UserPassword.TransformerArg.Value 4, // [4:4] is the sub-list for method output_type 4, // [4:4] is the sub-list for method input_type 4, // [4:4] is the sub-list for extension type_name @@ -384,50 +398,12 @@ var file_waUserPassword_WAProtobufsUserPassword_proto_depIdxs = []int32{ 0, // [0:4] is the sub-list for field type_name } -func init() { file_waUserPassword_WAProtobufsUserPassword_proto_init() } -func file_waUserPassword_WAProtobufsUserPassword_proto_init() { - if File_waUserPassword_WAProtobufsUserPassword_proto != nil { +func init() { file_waUserPassword_WAWebProtobufsUserPassword_proto_init() } +func file_waUserPassword_WAWebProtobufsUserPassword_proto_init() { + if File_waUserPassword_WAWebProtobufsUserPassword_proto != nil { return } - if !protoimpl.UnsafeEnabled { - file_waUserPassword_WAProtobufsUserPassword_proto_msgTypes[0].Exporter = func(v any, i int) any { - switch v := v.(*UserPassword); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waUserPassword_WAProtobufsUserPassword_proto_msgTypes[1].Exporter = func(v any, i int) any { - switch v := v.(*UserPassword_TransformerArg); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waUserPassword_WAProtobufsUserPassword_proto_msgTypes[2].Exporter = func(v any, i int) any { - switch v := v.(*UserPassword_TransformerArg_Value); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } - file_waUserPassword_WAProtobufsUserPassword_proto_msgTypes[2].OneofWrappers = []any{ + file_waUserPassword_WAWebProtobufsUserPassword_proto_msgTypes[2].OneofWrappers = []any{ (*UserPassword_TransformerArg_Value_AsBlob)(nil), (*UserPassword_TransformerArg_Value_AsUnsignedInteger)(nil), } @@ -435,19 +411,18 @@ func file_waUserPassword_WAProtobufsUserPassword_proto_init() { out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_waUserPassword_WAProtobufsUserPassword_proto_rawDesc, + RawDescriptor: unsafe.Slice(unsafe.StringData(file_waUserPassword_WAWebProtobufsUserPassword_proto_rawDesc), len(file_waUserPassword_WAWebProtobufsUserPassword_proto_rawDesc)), NumEnums: 2, NumMessages: 3, NumExtensions: 0, NumServices: 0, }, - GoTypes: file_waUserPassword_WAProtobufsUserPassword_proto_goTypes, - DependencyIndexes: file_waUserPassword_WAProtobufsUserPassword_proto_depIdxs, - EnumInfos: file_waUserPassword_WAProtobufsUserPassword_proto_enumTypes, - MessageInfos: file_waUserPassword_WAProtobufsUserPassword_proto_msgTypes, + GoTypes: file_waUserPassword_WAWebProtobufsUserPassword_proto_goTypes, + DependencyIndexes: file_waUserPassword_WAWebProtobufsUserPassword_proto_depIdxs, + EnumInfos: file_waUserPassword_WAWebProtobufsUserPassword_proto_enumTypes, + MessageInfos: file_waUserPassword_WAWebProtobufsUserPassword_proto_msgTypes, }.Build() - File_waUserPassword_WAProtobufsUserPassword_proto = out.File - file_waUserPassword_WAProtobufsUserPassword_proto_rawDesc = nil - file_waUserPassword_WAProtobufsUserPassword_proto_goTypes = nil - file_waUserPassword_WAProtobufsUserPassword_proto_depIdxs = nil + File_waUserPassword_WAWebProtobufsUserPassword_proto = out.File + file_waUserPassword_WAWebProtobufsUserPassword_proto_goTypes = nil + file_waUserPassword_WAWebProtobufsUserPassword_proto_depIdxs = nil } diff --git a/vendor/go.mau.fi/whatsmeow/proto/waUserPassword/WAProtobufsUserPassword.proto b/vendor/go.mau.fi/whatsmeow/proto/waUserPassword/WAWebProtobufsUserPassword.proto similarity index 94% rename from vendor/go.mau.fi/whatsmeow/proto/waUserPassword/WAProtobufsUserPassword.proto rename to vendor/go.mau.fi/whatsmeow/proto/waUserPassword/WAWebProtobufsUserPassword.proto index db1c4f194b..e445370b2a 100644 --- a/vendor/go.mau.fi/whatsmeow/proto/waUserPassword/WAProtobufsUserPassword.proto +++ b/vendor/go.mau.fi/whatsmeow/proto/waUserPassword/WAWebProtobufsUserPassword.proto @@ -1,5 +1,5 @@ syntax = "proto2"; -package WAProtobufsUserPassword; +package WAWebProtobufsUserPassword; option go_package = "go.mau.fi/whatsmeow/proto/waUserPassword"; message UserPassword { diff --git a/vendor/go.mau.fi/whatsmeow/proto/waVnameCert/WAWebProtobufsVnameCert.pb.go b/vendor/go.mau.fi/whatsmeow/proto/waVnameCert/WAWebProtobufsVnameCert.pb.go index f642154d3d..51f3ca8050 100644 --- a/vendor/go.mau.fi/whatsmeow/proto/waVnameCert/WAWebProtobufsVnameCert.pb.go +++ b/vendor/go.mau.fi/whatsmeow/proto/waVnameCert/WAWebProtobufsVnameCert.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 +// protoc-gen-go v1.36.10 // protoc v3.21.12 // source: waVnameCert/WAWebProtobufsVnameCert.proto @@ -9,11 +9,10 @@ package waVnameCert import ( reflect "reflect" sync "sync" + unsafe "unsafe" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" - - _ "embed" ) const ( @@ -304,24 +303,21 @@ func (BizIdentityInfo_VerifiedLevelValue) EnumDescriptor() ([]byte, []int) { } type BizAccountLinkInfo struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` WhatsappBizAcctFbid *uint64 `protobuf:"varint,1,opt,name=whatsappBizAcctFbid" json:"whatsappBizAcctFbid,omitempty"` WhatsappAcctNumber *string `protobuf:"bytes,2,opt,name=whatsappAcctNumber" json:"whatsappAcctNumber,omitempty"` IssueTime *uint64 `protobuf:"varint,3,opt,name=issueTime" json:"issueTime,omitempty"` HostStorage *BizAccountLinkInfo_HostStorageType `protobuf:"varint,4,opt,name=hostStorage,enum=WAWebProtobufsVnameCert.BizAccountLinkInfo_HostStorageType" json:"hostStorage,omitempty"` AccountType *BizAccountLinkInfo_AccountType `protobuf:"varint,5,opt,name=accountType,enum=WAWebProtobufsVnameCert.BizAccountLinkInfo_AccountType" json:"accountType,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *BizAccountLinkInfo) Reset() { *x = BizAccountLinkInfo{} - if protoimpl.UnsafeEnabled { - mi := &file_waVnameCert_WAWebProtobufsVnameCert_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waVnameCert_WAWebProtobufsVnameCert_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *BizAccountLinkInfo) String() string { @@ -332,7 +328,7 @@ func (*BizAccountLinkInfo) ProtoMessage() {} func (x *BizAccountLinkInfo) ProtoReflect() protoreflect.Message { mi := &file_waVnameCert_WAWebProtobufsVnameCert_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -383,10 +379,7 @@ func (x *BizAccountLinkInfo) GetAccountType() BizAccountLinkInfo_AccountType { } type BizIdentityInfo struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` Vlevel *BizIdentityInfo_VerifiedLevelValue `protobuf:"varint,1,opt,name=vlevel,enum=WAWebProtobufsVnameCert.BizIdentityInfo_VerifiedLevelValue" json:"vlevel,omitempty"` VnameCert *VerifiedNameCertificate `protobuf:"bytes,2,opt,name=vnameCert" json:"vnameCert,omitempty"` Signed *bool `protobuf:"varint,3,opt,name=signed" json:"signed,omitempty"` @@ -395,15 +388,15 @@ type BizIdentityInfo struct { ActualActors *BizIdentityInfo_ActualActorsType `protobuf:"varint,6,opt,name=actualActors,enum=WAWebProtobufsVnameCert.BizIdentityInfo_ActualActorsType" json:"actualActors,omitempty"` PrivacyModeTS *uint64 `protobuf:"varint,7,opt,name=privacyModeTS" json:"privacyModeTS,omitempty"` FeatureControls *uint64 `protobuf:"varint,8,opt,name=featureControls" json:"featureControls,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *BizIdentityInfo) Reset() { *x = BizIdentityInfo{} - if protoimpl.UnsafeEnabled { - mi := &file_waVnameCert_WAWebProtobufsVnameCert_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waVnameCert_WAWebProtobufsVnameCert_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *BizIdentityInfo) String() string { @@ -414,7 +407,7 @@ func (*BizIdentityInfo) ProtoMessage() {} func (x *BizIdentityInfo) ProtoReflect() protoreflect.Message { mi := &file_waVnameCert_WAWebProtobufsVnameCert_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -486,22 +479,19 @@ func (x *BizIdentityInfo) GetFeatureControls() uint64 { } type LocalizedName struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Lg *string `protobuf:"bytes,1,opt,name=lg" json:"lg,omitempty"` + Lc *string `protobuf:"bytes,2,opt,name=lc" json:"lc,omitempty"` + VerifiedName *string `protobuf:"bytes,3,opt,name=verifiedName" json:"verifiedName,omitempty"` unknownFields protoimpl.UnknownFields - - Lg *string `protobuf:"bytes,1,opt,name=lg" json:"lg,omitempty"` - Lc *string `protobuf:"bytes,2,opt,name=lc" json:"lc,omitempty"` - VerifiedName *string `protobuf:"bytes,3,opt,name=verifiedName" json:"verifiedName,omitempty"` + sizeCache protoimpl.SizeCache } func (x *LocalizedName) Reset() { *x = LocalizedName{} - if protoimpl.UnsafeEnabled { - mi := &file_waVnameCert_WAWebProtobufsVnameCert_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waVnameCert_WAWebProtobufsVnameCert_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *LocalizedName) String() string { @@ -512,7 +502,7 @@ func (*LocalizedName) ProtoMessage() {} func (x *LocalizedName) ProtoReflect() protoreflect.Message { mi := &file_waVnameCert_WAWebProtobufsVnameCert_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -549,22 +539,19 @@ func (x *LocalizedName) GetVerifiedName() string { } type VerifiedNameCertificate struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Details []byte `protobuf:"bytes,1,opt,name=details" json:"details,omitempty"` - Signature []byte `protobuf:"bytes,2,opt,name=signature" json:"signature,omitempty"` - ServerSignature []byte `protobuf:"bytes,3,opt,name=serverSignature" json:"serverSignature,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Details []byte `protobuf:"bytes,1,opt,name=details" json:"details,omitempty"` + Signature []byte `protobuf:"bytes,2,opt,name=signature" json:"signature,omitempty"` + ServerSignature []byte `protobuf:"bytes,3,opt,name=serverSignature" json:"serverSignature,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *VerifiedNameCertificate) Reset() { *x = VerifiedNameCertificate{} - if protoimpl.UnsafeEnabled { - mi := &file_waVnameCert_WAWebProtobufsVnameCert_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waVnameCert_WAWebProtobufsVnameCert_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *VerifiedNameCertificate) String() string { @@ -575,7 +562,7 @@ func (*VerifiedNameCertificate) ProtoMessage() {} func (x *VerifiedNameCertificate) ProtoReflect() protoreflect.Message { mi := &file_waVnameCert_WAWebProtobufsVnameCert_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -612,21 +599,18 @@ func (x *VerifiedNameCertificate) GetServerSignature() []byte { } type BizAccountPayload struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` VnameCert *VerifiedNameCertificate `protobuf:"bytes,1,opt,name=vnameCert" json:"vnameCert,omitempty"` BizAcctLinkInfo []byte `protobuf:"bytes,2,opt,name=bizAcctLinkInfo" json:"bizAcctLinkInfo,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *BizAccountPayload) Reset() { *x = BizAccountPayload{} - if protoimpl.UnsafeEnabled { - mi := &file_waVnameCert_WAWebProtobufsVnameCert_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waVnameCert_WAWebProtobufsVnameCert_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *BizAccountPayload) String() string { @@ -637,7 +621,7 @@ func (*BizAccountPayload) ProtoMessage() {} func (x *BizAccountPayload) ProtoReflect() protoreflect.Message { mi := &file_waVnameCert_WAWebProtobufsVnameCert_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -667,24 +651,21 @@ func (x *BizAccountPayload) GetBizAcctLinkInfo() []byte { } type VerifiedNameCertificate_Details struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Serial *uint64 `protobuf:"varint,1,opt,name=serial" json:"serial,omitempty"` - Issuer *string `protobuf:"bytes,2,opt,name=issuer" json:"issuer,omitempty"` - VerifiedName *string `protobuf:"bytes,4,opt,name=verifiedName" json:"verifiedName,omitempty"` - LocalizedNames []*LocalizedName `protobuf:"bytes,8,rep,name=localizedNames" json:"localizedNames,omitempty"` - IssueTime *uint64 `protobuf:"varint,10,opt,name=issueTime" json:"issueTime,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Serial *uint64 `protobuf:"varint,1,opt,name=serial" json:"serial,omitempty"` + Issuer *string `protobuf:"bytes,2,opt,name=issuer" json:"issuer,omitempty"` + VerifiedName *string `protobuf:"bytes,4,opt,name=verifiedName" json:"verifiedName,omitempty"` + LocalizedNames []*LocalizedName `protobuf:"bytes,8,rep,name=localizedNames" json:"localizedNames,omitempty"` + IssueTime *uint64 `protobuf:"varint,10,opt,name=issueTime" json:"issueTime,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *VerifiedNameCertificate_Details) Reset() { *x = VerifiedNameCertificate_Details{} - if protoimpl.UnsafeEnabled { - mi := &file_waVnameCert_WAWebProtobufsVnameCert_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waVnameCert_WAWebProtobufsVnameCert_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *VerifiedNameCertificate_Details) String() string { @@ -695,7 +676,7 @@ func (*VerifiedNameCertificate_Details) ProtoMessage() {} func (x *VerifiedNameCertificate_Details) ProtoReflect() protoreflect.Message { mi := &file_waVnameCert_WAWebProtobufsVnameCert_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -747,17 +728,69 @@ func (x *VerifiedNameCertificate_Details) GetIssueTime() uint64 { var File_waVnameCert_WAWebProtobufsVnameCert_proto protoreflect.FileDescriptor -//go:embed WAWebProtobufsVnameCert.pb.raw -var file_waVnameCert_WAWebProtobufsVnameCert_proto_rawDesc []byte +const file_waVnameCert_WAWebProtobufsVnameCert_proto_rawDesc = "" + + "\n" + + ")waVnameCert/WAWebProtobufsVnameCert.proto\x12\x17WAWebProtobufsVnameCert\"\x9e\x03\n" + + "\x12BizAccountLinkInfo\x120\n" + + "\x13whatsappBizAcctFbid\x18\x01 \x01(\x04R\x13whatsappBizAcctFbid\x12.\n" + + "\x12whatsappAcctNumber\x18\x02 \x01(\tR\x12whatsappAcctNumber\x12\x1c\n" + + "\tissueTime\x18\x03 \x01(\x04R\tissueTime\x12]\n" + + "\vhostStorage\x18\x04 \x01(\x0e2;.WAWebProtobufsVnameCert.BizAccountLinkInfo.HostStorageTypeR\vhostStorage\x12Y\n" + + "\vaccountType\x18\x05 \x01(\x0e27.WAWebProtobufsVnameCert.BizAccountLinkInfo.AccountTypeR\vaccountType\"\x1d\n" + + "\vAccountType\x12\x0e\n" + + "\n" + + "ENTERPRISE\x10\x00\"/\n" + + "\x0fHostStorageType\x12\x0e\n" + + "\n" + + "ON_PREMISE\x10\x00\x12\f\n" + + "\bFACEBOOK\x10\x01\"\x81\x05\n" + + "\x0fBizIdentityInfo\x12S\n" + + "\x06vlevel\x18\x01 \x01(\x0e2;.WAWebProtobufsVnameCert.BizIdentityInfo.VerifiedLevelValueR\x06vlevel\x12N\n" + + "\tvnameCert\x18\x02 \x01(\v20.WAWebProtobufsVnameCert.VerifiedNameCertificateR\tvnameCert\x12\x16\n" + + "\x06signed\x18\x03 \x01(\bR\x06signed\x12\x18\n" + + "\arevoked\x18\x04 \x01(\bR\arevoked\x12Z\n" + + "\vhostStorage\x18\x05 \x01(\x0e28.WAWebProtobufsVnameCert.BizIdentityInfo.HostStorageTypeR\vhostStorage\x12]\n" + + "\factualActors\x18\x06 \x01(\x0e29.WAWebProtobufsVnameCert.BizIdentityInfo.ActualActorsTypeR\factualActors\x12$\n" + + "\rprivacyModeTS\x18\a \x01(\x04R\rprivacyModeTS\x12(\n" + + "\x0ffeatureControls\x18\b \x01(\x04R\x0ffeatureControls\"%\n" + + "\x10ActualActorsType\x12\b\n" + + "\x04SELF\x10\x00\x12\a\n" + + "\x03BSP\x10\x01\"/\n" + + "\x0fHostStorageType\x12\x0e\n" + + "\n" + + "ON_PREMISE\x10\x00\x12\f\n" + + "\bFACEBOOK\x10\x01\"4\n" + + "\x12VerifiedLevelValue\x12\v\n" + + "\aUNKNOWN\x10\x00\x12\a\n" + + "\x03LOW\x10\x01\x12\b\n" + + "\x04HIGH\x10\x02\"S\n" + + "\rLocalizedName\x12\x0e\n" + + "\x02lg\x18\x01 \x01(\tR\x02lg\x12\x0e\n" + + "\x02lc\x18\x02 \x01(\tR\x02lc\x12\"\n" + + "\fverifiedName\x18\x03 \x01(\tR\fverifiedName\"\xc9\x02\n" + + "\x17VerifiedNameCertificate\x12\x18\n" + + "\adetails\x18\x01 \x01(\fR\adetails\x12\x1c\n" + + "\tsignature\x18\x02 \x01(\fR\tsignature\x12(\n" + + "\x0fserverSignature\x18\x03 \x01(\fR\x0fserverSignature\x1a\xcb\x01\n" + + "\aDetails\x12\x16\n" + + "\x06serial\x18\x01 \x01(\x04R\x06serial\x12\x16\n" + + "\x06issuer\x18\x02 \x01(\tR\x06issuer\x12\"\n" + + "\fverifiedName\x18\x04 \x01(\tR\fverifiedName\x12N\n" + + "\x0elocalizedNames\x18\b \x03(\v2&.WAWebProtobufsVnameCert.LocalizedNameR\x0elocalizedNames\x12\x1c\n" + + "\tissueTime\x18\n" + + " \x01(\x04R\tissueTime\"\x8d\x01\n" + + "\x11BizAccountPayload\x12N\n" + + "\tvnameCert\x18\x01 \x01(\v20.WAWebProtobufsVnameCert.VerifiedNameCertificateR\tvnameCert\x12(\n" + + "\x0fbizAcctLinkInfo\x18\x02 \x01(\fR\x0fbizAcctLinkInfoB'Z%go.mau.fi/whatsmeow/proto/waVnameCert" var ( file_waVnameCert_WAWebProtobufsVnameCert_proto_rawDescOnce sync.Once - file_waVnameCert_WAWebProtobufsVnameCert_proto_rawDescData = file_waVnameCert_WAWebProtobufsVnameCert_proto_rawDesc + file_waVnameCert_WAWebProtobufsVnameCert_proto_rawDescData []byte ) func file_waVnameCert_WAWebProtobufsVnameCert_proto_rawDescGZIP() []byte { file_waVnameCert_WAWebProtobufsVnameCert_proto_rawDescOnce.Do(func() { - file_waVnameCert_WAWebProtobufsVnameCert_proto_rawDescData = protoimpl.X.CompressGZIP(file_waVnameCert_WAWebProtobufsVnameCert_proto_rawDescData) + file_waVnameCert_WAWebProtobufsVnameCert_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_waVnameCert_WAWebProtobufsVnameCert_proto_rawDesc), len(file_waVnameCert_WAWebProtobufsVnameCert_proto_rawDesc))) }) return file_waVnameCert_WAWebProtobufsVnameCert_proto_rawDescData } @@ -798,85 +831,11 @@ func file_waVnameCert_WAWebProtobufsVnameCert_proto_init() { if File_waVnameCert_WAWebProtobufsVnameCert_proto != nil { return } - if !protoimpl.UnsafeEnabled { - file_waVnameCert_WAWebProtobufsVnameCert_proto_msgTypes[0].Exporter = func(v any, i int) any { - switch v := v.(*BizAccountLinkInfo); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waVnameCert_WAWebProtobufsVnameCert_proto_msgTypes[1].Exporter = func(v any, i int) any { - switch v := v.(*BizIdentityInfo); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waVnameCert_WAWebProtobufsVnameCert_proto_msgTypes[2].Exporter = func(v any, i int) any { - switch v := v.(*LocalizedName); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waVnameCert_WAWebProtobufsVnameCert_proto_msgTypes[3].Exporter = func(v any, i int) any { - switch v := v.(*VerifiedNameCertificate); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waVnameCert_WAWebProtobufsVnameCert_proto_msgTypes[4].Exporter = func(v any, i int) any { - switch v := v.(*BizAccountPayload); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waVnameCert_WAWebProtobufsVnameCert_proto_msgTypes[5].Exporter = func(v any, i int) any { - switch v := v.(*VerifiedNameCertificate_Details); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_waVnameCert_WAWebProtobufsVnameCert_proto_rawDesc, + RawDescriptor: unsafe.Slice(unsafe.StringData(file_waVnameCert_WAWebProtobufsVnameCert_proto_rawDesc), len(file_waVnameCert_WAWebProtobufsVnameCert_proto_rawDesc)), NumEnums: 5, NumMessages: 6, NumExtensions: 0, @@ -888,7 +847,6 @@ func file_waVnameCert_WAWebProtobufsVnameCert_proto_init() { MessageInfos: file_waVnameCert_WAWebProtobufsVnameCert_proto_msgTypes, }.Build() File_waVnameCert_WAWebProtobufsVnameCert_proto = out.File - file_waVnameCert_WAWebProtobufsVnameCert_proto_rawDesc = nil file_waVnameCert_WAWebProtobufsVnameCert_proto_goTypes = nil file_waVnameCert_WAWebProtobufsVnameCert_proto_depIdxs = nil } diff --git a/vendor/go.mau.fi/whatsmeow/proto/waVnameCert/WAWebProtobufsVnameCert.pb.raw b/vendor/go.mau.fi/whatsmeow/proto/waVnameCert/WAWebProtobufsVnameCert.pb.raw deleted file mode 100644 index 0b6c10c194..0000000000 Binary files a/vendor/go.mau.fi/whatsmeow/proto/waVnameCert/WAWebProtobufsVnameCert.pb.raw and /dev/null differ diff --git a/vendor/go.mau.fi/whatsmeow/proto/waWa6/WAWebProtobufsWa6.pb.go b/vendor/go.mau.fi/whatsmeow/proto/waWa6/WAWebProtobufsWa6.pb.go index 4020ec6ad2..579dd28c7e 100644 --- a/vendor/go.mau.fi/whatsmeow/proto/waWa6/WAWebProtobufsWa6.pb.go +++ b/vendor/go.mau.fi/whatsmeow/proto/waWa6/WAWebProtobufsWa6.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 +// protoc-gen-go v1.36.10 // protoc v3.21.12 // source: waWa6/WAWebProtobufsWa6.proto @@ -9,11 +9,10 @@ package waWa6 import ( reflect "reflect" sync "sync" + unsafe "unsafe" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" - - _ "embed" ) const ( @@ -23,6 +22,118 @@ const ( _ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20) ) +type ClientPayload_TrafficAnonymization int32 + +const ( + ClientPayload_OFF ClientPayload_TrafficAnonymization = 0 + ClientPayload_STANDARD ClientPayload_TrafficAnonymization = 1 +) + +// Enum value maps for ClientPayload_TrafficAnonymization. +var ( + ClientPayload_TrafficAnonymization_name = map[int32]string{ + 0: "OFF", + 1: "STANDARD", + } + ClientPayload_TrafficAnonymization_value = map[string]int32{ + "OFF": 0, + "STANDARD": 1, + } +) + +func (x ClientPayload_TrafficAnonymization) Enum() *ClientPayload_TrafficAnonymization { + p := new(ClientPayload_TrafficAnonymization) + *p = x + return p +} + +func (x ClientPayload_TrafficAnonymization) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (ClientPayload_TrafficAnonymization) Descriptor() protoreflect.EnumDescriptor { + return file_waWa6_WAWebProtobufsWa6_proto_enumTypes[0].Descriptor() +} + +func (ClientPayload_TrafficAnonymization) Type() protoreflect.EnumType { + return &file_waWa6_WAWebProtobufsWa6_proto_enumTypes[0] +} + +func (x ClientPayload_TrafficAnonymization) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *ClientPayload_TrafficAnonymization) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = ClientPayload_TrafficAnonymization(num) + return nil +} + +// Deprecated: Use ClientPayload_TrafficAnonymization.Descriptor instead. +func (ClientPayload_TrafficAnonymization) EnumDescriptor() ([]byte, []int) { + return file_waWa6_WAWebProtobufsWa6_proto_rawDescGZIP(), []int{0, 0} +} + +type ClientPayload_AccountType int32 + +const ( + ClientPayload_DEFAULT ClientPayload_AccountType = 0 + ClientPayload_GUEST ClientPayload_AccountType = 1 +) + +// Enum value maps for ClientPayload_AccountType. +var ( + ClientPayload_AccountType_name = map[int32]string{ + 0: "DEFAULT", + 1: "GUEST", + } + ClientPayload_AccountType_value = map[string]int32{ + "DEFAULT": 0, + "GUEST": 1, + } +) + +func (x ClientPayload_AccountType) Enum() *ClientPayload_AccountType { + p := new(ClientPayload_AccountType) + *p = x + return p +} + +func (x ClientPayload_AccountType) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (ClientPayload_AccountType) Descriptor() protoreflect.EnumDescriptor { + return file_waWa6_WAWebProtobufsWa6_proto_enumTypes[1].Descriptor() +} + +func (ClientPayload_AccountType) Type() protoreflect.EnumType { + return &file_waWa6_WAWebProtobufsWa6_proto_enumTypes[1] +} + +func (x ClientPayload_AccountType) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *ClientPayload_AccountType) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = ClientPayload_AccountType(num) + return nil +} + +// Deprecated: Use ClientPayload_AccountType.Descriptor instead. +func (ClientPayload_AccountType) EnumDescriptor() ([]byte, []int) { + return file_waWa6_WAWebProtobufsWa6_proto_rawDescGZIP(), []int{0, 1} +} + type ClientPayload_Product int32 const ( @@ -30,6 +141,7 @@ const ( ClientPayload_MESSENGER ClientPayload_Product = 1 ClientPayload_INTEROP ClientPayload_Product = 2 ClientPayload_INTEROP_MSGR ClientPayload_Product = 3 + ClientPayload_WHATSAPP_LID ClientPayload_Product = 4 ) // Enum value maps for ClientPayload_Product. @@ -39,12 +151,14 @@ var ( 1: "MESSENGER", 2: "INTEROP", 3: "INTEROP_MSGR", + 4: "WHATSAPP_LID", } ClientPayload_Product_value = map[string]int32{ "WHATSAPP": 0, "MESSENGER": 1, "INTEROP": 2, "INTEROP_MSGR": 3, + "WHATSAPP_LID": 4, } ) @@ -59,11 +173,11 @@ func (x ClientPayload_Product) String() string { } func (ClientPayload_Product) Descriptor() protoreflect.EnumDescriptor { - return file_waWa6_WAWebProtobufsWa6_proto_enumTypes[0].Descriptor() + return file_waWa6_WAWebProtobufsWa6_proto_enumTypes[2].Descriptor() } func (ClientPayload_Product) Type() protoreflect.EnumType { - return &file_waWa6_WAWebProtobufsWa6_proto_enumTypes[0] + return &file_waWa6_WAWebProtobufsWa6_proto_enumTypes[2] } func (x ClientPayload_Product) Number() protoreflect.EnumNumber { @@ -82,7 +196,7 @@ func (x *ClientPayload_Product) UnmarshalJSON(b []byte) error { // Deprecated: Use ClientPayload_Product.Descriptor instead. func (ClientPayload_Product) EnumDescriptor() ([]byte, []int) { - return file_waWa6_WAWebProtobufsWa6_proto_rawDescGZIP(), []int{0, 0} + return file_waWa6_WAWebProtobufsWa6_proto_rawDescGZIP(), []int{0, 2} } type ClientPayload_ConnectType int32 @@ -154,11 +268,11 @@ func (x ClientPayload_ConnectType) String() string { } func (ClientPayload_ConnectType) Descriptor() protoreflect.EnumDescriptor { - return file_waWa6_WAWebProtobufsWa6_proto_enumTypes[1].Descriptor() + return file_waWa6_WAWebProtobufsWa6_proto_enumTypes[3].Descriptor() } func (ClientPayload_ConnectType) Type() protoreflect.EnumType { - return &file_waWa6_WAWebProtobufsWa6_proto_enumTypes[1] + return &file_waWa6_WAWebProtobufsWa6_proto_enumTypes[3] } func (x ClientPayload_ConnectType) Number() protoreflect.EnumNumber { @@ -177,7 +291,7 @@ func (x *ClientPayload_ConnectType) UnmarshalJSON(b []byte) error { // Deprecated: Use ClientPayload_ConnectType.Descriptor instead. func (ClientPayload_ConnectType) EnumDescriptor() ([]byte, []int) { - return file_waWa6_WAWebProtobufsWa6_proto_rawDescGZIP(), []int{0, 1} + return file_waWa6_WAWebProtobufsWa6_proto_rawDescGZIP(), []int{0, 3} } type ClientPayload_ConnectReason int32 @@ -225,11 +339,11 @@ func (x ClientPayload_ConnectReason) String() string { } func (ClientPayload_ConnectReason) Descriptor() protoreflect.EnumDescriptor { - return file_waWa6_WAWebProtobufsWa6_proto_enumTypes[2].Descriptor() + return file_waWa6_WAWebProtobufsWa6_proto_enumTypes[4].Descriptor() } func (ClientPayload_ConnectReason) Type() protoreflect.EnumType { - return &file_waWa6_WAWebProtobufsWa6_proto_enumTypes[2] + return &file_waWa6_WAWebProtobufsWa6_proto_enumTypes[4] } func (x ClientPayload_ConnectReason) Number() protoreflect.EnumNumber { @@ -248,7 +362,7 @@ func (x *ClientPayload_ConnectReason) UnmarshalJSON(b []byte) error { // Deprecated: Use ClientPayload_ConnectReason.Descriptor instead. func (ClientPayload_ConnectReason) EnumDescriptor() ([]byte, []int) { - return file_waWa6_WAWebProtobufsWa6_proto_rawDescGZIP(), []int{0, 2} + return file_waWa6_WAWebProtobufsWa6_proto_rawDescGZIP(), []int{0, 4} } type ClientPayload_IOSAppExtension int32 @@ -284,11 +398,11 @@ func (x ClientPayload_IOSAppExtension) String() string { } func (ClientPayload_IOSAppExtension) Descriptor() protoreflect.EnumDescriptor { - return file_waWa6_WAWebProtobufsWa6_proto_enumTypes[3].Descriptor() + return file_waWa6_WAWebProtobufsWa6_proto_enumTypes[5].Descriptor() } func (ClientPayload_IOSAppExtension) Type() protoreflect.EnumType { - return &file_waWa6_WAWebProtobufsWa6_proto_enumTypes[3] + return &file_waWa6_WAWebProtobufsWa6_proto_enumTypes[5] } func (x ClientPayload_IOSAppExtension) Number() protoreflect.EnumNumber { @@ -307,17 +421,20 @@ func (x *ClientPayload_IOSAppExtension) UnmarshalJSON(b []byte) error { // Deprecated: Use ClientPayload_IOSAppExtension.Descriptor instead. func (ClientPayload_IOSAppExtension) EnumDescriptor() ([]byte, []int) { - return file_waWa6_WAWebProtobufsWa6_proto_rawDescGZIP(), []int{0, 3} + return file_waWa6_WAWebProtobufsWa6_proto_rawDescGZIP(), []int{0, 5} } type ClientPayload_DNSSource_DNSResolutionMethod int32 const ( - ClientPayload_DNSSource_SYSTEM ClientPayload_DNSSource_DNSResolutionMethod = 0 - ClientPayload_DNSSource_GOOGLE ClientPayload_DNSSource_DNSResolutionMethod = 1 - ClientPayload_DNSSource_HARDCODED ClientPayload_DNSSource_DNSResolutionMethod = 2 - ClientPayload_DNSSource_OVERRIDE ClientPayload_DNSSource_DNSResolutionMethod = 3 - ClientPayload_DNSSource_FALLBACK ClientPayload_DNSSource_DNSResolutionMethod = 4 + ClientPayload_DNSSource_SYSTEM ClientPayload_DNSSource_DNSResolutionMethod = 0 + ClientPayload_DNSSource_GOOGLE ClientPayload_DNSSource_DNSResolutionMethod = 1 + ClientPayload_DNSSource_HARDCODED ClientPayload_DNSSource_DNSResolutionMethod = 2 + ClientPayload_DNSSource_OVERRIDE ClientPayload_DNSSource_DNSResolutionMethod = 3 + ClientPayload_DNSSource_FALLBACK ClientPayload_DNSSource_DNSResolutionMethod = 4 + ClientPayload_DNSSource_MNS ClientPayload_DNSSource_DNSResolutionMethod = 5 + ClientPayload_DNSSource_MNS_SECONDARY ClientPayload_DNSSource_DNSResolutionMethod = 6 + ClientPayload_DNSSource_SOCKS_PROXY ClientPayload_DNSSource_DNSResolutionMethod = 7 ) // Enum value maps for ClientPayload_DNSSource_DNSResolutionMethod. @@ -328,13 +445,19 @@ var ( 2: "HARDCODED", 3: "OVERRIDE", 4: "FALLBACK", + 5: "MNS", + 6: "MNS_SECONDARY", + 7: "SOCKS_PROXY", } ClientPayload_DNSSource_DNSResolutionMethod_value = map[string]int32{ - "SYSTEM": 0, - "GOOGLE": 1, - "HARDCODED": 2, - "OVERRIDE": 3, - "FALLBACK": 4, + "SYSTEM": 0, + "GOOGLE": 1, + "HARDCODED": 2, + "OVERRIDE": 3, + "FALLBACK": 4, + "MNS": 5, + "MNS_SECONDARY": 6, + "SOCKS_PROXY": 7, } ) @@ -349,11 +472,11 @@ func (x ClientPayload_DNSSource_DNSResolutionMethod) String() string { } func (ClientPayload_DNSSource_DNSResolutionMethod) Descriptor() protoreflect.EnumDescriptor { - return file_waWa6_WAWebProtobufsWa6_proto_enumTypes[4].Descriptor() + return file_waWa6_WAWebProtobufsWa6_proto_enumTypes[6].Descriptor() } func (ClientPayload_DNSSource_DNSResolutionMethod) Type() protoreflect.EnumType { - return &file_waWa6_WAWebProtobufsWa6_proto_enumTypes[4] + return &file_waWa6_WAWebProtobufsWa6_proto_enumTypes[6] } func (x ClientPayload_DNSSource_DNSResolutionMethod) Number() protoreflect.EnumNumber { @@ -383,6 +506,7 @@ const ( ClientPayload_WebInfo_WIN_STORE ClientPayload_WebInfo_WebSubPlatform = 2 ClientPayload_WebInfo_DARWIN ClientPayload_WebInfo_WebSubPlatform = 3 ClientPayload_WebInfo_WIN32 ClientPayload_WebInfo_WebSubPlatform = 4 + ClientPayload_WebInfo_WIN_HYBRID ClientPayload_WebInfo_WebSubPlatform = 5 ) // Enum value maps for ClientPayload_WebInfo_WebSubPlatform. @@ -393,6 +517,7 @@ var ( 2: "WIN_STORE", 3: "DARWIN", 4: "WIN32", + 5: "WIN_HYBRID", } ClientPayload_WebInfo_WebSubPlatform_value = map[string]int32{ "WEB_BROWSER": 0, @@ -400,6 +525,7 @@ var ( "WIN_STORE": 2, "DARWIN": 3, "WIN32": 4, + "WIN_HYBRID": 5, } ) @@ -414,11 +540,11 @@ func (x ClientPayload_WebInfo_WebSubPlatform) String() string { } func (ClientPayload_WebInfo_WebSubPlatform) Descriptor() protoreflect.EnumDescriptor { - return file_waWa6_WAWebProtobufsWa6_proto_enumTypes[5].Descriptor() + return file_waWa6_WAWebProtobufsWa6_proto_enumTypes[7].Descriptor() } func (ClientPayload_WebInfo_WebSubPlatform) Type() protoreflect.EnumType { - return &file_waWa6_WAWebProtobufsWa6_proto_enumTypes[5] + return &file_waWa6_WAWebProtobufsWa6_proto_enumTypes[7] } func (x ClientPayload_WebInfo_WebSubPlatform) Number() protoreflect.EnumNumber { @@ -479,11 +605,11 @@ func (x ClientPayload_UserAgent_DeviceType) String() string { } func (ClientPayload_UserAgent_DeviceType) Descriptor() protoreflect.EnumDescriptor { - return file_waWa6_WAWebProtobufsWa6_proto_enumTypes[6].Descriptor() + return file_waWa6_WAWebProtobufsWa6_proto_enumTypes[8].Descriptor() } func (ClientPayload_UserAgent_DeviceType) Type() protoreflect.EnumType { - return &file_waWa6_WAWebProtobufsWa6_proto_enumTypes[6] + return &file_waWa6_WAWebProtobufsWa6_proto_enumTypes[8] } func (x ClientPayload_UserAgent_DeviceType) Number() protoreflect.EnumNumber { @@ -541,11 +667,11 @@ func (x ClientPayload_UserAgent_ReleaseChannel) String() string { } func (ClientPayload_UserAgent_ReleaseChannel) Descriptor() protoreflect.EnumDescriptor { - return file_waWa6_WAWebProtobufsWa6_proto_enumTypes[7].Descriptor() + return file_waWa6_WAWebProtobufsWa6_proto_enumTypes[9].Descriptor() } func (ClientPayload_UserAgent_ReleaseChannel) Type() protoreflect.EnumType { - return &file_waWa6_WAWebProtobufsWa6_proto_enumTypes[7] + return &file_waWa6_WAWebProtobufsWa6_proto_enumTypes[9] } func (x ClientPayload_UserAgent_ReleaseChannel) Number() protoreflect.EnumNumber { @@ -606,6 +732,8 @@ const ( ClientPayload_UserAgent_IPAD ClientPayload_UserAgent_Platform = 33 ClientPayload_UserAgent_TEST ClientPayload_UserAgent_Platform = 34 ClientPayload_UserAgent_SMART_GLASSES ClientPayload_UserAgent_Platform = 35 + ClientPayload_UserAgent_BLUE_VR ClientPayload_UserAgent_Platform = 36 + ClientPayload_UserAgent_AR_WRIST ClientPayload_UserAgent_Platform = 37 ) // Enum value maps for ClientPayload_UserAgent_Platform. @@ -647,6 +775,8 @@ var ( 33: "IPAD", 34: "TEST", 35: "SMART_GLASSES", + 36: "BLUE_VR", + 37: "AR_WRIST", } ClientPayload_UserAgent_Platform_value = map[string]int32{ "ANDROID": 0, @@ -685,6 +815,8 @@ var ( "IPAD": 33, "TEST": 34, "SMART_GLASSES": 35, + "BLUE_VR": 36, + "AR_WRIST": 37, } ) @@ -699,11 +831,11 @@ func (x ClientPayload_UserAgent_Platform) String() string { } func (ClientPayload_UserAgent_Platform) Descriptor() protoreflect.EnumDescriptor { - return file_waWa6_WAWebProtobufsWa6_proto_enumTypes[8].Descriptor() + return file_waWa6_WAWebProtobufsWa6_proto_enumTypes[10].Descriptor() } func (ClientPayload_UserAgent_Platform) Type() protoreflect.EnumType { - return &file_waWa6_WAWebProtobufsWa6_proto_enumTypes[8] + return &file_waWa6_WAWebProtobufsWa6_proto_enumTypes[10] } func (x ClientPayload_UserAgent_Platform) Number() protoreflect.EnumNumber { @@ -726,47 +858,50 @@ func (ClientPayload_UserAgent_Platform) EnumDescriptor() ([]byte, []int) { } type ClientPayload struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Username *uint64 `protobuf:"varint,1,opt,name=username" json:"username,omitempty"` - Passive *bool `protobuf:"varint,3,opt,name=passive" json:"passive,omitempty"` - UserAgent *ClientPayload_UserAgent `protobuf:"bytes,5,opt,name=userAgent" json:"userAgent,omitempty"` - WebInfo *ClientPayload_WebInfo `protobuf:"bytes,6,opt,name=webInfo" json:"webInfo,omitempty"` - PushName *string `protobuf:"bytes,7,opt,name=pushName" json:"pushName,omitempty"` - SessionID *int32 `protobuf:"fixed32,9,opt,name=sessionID" json:"sessionID,omitempty"` - ShortConnect *bool `protobuf:"varint,10,opt,name=shortConnect" json:"shortConnect,omitempty"` - ConnectType *ClientPayload_ConnectType `protobuf:"varint,12,opt,name=connectType,enum=WAWebProtobufsWa6.ClientPayload_ConnectType" json:"connectType,omitempty"` - ConnectReason *ClientPayload_ConnectReason `protobuf:"varint,13,opt,name=connectReason,enum=WAWebProtobufsWa6.ClientPayload_ConnectReason" json:"connectReason,omitempty"` - Shards []int32 `protobuf:"varint,14,rep,name=shards" json:"shards,omitempty"` - DnsSource *ClientPayload_DNSSource `protobuf:"bytes,15,opt,name=dnsSource" json:"dnsSource,omitempty"` - ConnectAttemptCount *uint32 `protobuf:"varint,16,opt,name=connectAttemptCount" json:"connectAttemptCount,omitempty"` - Device *uint32 `protobuf:"varint,18,opt,name=device" json:"device,omitempty"` - DevicePairingData *ClientPayload_DevicePairingRegistrationData `protobuf:"bytes,19,opt,name=devicePairingData" json:"devicePairingData,omitempty"` - Product *ClientPayload_Product `protobuf:"varint,20,opt,name=product,enum=WAWebProtobufsWa6.ClientPayload_Product" json:"product,omitempty"` - FbCat []byte `protobuf:"bytes,21,opt,name=fbCat" json:"fbCat,omitempty"` - FbUserAgent []byte `protobuf:"bytes,22,opt,name=fbUserAgent" json:"fbUserAgent,omitempty"` - Oc *bool `protobuf:"varint,23,opt,name=oc" json:"oc,omitempty"` - Lc *int32 `protobuf:"varint,24,opt,name=lc" json:"lc,omitempty"` - IosAppExtension *ClientPayload_IOSAppExtension `protobuf:"varint,30,opt,name=iosAppExtension,enum=WAWebProtobufsWa6.ClientPayload_IOSAppExtension" json:"iosAppExtension,omitempty"` - FbAppID *uint64 `protobuf:"varint,31,opt,name=fbAppID" json:"fbAppID,omitempty"` - FbDeviceID []byte `protobuf:"bytes,32,opt,name=fbDeviceID" json:"fbDeviceID,omitempty"` - Pull *bool `protobuf:"varint,33,opt,name=pull" json:"pull,omitempty"` - PaddingBytes []byte `protobuf:"bytes,34,opt,name=paddingBytes" json:"paddingBytes,omitempty"` - YearClass *int32 `protobuf:"varint,36,opt,name=yearClass" json:"yearClass,omitempty"` - MemClass *int32 `protobuf:"varint,37,opt,name=memClass" json:"memClass,omitempty"` - InteropData *ClientPayload_InteropData `protobuf:"bytes,38,opt,name=interopData" json:"interopData,omitempty"` - IsPcr *bool `protobuf:"varint,39,opt,name=isPcr" json:"isPcr,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Username *uint64 `protobuf:"varint,1,opt,name=username" json:"username,omitempty"` + Passive *bool `protobuf:"varint,3,opt,name=passive" json:"passive,omitempty"` + UserAgent *ClientPayload_UserAgent `protobuf:"bytes,5,opt,name=userAgent" json:"userAgent,omitempty"` + WebInfo *ClientPayload_WebInfo `protobuf:"bytes,6,opt,name=webInfo" json:"webInfo,omitempty"` + PushName *string `protobuf:"bytes,7,opt,name=pushName" json:"pushName,omitempty"` + SessionID *int32 `protobuf:"fixed32,9,opt,name=sessionID" json:"sessionID,omitempty"` + ShortConnect *bool `protobuf:"varint,10,opt,name=shortConnect" json:"shortConnect,omitempty"` + ConnectType *ClientPayload_ConnectType `protobuf:"varint,12,opt,name=connectType,enum=WAWebProtobufsWa6.ClientPayload_ConnectType" json:"connectType,omitempty"` + ConnectReason *ClientPayload_ConnectReason `protobuf:"varint,13,opt,name=connectReason,enum=WAWebProtobufsWa6.ClientPayload_ConnectReason" json:"connectReason,omitempty"` + Shards []int32 `protobuf:"varint,14,rep,name=shards" json:"shards,omitempty"` + DnsSource *ClientPayload_DNSSource `protobuf:"bytes,15,opt,name=dnsSource" json:"dnsSource,omitempty"` + ConnectAttemptCount *uint32 `protobuf:"varint,16,opt,name=connectAttemptCount" json:"connectAttemptCount,omitempty"` + Device *uint32 `protobuf:"varint,18,opt,name=device" json:"device,omitempty"` + DevicePairingData *ClientPayload_DevicePairingRegistrationData `protobuf:"bytes,19,opt,name=devicePairingData" json:"devicePairingData,omitempty"` + Product *ClientPayload_Product `protobuf:"varint,20,opt,name=product,enum=WAWebProtobufsWa6.ClientPayload_Product" json:"product,omitempty"` + FbCat []byte `protobuf:"bytes,21,opt,name=fbCat" json:"fbCat,omitempty"` + FbUserAgent []byte `protobuf:"bytes,22,opt,name=fbUserAgent" json:"fbUserAgent,omitempty"` + Oc *bool `protobuf:"varint,23,opt,name=oc" json:"oc,omitempty"` + Lc *int32 `protobuf:"varint,24,opt,name=lc" json:"lc,omitempty"` + IosAppExtension *ClientPayload_IOSAppExtension `protobuf:"varint,30,opt,name=iosAppExtension,enum=WAWebProtobufsWa6.ClientPayload_IOSAppExtension" json:"iosAppExtension,omitempty"` + FbAppID *uint64 `protobuf:"varint,31,opt,name=fbAppID" json:"fbAppID,omitempty"` + FbDeviceID []byte `protobuf:"bytes,32,opt,name=fbDeviceID" json:"fbDeviceID,omitempty"` + Pull *bool `protobuf:"varint,33,opt,name=pull" json:"pull,omitempty"` + PaddingBytes []byte `protobuf:"bytes,34,opt,name=paddingBytes" json:"paddingBytes,omitempty"` + YearClass *int32 `protobuf:"varint,36,opt,name=yearClass" json:"yearClass,omitempty"` + MemClass *int32 `protobuf:"varint,37,opt,name=memClass" json:"memClass,omitempty"` + InteropData *ClientPayload_InteropData `protobuf:"bytes,38,opt,name=interopData" json:"interopData,omitempty"` + TrafficAnonymization *ClientPayload_TrafficAnonymization `protobuf:"varint,40,opt,name=trafficAnonymization,enum=WAWebProtobufsWa6.ClientPayload_TrafficAnonymization" json:"trafficAnonymization,omitempty"` + LidDbMigrated *bool `protobuf:"varint,41,opt,name=lidDbMigrated" json:"lidDbMigrated,omitempty"` + AccountType *ClientPayload_AccountType `protobuf:"varint,42,opt,name=accountType,enum=WAWebProtobufsWa6.ClientPayload_AccountType" json:"accountType,omitempty"` + ConnectionSequenceInfo *int32 `protobuf:"fixed32,43,opt,name=connectionSequenceInfo" json:"connectionSequenceInfo,omitempty"` + PaaLink *bool `protobuf:"varint,44,opt,name=paaLink" json:"paaLink,omitempty"` + PreacksCount *int32 `protobuf:"varint,45,opt,name=preacksCount" json:"preacksCount,omitempty"` + ProcessingQueueSize *int32 `protobuf:"varint,46,opt,name=processingQueueSize" json:"processingQueueSize,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ClientPayload) Reset() { *x = ClientPayload{} - if protoimpl.UnsafeEnabled { - mi := &file_waWa6_WAWebProtobufsWa6_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waWa6_WAWebProtobufsWa6_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ClientPayload) String() string { @@ -777,7 +912,7 @@ func (*ClientPayload) ProtoMessage() {} func (x *ClientPayload) ProtoReflect() protoreflect.Message { mi := &file_waWa6_WAWebProtobufsWa6_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -981,30 +1116,69 @@ func (x *ClientPayload) GetInteropData() *ClientPayload_InteropData { return nil } -func (x *ClientPayload) GetIsPcr() bool { - if x != nil && x.IsPcr != nil { - return *x.IsPcr +func (x *ClientPayload) GetTrafficAnonymization() ClientPayload_TrafficAnonymization { + if x != nil && x.TrafficAnonymization != nil { + return *x.TrafficAnonymization + } + return ClientPayload_OFF +} + +func (x *ClientPayload) GetLidDbMigrated() bool { + if x != nil && x.LidDbMigrated != nil { + return *x.LidDbMigrated + } + return false +} + +func (x *ClientPayload) GetAccountType() ClientPayload_AccountType { + if x != nil && x.AccountType != nil { + return *x.AccountType + } + return ClientPayload_DEFAULT +} + +func (x *ClientPayload) GetConnectionSequenceInfo() int32 { + if x != nil && x.ConnectionSequenceInfo != nil { + return *x.ConnectionSequenceInfo + } + return 0 +} + +func (x *ClientPayload) GetPaaLink() bool { + if x != nil && x.PaaLink != nil { + return *x.PaaLink } return false } +func (x *ClientPayload) GetPreacksCount() int32 { + if x != nil && x.PreacksCount != nil { + return *x.PreacksCount + } + return 0 +} + +func (x *ClientPayload) GetProcessingQueueSize() int32 { + if x != nil && x.ProcessingQueueSize != nil { + return *x.ProcessingQueueSize + } + return 0 +} + type HandshakeMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + ClientHello *HandshakeMessage_ClientHello `protobuf:"bytes,2,opt,name=clientHello" json:"clientHello,omitempty"` + ServerHello *HandshakeMessage_ServerHello `protobuf:"bytes,3,opt,name=serverHello" json:"serverHello,omitempty"` + ClientFinish *HandshakeMessage_ClientFinish `protobuf:"bytes,4,opt,name=clientFinish" json:"clientFinish,omitempty"` unknownFields protoimpl.UnknownFields - - ClientHello *HandshakeMessage_ClientHello `protobuf:"bytes,2,opt,name=clientHello" json:"clientHello,omitempty"` - ServerHello *HandshakeMessage_ServerHello `protobuf:"bytes,3,opt,name=serverHello" json:"serverHello,omitempty"` - ClientFinish *HandshakeMessage_ClientFinish `protobuf:"bytes,4,opt,name=clientFinish" json:"clientFinish,omitempty"` + sizeCache protoimpl.SizeCache } func (x *HandshakeMessage) Reset() { *x = HandshakeMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_waWa6_WAWebProtobufsWa6_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waWa6_WAWebProtobufsWa6_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *HandshakeMessage) String() string { @@ -1015,7 +1189,7 @@ func (*HandshakeMessage) ProtoMessage() {} func (x *HandshakeMessage) ProtoReflect() protoreflect.Message { mi := &file_waWa6_WAWebProtobufsWa6_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1052,21 +1226,18 @@ func (x *HandshakeMessage) GetClientFinish() *HandshakeMessage_ClientFinish { } type ClientPayload_DNSSource struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + DnsMethod *ClientPayload_DNSSource_DNSResolutionMethod `protobuf:"varint,15,opt,name=dnsMethod,enum=WAWebProtobufsWa6.ClientPayload_DNSSource_DNSResolutionMethod" json:"dnsMethod,omitempty"` + AppCached *bool `protobuf:"varint,16,opt,name=appCached" json:"appCached,omitempty"` unknownFields protoimpl.UnknownFields - - DnsMethod *ClientPayload_DNSSource_DNSResolutionMethod `protobuf:"varint,15,opt,name=dnsMethod,enum=WAWebProtobufsWa6.ClientPayload_DNSSource_DNSResolutionMethod" json:"dnsMethod,omitempty"` - AppCached *bool `protobuf:"varint,16,opt,name=appCached" json:"appCached,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ClientPayload_DNSSource) Reset() { *x = ClientPayload_DNSSource{} - if protoimpl.UnsafeEnabled { - mi := &file_waWa6_WAWebProtobufsWa6_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waWa6_WAWebProtobufsWa6_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ClientPayload_DNSSource) String() string { @@ -1077,7 +1248,7 @@ func (*ClientPayload_DNSSource) ProtoMessage() {} func (x *ClientPayload_DNSSource) ProtoReflect() protoreflect.Message { mi := &file_waWa6_WAWebProtobufsWa6_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1107,23 +1278,22 @@ func (x *ClientPayload_DNSSource) GetAppCached() bool { } type ClientPayload_WebInfo struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` RefToken *string `protobuf:"bytes,1,opt,name=refToken" json:"refToken,omitempty"` Version *string `protobuf:"bytes,2,opt,name=version" json:"version,omitempty"` WebdPayload *ClientPayload_WebInfo_WebdPayload `protobuf:"bytes,3,opt,name=webdPayload" json:"webdPayload,omitempty"` WebSubPlatform *ClientPayload_WebInfo_WebSubPlatform `protobuf:"varint,4,opt,name=webSubPlatform,enum=WAWebProtobufsWa6.ClientPayload_WebInfo_WebSubPlatform" json:"webSubPlatform,omitempty"` + Browser *string `protobuf:"bytes,5,opt,name=browser" json:"browser,omitempty"` + BrowserVersion *string `protobuf:"bytes,6,opt,name=browserVersion" json:"browserVersion,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ClientPayload_WebInfo) Reset() { *x = ClientPayload_WebInfo{} - if protoimpl.UnsafeEnabled { - mi := &file_waWa6_WAWebProtobufsWa6_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waWa6_WAWebProtobufsWa6_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ClientPayload_WebInfo) String() string { @@ -1134,7 +1304,7 @@ func (*ClientPayload_WebInfo) ProtoMessage() {} func (x *ClientPayload_WebInfo) ProtoReflect() protoreflect.Message { mi := &file_waWa6_WAWebProtobufsWa6_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1177,11 +1347,22 @@ func (x *ClientPayload_WebInfo) GetWebSubPlatform() ClientPayload_WebInfo_WebSub return ClientPayload_WebInfo_WEB_BROWSER } -type ClientPayload_UserAgent struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +func (x *ClientPayload_WebInfo) GetBrowser() string { + if x != nil && x.Browser != nil { + return *x.Browser + } + return "" +} +func (x *ClientPayload_WebInfo) GetBrowserVersion() string { + if x != nil && x.BrowserVersion != nil { + return *x.BrowserVersion + } + return "" +} + +type ClientPayload_UserAgent struct { + state protoimpl.MessageState `protogen:"open.v1"` Platform *ClientPayload_UserAgent_Platform `protobuf:"varint,1,opt,name=platform,enum=WAWebProtobufsWa6.ClientPayload_UserAgent_Platform" json:"platform,omitempty"` AppVersion *ClientPayload_UserAgent_AppVersion `protobuf:"bytes,2,opt,name=appVersion" json:"appVersion,omitempty"` Mcc *string `protobuf:"bytes,3,opt,name=mcc" json:"mcc,omitempty"` @@ -1198,15 +1379,15 @@ type ClientPayload_UserAgent struct { DeviceExpID *string `protobuf:"bytes,14,opt,name=deviceExpID" json:"deviceExpID,omitempty"` DeviceType *ClientPayload_UserAgent_DeviceType `protobuf:"varint,15,opt,name=deviceType,enum=WAWebProtobufsWa6.ClientPayload_UserAgent_DeviceType" json:"deviceType,omitempty"` DeviceModelType *string `protobuf:"bytes,16,opt,name=deviceModelType" json:"deviceModelType,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ClientPayload_UserAgent) Reset() { *x = ClientPayload_UserAgent{} - if protoimpl.UnsafeEnabled { - mi := &file_waWa6_WAWebProtobufsWa6_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waWa6_WAWebProtobufsWa6_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ClientPayload_UserAgent) String() string { @@ -1217,7 +1398,7 @@ func (*ClientPayload_UserAgent) ProtoMessage() {} func (x *ClientPayload_UserAgent) ProtoReflect() protoreflect.Message { mi := &file_waWa6_WAWebProtobufsWa6_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1345,21 +1526,19 @@ func (x *ClientPayload_UserAgent) GetDeviceModelType() string { } type ClientPayload_InteropData struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - AccountID *uint64 `protobuf:"varint,1,opt,name=accountID" json:"accountID,omitempty"` - Token []byte `protobuf:"bytes,2,opt,name=token" json:"token,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + AccountID *uint64 `protobuf:"varint,1,opt,name=accountID" json:"accountID,omitempty"` + Token []byte `protobuf:"bytes,2,opt,name=token" json:"token,omitempty"` + EnableReadReceipts *bool `protobuf:"varint,3,opt,name=enableReadReceipts" json:"enableReadReceipts,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ClientPayload_InteropData) Reset() { *x = ClientPayload_InteropData{} - if protoimpl.UnsafeEnabled { - mi := &file_waWa6_WAWebProtobufsWa6_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waWa6_WAWebProtobufsWa6_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ClientPayload_InteropData) String() string { @@ -1370,7 +1549,7 @@ func (*ClientPayload_InteropData) ProtoMessage() {} func (x *ClientPayload_InteropData) ProtoReflect() protoreflect.Message { mi := &file_waWa6_WAWebProtobufsWa6_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1399,28 +1578,32 @@ func (x *ClientPayload_InteropData) GetToken() []byte { return nil } +func (x *ClientPayload_InteropData) GetEnableReadReceipts() bool { + if x != nil && x.EnableReadReceipts != nil { + return *x.EnableReadReceipts + } + return false +} + type ClientPayload_DevicePairingRegistrationData struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + ERegid []byte `protobuf:"bytes,1,opt,name=eRegid" json:"eRegid,omitempty"` + EKeytype []byte `protobuf:"bytes,2,opt,name=eKeytype" json:"eKeytype,omitempty"` + EIdent []byte `protobuf:"bytes,3,opt,name=eIdent" json:"eIdent,omitempty"` + ESkeyID []byte `protobuf:"bytes,4,opt,name=eSkeyID" json:"eSkeyID,omitempty"` + ESkeyVal []byte `protobuf:"bytes,5,opt,name=eSkeyVal" json:"eSkeyVal,omitempty"` + ESkeySig []byte `protobuf:"bytes,6,opt,name=eSkeySig" json:"eSkeySig,omitempty"` + BuildHash []byte `protobuf:"bytes,7,opt,name=buildHash" json:"buildHash,omitempty"` + DeviceProps []byte `protobuf:"bytes,8,opt,name=deviceProps" json:"deviceProps,omitempty"` unknownFields protoimpl.UnknownFields - - ERegid []byte `protobuf:"bytes,1,opt,name=eRegid" json:"eRegid,omitempty"` - EKeytype []byte `protobuf:"bytes,2,opt,name=eKeytype" json:"eKeytype,omitempty"` - EIdent []byte `protobuf:"bytes,3,opt,name=eIdent" json:"eIdent,omitempty"` - ESkeyID []byte `protobuf:"bytes,4,opt,name=eSkeyID" json:"eSkeyID,omitempty"` - ESkeyVal []byte `protobuf:"bytes,5,opt,name=eSkeyVal" json:"eSkeyVal,omitempty"` - ESkeySig []byte `protobuf:"bytes,6,opt,name=eSkeySig" json:"eSkeySig,omitempty"` - BuildHash []byte `protobuf:"bytes,7,opt,name=buildHash" json:"buildHash,omitempty"` - DeviceProps []byte `protobuf:"bytes,8,opt,name=deviceProps" json:"deviceProps,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ClientPayload_DevicePairingRegistrationData) Reset() { *x = ClientPayload_DevicePairingRegistrationData{} - if protoimpl.UnsafeEnabled { - mi := &file_waWa6_WAWebProtobufsWa6_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waWa6_WAWebProtobufsWa6_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ClientPayload_DevicePairingRegistrationData) String() string { @@ -1431,7 +1614,7 @@ func (*ClientPayload_DevicePairingRegistrationData) ProtoMessage() {} func (x *ClientPayload_DevicePairingRegistrationData) ProtoReflect() protoreflect.Message { mi := &file_waWa6_WAWebProtobufsWa6_proto_msgTypes[6] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1503,30 +1686,27 @@ func (x *ClientPayload_DevicePairingRegistrationData) GetDeviceProps() []byte { } type ClientPayload_WebInfo_WebdPayload struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - UsesParticipantInKey *bool `protobuf:"varint,1,opt,name=usesParticipantInKey" json:"usesParticipantInKey,omitempty"` - SupportsStarredMessages *bool `protobuf:"varint,2,opt,name=supportsStarredMessages" json:"supportsStarredMessages,omitempty"` - SupportsDocumentMessages *bool `protobuf:"varint,3,opt,name=supportsDocumentMessages" json:"supportsDocumentMessages,omitempty"` - SupportsURLMessages *bool `protobuf:"varint,4,opt,name=supportsURLMessages" json:"supportsURLMessages,omitempty"` - SupportsMediaRetry *bool `protobuf:"varint,5,opt,name=supportsMediaRetry" json:"supportsMediaRetry,omitempty"` - SupportsE2EImage *bool `protobuf:"varint,6,opt,name=supportsE2EImage" json:"supportsE2EImage,omitempty"` - SupportsE2EVideo *bool `protobuf:"varint,7,opt,name=supportsE2EVideo" json:"supportsE2EVideo,omitempty"` - SupportsE2EAudio *bool `protobuf:"varint,8,opt,name=supportsE2EAudio" json:"supportsE2EAudio,omitempty"` - SupportsE2EDocument *bool `protobuf:"varint,9,opt,name=supportsE2EDocument" json:"supportsE2EDocument,omitempty"` - DocumentTypes *string `protobuf:"bytes,10,opt,name=documentTypes" json:"documentTypes,omitempty"` - Features []byte `protobuf:"bytes,11,opt,name=features" json:"features,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + UsesParticipantInKey *bool `protobuf:"varint,1,opt,name=usesParticipantInKey" json:"usesParticipantInKey,omitempty"` + SupportsStarredMessages *bool `protobuf:"varint,2,opt,name=supportsStarredMessages" json:"supportsStarredMessages,omitempty"` + SupportsDocumentMessages *bool `protobuf:"varint,3,opt,name=supportsDocumentMessages" json:"supportsDocumentMessages,omitempty"` + SupportsURLMessages *bool `protobuf:"varint,4,opt,name=supportsURLMessages" json:"supportsURLMessages,omitempty"` + SupportsMediaRetry *bool `protobuf:"varint,5,opt,name=supportsMediaRetry" json:"supportsMediaRetry,omitempty"` + SupportsE2EImage *bool `protobuf:"varint,6,opt,name=supportsE2EImage" json:"supportsE2EImage,omitempty"` + SupportsE2EVideo *bool `protobuf:"varint,7,opt,name=supportsE2EVideo" json:"supportsE2EVideo,omitempty"` + SupportsE2EAudio *bool `protobuf:"varint,8,opt,name=supportsE2EAudio" json:"supportsE2EAudio,omitempty"` + SupportsE2EDocument *bool `protobuf:"varint,9,opt,name=supportsE2EDocument" json:"supportsE2EDocument,omitempty"` + DocumentTypes *string `protobuf:"bytes,10,opt,name=documentTypes" json:"documentTypes,omitempty"` + Features []byte `protobuf:"bytes,11,opt,name=features" json:"features,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ClientPayload_WebInfo_WebdPayload) Reset() { *x = ClientPayload_WebInfo_WebdPayload{} - if protoimpl.UnsafeEnabled { - mi := &file_waWa6_WAWebProtobufsWa6_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waWa6_WAWebProtobufsWa6_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ClientPayload_WebInfo_WebdPayload) String() string { @@ -1537,7 +1717,7 @@ func (*ClientPayload_WebInfo_WebdPayload) ProtoMessage() {} func (x *ClientPayload_WebInfo_WebdPayload) ProtoReflect() protoreflect.Message { mi := &file_waWa6_WAWebProtobufsWa6_proto_msgTypes[7] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1630,24 +1810,21 @@ func (x *ClientPayload_WebInfo_WebdPayload) GetFeatures() []byte { } type ClientPayload_UserAgent_AppVersion struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Primary *uint32 `protobuf:"varint,1,opt,name=primary" json:"primary,omitempty"` + Secondary *uint32 `protobuf:"varint,2,opt,name=secondary" json:"secondary,omitempty"` + Tertiary *uint32 `protobuf:"varint,3,opt,name=tertiary" json:"tertiary,omitempty"` + Quaternary *uint32 `protobuf:"varint,4,opt,name=quaternary" json:"quaternary,omitempty"` + Quinary *uint32 `protobuf:"varint,5,opt,name=quinary" json:"quinary,omitempty"` unknownFields protoimpl.UnknownFields - - Primary *uint32 `protobuf:"varint,1,opt,name=primary" json:"primary,omitempty"` - Secondary *uint32 `protobuf:"varint,2,opt,name=secondary" json:"secondary,omitempty"` - Tertiary *uint32 `protobuf:"varint,3,opt,name=tertiary" json:"tertiary,omitempty"` - Quaternary *uint32 `protobuf:"varint,4,opt,name=quaternary" json:"quaternary,omitempty"` - Quinary *uint32 `protobuf:"varint,5,opt,name=quinary" json:"quinary,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ClientPayload_UserAgent_AppVersion) Reset() { *x = ClientPayload_UserAgent_AppVersion{} - if protoimpl.UnsafeEnabled { - mi := &file_waWa6_WAWebProtobufsWa6_proto_msgTypes[8] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waWa6_WAWebProtobufsWa6_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ClientPayload_UserAgent_AppVersion) String() string { @@ -1658,7 +1835,7 @@ func (*ClientPayload_UserAgent_AppVersion) ProtoMessage() {} func (x *ClientPayload_UserAgent_AppVersion) ProtoReflect() protoreflect.Message { mi := &file_waWa6_WAWebProtobufsWa6_proto_msgTypes[8] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1709,21 +1886,19 @@ func (x *ClientPayload_UserAgent_AppVersion) GetQuinary() uint32 { } type HandshakeMessage_ClientFinish struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Static []byte `protobuf:"bytes,1,opt,name=static" json:"static,omitempty"` - Payload []byte `protobuf:"bytes,2,opt,name=payload" json:"payload,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Static []byte `protobuf:"bytes,1,opt,name=static" json:"static,omitempty"` + Payload []byte `protobuf:"bytes,2,opt,name=payload" json:"payload,omitempty"` + ExtendedCiphertext []byte `protobuf:"bytes,3,opt,name=extendedCiphertext" json:"extendedCiphertext,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *HandshakeMessage_ClientFinish) Reset() { *x = HandshakeMessage_ClientFinish{} - if protoimpl.UnsafeEnabled { - mi := &file_waWa6_WAWebProtobufsWa6_proto_msgTypes[9] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waWa6_WAWebProtobufsWa6_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *HandshakeMessage_ClientFinish) String() string { @@ -1734,7 +1909,7 @@ func (*HandshakeMessage_ClientFinish) ProtoMessage() {} func (x *HandshakeMessage_ClientFinish) ProtoReflect() protoreflect.Message { mi := &file_waWa6_WAWebProtobufsWa6_proto_msgTypes[9] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1763,23 +1938,28 @@ func (x *HandshakeMessage_ClientFinish) GetPayload() []byte { return nil } -type HandshakeMessage_ServerHello struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +func (x *HandshakeMessage_ClientFinish) GetExtendedCiphertext() []byte { + if x != nil { + return x.ExtendedCiphertext + } + return nil +} - Ephemeral []byte `protobuf:"bytes,1,opt,name=ephemeral" json:"ephemeral,omitempty"` - Static []byte `protobuf:"bytes,2,opt,name=static" json:"static,omitempty"` - Payload []byte `protobuf:"bytes,3,opt,name=payload" json:"payload,omitempty"` +type HandshakeMessage_ServerHello struct { + state protoimpl.MessageState `protogen:"open.v1"` + Ephemeral []byte `protobuf:"bytes,1,opt,name=ephemeral" json:"ephemeral,omitempty"` + Static []byte `protobuf:"bytes,2,opt,name=static" json:"static,omitempty"` + Payload []byte `protobuf:"bytes,3,opt,name=payload" json:"payload,omitempty"` + ExtendedStatic []byte `protobuf:"bytes,4,opt,name=extendedStatic" json:"extendedStatic,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *HandshakeMessage_ServerHello) Reset() { *x = HandshakeMessage_ServerHello{} - if protoimpl.UnsafeEnabled { - mi := &file_waWa6_WAWebProtobufsWa6_proto_msgTypes[10] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waWa6_WAWebProtobufsWa6_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *HandshakeMessage_ServerHello) String() string { @@ -1790,7 +1970,7 @@ func (*HandshakeMessage_ServerHello) ProtoMessage() {} func (x *HandshakeMessage_ServerHello) ProtoReflect() protoreflect.Message { mi := &file_waWa6_WAWebProtobufsWa6_proto_msgTypes[10] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1826,23 +2006,29 @@ func (x *HandshakeMessage_ServerHello) GetPayload() []byte { return nil } -type HandshakeMessage_ClientHello struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +func (x *HandshakeMessage_ServerHello) GetExtendedStatic() []byte { + if x != nil { + return x.ExtendedStatic + } + return nil +} - Ephemeral []byte `protobuf:"bytes,1,opt,name=ephemeral" json:"ephemeral,omitempty"` - Static []byte `protobuf:"bytes,2,opt,name=static" json:"static,omitempty"` - Payload []byte `protobuf:"bytes,3,opt,name=payload" json:"payload,omitempty"` +type HandshakeMessage_ClientHello struct { + state protoimpl.MessageState `protogen:"open.v1"` + Ephemeral []byte `protobuf:"bytes,1,opt,name=ephemeral" json:"ephemeral,omitempty"` + Static []byte `protobuf:"bytes,2,opt,name=static" json:"static,omitempty"` + Payload []byte `protobuf:"bytes,3,opt,name=payload" json:"payload,omitempty"` + UseExtended *bool `protobuf:"varint,4,opt,name=useExtended" json:"useExtended,omitempty"` + ExtendedCiphertext []byte `protobuf:"bytes,5,opt,name=extendedCiphertext" json:"extendedCiphertext,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *HandshakeMessage_ClientHello) Reset() { *x = HandshakeMessage_ClientHello{} - if protoimpl.UnsafeEnabled { - mi := &file_waWa6_WAWebProtobufsWa6_proto_msgTypes[11] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waWa6_WAWebProtobufsWa6_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *HandshakeMessage_ClientHello) String() string { @@ -1853,7 +2039,7 @@ func (*HandshakeMessage_ClientHello) ProtoMessage() {} func (x *HandshakeMessage_ClientHello) ProtoReflect() protoreflect.Message { mi := &file_waWa6_WAWebProtobufsWa6_proto_msgTypes[11] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1889,73 +2075,334 @@ func (x *HandshakeMessage_ClientHello) GetPayload() []byte { return nil } +func (x *HandshakeMessage_ClientHello) GetUseExtended() bool { + if x != nil && x.UseExtended != nil { + return *x.UseExtended + } + return false +} + +func (x *HandshakeMessage_ClientHello) GetExtendedCiphertext() []byte { + if x != nil { + return x.ExtendedCiphertext + } + return nil +} + var File_waWa6_WAWebProtobufsWa6_proto protoreflect.FileDescriptor -//go:embed WAWebProtobufsWa6.pb.raw -var file_waWa6_WAWebProtobufsWa6_proto_rawDesc []byte +const file_waWa6_WAWebProtobufsWa6_proto_rawDesc = "" + + "\n" + + "\x1dwaWa6/WAWebProtobufsWa6.proto\x12\x11WAWebProtobufsWa6\"\xcd+\n" + + "\rClientPayload\x12\x1a\n" + + "\busername\x18\x01 \x01(\x04R\busername\x12\x18\n" + + "\apassive\x18\x03 \x01(\bR\apassive\x12H\n" + + "\tuserAgent\x18\x05 \x01(\v2*.WAWebProtobufsWa6.ClientPayload.UserAgentR\tuserAgent\x12B\n" + + "\awebInfo\x18\x06 \x01(\v2(.WAWebProtobufsWa6.ClientPayload.WebInfoR\awebInfo\x12\x1a\n" + + "\bpushName\x18\a \x01(\tR\bpushName\x12\x1c\n" + + "\tsessionID\x18\t \x01(\x0fR\tsessionID\x12\"\n" + + "\fshortConnect\x18\n" + + " \x01(\bR\fshortConnect\x12N\n" + + "\vconnectType\x18\f \x01(\x0e2,.WAWebProtobufsWa6.ClientPayload.ConnectTypeR\vconnectType\x12T\n" + + "\rconnectReason\x18\r \x01(\x0e2..WAWebProtobufsWa6.ClientPayload.ConnectReasonR\rconnectReason\x12\x16\n" + + "\x06shards\x18\x0e \x03(\x05R\x06shards\x12H\n" + + "\tdnsSource\x18\x0f \x01(\v2*.WAWebProtobufsWa6.ClientPayload.DNSSourceR\tdnsSource\x120\n" + + "\x13connectAttemptCount\x18\x10 \x01(\rR\x13connectAttemptCount\x12\x16\n" + + "\x06device\x18\x12 \x01(\rR\x06device\x12l\n" + + "\x11devicePairingData\x18\x13 \x01(\v2>.WAWebProtobufsWa6.ClientPayload.DevicePairingRegistrationDataR\x11devicePairingData\x12B\n" + + "\aproduct\x18\x14 \x01(\x0e2(.WAWebProtobufsWa6.ClientPayload.ProductR\aproduct\x12\x14\n" + + "\x05fbCat\x18\x15 \x01(\fR\x05fbCat\x12 \n" + + "\vfbUserAgent\x18\x16 \x01(\fR\vfbUserAgent\x12\x0e\n" + + "\x02oc\x18\x17 \x01(\bR\x02oc\x12\x0e\n" + + "\x02lc\x18\x18 \x01(\x05R\x02lc\x12Z\n" + + "\x0fiosAppExtension\x18\x1e \x01(\x0e20.WAWebProtobufsWa6.ClientPayload.IOSAppExtensionR\x0fiosAppExtension\x12\x18\n" + + "\afbAppID\x18\x1f \x01(\x04R\afbAppID\x12\x1e\n" + + "\n" + + "fbDeviceID\x18 \x01(\fR\n" + + "fbDeviceID\x12\x12\n" + + "\x04pull\x18! \x01(\bR\x04pull\x12\"\n" + + "\fpaddingBytes\x18\" \x01(\fR\fpaddingBytes\x12\x1c\n" + + "\tyearClass\x18$ \x01(\x05R\tyearClass\x12\x1a\n" + + "\bmemClass\x18% \x01(\x05R\bmemClass\x12N\n" + + "\vinteropData\x18& \x01(\v2,.WAWebProtobufsWa6.ClientPayload.InteropDataR\vinteropData\x12i\n" + + "\x14trafficAnonymization\x18( \x01(\x0e25.WAWebProtobufsWa6.ClientPayload.TrafficAnonymizationR\x14trafficAnonymization\x12$\n" + + "\rlidDbMigrated\x18) \x01(\bR\rlidDbMigrated\x12N\n" + + "\vaccountType\x18* \x01(\x0e2,.WAWebProtobufsWa6.ClientPayload.AccountTypeR\vaccountType\x126\n" + + "\x16connectionSequenceInfo\x18+ \x01(\x0fR\x16connectionSequenceInfo\x12\x18\n" + + "\apaaLink\x18, \x01(\bR\apaaLink\x12\"\n" + + "\fpreacksCount\x18- \x01(\x05R\fpreacksCount\x120\n" + + "\x13processingQueueSize\x18. \x01(\x05R\x13processingQueueSize\x1a\x8f\x02\n" + + "\tDNSSource\x12\\\n" + + "\tdnsMethod\x18\x0f \x01(\x0e2>.WAWebProtobufsWa6.ClientPayload.DNSSource.DNSResolutionMethodR\tdnsMethod\x12\x1c\n" + + "\tappCached\x18\x10 \x01(\bR\tappCached\"\x85\x01\n" + + "\x13DNSResolutionMethod\x12\n" + + "\n" + + "\x06SYSTEM\x10\x00\x12\n" + + "\n" + + "\x06GOOGLE\x10\x01\x12\r\n" + + "\tHARDCODED\x10\x02\x12\f\n" + + "\bOVERRIDE\x10\x03\x12\f\n" + + "\bFALLBACK\x10\x04\x12\a\n" + + "\x03MNS\x10\x05\x12\x11\n" + + "\rMNS_SECONDARY\x10\x06\x12\x0f\n" + + "\vSOCKS_PROXY\x10\a\x1a\xb6\a\n" + + "\aWebInfo\x12\x1a\n" + + "\brefToken\x18\x01 \x01(\tR\brefToken\x12\x18\n" + + "\aversion\x18\x02 \x01(\tR\aversion\x12V\n" + + "\vwebdPayload\x18\x03 \x01(\v24.WAWebProtobufsWa6.ClientPayload.WebInfo.WebdPayloadR\vwebdPayload\x12_\n" + + "\x0ewebSubPlatform\x18\x04 \x01(\x0e27.WAWebProtobufsWa6.ClientPayload.WebInfo.WebSubPlatformR\x0ewebSubPlatform\x12\x18\n" + + "\abrowser\x18\x05 \x01(\tR\abrowser\x12&\n" + + "\x0ebrowserVersion\x18\x06 \x01(\tR\x0ebrowserVersion\x1a\x91\x04\n" + + "\vWebdPayload\x122\n" + + "\x14usesParticipantInKey\x18\x01 \x01(\bR\x14usesParticipantInKey\x128\n" + + "\x17supportsStarredMessages\x18\x02 \x01(\bR\x17supportsStarredMessages\x12:\n" + + "\x18supportsDocumentMessages\x18\x03 \x01(\bR\x18supportsDocumentMessages\x120\n" + + "\x13supportsURLMessages\x18\x04 \x01(\bR\x13supportsURLMessages\x12.\n" + + "\x12supportsMediaRetry\x18\x05 \x01(\bR\x12supportsMediaRetry\x12*\n" + + "\x10supportsE2EImage\x18\x06 \x01(\bR\x10supportsE2EImage\x12*\n" + + "\x10supportsE2EVideo\x18\a \x01(\bR\x10supportsE2EVideo\x12*\n" + + "\x10supportsE2EAudio\x18\b \x01(\bR\x10supportsE2EAudio\x120\n" + + "\x13supportsE2EDocument\x18\t \x01(\bR\x13supportsE2EDocument\x12$\n" + + "\rdocumentTypes\x18\n" + + " \x01(\tR\rdocumentTypes\x12\x1a\n" + + "\bfeatures\x18\v \x01(\fR\bfeatures\"f\n" + + "\x0eWebSubPlatform\x12\x0f\n" + + "\vWEB_BROWSER\x10\x00\x12\r\n" + + "\tAPP_STORE\x10\x01\x12\r\n" + + "\tWIN_STORE\x10\x02\x12\n" + + "\n" + + "\x06DARWIN\x10\x03\x12\t\n" + + "\x05WIN32\x10\x04\x12\x0e\n" + + "\n" + + "WIN_HYBRID\x10\x05\x1a\xdd\f\n" + + "\tUserAgent\x12O\n" + + "\bplatform\x18\x01 \x01(\x0e23.WAWebProtobufsWa6.ClientPayload.UserAgent.PlatformR\bplatform\x12U\n" + + "\n" + + "appVersion\x18\x02 \x01(\v25.WAWebProtobufsWa6.ClientPayload.UserAgent.AppVersionR\n" + + "appVersion\x12\x10\n" + + "\x03mcc\x18\x03 \x01(\tR\x03mcc\x12\x10\n" + + "\x03mnc\x18\x04 \x01(\tR\x03mnc\x12\x1c\n" + + "\tosVersion\x18\x05 \x01(\tR\tosVersion\x12\"\n" + + "\fmanufacturer\x18\x06 \x01(\tR\fmanufacturer\x12\x16\n" + + "\x06device\x18\a \x01(\tR\x06device\x12$\n" + + "\rosBuildNumber\x18\b \x01(\tR\rosBuildNumber\x12\x18\n" + + "\aphoneID\x18\t \x01(\tR\aphoneID\x12a\n" + + "\x0ereleaseChannel\x18\n" + + " \x01(\x0e29.WAWebProtobufsWa6.ClientPayload.UserAgent.ReleaseChannelR\x0ereleaseChannel\x124\n" + + "\x15localeLanguageIso6391\x18\v \x01(\tR\x15localeLanguageIso6391\x12@\n" + + "\x1blocaleCountryIso31661Alpha2\x18\f \x01(\tR\x1blocaleCountryIso31661Alpha2\x12 \n" + + "\vdeviceBoard\x18\r \x01(\tR\vdeviceBoard\x12 \n" + + "\vdeviceExpID\x18\x0e \x01(\tR\vdeviceExpID\x12U\n" + + "\n" + + "deviceType\x18\x0f \x01(\x0e25.WAWebProtobufsWa6.ClientPayload.UserAgent.DeviceTypeR\n" + + "deviceType\x12(\n" + + "\x0fdeviceModelType\x18\x10 \x01(\tR\x0fdeviceModelType\x1a\x9a\x01\n" + + "\n" + + "AppVersion\x12\x18\n" + + "\aprimary\x18\x01 \x01(\rR\aprimary\x12\x1c\n" + + "\tsecondary\x18\x02 \x01(\rR\tsecondary\x12\x1a\n" + + "\btertiary\x18\x03 \x01(\rR\btertiary\x12\x1e\n" + + "\n" + + "quaternary\x18\x04 \x01(\rR\n" + + "quaternary\x12\x18\n" + + "\aquinary\x18\x05 \x01(\rR\aquinary\"F\n" + + "\n" + + "DeviceType\x12\t\n" + + "\x05PHONE\x10\x00\x12\n" + + "\n" + + "\x06TABLET\x10\x01\x12\v\n" + + "\aDESKTOP\x10\x02\x12\f\n" + + "\bWEARABLE\x10\x03\x12\x06\n" + + "\x02VR\x10\x04\"=\n" + + "\x0eReleaseChannel\x12\v\n" + + "\aRELEASE\x10\x00\x12\b\n" + + "\x04BETA\x10\x01\x12\t\n" + + "\x05ALPHA\x10\x02\x12\t\n" + + "\x05DEBUG\x10\x03\"\xa5\x04\n" + + "\bPlatform\x12\v\n" + + "\aANDROID\x10\x00\x12\a\n" + + "\x03IOS\x10\x01\x12\x11\n" + + "\rWINDOWS_PHONE\x10\x02\x12\x0e\n" + + "\n" + + "BLACKBERRY\x10\x03\x12\x0f\n" + + "\vBLACKBERRYX\x10\x04\x12\a\n" + + "\x03S40\x10\x05\x12\a\n" + + "\x03S60\x10\x06\x12\x11\n" + + "\rPYTHON_CLIENT\x10\a\x12\t\n" + + "\x05TIZEN\x10\b\x12\x0e\n" + + "\n" + + "ENTERPRISE\x10\t\x12\x0f\n" + + "\vSMB_ANDROID\x10\n" + + "\x12\t\n" + + "\x05KAIOS\x10\v\x12\v\n" + + "\aSMB_IOS\x10\f\x12\v\n" + + "\aWINDOWS\x10\r\x12\a\n" + + "\x03WEB\x10\x0e\x12\n" + + "\n" + + "\x06PORTAL\x10\x0f\x12\x11\n" + + "\rGREEN_ANDROID\x10\x10\x12\x10\n" + + "\fGREEN_IPHONE\x10\x11\x12\x10\n" + + "\fBLUE_ANDROID\x10\x12\x12\x0f\n" + + "\vBLUE_IPHONE\x10\x13\x12\x12\n" + + "\x0eFBLITE_ANDROID\x10\x14\x12\x11\n" + + "\rMLITE_ANDROID\x10\x15\x12\x12\n" + + "\x0eIGLITE_ANDROID\x10\x16\x12\b\n" + + "\x04PAGE\x10\x17\x12\t\n" + + "\x05MACOS\x10\x18\x12\x0e\n" + + "\n" + + "OCULUS_MSG\x10\x19\x12\x0f\n" + + "\vOCULUS_CALL\x10\x1a\x12\t\n" + + "\x05MILAN\x10\x1b\x12\b\n" + + "\x04CAPI\x10\x1c\x12\n" + + "\n" + + "\x06WEAROS\x10\x1d\x12\f\n" + + "\bARDEVICE\x10\x1e\x12\f\n" + + "\bVRDEVICE\x10\x1f\x12\f\n" + + "\bBLUE_WEB\x10 \x12\b\n" + + "\x04IPAD\x10!\x12\b\n" + + "\x04TEST\x10\"\x12\x11\n" + + "\rSMART_GLASSES\x10#\x12\v\n" + + "\aBLUE_VR\x10$\x12\f\n" + + "\bAR_WRIST\x10%\x1aq\n" + + "\vInteropData\x12\x1c\n" + + "\taccountID\x18\x01 \x01(\x04R\taccountID\x12\x14\n" + + "\x05token\x18\x02 \x01(\fR\x05token\x12.\n" + + "\x12enableReadReceipts\x18\x03 \x01(\bR\x12enableReadReceipts\x1a\xfd\x01\n" + + "\x1dDevicePairingRegistrationData\x12\x16\n" + + "\x06eRegid\x18\x01 \x01(\fR\x06eRegid\x12\x1a\n" + + "\beKeytype\x18\x02 \x01(\fR\beKeytype\x12\x16\n" + + "\x06eIdent\x18\x03 \x01(\fR\x06eIdent\x12\x18\n" + + "\aeSkeyID\x18\x04 \x01(\fR\aeSkeyID\x12\x1a\n" + + "\beSkeyVal\x18\x05 \x01(\fR\beSkeyVal\x12\x1a\n" + + "\beSkeySig\x18\x06 \x01(\fR\beSkeySig\x12\x1c\n" + + "\tbuildHash\x18\a \x01(\fR\tbuildHash\x12 \n" + + "\vdeviceProps\x18\b \x01(\fR\vdeviceProps\"-\n" + + "\x14TrafficAnonymization\x12\a\n" + + "\x03OFF\x10\x00\x12\f\n" + + "\bSTANDARD\x10\x01\"%\n" + + "\vAccountType\x12\v\n" + + "\aDEFAULT\x10\x00\x12\t\n" + + "\x05GUEST\x10\x01\"W\n" + + "\aProduct\x12\f\n" + + "\bWHATSAPP\x10\x00\x12\r\n" + + "\tMESSENGER\x10\x01\x12\v\n" + + "\aINTEROP\x10\x02\x12\x10\n" + + "\fINTEROP_MSGR\x10\x03\x12\x10\n" + + "\fWHATSAPP_LID\x10\x04\"\xb0\x02\n" + + "\vConnectType\x12\x14\n" + + "\x10CELLULAR_UNKNOWN\x10\x00\x12\x10\n" + + "\fWIFI_UNKNOWN\x10\x01\x12\x11\n" + + "\rCELLULAR_EDGE\x10d\x12\x11\n" + + "\rCELLULAR_IDEN\x10e\x12\x11\n" + + "\rCELLULAR_UMTS\x10f\x12\x11\n" + + "\rCELLULAR_EVDO\x10g\x12\x11\n" + + "\rCELLULAR_GPRS\x10h\x12\x12\n" + + "\x0eCELLULAR_HSDPA\x10i\x12\x12\n" + + "\x0eCELLULAR_HSUPA\x10j\x12\x11\n" + + "\rCELLULAR_HSPA\x10k\x12\x11\n" + + "\rCELLULAR_CDMA\x10l\x12\x12\n" + + "\x0eCELLULAR_1XRTT\x10m\x12\x12\n" + + "\x0eCELLULAR_EHRPD\x10n\x12\x10\n" + + "\fCELLULAR_LTE\x10o\x12\x12\n" + + "\x0eCELLULAR_HSPAP\x10p\"\x86\x01\n" + + "\rConnectReason\x12\b\n" + + "\x04PUSH\x10\x00\x12\x12\n" + + "\x0eUSER_ACTIVATED\x10\x01\x12\r\n" + + "\tSCHEDULED\x10\x02\x12\x13\n" + + "\x0fERROR_RECONNECT\x10\x03\x12\x12\n" + + "\x0eNETWORK_SWITCH\x10\x04\x12\x12\n" + + "\x0ePING_RECONNECT\x10\x05\x12\v\n" + + "\aUNKNOWN\x10\x06\"T\n" + + "\x0fIOSAppExtension\x12\x13\n" + + "\x0fSHARE_EXTENSION\x10\x00\x12\x15\n" + + "\x11SERVICE_EXTENSION\x10\x01\x12\x15\n" + + "\x11INTENTS_EXTENSION\x10\x02\"\xba\x05\n" + + "\x10HandshakeMessage\x12Q\n" + + "\vclientHello\x18\x02 \x01(\v2/.WAWebProtobufsWa6.HandshakeMessage.ClientHelloR\vclientHello\x12Q\n" + + "\vserverHello\x18\x03 \x01(\v2/.WAWebProtobufsWa6.HandshakeMessage.ServerHelloR\vserverHello\x12T\n" + + "\fclientFinish\x18\x04 \x01(\v20.WAWebProtobufsWa6.HandshakeMessage.ClientFinishR\fclientFinish\x1ap\n" + + "\fClientFinish\x12\x16\n" + + "\x06static\x18\x01 \x01(\fR\x06static\x12\x18\n" + + "\apayload\x18\x02 \x01(\fR\apayload\x12.\n" + + "\x12extendedCiphertext\x18\x03 \x01(\fR\x12extendedCiphertext\x1a\x85\x01\n" + + "\vServerHello\x12\x1c\n" + + "\tephemeral\x18\x01 \x01(\fR\tephemeral\x12\x16\n" + + "\x06static\x18\x02 \x01(\fR\x06static\x12\x18\n" + + "\apayload\x18\x03 \x01(\fR\apayload\x12&\n" + + "\x0eextendedStatic\x18\x04 \x01(\fR\x0eextendedStatic\x1a\xaf\x01\n" + + "\vClientHello\x12\x1c\n" + + "\tephemeral\x18\x01 \x01(\fR\tephemeral\x12\x16\n" + + "\x06static\x18\x02 \x01(\fR\x06static\x12\x18\n" + + "\apayload\x18\x03 \x01(\fR\apayload\x12 \n" + + "\vuseExtended\x18\x04 \x01(\bR\vuseExtended\x12.\n" + + "\x12extendedCiphertext\x18\x05 \x01(\fR\x12extendedCiphertextB!Z\x1fgo.mau.fi/whatsmeow/proto/waWa6" var ( file_waWa6_WAWebProtobufsWa6_proto_rawDescOnce sync.Once - file_waWa6_WAWebProtobufsWa6_proto_rawDescData = file_waWa6_WAWebProtobufsWa6_proto_rawDesc + file_waWa6_WAWebProtobufsWa6_proto_rawDescData []byte ) func file_waWa6_WAWebProtobufsWa6_proto_rawDescGZIP() []byte { file_waWa6_WAWebProtobufsWa6_proto_rawDescOnce.Do(func() { - file_waWa6_WAWebProtobufsWa6_proto_rawDescData = protoimpl.X.CompressGZIP(file_waWa6_WAWebProtobufsWa6_proto_rawDescData) + file_waWa6_WAWebProtobufsWa6_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_waWa6_WAWebProtobufsWa6_proto_rawDesc), len(file_waWa6_WAWebProtobufsWa6_proto_rawDesc))) }) return file_waWa6_WAWebProtobufsWa6_proto_rawDescData } -var file_waWa6_WAWebProtobufsWa6_proto_enumTypes = make([]protoimpl.EnumInfo, 9) +var file_waWa6_WAWebProtobufsWa6_proto_enumTypes = make([]protoimpl.EnumInfo, 11) var file_waWa6_WAWebProtobufsWa6_proto_msgTypes = make([]protoimpl.MessageInfo, 12) var file_waWa6_WAWebProtobufsWa6_proto_goTypes = []any{ - (ClientPayload_Product)(0), // 0: WAWebProtobufsWa6.ClientPayload.Product - (ClientPayload_ConnectType)(0), // 1: WAWebProtobufsWa6.ClientPayload.ConnectType - (ClientPayload_ConnectReason)(0), // 2: WAWebProtobufsWa6.ClientPayload.ConnectReason - (ClientPayload_IOSAppExtension)(0), // 3: WAWebProtobufsWa6.ClientPayload.IOSAppExtension - (ClientPayload_DNSSource_DNSResolutionMethod)(0), // 4: WAWebProtobufsWa6.ClientPayload.DNSSource.DNSResolutionMethod - (ClientPayload_WebInfo_WebSubPlatform)(0), // 5: WAWebProtobufsWa6.ClientPayload.WebInfo.WebSubPlatform - (ClientPayload_UserAgent_DeviceType)(0), // 6: WAWebProtobufsWa6.ClientPayload.UserAgent.DeviceType - (ClientPayload_UserAgent_ReleaseChannel)(0), // 7: WAWebProtobufsWa6.ClientPayload.UserAgent.ReleaseChannel - (ClientPayload_UserAgent_Platform)(0), // 8: WAWebProtobufsWa6.ClientPayload.UserAgent.Platform - (*ClientPayload)(nil), // 9: WAWebProtobufsWa6.ClientPayload - (*HandshakeMessage)(nil), // 10: WAWebProtobufsWa6.HandshakeMessage - (*ClientPayload_DNSSource)(nil), // 11: WAWebProtobufsWa6.ClientPayload.DNSSource - (*ClientPayload_WebInfo)(nil), // 12: WAWebProtobufsWa6.ClientPayload.WebInfo - (*ClientPayload_UserAgent)(nil), // 13: WAWebProtobufsWa6.ClientPayload.UserAgent - (*ClientPayload_InteropData)(nil), // 14: WAWebProtobufsWa6.ClientPayload.InteropData - (*ClientPayload_DevicePairingRegistrationData)(nil), // 15: WAWebProtobufsWa6.ClientPayload.DevicePairingRegistrationData - (*ClientPayload_WebInfo_WebdPayload)(nil), // 16: WAWebProtobufsWa6.ClientPayload.WebInfo.WebdPayload - (*ClientPayload_UserAgent_AppVersion)(nil), // 17: WAWebProtobufsWa6.ClientPayload.UserAgent.AppVersion - (*HandshakeMessage_ClientFinish)(nil), // 18: WAWebProtobufsWa6.HandshakeMessage.ClientFinish - (*HandshakeMessage_ServerHello)(nil), // 19: WAWebProtobufsWa6.HandshakeMessage.ServerHello - (*HandshakeMessage_ClientHello)(nil), // 20: WAWebProtobufsWa6.HandshakeMessage.ClientHello + (ClientPayload_TrafficAnonymization)(0), // 0: WAWebProtobufsWa6.ClientPayload.TrafficAnonymization + (ClientPayload_AccountType)(0), // 1: WAWebProtobufsWa6.ClientPayload.AccountType + (ClientPayload_Product)(0), // 2: WAWebProtobufsWa6.ClientPayload.Product + (ClientPayload_ConnectType)(0), // 3: WAWebProtobufsWa6.ClientPayload.ConnectType + (ClientPayload_ConnectReason)(0), // 4: WAWebProtobufsWa6.ClientPayload.ConnectReason + (ClientPayload_IOSAppExtension)(0), // 5: WAWebProtobufsWa6.ClientPayload.IOSAppExtension + (ClientPayload_DNSSource_DNSResolutionMethod)(0), // 6: WAWebProtobufsWa6.ClientPayload.DNSSource.DNSResolutionMethod + (ClientPayload_WebInfo_WebSubPlatform)(0), // 7: WAWebProtobufsWa6.ClientPayload.WebInfo.WebSubPlatform + (ClientPayload_UserAgent_DeviceType)(0), // 8: WAWebProtobufsWa6.ClientPayload.UserAgent.DeviceType + (ClientPayload_UserAgent_ReleaseChannel)(0), // 9: WAWebProtobufsWa6.ClientPayload.UserAgent.ReleaseChannel + (ClientPayload_UserAgent_Platform)(0), // 10: WAWebProtobufsWa6.ClientPayload.UserAgent.Platform + (*ClientPayload)(nil), // 11: WAWebProtobufsWa6.ClientPayload + (*HandshakeMessage)(nil), // 12: WAWebProtobufsWa6.HandshakeMessage + (*ClientPayload_DNSSource)(nil), // 13: WAWebProtobufsWa6.ClientPayload.DNSSource + (*ClientPayload_WebInfo)(nil), // 14: WAWebProtobufsWa6.ClientPayload.WebInfo + (*ClientPayload_UserAgent)(nil), // 15: WAWebProtobufsWa6.ClientPayload.UserAgent + (*ClientPayload_InteropData)(nil), // 16: WAWebProtobufsWa6.ClientPayload.InteropData + (*ClientPayload_DevicePairingRegistrationData)(nil), // 17: WAWebProtobufsWa6.ClientPayload.DevicePairingRegistrationData + (*ClientPayload_WebInfo_WebdPayload)(nil), // 18: WAWebProtobufsWa6.ClientPayload.WebInfo.WebdPayload + (*ClientPayload_UserAgent_AppVersion)(nil), // 19: WAWebProtobufsWa6.ClientPayload.UserAgent.AppVersion + (*HandshakeMessage_ClientFinish)(nil), // 20: WAWebProtobufsWa6.HandshakeMessage.ClientFinish + (*HandshakeMessage_ServerHello)(nil), // 21: WAWebProtobufsWa6.HandshakeMessage.ServerHello + (*HandshakeMessage_ClientHello)(nil), // 22: WAWebProtobufsWa6.HandshakeMessage.ClientHello } var file_waWa6_WAWebProtobufsWa6_proto_depIdxs = []int32{ - 13, // 0: WAWebProtobufsWa6.ClientPayload.userAgent:type_name -> WAWebProtobufsWa6.ClientPayload.UserAgent - 12, // 1: WAWebProtobufsWa6.ClientPayload.webInfo:type_name -> WAWebProtobufsWa6.ClientPayload.WebInfo - 1, // 2: WAWebProtobufsWa6.ClientPayload.connectType:type_name -> WAWebProtobufsWa6.ClientPayload.ConnectType - 2, // 3: WAWebProtobufsWa6.ClientPayload.connectReason:type_name -> WAWebProtobufsWa6.ClientPayload.ConnectReason - 11, // 4: WAWebProtobufsWa6.ClientPayload.dnsSource:type_name -> WAWebProtobufsWa6.ClientPayload.DNSSource - 15, // 5: WAWebProtobufsWa6.ClientPayload.devicePairingData:type_name -> WAWebProtobufsWa6.ClientPayload.DevicePairingRegistrationData - 0, // 6: WAWebProtobufsWa6.ClientPayload.product:type_name -> WAWebProtobufsWa6.ClientPayload.Product - 3, // 7: WAWebProtobufsWa6.ClientPayload.iosAppExtension:type_name -> WAWebProtobufsWa6.ClientPayload.IOSAppExtension - 14, // 8: WAWebProtobufsWa6.ClientPayload.interopData:type_name -> WAWebProtobufsWa6.ClientPayload.InteropData - 20, // 9: WAWebProtobufsWa6.HandshakeMessage.clientHello:type_name -> WAWebProtobufsWa6.HandshakeMessage.ClientHello - 19, // 10: WAWebProtobufsWa6.HandshakeMessage.serverHello:type_name -> WAWebProtobufsWa6.HandshakeMessage.ServerHello - 18, // 11: WAWebProtobufsWa6.HandshakeMessage.clientFinish:type_name -> WAWebProtobufsWa6.HandshakeMessage.ClientFinish - 4, // 12: WAWebProtobufsWa6.ClientPayload.DNSSource.dnsMethod:type_name -> WAWebProtobufsWa6.ClientPayload.DNSSource.DNSResolutionMethod - 16, // 13: WAWebProtobufsWa6.ClientPayload.WebInfo.webdPayload:type_name -> WAWebProtobufsWa6.ClientPayload.WebInfo.WebdPayload - 5, // 14: WAWebProtobufsWa6.ClientPayload.WebInfo.webSubPlatform:type_name -> WAWebProtobufsWa6.ClientPayload.WebInfo.WebSubPlatform - 8, // 15: WAWebProtobufsWa6.ClientPayload.UserAgent.platform:type_name -> WAWebProtobufsWa6.ClientPayload.UserAgent.Platform - 17, // 16: WAWebProtobufsWa6.ClientPayload.UserAgent.appVersion:type_name -> WAWebProtobufsWa6.ClientPayload.UserAgent.AppVersion - 7, // 17: WAWebProtobufsWa6.ClientPayload.UserAgent.releaseChannel:type_name -> WAWebProtobufsWa6.ClientPayload.UserAgent.ReleaseChannel - 6, // 18: WAWebProtobufsWa6.ClientPayload.UserAgent.deviceType:type_name -> WAWebProtobufsWa6.ClientPayload.UserAgent.DeviceType - 19, // [19:19] is the sub-list for method output_type - 19, // [19:19] is the sub-list for method input_type - 19, // [19:19] is the sub-list for extension type_name - 19, // [19:19] is the sub-list for extension extendee - 0, // [0:19] is the sub-list for field type_name + 15, // 0: WAWebProtobufsWa6.ClientPayload.userAgent:type_name -> WAWebProtobufsWa6.ClientPayload.UserAgent + 14, // 1: WAWebProtobufsWa6.ClientPayload.webInfo:type_name -> WAWebProtobufsWa6.ClientPayload.WebInfo + 3, // 2: WAWebProtobufsWa6.ClientPayload.connectType:type_name -> WAWebProtobufsWa6.ClientPayload.ConnectType + 4, // 3: WAWebProtobufsWa6.ClientPayload.connectReason:type_name -> WAWebProtobufsWa6.ClientPayload.ConnectReason + 13, // 4: WAWebProtobufsWa6.ClientPayload.dnsSource:type_name -> WAWebProtobufsWa6.ClientPayload.DNSSource + 17, // 5: WAWebProtobufsWa6.ClientPayload.devicePairingData:type_name -> WAWebProtobufsWa6.ClientPayload.DevicePairingRegistrationData + 2, // 6: WAWebProtobufsWa6.ClientPayload.product:type_name -> WAWebProtobufsWa6.ClientPayload.Product + 5, // 7: WAWebProtobufsWa6.ClientPayload.iosAppExtension:type_name -> WAWebProtobufsWa6.ClientPayload.IOSAppExtension + 16, // 8: WAWebProtobufsWa6.ClientPayload.interopData:type_name -> WAWebProtobufsWa6.ClientPayload.InteropData + 0, // 9: WAWebProtobufsWa6.ClientPayload.trafficAnonymization:type_name -> WAWebProtobufsWa6.ClientPayload.TrafficAnonymization + 1, // 10: WAWebProtobufsWa6.ClientPayload.accountType:type_name -> WAWebProtobufsWa6.ClientPayload.AccountType + 22, // 11: WAWebProtobufsWa6.HandshakeMessage.clientHello:type_name -> WAWebProtobufsWa6.HandshakeMessage.ClientHello + 21, // 12: WAWebProtobufsWa6.HandshakeMessage.serverHello:type_name -> WAWebProtobufsWa6.HandshakeMessage.ServerHello + 20, // 13: WAWebProtobufsWa6.HandshakeMessage.clientFinish:type_name -> WAWebProtobufsWa6.HandshakeMessage.ClientFinish + 6, // 14: WAWebProtobufsWa6.ClientPayload.DNSSource.dnsMethod:type_name -> WAWebProtobufsWa6.ClientPayload.DNSSource.DNSResolutionMethod + 18, // 15: WAWebProtobufsWa6.ClientPayload.WebInfo.webdPayload:type_name -> WAWebProtobufsWa6.ClientPayload.WebInfo.WebdPayload + 7, // 16: WAWebProtobufsWa6.ClientPayload.WebInfo.webSubPlatform:type_name -> WAWebProtobufsWa6.ClientPayload.WebInfo.WebSubPlatform + 10, // 17: WAWebProtobufsWa6.ClientPayload.UserAgent.platform:type_name -> WAWebProtobufsWa6.ClientPayload.UserAgent.Platform + 19, // 18: WAWebProtobufsWa6.ClientPayload.UserAgent.appVersion:type_name -> WAWebProtobufsWa6.ClientPayload.UserAgent.AppVersion + 9, // 19: WAWebProtobufsWa6.ClientPayload.UserAgent.releaseChannel:type_name -> WAWebProtobufsWa6.ClientPayload.UserAgent.ReleaseChannel + 8, // 20: WAWebProtobufsWa6.ClientPayload.UserAgent.deviceType:type_name -> WAWebProtobufsWa6.ClientPayload.UserAgent.DeviceType + 21, // [21:21] is the sub-list for method output_type + 21, // [21:21] is the sub-list for method input_type + 21, // [21:21] is the sub-list for extension type_name + 21, // [21:21] is the sub-list for extension extendee + 0, // [0:21] is the sub-list for field type_name } func init() { file_waWa6_WAWebProtobufsWa6_proto_init() } @@ -1963,158 +2410,12 @@ func file_waWa6_WAWebProtobufsWa6_proto_init() { if File_waWa6_WAWebProtobufsWa6_proto != nil { return } - if !protoimpl.UnsafeEnabled { - file_waWa6_WAWebProtobufsWa6_proto_msgTypes[0].Exporter = func(v any, i int) any { - switch v := v.(*ClientPayload); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waWa6_WAWebProtobufsWa6_proto_msgTypes[1].Exporter = func(v any, i int) any { - switch v := v.(*HandshakeMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waWa6_WAWebProtobufsWa6_proto_msgTypes[2].Exporter = func(v any, i int) any { - switch v := v.(*ClientPayload_DNSSource); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waWa6_WAWebProtobufsWa6_proto_msgTypes[3].Exporter = func(v any, i int) any { - switch v := v.(*ClientPayload_WebInfo); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waWa6_WAWebProtobufsWa6_proto_msgTypes[4].Exporter = func(v any, i int) any { - switch v := v.(*ClientPayload_UserAgent); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waWa6_WAWebProtobufsWa6_proto_msgTypes[5].Exporter = func(v any, i int) any { - switch v := v.(*ClientPayload_InteropData); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waWa6_WAWebProtobufsWa6_proto_msgTypes[6].Exporter = func(v any, i int) any { - switch v := v.(*ClientPayload_DevicePairingRegistrationData); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waWa6_WAWebProtobufsWa6_proto_msgTypes[7].Exporter = func(v any, i int) any { - switch v := v.(*ClientPayload_WebInfo_WebdPayload); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waWa6_WAWebProtobufsWa6_proto_msgTypes[8].Exporter = func(v any, i int) any { - switch v := v.(*ClientPayload_UserAgent_AppVersion); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waWa6_WAWebProtobufsWa6_proto_msgTypes[9].Exporter = func(v any, i int) any { - switch v := v.(*HandshakeMessage_ClientFinish); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waWa6_WAWebProtobufsWa6_proto_msgTypes[10].Exporter = func(v any, i int) any { - switch v := v.(*HandshakeMessage_ServerHello); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waWa6_WAWebProtobufsWa6_proto_msgTypes[11].Exporter = func(v any, i int) any { - switch v := v.(*HandshakeMessage_ClientHello); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_waWa6_WAWebProtobufsWa6_proto_rawDesc, - NumEnums: 9, + RawDescriptor: unsafe.Slice(unsafe.StringData(file_waWa6_WAWebProtobufsWa6_proto_rawDesc), len(file_waWa6_WAWebProtobufsWa6_proto_rawDesc)), + NumEnums: 11, NumMessages: 12, NumExtensions: 0, NumServices: 0, @@ -2125,7 +2426,6 @@ func file_waWa6_WAWebProtobufsWa6_proto_init() { MessageInfos: file_waWa6_WAWebProtobufsWa6_proto_msgTypes, }.Build() File_waWa6_WAWebProtobufsWa6_proto = out.File - file_waWa6_WAWebProtobufsWa6_proto_rawDesc = nil file_waWa6_WAWebProtobufsWa6_proto_goTypes = nil file_waWa6_WAWebProtobufsWa6_proto_depIdxs = nil } diff --git a/vendor/go.mau.fi/whatsmeow/proto/waWa6/WAWebProtobufsWa6.pb.raw b/vendor/go.mau.fi/whatsmeow/proto/waWa6/WAWebProtobufsWa6.pb.raw deleted file mode 100644 index 322a7d4fd6..0000000000 Binary files a/vendor/go.mau.fi/whatsmeow/proto/waWa6/WAWebProtobufsWa6.pb.raw and /dev/null differ diff --git a/vendor/go.mau.fi/whatsmeow/proto/waWa6/WAWebProtobufsWa6.proto b/vendor/go.mau.fi/whatsmeow/proto/waWa6/WAWebProtobufsWa6.proto index 568c3cf812..56bbbcc770 100644 --- a/vendor/go.mau.fi/whatsmeow/proto/waWa6/WAWebProtobufsWa6.proto +++ b/vendor/go.mau.fi/whatsmeow/proto/waWa6/WAWebProtobufsWa6.proto @@ -3,11 +3,22 @@ package WAWebProtobufsWa6; option go_package = "go.mau.fi/whatsmeow/proto/waWa6"; message ClientPayload { + enum TrafficAnonymization { + OFF = 0; + STANDARD = 1; + } + + enum AccountType { + DEFAULT = 0; + GUEST = 1; + } + enum Product { WHATSAPP = 0; MESSENGER = 1; INTEROP = 2; INTEROP_MSGR = 3; + WHATSAPP_LID = 4; } enum ConnectType { @@ -51,6 +62,9 @@ message ClientPayload { HARDCODED = 2; OVERRIDE = 3; FALLBACK = 4; + MNS = 5; + MNS_SECONDARY = 6; + SOCKS_PROXY = 7; } optional DNSResolutionMethod dnsMethod = 15; @@ -64,6 +78,7 @@ message ClientPayload { WIN_STORE = 2; DARWIN = 3; WIN32 = 4; + WIN_HYBRID = 5; } message WebdPayload { @@ -84,6 +99,8 @@ message ClientPayload { optional string version = 2; optional WebdPayload webdPayload = 3; optional WebSubPlatform webSubPlatform = 4; + optional string browser = 5; + optional string browserVersion = 6; } message UserAgent { @@ -139,6 +156,8 @@ message ClientPayload { IPAD = 33; TEST = 34; SMART_GLASSES = 35; + BLUE_VR = 36; + AR_WRIST = 37; } message AppVersion { @@ -170,6 +189,7 @@ message ClientPayload { message InteropData { optional uint64 accountID = 1; optional bytes token = 2; + optional bool enableReadReceipts = 3; } message DevicePairingRegistrationData { @@ -210,25 +230,35 @@ message ClientPayload { optional int32 yearClass = 36; optional int32 memClass = 37; optional InteropData interopData = 38; - optional bool isPcr = 39; + optional TrafficAnonymization trafficAnonymization = 40; + optional bool lidDbMigrated = 41; + optional AccountType accountType = 42; + optional sfixed32 connectionSequenceInfo = 43; + optional bool paaLink = 44; + optional int32 preacksCount = 45; + optional int32 processingQueueSize = 46; } message HandshakeMessage { message ClientFinish { optional bytes static = 1; optional bytes payload = 2; + optional bytes extendedCiphertext = 3; } message ServerHello { optional bytes ephemeral = 1; optional bytes static = 2; optional bytes payload = 3; + optional bytes extendedStatic = 4; } message ClientHello { optional bytes ephemeral = 1; optional bytes static = 2; optional bytes payload = 3; + optional bool useExtended = 4; + optional bytes extendedCiphertext = 5; } optional ClientHello clientHello = 2; diff --git a/vendor/go.mau.fi/whatsmeow/proto/waWeb/WAWebProtobufsWeb.pb.go b/vendor/go.mau.fi/whatsmeow/proto/waWeb/WAWebProtobufsWeb.pb.go index cfc7d810e7..0e154f7bc1 100644 --- a/vendor/go.mau.fi/whatsmeow/proto/waWeb/WAWebProtobufsWeb.pb.go +++ b/vendor/go.mau.fi/whatsmeow/proto/waWeb/WAWebProtobufsWeb.pb.go @@ -1,6 +1,6 @@ // Code generated by protoc-gen-go. DO NOT EDIT. // versions: -// protoc-gen-go v1.34.2 +// protoc-gen-go v1.36.10 // protoc v3.21.12 // source: waWeb/WAWebProtobufsWeb.proto @@ -9,13 +9,13 @@ package waWeb import ( reflect "reflect" sync "sync" + unsafe "unsafe" - waCommon "go.mau.fi/whatsmeow/proto/waCommon" - waE2E "go.mau.fi/whatsmeow/proto/waE2E" protoreflect "google.golang.org/protobuf/reflect/protoreflect" protoimpl "google.golang.org/protobuf/runtime/protoimpl" - _ "embed" + waCommon "go.mau.fi/whatsmeow/proto/waCommon" + waE2E "go.mau.fi/whatsmeow/proto/waE2E" ) const ( @@ -301,6 +301,19 @@ const ( WebMessageInfo_COMMUNITY_SUB_GROUP_VISIBILITY_HIDDEN WebMessageInfo_StubType = 208 WebMessageInfo_CAPI_GROUP_NE2EE_SYSTEM_MESSAGE WebMessageInfo_StubType = 209 WebMessageInfo_STATUS_MENTION WebMessageInfo_StubType = 210 + WebMessageInfo_USER_CONTROLS_SYSTEM_MESSAGE WebMessageInfo_StubType = 211 + WebMessageInfo_SUPPORT_SYSTEM_MESSAGE WebMessageInfo_StubType = 212 + WebMessageInfo_CHANGE_LID WebMessageInfo_StubType = 213 + WebMessageInfo_BIZ_CUSTOMER_3PD_DATA_SHARING_OPT_IN_MESSAGE WebMessageInfo_StubType = 214 + WebMessageInfo_BIZ_CUSTOMER_3PD_DATA_SHARING_OPT_OUT_MESSAGE WebMessageInfo_StubType = 215 + WebMessageInfo_CHANGE_LIMIT_SHARING WebMessageInfo_StubType = 216 + WebMessageInfo_GROUP_MEMBER_LINK_MODE WebMessageInfo_StubType = 217 + WebMessageInfo_BIZ_AUTOMATICALLY_LABELED_CHAT_SYSTEM_MESSAGE WebMessageInfo_StubType = 218 + WebMessageInfo_PHONE_NUMBER_HIDING_CHAT_DEPRECATED_MESSAGE WebMessageInfo_StubType = 219 + WebMessageInfo_QUARANTINED_MESSAGE WebMessageInfo_StubType = 220 + WebMessageInfo_GROUP_MEMBER_SHARE_GROUP_HISTORY_MODE WebMessageInfo_StubType = 221 + WebMessageInfo_GROUP_OPEN_BOT_ADDED WebMessageInfo_StubType = 222 + WebMessageInfo_GROUP_TEE_BOT_ADDED WebMessageInfo_StubType = 223 ) // Enum value maps for WebMessageInfo_StubType. @@ -517,6 +530,19 @@ var ( 208: "COMMUNITY_SUB_GROUP_VISIBILITY_HIDDEN", 209: "CAPI_GROUP_NE2EE_SYSTEM_MESSAGE", 210: "STATUS_MENTION", + 211: "USER_CONTROLS_SYSTEM_MESSAGE", + 212: "SUPPORT_SYSTEM_MESSAGE", + 213: "CHANGE_LID", + 214: "BIZ_CUSTOMER_3PD_DATA_SHARING_OPT_IN_MESSAGE", + 215: "BIZ_CUSTOMER_3PD_DATA_SHARING_OPT_OUT_MESSAGE", + 216: "CHANGE_LIMIT_SHARING", + 217: "GROUP_MEMBER_LINK_MODE", + 218: "BIZ_AUTOMATICALLY_LABELED_CHAT_SYSTEM_MESSAGE", + 219: "PHONE_NUMBER_HIDING_CHAT_DEPRECATED_MESSAGE", + 220: "QUARANTINED_MESSAGE", + 221: "GROUP_MEMBER_SHARE_GROUP_HISTORY_MODE", + 222: "GROUP_OPEN_BOT_ADDED", + 223: "GROUP_TEE_BOT_ADDED", } WebMessageInfo_StubType_value = map[string]int32{ "UNKNOWN": 0, @@ -730,6 +756,19 @@ var ( "COMMUNITY_SUB_GROUP_VISIBILITY_HIDDEN": 208, "CAPI_GROUP_NE2EE_SYSTEM_MESSAGE": 209, "STATUS_MENTION": 210, + "USER_CONTROLS_SYSTEM_MESSAGE": 211, + "SUPPORT_SYSTEM_MESSAGE": 212, + "CHANGE_LID": 213, + "BIZ_CUSTOMER_3PD_DATA_SHARING_OPT_IN_MESSAGE": 214, + "BIZ_CUSTOMER_3PD_DATA_SHARING_OPT_OUT_MESSAGE": 215, + "CHANGE_LIMIT_SHARING": 216, + "GROUP_MEMBER_LINK_MODE": 217, + "BIZ_AUTOMATICALLY_LABELED_CHAT_SYSTEM_MESSAGE": 218, + "PHONE_NUMBER_HIDING_CHAT_DEPRECATED_MESSAGE": 219, + "QUARANTINED_MESSAGE": 220, + "GROUP_MEMBER_SHARE_GROUP_HISTORY_MODE": 221, + "GROUP_OPEN_BOT_ADDED": 222, + "GROUP_TEE_BOT_ADDED": 223, } ) @@ -1312,78 +1351,149 @@ func (MessageAddOn_MessageAddOnType) EnumDescriptor() ([]byte, []int) { return file_waWeb_WAWebProtobufsWeb_proto_rawDescGZIP(), []int{4, 0} } -type WebMessageInfo struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +type GroupHistoryBundleInfo_ProcessState int32 + +const ( + GroupHistoryBundleInfo_NOT_INJECTED GroupHistoryBundleInfo_ProcessState = 0 + GroupHistoryBundleInfo_INJECTED GroupHistoryBundleInfo_ProcessState = 1 + GroupHistoryBundleInfo_INJECTED_PARTIAL GroupHistoryBundleInfo_ProcessState = 2 + GroupHistoryBundleInfo_INJECTION_FAILED GroupHistoryBundleInfo_ProcessState = 3 + GroupHistoryBundleInfo_INJECTION_FAILED_NO_RETRY GroupHistoryBundleInfo_ProcessState = 4 +) + +// Enum value maps for GroupHistoryBundleInfo_ProcessState. +var ( + GroupHistoryBundleInfo_ProcessState_name = map[int32]string{ + 0: "NOT_INJECTED", + 1: "INJECTED", + 2: "INJECTED_PARTIAL", + 3: "INJECTION_FAILED", + 4: "INJECTION_FAILED_NO_RETRY", + } + GroupHistoryBundleInfo_ProcessState_value = map[string]int32{ + "NOT_INJECTED": 0, + "INJECTED": 1, + "INJECTED_PARTIAL": 2, + "INJECTION_FAILED": 3, + "INJECTION_FAILED_NO_RETRY": 4, + } +) - Key *waCommon.MessageKey `protobuf:"bytes,1,req,name=key" json:"key,omitempty"` - Message *waE2E.Message `protobuf:"bytes,2,opt,name=message" json:"message,omitempty"` - MessageTimestamp *uint64 `protobuf:"varint,3,opt,name=messageTimestamp" json:"messageTimestamp,omitempty"` - Status *WebMessageInfo_Status `protobuf:"varint,4,opt,name=status,enum=WAWebProtobufsWeb.WebMessageInfo_Status" json:"status,omitempty"` - Participant *string `protobuf:"bytes,5,opt,name=participant" json:"participant,omitempty"` - MessageC2STimestamp *uint64 `protobuf:"varint,6,opt,name=messageC2STimestamp" json:"messageC2STimestamp,omitempty"` - Ignore *bool `protobuf:"varint,16,opt,name=ignore" json:"ignore,omitempty"` - Starred *bool `protobuf:"varint,17,opt,name=starred" json:"starred,omitempty"` - Broadcast *bool `protobuf:"varint,18,opt,name=broadcast" json:"broadcast,omitempty"` - PushName *string `protobuf:"bytes,19,opt,name=pushName" json:"pushName,omitempty"` - MediaCiphertextSHA256 []byte `protobuf:"bytes,20,opt,name=mediaCiphertextSHA256" json:"mediaCiphertextSHA256,omitempty"` - Multicast *bool `protobuf:"varint,21,opt,name=multicast" json:"multicast,omitempty"` - UrlText *bool `protobuf:"varint,22,opt,name=urlText" json:"urlText,omitempty"` - UrlNumber *bool `protobuf:"varint,23,opt,name=urlNumber" json:"urlNumber,omitempty"` - MessageStubType *WebMessageInfo_StubType `protobuf:"varint,24,opt,name=messageStubType,enum=WAWebProtobufsWeb.WebMessageInfo_StubType" json:"messageStubType,omitempty"` - ClearMedia *bool `protobuf:"varint,25,opt,name=clearMedia" json:"clearMedia,omitempty"` - MessageStubParameters []string `protobuf:"bytes,26,rep,name=messageStubParameters" json:"messageStubParameters,omitempty"` - Duration *uint32 `protobuf:"varint,27,opt,name=duration" json:"duration,omitempty"` - Labels []string `protobuf:"bytes,28,rep,name=labels" json:"labels,omitempty"` - PaymentInfo *PaymentInfo `protobuf:"bytes,29,opt,name=paymentInfo" json:"paymentInfo,omitempty"` - FinalLiveLocation *waE2E.LiveLocationMessage `protobuf:"bytes,30,opt,name=finalLiveLocation" json:"finalLiveLocation,omitempty"` - QuotedPaymentInfo *PaymentInfo `protobuf:"bytes,31,opt,name=quotedPaymentInfo" json:"quotedPaymentInfo,omitempty"` - EphemeralStartTimestamp *uint64 `protobuf:"varint,32,opt,name=ephemeralStartTimestamp" json:"ephemeralStartTimestamp,omitempty"` - EphemeralDuration *uint32 `protobuf:"varint,33,opt,name=ephemeralDuration" json:"ephemeralDuration,omitempty"` - EphemeralOffToOn *bool `protobuf:"varint,34,opt,name=ephemeralOffToOn" json:"ephemeralOffToOn,omitempty"` - EphemeralOutOfSync *bool `protobuf:"varint,35,opt,name=ephemeralOutOfSync" json:"ephemeralOutOfSync,omitempty"` - BizPrivacyStatus *WebMessageInfo_BizPrivacyStatus `protobuf:"varint,36,opt,name=bizPrivacyStatus,enum=WAWebProtobufsWeb.WebMessageInfo_BizPrivacyStatus" json:"bizPrivacyStatus,omitempty"` - VerifiedBizName *string `protobuf:"bytes,37,opt,name=verifiedBizName" json:"verifiedBizName,omitempty"` - MediaData *MediaData `protobuf:"bytes,38,opt,name=mediaData" json:"mediaData,omitempty"` - PhotoChange *PhotoChange `protobuf:"bytes,39,opt,name=photoChange" json:"photoChange,omitempty"` - UserReceipt []*UserReceipt `protobuf:"bytes,40,rep,name=userReceipt" json:"userReceipt,omitempty"` - Reactions []*Reaction `protobuf:"bytes,41,rep,name=reactions" json:"reactions,omitempty"` - QuotedStickerData *MediaData `protobuf:"bytes,42,opt,name=quotedStickerData" json:"quotedStickerData,omitempty"` - FutureproofData []byte `protobuf:"bytes,43,opt,name=futureproofData" json:"futureproofData,omitempty"` - StatusPsa *StatusPSA `protobuf:"bytes,44,opt,name=statusPsa" json:"statusPsa,omitempty"` - PollUpdates []*PollUpdate `protobuf:"bytes,45,rep,name=pollUpdates" json:"pollUpdates,omitempty"` - PollAdditionalMetadata *PollAdditionalMetadata `protobuf:"bytes,46,opt,name=pollAdditionalMetadata" json:"pollAdditionalMetadata,omitempty"` - AgentID *string `protobuf:"bytes,47,opt,name=agentID" json:"agentID,omitempty"` - StatusAlreadyViewed *bool `protobuf:"varint,48,opt,name=statusAlreadyViewed" json:"statusAlreadyViewed,omitempty"` - MessageSecret []byte `protobuf:"bytes,49,opt,name=messageSecret" json:"messageSecret,omitempty"` - KeepInChat *KeepInChat `protobuf:"bytes,50,opt,name=keepInChat" json:"keepInChat,omitempty"` - OriginalSelfAuthorUserJIDString *string `protobuf:"bytes,51,opt,name=originalSelfAuthorUserJIDString" json:"originalSelfAuthorUserJIDString,omitempty"` - RevokeMessageTimestamp *uint64 `protobuf:"varint,52,opt,name=revokeMessageTimestamp" json:"revokeMessageTimestamp,omitempty"` - PinInChat *PinInChat `protobuf:"bytes,54,opt,name=pinInChat" json:"pinInChat,omitempty"` - PremiumMessageInfo *PremiumMessageInfo `protobuf:"bytes,55,opt,name=premiumMessageInfo" json:"premiumMessageInfo,omitempty"` - Is1PBizBotMessage *bool `protobuf:"varint,56,opt,name=is1PBizBotMessage" json:"is1PBizBotMessage,omitempty"` - IsGroupHistoryMessage *bool `protobuf:"varint,57,opt,name=isGroupHistoryMessage" json:"isGroupHistoryMessage,omitempty"` - BotMessageInvokerJID *string `protobuf:"bytes,58,opt,name=botMessageInvokerJID" json:"botMessageInvokerJID,omitempty"` - CommentMetadata *CommentMetadata `protobuf:"bytes,59,opt,name=commentMetadata" json:"commentMetadata,omitempty"` - EventResponses []*EventResponse `protobuf:"bytes,61,rep,name=eventResponses" json:"eventResponses,omitempty"` - ReportingTokenInfo *ReportingTokenInfo `protobuf:"bytes,62,opt,name=reportingTokenInfo" json:"reportingTokenInfo,omitempty"` - NewsletterServerID *uint64 `protobuf:"varint,63,opt,name=newsletterServerID" json:"newsletterServerID,omitempty"` - EventAdditionalMetadata *EventAdditionalMetadata `protobuf:"bytes,64,opt,name=eventAdditionalMetadata" json:"eventAdditionalMetadata,omitempty"` - IsMentionedInStatus *bool `protobuf:"varint,65,opt,name=isMentionedInStatus" json:"isMentionedInStatus,omitempty"` - StatusMentions []string `protobuf:"bytes,66,rep,name=statusMentions" json:"statusMentions,omitempty"` - TargetMessageID *waCommon.MessageKey `protobuf:"bytes,67,opt,name=targetMessageID" json:"targetMessageID,omitempty"` - MessageAddOns []*MessageAddOn `protobuf:"bytes,68,rep,name=messageAddOns" json:"messageAddOns,omitempty"` - StatusMentionMessageInfo *StatusMentionMessage `protobuf:"bytes,69,opt,name=statusMentionMessageInfo" json:"statusMentionMessageInfo,omitempty"` +func (x GroupHistoryBundleInfo_ProcessState) Enum() *GroupHistoryBundleInfo_ProcessState { + p := new(GroupHistoryBundleInfo_ProcessState) + *p = x + return p +} + +func (x GroupHistoryBundleInfo_ProcessState) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (GroupHistoryBundleInfo_ProcessState) Descriptor() protoreflect.EnumDescriptor { + return file_waWeb_WAWebProtobufsWeb_proto_enumTypes[9].Descriptor() +} + +func (GroupHistoryBundleInfo_ProcessState) Type() protoreflect.EnumType { + return &file_waWeb_WAWebProtobufsWeb_proto_enumTypes[9] +} + +func (x GroupHistoryBundleInfo_ProcessState) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *GroupHistoryBundleInfo_ProcessState) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = GroupHistoryBundleInfo_ProcessState(num) + return nil +} + +// Deprecated: Use GroupHistoryBundleInfo_ProcessState.Descriptor instead. +func (GroupHistoryBundleInfo_ProcessState) EnumDescriptor() ([]byte, []int) { + return file_waWeb_WAWebProtobufsWeb_proto_rawDescGZIP(), []int{5, 0} +} + +type WebMessageInfo struct { + state protoimpl.MessageState `protogen:"open.v1"` + Key *waCommon.MessageKey `protobuf:"bytes,1,req,name=key" json:"key,omitempty"` + Message *waE2E.Message `protobuf:"bytes,2,opt,name=message" json:"message,omitempty"` + MessageTimestamp *uint64 `protobuf:"varint,3,opt,name=messageTimestamp" json:"messageTimestamp,omitempty"` + Status *WebMessageInfo_Status `protobuf:"varint,4,opt,name=status,enum=WAWebProtobufsWeb.WebMessageInfo_Status" json:"status,omitempty"` + Participant *string `protobuf:"bytes,5,opt,name=participant" json:"participant,omitempty"` + MessageC2STimestamp *uint64 `protobuf:"varint,6,opt,name=messageC2STimestamp" json:"messageC2STimestamp,omitempty"` + Ignore *bool `protobuf:"varint,16,opt,name=ignore" json:"ignore,omitempty"` + Starred *bool `protobuf:"varint,17,opt,name=starred" json:"starred,omitempty"` + Broadcast *bool `protobuf:"varint,18,opt,name=broadcast" json:"broadcast,omitempty"` + PushName *string `protobuf:"bytes,19,opt,name=pushName" json:"pushName,omitempty"` + MediaCiphertextSHA256 []byte `protobuf:"bytes,20,opt,name=mediaCiphertextSHA256" json:"mediaCiphertextSHA256,omitempty"` + Multicast *bool `protobuf:"varint,21,opt,name=multicast" json:"multicast,omitempty"` + UrlText *bool `protobuf:"varint,22,opt,name=urlText" json:"urlText,omitempty"` + UrlNumber *bool `protobuf:"varint,23,opt,name=urlNumber" json:"urlNumber,omitempty"` + MessageStubType *WebMessageInfo_StubType `protobuf:"varint,24,opt,name=messageStubType,enum=WAWebProtobufsWeb.WebMessageInfo_StubType" json:"messageStubType,omitempty"` + ClearMedia *bool `protobuf:"varint,25,opt,name=clearMedia" json:"clearMedia,omitempty"` + MessageStubParameters []string `protobuf:"bytes,26,rep,name=messageStubParameters" json:"messageStubParameters,omitempty"` + Duration *uint32 `protobuf:"varint,27,opt,name=duration" json:"duration,omitempty"` + Labels []string `protobuf:"bytes,28,rep,name=labels" json:"labels,omitempty"` + PaymentInfo *PaymentInfo `protobuf:"bytes,29,opt,name=paymentInfo" json:"paymentInfo,omitempty"` + FinalLiveLocation *waE2E.LiveLocationMessage `protobuf:"bytes,30,opt,name=finalLiveLocation" json:"finalLiveLocation,omitempty"` + QuotedPaymentInfo *PaymentInfo `protobuf:"bytes,31,opt,name=quotedPaymentInfo" json:"quotedPaymentInfo,omitempty"` + EphemeralStartTimestamp *uint64 `protobuf:"varint,32,opt,name=ephemeralStartTimestamp" json:"ephemeralStartTimestamp,omitempty"` + EphemeralDuration *uint32 `protobuf:"varint,33,opt,name=ephemeralDuration" json:"ephemeralDuration,omitempty"` + EphemeralOffToOn *bool `protobuf:"varint,34,opt,name=ephemeralOffToOn" json:"ephemeralOffToOn,omitempty"` + EphemeralOutOfSync *bool `protobuf:"varint,35,opt,name=ephemeralOutOfSync" json:"ephemeralOutOfSync,omitempty"` + BizPrivacyStatus *WebMessageInfo_BizPrivacyStatus `protobuf:"varint,36,opt,name=bizPrivacyStatus,enum=WAWebProtobufsWeb.WebMessageInfo_BizPrivacyStatus" json:"bizPrivacyStatus,omitempty"` + VerifiedBizName *string `protobuf:"bytes,37,opt,name=verifiedBizName" json:"verifiedBizName,omitempty"` + MediaData *MediaData `protobuf:"bytes,38,opt,name=mediaData" json:"mediaData,omitempty"` + PhotoChange *PhotoChange `protobuf:"bytes,39,opt,name=photoChange" json:"photoChange,omitempty"` + UserReceipt []*UserReceipt `protobuf:"bytes,40,rep,name=userReceipt" json:"userReceipt,omitempty"` + Reactions []*Reaction `protobuf:"bytes,41,rep,name=reactions" json:"reactions,omitempty"` + QuotedStickerData *MediaData `protobuf:"bytes,42,opt,name=quotedStickerData" json:"quotedStickerData,omitempty"` + FutureproofData []byte `protobuf:"bytes,43,opt,name=futureproofData" json:"futureproofData,omitempty"` + StatusPsa *StatusPSA `protobuf:"bytes,44,opt,name=statusPsa" json:"statusPsa,omitempty"` + PollUpdates []*PollUpdate `protobuf:"bytes,45,rep,name=pollUpdates" json:"pollUpdates,omitempty"` + PollAdditionalMetadata *PollAdditionalMetadata `protobuf:"bytes,46,opt,name=pollAdditionalMetadata" json:"pollAdditionalMetadata,omitempty"` + AgentID *string `protobuf:"bytes,47,opt,name=agentID" json:"agentID,omitempty"` + StatusAlreadyViewed *bool `protobuf:"varint,48,opt,name=statusAlreadyViewed" json:"statusAlreadyViewed,omitempty"` + MessageSecret []byte `protobuf:"bytes,49,opt,name=messageSecret" json:"messageSecret,omitempty"` + KeepInChat *KeepInChat `protobuf:"bytes,50,opt,name=keepInChat" json:"keepInChat,omitempty"` + OriginalSelfAuthorUserJIDString *string `protobuf:"bytes,51,opt,name=originalSelfAuthorUserJIDString" json:"originalSelfAuthorUserJIDString,omitempty"` + RevokeMessageTimestamp *uint64 `protobuf:"varint,52,opt,name=revokeMessageTimestamp" json:"revokeMessageTimestamp,omitempty"` + PinInChat *PinInChat `protobuf:"bytes,54,opt,name=pinInChat" json:"pinInChat,omitempty"` + PremiumMessageInfo *PremiumMessageInfo `protobuf:"bytes,55,opt,name=premiumMessageInfo" json:"premiumMessageInfo,omitempty"` + Is1PBizBotMessage *bool `protobuf:"varint,56,opt,name=is1PBizBotMessage" json:"is1PBizBotMessage,omitempty"` + IsGroupHistoryMessage *bool `protobuf:"varint,57,opt,name=isGroupHistoryMessage" json:"isGroupHistoryMessage,omitempty"` + BotMessageInvokerJID *string `protobuf:"bytes,58,opt,name=botMessageInvokerJID" json:"botMessageInvokerJID,omitempty"` + CommentMetadata *CommentMetadata `protobuf:"bytes,59,opt,name=commentMetadata" json:"commentMetadata,omitempty"` + EventResponses []*EventResponse `protobuf:"bytes,61,rep,name=eventResponses" json:"eventResponses,omitempty"` + ReportingTokenInfo *ReportingTokenInfo `protobuf:"bytes,62,opt,name=reportingTokenInfo" json:"reportingTokenInfo,omitempty"` + NewsletterServerID *uint64 `protobuf:"varint,63,opt,name=newsletterServerID" json:"newsletterServerID,omitempty"` + EventAdditionalMetadata *EventAdditionalMetadata `protobuf:"bytes,64,opt,name=eventAdditionalMetadata" json:"eventAdditionalMetadata,omitempty"` + IsMentionedInStatus *bool `protobuf:"varint,65,opt,name=isMentionedInStatus" json:"isMentionedInStatus,omitempty"` + StatusMentions []string `protobuf:"bytes,66,rep,name=statusMentions" json:"statusMentions,omitempty"` + TargetMessageID *waCommon.MessageKey `protobuf:"bytes,67,opt,name=targetMessageID" json:"targetMessageID,omitempty"` + MessageAddOns []*MessageAddOn `protobuf:"bytes,68,rep,name=messageAddOns" json:"messageAddOns,omitempty"` + StatusMentionMessageInfo *StatusMentionMessage `protobuf:"bytes,69,opt,name=statusMentionMessageInfo" json:"statusMentionMessageInfo,omitempty"` + IsSupportAiMessage *bool `protobuf:"varint,70,opt,name=isSupportAiMessage" json:"isSupportAiMessage,omitempty"` + StatusMentionSources []string `protobuf:"bytes,71,rep,name=statusMentionSources" json:"statusMentionSources,omitempty"` + SupportAiCitations []*Citation `protobuf:"bytes,72,rep,name=supportAiCitations" json:"supportAiCitations,omitempty"` + BotTargetID *string `protobuf:"bytes,73,opt,name=botTargetID" json:"botTargetID,omitempty"` + GroupHistoryIndividualMessageInfo *GroupHistoryIndividualMessageInfo `protobuf:"bytes,74,opt,name=groupHistoryIndividualMessageInfo" json:"groupHistoryIndividualMessageInfo,omitempty"` + GroupHistoryBundleInfo *GroupHistoryBundleInfo `protobuf:"bytes,75,opt,name=groupHistoryBundleInfo" json:"groupHistoryBundleInfo,omitempty"` + InteractiveMessageAdditionalMetadata *InteractiveMessageAdditionalMetadata `protobuf:"bytes,76,opt,name=interactiveMessageAdditionalMetadata" json:"interactiveMessageAdditionalMetadata,omitempty"` + QuarantinedMessage *QuarantinedMessage `protobuf:"bytes,77,opt,name=quarantinedMessage" json:"quarantinedMessage,omitempty"` + NonJIDMentions *uint32 `protobuf:"varint,78,opt,name=nonJIDMentions" json:"nonJIDMentions,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *WebMessageInfo) Reset() { *x = WebMessageInfo{} - if protoimpl.UnsafeEnabled { - mi := &file_waWeb_WAWebProtobufsWeb_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waWeb_WAWebProtobufsWeb_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *WebMessageInfo) String() string { @@ -1394,7 +1504,7 @@ func (*WebMessageInfo) ProtoMessage() {} func (x *WebMessageInfo) ProtoReflect() protoreflect.Message { mi := &file_waWeb_WAWebProtobufsWeb_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1815,11 +1925,71 @@ func (x *WebMessageInfo) GetStatusMentionMessageInfo() *StatusMentionMessage { return nil } -type PaymentInfo struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +func (x *WebMessageInfo) GetIsSupportAiMessage() bool { + if x != nil && x.IsSupportAiMessage != nil { + return *x.IsSupportAiMessage + } + return false +} + +func (x *WebMessageInfo) GetStatusMentionSources() []string { + if x != nil { + return x.StatusMentionSources + } + return nil +} + +func (x *WebMessageInfo) GetSupportAiCitations() []*Citation { + if x != nil { + return x.SupportAiCitations + } + return nil +} + +func (x *WebMessageInfo) GetBotTargetID() string { + if x != nil && x.BotTargetID != nil { + return *x.BotTargetID + } + return "" +} + +func (x *WebMessageInfo) GetGroupHistoryIndividualMessageInfo() *GroupHistoryIndividualMessageInfo { + if x != nil { + return x.GroupHistoryIndividualMessageInfo + } + return nil +} + +func (x *WebMessageInfo) GetGroupHistoryBundleInfo() *GroupHistoryBundleInfo { + if x != nil { + return x.GroupHistoryBundleInfo + } + return nil +} +func (x *WebMessageInfo) GetInteractiveMessageAdditionalMetadata() *InteractiveMessageAdditionalMetadata { + if x != nil { + return x.InteractiveMessageAdditionalMetadata + } + return nil +} + +func (x *WebMessageInfo) GetQuarantinedMessage() *QuarantinedMessage { + if x != nil { + return x.QuarantinedMessage + } + return nil +} + +func (x *WebMessageInfo) GetNonJIDMentions() uint32 { + if x != nil && x.NonJIDMentions != nil { + return *x.NonJIDMentions + } + return 0 +} + +type PaymentInfo struct { + state protoimpl.MessageState `protogen:"open.v1"` CurrencyDeprecated *PaymentInfo_Currency `protobuf:"varint,1,opt,name=currencyDeprecated,enum=WAWebProtobufsWeb.PaymentInfo_Currency" json:"currencyDeprecated,omitempty"` Amount1000 *uint64 `protobuf:"varint,2,opt,name=amount1000" json:"amount1000,omitempty"` ReceiverJID *string `protobuf:"bytes,3,opt,name=receiverJID" json:"receiverJID,omitempty"` @@ -1833,15 +2003,15 @@ type PaymentInfo struct { UseNoviFiatFormat *bool `protobuf:"varint,11,opt,name=useNoviFiatFormat" json:"useNoviFiatFormat,omitempty"` PrimaryAmount *waE2E.Money `protobuf:"bytes,12,opt,name=primaryAmount" json:"primaryAmount,omitempty"` ExchangeAmount *waE2E.Money `protobuf:"bytes,13,opt,name=exchangeAmount" json:"exchangeAmount,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *PaymentInfo) Reset() { *x = PaymentInfo{} - if protoimpl.UnsafeEnabled { - mi := &file_waWeb_WAWebProtobufsWeb_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waWeb_WAWebProtobufsWeb_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *PaymentInfo) String() string { @@ -1852,7 +2022,7 @@ func (*PaymentInfo) ProtoMessage() {} func (x *PaymentInfo) ProtoReflect() protoreflect.Message { mi := &file_waWeb_WAWebProtobufsWeb_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1959,64 +2129,61 @@ func (x *PaymentInfo) GetExchangeAmount() *waE2E.Money { } type WebFeatures struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - LabelsDisplay *WebFeatures_Flag `protobuf:"varint,1,opt,name=labelsDisplay,enum=WAWebProtobufsWeb.WebFeatures_Flag" json:"labelsDisplay,omitempty"` - VoipIndividualOutgoing *WebFeatures_Flag `protobuf:"varint,2,opt,name=voipIndividualOutgoing,enum=WAWebProtobufsWeb.WebFeatures_Flag" json:"voipIndividualOutgoing,omitempty"` - GroupsV3 *WebFeatures_Flag `protobuf:"varint,3,opt,name=groupsV3,enum=WAWebProtobufsWeb.WebFeatures_Flag" json:"groupsV3,omitempty"` - GroupsV3Create *WebFeatures_Flag `protobuf:"varint,4,opt,name=groupsV3Create,enum=WAWebProtobufsWeb.WebFeatures_Flag" json:"groupsV3Create,omitempty"` - ChangeNumberV2 *WebFeatures_Flag `protobuf:"varint,5,opt,name=changeNumberV2,enum=WAWebProtobufsWeb.WebFeatures_Flag" json:"changeNumberV2,omitempty"` - QueryStatusV3Thumbnail *WebFeatures_Flag `protobuf:"varint,6,opt,name=queryStatusV3Thumbnail,enum=WAWebProtobufsWeb.WebFeatures_Flag" json:"queryStatusV3Thumbnail,omitempty"` - LiveLocations *WebFeatures_Flag `protobuf:"varint,7,opt,name=liveLocations,enum=WAWebProtobufsWeb.WebFeatures_Flag" json:"liveLocations,omitempty"` - QueryVname *WebFeatures_Flag `protobuf:"varint,8,opt,name=queryVname,enum=WAWebProtobufsWeb.WebFeatures_Flag" json:"queryVname,omitempty"` - VoipIndividualIncoming *WebFeatures_Flag `protobuf:"varint,9,opt,name=voipIndividualIncoming,enum=WAWebProtobufsWeb.WebFeatures_Flag" json:"voipIndividualIncoming,omitempty"` - QuickRepliesQuery *WebFeatures_Flag `protobuf:"varint,10,opt,name=quickRepliesQuery,enum=WAWebProtobufsWeb.WebFeatures_Flag" json:"quickRepliesQuery,omitempty"` - Payments *WebFeatures_Flag `protobuf:"varint,11,opt,name=payments,enum=WAWebProtobufsWeb.WebFeatures_Flag" json:"payments,omitempty"` - StickerPackQuery *WebFeatures_Flag `protobuf:"varint,12,opt,name=stickerPackQuery,enum=WAWebProtobufsWeb.WebFeatures_Flag" json:"stickerPackQuery,omitempty"` - LiveLocationsFinal *WebFeatures_Flag `protobuf:"varint,13,opt,name=liveLocationsFinal,enum=WAWebProtobufsWeb.WebFeatures_Flag" json:"liveLocationsFinal,omitempty"` - LabelsEdit *WebFeatures_Flag `protobuf:"varint,14,opt,name=labelsEdit,enum=WAWebProtobufsWeb.WebFeatures_Flag" json:"labelsEdit,omitempty"` - MediaUpload *WebFeatures_Flag `protobuf:"varint,15,opt,name=mediaUpload,enum=WAWebProtobufsWeb.WebFeatures_Flag" json:"mediaUpload,omitempty"` - MediaUploadRichQuickReplies *WebFeatures_Flag `protobuf:"varint,18,opt,name=mediaUploadRichQuickReplies,enum=WAWebProtobufsWeb.WebFeatures_Flag" json:"mediaUploadRichQuickReplies,omitempty"` - VnameV2 *WebFeatures_Flag `protobuf:"varint,19,opt,name=vnameV2,enum=WAWebProtobufsWeb.WebFeatures_Flag" json:"vnameV2,omitempty"` - VideoPlaybackURL *WebFeatures_Flag `protobuf:"varint,20,opt,name=videoPlaybackURL,enum=WAWebProtobufsWeb.WebFeatures_Flag" json:"videoPlaybackURL,omitempty"` - StatusRanking *WebFeatures_Flag `protobuf:"varint,21,opt,name=statusRanking,enum=WAWebProtobufsWeb.WebFeatures_Flag" json:"statusRanking,omitempty"` - VoipIndividualVideo *WebFeatures_Flag `protobuf:"varint,22,opt,name=voipIndividualVideo,enum=WAWebProtobufsWeb.WebFeatures_Flag" json:"voipIndividualVideo,omitempty"` - ThirdPartyStickers *WebFeatures_Flag `protobuf:"varint,23,opt,name=thirdPartyStickers,enum=WAWebProtobufsWeb.WebFeatures_Flag" json:"thirdPartyStickers,omitempty"` - FrequentlyForwardedSetting *WebFeatures_Flag `protobuf:"varint,24,opt,name=frequentlyForwardedSetting,enum=WAWebProtobufsWeb.WebFeatures_Flag" json:"frequentlyForwardedSetting,omitempty"` - GroupsV4JoinPermission *WebFeatures_Flag `protobuf:"varint,25,opt,name=groupsV4JoinPermission,enum=WAWebProtobufsWeb.WebFeatures_Flag" json:"groupsV4JoinPermission,omitempty"` - RecentStickers *WebFeatures_Flag `protobuf:"varint,26,opt,name=recentStickers,enum=WAWebProtobufsWeb.WebFeatures_Flag" json:"recentStickers,omitempty"` - Catalog *WebFeatures_Flag `protobuf:"varint,27,opt,name=catalog,enum=WAWebProtobufsWeb.WebFeatures_Flag" json:"catalog,omitempty"` - StarredStickers *WebFeatures_Flag `protobuf:"varint,28,opt,name=starredStickers,enum=WAWebProtobufsWeb.WebFeatures_Flag" json:"starredStickers,omitempty"` - VoipGroupCall *WebFeatures_Flag `protobuf:"varint,29,opt,name=voipGroupCall,enum=WAWebProtobufsWeb.WebFeatures_Flag" json:"voipGroupCall,omitempty"` - TemplateMessage *WebFeatures_Flag `protobuf:"varint,30,opt,name=templateMessage,enum=WAWebProtobufsWeb.WebFeatures_Flag" json:"templateMessage,omitempty"` - TemplateMessageInteractivity *WebFeatures_Flag `protobuf:"varint,31,opt,name=templateMessageInteractivity,enum=WAWebProtobufsWeb.WebFeatures_Flag" json:"templateMessageInteractivity,omitempty"` - EphemeralMessages *WebFeatures_Flag `protobuf:"varint,32,opt,name=ephemeralMessages,enum=WAWebProtobufsWeb.WebFeatures_Flag" json:"ephemeralMessages,omitempty"` - E2ENotificationSync *WebFeatures_Flag `protobuf:"varint,33,opt,name=e2ENotificationSync,enum=WAWebProtobufsWeb.WebFeatures_Flag" json:"e2ENotificationSync,omitempty"` - RecentStickersV2 *WebFeatures_Flag `protobuf:"varint,34,opt,name=recentStickersV2,enum=WAWebProtobufsWeb.WebFeatures_Flag" json:"recentStickersV2,omitempty"` - RecentStickersV3 *WebFeatures_Flag `protobuf:"varint,36,opt,name=recentStickersV3,enum=WAWebProtobufsWeb.WebFeatures_Flag" json:"recentStickersV3,omitempty"` - UserNotice *WebFeatures_Flag `protobuf:"varint,37,opt,name=userNotice,enum=WAWebProtobufsWeb.WebFeatures_Flag" json:"userNotice,omitempty"` - Support *WebFeatures_Flag `protobuf:"varint,39,opt,name=support,enum=WAWebProtobufsWeb.WebFeatures_Flag" json:"support,omitempty"` - GroupUiiCleanup *WebFeatures_Flag `protobuf:"varint,40,opt,name=groupUiiCleanup,enum=WAWebProtobufsWeb.WebFeatures_Flag" json:"groupUiiCleanup,omitempty"` - GroupDogfoodingInternalOnly *WebFeatures_Flag `protobuf:"varint,41,opt,name=groupDogfoodingInternalOnly,enum=WAWebProtobufsWeb.WebFeatures_Flag" json:"groupDogfoodingInternalOnly,omitempty"` - SettingsSync *WebFeatures_Flag `protobuf:"varint,42,opt,name=settingsSync,enum=WAWebProtobufsWeb.WebFeatures_Flag" json:"settingsSync,omitempty"` - ArchiveV2 *WebFeatures_Flag `protobuf:"varint,43,opt,name=archiveV2,enum=WAWebProtobufsWeb.WebFeatures_Flag" json:"archiveV2,omitempty"` - EphemeralAllowGroupMembers *WebFeatures_Flag `protobuf:"varint,44,opt,name=ephemeralAllowGroupMembers,enum=WAWebProtobufsWeb.WebFeatures_Flag" json:"ephemeralAllowGroupMembers,omitempty"` - Ephemeral24HDuration *WebFeatures_Flag `protobuf:"varint,45,opt,name=ephemeral24HDuration,enum=WAWebProtobufsWeb.WebFeatures_Flag" json:"ephemeral24HDuration,omitempty"` - MdForceUpgrade *WebFeatures_Flag `protobuf:"varint,46,opt,name=mdForceUpgrade,enum=WAWebProtobufsWeb.WebFeatures_Flag" json:"mdForceUpgrade,omitempty"` - DisappearingMode *WebFeatures_Flag `protobuf:"varint,47,opt,name=disappearingMode,enum=WAWebProtobufsWeb.WebFeatures_Flag" json:"disappearingMode,omitempty"` - ExternalMdOptInAvailable *WebFeatures_Flag `protobuf:"varint,48,opt,name=externalMdOptInAvailable,enum=WAWebProtobufsWeb.WebFeatures_Flag" json:"externalMdOptInAvailable,omitempty"` - NoDeleteMessageTimeLimit *WebFeatures_Flag `protobuf:"varint,49,opt,name=noDeleteMessageTimeLimit,enum=WAWebProtobufsWeb.WebFeatures_Flag" json:"noDeleteMessageTimeLimit,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + LabelsDisplay *WebFeatures_Flag `protobuf:"varint,1,opt,name=labelsDisplay,enum=WAWebProtobufsWeb.WebFeatures_Flag" json:"labelsDisplay,omitempty"` + VoipIndividualOutgoing *WebFeatures_Flag `protobuf:"varint,2,opt,name=voipIndividualOutgoing,enum=WAWebProtobufsWeb.WebFeatures_Flag" json:"voipIndividualOutgoing,omitempty"` + GroupsV3 *WebFeatures_Flag `protobuf:"varint,3,opt,name=groupsV3,enum=WAWebProtobufsWeb.WebFeatures_Flag" json:"groupsV3,omitempty"` + GroupsV3Create *WebFeatures_Flag `protobuf:"varint,4,opt,name=groupsV3Create,enum=WAWebProtobufsWeb.WebFeatures_Flag" json:"groupsV3Create,omitempty"` + ChangeNumberV2 *WebFeatures_Flag `protobuf:"varint,5,opt,name=changeNumberV2,enum=WAWebProtobufsWeb.WebFeatures_Flag" json:"changeNumberV2,omitempty"` + QueryStatusV3Thumbnail *WebFeatures_Flag `protobuf:"varint,6,opt,name=queryStatusV3Thumbnail,enum=WAWebProtobufsWeb.WebFeatures_Flag" json:"queryStatusV3Thumbnail,omitempty"` + LiveLocations *WebFeatures_Flag `protobuf:"varint,7,opt,name=liveLocations,enum=WAWebProtobufsWeb.WebFeatures_Flag" json:"liveLocations,omitempty"` + QueryVname *WebFeatures_Flag `protobuf:"varint,8,opt,name=queryVname,enum=WAWebProtobufsWeb.WebFeatures_Flag" json:"queryVname,omitempty"` + VoipIndividualIncoming *WebFeatures_Flag `protobuf:"varint,9,opt,name=voipIndividualIncoming,enum=WAWebProtobufsWeb.WebFeatures_Flag" json:"voipIndividualIncoming,omitempty"` + QuickRepliesQuery *WebFeatures_Flag `protobuf:"varint,10,opt,name=quickRepliesQuery,enum=WAWebProtobufsWeb.WebFeatures_Flag" json:"quickRepliesQuery,omitempty"` + Payments *WebFeatures_Flag `protobuf:"varint,11,opt,name=payments,enum=WAWebProtobufsWeb.WebFeatures_Flag" json:"payments,omitempty"` + StickerPackQuery *WebFeatures_Flag `protobuf:"varint,12,opt,name=stickerPackQuery,enum=WAWebProtobufsWeb.WebFeatures_Flag" json:"stickerPackQuery,omitempty"` + LiveLocationsFinal *WebFeatures_Flag `protobuf:"varint,13,opt,name=liveLocationsFinal,enum=WAWebProtobufsWeb.WebFeatures_Flag" json:"liveLocationsFinal,omitempty"` + LabelsEdit *WebFeatures_Flag `protobuf:"varint,14,opt,name=labelsEdit,enum=WAWebProtobufsWeb.WebFeatures_Flag" json:"labelsEdit,omitempty"` + MediaUpload *WebFeatures_Flag `protobuf:"varint,15,opt,name=mediaUpload,enum=WAWebProtobufsWeb.WebFeatures_Flag" json:"mediaUpload,omitempty"` + MediaUploadRichQuickReplies *WebFeatures_Flag `protobuf:"varint,18,opt,name=mediaUploadRichQuickReplies,enum=WAWebProtobufsWeb.WebFeatures_Flag" json:"mediaUploadRichQuickReplies,omitempty"` + VnameV2 *WebFeatures_Flag `protobuf:"varint,19,opt,name=vnameV2,enum=WAWebProtobufsWeb.WebFeatures_Flag" json:"vnameV2,omitempty"` + VideoPlaybackURL *WebFeatures_Flag `protobuf:"varint,20,opt,name=videoPlaybackURL,enum=WAWebProtobufsWeb.WebFeatures_Flag" json:"videoPlaybackURL,omitempty"` + StatusRanking *WebFeatures_Flag `protobuf:"varint,21,opt,name=statusRanking,enum=WAWebProtobufsWeb.WebFeatures_Flag" json:"statusRanking,omitempty"` + VoipIndividualVideo *WebFeatures_Flag `protobuf:"varint,22,opt,name=voipIndividualVideo,enum=WAWebProtobufsWeb.WebFeatures_Flag" json:"voipIndividualVideo,omitempty"` + ThirdPartyStickers *WebFeatures_Flag `protobuf:"varint,23,opt,name=thirdPartyStickers,enum=WAWebProtobufsWeb.WebFeatures_Flag" json:"thirdPartyStickers,omitempty"` + FrequentlyForwardedSetting *WebFeatures_Flag `protobuf:"varint,24,opt,name=frequentlyForwardedSetting,enum=WAWebProtobufsWeb.WebFeatures_Flag" json:"frequentlyForwardedSetting,omitempty"` + GroupsV4JoinPermission *WebFeatures_Flag `protobuf:"varint,25,opt,name=groupsV4JoinPermission,enum=WAWebProtobufsWeb.WebFeatures_Flag" json:"groupsV4JoinPermission,omitempty"` + RecentStickers *WebFeatures_Flag `protobuf:"varint,26,opt,name=recentStickers,enum=WAWebProtobufsWeb.WebFeatures_Flag" json:"recentStickers,omitempty"` + Catalog *WebFeatures_Flag `protobuf:"varint,27,opt,name=catalog,enum=WAWebProtobufsWeb.WebFeatures_Flag" json:"catalog,omitempty"` + StarredStickers *WebFeatures_Flag `protobuf:"varint,28,opt,name=starredStickers,enum=WAWebProtobufsWeb.WebFeatures_Flag" json:"starredStickers,omitempty"` + VoipGroupCall *WebFeatures_Flag `protobuf:"varint,29,opt,name=voipGroupCall,enum=WAWebProtobufsWeb.WebFeatures_Flag" json:"voipGroupCall,omitempty"` + TemplateMessage *WebFeatures_Flag `protobuf:"varint,30,opt,name=templateMessage,enum=WAWebProtobufsWeb.WebFeatures_Flag" json:"templateMessage,omitempty"` + TemplateMessageInteractivity *WebFeatures_Flag `protobuf:"varint,31,opt,name=templateMessageInteractivity,enum=WAWebProtobufsWeb.WebFeatures_Flag" json:"templateMessageInteractivity,omitempty"` + EphemeralMessages *WebFeatures_Flag `protobuf:"varint,32,opt,name=ephemeralMessages,enum=WAWebProtobufsWeb.WebFeatures_Flag" json:"ephemeralMessages,omitempty"` + E2ENotificationSync *WebFeatures_Flag `protobuf:"varint,33,opt,name=e2ENotificationSync,enum=WAWebProtobufsWeb.WebFeatures_Flag" json:"e2ENotificationSync,omitempty"` + RecentStickersV2 *WebFeatures_Flag `protobuf:"varint,34,opt,name=recentStickersV2,enum=WAWebProtobufsWeb.WebFeatures_Flag" json:"recentStickersV2,omitempty"` + RecentStickersV3 *WebFeatures_Flag `protobuf:"varint,36,opt,name=recentStickersV3,enum=WAWebProtobufsWeb.WebFeatures_Flag" json:"recentStickersV3,omitempty"` + UserNotice *WebFeatures_Flag `protobuf:"varint,37,opt,name=userNotice,enum=WAWebProtobufsWeb.WebFeatures_Flag" json:"userNotice,omitempty"` + Support *WebFeatures_Flag `protobuf:"varint,39,opt,name=support,enum=WAWebProtobufsWeb.WebFeatures_Flag" json:"support,omitempty"` + GroupUiiCleanup *WebFeatures_Flag `protobuf:"varint,40,opt,name=groupUiiCleanup,enum=WAWebProtobufsWeb.WebFeatures_Flag" json:"groupUiiCleanup,omitempty"` + GroupDogfoodingInternalOnly *WebFeatures_Flag `protobuf:"varint,41,opt,name=groupDogfoodingInternalOnly,enum=WAWebProtobufsWeb.WebFeatures_Flag" json:"groupDogfoodingInternalOnly,omitempty"` + SettingsSync *WebFeatures_Flag `protobuf:"varint,42,opt,name=settingsSync,enum=WAWebProtobufsWeb.WebFeatures_Flag" json:"settingsSync,omitempty"` + ArchiveV2 *WebFeatures_Flag `protobuf:"varint,43,opt,name=archiveV2,enum=WAWebProtobufsWeb.WebFeatures_Flag" json:"archiveV2,omitempty"` + EphemeralAllowGroupMembers *WebFeatures_Flag `protobuf:"varint,44,opt,name=ephemeralAllowGroupMembers,enum=WAWebProtobufsWeb.WebFeatures_Flag" json:"ephemeralAllowGroupMembers,omitempty"` + Ephemeral24HDuration *WebFeatures_Flag `protobuf:"varint,45,opt,name=ephemeral24HDuration,enum=WAWebProtobufsWeb.WebFeatures_Flag" json:"ephemeral24HDuration,omitempty"` + MdForceUpgrade *WebFeatures_Flag `protobuf:"varint,46,opt,name=mdForceUpgrade,enum=WAWebProtobufsWeb.WebFeatures_Flag" json:"mdForceUpgrade,omitempty"` + DisappearingMode *WebFeatures_Flag `protobuf:"varint,47,opt,name=disappearingMode,enum=WAWebProtobufsWeb.WebFeatures_Flag" json:"disappearingMode,omitempty"` + ExternalMdOptInAvailable *WebFeatures_Flag `protobuf:"varint,48,opt,name=externalMdOptInAvailable,enum=WAWebProtobufsWeb.WebFeatures_Flag" json:"externalMdOptInAvailable,omitempty"` + NoDeleteMessageTimeLimit *WebFeatures_Flag `protobuf:"varint,49,opt,name=noDeleteMessageTimeLimit,enum=WAWebProtobufsWeb.WebFeatures_Flag" json:"noDeleteMessageTimeLimit,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *WebFeatures) Reset() { *x = WebFeatures{} - if protoimpl.UnsafeEnabled { - mi := &file_waWeb_WAWebProtobufsWeb_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waWeb_WAWebProtobufsWeb_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *WebFeatures) String() string { @@ -2027,7 +2194,7 @@ func (*WebFeatures) ProtoMessage() {} func (x *WebFeatures) ProtoReflect() protoreflect.Message { mi := &file_waWeb_WAWebProtobufsWeb_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2358,24 +2525,21 @@ func (x *WebFeatures) GetNoDeleteMessageTimeLimit() WebFeatures_Flag { } type PinInChat struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` Type *PinInChat_Type `protobuf:"varint,1,opt,name=type,enum=WAWebProtobufsWeb.PinInChat_Type" json:"type,omitempty"` Key *waCommon.MessageKey `protobuf:"bytes,2,opt,name=key" json:"key,omitempty"` SenderTimestampMS *int64 `protobuf:"varint,3,opt,name=senderTimestampMS" json:"senderTimestampMS,omitempty"` ServerTimestampMS *int64 `protobuf:"varint,4,opt,name=serverTimestampMS" json:"serverTimestampMS,omitempty"` MessageAddOnContextInfo *MessageAddOnContextInfo `protobuf:"bytes,5,opt,name=messageAddOnContextInfo" json:"messageAddOnContextInfo,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *PinInChat) Reset() { *x = PinInChat{} - if protoimpl.UnsafeEnabled { - mi := &file_waWeb_WAWebProtobufsWeb_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waWeb_WAWebProtobufsWeb_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *PinInChat) String() string { @@ -2386,7 +2550,7 @@ func (*PinInChat) ProtoMessage() {} func (x *PinInChat) ProtoReflect() protoreflect.Message { mi := &file_waWeb_WAWebProtobufsWeb_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2437,10 +2601,7 @@ func (x *PinInChat) GetMessageAddOnContextInfo() *MessageAddOnContextInfo { } type MessageAddOn struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` MessageAddOnType *MessageAddOn_MessageAddOnType `protobuf:"varint,1,opt,name=messageAddOnType,enum=WAWebProtobufsWeb.MessageAddOn_MessageAddOnType" json:"messageAddOnType,omitempty"` MessageAddOn *waE2E.Message `protobuf:"bytes,2,opt,name=messageAddOn" json:"messageAddOn,omitempty"` SenderTimestampMS *int64 `protobuf:"varint,3,opt,name=senderTimestampMS" json:"senderTimestampMS,omitempty"` @@ -2449,15 +2610,15 @@ type MessageAddOn struct { AddOnContextInfo *MessageAddOnContextInfo `protobuf:"bytes,6,opt,name=addOnContextInfo" json:"addOnContextInfo,omitempty"` MessageAddOnKey *waCommon.MessageKey `protobuf:"bytes,7,opt,name=messageAddOnKey" json:"messageAddOnKey,omitempty"` LegacyMessage *LegacyMessage `protobuf:"bytes,8,opt,name=legacyMessage" json:"legacyMessage,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *MessageAddOn) Reset() { *x = MessageAddOn{} - if protoimpl.UnsafeEnabled { - mi := &file_waWeb_WAWebProtobufsWeb_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waWeb_WAWebProtobufsWeb_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *MessageAddOn) String() string { @@ -2468,7 +2629,7 @@ func (*MessageAddOn) ProtoMessage() {} func (x *MessageAddOn) ProtoReflect() protoreflect.Message { mi := &file_waWeb_WAWebProtobufsWeb_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2539,22 +2700,71 @@ func (x *MessageAddOn) GetLegacyMessage() *LegacyMessage { return nil } -type CommentMetadata struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +type GroupHistoryBundleInfo struct { + state protoimpl.MessageState `protogen:"open.v1"` + DeprecatedMessageHistoryBundle *waE2E.MessageHistoryBundle `protobuf:"bytes,1,opt,name=deprecatedMessageHistoryBundle" json:"deprecatedMessageHistoryBundle,omitempty"` + ProcessState *GroupHistoryBundleInfo_ProcessState `protobuf:"varint,2,opt,name=processState,enum=WAWebProtobufsWeb.GroupHistoryBundleInfo_ProcessState" json:"processState,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} - CommentParentKey *waCommon.MessageKey `protobuf:"bytes,1,opt,name=commentParentKey" json:"commentParentKey,omitempty"` - ReplyCount *uint32 `protobuf:"varint,2,opt,name=replyCount" json:"replyCount,omitempty"` +func (x *GroupHistoryBundleInfo) Reset() { + *x = GroupHistoryBundleInfo{} + mi := &file_waWeb_WAWebProtobufsWeb_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } -func (x *CommentMetadata) Reset() { - *x = CommentMetadata{} - if protoimpl.UnsafeEnabled { - mi := &file_waWeb_WAWebProtobufsWeb_proto_msgTypes[5] +func (x *GroupHistoryBundleInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GroupHistoryBundleInfo) ProtoMessage() {} + +func (x *GroupHistoryBundleInfo) ProtoReflect() protoreflect.Message { + mi := &file_waWeb_WAWebProtobufsWeb_proto_msgTypes[5] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms } + return mi.MessageOf(x) +} + +// Deprecated: Use GroupHistoryBundleInfo.ProtoReflect.Descriptor instead. +func (*GroupHistoryBundleInfo) Descriptor() ([]byte, []int) { + return file_waWeb_WAWebProtobufsWeb_proto_rawDescGZIP(), []int{5} +} + +func (x *GroupHistoryBundleInfo) GetDeprecatedMessageHistoryBundle() *waE2E.MessageHistoryBundle { + if x != nil { + return x.DeprecatedMessageHistoryBundle + } + return nil +} + +func (x *GroupHistoryBundleInfo) GetProcessState() GroupHistoryBundleInfo_ProcessState { + if x != nil && x.ProcessState != nil { + return *x.ProcessState + } + return GroupHistoryBundleInfo_NOT_INJECTED +} + +type CommentMetadata struct { + state protoimpl.MessageState `protogen:"open.v1"` + CommentParentKey *waCommon.MessageKey `protobuf:"bytes,1,opt,name=commentParentKey" json:"commentParentKey,omitempty"` + ReplyCount *uint32 `protobuf:"varint,2,opt,name=replyCount" json:"replyCount,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *CommentMetadata) Reset() { + *x = CommentMetadata{} + mi := &file_waWeb_WAWebProtobufsWeb_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *CommentMetadata) String() string { @@ -2564,8 +2774,8 @@ func (x *CommentMetadata) String() string { func (*CommentMetadata) ProtoMessage() {} func (x *CommentMetadata) ProtoReflect() protoreflect.Message { - mi := &file_waWeb_WAWebProtobufsWeb_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_waWeb_WAWebProtobufsWeb_proto_msgTypes[6] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2577,7 +2787,7 @@ func (x *CommentMetadata) ProtoReflect() protoreflect.Message { // Deprecated: Use CommentMetadata.ProtoReflect.Descriptor instead. func (*CommentMetadata) Descriptor() ([]byte, []int) { - return file_waWeb_WAWebProtobufsWeb_proto_rawDescGZIP(), []int{5} + return file_waWeb_WAWebProtobufsWeb_proto_rawDescGZIP(), []int{6} } func (x *CommentMetadata) GetCommentParentKey() *waCommon.MessageKey { @@ -2595,23 +2805,20 @@ func (x *CommentMetadata) GetReplyCount() uint32 { } type WebNotificationsInfo struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Timestamp *uint64 `protobuf:"varint,2,opt,name=timestamp" json:"timestamp,omitempty"` - UnreadChats *uint32 `protobuf:"varint,3,opt,name=unreadChats" json:"unreadChats,omitempty"` - NotifyMessageCount *uint32 `protobuf:"varint,4,opt,name=notifyMessageCount" json:"notifyMessageCount,omitempty"` - NotifyMessages []*WebMessageInfo `protobuf:"bytes,5,rep,name=notifyMessages" json:"notifyMessages,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Timestamp *uint64 `protobuf:"varint,2,opt,name=timestamp" json:"timestamp,omitempty"` + UnreadChats *uint32 `protobuf:"varint,3,opt,name=unreadChats" json:"unreadChats,omitempty"` + NotifyMessageCount *uint32 `protobuf:"varint,4,opt,name=notifyMessageCount" json:"notifyMessageCount,omitempty"` + NotifyMessages []*WebMessageInfo `protobuf:"bytes,5,rep,name=notifyMessages" json:"notifyMessages,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *WebNotificationsInfo) Reset() { *x = WebNotificationsInfo{} - if protoimpl.UnsafeEnabled { - mi := &file_waWeb_WAWebProtobufsWeb_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waWeb_WAWebProtobufsWeb_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *WebNotificationsInfo) String() string { @@ -2621,8 +2828,8 @@ func (x *WebNotificationsInfo) String() string { func (*WebNotificationsInfo) ProtoMessage() {} func (x *WebNotificationsInfo) ProtoReflect() protoreflect.Message { - mi := &file_waWeb_WAWebProtobufsWeb_proto_msgTypes[6] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_waWeb_WAWebProtobufsWeb_proto_msgTypes[7] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2634,7 +2841,7 @@ func (x *WebNotificationsInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use WebNotificationsInfo.ProtoReflect.Descriptor instead. func (*WebNotificationsInfo) Descriptor() ([]byte, []int) { - return file_waWeb_WAWebProtobufsWeb_proto_rawDescGZIP(), []int{6} + return file_waWeb_WAWebProtobufsWeb_proto_rawDescGZIP(), []int{7} } func (x *WebNotificationsInfo) GetTimestamp() uint64 { @@ -2666,23 +2873,20 @@ func (x *WebNotificationsInfo) GetNotifyMessages() []*WebMessageInfo { } type NotificationMessageInfo struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Key *waCommon.MessageKey `protobuf:"bytes,1,opt,name=key" json:"key,omitempty"` - Message *waE2E.Message `protobuf:"bytes,2,opt,name=message" json:"message,omitempty"` - MessageTimestamp *uint64 `protobuf:"varint,3,opt,name=messageTimestamp" json:"messageTimestamp,omitempty"` - Participant *string `protobuf:"bytes,4,opt,name=participant" json:"participant,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Key *waCommon.MessageKey `protobuf:"bytes,1,opt,name=key" json:"key,omitempty"` + Message *waE2E.Message `protobuf:"bytes,2,opt,name=message" json:"message,omitempty"` + MessageTimestamp *uint64 `protobuf:"varint,3,opt,name=messageTimestamp" json:"messageTimestamp,omitempty"` + Participant *string `protobuf:"bytes,4,opt,name=participant" json:"participant,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *NotificationMessageInfo) Reset() { *x = NotificationMessageInfo{} - if protoimpl.UnsafeEnabled { - mi := &file_waWeb_WAWebProtobufsWeb_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waWeb_WAWebProtobufsWeb_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *NotificationMessageInfo) String() string { @@ -2692,8 +2896,8 @@ func (x *NotificationMessageInfo) String() string { func (*NotificationMessageInfo) ProtoMessage() {} func (x *NotificationMessageInfo) ProtoReflect() protoreflect.Message { - mi := &file_waWeb_WAWebProtobufsWeb_proto_msgTypes[7] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_waWeb_WAWebProtobufsWeb_proto_msgTypes[8] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2705,7 +2909,7 @@ func (x *NotificationMessageInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use NotificationMessageInfo.ProtoReflect.Descriptor instead. func (*NotificationMessageInfo) Descriptor() ([]byte, []int) { - return file_waWeb_WAWebProtobufsWeb_proto_rawDescGZIP(), []int{7} + return file_waWeb_WAWebProtobufsWeb_proto_rawDescGZIP(), []int{8} } func (x *NotificationMessageInfo) GetKey() *waCommon.MessageKey { @@ -2737,20 +2941,17 @@ func (x *NotificationMessageInfo) GetParticipant() string { } type ReportingTokenInfo struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + ReportingTag []byte `protobuf:"bytes,1,opt,name=reportingTag" json:"reportingTag,omitempty"` unknownFields protoimpl.UnknownFields - - ReportingTag []byte `protobuf:"bytes,1,opt,name=reportingTag" json:"reportingTag,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ReportingTokenInfo) Reset() { *x = ReportingTokenInfo{} - if protoimpl.UnsafeEnabled { - mi := &file_waWeb_WAWebProtobufsWeb_proto_msgTypes[8] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waWeb_WAWebProtobufsWeb_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ReportingTokenInfo) String() string { @@ -2760,8 +2961,8 @@ func (x *ReportingTokenInfo) String() string { func (*ReportingTokenInfo) ProtoMessage() {} func (x *ReportingTokenInfo) ProtoReflect() protoreflect.Message { - mi := &file_waWeb_WAWebProtobufsWeb_proto_msgTypes[8] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_waWeb_WAWebProtobufsWeb_proto_msgTypes[9] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2773,7 +2974,7 @@ func (x *ReportingTokenInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use ReportingTokenInfo.ProtoReflect.Descriptor instead. func (*ReportingTokenInfo) Descriptor() ([]byte, []int) { - return file_waWeb_WAWebProtobufsWeb_proto_rawDescGZIP(), []int{8} + return file_waWeb_WAWebProtobufsWeb_proto_rawDescGZIP(), []int{9} } func (x *ReportingTokenInfo) GetReportingTag() []byte { @@ -2784,20 +2985,17 @@ func (x *ReportingTokenInfo) GetReportingTag() []byte { } type MediaData struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + LocalPath *string `protobuf:"bytes,1,opt,name=localPath" json:"localPath,omitempty"` unknownFields protoimpl.UnknownFields - - LocalPath *string `protobuf:"bytes,1,opt,name=localPath" json:"localPath,omitempty"` + sizeCache protoimpl.SizeCache } func (x *MediaData) Reset() { *x = MediaData{} - if protoimpl.UnsafeEnabled { - mi := &file_waWeb_WAWebProtobufsWeb_proto_msgTypes[9] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waWeb_WAWebProtobufsWeb_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *MediaData) String() string { @@ -2807,8 +3005,8 @@ func (x *MediaData) String() string { func (*MediaData) ProtoMessage() {} func (x *MediaData) ProtoReflect() protoreflect.Message { - mi := &file_waWeb_WAWebProtobufsWeb_proto_msgTypes[9] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_waWeb_WAWebProtobufsWeb_proto_msgTypes[10] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2820,7 +3018,7 @@ func (x *MediaData) ProtoReflect() protoreflect.Message { // Deprecated: Use MediaData.ProtoReflect.Descriptor instead. func (*MediaData) Descriptor() ([]byte, []int) { - return file_waWeb_WAWebProtobufsWeb_proto_rawDescGZIP(), []int{9} + return file_waWeb_WAWebProtobufsWeb_proto_rawDescGZIP(), []int{10} } func (x *MediaData) GetLocalPath() string { @@ -2831,22 +3029,19 @@ func (x *MediaData) GetLocalPath() string { } type PhotoChange struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + OldPhoto []byte `protobuf:"bytes,1,opt,name=oldPhoto" json:"oldPhoto,omitempty"` + NewPhoto []byte `protobuf:"bytes,2,opt,name=newPhoto" json:"newPhoto,omitempty"` + NewPhotoID *uint32 `protobuf:"varint,3,opt,name=newPhotoID" json:"newPhotoID,omitempty"` unknownFields protoimpl.UnknownFields - - OldPhoto []byte `protobuf:"bytes,1,opt,name=oldPhoto" json:"oldPhoto,omitempty"` - NewPhoto []byte `protobuf:"bytes,2,opt,name=newPhoto" json:"newPhoto,omitempty"` - NewPhotoID *uint32 `protobuf:"varint,3,opt,name=newPhotoID" json:"newPhotoID,omitempty"` + sizeCache protoimpl.SizeCache } func (x *PhotoChange) Reset() { *x = PhotoChange{} - if protoimpl.UnsafeEnabled { - mi := &file_waWeb_WAWebProtobufsWeb_proto_msgTypes[10] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waWeb_WAWebProtobufsWeb_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *PhotoChange) String() string { @@ -2856,8 +3051,8 @@ func (x *PhotoChange) String() string { func (*PhotoChange) ProtoMessage() {} func (x *PhotoChange) ProtoReflect() protoreflect.Message { - mi := &file_waWeb_WAWebProtobufsWeb_proto_msgTypes[10] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_waWeb_WAWebProtobufsWeb_proto_msgTypes[11] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2869,7 +3064,7 @@ func (x *PhotoChange) ProtoReflect() protoreflect.Message { // Deprecated: Use PhotoChange.ProtoReflect.Descriptor instead. func (*PhotoChange) Descriptor() ([]byte, []int) { - return file_waWeb_WAWebProtobufsWeb_proto_rawDescGZIP(), []int{10} + return file_waWeb_WAWebProtobufsWeb_proto_rawDescGZIP(), []int{11} } func (x *PhotoChange) GetOldPhoto() []byte { @@ -2894,21 +3089,18 @@ func (x *PhotoChange) GetNewPhotoID() uint32 { } type StatusPSA struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - CampaignID *uint64 `protobuf:"varint,44,req,name=campaignID" json:"campaignID,omitempty"` - CampaignExpirationTimestamp *uint64 `protobuf:"varint,45,opt,name=campaignExpirationTimestamp" json:"campaignExpirationTimestamp,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + CampaignID *uint64 `protobuf:"varint,44,req,name=campaignID" json:"campaignID,omitempty"` + CampaignExpirationTimestamp *uint64 `protobuf:"varint,45,opt,name=campaignExpirationTimestamp" json:"campaignExpirationTimestamp,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *StatusPSA) Reset() { *x = StatusPSA{} - if protoimpl.UnsafeEnabled { - mi := &file_waWeb_WAWebProtobufsWeb_proto_msgTypes[11] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waWeb_WAWebProtobufsWeb_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *StatusPSA) String() string { @@ -2918,8 +3110,8 @@ func (x *StatusPSA) String() string { func (*StatusPSA) ProtoMessage() {} func (x *StatusPSA) ProtoReflect() protoreflect.Message { - mi := &file_waWeb_WAWebProtobufsWeb_proto_msgTypes[11] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_waWeb_WAWebProtobufsWeb_proto_msgTypes[12] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2931,7 +3123,7 @@ func (x *StatusPSA) ProtoReflect() protoreflect.Message { // Deprecated: Use StatusPSA.ProtoReflect.Descriptor instead. func (*StatusPSA) Descriptor() ([]byte, []int) { - return file_waWeb_WAWebProtobufsWeb_proto_rawDescGZIP(), []int{11} + return file_waWeb_WAWebProtobufsWeb_proto_rawDescGZIP(), []int{12} } func (x *StatusPSA) GetCampaignID() uint64 { @@ -2949,25 +3141,22 @@ func (x *StatusPSA) GetCampaignExpirationTimestamp() uint64 { } type UserReceipt struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - UserJID *string `protobuf:"bytes,1,req,name=userJID" json:"userJID,omitempty"` - ReceiptTimestamp *int64 `protobuf:"varint,2,opt,name=receiptTimestamp" json:"receiptTimestamp,omitempty"` - ReadTimestamp *int64 `protobuf:"varint,3,opt,name=readTimestamp" json:"readTimestamp,omitempty"` - PlayedTimestamp *int64 `protobuf:"varint,4,opt,name=playedTimestamp" json:"playedTimestamp,omitempty"` - PendingDeviceJID []string `protobuf:"bytes,5,rep,name=pendingDeviceJID" json:"pendingDeviceJID,omitempty"` - DeliveredDeviceJID []string `protobuf:"bytes,6,rep,name=deliveredDeviceJID" json:"deliveredDeviceJID,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + UserJID *string `protobuf:"bytes,1,req,name=userJID" json:"userJID,omitempty"` + ReceiptTimestamp *int64 `protobuf:"varint,2,opt,name=receiptTimestamp" json:"receiptTimestamp,omitempty"` + ReadTimestamp *int64 `protobuf:"varint,3,opt,name=readTimestamp" json:"readTimestamp,omitempty"` + PlayedTimestamp *int64 `protobuf:"varint,4,opt,name=playedTimestamp" json:"playedTimestamp,omitempty"` + PendingDeviceJID []string `protobuf:"bytes,5,rep,name=pendingDeviceJID" json:"pendingDeviceJID,omitempty"` + DeliveredDeviceJID []string `protobuf:"bytes,6,rep,name=deliveredDeviceJID" json:"deliveredDeviceJID,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *UserReceipt) Reset() { *x = UserReceipt{} - if protoimpl.UnsafeEnabled { - mi := &file_waWeb_WAWebProtobufsWeb_proto_msgTypes[12] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waWeb_WAWebProtobufsWeb_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *UserReceipt) String() string { @@ -2977,8 +3166,8 @@ func (x *UserReceipt) String() string { func (*UserReceipt) ProtoMessage() {} func (x *UserReceipt) ProtoReflect() protoreflect.Message { - mi := &file_waWeb_WAWebProtobufsWeb_proto_msgTypes[12] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_waWeb_WAWebProtobufsWeb_proto_msgTypes[13] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2990,7 +3179,7 @@ func (x *UserReceipt) ProtoReflect() protoreflect.Message { // Deprecated: Use UserReceipt.ProtoReflect.Descriptor instead. func (*UserReceipt) Descriptor() ([]byte, []int) { - return file_waWeb_WAWebProtobufsWeb_proto_rawDescGZIP(), []int{12} + return file_waWeb_WAWebProtobufsWeb_proto_rawDescGZIP(), []int{13} } func (x *UserReceipt) GetUserJID() string { @@ -3036,24 +3225,21 @@ func (x *UserReceipt) GetDeliveredDeviceJID() []string { } type Reaction struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Key *waCommon.MessageKey `protobuf:"bytes,1,opt,name=key" json:"key,omitempty"` - Text *string `protobuf:"bytes,2,opt,name=text" json:"text,omitempty"` - GroupingKey *string `protobuf:"bytes,3,opt,name=groupingKey" json:"groupingKey,omitempty"` - SenderTimestampMS *int64 `protobuf:"varint,4,opt,name=senderTimestampMS" json:"senderTimestampMS,omitempty"` - Unread *bool `protobuf:"varint,5,opt,name=unread" json:"unread,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Key *waCommon.MessageKey `protobuf:"bytes,1,opt,name=key" json:"key,omitempty"` + Text *string `protobuf:"bytes,2,opt,name=text" json:"text,omitempty"` + GroupingKey *string `protobuf:"bytes,3,opt,name=groupingKey" json:"groupingKey,omitempty"` + SenderTimestampMS *int64 `protobuf:"varint,4,opt,name=senderTimestampMS" json:"senderTimestampMS,omitempty"` + Unread *bool `protobuf:"varint,5,opt,name=unread" json:"unread,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *Reaction) Reset() { *x = Reaction{} - if protoimpl.UnsafeEnabled { - mi := &file_waWeb_WAWebProtobufsWeb_proto_msgTypes[13] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waWeb_WAWebProtobufsWeb_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Reaction) String() string { @@ -3063,8 +3249,8 @@ func (x *Reaction) String() string { func (*Reaction) ProtoMessage() {} func (x *Reaction) ProtoReflect() protoreflect.Message { - mi := &file_waWeb_WAWebProtobufsWeb_proto_msgTypes[13] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_waWeb_WAWebProtobufsWeb_proto_msgTypes[14] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -3076,7 +3262,7 @@ func (x *Reaction) ProtoReflect() protoreflect.Message { // Deprecated: Use Reaction.ProtoReflect.Descriptor instead. func (*Reaction) Descriptor() ([]byte, []int) { - return file_waWeb_WAWebProtobufsWeb_proto_rawDescGZIP(), []int{13} + return file_waWeb_WAWebProtobufsWeb_proto_rawDescGZIP(), []int{14} } func (x *Reaction) GetKey() *waCommon.MessageKey { @@ -3115,24 +3301,21 @@ func (x *Reaction) GetUnread() bool { } type PollUpdate struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` PollUpdateMessageKey *waCommon.MessageKey `protobuf:"bytes,1,opt,name=pollUpdateMessageKey" json:"pollUpdateMessageKey,omitempty"` Vote *waE2E.PollVoteMessage `protobuf:"bytes,2,opt,name=vote" json:"vote,omitempty"` SenderTimestampMS *int64 `protobuf:"varint,3,opt,name=senderTimestampMS" json:"senderTimestampMS,omitempty"` ServerTimestampMS *int64 `protobuf:"varint,4,opt,name=serverTimestampMS" json:"serverTimestampMS,omitempty"` Unread *bool `protobuf:"varint,5,opt,name=unread" json:"unread,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *PollUpdate) Reset() { *x = PollUpdate{} - if protoimpl.UnsafeEnabled { - mi := &file_waWeb_WAWebProtobufsWeb_proto_msgTypes[14] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waWeb_WAWebProtobufsWeb_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *PollUpdate) String() string { @@ -3142,8 +3325,8 @@ func (x *PollUpdate) String() string { func (*PollUpdate) ProtoMessage() {} func (x *PollUpdate) ProtoReflect() protoreflect.Message { - mi := &file_waWeb_WAWebProtobufsWeb_proto_msgTypes[14] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_waWeb_WAWebProtobufsWeb_proto_msgTypes[15] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -3155,7 +3338,7 @@ func (x *PollUpdate) ProtoReflect() protoreflect.Message { // Deprecated: Use PollUpdate.ProtoReflect.Descriptor instead. func (*PollUpdate) Descriptor() ([]byte, []int) { - return file_waWeb_WAWebProtobufsWeb_proto_rawDescGZIP(), []int{14} + return file_waWeb_WAWebProtobufsWeb_proto_rawDescGZIP(), []int{15} } func (x *PollUpdate) GetPollUpdateMessageKey() *waCommon.MessageKey { @@ -3194,20 +3377,17 @@ func (x *PollUpdate) GetUnread() bool { } type PollAdditionalMetadata struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - PollInvalidated *bool `protobuf:"varint,1,opt,name=pollInvalidated" json:"pollInvalidated,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + PollInvalidated *bool `protobuf:"varint,1,opt,name=pollInvalidated" json:"pollInvalidated,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *PollAdditionalMetadata) Reset() { *x = PollAdditionalMetadata{} - if protoimpl.UnsafeEnabled { - mi := &file_waWeb_WAWebProtobufsWeb_proto_msgTypes[15] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waWeb_WAWebProtobufsWeb_proto_msgTypes[16] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *PollAdditionalMetadata) String() string { @@ -3217,8 +3397,8 @@ func (x *PollAdditionalMetadata) String() string { func (*PollAdditionalMetadata) ProtoMessage() {} func (x *PollAdditionalMetadata) ProtoReflect() protoreflect.Message { - mi := &file_waWeb_WAWebProtobufsWeb_proto_msgTypes[15] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_waWeb_WAWebProtobufsWeb_proto_msgTypes[16] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -3230,7 +3410,7 @@ func (x *PollAdditionalMetadata) ProtoReflect() protoreflect.Message { // Deprecated: Use PollAdditionalMetadata.ProtoReflect.Descriptor instead. func (*PollAdditionalMetadata) Descriptor() ([]byte, []int) { - return file_waWeb_WAWebProtobufsWeb_proto_rawDescGZIP(), []int{15} + return file_waWeb_WAWebProtobufsWeb_proto_rawDescGZIP(), []int{16} } func (x *PollAdditionalMetadata) GetPollInvalidated() bool { @@ -3240,21 +3420,62 @@ func (x *PollAdditionalMetadata) GetPollInvalidated() bool { return false } +type InteractiveMessageAdditionalMetadata struct { + state protoimpl.MessageState `protogen:"open.v1"` + IsGalaxyFlowCompleted *bool `protobuf:"varint,1,opt,name=isGalaxyFlowCompleted" json:"isGalaxyFlowCompleted,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *InteractiveMessageAdditionalMetadata) Reset() { + *x = InteractiveMessageAdditionalMetadata{} + mi := &file_waWeb_WAWebProtobufsWeb_proto_msgTypes[17] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *InteractiveMessageAdditionalMetadata) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*InteractiveMessageAdditionalMetadata) ProtoMessage() {} + +func (x *InteractiveMessageAdditionalMetadata) ProtoReflect() protoreflect.Message { + mi := &file_waWeb_WAWebProtobufsWeb_proto_msgTypes[17] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use InteractiveMessageAdditionalMetadata.ProtoReflect.Descriptor instead. +func (*InteractiveMessageAdditionalMetadata) Descriptor() ([]byte, []int) { + return file_waWeb_WAWebProtobufsWeb_proto_rawDescGZIP(), []int{17} +} + +func (x *InteractiveMessageAdditionalMetadata) GetIsGalaxyFlowCompleted() bool { + if x != nil && x.IsGalaxyFlowCompleted != nil { + return *x.IsGalaxyFlowCompleted + } + return false +} + type EventAdditionalMetadata struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + IsStale *bool `protobuf:"varint,1,opt,name=isStale" json:"isStale,omitempty"` unknownFields protoimpl.UnknownFields - - IsStale *bool `protobuf:"varint,1,opt,name=isStale" json:"isStale,omitempty"` + sizeCache protoimpl.SizeCache } func (x *EventAdditionalMetadata) Reset() { *x = EventAdditionalMetadata{} - if protoimpl.UnsafeEnabled { - mi := &file_waWeb_WAWebProtobufsWeb_proto_msgTypes[16] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waWeb_WAWebProtobufsWeb_proto_msgTypes[18] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *EventAdditionalMetadata) String() string { @@ -3264,8 +3485,8 @@ func (x *EventAdditionalMetadata) String() string { func (*EventAdditionalMetadata) ProtoMessage() {} func (x *EventAdditionalMetadata) ProtoReflect() protoreflect.Message { - mi := &file_waWeb_WAWebProtobufsWeb_proto_msgTypes[16] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_waWeb_WAWebProtobufsWeb_proto_msgTypes[18] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -3277,7 +3498,7 @@ func (x *EventAdditionalMetadata) ProtoReflect() protoreflect.Message { // Deprecated: Use EventAdditionalMetadata.ProtoReflect.Descriptor instead. func (*EventAdditionalMetadata) Descriptor() ([]byte, []int) { - return file_waWeb_WAWebProtobufsWeb_proto_rawDescGZIP(), []int{16} + return file_waWeb_WAWebProtobufsWeb_proto_rawDescGZIP(), []int{18} } func (x *EventAdditionalMetadata) GetIsStale() bool { @@ -3288,25 +3509,22 @@ func (x *EventAdditionalMetadata) GetIsStale() bool { } type KeepInChat struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - KeepType *waE2E.KeepType `protobuf:"varint,1,opt,name=keepType,enum=WAWebProtobufsE2E.KeepType" json:"keepType,omitempty"` - ServerTimestamp *int64 `protobuf:"varint,2,opt,name=serverTimestamp" json:"serverTimestamp,omitempty"` - Key *waCommon.MessageKey `protobuf:"bytes,3,opt,name=key" json:"key,omitempty"` - DeviceJID *string `protobuf:"bytes,4,opt,name=deviceJID" json:"deviceJID,omitempty"` - ClientTimestampMS *int64 `protobuf:"varint,5,opt,name=clientTimestampMS" json:"clientTimestampMS,omitempty"` - ServerTimestampMS *int64 `protobuf:"varint,6,opt,name=serverTimestampMS" json:"serverTimestampMS,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + KeepType *waE2E.KeepType `protobuf:"varint,1,opt,name=keepType,enum=WAWebProtobufsE2E.KeepType" json:"keepType,omitempty"` + ServerTimestamp *int64 `protobuf:"varint,2,opt,name=serverTimestamp" json:"serverTimestamp,omitempty"` + Key *waCommon.MessageKey `protobuf:"bytes,3,opt,name=key" json:"key,omitempty"` + DeviceJID *string `protobuf:"bytes,4,opt,name=deviceJID" json:"deviceJID,omitempty"` + ClientTimestampMS *int64 `protobuf:"varint,5,opt,name=clientTimestampMS" json:"clientTimestampMS,omitempty"` + ServerTimestampMS *int64 `protobuf:"varint,6,opt,name=serverTimestampMS" json:"serverTimestampMS,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *KeepInChat) Reset() { *x = KeepInChat{} - if protoimpl.UnsafeEnabled { - mi := &file_waWeb_WAWebProtobufsWeb_proto_msgTypes[17] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waWeb_WAWebProtobufsWeb_proto_msgTypes[19] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *KeepInChat) String() string { @@ -3316,8 +3534,8 @@ func (x *KeepInChat) String() string { func (*KeepInChat) ProtoMessage() {} func (x *KeepInChat) ProtoReflect() protoreflect.Message { - mi := &file_waWeb_WAWebProtobufsWeb_proto_msgTypes[17] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_waWeb_WAWebProtobufsWeb_proto_msgTypes[19] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -3329,7 +3547,7 @@ func (x *KeepInChat) ProtoReflect() protoreflect.Message { // Deprecated: Use KeepInChat.ProtoReflect.Descriptor instead. func (*KeepInChat) Descriptor() ([]byte, []int) { - return file_waWeb_WAWebProtobufsWeb_proto_rawDescGZIP(), []int{17} + return file_waWeb_WAWebProtobufsWeb_proto_rawDescGZIP(), []int{19} } func (x *KeepInChat) GetKeepType() waE2E.KeepType { @@ -3375,21 +3593,18 @@ func (x *KeepInChat) GetServerTimestampMS() int64 { } type MessageAddOnContextInfo struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` MessageAddOnDurationInSecs *uint32 `protobuf:"varint,1,opt,name=messageAddOnDurationInSecs" json:"messageAddOnDurationInSecs,omitempty"` MessageAddOnExpiryType *waE2E.MessageContextInfo_MessageAddonExpiryType `protobuf:"varint,2,opt,name=messageAddOnExpiryType,enum=WAWebProtobufsE2E.MessageContextInfo_MessageAddonExpiryType" json:"messageAddOnExpiryType,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *MessageAddOnContextInfo) Reset() { *x = MessageAddOnContextInfo{} - if protoimpl.UnsafeEnabled { - mi := &file_waWeb_WAWebProtobufsWeb_proto_msgTypes[18] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waWeb_WAWebProtobufsWeb_proto_msgTypes[20] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *MessageAddOnContextInfo) String() string { @@ -3399,8 +3614,8 @@ func (x *MessageAddOnContextInfo) String() string { func (*MessageAddOnContextInfo) ProtoMessage() {} func (x *MessageAddOnContextInfo) ProtoReflect() protoreflect.Message { - mi := &file_waWeb_WAWebProtobufsWeb_proto_msgTypes[18] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_waWeb_WAWebProtobufsWeb_proto_msgTypes[20] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -3412,7 +3627,7 @@ func (x *MessageAddOnContextInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use MessageAddOnContextInfo.ProtoReflect.Descriptor instead. func (*MessageAddOnContextInfo) Descriptor() ([]byte, []int) { - return file_waWeb_WAWebProtobufsWeb_proto_rawDescGZIP(), []int{18} + return file_waWeb_WAWebProtobufsWeb_proto_rawDescGZIP(), []int{20} } func (x *MessageAddOnContextInfo) GetMessageAddOnDurationInSecs() uint32 { @@ -3430,20 +3645,17 @@ func (x *MessageAddOnContextInfo) GetMessageAddOnExpiryType() waE2E.MessageConte } type PremiumMessageInfo struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - ServerCampaignID *string `protobuf:"bytes,1,opt,name=serverCampaignID" json:"serverCampaignID,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + ServerCampaignID *string `protobuf:"bytes,1,opt,name=serverCampaignID" json:"serverCampaignID,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *PremiumMessageInfo) Reset() { *x = PremiumMessageInfo{} - if protoimpl.UnsafeEnabled { - mi := &file_waWeb_WAWebProtobufsWeb_proto_msgTypes[19] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waWeb_WAWebProtobufsWeb_proto_msgTypes[21] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *PremiumMessageInfo) String() string { @@ -3453,8 +3665,8 @@ func (x *PremiumMessageInfo) String() string { func (*PremiumMessageInfo) ProtoMessage() {} func (x *PremiumMessageInfo) ProtoReflect() protoreflect.Message { - mi := &file_waWeb_WAWebProtobufsWeb_proto_msgTypes[19] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_waWeb_WAWebProtobufsWeb_proto_msgTypes[21] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -3466,7 +3678,7 @@ func (x *PremiumMessageInfo) ProtoReflect() protoreflect.Message { // Deprecated: Use PremiumMessageInfo.ProtoReflect.Descriptor instead. func (*PremiumMessageInfo) Descriptor() ([]byte, []int) { - return file_waWeb_WAWebProtobufsWeb_proto_rawDescGZIP(), []int{19} + return file_waWeb_WAWebProtobufsWeb_proto_rawDescGZIP(), []int{21} } func (x *PremiumMessageInfo) GetServerCampaignID() string { @@ -3477,23 +3689,20 @@ func (x *PremiumMessageInfo) GetServerCampaignID() string { } type EventResponse struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` EventResponseMessageKey *waCommon.MessageKey `protobuf:"bytes,1,opt,name=eventResponseMessageKey" json:"eventResponseMessageKey,omitempty"` TimestampMS *int64 `protobuf:"varint,2,opt,name=timestampMS" json:"timestampMS,omitempty"` EventResponseMessage *waE2E.EventResponseMessage `protobuf:"bytes,3,opt,name=eventResponseMessage" json:"eventResponseMessage,omitempty"` Unread *bool `protobuf:"varint,4,opt,name=unread" json:"unread,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *EventResponse) Reset() { *x = EventResponse{} - if protoimpl.UnsafeEnabled { - mi := &file_waWeb_WAWebProtobufsWeb_proto_msgTypes[20] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waWeb_WAWebProtobufsWeb_proto_msgTypes[22] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *EventResponse) String() string { @@ -3503,8 +3712,8 @@ func (x *EventResponse) String() string { func (*EventResponse) ProtoMessage() {} func (x *EventResponse) ProtoReflect() protoreflect.Message { - mi := &file_waWeb_WAWebProtobufsWeb_proto_msgTypes[20] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_waWeb_WAWebProtobufsWeb_proto_msgTypes[22] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -3516,7 +3725,7 @@ func (x *EventResponse) ProtoReflect() protoreflect.Message { // Deprecated: Use EventResponse.ProtoReflect.Descriptor instead. func (*EventResponse) Descriptor() ([]byte, []int) { - return file_waWeb_WAWebProtobufsWeb_proto_rawDescGZIP(), []int{20} + return file_waWeb_WAWebProtobufsWeb_proto_rawDescGZIP(), []int{22} } func (x *EventResponse) GetEventResponseMessageKey() *waCommon.MessageKey { @@ -3548,21 +3757,18 @@ func (x *EventResponse) GetUnread() bool { } type LegacyMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` EventResponseMessage *waE2E.EventResponseMessage `protobuf:"bytes,1,opt,name=eventResponseMessage" json:"eventResponseMessage,omitempty"` PollVote *waE2E.PollVoteMessage `protobuf:"bytes,2,opt,name=pollVote" json:"pollVote,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *LegacyMessage) Reset() { *x = LegacyMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_waWeb_WAWebProtobufsWeb_proto_msgTypes[21] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waWeb_WAWebProtobufsWeb_proto_msgTypes[23] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *LegacyMessage) String() string { @@ -3572,8 +3778,8 @@ func (x *LegacyMessage) String() string { func (*LegacyMessage) ProtoMessage() {} func (x *LegacyMessage) ProtoReflect() protoreflect.Message { - mi := &file_waWeb_WAWebProtobufsWeb_proto_msgTypes[21] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_waWeb_WAWebProtobufsWeb_proto_msgTypes[23] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -3585,7 +3791,7 @@ func (x *LegacyMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use LegacyMessage.ProtoReflect.Descriptor instead. func (*LegacyMessage) Descriptor() ([]byte, []int) { - return file_waWeb_WAWebProtobufsWeb_proto_rawDescGZIP(), []int{21} + return file_waWeb_WAWebProtobufsWeb_proto_rawDescGZIP(), []int{23} } func (x *LegacyMessage) GetEventResponseMessage() *waE2E.EventResponseMessage { @@ -3603,20 +3809,17 @@ func (x *LegacyMessage) GetPollVote() *waE2E.PollVoteMessage { } type StatusMentionMessage struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + QuotedStatus *waE2E.Message `protobuf:"bytes,1,opt,name=quotedStatus" json:"quotedStatus,omitempty"` unknownFields protoimpl.UnknownFields - - QuotedStatus *waE2E.Message `protobuf:"bytes,1,opt,name=quotedStatus" json:"quotedStatus,omitempty"` + sizeCache protoimpl.SizeCache } func (x *StatusMentionMessage) Reset() { *x = StatusMentionMessage{} - if protoimpl.UnsafeEnabled { - mi := &file_waWeb_WAWebProtobufsWeb_proto_msgTypes[22] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_waWeb_WAWebProtobufsWeb_proto_msgTypes[24] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *StatusMentionMessage) String() string { @@ -3626,8 +3829,8 @@ func (x *StatusMentionMessage) String() string { func (*StatusMentionMessage) ProtoMessage() {} func (x *StatusMentionMessage) ProtoReflect() protoreflect.Message { - mi := &file_waWeb_WAWebProtobufsWeb_proto_msgTypes[22] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_waWeb_WAWebProtobufsWeb_proto_msgTypes[24] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -3639,7 +3842,7 @@ func (x *StatusMentionMessage) ProtoReflect() protoreflect.Message { // Deprecated: Use StatusMentionMessage.ProtoReflect.Descriptor instead. func (*StatusMentionMessage) Descriptor() ([]byte, []int) { - return file_waWeb_WAWebProtobufsWeb_proto_rawDescGZIP(), []int{22} + return file_waWeb_WAWebProtobufsWeb_proto_rawDescGZIP(), []int{24} } func (x *StatusMentionMessage) GetQuotedStatus() *waE2E.Message { @@ -3649,25 +3852,767 @@ func (x *StatusMentionMessage) GetQuotedStatus() *waE2E.Message { return nil } +type Citation struct { + state protoimpl.MessageState `protogen:"open.v1"` + Title *string `protobuf:"bytes,1,req,name=title" json:"title,omitempty"` + Subtitle *string `protobuf:"bytes,2,req,name=subtitle" json:"subtitle,omitempty"` + CmsID *string `protobuf:"bytes,3,req,name=cmsID" json:"cmsID,omitempty"` + ImageURL *string `protobuf:"bytes,4,req,name=imageURL" json:"imageURL,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *Citation) Reset() { + *x = Citation{} + mi := &file_waWeb_WAWebProtobufsWeb_proto_msgTypes[25] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *Citation) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*Citation) ProtoMessage() {} + +func (x *Citation) ProtoReflect() protoreflect.Message { + mi := &file_waWeb_WAWebProtobufsWeb_proto_msgTypes[25] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use Citation.ProtoReflect.Descriptor instead. +func (*Citation) Descriptor() ([]byte, []int) { + return file_waWeb_WAWebProtobufsWeb_proto_rawDescGZIP(), []int{25} +} + +func (x *Citation) GetTitle() string { + if x != nil && x.Title != nil { + return *x.Title + } + return "" +} + +func (x *Citation) GetSubtitle() string { + if x != nil && x.Subtitle != nil { + return *x.Subtitle + } + return "" +} + +func (x *Citation) GetCmsID() string { + if x != nil && x.CmsID != nil { + return *x.CmsID + } + return "" +} + +func (x *Citation) GetImageURL() string { + if x != nil && x.ImageURL != nil { + return *x.ImageURL + } + return "" +} + +type GroupHistoryIndividualMessageInfo struct { + state protoimpl.MessageState `protogen:"open.v1"` + BundleMessageKey *waCommon.MessageKey `protobuf:"bytes,1,opt,name=bundleMessageKey" json:"bundleMessageKey,omitempty"` + EditedAfterReceivedAsHistory *bool `protobuf:"varint,2,opt,name=editedAfterReceivedAsHistory" json:"editedAfterReceivedAsHistory,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *GroupHistoryIndividualMessageInfo) Reset() { + *x = GroupHistoryIndividualMessageInfo{} + mi := &file_waWeb_WAWebProtobufsWeb_proto_msgTypes[26] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *GroupHistoryIndividualMessageInfo) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*GroupHistoryIndividualMessageInfo) ProtoMessage() {} + +func (x *GroupHistoryIndividualMessageInfo) ProtoReflect() protoreflect.Message { + mi := &file_waWeb_WAWebProtobufsWeb_proto_msgTypes[26] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use GroupHistoryIndividualMessageInfo.ProtoReflect.Descriptor instead. +func (*GroupHistoryIndividualMessageInfo) Descriptor() ([]byte, []int) { + return file_waWeb_WAWebProtobufsWeb_proto_rawDescGZIP(), []int{26} +} + +func (x *GroupHistoryIndividualMessageInfo) GetBundleMessageKey() *waCommon.MessageKey { + if x != nil { + return x.BundleMessageKey + } + return nil +} + +func (x *GroupHistoryIndividualMessageInfo) GetEditedAfterReceivedAsHistory() bool { + if x != nil && x.EditedAfterReceivedAsHistory != nil { + return *x.EditedAfterReceivedAsHistory + } + return false +} + +type QuarantinedMessage struct { + state protoimpl.MessageState `protogen:"open.v1"` + OriginalData []byte `protobuf:"bytes,1,opt,name=originalData" json:"originalData,omitempty"` + ExtractedText *string `protobuf:"bytes,2,opt,name=extractedText" json:"extractedText,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *QuarantinedMessage) Reset() { + *x = QuarantinedMessage{} + mi := &file_waWeb_WAWebProtobufsWeb_proto_msgTypes[27] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *QuarantinedMessage) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*QuarantinedMessage) ProtoMessage() {} + +func (x *QuarantinedMessage) ProtoReflect() protoreflect.Message { + mi := &file_waWeb_WAWebProtobufsWeb_proto_msgTypes[27] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use QuarantinedMessage.ProtoReflect.Descriptor instead. +func (*QuarantinedMessage) Descriptor() ([]byte, []int) { + return file_waWeb_WAWebProtobufsWeb_proto_rawDescGZIP(), []int{27} +} + +func (x *QuarantinedMessage) GetOriginalData() []byte { + if x != nil { + return x.OriginalData + } + return nil +} + +func (x *QuarantinedMessage) GetExtractedText() string { + if x != nil && x.ExtractedText != nil { + return *x.ExtractedText + } + return "" +} + var File_waWeb_WAWebProtobufsWeb_proto protoreflect.FileDescriptor -//go:embed WAWebProtobufsWeb.pb.raw -var file_waWeb_WAWebProtobufsWeb_proto_rawDesc []byte +const file_waWeb_WAWebProtobufsWeb_proto_rawDesc = "" + + "\n" + + "\x1dwaWeb/WAWebProtobufsWeb.proto\x12\x11WAWebProtobufsWeb\x1a\x1dwaE2E/WAWebProtobufsE2E.proto\x1a\x17waCommon/WACommon.proto\"\xea[\n" + + "\x0eWebMessageInfo\x12&\n" + + "\x03key\x18\x01 \x02(\v2\x14.WACommon.MessageKeyR\x03key\x124\n" + + "\amessage\x18\x02 \x01(\v2\x1a.WAWebProtobufsE2E.MessageR\amessage\x12*\n" + + "\x10messageTimestamp\x18\x03 \x01(\x04R\x10messageTimestamp\x12@\n" + + "\x06status\x18\x04 \x01(\x0e2(.WAWebProtobufsWeb.WebMessageInfo.StatusR\x06status\x12 \n" + + "\vparticipant\x18\x05 \x01(\tR\vparticipant\x120\n" + + "\x13messageC2STimestamp\x18\x06 \x01(\x04R\x13messageC2STimestamp\x12\x16\n" + + "\x06ignore\x18\x10 \x01(\bR\x06ignore\x12\x18\n" + + "\astarred\x18\x11 \x01(\bR\astarred\x12\x1c\n" + + "\tbroadcast\x18\x12 \x01(\bR\tbroadcast\x12\x1a\n" + + "\bpushName\x18\x13 \x01(\tR\bpushName\x124\n" + + "\x15mediaCiphertextSHA256\x18\x14 \x01(\fR\x15mediaCiphertextSHA256\x12\x1c\n" + + "\tmulticast\x18\x15 \x01(\bR\tmulticast\x12\x18\n" + + "\aurlText\x18\x16 \x01(\bR\aurlText\x12\x1c\n" + + "\turlNumber\x18\x17 \x01(\bR\turlNumber\x12T\n" + + "\x0fmessageStubType\x18\x18 \x01(\x0e2*.WAWebProtobufsWeb.WebMessageInfo.StubTypeR\x0fmessageStubType\x12\x1e\n" + + "\n" + + "clearMedia\x18\x19 \x01(\bR\n" + + "clearMedia\x124\n" + + "\x15messageStubParameters\x18\x1a \x03(\tR\x15messageStubParameters\x12\x1a\n" + + "\bduration\x18\x1b \x01(\rR\bduration\x12\x16\n" + + "\x06labels\x18\x1c \x03(\tR\x06labels\x12@\n" + + "\vpaymentInfo\x18\x1d \x01(\v2\x1e.WAWebProtobufsWeb.PaymentInfoR\vpaymentInfo\x12T\n" + + "\x11finalLiveLocation\x18\x1e \x01(\v2&.WAWebProtobufsE2E.LiveLocationMessageR\x11finalLiveLocation\x12L\n" + + "\x11quotedPaymentInfo\x18\x1f \x01(\v2\x1e.WAWebProtobufsWeb.PaymentInfoR\x11quotedPaymentInfo\x128\n" + + "\x17ephemeralStartTimestamp\x18 \x01(\x04R\x17ephemeralStartTimestamp\x12,\n" + + "\x11ephemeralDuration\x18! \x01(\rR\x11ephemeralDuration\x12*\n" + + "\x10ephemeralOffToOn\x18\" \x01(\bR\x10ephemeralOffToOn\x12.\n" + + "\x12ephemeralOutOfSync\x18# \x01(\bR\x12ephemeralOutOfSync\x12^\n" + + "\x10bizPrivacyStatus\x18$ \x01(\x0e22.WAWebProtobufsWeb.WebMessageInfo.BizPrivacyStatusR\x10bizPrivacyStatus\x12(\n" + + "\x0fverifiedBizName\x18% \x01(\tR\x0fverifiedBizName\x12:\n" + + "\tmediaData\x18& \x01(\v2\x1c.WAWebProtobufsWeb.MediaDataR\tmediaData\x12@\n" + + "\vphotoChange\x18' \x01(\v2\x1e.WAWebProtobufsWeb.PhotoChangeR\vphotoChange\x12@\n" + + "\vuserReceipt\x18( \x03(\v2\x1e.WAWebProtobufsWeb.UserReceiptR\vuserReceipt\x129\n" + + "\treactions\x18) \x03(\v2\x1b.WAWebProtobufsWeb.ReactionR\treactions\x12J\n" + + "\x11quotedStickerData\x18* \x01(\v2\x1c.WAWebProtobufsWeb.MediaDataR\x11quotedStickerData\x12(\n" + + "\x0ffutureproofData\x18+ \x01(\fR\x0ffutureproofData\x12:\n" + + "\tstatusPsa\x18, \x01(\v2\x1c.WAWebProtobufsWeb.StatusPSAR\tstatusPsa\x12?\n" + + "\vpollUpdates\x18- \x03(\v2\x1d.WAWebProtobufsWeb.PollUpdateR\vpollUpdates\x12a\n" + + "\x16pollAdditionalMetadata\x18. \x01(\v2).WAWebProtobufsWeb.PollAdditionalMetadataR\x16pollAdditionalMetadata\x12\x18\n" + + "\aagentID\x18/ \x01(\tR\aagentID\x120\n" + + "\x13statusAlreadyViewed\x180 \x01(\bR\x13statusAlreadyViewed\x12$\n" + + "\rmessageSecret\x181 \x01(\fR\rmessageSecret\x12=\n" + + "\n" + + "keepInChat\x182 \x01(\v2\x1d.WAWebProtobufsWeb.KeepInChatR\n" + + "keepInChat\x12H\n" + + "\x1foriginalSelfAuthorUserJIDString\x183 \x01(\tR\x1foriginalSelfAuthorUserJIDString\x126\n" + + "\x16revokeMessageTimestamp\x184 \x01(\x04R\x16revokeMessageTimestamp\x12:\n" + + "\tpinInChat\x186 \x01(\v2\x1c.WAWebProtobufsWeb.PinInChatR\tpinInChat\x12U\n" + + "\x12premiumMessageInfo\x187 \x01(\v2%.WAWebProtobufsWeb.PremiumMessageInfoR\x12premiumMessageInfo\x12,\n" + + "\x11is1PBizBotMessage\x188 \x01(\bR\x11is1PBizBotMessage\x124\n" + + "\x15isGroupHistoryMessage\x189 \x01(\bR\x15isGroupHistoryMessage\x122\n" + + "\x14botMessageInvokerJID\x18: \x01(\tR\x14botMessageInvokerJID\x12L\n" + + "\x0fcommentMetadata\x18; \x01(\v2\".WAWebProtobufsWeb.CommentMetadataR\x0fcommentMetadata\x12H\n" + + "\x0eeventResponses\x18= \x03(\v2 .WAWebProtobufsWeb.EventResponseR\x0eeventResponses\x12U\n" + + "\x12reportingTokenInfo\x18> \x01(\v2%.WAWebProtobufsWeb.ReportingTokenInfoR\x12reportingTokenInfo\x12.\n" + + "\x12newsletterServerID\x18? \x01(\x04R\x12newsletterServerID\x12d\n" + + "\x17eventAdditionalMetadata\x18@ \x01(\v2*.WAWebProtobufsWeb.EventAdditionalMetadataR\x17eventAdditionalMetadata\x120\n" + + "\x13isMentionedInStatus\x18A \x01(\bR\x13isMentionedInStatus\x12&\n" + + "\x0estatusMentions\x18B \x03(\tR\x0estatusMentions\x12>\n" + + "\x0ftargetMessageID\x18C \x01(\v2\x14.WACommon.MessageKeyR\x0ftargetMessageID\x12E\n" + + "\rmessageAddOns\x18D \x03(\v2\x1f.WAWebProtobufsWeb.MessageAddOnR\rmessageAddOns\x12c\n" + + "\x18statusMentionMessageInfo\x18E \x01(\v2'.WAWebProtobufsWeb.StatusMentionMessageR\x18statusMentionMessageInfo\x12.\n" + + "\x12isSupportAiMessage\x18F \x01(\bR\x12isSupportAiMessage\x122\n" + + "\x14statusMentionSources\x18G \x03(\tR\x14statusMentionSources\x12K\n" + + "\x12supportAiCitations\x18H \x03(\v2\x1b.WAWebProtobufsWeb.CitationR\x12supportAiCitations\x12 \n" + + "\vbotTargetID\x18I \x01(\tR\vbotTargetID\x12\x82\x01\n" + + "!groupHistoryIndividualMessageInfo\x18J \x01(\v24.WAWebProtobufsWeb.GroupHistoryIndividualMessageInfoR!groupHistoryIndividualMessageInfo\x12a\n" + + "\x16groupHistoryBundleInfo\x18K \x01(\v2).WAWebProtobufsWeb.GroupHistoryBundleInfoR\x16groupHistoryBundleInfo\x12\x8b\x01\n" + + "$interactiveMessageAdditionalMetadata\x18L \x01(\v27.WAWebProtobufsWeb.InteractiveMessageAdditionalMetadataR$interactiveMessageAdditionalMetadata\x12U\n" + + "\x12quarantinedMessage\x18M \x01(\v2%.WAWebProtobufsWeb.QuarantinedMessageR\x12quarantinedMessage\x12&\n" + + "\x0enonJIDMentions\x18N \x01(\rR\x0enonJIDMentions\"=\n" + + "\x10BizPrivacyStatus\x12\b\n" + + "\x04E2EE\x10\x00\x12\x06\n" + + "\x02FB\x10\x02\x12\a\n" + + "\x03BSP\x10\x01\x12\x0e\n" + + "\n" + + "BSP_AND_FB\x10\x03\"\xd0;\n" + + "\bStubType\x12\v\n" + + "\aUNKNOWN\x10\x00\x12\n" + + "\n" + + "\x06REVOKE\x10\x01\x12\x0e\n" + + "\n" + + "CIPHERTEXT\x10\x02\x12\x0f\n" + + "\vFUTUREPROOF\x10\x03\x12\x1b\n" + + "\x17NON_VERIFIED_TRANSITION\x10\x04\x12\x19\n" + + "\x15UNVERIFIED_TRANSITION\x10\x05\x12\x17\n" + + "\x13VERIFIED_TRANSITION\x10\x06\x12\x18\n" + + "\x14VERIFIED_LOW_UNKNOWN\x10\a\x12\x11\n" + + "\rVERIFIED_HIGH\x10\b\x12\x1c\n" + + "\x18VERIFIED_INITIAL_UNKNOWN\x10\t\x12\x18\n" + + "\x14VERIFIED_INITIAL_LOW\x10\n" + + "\x12\x19\n" + + "\x15VERIFIED_INITIAL_HIGH\x10\v\x12#\n" + + "\x1fVERIFIED_TRANSITION_ANY_TO_NONE\x10\f\x12#\n" + + "\x1fVERIFIED_TRANSITION_ANY_TO_HIGH\x10\r\x12#\n" + + "\x1fVERIFIED_TRANSITION_HIGH_TO_LOW\x10\x0e\x12'\n" + + "#VERIFIED_TRANSITION_HIGH_TO_UNKNOWN\x10\x0f\x12&\n" + + "\"VERIFIED_TRANSITION_UNKNOWN_TO_LOW\x10\x10\x12&\n" + + "\"VERIFIED_TRANSITION_LOW_TO_UNKNOWN\x10\x11\x12#\n" + + "\x1fVERIFIED_TRANSITION_NONE_TO_LOW\x10\x12\x12'\n" + + "#VERIFIED_TRANSITION_NONE_TO_UNKNOWN\x10\x13\x12\x10\n" + + "\fGROUP_CREATE\x10\x14\x12\x18\n" + + "\x14GROUP_CHANGE_SUBJECT\x10\x15\x12\x15\n" + + "\x11GROUP_CHANGE_ICON\x10\x16\x12\x1c\n" + + "\x18GROUP_CHANGE_INVITE_LINK\x10\x17\x12\x1c\n" + + "\x18GROUP_CHANGE_DESCRIPTION\x10\x18\x12\x19\n" + + "\x15GROUP_CHANGE_RESTRICT\x10\x19\x12\x19\n" + + "\x15GROUP_CHANGE_ANNOUNCE\x10\x1a\x12\x19\n" + + "\x15GROUP_PARTICIPANT_ADD\x10\x1b\x12\x1c\n" + + "\x18GROUP_PARTICIPANT_REMOVE\x10\x1c\x12\x1d\n" + + "\x19GROUP_PARTICIPANT_PROMOTE\x10\x1d\x12\x1c\n" + + "\x18GROUP_PARTICIPANT_DEMOTE\x10\x1e\x12\x1c\n" + + "\x18GROUP_PARTICIPANT_INVITE\x10\x1f\x12\x1b\n" + + "\x17GROUP_PARTICIPANT_LEAVE\x10 \x12#\n" + + "\x1fGROUP_PARTICIPANT_CHANGE_NUMBER\x10!\x12\x14\n" + + "\x10BROADCAST_CREATE\x10\"\x12\x11\n" + + "\rBROADCAST_ADD\x10#\x12\x14\n" + + "\x10BROADCAST_REMOVE\x10$\x12\x18\n" + + "\x14GENERIC_NOTIFICATION\x10%\x12\x18\n" + + "\x14E2E_IDENTITY_CHANGED\x10&\x12\x11\n" + + "\rE2E_ENCRYPTED\x10'\x12\x15\n" + + "\x11CALL_MISSED_VOICE\x10(\x12\x15\n" + + "\x11CALL_MISSED_VIDEO\x10)\x12\x1c\n" + + "\x18INDIVIDUAL_CHANGE_NUMBER\x10*\x12\x10\n" + + "\fGROUP_DELETE\x10+\x12&\n" + + "\"GROUP_ANNOUNCE_MODE_MESSAGE_BOUNCE\x10,\x12\x1b\n" + + "\x17CALL_MISSED_GROUP_VOICE\x10-\x12\x1b\n" + + "\x17CALL_MISSED_GROUP_VIDEO\x10.\x12\x16\n" + + "\x12PAYMENT_CIPHERTEXT\x10/\x12\x17\n" + + "\x13PAYMENT_FUTUREPROOF\x100\x12,\n" + + "(PAYMENT_TRANSACTION_STATUS_UPDATE_FAILED\x101\x12.\n" + + "*PAYMENT_TRANSACTION_STATUS_UPDATE_REFUNDED\x102\x123\n" + + "/PAYMENT_TRANSACTION_STATUS_UPDATE_REFUND_FAILED\x103\x125\n" + + "1PAYMENT_TRANSACTION_STATUS_RECEIVER_PENDING_SETUP\x104\x12<\n" + + "8PAYMENT_TRANSACTION_STATUS_RECEIVER_SUCCESS_AFTER_HICCUP\x105\x12)\n" + + "%PAYMENT_ACTION_ACCOUNT_SETUP_REMINDER\x106\x12(\n" + + "$PAYMENT_ACTION_SEND_PAYMENT_REMINDER\x107\x12*\n" + + "&PAYMENT_ACTION_SEND_PAYMENT_INVITATION\x108\x12#\n" + + "\x1fPAYMENT_ACTION_REQUEST_DECLINED\x109\x12\"\n" + + "\x1ePAYMENT_ACTION_REQUEST_EXPIRED\x10:\x12$\n" + + " PAYMENT_ACTION_REQUEST_CANCELLED\x10;\x12)\n" + + "%BIZ_VERIFIED_TRANSITION_TOP_TO_BOTTOM\x10<\x12)\n" + + "%BIZ_VERIFIED_TRANSITION_BOTTOM_TO_TOP\x10=\x12\x11\n" + + "\rBIZ_INTRO_TOP\x10>\x12\x14\n" + + "\x10BIZ_INTRO_BOTTOM\x10?\x12\x13\n" + + "\x0fBIZ_NAME_CHANGE\x10@\x12\x1c\n" + + "\x18BIZ_MOVE_TO_CONSUMER_APP\x10A\x12\x1e\n" + + "\x1aBIZ_TWO_TIER_MIGRATION_TOP\x10B\x12!\n" + + "\x1dBIZ_TWO_TIER_MIGRATION_BOTTOM\x10C\x12\r\n" + + "\tOVERSIZED\x10D\x12(\n" + + "$GROUP_CHANGE_NO_FREQUENTLY_FORWARDED\x10E\x12\x1c\n" + + "\x18GROUP_V4_ADD_INVITE_SENT\x10F\x12&\n" + + "\"GROUP_PARTICIPANT_ADD_REQUEST_JOIN\x10G\x12\x1c\n" + + "\x18CHANGE_EPHEMERAL_SETTING\x10H\x12\x16\n" + + "\x12E2E_DEVICE_CHANGED\x10I\x12\x0f\n" + + "\vVIEWED_ONCE\x10J\x12\x15\n" + + "\x11E2E_ENCRYPTED_NOW\x10K\x12\"\n" + + "\x1eBLUE_MSG_BSP_FB_TO_BSP_PREMISE\x10L\x12\x1e\n" + + "\x1aBLUE_MSG_BSP_FB_TO_SELF_FB\x10M\x12#\n" + + "\x1fBLUE_MSG_BSP_FB_TO_SELF_PREMISE\x10N\x12\x1e\n" + + "\x1aBLUE_MSG_BSP_FB_UNVERIFIED\x10O\x127\n" + + "3BLUE_MSG_BSP_FB_UNVERIFIED_TO_SELF_PREMISE_VERIFIED\x10P\x12\x1c\n" + + "\x18BLUE_MSG_BSP_FB_VERIFIED\x10Q\x127\n" + + "3BLUE_MSG_BSP_FB_VERIFIED_TO_SELF_PREMISE_UNVERIFIED\x10R\x12(\n" + + "$BLUE_MSG_BSP_PREMISE_TO_SELF_PREMISE\x10S\x12#\n" + + "\x1fBLUE_MSG_BSP_PREMISE_UNVERIFIED\x10T\x12<\n" + + "8BLUE_MSG_BSP_PREMISE_UNVERIFIED_TO_SELF_PREMISE_VERIFIED\x10U\x12!\n" + + "\x1dBLUE_MSG_BSP_PREMISE_VERIFIED\x10V\x12<\n" + + "8BLUE_MSG_BSP_PREMISE_VERIFIED_TO_SELF_PREMISE_UNVERIFIED\x10W\x12*\n" + + "&BLUE_MSG_CONSUMER_TO_BSP_FB_UNVERIFIED\x10X\x12/\n" + + "+BLUE_MSG_CONSUMER_TO_BSP_PREMISE_UNVERIFIED\x10Y\x12+\n" + + "'BLUE_MSG_CONSUMER_TO_SELF_FB_UNVERIFIED\x10Z\x120\n" + + ",BLUE_MSG_CONSUMER_TO_SELF_PREMISE_UNVERIFIED\x10[\x12#\n" + + "\x1fBLUE_MSG_SELF_FB_TO_BSP_PREMISE\x10\\\x12$\n" + + " BLUE_MSG_SELF_FB_TO_SELF_PREMISE\x10]\x12\x1f\n" + + "\x1bBLUE_MSG_SELF_FB_UNVERIFIED\x10^\x128\n" + + "4BLUE_MSG_SELF_FB_UNVERIFIED_TO_SELF_PREMISE_VERIFIED\x10_\x12\x1d\n" + + "\x19BLUE_MSG_SELF_FB_VERIFIED\x10`\x128\n" + + "4BLUE_MSG_SELF_FB_VERIFIED_TO_SELF_PREMISE_UNVERIFIED\x10a\x12(\n" + + "$BLUE_MSG_SELF_PREMISE_TO_BSP_PREMISE\x10b\x12$\n" + + " BLUE_MSG_SELF_PREMISE_UNVERIFIED\x10c\x12\"\n" + + "\x1eBLUE_MSG_SELF_PREMISE_VERIFIED\x10d\x12\x16\n" + + "\x12BLUE_MSG_TO_BSP_FB\x10e\x12\x18\n" + + "\x14BLUE_MSG_TO_CONSUMER\x10f\x12\x17\n" + + "\x13BLUE_MSG_TO_SELF_FB\x10g\x12*\n" + + "&BLUE_MSG_UNVERIFIED_TO_BSP_FB_VERIFIED\x10h\x12/\n" + + "+BLUE_MSG_UNVERIFIED_TO_BSP_PREMISE_VERIFIED\x10i\x12+\n" + + "'BLUE_MSG_UNVERIFIED_TO_SELF_FB_VERIFIED\x10j\x12#\n" + + "\x1fBLUE_MSG_UNVERIFIED_TO_VERIFIED\x10k\x12*\n" + + "&BLUE_MSG_VERIFIED_TO_BSP_FB_UNVERIFIED\x10l\x12/\n" + + "+BLUE_MSG_VERIFIED_TO_BSP_PREMISE_UNVERIFIED\x10m\x12+\n" + + "'BLUE_MSG_VERIFIED_TO_SELF_FB_UNVERIFIED\x10n\x12#\n" + + "\x1fBLUE_MSG_VERIFIED_TO_UNVERIFIED\x10o\x126\n" + + "2BLUE_MSG_BSP_FB_UNVERIFIED_TO_BSP_PREMISE_VERIFIED\x10p\x122\n" + + ".BLUE_MSG_BSP_FB_UNVERIFIED_TO_SELF_FB_VERIFIED\x10q\x126\n" + + "2BLUE_MSG_BSP_FB_VERIFIED_TO_BSP_PREMISE_UNVERIFIED\x10r\x122\n" + + ".BLUE_MSG_BSP_FB_VERIFIED_TO_SELF_FB_UNVERIFIED\x10s\x127\n" + + "3BLUE_MSG_SELF_FB_UNVERIFIED_TO_BSP_PREMISE_VERIFIED\x10t\x127\n" + + "3BLUE_MSG_SELF_FB_VERIFIED_TO_BSP_PREMISE_UNVERIFIED\x10u\x12\x1c\n" + + "\x18E2E_IDENTITY_UNAVAILABLE\x10v\x12\x12\n" + + "\x0eGROUP_CREATING\x10w\x12\x17\n" + + "\x13GROUP_CREATE_FAILED\x10x\x12\x11\n" + + "\rGROUP_BOUNCED\x10y\x12\x11\n" + + "\rBLOCK_CONTACT\x10z\x12!\n" + + "\x1dEPHEMERAL_SETTING_NOT_APPLIED\x10{\x12\x0f\n" + + "\vSYNC_FAILED\x10|\x12\v\n" + + "\aSYNCING\x10}\x12\x1c\n" + + "\x18BIZ_PRIVACY_MODE_INIT_FB\x10~\x12\x1d\n" + + "\x19BIZ_PRIVACY_MODE_INIT_BSP\x10\x7f\x12\x1b\n" + + "\x16BIZ_PRIVACY_MODE_TO_FB\x10\x80\x01\x12\x1c\n" + + "\x17BIZ_PRIVACY_MODE_TO_BSP\x10\x81\x01\x12\x16\n" + + "\x11DISAPPEARING_MODE\x10\x82\x01\x12\x1c\n" + + "\x17E2E_DEVICE_FETCH_FAILED\x10\x83\x01\x12\x11\n" + + "\fADMIN_REVOKE\x10\x84\x01\x12$\n" + + "\x1fGROUP_INVITE_LINK_GROWTH_LOCKED\x10\x85\x01\x12 \n" + + "\x1bCOMMUNITY_LINK_PARENT_GROUP\x10\x86\x01\x12!\n" + + "\x1cCOMMUNITY_LINK_SIBLING_GROUP\x10\x87\x01\x12\x1d\n" + + "\x18COMMUNITY_LINK_SUB_GROUP\x10\x88\x01\x12\"\n" + + "\x1dCOMMUNITY_UNLINK_PARENT_GROUP\x10\x89\x01\x12#\n" + + "\x1eCOMMUNITY_UNLINK_SIBLING_GROUP\x10\x8a\x01\x12\x1f\n" + + "\x1aCOMMUNITY_UNLINK_SUB_GROUP\x10\x8b\x01\x12\x1d\n" + + "\x18GROUP_PARTICIPANT_ACCEPT\x10\x8c\x01\x12(\n" + + "#GROUP_PARTICIPANT_LINKED_GROUP_JOIN\x10\x8d\x01\x12\x15\n" + + "\x10COMMUNITY_CREATE\x10\x8e\x01\x12\x1b\n" + + "\x16EPHEMERAL_KEEP_IN_CHAT\x10\x8f\x01\x12+\n" + + "&GROUP_MEMBERSHIP_JOIN_APPROVAL_REQUEST\x10\x90\x01\x12(\n" + + "#GROUP_MEMBERSHIP_JOIN_APPROVAL_MODE\x10\x91\x01\x12\"\n" + + "\x1dINTEGRITY_UNLINK_PARENT_GROUP\x10\x92\x01\x12\"\n" + + "\x1dCOMMUNITY_PARTICIPANT_PROMOTE\x10\x93\x01\x12!\n" + + "\x1cCOMMUNITY_PARTICIPANT_DEMOTE\x10\x94\x01\x12#\n" + + "\x1eCOMMUNITY_PARENT_GROUP_DELETED\x10\x95\x01\x124\n" + + "/COMMUNITY_LINK_PARENT_GROUP_MEMBERSHIP_APPROVAL\x10\x96\x01\x124\n" + + "/GROUP_PARTICIPANT_JOINED_GROUP_AND_PARENT_GROUP\x10\x97\x01\x12\x1a\n" + + "\x15MASKED_THREAD_CREATED\x10\x98\x01\x12\x1b\n" + + "\x16MASKED_THREAD_UNMASKED\x10\x99\x01\x12\x18\n" + + "\x13BIZ_CHAT_ASSIGNMENT\x10\x9a\x01\x12\r\n" + + "\bCHAT_PSA\x10\x9b\x01\x12\x1f\n" + + "\x1aCHAT_POLL_CREATION_MESSAGE\x10\x9c\x01\x12\x1e\n" + + "\x19CAG_MASKED_THREAD_CREATED\x10\x9d\x01\x12+\n" + + "&COMMUNITY_PARENT_GROUP_SUBJECT_CHANGED\x10\x9e\x01\x12\x18\n" + + "\x13CAG_INVITE_AUTO_ADD\x10\x9f\x01\x12!\n" + + "\x1cBIZ_CHAT_ASSIGNMENT_UNASSIGN\x10\xa0\x01\x12\x1b\n" + + "\x16CAG_INVITE_AUTO_JOINED\x10\xa1\x01\x12!\n" + + "\x1cSCHEDULED_CALL_START_MESSAGE\x10\xa2\x01\x12\x1a\n" + + "\x15COMMUNITY_INVITE_RICH\x10\xa3\x01\x12#\n" + + "\x1eCOMMUNITY_INVITE_AUTO_ADD_RICH\x10\xa4\x01\x12\x1a\n" + + "\x15SUB_GROUP_INVITE_RICH\x10\xa5\x01\x12#\n" + + "\x1eSUB_GROUP_PARTICIPANT_ADD_RICH\x10\xa6\x01\x12%\n" + + " COMMUNITY_LINK_PARENT_GROUP_RICH\x10\xa7\x01\x12#\n" + + "\x1eCOMMUNITY_PARTICIPANT_ADD_RICH\x10\xa8\x01\x12\"\n" + + "\x1dSILENCED_UNKNOWN_CALLER_AUDIO\x10\xa9\x01\x12\"\n" + + "\x1dSILENCED_UNKNOWN_CALLER_VIDEO\x10\xaa\x01\x12\x1a\n" + + "\x15GROUP_MEMBER_ADD_MODE\x10\xab\x01\x129\n" + + "4GROUP_MEMBERSHIP_JOIN_APPROVAL_REQUEST_NON_ADMIN_ADD\x10\xac\x01\x12!\n" + + "\x1cCOMMUNITY_CHANGE_DESCRIPTION\x10\xad\x01\x12\x12\n" + + "\rSENDER_INVITE\x10\xae\x01\x12\x14\n" + + "\x0fRECEIVER_INVITE\x10\xaf\x01\x12(\n" + + "#COMMUNITY_ALLOW_MEMBER_ADDED_GROUPS\x10\xb0\x01\x12\x1b\n" + + "\x16PINNED_MESSAGE_IN_CHAT\x10\xb1\x01\x12!\n" + + "\x1cPAYMENT_INVITE_SETUP_INVITER\x10\xb2\x01\x12.\n" + + ")PAYMENT_INVITE_SETUP_INVITEE_RECEIVE_ONLY\x10\xb3\x01\x122\n" + + "-PAYMENT_INVITE_SETUP_INVITEE_SEND_AND_RECEIVE\x10\xb4\x01\x12\x1c\n" + + "\x17LINKED_GROUP_CALL_START\x10\xb5\x01\x12#\n" + + "\x1eREPORT_TO_ADMIN_ENABLED_STATUS\x10\xb6\x01\x12\x1a\n" + + "\x15EMPTY_SUBGROUP_CREATE\x10\xb7\x01\x12\x1a\n" + + "\x15SCHEDULED_CALL_CANCEL\x10\xb8\x01\x12+\n" + + "&SUBGROUP_ADMIN_TRIGGERED_AUTO_ADD_RICH\x10\xb9\x01\x12(\n" + + "#GROUP_CHANGE_RECENT_HISTORY_SHARING\x10\xba\x01\x12$\n" + + "\x1fPAID_MESSAGE_SERVER_CAMPAIGN_ID\x10\xbb\x01\x12\x18\n" + + "\x13GENERAL_CHAT_CREATE\x10\xbc\x01\x12\x15\n" + + "\x10GENERAL_CHAT_ADD\x10\xbd\x01\x12#\n" + + "\x1eGENERAL_CHAT_AUTO_ADD_DISABLED\x10\xbe\x01\x12 \n" + + "\x1bSUGGESTED_SUBGROUP_ANNOUNCE\x10\xbf\x01\x12!\n" + + "\x1cBIZ_BOT_1P_MESSAGING_ENABLED\x10\xc0\x01\x12\x14\n" + + "\x0fCHANGE_USERNAME\x10\xc1\x01\x12\x1f\n" + + "\x1aBIZ_COEX_PRIVACY_INIT_SELF\x10\xc2\x01\x12%\n" + + " BIZ_COEX_PRIVACY_TRANSITION_SELF\x10\xc3\x01\x12\x19\n" + + "\x14SUPPORT_AI_EDUCATION\x10\xc4\x01\x12!\n" + + "\x1cBIZ_BOT_3P_MESSAGING_ENABLED\x10\xc5\x01\x12\x1b\n" + + "\x16REMINDER_SETUP_MESSAGE\x10\xc6\x01\x12\x1a\n" + + "\x15REMINDER_SENT_MESSAGE\x10\xc7\x01\x12\x1c\n" + + "\x17REMINDER_CANCEL_MESSAGE\x10\xc8\x01\x12\x1a\n" + + "\x15BIZ_COEX_PRIVACY_INIT\x10\xc9\x01\x12 \n" + + "\x1bBIZ_COEX_PRIVACY_TRANSITION\x10\xca\x01\x12\x16\n" + + "\x11GROUP_DEACTIVATED\x10\xcb\x01\x12'\n" + + "\"COMMUNITY_DEACTIVATE_SIBLING_GROUP\x10\xcc\x01\x12\x12\n" + + "\rEVENT_UPDATED\x10\xcd\x01\x12\x13\n" + + "\x0eEVENT_CANCELED\x10\xce\x01\x12\x1c\n" + + "\x17COMMUNITY_OWNER_UPDATED\x10\xcf\x01\x12*\n" + + "%COMMUNITY_SUB_GROUP_VISIBILITY_HIDDEN\x10\xd0\x01\x12$\n" + + "\x1fCAPI_GROUP_NE2EE_SYSTEM_MESSAGE\x10\xd1\x01\x12\x13\n" + + "\x0eSTATUS_MENTION\x10\xd2\x01\x12!\n" + + "\x1cUSER_CONTROLS_SYSTEM_MESSAGE\x10\xd3\x01\x12\x1b\n" + + "\x16SUPPORT_SYSTEM_MESSAGE\x10\xd4\x01\x12\x0f\n" + + "\n" + + "CHANGE_LID\x10\xd5\x01\x121\n" + + ",BIZ_CUSTOMER_3PD_DATA_SHARING_OPT_IN_MESSAGE\x10\xd6\x01\x122\n" + + "-BIZ_CUSTOMER_3PD_DATA_SHARING_OPT_OUT_MESSAGE\x10\xd7\x01\x12\x19\n" + + "\x14CHANGE_LIMIT_SHARING\x10\xd8\x01\x12\x1b\n" + + "\x16GROUP_MEMBER_LINK_MODE\x10\xd9\x01\x122\n" + + "-BIZ_AUTOMATICALLY_LABELED_CHAT_SYSTEM_MESSAGE\x10\xda\x01\x120\n" + + "+PHONE_NUMBER_HIDING_CHAT_DEPRECATED_MESSAGE\x10\xdb\x01\x12\x18\n" + + "\x13QUARANTINED_MESSAGE\x10\xdc\x01\x12*\n" + + "%GROUP_MEMBER_SHARE_GROUP_HISTORY_MODE\x10\xdd\x01\x12\x19\n" + + "\x14GROUP_OPEN_BOT_ADDED\x10\xde\x01\x12\x18\n" + + "\x13GROUP_TEE_BOT_ADDED\x10\xdf\x01\"X\n" + + "\x06Status\x12\t\n" + + "\x05ERROR\x10\x00\x12\v\n" + + "\aPENDING\x10\x01\x12\x0e\n" + + "\n" + + "SERVER_ACK\x10\x02\x12\x10\n" + + "\fDELIVERY_ACK\x10\x03\x12\b\n" + + "\x04READ\x10\x04\x12\n" + + "\n" + + "\x06PLAYED\x10\x05\"\xd9\f\n" + + "\vPaymentInfo\x12W\n" + + "\x12currencyDeprecated\x18\x01 \x01(\x0e2'.WAWebProtobufsWeb.PaymentInfo.CurrencyR\x12currencyDeprecated\x12\x1e\n" + + "\n" + + "amount1000\x18\x02 \x01(\x04R\n" + + "amount1000\x12 \n" + + "\vreceiverJID\x18\x03 \x01(\tR\vreceiverJID\x12=\n" + + "\x06status\x18\x04 \x01(\x0e2%.WAWebProtobufsWeb.PaymentInfo.StatusR\x06status\x122\n" + + "\x14transactionTimestamp\x18\x05 \x01(\x04R\x14transactionTimestamp\x12B\n" + + "\x11requestMessageKey\x18\x06 \x01(\v2\x14.WACommon.MessageKeyR\x11requestMessageKey\x12(\n" + + "\x0fexpiryTimestamp\x18\a \x01(\x04R\x0fexpiryTimestamp\x12$\n" + + "\rfutureproofed\x18\b \x01(\bR\rfutureproofed\x12\x1a\n" + + "\bcurrency\x18\t \x01(\tR\bcurrency\x12F\n" + + "\ttxnStatus\x18\n" + + " \x01(\x0e2(.WAWebProtobufsWeb.PaymentInfo.TxnStatusR\ttxnStatus\x12,\n" + + "\x11useNoviFiatFormat\x18\v \x01(\bR\x11useNoviFiatFormat\x12>\n" + + "\rprimaryAmount\x18\f \x01(\v2\x18.WAWebProtobufsE2E.MoneyR\rprimaryAmount\x12@\n" + + "\x0eexchangeAmount\x18\r \x01(\v2\x18.WAWebProtobufsE2E.MoneyR\x0eexchangeAmount\"\x99\x05\n" + + "\tTxnStatus\x12\v\n" + + "\aUNKNOWN\x10\x00\x12\x11\n" + + "\rPENDING_SETUP\x10\x01\x12\x1a\n" + + "\x16PENDING_RECEIVER_SETUP\x10\x02\x12\b\n" + + "\x04INIT\x10\x03\x12\v\n" + + "\aSUCCESS\x10\x04\x12\r\n" + + "\tCOMPLETED\x10\x05\x12\n" + + "\n" + + "\x06FAILED\x10\x06\x12\x0f\n" + + "\vFAILED_RISK\x10\a\x12\x15\n" + + "\x11FAILED_PROCESSING\x10\b\x12\x1e\n" + + "\x1aFAILED_RECEIVER_PROCESSING\x10\t\x12\r\n" + + "\tFAILED_DA\x10\n" + + "\x12\x13\n" + + "\x0fFAILED_DA_FINAL\x10\v\x12\x10\n" + + "\fREFUNDED_TXN\x10\f\x12\x11\n" + + "\rREFUND_FAILED\x10\r\x12\x1c\n" + + "\x18REFUND_FAILED_PROCESSING\x10\x0e\x12\x14\n" + + "\x10REFUND_FAILED_DA\x10\x0f\x12\x0f\n" + + "\vEXPIRED_TXN\x10\x10\x12\x11\n" + + "\rAUTH_CANCELED\x10\x11\x12!\n" + + "\x1dAUTH_CANCEL_FAILED_PROCESSING\x10\x12\x12\x16\n" + + "\x12AUTH_CANCEL_FAILED\x10\x13\x12\x10\n" + + "\fCOLLECT_INIT\x10\x14\x12\x13\n" + + "\x0fCOLLECT_SUCCESS\x10\x15\x12\x12\n" + + "\x0eCOLLECT_FAILED\x10\x16\x12\x17\n" + + "\x13COLLECT_FAILED_RISK\x10\x17\x12\x14\n" + + "\x10COLLECT_REJECTED\x10\x18\x12\x13\n" + + "\x0fCOLLECT_EXPIRED\x10\x19\x12\x14\n" + + "\x10COLLECT_CANCELED\x10\x1a\x12\x16\n" + + "\x12COLLECT_CANCELLING\x10\x1b\x12\r\n" + + "\tIN_REVIEW\x10\x1c\x12\x14\n" + + "\x10REVERSAL_SUCCESS\x10\x1d\x12\x14\n" + + "\x10REVERSAL_PENDING\x10\x1e\x12\x12\n" + + "\x0eREFUND_PENDING\x10\x1f\"\xcc\x01\n" + + "\x06Status\x12\x12\n" + + "\x0eUNKNOWN_STATUS\x10\x00\x12\x0e\n" + + "\n" + + "PROCESSING\x10\x01\x12\b\n" + + "\x04SENT\x10\x02\x12\x12\n" + + "\x0eNEED_TO_ACCEPT\x10\x03\x12\f\n" + + "\bCOMPLETE\x10\x04\x12\x16\n" + + "\x12COULD_NOT_COMPLETE\x10\x05\x12\f\n" + + "\bREFUNDED\x10\x06\x12\v\n" + + "\aEXPIRED\x10\a\x12\f\n" + + "\bREJECTED\x10\b\x12\r\n" + + "\tCANCELLED\x10\t\x12\x15\n" + + "\x11WAITING_FOR_PAYER\x10\n" + + "\x12\v\n" + + "\aWAITING\x10\v\")\n" + + "\bCurrency\x12\x14\n" + + "\x10UNKNOWN_CURRENCY\x10\x00\x12\a\n" + + "\x03INR\x10\x01\"\xab\x1d\n" + + "\vWebFeatures\x12I\n" + + "\rlabelsDisplay\x18\x01 \x01(\x0e2#.WAWebProtobufsWeb.WebFeatures.FlagR\rlabelsDisplay\x12[\n" + + "\x16voipIndividualOutgoing\x18\x02 \x01(\x0e2#.WAWebProtobufsWeb.WebFeatures.FlagR\x16voipIndividualOutgoing\x12?\n" + + "\bgroupsV3\x18\x03 \x01(\x0e2#.WAWebProtobufsWeb.WebFeatures.FlagR\bgroupsV3\x12K\n" + + "\x0egroupsV3Create\x18\x04 \x01(\x0e2#.WAWebProtobufsWeb.WebFeatures.FlagR\x0egroupsV3Create\x12K\n" + + "\x0echangeNumberV2\x18\x05 \x01(\x0e2#.WAWebProtobufsWeb.WebFeatures.FlagR\x0echangeNumberV2\x12[\n" + + "\x16queryStatusV3Thumbnail\x18\x06 \x01(\x0e2#.WAWebProtobufsWeb.WebFeatures.FlagR\x16queryStatusV3Thumbnail\x12I\n" + + "\rliveLocations\x18\a \x01(\x0e2#.WAWebProtobufsWeb.WebFeatures.FlagR\rliveLocations\x12C\n" + + "\n" + + "queryVname\x18\b \x01(\x0e2#.WAWebProtobufsWeb.WebFeatures.FlagR\n" + + "queryVname\x12[\n" + + "\x16voipIndividualIncoming\x18\t \x01(\x0e2#.WAWebProtobufsWeb.WebFeatures.FlagR\x16voipIndividualIncoming\x12Q\n" + + "\x11quickRepliesQuery\x18\n" + + " \x01(\x0e2#.WAWebProtobufsWeb.WebFeatures.FlagR\x11quickRepliesQuery\x12?\n" + + "\bpayments\x18\v \x01(\x0e2#.WAWebProtobufsWeb.WebFeatures.FlagR\bpayments\x12O\n" + + "\x10stickerPackQuery\x18\f \x01(\x0e2#.WAWebProtobufsWeb.WebFeatures.FlagR\x10stickerPackQuery\x12S\n" + + "\x12liveLocationsFinal\x18\r \x01(\x0e2#.WAWebProtobufsWeb.WebFeatures.FlagR\x12liveLocationsFinal\x12C\n" + + "\n" + + "labelsEdit\x18\x0e \x01(\x0e2#.WAWebProtobufsWeb.WebFeatures.FlagR\n" + + "labelsEdit\x12E\n" + + "\vmediaUpload\x18\x0f \x01(\x0e2#.WAWebProtobufsWeb.WebFeatures.FlagR\vmediaUpload\x12e\n" + + "\x1bmediaUploadRichQuickReplies\x18\x12 \x01(\x0e2#.WAWebProtobufsWeb.WebFeatures.FlagR\x1bmediaUploadRichQuickReplies\x12=\n" + + "\avnameV2\x18\x13 \x01(\x0e2#.WAWebProtobufsWeb.WebFeatures.FlagR\avnameV2\x12O\n" + + "\x10videoPlaybackURL\x18\x14 \x01(\x0e2#.WAWebProtobufsWeb.WebFeatures.FlagR\x10videoPlaybackURL\x12I\n" + + "\rstatusRanking\x18\x15 \x01(\x0e2#.WAWebProtobufsWeb.WebFeatures.FlagR\rstatusRanking\x12U\n" + + "\x13voipIndividualVideo\x18\x16 \x01(\x0e2#.WAWebProtobufsWeb.WebFeatures.FlagR\x13voipIndividualVideo\x12S\n" + + "\x12thirdPartyStickers\x18\x17 \x01(\x0e2#.WAWebProtobufsWeb.WebFeatures.FlagR\x12thirdPartyStickers\x12c\n" + + "\x1afrequentlyForwardedSetting\x18\x18 \x01(\x0e2#.WAWebProtobufsWeb.WebFeatures.FlagR\x1afrequentlyForwardedSetting\x12[\n" + + "\x16groupsV4JoinPermission\x18\x19 \x01(\x0e2#.WAWebProtobufsWeb.WebFeatures.FlagR\x16groupsV4JoinPermission\x12K\n" + + "\x0erecentStickers\x18\x1a \x01(\x0e2#.WAWebProtobufsWeb.WebFeatures.FlagR\x0erecentStickers\x12=\n" + + "\acatalog\x18\x1b \x01(\x0e2#.WAWebProtobufsWeb.WebFeatures.FlagR\acatalog\x12M\n" + + "\x0fstarredStickers\x18\x1c \x01(\x0e2#.WAWebProtobufsWeb.WebFeatures.FlagR\x0fstarredStickers\x12I\n" + + "\rvoipGroupCall\x18\x1d \x01(\x0e2#.WAWebProtobufsWeb.WebFeatures.FlagR\rvoipGroupCall\x12M\n" + + "\x0ftemplateMessage\x18\x1e \x01(\x0e2#.WAWebProtobufsWeb.WebFeatures.FlagR\x0ftemplateMessage\x12g\n" + + "\x1ctemplateMessageInteractivity\x18\x1f \x01(\x0e2#.WAWebProtobufsWeb.WebFeatures.FlagR\x1ctemplateMessageInteractivity\x12Q\n" + + "\x11ephemeralMessages\x18 \x01(\x0e2#.WAWebProtobufsWeb.WebFeatures.FlagR\x11ephemeralMessages\x12U\n" + + "\x13e2ENotificationSync\x18! \x01(\x0e2#.WAWebProtobufsWeb.WebFeatures.FlagR\x13e2ENotificationSync\x12O\n" + + "\x10recentStickersV2\x18\" \x01(\x0e2#.WAWebProtobufsWeb.WebFeatures.FlagR\x10recentStickersV2\x12O\n" + + "\x10recentStickersV3\x18$ \x01(\x0e2#.WAWebProtobufsWeb.WebFeatures.FlagR\x10recentStickersV3\x12C\n" + + "\n" + + "userNotice\x18% \x01(\x0e2#.WAWebProtobufsWeb.WebFeatures.FlagR\n" + + "userNotice\x12=\n" + + "\asupport\x18' \x01(\x0e2#.WAWebProtobufsWeb.WebFeatures.FlagR\asupport\x12M\n" + + "\x0fgroupUiiCleanup\x18( \x01(\x0e2#.WAWebProtobufsWeb.WebFeatures.FlagR\x0fgroupUiiCleanup\x12e\n" + + "\x1bgroupDogfoodingInternalOnly\x18) \x01(\x0e2#.WAWebProtobufsWeb.WebFeatures.FlagR\x1bgroupDogfoodingInternalOnly\x12G\n" + + "\fsettingsSync\x18* \x01(\x0e2#.WAWebProtobufsWeb.WebFeatures.FlagR\fsettingsSync\x12A\n" + + "\tarchiveV2\x18+ \x01(\x0e2#.WAWebProtobufsWeb.WebFeatures.FlagR\tarchiveV2\x12c\n" + + "\x1aephemeralAllowGroupMembers\x18, \x01(\x0e2#.WAWebProtobufsWeb.WebFeatures.FlagR\x1aephemeralAllowGroupMembers\x12W\n" + + "\x14ephemeral24HDuration\x18- \x01(\x0e2#.WAWebProtobufsWeb.WebFeatures.FlagR\x14ephemeral24HDuration\x12K\n" + + "\x0emdForceUpgrade\x18. \x01(\x0e2#.WAWebProtobufsWeb.WebFeatures.FlagR\x0emdForceUpgrade\x12O\n" + + "\x10disappearingMode\x18/ \x01(\x0e2#.WAWebProtobufsWeb.WebFeatures.FlagR\x10disappearingMode\x12_\n" + + "\x18externalMdOptInAvailable\x180 \x01(\x0e2#.WAWebProtobufsWeb.WebFeatures.FlagR\x18externalMdOptInAvailable\x12_\n" + + "\x18noDeleteMessageTimeLimit\x181 \x01(\x0e2#.WAWebProtobufsWeb.WebFeatures.FlagR\x18noDeleteMessageTimeLimit\"K\n" + + "\x04Flag\x12\x0f\n" + + "\vNOT_STARTED\x10\x00\x12\x11\n" + + "\rFORCE_UPGRADE\x10\x01\x12\x0f\n" + + "\vDEVELOPMENT\x10\x02\x12\x0e\n" + + "\n" + + "PRODUCTION\x10\x03\"\xea\x02\n" + + "\tPinInChat\x125\n" + + "\x04type\x18\x01 \x01(\x0e2!.WAWebProtobufsWeb.PinInChat.TypeR\x04type\x12&\n" + + "\x03key\x18\x02 \x01(\v2\x14.WACommon.MessageKeyR\x03key\x12,\n" + + "\x11senderTimestampMS\x18\x03 \x01(\x03R\x11senderTimestampMS\x12,\n" + + "\x11serverTimestampMS\x18\x04 \x01(\x03R\x11serverTimestampMS\x12d\n" + + "\x17messageAddOnContextInfo\x18\x05 \x01(\v2*.WAWebProtobufsWeb.MessageAddOnContextInfoR\x17messageAddOnContextInfo\"<\n" + + "\x04Type\x12\x10\n" + + "\fUNKNOWN_TYPE\x10\x00\x12\x0f\n" + + "\vPIN_FOR_ALL\x10\x01\x12\x11\n" + + "\rUNPIN_FOR_ALL\x10\x02\"\x91\x05\n" + + "\fMessageAddOn\x12\\\n" + + "\x10messageAddOnType\x18\x01 \x01(\x0e20.WAWebProtobufsWeb.MessageAddOn.MessageAddOnTypeR\x10messageAddOnType\x12>\n" + + "\fmessageAddOn\x18\x02 \x01(\v2\x1a.WAWebProtobufsE2E.MessageR\fmessageAddOn\x12,\n" + + "\x11senderTimestampMS\x18\x03 \x01(\x03R\x11senderTimestampMS\x12,\n" + + "\x11serverTimestampMS\x18\x04 \x01(\x03R\x11serverTimestampMS\x12@\n" + + "\x06status\x18\x05 \x01(\x0e2(.WAWebProtobufsWeb.WebMessageInfo.StatusR\x06status\x12V\n" + + "\x10addOnContextInfo\x18\x06 \x01(\v2*.WAWebProtobufsWeb.MessageAddOnContextInfoR\x10addOnContextInfo\x12>\n" + + "\x0fmessageAddOnKey\x18\a \x01(\v2\x14.WACommon.MessageKeyR\x0fmessageAddOnKey\x12F\n" + + "\rlegacyMessage\x18\b \x01(\v2 .WAWebProtobufsWeb.LegacyMessageR\rlegacyMessage\"e\n" + + "\x10MessageAddOnType\x12\r\n" + + "\tUNDEFINED\x10\x00\x12\f\n" + + "\bREACTION\x10\x01\x12\x12\n" + + "\x0eEVENT_RESPONSE\x10\x02\x12\x0f\n" + + "\vPOLL_UPDATE\x10\x03\x12\x0f\n" + + "\vPIN_IN_CHAT\x10\x04\"\xe0\x02\n" + + "\x16GroupHistoryBundleInfo\x12o\n" + + "\x1edeprecatedMessageHistoryBundle\x18\x01 \x01(\v2'.WAWebProtobufsE2E.MessageHistoryBundleR\x1edeprecatedMessageHistoryBundle\x12Z\n" + + "\fprocessState\x18\x02 \x01(\x0e26.WAWebProtobufsWeb.GroupHistoryBundleInfo.ProcessStateR\fprocessState\"y\n" + + "\fProcessState\x12\x10\n" + + "\fNOT_INJECTED\x10\x00\x12\f\n" + + "\bINJECTED\x10\x01\x12\x14\n" + + "\x10INJECTED_PARTIAL\x10\x02\x12\x14\n" + + "\x10INJECTION_FAILED\x10\x03\x12\x1d\n" + + "\x19INJECTION_FAILED_NO_RETRY\x10\x04\"s\n" + + "\x0fCommentMetadata\x12@\n" + + "\x10commentParentKey\x18\x01 \x01(\v2\x14.WACommon.MessageKeyR\x10commentParentKey\x12\x1e\n" + + "\n" + + "replyCount\x18\x02 \x01(\rR\n" + + "replyCount\"\xd1\x01\n" + + "\x14WebNotificationsInfo\x12\x1c\n" + + "\ttimestamp\x18\x02 \x01(\x04R\ttimestamp\x12 \n" + + "\vunreadChats\x18\x03 \x01(\rR\vunreadChats\x12.\n" + + "\x12notifyMessageCount\x18\x04 \x01(\rR\x12notifyMessageCount\x12I\n" + + "\x0enotifyMessages\x18\x05 \x03(\v2!.WAWebProtobufsWeb.WebMessageInfoR\x0enotifyMessages\"\xc5\x01\n" + + "\x17NotificationMessageInfo\x12&\n" + + "\x03key\x18\x01 \x01(\v2\x14.WACommon.MessageKeyR\x03key\x124\n" + + "\amessage\x18\x02 \x01(\v2\x1a.WAWebProtobufsE2E.MessageR\amessage\x12*\n" + + "\x10messageTimestamp\x18\x03 \x01(\x04R\x10messageTimestamp\x12 \n" + + "\vparticipant\x18\x04 \x01(\tR\vparticipant\"8\n" + + "\x12ReportingTokenInfo\x12\"\n" + + "\freportingTag\x18\x01 \x01(\fR\freportingTag\")\n" + + "\tMediaData\x12\x1c\n" + + "\tlocalPath\x18\x01 \x01(\tR\tlocalPath\"e\n" + + "\vPhotoChange\x12\x1a\n" + + "\boldPhoto\x18\x01 \x01(\fR\boldPhoto\x12\x1a\n" + + "\bnewPhoto\x18\x02 \x01(\fR\bnewPhoto\x12\x1e\n" + + "\n" + + "newPhotoID\x18\x03 \x01(\rR\n" + + "newPhotoID\"m\n" + + "\tStatusPSA\x12\x1e\n" + + "\n" + + "campaignID\x18, \x02(\x04R\n" + + "campaignID\x12@\n" + + "\x1bcampaignExpirationTimestamp\x18- \x01(\x04R\x1bcampaignExpirationTimestamp\"\xff\x01\n" + + "\vUserReceipt\x12\x18\n" + + "\auserJID\x18\x01 \x02(\tR\auserJID\x12*\n" + + "\x10receiptTimestamp\x18\x02 \x01(\x03R\x10receiptTimestamp\x12$\n" + + "\rreadTimestamp\x18\x03 \x01(\x03R\rreadTimestamp\x12(\n" + + "\x0fplayedTimestamp\x18\x04 \x01(\x03R\x0fplayedTimestamp\x12*\n" + + "\x10pendingDeviceJID\x18\x05 \x03(\tR\x10pendingDeviceJID\x12.\n" + + "\x12deliveredDeviceJID\x18\x06 \x03(\tR\x12deliveredDeviceJID\"\xae\x01\n" + + "\bReaction\x12&\n" + + "\x03key\x18\x01 \x01(\v2\x14.WACommon.MessageKeyR\x03key\x12\x12\n" + + "\x04text\x18\x02 \x01(\tR\x04text\x12 \n" + + "\vgroupingKey\x18\x03 \x01(\tR\vgroupingKey\x12,\n" + + "\x11senderTimestampMS\x18\x04 \x01(\x03R\x11senderTimestampMS\x12\x16\n" + + "\x06unread\x18\x05 \x01(\bR\x06unread\"\x82\x02\n" + + "\n" + + "PollUpdate\x12H\n" + + "\x14pollUpdateMessageKey\x18\x01 \x01(\v2\x14.WACommon.MessageKeyR\x14pollUpdateMessageKey\x126\n" + + "\x04vote\x18\x02 \x01(\v2\".WAWebProtobufsE2E.PollVoteMessageR\x04vote\x12,\n" + + "\x11senderTimestampMS\x18\x03 \x01(\x03R\x11senderTimestampMS\x12,\n" + + "\x11serverTimestampMS\x18\x04 \x01(\x03R\x11serverTimestampMS\x12\x16\n" + + "\x06unread\x18\x05 \x01(\bR\x06unread\"B\n" + + "\x16PollAdditionalMetadata\x12(\n" + + "\x0fpollInvalidated\x18\x01 \x01(\bR\x0fpollInvalidated\"\\\n" + + "$InteractiveMessageAdditionalMetadata\x124\n" + + "\x15isGalaxyFlowCompleted\x18\x01 \x01(\bR\x15isGalaxyFlowCompleted\"3\n" + + "\x17EventAdditionalMetadata\x12\x18\n" + + "\aisStale\x18\x01 \x01(\bR\aisStale\"\x91\x02\n" + + "\n" + + "KeepInChat\x127\n" + + "\bkeepType\x18\x01 \x01(\x0e2\x1b.WAWebProtobufsE2E.KeepTypeR\bkeepType\x12(\n" + + "\x0fserverTimestamp\x18\x02 \x01(\x03R\x0fserverTimestamp\x12&\n" + + "\x03key\x18\x03 \x01(\v2\x14.WACommon.MessageKeyR\x03key\x12\x1c\n" + + "\tdeviceJID\x18\x04 \x01(\tR\tdeviceJID\x12,\n" + + "\x11clientTimestampMS\x18\x05 \x01(\x03R\x11clientTimestampMS\x12,\n" + + "\x11serverTimestampMS\x18\x06 \x01(\x03R\x11serverTimestampMS\"\xcf\x01\n" + + "\x17MessageAddOnContextInfo\x12>\n" + + "\x1amessageAddOnDurationInSecs\x18\x01 \x01(\rR\x1amessageAddOnDurationInSecs\x12t\n" + + "\x16messageAddOnExpiryType\x18\x02 \x01(\x0e2<.WAWebProtobufsE2E.MessageContextInfo.MessageAddonExpiryTypeR\x16messageAddOnExpiryType\"@\n" + + "\x12PremiumMessageInfo\x12*\n" + + "\x10serverCampaignID\x18\x01 \x01(\tR\x10serverCampaignID\"\xf6\x01\n" + + "\rEventResponse\x12N\n" + + "\x17eventResponseMessageKey\x18\x01 \x01(\v2\x14.WACommon.MessageKeyR\x17eventResponseMessageKey\x12 \n" + + "\vtimestampMS\x18\x02 \x01(\x03R\vtimestampMS\x12[\n" + + "\x14eventResponseMessage\x18\x03 \x01(\v2'.WAWebProtobufsE2E.EventResponseMessageR\x14eventResponseMessage\x12\x16\n" + + "\x06unread\x18\x04 \x01(\bR\x06unread\"\xac\x01\n" + + "\rLegacyMessage\x12[\n" + + "\x14eventResponseMessage\x18\x01 \x01(\v2'.WAWebProtobufsE2E.EventResponseMessageR\x14eventResponseMessage\x12>\n" + + "\bpollVote\x18\x02 \x01(\v2\".WAWebProtobufsE2E.PollVoteMessageR\bpollVote\"V\n" + + "\x14StatusMentionMessage\x12>\n" + + "\fquotedStatus\x18\x01 \x01(\v2\x1a.WAWebProtobufsE2E.MessageR\fquotedStatus\"n\n" + + "\bCitation\x12\x14\n" + + "\x05title\x18\x01 \x02(\tR\x05title\x12\x1a\n" + + "\bsubtitle\x18\x02 \x02(\tR\bsubtitle\x12\x14\n" + + "\x05cmsID\x18\x03 \x02(\tR\x05cmsID\x12\x1a\n" + + "\bimageURL\x18\x04 \x02(\tR\bimageURL\"\xa9\x01\n" + + "!GroupHistoryIndividualMessageInfo\x12@\n" + + "\x10bundleMessageKey\x18\x01 \x01(\v2\x14.WACommon.MessageKeyR\x10bundleMessageKey\x12B\n" + + "\x1ceditedAfterReceivedAsHistory\x18\x02 \x01(\bR\x1ceditedAfterReceivedAsHistory\"^\n" + + "\x12QuarantinedMessage\x12\"\n" + + "\foriginalData\x18\x01 \x01(\fR\foriginalData\x12$\n" + + "\rextractedText\x18\x02 \x01(\tR\rextractedTextB!Z\x1fgo.mau.fi/whatsmeow/proto/waWeb" var ( file_waWeb_WAWebProtobufsWeb_proto_rawDescOnce sync.Once - file_waWeb_WAWebProtobufsWeb_proto_rawDescData = file_waWeb_WAWebProtobufsWeb_proto_rawDesc + file_waWeb_WAWebProtobufsWeb_proto_rawDescData []byte ) func file_waWeb_WAWebProtobufsWeb_proto_rawDescGZIP() []byte { file_waWeb_WAWebProtobufsWeb_proto_rawDescOnce.Do(func() { - file_waWeb_WAWebProtobufsWeb_proto_rawDescData = protoimpl.X.CompressGZIP(file_waWeb_WAWebProtobufsWeb_proto_rawDescData) + file_waWeb_WAWebProtobufsWeb_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_waWeb_WAWebProtobufsWeb_proto_rawDesc), len(file_waWeb_WAWebProtobufsWeb_proto_rawDesc))) }) return file_waWeb_WAWebProtobufsWeb_proto_rawDescData } -var file_waWeb_WAWebProtobufsWeb_proto_enumTypes = make([]protoimpl.EnumInfo, 9) -var file_waWeb_WAWebProtobufsWeb_proto_msgTypes = make([]protoimpl.MessageInfo, 23) +var file_waWeb_WAWebProtobufsWeb_proto_enumTypes = make([]protoimpl.EnumInfo, 10) +var file_waWeb_WAWebProtobufsWeb_proto_msgTypes = make([]protoimpl.MessageInfo, 28) var file_waWeb_WAWebProtobufsWeb_proto_goTypes = []any{ (WebMessageInfo_BizPrivacyStatus)(0), // 0: WAWebProtobufsWeb.WebMessageInfo.BizPrivacyStatus (WebMessageInfo_StubType)(0), // 1: WAWebProtobufsWeb.WebMessageInfo.StubType @@ -3678,145 +4623,160 @@ var file_waWeb_WAWebProtobufsWeb_proto_goTypes = []any{ (WebFeatures_Flag)(0), // 6: WAWebProtobufsWeb.WebFeatures.Flag (PinInChat_Type)(0), // 7: WAWebProtobufsWeb.PinInChat.Type (MessageAddOn_MessageAddOnType)(0), // 8: WAWebProtobufsWeb.MessageAddOn.MessageAddOnType - (*WebMessageInfo)(nil), // 9: WAWebProtobufsWeb.WebMessageInfo - (*PaymentInfo)(nil), // 10: WAWebProtobufsWeb.PaymentInfo - (*WebFeatures)(nil), // 11: WAWebProtobufsWeb.WebFeatures - (*PinInChat)(nil), // 12: WAWebProtobufsWeb.PinInChat - (*MessageAddOn)(nil), // 13: WAWebProtobufsWeb.MessageAddOn - (*CommentMetadata)(nil), // 14: WAWebProtobufsWeb.CommentMetadata - (*WebNotificationsInfo)(nil), // 15: WAWebProtobufsWeb.WebNotificationsInfo - (*NotificationMessageInfo)(nil), // 16: WAWebProtobufsWeb.NotificationMessageInfo - (*ReportingTokenInfo)(nil), // 17: WAWebProtobufsWeb.ReportingTokenInfo - (*MediaData)(nil), // 18: WAWebProtobufsWeb.MediaData - (*PhotoChange)(nil), // 19: WAWebProtobufsWeb.PhotoChange - (*StatusPSA)(nil), // 20: WAWebProtobufsWeb.StatusPSA - (*UserReceipt)(nil), // 21: WAWebProtobufsWeb.UserReceipt - (*Reaction)(nil), // 22: WAWebProtobufsWeb.Reaction - (*PollUpdate)(nil), // 23: WAWebProtobufsWeb.PollUpdate - (*PollAdditionalMetadata)(nil), // 24: WAWebProtobufsWeb.PollAdditionalMetadata - (*EventAdditionalMetadata)(nil), // 25: WAWebProtobufsWeb.EventAdditionalMetadata - (*KeepInChat)(nil), // 26: WAWebProtobufsWeb.KeepInChat - (*MessageAddOnContextInfo)(nil), // 27: WAWebProtobufsWeb.MessageAddOnContextInfo - (*PremiumMessageInfo)(nil), // 28: WAWebProtobufsWeb.PremiumMessageInfo - (*EventResponse)(nil), // 29: WAWebProtobufsWeb.EventResponse - (*LegacyMessage)(nil), // 30: WAWebProtobufsWeb.LegacyMessage - (*StatusMentionMessage)(nil), // 31: WAWebProtobufsWeb.StatusMentionMessage - (*waCommon.MessageKey)(nil), // 32: WACommon.MessageKey - (*waE2E.Message)(nil), // 33: WAWebProtobufsE2E.Message - (*waE2E.LiveLocationMessage)(nil), // 34: WAWebProtobufsE2E.LiveLocationMessage - (*waE2E.Money)(nil), // 35: WAWebProtobufsE2E.Money - (*waE2E.PollVoteMessage)(nil), // 36: WAWebProtobufsE2E.PollVoteMessage - (waE2E.KeepType)(0), // 37: WAWebProtobufsE2E.KeepType - (waE2E.MessageContextInfo_MessageAddonExpiryType)(0), // 38: WAWebProtobufsE2E.MessageContextInfo.MessageAddonExpiryType - (*waE2E.EventResponseMessage)(nil), // 39: WAWebProtobufsE2E.EventResponseMessage + (GroupHistoryBundleInfo_ProcessState)(0), // 9: WAWebProtobufsWeb.GroupHistoryBundleInfo.ProcessState + (*WebMessageInfo)(nil), // 10: WAWebProtobufsWeb.WebMessageInfo + (*PaymentInfo)(nil), // 11: WAWebProtobufsWeb.PaymentInfo + (*WebFeatures)(nil), // 12: WAWebProtobufsWeb.WebFeatures + (*PinInChat)(nil), // 13: WAWebProtobufsWeb.PinInChat + (*MessageAddOn)(nil), // 14: WAWebProtobufsWeb.MessageAddOn + (*GroupHistoryBundleInfo)(nil), // 15: WAWebProtobufsWeb.GroupHistoryBundleInfo + (*CommentMetadata)(nil), // 16: WAWebProtobufsWeb.CommentMetadata + (*WebNotificationsInfo)(nil), // 17: WAWebProtobufsWeb.WebNotificationsInfo + (*NotificationMessageInfo)(nil), // 18: WAWebProtobufsWeb.NotificationMessageInfo + (*ReportingTokenInfo)(nil), // 19: WAWebProtobufsWeb.ReportingTokenInfo + (*MediaData)(nil), // 20: WAWebProtobufsWeb.MediaData + (*PhotoChange)(nil), // 21: WAWebProtobufsWeb.PhotoChange + (*StatusPSA)(nil), // 22: WAWebProtobufsWeb.StatusPSA + (*UserReceipt)(nil), // 23: WAWebProtobufsWeb.UserReceipt + (*Reaction)(nil), // 24: WAWebProtobufsWeb.Reaction + (*PollUpdate)(nil), // 25: WAWebProtobufsWeb.PollUpdate + (*PollAdditionalMetadata)(nil), // 26: WAWebProtobufsWeb.PollAdditionalMetadata + (*InteractiveMessageAdditionalMetadata)(nil), // 27: WAWebProtobufsWeb.InteractiveMessageAdditionalMetadata + (*EventAdditionalMetadata)(nil), // 28: WAWebProtobufsWeb.EventAdditionalMetadata + (*KeepInChat)(nil), // 29: WAWebProtobufsWeb.KeepInChat + (*MessageAddOnContextInfo)(nil), // 30: WAWebProtobufsWeb.MessageAddOnContextInfo + (*PremiumMessageInfo)(nil), // 31: WAWebProtobufsWeb.PremiumMessageInfo + (*EventResponse)(nil), // 32: WAWebProtobufsWeb.EventResponse + (*LegacyMessage)(nil), // 33: WAWebProtobufsWeb.LegacyMessage + (*StatusMentionMessage)(nil), // 34: WAWebProtobufsWeb.StatusMentionMessage + (*Citation)(nil), // 35: WAWebProtobufsWeb.Citation + (*GroupHistoryIndividualMessageInfo)(nil), // 36: WAWebProtobufsWeb.GroupHistoryIndividualMessageInfo + (*QuarantinedMessage)(nil), // 37: WAWebProtobufsWeb.QuarantinedMessage + (*waCommon.MessageKey)(nil), // 38: WACommon.MessageKey + (*waE2E.Message)(nil), // 39: WAWebProtobufsE2E.Message + (*waE2E.LiveLocationMessage)(nil), // 40: WAWebProtobufsE2E.LiveLocationMessage + (*waE2E.Money)(nil), // 41: WAWebProtobufsE2E.Money + (*waE2E.MessageHistoryBundle)(nil), // 42: WAWebProtobufsE2E.MessageHistoryBundle + (*waE2E.PollVoteMessage)(nil), // 43: WAWebProtobufsE2E.PollVoteMessage + (waE2E.KeepType)(0), // 44: WAWebProtobufsE2E.KeepType + (waE2E.MessageContextInfo_MessageAddonExpiryType)(0), // 45: WAWebProtobufsE2E.MessageContextInfo.MessageAddonExpiryType + (*waE2E.EventResponseMessage)(nil), // 46: WAWebProtobufsE2E.EventResponseMessage } var file_waWeb_WAWebProtobufsWeb_proto_depIdxs = []int32{ - 32, // 0: WAWebProtobufsWeb.WebMessageInfo.key:type_name -> WACommon.MessageKey - 33, // 1: WAWebProtobufsWeb.WebMessageInfo.message:type_name -> WAWebProtobufsE2E.Message + 38, // 0: WAWebProtobufsWeb.WebMessageInfo.key:type_name -> WACommon.MessageKey + 39, // 1: WAWebProtobufsWeb.WebMessageInfo.message:type_name -> WAWebProtobufsE2E.Message 2, // 2: WAWebProtobufsWeb.WebMessageInfo.status:type_name -> WAWebProtobufsWeb.WebMessageInfo.Status 1, // 3: WAWebProtobufsWeb.WebMessageInfo.messageStubType:type_name -> WAWebProtobufsWeb.WebMessageInfo.StubType - 10, // 4: WAWebProtobufsWeb.WebMessageInfo.paymentInfo:type_name -> WAWebProtobufsWeb.PaymentInfo - 34, // 5: WAWebProtobufsWeb.WebMessageInfo.finalLiveLocation:type_name -> WAWebProtobufsE2E.LiveLocationMessage - 10, // 6: WAWebProtobufsWeb.WebMessageInfo.quotedPaymentInfo:type_name -> WAWebProtobufsWeb.PaymentInfo + 11, // 4: WAWebProtobufsWeb.WebMessageInfo.paymentInfo:type_name -> WAWebProtobufsWeb.PaymentInfo + 40, // 5: WAWebProtobufsWeb.WebMessageInfo.finalLiveLocation:type_name -> WAWebProtobufsE2E.LiveLocationMessage + 11, // 6: WAWebProtobufsWeb.WebMessageInfo.quotedPaymentInfo:type_name -> WAWebProtobufsWeb.PaymentInfo 0, // 7: WAWebProtobufsWeb.WebMessageInfo.bizPrivacyStatus:type_name -> WAWebProtobufsWeb.WebMessageInfo.BizPrivacyStatus - 18, // 8: WAWebProtobufsWeb.WebMessageInfo.mediaData:type_name -> WAWebProtobufsWeb.MediaData - 19, // 9: WAWebProtobufsWeb.WebMessageInfo.photoChange:type_name -> WAWebProtobufsWeb.PhotoChange - 21, // 10: WAWebProtobufsWeb.WebMessageInfo.userReceipt:type_name -> WAWebProtobufsWeb.UserReceipt - 22, // 11: WAWebProtobufsWeb.WebMessageInfo.reactions:type_name -> WAWebProtobufsWeb.Reaction - 18, // 12: WAWebProtobufsWeb.WebMessageInfo.quotedStickerData:type_name -> WAWebProtobufsWeb.MediaData - 20, // 13: WAWebProtobufsWeb.WebMessageInfo.statusPsa:type_name -> WAWebProtobufsWeb.StatusPSA - 23, // 14: WAWebProtobufsWeb.WebMessageInfo.pollUpdates:type_name -> WAWebProtobufsWeb.PollUpdate - 24, // 15: WAWebProtobufsWeb.WebMessageInfo.pollAdditionalMetadata:type_name -> WAWebProtobufsWeb.PollAdditionalMetadata - 26, // 16: WAWebProtobufsWeb.WebMessageInfo.keepInChat:type_name -> WAWebProtobufsWeb.KeepInChat - 12, // 17: WAWebProtobufsWeb.WebMessageInfo.pinInChat:type_name -> WAWebProtobufsWeb.PinInChat - 28, // 18: WAWebProtobufsWeb.WebMessageInfo.premiumMessageInfo:type_name -> WAWebProtobufsWeb.PremiumMessageInfo - 14, // 19: WAWebProtobufsWeb.WebMessageInfo.commentMetadata:type_name -> WAWebProtobufsWeb.CommentMetadata - 29, // 20: WAWebProtobufsWeb.WebMessageInfo.eventResponses:type_name -> WAWebProtobufsWeb.EventResponse - 17, // 21: WAWebProtobufsWeb.WebMessageInfo.reportingTokenInfo:type_name -> WAWebProtobufsWeb.ReportingTokenInfo - 25, // 22: WAWebProtobufsWeb.WebMessageInfo.eventAdditionalMetadata:type_name -> WAWebProtobufsWeb.EventAdditionalMetadata - 32, // 23: WAWebProtobufsWeb.WebMessageInfo.targetMessageID:type_name -> WACommon.MessageKey - 13, // 24: WAWebProtobufsWeb.WebMessageInfo.messageAddOns:type_name -> WAWebProtobufsWeb.MessageAddOn - 31, // 25: WAWebProtobufsWeb.WebMessageInfo.statusMentionMessageInfo:type_name -> WAWebProtobufsWeb.StatusMentionMessage - 5, // 26: WAWebProtobufsWeb.PaymentInfo.currencyDeprecated:type_name -> WAWebProtobufsWeb.PaymentInfo.Currency - 4, // 27: WAWebProtobufsWeb.PaymentInfo.status:type_name -> WAWebProtobufsWeb.PaymentInfo.Status - 32, // 28: WAWebProtobufsWeb.PaymentInfo.requestMessageKey:type_name -> WACommon.MessageKey - 3, // 29: WAWebProtobufsWeb.PaymentInfo.txnStatus:type_name -> WAWebProtobufsWeb.PaymentInfo.TxnStatus - 35, // 30: WAWebProtobufsWeb.PaymentInfo.primaryAmount:type_name -> WAWebProtobufsE2E.Money - 35, // 31: WAWebProtobufsWeb.PaymentInfo.exchangeAmount:type_name -> WAWebProtobufsE2E.Money - 6, // 32: WAWebProtobufsWeb.WebFeatures.labelsDisplay:type_name -> WAWebProtobufsWeb.WebFeatures.Flag - 6, // 33: WAWebProtobufsWeb.WebFeatures.voipIndividualOutgoing:type_name -> WAWebProtobufsWeb.WebFeatures.Flag - 6, // 34: WAWebProtobufsWeb.WebFeatures.groupsV3:type_name -> WAWebProtobufsWeb.WebFeatures.Flag - 6, // 35: WAWebProtobufsWeb.WebFeatures.groupsV3Create:type_name -> WAWebProtobufsWeb.WebFeatures.Flag - 6, // 36: WAWebProtobufsWeb.WebFeatures.changeNumberV2:type_name -> WAWebProtobufsWeb.WebFeatures.Flag - 6, // 37: WAWebProtobufsWeb.WebFeatures.queryStatusV3Thumbnail:type_name -> WAWebProtobufsWeb.WebFeatures.Flag - 6, // 38: WAWebProtobufsWeb.WebFeatures.liveLocations:type_name -> WAWebProtobufsWeb.WebFeatures.Flag - 6, // 39: WAWebProtobufsWeb.WebFeatures.queryVname:type_name -> WAWebProtobufsWeb.WebFeatures.Flag - 6, // 40: WAWebProtobufsWeb.WebFeatures.voipIndividualIncoming:type_name -> WAWebProtobufsWeb.WebFeatures.Flag - 6, // 41: WAWebProtobufsWeb.WebFeatures.quickRepliesQuery:type_name -> WAWebProtobufsWeb.WebFeatures.Flag - 6, // 42: WAWebProtobufsWeb.WebFeatures.payments:type_name -> WAWebProtobufsWeb.WebFeatures.Flag - 6, // 43: WAWebProtobufsWeb.WebFeatures.stickerPackQuery:type_name -> WAWebProtobufsWeb.WebFeatures.Flag - 6, // 44: WAWebProtobufsWeb.WebFeatures.liveLocationsFinal:type_name -> WAWebProtobufsWeb.WebFeatures.Flag - 6, // 45: WAWebProtobufsWeb.WebFeatures.labelsEdit:type_name -> WAWebProtobufsWeb.WebFeatures.Flag - 6, // 46: WAWebProtobufsWeb.WebFeatures.mediaUpload:type_name -> WAWebProtobufsWeb.WebFeatures.Flag - 6, // 47: WAWebProtobufsWeb.WebFeatures.mediaUploadRichQuickReplies:type_name -> WAWebProtobufsWeb.WebFeatures.Flag - 6, // 48: WAWebProtobufsWeb.WebFeatures.vnameV2:type_name -> WAWebProtobufsWeb.WebFeatures.Flag - 6, // 49: WAWebProtobufsWeb.WebFeatures.videoPlaybackURL:type_name -> WAWebProtobufsWeb.WebFeatures.Flag - 6, // 50: WAWebProtobufsWeb.WebFeatures.statusRanking:type_name -> WAWebProtobufsWeb.WebFeatures.Flag - 6, // 51: WAWebProtobufsWeb.WebFeatures.voipIndividualVideo:type_name -> WAWebProtobufsWeb.WebFeatures.Flag - 6, // 52: WAWebProtobufsWeb.WebFeatures.thirdPartyStickers:type_name -> WAWebProtobufsWeb.WebFeatures.Flag - 6, // 53: WAWebProtobufsWeb.WebFeatures.frequentlyForwardedSetting:type_name -> WAWebProtobufsWeb.WebFeatures.Flag - 6, // 54: WAWebProtobufsWeb.WebFeatures.groupsV4JoinPermission:type_name -> WAWebProtobufsWeb.WebFeatures.Flag - 6, // 55: WAWebProtobufsWeb.WebFeatures.recentStickers:type_name -> WAWebProtobufsWeb.WebFeatures.Flag - 6, // 56: WAWebProtobufsWeb.WebFeatures.catalog:type_name -> WAWebProtobufsWeb.WebFeatures.Flag - 6, // 57: WAWebProtobufsWeb.WebFeatures.starredStickers:type_name -> WAWebProtobufsWeb.WebFeatures.Flag - 6, // 58: WAWebProtobufsWeb.WebFeatures.voipGroupCall:type_name -> WAWebProtobufsWeb.WebFeatures.Flag - 6, // 59: WAWebProtobufsWeb.WebFeatures.templateMessage:type_name -> WAWebProtobufsWeb.WebFeatures.Flag - 6, // 60: WAWebProtobufsWeb.WebFeatures.templateMessageInteractivity:type_name -> WAWebProtobufsWeb.WebFeatures.Flag - 6, // 61: WAWebProtobufsWeb.WebFeatures.ephemeralMessages:type_name -> WAWebProtobufsWeb.WebFeatures.Flag - 6, // 62: WAWebProtobufsWeb.WebFeatures.e2ENotificationSync:type_name -> WAWebProtobufsWeb.WebFeatures.Flag - 6, // 63: WAWebProtobufsWeb.WebFeatures.recentStickersV2:type_name -> WAWebProtobufsWeb.WebFeatures.Flag - 6, // 64: WAWebProtobufsWeb.WebFeatures.recentStickersV3:type_name -> WAWebProtobufsWeb.WebFeatures.Flag - 6, // 65: WAWebProtobufsWeb.WebFeatures.userNotice:type_name -> WAWebProtobufsWeb.WebFeatures.Flag - 6, // 66: WAWebProtobufsWeb.WebFeatures.support:type_name -> WAWebProtobufsWeb.WebFeatures.Flag - 6, // 67: WAWebProtobufsWeb.WebFeatures.groupUiiCleanup:type_name -> WAWebProtobufsWeb.WebFeatures.Flag - 6, // 68: WAWebProtobufsWeb.WebFeatures.groupDogfoodingInternalOnly:type_name -> WAWebProtobufsWeb.WebFeatures.Flag - 6, // 69: WAWebProtobufsWeb.WebFeatures.settingsSync:type_name -> WAWebProtobufsWeb.WebFeatures.Flag - 6, // 70: WAWebProtobufsWeb.WebFeatures.archiveV2:type_name -> WAWebProtobufsWeb.WebFeatures.Flag - 6, // 71: WAWebProtobufsWeb.WebFeatures.ephemeralAllowGroupMembers:type_name -> WAWebProtobufsWeb.WebFeatures.Flag - 6, // 72: WAWebProtobufsWeb.WebFeatures.ephemeral24HDuration:type_name -> WAWebProtobufsWeb.WebFeatures.Flag - 6, // 73: WAWebProtobufsWeb.WebFeatures.mdForceUpgrade:type_name -> WAWebProtobufsWeb.WebFeatures.Flag - 6, // 74: WAWebProtobufsWeb.WebFeatures.disappearingMode:type_name -> WAWebProtobufsWeb.WebFeatures.Flag - 6, // 75: WAWebProtobufsWeb.WebFeatures.externalMdOptInAvailable:type_name -> WAWebProtobufsWeb.WebFeatures.Flag - 6, // 76: WAWebProtobufsWeb.WebFeatures.noDeleteMessageTimeLimit:type_name -> WAWebProtobufsWeb.WebFeatures.Flag - 7, // 77: WAWebProtobufsWeb.PinInChat.type:type_name -> WAWebProtobufsWeb.PinInChat.Type - 32, // 78: WAWebProtobufsWeb.PinInChat.key:type_name -> WACommon.MessageKey - 27, // 79: WAWebProtobufsWeb.PinInChat.messageAddOnContextInfo:type_name -> WAWebProtobufsWeb.MessageAddOnContextInfo - 8, // 80: WAWebProtobufsWeb.MessageAddOn.messageAddOnType:type_name -> WAWebProtobufsWeb.MessageAddOn.MessageAddOnType - 33, // 81: WAWebProtobufsWeb.MessageAddOn.messageAddOn:type_name -> WAWebProtobufsE2E.Message - 2, // 82: WAWebProtobufsWeb.MessageAddOn.status:type_name -> WAWebProtobufsWeb.WebMessageInfo.Status - 27, // 83: WAWebProtobufsWeb.MessageAddOn.addOnContextInfo:type_name -> WAWebProtobufsWeb.MessageAddOnContextInfo - 32, // 84: WAWebProtobufsWeb.MessageAddOn.messageAddOnKey:type_name -> WACommon.MessageKey - 30, // 85: WAWebProtobufsWeb.MessageAddOn.legacyMessage:type_name -> WAWebProtobufsWeb.LegacyMessage - 32, // 86: WAWebProtobufsWeb.CommentMetadata.commentParentKey:type_name -> WACommon.MessageKey - 9, // 87: WAWebProtobufsWeb.WebNotificationsInfo.notifyMessages:type_name -> WAWebProtobufsWeb.WebMessageInfo - 32, // 88: WAWebProtobufsWeb.NotificationMessageInfo.key:type_name -> WACommon.MessageKey - 33, // 89: WAWebProtobufsWeb.NotificationMessageInfo.message:type_name -> WAWebProtobufsE2E.Message - 32, // 90: WAWebProtobufsWeb.Reaction.key:type_name -> WACommon.MessageKey - 32, // 91: WAWebProtobufsWeb.PollUpdate.pollUpdateMessageKey:type_name -> WACommon.MessageKey - 36, // 92: WAWebProtobufsWeb.PollUpdate.vote:type_name -> WAWebProtobufsE2E.PollVoteMessage - 37, // 93: WAWebProtobufsWeb.KeepInChat.keepType:type_name -> WAWebProtobufsE2E.KeepType - 32, // 94: WAWebProtobufsWeb.KeepInChat.key:type_name -> WACommon.MessageKey - 38, // 95: WAWebProtobufsWeb.MessageAddOnContextInfo.messageAddOnExpiryType:type_name -> WAWebProtobufsE2E.MessageContextInfo.MessageAddonExpiryType - 32, // 96: WAWebProtobufsWeb.EventResponse.eventResponseMessageKey:type_name -> WACommon.MessageKey - 39, // 97: WAWebProtobufsWeb.EventResponse.eventResponseMessage:type_name -> WAWebProtobufsE2E.EventResponseMessage - 39, // 98: WAWebProtobufsWeb.LegacyMessage.eventResponseMessage:type_name -> WAWebProtobufsE2E.EventResponseMessage - 36, // 99: WAWebProtobufsWeb.LegacyMessage.pollVote:type_name -> WAWebProtobufsE2E.PollVoteMessage - 33, // 100: WAWebProtobufsWeb.StatusMentionMessage.quotedStatus:type_name -> WAWebProtobufsE2E.Message - 101, // [101:101] is the sub-list for method output_type - 101, // [101:101] is the sub-list for method input_type - 101, // [101:101] is the sub-list for extension type_name - 101, // [101:101] is the sub-list for extension extendee - 0, // [0:101] is the sub-list for field type_name + 20, // 8: WAWebProtobufsWeb.WebMessageInfo.mediaData:type_name -> WAWebProtobufsWeb.MediaData + 21, // 9: WAWebProtobufsWeb.WebMessageInfo.photoChange:type_name -> WAWebProtobufsWeb.PhotoChange + 23, // 10: WAWebProtobufsWeb.WebMessageInfo.userReceipt:type_name -> WAWebProtobufsWeb.UserReceipt + 24, // 11: WAWebProtobufsWeb.WebMessageInfo.reactions:type_name -> WAWebProtobufsWeb.Reaction + 20, // 12: WAWebProtobufsWeb.WebMessageInfo.quotedStickerData:type_name -> WAWebProtobufsWeb.MediaData + 22, // 13: WAWebProtobufsWeb.WebMessageInfo.statusPsa:type_name -> WAWebProtobufsWeb.StatusPSA + 25, // 14: WAWebProtobufsWeb.WebMessageInfo.pollUpdates:type_name -> WAWebProtobufsWeb.PollUpdate + 26, // 15: WAWebProtobufsWeb.WebMessageInfo.pollAdditionalMetadata:type_name -> WAWebProtobufsWeb.PollAdditionalMetadata + 29, // 16: WAWebProtobufsWeb.WebMessageInfo.keepInChat:type_name -> WAWebProtobufsWeb.KeepInChat + 13, // 17: WAWebProtobufsWeb.WebMessageInfo.pinInChat:type_name -> WAWebProtobufsWeb.PinInChat + 31, // 18: WAWebProtobufsWeb.WebMessageInfo.premiumMessageInfo:type_name -> WAWebProtobufsWeb.PremiumMessageInfo + 16, // 19: WAWebProtobufsWeb.WebMessageInfo.commentMetadata:type_name -> WAWebProtobufsWeb.CommentMetadata + 32, // 20: WAWebProtobufsWeb.WebMessageInfo.eventResponses:type_name -> WAWebProtobufsWeb.EventResponse + 19, // 21: WAWebProtobufsWeb.WebMessageInfo.reportingTokenInfo:type_name -> WAWebProtobufsWeb.ReportingTokenInfo + 28, // 22: WAWebProtobufsWeb.WebMessageInfo.eventAdditionalMetadata:type_name -> WAWebProtobufsWeb.EventAdditionalMetadata + 38, // 23: WAWebProtobufsWeb.WebMessageInfo.targetMessageID:type_name -> WACommon.MessageKey + 14, // 24: WAWebProtobufsWeb.WebMessageInfo.messageAddOns:type_name -> WAWebProtobufsWeb.MessageAddOn + 34, // 25: WAWebProtobufsWeb.WebMessageInfo.statusMentionMessageInfo:type_name -> WAWebProtobufsWeb.StatusMentionMessage + 35, // 26: WAWebProtobufsWeb.WebMessageInfo.supportAiCitations:type_name -> WAWebProtobufsWeb.Citation + 36, // 27: WAWebProtobufsWeb.WebMessageInfo.groupHistoryIndividualMessageInfo:type_name -> WAWebProtobufsWeb.GroupHistoryIndividualMessageInfo + 15, // 28: WAWebProtobufsWeb.WebMessageInfo.groupHistoryBundleInfo:type_name -> WAWebProtobufsWeb.GroupHistoryBundleInfo + 27, // 29: WAWebProtobufsWeb.WebMessageInfo.interactiveMessageAdditionalMetadata:type_name -> WAWebProtobufsWeb.InteractiveMessageAdditionalMetadata + 37, // 30: WAWebProtobufsWeb.WebMessageInfo.quarantinedMessage:type_name -> WAWebProtobufsWeb.QuarantinedMessage + 5, // 31: WAWebProtobufsWeb.PaymentInfo.currencyDeprecated:type_name -> WAWebProtobufsWeb.PaymentInfo.Currency + 4, // 32: WAWebProtobufsWeb.PaymentInfo.status:type_name -> WAWebProtobufsWeb.PaymentInfo.Status + 38, // 33: WAWebProtobufsWeb.PaymentInfo.requestMessageKey:type_name -> WACommon.MessageKey + 3, // 34: WAWebProtobufsWeb.PaymentInfo.txnStatus:type_name -> WAWebProtobufsWeb.PaymentInfo.TxnStatus + 41, // 35: WAWebProtobufsWeb.PaymentInfo.primaryAmount:type_name -> WAWebProtobufsE2E.Money + 41, // 36: WAWebProtobufsWeb.PaymentInfo.exchangeAmount:type_name -> WAWebProtobufsE2E.Money + 6, // 37: WAWebProtobufsWeb.WebFeatures.labelsDisplay:type_name -> WAWebProtobufsWeb.WebFeatures.Flag + 6, // 38: WAWebProtobufsWeb.WebFeatures.voipIndividualOutgoing:type_name -> WAWebProtobufsWeb.WebFeatures.Flag + 6, // 39: WAWebProtobufsWeb.WebFeatures.groupsV3:type_name -> WAWebProtobufsWeb.WebFeatures.Flag + 6, // 40: WAWebProtobufsWeb.WebFeatures.groupsV3Create:type_name -> WAWebProtobufsWeb.WebFeatures.Flag + 6, // 41: WAWebProtobufsWeb.WebFeatures.changeNumberV2:type_name -> WAWebProtobufsWeb.WebFeatures.Flag + 6, // 42: WAWebProtobufsWeb.WebFeatures.queryStatusV3Thumbnail:type_name -> WAWebProtobufsWeb.WebFeatures.Flag + 6, // 43: WAWebProtobufsWeb.WebFeatures.liveLocations:type_name -> WAWebProtobufsWeb.WebFeatures.Flag + 6, // 44: WAWebProtobufsWeb.WebFeatures.queryVname:type_name -> WAWebProtobufsWeb.WebFeatures.Flag + 6, // 45: WAWebProtobufsWeb.WebFeatures.voipIndividualIncoming:type_name -> WAWebProtobufsWeb.WebFeatures.Flag + 6, // 46: WAWebProtobufsWeb.WebFeatures.quickRepliesQuery:type_name -> WAWebProtobufsWeb.WebFeatures.Flag + 6, // 47: WAWebProtobufsWeb.WebFeatures.payments:type_name -> WAWebProtobufsWeb.WebFeatures.Flag + 6, // 48: WAWebProtobufsWeb.WebFeatures.stickerPackQuery:type_name -> WAWebProtobufsWeb.WebFeatures.Flag + 6, // 49: WAWebProtobufsWeb.WebFeatures.liveLocationsFinal:type_name -> WAWebProtobufsWeb.WebFeatures.Flag + 6, // 50: WAWebProtobufsWeb.WebFeatures.labelsEdit:type_name -> WAWebProtobufsWeb.WebFeatures.Flag + 6, // 51: WAWebProtobufsWeb.WebFeatures.mediaUpload:type_name -> WAWebProtobufsWeb.WebFeatures.Flag + 6, // 52: WAWebProtobufsWeb.WebFeatures.mediaUploadRichQuickReplies:type_name -> WAWebProtobufsWeb.WebFeatures.Flag + 6, // 53: WAWebProtobufsWeb.WebFeatures.vnameV2:type_name -> WAWebProtobufsWeb.WebFeatures.Flag + 6, // 54: WAWebProtobufsWeb.WebFeatures.videoPlaybackURL:type_name -> WAWebProtobufsWeb.WebFeatures.Flag + 6, // 55: WAWebProtobufsWeb.WebFeatures.statusRanking:type_name -> WAWebProtobufsWeb.WebFeatures.Flag + 6, // 56: WAWebProtobufsWeb.WebFeatures.voipIndividualVideo:type_name -> WAWebProtobufsWeb.WebFeatures.Flag + 6, // 57: WAWebProtobufsWeb.WebFeatures.thirdPartyStickers:type_name -> WAWebProtobufsWeb.WebFeatures.Flag + 6, // 58: WAWebProtobufsWeb.WebFeatures.frequentlyForwardedSetting:type_name -> WAWebProtobufsWeb.WebFeatures.Flag + 6, // 59: WAWebProtobufsWeb.WebFeatures.groupsV4JoinPermission:type_name -> WAWebProtobufsWeb.WebFeatures.Flag + 6, // 60: WAWebProtobufsWeb.WebFeatures.recentStickers:type_name -> WAWebProtobufsWeb.WebFeatures.Flag + 6, // 61: WAWebProtobufsWeb.WebFeatures.catalog:type_name -> WAWebProtobufsWeb.WebFeatures.Flag + 6, // 62: WAWebProtobufsWeb.WebFeatures.starredStickers:type_name -> WAWebProtobufsWeb.WebFeatures.Flag + 6, // 63: WAWebProtobufsWeb.WebFeatures.voipGroupCall:type_name -> WAWebProtobufsWeb.WebFeatures.Flag + 6, // 64: WAWebProtobufsWeb.WebFeatures.templateMessage:type_name -> WAWebProtobufsWeb.WebFeatures.Flag + 6, // 65: WAWebProtobufsWeb.WebFeatures.templateMessageInteractivity:type_name -> WAWebProtobufsWeb.WebFeatures.Flag + 6, // 66: WAWebProtobufsWeb.WebFeatures.ephemeralMessages:type_name -> WAWebProtobufsWeb.WebFeatures.Flag + 6, // 67: WAWebProtobufsWeb.WebFeatures.e2ENotificationSync:type_name -> WAWebProtobufsWeb.WebFeatures.Flag + 6, // 68: WAWebProtobufsWeb.WebFeatures.recentStickersV2:type_name -> WAWebProtobufsWeb.WebFeatures.Flag + 6, // 69: WAWebProtobufsWeb.WebFeatures.recentStickersV3:type_name -> WAWebProtobufsWeb.WebFeatures.Flag + 6, // 70: WAWebProtobufsWeb.WebFeatures.userNotice:type_name -> WAWebProtobufsWeb.WebFeatures.Flag + 6, // 71: WAWebProtobufsWeb.WebFeatures.support:type_name -> WAWebProtobufsWeb.WebFeatures.Flag + 6, // 72: WAWebProtobufsWeb.WebFeatures.groupUiiCleanup:type_name -> WAWebProtobufsWeb.WebFeatures.Flag + 6, // 73: WAWebProtobufsWeb.WebFeatures.groupDogfoodingInternalOnly:type_name -> WAWebProtobufsWeb.WebFeatures.Flag + 6, // 74: WAWebProtobufsWeb.WebFeatures.settingsSync:type_name -> WAWebProtobufsWeb.WebFeatures.Flag + 6, // 75: WAWebProtobufsWeb.WebFeatures.archiveV2:type_name -> WAWebProtobufsWeb.WebFeatures.Flag + 6, // 76: WAWebProtobufsWeb.WebFeatures.ephemeralAllowGroupMembers:type_name -> WAWebProtobufsWeb.WebFeatures.Flag + 6, // 77: WAWebProtobufsWeb.WebFeatures.ephemeral24HDuration:type_name -> WAWebProtobufsWeb.WebFeatures.Flag + 6, // 78: WAWebProtobufsWeb.WebFeatures.mdForceUpgrade:type_name -> WAWebProtobufsWeb.WebFeatures.Flag + 6, // 79: WAWebProtobufsWeb.WebFeatures.disappearingMode:type_name -> WAWebProtobufsWeb.WebFeatures.Flag + 6, // 80: WAWebProtobufsWeb.WebFeatures.externalMdOptInAvailable:type_name -> WAWebProtobufsWeb.WebFeatures.Flag + 6, // 81: WAWebProtobufsWeb.WebFeatures.noDeleteMessageTimeLimit:type_name -> WAWebProtobufsWeb.WebFeatures.Flag + 7, // 82: WAWebProtobufsWeb.PinInChat.type:type_name -> WAWebProtobufsWeb.PinInChat.Type + 38, // 83: WAWebProtobufsWeb.PinInChat.key:type_name -> WACommon.MessageKey + 30, // 84: WAWebProtobufsWeb.PinInChat.messageAddOnContextInfo:type_name -> WAWebProtobufsWeb.MessageAddOnContextInfo + 8, // 85: WAWebProtobufsWeb.MessageAddOn.messageAddOnType:type_name -> WAWebProtobufsWeb.MessageAddOn.MessageAddOnType + 39, // 86: WAWebProtobufsWeb.MessageAddOn.messageAddOn:type_name -> WAWebProtobufsE2E.Message + 2, // 87: WAWebProtobufsWeb.MessageAddOn.status:type_name -> WAWebProtobufsWeb.WebMessageInfo.Status + 30, // 88: WAWebProtobufsWeb.MessageAddOn.addOnContextInfo:type_name -> WAWebProtobufsWeb.MessageAddOnContextInfo + 38, // 89: WAWebProtobufsWeb.MessageAddOn.messageAddOnKey:type_name -> WACommon.MessageKey + 33, // 90: WAWebProtobufsWeb.MessageAddOn.legacyMessage:type_name -> WAWebProtobufsWeb.LegacyMessage + 42, // 91: WAWebProtobufsWeb.GroupHistoryBundleInfo.deprecatedMessageHistoryBundle:type_name -> WAWebProtobufsE2E.MessageHistoryBundle + 9, // 92: WAWebProtobufsWeb.GroupHistoryBundleInfo.processState:type_name -> WAWebProtobufsWeb.GroupHistoryBundleInfo.ProcessState + 38, // 93: WAWebProtobufsWeb.CommentMetadata.commentParentKey:type_name -> WACommon.MessageKey + 10, // 94: WAWebProtobufsWeb.WebNotificationsInfo.notifyMessages:type_name -> WAWebProtobufsWeb.WebMessageInfo + 38, // 95: WAWebProtobufsWeb.NotificationMessageInfo.key:type_name -> WACommon.MessageKey + 39, // 96: WAWebProtobufsWeb.NotificationMessageInfo.message:type_name -> WAWebProtobufsE2E.Message + 38, // 97: WAWebProtobufsWeb.Reaction.key:type_name -> WACommon.MessageKey + 38, // 98: WAWebProtobufsWeb.PollUpdate.pollUpdateMessageKey:type_name -> WACommon.MessageKey + 43, // 99: WAWebProtobufsWeb.PollUpdate.vote:type_name -> WAWebProtobufsE2E.PollVoteMessage + 44, // 100: WAWebProtobufsWeb.KeepInChat.keepType:type_name -> WAWebProtobufsE2E.KeepType + 38, // 101: WAWebProtobufsWeb.KeepInChat.key:type_name -> WACommon.MessageKey + 45, // 102: WAWebProtobufsWeb.MessageAddOnContextInfo.messageAddOnExpiryType:type_name -> WAWebProtobufsE2E.MessageContextInfo.MessageAddonExpiryType + 38, // 103: WAWebProtobufsWeb.EventResponse.eventResponseMessageKey:type_name -> WACommon.MessageKey + 46, // 104: WAWebProtobufsWeb.EventResponse.eventResponseMessage:type_name -> WAWebProtobufsE2E.EventResponseMessage + 46, // 105: WAWebProtobufsWeb.LegacyMessage.eventResponseMessage:type_name -> WAWebProtobufsE2E.EventResponseMessage + 43, // 106: WAWebProtobufsWeb.LegacyMessage.pollVote:type_name -> WAWebProtobufsE2E.PollVoteMessage + 39, // 107: WAWebProtobufsWeb.StatusMentionMessage.quotedStatus:type_name -> WAWebProtobufsE2E.Message + 38, // 108: WAWebProtobufsWeb.GroupHistoryIndividualMessageInfo.bundleMessageKey:type_name -> WACommon.MessageKey + 109, // [109:109] is the sub-list for method output_type + 109, // [109:109] is the sub-list for method input_type + 109, // [109:109] is the sub-list for extension type_name + 109, // [109:109] is the sub-list for extension extendee + 0, // [0:109] is the sub-list for field type_name } func init() { file_waWeb_WAWebProtobufsWeb_proto_init() } @@ -3824,291 +4784,13 @@ func file_waWeb_WAWebProtobufsWeb_proto_init() { if File_waWeb_WAWebProtobufsWeb_proto != nil { return } - if !protoimpl.UnsafeEnabled { - file_waWeb_WAWebProtobufsWeb_proto_msgTypes[0].Exporter = func(v any, i int) any { - switch v := v.(*WebMessageInfo); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waWeb_WAWebProtobufsWeb_proto_msgTypes[1].Exporter = func(v any, i int) any { - switch v := v.(*PaymentInfo); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waWeb_WAWebProtobufsWeb_proto_msgTypes[2].Exporter = func(v any, i int) any { - switch v := v.(*WebFeatures); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waWeb_WAWebProtobufsWeb_proto_msgTypes[3].Exporter = func(v any, i int) any { - switch v := v.(*PinInChat); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waWeb_WAWebProtobufsWeb_proto_msgTypes[4].Exporter = func(v any, i int) any { - switch v := v.(*MessageAddOn); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waWeb_WAWebProtobufsWeb_proto_msgTypes[5].Exporter = func(v any, i int) any { - switch v := v.(*CommentMetadata); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waWeb_WAWebProtobufsWeb_proto_msgTypes[6].Exporter = func(v any, i int) any { - switch v := v.(*WebNotificationsInfo); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waWeb_WAWebProtobufsWeb_proto_msgTypes[7].Exporter = func(v any, i int) any { - switch v := v.(*NotificationMessageInfo); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waWeb_WAWebProtobufsWeb_proto_msgTypes[8].Exporter = func(v any, i int) any { - switch v := v.(*ReportingTokenInfo); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waWeb_WAWebProtobufsWeb_proto_msgTypes[9].Exporter = func(v any, i int) any { - switch v := v.(*MediaData); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waWeb_WAWebProtobufsWeb_proto_msgTypes[10].Exporter = func(v any, i int) any { - switch v := v.(*PhotoChange); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waWeb_WAWebProtobufsWeb_proto_msgTypes[11].Exporter = func(v any, i int) any { - switch v := v.(*StatusPSA); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waWeb_WAWebProtobufsWeb_proto_msgTypes[12].Exporter = func(v any, i int) any { - switch v := v.(*UserReceipt); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waWeb_WAWebProtobufsWeb_proto_msgTypes[13].Exporter = func(v any, i int) any { - switch v := v.(*Reaction); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waWeb_WAWebProtobufsWeb_proto_msgTypes[14].Exporter = func(v any, i int) any { - switch v := v.(*PollUpdate); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waWeb_WAWebProtobufsWeb_proto_msgTypes[15].Exporter = func(v any, i int) any { - switch v := v.(*PollAdditionalMetadata); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waWeb_WAWebProtobufsWeb_proto_msgTypes[16].Exporter = func(v any, i int) any { - switch v := v.(*EventAdditionalMetadata); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waWeb_WAWebProtobufsWeb_proto_msgTypes[17].Exporter = func(v any, i int) any { - switch v := v.(*KeepInChat); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waWeb_WAWebProtobufsWeb_proto_msgTypes[18].Exporter = func(v any, i int) any { - switch v := v.(*MessageAddOnContextInfo); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waWeb_WAWebProtobufsWeb_proto_msgTypes[19].Exporter = func(v any, i int) any { - switch v := v.(*PremiumMessageInfo); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waWeb_WAWebProtobufsWeb_proto_msgTypes[20].Exporter = func(v any, i int) any { - switch v := v.(*EventResponse); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waWeb_WAWebProtobufsWeb_proto_msgTypes[21].Exporter = func(v any, i int) any { - switch v := v.(*LegacyMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_waWeb_WAWebProtobufsWeb_proto_msgTypes[22].Exporter = func(v any, i int) any { - switch v := v.(*StatusMentionMessage); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_waWeb_WAWebProtobufsWeb_proto_rawDesc, - NumEnums: 9, - NumMessages: 23, + RawDescriptor: unsafe.Slice(unsafe.StringData(file_waWeb_WAWebProtobufsWeb_proto_rawDesc), len(file_waWeb_WAWebProtobufsWeb_proto_rawDesc)), + NumEnums: 10, + NumMessages: 28, NumExtensions: 0, NumServices: 0, }, @@ -4118,7 +4800,6 @@ func file_waWeb_WAWebProtobufsWeb_proto_init() { MessageInfos: file_waWeb_WAWebProtobufsWeb_proto_msgTypes, }.Build() File_waWeb_WAWebProtobufsWeb_proto = out.File - file_waWeb_WAWebProtobufsWeb_proto_rawDesc = nil file_waWeb_WAWebProtobufsWeb_proto_goTypes = nil file_waWeb_WAWebProtobufsWeb_proto_depIdxs = nil } diff --git a/vendor/go.mau.fi/whatsmeow/proto/waWeb/WAWebProtobufsWeb.pb.raw b/vendor/go.mau.fi/whatsmeow/proto/waWeb/WAWebProtobufsWeb.pb.raw deleted file mode 100644 index 4c90259aad..0000000000 Binary files a/vendor/go.mau.fi/whatsmeow/proto/waWeb/WAWebProtobufsWeb.pb.raw and /dev/null differ diff --git a/vendor/go.mau.fi/whatsmeow/proto/waWeb/WAWebProtobufsWeb.proto b/vendor/go.mau.fi/whatsmeow/proto/waWeb/WAWebProtobufsWeb.proto index 079b298870..c83fb813d2 100644 --- a/vendor/go.mau.fi/whatsmeow/proto/waWeb/WAWebProtobufsWeb.proto +++ b/vendor/go.mau.fi/whatsmeow/proto/waWeb/WAWebProtobufsWeb.proto @@ -225,6 +225,19 @@ message WebMessageInfo { COMMUNITY_SUB_GROUP_VISIBILITY_HIDDEN = 208; CAPI_GROUP_NE2EE_SYSTEM_MESSAGE = 209; STATUS_MENTION = 210; + USER_CONTROLS_SYSTEM_MESSAGE = 211; + SUPPORT_SYSTEM_MESSAGE = 212; + CHANGE_LID = 213; + BIZ_CUSTOMER_3PD_DATA_SHARING_OPT_IN_MESSAGE = 214; + BIZ_CUSTOMER_3PD_DATA_SHARING_OPT_OUT_MESSAGE = 215; + CHANGE_LIMIT_SHARING = 216; + GROUP_MEMBER_LINK_MODE = 217; + BIZ_AUTOMATICALLY_LABELED_CHAT_SYSTEM_MESSAGE = 218; + PHONE_NUMBER_HIDING_CHAT_DEPRECATED_MESSAGE = 219; + QUARANTINED_MESSAGE = 220; + GROUP_MEMBER_SHARE_GROUP_HISTORY_MODE = 221; + GROUP_OPEN_BOT_ADDED = 222; + GROUP_TEE_BOT_ADDED = 223; } enum Status { @@ -294,6 +307,15 @@ message WebMessageInfo { optional WACommon.MessageKey targetMessageID = 67; repeated MessageAddOn messageAddOns = 68; optional StatusMentionMessage statusMentionMessageInfo = 69; + optional bool isSupportAiMessage = 70; + repeated string statusMentionSources = 71; + repeated Citation supportAiCitations = 72; + optional string botTargetID = 73; + optional GroupHistoryIndividualMessageInfo groupHistoryIndividualMessageInfo = 74; + optional GroupHistoryBundleInfo groupHistoryBundleInfo = 75; + optional InteractiveMessageAdditionalMetadata interactiveMessageAdditionalMetadata = 76; + optional QuarantinedMessage quarantinedMessage = 77; + optional uint32 nonJIDMentions = 78; } message PaymentInfo { @@ -455,6 +477,19 @@ message MessageAddOn { optional LegacyMessage legacyMessage = 8; } +message GroupHistoryBundleInfo { + enum ProcessState { + NOT_INJECTED = 0; + INJECTED = 1; + INJECTED_PARTIAL = 2; + INJECTION_FAILED = 3; + INJECTION_FAILED_NO_RETRY = 4; + } + + optional WAWebProtobufsE2E.MessageHistoryBundle deprecatedMessageHistoryBundle = 1; + optional ProcessState processState = 2; +} + message CommentMetadata { optional WACommon.MessageKey commentParentKey = 1; optional uint32 replyCount = 2; @@ -522,6 +557,10 @@ message PollAdditionalMetadata { optional bool pollInvalidated = 1; } +message InteractiveMessageAdditionalMetadata { + optional bool isGalaxyFlowCompleted = 1; +} + message EventAdditionalMetadata { optional bool isStale = 1; } @@ -559,3 +598,20 @@ message LegacyMessage { message StatusMentionMessage { optional WAWebProtobufsE2E.Message quotedStatus = 1; } + +message Citation { + required string title = 1; + required string subtitle = 2; + required string cmsID = 3; + required string imageURL = 4; +} + +message GroupHistoryIndividualMessageInfo { + optional WACommon.MessageKey bundleMessageKey = 1; + optional bool editedAfterReceivedAsHistory = 2; +} + +message QuarantinedMessage { + optional bytes originalData = 1; + optional string extractedText = 2; +} diff --git a/vendor/go.mau.fi/whatsmeow/proto/waWeb/legacy.go b/vendor/go.mau.fi/whatsmeow/proto/waWeb/legacy.go deleted file mode 100644 index 468cc8e4a8..0000000000 --- a/vendor/go.mau.fi/whatsmeow/proto/waWeb/legacy.go +++ /dev/null @@ -1 +0,0 @@ -package waWeb diff --git a/vendor/go.mau.fi/whatsmeow/push.go b/vendor/go.mau.fi/whatsmeow/push.go new file mode 100644 index 0000000000..9e4a90a1b2 --- /dev/null +++ b/vendor/go.mau.fi/whatsmeow/push.go @@ -0,0 +1,108 @@ +// Copyright (c) 2024 Tulir Asokan +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. + +package whatsmeow + +import ( + "context" + "encoding/base64" + + "go.mau.fi/util/random" + + waBinary "go.mau.fi/whatsmeow/binary" + "go.mau.fi/whatsmeow/types" +) + +type PushConfig interface { + GetPushConfigAttrs() waBinary.Attrs +} + +type FCMPushConfig struct { + Token string `json:"token"` +} + +func (fpc *FCMPushConfig) GetPushConfigAttrs() waBinary.Attrs { + return waBinary.Attrs{ + "id": fpc.Token, + "num_acc": 1, + "platform": "gcm", + } +} + +type APNsPushConfig struct { + Token string `json:"token"` + VoIPToken string `json:"voip_token"` + MsgIDEncKey []byte `json:"msg_id_enc_key"` +} + +func (apc *APNsPushConfig) GetPushConfigAttrs() waBinary.Attrs { + if len(apc.MsgIDEncKey) != 32 { + apc.MsgIDEncKey = random.Bytes(32) + } + attrs := waBinary.Attrs{ + "id": apc.Token, + "platform": "apple", + "version": 2, + "reg_push": 1, + "preview": 1, + "pkey": base64.RawURLEncoding.EncodeToString(apc.MsgIDEncKey), + "background_location": 1, // or 0 + "call": "Opening.m4r", + "default": "note.m4r", + "groups": "note.m4r", + "lg": "en", + "lc": "US", + "nse_call": 0, + "nse_ver": 2, + "nse_read": 0, + "voip_payload_type": 2, + } + if apc.VoIPToken != "" { + attrs["voip"] = apc.VoIPToken + } + return attrs +} + +type WebPushConfig struct { + Endpoint string `json:"endpoint"` + Auth []byte `json:"auth"` + P256DH []byte `json:"p256dh"` +} + +func (wpc *WebPushConfig) GetPushConfigAttrs() waBinary.Attrs { + return waBinary.Attrs{ + "platform": "web", + "endpoint": wpc.Endpoint, + "auth": base64.StdEncoding.EncodeToString(wpc.Auth), + "p256dh": base64.StdEncoding.EncodeToString(wpc.P256DH), + } +} + +func (cli *Client) GetServerPushNotificationConfig(ctx context.Context) (*waBinary.Node, error) { + resp, err := cli.sendIQ(ctx, infoQuery{ + Namespace: "urn:xmpp:whatsapp:push", + Type: iqGet, + To: types.ServerJID, + Content: []waBinary.Node{{Tag: "settings"}}, + }) + return resp, err +} + +// RegisterForPushNotifications registers a token to receive push notifications for new WhatsApp messages. +// +// This is generally not necessary for anything. Don't use this if you don't know what you're doing. +func (cli *Client) RegisterForPushNotifications(ctx context.Context, pc PushConfig) error { + _, err := cli.sendIQ(ctx, infoQuery{ + Namespace: "urn:xmpp:whatsapp:push", + Type: iqSet, + To: types.ServerJID, + Content: []waBinary.Node{{ + Tag: "config", + Attrs: pc.GetPushConfigAttrs(), + }}, + }) + return err +} diff --git a/vendor/go.mau.fi/whatsmeow/qrchan.go b/vendor/go.mau.fi/whatsmeow/qrchan.go index 5401ac0efc..6e0a89c4e1 100644 --- a/vendor/go.mau.fi/whatsmeow/qrchan.go +++ b/vendor/go.mau.fi/whatsmeow/qrchan.go @@ -8,6 +8,7 @@ package whatsmeow import ( "context" + "slices" "sync" "sync/atomic" "time" @@ -58,10 +59,10 @@ type qrChannel struct { stopQRs chan struct{} } -func (qrc *qrChannel) emitQRs(evt *events.QR) { +func (qrc *qrChannel) emitQRs(codes []string) { var nextCode string for { - if len(evt.Codes) == 0 { + if len(codes) == 0 { if atomic.CompareAndSwapUint32(&qrc.closed, 0, 1) { qrc.log.Debugf("Ran out of QR codes, closing channel with status %s and disconnecting client", QRChannelTimeout) qrc.output <- QRChannelTimeout @@ -77,10 +78,10 @@ func (qrc *qrChannel) emitQRs(evt *events.QR) { return } timeout := 20 * time.Second - if len(evt.Codes) == 6 { + if len(codes) == 6 { timeout = 60 * time.Second } - nextCode, evt.Codes = evt.Codes[0], evt.Codes[1:] + nextCode, codes = codes[0], codes[1:] qrc.log.Debugf("Emitting QR code %s", nextCode) select { case qrc.output <- QRChannelItem{Code: nextCode, Timeout: timeout, Event: QRChannelEventCode}: @@ -118,7 +119,7 @@ func (qrc *qrChannel) handleEvent(rawEvt interface{}) { switch evt := rawEvt.(type) { case *events.QR: qrc.log.Debugf("Received QR code event, starting to emit codes to channel") - go qrc.emitQRs(evt) + go qrc.emitQRs(slices.Clone(evt.Codes)) return case *events.QRScannedWithoutMultidevice: qrc.log.Debugf("QR code scanned without multidevice enabled") @@ -159,7 +160,9 @@ func (qrc *qrChannel) handleEvent(rawEvt interface{}) { // The last value to be emitted will be a special event like "success", "timeout" or another error code // depending on the result of the pairing. The channel will be closed immediately after one of those. func (cli *Client) GetQRChannel(ctx context.Context) (<-chan QRChannelItem, error) { - if cli.IsConnected() { + if cli == nil { + return nil, ErrClientIsNil + } else if cli.IsConnected() { return nil, ErrQRAlreadyConnected } else if cli.Store.ID != nil { return nil, ErrQRStoreContainsID diff --git a/vendor/go.mau.fi/whatsmeow/receipt.go b/vendor/go.mau.fi/whatsmeow/receipt.go index 92121f525f..9d00b45322 100644 --- a/vendor/go.mau.fi/whatsmeow/receipt.go +++ b/vendor/go.mau.fi/whatsmeow/receipt.go @@ -7,30 +7,35 @@ package whatsmeow import ( + "context" "fmt" "time" + "github.com/rs/zerolog" + "go.mau.fi/util/ptr" + waBinary "go.mau.fi/whatsmeow/binary" "go.mau.fi/whatsmeow/types" "go.mau.fi/whatsmeow/types/events" ) -func (cli *Client) handleReceipt(node *waBinary.Node) { +func (cli *Client) handleReceipt(ctx context.Context, node *waBinary.Node) { + var cancelled bool + defer cli.maybeDeferredAck(ctx, node)(&cancelled) receipt, err := cli.parseReceipt(node) if err != nil { cli.Log.Warnf("Failed to parse receipt: %v", err) } else if receipt != nil { if receipt.Type == types.ReceiptTypeRetry { go func() { - err := cli.handleRetryReceipt(receipt, node) + err := cli.handleRetryReceipt(ctx, receipt, node) if err != nil { cli.Log.Errorf("Failed to handle retry receipt for %s/%s from %s: %v", receipt.Chat, receipt.MessageIDs[0], receipt.Sender, err) } }() } - go cli.dispatchEvent(receipt) + cancelled = cli.dispatchEvent(receipt) } - go cli.sendAck(node) } func (cli *Client) handleGroupedReceipt(partialReceipt events.Receipt, participants *waBinary.Node) { @@ -49,7 +54,7 @@ func (cli *Client) handleGroupedReceipt(partialReceipt events.Receipt, participa cli.Log.Warnf("Failed to parse user node %s in grouped receipt: %v", child.XMLString(), ag.Error()) continue } - go cli.dispatchEvent(&receipt) + cli.dispatchEvent(&receipt) } } @@ -63,6 +68,7 @@ func (cli *Client) parseReceipt(node *waBinary.Node) (*events.Receipt, error) { MessageSource: source, Timestamp: ag.UnixTime("t"), Type: types.ReceiptType(ag.OptionalString("type")), + MessageSender: ag.OptionalJIDOrEmpty("recipient"), } if source.IsGroup && source.Sender.IsEmpty() { participantTags := node.GetChildrenByTag("participants") @@ -95,7 +101,51 @@ func (cli *Client) parseReceipt(node *waBinary.Node) (*events.Receipt, error) { return &receipt, nil } -func (cli *Client) sendAck(node *waBinary.Node) { +func (cli *Client) backgroundIfAsyncAck(fn func()) { + if cli.SynchronousAck { + fn() + } else { + go fn() + } +} + +func (cli *Client) maybeDeferredAck(ctx context.Context, node *waBinary.Node) func(cancelled ...*bool) { + if cli.SynchronousAck { + return func(cancelled ...*bool) { + isCancelled := len(cancelled) > 0 && ptr.Val(cancelled[0]) + if ctx.Err() != nil || isCancelled { + zerolog.Ctx(ctx).Debug(). + AnErr("ctx_err", ctx.Err()). + Bool("cancelled", isCancelled). + Str("node_tag", node.Tag). + Msg("Not sending ack for node") + return + } + cli.sendAck(ctx, node, 0) + } + } else { + go cli.sendAck(ctx, node, 0) + return func(...*bool) {} + } +} + +const ( + NackParsingError = 487 + NackUnrecognizedStanza = 488 + NackUnrecognizedStanzaClass = 489 + NackUnrecognizedStanzaType = 490 + NackInvalidProtobuf = 491 + NackInvalidHostedCompanionStanza = 493 + NackMissingMessageSecret = 495 + NackSignalErrorOldCounter = 496 + NackMessageDeletedOnPeer = 499 + NackUnhandledError = 500 + NackUnsupportedAdminRevoke = 550 + NackUnsupportedLIDGroup = 551 + NackDBOperationFailed = 552 +) + +func (cli *Client) sendAck(ctx context.Context, node *waBinary.Node, error int) { attrs := waBinary.Attrs{ "class": node.Tag, "id": node.Attrs["id"], @@ -106,11 +156,23 @@ func (cli *Client) sendAck(node *waBinary.Node) { } if recipient, ok := node.Attrs["recipient"]; ok { attrs["recipient"] = recipient + + // TODO this hack probably needs to be removed at some point + recipientJID, ok := recipient.(types.JID) + if ok && recipientJID.Server == types.BotServer && node.Tag == "message" { + altRecipient, ok := types.BotJIDMap[recipientJID] + if ok { + attrs["recipient"] = altRecipient + } + } } if receiptType, ok := node.Attrs["type"]; node.Tag != "message" && ok { attrs["type"] = receiptType } - err := cli.sendNode(waBinary.Node{ + if error != 0 { + attrs["error"] = error + } + err := cli.sendNode(ctx, waBinary.Node{ Tag: "ack", Attrs: attrs, }) @@ -129,7 +191,7 @@ func (cli *Client) sendAck(node *waBinary.Node) { // // To mark a voice message as played, specify types.ReceiptTypePlayed as the last parameter. // Providing more than one receipt type will panic: the parameter is only a vararg for backwards compatibility. -func (cli *Client) MarkRead(ids []types.MessageID, timestamp time.Time, chat, sender types.JID, receiptTypeExtra ...types.ReceiptType) error { +func (cli *Client) MarkRead(ctx context.Context, ids []types.MessageID, timestamp time.Time, chat, sender types.JID, receiptTypeExtra ...types.ReceiptType) error { if len(ids) == 0 { return fmt.Errorf("no message IDs specified") } @@ -148,14 +210,14 @@ func (cli *Client) MarkRead(ids []types.MessageID, timestamp time.Time, chat, se "t": timestamp.Unix(), }, } - if chat.Server == types.NewsletterServer || cli.GetPrivacySettings().ReadReceipts == types.PrivacySettingNone { + if chat.Server == types.NewsletterServer || cli.GetPrivacySettings(ctx).ReadReceipts == types.PrivacySettingNone { switch receiptType { case types.ReceiptTypeRead: node.Attrs["type"] = string(types.ReceiptTypeReadSelf) // TODO change played to played-self? } } - if !sender.IsEmpty() && chat.Server != types.DefaultUserServer && chat.Server != types.MessengerServer { + if !sender.IsEmpty() && chat.Server != types.DefaultUserServer && chat.Server != types.HiddenUserServer && chat.Server != types.MessengerServer { node.Attrs["participant"] = sender.ToNonAD() } if len(ids) > 1 { @@ -169,7 +231,7 @@ func (cli *Client) MarkRead(ids []types.MessageID, timestamp time.Time, chat, se Content: children, }} } - return cli.sendNode(node) + return cli.sendNode(ctx, node) } // SetForceActiveDeliveryReceipts will force the client to send normal delivery @@ -188,6 +250,9 @@ func (cli *Client) MarkRead(ids []types.MessageID, timestamp time.Time, chat, se // Note that if you turn this off (i.e. call SetForceActiveDeliveryReceipts(false)), // receipts will act like the client is offline until SendPresence is called again. func (cli *Client) SetForceActiveDeliveryReceipts(active bool) { + if cli == nil { + return + } if active { cli.sendActiveReceipts.Store(2) } else { @@ -195,25 +260,31 @@ func (cli *Client) SetForceActiveDeliveryReceipts(active bool) { } } -func (cli *Client) sendMessageReceipt(info *types.MessageInfo) { +func buildBaseReceipt(id string, node *waBinary.Node) waBinary.Attrs { attrs := waBinary.Attrs{ - "id": info.ID, + "id": id, + "to": node.Attrs["from"], + } + if recipient, ok := node.Attrs["recipient"]; ok { + attrs["recipient"] = recipient + } + if participant, ok := node.Attrs["participant"]; ok { + attrs["participant"] = participant } + return attrs +} + +func (cli *Client) sendMessageReceipt(ctx context.Context, info *types.MessageInfo, node *waBinary.Node) { + attrs := buildBaseReceipt(info.ID, node) if info.IsFromMe { attrs["type"] = string(types.ReceiptTypeSender) + if info.Type == "peer_msg" { + attrs["type"] = string(types.ReceiptTypePeerMsg) + } } else if cli.sendActiveReceipts.Load() == 0 { attrs["type"] = string(types.ReceiptTypeInactive) } - attrs["to"] = info.Chat - if info.IsGroup { - attrs["participant"] = info.Sender - } else if info.IsFromMe { - attrs["recipient"] = info.Sender - } else { - // Override the to attribute with the JID version with a device number - attrs["to"] = info.Sender - } - err := cli.sendNode(waBinary.Node{ + err := cli.sendNode(ctx, waBinary.Node{ Tag: "receipt", Attrs: attrs, }) diff --git a/vendor/go.mau.fi/whatsmeow/reportingfields.json b/vendor/go.mau.fi/whatsmeow/reportingfields.json new file mode 100644 index 0000000000..bd02b2890c --- /dev/null +++ b/vendor/go.mau.fi/whatsmeow/reportingfields.json @@ -0,0 +1 @@ +[{"f":1},{"f":3,"s":[{"f":2},{"f":3},{"f":8},{"f":11},{"f":17,"s":[{"f":21},{"f":22}]},{"f":25}]},{"f":4,"s":[{"f":1},{"f":16},{"f":17,"s":[{"f":21},{"f":22}]}]},{"f":5,"s":[{"f":3},{"f":4},{"f":5},{"f":16},{"f":17,"s":[{"f":21},{"f":22}]}]},{"f":6,"s":[{"f":1},{"f":17,"s":[{"f":21},{"f":22}]},{"f":30}]},{"f":7,"s":[{"f":2},{"f":7},{"f":10},{"f":17,"s":[{"f":21},{"f":22}]},{"f":20}]},{"f":8,"s":[{"f":2},{"f":7},{"f":9},{"f":17,"s":[{"f":21},{"f":22}]},{"f":21}]},{"f":9,"s":[{"f":2},{"f":6},{"f":7},{"f":13},{"f":17,"s":[{"f":21},{"f":22}]},{"f":20}]},{"f":12,"s":[{"f":1},{"f":2},{"f":14,"m":true},{"f":15}]},{"f":18,"s":[{"f":6},{"f":16},{"f":17,"s":[{"f":21},{"f":22}]}]},{"f":26,"s":[{"f":4},{"f":5},{"f":8},{"f":13},{"f":17,"s":[{"f":21},{"f":22}]}]},{"f":28,"s":[{"f":1},{"f":2},{"f":4},{"f":5},{"f":6},{"f":7,"s":[{"f":21},{"f":22}]}]},{"f":37,"s":[{"f":1,"m":true}]},{"f":49,"s":[{"f":2},{"f":3,"s":[{"f":1},{"f":2}]},{"f":5,"s":[{"f":21},{"f":22}]},{"f":8,"s":[{"f":1},{"f":2}]}]},{"f":53,"s":[{"f":1,"m":true}]},{"f":55,"s":[{"f":1,"m":true}]},{"f":58,"s":[{"f":1,"m":true}]},{"f":59,"s":[{"f":1,"m":true}]},{"f":60,"s":[{"f":2},{"f":3,"s":[{"f":1},{"f":2}]},{"f":5,"s":[{"f":21},{"f":22}]},{"f":8,"s":[{"f":1},{"f":2}]}]},{"f":64,"s":[{"f":2},{"f":3,"s":[{"f":1},{"f":2}]},{"f":5,"s":[{"f":21},{"f":22}]},{"f":8,"s":[{"f":1},{"f":2}]}]},{"f":66,"s":[{"f":2},{"f":6},{"f":7},{"f":13},{"f":17,"s":[{"f":21},{"f":22}]},{"f":20}]},{"f":74,"s":[{"f":1,"m":true}]},{"f":87,"s":[{"f":1,"m":true}]},{"f":88,"s":[{"f":1},{"f":2,"s":[{"f":1}]},{"f":3,"s":[{"f":21},{"f":22}]}]},{"f":92,"s":[{"f":1,"m":true}]},{"f":93,"s":[{"f":1,"m":true}]},{"f":94,"s":[{"f":1,"m":true}]}] diff --git a/vendor/go.mau.fi/whatsmeow/reportingtoken.go b/vendor/go.mau.fi/whatsmeow/reportingtoken.go new file mode 100644 index 0000000000..0a18750bed --- /dev/null +++ b/vendor/go.mau.fi/whatsmeow/reportingtoken.go @@ -0,0 +1,176 @@ +// Copyright (c) 2025 Tulir Asokan +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. + +package whatsmeow + +import ( + "crypto/hmac" + "crypto/sha256" + _ "embed" + "encoding/binary" + "encoding/json" + "sort" + "sync" + + "go.mau.fi/util/exerrors" + "go.mau.fi/util/exstrings" + + waBinary "go.mau.fi/whatsmeow/binary" + "go.mau.fi/whatsmeow/proto/waE2E" + "go.mau.fi/whatsmeow/types" +) + +//go:embed reportingfields.json +var reportingFieldsJSON string +var getReportingFields = sync.OnceValue(func() (output []reportingField) { + exerrors.PanicIfNotNil(json.Unmarshal(exstrings.UnsafeBytes(reportingFieldsJSON), &output)) + return +}) + +type reportingField struct { + FieldNumber int `json:"f"` + IsMessage bool `json:"m,omitempty"` + Subfields []reportingField `json:"s,omitempty"` +} + +func (cli *Client) shouldIncludeReportingToken(message *waE2E.Message) bool { + if !cli.SendReportingTokens { + return false + } + return message.ReactionMessage == nil && + message.EncReactionMessage == nil && + message.EncEventResponseMessage == nil && + message.PollUpdateMessage == nil +} + +func (cli *Client) getMessageReportingToken( + msgProtobuf []byte, + msg *waE2E.Message, + senderJID, remoteJID types.JID, + messageID types.MessageID, +) waBinary.Node { + reportingSecret, _ := generateMsgSecretKey( + EncSecretReportToken, remoteJID, messageID, senderJID, + msg.GetMessageContextInfo().GetMessageSecret(), + ) + hasher := hmac.New(sha256.New, reportingSecret) + hasher.Write(getReportingToken(msgProtobuf)) + return waBinary.Node{ + Tag: "reporting", + Content: []waBinary.Node{{ + Tag: "reporting_token", + Attrs: waBinary.Attrs{"v": "2"}, + Content: hasher.Sum(nil)[:16], + }}, + } +} + +func getReportingToken(messageProtobuf []byte) []byte { + return extractReportingTokenContent(messageProtobuf, getReportingFields()) +} + +// Helper to find config for a field number +func getConfigForField(fields []reportingField, fieldNum int) *reportingField { + for i := range fields { + if fields[i].FieldNumber == fieldNum { + return &fields[i] + } + } + return nil +} + +// Protobuf wire types +const ( + wireVarint = 0 + wire64bit = 1 + wireBytes = 2 + wire32bit = 5 +) + +// Extracts the reporting token content recursively +func extractReportingTokenContent(data []byte, config []reportingField) []byte { + type field struct { + Num int + Bytes []byte + } + var fields []field + i := 0 + for i < len(data) { + // Read tag (varint) + tag, tagLen := binary.Uvarint(data[i:]) + if tagLen <= 0 { + break // malformed + } + fieldNum := int(tag >> 3) + wireType := int(tag & 0x7) + fieldCfg := getConfigForField(config, fieldNum) + fieldStart := i + i += tagLen + if fieldCfg == nil { + // Skip field + switch wireType { + case wireVarint: + _, n := binary.Uvarint(data[i:]) + i += n + case wire64bit: + i += 8 + case wireBytes: + l, n := binary.Uvarint(data[i:]) + i += n + int(l) + case wire32bit: + i += 4 + default: + return nil + } + continue + } + switch wireType { + case wireVarint: + _, n := binary.Uvarint(data[i:]) + i += n + fields = append(fields, field{Num: fieldNum, Bytes: data[fieldStart:i]}) + case wire64bit: + i += 8 + fields = append(fields, field{Num: fieldNum, Bytes: data[fieldStart:i]}) + case wireBytes: + l, n := binary.Uvarint(data[i:]) + valStart := i + n + valEnd := valStart + int(l) + if fieldCfg.IsMessage || len(fieldCfg.Subfields) > 0 { + // Recursively extract subfields + sub := extractReportingTokenContent(data[valStart:valEnd], fieldCfg.Subfields) + if len(sub) > 0 { + // Re-encode tag and length + buf := make([]byte, 0, tagLen+n+len(sub)) + tagBuf := make([]byte, binary.MaxVarintLen64) + tagN := binary.PutUvarint(tagBuf, tag) + lenBuf := make([]byte, binary.MaxVarintLen64) + lenN := binary.PutUvarint(lenBuf, uint64(len(sub))) + buf = append(buf, tagBuf[:tagN]...) + buf = append(buf, lenBuf[:lenN]...) + buf = append(buf, sub...) + fields = append(fields, field{Num: fieldNum, Bytes: buf}) + } + } else { + fields = append(fields, field{Num: fieldNum, Bytes: data[fieldStart:valEnd]}) + } + i = valEnd + case wire32bit: + i += 4 + fields = append(fields, field{Num: fieldNum, Bytes: data[fieldStart:i]}) + default: + return nil + } + } + // Sort by field number + sort.Slice(fields, func(i, j int) bool { return fields[i].Num < fields[j].Num }) + // Concatenate + var out []byte + for _, f := range fields { + out = append(out, f.Bytes...) + } + return out +} diff --git a/vendor/go.mau.fi/whatsmeow/request.go b/vendor/go.mau.fi/whatsmeow/request.go index 2500f95b1c..b1325447a2 100644 --- a/vendor/go.mau.fi/whatsmeow/request.go +++ b/vendor/go.mau.fi/whatsmeow/request.go @@ -68,7 +68,7 @@ func (cli *Client) cancelResponse(reqID string, ch chan *waBinary.Node) { cli.responseWaitersLock.Unlock() } -func (cli *Client) receiveResponse(data *waBinary.Node) bool { +func (cli *Client) receiveResponse(ctx context.Context, data *waBinary.Node) bool { id, ok := data.Attrs["id"].(string) if !ok || (data.Tag != "iq" && data.Tag != "ack") { return false @@ -81,7 +81,10 @@ func (cli *Client) receiveResponse(data *waBinary.Node) bool { } delete(cli.responseWaiters, id) cli.responseWaitersLock.Unlock() - waiter <- data + select { + case waiter <- data: + case <-ctx.Done(): + } return true } @@ -98,14 +101,17 @@ type infoQuery struct { To types.JID Target types.JID ID string + SMaxID string Content interface{} Timeout time.Duration NoRetry bool - Context context.Context } -func (cli *Client) sendIQAsyncAndGetData(query *infoQuery) (<-chan *waBinary.Node, []byte, error) { +func (cli *Client) sendIQAsyncAndGetData(ctx context.Context, query *infoQuery) (<-chan *waBinary.Node, []byte, error) { + if cli == nil { + return nil, nil, ErrClientIsNil + } if len(query.ID) == 0 { query.ID = cli.generateRequestID() } @@ -115,13 +121,16 @@ func (cli *Client) sendIQAsyncAndGetData(query *infoQuery) (<-chan *waBinary.Nod "xmlns": query.Namespace, "type": string(query.Type), } + if query.SMaxID != "" { + attrs["smax_id"] = query.SMaxID + } if !query.To.IsEmpty() { attrs["to"] = query.To } if !query.Target.IsEmpty() { attrs["target"] = query.Target } - data, err := cli.sendNodeAndGetData(waBinary.Node{ + data, err := cli.sendNodeAndGetData(ctx, waBinary.Node{ Tag: "iq", Attrs: attrs, Content: query.Content, @@ -133,23 +142,20 @@ func (cli *Client) sendIQAsyncAndGetData(query *infoQuery) (<-chan *waBinary.Nod return waiter, data, nil } -func (cli *Client) sendIQAsync(query infoQuery) (<-chan *waBinary.Node, error) { - ch, _, err := cli.sendIQAsyncAndGetData(&query) +func (cli *Client) sendIQAsync(ctx context.Context, query infoQuery) (<-chan *waBinary.Node, error) { + ch, _, err := cli.sendIQAsyncAndGetData(ctx, &query) return ch, err } const defaultRequestTimeout = 75 * time.Second -func (cli *Client) sendIQ(query infoQuery) (*waBinary.Node, error) { - resChan, data, err := cli.sendIQAsyncAndGetData(&query) - if err != nil { - return nil, err - } +func (cli *Client) sendIQ(ctx context.Context, query infoQuery) (*waBinary.Node, error) { if query.Timeout == 0 { query.Timeout = defaultRequestTimeout } - if query.Context == nil { - query.Context = context.Background() + resChan, data, err := cli.sendIQAsyncAndGetData(ctx, &query) + if err != nil { + return nil, err } select { case res := <-resChan: @@ -157,7 +163,7 @@ func (cli *Client) sendIQ(query infoQuery) (*waBinary.Node, error) { if query.NoRetry { return nil, &DisconnectedError{Action: "info query", Node: res} } - res, err = cli.retryFrame("info query", query.ID, data, res, query.Context, query.Timeout) + res, err = cli.retryFrame(ctx, "info query", query.ID, data, res, query.Timeout) if err != nil { return nil, err } @@ -169,14 +175,21 @@ func (cli *Client) sendIQ(query infoQuery) (*waBinary.Node, error) { return res, parseIQError(res) } return res, nil - case <-query.Context.Done(): - return nil, query.Context.Err() + case <-ctx.Done(): + return nil, ctx.Err() case <-time.After(query.Timeout): return nil, ErrIQTimedOut } } -func (cli *Client) retryFrame(reqType, id string, data []byte, origResp *waBinary.Node, ctx context.Context, timeout time.Duration) (*waBinary.Node, error) { +func (cli *Client) retryFrame( + ctx context.Context, + reqType, + id string, + data []byte, + origResp *waBinary.Node, + timeout time.Duration, +) (*waBinary.Node, error) { if isAuthErrorDisconnect(origResp) { cli.Log.Debugf("%s (%s) was interrupted by websocket disconnection (%s), not retrying as it looks like an auth error", id, reqType, origResp.XMLString()) return nil, &DisconnectedError{Action: reqType, Node: origResp} @@ -196,7 +209,7 @@ func (cli *Client) retryFrame(reqType, id string, data []byte, origResp *waBinar } respChan := cli.waitResponse(id) - err := sock.SendFrame(data) + err := sock.SendFrame(ctx, data) if err != nil { cli.cancelResponse(id, respChan) return nil, err diff --git a/vendor/go.mau.fi/whatsmeow/retry.go b/vendor/go.mau.fi/whatsmeow/retry.go index 509282dd7a..2323e9f06a 100644 --- a/vendor/go.mau.fi/whatsmeow/retry.go +++ b/vendor/go.mau.fi/whatsmeow/retry.go @@ -21,9 +21,9 @@ import ( "google.golang.org/protobuf/proto" waBinary "go.mau.fi/whatsmeow/binary" - waProto "go.mau.fi/whatsmeow/binary/proto" "go.mau.fi/whatsmeow/proto/waCommon" "go.mau.fi/whatsmeow/proto/waConsumerApplication" + "go.mau.fi/whatsmeow/proto/waE2E" "go.mau.fi/whatsmeow/proto/waMsgApplication" "go.mau.fi/whatsmeow/proto/waMsgTransport" "go.mau.fi/whatsmeow/types" @@ -39,7 +39,7 @@ type recentMessageKey struct { } type RecentMessage struct { - wa *waProto.Message + wa *waE2E.Message fb *waMsgApplication.MessageApplication } @@ -47,7 +47,34 @@ func (rm RecentMessage) IsEmpty() bool { return rm.wa == nil && rm.fb == nil } -func (cli *Client) addRecentMessage(to types.JID, id types.MessageID, wa *waProto.Message, fb *waMsgApplication.MessageApplication) { +func (cli *Client) addRecentMessage(ctx context.Context, to types.JID, id types.MessageID, wa *waE2E.Message, fb *waMsgApplication.MessageApplication) error { + if cli.UseRetryMessageStore { + var buf []byte + var format string + var err error + if wa != nil { + buf, err = proto.Marshal(wa) + format = "wa" + } else if fb != nil { + buf, err = proto.Marshal(fb) + format = "fb" + } + if err != nil { + return fmt.Errorf("failed to marshal message for retry store: %w", err) + } + if buf != nil { + err = cli.Store.EventBuffer.AddOutgoingEvent(ctx, to, id, format, buf) + if err != nil { + return fmt.Errorf("failed to add message to retry store: %w", err) + } + if time.Since(cli.lastRetryStoreClear) > 12*time.Hour { + err = cli.Store.EventBuffer.DeleteOldOutgoingEvents(ctx) + if err != nil { + return fmt.Errorf("failed to clear old messages from retry store: %w", err) + } + } + } + } cli.recentMessagesLock.Lock() key := recentMessageKey{to, id} if cli.recentMessagesList[cli.recentMessagesPtr].ID != "" { @@ -60,37 +87,80 @@ func (cli *Client) addRecentMessage(to types.JID, id types.MessageID, wa *waProt cli.recentMessagesPtr = 0 } cli.recentMessagesLock.Unlock() + return nil } func (cli *Client) getRecentMessage(to types.JID, id types.MessageID) RecentMessage { cli.recentMessagesLock.RLock() - msg, _ := cli.recentMessagesMap[recentMessageKey{to, id}] - cli.recentMessagesLock.RUnlock() - return msg + defer cli.recentMessagesLock.RUnlock() + return cli.recentMessagesMap[recentMessageKey{to, id}] } -func (cli *Client) getMessageForRetry(receipt *events.Receipt, messageID types.MessageID) (RecentMessage, error) { +func (cli *Client) getMessageForRetry(ctx context.Context, receipt *events.Receipt, messageID types.MessageID) (*RecentMessage, error) { msg := cli.getRecentMessage(receipt.Chat, messageID) - if msg.IsEmpty() { - waMsg := cli.GetMessageForRetry(receipt.Sender, receipt.Chat, messageID) - if waMsg == nil { - return RecentMessage{}, fmt.Errorf("couldn't find message %s", messageID) - } else { - cli.Log.Debugf("Found message in GetMessageForRetry to accept retry receipt for %s/%s from %s", receipt.Chat, messageID, receipt.Sender) - } - msg = RecentMessage{wa: waMsg} - } else { + if !msg.IsEmpty() { cli.Log.Debugf("Found message in local cache to accept retry receipt for %s/%s from %s", receipt.Chat, messageID, receipt.Sender) + return &msg, nil + } + var altChat types.JID + var err error + switch receipt.Chat.Server { + case types.DefaultUserServer: + altChat, err = cli.Store.LIDs.GetLIDForPN(ctx, receipt.Chat) + case types.HiddenUserServer: + altChat, err = cli.Store.LIDs.GetPNForLID(ctx, receipt.Chat) + } + if err != nil { + return nil, fmt.Errorf("failed to get alternate JID for %s: %w", receipt.Chat, err) + } else if !altChat.IsEmpty() { + msg = cli.getRecentMessage(altChat, messageID) + if !msg.IsEmpty() { + cli.Log.Debugf("Found message in local cache with alternate chat JID %s to accept retry receipt for %s/%s from %s", altChat, receipt.Chat, messageID, receipt.Sender) + return &msg, nil + } + } + if cli.UseRetryMessageStore { + format, buf, err := cli.Store.EventBuffer.GetOutgoingEvent(ctx, receipt.Chat, altChat, messageID) + if err != nil { + return nil, fmt.Errorf("failed to get message from retry store: %w", err) + } + return parseRecentMessage(format, buf) + } + waMsg := cli.GetMessageForRetry(receipt.Sender, receipt.Chat, messageID) + if waMsg != nil { + cli.Log.Debugf("Found message in GetMessageForRetry to accept retry receipt for %s/%s from %s", receipt.Chat, messageID, receipt.Sender) + return &RecentMessage{wa: waMsg}, nil + } + return nil, nil +} + +func parseRecentMessage(format string, buf []byte) (*RecentMessage, error) { + var rm RecentMessage + var err error + switch format { + case "wa": + rm.wa = &waE2E.Message{} + err = proto.Unmarshal(buf, rm.wa) + case "fb": + rm.fb = &waMsgApplication.MessageApplication{} + err = proto.Unmarshal(buf, rm.fb) + default: + err = fmt.Errorf("unknown format in retry store: %s", format) + } + if err != nil { + return nil, fmt.Errorf("failed to unmarshal payload in retry store: %w", err) } - return msg, nil + return &rm, nil } const recreateSessionTimeout = 1 * time.Hour -func (cli *Client) shouldRecreateSession(retryCount int, jid types.JID) (reason string, recreate bool) { +func (cli *Client) shouldRecreateSession(ctx context.Context, retryCount int, jid types.JID) (reason string, recreate bool) { cli.sessionRecreateHistoryLock.Lock() defer cli.sessionRecreateHistoryLock.Unlock() - if !cli.Store.ContainsSession(jid.SignalAddress()) { + if contains, err := cli.Store.ContainsSession(ctx, jid.SignalAddress()); err != nil { + return "", false + } else if !contains { cli.sessionRecreateHistory[jid] = time.Now() return "we don't have a Signal session with them", true } else if retryCount < 2 { @@ -110,7 +180,7 @@ type incomingRetryKey struct { } // handleRetryReceipt handles an incoming retry receipt for an outgoing message. -func (cli *Client) handleRetryReceipt(receipt *events.Receipt, node *waBinary.Node) error { +func (cli *Client) handleRetryReceipt(ctx context.Context, receipt *events.Receipt, node *waBinary.Node) error { retryChild, ok := node.GetOptionalChildByTag("retry") if !ok { return &ElementMissingError{Tag: "retry", In: "retry receipt"} @@ -122,9 +192,11 @@ func (cli *Client) handleRetryReceipt(receipt *events.Receipt, node *waBinary.No if !ag.OK() { return ag.Error() } - msg, err := cli.getMessageForRetry(receipt, messageID) + msg, err := cli.getMessageForRetry(ctx, receipt, messageID) if err != nil { return err + } else if msg == nil { + return fmt.Errorf("couldn't find message %s", messageID) } var fbConsumerMsg *waConsumerApplication.ConsumerApplication if msg.fb != nil { @@ -147,22 +219,16 @@ func (cli *Client) handleRetryReceipt(receipt *events.Receipt, node *waBinary.No return nil } - ownID := cli.getOwnID() - if ownID.IsEmpty() { - return ErrNotLoggedIn - } - var fbSKDM *waMsgTransport.MessageTransport_Protocol_Ancillary_SenderKeyDistributionMessage var fbDSM *waMsgTransport.MessageTransport_Protocol_Integral_DeviceSentMessage if receipt.IsGroup { builder := groups.NewGroupSessionBuilder(cli.Store, pbSerializer) - senderKeyName := protocol.NewSenderKeyName(receipt.Chat.String(), ownID.SignalAddress()) - signalSKDMessage, err := builder.Create(senderKeyName) + senderKeyName := protocol.NewSenderKeyName(receipt.Chat.String(), cli.getOwnLID().SignalAddress()) + signalSKDMessage, err := builder.Create(ctx, senderKeyName) if err != nil { cli.Log.Warnf("Failed to create sender key distribution message to include in retry of %s in %s to %s: %v", messageID, receipt.Chat, receipt.Sender, err) - } - if msg.wa != nil { - msg.wa.SenderKeyDistributionMessage = &waProto.SenderKeyDistributionMessage{ + } else if msg.wa != nil { + msg.wa.SenderKeyDistributionMessage = &waE2E.SenderKeyDistributionMessage{ GroupID: proto.String(receipt.Chat.String()), AxolotlSenderKeyDistributionMessage: signalSKDMessage.Serialize(), } @@ -174,8 +240,8 @@ func (cli *Client) handleRetryReceipt(receipt *events.Receipt, node *waBinary.No } } else if receipt.IsFromMe { if msg.wa != nil { - msg.wa = &waProto.Message{ - DeviceSentMessage: &waProto.DeviceSentMessage{ + msg.wa = &waE2E.Message{ + DeviceSentMessage: &waE2E.DeviceSentMessage{ DestinationJID: proto.String(receipt.Chat.String()), Message: msg.wa, }, @@ -215,10 +281,10 @@ func (cli *Client) handleRetryReceipt(receipt *events.Receipt, node *waBinary.No if err != nil { return fmt.Errorf("failed to read prekey bundle in retry receipt: %w", err) } - } else if reason, recreate := cli.shouldRecreateSession(retryCount, receipt.Sender); recreate { + } else if reason, recreate := cli.shouldRecreateSession(ctx, retryCount, receipt.Sender); recreate { cli.Log.Debugf("Fetching prekeys for %s for handling retry receipt with no prekey bundle because %s", receipt.Sender, reason) var keys map[types.JID]preKeyResp - keys, err = cli.fetchPreKeys(context.TODO(), []types.JID{receipt.Sender}) + keys, err = cli.fetchPreKeys(ctx, []types.JID{receipt.Sender}) if err != nil { return err } @@ -245,9 +311,19 @@ func (cli *Client) handleRetryReceipt(receipt *events.Receipt, node *waBinary.No var encrypted *waBinary.Node var includeDeviceIdentity bool if msg.wa != nil { - encrypted, includeDeviceIdentity, err = cli.encryptMessageForDevice(plaintext, receipt.Sender, bundle, encAttrs) + encryptionIdentity := receipt.Sender + if receipt.Sender.Server == types.DefaultUserServer { + lidForPN, err := cli.Store.LIDs.GetLIDForPN(ctx, receipt.Sender) + if err != nil { + cli.Log.Warnf("Failed to get LID for %s: %v", receipt.Sender, err) + } else if !lidForPN.IsEmpty() { + cli.migrateSessionStore(ctx, receipt.Sender, lidForPN) + encryptionIdentity = lidForPN + } + } + encrypted, includeDeviceIdentity, err = cli.encryptMessageForDevice(ctx, plaintext, encryptionIdentity, bundle, encAttrs, nil) } else { - encrypted, err = cli.encryptMessageForDeviceV3(&waMsgTransport.MessageTransport_Payload{ + encrypted, err = cli.encryptMessageForDeviceV3(ctx, &waMsgTransport.MessageTransport_Payload{ ApplicationPayload: &waCommon.SubProtocol{ Payload: plaintext, Version: proto.Int32(FBMessageApplicationVersion), @@ -280,14 +356,16 @@ func (cli *Client) handleRetryReceipt(receipt *events.Receipt, node *waBinary.No } var content []waBinary.Node if msg.wa != nil { - content = cli.getMessageContent(*encrypted, msg.wa, attrs, includeDeviceIdentity, nil) + content = cli.getMessageContent( + *encrypted, msg.wa, attrs, includeDeviceIdentity, nodeExtraParams{}, + ) } else { content = []waBinary.Node{ *encrypted, {Tag: "franking", Content: []waBinary.Node{{Tag: "franking_tag", Content: frankingTag}}}, } } - err = cli.sendNode(waBinary.Node{ + err = cli.sendNode(ctx, waBinary.Node{ Tag: "message", Attrs: attrs, Content: content, @@ -325,7 +403,7 @@ func (cli *Client) delayedRequestMessageFromPhone(info *types.MessageInfo) { cli.pendingPhoneRerequestsLock.Unlock() return } - ctx, cancel := context.WithCancel(context.Background()) + ctx, cancel := context.WithCancel(cli.BackgroundEventCtx) defer cancel() cli.pendingPhoneRerequests[info.ID] = cancel cli.pendingPhoneRerequestsLock.Unlock() @@ -341,21 +419,29 @@ func (cli *Client) delayedRequestMessageFromPhone(info *types.MessageInfo) { cli.Log.Debugf("Cancelled delayed request for message %s from phone", info.ID) return } - _, err := cli.SendMessage( - ctx, - cli.getOwnID().ToNonAD(), - cli.BuildUnavailableMessageRequest(info.Chat, info.Sender, info.ID), - SendRequestExtra{Peer: true}, - ) + cli.immediateRequestMessageFromPhone(ctx, info) +} + +func (cli *Client) immediateRequestMessageFromPhone(ctx context.Context, info *types.MessageInfo) { + _, err := cli.SendPeerMessage(ctx, cli.BuildUnavailableMessageRequest(info.Chat, info.Sender, info.ID)) if err != nil { cli.Log.Warnf("Failed to send request for unavailable message %s to phone: %v", info.ID, err) } else { cli.Log.Debugf("Requested message %s from phone", info.ID) } + return +} + +func (cli *Client) clearDelayedMessageRequests() { + cli.pendingPhoneRerequestsLock.Lock() + defer cli.pendingPhoneRerequestsLock.Unlock() + for _, cancel := range cli.pendingPhoneRerequests { + cancel() + } } // sendRetryReceipt sends a retry receipt for an incoming message. -func (cli *Client) sendRetryReceipt(node *waBinary.Node, info *types.MessageInfo, forceIncludeIdentity bool) { +func (cli *Client) sendRetryReceipt(ctx context.Context, node *waBinary.Node, info *types.MessageInfo, forceIncludeIdentity bool) { id, _ := node.Attrs["id"].(string) children := node.GetChildren() var retryCountInMsg int @@ -377,21 +463,19 @@ func (cli *Client) sendRetryReceipt(node *waBinary.Node, info *types.MessageInfo return } if retryCount == 1 { - go cli.delayedRequestMessageFromPhone(info) + if cli.SynchronousAck { + cli.immediateRequestMessageFromPhone(ctx, info) + } else { + go cli.delayedRequestMessageFromPhone(info) + } } var registrationIDBytes [4]byte binary.BigEndian.PutUint32(registrationIDBytes[:], cli.Store.RegistrationID) - attrs := waBinary.Attrs{ - "id": id, - "type": "retry", - "to": node.Attrs["from"], - } - if recipient, ok := node.Attrs["recipient"]; ok { - attrs["recipient"] = recipient - } - if participant, ok := node.Attrs["participant"]; ok { - attrs["participant"] = participant + attrs := buildBaseReceipt(info.ID, node) + attrs["type"] = "retry" + if info.Type == "peer_msg" && info.IsFromMe { + attrs["category"] = "peer" } payload := waBinary.Node{ Tag: "receipt", @@ -407,7 +491,7 @@ func (cli *Client) sendRetryReceipt(node *waBinary.Node, info *types.MessageInfo }, } if retryCount > 1 || forceIncludeIdentity { - if key, err := cli.Store.PreKeys.GenOnePreKey(); err != nil { + if key, err := cli.Store.PreKeys.GenOnePreKey(ctx); err != nil { cli.Log.Errorf("Failed to get prekey for retry receipt: %v", err) } else if deviceIdentity, err := proto.Marshal(cli.Store.Account); err != nil { cli.Log.Errorf("Failed to marshal account info: %v", err) @@ -425,7 +509,7 @@ func (cli *Client) sendRetryReceipt(node *waBinary.Node, info *types.MessageInfo }) } } - err := cli.sendNode(payload) + err := cli.sendNode(ctx, payload) if err != nil { cli.Log.Errorf("Failed to send retry receipt for %s: %v", id, err) } diff --git a/vendor/go.mau.fi/whatsmeow/send.go b/vendor/go.mau.fi/whatsmeow/send.go index ae5b0ba08d..a278b02523 100644 --- a/vendor/go.mau.fi/whatsmeow/send.go +++ b/vendor/go.mau.fi/whatsmeow/send.go @@ -14,6 +14,7 @@ import ( "encoding/hex" "errors" "fmt" + "slices" "sort" "strconv" "strings" @@ -29,18 +30,21 @@ import ( "google.golang.org/protobuf/proto" waBinary "go.mau.fi/whatsmeow/binary" - waProto "go.mau.fi/whatsmeow/binary/proto" + "go.mau.fi/whatsmeow/proto/waAICommon" + "go.mau.fi/whatsmeow/proto/waCommon" "go.mau.fi/whatsmeow/proto/waE2E" "go.mau.fi/whatsmeow/types" "go.mau.fi/whatsmeow/types/events" ) +const WebMessageIDPrefix = "3EB0" + // GenerateMessageID generates a random string that can be used as a message ID on WhatsApp. // // msgID := cli.GenerateMessageID() -// cli.SendMessage(context.Background(), targetJID, &waProto.Message{...}, whatsmeow.SendRequestExtra{ID: msgID}) +// cli.SendMessage(context.Background(), targetJID, &waE2E.Message{...}, whatsmeow.SendRequestExtra{ID: msgID}) func (cli *Client) GenerateMessageID() types.MessageID { - if cli.MessengerConfig != nil { + if cli != nil && cli.MessengerConfig != nil { return types.MessageID(strconv.FormatInt(GenerateFacebookMessageID(), 10)) } data := make([]byte, 8, 8+20+16) @@ -52,7 +56,7 @@ func (cli *Client) GenerateMessageID() types.MessageID { } data = append(data, random.Bytes(16)...) hash := sha256.Sum256(data) - return "3EB0" + strings.ToUpper(hex.EncodeToString(hash[:9])) + return WebMessageIDPrefix + strings.ToUpper(hex.EncodeToString(hash[:9])) } func GenerateFacebookMessageID() int64 { @@ -63,15 +67,16 @@ func GenerateFacebookMessageID() int64 { // GenerateMessageID generates a random string that can be used as a message ID on WhatsApp. // // msgID := whatsmeow.GenerateMessageID() -// cli.SendMessage(context.Background(), targetJID, &waProto.Message{...}, whatsmeow.SendRequestExtra{ID: msgID}) +// cli.SendMessage(context.Background(), targetJID, &waE2E.Message{...}, whatsmeow.SendRequestExtra{ID: msgID}) // // Deprecated: WhatsApp web has switched to using a hash of the current timestamp, user id and random bytes. Use Client.GenerateMessageID instead. func GenerateMessageID() types.MessageID { - return "3EB0" + strings.ToUpper(hex.EncodeToString(random.Bytes(8))) + return WebMessageIDPrefix + strings.ToUpper(hex.EncodeToString(random.Bytes(8))) } type MessageDebugTimings struct { - Queue time.Duration + LIDFetch time.Duration + Queue time.Duration Marshal time.Duration GetParticipants time.Duration @@ -85,6 +90,9 @@ type MessageDebugTimings struct { } func (mdt MessageDebugTimings) MarshalZerologObject(evt *zerolog.Event) { + if mdt.LIDFetch != 0 { + evt.Dur("lid_fetch", mdt.LIDFetch) + } evt.Dur("queue", mdt.Queue) evt.Dur("marshal", mdt.Marshal) if mdt.GetParticipants != 0 { @@ -114,6 +122,10 @@ type SendResponse struct { // Message handling duration, used for debugging DebugTimings MessageDebugTimings + + // The identity the message was sent with (LID or PN) + // This is currently not reliable in all cases. + Sender types.JID } // SendRequestExtra contains the optional parameters for SendMessage. @@ -140,6 +152,10 @@ type SendRequestExtra struct { Timeout time.Duration // When sending media to newsletters, the Handle field returned by the file upload. MediaHandle string + + Meta *types.MsgMetaInfo + // use this only if you know what you are doing + AdditionalNodes *[]waBinary.Node } // SendMessage sends the given message. @@ -153,7 +169,7 @@ type SendRequestExtra struct { // The message itself can contain anything you want (within the protobuf schema). // e.g. for a simple text message, use the Conversation field: // -// cli.SendMessage(context.Background(), targetJID, &waProto.Message{ +// cli.SendMessage(context.Background(), targetJID, &waE2E.Message{ // Conversation: proto.String("Hello, World!"), // }) // @@ -167,6 +183,10 @@ type SendRequestExtra struct { // field in incoming message events to figure out what it contains is also a good way to learn how to // send the same kind of message. func (cli *Client) SendMessage(ctx context.Context, to types.JID, message *waE2E.Message, extra ...SendRequestExtra) (resp SendResponse, err error) { + if cli == nil { + err = ErrClientIsNil + return + } var req SendRequestExtra if len(extra) > 1 { err = errors.New("only one extra parameter may be provided to SendMessage") @@ -193,9 +213,9 @@ func (cli *Client) SendMessage(ctx context.Context, to types.JID, message *waE2E if to.Server == types.NewsletterServer { // TODO somehow deduplicate this with the code in sendNewsletter? if message.EditedMessage != nil { - req.ID = types.MessageID(message.GetEditedMessage().GetMessage().GetProtocolMessage().GetKey().GetId()) - } else if message.ProtocolMessage != nil && message.ProtocolMessage.GetType() == waProto.ProtocolMessage_REVOKE { - req.ID = types.MessageID(message.GetProtocolMessage().GetKey().GetId()) + req.ID = types.MessageID(message.GetEditedMessage().GetMessage().GetProtocolMessage().GetKey().GetID()) + } else if message.ProtocolMessage != nil && message.ProtocolMessage.GetType() == waE2E.ProtocolMessage_REVOKE { + req.ID = types.MessageID(message.GetProtocolMessage().GetKey().GetID()) } } resp.ID = req.ID @@ -211,19 +231,21 @@ func (cli *Client) SendMessage(ctx context.Context, to types.JID, message *waE2E } isBotMode := isInlineBotMode || to.IsBot() - var botNode *waBinary.Node + needsMessageSecret := isBotMode || cli.shouldIncludeReportingToken(message) + var extraParams nodeExtraParams - if isBotMode { + if needsMessageSecret { if message.MessageContextInfo == nil { message.MessageContextInfo = &waE2E.MessageContextInfo{} } - if message.MessageContextInfo.MessageSecret == nil { message.MessageContextInfo.MessageSecret = random.Bytes(32) } + } + if isBotMode { if message.MessageContextInfo.BotMetadata == nil { - message.MessageContextInfo.BotMetadata = &waE2E.BotMetadata{ + message.MessageContextInfo.BotMetadata = &waAICommon.BotMetadata{ PersonaID: proto.String("867051314767696$760019659443059"), } } @@ -257,8 +279,12 @@ func (cli *Client) SendMessage(ctx context.Context, to types.JID, message *waE2E return } - participantNodes, _ := cli.encryptMessageForDevices(ctx, []types.JID{req.InlineBotJID}, ownID, resp.ID, messagePlaintext, nil, waBinary.Attrs{}) - botNode = &waBinary.Node{ + var participantNodes []waBinary.Node + participantNodes, _, err = cli.encryptMessageForDevices(ctx, []types.JID{req.InlineBotJID}, resp.ID, messagePlaintext, nil, waBinary.Attrs{}) + if err != nil { + return + } + extraParams.botNode = &waBinary.Node{ Tag: "bot", Attrs: nil, Content: participantNodes, @@ -266,39 +292,118 @@ func (cli *Client) SendMessage(ctx context.Context, to types.JID, message *waE2E } } + var groupParticipants []types.JID + if to.Server == types.GroupServer || to.Server == types.BroadcastServer { + start := time.Now() + if to.Server == types.GroupServer { + var cachedData *groupMetaCache + cachedData, err = cli.getCachedGroupData(ctx, to) + if err != nil { + err = fmt.Errorf("failed to get group members: %w", err) + return + } + groupParticipants = cachedData.Members + // TODO this is fairly hacky, is there a proper way to determine which identity the message is sent with? + if cachedData.AddressingMode == types.AddressingModeLID { + ownID = cli.getOwnLID() + extraParams.addressingMode = types.AddressingModeLID + } else if cachedData.CommunityAnnouncementGroup && req.Meta != nil { + ownID = cli.getOwnLID() + // Why is this set to PN? + extraParams.addressingMode = types.AddressingModePN + } + } else { + groupParticipants, err = cli.getBroadcastListParticipants(ctx, to) + if err != nil { + err = fmt.Errorf("failed to get broadcast list members: %w", err) + return + } + } + resp.DebugTimings.GetParticipants = time.Since(start) + } else if to.Server == types.HiddenUserServer { + ownID = cli.getOwnLID() + } else if to.Server == types.DefaultUserServer && cli.Store.LIDMigrationTimestamp > 0 && !req.Peer { + start := time.Now() + var toLID types.JID + toLID, err = cli.Store.LIDs.GetLIDForPN(ctx, to) + if err != nil { + err = fmt.Errorf("failed to get LID for PN %s: %w", to, err) + return + } else if toLID.IsEmpty() { + var info map[types.JID]types.UserInfo + info, err = cli.GetUserInfo(ctx, []types.JID{to}) + if err != nil { + err = fmt.Errorf("failed to get user info for %s to fill LID cache: %w", to, err) + return + } else if toLID = info[to].LID; toLID.IsEmpty() { + err = fmt.Errorf("no LID found for %s from server", to) + return + } + } + resp.DebugTimings.LIDFetch = time.Since(start) + cli.Log.Debugf("Replacing SendMessage destination with LID as migration timestamp is set %s -> %s", to, toLID) + to = toLID + ownID = cli.getOwnLID() + } + if req.Meta != nil { + extraParams.metaNode = &waBinary.Node{ + Tag: "meta", + Attrs: waBinary.Attrs{}, + } + if req.Meta.DeprecatedLIDSession != nil { + extraParams.metaNode.Attrs["deprecated_lid_session"] = *req.Meta.DeprecatedLIDSession + } + if req.Meta.ThreadMessageID != "" { + extraParams.metaNode.Attrs["thread_msg_id"] = req.Meta.ThreadMessageID + extraParams.metaNode.Attrs["thread_msg_sender_jid"] = req.Meta.ThreadMessageSenderJID + } + } + + if req.AdditionalNodes != nil { + extraParams.additionalNodes = req.AdditionalNodes + } + + resp.Sender = ownID + start := time.Now() // Sending multiple messages at a time can cause weird issues and makes it harder to retry safely + // This is also required for the session prefetching that makes group sends faster + // (everything will explode if you send a message to the same user twice in parallel) cli.messageSendLock.Lock() resp.DebugTimings.Queue = time.Since(start) defer cli.messageSendLock.Unlock() - respChan := cli.waitResponse(req.ID) // Peer message retries aren't implemented yet if !req.Peer { - cli.addRecentMessage(to, req.ID, message, nil) + err = cli.addRecentMessage(ctx, to, req.ID, message, nil) + if err != nil { + return + } } if message.GetMessageContextInfo().GetMessageSecret() != nil { - err = cli.Store.MsgSecrets.PutMessageSecret(to, ownID, req.ID, message.GetMessageContextInfo().GetMessageSecret()) + err = cli.Store.MsgSecrets.PutMessageSecret(ctx, to, ownID, req.ID, message.GetMessageContextInfo().GetMessageSecret()) if err != nil { cli.Log.Warnf("Failed to store message secret key for outgoing message %s: %v", req.ID, err) } else { cli.Log.Debugf("Stored message secret key for outgoing message %s", req.ID) } } + + respChan := cli.waitResponse(req.ID) var phash string var data []byte switch to.Server { case types.GroupServer, types.BroadcastServer: - phash, data, err = cli.sendGroup(ctx, to, ownID, req.ID, message, &resp.DebugTimings, botNode) - case types.DefaultUserServer: + phash, data, err = cli.sendGroup(ctx, ownID, to, groupParticipants, req.ID, message, &resp.DebugTimings, extraParams) + case types.DefaultUserServer, types.BotServer, types.HiddenUserServer: if req.Peer { - data, err = cli.sendPeerMessage(to, req.ID, message, &resp.DebugTimings) + data, err = cli.sendPeerMessage(ctx, to, req.ID, message, &resp.DebugTimings) } else { - data, err = cli.sendDM(ctx, to, ownID, req.ID, message, &resp.DebugTimings, botNode) + phash, data, err = cli.sendDM(ctx, ownID, to, req.ID, message, &resp.DebugTimings, extraParams) } case types.NewsletterServer: - data, err = cli.sendNewsletter(to, req.ID, message, req.MediaHandle, &resp.DebugTimings) + data, err = cli.sendNewsletter(ctx, to, req.ID, message, req.MediaHandle, &resp.DebugTimings) default: err = fmt.Errorf("%w %s", ErrUnknownServer, to.Server) } @@ -328,7 +433,7 @@ func (cli *Client) SendMessage(ctx context.Context, to types.JID, message *waE2E resp.DebugTimings.Resp = time.Since(start) if isDisconnectNode(respNode) { start = time.Now() - respNode, err = cli.retryFrame("message send", req.ID, data, respNode, ctx, 0) + respNode, err = cli.retryFrame(ctx, "message send", req.ID, data, respNode, 0) resp.DebugTimings.Retry = time.Since(start) if err != nil { return @@ -342,36 +447,53 @@ func (cli *Client) SendMessage(ctx context.Context, to types.JID, message *waE2E } expectedPHash := ag.OptionalString("phash") if len(expectedPHash) > 0 && phash != expectedPHash { - cli.Log.Warnf("Server returned different participant list hash when sending to %s. Some devices may not have received the message.", to) - // TODO also invalidate device list caches - cli.groupParticipantsCacheLock.Lock() - delete(cli.groupParticipantsCache, to) - cli.groupParticipantsCacheLock.Unlock() + cli.Log.Warnf("Server returned different participant list hash (%s != %s) when sending to %s. Some devices may not have received the message.", phash, expectedPHash, to) + switch to.Server { + case types.GroupServer: + // TODO also invalidate device list caches + cli.groupCacheLock.Lock() + delete(cli.groupCache, to) + cli.groupCacheLock.Unlock() + case types.BroadcastServer: + // TODO do something + case types.DefaultUserServer, types.HiddenUserServer, types.BotServer, types.HostedServer, types.HostedLIDServer: + cli.userDevicesCacheLock.Lock() + delete(cli.userDevicesCache, to) + cli.userDevicesCacheLock.Unlock() + } } return } +func (cli *Client) SendPeerMessage(ctx context.Context, message *waE2E.Message) (SendResponse, error) { + ownID := cli.getOwnID().ToNonAD() + if ownID.IsEmpty() { + return SendResponse{}, ErrNotLoggedIn + } + return cli.SendMessage(ctx, ownID, message, SendRequestExtra{Peer: true}) +} + // RevokeMessage deletes the given message from everyone in the chat. // // This method will wait for the server to acknowledge the revocation message before returning. // The return value is the timestamp of the message from the server. // // Deprecated: This method is deprecated in favor of BuildRevoke -func (cli *Client) RevokeMessage(chat types.JID, id types.MessageID) (SendResponse, error) { - return cli.SendMessage(context.TODO(), chat, cli.BuildRevoke(chat, types.EmptyJID, id)) +func (cli *Client) RevokeMessage(ctx context.Context, chat types.JID, id types.MessageID) (SendResponse, error) { + return cli.SendMessage(ctx, chat, cli.BuildRevoke(chat, types.EmptyJID, id)) } // BuildMessageKey builds a MessageKey object, which is used to refer to previous messages // for things such as replies, revocations and reactions. -func (cli *Client) BuildMessageKey(chat, sender types.JID, id types.MessageID) *waProto.MessageKey { - key := &waProto.MessageKey{ +func (cli *Client) BuildMessageKey(chat, sender types.JID, id types.MessageID) *waCommon.MessageKey { + key := &waCommon.MessageKey{ FromMe: proto.Bool(true), ID: proto.String(id), RemoteJID: proto.String(chat.String()), } - if !sender.IsEmpty() && sender.User != cli.getOwnID().User { + if !sender.IsEmpty() && sender.User != cli.getOwnID().User && sender.User != cli.getOwnLID().User { key.FromMe = proto.Bool(false) - if chat.Server != types.DefaultUserServer && chat.Server != types.MessengerServer { + if chat.Server != types.DefaultUserServer && chat.Server != types.HiddenUserServer && chat.Server != types.MessengerServer { key.Participant = proto.String(sender.ToNonAD().String()) } } @@ -388,10 +510,10 @@ func (cli *Client) BuildMessageKey(chat, sender types.JID, id types.MessageID) * // To revoke someone else's messages when you are group admin, pass the message sender's JID as the second parameter. // // resp, err := cli.SendMessage(context.Background(), chat, cli.BuildRevoke(chat, senderJID, originalMessageID) -func (cli *Client) BuildRevoke(chat, sender types.JID, id types.MessageID) *waProto.Message { - return &waProto.Message{ - ProtocolMessage: &waProto.ProtocolMessage{ - Type: waProto.ProtocolMessage_REVOKE.Enum(), +func (cli *Client) BuildRevoke(chat, sender types.JID, id types.MessageID) *waE2E.Message { + return &waE2E.Message{ + ProtocolMessage: &waE2E.ProtocolMessage{ + Type: waE2E.ProtocolMessage_REVOKE.Enum(), Key: cli.BuildMessageKey(chat, sender, id), }, } @@ -403,9 +525,9 @@ func (cli *Client) BuildRevoke(chat, sender types.JID, id types.MessageID) *waPr // resp, err := cli.SendMessage(context.Background(), chat, cli.BuildReaction(chat, senderJID, targetMessageID, "🐈️") // // Note that for newsletter messages, you need to use NewsletterSendReaction instead of BuildReaction + SendMessage. -func (cli *Client) BuildReaction(chat, sender types.JID, id types.MessageID, reaction string) *waProto.Message { - return &waProto.Message{ - ReactionMessage: &waProto.ReactionMessage{ +func (cli *Client) BuildReaction(chat, sender types.JID, id types.MessageID, reaction string) *waE2E.Message { + return &waE2E.Message{ + ReactionMessage: &waE2E.ReactionMessage{ Key: cli.BuildMessageKey(chat, sender, id), Text: proto.String(reaction), SenderTimestampMS: proto.Int64(time.Now().UnixMilli()), @@ -416,16 +538,16 @@ func (cli *Client) BuildReaction(chat, sender types.JID, id types.MessageID, rea // BuildUnavailableMessageRequest builds a message to request the user's primary device to send // the copy of a message that this client was unable to decrypt. // -// The built message can be sent using Client.SendMessage, but you must pass whatsmeow.SendRequestExtra{Peer: true} as the last parameter. +// The built message can be sent using Client.SendPeerMessage. // The full response will come as a ProtocolMessage with type `PEER_DATA_OPERATION_REQUEST_RESPONSE_MESSAGE`. // The response events will also be dispatched as normal *events.Message's with UnavailableRequestID set to the request message ID. -func (cli *Client) BuildUnavailableMessageRequest(chat, sender types.JID, id string) *waProto.Message { - return &waProto.Message{ - ProtocolMessage: &waProto.ProtocolMessage{ - Type: waProto.ProtocolMessage_PEER_DATA_OPERATION_REQUEST_MESSAGE.Enum(), - PeerDataOperationRequestMessage: &waProto.PeerDataOperationRequestMessage{ - PeerDataOperationRequestType: waProto.PeerDataOperationRequestType_PLACEHOLDER_MESSAGE_RESEND.Enum(), - PlaceholderMessageResendRequest: []*waProto.PeerDataOperationRequestMessage_PlaceholderMessageResendRequest{{ +func (cli *Client) BuildUnavailableMessageRequest(chat, sender types.JID, id string) *waE2E.Message { + return &waE2E.Message{ + ProtocolMessage: &waE2E.ProtocolMessage{ + Type: waE2E.ProtocolMessage_PEER_DATA_OPERATION_REQUEST_MESSAGE.Enum(), + PeerDataOperationRequestMessage: &waE2E.PeerDataOperationRequestMessage{ + PeerDataOperationRequestType: waE2E.PeerDataOperationRequestType_PLACEHOLDER_MESSAGE_RESEND.Enum(), + PlaceholderMessageResendRequest: []*waE2E.PeerDataOperationRequestMessage_PlaceholderMessageResendRequest{{ MessageKey: cli.BuildMessageKey(chat, sender, id), }}, }, @@ -435,18 +557,18 @@ func (cli *Client) BuildUnavailableMessageRequest(chat, sender types.JID, id str // BuildHistorySyncRequest builds a message to request additional history from the user's primary device. // -// The built message can be sent using Client.SendMessage, but you must pass whatsmeow.SendRequestExtra{Peer: true} as the last parameter. +// The built message can be sent using Client.SendPeerMessage. // The response will come as an *events.HistorySync with type `ON_DEMAND`. // // The response will contain to `count` messages immediately before the given message. // The recommended number of messages to request at a time is 50. -func (cli *Client) BuildHistorySyncRequest(lastKnownMessageInfo *types.MessageInfo, count int) *waProto.Message { - return &waProto.Message{ - ProtocolMessage: &waProto.ProtocolMessage{ - Type: waProto.ProtocolMessage_PEER_DATA_OPERATION_REQUEST_MESSAGE.Enum(), - PeerDataOperationRequestMessage: &waProto.PeerDataOperationRequestMessage{ - PeerDataOperationRequestType: waProto.PeerDataOperationRequestType_HISTORY_SYNC_ON_DEMAND.Enum(), - HistorySyncOnDemandRequest: &waProto.PeerDataOperationRequestMessage_HistorySyncOnDemandRequest{ +func (cli *Client) BuildHistorySyncRequest(lastKnownMessageInfo *types.MessageInfo, count int) *waE2E.Message { + return &waE2E.Message{ + ProtocolMessage: &waE2E.ProtocolMessage{ + Type: waE2E.ProtocolMessage_PEER_DATA_OPERATION_REQUEST_MESSAGE.Enum(), + PeerDataOperationRequestMessage: &waE2E.PeerDataOperationRequestMessage{ + PeerDataOperationRequestType: waE2E.PeerDataOperationRequestType_HISTORY_SYNC_ON_DEMAND.Enum(), + HistorySyncOnDemandRequest: &waE2E.PeerDataOperationRequestMessage_HistorySyncOnDemandRequest{ ChatJID: proto.String(lastKnownMessageInfo.Chat.String()), OldestMsgID: proto.String(lastKnownMessageInfo.ID), OldestMsgFromMe: proto.Bool(lastKnownMessageInfo.IsFromMe), @@ -464,20 +586,20 @@ const EditWindow = 20 * time.Minute // BuildEdit builds a message edit message using the given variables. // The built message can be sent normally using Client.SendMessage. // -// resp, err := cli.SendMessage(context.Background(), chat, cli.BuildEdit(chat, originalMessageID, &waProto.Message{ +// resp, err := cli.SendMessage(context.Background(), chat, cli.BuildEdit(chat, originalMessageID, &waE2E.Message{ // Conversation: proto.String("edited message"), // }) -func (cli *Client) BuildEdit(chat types.JID, id types.MessageID, newContent *waProto.Message) *waProto.Message { - return &waProto.Message{ - EditedMessage: &waProto.FutureProofMessage{ - Message: &waProto.Message{ - ProtocolMessage: &waProto.ProtocolMessage{ - Key: &waProto.MessageKey{ +func (cli *Client) BuildEdit(chat types.JID, id types.MessageID, newContent *waE2E.Message) *waE2E.Message { + return &waE2E.Message{ + EditedMessage: &waE2E.FutureProofMessage{ + Message: &waE2E.Message{ + ProtocolMessage: &waE2E.ProtocolMessage{ + Key: &waCommon.MessageKey{ FromMe: proto.Bool(true), ID: proto.String(id), RemoteJID: proto.String(chat.String()), }, - Type: waProto.ProtocolMessage_MESSAGE_EDIT.Enum(), + Type: waE2E.ProtocolMessage_MESSAGE_EDIT.Enum(), EditedMessage: newContent, TimestampMS: proto.Int64(time.Now().UnixMilli()), }, @@ -517,20 +639,24 @@ func ParseDisappearingTimerString(val string) (time.Duration, bool) { // and in groups the server will just reject the change. You can use the DisappearingTimer constants for convenience. // // In groups, the server will echo the change as a notification, so it'll show up as a *events.GroupInfo update. -func (cli *Client) SetDisappearingTimer(chat types.JID, timer time.Duration) (err error) { +func (cli *Client) SetDisappearingTimer(ctx context.Context, chat types.JID, timer time.Duration, settingTS time.Time) (err error) { switch chat.Server { - case types.DefaultUserServer: - _, err = cli.SendMessage(context.TODO(), chat, &waProto.Message{ - ProtocolMessage: &waProto.ProtocolMessage{ - Type: waProto.ProtocolMessage_EPHEMERAL_SETTING.Enum(), - EphemeralExpiration: proto.Uint32(uint32(timer.Seconds())), + case types.DefaultUserServer, types.HiddenUserServer: + if settingTS.IsZero() { + settingTS = time.Now() + } + _, err = cli.SendMessage(ctx, chat, &waE2E.Message{ + ProtocolMessage: &waE2E.ProtocolMessage{ + Type: waE2E.ProtocolMessage_EPHEMERAL_SETTING.Enum(), + EphemeralExpiration: proto.Uint32(uint32(timer.Seconds())), + EphemeralSettingTimestamp: proto.Int64(settingTS.Unix()), }, }) case types.GroupServer: if timer == 0 { - _, err = cli.sendGroupIQ(context.TODO(), iqSet, chat, waBinary.Node{Tag: "not_ephemeral"}) + _, err = cli.sendGroupIQ(ctx, iqSet, chat, waBinary.Node{Tag: "not_ephemeral"}) } else { - _, err = cli.sendGroupIQ(context.TODO(), iqSet, chat, waBinary.Node{ + _, err = cli.sendGroupIQ(ctx, iqSet, chat, waBinary.Node{ Tag: "ephemeral", Attrs: waBinary.Attrs{ "expiration": strconv.Itoa(int(timer.Seconds())), @@ -557,7 +683,14 @@ func participantListHashV2(participants []types.JID) string { return fmt.Sprintf("2:%s", base64.RawStdEncoding.EncodeToString(hash[:6])) } -func (cli *Client) sendNewsletter(to types.JID, id types.MessageID, message *waProto.Message, mediaID string, timings *MessageDebugTimings) ([]byte, error) { +func (cli *Client) sendNewsletter( + ctx context.Context, + to types.JID, + id types.MessageID, + message *waE2E.Message, + mediaID string, + timings *MessageDebugTimings, +) ([]byte, error) { attrs := waBinary.Attrs{ "to": to, "id": id, @@ -569,7 +702,7 @@ func (cli *Client) sendNewsletter(to types.JID, id types.MessageID, message *waP if message.EditedMessage != nil { attrs["edit"] = string(types.EditAttributeAdminEdit) message = message.GetEditedMessage().GetMessage().GetProtocolMessage().GetEditedMessage() - } else if message.ProtocolMessage != nil && message.ProtocolMessage.GetType() == waProto.ProtocolMessage_REVOKE { + } else if message.ProtocolMessage != nil && message.ProtocolMessage.GetType() == waE2E.ProtocolMessage_REVOKE { attrs["edit"] = string(types.EditAttributeAdminRevoke) message = nil } @@ -584,8 +717,10 @@ func (cli *Client) sendNewsletter(to types.JID, id types.MessageID, message *waP Content: plaintext, Attrs: waBinary.Attrs{}, } - if mediaType := getMediaTypeFromMessage(message); mediaType != "" { - plaintextNode.Attrs["mediatype"] = mediaType + if message != nil { + if mediaType := getMediaTypeFromMessage(message); mediaType != "" { + plaintextNode.Attrs["mediatype"] = mediaType + } } node := waBinary.Node{ Tag: "message", @@ -593,7 +728,7 @@ func (cli *Client) sendNewsletter(to types.JID, id types.MessageID, message *waP Content: []waBinary.Node{plaintextNode}, } start = time.Now() - data, err := cli.sendNodeAndGetData(node) + data, err := cli.sendNodeAndGetData(ctx, node) timings.Send = time.Since(start) if err != nil { return nil, fmt.Errorf("failed to send message node: %w", err) @@ -601,24 +736,24 @@ func (cli *Client) sendNewsletter(to types.JID, id types.MessageID, message *waP return data, nil } -func (cli *Client) sendGroup(ctx context.Context, to, ownID types.JID, id types.MessageID, message *waProto.Message, timings *MessageDebugTimings, botNode *waBinary.Node) (string, []byte, error) { - var participants []types.JID - var err error +type nodeExtraParams struct { + botNode *waBinary.Node + metaNode *waBinary.Node + additionalNodes *[]waBinary.Node + addressingMode types.AddressingMode +} + +func (cli *Client) sendGroup( + ctx context.Context, + ownID, + to types.JID, + participants []types.JID, + id types.MessageID, + message *waE2E.Message, + timings *MessageDebugTimings, + extraParams nodeExtraParams, +) (string, []byte, error) { start := time.Now() - if to.Server == types.GroupServer { - participants, err = cli.getGroupMembers(ctx, to) - if err != nil { - return "", nil, fmt.Errorf("failed to get group members: %w", err) - } - } else { - // TODO use context - participants, err = cli.getBroadcastListParticipants(to) - if err != nil { - return "", nil, fmt.Errorf("failed to get broadcast list members: %w", err) - } - } - timings.GetParticipants = time.Since(start) - start = time.Now() plaintext, _, err := marshalMessage(to, message) timings.Marshal = time.Since(start) if err != nil { @@ -627,8 +762,8 @@ func (cli *Client) sendGroup(ctx context.Context, to, ownID types.JID, id types. start = time.Now() builder := groups.NewGroupSessionBuilder(cli.Store, pbSerializer) - senderKeyName := protocol.NewSenderKeyName(to.String(), ownID.SignalAddress()) - signalSKDMessage, err := builder.Create(senderKeyName) + senderKeyName := protocol.NewSenderKeyName(to.String(), cli.getOwnLID().SignalAddress()) + signalSKDMessage, err := builder.Create(ctx, senderKeyName) if err != nil { return "", nil, fmt.Errorf("failed to create sender key distribution message to send %s to %s: %w", id, to, err) } @@ -644,14 +779,16 @@ func (cli *Client) sendGroup(ctx context.Context, to, ownID types.JID, id types. } cipher := groups.NewGroupCipher(builder, senderKeyName, cli.Store) - encrypted, err := cipher.Encrypt(padMessage(plaintext)) + encrypted, err := cipher.Encrypt(ctx, padMessage(plaintext)) if err != nil { return "", nil, fmt.Errorf("failed to encrypt group message to send %s to %s: %w", id, to, err) } ciphertext := encrypted.SignedSerialize() timings.GroupEncrypt = time.Since(start) - node, allDevices, err := cli.prepareMessageNode(ctx, to, ownID, id, message, participants, skdPlaintext, nil, timings, botNode) + node, allDevices, err := cli.prepareMessageNode( + ctx, to, id, message, participants, skdPlaintext, nil, timings, extraParams, + ) if err != nil { return "", nil, err } @@ -667,9 +804,12 @@ func (cli *Client) sendGroup(ctx context.Context, to, ownID types.JID, id types. skMsg.Attrs["mediatype"] = mediaType } node.Content = append(node.GetChildren(), skMsg) + if cli.shouldIncludeReportingToken(message) && message.GetMessageContextInfo().GetMessageSecret() != nil { + node.Content = append(node.GetChildren(), cli.getMessageReportingToken(plaintext, message, ownID, to, id)) + } start = time.Now() - data, err := cli.sendNodeAndGetData(*node) + data, err := cli.sendNodeAndGetData(ctx, *node) timings.Send = time.Since(start) if err != nil { return "", nil, fmt.Errorf("failed to send message node: %w", err) @@ -677,13 +817,19 @@ func (cli *Client) sendGroup(ctx context.Context, to, ownID types.JID, id types. return phash, data, nil } -func (cli *Client) sendPeerMessage(to types.JID, id types.MessageID, message *waE2E.Message, timings *MessageDebugTimings) ([]byte, error) { - node, err := cli.preparePeerMessageNode(to, id, message, timings) +func (cli *Client) sendPeerMessage( + ctx context.Context, + to types.JID, + id types.MessageID, + message *waE2E.Message, + timings *MessageDebugTimings, +) ([]byte, error) { + node, err := cli.preparePeerMessageNode(ctx, to, id, message, timings) if err != nil { return nil, err } start := time.Now() - data, err := cli.sendNodeAndGetData(*node) + data, err := cli.sendNodeAndGetData(ctx, *node) timings.Send = time.Since(start) if err != nil { return nil, fmt.Errorf("failed to send message node: %w", err) @@ -691,28 +837,54 @@ func (cli *Client) sendPeerMessage(to types.JID, id types.MessageID, message *wa return data, nil } -func (cli *Client) sendDM(ctx context.Context, to, ownID types.JID, id types.MessageID, message *waE2E.Message, timings *MessageDebugTimings, botNode *waBinary.Node) ([]byte, error) { +func (cli *Client) sendDM( + ctx context.Context, + ownID, + to types.JID, + id types.MessageID, + message *waE2E.Message, + timings *MessageDebugTimings, + extraParams nodeExtraParams, +) (string, []byte, error) { start := time.Now() messagePlaintext, deviceSentMessagePlaintext, err := marshalMessage(to, message) timings.Marshal = time.Since(start) if err != nil { - return nil, err + return "", nil, err } - node, _, err := cli.prepareMessageNode(ctx, to, ownID, id, message, []types.JID{to, ownID.ToNonAD()}, messagePlaintext, deviceSentMessagePlaintext, timings, botNode) + node, allDevices, err := cli.prepareMessageNode( + ctx, to, id, message, []types.JID{to, ownID.ToNonAD()}, + messagePlaintext, deviceSentMessagePlaintext, timings, extraParams, + ) if err != nil { - return nil, err + return "", nil, err + } + phash := participantListHashV2(allDevices) + + if cli.shouldIncludeReportingToken(message) && message.GetMessageContextInfo().GetMessageSecret() != nil { + node.Content = append(node.GetChildren(), cli.getMessageReportingToken(messagePlaintext, message, ownID, to, id)) } + + if tcToken, err := cli.Store.PrivacyTokens.GetPrivacyToken(ctx, to); err != nil { + cli.Log.Warnf("Failed to get privacy token for %s: %v", to, err) + } else if tcToken != nil { + node.Content = append(node.GetChildren(), waBinary.Node{ + Tag: "tctoken", + Content: tcToken.Token, + }) + } + start = time.Now() - data, err := cli.sendNodeAndGetData(*node) + data, err := cli.sendNodeAndGetData(ctx, *node) timings.Send = time.Since(start) if err != nil { - return nil, fmt.Errorf("failed to send message node: %w", err) + return "", nil, fmt.Errorf("failed to send message node: %w", err) } - return data, nil + return phash, data, nil } -func getTypeFromMessage(msg *waProto.Message) string { +func getTypeFromMessage(msg *waE2E.Message) string { switch { case msg.ViewOnceMessage != nil: return getTypeFromMessage(msg.ViewOnceMessage.Message) @@ -726,7 +898,7 @@ func getTypeFromMessage(msg *waProto.Message) string { return getTypeFromMessage(msg.EphemeralMessage.Message) case msg.DocumentWithCaptionMessage != nil: return getTypeFromMessage(msg.DocumentWithCaptionMessage.Message) - case msg.ReactionMessage != nil: + case msg.ReactionMessage != nil, msg.EncReactionMessage != nil: return "reaction" case msg.PollCreationMessage != nil, msg.PollUpdateMessage != nil: return "poll" @@ -739,7 +911,7 @@ func getTypeFromMessage(msg *waProto.Message) string { } } -func getMediaTypeFromMessage(msg *waProto.Message) string { +func getMediaTypeFromMessage(msg *waE2E.Message) string { switch { case msg.ViewOnceMessage != nil: return getMediaTypeFromMessage(msg.ViewOnceMessage.Message) @@ -794,7 +966,7 @@ func getMediaTypeFromMessage(msg *waProto.Message) string { } } -func getButtonTypeFromMessage(msg *waProto.Message) string { +func getButtonTypeFromMessage(msg *waE2E.Message) string { switch { case msg.ViewOnceMessage != nil: return getButtonTypeFromMessage(msg.ViewOnceMessage.Message) @@ -817,7 +989,7 @@ func getButtonTypeFromMessage(msg *waProto.Message) string { } } -func getButtonAttributes(msg *waProto.Message) waBinary.Attrs { +func getButtonAttributes(msg *waE2E.Message) waBinary.Attrs { switch { case msg.ViewOnceMessage != nil: return getButtonAttributes(msg.ViewOnceMessage.Message) @@ -839,39 +1011,45 @@ func getButtonAttributes(msg *waProto.Message) waBinary.Attrs { const RemoveReactionText = "" -func getEditAttribute(msg *waProto.Message) types.EditAttribute { +func getEditAttribute(msg *waE2E.Message) types.EditAttribute { switch { case msg.EditedMessage != nil && msg.EditedMessage.Message != nil: return getEditAttribute(msg.EditedMessage.Message) case msg.ProtocolMessage != nil && msg.ProtocolMessage.GetKey() != nil: switch msg.ProtocolMessage.GetType() { - case waProto.ProtocolMessage_REVOKE: + case waE2E.ProtocolMessage_REVOKE: if msg.ProtocolMessage.GetKey().GetFromMe() { return types.EditAttributeSenderRevoke } else { return types.EditAttributeAdminRevoke } - case waProto.ProtocolMessage_MESSAGE_EDIT: + case waE2E.ProtocolMessage_MESSAGE_EDIT: if msg.ProtocolMessage.EditedMessage != nil { return types.EditAttributeMessageEdit } } case msg.ReactionMessage != nil && msg.ReactionMessage.GetText() == RemoveReactionText: return types.EditAttributeSenderRevoke - case msg.KeepInChatMessage != nil && msg.KeepInChatMessage.GetKey().GetFromMe() && msg.KeepInChatMessage.GetKeepType() == waProto.KeepType_UNDO_KEEP_FOR_ALL: + case msg.KeepInChatMessage != nil && msg.KeepInChatMessage.GetKey().GetFromMe() && msg.KeepInChatMessage.GetKeepType() == waE2E.KeepType_UNDO_KEEP_FOR_ALL: return types.EditAttributeSenderRevoke } return types.EditAttributeEmpty } -func (cli *Client) preparePeerMessageNode(to types.JID, id types.MessageID, message *waProto.Message, timings *MessageDebugTimings) (*waBinary.Node, error) { +func (cli *Client) preparePeerMessageNode( + ctx context.Context, + to types.JID, + id types.MessageID, + message *waE2E.Message, + timings *MessageDebugTimings, +) (*waBinary.Node, error) { attrs := waBinary.Attrs{ "id": id, "type": "text", "category": "peer", "to": to, } - if message.GetProtocolMessage().GetType() == waProto.ProtocolMessage_APP_STATE_SYNC_KEY_REQUEST { + if message.GetProtocolMessage().GetType() == waE2E.ProtocolMessage_APP_STATE_SYNC_KEY_REQUEST { attrs["push_priority"] = "high" } start := time.Now() @@ -881,13 +1059,25 @@ func (cli *Client) preparePeerMessageNode(to types.JID, id types.MessageID, mess err = fmt.Errorf("failed to marshal message: %w", err) return nil, err } + encryptionIdentity := to + if to.Server == types.DefaultUserServer { + encryptionIdentity, err = cli.Store.LIDs.GetLIDForPN(ctx, to) + if err != nil { + return nil, fmt.Errorf("failed to get LID for PN %s: %w", to, err) + } + } start = time.Now() - encrypted, isPreKey, err := cli.encryptMessageForDevice(plaintext, to, nil, nil) + encrypted, isPreKey, err := cli.encryptMessageForDevice(ctx, plaintext, encryptionIdentity, nil, nil, nil) timings.PeerEncrypt = time.Since(start) if err != nil { return nil, fmt.Errorf("failed to encrypt peer message for %s: %v", to, err) } - content := []waBinary.Node{*encrypted} + content := []waBinary.Node{{ + Tag: "meta", + Attrs: waBinary.Attrs{ + "appdata": "default", + }, + }, *encrypted} if isPreKey && cli.MessengerConfig == nil { content = append(content, cli.makeDeviceIdentityNode()) } @@ -898,7 +1088,13 @@ func (cli *Client) preparePeerMessageNode(to types.JID, id types.MessageID, mess }, nil } -func (cli *Client) getMessageContent(baseNode waBinary.Node, message *waE2E.Message, msgAttrs waBinary.Attrs, includeIdentity bool, botNode *waBinary.Node) []waBinary.Node { +func (cli *Client) getMessageContent( + baseNode waBinary.Node, + message *waE2E.Message, + msgAttrs waBinary.Attrs, + includeIdentity bool, + extraParams nodeExtraParams, +) []waBinary.Node { content := []waBinary.Node{baseNode} if includeIdentity { content = append(content, cli.makeDeviceIdentityNode()) @@ -916,8 +1112,14 @@ func (cli *Client) getMessageContent(baseNode waBinary.Node, message *waE2E.Mess }) } - if botNode != nil { - content = append(content, *botNode) + if extraParams.botNode != nil { + content = append(content, *extraParams.botNode) + } + if extraParams.metaNode != nil { + content = append(content, *extraParams.metaNode) + } + if extraParams.additionalNodes != nil { + content = append(content, *extraParams.additionalNodes...) } if buttonType := getButtonTypeFromMessage(message); buttonType != "" { @@ -932,14 +1134,29 @@ func (cli *Client) getMessageContent(baseNode waBinary.Node, message *waE2E.Mess return content } -func (cli *Client) prepareMessageNode(ctx context.Context, to, ownID types.JID, id types.MessageID, message *waE2E.Message, participants []types.JID, plaintext, dsmPlaintext []byte, timings *MessageDebugTimings, botNode *waBinary.Node) (*waBinary.Node, []types.JID, error) { +func (cli *Client) prepareMessageNode( + ctx context.Context, + to types.JID, + id types.MessageID, + message *waE2E.Message, + participants []types.JID, + plaintext, dsmPlaintext []byte, + timings *MessageDebugTimings, + extraParams nodeExtraParams, +) (*waBinary.Node, []types.JID, error) { start := time.Now() - allDevices, err := cli.GetUserDevicesContext(ctx, participants) + allDevices, err := cli.GetUserDevices(ctx, participants) timings.GetDevices = time.Since(start) if err != nil { return nil, nil, fmt.Errorf("failed to get device list: %w", err) } + if to.Server == types.GroupServer { + allDevices = slices.DeleteFunc(allDevices, func(jid types.JID) bool { + return jid.Server == types.HostedServer || jid.Server == types.HostedLIDServer + }) + } + msgType := getTypeFromMessage(message) encAttrs := waBinary.Attrs{} // Only include encMediaType for 1:1 messages (groups don't have a device-sent message plaintext) @@ -951,6 +1168,10 @@ func (cli *Client) prepareMessageNode(ctx context.Context, to, ownID types.JID, "type": msgType, "to": to, } + // TODO this is a very hacky hack for announcement group messages, why is it pn anyway? + if extraParams.addressingMode != "" { + attrs["addressing_mode"] = string(extraParams.addressingMode) + } if editAttr := getEditAttribute(message); editAttr != "" { attrs["edit"] = string(editAttr) encAttrs["decrypt-fail"] = string(events.DecryptFailHide) @@ -960,20 +1181,27 @@ func (cli *Client) prepareMessageNode(ctx context.Context, to, ownID types.JID, } start = time.Now() - participantNodes, includeIdentity := cli.encryptMessageForDevices(ctx, allDevices, ownID, id, plaintext, dsmPlaintext, encAttrs) + participantNodes, includeIdentity, err := cli.encryptMessageForDevices( + ctx, allDevices, id, plaintext, dsmPlaintext, encAttrs, + ) timings.PeerEncrypt = time.Since(start) + if err != nil { + return nil, nil, err + } participantNode := waBinary.Node{ Tag: "participants", Content: participantNodes, } return &waBinary.Node{ - Tag: "message", - Attrs: attrs, - Content: cli.getMessageContent(participantNode, message, attrs, includeIdentity, botNode), + Tag: "message", + Attrs: attrs, + Content: cli.getMessageContent( + participantNode, message, attrs, includeIdentity, extraParams, + ), }, allDevices, nil } -func marshalMessage(to types.JID, message *waProto.Message) (plaintext, dsmPlaintext []byte, err error) { +func marshalMessage(to types.JID, message *waE2E.Message) (plaintext, dsmPlaintext []byte, err error) { if message == nil && to.Server == types.NewsletterServer { return } @@ -984,11 +1212,12 @@ func marshalMessage(to types.JID, message *waProto.Message) (plaintext, dsmPlain } if to.Server != types.GroupServer && to.Server != types.NewsletterServer { - dsmPlaintext, err = proto.Marshal(&waProto.Message{ - DeviceSentMessage: &waProto.DeviceSentMessage{ + dsmPlaintext, err = proto.Marshal(&waE2E.Message{ + DeviceSentMessage: &waE2E.DeviceSentMessage{ DestinationJID: proto.String(to.String()), Message: message, }, + MessageContextInfo: message.MessageContextInfo, }) if err != nil { err = fmt.Errorf("failed to marshal message (for own devices): %w", err) @@ -1010,24 +1239,76 @@ func (cli *Client) makeDeviceIdentityNode() waBinary.Node { } } -func (cli *Client) encryptMessageForDevices(ctx context.Context, allDevices []types.JID, ownID types.JID, id string, msgPlaintext, dsmPlaintext []byte, encAttrs waBinary.Attrs) ([]waBinary.Node, bool) { +func (cli *Client) encryptMessageForDevices( + ctx context.Context, + allDevices []types.JID, + id string, + msgPlaintext, dsmPlaintext []byte, + encAttrs waBinary.Attrs, +) ([]waBinary.Node, bool, error) { + ownJID := cli.getOwnID() + ownLID := cli.getOwnLID() includeIdentity := false participantNodes := make([]waBinary.Node, 0, len(allDevices)) + + var pnDevices []types.JID + for _, jid := range allDevices { + if jid.Server == types.DefaultUserServer { + pnDevices = append(pnDevices, jid) + } + } + lidMappings, err := cli.Store.LIDs.GetManyLIDsForPNs(ctx, pnDevices) + if err != nil { + return nil, false, fmt.Errorf("failed to fetch LID mappings: %w", err) + } + + encryptionIdentities := make(map[types.JID]types.JID, len(allDevices)) + sessionAddressToJID := make(map[string]types.JID, len(allDevices)) + sessionAddresses := make([]string, 0, len(allDevices)) + for _, jid := range allDevices { + encryptionIdentity := jid + if jid.Server == types.DefaultUserServer { + // TODO query LID from server for missing entries + if lidForPN, ok := lidMappings[jid]; ok && !lidForPN.IsEmpty() { + cli.migrateSessionStore(ctx, jid, lidForPN) + encryptionIdentity = lidForPN + } + } + encryptionIdentities[jid] = encryptionIdentity + addr := encryptionIdentity.SignalAddress().String() + sessionAddresses = append(sessionAddresses, addr) + sessionAddressToJID[addr] = jid + } + + existingSessions, ctx, err := cli.Store.WithCachedSessions(ctx, sessionAddresses) + if err != nil { + return nil, false, fmt.Errorf("failed to prefetch sessions: %w", err) + } var retryDevices []types.JID + for addr, exists := range existingSessions { + if !exists { + retryDevices = append(retryDevices, sessionAddressToJID[addr]) + } + } + bundles := cli.fetchPreKeysNoError(ctx, retryDevices) + for _, jid := range allDevices { plaintext := msgPlaintext - if jid.User == ownID.User && dsmPlaintext != nil { - if jid == ownID { + if (jid.User == ownJID.User || jid.User == ownLID.User) && dsmPlaintext != nil { + if jid == ownJID || jid == ownLID { continue } plaintext = dsmPlaintext } - encrypted, isPreKey, err := cli.encryptMessageForDeviceAndWrap(plaintext, jid, nil, encAttrs) - if errors.Is(err, ErrNoSession) { - retryDevices = append(retryDevices, jid) - continue - } else if err != nil { + encrypted, isPreKey, err := cli.encryptMessageForDeviceAndWrap( + ctx, plaintext, jid, encryptionIdentities[jid], bundles[jid], encAttrs, existingSessions, + ) + if err != nil { + // TODO return these errors if it's a fatal one (like context cancellation or database) cli.Log.Warnf("Failed to encrypt %s for %s: %v", id, jid, err) + if ctx.Err() != nil { + return nil, false, err + } continue } @@ -1036,44 +1317,31 @@ func (cli *Client) encryptMessageForDevices(ctx context.Context, allDevices []ty includeIdentity = true } } - if len(retryDevices) > 0 { - bundles, err := cli.fetchPreKeys(ctx, retryDevices) - if err != nil { - cli.Log.Warnf("Failed to fetch prekeys for %v to retry encryption: %v", retryDevices, err) - } else { - for _, jid := range retryDevices { - resp := bundles[jid] - if resp.err != nil { - cli.Log.Warnf("Failed to fetch prekey for %s: %v", jid, resp.err) - continue - } - plaintext := msgPlaintext - if jid.User == ownID.User && dsmPlaintext != nil { - plaintext = dsmPlaintext - } - encrypted, isPreKey, err := cli.encryptMessageForDeviceAndWrap(plaintext, jid, resp.bundle, encAttrs) - if err != nil { - cli.Log.Warnf("Failed to encrypt %s for %s (retry): %v", id, jid, err) - continue - } - participantNodes = append(participantNodes, *encrypted) - if isPreKey { - includeIdentity = true - } - } - } + err = cli.Store.PutCachedSessions(ctx) + if err != nil { + return nil, false, fmt.Errorf("failed to save cached sessions: %w", err) } - return participantNodes, includeIdentity + return participantNodes, includeIdentity, nil } -func (cli *Client) encryptMessageForDeviceAndWrap(plaintext []byte, to types.JID, bundle *prekey.Bundle, encAttrs waBinary.Attrs) (*waBinary.Node, bool, error) { - node, includeDeviceIdentity, err := cli.encryptMessageForDevice(plaintext, to, bundle, encAttrs) +func (cli *Client) encryptMessageForDeviceAndWrap( + ctx context.Context, + plaintext []byte, + wireIdentity, + encryptionIdentity types.JID, + bundle *prekey.Bundle, + encAttrs waBinary.Attrs, + existingSessions map[string]bool, +) (*waBinary.Node, bool, error) { + node, includeDeviceIdentity, err := cli.encryptMessageForDevice( + ctx, plaintext, encryptionIdentity, bundle, encAttrs, existingSessions, + ) if err != nil { return nil, false, err } return &waBinary.Node{ Tag: "to", - Attrs: waBinary.Attrs{"jid": to}, + Attrs: waBinary.Attrs{"jid": wireIdentity}, Content: []waBinary.Node{*node}, }, includeDeviceIdentity, nil } @@ -1084,24 +1352,44 @@ func copyAttrs(from, to waBinary.Attrs) { } } -func (cli *Client) encryptMessageForDevice(plaintext []byte, to types.JID, bundle *prekey.Bundle, extraAttrs waBinary.Attrs) (*waBinary.Node, bool, error) { +func (cli *Client) encryptMessageForDevice( + ctx context.Context, + plaintext []byte, + to types.JID, + bundle *prekey.Bundle, + extraAttrs waBinary.Attrs, + existingSessions map[string]bool, +) (*waBinary.Node, bool, error) { builder := session.NewBuilderFromSignal(cli.Store, to.SignalAddress(), pbSerializer) if bundle != nil { cli.Log.Debugf("Processing prekey bundle for %s", to) - err := builder.ProcessBundle(bundle) + err := builder.ProcessBundle(ctx, bundle) if cli.AutoTrustIdentity && errors.Is(err, signalerror.ErrUntrustedIdentity) { cli.Log.Warnf("Got %v error while trying to process prekey bundle for %s, clearing stored identity and retrying", err, to) - cli.clearUntrustedIdentity(to) - err = builder.ProcessBundle(bundle) + err = cli.clearUntrustedIdentity(ctx, to) + if err != nil { + return nil, false, fmt.Errorf("failed to clear untrusted identity: %w", err) + } + err = builder.ProcessBundle(ctx, bundle) } if err != nil { return nil, false, fmt.Errorf("failed to process prekey bundle: %w", err) } - } else if !cli.Store.ContainsSession(to.SignalAddress()) { - return nil, false, ErrNoSession + } else { + sessionExists, checked := existingSessions[to.SignalAddress().String()] + if !checked { + var err error + sessionExists, err = cli.Store.ContainsSession(ctx, to.SignalAddress()) + if err != nil { + return nil, false, err + } + } + if !sessionExists { + return nil, false, fmt.Errorf("%w with %s", ErrNoSession, to.SignalAddress().String()) + } } cipher := session.NewCipher(builder, to.SignalAddress()) - ciphertext, err := cipher.Encrypt(padMessage(plaintext)) + ciphertext, err := cipher.Encrypt(ctx, padMessage(plaintext)) if err != nil { return nil, false, fmt.Errorf("cipher encryption failed: %w", err) } diff --git a/vendor/go.mau.fi/whatsmeow/sendfb.go b/vendor/go.mau.fi/whatsmeow/sendfb.go index 660d26690d..d5f9bc3b72 100644 --- a/vendor/go.mau.fi/whatsmeow/sendfb.go +++ b/vendor/go.mau.fi/whatsmeow/sendfb.go @@ -36,6 +36,7 @@ import ( const FBMessageVersion = 3 const FBMessageApplicationVersion = 2 +const IGMessageApplicationVersion = 3 const FBConsumerMessageVersion = 1 const FBArmadilloMessageVersion = 1 @@ -47,6 +48,10 @@ func (cli *Client) SendFBMessage( metadata *waMsgApplication.MessageApplication_Metadata, extra ...SendRequestExtra, ) (resp SendResponse, err error) { + if cli == nil { + err = ErrClientIsNil + return + } var req SendRequestExtra if len(extra) > 1 { err = errors.New("only one extra parameter may be provided to SendMessage") @@ -132,10 +137,13 @@ func (cli *Client) SendFBMessage( resp.DebugTimings.Queue = time.Since(start) defer cli.messageSendLock.Unlock() - respChan := cli.waitResponse(req.ID) if !req.Peer { - cli.addRecentMessage(to, req.ID, nil, messageAppProto) + err = cli.addRecentMessage(ctx, to, req.ID, nil, messageAppProto) + if err != nil { + return + } } + respChan := cli.waitResponse(req.ID) var phash string var data []byte switch to.Server { @@ -177,7 +185,7 @@ func (cli *Client) SendFBMessage( resp.DebugTimings.Resp = time.Since(start) if isDisconnectNode(respNode) { start = time.Now() - respNode, err = cli.retryFrame("message send", req.ID, data, respNode, ctx, 0) + respNode, err = cli.retryFrame(ctx, "message send", req.ID, data, respNode, 0) resp.DebugTimings.Retry = time.Since(start) if err != nil { return @@ -193,9 +201,9 @@ func (cli *Client) SendFBMessage( if len(expectedPHash) > 0 && phash != expectedPHash { cli.Log.Warnf("Server returned different participant list hash when sending to %s. Some devices may not have received the message.", to) // TODO also invalidate device list caches - cli.groupParticipantsCacheLock.Lock() - delete(cli.groupParticipantsCache, to) - cli.groupParticipantsCacheLock.Unlock() + cli.groupCacheLock.Lock() + delete(cli.groupCache, to) + cli.groupCacheLock.Unlock() } return } @@ -210,11 +218,11 @@ func (cli *Client) sendGroupV3( frankingTag []byte, timings *MessageDebugTimings, ) (string, []byte, error) { - var participants []types.JID + var groupMeta *groupMetaCache var err error start := time.Now() if to.Server == types.GroupServer { - participants, err = cli.getGroupMembers(ctx, to) + groupMeta, err = cli.getCachedGroupData(ctx, to) if err != nil { return "", nil, fmt.Errorf("failed to get group members: %w", err) } @@ -224,7 +232,7 @@ func (cli *Client) sendGroupV3( start = time.Now() builder := groups.NewGroupSessionBuilder(cli.Store, pbSerializer) senderKeyName := protocol.NewSenderKeyName(to.String(), ownID.SignalAddress()) - signalSKDMessage, err := builder.Create(senderKeyName) + signalSKDMessage, err := builder.Create(ctx, senderKeyName) if err != nil { return "", nil, fmt.Errorf("failed to create sender key distribution message to send %s to %s: %w", id, to, err) } @@ -261,14 +269,16 @@ func (cli *Client) sendGroupV3( if err != nil { return "", nil, fmt.Errorf("failed to marshal message transport: %w", err) } - encrypted, err := cipher.Encrypt(plaintext) + encrypted, err := cipher.Encrypt(ctx, plaintext) if err != nil { return "", nil, fmt.Errorf("failed to encrypt group message to send %s to %s: %w", id, to, err) } ciphertext := encrypted.SignedSerialize() timings.GroupEncrypt = time.Since(start) - node, allDevices, err := cli.prepareMessageNodeV3(ctx, to, ownID, id, nil, skdm, msgAttrs, frankingTag, participants, timings) + node, allDevices, err := cli.prepareMessageNodeV3( + ctx, to, ownID, id, nil, skdm, msgAttrs, frankingTag, groupMeta.Members, timings, + ) if err != nil { return "", nil, err } @@ -286,7 +296,7 @@ func (cli *Client) sendGroupV3( node.Content = append(node.GetChildren(), skMsg) start = time.Now() - data, err := cli.sendNodeAndGetData(*node) + data, err := cli.sendNodeAndGetData(ctx, *node) timings.Send = time.Since(start) if err != nil { return "", nil, fmt.Errorf("failed to send message node: %w", err) @@ -317,7 +327,7 @@ func (cli *Client) sendDMV3( return nil, "", err } start := time.Now() - data, err := cli.sendNodeAndGetData(*node) + data, err := cli.sendNodeAndGetData(ctx, *node) timings.Send = time.Since(start) if err != nil { return nil, "", fmt.Errorf("failed to send message node: %w", err) @@ -432,7 +442,7 @@ func (cli *Client) prepareMessageNodeV3( timings *MessageDebugTimings, ) (*waBinary.Node, []types.JID, error) { start := time.Now() - allDevices, err := cli.GetUserDevicesContext(ctx, participants) + allDevices, err := cli.GetUserDevices(ctx, participants) timings.GetDevices = time.Since(start) if err != nil { return nil, nil, fmt.Errorf("failed to get device list: %w", err) @@ -461,7 +471,10 @@ func (cli *Client) prepareMessageNodeV3( } start = time.Now() - participantNodes := cli.encryptMessageForDevicesV3(ctx, allDevices, ownID, id, payload, skdm, dsm, encAttrs) + participantNodes, err := cli.encryptMessageForDevicesV3(ctx, allDevices, ownID, id, payload, skdm, dsm, encAttrs) + if err != nil { + return nil, nil, err + } timings.PeerEncrypt = time.Since(start) content := make([]waBinary.Node, 0, 4) content = append(content, waBinary.Node{ @@ -511,9 +524,28 @@ func (cli *Client) encryptMessageForDevicesV3( skdm *waMsgTransport.MessageTransport_Protocol_Ancillary_SenderKeyDistributionMessage, dsm *waMsgTransport.MessageTransport_Protocol_Integral_DeviceSentMessage, encAttrs waBinary.Attrs, -) []waBinary.Node { +) ([]waBinary.Node, error) { participantNodes := make([]waBinary.Node, 0, len(allDevices)) + + sessionAddressToJID := make(map[string]types.JID, len(allDevices)) + sessionAddresses := make([]string, 0, len(allDevices)) + for _, jid := range allDevices { + addr := jid.SignalAddress().String() + sessionAddresses = append(sessionAddresses, addr) + sessionAddressToJID[addr] = jid + } + existingSessions, ctx, err := cli.Store.WithCachedSessions(ctx, sessionAddresses) + if err != nil { + return nil, fmt.Errorf("failed to prefetch sessions: %w", err) + } var retryDevices []types.JID + for addr, exists := range existingSessions { + if !exists { + retryDevices = append(retryDevices, sessionAddressToJID[addr]) + } + } + bundles := cli.fetchPreKeysNoError(ctx, retryDevices) + for _, jid := range allDevices { var dsmForDevice *waMsgTransport.MessageTransport_Protocol_Integral_DeviceSentMessage if jid.User == ownID.User { @@ -522,44 +554,26 @@ func (cli *Client) encryptMessageForDevicesV3( } dsmForDevice = dsm } - encrypted, err := cli.encryptMessageForDeviceAndWrapV3(payload, skdm, dsmForDevice, jid, nil, encAttrs) - if errors.Is(err, ErrNoSession) { - retryDevices = append(retryDevices, jid) - continue - } else if err != nil { + encrypted, err := cli.encryptMessageForDeviceAndWrapV3(ctx, payload, skdm, dsmForDevice, jid, bundles[jid], encAttrs) + if err != nil { + // TODO return these errors if it's a fatal one (like context cancellation or database) cli.Log.Warnf("Failed to encrypt %s for %s: %v", id, jid, err) + if ctx.Err() != nil { + return nil, err + } continue } participantNodes = append(participantNodes, *encrypted) } - if len(retryDevices) > 0 { - bundles, err := cli.fetchPreKeys(ctx, retryDevices) - if err != nil { - cli.Log.Warnf("Failed to fetch prekeys for %v to retry encryption: %v", retryDevices, err) - } else { - for _, jid := range retryDevices { - resp := bundles[jid] - if resp.err != nil { - cli.Log.Warnf("Failed to fetch prekey for %s: %v", jid, resp.err) - continue - } - var dsmForDevice *waMsgTransport.MessageTransport_Protocol_Integral_DeviceSentMessage - if jid.User == ownID.User { - dsmForDevice = dsm - } - encrypted, err := cli.encryptMessageForDeviceAndWrapV3(payload, skdm, dsmForDevice, jid, resp.bundle, encAttrs) - if err != nil { - cli.Log.Warnf("Failed to encrypt %s for %s (retry): %v", id, jid, err) - continue - } - participantNodes = append(participantNodes, *encrypted) - } - } + err = cli.Store.PutCachedSessions(ctx) + if err != nil { + return nil, fmt.Errorf("failed to save cached sessions: %w", err) } - return participantNodes + return participantNodes, nil } func (cli *Client) encryptMessageForDeviceAndWrapV3( + ctx context.Context, payload *waMsgTransport.MessageTransport_Payload, skdm *waMsgTransport.MessageTransport_Protocol_Ancillary_SenderKeyDistributionMessage, dsm *waMsgTransport.MessageTransport_Protocol_Integral_DeviceSentMessage, @@ -567,7 +581,7 @@ func (cli *Client) encryptMessageForDeviceAndWrapV3( bundle *prekey.Bundle, encAttrs waBinary.Attrs, ) (*waBinary.Node, error) { - node, err := cli.encryptMessageForDeviceV3(payload, skdm, dsm, to, bundle, encAttrs) + node, err := cli.encryptMessageForDeviceV3(ctx, payload, skdm, dsm, to, bundle, encAttrs) if err != nil { return nil, err } @@ -579,6 +593,7 @@ func (cli *Client) encryptMessageForDeviceAndWrapV3( } func (cli *Client) encryptMessageForDeviceV3( + ctx context.Context, payload *waMsgTransport.MessageTransport_Payload, skdm *waMsgTransport.MessageTransport_Protocol_Ancillary_SenderKeyDistributionMessage, dsm *waMsgTransport.MessageTransport_Protocol_Integral_DeviceSentMessage, @@ -589,16 +604,21 @@ func (cli *Client) encryptMessageForDeviceV3( builder := session.NewBuilderFromSignal(cli.Store, to.SignalAddress(), pbSerializer) if bundle != nil { cli.Log.Debugf("Processing prekey bundle for %s", to) - err := builder.ProcessBundle(bundle) + err := builder.ProcessBundle(ctx, bundle) if cli.AutoTrustIdentity && errors.Is(err, signalerror.ErrUntrustedIdentity) { cli.Log.Warnf("Got %v error while trying to process prekey bundle for %s, clearing stored identity and retrying", err, to) - cli.clearUntrustedIdentity(to) - err = builder.ProcessBundle(bundle) + err = cli.clearUntrustedIdentity(ctx, to) + if err != nil { + return nil, fmt.Errorf("failed to clear untrusted identity: %w", err) + } + err = builder.ProcessBundle(ctx, bundle) } if err != nil { return nil, fmt.Errorf("failed to process prekey bundle: %w", err) } - } else if !cli.Store.ContainsSession(to.SignalAddress()) { + } else if contains, err := cli.Store.ContainsSession(ctx, to.SignalAddress()); err != nil { + return nil, err + } else if !contains { return nil, ErrNoSession } cipher := session.NewCipher(builder, to.SignalAddress()) @@ -620,7 +640,7 @@ func (cli *Client) encryptMessageForDeviceV3( if err != nil { return nil, fmt.Errorf("failed to marshal message transport: %w", err) } - ciphertext, err := cipher.Encrypt(plaintext) + ciphertext, err := cipher.Encrypt(ctx, plaintext) if err != nil { return nil, fmt.Errorf("cipher encryption failed: %w", err) } diff --git a/vendor/go.mau.fi/whatsmeow/socket/constants.go b/vendor/go.mau.fi/whatsmeow/socket/constants.go index 2a53a21bf5..5e2e8b012f 100644 --- a/vendor/go.mau.fi/whatsmeow/socket/constants.go +++ b/vendor/go.mau.fi/whatsmeow/socket/constants.go @@ -32,7 +32,7 @@ const ( var WAConnHeader = []byte{'W', 'A', WAMagicValue, token.DictVersion} const ( - FrameMaxSize = 2 << 23 + FrameMaxSize = 1 << 24 FrameLengthSize = 3 ) @@ -41,3 +41,8 @@ var ( ErrSocketClosed = errors.New("frame socket is closed") ErrSocketAlreadyOpen = errors.New("frame socket is already open") ) + +type ErrWithStatusCode struct { + error + StatusCode int +} diff --git a/vendor/go.mau.fi/whatsmeow/socket/dialopts.go b/vendor/go.mau.fi/whatsmeow/socket/dialopts.go new file mode 100644 index 0000000000..4bd6096725 --- /dev/null +++ b/vendor/go.mau.fi/whatsmeow/socket/dialopts.go @@ -0,0 +1,14 @@ +//go:build !js + +package socket + +import ( + "github.com/coder/websocket" +) + +func (fs *FrameSocket) makeDialOptions() *websocket.DialOptions { + return &websocket.DialOptions{ + HTTPClient: fs.HTTPClient, + HTTPHeader: fs.HTTPHeaders, + } +} diff --git a/vendor/go.mau.fi/whatsmeow/socket/dialopts_js.go b/vendor/go.mau.fi/whatsmeow/socket/dialopts_js.go new file mode 100644 index 0000000000..9dc27cddc2 --- /dev/null +++ b/vendor/go.mau.fi/whatsmeow/socket/dialopts_js.go @@ -0,0 +1,9 @@ +package socket + +import ( + "github.com/coder/websocket" +) + +func (fs *FrameSocket) makeDialOptions() *websocket.DialOptions { + return &websocket.DialOptions{} +} diff --git a/vendor/go.mau.fi/whatsmeow/socket/framesocket.go b/vendor/go.mau.fi/whatsmeow/socket/framesocket.go index 148c7008e8..6c84fa7f83 100644 --- a/vendor/go.mau.fi/whatsmeow/socket/framesocket.go +++ b/vendor/go.mau.fi/whatsmeow/socket/framesocket.go @@ -1,4 +1,4 @@ -// Copyright (c) 2021 Tulir Asokan +// Copyright (c) 2025 Tulir Asokan // // This Source Code Form is subject to the terms of the Mozilla Public // License, v. 2.0. If a copy of the MPL was not distributed with this @@ -12,29 +12,30 @@ import ( "fmt" "net/http" "sync" - "time" - "github.com/gorilla/websocket" + "github.com/coder/websocket" waLog "go.mau.fi/whatsmeow/util/log" ) type FrameSocket struct { - conn *websocket.Conn - ctx context.Context - cancel func() - log waLog.Logger - lock sync.Mutex + parentCtx context.Context + cancelCtx context.Context + cancel context.CancelFunc + conn *websocket.Conn + log waLog.Logger + lock sync.Mutex URL string HTTPHeaders http.Header + HTTPClient *http.Client Frames chan []byte - OnDisconnect func(remote bool) - WriteTimeout time.Duration + OnDisconnect func(ctx context.Context, remote bool) Header []byte - Dialer websocket.Dialer + + closed bool incomingLength int receivedLength int @@ -42,17 +43,15 @@ type FrameSocket struct { partialHeader []byte } -func NewFrameSocket(log waLog.Logger, dialer websocket.Dialer) *FrameSocket { +func NewFrameSocket(log waLog.Logger, client *http.Client) *FrameSocket { return &FrameSocket{ - conn: nil, log: log, Header: WAConnHeader, Frames: make(chan []byte), URL: URL, HTTPHeaders: http.Header{"Origin": {Origin}}, - - Dialer: dialer, + HTTPClient: client, } } @@ -60,11 +59,7 @@ func (fs *FrameSocket) IsConnected() bool { return fs.conn != nil } -func (fs *FrameSocket) Context() context.Context { - return fs.ctx -} - -func (fs *FrameSocket) Close(code int) { +func (fs *FrameSocket) Close(code websocket.StatusCode) { fs.lock.Lock() defer fs.lock.Unlock() @@ -72,58 +67,56 @@ func (fs *FrameSocket) Close(code int) { return } + fs.closed = true if code > 0 { - message := websocket.FormatCloseMessage(code, "") - err := fs.conn.WriteControl(websocket.CloseMessage, message, time.Now().Add(time.Second)) + err := fs.conn.Close(code, "") if err != nil { - fs.log.Warnf("Error sending close message: %v", err) + fs.log.Warnf("Error sending close to websocket: %v", err) + } + } else { + err := fs.conn.CloseNow() + if err != nil { + fs.log.Debugf("Error force closing websocket: %v", err) } - } - - fs.cancel() - err := fs.conn.Close() - if err != nil { - fs.log.Errorf("Error closing websocket: %v", err) } fs.conn = nil - fs.ctx = nil + fs.cancel() fs.cancel = nil if fs.OnDisconnect != nil { - go fs.OnDisconnect(code == 0) + go fs.OnDisconnect(fs.parentCtx, code == 0) } } -func (fs *FrameSocket) Connect() error { +func (fs *FrameSocket) Connect(ctx context.Context) error { fs.lock.Lock() defer fs.lock.Unlock() - if fs.conn != nil { return ErrSocketAlreadyOpen } - ctx, cancel := context.WithCancel(context.Background()) + fs.parentCtx = ctx + fs.cancelCtx, fs.cancel = context.WithCancel(ctx) fs.log.Debugf("Dialing %s", fs.URL) - conn, _, err := fs.Dialer.Dial(fs.URL, fs.HTTPHeaders) + conn, resp, err := websocket.Dial(ctx, fs.URL, fs.makeDialOptions()) if err != nil { - cancel() - return fmt.Errorf("couldn't dial whatsapp web websocket: %w", err) + if resp != nil { + err = ErrWithStatusCode{err, resp.StatusCode} + } + fs.cancel() + return fmt.Errorf("failed to dial whatsapp web websocket: %w", err) } + conn.SetReadLimit(FrameMaxSize) - fs.ctx, fs.cancel = ctx, cancel fs.conn = conn - conn.SetCloseHandler(func(code int, text string) error { - fs.log.Debugf("Server closed websocket with status %d/%s", code, text) - cancel() - // from default CloseHandler - message := websocket.FormatCloseMessage(code, "") - _ = conn.WriteControl(websocket.CloseMessage, message, time.Now().Add(time.Second)) - return nil - }) go fs.readPump(conn, ctx) return nil } +func (fs *FrameSocket) Context() context.Context { + return fs.cancelCtx +} + func (fs *FrameSocket) SendFrame(data []byte) error { conn := fs.conn if conn == nil { @@ -153,13 +146,7 @@ func (fs *FrameSocket) SendFrame(data []byte) error { // Copy actual frame data copy(wholeFrame[headerLength+FrameLengthSize:], data) - if fs.WriteTimeout > 0 { - err := conn.SetWriteDeadline(time.Now().Add(fs.WriteTimeout)) - if err != nil { - fs.log.Warnf("Failed to set write deadline: %v", err) - } - } - return conn.WriteMessage(websocket.BinaryMessage, wholeFrame) + return conn.Write(fs.cancelCtx, websocket.MessageBinary, wholeFrame) } func (fs *FrameSocket) frameComplete() { @@ -199,7 +186,7 @@ func (fs *FrameSocket) processData(msg []byte) { msg = nil } } else { - if len(fs.incoming)+len(msg) >= fs.incomingLength { + if fs.receivedLength+len(msg) >= fs.incomingLength { copy(fs.incoming[fs.receivedLength:], msg[:fs.incomingLength-fs.receivedLength]) msg = msg[fs.incomingLength-fs.receivedLength:] fs.frameComplete() @@ -219,14 +206,14 @@ func (fs *FrameSocket) readPump(conn *websocket.Conn, ctx context.Context) { go fs.Close(0) }() for { - msgType, data, err := conn.ReadMessage() + msgType, data, err := conn.Read(ctx) if err != nil { // Ignore the error if the context has been closed - if !errors.Is(ctx.Err(), context.Canceled) { + if !fs.closed && !errors.Is(ctx.Err(), context.Canceled) { fs.log.Errorf("Error reading from websocket: %v", err) } return - } else if msgType != websocket.BinaryMessage { + } else if msgType != websocket.MessageBinary { fs.log.Warnf("Got unexpected websocket message type %d", msgType) continue } diff --git a/vendor/go.mau.fi/whatsmeow/socket/noisehandshake.go b/vendor/go.mau.fi/whatsmeow/socket/noisehandshake.go index 3add47052a..c061f22bbc 100644 --- a/vendor/go.mau.fi/whatsmeow/socket/noisehandshake.go +++ b/vendor/go.mau.fi/whatsmeow/socket/noisehandshake.go @@ -1,4 +1,4 @@ -// Copyright (c) 2021 Tulir Asokan +// Copyright (c) 2025 Tulir Asokan // // This Source Code Form is subject to the terms of the Mozilla Public // License, v. 2.0. If a copy of the MPL was not distributed with this @@ -7,6 +7,7 @@ package socket import ( + "context" "crypto/cipher" "crypto/sha256" "fmt" @@ -74,14 +75,19 @@ func (nh *NoiseHandshake) Decrypt(ciphertext []byte) (plaintext []byte, err erro return } -func (nh *NoiseHandshake) Finish(fs *FrameSocket, frameHandler FrameHandler, disconnectHandler DisconnectHandler) (*NoiseSocket, error) { +func (nh *NoiseHandshake) Finish( + ctx context.Context, + fs *FrameSocket, + frameHandler FrameHandler, + disconnectHandler DisconnectHandler, +) (*NoiseSocket, error) { if write, read, err := nh.extractAndExpand(nh.salt, nil); err != nil { return nil, fmt.Errorf("failed to extract final keys: %w", err) } else if writeKey, err := gcmutil.Prepare(write); err != nil { return nil, fmt.Errorf("failed to create final write cipher: %w", err) } else if readKey, err := gcmutil.Prepare(read); err != nil { return nil, fmt.Errorf("failed to create final read cipher: %w", err) - } else if ns, err := newNoiseSocket(fs, writeKey, readKey, frameHandler, disconnectHandler); err != nil { + } else if ns, err := newNoiseSocket(ctx, fs, writeKey, readKey, frameHandler, disconnectHandler); err != nil { return nil, fmt.Errorf("failed to create noise socket: %w", err) } else { return ns, nil diff --git a/vendor/go.mau.fi/whatsmeow/socket/noisesocket.go b/vendor/go.mau.fi/whatsmeow/socket/noisesocket.go index 804054e81e..8175868ce6 100644 --- a/vendor/go.mau.fi/whatsmeow/socket/noisesocket.go +++ b/vendor/go.mau.fi/whatsmeow/socket/noisesocket.go @@ -1,4 +1,4 @@ -// Copyright (c) 2021 Tulir Asokan +// Copyright (c) 2025 Tulir Asokan // // This Source Code Form is subject to the terms of the Mozilla Public // License, v. 2.0. If a copy of the MPL was not distributed with this @@ -13,7 +13,7 @@ import ( "sync" "sync/atomic" - "github.com/gorilla/websocket" + "github.com/coder/websocket" ) type NoiseSocket struct { @@ -28,10 +28,16 @@ type NoiseSocket struct { stopConsumer chan struct{} } -type DisconnectHandler func(socket *NoiseSocket, remote bool) -type FrameHandler func([]byte) +type DisconnectHandler func(ctx context.Context, socket *NoiseSocket, remote bool) +type FrameHandler func(context.Context, []byte) -func newNoiseSocket(fs *FrameSocket, writeKey, readKey cipher.AEAD, frameHandler FrameHandler, disconnectHandler DisconnectHandler) (*NoiseSocket, error) { +func newNoiseSocket( + ctx context.Context, + fs *FrameSocket, + writeKey, readKey cipher.AEAD, + frameHandler FrameHandler, + disconnectHandler DisconnectHandler, +) (*NoiseSocket, error) { ns := &NoiseSocket{ fs: fs, writeKey: writeKey, @@ -39,10 +45,10 @@ func newNoiseSocket(fs *FrameSocket, writeKey, readKey cipher.AEAD, frameHandler onFrame: frameHandler, stopConsumer: make(chan struct{}), } - fs.OnDisconnect = func(remote bool) { - disconnectHandler(ns, remote) + fs.OnDisconnect = func(ctx context.Context, remote bool) { + disconnectHandler(ctx, ns, remote) } - go ns.consumeFrames(fs.ctx, fs.Frames) + go ns.consumeFrames(ctx, fs.Frames) return ns, nil } @@ -55,7 +61,7 @@ func (ns *NoiseSocket) consumeFrames(ctx context.Context, frames <-chan []byte) for { select { case frame := <-frames: - ns.receiveEncryptedFrame(frame) + ns.receiveEncryptedFrame(ctx, frame) case <-ctxDone: return case <-ns.stopConsumer: @@ -70,37 +76,47 @@ func generateIV(count uint32) []byte { return iv } -func (ns *NoiseSocket) Context() context.Context { - return ns.fs.Context() -} - -func (ns *NoiseSocket) Stop(disconnect bool) { +func (ns *NoiseSocket) Stop(disconnect, allowOnDisconnect bool) { if ns.destroyed.CompareAndSwap(false, true) { close(ns.stopConsumer) - ns.fs.OnDisconnect = nil + if !allowOnDisconnect { + ns.fs.OnDisconnect = nil + } if disconnect { - ns.fs.Close(websocket.CloseNormalClosure) + ns.fs.Close(websocket.StatusNormalClosure) } } } -func (ns *NoiseSocket) SendFrame(plaintext []byte) error { +func (ns *NoiseSocket) SendFrame(ctx context.Context, plaintext []byte) error { ns.writeLock.Lock() + defer ns.writeLock.Unlock() + if ctx.Err() != nil { + return ctx.Err() + } + // Don't reuse plaintext slice for storage as it may be needed for retries ciphertext := ns.writeKey.Seal(nil, generateIV(ns.writeCounter), plaintext, nil) ns.writeCounter++ - err := ns.fs.SendFrame(ciphertext) - ns.writeLock.Unlock() - return err + doneChan := make(chan error, 1) + go func() { + doneChan <- ns.fs.SendFrame(ciphertext) + }() + select { + case <-ctx.Done(): + return ctx.Err() + case retErr := <-doneChan: + return retErr + } } -func (ns *NoiseSocket) receiveEncryptedFrame(ciphertext []byte) { - count := atomic.AddUint32(&ns.readCounter, 1) - 1 - plaintext, err := ns.readKey.Open(nil, generateIV(count), ciphertext, nil) +func (ns *NoiseSocket) receiveEncryptedFrame(ctx context.Context, ciphertext []byte) { + plaintext, err := ns.readKey.Open(ciphertext[:0], generateIV(ns.readCounter), ciphertext, nil) + ns.readCounter++ if err != nil { ns.fs.log.Warnf("Failed to decrypt frame: %v", err) return } - ns.onFrame(plaintext) + ns.onFrame(ctx, plaintext) } func (ns *NoiseSocket) IsConnected() bool { diff --git a/vendor/go.mau.fi/whatsmeow/store/clientpayload.go b/vendor/go.mau.fi/whatsmeow/store/clientpayload.go index 8902b52b96..5fa9348924 100644 --- a/vendor/go.mau.fi/whatsmeow/store/clientpayload.go +++ b/vendor/go.mau.fi/whatsmeow/store/clientpayload.go @@ -17,7 +17,9 @@ import ( "go.mau.fi/libsignal/ecc" - waProto "go.mau.fi/whatsmeow/binary/proto" + "go.mau.fi/whatsmeow/proto/waCompanionReg" + "go.mau.fi/whatsmeow/proto/waWa6" + "go.mau.fi/whatsmeow/types" ) // WAVersionContainer is a container for a WhatsApp web version number. @@ -65,8 +67,8 @@ func (vc WAVersionContainer) Hash() [16]byte { return md5.Sum([]byte(vc.String())) } -func (vc WAVersionContainer) ProtoAppVersion() *waProto.ClientPayload_UserAgent_AppVersion { - return &waProto.ClientPayload_UserAgent_AppVersion{ +func (vc WAVersionContainer) ProtoAppVersion() *waWa6.ClientPayload_UserAgent_AppVersion { + return &waWa6.ClientPayload_UserAgent_AppVersion{ Primary: &vc[0], Secondary: &vc[1], Tertiary: &vc[2], @@ -74,7 +76,7 @@ func (vc WAVersionContainer) ProtoAppVersion() *waProto.ClientPayload_UserAgent_ } // waVersion is the WhatsApp web client version -var waVersion = WAVersionContainer{2, 3000, 1015853550} +var waVersion = WAVersionContainer{2, 3000, 1033516464} // waVersionHash is the md5 hash of a dot-separated waVersion var waVersionHash [16]byte @@ -100,36 +102,55 @@ func SetWAVersion(version WAVersionContainer) { waVersionHash = version.Hash() } -var BaseClientPayload = &waProto.ClientPayload{ - UserAgent: &waProto.ClientPayload_UserAgent{ - Platform: waProto.ClientPayload_UserAgent_WEB.Enum(), - ReleaseChannel: waProto.ClientPayload_UserAgent_RELEASE.Enum(), +var BaseClientPayload = &waWa6.ClientPayload{ + UserAgent: &waWa6.ClientPayload_UserAgent{ + Platform: waWa6.ClientPayload_UserAgent_WEB.Enum(), + ReleaseChannel: waWa6.ClientPayload_UserAgent_RELEASE.Enum(), AppVersion: waVersion.ProtoAppVersion(), Mcc: proto.String("000"), Mnc: proto.String("000"), - OsVersion: proto.String("0.1.0"), + OsVersion: proto.String("0.1"), Manufacturer: proto.String(""), Device: proto.String("Desktop"), - OsBuildNumber: proto.String("0.1.0"), + OsBuildNumber: proto.String("0.1"), LocaleLanguageIso6391: proto.String("en"), - LocaleCountryIso31661Alpha2: proto.String("en"), + LocaleCountryIso31661Alpha2: proto.String("US"), }, - WebInfo: &waProto.ClientPayload_WebInfo{ - WebSubPlatform: waProto.ClientPayload_WebInfo_WEB_BROWSER.Enum(), + WebInfo: &waWa6.ClientPayload_WebInfo{ + WebSubPlatform: waWa6.ClientPayload_WebInfo_WEB_BROWSER.Enum(), }, - ConnectType: waProto.ClientPayload_WIFI_UNKNOWN.Enum(), - ConnectReason: waProto.ClientPayload_USER_ACTIVATED.Enum(), + ConnectType: waWa6.ClientPayload_WIFI_UNKNOWN.Enum(), + ConnectReason: waWa6.ClientPayload_USER_ACTIVATED.Enum(), } -var DeviceProps = &waProto.DeviceProps{ +var DeviceProps = &waCompanionReg.DeviceProps{ Os: proto.String("whatsmeow"), - Version: &waProto.DeviceProps_AppVersion{ + Version: &waCompanionReg.DeviceProps_AppVersion{ Primary: proto.Uint32(0), Secondary: proto.Uint32(1), Tertiary: proto.Uint32(0), }, - PlatformType: waProto.DeviceProps_UNKNOWN.Enum(), + HistorySyncConfig: &waCompanionReg.DeviceProps_HistorySyncConfig{ + StorageQuotaMb: proto.Uint32(10240), + InlineInitialPayloadInE2EeMsg: proto.Bool(true), + RecentSyncDaysLimit: nil, + SupportCallLogHistory: proto.Bool(false), + SupportBotUserAgentChatHistory: proto.Bool(true), + SupportCagReactionsAndPolls: proto.Bool(true), + SupportBizHostedMsg: proto.Bool(true), + SupportRecentSyncChunkMessageCountTuning: proto.Bool(true), + SupportHostedGroupMsg: proto.Bool(true), + SupportFbidBotChatHistory: proto.Bool(true), + SupportAddOnHistorySyncMigration: nil, + SupportMessageAssociation: proto.Bool(true), + SupportGroupHistory: proto.Bool(false), + OnDemandReady: nil, + SupportGuestChat: nil, + CompleteOnDemandReady: nil, + ThumbnailSyncDaysLimit: nil, + }, + PlatformType: waCompanionReg.DeviceProps_UNKNOWN.Enum(), RequireFullSync: proto.Bool(false), } @@ -142,14 +163,14 @@ func SetOSInfo(name string, version [3]uint32) { BaseClientPayload.UserAgent.OsBuildNumber = BaseClientPayload.UserAgent.OsVersion } -func (device *Device) getRegistrationPayload() *waProto.ClientPayload { - payload := proto.Clone(BaseClientPayload).(*waProto.ClientPayload) +func (device *Device) getRegistrationPayload() *waWa6.ClientPayload { + payload := proto.Clone(BaseClientPayload).(*waWa6.ClientPayload) regID := make([]byte, 4) binary.BigEndian.PutUint32(regID, device.RegistrationID) preKeyID := make([]byte, 4) binary.BigEndian.PutUint32(preKeyID, device.SignedPreKey.KeyID) deviceProps, _ := proto.Marshal(DeviceProps) - payload.DevicePairingData = &waProto.ClientPayload_DevicePairingRegistrationData{ + payload.DevicePairingData = &waWa6.ClientPayload_DevicePairingRegistrationData{ ERegid: regID, EKeytype: []byte{ecc.DjbType}, EIdent: device.IdentityKey.Pub[:], @@ -160,19 +181,25 @@ func (device *Device) getRegistrationPayload() *waProto.ClientPayload { DeviceProps: deviceProps, } payload.Passive = proto.Bool(false) + payload.Pull = proto.Bool(false) return payload } -func (device *Device) getLoginPayload() *waProto.ClientPayload { - payload := proto.Clone(BaseClientPayload).(*waProto.ClientPayload) +func (device *Device) getLoginPayload() *waWa6.ClientPayload { + payload := proto.Clone(BaseClientPayload).(*waWa6.ClientPayload) payload.Username = proto.Uint64(device.ID.UserInt()) payload.Device = proto.Uint32(uint32(device.ID.Device)) payload.Passive = proto.Bool(true) + payload.Pull = proto.Bool(true) + payload.LidDbMigrated = proto.Bool(true) return payload } -func (device *Device) GetClientPayload() *waProto.ClientPayload { +func (device *Device) GetClientPayload() *waWa6.ClientPayload { if device.ID != nil { + if *device.ID == types.EmptyJID { + panic(fmt.Errorf("GetClientPayload called with empty JID")) + } return device.getLoginPayload() } else { return device.getRegistrationPayload() diff --git a/vendor/go.mau.fi/whatsmeow/store/noop.go b/vendor/go.mau.fi/whatsmeow/store/noop.go new file mode 100644 index 0000000000..d0b99f0839 --- /dev/null +++ b/vendor/go.mau.fi/whatsmeow/store/noop.go @@ -0,0 +1,289 @@ +// Copyright (c) 2025 Tulir Asokan +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. + +package store + +import ( + "context" + "errors" + "time" + + "go.mau.fi/whatsmeow/types" + "go.mau.fi/whatsmeow/util/keys" +) + +type NoopStore struct { + Error error +} + +var nilStore = &NoopStore{Error: errors.New("store is nil")} +var nilKey = &keys.KeyPair{Priv: &[32]byte{}, Pub: &[32]byte{}} +var NoopDevice = &Device{ + ID: &types.EmptyJID, + NoiseKey: nilKey, + IdentityKey: nilKey, + + Identities: nilStore, + Sessions: nilStore, + PreKeys: nilStore, + SenderKeys: nilStore, + AppStateKeys: nilStore, + AppState: nilStore, + Contacts: nilStore, + ChatSettings: nilStore, + MsgSecrets: nilStore, + PrivacyTokens: nilStore, + EventBuffer: nilStore, + LIDs: nilStore, + Container: nilStore, +} + +var _ AllStores = (*NoopStore)(nil) +var _ DeviceContainer = (*NoopStore)(nil) + +func (n *NoopStore) PutIdentity(ctx context.Context, address string, key [32]byte) error { + return n.Error +} + +func (n *NoopStore) DeleteAllIdentities(ctx context.Context, phone string) error { + return n.Error +} + +func (n *NoopStore) DeleteIdentity(ctx context.Context, address string) error { + return n.Error +} + +func (n *NoopStore) IsTrustedIdentity(ctx context.Context, address string, key [32]byte) (bool, error) { + return false, n.Error +} + +func (n *NoopStore) GetSession(ctx context.Context, address string) ([]byte, error) { + return nil, n.Error +} + +func (n *NoopStore) HasSession(ctx context.Context, address string) (bool, error) { + return false, n.Error +} + +func (n *NoopStore) GetManySessions(ctx context.Context, addresses []string) (map[string][]byte, error) { + return nil, n.Error +} + +func (n *NoopStore) PutSession(ctx context.Context, address string, session []byte) error { + return n.Error +} + +func (n *NoopStore) PutManySessions(ctx context.Context, sessions map[string][]byte) error { + return n.Error +} + +func (n *NoopStore) DeleteAllSessions(ctx context.Context, phone string) error { + return n.Error +} + +func (n *NoopStore) DeleteSession(ctx context.Context, address string) error { + return n.Error +} + +func (n *NoopStore) MigratePNToLID(ctx context.Context, pn, lid types.JID) error { + return n.Error +} + +func (n *NoopStore) GetOrGenPreKeys(ctx context.Context, count uint32) ([]*keys.PreKey, error) { + return nil, n.Error +} + +func (n *NoopStore) GenOnePreKey(ctx context.Context) (*keys.PreKey, error) { + return nil, n.Error +} + +func (n *NoopStore) GetPreKey(ctx context.Context, id uint32) (*keys.PreKey, error) { + return nil, n.Error +} + +func (n *NoopStore) RemovePreKey(ctx context.Context, id uint32) error { + return n.Error +} + +func (n *NoopStore) MarkPreKeysAsUploaded(ctx context.Context, upToID uint32) error { + return n.Error +} + +func (n *NoopStore) UploadedPreKeyCount(ctx context.Context) (int, error) { + return 0, n.Error +} + +func (n *NoopStore) PutSenderKey(ctx context.Context, group, user string, session []byte) error { + return n.Error +} + +func (n *NoopStore) GetSenderKey(ctx context.Context, group, user string) ([]byte, error) { + return nil, n.Error +} + +func (n *NoopStore) PutAppStateSyncKey(ctx context.Context, id []byte, key AppStateSyncKey) error { + return n.Error +} + +func (n *NoopStore) GetAppStateSyncKey(ctx context.Context, id []byte) (*AppStateSyncKey, error) { + return nil, n.Error +} + +func (n *NoopStore) GetLatestAppStateSyncKeyID(ctx context.Context) ([]byte, error) { + return nil, n.Error +} + +func (n *NoopStore) GetAllAppStateSyncKeys(ctx context.Context) ([]*AppStateSyncKey, error) { + return nil, nil +} + +func (n *NoopStore) PutAppStateVersion(ctx context.Context, name string, version uint64, hash [128]byte) error { + return n.Error +} + +func (n *NoopStore) GetAppStateVersion(ctx context.Context, name string) (uint64, [128]byte, error) { + return 0, [128]byte{}, n.Error +} + +func (n *NoopStore) DeleteAppStateVersion(ctx context.Context, name string) error { + return n.Error +} + +func (n *NoopStore) PutAppStateMutationMACs(ctx context.Context, name string, version uint64, mutations []AppStateMutationMAC) error { + return n.Error +} + +func (n *NoopStore) DeleteAppStateMutationMACs(ctx context.Context, name string, indexMACs [][]byte) error { + return n.Error +} + +func (n *NoopStore) GetAppStateMutationMAC(ctx context.Context, name string, indexMAC []byte) (valueMAC []byte, err error) { + return nil, n.Error +} + +func (n *NoopStore) PutPushName(ctx context.Context, user types.JID, pushName string) (bool, string, error) { + return false, "", n.Error +} + +func (n *NoopStore) PutBusinessName(ctx context.Context, user types.JID, businessName string) (bool, string, error) { + return false, "", n.Error +} + +func (n *NoopStore) PutContactName(ctx context.Context, user types.JID, fullName, firstName string) error { + return n.Error +} + +func (n *NoopStore) PutAllContactNames(ctx context.Context, contacts []ContactEntry) error { + return n.Error +} + +func (n *NoopStore) PutManyRedactedPhones(ctx context.Context, entries []RedactedPhoneEntry) error { + return n.Error +} + +func (n *NoopStore) GetContact(ctx context.Context, user types.JID) (types.ContactInfo, error) { + return types.ContactInfo{}, n.Error +} + +func (n *NoopStore) GetAllContacts(ctx context.Context) (map[types.JID]types.ContactInfo, error) { + return nil, n.Error +} + +func (n *NoopStore) PutMutedUntil(ctx context.Context, chat types.JID, mutedUntil time.Time) error { + return n.Error +} + +func (n *NoopStore) PutPinned(ctx context.Context, chat types.JID, pinned bool) error { + return n.Error +} + +func (n *NoopStore) PutArchived(ctx context.Context, chat types.JID, archived bool) error { + return n.Error +} + +func (n *NoopStore) GetChatSettings(ctx context.Context, chat types.JID) (types.LocalChatSettings, error) { + return types.LocalChatSettings{}, n.Error +} + +func (n *NoopStore) PutMessageSecrets(ctx context.Context, inserts []MessageSecretInsert) error { + return n.Error +} + +func (n *NoopStore) PutMessageSecret(ctx context.Context, chat, sender types.JID, id types.MessageID, secret []byte) error { + return n.Error +} + +func (n *NoopStore) GetMessageSecret(ctx context.Context, chat, sender types.JID, id types.MessageID) ([]byte, types.JID, error) { + return nil, types.EmptyJID, n.Error +} + +func (n *NoopStore) PutPrivacyTokens(ctx context.Context, tokens ...PrivacyToken) error { + return n.Error +} + +func (n *NoopStore) GetPrivacyToken(ctx context.Context, user types.JID) (*PrivacyToken, error) { + return nil, n.Error +} + +func (n *NoopStore) PutDevice(ctx context.Context, store *Device) error { + return n.Error +} + +func (n *NoopStore) DeleteDevice(ctx context.Context, store *Device) error { + return n.Error +} + +func (n *NoopStore) GetBufferedEvent(ctx context.Context, ciphertextHash [32]byte) (*BufferedEvent, error) { + return nil, nil +} + +func (n *NoopStore) PutBufferedEvent(ctx context.Context, ciphertextHash [32]byte, plaintext []byte, serverTimestamp time.Time) error { + return nil +} + +func (n *NoopStore) DoDecryptionTxn(ctx context.Context, fn func(context.Context) error) error { + return fn(ctx) +} + +func (n *NoopStore) ClearBufferedEventPlaintext(ctx context.Context, ciphertextHash [32]byte) error { + return nil +} + +func (n *NoopStore) DeleteOldBufferedHashes(ctx context.Context) error { + return nil +} + +func (n *NoopStore) GetLIDForPN(ctx context.Context, pn types.JID) (types.JID, error) { + return types.JID{}, n.Error +} + +func (n *NoopStore) GetManyLIDsForPNs(ctx context.Context, pns []types.JID) (map[types.JID]types.JID, error) { + return nil, n.Error +} + +func (n *NoopStore) GetPNForLID(ctx context.Context, lid types.JID) (types.JID, error) { + return types.JID{}, n.Error +} + +func (n *NoopStore) PutManyLIDMappings(ctx context.Context, mappings []LIDMapping) error { + return n.Error +} + +func (n *NoopStore) PutLIDMapping(ctx context.Context, lid types.JID, jid types.JID) error { + return n.Error +} + +func (n *NoopStore) DeleteOldOutgoingEvents(ctx context.Context) error { + return nil +} + +func (n *NoopStore) GetOutgoingEvent(ctx context.Context, chatJID, altChatJID types.JID, id types.MessageID) (string, []byte, error) { + return "", nil, nil +} + +func (n *NoopStore) AddOutgoingEvent(ctx context.Context, chatJID types.JID, id types.MessageID, format string, plaintext []byte) error { + return nil +} diff --git a/vendor/go.mau.fi/whatsmeow/store/sessioncache.go b/vendor/go.mau.fi/whatsmeow/store/sessioncache.go new file mode 100644 index 0000000000..c07b3e7e2c --- /dev/null +++ b/vendor/go.mau.fi/whatsmeow/store/sessioncache.go @@ -0,0 +1,125 @@ +// Copyright (c) 2025 Tulir Asokan +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. + +package store + +import ( + "context" + "fmt" + + "github.com/rs/zerolog" + "go.mau.fi/libsignal/state/record" + + "go.mau.fi/util/exsync" +) + +type contextKey int + +const ( + contextKeySessionCache contextKey = iota +) + +type sessionCacheEntry struct { + Dirty bool + Found bool + Record *record.Session +} + +type sessionCache = exsync.Map[string, sessionCacheEntry] + +func getSessionCache(ctx context.Context) *sessionCache { + if ctx == nil { + return nil + } + val := ctx.Value(contextKeySessionCache) + if val == nil { + return nil + } + if cache, ok := val.(*sessionCache); ok { + return cache + } + return nil +} + +func getCachedSession(ctx context.Context, addr string) *record.Session { + cache := getSessionCache(ctx) + if cache == nil { + return nil + } + sess, ok := cache.Get(addr) + if !ok { + return nil + } + return sess.Record +} + +func putCachedSession(ctx context.Context, addr string, record *record.Session) bool { + cache := getSessionCache(ctx) + if cache == nil { + return false + } + cache.Set(addr, sessionCacheEntry{ + Dirty: true, + Found: true, + Record: record, + }) + return true +} + +func (device *Device) WithCachedSessions(ctx context.Context, addresses []string) (map[string]bool, context.Context, error) { + if len(addresses) == 0 { + return nil, ctx, nil + } + + sessions, err := device.Sessions.GetManySessions(ctx, addresses) + if err != nil { + return nil, ctx, fmt.Errorf("failed to prefetch sessions: %w", err) + } + wrapped := make(map[string]sessionCacheEntry, len(sessions)) + existingSessions := make(map[string]bool, len(sessions)) + for addr, rawSess := range sessions { + var sessionRecord *record.Session + var found bool + if rawSess == nil { + sessionRecord = record.NewSession(SignalProtobufSerializer.Session, SignalProtobufSerializer.State) + } else { + found = true + sessionRecord, err = record.NewSessionFromBytes(rawSess, SignalProtobufSerializer.Session, SignalProtobufSerializer.State) + if err != nil { + zerolog.Ctx(ctx).Err(err). + Str("address", addr). + Msg("Failed to deserialize session") + continue + } + } + existingSessions[addr] = found + wrapped[addr] = sessionCacheEntry{Record: sessionRecord, Found: found} + } + + ctx = context.WithValue(ctx, contextKeySessionCache, (*sessionCache)(exsync.NewMapWithData(wrapped))) + return existingSessions, ctx, nil +} + +func (device *Device) PutCachedSessions(ctx context.Context) error { + cache := getSessionCache(ctx) + if cache == nil { + return nil + } + dirtySessions := make(map[string][]byte) + for addr, item := range cache.Iter() { + if item.Dirty { + dirtySessions[addr] = item.Record.Serialize() + } + } + if len(dirtySessions) > 0 { + err := device.Sessions.PutManySessions(ctx, dirtySessions) + if err != nil { + return fmt.Errorf("failed to store cached sessions: %w", err) + } + } + cache.Clear() + return nil +} diff --git a/vendor/go.mau.fi/whatsmeow/store/signal.go b/vendor/go.mau.fi/whatsmeow/store/signal.go index 4c06ed4f65..aa1a459ec8 100644 --- a/vendor/go.mau.fi/whatsmeow/store/signal.go +++ b/vendor/go.mau.fi/whatsmeow/store/signal.go @@ -7,6 +7,9 @@ package store import ( + "context" + "fmt" + "go.mau.fi/libsignal/ecc" groupRecord "go.mau.fi/libsignal/groups/state/record" "go.mau.fi/libsignal/keys/identity" @@ -14,8 +17,6 @@ import ( "go.mau.fi/libsignal/serialize" "go.mau.fi/libsignal/state/record" "go.mau.fi/libsignal/state/store" - - "go.mau.fi/whatsmeow/util/keys" ) var SignalProtobufSerializer = serialize.NewProtoBufSerializer() @@ -29,164 +30,161 @@ func (device *Device) GetIdentityKeyPair() *identity.KeyPair { ) } -func (device *Device) GetLocalRegistrationId() uint32 { +func (device *Device) GetLocalRegistrationID() uint32 { return device.RegistrationID } -func (device *Device) SaveIdentity(address *protocol.SignalAddress, identityKey *identity.Key) { - for i := 0; ; i++ { - err := device.Identities.PutIdentity(address.String(), identityKey.PublicKey().PublicKey()) - if err == nil || !device.handleDatabaseError(i, err, "save identity of %s", address.String()) { - break - } +func (device *Device) SaveIdentity(ctx context.Context, address *protocol.SignalAddress, identityKey *identity.Key) error { + addrString := address.String() + err := device.Identities.PutIdentity(ctx, addrString, identityKey.PublicKey().PublicKey()) + if err != nil { + return fmt.Errorf("failed to save identity of %s: %w", addrString, err) } + return nil } -func (device *Device) IsTrustedIdentity(address *protocol.SignalAddress, identityKey *identity.Key) bool { - for i := 0; ; i++ { - isTrusted, err := device.Identities.IsTrustedIdentity(address.String(), identityKey.PublicKey().PublicKey()) - if err == nil || !device.handleDatabaseError(i, err, "check if %s's identity is trusted", address.String()) { - return isTrusted - } +func (device *Device) IsTrustedIdentity(ctx context.Context, address *protocol.SignalAddress, identityKey *identity.Key) (bool, error) { + addrString := address.String() + isTrusted, err := device.Identities.IsTrustedIdentity(ctx, addrString, identityKey.PublicKey().PublicKey()) + if err != nil { + return false, fmt.Errorf("failed to check if %s's identity is trusted: %w", addrString, err) } + return isTrusted, nil } -func (device *Device) LoadPreKey(id uint32) *record.PreKey { - var preKey *keys.PreKey - for i := 0; ; i++ { - var err error - preKey, err = device.PreKeys.GetPreKey(id) - if err == nil || !device.handleDatabaseError(i, err, "load prekey %d", id) { - break - } +func (device *Device) LoadPreKey(ctx context.Context, id uint32) (*record.PreKey, error) { + preKey, err := device.PreKeys.GetPreKey(ctx, id) + if err != nil { + return nil, fmt.Errorf("failed to load prekey %d: %w", id, err) } if preKey == nil { - return nil + return nil, nil } return record.NewPreKey(preKey.KeyID, ecc.NewECKeyPair( ecc.NewDjbECPublicKey(*preKey.Pub), ecc.NewDjbECPrivateKey(*preKey.Priv), - ), nil) + ), nil), nil } -func (device *Device) RemovePreKey(id uint32) { - for i := 0; ; i++ { - err := device.PreKeys.RemovePreKey(id) - if err == nil || !device.handleDatabaseError(i, err, "remove prekey %d", id) { - break - } +func (device *Device) RemovePreKey(ctx context.Context, id uint32) error { + err := device.PreKeys.RemovePreKey(ctx, id) + if err != nil { + return fmt.Errorf("failed to remove prekey %d: %w", id, err) } + return nil } -func (device *Device) StorePreKey(preKeyID uint32, preKeyRecord *record.PreKey) { +func (device *Device) StorePreKey(ctx context.Context, preKeyID uint32, preKeyRecord *record.PreKey) error { panic("not implemented") } -func (device *Device) ContainsPreKey(preKeyID uint32) bool { +func (device *Device) ContainsPreKey(ctx context.Context, preKeyID uint32) (bool, error) { panic("not implemented") } -func (device *Device) LoadSession(address *protocol.SignalAddress) *record.Session { - var rawSess []byte - for i := 0; ; i++ { - var err error - rawSess, err = device.Sessions.GetSession(address.String()) - if err == nil || !device.handleDatabaseError(i, err, "load session with %s", address.String()) { - break - } +func (device *Device) LoadSession(ctx context.Context, address *protocol.SignalAddress) (*record.Session, error) { + addrString := address.String() + if sess := getCachedSession(ctx, addrString); sess != nil { + return sess, nil + } + + rawSess, err := device.Sessions.GetSession(ctx, addrString) + if err != nil { + return nil, fmt.Errorf("failed to load session with %s: %w", addrString, err) } if rawSess == nil { - return record.NewSession(SignalProtobufSerializer.Session, SignalProtobufSerializer.State) + return record.NewSession(SignalProtobufSerializer.Session, SignalProtobufSerializer.State), nil } sess, err := record.NewSessionFromBytes(rawSess, SignalProtobufSerializer.Session, SignalProtobufSerializer.State) if err != nil { - device.Log.Errorf("Failed to deserialize session with %s: %v", address.String(), err) - return record.NewSession(SignalProtobufSerializer.Session, SignalProtobufSerializer.State) + return nil, fmt.Errorf("failed to deserialize session with %s: %w", addrString, err) } - return sess + return sess, nil } -func (device *Device) GetSubDeviceSessions(name string) []uint32 { +func (device *Device) GetSubDeviceSessions(ctx context.Context, name string) ([]uint32, error) { panic("not implemented") } -func (device *Device) StoreSession(address *protocol.SignalAddress, record *record.Session) { - for i := 0; ; i++ { - err := device.Sessions.PutSession(address.String(), record.Serialize()) - if err == nil || !device.handleDatabaseError(i, err, "store session with %s", address.String()) { - return - } +func (device *Device) StoreSession(ctx context.Context, address *protocol.SignalAddress, record *record.Session) error { + addrString := address.String() + if putCachedSession(ctx, addrString, record) { + return nil + } + + err := device.Sessions.PutSession(ctx, addrString, record.Serialize()) + if err != nil { + return fmt.Errorf("failed to store session with %s: %w", addrString, err) } + return nil } -func (device *Device) ContainsSession(remoteAddress *protocol.SignalAddress) bool { - for i := 0; ; i++ { - hasSession, err := device.Sessions.HasSession(remoteAddress.String()) - if err == nil || !device.handleDatabaseError(i, err, "store has session for %s", remoteAddress.String()) { - return hasSession - } +func (device *Device) ContainsSession(ctx context.Context, remoteAddress *protocol.SignalAddress) (bool, error) { + addrString := remoteAddress.String() + hasSession, err := device.Sessions.HasSession(ctx, addrString) + if err != nil { + return false, fmt.Errorf("failed to check if store has session for %s: %w", addrString, err) } + return hasSession, nil } -func (device *Device) DeleteSession(remoteAddress *protocol.SignalAddress) { +func (device *Device) DeleteSession(ctx context.Context, remoteAddress *protocol.SignalAddress) error { panic("not implemented") } -func (device *Device) DeleteAllSessions() { +func (device *Device) DeleteAllSessions(ctx context.Context) error { panic("not implemented") } -func (device *Device) LoadSignedPreKey(signedPreKeyID uint32) *record.SignedPreKey { +func (device *Device) LoadSignedPreKey(ctx context.Context, signedPreKeyID uint32) (*record.SignedPreKey, error) { if signedPreKeyID == device.SignedPreKey.KeyID { return record.NewSignedPreKey(signedPreKeyID, 0, ecc.NewECKeyPair( ecc.NewDjbECPublicKey(*device.SignedPreKey.Pub), ecc.NewDjbECPrivateKey(*device.SignedPreKey.Priv), - ), *device.SignedPreKey.Signature, nil) + ), *device.SignedPreKey.Signature, nil), nil } - return nil + return nil, nil } -func (device *Device) LoadSignedPreKeys() []*record.SignedPreKey { +func (device *Device) LoadSignedPreKeys(ctx context.Context) ([]*record.SignedPreKey, error) { panic("not implemented") } -func (device *Device) StoreSignedPreKey(signedPreKeyID uint32, record *record.SignedPreKey) { +func (device *Device) StoreSignedPreKey(ctx context.Context, signedPreKeyID uint32, record *record.SignedPreKey) error { panic("not implemented") } -func (device *Device) ContainsSignedPreKey(signedPreKeyID uint32) bool { +func (device *Device) ContainsSignedPreKey(ctx context.Context, signedPreKeyID uint32) (bool, error) { panic("not implemented") } -func (device *Device) RemoveSignedPreKey(signedPreKeyID uint32) { +func (device *Device) RemoveSignedPreKey(ctx context.Context, signedPreKeyID uint32) error { panic("not implemented") } -func (device *Device) StoreSenderKey(senderKeyName *protocol.SenderKeyName, keyRecord *groupRecord.SenderKey) { - for i := 0; ; i++ { - err := device.SenderKeys.PutSenderKey(senderKeyName.GroupID(), senderKeyName.Sender().String(), keyRecord.Serialize()) - if err == nil || !device.handleDatabaseError(i, err, "store sender key from %s", senderKeyName.Sender().String()) { - return - } +func (device *Device) StoreSenderKey(ctx context.Context, senderKeyName *protocol.SenderKeyName, keyRecord *groupRecord.SenderKey) error { + groupID := senderKeyName.GroupID() + senderString := senderKeyName.Sender().String() + err := device.SenderKeys.PutSenderKey(ctx, groupID, senderString, keyRecord.Serialize()) + if err != nil { + return fmt.Errorf("failed to store sender key from %s for %s: %w", senderString, groupID, err) } + return nil } -func (device *Device) LoadSenderKey(senderKeyName *protocol.SenderKeyName) *groupRecord.SenderKey { - var rawKey []byte - for i := 0; ; i++ { - var err error - rawKey, err = device.SenderKeys.GetSenderKey(senderKeyName.GroupID(), senderKeyName.Sender().String()) - if err == nil || !device.handleDatabaseError(i, err, "load sender key from %s for %s", senderKeyName.Sender().String(), senderKeyName.GroupID()) { - break - } +func (device *Device) LoadSenderKey(ctx context.Context, senderKeyName *protocol.SenderKeyName) (*groupRecord.SenderKey, error) { + groupID := senderKeyName.GroupID() + senderString := senderKeyName.Sender().String() + rawKey, err := device.SenderKeys.GetSenderKey(ctx, groupID, senderString) + if err != nil { + return nil, fmt.Errorf("failed to load sender key from %s for %s: %w", senderString, groupID, err) } if rawKey == nil { - return groupRecord.NewSenderKey(SignalProtobufSerializer.SenderKeyRecord, SignalProtobufSerializer.SenderKeyState) + return groupRecord.NewSenderKey(SignalProtobufSerializer.SenderKeyRecord, SignalProtobufSerializer.SenderKeyState), nil } key, err := groupRecord.NewSenderKeyFromBytes(rawKey, SignalProtobufSerializer.SenderKeyRecord, SignalProtobufSerializer.SenderKeyState) if err != nil { - device.Log.Errorf("Failed to deserialize sender key from %s for %s: %v", senderKeyName.Sender().String(), senderKeyName.GroupID(), err) - return groupRecord.NewSenderKey(SignalProtobufSerializer.SenderKeyRecord, SignalProtobufSerializer.SenderKeyState) + return nil, fmt.Errorf("failed to deserialize sender key from %s for %s: %w", senderString, groupID, err) } - return key + return key, nil } diff --git a/vendor/go.mau.fi/whatsmeow/store/sqlstore/container.go b/vendor/go.mau.fi/whatsmeow/store/sqlstore/container.go index 0bb631399b..29b36c08ae 100644 --- a/vendor/go.mau.fi/whatsmeow/store/sqlstore/container.go +++ b/vendor/go.mau.fi/whatsmeow/store/sqlstore/container.go @@ -7,16 +7,19 @@ package sqlstore import ( + "context" "database/sql" "errors" "fmt" - mathRand "math/rand" + mathRand "math/rand/v2" "github.com/google/uuid" + "go.mau.fi/util/dbutil" "go.mau.fi/util/random" - waProto "go.mau.fi/whatsmeow/binary/proto" + "go.mau.fi/whatsmeow/proto/waAdv" "go.mau.fi/whatsmeow/store" + "go.mau.fi/whatsmeow/store/sqlstore/upgrades" "go.mau.fi/whatsmeow/types" "go.mau.fi/whatsmeow/util/keys" waLog "go.mau.fi/whatsmeow/util/log" @@ -24,11 +27,9 @@ import ( // Container is a wrapper for a SQL database that can contain multiple whatsmeow sessions. type Container struct { - db *sql.DB - dialect string - log waLog.Logger - - DatabaseErrorHandler func(device *store.Device, action string, attemptIndex int, err error) (retry bool) + db *dbutil.Database + log waLog.Logger + LIDMap *CachedLIDMap } var _ store.DeviceContainer = (*Container)(nil) @@ -41,14 +42,14 @@ var _ store.DeviceContainer = (*Container)(nil) // // When using SQLite, it's strongly recommended to enable foreign keys by adding `?_foreign_keys=true`: // -// container, err := sqlstore.New("sqlite3", "file:yoursqlitefile.db?_foreign_keys=on", nil) -func New(dialect, address string, log waLog.Logger) (*Container, error) { +// container, err := sqlstore.New(context.Background(), "sqlite3", "file:yoursqlitefile.db?_foreign_keys=on", nil) +func New(ctx context.Context, dialect, address string, log waLog.Logger) (*Container, error) { db, err := sql.Open(dialect, address) if err != nil { return nil, fmt.Errorf("failed to open database: %w", err) } container := NewWithDB(db, dialect, log) - err = container.Upgrade() + err = container.Upgrade(ctx) if err != nil { return nil, fmt.Errorf("failed to upgrade database: %w", err) } @@ -74,44 +75,65 @@ func New(dialect, address string, log waLog.Logger) (*Container, error) { // container := sqlstore.NewWithDB(...) // err := container.Upgrade() func NewWithDB(db *sql.DB, dialect string, log waLog.Logger) *Container { + wrapped, err := dbutil.NewWithDB(db, dialect) + if err != nil { + // This will only panic if the dialect is invalid + panic(err) + } + wrapped.UpgradeTable = upgrades.Table + wrapped.VersionTable = "whatsmeow_version" + return NewWithWrappedDB(wrapped, log) +} + +func NewWithWrappedDB(wrapped *dbutil.Database, log waLog.Logger) *Container { if log == nil { log = waLog.Noop } return &Container{ - db: db, - dialect: dialect, - log: log, + db: wrapped, + log: log, + LIDMap: NewCachedLIDMap(wrapped), } } +// Upgrade upgrades the database from the current to the latest version available. +func (c *Container) Upgrade(ctx context.Context) error { + if c.db.Dialect == dbutil.SQLite { + var foreignKeysEnabled bool + err := c.db.QueryRow(ctx, "PRAGMA foreign_keys").Scan(&foreignKeysEnabled) + if err != nil { + return fmt.Errorf("failed to check if foreign keys are enabled: %w", err) + } else if !foreignKeysEnabled { + return fmt.Errorf("foreign keys are not enabled") + } + } + + return c.db.Upgrade(ctx) +} + const getAllDevicesQuery = ` -SELECT jid, registration_id, noise_key, identity_key, +SELECT jid, lid, registration_id, noise_key, identity_key, signed_pre_key, signed_pre_key_id, signed_pre_key_sig, adv_key, adv_details, adv_account_sig, adv_account_sig_key, adv_device_sig, - platform, business_name, push_name, facebook_uuid + platform, business_name, push_name, facebook_uuid, lid_migration_ts FROM whatsmeow_device ` const getDeviceQuery = getAllDevicesQuery + " WHERE jid=$1" -type scannable interface { - Scan(dest ...interface{}) error -} - -func (c *Container) scanDevice(row scannable) (*store.Device, error) { +func (c *Container) scanDevice(row dbutil.Scannable) (*store.Device, error) { var device store.Device - device.DatabaseErrorHandler = c.DatabaseErrorHandler device.Log = c.log device.SignedPreKey = &keys.PreKey{} var noisePriv, identityPriv, preKeyPriv, preKeySig []byte - var account waProto.ADVSignedDeviceIdentity + var account waAdv.ADVSignedDeviceIdentity var fbUUID uuid.NullUUID err := row.Scan( - &device.ID, &device.RegistrationID, &noisePriv, &identityPriv, + &device.ID, &device.LID, &device.RegistrationID, &noisePriv, &identityPriv, &preKeyPriv, &device.SignedPreKey.KeyID, &preKeySig, &device.AdvSecretKey, &account.Details, &account.AccountSignature, &account.AccountSignatureKey, &account.DeviceSignature, - &device.Platform, &device.BusinessName, &device.PushName, &fbUUID) + &device.Platform, &device.BusinessName, &device.PushName, &fbUUID, &device.LIDMigrationTimestamp) if err != nil { return nil, fmt.Errorf("failed to scan session: %w", err) } else if len(noisePriv) != 32 || len(identityPriv) != 32 || len(preKeyPriv) != 32 || len(preKeySig) != 64 { @@ -125,26 +147,14 @@ func (c *Container) scanDevice(row scannable) (*store.Device, error) { device.Account = &account device.FacebookUUID = fbUUID.UUID - innerStore := NewSQLStore(c, *device.ID) - device.Identities = innerStore - device.Sessions = innerStore - device.PreKeys = innerStore - device.SenderKeys = innerStore - device.AppStateKeys = innerStore - device.AppState = innerStore - device.Contacts = innerStore - device.ChatSettings = innerStore - device.MsgSecrets = innerStore - device.PrivacyTokens = innerStore - device.Container = c - device.Initialized = true + c.initializeDevice(&device) return &device, nil } // GetAllDevices finds all the devices in the database. -func (c *Container) GetAllDevices() ([]*store.Device, error) { - res, err := c.db.Query(getAllDevicesQuery) +func (c *Container) GetAllDevices(ctx context.Context) ([]*store.Device, error) { + res, err := c.db.Query(ctx, getAllDevicesQuery) if err != nil { return nil, fmt.Errorf("failed to query sessions: %w", err) } @@ -162,8 +172,8 @@ func (c *Container) GetAllDevices() ([]*store.Device, error) { // GetFirstDevice is a convenience method for getting the first device in the store. If there are // no devices, then a new device will be created. You should only use this if you don't want to // have multiple sessions simultaneously. -func (c *Container) GetFirstDevice() (*store.Device, error) { - devices, err := c.GetAllDevices() +func (c *Container) GetFirstDevice(ctx context.Context) (*store.Device, error) { + devices, err := c.GetAllDevices(ctx) if err != nil { return nil, err } @@ -179,8 +189,8 @@ func (c *Container) GetFirstDevice() (*store.Device, error) { // If the device is not found, nil is returned instead. // // Note that the parameter usually must be an AD-JID. -func (c *Container) GetDevice(jid types.JID) (*store.Device, error) { - sess, err := c.scanDevice(c.db.QueryRow(getDeviceQuery, jid)) +func (c *Container) GetDevice(ctx context.Context, jid types.JID) (*store.Device, error) { + sess, err := c.scanDevice(c.db.QueryRow(ctx, getDeviceQuery, jid)) if errors.Is(err, sql.ErrNoRows) { return nil, nil } @@ -189,13 +199,17 @@ func (c *Container) GetDevice(jid types.JID) (*store.Device, error) { const ( insertDeviceQuery = ` - INSERT INTO whatsmeow_device (jid, registration_id, noise_key, identity_key, + INSERT INTO whatsmeow_device (jid, lid, registration_id, noise_key, identity_key, signed_pre_key, signed_pre_key_id, signed_pre_key_sig, adv_key, adv_details, adv_account_sig, adv_account_sig_key, adv_device_sig, - platform, business_name, push_name, facebook_uuid) - VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16) + platform, business_name, push_name, facebook_uuid, lid_migration_ts) + VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $17, $18) ON CONFLICT (jid) DO UPDATE - SET platform=excluded.platform, business_name=excluded.business_name, push_name=excluded.push_name + SET lid=excluded.lid, + platform=excluded.platform, + business_name=excluded.business_name, + push_name=excluded.push_name, + lid_migration_ts=excluded.lid_migration_ts ` deleteDeviceQuery = `DELETE FROM whatsmeow_device WHERE jid=$1` ) @@ -209,8 +223,6 @@ func (c *Container) NewDevice() *store.Device { Log: c.log, Container: c, - DatabaseErrorHandler: c.DatabaseErrorHandler, - NoiseKey: keys.NewKeyPair(), IdentityKey: keys.NewKeyPair(), RegistrationID: mathRand.Uint32(), @@ -233,38 +245,47 @@ func (c *Container) Close() error { // PutDevice stores the given device in this database. This should be called through Device.Save() // (which usually doesn't need to be called manually, as the library does that automatically when relevant). -func (c *Container) PutDevice(device *store.Device) error { +func (c *Container) PutDevice(ctx context.Context, device *store.Device) error { if device.ID == nil { return ErrDeviceIDMustBeSet } - _, err := c.db.Exec(insertDeviceQuery, - device.ID.String(), device.RegistrationID, device.NoiseKey.Priv[:], device.IdentityKey.Priv[:], + _, err := c.db.Exec(ctx, insertDeviceQuery, + device.ID, device.LID, device.RegistrationID, device.NoiseKey.Priv[:], device.IdentityKey.Priv[:], device.SignedPreKey.Priv[:], device.SignedPreKey.KeyID, device.SignedPreKey.Signature[:], device.AdvSecretKey, device.Account.Details, device.Account.AccountSignature, device.Account.AccountSignatureKey, device.Account.DeviceSignature, - device.Platform, device.BusinessName, device.PushName, uuid.NullUUID{UUID: device.FacebookUUID, Valid: device.FacebookUUID != uuid.Nil}) + device.Platform, device.BusinessName, device.PushName, uuid.NullUUID{UUID: device.FacebookUUID, Valid: device.FacebookUUID != uuid.Nil}, + device.LIDMigrationTimestamp, + ) if !device.Initialized { - innerStore := NewSQLStore(c, *device.ID) - device.Identities = innerStore - device.Sessions = innerStore - device.PreKeys = innerStore - device.SenderKeys = innerStore - device.AppStateKeys = innerStore - device.AppState = innerStore - device.Contacts = innerStore - device.ChatSettings = innerStore - device.MsgSecrets = innerStore - device.PrivacyTokens = innerStore - device.Initialized = true + c.initializeDevice(device) } return err } +func (c *Container) initializeDevice(device *store.Device) { + innerStore := NewSQLStore(c, *device.ID) + device.Identities = innerStore + device.Sessions = innerStore + device.PreKeys = innerStore + device.SenderKeys = innerStore + device.AppStateKeys = innerStore + device.AppState = innerStore + device.Contacts = innerStore + device.ChatSettings = innerStore + device.MsgSecrets = innerStore + device.PrivacyTokens = innerStore + device.EventBuffer = innerStore + device.LIDs = c.LIDMap + device.Container = c + device.Initialized = true +} + // DeleteDevice deletes the given device from this database. This should be called through Device.Delete() -func (c *Container) DeleteDevice(store *store.Device) error { +func (c *Container) DeleteDevice(ctx context.Context, store *store.Device) error { if store.ID == nil { return ErrDeviceIDMustBeSet } - _, err := c.db.Exec(deleteDeviceQuery, store.ID.String()) + _, err := c.db.Exec(ctx, deleteDeviceQuery, store.ID) return err } diff --git a/vendor/go.mau.fi/whatsmeow/store/sqlstore/lidmap.go b/vendor/go.mau.fi/whatsmeow/store/sqlstore/lidmap.go new file mode 100644 index 0000000000..e7263372bd --- /dev/null +++ b/vendor/go.mau.fi/whatsmeow/store/sqlstore/lidmap.go @@ -0,0 +1,264 @@ +// Copyright (c) 2025 Tulir Asokan +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. + +// Package sqlstore contains an SQL-backed implementation of the interfaces in the store package. +package sqlstore + +import ( + "context" + "database/sql" + "errors" + "fmt" + "slices" + "strings" + "sync" + + "github.com/rs/zerolog" + "go.mau.fi/util/dbutil" + "go.mau.fi/util/exslices" + + "go.mau.fi/whatsmeow/store" + "go.mau.fi/whatsmeow/types" +) + +type CachedLIDMap struct { + db *dbutil.Database + + pnToLIDCache map[string]string + lidToPNCache map[string]string + cacheFilled bool + lidCacheLock sync.RWMutex +} + +var _ store.LIDStore = (*CachedLIDMap)(nil) + +func NewCachedLIDMap(db *dbutil.Database) *CachedLIDMap { + return &CachedLIDMap{ + db: db, + + pnToLIDCache: make(map[string]string), + lidToPNCache: make(map[string]string), + } +} + +const ( + deleteExistingLIDMappingQuery = `DELETE FROM whatsmeow_lid_map WHERE (lid<>$1 AND pn=$2)` + putLIDMappingQuery = ` + INSERT INTO whatsmeow_lid_map (lid, pn) + VALUES ($1, $2) + ON CONFLICT (lid) DO UPDATE SET pn=excluded.pn WHERE whatsmeow_lid_map.pn<>excluded.pn + ` + getLIDForPNQuery = `SELECT lid FROM whatsmeow_lid_map WHERE pn=$1` + getPNForLIDQuery = `SELECT pn FROM whatsmeow_lid_map WHERE lid=$1` + getAllLIDMappingsQuery = `SELECT lid, pn FROM whatsmeow_lid_map` +) + +func (s *CachedLIDMap) FillCache(ctx context.Context) error { + s.lidCacheLock.Lock() + defer s.lidCacheLock.Unlock() + rows, err := s.db.Query(ctx, getAllLIDMappingsQuery) + if err != nil { + return err + } + err = s.scanManyLids(rows, nil) + s.cacheFilled = err == nil + return err +} + +func (s *CachedLIDMap) scanManyLids(rows dbutil.Rows, fn func(lid, pn string)) error { + if fn == nil { + fn = func(lid, pn string) {} + } + for rows.Next() { + var lid, pn string + err := rows.Scan(&lid, &pn) + if err != nil { + return err + } + s.pnToLIDCache[pn] = lid + s.lidToPNCache[lid] = pn + fn(lid, pn) + } + err := rows.Close() + if err != nil { + return err + } + return rows.Err() +} + +func (s *CachedLIDMap) getLIDMapping(ctx context.Context, source types.JID, targetServer, query string, sourceToTarget, targetToSource map[string]string) (types.JID, error) { + s.lidCacheLock.RLock() + targetUser, ok := sourceToTarget[source.User] + cacheFilled := s.cacheFilled + s.lidCacheLock.RUnlock() + if ok || cacheFilled { + if targetUser == "" { + return types.JID{}, nil + } + return types.JID{User: targetUser, Device: source.Device, Server: targetServer}, nil + } + s.lidCacheLock.Lock() + defer s.lidCacheLock.Unlock() + err := s.db.QueryRow(ctx, query, source.User).Scan(&targetUser) + if errors.Is(err, sql.ErrNoRows) { + // continue with empty result + } else if err != nil { + return types.JID{}, err + } + sourceToTarget[source.User] = targetUser + if targetUser != "" { + targetToSource[targetUser] = source.User + return types.JID{User: targetUser, Device: source.Device, Server: targetServer}, nil + } + return types.JID{}, nil +} + +func (s *CachedLIDMap) GetLIDForPN(ctx context.Context, pn types.JID) (types.JID, error) { + if pn.Server != types.DefaultUserServer { + return types.JID{}, fmt.Errorf("invalid GetLIDForPN call with non-PN JID %s", pn) + } + return s.getLIDMapping( + ctx, pn, types.HiddenUserServer, getLIDForPNQuery, + s.pnToLIDCache, s.lidToPNCache, + ) +} + +func (s *CachedLIDMap) GetPNForLID(ctx context.Context, lid types.JID) (types.JID, error) { + if lid.Server != types.HiddenUserServer { + return types.JID{}, fmt.Errorf("invalid GetPNForLID call with non-LID JID %s", lid) + } + return s.getLIDMapping( + ctx, lid, types.DefaultUserServer, getPNForLIDQuery, + s.lidToPNCache, s.pnToLIDCache, + ) +} + +func (s *CachedLIDMap) GetManyLIDsForPNs(ctx context.Context, pns []types.JID) (map[types.JID]types.JID, error) { + if len(pns) == 0 { + return nil, nil + } + + result := make(map[types.JID]types.JID, len(pns)) + + s.lidCacheLock.RLock() + missingPNs := make([]string, 0, len(pns)) + missingPNDevices := make(map[string][]types.JID) + for _, pn := range pns { + if pn.Server != types.DefaultUserServer { + continue + } + if lidUser, ok := s.pnToLIDCache[pn.User]; ok && lidUser != "" { + result[pn] = types.JID{User: lidUser, Device: pn.Device, Server: types.HiddenUserServer} + } else if !s.cacheFilled { + missingPNs = append(missingPNs, pn.User) + missingPNDevices[pn.User] = append(missingPNDevices[pn.User], pn) + } + } + s.lidCacheLock.RUnlock() + + if len(missingPNs) == 0 { + return result, nil + } + + s.lidCacheLock.Lock() + defer s.lidCacheLock.Unlock() + + var rows dbutil.Rows + var err error + if s.db.Dialect == dbutil.Postgres && PostgresArrayWrapper != nil { + rows, err = s.db.Query( + ctx, + `SELECT lid, pn FROM whatsmeow_lid_map WHERE pn = ANY($1)`, + PostgresArrayWrapper(missingPNs), + ) + } else { + placeholders := make([]string, len(missingPNs)) + for i := range missingPNs { + placeholders[i] = fmt.Sprintf("$%d", i+1) + } + rows, err = s.db.Query( + ctx, + fmt.Sprintf(`SELECT lid, pn FROM whatsmeow_lid_map WHERE pn IN (%s)`, strings.Join(placeholders, ",")), + exslices.CastToAny(missingPNs)..., + ) + } + if err != nil { + return nil, err + } + err = s.scanManyLids(rows, func(lid, pn string) { + for _, dev := range missingPNDevices[pn] { + lidDev := dev + lidDev.Server = types.HiddenUserServer + lidDev.User = lid + result[dev] = lidDev.ToNonAD() + } + }) + return result, err +} + +func (s *CachedLIDMap) PutLIDMapping(ctx context.Context, lid, pn types.JID) error { + if lid.Server != types.HiddenUserServer || pn.Server != types.DefaultUserServer { + return fmt.Errorf("invalid PutLIDMapping call %s/%s", lid, pn) + } + s.lidCacheLock.Lock() + defer s.lidCacheLock.Unlock() + cachedLID, ok := s.pnToLIDCache[pn.User] + if ok && cachedLID == lid.User { + return nil + } + return s.db.DoTxn(ctx, nil, func(ctx context.Context) error { + return s.unlockedPutLIDMapping(ctx, lid, pn) + }) +} + +func (s *CachedLIDMap) PutManyLIDMappings(ctx context.Context, mappings []store.LIDMapping) error { + s.lidCacheLock.Lock() + defer s.lidCacheLock.Unlock() + mappings = slices.DeleteFunc(mappings, func(mapping store.LIDMapping) bool { + if mapping.LID.Server != types.HiddenUserServer || mapping.PN.Server != types.DefaultUserServer { + zerolog.Ctx(ctx).Debug(). + Stringer("entry_lid", mapping.LID). + Stringer("entry_pn", mapping.PN). + Msg("Ignoring invalid entry in PutManyLIDMappings") + return true + } + cachedLID, ok := s.pnToLIDCache[mapping.PN.User] + if ok && cachedLID == mapping.LID.User { + return true + } + return false + }) + mappings = exslices.DeduplicateUnsortedOverwrite(mappings) + if len(mappings) == 0 { + return nil + } + return s.db.DoTxn(ctx, nil, func(ctx context.Context) error { + for _, mapping := range mappings { + err := s.unlockedPutLIDMapping(ctx, mapping.LID, mapping.PN) + if err != nil { + return err + } + } + return nil + }) +} + +func (s *CachedLIDMap) unlockedPutLIDMapping(ctx context.Context, lid, pn types.JID) error { + if lid.Server != types.HiddenUserServer || pn.Server != types.DefaultUserServer { + return fmt.Errorf("invalid PutLIDMapping call %s/%s", lid, pn) + } + _, err := s.db.Exec(ctx, deleteExistingLIDMappingQuery, lid.User, pn.User) + if err != nil { + return err + } + _, err = s.db.Exec(ctx, putLIDMappingQuery, lid.User, pn.User) + if err != nil { + return err + } + s.pnToLIDCache[pn.User] = lid.User + s.lidToPNCache[lid.User] = pn.User + return nil +} diff --git a/vendor/go.mau.fi/whatsmeow/store/sqlstore/store.go b/vendor/go.mau.fi/whatsmeow/store/sqlstore/store.go index a6acdfc08e..10afd73122 100644 --- a/vendor/go.mau.fi/whatsmeow/store/sqlstore/store.go +++ b/vendor/go.mau.fi/whatsmeow/store/sqlstore/store.go @@ -1,4 +1,4 @@ -// Copyright (c) 2022 Tulir Asokan +// Copyright (c) 2025 Tulir Asokan // // This Source Code Form is subject to the terms of the Mozilla Public // License, v. 2.0. If a copy of the MPL was not distributed with this @@ -8,14 +8,20 @@ package sqlstore import ( + "context" "database/sql" "database/sql/driver" "errors" "fmt" + "slices" "strings" "sync" "time" + "go.mau.fi/util/dbutil" + "go.mau.fi/util/exslices" + "go.mau.fi/util/exsync" + "go.mau.fi/whatsmeow/store" "go.mau.fi/whatsmeow/types" "go.mau.fi/whatsmeow/util/keys" @@ -30,7 +36,7 @@ var ErrInvalidLength = errors.New("database returned byte array with illegal len // When using github.com/lib/pq, you should set // // whatsmeow.PostgresArrayWrapper = pq.Array -var PostgresArrayWrapper func(interface{}) interface { +var PostgresArrayWrapper func(any) interface { driver.Valuer sql.Scanner } @@ -43,6 +49,8 @@ type SQLStore struct { contactCache map[types.JID]*types.ContactInfo contactCacheLock sync.Mutex + + migratedPNSessionsCache *exsync.Set[string] } // NewSQLStore creates a new SQLStore with the given database container and user JID. @@ -54,16 +62,12 @@ func NewSQLStore(c *Container, jid types.JID) *SQLStore { Container: c, JID: jid.String(), contactCache: make(map[types.JID]*types.ContactInfo), + + migratedPNSessionsCache: exsync.NewSet[string](), } } -var _ store.IdentityStore = (*SQLStore)(nil) -var _ store.SessionStore = (*SQLStore)(nil) -var _ store.PreKeyStore = (*SQLStore)(nil) -var _ store.SenderKeyStore = (*SQLStore)(nil) -var _ store.AppStateSyncKeyStore = (*SQLStore)(nil) -var _ store.AppStateStore = (*SQLStore)(nil) -var _ store.ContactStore = (*SQLStore)(nil) +var _ store.AllSessionSpecificStores = (*SQLStore)(nil) const ( putIdentityQuery = ` @@ -75,24 +79,24 @@ const ( getIdentityQuery = `SELECT identity FROM whatsmeow_identity_keys WHERE our_jid=$1 AND their_id=$2` ) -func (s *SQLStore) PutIdentity(address string, key [32]byte) error { - _, err := s.db.Exec(putIdentityQuery, s.JID, address, key[:]) +func (s *SQLStore) PutIdentity(ctx context.Context, address string, key [32]byte) error { + _, err := s.db.Exec(ctx, putIdentityQuery, s.JID, address, key[:]) return err } -func (s *SQLStore) DeleteAllIdentities(phone string) error { - _, err := s.db.Exec(deleteAllIdentitiesQuery, s.JID, phone+":%") +func (s *SQLStore) DeleteAllIdentities(ctx context.Context, phone string) error { + _, err := s.db.Exec(ctx, deleteAllIdentitiesQuery, s.JID, phone+":%") return err } -func (s *SQLStore) DeleteIdentity(address string) error { - _, err := s.db.Exec(deleteAllIdentitiesQuery, s.JID, address) +func (s *SQLStore) DeleteIdentity(ctx context.Context, address string) error { + _, err := s.db.Exec(ctx, deleteAllIdentitiesQuery, s.JID, address) return err } -func (s *SQLStore) IsTrustedIdentity(address string, key [32]byte) (bool, error) { +func (s *SQLStore) IsTrustedIdentity(ctx context.Context, address string, key [32]byte) (bool, error) { var existingIdentity []byte - err := s.db.QueryRow(getIdentityQuery, s.JID, address).Scan(&existingIdentity) + err := s.db.QueryRow(ctx, getIdentityQuery, s.JID, address).Scan(&existingIdentity) if errors.Is(err, sql.ErrNoRows) { // Trust if not known, it'll be saved automatically later return true, nil @@ -105,47 +109,201 @@ func (s *SQLStore) IsTrustedIdentity(address string, key [32]byte) (bool, error) } const ( - getSessionQuery = `SELECT session FROM whatsmeow_sessions WHERE our_jid=$1 AND their_id=$2` - hasSessionQuery = `SELECT true FROM whatsmeow_sessions WHERE our_jid=$1 AND their_id=$2` - putSessionQuery = ` + getSessionQuery = `SELECT session FROM whatsmeow_sessions WHERE our_jid=$1 AND their_id=$2` + hasSessionQuery = `SELECT true FROM whatsmeow_sessions WHERE our_jid=$1 AND their_id=$2` + getManySessionQueryPostgres = `SELECT their_id, session FROM whatsmeow_sessions WHERE our_jid=$1 AND their_id = ANY($2)` + getManySessionQueryGeneric = `SELECT their_id, session FROM whatsmeow_sessions WHERE our_jid=$1 AND their_id IN (%s)` + putSessionQuery = ` INSERT INTO whatsmeow_sessions (our_jid, their_id, session) VALUES ($1, $2, $3) ON CONFLICT (our_jid, their_id) DO UPDATE SET session=excluded.session ` deleteAllSessionsQuery = `DELETE FROM whatsmeow_sessions WHERE our_jid=$1 AND their_id LIKE $2` deleteSessionQuery = `DELETE FROM whatsmeow_sessions WHERE our_jid=$1 AND their_id=$2` + + migratePNToLIDSessionsQuery = ` + INSERT INTO whatsmeow_sessions (our_jid, their_id, session) + SELECT our_jid, replace(their_id, $2, $3), session + FROM whatsmeow_sessions + WHERE our_jid=$1 AND their_id LIKE $2 || ':%' + ON CONFLICT (our_jid, their_id) DO UPDATE SET session=excluded.session + ` + deleteAllIdentityKeysQuery = `DELETE FROM whatsmeow_identity_keys WHERE our_jid=$1 AND their_id LIKE $2` + migratePNToLIDIdentityKeysQuery = ` + INSERT INTO whatsmeow_identity_keys (our_jid, their_id, identity) + SELECT our_jid, replace(their_id, $2, $3), identity + FROM whatsmeow_identity_keys + WHERE our_jid=$1 AND their_id LIKE $2 || ':%' + ON CONFLICT (our_jid, their_id) DO UPDATE SET identity=excluded.identity + ` + deleteAllSenderKeysQuery = `DELETE FROM whatsmeow_sender_keys WHERE our_jid=$1 AND sender_id LIKE $2` + migratePNToLIDSenderKeysQuery = ` + INSERT INTO whatsmeow_sender_keys (our_jid, chat_id, sender_id, sender_key) + SELECT our_jid, chat_id, replace(sender_id, $2, $3), sender_key + FROM whatsmeow_sender_keys + WHERE our_jid=$1 AND sender_id LIKE $2 || ':%' + ON CONFLICT (our_jid, chat_id, sender_id) DO UPDATE SET sender_key=excluded.sender_key + ` ) -func (s *SQLStore) GetSession(address string) (session []byte, err error) { - err = s.db.QueryRow(getSessionQuery, s.JID, address).Scan(&session) +func (s *SQLStore) GetSession(ctx context.Context, address string) (session []byte, err error) { + err = s.db.QueryRow(ctx, getSessionQuery, s.JID, address).Scan(&session) if errors.Is(err, sql.ErrNoRows) { err = nil } return } -func (s *SQLStore) HasSession(address string) (has bool, err error) { - err = s.db.QueryRow(hasSessionQuery, s.JID, address).Scan(&has) +func (s *SQLStore) HasSession(ctx context.Context, address string) (has bool, err error) { + err = s.db.QueryRow(ctx, hasSessionQuery, s.JID, address).Scan(&has) if errors.Is(err, sql.ErrNoRows) { err = nil } return } -func (s *SQLStore) PutSession(address string, session []byte) error { - _, err := s.db.Exec(putSessionQuery, s.JID, address, session) +type addressSessionTuple struct { + Address string + Session []byte +} + +var sessionScanner = dbutil.ConvertRowFn[addressSessionTuple](func(row dbutil.Scannable) (out addressSessionTuple, err error) { + err = row.Scan(&out.Address, &out.Session) + return +}) + +func (s *SQLStore) GetManySessions(ctx context.Context, addresses []string) (map[string][]byte, error) { + if len(addresses) == 0 { + return nil, nil + } + + var rows dbutil.Rows + var err error + if s.db.Dialect == dbutil.Postgres && PostgresArrayWrapper != nil { + rows, err = s.db.Query(ctx, getManySessionQueryPostgres, s.JID, PostgresArrayWrapper(addresses)) + } else { + args := make([]any, len(addresses)+1) + placeholders := make([]string, len(addresses)) + args[0] = s.JID + for i, addr := range addresses { + args[i+1] = addr + placeholders[i] = fmt.Sprintf("$%d", i+2) + } + rows, err = s.db.Query(ctx, fmt.Sprintf(getManySessionQueryGeneric, strings.Join(placeholders, ",")), args...) + } + result := make(map[string][]byte, len(addresses)) + for _, addr := range addresses { + result[addr] = nil + } + err = sessionScanner.NewRowIter(rows, err).Iter(func(tuple addressSessionTuple) (bool, error) { + result[tuple.Address] = tuple.Session + return true, nil + }) + if err != nil { + return nil, err + } + return result, nil +} + +func (s *SQLStore) PutManySessions(ctx context.Context, sessions map[string][]byte) error { + return s.db.DoTxn(ctx, nil, func(ctx context.Context) error { + for addr, sess := range sessions { + err := s.PutSession(ctx, addr, sess) + if err != nil { + return err + } + } + return nil + }) +} + +func (s *SQLStore) PutSession(ctx context.Context, address string, session []byte) error { + _, err := s.db.Exec(ctx, putSessionQuery, s.JID, address, session) + return err +} + +func (s *SQLStore) DeleteAllSessions(ctx context.Context, phone string) error { + return s.deleteAllSessions(ctx, phone) +} + +func (s *SQLStore) deleteAllSessions(ctx context.Context, phone string) error { + _, err := s.db.Exec(ctx, deleteAllSessionsQuery, s.JID, phone+":%") + return err +} + +func (s *SQLStore) deleteAllSenderKeys(ctx context.Context, phone string) error { + _, err := s.db.Exec(ctx, deleteAllSenderKeysQuery, s.JID, phone+":%") return err } -func (s *SQLStore) DeleteAllSessions(phone string) error { - _, err := s.db.Exec(deleteAllSessionsQuery, s.JID, phone+":%") +func (s *SQLStore) deleteAllIdentityKeys(ctx context.Context, phone string) error { + _, err := s.db.Exec(ctx, deleteAllIdentityKeysQuery, s.JID, phone+":%") return err } -func (s *SQLStore) DeleteSession(address string) error { - _, err := s.db.Exec(deleteSessionQuery, s.JID, address) +func (s *SQLStore) DeleteSession(ctx context.Context, address string) error { + _, err := s.db.Exec(ctx, deleteSessionQuery, s.JID, address) return err } +func (s *SQLStore) MigratePNToLID(ctx context.Context, pn, lid types.JID) error { + pnSignal := pn.SignalAddressUser() + if !s.migratedPNSessionsCache.Add(pnSignal) { + return nil + } + var sessionsUpdated, identityKeysUpdated, senderKeysUpdated int64 + lidSignal := lid.SignalAddressUser() + err := s.db.DoTxn(ctx, nil, func(ctx context.Context) error { + res, err := s.db.Exec(ctx, migratePNToLIDSessionsQuery, s.JID, pnSignal, lidSignal) + if err != nil { + return fmt.Errorf("failed to migrate sessions: %w", err) + } + sessionsUpdated, err = res.RowsAffected() + if err != nil { + return fmt.Errorf("failed to get rows affected for sessions: %w", err) + } + err = s.deleteAllSessions(ctx, pnSignal) + if err != nil { + return fmt.Errorf("failed to delete extra sessions: %w", err) + } + + res, err = s.db.Exec(ctx, migratePNToLIDIdentityKeysQuery, s.JID, pnSignal, lidSignal) + if err != nil { + return fmt.Errorf("failed to migrate identity keys: %w", err) + } + identityKeysUpdated, err = res.RowsAffected() + if err != nil { + return fmt.Errorf("failed to get rows affected for identity keys: %w", err) + } + err = s.deleteAllIdentityKeys(ctx, pnSignal) + if err != nil { + return fmt.Errorf("failed to delete extra identity keys: %w", err) + } + + res, err = s.db.Exec(ctx, migratePNToLIDSenderKeysQuery, s.JID, pnSignal, lidSignal) + if err != nil { + return fmt.Errorf("failed to migrate sender keys: %w", err) + } + senderKeysUpdated, err = res.RowsAffected() + if err != nil { + return fmt.Errorf("failed to get rows affected for sender keys: %w", err) + } + err = s.deleteAllSenderKeys(ctx, pnSignal) + if err != nil { + return fmt.Errorf("failed to delete extra sender keys: %w", err) + } + return nil + }) + if err != nil { + return err + } + if sessionsUpdated > 0 || senderKeysUpdated > 0 || identityKeysUpdated > 0 { + s.log.Infof("Migrated %d sessions, %d identity keys and %d sender keys from %s to %s", sessionsUpdated, identityKeysUpdated, senderKeysUpdated, pnSignal, lidSignal) + } else { + s.log.Debugf("No sessions or sender keys found to migrate from %s to %s", pnSignal, lidSignal) + } + return nil +} + const ( getLastPreKeyIDQuery = `SELECT MAX(key_id) FROM whatsmeow_pre_keys WHERE jid=$1` insertPreKeyQuery = `INSERT INTO whatsmeow_pre_keys (jid, key_id, key, uploaded) VALUES ($1, $2, $3, $4)` @@ -156,36 +314,36 @@ const ( getUploadedPreKeyCountQuery = `SELECT COUNT(*) FROM whatsmeow_pre_keys WHERE jid=$1 AND uploaded=true` ) -func (s *SQLStore) genOnePreKey(id uint32, markUploaded bool) (*keys.PreKey, error) { +func (s *SQLStore) genOnePreKey(ctx context.Context, id uint32, markUploaded bool) (*keys.PreKey, error) { key := keys.NewPreKey(id) - _, err := s.db.Exec(insertPreKeyQuery, s.JID, key.KeyID, key.Priv[:], markUploaded) + _, err := s.db.Exec(ctx, insertPreKeyQuery, s.JID, key.KeyID, key.Priv[:], markUploaded) return key, err } -func (s *SQLStore) getNextPreKeyID() (uint32, error) { +func (s *SQLStore) getNextPreKeyID(ctx context.Context) (uint32, error) { var lastKeyID sql.NullInt32 - err := s.db.QueryRow(getLastPreKeyIDQuery, s.JID).Scan(&lastKeyID) + err := s.db.QueryRow(ctx, getLastPreKeyIDQuery, s.JID).Scan(&lastKeyID) if err != nil { return 0, fmt.Errorf("failed to query next prekey ID: %w", err) } return uint32(lastKeyID.Int32) + 1, nil } -func (s *SQLStore) GenOnePreKey() (*keys.PreKey, error) { +func (s *SQLStore) GenOnePreKey(ctx context.Context) (*keys.PreKey, error) { s.preKeyLock.Lock() defer s.preKeyLock.Unlock() - nextKeyID, err := s.getNextPreKeyID() + nextKeyID, err := s.getNextPreKeyID(ctx) if err != nil { return nil, err } - return s.genOnePreKey(nextKeyID, true) + return s.genOnePreKey(ctx, nextKeyID, true) } -func (s *SQLStore) GetOrGenPreKeys(count uint32) ([]*keys.PreKey, error) { +func (s *SQLStore) GetOrGenPreKeys(ctx context.Context, count uint32) ([]*keys.PreKey, error) { s.preKeyLock.Lock() defer s.preKeyLock.Unlock() - res, err := s.db.Query(getUnuploadedPreKeysQuery, s.JID, count) + res, err := s.db.Query(ctx, getUnuploadedPreKeysQuery, s.JID, count) if err != nil { return nil, fmt.Errorf("failed to query existing prekeys: %w", err) } @@ -204,12 +362,12 @@ func (s *SQLStore) GetOrGenPreKeys(count uint32) ([]*keys.PreKey, error) { if existingCount < uint32(len(newKeys)) { var nextKeyID uint32 - nextKeyID, err = s.getNextPreKeyID() + nextKeyID, err = s.getNextPreKeyID(ctx) if err != nil { return nil, err } for i := existingCount; i < count; i++ { - newKeys[i], err = s.genOnePreKey(nextKeyID, false) + newKeys[i], err = s.genOnePreKey(ctx, nextKeyID, false) if err != nil { return nil, fmt.Errorf("failed to generate prekey: %w", err) } @@ -220,7 +378,7 @@ func (s *SQLStore) GetOrGenPreKeys(count uint32) ([]*keys.PreKey, error) { return newKeys, nil } -func scanPreKey(row scannable) (*keys.PreKey, error) { +func scanPreKey(row dbutil.Scannable) (*keys.PreKey, error) { var priv []byte var id uint32 err := row.Scan(&id, &priv) @@ -237,22 +395,22 @@ func scanPreKey(row scannable) (*keys.PreKey, error) { }, nil } -func (s *SQLStore) GetPreKey(id uint32) (*keys.PreKey, error) { - return scanPreKey(s.db.QueryRow(getPreKeyQuery, s.JID, id)) +func (s *SQLStore) GetPreKey(ctx context.Context, id uint32) (*keys.PreKey, error) { + return scanPreKey(s.db.QueryRow(ctx, getPreKeyQuery, s.JID, id)) } -func (s *SQLStore) RemovePreKey(id uint32) error { - _, err := s.db.Exec(deletePreKeyQuery, s.JID, id) +func (s *SQLStore) RemovePreKey(ctx context.Context, id uint32) error { + _, err := s.db.Exec(ctx, deletePreKeyQuery, s.JID, id) return err } -func (s *SQLStore) MarkPreKeysAsUploaded(upToID uint32) error { - _, err := s.db.Exec(markPreKeysAsUploadedQuery, s.JID, upToID) +func (s *SQLStore) MarkPreKeysAsUploaded(ctx context.Context, upToID uint32) error { + _, err := s.db.Exec(ctx, markPreKeysAsUploadedQuery, s.JID, upToID) return err } -func (s *SQLStore) UploadedPreKeyCount() (count int, err error) { - err = s.db.QueryRow(getUploadedPreKeyCountQuery, s.JID).Scan(&count) +func (s *SQLStore) UploadedPreKeyCount(ctx context.Context) (count int, err error) { + err = s.db.QueryRow(ctx, getUploadedPreKeyCountQuery, s.JID).Scan(&count) return } @@ -264,13 +422,13 @@ const ( ` ) -func (s *SQLStore) PutSenderKey(group, user string, session []byte) error { - _, err := s.db.Exec(putSenderKeyQuery, s.JID, group, user, session) +func (s *SQLStore) PutSenderKey(ctx context.Context, group, user string, session []byte) error { + _, err := s.db.Exec(ctx, putSenderKeyQuery, s.JID, group, user, session) return err } -func (s *SQLStore) GetSenderKey(group, user string) (key []byte, err error) { - err = s.db.QueryRow(getSenderKeyQuery, s.JID, group, user).Scan(&key) +func (s *SQLStore) GetSenderKey(ctx context.Context, group, user string) (key []byte, err error) { + err = s.db.QueryRow(ctx, getSenderKeyQuery, s.JID, group, user).Scan(&key) if errors.Is(err, sql.ErrNoRows) { err = nil } @@ -284,27 +442,47 @@ const ( SET key_data=excluded.key_data, timestamp=excluded.timestamp, fingerprint=excluded.fingerprint WHERE excluded.timestamp > whatsmeow_app_state_sync_keys.timestamp ` + getAllAppStateSyncKeysQuery = `SELECT key_data, timestamp, fingerprint FROM whatsmeow_app_state_sync_keys WHERE jid=$1 ORDER BY timestamp DESC` getAppStateSyncKeyQuery = `SELECT key_data, timestamp, fingerprint FROM whatsmeow_app_state_sync_keys WHERE jid=$1 AND key_id=$2` getLatestAppStateSyncKeyIDQuery = `SELECT key_id FROM whatsmeow_app_state_sync_keys WHERE jid=$1 ORDER BY timestamp DESC LIMIT 1` ) -func (s *SQLStore) PutAppStateSyncKey(id []byte, key store.AppStateSyncKey) error { - _, err := s.db.Exec(putAppStateSyncKeyQuery, s.JID, id, key.Data, key.Timestamp, key.Fingerprint) +func (s *SQLStore) PutAppStateSyncKey(ctx context.Context, id []byte, key store.AppStateSyncKey) error { + _, err := s.db.Exec(ctx, putAppStateSyncKeyQuery, s.JID, id, key.Data, key.Timestamp, key.Fingerprint) return err } -func (s *SQLStore) GetAppStateSyncKey(id []byte) (*store.AppStateSyncKey, error) { +func (s *SQLStore) GetAllAppStateSyncKeys(ctx context.Context) ([]*store.AppStateSyncKey, error) { + rows, err := s.db.Query(ctx, getAllAppStateSyncKeysQuery, s.JID) + if err != nil { + return nil, err + } + var out []*store.AppStateSyncKey + for rows.Next() { + var item store.AppStateSyncKey + err = rows.Scan(&item.Data, &item.Timestamp, &item.Fingerprint) + if err != nil { + return nil, err + } + if len(item.Data) > 0 { + out = append(out, &item) + } + } + return out, rows.Close() +} + +func (s *SQLStore) GetAppStateSyncKey(ctx context.Context, id []byte) (*store.AppStateSyncKey, error) { var key store.AppStateSyncKey - err := s.db.QueryRow(getAppStateSyncKeyQuery, s.JID, id).Scan(&key.Data, &key.Timestamp, &key.Fingerprint) + err := s.db.QueryRow(ctx, getAppStateSyncKeyQuery, s.JID, id).Scan(&key.Data, &key.Timestamp, &key.Fingerprint) if errors.Is(err, sql.ErrNoRows) { return nil, nil } return &key, err } -func (s *SQLStore) GetLatestAppStateSyncKeyID() ([]byte, error) { +func (s *SQLStore) GetLatestAppStateSyncKeyID(ctx context.Context) ([]byte, error) { var keyID []byte - err := s.db.QueryRow(getLatestAppStateSyncKeyIDQuery, s.JID).Scan(&keyID) + err := s.db.QueryRow(ctx, getLatestAppStateSyncKeyIDQuery, s.JID).Scan(&keyID) if errors.Is(err, sql.ErrNoRows) { return nil, nil } @@ -324,14 +502,14 @@ const ( getAppStateMutationMACQuery = `SELECT value_mac FROM whatsmeow_app_state_mutation_macs WHERE jid=$1 AND name=$2 AND index_mac=$3 ORDER BY version DESC LIMIT 1` ) -func (s *SQLStore) PutAppStateVersion(name string, version uint64, hash [128]byte) error { - _, err := s.db.Exec(putAppStateVersionQuery, s.JID, name, version, hash[:]) +func (s *SQLStore) PutAppStateVersion(ctx context.Context, name string, version uint64, hash [128]byte) error { + _, err := s.db.Exec(ctx, putAppStateVersionQuery, s.JID, name, version, hash[:]) return err } -func (s *SQLStore) GetAppStateVersion(name string) (version uint64, hash [128]byte, err error) { +func (s *SQLStore) GetAppStateVersion(ctx context.Context, name string) (version uint64, hash [128]byte, err error) { var uncheckedHash []byte - err = s.db.QueryRow(getAppStateVersionQuery, s.JID, name).Scan(&version, &uncheckedHash) + err = s.db.QueryRow(ctx, getAppStateVersionQuery, s.JID, name).Scan(&version, &uncheckedHash) if errors.Is(err, sql.ErrNoRows) { // version will be 0 and hash will be an empty array, which is the correct initial state err = nil @@ -340,6 +518,8 @@ func (s *SQLStore) GetAppStateVersion(name string) (version uint64, hash [128]by } else if len(uncheckedHash) != 128 { // This shouldn't happen err = ErrInvalidLength + } else if version == 0 { + err = fmt.Errorf("invalid saved app state version 0 for name %s (hash %x)", name, uncheckedHash) } else { // No errors, convert hash slice to array hash = *(*[128]byte)(uncheckedHash) @@ -347,23 +527,19 @@ func (s *SQLStore) GetAppStateVersion(name string) (version uint64, hash [128]by return } -func (s *SQLStore) DeleteAppStateVersion(name string) error { - _, err := s.db.Exec(deleteAppStateVersionQuery, s.JID, name) +func (s *SQLStore) DeleteAppStateVersion(ctx context.Context, name string) error { + _, err := s.db.Exec(ctx, deleteAppStateVersionQuery, s.JID, name) return err } -type execable interface { - Exec(query string, args ...interface{}) (sql.Result, error) -} - -func (s *SQLStore) putAppStateMutationMACs(tx execable, name string, version uint64, mutations []store.AppStateMutationMAC) error { - values := make([]interface{}, 3+len(mutations)*2) +func (s *SQLStore) putAppStateMutationMACs(ctx context.Context, name string, version uint64, mutations []store.AppStateMutationMAC) error { + values := make([]any, 3+len(mutations)*2) queryParts := make([]string, len(mutations)) values[0] = s.JID values[1] = name values[2] = version placeholderSyntax := "($1, $2, $3, $%d, $%d)" - if s.dialect == "sqlite3" { + if s.db.Dialect == dbutil.SQLite { placeholderSyntax = "(?1, ?2, ?3, ?%d, ?%d)" } for i, mutation := range mutations { @@ -372,50 +548,35 @@ func (s *SQLStore) putAppStateMutationMACs(tx execable, name string, version uin values[baseIndex+1] = mutation.ValueMAC queryParts[i] = fmt.Sprintf(placeholderSyntax, baseIndex+1, baseIndex+2) } - _, err := tx.Exec(putAppStateMutationMACsQuery+strings.Join(queryParts, ","), values...) + _, err := s.db.Exec(ctx, putAppStateMutationMACsQuery+strings.Join(queryParts, ","), values...) return err } const mutationBatchSize = 400 -func (s *SQLStore) PutAppStateMutationMACs(name string, version uint64, mutations []store.AppStateMutationMAC) error { - if len(mutations) > mutationBatchSize { - tx, err := s.db.Begin() - if err != nil { - return fmt.Errorf("failed to start transaction: %w", err) - } - for i := 0; i < len(mutations); i += mutationBatchSize { - var mutationSlice []store.AppStateMutationMAC - if len(mutations) > i+mutationBatchSize { - mutationSlice = mutations[i : i+mutationBatchSize] - } else { - mutationSlice = mutations[i:] - } - err = s.putAppStateMutationMACs(tx, name, version, mutationSlice) +func (s *SQLStore) PutAppStateMutationMACs(ctx context.Context, name string, version uint64, mutations []store.AppStateMutationMAC) error { + if len(mutations) == 0 { + return nil + } + return s.db.DoTxn(ctx, nil, func(ctx context.Context) error { + for slice := range slices.Chunk(mutations, mutationBatchSize) { + err := s.putAppStateMutationMACs(ctx, name, version, slice) if err != nil { - _ = tx.Rollback() return err } } - err = tx.Commit() - if err != nil { - return fmt.Errorf("failed to commit transaction: %w", err) - } return nil - } else if len(mutations) > 0 { - return s.putAppStateMutationMACs(s.db, name, version, mutations) - } - return nil + }) } -func (s *SQLStore) DeleteAppStateMutationMACs(name string, indexMACs [][]byte) (err error) { +func (s *SQLStore) DeleteAppStateMutationMACs(ctx context.Context, name string, indexMACs [][]byte) (err error) { if len(indexMACs) == 0 { return } - if s.dialect == "postgres" && PostgresArrayWrapper != nil { - _, err = s.db.Exec(deleteAppStateMutationMACsQueryPostgres, s.JID, name, PostgresArrayWrapper(indexMACs)) + if s.db.Dialect == dbutil.Postgres && PostgresArrayWrapper != nil { + _, err = s.db.Exec(ctx, deleteAppStateMutationMACsQueryPostgres, s.JID, name, PostgresArrayWrapper(indexMACs)) } else { - args := make([]interface{}, 2+len(indexMACs)) + args := make([]any, 2+len(indexMACs)) args[0] = s.JID args[1] = name queryParts := make([]string, len(indexMACs)) @@ -423,13 +584,13 @@ func (s *SQLStore) DeleteAppStateMutationMACs(name string, indexMACs [][]byte) ( args[2+i] = item queryParts[i] = fmt.Sprintf("$%d", i+3) } - _, err = s.db.Exec(deleteAppStateMutationMACsQueryGeneric+"("+strings.Join(queryParts, ",")+")", args...) + _, err = s.db.Exec(ctx, deleteAppStateMutationMACsQueryGeneric+"("+strings.Join(queryParts, ",")+")", args...) } return } -func (s *SQLStore) GetAppStateMutationMAC(name string, indexMAC []byte) (valueMAC []byte, err error) { - err = s.db.QueryRow(getAppStateMutationMACQuery, s.JID, name, indexMAC).Scan(&valueMAC) +func (s *SQLStore) GetAppStateMutationMAC(ctx context.Context, name string, indexMAC []byte) (valueMAC []byte, err error) { + err = s.db.QueryRow(ctx, getAppStateMutationMACQuery, s.JID, name, indexMAC).Scan(&valueMAC) if errors.Is(err, sql.ErrNoRows) { err = nil } @@ -441,10 +602,10 @@ const ( INSERT INTO whatsmeow_contacts (our_jid, their_jid, first_name, full_name) VALUES ($1, $2, $3, $4) ON CONFLICT (our_jid, their_jid) DO UPDATE SET first_name=excluded.first_name, full_name=excluded.full_name ` - putManyContactNamesQuery = ` - INSERT INTO whatsmeow_contacts (our_jid, their_jid, first_name, full_name) - VALUES %s - ON CONFLICT (our_jid, their_jid) DO UPDATE SET first_name=excluded.first_name, full_name=excluded.full_name + putRedactedPhoneQuery = ` + INSERT INTO whatsmeow_contacts (our_jid, their_jid, redacted_phone) + VALUES ($1, $2, $3) + ON CONFLICT (our_jid, their_jid) DO UPDATE SET redacted_phone=excluded.redacted_phone ` putPushNameQuery = ` INSERT INTO whatsmeow_contacts (our_jid, their_jid, push_name) VALUES ($1, $2, $3) @@ -455,23 +616,31 @@ const ( ON CONFLICT (our_jid, their_jid) DO UPDATE SET business_name=excluded.business_name ` getContactQuery = ` - SELECT first_name, full_name, push_name, business_name FROM whatsmeow_contacts WHERE our_jid=$1 AND their_jid=$2 + SELECT first_name, full_name, push_name, business_name, redacted_phone FROM whatsmeow_contacts WHERE our_jid=$1 AND their_jid=$2 ` getAllContactsQuery = ` - SELECT their_jid, first_name, full_name, push_name, business_name FROM whatsmeow_contacts WHERE our_jid=$1 + SELECT their_jid, first_name, full_name, push_name, business_name, redacted_phone FROM whatsmeow_contacts WHERE our_jid=$1 ` ) -func (s *SQLStore) PutPushName(user types.JID, pushName string) (bool, string, error) { +var putContactNamesMassInsertBuilder = dbutil.NewMassInsertBuilder[store.ContactEntry, [1]any]( + putContactNameQuery, "($1, $%d, $%d, $%d)", +) + +var putRedactedPhonesMassInsertBuilder = dbutil.NewMassInsertBuilder[store.RedactedPhoneEntry, [1]any]( + putRedactedPhoneQuery, "($1, $%d, $%d)", +) + +func (s *SQLStore) PutPushName(ctx context.Context, user types.JID, pushName string) (bool, string, error) { s.contactCacheLock.Lock() defer s.contactCacheLock.Unlock() - cached, err := s.getContact(user) + cached, err := s.getContact(ctx, user) if err != nil { return false, "", err } if cached.PushName != pushName { - _, err = s.db.Exec(putPushNameQuery, s.JID, user, pushName) + _, err = s.db.Exec(ctx, putPushNameQuery, s.JID, user, pushName) if err != nil { return false, "", err } @@ -483,16 +652,16 @@ func (s *SQLStore) PutPushName(user types.JID, pushName string) (bool, string, e return false, "", nil } -func (s *SQLStore) PutBusinessName(user types.JID, businessName string) (bool, string, error) { +func (s *SQLStore) PutBusinessName(ctx context.Context, user types.JID, businessName string) (bool, string, error) { s.contactCacheLock.Lock() defer s.contactCacheLock.Unlock() - cached, err := s.getContact(user) + cached, err := s.getContact(ctx, user) if err != nil { return false, "", err } if cached.BusinessName != businessName { - _, err = s.db.Exec(putBusinessNameQuery, s.JID, user, businessName) + _, err = s.db.Exec(ctx, putBusinessNameQuery, s.JID, user, businessName) if err != nil { return false, "", err } @@ -504,16 +673,16 @@ func (s *SQLStore) PutBusinessName(user types.JID, businessName string) (bool, s return false, "", nil } -func (s *SQLStore) PutContactName(user types.JID, firstName, fullName string) error { +func (s *SQLStore) PutContactName(ctx context.Context, user types.JID, firstName, fullName string) error { s.contactCacheLock.Lock() defer s.contactCacheLock.Unlock() - cached, err := s.getContact(user) + cached, err := s.getContact(ctx, user) if err != nil { return err } if cached.FirstName != firstName || cached.FullName != fullName { - _, err = s.db.Exec(putContactNameQuery, s.JID, user, firstName, fullName) + _, err = s.db.Exec(ctx, putContactNameQuery, s.JID, user, firstName, fullName) if err != nil { return err } @@ -526,100 +695,98 @@ func (s *SQLStore) PutContactName(user types.JID, firstName, fullName string) er const contactBatchSize = 300 -func (s *SQLStore) putContactNamesBatch(tx execable, contacts []store.ContactEntry) error { - values := make([]interface{}, 1, 1+len(contacts)*3) - queryParts := make([]string, 0, len(contacts)) - values[0] = s.JID - placeholderSyntax := "($1, $%d, $%d, $%d)" - if s.dialect == "sqlite3" { - placeholderSyntax = "(?1, ?%d, ?%d, ?%d)" - } - i := 0 - handledContacts := make(map[types.JID]struct{}, len(contacts)) - for _, contact := range contacts { - if contact.JID.IsEmpty() { - s.log.Warnf("Empty contact info in mass insert: %+v", contact) - continue - } - // The whole query will break if there are duplicates, so make sure there aren't any duplicates - _, alreadyHandled := handledContacts[contact.JID] - if alreadyHandled { - s.log.Warnf("Duplicate contact info for %s in mass insert", contact.JID) - continue +func (s *SQLStore) PutAllContactNames(ctx context.Context, contacts []store.ContactEntry) error { + if len(contacts) == 0 { + return nil + } + origLen := len(contacts) + contacts = exslices.DeduplicateUnsortedOverwriteFunc(contacts, func(t store.ContactEntry) types.JID { + return t.JID + }) + if origLen != len(contacts) { + s.log.Warnf("%d duplicate contacts found in PutAllContactNames", origLen-len(contacts)) + } + err := s.db.DoTxn(ctx, nil, func(ctx context.Context) error { + for slice := range slices.Chunk(contacts, contactBatchSize) { + query, vars := putContactNamesMassInsertBuilder.Build([1]any{s.JID}, slice) + _, err := s.db.Exec(ctx, query, vars...) + if err != nil { + return err + } } - handledContacts[contact.JID] = struct{}{} - baseIndex := i*3 + 1 - values = append(values, contact.JID.String(), contact.FirstName, contact.FullName) - queryParts = append(queryParts, fmt.Sprintf(placeholderSyntax, baseIndex+1, baseIndex+2, baseIndex+3)) - i++ + return nil + }) + if err != nil { + return err } - _, err := tx.Exec(fmt.Sprintf(putManyContactNamesQuery, strings.Join(queryParts, ",")), values...) - return err + s.contactCacheLock.Lock() + // Just clear the cache, fetching pushnames and business names would be too much effort + s.contactCache = make(map[types.JID]*types.ContactInfo) + s.contactCacheLock.Unlock() + return nil } -func (s *SQLStore) PutAllContactNames(contacts []store.ContactEntry) error { - if len(contacts) > contactBatchSize { - tx, err := s.db.Begin() - if err != nil { - return fmt.Errorf("failed to start transaction: %w", err) - } - for i := 0; i < len(contacts); i += contactBatchSize { - var contactSlice []store.ContactEntry - if len(contacts) > i+contactBatchSize { - contactSlice = contacts[i : i+contactBatchSize] - } else { - contactSlice = contacts[i:] - } - err = s.putContactNamesBatch(tx, contactSlice) +func (s *SQLStore) PutManyRedactedPhones(ctx context.Context, entries []store.RedactedPhoneEntry) error { + if len(entries) == 0 { + return nil + } + origLen := len(entries) + entries = exslices.DeduplicateUnsortedOverwriteFunc(entries, func(t store.RedactedPhoneEntry) types.JID { + return t.JID + }) + if origLen != len(entries) { + s.log.Warnf("%d duplicate contacts found in PutManyRedactedPhones", origLen-len(entries)) + } + err := s.db.DoTxn(ctx, nil, func(ctx context.Context) error { + for slice := range slices.Chunk(entries, contactBatchSize) { + query, vars := putRedactedPhonesMassInsertBuilder.Build([1]any{s.JID}, slice) + _, err := s.db.Exec(ctx, query, vars...) if err != nil { - _ = tx.Rollback() return err } } - err = tx.Commit() - if err != nil { - return fmt.Errorf("failed to commit transaction: %w", err) - } - } else if len(contacts) > 0 { - err := s.putContactNamesBatch(s.db, contacts) - if err != nil { - return err - } - } else { return nil + }) + if err != nil { + return err } s.contactCacheLock.Lock() - // Just clear the cache, fetching pushnames and business names would be too much effort - s.contactCache = make(map[types.JID]*types.ContactInfo) + for _, entry := range entries { + if cached, ok := s.contactCache[entry.JID]; ok && cached.RedactedPhone == entry.RedactedPhone { + continue + } + delete(s.contactCache, entry.JID) + } s.contactCacheLock.Unlock() return nil } -func (s *SQLStore) getContact(user types.JID) (*types.ContactInfo, error) { +func (s *SQLStore) getContact(ctx context.Context, user types.JID) (*types.ContactInfo, error) { cached, ok := s.contactCache[user] if ok { return cached, nil } - var first, full, push, business sql.NullString - err := s.db.QueryRow(getContactQuery, s.JID, user).Scan(&first, &full, &push, &business) + var first, full, push, business, redactedPhone sql.NullString + err := s.db.QueryRow(ctx, getContactQuery, s.JID, user).Scan(&first, &full, &push, &business, &redactedPhone) if err != nil && !errors.Is(err, sql.ErrNoRows) { return nil, err } info := &types.ContactInfo{ - Found: err == nil, - FirstName: first.String, - FullName: full.String, - PushName: push.String, - BusinessName: business.String, + Found: err == nil, + FirstName: first.String, + FullName: full.String, + PushName: push.String, + BusinessName: business.String, + RedactedPhone: redactedPhone.String, } s.contactCache[user] = info return info, nil } -func (s *SQLStore) GetContact(user types.JID) (types.ContactInfo, error) { +func (s *SQLStore) GetContact(ctx context.Context, user types.JID) (types.ContactInfo, error) { s.contactCacheLock.Lock() - info, err := s.getContact(user) + info, err := s.getContact(ctx, user) s.contactCacheLock.Unlock() if err != nil { return types.ContactInfo{}, err @@ -627,27 +794,28 @@ func (s *SQLStore) GetContact(user types.JID) (types.ContactInfo, error) { return *info, nil } -func (s *SQLStore) GetAllContacts() (map[types.JID]types.ContactInfo, error) { +func (s *SQLStore) GetAllContacts(ctx context.Context) (map[types.JID]types.ContactInfo, error) { s.contactCacheLock.Lock() defer s.contactCacheLock.Unlock() - rows, err := s.db.Query(getAllContactsQuery, s.JID) + rows, err := s.db.Query(ctx, getAllContactsQuery, s.JID) if err != nil { return nil, err } output := make(map[types.JID]types.ContactInfo, len(s.contactCache)) for rows.Next() { var jid types.JID - var first, full, push, business sql.NullString - err = rows.Scan(&jid, &first, &full, &push, &business) + var first, full, push, business, redactedPhone sql.NullString + err = rows.Scan(&jid, &first, &full, &push, &business, &redactedPhone) if err != nil { return nil, fmt.Errorf("error scanning row: %w", err) } info := types.ContactInfo{ - Found: true, - FirstName: first.String, - FullName: full.String, - PushName: push.String, - BusinessName: business.String, + Found: true, + FirstName: first.String, + FullName: full.String, + PushName: push.String, + BusinessName: business.String, + RedactedPhone: redactedPhone.String, } output[jid] = info s.contactCache[jid] = &info @@ -665,28 +833,30 @@ const ( ` ) -func (s *SQLStore) PutMutedUntil(chat types.JID, mutedUntil time.Time) error { +func (s *SQLStore) PutMutedUntil(ctx context.Context, chat types.JID, mutedUntil time.Time) error { var val int64 - if !mutedUntil.IsZero() { + if mutedUntil == store.MutedForever { + val = -1 + } else if !mutedUntil.IsZero() { val = mutedUntil.Unix() } - _, err := s.db.Exec(fmt.Sprintf(putChatSettingQuery, "muted_until"), s.JID, chat, val) + _, err := s.db.Exec(ctx, fmt.Sprintf(putChatSettingQuery, "muted_until"), s.JID, chat, val) return err } -func (s *SQLStore) PutPinned(chat types.JID, pinned bool) error { - _, err := s.db.Exec(fmt.Sprintf(putChatSettingQuery, "pinned"), s.JID, chat, pinned) +func (s *SQLStore) PutPinned(ctx context.Context, chat types.JID, pinned bool) error { + _, err := s.db.Exec(ctx, fmt.Sprintf(putChatSettingQuery, "pinned"), s.JID, chat, pinned) return err } -func (s *SQLStore) PutArchived(chat types.JID, archived bool) error { - _, err := s.db.Exec(fmt.Sprintf(putChatSettingQuery, "archived"), s.JID, chat, archived) +func (s *SQLStore) PutArchived(ctx context.Context, chat types.JID, archived bool) error { + _, err := s.db.Exec(ctx, fmt.Sprintf(putChatSettingQuery, "archived"), s.JID, chat, archived) return err } -func (s *SQLStore) GetChatSettings(chat types.JID) (settings types.LocalChatSettings, err error) { +func (s *SQLStore) GetChatSettings(ctx context.Context, chat types.JID) (settings types.LocalChatSettings, err error) { var mutedUntil int64 - err = s.db.QueryRow(getChatSettingsQuery, s.JID, chat).Scan(&mutedUntil, &settings.Pinned, &settings.Archived) + err = s.db.QueryRow(ctx, getChatSettingsQuery, s.JID, chat).Scan(&mutedUntil, &settings.Pinned, &settings.Archived) if errors.Is(err, sql.ErrNoRows) { err = nil } else if err != nil { @@ -694,7 +864,9 @@ func (s *SQLStore) GetChatSettings(chat types.JID) (settings types.LocalChatSett } else { settings.Found = true } - if mutedUntil != 0 { + if mutedUntil < 0 { + settings.MutedUntil = store.MutedForever + } else if mutedUntil > 0 { settings.MutedUntil = time.Unix(mutedUntil, 0) } return @@ -707,32 +879,48 @@ const ( ON CONFLICT (our_jid, chat_jid, sender_jid, message_id) DO NOTHING ` getMsgSecret = ` - SELECT key FROM whatsmeow_message_secrets WHERE our_jid=$1 AND chat_jid=$2 AND sender_jid=$3 AND message_id=$4 + SELECT key, sender_jid + FROM whatsmeow_message_secrets + WHERE our_jid=$1 AND (chat_jid=$2 OR chat_jid=( + CASE + WHEN $2 LIKE '%@lid' + THEN (SELECT pn || '@s.whatsapp.net' FROM whatsmeow_lid_map WHERE lid=replace($2, '@lid', '')) + WHEN $2 LIKE '%@s.whatsapp.net' + THEN (SELECT lid || '@lid' FROM whatsmeow_lid_map WHERE pn=replace($2, '@s.whatsapp.net', '')) + END + )) AND message_id=$4 AND (sender_jid=$3 OR sender_jid=( + CASE + WHEN $3 LIKE '%@lid' + THEN (SELECT pn || '@s.whatsapp.net' FROM whatsmeow_lid_map WHERE lid=replace($3, '@lid', '')) + WHEN $3 LIKE '%@s.whatsapp.net' + THEN (SELECT lid || '@lid' FROM whatsmeow_lid_map WHERE pn=replace($3, '@s.whatsapp.net', '')) + END + )) ` ) -func (s *SQLStore) PutMessageSecrets(inserts []store.MessageSecretInsert) (err error) { - tx, err := s.db.Begin() - if err != nil { - return fmt.Errorf("failed to begin transaction: %w", err) - } - for _, insert := range inserts { - _, err = tx.Exec(putMsgSecret, s.JID, insert.Chat.ToNonAD(), insert.Sender.ToNonAD(), insert.ID, insert.Secret) - } - err = tx.Commit() - if err != nil { - return fmt.Errorf("failed to commit transaction: %w", err) +func (s *SQLStore) PutMessageSecrets(ctx context.Context, inserts []store.MessageSecretInsert) (err error) { + if len(inserts) == 0 { + return nil } - return + return s.db.DoTxn(ctx, nil, func(ctx context.Context) error { + for _, insert := range inserts { + _, err = s.db.Exec(ctx, putMsgSecret, s.JID, insert.Chat.ToNonAD(), insert.Sender.ToNonAD(), insert.ID, insert.Secret) + if err != nil { + return err + } + } + return nil + }) } -func (s *SQLStore) PutMessageSecret(chat, sender types.JID, id types.MessageID, secret []byte) (err error) { - _, err = s.db.Exec(putMsgSecret, s.JID, chat.ToNonAD(), sender.ToNonAD(), id, secret) +func (s *SQLStore) PutMessageSecret(ctx context.Context, chat, sender types.JID, id types.MessageID, secret []byte) (err error) { + _, err = s.db.Exec(ctx, putMsgSecret, s.JID, chat.ToNonAD(), sender.ToNonAD(), id, secret) return } -func (s *SQLStore) GetMessageSecret(chat, sender types.JID, id types.MessageID) (secret []byte, err error) { - err = s.db.QueryRow(getMsgSecret, s.JID, chat.ToNonAD(), sender.ToNonAD(), id).Scan(&secret) +func (s *SQLStore) GetMessageSecret(ctx context.Context, chat, sender types.JID, id types.MessageID) (secret []byte, realSender types.JID, err error) { + err = s.db.QueryRow(ctx, getMsgSecret, s.JID, chat.ToNonAD(), sender.ToNonAD(), id).Scan(&secret, &realSender) if errors.Is(err, sql.ErrNoRows) { err = nil } @@ -745,10 +933,21 @@ const ( VALUES ($1, $2, $3, $4) ON CONFLICT (our_jid, their_jid) DO UPDATE SET token=EXCLUDED.token, timestamp=EXCLUDED.timestamp ` - getPrivacyToken = `SELECT token, timestamp FROM whatsmeow_privacy_tokens WHERE our_jid=$1 AND their_jid=$2` + getPrivacyToken = ` + SELECT token, timestamp FROM whatsmeow_privacy_tokens WHERE our_jid=$1 AND (their_jid=$2 OR their_jid=( + CASE + WHEN $2 LIKE '%@lid' + THEN (SELECT pn || '@s.whatsapp.net' FROM whatsmeow_lid_map WHERE lid=replace($2, '@lid', '')) + WHEN $2 LIKE '%@s.whatsapp.net' + THEN (SELECT lid || '@lid' FROM whatsmeow_lid_map WHERE pn=replace($2, '@s.whatsapp.net', '')) + ELSE $2 + END + )) + ORDER BY timestamp DESC LIMIT 1 + ` ) -func (s *SQLStore) PutPrivacyTokens(tokens ...store.PrivacyToken) error { +func (s *SQLStore) PutPrivacyTokens(ctx context.Context, tokens ...store.PrivacyToken) error { args := make([]any, 1+len(tokens)*3) placeholders := make([]string, len(tokens)) args[0] = s.JID @@ -759,15 +958,15 @@ func (s *SQLStore) PutPrivacyTokens(tokens ...store.PrivacyToken) error { placeholders[i] = fmt.Sprintf("($1, $%d, $%d, $%d)", i*3+2, i*3+3, i*3+4) } query := strings.ReplaceAll(putPrivacyTokens, "($1, $2, $3, $4)", strings.Join(placeholders, ",")) - _, err := s.db.Exec(query, args...) + _, err := s.db.Exec(ctx, query, args...) return err } -func (s *SQLStore) GetPrivacyToken(user types.JID) (*store.PrivacyToken, error) { +func (s *SQLStore) GetPrivacyToken(ctx context.Context, user types.JID) (*store.PrivacyToken, error) { var token store.PrivacyToken token.User = user.ToNonAD() var ts int64 - err := s.db.QueryRow(getPrivacyToken, s.JID, token.User).Scan(&token.Token, &ts) + err := s.db.QueryRow(ctx, getPrivacyToken, s.JID, token.User).Scan(&token.Token, &ts) if errors.Is(err, sql.ErrNoRows) { return nil, nil } else if err != nil { @@ -777,3 +976,85 @@ func (s *SQLStore) GetPrivacyToken(user types.JID) (*store.PrivacyToken, error) return &token, nil } } + +const ( + getBufferedEventQuery = ` + SELECT plaintext, server_timestamp, insert_timestamp FROM whatsmeow_event_buffer WHERE our_jid = $1 AND ciphertext_hash = $2 + ` + putBufferedEventQuery = ` + INSERT INTO whatsmeow_event_buffer (our_jid, ciphertext_hash, plaintext, server_timestamp, insert_timestamp) + VALUES ($1, $2, $3, $4, $5) + ` + clearBufferedEventPlaintextQuery = ` + UPDATE whatsmeow_event_buffer SET plaintext = NULL WHERE our_jid = $1 AND ciphertext_hash = $2 + ` + deleteOldBufferedHashesQuery = ` + DELETE FROM whatsmeow_event_buffer WHERE insert_timestamp < $1 + ` +) + +func (s *SQLStore) GetBufferedEvent(ctx context.Context, ciphertextHash [32]byte) (*store.BufferedEvent, error) { + var insertTimeMS, serverTimeSeconds int64 + var buf store.BufferedEvent + err := s.db.QueryRow(ctx, getBufferedEventQuery, s.JID, ciphertextHash[:]).Scan(&buf.Plaintext, &serverTimeSeconds, &insertTimeMS) + if errors.Is(err, sql.ErrNoRows) { + return nil, nil + } else if err != nil { + return nil, err + } + buf.ServerTime = time.Unix(serverTimeSeconds, 0) + buf.InsertTime = time.UnixMilli(insertTimeMS) + return &buf, nil +} + +func (s *SQLStore) PutBufferedEvent(ctx context.Context, ciphertextHash [32]byte, plaintext []byte, serverTimestamp time.Time) error { + _, err := s.db.Exec(ctx, putBufferedEventQuery, s.JID, ciphertextHash[:], plaintext, serverTimestamp.Unix(), time.Now().UnixMilli()) + return err +} + +func (s *SQLStore) DoDecryptionTxn(ctx context.Context, fn func(context.Context) error) error { + ctx = context.WithValue(ctx, dbutil.ContextKeyDoTxnCallerSkip, 2) + return s.db.DoTxn(ctx, nil, fn) +} + +func (s *SQLStore) ClearBufferedEventPlaintext(ctx context.Context, ciphertextHash [32]byte) error { + _, err := s.db.Exec(ctx, clearBufferedEventPlaintextQuery, s.JID, ciphertextHash[:]) + return err +} + +func (s *SQLStore) DeleteOldBufferedHashes(ctx context.Context) error { + // The WhatsApp servers only buffer events for 14 days, + // so we can safely delete anything older than that. + _, err := s.db.Exec(ctx, deleteOldBufferedHashesQuery, time.Now().Add(-14*24*time.Hour).UnixMilli()) + return err +} + +const ( + getOutgoingEventQuery = ` + SELECT format, plaintext FROM whatsmeow_retry_buffer WHERE our_jid=$1 AND (chat_jid=$2 OR chat_jid=$3) AND message_id=$4 + ` + addOutgoingEventQuery = ` + INSERT INTO whatsmeow_retry_buffer (our_jid, chat_jid, message_id, format, plaintext, timestamp) + VALUES ($1, $2, $3, $4, $5, $6) + ON CONFLICT (our_jid, chat_jid, message_id) DO UPDATE + SET format=excluded.format, plaintext=excluded.plaintext, timestamp=excluded.timestamp + ` + deleteOldOutgoingEventsQuery = ` + DELETE FROM whatsmeow_retry_buffer WHERE our_jid=$1 AND timestamp < $2 + ` +) + +func (s *SQLStore) GetOutgoingEvent(ctx context.Context, chatJID, altChatJID types.JID, id types.MessageID) (format string, result []byte, err error) { + err = s.db.QueryRow(ctx, getOutgoingEventQuery, s.JID, chatJID, altChatJID, id).Scan(&format, &result) + return +} + +func (s *SQLStore) AddOutgoingEvent(ctx context.Context, chatJID types.JID, id types.MessageID, format string, plaintext []byte) error { + _, err := s.db.Exec(ctx, addOutgoingEventQuery, s.JID, chatJID, id, format, plaintext, time.Now().UnixMilli()) + return err +} + +func (s *SQLStore) DeleteOldOutgoingEvents(ctx context.Context) error { + _, err := s.db.Exec(ctx, deleteOldOutgoingEventsQuery, s.JID, time.Now().Add(-7*24*time.Hour).UnixMilli()) + return err +} diff --git a/vendor/go.mau.fi/whatsmeow/store/sqlstore/upgrade.go b/vendor/go.mau.fi/whatsmeow/store/sqlstore/upgrade.go deleted file mode 100644 index ebf26d0102..0000000000 --- a/vendor/go.mau.fi/whatsmeow/store/sqlstore/upgrade.go +++ /dev/null @@ -1,294 +0,0 @@ -// Copyright (c) 2021 Tulir Asokan -// -// This Source Code Form is subject to the terms of the Mozilla Public -// License, v. 2.0. If a copy of the MPL was not distributed with this -// file, You can obtain one at http://mozilla.org/MPL/2.0/. - -package sqlstore - -import ( - "database/sql" - "fmt" -) - -type upgradeFunc func(*sql.Tx, *Container) error - -// Upgrades is a list of functions that will upgrade a database to the latest version. -// -// This may be of use if you want to manage the database fully manually, but in most cases you -// should just call Container.Upgrade to let the library handle everything. -var Upgrades = [...]upgradeFunc{upgradeV1, upgradeV2, upgradeV3, upgradeV4, upgradeV5, upgradeV6} - -func (c *Container) getVersion() (int, error) { - _, err := c.db.Exec("CREATE TABLE IF NOT EXISTS whatsmeow_version (version INTEGER)") - if err != nil { - return -1, err - } - - version := 0 - row := c.db.QueryRow("SELECT version FROM whatsmeow_version LIMIT 1") - if row != nil { - _ = row.Scan(&version) - } - return version, nil -} - -func (c *Container) setVersion(tx *sql.Tx, version int) error { - _, err := tx.Exec("DELETE FROM whatsmeow_version") - if err != nil { - return err - } - _, err = tx.Exec("INSERT INTO whatsmeow_version (version) VALUES ($1)", version) - return err -} - -// Upgrade upgrades the database from the current to the latest version available. -func (c *Container) Upgrade() error { - if c.dialect == "sqlite" { - var foreignKeysEnabled bool - err := c.db.QueryRow("PRAGMA foreign_keys").Scan(&foreignKeysEnabled) - if err != nil { - return fmt.Errorf("failed to check if foreign keys are enabled: %w", err) - } else if !foreignKeysEnabled { - return fmt.Errorf("foreign keys are not enabled") - } - } - - version, err := c.getVersion() - if err != nil { - return err - } - - for ; version < len(Upgrades); version++ { - var tx *sql.Tx - tx, err = c.db.Begin() - if err != nil { - return err - } - - migrateFunc := Upgrades[version] - c.log.Infof("Upgrading database to v%d", version+1) - err = migrateFunc(tx, c) - if err != nil { - _ = tx.Rollback() - return err - } - - if err = c.setVersion(tx, version+1); err != nil { - return err - } - - if err = tx.Commit(); err != nil { - return err - } - } - - return nil -} - -func upgradeV1(tx *sql.Tx, _ *Container) error { - _, err := tx.Exec(`CREATE TABLE whatsmeow_device ( - jid TEXT PRIMARY KEY, - - registration_id BIGINT NOT NULL CHECK ( registration_id >= 0 AND registration_id < 4294967296 ), - - noise_key bytea NOT NULL CHECK ( length(noise_key) = 32 ), - identity_key bytea NOT NULL CHECK ( length(identity_key) = 32 ), - - signed_pre_key bytea NOT NULL CHECK ( length(signed_pre_key) = 32 ), - signed_pre_key_id INTEGER NOT NULL CHECK ( signed_pre_key_id >= 0 AND signed_pre_key_id < 16777216 ), - signed_pre_key_sig bytea NOT NULL CHECK ( length(signed_pre_key_sig) = 64 ), - - adv_key bytea NOT NULL, - adv_details bytea NOT NULL, - adv_account_sig bytea NOT NULL CHECK ( length(adv_account_sig) = 64 ), - adv_device_sig bytea NOT NULL CHECK ( length(adv_device_sig) = 64 ), - - platform TEXT NOT NULL DEFAULT '', - business_name TEXT NOT NULL DEFAULT '', - push_name TEXT NOT NULL DEFAULT '' - )`) - if err != nil { - return err - } - _, err = tx.Exec(`CREATE TABLE whatsmeow_identity_keys ( - our_jid TEXT, - their_id TEXT, - identity bytea NOT NULL CHECK ( length(identity) = 32 ), - - PRIMARY KEY (our_jid, their_id), - FOREIGN KEY (our_jid) REFERENCES whatsmeow_device(jid) ON DELETE CASCADE ON UPDATE CASCADE - )`) - if err != nil { - return err - } - _, err = tx.Exec(`CREATE TABLE whatsmeow_pre_keys ( - jid TEXT, - key_id INTEGER CHECK ( key_id >= 0 AND key_id < 16777216 ), - key bytea NOT NULL CHECK ( length(key) = 32 ), - uploaded BOOLEAN NOT NULL, - - PRIMARY KEY (jid, key_id), - FOREIGN KEY (jid) REFERENCES whatsmeow_device(jid) ON DELETE CASCADE ON UPDATE CASCADE - )`) - if err != nil { - return err - } - _, err = tx.Exec(`CREATE TABLE whatsmeow_sessions ( - our_jid TEXT, - their_id TEXT, - session bytea, - - PRIMARY KEY (our_jid, their_id), - FOREIGN KEY (our_jid) REFERENCES whatsmeow_device(jid) ON DELETE CASCADE ON UPDATE CASCADE - )`) - if err != nil { - return err - } - _, err = tx.Exec(`CREATE TABLE whatsmeow_sender_keys ( - our_jid TEXT, - chat_id TEXT, - sender_id TEXT, - sender_key bytea NOT NULL, - - PRIMARY KEY (our_jid, chat_id, sender_id), - FOREIGN KEY (our_jid) REFERENCES whatsmeow_device(jid) ON DELETE CASCADE ON UPDATE CASCADE - )`) - if err != nil { - return err - } - _, err = tx.Exec(`CREATE TABLE whatsmeow_app_state_sync_keys ( - jid TEXT, - key_id bytea, - key_data bytea NOT NULL, - timestamp BIGINT NOT NULL, - fingerprint bytea NOT NULL, - - PRIMARY KEY (jid, key_id), - FOREIGN KEY (jid) REFERENCES whatsmeow_device(jid) ON DELETE CASCADE ON UPDATE CASCADE - )`) - if err != nil { - return err - } - _, err = tx.Exec(`CREATE TABLE whatsmeow_app_state_version ( - jid TEXT, - name TEXT, - version BIGINT NOT NULL, - hash bytea NOT NULL CHECK ( length(hash) = 128 ), - - PRIMARY KEY (jid, name), - FOREIGN KEY (jid) REFERENCES whatsmeow_device(jid) ON DELETE CASCADE ON UPDATE CASCADE - )`) - if err != nil { - return err - } - _, err = tx.Exec(`CREATE TABLE whatsmeow_app_state_mutation_macs ( - jid TEXT, - name TEXT, - version BIGINT, - index_mac bytea CHECK ( length(index_mac) = 32 ), - value_mac bytea NOT NULL CHECK ( length(value_mac) = 32 ), - - PRIMARY KEY (jid, name, version, index_mac), - FOREIGN KEY (jid, name) REFERENCES whatsmeow_app_state_version(jid, name) ON DELETE CASCADE ON UPDATE CASCADE - )`) - if err != nil { - return err - } - _, err = tx.Exec(`CREATE TABLE whatsmeow_contacts ( - our_jid TEXT, - their_jid TEXT, - first_name TEXT, - full_name TEXT, - push_name TEXT, - business_name TEXT, - - PRIMARY KEY (our_jid, their_jid), - FOREIGN KEY (our_jid) REFERENCES whatsmeow_device(jid) ON DELETE CASCADE ON UPDATE CASCADE - )`) - if err != nil { - return err - } - _, err = tx.Exec(`CREATE TABLE whatsmeow_chat_settings ( - our_jid TEXT, - chat_jid TEXT, - muted_until BIGINT NOT NULL DEFAULT 0, - pinned BOOLEAN NOT NULL DEFAULT false, - archived BOOLEAN NOT NULL DEFAULT false, - - PRIMARY KEY (our_jid, chat_jid), - FOREIGN KEY (our_jid) REFERENCES whatsmeow_device(jid) ON DELETE CASCADE ON UPDATE CASCADE - )`) - if err != nil { - return err - } - return nil -} - -const fillSigKeyPostgres = ` -UPDATE whatsmeow_device SET adv_account_sig_key=( - SELECT identity - FROM whatsmeow_identity_keys - WHERE our_jid=whatsmeow_device.jid - AND their_id=concat(split_part(whatsmeow_device.jid, '.', 1), ':0') -); -DELETE FROM whatsmeow_device WHERE adv_account_sig_key IS NULL; -ALTER TABLE whatsmeow_device ALTER COLUMN adv_account_sig_key SET NOT NULL; -` - -const fillSigKeySQLite = ` -UPDATE whatsmeow_device SET adv_account_sig_key=( - SELECT identity - FROM whatsmeow_identity_keys - WHERE our_jid=whatsmeow_device.jid - AND their_id=substr(whatsmeow_device.jid, 0, instr(whatsmeow_device.jid, '.')) || ':0' -) -` - -func upgradeV2(tx *sql.Tx, container *Container) error { - _, err := tx.Exec("ALTER TABLE whatsmeow_device ADD COLUMN adv_account_sig_key bytea CHECK ( length(adv_account_sig_key) = 32 )") - if err != nil { - return err - } - if container.dialect == "postgres" || container.dialect == "pgx" { - _, err = tx.Exec(fillSigKeyPostgres) - } else { - _, err = tx.Exec(fillSigKeySQLite) - } - return err -} - -func upgradeV3(tx *sql.Tx, container *Container) error { - _, err := tx.Exec(`CREATE TABLE whatsmeow_message_secrets ( - our_jid TEXT, - chat_jid TEXT, - sender_jid TEXT, - message_id TEXT, - key bytea NOT NULL, - - PRIMARY KEY (our_jid, chat_jid, sender_jid, message_id), - FOREIGN KEY (our_jid) REFERENCES whatsmeow_device(jid) ON DELETE CASCADE ON UPDATE CASCADE - )`) - return err -} - -func upgradeV4(tx *sql.Tx, container *Container) error { - _, err := tx.Exec(`CREATE TABLE whatsmeow_privacy_tokens ( - our_jid TEXT, - their_jid TEXT, - token bytea NOT NULL, - timestamp BIGINT NOT NULL, - PRIMARY KEY (our_jid, their_jid) - )`) - return err -} - -func upgradeV5(tx *sql.Tx, container *Container) error { - _, err := tx.Exec("UPDATE whatsmeow_device SET jid=REPLACE(jid, '.0', '')") - return err -} - -func upgradeV6(tx *sql.Tx, container *Container) error { - _, err := tx.Exec("ALTER TABLE whatsmeow_device ADD COLUMN facebook_uuid uuid") - return err -} diff --git a/vendor/go.mau.fi/whatsmeow/store/sqlstore/upgrades/00-latest-schema.sql b/vendor/go.mau.fi/whatsmeow/store/sqlstore/upgrades/00-latest-schema.sql new file mode 100644 index 0000000000..adf0013164 --- /dev/null +++ b/vendor/go.mau.fi/whatsmeow/store/sqlstore/upgrades/00-latest-schema.sql @@ -0,0 +1,174 @@ +-- v0 -> v13 (compatible with v8+): Latest schema +CREATE TABLE whatsmeow_device ( + jid TEXT PRIMARY KEY, + lid TEXT, + + facebook_uuid uuid, + + registration_id BIGINT NOT NULL CHECK ( registration_id >= 0 AND registration_id < 4294967296 ), + + noise_key bytea NOT NULL CHECK ( length(noise_key) = 32 ), + identity_key bytea NOT NULL CHECK ( length(identity_key) = 32 ), + + signed_pre_key bytea NOT NULL CHECK ( length(signed_pre_key) = 32 ), + signed_pre_key_id INTEGER NOT NULL CHECK ( signed_pre_key_id >= 0 AND signed_pre_key_id < 16777216 ), + signed_pre_key_sig bytea NOT NULL CHECK ( length(signed_pre_key_sig) = 64 ), + + adv_key bytea NOT NULL, + adv_details bytea NOT NULL, + adv_account_sig bytea NOT NULL CHECK ( length(adv_account_sig) = 64 ), + adv_account_sig_key bytea NOT NULL CHECK ( length(adv_account_sig_key) = 32 ), + adv_device_sig bytea NOT NULL CHECK ( length(adv_device_sig) = 64 ), + + platform TEXT NOT NULL DEFAULT '', + business_name TEXT NOT NULL DEFAULT '', + push_name TEXT NOT NULL DEFAULT '', + + lid_migration_ts BIGINT NOT NULL DEFAULT 0 +); + +CREATE TABLE whatsmeow_identity_keys ( + our_jid TEXT, + their_id TEXT, + identity bytea NOT NULL CHECK ( length(identity) = 32 ), + + PRIMARY KEY (our_jid, their_id), + FOREIGN KEY (our_jid) REFERENCES whatsmeow_device(jid) ON DELETE CASCADE ON UPDATE CASCADE +); + +CREATE TABLE whatsmeow_pre_keys ( + jid TEXT, + key_id INTEGER CHECK ( key_id >= 0 AND key_id < 16777216 ), + key bytea NOT NULL CHECK ( length(key) = 32 ), + uploaded BOOLEAN NOT NULL, + + PRIMARY KEY (jid, key_id), + FOREIGN KEY (jid) REFERENCES whatsmeow_device(jid) ON DELETE CASCADE ON UPDATE CASCADE +); + +CREATE TABLE whatsmeow_sessions ( + our_jid TEXT, + their_id TEXT, + session bytea, + + PRIMARY KEY (our_jid, their_id), + FOREIGN KEY (our_jid) REFERENCES whatsmeow_device(jid) ON DELETE CASCADE ON UPDATE CASCADE +); + +CREATE TABLE whatsmeow_sender_keys ( + our_jid TEXT, + chat_id TEXT, + sender_id TEXT, + sender_key bytea NOT NULL, + + PRIMARY KEY (our_jid, chat_id, sender_id), + FOREIGN KEY (our_jid) REFERENCES whatsmeow_device(jid) ON DELETE CASCADE ON UPDATE CASCADE +); + +CREATE TABLE whatsmeow_app_state_sync_keys ( + jid TEXT, + key_id bytea, + key_data bytea NOT NULL, + timestamp BIGINT NOT NULL, + fingerprint bytea NOT NULL, + + PRIMARY KEY (jid, key_id), + FOREIGN KEY (jid) REFERENCES whatsmeow_device(jid) ON DELETE CASCADE ON UPDATE CASCADE +); + +CREATE TABLE whatsmeow_app_state_version ( + jid TEXT, + name TEXT, + version BIGINT NOT NULL, + hash bytea NOT NULL CHECK ( length(hash) = 128 ), + + PRIMARY KEY (jid, name), + FOREIGN KEY (jid) REFERENCES whatsmeow_device(jid) ON DELETE CASCADE ON UPDATE CASCADE +); + +CREATE TABLE whatsmeow_app_state_mutation_macs ( + jid TEXT, + name TEXT, + version BIGINT, + index_mac bytea CHECK ( length(index_mac) = 32 ), + value_mac bytea NOT NULL CHECK ( length(value_mac) = 32 ), + + PRIMARY KEY (jid, name, version, index_mac), + FOREIGN KEY (jid, name) REFERENCES whatsmeow_app_state_version(jid, name) ON DELETE CASCADE ON UPDATE CASCADE +); + +CREATE TABLE whatsmeow_contacts ( + our_jid TEXT, + their_jid TEXT, + first_name TEXT, + full_name TEXT, + push_name TEXT, + business_name TEXT, + redacted_phone TEXT, + + PRIMARY KEY (our_jid, their_jid), + FOREIGN KEY (our_jid) REFERENCES whatsmeow_device(jid) ON DELETE CASCADE ON UPDATE CASCADE +); + +CREATE TABLE whatsmeow_chat_settings ( + our_jid TEXT, + chat_jid TEXT, + muted_until BIGINT NOT NULL DEFAULT 0, + pinned BOOLEAN NOT NULL DEFAULT false, + archived BOOLEAN NOT NULL DEFAULT false, + + PRIMARY KEY (our_jid, chat_jid), + FOREIGN KEY (our_jid) REFERENCES whatsmeow_device(jid) ON DELETE CASCADE ON UPDATE CASCADE +); + +CREATE TABLE whatsmeow_message_secrets ( + our_jid TEXT, + chat_jid TEXT, + sender_jid TEXT, + message_id TEXT, + key bytea NOT NULL, + + PRIMARY KEY (our_jid, chat_jid, sender_jid, message_id), + FOREIGN KEY (our_jid) REFERENCES whatsmeow_device(jid) ON DELETE CASCADE ON UPDATE CASCADE +); + +CREATE TABLE whatsmeow_privacy_tokens ( + our_jid TEXT, + their_jid TEXT, + token bytea NOT NULL, + timestamp BIGINT NOT NULL, + sender_timestamp BIGINT, + PRIMARY KEY (our_jid, their_jid) +); + +CREATE INDEX idx_whatsmeow_privacy_tokens_our_jid_timestamp +ON whatsmeow_privacy_tokens (our_jid, timestamp); + +CREATE TABLE whatsmeow_lid_map ( + lid TEXT PRIMARY KEY, + pn TEXT UNIQUE NOT NULL +); + +CREATE TABLE whatsmeow_event_buffer ( + our_jid TEXT NOT NULL, + ciphertext_hash bytea NOT NULL CHECK ( length(ciphertext_hash) = 32 ), + plaintext bytea, + server_timestamp BIGINT NOT NULL, + insert_timestamp BIGINT NOT NULL, + PRIMARY KEY (our_jid, ciphertext_hash), + FOREIGN KEY (our_jid) REFERENCES whatsmeow_device(jid) ON DELETE CASCADE ON UPDATE CASCADE +); + +CREATE TABLE whatsmeow_retry_buffer ( + our_jid TEXT NOT NULL, + chat_jid TEXT NOT NULL, + message_id TEXT NOT NULL, + format TEXT NOT NULL, + plaintext bytea NOT NULL, + timestamp BIGINT NOT NULL, + + PRIMARY KEY (our_jid, chat_jid, message_id), + FOREIGN KEY (our_jid) REFERENCES whatsmeow_device(jid) ON DELETE CASCADE ON UPDATE CASCADE +); + +CREATE INDEX whatsmeow_retry_buffer_timestamp_idx ON whatsmeow_retry_buffer (our_jid, timestamp); diff --git a/vendor/go.mau.fi/whatsmeow/store/sqlstore/upgrades/03-message-secrets.sql b/vendor/go.mau.fi/whatsmeow/store/sqlstore/upgrades/03-message-secrets.sql new file mode 100644 index 0000000000..761e6cb73a --- /dev/null +++ b/vendor/go.mau.fi/whatsmeow/store/sqlstore/upgrades/03-message-secrets.sql @@ -0,0 +1,11 @@ +-- v3: Add message secrets table +CREATE TABLE whatsmeow_message_secrets ( + our_jid TEXT, + chat_jid TEXT, + sender_jid TEXT, + message_id TEXT, + key bytea NOT NULL, + + PRIMARY KEY (our_jid, chat_jid, sender_jid, message_id), + FOREIGN KEY (our_jid) REFERENCES whatsmeow_device(jid) ON DELETE CASCADE ON UPDATE CASCADE +); diff --git a/vendor/go.mau.fi/whatsmeow/store/sqlstore/upgrades/04-privacy-tokens.sql b/vendor/go.mau.fi/whatsmeow/store/sqlstore/upgrades/04-privacy-tokens.sql new file mode 100644 index 0000000000..fbf0836beb --- /dev/null +++ b/vendor/go.mau.fi/whatsmeow/store/sqlstore/upgrades/04-privacy-tokens.sql @@ -0,0 +1,8 @@ +-- v4: Add privacy tokens table +CREATE TABLE whatsmeow_privacy_tokens ( + our_jid TEXT, + their_jid TEXT, + token bytea NOT NULL, + timestamp BIGINT NOT NULL, + PRIMARY KEY (our_jid, their_jid) +); diff --git a/vendor/go.mau.fi/whatsmeow/store/sqlstore/upgrades/05-account-jid-format.sql b/vendor/go.mau.fi/whatsmeow/store/sqlstore/upgrades/05-account-jid-format.sql new file mode 100644 index 0000000000..cc4e9ffe0a --- /dev/null +++ b/vendor/go.mau.fi/whatsmeow/store/sqlstore/upgrades/05-account-jid-format.sql @@ -0,0 +1,2 @@ +-- v5: Update account JID format +UPDATE whatsmeow_device SET jid=REPLACE(jid, '.0', ''); diff --git a/vendor/go.mau.fi/whatsmeow/store/sqlstore/upgrades/06-facebook-uuid.sql b/vendor/go.mau.fi/whatsmeow/store/sqlstore/upgrades/06-facebook-uuid.sql new file mode 100644 index 0000000000..0d7821d01a --- /dev/null +++ b/vendor/go.mau.fi/whatsmeow/store/sqlstore/upgrades/06-facebook-uuid.sql @@ -0,0 +1,2 @@ +-- v6: Add facebook_uuid column to device table +ALTER TABLE whatsmeow_device ADD COLUMN facebook_uuid uuid; diff --git a/vendor/go.mau.fi/whatsmeow/store/sqlstore/upgrades/07-account-lid.sql b/vendor/go.mau.fi/whatsmeow/store/sqlstore/upgrades/07-account-lid.sql new file mode 100644 index 0000000000..7dfec5d61f --- /dev/null +++ b/vendor/go.mau.fi/whatsmeow/store/sqlstore/upgrades/07-account-lid.sql @@ -0,0 +1,2 @@ +-- v7 (compatible with v6+): Add lid column to device table +ALTER TABLE whatsmeow_device ADD COLUMN lid TEXT; diff --git a/vendor/go.mau.fi/whatsmeow/store/sqlstore/upgrades/08-lid-mapping.sql b/vendor/go.mau.fi/whatsmeow/store/sqlstore/upgrades/08-lid-mapping.sql new file mode 100644 index 0000000000..9522a3d92d --- /dev/null +++ b/vendor/go.mau.fi/whatsmeow/store/sqlstore/upgrades/08-lid-mapping.sql @@ -0,0 +1,5 @@ +-- v8 (compatible with v8+): Add tables for LID<->JID mapping +CREATE TABLE whatsmeow_lid_map ( + lid TEXT PRIMARY KEY, + pn TEXT UNIQUE NOT NULL +); diff --git a/vendor/go.mau.fi/whatsmeow/store/sqlstore/upgrades/09-decryption-buffer.sql b/vendor/go.mau.fi/whatsmeow/store/sqlstore/upgrades/09-decryption-buffer.sql new file mode 100644 index 0000000000..5f4d887c91 --- /dev/null +++ b/vendor/go.mau.fi/whatsmeow/store/sqlstore/upgrades/09-decryption-buffer.sql @@ -0,0 +1,10 @@ +-- v9 (compatible with v8+): Add decrypted event buffer +CREATE TABLE whatsmeow_event_buffer ( + our_jid TEXT NOT NULL, + ciphertext_hash bytea NOT NULL CHECK ( length(ciphertext_hash) = 32 ), + plaintext bytea, + server_timestamp BIGINT NOT NULL, + insert_timestamp BIGINT NOT NULL, + PRIMARY KEY (our_jid, ciphertext_hash), + FOREIGN KEY (our_jid) REFERENCES whatsmeow_device(jid) ON DELETE CASCADE ON UPDATE CASCADE +); diff --git a/vendor/go.mau.fi/whatsmeow/store/sqlstore/upgrades/10-chat-db-lid-migration-ts.sql b/vendor/go.mau.fi/whatsmeow/store/sqlstore/upgrades/10-chat-db-lid-migration-ts.sql new file mode 100644 index 0000000000..2638deb410 --- /dev/null +++ b/vendor/go.mau.fi/whatsmeow/store/sqlstore/upgrades/10-chat-db-lid-migration-ts.sql @@ -0,0 +1,2 @@ +-- v10 (compatible with v8+): Add lid migration timestamp to device table +ALTER TABLE whatsmeow_device ADD COLUMN lid_migration_ts BIGINT NOT NULL DEFAULT 0; diff --git a/vendor/go.mau.fi/whatsmeow/store/sqlstore/upgrades/11-redacted-phone-contacts.sql b/vendor/go.mau.fi/whatsmeow/store/sqlstore/upgrades/11-redacted-phone-contacts.sql new file mode 100644 index 0000000000..1458940187 --- /dev/null +++ b/vendor/go.mau.fi/whatsmeow/store/sqlstore/upgrades/11-redacted-phone-contacts.sql @@ -0,0 +1,2 @@ +-- v11 (compatible with v8+): Store redacted phone number for LID members in groups +ALTER TABLE whatsmeow_contacts ADD COLUMN redacted_phone TEXT; diff --git a/vendor/go.mau.fi/whatsmeow/store/sqlstore/upgrades/12-privacy-token-sender-timestamp.sql b/vendor/go.mau.fi/whatsmeow/store/sqlstore/upgrades/12-privacy-token-sender-timestamp.sql new file mode 100644 index 0000000000..86bbfbc846 --- /dev/null +++ b/vendor/go.mau.fi/whatsmeow/store/sqlstore/upgrades/12-privacy-token-sender-timestamp.sql @@ -0,0 +1,5 @@ +-- v12 (compatible with v8+): Add sender timestamp and prune index for privacy tokens +ALTER TABLE whatsmeow_privacy_tokens ADD COLUMN sender_timestamp BIGINT; + +CREATE INDEX idx_whatsmeow_privacy_tokens_our_jid_timestamp +ON whatsmeow_privacy_tokens (our_jid, timestamp); diff --git a/vendor/go.mau.fi/whatsmeow/store/sqlstore/upgrades/13-retry-buffer.sql b/vendor/go.mau.fi/whatsmeow/store/sqlstore/upgrades/13-retry-buffer.sql new file mode 100644 index 0000000000..e1b6589c9a --- /dev/null +++ b/vendor/go.mau.fi/whatsmeow/store/sqlstore/upgrades/13-retry-buffer.sql @@ -0,0 +1,14 @@ +-- v13 (compatible with v8+): Add buffer for outgoing events to accept retry receipts +CREATE TABLE whatsmeow_retry_buffer ( + our_jid TEXT NOT NULL, + chat_jid TEXT NOT NULL, + message_id TEXT NOT NULL, + format TEXT NOT NULL, + plaintext bytea NOT NULL, + timestamp BIGINT NOT NULL, + + PRIMARY KEY (our_jid, chat_jid, message_id), + FOREIGN KEY (our_jid) REFERENCES whatsmeow_device(jid) ON DELETE CASCADE ON UPDATE CASCADE +); + +CREATE INDEX whatsmeow_retry_buffer_timestamp_idx ON whatsmeow_retry_buffer (our_jid, timestamp); diff --git a/vendor/go.mau.fi/whatsmeow/store/sqlstore/upgrades/upgrades.go b/vendor/go.mau.fi/whatsmeow/store/sqlstore/upgrades/upgrades.go new file mode 100644 index 0000000000..2576e3c767 --- /dev/null +++ b/vendor/go.mau.fi/whatsmeow/store/sqlstore/upgrades/upgrades.go @@ -0,0 +1,22 @@ +// Copyright (c) 2025 Tulir Asokan +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. + +package upgrades + +import ( + "embed" + + "go.mau.fi/util/dbutil" +) + +var Table dbutil.UpgradeTable + +//go:embed *.sql +var upgrades embed.FS + +func init() { + Table.RegisterFS(upgrades) +} diff --git a/vendor/go.mau.fi/whatsmeow/store/store.go b/vendor/go.mau.fi/whatsmeow/store/store.go index 397eaf0293..cae8eaeaf6 100644 --- a/vendor/go.mau.fi/whatsmeow/store/store.go +++ b/vendor/go.mau.fi/whatsmeow/store/store.go @@ -1,4 +1,4 @@ -// Copyright (c) 2022 Tulir Asokan +// Copyright (c) 2025 Tulir Asokan // // This Source Code Form is subject to the terms of the Mozilla Public // License, v. 2.0. If a copy of the MPL was not distributed with this @@ -8,44 +8,47 @@ package store import ( - "fmt" + "context" "time" "github.com/google/uuid" - waProto "go.mau.fi/whatsmeow/binary/proto" + "go.mau.fi/whatsmeow/proto/waAdv" "go.mau.fi/whatsmeow/types" "go.mau.fi/whatsmeow/util/keys" waLog "go.mau.fi/whatsmeow/util/log" ) type IdentityStore interface { - PutIdentity(address string, key [32]byte) error - DeleteAllIdentities(phone string) error - DeleteIdentity(address string) error - IsTrustedIdentity(address string, key [32]byte) (bool, error) + PutIdentity(ctx context.Context, address string, key [32]byte) error + DeleteAllIdentities(ctx context.Context, phone string) error + DeleteIdentity(ctx context.Context, address string) error + IsTrustedIdentity(ctx context.Context, address string, key [32]byte) (bool, error) } type SessionStore interface { - GetSession(address string) ([]byte, error) - HasSession(address string) (bool, error) - PutSession(address string, session []byte) error - DeleteAllSessions(phone string) error - DeleteSession(address string) error + GetSession(ctx context.Context, address string) ([]byte, error) + HasSession(ctx context.Context, address string) (bool, error) + GetManySessions(ctx context.Context, addresses []string) (map[string][]byte, error) + PutSession(ctx context.Context, address string, session []byte) error + PutManySessions(ctx context.Context, sessions map[string][]byte) error + DeleteAllSessions(ctx context.Context, phone string) error + DeleteSession(ctx context.Context, address string) error + MigratePNToLID(ctx context.Context, pn, lid types.JID) error } type PreKeyStore interface { - GetOrGenPreKeys(count uint32) ([]*keys.PreKey, error) - GenOnePreKey() (*keys.PreKey, error) - GetPreKey(id uint32) (*keys.PreKey, error) - RemovePreKey(id uint32) error - MarkPreKeysAsUploaded(upToID uint32) error - UploadedPreKeyCount() (int, error) + GetOrGenPreKeys(ctx context.Context, count uint32) ([]*keys.PreKey, error) + GenOnePreKey(ctx context.Context) (*keys.PreKey, error) + GetPreKey(ctx context.Context, id uint32) (*keys.PreKey, error) + RemovePreKey(ctx context.Context, id uint32) error + MarkPreKeysAsUploaded(ctx context.Context, upToID uint32) error + UploadedPreKeyCount(ctx context.Context) (int, error) } type SenderKeyStore interface { - PutSenderKey(group, user string, session []byte) error - GetSenderKey(group, user string) ([]byte, error) + PutSenderKey(ctx context.Context, group, user string, session []byte) error + GetSenderKey(ctx context.Context, group, user string) ([]byte, error) } type AppStateSyncKey struct { @@ -55,9 +58,10 @@ type AppStateSyncKey struct { } type AppStateSyncKeyStore interface { - PutAppStateSyncKey(id []byte, key AppStateSyncKey) error - GetAppStateSyncKey(id []byte) (*AppStateSyncKey, error) - GetLatestAppStateSyncKeyID() ([]byte, error) + PutAppStateSyncKey(ctx context.Context, id []byte, key AppStateSyncKey) error + GetAppStateSyncKey(ctx context.Context, id []byte) (*AppStateSyncKey, error) + GetLatestAppStateSyncKeyID(ctx context.Context) ([]byte, error) + GetAllAppStateSyncKeys(ctx context.Context) ([]*AppStateSyncKey, error) } type AppStateMutationMAC struct { @@ -66,13 +70,13 @@ type AppStateMutationMAC struct { } type AppStateStore interface { - PutAppStateVersion(name string, version uint64, hash [128]byte) error - GetAppStateVersion(name string) (uint64, [128]byte, error) - DeleteAppStateVersion(name string) error + PutAppStateVersion(ctx context.Context, name string, version uint64, hash [128]byte) error + GetAppStateVersion(ctx context.Context, name string) (uint64, [128]byte, error) + DeleteAppStateVersion(ctx context.Context, name string) error - PutAppStateMutationMACs(name string, version uint64, mutations []AppStateMutationMAC) error - DeleteAppStateMutationMACs(name string, indexMACs [][]byte) error - GetAppStateMutationMAC(name string, indexMAC []byte) (valueMAC []byte, err error) + PutAppStateMutationMACs(ctx context.Context, name string, version uint64, mutations []AppStateMutationMAC) error + DeleteAppStateMutationMACs(ctx context.Context, name string, indexMACs [][]byte) error + GetAppStateMutationMAC(ctx context.Context, name string, indexMAC []byte) (valueMAC []byte, err error) } type ContactEntry struct { @@ -81,25 +85,41 @@ type ContactEntry struct { FullName string } +func (ce ContactEntry) GetMassInsertValues() [3]any { + return [...]any{ce.JID.String(), ce.FirstName, ce.FullName} +} + +type RedactedPhoneEntry struct { + JID types.JID + RedactedPhone string +} + +func (rpe RedactedPhoneEntry) GetMassInsertValues() [2]any { + return [...]any{rpe.JID.String(), rpe.RedactedPhone} +} + type ContactStore interface { - PutPushName(user types.JID, pushName string) (bool, string, error) - PutBusinessName(user types.JID, businessName string) (bool, string, error) - PutContactName(user types.JID, fullName, firstName string) error - PutAllContactNames(contacts []ContactEntry) error - GetContact(user types.JID) (types.ContactInfo, error) - GetAllContacts() (map[types.JID]types.ContactInfo, error) + PutPushName(ctx context.Context, user types.JID, pushName string) (bool, string, error) + PutBusinessName(ctx context.Context, user types.JID, businessName string) (bool, string, error) + PutContactName(ctx context.Context, user types.JID, fullName, firstName string) error + PutAllContactNames(ctx context.Context, contacts []ContactEntry) error + PutManyRedactedPhones(ctx context.Context, entries []RedactedPhoneEntry) error + GetContact(ctx context.Context, user types.JID) (types.ContactInfo, error) + GetAllContacts(ctx context.Context) (map[types.JID]types.ContactInfo, error) } +var MutedForever = time.Date(9999, 12, 31, 23, 59, 59, 999999999, time.UTC) + type ChatSettingsStore interface { - PutMutedUntil(chat types.JID, mutedUntil time.Time) error - PutPinned(chat types.JID, pinned bool) error - PutArchived(chat types.JID, archived bool) error - GetChatSettings(chat types.JID) (types.LocalChatSettings, error) + PutMutedUntil(ctx context.Context, chat types.JID, mutedUntil time.Time) error + PutPinned(ctx context.Context, chat types.JID, pinned bool) error + PutArchived(ctx context.Context, chat types.JID, archived bool) error + GetChatSettings(ctx context.Context, chat types.JID) (types.LocalChatSettings, error) } type DeviceContainer interface { - PutDevice(store *Device) error - DeleteDevice(store *Device) error + PutDevice(ctx context.Context, store *Device) error + DeleteDevice(ctx context.Context, store *Device) error } type MessageSecretInsert struct { @@ -110,9 +130,9 @@ type MessageSecretInsert struct { } type MsgSecretStore interface { - PutMessageSecrets([]MessageSecretInsert) error - PutMessageSecret(chat, sender types.JID, id types.MessageID, secret []byte) error - GetMessageSecret(chat, sender types.JID, id types.MessageID) ([]byte, error) + PutMessageSecrets(ctx context.Context, inserts []MessageSecretInsert) error + PutMessageSecret(ctx context.Context, chat, sender types.JID, id types.MessageID, secret []byte) error + GetMessageSecret(ctx context.Context, chat, sender types.JID, id types.MessageID) ([]byte, types.JID, error) } type PrivacyToken struct { @@ -122,8 +142,66 @@ type PrivacyToken struct { } type PrivacyTokenStore interface { - PutPrivacyTokens(tokens ...PrivacyToken) error - GetPrivacyToken(user types.JID) (*PrivacyToken, error) + PutPrivacyTokens(ctx context.Context, tokens ...PrivacyToken) error + GetPrivacyToken(ctx context.Context, user types.JID) (*PrivacyToken, error) +} + +type BufferedEvent struct { + Plaintext []byte + InsertTime time.Time + ServerTime time.Time +} + +type EventBuffer interface { + GetBufferedEvent(ctx context.Context, ciphertextHash [32]byte) (*BufferedEvent, error) + PutBufferedEvent(ctx context.Context, ciphertextHash [32]byte, plaintext []byte, serverTimestamp time.Time) error + DoDecryptionTxn(ctx context.Context, fn func(context.Context) error) error + ClearBufferedEventPlaintext(ctx context.Context, ciphertextHash [32]byte) error + DeleteOldBufferedHashes(ctx context.Context) error + + GetOutgoingEvent(ctx context.Context, chatJID, altChatJID types.JID, id types.MessageID) (string, []byte, error) + AddOutgoingEvent(ctx context.Context, chatJID types.JID, id types.MessageID, format string, plaintext []byte) error + DeleteOldOutgoingEvents(ctx context.Context) error +} + +type LIDMapping struct { + LID types.JID + PN types.JID +} + +func (lm LIDMapping) GetMassInsertValues() [2]any { + return [...]any{lm.LID.User, lm.PN.User} +} + +type LIDStore interface { + PutManyLIDMappings(ctx context.Context, mappings []LIDMapping) error + PutLIDMapping(ctx context.Context, lid, jid types.JID) error + GetPNForLID(ctx context.Context, lid types.JID) (types.JID, error) + GetLIDForPN(ctx context.Context, pn types.JID) (types.JID, error) + GetManyLIDsForPNs(ctx context.Context, pns []types.JID) (map[types.JID]types.JID, error) +} + +type AllSessionSpecificStores interface { + IdentityStore + SessionStore + PreKeyStore + SenderKeyStore + AppStateSyncKeyStore + AppStateStore + ContactStore + ChatSettingsStore + MsgSecretStore + PrivacyTokenStore + EventBuffer +} + +type AllGlobalStores interface { + LIDStore +} + +type AllStores interface { + AllSessionSpecificStores + AllGlobalStores } type Device struct { @@ -135,12 +213,16 @@ type Device struct { RegistrationID uint32 AdvSecretKey []byte - ID *types.JID - Account *waProto.ADVSignedDeviceIdentity + ID *types.JID + LID types.JID + + Account *waAdv.ADVSignedDeviceIdentity Platform string BusinessName string PushName string + LIDMigrationTimestamp int64 + FacebookUUID uuid.UUID Initialized bool @@ -154,28 +236,51 @@ type Device struct { ChatSettings ChatSettingsStore MsgSecrets MsgSecretStore PrivacyTokens PrivacyTokenStore + EventBuffer EventBuffer + LIDs LIDStore Container DeviceContainer +} - DatabaseErrorHandler func(device *Device, action string, attemptIndex int, err error) (retry bool) +func (device *Device) GetJID() types.JID { + if device == nil { + return types.EmptyJID + } + id := device.ID + if id == nil { + return types.EmptyJID + } + return *id } -func (device *Device) handleDatabaseError(attemptIndex int, err error, action string, args ...interface{}) bool { - if device.DatabaseErrorHandler != nil { - return device.DatabaseErrorHandler(device, fmt.Sprintf(action, args...), attemptIndex, err) +func (device *Device) GetLID() types.JID { + if device == nil { + return types.EmptyJID } - device.Log.Errorf("Failed to %s: %v", fmt.Sprintf(action, args...), err) - return false + return device.LID } -func (device *Device) Save() error { - return device.Container.PutDevice(device) +func (device *Device) Save(ctx context.Context) error { + return device.Container.PutDevice(ctx, device) } -func (device *Device) Delete() error { - err := device.Container.DeleteDevice(device) +func (device *Device) Delete(ctx context.Context) error { + err := device.Container.DeleteDevice(ctx, device) if err != nil { return err } device.ID = nil + device.LID = types.EmptyJID return nil } + +func (device *Device) GetAltJID(ctx context.Context, jid types.JID) (types.JID, error) { + if device == nil { + return types.EmptyJID, nil + } else if jid.Server == types.DefaultUserServer { + return device.LIDs.GetLIDForPN(ctx, jid) + } else if jid.Server == types.HiddenUserServer { + return device.LIDs.GetPNForLID(ctx, jid) + } else { + return types.EmptyJID, nil + } +} diff --git a/vendor/go.mau.fi/whatsmeow/types/botmap.go b/vendor/go.mau.fi/whatsmeow/types/botmap.go new file mode 100644 index 0000000000..b0e9937d81 --- /dev/null +++ b/vendor/go.mau.fi/whatsmeow/types/botmap.go @@ -0,0 +1,210 @@ +package types + +var BotJIDMap = map[JID]JID{ + NewJID("867051314767696", BotServer): NewJID("13135550002", DefaultUserServer), + NewJID("1061492271844689", BotServer): NewJID("13135550005", DefaultUserServer), + NewJID("245886058483988", BotServer): NewJID("13135550009", DefaultUserServer), + NewJID("3509905702656130", BotServer): NewJID("13135550012", DefaultUserServer), + NewJID("1059680132034576", BotServer): NewJID("13135550013", DefaultUserServer), + NewJID("715681030623646", BotServer): NewJID("13135550014", DefaultUserServer), + NewJID("1644971366323052", BotServer): NewJID("13135550015", DefaultUserServer), + NewJID("582497970646566", BotServer): NewJID("13135550019", DefaultUserServer), + NewJID("645459357769306", BotServer): NewJID("13135550022", DefaultUserServer), + NewJID("294997126699143", BotServer): NewJID("13135550023", DefaultUserServer), + NewJID("1522631578502677", BotServer): NewJID("13135550027", DefaultUserServer), + NewJID("719421926276396", BotServer): NewJID("13135550030", DefaultUserServer), + NewJID("1788488635002167", BotServer): NewJID("13135550031", DefaultUserServer), + NewJID("24232338603080193", BotServer): NewJID("13135550033", DefaultUserServer), + NewJID("689289903143209", BotServer): NewJID("13135550035", DefaultUserServer), + NewJID("871626054177096", BotServer): NewJID("13135550039", DefaultUserServer), + NewJID("362351902849370", BotServer): NewJID("13135550042", DefaultUserServer), + NewJID("1744617646041527", BotServer): NewJID("13135550043", DefaultUserServer), + NewJID("893887762270570", BotServer): NewJID("13135550046", DefaultUserServer), + NewJID("1155032702135830", BotServer): NewJID("13135550047", DefaultUserServer), + NewJID("333931965993883", BotServer): NewJID("13135550048", DefaultUserServer), + NewJID("853748013058752", BotServer): NewJID("13135550049", DefaultUserServer), + NewJID("1559068611564819", BotServer): NewJID("13135550053", DefaultUserServer), + NewJID("890487432705716", BotServer): NewJID("13135550054", DefaultUserServer), + NewJID("240254602395494", BotServer): NewJID("13135550055", DefaultUserServer), + NewJID("1578420349663261", BotServer): NewJID("13135550062", DefaultUserServer), + NewJID("322908887140421", BotServer): NewJID("13135550065", DefaultUserServer), + NewJID("3713961535514771", BotServer): NewJID("13135550067", DefaultUserServer), + NewJID("997884654811738", BotServer): NewJID("13135550070", DefaultUserServer), + NewJID("403157239387035", BotServer): NewJID("13135550081", DefaultUserServer), + NewJID("535242369074963", BotServer): NewJID("13135550082", DefaultUserServer), + NewJID("946293427247659", BotServer): NewJID("13135550083", DefaultUserServer), + NewJID("3664707673802291", BotServer): NewJID("13135550084", DefaultUserServer), + NewJID("1821827464894892", BotServer): NewJID("13135550085", DefaultUserServer), + NewJID("1760312477828757", BotServer): NewJID("13135550086", DefaultUserServer), + NewJID("439480398712216", BotServer): NewJID("13135550087", DefaultUserServer), + NewJID("1876735582800984", BotServer): NewJID("13135550088", DefaultUserServer), + NewJID("984025089825661", BotServer): NewJID("13135550089", DefaultUserServer), + NewJID("1001336351558186", BotServer): NewJID("13135550090", DefaultUserServer), + NewJID("3739346336347061", BotServer): NewJID("13135550091", DefaultUserServer), + NewJID("3632749426974980", BotServer): NewJID("13135550092", DefaultUserServer), + NewJID("427864203481615", BotServer): NewJID("13135550093", DefaultUserServer), + NewJID("1434734570493055", BotServer): NewJID("13135550094", DefaultUserServer), + NewJID("992873449225921", BotServer): NewJID("13135550095", DefaultUserServer), + NewJID("813087747426445", BotServer): NewJID("13135550096", DefaultUserServer), + NewJID("806369104931434", BotServer): NewJID("13135550098", DefaultUserServer), + NewJID("1220982902403148", BotServer): NewJID("13135550099", DefaultUserServer), + NewJID("1365893374104393", BotServer): NewJID("13135550100", DefaultUserServer), + NewJID("686482033622048", BotServer): NewJID("13135550200", DefaultUserServer), + NewJID("1454999838411253", BotServer): NewJID("13135550201", DefaultUserServer), + NewJID("718584497008509", BotServer): NewJID("13135550202", DefaultUserServer), + NewJID("743520384213443", BotServer): NewJID("13135550301", DefaultUserServer), + NewJID("1147715789823789", BotServer): NewJID("13135550302", DefaultUserServer), + NewJID("1173034540372201", BotServer): NewJID("13135550303", DefaultUserServer), + NewJID("974785541030953", BotServer): NewJID("13135550304", DefaultUserServer), + NewJID("1122200255531507", BotServer): NewJID("13135550305", DefaultUserServer), + NewJID("899669714813162", BotServer): NewJID("13135550306", DefaultUserServer), + NewJID("631880108970650", BotServer): NewJID("13135550307", DefaultUserServer), + NewJID("435816149330026", BotServer): NewJID("13135550308", DefaultUserServer), + NewJID("1368717161184556", BotServer): NewJID("13135550309", DefaultUserServer), + NewJID("7849963461784891", BotServer): NewJID("13135550310", DefaultUserServer), + NewJID("3609617065968984", BotServer): NewJID("13135550312", DefaultUserServer), + NewJID("356273980574602", BotServer): NewJID("13135550313", DefaultUserServer), + NewJID("1043447920539760", BotServer): NewJID("13135550314", DefaultUserServer), + NewJID("1052764336525346", BotServer): NewJID("13135550315", DefaultUserServer), + NewJID("2631118843732685", BotServer): NewJID("13135550316", DefaultUserServer), + NewJID("510505411332176", BotServer): NewJID("13135550317", DefaultUserServer), + NewJID("1945664239227513", BotServer): NewJID("13135550318", DefaultUserServer), + NewJID("1518594378764656", BotServer): NewJID("13135550319", DefaultUserServer), + NewJID("1378821579456138", BotServer): NewJID("13135550320", DefaultUserServer), + NewJID("490214716896013", BotServer): NewJID("13135550321", DefaultUserServer), + NewJID("1028577858870699", BotServer): NewJID("13135550322", DefaultUserServer), + NewJID("308915665545959", BotServer): NewJID("13135550323", DefaultUserServer), + NewJID("845884253678900", BotServer): NewJID("13135550324", DefaultUserServer), + NewJID("995031308616442", BotServer): NewJID("13135550325", DefaultUserServer), + NewJID("2787365464763437", BotServer): NewJID("13135550326", DefaultUserServer), + NewJID("1532790990671645", BotServer): NewJID("13135550327", DefaultUserServer), + NewJID("302617036180485", BotServer): NewJID("13135550328", DefaultUserServer), + NewJID("723376723197227", BotServer): NewJID("13135550329", DefaultUserServer), + NewJID("8393570407377966", BotServer): NewJID("13135550330", DefaultUserServer), + NewJID("1931159970680725", BotServer): NewJID("13135550331", DefaultUserServer), + NewJID("401073885688605", BotServer): NewJID("13135550332", DefaultUserServer), + NewJID("2234478453565422", BotServer): NewJID("13135550334", DefaultUserServer), + NewJID("814748673882312", BotServer): NewJID("13135550335", DefaultUserServer), + NewJID("26133635056281592", BotServer): NewJID("13135550336", DefaultUserServer), + NewJID("1439804456676119", BotServer): NewJID("13135550337", DefaultUserServer), + NewJID("889851503172161", BotServer): NewJID("13135550338", DefaultUserServer), + NewJID("1018283232836879", BotServer): NewJID("13135550339", DefaultUserServer), + NewJID("1012781386779537", BotServer): NewJID("13135559000", DefaultUserServer), + NewJID("823280953239532", BotServer): NewJID("13135559001", DefaultUserServer), + NewJID("1597090934573334", BotServer): NewJID("13135559002", DefaultUserServer), + NewJID("485965054020343", BotServer): NewJID("13135559003", DefaultUserServer), + NewJID("1033381648363446", BotServer): NewJID("13135559004", DefaultUserServer), + NewJID("491802010206446", BotServer): NewJID("13135559005", DefaultUserServer), + NewJID("1017139033184870", BotServer): NewJID("13135559006", DefaultUserServer), + NewJID("499638325922174", BotServer): NewJID("13135559008", DefaultUserServer), + NewJID("468946335863664", BotServer): NewJID("13135559009", DefaultUserServer), + NewJID("1570389776875816", BotServer): NewJID("13135559010", DefaultUserServer), + NewJID("1004342694328995", BotServer): NewJID("13135559011", DefaultUserServer), + NewJID("1012240323971229", BotServer): NewJID("13135559012", DefaultUserServer), + NewJID("392171787222419", BotServer): NewJID("13135559013", DefaultUserServer), + NewJID("952081212945019", BotServer): NewJID("13135559016", DefaultUserServer), + NewJID("444507875070178", BotServer): NewJID("13135559017", DefaultUserServer), + NewJID("1274819440594668", BotServer): NewJID("13135559018", DefaultUserServer), + NewJID("1397041101147050", BotServer): NewJID("13135559019", DefaultUserServer), + NewJID("425657699872640", BotServer): NewJID("13135559020", DefaultUserServer), + NewJID("532292852562549", BotServer): NewJID("13135559021", DefaultUserServer), + NewJID("705863241720292", BotServer): NewJID("13135559022", DefaultUserServer), + NewJID("476449815183959", BotServer): NewJID("13135559023", DefaultUserServer), + NewJID("488071553854222", BotServer): NewJID("13135559024", DefaultUserServer), + NewJID("468693832665397", BotServer): NewJID("13135559025", DefaultUserServer), + NewJID("517422564037340", BotServer): NewJID("13135559026", DefaultUserServer), + NewJID("819805466613825", BotServer): NewJID("13135559027", DefaultUserServer), + NewJID("1847708235641382", BotServer): NewJID("13135559028", DefaultUserServer), + NewJID("716282970644228", BotServer): NewJID("13135559029", DefaultUserServer), + NewJID("521655380527741", BotServer): NewJID("13135559030", DefaultUserServer), + NewJID("476193631941905", BotServer): NewJID("13135559031", DefaultUserServer), + NewJID("485600497445562", BotServer): NewJID("13135559032", DefaultUserServer), + NewJID("440217235683910", BotServer): NewJID("13135559033", DefaultUserServer), + NewJID("523342446758478", BotServer): NewJID("13135559034", DefaultUserServer), + NewJID("514784864360240", BotServer): NewJID("13135559035", DefaultUserServer), + NewJID("505790121814530", BotServer): NewJID("13135559036", DefaultUserServer), + NewJID("420008964419580", BotServer): NewJID("13135559037", DefaultUserServer), + NewJID("492141680204555", BotServer): NewJID("13135559038", DefaultUserServer), + NewJID("388462787271952", BotServer): NewJID("13135559039", DefaultUserServer), + NewJID("423473920752072", BotServer): NewJID("13135559040", DefaultUserServer), + NewJID("489574180468229", BotServer): NewJID("13135559041", DefaultUserServer), + NewJID("432360635854105", BotServer): NewJID("13135559042", DefaultUserServer), + NewJID("477878201669248", BotServer): NewJID("13135559043", DefaultUserServer), + NewJID("351656951234045", BotServer): NewJID("13135559044", DefaultUserServer), + NewJID("430178036732582", BotServer): NewJID("13135559045", DefaultUserServer), + NewJID("434537312944552", BotServer): NewJID("13135559046", DefaultUserServer), + NewJID("1240614300631808", BotServer): NewJID("13135559047", DefaultUserServer), + NewJID("473135945605128", BotServer): NewJID("13135559048", DefaultUserServer), + NewJID("423669800729310", BotServer): NewJID("13135559049", DefaultUserServer), + NewJID("3685666705015792", BotServer): NewJID("13135559050", DefaultUserServer), + NewJID("504196509016638", BotServer): NewJID("13135559051", DefaultUserServer), + NewJID("346844785189449", BotServer): NewJID("13135559052", DefaultUserServer), + NewJID("504823088911074", BotServer): NewJID("13135559053", DefaultUserServer), + NewJID("402669415797083", BotServer): NewJID("13135559054", DefaultUserServer), + NewJID("490939640234431", BotServer): NewJID("13135559055", DefaultUserServer), + NewJID("875124128063715", BotServer): NewJID("13135559056", DefaultUserServer), + NewJID("468788962654605", BotServer): NewJID("13135559057", DefaultUserServer), + NewJID("562386196354570", BotServer): NewJID("13135559058", DefaultUserServer), + NewJID("372159285928791", BotServer): NewJID("13135559059", DefaultUserServer), + NewJID("531017479591050", BotServer): NewJID("13135559060", DefaultUserServer), + NewJID("1328873881401826", BotServer): NewJID("13135559061", DefaultUserServer), + NewJID("1608363646390484", BotServer): NewJID("13135559062", DefaultUserServer), + NewJID("1229628561554232", BotServer): NewJID("13135559063", DefaultUserServer), + NewJID("348802211530364", BotServer): NewJID("13135559064", DefaultUserServer), + NewJID("3708535859420184", BotServer): NewJID("13135559065", DefaultUserServer), + NewJID("415517767742187", BotServer): NewJID("13135559066", DefaultUserServer), + NewJID("479330341612638", BotServer): NewJID("13135559067", DefaultUserServer), + NewJID("480785414723083", BotServer): NewJID("13135559068", DefaultUserServer), + NewJID("387299107507991", BotServer): NewJID("13135559069", DefaultUserServer), + NewJID("333389813188944", BotServer): NewJID("13135559070", DefaultUserServer), + NewJID("391794130316996", BotServer): NewJID("13135559071", DefaultUserServer), + NewJID("457893470576314", BotServer): NewJID("13135559072", DefaultUserServer), + NewJID("435550496166469", BotServer): NewJID("13135559073", DefaultUserServer), + NewJID("1620162702100689", BotServer): NewJID("13135559074", DefaultUserServer), + NewJID("867491058616043", BotServer): NewJID("13135559075", DefaultUserServer), + NewJID("816224117357759", BotServer): NewJID("13135559076", DefaultUserServer), + NewJID("334065176362830", BotServer): NewJID("13135559077", DefaultUserServer), + NewJID("489973170554709", BotServer): NewJID("13135559078", DefaultUserServer), + NewJID("473060669049665", BotServer): NewJID("13135559079", DefaultUserServer), + NewJID("1221505815643060", BotServer): NewJID("13135559080", DefaultUserServer), + NewJID("889000703096359", BotServer): NewJID("13135559081", DefaultUserServer), + NewJID("475235961979883", BotServer): NewJID("13135559082", DefaultUserServer), + NewJID("3434445653519934", BotServer): NewJID("13135559084", DefaultUserServer), + NewJID("524503026827421", BotServer): NewJID("13135559085", DefaultUserServer), + NewJID("1179639046403856", BotServer): NewJID("13135559086", DefaultUserServer), + NewJID("471563305859144", BotServer): NewJID("13135559087", DefaultUserServer), + NewJID("533896609192881", BotServer): NewJID("13135559088", DefaultUserServer), + NewJID("365443583168041", BotServer): NewJID("13135559089", DefaultUserServer), + NewJID("836082305329393", BotServer): NewJID("13135559090", DefaultUserServer), + NewJID("1056787705969916", BotServer): NewJID("13135559091", DefaultUserServer), + NewJID("503312598958357", BotServer): NewJID("13135559092", DefaultUserServer), + NewJID("3718606738453460", BotServer): NewJID("13135559093", DefaultUserServer), + NewJID("826066052850902", BotServer): NewJID("13135559094", DefaultUserServer), + NewJID("1033611345091888", BotServer): NewJID("13135559095", DefaultUserServer), + NewJID("3868390816783240", BotServer): NewJID("13135559096", DefaultUserServer), + NewJID("7462677740498860", BotServer): NewJID("13135559097", DefaultUserServer), + NewJID("436288576108573", BotServer): NewJID("13135559098", DefaultUserServer), + NewJID("1047559746718900", BotServer): NewJID("13135559099", DefaultUserServer), + NewJID("1099299455255491", BotServer): NewJID("13135559100", DefaultUserServer), + NewJID("1202037301040633", BotServer): NewJID("13135559101", DefaultUserServer), + NewJID("1720619402074074", BotServer): NewJID("13135559102", DefaultUserServer), + NewJID("1030422235101467", BotServer): NewJID("13135559103", DefaultUserServer), + NewJID("827238979523502", BotServer): NewJID("13135559104", DefaultUserServer), + NewJID("1516443722284921", BotServer): NewJID("13135559105", DefaultUserServer), + NewJID("1174442747196709", BotServer): NewJID("13135559106", DefaultUserServer), + NewJID("1653165225503842", BotServer): NewJID("13135559107", DefaultUserServer), + NewJID("1037648777635013", BotServer): NewJID("13135559108", DefaultUserServer), + NewJID("551617757299900", BotServer): NewJID("13135559109", DefaultUserServer), + NewJID("1158813558718726", BotServer): NewJID("13135559110", DefaultUserServer), + NewJID("2463236450542262", BotServer): NewJID("13135559111", DefaultUserServer), + NewJID("1550393252501466", BotServer): NewJID("13135559112", DefaultUserServer), + NewJID("2057065188042796", BotServer): NewJID("13135559113", DefaultUserServer), + NewJID("506163028760735", BotServer): NewJID("13135559114", DefaultUserServer), + NewJID("2065249100538481", BotServer): NewJID("13135559115", DefaultUserServer), + NewJID("1041382867195858", BotServer): NewJID("13135559116", DefaultUserServer), + NewJID("886500209499603", BotServer): NewJID("13135559117", DefaultUserServer), + NewJID("1491615624892655", BotServer): NewJID("13135559118", DefaultUserServer), + NewJID("486563697299617", BotServer): NewJID("13135559119", DefaultUserServer), + NewJID("1175736513679463", BotServer): NewJID("13135559120", DefaultUserServer), + NewJID("491811473512352", BotServer): NewJID("13165550064", DefaultUserServer), +} diff --git a/vendor/go.mau.fi/whatsmeow/types/call.go b/vendor/go.mau.fi/whatsmeow/types/call.go index cd69f24b80..6ec3cb8ed1 100644 --- a/vendor/go.mau.fi/whatsmeow/types/call.go +++ b/vendor/go.mau.fi/whatsmeow/types/call.go @@ -9,10 +9,12 @@ package types import "time" type BasicCallMeta struct { - From JID - Timestamp time.Time - CallCreator JID - CallID string + From JID + Timestamp time.Time + CallCreator JID + CallCreatorAlt JID + CallID string + GroupJID JID } type CallRemoteMeta struct { diff --git a/vendor/go.mau.fi/whatsmeow/types/events/appstate.go b/vendor/go.mau.fi/whatsmeow/types/events/appstate.go index 9cf5946099..a6082743b7 100644 --- a/vendor/go.mau.fi/whatsmeow/types/events/appstate.go +++ b/vendor/go.mau.fi/whatsmeow/types/events/appstate.go @@ -10,7 +10,7 @@ import ( "time" "go.mau.fi/whatsmeow/appstate" - waProto "go.mau.fi/whatsmeow/binary/proto" + "go.mau.fi/whatsmeow/proto/waSyncAction" "go.mau.fi/whatsmeow/types" ) @@ -19,13 +19,14 @@ type Contact struct { JID types.JID // The contact who was modified. Timestamp time.Time // The time when the modification happened.' - Action *waProto.ContactAction // The new contact info. - FromFullSync bool // Whether the action is emitted because of a fullSync + Action *waSyncAction.ContactAction // The new contact info. + FromFullSync bool // Whether the action is emitted because of a fullSync } // PushName is emitted when a message is received with a different push name than the previous value cached for the same user. type PushName struct { - JID types.JID // The user whose push name changed. + JID types.JID // The user whose push name changed. + JIDAlt types.JID Message *types.MessageInfo // The message where this change was first noticed. OldPushName string // The previous push name from the local cache. NewPushName string // The new push name that was included in the message. @@ -44,8 +45,8 @@ type Pin struct { JID types.JID // The chat which was pinned or unpinned. Timestamp time.Time // The time when the (un)pinning happened. - Action *waProto.PinAction // Whether the chat is now pinned or not. - FromFullSync bool // Whether the action is emitted because of a fullSync + Action *waSyncAction.PinAction // Whether the chat is now pinned or not. + FromFullSync bool // Whether the action is emitted because of a fullSync } // Star is emitted when a message is starred or unstarred from another device. @@ -56,8 +57,8 @@ type Star struct { MessageID string // The message which was starred or unstarred. Timestamp time.Time // The time when the (un)starring happened. - Action *waProto.StarAction // Whether the message is now starred or not. - FromFullSync bool // Whether the action is emitted because of a fullSync + Action *waSyncAction.StarAction // Whether the message is now starred or not. + FromFullSync bool // Whether the action is emitted because of a fullSync } // DeleteForMe is emitted when a message is deleted (for the current user only) from another device. @@ -68,8 +69,8 @@ type DeleteForMe struct { MessageID string // The message which was deleted. Timestamp time.Time // The time when the deletion happened. - Action *waProto.DeleteMessageForMeAction // Additional information for the deletion. - FromFullSync bool // Whether the action is emitted because of a fullSync + Action *waSyncAction.DeleteMessageForMeAction // Additional information for the deletion. + FromFullSync bool // Whether the action is emitted because of a fullSync } // Mute is emitted when a chat is muted or unmuted from another device. @@ -77,8 +78,8 @@ type Mute struct { JID types.JID // The chat which was muted or unmuted. Timestamp time.Time // The time when the (un)muting happened. - Action *waProto.MuteAction // The current mute status of the chat. - FromFullSync bool // Whether the action is emitted because of a fullSync + Action *waSyncAction.MuteAction // The current mute status of the chat. + FromFullSync bool // Whether the action is emitted because of a fullSync } // Archive is emitted when a chat is archived or unarchived from another device. @@ -86,8 +87,8 @@ type Archive struct { JID types.JID // The chat which was archived or unarchived. Timestamp time.Time // The time when the (un)archiving happened. - Action *waProto.ArchiveChatAction // The current archival status of the chat. - FromFullSync bool // Whether the action is emitted because of a fullSync + Action *waSyncAction.ArchiveChatAction // The current archival status of the chat. + FromFullSync bool // Whether the action is emitted because of a fullSync } // MarkChatAsRead is emitted when a whole chat is marked as read or unread from another device. @@ -95,8 +96,8 @@ type MarkChatAsRead struct { JID types.JID // The chat which was marked as read or unread. Timestamp time.Time // The time when the marking happened. - Action *waProto.MarkChatAsReadAction // Whether the chat was marked as read or unread, and info about the most recent messages. - FromFullSync bool // Whether the action is emitted because of a fullSync + Action *waSyncAction.MarkChatAsReadAction // Whether the chat was marked as read or unread, and info about the most recent messages. + FromFullSync bool // Whether the action is emitted because of a fullSync } // ClearChat is emitted when a chat is cleared on another device. This is different from DeleteChat. @@ -104,8 +105,9 @@ type ClearChat struct { JID types.JID // The chat which was cleared. Timestamp time.Time // The time when the clear happened. - Action *waProto.ClearChatAction // Information about the clear. - FromFullSync bool // Whether the action is emitted because of a fullSync + Action *waSyncAction.ClearChatAction // Information about the clear. + FromFullSync bool // Whether the action is emitted because of a fullSync + DeleteMedia bool } // DeleteChat is emitted when a chat is deleted on another device. @@ -113,24 +115,25 @@ type DeleteChat struct { JID types.JID // The chat which was deleted. Timestamp time.Time // The time when the deletion happened. - Action *waProto.DeleteChatAction // Information about the deletion. - FromFullSync bool // Whether the action is emitted because of a fullSync + Action *waSyncAction.DeleteChatAction // Information about the deletion. + FromFullSync bool // Whether the action is emitted because of a fullSync + DeleteMedia bool } // PushNameSetting is emitted when the user's push name is changed from another device. type PushNameSetting struct { Timestamp time.Time // The time when the push name was changed. - Action *waProto.PushNameSetting // The new push name for the user. - FromFullSync bool // Whether the action is emitted because of a fullSync + Action *waSyncAction.PushNameSetting // The new push name for the user. + FromFullSync bool // Whether the action is emitted because of a fullSync } // UnarchiveChatsSetting is emitted when the user changes the "Keep chats archived" setting from another device. type UnarchiveChatsSetting struct { Timestamp time.Time // The time when the setting was changed. - Action *waProto.UnarchiveChatsSetting // The new settings. - FromFullSync bool // Whether the action is emitted because of a fullSync + Action *waSyncAction.UnarchiveChatsSetting // The new settings. + FromFullSync bool // Whether the action is emitted because of a fullSync } // UserStatusMute is emitted when the user mutes or unmutes another user's status updates. @@ -138,8 +141,8 @@ type UserStatusMute struct { JID types.JID // The user who was muted or unmuted Timestamp time.Time // The timestamp when the action happened - Action *waProto.UserStatusMuteAction // The new mute status - FromFullSync bool // Whether the action is emitted because of a fullSync + Action *waSyncAction.UserStatusMuteAction // The new mute status + FromFullSync bool // Whether the action is emitted because of a fullSync } // LabelEdit is emitted when a label is edited from any device. @@ -147,8 +150,8 @@ type LabelEdit struct { Timestamp time.Time // The time when the label was edited. LabelID string // The label id which was edited. - Action *waProto.LabelEditAction // The new label info. - FromFullSync bool // Whether the action is emitted because of a fullSync + Action *waSyncAction.LabelEditAction // The new label info. + FromFullSync bool // Whether the action is emitted because of a fullSync } // LabelAssociationChat is emitted when a chat is labeled or unlabeled from any device. @@ -157,8 +160,8 @@ type LabelAssociationChat struct { Timestamp time.Time // The time when the (un)labeling happened. LabelID string // The label id which was added or removed. - Action *waProto.LabelAssociationAction // The current label status of the chat. - FromFullSync bool // Whether the action is emitted because of a fullSync + Action *waSyncAction.LabelAssociationAction // The current label status of the chat. + FromFullSync bool // Whether the action is emitted because of a fullSync } // LabelAssociationMessage is emitted when a message is labeled or unlabeled from any device. @@ -168,18 +171,26 @@ type LabelAssociationMessage struct { LabelID string // The label id which was added or removed. MessageID string // The message id which was labeled or unlabeled. - Action *waProto.LabelAssociationAction // The current label status of the message. - FromFullSync bool // Whether the action is emitted because of a fullSync + Action *waSyncAction.LabelAssociationAction // The current label status of the message. + FromFullSync bool // Whether the action is emitted because of a fullSync } // AppState is emitted directly for new data received from app state syncing. // You should generally use the higher-level events like events.Contact and events.Mute. type AppState struct { Index []string - *waProto.SyncActionValue + *waSyncAction.SyncActionValue } // AppStateSyncComplete is emitted when app state is resynced. type AppStateSyncComplete struct { - Name appstate.WAPatchName + Name appstate.WAPatchName + Version uint64 + Recovery bool +} + +type AppStateSyncError struct { + Name appstate.WAPatchName + Error error + FullSync bool } diff --git a/vendor/go.mau.fi/whatsmeow/types/events/call.go b/vendor/go.mau.fi/whatsmeow/types/events/call.go index 8ced457cb3..c1cf2b2c30 100644 --- a/vendor/go.mau.fi/whatsmeow/types/events/call.go +++ b/vendor/go.mau.fi/whatsmeow/types/events/call.go @@ -65,6 +65,12 @@ type CallTerminate struct { Data *waBinary.Node } +// CallReject is sent when the other party rejects the call on WhatsApp. +type CallReject struct { + types.BasicCallMeta + Data *waBinary.Node +} + // UnknownCallEvent is emitted when a call element with unknown content is received. type UnknownCallEvent struct { Node *waBinary.Node diff --git a/vendor/go.mau.fi/whatsmeow/types/events/events.go b/vendor/go.mau.fi/whatsmeow/types/events/events.go index 6ab6c202fa..0420560250 100644 --- a/vendor/go.mau.fi/whatsmeow/types/events/events.go +++ b/vendor/go.mau.fi/whatsmeow/types/events/events.go @@ -13,12 +13,15 @@ import ( "time" waBinary "go.mau.fi/whatsmeow/binary" - waProto "go.mau.fi/whatsmeow/binary/proto" armadillo "go.mau.fi/whatsmeow/proto" + "go.mau.fi/whatsmeow/proto/instamadilloTransportPayload" "go.mau.fi/whatsmeow/proto/waArmadilloApplication" "go.mau.fi/whatsmeow/proto/waConsumerApplication" + "go.mau.fi/whatsmeow/proto/waE2E" + "go.mau.fi/whatsmeow/proto/waHistorySync" "go.mau.fi/whatsmeow/proto/waMsgApplication" "go.mau.fi/whatsmeow/proto/waMsgTransport" + "go.mau.fi/whatsmeow/proto/waWeb" "go.mau.fi/whatsmeow/types" ) @@ -40,6 +43,7 @@ type QR struct { // wait for the Connected before trying to send anything. type PairSuccess struct { ID types.JID + LID types.JID BusinessName string Platform string } @@ -47,6 +51,7 @@ type PairSuccess struct { // PairError is emitted when a pair-success event is received from the server, but finishing the pairing locally fails. type PairError struct { ID types.JID + LID types.JID BusinessName string Platform string Error error @@ -87,6 +92,7 @@ func (*CATRefreshError) PermanentDisconnectDescription() string { return "CAT re func (tb *TemporaryBan) PermanentDisconnectDescription() string { return fmt.Sprintf("temporarily banned: %s", tb.String()) } + func (cf *ConnectFailure) PermanentDisconnectDescription() string { return fmt.Sprintf("connect failure: %s", cf.Reason.String()) } @@ -110,6 +116,9 @@ type LoggedOut struct { // or otherwise try to connect twice with the same session. type StreamReplaced struct{} +// ManualLoginReconnect is emitted after login if DisableLoginAutoReconnect is set. +type ManualLoginReconnect struct{} + // TempBanReason is an error code included in temp ban error events. type TempBanReason int @@ -168,6 +177,9 @@ const ( ConnectFailureCATInvalid ConnectFailureReason = 414 ConnectFailureNotFound ConnectFailureReason = 415 + // Status code unknown (not in WA web) + ConnectFailureClientUnknown ConnectFailureReason = 418 + ConnectFailureInternalServerError ConnectFailureReason = 500 ConnectFailureExperimental ConnectFailureReason = 501 ConnectFailureServiceUnavailable ConnectFailureReason = 503 @@ -231,7 +243,7 @@ type Disconnected struct{} // HistorySync is emitted when the phone has sent a blob of historical messages. type HistorySync struct { - Data *waProto.HistorySync + Data *waHistorySync.HistorySync } type DecryptFailMode string @@ -241,6 +253,13 @@ const ( DecryptFailHide DecryptFailMode = "hide" ) +type UnavailableType string + +const ( + UnavailableTypeUnknown UnavailableType = "" + UnavailableTypeViewOnce UnavailableType = "view_once" +) + // UndecryptableMessage is emitted when receiving a new message that failed to decrypt. // // The library will automatically ask the sender to retry. If the sender resends the message, @@ -253,6 +272,8 @@ type UndecryptableMessage struct { // IsUnavailable is true if the recipient device didn't send a ciphertext to this device at all // (as opposed to sending a ciphertext, but the ciphertext not being decryptable). IsUnavailable bool + // Some message types are intentionally unavailable. Such types usually have a type specified here. + UnavailableType UnavailableType DecryptFailMode DecryptFailMode } @@ -268,7 +289,7 @@ type NewsletterMessageMeta struct { // Message is emitted when receiving a new message. type Message struct { Info types.MessageInfo // Information about the message like the chat and sender IDs - Message *waProto.Message // The actual message struct + Message *waE2E.Message // The actual message struct IsEphemeral bool // True if the message was unwrapped from an EphemeralMessage IsViewOnce bool // True if the message was unwrapped from a ViewOnceMessage, ViewOnceMessageV2 or ViewOnceMessageV2Extension @@ -276,10 +297,11 @@ type Message struct { IsViewOnceV2Extension bool // True if the message was unwrapped from a ViewOnceMessageV2Extension IsDocumentWithCaption bool // True if the message was unwrapped from a DocumentWithCaptionMessage IsLottieSticker bool // True if the message was unwrapped from a LottieStickerMessage + IsBotInvoke bool // True if the message was unwrapped from a BotInvokeMessage IsEdit bool // True if the message was unwrapped from an EditedMessage // If this event was parsed from a WebMessageInfo (i.e. from a history sync or unavailable message request), the source data is here. - SourceWebMsg *waProto.WebMessageInfo + SourceWebMsg *waWeb.WebMessageInfo // If this event is a response to an unavailable message request, the request ID is here. UnavailableRequestID types.MessageID // If the message was re-requested from the sender, this is the number of retries it took. @@ -289,7 +311,7 @@ type Message struct { // The raw message struct. This is the raw unmodified data, which means the actual message might // be wrapped in DeviceSentMessage, EphemeralMessage or ViewOnceMessage. - RawMessage *waProto.Message + RawMessage *waE2E.Message } type FBMessage struct { @@ -299,8 +321,10 @@ type FBMessage struct { // If the message was re-requested from the sender, this is the number of retries it took. RetryCount int - Transport *waMsgTransport.MessageTransport // The first level of wrapping the message was in - Application *waMsgApplication.MessageApplication // The second level of wrapping the message was in + Transport *waMsgTransport.MessageTransport // The first level of wrapping the message was in + + FBApplication *waMsgApplication.MessageApplication // The second level of wrapping the message was in, for FB messages + IGTransport *instamadilloTransportPayload.TransportPayload // The second level of wrapping the message was in, for IG messages } func (evt *FBMessage) GetConsumerApplication() *waConsumerApplication.ConsumerApplication { @@ -327,6 +351,10 @@ func (evt *Message) UnwrapRaw() *Message { } evt.Message = evt.Message.GetDeviceSentMessage().GetMessage() } + if evt.Message.GetBotInvokeMessage().GetMessage() != nil { + evt.Message = evt.Message.GetBotInvokeMessage().GetMessage() + evt.IsBotInvoke = true + } if evt.Message.GetEphemeralMessage().GetMessage() != nil { evt.Message = evt.Message.GetEphemeralMessage().GetMessage() evt.IsEphemeral = true @@ -358,6 +386,9 @@ func (evt *Message) UnwrapRaw() *Message { evt.Message = evt.Message.GetEditedMessage().GetMessage() evt.IsEdit = true } + if evt.Message != nil && evt.RawMessage != nil && evt.Message.MessageContextInfo == nil && evt.RawMessage.MessageContextInfo != nil { + evt.Message.MessageContextInfo = evt.RawMessage.MessageContextInfo + } return evt } @@ -382,6 +413,10 @@ type Receipt struct { MessageIDs []types.MessageID Timestamp time.Time Type types.ReceiptType + + // When you read the message of another user in a group, this field contains the sender of the message. + // For receipts from other users, the message sender is always you. + MessageSender types.JID } // ChatPresence is emitted when a chat state update (also known as typing notification) is received. @@ -414,6 +449,11 @@ type JoinedGroup struct { Reason string // If the event was triggered by you using an invite link, this will be "invite". Type string // "new" if it's a newly created group. CreateKey types.MessageID // If you created the group, this is the same message ID you passed to CreateGroup. + // For type new, the user who created the group and added you to it + Sender *types.JID + SenderPN *types.JID + Notify string + types.GroupInfo } @@ -422,6 +462,7 @@ type GroupInfo struct { JID types.JID // The group ID in question Notify string // Seems like a top-level type for the invite Sender *types.JID // The user who made the change. Doesn't seem to be present when notify=invite + SenderPN *types.JID // The phone number of the user who made the change, if Sender is a LID. Timestamp time.Time // The time when the change occurred Name *types.GroupName // Group name change @@ -430,6 +471,8 @@ type GroupInfo struct { Announce *types.GroupAnnounce // Group announce status change (can only admins send messages?) Ephemeral *types.GroupEphemeral // Disappearing messages change + MembershipApprovalMode *types.GroupMembershipApprovalMode // Membership approval mode change + Delete *types.GroupDelete Link *types.GroupLinkChange @@ -445,9 +488,10 @@ type GroupInfo struct { Join []types.JID // Users who joined or were added the group Leave []types.JID // Users who left or were removed from the group - Promote []types.JID // Users who were promoted to admins - Demote []types.JID // Users who were demoted to normal users - + Promote []types.JID // Users who were promoted to admins + Demote []types.JID // Users who were demoted to normal users + Suspended bool // whether the group is suspended + Unsuspended bool // whether the group is unsuspended UnknownChanges []*waBinary.Node } @@ -462,6 +506,13 @@ type Picture struct { PictureID string // The new picture ID if it was not removed. } +// UserAbout is emitted when a user's about status is changed. +type UserAbout struct { + JID types.JID // The user whose status was changed + Status string // The new status + Timestamp time.Time // The timestamp when the status was changed. +} + // IdentityChange is emitted when another user changes their primary device. type IdentityChange struct { JID types.JID @@ -482,6 +533,9 @@ type PrivacySettings struct { ReadReceiptsChanged bool OnlineChanged bool CallAddChanged bool + MessagesChanged bool + DefenseChanged bool + StickersChanged bool } // OfflineSyncPreview is emitted right after connecting if the server is going to send events that the client missed during downtime. diff --git a/vendor/go.mau.fi/whatsmeow/types/group.go b/vendor/go.mau.fi/whatsmeow/types/group.go index 9fd9767529..7de8df6af6 100644 --- a/vendor/go.mau.fi/whatsmeow/types/group.go +++ b/vendor/go.mau.fi/whatsmeow/types/group.go @@ -13,13 +13,15 @@ import ( type GroupMemberAddMode string const ( - GroupMemberAddModeAdmin GroupMemberAddMode = "admin_add" + GroupMemberAddModeAdmin GroupMemberAddMode = "admin_add" + GroupMemberAddModeAllMember GroupMemberAddMode = "all_member_add" ) // GroupInfo contains basic information about a group chat on WhatsApp. type GroupInfo struct { JID JID OwnerJID JID + OwnerPN JID GroupName GroupTopic @@ -31,13 +33,24 @@ type GroupInfo struct { GroupParent GroupLinkedParent GroupIsDefaultSub + GroupMembershipApprovalMode - GroupCreated time.Time + AddressingMode AddressingMode + GroupCreated time.Time + CreatorCountryCode string ParticipantVersionID string Participants []GroupParticipant + ParticipantCount int MemberAddMode GroupMemberAddMode + + // Suspended indicates whether the group is currently paused/suspended. + Suspended bool +} + +type GroupMembershipApprovalMode struct { + IsJoinApprovalRequired bool } type GroupParent struct { @@ -55,9 +68,10 @@ type GroupIsDefaultSub struct { // GroupName contains the name of a group along with metadata of who set it and when. type GroupName struct { - Name string - NameSetAt time.Time - NameSetBy JID + Name string + NameSetAt time.Time + NameSetBy JID + NameSetByPN JID } // GroupTopic contains the topic (description) of a group along with metadata of who set it and when. @@ -66,6 +80,7 @@ type GroupTopic struct { TopicID string TopicSetAt time.Time TopicSetBy JID + TopicSetByPN JID TopicDeleted bool } @@ -86,8 +101,12 @@ type GroupIncognito struct { // GroupParticipant contains info about a participant of a WhatsApp group chat. type GroupParticipant struct { - JID JID - LID JID + // The primary JID that should be used to send messages to this participant. + // Always equals either the LID or phone number. + JID JID + PhoneNumber JID + LID JID + IsAdmin bool IsSuperAdmin bool @@ -142,3 +161,8 @@ type GroupLinkChange struct { UnlinkReason GroupUnlinkReason Group GroupLinkTarget } + +type GroupParticipantRequest struct { + JID JID + RequestedAt time.Time +} diff --git a/vendor/go.mau.fi/whatsmeow/types/jid.go b/vendor/go.mau.fi/whatsmeow/types/jid.go index d4d22fbdc3..a0048f74f9 100644 --- a/vendor/go.mau.fi/whatsmeow/types/jid.go +++ b/vendor/go.mau.fi/whatsmeow/types/jid.go @@ -29,6 +29,8 @@ const ( InteropServer = "interop" NewsletterServer = "newsletter" HostedServer = "hosted" + HostedLIDServer = "hosted.lid" + BotServer = "bot" ) // Some JIDs that are contacted often. @@ -38,9 +40,18 @@ var ( ServerJID = NewJID("", DefaultUserServer) BroadcastServerJID = NewJID("", BroadcastServer) StatusBroadcastJID = NewJID("status", BroadcastServer) - PSAJID = NewJID("0", LegacyUserServer) + LegacyPSAJID = NewJID("0", LegacyUserServer) + PSAJID = NewJID("0", DefaultUserServer) OfficialBusinessJID = NewJID("16505361212", LegacyUserServer) MetaAIJID = NewJID("13135550002", DefaultUserServer) + NewMetaAIJID = NewJID("867051314767696", BotServer) +) + +var ( + WhatsAppDomain = uint8(0) // This is the main domain type that whatsapp uses + LIDDomain = uint8(1) // This is the domain for LID type JIDs + HostedDomain = uint8(128) // This is the domain for Hosted type JIDs + HostedLIDDomain = uint8(129) // This is the domain for Hosted LID type JIDs ) // MessageID is the internal ID of a WhatsApp message. @@ -65,9 +76,13 @@ type JID struct { func (jid JID) ActualAgent() uint8 { switch jid.Server { case DefaultUserServer: - return 0 + return WhatsAppDomain case HiddenUserServer: - return 1 + return LIDDomain + case HostedServer: + return HostedDomain + case HostedLIDServer: + return HostedLIDDomain default: return jid.RawAgent } @@ -90,18 +105,16 @@ func (jid JID) ToNonAD() JID { // SignalAddress returns the Signal protocol address for the user. func (jid JID) SignalAddress() *signalProtocol.SignalAddress { + return signalProtocol.NewSignalAddress(jid.SignalAddressUser(), uint32(jid.Device)) +} + +func (jid JID) SignalAddressUser() string { user := jid.User agent := jid.ActualAgent() if agent != 0 { user = fmt.Sprintf("%s_%d", jid.User, agent) } - return signalProtocol.NewSignalAddress(user, uint32(jid.Device)) - // TODO use @lid suffix instead of agent? - //suffix := "" - //if jid.Server == HiddenUserServer { - // suffix = "@lid" - //} - //return signalProtocol.NewSignalAddress(user, uint32(jid.Device), suffix) + return user } // IsBroadcastList returns true if the JID is a broadcast list, but not the status broadcast. @@ -112,23 +125,26 @@ func (jid JID) IsBroadcastList() bool { var botUserRegex = regexp.MustCompile(`^1313555\d{4}$|^131655500\d{2}$`) func (jid JID) IsBot() bool { - return jid.Server == DefaultUserServer && botUserRegex.MatchString(jid.User) && jid.Device == 0 + return (jid.Server == DefaultUserServer && botUserRegex.MatchString(jid.User) && jid.Device == 0) || jid.Server == BotServer } // NewADJID creates a new AD JID. func NewADJID(user string, agent, device uint8) JID { var server string + // agent terminology isn't 100% correct here, these are the domainType, but whatsapp usually places them in the same place (if the switch case below doesn't process it, then it is an agent instead) switch agent { - case 0: - server = DefaultUserServer - case 1: + case LIDDomain: server = HiddenUserServer agent = 0 - default: - if (agent&0x01) != 0 || (agent&0x80) == 0 { // agent % 2 == 0 || agent < 128? - // TODO invalid JID? - } + case HostedDomain: server = HostedServer + agent = 0 + case HostedLIDDomain: + server = HostedLIDServer + agent = 0 + default: + case WhatsAppDomain: + server = DefaultUserServer // will just default to the normal server } return JID{ User: user, diff --git a/vendor/go.mau.fi/whatsmeow/types/message.go b/vendor/go.mau.fi/whatsmeow/types/message.go index ff13f79c7a..a1e5b7d421 100644 --- a/vendor/go.mau.fi/whatsmeow/types/message.go +++ b/vendor/go.mau.fi/whatsmeow/types/message.go @@ -11,6 +11,18 @@ import ( "time" ) +type AddressingMode string + +const ( + AddressingModePN AddressingMode = "pn" + AddressingModeLID AddressingMode = "lid" +) + +type BroadcastRecipient struct { + LID JID + PN JID +} + // MessageSource contains basic sender and chat information about a message. type MessageSource struct { Chat JID // The chat where the message was sent. @@ -18,9 +30,14 @@ type MessageSource struct { IsFromMe bool // Whether the message was sent by the current user instead of someone else. IsGroup bool // Whether the chat is a group chat or broadcast list. + AddressingMode AddressingMode // The addressing mode of the message (phone number or LID) + SenderAlt JID // The alternative address of the user who sent the message + RecipientAlt JID // The alternative address of the recipient of the message for DMs. + // When sending a read receipt to a broadcast list message, the Chat is the broadcast list // and Sender is you, so this field contains the recipient of the read receipt. - BroadcastListOwner JID + BroadcastListOwner JID + BroadcastRecipients []BroadcastRecipient } // IsIncomingBroadcast returns true if the message was sent to a broadcast list instead of directly to the user. @@ -64,8 +81,15 @@ type MsgBotInfo struct { // MsgMetaInfo targets type MsgMetaInfo struct { + // Bot things TargetID MessageID TargetSender JID + TargetChat JID + + DeprecatedLIDSession *bool + + ThreadMessageID MessageID + ThreadMessageSenderJID JID } // MessageInfo contains metadata about an incoming message. diff --git a/vendor/go.mau.fi/whatsmeow/types/newsletter.go b/vendor/go.mau.fi/whatsmeow/types/newsletter.go index 511216c4f8..6f63ecf2f8 100644 --- a/vendor/go.mau.fi/whatsmeow/types/newsletter.go +++ b/vendor/go.mau.fi/whatsmeow/types/newsletter.go @@ -10,10 +10,11 @@ import ( "bytes" "encoding/json" "fmt" + "time" "go.mau.fi/util/jsontime" - waProto "go.mau.fi/whatsmeow/binary/proto" + "go.mau.fi/whatsmeow/proto/waE2E" ) type NewsletterVerificationState string @@ -148,11 +149,14 @@ type NewsletterText struct { type NewsletterMessage struct { MessageServerID MessageServerID + MessageID MessageID + Type string + Timestamp time.Time ViewsCount int ReactionCounts map[string]int // This is only present when fetching messages, not in live updates - Message *waProto.Message + Message *waE2E.Message } type GraphQLErrorExtensions struct { diff --git a/vendor/go.mau.fi/whatsmeow/types/user.go b/vendor/go.mau.fi/whatsmeow/types/user.go index 81ef8bde5b..076e77840a 100644 --- a/vendor/go.mau.fi/whatsmeow/types/user.go +++ b/vendor/go.mau.fi/whatsmeow/types/user.go @@ -9,13 +9,13 @@ package types import ( "time" - waProto "go.mau.fi/whatsmeow/binary/proto" + "go.mau.fi/whatsmeow/proto/waVnameCert" ) // VerifiedName contains verified WhatsApp business details. type VerifiedName struct { - Certificate *waProto.VerifiedNameCertificate - Details *waProto.VerifiedNameCertificate_Details + Certificate *waVnameCert.VerifiedNameCertificate + Details *waVnameCert.VerifiedNameCertificate_Details } // UserInfo contains info about a WhatsApp user. @@ -24,6 +24,7 @@ type UserInfo struct { Status string PictureID string Devices []JID + LID JID } type BotListInfo struct { @@ -56,6 +57,8 @@ type ProfilePictureInfo struct { Type string `json:"type"` // The type of image. Known types include "image" (full res) and "preview" (thumbnail). DirectPath string `json:"direct_path"` // The path to the image, probably not very useful + + Hash []byte `json:"hash"` // Some kind of hash (format is unknown) } // ContactInfo contains the cached names of a WhatsApp user. @@ -66,6 +69,8 @@ type ContactInfo struct { FullName string PushName string BusinessName string + // Only for LID members encountered in groups, the phone number in the form "+1∙∙∙∙∙∙∙∙80" + RedactedPhone string } // LocalChatSettings contains the cached local settings for a chat. @@ -113,10 +118,13 @@ const ( PrivacySettingUndefined PrivacySetting = "" PrivacySettingAll PrivacySetting = "all" PrivacySettingContacts PrivacySetting = "contacts" + PrivacySettingContactAllowlist PrivacySetting = "contact_allowlist" PrivacySettingContactBlacklist PrivacySetting = "contact_blacklist" PrivacySettingMatchLastSeen PrivacySetting = "match_last_seen" PrivacySettingKnown PrivacySetting = "known" PrivacySettingNone PrivacySetting = "none" + PrivacySettingOnStandard PrivacySetting = "on_standard" + PrivacySettingOff PrivacySetting = "off" ) // PrivacySettingType is the type of privacy setting. @@ -130,6 +138,9 @@ const ( PrivacySettingTypeReadReceipts PrivacySettingType = "readreceipts" // Valid values: PrivacySettingAll, PrivacySettingNone PrivacySettingTypeOnline PrivacySettingType = "online" // Valid values: PrivacySettingAll, PrivacySettingMatchLastSeen PrivacySettingTypeCallAdd PrivacySettingType = "calladd" // Valid values: PrivacySettingAll, PrivacySettingKnown + PrivacySettingTypeMessages PrivacySettingType = "messages" // Valid values: PrivacySettingAll, PrivacySettingContacts + PrivacySettingTypeDefense PrivacySettingType = "defense" // Valid values: PrivacySettingOnStandard, PrivacySettingOff + PrivacySettingTypeStickers PrivacySettingType = "stickers" // Valid values: PrivacySettingContacts, PrivacySettingContactAllowlist, PrivacySettingNone ) // PrivacySettings contains the user's privacy settings. @@ -141,6 +152,9 @@ type PrivacySettings struct { ReadReceipts PrivacySetting // Valid values: PrivacySettingAll, PrivacySettingNone CallAdd PrivacySetting // Valid values: PrivacySettingAll, PrivacySettingKnown Online PrivacySetting // Valid values: PrivacySettingAll, PrivacySettingMatchLastSeen + Messages PrivacySetting // Valid values: PrivacySettingAll, PrivacySettingContacts + Defense PrivacySetting // Valid values: PrivacySettingOnStandard, PrivacySettingOff + Stickers PrivacySetting // Valid values: PrivacySettingContacts, PrivacySettingContactAllowlist, PrivacySettingNone } // StatusPrivacyType is the type of list in StatusPrivacy. diff --git a/vendor/go.mau.fi/whatsmeow/update.go b/vendor/go.mau.fi/whatsmeow/update.go index 21066b7255..f8c04886a3 100644 --- a/vendor/go.mau.fi/whatsmeow/update.go +++ b/vendor/go.mau.fi/whatsmeow/update.go @@ -7,6 +7,7 @@ package whatsmeow import ( + "context" "fmt" "io" "net/http" @@ -28,12 +29,12 @@ var clientVersionRegex = regexp.MustCompile(`"client_revision":(\d+),`) // return err // } // store.SetWAVersion(*latestVer) -func GetLatestVersion(httpClient *http.Client) (*store.WAVersionContainer, error) { - req, err := http.NewRequest(http.MethodGet, socket.Origin, nil) +func GetLatestVersion(ctx context.Context, httpClient *http.Client) (*store.WAVersionContainer, error) { + req, err := http.NewRequestWithContext(ctx, http.MethodGet, socket.Origin, nil) if err != nil { return nil, fmt.Errorf("failed to prepare request: %w", err) } - req.Header.Set("User-Agent", "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36") + req.Header.Set("User-Agent", "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/143.0.0.0 Safari/537.36") req.Header.Set("Sec-Fetch-Dest", "document") req.Header.Set("Sec-Fetch-Mode", "navigate") req.Header.Set("Sec-Fetch-Site", "none") diff --git a/vendor/go.mau.fi/whatsmeow/upload.go b/vendor/go.mau.fi/whatsmeow/upload.go index a0d8bc37ec..0f0845d62c 100644 --- a/vendor/go.mau.fi/whatsmeow/upload.go +++ b/vendor/go.mau.fi/whatsmeow/upload.go @@ -89,7 +89,7 @@ func (cli *Client) Upload(ctx context.Context, plaintext []byte, appInfo MediaTy dataHash := sha256.Sum256(dataToUpload) resp.FileEncSHA256 = dataHash[:] - err = cli.rawUpload(ctx, bytes.NewReader(dataToUpload), resp.FileEncSHA256, appInfo, false, &resp) + err = cli.rawUpload(ctx, bytes.NewReader(dataToUpload), uint64(len(dataToUpload)), resp.FileEncSHA256, appInfo, false, &resp) return } @@ -98,6 +98,8 @@ func (cli *Client) Upload(ctx context.Context, plaintext []byte, appInfo MediaTy // This is otherwise identical to [Upload], but it reads the plaintext from an [io.Reader] instead of a byte slice. // A temporary file is required for the encryption process. If tempFile is nil, a temporary file will be created // and deleted after the upload. +// +// To use only one file, pass the same file as both plaintext and tempFile. This will cause the file to be overwritten with encrypted data. func (cli *Client) UploadReader(ctx context.Context, plaintext io.Reader, tempFile io.ReadWriteSeeker, appInfo MediaType) (resp UploadResponse, err error) { resp.MediaKey = random.Bytes(32) iv, cipherKey, macKey, _ := getMediaKeys(resp.MediaKey, appInfo) @@ -113,7 +115,8 @@ func (cli *Client) UploadReader(ctx context.Context, plaintext io.Reader, tempFi _ = os.Remove(tempFileFile.Name()) }() } - resp.FileSHA256, resp.FileEncSHA256, resp.FileLength, err = cbcutil.EncryptStream(cipherKey, iv, macKey, plaintext, tempFile) + var uploadSize uint64 + resp.FileSHA256, resp.FileEncSHA256, resp.FileLength, uploadSize, err = cbcutil.EncryptStream(cipherKey, iv, macKey, plaintext, tempFile) if err != nil { err = fmt.Errorf("failed to encrypt file: %w", err) return @@ -123,7 +126,7 @@ func (cli *Client) UploadReader(ctx context.Context, plaintext io.Reader, tempFi err = fmt.Errorf("failed to seek to start of temporary file: %w", err) return } - err = cli.rawUpload(ctx, tempFile, resp.FileEncSHA256, appInfo, false, &resp) + err = cli.rawUpload(ctx, tempFile, uploadSize, resp.FileEncSHA256, appInfo, false, &resp) return } @@ -161,7 +164,7 @@ func (cli *Client) UploadNewsletter(ctx context.Context, data []byte, appInfo Me resp.FileLength = uint64(len(data)) hash := sha256.Sum256(data) resp.FileSHA256 = hash[:] - err = cli.rawUpload(ctx, bytes.NewReader(data), resp.FileSHA256, appInfo, true, &resp) + err = cli.rawUpload(ctx, bytes.NewReader(data), resp.FileLength, resp.FileSHA256, appInfo, true, &resp) return } @@ -181,12 +184,12 @@ func (cli *Client) UploadNewsletterReader(ctx context.Context, data io.ReadSeeke err = fmt.Errorf("failed to seek to start of data: %w", err) return } - err = cli.rawUpload(ctx, data, resp.FileSHA256, appInfo, true, &resp) + err = cli.rawUpload(ctx, data, resp.FileLength, resp.FileSHA256, appInfo, true, &resp) return } -func (cli *Client) rawUpload(ctx context.Context, dataToUpload io.Reader, fileHash []byte, appInfo MediaType, newsletter bool, resp *UploadResponse) error { - mediaConn, err := cli.refreshMediaConn(false) +func (cli *Client) rawUpload(ctx context.Context, dataToUpload io.Reader, uploadSize uint64, fileHash []byte, appInfo MediaType, newsletter bool, resp *UploadResponse) error { + mediaConn, err := cli.refreshMediaConn(ctx, false) if err != nil { return fmt.Errorf("failed to refresh media connections: %w", err) } @@ -229,10 +232,11 @@ func (cli *Client) rawUpload(ctx context.Context, dataToUpload io.Reader, fileHa return fmt.Errorf("failed to prepare request: %w", err) } + req.ContentLength = int64(uploadSize) req.Header.Set("Origin", socket.Origin) req.Header.Set("Referer", socket.Origin+"/") - httpResp, err := cli.http.Do(req) + httpResp, err := cli.mediaHTTP.Do(req) if err != nil { err = fmt.Errorf("failed to execute request: %w", err) } else if httpResp.StatusCode != http.StatusOK { diff --git a/vendor/go.mau.fi/whatsmeow/user.go b/vendor/go.mau.fi/whatsmeow/user.go index 58fb6328b9..deda52bf0f 100644 --- a/vendor/go.mau.fi/whatsmeow/user.go +++ b/vendor/go.mau.fi/whatsmeow/user.go @@ -8,34 +8,40 @@ package whatsmeow import ( "context" + "encoding/base64" "errors" "fmt" + "slices" "strings" "google.golang.org/protobuf/proto" waBinary "go.mau.fi/whatsmeow/binary" - waProto "go.mau.fi/whatsmeow/binary/proto" + "go.mau.fi/whatsmeow/proto/waHistorySync" + "go.mau.fi/whatsmeow/proto/waVnameCert" + "go.mau.fi/whatsmeow/store" "go.mau.fi/whatsmeow/types" "go.mau.fi/whatsmeow/types/events" ) -const BusinessMessageLinkPrefix = "https://wa.me/message/" -const ContactQRLinkPrefix = "https://wa.me/qr/" -const BusinessMessageLinkDirectPrefix = "https://api.whatsapp.com/message/" -const ContactQRLinkDirectPrefix = "https://api.whatsapp.com/qr/" -const NewsletterLinkPrefix = "https://whatsapp.com/channel/" +const ( + BusinessMessageLinkPrefix = "https://wa.me/message/" + ContactQRLinkPrefix = "https://wa.me/qr/" + BusinessMessageLinkDirectPrefix = "https://api.whatsapp.com/message/" + ContactQRLinkDirectPrefix = "https://api.whatsapp.com/qr/" + NewsletterLinkPrefix = "https://whatsapp.com/channel/" +) // ResolveBusinessMessageLink resolves a business message short link and returns the target JID, business name and // text to prefill in the input field (if any). // // The links look like https://wa.me/message/ or https://api.whatsapp.com/message/. You can either provide // the full link, or just the part. -func (cli *Client) ResolveBusinessMessageLink(code string) (*types.BusinessMessageLinkTarget, error) { +func (cli *Client) ResolveBusinessMessageLink(ctx context.Context, code string) (*types.BusinessMessageLinkTarget, error) { code = strings.TrimPrefix(code, BusinessMessageLinkPrefix) code = strings.TrimPrefix(code, BusinessMessageLinkDirectPrefix) - resp, err := cli.sendIQ(infoQuery{ + resp, err := cli.sendIQ(ctx, infoQuery{ Namespace: "w:qr", Type: iqGet, // WhatsApp android doesn't seem to have a "to" field for this one at all, not sure why but it works @@ -78,11 +84,11 @@ func (cli *Client) ResolveBusinessMessageLink(code string) (*types.BusinessMessa // // The links look like https://wa.me/qr/ or https://api.whatsapp.com/qr/. You can either provide // the full link, or just the part. -func (cli *Client) ResolveContactQRLink(code string) (*types.ContactQRLinkTarget, error) { +func (cli *Client) ResolveContactQRLink(ctx context.Context, code string) (*types.ContactQRLinkTarget, error) { code = strings.TrimPrefix(code, ContactQRLinkPrefix) code = strings.TrimPrefix(code, ContactQRLinkDirectPrefix) - resp, err := cli.sendIQ(infoQuery{ + resp, err := cli.sendIQ(ctx, infoQuery{ Namespace: "w:qr", Type: iqGet, Content: []waBinary.Node{{ @@ -113,12 +119,12 @@ func (cli *Client) ResolveContactQRLink(code string) (*types.ContactQRLinkTarget // (or scanned with the official apps when encoded as a QR code). // // If the revoke parameter is set to true, it will ask the server to revoke the previous link and generate a new one. -func (cli *Client) GetContactQRLink(revoke bool) (string, error) { +func (cli *Client) GetContactQRLink(ctx context.Context, revoke bool) (string, error) { action := "get" if revoke { action = "revoke" } - resp, err := cli.sendIQ(infoQuery{ + resp, err := cli.sendIQ(ctx, infoQuery{ Namespace: "w:qr", Type: iqSet, Content: []waBinary.Node{{ @@ -144,8 +150,8 @@ func (cli *Client) GetContactQRLink(revoke bool) (string, error) { // // This is different from the ephemeral status broadcast messages. Use SendMessage to types.StatusBroadcastJID to send // such messages. -func (cli *Client) SetStatusMessage(msg string) error { - _, err := cli.sendIQ(infoQuery{ +func (cli *Client) SetStatusMessage(ctx context.Context, msg string) error { + _, err := cli.sendIQ(ctx, infoQuery{ Namespace: "status", Type: iqSet, To: types.ServerJID, @@ -159,12 +165,12 @@ func (cli *Client) SetStatusMessage(msg string) error { // IsOnWhatsApp checks if the given phone numbers are registered on WhatsApp. // The phone numbers should be in international format, including the `+` prefix. -func (cli *Client) IsOnWhatsApp(phones []string) ([]types.IsOnWhatsAppResponse, error) { +func (cli *Client) IsOnWhatsApp(ctx context.Context, phones []string) ([]types.IsOnWhatsAppResponse, error) { jids := make([]types.JID, len(phones)) for i := range jids { jids[i] = types.NewJID(phones[i], types.LegacyUserServer) } - list, err := cli.usync(context.TODO(), jids, "query", "interactive", []waBinary.Node{ + list, err := cli.usync(ctx, jids, "query", "interactive", []waBinary.Node{ {Tag: "business", Content: []waBinary.Node{{Tag: "verified_name"}}}, {Tag: "contact"}, }) @@ -194,17 +200,19 @@ func (cli *Client) IsOnWhatsApp(phones []string) ([]types.IsOnWhatsAppResponse, } // GetUserInfo gets basic user info (avatar, status, verified business name, device list). -func (cli *Client) GetUserInfo(jids []types.JID) (map[types.JID]types.UserInfo, error) { - list, err := cli.usync(context.TODO(), jids, "full", "background", []waBinary.Node{ +func (cli *Client) GetUserInfo(ctx context.Context, jids []types.JID) (map[types.JID]types.UserInfo, error) { + list, err := cli.usync(ctx, jids, "full", "background", []waBinary.Node{ {Tag: "business", Content: []waBinary.Node{{Tag: "verified_name"}}}, {Tag: "status"}, {Tag: "picture"}, {Tag: "devices", Attrs: waBinary.Attrs{"version": "2"}}, + {Tag: "lid"}, }) if err != nil { return nil, err } respData := make(map[types.JID]types.UserInfo, len(jids)) + mappings := make([]store.LIDMapping, 0, len(jids)) for _, child := range list.GetChildren() { jid, jidOK := child.Attrs["jid"].(types.JID) if child.Tag != "user" || !jidOK { @@ -218,17 +226,32 @@ func (cli *Client) GetUserInfo(jids []types.JID) (map[types.JID]types.UserInfo, status, _ := child.GetChildByTag("status").Content.([]byte) info.Status = string(status) info.PictureID, _ = child.GetChildByTag("picture").Attrs["id"].(string) - info.Devices = parseDeviceList(jid.User, child.GetChildByTag("devices")) + info.Devices = parseDeviceList(jid, child.GetChildByTag("devices")) + + lidTag := child.GetChildByTag("lid") + info.LID = lidTag.AttrGetter().OptionalJIDOrEmpty("val") + + if !info.LID.IsEmpty() { + mappings = append(mappings, store.LIDMapping{PN: jid, LID: info.LID}) + } + if verifiedName != nil { - cli.updateBusinessName(jid, nil, verifiedName.Details.GetVerifiedName()) + cli.updateBusinessName(ctx, jid, info.LID, nil, verifiedName.Details.GetVerifiedName()) } respData[jid] = info } + + err = cli.Store.LIDs.PutManyLIDMappings(ctx, mappings) + if err != nil { + // not worth returning on the error, instead just post a log + cli.Log.Errorf("Failed to place LID mappings from USync call") + } + return respData, nil } -func (cli *Client) GetBotListV2() ([]types.BotListInfo, error) { - resp, err := cli.sendIQ(infoQuery{ +func (cli *Client) GetBotListV2(ctx context.Context) ([]types.BotListInfo, error) { + resp, err := cli.sendIQ(ctx, infoQuery{ To: types.ServerJID, Namespace: "bot", Type: iqGet, @@ -261,13 +284,13 @@ func (cli *Client) GetBotListV2() ([]types.BotListInfo, error) { return list, nil } -func (cli *Client) GetBotProfiles(botInfo []types.BotListInfo) ([]types.BotProfileInfo, error) { +func (cli *Client) GetBotProfiles(ctx context.Context, botInfo []types.BotListInfo) ([]types.BotProfileInfo, error) { jids := make([]types.JID, len(botInfo)) for i, bot := range botInfo { jids[i] = bot.BotJID } - list, err := cli.usync(context.TODO(), jids, "query", "interactive", []waBinary.Node{ + list, err := cli.usync(ctx, jids, "query", "interactive", []waBinary.Node{ {Tag: "bot", Content: []waBinary.Node{{Tag: "profile", Attrs: waBinary.Attrs{"v": "1"}}}}, }, UsyncQueryExtras{ BotListInfo: botInfo, @@ -334,8 +357,8 @@ func (cli *Client) parseBusinessProfile(node *waBinary.Node) (*types.BusinessPro if !ok { return nil, errors.New("missing jid in business profile") } - address := string(profileNode.GetChildByTag("address").Content.([]byte)) - email := string(profileNode.GetChildByTag("email").Content.([]byte)) + address, _ := profileNode.GetChildByTag("address").Content.([]byte) + email, _ := profileNode.GetChildByTag("email").Content.([]byte) businessHour := profileNode.GetChildByTag("business_hours") businessHourTimezone := businessHour.AttrGetter().String("timezone") businessHoursConfigs := businessHour.GetChildren() @@ -344,7 +367,7 @@ func (cli *Client) parseBusinessProfile(node *waBinary.Node) (*types.BusinessPro if config.Tag != "business_hours_config" { continue } - dow := config.AttrGetter().String("dow") + dow := config.AttrGetter().String("day_of_week") mode := config.AttrGetter().String("mode") openTime := config.AttrGetter().String("open_time") closeTime := config.AttrGetter().String("close_time") @@ -362,21 +385,23 @@ func (cli *Client) parseBusinessProfile(node *waBinary.Node) (*types.BusinessPro continue } id := category.AttrGetter().String("id") - name := string(category.Content.([]byte)) + name, _ := category.Content.([]byte) categories = append(categories, types.Category{ ID: id, - Name: name, + Name: string(name), }) } profileOptionsNode := profileNode.GetChildByTag("profile_options") profileOptions := make(map[string]string) for _, option := range profileOptionsNode.GetChildren() { - profileOptions[option.Tag] = string(option.Content.([]byte)) + optValueBytes, _ := option.Content.([]byte) + profileOptions[option.Tag] = string(optValueBytes) + // TODO parse bot_fields } return &types.BusinessProfile{ JID: jid, - Email: email, - Address: address, + Email: string(email), + Address: string(address), Categories: categories, ProfileOptions: profileOptions, BusinessHoursTimeZone: businessHourTimezone, @@ -385,8 +410,8 @@ func (cli *Client) parseBusinessProfile(node *waBinary.Node) (*types.BusinessPro } // GetBusinessProfile gets the profile info of a WhatsApp business account -func (cli *Client) GetBusinessProfile(jid types.JID) (*types.BusinessProfile, error) { - resp, err := cli.sendIQ(infoQuery{ +func (cli *Client) GetBusinessProfile(ctx context.Context, jid types.JID) (*types.BusinessProfile, error) { + resp, err := cli.sendIQ(ctx, infoQuery{ Type: iqGet, To: types.ServerJID, Namespace: "w:biz", @@ -413,14 +438,17 @@ func (cli *Client) GetBusinessProfile(jid types.JID) (*types.BusinessProfile, er return cli.parseBusinessProfile(&node) } +func (cli *Client) GetUserDevicesContext(ctx context.Context, jids []types.JID) ([]types.JID, error) { + return cli.GetUserDevices(ctx, jids) +} + // GetUserDevices gets the list of devices that the given user has. The input should be a list of // regular JIDs, and the output will be a list of AD JIDs. The local device will not be included in // the output even if the user's JID is included in the input. All other devices will be included. -func (cli *Client) GetUserDevices(jids []types.JID) ([]types.JID, error) { - return cli.GetUserDevicesContext(context.Background(), jids) -} - -func (cli *Client) GetUserDevicesContext(ctx context.Context, jids []types.JID) ([]types.JID, error) { +func (cli *Client) GetUserDevices(ctx context.Context, jids []types.JID) ([]types.JID, error) { + if cli == nil { + return nil, ErrClientIsNil + } cli.userDevicesCacheLock.Lock() defer cli.userDevicesCacheLock.Unlock() @@ -451,26 +479,18 @@ func (cli *Client) GetUserDevicesContext(ctx context.Context, jids []types.JID) if user.Tag != "user" || !jidOK { continue } - userDevices := parseDeviceList(jid.User, user.GetChildByTag("devices")) + userDevices := parseDeviceList(jid, user.GetChildByTag("devices")) cli.userDevicesCache[jid] = deviceCache{devices: userDevices, dhash: participantListHashV2(userDevices)} devices = append(devices, userDevices...) } } if len(fbJIDsToSync) > 0 { - list, err := cli.getFBIDDevices(ctx, fbJIDsToSync) + userDevices, err := cli.getFBIDDevices(ctx, fbJIDsToSync) if err != nil { return nil, err } - for _, user := range list.GetChildren() { - jid, jidOK := user.Attrs["jid"].(types.JID) - if user.Tag != "user" || !jidOK { - continue - } - userDevices := parseFBDeviceList(jid, user.GetChildByTag("devices")) - cli.userDevicesCache[jid] = userDevices - devices = append(devices, userDevices.devices...) - } + devices = append(devices, userDevices...) } return devices, nil @@ -480,6 +500,12 @@ type GetProfilePictureParams struct { Preview bool ExistingID string IsCommunity bool + // This is a common group ID that you share with the target + CommonGID types.JID + // use this to query the profile photo of a group you don't have joined, but you have an invite code for + InviteCode string + // Persona ID when getting profile of Meta AI bots + PersonaID string } // GetProfilePictureInfo gets the URL where you can download a WhatsApp user's profile picture or group's photo. @@ -488,7 +514,10 @@ type GetProfilePictureParams struct { // If the profile picture hasn't changed, this will return nil with no error. // // To get a community photo, you should pass `IsCommunity: true`, as otherwise you may get a 401 error. -func (cli *Client) GetProfilePictureInfo(jid types.JID, params *GetProfilePictureParams) (*types.ProfilePictureInfo, error) { +func (cli *Client) GetProfilePictureInfo(ctx context.Context, jid types.JID, params *GetProfilePictureParams) (*types.ProfilePictureInfo, error) { + if cli == nil { + return nil, ErrClientIsNil + } attrs := waBinary.Attrs{ "query": "url", } @@ -504,6 +533,10 @@ func (cli *Client) GetProfilePictureInfo(jid types.JID, params *GetProfilePictur if params.ExistingID != "" { attrs["id"] = params.ExistingID } + if params.InviteCode != "" { + attrs["invite"] = params.InviteCode + } + var expectWrapped bool var content []waBinary.Node namespace := "w:profile:picture" @@ -523,12 +556,30 @@ func (cli *Client) GetProfilePictureInfo(jid types.JID, params *GetProfilePictur } else { to = types.ServerJID target = jid + + if !params.CommonGID.IsEmpty() { + attrs["common_gid"] = params.CommonGID + } + + if params.PersonaID != "" { + attrs["persona_id"] = params.PersonaID + } + + var pictureContent []waBinary.Node + if token, _ := cli.Store.PrivacyTokens.GetPrivacyToken(ctx, jid); token != nil { + pictureContent = []waBinary.Node{{ + Tag: "tctoken", + Content: token.Token, + }} + } + content = []waBinary.Node{{ - Tag: "picture", - Attrs: attrs, + Tag: "picture", + Attrs: attrs, + Content: pictureContent, }} } - resp, err := cli.sendIQ(infoQuery{ + resp, err := cli.sendIQ(ctx, infoQuery{ Namespace: namespace, Type: "get", To: to, @@ -560,18 +611,21 @@ func (cli *Client) GetProfilePictureInfo(jid types.JID, params *GetProfilePictur ag := picture.AttrGetter() if ag.OptionalInt("status") == 304 { return nil, nil + } else if ag.OptionalInt("status") == 204 { + return nil, ErrProfilePictureNotSet } info.ID = ag.String("id") info.URL = ag.String("url") info.Type = ag.String("type") info.DirectPath = ag.String("direct_path") + info.Hash, _ = base64.StdEncoding.DecodeString(ag.OptionalString("hash")) if !ag.OK() { return &info, ag.Error() } return &info, nil } -func (cli *Client) handleHistoricalPushNames(names []*waProto.Pushname) { +func (cli *Client) handleHistoricalPushNames(ctx context.Context, names []*waHistorySync.Pushname) { if cli.Store.Contacts == nil { return } @@ -581,28 +635,39 @@ func (cli *Client) handleHistoricalPushNames(names []*waProto.Pushname) { continue } var changed bool - if jid, err := types.ParseJID(user.GetId()); err != nil { - cli.Log.Warnf("Failed to parse user ID '%s' in push name history sync: %v", user.GetId(), err) - } else if changed, _, err = cli.Store.Contacts.PutPushName(jid, user.GetPushname()); err != nil { - cli.Log.Warnf("Failed to store push name of %s from history sync: %v", err) + if jid, err := types.ParseJID(user.GetID()); err != nil { + cli.Log.Warnf("Failed to parse user ID '%s' in push name history sync: %v", user.GetID(), err) + } else if changed, _, err = cli.Store.Contacts.PutPushName(ctx, jid, user.GetPushname()); err != nil { + cli.Log.Warnf("Failed to store push name of %s from history sync: %v", jid, err) } else if changed { cli.Log.Debugf("Got push name %s for %s in history sync", user.GetPushname(), jid) } } } -func (cli *Client) updatePushName(user types.JID, messageInfo *types.MessageInfo, name string) { +func (cli *Client) updatePushName(ctx context.Context, user, userAlt types.JID, messageInfo *types.MessageInfo, name string) { if cli.Store.Contacts == nil { return } user = user.ToNonAD() - changed, previousName, err := cli.Store.Contacts.PutPushName(user, name) + changed, previousName, err := cli.Store.Contacts.PutPushName(ctx, user, name) if err != nil { cli.Log.Errorf("Failed to save push name of %s in device store: %v", user, err) } else if changed { + userAlt = userAlt.ToNonAD() + if userAlt.IsEmpty() { + userAlt, _ = cli.Store.GetAltJID(ctx, user) + } + if !userAlt.IsEmpty() { + _, _, err = cli.Store.Contacts.PutPushName(ctx, userAlt, name) + if err != nil { + cli.Log.Errorf("Failed to save push name of %s in device store: %v", userAlt, err) + } + } cli.Log.Debugf("Push name of %s changed from %s to %s, dispatching event", user, previousName, name) cli.dispatchEvent(&events.PushName{ JID: user, + JIDAlt: userAlt, Message: messageInfo, OldPushName: previousName, NewPushName: name, @@ -610,14 +675,24 @@ func (cli *Client) updatePushName(user types.JID, messageInfo *types.MessageInfo } } -func (cli *Client) updateBusinessName(user types.JID, messageInfo *types.MessageInfo, name string) { +func (cli *Client) updateBusinessName(ctx context.Context, user, userAlt types.JID, messageInfo *types.MessageInfo, name string) { if cli.Store.Contacts == nil { return } - changed, previousName, err := cli.Store.Contacts.PutBusinessName(user, name) + changed, previousName, err := cli.Store.Contacts.PutBusinessName(ctx, user, name) if err != nil { cli.Log.Errorf("Failed to save business name of %s in device store: %v", user, err) } else if changed { + userAlt = userAlt.ToNonAD() + if userAlt.IsEmpty() { + userAlt, _ = cli.Store.GetAltJID(ctx, user) + } + if !userAlt.IsEmpty() { + _, _, err = cli.Store.Contacts.PutBusinessName(ctx, userAlt, name) + if err != nil { + cli.Log.Errorf("Failed to save push name of %s in device store: %v", userAlt, err) + } + } cli.Log.Debugf("Business name of %s changed from %s to %s, dispatching event", user, previousName, name) cli.dispatchEvent(&events.BusinessName{ JID: user, @@ -645,12 +720,12 @@ func parseVerifiedNameContent(verifiedNameNode waBinary.Node) (*types.VerifiedNa return nil, nil } - var cert waProto.VerifiedNameCertificate + var cert waVnameCert.VerifiedNameCertificate err := proto.Unmarshal(rawCert, &cert) if err != nil { return nil, err } - var certDetails waProto.VerifiedNameCertificate_Details + var certDetails waVnameCert.VerifiedNameCertificate_Details err = proto.Unmarshal(cert.GetDetails(), &certDetails) if err != nil { return nil, err @@ -661,7 +736,7 @@ func parseVerifiedNameContent(verifiedNameNode waBinary.Node) (*types.VerifiedNa }, nil } -func parseDeviceList(user string, deviceNode waBinary.Node) []types.JID { +func parseDeviceList(user types.JID, deviceNode waBinary.Node) []types.JID { deviceList := deviceNode.GetChildByTag("device-list") if deviceNode.Tag != "devices" || deviceList.Tag != "device-list" { return nil @@ -670,10 +745,22 @@ func parseDeviceList(user string, deviceNode waBinary.Node) []types.JID { devices := make([]types.JID, 0, len(children)) for _, device := range children { deviceID, ok := device.AttrGetter().GetInt64("id", true) + isHosted := device.AttrGetter().Bool("is_hosted") if device.Tag != "device" || !ok { continue } - devices = append(devices, types.NewADJID(user, 0, byte(deviceID))) + user.Device = uint16(deviceID) + if isHosted { + hostedUser := user + if user.Server == types.HiddenUserServer { + hostedUser.Server = types.HostedLIDServer + } else { + hostedUser.Server = types.HostedServer + } + devices = append(devices, hostedUser) + } else { + devices = append(devices, user) + } } return devices } @@ -697,15 +784,14 @@ func parseFBDeviceList(user types.JID, deviceList waBinary.Node) deviceCache { } } -func (cli *Client) getFBIDDevices(ctx context.Context, jids []types.JID) (*waBinary.Node, error) { +func (cli *Client) getFBIDDevicesInternal(ctx context.Context, jids []types.JID) (*waBinary.Node, error) { users := make([]waBinary.Node, len(jids)) for i, jid := range jids { users[i].Tag = "user" users[i].Attrs = waBinary.Attrs{"jid": jid} // TODO include dhash for users } - resp, err := cli.sendIQ(infoQuery{ - Context: ctx, + resp, err := cli.sendIQ(ctx, infoQuery{ Namespace: "fbid:devices", Type: iqGet, To: types.ServerJID, @@ -723,11 +809,34 @@ func (cli *Client) getFBIDDevices(ctx context.Context, jids []types.JID) (*waBin } } +func (cli *Client) getFBIDDevices(ctx context.Context, jids []types.JID) ([]types.JID, error) { + var devices []types.JID + for chunk := range slices.Chunk(jids, 15) { + list, err := cli.getFBIDDevicesInternal(ctx, chunk) + if err != nil { + return nil, err + } + for _, user := range list.GetChildren() { + jid, jidOK := user.Attrs["jid"].(types.JID) + if user.Tag != "user" || !jidOK { + continue + } + userDevices := parseFBDeviceList(jid, user.GetChildByTag("devices")) + cli.userDevicesCache[jid] = userDevices + devices = append(devices, userDevices.devices...) + } + } + return devices, nil +} + type UsyncQueryExtras struct { BotListInfo []types.BotListInfo } func (cli *Client) usync(ctx context.Context, jids []types.JID, mode, context string, query []waBinary.Node, extra ...UsyncQueryExtras) (*waBinary.Node, error) { + if cli == nil { + return nil, ErrClientIsNil + } var extras UsyncQueryExtras if len(extra) > 1 { return nil, errors.New("only one extra parameter may be provided to usync()") @@ -746,20 +855,22 @@ func (cli *Client) usync(ctx context.Context, jids []types.JID, mode, context st Tag: "contact", Content: jid.String(), }} - case types.DefaultUserServer: + case types.DefaultUserServer, types.HiddenUserServer: + // NOTE: You can pass in an LID with a JID ( user node) + // Not sure if you can just put the LID in the jid tag here (works for queries mainly) userList[i].Attrs = waBinary.Attrs{"jid": jid} if jid.IsBot() { - var personaId string + var personaID string for _, bot := range extras.BotListInfo { if bot.BotJID.User == jid.User { - personaId = bot.PersonaID + personaID = bot.PersonaID } } userList[i].Content = []waBinary.Node{{ Tag: "bot", Content: []waBinary.Node{{ Tag: "profile", - Attrs: waBinary.Attrs{"persona_id": personaId}, + Attrs: waBinary.Attrs{"persona_id": personaID}, }}, }} } @@ -767,8 +878,7 @@ func (cli *Client) usync(ctx context.Context, jids []types.JID, mode, context st return nil, fmt.Errorf("unknown user server '%s'", jid.Server) } } - resp, err := cli.sendIQ(infoQuery{ - Context: ctx, + resp, err := cli.sendIQ(ctx, infoQuery{ Namespace: "usync", Type: "get", To: types.ServerJID, @@ -814,8 +924,8 @@ func (cli *Client) parseBlocklist(node *waBinary.Node) *types.Blocklist { } // GetBlocklist gets the list of users that this user has blocked. -func (cli *Client) GetBlocklist() (*types.Blocklist, error) { - resp, err := cli.sendIQ(infoQuery{ +func (cli *Client) GetBlocklist(ctx context.Context) (*types.Blocklist, error) { + resp, err := cli.sendIQ(ctx, infoQuery{ Namespace: "blocklist", Type: iqGet, To: types.ServerJID, @@ -831,8 +941,8 @@ func (cli *Client) GetBlocklist() (*types.Blocklist, error) { } // UpdateBlocklist updates the user's block list and returns the updated list. -func (cli *Client) UpdateBlocklist(jid types.JID, action events.BlocklistChangeAction) (*types.Blocklist, error) { - resp, err := cli.sendIQ(infoQuery{ +func (cli *Client) UpdateBlocklist(ctx context.Context, jid types.JID, action events.BlocklistChangeAction) (*types.Blocklist, error) { + resp, err := cli.sendIQ(ctx, infoQuery{ Namespace: "blocklist", Type: iqSet, To: types.ServerJID, @@ -844,6 +954,9 @@ func (cli *Client) UpdateBlocklist(jid types.JID, action events.BlocklistChangeA }, }}, }) + if err != nil { + return nil, err + } list, ok := resp.GetOptionalChildByTag("list") if !ok { return nil, &ElementMissingError{Tag: "list", In: "response to blocklist update"} diff --git a/vendor/go.mau.fi/whatsmeow/util/cbcutil/cbc.go b/vendor/go.mau.fi/whatsmeow/util/cbcutil/cbc.go index 118b4f206c..503a23af73 100644 --- a/vendor/go.mau.fi/whatsmeow/util/cbcutil/cbc.go +++ b/vendor/go.mau.fi/whatsmeow/util/cbcutil/cbc.go @@ -24,6 +24,7 @@ import ( "errors" "fmt" "io" + "os" ) /* @@ -31,34 +32,92 @@ Decrypt is a function that decrypts a given cipher text with a provided key and */ func Decrypt(key, iv, ciphertext []byte) ([]byte, error) { block, err := aes.NewCipher(key) - if err != nil { return nil, err - } - - if len(ciphertext) < aes.BlockSize { + } else if len(ciphertext) < aes.BlockSize { return nil, fmt.Errorf("ciphertext is shorter then block size: %d / %d", len(ciphertext), aes.BlockSize) } - if iv == nil { - iv = ciphertext[:aes.BlockSize] - ciphertext = ciphertext[aes.BlockSize:] - } - cbc := cipher.NewCBCDecrypter(block, iv) cbc.CryptBlocks(ciphertext, ciphertext) return unpad(ciphertext) } +type File interface { + io.Reader + io.WriterAt + Truncate(size int64) error + Stat() (os.FileInfo, error) +} + +func DecryptFile(key, iv []byte, file File) error { + block, err := aes.NewCipher(key) + if err != nil { + return err + } + cbc := cipher.NewCBCDecrypter(block, iv) + stat, err := file.Stat() + if err != nil { + return fmt.Errorf("failed to stat file: %w", err) + } + fileSize := stat.Size() + if fileSize%aes.BlockSize != 0 { + return fmt.Errorf("file size is not a multiple of the block size: %d / %d", fileSize, aes.BlockSize) + } + + var bufSize int64 = 32 * 1024 + if fileSize < bufSize { + bufSize = fileSize + } + buf := make([]byte, bufSize) + var writePtr int64 + var lastByte byte + for writePtr < fileSize { + if writePtr+bufSize > fileSize { + buf = buf[:fileSize-writePtr] + } + var n int + n, err = io.ReadFull(file, buf) + if err != nil { + return fmt.Errorf("failed to read file: %w", err) + } else if n != len(buf) { + return fmt.Errorf("failed to read full buffer: %d / %d", n, len(buf)) + } + cbc.CryptBlocks(buf, buf) + n, err = file.WriteAt(buf, writePtr) + if err != nil { + return fmt.Errorf("failed to write file: %w", err) + } else if n != len(buf) { + return fmt.Errorf("failed to write full buffer: %d / %d", n, len(buf)) + } + writePtr += int64(len(buf)) + lastByte = buf[len(buf)-1] + } + if int64(lastByte) > fileSize { + return fmt.Errorf("padding is greater then the length: %d / %d", lastByte, fileSize) + } + err = file.Truncate(fileSize - int64(lastByte)) + if err != nil { + return fmt.Errorf("failed to truncate file to remove padding: %w", err) + } + return nil +} + /* Encrypt is a function that encrypts plaintext with a given key and an optional initialization vector(iv). */ func Encrypt(key, iv, plaintext []byte) ([]byte, error) { - plaintext = pad(plaintext, aes.BlockSize) + sizeOfLastBlock := len(plaintext) % aes.BlockSize + paddingLen := aes.BlockSize - sizeOfLastBlock + plaintextStart := plaintext[:len(plaintext)-sizeOfLastBlock] + lastBlock := append(plaintext[len(plaintext)-sizeOfLastBlock:], bytes.Repeat([]byte{byte(paddingLen)}, paddingLen)...) - if len(plaintext)%aes.BlockSize != 0 { - return nil, fmt.Errorf("plaintext is not a multiple of the block size: %d / %d", len(plaintext), aes.BlockSize) + if len(plaintextStart)%aes.BlockSize != 0 { + panic(fmt.Errorf("plaintext is not the correct size: %d %% %d != 0", len(plaintextStart), aes.BlockSize)) + } + if len(lastBlock) != aes.BlockSize { + panic(fmt.Errorf("last block is not the correct size: %d != %d", len(lastBlock), aes.BlockSize)) } block, err := aes.NewCipher(key) @@ -68,30 +127,26 @@ func Encrypt(key, iv, plaintext []byte) ([]byte, error) { var ciphertext []byte if iv == nil { - ciphertext = make([]byte, aes.BlockSize+len(plaintext)) + ciphertext = make([]byte, aes.BlockSize+len(plaintext)+paddingLen) iv := ciphertext[:aes.BlockSize] if _, err := io.ReadFull(rand.Reader, iv); err != nil { return nil, err } cbc := cipher.NewCBCEncrypter(block, iv) - cbc.CryptBlocks(ciphertext[aes.BlockSize:], plaintext) + cbc.CryptBlocks(ciphertext[aes.BlockSize:], plaintextStart) + cbc.CryptBlocks(ciphertext[aes.BlockSize+len(plaintextStart):], lastBlock) } else { - ciphertext = make([]byte, len(plaintext)) + ciphertext = make([]byte, len(plaintext)+paddingLen, len(plaintext)+paddingLen+10) cbc := cipher.NewCBCEncrypter(block, iv) - cbc.CryptBlocks(ciphertext, plaintext) + cbc.CryptBlocks(ciphertext, plaintextStart) + cbc.CryptBlocks(ciphertext[len(plaintextStart):], lastBlock) } return ciphertext, nil } -func pad(ciphertext []byte, blockSize int) []byte { - padding := blockSize - len(ciphertext)%blockSize - padtext := bytes.Repeat([]byte{byte(padding)}, padding) - return append(ciphertext, padtext...) -} - func unpad(src []byte) ([]byte, error) { length := len(src) padLen := int(src[length-1]) @@ -103,10 +158,10 @@ func unpad(src []byte) ([]byte, error) { return src[:(length - padLen)], nil } -func EncryptStream(key, iv, macKey []byte, plaintext io.Reader, ciphertext io.Writer) ([]byte, []byte, uint64, error) { +func EncryptStream(key, iv, macKey []byte, plaintext io.Reader, ciphertext io.Writer) ([]byte, []byte, uint64, uint64, error) { block, err := aes.NewCipher(key) if err != nil { - return nil, nil, 0, fmt.Errorf("failed to create cipher: %w", err) + return nil, nil, 0, 0, fmt.Errorf("failed to create cipher: %w", err) } cbc := cipher.NewCBCEncrypter(block, iv) @@ -115,8 +170,11 @@ func EncryptStream(key, iv, macKey []byte, plaintext io.Reader, ciphertext io.Wr cipherMAC := hmac.New(sha256.New, macKey) cipherMAC.Write(iv) + writerAt, hasWriterAt := ciphertext.(io.WriterAt) + buf := make([]byte, 32*1024) - var size int + var size, extraSize int + var writePtr int64 hasMore := true for hasMore { var n int @@ -126,23 +184,34 @@ func EncryptStream(key, iv, macKey []byte, plaintext io.Reader, ciphertext io.Wr if errors.Is(err, io.EOF) || errors.Is(err, io.ErrUnexpectedEOF) { padding := aes.BlockSize - size%aes.BlockSize buf = append(buf[:n], bytes.Repeat([]byte{byte(padding)}, padding)...) + extraSize = padding hasMore = false } else if err != nil { - return nil, nil, 0, fmt.Errorf("failed to read file: %w", err) + return nil, nil, 0, 0, fmt.Errorf("failed to read file: %w", err) } cbc.CryptBlocks(buf, buf) cipherMAC.Write(buf) cipherHasher.Write(buf) - _, err = ciphertext.Write(buf) + if hasWriterAt { + _, err = writerAt.WriteAt(buf, writePtr) + writePtr += int64(len(buf)) + } else { + _, err = ciphertext.Write(buf) + } if err != nil { - return nil, nil, 0, fmt.Errorf("failed to write file: %w", err) + return nil, nil, 0, 0, fmt.Errorf("failed to write file: %w", err) } } mac := cipherMAC.Sum(nil)[:10] + extraSize += 10 cipherHasher.Write(mac) - _, err = ciphertext.Write(mac) + if hasWriterAt { + _, err = writerAt.WriteAt(mac, writePtr) + } else { + _, err = ciphertext.Write(mac) + } if err != nil { - return nil, nil, 0, fmt.Errorf("failed to write checksum to file: %w", err) + return nil, nil, 0, 0, fmt.Errorf("failed to write checksum to file: %w", err) } - return plainHasher.Sum(nil), cipherHasher.Sum(nil), uint64(size), nil + return plainHasher.Sum(nil), cipherHasher.Sum(nil), uint64(size), uint64(size + extraSize), nil } diff --git a/vendor/golang.org/x/crypto/LICENSE b/vendor/golang.org/x/crypto/LICENSE index 6a66aea5ea..2a7cf70da6 100644 --- a/vendor/golang.org/x/crypto/LICENSE +++ b/vendor/golang.org/x/crypto/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2009 The Go Authors. All rights reserved. +Copyright 2009 The Go Authors. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are @@ -10,7 +10,7 @@ notice, this list of conditions and the following disclaimer. copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - * Neither the name of Google Inc. nor the names of its + * Neither the name of Google LLC nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. diff --git a/vendor/golang.org/x/crypto/acme/acme.go b/vendor/golang.org/x/crypto/acme/acme.go index aaafea2bc0..b53ea28891 100644 --- a/vendor/golang.org/x/crypto/acme/acme.go +++ b/vendor/golang.org/x/crypto/acme/acme.go @@ -31,12 +31,11 @@ import ( "crypto/x509/pkix" "encoding/asn1" "encoding/base64" - "encoding/hex" "encoding/json" - "encoding/pem" "errors" "fmt" "math/big" + "net" "net/http" "strings" "sync" @@ -353,6 +352,10 @@ func (c *Client) authorize(ctx context.Context, typ, val string) (*Authorization if _, err := c.Discover(ctx); err != nil { return nil, err } + if c.dir.AuthzURL == "" { + // Pre-Authorization is unsupported + return nil, errPreAuthorizationNotSupported + } type authzID struct { Type string `json:"type"` @@ -467,7 +470,7 @@ func (c *Client) WaitAuthorization(ctx context.Context, url string) (*Authorizat // while waiting for a final authorization status. d := retryAfter(res.Header.Get("Retry-After")) if d == 0 { - // Given that the fastest challenges TLS-SNI and HTTP-01 + // Given that the fastest challenges TLS-ALPN and HTTP-01 // require a CA to make at least 1 network round trip // and most likely persist a challenge state, // this default delay seems reasonable. @@ -514,7 +517,11 @@ func (c *Client) Accept(ctx context.Context, chal *Challenge) (*Challenge, error return nil, err } - res, err := c.post(ctx, nil, chal.URI, json.RawMessage("{}"), wantStatus( + payload := json.RawMessage("{}") + if len(chal.Payload) != 0 { + payload = chal.Payload + } + res, err := c.post(ctx, nil, chal.URI, payload, wantStatus( http.StatusOK, // according to the spec http.StatusAccepted, // Let's Encrypt: see https://goo.gl/WsJ7VT (acme-divergences.md) )) @@ -564,50 +571,28 @@ func (c *Client) HTTP01ChallengePath(token string) string { } // TLSSNI01ChallengeCert creates a certificate for TLS-SNI-01 challenge response. +// Always returns an error. // -// Deprecated: This challenge type is unused in both draft-02 and RFC versions of the ACME spec. -func (c *Client) TLSSNI01ChallengeCert(token string, opt ...CertOption) (cert tls.Certificate, name string, err error) { - ka, err := keyAuth(c.Key.Public(), token) - if err != nil { - return tls.Certificate{}, "", err - } - b := sha256.Sum256([]byte(ka)) - h := hex.EncodeToString(b[:]) - name = fmt.Sprintf("%s.%s.acme.invalid", h[:32], h[32:]) - cert, err = tlsChallengeCert([]string{name}, opt) - if err != nil { - return tls.Certificate{}, "", err - } - return cert, name, nil +// Deprecated: This challenge type was only present in pre-standardized ACME +// protocol drafts and is insecure for use in shared hosting environments. +func (c *Client) TLSSNI01ChallengeCert(token string, opt ...CertOption) (tls.Certificate, string, error) { + return tls.Certificate{}, "", errPreRFC } // TLSSNI02ChallengeCert creates a certificate for TLS-SNI-02 challenge response. +// Always returns an error. // -// Deprecated: This challenge type is unused in both draft-02 and RFC versions of the ACME spec. -func (c *Client) TLSSNI02ChallengeCert(token string, opt ...CertOption) (cert tls.Certificate, name string, err error) { - b := sha256.Sum256([]byte(token)) - h := hex.EncodeToString(b[:]) - sanA := fmt.Sprintf("%s.%s.token.acme.invalid", h[:32], h[32:]) - - ka, err := keyAuth(c.Key.Public(), token) - if err != nil { - return tls.Certificate{}, "", err - } - b = sha256.Sum256([]byte(ka)) - h = hex.EncodeToString(b[:]) - sanB := fmt.Sprintf("%s.%s.ka.acme.invalid", h[:32], h[32:]) - - cert, err = tlsChallengeCert([]string{sanA, sanB}, opt) - if err != nil { - return tls.Certificate{}, "", err - } - return cert, sanA, nil +// Deprecated: This challenge type was only present in pre-standardized ACME +// protocol drafts and is insecure for use in shared hosting environments. +func (c *Client) TLSSNI02ChallengeCert(token string, opt ...CertOption) (tls.Certificate, string, error) { + return tls.Certificate{}, "", errPreRFC } // TLSALPN01ChallengeCert creates a certificate for TLS-ALPN-01 challenge response. // Servers can present the certificate to validate the challenge and prove control -// over a domain name. For more details on TLS-ALPN-01 see -// https://tools.ietf.org/html/draft-shoemaker-acme-tls-alpn-00#section-3 +// over an identifier (either a DNS name or the textual form of an IPv4 or IPv6 +// address). For more details on TLS-ALPN-01 see +// https://www.rfc-editor.org/rfc/rfc8737 and https://www.rfc-editor.org/rfc/rfc8738 // // The token argument is a Challenge.Token value. // If a WithKey option is provided, its private part signs the returned cert, @@ -615,9 +600,13 @@ func (c *Client) TLSSNI02ChallengeCert(token string, opt ...CertOption) (cert tl // If no WithKey option is provided, a new ECDSA key is generated using P-256 curve. // // The returned certificate is valid for the next 24 hours and must be presented only when -// the server name in the TLS ClientHello matches the domain, and the special acme-tls/1 ALPN protocol +// the server name in the TLS ClientHello matches the identifier, and the special acme-tls/1 ALPN protocol // has been specified. -func (c *Client) TLSALPN01ChallengeCert(token, domain string, opt ...CertOption) (cert tls.Certificate, err error) { +// +// Validation requests for IP address identifiers will use the reverse DNS form in the server name +// in the TLS ClientHello since the SNI extension is not supported for IP addresses. +// See RFC 8738 Section 6 for more information. +func (c *Client) TLSALPN01ChallengeCert(token, identifier string, opt ...CertOption) (cert tls.Certificate, err error) { ka, err := keyAuth(c.Key.Public(), token) if err != nil { return tls.Certificate{}, err @@ -647,7 +636,7 @@ func (c *Client) TLSALPN01ChallengeCert(token, domain string, opt ...CertOption) } tmpl.ExtraExtensions = append(tmpl.ExtraExtensions, acmeExtension) newOpt = append(newOpt, WithTemplate(tmpl)) - return tlsChallengeCert([]string{domain}, newOpt) + return tlsChallengeCert(identifier, newOpt) } // popNonce returns a nonce value previously stored with c.addNonce @@ -701,7 +690,7 @@ func (c *Client) addNonce(h http.Header) { } func (c *Client) fetchNonce(ctx context.Context, url string) (string, error) { - r, err := http.NewRequest("HEAD", url, nil) + r, err := http.NewRequestWithContext(ctx, "HEAD", url, nil) if err != nil { return "", err } @@ -765,11 +754,15 @@ func defaultTLSChallengeCertTemplate() *x509.Certificate { } } -// tlsChallengeCert creates a temporary certificate for TLS-SNI challenges -// with the given SANs and auto-generated public/private key pair. -// The Subject Common Name is set to the first SAN to aid debugging. +// tlsChallengeCert creates a temporary certificate for TLS-ALPN challenges +// for the given identifier, using an auto-generated public/private key pair. +// +// If the provided identifier is a domain name, it will be used as a DNS type SAN and for the +// subject common name. If the provided identifier is an IP address it will be used as an IP type +// SAN. +// // To create a cert with a custom key pair, specify WithKey option. -func tlsChallengeCert(san []string, opt []CertOption) (tls.Certificate, error) { +func tlsChallengeCert(identifier string, opt []CertOption) (tls.Certificate, error) { var key crypto.Signer tmpl := defaultTLSChallengeCertTemplate() for _, o := range opt { @@ -793,9 +786,12 @@ func tlsChallengeCert(san []string, opt []CertOption) (tls.Certificate, error) { return tls.Certificate{}, err } } - tmpl.DNSNames = san - if len(san) > 0 { - tmpl.Subject.CommonName = san[0] + + if ip := net.ParseIP(identifier); ip != nil { + tmpl.IPAddresses = []net.IP{ip} + } else { + tmpl.DNSNames = []string{identifier} + tmpl.Subject.CommonName = identifier } der, err := x509.CreateCertificate(rand.Reader, tmpl, tmpl, key.Public(), key) @@ -808,11 +804,5 @@ func tlsChallengeCert(san []string, opt []CertOption) (tls.Certificate, error) { }, nil } -// encodePEM returns b encoded as PEM with block of type typ. -func encodePEM(typ string, b []byte) []byte { - pb := &pem.Block{Type: typ, Bytes: b} - return pem.EncodeToMemory(pb) -} - // timeNow is time.Now, except in tests which can mess with it. var timeNow = time.Now diff --git a/vendor/golang.org/x/crypto/acme/autocert/autocert.go b/vendor/golang.org/x/crypto/acme/autocert/autocert.go index 6b4cdf406d..cde9066f6d 100644 --- a/vendor/golang.org/x/crypto/acme/autocert/autocert.go +++ b/vendor/golang.org/x/crypto/acme/autocert/autocert.go @@ -134,7 +134,8 @@ type Manager struct { // RenewBefore optionally specifies how early certificates should // be renewed before they expire. // - // If zero, they're renewed 30 days before expiration. + // If zero, they're renewed at the lesser of 30 days or + // 1/3 of the certificate lifetime. RenewBefore time.Duration // Client is used to perform low-level operations, such as account registration @@ -292,6 +293,10 @@ func (m *Manager) GetCertificate(hello *tls.ClientHelloInfo) (*tls.Certificate, } // regular domain + if err := m.hostPolicy()(ctx, name); err != nil { + return nil, err + } + ck := certKey{ domain: strings.TrimSuffix(name, "."), // golang.org/issue/18114 isRSA: !supportsECDSA(hello), @@ -305,9 +310,6 @@ func (m *Manager) GetCertificate(hello *tls.ClientHelloInfo) (*tls.Certificate, } // first-time - if err := m.hostPolicy()(ctx, name); err != nil { - return nil, err - } cert, err = m.createCert(ctx, ck) if err != nil { return nil, err @@ -463,7 +465,7 @@ func (m *Manager) cert(ctx context.Context, ck certKey) (*tls.Certificate, error leaf: cert.Leaf, } m.state[ck] = s - m.startRenew(ck, s.key, s.leaf.NotAfter) + m.startRenew(ck, s.key, s.leaf.NotBefore, s.leaf.NotAfter) return cert, nil } @@ -609,7 +611,7 @@ func (m *Manager) createCert(ctx context.Context, ck certKey) (*tls.Certificate, } state.cert = der state.leaf = leaf - m.startRenew(ck, state.key, state.leaf.NotAfter) + m.startRenew(ck, state.key, state.leaf.NotBefore, state.leaf.NotAfter) return state.tlscert() } @@ -907,7 +909,7 @@ func httpTokenCacheKey(tokenPath string) string { // // The key argument is a certificate private key. // The exp argument is the cert expiration time (NotAfter). -func (m *Manager) startRenew(ck certKey, key crypto.Signer, exp time.Time) { +func (m *Manager) startRenew(ck certKey, key crypto.Signer, notBefore, notAfter time.Time) { m.renewalMu.Lock() defer m.renewalMu.Unlock() if m.renewal[ck] != nil { @@ -919,7 +921,7 @@ func (m *Manager) startRenew(ck certKey, key crypto.Signer, exp time.Time) { } dr := &domainRenewal{m: m, ck: ck, key: key} m.renewal[ck] = dr - dr.start(exp) + dr.start(notBefore, notAfter) } // stopRenew stops all currently running cert renewal timers. @@ -1027,13 +1029,6 @@ func (m *Manager) hostPolicy() HostPolicy { return defaultHostPolicy } -func (m *Manager) renewBefore() time.Duration { - if m.RenewBefore > renewJitter { - return m.RenewBefore - } - return 720 * time.Hour // 30 days -} - func (m *Manager) now() time.Time { if m.nowFunc != nil { return m.nowFunc() diff --git a/vendor/golang.org/x/crypto/acme/autocert/listener.go b/vendor/golang.org/x/crypto/acme/autocert/listener.go index 9d62f8cedc..460133e0cc 100644 --- a/vendor/golang.org/x/crypto/acme/autocert/listener.go +++ b/vendor/golang.org/x/crypto/acme/autocert/listener.go @@ -10,7 +10,6 @@ import ( "net" "os" "path/filepath" - "runtime" "time" ) @@ -124,32 +123,13 @@ func (ln *listener) Close() error { return ln.tcpListener.Close() } -func homeDir() string { - if runtime.GOOS == "windows" { - return os.Getenv("HOMEDRIVE") + os.Getenv("HOMEPATH") - } - if h := os.Getenv("HOME"); h != "" { - return h - } - return "/" -} - func cacheDir() string { const base = "golang-autocert" - switch runtime.GOOS { - case "darwin": - return filepath.Join(homeDir(), "Library", "Caches", base) - case "windows": - for _, ev := range []string{"APPDATA", "CSIDL_APPDATA", "TEMP", "TMP"} { - if v := os.Getenv(ev); v != "" { - return filepath.Join(v, base) - } - } - // Worst case: - return filepath.Join(homeDir(), base) - } - if xdg := os.Getenv("XDG_CACHE_HOME"); xdg != "" { - return filepath.Join(xdg, base) + cache, err := os.UserCacheDir() + if err != nil { + // Fall back to the root directory. + cache = "/.cache" } - return filepath.Join(homeDir(), ".cache", base) + + return filepath.Join(cache, base) } diff --git a/vendor/golang.org/x/crypto/acme/autocert/renewal.go b/vendor/golang.org/x/crypto/acme/autocert/renewal.go index 0df7da78a6..93984f3866 100644 --- a/vendor/golang.org/x/crypto/acme/autocert/renewal.go +++ b/vendor/golang.org/x/crypto/acme/autocert/renewal.go @@ -11,9 +11,6 @@ import ( "time" ) -// renewJitter is the maximum deviation from Manager.RenewBefore. -const renewJitter = time.Hour - // domainRenewal tracks the state used by the periodic timers // renewing a single domain's cert. type domainRenewal struct { @@ -30,13 +27,13 @@ type domainRenewal struct { // defined by the certificate expiration time exp. // // If the timer is already started, calling start is a noop. -func (dr *domainRenewal) start(exp time.Time) { +func (dr *domainRenewal) start(notBefore, notAfter time.Time) { dr.timerMu.Lock() defer dr.timerMu.Unlock() if dr.timer != nil { return } - dr.timer = time.AfterFunc(dr.next(exp), dr.renew) + dr.timer = time.AfterFunc(dr.next(notBefore, notAfter), dr.renew) } // stop stops the cert renewal timer and waits for any in-flight calls to renew @@ -79,7 +76,7 @@ func (dr *domainRenewal) renew() { // TODO: rotate dr.key at some point? next, err := dr.do(ctx) if err != nil { - next = renewJitter / 2 + next = time.Hour / 2 next += time.Duration(pseudoRand.int63n(int64(next))) } testDidRenewLoop(next, err) @@ -107,8 +104,8 @@ func (dr *domainRenewal) do(ctx context.Context) (time.Duration, error) { // a race is likely unavoidable in a distributed environment // but we try nonetheless if tlscert, err := dr.m.cacheGet(ctx, dr.ck); err == nil { - next := dr.next(tlscert.Leaf.NotAfter) - if next > dr.m.renewBefore()+renewJitter { + next := dr.next(tlscert.Leaf.NotBefore, tlscert.Leaf.NotAfter) + if next > 0 { signer, ok := tlscert.PrivateKey.(crypto.Signer) if ok { state := &certState{ @@ -139,18 +136,23 @@ func (dr *domainRenewal) do(ctx context.Context) (time.Duration, error) { return 0, err } dr.updateState(state) - return dr.next(leaf.NotAfter), nil + return dr.next(leaf.NotBefore, leaf.NotAfter), nil } -func (dr *domainRenewal) next(expiry time.Time) time.Duration { - d := expiry.Sub(dr.m.now()) - dr.m.renewBefore() - // add a bit of randomness to renew deadline - n := pseudoRand.int63n(int64(renewJitter)) - d -= time.Duration(n) - if d < 0 { - return 0 +// next returns the wait time before the next renewal should start. +// If manager.RenewBefore is set, it uses that capped at 30 days, +// otherwise it uses a default of 1/3 of the cert lifetime. +// It builds in a jitter of 10% of the renew threshold, capped at 1 hour. +func (dr *domainRenewal) next(notBefore, notAfter time.Time) time.Duration { + threshold := min(notAfter.Sub(notBefore)/3, 30*24*time.Hour) + if dr.m.RenewBefore > 0 { + threshold = min(dr.m.RenewBefore, 30*24*time.Hour) } - return d + maxJitter := min(threshold/10, time.Hour) + jitter := pseudoRand.int63n(int64(maxJitter)) + renewAt := notAfter.Add(-(threshold - time.Duration(jitter))) + renewWait := renewAt.Sub(dr.m.now()) + return max(0, renewWait) } var testDidRenewLoop = func(next time.Duration, err error) {} diff --git a/vendor/golang.org/x/crypto/acme/http.go b/vendor/golang.org/x/crypto/acme/http.go index d92ff232fe..7d1052acd4 100644 --- a/vendor/golang.org/x/crypto/acme/http.go +++ b/vendor/golang.org/x/crypto/acme/http.go @@ -66,7 +66,7 @@ func (c *Client) retryTimer() *retryTimer { // The n argument is always bounded between 1 and 30. // The returned value is always greater than 0. func defaultBackoff(n int, r *http.Request, res *http.Response) time.Duration { - const max = 10 * time.Second + const maxVal = 10 * time.Second var jitter time.Duration if x, err := rand.Int(rand.Reader, big.NewInt(1000)); err == nil { // Set the minimum to 1ms to avoid a case where @@ -86,10 +86,7 @@ func defaultBackoff(n int, r *http.Request, res *http.Response) time.Duration { n = 30 } d := time.Duration(1< max { - return max - } - return d + return min(d, maxVal) } // retryAfter parses a Retry-After HTTP header value, @@ -131,7 +128,7 @@ func wantStatus(codes ...int) resOkay { func (c *Client) get(ctx context.Context, url string, ok resOkay) (*http.Response, error) { retry := c.retryTimer() for { - req, err := http.NewRequest("GET", url, nil) + req, err := http.NewRequestWithContext(ctx, "GET", url, nil) if err != nil { return nil, err } @@ -231,7 +228,7 @@ func (c *Client) postNoRetry(ctx context.Context, key crypto.Signer, url string, if err != nil { return nil, nil, err } - req, err := http.NewRequest("POST", url, bytes.NewReader(b)) + req, err := http.NewRequestWithContext(ctx, "POST", url, bytes.NewReader(b)) if err != nil { return nil, nil, err } diff --git a/vendor/golang.org/x/crypto/acme/jws.go b/vendor/golang.org/x/crypto/acme/jws.go index b38828d859..6850275665 100644 --- a/vendor/golang.org/x/crypto/acme/jws.go +++ b/vendor/golang.org/x/crypto/acme/jws.go @@ -92,7 +92,7 @@ func jwsEncodeJSON(claimset interface{}, key crypto.Signer, kid KeyID, nonce, ur if err != nil { return nil, err } - phead := base64.RawURLEncoding.EncodeToString([]byte(phJSON)) + phead := base64.RawURLEncoding.EncodeToString(phJSON) var payload string if val, ok := claimset.(string); ok { payload = val diff --git a/vendor/golang.org/x/crypto/acme/rfc8555.go b/vendor/golang.org/x/crypto/acme/rfc8555.go index 3152e531b6..976b27702a 100644 --- a/vendor/golang.org/x/crypto/acme/rfc8555.go +++ b/vendor/golang.org/x/crypto/acme/rfc8555.go @@ -232,7 +232,7 @@ func (c *Client) AuthorizeOrder(ctx context.Context, id []AuthzID, opt ...OrderO return responseOrder(res) } -// GetOrder retrives an order identified by the given URL. +// GetOrder retrieves an order identified by the given URL. // For orders created with AuthorizeOrder, the url value is Order.URI. // // If a caller needs to poll an order until its status is final, @@ -272,7 +272,7 @@ func (c *Client) WaitOrder(ctx context.Context, url string) (*Order, error) { case err != nil: // Skip and retry. case o.Status == StatusInvalid: - return nil, &OrderError{OrderURL: o.URI, Status: o.Status} + return nil, &OrderError{OrderURL: o.URI, Status: o.Status, Problem: o.Error} case o.Status == StatusReady || o.Status == StatusValid: return o, nil } @@ -369,7 +369,7 @@ func (c *Client) CreateOrderCert(ctx context.Context, url string, csr []byte, bu } // The only acceptable status post finalize and WaitOrder is "valid". if o.Status != StatusValid { - return nil, "", &OrderError{OrderURL: o.URI, Status: o.Status} + return nil, "", &OrderError{OrderURL: o.URI, Status: o.Status, Problem: o.Error} } crt, err := c.fetchCertRFC(ctx, o.CertURL, bundle) return crt, o.CertURL, err diff --git a/vendor/golang.org/x/crypto/acme/types.go b/vendor/golang.org/x/crypto/acme/types.go index 4888726fec..322640c453 100644 --- a/vendor/golang.org/x/crypto/acme/types.go +++ b/vendor/golang.org/x/crypto/acme/types.go @@ -7,6 +7,7 @@ package acme import ( "crypto" "crypto/x509" + "encoding/json" "errors" "fmt" "net/http" @@ -55,6 +56,10 @@ var ( // ErrNoAccount indicates that the Client's key has not been registered with the CA. ErrNoAccount = errors.New("acme: account does not exist") + + // errPreAuthorizationNotSupported indicates that the server does not + // support pre-authorization of identifiers. + errPreAuthorizationNotSupported = errors.New("acme: pre-authorization is not supported") ) // A Subproblem describes an ACME subproblem as reported in an Error. @@ -149,13 +154,16 @@ func (a *AuthorizationError) Error() string { // OrderError is returned from Client's order related methods. // It indicates the order is unusable and the clients should start over with -// AuthorizeOrder. +// AuthorizeOrder. A Problem description may be provided with details on +// what caused the order to become unusable. // // The clients can still fetch the order object from CA using GetOrder // to inspect its state. type OrderError struct { OrderURL string Status string + // Problem is the error that occurred while processing the order. + Problem *Error } func (oe *OrderError) Error() string { @@ -288,7 +296,7 @@ type Directory struct { // KeyChangeURL allows to perform account key rollover flow. KeyChangeURL string - // Term is a URI identifying the current terms of service. + // Terms is a URI identifying the current terms of service. Terms string // Website is an HTTP or HTTPS URL locating a website @@ -527,6 +535,16 @@ type Challenge struct { // when this challenge was used. // The type of a non-nil value is *Error. Error error + + // Payload is the JSON-formatted payload that the client sends + // to the server to indicate it is ready to respond to the challenge. + // When unset, it defaults to an empty JSON object: {}. + // For most challenges, the client must not set Payload, + // see https://tools.ietf.org/html/rfc8555#section-7.5.1. + // Payload is used only for newer challenges (such as "device-attest-01") + // where the client must send additional data for the server to validate + // the challenge. + Payload json.RawMessage } // wireChallenge is ACME JSON challenge representation. @@ -604,7 +622,7 @@ func (*certOptKey) privateCertOpt() {} // // In TLS ChallengeCert methods, the template is also used as parent, // resulting in a self-signed certificate. -// The DNSNames field of t is always overwritten for tls-sni challenge certs. +// The DNSNames or IPAddresses fields of t are always overwritten for tls-alpn challenge certs. func WithTemplate(t *x509.Certificate) CertOption { return (*certOptTemplate)(t) } diff --git a/vendor/golang.org/x/crypto/bcrypt/bcrypt.go b/vendor/golang.org/x/crypto/bcrypt/bcrypt.go index dc9311870a..3e7f8df871 100644 --- a/vendor/golang.org/x/crypto/bcrypt/bcrypt.go +++ b/vendor/golang.org/x/crypto/bcrypt/bcrypt.go @@ -50,7 +50,7 @@ func (ih InvalidHashPrefixError) Error() string { type InvalidCostError int func (ic InvalidCostError) Error() string { - return fmt.Sprintf("crypto/bcrypt: cost %d is outside allowed range (%d,%d)", int(ic), MinCost, MaxCost) + return fmt.Sprintf("crypto/bcrypt: cost %d is outside allowed inclusive range %d..%d", int(ic), MinCost, MaxCost) } const ( diff --git a/vendor/golang.org/x/crypto/chacha20/chacha_arm64.s b/vendor/golang.org/x/crypto/chacha20/chacha_arm64.s index 7dd2638e88..769af387e2 100644 --- a/vendor/golang.org/x/crypto/chacha20/chacha_arm64.s +++ b/vendor/golang.org/x/crypto/chacha20/chacha_arm64.s @@ -29,7 +29,7 @@ loop: MOVD $NUM_ROUNDS, R21 VLD1 (R11), [V30.S4, V31.S4] - // load contants + // load constants // VLD4R (R10), [V0.S4, V1.S4, V2.S4, V3.S4] WORD $0x4D60E940 diff --git a/vendor/golang.org/x/crypto/chacha20/chacha_noasm.go b/vendor/golang.org/x/crypto/chacha20/chacha_noasm.go index db42e6676a..c709b72847 100644 --- a/vendor/golang.org/x/crypto/chacha20/chacha_noasm.go +++ b/vendor/golang.org/x/crypto/chacha20/chacha_noasm.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -//go:build (!arm64 && !s390x && !ppc64le) || !gc || purego +//go:build (!arm64 && !s390x && !ppc64 && !ppc64le) || !gc || purego package chacha20 diff --git a/vendor/golang.org/x/crypto/chacha20/chacha_ppc64le.go b/vendor/golang.org/x/crypto/chacha20/chacha_ppc64x.go similarity index 89% rename from vendor/golang.org/x/crypto/chacha20/chacha_ppc64le.go rename to vendor/golang.org/x/crypto/chacha20/chacha_ppc64x.go index 3a4287f990..bd183d9ba1 100644 --- a/vendor/golang.org/x/crypto/chacha20/chacha_ppc64le.go +++ b/vendor/golang.org/x/crypto/chacha20/chacha_ppc64x.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -//go:build gc && !purego +//go:build gc && !purego && (ppc64 || ppc64le) package chacha20 diff --git a/vendor/golang.org/x/crypto/chacha20/chacha_ppc64le.s b/vendor/golang.org/x/crypto/chacha20/chacha_ppc64x.s similarity index 76% rename from vendor/golang.org/x/crypto/chacha20/chacha_ppc64le.s rename to vendor/golang.org/x/crypto/chacha20/chacha_ppc64x.s index c672ccf698..a660b4112f 100644 --- a/vendor/golang.org/x/crypto/chacha20/chacha_ppc64le.s +++ b/vendor/golang.org/x/crypto/chacha20/chacha_ppc64x.s @@ -19,7 +19,7 @@ // The differences in this and the original implementation are // due to the calling conventions and initialization of constants. -//go:build gc && !purego +//go:build gc && !purego && (ppc64 || ppc64le) #include "textflag.h" @@ -36,32 +36,68 @@ // for VPERMXOR #define MASK R18 -DATA consts<>+0x00(SB)/8, $0x3320646e61707865 -DATA consts<>+0x08(SB)/8, $0x6b20657479622d32 -DATA consts<>+0x10(SB)/8, $0x0000000000000001 -DATA consts<>+0x18(SB)/8, $0x0000000000000000 -DATA consts<>+0x20(SB)/8, $0x0000000000000004 -DATA consts<>+0x28(SB)/8, $0x0000000000000000 -DATA consts<>+0x30(SB)/8, $0x0a0b08090e0f0c0d -DATA consts<>+0x38(SB)/8, $0x0203000106070405 -DATA consts<>+0x40(SB)/8, $0x090a0b080d0e0f0c -DATA consts<>+0x48(SB)/8, $0x0102030005060704 -DATA consts<>+0x50(SB)/8, $0x6170786561707865 -DATA consts<>+0x58(SB)/8, $0x6170786561707865 -DATA consts<>+0x60(SB)/8, $0x3320646e3320646e -DATA consts<>+0x68(SB)/8, $0x3320646e3320646e -DATA consts<>+0x70(SB)/8, $0x79622d3279622d32 -DATA consts<>+0x78(SB)/8, $0x79622d3279622d32 -DATA consts<>+0x80(SB)/8, $0x6b2065746b206574 -DATA consts<>+0x88(SB)/8, $0x6b2065746b206574 -DATA consts<>+0x90(SB)/8, $0x0000000100000000 -DATA consts<>+0x98(SB)/8, $0x0000000300000002 -DATA consts<>+0xa0(SB)/8, $0x5566774411223300 -DATA consts<>+0xa8(SB)/8, $0xddeeffcc99aabb88 -DATA consts<>+0xb0(SB)/8, $0x6677445522330011 -DATA consts<>+0xb8(SB)/8, $0xeeffccddaabb8899 +DATA consts<>+0x00(SB)/4, $0x61707865 +DATA consts<>+0x04(SB)/4, $0x3320646e +DATA consts<>+0x08(SB)/4, $0x79622d32 +DATA consts<>+0x0c(SB)/4, $0x6b206574 +DATA consts<>+0x10(SB)/4, $0x00000001 +DATA consts<>+0x14(SB)/4, $0x00000000 +DATA consts<>+0x18(SB)/4, $0x00000000 +DATA consts<>+0x1c(SB)/4, $0x00000000 +DATA consts<>+0x20(SB)/4, $0x00000004 +DATA consts<>+0x24(SB)/4, $0x00000000 +DATA consts<>+0x28(SB)/4, $0x00000000 +DATA consts<>+0x2c(SB)/4, $0x00000000 +DATA consts<>+0x30(SB)/4, $0x0e0f0c0d +DATA consts<>+0x34(SB)/4, $0x0a0b0809 +DATA consts<>+0x38(SB)/4, $0x06070405 +DATA consts<>+0x3c(SB)/4, $0x02030001 +DATA consts<>+0x40(SB)/4, $0x0d0e0f0c +DATA consts<>+0x44(SB)/4, $0x090a0b08 +DATA consts<>+0x48(SB)/4, $0x05060704 +DATA consts<>+0x4c(SB)/4, $0x01020300 +DATA consts<>+0x50(SB)/4, $0x61707865 +DATA consts<>+0x54(SB)/4, $0x61707865 +DATA consts<>+0x58(SB)/4, $0x61707865 +DATA consts<>+0x5c(SB)/4, $0x61707865 +DATA consts<>+0x60(SB)/4, $0x3320646e +DATA consts<>+0x64(SB)/4, $0x3320646e +DATA consts<>+0x68(SB)/4, $0x3320646e +DATA consts<>+0x6c(SB)/4, $0x3320646e +DATA consts<>+0x70(SB)/4, $0x79622d32 +DATA consts<>+0x74(SB)/4, $0x79622d32 +DATA consts<>+0x78(SB)/4, $0x79622d32 +DATA consts<>+0x7c(SB)/4, $0x79622d32 +DATA consts<>+0x80(SB)/4, $0x6b206574 +DATA consts<>+0x84(SB)/4, $0x6b206574 +DATA consts<>+0x88(SB)/4, $0x6b206574 +DATA consts<>+0x8c(SB)/4, $0x6b206574 +DATA consts<>+0x90(SB)/4, $0x00000000 +DATA consts<>+0x94(SB)/4, $0x00000001 +DATA consts<>+0x98(SB)/4, $0x00000002 +DATA consts<>+0x9c(SB)/4, $0x00000003 +DATA consts<>+0xa0(SB)/4, $0x11223300 +DATA consts<>+0xa4(SB)/4, $0x55667744 +DATA consts<>+0xa8(SB)/4, $0x99aabb88 +DATA consts<>+0xac(SB)/4, $0xddeeffcc +DATA consts<>+0xb0(SB)/4, $0x22330011 +DATA consts<>+0xb4(SB)/4, $0x66774455 +DATA consts<>+0xb8(SB)/4, $0xaabb8899 +DATA consts<>+0xbc(SB)/4, $0xeeffccdd GLOBL consts<>(SB), RODATA, $0xc0 +#ifdef GOARCH_ppc64 +#define BE_XXBRW_INIT() \ + LVSL (R0)(R0), V24 \ + VSPLTISB $3, V25 \ + VXOR V24, V25, V24 \ + +#define BE_XXBRW(vr) VPERM vr, vr, V24, vr +#else +#define BE_XXBRW_INIT() +#define BE_XXBRW(vr) +#endif + //func chaCha20_ctr32_vsx(out, inp *byte, len int, key *[8]uint32, counter *uint32) TEXT ·chaCha20_ctr32_vsx(SB),NOSPLIT,$64-40 MOVD out+0(FP), OUT @@ -94,6 +130,8 @@ TEXT ·chaCha20_ctr32_vsx(SB),NOSPLIT,$64-40 // Clear V27 VXOR V27, V27, V27 + BE_XXBRW_INIT() + // V28 LXVW4X (CONSTBASE)(R11), VS60 @@ -299,6 +337,11 @@ loop_vsx: VADDUWM V8, V18, V8 VADDUWM V12, V19, V12 + BE_XXBRW(V0) + BE_XXBRW(V4) + BE_XXBRW(V8) + BE_XXBRW(V12) + CMPU LEN, $64 BLT tail_vsx @@ -327,6 +370,11 @@ loop_vsx: VADDUWM V9, V18, V8 VADDUWM V13, V19, V12 + BE_XXBRW(V0) + BE_XXBRW(V4) + BE_XXBRW(V8) + BE_XXBRW(V12) + CMPU LEN, $64 BLT tail_vsx @@ -334,8 +382,8 @@ loop_vsx: LXVW4X (INP)(R8), VS60 LXVW4X (INP)(R9), VS61 LXVW4X (INP)(R10), VS62 - VXOR V27, V0, V27 + VXOR V27, V0, V27 VXOR V28, V4, V28 VXOR V29, V8, V29 VXOR V30, V12, V30 @@ -354,6 +402,11 @@ loop_vsx: VADDUWM V10, V18, V8 VADDUWM V14, V19, V12 + BE_XXBRW(V0) + BE_XXBRW(V4) + BE_XXBRW(V8) + BE_XXBRW(V12) + CMPU LEN, $64 BLT tail_vsx @@ -381,6 +434,11 @@ loop_vsx: VADDUWM V11, V18, V8 VADDUWM V15, V19, V12 + BE_XXBRW(V0) + BE_XXBRW(V4) + BE_XXBRW(V8) + BE_XXBRW(V12) + CMPU LEN, $64 BLT tail_vsx @@ -408,9 +466,9 @@ loop_vsx: done_vsx: // Increment counter by number of 64 byte blocks - MOVD (CNT), R14 + MOVWZ (CNT), R14 ADD BLOCKS, R14 - MOVD R14, (CNT) + MOVWZ R14, (CNT) RET tail_vsx: diff --git a/vendor/golang.org/x/crypto/curve25519/curve25519.go b/vendor/golang.org/x/crypto/curve25519/curve25519.go index 21ca3b2ee4..048faef3a5 100644 --- a/vendor/golang.org/x/crypto/curve25519/curve25519.go +++ b/vendor/golang.org/x/crypto/curve25519/curve25519.go @@ -3,11 +3,14 @@ // license that can be found in the LICENSE file. // Package curve25519 provides an implementation of the X25519 function, which -// performs scalar multiplication on the elliptic curve known as Curve25519. -// See RFC 7748. +// performs scalar multiplication on the elliptic curve known as Curve25519 +// according to [RFC 7748]. // -// This package is a wrapper for the X25519 implementation -// in the crypto/ecdh package. +// The curve25519 package is a wrapper for the X25519 implementation in the +// crypto/ecdh package. It is [frozen] and is not accepting new features. +// +// [RFC 7748]: https://datatracker.ietf.org/doc/html/rfc7748 +// [frozen]: https://go.dev/wiki/Frozen package curve25519 import "crypto/ecdh" @@ -36,7 +39,7 @@ func ScalarBaseMult(dst, scalar *[32]byte) { curve := ecdh.X25519() priv, err := curve.NewPrivateKey(scalar[:]) if err != nil { - panic("curve25519: internal error: scalarBaseMult was not 32 bytes") + panic("curve25519: " + err.Error()) } copy(dst[:], priv.PublicKey().Bytes()) } diff --git a/vendor/golang.org/x/crypto/internal/poly1305/mac_noasm.go b/vendor/golang.org/x/crypto/internal/poly1305/mac_noasm.go index 333da285b3..8d99551fee 100644 --- a/vendor/golang.org/x/crypto/internal/poly1305/mac_noasm.go +++ b/vendor/golang.org/x/crypto/internal/poly1305/mac_noasm.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -//go:build (!amd64 && !ppc64le && !s390x) || !gc || purego +//go:build (!amd64 && !loong64 && !ppc64le && !ppc64 && !s390x) || !gc || purego package poly1305 diff --git a/vendor/golang.org/x/crypto/internal/poly1305/sum_amd64.s b/vendor/golang.org/x/crypto/internal/poly1305/sum_amd64.s index e0d3c64756..133757384b 100644 --- a/vendor/golang.org/x/crypto/internal/poly1305/sum_amd64.s +++ b/vendor/golang.org/x/crypto/internal/poly1305/sum_amd64.s @@ -1,108 +1,93 @@ -// Copyright 2012 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. +// Code generated by command: go run sum_amd64_asm.go -out ../sum_amd64.s -pkg poly1305. DO NOT EDIT. //go:build gc && !purego -#include "textflag.h" - -#define POLY1305_ADD(msg, h0, h1, h2) \ - ADDQ 0(msg), h0; \ - ADCQ 8(msg), h1; \ - ADCQ $1, h2; \ - LEAQ 16(msg), msg - -#define POLY1305_MUL(h0, h1, h2, r0, r1, t0, t1, t2, t3) \ - MOVQ r0, AX; \ - MULQ h0; \ - MOVQ AX, t0; \ - MOVQ DX, t1; \ - MOVQ r0, AX; \ - MULQ h1; \ - ADDQ AX, t1; \ - ADCQ $0, DX; \ - MOVQ r0, t2; \ - IMULQ h2, t2; \ - ADDQ DX, t2; \ - \ - MOVQ r1, AX; \ - MULQ h0; \ - ADDQ AX, t1; \ - ADCQ $0, DX; \ - MOVQ DX, h0; \ - MOVQ r1, t3; \ - IMULQ h2, t3; \ - MOVQ r1, AX; \ - MULQ h1; \ - ADDQ AX, t2; \ - ADCQ DX, t3; \ - ADDQ h0, t2; \ - ADCQ $0, t3; \ - \ - MOVQ t0, h0; \ - MOVQ t1, h1; \ - MOVQ t2, h2; \ - ANDQ $3, h2; \ - MOVQ t2, t0; \ - ANDQ $0xFFFFFFFFFFFFFFFC, t0; \ - ADDQ t0, h0; \ - ADCQ t3, h1; \ - ADCQ $0, h2; \ - SHRQ $2, t3, t2; \ - SHRQ $2, t3; \ - ADDQ t2, h0; \ - ADCQ t3, h1; \ - ADCQ $0, h2 - -// func update(state *[7]uint64, msg []byte) +// func update(state *macState, msg []byte) TEXT ·update(SB), $0-32 MOVQ state+0(FP), DI MOVQ msg_base+8(FP), SI MOVQ msg_len+16(FP), R15 - - MOVQ 0(DI), R8 // h0 - MOVQ 8(DI), R9 // h1 - MOVQ 16(DI), R10 // h2 - MOVQ 24(DI), R11 // r0 - MOVQ 32(DI), R12 // r1 - - CMPQ R15, $16 + MOVQ (DI), R8 + MOVQ 8(DI), R9 + MOVQ 16(DI), R10 + MOVQ 24(DI), R11 + MOVQ 32(DI), R12 + CMPQ R15, $0x10 JB bytes_between_0_and_15 loop: - POLY1305_ADD(SI, R8, R9, R10) + ADDQ (SI), R8 + ADCQ 8(SI), R9 + ADCQ $0x01, R10 + LEAQ 16(SI), SI multiply: - POLY1305_MUL(R8, R9, R10, R11, R12, BX, CX, R13, R14) - SUBQ $16, R15 - CMPQ R15, $16 - JAE loop + MOVQ R11, AX + MULQ R8 + MOVQ AX, BX + MOVQ DX, CX + MOVQ R11, AX + MULQ R9 + ADDQ AX, CX + ADCQ $0x00, DX + MOVQ R11, R13 + IMULQ R10, R13 + ADDQ DX, R13 + MOVQ R12, AX + MULQ R8 + ADDQ AX, CX + ADCQ $0x00, DX + MOVQ DX, R8 + MOVQ R12, R14 + IMULQ R10, R14 + MOVQ R12, AX + MULQ R9 + ADDQ AX, R13 + ADCQ DX, R14 + ADDQ R8, R13 + ADCQ $0x00, R14 + MOVQ BX, R8 + MOVQ CX, R9 + MOVQ R13, R10 + ANDQ $0x03, R10 + MOVQ R13, BX + ANDQ $-4, BX + ADDQ BX, R8 + ADCQ R14, R9 + ADCQ $0x00, R10 + SHRQ $0x02, R14, R13 + SHRQ $0x02, R14 + ADDQ R13, R8 + ADCQ R14, R9 + ADCQ $0x00, R10 + SUBQ $0x10, R15 + CMPQ R15, $0x10 + JAE loop bytes_between_0_and_15: TESTQ R15, R15 JZ done - MOVQ $1, BX + MOVQ $0x00000001, BX XORQ CX, CX XORQ R13, R13 ADDQ R15, SI flush_buffer: - SHLQ $8, BX, CX - SHLQ $8, BX + SHLQ $0x08, BX, CX + SHLQ $0x08, BX MOVB -1(SI), R13 XORQ R13, BX DECQ SI DECQ R15 JNZ flush_buffer - ADDQ BX, R8 ADCQ CX, R9 - ADCQ $0, R10 - MOVQ $16, R15 + ADCQ $0x00, R10 + MOVQ $0x00000010, R15 JMP multiply done: - MOVQ R8, 0(DI) + MOVQ R8, (DI) MOVQ R9, 8(DI) MOVQ R10, 16(DI) RET diff --git a/vendor/golang.org/x/crypto/internal/poly1305/sum_amd64.go b/vendor/golang.org/x/crypto/internal/poly1305/sum_asm.go similarity index 94% rename from vendor/golang.org/x/crypto/internal/poly1305/sum_amd64.go rename to vendor/golang.org/x/crypto/internal/poly1305/sum_asm.go index 164cd47d32..315b84ac39 100644 --- a/vendor/golang.org/x/crypto/internal/poly1305/sum_amd64.go +++ b/vendor/golang.org/x/crypto/internal/poly1305/sum_asm.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -//go:build gc && !purego +//go:build gc && !purego && (amd64 || loong64 || ppc64 || ppc64le) package poly1305 diff --git a/vendor/golang.org/x/crypto/internal/poly1305/sum_loong64.s b/vendor/golang.org/x/crypto/internal/poly1305/sum_loong64.s new file mode 100644 index 0000000000..bc8361da40 --- /dev/null +++ b/vendor/golang.org/x/crypto/internal/poly1305/sum_loong64.s @@ -0,0 +1,123 @@ +// Copyright 2025 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build gc && !purego + +// func update(state *macState, msg []byte) +TEXT ·update(SB), $0-32 + MOVV state+0(FP), R4 + MOVV msg_base+8(FP), R5 + MOVV msg_len+16(FP), R6 + + MOVV $0x10, R7 + + MOVV (R4), R8 // h0 + MOVV 8(R4), R9 // h1 + MOVV 16(R4), R10 // h2 + MOVV 24(R4), R11 // r0 + MOVV 32(R4), R12 // r1 + + BLT R6, R7, bytes_between_0_and_15 + +loop: + MOVV (R5), R14 // msg[0:8] + MOVV 8(R5), R16 // msg[8:16] + ADDV R14, R8, R8 // h0 (x1 + y1 = z1', if z1' < x1 then z1' overflow) + ADDV R16, R9, R27 + SGTU R14, R8, R24 // h0.carry + SGTU R9, R27, R28 + ADDV R27, R24, R9 // h1 + SGTU R27, R9, R24 + OR R24, R28, R24 // h1.carry + ADDV $0x01, R24, R24 + ADDV R10, R24, R10 // h2 + + ADDV $16, R5, R5 // msg = msg[16:] + +multiply: + MULV R8, R11, R14 // h0r0.lo + MULHVU R8, R11, R15 // h0r0.hi + MULV R9, R11, R13 // h1r0.lo + MULHVU R9, R11, R16 // h1r0.hi + ADDV R13, R15, R15 + SGTU R13, R15, R24 + ADDV R24, R16, R16 + MULV R10, R11, R25 + ADDV R16, R25, R25 + MULV R8, R12, R13 // h0r1.lo + MULHVU R8, R12, R16 // h0r1.hi + ADDV R13, R15, R15 + SGTU R13, R15, R24 + ADDV R24, R16, R16 + MOVV R16, R8 + MULV R10, R12, R26 // h2r1 + MULV R9, R12, R13 // h1r1.lo + MULHVU R9, R12, R16 // h1r1.hi + ADDV R13, R25, R25 + ADDV R16, R26, R27 + SGTU R13, R25, R24 + ADDV R27, R24, R26 + ADDV R8, R25, R25 + SGTU R8, R25, R24 + ADDV R24, R26, R26 + AND $3, R25, R10 + AND $-4, R25, R17 + ADDV R17, R14, R8 + ADDV R26, R15, R27 + SGTU R17, R8, R24 + SGTU R26, R27, R28 + ADDV R27, R24, R9 + SGTU R27, R9, R24 + OR R24, R28, R24 + ADDV R24, R10, R10 + SLLV $62, R26, R27 + SRLV $2, R25, R28 + SRLV $2, R26, R26 + OR R27, R28, R25 + ADDV R25, R8, R8 + ADDV R26, R9, R27 + SGTU R25, R8, R24 + SGTU R26, R27, R28 + ADDV R27, R24, R9 + SGTU R27, R9, R24 + OR R24, R28, R24 + ADDV R24, R10, R10 + + SUBV $16, R6, R6 + BGE R6, R7, loop + +bytes_between_0_and_15: + BEQ R6, R0, done + MOVV $1, R14 + XOR R15, R15 + ADDV R6, R5, R5 + +flush_buffer: + MOVBU -1(R5), R25 + SRLV $56, R14, R24 + SLLV $8, R15, R28 + SLLV $8, R14, R14 + OR R24, R28, R15 + XOR R25, R14, R14 + SUBV $1, R6, R6 + SUBV $1, R5, R5 + BNE R6, R0, flush_buffer + + ADDV R14, R8, R8 + SGTU R14, R8, R24 + ADDV R15, R9, R27 + SGTU R15, R27, R28 + ADDV R27, R24, R9 + SGTU R27, R9, R24 + OR R24, R28, R24 + ADDV R10, R24, R10 + + MOVV $16, R6 + JMP multiply + +done: + MOVV R8, (R4) + MOVV R9, 8(R4) + MOVV R10, 16(R4) + RET diff --git a/vendor/golang.org/x/crypto/internal/poly1305/sum_ppc64le.go b/vendor/golang.org/x/crypto/internal/poly1305/sum_ppc64le.go deleted file mode 100644 index 4aec4874b5..0000000000 --- a/vendor/golang.org/x/crypto/internal/poly1305/sum_ppc64le.go +++ /dev/null @@ -1,47 +0,0 @@ -// Copyright 2019 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build gc && !purego - -package poly1305 - -//go:noescape -func update(state *macState, msg []byte) - -// mac is a wrapper for macGeneric that redirects calls that would have gone to -// updateGeneric to update. -// -// Its Write and Sum methods are otherwise identical to the macGeneric ones, but -// using function pointers would carry a major performance cost. -type mac struct{ macGeneric } - -func (h *mac) Write(p []byte) (int, error) { - nn := len(p) - if h.offset > 0 { - n := copy(h.buffer[h.offset:], p) - if h.offset+n < TagSize { - h.offset += n - return nn, nil - } - p = p[n:] - h.offset = 0 - update(&h.macState, h.buffer[:]) - } - if n := len(p) - (len(p) % TagSize); n > 0 { - update(&h.macState, p[:n]) - p = p[n:] - } - if len(p) > 0 { - h.offset += copy(h.buffer[h.offset:], p) - } - return nn, nil -} - -func (h *mac) Sum(out *[16]byte) { - state := h.macState - if h.offset > 0 { - update(&state, h.buffer[:h.offset]) - } - finalize(out, &state.h, &state.s) -} diff --git a/vendor/golang.org/x/crypto/internal/poly1305/sum_ppc64le.s b/vendor/golang.org/x/crypto/internal/poly1305/sum_ppc64x.s similarity index 89% rename from vendor/golang.org/x/crypto/internal/poly1305/sum_ppc64le.s rename to vendor/golang.org/x/crypto/internal/poly1305/sum_ppc64x.s index b3c1699bff..6899a1dabc 100644 --- a/vendor/golang.org/x/crypto/internal/poly1305/sum_ppc64le.s +++ b/vendor/golang.org/x/crypto/internal/poly1305/sum_ppc64x.s @@ -2,15 +2,25 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -//go:build gc && !purego +//go:build gc && !purego && (ppc64 || ppc64le) #include "textflag.h" // This was ported from the amd64 implementation. +#ifdef GOARCH_ppc64le +#define LE_MOVD MOVD +#define LE_MOVWZ MOVWZ +#define LE_MOVHZ MOVHZ +#else +#define LE_MOVD MOVDBR +#define LE_MOVWZ MOVWBR +#define LE_MOVHZ MOVHBR +#endif + #define POLY1305_ADD(msg, h0, h1, h2, t0, t1, t2) \ - MOVD (msg), t0; \ - MOVD 8(msg), t1; \ + LE_MOVD (msg)( R0), t0; \ + LE_MOVD (msg)(R24), t1; \ MOVD $1, t2; \ ADDC t0, h0, h0; \ ADDE t1, h1, h1; \ @@ -50,10 +60,6 @@ ADDE t3, h1, h1; \ ADDZE h2 -DATA ·poly1305Mask<>+0x00(SB)/8, $0x0FFFFFFC0FFFFFFF -DATA ·poly1305Mask<>+0x08(SB)/8, $0x0FFFFFFC0FFFFFFC -GLOBL ·poly1305Mask<>(SB), RODATA, $16 - // func update(state *[7]uint64, msg []byte) TEXT ·update(SB), $0-32 MOVD state+0(FP), R3 @@ -66,6 +72,8 @@ TEXT ·update(SB), $0-32 MOVD 24(R3), R11 // r0 MOVD 32(R3), R12 // r1 + MOVD $8, R24 + CMP R5, $16 BLT bytes_between_0_and_15 @@ -94,7 +102,7 @@ flush_buffer: // Greater than 8 -- load the rightmost remaining bytes in msg // and put into R17 (h1) - MOVD (R4)(R21), R17 + LE_MOVD (R4)(R21), R17 MOVD $16, R22 // Find the offset to those bytes @@ -118,7 +126,7 @@ just1: BLT less8 // Exactly 8 - MOVD (R4), R16 + LE_MOVD (R4), R16 CMP R17, $0 @@ -133,7 +141,7 @@ less8: MOVD $0, R22 // shift count CMP R5, $4 BLT less4 - MOVWZ (R4), R16 + LE_MOVWZ (R4), R16 ADD $4, R4 ADD $-4, R5 MOVD $32, R22 @@ -141,7 +149,7 @@ less8: less4: CMP R5, $2 BLT less2 - MOVHZ (R4), R21 + LE_MOVHZ (R4), R21 SLD R22, R21, R21 OR R16, R21, R16 ADD $16, R22 diff --git a/vendor/golang.org/x/crypto/salsa20/salsa/hsalsa20.go b/vendor/golang.org/x/crypto/salsa20/salsa/hsalsa20.go index 3685b34458..75df77406d 100644 --- a/vendor/golang.org/x/crypto/salsa20/salsa/hsalsa20.go +++ b/vendor/golang.org/x/crypto/salsa20/salsa/hsalsa20.go @@ -3,6 +3,10 @@ // license that can be found in the LICENSE file. // Package salsa provides low-level access to functions in the Salsa family. +// +// Deprecated: this package exposes unsafe low-level operations. New applications +// should consider using the AEAD construction in golang.org/x/crypto/chacha20poly1305 +// instead. Existing users should migrate to golang.org/x/crypto/salsa20. package salsa import "math/bits" diff --git a/vendor/golang.org/x/crypto/salsa20/salsa/salsa20_amd64.s b/vendor/golang.org/x/crypto/salsa20/salsa/salsa20_amd64.s index fcce0234b6..3883e0ec22 100644 --- a/vendor/golang.org/x/crypto/salsa20/salsa/salsa20_amd64.s +++ b/vendor/golang.org/x/crypto/salsa20/salsa/salsa20_amd64.s @@ -1,880 +1,880 @@ -// Copyright 2012 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. +// Code generated by command: go run salsa20_amd64_asm.go -out ../salsa20_amd64.s -pkg salsa. DO NOT EDIT. //go:build amd64 && !purego && gc -// This code was translated into a form compatible with 6a from the public -// domain sources in SUPERCOP: https://bench.cr.yp.to/supercop.html +// func salsa2020XORKeyStream(out *byte, in *byte, n uint64, nonce *byte, key *byte) +// Requires: SSE2 +TEXT ·salsa2020XORKeyStream(SB), $456-40 + // This needs up to 64 bytes at 360(R12); hence the non-obvious frame size. + MOVQ out+0(FP), DI + MOVQ in+8(FP), SI + MOVQ n+16(FP), DX + MOVQ nonce+24(FP), CX + MOVQ key+32(FP), R8 + MOVQ SP, R12 + ADDQ $0x1f, R12 + ANDQ $-32, R12 + MOVQ DX, R9 + MOVQ CX, DX + MOVQ R8, R10 + CMPQ R9, $0x00 + JBE DONE + MOVL 20(R10), CX + MOVL (R10), R8 + MOVL (DX), AX + MOVL 16(R10), R11 + MOVL CX, (R12) + MOVL R8, 4(R12) + MOVL AX, 8(R12) + MOVL R11, 12(R12) + MOVL 8(DX), CX + MOVL 24(R10), R8 + MOVL 4(R10), AX + MOVL 4(DX), R11 + MOVL CX, 16(R12) + MOVL R8, 20(R12) + MOVL AX, 24(R12) + MOVL R11, 28(R12) + MOVL 12(DX), CX + MOVL 12(R10), DX + MOVL 28(R10), R8 + MOVL 8(R10), AX + MOVL DX, 32(R12) + MOVL CX, 36(R12) + MOVL R8, 40(R12) + MOVL AX, 44(R12) + MOVQ $0x61707865, DX + MOVQ $0x3320646e, CX + MOVQ $0x79622d32, R8 + MOVQ $0x6b206574, AX + MOVL DX, 48(R12) + MOVL CX, 52(R12) + MOVL R8, 56(R12) + MOVL AX, 60(R12) + CMPQ R9, $0x00000100 + JB BYTESBETWEEN1AND255 + MOVOA 48(R12), X0 + PSHUFL $0x55, X0, X1 + PSHUFL $0xaa, X0, X2 + PSHUFL $0xff, X0, X3 + PSHUFL $0x00, X0, X0 + MOVOA X1, 64(R12) + MOVOA X2, 80(R12) + MOVOA X3, 96(R12) + MOVOA X0, 112(R12) + MOVOA (R12), X0 + PSHUFL $0xaa, X0, X1 + PSHUFL $0xff, X0, X2 + PSHUFL $0x00, X0, X3 + PSHUFL $0x55, X0, X0 + MOVOA X1, 128(R12) + MOVOA X2, 144(R12) + MOVOA X3, 160(R12) + MOVOA X0, 176(R12) + MOVOA 16(R12), X0 + PSHUFL $0xff, X0, X1 + PSHUFL $0x55, X0, X2 + PSHUFL $0xaa, X0, X0 + MOVOA X1, 192(R12) + MOVOA X2, 208(R12) + MOVOA X0, 224(R12) + MOVOA 32(R12), X0 + PSHUFL $0x00, X0, X1 + PSHUFL $0xaa, X0, X2 + PSHUFL $0xff, X0, X0 + MOVOA X1, 240(R12) + MOVOA X2, 256(R12) + MOVOA X0, 272(R12) -// func salsa2020XORKeyStream(out, in *byte, n uint64, nonce, key *byte) -// This needs up to 64 bytes at 360(R12); hence the non-obvious frame size. -TEXT ·salsa2020XORKeyStream(SB),0,$456-40 // frame = 424 + 32 byte alignment - MOVQ out+0(FP),DI - MOVQ in+8(FP),SI - MOVQ n+16(FP),DX - MOVQ nonce+24(FP),CX - MOVQ key+32(FP),R8 +BYTESATLEAST256: + MOVL 16(R12), DX + MOVL 36(R12), CX + MOVL DX, 288(R12) + MOVL CX, 304(R12) + SHLQ $0x20, CX + ADDQ CX, DX + ADDQ $0x01, DX + MOVQ DX, CX + SHRQ $0x20, CX + MOVL DX, 292(R12) + MOVL CX, 308(R12) + ADDQ $0x01, DX + MOVQ DX, CX + SHRQ $0x20, CX + MOVL DX, 296(R12) + MOVL CX, 312(R12) + ADDQ $0x01, DX + MOVQ DX, CX + SHRQ $0x20, CX + MOVL DX, 300(R12) + MOVL CX, 316(R12) + ADDQ $0x01, DX + MOVQ DX, CX + SHRQ $0x20, CX + MOVL DX, 16(R12) + MOVL CX, 36(R12) + MOVQ R9, 352(R12) + MOVQ $0x00000014, DX + MOVOA 64(R12), X0 + MOVOA 80(R12), X1 + MOVOA 96(R12), X2 + MOVOA 256(R12), X3 + MOVOA 272(R12), X4 + MOVOA 128(R12), X5 + MOVOA 144(R12), X6 + MOVOA 176(R12), X7 + MOVOA 192(R12), X8 + MOVOA 208(R12), X9 + MOVOA 224(R12), X10 + MOVOA 304(R12), X11 + MOVOA 112(R12), X12 + MOVOA 160(R12), X13 + MOVOA 240(R12), X14 + MOVOA 288(R12), X15 - MOVQ SP,R12 - ADDQ $31, R12 - ANDQ $~31, R12 +MAINLOOP1: + MOVOA X1, 320(R12) + MOVOA X2, 336(R12) + MOVOA X13, X1 + PADDL X12, X1 + MOVOA X1, X2 + PSLLL $0x07, X1 + PXOR X1, X14 + PSRLL $0x19, X2 + PXOR X2, X14 + MOVOA X7, X1 + PADDL X0, X1 + MOVOA X1, X2 + PSLLL $0x07, X1 + PXOR X1, X11 + PSRLL $0x19, X2 + PXOR X2, X11 + MOVOA X12, X1 + PADDL X14, X1 + MOVOA X1, X2 + PSLLL $0x09, X1 + PXOR X1, X15 + PSRLL $0x17, X2 + PXOR X2, X15 + MOVOA X0, X1 + PADDL X11, X1 + MOVOA X1, X2 + PSLLL $0x09, X1 + PXOR X1, X9 + PSRLL $0x17, X2 + PXOR X2, X9 + MOVOA X14, X1 + PADDL X15, X1 + MOVOA X1, X2 + PSLLL $0x0d, X1 + PXOR X1, X13 + PSRLL $0x13, X2 + PXOR X2, X13 + MOVOA X11, X1 + PADDL X9, X1 + MOVOA X1, X2 + PSLLL $0x0d, X1 + PXOR X1, X7 + PSRLL $0x13, X2 + PXOR X2, X7 + MOVOA X15, X1 + PADDL X13, X1 + MOVOA X1, X2 + PSLLL $0x12, X1 + PXOR X1, X12 + PSRLL $0x0e, X2 + PXOR X2, X12 + MOVOA 320(R12), X1 + MOVOA X12, 320(R12) + MOVOA X9, X2 + PADDL X7, X2 + MOVOA X2, X12 + PSLLL $0x12, X2 + PXOR X2, X0 + PSRLL $0x0e, X12 + PXOR X12, X0 + MOVOA X5, X2 + PADDL X1, X2 + MOVOA X2, X12 + PSLLL $0x07, X2 + PXOR X2, X3 + PSRLL $0x19, X12 + PXOR X12, X3 + MOVOA 336(R12), X2 + MOVOA X0, 336(R12) + MOVOA X6, X0 + PADDL X2, X0 + MOVOA X0, X12 + PSLLL $0x07, X0 + PXOR X0, X4 + PSRLL $0x19, X12 + PXOR X12, X4 + MOVOA X1, X0 + PADDL X3, X0 + MOVOA X0, X12 + PSLLL $0x09, X0 + PXOR X0, X10 + PSRLL $0x17, X12 + PXOR X12, X10 + MOVOA X2, X0 + PADDL X4, X0 + MOVOA X0, X12 + PSLLL $0x09, X0 + PXOR X0, X8 + PSRLL $0x17, X12 + PXOR X12, X8 + MOVOA X3, X0 + PADDL X10, X0 + MOVOA X0, X12 + PSLLL $0x0d, X0 + PXOR X0, X5 + PSRLL $0x13, X12 + PXOR X12, X5 + MOVOA X4, X0 + PADDL X8, X0 + MOVOA X0, X12 + PSLLL $0x0d, X0 + PXOR X0, X6 + PSRLL $0x13, X12 + PXOR X12, X6 + MOVOA X10, X0 + PADDL X5, X0 + MOVOA X0, X12 + PSLLL $0x12, X0 + PXOR X0, X1 + PSRLL $0x0e, X12 + PXOR X12, X1 + MOVOA 320(R12), X0 + MOVOA X1, 320(R12) + MOVOA X4, X1 + PADDL X0, X1 + MOVOA X1, X12 + PSLLL $0x07, X1 + PXOR X1, X7 + PSRLL $0x19, X12 + PXOR X12, X7 + MOVOA X8, X1 + PADDL X6, X1 + MOVOA X1, X12 + PSLLL $0x12, X1 + PXOR X1, X2 + PSRLL $0x0e, X12 + PXOR X12, X2 + MOVOA 336(R12), X12 + MOVOA X2, 336(R12) + MOVOA X14, X1 + PADDL X12, X1 + MOVOA X1, X2 + PSLLL $0x07, X1 + PXOR X1, X5 + PSRLL $0x19, X2 + PXOR X2, X5 + MOVOA X0, X1 + PADDL X7, X1 + MOVOA X1, X2 + PSLLL $0x09, X1 + PXOR X1, X10 + PSRLL $0x17, X2 + PXOR X2, X10 + MOVOA X12, X1 + PADDL X5, X1 + MOVOA X1, X2 + PSLLL $0x09, X1 + PXOR X1, X8 + PSRLL $0x17, X2 + PXOR X2, X8 + MOVOA X7, X1 + PADDL X10, X1 + MOVOA X1, X2 + PSLLL $0x0d, X1 + PXOR X1, X4 + PSRLL $0x13, X2 + PXOR X2, X4 + MOVOA X5, X1 + PADDL X8, X1 + MOVOA X1, X2 + PSLLL $0x0d, X1 + PXOR X1, X14 + PSRLL $0x13, X2 + PXOR X2, X14 + MOVOA X10, X1 + PADDL X4, X1 + MOVOA X1, X2 + PSLLL $0x12, X1 + PXOR X1, X0 + PSRLL $0x0e, X2 + PXOR X2, X0 + MOVOA 320(R12), X1 + MOVOA X0, 320(R12) + MOVOA X8, X0 + PADDL X14, X0 + MOVOA X0, X2 + PSLLL $0x12, X0 + PXOR X0, X12 + PSRLL $0x0e, X2 + PXOR X2, X12 + MOVOA X11, X0 + PADDL X1, X0 + MOVOA X0, X2 + PSLLL $0x07, X0 + PXOR X0, X6 + PSRLL $0x19, X2 + PXOR X2, X6 + MOVOA 336(R12), X2 + MOVOA X12, 336(R12) + MOVOA X3, X0 + PADDL X2, X0 + MOVOA X0, X12 + PSLLL $0x07, X0 + PXOR X0, X13 + PSRLL $0x19, X12 + PXOR X12, X13 + MOVOA X1, X0 + PADDL X6, X0 + MOVOA X0, X12 + PSLLL $0x09, X0 + PXOR X0, X15 + PSRLL $0x17, X12 + PXOR X12, X15 + MOVOA X2, X0 + PADDL X13, X0 + MOVOA X0, X12 + PSLLL $0x09, X0 + PXOR X0, X9 + PSRLL $0x17, X12 + PXOR X12, X9 + MOVOA X6, X0 + PADDL X15, X0 + MOVOA X0, X12 + PSLLL $0x0d, X0 + PXOR X0, X11 + PSRLL $0x13, X12 + PXOR X12, X11 + MOVOA X13, X0 + PADDL X9, X0 + MOVOA X0, X12 + PSLLL $0x0d, X0 + PXOR X0, X3 + PSRLL $0x13, X12 + PXOR X12, X3 + MOVOA X15, X0 + PADDL X11, X0 + MOVOA X0, X12 + PSLLL $0x12, X0 + PXOR X0, X1 + PSRLL $0x0e, X12 + PXOR X12, X1 + MOVOA X9, X0 + PADDL X3, X0 + MOVOA X0, X12 + PSLLL $0x12, X0 + PXOR X0, X2 + PSRLL $0x0e, X12 + PXOR X12, X2 + MOVOA 320(R12), X12 + MOVOA 336(R12), X0 + SUBQ $0x02, DX + JA MAINLOOP1 + PADDL 112(R12), X12 + PADDL 176(R12), X7 + PADDL 224(R12), X10 + PADDL 272(R12), X4 + MOVD X12, DX + MOVD X7, CX + MOVD X10, R8 + MOVD X4, R9 + PSHUFL $0x39, X12, X12 + PSHUFL $0x39, X7, X7 + PSHUFL $0x39, X10, X10 + PSHUFL $0x39, X4, X4 + XORL (SI), DX + XORL 4(SI), CX + XORL 8(SI), R8 + XORL 12(SI), R9 + MOVL DX, (DI) + MOVL CX, 4(DI) + MOVL R8, 8(DI) + MOVL R9, 12(DI) + MOVD X12, DX + MOVD X7, CX + MOVD X10, R8 + MOVD X4, R9 + PSHUFL $0x39, X12, X12 + PSHUFL $0x39, X7, X7 + PSHUFL $0x39, X10, X10 + PSHUFL $0x39, X4, X4 + XORL 64(SI), DX + XORL 68(SI), CX + XORL 72(SI), R8 + XORL 76(SI), R9 + MOVL DX, 64(DI) + MOVL CX, 68(DI) + MOVL R8, 72(DI) + MOVL R9, 76(DI) + MOVD X12, DX + MOVD X7, CX + MOVD X10, R8 + MOVD X4, R9 + PSHUFL $0x39, X12, X12 + PSHUFL $0x39, X7, X7 + PSHUFL $0x39, X10, X10 + PSHUFL $0x39, X4, X4 + XORL 128(SI), DX + XORL 132(SI), CX + XORL 136(SI), R8 + XORL 140(SI), R9 + MOVL DX, 128(DI) + MOVL CX, 132(DI) + MOVL R8, 136(DI) + MOVL R9, 140(DI) + MOVD X12, DX + MOVD X7, CX + MOVD X10, R8 + MOVD X4, R9 + XORL 192(SI), DX + XORL 196(SI), CX + XORL 200(SI), R8 + XORL 204(SI), R9 + MOVL DX, 192(DI) + MOVL CX, 196(DI) + MOVL R8, 200(DI) + MOVL R9, 204(DI) + PADDL 240(R12), X14 + PADDL 64(R12), X0 + PADDL 128(R12), X5 + PADDL 192(R12), X8 + MOVD X14, DX + MOVD X0, CX + MOVD X5, R8 + MOVD X8, R9 + PSHUFL $0x39, X14, X14 + PSHUFL $0x39, X0, X0 + PSHUFL $0x39, X5, X5 + PSHUFL $0x39, X8, X8 + XORL 16(SI), DX + XORL 20(SI), CX + XORL 24(SI), R8 + XORL 28(SI), R9 + MOVL DX, 16(DI) + MOVL CX, 20(DI) + MOVL R8, 24(DI) + MOVL R9, 28(DI) + MOVD X14, DX + MOVD X0, CX + MOVD X5, R8 + MOVD X8, R9 + PSHUFL $0x39, X14, X14 + PSHUFL $0x39, X0, X0 + PSHUFL $0x39, X5, X5 + PSHUFL $0x39, X8, X8 + XORL 80(SI), DX + XORL 84(SI), CX + XORL 88(SI), R8 + XORL 92(SI), R9 + MOVL DX, 80(DI) + MOVL CX, 84(DI) + MOVL R8, 88(DI) + MOVL R9, 92(DI) + MOVD X14, DX + MOVD X0, CX + MOVD X5, R8 + MOVD X8, R9 + PSHUFL $0x39, X14, X14 + PSHUFL $0x39, X0, X0 + PSHUFL $0x39, X5, X5 + PSHUFL $0x39, X8, X8 + XORL 144(SI), DX + XORL 148(SI), CX + XORL 152(SI), R8 + XORL 156(SI), R9 + MOVL DX, 144(DI) + MOVL CX, 148(DI) + MOVL R8, 152(DI) + MOVL R9, 156(DI) + MOVD X14, DX + MOVD X0, CX + MOVD X5, R8 + MOVD X8, R9 + XORL 208(SI), DX + XORL 212(SI), CX + XORL 216(SI), R8 + XORL 220(SI), R9 + MOVL DX, 208(DI) + MOVL CX, 212(DI) + MOVL R8, 216(DI) + MOVL R9, 220(DI) + PADDL 288(R12), X15 + PADDL 304(R12), X11 + PADDL 80(R12), X1 + PADDL 144(R12), X6 + MOVD X15, DX + MOVD X11, CX + MOVD X1, R8 + MOVD X6, R9 + PSHUFL $0x39, X15, X15 + PSHUFL $0x39, X11, X11 + PSHUFL $0x39, X1, X1 + PSHUFL $0x39, X6, X6 + XORL 32(SI), DX + XORL 36(SI), CX + XORL 40(SI), R8 + XORL 44(SI), R9 + MOVL DX, 32(DI) + MOVL CX, 36(DI) + MOVL R8, 40(DI) + MOVL R9, 44(DI) + MOVD X15, DX + MOVD X11, CX + MOVD X1, R8 + MOVD X6, R9 + PSHUFL $0x39, X15, X15 + PSHUFL $0x39, X11, X11 + PSHUFL $0x39, X1, X1 + PSHUFL $0x39, X6, X6 + XORL 96(SI), DX + XORL 100(SI), CX + XORL 104(SI), R8 + XORL 108(SI), R9 + MOVL DX, 96(DI) + MOVL CX, 100(DI) + MOVL R8, 104(DI) + MOVL R9, 108(DI) + MOVD X15, DX + MOVD X11, CX + MOVD X1, R8 + MOVD X6, R9 + PSHUFL $0x39, X15, X15 + PSHUFL $0x39, X11, X11 + PSHUFL $0x39, X1, X1 + PSHUFL $0x39, X6, X6 + XORL 160(SI), DX + XORL 164(SI), CX + XORL 168(SI), R8 + XORL 172(SI), R9 + MOVL DX, 160(DI) + MOVL CX, 164(DI) + MOVL R8, 168(DI) + MOVL R9, 172(DI) + MOVD X15, DX + MOVD X11, CX + MOVD X1, R8 + MOVD X6, R9 + XORL 224(SI), DX + XORL 228(SI), CX + XORL 232(SI), R8 + XORL 236(SI), R9 + MOVL DX, 224(DI) + MOVL CX, 228(DI) + MOVL R8, 232(DI) + MOVL R9, 236(DI) + PADDL 160(R12), X13 + PADDL 208(R12), X9 + PADDL 256(R12), X3 + PADDL 96(R12), X2 + MOVD X13, DX + MOVD X9, CX + MOVD X3, R8 + MOVD X2, R9 + PSHUFL $0x39, X13, X13 + PSHUFL $0x39, X9, X9 + PSHUFL $0x39, X3, X3 + PSHUFL $0x39, X2, X2 + XORL 48(SI), DX + XORL 52(SI), CX + XORL 56(SI), R8 + XORL 60(SI), R9 + MOVL DX, 48(DI) + MOVL CX, 52(DI) + MOVL R8, 56(DI) + MOVL R9, 60(DI) + MOVD X13, DX + MOVD X9, CX + MOVD X3, R8 + MOVD X2, R9 + PSHUFL $0x39, X13, X13 + PSHUFL $0x39, X9, X9 + PSHUFL $0x39, X3, X3 + PSHUFL $0x39, X2, X2 + XORL 112(SI), DX + XORL 116(SI), CX + XORL 120(SI), R8 + XORL 124(SI), R9 + MOVL DX, 112(DI) + MOVL CX, 116(DI) + MOVL R8, 120(DI) + MOVL R9, 124(DI) + MOVD X13, DX + MOVD X9, CX + MOVD X3, R8 + MOVD X2, R9 + PSHUFL $0x39, X13, X13 + PSHUFL $0x39, X9, X9 + PSHUFL $0x39, X3, X3 + PSHUFL $0x39, X2, X2 + XORL 176(SI), DX + XORL 180(SI), CX + XORL 184(SI), R8 + XORL 188(SI), R9 + MOVL DX, 176(DI) + MOVL CX, 180(DI) + MOVL R8, 184(DI) + MOVL R9, 188(DI) + MOVD X13, DX + MOVD X9, CX + MOVD X3, R8 + MOVD X2, R9 + XORL 240(SI), DX + XORL 244(SI), CX + XORL 248(SI), R8 + XORL 252(SI), R9 + MOVL DX, 240(DI) + MOVL CX, 244(DI) + MOVL R8, 248(DI) + MOVL R9, 252(DI) + MOVQ 352(R12), R9 + SUBQ $0x00000100, R9 + ADDQ $0x00000100, SI + ADDQ $0x00000100, DI + CMPQ R9, $0x00000100 + JAE BYTESATLEAST256 + CMPQ R9, $0x00 + JBE DONE - MOVQ DX,R9 - MOVQ CX,DX - MOVQ R8,R10 - CMPQ R9,$0 - JBE DONE - START: - MOVL 20(R10),CX - MOVL 0(R10),R8 - MOVL 0(DX),AX - MOVL 16(R10),R11 - MOVL CX,0(R12) - MOVL R8, 4 (R12) - MOVL AX, 8 (R12) - MOVL R11, 12 (R12) - MOVL 8(DX),CX - MOVL 24(R10),R8 - MOVL 4(R10),AX - MOVL 4(DX),R11 - MOVL CX,16(R12) - MOVL R8, 20 (R12) - MOVL AX, 24 (R12) - MOVL R11, 28 (R12) - MOVL 12(DX),CX - MOVL 12(R10),DX - MOVL 28(R10),R8 - MOVL 8(R10),AX - MOVL DX,32(R12) - MOVL CX, 36 (R12) - MOVL R8, 40 (R12) - MOVL AX, 44 (R12) - MOVQ $1634760805,DX - MOVQ $857760878,CX - MOVQ $2036477234,R8 - MOVQ $1797285236,AX - MOVL DX,48(R12) - MOVL CX, 52 (R12) - MOVL R8, 56 (R12) - MOVL AX, 60 (R12) - CMPQ R9,$256 - JB BYTESBETWEEN1AND255 - MOVOA 48(R12),X0 - PSHUFL $0X55,X0,X1 - PSHUFL $0XAA,X0,X2 - PSHUFL $0XFF,X0,X3 - PSHUFL $0X00,X0,X0 - MOVOA X1,64(R12) - MOVOA X2,80(R12) - MOVOA X3,96(R12) - MOVOA X0,112(R12) - MOVOA 0(R12),X0 - PSHUFL $0XAA,X0,X1 - PSHUFL $0XFF,X0,X2 - PSHUFL $0X00,X0,X3 - PSHUFL $0X55,X0,X0 - MOVOA X1,128(R12) - MOVOA X2,144(R12) - MOVOA X3,160(R12) - MOVOA X0,176(R12) - MOVOA 16(R12),X0 - PSHUFL $0XFF,X0,X1 - PSHUFL $0X55,X0,X2 - PSHUFL $0XAA,X0,X0 - MOVOA X1,192(R12) - MOVOA X2,208(R12) - MOVOA X0,224(R12) - MOVOA 32(R12),X0 - PSHUFL $0X00,X0,X1 - PSHUFL $0XAA,X0,X2 - PSHUFL $0XFF,X0,X0 - MOVOA X1,240(R12) - MOVOA X2,256(R12) - MOVOA X0,272(R12) - BYTESATLEAST256: - MOVL 16(R12),DX - MOVL 36 (R12),CX - MOVL DX,288(R12) - MOVL CX,304(R12) - SHLQ $32,CX - ADDQ CX,DX - ADDQ $1,DX - MOVQ DX,CX - SHRQ $32,CX - MOVL DX, 292 (R12) - MOVL CX, 308 (R12) - ADDQ $1,DX - MOVQ DX,CX - SHRQ $32,CX - MOVL DX, 296 (R12) - MOVL CX, 312 (R12) - ADDQ $1,DX - MOVQ DX,CX - SHRQ $32,CX - MOVL DX, 300 (R12) - MOVL CX, 316 (R12) - ADDQ $1,DX - MOVQ DX,CX - SHRQ $32,CX - MOVL DX,16(R12) - MOVL CX, 36 (R12) - MOVQ R9,352(R12) - MOVQ $20,DX - MOVOA 64(R12),X0 - MOVOA 80(R12),X1 - MOVOA 96(R12),X2 - MOVOA 256(R12),X3 - MOVOA 272(R12),X4 - MOVOA 128(R12),X5 - MOVOA 144(R12),X6 - MOVOA 176(R12),X7 - MOVOA 192(R12),X8 - MOVOA 208(R12),X9 - MOVOA 224(R12),X10 - MOVOA 304(R12),X11 - MOVOA 112(R12),X12 - MOVOA 160(R12),X13 - MOVOA 240(R12),X14 - MOVOA 288(R12),X15 - MAINLOOP1: - MOVOA X1,320(R12) - MOVOA X2,336(R12) - MOVOA X13,X1 - PADDL X12,X1 - MOVOA X1,X2 - PSLLL $7,X1 - PXOR X1,X14 - PSRLL $25,X2 - PXOR X2,X14 - MOVOA X7,X1 - PADDL X0,X1 - MOVOA X1,X2 - PSLLL $7,X1 - PXOR X1,X11 - PSRLL $25,X2 - PXOR X2,X11 - MOVOA X12,X1 - PADDL X14,X1 - MOVOA X1,X2 - PSLLL $9,X1 - PXOR X1,X15 - PSRLL $23,X2 - PXOR X2,X15 - MOVOA X0,X1 - PADDL X11,X1 - MOVOA X1,X2 - PSLLL $9,X1 - PXOR X1,X9 - PSRLL $23,X2 - PXOR X2,X9 - MOVOA X14,X1 - PADDL X15,X1 - MOVOA X1,X2 - PSLLL $13,X1 - PXOR X1,X13 - PSRLL $19,X2 - PXOR X2,X13 - MOVOA X11,X1 - PADDL X9,X1 - MOVOA X1,X2 - PSLLL $13,X1 - PXOR X1,X7 - PSRLL $19,X2 - PXOR X2,X7 - MOVOA X15,X1 - PADDL X13,X1 - MOVOA X1,X2 - PSLLL $18,X1 - PXOR X1,X12 - PSRLL $14,X2 - PXOR X2,X12 - MOVOA 320(R12),X1 - MOVOA X12,320(R12) - MOVOA X9,X2 - PADDL X7,X2 - MOVOA X2,X12 - PSLLL $18,X2 - PXOR X2,X0 - PSRLL $14,X12 - PXOR X12,X0 - MOVOA X5,X2 - PADDL X1,X2 - MOVOA X2,X12 - PSLLL $7,X2 - PXOR X2,X3 - PSRLL $25,X12 - PXOR X12,X3 - MOVOA 336(R12),X2 - MOVOA X0,336(R12) - MOVOA X6,X0 - PADDL X2,X0 - MOVOA X0,X12 - PSLLL $7,X0 - PXOR X0,X4 - PSRLL $25,X12 - PXOR X12,X4 - MOVOA X1,X0 - PADDL X3,X0 - MOVOA X0,X12 - PSLLL $9,X0 - PXOR X0,X10 - PSRLL $23,X12 - PXOR X12,X10 - MOVOA X2,X0 - PADDL X4,X0 - MOVOA X0,X12 - PSLLL $9,X0 - PXOR X0,X8 - PSRLL $23,X12 - PXOR X12,X8 - MOVOA X3,X0 - PADDL X10,X0 - MOVOA X0,X12 - PSLLL $13,X0 - PXOR X0,X5 - PSRLL $19,X12 - PXOR X12,X5 - MOVOA X4,X0 - PADDL X8,X0 - MOVOA X0,X12 - PSLLL $13,X0 - PXOR X0,X6 - PSRLL $19,X12 - PXOR X12,X6 - MOVOA X10,X0 - PADDL X5,X0 - MOVOA X0,X12 - PSLLL $18,X0 - PXOR X0,X1 - PSRLL $14,X12 - PXOR X12,X1 - MOVOA 320(R12),X0 - MOVOA X1,320(R12) - MOVOA X4,X1 - PADDL X0,X1 - MOVOA X1,X12 - PSLLL $7,X1 - PXOR X1,X7 - PSRLL $25,X12 - PXOR X12,X7 - MOVOA X8,X1 - PADDL X6,X1 - MOVOA X1,X12 - PSLLL $18,X1 - PXOR X1,X2 - PSRLL $14,X12 - PXOR X12,X2 - MOVOA 336(R12),X12 - MOVOA X2,336(R12) - MOVOA X14,X1 - PADDL X12,X1 - MOVOA X1,X2 - PSLLL $7,X1 - PXOR X1,X5 - PSRLL $25,X2 - PXOR X2,X5 - MOVOA X0,X1 - PADDL X7,X1 - MOVOA X1,X2 - PSLLL $9,X1 - PXOR X1,X10 - PSRLL $23,X2 - PXOR X2,X10 - MOVOA X12,X1 - PADDL X5,X1 - MOVOA X1,X2 - PSLLL $9,X1 - PXOR X1,X8 - PSRLL $23,X2 - PXOR X2,X8 - MOVOA X7,X1 - PADDL X10,X1 - MOVOA X1,X2 - PSLLL $13,X1 - PXOR X1,X4 - PSRLL $19,X2 - PXOR X2,X4 - MOVOA X5,X1 - PADDL X8,X1 - MOVOA X1,X2 - PSLLL $13,X1 - PXOR X1,X14 - PSRLL $19,X2 - PXOR X2,X14 - MOVOA X10,X1 - PADDL X4,X1 - MOVOA X1,X2 - PSLLL $18,X1 - PXOR X1,X0 - PSRLL $14,X2 - PXOR X2,X0 - MOVOA 320(R12),X1 - MOVOA X0,320(R12) - MOVOA X8,X0 - PADDL X14,X0 - MOVOA X0,X2 - PSLLL $18,X0 - PXOR X0,X12 - PSRLL $14,X2 - PXOR X2,X12 - MOVOA X11,X0 - PADDL X1,X0 - MOVOA X0,X2 - PSLLL $7,X0 - PXOR X0,X6 - PSRLL $25,X2 - PXOR X2,X6 - MOVOA 336(R12),X2 - MOVOA X12,336(R12) - MOVOA X3,X0 - PADDL X2,X0 - MOVOA X0,X12 - PSLLL $7,X0 - PXOR X0,X13 - PSRLL $25,X12 - PXOR X12,X13 - MOVOA X1,X0 - PADDL X6,X0 - MOVOA X0,X12 - PSLLL $9,X0 - PXOR X0,X15 - PSRLL $23,X12 - PXOR X12,X15 - MOVOA X2,X0 - PADDL X13,X0 - MOVOA X0,X12 - PSLLL $9,X0 - PXOR X0,X9 - PSRLL $23,X12 - PXOR X12,X9 - MOVOA X6,X0 - PADDL X15,X0 - MOVOA X0,X12 - PSLLL $13,X0 - PXOR X0,X11 - PSRLL $19,X12 - PXOR X12,X11 - MOVOA X13,X0 - PADDL X9,X0 - MOVOA X0,X12 - PSLLL $13,X0 - PXOR X0,X3 - PSRLL $19,X12 - PXOR X12,X3 - MOVOA X15,X0 - PADDL X11,X0 - MOVOA X0,X12 - PSLLL $18,X0 - PXOR X0,X1 - PSRLL $14,X12 - PXOR X12,X1 - MOVOA X9,X0 - PADDL X3,X0 - MOVOA X0,X12 - PSLLL $18,X0 - PXOR X0,X2 - PSRLL $14,X12 - PXOR X12,X2 - MOVOA 320(R12),X12 - MOVOA 336(R12),X0 - SUBQ $2,DX - JA MAINLOOP1 - PADDL 112(R12),X12 - PADDL 176(R12),X7 - PADDL 224(R12),X10 - PADDL 272(R12),X4 - MOVD X12,DX - MOVD X7,CX - MOVD X10,R8 - MOVD X4,R9 - PSHUFL $0X39,X12,X12 - PSHUFL $0X39,X7,X7 - PSHUFL $0X39,X10,X10 - PSHUFL $0X39,X4,X4 - XORL 0(SI),DX - XORL 4(SI),CX - XORL 8(SI),R8 - XORL 12(SI),R9 - MOVL DX,0(DI) - MOVL CX,4(DI) - MOVL R8,8(DI) - MOVL R9,12(DI) - MOVD X12,DX - MOVD X7,CX - MOVD X10,R8 - MOVD X4,R9 - PSHUFL $0X39,X12,X12 - PSHUFL $0X39,X7,X7 - PSHUFL $0X39,X10,X10 - PSHUFL $0X39,X4,X4 - XORL 64(SI),DX - XORL 68(SI),CX - XORL 72(SI),R8 - XORL 76(SI),R9 - MOVL DX,64(DI) - MOVL CX,68(DI) - MOVL R8,72(DI) - MOVL R9,76(DI) - MOVD X12,DX - MOVD X7,CX - MOVD X10,R8 - MOVD X4,R9 - PSHUFL $0X39,X12,X12 - PSHUFL $0X39,X7,X7 - PSHUFL $0X39,X10,X10 - PSHUFL $0X39,X4,X4 - XORL 128(SI),DX - XORL 132(SI),CX - XORL 136(SI),R8 - XORL 140(SI),R9 - MOVL DX,128(DI) - MOVL CX,132(DI) - MOVL R8,136(DI) - MOVL R9,140(DI) - MOVD X12,DX - MOVD X7,CX - MOVD X10,R8 - MOVD X4,R9 - XORL 192(SI),DX - XORL 196(SI),CX - XORL 200(SI),R8 - XORL 204(SI),R9 - MOVL DX,192(DI) - MOVL CX,196(DI) - MOVL R8,200(DI) - MOVL R9,204(DI) - PADDL 240(R12),X14 - PADDL 64(R12),X0 - PADDL 128(R12),X5 - PADDL 192(R12),X8 - MOVD X14,DX - MOVD X0,CX - MOVD X5,R8 - MOVD X8,R9 - PSHUFL $0X39,X14,X14 - PSHUFL $0X39,X0,X0 - PSHUFL $0X39,X5,X5 - PSHUFL $0X39,X8,X8 - XORL 16(SI),DX - XORL 20(SI),CX - XORL 24(SI),R8 - XORL 28(SI),R9 - MOVL DX,16(DI) - MOVL CX,20(DI) - MOVL R8,24(DI) - MOVL R9,28(DI) - MOVD X14,DX - MOVD X0,CX - MOVD X5,R8 - MOVD X8,R9 - PSHUFL $0X39,X14,X14 - PSHUFL $0X39,X0,X0 - PSHUFL $0X39,X5,X5 - PSHUFL $0X39,X8,X8 - XORL 80(SI),DX - XORL 84(SI),CX - XORL 88(SI),R8 - XORL 92(SI),R9 - MOVL DX,80(DI) - MOVL CX,84(DI) - MOVL R8,88(DI) - MOVL R9,92(DI) - MOVD X14,DX - MOVD X0,CX - MOVD X5,R8 - MOVD X8,R9 - PSHUFL $0X39,X14,X14 - PSHUFL $0X39,X0,X0 - PSHUFL $0X39,X5,X5 - PSHUFL $0X39,X8,X8 - XORL 144(SI),DX - XORL 148(SI),CX - XORL 152(SI),R8 - XORL 156(SI),R9 - MOVL DX,144(DI) - MOVL CX,148(DI) - MOVL R8,152(DI) - MOVL R9,156(DI) - MOVD X14,DX - MOVD X0,CX - MOVD X5,R8 - MOVD X8,R9 - XORL 208(SI),DX - XORL 212(SI),CX - XORL 216(SI),R8 - XORL 220(SI),R9 - MOVL DX,208(DI) - MOVL CX,212(DI) - MOVL R8,216(DI) - MOVL R9,220(DI) - PADDL 288(R12),X15 - PADDL 304(R12),X11 - PADDL 80(R12),X1 - PADDL 144(R12),X6 - MOVD X15,DX - MOVD X11,CX - MOVD X1,R8 - MOVD X6,R9 - PSHUFL $0X39,X15,X15 - PSHUFL $0X39,X11,X11 - PSHUFL $0X39,X1,X1 - PSHUFL $0X39,X6,X6 - XORL 32(SI),DX - XORL 36(SI),CX - XORL 40(SI),R8 - XORL 44(SI),R9 - MOVL DX,32(DI) - MOVL CX,36(DI) - MOVL R8,40(DI) - MOVL R9,44(DI) - MOVD X15,DX - MOVD X11,CX - MOVD X1,R8 - MOVD X6,R9 - PSHUFL $0X39,X15,X15 - PSHUFL $0X39,X11,X11 - PSHUFL $0X39,X1,X1 - PSHUFL $0X39,X6,X6 - XORL 96(SI),DX - XORL 100(SI),CX - XORL 104(SI),R8 - XORL 108(SI),R9 - MOVL DX,96(DI) - MOVL CX,100(DI) - MOVL R8,104(DI) - MOVL R9,108(DI) - MOVD X15,DX - MOVD X11,CX - MOVD X1,R8 - MOVD X6,R9 - PSHUFL $0X39,X15,X15 - PSHUFL $0X39,X11,X11 - PSHUFL $0X39,X1,X1 - PSHUFL $0X39,X6,X6 - XORL 160(SI),DX - XORL 164(SI),CX - XORL 168(SI),R8 - XORL 172(SI),R9 - MOVL DX,160(DI) - MOVL CX,164(DI) - MOVL R8,168(DI) - MOVL R9,172(DI) - MOVD X15,DX - MOVD X11,CX - MOVD X1,R8 - MOVD X6,R9 - XORL 224(SI),DX - XORL 228(SI),CX - XORL 232(SI),R8 - XORL 236(SI),R9 - MOVL DX,224(DI) - MOVL CX,228(DI) - MOVL R8,232(DI) - MOVL R9,236(DI) - PADDL 160(R12),X13 - PADDL 208(R12),X9 - PADDL 256(R12),X3 - PADDL 96(R12),X2 - MOVD X13,DX - MOVD X9,CX - MOVD X3,R8 - MOVD X2,R9 - PSHUFL $0X39,X13,X13 - PSHUFL $0X39,X9,X9 - PSHUFL $0X39,X3,X3 - PSHUFL $0X39,X2,X2 - XORL 48(SI),DX - XORL 52(SI),CX - XORL 56(SI),R8 - XORL 60(SI),R9 - MOVL DX,48(DI) - MOVL CX,52(DI) - MOVL R8,56(DI) - MOVL R9,60(DI) - MOVD X13,DX - MOVD X9,CX - MOVD X3,R8 - MOVD X2,R9 - PSHUFL $0X39,X13,X13 - PSHUFL $0X39,X9,X9 - PSHUFL $0X39,X3,X3 - PSHUFL $0X39,X2,X2 - XORL 112(SI),DX - XORL 116(SI),CX - XORL 120(SI),R8 - XORL 124(SI),R9 - MOVL DX,112(DI) - MOVL CX,116(DI) - MOVL R8,120(DI) - MOVL R9,124(DI) - MOVD X13,DX - MOVD X9,CX - MOVD X3,R8 - MOVD X2,R9 - PSHUFL $0X39,X13,X13 - PSHUFL $0X39,X9,X9 - PSHUFL $0X39,X3,X3 - PSHUFL $0X39,X2,X2 - XORL 176(SI),DX - XORL 180(SI),CX - XORL 184(SI),R8 - XORL 188(SI),R9 - MOVL DX,176(DI) - MOVL CX,180(DI) - MOVL R8,184(DI) - MOVL R9,188(DI) - MOVD X13,DX - MOVD X9,CX - MOVD X3,R8 - MOVD X2,R9 - XORL 240(SI),DX - XORL 244(SI),CX - XORL 248(SI),R8 - XORL 252(SI),R9 - MOVL DX,240(DI) - MOVL CX,244(DI) - MOVL R8,248(DI) - MOVL R9,252(DI) - MOVQ 352(R12),R9 - SUBQ $256,R9 - ADDQ $256,SI - ADDQ $256,DI - CMPQ R9,$256 - JAE BYTESATLEAST256 - CMPQ R9,$0 - JBE DONE - BYTESBETWEEN1AND255: - CMPQ R9,$64 - JAE NOCOPY - MOVQ DI,DX - LEAQ 360(R12),DI - MOVQ R9,CX +BYTESBETWEEN1AND255: + CMPQ R9, $0x40 + JAE NOCOPY + MOVQ DI, DX + LEAQ 360(R12), DI + MOVQ R9, CX REP; MOVSB - LEAQ 360(R12),DI - LEAQ 360(R12),SI - NOCOPY: - MOVQ R9,352(R12) - MOVOA 48(R12),X0 - MOVOA 0(R12),X1 - MOVOA 16(R12),X2 - MOVOA 32(R12),X3 - MOVOA X1,X4 - MOVQ $20,CX - MAINLOOP2: - PADDL X0,X4 - MOVOA X0,X5 - MOVOA X4,X6 - PSLLL $7,X4 - PSRLL $25,X6 - PXOR X4,X3 - PXOR X6,X3 - PADDL X3,X5 - MOVOA X3,X4 - MOVOA X5,X6 - PSLLL $9,X5 - PSRLL $23,X6 - PXOR X5,X2 - PSHUFL $0X93,X3,X3 - PXOR X6,X2 - PADDL X2,X4 - MOVOA X2,X5 - MOVOA X4,X6 - PSLLL $13,X4 - PSRLL $19,X6 - PXOR X4,X1 - PSHUFL $0X4E,X2,X2 - PXOR X6,X1 - PADDL X1,X5 - MOVOA X3,X4 - MOVOA X5,X6 - PSLLL $18,X5 - PSRLL $14,X6 - PXOR X5,X0 - PSHUFL $0X39,X1,X1 - PXOR X6,X0 - PADDL X0,X4 - MOVOA X0,X5 - MOVOA X4,X6 - PSLLL $7,X4 - PSRLL $25,X6 - PXOR X4,X1 - PXOR X6,X1 - PADDL X1,X5 - MOVOA X1,X4 - MOVOA X5,X6 - PSLLL $9,X5 - PSRLL $23,X6 - PXOR X5,X2 - PSHUFL $0X93,X1,X1 - PXOR X6,X2 - PADDL X2,X4 - MOVOA X2,X5 - MOVOA X4,X6 - PSLLL $13,X4 - PSRLL $19,X6 - PXOR X4,X3 - PSHUFL $0X4E,X2,X2 - PXOR X6,X3 - PADDL X3,X5 - MOVOA X1,X4 - MOVOA X5,X6 - PSLLL $18,X5 - PSRLL $14,X6 - PXOR X5,X0 - PSHUFL $0X39,X3,X3 - PXOR X6,X0 - PADDL X0,X4 - MOVOA X0,X5 - MOVOA X4,X6 - PSLLL $7,X4 - PSRLL $25,X6 - PXOR X4,X3 - PXOR X6,X3 - PADDL X3,X5 - MOVOA X3,X4 - MOVOA X5,X6 - PSLLL $9,X5 - PSRLL $23,X6 - PXOR X5,X2 - PSHUFL $0X93,X3,X3 - PXOR X6,X2 - PADDL X2,X4 - MOVOA X2,X5 - MOVOA X4,X6 - PSLLL $13,X4 - PSRLL $19,X6 - PXOR X4,X1 - PSHUFL $0X4E,X2,X2 - PXOR X6,X1 - PADDL X1,X5 - MOVOA X3,X4 - MOVOA X5,X6 - PSLLL $18,X5 - PSRLL $14,X6 - PXOR X5,X0 - PSHUFL $0X39,X1,X1 - PXOR X6,X0 - PADDL X0,X4 - MOVOA X0,X5 - MOVOA X4,X6 - PSLLL $7,X4 - PSRLL $25,X6 - PXOR X4,X1 - PXOR X6,X1 - PADDL X1,X5 - MOVOA X1,X4 - MOVOA X5,X6 - PSLLL $9,X5 - PSRLL $23,X6 - PXOR X5,X2 - PSHUFL $0X93,X1,X1 - PXOR X6,X2 - PADDL X2,X4 - MOVOA X2,X5 - MOVOA X4,X6 - PSLLL $13,X4 - PSRLL $19,X6 - PXOR X4,X3 - PSHUFL $0X4E,X2,X2 - PXOR X6,X3 - SUBQ $4,CX - PADDL X3,X5 - MOVOA X1,X4 - MOVOA X5,X6 - PSLLL $18,X5 - PXOR X7,X7 - PSRLL $14,X6 - PXOR X5,X0 - PSHUFL $0X39,X3,X3 - PXOR X6,X0 - JA MAINLOOP2 - PADDL 48(R12),X0 - PADDL 0(R12),X1 - PADDL 16(R12),X2 - PADDL 32(R12),X3 - MOVD X0,CX - MOVD X1,R8 - MOVD X2,R9 - MOVD X3,AX - PSHUFL $0X39,X0,X0 - PSHUFL $0X39,X1,X1 - PSHUFL $0X39,X2,X2 - PSHUFL $0X39,X3,X3 - XORL 0(SI),CX - XORL 48(SI),R8 - XORL 32(SI),R9 - XORL 16(SI),AX - MOVL CX,0(DI) - MOVL R8,48(DI) - MOVL R9,32(DI) - MOVL AX,16(DI) - MOVD X0,CX - MOVD X1,R8 - MOVD X2,R9 - MOVD X3,AX - PSHUFL $0X39,X0,X0 - PSHUFL $0X39,X1,X1 - PSHUFL $0X39,X2,X2 - PSHUFL $0X39,X3,X3 - XORL 20(SI),CX - XORL 4(SI),R8 - XORL 52(SI),R9 - XORL 36(SI),AX - MOVL CX,20(DI) - MOVL R8,4(DI) - MOVL R9,52(DI) - MOVL AX,36(DI) - MOVD X0,CX - MOVD X1,R8 - MOVD X2,R9 - MOVD X3,AX - PSHUFL $0X39,X0,X0 - PSHUFL $0X39,X1,X1 - PSHUFL $0X39,X2,X2 - PSHUFL $0X39,X3,X3 - XORL 40(SI),CX - XORL 24(SI),R8 - XORL 8(SI),R9 - XORL 56(SI),AX - MOVL CX,40(DI) - MOVL R8,24(DI) - MOVL R9,8(DI) - MOVL AX,56(DI) - MOVD X0,CX - MOVD X1,R8 - MOVD X2,R9 - MOVD X3,AX - XORL 60(SI),CX - XORL 44(SI),R8 - XORL 28(SI),R9 - XORL 12(SI),AX - MOVL CX,60(DI) - MOVL R8,44(DI) - MOVL R9,28(DI) - MOVL AX,12(DI) - MOVQ 352(R12),R9 - MOVL 16(R12),CX - MOVL 36 (R12),R8 - ADDQ $1,CX - SHLQ $32,R8 - ADDQ R8,CX - MOVQ CX,R8 - SHRQ $32,R8 - MOVL CX,16(R12) - MOVL R8, 36 (R12) - CMPQ R9,$64 - JA BYTESATLEAST65 - JAE BYTESATLEAST64 - MOVQ DI,SI - MOVQ DX,DI - MOVQ R9,CX + LEAQ 360(R12), DI + LEAQ 360(R12), SI + +NOCOPY: + MOVQ R9, 352(R12) + MOVOA 48(R12), X0 + MOVOA (R12), X1 + MOVOA 16(R12), X2 + MOVOA 32(R12), X3 + MOVOA X1, X4 + MOVQ $0x00000014, CX + +MAINLOOP2: + PADDL X0, X4 + MOVOA X0, X5 + MOVOA X4, X6 + PSLLL $0x07, X4 + PSRLL $0x19, X6 + PXOR X4, X3 + PXOR X6, X3 + PADDL X3, X5 + MOVOA X3, X4 + MOVOA X5, X6 + PSLLL $0x09, X5 + PSRLL $0x17, X6 + PXOR X5, X2 + PSHUFL $0x93, X3, X3 + PXOR X6, X2 + PADDL X2, X4 + MOVOA X2, X5 + MOVOA X4, X6 + PSLLL $0x0d, X4 + PSRLL $0x13, X6 + PXOR X4, X1 + PSHUFL $0x4e, X2, X2 + PXOR X6, X1 + PADDL X1, X5 + MOVOA X3, X4 + MOVOA X5, X6 + PSLLL $0x12, X5 + PSRLL $0x0e, X6 + PXOR X5, X0 + PSHUFL $0x39, X1, X1 + PXOR X6, X0 + PADDL X0, X4 + MOVOA X0, X5 + MOVOA X4, X6 + PSLLL $0x07, X4 + PSRLL $0x19, X6 + PXOR X4, X1 + PXOR X6, X1 + PADDL X1, X5 + MOVOA X1, X4 + MOVOA X5, X6 + PSLLL $0x09, X5 + PSRLL $0x17, X6 + PXOR X5, X2 + PSHUFL $0x93, X1, X1 + PXOR X6, X2 + PADDL X2, X4 + MOVOA X2, X5 + MOVOA X4, X6 + PSLLL $0x0d, X4 + PSRLL $0x13, X6 + PXOR X4, X3 + PSHUFL $0x4e, X2, X2 + PXOR X6, X3 + PADDL X3, X5 + MOVOA X1, X4 + MOVOA X5, X6 + PSLLL $0x12, X5 + PSRLL $0x0e, X6 + PXOR X5, X0 + PSHUFL $0x39, X3, X3 + PXOR X6, X0 + PADDL X0, X4 + MOVOA X0, X5 + MOVOA X4, X6 + PSLLL $0x07, X4 + PSRLL $0x19, X6 + PXOR X4, X3 + PXOR X6, X3 + PADDL X3, X5 + MOVOA X3, X4 + MOVOA X5, X6 + PSLLL $0x09, X5 + PSRLL $0x17, X6 + PXOR X5, X2 + PSHUFL $0x93, X3, X3 + PXOR X6, X2 + PADDL X2, X4 + MOVOA X2, X5 + MOVOA X4, X6 + PSLLL $0x0d, X4 + PSRLL $0x13, X6 + PXOR X4, X1 + PSHUFL $0x4e, X2, X2 + PXOR X6, X1 + PADDL X1, X5 + MOVOA X3, X4 + MOVOA X5, X6 + PSLLL $0x12, X5 + PSRLL $0x0e, X6 + PXOR X5, X0 + PSHUFL $0x39, X1, X1 + PXOR X6, X0 + PADDL X0, X4 + MOVOA X0, X5 + MOVOA X4, X6 + PSLLL $0x07, X4 + PSRLL $0x19, X6 + PXOR X4, X1 + PXOR X6, X1 + PADDL X1, X5 + MOVOA X1, X4 + MOVOA X5, X6 + PSLLL $0x09, X5 + PSRLL $0x17, X6 + PXOR X5, X2 + PSHUFL $0x93, X1, X1 + PXOR X6, X2 + PADDL X2, X4 + MOVOA X2, X5 + MOVOA X4, X6 + PSLLL $0x0d, X4 + PSRLL $0x13, X6 + PXOR X4, X3 + PSHUFL $0x4e, X2, X2 + PXOR X6, X3 + SUBQ $0x04, CX + PADDL X3, X5 + MOVOA X1, X4 + MOVOA X5, X6 + PSLLL $0x12, X5 + PXOR X7, X7 + PSRLL $0x0e, X6 + PXOR X5, X0 + PSHUFL $0x39, X3, X3 + PXOR X6, X0 + JA MAINLOOP2 + PADDL 48(R12), X0 + PADDL (R12), X1 + PADDL 16(R12), X2 + PADDL 32(R12), X3 + MOVD X0, CX + MOVD X1, R8 + MOVD X2, R9 + MOVD X3, AX + PSHUFL $0x39, X0, X0 + PSHUFL $0x39, X1, X1 + PSHUFL $0x39, X2, X2 + PSHUFL $0x39, X3, X3 + XORL (SI), CX + XORL 48(SI), R8 + XORL 32(SI), R9 + XORL 16(SI), AX + MOVL CX, (DI) + MOVL R8, 48(DI) + MOVL R9, 32(DI) + MOVL AX, 16(DI) + MOVD X0, CX + MOVD X1, R8 + MOVD X2, R9 + MOVD X3, AX + PSHUFL $0x39, X0, X0 + PSHUFL $0x39, X1, X1 + PSHUFL $0x39, X2, X2 + PSHUFL $0x39, X3, X3 + XORL 20(SI), CX + XORL 4(SI), R8 + XORL 52(SI), R9 + XORL 36(SI), AX + MOVL CX, 20(DI) + MOVL R8, 4(DI) + MOVL R9, 52(DI) + MOVL AX, 36(DI) + MOVD X0, CX + MOVD X1, R8 + MOVD X2, R9 + MOVD X3, AX + PSHUFL $0x39, X0, X0 + PSHUFL $0x39, X1, X1 + PSHUFL $0x39, X2, X2 + PSHUFL $0x39, X3, X3 + XORL 40(SI), CX + XORL 24(SI), R8 + XORL 8(SI), R9 + XORL 56(SI), AX + MOVL CX, 40(DI) + MOVL R8, 24(DI) + MOVL R9, 8(DI) + MOVL AX, 56(DI) + MOVD X0, CX + MOVD X1, R8 + MOVD X2, R9 + MOVD X3, AX + XORL 60(SI), CX + XORL 44(SI), R8 + XORL 28(SI), R9 + XORL 12(SI), AX + MOVL CX, 60(DI) + MOVL R8, 44(DI) + MOVL R9, 28(DI) + MOVL AX, 12(DI) + MOVQ 352(R12), R9 + MOVL 16(R12), CX + MOVL 36(R12), R8 + ADDQ $0x01, CX + SHLQ $0x20, R8 + ADDQ R8, CX + MOVQ CX, R8 + SHRQ $0x20, R8 + MOVL CX, 16(R12) + MOVL R8, 36(R12) + CMPQ R9, $0x40 + JA BYTESATLEAST65 + JAE BYTESATLEAST64 + MOVQ DI, SI + MOVQ DX, DI + MOVQ R9, CX REP; MOVSB - BYTESATLEAST64: - DONE: + +BYTESATLEAST64: +DONE: RET - BYTESATLEAST65: - SUBQ $64,R9 - ADDQ $64,DI - ADDQ $64,SI - JMP BYTESBETWEEN1AND255 + +BYTESATLEAST65: + SUBQ $0x40, R9 + ADDQ $0x40, DI + ADDQ $0x40, SI + JMP BYTESBETWEEN1AND255 diff --git a/vendor/golang.org/x/crypto/scrypt/scrypt.go b/vendor/golang.org/x/crypto/scrypt/scrypt.go index 76fa40fb20..b422b7d7fd 100644 --- a/vendor/golang.org/x/crypto/scrypt/scrypt.go +++ b/vendor/golang.org/x/crypto/scrypt/scrypt.go @@ -196,6 +196,9 @@ func Key(password, salt []byte, N, r, p, keyLen int) ([]byte, error) { if N <= 1 || N&(N-1) != 0 { return nil, errors.New("scrypt: N must be > 1 and a power of 2") } + if r <= 0 || p <= 0 { + return nil, errors.New("scrypt: parameters must be > 0") + } if uint64(r)*uint64(p) >= 1<<30 || r > maxInt/128/p || r > maxInt/256 || N > maxInt/128/r { return nil, errors.New("scrypt: parameters are too large") } diff --git a/vendor/golang.org/x/crypto/ssh/certs.go b/vendor/golang.org/x/crypto/ssh/certs.go index 27d0e14aa9..139fa31e1b 100644 --- a/vendor/golang.org/x/crypto/ssh/certs.go +++ b/vendor/golang.org/x/crypto/ssh/certs.go @@ -20,14 +20,19 @@ import ( // returned by MultiAlgorithmSigner and don't appear in the Signature.Format // field. const ( - CertAlgoRSAv01 = "ssh-rsa-cert-v01@openssh.com" - CertAlgoDSAv01 = "ssh-dss-cert-v01@openssh.com" - CertAlgoECDSA256v01 = "ecdsa-sha2-nistp256-cert-v01@openssh.com" - CertAlgoECDSA384v01 = "ecdsa-sha2-nistp384-cert-v01@openssh.com" - CertAlgoECDSA521v01 = "ecdsa-sha2-nistp521-cert-v01@openssh.com" - CertAlgoSKECDSA256v01 = "sk-ecdsa-sha2-nistp256-cert-v01@openssh.com" - CertAlgoED25519v01 = "ssh-ed25519-cert-v01@openssh.com" - CertAlgoSKED25519v01 = "sk-ssh-ed25519-cert-v01@openssh.com" + CertAlgoRSAv01 = "ssh-rsa-cert-v01@openssh.com" + // Deprecated: DSA is only supported at insecure key sizes, and was removed + // from major implementations. + CertAlgoDSAv01 = InsecureCertAlgoDSAv01 + // Deprecated: DSA is only supported at insecure key sizes, and was removed + // from major implementations. + InsecureCertAlgoDSAv01 = "ssh-dss-cert-v01@openssh.com" + CertAlgoECDSA256v01 = "ecdsa-sha2-nistp256-cert-v01@openssh.com" + CertAlgoECDSA384v01 = "ecdsa-sha2-nistp384-cert-v01@openssh.com" + CertAlgoECDSA521v01 = "ecdsa-sha2-nistp521-cert-v01@openssh.com" + CertAlgoSKECDSA256v01 = "sk-ecdsa-sha2-nistp256-cert-v01@openssh.com" + CertAlgoED25519v01 = "ssh-ed25519-cert-v01@openssh.com" + CertAlgoSKED25519v01 = "sk-ssh-ed25519-cert-v01@openssh.com" // CertAlgoRSASHA256v01 and CertAlgoRSASHA512v01 can't appear as a // Certificate.Type (or PublicKey.Type), but only in @@ -228,7 +233,11 @@ func parseCert(in []byte, privAlgo string) (*Certificate, error) { if err != nil { return nil, err } - + // The Type() function is intended to return only certificate key types, but + // we use certKeyAlgoNames anyway for safety, to match [Certificate.Type]. + if _, ok := certKeyAlgoNames[k.Type()]; ok { + return nil, fmt.Errorf("ssh: the signature key type %q is invalid for certificates", k.Type()) + } c.SignatureKey = k c.Signature, rest, ok = parseSignatureBody(g.Signature) if !ok || len(rest) > 0 { @@ -296,16 +305,13 @@ type CertChecker struct { SupportedCriticalOptions []string // IsUserAuthority should return true if the key is recognized as an - // authority for the given user certificate. This allows for - // certificates to be signed by other certificates. This must be set - // if this CertChecker will be checking user certificates. + // authority for user certificate. This must be set if this CertChecker + // will be checking user certificates. IsUserAuthority func(auth PublicKey) bool // IsHostAuthority should report whether the key is recognized as - // an authority for this host. This allows for certificates to be - // signed by other keys, and for those other keys to only be valid - // signers for particular hostnames. This must be set if this - // CertChecker will be checking host certificates. + // an authority for this host. This must be set if this CertChecker + // will be checking host certificates. IsHostAuthority func(auth PublicKey, address string) bool // Clock is used for verifying time stamps. If nil, time.Now @@ -442,12 +448,19 @@ func (c *CertChecker) CheckCert(principal string, cert *Certificate) error { // SignCert signs the certificate with an authority, setting the Nonce, // SignatureKey, and Signature fields. If the authority implements the // MultiAlgorithmSigner interface the first algorithm in the list is used. This -// is useful if you want to sign with a specific algorithm. +// is useful if you want to sign with a specific algorithm. As specified in +// [SSH-CERTS], Section 2.1.1, authority can't be a [Certificate]. func (c *Certificate) SignCert(rand io.Reader, authority Signer) error { c.Nonce = make([]byte, 32) if _, err := io.ReadFull(rand, c.Nonce); err != nil { return err } + // The Type() function is intended to return only certificate key types, but + // we use certKeyAlgoNames anyway for safety, to match [Certificate.Type]. + if _, ok := certKeyAlgoNames[authority.PublicKey().Type()]; ok { + return fmt.Errorf("ssh: certificates cannot be used as authority (public key type %q)", + authority.PublicKey().Type()) + } c.SignatureKey = authority.PublicKey() if v, ok := authority.(MultiAlgorithmSigner); ok { @@ -485,16 +498,16 @@ func (c *Certificate) SignCert(rand io.Reader, authority Signer) error { // // This map must be kept in sync with the one in agent/client.go. var certKeyAlgoNames = map[string]string{ - CertAlgoRSAv01: KeyAlgoRSA, - CertAlgoRSASHA256v01: KeyAlgoRSASHA256, - CertAlgoRSASHA512v01: KeyAlgoRSASHA512, - CertAlgoDSAv01: KeyAlgoDSA, - CertAlgoECDSA256v01: KeyAlgoECDSA256, - CertAlgoECDSA384v01: KeyAlgoECDSA384, - CertAlgoECDSA521v01: KeyAlgoECDSA521, - CertAlgoSKECDSA256v01: KeyAlgoSKECDSA256, - CertAlgoED25519v01: KeyAlgoED25519, - CertAlgoSKED25519v01: KeyAlgoSKED25519, + CertAlgoRSAv01: KeyAlgoRSA, + CertAlgoRSASHA256v01: KeyAlgoRSASHA256, + CertAlgoRSASHA512v01: KeyAlgoRSASHA512, + InsecureCertAlgoDSAv01: InsecureKeyAlgoDSA, + CertAlgoECDSA256v01: KeyAlgoECDSA256, + CertAlgoECDSA384v01: KeyAlgoECDSA384, + CertAlgoECDSA521v01: KeyAlgoECDSA521, + CertAlgoSKECDSA256v01: KeyAlgoSKECDSA256, + CertAlgoED25519v01: KeyAlgoED25519, + CertAlgoSKED25519v01: KeyAlgoSKED25519, } // underlyingAlgo returns the signature algorithm associated with algo (which is diff --git a/vendor/golang.org/x/crypto/ssh/cipher.go b/vendor/golang.org/x/crypto/ssh/cipher.go index 741e984f33..7554ed57a9 100644 --- a/vendor/golang.org/x/crypto/ssh/cipher.go +++ b/vendor/golang.org/x/crypto/ssh/cipher.go @@ -8,6 +8,7 @@ import ( "crypto/aes" "crypto/cipher" "crypto/des" + "crypto/fips140" "crypto/rc4" "crypto/subtle" "encoding/binary" @@ -15,6 +16,7 @@ import ( "fmt" "hash" "io" + "slices" "golang.org/x/crypto/chacha20" "golang.org/x/crypto/internal/poly1305" @@ -58,11 +60,11 @@ func newRC4(key, iv []byte) (cipher.Stream, error) { type cipherMode struct { keySize int ivSize int - create func(key, iv []byte, macKey []byte, algs directionAlgorithms) (packetCipher, error) + create func(key, iv []byte, macKey []byte, algs DirectionAlgorithms) (packetCipher, error) } -func streamCipherMode(skip int, createFunc func(key, iv []byte) (cipher.Stream, error)) func(key, iv []byte, macKey []byte, algs directionAlgorithms) (packetCipher, error) { - return func(key, iv, macKey []byte, algs directionAlgorithms) (packetCipher, error) { +func streamCipherMode(skip int, createFunc func(key, iv []byte) (cipher.Stream, error)) func(key, iv []byte, macKey []byte, algs DirectionAlgorithms) (packetCipher, error) { + return func(key, iv, macKey []byte, algs DirectionAlgorithms) (packetCipher, error) { stream, err := createFunc(key, iv) if err != nil { return nil, err @@ -93,41 +95,41 @@ func streamCipherMode(skip int, createFunc func(key, iv []byte) (cipher.Stream, } // cipherModes documents properties of supported ciphers. Ciphers not included -// are not supported and will not be negotiated, even if explicitly requested in -// ClientConfig.Crypto.Ciphers. -var cipherModes = map[string]*cipherMode{ - // Ciphers from RFC 4344, which introduced many CTR-based ciphers. Algorithms - // are defined in the order specified in the RFC. - "aes128-ctr": {16, aes.BlockSize, streamCipherMode(0, newAESCTR)}, - "aes192-ctr": {24, aes.BlockSize, streamCipherMode(0, newAESCTR)}, - "aes256-ctr": {32, aes.BlockSize, streamCipherMode(0, newAESCTR)}, - - // Ciphers from RFC 4345, which introduces security-improved arcfour ciphers. - // They are defined in the order specified in the RFC. - "arcfour128": {16, 0, streamCipherMode(1536, newRC4)}, - "arcfour256": {32, 0, streamCipherMode(1536, newRC4)}, - - // Cipher defined in RFC 4253, which describes SSH Transport Layer Protocol. - // Note that this cipher is not safe, as stated in RFC 4253: "Arcfour (and - // RC4) has problems with weak keys, and should be used with caution." - // RFC 4345 introduces improved versions of Arcfour. - "arcfour": {16, 0, streamCipherMode(0, newRC4)}, - - // AEAD ciphers - gcm128CipherID: {16, 12, newGCMCipher}, - gcm256CipherID: {32, 12, newGCMCipher}, - chacha20Poly1305ID: {64, 0, newChaCha20Cipher}, - +// are not supported and will not be negotiated, even if explicitly configured. +// When FIPS mode is enabled, only FIPS-approved algorithms are included. +var cipherModes = map[string]*cipherMode{} + +func init() { + cipherModes[CipherAES128CTR] = &cipherMode{16, aes.BlockSize, streamCipherMode(0, newAESCTR)} + cipherModes[CipherAES192CTR] = &cipherMode{24, aes.BlockSize, streamCipherMode(0, newAESCTR)} + cipherModes[CipherAES256CTR] = &cipherMode{32, aes.BlockSize, streamCipherMode(0, newAESCTR)} + // Use of GCM with arbitrary IVs is not allowed in FIPS 140-only mode, + // we'll wire it up to NewGCMForSSH in Go 1.26. + // + // For now it means we'll work with fips140=on but not fips140=only. + cipherModes[CipherAES128GCM] = &cipherMode{16, 12, newGCMCipher} + cipherModes[CipherAES256GCM] = &cipherMode{32, 12, newGCMCipher} + + if fips140.Enabled() { + defaultCiphers = slices.DeleteFunc(defaultCiphers, func(algo string) bool { + _, ok := cipherModes[algo] + return !ok + }) + return + } + + cipherModes[CipherChaCha20Poly1305] = &cipherMode{64, 0, newChaCha20Cipher} + // Insecure ciphers not included in the default configuration. + cipherModes[InsecureCipherRC4128] = &cipherMode{16, 0, streamCipherMode(1536, newRC4)} + cipherModes[InsecureCipherRC4256] = &cipherMode{32, 0, streamCipherMode(1536, newRC4)} + cipherModes[InsecureCipherRC4] = &cipherMode{16, 0, streamCipherMode(0, newRC4)} // CBC mode is insecure and so is not included in the default config. // (See https://www.ieee-security.org/TC/SP2013/papers/4977a526.pdf). If absolutely // needed, it's possible to specify a custom Config to enable it. // You should expect that an active attacker can recover plaintext if // you do. - aes128cbcID: {16, aes.BlockSize, newAESCBCCipher}, - - // 3des-cbc is insecure and is not included in the default - // config. - tripledescbcID: {24, des.BlockSize, newTripleDESCBCCipher}, + cipherModes[InsecureCipherAES128CBC] = &cipherMode{16, aes.BlockSize, newAESCBCCipher} + cipherModes[InsecureCipherTripleDESCBC] = &cipherMode{24, des.BlockSize, newTripleDESCBCCipher} } // prefixLen is the length of the packet prefix that contains the packet length @@ -307,7 +309,7 @@ type gcmCipher struct { buf []byte } -func newGCMCipher(key, iv, unusedMacKey []byte, unusedAlgs directionAlgorithms) (packetCipher, error) { +func newGCMCipher(key, iv, unusedMacKey []byte, unusedAlgs DirectionAlgorithms) (packetCipher, error) { c, err := aes.NewCipher(key) if err != nil { return nil, err @@ -429,7 +431,7 @@ type cbcCipher struct { oracleCamouflage uint32 } -func newCBCCipher(c cipher.Block, key, iv, macKey []byte, algs directionAlgorithms) (packetCipher, error) { +func newCBCCipher(c cipher.Block, key, iv, macKey []byte, algs DirectionAlgorithms) (packetCipher, error) { cbc := &cbcCipher{ mac: macModes[algs.MAC].new(macKey), decrypter: cipher.NewCBCDecrypter(c, iv), @@ -443,7 +445,7 @@ func newCBCCipher(c cipher.Block, key, iv, macKey []byte, algs directionAlgorith return cbc, nil } -func newAESCBCCipher(key, iv, macKey []byte, algs directionAlgorithms) (packetCipher, error) { +func newAESCBCCipher(key, iv, macKey []byte, algs DirectionAlgorithms) (packetCipher, error) { c, err := aes.NewCipher(key) if err != nil { return nil, err @@ -457,7 +459,7 @@ func newAESCBCCipher(key, iv, macKey []byte, algs directionAlgorithms) (packetCi return cbc, nil } -func newTripleDESCBCCipher(key, iv, macKey []byte, algs directionAlgorithms) (packetCipher, error) { +func newTripleDESCBCCipher(key, iv, macKey []byte, algs DirectionAlgorithms) (packetCipher, error) { c, err := des.NewTripleDESCipher(key) if err != nil { return nil, err @@ -635,8 +637,6 @@ func (c *cbcCipher) writeCipherPacket(seqNum uint32, w io.Writer, rand io.Reader return nil } -const chacha20Poly1305ID = "chacha20-poly1305@openssh.com" - // chacha20Poly1305Cipher implements the chacha20-poly1305@openssh.com // AEAD, which is described here: // @@ -650,7 +650,7 @@ type chacha20Poly1305Cipher struct { buf []byte } -func newChaCha20Cipher(key, unusedIV, unusedMACKey []byte, unusedAlgs directionAlgorithms) (packetCipher, error) { +func newChaCha20Cipher(key, unusedIV, unusedMACKey []byte, unusedAlgs DirectionAlgorithms) (packetCipher, error) { if len(key) != 64 { panic(len(key)) } diff --git a/vendor/golang.org/x/crypto/ssh/client.go b/vendor/golang.org/x/crypto/ssh/client.go index fd8c49749e..33079789bc 100644 --- a/vendor/golang.org/x/crypto/ssh/client.go +++ b/vendor/golang.org/x/crypto/ssh/client.go @@ -110,6 +110,7 @@ func (c *connection) clientHandshake(dialAddress string, config *ClientConfig) e } c.sessionID = c.transport.getSessionID() + c.algorithms = c.transport.getAlgorithms() return c.clientAuthenticate(config) } diff --git a/vendor/golang.org/x/crypto/ssh/client_auth.go b/vendor/golang.org/x/crypto/ssh/client_auth.go index b93961010d..3127e49903 100644 --- a/vendor/golang.org/x/crypto/ssh/client_auth.go +++ b/vendor/golang.org/x/crypto/ssh/client_auth.go @@ -9,6 +9,7 @@ import ( "errors" "fmt" "io" + "slices" "strings" ) @@ -83,7 +84,7 @@ func (c *connection) clientAuthenticate(config *ClientConfig) error { // success return nil } else if ok == authFailure { - if m := auth.method(); !contains(tried, m) { + if m := auth.method(); !slices.Contains(tried, m) { tried = append(tried, m) } } @@ -97,7 +98,7 @@ func (c *connection) clientAuthenticate(config *ClientConfig) error { findNext: for _, a := range config.Auth { candidateMethod := a.method() - if contains(tried, candidateMethod) { + if slices.Contains(tried, candidateMethod) { continue } for _, meth := range methods { @@ -117,15 +118,6 @@ func (c *connection) clientAuthenticate(config *ClientConfig) error { return fmt.Errorf("ssh: unable to authenticate, attempted methods %v, no supported methods remain", tried) } -func contains(list []string, e string) bool { - for _, s := range list { - if s == e { - return true - } - } - return false -} - // An AuthMethod represents an instance of an RFC 4252 authentication method. type AuthMethod interface { // auth authenticates user over transport t. @@ -255,7 +247,7 @@ func pickSignatureAlgorithm(signer Signer, extensions map[string][]byte) (MultiA // Fallback to use if there is no "server-sig-algs" extension or a // common algorithm cannot be found. We use the public key format if the // MultiAlgorithmSigner supports it, otherwise we return an error. - if !contains(as.Algorithms(), underlyingAlgo(keyFormat)) { + if !slices.Contains(as.Algorithms(), underlyingAlgo(keyFormat)) { return "", fmt.Errorf("ssh: no common public key signature algorithm, server only supports %q for key type %q, signer only supports %v", underlyingAlgo(keyFormat), keyFormat, as.Algorithms()) } @@ -284,12 +276,12 @@ func pickSignatureAlgorithm(signer Signer, extensions map[string][]byte) (MultiA // Filter algorithms based on those supported by MultiAlgorithmSigner. var keyAlgos []string for _, algo := range algorithmsForKeyFormat(keyFormat) { - if contains(as.Algorithms(), underlyingAlgo(algo)) { + if slices.Contains(as.Algorithms(), underlyingAlgo(algo)) { keyAlgos = append(keyAlgos, algo) } } - algo, err := findCommon("public key signature algorithm", keyAlgos, serverAlgos) + algo, err := findCommon("public key signature algorithm", keyAlgos, serverAlgos, true) if err != nil { // If there is no overlap, return the fallback algorithm to support // servers that fail to list all supported algorithms. @@ -334,7 +326,7 @@ func (cb publicKeyCallback) auth(session []byte, user string, c packetConn, rand // the key try to use the obtained algorithm as if "server-sig-algs" had // not been implemented if supported from the algorithm signer. if !ok && idx < origSignersLen && isRSACert(algo) && algo != CertAlgoRSAv01 { - if contains(as.Algorithms(), KeyAlgoRSA) { + if slices.Contains(as.Algorithms(), KeyAlgoRSA) { // We retry using the compat algorithm after all signers have // been tried normally. signers = append(signers, &multiAlgorithmSigner{ @@ -385,7 +377,7 @@ func (cb publicKeyCallback) auth(session []byte, user string, c packetConn, rand // contain the "publickey" method, do not attempt to authenticate with any // other keys. According to RFC 4252 Section 7, the latter can occur when // additional authentication methods are required. - if success == authSuccess || !contains(methods, cb.method()) { + if success == authSuccess || !slices.Contains(methods, cb.method()) { return success, methods, err } } @@ -434,7 +426,7 @@ func confirmKeyAck(key PublicKey, c packetConn) (bool, error) { // servers send the key type instead. OpenSSH allows any algorithm // that matches the public key, so we do the same. // https://github.com/openssh/openssh-portable/blob/86bdd385/sshconnect2.c#L709 - if !contains(algorithmsForKeyFormat(key.Type()), msg.Algo) { + if !slices.Contains(algorithmsForKeyFormat(key.Type()), msg.Algo) { return false, nil } if !bytes.Equal(msg.PubKey, pubKey) { @@ -555,6 +547,7 @@ func (cb KeyboardInteractiveChallenge) auth(session []byte, user string, c packe } gotMsgExtInfo := false + gotUserAuthInfoRequest := false for { packet, err := c.readPacket() if err != nil { @@ -585,6 +578,9 @@ func (cb KeyboardInteractiveChallenge) auth(session []byte, user string, c packe if msg.PartialSuccess { return authPartialSuccess, msg.Methods, nil } + if !gotUserAuthInfoRequest { + return authFailure, msg.Methods, unexpectedMessageError(msgUserAuthInfoRequest, packet[0]) + } return authFailure, msg.Methods, nil case msgUserAuthSuccess: return authSuccess, nil, nil @@ -596,6 +592,7 @@ func (cb KeyboardInteractiveChallenge) auth(session []byte, user string, c packe if err := Unmarshal(packet, &msg); err != nil { return authFailure, nil, err } + gotUserAuthInfoRequest = true // Manually unpack the prompt/echo pairs. rest := msg.Prompts diff --git a/vendor/golang.org/x/crypto/ssh/common.go b/vendor/golang.org/x/crypto/ssh/common.go index 7e9c2cbc64..2e44e9c9ec 100644 --- a/vendor/golang.org/x/crypto/ssh/common.go +++ b/vendor/golang.org/x/crypto/ssh/common.go @@ -6,10 +6,12 @@ package ssh import ( "crypto" + "crypto/fips140" "crypto/rand" "fmt" "io" "math" + "slices" "sync" _ "crypto/sha1" @@ -24,88 +26,298 @@ const ( serviceSSH = "ssh-connection" ) -// supportedCiphers lists ciphers we support but might not recommend. -var supportedCiphers = []string{ - "aes128-ctr", "aes192-ctr", "aes256-ctr", - "aes128-gcm@openssh.com", gcm256CipherID, - chacha20Poly1305ID, - "arcfour256", "arcfour128", "arcfour", - aes128cbcID, - tripledescbcID, -} +// The ciphers currently or previously implemented by this library, to use in +// [Config.Ciphers]. For a list, see the [Algorithms.Ciphers] returned by +// [SupportedAlgorithms] or [InsecureAlgorithms]. +const ( + CipherAES128GCM = "aes128-gcm@openssh.com" + CipherAES256GCM = "aes256-gcm@openssh.com" + CipherChaCha20Poly1305 = "chacha20-poly1305@openssh.com" + CipherAES128CTR = "aes128-ctr" + CipherAES192CTR = "aes192-ctr" + CipherAES256CTR = "aes256-ctr" + InsecureCipherAES128CBC = "aes128-cbc" + InsecureCipherTripleDESCBC = "3des-cbc" + InsecureCipherRC4 = "arcfour" + InsecureCipherRC4128 = "arcfour128" + InsecureCipherRC4256 = "arcfour256" +) -// preferredCiphers specifies the default preference for ciphers. -var preferredCiphers = []string{ - "aes128-gcm@openssh.com", gcm256CipherID, - chacha20Poly1305ID, - "aes128-ctr", "aes192-ctr", "aes256-ctr", -} +// The key exchanges currently or previously implemented by this library, to use +// in [Config.KeyExchanges]. For a list, see the +// [Algorithms.KeyExchanges] returned by [SupportedAlgorithms] or +// [InsecureAlgorithms]. +const ( + InsecureKeyExchangeDH1SHA1 = "diffie-hellman-group1-sha1" + InsecureKeyExchangeDH14SHA1 = "diffie-hellman-group14-sha1" + KeyExchangeDH14SHA256 = "diffie-hellman-group14-sha256" + KeyExchangeDH16SHA512 = "diffie-hellman-group16-sha512" + KeyExchangeECDHP256 = "ecdh-sha2-nistp256" + KeyExchangeECDHP384 = "ecdh-sha2-nistp384" + KeyExchangeECDHP521 = "ecdh-sha2-nistp521" + KeyExchangeCurve25519 = "curve25519-sha256" + InsecureKeyExchangeDHGEXSHA1 = "diffie-hellman-group-exchange-sha1" + KeyExchangeDHGEXSHA256 = "diffie-hellman-group-exchange-sha256" + // KeyExchangeMLKEM768X25519 is supported from Go 1.24. + KeyExchangeMLKEM768X25519 = "mlkem768x25519-sha256" + + // An alias for KeyExchangeCurve25519SHA256. This kex ID will be added if + // KeyExchangeCurve25519SHA256 is requested for backward compatibility with + // OpenSSH versions up to 7.2. + keyExchangeCurve25519LibSSH = "curve25519-sha256@libssh.org" +) -// supportedKexAlgos specifies the supported key-exchange algorithms in -// preference order. -var supportedKexAlgos = []string{ - kexAlgoCurve25519SHA256, kexAlgoCurve25519SHA256LibSSH, - // P384 and P521 are not constant-time yet, but since we don't - // reuse ephemeral keys, using them for ECDH should be OK. - kexAlgoECDH256, kexAlgoECDH384, kexAlgoECDH521, - kexAlgoDH14SHA256, kexAlgoDH16SHA512, kexAlgoDH14SHA1, - kexAlgoDH1SHA1, -} +// The message authentication code (MAC) currently or previously implemented by +// this library, to use in [Config.MACs]. For a list, see the +// [Algorithms.MACs] returned by [SupportedAlgorithms] or +// [InsecureAlgorithms]. +const ( + HMACSHA256ETM = "hmac-sha2-256-etm@openssh.com" + HMACSHA512ETM = "hmac-sha2-512-etm@openssh.com" + HMACSHA256 = "hmac-sha2-256" + HMACSHA512 = "hmac-sha2-512" + HMACSHA1 = "hmac-sha1" + InsecureHMACSHA196 = "hmac-sha1-96" +) -// serverForbiddenKexAlgos contains key exchange algorithms, that are forbidden -// for the server half. -var serverForbiddenKexAlgos = map[string]struct{}{ - kexAlgoDHGEXSHA1: {}, // server half implementation is only minimal to satisfy the automated tests - kexAlgoDHGEXSHA256: {}, // server half implementation is only minimal to satisfy the automated tests -} +var ( + // supportedKexAlgos specifies key-exchange algorithms implemented by this + // package in preference order, excluding those with security issues. + supportedKexAlgos = []string{ + KeyExchangeMLKEM768X25519, + KeyExchangeCurve25519, + KeyExchangeECDHP256, + KeyExchangeECDHP384, + KeyExchangeECDHP521, + KeyExchangeDH14SHA256, + KeyExchangeDH16SHA512, + KeyExchangeDHGEXSHA256, + } + // defaultKexAlgos specifies the default preference for key-exchange + // algorithms in preference order. + defaultKexAlgos = []string{ + KeyExchangeMLKEM768X25519, + KeyExchangeCurve25519, + KeyExchangeECDHP256, + KeyExchangeECDHP384, + KeyExchangeECDHP521, + KeyExchangeDH14SHA256, + InsecureKeyExchangeDH14SHA1, + } + // insecureKexAlgos specifies key-exchange algorithms implemented by this + // package and which have security issues. + insecureKexAlgos = []string{ + InsecureKeyExchangeDH14SHA1, + InsecureKeyExchangeDH1SHA1, + InsecureKeyExchangeDHGEXSHA1, + } + // supportedCiphers specifies cipher algorithms implemented by this package + // in preference order, excluding those with security issues. + supportedCiphers = []string{ + CipherAES128GCM, + CipherAES256GCM, + CipherChaCha20Poly1305, + CipherAES128CTR, + CipherAES192CTR, + CipherAES256CTR, + } + // defaultCiphers specifies the default preference for ciphers algorithms + // in preference order. + defaultCiphers = supportedCiphers + // insecureCiphers specifies cipher algorithms implemented by this + // package and which have security issues. + insecureCiphers = []string{ + InsecureCipherAES128CBC, + InsecureCipherTripleDESCBC, + InsecureCipherRC4256, + InsecureCipherRC4128, + InsecureCipherRC4, + } + // supportedMACs specifies MAC algorithms implemented by this package in + // preference order, excluding those with security issues. + supportedMACs = []string{ + HMACSHA256ETM, + HMACSHA512ETM, + HMACSHA256, + HMACSHA512, + HMACSHA1, + } + // defaultMACs specifies the default preference for MAC algorithms in + // preference order. + defaultMACs = []string{ + HMACSHA256ETM, + HMACSHA512ETM, + HMACSHA256, + HMACSHA512, + HMACSHA1, + InsecureHMACSHA196, + } + // insecureMACs specifies MAC algorithms implemented by this + // package and which have security issues. + insecureMACs = []string{ + InsecureHMACSHA196, + } + // supportedHostKeyAlgos specifies the supported host-key algorithms (i.e. + // methods of authenticating servers) implemented by this package in + // preference order, excluding those with security issues. + supportedHostKeyAlgos = []string{ + CertAlgoRSASHA256v01, + CertAlgoRSASHA512v01, + CertAlgoECDSA256v01, + CertAlgoECDSA384v01, + CertAlgoECDSA521v01, + CertAlgoED25519v01, + KeyAlgoRSASHA256, + KeyAlgoRSASHA512, + KeyAlgoECDSA256, + KeyAlgoECDSA384, + KeyAlgoECDSA521, + KeyAlgoED25519, + } + // defaultHostKeyAlgos specifies the default preference for host-key + // algorithms in preference order. + defaultHostKeyAlgos = []string{ + CertAlgoRSASHA256v01, + CertAlgoRSASHA512v01, + CertAlgoRSAv01, + InsecureCertAlgoDSAv01, + CertAlgoECDSA256v01, + CertAlgoECDSA384v01, + CertAlgoECDSA521v01, + CertAlgoED25519v01, + KeyAlgoECDSA256, + KeyAlgoECDSA384, + KeyAlgoECDSA521, + KeyAlgoRSASHA256, + KeyAlgoRSASHA512, + KeyAlgoRSA, + InsecureKeyAlgoDSA, + KeyAlgoED25519, + } + // insecureHostKeyAlgos specifies host-key algorithms implemented by this + // package and which have security issues. + insecureHostKeyAlgos = []string{ + KeyAlgoRSA, + InsecureKeyAlgoDSA, + CertAlgoRSAv01, + InsecureCertAlgoDSAv01, + } + // supportedPubKeyAuthAlgos specifies the supported client public key + // authentication algorithms. Note that this doesn't include certificate + // types since those use the underlying algorithm. Order is irrelevant. + supportedPubKeyAuthAlgos = []string{ + KeyAlgoED25519, + KeyAlgoSKED25519, + KeyAlgoSKECDSA256, + KeyAlgoECDSA256, + KeyAlgoECDSA384, + KeyAlgoECDSA521, + KeyAlgoRSASHA256, + KeyAlgoRSASHA512, + } -// preferredKexAlgos specifies the default preference for key-exchange -// algorithms in preference order. The diffie-hellman-group16-sha512 algorithm -// is disabled by default because it is a bit slower than the others. -var preferredKexAlgos = []string{ - kexAlgoCurve25519SHA256, kexAlgoCurve25519SHA256LibSSH, - kexAlgoECDH256, kexAlgoECDH384, kexAlgoECDH521, - kexAlgoDH14SHA256, kexAlgoDH14SHA1, -} + // defaultPubKeyAuthAlgos specifies the preferred client public key + // authentication algorithms. This list is sent to the client if it supports + // the server-sig-algs extension. Order is irrelevant. + defaultPubKeyAuthAlgos = []string{ + KeyAlgoED25519, + KeyAlgoSKED25519, + KeyAlgoSKECDSA256, + KeyAlgoECDSA256, + KeyAlgoECDSA384, + KeyAlgoECDSA521, + KeyAlgoRSASHA256, + KeyAlgoRSASHA512, + KeyAlgoRSA, + InsecureKeyAlgoDSA, + } + // insecurePubKeyAuthAlgos specifies client public key authentication + // algorithms implemented by this package and which have security issues. + insecurePubKeyAuthAlgos = []string{ + KeyAlgoRSA, + InsecureKeyAlgoDSA, + } +) -// supportedHostKeyAlgos specifies the supported host-key algorithms (i.e. methods -// of authenticating servers) in preference order. -var supportedHostKeyAlgos = []string{ - CertAlgoRSASHA256v01, CertAlgoRSASHA512v01, - CertAlgoRSAv01, CertAlgoDSAv01, CertAlgoECDSA256v01, - CertAlgoECDSA384v01, CertAlgoECDSA521v01, CertAlgoED25519v01, +// NegotiatedAlgorithms defines algorithms negotiated between client and server. +type NegotiatedAlgorithms struct { + KeyExchange string + HostKey string + Read DirectionAlgorithms + Write DirectionAlgorithms +} + +// Algorithms defines a set of algorithms that can be configured in the client +// or server config for negotiation during a handshake. +type Algorithms struct { + KeyExchanges []string + Ciphers []string + MACs []string + HostKeys []string + PublicKeyAuths []string +} + +func init() { + if fips140.Enabled() { + defaultHostKeyAlgos = slices.DeleteFunc(defaultHostKeyAlgos, func(algo string) bool { + _, err := hashFunc(underlyingAlgo(algo)) + return err != nil + }) + defaultPubKeyAuthAlgos = slices.DeleteFunc(defaultPubKeyAuthAlgos, func(algo string) bool { + _, err := hashFunc(underlyingAlgo(algo)) + return err != nil + }) + } +} - KeyAlgoECDSA256, KeyAlgoECDSA384, KeyAlgoECDSA521, - KeyAlgoRSASHA256, KeyAlgoRSASHA512, - KeyAlgoRSA, KeyAlgoDSA, +func hashFunc(format string) (crypto.Hash, error) { + switch format { + case KeyAlgoRSASHA256, KeyAlgoECDSA256, KeyAlgoSKED25519, KeyAlgoSKECDSA256: + return crypto.SHA256, nil + case KeyAlgoECDSA384: + return crypto.SHA384, nil + case KeyAlgoRSASHA512, KeyAlgoECDSA521: + return crypto.SHA512, nil + case KeyAlgoED25519: + // KeyAlgoED25519 doesn't pre-hash. + return 0, nil + case KeyAlgoRSA, InsecureKeyAlgoDSA: + if fips140.Enabled() { + return 0, fmt.Errorf("ssh: hash algorithm for format %q not allowed in FIPS 140 mode", format) + } + return crypto.SHA1, nil + default: + return 0, fmt.Errorf("ssh: hash algorithm for format %q not mapped", format) + } +} - KeyAlgoED25519, +// SupportedAlgorithms returns algorithms currently implemented by this package, +// excluding those with security issues, which are returned by +// InsecureAlgorithms. The algorithms listed here are in preference order. +func SupportedAlgorithms() Algorithms { + return Algorithms{ + Ciphers: slices.Clone(supportedCiphers), + MACs: slices.Clone(supportedMACs), + KeyExchanges: slices.Clone(supportedKexAlgos), + HostKeys: slices.Clone(supportedHostKeyAlgos), + PublicKeyAuths: slices.Clone(supportedPubKeyAuthAlgos), + } } -// supportedMACs specifies a default set of MAC algorithms in preference order. -// This is based on RFC 4253, section 6.4, but with hmac-md5 variants removed -// because they have reached the end of their useful life. -var supportedMACs = []string{ - "hmac-sha2-256-etm@openssh.com", "hmac-sha2-512-etm@openssh.com", "hmac-sha2-256", "hmac-sha2-512", "hmac-sha1", "hmac-sha1-96", +// InsecureAlgorithms returns algorithms currently implemented by this package +// and which have security issues. +func InsecureAlgorithms() Algorithms { + return Algorithms{ + KeyExchanges: slices.Clone(insecureKexAlgos), + Ciphers: slices.Clone(insecureCiphers), + MACs: slices.Clone(insecureMACs), + HostKeys: slices.Clone(insecureHostKeyAlgos), + PublicKeyAuths: slices.Clone(insecurePubKeyAuthAlgos), + } } var supportedCompressions = []string{compressionNone} -// hashFuncs keeps the mapping of supported signature algorithms to their -// respective hashes needed for signing and verification. -var hashFuncs = map[string]crypto.Hash{ - KeyAlgoRSA: crypto.SHA1, - KeyAlgoRSASHA256: crypto.SHA256, - KeyAlgoRSASHA512: crypto.SHA512, - KeyAlgoDSA: crypto.SHA1, - KeyAlgoECDSA256: crypto.SHA256, - KeyAlgoECDSA384: crypto.SHA384, - KeyAlgoECDSA521: crypto.SHA512, - // KeyAlgoED25519 doesn't pre-hash. - KeyAlgoSKECDSA256: crypto.SHA256, - KeyAlgoSKED25519: crypto.SHA256, -} - // algorithmsForKeyFormat returns the supported signature algorithms for a given // public key format (PublicKey.Type), in order of preference. See RFC 8332, // Section 2. See also the note in sendKexInit on backwards compatibility. @@ -120,11 +332,40 @@ func algorithmsForKeyFormat(keyFormat string) []string { } } +// keyFormatForAlgorithm returns the key format corresponding to the given +// signature algorithm. It returns an empty string if the signature algorithm is +// invalid or unsupported. +func keyFormatForAlgorithm(sigAlgo string) string { + switch sigAlgo { + case KeyAlgoRSA, KeyAlgoRSASHA256, KeyAlgoRSASHA512: + return KeyAlgoRSA + case CertAlgoRSAv01, CertAlgoRSASHA256v01, CertAlgoRSASHA512v01: + return CertAlgoRSAv01 + case KeyAlgoED25519, + KeyAlgoSKED25519, + KeyAlgoSKECDSA256, + KeyAlgoECDSA256, + KeyAlgoECDSA384, + KeyAlgoECDSA521, + InsecureKeyAlgoDSA, + InsecureCertAlgoDSAv01, + CertAlgoECDSA256v01, + CertAlgoECDSA384v01, + CertAlgoECDSA521v01, + CertAlgoSKECDSA256v01, + CertAlgoED25519v01, + CertAlgoSKED25519v01: + return sigAlgo + default: + return "" + } +} + // isRSA returns whether algo is a supported RSA algorithm, including certificate // algorithms. func isRSA(algo string) bool { algos := algorithmsForKeyFormat(KeyAlgoRSA) - return contains(algos, underlyingAlgo(algo)) + return slices.Contains(algos, underlyingAlgo(algo)) } func isRSACert(algo string) bool { @@ -135,18 +376,6 @@ func isRSACert(algo string) bool { return isRSA(algo) } -// supportedPubKeyAuthAlgos specifies the supported client public key -// authentication algorithms. Note that this doesn't include certificate types -// since those use the underlying algorithm. This list is sent to the client if -// it supports the server-sig-algs extension. Order is irrelevant. -var supportedPubKeyAuthAlgos = []string{ - KeyAlgoED25519, - KeyAlgoSKED25519, KeyAlgoSKECDSA256, - KeyAlgoECDSA256, KeyAlgoECDSA384, KeyAlgoECDSA521, - KeyAlgoRSASHA256, KeyAlgoRSASHA512, KeyAlgoRSA, - KeyAlgoDSA, -} - // unexpectedMessageError results when the SSH message that we received didn't // match what we wanted. func unexpectedMessageError(expected, got uint8) error { @@ -158,7 +387,7 @@ func parseError(tag uint8) error { return fmt.Errorf("ssh: parse error in message type %d", tag) } -func findCommon(what string, client []string, server []string) (common string, err error) { +func findCommon(what string, client []string, server []string, isClient bool) (string, error) { for _, c := range client { for _, s := range server { if c == s { @@ -166,23 +395,49 @@ func findCommon(what string, client []string, server []string) (common string, e } } } - return "", fmt.Errorf("ssh: no common algorithm for %s; client offered: %v, server offered: %v", what, client, server) + err := &AlgorithmNegotiationError{ + What: what, + } + if isClient { + err.SupportedAlgorithms = client + err.RequestedAlgorithms = server + } else { + err.SupportedAlgorithms = server + err.RequestedAlgorithms = client + } + return "", err } -// directionAlgorithms records algorithm choices in one direction (either read or write) -type directionAlgorithms struct { +// AlgorithmNegotiationError defines the error returned if the client and the +// server cannot agree on an algorithm for key exchange, host key, cipher, MAC. +type AlgorithmNegotiationError struct { + What string + // RequestedAlgorithms lists the algorithms supported by the peer. + RequestedAlgorithms []string + // SupportedAlgorithms lists the algorithms supported on our side. + SupportedAlgorithms []string +} + +func (a *AlgorithmNegotiationError) Error() string { + return fmt.Sprintf("ssh: no common algorithm for %s; we offered: %v, peer offered: %v", + a.What, a.SupportedAlgorithms, a.RequestedAlgorithms) +} + +// DirectionAlgorithms defines the algorithms negotiated in one direction +// (either read or write). +type DirectionAlgorithms struct { Cipher string MAC string - Compression string + compression string } // rekeyBytes returns a rekeying intervals in bytes. -func (a *directionAlgorithms) rekeyBytes() int64 { +func (a *DirectionAlgorithms) rekeyBytes() int64 { // According to RFC 4344 block ciphers should rekey after // 2^(BLOCKSIZE/4) blocks. For all AES flavors BLOCKSIZE is // 128. switch a.Cipher { - case "aes128-ctr", "aes192-ctr", "aes256-ctr", gcm128CipherID, gcm256CipherID, aes128cbcID: + case CipherAES128CTR, CipherAES192CTR, CipherAES256CTR, CipherAES128GCM, CipherAES256GCM, InsecureCipherAES128CBC: return 16 * (1 << 32) } @@ -192,66 +447,59 @@ func (a *directionAlgorithms) rekeyBytes() int64 { } var aeadCiphers = map[string]bool{ - gcm128CipherID: true, - gcm256CipherID: true, - chacha20Poly1305ID: true, + CipherAES128GCM: true, + CipherAES256GCM: true, + CipherChaCha20Poly1305: true, } -type algorithms struct { - kex string - hostKey string - w directionAlgorithms - r directionAlgorithms -} - -func findAgreedAlgorithms(isClient bool, clientKexInit, serverKexInit *kexInitMsg) (algs *algorithms, err error) { - result := &algorithms{} +func findAgreedAlgorithms(isClient bool, clientKexInit, serverKexInit *kexInitMsg) (algs *NegotiatedAlgorithms, err error) { + result := &NegotiatedAlgorithms{} - result.kex, err = findCommon("key exchange", clientKexInit.KexAlgos, serverKexInit.KexAlgos) + result.KeyExchange, err = findCommon("key exchange", clientKexInit.KexAlgos, serverKexInit.KexAlgos, isClient) if err != nil { return } - result.hostKey, err = findCommon("host key", clientKexInit.ServerHostKeyAlgos, serverKexInit.ServerHostKeyAlgos) + result.HostKey, err = findCommon("host key", clientKexInit.ServerHostKeyAlgos, serverKexInit.ServerHostKeyAlgos, isClient) if err != nil { return } - stoc, ctos := &result.w, &result.r + stoc, ctos := &result.Write, &result.Read if isClient { ctos, stoc = stoc, ctos } - ctos.Cipher, err = findCommon("client to server cipher", clientKexInit.CiphersClientServer, serverKexInit.CiphersClientServer) + ctos.Cipher, err = findCommon("client to server cipher", clientKexInit.CiphersClientServer, serverKexInit.CiphersClientServer, isClient) if err != nil { return } - stoc.Cipher, err = findCommon("server to client cipher", clientKexInit.CiphersServerClient, serverKexInit.CiphersServerClient) + stoc.Cipher, err = findCommon("server to client cipher", clientKexInit.CiphersServerClient, serverKexInit.CiphersServerClient, isClient) if err != nil { return } if !aeadCiphers[ctos.Cipher] { - ctos.MAC, err = findCommon("client to server MAC", clientKexInit.MACsClientServer, serverKexInit.MACsClientServer) + ctos.MAC, err = findCommon("client to server MAC", clientKexInit.MACsClientServer, serverKexInit.MACsClientServer, isClient) if err != nil { return } } if !aeadCiphers[stoc.Cipher] { - stoc.MAC, err = findCommon("server to client MAC", clientKexInit.MACsServerClient, serverKexInit.MACsServerClient) + stoc.MAC, err = findCommon("server to client MAC", clientKexInit.MACsServerClient, serverKexInit.MACsServerClient, isClient) if err != nil { return } } - ctos.Compression, err = findCommon("client to server compression", clientKexInit.CompressionClientServer, serverKexInit.CompressionClientServer) + ctos.compression, err = findCommon("client to server compression", clientKexInit.CompressionClientServer, serverKexInit.CompressionClientServer, isClient) if err != nil { return } - stoc.Compression, err = findCommon("server to client compression", clientKexInit.CompressionServerClient, serverKexInit.CompressionServerClient) + stoc.compression, err = findCommon("server to client compression", clientKexInit.CompressionServerClient, serverKexInit.CompressionServerClient, isClient) if err != nil { return } @@ -297,7 +545,7 @@ func (c *Config) SetDefaults() { c.Rand = rand.Reader } if c.Ciphers == nil { - c.Ciphers = preferredCiphers + c.Ciphers = defaultCiphers } var ciphers []string for _, c := range c.Ciphers { @@ -309,19 +557,22 @@ func (c *Config) SetDefaults() { c.Ciphers = ciphers if c.KeyExchanges == nil { - c.KeyExchanges = preferredKexAlgos + c.KeyExchanges = defaultKexAlgos } var kexs []string for _, k := range c.KeyExchanges { if kexAlgoMap[k] != nil { // Ignore the KEX if we have no kexAlgoMap definition. kexs = append(kexs, k) + if k == KeyExchangeCurve25519 && !slices.Contains(c.KeyExchanges, keyExchangeCurve25519LibSSH) { + kexs = append(kexs, keyExchangeCurve25519LibSSH) + } } } c.KeyExchanges = kexs if c.MACs == nil { - c.MACs = supportedMACs + c.MACs = defaultMACs } var macs []string for _, m := range c.MACs { diff --git a/vendor/golang.org/x/crypto/ssh/connection.go b/vendor/golang.org/x/crypto/ssh/connection.go index 8f345ee924..613a71a7b3 100644 --- a/vendor/golang.org/x/crypto/ssh/connection.go +++ b/vendor/golang.org/x/crypto/ssh/connection.go @@ -74,6 +74,13 @@ type Conn interface { // Disconnect } +// AlgorithmsConnMetadata is a ConnMetadata that can return the algorithms +// negotiated between client and server. +type AlgorithmsConnMetadata interface { + ConnMetadata + Algorithms() NegotiatedAlgorithms +} + // DiscardRequests consumes and rejects all requests from the // passed-in channel. func DiscardRequests(in <-chan *Request) { @@ -106,6 +113,7 @@ type sshConn struct { sessionID []byte clientVersion []byte serverVersion []byte + algorithms NegotiatedAlgorithms } func dup(src []byte) []byte { @@ -141,3 +149,7 @@ func (c *sshConn) ClientVersion() []byte { func (c *sshConn) ServerVersion() []byte { return dup(c.serverVersion) } + +func (c *sshConn) Algorithms() NegotiatedAlgorithms { + return c.algorithms +} diff --git a/vendor/golang.org/x/crypto/ssh/doc.go b/vendor/golang.org/x/crypto/ssh/doc.go index f5d352fe3a..5b4de9effc 100644 --- a/vendor/golang.org/x/crypto/ssh/doc.go +++ b/vendor/golang.org/x/crypto/ssh/doc.go @@ -16,8 +16,19 @@ References: [PROTOCOL]: https://cvsweb.openbsd.org/cgi-bin/cvsweb/src/usr.bin/ssh/PROTOCOL?rev=HEAD [PROTOCOL.certkeys]: http://cvsweb.openbsd.org/cgi-bin/cvsweb/src/usr.bin/ssh/PROTOCOL.certkeys?rev=HEAD [SSH-PARAMETERS]: http://www.iana.org/assignments/ssh-parameters/ssh-parameters.xml#ssh-parameters-1 + [SSH-CERTS]: https://datatracker.ietf.org/doc/html/draft-miller-ssh-cert-01 + [FIPS 140-3 mode]: https://go.dev/doc/security/fips140 This package does not fall under the stability promise of the Go language itself, so its API may be changed when pressing needs arise. + +# FIPS 140-3 mode + +When the program is in [FIPS 140-3 mode], this package behaves as if only SP +800-140C and SP 800-140D approved cipher suites, signature algorithms, +certificate public key types and sizes, and key exchange and derivation +algorithms were implemented. Others are silently ignored and not negotiated, or +rejected. This set may depend on the algorithms supported by the FIPS 140-3 Go +Cryptographic Module selected with GOFIPS140, and may change across Go versions. */ package ssh diff --git a/vendor/golang.org/x/crypto/ssh/handshake.go b/vendor/golang.org/x/crypto/ssh/handshake.go index 56cdc7c21c..4be3cbb6de 100644 --- a/vendor/golang.org/x/crypto/ssh/handshake.go +++ b/vendor/golang.org/x/crypto/ssh/handshake.go @@ -5,12 +5,12 @@ package ssh import ( - "crypto/rand" "errors" "fmt" "io" "log" "net" + "slices" "strings" "sync" ) @@ -25,6 +25,11 @@ const debugHandshake = false // quickly. const chanSize = 16 +// maxPendingPackets sets the maximum number of packets to queue while waiting +// for KEX to complete. This limits the total pending data to maxPendingPackets +// * maxPacket bytes, which is ~16.8MB. +const maxPendingPackets = 64 + // keyingTransport is a packet based transport that supports key // changes. It need not be thread-safe. It should pass through // msgNewKeys in both directions. @@ -34,7 +39,7 @@ type keyingTransport interface { // prepareKeyChange sets up a key change. The key change for a // direction will be effected if a msgNewKeys message is sent // or received. - prepareKeyChange(*algorithms, *kexResult) error + prepareKeyChange(*NegotiatedAlgorithms, *kexResult) error // setStrictMode sets the strict KEX mode, notably triggering // sequence number resets on sending or receiving msgNewKeys. @@ -73,13 +78,22 @@ type handshakeTransport struct { incoming chan []byte readError error - mu sync.Mutex - writeError error - sentInitPacket []byte - sentInitMsg *kexInitMsg - pendingPackets [][]byte // Used when a key exchange is in progress. + mu sync.Mutex + // Condition for the above mutex. It is used to notify a completed key + // exchange or a write failure. Writes can wait for this condition while a + // key exchange is in progress. + writeCond *sync.Cond + writeError error + sentInitPacket []byte + sentInitMsg *kexInitMsg + // Used to queue writes when a key exchange is in progress. The length is + // limited by pendingPacketsSize. Once full, writes will block until the key + // exchange is completed or an error occurs. If not empty, it is emptied + // all at once when the key exchange is completed in kexLoop. + pendingPackets [][]byte writePacketsLeft uint32 writeBytesLeft int64 + userAuthComplete bool // whether the user authentication phase is complete // If the read loop wants to schedule a kex, it pings this // channel, and the write loop will send out a kex @@ -102,7 +116,7 @@ type handshakeTransport struct { bannerCallback BannerCallback // Algorithms agreed in the last key exchange. - algorithms *algorithms + algorithms *NegotiatedAlgorithms // Counters exclusively owned by readLoop. readPacketsLeft uint32 @@ -133,6 +147,7 @@ func newHandshakeTransport(conn keyingTransport, config *Config, clientVersion, config: config, } + t.writeCond = sync.NewCond(&t.mu) t.resetReadThresholds() t.resetWriteThresholds() @@ -150,7 +165,7 @@ func newClientTransport(conn keyingTransport, clientVersion, serverVersion []byt if config.HostKeyAlgorithms != nil { t.hostKeyAlgorithms = config.HostKeyAlgorithms } else { - t.hostKeyAlgorithms = supportedHostKeyAlgos + t.hostKeyAlgorithms = defaultHostKeyAlgos } go t.readLoop() go t.kexLoop() @@ -170,6 +185,10 @@ func (t *handshakeTransport) getSessionID() []byte { return t.sessionID } +func (t *handshakeTransport) getAlgorithms() NegotiatedAlgorithms { + return *t.algorithms +} + // waitSession waits for the session to be established. This should be // the first thing to call after instantiating handshakeTransport. func (t *handshakeTransport) waitSession() error { @@ -259,6 +278,7 @@ func (t *handshakeTransport) recordWriteError(err error) { defer t.mu.Unlock() if t.writeError == nil && err != nil { t.writeError = err + t.writeCond.Broadcast() } } @@ -275,7 +295,7 @@ func (t *handshakeTransport) resetWriteThresholds() { if t.config.RekeyThreshold > 0 { t.writeBytesLeft = int64(t.config.RekeyThreshold) } else if t.algorithms != nil { - t.writeBytesLeft = t.algorithms.w.rekeyBytes() + t.writeBytesLeft = t.algorithms.Write.rekeyBytes() } else { t.writeBytesLeft = 1 << 30 } @@ -362,6 +382,8 @@ write: } } t.pendingPackets = t.pendingPackets[:0] + // Unblock writePacket if waiting for KEX. + t.writeCond.Broadcast() t.mu.Unlock() } @@ -390,7 +412,7 @@ func (t *handshakeTransport) resetReadThresholds() { if t.config.RekeyThreshold > 0 { t.readBytesLeft = int64(t.config.RekeyThreshold) } else if t.algorithms != nil { - t.readBytesLeft = t.algorithms.r.rekeyBytes() + t.readBytesLeft = t.algorithms.Read.rekeyBytes() } else { t.readBytesLeft = 1 << 30 } @@ -483,7 +505,7 @@ func (t *handshakeTransport) sendKexInit() error { CompressionClientServer: supportedCompressions, CompressionServerClient: supportedCompressions, } - io.ReadFull(rand.Reader, msg.Cookie[:]) + io.ReadFull(t.config.Rand, msg.Cookie[:]) // We mutate the KexAlgos slice, in order to add the kex-strict extension algorithm, // and possibly to add the ext-info extension algorithm. Since the slice may be the @@ -506,7 +528,7 @@ func (t *handshakeTransport) sendKexInit() error { switch s := k.(type) { case MultiAlgorithmSigner: for _, algo := range algorithmsForKeyFormat(keyFormat) { - if contains(s.Algorithms(), underlyingAlgo(algo)) { + if slices.Contains(s.Algorithms(), underlyingAlgo(algo)) { msg.ServerHostKeyAlgos = append(msg.ServerHostKeyAlgos, algo) } } @@ -552,26 +574,44 @@ func (t *handshakeTransport) sendKexInit() error { return nil } +var errSendBannerPhase = errors.New("ssh: SendAuthBanner outside of authentication phase") + func (t *handshakeTransport) writePacket(p []byte) error { + t.mu.Lock() + defer t.mu.Unlock() + switch p[0] { case msgKexInit: return errors.New("ssh: only handshakeTransport can send kexInit") case msgNewKeys: return errors.New("ssh: only handshakeTransport can send newKeys") + case msgUserAuthBanner: + if t.userAuthComplete { + return errSendBannerPhase + } + case msgUserAuthSuccess: + t.userAuthComplete = true } - t.mu.Lock() - defer t.mu.Unlock() if t.writeError != nil { return t.writeError } if t.sentInitMsg != nil { - // Copy the packet so the writer can reuse the buffer. - cp := make([]byte, len(p)) - copy(cp, p) - t.pendingPackets = append(t.pendingPackets, cp) - return nil + if len(t.pendingPackets) < maxPendingPackets { + // Copy the packet so the writer can reuse the buffer. + cp := make([]byte, len(p)) + copy(cp, p) + t.pendingPackets = append(t.pendingPackets, cp) + return nil + } + for t.sentInitMsg != nil { + // Block and wait for KEX to complete or an error. + t.writeCond.Wait() + if t.writeError != nil { + return t.writeError + } + } } if t.writeBytesLeft > 0 { @@ -588,6 +628,7 @@ func (t *handshakeTransport) writePacket(p []byte) error { if err := t.pushPacket(p); err != nil { t.writeError = err + t.writeCond.Broadcast() } return nil @@ -639,7 +680,7 @@ func (t *handshakeTransport) enterKeyExchange(otherInitPacket []byte) error { return err } - if t.sessionID == nil && ((isClient && contains(serverInit.KexAlgos, kexStrictServer)) || (!isClient && contains(clientInit.KexAlgos, kexStrictClient))) { + if t.sessionID == nil && ((isClient && slices.Contains(serverInit.KexAlgos, kexStrictServer)) || (!isClient && slices.Contains(clientInit.KexAlgos, kexStrictClient))) { t.strictMode = true if err := t.conn.setStrictMode(); err != nil { return err @@ -664,9 +705,9 @@ func (t *handshakeTransport) enterKeyExchange(otherInitPacket []byte) error { } } - kex, ok := kexAlgoMap[t.algorithms.kex] + kex, ok := kexAlgoMap[t.algorithms.KeyExchange] if !ok { - return fmt.Errorf("ssh: unexpected key exchange algorithm %v", t.algorithms.kex) + return fmt.Errorf("ssh: unexpected key exchange algorithm %v", t.algorithms.KeyExchange) } var result *kexResult @@ -696,7 +737,7 @@ func (t *handshakeTransport) enterKeyExchange(otherInitPacket []byte) error { // On the server side, after the first SSH_MSG_NEWKEYS, send a SSH_MSG_EXT_INFO // message with the server-sig-algs extension if the client supports it. See // RFC 8308, Sections 2.4 and 3.1, and [PROTOCOL], Section 1.9. - if !isClient && firstKeyExchange && contains(clientInit.KexAlgos, "ext-info-c") { + if !isClient && firstKeyExchange && slices.Contains(clientInit.KexAlgos, "ext-info-c") { supportedPubKeyAuthAlgosList := strings.Join(t.publicKeyAuthAlgorithms, ",") extInfo := &extInfoMsg{ NumExtensions: 2, @@ -750,7 +791,7 @@ func (a algorithmSignerWrapper) SignWithAlgorithm(rand io.Reader, data []byte, a func pickHostKey(hostKeys []Signer, algo string) AlgorithmSigner { for _, k := range hostKeys { if s, ok := k.(MultiAlgorithmSigner); ok { - if !contains(s.Algorithms(), underlyingAlgo(algo)) { + if !slices.Contains(s.Algorithms(), underlyingAlgo(algo)) { continue } } @@ -773,12 +814,12 @@ func pickHostKey(hostKeys []Signer, algo string) AlgorithmSigner { } func (t *handshakeTransport) server(kex kexAlgorithm, magics *handshakeMagics) (*kexResult, error) { - hostKey := pickHostKey(t.hostKeys, t.algorithms.hostKey) + hostKey := pickHostKey(t.hostKeys, t.algorithms.HostKey) if hostKey == nil { return nil, errors.New("ssh: internal error: negotiated unsupported signature type") } - r, err := kex.Server(t.conn, t.config.Rand, magics, hostKey, t.algorithms.hostKey) + r, err := kex.Server(t.conn, t.config.Rand, magics, hostKey, t.algorithms.HostKey) return r, err } @@ -793,7 +834,7 @@ func (t *handshakeTransport) client(kex kexAlgorithm, magics *handshakeMagics) ( return nil, err } - if err := verifyHostKeySignature(hostKey, t.algorithms.hostKey, result); err != nil { + if err := verifyHostKeySignature(hostKey, t.algorithms.HostKey, result); err != nil { return nil, err } diff --git a/vendor/golang.org/x/crypto/ssh/kex.go b/vendor/golang.org/x/crypto/ssh/kex.go index 8a05f79902..5f7fdd8514 100644 --- a/vendor/golang.org/x/crypto/ssh/kex.go +++ b/vendor/golang.org/x/crypto/ssh/kex.go @@ -8,33 +8,31 @@ import ( "crypto" "crypto/ecdsa" "crypto/elliptic" + "crypto/fips140" "crypto/rand" - "crypto/subtle" "encoding/binary" "errors" "fmt" "io" "math/big" + "slices" "golang.org/x/crypto/curve25519" ) const ( - kexAlgoDH1SHA1 = "diffie-hellman-group1-sha1" - kexAlgoDH14SHA1 = "diffie-hellman-group14-sha1" - kexAlgoDH14SHA256 = "diffie-hellman-group14-sha256" - kexAlgoDH16SHA512 = "diffie-hellman-group16-sha512" - kexAlgoECDH256 = "ecdh-sha2-nistp256" - kexAlgoECDH384 = "ecdh-sha2-nistp384" - kexAlgoECDH521 = "ecdh-sha2-nistp521" - kexAlgoCurve25519SHA256LibSSH = "curve25519-sha256@libssh.org" - kexAlgoCurve25519SHA256 = "curve25519-sha256" - - // For the following kex only the client half contains a production - // ready implementation. The server half only consists of a minimal - // implementation to satisfy the automated tests. - kexAlgoDHGEXSHA1 = "diffie-hellman-group-exchange-sha1" - kexAlgoDHGEXSHA256 = "diffie-hellman-group-exchange-sha256" + // This is the group called diffie-hellman-group1-sha1 in RFC 4253 and + // Oakley Group 2 in RFC 2409. + oakleyGroup2 = "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7EDEE386BFB5A899FA5AE9F24117C4B1FE649286651ECE65381FFFFFFFFFFFFFFFF" + // This is the group called diffie-hellman-group14-sha1 in RFC 4253 and + // Oakley Group 14 in RFC 3526. + oakleyGroup14 = "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7EDEE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3DC2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F83655D23DCA3AD961C62F356208552BB9ED529077096966D670C354E4ABC9804F1746C08CA18217C32905E462E36CE3BE39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9DE2BCBF6955817183995497CEA956AE515D2261898FA051015728E5A8AACAA68FFFFFFFFFFFFFFFF" + // This is the group called diffie-hellman-group15-sha512 in RFC 8268 and + // Oakley Group 15 in RFC 3526. + oakleyGroup15 = "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7EDEE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3DC2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F83655D23DCA3AD961C62F356208552BB9ED529077096966D670C354E4ABC9804F1746C08CA18217C32905E462E36CE3BE39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9DE2BCBF6955817183995497CEA956AE515D2261898FA051015728E5A8AAAC42DAD33170D04507A33A85521ABDF1CBA64ECFB850458DBEF0A8AEA71575D060C7DB3970F85A6E1E4C7ABF5AE8CDB0933D71E8C94E04A25619DCEE3D2261AD2EE6BF12FFA06D98A0864D87602733EC86A64521F2B18177B200CBBE117577A615D6C770988C0BAD946E208E24FA074E5AB3143DB5BFCE0FD108E4B82D120A93AD2CAFFFFFFFFFFFFFFFF" + // This is the group called diffie-hellman-group16-sha512 in RFC 8268 and + // Oakley Group 16 in RFC 3526. + oakleyGroup16 = "FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7EDEE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3DC2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F83655D23DCA3AD961C62F356208552BB9ED529077096966D670C354E4ABC9804F1746C08CA18217C32905E462E36CE3BE39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9DE2BCBF6955817183995497CEA956AE515D2261898FA051015728E5A8AAAC42DAD33170D04507A33A85521ABDF1CBA64ECFB850458DBEF0A8AEA71575D060C7DB3970F85A6E1E4C7ABF5AE8CDB0933D71E8C94E04A25619DCEE3D2261AD2EE6BF12FFA06D98A0864D87602733EC86A64521F2B18177B200CBBE117577A615D6C770988C0BAD946E208E24FA074E5AB3143DB5BFCE0FD108E4B82D120A92108011A723C12A787E6D788719A10BDBA5B2699C327186AF4E23C1A946834B6150BDA2583E9CA2AD44CE8DBBBC2DB04DE8EF92E8EFC141FBECAA6287C59474E6BC05D99B2964FA090C3A2233BA186515BE7ED1F612970CEE2D7AFB81BDD762170481CD0069127D5B05AA993B4EA988D8FDDC186FFB7DC90A6C08F4DF435C934063199FFFFFFFFFFFFFFFF" ) // kexResult captures the outcome of a key exchange. @@ -399,56 +397,64 @@ func ecHash(curve elliptic.Curve) crypto.Hash { return crypto.SHA512 } +// kexAlgoMap defines the supported KEXs. KEXs not included are not supported +// and will not be negotiated, even if explicitly configured. When FIPS mode is +// enabled, only FIPS-approved algorithms are included. var kexAlgoMap = map[string]kexAlgorithm{} func init() { - // This is the group called diffie-hellman-group1-sha1 in - // RFC 4253 and Oakley Group 2 in RFC 2409. - p, _ := new(big.Int).SetString("FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7EDEE386BFB5A899FA5AE9F24117C4B1FE649286651ECE65381FFFFFFFFFFFFFFFF", 16) - kexAlgoMap[kexAlgoDH1SHA1] = &dhGroup{ + // mlkem768x25519-sha256 we'll work with fips140=on but not fips140=only + // until Go 1.26. + kexAlgoMap[KeyExchangeMLKEM768X25519] = &mlkem768WithCurve25519sha256{} + kexAlgoMap[KeyExchangeECDHP521] = &ecdh{elliptic.P521()} + kexAlgoMap[KeyExchangeECDHP384] = &ecdh{elliptic.P384()} + kexAlgoMap[KeyExchangeECDHP256] = &ecdh{elliptic.P256()} + + if fips140.Enabled() { + defaultKexAlgos = slices.DeleteFunc(defaultKexAlgos, func(algo string) bool { + _, ok := kexAlgoMap[algo] + return !ok + }) + return + } + + p, _ := new(big.Int).SetString(oakleyGroup2, 16) + kexAlgoMap[InsecureKeyExchangeDH1SHA1] = &dhGroup{ g: new(big.Int).SetInt64(2), p: p, pMinus1: new(big.Int).Sub(p, bigOne), hashFunc: crypto.SHA1, } - // This are the groups called diffie-hellman-group14-sha1 and - // diffie-hellman-group14-sha256 in RFC 4253 and RFC 8268, - // and Oakley Group 14 in RFC 3526. - p, _ = new(big.Int).SetString("FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7EDEE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3DC2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F83655D23DCA3AD961C62F356208552BB9ED529077096966D670C354E4ABC9804F1746C08CA18217C32905E462E36CE3BE39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9DE2BCBF6955817183995497CEA956AE515D2261898FA051015728E5A8AACAA68FFFFFFFFFFFFFFFF", 16) + p, _ = new(big.Int).SetString(oakleyGroup14, 16) group14 := &dhGroup{ g: new(big.Int).SetInt64(2), p: p, pMinus1: new(big.Int).Sub(p, bigOne), } - kexAlgoMap[kexAlgoDH14SHA1] = &dhGroup{ + kexAlgoMap[InsecureKeyExchangeDH14SHA1] = &dhGroup{ g: group14.g, p: group14.p, pMinus1: group14.pMinus1, hashFunc: crypto.SHA1, } - kexAlgoMap[kexAlgoDH14SHA256] = &dhGroup{ + kexAlgoMap[KeyExchangeDH14SHA256] = &dhGroup{ g: group14.g, p: group14.p, pMinus1: group14.pMinus1, hashFunc: crypto.SHA256, } - // This is the group called diffie-hellman-group16-sha512 in RFC - // 8268 and Oakley Group 16 in RFC 3526. - p, _ = new(big.Int).SetString("FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7EDEE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3DC2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F83655D23DCA3AD961C62F356208552BB9ED529077096966D670C354E4ABC9804F1746C08CA18217C32905E462E36CE3BE39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9DE2BCBF6955817183995497CEA956AE515D2261898FA051015728E5A8AAAC42DAD33170D04507A33A85521ABDF1CBA64ECFB850458DBEF0A8AEA71575D060C7DB3970F85A6E1E4C7ABF5AE8CDB0933D71E8C94E04A25619DCEE3D2261AD2EE6BF12FFA06D98A0864D87602733EC86A64521F2B18177B200CBBE117577A615D6C770988C0BAD946E208E24FA074E5AB3143DB5BFCE0FD108E4B82D120A92108011A723C12A787E6D788719A10BDBA5B2699C327186AF4E23C1A946834B6150BDA2583E9CA2AD44CE8DBBBC2DB04DE8EF92E8EFC141FBECAA6287C59474E6BC05D99B2964FA090C3A2233BA186515BE7ED1F612970CEE2D7AFB81BDD762170481CD0069127D5B05AA993B4EA988D8FDDC186FFB7DC90A6C08F4DF435C934063199FFFFFFFFFFFFFFFF", 16) + p, _ = new(big.Int).SetString(oakleyGroup16, 16) - kexAlgoMap[kexAlgoDH16SHA512] = &dhGroup{ + kexAlgoMap[KeyExchangeDH16SHA512] = &dhGroup{ g: new(big.Int).SetInt64(2), p: p, pMinus1: new(big.Int).Sub(p, bigOne), hashFunc: crypto.SHA512, } - kexAlgoMap[kexAlgoECDH521] = &ecdh{elliptic.P521()} - kexAlgoMap[kexAlgoECDH384] = &ecdh{elliptic.P384()} - kexAlgoMap[kexAlgoECDH256] = &ecdh{elliptic.P256()} - kexAlgoMap[kexAlgoCurve25519SHA256] = &curve25519sha256{} - kexAlgoMap[kexAlgoCurve25519SHA256LibSSH] = &curve25519sha256{} - kexAlgoMap[kexAlgoDHGEXSHA1] = &dhGEXSHA{hashFunc: crypto.SHA1} - kexAlgoMap[kexAlgoDHGEXSHA256] = &dhGEXSHA{hashFunc: crypto.SHA256} + kexAlgoMap[KeyExchangeCurve25519] = &curve25519sha256{} + kexAlgoMap[keyExchangeCurve25519LibSSH] = &curve25519sha256{} + kexAlgoMap[InsecureKeyExchangeDHGEXSHA1] = &dhGEXSHA{hashFunc: crypto.SHA1} + kexAlgoMap[KeyExchangeDHGEXSHA256] = &dhGEXSHA{hashFunc: crypto.SHA256} } // curve25519sha256 implements the curve25519-sha256 (formerly known as @@ -464,15 +470,17 @@ func (kp *curve25519KeyPair) generate(rand io.Reader) error { if _, err := io.ReadFull(rand, kp.priv[:]); err != nil { return err } - curve25519.ScalarBaseMult(&kp.pub, &kp.priv) + p, err := curve25519.X25519(kp.priv[:], curve25519.Basepoint) + if err != nil { + return fmt.Errorf("curve25519: %w", err) + } + if len(p) != 32 { + return fmt.Errorf("curve25519: internal error: X25519 returned %d bytes, expected 32", len(p)) + } + copy(kp.pub[:], p) return nil } -// curve25519Zeros is just an array of 32 zero bytes so that we have something -// convenient to compare against in order to reject curve25519 points with the -// wrong order. -var curve25519Zeros [32]byte - func (kex *curve25519sha256) Client(c packetConn, rand io.Reader, magics *handshakeMagics) (*kexResult, error) { var kp curve25519KeyPair if err := kp.generate(rand); err != nil { @@ -495,11 +503,9 @@ func (kex *curve25519sha256) Client(c packetConn, rand io.Reader, magics *handsh return nil, errors.New("ssh: peer's curve25519 public value has wrong length") } - var servPub, secret [32]byte - copy(servPub[:], reply.EphemeralPubKey) - curve25519.ScalarMult(&secret, &kp.priv, &servPub) - if subtle.ConstantTimeCompare(secret[:], curve25519Zeros[:]) == 1 { - return nil, errors.New("ssh: peer's curve25519 public value has wrong order") + secret, err := curve25519.X25519(kp.priv[:], reply.EphemeralPubKey) + if err != nil { + return nil, fmt.Errorf("ssh: peer's curve25519 public value is not valid: %w", err) } h := crypto.SHA256.New() @@ -541,11 +547,9 @@ func (kex *curve25519sha256) Server(c packetConn, rand io.Reader, magics *handsh return nil, err } - var clientPub, secret [32]byte - copy(clientPub[:], kexInit.ClientPubKey) - curve25519.ScalarMult(&secret, &kp.priv, &clientPub) - if subtle.ConstantTimeCompare(secret[:], curve25519Zeros[:]) == 1 { - return nil, errors.New("ssh: peer's curve25519 public value has wrong order") + secret, err := curve25519.X25519(kp.priv[:], kexInit.ClientPubKey) + if err != nil { + return nil, fmt.Errorf("ssh: peer's curve25519 public value is not valid: %w", err) } hostKeyBytes := priv.PublicKey().Marshal() @@ -601,9 +605,9 @@ const ( func (gex *dhGEXSHA) Client(c packetConn, randSource io.Reader, magics *handshakeMagics) (*kexResult, error) { // Send GexRequest kexDHGexRequest := kexDHGexRequestMsg{ - MinBits: dhGroupExchangeMinimumBits, - PreferedBits: dhGroupExchangePreferredBits, - MaxBits: dhGroupExchangeMaximumBits, + MinBits: dhGroupExchangeMinimumBits, + PreferredBits: dhGroupExchangePreferredBits, + MaxBits: dhGroupExchangeMaximumBits, } if err := c.writePacket(Marshal(&kexDHGexRequest)); err != nil { return nil, err @@ -690,9 +694,7 @@ func (gex *dhGEXSHA) Client(c packetConn, randSource io.Reader, magics *handshak } // Server half implementation of the Diffie Hellman Key Exchange with SHA1 and SHA256. -// -// This is a minimal implementation to satisfy the automated tests. -func (gex dhGEXSHA) Server(c packetConn, randSource io.Reader, magics *handshakeMagics, priv AlgorithmSigner, algo string) (result *kexResult, err error) { +func (gex *dhGEXSHA) Server(c packetConn, randSource io.Reader, magics *handshakeMagics, priv AlgorithmSigner, algo string) (result *kexResult, err error) { // Receive GexRequest packet, err := c.readPacket() if err != nil { @@ -702,13 +704,32 @@ func (gex dhGEXSHA) Server(c packetConn, randSource io.Reader, magics *handshake if err = Unmarshal(packet, &kexDHGexRequest); err != nil { return } + // We check that the request received is valid and that the MaxBits + // requested are at least equal to our supported minimum. This is the same + // check done in OpenSSH: + // https://github.com/openssh/openssh-portable/blob/80a2f64b/kexgexs.c#L94 + // + // Furthermore, we also check that the required MinBits are less than or + // equal to 4096 because we can use up to Oakley Group 16. + if kexDHGexRequest.MaxBits < kexDHGexRequest.MinBits || kexDHGexRequest.PreferredBits < kexDHGexRequest.MinBits || + kexDHGexRequest.MaxBits < kexDHGexRequest.PreferredBits || kexDHGexRequest.MaxBits < dhGroupExchangeMinimumBits || + kexDHGexRequest.MinBits > 4096 { + return nil, fmt.Errorf("ssh: DH GEX request out of range, min: %d, max: %d, preferred: %d", kexDHGexRequest.MinBits, + kexDHGexRequest.MaxBits, kexDHGexRequest.PreferredBits) + } + + var p *big.Int + // We hardcode sending Oakley Group 14 (2048 bits), Oakley Group 15 (3072 + // bits) or Oakley Group 16 (4096 bits), based on the requested max size. + if kexDHGexRequest.MaxBits < 3072 { + p, _ = new(big.Int).SetString(oakleyGroup14, 16) + } else if kexDHGexRequest.MaxBits < 4096 { + p, _ = new(big.Int).SetString(oakleyGroup15, 16) + } else { + p, _ = new(big.Int).SetString(oakleyGroup16, 16) + } - // Send GexGroup - // This is the group called diffie-hellman-group14-sha1 in RFC - // 4253 and Oakley Group 14 in RFC 3526. - p, _ := new(big.Int).SetString("FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7EDEE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3DC2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F83655D23DCA3AD961C62F356208552BB9ED529077096966D670C354E4ABC9804F1746C08CA18217C32905E462E36CE3BE39E772C180E86039B2783A2EC07A28FB5C55DF06F4C52C9DE2BCBF6955817183995497CEA956AE515D2261898FA051015728E5A8AACAA68FFFFFFFFFFFFFFFF", 16) g := big.NewInt(2) - msg := &kexDHGexGroupMsg{ P: p, G: g, @@ -746,9 +767,9 @@ func (gex dhGEXSHA) Server(c packetConn, randSource io.Reader, magics *handshake h := gex.hashFunc.New() magics.write(h) writeString(h, hostKeyBytes) - binary.Write(h, binary.BigEndian, uint32(dhGroupExchangeMinimumBits)) - binary.Write(h, binary.BigEndian, uint32(dhGroupExchangePreferredBits)) - binary.Write(h, binary.BigEndian, uint32(dhGroupExchangeMaximumBits)) + binary.Write(h, binary.BigEndian, kexDHGexRequest.MinBits) + binary.Write(h, binary.BigEndian, kexDHGexRequest.PreferredBits) + binary.Write(h, binary.BigEndian, kexDHGexRequest.MaxBits) writeInt(h, p) writeInt(h, g) writeInt(h, kexDHGexInit.X) diff --git a/vendor/golang.org/x/crypto/ssh/keys.go b/vendor/golang.org/x/crypto/ssh/keys.go index 7967665f17..47a07539d9 100644 --- a/vendor/golang.org/x/crypto/ssh/keys.go +++ b/vendor/golang.org/x/crypto/ssh/keys.go @@ -27,6 +27,7 @@ import ( "fmt" "io" "math/big" + "slices" "strings" "golang.org/x/crypto/ssh/internal/bcrypt_pbkdf" @@ -36,14 +37,19 @@ import ( // ClientConfig.HostKeyAlgorithms, Signature.Format, or as AlgorithmSigner // arguments. const ( - KeyAlgoRSA = "ssh-rsa" - KeyAlgoDSA = "ssh-dss" - KeyAlgoECDSA256 = "ecdsa-sha2-nistp256" - KeyAlgoSKECDSA256 = "sk-ecdsa-sha2-nistp256@openssh.com" - KeyAlgoECDSA384 = "ecdsa-sha2-nistp384" - KeyAlgoECDSA521 = "ecdsa-sha2-nistp521" - KeyAlgoED25519 = "ssh-ed25519" - KeyAlgoSKED25519 = "sk-ssh-ed25519@openssh.com" + KeyAlgoRSA = "ssh-rsa" + // Deprecated: DSA is only supported at insecure key sizes, and was removed + // from major implementations. + KeyAlgoDSA = InsecureKeyAlgoDSA + // Deprecated: DSA is only supported at insecure key sizes, and was removed + // from major implementations. + InsecureKeyAlgoDSA = "ssh-dss" + KeyAlgoECDSA256 = "ecdsa-sha2-nistp256" + KeyAlgoSKECDSA256 = "sk-ecdsa-sha2-nistp256@openssh.com" + KeyAlgoECDSA384 = "ecdsa-sha2-nistp384" + KeyAlgoECDSA521 = "ecdsa-sha2-nistp521" + KeyAlgoED25519 = "ssh-ed25519" + KeyAlgoSKED25519 = "sk-ssh-ed25519@openssh.com" // KeyAlgoRSASHA256 and KeyAlgoRSASHA512 are only public key algorithms, not // public key formats, so they can't appear as a PublicKey.Type. The @@ -67,7 +73,7 @@ func parsePubKey(in []byte, algo string) (pubKey PublicKey, rest []byte, err err switch algo { case KeyAlgoRSA: return parseRSA(in) - case KeyAlgoDSA: + case InsecureKeyAlgoDSA: return parseDSA(in) case KeyAlgoECDSA256, KeyAlgoECDSA384, KeyAlgoECDSA521: return parseECDSA(in) @@ -77,13 +83,18 @@ func parsePubKey(in []byte, algo string) (pubKey PublicKey, rest []byte, err err return parseED25519(in) case KeyAlgoSKED25519: return parseSKEd25519(in) - case CertAlgoRSAv01, CertAlgoDSAv01, CertAlgoECDSA256v01, CertAlgoECDSA384v01, CertAlgoECDSA521v01, CertAlgoSKECDSA256v01, CertAlgoED25519v01, CertAlgoSKED25519v01: + case CertAlgoRSAv01, InsecureCertAlgoDSAv01, CertAlgoECDSA256v01, CertAlgoECDSA384v01, CertAlgoECDSA521v01, CertAlgoSKECDSA256v01, CertAlgoED25519v01, CertAlgoSKED25519v01: cert, err := parseCert(in, certKeyAlgoNames[algo]) if err != nil { return nil, nil, err } return cert, nil, nil } + if keyFormat := keyFormatForAlgorithm(algo); keyFormat != "" { + return nil, nil, fmt.Errorf("ssh: signature algorithm %q isn't a key format; key is malformed and should be re-encoded with type %q", + algo, keyFormat) + } + return nil, nil, fmt.Errorf("ssh: unknown key algorithm: %v", algo) } @@ -186,9 +197,10 @@ func ParseKnownHosts(in []byte) (marker string, hosts []string, pubKey PublicKey return "", nil, nil, "", nil, io.EOF } -// ParseAuthorizedKey parses a public key from an authorized_keys -// file used in OpenSSH according to the sshd(8) manual page. +// ParseAuthorizedKey parses a public key from an authorized_keys file used in +// OpenSSH according to the sshd(8) manual page. Invalid lines are ignored. func ParseAuthorizedKey(in []byte) (out PublicKey, comment string, options []string, rest []byte, err error) { + var lastErr error for len(in) > 0 { end := bytes.IndexByte(in, '\n') if end != -1 { @@ -217,6 +229,8 @@ func ParseAuthorizedKey(in []byte) (out PublicKey, comment string, options []str if out, comment, err = parseAuthorizedKey(in[i:]); err == nil { return out, comment, options, rest, nil + } else { + lastErr = err } // No key type recognised. Maybe there's an options field at @@ -259,16 +273,22 @@ func ParseAuthorizedKey(in []byte) (out PublicKey, comment string, options []str if out, comment, err = parseAuthorizedKey(in[i:]); err == nil { options = candidateOptions return out, comment, options, rest, nil + } else { + lastErr = err } in = rest continue } + if lastErr != nil { + return nil, "", nil, nil, fmt.Errorf("ssh: no key found; last parsing error for ignored line: %w", lastErr) + } + return nil, "", nil, nil, errors.New("ssh: no key found") } -// ParsePublicKey parses an SSH public key formatted for use in +// ParsePublicKey parses an SSH public key or certificate formatted for use in // the SSH wire protocol according to RFC 4253, section 6.6. func ParsePublicKey(in []byte) (out PublicKey, err error) { algo, in, ok := parseString(in) @@ -390,11 +410,11 @@ func NewSignerWithAlgorithms(signer AlgorithmSigner, algorithms []string) (Multi } for _, algo := range algorithms { - if !contains(supportedAlgos, algo) { + if !slices.Contains(supportedAlgos, algo) { return nil, fmt.Errorf("ssh: algorithm %q is not supported for key type %q", algo, signer.PublicKey().Type()) } - if !contains(signerAlgos, algo) { + if !slices.Contains(signerAlgos, algo) { return nil, fmt.Errorf("ssh: algorithm %q is restricted for the provided signer", algo) } } @@ -481,14 +501,59 @@ func (r *rsaPublicKey) Marshal() []byte { func (r *rsaPublicKey) Verify(data []byte, sig *Signature) error { supportedAlgos := algorithmsForKeyFormat(r.Type()) - if !contains(supportedAlgos, sig.Format) { + if !slices.Contains(supportedAlgos, sig.Format) { return fmt.Errorf("ssh: signature type %s for key type %s", sig.Format, r.Type()) } - hash := hashFuncs[sig.Format] + hash, err := hashFunc(sig.Format) + if err != nil { + return err + } h := hash.New() h.Write(data) digest := h.Sum(nil) - return rsa.VerifyPKCS1v15((*rsa.PublicKey)(r), hash, digest, sig.Blob) + + // Signatures in PKCS1v15 must match the key's modulus in + // length. However with SSH, some signers provide RSA + // signatures which are missing the MSB 0's of the bignum + // represented. With ssh-rsa signatures, this is encouraged by + // the spec (even though e.g. OpenSSH will give the full + // length unconditionally). With rsa-sha2-* signatures, the + // verifier is allowed to support these, even though they are + // out of spec. See RFC 4253 Section 6.6 for ssh-rsa and RFC + // 8332 Section 3 for rsa-sha2-* details. + // + // In practice: + // * OpenSSH always allows "short" signatures: + // https://github.com/openssh/openssh-portable/blob/V_9_8_P1/ssh-rsa.c#L526 + // but always generates padded signatures: + // https://github.com/openssh/openssh-portable/blob/V_9_8_P1/ssh-rsa.c#L439 + // + // * PuTTY versions 0.81 and earlier will generate short + // signatures for all RSA signature variants. Note that + // PuTTY is embedded in other software, such as WinSCP and + // FileZilla. At the time of writing, a patch has been + // applied to PuTTY to generate padded signatures for + // rsa-sha2-*, but not yet released: + // https://git.tartarus.org/?p=simon/putty.git;a=commitdiff;h=a5bcf3d384e1bf15a51a6923c3724cbbee022d8e + // + // * SSH.NET versions 2024.0.0 and earlier will generate short + // signatures for all RSA signature variants, fixed in 2024.1.0: + // https://github.com/sshnet/SSH.NET/releases/tag/2024.1.0 + // + // As a result, we pad these up to the key size by inserting + // leading 0's. + // + // Note that support for short signatures with rsa-sha2-* may + // be removed in the future due to such signatures not being + // allowed by the spec. + blob := sig.Blob + keySize := (*rsa.PublicKey)(r).Size() + if len(blob) < keySize { + padded := make([]byte, keySize) + copy(padded[keySize-len(blob):], blob) + blob = padded + } + return rsa.VerifyPKCS1v15((*rsa.PublicKey)(r), hash, digest, blob) } func (r *rsaPublicKey) CryptoPublicKey() crypto.PublicKey { @@ -559,7 +624,11 @@ func (k *dsaPublicKey) Verify(data []byte, sig *Signature) error { if sig.Format != k.Type() { return fmt.Errorf("ssh: signature type %s for key type %s", sig.Format, k.Type()) } - h := hashFuncs[sig.Format].New() + hash, err := hashFunc(sig.Format) + if err != nil { + return err + } + h := hash.New() h.Write(data) digest := h.Sum(nil) @@ -604,7 +673,11 @@ func (k *dsaPrivateKey) SignWithAlgorithm(rand io.Reader, data []byte, algorithm return nil, fmt.Errorf("ssh: unsupported signature algorithm %s", algorithm) } - h := hashFuncs[k.PublicKey().Type()].New() + hash, err := hashFunc(k.PublicKey().Type()) + if err != nil { + return nil, err + } + h := hash.New() h.Write(data) digest := h.Sum(nil) r, s, err := dsa.Sign(rand, k.PrivateKey, digest) @@ -754,8 +827,11 @@ func (k *ecdsaPublicKey) Verify(data []byte, sig *Signature) error { if sig.Format != k.Type() { return fmt.Errorf("ssh: signature type %s for key type %s", sig.Format, k.Type()) } - - h := hashFuncs[sig.Format].New() + hash, err := hashFunc(sig.Format) + if err != nil { + return err + } + h := hash.New() h.Write(data) digest := h.Sum(nil) @@ -858,8 +934,11 @@ func (k *skECDSAPublicKey) Verify(data []byte, sig *Signature) error { if sig.Format != k.Type() { return fmt.Errorf("ssh: signature type %s for key type %s", sig.Format, k.Type()) } - - h := hashFuncs[sig.Format].New() + hash, err := hashFunc(sig.Format) + if err != nil { + return err + } + h := hash.New() h.Write([]byte(k.application)) appDigest := h.Sum(nil) @@ -962,7 +1041,11 @@ func (k *skEd25519PublicKey) Verify(data []byte, sig *Signature) error { return fmt.Errorf("invalid size %d for Ed25519 public key", l) } - h := hashFuncs[sig.Format].New() + hash, err := hashFunc(sig.Format) + if err != nil { + return err + } + h := hash.New() h.Write([]byte(k.application)) appDigest := h.Sum(nil) @@ -1065,11 +1148,14 @@ func (s *wrappedSigner) SignWithAlgorithm(rand io.Reader, data []byte, algorithm algorithm = s.pubKey.Type() } - if !contains(s.Algorithms(), algorithm) { + if !slices.Contains(s.Algorithms(), algorithm) { return nil, fmt.Errorf("ssh: unsupported signature algorithm %q for key format %q", algorithm, s.pubKey.Type()) } - hashFunc := hashFuncs[algorithm] + hashFunc, err := hashFunc(algorithm) + if err != nil { + return nil, err + } var digest []byte if hashFunc != 0 { h := hashFunc.New() @@ -1404,6 +1490,7 @@ type openSSHEncryptedPrivateKey struct { NumKeys uint32 PubKey []byte PrivKeyBlock []byte + Rest []byte `ssh:"rest"` } type openSSHPrivateKey struct { diff --git a/vendor/golang.org/x/crypto/ssh/mac.go b/vendor/golang.org/x/crypto/ssh/mac.go index 06a1b27507..87d626fbbf 100644 --- a/vendor/golang.org/x/crypto/ssh/mac.go +++ b/vendor/golang.org/x/crypto/ssh/mac.go @@ -7,11 +7,13 @@ package ssh // Message authentication support import ( + "crypto/fips140" "crypto/hmac" "crypto/sha1" "crypto/sha256" "crypto/sha512" "hash" + "slices" ) type macMode struct { @@ -46,23 +48,37 @@ func (t truncatingMAC) Size() int { func (t truncatingMAC) BlockSize() int { return t.hmac.BlockSize() } -var macModes = map[string]*macMode{ - "hmac-sha2-512-etm@openssh.com": {64, true, func(key []byte) hash.Hash { +// macModes defines the supported MACs. MACs not included are not supported +// and will not be negotiated, even if explicitly configured. When FIPS mode is +// enabled, only FIPS-approved algorithms are included. +var macModes = map[string]*macMode{} + +func init() { + macModes[HMACSHA512ETM] = &macMode{64, true, func(key []byte) hash.Hash { return hmac.New(sha512.New, key) - }}, - "hmac-sha2-256-etm@openssh.com": {32, true, func(key []byte) hash.Hash { + }} + macModes[HMACSHA256ETM] = &macMode{32, true, func(key []byte) hash.Hash { return hmac.New(sha256.New, key) - }}, - "hmac-sha2-512": {64, false, func(key []byte) hash.Hash { + }} + macModes[HMACSHA512] = &macMode{64, false, func(key []byte) hash.Hash { return hmac.New(sha512.New, key) - }}, - "hmac-sha2-256": {32, false, func(key []byte) hash.Hash { + }} + macModes[HMACSHA256] = &macMode{32, false, func(key []byte) hash.Hash { return hmac.New(sha256.New, key) - }}, - "hmac-sha1": {20, false, func(key []byte) hash.Hash { + }} + + if fips140.Enabled() { + defaultMACs = slices.DeleteFunc(defaultMACs, func(algo string) bool { + _, ok := macModes[algo] + return !ok + }) + return + } + + macModes[HMACSHA1] = &macMode{20, false, func(key []byte) hash.Hash { return hmac.New(sha1.New, key) - }}, - "hmac-sha1-96": {20, false, func(key []byte) hash.Hash { + }} + macModes[InsecureHMACSHA196] = &macMode{20, false, func(key []byte) hash.Hash { return truncatingMAC{12, hmac.New(sha1.New, key)} - }}, + }} } diff --git a/vendor/golang.org/x/crypto/ssh/messages.go b/vendor/golang.org/x/crypto/ssh/messages.go index b55f860564..ab22c3d38d 100644 --- a/vendor/golang.org/x/crypto/ssh/messages.go +++ b/vendor/golang.org/x/crypto/ssh/messages.go @@ -122,9 +122,9 @@ type kexDHGexReplyMsg struct { const msgKexDHGexRequest = 34 type kexDHGexRequestMsg struct { - MinBits uint32 `sshtype:"34"` - PreferedBits uint32 - MaxBits uint32 + MinBits uint32 `sshtype:"34"` + PreferredBits uint32 + MaxBits uint32 } // See RFC 4253, section 10. @@ -792,7 +792,7 @@ func marshalString(to []byte, s []byte) []byte { return to[len(s):] } -var bigIntType = reflect.TypeOf((*big.Int)(nil)) +var bigIntType = reflect.TypeFor[*big.Int]() // Decode a packet into its corresponding message. func decode(packet []byte) (interface{}, error) { @@ -818,6 +818,8 @@ func decode(packet []byte) (interface{}, error) { return new(userAuthSuccessMsg), nil case msgUserAuthFailure: msg = new(userAuthFailureMsg) + case msgUserAuthBanner: + msg = new(userAuthBannerMsg) case msgUserAuthPubKeyOk: msg = new(userAuthPubKeyOkMsg) case msgGlobalRequest: diff --git a/vendor/golang.org/x/crypto/ssh/mlkem.go b/vendor/golang.org/x/crypto/ssh/mlkem.go new file mode 100644 index 0000000000..ddc0ed1fc0 --- /dev/null +++ b/vendor/golang.org/x/crypto/ssh/mlkem.go @@ -0,0 +1,168 @@ +// Copyright 2024 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package ssh + +import ( + "crypto" + "crypto/mlkem" + "crypto/sha256" + "errors" + "fmt" + "io" + + "golang.org/x/crypto/curve25519" +) + +// mlkem768WithCurve25519sha256 implements the hybrid ML-KEM768 with +// curve25519-sha256 key exchange method, as described by +// draft-kampanakis-curdle-ssh-pq-ke-05 section 2.3.3. +type mlkem768WithCurve25519sha256 struct{} + +func (kex *mlkem768WithCurve25519sha256) Client(c packetConn, rand io.Reader, magics *handshakeMagics) (*kexResult, error) { + var c25519kp curve25519KeyPair + if err := c25519kp.generate(rand); err != nil { + return nil, err + } + + seed := make([]byte, mlkem.SeedSize) + if _, err := io.ReadFull(rand, seed); err != nil { + return nil, err + } + + mlkemDk, err := mlkem.NewDecapsulationKey768(seed) + if err != nil { + return nil, err + } + + hybridKey := append(mlkemDk.EncapsulationKey().Bytes(), c25519kp.pub[:]...) + if err := c.writePacket(Marshal(&kexECDHInitMsg{hybridKey})); err != nil { + return nil, err + } + + packet, err := c.readPacket() + if err != nil { + return nil, err + } + + var reply kexECDHReplyMsg + if err = Unmarshal(packet, &reply); err != nil { + return nil, err + } + + if len(reply.EphemeralPubKey) != mlkem.CiphertextSize768+32 { + return nil, errors.New("ssh: peer's mlkem768x25519 public value has wrong length") + } + + // Perform KEM decapsulate operation to obtain shared key from ML-KEM. + mlkem768Secret, err := mlkemDk.Decapsulate(reply.EphemeralPubKey[:mlkem.CiphertextSize768]) + if err != nil { + return nil, err + } + + // Complete Curve25519 ECDH to obtain its shared key. + c25519Secret, err := curve25519.X25519(c25519kp.priv[:], reply.EphemeralPubKey[mlkem.CiphertextSize768:]) + if err != nil { + return nil, fmt.Errorf("ssh: peer's mlkem768x25519 public value is not valid: %w", err) + } + // Compute actual shared key. + h := sha256.New() + h.Write(mlkem768Secret) + h.Write(c25519Secret) + secret := h.Sum(nil) + + h.Reset() + magics.write(h) + writeString(h, reply.HostKey) + writeString(h, hybridKey) + writeString(h, reply.EphemeralPubKey) + + K := make([]byte, stringLength(len(secret))) + marshalString(K, secret) + h.Write(K) + + return &kexResult{ + H: h.Sum(nil), + K: K, + HostKey: reply.HostKey, + Signature: reply.Signature, + Hash: crypto.SHA256, + }, nil +} + +func (kex *mlkem768WithCurve25519sha256) Server(c packetConn, rand io.Reader, magics *handshakeMagics, priv AlgorithmSigner, algo string) (*kexResult, error) { + packet, err := c.readPacket() + if err != nil { + return nil, err + } + + var kexInit kexECDHInitMsg + if err = Unmarshal(packet, &kexInit); err != nil { + return nil, err + } + + if len(kexInit.ClientPubKey) != mlkem.EncapsulationKeySize768+32 { + return nil, errors.New("ssh: peer's ML-KEM768/curve25519 public value has wrong length") + } + + encapsulationKey, err := mlkem.NewEncapsulationKey768(kexInit.ClientPubKey[:mlkem.EncapsulationKeySize768]) + if err != nil { + return nil, fmt.Errorf("ssh: peer's ML-KEM768 encapsulation key is not valid: %w", err) + } + // Perform KEM encapsulate operation to obtain ciphertext and shared key. + mlkem768Secret, mlkem768Ciphertext := encapsulationKey.Encapsulate() + + // Perform server side of Curve25519 ECDH to obtain server public value and + // shared key. + var c25519kp curve25519KeyPair + if err := c25519kp.generate(rand); err != nil { + return nil, err + } + c25519Secret, err := curve25519.X25519(c25519kp.priv[:], kexInit.ClientPubKey[mlkem.EncapsulationKeySize768:]) + if err != nil { + return nil, fmt.Errorf("ssh: peer's ML-KEM768/curve25519 public value is not valid: %w", err) + } + hybridKey := append(mlkem768Ciphertext, c25519kp.pub[:]...) + + // Compute actual shared key. + h := sha256.New() + h.Write(mlkem768Secret) + h.Write(c25519Secret) + secret := h.Sum(nil) + + hostKeyBytes := priv.PublicKey().Marshal() + + h.Reset() + magics.write(h) + writeString(h, hostKeyBytes) + writeString(h, kexInit.ClientPubKey) + writeString(h, hybridKey) + + K := make([]byte, stringLength(len(secret))) + marshalString(K, secret) + h.Write(K) + + H := h.Sum(nil) + + sig, err := signAndMarshal(priv, rand, H, algo) + if err != nil { + return nil, err + } + + reply := kexECDHReplyMsg{ + EphemeralPubKey: hybridKey, + HostKey: hostKeyBytes, + Signature: sig, + } + if err := c.writePacket(Marshal(&reply)); err != nil { + return nil, err + } + return &kexResult{ + H: H, + K: K, + HostKey: hostKeyBytes, + Signature: sig, + Hash: crypto.SHA256, + }, nil +} diff --git a/vendor/golang.org/x/crypto/ssh/server.go b/vendor/golang.org/x/crypto/ssh/server.go index 3ca9e89e22..064dcbaf5a 100644 --- a/vendor/golang.org/x/crypto/ssh/server.go +++ b/vendor/golang.org/x/crypto/ssh/server.go @@ -10,6 +10,7 @@ import ( "fmt" "io" "net" + "slices" "strings" ) @@ -43,6 +44,9 @@ type Permissions struct { // pass data from the authentication callbacks to the server // application layer. Extensions map[string]string + + // ExtraData allows to store user defined data. + ExtraData map[any]any } type GSSAPIWithMICConfig struct { @@ -59,6 +63,27 @@ type GSSAPIWithMICConfig struct { Server GSSAPIServer } +// SendAuthBanner implements [ServerPreAuthConn]. +func (s *connection) SendAuthBanner(msg string) error { + return s.transport.writePacket(Marshal(&userAuthBannerMsg{ + Message: msg, + })) +} + +func (*connection) unexportedMethodForFutureProofing() {} + +// ServerPreAuthConn is the interface available on an incoming server +// connection before authentication has completed. +type ServerPreAuthConn interface { + unexportedMethodForFutureProofing() // permits growing ServerPreAuthConn safely later, ala testing.TB + + ConnMetadata + + // SendAuthBanner sends a banner message to the client. + // It returns an error once the authentication phase has ended. + SendAuthBanner(string) error +} + // ServerConfig holds server specific configuration data. type ServerConfig struct { // Config contains configuration shared between client and server. @@ -105,6 +130,21 @@ type ServerConfig struct { // Permissions.Extensions entry. PublicKeyCallback func(conn ConnMetadata, key PublicKey) (*Permissions, error) + // VerifiedPublicKeyCallback, if non-nil, is called after a client + // successfully confirms having control over a key that was previously + // approved by PublicKeyCallback. The permissions object passed to the + // callback is the one returned by PublicKeyCallback for the given public + // key and its ownership is transferred to the callback. The returned + // Permissions object can be the same object, optionally modified, or a + // completely new object. If VerifiedPublicKeyCallback is non-nil, + // PublicKeyCallback is not allowed to return a PartialSuccessError, which + // can instead be returned by VerifiedPublicKeyCallback. + // + // VerifiedPublicKeyCallback does not affect which authentication methods + // are included in the list of methods that can be attempted by the client. + VerifiedPublicKeyCallback func(conn ConnMetadata, key PublicKey, permissions *Permissions, + signatureAlgorithm string) (*Permissions, error) + // KeyboardInteractiveCallback, if non-nil, is called when // keyboard-interactive authentication is selected (RFC // 4256). The client object's Challenge function should be @@ -118,6 +158,12 @@ type ServerConfig struct { // attempts. AuthLogCallback func(conn ConnMetadata, method string, err error) + // PreAuthConnCallback, if non-nil, is called upon receiving a new connection + // before any authentication has started. The provided ServerPreAuthConn + // can be used at any time before authentication is complete, including + // after this callback has returned. + PreAuthConnCallback func(ServerPreAuthConn) + // ServerVersion is the version identification string to announce in // the public handshake. // If empty, a reasonable default is used. @@ -149,7 +195,7 @@ func (s *ServerConfig) AddHostKey(key Signer) { } // cachedPubKey contains the results of querying whether a public key is -// acceptable for a user. +// acceptable for a user. This is a FIFO cache. type cachedPubKey struct { user string pubKeyData []byte @@ -157,7 +203,13 @@ type cachedPubKey struct { perms *Permissions } -const maxCachedPubKeys = 16 +// maxCachedPubKeys is the number of cache entries we store. +// +// Due to consistent misuse of the PublicKeyCallback API, we have reduced this +// to 1, such that the only key in the cache is the most recently seen one. This +// forces the behavior that the last call to PublicKeyCallback will always be +// with the key that is used for authentication. +const maxCachedPubKeys = 1 // pubKeyCache caches tests for public keys. Since SSH clients // will query whether a public key is acceptable before attempting to @@ -179,9 +231,10 @@ func (c *pubKeyCache) get(user string, pubKeyData []byte) (cachedPubKey, bool) { // add adds the given tuple to the cache. func (c *pubKeyCache) add(candidate cachedPubKey) { - if len(c.keys) < maxCachedPubKeys { - c.keys = append(c.keys, candidate) + if len(c.keys) >= maxCachedPubKeys { + c.keys = c.keys[1:] } + c.keys = append(c.keys, candidate) } // ServerConn is an authenticated SSH connection, as seen from the @@ -209,22 +262,15 @@ func NewServerConn(c net.Conn, config *ServerConfig) (*ServerConn, <-chan NewCha fullConf.MaxAuthTries = 6 } if len(fullConf.PublicKeyAuthAlgorithms) == 0 { - fullConf.PublicKeyAuthAlgorithms = supportedPubKeyAuthAlgos + fullConf.PublicKeyAuthAlgorithms = defaultPubKeyAuthAlgos } else { for _, algo := range fullConf.PublicKeyAuthAlgorithms { - if !contains(supportedPubKeyAuthAlgos, algo) { + if !slices.Contains(SupportedAlgorithms().PublicKeyAuths, algo) && !slices.Contains(InsecureAlgorithms().PublicKeyAuths, algo) { c.Close() return nil, nil, nil, fmt.Errorf("ssh: unsupported public key authentication algorithm %s", algo) } } } - // Check if the config contains any unsupported key exchanges - for _, kex := range fullConf.KeyExchanges { - if _, ok := serverForbiddenKexAlgos[kex]; ok { - c.Close() - return nil, nil, nil, fmt.Errorf("ssh: unsupported key exchange %s for server", kex) - } - } s := &connection{ sshConn: sshConn{conn: c}, @@ -281,6 +327,7 @@ func (s *connection) serverHandshake(config *ServerConfig) (*Permissions, error) // We just did the key change, so the session ID is established. s.sessionID = s.transport.getSessionID() + s.algorithms = s.transport.getAlgorithms() var packet []byte if packet, err = s.transport.readPacket(); err != nil { @@ -481,6 +528,10 @@ func (b *BannerError) Error() string { } func (s *connection) serverAuthenticate(config *ServerConfig) (*Permissions, error) { + if config.PreAuthConnCallback != nil { + config.PreAuthConnCallback(s) + } + sessionID := s.transport.getSessionID() var cache pubKeyCache var perms *Permissions @@ -488,7 +539,7 @@ func (s *connection) serverAuthenticate(config *ServerConfig) (*Permissions, err authFailures := 0 noneAuthCount := 0 var authErrs []error - var displayedBanner bool + var calledBannerCallback bool partialSuccessReturned := false // Set the initial authentication callbacks from the config. They can be // changed if a PartialSuccessError is returned. @@ -510,8 +561,8 @@ userAuthLoop: if err := s.transport.writePacket(Marshal(discMsg)); err != nil { return nil, err } - - return nil, discMsg + authErrs = append(authErrs, discMsg) + return nil, &ServerAuthError{Errors: authErrs} } var userAuthReq userAuthRequestMsg @@ -535,14 +586,10 @@ userAuthLoop: s.user = userAuthReq.User - if !displayedBanner && config.BannerCallback != nil { - displayedBanner = true - msg := config.BannerCallback(s) - if msg != "" { - bannerMsg := &userAuthBannerMsg{ - Message: msg, - } - if err := s.transport.writePacket(Marshal(bannerMsg)); err != nil { + if !calledBannerCallback && config.BannerCallback != nil { + calledBannerCallback = true + if msg := config.BannerCallback(s); msg != "" { + if err := s.SendAuthBanner(msg); err != nil { return nil, err } } @@ -603,7 +650,7 @@ userAuthLoop: return nil, parseError(msgUserAuthRequest) } algo := string(algoBytes) - if !contains(config.PublicKeyAuthAlgorithms, underlyingAlgo(algo)) { + if !slices.Contains(config.PublicKeyAuthAlgorithms, underlyingAlgo(algo)) { authErr = fmt.Errorf("ssh: algorithm %q not accepted", algo) break } @@ -624,6 +671,9 @@ userAuthLoop: candidate.pubKeyData = pubKeyData candidate.perms, candidate.result = authConfig.PublicKeyCallback(s, pubKey) _, isPartialSuccessError := candidate.result.(*PartialSuccessError) + if isPartialSuccessError && config.VerifiedPublicKeyCallback != nil { + return nil, errors.New("ssh: invalid library usage: PublicKeyCallback must not return partial success when VerifiedPublicKeyCallback is defined") + } if (candidate.result == nil || isPartialSuccessError) && candidate.perms != nil && @@ -667,7 +717,7 @@ userAuthLoop: // ssh-rsa-cert-v01@openssh.com algorithm with ssh-rsa public // key type. The algorithm and public key type must be // consistent: both must be certificate algorithms, or neither. - if !contains(algorithmsForKeyFormat(pubKey.Type()), algo) { + if !slices.Contains(algorithmsForKeyFormat(pubKey.Type()), algo) { authErr = fmt.Errorf("ssh: public key type %q not compatible with selected algorithm %q", pubKey.Type(), algo) break @@ -677,7 +727,7 @@ userAuthLoop: // algorithm name that corresponds to algo with // sig.Format. This is usually the same, but // for certs, the names differ. - if !contains(config.PublicKeyAuthAlgorithms, sig.Format) { + if !slices.Contains(config.PublicKeyAuthAlgorithms, sig.Format) { authErr = fmt.Errorf("ssh: algorithm %q not accepted", sig.Format) break } @@ -694,6 +744,12 @@ userAuthLoop: authErr = candidate.result perms = candidate.perms + if authErr == nil && config.VerifiedPublicKeyCallback != nil { + // Only call VerifiedPublicKeyCallback after the key has been accepted + // and successfully verified. If authErr is non-nil, the key is not + // considered verified and the callback must not run. + perms, authErr = config.VerifiedPublicKeyCallback(s, pubKey, perms, algo) + } } case "gssapi-with-mic": if authConfig.GSSAPIWithMICConfig == nil { @@ -755,10 +811,7 @@ userAuthLoop: var bannerErr *BannerError if errors.As(authErr, &bannerErr) { if bannerErr.Message != "" { - bannerMsg := &userAuthBannerMsg{ - Message: bannerErr.Message, - } - if err := s.transport.writePacket(Marshal(bannerMsg)); err != nil { + if err := s.SendAuthBanner(bannerErr.Message); err != nil { return nil, err } } diff --git a/vendor/golang.org/x/crypto/ssh/ssh_gss.go b/vendor/golang.org/x/crypto/ssh/ssh_gss.go index 24bd7c8e83..a6249a1227 100644 --- a/vendor/golang.org/x/crypto/ssh/ssh_gss.go +++ b/vendor/golang.org/x/crypto/ssh/ssh_gss.go @@ -106,6 +106,13 @@ func parseGSSAPIPayload(payload []byte) (*userAuthRequestGSSAPI, error) { if !ok { return nil, errors.New("parse uint32 failed") } + // Each ASN.1 encoded OID must have a minimum + // of 2 bytes; 64 maximum mechanisms is an + // arbitrary, but reasonable ceiling. + const maxMechs = 64 + if n > maxMechs || int(n)*2 > len(rest) { + return nil, errors.New("invalid mechanism count") + } s := &userAuthRequestGSSAPI{ N: n, OIDS: make([]asn1.ObjectIdentifier, n), @@ -122,7 +129,6 @@ func parseGSSAPIPayload(payload []byte) (*userAuthRequestGSSAPI, error) { if rest, err = asn1.Unmarshal(desiredMech, &s.OIDS[i]); err != nil { return nil, err } - } return s, nil } diff --git a/vendor/golang.org/x/crypto/ssh/streamlocal.go b/vendor/golang.org/x/crypto/ssh/streamlocal.go index b171b330bc..152470fcb7 100644 --- a/vendor/golang.org/x/crypto/ssh/streamlocal.go +++ b/vendor/golang.org/x/crypto/ssh/streamlocal.go @@ -44,7 +44,7 @@ func (c *Client) ListenUnix(socketPath string) (net.Listener, error) { if !ok { return nil, errors.New("ssh: streamlocal-forward@openssh.com request denied by peer") } - ch := c.forwards.add(&net.UnixAddr{Name: socketPath, Net: "unix"}) + ch := c.forwards.add("unix", socketPath) return &unixListener{socketPath, c, ch}, nil } @@ -96,7 +96,7 @@ func (l *unixListener) Accept() (net.Conn, error) { // Close closes the listener. func (l *unixListener) Close() error { // this also closes the listener. - l.conn.forwards.remove(&net.UnixAddr{Name: l.socketPath, Net: "unix"}) + l.conn.forwards.remove("unix", l.socketPath) m := streamLocalChannelForwardMsg{ l.socketPath, } diff --git a/vendor/golang.org/x/crypto/ssh/tcpip.go b/vendor/golang.org/x/crypto/ssh/tcpip.go index ef5059a11d..78c41fe5a1 100644 --- a/vendor/golang.org/x/crypto/ssh/tcpip.go +++ b/vendor/golang.org/x/crypto/ssh/tcpip.go @@ -11,6 +11,7 @@ import ( "io" "math/rand" "net" + "net/netip" "strconv" "strings" "sync" @@ -22,14 +23,21 @@ import ( // the returned net.Listener. The listener must be serviced, or the // SSH connection may hang. // N must be "tcp", "tcp4", "tcp6", or "unix". +// +// If the address is a hostname, it is sent to the remote peer as-is, without +// being resolved locally, and the Listener Addr method will return a zero IP. func (c *Client) Listen(n, addr string) (net.Listener, error) { switch n { case "tcp", "tcp4", "tcp6": - laddr, err := net.ResolveTCPAddr(n, addr) + host, portStr, err := net.SplitHostPort(addr) + if err != nil { + return nil, err + } + port, err := strconv.ParseInt(portStr, 10, 32) if err != nil { return nil, err } - return c.ListenTCP(laddr) + return c.listenTCPInternal(host, int(port)) case "unix": return c.ListenUnix(addr) default: @@ -102,15 +110,24 @@ func (c *Client) handleForwards() { // ListenTCP requests the remote peer open a listening socket // on laddr. Incoming connections will be available by calling // Accept on the returned net.Listener. +// +// ListenTCP accepts an IP address, to provide a hostname use [Client.Listen] +// with "tcp", "tcp4", or "tcp6" network instead. func (c *Client) ListenTCP(laddr *net.TCPAddr) (net.Listener, error) { c.handleForwardsOnce.Do(c.handleForwards) if laddr.Port == 0 && isBrokenOpenSSHVersion(string(c.ServerVersion())) { return c.autoPortListenWorkaround(laddr) } + return c.listenTCPInternal(laddr.IP.String(), laddr.Port) +} + +func (c *Client) listenTCPInternal(host string, port int) (net.Listener, error) { + c.handleForwardsOnce.Do(c.handleForwards) + m := channelForwardMsg{ - laddr.IP.String(), - uint32(laddr.Port), + host, + uint32(port), } // send message ok, resp, err := c.SendRequest("tcpip-forward", true, Marshal(&m)) @@ -123,20 +140,33 @@ func (c *Client) ListenTCP(laddr *net.TCPAddr) (net.Listener, error) { // If the original port was 0, then the remote side will // supply a real port number in the response. - if laddr.Port == 0 { + if port == 0 { var p struct { Port uint32 } if err := Unmarshal(resp, &p); err != nil { return nil, err } - laddr.Port = int(p.Port) + port = int(p.Port) } + // Construct a local address placeholder for the remote listener. If the + // original host is an IP address, preserve it so that Listener.Addr() + // reports the same IP. If the host is a hostname or cannot be parsed as an + // IP, fall back to IPv4zero. The port field is always set, even if the + // original port was 0, because in that case the remote server will assign + // one, allowing callers to determine which port was selected. + ip := net.IPv4zero + if parsed, err := netip.ParseAddr(host); err == nil { + ip = net.IP(parsed.AsSlice()) + } + laddr := &net.TCPAddr{ + IP: ip, + Port: port, + } + addr := net.JoinHostPort(host, strconv.FormatInt(int64(port), 10)) + ch := c.forwards.add("tcp", addr) - // Register this forward, using the port number we obtained. - ch := c.forwards.add(laddr) - - return &tcpListener{laddr, c, ch}, nil + return &tcpListener{laddr, addr, c, ch}, nil } // forwardList stores a mapping between remote @@ -149,8 +179,9 @@ type forwardList struct { // forwardEntry represents an established mapping of a laddr on a // remote ssh server to a channel connected to a tcpListener. type forwardEntry struct { - laddr net.Addr - c chan forward + addr string // host:port or socket path + network string // tcp or unix + c chan forward } // forward represents an incoming forwarded tcpip connection. The @@ -161,12 +192,13 @@ type forward struct { raddr net.Addr // the raddr of the incoming connection } -func (l *forwardList) add(addr net.Addr) chan forward { +func (l *forwardList) add(n, addr string) chan forward { l.Lock() defer l.Unlock() f := forwardEntry{ - laddr: addr, - c: make(chan forward, 1), + addr: addr, + network: n, + c: make(chan forward, 1), } l.entries = append(l.entries, f) return f.c @@ -185,19 +217,20 @@ func parseTCPAddr(addr string, port uint32) (*net.TCPAddr, error) { if port == 0 || port > 65535 { return nil, fmt.Errorf("ssh: port number out of range: %d", port) } - ip := net.ParseIP(string(addr)) - if ip == nil { + ip, err := netip.ParseAddr(addr) + if err != nil { return nil, fmt.Errorf("ssh: cannot parse IP address %q", addr) } - return &net.TCPAddr{IP: ip, Port: int(port)}, nil + return &net.TCPAddr{IP: net.IP(ip.AsSlice()), Port: int(port)}, nil } func (l *forwardList) handleChannels(in <-chan NewChannel) { for ch := range in { var ( - laddr net.Addr - raddr net.Addr - err error + addr string + network string + raddr net.Addr + err error ) switch channelType := ch.ChannelType(); channelType { case "forwarded-tcpip": @@ -207,40 +240,34 @@ func (l *forwardList) handleChannels(in <-chan NewChannel) { continue } - // RFC 4254 section 7.2 specifies that incoming - // addresses should list the address, in string - // format. It is implied that this should be an IP - // address, as it would be impossible to connect to it - // otherwise. - laddr, err = parseTCPAddr(payload.Addr, payload.Port) - if err != nil { - ch.Reject(ConnectionFailed, err.Error()) - continue - } + // RFC 4254 section 7.2 specifies that incoming addresses should + // list the address that was connected, in string format. It is the + // same address used in the tcpip-forward request. The originator + // address is an IP address instead. + addr = net.JoinHostPort(payload.Addr, strconv.FormatUint(uint64(payload.Port), 10)) + raddr, err = parseTCPAddr(payload.OriginAddr, payload.OriginPort) if err != nil { ch.Reject(ConnectionFailed, err.Error()) continue } - + network = "tcp" case "forwarded-streamlocal@openssh.com": var payload forwardedStreamLocalPayload if err = Unmarshal(ch.ExtraData(), &payload); err != nil { ch.Reject(ConnectionFailed, "could not parse forwarded-streamlocal@openssh.com payload: "+err.Error()) continue } - laddr = &net.UnixAddr{ - Name: payload.SocketPath, - Net: "unix", - } + addr = payload.SocketPath raddr = &net.UnixAddr{ Name: "@", Net: "unix", } + network = "unix" default: panic(fmt.Errorf("ssh: unknown channel type %s", channelType)) } - if ok := l.forward(laddr, raddr, ch); !ok { + if ok := l.forward(network, addr, raddr, ch); !ok { // Section 7.2, implementations MUST reject spurious incoming // connections. ch.Reject(Prohibited, "no forward for address") @@ -252,11 +279,11 @@ func (l *forwardList) handleChannels(in <-chan NewChannel) { // remove removes the forward entry, and the channel feeding its // listener. -func (l *forwardList) remove(addr net.Addr) { +func (l *forwardList) remove(n, addr string) { l.Lock() defer l.Unlock() for i, f := range l.entries { - if addr.Network() == f.laddr.Network() && addr.String() == f.laddr.String() { + if n == f.network && addr == f.addr { l.entries = append(l.entries[:i], l.entries[i+1:]...) close(f.c) return @@ -274,11 +301,11 @@ func (l *forwardList) closeAll() { l.entries = nil } -func (l *forwardList) forward(laddr, raddr net.Addr, ch NewChannel) bool { +func (l *forwardList) forward(n, addr string, raddr net.Addr, ch NewChannel) bool { l.Lock() defer l.Unlock() for _, f := range l.entries { - if laddr.Network() == f.laddr.Network() && laddr.String() == f.laddr.String() { + if n == f.network && addr == f.addr { f.c <- forward{newCh: ch, raddr: raddr} return true } @@ -288,6 +315,7 @@ func (l *forwardList) forward(laddr, raddr net.Addr, ch NewChannel) bool { type tcpListener struct { laddr *net.TCPAddr + addr string conn *Client in <-chan forward @@ -314,13 +342,21 @@ func (l *tcpListener) Accept() (net.Conn, error) { // Close closes the listener. func (l *tcpListener) Close() error { + host, port, err := net.SplitHostPort(l.addr) + if err != nil { + return err + } + rport, err := strconv.ParseUint(port, 10, 32) + if err != nil { + return err + } m := channelForwardMsg{ - l.laddr.IP.String(), - uint32(l.laddr.Port), + host, + uint32(rport), } // this also closes the listener. - l.conn.forwards.remove(l.laddr) + l.conn.forwards.remove("tcp", l.addr) ok, _, err := l.conn.SendRequest("cancel-tcpip-forward", true, Marshal(&m)) if err == nil && !ok { err = errors.New("ssh: cancel-tcpip-forward failed") @@ -459,7 +495,7 @@ func (c *Client) dial(laddr string, lport int, raddr string, rport int) (Channel return nil, err } go DiscardRequests(in) - return ch, err + return ch, nil } type tcpChan struct { diff --git a/vendor/golang.org/x/crypto/ssh/transport.go b/vendor/golang.org/x/crypto/ssh/transport.go index 0424d2d37c..fa3dd6a429 100644 --- a/vendor/golang.org/x/crypto/ssh/transport.go +++ b/vendor/golang.org/x/crypto/ssh/transport.go @@ -8,6 +8,7 @@ import ( "bufio" "bytes" "errors" + "fmt" "io" "log" ) @@ -16,13 +17,6 @@ import ( // wire. No message decoding is done, to minimize the impact on timing. const debugTransport = false -const ( - gcm128CipherID = "aes128-gcm@openssh.com" - gcm256CipherID = "aes256-gcm@openssh.com" - aes128cbcID = "aes128-cbc" - tripledescbcID = "3des-cbc" -) - // packetConn represents a transport that implements packet based // operations. type packetConn interface { @@ -92,14 +86,14 @@ func (t *transport) setInitialKEXDone() { // prepareKeyChange sets up key material for a keychange. The key changes in // both directions are triggered by reading and writing a msgNewKey packet // respectively. -func (t *transport) prepareKeyChange(algs *algorithms, kexResult *kexResult) error { - ciph, err := newPacketCipher(t.reader.dir, algs.r, kexResult) +func (t *transport) prepareKeyChange(algs *NegotiatedAlgorithms, kexResult *kexResult) error { + ciph, err := newPacketCipher(t.reader.dir, algs.Read, kexResult) if err != nil { return err } t.reader.pendingKeyChange <- ciph - ciph, err = newPacketCipher(t.writer.dir, algs.w, kexResult) + ciph, err = newPacketCipher(t.writer.dir, algs.Write, kexResult) if err != nil { return err } @@ -259,8 +253,11 @@ var ( // setupKeys sets the cipher and MAC keys from kex.K, kex.H and sessionId, as // described in RFC 4253, section 6.4. direction should either be serverKeys // (to setup server->client keys) or clientKeys (for client->server keys). -func newPacketCipher(d direction, algs directionAlgorithms, kex *kexResult) (packetCipher, error) { +func newPacketCipher(d direction, algs DirectionAlgorithms, kex *kexResult) (packetCipher, error) { cipherMode := cipherModes[algs.Cipher] + if cipherMode == nil { + return nil, fmt.Errorf("ssh: unsupported cipher %v", algs.Cipher) + } iv := make([]byte, cipherMode.ivSize) key := make([]byte, cipherMode.keySize) diff --git a/vendor/golang.org/x/exp/LICENSE b/vendor/golang.org/x/exp/LICENSE index 6a66aea5ea..2a7cf70da6 100644 --- a/vendor/golang.org/x/exp/LICENSE +++ b/vendor/golang.org/x/exp/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2009 The Go Authors. All rights reserved. +Copyright 2009 The Go Authors. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are @@ -10,7 +10,7 @@ notice, this list of conditions and the following disclaimer. copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - * Neither the name of Google Inc. nor the names of its + * Neither the name of Google LLC nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. diff --git a/vendor/golang.org/x/exp/constraints/constraints.go b/vendor/golang.org/x/exp/constraints/constraints.go index 2c033dff47..9d260bab19 100644 --- a/vendor/golang.org/x/exp/constraints/constraints.go +++ b/vendor/golang.org/x/exp/constraints/constraints.go @@ -6,6 +6,8 @@ // with type parameters. package constraints +import "cmp" + // Signed is a constraint that permits any signed integer type. // If future releases of Go add new predeclared signed integer types, // this constraint will be modified to include them. @@ -45,6 +47,8 @@ type Complex interface { // that supports the operators < <= >= >. // If future releases of Go add new ordered types, // this constraint will be modified to include them. -type Ordered interface { - Integer | Float | ~string -} +// +// This type is redundant since Go 1.21 introduced [cmp.Ordered]. +// +//go:fix inline +type Ordered = cmp.Ordered diff --git a/vendor/golang.org/x/exp/slices/cmp.go b/vendor/golang.org/x/exp/slices/cmp.go deleted file mode 100644 index fbf1934a06..0000000000 --- a/vendor/golang.org/x/exp/slices/cmp.go +++ /dev/null @@ -1,44 +0,0 @@ -// Copyright 2023 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package slices - -import "golang.org/x/exp/constraints" - -// min is a version of the predeclared function from the Go 1.21 release. -func min[T constraints.Ordered](a, b T) T { - if a < b || isNaN(a) { - return a - } - return b -} - -// max is a version of the predeclared function from the Go 1.21 release. -func max[T constraints.Ordered](a, b T) T { - if a > b || isNaN(a) { - return a - } - return b -} - -// cmpLess is a copy of cmp.Less from the Go 1.21 release. -func cmpLess[T constraints.Ordered](x, y T) bool { - return (isNaN(x) && !isNaN(y)) || x < y -} - -// cmpCompare is a copy of cmp.Compare from the Go 1.21 release. -func cmpCompare[T constraints.Ordered](x, y T) int { - xNaN := isNaN(x) - yNaN := isNaN(y) - if xNaN && yNaN { - return 0 - } - if xNaN || x < y { - return -1 - } - if yNaN || x > y { - return +1 - } - return 0 -} diff --git a/vendor/golang.org/x/exp/slices/slices.go b/vendor/golang.org/x/exp/slices/slices.go index 46ceac3439..da0df370da 100644 --- a/vendor/golang.org/x/exp/slices/slices.go +++ b/vendor/golang.org/x/exp/slices/slices.go @@ -6,9 +6,8 @@ package slices import ( - "unsafe" - - "golang.org/x/exp/constraints" + "cmp" + "slices" ) // Equal reports whether two slices are equal: the same length and all @@ -16,16 +15,10 @@ import ( // Otherwise, the elements are compared in increasing index order, and the // comparison stops at the first unequal pair. // Floating point NaNs are not considered equal. +// +//go:fix inline func Equal[S ~[]E, E comparable](s1, s2 S) bool { - if len(s1) != len(s2) { - return false - } - for i := range s1 { - if s1[i] != s2[i] { - return false - } - } - return true + return slices.Equal(s1, s2) } // EqualFunc reports whether two slices are equal using an equality @@ -33,17 +26,10 @@ func Equal[S ~[]E, E comparable](s1, s2 S) bool { // EqualFunc returns false. Otherwise, the elements are compared in // increasing index order, and the comparison stops at the first index // for which eq returns false. +// +//go:fix inline func EqualFunc[S1 ~[]E1, S2 ~[]E2, E1, E2 any](s1 S1, s2 S2, eq func(E1, E2) bool) bool { - if len(s1) != len(s2) { - return false - } - for i, v1 := range s1 { - v2 := s2[i] - if !eq(v1, v2) { - return false - } - } - return true + return slices.EqualFunc(s1, s2, eq) } // Compare compares the elements of s1 and s2, using [cmp.Compare] on each pair @@ -53,20 +39,10 @@ func EqualFunc[S1 ~[]E1, S2 ~[]E2, E1, E2 any](s1 S1, s2 S2, eq func(E1, E2) boo // If both slices are equal until one of them ends, the shorter slice is // considered less than the longer one. // The result is 0 if s1 == s2, -1 if s1 < s2, and +1 if s1 > s2. -func Compare[S ~[]E, E constraints.Ordered](s1, s2 S) int { - for i, v1 := range s1 { - if i >= len(s2) { - return +1 - } - v2 := s2[i] - if c := cmpCompare(v1, v2); c != 0 { - return c - } - } - if len(s1) < len(s2) { - return -1 - } - return 0 +// +//go:fix inline +func Compare[S ~[]E, E cmp.Ordered](s1, s2 S) int { + return slices.Compare(s1, s2) } // CompareFunc is like [Compare] but uses a custom comparison function on each @@ -74,53 +50,41 @@ func Compare[S ~[]E, E constraints.Ordered](s1, s2 S) int { // The result is the first non-zero result of cmp; if cmp always // returns 0 the result is 0 if len(s1) == len(s2), -1 if len(s1) < len(s2), // and +1 if len(s1) > len(s2). +// +//go:fix inline func CompareFunc[S1 ~[]E1, S2 ~[]E2, E1, E2 any](s1 S1, s2 S2, cmp func(E1, E2) int) int { - for i, v1 := range s1 { - if i >= len(s2) { - return +1 - } - v2 := s2[i] - if c := cmp(v1, v2); c != 0 { - return c - } - } - if len(s1) < len(s2) { - return -1 - } - return 0 + return slices.CompareFunc(s1, s2, cmp) } // Index returns the index of the first occurrence of v in s, // or -1 if not present. +// +//go:fix inline func Index[S ~[]E, E comparable](s S, v E) int { - for i := range s { - if v == s[i] { - return i - } - } - return -1 + return slices.Index(s, v) } // IndexFunc returns the first index i satisfying f(s[i]), // or -1 if none do. +// +//go:fix inline func IndexFunc[S ~[]E, E any](s S, f func(E) bool) int { - for i := range s { - if f(s[i]) { - return i - } - } - return -1 + return slices.IndexFunc(s, f) } // Contains reports whether v is present in s. +// +//go:fix inline func Contains[S ~[]E, E comparable](s S, v E) bool { - return Index(s, v) >= 0 + return slices.Contains(s, v) } // ContainsFunc reports whether at least one // element e of s satisfies f(e). +// +//go:fix inline func ContainsFunc[S ~[]E, E any](s S, f func(E) bool) bool { - return IndexFunc(s, f) >= 0 + return slices.ContainsFunc(s, f) } // Insert inserts the values v... into s at index i, @@ -130,93 +94,10 @@ func ContainsFunc[S ~[]E, E any](s S, f func(E) bool) bool { // and r[i+len(v)] == value originally at r[i]. // Insert panics if i is out of range. // This function is O(len(s) + len(v)). +// +//go:fix inline func Insert[S ~[]E, E any](s S, i int, v ...E) S { - m := len(v) - if m == 0 { - return s - } - n := len(s) - if i == n { - return append(s, v...) - } - if n+m > cap(s) { - // Use append rather than make so that we bump the size of - // the slice up to the next storage class. - // This is what Grow does but we don't call Grow because - // that might copy the values twice. - s2 := append(s[:i], make(S, n+m-i)...) - copy(s2[i:], v) - copy(s2[i+m:], s[i:]) - return s2 - } - s = s[:n+m] - - // before: - // s: aaaaaaaabbbbccccccccdddd - // ^ ^ ^ ^ - // i i+m n n+m - // after: - // s: aaaaaaaavvvvbbbbcccccccc - // ^ ^ ^ ^ - // i i+m n n+m - // - // a are the values that don't move in s. - // v are the values copied in from v. - // b and c are the values from s that are shifted up in index. - // d are the values that get overwritten, never to be seen again. - - if !overlaps(v, s[i+m:]) { - // Easy case - v does not overlap either the c or d regions. - // (It might be in some of a or b, or elsewhere entirely.) - // The data we copy up doesn't write to v at all, so just do it. - - copy(s[i+m:], s[i:]) - - // Now we have - // s: aaaaaaaabbbbbbbbcccccccc - // ^ ^ ^ ^ - // i i+m n n+m - // Note the b values are duplicated. - - copy(s[i:], v) - - // Now we have - // s: aaaaaaaavvvvbbbbcccccccc - // ^ ^ ^ ^ - // i i+m n n+m - // That's the result we want. - return s - } - - // The hard case - v overlaps c or d. We can't just shift up - // the data because we'd move or clobber the values we're trying - // to insert. - // So instead, write v on top of d, then rotate. - copy(s[n:], v) - - // Now we have - // s: aaaaaaaabbbbccccccccvvvv - // ^ ^ ^ ^ - // i i+m n n+m - - rotateRight(s[i:], m) - - // Now we have - // s: aaaaaaaavvvvbbbbcccccccc - // ^ ^ ^ ^ - // i i+m n n+m - // That's the result we want. - return s -} - -// clearSlice sets all elements up to the length of s to the zero value of E. -// We may use the builtin clear func instead, and remove clearSlice, when upgrading -// to Go 1.21+. -func clearSlice[S ~[]E, E any](s S) { - var zero E - for i := range s { - s[i] = zero - } + return slices.Insert(s, i, v...) } // Delete removes the elements s[i:j] from s, returning the modified slice. @@ -224,136 +105,36 @@ func clearSlice[S ~[]E, E any](s S) { // Delete is O(len(s)-i), so if many items must be deleted, it is better to // make a single call deleting them all together than to delete one at a time. // Delete zeroes the elements s[len(s)-(j-i):len(s)]. +// +//go:fix inline func Delete[S ~[]E, E any](s S, i, j int) S { - _ = s[i:j:len(s)] // bounds check - - if i == j { - return s - } - - oldlen := len(s) - s = append(s[:i], s[j:]...) - clearSlice(s[len(s):oldlen]) // zero/nil out the obsolete elements, for GC - return s + return slices.Delete(s, i, j) } // DeleteFunc removes any elements from s for which del returns true, // returning the modified slice. // DeleteFunc zeroes the elements between the new length and the original length. +// +//go:fix inline func DeleteFunc[S ~[]E, E any](s S, del func(E) bool) S { - i := IndexFunc(s, del) - if i == -1 { - return s - } - // Don't start copying elements until we find one to delete. - for j := i + 1; j < len(s); j++ { - if v := s[j]; !del(v) { - s[i] = v - i++ - } - } - clearSlice(s[i:]) // zero/nil out the obsolete elements, for GC - return s[:i] + return slices.DeleteFunc(s, del) } // Replace replaces the elements s[i:j] by the given v, and returns the // modified slice. Replace panics if s[i:j] is not a valid slice of s. // When len(v) < (j-i), Replace zeroes the elements between the new length and the original length. +// +//go:fix inline func Replace[S ~[]E, E any](s S, i, j int, v ...E) S { - _ = s[i:j] // verify that i:j is a valid subslice - - if i == j { - return Insert(s, i, v...) - } - if j == len(s) { - return append(s[:i], v...) - } - - tot := len(s[:i]) + len(v) + len(s[j:]) - if tot > cap(s) { - // Too big to fit, allocate and copy over. - s2 := append(s[:i], make(S, tot-i)...) // See Insert - copy(s2[i:], v) - copy(s2[i+len(v):], s[j:]) - return s2 - } - - r := s[:tot] - - if i+len(v) <= j { - // Easy, as v fits in the deleted portion. - copy(r[i:], v) - if i+len(v) != j { - copy(r[i+len(v):], s[j:]) - } - clearSlice(s[tot:]) // zero/nil out the obsolete elements, for GC - return r - } - - // We are expanding (v is bigger than j-i). - // The situation is something like this: - // (example has i=4,j=8,len(s)=16,len(v)=6) - // s: aaaaxxxxbbbbbbbbyy - // ^ ^ ^ ^ - // i j len(s) tot - // a: prefix of s - // x: deleted range - // b: more of s - // y: area to expand into - - if !overlaps(r[i+len(v):], v) { - // Easy, as v is not clobbered by the first copy. - copy(r[i+len(v):], s[j:]) - copy(r[i:], v) - return r - } - - // This is a situation where we don't have a single place to which - // we can copy v. Parts of it need to go to two different places. - // We want to copy the prefix of v into y and the suffix into x, then - // rotate |y| spots to the right. - // - // v[2:] v[:2] - // | | - // s: aaaavvvvbbbbbbbbvv - // ^ ^ ^ ^ - // i j len(s) tot - // - // If either of those two destinations don't alias v, then we're good. - y := len(v) - (j - i) // length of y portion - - if !overlaps(r[i:j], v) { - copy(r[i:j], v[y:]) - copy(r[len(s):], v[:y]) - rotateRight(r[i:], y) - return r - } - if !overlaps(r[len(s):], v) { - copy(r[len(s):], v[:y]) - copy(r[i:j], v[y:]) - rotateRight(r[i:], y) - return r - } - - // Now we know that v overlaps both x and y. - // That means that the entirety of b is *inside* v. - // So we don't need to preserve b at all; instead we - // can copy v first, then copy the b part of v out of - // v to the right destination. - k := startIdx(v, s[j:]) - copy(r[i:], v) - copy(r[i+len(v):], r[i+k:]) - return r + return slices.Replace(s, i, j, v...) } // Clone returns a copy of the slice. // The elements are copied using assignment, so this is a shallow clone. +// +//go:fix inline func Clone[S ~[]E, E any](s S) S { - // Preserve nil in case it matters. - if s == nil { - return nil - } - return append(S([]E{}), s...) + return slices.Clone(s) } // Compact replaces consecutive runs of equal elements with a single copy. @@ -361,155 +142,41 @@ func Clone[S ~[]E, E any](s S) S { // Compact modifies the contents of the slice s and returns the modified slice, // which may have a smaller length. // Compact zeroes the elements between the new length and the original length. +// +//go:fix inline func Compact[S ~[]E, E comparable](s S) S { - if len(s) < 2 { - return s - } - i := 1 - for k := 1; k < len(s); k++ { - if s[k] != s[k-1] { - if i != k { - s[i] = s[k] - } - i++ - } - } - clearSlice(s[i:]) // zero/nil out the obsolete elements, for GC - return s[:i] + return slices.Compact(s) } // CompactFunc is like [Compact] but uses an equality function to compare elements. // For runs of elements that compare equal, CompactFunc keeps the first one. // CompactFunc zeroes the elements between the new length and the original length. +// +//go:fix inline func CompactFunc[S ~[]E, E any](s S, eq func(E, E) bool) S { - if len(s) < 2 { - return s - } - i := 1 - for k := 1; k < len(s); k++ { - if !eq(s[k], s[k-1]) { - if i != k { - s[i] = s[k] - } - i++ - } - } - clearSlice(s[i:]) // zero/nil out the obsolete elements, for GC - return s[:i] + return slices.CompactFunc(s, eq) } // Grow increases the slice's capacity, if necessary, to guarantee space for // another n elements. After Grow(n), at least n elements can be appended // to the slice without another allocation. If n is negative or too large to // allocate the memory, Grow panics. +// +//go:fix inline func Grow[S ~[]E, E any](s S, n int) S { - if n < 0 { - panic("cannot be negative") - } - if n -= cap(s) - len(s); n > 0 { - // TODO(https://go.dev/issue/53888): Make using []E instead of S - // to workaround a compiler bug where the runtime.growslice optimization - // does not take effect. Revert when the compiler is fixed. - s = append([]E(s)[:cap(s)], make([]E, n)...)[:len(s)] - } - return s + return slices.Grow(s, n) } // Clip removes unused capacity from the slice, returning s[:len(s):len(s)]. -func Clip[S ~[]E, E any](s S) S { - return s[:len(s):len(s)] -} - -// Rotation algorithm explanation: -// -// rotate left by 2 -// start with -// 0123456789 -// split up like this -// 01 234567 89 -// swap first 2 and last 2 -// 89 234567 01 -// join first parts -// 89234567 01 -// recursively rotate first left part by 2 -// 23456789 01 -// join at the end -// 2345678901 // -// rotate left by 8 -// start with -// 0123456789 -// split up like this -// 01 234567 89 -// swap first 2 and last 2 -// 89 234567 01 -// join last parts -// 89 23456701 -// recursively rotate second part left by 6 -// 89 01234567 -// join at the end -// 8901234567 - -// TODO: There are other rotate algorithms. -// This algorithm has the desirable property that it moves each element exactly twice. -// The triple-reverse algorithm is simpler and more cache friendly, but takes more writes. -// The follow-cycles algorithm can be 1-write but it is not very cache friendly. - -// rotateLeft rotates b left by n spaces. -// s_final[i] = s_orig[i+r], wrapping around. -func rotateLeft[E any](s []E, r int) { - for r != 0 && r != len(s) { - if r*2 <= len(s) { - swap(s[:r], s[len(s)-r:]) - s = s[:len(s)-r] - } else { - swap(s[:len(s)-r], s[r:]) - s, r = s[len(s)-r:], r*2-len(s) - } - } -} -func rotateRight[E any](s []E, r int) { - rotateLeft(s, len(s)-r) -} - -// swap swaps the contents of x and y. x and y must be equal length and disjoint. -func swap[E any](x, y []E) { - for i := 0; i < len(x); i++ { - x[i], y[i] = y[i], x[i] - } -} - -// overlaps reports whether the memory ranges a[0:len(a)] and b[0:len(b)] overlap. -func overlaps[E any](a, b []E) bool { - if len(a) == 0 || len(b) == 0 { - return false - } - elemSize := unsafe.Sizeof(a[0]) - if elemSize == 0 { - return false - } - // TODO: use a runtime/unsafe facility once one becomes available. See issue 12445. - // Also see crypto/internal/alias/alias.go:AnyOverlap - return uintptr(unsafe.Pointer(&a[0])) <= uintptr(unsafe.Pointer(&b[len(b)-1]))+(elemSize-1) && - uintptr(unsafe.Pointer(&b[0])) <= uintptr(unsafe.Pointer(&a[len(a)-1]))+(elemSize-1) -} - -// startIdx returns the index in haystack where the needle starts. -// prerequisite: the needle must be aliased entirely inside the haystack. -func startIdx[E any](haystack, needle []E) int { - p := &needle[0] - for i := range haystack { - if p == &haystack[i] { - return i - } - } - // TODO: what if the overlap is by a non-integral number of Es? - panic("needle not found") +//go:fix inline +func Clip[S ~[]E, E any](s S) S { + return slices.Clip(s) } // Reverse reverses the elements of the slice in place. +// +//go:fix inline func Reverse[S ~[]E, E any](s S) { - for i, j := 0, len(s)-1; i < j; i, j = i+1, j-1 { - s[i], s[j] = s[j], s[i] - } + slices.Reverse(s) } diff --git a/vendor/golang.org/x/exp/slices/sort.go b/vendor/golang.org/x/exp/slices/sort.go index f58bbc7ba4..bd91a8d402 100644 --- a/vendor/golang.org/x/exp/slices/sort.go +++ b/vendor/golang.org/x/exp/slices/sort.go @@ -2,21 +2,19 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -//go:generate go run $GOROOT/src/sort/gen_sort_variants.go -exp - package slices import ( - "math/bits" - - "golang.org/x/exp/constraints" + "cmp" + "slices" ) // Sort sorts a slice of any ordered type in ascending order. // When sorting floating-point numbers, NaNs are ordered before other values. -func Sort[S ~[]E, E constraints.Ordered](x S) { - n := len(x) - pdqsortOrdered(x, 0, n, bits.Len(uint(n))) +// +//go:fix inline +func Sort[S ~[]E, E cmp.Ordered](x S) { + slices.Sort(x) } // SortFunc sorts the slice x in ascending order as determined by the cmp @@ -28,119 +26,79 @@ func Sort[S ~[]E, E constraints.Ordered](x S) { // SortFunc requires that cmp is a strict weak ordering. // See https://en.wikipedia.org/wiki/Weak_ordering#Strict_weak_orderings. // To indicate 'uncomparable', return 0 from the function. +// +//go:fix inline func SortFunc[S ~[]E, E any](x S, cmp func(a, b E) int) { - n := len(x) - pdqsortCmpFunc(x, 0, n, bits.Len(uint(n)), cmp) + slices.SortFunc(x, cmp) } // SortStableFunc sorts the slice x while keeping the original order of equal // elements, using cmp to compare elements in the same way as [SortFunc]. +// +//go:fix inline func SortStableFunc[S ~[]E, E any](x S, cmp func(a, b E) int) { - stableCmpFunc(x, len(x), cmp) + slices.SortStableFunc(x, cmp) } // IsSorted reports whether x is sorted in ascending order. -func IsSorted[S ~[]E, E constraints.Ordered](x S) bool { - for i := len(x) - 1; i > 0; i-- { - if cmpLess(x[i], x[i-1]) { - return false - } - } - return true +// +//go:fix inline +func IsSorted[S ~[]E, E cmp.Ordered](x S) bool { + return slices.IsSorted(x) } // IsSortedFunc reports whether x is sorted in ascending order, with cmp as the // comparison function as defined by [SortFunc]. +// +//go:fix inline func IsSortedFunc[S ~[]E, E any](x S, cmp func(a, b E) int) bool { - for i := len(x) - 1; i > 0; i-- { - if cmp(x[i], x[i-1]) < 0 { - return false - } - } - return true + return slices.IsSortedFunc(x, cmp) } // Min returns the minimal value in x. It panics if x is empty. // For floating-point numbers, Min propagates NaNs (any NaN value in x // forces the output to be NaN). -func Min[S ~[]E, E constraints.Ordered](x S) E { - if len(x) < 1 { - panic("slices.Min: empty list") - } - m := x[0] - for i := 1; i < len(x); i++ { - m = min(m, x[i]) - } - return m +// +//go:fix inline +func Min[S ~[]E, E cmp.Ordered](x S) E { + return slices.Min(x) } // MinFunc returns the minimal value in x, using cmp to compare elements. // It panics if x is empty. If there is more than one minimal element // according to the cmp function, MinFunc returns the first one. +// +//go:fix inline func MinFunc[S ~[]E, E any](x S, cmp func(a, b E) int) E { - if len(x) < 1 { - panic("slices.MinFunc: empty list") - } - m := x[0] - for i := 1; i < len(x); i++ { - if cmp(x[i], m) < 0 { - m = x[i] - } - } - return m + return slices.MinFunc(x, cmp) } // Max returns the maximal value in x. It panics if x is empty. // For floating-point E, Max propagates NaNs (any NaN value in x // forces the output to be NaN). -func Max[S ~[]E, E constraints.Ordered](x S) E { - if len(x) < 1 { - panic("slices.Max: empty list") - } - m := x[0] - for i := 1; i < len(x); i++ { - m = max(m, x[i]) - } - return m +// +//go:fix inline +func Max[S ~[]E, E cmp.Ordered](x S) E { + return slices.Max(x) } // MaxFunc returns the maximal value in x, using cmp to compare elements. // It panics if x is empty. If there is more than one maximal element // according to the cmp function, MaxFunc returns the first one. +// +//go:fix inline func MaxFunc[S ~[]E, E any](x S, cmp func(a, b E) int) E { - if len(x) < 1 { - panic("slices.MaxFunc: empty list") - } - m := x[0] - for i := 1; i < len(x); i++ { - if cmp(x[i], m) > 0 { - m = x[i] - } - } - return m + return slices.MaxFunc(x, cmp) } // BinarySearch searches for target in a sorted slice and returns the position // where target is found, or the position where target would appear in the // sort order; it also returns a bool saying whether the target is really found // in the slice. The slice must be sorted in increasing order. -func BinarySearch[S ~[]E, E constraints.Ordered](x S, target E) (int, bool) { - // Inlining is faster than calling BinarySearchFunc with a lambda. - n := len(x) - // Define x[-1] < target and x[n] >= target. - // Invariant: x[i-1] < target, x[j] >= target. - i, j := 0, n - for i < j { - h := int(uint(i+j) >> 1) // avoid overflow when computing h - // i ≤ h < j - if cmpLess(x[h], target) { - i = h + 1 // preserves x[i-1] < target - } else { - j = h // preserves x[j] >= target - } - } - // i == j, x[i-1] < target, and x[j] (= x[i]) >= target => answer is i. - return i, i < n && (x[i] == target || (isNaN(x[i]) && isNaN(target))) +// +//go:fix inline +func BinarySearch[S ~[]E, E cmp.Ordered](x S, target E) (int, bool) { + return slices.BinarySearch(x, target) } // BinarySearchFunc works like [BinarySearch], but uses a custom comparison @@ -150,48 +108,8 @@ func BinarySearch[S ~[]E, E constraints.Ordered](x S, target E) (int, bool) { // or a positive number if the slice element follows the target. // cmp must implement the same ordering as the slice, such that if // cmp(a, t) < 0 and cmp(b, t) >= 0, then a must precede b in the slice. +// +//go:fix inline func BinarySearchFunc[S ~[]E, E, T any](x S, target T, cmp func(E, T) int) (int, bool) { - n := len(x) - // Define cmp(x[-1], target) < 0 and cmp(x[n], target) >= 0 . - // Invariant: cmp(x[i - 1], target) < 0, cmp(x[j], target) >= 0. - i, j := 0, n - for i < j { - h := int(uint(i+j) >> 1) // avoid overflow when computing h - // i ≤ h < j - if cmp(x[h], target) < 0 { - i = h + 1 // preserves cmp(x[i - 1], target) < 0 - } else { - j = h // preserves cmp(x[j], target) >= 0 - } - } - // i == j, cmp(x[i-1], target) < 0, and cmp(x[j], target) (= cmp(x[i], target)) >= 0 => answer is i. - return i, i < n && cmp(x[i], target) == 0 -} - -type sortedHint int // hint for pdqsort when choosing the pivot - -const ( - unknownHint sortedHint = iota - increasingHint - decreasingHint -) - -// xorshift paper: https://www.jstatsoft.org/article/view/v008i14/xorshift.pdf -type xorshift uint64 - -func (r *xorshift) Next() uint64 { - *r ^= *r << 13 - *r ^= *r >> 17 - *r ^= *r << 5 - return uint64(*r) -} - -func nextPowerOfTwo(length int) uint { - return 1 << bits.Len(uint(length)) -} - -// isNaN reports whether x is a NaN without requiring the math package. -// This will always return false if T is not floating-point. -func isNaN[T constraints.Ordered](x T) bool { - return x != x + return slices.BinarySearchFunc(x, target, cmp) } diff --git a/vendor/golang.org/x/exp/slices/zsortanyfunc.go b/vendor/golang.org/x/exp/slices/zsortanyfunc.go deleted file mode 100644 index 06f2c7a248..0000000000 --- a/vendor/golang.org/x/exp/slices/zsortanyfunc.go +++ /dev/null @@ -1,479 +0,0 @@ -// Code generated by gen_sort_variants.go; DO NOT EDIT. - -// Copyright 2022 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package slices - -// insertionSortCmpFunc sorts data[a:b] using insertion sort. -func insertionSortCmpFunc[E any](data []E, a, b int, cmp func(a, b E) int) { - for i := a + 1; i < b; i++ { - for j := i; j > a && (cmp(data[j], data[j-1]) < 0); j-- { - data[j], data[j-1] = data[j-1], data[j] - } - } -} - -// siftDownCmpFunc implements the heap property on data[lo:hi]. -// first is an offset into the array where the root of the heap lies. -func siftDownCmpFunc[E any](data []E, lo, hi, first int, cmp func(a, b E) int) { - root := lo - for { - child := 2*root + 1 - if child >= hi { - break - } - if child+1 < hi && (cmp(data[first+child], data[first+child+1]) < 0) { - child++ - } - if !(cmp(data[first+root], data[first+child]) < 0) { - return - } - data[first+root], data[first+child] = data[first+child], data[first+root] - root = child - } -} - -func heapSortCmpFunc[E any](data []E, a, b int, cmp func(a, b E) int) { - first := a - lo := 0 - hi := b - a - - // Build heap with greatest element at top. - for i := (hi - 1) / 2; i >= 0; i-- { - siftDownCmpFunc(data, i, hi, first, cmp) - } - - // Pop elements, largest first, into end of data. - for i := hi - 1; i >= 0; i-- { - data[first], data[first+i] = data[first+i], data[first] - siftDownCmpFunc(data, lo, i, first, cmp) - } -} - -// pdqsortCmpFunc sorts data[a:b]. -// The algorithm based on pattern-defeating quicksort(pdqsort), but without the optimizations from BlockQuicksort. -// pdqsort paper: https://arxiv.org/pdf/2106.05123.pdf -// C++ implementation: https://github.com/orlp/pdqsort -// Rust implementation: https://docs.rs/pdqsort/latest/pdqsort/ -// limit is the number of allowed bad (very unbalanced) pivots before falling back to heapsort. -func pdqsortCmpFunc[E any](data []E, a, b, limit int, cmp func(a, b E) int) { - const maxInsertion = 12 - - var ( - wasBalanced = true // whether the last partitioning was reasonably balanced - wasPartitioned = true // whether the slice was already partitioned - ) - - for { - length := b - a - - if length <= maxInsertion { - insertionSortCmpFunc(data, a, b, cmp) - return - } - - // Fall back to heapsort if too many bad choices were made. - if limit == 0 { - heapSortCmpFunc(data, a, b, cmp) - return - } - - // If the last partitioning was imbalanced, we need to breaking patterns. - if !wasBalanced { - breakPatternsCmpFunc(data, a, b, cmp) - limit-- - } - - pivot, hint := choosePivotCmpFunc(data, a, b, cmp) - if hint == decreasingHint { - reverseRangeCmpFunc(data, a, b, cmp) - // The chosen pivot was pivot-a elements after the start of the array. - // After reversing it is pivot-a elements before the end of the array. - // The idea came from Rust's implementation. - pivot = (b - 1) - (pivot - a) - hint = increasingHint - } - - // The slice is likely already sorted. - if wasBalanced && wasPartitioned && hint == increasingHint { - if partialInsertionSortCmpFunc(data, a, b, cmp) { - return - } - } - - // Probably the slice contains many duplicate elements, partition the slice into - // elements equal to and elements greater than the pivot. - if a > 0 && !(cmp(data[a-1], data[pivot]) < 0) { - mid := partitionEqualCmpFunc(data, a, b, pivot, cmp) - a = mid - continue - } - - mid, alreadyPartitioned := partitionCmpFunc(data, a, b, pivot, cmp) - wasPartitioned = alreadyPartitioned - - leftLen, rightLen := mid-a, b-mid - balanceThreshold := length / 8 - if leftLen < rightLen { - wasBalanced = leftLen >= balanceThreshold - pdqsortCmpFunc(data, a, mid, limit, cmp) - a = mid + 1 - } else { - wasBalanced = rightLen >= balanceThreshold - pdqsortCmpFunc(data, mid+1, b, limit, cmp) - b = mid - } - } -} - -// partitionCmpFunc does one quicksort partition. -// Let p = data[pivot] -// Moves elements in data[a:b] around, so that data[i]

=p for inewpivot. -// On return, data[newpivot] = p -func partitionCmpFunc[E any](data []E, a, b, pivot int, cmp func(a, b E) int) (newpivot int, alreadyPartitioned bool) { - data[a], data[pivot] = data[pivot], data[a] - i, j := a+1, b-1 // i and j are inclusive of the elements remaining to be partitioned - - for i <= j && (cmp(data[i], data[a]) < 0) { - i++ - } - for i <= j && !(cmp(data[j], data[a]) < 0) { - j-- - } - if i > j { - data[j], data[a] = data[a], data[j] - return j, true - } - data[i], data[j] = data[j], data[i] - i++ - j-- - - for { - for i <= j && (cmp(data[i], data[a]) < 0) { - i++ - } - for i <= j && !(cmp(data[j], data[a]) < 0) { - j-- - } - if i > j { - break - } - data[i], data[j] = data[j], data[i] - i++ - j-- - } - data[j], data[a] = data[a], data[j] - return j, false -} - -// partitionEqualCmpFunc partitions data[a:b] into elements equal to data[pivot] followed by elements greater than data[pivot]. -// It assumed that data[a:b] does not contain elements smaller than the data[pivot]. -func partitionEqualCmpFunc[E any](data []E, a, b, pivot int, cmp func(a, b E) int) (newpivot int) { - data[a], data[pivot] = data[pivot], data[a] - i, j := a+1, b-1 // i and j are inclusive of the elements remaining to be partitioned - - for { - for i <= j && !(cmp(data[a], data[i]) < 0) { - i++ - } - for i <= j && (cmp(data[a], data[j]) < 0) { - j-- - } - if i > j { - break - } - data[i], data[j] = data[j], data[i] - i++ - j-- - } - return i -} - -// partialInsertionSortCmpFunc partially sorts a slice, returns true if the slice is sorted at the end. -func partialInsertionSortCmpFunc[E any](data []E, a, b int, cmp func(a, b E) int) bool { - const ( - maxSteps = 5 // maximum number of adjacent out-of-order pairs that will get shifted - shortestShifting = 50 // don't shift any elements on short arrays - ) - i := a + 1 - for j := 0; j < maxSteps; j++ { - for i < b && !(cmp(data[i], data[i-1]) < 0) { - i++ - } - - if i == b { - return true - } - - if b-a < shortestShifting { - return false - } - - data[i], data[i-1] = data[i-1], data[i] - - // Shift the smaller one to the left. - if i-a >= 2 { - for j := i - 1; j >= 1; j-- { - if !(cmp(data[j], data[j-1]) < 0) { - break - } - data[j], data[j-1] = data[j-1], data[j] - } - } - // Shift the greater one to the right. - if b-i >= 2 { - for j := i + 1; j < b; j++ { - if !(cmp(data[j], data[j-1]) < 0) { - break - } - data[j], data[j-1] = data[j-1], data[j] - } - } - } - return false -} - -// breakPatternsCmpFunc scatters some elements around in an attempt to break some patterns -// that might cause imbalanced partitions in quicksort. -func breakPatternsCmpFunc[E any](data []E, a, b int, cmp func(a, b E) int) { - length := b - a - if length >= 8 { - random := xorshift(length) - modulus := nextPowerOfTwo(length) - - for idx := a + (length/4)*2 - 1; idx <= a+(length/4)*2+1; idx++ { - other := int(uint(random.Next()) & (modulus - 1)) - if other >= length { - other -= length - } - data[idx], data[a+other] = data[a+other], data[idx] - } - } -} - -// choosePivotCmpFunc chooses a pivot in data[a:b]. -// -// [0,8): chooses a static pivot. -// [8,shortestNinther): uses the simple median-of-three method. -// [shortestNinther,∞): uses the Tukey ninther method. -func choosePivotCmpFunc[E any](data []E, a, b int, cmp func(a, b E) int) (pivot int, hint sortedHint) { - const ( - shortestNinther = 50 - maxSwaps = 4 * 3 - ) - - l := b - a - - var ( - swaps int - i = a + l/4*1 - j = a + l/4*2 - k = a + l/4*3 - ) - - if l >= 8 { - if l >= shortestNinther { - // Tukey ninther method, the idea came from Rust's implementation. - i = medianAdjacentCmpFunc(data, i, &swaps, cmp) - j = medianAdjacentCmpFunc(data, j, &swaps, cmp) - k = medianAdjacentCmpFunc(data, k, &swaps, cmp) - } - // Find the median among i, j, k and stores it into j. - j = medianCmpFunc(data, i, j, k, &swaps, cmp) - } - - switch swaps { - case 0: - return j, increasingHint - case maxSwaps: - return j, decreasingHint - default: - return j, unknownHint - } -} - -// order2CmpFunc returns x,y where data[x] <= data[y], where x,y=a,b or x,y=b,a. -func order2CmpFunc[E any](data []E, a, b int, swaps *int, cmp func(a, b E) int) (int, int) { - if cmp(data[b], data[a]) < 0 { - *swaps++ - return b, a - } - return a, b -} - -// medianCmpFunc returns x where data[x] is the median of data[a],data[b],data[c], where x is a, b, or c. -func medianCmpFunc[E any](data []E, a, b, c int, swaps *int, cmp func(a, b E) int) int { - a, b = order2CmpFunc(data, a, b, swaps, cmp) - b, c = order2CmpFunc(data, b, c, swaps, cmp) - a, b = order2CmpFunc(data, a, b, swaps, cmp) - return b -} - -// medianAdjacentCmpFunc finds the median of data[a - 1], data[a], data[a + 1] and stores the index into a. -func medianAdjacentCmpFunc[E any](data []E, a int, swaps *int, cmp func(a, b E) int) int { - return medianCmpFunc(data, a-1, a, a+1, swaps, cmp) -} - -func reverseRangeCmpFunc[E any](data []E, a, b int, cmp func(a, b E) int) { - i := a - j := b - 1 - for i < j { - data[i], data[j] = data[j], data[i] - i++ - j-- - } -} - -func swapRangeCmpFunc[E any](data []E, a, b, n int, cmp func(a, b E) int) { - for i := 0; i < n; i++ { - data[a+i], data[b+i] = data[b+i], data[a+i] - } -} - -func stableCmpFunc[E any](data []E, n int, cmp func(a, b E) int) { - blockSize := 20 // must be > 0 - a, b := 0, blockSize - for b <= n { - insertionSortCmpFunc(data, a, b, cmp) - a = b - b += blockSize - } - insertionSortCmpFunc(data, a, n, cmp) - - for blockSize < n { - a, b = 0, 2*blockSize - for b <= n { - symMergeCmpFunc(data, a, a+blockSize, b, cmp) - a = b - b += 2 * blockSize - } - if m := a + blockSize; m < n { - symMergeCmpFunc(data, a, m, n, cmp) - } - blockSize *= 2 - } -} - -// symMergeCmpFunc merges the two sorted subsequences data[a:m] and data[m:b] using -// the SymMerge algorithm from Pok-Son Kim and Arne Kutzner, "Stable Minimum -// Storage Merging by Symmetric Comparisons", in Susanne Albers and Tomasz -// Radzik, editors, Algorithms - ESA 2004, volume 3221 of Lecture Notes in -// Computer Science, pages 714-723. Springer, 2004. -// -// Let M = m-a and N = b-n. Wolog M < N. -// The recursion depth is bound by ceil(log(N+M)). -// The algorithm needs O(M*log(N/M + 1)) calls to data.Less. -// The algorithm needs O((M+N)*log(M)) calls to data.Swap. -// -// The paper gives O((M+N)*log(M)) as the number of assignments assuming a -// rotation algorithm which uses O(M+N+gcd(M+N)) assignments. The argumentation -// in the paper carries through for Swap operations, especially as the block -// swapping rotate uses only O(M+N) Swaps. -// -// symMerge assumes non-degenerate arguments: a < m && m < b. -// Having the caller check this condition eliminates many leaf recursion calls, -// which improves performance. -func symMergeCmpFunc[E any](data []E, a, m, b int, cmp func(a, b E) int) { - // Avoid unnecessary recursions of symMerge - // by direct insertion of data[a] into data[m:b] - // if data[a:m] only contains one element. - if m-a == 1 { - // Use binary search to find the lowest index i - // such that data[i] >= data[a] for m <= i < b. - // Exit the search loop with i == b in case no such index exists. - i := m - j := b - for i < j { - h := int(uint(i+j) >> 1) - if cmp(data[h], data[a]) < 0 { - i = h + 1 - } else { - j = h - } - } - // Swap values until data[a] reaches the position before i. - for k := a; k < i-1; k++ { - data[k], data[k+1] = data[k+1], data[k] - } - return - } - - // Avoid unnecessary recursions of symMerge - // by direct insertion of data[m] into data[a:m] - // if data[m:b] only contains one element. - if b-m == 1 { - // Use binary search to find the lowest index i - // such that data[i] > data[m] for a <= i < m. - // Exit the search loop with i == m in case no such index exists. - i := a - j := m - for i < j { - h := int(uint(i+j) >> 1) - if !(cmp(data[m], data[h]) < 0) { - i = h + 1 - } else { - j = h - } - } - // Swap values until data[m] reaches the position i. - for k := m; k > i; k-- { - data[k], data[k-1] = data[k-1], data[k] - } - return - } - - mid := int(uint(a+b) >> 1) - n := mid + m - var start, r int - if m > mid { - start = n - b - r = mid - } else { - start = a - r = m - } - p := n - 1 - - for start < r { - c := int(uint(start+r) >> 1) - if !(cmp(data[p-c], data[c]) < 0) { - start = c + 1 - } else { - r = c - } - } - - end := n - start - if start < m && m < end { - rotateCmpFunc(data, start, m, end, cmp) - } - if a < start && start < mid { - symMergeCmpFunc(data, a, start, mid, cmp) - } - if mid < end && end < b { - symMergeCmpFunc(data, mid, end, b, cmp) - } -} - -// rotateCmpFunc rotates two consecutive blocks u = data[a:m] and v = data[m:b] in data: -// Data of the form 'x u v y' is changed to 'x v u y'. -// rotate performs at most b-a many calls to data.Swap, -// and it assumes non-degenerate arguments: a < m && m < b. -func rotateCmpFunc[E any](data []E, a, m, b int, cmp func(a, b E) int) { - i := m - a - j := b - m - - for i != j { - if i > j { - swapRangeCmpFunc(data, m-i, m, j, cmp) - i -= j - } else { - swapRangeCmpFunc(data, m-i, m+j-i, i, cmp) - j -= i - } - } - // i == j - swapRangeCmpFunc(data, m-i, m, i, cmp) -} diff --git a/vendor/golang.org/x/exp/slices/zsortordered.go b/vendor/golang.org/x/exp/slices/zsortordered.go deleted file mode 100644 index 99b47c3986..0000000000 --- a/vendor/golang.org/x/exp/slices/zsortordered.go +++ /dev/null @@ -1,481 +0,0 @@ -// Code generated by gen_sort_variants.go; DO NOT EDIT. - -// Copyright 2022 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package slices - -import "golang.org/x/exp/constraints" - -// insertionSortOrdered sorts data[a:b] using insertion sort. -func insertionSortOrdered[E constraints.Ordered](data []E, a, b int) { - for i := a + 1; i < b; i++ { - for j := i; j > a && cmpLess(data[j], data[j-1]); j-- { - data[j], data[j-1] = data[j-1], data[j] - } - } -} - -// siftDownOrdered implements the heap property on data[lo:hi]. -// first is an offset into the array where the root of the heap lies. -func siftDownOrdered[E constraints.Ordered](data []E, lo, hi, first int) { - root := lo - for { - child := 2*root + 1 - if child >= hi { - break - } - if child+1 < hi && cmpLess(data[first+child], data[first+child+1]) { - child++ - } - if !cmpLess(data[first+root], data[first+child]) { - return - } - data[first+root], data[first+child] = data[first+child], data[first+root] - root = child - } -} - -func heapSortOrdered[E constraints.Ordered](data []E, a, b int) { - first := a - lo := 0 - hi := b - a - - // Build heap with greatest element at top. - for i := (hi - 1) / 2; i >= 0; i-- { - siftDownOrdered(data, i, hi, first) - } - - // Pop elements, largest first, into end of data. - for i := hi - 1; i >= 0; i-- { - data[first], data[first+i] = data[first+i], data[first] - siftDownOrdered(data, lo, i, first) - } -} - -// pdqsortOrdered sorts data[a:b]. -// The algorithm based on pattern-defeating quicksort(pdqsort), but without the optimizations from BlockQuicksort. -// pdqsort paper: https://arxiv.org/pdf/2106.05123.pdf -// C++ implementation: https://github.com/orlp/pdqsort -// Rust implementation: https://docs.rs/pdqsort/latest/pdqsort/ -// limit is the number of allowed bad (very unbalanced) pivots before falling back to heapsort. -func pdqsortOrdered[E constraints.Ordered](data []E, a, b, limit int) { - const maxInsertion = 12 - - var ( - wasBalanced = true // whether the last partitioning was reasonably balanced - wasPartitioned = true // whether the slice was already partitioned - ) - - for { - length := b - a - - if length <= maxInsertion { - insertionSortOrdered(data, a, b) - return - } - - // Fall back to heapsort if too many bad choices were made. - if limit == 0 { - heapSortOrdered(data, a, b) - return - } - - // If the last partitioning was imbalanced, we need to breaking patterns. - if !wasBalanced { - breakPatternsOrdered(data, a, b) - limit-- - } - - pivot, hint := choosePivotOrdered(data, a, b) - if hint == decreasingHint { - reverseRangeOrdered(data, a, b) - // The chosen pivot was pivot-a elements after the start of the array. - // After reversing it is pivot-a elements before the end of the array. - // The idea came from Rust's implementation. - pivot = (b - 1) - (pivot - a) - hint = increasingHint - } - - // The slice is likely already sorted. - if wasBalanced && wasPartitioned && hint == increasingHint { - if partialInsertionSortOrdered(data, a, b) { - return - } - } - - // Probably the slice contains many duplicate elements, partition the slice into - // elements equal to and elements greater than the pivot. - if a > 0 && !cmpLess(data[a-1], data[pivot]) { - mid := partitionEqualOrdered(data, a, b, pivot) - a = mid - continue - } - - mid, alreadyPartitioned := partitionOrdered(data, a, b, pivot) - wasPartitioned = alreadyPartitioned - - leftLen, rightLen := mid-a, b-mid - balanceThreshold := length / 8 - if leftLen < rightLen { - wasBalanced = leftLen >= balanceThreshold - pdqsortOrdered(data, a, mid, limit) - a = mid + 1 - } else { - wasBalanced = rightLen >= balanceThreshold - pdqsortOrdered(data, mid+1, b, limit) - b = mid - } - } -} - -// partitionOrdered does one quicksort partition. -// Let p = data[pivot] -// Moves elements in data[a:b] around, so that data[i]

=p for inewpivot. -// On return, data[newpivot] = p -func partitionOrdered[E constraints.Ordered](data []E, a, b, pivot int) (newpivot int, alreadyPartitioned bool) { - data[a], data[pivot] = data[pivot], data[a] - i, j := a+1, b-1 // i and j are inclusive of the elements remaining to be partitioned - - for i <= j && cmpLess(data[i], data[a]) { - i++ - } - for i <= j && !cmpLess(data[j], data[a]) { - j-- - } - if i > j { - data[j], data[a] = data[a], data[j] - return j, true - } - data[i], data[j] = data[j], data[i] - i++ - j-- - - for { - for i <= j && cmpLess(data[i], data[a]) { - i++ - } - for i <= j && !cmpLess(data[j], data[a]) { - j-- - } - if i > j { - break - } - data[i], data[j] = data[j], data[i] - i++ - j-- - } - data[j], data[a] = data[a], data[j] - return j, false -} - -// partitionEqualOrdered partitions data[a:b] into elements equal to data[pivot] followed by elements greater than data[pivot]. -// It assumed that data[a:b] does not contain elements smaller than the data[pivot]. -func partitionEqualOrdered[E constraints.Ordered](data []E, a, b, pivot int) (newpivot int) { - data[a], data[pivot] = data[pivot], data[a] - i, j := a+1, b-1 // i and j are inclusive of the elements remaining to be partitioned - - for { - for i <= j && !cmpLess(data[a], data[i]) { - i++ - } - for i <= j && cmpLess(data[a], data[j]) { - j-- - } - if i > j { - break - } - data[i], data[j] = data[j], data[i] - i++ - j-- - } - return i -} - -// partialInsertionSortOrdered partially sorts a slice, returns true if the slice is sorted at the end. -func partialInsertionSortOrdered[E constraints.Ordered](data []E, a, b int) bool { - const ( - maxSteps = 5 // maximum number of adjacent out-of-order pairs that will get shifted - shortestShifting = 50 // don't shift any elements on short arrays - ) - i := a + 1 - for j := 0; j < maxSteps; j++ { - for i < b && !cmpLess(data[i], data[i-1]) { - i++ - } - - if i == b { - return true - } - - if b-a < shortestShifting { - return false - } - - data[i], data[i-1] = data[i-1], data[i] - - // Shift the smaller one to the left. - if i-a >= 2 { - for j := i - 1; j >= 1; j-- { - if !cmpLess(data[j], data[j-1]) { - break - } - data[j], data[j-1] = data[j-1], data[j] - } - } - // Shift the greater one to the right. - if b-i >= 2 { - for j := i + 1; j < b; j++ { - if !cmpLess(data[j], data[j-1]) { - break - } - data[j], data[j-1] = data[j-1], data[j] - } - } - } - return false -} - -// breakPatternsOrdered scatters some elements around in an attempt to break some patterns -// that might cause imbalanced partitions in quicksort. -func breakPatternsOrdered[E constraints.Ordered](data []E, a, b int) { - length := b - a - if length >= 8 { - random := xorshift(length) - modulus := nextPowerOfTwo(length) - - for idx := a + (length/4)*2 - 1; idx <= a+(length/4)*2+1; idx++ { - other := int(uint(random.Next()) & (modulus - 1)) - if other >= length { - other -= length - } - data[idx], data[a+other] = data[a+other], data[idx] - } - } -} - -// choosePivotOrdered chooses a pivot in data[a:b]. -// -// [0,8): chooses a static pivot. -// [8,shortestNinther): uses the simple median-of-three method. -// [shortestNinther,∞): uses the Tukey ninther method. -func choosePivotOrdered[E constraints.Ordered](data []E, a, b int) (pivot int, hint sortedHint) { - const ( - shortestNinther = 50 - maxSwaps = 4 * 3 - ) - - l := b - a - - var ( - swaps int - i = a + l/4*1 - j = a + l/4*2 - k = a + l/4*3 - ) - - if l >= 8 { - if l >= shortestNinther { - // Tukey ninther method, the idea came from Rust's implementation. - i = medianAdjacentOrdered(data, i, &swaps) - j = medianAdjacentOrdered(data, j, &swaps) - k = medianAdjacentOrdered(data, k, &swaps) - } - // Find the median among i, j, k and stores it into j. - j = medianOrdered(data, i, j, k, &swaps) - } - - switch swaps { - case 0: - return j, increasingHint - case maxSwaps: - return j, decreasingHint - default: - return j, unknownHint - } -} - -// order2Ordered returns x,y where data[x] <= data[y], where x,y=a,b or x,y=b,a. -func order2Ordered[E constraints.Ordered](data []E, a, b int, swaps *int) (int, int) { - if cmpLess(data[b], data[a]) { - *swaps++ - return b, a - } - return a, b -} - -// medianOrdered returns x where data[x] is the median of data[a],data[b],data[c], where x is a, b, or c. -func medianOrdered[E constraints.Ordered](data []E, a, b, c int, swaps *int) int { - a, b = order2Ordered(data, a, b, swaps) - b, c = order2Ordered(data, b, c, swaps) - a, b = order2Ordered(data, a, b, swaps) - return b -} - -// medianAdjacentOrdered finds the median of data[a - 1], data[a], data[a + 1] and stores the index into a. -func medianAdjacentOrdered[E constraints.Ordered](data []E, a int, swaps *int) int { - return medianOrdered(data, a-1, a, a+1, swaps) -} - -func reverseRangeOrdered[E constraints.Ordered](data []E, a, b int) { - i := a - j := b - 1 - for i < j { - data[i], data[j] = data[j], data[i] - i++ - j-- - } -} - -func swapRangeOrdered[E constraints.Ordered](data []E, a, b, n int) { - for i := 0; i < n; i++ { - data[a+i], data[b+i] = data[b+i], data[a+i] - } -} - -func stableOrdered[E constraints.Ordered](data []E, n int) { - blockSize := 20 // must be > 0 - a, b := 0, blockSize - for b <= n { - insertionSortOrdered(data, a, b) - a = b - b += blockSize - } - insertionSortOrdered(data, a, n) - - for blockSize < n { - a, b = 0, 2*blockSize - for b <= n { - symMergeOrdered(data, a, a+blockSize, b) - a = b - b += 2 * blockSize - } - if m := a + blockSize; m < n { - symMergeOrdered(data, a, m, n) - } - blockSize *= 2 - } -} - -// symMergeOrdered merges the two sorted subsequences data[a:m] and data[m:b] using -// the SymMerge algorithm from Pok-Son Kim and Arne Kutzner, "Stable Minimum -// Storage Merging by Symmetric Comparisons", in Susanne Albers and Tomasz -// Radzik, editors, Algorithms - ESA 2004, volume 3221 of Lecture Notes in -// Computer Science, pages 714-723. Springer, 2004. -// -// Let M = m-a and N = b-n. Wolog M < N. -// The recursion depth is bound by ceil(log(N+M)). -// The algorithm needs O(M*log(N/M + 1)) calls to data.Less. -// The algorithm needs O((M+N)*log(M)) calls to data.Swap. -// -// The paper gives O((M+N)*log(M)) as the number of assignments assuming a -// rotation algorithm which uses O(M+N+gcd(M+N)) assignments. The argumentation -// in the paper carries through for Swap operations, especially as the block -// swapping rotate uses only O(M+N) Swaps. -// -// symMerge assumes non-degenerate arguments: a < m && m < b. -// Having the caller check this condition eliminates many leaf recursion calls, -// which improves performance. -func symMergeOrdered[E constraints.Ordered](data []E, a, m, b int) { - // Avoid unnecessary recursions of symMerge - // by direct insertion of data[a] into data[m:b] - // if data[a:m] only contains one element. - if m-a == 1 { - // Use binary search to find the lowest index i - // such that data[i] >= data[a] for m <= i < b. - // Exit the search loop with i == b in case no such index exists. - i := m - j := b - for i < j { - h := int(uint(i+j) >> 1) - if cmpLess(data[h], data[a]) { - i = h + 1 - } else { - j = h - } - } - // Swap values until data[a] reaches the position before i. - for k := a; k < i-1; k++ { - data[k], data[k+1] = data[k+1], data[k] - } - return - } - - // Avoid unnecessary recursions of symMerge - // by direct insertion of data[m] into data[a:m] - // if data[m:b] only contains one element. - if b-m == 1 { - // Use binary search to find the lowest index i - // such that data[i] > data[m] for a <= i < m. - // Exit the search loop with i == m in case no such index exists. - i := a - j := m - for i < j { - h := int(uint(i+j) >> 1) - if !cmpLess(data[m], data[h]) { - i = h + 1 - } else { - j = h - } - } - // Swap values until data[m] reaches the position i. - for k := m; k > i; k-- { - data[k], data[k-1] = data[k-1], data[k] - } - return - } - - mid := int(uint(a+b) >> 1) - n := mid + m - var start, r int - if m > mid { - start = n - b - r = mid - } else { - start = a - r = m - } - p := n - 1 - - for start < r { - c := int(uint(start+r) >> 1) - if !cmpLess(data[p-c], data[c]) { - start = c + 1 - } else { - r = c - } - } - - end := n - start - if start < m && m < end { - rotateOrdered(data, start, m, end) - } - if a < start && start < mid { - symMergeOrdered(data, a, start, mid) - } - if mid < end && end < b { - symMergeOrdered(data, mid, end, b) - } -} - -// rotateOrdered rotates two consecutive blocks u = data[a:m] and v = data[m:b] in data: -// Data of the form 'x u v y' is changed to 'x v u y'. -// rotate performs at most b-a many calls to data.Swap, -// and it assumes non-degenerate arguments: a < m && m < b. -func rotateOrdered[E constraints.Ordered](data []E, a, m, b int) { - i := m - a - j := b - m - - for i != j { - if i > j { - swapRangeOrdered(data, m-i, m, j) - i -= j - } else { - swapRangeOrdered(data, m-i, m+j-i, i) - j -= i - } - } - // i == j - swapRangeOrdered(data, m-i, m, i) -} diff --git a/vendor/golang.org/x/net/LICENSE b/vendor/golang.org/x/net/LICENSE index 6a66aea5ea..2a7cf70da6 100644 --- a/vendor/golang.org/x/net/LICENSE +++ b/vendor/golang.org/x/net/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2009 The Go Authors. All rights reserved. +Copyright 2009 The Go Authors. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are @@ -10,7 +10,7 @@ notice, this list of conditions and the following disclaimer. copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - * Neither the name of Google Inc. nor the names of its + * Neither the name of Google LLC nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. diff --git a/vendor/golang.org/x/net/html/atom/table.go b/vendor/golang.org/x/net/html/atom/table.go index 2a938864cb..b460e6f722 100644 --- a/vendor/golang.org/x/net/html/atom/table.go +++ b/vendor/golang.org/x/net/html/atom/table.go @@ -11,23 +11,23 @@ const ( AcceptCharset Atom = 0x1a0e Accesskey Atom = 0x2c09 Acronym Atom = 0xaa07 - Action Atom = 0x27206 - Address Atom = 0x6f307 + Action Atom = 0x26506 + Address Atom = 0x6f107 Align Atom = 0xb105 - Allowfullscreen Atom = 0x2080f + Allowfullscreen Atom = 0x3280f Allowpaymentrequest Atom = 0xc113 Allowusermedia Atom = 0xdd0e Alt Atom = 0xf303 Annotation Atom = 0x1c90a AnnotationXml Atom = 0x1c90e - Applet Atom = 0x31906 - Area Atom = 0x35604 - Article Atom = 0x3fc07 + Applet Atom = 0x30806 + Area Atom = 0x35004 + Article Atom = 0x3f607 As Atom = 0x3c02 Aside Atom = 0x10705 Async Atom = 0xff05 Audio Atom = 0x11505 - Autocomplete Atom = 0x2780c + Autocomplete Atom = 0x26b0c Autofocus Atom = 0x12109 Autoplay Atom = 0x13c08 B Atom = 0x101 @@ -43,34 +43,34 @@ const ( Br Atom = 0x202 Button Atom = 0x19106 Canvas Atom = 0x10306 - Caption Atom = 0x23107 - Center Atom = 0x22006 - Challenge Atom = 0x29b09 + Caption Atom = 0x22407 + Center Atom = 0x21306 + Challenge Atom = 0x28e09 Charset Atom = 0x2107 - Checked Atom = 0x47907 + Checked Atom = 0x5b507 Cite Atom = 0x19c04 - Class Atom = 0x56405 - Code Atom = 0x5c504 + Class Atom = 0x55805 + Code Atom = 0x5ee04 Col Atom = 0x1ab03 Colgroup Atom = 0x1ab08 Color Atom = 0x1bf05 Cols Atom = 0x1c404 Colspan Atom = 0x1c407 Command Atom = 0x1d707 - Content Atom = 0x58b07 - Contenteditable Atom = 0x58b0f - Contextmenu Atom = 0x3800b + Content Atom = 0x57b07 + Contenteditable Atom = 0x57b0f + Contextmenu Atom = 0x37a0b Controls Atom = 0x1de08 - Coords Atom = 0x1ea06 - Crossorigin Atom = 0x1fb0b - Data Atom = 0x4a504 - Datalist Atom = 0x4a508 - Datetime Atom = 0x2b808 - Dd Atom = 0x2d702 + Coords Atom = 0x1f006 + Crossorigin Atom = 0x1fa0b + Data Atom = 0x49904 + Datalist Atom = 0x49908 + Datetime Atom = 0x2ab08 + Dd Atom = 0x2bf02 Default Atom = 0x10a07 - Defer Atom = 0x5c705 - Del Atom = 0x45203 - Desc Atom = 0x56104 + Defer Atom = 0x5f005 + Del Atom = 0x44c03 + Desc Atom = 0x55504 Details Atom = 0x7207 Dfn Atom = 0x8703 Dialog Atom = 0xbb06 @@ -78,106 +78,106 @@ const ( Dirname Atom = 0x9307 Disabled Atom = 0x16408 Div Atom = 0x16b03 - Dl Atom = 0x5e602 - Download Atom = 0x46308 + Dl Atom = 0x5d602 + Download Atom = 0x45d08 Draggable Atom = 0x17a09 - Dropzone Atom = 0x40508 - Dt Atom = 0x64b02 + Dropzone Atom = 0x3ff08 + Dt Atom = 0x64002 Em Atom = 0x6e02 Embed Atom = 0x6e05 - Enctype Atom = 0x28d07 - Face Atom = 0x21e04 - Fieldset Atom = 0x22608 - Figcaption Atom = 0x22e0a - Figure Atom = 0x24806 + Enctype Atom = 0x28007 + Face Atom = 0x21104 + Fieldset Atom = 0x21908 + Figcaption Atom = 0x2210a + Figure Atom = 0x23b06 Font Atom = 0x3f04 Footer Atom = 0xf606 - For Atom = 0x25403 - ForeignObject Atom = 0x2540d - Foreignobject Atom = 0x2610d - Form Atom = 0x26e04 - Formaction Atom = 0x26e0a - Formenctype Atom = 0x2890b - Formmethod Atom = 0x2a40a - Formnovalidate Atom = 0x2ae0e - Formtarget Atom = 0x2c00a + For Atom = 0x24703 + ForeignObject Atom = 0x2470d + Foreignobject Atom = 0x2540d + Form Atom = 0x26104 + Formaction Atom = 0x2610a + Formenctype Atom = 0x27c0b + Formmethod Atom = 0x2970a + Formnovalidate Atom = 0x2a10e + Formtarget Atom = 0x2b30a Frame Atom = 0x8b05 Frameset Atom = 0x8b08 H1 Atom = 0x15c02 - H2 Atom = 0x2de02 - H3 Atom = 0x30d02 - H4 Atom = 0x34502 - H5 Atom = 0x34f02 - H6 Atom = 0x64d02 - Head Atom = 0x33104 - Header Atom = 0x33106 - Headers Atom = 0x33107 + H2 Atom = 0x56102 + H3 Atom = 0x2cd02 + H4 Atom = 0x2fc02 + H5 Atom = 0x33f02 + H6 Atom = 0x34902 + Head Atom = 0x32004 + Header Atom = 0x32006 + Headers Atom = 0x32007 Height Atom = 0x5206 - Hgroup Atom = 0x2ca06 - Hidden Atom = 0x2d506 - High Atom = 0x2db04 + Hgroup Atom = 0x64206 + Hidden Atom = 0x2bd06 + High Atom = 0x2ca04 Hr Atom = 0x15702 - Href Atom = 0x2e004 - Hreflang Atom = 0x2e008 + Href Atom = 0x2cf04 + Hreflang Atom = 0x2cf08 Html Atom = 0x5604 - HttpEquiv Atom = 0x2e80a + HttpEquiv Atom = 0x2d70a I Atom = 0x601 - Icon Atom = 0x58a04 + Icon Atom = 0x57a04 Id Atom = 0x10902 - Iframe Atom = 0x2fc06 - Image Atom = 0x30205 - Img Atom = 0x30703 - Input Atom = 0x44b05 - Inputmode Atom = 0x44b09 - Ins Atom = 0x20403 - Integrity Atom = 0x23f09 + Iframe Atom = 0x2eb06 + Image Atom = 0x2f105 + Img Atom = 0x2f603 + Input Atom = 0x44505 + Inputmode Atom = 0x44509 + Ins Atom = 0x20303 + Integrity Atom = 0x23209 Is Atom = 0x16502 - Isindex Atom = 0x30f07 - Ismap Atom = 0x31605 - Itemid Atom = 0x38b06 + Isindex Atom = 0x2fe07 + Ismap Atom = 0x30505 + Itemid Atom = 0x38506 Itemprop Atom = 0x19d08 - Itemref Atom = 0x3cd07 - Itemscope Atom = 0x67109 - Itemtype Atom = 0x31f08 + Itemref Atom = 0x3c707 + Itemscope Atom = 0x66f09 + Itemtype Atom = 0x30e08 Kbd Atom = 0xb903 Keygen Atom = 0x3206 Keytype Atom = 0xd607 Kind Atom = 0x17704 Label Atom = 0x5905 - Lang Atom = 0x2e404 + Lang Atom = 0x2d304 Legend Atom = 0x18106 Li Atom = 0xb202 Link Atom = 0x17404 - List Atom = 0x4a904 - Listing Atom = 0x4a907 + List Atom = 0x49d04 + Listing Atom = 0x49d07 Loop Atom = 0x5d04 Low Atom = 0xc303 Main Atom = 0x1004 Malignmark Atom = 0xb00a - Manifest Atom = 0x6d708 - Map Atom = 0x31803 + Manifest Atom = 0x6d508 + Map Atom = 0x30703 Mark Atom = 0xb604 - Marquee Atom = 0x32707 - Math Atom = 0x32e04 - Max Atom = 0x33d03 - Maxlength Atom = 0x33d09 + Marquee Atom = 0x31607 + Math Atom = 0x31d04 + Max Atom = 0x33703 + Maxlength Atom = 0x33709 Media Atom = 0xe605 Mediagroup Atom = 0xe60a - Menu Atom = 0x38704 - Menuitem Atom = 0x38708 - Meta Atom = 0x4b804 + Menu Atom = 0x38104 + Menuitem Atom = 0x38108 + Meta Atom = 0x4ac04 Meter Atom = 0x9805 - Method Atom = 0x2a806 - Mglyph Atom = 0x30806 - Mi Atom = 0x34702 - Min Atom = 0x34703 - Minlength Atom = 0x34709 - Mn Atom = 0x2b102 + Method Atom = 0x29b06 + Mglyph Atom = 0x2f706 + Mi Atom = 0x34102 + Min Atom = 0x34103 + Minlength Atom = 0x34109 + Mn Atom = 0x2a402 Mo Atom = 0xa402 - Ms Atom = 0x67402 - Mtext Atom = 0x35105 - Multiple Atom = 0x35f08 - Muted Atom = 0x36705 + Ms Atom = 0x67202 + Mtext Atom = 0x34b05 + Multiple Atom = 0x35908 + Muted Atom = 0x36105 Name Atom = 0x9604 Nav Atom = 0x1303 Nobr Atom = 0x3704 @@ -185,101 +185,101 @@ const ( Noframes Atom = 0x8908 Nomodule Atom = 0xa208 Nonce Atom = 0x1a605 - Noscript Atom = 0x21608 - Novalidate Atom = 0x2b20a - Object Atom = 0x26806 + Noscript Atom = 0x2c208 + Novalidate Atom = 0x2a50a + Object Atom = 0x25b06 Ol Atom = 0x13702 Onabort Atom = 0x19507 - Onafterprint Atom = 0x2360c - Onautocomplete Atom = 0x2760e - Onautocompleteerror Atom = 0x27613 - Onauxclick Atom = 0x61f0a - Onbeforeprint Atom = 0x69e0d - Onbeforeunload Atom = 0x6e70e - Onblur Atom = 0x56d06 + Onafterprint Atom = 0x2290c + Onautocomplete Atom = 0x2690e + Onautocompleteerror Atom = 0x26913 + Onauxclick Atom = 0x6140a + Onbeforeprint Atom = 0x69c0d + Onbeforeunload Atom = 0x6e50e + Onblur Atom = 0x1ea06 Oncancel Atom = 0x11908 Oncanplay Atom = 0x14d09 Oncanplaythrough Atom = 0x14d10 - Onchange Atom = 0x41b08 - Onclick Atom = 0x2f507 - Onclose Atom = 0x36c07 - Oncontextmenu Atom = 0x37e0d - Oncopy Atom = 0x39106 - Oncuechange Atom = 0x3970b - Oncut Atom = 0x3a205 - Ondblclick Atom = 0x3a70a - Ondrag Atom = 0x3b106 - Ondragend Atom = 0x3b109 - Ondragenter Atom = 0x3ba0b - Ondragexit Atom = 0x3c50a - Ondragleave Atom = 0x3df0b - Ondragover Atom = 0x3ea0a - Ondragstart Atom = 0x3f40b - Ondrop Atom = 0x40306 - Ondurationchange Atom = 0x41310 - Onemptied Atom = 0x40a09 - Onended Atom = 0x42307 - Onerror Atom = 0x42a07 - Onfocus Atom = 0x43107 - Onhashchange Atom = 0x43d0c - Oninput Atom = 0x44907 - Oninvalid Atom = 0x45509 - Onkeydown Atom = 0x45e09 - Onkeypress Atom = 0x46b0a - Onkeyup Atom = 0x48007 - Onlanguagechange Atom = 0x48d10 - Onload Atom = 0x49d06 - Onloadeddata Atom = 0x49d0c - Onloadedmetadata Atom = 0x4b010 - Onloadend Atom = 0x4c609 - Onloadstart Atom = 0x4cf0b - Onmessage Atom = 0x4da09 - Onmessageerror Atom = 0x4da0e - Onmousedown Atom = 0x4e80b - Onmouseenter Atom = 0x4f30c - Onmouseleave Atom = 0x4ff0c - Onmousemove Atom = 0x50b0b - Onmouseout Atom = 0x5160a - Onmouseover Atom = 0x5230b - Onmouseup Atom = 0x52e09 - Onmousewheel Atom = 0x53c0c - Onoffline Atom = 0x54809 - Ononline Atom = 0x55108 - Onpagehide Atom = 0x5590a - Onpageshow Atom = 0x5730a - Onpaste Atom = 0x57f07 - Onpause Atom = 0x59a07 - Onplay Atom = 0x5a406 - Onplaying Atom = 0x5a409 - Onpopstate Atom = 0x5ad0a - Onprogress Atom = 0x5b70a - Onratechange Atom = 0x5cc0c - Onrejectionhandled Atom = 0x5d812 - Onreset Atom = 0x5ea07 - Onresize Atom = 0x5f108 - Onscroll Atom = 0x60008 - Onsecuritypolicyviolation Atom = 0x60819 - Onseeked Atom = 0x62908 - Onseeking Atom = 0x63109 - Onselect Atom = 0x63a08 - Onshow Atom = 0x64406 - Onsort Atom = 0x64f06 - Onstalled Atom = 0x65909 - Onstorage Atom = 0x66209 - Onsubmit Atom = 0x66b08 - Onsuspend Atom = 0x67b09 + Onchange Atom = 0x41508 + Onclick Atom = 0x2e407 + Onclose Atom = 0x36607 + Oncontextmenu Atom = 0x3780d + Oncopy Atom = 0x38b06 + Oncuechange Atom = 0x3910b + Oncut Atom = 0x39c05 + Ondblclick Atom = 0x3a10a + Ondrag Atom = 0x3ab06 + Ondragend Atom = 0x3ab09 + Ondragenter Atom = 0x3b40b + Ondragexit Atom = 0x3bf0a + Ondragleave Atom = 0x3d90b + Ondragover Atom = 0x3e40a + Ondragstart Atom = 0x3ee0b + Ondrop Atom = 0x3fd06 + Ondurationchange Atom = 0x40d10 + Onemptied Atom = 0x40409 + Onended Atom = 0x41d07 + Onerror Atom = 0x42407 + Onfocus Atom = 0x42b07 + Onhashchange Atom = 0x4370c + Oninput Atom = 0x44307 + Oninvalid Atom = 0x44f09 + Onkeydown Atom = 0x45809 + Onkeypress Atom = 0x4650a + Onkeyup Atom = 0x47407 + Onlanguagechange Atom = 0x48110 + Onload Atom = 0x49106 + Onloadeddata Atom = 0x4910c + Onloadedmetadata Atom = 0x4a410 + Onloadend Atom = 0x4ba09 + Onloadstart Atom = 0x4c30b + Onmessage Atom = 0x4ce09 + Onmessageerror Atom = 0x4ce0e + Onmousedown Atom = 0x4dc0b + Onmouseenter Atom = 0x4e70c + Onmouseleave Atom = 0x4f30c + Onmousemove Atom = 0x4ff0b + Onmouseout Atom = 0x50a0a + Onmouseover Atom = 0x5170b + Onmouseup Atom = 0x52209 + Onmousewheel Atom = 0x5300c + Onoffline Atom = 0x53c09 + Ononline Atom = 0x54508 + Onpagehide Atom = 0x54d0a + Onpageshow Atom = 0x5630a + Onpaste Atom = 0x56f07 + Onpause Atom = 0x58a07 + Onplay Atom = 0x59406 + Onplaying Atom = 0x59409 + Onpopstate Atom = 0x59d0a + Onprogress Atom = 0x5a70a + Onratechange Atom = 0x5bc0c + Onrejectionhandled Atom = 0x5c812 + Onreset Atom = 0x5da07 + Onresize Atom = 0x5e108 + Onscroll Atom = 0x5f508 + Onsecuritypolicyviolation Atom = 0x5fd19 + Onseeked Atom = 0x61e08 + Onseeking Atom = 0x62609 + Onselect Atom = 0x62f08 + Onshow Atom = 0x63906 + Onsort Atom = 0x64d06 + Onstalled Atom = 0x65709 + Onstorage Atom = 0x66009 + Onsubmit Atom = 0x66908 + Onsuspend Atom = 0x67909 Ontimeupdate Atom = 0x400c - Ontoggle Atom = 0x68408 - Onunhandledrejection Atom = 0x68c14 - Onunload Atom = 0x6ab08 - Onvolumechange Atom = 0x6b30e - Onwaiting Atom = 0x6c109 - Onwheel Atom = 0x6ca07 + Ontoggle Atom = 0x68208 + Onunhandledrejection Atom = 0x68a14 + Onunload Atom = 0x6a908 + Onvolumechange Atom = 0x6b10e + Onwaiting Atom = 0x6bf09 + Onwheel Atom = 0x6c807 Open Atom = 0x1a304 Optgroup Atom = 0x5f08 - Optimum Atom = 0x6d107 - Option Atom = 0x6e306 - Output Atom = 0x51d06 + Optimum Atom = 0x6cf07 + Option Atom = 0x6e106 + Output Atom = 0x51106 P Atom = 0xc01 Param Atom = 0xc05 Pattern Atom = 0x6607 @@ -288,466 +288,468 @@ const ( Placeholder Atom = 0x1310b Plaintext Atom = 0x1b209 Playsinline Atom = 0x1400b - Poster Atom = 0x2cf06 - Pre Atom = 0x47003 - Preload Atom = 0x48607 - Progress Atom = 0x5b908 - Prompt Atom = 0x53606 - Public Atom = 0x58606 + Poster Atom = 0x64706 + Pre Atom = 0x46a03 + Preload Atom = 0x47a07 + Progress Atom = 0x5a908 + Prompt Atom = 0x52a06 + Public Atom = 0x57606 Q Atom = 0xcf01 Radiogroup Atom = 0x30a Rb Atom = 0x3a02 - Readonly Atom = 0x35708 - Referrerpolicy Atom = 0x3d10e - Rel Atom = 0x48703 - Required Atom = 0x24c08 + Readonly Atom = 0x35108 + Referrerpolicy Atom = 0x3cb0e + Rel Atom = 0x47b03 + Required Atom = 0x23f08 Reversed Atom = 0x8008 Rows Atom = 0x9c04 Rowspan Atom = 0x9c07 - Rp Atom = 0x23c02 + Rp Atom = 0x22f02 Rt Atom = 0x19a02 Rtc Atom = 0x19a03 Ruby Atom = 0xfb04 S Atom = 0x2501 Samp Atom = 0x7804 Sandbox Atom = 0x12907 - Scope Atom = 0x67505 - Scoped Atom = 0x67506 - Script Atom = 0x21806 - Seamless Atom = 0x37108 - Section Atom = 0x56807 - Select Atom = 0x63c06 - Selected Atom = 0x63c08 - Shape Atom = 0x1e505 - Size Atom = 0x5f504 - Sizes Atom = 0x5f505 - Slot Atom = 0x1ef04 - Small Atom = 0x20605 - Sortable Atom = 0x65108 - Sorted Atom = 0x33706 - Source Atom = 0x37806 - Spacer Atom = 0x43706 + Scope Atom = 0x67305 + Scoped Atom = 0x67306 + Script Atom = 0x2c406 + Seamless Atom = 0x36b08 + Search Atom = 0x55c06 + Section Atom = 0x1e507 + Select Atom = 0x63106 + Selected Atom = 0x63108 + Shape Atom = 0x1f505 + Size Atom = 0x5e504 + Sizes Atom = 0x5e505 + Slot Atom = 0x20504 + Small Atom = 0x32605 + Sortable Atom = 0x64f08 + Sorted Atom = 0x37206 + Source Atom = 0x43106 + Spacer Atom = 0x46e06 Span Atom = 0x9f04 - Spellcheck Atom = 0x4740a - Src Atom = 0x5c003 - Srcdoc Atom = 0x5c006 - Srclang Atom = 0x5f907 - Srcset Atom = 0x6f906 - Start Atom = 0x3fa05 - Step Atom = 0x58304 + Spellcheck Atom = 0x5b00a + Src Atom = 0x5e903 + Srcdoc Atom = 0x5e906 + Srclang Atom = 0x6f707 + Srcset Atom = 0x6fe06 + Start Atom = 0x3f405 + Step Atom = 0x57304 Strike Atom = 0xd206 - Strong Atom = 0x6dd06 - Style Atom = 0x6ff05 - Sub Atom = 0x66d03 - Summary Atom = 0x70407 - Sup Atom = 0x70b03 - Svg Atom = 0x70e03 - System Atom = 0x71106 - Tabindex Atom = 0x4be08 - Table Atom = 0x59505 - Target Atom = 0x2c406 + Strong Atom = 0x6db06 + Style Atom = 0x70405 + Sub Atom = 0x66b03 + Summary Atom = 0x70907 + Sup Atom = 0x71003 + Svg Atom = 0x71303 + System Atom = 0x71606 + Tabindex Atom = 0x4b208 + Table Atom = 0x58505 + Target Atom = 0x2b706 Tbody Atom = 0x2705 Td Atom = 0x9202 - Template Atom = 0x71408 - Textarea Atom = 0x35208 + Template Atom = 0x71908 + Textarea Atom = 0x34c08 Tfoot Atom = 0xf505 Th Atom = 0x15602 - Thead Atom = 0x33005 + Thead Atom = 0x31f05 Time Atom = 0x4204 Title Atom = 0x11005 Tr Atom = 0xcc02 Track Atom = 0x1ba05 - Translate Atom = 0x1f209 + Translate Atom = 0x20809 Tt Atom = 0x6802 Type Atom = 0xd904 - Typemustmatch Atom = 0x2900d + Typemustmatch Atom = 0x2830d U Atom = 0xb01 Ul Atom = 0xa702 Updateviacache Atom = 0x460e - Usemap Atom = 0x59e06 + Usemap Atom = 0x58e06 Value Atom = 0x1505 Var Atom = 0x16d03 - Video Atom = 0x2f105 - Wbr Atom = 0x57c03 - Width Atom = 0x64905 - Workertype Atom = 0x71c0a - Wrap Atom = 0x72604 + Video Atom = 0x2e005 + Wbr Atom = 0x56c03 + Width Atom = 0x63e05 + Workertype Atom = 0x7210a + Wrap Atom = 0x72b04 Xmp Atom = 0x12f03 ) -const hash0 = 0x81cdf10e +const hash0 = 0x84f70e16 const maxAtomLen = 25 var table = [1 << 9]Atom{ - 0x1: 0xe60a, // mediagroup - 0x2: 0x2e404, // lang - 0x4: 0x2c09, // accesskey - 0x5: 0x8b08, // frameset - 0x7: 0x63a08, // onselect - 0x8: 0x71106, // system - 0xa: 0x64905, // width - 0xc: 0x2890b, // formenctype - 0xd: 0x13702, // ol - 0xe: 0x3970b, // oncuechange - 0x10: 0x14b03, // bdo - 0x11: 0x11505, // audio - 0x12: 0x17a09, // draggable - 0x14: 0x2f105, // video - 0x15: 0x2b102, // mn - 0x16: 0x38704, // menu - 0x17: 0x2cf06, // poster - 0x19: 0xf606, // footer - 0x1a: 0x2a806, // method - 0x1b: 0x2b808, // datetime - 0x1c: 0x19507, // onabort - 0x1d: 0x460e, // updateviacache - 0x1e: 0xff05, // async - 0x1f: 0x49d06, // onload - 0x21: 0x11908, // oncancel - 0x22: 0x62908, // onseeked - 0x23: 0x30205, // image - 0x24: 0x5d812, // onrejectionhandled - 0x26: 0x17404, // link - 0x27: 0x51d06, // output - 0x28: 0x33104, // head - 0x29: 0x4ff0c, // onmouseleave - 0x2a: 0x57f07, // onpaste - 0x2b: 0x5a409, // onplaying - 0x2c: 0x1c407, // colspan - 0x2f: 0x1bf05, // color - 0x30: 0x5f504, // size - 0x31: 0x2e80a, // http-equiv - 0x33: 0x601, // i - 0x34: 0x5590a, // onpagehide - 0x35: 0x68c14, // onunhandledrejection - 0x37: 0x42a07, // onerror - 0x3a: 0x3b08, // basefont - 0x3f: 0x1303, // nav - 0x40: 0x17704, // kind - 0x41: 0x35708, // readonly - 0x42: 0x30806, // mglyph - 0x44: 0xb202, // li - 0x46: 0x2d506, // hidden - 0x47: 0x70e03, // svg - 0x48: 0x58304, // step - 0x49: 0x23f09, // integrity - 0x4a: 0x58606, // public - 0x4c: 0x1ab03, // col - 0x4d: 0x1870a, // blockquote - 0x4e: 0x34f02, // h5 - 0x50: 0x5b908, // progress - 0x51: 0x5f505, // sizes - 0x52: 0x34502, // h4 - 0x56: 0x33005, // thead - 0x57: 0xd607, // keytype - 0x58: 0x5b70a, // onprogress - 0x59: 0x44b09, // inputmode - 0x5a: 0x3b109, // ondragend - 0x5d: 0x3a205, // oncut - 0x5e: 0x43706, // spacer - 0x5f: 0x1ab08, // colgroup - 0x62: 0x16502, // is - 0x65: 0x3c02, // as - 0x66: 0x54809, // onoffline - 0x67: 0x33706, // sorted - 0x69: 0x48d10, // onlanguagechange - 0x6c: 0x43d0c, // onhashchange - 0x6d: 0x9604, // name - 0x6e: 0xf505, // tfoot - 0x6f: 0x56104, // desc - 0x70: 0x33d03, // max - 0x72: 0x1ea06, // coords - 0x73: 0x30d02, // h3 - 0x74: 0x6e70e, // onbeforeunload - 0x75: 0x9c04, // rows - 0x76: 0x63c06, // select - 0x77: 0x9805, // meter - 0x78: 0x38b06, // itemid - 0x79: 0x53c0c, // onmousewheel - 0x7a: 0x5c006, // srcdoc - 0x7d: 0x1ba05, // track - 0x7f: 0x31f08, // itemtype - 0x82: 0xa402, // mo - 0x83: 0x41b08, // onchange - 0x84: 0x33107, // headers - 0x85: 0x5cc0c, // onratechange - 0x86: 0x60819, // onsecuritypolicyviolation - 0x88: 0x4a508, // datalist - 0x89: 0x4e80b, // onmousedown - 0x8a: 0x1ef04, // slot - 0x8b: 0x4b010, // onloadedmetadata - 0x8c: 0x1a06, // accept - 0x8d: 0x26806, // object - 0x91: 0x6b30e, // onvolumechange - 0x92: 0x2107, // charset - 0x93: 0x27613, // onautocompleteerror - 0x94: 0xc113, // allowpaymentrequest - 0x95: 0x2804, // body - 0x96: 0x10a07, // default - 0x97: 0x63c08, // selected - 0x98: 0x21e04, // face - 0x99: 0x1e505, // shape - 0x9b: 0x68408, // ontoggle - 0x9e: 0x64b02, // dt - 0x9f: 0xb604, // mark - 0xa1: 0xb01, // u - 0xa4: 0x6ab08, // onunload - 0xa5: 0x5d04, // loop - 0xa6: 0x16408, // disabled - 0xaa: 0x42307, // onended - 0xab: 0xb00a, // malignmark - 0xad: 0x67b09, // onsuspend - 0xae: 0x35105, // mtext - 0xaf: 0x64f06, // onsort - 0xb0: 0x19d08, // itemprop - 0xb3: 0x67109, // itemscope - 0xb4: 0x17305, // blink - 0xb6: 0x3b106, // ondrag - 0xb7: 0xa702, // ul - 0xb8: 0x26e04, // form - 0xb9: 0x12907, // sandbox - 0xba: 0x8b05, // frame - 0xbb: 0x1505, // value - 0xbc: 0x66209, // onstorage - 0xbf: 0xaa07, // acronym - 0xc0: 0x19a02, // rt - 0xc2: 0x202, // br - 0xc3: 0x22608, // fieldset - 0xc4: 0x2900d, // typemustmatch - 0xc5: 0xa208, // nomodule - 0xc6: 0x6c07, // noembed - 0xc7: 0x69e0d, // onbeforeprint - 0xc8: 0x19106, // button - 0xc9: 0x2f507, // onclick - 0xca: 0x70407, // summary - 0xcd: 0xfb04, // ruby - 0xce: 0x56405, // class - 0xcf: 0x3f40b, // ondragstart - 0xd0: 0x23107, // caption - 0xd4: 0xdd0e, // allowusermedia - 0xd5: 0x4cf0b, // onloadstart - 0xd9: 0x16b03, // div - 0xda: 0x4a904, // list - 0xdb: 0x32e04, // math - 0xdc: 0x44b05, // input - 0xdf: 0x3ea0a, // ondragover - 0xe0: 0x2de02, // h2 - 0xe2: 0x1b209, // plaintext - 0xe4: 0x4f30c, // onmouseenter - 0xe7: 0x47907, // checked - 0xe8: 0x47003, // pre - 0xea: 0x35f08, // multiple - 0xeb: 0xba03, // bdi - 0xec: 0x33d09, // maxlength - 0xed: 0xcf01, // q - 0xee: 0x61f0a, // onauxclick - 0xf0: 0x57c03, // wbr - 0xf2: 0x3b04, // base - 0xf3: 0x6e306, // option - 0xf5: 0x41310, // ondurationchange - 0xf7: 0x8908, // noframes - 0xf9: 0x40508, // dropzone - 0xfb: 0x67505, // scope - 0xfc: 0x8008, // reversed - 0xfd: 0x3ba0b, // ondragenter - 0xfe: 0x3fa05, // start - 0xff: 0x12f03, // xmp - 0x100: 0x5f907, // srclang - 0x101: 0x30703, // img - 0x104: 0x101, // b - 0x105: 0x25403, // for - 0x106: 0x10705, // aside - 0x107: 0x44907, // oninput - 0x108: 0x35604, // area - 0x109: 0x2a40a, // formmethod - 0x10a: 0x72604, // wrap - 0x10c: 0x23c02, // rp - 0x10d: 0x46b0a, // onkeypress - 0x10e: 0x6802, // tt - 0x110: 0x34702, // mi - 0x111: 0x36705, // muted - 0x112: 0xf303, // alt - 0x113: 0x5c504, // code - 0x114: 0x6e02, // em - 0x115: 0x3c50a, // ondragexit - 0x117: 0x9f04, // span - 0x119: 0x6d708, // manifest - 0x11a: 0x38708, // menuitem - 0x11b: 0x58b07, // content - 0x11d: 0x6c109, // onwaiting - 0x11f: 0x4c609, // onloadend - 0x121: 0x37e0d, // oncontextmenu - 0x123: 0x56d06, // onblur - 0x124: 0x3fc07, // article - 0x125: 0x9303, // dir - 0x126: 0xef04, // ping - 0x127: 0x24c08, // required - 0x128: 0x45509, // oninvalid - 0x129: 0xb105, // align - 0x12b: 0x58a04, // icon - 0x12c: 0x64d02, // h6 - 0x12d: 0x1c404, // cols - 0x12e: 0x22e0a, // figcaption - 0x12f: 0x45e09, // onkeydown - 0x130: 0x66b08, // onsubmit - 0x131: 0x14d09, // oncanplay - 0x132: 0x70b03, // sup - 0x133: 0xc01, // p - 0x135: 0x40a09, // onemptied - 0x136: 0x39106, // oncopy - 0x137: 0x19c04, // cite - 0x138: 0x3a70a, // ondblclick - 0x13a: 0x50b0b, // onmousemove - 0x13c: 0x66d03, // sub - 0x13d: 0x48703, // rel - 0x13e: 0x5f08, // optgroup - 0x142: 0x9c07, // rowspan - 0x143: 0x37806, // source - 0x144: 0x21608, // noscript - 0x145: 0x1a304, // open - 0x146: 0x20403, // ins - 0x147: 0x2540d, // foreignObject - 0x148: 0x5ad0a, // onpopstate - 0x14a: 0x28d07, // enctype - 0x14b: 0x2760e, // onautocomplete - 0x14c: 0x35208, // textarea - 0x14e: 0x2780c, // autocomplete - 0x14f: 0x15702, // hr - 0x150: 0x1de08, // controls - 0x151: 0x10902, // id - 0x153: 0x2360c, // onafterprint - 0x155: 0x2610d, // foreignobject - 0x156: 0x32707, // marquee - 0x157: 0x59a07, // onpause - 0x158: 0x5e602, // dl - 0x159: 0x5206, // height - 0x15a: 0x34703, // min - 0x15b: 0x9307, // dirname - 0x15c: 0x1f209, // translate - 0x15d: 0x5604, // html - 0x15e: 0x34709, // minlength - 0x15f: 0x48607, // preload - 0x160: 0x71408, // template - 0x161: 0x3df0b, // ondragleave - 0x162: 0x3a02, // rb - 0x164: 0x5c003, // src - 0x165: 0x6dd06, // strong - 0x167: 0x7804, // samp - 0x168: 0x6f307, // address - 0x169: 0x55108, // ononline - 0x16b: 0x1310b, // placeholder - 0x16c: 0x2c406, // target - 0x16d: 0x20605, // small - 0x16e: 0x6ca07, // onwheel - 0x16f: 0x1c90a, // annotation - 0x170: 0x4740a, // spellcheck - 0x171: 0x7207, // details - 0x172: 0x10306, // canvas - 0x173: 0x12109, // autofocus - 0x174: 0xc05, // param - 0x176: 0x46308, // download - 0x177: 0x45203, // del - 0x178: 0x36c07, // onclose - 0x179: 0xb903, // kbd - 0x17a: 0x31906, // applet - 0x17b: 0x2e004, // href - 0x17c: 0x5f108, // onresize - 0x17e: 0x49d0c, // onloadeddata - 0x180: 0xcc02, // tr - 0x181: 0x2c00a, // formtarget - 0x182: 0x11005, // title - 0x183: 0x6ff05, // style - 0x184: 0xd206, // strike - 0x185: 0x59e06, // usemap - 0x186: 0x2fc06, // iframe - 0x187: 0x1004, // main - 0x189: 0x7b07, // picture - 0x18c: 0x31605, // ismap - 0x18e: 0x4a504, // data - 0x18f: 0x5905, // label - 0x191: 0x3d10e, // referrerpolicy - 0x192: 0x15602, // th - 0x194: 0x53606, // prompt - 0x195: 0x56807, // section - 0x197: 0x6d107, // optimum - 0x198: 0x2db04, // high - 0x199: 0x15c02, // h1 - 0x19a: 0x65909, // onstalled - 0x19b: 0x16d03, // var - 0x19c: 0x4204, // time - 0x19e: 0x67402, // ms - 0x19f: 0x33106, // header - 0x1a0: 0x4da09, // onmessage - 0x1a1: 0x1a605, // nonce - 0x1a2: 0x26e0a, // formaction - 0x1a3: 0x22006, // center - 0x1a4: 0x3704, // nobr - 0x1a5: 0x59505, // table - 0x1a6: 0x4a907, // listing - 0x1a7: 0x18106, // legend - 0x1a9: 0x29b09, // challenge - 0x1aa: 0x24806, // figure - 0x1ab: 0xe605, // media - 0x1ae: 0xd904, // type - 0x1af: 0x3f04, // font - 0x1b0: 0x4da0e, // onmessageerror - 0x1b1: 0x37108, // seamless - 0x1b2: 0x8703, // dfn - 0x1b3: 0x5c705, // defer - 0x1b4: 0xc303, // low - 0x1b5: 0x19a03, // rtc - 0x1b6: 0x5230b, // onmouseover - 0x1b7: 0x2b20a, // novalidate - 0x1b8: 0x71c0a, // workertype - 0x1ba: 0x3cd07, // itemref - 0x1bd: 0x1, // a - 0x1be: 0x31803, // map - 0x1bf: 0x400c, // ontimeupdate - 0x1c0: 0x15e07, // bgsound - 0x1c1: 0x3206, // keygen - 0x1c2: 0x2705, // tbody - 0x1c5: 0x64406, // onshow - 0x1c7: 0x2501, // s - 0x1c8: 0x6607, // pattern - 0x1cc: 0x14d10, // oncanplaythrough - 0x1ce: 0x2d702, // dd - 0x1cf: 0x6f906, // srcset - 0x1d0: 0x17003, // big - 0x1d2: 0x65108, // sortable - 0x1d3: 0x48007, // onkeyup - 0x1d5: 0x5a406, // onplay - 0x1d7: 0x4b804, // meta - 0x1d8: 0x40306, // ondrop - 0x1da: 0x60008, // onscroll - 0x1db: 0x1fb0b, // crossorigin - 0x1dc: 0x5730a, // onpageshow - 0x1dd: 0x4, // abbr - 0x1de: 0x9202, // td - 0x1df: 0x58b0f, // contenteditable - 0x1e0: 0x27206, // action - 0x1e1: 0x1400b, // playsinline - 0x1e2: 0x43107, // onfocus - 0x1e3: 0x2e008, // hreflang - 0x1e5: 0x5160a, // onmouseout - 0x1e6: 0x5ea07, // onreset - 0x1e7: 0x13c08, // autoplay - 0x1e8: 0x63109, // onseeking - 0x1ea: 0x67506, // scoped - 0x1ec: 0x30a, // radiogroup - 0x1ee: 0x3800b, // contextmenu - 0x1ef: 0x52e09, // onmouseup - 0x1f1: 0x2ca06, // hgroup - 0x1f2: 0x2080f, // allowfullscreen - 0x1f3: 0x4be08, // tabindex - 0x1f6: 0x30f07, // isindex - 0x1f7: 0x1a0e, // accept-charset - 0x1f8: 0x2ae0e, // formnovalidate - 0x1fb: 0x1c90e, // annotation-xml - 0x1fc: 0x6e05, // embed - 0x1fd: 0x21806, // script - 0x1fe: 0xbb06, // dialog - 0x1ff: 0x1d707, // command + 0x1: 0x3ff08, // dropzone + 0x2: 0x3b08, // basefont + 0x3: 0x23209, // integrity + 0x4: 0x43106, // source + 0x5: 0x2c09, // accesskey + 0x6: 0x1a06, // accept + 0x7: 0x6c807, // onwheel + 0xb: 0x47407, // onkeyup + 0xc: 0x32007, // headers + 0xd: 0x67306, // scoped + 0xe: 0x67909, // onsuspend + 0xf: 0x8908, // noframes + 0x10: 0x1fa0b, // crossorigin + 0x11: 0x2e407, // onclick + 0x12: 0x3f405, // start + 0x13: 0x37a0b, // contextmenu + 0x14: 0x5e903, // src + 0x15: 0x1c404, // cols + 0x16: 0xbb06, // dialog + 0x17: 0x47a07, // preload + 0x18: 0x3c707, // itemref + 0x1b: 0x2f105, // image + 0x1d: 0x4ba09, // onloadend + 0x1e: 0x45d08, // download + 0x1f: 0x46a03, // pre + 0x23: 0x2970a, // formmethod + 0x24: 0x71303, // svg + 0x25: 0xcf01, // q + 0x26: 0x64002, // dt + 0x27: 0x1de08, // controls + 0x2a: 0x2804, // body + 0x2b: 0xd206, // strike + 0x2c: 0x3910b, // oncuechange + 0x2d: 0x4c30b, // onloadstart + 0x2e: 0x2fe07, // isindex + 0x2f: 0xb202, // li + 0x30: 0x1400b, // playsinline + 0x31: 0x34102, // mi + 0x32: 0x30806, // applet + 0x33: 0x4ce09, // onmessage + 0x35: 0x13702, // ol + 0x36: 0x1a304, // open + 0x39: 0x14d09, // oncanplay + 0x3a: 0x6bf09, // onwaiting + 0x3b: 0x11908, // oncancel + 0x3c: 0x6a908, // onunload + 0x3e: 0x53c09, // onoffline + 0x3f: 0x1a0e, // accept-charset + 0x40: 0x32004, // head + 0x42: 0x3ab09, // ondragend + 0x43: 0x1310b, // placeholder + 0x44: 0x2b30a, // formtarget + 0x45: 0x2540d, // foreignobject + 0x47: 0x400c, // ontimeupdate + 0x48: 0xdd0e, // allowusermedia + 0x4a: 0x69c0d, // onbeforeprint + 0x4b: 0x5604, // html + 0x4c: 0x9f04, // span + 0x4d: 0x64206, // hgroup + 0x4e: 0x16408, // disabled + 0x4f: 0x4204, // time + 0x51: 0x42b07, // onfocus + 0x53: 0xb00a, // malignmark + 0x55: 0x4650a, // onkeypress + 0x56: 0x55805, // class + 0x57: 0x1ab08, // colgroup + 0x58: 0x33709, // maxlength + 0x59: 0x5a908, // progress + 0x5b: 0x70405, // style + 0x5c: 0x2a10e, // formnovalidate + 0x5e: 0x38b06, // oncopy + 0x60: 0x26104, // form + 0x61: 0xf606, // footer + 0x64: 0x30a, // radiogroup + 0x66: 0xfb04, // ruby + 0x67: 0x4ff0b, // onmousemove + 0x68: 0x19d08, // itemprop + 0x69: 0x2d70a, // http-equiv + 0x6a: 0x15602, // th + 0x6c: 0x6e02, // em + 0x6d: 0x38108, // menuitem + 0x6e: 0x63106, // select + 0x6f: 0x48110, // onlanguagechange + 0x70: 0x31f05, // thead + 0x71: 0x15c02, // h1 + 0x72: 0x5e906, // srcdoc + 0x75: 0x9604, // name + 0x76: 0x19106, // button + 0x77: 0x55504, // desc + 0x78: 0x17704, // kind + 0x79: 0x1bf05, // color + 0x7c: 0x58e06, // usemap + 0x7d: 0x30e08, // itemtype + 0x7f: 0x6d508, // manifest + 0x81: 0x5300c, // onmousewheel + 0x82: 0x4dc0b, // onmousedown + 0x84: 0xc05, // param + 0x85: 0x2e005, // video + 0x86: 0x4910c, // onloadeddata + 0x87: 0x6f107, // address + 0x8c: 0xef04, // ping + 0x8d: 0x24703, // for + 0x8f: 0x62f08, // onselect + 0x90: 0x30703, // map + 0x92: 0xc01, // p + 0x93: 0x8008, // reversed + 0x94: 0x54d0a, // onpagehide + 0x95: 0x3206, // keygen + 0x96: 0x34109, // minlength + 0x97: 0x3e40a, // ondragover + 0x98: 0x42407, // onerror + 0x9a: 0x2107, // charset + 0x9b: 0x29b06, // method + 0x9c: 0x101, // b + 0x9d: 0x68208, // ontoggle + 0x9e: 0x2bd06, // hidden + 0xa0: 0x3f607, // article + 0xa2: 0x63906, // onshow + 0xa3: 0x64d06, // onsort + 0xa5: 0x57b0f, // contenteditable + 0xa6: 0x66908, // onsubmit + 0xa8: 0x44f09, // oninvalid + 0xaa: 0x202, // br + 0xab: 0x10902, // id + 0xac: 0x5d04, // loop + 0xad: 0x5630a, // onpageshow + 0xb0: 0x2cf04, // href + 0xb2: 0x2210a, // figcaption + 0xb3: 0x2690e, // onautocomplete + 0xb4: 0x49106, // onload + 0xb6: 0x9c04, // rows + 0xb7: 0x1a605, // nonce + 0xb8: 0x68a14, // onunhandledrejection + 0xbb: 0x21306, // center + 0xbc: 0x59406, // onplay + 0xbd: 0x33f02, // h5 + 0xbe: 0x49d07, // listing + 0xbf: 0x57606, // public + 0xc2: 0x23b06, // figure + 0xc3: 0x57a04, // icon + 0xc4: 0x1ab03, // col + 0xc5: 0x47b03, // rel + 0xc6: 0xe605, // media + 0xc7: 0x12109, // autofocus + 0xc8: 0x19a02, // rt + 0xca: 0x2d304, // lang + 0xcc: 0x49908, // datalist + 0xce: 0x2eb06, // iframe + 0xcf: 0x36105, // muted + 0xd0: 0x6140a, // onauxclick + 0xd2: 0x3c02, // as + 0xd6: 0x3fd06, // ondrop + 0xd7: 0x1c90a, // annotation + 0xd8: 0x21908, // fieldset + 0xdb: 0x2cf08, // hreflang + 0xdc: 0x4e70c, // onmouseenter + 0xdd: 0x2a402, // mn + 0xde: 0xe60a, // mediagroup + 0xdf: 0x9805, // meter + 0xe0: 0x56c03, // wbr + 0xe2: 0x63e05, // width + 0xe3: 0x2290c, // onafterprint + 0xe4: 0x30505, // ismap + 0xe5: 0x1505, // value + 0xe7: 0x1303, // nav + 0xe8: 0x54508, // ononline + 0xe9: 0xb604, // mark + 0xea: 0xc303, // low + 0xeb: 0x3ee0b, // ondragstart + 0xef: 0x12f03, // xmp + 0xf0: 0x22407, // caption + 0xf1: 0xd904, // type + 0xf2: 0x70907, // summary + 0xf3: 0x6802, // tt + 0xf4: 0x20809, // translate + 0xf5: 0x1870a, // blockquote + 0xf8: 0x15702, // hr + 0xfa: 0x2705, // tbody + 0xfc: 0x7b07, // picture + 0xfd: 0x5206, // height + 0xfe: 0x19c04, // cite + 0xff: 0x2501, // s + 0x101: 0xff05, // async + 0x102: 0x56f07, // onpaste + 0x103: 0x19507, // onabort + 0x104: 0x2b706, // target + 0x105: 0x14b03, // bdo + 0x106: 0x1f006, // coords + 0x107: 0x5e108, // onresize + 0x108: 0x71908, // template + 0x10a: 0x3a02, // rb + 0x10b: 0x2a50a, // novalidate + 0x10c: 0x460e, // updateviacache + 0x10d: 0x71003, // sup + 0x10e: 0x6c07, // noembed + 0x10f: 0x16b03, // div + 0x110: 0x6f707, // srclang + 0x111: 0x17a09, // draggable + 0x112: 0x67305, // scope + 0x113: 0x5905, // label + 0x114: 0x22f02, // rp + 0x115: 0x23f08, // required + 0x116: 0x3780d, // oncontextmenu + 0x117: 0x5e504, // size + 0x118: 0x5b00a, // spellcheck + 0x119: 0x3f04, // font + 0x11a: 0x9c07, // rowspan + 0x11b: 0x10a07, // default + 0x11d: 0x44307, // oninput + 0x11e: 0x38506, // itemid + 0x11f: 0x5ee04, // code + 0x120: 0xaa07, // acronym + 0x121: 0x3b04, // base + 0x125: 0x2470d, // foreignObject + 0x126: 0x2ca04, // high + 0x127: 0x3cb0e, // referrerpolicy + 0x128: 0x33703, // max + 0x129: 0x59d0a, // onpopstate + 0x12a: 0x2fc02, // h4 + 0x12b: 0x4ac04, // meta + 0x12c: 0x17305, // blink + 0x12e: 0x5f508, // onscroll + 0x12f: 0x59409, // onplaying + 0x130: 0xc113, // allowpaymentrequest + 0x131: 0x19a03, // rtc + 0x132: 0x72b04, // wrap + 0x134: 0x8b08, // frameset + 0x135: 0x32605, // small + 0x137: 0x32006, // header + 0x138: 0x40409, // onemptied + 0x139: 0x34902, // h6 + 0x13a: 0x35908, // multiple + 0x13c: 0x52a06, // prompt + 0x13f: 0x28e09, // challenge + 0x141: 0x4370c, // onhashchange + 0x142: 0x57b07, // content + 0x143: 0x1c90e, // annotation-xml + 0x144: 0x36607, // onclose + 0x145: 0x14d10, // oncanplaythrough + 0x148: 0x5170b, // onmouseover + 0x149: 0x64f08, // sortable + 0x14a: 0xa402, // mo + 0x14b: 0x2cd02, // h3 + 0x14c: 0x2c406, // script + 0x14d: 0x41d07, // onended + 0x14f: 0x64706, // poster + 0x150: 0x7210a, // workertype + 0x153: 0x1f505, // shape + 0x154: 0x4, // abbr + 0x155: 0x1, // a + 0x156: 0x2bf02, // dd + 0x157: 0x71606, // system + 0x158: 0x4ce0e, // onmessageerror + 0x159: 0x36b08, // seamless + 0x15a: 0x2610a, // formaction + 0x15b: 0x6e106, // option + 0x15c: 0x31d04, // math + 0x15d: 0x62609, // onseeking + 0x15e: 0x39c05, // oncut + 0x15f: 0x44c03, // del + 0x160: 0x11005, // title + 0x161: 0x11505, // audio + 0x162: 0x63108, // selected + 0x165: 0x3b40b, // ondragenter + 0x166: 0x46e06, // spacer + 0x167: 0x4a410, // onloadedmetadata + 0x168: 0x44505, // input + 0x16a: 0x58505, // table + 0x16b: 0x41508, // onchange + 0x16e: 0x5f005, // defer + 0x171: 0x50a0a, // onmouseout + 0x172: 0x20504, // slot + 0x175: 0x3704, // nobr + 0x177: 0x1d707, // command + 0x17a: 0x7207, // details + 0x17b: 0x38104, // menu + 0x17c: 0xb903, // kbd + 0x17d: 0x57304, // step + 0x17e: 0x20303, // ins + 0x17f: 0x13c08, // autoplay + 0x182: 0x34103, // min + 0x183: 0x17404, // link + 0x185: 0x40d10, // ondurationchange + 0x186: 0x9202, // td + 0x187: 0x8b05, // frame + 0x18a: 0x2ab08, // datetime + 0x18b: 0x44509, // inputmode + 0x18c: 0x35108, // readonly + 0x18d: 0x21104, // face + 0x18f: 0x5e505, // sizes + 0x191: 0x4b208, // tabindex + 0x192: 0x6db06, // strong + 0x193: 0xba03, // bdi + 0x194: 0x6fe06, // srcset + 0x196: 0x67202, // ms + 0x197: 0x5b507, // checked + 0x198: 0xb105, // align + 0x199: 0x1e507, // section + 0x19b: 0x6e05, // embed + 0x19d: 0x15e07, // bgsound + 0x1a2: 0x49d04, // list + 0x1a3: 0x61e08, // onseeked + 0x1a4: 0x66009, // onstorage + 0x1a5: 0x2f603, // img + 0x1a6: 0xf505, // tfoot + 0x1a9: 0x26913, // onautocompleteerror + 0x1aa: 0x5fd19, // onsecuritypolicyviolation + 0x1ad: 0x9303, // dir + 0x1ae: 0x9307, // dirname + 0x1b0: 0x5a70a, // onprogress + 0x1b2: 0x65709, // onstalled + 0x1b5: 0x66f09, // itemscope + 0x1b6: 0x49904, // data + 0x1b7: 0x3d90b, // ondragleave + 0x1b8: 0x56102, // h2 + 0x1b9: 0x2f706, // mglyph + 0x1ba: 0x16502, // is + 0x1bb: 0x6e50e, // onbeforeunload + 0x1bc: 0x2830d, // typemustmatch + 0x1bd: 0x3ab06, // ondrag + 0x1be: 0x5da07, // onreset + 0x1c0: 0x51106, // output + 0x1c1: 0x12907, // sandbox + 0x1c2: 0x1b209, // plaintext + 0x1c4: 0x34c08, // textarea + 0x1c7: 0xd607, // keytype + 0x1c8: 0x34b05, // mtext + 0x1c9: 0x6b10e, // onvolumechange + 0x1ca: 0x1ea06, // onblur + 0x1cb: 0x58a07, // onpause + 0x1cd: 0x5bc0c, // onratechange + 0x1ce: 0x10705, // aside + 0x1cf: 0x6cf07, // optimum + 0x1d1: 0x45809, // onkeydown + 0x1d2: 0x1c407, // colspan + 0x1d3: 0x1004, // main + 0x1d4: 0x66b03, // sub + 0x1d5: 0x25b06, // object + 0x1d6: 0x55c06, // search + 0x1d7: 0x37206, // sorted + 0x1d8: 0x17003, // big + 0x1d9: 0xb01, // u + 0x1db: 0x26b0c, // autocomplete + 0x1dc: 0xcc02, // tr + 0x1dd: 0xf303, // alt + 0x1df: 0x7804, // samp + 0x1e0: 0x5c812, // onrejectionhandled + 0x1e1: 0x4f30c, // onmouseleave + 0x1e2: 0x28007, // enctype + 0x1e3: 0xa208, // nomodule + 0x1e5: 0x3280f, // allowfullscreen + 0x1e6: 0x5f08, // optgroup + 0x1e8: 0x27c0b, // formenctype + 0x1e9: 0x18106, // legend + 0x1ea: 0x10306, // canvas + 0x1eb: 0x6607, // pattern + 0x1ec: 0x2c208, // noscript + 0x1ed: 0x601, // i + 0x1ee: 0x5d602, // dl + 0x1ef: 0xa702, // ul + 0x1f2: 0x52209, // onmouseup + 0x1f4: 0x1ba05, // track + 0x1f7: 0x3a10a, // ondblclick + 0x1f8: 0x3bf0a, // ondragexit + 0x1fa: 0x8703, // dfn + 0x1fc: 0x26506, // action + 0x1fd: 0x35004, // area + 0x1fe: 0x31607, // marquee + 0x1ff: 0x16d03, // var } const atomText = "abbradiogrouparamainavalueaccept-charsetbodyaccesskeygenobrb" + @@ -758,26 +760,26 @@ const atomText = "abbradiogrouparamainavalueaccept-charsetbodyaccesskeygenobrb" "dboxmplaceholderautoplaysinlinebdoncanplaythrough1bgsoundisa" + "bledivarbigblinkindraggablegendblockquotebuttonabortcitempro" + "penoncecolgrouplaintextrackcolorcolspannotation-xmlcommandco" + - "ntrolshapecoordslotranslatecrossoriginsmallowfullscreenoscri" + - "ptfacenterfieldsetfigcaptionafterprintegrityfigurequiredfore" + - "ignObjectforeignobjectformactionautocompleteerrorformenctype" + - "mustmatchallengeformmethodformnovalidatetimeformtargethgroup" + - "osterhiddenhigh2hreflanghttp-equivideonclickiframeimageimgly" + - "ph3isindexismappletitemtypemarqueematheadersortedmaxlength4m" + - "inlength5mtextareadonlymultiplemutedoncloseamlessourceoncont" + - "extmenuitemidoncopyoncuechangeoncutondblclickondragendondrag" + - "enterondragexitemreferrerpolicyondragleaveondragoverondragst" + - "articleondropzonemptiedondurationchangeonendedonerroronfocus" + - "paceronhashchangeoninputmodeloninvalidonkeydownloadonkeypres" + - "spellcheckedonkeyupreloadonlanguagechangeonloadeddatalisting" + - "onloadedmetadatabindexonloadendonloadstartonmessageerroronmo" + - "usedownonmouseenteronmouseleaveonmousemoveonmouseoutputonmou" + - "seoveronmouseupromptonmousewheelonofflineononlineonpagehides" + - "classectionbluronpageshowbronpastepublicontenteditableonpaus" + - "emaponplayingonpopstateonprogressrcdocodeferonratechangeonre" + - "jectionhandledonresetonresizesrclangonscrollonsecuritypolicy" + - "violationauxclickonseekedonseekingonselectedonshowidth6onsor" + - "tableonstalledonstorageonsubmitemscopedonsuspendontoggleonun" + - "handledrejectionbeforeprintonunloadonvolumechangeonwaitingon" + - "wheeloptimumanifestrongoptionbeforeunloaddressrcsetstylesumm" + - "arysupsvgsystemplateworkertypewrap" + "ntrolsectionblurcoordshapecrossoriginslotranslatefacenterfie" + + "ldsetfigcaptionafterprintegrityfigurequiredforeignObjectfore" + + "ignobjectformactionautocompleteerrorformenctypemustmatchalle" + + "ngeformmethodformnovalidatetimeformtargethiddenoscripthigh3h" + + "reflanghttp-equivideonclickiframeimageimglyph4isindexismappl" + + "etitemtypemarqueematheadersmallowfullscreenmaxlength5minleng" + + "th6mtextareadonlymultiplemutedoncloseamlessortedoncontextmen" + + "uitemidoncopyoncuechangeoncutondblclickondragendondragentero" + + "ndragexitemreferrerpolicyondragleaveondragoverondragstarticl" + + "eondropzonemptiedondurationchangeonendedonerroronfocusourceo" + + "nhashchangeoninputmodeloninvalidonkeydownloadonkeypresspacer" + + "onkeyupreloadonlanguagechangeonloadeddatalistingonloadedmeta" + + "databindexonloadendonloadstartonmessageerroronmousedownonmou" + + "seenteronmouseleaveonmousemoveonmouseoutputonmouseoveronmous" + + "eupromptonmousewheelonofflineononlineonpagehidesclassearch2o" + + "npageshowbronpastepublicontenteditableonpausemaponplayingonp" + + "opstateonprogresspellcheckedonratechangeonrejectionhandledon" + + "resetonresizesrcdocodeferonscrollonsecuritypolicyviolationau" + + "xclickonseekedonseekingonselectedonshowidthgrouposteronsorta" + + "bleonstalledonstorageonsubmitemscopedonsuspendontoggleonunha" + + "ndledrejectionbeforeprintonunloadonvolumechangeonwaitingonwh" + + "eeloptimumanifestrongoptionbeforeunloaddressrclangsrcsetstyl" + + "esummarysupsvgsystemplateworkertypewrap" diff --git a/vendor/golang.org/x/net/html/doc.go b/vendor/golang.org/x/net/html/doc.go index 3a7e5ab176..885c4c5936 100644 --- a/vendor/golang.org/x/net/html/doc.go +++ b/vendor/golang.org/x/net/html/doc.go @@ -78,16 +78,11 @@ example, to process each anchor node in depth-first order: if err != nil { // ... } - var f func(*html.Node) - f = func(n *html.Node) { + for n := range doc.Descendants() { if n.Type == html.ElementNode && n.Data == "a" { // Do something with n... } - for c := n.FirstChild; c != nil; c = c.NextSibling { - f(c) - } } - f(doc) The relevant specifications include: https://html.spec.whatwg.org/multipage/syntax.html and diff --git a/vendor/golang.org/x/net/html/doctype.go b/vendor/golang.org/x/net/html/doctype.go index c484e5a94f..bca3ae9a0c 100644 --- a/vendor/golang.org/x/net/html/doctype.go +++ b/vendor/golang.org/x/net/html/doctype.go @@ -87,7 +87,7 @@ func parseDoctype(s string) (n *Node, quirks bool) { } } if lastAttr := n.Attr[len(n.Attr)-1]; lastAttr.Key == "system" && - strings.ToLower(lastAttr.Val) == "http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd" { + strings.EqualFold(lastAttr.Val, "http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd") { quirks = true } } diff --git a/vendor/golang.org/x/net/html/escape.go b/vendor/golang.org/x/net/html/escape.go index 04c6bec210..12f2273706 100644 --- a/vendor/golang.org/x/net/html/escape.go +++ b/vendor/golang.org/x/net/html/escape.go @@ -299,7 +299,7 @@ func escape(w writer, s string) error { case '\r': esc = " " default: - panic("unrecognized escape character") + panic("html: unrecognized escape character") } s = s[i+1:] if _, err := w.WriteString(esc); err != nil { diff --git a/vendor/golang.org/x/net/html/foreign.go b/vendor/golang.org/x/net/html/foreign.go index 9da9e9dc42..e8515d8e88 100644 --- a/vendor/golang.org/x/net/html/foreign.go +++ b/vendor/golang.org/x/net/html/foreign.go @@ -40,8 +40,7 @@ func htmlIntegrationPoint(n *Node) bool { if n.Data == "annotation-xml" { for _, a := range n.Attr { if a.Key == "encoding" { - val := strings.ToLower(a.Val) - if val == "text/html" || val == "application/xhtml+xml" { + if strings.EqualFold(a.Val, "text/html") || strings.EqualFold(a.Val, "application/xhtml+xml") { return true } } diff --git a/vendor/golang.org/x/net/html/iter.go b/vendor/golang.org/x/net/html/iter.go new file mode 100644 index 0000000000..54be8fd30f --- /dev/null +++ b/vendor/golang.org/x/net/html/iter.go @@ -0,0 +1,56 @@ +// Copyright 2024 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build go1.23 + +package html + +import "iter" + +// Ancestors returns an iterator over the ancestors of n, starting with n.Parent. +// +// Mutating a Node or its parents while iterating may have unexpected results. +func (n *Node) Ancestors() iter.Seq[*Node] { + _ = n.Parent // eager nil check + + return func(yield func(*Node) bool) { + for p := n.Parent; p != nil && yield(p); p = p.Parent { + } + } +} + +// ChildNodes returns an iterator over the immediate children of n, +// starting with n.FirstChild. +// +// Mutating a Node or its children while iterating may have unexpected results. +func (n *Node) ChildNodes() iter.Seq[*Node] { + _ = n.FirstChild // eager nil check + + return func(yield func(*Node) bool) { + for c := n.FirstChild; c != nil && yield(c); c = c.NextSibling { + } + } + +} + +// Descendants returns an iterator over all nodes recursively beneath +// n, excluding n itself. Nodes are visited in depth-first preorder. +// +// Mutating a Node or its descendants while iterating may have unexpected results. +func (n *Node) Descendants() iter.Seq[*Node] { + _ = n.FirstChild // eager nil check + + return func(yield func(*Node) bool) { + n.descendants(yield) + } +} + +func (n *Node) descendants(yield func(*Node) bool) bool { + for c := range n.ChildNodes() { + if !yield(c) || !c.descendants(yield) { + return false + } + } + return true +} diff --git a/vendor/golang.org/x/net/html/node.go b/vendor/golang.org/x/net/html/node.go index 1350eef22c..253e4679c7 100644 --- a/vendor/golang.org/x/net/html/node.go +++ b/vendor/golang.org/x/net/html/node.go @@ -11,6 +11,7 @@ import ( // A NodeType is the type of a Node. type NodeType uint32 +//go:generate stringer -type NodeType const ( ErrorNode NodeType = iota TextNode @@ -38,6 +39,10 @@ var scopeMarker = Node{Type: scopeMarkerNode} // that it looks like "a= len(_NodeType_index)-1 { + return "NodeType(" + strconv.FormatInt(int64(i), 10) + ")" + } + return _NodeType_name[_NodeType_index[idx]:_NodeType_index[idx+1]] +} diff --git a/vendor/golang.org/x/net/html/parse.go b/vendor/golang.org/x/net/html/parse.go index 46a89eda6c..88fc0056a3 100644 --- a/vendor/golang.org/x/net/html/parse.go +++ b/vendor/golang.org/x/net/html/parse.go @@ -136,7 +136,7 @@ func (p *parser) indexOfElementInScope(s scope, matchTags ...a.Atom) int { return -1 } default: - panic("unreachable") + panic(fmt.Sprintf("html: internal error: indexOfElementInScope unknown scope: %d", s)) } } switch s { @@ -179,7 +179,7 @@ func (p *parser) clearStackToContext(s scope) { return } default: - panic("unreachable") + panic(fmt.Sprintf("html: internal error: clearStackToContext unknown scope: %d", s)) } } } @@ -231,7 +231,14 @@ func (p *parser) addChild(n *Node) { } if n.Type == ElementNode { - p.oe = append(p.oe, n) + p.insertOpenElement(n) + } +} + +func (p *parser) insertOpenElement(n *Node) { + p.oe = append(p.oe, n) + if len(p.oe) > 512 { + panic("html: open stack of elements exceeds 512 nodes") } } @@ -810,7 +817,7 @@ func afterHeadIM(p *parser) bool { p.im = inFramesetIM return true case a.Base, a.Basefont, a.Bgsound, a.Link, a.Meta, a.Noframes, a.Script, a.Style, a.Template, a.Title: - p.oe = append(p.oe, p.head) + p.insertOpenElement(p.head) defer p.oe.remove(p.head) return inHeadIM(p) case a.Head: @@ -840,6 +847,10 @@ func afterHeadIM(p *parser) bool { p.parseImpliedToken(StartTagToken, a.Body, a.Body.String()) p.framesetOK = true + if p.tok.Type == ErrorToken { + // Stop parsing. + return true + } return false } @@ -920,7 +931,7 @@ func inBodyIM(p *parser) bool { p.addElement() p.im = inFramesetIM return true - case a.Address, a.Article, a.Aside, a.Blockquote, a.Center, a.Details, a.Dialog, a.Dir, a.Div, a.Dl, a.Fieldset, a.Figcaption, a.Figure, a.Footer, a.Header, a.Hgroup, a.Main, a.Menu, a.Nav, a.Ol, a.P, a.Section, a.Summary, a.Ul: + case a.Address, a.Article, a.Aside, a.Blockquote, a.Center, a.Details, a.Dialog, a.Dir, a.Div, a.Dl, a.Fieldset, a.Figcaption, a.Figure, a.Footer, a.Header, a.Hgroup, a.Main, a.Menu, a.Nav, a.Ol, a.P, a.Search, a.Section, a.Summary, a.Ul: p.popUntil(buttonScope, a.P) p.addElement() case a.H1, a.H2, a.H3, a.H4, a.H5, a.H6: @@ -1031,7 +1042,7 @@ func inBodyIM(p *parser) bool { if p.tok.DataAtom == a.Input { for _, t := range p.tok.Attr { if t.Key == "type" { - if strings.ToLower(t.Val) == "hidden" { + if strings.EqualFold(t.Val, "hidden") { // Skip setting framesetOK = false return true } @@ -1132,7 +1143,7 @@ func inBodyIM(p *parser) bool { return false } return true - case a.Address, a.Article, a.Aside, a.Blockquote, a.Button, a.Center, a.Details, a.Dialog, a.Dir, a.Div, a.Dl, a.Fieldset, a.Figcaption, a.Figure, a.Footer, a.Header, a.Hgroup, a.Listing, a.Main, a.Menu, a.Nav, a.Ol, a.Pre, a.Section, a.Summary, a.Ul: + case a.Address, a.Article, a.Aside, a.Blockquote, a.Button, a.Center, a.Details, a.Dialog, a.Dir, a.Div, a.Dl, a.Fieldset, a.Figcaption, a.Figure, a.Footer, a.Header, a.Hgroup, a.Listing, a.Main, a.Menu, a.Nav, a.Ol, a.Pre, a.Search, a.Section, a.Summary, a.Ul: p.popUntil(defaultScope, p.tok.DataAtom) case a.Form: if p.oe.contains(a.Template) { @@ -1459,7 +1470,7 @@ func inTableIM(p *parser) bool { return inHeadIM(p) case a.Input: for _, t := range p.tok.Attr { - if t.Key == "type" && strings.ToLower(t.Val) == "hidden" { + if t.Key == "type" && strings.EqualFold(t.Val, "hidden") { p.addElement() p.oe.pop() return true @@ -1674,7 +1685,7 @@ func inTableBodyIM(p *parser) bool { return inTableIM(p) } -// Section 12.2.6.4.14. +// Section 13.2.6.4.14. func inRowIM(p *parser) bool { switch p.tok.Type { case StartTagToken: @@ -1686,7 +1697,9 @@ func inRowIM(p *parser) bool { p.im = inCellIM return true case a.Caption, a.Col, a.Colgroup, a.Tbody, a.Tfoot, a.Thead, a.Tr: - if p.popUntil(tableScope, a.Tr) { + if p.elementInScope(tableScope, a.Tr) { + p.clearStackToContext(tableRowScope) + p.oe.pop() p.im = inTableBodyIM return false } @@ -1696,22 +1709,28 @@ func inRowIM(p *parser) bool { case EndTagToken: switch p.tok.DataAtom { case a.Tr: - if p.popUntil(tableScope, a.Tr) { + if p.elementInScope(tableScope, a.Tr) { + p.clearStackToContext(tableRowScope) + p.oe.pop() p.im = inTableBodyIM return true } // Ignore the token. return true case a.Table: - if p.popUntil(tableScope, a.Tr) { + if p.elementInScope(tableScope, a.Tr) { + p.clearStackToContext(tableRowScope) + p.oe.pop() p.im = inTableBodyIM return false } // Ignore the token. return true case a.Tbody, a.Tfoot, a.Thead: - if p.elementInScope(tableScope, p.tok.DataAtom) { - p.parseImpliedToken(EndTagToken, a.Tr, a.Tr.String()) + if p.elementInScope(tableScope, p.tok.DataAtom) && p.elementInScope(tableScope, a.Tr) { + p.clearStackToContext(tableRowScope) + p.oe.pop() + p.im = inTableBodyIM return false } // Ignore the token. @@ -2218,16 +2237,20 @@ func parseForeignContent(p *parser) bool { p.acknowledgeSelfClosingTag() } case EndTagToken: + if strings.EqualFold(p.oe[len(p.oe)-1].Data, p.tok.Data) { + p.oe = p.oe[:len(p.oe)-1] + return true + } for i := len(p.oe) - 1; i >= 0; i-- { - if p.oe[i].Namespace == "" { - return p.im(p) - } if strings.EqualFold(p.oe[i].Data, p.tok.Data) { p.oe = p.oe[:i] + return true + } + if i > 0 && p.oe[i-1].Namespace == "" { break } } - return true + return p.im(p) default: // Ignore the token. } @@ -2308,9 +2331,13 @@ func (p *parser) parseCurrentToken() { } } -func (p *parser) parse() error { +func (p *parser) parse() (err error) { + defer func() { + if panicErr := recover(); panicErr != nil { + err = fmt.Errorf("%s", panicErr) + } + }() // Iterate until EOF. Any other error will cause an early return. - var err error for err != io.EOF { // CDATA sections are allowed only in foreign content. n := p.oe.top() @@ -2339,6 +2366,8 @@ func (p *parser) parse() error { // s. Conversely, explicit s in r's data can be silently dropped, // with no corresponding node in the resulting tree. // +// Parse will reject HTML that is nested deeper than 512 elements. +// // The input is assumed to be UTF-8 encoded. func Parse(r io.Reader) (*Node, error) { return ParseWithOptions(r) diff --git a/vendor/golang.org/x/net/html/render.go b/vendor/golang.org/x/net/html/render.go index e8c1233455..0157d89e1f 100644 --- a/vendor/golang.org/x/net/html/render.go +++ b/vendor/golang.org/x/net/html/render.go @@ -184,7 +184,7 @@ func render1(w writer, n *Node) error { return err } - // Add initial newline where there is danger of a newline beging ignored. + // Add initial newline where there is danger of a newline being ignored. if c := n.FirstChild; c != nil && c.Type == TextNode && strings.HasPrefix(c.Data, "\n") { switch n.Data { case "pre", "listing", "textarea": diff --git a/vendor/golang.org/x/net/html/token.go b/vendor/golang.org/x/net/html/token.go index 3c57880d69..6598c1f7b3 100644 --- a/vendor/golang.org/x/net/html/token.go +++ b/vendor/golang.org/x/net/html/token.go @@ -839,8 +839,22 @@ func (z *Tokenizer) readStartTag() TokenType { if raw { z.rawTag = strings.ToLower(string(z.buf[z.data.start:z.data.end])) } - // Look for a self-closing token like "
". - if z.err == nil && z.buf[z.raw.end-2] == '/' { + // Look for a self-closing token (e.g.
). + // + // Originally, we did this by just checking that the last character of the + // tag (ignoring the closing bracket) was a solidus (/) character, but this + // is not always accurate. + // + // We need to be careful that we don't misinterpret a non-self-closing tag + // as self-closing, as can happen if the tag contains unquoted attribute + // values (i.e.

). + // + // To avoid this, we check that the last non-bracket character of the tag + // (z.raw.end-2) isn't the same character as the last non-quote character of + // the last attribute of the tag (z.pendingAttr[1].end-1), if the tag has + // attributes. + nAttrs := len(z.attr) + if z.err == nil && z.buf[z.raw.end-2] == '/' && (nAttrs == 0 || z.raw.end-2 != z.attr[nAttrs-1][1].end-1) { return SelfClosingTagToken } return StartTagToken diff --git a/vendor/golang.org/x/net/http2/client_conn_pool.go b/vendor/golang.org/x/net/http2/client_conn_pool.go index 780968d6c1..e81b73e6a7 100644 --- a/vendor/golang.org/x/net/http2/client_conn_pool.go +++ b/vendor/golang.org/x/net/http2/client_conn_pool.go @@ -8,8 +8,8 @@ package http2 import ( "context" - "crypto/tls" "errors" + "net" "net/http" "sync" ) @@ -158,7 +158,7 @@ func (c *dialCall) dial(ctx context.Context, addr string) { // This code decides which ones live or die. // The return value used is whether c was used. // c is never closed. -func (p *clientConnPool) addConnIfNeeded(key string, t *Transport, c *tls.Conn) (used bool, err error) { +func (p *clientConnPool) addConnIfNeeded(key string, t *Transport, c net.Conn) (used bool, err error) { p.mu.Lock() for _, cc := range p.conns[key] { if cc.CanTakeNewRequest() { @@ -194,8 +194,8 @@ type addConnCall struct { err error } -func (c *addConnCall) run(t *Transport, key string, tc *tls.Conn) { - cc, err := t.NewClientConn(tc) +func (c *addConnCall) run(t *Transport, key string, nc net.Conn) { + cc, err := t.NewClientConn(nc) p := c.p p.mu.Lock() diff --git a/vendor/golang.org/x/net/http2/client_priority_go126.go b/vendor/golang.org/x/net/http2/client_priority_go126.go new file mode 100644 index 0000000000..80af000b09 --- /dev/null +++ b/vendor/golang.org/x/net/http2/client_priority_go126.go @@ -0,0 +1,20 @@ +// Copyright 2026 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build !go1.27 + +package http2 + +import "net/http" + +// Support for go.dev/issue/75500 is added in Go 1.27. In case anyone uses +// x/net with versions before Go 1.27, we return true here so that their write +// scheduler will still be the round-robin write scheduler rather than the RFC +// 9218 write scheduler. That way, older users of Go will not see a sudden +// change of behavior just from importing x/net. +// +// TODO(nsh): remove this file after x/net go.mod is at Go 1.27. +func clientPriorityDisabled(_ *http.Server) bool { + return true +} diff --git a/vendor/golang.org/x/net/http2/client_priority_go127.go b/vendor/golang.org/x/net/http2/client_priority_go127.go new file mode 100644 index 0000000000..817d01b057 --- /dev/null +++ b/vendor/golang.org/x/net/http2/client_priority_go127.go @@ -0,0 +1,13 @@ +// Copyright 2026 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build go1.27 + +package http2 + +import "net/http" + +func clientPriorityDisabled(s *http.Server) bool { + return s.DisableClientPriority +} diff --git a/vendor/golang.org/x/net/http2/config.go b/vendor/golang.org/x/net/http2/config.go new file mode 100644 index 0000000000..8a7a89d016 --- /dev/null +++ b/vendor/golang.org/x/net/http2/config.go @@ -0,0 +1,169 @@ +// Copyright 2024 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package http2 + +import ( + "math" + "net/http" + "time" +) + +// http2Config is a package-internal version of net/http.HTTP2Config. +// +// http.HTTP2Config was added in Go 1.24. +// When running with a version of net/http that includes HTTP2Config, +// we merge the configuration with the fields in Transport or Server +// to produce an http2Config. +// +// Zero valued fields in http2Config are interpreted as in the +// net/http.HTTPConfig documentation. +// +// Precedence order for reconciling configurations is: +// +// - Use the net/http.{Server,Transport}.HTTP2Config value, when non-zero. +// - Otherwise use the http2.{Server.Transport} value. +// - If the resulting value is zero or out of range, use a default. +type http2Config struct { + MaxConcurrentStreams uint32 + StrictMaxConcurrentRequests bool + MaxDecoderHeaderTableSize uint32 + MaxEncoderHeaderTableSize uint32 + MaxReadFrameSize uint32 + MaxUploadBufferPerConnection int32 + MaxUploadBufferPerStream int32 + SendPingTimeout time.Duration + PingTimeout time.Duration + WriteByteTimeout time.Duration + PermitProhibitedCipherSuites bool + CountError func(errType string) +} + +// configFromServer merges configuration settings from +// net/http.Server.HTTP2Config and http2.Server. +func configFromServer(h1 *http.Server, h2 *Server) http2Config { + conf := http2Config{ + MaxConcurrentStreams: h2.MaxConcurrentStreams, + MaxEncoderHeaderTableSize: h2.MaxEncoderHeaderTableSize, + MaxDecoderHeaderTableSize: h2.MaxDecoderHeaderTableSize, + MaxReadFrameSize: h2.MaxReadFrameSize, + MaxUploadBufferPerConnection: h2.MaxUploadBufferPerConnection, + MaxUploadBufferPerStream: h2.MaxUploadBufferPerStream, + SendPingTimeout: h2.ReadIdleTimeout, + PingTimeout: h2.PingTimeout, + WriteByteTimeout: h2.WriteByteTimeout, + PermitProhibitedCipherSuites: h2.PermitProhibitedCipherSuites, + CountError: h2.CountError, + } + fillNetHTTPConfig(&conf, h1.HTTP2) + setConfigDefaults(&conf, true) + return conf +} + +// configFromTransport merges configuration settings from h2 and h2.t1.HTTP2 +// (the net/http Transport). +func configFromTransport(h2 *Transport) http2Config { + conf := http2Config{ + StrictMaxConcurrentRequests: h2.StrictMaxConcurrentStreams, + MaxEncoderHeaderTableSize: h2.MaxEncoderHeaderTableSize, + MaxDecoderHeaderTableSize: h2.MaxDecoderHeaderTableSize, + MaxReadFrameSize: h2.MaxReadFrameSize, + SendPingTimeout: h2.ReadIdleTimeout, + PingTimeout: h2.PingTimeout, + WriteByteTimeout: h2.WriteByteTimeout, + } + + // Unlike most config fields, where out-of-range values revert to the default, + // Transport.MaxReadFrameSize clips. + if conf.MaxReadFrameSize < minMaxFrameSize { + conf.MaxReadFrameSize = minMaxFrameSize + } else if conf.MaxReadFrameSize > maxFrameSize { + conf.MaxReadFrameSize = maxFrameSize + } + + if h2.t1 != nil { + fillNetHTTPConfig(&conf, h2.t1.HTTP2) + } + setConfigDefaults(&conf, false) + return conf +} + +func setDefault[T ~int | ~int32 | ~uint32 | ~int64](v *T, minval, maxval, defval T) { + if *v < minval || *v > maxval { + *v = defval + } +} + +func setConfigDefaults(conf *http2Config, server bool) { + setDefault(&conf.MaxConcurrentStreams, 1, math.MaxUint32, defaultMaxStreams) + setDefault(&conf.MaxEncoderHeaderTableSize, 1, math.MaxUint32, initialHeaderTableSize) + setDefault(&conf.MaxDecoderHeaderTableSize, 1, math.MaxUint32, initialHeaderTableSize) + if server { + setDefault(&conf.MaxUploadBufferPerConnection, initialWindowSize, math.MaxInt32, 1<<20) + } else { + setDefault(&conf.MaxUploadBufferPerConnection, initialWindowSize, math.MaxInt32, transportDefaultConnFlow) + } + if server { + setDefault(&conf.MaxUploadBufferPerStream, 1, math.MaxInt32, 1<<20) + } else { + setDefault(&conf.MaxUploadBufferPerStream, 1, math.MaxInt32, transportDefaultStreamFlow) + } + setDefault(&conf.MaxReadFrameSize, minMaxFrameSize, maxFrameSize, defaultMaxReadFrameSize) + setDefault(&conf.PingTimeout, 1, math.MaxInt64, 15*time.Second) +} + +// adjustHTTP1MaxHeaderSize converts a limit in bytes on the size of an HTTP/1 header +// to an HTTP/2 MAX_HEADER_LIST_SIZE value. +func adjustHTTP1MaxHeaderSize(n int64) int64 { + // http2's count is in a slightly different unit and includes 32 bytes per pair. + // So, take the net/http.Server value and pad it up a bit, assuming 10 headers. + const perFieldOverhead = 32 // per http2 spec + const typicalHeaders = 10 // conservative + return n + typicalHeaders*perFieldOverhead +} + +func fillNetHTTPConfig(conf *http2Config, h2 *http.HTTP2Config) { + if h2 == nil { + return + } + if h2.MaxConcurrentStreams != 0 { + conf.MaxConcurrentStreams = uint32(h2.MaxConcurrentStreams) + } + if http2ConfigStrictMaxConcurrentRequests(h2) { + conf.StrictMaxConcurrentRequests = true + } + if h2.MaxEncoderHeaderTableSize != 0 { + conf.MaxEncoderHeaderTableSize = uint32(h2.MaxEncoderHeaderTableSize) + } + if h2.MaxDecoderHeaderTableSize != 0 { + conf.MaxDecoderHeaderTableSize = uint32(h2.MaxDecoderHeaderTableSize) + } + if h2.MaxConcurrentStreams != 0 { + conf.MaxConcurrentStreams = uint32(h2.MaxConcurrentStreams) + } + if h2.MaxReadFrameSize != 0 { + conf.MaxReadFrameSize = uint32(h2.MaxReadFrameSize) + } + if h2.MaxReceiveBufferPerConnection != 0 { + conf.MaxUploadBufferPerConnection = int32(h2.MaxReceiveBufferPerConnection) + } + if h2.MaxReceiveBufferPerStream != 0 { + conf.MaxUploadBufferPerStream = int32(h2.MaxReceiveBufferPerStream) + } + if h2.SendPingTimeout != 0 { + conf.SendPingTimeout = h2.SendPingTimeout + } + if h2.PingTimeout != 0 { + conf.PingTimeout = h2.PingTimeout + } + if h2.WriteByteTimeout != 0 { + conf.WriteByteTimeout = h2.WriteByteTimeout + } + if h2.PermitProhibitedCipherSuites { + conf.PermitProhibitedCipherSuites = true + } + if h2.CountError != nil { + conf.CountError = h2.CountError + } +} diff --git a/vendor/golang.org/x/net/http2/config_go125.go b/vendor/golang.org/x/net/http2/config_go125.go new file mode 100644 index 0000000000..b4373fe33c --- /dev/null +++ b/vendor/golang.org/x/net/http2/config_go125.go @@ -0,0 +1,15 @@ +// Copyright 2025 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build !go1.26 + +package http2 + +import ( + "net/http" +) + +func http2ConfigStrictMaxConcurrentRequests(h2 *http.HTTP2Config) bool { + return false +} diff --git a/vendor/golang.org/x/net/http2/config_go126.go b/vendor/golang.org/x/net/http2/config_go126.go new file mode 100644 index 0000000000..6b071c149d --- /dev/null +++ b/vendor/golang.org/x/net/http2/config_go126.go @@ -0,0 +1,15 @@ +// Copyright 2025 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build go1.26 + +package http2 + +import ( + "net/http" +) + +func http2ConfigStrictMaxConcurrentRequests(h2 *http.HTTP2Config) bool { + return h2.StrictMaxConcurrentRequests +} diff --git a/vendor/golang.org/x/net/http2/frame.go b/vendor/golang.org/x/net/http2/frame.go index 105c3b279c..a26039c130 100644 --- a/vendor/golang.org/x/net/http2/frame.go +++ b/vendor/golang.org/x/net/http2/frame.go @@ -11,11 +11,13 @@ import ( "fmt" "io" "log" + "slices" "strings" "sync" "golang.org/x/net/http/httpguts" "golang.org/x/net/http2/hpack" + "golang.org/x/net/internal/httpsfv" ) const frameHeaderLen = 9 @@ -23,40 +25,43 @@ const frameHeaderLen = 9 var padZeros = make([]byte, 255) // zeros for padding // A FrameType is a registered frame type as defined in -// https://httpwg.org/specs/rfc7540.html#rfc.section.11.2 +// https://httpwg.org/specs/rfc7540.html#rfc.section.11.2 and other future +// RFCs. type FrameType uint8 const ( - FrameData FrameType = 0x0 - FrameHeaders FrameType = 0x1 - FramePriority FrameType = 0x2 - FrameRSTStream FrameType = 0x3 - FrameSettings FrameType = 0x4 - FramePushPromise FrameType = 0x5 - FramePing FrameType = 0x6 - FrameGoAway FrameType = 0x7 - FrameWindowUpdate FrameType = 0x8 - FrameContinuation FrameType = 0x9 + FrameData FrameType = 0x0 + FrameHeaders FrameType = 0x1 + FramePriority FrameType = 0x2 + FrameRSTStream FrameType = 0x3 + FrameSettings FrameType = 0x4 + FramePushPromise FrameType = 0x5 + FramePing FrameType = 0x6 + FrameGoAway FrameType = 0x7 + FrameWindowUpdate FrameType = 0x8 + FrameContinuation FrameType = 0x9 + FramePriorityUpdate FrameType = 0x10 ) -var frameName = map[FrameType]string{ - FrameData: "DATA", - FrameHeaders: "HEADERS", - FramePriority: "PRIORITY", - FrameRSTStream: "RST_STREAM", - FrameSettings: "SETTINGS", - FramePushPromise: "PUSH_PROMISE", - FramePing: "PING", - FrameGoAway: "GOAWAY", - FrameWindowUpdate: "WINDOW_UPDATE", - FrameContinuation: "CONTINUATION", +var frameNames = [...]string{ + FrameData: "DATA", + FrameHeaders: "HEADERS", + FramePriority: "PRIORITY", + FrameRSTStream: "RST_STREAM", + FrameSettings: "SETTINGS", + FramePushPromise: "PUSH_PROMISE", + FramePing: "PING", + FrameGoAway: "GOAWAY", + FrameWindowUpdate: "WINDOW_UPDATE", + FrameContinuation: "CONTINUATION", + FramePriorityUpdate: "PRIORITY_UPDATE", } func (t FrameType) String() string { - if s, ok := frameName[t]; ok { - return s + if int(t) < len(frameNames) { + return frameNames[t] } - return fmt.Sprintf("UNKNOWN_FRAME_TYPE_%d", uint8(t)) + return fmt.Sprintf("UNKNOWN_FRAME_TYPE_%d", t) } // Flags is a bitmask of HTTP/2 flags. @@ -124,22 +129,23 @@ var flagName = map[FrameType]map[Flags]string{ // might be 0). type frameParser func(fc *frameCache, fh FrameHeader, countError func(string), payload []byte) (Frame, error) -var frameParsers = map[FrameType]frameParser{ - FrameData: parseDataFrame, - FrameHeaders: parseHeadersFrame, - FramePriority: parsePriorityFrame, - FrameRSTStream: parseRSTStreamFrame, - FrameSettings: parseSettingsFrame, - FramePushPromise: parsePushPromise, - FramePing: parsePingFrame, - FrameGoAway: parseGoAwayFrame, - FrameWindowUpdate: parseWindowUpdateFrame, - FrameContinuation: parseContinuationFrame, +var frameParsers = [...]frameParser{ + FrameData: parseDataFrame, + FrameHeaders: parseHeadersFrame, + FramePriority: parsePriorityFrame, + FrameRSTStream: parseRSTStreamFrame, + FrameSettings: parseSettingsFrame, + FramePushPromise: parsePushPromise, + FramePing: parsePingFrame, + FrameGoAway: parseGoAwayFrame, + FrameWindowUpdate: parseWindowUpdateFrame, + FrameContinuation: parseContinuationFrame, + FramePriorityUpdate: parsePriorityUpdateFrame, } func typeFrameParser(t FrameType) frameParser { - if f := frameParsers[t]; f != nil { - return f + if int(t) < len(frameParsers) { + return frameParsers[t] } return parseUnknownFrame } @@ -225,6 +231,11 @@ var fhBytes = sync.Pool{ }, } +func invalidHTTP1LookingFrameHeader() FrameHeader { + fh, _ := readFrameHeader(make([]byte, frameHeaderLen), strings.NewReader("HTTP/1.1 ")) + return fh +} + // ReadFrameHeader reads 9 bytes from r and returns a FrameHeader. // Most users should use Framer.ReadFrame instead. func ReadFrameHeader(r io.Reader) (FrameHeader, error) { @@ -275,6 +286,8 @@ type Framer struct { // lastHeaderStream is non-zero if the last frame was an // unfinished HEADERS/CONTINUATION. lastHeaderStream uint32 + // lastFrameType holds the type of the last frame for verifying frame order. + lastFrameType FrameType maxReadSize uint32 headerBuf [frameHeaderLen]byte @@ -342,7 +355,7 @@ func (fr *Framer) maxHeaderListSize() uint32 { func (f *Framer) startWrite(ftype FrameType, flags Flags, streamID uint32) { // Write the FrameHeader. f.wbuf = append(f.wbuf[:0], - 0, // 3 bytes of length, filled in in endWrite + 0, // 3 bytes of length, filled in endWrite 0, 0, byte(ftype), @@ -483,30 +496,47 @@ func terminalReadFrameError(err error) bool { return err != nil } -// ReadFrame reads a single frame. The returned Frame is only valid -// until the next call to ReadFrame. +// ReadFrameHeader reads the header of the next frame. +// It reads the 9-byte fixed frame header, and does not read any portion of the +// frame payload. The caller is responsible for consuming the payload, either +// with ReadFrameForHeader or directly from the Framer's io.Reader. // -// If the frame is larger than previously set with SetMaxReadFrameSize, the -// returned error is ErrFrameTooLarge. Other errors may be of type -// ConnectionError, StreamError, or anything else from the underlying -// reader. +// If the frame is larger than previously set with SetMaxReadFrameSize, it +// returns the frame header and ErrFrameTooLarge. // -// If ReadFrame returns an error and a non-nil Frame, the Frame's StreamID -// indicates the stream responsible for the error. -func (fr *Framer) ReadFrame() (Frame, error) { +// If the returned FrameHeader.StreamID is non-zero, it indicates the stream +// responsible for the error. +func (fr *Framer) ReadFrameHeader() (FrameHeader, error) { fr.errDetail = nil - if fr.lastFrame != nil { - fr.lastFrame.invalidate() - } fh, err := readFrameHeader(fr.headerBuf[:], fr.r) if err != nil { - return nil, err + return fh, err } if fh.Length > fr.maxReadSize { - return nil, ErrFrameTooLarge + if fh == invalidHTTP1LookingFrameHeader() { + return fh, fmt.Errorf("http2: failed reading the frame payload: %w, note that the frame header looked like an HTTP/1.1 header", ErrFrameTooLarge) + } + return fh, ErrFrameTooLarge + } + if err := fr.checkFrameOrder(fh); err != nil { + return fh, err + } + return fh, nil +} + +// ReadFrameForHeader reads the payload for the frame with the given FrameHeader. +// +// It behaves identically to ReadFrame, other than not checking the maximum +// frame size. +func (fr *Framer) ReadFrameForHeader(fh FrameHeader) (Frame, error) { + if fr.lastFrame != nil { + fr.lastFrame.invalidate() } payload := fr.getReadBuf(fh.Length) if _, err := io.ReadFull(fr.r, payload); err != nil { + if fh == invalidHTTP1LookingFrameHeader() { + return nil, fmt.Errorf("http2: failed reading the frame payload: %w, note that the frame header looked like an HTTP/1.1 header", err) + } return nil, err } f, err := typeFrameParser(fh.Type)(fr.frameCache, fh, fr.countError, payload) @@ -516,9 +546,7 @@ func (fr *Framer) ReadFrame() (Frame, error) { } return nil, err } - if err := fr.checkFrameOrder(f); err != nil { - return nil, err - } + fr.lastFrame = f if fr.logReads { fr.debugReadLoggerf("http2: Framer %p: read %v", fr, summarizeFrame(f)) } @@ -528,6 +556,24 @@ func (fr *Framer) ReadFrame() (Frame, error) { return f, nil } +// ReadFrame reads a single frame. The returned Frame is only valid +// until the next call to ReadFrame or ReadFrameBodyForHeader. +// +// If the frame is larger than previously set with SetMaxReadFrameSize, the +// returned error is ErrFrameTooLarge. Other errors may be of type +// ConnectionError, StreamError, or anything else from the underlying +// reader. +// +// If ReadFrame returns an error and a non-nil Frame, the Frame's StreamID +// indicates the stream responsible for the error. +func (fr *Framer) ReadFrame() (Frame, error) { + fh, err := fr.ReadFrameHeader() + if err != nil { + return nil, err + } + return fr.ReadFrameForHeader(fh) +} + // connError returns ConnectionError(code) but first // stashes away a public reason to the caller can optionally relay it // to the peer before hanging up on them. This might help others debug @@ -540,20 +586,19 @@ func (fr *Framer) connError(code ErrCode, reason string) error { // checkFrameOrder reports an error if f is an invalid frame to return // next from ReadFrame. Mostly it checks whether HEADERS and // CONTINUATION frames are contiguous. -func (fr *Framer) checkFrameOrder(f Frame) error { - last := fr.lastFrame - fr.lastFrame = f +func (fr *Framer) checkFrameOrder(fh FrameHeader) error { + lastType := fr.lastFrameType + fr.lastFrameType = fh.Type if fr.AllowIllegalReads { return nil } - fh := f.Header() if fr.lastHeaderStream != 0 { if fh.Type != FrameContinuation { return fr.connError(ErrCodeProtocol, fmt.Sprintf("got %s for stream %d; expected CONTINUATION following %s for stream %d", fh.Type, fh.StreamID, - last.Header().Type, fr.lastHeaderStream)) + lastType, fr.lastHeaderStream)) } if fh.StreamID != fr.lastHeaderStream { return fr.connError(ErrCodeProtocol, @@ -1141,7 +1186,41 @@ type PriorityFrame struct { PriorityParam } -// PriorityParam are the stream prioritzation parameters. +// defaultRFC9218Priority determines what priority we should use as the default +// value. +// +// According to RFC 9218, by default, streams should be given an urgency of 3 +// and should be non-incremental. However, making streams non-incremental by +// default would be a huge change to our historical behavior where we would +// round-robin writes across streams. When streams are non-incremental, we +// would process streams of the same urgency one-by-one to completion instead. +// +// To avoid such a sudden change which might break some HTTP/2 users, this +// function allows the caller to specify whether they can actually use the +// default value as specified in RFC 9218. If not, this function will return a +// priority value where streams are incremental by default instead: effectively +// a round-robin between stream of the same urgency. +// +// As an example, a server might not be able to use the RFC 9218 default value +// when it's not sure that the client it is serving is aware of RFC 9218. +func defaultRFC9218Priority(canUseDefault bool) PriorityParam { + if canUseDefault { + return PriorityParam{ + urgency: 3, + incremental: 0, + } + } + return PriorityParam{ + urgency: 3, + incremental: 1, + } +} + +// Note that HTTP/2 has had two different prioritization schemes, and +// PriorityParam struct below is a superset of both schemes. The exported +// symbols are from RFC 7540 and the non-exported ones are from RFC 9218. + +// PriorityParam are the stream prioritization parameters. type PriorityParam struct { // StreamDep is a 31-bit stream identifier for the // stream that this stream depends on. Zero means no @@ -1156,6 +1235,20 @@ type PriorityParam struct { // the spec, "Add one to the value to obtain a weight between // 1 and 256." Weight uint8 + + // "The urgency (u) parameter value is Integer (see Section 3.3.1 of + // [STRUCTURED-FIELDS]), between 0 and 7 inclusive, in descending order of + // priority. The default is 3." + urgency uint8 + + // "The incremental (i) parameter value is Boolean (see Section 3.3.6 of + // [STRUCTURED-FIELDS]). It indicates if an HTTP response can be processed + // incrementally, i.e., provide some meaningful output as chunks of the + // response arrive." + // + // We use uint8 (i.e. 0 is false, 1 is true) instead of bool so we can + // avoid unnecessary type conversions and because either type takes 1 byte. + incremental uint8 } func (p PriorityParam) IsZero() bool { @@ -1204,6 +1297,74 @@ func (f *Framer) WritePriority(streamID uint32, p PriorityParam) error { return f.endWrite() } +// PriorityUpdateFrame is a PRIORITY_UPDATE frame as described in +// https://www.rfc-editor.org/rfc/rfc9218.html#name-the-priority_update-frame. +type PriorityUpdateFrame struct { + FrameHeader + Priority string + PrioritizedStreamID uint32 +} + +func parseRFC9218Priority(s string, canUseDefault bool) (p PriorityParam, ok bool) { + p = defaultRFC9218Priority(canUseDefault) + ok = httpsfv.ParseDictionary(s, func(key, val, _ string) { + switch key { + case "u": + if u, ok := httpsfv.ParseInteger(val); ok && u >= 0 && u <= 7 { + p.urgency = uint8(u) + } + case "i": + if i, ok := httpsfv.ParseBoolean(val); ok { + if i { + p.incremental = 1 + } else { + p.incremental = 0 + } + } + } + }) + if !ok { + return defaultRFC9218Priority(canUseDefault), ok + } + return p, true +} + +func parsePriorityUpdateFrame(_ *frameCache, fh FrameHeader, countError func(string), payload []byte) (Frame, error) { + if fh.StreamID != 0 { + countError("frame_priority_update_non_zero_stream") + return nil, connError{ErrCodeProtocol, "PRIORITY_UPDATE frame with non-zero stream ID"} + } + if len(payload) < 4 { + countError("frame_priority_update_bad_length") + return nil, connError{ErrCodeFrameSize, fmt.Sprintf("PRIORITY_UPDATE frame payload size was %d; want at least 4", len(payload))} + } + v := binary.BigEndian.Uint32(payload[:4]) + streamID := v & 0x7fffffff // mask off high bit + if streamID == 0 { + countError("frame_priority_update_prioritizing_zero_stream") + return nil, connError{ErrCodeProtocol, "PRIORITY_UPDATE frame with prioritized stream ID of zero"} + } + return &PriorityUpdateFrame{ + FrameHeader: fh, + PrioritizedStreamID: streamID, + Priority: string(payload[4:]), + }, nil +} + +// WritePriorityUpdate writes a PRIORITY_UPDATE frame. +// +// It will perform exactly one Write to the underlying Writer. +// It is the caller's responsibility to not call other Write methods concurrently. +func (f *Framer) WritePriorityUpdate(streamID uint32, priority string) error { + if !validStreamID(streamID) && !f.AllowIllegalWrites { + return errStreamID + } + f.startWrite(FramePriorityUpdate, 0, 0) + f.writeUint32(streamID) + f.writeBytes([]byte(priority)) + return f.endWrite() +} + // A RSTStreamFrame allows for abnormal termination of a stream. // See https://httpwg.org/specs/rfc7540.html#rfc.section.6.4 type RSTStreamFrame struct { @@ -1485,12 +1646,29 @@ func (mh *MetaHeadersFrame) PseudoFields() []hpack.HeaderField { return mh.Fields } +func (mh *MetaHeadersFrame) rfc9218Priority(priorityAware bool) (p PriorityParam, priorityAwareAfter, hasIntermediary bool) { + var s string + for _, field := range mh.Fields { + if field.Name == "priority" { + s = field.Value + priorityAware = true + } + if slices.Contains([]string{"via", "forwarded", "x-forwarded-for"}, field.Name) { + hasIntermediary = true + } + } + // No need to check for ok. parseRFC9218Priority will return a default + // value if there is no priority field or if the field cannot be parsed. + p, _ = parseRFC9218Priority(s, priorityAware && !hasIntermediary) + return p, priorityAware, hasIntermediary +} + func (mh *MetaHeadersFrame) checkPseudos() error { var isRequest, isResponse bool pf := mh.PseudoFields() for i, hf := range pf { switch hf.Name { - case ":method", ":path", ":scheme", ":authority": + case ":method", ":path", ":scheme", ":authority", ":protocol": isRequest = true case ":status": isResponse = true @@ -1498,7 +1676,7 @@ func (mh *MetaHeadersFrame) checkPseudos() error { return pseudoHeaderError(hf.Name) } // Check for duplicates. - // This would be a bad algorithm, but N is 4. + // This would be a bad algorithm, but N is 5. // And this doesn't allocate. for _, hf2 := range pf[:i] { if hf.Name == hf2.Name { diff --git a/vendor/golang.org/x/net/http2/gotrack.go b/vendor/golang.org/x/net/http2/gotrack.go index 9933c9f8c7..9921ca096d 100644 --- a/vendor/golang.org/x/net/http2/gotrack.go +++ b/vendor/golang.org/x/net/http2/gotrack.go @@ -15,21 +15,32 @@ import ( "runtime" "strconv" "sync" + "sync/atomic" ) var DebugGoroutines = os.Getenv("DEBUG_HTTP2_GOROUTINES") == "1" +// Setting DebugGoroutines to false during a test to disable goroutine debugging +// results in race detector complaints when a test leaves goroutines running before +// returning. Tests shouldn't do this, of course, but when they do it generally shows +// up as infrequent, hard-to-debug flakes. (See #66519.) +// +// Disable goroutine debugging during individual tests with an atomic bool. +// (Note that it's safe to enable/disable debugging mid-test, so the actual race condition +// here is harmless.) +var disableDebugGoroutines atomic.Bool + type goroutineLock uint64 func newGoroutineLock() goroutineLock { - if !DebugGoroutines { + if !DebugGoroutines || disableDebugGoroutines.Load() { return 0 } return goroutineLock(curGoroutineID()) } func (g goroutineLock) check() { - if !DebugGoroutines { + if !DebugGoroutines || disableDebugGoroutines.Load() { return } if curGoroutineID() != uint64(g) { @@ -38,7 +49,7 @@ func (g goroutineLock) check() { } func (g goroutineLock) checkNotOn() { - if !DebugGoroutines { + if !DebugGoroutines || disableDebugGoroutines.Load() { return } if curGoroutineID() == uint64(g) { diff --git a/vendor/golang.org/x/net/http2/h2c/h2c.go b/vendor/golang.org/x/net/http2/h2c/h2c.go index 2d6bf861b9..19e94791df 100644 --- a/vendor/golang.org/x/net/http2/h2c/h2c.go +++ b/vendor/golang.org/x/net/http2/h2c/h2c.go @@ -132,11 +132,8 @@ func (s h2cHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { // of the body, and reforward the client preface on the net.Conn this function // creates. func initH2CWithPriorKnowledge(w http.ResponseWriter) (net.Conn, error) { - hijacker, ok := w.(http.Hijacker) - if !ok { - return nil, errors.New("h2c: connection does not support Hijack") - } - conn, rw, err := hijacker.Hijack() + rc := http.NewResponseController(w) + conn, rw, err := rc.Hijack() if err != nil { return nil, err } @@ -163,10 +160,6 @@ func h2cUpgrade(w http.ResponseWriter, r *http.Request) (_ net.Conn, settings [] if err != nil { return nil, nil, err } - hijacker, ok := w.(http.Hijacker) - if !ok { - return nil, nil, errors.New("h2c: connection does not support Hijack") - } body, err := io.ReadAll(r.Body) if err != nil { @@ -174,7 +167,8 @@ func h2cUpgrade(w http.ResponseWriter, r *http.Request) (_ net.Conn, settings [] } r.Body = io.NopCloser(bytes.NewBuffer(body)) - conn, rw, err := hijacker.Hijack() + rc := http.NewResponseController(w) + conn, rw, err := rc.Hijack() if err != nil { return nil, nil, err } diff --git a/vendor/golang.org/x/net/http2/http2.go b/vendor/golang.org/x/net/http2/http2.go index 003e649f30..6320f4eb4c 100644 --- a/vendor/golang.org/x/net/http2/http2.go +++ b/vendor/golang.org/x/net/http2/http2.go @@ -11,16 +11,14 @@ // requires Go 1.6 or later) // // See https://http2.github.io/ for more information on HTTP/2. -// -// See https://http2.golang.org/ for a test server running this code. package http2 // import "golang.org/x/net/http2" import ( "bufio" - "context" "crypto/tls" + "errors" "fmt" - "io" + "net" "net/http" "os" "sort" @@ -36,7 +34,15 @@ var ( VerboseLogs bool logFrameWrites bool logFrameReads bool - inTests bool + + // Enabling extended CONNECT by causes browsers to attempt to use + // WebSockets-over-HTTP/2. This results in problems when the server's websocket + // package doesn't support extended CONNECT. + // + // Disable extended CONNECT by default for now. + // + // Issue #71128. + disableExtendedConnectProtocol = true ) func init() { @@ -49,6 +55,9 @@ func init() { logFrameWrites = true logFrameReads = true } + if strings.Contains(e, "http2xconnect=1") { + disableExtendedConnectProtocol = false + } } const ( @@ -140,6 +149,10 @@ func (s Setting) Valid() error { if s.Val < 16384 || s.Val > 1<<24-1 { return ConnectionError(ErrCodeProtocol) } + case SettingEnableConnectProtocol: + if s.Val != 1 && s.Val != 0 { + return ConnectionError(ErrCodeProtocol) + } } return nil } @@ -149,21 +162,25 @@ func (s Setting) Valid() error { type SettingID uint16 const ( - SettingHeaderTableSize SettingID = 0x1 - SettingEnablePush SettingID = 0x2 - SettingMaxConcurrentStreams SettingID = 0x3 - SettingInitialWindowSize SettingID = 0x4 - SettingMaxFrameSize SettingID = 0x5 - SettingMaxHeaderListSize SettingID = 0x6 + SettingHeaderTableSize SettingID = 0x1 + SettingEnablePush SettingID = 0x2 + SettingMaxConcurrentStreams SettingID = 0x3 + SettingInitialWindowSize SettingID = 0x4 + SettingMaxFrameSize SettingID = 0x5 + SettingMaxHeaderListSize SettingID = 0x6 + SettingEnableConnectProtocol SettingID = 0x8 + SettingNoRFC7540Priorities SettingID = 0x9 ) var settingName = map[SettingID]string{ - SettingHeaderTableSize: "HEADER_TABLE_SIZE", - SettingEnablePush: "ENABLE_PUSH", - SettingMaxConcurrentStreams: "MAX_CONCURRENT_STREAMS", - SettingInitialWindowSize: "INITIAL_WINDOW_SIZE", - SettingMaxFrameSize: "MAX_FRAME_SIZE", - SettingMaxHeaderListSize: "MAX_HEADER_LIST_SIZE", + SettingHeaderTableSize: "HEADER_TABLE_SIZE", + SettingEnablePush: "ENABLE_PUSH", + SettingMaxConcurrentStreams: "MAX_CONCURRENT_STREAMS", + SettingInitialWindowSize: "INITIAL_WINDOW_SIZE", + SettingMaxFrameSize: "MAX_FRAME_SIZE", + SettingMaxHeaderListSize: "MAX_HEADER_LIST_SIZE", + SettingEnableConnectProtocol: "ENABLE_CONNECT_PROTOCOL", + SettingNoRFC7540Priorities: "NO_RFC7540_PRIORITIES", } func (s SettingID) String() string { @@ -237,13 +254,17 @@ func (cw closeWaiter) Wait() { // Its buffered writer is lazily allocated as needed, to minimize // idle memory usage with many connections. type bufferedWriter struct { - _ incomparable - w io.Writer // immutable - bw *bufio.Writer // non-nil when data is buffered + _ incomparable + conn net.Conn // immutable + bw *bufio.Writer // non-nil when data is buffered + byteTimeout time.Duration // immutable, WriteByteTimeout } -func newBufferedWriter(w io.Writer) *bufferedWriter { - return &bufferedWriter{w: w} +func newBufferedWriter(conn net.Conn, timeout time.Duration) *bufferedWriter { + return &bufferedWriter{ + conn: conn, + byteTimeout: timeout, + } } // bufWriterPoolBufferSize is the size of bufio.Writer's @@ -270,7 +291,7 @@ func (w *bufferedWriter) Available() int { func (w *bufferedWriter) Write(p []byte) (n int, err error) { if w.bw == nil { bw := bufWriterPool.Get().(*bufio.Writer) - bw.Reset(w.w) + bw.Reset((*bufferedWriterTimeoutWriter)(w)) w.bw = bw } return w.bw.Write(p) @@ -288,6 +309,32 @@ func (w *bufferedWriter) Flush() error { return err } +type bufferedWriterTimeoutWriter bufferedWriter + +func (w *bufferedWriterTimeoutWriter) Write(p []byte) (n int, err error) { + return writeWithByteTimeout(w.conn, w.byteTimeout, p) +} + +// writeWithByteTimeout writes to conn. +// If more than timeout passes without any bytes being written to the connection, +// the write fails. +func writeWithByteTimeout(conn net.Conn, timeout time.Duration, p []byte) (n int, err error) { + if timeout <= 0 { + return conn.Write(p) + } + for { + conn.SetWriteDeadline(time.Now().Add(timeout)) + nn, err := conn.Write(p[n:]) + n += nn + if n == len(p) || nn == 0 || !errors.Is(err, os.ErrDeadlineExceeded) { + // Either we finished the write, made no progress, or hit the deadline. + // Whichever it is, we're done now. + conn.SetWriteDeadline(time.Time{}) + return n, err + } + } +} + func mustUint31(v int32) uint32 { if v < 0 || v > 2147483647 { panic("out of range") @@ -358,35 +405,7 @@ func (s *sorter) SortStrings(ss []string) { s.v = save } -// validPseudoPath reports whether v is a valid :path pseudo-header -// value. It must be either: -// -// - a non-empty string starting with '/' -// - the string '*', for OPTIONS requests. -// -// For now this is only used a quick check for deciding when to clean -// up Opaque URLs before sending requests from the Transport. -// See golang.org/issue/16847 -// -// We used to enforce that the path also didn't start with "//", but -// Google's GFE accepts such paths and Chrome sends them, so ignore -// that part of the spec. See golang.org/issue/19103. -func validPseudoPath(v string) bool { - return (len(v) > 0 && v[0] == '/') || v == "*" -} - // incomparable is a zero-width, non-comparable type. Adding it to a struct // makes that struct also non-comparable, and generally doesn't add // any size (as long as it's first). type incomparable [0]func() - -// synctestGroupInterface is the methods of synctestGroup used by Server and Transport. -// It's defined as an interface here to let us keep synctestGroup entirely test-only -// and not a part of non-test builds. -type synctestGroupInterface interface { - Join() - Now() time.Time - NewTimer(d time.Duration) timer - AfterFunc(d time.Duration, f func()) timer - ContextWithTimeout(ctx context.Context, d time.Duration) (context.Context, context.CancelFunc) -} diff --git a/vendor/golang.org/x/net/http2/server.go b/vendor/golang.org/x/net/http2/server.go index 6c349f3ec6..7ef807f79d 100644 --- a/vendor/golang.org/x/net/http2/server.go +++ b/vendor/golang.org/x/net/http2/server.go @@ -29,6 +29,7 @@ import ( "bufio" "bytes" "context" + "crypto/rand" "crypto/tls" "errors" "fmt" @@ -49,13 +50,18 @@ import ( "golang.org/x/net/http/httpguts" "golang.org/x/net/http2/hpack" + "golang.org/x/net/internal/httpcommon" ) const ( - prefaceTimeout = 10 * time.Second - firstSettingsTimeout = 2 * time.Second // should be in-flight with preface anyway - handlerChunkWriteSize = 4 << 10 - defaultMaxStreams = 250 // TODO: make this 100 as the GFE seems to? + prefaceTimeout = 10 * time.Second + firstSettingsTimeout = 2 * time.Second // should be in-flight with preface anyway + handlerChunkWriteSize = 4 << 10 + defaultMaxStreams = 250 // TODO: make this 100 as the GFE seems to? + + // maxQueuedControlFrames is the maximum number of control frames like + // SETTINGS, PING and RST_STREAM that will be queued for writing before + // the connection is closed to prevent memory exhaustion attacks. maxQueuedControlFrames = 10000 ) @@ -127,6 +133,22 @@ type Server struct { // If zero or negative, there is no timeout. IdleTimeout time.Duration + // ReadIdleTimeout is the timeout after which a health check using a ping + // frame will be carried out if no frame is received on the connection. + // If zero, no health check is performed. + ReadIdleTimeout time.Duration + + // PingTimeout is the timeout after which the connection will be closed + // if a response to a ping is not received. + // If zero, a default of 15 seconds is used. + PingTimeout time.Duration + + // WriteByteTimeout is the timeout after which a connection will be + // closed if no data can be written to it. The timeout begins when data is + // available to write, and is extended whenever any bytes are written. + // If zero or negative, there is no timeout. + WriteByteTimeout time.Duration + // MaxUploadBufferPerConnection is the size of the initial flow // control window for each connections. The HTTP/2 spec does not // allow this to be smaller than 65535 or larger than 2^32-1. @@ -154,95 +176,15 @@ type Server struct { // so that we don't embed a Mutex in this struct, which will make the // struct non-copyable, which might break some callers. state *serverInternalState - - // Synchronization group used for testing. - // Outside of tests, this is nil. - group synctestGroupInterface -} - -func (s *Server) markNewGoroutine() { - if s.group != nil { - s.group.Join() - } -} - -func (s *Server) now() time.Time { - if s.group != nil { - return s.group.Now() - } - return time.Now() -} - -// newTimer creates a new time.Timer, or a synthetic timer in tests. -func (s *Server) newTimer(d time.Duration) timer { - if s.group != nil { - return s.group.NewTimer(d) - } - return timeTimer{time.NewTimer(d)} -} - -// afterFunc creates a new time.AfterFunc timer, or a synthetic timer in tests. -func (s *Server) afterFunc(d time.Duration, f func()) timer { - if s.group != nil { - return s.group.AfterFunc(d, f) - } - return timeTimer{time.AfterFunc(d, f)} -} - -func (s *Server) initialConnRecvWindowSize() int32 { - if s.MaxUploadBufferPerConnection >= initialWindowSize { - return s.MaxUploadBufferPerConnection - } - return 1 << 20 -} - -func (s *Server) initialStreamRecvWindowSize() int32 { - if s.MaxUploadBufferPerStream > 0 { - return s.MaxUploadBufferPerStream - } - return 1 << 20 -} - -func (s *Server) maxReadFrameSize() uint32 { - if v := s.MaxReadFrameSize; v >= minMaxFrameSize && v <= maxFrameSize { - return v - } - return defaultMaxReadFrameSize -} - -func (s *Server) maxConcurrentStreams() uint32 { - if v := s.MaxConcurrentStreams; v > 0 { - return v - } - return defaultMaxStreams -} - -func (s *Server) maxDecoderHeaderTableSize() uint32 { - if v := s.MaxDecoderHeaderTableSize; v > 0 { - return v - } - return initialHeaderTableSize -} - -func (s *Server) maxEncoderHeaderTableSize() uint32 { - if v := s.MaxEncoderHeaderTableSize; v > 0 { - return v - } - return initialHeaderTableSize -} - -// maxQueuedControlFrames is the maximum number of control frames like -// SETTINGS, PING and RST_STREAM that will be queued for writing before -// the connection is closed to prevent memory exhaustion attacks. -func (s *Server) maxQueuedControlFrames() int { - // TODO: if anybody asks, add a Server field, and remember to define the - // behavior of negative values. - return maxQueuedControlFrames } type serverInternalState struct { mu sync.Mutex activeConns map[*serverConn]struct{} + + // Pool of error channels. This is per-Server rather than global + // because channels can't be reused across synctest bubbles. + errChanPool sync.Pool } func (s *serverInternalState) registerConn(sc *serverConn) { @@ -274,6 +216,27 @@ func (s *serverInternalState) startGracefulShutdown() { s.mu.Unlock() } +// Global error channel pool used for uninitialized Servers. +// We use a per-Server pool when possible to avoid using channels across synctest bubbles. +var errChanPool = sync.Pool{ + New: func() any { return make(chan error, 1) }, +} + +func (s *serverInternalState) getErrChan() chan error { + if s == nil { + return errChanPool.Get().(chan error) // Server used without calling ConfigureServer + } + return s.errChanPool.Get().(chan error) +} + +func (s *serverInternalState) putErrChan(ch chan error) { + if s == nil { + errChanPool.Put(ch) // Server used without calling ConfigureServer + return + } + s.errChanPool.Put(ch) +} + // ConfigureServer adds HTTP/2 support to a net/http Server. // // The configuration conf may be nil. @@ -286,7 +249,10 @@ func ConfigureServer(s *http.Server, conf *Server) error { if conf == nil { conf = new(Server) } - conf.state = &serverInternalState{activeConns: make(map[*serverConn]struct{})} + conf.state = &serverInternalState{ + activeConns: make(map[*serverConn]struct{}), + errChanPool: sync.Pool{New: func() any { return make(chan error, 1) }}, + } if h1, h2 := s, conf; h2.IdleTimeout == 0 { if h1.IdleTimeout != 0 { h2.IdleTimeout = h1.IdleTimeout @@ -336,7 +302,7 @@ func ConfigureServer(s *http.Server, conf *Server) error { if s.TLSNextProto == nil { s.TLSNextProto = map[string]func(*http.Server, *tls.Conn, http.Handler){} } - protoHandler := func(hs *http.Server, c *tls.Conn, h http.Handler) { + protoHandler := func(hs *http.Server, c net.Conn, h http.Handler, sawClientPreface bool) { if testHookOnConn != nil { testHookOnConn() } @@ -353,12 +319,31 @@ func ConfigureServer(s *http.Server, conf *Server) error { ctx = bc.BaseContext() } conf.ServeConn(c, &ServeConnOpts{ - Context: ctx, - Handler: h, - BaseConfig: hs, + Context: ctx, + Handler: h, + BaseConfig: hs, + SawClientPreface: sawClientPreface, }) } - s.TLSNextProto[NextProtoTLS] = protoHandler + s.TLSNextProto[NextProtoTLS] = func(hs *http.Server, c *tls.Conn, h http.Handler) { + protoHandler(hs, c, h, false) + } + // The "unencrypted_http2" TLSNextProto key is used to pass off non-TLS HTTP/2 conns. + // + // A connection passed in this method has already had the HTTP/2 preface read from it. + s.TLSNextProto[nextProtoUnencryptedHTTP2] = func(hs *http.Server, c *tls.Conn, h http.Handler) { + nc, err := unencryptedNetConnFromTLSConn(c) + if err != nil { + if lg := hs.ErrorLog; lg != nil { + lg.Print(err) + } else { + log.Print(err) + } + go c.Close() + return + } + protoHandler(hs, nc, h, true) + } return nil } @@ -433,6 +418,9 @@ func (o *ServeConnOpts) handler() http.Handler { // // The opts parameter is optional. If nil, default values are used. func (s *Server) ServeConn(c net.Conn, opts *ServeConnOpts) { + if opts == nil { + opts = &ServeConnOpts{} + } s.serveConn(c, opts, nil) } @@ -440,13 +428,15 @@ func (s *Server) serveConn(c net.Conn, opts *ServeConnOpts, newf func(*serverCon baseCtx, cancel := serverConnBaseContext(c, opts) defer cancel() + http1srv := opts.baseConfig() + conf := configFromServer(http1srv, s) sc := &serverConn{ srv: s, - hs: opts.baseConfig(), + hs: http1srv, conn: c, baseCtx: baseCtx, remoteAddrStr: c.RemoteAddr().String(), - bw: newBufferedWriter(c), + bw: newBufferedWriter(c, conf.WriteByteTimeout), handler: opts.handler(), streams: make(map[uint32]*stream), readFrameCh: make(chan readFrameResult), @@ -456,9 +446,12 @@ func (s *Server) serveConn(c net.Conn, opts *ServeConnOpts, newf func(*serverCon bodyReadCh: make(chan bodyReadMsg), // buffering doesn't matter either way doneServing: make(chan struct{}), clientMaxStreams: math.MaxUint32, // Section 6.5.2: "Initially, there is no limit to this value" - advMaxStreams: s.maxConcurrentStreams(), + advMaxStreams: conf.MaxConcurrentStreams, initialStreamSendWindowSize: initialWindowSize, + initialStreamRecvWindowSize: conf.MaxUploadBufferPerStream, maxFrameSize: initialMaxFrameSize, + pingTimeout: conf.PingTimeout, + countErrorFunc: conf.CountError, serveG: newGoroutineLock(), pushEnabled: true, sawClientPreface: opts.SawClientPreface, @@ -479,10 +472,13 @@ func (s *Server) serveConn(c net.Conn, opts *ServeConnOpts, newf func(*serverCon sc.conn.SetWriteDeadline(time.Time{}) } - if s.NewWriteScheduler != nil { + switch { + case s.NewWriteScheduler != nil: sc.writeSched = s.NewWriteScheduler() - } else { + case clientPriorityDisabled(http1srv): sc.writeSched = newRoundRobinWriteScheduler() + default: + sc.writeSched = newPriorityWriteSchedulerRFC9218() } // These start at the RFC-specified defaults. If there is a higher @@ -491,15 +487,15 @@ func (s *Server) serveConn(c net.Conn, opts *ServeConnOpts, newf func(*serverCon sc.flow.add(initialWindowSize) sc.inflow.init(initialWindowSize) sc.hpackEncoder = hpack.NewEncoder(&sc.headerWriteBuf) - sc.hpackEncoder.SetMaxDynamicTableSizeLimit(s.maxEncoderHeaderTableSize()) + sc.hpackEncoder.SetMaxDynamicTableSizeLimit(conf.MaxEncoderHeaderTableSize) fr := NewFramer(sc.bw, c) - if s.CountError != nil { - fr.countError = s.CountError + if conf.CountError != nil { + fr.countError = conf.CountError } - fr.ReadMetaHeaders = hpack.NewDecoder(s.maxDecoderHeaderTableSize(), nil) + fr.ReadMetaHeaders = hpack.NewDecoder(conf.MaxDecoderHeaderTableSize, nil) fr.MaxHeaderListSize = sc.maxHeaderListSize() - fr.SetMaxReadFrameSize(s.maxReadFrameSize()) + fr.SetMaxReadFrameSize(conf.MaxReadFrameSize) sc.framer = fr if tc, ok := c.(connectionStater); ok { @@ -532,7 +528,7 @@ func (s *Server) serveConn(c net.Conn, opts *ServeConnOpts, newf func(*serverCon // So for now, do nothing here again. } - if !s.PermitProhibitedCipherSuites && isBadCipher(sc.tlsState.CipherSuite) { + if !conf.PermitProhibitedCipherSuites && isBadCipher(sc.tlsState.CipherSuite) { // "Endpoints MAY choose to generate a connection error // (Section 5.4.1) of type INADEQUATE_SECURITY if one of // the prohibited cipher suites are negotiated." @@ -569,7 +565,7 @@ func (s *Server) serveConn(c net.Conn, opts *ServeConnOpts, newf func(*serverCon opts.UpgradeRequest = nil } - sc.serve() + sc.serve(conf) } func serverConnBaseContext(c net.Conn, opts *ServeConnOpts) (ctx context.Context, cancel func()) { @@ -609,6 +605,7 @@ type serverConn struct { tlsState *tls.ConnectionState // shared by all handlers, like net/http remoteAddrStr string writeSched WriteScheduler + countErrorFunc func(errType string) // Everything following is owned by the serve loop; use serveG.check(): serveG goroutineLock // used to verify funcs are on serve() @@ -628,6 +625,7 @@ type serverConn struct { streams map[uint32]*stream unstartedHandlers []unstartedHandler initialStreamSendWindowSize int32 + initialStreamRecvWindowSize int32 maxFrameSize int32 peerMaxHeaderListSize uint32 // zero means unknown (default) canonHeader map[string]string // http2-lower-case -> Go-Canonical-Case @@ -638,9 +636,14 @@ type serverConn struct { inGoAway bool // we've started to or sent GOAWAY inFrameScheduleLoop bool // whether we're in the scheduleFrameWrite loop needToSendGoAway bool // we need to schedule a GOAWAY frame write + pingSent bool + sentPingData [8]byte goAwayCode ErrCode - shutdownTimer timer // nil until used - idleTimer timer // nil if unused + shutdownTimer *time.Timer // nil until used + idleTimer *time.Timer // nil if unused + readIdleTimeout time.Duration + pingTimeout time.Duration + readIdleTimer *time.Timer // nil if unused // Owned by the writeFrameAsync goroutine: headerWriteBuf bytes.Buffer @@ -648,6 +651,23 @@ type serverConn struct { // Used by startGracefulShutdown. shutdownOnce sync.Once + + // Used for RFC 9218 prioritization. + hasIntermediary bool // connection is done via an intermediary / proxy + priorityAware bool // the client has sent priority signal, meaning that it is aware of it. +} + +func (sc *serverConn) writeSchedIgnoresRFC7540() bool { + switch sc.writeSched.(type) { + case *priorityWriteSchedulerRFC9218: + return true + case *randomWriteScheduler: + return true + case *roundRobinWriteScheduler: + return true + default: + return false + } } func (sc *serverConn) maxHeaderListSize() uint32 { @@ -655,11 +675,7 @@ func (sc *serverConn) maxHeaderListSize() uint32 { if n <= 0 { n = http.DefaultMaxHeaderBytes } - // http2's count is in a slightly different unit and includes 32 bytes per pair. - // So, take the net/http.Server value and pad it up a bit, assuming 10 headers. - const perFieldOverhead = 32 // per http2 spec - const typicalHeaders = 10 // conservative - return uint32(n + typicalHeaders*perFieldOverhead) + return uint32(adjustHTTP1MaxHeaderSize(int64(n))) } func (sc *serverConn) curOpenStreams() uint32 { @@ -689,12 +705,12 @@ type stream struct { flow outflow // limits writing from Handler to client inflow inflow // what the client is allowed to POST/etc to us state streamState - resetQueued bool // RST_STREAM queued for write; set by sc.resetStream - gotTrailerHeader bool // HEADER frame for trailers was seen - wroteHeaders bool // whether we wrote headers (not status 100) - readDeadline timer // nil if unused - writeDeadline timer // nil if unused - closeErr error // set before cw is closed + resetQueued bool // RST_STREAM queued for write; set by sc.resetStream + gotTrailerHeader bool // HEADER frame for trailers was seen + wroteHeaders bool // whether we wrote headers (not status 100) + readDeadline *time.Timer // nil if unused + writeDeadline *time.Timer // nil if unused + closeErr error // set before cw is closed trailer http.Header // accumulated trailers reqTrailer http.Header // handler's Request.Trailer @@ -815,8 +831,7 @@ const maxCachedCanonicalHeadersKeysSize = 2048 func (sc *serverConn) canonicalHeader(v string) string { sc.serveG.check() - buildCommonHeaderMapsOnce() - cv, ok := commonCanonHeader[v] + cv, ok := httpcommon.CachedCanonicalHeader(v) if ok { return cv } @@ -851,7 +866,6 @@ type readFrameResult struct { // consumer is done with the frame. // It's run on its own goroutine. func (sc *serverConn) readFrames() { - sc.srv.markNewGoroutine() gate := make(chan struct{}) gateDone := func() { gate <- struct{}{} } for { @@ -884,7 +898,6 @@ type frameWriteResult struct { // At most one goroutine can be running writeFrameAsync at a time per // serverConn. func (sc *serverConn) writeFrameAsync(wr FrameWriteRequest, wd *writeData) { - sc.srv.markNewGoroutine() var err error if wd == nil { err = wr.write.writeFrame(sc) @@ -923,7 +936,7 @@ func (sc *serverConn) notePanic() { } } -func (sc *serverConn) serve() { +func (sc *serverConn) serve(conf http2Config) { sc.serveG.check() defer sc.notePanic() defer sc.conn.Close() @@ -935,20 +948,27 @@ func (sc *serverConn) serve() { sc.vlogf("http2: server connection from %v on %p", sc.conn.RemoteAddr(), sc.hs) } + settings := writeSettings{ + {SettingMaxFrameSize, conf.MaxReadFrameSize}, + {SettingMaxConcurrentStreams, sc.advMaxStreams}, + {SettingMaxHeaderListSize, sc.maxHeaderListSize()}, + {SettingHeaderTableSize, conf.MaxDecoderHeaderTableSize}, + {SettingInitialWindowSize, uint32(sc.initialStreamRecvWindowSize)}, + } + if !disableExtendedConnectProtocol { + settings = append(settings, Setting{SettingEnableConnectProtocol, 1}) + } + if sc.writeSchedIgnoresRFC7540() { + settings = append(settings, Setting{SettingNoRFC7540Priorities, 1}) + } sc.writeFrame(FrameWriteRequest{ - write: writeSettings{ - {SettingMaxFrameSize, sc.srv.maxReadFrameSize()}, - {SettingMaxConcurrentStreams, sc.advMaxStreams}, - {SettingMaxHeaderListSize, sc.maxHeaderListSize()}, - {SettingHeaderTableSize, sc.srv.maxDecoderHeaderTableSize()}, - {SettingInitialWindowSize, uint32(sc.srv.initialStreamRecvWindowSize())}, - }, + write: settings, }) sc.unackedSettings++ // Each connection starts with initialWindowSize inflow tokens. // If a higher value is configured, we add more tokens. - if diff := sc.srv.initialConnRecvWindowSize() - initialWindowSize; diff > 0 { + if diff := conf.MaxUploadBufferPerConnection - initialWindowSize; diff > 0 { sc.sendWindowUpdate(nil, int(diff)) } @@ -964,15 +984,22 @@ func (sc *serverConn) serve() { sc.setConnState(http.StateIdle) if sc.srv.IdleTimeout > 0 { - sc.idleTimer = sc.srv.afterFunc(sc.srv.IdleTimeout, sc.onIdleTimer) + sc.idleTimer = time.AfterFunc(sc.srv.IdleTimeout, sc.onIdleTimer) defer sc.idleTimer.Stop() } + if conf.SendPingTimeout > 0 { + sc.readIdleTimeout = conf.SendPingTimeout + sc.readIdleTimer = time.AfterFunc(conf.SendPingTimeout, sc.onReadIdleTimer) + defer sc.readIdleTimer.Stop() + } + go sc.readFrames() // closed by defer sc.conn.Close above - settingsTimer := sc.srv.afterFunc(firstSettingsTimeout, sc.onSettingsTimer) + settingsTimer := time.AfterFunc(firstSettingsTimeout, sc.onSettingsTimer) defer settingsTimer.Stop() + lastFrameTime := time.Now() loopNum := 0 for { loopNum++ @@ -986,6 +1013,7 @@ func (sc *serverConn) serve() { case res := <-sc.wroteFrameCh: sc.wroteFrame(res) case res := <-sc.readFrameCh: + lastFrameTime = time.Now() // Process any written frames before reading new frames from the client since a // written frame could have triggered a new stream to be started. if sc.writingFrameAsync { @@ -1017,6 +1045,8 @@ func (sc *serverConn) serve() { case idleTimerMsg: sc.vlogf("connection is idle") sc.goAway(ErrCodeNo) + case readIdleTimerMsg: + sc.handlePingTimer(lastFrameTime) case shutdownTimerMsg: sc.vlogf("GOAWAY close timer fired; closing conn from %v", sc.conn.RemoteAddr()) return @@ -1039,7 +1069,7 @@ func (sc *serverConn) serve() { // If the peer is causing us to generate a lot of control frames, // but not reading them from us, assume they are trying to make us // run out of memory. - if sc.queuedControlFrames > sc.srv.maxQueuedControlFrames() { + if sc.queuedControlFrames > maxQueuedControlFrames { sc.vlogf("http2: too many control frames in send queue, closing connection") return } @@ -1055,12 +1085,42 @@ func (sc *serverConn) serve() { } } +func (sc *serverConn) handlePingTimer(lastFrameReadTime time.Time) { + if sc.pingSent { + sc.logf("timeout waiting for PING response") + if f := sc.countErrorFunc; f != nil { + f("conn_close_lost_ping") + } + sc.conn.Close() + return + } + + pingAt := lastFrameReadTime.Add(sc.readIdleTimeout) + now := time.Now() + if pingAt.After(now) { + // We received frames since arming the ping timer. + // Reset it for the next possible timeout. + sc.readIdleTimer.Reset(pingAt.Sub(now)) + return + } + + sc.pingSent = true + // Ignore crypto/rand.Read errors: It generally can't fail, and worse case if it does + // is we send a PING frame containing 0s. + _, _ = rand.Read(sc.sentPingData[:]) + sc.writeFrame(FrameWriteRequest{ + write: &writePing{data: sc.sentPingData}, + }) + sc.readIdleTimer.Reset(sc.pingTimeout) +} + type serverMessage int // Message values sent to serveMsgCh. var ( settingsTimerMsg = new(serverMessage) idleTimerMsg = new(serverMessage) + readIdleTimerMsg = new(serverMessage) shutdownTimerMsg = new(serverMessage) gracefulShutdownMsg = new(serverMessage) handlerDoneMsg = new(serverMessage) @@ -1068,6 +1128,7 @@ var ( func (sc *serverConn) onSettingsTimer() { sc.sendServeMsg(settingsTimerMsg) } func (sc *serverConn) onIdleTimer() { sc.sendServeMsg(idleTimerMsg) } +func (sc *serverConn) onReadIdleTimer() { sc.sendServeMsg(readIdleTimerMsg) } func (sc *serverConn) onShutdownTimer() { sc.sendServeMsg(shutdownTimerMsg) } func (sc *serverConn) sendServeMsg(msg interface{}) { @@ -1099,10 +1160,10 @@ func (sc *serverConn) readPreface() error { errc <- nil } }() - timer := sc.srv.newTimer(prefaceTimeout) // TODO: configurable on *Server? + timer := time.NewTimer(prefaceTimeout) // TODO: configurable on *Server? defer timer.Stop() select { - case <-timer.C(): + case <-timer.C: return errPrefaceTimeout case err := <-errc: if err == nil { @@ -1114,10 +1175,6 @@ func (sc *serverConn) readPreface() error { } } -var errChanPool = sync.Pool{ - New: func() interface{} { return make(chan error, 1) }, -} - var writeDataPool = sync.Pool{ New: func() interface{} { return new(writeData) }, } @@ -1125,7 +1182,7 @@ var writeDataPool = sync.Pool{ // writeDataFromHandler writes DATA response frames from a handler on // the given stream. func (sc *serverConn) writeDataFromHandler(stream *stream, data []byte, endStream bool) error { - ch := errChanPool.Get().(chan error) + ch := sc.srv.state.getErrChan() writeArg := writeDataPool.Get().(*writeData) *writeArg = writeData{stream.id, data, endStream} err := sc.writeFrameFromHandler(FrameWriteRequest{ @@ -1157,7 +1214,7 @@ func (sc *serverConn) writeDataFromHandler(stream *stream, data []byte, endStrea return errStreamClosed } } - errChanPool.Put(ch) + sc.srv.state.putErrChan(ch) if frameWriteDone { writeDataPool.Put(writeArg) } @@ -1320,6 +1377,10 @@ func (sc *serverConn) wroteFrame(res frameWriteResult) { sc.writingFrame = false sc.writingFrameAsync = false + if res.err != nil { + sc.conn.Close() + } + wr := res.wr if writeEndsStream(wr.write) { @@ -1467,7 +1528,7 @@ func (sc *serverConn) goAway(code ErrCode) { func (sc *serverConn) shutDownIn(d time.Duration) { sc.serveG.check() - sc.shutdownTimer = sc.srv.afterFunc(d, sc.onShutdownTimer) + sc.shutdownTimer = time.AfterFunc(d, sc.onShutdownTimer) } func (sc *serverConn) resetStream(se StreamError) { @@ -1585,6 +1646,8 @@ func (sc *serverConn) processFrame(f Frame) error { // A client cannot push. Thus, servers MUST treat the receipt of a PUSH_PROMISE // frame as a connection error (Section 5.4.1) of type PROTOCOL_ERROR. return sc.countError("push_promise", ConnectionError(ErrCodeProtocol)) + case *PriorityUpdateFrame: + return sc.processPriorityUpdate(f) default: sc.vlogf("http2: server ignoring frame: %v", f.Header()) return nil @@ -1594,6 +1657,11 @@ func (sc *serverConn) processFrame(f Frame) error { func (sc *serverConn) processPing(f *PingFrame) error { sc.serveG.check() if f.IsAck() { + if sc.pingSent && sc.sentPingData == f.Data { + // This is a response to a PING we sent. + sc.pingSent = false + sc.readIdleTimer.Reset(sc.readIdleTimeout) + } // 6.7 PING: " An endpoint MUST NOT respond to PING frames // containing this flag." return nil @@ -1757,6 +1825,13 @@ func (sc *serverConn) processSetting(s Setting) error { sc.maxFrameSize = int32(s.Val) // the maximum valid s.Val is < 2^31 case SettingMaxHeaderListSize: sc.peerMaxHeaderListSize = s.Val + case SettingEnableConnectProtocol: + // Receipt of this parameter by a server does not + // have any impact + case SettingNoRFC7540Priorities: + if s.Val > 1 { + return ConnectionError(ErrCodeProtocol) + } default: // Unknown setting: "An endpoint that receives a SETTINGS // frame with any unknown or unsupported identifier MUST @@ -2027,13 +2102,33 @@ func (sc *serverConn) processHeaders(f *MetaHeadersFrame) error { if f.StreamEnded() { initialState = stateHalfClosedRemote } - st := sc.newStream(id, 0, initialState) + + // We are handling two special cases here: + // 1. When a request is sent via an intermediary, we force priority to be + // u=3,i. This is essentially a round-robin behavior, and is done to ensure + // fairness between, for example, multiple clients using the same proxy. + // 2. Until a client has shown that it is aware of RFC 9218, we make its + // streams non-incremental by default. This is done to preserve the + // historical behavior of handling streams in a round-robin manner, rather + // than one-by-one to completion. + initialPriority := defaultRFC9218Priority(sc.priorityAware && !sc.hasIntermediary) + if _, ok := sc.writeSched.(*priorityWriteSchedulerRFC9218); ok && !sc.hasIntermediary { + headerPriority, priorityAware, hasIntermediary := f.rfc9218Priority(sc.priorityAware) + initialPriority = headerPriority + sc.hasIntermediary = hasIntermediary + if priorityAware { + sc.priorityAware = true + } + } + st := sc.newStream(id, 0, initialState, initialPriority) if f.HasPriority() { if err := sc.checkPriority(f.StreamID, f.Priority); err != nil { return err } - sc.writeSched.AdjustStream(st.id, f.Priority) + if !sc.writeSchedIgnoresRFC7540() { + sc.writeSched.AdjustStream(st.id, f.Priority) + } } rw, req, err := sc.newWriterAndRequest(st, f) @@ -2064,7 +2159,7 @@ func (sc *serverConn) processHeaders(f *MetaHeadersFrame) error { // (in Go 1.8), though. That's a more sane option anyway. if sc.hs.ReadTimeout > 0 { sc.conn.SetReadDeadline(time.Time{}) - st.readDeadline = sc.srv.afterFunc(sc.hs.ReadTimeout, st.onReadTimeout) + st.readDeadline = time.AfterFunc(sc.hs.ReadTimeout, st.onReadTimeout) } return sc.scheduleHandler(id, rw, req, handler) @@ -2074,7 +2169,7 @@ func (sc *serverConn) upgradeRequest(req *http.Request) { sc.serveG.check() id := uint32(1) sc.maxClientStreamID = id - st := sc.newStream(id, 0, stateHalfClosedRemote) + st := sc.newStream(id, 0, stateHalfClosedRemote, defaultRFC9218Priority(sc.priorityAware && !sc.hasIntermediary)) st.reqTrailer = req.Trailer if st.reqTrailer != nil { st.trailer = make(http.Header) @@ -2139,11 +2234,32 @@ func (sc *serverConn) processPriority(f *PriorityFrame) error { if err := sc.checkPriority(f.StreamID, f.PriorityParam); err != nil { return err } + // We need to avoid calling AdjustStream when using the RFC 9218 write + // scheduler. Otherwise, incremental's zero value in PriorityParam will + // unexpectedly make all streams non-incremental. This causes us to process + // streams one-by-one to completion rather than doing it in a round-robin + // manner (the historical behavior), which might be unexpected to users. + if sc.writeSchedIgnoresRFC7540() { + return nil + } sc.writeSched.AdjustStream(f.StreamID, f.PriorityParam) return nil } -func (sc *serverConn) newStream(id, pusherID uint32, state streamState) *stream { +func (sc *serverConn) processPriorityUpdate(f *PriorityUpdateFrame) error { + sc.priorityAware = true + if _, ok := sc.writeSched.(*priorityWriteSchedulerRFC9218); !ok { + return nil + } + p, ok := parseRFC9218Priority(f.Priority, sc.priorityAware) + if !ok { + return sc.countError("unparsable_priority_update", streamError(f.PrioritizedStreamID, ErrCodeProtocol)) + } + sc.writeSched.AdjustStream(f.PrioritizedStreamID, p) + return nil +} + +func (sc *serverConn) newStream(id, pusherID uint32, state streamState, priority PriorityParam) *stream { sc.serveG.check() if id == 0 { panic("internal error: cannot create stream with id 0") @@ -2160,13 +2276,13 @@ func (sc *serverConn) newStream(id, pusherID uint32, state streamState) *stream st.cw.Init() st.flow.conn = &sc.flow // link to conn-level counter st.flow.add(sc.initialStreamSendWindowSize) - st.inflow.init(sc.srv.initialStreamRecvWindowSize()) + st.inflow.init(sc.initialStreamRecvWindowSize) if sc.hs.WriteTimeout > 0 { - st.writeDeadline = sc.srv.afterFunc(sc.hs.WriteTimeout, st.onWriteTimeout) + st.writeDeadline = time.AfterFunc(sc.hs.WriteTimeout, st.onWriteTimeout) } sc.streams[id] = st - sc.writeSched.OpenStream(st.id, OpenStreamOptions{PusherID: pusherID}) + sc.writeSched.OpenStream(st.id, OpenStreamOptions{PusherID: pusherID, priority: priority}) if st.isPushed() { sc.curPushedStreams++ } else { @@ -2182,19 +2298,25 @@ func (sc *serverConn) newStream(id, pusherID uint32, state streamState) *stream func (sc *serverConn) newWriterAndRequest(st *stream, f *MetaHeadersFrame) (*responseWriter, *http.Request, error) { sc.serveG.check() - rp := requestParam{ - method: f.PseudoValue("method"), - scheme: f.PseudoValue("scheme"), - authority: f.PseudoValue("authority"), - path: f.PseudoValue("path"), + rp := httpcommon.ServerRequestParam{ + Method: f.PseudoValue("method"), + Scheme: f.PseudoValue("scheme"), + Authority: f.PseudoValue("authority"), + Path: f.PseudoValue("path"), + Protocol: f.PseudoValue("protocol"), + } + + // extended connect is disabled, so we should not see :protocol + if disableExtendedConnectProtocol && rp.Protocol != "" { + return nil, nil, sc.countError("bad_connect", streamError(f.StreamID, ErrCodeProtocol)) } - isConnect := rp.method == "CONNECT" + isConnect := rp.Method == "CONNECT" if isConnect { - if rp.path != "" || rp.scheme != "" || rp.authority == "" { + if rp.Protocol == "" && (rp.Path != "" || rp.Scheme != "" || rp.Authority == "") { return nil, nil, sc.countError("bad_connect", streamError(f.StreamID, ErrCodeProtocol)) } - } else if rp.method == "" || rp.path == "" || (rp.scheme != "https" && rp.scheme != "http") { + } else if rp.Method == "" || rp.Path == "" || (rp.Scheme != "https" && rp.Scheme != "http") { // See 8.1.2.6 Malformed Requests and Responses: // // Malformed requests or responses that are detected @@ -2208,12 +2330,16 @@ func (sc *serverConn) newWriterAndRequest(st *stream, f *MetaHeadersFrame) (*res return nil, nil, sc.countError("bad_path_method", streamError(f.StreamID, ErrCodeProtocol)) } - rp.header = make(http.Header) + header := make(http.Header) + rp.Header = header for _, hf := range f.RegularFields() { - rp.header.Add(sc.canonicalHeader(hf.Name), hf.Value) + header.Add(sc.canonicalHeader(hf.Name), hf.Value) + } + if rp.Authority == "" { + rp.Authority = header.Get("Host") } - if rp.authority == "" { - rp.authority = rp.header.Get("Host") + if rp.Protocol != "" { + header.Set(":protocol", rp.Protocol) } rw, req, err := sc.newWriterAndRequestNoBody(st, rp) @@ -2222,7 +2348,7 @@ func (sc *serverConn) newWriterAndRequest(st *stream, f *MetaHeadersFrame) (*res } bodyOpen := !f.StreamEnded() if bodyOpen { - if vv, ok := rp.header["Content-Length"]; ok { + if vv, ok := rp.Header["Content-Length"]; ok { if cl, err := strconv.ParseUint(vv[0], 10, 63); err == nil { req.ContentLength = int64(cl) } else { @@ -2238,83 +2364,38 @@ func (sc *serverConn) newWriterAndRequest(st *stream, f *MetaHeadersFrame) (*res return rw, req, nil } -type requestParam struct { - method string - scheme, authority, path string - header http.Header -} - -func (sc *serverConn) newWriterAndRequestNoBody(st *stream, rp requestParam) (*responseWriter, *http.Request, error) { +func (sc *serverConn) newWriterAndRequestNoBody(st *stream, rp httpcommon.ServerRequestParam) (*responseWriter, *http.Request, error) { sc.serveG.check() var tlsState *tls.ConnectionState // nil if not scheme https - if rp.scheme == "https" { + if rp.Scheme == "https" { tlsState = sc.tlsState } - needsContinue := httpguts.HeaderValuesContainsToken(rp.header["Expect"], "100-continue") - if needsContinue { - rp.header.Del("Expect") - } - // Merge Cookie headers into one "; "-delimited value. - if cookies := rp.header["Cookie"]; len(cookies) > 1 { - rp.header.Set("Cookie", strings.Join(cookies, "; ")) - } - - // Setup Trailers - var trailer http.Header - for _, v := range rp.header["Trailer"] { - for _, key := range strings.Split(v, ",") { - key = http.CanonicalHeaderKey(textproto.TrimString(key)) - switch key { - case "Transfer-Encoding", "Trailer", "Content-Length": - // Bogus. (copy of http1 rules) - // Ignore. - default: - if trailer == nil { - trailer = make(http.Header) - } - trailer[key] = nil - } - } - } - delete(rp.header, "Trailer") - - var url_ *url.URL - var requestURI string - if rp.method == "CONNECT" { - url_ = &url.URL{Host: rp.authority} - requestURI = rp.authority // mimic HTTP/1 server behavior - } else { - var err error - url_, err = url.ParseRequestURI(rp.path) - if err != nil { - return nil, nil, sc.countError("bad_path", streamError(st.id, ErrCodeProtocol)) - } - requestURI = rp.path + res := httpcommon.NewServerRequest(rp) + if res.InvalidReason != "" { + return nil, nil, sc.countError(res.InvalidReason, streamError(st.id, ErrCodeProtocol)) } body := &requestBody{ conn: sc, stream: st, - needsContinue: needsContinue, + needsContinue: res.NeedsContinue, } - req := &http.Request{ - Method: rp.method, - URL: url_, + req := (&http.Request{ + Method: rp.Method, + URL: res.URL, RemoteAddr: sc.remoteAddrStr, - Header: rp.header, - RequestURI: requestURI, + Header: rp.Header, + RequestURI: res.RequestURI, Proto: "HTTP/2.0", ProtoMajor: 2, ProtoMinor: 0, TLS: tlsState, - Host: rp.authority, + Host: rp.Authority, Body: body, - Trailer: trailer, - } - req = req.WithContext(st.ctx) - + Trailer: res.Trailer, + }).WithContext(st.ctx) rw := sc.newResponseWriter(st, req) return rw, req, nil } @@ -2386,7 +2467,6 @@ func (sc *serverConn) handlerDone() { // Run on its own goroutine. func (sc *serverConn) runHandler(rw *responseWriter, req *http.Request, handler func(http.ResponseWriter, *http.Request)) { - sc.srv.markNewGoroutine() defer sc.sendServeMsg(handlerDoneMsg) didPanic := true defer func() { @@ -2435,7 +2515,7 @@ func (sc *serverConn) writeHeaders(st *stream, headerData *writeResHeaders) erro // waiting for this frame to be written, so an http.Flush mid-handler // writes out the correct value of keys, before a handler later potentially // mutates it. - errc = errChanPool.Get().(chan error) + errc = sc.srv.state.getErrChan() } if err := sc.writeFrameFromHandler(FrameWriteRequest{ write: headerData, @@ -2447,7 +2527,7 @@ func (sc *serverConn) writeHeaders(st *stream, headerData *writeResHeaders) erro if errc != nil { select { case err := <-errc: - errChanPool.Put(errc) + sc.srv.state.putErrChan(errc) return err case <-sc.doneServing: return errClientDisconnected @@ -2554,7 +2634,7 @@ func (b *requestBody) Read(p []byte) (n int, err error) { if err == io.EOF { b.sawEOF = true } - if b.conn == nil && inTests { + if b.conn == nil { return } b.conn.noteBodyReadFromHandler(b.stream, n, err) @@ -2683,7 +2763,7 @@ func (rws *responseWriterState) writeChunk(p []byte) (n int, err error) { var date string if _, ok := rws.snapHeader["Date"]; !ok { // TODO(bradfitz): be faster here, like net/http? measure. - date = rws.conn.srv.now().UTC().Format(http.TimeFormat) + date = time.Now().UTC().Format(http.TimeFormat) } for _, v := range rws.snapHeader["Trailer"] { @@ -2805,7 +2885,7 @@ func (rws *responseWriterState) promoteUndeclaredTrailers() { func (w *responseWriter) SetReadDeadline(deadline time.Time) error { st := w.rws.stream - if !deadline.IsZero() && deadline.Before(w.rws.conn.srv.now()) { + if !deadline.IsZero() && deadline.Before(time.Now()) { // If we're setting a deadline in the past, reset the stream immediately // so writes after SetWriteDeadline returns will fail. st.onReadTimeout() @@ -2821,9 +2901,9 @@ func (w *responseWriter) SetReadDeadline(deadline time.Time) error { if deadline.IsZero() { st.readDeadline = nil } else if st.readDeadline == nil { - st.readDeadline = sc.srv.afterFunc(deadline.Sub(sc.srv.now()), st.onReadTimeout) + st.readDeadline = time.AfterFunc(deadline.Sub(time.Now()), st.onReadTimeout) } else { - st.readDeadline.Reset(deadline.Sub(sc.srv.now())) + st.readDeadline.Reset(deadline.Sub(time.Now())) } }) return nil @@ -2831,7 +2911,7 @@ func (w *responseWriter) SetReadDeadline(deadline time.Time) error { func (w *responseWriter) SetWriteDeadline(deadline time.Time) error { st := w.rws.stream - if !deadline.IsZero() && deadline.Before(w.rws.conn.srv.now()) { + if !deadline.IsZero() && deadline.Before(time.Now()) { // If we're setting a deadline in the past, reset the stream immediately // so writes after SetWriteDeadline returns will fail. st.onWriteTimeout() @@ -2847,14 +2927,19 @@ func (w *responseWriter) SetWriteDeadline(deadline time.Time) error { if deadline.IsZero() { st.writeDeadline = nil } else if st.writeDeadline == nil { - st.writeDeadline = sc.srv.afterFunc(deadline.Sub(sc.srv.now()), st.onWriteTimeout) + st.writeDeadline = time.AfterFunc(deadline.Sub(time.Now()), st.onWriteTimeout) } else { - st.writeDeadline.Reset(deadline.Sub(sc.srv.now())) + st.writeDeadline.Reset(deadline.Sub(time.Now())) } }) return nil } +func (w *responseWriter) EnableFullDuplex() error { + // We always support full duplex responses, so this is a no-op. + return nil +} + func (w *responseWriter) Flush() { w.FlushError() } @@ -3123,7 +3208,7 @@ func (w *responseWriter) Push(target string, opts *http.PushOptions) error { method: opts.Method, url: u, header: cloneHeader(opts.Header), - done: errChanPool.Get().(chan error), + done: sc.srv.state.getErrChan(), } select { @@ -3140,7 +3225,7 @@ func (w *responseWriter) Push(target string, opts *http.PushOptions) error { case <-st.cw: return errStreamClosed case err := <-msg.done: - errChanPool.Put(msg.done) + sc.srv.state.putErrChan(msg.done) return err } } @@ -3203,13 +3288,13 @@ func (sc *serverConn) startPush(msg *startPushRequest) { // transition to "half closed (remote)" after sending the initial HEADERS, but // we start in "half closed (remote)" for simplicity. // See further comments at the definition of stateHalfClosedRemote. - promised := sc.newStream(promisedID, msg.parent.id, stateHalfClosedRemote) - rw, req, err := sc.newWriterAndRequestNoBody(promised, requestParam{ - method: msg.method, - scheme: msg.url.Scheme, - authority: msg.url.Host, - path: msg.url.RequestURI(), - header: cloneHeader(msg.header), // clone since handler runs concurrently with writing the PUSH_PROMISE + promised := sc.newStream(promisedID, msg.parent.id, stateHalfClosedRemote, defaultRFC9218Priority(sc.priorityAware && !sc.hasIntermediary)) + rw, req, err := sc.newWriterAndRequestNoBody(promised, httpcommon.ServerRequestParam{ + Method: msg.method, + Scheme: msg.url.Scheme, + Authority: msg.url.Host, + Path: msg.url.RequestURI(), + Header: cloneHeader(msg.header), // clone since handler runs concurrently with writing the PUSH_PROMISE }) if err != nil { // Should not happen, since we've already validated msg.url. @@ -3301,7 +3386,7 @@ func (sc *serverConn) countError(name string, err error) error { if sc == nil || sc.srv == nil { return err } - f := sc.srv.CountError + f := sc.countErrorFunc if f == nil { return err } diff --git a/vendor/golang.org/x/net/http2/timer.go b/vendor/golang.org/x/net/http2/timer.go deleted file mode 100644 index 0b1c17b812..0000000000 --- a/vendor/golang.org/x/net/http2/timer.go +++ /dev/null @@ -1,20 +0,0 @@ -// Copyright 2024 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. -package http2 - -import "time" - -// A timer is a time.Timer, as an interface which can be replaced in tests. -type timer = interface { - C() <-chan time.Time - Reset(d time.Duration) bool - Stop() bool -} - -// timeTimer adapts a time.Timer to the timer interface. -type timeTimer struct { - *time.Timer -} - -func (t timeTimer) C() <-chan time.Time { return t.Timer.C } diff --git a/vendor/golang.org/x/net/http2/transport.go b/vendor/golang.org/x/net/http2/transport.go index 61f511f97a..8cf64b78e2 100644 --- a/vendor/golang.org/x/net/http2/transport.go +++ b/vendor/golang.org/x/net/http2/transport.go @@ -9,6 +9,7 @@ package http2 import ( "bufio" "bytes" + "compress/flate" "compress/gzip" "context" "crypto/rand" @@ -25,8 +26,6 @@ import ( "net/http" "net/http/httptrace" "net/textproto" - "os" - "sort" "strconv" "strings" "sync" @@ -36,6 +35,7 @@ import ( "golang.org/x/net/http/httpguts" "golang.org/x/net/http2/hpack" "golang.org/x/net/idna" + "golang.org/x/net/internal/httpcommon" ) const ( @@ -194,73 +194,29 @@ type Transport struct { type transportTestHooks struct { newclientconn func(*ClientConn) - group synctestGroupInterface -} - -func (t *Transport) markNewGoroutine() { - if t != nil && t.transportTestHooks != nil { - t.transportTestHooks.group.Join() - } -} - -// newTimer creates a new time.Timer, or a synthetic timer in tests. -func (t *Transport) newTimer(d time.Duration) timer { - if t.transportTestHooks != nil { - return t.transportTestHooks.group.NewTimer(d) - } - return timeTimer{time.NewTimer(d)} -} - -// afterFunc creates a new time.AfterFunc timer, or a synthetic timer in tests. -func (t *Transport) afterFunc(d time.Duration, f func()) timer { - if t.transportTestHooks != nil { - return t.transportTestHooks.group.AfterFunc(d, f) - } - return timeTimer{time.AfterFunc(d, f)} -} - -func (t *Transport) contextWithTimeout(ctx context.Context, d time.Duration) (context.Context, context.CancelFunc) { - if t.transportTestHooks != nil { - return t.transportTestHooks.group.ContextWithTimeout(ctx, d) - } - return context.WithTimeout(ctx, d) } func (t *Transport) maxHeaderListSize() uint32 { - if t.MaxHeaderListSize == 0 { + n := int64(t.MaxHeaderListSize) + if t.t1 != nil && t.t1.MaxResponseHeaderBytes != 0 { + n = t.t1.MaxResponseHeaderBytes + if n > 0 { + n = adjustHTTP1MaxHeaderSize(n) + } + } + if n <= 0 { return 10 << 20 } - if t.MaxHeaderListSize == 0xffffffff { + if n >= 0xffffffff { return 0 } - return t.MaxHeaderListSize -} - -func (t *Transport) maxFrameReadSize() uint32 { - if t.MaxReadFrameSize == 0 { - return 0 // use the default provided by the peer - } - if t.MaxReadFrameSize < minMaxFrameSize { - return minMaxFrameSize - } - if t.MaxReadFrameSize > maxFrameSize { - return maxFrameSize - } - return t.MaxReadFrameSize + return uint32(n) } func (t *Transport) disableCompression() bool { return t.DisableCompression || (t.t1 != nil && t.t1.DisableCompression) } -func (t *Transport) pingTimeout() time.Duration { - if t.PingTimeout == 0 { - return 15 * time.Second - } - return t.PingTimeout - -} - // ConfigureTransport configures a net/http HTTP/1 Transport to use HTTP/2. // It returns an error if t1 has already been HTTP/2-enabled. // @@ -296,8 +252,8 @@ func configureTransports(t1 *http.Transport) (*Transport, error) { if !strSliceContains(t1.TLSClientConfig.NextProtos, "http/1.1") { t1.TLSClientConfig.NextProtos = append(t1.TLSClientConfig.NextProtos, "http/1.1") } - upgradeFn := func(authority string, c *tls.Conn) http.RoundTripper { - addr := authorityAddr("https", authority) + upgradeFn := func(scheme, authority string, c net.Conn) http.RoundTripper { + addr := authorityAddr(scheme, authority) if used, err := connPool.addConnIfNeeded(addr, t2, c); err != nil { go c.Close() return erringRoundTripper{err} @@ -308,18 +264,37 @@ func configureTransports(t1 *http.Transport) (*Transport, error) { // was unknown) go c.Close() } + if scheme == "http" { + return (*unencryptedTransport)(t2) + } return t2 } - if m := t1.TLSNextProto; len(m) == 0 { - t1.TLSNextProto = map[string]func(string, *tls.Conn) http.RoundTripper{ - "h2": upgradeFn, + if t1.TLSNextProto == nil { + t1.TLSNextProto = make(map[string]func(string, *tls.Conn) http.RoundTripper) + } + t1.TLSNextProto[NextProtoTLS] = func(authority string, c *tls.Conn) http.RoundTripper { + return upgradeFn("https", authority, c) + } + // The "unencrypted_http2" TLSNextProto key is used to pass off non-TLS HTTP/2 conns. + t1.TLSNextProto[nextProtoUnencryptedHTTP2] = func(authority string, c *tls.Conn) http.RoundTripper { + nc, err := unencryptedNetConnFromTLSConn(c) + if err != nil { + go c.Close() + return erringRoundTripper{err} } - } else { - m["h2"] = upgradeFn + return upgradeFn("http", authority, nc) } return t2, nil } +// unencryptedTransport is a Transport with a RoundTrip method that +// always permits http:// URLs. +type unencryptedTransport Transport + +func (t *unencryptedTransport) RoundTrip(req *http.Request) (*http.Response, error) { + return (*Transport)(t).RoundTripOpt(req, RoundTripOpt{allowHTTP: true}) +} + func (t *Transport) connPool() ClientConnPool { t.connPoolOnce.Do(t.initConnPool) return t.connPoolOrDef @@ -339,7 +314,7 @@ type ClientConn struct { t *Transport tconn net.Conn // usually *tls.Conn, except specialized impls tlsState *tls.ConnectionState // nil only for specialized impls - reused uint32 // whether conn is being reused; atomic + atomicReused uint32 // whether conn is being reused; atomic singleUse bool // whether being used for a single http.Request getConnCalled bool // used by clientConnPool @@ -348,39 +323,77 @@ type ClientConn struct { readerErr error // set before readerDone is closed idleTimeout time.Duration // or 0 for never - idleTimer timer - - mu sync.Mutex // guards following - cond *sync.Cond // hold mu; broadcast on flow/closed changes - flow outflow // our conn-level flow control quota (cs.outflow is per stream) - inflow inflow // peer's conn-level flow control - doNotReuse bool // whether conn is marked to not be reused for any future requests - closing bool - closed bool - seenSettings bool // true if we've seen a settings frame, false otherwise - wantSettingsAck bool // we sent a SETTINGS frame and haven't heard back - goAway *GoAwayFrame // if non-nil, the GoAwayFrame we received - goAwayDebug string // goAway frame's debug data, retained as a string - streams map[uint32]*clientStream // client-initiated - streamsReserved int // incr by ReserveNewRequest; decr on RoundTrip - nextStreamID uint32 - pendingRequests int // requests blocked and waiting to be sent because len(streams) == maxConcurrentStreams - pings map[[8]byte]chan struct{} // in flight ping data to notification channel - br *bufio.Reader - lastActive time.Time - lastIdle time.Time // time last idle + idleTimer *time.Timer + + mu sync.Mutex // guards following + cond *sync.Cond // hold mu; broadcast on flow/closed changes + flow outflow // our conn-level flow control quota (cs.outflow is per stream) + inflow inflow // peer's conn-level flow control + doNotReuse bool // whether conn is marked to not be reused for any future requests + closing bool + closed bool + closedOnIdle bool // true if conn was closed for idleness + seenSettings bool // true if we've seen a settings frame, false otherwise + seenSettingsChan chan struct{} // closed when seenSettings is true or frame reading fails + wantSettingsAck bool // we sent a SETTINGS frame and haven't heard back + goAway *GoAwayFrame // if non-nil, the GoAwayFrame we received + goAwayDebug string // goAway frame's debug data, retained as a string + streams map[uint32]*clientStream // client-initiated + streamsReserved int // incr by ReserveNewRequest; decr on RoundTrip + nextStreamID uint32 + pendingRequests int // requests blocked and waiting to be sent because len(streams) == maxConcurrentStreams + pings map[[8]byte]chan struct{} // in flight ping data to notification channel + br *bufio.Reader + lastActive time.Time + lastIdle time.Time // time last idle // Settings from peer: (also guarded by wmu) - maxFrameSize uint32 - maxConcurrentStreams uint32 - peerMaxHeaderListSize uint64 - peerMaxHeaderTableSize uint32 - initialWindowSize uint32 + maxFrameSize uint32 + maxConcurrentStreams uint32 + peerMaxHeaderListSize uint64 + peerMaxHeaderTableSize uint32 + initialWindowSize uint32 + initialStreamRecvWindowSize int32 + readIdleTimeout time.Duration + pingTimeout time.Duration + extendedConnectAllowed bool + strictMaxConcurrentStreams bool + + // rstStreamPingsBlocked works around an unfortunate gRPC behavior. + // gRPC strictly limits the number of PING frames that it will receive. + // The default is two pings per two hours, but the limit resets every time + // the gRPC endpoint sends a HEADERS or DATA frame. See golang/go#70575. + // + // rstStreamPingsBlocked is set after receiving a response to a PING frame + // bundled with an RST_STREAM (see pendingResets below), and cleared after + // receiving a HEADERS or DATA frame. + rstStreamPingsBlocked bool + + // pendingResets is the number of RST_STREAM frames we have sent to the peer, + // without confirming that the peer has received them. When we send a RST_STREAM, + // we bundle it with a PING frame, unless a PING is already in flight. We count + // the reset stream against the connection's concurrency limit until we get + // a PING response. This limits the number of requests we'll try to send to a + // completely unresponsive connection. + pendingResets int + + // readBeforeStreamID is the smallest stream ID that has not been followed by + // a frame read from the peer. We use this to determine when a request may + // have been sent to a completely unresponsive connection: + // If the request ID is less than readBeforeStreamID, then we have had some + // indication of life on the connection since sending the request. + readBeforeStreamID uint32 // reqHeaderMu is a 1-element semaphore channel controlling access to sending new requests. // Write to reqHeaderMu to lock it, read from it to unlock. // Lock reqmu BEFORE mu or wmu. reqHeaderMu chan struct{} + // internalStateHook reports state changes back to the net/http.ClientConn. + // Note that this is different from the user state hook registered by + // net/http.ClientConn.SetStateHook: The internal hook calls ClientConn, + // which calls the user hook. + internalStateHook func() + // wmu is held while writing. // Acquire BEFORE mu when holding both, to avoid blocking mu on network writes. // Only acquire both at the same time when changing peer settings. @@ -432,12 +445,12 @@ type clientStream struct { sentHeaders bool // owned by clientConnReadLoop: - firstByte bool // got the first response byte - pastHeaders bool // got first MetaHeadersFrame (actual headers) - pastTrailers bool // got optional second MetaHeadersFrame (trailers) - num1xx uint8 // number of 1xx responses seen - readClosed bool // peer sent an END_STREAM flag - readAborted bool // read loop reset the stream + firstByte bool // got the first response byte + pastHeaders bool // got first MetaHeadersFrame (actual headers) + pastTrailers bool // got optional second MetaHeadersFrame (trailers) + readClosed bool // peer sent an END_STREAM flag + readAborted bool // read loop reset the stream + totalHeaderSize int64 // total size of 1xx headers seen trailer http.Header // accumulated trailers resTrailer *http.Header // client's Response.Trailer @@ -492,7 +505,6 @@ func (cs *clientStream) closeReqBodyLocked() { cs.reqBodyClosed = make(chan struct{}) reqBodyClosed := cs.reqBodyClosed go func() { - cs.cc.t.markNewGoroutine() cs.reqBody.Close() close(reqBodyClosed) }() @@ -508,22 +520,9 @@ func (sew stickyErrWriter) Write(p []byte) (n int, err error) { if *sew.err != nil { return 0, *sew.err } - for { - if sew.timeout != 0 { - sew.conn.SetWriteDeadline(time.Now().Add(sew.timeout)) - } - nn, err := sew.conn.Write(p[n:]) - n += nn - if n < len(p) && nn > 0 && errors.Is(err, os.ErrDeadlineExceeded) { - // Keep extending the deadline so long as we're making progress. - continue - } - if sew.timeout != 0 { - sew.conn.SetWriteDeadline(time.Time{}) - } - *sew.err = err - return n, err - } + n, err = writeWithByteTimeout(sew.conn, sew.timeout, p) + *sew.err = err + return n, err } // noCachedConnError is the concrete type of ErrNoCachedConn, which @@ -554,6 +553,8 @@ type RoundTripOpt struct { // no cached connection is available, RoundTripOpt // will return ErrNoCachedConn. OnlyCachedConn bool + + allowHTTP bool // allow http:// URLs } func (t *Transport) RoundTrip(req *http.Request) (*http.Response, error) { @@ -586,7 +587,14 @@ func authorityAddr(scheme string, authority string) (addr string) { // RoundTripOpt is like RoundTrip, but takes options. func (t *Transport) RoundTripOpt(req *http.Request, opt RoundTripOpt) (*http.Response, error) { - if !(req.URL.Scheme == "https" || (req.URL.Scheme == "http" && t.AllowHTTP)) { + switch req.URL.Scheme { + case "https": + // Always okay. + case "http": + if !t.AllowHTTP && !opt.allowHTTP { + return nil, errors.New("http2: unencrypted HTTP/2 not enabled") + } + default: return nil, errors.New("http2: unsupported scheme") } @@ -597,7 +605,7 @@ func (t *Transport) RoundTripOpt(req *http.Request, opt RoundTripOpt) (*http.Res t.vlogf("http2: Transport failed to get client conn for %s: %v", addr, err) return nil, err } - reused := !atomic.CompareAndSwapUint32(&cc.reused, 0, 1) + reused := !atomic.CompareAndSwapUint32(&cc.atomicReused, 0, 1) traceGotConn(req, cc, reused) res, err := cc.RoundTrip(req) if err != nil && retry <= 6 { @@ -611,9 +619,9 @@ func (t *Transport) RoundTripOpt(req *http.Request, opt RoundTripOpt) (*http.Res backoff := float64(uint(1) << (uint(retry) - 1)) backoff += backoff * (0.1 * mathrand.Float64()) d := time.Second * time.Duration(backoff) - tm := t.newTimer(d) + tm := time.NewTimer(d) select { - case <-tm.C(): + case <-tm.C: t.vlogf("RoundTrip retrying after failure: %v", roundTripErr) continue case <-req.Context().Done(): @@ -622,6 +630,22 @@ func (t *Transport) RoundTripOpt(req *http.Request, opt RoundTripOpt) (*http.Res } } } + if err == errClientConnNotEstablished { + // This ClientConn was created recently, + // this is the first request to use it, + // and the connection is closed and not usable. + // + // In this state, cc.idleTimer will remove the conn from the pool + // when it fires. Stop the timer and remove it here so future requests + // won't try to use this connection. + // + // If the timer has already fired and we're racing it, the redundant + // call to MarkDead is harmless. + if cc.idleTimer != nil { + cc.idleTimer.Stop() + } + t.connPool().MarkDead(cc) + } if err != nil { t.vlogf("RoundTrip failure: %v", err) return nil, err @@ -640,9 +664,11 @@ func (t *Transport) CloseIdleConnections() { } var ( - errClientConnClosed = errors.New("http2: client conn is closed") - errClientConnUnusable = errors.New("http2: client conn not usable") - errClientConnGotGoAway = errors.New("http2: Transport received Server's graceful shutdown GOAWAY") + errClientConnClosed = errors.New("http2: client conn is closed") + errClientConnUnusable = errors.New("http2: client conn not usable") + errClientConnNotEstablished = errors.New("http2: client conn could not be established") + errClientConnGotGoAway = errors.New("http2: Transport received Server's graceful shutdown GOAWAY") + errClientConnForceClosed = errors.New("http2: client connection force closed via ClientConn.Close") ) // shouldRetryRequest is called by RoundTrip when a request fails to get @@ -697,7 +723,7 @@ func canRetryError(err error) bool { func (t *Transport) dialClientConn(ctx context.Context, addr string, singleUse bool) (*ClientConn, error) { if t.transportTestHooks != nil { - return t.newClientConn(nil, singleUse) + return t.newClientConn(nil, singleUse, nil) } host, _, err := net.SplitHostPort(addr) if err != nil { @@ -707,7 +733,7 @@ func (t *Transport) dialClientConn(ctx context.Context, addr string, singleUse b if err != nil { return nil, err } - return t.newClientConn(tconn, singleUse) + return t.newClientConn(tconn, singleUse, nil) } func (t *Transport) newTLSConfig(host string) *tls.Config { @@ -758,42 +784,35 @@ func (t *Transport) expectContinueTimeout() time.Duration { return t.t1.ExpectContinueTimeout } -func (t *Transport) maxDecoderHeaderTableSize() uint32 { - if v := t.MaxDecoderHeaderTableSize; v > 0 { - return v - } - return initialHeaderTableSize -} - -func (t *Transport) maxEncoderHeaderTableSize() uint32 { - if v := t.MaxEncoderHeaderTableSize; v > 0 { - return v - } - return initialHeaderTableSize -} - func (t *Transport) NewClientConn(c net.Conn) (*ClientConn, error) { - return t.newClientConn(c, t.disableKeepAlives()) + return t.newClientConn(c, t.disableKeepAlives(), nil) } -func (t *Transport) newClientConn(c net.Conn, singleUse bool) (*ClientConn, error) { +func (t *Transport) newClientConn(c net.Conn, singleUse bool, internalStateHook func()) (*ClientConn, error) { + conf := configFromTransport(t) cc := &ClientConn{ - t: t, - tconn: c, - readerDone: make(chan struct{}), - nextStreamID: 1, - maxFrameSize: 16 << 10, // spec default - initialWindowSize: 65535, // spec default - maxConcurrentStreams: initialMaxConcurrentStreams, // "infinite", per spec. Use a smaller value until we have received server settings. - peerMaxHeaderListSize: 0xffffffffffffffff, // "infinite", per spec. Use 2^64-1 instead. - streams: make(map[uint32]*clientStream), - singleUse: singleUse, - wantSettingsAck: true, - pings: make(map[[8]byte]chan struct{}), - reqHeaderMu: make(chan struct{}, 1), + t: t, + tconn: c, + readerDone: make(chan struct{}), + nextStreamID: 1, + maxFrameSize: 16 << 10, // spec default + initialWindowSize: 65535, // spec default + initialStreamRecvWindowSize: conf.MaxUploadBufferPerStream, + maxConcurrentStreams: initialMaxConcurrentStreams, // "infinite", per spec. Use a smaller value until we have received server settings. + strictMaxConcurrentStreams: conf.StrictMaxConcurrentRequests, + peerMaxHeaderListSize: 0xffffffffffffffff, // "infinite", per spec. Use 2^64-1 instead. + streams: make(map[uint32]*clientStream), + singleUse: singleUse, + seenSettingsChan: make(chan struct{}), + wantSettingsAck: true, + readIdleTimeout: conf.SendPingTimeout, + pingTimeout: conf.PingTimeout, + pings: make(map[[8]byte]chan struct{}), + reqHeaderMu: make(chan struct{}, 1), + lastActive: time.Now(), + internalStateHook: internalStateHook, } if t.transportTestHooks != nil { - t.markNewGoroutine() t.transportTestHooks.newclientconn(cc) c = cc.tconn } @@ -808,23 +827,21 @@ func (t *Transport) newClientConn(c net.Conn, singleUse bool) (*ClientConn, erro // MTU + crypto/tls record padding. cc.bw = bufio.NewWriter(stickyErrWriter{ conn: c, - timeout: t.WriteByteTimeout, + timeout: conf.WriteByteTimeout, err: &cc.werr, }) cc.br = bufio.NewReader(c) cc.fr = NewFramer(cc.bw, cc.br) - if t.maxFrameReadSize() != 0 { - cc.fr.SetMaxReadFrameSize(t.maxFrameReadSize()) - } + cc.fr.SetMaxReadFrameSize(conf.MaxReadFrameSize) if t.CountError != nil { cc.fr.countError = t.CountError } - maxHeaderTableSize := t.maxDecoderHeaderTableSize() + maxHeaderTableSize := conf.MaxDecoderHeaderTableSize cc.fr.ReadMetaHeaders = hpack.NewDecoder(maxHeaderTableSize, nil) cc.fr.MaxHeaderListSize = t.maxHeaderListSize() cc.henc = hpack.NewEncoder(&cc.hbuf) - cc.henc.SetMaxDynamicTableSizeLimit(t.maxEncoderHeaderTableSize()) + cc.henc.SetMaxDynamicTableSizeLimit(conf.MaxEncoderHeaderTableSize) cc.peerMaxHeaderTableSize = initialHeaderTableSize if cs, ok := c.(connectionStater); ok { @@ -834,11 +851,9 @@ func (t *Transport) newClientConn(c net.Conn, singleUse bool) (*ClientConn, erro initialSettings := []Setting{ {ID: SettingEnablePush, Val: 0}, - {ID: SettingInitialWindowSize, Val: transportDefaultStreamFlow}, - } - if max := t.maxFrameReadSize(); max != 0 { - initialSettings = append(initialSettings, Setting{ID: SettingMaxFrameSize, Val: max}) + {ID: SettingInitialWindowSize, Val: uint32(cc.initialStreamRecvWindowSize)}, } + initialSettings = append(initialSettings, Setting{ID: SettingMaxFrameSize, Val: conf.MaxReadFrameSize}) if max := t.maxHeaderListSize(); max != 0 { initialSettings = append(initialSettings, Setting{ID: SettingMaxHeaderListSize, Val: max}) } @@ -848,8 +863,8 @@ func (t *Transport) newClientConn(c net.Conn, singleUse bool) (*ClientConn, erro cc.bw.Write(clientPreface) cc.fr.WriteSettings(initialSettings...) - cc.fr.WriteWindowUpdate(0, transportDefaultConnFlow) - cc.inflow.init(transportDefaultConnFlow + initialWindowSize) + cc.fr.WriteWindowUpdate(0, uint32(conf.MaxUploadBufferPerConnection)) + cc.inflow.init(conf.MaxUploadBufferPerConnection + initialWindowSize) cc.bw.Flush() if cc.werr != nil { cc.Close() @@ -859,7 +874,7 @@ func (t *Transport) newClientConn(c net.Conn, singleUse bool) (*ClientConn, erro // Start the idle timer after the connection is fully initialized. if d := t.idleConnTimeout(); d != 0 { cc.idleTimeout = d - cc.idleTimer = t.afterFunc(d, cc.onIdleTimeout) + cc.idleTimer = time.AfterFunc(d, cc.onIdleTimeout) } go cc.readLoop() @@ -867,10 +882,10 @@ func (t *Transport) newClientConn(c net.Conn, singleUse bool) (*ClientConn, erro } func (cc *ClientConn) healthCheck() { - pingTimeout := cc.t.pingTimeout() + pingTimeout := cc.pingTimeout // We don't need to periodically ping in the health check, because the readLoop of ClientConn will // trigger the healthCheck again if there is no frame received. - ctx, cancel := cc.t.contextWithTimeout(context.Background(), pingTimeout) + ctx, cancel := context.WithTimeout(context.Background(), pingTimeout) defer cancel() cc.vlogf("http2: Transport sending health check") err := cc.Ping(ctx) @@ -995,7 +1010,7 @@ func (cc *ClientConn) State() ClientConnState { return ClientConnState{ Closed: cc.closed, Closing: cc.closing || cc.singleUse || cc.doNotReuse || cc.goAway != nil, - StreamsActive: len(cc.streams), + StreamsActive: len(cc.streams) + cc.pendingResets, StreamsReserved: cc.streamsReserved, StreamsPending: cc.pendingRequests, LastIdle: cc.lastIdle, @@ -1020,21 +1035,67 @@ func (cc *ClientConn) idleStateLocked() (st clientConnIdleState) { return } var maxConcurrentOkay bool - if cc.t.StrictMaxConcurrentStreams { + if cc.strictMaxConcurrentStreams { // We'll tell the caller we can take a new request to // prevent the caller from dialing a new TCP // connection, but then we'll block later before // writing it. maxConcurrentOkay = true } else { - maxConcurrentOkay = int64(len(cc.streams)+cc.streamsReserved+1) <= int64(cc.maxConcurrentStreams) + // We can take a new request if the total of + // - active streams; + // - reservation slots for new streams; and + // - streams for which we have sent a RST_STREAM and a PING, + // but received no subsequent frame + // is less than the concurrency limit. + maxConcurrentOkay = cc.currentRequestCountLocked() < int(cc.maxConcurrentStreams) } - st.canTakeNewRequest = cc.goAway == nil && !cc.closed && !cc.closing && maxConcurrentOkay && + st.canTakeNewRequest = maxConcurrentOkay && cc.isUsableLocked() + + // If this connection has never been used for a request and is closed, + // then let it take a request (which will fail). + // If the conn was closed for idleness, we're racing the idle timer; + // don't try to use the conn. (Issue #70515.) + // + // This avoids a situation where an error early in a connection's lifetime + // goes unreported. + if cc.nextStreamID == 1 && cc.streamsReserved == 0 && cc.closed && !cc.closedOnIdle { + st.canTakeNewRequest = true + } + + return +} + +func (cc *ClientConn) isUsableLocked() bool { + return cc.goAway == nil && + !cc.closed && + !cc.closing && !cc.doNotReuse && int64(cc.nextStreamID)+2*int64(cc.pendingRequests) < math.MaxInt32 && !cc.tooIdleLocked() - return +} + +// canReserveLocked reports whether a net/http.ClientConn can reserve a slot on this conn. +// +// This follows slightly different rules than clientConnIdleState.canTakeNewRequest. +// We only permit reservations up to the conn's concurrency limit. +// This differs from ClientConn.ReserveNewRequest, which permits reservations +// past the limit when StrictMaxConcurrentStreams is set. +func (cc *ClientConn) canReserveLocked() bool { + if cc.currentRequestCountLocked() >= int(cc.maxConcurrentStreams) { + return false + } + if !cc.isUsableLocked() { + return false + } + return true +} + +// currentRequestCountLocked reports the number of concurrency slots currently in use, +// including active streams, reserved slots, and reset streams waiting for acknowledgement. +func (cc *ClientConn) currentRequestCountLocked() int { + return len(cc.streams) + cc.streamsReserved + cc.pendingResets } func (cc *ClientConn) canTakeNewRequestLocked() bool { @@ -1042,6 +1103,14 @@ func (cc *ClientConn) canTakeNewRequestLocked() bool { return st.canTakeNewRequest } +// availableLocked reports the number of concurrency slots available. +func (cc *ClientConn) availableLocked() int { + if !cc.canTakeNewRequestLocked() { + return 0 + } + return max(0, int(cc.maxConcurrentStreams)-cc.currentRequestCountLocked()) +} + // tooIdleLocked reports whether this connection has been been sitting idle // for too much wall time. func (cc *ClientConn) tooIdleLocked() bool { @@ -1066,6 +1135,7 @@ func (cc *ClientConn) closeConn() { t := time.AfterFunc(250*time.Millisecond, cc.forceCloseConn) defer t.Stop() cc.tconn.Close() + cc.maybeCallStateHook() } // A tls.Conn.Close can hang for a long time if the peer is unresponsive. @@ -1087,6 +1157,7 @@ func (cc *ClientConn) closeIfIdle() { return } cc.closed = true + cc.closedOnIdle = true nextID := cc.nextStreamID // TODO: do clients send GOAWAY too? maybe? Just Close: cc.mu.Unlock() @@ -1114,7 +1185,6 @@ func (cc *ClientConn) Shutdown(ctx context.Context) error { done := make(chan struct{}) cancelled := false // guarded by cc.mu go func() { - cc.t.markNewGoroutine() cc.mu.Lock() defer cc.mu.Unlock() for { @@ -1185,8 +1255,7 @@ func (cc *ClientConn) closeForError(err error) { // // In-flight requests are interrupted. For a graceful shutdown, use Shutdown instead. func (cc *ClientConn) Close() error { - err := errors.New("http2: client connection force closed via ClientConn.Close") - cc.closeForError(err) + cc.closeForError(errClientConnForceClosed) return nil } @@ -1203,23 +1272,6 @@ func (cc *ClientConn) closeForLostPing() { // exported. At least they'll be DeepEqual for h1-vs-h2 comparisons tests. var errRequestCanceled = errors.New("net/http: request canceled") -func commaSeparatedTrailers(req *http.Request) (string, error) { - keys := make([]string, 0, len(req.Trailer)) - for k := range req.Trailer { - k = canonicalHeader(k) - switch k { - case "Transfer-Encoding", "Trailer", "Content-Length": - return "", fmt.Errorf("invalid Trailer key %q", k) - } - keys = append(keys, k) - } - if len(keys) > 0 { - sort.Strings(keys) - return strings.Join(keys, ","), nil - } - return "", nil -} - func (cc *ClientConn) responseHeaderTimeout() time.Duration { if cc.t.t1 != nil { return cc.t.t1.ResponseHeaderTimeout @@ -1231,22 +1283,6 @@ func (cc *ClientConn) responseHeaderTimeout() time.Duration { return 0 } -// checkConnHeaders checks whether req has any invalid connection-level headers. -// per RFC 7540 section 8.1.2.2: Connection-Specific Header Fields. -// Certain headers are special-cased as okay but not transmitted later. -func checkConnHeaders(req *http.Request) error { - if v := req.Header.Get("Upgrade"); v != "" { - return fmt.Errorf("http2: invalid Upgrade request header: %q", req.Header["Upgrade"]) - } - if vv := req.Header["Transfer-Encoding"]; len(vv) > 0 && (len(vv) > 1 || vv[0] != "" && vv[0] != "chunked") { - return fmt.Errorf("http2: invalid Transfer-Encoding request header: %q", vv) - } - if vv := req.Header["Connection"]; len(vv) > 0 && (len(vv) > 1 || vv[0] != "" && !asciiEqualFold(vv[0], "close") && !asciiEqualFold(vv[0], "keep-alive")) { - return fmt.Errorf("http2: invalid Connection request header: %q", vv) - } - return nil -} - // actualContentLength returns a sanitized version of // req.ContentLength, where 0 actually means zero (not unknown) and -1 // means unknown. @@ -1292,25 +1328,7 @@ func (cc *ClientConn) roundTrip(req *http.Request, streamf func(*clientStream)) donec: make(chan struct{}), } - // TODO(bradfitz): this is a copy of the logic in net/http. Unify somewhere? - if !cc.t.disableCompression() && - req.Header.Get("Accept-Encoding") == "" && - req.Header.Get("Range") == "" && - !cs.isHead { - // Request gzip only, not deflate. Deflate is ambiguous and - // not as universally supported anyway. - // See: https://zlib.net/zlib_faq.html#faq39 - // - // Note that we don't request this for HEAD requests, - // due to a bug in nginx: - // http://trac.nginx.org/nginx/ticket/358 - // https://golang.org/issue/5522 - // - // We don't request gzip if the request is for a range, since - // auto-decoding a portion of a gzipped document will just fail - // anyway. See https://golang.org/issue/8923 - cs.requestedGzip = true - } + cs.requestedGzip = httpcommon.IsRequestGzip(req.Method, req.Header, cc.t.disableCompression()) go cs.doRequest(req, streamf) @@ -1406,11 +1424,12 @@ func (cc *ClientConn) roundTrip(req *http.Request, streamf func(*clientStream)) // // It sends the request and performs post-request cleanup (closing Request.Body, etc.). func (cs *clientStream) doRequest(req *http.Request, streamf func(*clientStream)) { - cs.cc.t.markNewGoroutine() err := cs.writeRequest(req, streamf) cs.cleanupWriteRequest(err) } +var errExtendedConnectNotSupported = errors.New("net/http: extended connect not supported by peer") + // writeRequest sends a request. // // It returns nil after the request is written, the response read, @@ -1422,8 +1441,11 @@ func (cs *clientStream) writeRequest(req *http.Request, streamf func(*clientStre cc := cs.cc ctx := cs.ctx - if err := checkConnHeaders(req); err != nil { - return err + // wait for setting frames to be received, a server can change this value later, + // but we just wait for the first settings frame + var isExtendedConnect bool + if req.Method == "CONNECT" && req.Header.Get(":protocol") != "" { + isExtendedConnect = true } // Acquire the new-request lock by writing to reqHeaderMu. @@ -1432,6 +1454,18 @@ func (cs *clientStream) writeRequest(req *http.Request, streamf func(*clientStre if cc.reqHeaderMu == nil { panic("RoundTrip on uninitialized ClientConn") // for tests } + if isExtendedConnect { + select { + case <-cs.reqCancel: + return errRequestCanceled + case <-ctx.Done(): + return ctx.Err() + case <-cc.seenSettingsChan: + if !cc.extendedConnectAllowed { + return errExtendedConnectNotSupported + } + } + } select { case cc.reqHeaderMu <- struct{}{}: case <-cs.reqCancel: @@ -1520,9 +1554,9 @@ func (cs *clientStream) writeRequest(req *http.Request, streamf func(*clientStre var respHeaderTimer <-chan time.Time var respHeaderRecv chan struct{} if d := cc.responseHeaderTimeout(); d != 0 { - timer := cc.t.newTimer(d) + timer := time.NewTimer(d) defer timer.Stop() - respHeaderTimer = timer.C() + respHeaderTimer = timer.C respHeaderRecv = cs.respHeaderRecv } // Wait until the peer half-closes its end of the stream, @@ -1570,26 +1604,39 @@ func (cs *clientStream) encodeAndWriteHeaders(req *http.Request) error { // we send: HEADERS{1}, CONTINUATION{0,} + DATA{0,} (DATA is // sent by writeRequestBody below, along with any Trailers, // again in form HEADERS{1}, CONTINUATION{0,}) - trailers, err := commaSeparatedTrailers(req) - if err != nil { - return err - } - hasTrailers := trailers != "" - contentLen := actualContentLength(req) - hasBody := contentLen != 0 - hdrs, err := cc.encodeHeaders(req, cs.requestedGzip, trailers, contentLen) + cc.hbuf.Reset() + res, err := encodeRequestHeaders(req, cs.requestedGzip, cc.peerMaxHeaderListSize, func(name, value string) { + cc.writeHeader(name, value) + }) if err != nil { - return err + return fmt.Errorf("http2: %w", err) } + hdrs := cc.hbuf.Bytes() // Write the request. - endStream := !hasBody && !hasTrailers + endStream := !res.HasBody && !res.HasTrailers cs.sentHeaders = true err = cc.writeHeaders(cs.ID, endStream, int(cc.maxFrameSize), hdrs) traceWroteHeaders(cs.trace) return err } +func encodeRequestHeaders(req *http.Request, addGzipHeader bool, peerMaxHeaderListSize uint64, headerf func(name, value string)) (httpcommon.EncodeHeadersResult, error) { + return httpcommon.EncodeHeaders(req.Context(), httpcommon.EncodeHeadersParam{ + Request: httpcommon.Request{ + Header: req.Header, + Trailer: req.Trailer, + URL: req.URL, + Host: req.Host, + Method: req.Method, + ActualContentLength: actualContentLength(req), + }, + AddGzipHeader: addGzipHeader, + PeerMaxHeaderListSize: peerMaxHeaderListSize, + DefaultUserAgent: defaultUserAgent, + }, headerf) +} + // cleanupWriteRequest performs post-request tasks. // // If err (the result of writeRequest) is non-nil and the stream is not closed, @@ -1613,6 +1660,9 @@ func (cs *clientStream) cleanupWriteRequest(err error) { cs.reqBodyClosed = make(chan struct{}) } bodyClosed := cs.reqBodyClosed + closeOnIdle := cc.singleUse || cc.doNotReuse || cc.t.disableKeepAlives() || cc.goAway != nil + // Have we read any frames from the connection since sending this request? + readSinceStream := cc.readBeforeStreamID > cs.ID cc.mu.Unlock() if mustCloseBody { cs.reqBody.Close() @@ -1637,16 +1687,46 @@ func (cs *clientStream) cleanupWriteRequest(err error) { if cs.sentHeaders { if se, ok := err.(StreamError); ok { if se.Cause != errFromPeer { - cc.writeStreamReset(cs.ID, se.Code, err) + cc.writeStreamReset(cs.ID, se.Code, false, err) } } else { - cc.writeStreamReset(cs.ID, ErrCodeCancel, err) + // We're cancelling an in-flight request. + // + // This could be due to the server becoming unresponsive. + // To avoid sending too many requests on a dead connection, + // if we haven't read any frames from the connection since + // sending this request, we let it continue to consume + // a concurrency slot until we can confirm the server is + // still responding. + // We do this by sending a PING frame along with the RST_STREAM + // (unless a ping is already in flight). + // + // For simplicity, we don't bother tracking the PING payload: + // We reset cc.pendingResets any time we receive a PING ACK. + // + // We skip this if the conn is going to be closed on idle, + // because it's short lived and will probably be closed before + // we get the ping response. + ping := false + if !closeOnIdle && !readSinceStream { + cc.mu.Lock() + // rstStreamPingsBlocked works around a gRPC behavior: + // see comment on the field for details. + if !cc.rstStreamPingsBlocked { + if cc.pendingResets == 0 { + ping = true + } + cc.pendingResets++ + } + cc.mu.Unlock() + } + cc.writeStreamReset(cs.ID, ErrCodeCancel, ping, err) } } cs.bufPipe.CloseWithError(err) // no-op if already closed } else { if cs.sentHeaders && !cs.sentEndStream { - cc.writeStreamReset(cs.ID, ErrCodeNo, nil) + cc.writeStreamReset(cs.ID, ErrCodeNo, false, nil) } cs.bufPipe.CloseWithError(errRequestCanceled) } @@ -1662,18 +1742,24 @@ func (cs *clientStream) cleanupWriteRequest(err error) { } close(cs.donec) + cc.maybeCallStateHook() } // awaitOpenSlotForStreamLocked waits until len(streams) < maxConcurrentStreams. // Must hold cc.mu. func (cc *ClientConn) awaitOpenSlotForStreamLocked(cs *clientStream) error { for { + if cc.closed && cc.nextStreamID == 1 && cc.streamsReserved == 0 { + // This is the very first request sent to this connection. + // Return a fatal error which aborts the retry loop. + return errClientConnNotEstablished + } cc.lastActive = time.Now() if cc.closed || !cc.canTakeNewRequestLocked() { return errClientConnUnusable } cc.lastIdle = time.Time{} - if int64(len(cc.streams)) < int64(cc.maxConcurrentStreams) { + if cc.currentRequestCountLocked() < int(cc.maxConcurrentStreams) { return nil } cc.pendingRequests++ @@ -1943,214 +2029,6 @@ func (cs *clientStream) awaitFlowControl(maxBytes int) (taken int32, err error) } } -func validateHeaders(hdrs http.Header) string { - for k, vv := range hdrs { - if !httpguts.ValidHeaderFieldName(k) { - return fmt.Sprintf("name %q", k) - } - for _, v := range vv { - if !httpguts.ValidHeaderFieldValue(v) { - // Don't include the value in the error, - // because it may be sensitive. - return fmt.Sprintf("value for header %q", k) - } - } - } - return "" -} - -var errNilRequestURL = errors.New("http2: Request.URI is nil") - -// requires cc.wmu be held. -func (cc *ClientConn) encodeHeaders(req *http.Request, addGzipHeader bool, trailers string, contentLength int64) ([]byte, error) { - cc.hbuf.Reset() - if req.URL == nil { - return nil, errNilRequestURL - } - - host := req.Host - if host == "" { - host = req.URL.Host - } - host, err := httpguts.PunycodeHostPort(host) - if err != nil { - return nil, err - } - if !httpguts.ValidHostHeader(host) { - return nil, errors.New("http2: invalid Host header") - } - - var path string - if req.Method != "CONNECT" { - path = req.URL.RequestURI() - if !validPseudoPath(path) { - orig := path - path = strings.TrimPrefix(path, req.URL.Scheme+"://"+host) - if !validPseudoPath(path) { - if req.URL.Opaque != "" { - return nil, fmt.Errorf("invalid request :path %q from URL.Opaque = %q", orig, req.URL.Opaque) - } else { - return nil, fmt.Errorf("invalid request :path %q", orig) - } - } - } - } - - // Check for any invalid headers+trailers and return an error before we - // potentially pollute our hpack state. (We want to be able to - // continue to reuse the hpack encoder for future requests) - if err := validateHeaders(req.Header); err != "" { - return nil, fmt.Errorf("invalid HTTP header %s", err) - } - if err := validateHeaders(req.Trailer); err != "" { - return nil, fmt.Errorf("invalid HTTP trailer %s", err) - } - - enumerateHeaders := func(f func(name, value string)) { - // 8.1.2.3 Request Pseudo-Header Fields - // The :path pseudo-header field includes the path and query parts of the - // target URI (the path-absolute production and optionally a '?' character - // followed by the query production, see Sections 3.3 and 3.4 of - // [RFC3986]). - f(":authority", host) - m := req.Method - if m == "" { - m = http.MethodGet - } - f(":method", m) - if req.Method != "CONNECT" { - f(":path", path) - f(":scheme", req.URL.Scheme) - } - if trailers != "" { - f("trailer", trailers) - } - - var didUA bool - for k, vv := range req.Header { - if asciiEqualFold(k, "host") || asciiEqualFold(k, "content-length") { - // Host is :authority, already sent. - // Content-Length is automatic, set below. - continue - } else if asciiEqualFold(k, "connection") || - asciiEqualFold(k, "proxy-connection") || - asciiEqualFold(k, "transfer-encoding") || - asciiEqualFold(k, "upgrade") || - asciiEqualFold(k, "keep-alive") { - // Per 8.1.2.2 Connection-Specific Header - // Fields, don't send connection-specific - // fields. We have already checked if any - // are error-worthy so just ignore the rest. - continue - } else if asciiEqualFold(k, "user-agent") { - // Match Go's http1 behavior: at most one - // User-Agent. If set to nil or empty string, - // then omit it. Otherwise if not mentioned, - // include the default (below). - didUA = true - if len(vv) < 1 { - continue - } - vv = vv[:1] - if vv[0] == "" { - continue - } - } else if asciiEqualFold(k, "cookie") { - // Per 8.1.2.5 To allow for better compression efficiency, the - // Cookie header field MAY be split into separate header fields, - // each with one or more cookie-pairs. - for _, v := range vv { - for { - p := strings.IndexByte(v, ';') - if p < 0 { - break - } - f("cookie", v[:p]) - p++ - // strip space after semicolon if any. - for p+1 <= len(v) && v[p] == ' ' { - p++ - } - v = v[p:] - } - if len(v) > 0 { - f("cookie", v) - } - } - continue - } - - for _, v := range vv { - f(k, v) - } - } - if shouldSendReqContentLength(req.Method, contentLength) { - f("content-length", strconv.FormatInt(contentLength, 10)) - } - if addGzipHeader { - f("accept-encoding", "gzip") - } - if !didUA { - f("user-agent", defaultUserAgent) - } - } - - // Do a first pass over the headers counting bytes to ensure - // we don't exceed cc.peerMaxHeaderListSize. This is done as a - // separate pass before encoding the headers to prevent - // modifying the hpack state. - hlSize := uint64(0) - enumerateHeaders(func(name, value string) { - hf := hpack.HeaderField{Name: name, Value: value} - hlSize += uint64(hf.Size()) - }) - - if hlSize > cc.peerMaxHeaderListSize { - return nil, errRequestHeaderListSize - } - - trace := httptrace.ContextClientTrace(req.Context()) - traceHeaders := traceHasWroteHeaderField(trace) - - // Header list size is ok. Write the headers. - enumerateHeaders(func(name, value string) { - name, ascii := lowerHeader(name) - if !ascii { - // Skip writing invalid headers. Per RFC 7540, Section 8.1.2, header - // field names have to be ASCII characters (just as in HTTP/1.x). - return - } - cc.writeHeader(name, value) - if traceHeaders { - traceWroteHeaderField(trace, name, value) - } - }) - - return cc.hbuf.Bytes(), nil -} - -// shouldSendReqContentLength reports whether the http2.Transport should send -// a "content-length" request header. This logic is basically a copy of the net/http -// transferWriter.shouldSendContentLength. -// The contentLength is the corrected contentLength (so 0 means actually 0, not unknown). -// -1 means unknown. -func shouldSendReqContentLength(method string, contentLength int64) bool { - if contentLength > 0 { - return true - } - if contentLength < 0 { - return false - } - // For zero bodies, whether we send a content-length depends on the method. - // It also kinda doesn't matter for http2 either way, with END_STREAM. - switch method { - case "POST", "PUT", "PATCH": - return true - default: - return false - } -} - // requires cc.wmu be held. func (cc *ClientConn) encodeTrailers(trailer http.Header) ([]byte, error) { cc.hbuf.Reset() @@ -2167,7 +2045,7 @@ func (cc *ClientConn) encodeTrailers(trailer http.Header) ([]byte, error) { } for k, vv := range trailer { - lowKey, ascii := lowerHeader(k) + lowKey, ascii := httpcommon.LowerHeader(k) if !ascii { // Skip writing invalid headers. Per RFC 7540, Section 8.1.2, header // field names have to be ASCII characters (just as in HTTP/1.x). @@ -2199,7 +2077,7 @@ type resAndError struct { func (cc *ClientConn) addStreamLocked(cs *clientStream) { cs.flow.add(int32(cc.initialWindowSize)) cs.flow.setConnFlow(&cc.flow) - cs.inflow.init(transportDefaultStreamFlow) + cs.inflow.init(cc.initialStreamRecvWindowSize) cs.ID = cc.nextStreamID cc.nextStreamID += 2 cc.streams[cs.ID] = cs @@ -2244,7 +2122,6 @@ type clientConnReadLoop struct { // readLoop runs in its own goroutine and reads and dispatches frames. func (cc *ClientConn) readLoop() { - cc.t.markNewGoroutine() rl := &clientConnReadLoop{cc: cc} defer rl.cleanup() cc.readerErr = rl.run() @@ -2278,7 +2155,6 @@ func isEOFOrNetReadError(err error) bool { func (rl *clientConnReadLoop) cleanup() { cc := rl.cc - cc.t.connPool().MarkDead(cc) defer cc.closeConn() defer close(cc.readerDone) @@ -2302,6 +2178,27 @@ func (rl *clientConnReadLoop) cleanup() { } cc.closed = true + // If the connection has never been used, and has been open for only a short time, + // leave it in the connection pool for a little while. + // + // This avoids a situation where new connections are constantly created, + // added to the pool, fail, and are removed from the pool, without any error + // being surfaced to the user. + unusedWaitTime := 5 * time.Second + if cc.idleTimeout > 0 && unusedWaitTime > cc.idleTimeout { + unusedWaitTime = cc.idleTimeout + } + idleTime := time.Now().Sub(cc.lastActive) + if atomic.LoadUint32(&cc.atomicReused) == 0 && idleTime < unusedWaitTime && !cc.closedOnIdle { + cc.idleTimer = time.AfterFunc(unusedWaitTime-idleTime, func() { + cc.t.connPool().MarkDead(cc) + }) + } else { + cc.mu.Unlock() // avoid any deadlocks in MarkDead + cc.t.connPool().MarkDead(cc) + cc.mu.Lock() + } + for _, cs := range cc.streams { select { case <-cs.peerClosed: @@ -2313,6 +2210,13 @@ func (rl *clientConnReadLoop) cleanup() { } cc.cond.Broadcast() cc.mu.Unlock() + + if !cc.seenSettings { + // If we have a pending request that wants extended CONNECT, + // let it continue and fail with the connection error. + cc.extendedConnectAllowed = true + close(cc.seenSettingsChan) + } } // countReadFrameError calls Transport.CountError with a string @@ -2345,10 +2249,10 @@ func (cc *ClientConn) countReadFrameError(err error) { func (rl *clientConnReadLoop) run() error { cc := rl.cc gotSettings := false - readIdleTimeout := cc.t.ReadIdleTimeout - var t timer + readIdleTimeout := cc.readIdleTimeout + var t *time.Timer if readIdleTimeout != 0 { - t = cc.t.afterFunc(readIdleTimeout, cc.healthCheck) + t = time.AfterFunc(readIdleTimeout, cc.healthCheck) } for { f, err := cc.fr.ReadFrame() @@ -2359,7 +2263,7 @@ func (rl *clientConnReadLoop) run() error { cc.vlogf("http2: Transport readFrame error on conn %p: (%T) %v", cc, err, err) } if se, ok := err.(StreamError); ok { - if cs := rl.streamByID(se.StreamID); cs != nil { + if cs := rl.streamByID(se.StreamID, notHeaderOrDataFrame); cs != nil { if se.Cause == nil { se.Cause = cc.fr.errDetail } @@ -2411,7 +2315,7 @@ func (rl *clientConnReadLoop) run() error { } func (rl *clientConnReadLoop) processHeaders(f *MetaHeadersFrame) error { - cs := rl.streamByID(f.StreamID) + cs := rl.streamByID(f.StreamID, headerOrDataFrame) if cs == nil { // We'd get here if we canceled a request while the // server had its response still in flight. So if this @@ -2499,7 +2403,7 @@ func (rl *clientConnReadLoop) handleResponse(cs *clientStream, f *MetaHeadersFra Status: status + " " + http.StatusText(statusCode), } for _, hf := range regularFields { - key := canonicalHeader(hf.Name) + key := httpcommon.CanonicalHeader(hf.Name) if key == "Trailer" { t := res.Trailer if t == nil { @@ -2507,7 +2411,7 @@ func (rl *clientConnReadLoop) handleResponse(cs *clientStream, f *MetaHeadersFra res.Trailer = t } foreachHeaderElement(hf.Value, func(v string) { - t[canonicalHeader(v)] = nil + t[httpcommon.CanonicalHeader(v)] = nil }) } else { vv := header[key] @@ -2529,15 +2433,34 @@ func (rl *clientConnReadLoop) handleResponse(cs *clientStream, f *MetaHeadersFra if f.StreamEnded() { return nil, errors.New("1xx informational response with END_STREAM flag") } - cs.num1xx++ - const max1xxResponses = 5 // arbitrary bound on number of informational responses, same as net/http - if cs.num1xx > max1xxResponses { - return nil, errors.New("http2: too many 1xx informational responses") - } if fn := cs.get1xxTraceFunc(); fn != nil { + // If the 1xx response is being delivered to the user, + // then they're responsible for limiting the number + // of responses. if err := fn(statusCode, textproto.MIMEHeader(header)); err != nil { return nil, err } + } else { + // If the user didn't examine the 1xx response, then we + // limit the size of all 1xx headers. + // + // This differs a bit from the HTTP/1 implementation, which + // limits the size of all 1xx headers plus the final response. + // Use the larger limit of MaxHeaderListSize and + // net/http.Transport.MaxResponseHeaderBytes. + limit := int64(cs.cc.t.maxHeaderListSize()) + if t1 := cs.cc.t.t1; t1 != nil && t1.MaxResponseHeaderBytes > limit { + limit = t1.MaxResponseHeaderBytes + } + for _, h := range f.Fields { + cs.totalHeaderSize += int64(h.Size()) + } + if cs.totalHeaderSize > limit { + if VerboseLogs { + log.Printf("http2: 1xx informational responses too large") + } + return nil, errors.New("header list too large") + } } if statusCode == 100 { traceGot100Continue(cs.trace) @@ -2612,7 +2535,7 @@ func (rl *clientConnReadLoop) processTrailers(cs *clientStream, f *MetaHeadersFr trailer := make(http.Header) for _, hf := range f.RegularFields() { - key := canonicalHeader(hf.Name) + key := httpcommon.CanonicalHeader(hf.Name) trailer[key] = append(trailer[key], hf.Value) } cs.trailer = trailer @@ -2721,7 +2644,7 @@ func (b transportResponseBody) Close() error { func (rl *clientConnReadLoop) processData(f *DataFrame) error { cc := rl.cc - cs := rl.streamByID(f.StreamID) + cs := rl.streamByID(f.StreamID, headerOrDataFrame) data := f.Data() if cs == nil { cc.mu.Lock() @@ -2856,9 +2779,28 @@ func (rl *clientConnReadLoop) endStreamError(cs *clientStream, err error) { cs.abortStream(err) } -func (rl *clientConnReadLoop) streamByID(id uint32) *clientStream { +func (rl *clientConnReadLoop) endStreamErrorLocked(cs *clientStream, err error) { + cs.readAborted = true + cs.abortStreamLocked(err) +} + +// Constants passed to streamByID for documentation purposes. +const ( + headerOrDataFrame = true + notHeaderOrDataFrame = false +) + +// streamByID returns the stream with the given id, or nil if no stream has that id. +// If headerOrData is true, it clears rst.StreamPingsBlocked. +func (rl *clientConnReadLoop) streamByID(id uint32, headerOrData bool) *clientStream { rl.cc.mu.Lock() defer rl.cc.mu.Unlock() + if headerOrData { + // Work around an unfortunate gRPC behavior. + // See comment on ClientConn.rstStreamPingsBlocked for details. + rl.cc.rstStreamPingsBlocked = false + } + rl.cc.readBeforeStreamID = rl.cc.nextStreamID cs := rl.cc.streams[id] if cs != nil && !cs.readAborted { return cs @@ -2909,6 +2851,7 @@ func (rl *clientConnReadLoop) processSettings(f *SettingsFrame) error { func (rl *clientConnReadLoop) processSettingsNoWrite(f *SettingsFrame) error { cc := rl.cc + defer cc.maybeCallStateHook() cc.mu.Lock() defer cc.mu.Unlock() @@ -2952,6 +2895,21 @@ func (rl *clientConnReadLoop) processSettingsNoWrite(f *SettingsFrame) error { case SettingHeaderTableSize: cc.henc.SetMaxDynamicTableSize(s.Val) cc.peerMaxHeaderTableSize = s.Val + case SettingEnableConnectProtocol: + if err := s.Valid(); err != nil { + return err + } + // If the peer wants to send us SETTINGS_ENABLE_CONNECT_PROTOCOL, + // we require that it do so in the first SETTINGS frame. + // + // When we attempt to use extended CONNECT, we wait for the first + // SETTINGS frame to see if the server supports it. If we let the + // server enable the feature with a later SETTINGS frame, then + // users will see inconsistent results depending on whether we've + // seen that frame or not. + if !cc.seenSettings { + cc.extendedConnectAllowed = s.Val == 1 + } default: cc.vlogf("Unhandled Setting: %v", s) } @@ -2969,6 +2927,7 @@ func (rl *clientConnReadLoop) processSettingsNoWrite(f *SettingsFrame) error { // connection can establish to our default. cc.maxConcurrentStreams = defaultMaxConcurrentStreams } + close(cc.seenSettingsChan) cc.seenSettings = true } @@ -2977,7 +2936,7 @@ func (rl *clientConnReadLoop) processSettingsNoWrite(f *SettingsFrame) error { func (rl *clientConnReadLoop) processWindowUpdate(f *WindowUpdateFrame) error { cc := rl.cc - cs := rl.streamByID(f.StreamID) + cs := rl.streamByID(f.StreamID, notHeaderOrDataFrame) if f.StreamID != 0 && cs == nil { return nil } @@ -2992,7 +2951,7 @@ func (rl *clientConnReadLoop) processWindowUpdate(f *WindowUpdateFrame) error { if !fl.add(int32(f.Increment)) { // For stream, the sender sends RST_STREAM with an error code of FLOW_CONTROL_ERROR if cs != nil { - rl.endStreamError(cs, StreamError{ + rl.endStreamErrorLocked(cs, StreamError{ StreamID: f.StreamID, Code: ErrCodeFlowControl, }) @@ -3006,7 +2965,7 @@ func (rl *clientConnReadLoop) processWindowUpdate(f *WindowUpdateFrame) error { } func (rl *clientConnReadLoop) processResetStream(f *RSTStreamFrame) error { - cs := rl.streamByID(f.StreamID) + cs := rl.streamByID(f.StreamID, notHeaderOrDataFrame) if cs == nil { // TODO: return error if server tries to RST_STREAM an idle stream return nil @@ -3046,7 +3005,6 @@ func (cc *ClientConn) Ping(ctx context.Context) error { var pingError error errc := make(chan struct{}) go func() { - cc.t.markNewGoroutine() cc.wmu.Lock() defer cc.wmu.Unlock() if pingError = cc.fr.WritePing(false, p); pingError != nil { @@ -3074,6 +3032,7 @@ func (cc *ClientConn) Ping(ctx context.Context) error { func (rl *clientConnReadLoop) processPing(f *PingFrame) error { if f.IsAck() { cc := rl.cc + defer cc.maybeCallStateHook() cc.mu.Lock() defer cc.mu.Unlock() // If ack, notify listener if any @@ -3081,6 +3040,12 @@ func (rl *clientConnReadLoop) processPing(f *PingFrame) error { close(c) delete(cc.pings, f.Data) } + if cc.pendingResets > 0 { + // See clientStream.cleanupWriteRequest. + cc.pendingResets = 0 + cc.rstStreamPingsBlocked = true + cc.cond.Broadcast() + } return nil } cc := rl.cc @@ -3103,20 +3068,27 @@ func (rl *clientConnReadLoop) processPushPromise(f *PushPromiseFrame) error { return ConnectionError(ErrCodeProtocol) } -func (cc *ClientConn) writeStreamReset(streamID uint32, code ErrCode, err error) { +// writeStreamReset sends a RST_STREAM frame. +// When ping is true, it also sends a PING frame with a random payload. +func (cc *ClientConn) writeStreamReset(streamID uint32, code ErrCode, ping bool, err error) { // TODO: map err to more interesting error codes, once the // HTTP community comes up with some. But currently for // RST_STREAM there's no equivalent to GOAWAY frame's debug // data, and the error codes are all pretty vague ("cancel"). cc.wmu.Lock() cc.fr.WriteRSTStream(streamID, code) + if ping { + var payload [8]byte + rand.Read(payload[:]) + cc.fr.WritePing(false, payload) + } cc.bw.Flush() cc.wmu.Unlock() } var ( errResponseHeaderListSize = errors.New("http2: response header list larger than advertised limit") - errRequestHeaderListSize = errors.New("http2: request header list larger than peer's advertised limit") + errRequestHeaderListSize = httpcommon.ErrRequestHeaderListSize ) func (cc *ClientConn) logf(format string, args ...interface{}) { @@ -3163,35 +3135,102 @@ type erringRoundTripper struct{ err error } func (rt erringRoundTripper) RoundTripErr() error { return rt.err } func (rt erringRoundTripper) RoundTrip(*http.Request) (*http.Response, error) { return nil, rt.err } +var errConcurrentReadOnResBody = errors.New("http2: concurrent read on response body") + // gzipReader wraps a response body so it can lazily -// call gzip.NewReader on the first call to Read +// get gzip.Reader from the pool on the first call to Read. +// After Close is called it puts gzip.Reader to the pool immediately +// if there is no Read in progress or later when Read completes. type gzipReader struct { _ incomparable body io.ReadCloser // underlying Response.Body - zr *gzip.Reader // lazily-initialized gzip reader - zerr error // sticky error + mu sync.Mutex // guards zr and zerr + zr *gzip.Reader // stores gzip reader from the pool between reads + zerr error // sticky gzip reader init error or sentinel value to detect concurrent read and read after close } -func (gz *gzipReader) Read(p []byte) (n int, err error) { +type eofReader struct{} + +func (eofReader) Read([]byte) (int, error) { return 0, io.EOF } +func (eofReader) ReadByte() (byte, error) { return 0, io.EOF } + +var gzipPool = sync.Pool{New: func() any { return new(gzip.Reader) }} + +// gzipPoolGet gets a gzip.Reader from the pool and resets it to read from r. +func gzipPoolGet(r io.Reader) (*gzip.Reader, error) { + zr := gzipPool.Get().(*gzip.Reader) + if err := zr.Reset(r); err != nil { + gzipPoolPut(zr) + return nil, err + } + return zr, nil +} + +// gzipPoolPut puts a gzip.Reader back into the pool. +func gzipPoolPut(zr *gzip.Reader) { + // Reset will allocate bufio.Reader if we pass it anything + // other than a flate.Reader, so ensure that it's getting one. + var r flate.Reader = eofReader{} + zr.Reset(r) + gzipPool.Put(zr) +} + +// acquire returns a gzip.Reader for reading response body. +// The reader must be released after use. +func (gz *gzipReader) acquire() (*gzip.Reader, error) { + gz.mu.Lock() + defer gz.mu.Unlock() if gz.zerr != nil { - return 0, gz.zerr + return nil, gz.zerr } if gz.zr == nil { - gz.zr, err = gzip.NewReader(gz.body) - if err != nil { - gz.zerr = err - return 0, err + gz.zr, gz.zerr = gzipPoolGet(gz.body) + if gz.zerr != nil { + return nil, gz.zerr } } - return gz.zr.Read(p) + ret := gz.zr + gz.zr, gz.zerr = nil, errConcurrentReadOnResBody + return ret, nil } -func (gz *gzipReader) Close() error { - if err := gz.body.Close(); err != nil { - return err +// release returns the gzip.Reader to the pool if Close was called during Read. +func (gz *gzipReader) release(zr *gzip.Reader) { + gz.mu.Lock() + defer gz.mu.Unlock() + if gz.zerr == errConcurrentReadOnResBody { + gz.zr, gz.zerr = zr, nil + } else { // fs.ErrClosed + gzipPoolPut(zr) + } +} + +// close returns the gzip.Reader to the pool immediately or +// signals release to do so after Read completes. +func (gz *gzipReader) close() { + gz.mu.Lock() + defer gz.mu.Unlock() + if gz.zerr == nil && gz.zr != nil { + gzipPoolPut(gz.zr) + gz.zr = nil } gz.zerr = fs.ErrClosed - return nil +} + +func (gz *gzipReader) Read(p []byte) (n int, err error) { + zr, err := gz.acquire() + if err != nil { + return 0, err + } + defer gz.release(zr) + + return zr.Read(p) +} + +func (gz *gzipReader) Close() error { + gz.close() + + return gz.body.Close() } type errorReader struct{ err error } @@ -3217,9 +3256,13 @@ func registerHTTPSProtocol(t *http.Transport, rt noDialH2RoundTripper) (err erro } // noDialH2RoundTripper is a RoundTripper which only tries to complete the request -// if there's already has a cached connection to the host. +// if there's already a cached connection to the host. // (The field is exported so it can be accessed via reflect from net/http; tested // by TestNoDialH2RoundTripperType) +// +// A noDialH2RoundTripper is registered with http1.Transport.RegisterProtocol, +// and the http1.Transport can use type assertions to call non-RoundTrip methods on it. +// This lets us expose, for example, NewClientConn to net/http. type noDialH2RoundTripper struct{ *Transport } func (rt noDialH2RoundTripper) RoundTrip(req *http.Request) (*http.Response, error) { @@ -3230,6 +3273,85 @@ func (rt noDialH2RoundTripper) RoundTrip(req *http.Request) (*http.Response, err return res, err } +func (rt noDialH2RoundTripper) NewClientConn(conn net.Conn, internalStateHook func()) (http.RoundTripper, error) { + tr := rt.Transport + cc, err := tr.newClientConn(conn, tr.disableKeepAlives(), internalStateHook) + if err != nil { + return nil, err + } + + // RoundTrip should block when the conn is at its concurrency limit, + // not return an error. Setting strictMaxConcurrentStreams enables this. + cc.strictMaxConcurrentStreams = true + + return netHTTPClientConn{cc}, nil +} + +// netHTTPClientConn wraps ClientConn and implements the interface net/http expects from +// the RoundTripper returned by NewClientConn. +type netHTTPClientConn struct { + cc *ClientConn +} + +func (cc netHTTPClientConn) RoundTrip(req *http.Request) (*http.Response, error) { + return cc.cc.RoundTrip(req) +} + +func (cc netHTTPClientConn) Close() error { + return cc.cc.Close() +} + +func (cc netHTTPClientConn) Err() error { + cc.cc.mu.Lock() + defer cc.cc.mu.Unlock() + if cc.cc.closed { + return errors.New("connection closed") + } + return nil +} + +func (cc netHTTPClientConn) Reserve() error { + defer cc.cc.maybeCallStateHook() + cc.cc.mu.Lock() + defer cc.cc.mu.Unlock() + if !cc.cc.canReserveLocked() { + return errors.New("connection is unavailable") + } + cc.cc.streamsReserved++ + return nil +} + +func (cc netHTTPClientConn) Release() { + defer cc.cc.maybeCallStateHook() + cc.cc.mu.Lock() + defer cc.cc.mu.Unlock() + // We don't complain if streamsReserved is 0. + // + // This is consistent with RoundTrip: both Release and RoundTrip will + // consume a reservation iff one exists. + if cc.cc.streamsReserved > 0 { + cc.cc.streamsReserved-- + } +} + +func (cc netHTTPClientConn) Available() int { + cc.cc.mu.Lock() + defer cc.cc.mu.Unlock() + return cc.cc.availableLocked() +} + +func (cc netHTTPClientConn) InFlight() int { + cc.cc.mu.Lock() + defer cc.cc.mu.Unlock() + return cc.cc.currentRequestCountLocked() +} + +func (cc *ClientConn) maybeCallStateHook() { + if cc.internalStateHook != nil { + cc.internalStateHook() + } +} + func (t *Transport) idleConnTimeout() time.Duration { // to keep things backwards compatible, we use non-zero values of // IdleConnTimeout, followed by using the IdleConnTimeout on the underlying @@ -3300,16 +3422,6 @@ func traceFirstResponseByte(trace *httptrace.ClientTrace) { } } -func traceHasWroteHeaderField(trace *httptrace.ClientTrace) bool { - return trace != nil && trace.WroteHeaderField != nil -} - -func traceWroteHeaderField(trace *httptrace.ClientTrace, k, v string) { - if trace != nil && trace.WroteHeaderField != nil { - trace.WroteHeaderField(k, []string{v}) - } -} - func traceGot1xxResponseFunc(trace *httptrace.ClientTrace) func(int, textproto.MIMEHeader) error { if trace != nil { return trace.Got1xxResponse diff --git a/vendor/golang.org/x/net/http2/unencrypted.go b/vendor/golang.org/x/net/http2/unencrypted.go new file mode 100644 index 0000000000..b2de211613 --- /dev/null +++ b/vendor/golang.org/x/net/http2/unencrypted.go @@ -0,0 +1,32 @@ +// Copyright 2024 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package http2 + +import ( + "crypto/tls" + "errors" + "net" +) + +const nextProtoUnencryptedHTTP2 = "unencrypted_http2" + +// unencryptedNetConnFromTLSConn retrieves a net.Conn wrapped in a *tls.Conn. +// +// TLSNextProto functions accept a *tls.Conn. +// +// When passing an unencrypted HTTP/2 connection to a TLSNextProto function, +// we pass a *tls.Conn with an underlying net.Conn containing the unencrypted connection. +// To be extra careful about mistakes (accidentally dropping TLS encryption in a place +// where we want it), the tls.Conn contains a net.Conn with an UnencryptedNetConn method +// that returns the actual connection we want to use. +func unencryptedNetConnFromTLSConn(tc *tls.Conn) (net.Conn, error) { + conner, ok := tc.NetConn().(interface { + UnencryptedNetConn() net.Conn + }) + if !ok { + return nil, errors.New("http2: TLS conn unexpectedly found in unencrypted handoff") + } + return conner.UnencryptedNetConn(), nil +} diff --git a/vendor/golang.org/x/net/http2/write.go b/vendor/golang.org/x/net/http2/write.go index 33f61398a1..fdb35b9477 100644 --- a/vendor/golang.org/x/net/http2/write.go +++ b/vendor/golang.org/x/net/http2/write.go @@ -13,6 +13,7 @@ import ( "golang.org/x/net/http/httpguts" "golang.org/x/net/http2/hpack" + "golang.org/x/net/internal/httpcommon" ) // writeFramer is implemented by any type that is used to write frames. @@ -131,6 +132,16 @@ func (se StreamError) writeFrame(ctx writeContext) error { func (se StreamError) staysWithinBuffer(max int) bool { return frameHeaderLen+4 <= max } +type writePing struct { + data [8]byte +} + +func (w writePing) writeFrame(ctx writeContext) error { + return ctx.Framer().WritePing(false, w.data) +} + +func (w writePing) staysWithinBuffer(max int) bool { return frameHeaderLen+len(w.data) <= max } + type writePingAck struct{ pf *PingFrame } func (w writePingAck) writeFrame(ctx writeContext) error { @@ -341,7 +352,7 @@ func encodeHeaders(enc *hpack.Encoder, h http.Header, keys []string) { } for _, k := range keys { vv := h[k] - k, ascii := lowerHeader(k) + k, ascii := httpcommon.LowerHeader(k) if !ascii { // Skip writing invalid headers. Per RFC 7540, Section 8.1.2, header // field names have to be ASCII characters (just as in HTTP/1.x). diff --git a/vendor/golang.org/x/net/http2/writesched.go b/vendor/golang.org/x/net/http2/writesched.go index cc893adc29..7de27be525 100644 --- a/vendor/golang.org/x/net/http2/writesched.go +++ b/vendor/golang.org/x/net/http2/writesched.go @@ -42,6 +42,8 @@ type OpenStreamOptions struct { // PusherID is zero if the stream was initiated by the client. Otherwise, // PusherID names the stream that pushed the newly opened stream. PusherID uint32 + // priority is used to set the priority of the newly opened stream. + priority PriorityParam } // FrameWriteRequest is a request to write a frame. @@ -183,45 +185,75 @@ func (wr *FrameWriteRequest) replyToWriter(err error) { } // writeQueue is used by implementations of WriteScheduler. +// +// Each writeQueue contains a queue of FrameWriteRequests, meant to store all +// FrameWriteRequests associated with a given stream. This is implemented as a +// two-stage queue: currQueue[currPos:] and nextQueue. Removing an item is done +// by incrementing currPos of currQueue. Adding an item is done by appending it +// to the nextQueue. If currQueue is empty when trying to remove an item, we +// can swap currQueue and nextQueue to remedy the situation. +// This two-stage queue is analogous to the use of two lists in Okasaki's +// purely functional queue but without the overhead of reversing the list when +// swapping stages. +// +// writeQueue also contains prev and next, this can be used by implementations +// of WriteScheduler to construct data structures that represent the order of +// writing between different streams (e.g. circular linked list). type writeQueue struct { - s []FrameWriteRequest + currQueue []FrameWriteRequest + nextQueue []FrameWriteRequest + currPos int + prev, next *writeQueue } -func (q *writeQueue) empty() bool { return len(q.s) == 0 } +func (q *writeQueue) empty() bool { + return (len(q.currQueue) - q.currPos + len(q.nextQueue)) == 0 +} func (q *writeQueue) push(wr FrameWriteRequest) { - q.s = append(q.s, wr) + q.nextQueue = append(q.nextQueue, wr) } func (q *writeQueue) shift() FrameWriteRequest { - if len(q.s) == 0 { + if q.empty() { panic("invalid use of queue") } - wr := q.s[0] - // TODO: less copy-happy queue. - copy(q.s, q.s[1:]) - q.s[len(q.s)-1] = FrameWriteRequest{} - q.s = q.s[:len(q.s)-1] + if q.currPos >= len(q.currQueue) { + q.currQueue, q.currPos, q.nextQueue = q.nextQueue, 0, q.currQueue[:0] + } + wr := q.currQueue[q.currPos] + q.currQueue[q.currPos] = FrameWriteRequest{} + q.currPos++ return wr } +func (q *writeQueue) peek() *FrameWriteRequest { + if q.currPos < len(q.currQueue) { + return &q.currQueue[q.currPos] + } + if len(q.nextQueue) > 0 { + return &q.nextQueue[0] + } + return nil +} + // consume consumes up to n bytes from q.s[0]. If the frame is // entirely consumed, it is removed from the queue. If the frame // is partially consumed, the frame is kept with the consumed // bytes removed. Returns true iff any bytes were consumed. func (q *writeQueue) consume(n int32) (FrameWriteRequest, bool) { - if len(q.s) == 0 { + if q.empty() { return FrameWriteRequest{}, false } - consumed, rest, numresult := q.s[0].Consume(n) + consumed, rest, numresult := q.peek().Consume(n) switch numresult { case 0: return FrameWriteRequest{}, false case 1: q.shift() case 2: - q.s[0] = rest + *q.peek() = rest } return consumed, true } @@ -230,10 +262,15 @@ type writeQueuePool []*writeQueue // put inserts an unused writeQueue into the pool. func (p *writeQueuePool) put(q *writeQueue) { - for i := range q.s { - q.s[i] = FrameWriteRequest{} + for i := range q.currQueue { + q.currQueue[i] = FrameWriteRequest{} + } + for i := range q.nextQueue { + q.nextQueue[i] = FrameWriteRequest{} } - q.s = q.s[:0] + q.currQueue = q.currQueue[:0] + q.nextQueue = q.nextQueue[:0] + q.currPos = 0 *p = append(*p, q) } diff --git a/vendor/golang.org/x/net/http2/writesched_priority.go b/vendor/golang.org/x/net/http2/writesched_priority_rfc7540.go similarity index 76% rename from vendor/golang.org/x/net/http2/writesched_priority.go rename to vendor/golang.org/x/net/http2/writesched_priority_rfc7540.go index f6783339d1..7803a9261b 100644 --- a/vendor/golang.org/x/net/http2/writesched_priority.go +++ b/vendor/golang.org/x/net/http2/writesched_priority_rfc7540.go @@ -11,7 +11,7 @@ import ( ) // RFC 7540, Section 5.3.5: the default weight is 16. -const priorityDefaultWeight = 15 // 16 = 15 + 1 +const priorityDefaultWeightRFC7540 = 15 // 16 = 15 + 1 // PriorityWriteSchedulerConfig configures a priorityWriteScheduler. type PriorityWriteSchedulerConfig struct { @@ -56,6 +56,10 @@ type PriorityWriteSchedulerConfig struct { // frames by following HTTP/2 priorities as described in RFC 7540 Section 5.3. // If cfg is nil, default options are used. func NewPriorityWriteScheduler(cfg *PriorityWriteSchedulerConfig) WriteScheduler { + return newPriorityWriteSchedulerRFC7540(cfg) +} + +func newPriorityWriteSchedulerRFC7540(cfg *PriorityWriteSchedulerConfig) WriteScheduler { if cfg == nil { // For justification of these defaults, see: // https://docs.google.com/document/d/1oLhNg1skaWD4_DtaoCxdSRN5erEXrH-KnLrMwEpOtFY @@ -66,8 +70,8 @@ func NewPriorityWriteScheduler(cfg *PriorityWriteSchedulerConfig) WriteScheduler } } - ws := &priorityWriteScheduler{ - nodes: make(map[uint32]*priorityNode), + ws := &priorityWriteSchedulerRFC7540{ + nodes: make(map[uint32]*priorityNodeRFC7540), maxClosedNodesInTree: cfg.MaxClosedNodesInTree, maxIdleNodesInTree: cfg.MaxIdleNodesInTree, enableWriteThrottle: cfg.ThrottleOutOfOrderWrites, @@ -81,32 +85,32 @@ func NewPriorityWriteScheduler(cfg *PriorityWriteSchedulerConfig) WriteScheduler return ws } -type priorityNodeState int +type priorityNodeStateRFC7540 int const ( - priorityNodeOpen priorityNodeState = iota - priorityNodeClosed - priorityNodeIdle + priorityNodeOpenRFC7540 priorityNodeStateRFC7540 = iota + priorityNodeClosedRFC7540 + priorityNodeIdleRFC7540 ) -// priorityNode is a node in an HTTP/2 priority tree. +// priorityNodeRFC7540 is a node in an HTTP/2 priority tree. // Each node is associated with a single stream ID. // See RFC 7540, Section 5.3. -type priorityNode struct { - q writeQueue // queue of pending frames to write - id uint32 // id of the stream, or 0 for the root of the tree - weight uint8 // the actual weight is weight+1, so the value is in [1,256] - state priorityNodeState // open | closed | idle - bytes int64 // number of bytes written by this node, or 0 if closed - subtreeBytes int64 // sum(node.bytes) of all nodes in this subtree +type priorityNodeRFC7540 struct { + q writeQueue // queue of pending frames to write + id uint32 // id of the stream, or 0 for the root of the tree + weight uint8 // the actual weight is weight+1, so the value is in [1,256] + state priorityNodeStateRFC7540 // open | closed | idle + bytes int64 // number of bytes written by this node, or 0 if closed + subtreeBytes int64 // sum(node.bytes) of all nodes in this subtree // These links form the priority tree. - parent *priorityNode - kids *priorityNode // start of the kids list - prev, next *priorityNode // doubly-linked list of siblings + parent *priorityNodeRFC7540 + kids *priorityNodeRFC7540 // start of the kids list + prev, next *priorityNodeRFC7540 // doubly-linked list of siblings } -func (n *priorityNode) setParent(parent *priorityNode) { +func (n *priorityNodeRFC7540) setParent(parent *priorityNodeRFC7540) { if n == parent { panic("setParent to self") } @@ -141,7 +145,7 @@ func (n *priorityNode) setParent(parent *priorityNode) { } } -func (n *priorityNode) addBytes(b int64) { +func (n *priorityNodeRFC7540) addBytes(b int64) { n.bytes += b for ; n != nil; n = n.parent { n.subtreeBytes += b @@ -154,7 +158,7 @@ func (n *priorityNode) addBytes(b int64) { // // f(n, openParent) takes two arguments: the node to visit, n, and a bool that is true // if any ancestor p of n is still open (ignoring the root node). -func (n *priorityNode) walkReadyInOrder(openParent bool, tmp *[]*priorityNode, f func(*priorityNode, bool) bool) bool { +func (n *priorityNodeRFC7540) walkReadyInOrder(openParent bool, tmp *[]*priorityNodeRFC7540, f func(*priorityNodeRFC7540, bool) bool) bool { if !n.q.empty() && f(n, openParent) { return true } @@ -165,7 +169,7 @@ func (n *priorityNode) walkReadyInOrder(openParent bool, tmp *[]*priorityNode, f // Don't consider the root "open" when updating openParent since // we can't send data frames on the root stream (only control frames). if n.id != 0 { - openParent = openParent || (n.state == priorityNodeOpen) + openParent = openParent || (n.state == priorityNodeOpenRFC7540) } // Common case: only one kid or all kids have the same weight. @@ -195,7 +199,7 @@ func (n *priorityNode) walkReadyInOrder(openParent bool, tmp *[]*priorityNode, f *tmp = append(*tmp, n.kids) n.kids.setParent(nil) } - sort.Sort(sortPriorityNodeSiblings(*tmp)) + sort.Sort(sortPriorityNodeSiblingsRFC7540(*tmp)) for i := len(*tmp) - 1; i >= 0; i-- { (*tmp)[i].setParent(n) // setParent inserts at the head of n.kids } @@ -207,15 +211,15 @@ func (n *priorityNode) walkReadyInOrder(openParent bool, tmp *[]*priorityNode, f return false } -type sortPriorityNodeSiblings []*priorityNode +type sortPriorityNodeSiblingsRFC7540 []*priorityNodeRFC7540 -func (z sortPriorityNodeSiblings) Len() int { return len(z) } -func (z sortPriorityNodeSiblings) Swap(i, k int) { z[i], z[k] = z[k], z[i] } -func (z sortPriorityNodeSiblings) Less(i, k int) bool { +func (z sortPriorityNodeSiblingsRFC7540) Len() int { return len(z) } +func (z sortPriorityNodeSiblingsRFC7540) Swap(i, k int) { z[i], z[k] = z[k], z[i] } +func (z sortPriorityNodeSiblingsRFC7540) Less(i, k int) bool { // Prefer the subtree that has sent fewer bytes relative to its weight. // See sections 5.3.2 and 5.3.4. - wi, bi := float64(z[i].weight+1), float64(z[i].subtreeBytes) - wk, bk := float64(z[k].weight+1), float64(z[k].subtreeBytes) + wi, bi := float64(z[i].weight)+1, float64(z[i].subtreeBytes) + wk, bk := float64(z[k].weight)+1, float64(z[k].subtreeBytes) if bi == 0 && bk == 0 { return wi >= wk } @@ -225,13 +229,13 @@ func (z sortPriorityNodeSiblings) Less(i, k int) bool { return bi/bk <= wi/wk } -type priorityWriteScheduler struct { +type priorityWriteSchedulerRFC7540 struct { // root is the root of the priority tree, where root.id = 0. // The root queues control frames that are not associated with any stream. - root priorityNode + root priorityNodeRFC7540 // nodes maps stream ids to priority tree nodes. - nodes map[uint32]*priorityNode + nodes map[uint32]*priorityNodeRFC7540 // maxID is the maximum stream id in nodes. maxID uint32 @@ -239,7 +243,7 @@ type priorityWriteScheduler struct { // lists of nodes that have been closed or are idle, but are kept in // the tree for improved prioritization. When the lengths exceed either // maxClosedNodesInTree or maxIdleNodesInTree, old nodes are discarded. - closedNodes, idleNodes []*priorityNode + closedNodes, idleNodes []*priorityNodeRFC7540 // From the config. maxClosedNodesInTree int @@ -248,19 +252,19 @@ type priorityWriteScheduler struct { enableWriteThrottle bool // tmp is scratch space for priorityNode.walkReadyInOrder to reduce allocations. - tmp []*priorityNode + tmp []*priorityNodeRFC7540 // pool of empty queues for reuse. queuePool writeQueuePool } -func (ws *priorityWriteScheduler) OpenStream(streamID uint32, options OpenStreamOptions) { +func (ws *priorityWriteSchedulerRFC7540) OpenStream(streamID uint32, options OpenStreamOptions) { // The stream may be currently idle but cannot be opened or closed. if curr := ws.nodes[streamID]; curr != nil { - if curr.state != priorityNodeIdle { + if curr.state != priorityNodeIdleRFC7540 { panic(fmt.Sprintf("stream %d already opened", streamID)) } - curr.state = priorityNodeOpen + curr.state = priorityNodeOpenRFC7540 return } @@ -272,11 +276,11 @@ func (ws *priorityWriteScheduler) OpenStream(streamID uint32, options OpenStream if parent == nil { parent = &ws.root } - n := &priorityNode{ + n := &priorityNodeRFC7540{ q: *ws.queuePool.get(), id: streamID, - weight: priorityDefaultWeight, - state: priorityNodeOpen, + weight: priorityDefaultWeightRFC7540, + state: priorityNodeOpenRFC7540, } n.setParent(parent) ws.nodes[streamID] = n @@ -285,24 +289,23 @@ func (ws *priorityWriteScheduler) OpenStream(streamID uint32, options OpenStream } } -func (ws *priorityWriteScheduler) CloseStream(streamID uint32) { +func (ws *priorityWriteSchedulerRFC7540) CloseStream(streamID uint32) { if streamID == 0 { panic("violation of WriteScheduler interface: cannot close stream 0") } if ws.nodes[streamID] == nil { panic(fmt.Sprintf("violation of WriteScheduler interface: unknown stream %d", streamID)) } - if ws.nodes[streamID].state != priorityNodeOpen { + if ws.nodes[streamID].state != priorityNodeOpenRFC7540 { panic(fmt.Sprintf("violation of WriteScheduler interface: stream %d already closed", streamID)) } n := ws.nodes[streamID] - n.state = priorityNodeClosed + n.state = priorityNodeClosedRFC7540 n.addBytes(-n.bytes) q := n.q ws.queuePool.put(&q) - n.q.s = nil if ws.maxClosedNodesInTree > 0 { ws.addClosedOrIdleNode(&ws.closedNodes, ws.maxClosedNodesInTree, n) } else { @@ -310,7 +313,7 @@ func (ws *priorityWriteScheduler) CloseStream(streamID uint32) { } } -func (ws *priorityWriteScheduler) AdjustStream(streamID uint32, priority PriorityParam) { +func (ws *priorityWriteSchedulerRFC7540) AdjustStream(streamID uint32, priority PriorityParam) { if streamID == 0 { panic("adjustPriority on root") } @@ -324,11 +327,11 @@ func (ws *priorityWriteScheduler) AdjustStream(streamID uint32, priority Priorit return } ws.maxID = streamID - n = &priorityNode{ + n = &priorityNodeRFC7540{ q: *ws.queuePool.get(), id: streamID, - weight: priorityDefaultWeight, - state: priorityNodeIdle, + weight: priorityDefaultWeightRFC7540, + state: priorityNodeIdleRFC7540, } n.setParent(&ws.root) ws.nodes[streamID] = n @@ -340,7 +343,7 @@ func (ws *priorityWriteScheduler) AdjustStream(streamID uint32, priority Priorit parent := ws.nodes[priority.StreamDep] if parent == nil { n.setParent(&ws.root) - n.weight = priorityDefaultWeight + n.weight = priorityDefaultWeightRFC7540 return } @@ -381,8 +384,8 @@ func (ws *priorityWriteScheduler) AdjustStream(streamID uint32, priority Priorit n.weight = priority.Weight } -func (ws *priorityWriteScheduler) Push(wr FrameWriteRequest) { - var n *priorityNode +func (ws *priorityWriteSchedulerRFC7540) Push(wr FrameWriteRequest) { + var n *priorityNodeRFC7540 if wr.isControl() { n = &ws.root } else { @@ -401,8 +404,8 @@ func (ws *priorityWriteScheduler) Push(wr FrameWriteRequest) { n.q.push(wr) } -func (ws *priorityWriteScheduler) Pop() (wr FrameWriteRequest, ok bool) { - ws.root.walkReadyInOrder(false, &ws.tmp, func(n *priorityNode, openParent bool) bool { +func (ws *priorityWriteSchedulerRFC7540) Pop() (wr FrameWriteRequest, ok bool) { + ws.root.walkReadyInOrder(false, &ws.tmp, func(n *priorityNodeRFC7540, openParent bool) bool { limit := int32(math.MaxInt32) if openParent { limit = ws.writeThrottleLimit @@ -428,7 +431,7 @@ func (ws *priorityWriteScheduler) Pop() (wr FrameWriteRequest, ok bool) { return wr, ok } -func (ws *priorityWriteScheduler) addClosedOrIdleNode(list *[]*priorityNode, maxSize int, n *priorityNode) { +func (ws *priorityWriteSchedulerRFC7540) addClosedOrIdleNode(list *[]*priorityNodeRFC7540, maxSize int, n *priorityNodeRFC7540) { if maxSize == 0 { return } @@ -442,7 +445,7 @@ func (ws *priorityWriteScheduler) addClosedOrIdleNode(list *[]*priorityNode, max *list = append(*list, n) } -func (ws *priorityWriteScheduler) removeNode(n *priorityNode) { +func (ws *priorityWriteSchedulerRFC7540) removeNode(n *priorityNodeRFC7540) { for n.kids != nil { n.kids.setParent(n.parent) } diff --git a/vendor/golang.org/x/net/http2/writesched_priority_rfc9218.go b/vendor/golang.org/x/net/http2/writesched_priority_rfc9218.go new file mode 100644 index 0000000000..dfbfc1eb34 --- /dev/null +++ b/vendor/golang.org/x/net/http2/writesched_priority_rfc9218.go @@ -0,0 +1,224 @@ +// Copyright 2025 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package http2 + +import ( + "fmt" + "math" +) + +type streamMetadata struct { + location *writeQueue + priority PriorityParam +} + +type priorityWriteSchedulerRFC9218 struct { + // control contains control frames (SETTINGS, PING, etc.). + control writeQueue + + // heads contain the head of a circular list of streams. + // We put these heads within a nested array that represents urgency and + // incremental, as defined in + // https://www.rfc-editor.org/rfc/rfc9218.html#name-priority-parameters. + // 8 represents u=0 up to u=7, and 2 represents i=false and i=true. + heads [8][2]*writeQueue + + // streams contains a mapping between each stream ID and their metadata, so + // we can quickly locate them when needing to, for example, adjust their + // priority. + streams map[uint32]streamMetadata + + // queuePool are empty queues for reuse. + queuePool writeQueuePool + + // prioritizeIncremental is used to determine whether we should prioritize + // incremental streams or not, when urgency is the same in a given Pop() + // call. + prioritizeIncremental bool + + // priorityUpdateBuf is used to buffer the most recent PRIORITY_UPDATE we + // receive per https://www.rfc-editor.org/rfc/rfc9218.html#name-the-priority_update-frame. + priorityUpdateBuf struct { + // streamID being 0 means that the buffer is empty. This is a safe + // assumption as PRIORITY_UPDATE for stream 0 is a PROTOCOL_ERROR. + streamID uint32 + priority PriorityParam + } +} + +func newPriorityWriteSchedulerRFC9218() WriteScheduler { + ws := &priorityWriteSchedulerRFC9218{ + streams: make(map[uint32]streamMetadata), + } + return ws +} + +func (ws *priorityWriteSchedulerRFC9218) OpenStream(streamID uint32, opt OpenStreamOptions) { + if ws.streams[streamID].location != nil { + panic(fmt.Errorf("stream %d already opened", streamID)) + } + if streamID == ws.priorityUpdateBuf.streamID { + ws.priorityUpdateBuf.streamID = 0 + opt.priority = ws.priorityUpdateBuf.priority + } + q := ws.queuePool.get() + ws.streams[streamID] = streamMetadata{ + location: q, + priority: opt.priority, + } + + u, i := opt.priority.urgency, opt.priority.incremental + if ws.heads[u][i] == nil { + ws.heads[u][i] = q + q.next = q + q.prev = q + } else { + // Queues are stored in a ring. + // Insert the new stream before ws.head, putting it at the end of the list. + q.prev = ws.heads[u][i].prev + q.next = ws.heads[u][i] + q.prev.next = q + q.next.prev = q + } +} + +func (ws *priorityWriteSchedulerRFC9218) CloseStream(streamID uint32) { + metadata := ws.streams[streamID] + q, u, i := metadata.location, metadata.priority.urgency, metadata.priority.incremental + if q == nil { + return + } + if q.next == q { + // This was the only open stream. + ws.heads[u][i] = nil + } else { + q.prev.next = q.next + q.next.prev = q.prev + if ws.heads[u][i] == q { + ws.heads[u][i] = q.next + } + } + delete(ws.streams, streamID) + ws.queuePool.put(q) +} + +func (ws *priorityWriteSchedulerRFC9218) AdjustStream(streamID uint32, priority PriorityParam) { + metadata := ws.streams[streamID] + q, u, i := metadata.location, metadata.priority.urgency, metadata.priority.incremental + if q == nil { + ws.priorityUpdateBuf.streamID = streamID + ws.priorityUpdateBuf.priority = priority + return + } + + // Remove stream from current location. + if q.next == q { + // This was the only open stream. + ws.heads[u][i] = nil + } else { + q.prev.next = q.next + q.next.prev = q.prev + if ws.heads[u][i] == q { + ws.heads[u][i] = q.next + } + } + + // Insert stream to the new queue. + u, i = priority.urgency, priority.incremental + if ws.heads[u][i] == nil { + ws.heads[u][i] = q + q.next = q + q.prev = q + } else { + // Queues are stored in a ring. + // Insert the new stream before ws.head, putting it at the end of the list. + q.prev = ws.heads[u][i].prev + q.next = ws.heads[u][i] + q.prev.next = q + q.next.prev = q + } + + // Update the metadata. + ws.streams[streamID] = streamMetadata{ + location: q, + priority: priority, + } +} + +func (ws *priorityWriteSchedulerRFC9218) Push(wr FrameWriteRequest) { + if wr.isControl() { + ws.control.push(wr) + return + } + q := ws.streams[wr.StreamID()].location + if q == nil { + // This is a closed stream. + // wr should not be a HEADERS or DATA frame. + // We push the request onto the control queue. + if wr.DataSize() > 0 { + panic("add DATA on non-open stream") + } + ws.control.push(wr) + return + } + q.push(wr) +} + +func (ws *priorityWriteSchedulerRFC9218) Pop() (FrameWriteRequest, bool) { + // Control and RST_STREAM frames first. + if !ws.control.empty() { + return ws.control.shift(), true + } + + // On the next Pop(), we want to prioritize incremental if we prioritized + // non-incremental request of the same urgency this time. Vice-versa. + // i.e. when there are incremental and non-incremental requests at the same + // priority, we give 50% of our bandwidth to the incremental ones in + // aggregate and 50% to the first non-incremental one (since + // non-incremental streams do not use round-robin writes). + ws.prioritizeIncremental = !ws.prioritizeIncremental + + // Always prioritize lowest u (i.e. highest urgency level). + for u := range ws.heads { + for i := range ws.heads[u] { + // When we want to prioritize incremental, we try to pop i=true + // first before i=false when u is the same. + if ws.prioritizeIncremental { + i = (i + 1) % 2 + } + q := ws.heads[u][i] + if q == nil { + continue + } + for { + if wr, ok := q.consume(math.MaxInt32); ok { + if i == 1 { + // For incremental streams, we update head to q.next so + // we can round-robin between multiple streams that can + // immediately benefit from partial writes. + ws.heads[u][i] = q.next + } else { + // For non-incremental streams, we try to finish one to + // completion rather than doing round-robin. However, + // we update head here so that if q.consume() is !ok + // (e.g. the stream has no more frame to consume), head + // is updated to the next q that has frames to consume + // on future iterations. This way, we do not prioritize + // writing to unavailable stream on next Pop() calls, + // preventing head-of-line blocking. + ws.heads[u][i] = q + } + return wr, true + } + q = q.next + if q == ws.heads[u][i] { + break + } + } + + } + } + return FrameWriteRequest{}, false +} diff --git a/vendor/golang.org/x/net/http2/writesched_roundrobin.go b/vendor/golang.org/x/net/http2/writesched_roundrobin.go index 54fe86322d..737cff9ecb 100644 --- a/vendor/golang.org/x/net/http2/writesched_roundrobin.go +++ b/vendor/golang.org/x/net/http2/writesched_roundrobin.go @@ -25,7 +25,7 @@ type roundRobinWriteScheduler struct { } // newRoundRobinWriteScheduler constructs a new write scheduler. -// The round robin scheduler priorizes control frames +// The round robin scheduler prioritizes control frames // like SETTINGS and PING over DATA frames. // When there are no control frames to send, it performs a round-robin // selection from the ready streams. diff --git a/vendor/golang.org/x/net/internal/httpcommon/ascii.go b/vendor/golang.org/x/net/internal/httpcommon/ascii.go new file mode 100644 index 0000000000..ed14da5afc --- /dev/null +++ b/vendor/golang.org/x/net/internal/httpcommon/ascii.go @@ -0,0 +1,53 @@ +// Copyright 2025 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package httpcommon + +import "strings" + +// The HTTP protocols are defined in terms of ASCII, not Unicode. This file +// contains helper functions which may use Unicode-aware functions which would +// otherwise be unsafe and could introduce vulnerabilities if used improperly. + +// asciiEqualFold is strings.EqualFold, ASCII only. It reports whether s and t +// are equal, ASCII-case-insensitively. +func asciiEqualFold(s, t string) bool { + if len(s) != len(t) { + return false + } + for i := 0; i < len(s); i++ { + if lower(s[i]) != lower(t[i]) { + return false + } + } + return true +} + +// lower returns the ASCII lowercase version of b. +func lower(b byte) byte { + if 'A' <= b && b <= 'Z' { + return b + ('a' - 'A') + } + return b +} + +// isASCIIPrint returns whether s is ASCII and printable according to +// https://tools.ietf.org/html/rfc20#section-4.2. +func isASCIIPrint(s string) bool { + for i := 0; i < len(s); i++ { + if s[i] < ' ' || s[i] > '~' { + return false + } + } + return true +} + +// asciiToLower returns the lowercase version of s if s is ASCII and printable, +// and whether or not it was. +func asciiToLower(s string) (lower string, ok bool) { + if !isASCIIPrint(s) { + return "", false + } + return strings.ToLower(s), true +} diff --git a/vendor/golang.org/x/net/http2/headermap.go b/vendor/golang.org/x/net/internal/httpcommon/headermap.go similarity index 74% rename from vendor/golang.org/x/net/http2/headermap.go rename to vendor/golang.org/x/net/internal/httpcommon/headermap.go index 149b3dd20e..92483d8e41 100644 --- a/vendor/golang.org/x/net/http2/headermap.go +++ b/vendor/golang.org/x/net/internal/httpcommon/headermap.go @@ -1,11 +1,11 @@ -// Copyright 2014 The Go Authors. All rights reserved. +// Copyright 2025 The Go Authors. All rights reserved. // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -package http2 +package httpcommon import ( - "net/http" + "net/textproto" "sync" ) @@ -82,13 +82,15 @@ func buildCommonHeaderMaps() { commonLowerHeader = make(map[string]string, len(common)) commonCanonHeader = make(map[string]string, len(common)) for _, v := range common { - chk := http.CanonicalHeaderKey(v) + chk := textproto.CanonicalMIMEHeaderKey(v) commonLowerHeader[chk] = v commonCanonHeader[v] = chk } } -func lowerHeader(v string) (lower string, ascii bool) { +// LowerHeader returns the lowercase form of a header name, +// used on the wire for HTTP/2 and HTTP/3 requests. +func LowerHeader(v string) (lower string, ascii bool) { buildCommonHeaderMapsOnce() if s, ok := commonLowerHeader[v]; ok { return s, true @@ -96,10 +98,18 @@ func lowerHeader(v string) (lower string, ascii bool) { return asciiToLower(v) } -func canonicalHeader(v string) string { +// CanonicalHeader canonicalizes a header name. (For example, "host" becomes "Host".) +func CanonicalHeader(v string) string { buildCommonHeaderMapsOnce() if s, ok := commonCanonHeader[v]; ok { return s } - return http.CanonicalHeaderKey(v) + return textproto.CanonicalMIMEHeaderKey(v) +} + +// CachedCanonicalHeader returns the canonical form of a well-known header name. +func CachedCanonicalHeader(v string) (string, bool) { + buildCommonHeaderMapsOnce() + s, ok := commonCanonHeader[v] + return s, ok } diff --git a/vendor/golang.org/x/net/internal/httpcommon/request.go b/vendor/golang.org/x/net/internal/httpcommon/request.go new file mode 100644 index 0000000000..1e10f89ebf --- /dev/null +++ b/vendor/golang.org/x/net/internal/httpcommon/request.go @@ -0,0 +1,467 @@ +// Copyright 2025 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package httpcommon + +import ( + "context" + "errors" + "fmt" + "net/http/httptrace" + "net/textproto" + "net/url" + "sort" + "strconv" + "strings" + + "golang.org/x/net/http/httpguts" + "golang.org/x/net/http2/hpack" +) + +var ( + ErrRequestHeaderListSize = errors.New("request header list larger than peer's advertised limit") +) + +// Request is a subset of http.Request. +// It'd be simpler to pass an *http.Request, of course, but we can't depend on net/http +// without creating a dependency cycle. +type Request struct { + URL *url.URL + Method string + Host string + Header map[string][]string + Trailer map[string][]string + ActualContentLength int64 // 0 means 0, -1 means unknown +} + +// EncodeHeadersParam is parameters to EncodeHeaders. +type EncodeHeadersParam struct { + Request Request + + // AddGzipHeader indicates that an "accept-encoding: gzip" header should be + // added to the request. + AddGzipHeader bool + + // PeerMaxHeaderListSize, when non-zero, is the peer's MAX_HEADER_LIST_SIZE setting. + PeerMaxHeaderListSize uint64 + + // DefaultUserAgent is the User-Agent header to send when the request + // neither contains a User-Agent nor disables it. + DefaultUserAgent string +} + +// EncodeHeadersResult is the result of EncodeHeaders. +type EncodeHeadersResult struct { + HasBody bool + HasTrailers bool +} + +// EncodeHeaders constructs request headers common to HTTP/2 and HTTP/3. +// It validates a request and calls headerf with each pseudo-header and header +// for the request. +// The headerf function is called with the validated, canonicalized header name. +func EncodeHeaders(ctx context.Context, param EncodeHeadersParam, headerf func(name, value string)) (res EncodeHeadersResult, _ error) { + req := param.Request + + // Check for invalid connection-level headers. + if err := checkConnHeaders(req.Header); err != nil { + return res, err + } + + if req.URL == nil { + return res, errors.New("Request.URL is nil") + } + + host := req.Host + if host == "" { + host = req.URL.Host + } + host, err := httpguts.PunycodeHostPort(host) + if err != nil { + return res, err + } + if !httpguts.ValidHostHeader(host) { + return res, errors.New("invalid Host header") + } + + // isNormalConnect is true if this is a non-extended CONNECT request. + isNormalConnect := false + var protocol string + if vv := req.Header[":protocol"]; len(vv) > 0 { + protocol = vv[0] + } + if req.Method == "CONNECT" && protocol == "" { + isNormalConnect = true + } else if protocol != "" && req.Method != "CONNECT" { + return res, errors.New("invalid :protocol header in non-CONNECT request") + } + + // Validate the path, except for non-extended CONNECT requests which have no path. + var path string + if !isNormalConnect { + path = req.URL.RequestURI() + if !validPseudoPath(path) { + orig := path + path = strings.TrimPrefix(path, req.URL.Scheme+"://"+host) + if !validPseudoPath(path) { + if req.URL.Opaque != "" { + return res, fmt.Errorf("invalid request :path %q from URL.Opaque = %q", orig, req.URL.Opaque) + } else { + return res, fmt.Errorf("invalid request :path %q", orig) + } + } + } + } + + // Check for any invalid headers+trailers and return an error before we + // potentially pollute our hpack state. (We want to be able to + // continue to reuse the hpack encoder for future requests) + if err := validateHeaders(req.Header); err != "" { + return res, fmt.Errorf("invalid HTTP header %s", err) + } + if err := validateHeaders(req.Trailer); err != "" { + return res, fmt.Errorf("invalid HTTP trailer %s", err) + } + + trailers, err := commaSeparatedTrailers(req.Trailer) + if err != nil { + return res, err + } + + enumerateHeaders := func(f func(name, value string)) { + // 8.1.2.3 Request Pseudo-Header Fields + // The :path pseudo-header field includes the path and query parts of the + // target URI (the path-absolute production and optionally a '?' character + // followed by the query production, see Sections 3.3 and 3.4 of + // [RFC3986]). + f(":authority", host) + m := req.Method + if m == "" { + m = "GET" + } + f(":method", m) + if !isNormalConnect { + f(":path", path) + f(":scheme", req.URL.Scheme) + } + if protocol != "" { + f(":protocol", protocol) + } + if trailers != "" { + f("trailer", trailers) + } + + var didUA bool + for k, vv := range req.Header { + if asciiEqualFold(k, "host") || asciiEqualFold(k, "content-length") { + // Host is :authority, already sent. + // Content-Length is automatic, set below. + continue + } else if asciiEqualFold(k, "connection") || + asciiEqualFold(k, "proxy-connection") || + asciiEqualFold(k, "transfer-encoding") || + asciiEqualFold(k, "upgrade") || + asciiEqualFold(k, "keep-alive") { + // Per 8.1.2.2 Connection-Specific Header + // Fields, don't send connection-specific + // fields. We have already checked if any + // are error-worthy so just ignore the rest. + continue + } else if asciiEqualFold(k, "user-agent") { + // Match Go's http1 behavior: at most one + // User-Agent. If set to nil or empty string, + // then omit it. Otherwise if not mentioned, + // include the default (below). + didUA = true + if len(vv) < 1 { + continue + } + vv = vv[:1] + if vv[0] == "" { + continue + } + } else if asciiEqualFold(k, "cookie") { + // Per 8.1.2.5 To allow for better compression efficiency, the + // Cookie header field MAY be split into separate header fields, + // each with one or more cookie-pairs. + for _, v := range vv { + for { + p := strings.IndexByte(v, ';') + if p < 0 { + break + } + f("cookie", v[:p]) + p++ + // strip space after semicolon if any. + for p+1 <= len(v) && v[p] == ' ' { + p++ + } + v = v[p:] + } + if len(v) > 0 { + f("cookie", v) + } + } + continue + } else if k == ":protocol" { + // :protocol pseudo-header was already sent above. + continue + } + + for _, v := range vv { + f(k, v) + } + } + if shouldSendReqContentLength(req.Method, req.ActualContentLength) { + f("content-length", strconv.FormatInt(req.ActualContentLength, 10)) + } + if param.AddGzipHeader { + f("accept-encoding", "gzip") + } + if !didUA { + f("user-agent", param.DefaultUserAgent) + } + } + + // Do a first pass over the headers counting bytes to ensure + // we don't exceed cc.peerMaxHeaderListSize. This is done as a + // separate pass before encoding the headers to prevent + // modifying the hpack state. + if param.PeerMaxHeaderListSize > 0 { + hlSize := uint64(0) + enumerateHeaders(func(name, value string) { + hf := hpack.HeaderField{Name: name, Value: value} + hlSize += uint64(hf.Size()) + }) + + if hlSize > param.PeerMaxHeaderListSize { + return res, ErrRequestHeaderListSize + } + } + + trace := httptrace.ContextClientTrace(ctx) + + // Header list size is ok. Write the headers. + enumerateHeaders(func(name, value string) { + name, ascii := LowerHeader(name) + if !ascii { + // Skip writing invalid headers. Per RFC 7540, Section 8.1.2, header + // field names have to be ASCII characters (just as in HTTP/1.x). + return + } + + headerf(name, value) + + if trace != nil && trace.WroteHeaderField != nil { + trace.WroteHeaderField(name, []string{value}) + } + }) + + res.HasBody = req.ActualContentLength != 0 + res.HasTrailers = trailers != "" + return res, nil +} + +// IsRequestGzip reports whether we should add an Accept-Encoding: gzip header +// for a request. +func IsRequestGzip(method string, header map[string][]string, disableCompression bool) bool { + // TODO(bradfitz): this is a copy of the logic in net/http. Unify somewhere? + if !disableCompression && + len(header["Accept-Encoding"]) == 0 && + len(header["Range"]) == 0 && + method != "HEAD" { + // Request gzip only, not deflate. Deflate is ambiguous and + // not as universally supported anyway. + // See: https://zlib.net/zlib_faq.html#faq39 + // + // Note that we don't request this for HEAD requests, + // due to a bug in nginx: + // http://trac.nginx.org/nginx/ticket/358 + // https://golang.org/issue/5522 + // + // We don't request gzip if the request is for a range, since + // auto-decoding a portion of a gzipped document will just fail + // anyway. See https://golang.org/issue/8923 + return true + } + return false +} + +// checkConnHeaders checks whether req has any invalid connection-level headers. +// +// https://www.rfc-editor.org/rfc/rfc9114.html#section-4.2-3 +// https://www.rfc-editor.org/rfc/rfc9113.html#section-8.2.2-1 +// +// Certain headers are special-cased as okay but not transmitted later. +// For example, we allow "Transfer-Encoding: chunked", but drop the header when encoding. +func checkConnHeaders(h map[string][]string) error { + if vv := h["Upgrade"]; len(vv) > 0 && (vv[0] != "" && vv[0] != "chunked") { + return fmt.Errorf("invalid Upgrade request header: %q", vv) + } + if vv := h["Transfer-Encoding"]; len(vv) > 0 && (len(vv) > 1 || vv[0] != "" && vv[0] != "chunked") { + return fmt.Errorf("invalid Transfer-Encoding request header: %q", vv) + } + if vv := h["Connection"]; len(vv) > 0 && (len(vv) > 1 || vv[0] != "" && !asciiEqualFold(vv[0], "close") && !asciiEqualFold(vv[0], "keep-alive")) { + return fmt.Errorf("invalid Connection request header: %q", vv) + } + return nil +} + +func commaSeparatedTrailers(trailer map[string][]string) (string, error) { + keys := make([]string, 0, len(trailer)) + for k := range trailer { + k = CanonicalHeader(k) + switch k { + case "Transfer-Encoding", "Trailer", "Content-Length": + return "", fmt.Errorf("invalid Trailer key %q", k) + } + keys = append(keys, k) + } + if len(keys) > 0 { + sort.Strings(keys) + return strings.Join(keys, ","), nil + } + return "", nil +} + +// validPseudoPath reports whether v is a valid :path pseudo-header +// value. It must be either: +// +// - a non-empty string starting with '/' +// - the string '*', for OPTIONS requests. +// +// For now this is only used a quick check for deciding when to clean +// up Opaque URLs before sending requests from the Transport. +// See golang.org/issue/16847 +// +// We used to enforce that the path also didn't start with "//", but +// Google's GFE accepts such paths and Chrome sends them, so ignore +// that part of the spec. See golang.org/issue/19103. +func validPseudoPath(v string) bool { + return (len(v) > 0 && v[0] == '/') || v == "*" +} + +func validateHeaders(hdrs map[string][]string) string { + for k, vv := range hdrs { + if !httpguts.ValidHeaderFieldName(k) && k != ":protocol" { + return fmt.Sprintf("name %q", k) + } + for _, v := range vv { + if !httpguts.ValidHeaderFieldValue(v) { + // Don't include the value in the error, + // because it may be sensitive. + return fmt.Sprintf("value for header %q", k) + } + } + } + return "" +} + +// shouldSendReqContentLength reports whether we should send +// a "content-length" request header. This logic is basically a copy of the net/http +// transferWriter.shouldSendContentLength. +// The contentLength is the corrected contentLength (so 0 means actually 0, not unknown). +// -1 means unknown. +func shouldSendReqContentLength(method string, contentLength int64) bool { + if contentLength > 0 { + return true + } + if contentLength < 0 { + return false + } + // For zero bodies, whether we send a content-length depends on the method. + // It also kinda doesn't matter for http2 either way, with END_STREAM. + switch method { + case "POST", "PUT", "PATCH": + return true + default: + return false + } +} + +// ServerRequestParam is parameters to NewServerRequest. +type ServerRequestParam struct { + Method string + Scheme, Authority, Path string + Protocol string + Header map[string][]string +} + +// ServerRequestResult is the result of NewServerRequest. +type ServerRequestResult struct { + // Various http.Request fields. + URL *url.URL + RequestURI string + Trailer map[string][]string + + NeedsContinue bool // client provided an "Expect: 100-continue" header + + // If the request should be rejected, this is a short string suitable for passing + // to the http2 package's CountError function. + // It might be a bit odd to return errors this way rather than returning an error, + // but this ensures we don't forget to include a CountError reason. + InvalidReason string +} + +func NewServerRequest(rp ServerRequestParam) ServerRequestResult { + needsContinue := httpguts.HeaderValuesContainsToken(rp.Header["Expect"], "100-continue") + if needsContinue { + delete(rp.Header, "Expect") + } + // Merge Cookie headers into one "; "-delimited value. + if cookies := rp.Header["Cookie"]; len(cookies) > 1 { + rp.Header["Cookie"] = []string{strings.Join(cookies, "; ")} + } + + // Setup Trailers + var trailer map[string][]string + for _, v := range rp.Header["Trailer"] { + for _, key := range strings.Split(v, ",") { + key = textproto.CanonicalMIMEHeaderKey(textproto.TrimString(key)) + switch key { + case "Transfer-Encoding", "Trailer", "Content-Length": + // Bogus. (copy of http1 rules) + // Ignore. + default: + if trailer == nil { + trailer = make(map[string][]string) + } + trailer[key] = nil + } + } + } + delete(rp.Header, "Trailer") + + // "':authority' MUST NOT include the deprecated userinfo subcomponent + // for "http" or "https" schemed URIs." + // https://www.rfc-editor.org/rfc/rfc9113.html#section-8.3.1-2.3.8 + if strings.IndexByte(rp.Authority, '@') != -1 && (rp.Scheme == "http" || rp.Scheme == "https") { + return ServerRequestResult{ + InvalidReason: "userinfo_in_authority", + } + } + + var url_ *url.URL + var requestURI string + if rp.Method == "CONNECT" && rp.Protocol == "" { + url_ = &url.URL{Host: rp.Authority} + requestURI = rp.Authority // mimic HTTP/1 server behavior + } else { + var err error + url_, err = url.ParseRequestURI(rp.Path) + if err != nil { + return ServerRequestResult{ + InvalidReason: "bad_path", + } + } + requestURI = rp.Path + } + + return ServerRequestResult{ + URL: url_, + NeedsContinue: needsContinue, + RequestURI: requestURI, + Trailer: trailer, + } +} diff --git a/vendor/golang.org/x/net/internal/httpsfv/httpsfv.go b/vendor/golang.org/x/net/internal/httpsfv/httpsfv.go new file mode 100644 index 0000000000..4ae2ca5b8e --- /dev/null +++ b/vendor/golang.org/x/net/internal/httpsfv/httpsfv.go @@ -0,0 +1,665 @@ +// Copyright 2025 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package httpsfv provides functionality for dealing with HTTP Structured +// Field Values. +package httpsfv + +import ( + "slices" + "strconv" + "strings" + "time" + "unicode/utf8" +) + +func isLCAlpha(b byte) bool { + return (b >= 'a' && b <= 'z') +} + +func isAlpha(b byte) bool { + return isLCAlpha(b) || (b >= 'A' && b <= 'Z') +} + +func isDigit(b byte) bool { + return b >= '0' && b <= '9' +} + +func isVChar(b byte) bool { + return b >= 0x21 && b <= 0x7e +} + +func isSP(b byte) bool { + return b == 0x20 +} + +func isTChar(b byte) bool { + if isAlpha(b) || isDigit(b) { + return true + } + return slices.Contains([]byte{'!', '#', '$', '%', '&', '\'', '*', '+', '-', '.', '^', '_', '`', '|', '~'}, b) +} + +func countLeftWhitespace(s string) int { + i := 0 + for _, ch := range []byte(s) { + if ch != ' ' && ch != '\t' { + break + } + i++ + } + return i +} + +// https://www.rfc-editor.org/rfc/rfc4648#section-8. +func decOctetHex(ch1, ch2 byte) (ch byte, ok bool) { + decBase16 := func(in byte) (out byte, ok bool) { + if !isDigit(in) && !(in >= 'a' && in <= 'f') { + return 0, false + } + if isDigit(in) { + return in - '0', true + } + return in - 'a' + 10, true + } + + if ch1, ok = decBase16(ch1); !ok { + return 0, ok + } + if ch2, ok = decBase16(ch2); !ok { + return 0, ok + } + return ch1<<4 | ch2, true +} + +// ParseList parses a list from a given HTTP Structured Field Values. +// +// Given an HTTP SFV string that represents a list, it will call the given +// function using each of the members and parameters contained in the list. +// This allows the caller to extract information out of the list. +// +// This function will return once it encounters the end of the string, or +// something that is not a list. If it cannot consume the entire given +// string, the ok value returned will be false. +// +// https://www.rfc-editor.org/rfc/rfc9651.html#name-parsing-a-list. +func ParseList(s string, f func(member, param string)) (ok bool) { + for len(s) != 0 { + var member, param string + if len(s) != 0 && s[0] == '(' { + if member, s, ok = consumeBareInnerList(s, nil); !ok { + return ok + } + } else { + if member, s, ok = consumeBareItem(s); !ok { + return ok + } + } + if param, s, ok = consumeParameter(s, nil); !ok { + return ok + } + if f != nil { + f(member, param) + } + + s = s[countLeftWhitespace(s):] + if len(s) == 0 { + break + } + if s[0] != ',' { + return false + } + s = s[1:] + s = s[countLeftWhitespace(s):] + if len(s) == 0 { + return false + } + } + return true +} + +// consumeBareInnerList consumes an inner list +// (https://www.rfc-editor.org/rfc/rfc9651.html#name-parsing-an-inner-list), +// except for the inner list's top-most parameter. +// For example, given `(a;b c;d);e`, it will consume only `(a;b c;d)`. +func consumeBareInnerList(s string, f func(bareItem, param string)) (consumed, rest string, ok bool) { + if len(s) == 0 || s[0] != '(' { + return "", s, false + } + rest = s[1:] + for len(rest) != 0 { + var bareItem, param string + rest = rest[countLeftWhitespace(rest):] + if len(rest) != 0 && rest[0] == ')' { + rest = rest[1:] + break + } + if bareItem, rest, ok = consumeBareItem(rest); !ok { + return "", s, ok + } + if param, rest, ok = consumeParameter(rest, nil); !ok { + return "", s, ok + } + if len(rest) == 0 || (rest[0] != ')' && !isSP(rest[0])) { + return "", s, false + } + if f != nil { + f(bareItem, param) + } + } + return s[:len(s)-len(rest)], rest, true +} + +// ParseBareInnerList parses a bare inner list from a given HTTP Structured +// Field Values. +// +// We define a bare inner list as an inner list +// (https://www.rfc-editor.org/rfc/rfc9651.html#name-parsing-an-inner-list), +// without the top-most parameter of the inner list. For example, given the +// inner list `(a;b c;d);e`, the bare inner list would be `(a;b c;d)`. +// +// Given an HTTP SFV string that represents a bare inner list, it will call the +// given function using each of the bare item and parameter within the bare +// inner list. This allows the caller to extract information out of the bare +// inner list. +// +// This function will return once it encounters the end of the bare inner list, +// or something that is not a bare inner list. If it cannot consume the entire +// given string, the ok value returned will be false. +func ParseBareInnerList(s string, f func(bareItem, param string)) (ok bool) { + _, rest, ok := consumeBareInnerList(s, f) + return rest == "" && ok +} + +// https://www.rfc-editor.org/rfc/rfc9651.html#name-parsing-an-item. +func consumeItem(s string, f func(bareItem, param string)) (consumed, rest string, ok bool) { + var bareItem, param string + if bareItem, rest, ok = consumeBareItem(s); !ok { + return "", s, ok + } + if param, rest, ok = consumeParameter(rest, nil); !ok { + return "", s, ok + } + if f != nil { + f(bareItem, param) + } + return s[:len(s)-len(rest)], rest, true +} + +// ParseItem parses an item from a given HTTP Structured Field Values. +// +// Given an HTTP SFV string that represents an item, it will call the given +// function once, with the bare item and the parameter of the item. This allows +// the caller to extract information out of the item. +// +// This function will return once it encounters the end of the string, or +// something that is not an item. If it cannot consume the entire given +// string, the ok value returned will be false. +// +// https://www.rfc-editor.org/rfc/rfc9651.html#name-parsing-an-item. +func ParseItem(s string, f func(bareItem, param string)) (ok bool) { + _, rest, ok := consumeItem(s, f) + return rest == "" && ok +} + +// ParseDictionary parses a dictionary from a given HTTP Structured Field +// Values. +// +// Given an HTTP SFV string that represents a dictionary, it will call the +// given function using each of the keys, values, and parameters contained in +// the dictionary. This allows the caller to extract information out of the +// dictionary. +// +// This function will return once it encounters the end of the string, or +// something that is not a dictionary. If it cannot consume the entire given +// string, the ok value returned will be false. +// +// https://www.rfc-editor.org/rfc/rfc9651.html#name-parsing-a-dictionary. +func ParseDictionary(s string, f func(key, val, param string)) (ok bool) { + for len(s) != 0 { + var key, val, param string + val = "?1" // Default value for empty val is boolean true. + if key, s, ok = consumeKey(s); !ok { + return ok + } + if len(s) != 0 && s[0] == '=' { + s = s[1:] + if len(s) != 0 && s[0] == '(' { + if val, s, ok = consumeBareInnerList(s, nil); !ok { + return ok + } + } else { + if val, s, ok = consumeBareItem(s); !ok { + return ok + } + } + } + if param, s, ok = consumeParameter(s, nil); !ok { + return ok + } + if f != nil { + f(key, val, param) + } + s = s[countLeftWhitespace(s):] + if len(s) == 0 { + break + } + if s[0] == ',' { + s = s[1:] + } + s = s[countLeftWhitespace(s):] + if len(s) == 0 { + return false + } + } + return true +} + +// https://www.rfc-editor.org/rfc/rfc9651.html#parse-param. +func consumeParameter(s string, f func(key, val string)) (consumed, rest string, ok bool) { + rest = s + for len(rest) != 0 { + var key, val string + val = "?1" // Default value for empty val is boolean true. + if rest[0] != ';' { + break + } + rest = rest[1:] + rest = rest[countLeftWhitespace(rest):] + key, rest, ok = consumeKey(rest) + if !ok { + return "", s, ok + } + if len(rest) != 0 && rest[0] == '=' { + rest = rest[1:] + val, rest, ok = consumeBareItem(rest) + if !ok { + return "", s, ok + } + } + if f != nil { + f(key, val) + } + } + return s[:len(s)-len(rest)], rest, true +} + +// ParseParameter parses a parameter from a given HTTP Structured Field Values. +// +// Given an HTTP SFV string that represents a parameter, it will call the given +// function using each of the keys and values contained in the parameter. This +// allows the caller to extract information out of the parameter. +// +// This function will return once it encounters the end of the string, or +// something that is not a parameter. If it cannot consume the entire given +// string, the ok value returned will be false. +// +// https://www.rfc-editor.org/rfc/rfc9651.html#parse-param. +func ParseParameter(s string, f func(key, val string)) (ok bool) { + _, rest, ok := consumeParameter(s, f) + return rest == "" && ok +} + +// https://www.rfc-editor.org/rfc/rfc9651.html#name-parsing-a-key. +func consumeKey(s string) (consumed, rest string, ok bool) { + if len(s) == 0 || (!isLCAlpha(s[0]) && s[0] != '*') { + return "", s, false + } + i := 0 + for _, ch := range []byte(s) { + if !isLCAlpha(ch) && !isDigit(ch) && !slices.Contains([]byte("_-.*"), ch) { + break + } + i++ + } + return s[:i], s[i:], true +} + +// https://www.rfc-editor.org/rfc/rfc9651.html#name-parsing-an-integer-or-decim. +func consumeIntegerOrDecimal(s string) (consumed, rest string, ok bool) { + var i, signOffset, periodIndex int + var isDecimal bool + if i < len(s) && s[i] == '-' { + i++ + signOffset++ + } + if i >= len(s) { + return "", s, false + } + if !isDigit(s[i]) { + return "", s, false + } + for i < len(s) { + ch := s[i] + if isDigit(ch) { + i++ + continue + } + if !isDecimal && ch == '.' { + if i-signOffset > 12 { + return "", s, false + } + periodIndex = i + isDecimal = true + i++ + continue + } + break + } + if !isDecimal && i-signOffset > 15 { + return "", s, false + } + if isDecimal { + if i-signOffset > 16 { + return "", s, false + } + if s[i-1] == '.' { + return "", s, false + } + if i-periodIndex-1 > 3 { + return "", s, false + } + } + return s[:i], s[i:], true +} + +// ParseInteger parses an integer from a given HTTP Structured Field Values. +// +// The entire HTTP SFV string must consist of a valid integer. It returns the +// parsed integer and an ok boolean value, indicating success or not. +// +// https://www.rfc-editor.org/rfc/rfc9651.html#name-parsing-an-integer-or-decim. +func ParseInteger(s string) (parsed int64, ok bool) { + if _, rest, ok := consumeIntegerOrDecimal(s); !ok || rest != "" { + return 0, false + } + if n, err := strconv.ParseInt(s, 10, 64); err == nil { + return n, true + } + return 0, false +} + +// ParseDecimal parses a decimal from a given HTTP Structured Field Values. +// +// The entire HTTP SFV string must consist of a valid decimal. It returns the +// parsed decimal and an ok boolean value, indicating success or not. +// +// https://www.rfc-editor.org/rfc/rfc9651.html#name-parsing-an-integer-or-decim. +func ParseDecimal(s string) (parsed float64, ok bool) { + if _, rest, ok := consumeIntegerOrDecimal(s); !ok || rest != "" { + return 0, false + } + if !strings.Contains(s, ".") { + return 0, false + } + if n, err := strconv.ParseFloat(s, 64); err == nil { + return n, true + } + return 0, false +} + +// https://www.rfc-editor.org/rfc/rfc9651.html#name-parsing-a-string. +func consumeString(s string) (consumed, rest string, ok bool) { + if len(s) == 0 || s[0] != '"' { + return "", s, false + } + for i := 1; i < len(s); i++ { + switch ch := s[i]; ch { + case '\\': + if i+1 >= len(s) { + return "", s, false + } + i++ + if ch = s[i]; ch != '"' && ch != '\\' { + return "", s, false + } + case '"': + return s[:i+1], s[i+1:], true + default: + if !isVChar(ch) && !isSP(ch) { + return "", s, false + } + } + } + return "", s, false +} + +// ParseString parses a Go string from a given HTTP Structured Field Values. +// +// The entire HTTP SFV string must consist of a valid string. It returns the +// parsed string and an ok boolean value, indicating success or not. +// +// https://www.rfc-editor.org/rfc/rfc9651.html#name-parsing-a-string. +func ParseString(s string) (parsed string, ok bool) { + if _, rest, ok := consumeString(s); !ok || rest != "" { + return "", false + } + return s[1 : len(s)-1], true +} + +// https://www.rfc-editor.org/rfc/rfc9651.html#name-parsing-a-token +func consumeToken(s string) (consumed, rest string, ok bool) { + if len(s) == 0 || (!isAlpha(s[0]) && s[0] != '*') { + return "", s, false + } + i := 0 + for _, ch := range []byte(s) { + if !isTChar(ch) && !slices.Contains([]byte(":/"), ch) { + break + } + i++ + } + return s[:i], s[i:], true +} + +// ParseToken parses a token from a given HTTP Structured Field Values. +// +// The entire HTTP SFV string must consist of a valid token. It returns the +// parsed token and an ok boolean value, indicating success or not. +// +// https://www.rfc-editor.org/rfc/rfc9651.html#name-parsing-a-token +func ParseToken(s string) (parsed string, ok bool) { + if _, rest, ok := consumeToken(s); !ok || rest != "" { + return "", false + } + return s, true +} + +// https://www.rfc-editor.org/rfc/rfc9651.html#name-parsing-a-byte-sequence. +func consumeByteSequence(s string) (consumed, rest string, ok bool) { + if len(s) == 0 || s[0] != ':' { + return "", s, false + } + for i := 1; i < len(s); i++ { + if ch := s[i]; ch == ':' { + return s[:i+1], s[i+1:], true + } + if ch := s[i]; !isAlpha(ch) && !isDigit(ch) && !slices.Contains([]byte("+/="), ch) { + return "", s, false + } + } + return "", s, false +} + +// ParseByteSequence parses a byte sequence from a given HTTP Structured Field +// Values. +// +// The entire HTTP SFV string must consist of a valid byte sequence. It returns +// the parsed byte sequence and an ok boolean value, indicating success or not. +// +// https://www.rfc-editor.org/rfc/rfc9651.html#name-parsing-a-byte-sequence. +func ParseByteSequence(s string) (parsed []byte, ok bool) { + if _, rest, ok := consumeByteSequence(s); !ok || rest != "" { + return nil, false + } + return []byte(s[1 : len(s)-1]), true +} + +// https://www.rfc-editor.org/rfc/rfc9651.html#name-parsing-a-boolean. +func consumeBoolean(s string) (consumed, rest string, ok bool) { + if len(s) >= 2 && (s[:2] == "?0" || s[:2] == "?1") { + return s[:2], s[2:], true + } + return "", s, false +} + +// ParseBoolean parses a boolean from a given HTTP Structured Field Values. +// +// The entire HTTP SFV string must consist of a valid boolean. It returns the +// parsed boolean and an ok boolean value, indicating success or not. +// +// https://www.rfc-editor.org/rfc/rfc9651.html#name-parsing-a-boolean. +func ParseBoolean(s string) (parsed bool, ok bool) { + if _, rest, ok := consumeBoolean(s); !ok || rest != "" { + return false, false + } + return s == "?1", true +} + +// https://www.rfc-editor.org/rfc/rfc9651.html#name-parsing-a-date. +func consumeDate(s string) (consumed, rest string, ok bool) { + if len(s) == 0 || s[0] != '@' { + return "", s, false + } + if _, rest, ok = consumeIntegerOrDecimal(s[1:]); !ok { + return "", s, ok + } + consumed = s[:len(s)-len(rest)] + if slices.Contains([]byte(consumed), '.') { + return "", s, false + } + return consumed, rest, ok +} + +// ParseDate parses a date from a given HTTP Structured Field Values. +// +// The entire HTTP SFV string must consist of a valid date. It returns the +// parsed date and an ok boolean value, indicating success or not. +// +// https://www.rfc-editor.org/rfc/rfc9651.html#name-parsing-a-date. +func ParseDate(s string) (parsed time.Time, ok bool) { + if _, rest, ok := consumeDate(s); !ok || rest != "" { + return time.Time{}, false + } + if n, ok := ParseInteger(s[1:]); !ok { + return time.Time{}, false + } else { + return time.Unix(n, 0), true + } +} + +// https://www.rfc-editor.org/rfc/rfc9651.html#name-parsing-a-display-string. +func consumeDisplayString(s string) (consumed, rest string, ok bool) { + // To prevent excessive allocation, especially when input is large, we + // maintain a buffer of 4 bytes to keep track of the last rune we + // encounter. This way, we can validate that the display string conforms to + // UTF-8 without actually building the whole string. + var lastRune [4]byte + var runeLen int + isPartOfValidRune := func(ch byte) bool { + lastRune[runeLen] = ch + runeLen++ + if utf8.FullRune(lastRune[:runeLen]) { + r, s := utf8.DecodeRune(lastRune[:runeLen]) + if r == utf8.RuneError { + return false + } + copy(lastRune[:], lastRune[s:runeLen]) + runeLen -= s + return true + } + return runeLen <= 4 + } + + if len(s) <= 1 || s[:2] != `%"` { + return "", s, false + } + i := 2 + for i < len(s) { + ch := s[i] + if !isVChar(ch) && !isSP(ch) { + return "", s, false + } + switch ch { + case '"': + if runeLen > 0 { + return "", s, false + } + return s[:i+1], s[i+1:], true + case '%': + if i+2 >= len(s) { + return "", s, false + } + if ch, ok = decOctetHex(s[i+1], s[i+2]); !ok { + return "", s, ok + } + if ok = isPartOfValidRune(ch); !ok { + return "", s, ok + } + i += 3 + default: + if ok = isPartOfValidRune(ch); !ok { + return "", s, ok + } + i++ + } + } + return "", s, false +} + +// ParseDisplayString parses a display string from a given HTTP Structured +// Field Values. +// +// The entire HTTP SFV string must consist of a valid display string. It +// returns the parsed display string and an ok boolean value, indicating +// success or not. +// +// https://www.rfc-editor.org/rfc/rfc9651.html#name-parsing-a-display-string. +func ParseDisplayString(s string) (parsed string, ok bool) { + if _, rest, ok := consumeDisplayString(s); !ok || rest != "" { + return "", false + } + // consumeDisplayString() already validates that we have a valid display + // string. Therefore, we can just construct the display string, without + // validating it again. + s = s[2 : len(s)-1] + var b strings.Builder + for i := 0; i < len(s); { + if s[i] == '%' { + decoded, _ := decOctetHex(s[i+1], s[i+2]) + b.WriteByte(decoded) + i += 3 + continue + } + b.WriteByte(s[i]) + i++ + } + return b.String(), true +} + +// https://www.rfc-editor.org/rfc/rfc9651.html#parse-bare-item. +func consumeBareItem(s string) (consumed, rest string, ok bool) { + if len(s) == 0 { + return "", s, false + } + ch := s[0] + switch { + case ch == '-' || isDigit(ch): + return consumeIntegerOrDecimal(s) + case ch == '"': + return consumeString(s) + case ch == '*' || isAlpha(ch): + return consumeToken(s) + case ch == ':': + return consumeByteSequence(s) + case ch == '?': + return consumeBoolean(s) + case ch == '@': + return consumeDate(s) + case ch == '%': + return consumeDisplayString(s) + default: + return "", s, false + } +} diff --git a/vendor/golang.org/x/net/internal/socks/socks.go b/vendor/golang.org/x/net/internal/socks/socks.go index 84fcc32b63..8eedb84cec 100644 --- a/vendor/golang.org/x/net/internal/socks/socks.go +++ b/vendor/golang.org/x/net/internal/socks/socks.go @@ -297,7 +297,7 @@ func (up *UsernamePassword) Authenticate(ctx context.Context, rw io.ReadWriter, b = append(b, up.Username...) b = append(b, byte(len(up.Password))) b = append(b, up.Password...) - // TODO(mikio): handle IO deadlines and cancelation if + // TODO(mikio): handle IO deadlines and cancellation if // necessary if _, err := rw.Write(b); err != nil { return err diff --git a/vendor/golang.org/x/net/proxy/per_host.go b/vendor/golang.org/x/net/proxy/per_host.go index d7d4b8b6e3..32bdf435ec 100644 --- a/vendor/golang.org/x/net/proxy/per_host.go +++ b/vendor/golang.org/x/net/proxy/per_host.go @@ -7,6 +7,7 @@ package proxy import ( "context" "net" + "net/netip" "strings" ) @@ -57,7 +58,8 @@ func (p *PerHost) DialContext(ctx context.Context, network, addr string) (c net. } func (p *PerHost) dialerForRequest(host string) Dialer { - if ip := net.ParseIP(host); ip != nil { + if nip, err := netip.ParseAddr(host); err == nil { + ip := net.IP(nip.AsSlice()) for _, net := range p.bypassNetworks { if net.Contains(ip) { return p.bypass @@ -108,8 +110,8 @@ func (p *PerHost) AddFromString(s string) { } continue } - if ip := net.ParseIP(host); ip != nil { - p.AddIP(ip) + if nip, err := netip.ParseAddr(host); err == nil { + p.AddIP(net.IP(nip.AsSlice())) continue } if strings.HasPrefix(host, "*.") { diff --git a/vendor/golang.org/x/net/trace/events.go b/vendor/golang.org/x/net/trace/events.go index c646a6952e..c2b3c00980 100644 --- a/vendor/golang.org/x/net/trace/events.go +++ b/vendor/golang.org/x/net/trace/events.go @@ -58,8 +58,8 @@ func RenderEvents(w http.ResponseWriter, req *http.Request, sensitive bool) { Buckets: buckets, } - data.Families = make([]string, 0, len(families)) famMu.RLock() + data.Families = make([]string, 0, len(families)) for name := range families { data.Families = append(data.Families, name) } @@ -508,7 +508,7 @@ const eventsHTML = ` {{$el.When}} {{$el.ElapsedTime}} - {{$el.Title}} + {{$el.Title}} {{if $.Expanded}} diff --git a/vendor/golang.org/x/net/websocket/hybi.go b/vendor/golang.org/x/net/websocket/hybi.go index dda7434666..c7e76cd91b 100644 --- a/vendor/golang.org/x/net/websocket/hybi.go +++ b/vendor/golang.org/x/net/websocket/hybi.go @@ -440,6 +440,7 @@ func hybiClientHandshake(config *Config, br *bufio.Reader, bw *bufio.Writer) (er if err != nil { return err } + defer resp.Body.Close() if resp.StatusCode != 101 { return ErrBadStatus } diff --git a/vendor/golang.org/x/net/websocket/websocket.go b/vendor/golang.org/x/net/websocket/websocket.go index 923a5780ec..3448d20395 100644 --- a/vendor/golang.org/x/net/websocket/websocket.go +++ b/vendor/golang.org/x/net/websocket/websocket.go @@ -6,9 +6,10 @@ // as specified in RFC 6455. // // This package currently lacks some features found in an alternative -// and more actively maintained WebSocket package: +// and more actively maintained WebSocket packages: // -// https://pkg.go.dev/nhooyr.io/websocket +// - [github.com/gorilla/websocket] +// - [github.com/coder/websocket] package websocket // import "golang.org/x/net/websocket" import ( diff --git a/vendor/golang.org/x/sys/LICENSE b/vendor/golang.org/x/sys/LICENSE index 6a66aea5ea..2a7cf70da6 100644 --- a/vendor/golang.org/x/sys/LICENSE +++ b/vendor/golang.org/x/sys/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2009 The Go Authors. All rights reserved. +Copyright 2009 The Go Authors. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are @@ -10,7 +10,7 @@ notice, this list of conditions and the following disclaimer. copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - * Neither the name of Google Inc. nor the names of its + * Neither the name of Google LLC nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. diff --git a/vendor/golang.org/x/sys/cpu/asm_darwin_x86_gc.s b/vendor/golang.org/x/sys/cpu/asm_darwin_x86_gc.s new file mode 100644 index 0000000000..ec2acfe540 --- /dev/null +++ b/vendor/golang.org/x/sys/cpu/asm_darwin_x86_gc.s @@ -0,0 +1,17 @@ +// Copyright 2024 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build darwin && amd64 && gc + +#include "textflag.h" + +TEXT libc_sysctl_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_sysctl(SB) +GLOBL ·libc_sysctl_trampoline_addr(SB), RODATA, $8 +DATA ·libc_sysctl_trampoline_addr(SB)/8, $libc_sysctl_trampoline<>(SB) + +TEXT libc_sysctlbyname_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_sysctlbyname(SB) +GLOBL ·libc_sysctlbyname_trampoline_addr(SB), RODATA, $8 +DATA ·libc_sysctlbyname_trampoline_addr(SB)/8, $libc_sysctlbyname_trampoline<>(SB) diff --git a/vendor/golang.org/x/sys/cpu/cpu.go b/vendor/golang.org/x/sys/cpu/cpu.go index 8fa707aa4b..63541994ef 100644 --- a/vendor/golang.org/x/sys/cpu/cpu.go +++ b/vendor/golang.org/x/sys/cpu/cpu.go @@ -72,6 +72,9 @@ var X86 struct { HasSSSE3 bool // Supplemental streaming SIMD extension 3 HasSSE41 bool // Streaming SIMD extension 4 and 4.1 HasSSE42 bool // Streaming SIMD extension 4 and 4.2 + HasAVXIFMA bool // Advanced vector extension Integer Fused Multiply Add + HasAVXVNNI bool // Advanced vector extension Vector Neural Network Instructions + HasAVXVNNIInt8 bool // Advanced vector extension Vector Neural Network Int8 instructions _ CacheLinePad } @@ -105,6 +108,8 @@ var ARM64 struct { HasSVE bool // Scalable Vector Extensions HasSVE2 bool // Scalable Vector Extensions 2 HasASIMDFHM bool // Advanced SIMD multiplication FP16 to FP32 + HasDIT bool // Data Independent Timing support + HasI8MM bool // Advanced SIMD Int8 matrix multiplication instructions _ CacheLinePad } @@ -144,6 +149,18 @@ var ARM struct { _ CacheLinePad } +// The booleans in Loong64 contain the correspondingly named cpu feature bit. +// The struct is padded to avoid false sharing. +var Loong64 struct { + _ CacheLinePad + HasLSX bool // support 128-bit vector extension + HasLASX bool // support 256-bit vector extension + HasCRC32 bool // support CRC instruction + HasLAM_BH bool // support AM{SWAP/ADD}[_DB].{B/H} instruction + HasLAMCAS bool // support AMCAS[_DB].{B/H/W/D} instruction + _ CacheLinePad +} + // MIPS64X contains the supported CPU features of the current mips64/mips64le // platforms. If the current platform is not mips64/mips64le or the current // operating system is not Linux then all feature flags are false. @@ -199,6 +216,36 @@ var S390X struct { _ CacheLinePad } +// RISCV64 contains the supported CPU features and performance characteristics for riscv64 +// platforms. The booleans in RISCV64, with the exception of HasFastMisaligned, indicate +// the presence of RISC-V extensions. +// +// It is safe to assume that all the RV64G extensions are supported and so they are omitted from +// this structure. As riscv64 Go programs require at least RV64G, the code that populates +// this structure cannot run successfully if some of the RV64G extensions are missing. +// The struct is padded to avoid false sharing. +var RISCV64 struct { + _ CacheLinePad + HasFastMisaligned bool // Fast misaligned accesses + HasC bool // Compressed instruction-set extension + HasV bool // Vector extension compatible with RVV 1.0 + HasZba bool // Address generation instructions extension + HasZbb bool // Basic bit-manipulation extension + HasZbs bool // Single-bit instructions extension + HasZvbb bool // Vector Basic Bit-manipulation + HasZvbc bool // Vector Carryless Multiplication + HasZvkb bool // Vector Cryptography Bit-manipulation + HasZvkt bool // Vector Data-Independent Execution Latency + HasZvkg bool // Vector GCM/GMAC + HasZvkn bool // NIST Algorithm Suite (AES/SHA256/SHA512) + HasZvknc bool // NIST Algorithm Suite with carryless multiply + HasZvkng bool // NIST Algorithm Suite with GCM + HasZvks bool // ShangMi Algorithm Suite + HasZvksc bool // ShangMi Algorithm Suite with carryless multiplication + HasZvksg bool // ShangMi Algorithm Suite with GCM + _ CacheLinePad +} + func init() { archInit() initOptions() diff --git a/vendor/golang.org/x/sys/cpu/cpu_arm64.go b/vendor/golang.org/x/sys/cpu/cpu_arm64.go index 0e27a21e1f..6d8eb784b5 100644 --- a/vendor/golang.org/x/sys/cpu/cpu_arm64.go +++ b/vendor/golang.org/x/sys/cpu/cpu_arm64.go @@ -38,6 +38,8 @@ func initOptions() { {Name: "dcpop", Feature: &ARM64.HasDCPOP}, {Name: "asimddp", Feature: &ARM64.HasASIMDDP}, {Name: "asimdfhm", Feature: &ARM64.HasASIMDFHM}, + {Name: "dit", Feature: &ARM64.HasDIT}, + {Name: "i8mm", Feature: &ARM64.HasI8MM}, } } @@ -45,7 +47,7 @@ func archInit() { switch runtime.GOOS { case "freebsd": readARM64Registers() - case "linux", "netbsd", "openbsd": + case "linux", "netbsd", "openbsd", "windows": doinit() default: // Many platforms don't seem to allow reading these registers. @@ -145,6 +147,11 @@ func parseARM64SystemRegisters(isar0, isar1, pfr0 uint64) { ARM64.HasLRCPC = true } + switch extractBits(isar1, 52, 55) { + case 1: + ARM64.HasI8MM = true + } + // ID_AA64PFR0_EL1 switch extractBits(pfr0, 16, 19) { case 0: @@ -168,6 +175,11 @@ func parseARM64SystemRegisters(isar0, isar1, pfr0 uint64) { parseARM64SVERegister(getzfr0()) } + + switch extractBits(pfr0, 48, 51) { + case 1: + ARM64.HasDIT = true + } } func parseARM64SVERegister(zfr0 uint64) { diff --git a/vendor/golang.org/x/sys/cpu/cpu_arm64.s b/vendor/golang.org/x/sys/cpu/cpu_arm64.s index 22cc99844a..3b0450a06a 100644 --- a/vendor/golang.org/x/sys/cpu/cpu_arm64.s +++ b/vendor/golang.org/x/sys/cpu/cpu_arm64.s @@ -9,31 +9,27 @@ // func getisar0() uint64 TEXT ·getisar0(SB),NOSPLIT,$0-8 // get Instruction Set Attributes 0 into x0 - // mrs x0, ID_AA64ISAR0_EL1 = d5380600 - WORD $0xd5380600 + MRS ID_AA64ISAR0_EL1, R0 MOVD R0, ret+0(FP) RET // func getisar1() uint64 TEXT ·getisar1(SB),NOSPLIT,$0-8 // get Instruction Set Attributes 1 into x0 - // mrs x0, ID_AA64ISAR1_EL1 = d5380620 - WORD $0xd5380620 + MRS ID_AA64ISAR1_EL1, R0 MOVD R0, ret+0(FP) RET // func getpfr0() uint64 TEXT ·getpfr0(SB),NOSPLIT,$0-8 // get Processor Feature Register 0 into x0 - // mrs x0, ID_AA64PFR0_EL1 = d5380400 - WORD $0xd5380400 + MRS ID_AA64PFR0_EL1, R0 MOVD R0, ret+0(FP) RET // func getzfr0() uint64 TEXT ·getzfr0(SB),NOSPLIT,$0-8 // get SVE Feature Register 0 into x0 - // mrs x0, ID_AA64ZFR0_EL1 = d5380480 - WORD $0xd5380480 + MRS ID_AA64ZFR0_EL1, R0 MOVD R0, ret+0(FP) RET diff --git a/vendor/golang.org/x/sys/cpu/cpu_darwin_x86.go b/vendor/golang.org/x/sys/cpu/cpu_darwin_x86.go new file mode 100644 index 0000000000..b838cb9e95 --- /dev/null +++ b/vendor/golang.org/x/sys/cpu/cpu_darwin_x86.go @@ -0,0 +1,61 @@ +// Copyright 2024 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build darwin && amd64 && gc + +package cpu + +// darwinSupportsAVX512 checks Darwin kernel for AVX512 support via sysctl +// call (see issue 43089). It also restricts AVX512 support for Darwin to +// kernel version 21.3.0 (MacOS 12.2.0) or later (see issue 49233). +// +// Background: +// Darwin implements a special mechanism to economize on thread state when +// AVX512 specific registers are not in use. This scheme minimizes state when +// preempting threads that haven't yet used any AVX512 instructions, but adds +// special requirements to check for AVX512 hardware support at runtime (e.g. +// via sysctl call or commpage inspection). See issue 43089 and link below for +// full background: +// https://github.com/apple-oss-distributions/xnu/blob/xnu-11215.1.10/osfmk/i386/fpu.c#L214-L240 +// +// Additionally, all versions of the Darwin kernel from 19.6.0 through 21.2.0 +// (corresponding to MacOS 10.15.6 - 12.1) have a bug that can cause corruption +// of the AVX512 mask registers (K0-K7) upon signal return. For this reason +// AVX512 is considered unsafe to use on Darwin for kernel versions prior to +// 21.3.0, where a fix has been confirmed. See issue 49233 for full background. +func darwinSupportsAVX512() bool { + return darwinSysctlEnabled([]byte("hw.optional.avx512f\x00")) && darwinKernelVersionCheck(21, 3, 0) +} + +// Ensure Darwin kernel version is at least major.minor.patch, avoiding dependencies +func darwinKernelVersionCheck(major, minor, patch int) bool { + var release [256]byte + err := darwinOSRelease(&release) + if err != nil { + return false + } + + var mmp [3]int + c := 0 +Loop: + for _, b := range release[:] { + switch { + case b >= '0' && b <= '9': + mmp[c] = 10*mmp[c] + int(b-'0') + case b == '.': + c++ + if c > 2 { + return false + } + case b == 0: + break Loop + default: + return false + } + } + if c != 2 { + return false + } + return mmp[0] > major || mmp[0] == major && (mmp[1] > minor || mmp[1] == minor && mmp[2] >= patch) +} diff --git a/vendor/golang.org/x/sys/cpu/cpu_gc_x86.go b/vendor/golang.org/x/sys/cpu/cpu_gc_x86.go index 910728fb16..32a44514e2 100644 --- a/vendor/golang.org/x/sys/cpu/cpu_gc_x86.go +++ b/vendor/golang.org/x/sys/cpu/cpu_gc_x86.go @@ -6,10 +6,10 @@ package cpu -// cpuid is implemented in cpu_x86.s for gc compiler +// cpuid is implemented in cpu_gc_x86.s for gc compiler // and in cpu_gccgo.c for gccgo. func cpuid(eaxArg, ecxArg uint32) (eax, ebx, ecx, edx uint32) -// xgetbv with ecx = 0 is implemented in cpu_x86.s for gc compiler +// xgetbv with ecx = 0 is implemented in cpu_gc_x86.s for gc compiler // and in cpu_gccgo.c for gccgo. func xgetbv() (eax, edx uint32) diff --git a/vendor/golang.org/x/sys/cpu/cpu_x86.s b/vendor/golang.org/x/sys/cpu/cpu_gc_x86.s similarity index 94% rename from vendor/golang.org/x/sys/cpu/cpu_x86.s rename to vendor/golang.org/x/sys/cpu/cpu_gc_x86.s index 7d7ba33efb..ce208ce6d6 100644 --- a/vendor/golang.org/x/sys/cpu/cpu_x86.s +++ b/vendor/golang.org/x/sys/cpu/cpu_gc_x86.s @@ -18,7 +18,7 @@ TEXT ·cpuid(SB), NOSPLIT, $0-24 RET // func xgetbv() (eax, edx uint32) -TEXT ·xgetbv(SB),NOSPLIT,$0-8 +TEXT ·xgetbv(SB), NOSPLIT, $0-8 MOVL $0, CX XGETBV MOVL AX, eax+0(FP) diff --git a/vendor/golang.org/x/sys/cpu/cpu_gccgo_x86.go b/vendor/golang.org/x/sys/cpu/cpu_gccgo_x86.go index 99c60fe9f9..170d21ddfd 100644 --- a/vendor/golang.org/x/sys/cpu/cpu_gccgo_x86.go +++ b/vendor/golang.org/x/sys/cpu/cpu_gccgo_x86.go @@ -23,9 +23,3 @@ func xgetbv() (eax, edx uint32) { gccgoXgetbv(&a, &d) return a, d } - -// gccgo doesn't build on Darwin, per: -// https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/gcc.rb#L76 -func darwinSupportsAVX512() bool { - return false -} diff --git a/vendor/golang.org/x/sys/cpu/cpu_linux_arm64.go b/vendor/golang.org/x/sys/cpu/cpu_linux_arm64.go index 3d386d0fc2..f1caf0f78e 100644 --- a/vendor/golang.org/x/sys/cpu/cpu_linux_arm64.go +++ b/vendor/golang.org/x/sys/cpu/cpu_linux_arm64.go @@ -35,8 +35,10 @@ const ( hwcap_SHA512 = 1 << 21 hwcap_SVE = 1 << 22 hwcap_ASIMDFHM = 1 << 23 + hwcap_DIT = 1 << 24 hwcap2_SVE2 = 1 << 1 + hwcap2_I8MM = 1 << 13 ) // linuxKernelCanEmulateCPUID reports whether we're running @@ -106,9 +108,11 @@ func doinit() { ARM64.HasSHA512 = isSet(hwCap, hwcap_SHA512) ARM64.HasSVE = isSet(hwCap, hwcap_SVE) ARM64.HasASIMDFHM = isSet(hwCap, hwcap_ASIMDFHM) + ARM64.HasDIT = isSet(hwCap, hwcap_DIT) // HWCAP2 feature bits ARM64.HasSVE2 = isSet(hwCap2, hwcap2_SVE2) + ARM64.HasI8MM = isSet(hwCap2, hwcap2_I8MM) } func isSet(hwc uint, value uint) bool { diff --git a/vendor/golang.org/x/sys/cpu/cpu_linux_loong64.go b/vendor/golang.org/x/sys/cpu/cpu_linux_loong64.go new file mode 100644 index 0000000000..4f34114329 --- /dev/null +++ b/vendor/golang.org/x/sys/cpu/cpu_linux_loong64.go @@ -0,0 +1,22 @@ +// Copyright 2025 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package cpu + +// HWCAP bits. These are exposed by the Linux kernel. +const ( + hwcap_LOONGARCH_LSX = 1 << 4 + hwcap_LOONGARCH_LASX = 1 << 5 +) + +func doinit() { + // TODO: Features that require kernel support like LSX and LASX can + // be detected here once needed in std library or by the compiler. + Loong64.HasLSX = hwcIsSet(hwCap, hwcap_LOONGARCH_LSX) + Loong64.HasLASX = hwcIsSet(hwCap, hwcap_LOONGARCH_LASX) +} + +func hwcIsSet(hwc uint, val uint) bool { + return hwc&val != 0 +} diff --git a/vendor/golang.org/x/sys/cpu/cpu_linux_noinit.go b/vendor/golang.org/x/sys/cpu/cpu_linux_noinit.go index cd63e73355..a428dec9cd 100644 --- a/vendor/golang.org/x/sys/cpu/cpu_linux_noinit.go +++ b/vendor/golang.org/x/sys/cpu/cpu_linux_noinit.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -//go:build linux && !arm && !arm64 && !mips64 && !mips64le && !ppc64 && !ppc64le && !s390x +//go:build linux && !arm && !arm64 && !loong64 && !mips64 && !mips64le && !ppc64 && !ppc64le && !s390x && !riscv64 package cpu diff --git a/vendor/golang.org/x/sys/cpu/cpu_linux_riscv64.go b/vendor/golang.org/x/sys/cpu/cpu_linux_riscv64.go new file mode 100644 index 0000000000..ad741536f3 --- /dev/null +++ b/vendor/golang.org/x/sys/cpu/cpu_linux_riscv64.go @@ -0,0 +1,160 @@ +// Copyright 2024 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package cpu + +import ( + "syscall" + "unsafe" +) + +// RISC-V extension discovery code for Linux. The approach here is to first try the riscv_hwprobe +// syscall falling back to HWCAP to check for the C extension if riscv_hwprobe is not available. +// +// A note on detection of the Vector extension using HWCAP. +// +// Support for the Vector extension version 1.0 was added to the Linux kernel in release 6.5. +// Support for the riscv_hwprobe syscall was added in 6.4. It follows that if the riscv_hwprobe +// syscall is not available then neither is the Vector extension (which needs kernel support). +// The riscv_hwprobe syscall should then be all we need to detect the Vector extension. +// However, some RISC-V board manufacturers ship boards with an older kernel on top of which +// they have back-ported various versions of the Vector extension patches but not the riscv_hwprobe +// patches. These kernels advertise support for the Vector extension using HWCAP. Falling +// back to HWCAP to detect the Vector extension, if riscv_hwprobe is not available, or simply not +// bothering with riscv_hwprobe at all and just using HWCAP may then seem like an attractive option. +// +// Unfortunately, simply checking the 'V' bit in AT_HWCAP will not work as this bit is used by +// RISC-V board and cloud instance providers to mean different things. The Lichee Pi 4A board +// and the Scaleway RV1 cloud instances use the 'V' bit to advertise their support for the unratified +// 0.7.1 version of the Vector Specification. The Banana Pi BPI-F3 and the CanMV-K230 board use +// it to advertise support for 1.0 of the Vector extension. Versions 0.7.1 and 1.0 of the Vector +// extension are binary incompatible. HWCAP can then not be used in isolation to populate the +// HasV field as this field indicates that the underlying CPU is compatible with RVV 1.0. +// +// There is a way at runtime to distinguish between versions 0.7.1 and 1.0 of the Vector +// specification by issuing a RVV 1.0 vsetvli instruction and checking the vill bit of the vtype +// register. This check would allow us to safely detect version 1.0 of the Vector extension +// with HWCAP, if riscv_hwprobe were not available. However, the check cannot +// be added until the assembler supports the Vector instructions. +// +// Note the riscv_hwprobe syscall does not suffer from these ambiguities by design as all of the +// extensions it advertises support for are explicitly versioned. It's also worth noting that +// the riscv_hwprobe syscall is the only way to detect multi-letter RISC-V extensions, e.g., Zba. +// These cannot be detected using HWCAP and so riscv_hwprobe must be used to detect the majority +// of RISC-V extensions. +// +// Please see https://docs.kernel.org/arch/riscv/hwprobe.html for more information. + +// golang.org/x/sys/cpu is not allowed to depend on golang.org/x/sys/unix so we must +// reproduce the constants, types and functions needed to make the riscv_hwprobe syscall +// here. + +const ( + // Copied from golang.org/x/sys/unix/ztypes_linux_riscv64.go. + riscv_HWPROBE_KEY_IMA_EXT_0 = 0x4 + riscv_HWPROBE_IMA_C = 0x2 + riscv_HWPROBE_IMA_V = 0x4 + riscv_HWPROBE_EXT_ZBA = 0x8 + riscv_HWPROBE_EXT_ZBB = 0x10 + riscv_HWPROBE_EXT_ZBS = 0x20 + riscv_HWPROBE_EXT_ZVBB = 0x20000 + riscv_HWPROBE_EXT_ZVBC = 0x40000 + riscv_HWPROBE_EXT_ZVKB = 0x80000 + riscv_HWPROBE_EXT_ZVKG = 0x100000 + riscv_HWPROBE_EXT_ZVKNED = 0x200000 + riscv_HWPROBE_EXT_ZVKNHB = 0x800000 + riscv_HWPROBE_EXT_ZVKSED = 0x1000000 + riscv_HWPROBE_EXT_ZVKSH = 0x2000000 + riscv_HWPROBE_EXT_ZVKT = 0x4000000 + riscv_HWPROBE_KEY_CPUPERF_0 = 0x5 + riscv_HWPROBE_MISALIGNED_FAST = 0x3 + riscv_HWPROBE_MISALIGNED_MASK = 0x7 +) + +const ( + // sys_RISCV_HWPROBE is copied from golang.org/x/sys/unix/zsysnum_linux_riscv64.go. + sys_RISCV_HWPROBE = 258 +) + +// riscvHWProbePairs is copied from golang.org/x/sys/unix/ztypes_linux_riscv64.go. +type riscvHWProbePairs struct { + key int64 + value uint64 +} + +const ( + // CPU features + hwcap_RISCV_ISA_C = 1 << ('C' - 'A') +) + +func doinit() { + // A slice of key/value pair structures is passed to the RISCVHWProbe syscall. The key + // field should be initialised with one of the key constants defined above, e.g., + // RISCV_HWPROBE_KEY_IMA_EXT_0. The syscall will set the value field to the appropriate value. + // If the kernel does not recognise a key it will set the key field to -1 and the value field to 0. + + pairs := []riscvHWProbePairs{ + {riscv_HWPROBE_KEY_IMA_EXT_0, 0}, + {riscv_HWPROBE_KEY_CPUPERF_0, 0}, + } + + // This call only indicates that extensions are supported if they are implemented on all cores. + if riscvHWProbe(pairs, 0) { + if pairs[0].key != -1 { + v := uint(pairs[0].value) + RISCV64.HasC = isSet(v, riscv_HWPROBE_IMA_C) + RISCV64.HasV = isSet(v, riscv_HWPROBE_IMA_V) + RISCV64.HasZba = isSet(v, riscv_HWPROBE_EXT_ZBA) + RISCV64.HasZbb = isSet(v, riscv_HWPROBE_EXT_ZBB) + RISCV64.HasZbs = isSet(v, riscv_HWPROBE_EXT_ZBS) + RISCV64.HasZvbb = isSet(v, riscv_HWPROBE_EXT_ZVBB) + RISCV64.HasZvbc = isSet(v, riscv_HWPROBE_EXT_ZVBC) + RISCV64.HasZvkb = isSet(v, riscv_HWPROBE_EXT_ZVKB) + RISCV64.HasZvkg = isSet(v, riscv_HWPROBE_EXT_ZVKG) + RISCV64.HasZvkt = isSet(v, riscv_HWPROBE_EXT_ZVKT) + // Cryptography shorthand extensions + RISCV64.HasZvkn = isSet(v, riscv_HWPROBE_EXT_ZVKNED) && + isSet(v, riscv_HWPROBE_EXT_ZVKNHB) && RISCV64.HasZvkb && RISCV64.HasZvkt + RISCV64.HasZvknc = RISCV64.HasZvkn && RISCV64.HasZvbc + RISCV64.HasZvkng = RISCV64.HasZvkn && RISCV64.HasZvkg + RISCV64.HasZvks = isSet(v, riscv_HWPROBE_EXT_ZVKSED) && + isSet(v, riscv_HWPROBE_EXT_ZVKSH) && RISCV64.HasZvkb && RISCV64.HasZvkt + RISCV64.HasZvksc = RISCV64.HasZvks && RISCV64.HasZvbc + RISCV64.HasZvksg = RISCV64.HasZvks && RISCV64.HasZvkg + } + if pairs[1].key != -1 { + v := pairs[1].value & riscv_HWPROBE_MISALIGNED_MASK + RISCV64.HasFastMisaligned = v == riscv_HWPROBE_MISALIGNED_FAST + } + } + + // Let's double check with HWCAP if the C extension does not appear to be supported. + // This may happen if we're running on a kernel older than 6.4. + + if !RISCV64.HasC { + RISCV64.HasC = isSet(hwCap, hwcap_RISCV_ISA_C) + } +} + +func isSet(hwc uint, value uint) bool { + return hwc&value != 0 +} + +// riscvHWProbe is a simplified version of the generated wrapper function found in +// golang.org/x/sys/unix/zsyscall_linux_riscv64.go. We simplify it by removing the +// cpuCount and cpus parameters which we do not need. We always want to pass 0 for +// these parameters here so the kernel only reports the extensions that are present +// on all cores. +func riscvHWProbe(pairs []riscvHWProbePairs, flags uint) bool { + var _zero uintptr + var p0 unsafe.Pointer + if len(pairs) > 0 { + p0 = unsafe.Pointer(&pairs[0]) + } else { + p0 = unsafe.Pointer(&_zero) + } + + _, _, e1 := syscall.Syscall6(sys_RISCV_HWPROBE, uintptr(p0), uintptr(len(pairs)), uintptr(0), uintptr(0), uintptr(flags), 0) + return e1 == 0 +} diff --git a/vendor/golang.org/x/sys/cpu/cpu_loong64.go b/vendor/golang.org/x/sys/cpu/cpu_loong64.go index 558635850c..45ecb29ae7 100644 --- a/vendor/golang.org/x/sys/cpu/cpu_loong64.go +++ b/vendor/golang.org/x/sys/cpu/cpu_loong64.go @@ -8,5 +8,43 @@ package cpu const cacheLineSize = 64 +// Bit fields for CPUCFG registers, Related reference documents: +// https://loongson.github.io/LoongArch-Documentation/LoongArch-Vol1-EN.html#_cpucfg +const ( + // CPUCFG1 bits + cpucfg1_CRC32 = 1 << 25 + + // CPUCFG2 bits + cpucfg2_LAM_BH = 1 << 27 + cpucfg2_LAMCAS = 1 << 28 +) + func initOptions() { + options = []option{ + {Name: "lsx", Feature: &Loong64.HasLSX}, + {Name: "lasx", Feature: &Loong64.HasLASX}, + {Name: "crc32", Feature: &Loong64.HasCRC32}, + {Name: "lam_bh", Feature: &Loong64.HasLAM_BH}, + {Name: "lamcas", Feature: &Loong64.HasLAMCAS}, + } + + // The CPUCFG data on Loong64 only reflects the hardware capabilities, + // not the kernel support status, so features such as LSX and LASX that + // require kernel support cannot be obtained from the CPUCFG data. + // + // These features only require hardware capability support and do not + // require kernel specific support, so they can be obtained directly + // through CPUCFG + cfg1 := get_cpucfg(1) + cfg2 := get_cpucfg(2) + + Loong64.HasCRC32 = cfgIsSet(cfg1, cpucfg1_CRC32) + Loong64.HasLAMCAS = cfgIsSet(cfg2, cpucfg2_LAMCAS) + Loong64.HasLAM_BH = cfgIsSet(cfg2, cpucfg2_LAM_BH) +} + +func get_cpucfg(reg uint32) uint32 + +func cfgIsSet(cfg uint32, val uint32) bool { + return cfg&val != 0 } diff --git a/vendor/golang.org/x/sys/cpu/cpu_loong64.s b/vendor/golang.org/x/sys/cpu/cpu_loong64.s new file mode 100644 index 0000000000..71cbaf1ce2 --- /dev/null +++ b/vendor/golang.org/x/sys/cpu/cpu_loong64.s @@ -0,0 +1,13 @@ +// Copyright 2025 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +#include "textflag.h" + +// func get_cpucfg(reg uint32) uint32 +TEXT ·get_cpucfg(SB), NOSPLIT|NOFRAME, $0 + MOVW reg+0(FP), R5 + // CPUCFG R5, R4 = 0x00006ca4 + WORD $0x00006ca4 + MOVW R4, ret+8(FP) + RET diff --git a/vendor/golang.org/x/sys/cpu/cpu_other_arm64.go b/vendor/golang.org/x/sys/cpu/cpu_other_arm64.go index 5341e7f88d..ff74d7afa8 100644 --- a/vendor/golang.org/x/sys/cpu/cpu_other_arm64.go +++ b/vendor/golang.org/x/sys/cpu/cpu_other_arm64.go @@ -2,7 +2,7 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -//go:build !linux && !netbsd && !openbsd && arm64 +//go:build !linux && !netbsd && !openbsd && !windows && arm64 package cpu diff --git a/vendor/golang.org/x/sys/cpu/cpu_other_x86.go b/vendor/golang.org/x/sys/cpu/cpu_other_x86.go new file mode 100644 index 0000000000..a0fd7e2f75 --- /dev/null +++ b/vendor/golang.org/x/sys/cpu/cpu_other_x86.go @@ -0,0 +1,11 @@ +// Copyright 2024 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build 386 || amd64p32 || (amd64 && (!darwin || !gc)) + +package cpu + +func darwinSupportsAVX512() bool { + panic("only implemented for gc && amd64 && darwin") +} diff --git a/vendor/golang.org/x/sys/cpu/cpu_riscv64.go b/vendor/golang.org/x/sys/cpu/cpu_riscv64.go index 7f0c79c004..0f617aef54 100644 --- a/vendor/golang.org/x/sys/cpu/cpu_riscv64.go +++ b/vendor/golang.org/x/sys/cpu/cpu_riscv64.go @@ -8,4 +8,25 @@ package cpu const cacheLineSize = 64 -func initOptions() {} +func initOptions() { + options = []option{ + {Name: "fastmisaligned", Feature: &RISCV64.HasFastMisaligned}, + {Name: "c", Feature: &RISCV64.HasC}, + {Name: "v", Feature: &RISCV64.HasV}, + {Name: "zba", Feature: &RISCV64.HasZba}, + {Name: "zbb", Feature: &RISCV64.HasZbb}, + {Name: "zbs", Feature: &RISCV64.HasZbs}, + // RISC-V Cryptography Extensions + {Name: "zvbb", Feature: &RISCV64.HasZvbb}, + {Name: "zvbc", Feature: &RISCV64.HasZvbc}, + {Name: "zvkb", Feature: &RISCV64.HasZvkb}, + {Name: "zvkg", Feature: &RISCV64.HasZvkg}, + {Name: "zvkt", Feature: &RISCV64.HasZvkt}, + {Name: "zvkn", Feature: &RISCV64.HasZvkn}, + {Name: "zvknc", Feature: &RISCV64.HasZvknc}, + {Name: "zvkng", Feature: &RISCV64.HasZvkng}, + {Name: "zvks", Feature: &RISCV64.HasZvks}, + {Name: "zvksc", Feature: &RISCV64.HasZvksc}, + {Name: "zvksg", Feature: &RISCV64.HasZvksg}, + } +} diff --git a/vendor/golang.org/x/sys/cpu/cpu_windows_arm64.go b/vendor/golang.org/x/sys/cpu/cpu_windows_arm64.go new file mode 100644 index 0000000000..d09e85a361 --- /dev/null +++ b/vendor/golang.org/x/sys/cpu/cpu_windows_arm64.go @@ -0,0 +1,42 @@ +// Copyright 2026 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package cpu + +import ( + "golang.org/x/sys/windows" +) + +func doinit() { + // set HasASIMD and HasFP to true as per + // https://learn.microsoft.com/en-us/cpp/build/arm64-windows-abi-conventions?view=msvc-170#base-requirements + // + // The ARM64 version of Windows always presupposes that it's running on an ARMv8 or later architecture. + // Both floating-point and NEON support are presumed to be present in hardware. + // + ARM64.HasASIMD = true + ARM64.HasFP = true + + if windows.IsProcessorFeaturePresent(windows.PF_ARM_V8_CRYPTO_INSTRUCTIONS_AVAILABLE) { + ARM64.HasAES = true + ARM64.HasPMULL = true + ARM64.HasSHA1 = true + ARM64.HasSHA2 = true + } + ARM64.HasSHA3 = windows.IsProcessorFeaturePresent(windows.PF_ARM_SHA3_INSTRUCTIONS_AVAILABLE) + ARM64.HasCRC32 = windows.IsProcessorFeaturePresent(windows.PF_ARM_V8_CRC32_INSTRUCTIONS_AVAILABLE) + ARM64.HasSHA512 = windows.IsProcessorFeaturePresent(windows.PF_ARM_SHA512_INSTRUCTIONS_AVAILABLE) + ARM64.HasATOMICS = windows.IsProcessorFeaturePresent(windows.PF_ARM_V81_ATOMIC_INSTRUCTIONS_AVAILABLE) + if windows.IsProcessorFeaturePresent(windows.PF_ARM_V82_DP_INSTRUCTIONS_AVAILABLE) { + ARM64.HasASIMDDP = true + ARM64.HasASIMDRDM = true + } + if windows.IsProcessorFeaturePresent(windows.PF_ARM_V83_LRCPC_INSTRUCTIONS_AVAILABLE) { + ARM64.HasLRCPC = true + ARM64.HasSM3 = true + } + ARM64.HasSVE = windows.IsProcessorFeaturePresent(windows.PF_ARM_SVE_INSTRUCTIONS_AVAILABLE) + ARM64.HasSVE2 = windows.IsProcessorFeaturePresent(windows.PF_ARM_SVE2_INSTRUCTIONS_AVAILABLE) + ARM64.HasJSCVT = windows.IsProcessorFeaturePresent(windows.PF_ARM_V83_JSCVT_INSTRUCTIONS_AVAILABLE) +} diff --git a/vendor/golang.org/x/sys/cpu/cpu_x86.go b/vendor/golang.org/x/sys/cpu/cpu_x86.go index c29f5e4c5a..f5723d4f7e 100644 --- a/vendor/golang.org/x/sys/cpu/cpu_x86.go +++ b/vendor/golang.org/x/sys/cpu/cpu_x86.go @@ -53,6 +53,9 @@ func initOptions() { {Name: "sse41", Feature: &X86.HasSSE41}, {Name: "sse42", Feature: &X86.HasSSE42}, {Name: "ssse3", Feature: &X86.HasSSSE3}, + {Name: "avxifma", Feature: &X86.HasAVXIFMA}, + {Name: "avxvnni", Feature: &X86.HasAVXVNNI}, + {Name: "avxvnniint8", Feature: &X86.HasAVXVNNIInt8}, // These capabilities should always be enabled on amd64: {Name: "sse2", Feature: &X86.HasSSE2, Required: runtime.GOARCH == "amd64"}, @@ -61,6 +64,80 @@ func initOptions() { func archInit() { + // From internal/cpu + const ( + // eax bits + cpuid_AVXVNNI = 1 << 4 + + // ecx bits + cpuid_SSE3 = 1 << 0 + cpuid_PCLMULQDQ = 1 << 1 + cpuid_AVX512VBMI = 1 << 1 + cpuid_AVX512VBMI2 = 1 << 6 + cpuid_SSSE3 = 1 << 9 + cpuid_AVX512GFNI = 1 << 8 + cpuid_AVX512VAES = 1 << 9 + cpuid_AVX512VNNI = 1 << 11 + cpuid_AVX512BITALG = 1 << 12 + cpuid_FMA = 1 << 12 + cpuid_AVX512VPOPCNTDQ = 1 << 14 + cpuid_SSE41 = 1 << 19 + cpuid_SSE42 = 1 << 20 + cpuid_POPCNT = 1 << 23 + cpuid_AES = 1 << 25 + cpuid_OSXSAVE = 1 << 27 + cpuid_AVX = 1 << 28 + + // "Extended Feature Flag" bits returned in EBX for CPUID EAX=0x7 ECX=0x0 + cpuid_BMI1 = 1 << 3 + cpuid_AVX2 = 1 << 5 + cpuid_BMI2 = 1 << 8 + cpuid_ERMS = 1 << 9 + cpuid_AVX512F = 1 << 16 + cpuid_AVX512DQ = 1 << 17 + cpuid_ADX = 1 << 19 + cpuid_AVX512CD = 1 << 28 + cpuid_SHA = 1 << 29 + cpuid_AVX512BW = 1 << 30 + cpuid_AVX512VL = 1 << 31 + + // "Extended Feature Flag" bits returned in ECX for CPUID EAX=0x7 ECX=0x0 + cpuid_AVX512_VBMI = 1 << 1 + cpuid_AVX512_VBMI2 = 1 << 6 + cpuid_GFNI = 1 << 8 + cpuid_AVX512VPCLMULQDQ = 1 << 10 + cpuid_AVX512_BITALG = 1 << 12 + + // edx bits + cpuid_FSRM = 1 << 4 + // edx bits for CPUID 0x80000001 + cpuid_RDTSCP = 1 << 27 + ) + // Additional constants not in internal/cpu + const ( + // eax=1: edx + cpuid_SSE2 = 1 << 26 + // eax=1: ecx + cpuid_CX16 = 1 << 13 + cpuid_RDRAND = 1 << 30 + // eax=7,ecx=0: ebx + cpuid_RDSEED = 1 << 18 + cpuid_AVX512IFMA = 1 << 21 + cpuid_AVX512PF = 1 << 26 + cpuid_AVX512ER = 1 << 27 + // eax=7,ecx=0: edx + cpuid_AVX5124VNNIW = 1 << 2 + cpuid_AVX5124FMAPS = 1 << 3 + cpuid_AMXBF16 = 1 << 22 + cpuid_AMXTile = 1 << 24 + cpuid_AMXInt8 = 1 << 25 + // eax=7,ecx=1: eax + cpuid_AVX512BF16 = 1 << 5 + cpuid_AVXIFMA = 1 << 23 + // eax=7,ecx=1: edx + cpuid_AVXVNNIInt8 = 1 << 4 + ) + Initialized = true maxID, _, _, _ := cpuid(0, 0) @@ -70,82 +147,90 @@ func archInit() { } _, _, ecx1, edx1 := cpuid(1, 0) - X86.HasSSE2 = isSet(26, edx1) - - X86.HasSSE3 = isSet(0, ecx1) - X86.HasPCLMULQDQ = isSet(1, ecx1) - X86.HasSSSE3 = isSet(9, ecx1) - X86.HasFMA = isSet(12, ecx1) - X86.HasCX16 = isSet(13, ecx1) - X86.HasSSE41 = isSet(19, ecx1) - X86.HasSSE42 = isSet(20, ecx1) - X86.HasPOPCNT = isSet(23, ecx1) - X86.HasAES = isSet(25, ecx1) - X86.HasOSXSAVE = isSet(27, ecx1) - X86.HasRDRAND = isSet(30, ecx1) + X86.HasSSE2 = isSet(edx1, cpuid_SSE2) + + X86.HasSSE3 = isSet(ecx1, cpuid_SSE3) + X86.HasPCLMULQDQ = isSet(ecx1, cpuid_PCLMULQDQ) + X86.HasSSSE3 = isSet(ecx1, cpuid_SSSE3) + X86.HasFMA = isSet(ecx1, cpuid_FMA) + X86.HasCX16 = isSet(ecx1, cpuid_CX16) + X86.HasSSE41 = isSet(ecx1, cpuid_SSE41) + X86.HasSSE42 = isSet(ecx1, cpuid_SSE42) + X86.HasPOPCNT = isSet(ecx1, cpuid_POPCNT) + X86.HasAES = isSet(ecx1, cpuid_AES) + X86.HasOSXSAVE = isSet(ecx1, cpuid_OSXSAVE) + X86.HasRDRAND = isSet(ecx1, cpuid_RDRAND) var osSupportsAVX, osSupportsAVX512 bool // For XGETBV, OSXSAVE bit is required and sufficient. if X86.HasOSXSAVE { eax, _ := xgetbv() // Check if XMM and YMM registers have OS support. - osSupportsAVX = isSet(1, eax) && isSet(2, eax) + osSupportsAVX = isSet(eax, 1<<1) && isSet(eax, 1<<2) if runtime.GOOS == "darwin" { - // Darwin doesn't save/restore AVX-512 mask registers correctly across signal handlers. - // Since users can't rely on mask register contents, let's not advertise AVX-512 support. - // See issue 49233. - osSupportsAVX512 = false + // Darwin requires special AVX512 checks, see cpu_darwin_x86.go + osSupportsAVX512 = osSupportsAVX && darwinSupportsAVX512() } else { // Check if OPMASK and ZMM registers have OS support. - osSupportsAVX512 = osSupportsAVX && isSet(5, eax) && isSet(6, eax) && isSet(7, eax) + osSupportsAVX512 = osSupportsAVX && isSet(eax, 1<<5) && isSet(eax, 1<<6) && isSet(eax, 1<<7) } } - X86.HasAVX = isSet(28, ecx1) && osSupportsAVX + X86.HasAVX = isSet(ecx1, cpuid_AVX) && osSupportsAVX if maxID < 7 { return } - _, ebx7, ecx7, edx7 := cpuid(7, 0) - X86.HasBMI1 = isSet(3, ebx7) - X86.HasAVX2 = isSet(5, ebx7) && osSupportsAVX - X86.HasBMI2 = isSet(8, ebx7) - X86.HasERMS = isSet(9, ebx7) - X86.HasRDSEED = isSet(18, ebx7) - X86.HasADX = isSet(19, ebx7) + eax7, ebx7, ecx7, edx7 := cpuid(7, 0) + X86.HasBMI1 = isSet(ebx7, cpuid_BMI1) + X86.HasAVX2 = isSet(ebx7, cpuid_AVX2) && osSupportsAVX + X86.HasBMI2 = isSet(ebx7, cpuid_BMI2) + X86.HasERMS = isSet(ebx7, cpuid_ERMS) + X86.HasRDSEED = isSet(ebx7, cpuid_RDSEED) + X86.HasADX = isSet(ebx7, cpuid_ADX) - X86.HasAVX512 = isSet(16, ebx7) && osSupportsAVX512 // Because avx-512 foundation is the core required extension + X86.HasAVX512 = isSet(ebx7, cpuid_AVX512F) && osSupportsAVX512 // Because avx-512 foundation is the core required extension if X86.HasAVX512 { X86.HasAVX512F = true - X86.HasAVX512CD = isSet(28, ebx7) - X86.HasAVX512ER = isSet(27, ebx7) - X86.HasAVX512PF = isSet(26, ebx7) - X86.HasAVX512VL = isSet(31, ebx7) - X86.HasAVX512BW = isSet(30, ebx7) - X86.HasAVX512DQ = isSet(17, ebx7) - X86.HasAVX512IFMA = isSet(21, ebx7) - X86.HasAVX512VBMI = isSet(1, ecx7) - X86.HasAVX5124VNNIW = isSet(2, edx7) - X86.HasAVX5124FMAPS = isSet(3, edx7) - X86.HasAVX512VPOPCNTDQ = isSet(14, ecx7) - X86.HasAVX512VPCLMULQDQ = isSet(10, ecx7) - X86.HasAVX512VNNI = isSet(11, ecx7) - X86.HasAVX512GFNI = isSet(8, ecx7) - X86.HasAVX512VAES = isSet(9, ecx7) - X86.HasAVX512VBMI2 = isSet(6, ecx7) - X86.HasAVX512BITALG = isSet(12, ecx7) - - eax71, _, _, _ := cpuid(7, 1) - X86.HasAVX512BF16 = isSet(5, eax71) + X86.HasAVX512CD = isSet(ebx7, cpuid_AVX512CD) + X86.HasAVX512ER = isSet(ebx7, cpuid_AVX512ER) + X86.HasAVX512PF = isSet(ebx7, cpuid_AVX512PF) + X86.HasAVX512VL = isSet(ebx7, cpuid_AVX512VL) + X86.HasAVX512BW = isSet(ebx7, cpuid_AVX512BW) + X86.HasAVX512DQ = isSet(ebx7, cpuid_AVX512DQ) + X86.HasAVX512IFMA = isSet(ebx7, cpuid_AVX512IFMA) + X86.HasAVX512VBMI = isSet(ecx7, cpuid_AVX512_VBMI) + X86.HasAVX5124VNNIW = isSet(edx7, cpuid_AVX5124VNNIW) + X86.HasAVX5124FMAPS = isSet(edx7, cpuid_AVX5124FMAPS) + X86.HasAVX512VPOPCNTDQ = isSet(ecx7, cpuid_AVX512VPOPCNTDQ) + X86.HasAVX512VPCLMULQDQ = isSet(ecx7, cpuid_AVX512VPCLMULQDQ) + X86.HasAVX512VNNI = isSet(ecx7, cpuid_AVX512VNNI) + X86.HasAVX512GFNI = isSet(ecx7, cpuid_AVX512GFNI) + X86.HasAVX512VAES = isSet(ecx7, cpuid_AVX512VAES) + X86.HasAVX512VBMI2 = isSet(ecx7, cpuid_AVX512VBMI2) + X86.HasAVX512BITALG = isSet(ecx7, cpuid_AVX512BITALG) } - X86.HasAMXTile = isSet(24, edx7) - X86.HasAMXInt8 = isSet(25, edx7) - X86.HasAMXBF16 = isSet(22, edx7) + X86.HasAMXTile = isSet(edx7, cpuid_AMXTile) + X86.HasAMXInt8 = isSet(edx7, cpuid_AMXInt8) + X86.HasAMXBF16 = isSet(edx7, cpuid_AMXBF16) + + // These features depend on the second level of extended features. + if eax7 >= 1 { + eax71, _, _, edx71 := cpuid(7, 1) + if X86.HasAVX512 { + X86.HasAVX512BF16 = isSet(eax71, cpuid_AVX512BF16) + } + if X86.HasAVX { + X86.HasAVXIFMA = isSet(eax71, cpuid_AVXIFMA) + X86.HasAVXVNNI = isSet(eax71, cpuid_AVXVNNI) + X86.HasAVXVNNIInt8 = isSet(edx71, cpuid_AVXVNNIInt8) + } + } } -func isSet(bitpos uint, value uint32) bool { - return value&(1< 0 { + _p0 = unsafe.Pointer(&mib[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + if _, _, err := syscall_syscall6( + libc_sysctl_trampoline_addr, + uintptr(_p0), + uintptr(len(mib)), + uintptr(unsafe.Pointer(old)), + uintptr(unsafe.Pointer(oldlen)), + uintptr(unsafe.Pointer(new)), + uintptr(newlen), + ); err != 0 { + return err + } + + return nil +} + +var libc_sysctl_trampoline_addr uintptr + +// adapted from internal/cpu/cpu_arm64_darwin.go +func darwinSysctlEnabled(name []byte) bool { + out := int32(0) + nout := unsafe.Sizeof(out) + if ret := sysctlbyname(&name[0], (*byte)(unsafe.Pointer(&out)), &nout, nil, 0); ret != nil { + return false + } + return out > 0 +} + +//go:cgo_import_dynamic libc_sysctl sysctl "/usr/lib/libSystem.B.dylib" + +var libc_sysctlbyname_trampoline_addr uintptr + +// adapted from runtime/sys_darwin.go in the pattern of sysctl() above, as defined in x/sys/unix +func sysctlbyname(name *byte, old *byte, oldlen *uintptr, new *byte, newlen uintptr) error { + if _, _, err := syscall_syscall6( + libc_sysctlbyname_trampoline_addr, + uintptr(unsafe.Pointer(name)), + uintptr(unsafe.Pointer(old)), + uintptr(unsafe.Pointer(oldlen)), + uintptr(unsafe.Pointer(new)), + uintptr(newlen), + 0, + ); err != 0 { + return err + } + + return nil +} + +//go:cgo_import_dynamic libc_sysctlbyname sysctlbyname "/usr/lib/libSystem.B.dylib" + +// Implemented in the runtime package (runtime/sys_darwin.go) +func syscall_syscall6(fn, a1, a2, a3, a4, a5, a6 uintptr) (r1, r2 uintptr, err Errno) + +//go:linkname syscall_syscall6 syscall.syscall6 diff --git a/vendor/golang.org/x/sys/plan9/pwd_go15_plan9.go b/vendor/golang.org/x/sys/plan9/pwd_go15_plan9.go deleted file mode 100644 index 73687de748..0000000000 --- a/vendor/golang.org/x/sys/plan9/pwd_go15_plan9.go +++ /dev/null @@ -1,21 +0,0 @@ -// Copyright 2015 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build go1.5 - -package plan9 - -import "syscall" - -func fixwd() { - syscall.Fixwd() -} - -func Getwd() (wd string, err error) { - return syscall.Getwd() -} - -func Chdir(path string) error { - return syscall.Chdir(path) -} diff --git a/vendor/golang.org/x/sys/plan9/pwd_plan9.go b/vendor/golang.org/x/sys/plan9/pwd_plan9.go index fb94582184..7a76489db1 100644 --- a/vendor/golang.org/x/sys/plan9/pwd_plan9.go +++ b/vendor/golang.org/x/sys/plan9/pwd_plan9.go @@ -2,22 +2,18 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -//go:build !go1.5 - package plan9 +import "syscall" + func fixwd() { + syscall.Fixwd() } func Getwd() (wd string, err error) { - fd, err := open(".", O_RDONLY) - if err != nil { - return "", err - } - defer Close(fd) - return Fd2path(fd) + return syscall.Getwd() } func Chdir(path string) error { - return chdir(path) + return syscall.Chdir(path) } diff --git a/vendor/golang.org/x/sys/unix/README.md b/vendor/golang.org/x/sys/unix/README.md index 7d3c060e12..6e08a76a71 100644 --- a/vendor/golang.org/x/sys/unix/README.md +++ b/vendor/golang.org/x/sys/unix/README.md @@ -156,7 +156,7 @@ from the generated architecture-specific files listed below, and merge these into a common file for each OS. The merge is performed in the following steps: -1. Construct the set of common code that is idential in all architecture-specific files. +1. Construct the set of common code that is identical in all architecture-specific files. 2. Write this common code to the merged file. 3. Remove the common code from all architecture-specific files. diff --git a/vendor/golang.org/x/sys/unix/affinity_linux.go b/vendor/golang.org/x/sys/unix/affinity_linux.go index 6e5c81acd0..3ea470387b 100644 --- a/vendor/golang.org/x/sys/unix/affinity_linux.go +++ b/vendor/golang.org/x/sys/unix/affinity_linux.go @@ -38,8 +38,15 @@ func SchedSetaffinity(pid int, set *CPUSet) error { // Zero clears the set s, so that it contains no CPUs. func (s *CPUSet) Zero() { + clear(s[:]) +} + +// Fill adds all possible CPU bits to the set s. On Linux, [SchedSetaffinity] +// will silently ignore any invalid CPU bits in [CPUSet] so this is an +// efficient way of resetting the CPU affinity of a process. +func (s *CPUSet) Fill() { for i := range s { - s[i] = 0 + s[i] = ^cpuMask(0) } } diff --git a/vendor/golang.org/x/sys/unix/auxv.go b/vendor/golang.org/x/sys/unix/auxv.go new file mode 100644 index 0000000000..37a82528f5 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/auxv.go @@ -0,0 +1,36 @@ +// Copyright 2025 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build go1.21 && (aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris || zos) + +package unix + +import ( + "syscall" + "unsafe" +) + +//go:linkname runtime_getAuxv runtime.getAuxv +func runtime_getAuxv() []uintptr + +// Auxv returns the ELF auxiliary vector as a sequence of key/value pairs. +// The returned slice is always a fresh copy, owned by the caller. +// It returns an error on non-ELF platforms, or if the auxiliary vector cannot be accessed, +// which happens in some locked-down environments and build modes. +func Auxv() ([][2]uintptr, error) { + vec := runtime_getAuxv() + vecLen := len(vec) + + if vecLen == 0 { + return nil, syscall.ENOENT + } + + if vecLen%2 != 0 { + return nil, syscall.EINVAL + } + + result := make([]uintptr, vecLen) + copy(result, vec) + return unsafe.Slice((*[2]uintptr)(unsafe.Pointer(&result[0])), vecLen/2), nil +} diff --git a/vendor/golang.org/x/sys/unix/auxv_unsupported.go b/vendor/golang.org/x/sys/unix/auxv_unsupported.go new file mode 100644 index 0000000000..1200487f2e --- /dev/null +++ b/vendor/golang.org/x/sys/unix/auxv_unsupported.go @@ -0,0 +1,13 @@ +// Copyright 2025 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build !go1.21 && (aix || darwin || dragonfly || freebsd || linux || netbsd || openbsd || solaris || zos) + +package unix + +import "syscall" + +func Auxv() ([][2]uintptr, error) { + return nil, syscall.ENOTSUP +} diff --git a/vendor/golang.org/x/sys/unix/fdset.go b/vendor/golang.org/x/sys/unix/fdset.go index 9e83d18cd0..62ed12645f 100644 --- a/vendor/golang.org/x/sys/unix/fdset.go +++ b/vendor/golang.org/x/sys/unix/fdset.go @@ -23,7 +23,5 @@ func (fds *FdSet) IsSet(fd int) bool { // Zero clears the set fds. func (fds *FdSet) Zero() { - for i := range fds.Bits { - fds.Bits[i] = 0 - } + clear(fds.Bits[:]) } diff --git a/vendor/golang.org/x/sys/unix/ifreq_linux.go b/vendor/golang.org/x/sys/unix/ifreq_linux.go index 848840ae4c..309f5a2b0c 100644 --- a/vendor/golang.org/x/sys/unix/ifreq_linux.go +++ b/vendor/golang.org/x/sys/unix/ifreq_linux.go @@ -111,9 +111,7 @@ func (ifr *Ifreq) SetUint32(v uint32) { // clear zeroes the ifreq's union field to prevent trailing garbage data from // being sent to the kernel if an ifreq is reused. func (ifr *Ifreq) clear() { - for i := range ifr.raw.Ifru { - ifr.raw.Ifru[i] = 0 - } + clear(ifr.raw.Ifru[:]) } // TODO(mdlayher): export as IfreqData? For now we can provide helpers such as diff --git a/vendor/golang.org/x/sys/unix/ioctl_linux.go b/vendor/golang.org/x/sys/unix/ioctl_linux.go index dbe680eab8..7ca4fa12aa 100644 --- a/vendor/golang.org/x/sys/unix/ioctl_linux.go +++ b/vendor/golang.org/x/sys/unix/ioctl_linux.go @@ -58,6 +58,102 @@ func IoctlGetEthtoolDrvinfo(fd int, ifname string) (*EthtoolDrvinfo, error) { return &value, err } +// IoctlGetEthtoolTsInfo fetches ethtool timestamping and PHC +// association for the network device specified by ifname. +func IoctlGetEthtoolTsInfo(fd int, ifname string) (*EthtoolTsInfo, error) { + ifr, err := NewIfreq(ifname) + if err != nil { + return nil, err + } + + value := EthtoolTsInfo{Cmd: ETHTOOL_GET_TS_INFO} + ifrd := ifr.withData(unsafe.Pointer(&value)) + + err = ioctlIfreqData(fd, SIOCETHTOOL, &ifrd) + return &value, err +} + +// IoctlGetHwTstamp retrieves the hardware timestamping configuration +// for the network device specified by ifname. +func IoctlGetHwTstamp(fd int, ifname string) (*HwTstampConfig, error) { + ifr, err := NewIfreq(ifname) + if err != nil { + return nil, err + } + + value := HwTstampConfig{} + ifrd := ifr.withData(unsafe.Pointer(&value)) + + err = ioctlIfreqData(fd, SIOCGHWTSTAMP, &ifrd) + return &value, err +} + +// IoctlSetHwTstamp updates the hardware timestamping configuration for +// the network device specified by ifname. +func IoctlSetHwTstamp(fd int, ifname string, cfg *HwTstampConfig) error { + ifr, err := NewIfreq(ifname) + if err != nil { + return err + } + ifrd := ifr.withData(unsafe.Pointer(cfg)) + return ioctlIfreqData(fd, SIOCSHWTSTAMP, &ifrd) +} + +// FdToClockID derives the clock ID from the file descriptor number +// - see clock_gettime(3), FD_TO_CLOCKID macros. The resulting ID is +// suitable for system calls like ClockGettime. +func FdToClockID(fd int) int32 { return int32((int(^fd) << 3) | 3) } + +// IoctlPtpClockGetcaps returns the description of a given PTP device. +func IoctlPtpClockGetcaps(fd int) (*PtpClockCaps, error) { + var value PtpClockCaps + err := ioctlPtr(fd, PTP_CLOCK_GETCAPS2, unsafe.Pointer(&value)) + return &value, err +} + +// IoctlPtpSysOffsetPrecise returns a description of the clock +// offset compared to the system clock. +func IoctlPtpSysOffsetPrecise(fd int) (*PtpSysOffsetPrecise, error) { + var value PtpSysOffsetPrecise + err := ioctlPtr(fd, PTP_SYS_OFFSET_PRECISE2, unsafe.Pointer(&value)) + return &value, err +} + +// IoctlPtpSysOffsetExtended returns an extended description of the +// clock offset compared to the system clock. The samples parameter +// specifies the desired number of measurements. +func IoctlPtpSysOffsetExtended(fd int, samples uint) (*PtpSysOffsetExtended, error) { + value := PtpSysOffsetExtended{Samples: uint32(samples)} + err := ioctlPtr(fd, PTP_SYS_OFFSET_EXTENDED2, unsafe.Pointer(&value)) + return &value, err +} + +// IoctlPtpPinGetfunc returns the configuration of the specified +// I/O pin on given PTP device. +func IoctlPtpPinGetfunc(fd int, index uint) (*PtpPinDesc, error) { + value := PtpPinDesc{Index: uint32(index)} + err := ioctlPtr(fd, PTP_PIN_GETFUNC2, unsafe.Pointer(&value)) + return &value, err +} + +// IoctlPtpPinSetfunc updates configuration of the specified PTP +// I/O pin. +func IoctlPtpPinSetfunc(fd int, pd *PtpPinDesc) error { + return ioctlPtr(fd, PTP_PIN_SETFUNC2, unsafe.Pointer(pd)) +} + +// IoctlPtpPeroutRequest configures the periodic output mode of the +// PTP I/O pins. +func IoctlPtpPeroutRequest(fd int, r *PtpPeroutRequest) error { + return ioctlPtr(fd, PTP_PEROUT_REQUEST2, unsafe.Pointer(r)) +} + +// IoctlPtpExttsRequest configures the external timestamping mode +// of the PTP I/O pins. +func IoctlPtpExttsRequest(fd int, r *PtpExttsRequest) error { + return ioctlPtr(fd, PTP_EXTTS_REQUEST2, unsafe.Pointer(r)) +} + // IoctlGetWatchdogInfo fetches information about a watchdog device from the // Linux watchdog API. For more information, see: // https://www.kernel.org/doc/html/latest/watchdog/watchdog-api.html. diff --git a/vendor/golang.org/x/sys/unix/ioctl_signed.go b/vendor/golang.org/x/sys/unix/ioctl_signed.go index 5b0759bd86..be0f3fba65 100644 --- a/vendor/golang.org/x/sys/unix/ioctl_signed.go +++ b/vendor/golang.org/x/sys/unix/ioctl_signed.go @@ -6,9 +6,7 @@ package unix -import ( - "unsafe" -) +import "unsafe" // ioctl itself should not be exposed directly, but additional get/set // functions for specific types are permissible. @@ -28,6 +26,13 @@ func IoctlSetPointerInt(fd int, req int, value int) error { return ioctlPtr(fd, req, unsafe.Pointer(&v)) } +// IoctlSetString performs an ioctl operation which sets a string value +// on fd, using the specified request number. +func IoctlSetString(fd int, req int, value string) error { + bs := append([]byte(value), 0) + return ioctlPtr(fd, req, unsafe.Pointer(&bs[0])) +} + // IoctlSetWinsize performs an ioctl on fd with a *Winsize argument. // // To change fd's window size, the req argument should be TIOCSWINSZ. diff --git a/vendor/golang.org/x/sys/unix/ioctl_unsigned.go b/vendor/golang.org/x/sys/unix/ioctl_unsigned.go index 20f470b9d0..f0c282136d 100644 --- a/vendor/golang.org/x/sys/unix/ioctl_unsigned.go +++ b/vendor/golang.org/x/sys/unix/ioctl_unsigned.go @@ -6,9 +6,7 @@ package unix -import ( - "unsafe" -) +import "unsafe" // ioctl itself should not be exposed directly, but additional get/set // functions for specific types are permissible. @@ -28,6 +26,13 @@ func IoctlSetPointerInt(fd int, req uint, value int) error { return ioctlPtr(fd, req, unsafe.Pointer(&v)) } +// IoctlSetString performs an ioctl operation which sets a string value +// on fd, using the specified request number. +func IoctlSetString(fd int, req uint, value string) error { + bs := append([]byte(value), 0) + return ioctlPtr(fd, req, unsafe.Pointer(&bs[0])) +} + // IoctlSetWinsize performs an ioctl on fd with a *Winsize argument. // // To change fd's window size, the req argument should be TIOCSWINSZ. diff --git a/vendor/golang.org/x/sys/unix/mkall.sh b/vendor/golang.org/x/sys/unix/mkall.sh index e6f31d374d..d0ed611912 100644 --- a/vendor/golang.org/x/sys/unix/mkall.sh +++ b/vendor/golang.org/x/sys/unix/mkall.sh @@ -49,6 +49,7 @@ esac if [[ "$GOOS" = "linux" ]]; then # Use the Docker-based build system # Files generated through docker (use $cmd so you can Ctl-C the build or run) + set -e $cmd docker build --tag generate:$GOOS $GOOS $cmd docker run --interactive --tty --volume $(cd -- "$(dirname -- "$0")/.." && pwd):/build generate:$GOOS exit diff --git a/vendor/golang.org/x/sys/unix/mkerrors.sh b/vendor/golang.org/x/sys/unix/mkerrors.sh index 4ed2e488b6..fd39be4efd 100644 --- a/vendor/golang.org/x/sys/unix/mkerrors.sh +++ b/vendor/golang.org/x/sys/unix/mkerrors.sh @@ -58,6 +58,7 @@ includes_Darwin=' #define _DARWIN_USE_64_BIT_INODE #define __APPLE_USE_RFC_3542 #include +#include #include #include #include @@ -157,6 +158,16 @@ includes_Linux=' #endif #define _GNU_SOURCE +// See the description in unix/linux/types.go +#if defined(__ARM_EABI__) || \ + (defined(__mips__) && (_MIPS_SIM == _ABIO32)) || \ + (defined(__powerpc__) && (!defined(__powerpc64__))) +# ifdef _TIME_BITS +# undef _TIME_BITS +# endif +# define _TIME_BITS 32 +#endif + // is broken on powerpc64, as it fails to include definitions of // these structures. We just include them copied from . #if defined(__powerpc__) @@ -215,6 +226,7 @@ struct ltchars { #include #include #include +#include #include #include #include @@ -244,6 +256,7 @@ struct ltchars { #include #include #include +#include #include #include #include @@ -255,6 +268,7 @@ struct ltchars { #include #include #include +#include #include #include #include @@ -337,6 +351,9 @@ struct ltchars { #define _HIDIOCGRAWPHYS HIDIOCGRAWPHYS(_HIDIOCGRAWPHYS_LEN) #define _HIDIOCGRAWUNIQ HIDIOCGRAWUNIQ(_HIDIOCGRAWUNIQ_LEN) +// Renamed in v6.16, commit c6d732c38f93 ("net: ethtool: remove duplicate defines for family info") +#define ETHTOOL_FAMILY_NAME ETHTOOL_GENL_NAME +#define ETHTOOL_FAMILY_VERSION ETHTOOL_GENL_VERSION ' includes_NetBSD=' @@ -514,6 +531,7 @@ ccflags="$@" $2 ~ /^O[CNPFPL][A-Z]+[^_][A-Z]+$/ || $2 ~ /^(NL|CR|TAB|BS|VT|FF)DLY$/ || $2 ~ /^(NL|CR|TAB|BS|VT|FF)[0-9]$/ || + $2 ~ /^(DT|EI|ELF|EV|NN|NT|PF|SHF|SHN|SHT|STB|STT|VER)_/ || $2 ~ /^O?XTABS$/ || $2 ~ /^TC[IO](ON|OFF)$/ || $2 ~ /^IN_/ || @@ -526,6 +544,7 @@ ccflags="$@" $2 ~ /^(AF|SOCK|SO|SOL|IPPROTO|IP|IPV6|TCP|MCAST|EVFILT|NOTE|SHUT|PROT|MAP|MREMAP|MFD|T?PACKET|MSG|SCM|MCL|DT|MADV|PR|LOCAL|TCPOPT|UDP)_/ || $2 ~ /^NFC_(GENL|PROTO|COMM|RF|SE|DIRECTION|LLCP|SOCKPROTO)_/ || $2 ~ /^NFC_.*_(MAX)?SIZE$/ || + $2 ~ /^PTP_/ || $2 ~ /^RAW_PAYLOAD_/ || $2 ~ /^[US]F_/ || $2 ~ /^TP_STATUS_/ || @@ -551,6 +570,7 @@ ccflags="$@" $2 !~ /^RTC_VL_(ACCURACY|BACKUP|DATA)/ && $2 ~ /^(NETLINK|NLM|NLMSG|NLA|IFA|IFAN|RT|RTC|RTCF|RTN|RTPROT|RTNH|ARPHRD|ETH_P|NETNSA)_/ || $2 ~ /^SOCK_|SK_DIAG_|SKNLGRP_$/ || + $2 ~ /^(CONNECT|SAE)_/ || $2 ~ /^FIORDCHK$/ || $2 ~ /^SIOC/ || $2 ~ /^TIOC/ || @@ -594,7 +614,7 @@ ccflags="$@" $2 !~ /IOC_MAGIC/ && $2 ~ /^[A-Z][A-Z0-9_]+_MAGIC2?$/ || $2 ~ /^(VM|VMADDR)_/ || - $2 ~ /^IOCTL_VM_SOCKETS_/ || + $2 ~ /^(IOCTL_VM_SOCKETS_|IOCTL_MEI_)/ || $2 ~ /^(TASKSTATS|TS)_/ || $2 ~ /^CGROUPSTATS_/ || $2 ~ /^GENL_/ || @@ -654,7 +674,7 @@ errors=$( signals=$( echo '#include ' | $CC -x c - -E -dM $ccflags | awk '$1=="#define" && $2 ~ /^SIG[A-Z0-9]+$/ { print $2 }' | - grep -v 'SIGSTKSIZE\|SIGSTKSZ\|SIGRT\|SIGMAX64' | + grep -E -v '(SIGSTKSIZE|SIGSTKSZ|SIGRT|SIGMAX64)' | sort ) @@ -664,7 +684,7 @@ echo '#include ' | $CC -x c - -E -dM $ccflags | sort >_error.grep echo '#include ' | $CC -x c - -E -dM $ccflags | awk '$1=="#define" && $2 ~ /^SIG[A-Z0-9]+$/ { print "^\t" $2 "[ \t]*=" }' | - grep -v 'SIGSTKSIZE\|SIGSTKSZ\|SIGRT\|SIGMAX64' | + grep -E -v '(SIGSTKSIZE|SIGSTKSZ|SIGRT|SIGMAX64)' | sort >_signal.grep echo '// mkerrors.sh' "$@" diff --git a/vendor/golang.org/x/sys/unix/syscall_aix.go b/vendor/golang.org/x/sys/unix/syscall_aix.go index 67ce6cef2d..6f15ba1eaf 100644 --- a/vendor/golang.org/x/sys/unix/syscall_aix.go +++ b/vendor/golang.org/x/sys/unix/syscall_aix.go @@ -360,7 +360,7 @@ func Wait4(pid int, wstatus *WaitStatus, options int, rusage *Rusage) (wpid int, var status _C_int var r Pid_t err = ERESTART - // AIX wait4 may return with ERESTART errno, while the processus is still + // AIX wait4 may return with ERESTART errno, while the process is still // active. for err == ERESTART { r, err = wait4(Pid_t(pid), &status, options, rusage) diff --git a/vendor/golang.org/x/sys/unix/syscall_darwin.go b/vendor/golang.org/x/sys/unix/syscall_darwin.go index 4cc7b00596..7838ca5db2 100644 --- a/vendor/golang.org/x/sys/unix/syscall_darwin.go +++ b/vendor/golang.org/x/sys/unix/syscall_darwin.go @@ -402,6 +402,18 @@ func IoctlSetIfreqMTU(fd int, ifreq *IfreqMTU) error { return ioctlPtr(fd, SIOCSIFMTU, unsafe.Pointer(ifreq)) } +//sys renamexNp(from string, to string, flag uint32) (err error) + +func RenamexNp(from string, to string, flag uint32) (err error) { + return renamexNp(from, to, flag) +} + +//sys renameatxNp(fromfd int, from string, tofd int, to string, flag uint32) (err error) + +func RenameatxNp(fromfd int, from string, tofd int, to string, flag uint32) (err error) { + return renameatxNp(fromfd, from, tofd, to, flag) +} + //sys sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) = SYS_SYSCTL func Uname(uname *Utsname) error { @@ -554,6 +566,132 @@ func PthreadFchdir(fd int) (err error) { return pthread_fchdir_np(fd) } +// Connectx calls connectx(2) to initiate a connection on a socket. +// +// srcIf, srcAddr, and dstAddr are filled into a [SaEndpoints] struct and passed as the endpoints argument. +// +// - srcIf is the optional source interface index. 0 means unspecified. +// - srcAddr is the optional source address. nil means unspecified. +// - dstAddr is the destination address. +// +// On success, Connectx returns the number of bytes enqueued for transmission. +func Connectx(fd int, srcIf uint32, srcAddr, dstAddr Sockaddr, associd SaeAssocID, flags uint32, iov []Iovec, connid *SaeConnID) (n uintptr, err error) { + endpoints := SaEndpoints{ + Srcif: srcIf, + } + + if srcAddr != nil { + addrp, addrlen, err := srcAddr.sockaddr() + if err != nil { + return 0, err + } + endpoints.Srcaddr = (*RawSockaddr)(addrp) + endpoints.Srcaddrlen = uint32(addrlen) + } + + if dstAddr != nil { + addrp, addrlen, err := dstAddr.sockaddr() + if err != nil { + return 0, err + } + endpoints.Dstaddr = (*RawSockaddr)(addrp) + endpoints.Dstaddrlen = uint32(addrlen) + } + + err = connectx(fd, &endpoints, associd, flags, iov, &n, connid) + return +} + +const minIovec = 8 + +func Readv(fd int, iovs [][]byte) (n int, err error) { + iovecs := make([]Iovec, 0, minIovec) + iovecs = appendBytes(iovecs, iovs) + n, err = readv(fd, iovecs) + readvRacedetect(iovecs, n, err) + return n, err +} + +func Preadv(fd int, iovs [][]byte, offset int64) (n int, err error) { + iovecs := make([]Iovec, 0, minIovec) + iovecs = appendBytes(iovecs, iovs) + n, err = preadv(fd, iovecs, offset) + readvRacedetect(iovecs, n, err) + return n, err +} + +func Writev(fd int, iovs [][]byte) (n int, err error) { + iovecs := make([]Iovec, 0, minIovec) + iovecs = appendBytes(iovecs, iovs) + if raceenabled { + raceReleaseMerge(unsafe.Pointer(&ioSync)) + } + n, err = writev(fd, iovecs) + writevRacedetect(iovecs, n) + return n, err +} + +func Pwritev(fd int, iovs [][]byte, offset int64) (n int, err error) { + iovecs := make([]Iovec, 0, minIovec) + iovecs = appendBytes(iovecs, iovs) + if raceenabled { + raceReleaseMerge(unsafe.Pointer(&ioSync)) + } + n, err = pwritev(fd, iovecs, offset) + writevRacedetect(iovecs, n) + return n, err +} + +func appendBytes(vecs []Iovec, bs [][]byte) []Iovec { + for _, b := range bs { + var v Iovec + v.SetLen(len(b)) + if len(b) > 0 { + v.Base = &b[0] + } else { + v.Base = (*byte)(unsafe.Pointer(&_zero)) + } + vecs = append(vecs, v) + } + return vecs +} + +func writevRacedetect(iovecs []Iovec, n int) { + if !raceenabled { + return + } + for i := 0; n > 0 && i < len(iovecs); i++ { + m := int(iovecs[i].Len) + if m > n { + m = n + } + n -= m + if m > 0 { + raceReadRange(unsafe.Pointer(iovecs[i].Base), m) + } + } +} + +func readvRacedetect(iovecs []Iovec, n int, err error) { + if !raceenabled { + return + } + for i := 0; n > 0 && i < len(iovecs); i++ { + m := int(iovecs[i].Len) + if m > n { + m = n + } + n -= m + if m > 0 { + raceWriteRange(unsafe.Pointer(iovecs[i].Base), m) + } + } + if err == nil { + raceAcquire(unsafe.Pointer(&ioSync)) + } +} + +//sys connectx(fd int, endpoints *SaEndpoints, associd SaeAssocID, flags uint32, iov []Iovec, n *uintptr, connid *SaeConnID) (err error) //sys sendfile(infd int, outfd int, offset int64, len *int64, hdtr unsafe.Pointer, flags int) (err error) //sys shmat(id int, addr uintptr, flag int) (ret uintptr, err error) @@ -656,3 +794,7 @@ func PthreadFchdir(fd int) (err error) { //sys write(fd int, p []byte) (n int, err error) //sys mmap(addr uintptr, length uintptr, prot int, flag int, fd int, pos int64) (ret uintptr, err error) //sys munmap(addr uintptr, length uintptr) (err error) +//sys readv(fd int, iovecs []Iovec) (n int, err error) +//sys preadv(fd int, iovecs []Iovec, offset int64) (n int, err error) +//sys writev(fd int, iovecs []Iovec) (n int, err error) +//sys pwritev(fd int, iovecs []Iovec, offset int64) (n int, err error) diff --git a/vendor/golang.org/x/sys/unix/syscall_dragonfly.go b/vendor/golang.org/x/sys/unix/syscall_dragonfly.go index 97cb916f2c..be8c002070 100644 --- a/vendor/golang.org/x/sys/unix/syscall_dragonfly.go +++ b/vendor/golang.org/x/sys/unix/syscall_dragonfly.go @@ -246,6 +246,18 @@ func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err e return sendfile(outfd, infd, offset, count) } +func Dup3(oldfd, newfd, flags int) error { + if oldfd == newfd || flags&^O_CLOEXEC != 0 { + return EINVAL + } + how := F_DUP2FD + if flags&O_CLOEXEC != 0 { + how = F_DUP2FD_CLOEXEC + } + _, err := fcntl(oldfd, how, newfd) + return err +} + /* * Exposed directly */ diff --git a/vendor/golang.org/x/sys/unix/syscall_hurd.go b/vendor/golang.org/x/sys/unix/syscall_hurd.go index ba46651f8e..a6a2d2fc2b 100644 --- a/vendor/golang.org/x/sys/unix/syscall_hurd.go +++ b/vendor/golang.org/x/sys/unix/syscall_hurd.go @@ -11,6 +11,7 @@ package unix int ioctl(int, unsigned long int, uintptr_t); */ import "C" +import "unsafe" func ioctl(fd int, req uint, arg uintptr) (err error) { r0, er := C.ioctl(C.int(fd), C.ulong(req), C.uintptr_t(arg)) diff --git a/vendor/golang.org/x/sys/unix/syscall_linux.go b/vendor/golang.org/x/sys/unix/syscall_linux.go index 5682e2628a..06c0eea6fb 100644 --- a/vendor/golang.org/x/sys/unix/syscall_linux.go +++ b/vendor/golang.org/x/sys/unix/syscall_linux.go @@ -13,6 +13,7 @@ package unix import ( "encoding/binary" + "slices" "strconv" "syscall" "time" @@ -417,7 +418,7 @@ func (sa *SockaddrUnix) sockaddr() (unsafe.Pointer, _Socklen, error) { return nil, 0, EINVAL } sa.raw.Family = AF_UNIX - for i := 0; i < n; i++ { + for i := range n { sa.raw.Path[i] = int8(name[i]) } // length is family (uint16), name, NUL. @@ -507,7 +508,7 @@ func (sa *SockaddrL2) sockaddr() (unsafe.Pointer, _Socklen, error) { psm := (*[2]byte)(unsafe.Pointer(&sa.raw.Psm)) psm[0] = byte(sa.PSM) psm[1] = byte(sa.PSM >> 8) - for i := 0; i < len(sa.Addr); i++ { + for i := range len(sa.Addr) { sa.raw.Bdaddr[i] = sa.Addr[len(sa.Addr)-1-i] } cid := (*[2]byte)(unsafe.Pointer(&sa.raw.Cid)) @@ -589,11 +590,11 @@ func (sa *SockaddrCAN) sockaddr() (unsafe.Pointer, _Socklen, error) { sa.raw.Family = AF_CAN sa.raw.Ifindex = int32(sa.Ifindex) rx := (*[4]byte)(unsafe.Pointer(&sa.RxID)) - for i := 0; i < 4; i++ { + for i := range 4 { sa.raw.Addr[i] = rx[i] } tx := (*[4]byte)(unsafe.Pointer(&sa.TxID)) - for i := 0; i < 4; i++ { + for i := range 4 { sa.raw.Addr[i+4] = tx[i] } return unsafe.Pointer(&sa.raw), SizeofSockaddrCAN, nil @@ -618,11 +619,11 @@ func (sa *SockaddrCANJ1939) sockaddr() (unsafe.Pointer, _Socklen, error) { sa.raw.Family = AF_CAN sa.raw.Ifindex = int32(sa.Ifindex) n := (*[8]byte)(unsafe.Pointer(&sa.Name)) - for i := 0; i < 8; i++ { + for i := range 8 { sa.raw.Addr[i] = n[i] } p := (*[4]byte)(unsafe.Pointer(&sa.PGN)) - for i := 0; i < 4; i++ { + for i := range 4 { sa.raw.Addr[i+8] = p[i] } sa.raw.Addr[12] = sa.Addr @@ -800,9 +801,7 @@ func (sa *SockaddrPPPoE) sockaddr() (unsafe.Pointer, _Socklen, error) { // one. The kernel expects SID to be in network byte order. binary.BigEndian.PutUint16(sa.raw[6:8], sa.SID) copy(sa.raw[8:14], sa.Remote) - for i := 14; i < 14+IFNAMSIZ; i++ { - sa.raw[i] = 0 - } + clear(sa.raw[14 : 14+IFNAMSIZ]) copy(sa.raw[14:], sa.Dev) return unsafe.Pointer(&sa.raw), SizeofSockaddrPPPoX, nil } @@ -911,7 +910,7 @@ func (sa *SockaddrIUCV) sockaddr() (unsafe.Pointer, _Socklen, error) { // These are EBCDIC encoded by the kernel, but we still need to pad them // with blanks. Initializing with blanks allows the caller to feed in either // a padded or an unpadded string. - for i := 0; i < 8; i++ { + for i := range 8 { sa.raw.Nodeid[i] = ' ' sa.raw.User_id[i] = ' ' sa.raw.Name[i] = ' ' @@ -1148,7 +1147,7 @@ func anyToSockaddr(fd int, rsa *RawSockaddrAny) (Sockaddr, error) { var user [8]byte var name [8]byte - for i := 0; i < 8; i++ { + for i := range 8 { user[i] = byte(pp.User_id[i]) name[i] = byte(pp.Name[i]) } @@ -1173,11 +1172,11 @@ func anyToSockaddr(fd int, rsa *RawSockaddrAny) (Sockaddr, error) { Ifindex: int(pp.Ifindex), } name := (*[8]byte)(unsafe.Pointer(&sa.Name)) - for i := 0; i < 8; i++ { + for i := range 8 { name[i] = pp.Addr[i] } pgn := (*[4]byte)(unsafe.Pointer(&sa.PGN)) - for i := 0; i < 4; i++ { + for i := range 4 { pgn[i] = pp.Addr[i+8] } addr := (*[1]byte)(unsafe.Pointer(&sa.Addr)) @@ -1188,11 +1187,11 @@ func anyToSockaddr(fd int, rsa *RawSockaddrAny) (Sockaddr, error) { Ifindex: int(pp.Ifindex), } rx := (*[4]byte)(unsafe.Pointer(&sa.RxID)) - for i := 0; i < 4; i++ { + for i := range 4 { rx[i] = pp.Addr[i] } tx := (*[4]byte)(unsafe.Pointer(&sa.TxID)) - for i := 0; i < 4; i++ { + for i := range 4 { tx[i] = pp.Addr[i+4] } return sa, nil @@ -1295,6 +1294,48 @@ func GetsockoptTCPInfo(fd, level, opt int) (*TCPInfo, error) { return &value, err } +// GetsockoptTCPCCVegasInfo returns algorithm specific congestion control information for a socket using the "vegas" +// algorithm. +// +// The socket's congestion control algorighm can be retrieved via [GetsockoptString] with the [TCP_CONGESTION] option: +// +// algo, err := unix.GetsockoptString(fd, unix.IPPROTO_TCP, unix.TCP_CONGESTION) +func GetsockoptTCPCCVegasInfo(fd, level, opt int) (*TCPVegasInfo, error) { + var value [SizeofTCPCCInfo / 4]uint32 // ensure proper alignment + vallen := _Socklen(SizeofTCPCCInfo) + err := getsockopt(fd, level, opt, unsafe.Pointer(&value[0]), &vallen) + out := (*TCPVegasInfo)(unsafe.Pointer(&value[0])) + return out, err +} + +// GetsockoptTCPCCDCTCPInfo returns algorithm specific congestion control information for a socket using the "dctp" +// algorithm. +// +// The socket's congestion control algorighm can be retrieved via [GetsockoptString] with the [TCP_CONGESTION] option: +// +// algo, err := unix.GetsockoptString(fd, unix.IPPROTO_TCP, unix.TCP_CONGESTION) +func GetsockoptTCPCCDCTCPInfo(fd, level, opt int) (*TCPDCTCPInfo, error) { + var value [SizeofTCPCCInfo / 4]uint32 // ensure proper alignment + vallen := _Socklen(SizeofTCPCCInfo) + err := getsockopt(fd, level, opt, unsafe.Pointer(&value[0]), &vallen) + out := (*TCPDCTCPInfo)(unsafe.Pointer(&value[0])) + return out, err +} + +// GetsockoptTCPCCBBRInfo returns algorithm specific congestion control information for a socket using the "bbr" +// algorithm. +// +// The socket's congestion control algorighm can be retrieved via [GetsockoptString] with the [TCP_CONGESTION] option: +// +// algo, err := unix.GetsockoptString(fd, unix.IPPROTO_TCP, unix.TCP_CONGESTION) +func GetsockoptTCPCCBBRInfo(fd, level, opt int) (*TCPBBRInfo, error) { + var value [SizeofTCPCCInfo / 4]uint32 // ensure proper alignment + vallen := _Socklen(SizeofTCPCCInfo) + err := getsockopt(fd, level, opt, unsafe.Pointer(&value[0]), &vallen) + out := (*TCPBBRInfo)(unsafe.Pointer(&value[0])) + return out, err +} + // GetsockoptString returns the string value of the socket option opt for the // socket associated with fd at the given socket level. func GetsockoptString(fd, level, opt int) (string, error) { @@ -1818,6 +1859,7 @@ func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err e //sys ClockAdjtime(clockid int32, buf *Timex) (state int, err error) //sys ClockGetres(clockid int32, res *Timespec) (err error) //sys ClockGettime(clockid int32, time *Timespec) (err error) +//sys ClockSettime(clockid int32, time *Timespec) (err error) //sys ClockNanosleep(clockid int32, flags int, request *Timespec, remain *Timespec) (err error) //sys Close(fd int) (err error) //sys CloseRange(first uint, last uint, flags uint) (err error) @@ -1959,7 +2001,26 @@ func Getpgrp() (pid int) { //sysnb Getpid() (pid int) //sysnb Getppid() (ppid int) //sys Getpriority(which int, who int) (prio int, err error) -//sys Getrandom(buf []byte, flags int) (n int, err error) + +func Getrandom(buf []byte, flags int) (n int, err error) { + vdsoRet, supported := vgetrandom(buf, uint32(flags)) + if supported { + if vdsoRet < 0 { + return 0, errnoErr(syscall.Errno(-vdsoRet)) + } + return vdsoRet, nil + } + var p *byte + if len(buf) > 0 { + p = &buf[0] + } + r, _, e := Syscall(SYS_GETRANDOM, uintptr(unsafe.Pointer(p)), uintptr(len(buf)), uintptr(flags)) + if e != 0 { + return 0, errnoErr(e) + } + return int(r), nil +} + //sysnb Getrusage(who int, rusage *Rusage) (err error) //sysnb Getsid(pid int) (sid int, err error) //sysnb Gettid() (tid int) @@ -2154,10 +2215,7 @@ func readvRacedetect(iovecs []Iovec, n int, err error) { return } for i := 0; n > 0 && i < len(iovecs); i++ { - m := int(iovecs[i].Len) - if m > n { - m = n - } + m := min(int(iovecs[i].Len), n) n -= m if m > 0 { raceWriteRange(unsafe.Pointer(iovecs[i].Base), m) @@ -2208,10 +2266,7 @@ func writevRacedetect(iovecs []Iovec, n int) { return } for i := 0; n > 0 && i < len(iovecs); i++ { - m := int(iovecs[i].Len) - if m > n { - m = n - } + m := min(int(iovecs[i].Len), n) n -= m if m > 0 { raceReadRange(unsafe.Pointer(iovecs[i].Base), m) @@ -2258,12 +2313,7 @@ func isGroupMember(gid int) bool { return false } - for _, g := range groups { - if g == gid { - return true - } - } - return false + return slices.Contains(groups, gid) } func isCapDacOverrideSet() bool { @@ -2592,3 +2642,10 @@ func SchedGetAttr(pid int, flags uint) (*SchedAttr, error) { } //sys Cachestat(fd uint, crange *CachestatRange, cstat *Cachestat_t, flags uint) (err error) +//sys Mseal(b []byte, flags uint) (err error) + +//sys setMemPolicy(mode int, mask *CPUSet, size int) (err error) = SYS_SET_MEMPOLICY + +func SetMemPolicy(mode int, mask *CPUSet) error { + return setMemPolicy(mode, mask, _CPU_SETSIZE) +} diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_arm64.go b/vendor/golang.org/x/sys/unix/syscall_linux_arm64.go index cf2ee6c75e..745e5c7e6c 100644 --- a/vendor/golang.org/x/sys/unix/syscall_linux_arm64.go +++ b/vendor/golang.org/x/sys/unix/syscall_linux_arm64.go @@ -182,3 +182,5 @@ func KexecFileLoad(kernelFd int, initrdFd int, cmdline string, flags int) error } return kexecFileLoad(kernelFd, initrdFd, cmdlineLen, cmdline, flags) } + +const SYS_FSTATAT = SYS_NEWFSTATAT diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_loong64.go b/vendor/golang.org/x/sys/unix/syscall_linux_loong64.go index 3d0e98451f..dd2262a407 100644 --- a/vendor/golang.org/x/sys/unix/syscall_linux_loong64.go +++ b/vendor/golang.org/x/sys/unix/syscall_linux_loong64.go @@ -214,3 +214,5 @@ func KexecFileLoad(kernelFd int, initrdFd int, cmdline string, flags int) error } return kexecFileLoad(kernelFd, initrdFd, cmdlineLen, cmdline, flags) } + +const SYS_FSTATAT = SYS_NEWFSTATAT diff --git a/vendor/golang.org/x/sys/unix/syscall_linux_riscv64.go b/vendor/golang.org/x/sys/unix/syscall_linux_riscv64.go index 6f5a288944..8cf3670bda 100644 --- a/vendor/golang.org/x/sys/unix/syscall_linux_riscv64.go +++ b/vendor/golang.org/x/sys/unix/syscall_linux_riscv64.go @@ -187,3 +187,5 @@ func RISCVHWProbe(pairs []RISCVHWProbePairs, set *CPUSet, flags uint) (err error } return riscvHWProbe(pairs, setSize, set, flags) } + +const SYS_FSTATAT = SYS_NEWFSTATAT diff --git a/vendor/golang.org/x/sys/unix/syscall_netbsd.go b/vendor/golang.org/x/sys/unix/syscall_netbsd.go index 88162099af..34a4676973 100644 --- a/vendor/golang.org/x/sys/unix/syscall_netbsd.go +++ b/vendor/golang.org/x/sys/unix/syscall_netbsd.go @@ -248,6 +248,23 @@ func Statvfs(path string, buf *Statvfs_t) (err error) { return Statvfs1(path, buf, ST_WAIT) } +func Getvfsstat(buf []Statvfs_t, flags int) (n int, err error) { + var ( + _p0 unsafe.Pointer + bufsize uintptr + ) + if len(buf) > 0 { + _p0 = unsafe.Pointer(&buf[0]) + bufsize = unsafe.Sizeof(Statvfs_t{}) * uintptr(len(buf)) + } + r0, _, e1 := Syscall(SYS_GETVFSSTAT, uintptr(_p0), bufsize, uintptr(flags)) + n = int(r0) + if e1 != 0 { + err = e1 + } + return +} + /* * Exposed directly */ diff --git a/vendor/golang.org/x/sys/unix/syscall_openbsd.go b/vendor/golang.org/x/sys/unix/syscall_openbsd.go index b25343c71a..b86ded549c 100644 --- a/vendor/golang.org/x/sys/unix/syscall_openbsd.go +++ b/vendor/golang.org/x/sys/unix/syscall_openbsd.go @@ -293,6 +293,7 @@ func Uname(uname *Utsname) error { //sys Mkfifoat(dirfd int, path string, mode uint32) (err error) //sys Mknod(path string, mode uint32, dev int) (err error) //sys Mknodat(dirfd int, path string, mode uint32, dev int) (err error) +//sys Mount(fsType string, dir string, flags int, data unsafe.Pointer) (err error) //sys Nanosleep(time *Timespec, leftover *Timespec) (err error) //sys Open(path string, mode int, perm uint32) (fd int, err error) //sys Openat(dirfd int, path string, mode int, perm uint32) (fd int, err error) diff --git a/vendor/golang.org/x/sys/unix/syscall_solaris.go b/vendor/golang.org/x/sys/unix/syscall_solaris.go index 21974af064..a6a2ea0cc0 100644 --- a/vendor/golang.org/x/sys/unix/syscall_solaris.go +++ b/vendor/golang.org/x/sys/unix/syscall_solaris.go @@ -629,7 +629,7 @@ func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err e //sys Kill(pid int, signum syscall.Signal) (err error) //sys Lchown(path string, uid int, gid int) (err error) //sys Link(path string, link string) (err error) -//sys Listen(s int, backlog int) (err error) = libsocket.__xnet_llisten +//sys Listen(s int, backlog int) (err error) = libsocket.__xnet_listen //sys Lstat(path string, stat *Stat_t) (err error) //sys Madvise(b []byte, advice int) (err error) //sys Mkdir(path string, mode uint32) (err error) @@ -1052,14 +1052,6 @@ func IoctlSetIntRetInt(fd int, req int, arg int) (int, error) { return ioctlRet(fd, req, uintptr(arg)) } -func IoctlSetString(fd int, req int, val string) error { - bs := make([]byte, len(val)+1) - copy(bs[:len(bs)-1], val) - err := ioctlPtr(fd, req, unsafe.Pointer(&bs[0])) - runtime.KeepAlive(&bs[0]) - return err -} - // Lifreq Helpers func (l *Lifreq) SetName(name string) error { @@ -1102,3 +1094,90 @@ func (s *Strioctl) SetInt(i int) { func IoctlSetStrioctlRetInt(fd int, req int, s *Strioctl) (int, error) { return ioctlPtrRet(fd, req, unsafe.Pointer(s)) } + +// Ucred Helpers +// See ucred(3c) and getpeerucred(3c) + +//sys getpeerucred(fd uintptr, ucred *uintptr) (err error) +//sys ucredFree(ucred uintptr) = ucred_free +//sys ucredGet(pid int) (ucred uintptr, err error) = ucred_get +//sys ucredGeteuid(ucred uintptr) (uid int) = ucred_geteuid +//sys ucredGetegid(ucred uintptr) (gid int) = ucred_getegid +//sys ucredGetruid(ucred uintptr) (uid int) = ucred_getruid +//sys ucredGetrgid(ucred uintptr) (gid int) = ucred_getrgid +//sys ucredGetsuid(ucred uintptr) (uid int) = ucred_getsuid +//sys ucredGetsgid(ucred uintptr) (gid int) = ucred_getsgid +//sys ucredGetpid(ucred uintptr) (pid int) = ucred_getpid + +// Ucred is an opaque struct that holds user credentials. +type Ucred struct { + ucred uintptr +} + +// We need to ensure that ucredFree is called on the underlying ucred +// when the Ucred is garbage collected. +func ucredFinalizer(u *Ucred) { + ucredFree(u.ucred) +} + +func GetPeerUcred(fd uintptr) (*Ucred, error) { + var ucred uintptr + err := getpeerucred(fd, &ucred) + if err != nil { + return nil, err + } + result := &Ucred{ + ucred: ucred, + } + // set the finalizer on the result so that the ucred will be freed + runtime.SetFinalizer(result, ucredFinalizer) + return result, nil +} + +func UcredGet(pid int) (*Ucred, error) { + ucred, err := ucredGet(pid) + if err != nil { + return nil, err + } + result := &Ucred{ + ucred: ucred, + } + // set the finalizer on the result so that the ucred will be freed + runtime.SetFinalizer(result, ucredFinalizer) + return result, nil +} + +func (u *Ucred) Geteuid() int { + defer runtime.KeepAlive(u) + return ucredGeteuid(u.ucred) +} + +func (u *Ucred) Getruid() int { + defer runtime.KeepAlive(u) + return ucredGetruid(u.ucred) +} + +func (u *Ucred) Getsuid() int { + defer runtime.KeepAlive(u) + return ucredGetsuid(u.ucred) +} + +func (u *Ucred) Getegid() int { + defer runtime.KeepAlive(u) + return ucredGetegid(u.ucred) +} + +func (u *Ucred) Getrgid() int { + defer runtime.KeepAlive(u) + return ucredGetrgid(u.ucred) +} + +func (u *Ucred) Getsgid() int { + defer runtime.KeepAlive(u) + return ucredGetsgid(u.ucred) +} + +func (u *Ucred) Getpid() int { + defer runtime.KeepAlive(u) + return ucredGetpid(u.ucred) +} diff --git a/vendor/golang.org/x/sys/unix/syscall_unix.go b/vendor/golang.org/x/sys/unix/syscall_unix.go index 4e92e5aa40..de6fccf9aa 100644 --- a/vendor/golang.org/x/sys/unix/syscall_unix.go +++ b/vendor/golang.org/x/sys/unix/syscall_unix.go @@ -367,7 +367,9 @@ func Recvmsg(fd int, p, oob []byte, flags int) (n, oobn int, recvflags int, from iov[0].SetLen(len(p)) } var rsa RawSockaddrAny - n, oobn, recvflags, err = recvmsgRaw(fd, iov[:], oob, flags, &rsa) + if n, oobn, recvflags, err = recvmsgRaw(fd, iov[:], oob, flags, &rsa); err != nil { + return + } // source address is only specified if the socket is unconnected if rsa.Addr.Family != AF_UNSPEC { from, err = anyToSockaddr(fd, &rsa) @@ -389,8 +391,10 @@ func RecvmsgBuffers(fd int, buffers [][]byte, oob []byte, flags int) (n, oobn in } } var rsa RawSockaddrAny - n, oobn, recvflags, err = recvmsgRaw(fd, iov, oob, flags, &rsa) - if err == nil && rsa.Addr.Family != AF_UNSPEC { + if n, oobn, recvflags, err = recvmsgRaw(fd, iov, oob, flags, &rsa); err != nil { + return + } + if rsa.Addr.Family != AF_UNSPEC { from, err = anyToSockaddr(fd, &rsa) } return diff --git a/vendor/golang.org/x/sys/unix/syscall_zos_s390x.go b/vendor/golang.org/x/sys/unix/syscall_zos_s390x.go index 312ae6ac1d..7bf5c04bb0 100644 --- a/vendor/golang.org/x/sys/unix/syscall_zos_s390x.go +++ b/vendor/golang.org/x/sys/unix/syscall_zos_s390x.go @@ -768,6 +768,15 @@ func Munmap(b []byte) (err error) { return mapper.Munmap(b) } +func MmapPtr(fd int, offset int64, addr unsafe.Pointer, length uintptr, prot int, flags int) (ret unsafe.Pointer, err error) { + xaddr, err := mapper.mmap(uintptr(addr), length, prot, flags, fd, offset) + return unsafe.Pointer(xaddr), err +} + +func MunmapPtr(addr unsafe.Pointer, length uintptr) (err error) { + return mapper.munmap(uintptr(addr), length) +} + //sys Gethostname(buf []byte) (err error) = SYS___GETHOSTNAME_A //sysnb Getgid() (gid int) //sysnb Getpid() (pid int) @@ -816,10 +825,10 @@ func Lstat(path string, stat *Stat_t) (err error) { // for checking symlinks begins with $VERSION/ $SYSNAME/ $SYSSYMR/ $SYSSYMA/ func isSpecialPath(path []byte) (v bool) { var special = [4][8]byte{ - [8]byte{'V', 'E', 'R', 'S', 'I', 'O', 'N', '/'}, - [8]byte{'S', 'Y', 'S', 'N', 'A', 'M', 'E', '/'}, - [8]byte{'S', 'Y', 'S', 'S', 'Y', 'M', 'R', '/'}, - [8]byte{'S', 'Y', 'S', 'S', 'Y', 'M', 'A', '/'}} + {'V', 'E', 'R', 'S', 'I', 'O', 'N', '/'}, + {'S', 'Y', 'S', 'N', 'A', 'M', 'E', '/'}, + {'S', 'Y', 'S', 'S', 'Y', 'M', 'R', '/'}, + {'S', 'Y', 'S', 'S', 'Y', 'M', 'A', '/'}} var i, j int for i = 0; i < len(special); i++ { @@ -3115,3 +3124,90 @@ func legacy_Mkfifoat(dirfd int, path string, mode uint32) (err error) { //sys Posix_openpt(oflag int) (fd int, err error) = SYS_POSIX_OPENPT //sys Grantpt(fildes int) (rc int, err error) = SYS_GRANTPT //sys Unlockpt(fildes int) (rc int, err error) = SYS_UNLOCKPT + +func fcntlAsIs(fd uintptr, cmd int, arg uintptr) (val int, err error) { + runtime.EnterSyscall() + r0, e2, e1 := CallLeFuncWithErr(GetZosLibVec()+SYS_FCNTL<<4, uintptr(fd), uintptr(cmd), arg) + runtime.ExitSyscall() + val = int(r0) + if int64(r0) == -1 { + err = errnoErr2(e1, e2) + } + return +} + +func Fcntl(fd uintptr, cmd int, op interface{}) (ret int, err error) { + switch op.(type) { + case *Flock_t: + err = FcntlFlock(fd, cmd, op.(*Flock_t)) + if err != nil { + ret = -1 + } + return + case int: + return FcntlInt(fd, cmd, op.(int)) + case *F_cnvrt: + return fcntlAsIs(fd, cmd, uintptr(unsafe.Pointer(op.(*F_cnvrt)))) + case unsafe.Pointer: + return fcntlAsIs(fd, cmd, uintptr(op.(unsafe.Pointer))) + default: + return -1, EINVAL + } + return +} + +func Sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + if raceenabled { + raceReleaseMerge(unsafe.Pointer(&ioSync)) + } + return sendfile(outfd, infd, offset, count) +} + +func sendfile(outfd int, infd int, offset *int64, count int) (written int, err error) { + // TODO: use LE call instead if the call is implemented + originalOffset, err := Seek(infd, 0, SEEK_CUR) + if err != nil { + return -1, err + } + //start reading data from in_fd + if offset != nil { + _, err := Seek(infd, *offset, SEEK_SET) + if err != nil { + return -1, err + } + } + + buf := make([]byte, count) + readBuf := make([]byte, 0) + var n int = 0 + for i := 0; i < count; i += n { + n, err := Read(infd, buf) + if n == 0 { + if err != nil { + return -1, err + } else { // EOF + break + } + } + readBuf = append(readBuf, buf...) + buf = buf[0:0] + } + + n2, err := Write(outfd, readBuf) + if err != nil { + return -1, err + } + + //When sendfile() returns, this variable will be set to the + // offset of the byte following the last byte that was read. + if offset != nil { + *offset = *offset + int64(n) + // If offset is not NULL, then sendfile() does not modify the file + // offset of in_fd + _, err := Seek(infd, originalOffset, SEEK_SET) + if err != nil { + return -1, err + } + } + return n2, nil +} diff --git a/vendor/golang.org/x/sys/unix/vgetrandom_linux.go b/vendor/golang.org/x/sys/unix/vgetrandom_linux.go new file mode 100644 index 0000000000..07ac8e09d1 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/vgetrandom_linux.go @@ -0,0 +1,13 @@ +// Copyright 2024 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build linux && go1.24 + +package unix + +import _ "unsafe" + +//go:linkname vgetrandom runtime.vgetrandom +//go:noescape +func vgetrandom(p []byte, flags uint32) (ret int, supported bool) diff --git a/vendor/golang.org/x/sys/unix/vgetrandom_unsupported.go b/vendor/golang.org/x/sys/unix/vgetrandom_unsupported.go new file mode 100644 index 0000000000..297e97bce9 --- /dev/null +++ b/vendor/golang.org/x/sys/unix/vgetrandom_unsupported.go @@ -0,0 +1,11 @@ +// Copyright 2024 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build !linux || !go1.24 + +package unix + +func vgetrandom(p []byte, flags uint32) (ret int, supported bool) { + return -1, false +} diff --git a/vendor/golang.org/x/sys/unix/zerrors_darwin_amd64.go b/vendor/golang.org/x/sys/unix/zerrors_darwin_amd64.go index e40fa85245..d73c4652e6 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_darwin_amd64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_darwin_amd64.go @@ -237,6 +237,9 @@ const ( CLOCK_UPTIME_RAW_APPROX = 0x9 CLONE_NOFOLLOW = 0x1 CLONE_NOOWNERCOPY = 0x2 + CONNECT_DATA_AUTHENTICATED = 0x4 + CONNECT_DATA_IDEMPOTENT = 0x2 + CONNECT_RESUME_ON_READ_WRITE = 0x1 CR0 = 0x0 CR1 = 0x1000 CR2 = 0x2000 @@ -1169,6 +1172,11 @@ const ( PT_WRITE_D = 0x5 PT_WRITE_I = 0x4 PT_WRITE_U = 0x6 + RENAME_EXCL = 0x4 + RENAME_NOFOLLOW_ANY = 0x10 + RENAME_RESERVED1 = 0x8 + RENAME_SECLUDE = 0x1 + RENAME_SWAP = 0x2 RLIMIT_AS = 0x5 RLIMIT_CORE = 0x4 RLIMIT_CPU = 0x0 @@ -1260,6 +1268,10 @@ const ( RTV_SSTHRESH = 0x20 RUSAGE_CHILDREN = -0x1 RUSAGE_SELF = 0x0 + SAE_ASSOCID_ALL = 0xffffffff + SAE_ASSOCID_ANY = 0x0 + SAE_CONNID_ALL = 0xffffffff + SAE_CONNID_ANY = 0x0 SCM_CREDS = 0x3 SCM_RIGHTS = 0x1 SCM_TIMESTAMP = 0x2 diff --git a/vendor/golang.org/x/sys/unix/zerrors_darwin_arm64.go b/vendor/golang.org/x/sys/unix/zerrors_darwin_arm64.go index bb02aa6c05..4a55a40058 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_darwin_arm64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_darwin_arm64.go @@ -237,6 +237,9 @@ const ( CLOCK_UPTIME_RAW_APPROX = 0x9 CLONE_NOFOLLOW = 0x1 CLONE_NOOWNERCOPY = 0x2 + CONNECT_DATA_AUTHENTICATED = 0x4 + CONNECT_DATA_IDEMPOTENT = 0x2 + CONNECT_RESUME_ON_READ_WRITE = 0x1 CR0 = 0x0 CR1 = 0x1000 CR2 = 0x2000 @@ -1169,6 +1172,11 @@ const ( PT_WRITE_D = 0x5 PT_WRITE_I = 0x4 PT_WRITE_U = 0x6 + RENAME_EXCL = 0x4 + RENAME_NOFOLLOW_ANY = 0x10 + RENAME_RESERVED1 = 0x8 + RENAME_SECLUDE = 0x1 + RENAME_SWAP = 0x2 RLIMIT_AS = 0x5 RLIMIT_CORE = 0x4 RLIMIT_CPU = 0x0 @@ -1260,6 +1268,10 @@ const ( RTV_SSTHRESH = 0x20 RUSAGE_CHILDREN = -0x1 RUSAGE_SELF = 0x0 + SAE_ASSOCID_ALL = 0xffffffff + SAE_ASSOCID_ANY = 0x0 + SAE_CONNID_ALL = 0xffffffff + SAE_CONNID_ANY = 0x0 SCM_CREDS = 0x3 SCM_RIGHTS = 0x1 SCM_TIMESTAMP = 0x2 diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux.go b/vendor/golang.org/x/sys/unix/zerrors_linux.go index 877a62b479..120a7b35d1 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux.go @@ -319,11 +319,17 @@ const ( AUDIT_INTEGRITY_POLICY_RULE = 0x70f AUDIT_INTEGRITY_RULE = 0x70d AUDIT_INTEGRITY_STATUS = 0x70a + AUDIT_INTEGRITY_USERSPACE = 0x710 AUDIT_IPC = 0x517 AUDIT_IPC_SET_PERM = 0x51f + AUDIT_IPE_ACCESS = 0x58c + AUDIT_IPE_CONFIG_CHANGE = 0x58d + AUDIT_IPE_POLICY_LOAD = 0x58e AUDIT_KERNEL = 0x7d0 AUDIT_KERNEL_OTHER = 0x524 AUDIT_KERN_MODULE = 0x532 + AUDIT_LANDLOCK_ACCESS = 0x58f + AUDIT_LANDLOCK_DOMAIN = 0x590 AUDIT_LAST_FEATURE = 0x1 AUDIT_LAST_KERN_ANOM_MSG = 0x707 AUDIT_LAST_USER_MSG = 0x4af @@ -457,6 +463,7 @@ const ( B600 = 0x8 B75 = 0x2 B9600 = 0xd + BCACHEFS_SUPER_MAGIC = 0xca451a4e BDEVFS_MAGIC = 0x62646576 BINDERFS_SUPER_MAGIC = 0x6c6f6f70 BINFMTFS_MAGIC = 0x42494e4d @@ -487,13 +494,16 @@ const ( BPF_F_BEFORE = 0x8 BPF_F_ID = 0x20 BPF_F_NETFILTER_IP_DEFRAG = 0x1 + BPF_F_PREORDER = 0x40 BPF_F_QUERY_EFFECTIVE = 0x1 + BPF_F_REDIRECT_FLAGS = 0x19 BPF_F_REPLACE = 0x4 BPF_F_SLEEPABLE = 0x10 BPF_F_STRICT_ALIGNMENT = 0x1 BPF_F_TEST_REG_INVARIANTS = 0x80 BPF_F_TEST_RND_HI32 = 0x4 BPF_F_TEST_RUN_ON_CPU = 0x1 + BPF_F_TEST_SKB_CHECKSUM_COMPLETE = 0x4 BPF_F_TEST_STATE_FREQ = 0x8 BPF_F_TEST_XDP_LIVE_FRAMES = 0x2 BPF_F_XDP_DEV_BOUND_ONLY = 0x40 @@ -521,6 +531,7 @@ const ( BPF_LDX = 0x1 BPF_LEN = 0x80 BPF_LL_OFF = -0x200000 + BPF_LOAD_ACQ = 0x100 BPF_LSH = 0x60 BPF_MAJOR_VERSION = 0x1 BPF_MAXINSNS = 0x1000 @@ -548,6 +559,7 @@ const ( BPF_RET = 0x6 BPF_RSH = 0x70 BPF_ST = 0x2 + BPF_STORE_REL = 0x110 BPF_STX = 0x3 BPF_SUB = 0x10 BPF_TAG_SIZE = 0x8 @@ -837,24 +849,90 @@ const ( DM_UUID_FLAG = 0x4000 DM_UUID_LEN = 0x81 DM_VERSION = 0xc138fd00 - DM_VERSION_EXTRA = "-ioctl (2023-03-01)" + DM_VERSION_EXTRA = "-ioctl (2025-04-28)" DM_VERSION_MAJOR = 0x4 - DM_VERSION_MINOR = 0x30 + DM_VERSION_MINOR = 0x32 DM_VERSION_PATCHLEVEL = 0x0 + DT_ADDRRNGHI = 0x6ffffeff + DT_ADDRRNGLO = 0x6ffffe00 DT_BLK = 0x6 DT_CHR = 0x2 + DT_DEBUG = 0x15 DT_DIR = 0x4 + DT_ENCODING = 0x20 DT_FIFO = 0x1 + DT_FINI = 0xd + DT_FLAGS_1 = 0x6ffffffb + DT_GNU_HASH = 0x6ffffef5 + DT_HASH = 0x4 + DT_HIOS = 0x6ffff000 + DT_HIPROC = 0x7fffffff + DT_INIT = 0xc + DT_JMPREL = 0x17 DT_LNK = 0xa + DT_LOOS = 0x6000000d + DT_LOPROC = 0x70000000 + DT_NEEDED = 0x1 + DT_NULL = 0x0 + DT_PLTGOT = 0x3 + DT_PLTREL = 0x14 + DT_PLTRELSZ = 0x2 DT_REG = 0x8 + DT_REL = 0x11 + DT_RELA = 0x7 + DT_RELACOUNT = 0x6ffffff9 + DT_RELAENT = 0x9 + DT_RELASZ = 0x8 + DT_RELCOUNT = 0x6ffffffa + DT_RELENT = 0x13 + DT_RELSZ = 0x12 + DT_RPATH = 0xf DT_SOCK = 0xc + DT_SONAME = 0xe + DT_STRSZ = 0xa + DT_STRTAB = 0x5 + DT_SYMBOLIC = 0x10 + DT_SYMENT = 0xb + DT_SYMTAB = 0x6 + DT_TEXTREL = 0x16 DT_UNKNOWN = 0x0 + DT_VALRNGHI = 0x6ffffdff + DT_VALRNGLO = 0x6ffffd00 + DT_VERDEF = 0x6ffffffc + DT_VERDEFNUM = 0x6ffffffd + DT_VERNEED = 0x6ffffffe + DT_VERNEEDNUM = 0x6fffffff + DT_VERSYM = 0x6ffffff0 DT_WHT = 0xe ECHO = 0x8 ECRYPTFS_SUPER_MAGIC = 0xf15f EFD_SEMAPHORE = 0x1 EFIVARFS_MAGIC = 0xde5e81e4 EFS_SUPER_MAGIC = 0x414a53 + EI_CLASS = 0x4 + EI_DATA = 0x5 + EI_MAG0 = 0x0 + EI_MAG1 = 0x1 + EI_MAG2 = 0x2 + EI_MAG3 = 0x3 + EI_NIDENT = 0x10 + EI_OSABI = 0x7 + EI_PAD = 0x8 + EI_VERSION = 0x6 + ELFCLASS32 = 0x1 + ELFCLASS64 = 0x2 + ELFCLASSNONE = 0x0 + ELFCLASSNUM = 0x3 + ELFDATA2LSB = 0x1 + ELFDATA2MSB = 0x2 + ELFDATANONE = 0x0 + ELFMAG = "\177ELF" + ELFMAG0 = 0x7f + ELFMAG1 = 'E' + ELFMAG2 = 'L' + ELFMAG3 = 'F' + ELFOSABI_LINUX = 0x3 + ELFOSABI_NONE = 0x0 EM_386 = 0x3 EM_486 = 0x6 EM_68K = 0x4 @@ -928,12 +1006,12 @@ const ( EPOLL_CTL_ADD = 0x1 EPOLL_CTL_DEL = 0x2 EPOLL_CTL_MOD = 0x3 + EPOLL_IOC_TYPE = 0x8a EROFS_SUPER_MAGIC_V1 = 0xe0f5e1e2 - ESP_V4_FLOW = 0xa - ESP_V6_FLOW = 0xc - ETHER_FLOW = 0x12 ETHTOOL_BUSINFO_LEN = 0x20 ETHTOOL_EROMVERS_LEN = 0x20 + ETHTOOL_FAMILY_NAME = "ethtool" + ETHTOOL_FAMILY_VERSION = 0x1 ETHTOOL_FEC_AUTO = 0x2 ETHTOOL_FEC_BASER = 0x10 ETHTOOL_FEC_LLRS = 0x20 @@ -941,9 +1019,6 @@ const ( ETHTOOL_FEC_OFF = 0x4 ETHTOOL_FEC_RS = 0x8 ETHTOOL_FLAG_ALL = 0x7 - ETHTOOL_FLAG_COMPACT_BITSETS = 0x1 - ETHTOOL_FLAG_OMIT_REPLY = 0x2 - ETHTOOL_FLAG_STATS = 0x4 ETHTOOL_FLASHDEV = 0x33 ETHTOOL_FLASH_MAX_FILENAME = 0x80 ETHTOOL_FWVERS_LEN = 0x20 @@ -1143,14 +1218,24 @@ const ( ETH_P_WCCP = 0x883e ETH_P_X25 = 0x805 ETH_P_XDSA = 0xf8 + ET_CORE = 0x4 + ET_DYN = 0x3 + ET_EXEC = 0x2 + ET_HIPROC = 0xffff + ET_LOPROC = 0xff00 + ET_NONE = 0x0 + ET_REL = 0x1 EV_ABS = 0x3 EV_CNT = 0x20 + EV_CURRENT = 0x1 EV_FF = 0x15 EV_FF_STATUS = 0x17 EV_KEY = 0x1 EV_LED = 0x11 EV_MAX = 0x1f EV_MSC = 0x4 + EV_NONE = 0x0 + EV_NUM = 0x2 EV_PWR = 0x16 EV_REL = 0x2 EV_REP = 0x14 @@ -1166,6 +1251,7 @@ const ( EXTA = 0xe EXTB = 0xf F2FS_SUPER_MAGIC = 0xf2f52010 + FALLOC_FL_ALLOCATE_RANGE = 0x0 FALLOC_FL_COLLAPSE_RANGE = 0x8 FALLOC_FL_INSERT_RANGE = 0x20 FALLOC_FL_KEEP_SIZE = 0x1 @@ -1198,13 +1284,18 @@ const ( FAN_DENY = 0x2 FAN_ENABLE_AUDIT = 0x40 FAN_EPIDFD = -0x2 + FAN_ERRNO_BITS = 0x8 + FAN_ERRNO_MASK = 0xff + FAN_ERRNO_SHIFT = 0x18 FAN_EVENT_INFO_TYPE_DFID = 0x3 FAN_EVENT_INFO_TYPE_DFID_NAME = 0x2 FAN_EVENT_INFO_TYPE_ERROR = 0x5 FAN_EVENT_INFO_TYPE_FID = 0x1 + FAN_EVENT_INFO_TYPE_MNT = 0x7 FAN_EVENT_INFO_TYPE_NEW_DFID_NAME = 0xc FAN_EVENT_INFO_TYPE_OLD_DFID_NAME = 0xa FAN_EVENT_INFO_TYPE_PIDFD = 0x4 + FAN_EVENT_INFO_TYPE_RANGE = 0x6 FAN_EVENT_METADATA_LEN = 0x18 FAN_EVENT_ON_CHILD = 0x8000000 FAN_FS_ERROR = 0x8000 @@ -1219,9 +1310,12 @@ const ( FAN_MARK_IGNORED_SURV_MODIFY = 0x40 FAN_MARK_IGNORE_SURV = 0x440 FAN_MARK_INODE = 0x0 + FAN_MARK_MNTNS = 0x110 FAN_MARK_MOUNT = 0x10 FAN_MARK_ONLYDIR = 0x8 FAN_MARK_REMOVE = 0x2 + FAN_MNT_ATTACH = 0x1000000 + FAN_MNT_DETACH = 0x2000000 FAN_MODIFY = 0x2 FAN_MOVE = 0xc0 FAN_MOVED_FROM = 0x40 @@ -1235,12 +1329,15 @@ const ( FAN_OPEN_EXEC = 0x1000 FAN_OPEN_EXEC_PERM = 0x40000 FAN_OPEN_PERM = 0x10000 + FAN_PRE_ACCESS = 0x100000 FAN_Q_OVERFLOW = 0x4000 FAN_RENAME = 0x10000000 FAN_REPORT_DFID_NAME = 0xc00 FAN_REPORT_DFID_NAME_TARGET = 0x1e00 FAN_REPORT_DIR_FID = 0x400 + FAN_REPORT_FD_ERROR = 0x2000 FAN_REPORT_FID = 0x200 + FAN_REPORT_MNT = 0x4000 FAN_REPORT_NAME = 0x800 FAN_REPORT_PIDFD = 0x80 FAN_REPORT_TARGET_FID = 0x1000 @@ -1260,6 +1357,7 @@ const ( FIB_RULE_PERMANENT = 0x1 FIB_RULE_UNRESOLVED = 0x4 FIDEDUPERANGE = 0xc0189436 + FSCRYPT_ADD_KEY_FLAG_HW_WRAPPED = 0x1 FSCRYPT_KEY_DESCRIPTOR_SIZE = 0x8 FSCRYPT_KEY_DESC_PREFIX = "fscrypt:" FSCRYPT_KEY_DESC_PREFIX_SIZE = 0x8 @@ -1325,8 +1423,10 @@ const ( FUSE_SUPER_MAGIC = 0x65735546 FUTEXFS_SUPER_MAGIC = 0xbad1dea F_ADD_SEALS = 0x409 + F_CREATED_QUERY = 0x404 F_DUPFD = 0x0 F_DUPFD_CLOEXEC = 0x406 + F_DUPFD_QUERY = 0x403 F_EXLCK = 0x4 F_GETFD = 0x1 F_GETFL = 0x3 @@ -1515,6 +1615,8 @@ const ( IN_OPEN = 0x20 IN_Q_OVERFLOW = 0x4000 IN_UNMOUNT = 0x2000 + IOCTL_MEI_CONNECT_CLIENT = 0xc0104801 + IOCTL_MEI_CONNECT_CLIENT_VTAG = 0xc0144804 IPPROTO_AH = 0x33 IPPROTO_BEETPH = 0x5e IPPROTO_COMP = 0x6c @@ -1546,6 +1648,7 @@ const ( IPPROTO_ROUTING = 0x2b IPPROTO_RSVP = 0x2e IPPROTO_SCTP = 0x84 + IPPROTO_SMC = 0x100 IPPROTO_TCP = 0x6 IPPROTO_TP = 0x1d IPPROTO_UDP = 0x11 @@ -1565,7 +1668,6 @@ const ( IPV6_DONTFRAG = 0x3e IPV6_DROP_MEMBERSHIP = 0x15 IPV6_DSTOPTS = 0x3b - IPV6_FLOW = 0x11 IPV6_FREEBIND = 0x4e IPV6_HDRINCL = 0x24 IPV6_HOPLIMIT = 0x34 @@ -1616,8 +1718,9 @@ const ( IPV6_TRANSPARENT = 0x4b IPV6_UNICAST_HOPS = 0x10 IPV6_UNICAST_IF = 0x4c - IPV6_USER_FLOW = 0xe IPV6_V6ONLY = 0x1a + IPV6_VERSION = 0x60 + IPV6_VERSION_MASK = 0xf0 IPV6_XFRM_POLICY = 0x23 IP_ADD_MEMBERSHIP = 0x23 IP_ADD_SOURCE_MEMBERSHIP = 0x27 @@ -1676,7 +1779,6 @@ const ( IP_TTL = 0x2 IP_UNBLOCK_SOURCE = 0x25 IP_UNICAST_IF = 0x32 - IP_USER_FLOW = 0xd IP_XFRM_POLICY = 0x11 ISOFS_SUPER_MAGIC = 0x9660 ISTRIP = 0x20 @@ -1705,6 +1807,7 @@ const ( KEXEC_ARCH_S390 = 0x160000 KEXEC_ARCH_SH = 0x2a0000 KEXEC_ARCH_X86_64 = 0x3e0000 + KEXEC_CRASH_HOTPLUG_SUPPORT = 0x8 KEXEC_FILE_DEBUG = 0x8 KEXEC_FILE_NO_INITRAMFS = 0x4 KEXEC_FILE_ON_CRASH = 0x2 @@ -1780,6 +1883,7 @@ const ( KEY_SPEC_USER_KEYRING = -0x4 KEY_SPEC_USER_SESSION_KEYRING = -0x5 LANDLOCK_ACCESS_FS_EXECUTE = 0x1 + LANDLOCK_ACCESS_FS_IOCTL_DEV = 0x8000 LANDLOCK_ACCESS_FS_MAKE_BLOCK = 0x800 LANDLOCK_ACCESS_FS_MAKE_CHAR = 0x40 LANDLOCK_ACCESS_FS_MAKE_DIR = 0x80 @@ -1796,7 +1900,13 @@ const ( LANDLOCK_ACCESS_FS_WRITE_FILE = 0x2 LANDLOCK_ACCESS_NET_BIND_TCP = 0x1 LANDLOCK_ACCESS_NET_CONNECT_TCP = 0x2 + LANDLOCK_CREATE_RULESET_ERRATA = 0x2 LANDLOCK_CREATE_RULESET_VERSION = 0x1 + LANDLOCK_RESTRICT_SELF_LOG_NEW_EXEC_ON = 0x2 + LANDLOCK_RESTRICT_SELF_LOG_SAME_EXEC_OFF = 0x1 + LANDLOCK_RESTRICT_SELF_LOG_SUBDOMAINS_OFF = 0x4 + LANDLOCK_SCOPE_ABSTRACT_UNIX_SOCKET = 0x1 + LANDLOCK_SCOPE_SIGNAL = 0x2 LINUX_REBOOT_CMD_CAD_OFF = 0x0 LINUX_REBOOT_CMD_CAD_ON = 0x89abcdef LINUX_REBOOT_CMD_HALT = 0xcdef0123 @@ -1858,9 +1968,23 @@ const ( MADV_UNMERGEABLE = 0xd MADV_WILLNEED = 0x3 MADV_WIPEONFORK = 0x12 + MAP_DROPPABLE = 0x8 MAP_FILE = 0x0 MAP_FIXED = 0x10 MAP_FIXED_NOREPLACE = 0x100000 + MAP_HUGE_16GB = 0x88000000 + MAP_HUGE_16KB = 0x38000000 + MAP_HUGE_16MB = 0x60000000 + MAP_HUGE_1GB = 0x78000000 + MAP_HUGE_1MB = 0x50000000 + MAP_HUGE_256MB = 0x70000000 + MAP_HUGE_2GB = 0x7c000000 + MAP_HUGE_2MB = 0x54000000 + MAP_HUGE_32MB = 0x64000000 + MAP_HUGE_512KB = 0x4c000000 + MAP_HUGE_512MB = 0x74000000 + MAP_HUGE_64KB = 0x40000000 + MAP_HUGE_8MB = 0x5c000000 MAP_HUGE_MASK = 0x3f MAP_HUGE_SHIFT = 0x1a MAP_PRIVATE = 0x2 @@ -1908,6 +2032,8 @@ const ( MNT_EXPIRE = 0x4 MNT_FORCE = 0x1 MNT_ID_REQ_SIZE_VER0 = 0x18 + MNT_ID_REQ_SIZE_VER1 = 0x20 + MNT_NS_INFO_SIZE_VER0 = 0x10 MODULE_INIT_COMPRESSED_FILE = 0x4 MODULE_INIT_IGNORE_MODVERSIONS = 0x1 MODULE_INIT_IGNORE_VERMAGIC = 0x2 @@ -1943,6 +2069,7 @@ const ( MSG_PEEK = 0x2 MSG_PROXY = 0x10 MSG_RST = 0x1000 + MSG_SOCK_DEVMEM = 0x2000000 MSG_SYN = 0x400 MSG_TRUNC = 0x20 MSG_TRYHARD = 0x4 @@ -2059,6 +2186,7 @@ const ( NFC_ATR_REQ_MAXSIZE = 0x40 NFC_ATR_RES_GB_MAXSIZE = 0x2f NFC_ATR_RES_MAXSIZE = 0x40 + NFC_ATS_MAXSIZE = 0x14 NFC_COMM_ACTIVE = 0x0 NFC_COMM_PASSIVE = 0x1 NFC_DEVICE_NAME_MAXSIZE = 0x8 @@ -2139,6 +2267,7 @@ const ( NFNL_SUBSYS_QUEUE = 0x3 NFNL_SUBSYS_ULOG = 0x4 NFS_SUPER_MAGIC = 0x6969 + NFT_BITWISE_BOOL = 0x0 NFT_CHAIN_FLAGS = 0x7 NFT_CHAIN_MAXNAMELEN = 0x100 NFT_CT_MAX = 0x17 @@ -2173,7 +2302,7 @@ const ( NFT_REG_SIZE = 0x10 NFT_REJECT_ICMPX_MAX = 0x3 NFT_RT_MAX = 0x4 - NFT_SECMARK_CTX_MAXLEN = 0x100 + NFT_SECMARK_CTX_MAXLEN = 0x1000 NFT_SET_MAXNAMELEN = 0x100 NFT_SOCKET_MAX = 0x3 NFT_TABLE_F_MASK = 0x7 @@ -2225,7 +2354,167 @@ const ( NLM_F_REPLACE = 0x100 NLM_F_REQUEST = 0x1 NLM_F_ROOT = 0x100 + NN_386_IOPERM = "LINUX" + NN_386_TLS = "LINUX" + NN_ARC_V2 = "LINUX" + NN_ARM_FPMR = "LINUX" + NN_ARM_GCS = "LINUX" + NN_ARM_HW_BREAK = "LINUX" + NN_ARM_HW_WATCH = "LINUX" + NN_ARM_PACA_KEYS = "LINUX" + NN_ARM_PACG_KEYS = "LINUX" + NN_ARM_PAC_ENABLED_KEYS = "LINUX" + NN_ARM_PAC_MASK = "LINUX" + NN_ARM_POE = "LINUX" + NN_ARM_SSVE = "LINUX" + NN_ARM_SVE = "LINUX" + NN_ARM_SYSTEM_CALL = "LINUX" + NN_ARM_TAGGED_ADDR_CTRL = "LINUX" + NN_ARM_TLS = "LINUX" + NN_ARM_VFP = "LINUX" + NN_ARM_ZA = "LINUX" + NN_ARM_ZT = "LINUX" + NN_AUXV = "CORE" + NN_FILE = "CORE" + NN_GNU_PROPERTY_TYPE_0 = "GNU" + NN_LOONGARCH_CPUCFG = "LINUX" + NN_LOONGARCH_CSR = "LINUX" + NN_LOONGARCH_HW_BREAK = "LINUX" + NN_LOONGARCH_HW_WATCH = "LINUX" + NN_LOONGARCH_LASX = "LINUX" + NN_LOONGARCH_LBT = "LINUX" + NN_LOONGARCH_LSX = "LINUX" + NN_MIPS_DSP = "LINUX" + NN_MIPS_FP_MODE = "LINUX" + NN_MIPS_MSA = "LINUX" + NN_PPC_DEXCR = "LINUX" + NN_PPC_DSCR = "LINUX" + NN_PPC_EBB = "LINUX" + NN_PPC_HASHKEYR = "LINUX" + NN_PPC_PKEY = "LINUX" + NN_PPC_PMU = "LINUX" + NN_PPC_PPR = "LINUX" + NN_PPC_SPE = "LINUX" + NN_PPC_TAR = "LINUX" + NN_PPC_TM_CDSCR = "LINUX" + NN_PPC_TM_CFPR = "LINUX" + NN_PPC_TM_CGPR = "LINUX" + NN_PPC_TM_CPPR = "LINUX" + NN_PPC_TM_CTAR = "LINUX" + NN_PPC_TM_CVMX = "LINUX" + NN_PPC_TM_CVSX = "LINUX" + NN_PPC_TM_SPR = "LINUX" + NN_PPC_VMX = "LINUX" + NN_PPC_VSX = "LINUX" + NN_PRFPREG = "CORE" + NN_PRPSINFO = "CORE" + NN_PRSTATUS = "CORE" + NN_PRXFPREG = "LINUX" + NN_RISCV_CSR = "LINUX" + NN_RISCV_TAGGED_ADDR_CTRL = "LINUX" + NN_RISCV_VECTOR = "LINUX" + NN_S390_CTRS = "LINUX" + NN_S390_GS_BC = "LINUX" + NN_S390_GS_CB = "LINUX" + NN_S390_HIGH_GPRS = "LINUX" + NN_S390_LAST_BREAK = "LINUX" + NN_S390_PREFIX = "LINUX" + NN_S390_PV_CPU_DATA = "LINUX" + NN_S390_RI_CB = "LINUX" + NN_S390_SYSTEM_CALL = "LINUX" + NN_S390_TDB = "LINUX" + NN_S390_TIMER = "LINUX" + NN_S390_TODCMP = "LINUX" + NN_S390_TODPREG = "LINUX" + NN_S390_VXRS_HIGH = "LINUX" + NN_S390_VXRS_LOW = "LINUX" + NN_SIGINFO = "CORE" + NN_TASKSTRUCT = "CORE" + NN_VMCOREDD = "LINUX" + NN_X86_SHSTK = "LINUX" + NN_X86_XSAVE_LAYOUT = "LINUX" + NN_X86_XSTATE = "LINUX" NSFS_MAGIC = 0x6e736673 + NT_386_IOPERM = 0x201 + NT_386_TLS = 0x200 + NT_ARC_V2 = 0x600 + NT_ARM_FPMR = 0x40e + NT_ARM_GCS = 0x410 + NT_ARM_HW_BREAK = 0x402 + NT_ARM_HW_WATCH = 0x403 + NT_ARM_PACA_KEYS = 0x407 + NT_ARM_PACG_KEYS = 0x408 + NT_ARM_PAC_ENABLED_KEYS = 0x40a + NT_ARM_PAC_MASK = 0x406 + NT_ARM_POE = 0x40f + NT_ARM_SSVE = 0x40b + NT_ARM_SVE = 0x405 + NT_ARM_SYSTEM_CALL = 0x404 + NT_ARM_TAGGED_ADDR_CTRL = 0x409 + NT_ARM_TLS = 0x401 + NT_ARM_VFP = 0x400 + NT_ARM_ZA = 0x40c + NT_ARM_ZT = 0x40d + NT_AUXV = 0x6 + NT_FILE = 0x46494c45 + NT_GNU_PROPERTY_TYPE_0 = 0x5 + NT_LOONGARCH_CPUCFG = 0xa00 + NT_LOONGARCH_CSR = 0xa01 + NT_LOONGARCH_HW_BREAK = 0xa05 + NT_LOONGARCH_HW_WATCH = 0xa06 + NT_LOONGARCH_LASX = 0xa03 + NT_LOONGARCH_LBT = 0xa04 + NT_LOONGARCH_LSX = 0xa02 + NT_MIPS_DSP = 0x800 + NT_MIPS_FP_MODE = 0x801 + NT_MIPS_MSA = 0x802 + NT_PPC_DEXCR = 0x111 + NT_PPC_DSCR = 0x105 + NT_PPC_EBB = 0x106 + NT_PPC_HASHKEYR = 0x112 + NT_PPC_PKEY = 0x110 + NT_PPC_PMU = 0x107 + NT_PPC_PPR = 0x104 + NT_PPC_SPE = 0x101 + NT_PPC_TAR = 0x103 + NT_PPC_TM_CDSCR = 0x10f + NT_PPC_TM_CFPR = 0x109 + NT_PPC_TM_CGPR = 0x108 + NT_PPC_TM_CPPR = 0x10e + NT_PPC_TM_CTAR = 0x10d + NT_PPC_TM_CVMX = 0x10a + NT_PPC_TM_CVSX = 0x10b + NT_PPC_TM_SPR = 0x10c + NT_PPC_VMX = 0x100 + NT_PPC_VSX = 0x102 + NT_PRFPREG = 0x2 + NT_PRPSINFO = 0x3 + NT_PRSTATUS = 0x1 + NT_PRXFPREG = 0x46e62b7f + NT_RISCV_CSR = 0x900 + NT_RISCV_TAGGED_ADDR_CTRL = 0x902 + NT_RISCV_VECTOR = 0x901 + NT_S390_CTRS = 0x304 + NT_S390_GS_BC = 0x30c + NT_S390_GS_CB = 0x30b + NT_S390_HIGH_GPRS = 0x300 + NT_S390_LAST_BREAK = 0x306 + NT_S390_PREFIX = 0x305 + NT_S390_PV_CPU_DATA = 0x30e + NT_S390_RI_CB = 0x30d + NT_S390_SYSTEM_CALL = 0x307 + NT_S390_TDB = 0x308 + NT_S390_TIMER = 0x301 + NT_S390_TODCMP = 0x302 + NT_S390_TODPREG = 0x303 + NT_S390_VXRS_HIGH = 0x30a + NT_S390_VXRS_LOW = 0x309 + NT_SIGINFO = 0x53494749 + NT_TASKSTRUCT = 0x4 + NT_VMCOREDD = 0x700 + NT_X86_SHSTK = 0x204 + NT_X86_XSAVE_LAYOUT = 0x205 + NT_X86_XSTATE = 0x202 OCFS2_SUPER_MAGIC = 0x7461636f OCRNL = 0x8 OFDEL = 0x80 @@ -2342,9 +2631,11 @@ const ( PERF_MEM_LVLNUM_IO = 0xa PERF_MEM_LVLNUM_L1 = 0x1 PERF_MEM_LVLNUM_L2 = 0x2 + PERF_MEM_LVLNUM_L2_MHB = 0x5 PERF_MEM_LVLNUM_L3 = 0x3 PERF_MEM_LVLNUM_L4 = 0x4 PERF_MEM_LVLNUM_LFB = 0xc + PERF_MEM_LVLNUM_MSC = 0x6 PERF_MEM_LVLNUM_NA = 0xf PERF_MEM_LVLNUM_PMEM = 0xe PERF_MEM_LVLNUM_RAM = 0xd @@ -2410,6 +2701,59 @@ const ( PERF_RECORD_MISC_USER = 0x2 PERF_SAMPLE_BRANCH_PLM_ALL = 0x7 PERF_SAMPLE_WEIGHT_TYPE = 0x1004000 + PF_ALG = 0x26 + PF_APPLETALK = 0x5 + PF_ASH = 0x12 + PF_ATMPVC = 0x8 + PF_ATMSVC = 0x14 + PF_AX25 = 0x3 + PF_BLUETOOTH = 0x1f + PF_BRIDGE = 0x7 + PF_CAIF = 0x25 + PF_CAN = 0x1d + PF_DECnet = 0xc + PF_ECONET = 0x13 + PF_FILE = 0x1 + PF_IB = 0x1b + PF_IEEE802154 = 0x24 + PF_INET = 0x2 + PF_INET6 = 0xa + PF_IPX = 0x4 + PF_IRDA = 0x17 + PF_ISDN = 0x22 + PF_IUCV = 0x20 + PF_KCM = 0x29 + PF_KEY = 0xf + PF_LLC = 0x1a + PF_LOCAL = 0x1 + PF_MAX = 0x2e + PF_MCTP = 0x2d + PF_MPLS = 0x1c + PF_NETBEUI = 0xd + PF_NETLINK = 0x10 + PF_NETROM = 0x6 + PF_NFC = 0x27 + PF_PACKET = 0x11 + PF_PHONET = 0x23 + PF_PPPOX = 0x18 + PF_QIPCRTR = 0x2a + PF_R = 0x4 + PF_RDS = 0x15 + PF_ROSE = 0xb + PF_ROUTE = 0x10 + PF_RXRPC = 0x21 + PF_SECURITY = 0xe + PF_SMC = 0x2b + PF_SNA = 0x16 + PF_TIPC = 0x1e + PF_UNIX = 0x1 + PF_UNSPEC = 0x0 + PF_VSOCK = 0x28 + PF_W = 0x2 + PF_WANPIPE = 0x19 + PF_X = 0x1 + PF_X25 = 0x9 + PF_XDP = 0x2c PID_FS_MAGIC = 0x50494446 PIPEFS_MAGIC = 0x50495045 PPPIOCGNPMODE = 0xc008744c @@ -2417,6 +2761,7 @@ const ( PRIO_PGRP = 0x1 PRIO_PROCESS = 0x0 PRIO_USER = 0x2 + PROCFS_IOCTL_MAGIC = 'f' PROC_SUPER_MAGIC = 0x9fa0 PROT_EXEC = 0x4 PROT_GROWSDOWN = 0x1000000 @@ -2448,6 +2793,10 @@ const ( PR_FP_EXC_UND = 0x40000 PR_FP_MODE_FR = 0x1 PR_FP_MODE_FRE = 0x2 + PR_FUTEX_HASH = 0x4e + PR_FUTEX_HASH_GET_IMMUTABLE = 0x3 + PR_FUTEX_HASH_GET_SLOTS = 0x2 + PR_FUTEX_HASH_SET_SLOTS = 0x1 PR_GET_AUXV = 0x41555856 PR_GET_CHILD_SUBREAPER = 0x25 PR_GET_DUMPABLE = 0x3 @@ -2464,6 +2813,7 @@ const ( PR_GET_PDEATHSIG = 0x2 PR_GET_SECCOMP = 0x15 PR_GET_SECUREBITS = 0x1b + PR_GET_SHADOW_STACK_STATUS = 0x4a PR_GET_SPECULATION_CTRL = 0x34 PR_GET_TAGGED_ADDR_CTRL = 0x38 PR_GET_THP_DISABLE = 0x2a @@ -2472,6 +2822,7 @@ const ( PR_GET_TIMING = 0xd PR_GET_TSC = 0x19 PR_GET_UNALIGN = 0x5 + PR_LOCK_SHADOW_STACK_STATUS = 0x4c PR_MCE_KILL = 0x21 PR_MCE_KILL_CLEAR = 0x0 PR_MCE_KILL_DEFAULT = 0x2 @@ -2498,6 +2849,25 @@ const ( PR_PAC_GET_ENABLED_KEYS = 0x3d PR_PAC_RESET_KEYS = 0x36 PR_PAC_SET_ENABLED_KEYS = 0x3c + PR_PMLEN_MASK = 0x7f000000 + PR_PMLEN_SHIFT = 0x18 + PR_PPC_DEXCR_CTRL_CLEAR = 0x4 + PR_PPC_DEXCR_CTRL_CLEAR_ONEXEC = 0x10 + PR_PPC_DEXCR_CTRL_EDITABLE = 0x1 + PR_PPC_DEXCR_CTRL_MASK = 0x1f + PR_PPC_DEXCR_CTRL_SET = 0x2 + PR_PPC_DEXCR_CTRL_SET_ONEXEC = 0x8 + PR_PPC_DEXCR_IBRTPD = 0x1 + PR_PPC_DEXCR_NPHIE = 0x3 + PR_PPC_DEXCR_SBHE = 0x0 + PR_PPC_DEXCR_SRAPD = 0x2 + PR_PPC_GET_DEXCR = 0x48 + PR_PPC_SET_DEXCR = 0x49 + PR_RISCV_CTX_SW_FENCEI_OFF = 0x1 + PR_RISCV_CTX_SW_FENCEI_ON = 0x0 + PR_RISCV_SCOPE_PER_PROCESS = 0x0 + PR_RISCV_SCOPE_PER_THREAD = 0x1 + PR_RISCV_SET_ICACHE_FLUSH_CTX = 0x47 PR_RISCV_V_GET_CONTROL = 0x46 PR_RISCV_V_SET_CONTROL = 0x45 PR_RISCV_V_VSTATE_CTRL_CUR_MASK = 0x3 @@ -2548,6 +2918,7 @@ const ( PR_SET_PTRACER = 0x59616d61 PR_SET_SECCOMP = 0x16 PR_SET_SECUREBITS = 0x1c + PR_SET_SHADOW_STACK_STATUS = 0x4b PR_SET_SPECULATION_CTRL = 0x35 PR_SET_SYSCALL_USER_DISPATCH = 0x3b PR_SET_TAGGED_ADDR_CTRL = 0x37 @@ -2558,6 +2929,9 @@ const ( PR_SET_UNALIGN = 0x6 PR_SET_VMA = 0x53564d41 PR_SET_VMA_ANON_NAME = 0x0 + PR_SHADOW_STACK_ENABLE = 0x1 + PR_SHADOW_STACK_PUSH = 0x4 + PR_SHADOW_STACK_WRITE = 0x2 PR_SME_GET_VL = 0x40 PR_SME_SET_VL = 0x3f PR_SME_SET_VL_ONEXEC = 0x40000 @@ -2582,6 +2956,10 @@ const ( PR_TAGGED_ADDR_ENABLE = 0x1 PR_TASK_PERF_EVENTS_DISABLE = 0x1f PR_TASK_PERF_EVENTS_ENABLE = 0x20 + PR_TIMER_CREATE_RESTORE_IDS = 0x4d + PR_TIMER_CREATE_RESTORE_IDS_GET = 0x2 + PR_TIMER_CREATE_RESTORE_IDS_OFF = 0x0 + PR_TIMER_CREATE_RESTORE_IDS_ON = 0x1 PR_TIMING_STATISTICAL = 0x0 PR_TIMING_TIMESTAMP = 0x1 PR_TSC_ENABLE = 0x1 @@ -2589,6 +2967,28 @@ const ( PR_UNALIGN_NOPRINT = 0x1 PR_UNALIGN_SIGBUS = 0x2 PSTOREFS_MAGIC = 0x6165676c + PTP_CLK_MAGIC = '=' + PTP_ENABLE_FEATURE = 0x1 + PTP_EXTTS_EDGES = 0x6 + PTP_EXTTS_EVENT_VALID = 0x1 + PTP_EXTTS_V1_VALID_FLAGS = 0x7 + PTP_EXTTS_VALID_FLAGS = 0x1f + PTP_EXT_OFFSET = 0x10 + PTP_FALLING_EDGE = 0x4 + PTP_MAX_SAMPLES = 0x19 + PTP_PEROUT_DUTY_CYCLE = 0x2 + PTP_PEROUT_ONE_SHOT = 0x1 + PTP_PEROUT_PHASE = 0x4 + PTP_PEROUT_V1_VALID_FLAGS = 0x0 + PTP_PEROUT_VALID_FLAGS = 0x7 + PTP_PIN_GETFUNC = 0xc0603d06 + PTP_PIN_GETFUNC2 = 0xc0603d0f + PTP_RISING_EDGE = 0x2 + PTP_STRICT_FLAGS = 0x8 + PTP_SYS_OFFSET_EXTENDED = 0xc4c03d09 + PTP_SYS_OFFSET_EXTENDED2 = 0xc4c03d12 + PTP_SYS_OFFSET_PRECISE = 0xc0403d08 + PTP_SYS_OFFSET_PRECISE2 = 0xc0403d11 PTRACE_ATTACH = 0x10 PTRACE_CONT = 0x7 PTRACE_DETACH = 0x11 @@ -2640,6 +3040,7 @@ const ( PTRACE_SETREGSET = 0x4205 PTRACE_SETSIGINFO = 0x4203 PTRACE_SETSIGMASK = 0x420b + PTRACE_SET_SYSCALL_INFO = 0x4212 PTRACE_SET_SYSCALL_USER_DISPATCH_CONFIG = 0x4210 PTRACE_SINGLESTEP = 0x9 PTRACE_SYSCALL = 0x18 @@ -2648,6 +3049,23 @@ const ( PTRACE_SYSCALL_INFO_NONE = 0x0 PTRACE_SYSCALL_INFO_SECCOMP = 0x3 PTRACE_TRACEME = 0x0 + PT_AARCH64_MEMTAG_MTE = 0x70000002 + PT_DYNAMIC = 0x2 + PT_GNU_EH_FRAME = 0x6474e550 + PT_GNU_PROPERTY = 0x6474e553 + PT_GNU_RELRO = 0x6474e552 + PT_GNU_STACK = 0x6474e551 + PT_HIOS = 0x6fffffff + PT_HIPROC = 0x7fffffff + PT_INTERP = 0x3 + PT_LOAD = 0x1 + PT_LOOS = 0x60000000 + PT_LOPROC = 0x70000000 + PT_NOTE = 0x4 + PT_NULL = 0x0 + PT_PHDR = 0x6 + PT_SHLIB = 0x5 + PT_TLS = 0x7 P_ALL = 0x0 P_PGID = 0x2 P_PID = 0x1 @@ -2703,7 +3121,7 @@ const ( RTAX_UNSPEC = 0x0 RTAX_WINDOW = 0x3 RTA_ALIGNTO = 0x4 - RTA_MAX = 0x1e + RTA_MAX = 0x1f RTCF_DIRECTSRC = 0x4000000 RTCF_DOREDIRECT = 0x1000000 RTCF_LOG = 0x2000000 @@ -2780,10 +3198,12 @@ const ( RTM_DELACTION = 0x31 RTM_DELADDR = 0x15 RTM_DELADDRLABEL = 0x49 + RTM_DELANYCAST = 0x3d RTM_DELCHAIN = 0x65 RTM_DELLINK = 0x11 RTM_DELLINKPROP = 0x6d RTM_DELMDB = 0x55 + RTM_DELMULTICAST = 0x39 RTM_DELNEIGH = 0x1d RTM_DELNETCONF = 0x51 RTM_DELNEXTHOP = 0x69 @@ -2833,11 +3253,13 @@ const ( RTM_NEWACTION = 0x30 RTM_NEWADDR = 0x14 RTM_NEWADDRLABEL = 0x48 + RTM_NEWANYCAST = 0x3c RTM_NEWCACHEREPORT = 0x60 RTM_NEWCHAIN = 0x64 RTM_NEWLINK = 0x10 RTM_NEWLINKPROP = 0x6c RTM_NEWMDB = 0x54 + RTM_NEWMULTICAST = 0x38 RTM_NEWNDUSEROPT = 0x44 RTM_NEWNEIGH = 0x1c RTM_NEWNEIGHTBL = 0x40 @@ -2845,7 +3267,6 @@ const ( RTM_NEWNEXTHOP = 0x68 RTM_NEWNEXTHOPBUCKET = 0x74 RTM_NEWNSID = 0x58 - RTM_NEWNVLAN = 0x70 RTM_NEWPREFIX = 0x34 RTM_NEWQDISC = 0x24 RTM_NEWROUTE = 0x18 @@ -2854,6 +3275,7 @@ const ( RTM_NEWTCLASS = 0x28 RTM_NEWTFILTER = 0x2c RTM_NEWTUNNEL = 0x78 + RTM_NEWVLAN = 0x70 RTM_NR_FAMILIES = 0x1b RTM_NR_MSGTYPES = 0x6c RTM_SETDCB = 0x4f @@ -2886,6 +3308,7 @@ const ( RTPROT_NTK = 0xf RTPROT_OPENR = 0x63 RTPROT_OSPF = 0xbc + RTPROT_OVN = 0x54 RTPROT_RA = 0x9 RTPROT_REDIRECT = 0x1 RTPROT_RIP = 0xbd @@ -2902,15 +3325,18 @@ const ( RUSAGE_SELF = 0x0 RUSAGE_THREAD = 0x1 RWF_APPEND = 0x10 + RWF_ATOMIC = 0x40 + RWF_DONTCACHE = 0x80 RWF_DSYNC = 0x2 RWF_HIPRI = 0x1 RWF_NOAPPEND = 0x20 RWF_NOWAIT = 0x8 - RWF_SUPPORTED = 0x3f + RWF_SUPPORTED = 0xff RWF_SYNC = 0x4 RWF_WRITE_LIFE_NOT_SET = 0x0 SCHED_BATCH = 0x3 SCHED_DEADLINE = 0x6 + SCHED_EXT = 0x7 SCHED_FIFO = 0x1 SCHED_FLAG_ALL = 0x7f SCHED_FLAG_DL_OVERRUN = 0x4 @@ -2973,6 +3399,47 @@ const ( SEEK_MAX = 0x4 SEEK_SET = 0x0 SELINUX_MAGIC = 0xf97cff8c + SHF_ALLOC = 0x2 + SHF_EXCLUDE = 0x8000000 + SHF_EXECINSTR = 0x4 + SHF_GROUP = 0x200 + SHF_INFO_LINK = 0x40 + SHF_LINK_ORDER = 0x80 + SHF_MASKOS = 0xff00000 + SHF_MASKPROC = 0xf0000000 + SHF_MERGE = 0x10 + SHF_ORDERED = 0x4000000 + SHF_OS_NONCONFORMING = 0x100 + SHF_RELA_LIVEPATCH = 0x100000 + SHF_RO_AFTER_INIT = 0x200000 + SHF_STRINGS = 0x20 + SHF_TLS = 0x400 + SHF_WRITE = 0x1 + SHN_ABS = 0xfff1 + SHN_COMMON = 0xfff2 + SHN_HIPROC = 0xff1f + SHN_HIRESERVE = 0xffff + SHN_LIVEPATCH = 0xff20 + SHN_LOPROC = 0xff00 + SHN_LORESERVE = 0xff00 + SHN_UNDEF = 0x0 + SHT_DYNAMIC = 0x6 + SHT_DYNSYM = 0xb + SHT_HASH = 0x5 + SHT_HIPROC = 0x7fffffff + SHT_HIUSER = 0xffffffff + SHT_LOPROC = 0x70000000 + SHT_LOUSER = 0x80000000 + SHT_NOBITS = 0x8 + SHT_NOTE = 0x7 + SHT_NULL = 0x0 + SHT_NUM = 0xc + SHT_PROGBITS = 0x1 + SHT_REL = 0x9 + SHT_RELA = 0x4 + SHT_SHLIB = 0xa + SHT_STRTAB = 0x3 + SHT_SYMTAB = 0x2 SHUT_RD = 0x0 SHUT_RDWR = 0x2 SHUT_WR = 0x1 @@ -3179,11 +3646,13 @@ const ( STATX_ATTR_MOUNT_ROOT = 0x2000 STATX_ATTR_NODUMP = 0x40 STATX_ATTR_VERITY = 0x100000 + STATX_ATTR_WRITE_ATOMIC = 0x400000 STATX_BASIC_STATS = 0x7ff STATX_BLOCKS = 0x400 STATX_BTIME = 0x800 STATX_CTIME = 0x80 STATX_DIOALIGN = 0x2000 + STATX_DIO_READ_ALIGN = 0x20000 STATX_GID = 0x10 STATX_INO = 0x100 STATX_MNT_ID = 0x1000 @@ -3192,9 +3661,21 @@ const ( STATX_MTIME = 0x40 STATX_NLINK = 0x4 STATX_SIZE = 0x200 + STATX_SUBVOL = 0x8000 STATX_TYPE = 0x1 STATX_UID = 0x8 + STATX_WRITE_ATOMIC = 0x10000 STATX__RESERVED = 0x80000000 + STB_GLOBAL = 0x1 + STB_LOCAL = 0x0 + STB_WEAK = 0x2 + STT_COMMON = 0x5 + STT_FILE = 0x4 + STT_FUNC = 0x2 + STT_NOTYPE = 0x0 + STT_OBJECT = 0x1 + STT_SECTION = 0x3 + STT_TLS = 0x6 SYNC_FILE_RANGE_WAIT_AFTER = 0x4 SYNC_FILE_RANGE_WAIT_BEFORE = 0x1 SYNC_FILE_RANGE_WRITE = 0x2 @@ -3233,7 +3714,7 @@ const ( TASKSTATS_GENL_NAME = "TASKSTATS" TASKSTATS_GENL_VERSION = 0x1 TASKSTATS_TYPE_MAX = 0x6 - TASKSTATS_VERSION = 0xe + TASKSTATS_VERSION = 0x10 TCIFLUSH = 0x0 TCIOFF = 0x2 TCIOFLUSH = 0x2 @@ -3303,8 +3784,6 @@ const ( TCP_TX_DELAY = 0x25 TCP_ULP = 0x1f TCP_USER_TIMEOUT = 0x12 - TCP_V4_FLOW = 0x1 - TCP_V6_FLOW = 0x5 TCP_WINDOW_CLAMP = 0xa TCP_ZEROCOPY_RECEIVE = 0x23 TFD_TIMER_ABSTIME = 0x1 @@ -3414,6 +3893,7 @@ const ( TP_STATUS_WRONG_FORMAT = 0x4 TRACEFS_MAGIC = 0x74726163 TS_COMM_LEN = 0x20 + UBI_IOCECNFO = 0xc01c6f06 UDF_SUPER_MAGIC = 0x15013346 UDP_CORK = 0x1 UDP_ENCAP = 0x64 @@ -3426,14 +3906,14 @@ const ( UDP_NO_CHECK6_RX = 0x66 UDP_NO_CHECK6_TX = 0x65 UDP_SEGMENT = 0x67 - UDP_V4_FLOW = 0x2 - UDP_V6_FLOW = 0x6 UMOUNT_NOFOLLOW = 0x8 USBDEVICE_SUPER_MAGIC = 0x9fa2 UTIME_NOW = 0x3fffffff UTIME_OMIT = 0x3ffffffe V9FS_MAGIC = 0x1021997 VERASE = 0x2 + VER_FLG_BASE = 0x1 + VER_FLG_WEAK = 0x2 VINTR = 0x0 VKILL = 0x3 VLNEXT = 0xf @@ -3470,7 +3950,7 @@ const ( WDIOS_TEMPPANIC = 0x4 WDIOS_UNKNOWN = -0x1 WEXITED = 0x4 - WGALLOWEDIP_A_MAX = 0x3 + WGALLOWEDIP_A_MAX = 0x4 WGDEVICE_A_MAX = 0x8 WGPEER_A_MAX = 0xa WG_CMD_MAX = 0x1 @@ -3584,6 +4064,7 @@ const ( XDP_SHARED_UMEM = 0x1 XDP_STATISTICS = 0x7 XDP_TXMD_FLAGS_CHECKSUM = 0x2 + XDP_TXMD_FLAGS_LAUNCH_TIME = 0x4 XDP_TXMD_FLAGS_TIMESTAMP = 0x1 XDP_TX_METADATA = 0x2 XDP_TX_RING = 0x3 @@ -3592,6 +4073,7 @@ const ( XDP_UMEM_PGOFF_COMPLETION_RING = 0x180000000 XDP_UMEM_PGOFF_FILL_RING = 0x100000000 XDP_UMEM_REG = 0x4 + XDP_UMEM_TX_METADATA_LEN = 0x4 XDP_UMEM_TX_SW_CSUM = 0x2 XDP_UMEM_UNALIGNED_CHUNK_FLAG = 0x1 XDP_USE_NEED_WAKEUP = 0x8 diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_386.go b/vendor/golang.org/x/sys/unix/zerrors_linux_386.go index e4bc0bd57c..97a61fc5b8 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_386.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_386.go @@ -68,6 +68,7 @@ const ( CS8 = 0x30 CSIZE = 0x30 CSTOPB = 0x40 + DM_MPATH_PROBE_PATHS = 0xfd12 ECCGETLAYOUT = 0x81484d11 ECCGETSTATS = 0x80104d12 ECHOCTL = 0x200 @@ -78,6 +79,8 @@ const ( ECHOPRT = 0x400 EFD_CLOEXEC = 0x80000 EFD_NONBLOCK = 0x800 + EPIOCGPARAMS = 0x80088a02 + EPIOCSPARAMS = 0x40088a01 EPOLL_CLOEXEC = 0x80000 EXTPROC = 0x10000 FF1 = 0x8000 @@ -107,12 +110,17 @@ const ( HIDIOCGRAWINFO = 0x80084803 HIDIOCGRDESC = 0x90044802 HIDIOCGRDESCSIZE = 0x80044801 + HIDIOCREVOKE = 0x4004480d HUPCL = 0x400 ICANON = 0x2 IEXTEN = 0x8000 IN_CLOEXEC = 0x80000 IN_NONBLOCK = 0x800 + IOCTL_MEI_NOTIFY_GET = 0x80044803 + IOCTL_MEI_NOTIFY_SET = 0x40044802 IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x7b9 + IPV6_FLOWINFO_MASK = 0xffffff0f + IPV6_FLOWLABEL_MASK = 0xffff0f00 ISIG = 0x1 IUCLC = 0x200 IXOFF = 0x1000 @@ -151,9 +159,14 @@ const ( NFDBITS = 0x20 NLDLY = 0x100 NOFLSH = 0x80 + NS_GET_MNTNS_ID = 0x8008b705 NS_GET_NSTYPE = 0xb703 NS_GET_OWNER_UID = 0xb704 NS_GET_PARENT = 0xb702 + NS_GET_PID_FROM_PIDNS = 0x8004b706 + NS_GET_PID_IN_PIDNS = 0x8004b708 + NS_GET_TGID_FROM_PIDNS = 0x8004b707 + NS_GET_TGID_IN_PIDNS = 0x8004b709 NS_GET_USERNS = 0xb701 OLCUC = 0x2 ONLCR = 0x4 @@ -230,6 +243,20 @@ const ( PPPIOCUNBRIDGECHAN = 0x7434 PPPIOCXFERUNIT = 0x744e PR_SET_PTRACER_ANY = 0xffffffff + PTP_CLOCK_GETCAPS = 0x80503d01 + PTP_CLOCK_GETCAPS2 = 0x80503d0a + PTP_ENABLE_PPS = 0x40043d04 + PTP_ENABLE_PPS2 = 0x40043d0d + PTP_EXTTS_REQUEST = 0x40103d02 + PTP_EXTTS_REQUEST2 = 0x40103d0b + PTP_MASK_CLEAR_ALL = 0x3d13 + PTP_MASK_EN_SINGLE = 0x40043d14 + PTP_PEROUT_REQUEST = 0x40383d03 + PTP_PEROUT_REQUEST2 = 0x40383d0c + PTP_PIN_SETFUNC = 0x40603d07 + PTP_PIN_SETFUNC2 = 0x40603d10 + PTP_SYS_OFFSET = 0x43403d05 + PTP_SYS_OFFSET2 = 0x43403d0e PTRACE_GETFPREGS = 0xe PTRACE_GETFPXREGS = 0x12 PTRACE_GET_THREAD_AREA = 0x19 @@ -276,10 +303,13 @@ const ( RTC_WIE_ON = 0x700f RTC_WKALM_RD = 0x80287010 RTC_WKALM_SET = 0x4028700f + SCM_DEVMEM_DMABUF = 0x4f + SCM_DEVMEM_LINEAR = 0x4e SCM_TIMESTAMPING = 0x25 SCM_TIMESTAMPING_OPT_STATS = 0x36 SCM_TIMESTAMPING_PKTINFO = 0x3a SCM_TIMESTAMPNS = 0x23 + SCM_TS_OPT_ID = 0x51 SCM_TXTIME = 0x3d SCM_WIFI_STATUS = 0x29 SECCOMP_IOCTL_NOTIF_ADDFD = 0x40182103 @@ -314,6 +344,9 @@ const ( SO_CNX_ADVICE = 0x35 SO_COOKIE = 0x39 SO_DETACH_REUSEPORT_BPF = 0x44 + SO_DEVMEM_DMABUF = 0x4f + SO_DEVMEM_DONTNEED = 0x50 + SO_DEVMEM_LINEAR = 0x4e SO_DOMAIN = 0x27 SO_DONTROUTE = 0x5 SO_ERROR = 0x4 @@ -330,6 +363,7 @@ const ( SO_OOBINLINE = 0xa SO_PASSCRED = 0x10 SO_PASSPIDFD = 0x4c + SO_PASSRIGHTS = 0x53 SO_PASSSEC = 0x22 SO_PEEK_OFF = 0x2a SO_PEERCRED = 0x11 @@ -342,6 +376,7 @@ const ( SO_RCVBUFFORCE = 0x21 SO_RCVLOWAT = 0x12 SO_RCVMARK = 0x4b + SO_RCVPRIORITY = 0x52 SO_RCVTIMEO = 0x14 SO_RCVTIMEO_NEW = 0x42 SO_RCVTIMEO_OLD = 0x14 diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go index 689317afdb..a0d6d498c4 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_amd64.go @@ -68,6 +68,7 @@ const ( CS8 = 0x30 CSIZE = 0x30 CSTOPB = 0x40 + DM_MPATH_PROBE_PATHS = 0xfd12 ECCGETLAYOUT = 0x81484d11 ECCGETSTATS = 0x80104d12 ECHOCTL = 0x200 @@ -78,6 +79,8 @@ const ( ECHOPRT = 0x400 EFD_CLOEXEC = 0x80000 EFD_NONBLOCK = 0x800 + EPIOCGPARAMS = 0x80088a02 + EPIOCSPARAMS = 0x40088a01 EPOLL_CLOEXEC = 0x80000 EXTPROC = 0x10000 FF1 = 0x8000 @@ -107,12 +110,17 @@ const ( HIDIOCGRAWINFO = 0x80084803 HIDIOCGRDESC = 0x90044802 HIDIOCGRDESCSIZE = 0x80044801 + HIDIOCREVOKE = 0x4004480d HUPCL = 0x400 ICANON = 0x2 IEXTEN = 0x8000 IN_CLOEXEC = 0x80000 IN_NONBLOCK = 0x800 + IOCTL_MEI_NOTIFY_GET = 0x80044803 + IOCTL_MEI_NOTIFY_SET = 0x40044802 IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x7b9 + IPV6_FLOWINFO_MASK = 0xffffff0f + IPV6_FLOWLABEL_MASK = 0xffff0f00 ISIG = 0x1 IUCLC = 0x200 IXOFF = 0x1000 @@ -151,9 +159,14 @@ const ( NFDBITS = 0x40 NLDLY = 0x100 NOFLSH = 0x80 + NS_GET_MNTNS_ID = 0x8008b705 NS_GET_NSTYPE = 0xb703 NS_GET_OWNER_UID = 0xb704 NS_GET_PARENT = 0xb702 + NS_GET_PID_FROM_PIDNS = 0x8004b706 + NS_GET_PID_IN_PIDNS = 0x8004b708 + NS_GET_TGID_FROM_PIDNS = 0x8004b707 + NS_GET_TGID_IN_PIDNS = 0x8004b709 NS_GET_USERNS = 0xb701 OLCUC = 0x2 ONLCR = 0x4 @@ -230,6 +243,20 @@ const ( PPPIOCUNBRIDGECHAN = 0x7434 PPPIOCXFERUNIT = 0x744e PR_SET_PTRACER_ANY = 0xffffffffffffffff + PTP_CLOCK_GETCAPS = 0x80503d01 + PTP_CLOCK_GETCAPS2 = 0x80503d0a + PTP_ENABLE_PPS = 0x40043d04 + PTP_ENABLE_PPS2 = 0x40043d0d + PTP_EXTTS_REQUEST = 0x40103d02 + PTP_EXTTS_REQUEST2 = 0x40103d0b + PTP_MASK_CLEAR_ALL = 0x3d13 + PTP_MASK_EN_SINGLE = 0x40043d14 + PTP_PEROUT_REQUEST = 0x40383d03 + PTP_PEROUT_REQUEST2 = 0x40383d0c + PTP_PIN_SETFUNC = 0x40603d07 + PTP_PIN_SETFUNC2 = 0x40603d10 + PTP_SYS_OFFSET = 0x43403d05 + PTP_SYS_OFFSET2 = 0x43403d0e PTRACE_ARCH_PRCTL = 0x1e PTRACE_GETFPREGS = 0xe PTRACE_GETFPXREGS = 0x12 @@ -277,10 +304,13 @@ const ( RTC_WIE_ON = 0x700f RTC_WKALM_RD = 0x80287010 RTC_WKALM_SET = 0x4028700f + SCM_DEVMEM_DMABUF = 0x4f + SCM_DEVMEM_LINEAR = 0x4e SCM_TIMESTAMPING = 0x25 SCM_TIMESTAMPING_OPT_STATS = 0x36 SCM_TIMESTAMPING_PKTINFO = 0x3a SCM_TIMESTAMPNS = 0x23 + SCM_TS_OPT_ID = 0x51 SCM_TXTIME = 0x3d SCM_WIFI_STATUS = 0x29 SECCOMP_IOCTL_NOTIF_ADDFD = 0x40182103 @@ -315,6 +345,9 @@ const ( SO_CNX_ADVICE = 0x35 SO_COOKIE = 0x39 SO_DETACH_REUSEPORT_BPF = 0x44 + SO_DEVMEM_DMABUF = 0x4f + SO_DEVMEM_DONTNEED = 0x50 + SO_DEVMEM_LINEAR = 0x4e SO_DOMAIN = 0x27 SO_DONTROUTE = 0x5 SO_ERROR = 0x4 @@ -331,6 +364,7 @@ const ( SO_OOBINLINE = 0xa SO_PASSCRED = 0x10 SO_PASSPIDFD = 0x4c + SO_PASSRIGHTS = 0x53 SO_PASSSEC = 0x22 SO_PEEK_OFF = 0x2a SO_PEERCRED = 0x11 @@ -343,6 +377,7 @@ const ( SO_RCVBUFFORCE = 0x21 SO_RCVLOWAT = 0x12 SO_RCVMARK = 0x4b + SO_RCVPRIORITY = 0x52 SO_RCVTIMEO = 0x14 SO_RCVTIMEO_NEW = 0x42 SO_RCVTIMEO_OLD = 0x14 diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go b/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go index 5cca668ac3..dd9c903f9a 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_arm.go @@ -68,6 +68,7 @@ const ( CS8 = 0x30 CSIZE = 0x30 CSTOPB = 0x40 + DM_MPATH_PROBE_PATHS = 0xfd12 ECCGETLAYOUT = 0x81484d11 ECCGETSTATS = 0x80104d12 ECHOCTL = 0x200 @@ -78,6 +79,8 @@ const ( ECHOPRT = 0x400 EFD_CLOEXEC = 0x80000 EFD_NONBLOCK = 0x800 + EPIOCGPARAMS = 0x80088a02 + EPIOCSPARAMS = 0x40088a01 EPOLL_CLOEXEC = 0x80000 EXTPROC = 0x10000 FF1 = 0x8000 @@ -106,12 +109,17 @@ const ( HIDIOCGRAWINFO = 0x80084803 HIDIOCGRDESC = 0x90044802 HIDIOCGRDESCSIZE = 0x80044801 + HIDIOCREVOKE = 0x4004480d HUPCL = 0x400 ICANON = 0x2 IEXTEN = 0x8000 IN_CLOEXEC = 0x80000 IN_NONBLOCK = 0x800 + IOCTL_MEI_NOTIFY_GET = 0x80044803 + IOCTL_MEI_NOTIFY_SET = 0x40044802 IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x7b9 + IPV6_FLOWINFO_MASK = 0xffffff0f + IPV6_FLOWLABEL_MASK = 0xffff0f00 ISIG = 0x1 IUCLC = 0x200 IXOFF = 0x1000 @@ -148,9 +156,14 @@ const ( NFDBITS = 0x20 NLDLY = 0x100 NOFLSH = 0x80 + NS_GET_MNTNS_ID = 0x8008b705 NS_GET_NSTYPE = 0xb703 NS_GET_OWNER_UID = 0xb704 NS_GET_PARENT = 0xb702 + NS_GET_PID_FROM_PIDNS = 0x8004b706 + NS_GET_PID_IN_PIDNS = 0x8004b708 + NS_GET_TGID_FROM_PIDNS = 0x8004b707 + NS_GET_TGID_IN_PIDNS = 0x8004b709 NS_GET_USERNS = 0xb701 OLCUC = 0x2 ONLCR = 0x4 @@ -227,6 +240,20 @@ const ( PPPIOCUNBRIDGECHAN = 0x7434 PPPIOCXFERUNIT = 0x744e PR_SET_PTRACER_ANY = 0xffffffff + PTP_CLOCK_GETCAPS = 0x80503d01 + PTP_CLOCK_GETCAPS2 = 0x80503d0a + PTP_ENABLE_PPS = 0x40043d04 + PTP_ENABLE_PPS2 = 0x40043d0d + PTP_EXTTS_REQUEST = 0x40103d02 + PTP_EXTTS_REQUEST2 = 0x40103d0b + PTP_MASK_CLEAR_ALL = 0x3d13 + PTP_MASK_EN_SINGLE = 0x40043d14 + PTP_PEROUT_REQUEST = 0x40383d03 + PTP_PEROUT_REQUEST2 = 0x40383d0c + PTP_PIN_SETFUNC = 0x40603d07 + PTP_PIN_SETFUNC2 = 0x40603d10 + PTP_SYS_OFFSET = 0x43403d05 + PTP_SYS_OFFSET2 = 0x43403d0e PTRACE_GETCRUNCHREGS = 0x19 PTRACE_GETFDPIC = 0x1f PTRACE_GETFDPIC_EXEC = 0x0 @@ -282,10 +309,13 @@ const ( RTC_WIE_ON = 0x700f RTC_WKALM_RD = 0x80287010 RTC_WKALM_SET = 0x4028700f + SCM_DEVMEM_DMABUF = 0x4f + SCM_DEVMEM_LINEAR = 0x4e SCM_TIMESTAMPING = 0x25 SCM_TIMESTAMPING_OPT_STATS = 0x36 SCM_TIMESTAMPING_PKTINFO = 0x3a SCM_TIMESTAMPNS = 0x23 + SCM_TS_OPT_ID = 0x51 SCM_TXTIME = 0x3d SCM_WIFI_STATUS = 0x29 SECCOMP_IOCTL_NOTIF_ADDFD = 0x40182103 @@ -320,6 +350,9 @@ const ( SO_CNX_ADVICE = 0x35 SO_COOKIE = 0x39 SO_DETACH_REUSEPORT_BPF = 0x44 + SO_DEVMEM_DMABUF = 0x4f + SO_DEVMEM_DONTNEED = 0x50 + SO_DEVMEM_LINEAR = 0x4e SO_DOMAIN = 0x27 SO_DONTROUTE = 0x5 SO_ERROR = 0x4 @@ -336,6 +369,7 @@ const ( SO_OOBINLINE = 0xa SO_PASSCRED = 0x10 SO_PASSPIDFD = 0x4c + SO_PASSRIGHTS = 0x53 SO_PASSSEC = 0x22 SO_PEEK_OFF = 0x2a SO_PEERCRED = 0x11 @@ -348,6 +382,7 @@ const ( SO_RCVBUFFORCE = 0x21 SO_RCVLOWAT = 0x12 SO_RCVMARK = 0x4b + SO_RCVPRIORITY = 0x52 SO_RCVTIMEO = 0x14 SO_RCVTIMEO_NEW = 0x42 SO_RCVTIMEO_OLD = 0x14 diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go index 14270508b0..384c61ca3a 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_arm64.go @@ -68,6 +68,7 @@ const ( CS8 = 0x30 CSIZE = 0x30 CSTOPB = 0x40 + DM_MPATH_PROBE_PATHS = 0xfd12 ECCGETLAYOUT = 0x81484d11 ECCGETSTATS = 0x80104d12 ECHOCTL = 0x200 @@ -78,6 +79,8 @@ const ( ECHOPRT = 0x400 EFD_CLOEXEC = 0x80000 EFD_NONBLOCK = 0x800 + EPIOCGPARAMS = 0x80088a02 + EPIOCSPARAMS = 0x40088a01 EPOLL_CLOEXEC = 0x80000 ESR_MAGIC = 0x45535201 EXTPROC = 0x10000 @@ -107,15 +110,21 @@ const ( F_SETOWN = 0x8 F_UNLCK = 0x2 F_WRLCK = 0x1 + GCS_MAGIC = 0x47435300 HIDIOCGRAWINFO = 0x80084803 HIDIOCGRDESC = 0x90044802 HIDIOCGRDESCSIZE = 0x80044801 + HIDIOCREVOKE = 0x4004480d HUPCL = 0x400 ICANON = 0x2 IEXTEN = 0x8000 IN_CLOEXEC = 0x80000 IN_NONBLOCK = 0x800 + IOCTL_MEI_NOTIFY_GET = 0x80044803 + IOCTL_MEI_NOTIFY_SET = 0x40044802 IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x7b9 + IPV6_FLOWINFO_MASK = 0xffffff0f + IPV6_FLOWLABEL_MASK = 0xffff0f00 ISIG = 0x1 IUCLC = 0x200 IXOFF = 0x1000 @@ -152,9 +161,14 @@ const ( NFDBITS = 0x40 NLDLY = 0x100 NOFLSH = 0x80 + NS_GET_MNTNS_ID = 0x8008b705 NS_GET_NSTYPE = 0xb703 NS_GET_OWNER_UID = 0xb704 NS_GET_PARENT = 0xb702 + NS_GET_PID_FROM_PIDNS = 0x8004b706 + NS_GET_PID_IN_PIDNS = 0x8004b708 + NS_GET_TGID_FROM_PIDNS = 0x8004b707 + NS_GET_TGID_IN_PIDNS = 0x8004b709 NS_GET_USERNS = 0xb701 OLCUC = 0x2 ONLCR = 0x4 @@ -198,6 +212,7 @@ const ( PERF_EVENT_IOC_SET_BPF = 0x40042408 PERF_EVENT_IOC_SET_FILTER = 0x40082406 PERF_EVENT_IOC_SET_OUTPUT = 0x2405 + POE_MAGIC = 0x504f4530 PPPIOCATTACH = 0x4004743d PPPIOCATTCHAN = 0x40047438 PPPIOCBRIDGECHAN = 0x40047435 @@ -233,6 +248,20 @@ const ( PROT_BTI = 0x10 PROT_MTE = 0x20 PR_SET_PTRACER_ANY = 0xffffffffffffffff + PTP_CLOCK_GETCAPS = 0x80503d01 + PTP_CLOCK_GETCAPS2 = 0x80503d0a + PTP_ENABLE_PPS = 0x40043d04 + PTP_ENABLE_PPS2 = 0x40043d0d + PTP_EXTTS_REQUEST = 0x40103d02 + PTP_EXTTS_REQUEST2 = 0x40103d0b + PTP_MASK_CLEAR_ALL = 0x3d13 + PTP_MASK_EN_SINGLE = 0x40043d14 + PTP_PEROUT_REQUEST = 0x40383d03 + PTP_PEROUT_REQUEST2 = 0x40383d0c + PTP_PIN_SETFUNC = 0x40603d07 + PTP_PIN_SETFUNC2 = 0x40603d10 + PTP_SYS_OFFSET = 0x43403d05 + PTP_SYS_OFFSET2 = 0x43403d0e PTRACE_PEEKMTETAGS = 0x21 PTRACE_POKEMTETAGS = 0x22 PTRACE_SYSEMU = 0x1f @@ -273,10 +302,13 @@ const ( RTC_WIE_ON = 0x700f RTC_WKALM_RD = 0x80287010 RTC_WKALM_SET = 0x4028700f + SCM_DEVMEM_DMABUF = 0x4f + SCM_DEVMEM_LINEAR = 0x4e SCM_TIMESTAMPING = 0x25 SCM_TIMESTAMPING_OPT_STATS = 0x36 SCM_TIMESTAMPING_PKTINFO = 0x3a SCM_TIMESTAMPNS = 0x23 + SCM_TS_OPT_ID = 0x51 SCM_TXTIME = 0x3d SCM_WIFI_STATUS = 0x29 SECCOMP_IOCTL_NOTIF_ADDFD = 0x40182103 @@ -311,6 +343,9 @@ const ( SO_CNX_ADVICE = 0x35 SO_COOKIE = 0x39 SO_DETACH_REUSEPORT_BPF = 0x44 + SO_DEVMEM_DMABUF = 0x4f + SO_DEVMEM_DONTNEED = 0x50 + SO_DEVMEM_LINEAR = 0x4e SO_DOMAIN = 0x27 SO_DONTROUTE = 0x5 SO_ERROR = 0x4 @@ -327,6 +362,7 @@ const ( SO_OOBINLINE = 0xa SO_PASSCRED = 0x10 SO_PASSPIDFD = 0x4c + SO_PASSRIGHTS = 0x53 SO_PASSSEC = 0x22 SO_PEEK_OFF = 0x2a SO_PEERCRED = 0x11 @@ -339,6 +375,7 @@ const ( SO_RCVBUFFORCE = 0x21 SO_RCVLOWAT = 0x12 SO_RCVMARK = 0x4b + SO_RCVPRIORITY = 0x52 SO_RCVTIMEO = 0x14 SO_RCVTIMEO_NEW = 0x42 SO_RCVTIMEO_OLD = 0x14 diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_loong64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_loong64.go index 28e39afdcb..6384c9831f 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_loong64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_loong64.go @@ -68,6 +68,7 @@ const ( CS8 = 0x30 CSIZE = 0x30 CSTOPB = 0x40 + DM_MPATH_PROBE_PATHS = 0xfd12 ECCGETLAYOUT = 0x81484d11 ECCGETSTATS = 0x80104d12 ECHOCTL = 0x200 @@ -78,6 +79,8 @@ const ( ECHOPRT = 0x400 EFD_CLOEXEC = 0x80000 EFD_NONBLOCK = 0x800 + EPIOCGPARAMS = 0x80088a02 + EPIOCSPARAMS = 0x40088a01 EPOLL_CLOEXEC = 0x80000 EXTPROC = 0x10000 FF1 = 0x8000 @@ -107,12 +110,17 @@ const ( HIDIOCGRAWINFO = 0x80084803 HIDIOCGRDESC = 0x90044802 HIDIOCGRDESCSIZE = 0x80044801 + HIDIOCREVOKE = 0x4004480d HUPCL = 0x400 ICANON = 0x2 IEXTEN = 0x8000 IN_CLOEXEC = 0x80000 IN_NONBLOCK = 0x800 + IOCTL_MEI_NOTIFY_GET = 0x80044803 + IOCTL_MEI_NOTIFY_SET = 0x40044802 IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x7b9 + IPV6_FLOWINFO_MASK = 0xffffff0f + IPV6_FLOWLABEL_MASK = 0xffff0f00 ISIG = 0x1 IUCLC = 0x200 IXOFF = 0x1000 @@ -152,9 +160,14 @@ const ( NFDBITS = 0x40 NLDLY = 0x100 NOFLSH = 0x80 + NS_GET_MNTNS_ID = 0x8008b705 NS_GET_NSTYPE = 0xb703 NS_GET_OWNER_UID = 0xb704 NS_GET_PARENT = 0xb702 + NS_GET_PID_FROM_PIDNS = 0x8004b706 + NS_GET_PID_IN_PIDNS = 0x8004b708 + NS_GET_TGID_FROM_PIDNS = 0x8004b707 + NS_GET_TGID_IN_PIDNS = 0x8004b709 NS_GET_USERNS = 0xb701 OLCUC = 0x2 ONLCR = 0x4 @@ -231,6 +244,20 @@ const ( PPPIOCUNBRIDGECHAN = 0x7434 PPPIOCXFERUNIT = 0x744e PR_SET_PTRACER_ANY = 0xffffffffffffffff + PTP_CLOCK_GETCAPS = 0x80503d01 + PTP_CLOCK_GETCAPS2 = 0x80503d0a + PTP_ENABLE_PPS = 0x40043d04 + PTP_ENABLE_PPS2 = 0x40043d0d + PTP_EXTTS_REQUEST = 0x40103d02 + PTP_EXTTS_REQUEST2 = 0x40103d0b + PTP_MASK_CLEAR_ALL = 0x3d13 + PTP_MASK_EN_SINGLE = 0x40043d14 + PTP_PEROUT_REQUEST = 0x40383d03 + PTP_PEROUT_REQUEST2 = 0x40383d0c + PTP_PIN_SETFUNC = 0x40603d07 + PTP_PIN_SETFUNC2 = 0x40603d10 + PTP_SYS_OFFSET = 0x43403d05 + PTP_SYS_OFFSET2 = 0x43403d0e PTRACE_SYSEMU = 0x1f PTRACE_SYSEMU_SINGLESTEP = 0x20 RLIMIT_AS = 0x9 @@ -269,10 +296,13 @@ const ( RTC_WIE_ON = 0x700f RTC_WKALM_RD = 0x80287010 RTC_WKALM_SET = 0x4028700f + SCM_DEVMEM_DMABUF = 0x4f + SCM_DEVMEM_LINEAR = 0x4e SCM_TIMESTAMPING = 0x25 SCM_TIMESTAMPING_OPT_STATS = 0x36 SCM_TIMESTAMPING_PKTINFO = 0x3a SCM_TIMESTAMPNS = 0x23 + SCM_TS_OPT_ID = 0x51 SCM_TXTIME = 0x3d SCM_WIFI_STATUS = 0x29 SECCOMP_IOCTL_NOTIF_ADDFD = 0x40182103 @@ -307,6 +337,9 @@ const ( SO_CNX_ADVICE = 0x35 SO_COOKIE = 0x39 SO_DETACH_REUSEPORT_BPF = 0x44 + SO_DEVMEM_DMABUF = 0x4f + SO_DEVMEM_DONTNEED = 0x50 + SO_DEVMEM_LINEAR = 0x4e SO_DOMAIN = 0x27 SO_DONTROUTE = 0x5 SO_ERROR = 0x4 @@ -323,6 +356,7 @@ const ( SO_OOBINLINE = 0xa SO_PASSCRED = 0x10 SO_PASSPIDFD = 0x4c + SO_PASSRIGHTS = 0x53 SO_PASSSEC = 0x22 SO_PEEK_OFF = 0x2a SO_PEERCRED = 0x11 @@ -335,6 +369,7 @@ const ( SO_RCVBUFFORCE = 0x21 SO_RCVLOWAT = 0x12 SO_RCVMARK = 0x4b + SO_RCVPRIORITY = 0x52 SO_RCVTIMEO = 0x14 SO_RCVTIMEO_NEW = 0x42 SO_RCVTIMEO_OLD = 0x14 diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go b/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go index cd66e92cb4..553c1c6f15 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_mips.go @@ -68,6 +68,7 @@ const ( CS8 = 0x30 CSIZE = 0x30 CSTOPB = 0x40 + DM_MPATH_PROBE_PATHS = 0x2000fd12 ECCGETLAYOUT = 0x41484d11 ECCGETSTATS = 0x40104d12 ECHOCTL = 0x200 @@ -78,6 +79,8 @@ const ( ECHOPRT = 0x400 EFD_CLOEXEC = 0x80000 EFD_NONBLOCK = 0x80 + EPIOCGPARAMS = 0x40088a02 + EPIOCSPARAMS = 0x80088a01 EPOLL_CLOEXEC = 0x80000 EXTPROC = 0x10000 FF1 = 0x8000 @@ -106,12 +109,17 @@ const ( HIDIOCGRAWINFO = 0x40084803 HIDIOCGRDESC = 0x50044802 HIDIOCGRDESCSIZE = 0x40044801 + HIDIOCREVOKE = 0x8004480d HUPCL = 0x400 ICANON = 0x2 IEXTEN = 0x100 IN_CLOEXEC = 0x80000 IN_NONBLOCK = 0x80 + IOCTL_MEI_NOTIFY_GET = 0x40044803 + IOCTL_MEI_NOTIFY_SET = 0x80044802 IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x200007b9 + IPV6_FLOWINFO_MASK = 0xfffffff + IPV6_FLOWLABEL_MASK = 0xfffff ISIG = 0x1 IUCLC = 0x200 IXOFF = 0x1000 @@ -148,9 +156,14 @@ const ( NFDBITS = 0x20 NLDLY = 0x100 NOFLSH = 0x80 + NS_GET_MNTNS_ID = 0x4008b705 NS_GET_NSTYPE = 0x2000b703 NS_GET_OWNER_UID = 0x2000b704 NS_GET_PARENT = 0x2000b702 + NS_GET_PID_FROM_PIDNS = 0x4004b706 + NS_GET_PID_IN_PIDNS = 0x4004b708 + NS_GET_TGID_FROM_PIDNS = 0x4004b707 + NS_GET_TGID_IN_PIDNS = 0x4004b709 NS_GET_USERNS = 0x2000b701 OLCUC = 0x2 ONLCR = 0x4 @@ -227,6 +240,20 @@ const ( PPPIOCUNBRIDGECHAN = 0x20007434 PPPIOCXFERUNIT = 0x2000744e PR_SET_PTRACER_ANY = 0xffffffff + PTP_CLOCK_GETCAPS = 0x40503d01 + PTP_CLOCK_GETCAPS2 = 0x40503d0a + PTP_ENABLE_PPS = 0x80043d04 + PTP_ENABLE_PPS2 = 0x80043d0d + PTP_EXTTS_REQUEST = 0x80103d02 + PTP_EXTTS_REQUEST2 = 0x80103d0b + PTP_MASK_CLEAR_ALL = 0x20003d13 + PTP_MASK_EN_SINGLE = 0x80043d14 + PTP_PEROUT_REQUEST = 0x80383d03 + PTP_PEROUT_REQUEST2 = 0x80383d0c + PTP_PIN_SETFUNC = 0x80603d07 + PTP_PIN_SETFUNC2 = 0x80603d10 + PTP_SYS_OFFSET = 0x83403d05 + PTP_SYS_OFFSET2 = 0x83403d0e PTRACE_GETFPREGS = 0xe PTRACE_GET_THREAD_AREA = 0x19 PTRACE_GET_THREAD_AREA_3264 = 0xc4 @@ -275,10 +302,13 @@ const ( RTC_WIE_ON = 0x2000700f RTC_WKALM_RD = 0x40287010 RTC_WKALM_SET = 0x8028700f + SCM_DEVMEM_DMABUF = 0x4f + SCM_DEVMEM_LINEAR = 0x4e SCM_TIMESTAMPING = 0x25 SCM_TIMESTAMPING_OPT_STATS = 0x36 SCM_TIMESTAMPING_PKTINFO = 0x3a SCM_TIMESTAMPNS = 0x23 + SCM_TS_OPT_ID = 0x51 SCM_TXTIME = 0x3d SCM_WIFI_STATUS = 0x29 SECCOMP_IOCTL_NOTIF_ADDFD = 0x80182103 @@ -313,6 +343,9 @@ const ( SO_CNX_ADVICE = 0x35 SO_COOKIE = 0x39 SO_DETACH_REUSEPORT_BPF = 0x44 + SO_DEVMEM_DMABUF = 0x4f + SO_DEVMEM_DONTNEED = 0x50 + SO_DEVMEM_LINEAR = 0x4e SO_DOMAIN = 0x1029 SO_DONTROUTE = 0x10 SO_ERROR = 0x1007 @@ -329,6 +362,7 @@ const ( SO_OOBINLINE = 0x100 SO_PASSCRED = 0x11 SO_PASSPIDFD = 0x4c + SO_PASSRIGHTS = 0x53 SO_PASSSEC = 0x22 SO_PEEK_OFF = 0x2a SO_PEERCRED = 0x12 @@ -341,6 +375,7 @@ const ( SO_RCVBUFFORCE = 0x21 SO_RCVLOWAT = 0x1004 SO_RCVMARK = 0x4b + SO_RCVPRIORITY = 0x52 SO_RCVTIMEO = 0x1006 SO_RCVTIMEO_NEW = 0x42 SO_RCVTIMEO_OLD = 0x1006 diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go index c1595eba78..b3339f2099 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_mips64.go @@ -68,6 +68,7 @@ const ( CS8 = 0x30 CSIZE = 0x30 CSTOPB = 0x40 + DM_MPATH_PROBE_PATHS = 0x2000fd12 ECCGETLAYOUT = 0x41484d11 ECCGETSTATS = 0x40104d12 ECHOCTL = 0x200 @@ -78,6 +79,8 @@ const ( ECHOPRT = 0x400 EFD_CLOEXEC = 0x80000 EFD_NONBLOCK = 0x80 + EPIOCGPARAMS = 0x40088a02 + EPIOCSPARAMS = 0x80088a01 EPOLL_CLOEXEC = 0x80000 EXTPROC = 0x10000 FF1 = 0x8000 @@ -106,12 +109,17 @@ const ( HIDIOCGRAWINFO = 0x40084803 HIDIOCGRDESC = 0x50044802 HIDIOCGRDESCSIZE = 0x40044801 + HIDIOCREVOKE = 0x8004480d HUPCL = 0x400 ICANON = 0x2 IEXTEN = 0x100 IN_CLOEXEC = 0x80000 IN_NONBLOCK = 0x80 + IOCTL_MEI_NOTIFY_GET = 0x40044803 + IOCTL_MEI_NOTIFY_SET = 0x80044802 IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x200007b9 + IPV6_FLOWINFO_MASK = 0xfffffff + IPV6_FLOWLABEL_MASK = 0xfffff ISIG = 0x1 IUCLC = 0x200 IXOFF = 0x1000 @@ -148,9 +156,14 @@ const ( NFDBITS = 0x40 NLDLY = 0x100 NOFLSH = 0x80 + NS_GET_MNTNS_ID = 0x4008b705 NS_GET_NSTYPE = 0x2000b703 NS_GET_OWNER_UID = 0x2000b704 NS_GET_PARENT = 0x2000b702 + NS_GET_PID_FROM_PIDNS = 0x4004b706 + NS_GET_PID_IN_PIDNS = 0x4004b708 + NS_GET_TGID_FROM_PIDNS = 0x4004b707 + NS_GET_TGID_IN_PIDNS = 0x4004b709 NS_GET_USERNS = 0x2000b701 OLCUC = 0x2 ONLCR = 0x4 @@ -227,6 +240,20 @@ const ( PPPIOCUNBRIDGECHAN = 0x20007434 PPPIOCXFERUNIT = 0x2000744e PR_SET_PTRACER_ANY = 0xffffffffffffffff + PTP_CLOCK_GETCAPS = 0x40503d01 + PTP_CLOCK_GETCAPS2 = 0x40503d0a + PTP_ENABLE_PPS = 0x80043d04 + PTP_ENABLE_PPS2 = 0x80043d0d + PTP_EXTTS_REQUEST = 0x80103d02 + PTP_EXTTS_REQUEST2 = 0x80103d0b + PTP_MASK_CLEAR_ALL = 0x20003d13 + PTP_MASK_EN_SINGLE = 0x80043d14 + PTP_PEROUT_REQUEST = 0x80383d03 + PTP_PEROUT_REQUEST2 = 0x80383d0c + PTP_PIN_SETFUNC = 0x80603d07 + PTP_PIN_SETFUNC2 = 0x80603d10 + PTP_SYS_OFFSET = 0x83403d05 + PTP_SYS_OFFSET2 = 0x83403d0e PTRACE_GETFPREGS = 0xe PTRACE_GET_THREAD_AREA = 0x19 PTRACE_GET_THREAD_AREA_3264 = 0xc4 @@ -275,10 +302,13 @@ const ( RTC_WIE_ON = 0x2000700f RTC_WKALM_RD = 0x40287010 RTC_WKALM_SET = 0x8028700f + SCM_DEVMEM_DMABUF = 0x4f + SCM_DEVMEM_LINEAR = 0x4e SCM_TIMESTAMPING = 0x25 SCM_TIMESTAMPING_OPT_STATS = 0x36 SCM_TIMESTAMPING_PKTINFO = 0x3a SCM_TIMESTAMPNS = 0x23 + SCM_TS_OPT_ID = 0x51 SCM_TXTIME = 0x3d SCM_WIFI_STATUS = 0x29 SECCOMP_IOCTL_NOTIF_ADDFD = 0x80182103 @@ -313,6 +343,9 @@ const ( SO_CNX_ADVICE = 0x35 SO_COOKIE = 0x39 SO_DETACH_REUSEPORT_BPF = 0x44 + SO_DEVMEM_DMABUF = 0x4f + SO_DEVMEM_DONTNEED = 0x50 + SO_DEVMEM_LINEAR = 0x4e SO_DOMAIN = 0x1029 SO_DONTROUTE = 0x10 SO_ERROR = 0x1007 @@ -329,6 +362,7 @@ const ( SO_OOBINLINE = 0x100 SO_PASSCRED = 0x11 SO_PASSPIDFD = 0x4c + SO_PASSRIGHTS = 0x53 SO_PASSSEC = 0x22 SO_PEEK_OFF = 0x2a SO_PEERCRED = 0x12 @@ -341,6 +375,7 @@ const ( SO_RCVBUFFORCE = 0x21 SO_RCVLOWAT = 0x1004 SO_RCVMARK = 0x4b + SO_RCVPRIORITY = 0x52 SO_RCVTIMEO = 0x1006 SO_RCVTIMEO_NEW = 0x42 SO_RCVTIMEO_OLD = 0x1006 diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go b/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go index ee9456b0da..177091d2bc 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_mips64le.go @@ -68,6 +68,7 @@ const ( CS8 = 0x30 CSIZE = 0x30 CSTOPB = 0x40 + DM_MPATH_PROBE_PATHS = 0x2000fd12 ECCGETLAYOUT = 0x41484d11 ECCGETSTATS = 0x40104d12 ECHOCTL = 0x200 @@ -78,6 +79,8 @@ const ( ECHOPRT = 0x400 EFD_CLOEXEC = 0x80000 EFD_NONBLOCK = 0x80 + EPIOCGPARAMS = 0x40088a02 + EPIOCSPARAMS = 0x80088a01 EPOLL_CLOEXEC = 0x80000 EXTPROC = 0x10000 FF1 = 0x8000 @@ -106,12 +109,17 @@ const ( HIDIOCGRAWINFO = 0x40084803 HIDIOCGRDESC = 0x50044802 HIDIOCGRDESCSIZE = 0x40044801 + HIDIOCREVOKE = 0x8004480d HUPCL = 0x400 ICANON = 0x2 IEXTEN = 0x100 IN_CLOEXEC = 0x80000 IN_NONBLOCK = 0x80 + IOCTL_MEI_NOTIFY_GET = 0x40044803 + IOCTL_MEI_NOTIFY_SET = 0x80044802 IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x200007b9 + IPV6_FLOWINFO_MASK = 0xffffff0f + IPV6_FLOWLABEL_MASK = 0xffff0f00 ISIG = 0x1 IUCLC = 0x200 IXOFF = 0x1000 @@ -148,9 +156,14 @@ const ( NFDBITS = 0x40 NLDLY = 0x100 NOFLSH = 0x80 + NS_GET_MNTNS_ID = 0x4008b705 NS_GET_NSTYPE = 0x2000b703 NS_GET_OWNER_UID = 0x2000b704 NS_GET_PARENT = 0x2000b702 + NS_GET_PID_FROM_PIDNS = 0x4004b706 + NS_GET_PID_IN_PIDNS = 0x4004b708 + NS_GET_TGID_FROM_PIDNS = 0x4004b707 + NS_GET_TGID_IN_PIDNS = 0x4004b709 NS_GET_USERNS = 0x2000b701 OLCUC = 0x2 ONLCR = 0x4 @@ -227,6 +240,20 @@ const ( PPPIOCUNBRIDGECHAN = 0x20007434 PPPIOCXFERUNIT = 0x2000744e PR_SET_PTRACER_ANY = 0xffffffffffffffff + PTP_CLOCK_GETCAPS = 0x40503d01 + PTP_CLOCK_GETCAPS2 = 0x40503d0a + PTP_ENABLE_PPS = 0x80043d04 + PTP_ENABLE_PPS2 = 0x80043d0d + PTP_EXTTS_REQUEST = 0x80103d02 + PTP_EXTTS_REQUEST2 = 0x80103d0b + PTP_MASK_CLEAR_ALL = 0x20003d13 + PTP_MASK_EN_SINGLE = 0x80043d14 + PTP_PEROUT_REQUEST = 0x80383d03 + PTP_PEROUT_REQUEST2 = 0x80383d0c + PTP_PIN_SETFUNC = 0x80603d07 + PTP_PIN_SETFUNC2 = 0x80603d10 + PTP_SYS_OFFSET = 0x83403d05 + PTP_SYS_OFFSET2 = 0x83403d0e PTRACE_GETFPREGS = 0xe PTRACE_GET_THREAD_AREA = 0x19 PTRACE_GET_THREAD_AREA_3264 = 0xc4 @@ -275,10 +302,13 @@ const ( RTC_WIE_ON = 0x2000700f RTC_WKALM_RD = 0x40287010 RTC_WKALM_SET = 0x8028700f + SCM_DEVMEM_DMABUF = 0x4f + SCM_DEVMEM_LINEAR = 0x4e SCM_TIMESTAMPING = 0x25 SCM_TIMESTAMPING_OPT_STATS = 0x36 SCM_TIMESTAMPING_PKTINFO = 0x3a SCM_TIMESTAMPNS = 0x23 + SCM_TS_OPT_ID = 0x51 SCM_TXTIME = 0x3d SCM_WIFI_STATUS = 0x29 SECCOMP_IOCTL_NOTIF_ADDFD = 0x80182103 @@ -313,6 +343,9 @@ const ( SO_CNX_ADVICE = 0x35 SO_COOKIE = 0x39 SO_DETACH_REUSEPORT_BPF = 0x44 + SO_DEVMEM_DMABUF = 0x4f + SO_DEVMEM_DONTNEED = 0x50 + SO_DEVMEM_LINEAR = 0x4e SO_DOMAIN = 0x1029 SO_DONTROUTE = 0x10 SO_ERROR = 0x1007 @@ -329,6 +362,7 @@ const ( SO_OOBINLINE = 0x100 SO_PASSCRED = 0x11 SO_PASSPIDFD = 0x4c + SO_PASSRIGHTS = 0x53 SO_PASSSEC = 0x22 SO_PEEK_OFF = 0x2a SO_PEERCRED = 0x12 @@ -341,6 +375,7 @@ const ( SO_RCVBUFFORCE = 0x21 SO_RCVLOWAT = 0x1004 SO_RCVMARK = 0x4b + SO_RCVPRIORITY = 0x52 SO_RCVTIMEO = 0x1006 SO_RCVTIMEO_NEW = 0x42 SO_RCVTIMEO_OLD = 0x1006 diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go b/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go index 8cfca81e1b..c5abf156d0 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_mipsle.go @@ -68,6 +68,7 @@ const ( CS8 = 0x30 CSIZE = 0x30 CSTOPB = 0x40 + DM_MPATH_PROBE_PATHS = 0x2000fd12 ECCGETLAYOUT = 0x41484d11 ECCGETSTATS = 0x40104d12 ECHOCTL = 0x200 @@ -78,6 +79,8 @@ const ( ECHOPRT = 0x400 EFD_CLOEXEC = 0x80000 EFD_NONBLOCK = 0x80 + EPIOCGPARAMS = 0x40088a02 + EPIOCSPARAMS = 0x80088a01 EPOLL_CLOEXEC = 0x80000 EXTPROC = 0x10000 FF1 = 0x8000 @@ -106,12 +109,17 @@ const ( HIDIOCGRAWINFO = 0x40084803 HIDIOCGRDESC = 0x50044802 HIDIOCGRDESCSIZE = 0x40044801 + HIDIOCREVOKE = 0x8004480d HUPCL = 0x400 ICANON = 0x2 IEXTEN = 0x100 IN_CLOEXEC = 0x80000 IN_NONBLOCK = 0x80 + IOCTL_MEI_NOTIFY_GET = 0x40044803 + IOCTL_MEI_NOTIFY_SET = 0x80044802 IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x200007b9 + IPV6_FLOWINFO_MASK = 0xffffff0f + IPV6_FLOWLABEL_MASK = 0xffff0f00 ISIG = 0x1 IUCLC = 0x200 IXOFF = 0x1000 @@ -148,9 +156,14 @@ const ( NFDBITS = 0x20 NLDLY = 0x100 NOFLSH = 0x80 + NS_GET_MNTNS_ID = 0x4008b705 NS_GET_NSTYPE = 0x2000b703 NS_GET_OWNER_UID = 0x2000b704 NS_GET_PARENT = 0x2000b702 + NS_GET_PID_FROM_PIDNS = 0x4004b706 + NS_GET_PID_IN_PIDNS = 0x4004b708 + NS_GET_TGID_FROM_PIDNS = 0x4004b707 + NS_GET_TGID_IN_PIDNS = 0x4004b709 NS_GET_USERNS = 0x2000b701 OLCUC = 0x2 ONLCR = 0x4 @@ -227,6 +240,20 @@ const ( PPPIOCUNBRIDGECHAN = 0x20007434 PPPIOCXFERUNIT = 0x2000744e PR_SET_PTRACER_ANY = 0xffffffff + PTP_CLOCK_GETCAPS = 0x40503d01 + PTP_CLOCK_GETCAPS2 = 0x40503d0a + PTP_ENABLE_PPS = 0x80043d04 + PTP_ENABLE_PPS2 = 0x80043d0d + PTP_EXTTS_REQUEST = 0x80103d02 + PTP_EXTTS_REQUEST2 = 0x80103d0b + PTP_MASK_CLEAR_ALL = 0x20003d13 + PTP_MASK_EN_SINGLE = 0x80043d14 + PTP_PEROUT_REQUEST = 0x80383d03 + PTP_PEROUT_REQUEST2 = 0x80383d0c + PTP_PIN_SETFUNC = 0x80603d07 + PTP_PIN_SETFUNC2 = 0x80603d10 + PTP_SYS_OFFSET = 0x83403d05 + PTP_SYS_OFFSET2 = 0x83403d0e PTRACE_GETFPREGS = 0xe PTRACE_GET_THREAD_AREA = 0x19 PTRACE_GET_THREAD_AREA_3264 = 0xc4 @@ -275,10 +302,13 @@ const ( RTC_WIE_ON = 0x2000700f RTC_WKALM_RD = 0x40287010 RTC_WKALM_SET = 0x8028700f + SCM_DEVMEM_DMABUF = 0x4f + SCM_DEVMEM_LINEAR = 0x4e SCM_TIMESTAMPING = 0x25 SCM_TIMESTAMPING_OPT_STATS = 0x36 SCM_TIMESTAMPING_PKTINFO = 0x3a SCM_TIMESTAMPNS = 0x23 + SCM_TS_OPT_ID = 0x51 SCM_TXTIME = 0x3d SCM_WIFI_STATUS = 0x29 SECCOMP_IOCTL_NOTIF_ADDFD = 0x80182103 @@ -313,6 +343,9 @@ const ( SO_CNX_ADVICE = 0x35 SO_COOKIE = 0x39 SO_DETACH_REUSEPORT_BPF = 0x44 + SO_DEVMEM_DMABUF = 0x4f + SO_DEVMEM_DONTNEED = 0x50 + SO_DEVMEM_LINEAR = 0x4e SO_DOMAIN = 0x1029 SO_DONTROUTE = 0x10 SO_ERROR = 0x1007 @@ -329,6 +362,7 @@ const ( SO_OOBINLINE = 0x100 SO_PASSCRED = 0x11 SO_PASSPIDFD = 0x4c + SO_PASSRIGHTS = 0x53 SO_PASSSEC = 0x22 SO_PEEK_OFF = 0x2a SO_PEERCRED = 0x12 @@ -341,6 +375,7 @@ const ( SO_RCVBUFFORCE = 0x21 SO_RCVLOWAT = 0x1004 SO_RCVMARK = 0x4b + SO_RCVPRIORITY = 0x52 SO_RCVTIMEO = 0x1006 SO_RCVTIMEO_NEW = 0x42 SO_RCVTIMEO_OLD = 0x1006 diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc.go b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc.go index 60b0deb3af..f1f3fadf57 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc.go @@ -68,6 +68,7 @@ const ( CS8 = 0x300 CSIZE = 0x300 CSTOPB = 0x400 + DM_MPATH_PROBE_PATHS = 0x2000fd12 ECCGETLAYOUT = 0x41484d11 ECCGETSTATS = 0x40104d12 ECHOCTL = 0x40 @@ -78,6 +79,8 @@ const ( ECHOPRT = 0x20 EFD_CLOEXEC = 0x80000 EFD_NONBLOCK = 0x800 + EPIOCGPARAMS = 0x40088a02 + EPIOCSPARAMS = 0x80088a01 EPOLL_CLOEXEC = 0x80000 EXTPROC = 0x10000000 FF1 = 0x4000 @@ -106,12 +109,17 @@ const ( HIDIOCGRAWINFO = 0x40084803 HIDIOCGRDESC = 0x50044802 HIDIOCGRDESCSIZE = 0x40044801 + HIDIOCREVOKE = 0x8004480d HUPCL = 0x4000 ICANON = 0x100 IEXTEN = 0x400 IN_CLOEXEC = 0x80000 IN_NONBLOCK = 0x800 + IOCTL_MEI_NOTIFY_GET = 0x40044803 + IOCTL_MEI_NOTIFY_SET = 0x80044802 IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x200007b9 + IPV6_FLOWINFO_MASK = 0xfffffff + IPV6_FLOWLABEL_MASK = 0xfffff ISIG = 0x80 IUCLC = 0x1000 IXOFF = 0x400 @@ -150,9 +158,14 @@ const ( NL3 = 0x300 NLDLY = 0x300 NOFLSH = 0x80000000 + NS_GET_MNTNS_ID = 0x4008b705 NS_GET_NSTYPE = 0x2000b703 NS_GET_OWNER_UID = 0x2000b704 NS_GET_PARENT = 0x2000b702 + NS_GET_PID_FROM_PIDNS = 0x4004b706 + NS_GET_PID_IN_PIDNS = 0x4004b708 + NS_GET_TGID_FROM_PIDNS = 0x4004b707 + NS_GET_TGID_IN_PIDNS = 0x4004b709 NS_GET_USERNS = 0x2000b701 OLCUC = 0x4 ONLCR = 0x2 @@ -230,6 +243,20 @@ const ( PPPIOCXFERUNIT = 0x2000744e PROT_SAO = 0x10 PR_SET_PTRACER_ANY = 0xffffffff + PTP_CLOCK_GETCAPS = 0x40503d01 + PTP_CLOCK_GETCAPS2 = 0x40503d0a + PTP_ENABLE_PPS = 0x80043d04 + PTP_ENABLE_PPS2 = 0x80043d0d + PTP_EXTTS_REQUEST = 0x80103d02 + PTP_EXTTS_REQUEST2 = 0x80103d0b + PTP_MASK_CLEAR_ALL = 0x20003d13 + PTP_MASK_EN_SINGLE = 0x80043d14 + PTP_PEROUT_REQUEST = 0x80383d03 + PTP_PEROUT_REQUEST2 = 0x80383d0c + PTP_PIN_SETFUNC = 0x80603d07 + PTP_PIN_SETFUNC2 = 0x80603d10 + PTP_SYS_OFFSET = 0x83403d05 + PTP_SYS_OFFSET2 = 0x83403d0e PTRACE_GETEVRREGS = 0x14 PTRACE_GETFPREGS = 0xe PTRACE_GETREGS64 = 0x16 @@ -330,10 +357,13 @@ const ( RTC_WIE_ON = 0x2000700f RTC_WKALM_RD = 0x40287010 RTC_WKALM_SET = 0x8028700f + SCM_DEVMEM_DMABUF = 0x4f + SCM_DEVMEM_LINEAR = 0x4e SCM_TIMESTAMPING = 0x25 SCM_TIMESTAMPING_OPT_STATS = 0x36 SCM_TIMESTAMPING_PKTINFO = 0x3a SCM_TIMESTAMPNS = 0x23 + SCM_TS_OPT_ID = 0x51 SCM_TXTIME = 0x3d SCM_WIFI_STATUS = 0x29 SECCOMP_IOCTL_NOTIF_ADDFD = 0x80182103 @@ -368,6 +398,9 @@ const ( SO_CNX_ADVICE = 0x35 SO_COOKIE = 0x39 SO_DETACH_REUSEPORT_BPF = 0x44 + SO_DEVMEM_DMABUF = 0x4f + SO_DEVMEM_DONTNEED = 0x50 + SO_DEVMEM_LINEAR = 0x4e SO_DOMAIN = 0x27 SO_DONTROUTE = 0x5 SO_ERROR = 0x4 @@ -384,6 +417,7 @@ const ( SO_OOBINLINE = 0xa SO_PASSCRED = 0x14 SO_PASSPIDFD = 0x4c + SO_PASSRIGHTS = 0x53 SO_PASSSEC = 0x22 SO_PEEK_OFF = 0x2a SO_PEERCRED = 0x15 @@ -396,6 +430,7 @@ const ( SO_RCVBUFFORCE = 0x21 SO_RCVLOWAT = 0x10 SO_RCVMARK = 0x4b + SO_RCVPRIORITY = 0x52 SO_RCVTIMEO = 0x12 SO_RCVTIMEO_NEW = 0x42 SO_RCVTIMEO_OLD = 0x12 diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go index f90aa7281b..203ad9c54a 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64.go @@ -68,6 +68,7 @@ const ( CS8 = 0x300 CSIZE = 0x300 CSTOPB = 0x400 + DM_MPATH_PROBE_PATHS = 0x2000fd12 ECCGETLAYOUT = 0x41484d11 ECCGETSTATS = 0x40104d12 ECHOCTL = 0x40 @@ -78,6 +79,8 @@ const ( ECHOPRT = 0x20 EFD_CLOEXEC = 0x80000 EFD_NONBLOCK = 0x800 + EPIOCGPARAMS = 0x40088a02 + EPIOCSPARAMS = 0x80088a01 EPOLL_CLOEXEC = 0x80000 EXTPROC = 0x10000000 FF1 = 0x4000 @@ -106,12 +109,17 @@ const ( HIDIOCGRAWINFO = 0x40084803 HIDIOCGRDESC = 0x50044802 HIDIOCGRDESCSIZE = 0x40044801 + HIDIOCREVOKE = 0x8004480d HUPCL = 0x4000 ICANON = 0x100 IEXTEN = 0x400 IN_CLOEXEC = 0x80000 IN_NONBLOCK = 0x800 + IOCTL_MEI_NOTIFY_GET = 0x40044803 + IOCTL_MEI_NOTIFY_SET = 0x80044802 IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x200007b9 + IPV6_FLOWINFO_MASK = 0xfffffff + IPV6_FLOWLABEL_MASK = 0xfffff ISIG = 0x80 IUCLC = 0x1000 IXOFF = 0x400 @@ -150,9 +158,14 @@ const ( NL3 = 0x300 NLDLY = 0x300 NOFLSH = 0x80000000 + NS_GET_MNTNS_ID = 0x4008b705 NS_GET_NSTYPE = 0x2000b703 NS_GET_OWNER_UID = 0x2000b704 NS_GET_PARENT = 0x2000b702 + NS_GET_PID_FROM_PIDNS = 0x4004b706 + NS_GET_PID_IN_PIDNS = 0x4004b708 + NS_GET_TGID_FROM_PIDNS = 0x4004b707 + NS_GET_TGID_IN_PIDNS = 0x4004b709 NS_GET_USERNS = 0x2000b701 OLCUC = 0x4 ONLCR = 0x2 @@ -230,6 +243,20 @@ const ( PPPIOCXFERUNIT = 0x2000744e PROT_SAO = 0x10 PR_SET_PTRACER_ANY = 0xffffffffffffffff + PTP_CLOCK_GETCAPS = 0x40503d01 + PTP_CLOCK_GETCAPS2 = 0x40503d0a + PTP_ENABLE_PPS = 0x80043d04 + PTP_ENABLE_PPS2 = 0x80043d0d + PTP_EXTTS_REQUEST = 0x80103d02 + PTP_EXTTS_REQUEST2 = 0x80103d0b + PTP_MASK_CLEAR_ALL = 0x20003d13 + PTP_MASK_EN_SINGLE = 0x80043d14 + PTP_PEROUT_REQUEST = 0x80383d03 + PTP_PEROUT_REQUEST2 = 0x80383d0c + PTP_PIN_SETFUNC = 0x80603d07 + PTP_PIN_SETFUNC2 = 0x80603d10 + PTP_SYS_OFFSET = 0x83403d05 + PTP_SYS_OFFSET2 = 0x83403d0e PTRACE_GETEVRREGS = 0x14 PTRACE_GETFPREGS = 0xe PTRACE_GETREGS64 = 0x16 @@ -334,10 +361,13 @@ const ( RTC_WIE_ON = 0x2000700f RTC_WKALM_RD = 0x40287010 RTC_WKALM_SET = 0x8028700f + SCM_DEVMEM_DMABUF = 0x4f + SCM_DEVMEM_LINEAR = 0x4e SCM_TIMESTAMPING = 0x25 SCM_TIMESTAMPING_OPT_STATS = 0x36 SCM_TIMESTAMPING_PKTINFO = 0x3a SCM_TIMESTAMPNS = 0x23 + SCM_TS_OPT_ID = 0x51 SCM_TXTIME = 0x3d SCM_WIFI_STATUS = 0x29 SECCOMP_IOCTL_NOTIF_ADDFD = 0x80182103 @@ -372,6 +402,9 @@ const ( SO_CNX_ADVICE = 0x35 SO_COOKIE = 0x39 SO_DETACH_REUSEPORT_BPF = 0x44 + SO_DEVMEM_DMABUF = 0x4f + SO_DEVMEM_DONTNEED = 0x50 + SO_DEVMEM_LINEAR = 0x4e SO_DOMAIN = 0x27 SO_DONTROUTE = 0x5 SO_ERROR = 0x4 @@ -388,6 +421,7 @@ const ( SO_OOBINLINE = 0xa SO_PASSCRED = 0x14 SO_PASSPIDFD = 0x4c + SO_PASSRIGHTS = 0x53 SO_PASSSEC = 0x22 SO_PEEK_OFF = 0x2a SO_PEERCRED = 0x15 @@ -400,6 +434,7 @@ const ( SO_RCVBUFFORCE = 0x21 SO_RCVLOWAT = 0x10 SO_RCVMARK = 0x4b + SO_RCVPRIORITY = 0x52 SO_RCVTIMEO = 0x12 SO_RCVTIMEO_NEW = 0x42 SO_RCVTIMEO_OLD = 0x12 diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go index ba9e015033..4b9abcb21a 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_ppc64le.go @@ -68,6 +68,7 @@ const ( CS8 = 0x300 CSIZE = 0x300 CSTOPB = 0x400 + DM_MPATH_PROBE_PATHS = 0x2000fd12 ECCGETLAYOUT = 0x41484d11 ECCGETSTATS = 0x40104d12 ECHOCTL = 0x40 @@ -78,6 +79,8 @@ const ( ECHOPRT = 0x20 EFD_CLOEXEC = 0x80000 EFD_NONBLOCK = 0x800 + EPIOCGPARAMS = 0x40088a02 + EPIOCSPARAMS = 0x80088a01 EPOLL_CLOEXEC = 0x80000 EXTPROC = 0x10000000 FF1 = 0x4000 @@ -106,12 +109,17 @@ const ( HIDIOCGRAWINFO = 0x40084803 HIDIOCGRDESC = 0x50044802 HIDIOCGRDESCSIZE = 0x40044801 + HIDIOCREVOKE = 0x8004480d HUPCL = 0x4000 ICANON = 0x100 IEXTEN = 0x400 IN_CLOEXEC = 0x80000 IN_NONBLOCK = 0x800 + IOCTL_MEI_NOTIFY_GET = 0x40044803 + IOCTL_MEI_NOTIFY_SET = 0x80044802 IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x200007b9 + IPV6_FLOWINFO_MASK = 0xffffff0f + IPV6_FLOWLABEL_MASK = 0xffff0f00 ISIG = 0x80 IUCLC = 0x1000 IXOFF = 0x400 @@ -150,9 +158,14 @@ const ( NL3 = 0x300 NLDLY = 0x300 NOFLSH = 0x80000000 + NS_GET_MNTNS_ID = 0x4008b705 NS_GET_NSTYPE = 0x2000b703 NS_GET_OWNER_UID = 0x2000b704 NS_GET_PARENT = 0x2000b702 + NS_GET_PID_FROM_PIDNS = 0x4004b706 + NS_GET_PID_IN_PIDNS = 0x4004b708 + NS_GET_TGID_FROM_PIDNS = 0x4004b707 + NS_GET_TGID_IN_PIDNS = 0x4004b709 NS_GET_USERNS = 0x2000b701 OLCUC = 0x4 ONLCR = 0x2 @@ -230,6 +243,20 @@ const ( PPPIOCXFERUNIT = 0x2000744e PROT_SAO = 0x10 PR_SET_PTRACER_ANY = 0xffffffffffffffff + PTP_CLOCK_GETCAPS = 0x40503d01 + PTP_CLOCK_GETCAPS2 = 0x40503d0a + PTP_ENABLE_PPS = 0x80043d04 + PTP_ENABLE_PPS2 = 0x80043d0d + PTP_EXTTS_REQUEST = 0x80103d02 + PTP_EXTTS_REQUEST2 = 0x80103d0b + PTP_MASK_CLEAR_ALL = 0x20003d13 + PTP_MASK_EN_SINGLE = 0x80043d14 + PTP_PEROUT_REQUEST = 0x80383d03 + PTP_PEROUT_REQUEST2 = 0x80383d0c + PTP_PIN_SETFUNC = 0x80603d07 + PTP_PIN_SETFUNC2 = 0x80603d10 + PTP_SYS_OFFSET = 0x83403d05 + PTP_SYS_OFFSET2 = 0x83403d0e PTRACE_GETEVRREGS = 0x14 PTRACE_GETFPREGS = 0xe PTRACE_GETREGS64 = 0x16 @@ -334,10 +361,13 @@ const ( RTC_WIE_ON = 0x2000700f RTC_WKALM_RD = 0x40287010 RTC_WKALM_SET = 0x8028700f + SCM_DEVMEM_DMABUF = 0x4f + SCM_DEVMEM_LINEAR = 0x4e SCM_TIMESTAMPING = 0x25 SCM_TIMESTAMPING_OPT_STATS = 0x36 SCM_TIMESTAMPING_PKTINFO = 0x3a SCM_TIMESTAMPNS = 0x23 + SCM_TS_OPT_ID = 0x51 SCM_TXTIME = 0x3d SCM_WIFI_STATUS = 0x29 SECCOMP_IOCTL_NOTIF_ADDFD = 0x80182103 @@ -372,6 +402,9 @@ const ( SO_CNX_ADVICE = 0x35 SO_COOKIE = 0x39 SO_DETACH_REUSEPORT_BPF = 0x44 + SO_DEVMEM_DMABUF = 0x4f + SO_DEVMEM_DONTNEED = 0x50 + SO_DEVMEM_LINEAR = 0x4e SO_DOMAIN = 0x27 SO_DONTROUTE = 0x5 SO_ERROR = 0x4 @@ -388,6 +421,7 @@ const ( SO_OOBINLINE = 0xa SO_PASSCRED = 0x14 SO_PASSPIDFD = 0x4c + SO_PASSRIGHTS = 0x53 SO_PASSSEC = 0x22 SO_PEEK_OFF = 0x2a SO_PEERCRED = 0x15 @@ -400,6 +434,7 @@ const ( SO_RCVBUFFORCE = 0x21 SO_RCVLOWAT = 0x10 SO_RCVMARK = 0x4b + SO_RCVPRIORITY = 0x52 SO_RCVTIMEO = 0x12 SO_RCVTIMEO_NEW = 0x42 SO_RCVTIMEO_OLD = 0x12 diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go index 07cdfd6e9f..f87983037d 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_riscv64.go @@ -68,6 +68,7 @@ const ( CS8 = 0x30 CSIZE = 0x30 CSTOPB = 0x40 + DM_MPATH_PROBE_PATHS = 0xfd12 ECCGETLAYOUT = 0x81484d11 ECCGETSTATS = 0x80104d12 ECHOCTL = 0x200 @@ -78,6 +79,8 @@ const ( ECHOPRT = 0x400 EFD_CLOEXEC = 0x80000 EFD_NONBLOCK = 0x800 + EPIOCGPARAMS = 0x80088a02 + EPIOCSPARAMS = 0x40088a01 EPOLL_CLOEXEC = 0x80000 EXTPROC = 0x10000 FF1 = 0x8000 @@ -106,12 +109,17 @@ const ( HIDIOCGRAWINFO = 0x80084803 HIDIOCGRDESC = 0x90044802 HIDIOCGRDESCSIZE = 0x80044801 + HIDIOCREVOKE = 0x4004480d HUPCL = 0x400 ICANON = 0x2 IEXTEN = 0x8000 IN_CLOEXEC = 0x80000 IN_NONBLOCK = 0x800 + IOCTL_MEI_NOTIFY_GET = 0x80044803 + IOCTL_MEI_NOTIFY_SET = 0x40044802 IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x7b9 + IPV6_FLOWINFO_MASK = 0xffffff0f + IPV6_FLOWLABEL_MASK = 0xffff0f00 ISIG = 0x1 IUCLC = 0x200 IXOFF = 0x1000 @@ -148,9 +156,14 @@ const ( NFDBITS = 0x40 NLDLY = 0x100 NOFLSH = 0x80 + NS_GET_MNTNS_ID = 0x8008b705 NS_GET_NSTYPE = 0xb703 NS_GET_OWNER_UID = 0xb704 NS_GET_PARENT = 0xb702 + NS_GET_PID_FROM_PIDNS = 0x8004b706 + NS_GET_PID_IN_PIDNS = 0x8004b708 + NS_GET_TGID_FROM_PIDNS = 0x8004b707 + NS_GET_TGID_IN_PIDNS = 0x8004b709 NS_GET_USERNS = 0xb701 OLCUC = 0x2 ONLCR = 0x4 @@ -227,6 +240,20 @@ const ( PPPIOCUNBRIDGECHAN = 0x7434 PPPIOCXFERUNIT = 0x744e PR_SET_PTRACER_ANY = 0xffffffffffffffff + PTP_CLOCK_GETCAPS = 0x80503d01 + PTP_CLOCK_GETCAPS2 = 0x80503d0a + PTP_ENABLE_PPS = 0x40043d04 + PTP_ENABLE_PPS2 = 0x40043d0d + PTP_EXTTS_REQUEST = 0x40103d02 + PTP_EXTTS_REQUEST2 = 0x40103d0b + PTP_MASK_CLEAR_ALL = 0x3d13 + PTP_MASK_EN_SINGLE = 0x40043d14 + PTP_PEROUT_REQUEST = 0x40383d03 + PTP_PEROUT_REQUEST2 = 0x40383d0c + PTP_PIN_SETFUNC = 0x40603d07 + PTP_PIN_SETFUNC2 = 0x40603d10 + PTP_SYS_OFFSET = 0x43403d05 + PTP_SYS_OFFSET2 = 0x43403d0e PTRACE_GETFDPIC = 0x21 PTRACE_GETFDPIC_EXEC = 0x0 PTRACE_GETFDPIC_INTERP = 0x1 @@ -266,10 +293,13 @@ const ( RTC_WIE_ON = 0x700f RTC_WKALM_RD = 0x80287010 RTC_WKALM_SET = 0x4028700f + SCM_DEVMEM_DMABUF = 0x4f + SCM_DEVMEM_LINEAR = 0x4e SCM_TIMESTAMPING = 0x25 SCM_TIMESTAMPING_OPT_STATS = 0x36 SCM_TIMESTAMPING_PKTINFO = 0x3a SCM_TIMESTAMPNS = 0x23 + SCM_TS_OPT_ID = 0x51 SCM_TXTIME = 0x3d SCM_WIFI_STATUS = 0x29 SECCOMP_IOCTL_NOTIF_ADDFD = 0x40182103 @@ -304,6 +334,9 @@ const ( SO_CNX_ADVICE = 0x35 SO_COOKIE = 0x39 SO_DETACH_REUSEPORT_BPF = 0x44 + SO_DEVMEM_DMABUF = 0x4f + SO_DEVMEM_DONTNEED = 0x50 + SO_DEVMEM_LINEAR = 0x4e SO_DOMAIN = 0x27 SO_DONTROUTE = 0x5 SO_ERROR = 0x4 @@ -320,6 +353,7 @@ const ( SO_OOBINLINE = 0xa SO_PASSCRED = 0x10 SO_PASSPIDFD = 0x4c + SO_PASSRIGHTS = 0x53 SO_PASSSEC = 0x22 SO_PEEK_OFF = 0x2a SO_PEERCRED = 0x11 @@ -332,6 +366,7 @@ const ( SO_RCVBUFFORCE = 0x21 SO_RCVLOWAT = 0x12 SO_RCVMARK = 0x4b + SO_RCVPRIORITY = 0x52 SO_RCVTIMEO = 0x14 SO_RCVTIMEO_NEW = 0x42 SO_RCVTIMEO_OLD = 0x14 diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go b/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go index 2f1dd214a7..64347eb354 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_s390x.go @@ -68,6 +68,7 @@ const ( CS8 = 0x30 CSIZE = 0x30 CSTOPB = 0x40 + DM_MPATH_PROBE_PATHS = 0xfd12 ECCGETLAYOUT = 0x81484d11 ECCGETSTATS = 0x80104d12 ECHOCTL = 0x200 @@ -78,6 +79,8 @@ const ( ECHOPRT = 0x400 EFD_CLOEXEC = 0x80000 EFD_NONBLOCK = 0x800 + EPIOCGPARAMS = 0x80088a02 + EPIOCSPARAMS = 0x40088a01 EPOLL_CLOEXEC = 0x80000 EXTPROC = 0x10000 FF1 = 0x8000 @@ -106,12 +109,17 @@ const ( HIDIOCGRAWINFO = 0x80084803 HIDIOCGRDESC = 0x90044802 HIDIOCGRDESCSIZE = 0x80044801 + HIDIOCREVOKE = 0x4004480d HUPCL = 0x400 ICANON = 0x2 IEXTEN = 0x8000 IN_CLOEXEC = 0x80000 IN_NONBLOCK = 0x800 + IOCTL_MEI_NOTIFY_GET = 0x80044803 + IOCTL_MEI_NOTIFY_SET = 0x40044802 IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x7b9 + IPV6_FLOWINFO_MASK = 0xfffffff + IPV6_FLOWLABEL_MASK = 0xfffff ISIG = 0x1 IUCLC = 0x200 IXOFF = 0x1000 @@ -148,9 +156,14 @@ const ( NFDBITS = 0x40 NLDLY = 0x100 NOFLSH = 0x80 + NS_GET_MNTNS_ID = 0x8008b705 NS_GET_NSTYPE = 0xb703 NS_GET_OWNER_UID = 0xb704 NS_GET_PARENT = 0xb702 + NS_GET_PID_FROM_PIDNS = 0x8004b706 + NS_GET_PID_IN_PIDNS = 0x8004b708 + NS_GET_TGID_FROM_PIDNS = 0x8004b707 + NS_GET_TGID_IN_PIDNS = 0x8004b709 NS_GET_USERNS = 0xb701 OLCUC = 0x2 ONLCR = 0x4 @@ -227,6 +240,20 @@ const ( PPPIOCUNBRIDGECHAN = 0x7434 PPPIOCXFERUNIT = 0x744e PR_SET_PTRACER_ANY = 0xffffffffffffffff + PTP_CLOCK_GETCAPS = 0x80503d01 + PTP_CLOCK_GETCAPS2 = 0x80503d0a + PTP_ENABLE_PPS = 0x40043d04 + PTP_ENABLE_PPS2 = 0x40043d0d + PTP_EXTTS_REQUEST = 0x40103d02 + PTP_EXTTS_REQUEST2 = 0x40103d0b + PTP_MASK_CLEAR_ALL = 0x3d13 + PTP_MASK_EN_SINGLE = 0x40043d14 + PTP_PEROUT_REQUEST = 0x40383d03 + PTP_PEROUT_REQUEST2 = 0x40383d0c + PTP_PIN_SETFUNC = 0x40603d07 + PTP_PIN_SETFUNC2 = 0x40603d10 + PTP_SYS_OFFSET = 0x43403d05 + PTP_SYS_OFFSET2 = 0x43403d0e PTRACE_DISABLE_TE = 0x5010 PTRACE_ENABLE_TE = 0x5009 PTRACE_GET_LAST_BREAK = 0x5006 @@ -338,10 +365,13 @@ const ( RTC_WIE_ON = 0x700f RTC_WKALM_RD = 0x80287010 RTC_WKALM_SET = 0x4028700f + SCM_DEVMEM_DMABUF = 0x4f + SCM_DEVMEM_LINEAR = 0x4e SCM_TIMESTAMPING = 0x25 SCM_TIMESTAMPING_OPT_STATS = 0x36 SCM_TIMESTAMPING_PKTINFO = 0x3a SCM_TIMESTAMPNS = 0x23 + SCM_TS_OPT_ID = 0x51 SCM_TXTIME = 0x3d SCM_WIFI_STATUS = 0x29 SECCOMP_IOCTL_NOTIF_ADDFD = 0x40182103 @@ -376,6 +406,9 @@ const ( SO_CNX_ADVICE = 0x35 SO_COOKIE = 0x39 SO_DETACH_REUSEPORT_BPF = 0x44 + SO_DEVMEM_DMABUF = 0x4f + SO_DEVMEM_DONTNEED = 0x50 + SO_DEVMEM_LINEAR = 0x4e SO_DOMAIN = 0x27 SO_DONTROUTE = 0x5 SO_ERROR = 0x4 @@ -392,6 +425,7 @@ const ( SO_OOBINLINE = 0xa SO_PASSCRED = 0x10 SO_PASSPIDFD = 0x4c + SO_PASSRIGHTS = 0x53 SO_PASSSEC = 0x22 SO_PEEK_OFF = 0x2a SO_PEERCRED = 0x11 @@ -404,6 +438,7 @@ const ( SO_RCVBUFFORCE = 0x21 SO_RCVLOWAT = 0x12 SO_RCVMARK = 0x4b + SO_RCVPRIORITY = 0x52 SO_RCVTIMEO = 0x14 SO_RCVTIMEO_NEW = 0x42 SO_RCVTIMEO_OLD = 0x14 diff --git a/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go b/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go index f40519d901..7d71911718 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go +++ b/vendor/golang.org/x/sys/unix/zerrors_linux_sparc64.go @@ -71,6 +71,7 @@ const ( CS8 = 0x30 CSIZE = 0x30 CSTOPB = 0x40 + DM_MPATH_PROBE_PATHS = 0x2000fd12 ECCGETLAYOUT = 0x41484d11 ECCGETSTATS = 0x40104d12 ECHOCTL = 0x200 @@ -82,6 +83,8 @@ const ( EFD_CLOEXEC = 0x400000 EFD_NONBLOCK = 0x4000 EMT_TAGOVF = 0x1 + EPIOCGPARAMS = 0x40088a02 + EPIOCSPARAMS = 0x80088a01 EPOLL_CLOEXEC = 0x400000 EXTPROC = 0x10000 FF1 = 0x8000 @@ -110,12 +113,17 @@ const ( HIDIOCGRAWINFO = 0x40084803 HIDIOCGRDESC = 0x50044802 HIDIOCGRDESCSIZE = 0x40044801 + HIDIOCREVOKE = 0x8004480d HUPCL = 0x400 ICANON = 0x2 IEXTEN = 0x8000 IN_CLOEXEC = 0x400000 IN_NONBLOCK = 0x4000 + IOCTL_MEI_NOTIFY_GET = 0x40044803 + IOCTL_MEI_NOTIFY_SET = 0x80044802 IOCTL_VM_SOCKETS_GET_LOCAL_CID = 0x200007b9 + IPV6_FLOWINFO_MASK = 0xfffffff + IPV6_FLOWLABEL_MASK = 0xfffff ISIG = 0x1 IUCLC = 0x200 IXOFF = 0x1000 @@ -153,9 +161,14 @@ const ( NFDBITS = 0x40 NLDLY = 0x100 NOFLSH = 0x80 + NS_GET_MNTNS_ID = 0x4008b705 NS_GET_NSTYPE = 0x2000b703 NS_GET_OWNER_UID = 0x2000b704 NS_GET_PARENT = 0x2000b702 + NS_GET_PID_FROM_PIDNS = 0x4004b706 + NS_GET_PID_IN_PIDNS = 0x4004b708 + NS_GET_TGID_FROM_PIDNS = 0x4004b707 + NS_GET_TGID_IN_PIDNS = 0x4004b709 NS_GET_USERNS = 0x2000b701 OLCUC = 0x2 ONLCR = 0x4 @@ -232,6 +245,20 @@ const ( PPPIOCUNBRIDGECHAN = 0x20007434 PPPIOCXFERUNIT = 0x2000744e PR_SET_PTRACER_ANY = 0xffffffffffffffff + PTP_CLOCK_GETCAPS = 0x40503d01 + PTP_CLOCK_GETCAPS2 = 0x40503d0a + PTP_ENABLE_PPS = 0x80043d04 + PTP_ENABLE_PPS2 = 0x80043d0d + PTP_EXTTS_REQUEST = 0x80103d02 + PTP_EXTTS_REQUEST2 = 0x80103d0b + PTP_MASK_CLEAR_ALL = 0x20003d13 + PTP_MASK_EN_SINGLE = 0x80043d14 + PTP_PEROUT_REQUEST = 0x80383d03 + PTP_PEROUT_REQUEST2 = 0x80383d0c + PTP_PIN_SETFUNC = 0x80603d07 + PTP_PIN_SETFUNC2 = 0x80603d10 + PTP_SYS_OFFSET = 0x83403d05 + PTP_SYS_OFFSET2 = 0x83403d0e PTRACE_GETFPAREGS = 0x14 PTRACE_GETFPREGS = 0xe PTRACE_GETFPREGS64 = 0x19 @@ -329,10 +356,13 @@ const ( RTC_WIE_ON = 0x2000700f RTC_WKALM_RD = 0x40287010 RTC_WKALM_SET = 0x8028700f + SCM_DEVMEM_DMABUF = 0x58 + SCM_DEVMEM_LINEAR = 0x57 SCM_TIMESTAMPING = 0x23 SCM_TIMESTAMPING_OPT_STATS = 0x38 SCM_TIMESTAMPING_PKTINFO = 0x3c SCM_TIMESTAMPNS = 0x21 + SCM_TS_OPT_ID = 0x5a SCM_TXTIME = 0x3f SCM_WIFI_STATUS = 0x25 SECCOMP_IOCTL_NOTIF_ADDFD = 0x80182103 @@ -415,6 +445,9 @@ const ( SO_CNX_ADVICE = 0x37 SO_COOKIE = 0x3b SO_DETACH_REUSEPORT_BPF = 0x47 + SO_DEVMEM_DMABUF = 0x58 + SO_DEVMEM_DONTNEED = 0x59 + SO_DEVMEM_LINEAR = 0x57 SO_DOMAIN = 0x1029 SO_DONTROUTE = 0x10 SO_ERROR = 0x1007 @@ -431,6 +464,7 @@ const ( SO_OOBINLINE = 0x100 SO_PASSCRED = 0x2 SO_PASSPIDFD = 0x55 + SO_PASSRIGHTS = 0x5c SO_PASSSEC = 0x1f SO_PEEK_OFF = 0x26 SO_PEERCRED = 0x40 @@ -443,6 +477,7 @@ const ( SO_RCVBUFFORCE = 0x100b SO_RCVLOWAT = 0x800 SO_RCVMARK = 0x54 + SO_RCVPRIORITY = 0x5b SO_RCVTIMEO = 0x2000 SO_RCVTIMEO_NEW = 0x44 SO_RCVTIMEO_OLD = 0x2000 diff --git a/vendor/golang.org/x/sys/unix/zerrors_zos_s390x.go b/vendor/golang.org/x/sys/unix/zerrors_zos_s390x.go index da08b2ab3d..1ec2b1407b 100644 --- a/vendor/golang.org/x/sys/unix/zerrors_zos_s390x.go +++ b/vendor/golang.org/x/sys/unix/zerrors_zos_s390x.go @@ -581,6 +581,8 @@ const ( AT_EMPTY_PATH = 0x1000 AT_REMOVEDIR = 0x200 RENAME_NOREPLACE = 1 << 0 + ST_RDONLY = 1 + ST_NOSUID = 2 ) const ( diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go index 07642c308d..813c05b664 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.go @@ -740,6 +740,54 @@ func ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func renamexNp(from string, to string, flag uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := syscall_syscall(libc_renamex_np_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(flag)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_renamex_np_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_renamex_np renamex_np "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func renameatxNp(fromfd int, from string, tofd int, to string, flag uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := syscall_syscall6(libc_renameatx_np_trampoline_addr, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), uintptr(flag), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_renameatx_np_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_renameatx_np renameatx_np "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { var _p0 unsafe.Pointer if len(mib) > 0 { @@ -793,6 +841,26 @@ var libc_pthread_fchdir_np_trampoline_addr uintptr // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func connectx(fd int, endpoints *SaEndpoints, associd SaeAssocID, flags uint32, iov []Iovec, n *uintptr, connid *SaeConnID) (err error) { + var _p0 unsafe.Pointer + if len(iov) > 0 { + _p0 = unsafe.Pointer(&iov[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := syscall_syscall9(libc_connectx_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(endpoints)), uintptr(associd), uintptr(flags), uintptr(_p0), uintptr(len(iov)), uintptr(unsafe.Pointer(n)), uintptr(unsafe.Pointer(connid)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_connectx_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_connectx connectx "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func sendfile(infd int, outfd int, offset int64, len *int64, hdtr unsafe.Pointer, flags int) (err error) { _, _, e1 := syscall_syscall6(libc_sendfile_trampoline_addr, uintptr(infd), uintptr(outfd), uintptr(offset), uintptr(unsafe.Pointer(len)), uintptr(hdtr), uintptr(flags)) if e1 != 0 { @@ -2444,6 +2512,90 @@ var libc_munmap_trampoline_addr uintptr // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func readv(fd int, iovecs []Iovec) (n int, err error) { + var _p0 unsafe.Pointer + if len(iovecs) > 0 { + _p0 = unsafe.Pointer(&iovecs[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := syscall_syscall(libc_readv_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(iovecs))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_readv_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_readv readv "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func preadv(fd int, iovecs []Iovec, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(iovecs) > 0 { + _p0 = unsafe.Pointer(&iovecs[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := syscall_syscall6(libc_preadv_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(iovecs)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_preadv_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_preadv preadv "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writev(fd int, iovecs []Iovec) (n int, err error) { + var _p0 unsafe.Pointer + if len(iovecs) > 0 { + _p0 = unsafe.Pointer(&iovecs[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := syscall_syscall(libc_writev_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(iovecs))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_writev_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_writev writev "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pwritev(fd int, iovecs []Iovec, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(iovecs) > 0 { + _p0 = unsafe.Pointer(&iovecs[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := syscall_syscall6(libc_pwritev_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(iovecs)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_pwritev_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_pwritev pwritev "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Fstat(fd int, stat *Stat_t) (err error) { _, _, e1 := syscall_syscall(libc_fstat64_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) if e1 != 0 { diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s b/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s index 923e08cb79..fda328582b 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s +++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_amd64.s @@ -223,6 +223,16 @@ TEXT libc_ioctl_trampoline<>(SB),NOSPLIT,$0-0 GLOBL ·libc_ioctl_trampoline_addr(SB), RODATA, $8 DATA ·libc_ioctl_trampoline_addr(SB)/8, $libc_ioctl_trampoline<>(SB) +TEXT libc_renamex_np_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_renamex_np(SB) +GLOBL ·libc_renamex_np_trampoline_addr(SB), RODATA, $8 +DATA ·libc_renamex_np_trampoline_addr(SB)/8, $libc_renamex_np_trampoline<>(SB) + +TEXT libc_renameatx_np_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_renameatx_np(SB) +GLOBL ·libc_renameatx_np_trampoline_addr(SB), RODATA, $8 +DATA ·libc_renameatx_np_trampoline_addr(SB)/8, $libc_renameatx_np_trampoline<>(SB) + TEXT libc_sysctl_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_sysctl(SB) GLOBL ·libc_sysctl_trampoline_addr(SB), RODATA, $8 @@ -238,6 +248,11 @@ TEXT libc_pthread_fchdir_np_trampoline<>(SB),NOSPLIT,$0-0 GLOBL ·libc_pthread_fchdir_np_trampoline_addr(SB), RODATA, $8 DATA ·libc_pthread_fchdir_np_trampoline_addr(SB)/8, $libc_pthread_fchdir_np_trampoline<>(SB) +TEXT libc_connectx_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_connectx(SB) +GLOBL ·libc_connectx_trampoline_addr(SB), RODATA, $8 +DATA ·libc_connectx_trampoline_addr(SB)/8, $libc_connectx_trampoline<>(SB) + TEXT libc_sendfile_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_sendfile(SB) GLOBL ·libc_sendfile_trampoline_addr(SB), RODATA, $8 @@ -723,6 +738,26 @@ TEXT libc_munmap_trampoline<>(SB),NOSPLIT,$0-0 GLOBL ·libc_munmap_trampoline_addr(SB), RODATA, $8 DATA ·libc_munmap_trampoline_addr(SB)/8, $libc_munmap_trampoline<>(SB) +TEXT libc_readv_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_readv(SB) +GLOBL ·libc_readv_trampoline_addr(SB), RODATA, $8 +DATA ·libc_readv_trampoline_addr(SB)/8, $libc_readv_trampoline<>(SB) + +TEXT libc_preadv_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_preadv(SB) +GLOBL ·libc_preadv_trampoline_addr(SB), RODATA, $8 +DATA ·libc_preadv_trampoline_addr(SB)/8, $libc_preadv_trampoline<>(SB) + +TEXT libc_writev_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_writev(SB) +GLOBL ·libc_writev_trampoline_addr(SB), RODATA, $8 +DATA ·libc_writev_trampoline_addr(SB)/8, $libc_writev_trampoline<>(SB) + +TEXT libc_pwritev_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_pwritev(SB) +GLOBL ·libc_pwritev_trampoline_addr(SB), RODATA, $8 +DATA ·libc_pwritev_trampoline_addr(SB)/8, $libc_pwritev_trampoline<>(SB) + TEXT libc_fstat64_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_fstat64(SB) GLOBL ·libc_fstat64_trampoline_addr(SB), RODATA, $8 diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go index 7d73dda647..e6f58f3c6f 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.go @@ -740,6 +740,54 @@ func ioctlPtr(fd int, req uint, arg unsafe.Pointer) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func renamexNp(from string, to string, flag uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := syscall_syscall(libc_renamex_np_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(flag)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_renamex_np_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_renamex_np renamex_np "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func renameatxNp(fromfd int, from string, tofd int, to string, flag uint32) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(from) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(to) + if err != nil { + return + } + _, _, e1 := syscall_syscall6(libc_renameatx_np_trampoline_addr, uintptr(fromfd), uintptr(unsafe.Pointer(_p0)), uintptr(tofd), uintptr(unsafe.Pointer(_p1)), uintptr(flag), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_renameatx_np_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_renameatx_np renameatx_np "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func sysctl(mib []_C_int, old *byte, oldlen *uintptr, new *byte, newlen uintptr) (err error) { var _p0 unsafe.Pointer if len(mib) > 0 { @@ -793,6 +841,26 @@ var libc_pthread_fchdir_np_trampoline_addr uintptr // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func connectx(fd int, endpoints *SaEndpoints, associd SaeAssocID, flags uint32, iov []Iovec, n *uintptr, connid *SaeConnID) (err error) { + var _p0 unsafe.Pointer + if len(iov) > 0 { + _p0 = unsafe.Pointer(&iov[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := syscall_syscall9(libc_connectx_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(endpoints)), uintptr(associd), uintptr(flags), uintptr(_p0), uintptr(len(iov)), uintptr(unsafe.Pointer(n)), uintptr(unsafe.Pointer(connid)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_connectx_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_connectx connectx "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func sendfile(infd int, outfd int, offset int64, len *int64, hdtr unsafe.Pointer, flags int) (err error) { _, _, e1 := syscall_syscall6(libc_sendfile_trampoline_addr, uintptr(infd), uintptr(outfd), uintptr(offset), uintptr(unsafe.Pointer(len)), uintptr(hdtr), uintptr(flags)) if e1 != 0 { @@ -2444,6 +2512,90 @@ var libc_munmap_trampoline_addr uintptr // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func readv(fd int, iovecs []Iovec) (n int, err error) { + var _p0 unsafe.Pointer + if len(iovecs) > 0 { + _p0 = unsafe.Pointer(&iovecs[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := syscall_syscall(libc_readv_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(iovecs))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_readv_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_readv readv "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func preadv(fd int, iovecs []Iovec, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(iovecs) > 0 { + _p0 = unsafe.Pointer(&iovecs[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := syscall_syscall6(libc_preadv_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(iovecs)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_preadv_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_preadv preadv "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func writev(fd int, iovecs []Iovec) (n int, err error) { + var _p0 unsafe.Pointer + if len(iovecs) > 0 { + _p0 = unsafe.Pointer(&iovecs[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := syscall_syscall(libc_writev_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(iovecs))) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_writev_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_writev writev "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func pwritev(fd int, iovecs []Iovec, offset int64) (n int, err error) { + var _p0 unsafe.Pointer + if len(iovecs) > 0 { + _p0 = unsafe.Pointer(&iovecs[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + r0, _, e1 := syscall_syscall6(libc_pwritev_trampoline_addr, uintptr(fd), uintptr(_p0), uintptr(len(iovecs)), uintptr(offset), 0, 0) + n = int(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_pwritev_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_pwritev pwritev "/usr/lib/libSystem.B.dylib" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Fstat(fd int, stat *Stat_t) (err error) { _, _, e1 := syscall_syscall(libc_fstat_trampoline_addr, uintptr(fd), uintptr(unsafe.Pointer(stat)), 0) if e1 != 0 { diff --git a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s index 057700111e..7f8998b905 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s +++ b/vendor/golang.org/x/sys/unix/zsyscall_darwin_arm64.s @@ -223,6 +223,16 @@ TEXT libc_ioctl_trampoline<>(SB),NOSPLIT,$0-0 GLOBL ·libc_ioctl_trampoline_addr(SB), RODATA, $8 DATA ·libc_ioctl_trampoline_addr(SB)/8, $libc_ioctl_trampoline<>(SB) +TEXT libc_renamex_np_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_renamex_np(SB) +GLOBL ·libc_renamex_np_trampoline_addr(SB), RODATA, $8 +DATA ·libc_renamex_np_trampoline_addr(SB)/8, $libc_renamex_np_trampoline<>(SB) + +TEXT libc_renameatx_np_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_renameatx_np(SB) +GLOBL ·libc_renameatx_np_trampoline_addr(SB), RODATA, $8 +DATA ·libc_renameatx_np_trampoline_addr(SB)/8, $libc_renameatx_np_trampoline<>(SB) + TEXT libc_sysctl_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_sysctl(SB) GLOBL ·libc_sysctl_trampoline_addr(SB), RODATA, $8 @@ -238,6 +248,11 @@ TEXT libc_pthread_fchdir_np_trampoline<>(SB),NOSPLIT,$0-0 GLOBL ·libc_pthread_fchdir_np_trampoline_addr(SB), RODATA, $8 DATA ·libc_pthread_fchdir_np_trampoline_addr(SB)/8, $libc_pthread_fchdir_np_trampoline<>(SB) +TEXT libc_connectx_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_connectx(SB) +GLOBL ·libc_connectx_trampoline_addr(SB), RODATA, $8 +DATA ·libc_connectx_trampoline_addr(SB)/8, $libc_connectx_trampoline<>(SB) + TEXT libc_sendfile_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_sendfile(SB) GLOBL ·libc_sendfile_trampoline_addr(SB), RODATA, $8 @@ -723,6 +738,26 @@ TEXT libc_munmap_trampoline<>(SB),NOSPLIT,$0-0 GLOBL ·libc_munmap_trampoline_addr(SB), RODATA, $8 DATA ·libc_munmap_trampoline_addr(SB)/8, $libc_munmap_trampoline<>(SB) +TEXT libc_readv_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_readv(SB) +GLOBL ·libc_readv_trampoline_addr(SB), RODATA, $8 +DATA ·libc_readv_trampoline_addr(SB)/8, $libc_readv_trampoline<>(SB) + +TEXT libc_preadv_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_preadv(SB) +GLOBL ·libc_preadv_trampoline_addr(SB), RODATA, $8 +DATA ·libc_preadv_trampoline_addr(SB)/8, $libc_preadv_trampoline<>(SB) + +TEXT libc_writev_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_writev(SB) +GLOBL ·libc_writev_trampoline_addr(SB), RODATA, $8 +DATA ·libc_writev_trampoline_addr(SB)/8, $libc_writev_trampoline<>(SB) + +TEXT libc_pwritev_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_pwritev(SB) +GLOBL ·libc_pwritev_trampoline_addr(SB), RODATA, $8 +DATA ·libc_pwritev_trampoline_addr(SB)/8, $libc_pwritev_trampoline<>(SB) + TEXT libc_fstat_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_fstat(SB) GLOBL ·libc_fstat_trampoline_addr(SB), RODATA, $8 diff --git a/vendor/golang.org/x/sys/unix/zsyscall_linux.go b/vendor/golang.org/x/sys/unix/zsyscall_linux.go index 87d8612a1d..8935d10a31 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_linux.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_linux.go @@ -592,6 +592,16 @@ func ClockGettime(clockid int32, time *Timespec) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func ClockSettime(clockid int32, time *Timespec) (err error) { + _, _, e1 := Syscall(SYS_CLOCK_SETTIME, uintptr(clockid), uintptr(unsafe.Pointer(time)), 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func ClockNanosleep(clockid int32, flags int, request *Timespec, remain *Timespec) (err error) { _, _, e1 := Syscall6(SYS_CLOCK_NANOSLEEP, uintptr(clockid), uintptr(flags), uintptr(unsafe.Pointer(request)), uintptr(unsafe.Pointer(remain)), 0, 0) if e1 != 0 { @@ -971,23 +981,6 @@ func Getpriority(which int, who int) (prio int, err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT -func Getrandom(buf []byte, flags int) (n int, err error) { - var _p0 unsafe.Pointer - if len(buf) > 0 { - _p0 = unsafe.Pointer(&buf[0]) - } else { - _p0 = unsafe.Pointer(&_zero) - } - r0, _, e1 := Syscall(SYS_GETRANDOM, uintptr(_p0), uintptr(len(buf)), uintptr(flags)) - n = int(r0) - if e1 != 0 { - err = errnoErr(e1) - } - return -} - -// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT - func Getrusage(who int, rusage *Rusage) (err error) { _, _, e1 := RawSyscall(SYS_GETRUSAGE, uintptr(who), uintptr(unsafe.Pointer(rusage)), 0) if e1 != 0 { @@ -2229,3 +2222,29 @@ func Cachestat(fd uint, crange *CachestatRange, cstat *Cachestat_t, flags uint) } return } + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func Mseal(b []byte, flags uint) (err error) { + var _p0 unsafe.Pointer + if len(b) > 0 { + _p0 = unsafe.Pointer(&b[0]) + } else { + _p0 = unsafe.Pointer(&_zero) + } + _, _, e1 := Syscall(SYS_MSEAL, uintptr(_p0), uintptr(len(b)), uintptr(flags)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func setMemPolicy(mode int, mask *CPUSet, size int) (err error) { + _, _, e1 := Syscall(SYS_SET_MEMPOLICY, uintptr(mode), uintptr(unsafe.Pointer(mask)), uintptr(size)) + if e1 != 0 { + err = errnoErr(e1) + } + return +} diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.go b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.go index 9dc42410b7..1851df14e8 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.go @@ -1493,6 +1493,30 @@ var libc_mknodat_trampoline_addr uintptr // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Mount(fsType string, dir string, flags int, data unsafe.Pointer) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(fsType) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(dir) + if err != nil { + return + } + _, _, e1 := syscall_syscall6(libc_mount_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(flags), uintptr(data), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_mount_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_mount mount "libc.so" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Nanosleep(time *Timespec, leftover *Timespec) (err error) { _, _, e1 := syscall_syscall(libc_nanosleep_trampoline_addr, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) if e1 != 0 { diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.s b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.s index 41b5617316..0b43c69365 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.s +++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_386.s @@ -463,6 +463,11 @@ TEXT libc_mknodat_trampoline<>(SB),NOSPLIT,$0-0 GLOBL ·libc_mknodat_trampoline_addr(SB), RODATA, $4 DATA ·libc_mknodat_trampoline_addr(SB)/4, $libc_mknodat_trampoline<>(SB) +TEXT libc_mount_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_mount(SB) +GLOBL ·libc_mount_trampoline_addr(SB), RODATA, $4 +DATA ·libc_mount_trampoline_addr(SB)/4, $libc_mount_trampoline<>(SB) + TEXT libc_nanosleep_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_nanosleep(SB) GLOBL ·libc_nanosleep_trampoline_addr(SB), RODATA, $4 diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.go index 0d3a0751cd..e1ec0dbe4e 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.go @@ -1493,6 +1493,30 @@ var libc_mknodat_trampoline_addr uintptr // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Mount(fsType string, dir string, flags int, data unsafe.Pointer) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(fsType) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(dir) + if err != nil { + return + } + _, _, e1 := syscall_syscall6(libc_mount_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(flags), uintptr(data), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_mount_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_mount mount "libc.so" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Nanosleep(time *Timespec, leftover *Timespec) (err error) { _, _, e1 := syscall_syscall(libc_nanosleep_trampoline_addr, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) if e1 != 0 { diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.s b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.s index 4019a656f6..880c6d6e31 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.s +++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_amd64.s @@ -463,6 +463,11 @@ TEXT libc_mknodat_trampoline<>(SB),NOSPLIT,$0-0 GLOBL ·libc_mknodat_trampoline_addr(SB), RODATA, $8 DATA ·libc_mknodat_trampoline_addr(SB)/8, $libc_mknodat_trampoline<>(SB) +TEXT libc_mount_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_mount(SB) +GLOBL ·libc_mount_trampoline_addr(SB), RODATA, $8 +DATA ·libc_mount_trampoline_addr(SB)/8, $libc_mount_trampoline<>(SB) + TEXT libc_nanosleep_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_nanosleep(SB) GLOBL ·libc_nanosleep_trampoline_addr(SB), RODATA, $8 diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.go b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.go index c39f7776db..7c8452a63e 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.go @@ -1493,6 +1493,30 @@ var libc_mknodat_trampoline_addr uintptr // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Mount(fsType string, dir string, flags int, data unsafe.Pointer) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(fsType) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(dir) + if err != nil { + return + } + _, _, e1 := syscall_syscall6(libc_mount_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(flags), uintptr(data), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_mount_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_mount mount "libc.so" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Nanosleep(time *Timespec, leftover *Timespec) (err error) { _, _, e1 := syscall_syscall(libc_nanosleep_trampoline_addr, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) if e1 != 0 { diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.s b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.s index ac4af24f90..b8ef95b0fa 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.s +++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm.s @@ -463,6 +463,11 @@ TEXT libc_mknodat_trampoline<>(SB),NOSPLIT,$0-0 GLOBL ·libc_mknodat_trampoline_addr(SB), RODATA, $4 DATA ·libc_mknodat_trampoline_addr(SB)/4, $libc_mknodat_trampoline<>(SB) +TEXT libc_mount_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_mount(SB) +GLOBL ·libc_mount_trampoline_addr(SB), RODATA, $4 +DATA ·libc_mount_trampoline_addr(SB)/4, $libc_mount_trampoline<>(SB) + TEXT libc_nanosleep_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_nanosleep(SB) GLOBL ·libc_nanosleep_trampoline_addr(SB), RODATA, $4 diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.go b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.go index 57571d072f..2ffdf861f7 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.go @@ -1493,6 +1493,30 @@ var libc_mknodat_trampoline_addr uintptr // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Mount(fsType string, dir string, flags int, data unsafe.Pointer) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(fsType) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(dir) + if err != nil { + return + } + _, _, e1 := syscall_syscall6(libc_mount_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(flags), uintptr(data), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_mount_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_mount mount "libc.so" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Nanosleep(time *Timespec, leftover *Timespec) (err error) { _, _, e1 := syscall_syscall(libc_nanosleep_trampoline_addr, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) if e1 != 0 { diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.s b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.s index f77d532121..2af3b5c762 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.s +++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_arm64.s @@ -463,6 +463,11 @@ TEXT libc_mknodat_trampoline<>(SB),NOSPLIT,$0-0 GLOBL ·libc_mknodat_trampoline_addr(SB), RODATA, $8 DATA ·libc_mknodat_trampoline_addr(SB)/8, $libc_mknodat_trampoline<>(SB) +TEXT libc_mount_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_mount(SB) +GLOBL ·libc_mount_trampoline_addr(SB), RODATA, $8 +DATA ·libc_mount_trampoline_addr(SB)/8, $libc_mount_trampoline<>(SB) + TEXT libc_nanosleep_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_nanosleep(SB) GLOBL ·libc_nanosleep_trampoline_addr(SB), RODATA, $8 diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_mips64.go b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_mips64.go index e62963e67e..1da08d5267 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_mips64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_mips64.go @@ -1493,6 +1493,30 @@ var libc_mknodat_trampoline_addr uintptr // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Mount(fsType string, dir string, flags int, data unsafe.Pointer) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(fsType) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(dir) + if err != nil { + return + } + _, _, e1 := syscall_syscall6(libc_mount_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(flags), uintptr(data), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_mount_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_mount mount "libc.so" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Nanosleep(time *Timespec, leftover *Timespec) (err error) { _, _, e1 := syscall_syscall(libc_nanosleep_trampoline_addr, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) if e1 != 0 { diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_mips64.s b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_mips64.s index fae140b62c..b7a251353b 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_mips64.s +++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_mips64.s @@ -463,6 +463,11 @@ TEXT libc_mknodat_trampoline<>(SB),NOSPLIT,$0-0 GLOBL ·libc_mknodat_trampoline_addr(SB), RODATA, $8 DATA ·libc_mknodat_trampoline_addr(SB)/8, $libc_mknodat_trampoline<>(SB) +TEXT libc_mount_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_mount(SB) +GLOBL ·libc_mount_trampoline_addr(SB), RODATA, $8 +DATA ·libc_mount_trampoline_addr(SB)/8, $libc_mount_trampoline<>(SB) + TEXT libc_nanosleep_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_nanosleep(SB) GLOBL ·libc_nanosleep_trampoline_addr(SB), RODATA, $8 diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_ppc64.go b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_ppc64.go index 00831354c8..6e85b0aac9 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_ppc64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_ppc64.go @@ -1493,6 +1493,30 @@ var libc_mknodat_trampoline_addr uintptr // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Mount(fsType string, dir string, flags int, data unsafe.Pointer) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(fsType) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(dir) + if err != nil { + return + } + _, _, e1 := syscall_syscall6(libc_mount_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(flags), uintptr(data), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_mount_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_mount mount "libc.so" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Nanosleep(time *Timespec, leftover *Timespec) (err error) { _, _, e1 := syscall_syscall(libc_nanosleep_trampoline_addr, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) if e1 != 0 { diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_ppc64.s b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_ppc64.s index 9d1e0ff06d..f15dadf055 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_ppc64.s +++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_ppc64.s @@ -555,6 +555,12 @@ TEXT libc_mknodat_trampoline<>(SB),NOSPLIT,$0-0 GLOBL ·libc_mknodat_trampoline_addr(SB), RODATA, $8 DATA ·libc_mknodat_trampoline_addr(SB)/8, $libc_mknodat_trampoline<>(SB) +TEXT libc_mount_trampoline<>(SB),NOSPLIT,$0-0 + CALL libc_mount(SB) + RET +GLOBL ·libc_mount_trampoline_addr(SB), RODATA, $8 +DATA ·libc_mount_trampoline_addr(SB)/8, $libc_mount_trampoline<>(SB) + TEXT libc_nanosleep_trampoline<>(SB),NOSPLIT,$0-0 CALL libc_nanosleep(SB) RET diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_riscv64.go b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_riscv64.go index 79029ed584..28b487df25 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_riscv64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_riscv64.go @@ -1493,6 +1493,30 @@ var libc_mknodat_trampoline_addr uintptr // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func Mount(fsType string, dir string, flags int, data unsafe.Pointer) (err error) { + var _p0 *byte + _p0, err = BytePtrFromString(fsType) + if err != nil { + return + } + var _p1 *byte + _p1, err = BytePtrFromString(dir) + if err != nil { + return + } + _, _, e1 := syscall_syscall6(libc_mount_trampoline_addr, uintptr(unsafe.Pointer(_p0)), uintptr(unsafe.Pointer(_p1)), uintptr(flags), uintptr(data), 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +var libc_mount_trampoline_addr uintptr + +//go:cgo_import_dynamic libc_mount mount "libc.so" + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func Nanosleep(time *Timespec, leftover *Timespec) (err error) { _, _, e1 := syscall_syscall(libc_nanosleep_trampoline_addr, uintptr(unsafe.Pointer(time)), uintptr(unsafe.Pointer(leftover)), 0) if e1 != 0 { diff --git a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_riscv64.s b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_riscv64.s index da115f9a4b..1e7f321e43 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_openbsd_riscv64.s +++ b/vendor/golang.org/x/sys/unix/zsyscall_openbsd_riscv64.s @@ -463,6 +463,11 @@ TEXT libc_mknodat_trampoline<>(SB),NOSPLIT,$0-0 GLOBL ·libc_mknodat_trampoline_addr(SB), RODATA, $8 DATA ·libc_mknodat_trampoline_addr(SB)/8, $libc_mknodat_trampoline<>(SB) +TEXT libc_mount_trampoline<>(SB),NOSPLIT,$0-0 + JMP libc_mount(SB) +GLOBL ·libc_mount_trampoline_addr(SB), RODATA, $8 +DATA ·libc_mount_trampoline_addr(SB)/8, $libc_mount_trampoline<>(SB) + TEXT libc_nanosleep_trampoline<>(SB),NOSPLIT,$0-0 JMP libc_nanosleep(SB) GLOBL ·libc_nanosleep_trampoline_addr(SB), RODATA, $8 diff --git a/vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go b/vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go index 829b87feb8..b4609c20c2 100644 --- a/vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go +++ b/vendor/golang.org/x/sys/unix/zsyscall_solaris_amd64.go @@ -72,7 +72,7 @@ import ( //go:cgo_import_dynamic libc_kill kill "libc.so" //go:cgo_import_dynamic libc_lchown lchown "libc.so" //go:cgo_import_dynamic libc_link link "libc.so" -//go:cgo_import_dynamic libc___xnet_llisten __xnet_llisten "libsocket.so" +//go:cgo_import_dynamic libc___xnet_listen __xnet_listen "libsocket.so" //go:cgo_import_dynamic libc_lstat lstat "libc.so" //go:cgo_import_dynamic libc_madvise madvise "libc.so" //go:cgo_import_dynamic libc_mkdir mkdir "libc.so" @@ -141,6 +141,16 @@ import ( //go:cgo_import_dynamic libc_getpeername getpeername "libsocket.so" //go:cgo_import_dynamic libc_setsockopt setsockopt "libsocket.so" //go:cgo_import_dynamic libc_recvfrom recvfrom "libsocket.so" +//go:cgo_import_dynamic libc_getpeerucred getpeerucred "libc.so" +//go:cgo_import_dynamic libc_ucred_get ucred_get "libc.so" +//go:cgo_import_dynamic libc_ucred_geteuid ucred_geteuid "libc.so" +//go:cgo_import_dynamic libc_ucred_getegid ucred_getegid "libc.so" +//go:cgo_import_dynamic libc_ucred_getruid ucred_getruid "libc.so" +//go:cgo_import_dynamic libc_ucred_getrgid ucred_getrgid "libc.so" +//go:cgo_import_dynamic libc_ucred_getsuid ucred_getsuid "libc.so" +//go:cgo_import_dynamic libc_ucred_getsgid ucred_getsgid "libc.so" +//go:cgo_import_dynamic libc_ucred_getpid ucred_getpid "libc.so" +//go:cgo_import_dynamic libc_ucred_free ucred_free "libc.so" //go:cgo_import_dynamic libc_port_create port_create "libc.so" //go:cgo_import_dynamic libc_port_associate port_associate "libc.so" //go:cgo_import_dynamic libc_port_dissociate port_dissociate "libc.so" @@ -211,7 +221,7 @@ import ( //go:linkname procKill libc_kill //go:linkname procLchown libc_lchown //go:linkname procLink libc_link -//go:linkname proc__xnet_llisten libc___xnet_llisten +//go:linkname proc__xnet_listen libc___xnet_listen //go:linkname procLstat libc_lstat //go:linkname procMadvise libc_madvise //go:linkname procMkdir libc_mkdir @@ -280,6 +290,16 @@ import ( //go:linkname procgetpeername libc_getpeername //go:linkname procsetsockopt libc_setsockopt //go:linkname procrecvfrom libc_recvfrom +//go:linkname procgetpeerucred libc_getpeerucred +//go:linkname procucred_get libc_ucred_get +//go:linkname procucred_geteuid libc_ucred_geteuid +//go:linkname procucred_getegid libc_ucred_getegid +//go:linkname procucred_getruid libc_ucred_getruid +//go:linkname procucred_getrgid libc_ucred_getrgid +//go:linkname procucred_getsuid libc_ucred_getsuid +//go:linkname procucred_getsgid libc_ucred_getsgid +//go:linkname procucred_getpid libc_ucred_getpid +//go:linkname procucred_free libc_ucred_free //go:linkname procport_create libc_port_create //go:linkname procport_associate libc_port_associate //go:linkname procport_dissociate libc_port_dissociate @@ -351,7 +371,7 @@ var ( procKill, procLchown, procLink, - proc__xnet_llisten, + proc__xnet_listen, procLstat, procMadvise, procMkdir, @@ -420,6 +440,16 @@ var ( procgetpeername, procsetsockopt, procrecvfrom, + procgetpeerucred, + procucred_get, + procucred_geteuid, + procucred_getegid, + procucred_getruid, + procucred_getrgid, + procucred_getsuid, + procucred_getsgid, + procucred_getpid, + procucred_free, procport_create, procport_associate, procport_dissociate, @@ -1148,7 +1178,7 @@ func Link(path string, link string) (err error) { // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT func Listen(s int, backlog int) (err error) { - _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proc__xnet_llisten)), 2, uintptr(s), uintptr(backlog), 0, 0, 0, 0) + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&proc__xnet_listen)), 2, uintptr(s), uintptr(backlog), 0, 0, 0, 0) if e1 != 0 { err = errnoErr(e1) } @@ -2029,6 +2059,90 @@ func recvfrom(fd int, p []byte, flags int, from *RawSockaddrAny, fromlen *_Sockl // THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT +func getpeerucred(fd uintptr, ucred *uintptr) (err error) { + _, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procgetpeerucred)), 2, uintptr(fd), uintptr(unsafe.Pointer(ucred)), 0, 0, 0, 0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ucredGet(pid int) (ucred uintptr, err error) { + r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procucred_get)), 1, uintptr(pid), 0, 0, 0, 0, 0) + ucred = uintptr(r0) + if e1 != 0 { + err = errnoErr(e1) + } + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ucredGeteuid(ucred uintptr) (uid int) { + r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&procucred_geteuid)), 1, uintptr(ucred), 0, 0, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ucredGetegid(ucred uintptr) (gid int) { + r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&procucred_getegid)), 1, uintptr(ucred), 0, 0, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ucredGetruid(ucred uintptr) (uid int) { + r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&procucred_getruid)), 1, uintptr(ucred), 0, 0, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ucredGetrgid(ucred uintptr) (gid int) { + r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&procucred_getrgid)), 1, uintptr(ucred), 0, 0, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ucredGetsuid(ucred uintptr) (uid int) { + r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&procucred_getsuid)), 1, uintptr(ucred), 0, 0, 0, 0, 0) + uid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ucredGetsgid(ucred uintptr) (gid int) { + r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&procucred_getsgid)), 1, uintptr(ucred), 0, 0, 0, 0, 0) + gid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ucredGetpid(ucred uintptr) (pid int) { + r0, _, _ := sysvicall6(uintptr(unsafe.Pointer(&procucred_getpid)), 1, uintptr(ucred), 0, 0, 0, 0, 0) + pid = int(r0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + +func ucredFree(ucred uintptr) { + sysvicall6(uintptr(unsafe.Pointer(&procucred_free)), 1, uintptr(ucred), 0, 0, 0, 0, 0) + return +} + +// THIS FILE IS GENERATED BY THE COMMAND AT THE TOP; DO NOT EDIT + func port_create() (n int, err error) { r0, _, e1 := sysvicall6(uintptr(unsafe.Pointer(&procport_create)), 0, 0, 0, 0, 0, 0, 0) n = int(r0) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_386.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_386.go index 53aef5dc58..aca56ee494 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_386.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_386.go @@ -457,4 +457,10 @@ const ( SYS_LSM_GET_SELF_ATTR = 459 SYS_LSM_SET_SELF_ATTR = 460 SYS_LSM_LIST_MODULES = 461 + SYS_MSEAL = 462 + SYS_SETXATTRAT = 463 + SYS_GETXATTRAT = 464 + SYS_LISTXATTRAT = 465 + SYS_REMOVEXATTRAT = 466 + SYS_OPEN_TREE_ATTR = 467 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go index 71d524763d..2ea1ef58c3 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_amd64.go @@ -341,6 +341,7 @@ const ( SYS_STATX = 332 SYS_IO_PGETEVENTS = 333 SYS_RSEQ = 334 + SYS_URETPROBE = 335 SYS_PIDFD_SEND_SIGNAL = 424 SYS_IO_URING_SETUP = 425 SYS_IO_URING_ENTER = 426 @@ -379,4 +380,10 @@ const ( SYS_LSM_GET_SELF_ATTR = 459 SYS_LSM_SET_SELF_ATTR = 460 SYS_LSM_LIST_MODULES = 461 + SYS_MSEAL = 462 + SYS_SETXATTRAT = 463 + SYS_GETXATTRAT = 464 + SYS_LISTXATTRAT = 465 + SYS_REMOVEXATTRAT = 466 + SYS_OPEN_TREE_ATTR = 467 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go index c747706131..d22c8af319 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_arm.go @@ -421,4 +421,10 @@ const ( SYS_LSM_GET_SELF_ATTR = 459 SYS_LSM_SET_SELF_ATTR = 460 SYS_LSM_LIST_MODULES = 461 + SYS_MSEAL = 462 + SYS_SETXATTRAT = 463 + SYS_GETXATTRAT = 464 + SYS_LISTXATTRAT = 465 + SYS_REMOVEXATTRAT = 466 + SYS_OPEN_TREE_ATTR = 467 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go index f96e214f6d..5ee264ae97 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_arm64.go @@ -85,7 +85,7 @@ const ( SYS_SPLICE = 76 SYS_TEE = 77 SYS_READLINKAT = 78 - SYS_FSTATAT = 79 + SYS_NEWFSTATAT = 79 SYS_FSTAT = 80 SYS_SYNC = 81 SYS_FSYNC = 82 @@ -324,4 +324,10 @@ const ( SYS_LSM_GET_SELF_ATTR = 459 SYS_LSM_SET_SELF_ATTR = 460 SYS_LSM_LIST_MODULES = 461 + SYS_MSEAL = 462 + SYS_SETXATTRAT = 463 + SYS_GETXATTRAT = 464 + SYS_LISTXATTRAT = 465 + SYS_REMOVEXATTRAT = 466 + SYS_OPEN_TREE_ATTR = 467 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_loong64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_loong64.go index 28425346cf..f9f03ebf5f 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_loong64.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_loong64.go @@ -84,6 +84,8 @@ const ( SYS_SPLICE = 76 SYS_TEE = 77 SYS_READLINKAT = 78 + SYS_NEWFSTATAT = 79 + SYS_FSTAT = 80 SYS_SYNC = 81 SYS_FSYNC = 82 SYS_FDATASYNC = 83 @@ -318,4 +320,10 @@ const ( SYS_LSM_GET_SELF_ATTR = 459 SYS_LSM_SET_SELF_ATTR = 460 SYS_LSM_LIST_MODULES = 461 + SYS_MSEAL = 462 + SYS_SETXATTRAT = 463 + SYS_GETXATTRAT = 464 + SYS_LISTXATTRAT = 465 + SYS_REMOVEXATTRAT = 466 + SYS_OPEN_TREE_ATTR = 467 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go index d0953018da..87c2118e84 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips.go @@ -441,4 +441,10 @@ const ( SYS_LSM_GET_SELF_ATTR = 4459 SYS_LSM_SET_SELF_ATTR = 4460 SYS_LSM_LIST_MODULES = 4461 + SYS_MSEAL = 4462 + SYS_SETXATTRAT = 4463 + SYS_GETXATTRAT = 4464 + SYS_LISTXATTRAT = 4465 + SYS_REMOVEXATTRAT = 4466 + SYS_OPEN_TREE_ATTR = 4467 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go index 295c7f4b81..391ad102fb 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64.go @@ -371,4 +371,10 @@ const ( SYS_LSM_GET_SELF_ATTR = 5459 SYS_LSM_SET_SELF_ATTR = 5460 SYS_LSM_LIST_MODULES = 5461 + SYS_MSEAL = 5462 + SYS_SETXATTRAT = 5463 + SYS_GETXATTRAT = 5464 + SYS_LISTXATTRAT = 5465 + SYS_REMOVEXATTRAT = 5466 + SYS_OPEN_TREE_ATTR = 5467 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go index d1a9eaca7a..5656157757 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_mips64le.go @@ -371,4 +371,10 @@ const ( SYS_LSM_GET_SELF_ATTR = 5459 SYS_LSM_SET_SELF_ATTR = 5460 SYS_LSM_LIST_MODULES = 5461 + SYS_MSEAL = 5462 + SYS_SETXATTRAT = 5463 + SYS_GETXATTRAT = 5464 + SYS_LISTXATTRAT = 5465 + SYS_REMOVEXATTRAT = 5466 + SYS_OPEN_TREE_ATTR = 5467 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go index bec157c39f..0482b52e3c 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_mipsle.go @@ -441,4 +441,10 @@ const ( SYS_LSM_GET_SELF_ATTR = 4459 SYS_LSM_SET_SELF_ATTR = 4460 SYS_LSM_LIST_MODULES = 4461 + SYS_MSEAL = 4462 + SYS_SETXATTRAT = 4463 + SYS_GETXATTRAT = 4464 + SYS_LISTXATTRAT = 4465 + SYS_REMOVEXATTRAT = 4466 + SYS_OPEN_TREE_ATTR = 4467 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc.go index 7ee7bdc435..71806f08f3 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc.go @@ -448,4 +448,10 @@ const ( SYS_LSM_GET_SELF_ATTR = 459 SYS_LSM_SET_SELF_ATTR = 460 SYS_LSM_LIST_MODULES = 461 + SYS_MSEAL = 462 + SYS_SETXATTRAT = 463 + SYS_GETXATTRAT = 464 + SYS_LISTXATTRAT = 465 + SYS_REMOVEXATTRAT = 466 + SYS_OPEN_TREE_ATTR = 467 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go index fad1f25b44..e35a710582 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64.go @@ -420,4 +420,10 @@ const ( SYS_LSM_GET_SELF_ATTR = 459 SYS_LSM_SET_SELF_ATTR = 460 SYS_LSM_LIST_MODULES = 461 + SYS_MSEAL = 462 + SYS_SETXATTRAT = 463 + SYS_GETXATTRAT = 464 + SYS_LISTXATTRAT = 465 + SYS_REMOVEXATTRAT = 466 + SYS_OPEN_TREE_ATTR = 467 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go index 7d3e16357d..2aea476705 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_ppc64le.go @@ -420,4 +420,10 @@ const ( SYS_LSM_GET_SELF_ATTR = 459 SYS_LSM_SET_SELF_ATTR = 460 SYS_LSM_LIST_MODULES = 461 + SYS_MSEAL = 462 + SYS_SETXATTRAT = 463 + SYS_GETXATTRAT = 464 + SYS_LISTXATTRAT = 465 + SYS_REMOVEXATTRAT = 466 + SYS_OPEN_TREE_ATTR = 467 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go index 0ed53ad9f7..6c9bb4e560 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_riscv64.go @@ -84,7 +84,7 @@ const ( SYS_SPLICE = 76 SYS_TEE = 77 SYS_READLINKAT = 78 - SYS_FSTATAT = 79 + SYS_NEWFSTATAT = 79 SYS_FSTAT = 80 SYS_SYNC = 81 SYS_FSYNC = 82 @@ -325,4 +325,10 @@ const ( SYS_LSM_GET_SELF_ATTR = 459 SYS_LSM_SET_SELF_ATTR = 460 SYS_LSM_LIST_MODULES = 461 + SYS_MSEAL = 462 + SYS_SETXATTRAT = 463 + SYS_GETXATTRAT = 464 + SYS_LISTXATTRAT = 465 + SYS_REMOVEXATTRAT = 466 + SYS_OPEN_TREE_ATTR = 467 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go index 2fba04ad50..680bc9915a 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_s390x.go @@ -386,4 +386,10 @@ const ( SYS_LSM_GET_SELF_ATTR = 459 SYS_LSM_SET_SELF_ATTR = 460 SYS_LSM_LIST_MODULES = 461 + SYS_MSEAL = 462 + SYS_SETXATTRAT = 463 + SYS_GETXATTRAT = 464 + SYS_LISTXATTRAT = 465 + SYS_REMOVEXATTRAT = 466 + SYS_OPEN_TREE_ATTR = 467 ) diff --git a/vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go b/vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go index 621d00d741..620f271052 100644 --- a/vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go +++ b/vendor/golang.org/x/sys/unix/zsysnum_linux_sparc64.go @@ -399,4 +399,10 @@ const ( SYS_LSM_GET_SELF_ATTR = 459 SYS_LSM_SET_SELF_ATTR = 460 SYS_LSM_LIST_MODULES = 461 + SYS_MSEAL = 462 + SYS_SETXATTRAT = 463 + SYS_GETXATTRAT = 464 + SYS_LISTXATTRAT = 465 + SYS_REMOVEXATTRAT = 466 + SYS_OPEN_TREE_ATTR = 467 ) diff --git a/vendor/golang.org/x/sys/unix/ztypes_darwin_amd64.go b/vendor/golang.org/x/sys/unix/ztypes_darwin_amd64.go index 091d107f3a..17c53bd9b3 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_darwin_amd64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_darwin_amd64.go @@ -306,6 +306,19 @@ type XVSockPgen struct { type _Socklen uint32 +type SaeAssocID uint32 + +type SaeConnID uint32 + +type SaEndpoints struct { + Srcif uint32 + Srcaddr *RawSockaddr + Srcaddrlen uint32 + Dstaddr *RawSockaddr + Dstaddrlen uint32 + _ [4]byte +} + type Xucred struct { Version uint32 Uid uint32 @@ -449,11 +462,14 @@ type FdSet struct { const ( SizeofIfMsghdr = 0x70 + SizeofIfMsghdr2 = 0xa0 SizeofIfData = 0x60 + SizeofIfData64 = 0x80 SizeofIfaMsghdr = 0x14 SizeofIfmaMsghdr = 0x10 SizeofIfmaMsghdr2 = 0x14 SizeofRtMsghdr = 0x5c + SizeofRtMsghdr2 = 0x5c SizeofRtMetrics = 0x38 ) @@ -467,6 +483,20 @@ type IfMsghdr struct { Data IfData } +type IfMsghdr2 struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Snd_len int32 + Snd_maxlen int32 + Snd_drops int32 + Timer int32 + Data IfData64 +} + type IfData struct { Type uint8 Typelen uint8 @@ -499,6 +529,34 @@ type IfData struct { Reserved2 uint32 } +type IfData64 struct { + Type uint8 + Typelen uint8 + Physical uint8 + Addrlen uint8 + Hdrlen uint8 + Recvquota uint8 + Xmitquota uint8 + Unused1 uint8 + Mtu uint32 + Metric uint32 + Baudrate uint64 + Ipackets uint64 + Ierrors uint64 + Opackets uint64 + Oerrors uint64 + Collisions uint64 + Ibytes uint64 + Obytes uint64 + Imcasts uint64 + Omcasts uint64 + Iqdrops uint64 + Noproto uint64 + Recvtiming uint32 + Xmittiming uint32 + Lastchange Timeval32 +} + type IfaMsghdr struct { Msglen uint16 Version uint8 @@ -544,6 +602,21 @@ type RtMsghdr struct { Rmx RtMetrics } +type RtMsghdr2 struct { + Msglen uint16 + Version uint8 + Type uint8 + Index uint16 + Flags int32 + Addrs int32 + Refcnt int32 + Parentflags int32 + Reserved int32 + Use int32 + Inits uint32 + Rmx RtMetrics +} + type RtMetrics struct { Locks uint32 Mtu uint32 diff --git a/vendor/golang.org/x/sys/unix/ztypes_darwin_arm64.go b/vendor/golang.org/x/sys/unix/ztypes_darwin_arm64.go index 28ff4ef74d..2392226a74 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_darwin_arm64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_darwin_arm64.go @@ -306,6 +306,19 @@ type XVSockPgen struct { type _Socklen uint32 +type SaeAssocID uint32 + +type SaeConnID uint32 + +type SaEndpoints struct { + Srcif uint32 + Srcaddr *RawSockaddr + Srcaddrlen uint32 + Dstaddr *RawSockaddr + Dstaddrlen uint32 + _ [4]byte +} + type Xucred struct { Version uint32 Uid uint32 @@ -449,11 +462,14 @@ type FdSet struct { const ( SizeofIfMsghdr = 0x70 + SizeofIfMsghdr2 = 0xa0 SizeofIfData = 0x60 + SizeofIfData64 = 0x80 SizeofIfaMsghdr = 0x14 SizeofIfmaMsghdr = 0x10 SizeofIfmaMsghdr2 = 0x14 SizeofRtMsghdr = 0x5c + SizeofRtMsghdr2 = 0x5c SizeofRtMetrics = 0x38 ) @@ -467,6 +483,20 @@ type IfMsghdr struct { Data IfData } +type IfMsghdr2 struct { + Msglen uint16 + Version uint8 + Type uint8 + Addrs int32 + Flags int32 + Index uint16 + Snd_len int32 + Snd_maxlen int32 + Snd_drops int32 + Timer int32 + Data IfData64 +} + type IfData struct { Type uint8 Typelen uint8 @@ -499,6 +529,34 @@ type IfData struct { Reserved2 uint32 } +type IfData64 struct { + Type uint8 + Typelen uint8 + Physical uint8 + Addrlen uint8 + Hdrlen uint8 + Recvquota uint8 + Xmitquota uint8 + Unused1 uint8 + Mtu uint32 + Metric uint32 + Baudrate uint64 + Ipackets uint64 + Ierrors uint64 + Opackets uint64 + Oerrors uint64 + Collisions uint64 + Ibytes uint64 + Obytes uint64 + Imcasts uint64 + Omcasts uint64 + Iqdrops uint64 + Noproto uint64 + Recvtiming uint32 + Xmittiming uint32 + Lastchange Timeval32 +} + type IfaMsghdr struct { Msglen uint16 Version uint8 @@ -544,6 +602,21 @@ type RtMsghdr struct { Rmx RtMetrics } +type RtMsghdr2 struct { + Msglen uint16 + Version uint8 + Type uint8 + Index uint16 + Flags int32 + Addrs int32 + Refcnt int32 + Parentflags int32 + Reserved int32 + Use int32 + Inits uint32 + Rmx RtMetrics +} + type RtMetrics struct { Locks uint32 Mtu uint32 diff --git a/vendor/golang.org/x/sys/unix/ztypes_freebsd_386.go b/vendor/golang.org/x/sys/unix/ztypes_freebsd_386.go index 6cbd094a3a..51e13eb055 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_freebsd_386.go +++ b/vendor/golang.org/x/sys/unix/ztypes_freebsd_386.go @@ -625,6 +625,7 @@ const ( POLLRDNORM = 0x40 POLLWRBAND = 0x100 POLLWRNORM = 0x4 + POLLRDHUP = 0x4000 ) type CapRights struct { diff --git a/vendor/golang.org/x/sys/unix/ztypes_freebsd_amd64.go b/vendor/golang.org/x/sys/unix/ztypes_freebsd_amd64.go index 7c03b6ee77..d002d8ef3c 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_freebsd_amd64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_freebsd_amd64.go @@ -630,6 +630,7 @@ const ( POLLRDNORM = 0x40 POLLWRBAND = 0x100 POLLWRNORM = 0x4 + POLLRDHUP = 0x4000 ) type CapRights struct { diff --git a/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm.go b/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm.go index 422107ee8b..3f863d898d 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm.go +++ b/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm.go @@ -616,6 +616,7 @@ const ( POLLRDNORM = 0x40 POLLWRBAND = 0x100 POLLWRNORM = 0x4 + POLLRDHUP = 0x4000 ) type CapRights struct { diff --git a/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm64.go b/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm64.go index 505a12acfd..61c7293106 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_freebsd_arm64.go @@ -610,6 +610,7 @@ const ( POLLRDNORM = 0x40 POLLWRBAND = 0x100 POLLWRNORM = 0x4 + POLLRDHUP = 0x4000 ) type CapRights struct { diff --git a/vendor/golang.org/x/sys/unix/ztypes_freebsd_riscv64.go b/vendor/golang.org/x/sys/unix/ztypes_freebsd_riscv64.go index cc986c7900..b5d17414f0 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_freebsd_riscv64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_freebsd_riscv64.go @@ -612,6 +612,7 @@ const ( POLLRDNORM = 0x40 POLLWRBAND = 0x100 POLLWRNORM = 0x4 + POLLRDHUP = 0x4000 ) type CapRights struct { diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux.go b/vendor/golang.org/x/sys/unix/ztypes_linux.go index 4740b83485..c1a4670171 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux.go @@ -87,30 +87,37 @@ type StatxTimestamp struct { } type Statx_t struct { - Mask uint32 - Blksize uint32 - Attributes uint64 - Nlink uint32 - Uid uint32 - Gid uint32 - Mode uint16 - _ [1]uint16 - Ino uint64 - Size uint64 - Blocks uint64 - Attributes_mask uint64 - Atime StatxTimestamp - Btime StatxTimestamp - Ctime StatxTimestamp - Mtime StatxTimestamp - Rdev_major uint32 - Rdev_minor uint32 - Dev_major uint32 - Dev_minor uint32 - Mnt_id uint64 - Dio_mem_align uint32 - Dio_offset_align uint32 - _ [12]uint64 + Mask uint32 + Blksize uint32 + Attributes uint64 + Nlink uint32 + Uid uint32 + Gid uint32 + Mode uint16 + _ [1]uint16 + Ino uint64 + Size uint64 + Blocks uint64 + Attributes_mask uint64 + Atime StatxTimestamp + Btime StatxTimestamp + Ctime StatxTimestamp + Mtime StatxTimestamp + Rdev_major uint32 + Rdev_minor uint32 + Dev_major uint32 + Dev_minor uint32 + Mnt_id uint64 + Dio_mem_align uint32 + Dio_offset_align uint32 + Subvol uint64 + Atomic_write_unit_min uint32 + Atomic_write_unit_max uint32 + Atomic_write_segments_max uint32 + Dio_read_offset_align uint32 + Atomic_write_unit_max_opt uint32 + _ [1]uint32 + _ [8]uint64 } type Fsid struct { @@ -194,7 +201,8 @@ type FscryptAddKeyArg struct { Key_spec FscryptKeySpecifier Raw_size uint32 Key_id uint32 - _ [8]uint32 + Flags uint32 + _ [7]uint32 } type FscryptRemoveKeyArg struct { @@ -515,6 +523,29 @@ type TCPInfo struct { Total_rto_time uint32 } +type TCPVegasInfo struct { + Enabled uint32 + Rttcnt uint32 + Rtt uint32 + Minrtt uint32 +} + +type TCPDCTCPInfo struct { + Enabled uint16 + Ce_state uint16 + Alpha uint32 + Ab_ecn uint32 + Ab_tot uint32 +} + +type TCPBBRInfo struct { + Bw_lo uint32 + Bw_hi uint32 + Min_rtt uint32 + Pacing_gain uint32 + Cwnd_gain uint32 +} + type CanFilter struct { Id uint32 Mask uint32 @@ -556,6 +587,7 @@ const ( SizeofICMPv6Filter = 0x20 SizeofUcred = 0xc SizeofTCPInfo = 0xf8 + SizeofTCPCCInfo = 0x14 SizeofCanFilter = 0x8 SizeofTCPRepairOpt = 0x8 ) @@ -600,6 +632,8 @@ const ( IFA_FLAGS = 0x8 IFA_RT_PRIORITY = 0x9 IFA_TARGET_NETNSID = 0xa + IFAL_LABEL = 0x2 + IFAL_ADDRESS = 0x1 RT_SCOPE_UNIVERSE = 0x0 RT_SCOPE_SITE = 0xc8 RT_SCOPE_LINK = 0xfd @@ -657,6 +691,7 @@ const ( SizeofRtAttr = 0x4 SizeofIfInfomsg = 0x10 SizeofIfAddrmsg = 0x8 + SizeofIfAddrlblmsg = 0xc SizeofIfaCacheinfo = 0x10 SizeofRtMsg = 0xc SizeofRtNexthop = 0x8 @@ -708,6 +743,15 @@ type IfAddrmsg struct { Index uint32 } +type IfAddrlblmsg struct { + Family uint8 + _ uint8 + Prefixlen uint8 + Flags uint8 + Index uint32 + Seq uint32 +} + type IfaCacheinfo struct { Prefered uint32 Valid uint32 @@ -1723,12 +1767,6 @@ const ( IFLA_IPVLAN_UNSPEC = 0x0 IFLA_IPVLAN_MODE = 0x1 IFLA_IPVLAN_FLAGS = 0x2 - NETKIT_NEXT = -0x1 - NETKIT_PASS = 0x0 - NETKIT_DROP = 0x2 - NETKIT_REDIRECT = 0x7 - NETKIT_L2 = 0x0 - NETKIT_L3 = 0x1 IFLA_NETKIT_UNSPEC = 0x0 IFLA_NETKIT_PEER_INFO = 0x1 IFLA_NETKIT_PRIMARY = 0x2 @@ -1767,6 +1805,7 @@ const ( IFLA_VXLAN_DF = 0x1d IFLA_VXLAN_VNIFILTER = 0x1e IFLA_VXLAN_LOCALBYPASS = 0x1f + IFLA_VXLAN_LABEL_POLICY = 0x20 IFLA_GENEVE_UNSPEC = 0x0 IFLA_GENEVE_ID = 0x1 IFLA_GENEVE_REMOTE = 0x2 @@ -1796,6 +1835,8 @@ const ( IFLA_GTP_ROLE = 0x4 IFLA_GTP_CREATE_SOCKETS = 0x5 IFLA_GTP_RESTART_COUNT = 0x6 + IFLA_GTP_LOCAL = 0x7 + IFLA_GTP_LOCAL6 = 0x8 IFLA_BOND_UNSPEC = 0x0 IFLA_BOND_MODE = 0x1 IFLA_BOND_ACTIVE_SLAVE = 0x2 @@ -1828,6 +1869,7 @@ const ( IFLA_BOND_AD_LACP_ACTIVE = 0x1d IFLA_BOND_MISSED_MAX = 0x1e IFLA_BOND_NS_IP6_TARGET = 0x1f + IFLA_BOND_COUPLED_CONTROL = 0x20 IFLA_BOND_AD_INFO_UNSPEC = 0x0 IFLA_BOND_AD_INFO_AGGREGATOR = 0x1 IFLA_BOND_AD_INFO_NUM_PORTS = 0x2 @@ -1896,6 +1938,7 @@ const ( IFLA_HSR_SEQ_NR = 0x5 IFLA_HSR_VERSION = 0x6 IFLA_HSR_PROTOCOL = 0x7 + IFLA_HSR_INTERLINK = 0x8 IFLA_STATS_UNSPEC = 0x0 IFLA_STATS_LINK_64 = 0x1 IFLA_STATS_LINK_XSTATS = 0x2 @@ -1948,6 +1991,15 @@ const ( IFLA_DSA_MASTER = 0x1 ) +const ( + NETKIT_NEXT = -0x1 + NETKIT_PASS = 0x0 + NETKIT_DROP = 0x2 + NETKIT_REDIRECT = 0x7 + NETKIT_L2 = 0x0 + NETKIT_L3 = 0x1 +) + const ( NF_INET_PRE_ROUTING = 0x0 NF_INET_LOCAL_IN = 0x1 @@ -2189,8 +2241,11 @@ const ( NFT_PAYLOAD_LL_HEADER = 0x0 NFT_PAYLOAD_NETWORK_HEADER = 0x1 NFT_PAYLOAD_TRANSPORT_HEADER = 0x2 + NFT_PAYLOAD_INNER_HEADER = 0x3 + NFT_PAYLOAD_TUN_HEADER = 0x4 NFT_PAYLOAD_CSUM_NONE = 0x0 NFT_PAYLOAD_CSUM_INET = 0x1 + NFT_PAYLOAD_CSUM_SCTP = 0x2 NFT_PAYLOAD_L4CSUM_PSEUDOHDR = 0x1 NFTA_PAYLOAD_UNSPEC = 0x0 NFTA_PAYLOAD_DREG = 0x1 @@ -2277,6 +2332,11 @@ const ( NFT_CT_AVGPKT = 0x10 NFT_CT_ZONE = 0x11 NFT_CT_EVENTMASK = 0x12 + NFT_CT_SRC_IP = 0x13 + NFT_CT_DST_IP = 0x14 + NFT_CT_SRC_IP6 = 0x15 + NFT_CT_DST_IP6 = 0x16 + NFT_CT_ID = 0x17 NFTA_CT_UNSPEC = 0x0 NFTA_CT_DREG = 0x1 NFTA_CT_KEY = 0x2 @@ -2485,7 +2545,7 @@ type XDPMmapOffsets struct { type XDPUmemReg struct { Addr uint64 Len uint64 - Chunk_size uint32 + Size uint32 Headroom uint32 Flags uint32 Tx_metadata_len uint32 @@ -2557,8 +2617,8 @@ const ( SOF_TIMESTAMPING_BIND_PHC = 0x8000 SOF_TIMESTAMPING_OPT_ID_TCP = 0x10000 - SOF_TIMESTAMPING_LAST = 0x10000 - SOF_TIMESTAMPING_MASK = 0x1ffff + SOF_TIMESTAMPING_LAST = 0x40000 + SOF_TIMESTAMPING_MASK = 0x7ffff SCM_TSTAMP_SND = 0x0 SCM_TSTAMP_SCHED = 0x1 @@ -3004,6 +3064,23 @@ const ( ) const ( + TCA_UNSPEC = 0x0 + TCA_KIND = 0x1 + TCA_OPTIONS = 0x2 + TCA_STATS = 0x3 + TCA_XSTATS = 0x4 + TCA_RATE = 0x5 + TCA_FCNT = 0x6 + TCA_STATS2 = 0x7 + TCA_STAB = 0x8 + TCA_PAD = 0x9 + TCA_DUMP_INVISIBLE = 0xa + TCA_CHAIN = 0xb + TCA_HW_OFFLOAD = 0xc + TCA_INGRESS_BLOCK = 0xd + TCA_EGRESS_BLOCK = 0xe + TCA_DUMP_FLAGS = 0xf + TCA_EXT_WARN_MSG = 0x10 RTNLGRP_NONE = 0x0 RTNLGRP_LINK = 0x1 RTNLGRP_NOTIFY = 0x2 @@ -3038,6 +3115,18 @@ const ( RTNLGRP_IPV6_MROUTE_R = 0x1f RTNLGRP_NEXTHOP = 0x20 RTNLGRP_BRVLAN = 0x21 + RTNLGRP_MCTP_IFADDR = 0x22 + RTNLGRP_TUNNEL = 0x23 + RTNLGRP_STATS = 0x24 + RTNLGRP_IPV4_MCADDR = 0x25 + RTNLGRP_IPV6_MCADDR = 0x26 + RTNLGRP_IPV6_ACADDR = 0x27 + TCA_ROOT_UNSPEC = 0x0 + TCA_ROOT_TAB = 0x1 + TCA_ROOT_FLAGS = 0x2 + TCA_ROOT_COUNT = 0x3 + TCA_ROOT_TIME_DELTA = 0x4 + TCA_ROOT_EXT_WARN_MSG = 0x5 ) type CapUserHeader struct { @@ -3473,7 +3562,7 @@ const ( DEVLINK_PORT_FN_ATTR_STATE = 0x2 DEVLINK_PORT_FN_ATTR_OPSTATE = 0x3 DEVLINK_PORT_FN_ATTR_CAPS = 0x4 - DEVLINK_PORT_FUNCTION_ATTR_MAX = 0x5 + DEVLINK_PORT_FUNCTION_ATTR_MAX = 0x6 ) type FsverityDigest struct { @@ -3501,13 +3590,17 @@ type Nhmsg struct { Flags uint32 } +const SizeofNhmsg = 0x8 + type NexthopGrp struct { Id uint32 Weight uint8 - Resvd1 uint8 + High uint8 Resvd2 uint16 } +const SizeofNexthopGrp = 0x8 + const ( NHA_UNSPEC = 0x0 NHA_ID = 0x1 @@ -3765,7 +3858,16 @@ const ( ETHTOOL_MSG_PSE_GET = 0x24 ETHTOOL_MSG_PSE_SET = 0x25 ETHTOOL_MSG_RSS_GET = 0x26 - ETHTOOL_MSG_USER_MAX = 0x2b + ETHTOOL_MSG_PLCA_GET_CFG = 0x27 + ETHTOOL_MSG_PLCA_SET_CFG = 0x28 + ETHTOOL_MSG_PLCA_GET_STATUS = 0x29 + ETHTOOL_MSG_MM_GET = 0x2a + ETHTOOL_MSG_MM_SET = 0x2b + ETHTOOL_MSG_MODULE_FW_FLASH_ACT = 0x2c + ETHTOOL_MSG_PHY_GET = 0x2d + ETHTOOL_MSG_TSCONFIG_GET = 0x2e + ETHTOOL_MSG_TSCONFIG_SET = 0x2f + ETHTOOL_MSG_USER_MAX = 0x2f ETHTOOL_MSG_KERNEL_NONE = 0x0 ETHTOOL_MSG_STRSET_GET_REPLY = 0x1 ETHTOOL_MSG_LINKINFO_GET_REPLY = 0x2 @@ -3805,12 +3907,25 @@ const ( ETHTOOL_MSG_MODULE_NTF = 0x24 ETHTOOL_MSG_PSE_GET_REPLY = 0x25 ETHTOOL_MSG_RSS_GET_REPLY = 0x26 - ETHTOOL_MSG_KERNEL_MAX = 0x2b + ETHTOOL_MSG_PLCA_GET_CFG_REPLY = 0x27 + ETHTOOL_MSG_PLCA_GET_STATUS_REPLY = 0x28 + ETHTOOL_MSG_PLCA_NTF = 0x29 + ETHTOOL_MSG_MM_GET_REPLY = 0x2a + ETHTOOL_MSG_MM_NTF = 0x2b + ETHTOOL_MSG_MODULE_FW_FLASH_NTF = 0x2c + ETHTOOL_MSG_PHY_GET_REPLY = 0x2d + ETHTOOL_MSG_PHY_NTF = 0x2e + ETHTOOL_MSG_TSCONFIG_GET_REPLY = 0x2f + ETHTOOL_MSG_TSCONFIG_SET_REPLY = 0x30 + ETHTOOL_MSG_KERNEL_MAX = 0x30 + ETHTOOL_FLAG_COMPACT_BITSETS = 0x1 + ETHTOOL_FLAG_OMIT_REPLY = 0x2 + ETHTOOL_FLAG_STATS = 0x4 ETHTOOL_A_HEADER_UNSPEC = 0x0 ETHTOOL_A_HEADER_DEV_INDEX = 0x1 ETHTOOL_A_HEADER_DEV_NAME = 0x2 ETHTOOL_A_HEADER_FLAGS = 0x3 - ETHTOOL_A_HEADER_MAX = 0x3 + ETHTOOL_A_HEADER_MAX = 0x4 ETHTOOL_A_BITSET_BIT_UNSPEC = 0x0 ETHTOOL_A_BITSET_BIT_INDEX = 0x1 ETHTOOL_A_BITSET_BIT_NAME = 0x2 @@ -3909,7 +4024,12 @@ const ( ETHTOOL_A_RINGS_TCP_DATA_SPLIT = 0xb ETHTOOL_A_RINGS_CQE_SIZE = 0xc ETHTOOL_A_RINGS_TX_PUSH = 0xd - ETHTOOL_A_RINGS_MAX = 0x10 + ETHTOOL_A_RINGS_RX_PUSH = 0xe + ETHTOOL_A_RINGS_TX_PUSH_BUF_LEN = 0xf + ETHTOOL_A_RINGS_TX_PUSH_BUF_LEN_MAX = 0x10 + ETHTOOL_A_RINGS_HDS_THRESH = 0x11 + ETHTOOL_A_RINGS_HDS_THRESH_MAX = 0x12 + ETHTOOL_A_RINGS_MAX = 0x12 ETHTOOL_A_CHANNELS_UNSPEC = 0x0 ETHTOOL_A_CHANNELS_HEADER = 0x1 ETHTOOL_A_CHANNELS_RX_MAX = 0x2 @@ -3947,7 +4067,7 @@ const ( ETHTOOL_A_COALESCE_RATE_SAMPLE_INTERVAL = 0x17 ETHTOOL_A_COALESCE_USE_CQE_MODE_TX = 0x18 ETHTOOL_A_COALESCE_USE_CQE_MODE_RX = 0x19 - ETHTOOL_A_COALESCE_MAX = 0x1c + ETHTOOL_A_COALESCE_MAX = 0x1e ETHTOOL_A_PAUSE_UNSPEC = 0x0 ETHTOOL_A_PAUSE_HEADER = 0x1 ETHTOOL_A_PAUSE_AUTONEG = 0x2 @@ -3975,7 +4095,9 @@ const ( ETHTOOL_A_TSINFO_TX_TYPES = 0x3 ETHTOOL_A_TSINFO_RX_FILTERS = 0x4 ETHTOOL_A_TSINFO_PHC_INDEX = 0x5 - ETHTOOL_A_TSINFO_MAX = 0x5 + ETHTOOL_A_TSINFO_STATS = 0x6 + ETHTOOL_A_TSINFO_HWTSTAMP_PROVIDER = 0x7 + ETHTOOL_A_TSINFO_MAX = 0x9 ETHTOOL_A_CABLE_TEST_UNSPEC = 0x0 ETHTOOL_A_CABLE_TEST_HEADER = 0x1 ETHTOOL_A_CABLE_TEST_MAX = 0x1 @@ -3991,11 +4113,11 @@ const ( ETHTOOL_A_CABLE_RESULT_UNSPEC = 0x0 ETHTOOL_A_CABLE_RESULT_PAIR = 0x1 ETHTOOL_A_CABLE_RESULT_CODE = 0x2 - ETHTOOL_A_CABLE_RESULT_MAX = 0x2 + ETHTOOL_A_CABLE_RESULT_MAX = 0x3 ETHTOOL_A_CABLE_FAULT_LENGTH_UNSPEC = 0x0 ETHTOOL_A_CABLE_FAULT_LENGTH_PAIR = 0x1 ETHTOOL_A_CABLE_FAULT_LENGTH_CM = 0x2 - ETHTOOL_A_CABLE_FAULT_LENGTH_MAX = 0x2 + ETHTOOL_A_CABLE_FAULT_LENGTH_MAX = 0x3 ETHTOOL_A_CABLE_TEST_NTF_STATUS_UNSPEC = 0x0 ETHTOOL_A_CABLE_TEST_NTF_STATUS_STARTED = 0x1 ETHTOOL_A_CABLE_TEST_NTF_STATUS_COMPLETED = 0x2 @@ -4061,6 +4183,19 @@ const ( ETHTOOL_A_TUNNEL_INFO_MAX = 0x2 ) +const ( + TCP_V4_FLOW = 0x1 + UDP_V4_FLOW = 0x2 + TCP_V6_FLOW = 0x5 + UDP_V6_FLOW = 0x6 + ESP_V4_FLOW = 0xa + ESP_V6_FLOW = 0xc + IP_USER_FLOW = 0xd + IPV6_USER_FLOW = 0xe + IPV6_FLOW = 0x11 + ETHER_FLOW = 0x12 +) + const SPEED_UNKNOWN = -0x1 type EthtoolDrvinfo struct { @@ -4078,6 +4213,107 @@ type EthtoolDrvinfo struct { Regdump_len uint32 } +type EthtoolTsInfo struct { + Cmd uint32 + So_timestamping uint32 + Phc_index int32 + Tx_types uint32 + Tx_reserved [3]uint32 + Rx_filters uint32 + Rx_reserved [3]uint32 +} + +type HwTstampConfig struct { + Flags int32 + Tx_type int32 + Rx_filter int32 +} + +const ( + HWTSTAMP_FILTER_NONE = 0x0 + HWTSTAMP_FILTER_ALL = 0x1 + HWTSTAMP_FILTER_SOME = 0x2 + HWTSTAMP_FILTER_PTP_V1_L4_EVENT = 0x3 + HWTSTAMP_FILTER_PTP_V2_L4_EVENT = 0x6 + HWTSTAMP_FILTER_PTP_V2_L2_EVENT = 0x9 + HWTSTAMP_FILTER_PTP_V2_EVENT = 0xc +) + +const ( + HWTSTAMP_TX_OFF = 0x0 + HWTSTAMP_TX_ON = 0x1 + HWTSTAMP_TX_ONESTEP_SYNC = 0x2 +) + +type ( + PtpClockCaps struct { + Max_adj int32 + N_alarm int32 + N_ext_ts int32 + N_per_out int32 + Pps int32 + N_pins int32 + Cross_timestamping int32 + Adjust_phase int32 + Max_phase_adj int32 + Rsv [11]int32 + } + PtpClockTime struct { + Sec int64 + Nsec uint32 + Reserved uint32 + } + PtpExttsEvent struct { + T PtpClockTime + Index uint32 + Flags uint32 + Rsv [2]uint32 + } + PtpExttsRequest struct { + Index uint32 + Flags uint32 + Rsv [2]uint32 + } + PtpPeroutRequest struct { + StartOrPhase PtpClockTime + Period PtpClockTime + Index uint32 + Flags uint32 + On PtpClockTime + } + PtpPinDesc struct { + Name [64]byte + Index uint32 + Func uint32 + Chan uint32 + Rsv [5]uint32 + } + PtpSysOffset struct { + Samples uint32 + Rsv [3]uint32 + Ts [51]PtpClockTime + } + PtpSysOffsetExtended struct { + Samples uint32 + Clockid int32 + Rsv [2]uint32 + Ts [25][3]PtpClockTime + } + PtpSysOffsetPrecise struct { + Device PtpClockTime + Realtime PtpClockTime + Monoraw PtpClockTime + Rsv [4]uint32 + } +) + +const ( + PTP_PF_NONE = 0x0 + PTP_PF_EXTTS = 0x1 + PTP_PF_PEROUT = 0x2 + PTP_PF_PHYSYNC = 0x3 +) + type ( HIDRawReportDescriptor struct { Size uint32 @@ -4259,6 +4495,7 @@ const ( type LandlockRulesetAttr struct { Access_fs uint64 Access_net uint64 + Scoped uint64 } type LandlockPathBeneathAttr struct { @@ -4471,6 +4708,7 @@ const ( NL80211_ATTR_AKM_SUITES = 0x4c NL80211_ATTR_AP_ISOLATE = 0x60 NL80211_ATTR_AP_SETTINGS_FLAGS = 0x135 + NL80211_ATTR_ASSOC_SPP_AMSDU = 0x14a NL80211_ATTR_AUTH_DATA = 0x9c NL80211_ATTR_AUTH_TYPE = 0x35 NL80211_ATTR_BANDS = 0xef @@ -4481,6 +4719,7 @@ const ( NL80211_ATTR_BSS_BASIC_RATES = 0x24 NL80211_ATTR_BSS = 0x2f NL80211_ATTR_BSS_CTS_PROT = 0x1c + NL80211_ATTR_BSS_DUMP_INCLUDE_USE_DATA = 0x147 NL80211_ATTR_BSS_HT_OPMODE = 0x6d NL80211_ATTR_BSSID = 0xf5 NL80211_ATTR_BSS_SELECT = 0xe3 @@ -4540,6 +4779,7 @@ const ( NL80211_ATTR_DTIM_PERIOD = 0xd NL80211_ATTR_DURATION = 0x57 NL80211_ATTR_EHT_CAPABILITY = 0x136 + NL80211_ATTR_EMA_RNR_ELEMS = 0x145 NL80211_ATTR_EML_CAPABILITY = 0x13d NL80211_ATTR_EXT_CAPA = 0xa9 NL80211_ATTR_EXT_CAPA_MASK = 0xaa @@ -4575,6 +4815,7 @@ const ( NL80211_ATTR_HIDDEN_SSID = 0x7e NL80211_ATTR_HT_CAPABILITY = 0x1f NL80211_ATTR_HT_CAPABILITY_MASK = 0x94 + NL80211_ATTR_HW_TIMESTAMP_ENABLED = 0x144 NL80211_ATTR_IE_ASSOC_RESP = 0x80 NL80211_ATTR_IE = 0x2a NL80211_ATTR_IE_PROBE_RESP = 0x7f @@ -4605,9 +4846,10 @@ const ( NL80211_ATTR_MAC_HINT = 0xc8 NL80211_ATTR_MAC_MASK = 0xd7 NL80211_ATTR_MAX_AP_ASSOC_STA = 0xca - NL80211_ATTR_MAX = 0x14a + NL80211_ATTR_MAX = 0x151 NL80211_ATTR_MAX_CRIT_PROT_DURATION = 0xb4 NL80211_ATTR_MAX_CSA_COUNTERS = 0xce + NL80211_ATTR_MAX_HW_TIMESTAMP_PEERS = 0x143 NL80211_ATTR_MAX_MATCH_SETS = 0x85 NL80211_ATTR_MAX_NUM_AKM_SUITES = 0x13c NL80211_ATTR_MAX_NUM_PMKIDS = 0x56 @@ -4632,9 +4874,12 @@ const ( NL80211_ATTR_MGMT_SUBTYPE = 0x29 NL80211_ATTR_MLD_ADDR = 0x13a NL80211_ATTR_MLD_CAPA_AND_OPS = 0x13e + NL80211_ATTR_MLO_LINK_DISABLED = 0x146 NL80211_ATTR_MLO_LINK_ID = 0x139 NL80211_ATTR_MLO_LINKS = 0x138 NL80211_ATTR_MLO_SUPPORT = 0x13b + NL80211_ATTR_MLO_TTLM_DLINK = 0x148 + NL80211_ATTR_MLO_TTLM_ULINK = 0x149 NL80211_ATTR_MNTR_FLAGS = 0x17 NL80211_ATTR_MPATH_INFO = 0x1b NL80211_ATTR_MPATH_NEXT_HOP = 0x1a @@ -4667,12 +4912,14 @@ const ( NL80211_ATTR_PORT_AUTHORIZED = 0x103 NL80211_ATTR_POWER_RULE_MAX_ANT_GAIN = 0x5 NL80211_ATTR_POWER_RULE_MAX_EIRP = 0x6 + NL80211_ATTR_POWER_RULE_PSD = 0x8 NL80211_ATTR_PREV_BSSID = 0x4f NL80211_ATTR_PRIVACY = 0x46 NL80211_ATTR_PROBE_RESP = 0x91 NL80211_ATTR_PROBE_RESP_OFFLOAD = 0x90 NL80211_ATTR_PROTOCOL_FEATURES = 0xad NL80211_ATTR_PS_STATE = 0x5d + NL80211_ATTR_PUNCT_BITMAP = 0x142 NL80211_ATTR_QOS_MAP = 0xc7 NL80211_ATTR_RADAR_BACKGROUND = 0x134 NL80211_ATTR_RADAR_EVENT = 0xa8 @@ -4801,7 +5048,9 @@ const ( NL80211_ATTR_WIPHY_FREQ = 0x26 NL80211_ATTR_WIPHY_FREQ_HINT = 0xc9 NL80211_ATTR_WIPHY_FREQ_OFFSET = 0x122 + NL80211_ATTR_WIPHY_INTERFACE_COMBINATIONS = 0x14c NL80211_ATTR_WIPHY_NAME = 0x2 + NL80211_ATTR_WIPHY_RADIOS = 0x14b NL80211_ATTR_WIPHY_RETRY_LONG = 0x3e NL80211_ATTR_WIPHY_RETRY_SHORT = 0x3d NL80211_ATTR_WIPHY_RTS_THRESHOLD = 0x40 @@ -4836,6 +5085,8 @@ const ( NL80211_BAND_ATTR_IFTYPE_DATA = 0x9 NL80211_BAND_ATTR_MAX = 0xd NL80211_BAND_ATTR_RATES = 0x2 + NL80211_BAND_ATTR_S1G_CAPA = 0xd + NL80211_BAND_ATTR_S1G_MCS_NSS_SET = 0xc NL80211_BAND_ATTR_VHT_CAPA = 0x8 NL80211_BAND_ATTR_VHT_MCS_SET = 0x7 NL80211_BAND_IFTYPE_ATTR_EHT_CAP_MAC = 0x8 @@ -4859,6 +5110,10 @@ const ( NL80211_BSS_BEACON_INTERVAL = 0x4 NL80211_BSS_BEACON_TSF = 0xd NL80211_BSS_BSSID = 0x1 + NL80211_BSS_CANNOT_USE_6GHZ_PWR_MISMATCH = 0x2 + NL80211_BSS_CANNOT_USE_NSTR_NONPRIMARY = 0x1 + NL80211_BSS_CANNOT_USE_REASONS = 0x18 + NL80211_BSS_CANNOT_USE_UHB_PWR_MISMATCH = 0x2 NL80211_BSS_CAPABILITY = 0x5 NL80211_BSS_CHAIN_SIGNAL = 0x13 NL80211_BSS_CHAN_WIDTH_10 = 0x1 @@ -4890,6 +5145,9 @@ const ( NL80211_BSS_STATUS = 0x9 NL80211_BSS_STATUS_IBSS_JOINED = 0x2 NL80211_BSS_TSF = 0x3 + NL80211_BSS_USE_FOR = 0x17 + NL80211_BSS_USE_FOR_MLD_LINK = 0x2 + NL80211_BSS_USE_FOR_NORMAL = 0x1 NL80211_CHAN_HT20 = 0x1 NL80211_CHAN_HT40MINUS = 0x2 NL80211_CHAN_HT40PLUS = 0x3 @@ -4975,7 +5233,8 @@ const ( NL80211_CMD_LEAVE_IBSS = 0x2c NL80211_CMD_LEAVE_MESH = 0x45 NL80211_CMD_LEAVE_OCB = 0x6d - NL80211_CMD_MAX = 0x9b + NL80211_CMD_LINKS_REMOVED = 0x9a + NL80211_CMD_MAX = 0x9d NL80211_CMD_MICHAEL_MIC_FAILURE = 0x29 NL80211_CMD_MODIFY_LINK_STA = 0x97 NL80211_CMD_NAN_MATCH = 0x78 @@ -5019,6 +5278,7 @@ const ( NL80211_CMD_SET_COALESCE = 0x65 NL80211_CMD_SET_CQM = 0x3f NL80211_CMD_SET_FILS_AAD = 0x92 + NL80211_CMD_SET_HW_TIMESTAMP = 0x99 NL80211_CMD_SET_INTERFACE = 0x6 NL80211_CMD_SET_KEY = 0xa NL80211_CMD_SET_MAC_ACL = 0x5d @@ -5038,6 +5298,7 @@ const ( NL80211_CMD_SET_SAR_SPECS = 0x8c NL80211_CMD_SET_STATION = 0x12 NL80211_CMD_SET_TID_CONFIG = 0x89 + NL80211_CMD_SET_TID_TO_LINK_MAPPING = 0x9b NL80211_CMD_SET_TX_BITRATE_MASK = 0x39 NL80211_CMD_SET_WDS_PEER = 0x42 NL80211_CMD_SET_WIPHY = 0x2 @@ -5105,6 +5366,7 @@ const ( NL80211_EXT_FEATURE_AIRTIME_FAIRNESS = 0x21 NL80211_EXT_FEATURE_AP_PMKSA_CACHING = 0x22 NL80211_EXT_FEATURE_AQL = 0x28 + NL80211_EXT_FEATURE_AUTH_AND_DEAUTH_RANDOM_TA = 0x40 NL80211_EXT_FEATURE_BEACON_PROTECTION_CLIENT = 0x2e NL80211_EXT_FEATURE_BEACON_PROTECTION = 0x29 NL80211_EXT_FEATURE_BEACON_RATE_HE = 0x36 @@ -5120,6 +5382,7 @@ const ( NL80211_EXT_FEATURE_CQM_RSSI_LIST = 0xd NL80211_EXT_FEATURE_DATA_ACK_SIGNAL_SUPPORT = 0x1b NL80211_EXT_FEATURE_DEL_IBSS_STA = 0x2c + NL80211_EXT_FEATURE_DFS_CONCURRENT = 0x43 NL80211_EXT_FEATURE_DFS_OFFLOAD = 0x19 NL80211_EXT_FEATURE_ENABLE_FTM_RESPONDER = 0x20 NL80211_EXT_FEATURE_EXT_KEY_ID = 0x24 @@ -5139,9 +5402,12 @@ const ( NL80211_EXT_FEATURE_OCE_PROBE_REQ_DEFERRAL_SUPPRESSION = 0x14 NL80211_EXT_FEATURE_OCE_PROBE_REQ_HIGH_TX_RATE = 0x13 NL80211_EXT_FEATURE_OPERATING_CHANNEL_VALIDATION = 0x31 + NL80211_EXT_FEATURE_OWE_OFFLOAD_AP = 0x42 + NL80211_EXT_FEATURE_OWE_OFFLOAD = 0x41 NL80211_EXT_FEATURE_POWERED_ADDR_CHANGE = 0x3d NL80211_EXT_FEATURE_PROTECTED_TWT = 0x2b NL80211_EXT_FEATURE_PROT_RANGE_NEGO_AND_MEASURE = 0x39 + NL80211_EXT_FEATURE_PUNCT = 0x3e NL80211_EXT_FEATURE_RADAR_BACKGROUND = 0x3c NL80211_EXT_FEATURE_RRM = 0x1 NL80211_EXT_FEATURE_SAE_OFFLOAD_AP = 0x33 @@ -5153,8 +5419,10 @@ const ( NL80211_EXT_FEATURE_SCHED_SCAN_BAND_SPECIFIC_RSSI_THOLD = 0x23 NL80211_EXT_FEATURE_SCHED_SCAN_RELATIVE_RSSI = 0xc NL80211_EXT_FEATURE_SECURE_LTF = 0x37 + NL80211_EXT_FEATURE_SECURE_NAN = 0x3f NL80211_EXT_FEATURE_SECURE_RTT = 0x38 NL80211_EXT_FEATURE_SET_SCAN_DWELL = 0x5 + NL80211_EXT_FEATURE_SPP_AMSDU_SUPPORT = 0x44 NL80211_EXT_FEATURE_STA_TX_PWR = 0x25 NL80211_EXT_FEATURE_TXQS = 0x1c NL80211_EXT_FEATURE_UNSOL_BCAST_PROBE_RESP = 0x35 @@ -5201,7 +5469,10 @@ const ( NL80211_FREQUENCY_ATTR_2MHZ = 0x16 NL80211_FREQUENCY_ATTR_4MHZ = 0x17 NL80211_FREQUENCY_ATTR_8MHZ = 0x18 + NL80211_FREQUENCY_ATTR_ALLOW_6GHZ_VLP_AP = 0x21 + NL80211_FREQUENCY_ATTR_CAN_MONITOR = 0x20 NL80211_FREQUENCY_ATTR_DFS_CAC_TIME = 0xd + NL80211_FREQUENCY_ATTR_DFS_CONCURRENT = 0x1d NL80211_FREQUENCY_ATTR_DFS_STATE = 0x7 NL80211_FREQUENCY_ATTR_DFS_TIME = 0x8 NL80211_FREQUENCY_ATTR_DISABLED = 0x2 @@ -5209,12 +5480,14 @@ const ( NL80211_FREQUENCY_ATTR_GO_CONCURRENT = 0xf NL80211_FREQUENCY_ATTR_INDOOR_ONLY = 0xe NL80211_FREQUENCY_ATTR_IR_CONCURRENT = 0xf - NL80211_FREQUENCY_ATTR_MAX = 0x20 + NL80211_FREQUENCY_ATTR_MAX = 0x22 NL80211_FREQUENCY_ATTR_MAX_TX_POWER = 0x6 NL80211_FREQUENCY_ATTR_NO_10MHZ = 0x11 NL80211_FREQUENCY_ATTR_NO_160MHZ = 0xc NL80211_FREQUENCY_ATTR_NO_20MHZ = 0x10 NL80211_FREQUENCY_ATTR_NO_320MHZ = 0x1a + NL80211_FREQUENCY_ATTR_NO_6GHZ_AFC_CLIENT = 0x1f + NL80211_FREQUENCY_ATTR_NO_6GHZ_VLP_CLIENT = 0x1e NL80211_FREQUENCY_ATTR_NO_80MHZ = 0xb NL80211_FREQUENCY_ATTR_NO_EHT = 0x1b NL80211_FREQUENCY_ATTR_NO_HE = 0x13 @@ -5222,8 +5495,11 @@ const ( NL80211_FREQUENCY_ATTR_NO_HT40_PLUS = 0xa NL80211_FREQUENCY_ATTR_NO_IBSS = 0x3 NL80211_FREQUENCY_ATTR_NO_IR = 0x3 + NL80211_FREQUENCY_ATTR_NO_UHB_AFC_CLIENT = 0x1f + NL80211_FREQUENCY_ATTR_NO_UHB_VLP_CLIENT = 0x1e NL80211_FREQUENCY_ATTR_OFFSET = 0x14 NL80211_FREQUENCY_ATTR_PASSIVE_SCAN = 0x3 + NL80211_FREQUENCY_ATTR_PSD = 0x1c NL80211_FREQUENCY_ATTR_RADAR = 0x5 NL80211_FREQUENCY_ATTR_WMM = 0x12 NL80211_FTM_RESP_ATTR_CIVICLOC = 0x3 @@ -5288,6 +5564,7 @@ const ( NL80211_IFTYPE_STATION = 0x2 NL80211_IFTYPE_UNSPECIFIED = 0x0 NL80211_IFTYPE_WDS = 0x5 + NL80211_KCK_EXT_LEN_32 = 0x20 NL80211_KCK_EXT_LEN = 0x18 NL80211_KCK_LEN = 0x10 NL80211_KEK_EXT_LEN = 0x20 @@ -5316,9 +5593,10 @@ const ( NL80211_MAX_SUPP_HT_RATES = 0x4d NL80211_MAX_SUPP_RATES = 0x20 NL80211_MAX_SUPP_REG_RULES = 0x80 + NL80211_MAX_SUPP_SELECTORS = 0x80 NL80211_MBSSID_CONFIG_ATTR_EMA = 0x5 NL80211_MBSSID_CONFIG_ATTR_INDEX = 0x3 - NL80211_MBSSID_CONFIG_ATTR_MAX = 0x5 + NL80211_MBSSID_CONFIG_ATTR_MAX = 0x6 NL80211_MBSSID_CONFIG_ATTR_MAX_EMA_PROFILE_PERIODICITY = 0x2 NL80211_MBSSID_CONFIG_ATTR_MAX_INTERFACES = 0x1 NL80211_MBSSID_CONFIG_ATTR_TX_IFINDEX = 0x4 @@ -5377,7 +5655,7 @@ const ( NL80211_MNTR_FLAG_CONTROL = 0x3 NL80211_MNTR_FLAG_COOK_FRAMES = 0x5 NL80211_MNTR_FLAG_FCSFAIL = 0x1 - NL80211_MNTR_FLAG_MAX = 0x6 + NL80211_MNTR_FLAG_MAX = 0x7 NL80211_MNTR_FLAG_OTHER_BSS = 0x4 NL80211_MNTR_FLAG_PLCPFAIL = 0x2 NL80211_MPATH_FLAG_ACTIVE = 0x1 @@ -5561,11 +5839,16 @@ const ( NL80211_RADAR_PRE_CAC_EXPIRED = 0x4 NL80211_RATE_INFO_10_MHZ_WIDTH = 0xb NL80211_RATE_INFO_160_MHZ_WIDTH = 0xa + NL80211_RATE_INFO_16_MHZ_WIDTH = 0x1d + NL80211_RATE_INFO_1_MHZ_WIDTH = 0x19 + NL80211_RATE_INFO_2_MHZ_WIDTH = 0x1a NL80211_RATE_INFO_320_MHZ_WIDTH = 0x12 NL80211_RATE_INFO_40_MHZ_WIDTH = 0x3 + NL80211_RATE_INFO_4_MHZ_WIDTH = 0x1b NL80211_RATE_INFO_5_MHZ_WIDTH = 0xc NL80211_RATE_INFO_80_MHZ_WIDTH = 0x8 NL80211_RATE_INFO_80P80_MHZ_WIDTH = 0x9 + NL80211_RATE_INFO_8_MHZ_WIDTH = 0x1c NL80211_RATE_INFO_BITRATE32 = 0x5 NL80211_RATE_INFO_BITRATE = 0x1 NL80211_RATE_INFO_EHT_GI_0_8 = 0x0 @@ -5611,6 +5894,8 @@ const ( NL80211_RATE_INFO_HE_RU_ALLOC = 0x11 NL80211_RATE_INFO_MAX = 0x1d NL80211_RATE_INFO_MCS = 0x2 + NL80211_RATE_INFO_S1G_MCS = 0x17 + NL80211_RATE_INFO_S1G_NSS = 0x18 NL80211_RATE_INFO_SHORT_GI = 0x4 NL80211_RATE_INFO_VHT_MCS = 0x6 NL80211_RATE_INFO_VHT_NSS = 0x7 @@ -5628,14 +5913,19 @@ const ( NL80211_REKEY_DATA_KEK = 0x1 NL80211_REKEY_DATA_REPLAY_CTR = 0x3 NL80211_REPLAY_CTR_LEN = 0x8 + NL80211_RRF_ALLOW_6GHZ_VLP_AP = 0x1000000 NL80211_RRF_AUTO_BW = 0x800 NL80211_RRF_DFS = 0x10 + NL80211_RRF_DFS_CONCURRENT = 0x200000 NL80211_RRF_GO_CONCURRENT = 0x1000 NL80211_RRF_IR_CONCURRENT = 0x1000 NL80211_RRF_NO_160MHZ = 0x10000 NL80211_RRF_NO_320MHZ = 0x40000 + NL80211_RRF_NO_6GHZ_AFC_CLIENT = 0x800000 + NL80211_RRF_NO_6GHZ_VLP_CLIENT = 0x400000 NL80211_RRF_NO_80MHZ = 0x8000 NL80211_RRF_NO_CCK = 0x2 + NL80211_RRF_NO_EHT = 0x80000 NL80211_RRF_NO_HE = 0x20000 NL80211_RRF_NO_HT40 = 0x6000 NL80211_RRF_NO_HT40MINUS = 0x2000 @@ -5646,7 +5936,10 @@ const ( NL80211_RRF_NO_IR = 0x80 NL80211_RRF_NO_OFDM = 0x1 NL80211_RRF_NO_OUTDOOR = 0x8 + NL80211_RRF_NO_UHB_AFC_CLIENT = 0x800000 + NL80211_RRF_NO_UHB_VLP_CLIENT = 0x400000 NL80211_RRF_PASSIVE_SCAN = 0x80 + NL80211_RRF_PSD = 0x100000 NL80211_RRF_PTMP_ONLY = 0x40 NL80211_RRF_PTP_ONLY = 0x20 NL80211_RXMGMT_FLAG_ANSWERED = 0x1 @@ -5707,6 +6000,7 @@ const ( NL80211_STA_FLAG_MAX_OLD_API = 0x6 NL80211_STA_FLAG_MFP = 0x4 NL80211_STA_FLAG_SHORT_PREAMBLE = 0x2 + NL80211_STA_FLAG_SPP_AMSDU = 0x8 NL80211_STA_FLAG_TDLS_PEER = 0x6 NL80211_STA_FLAG_WME = 0x3 NL80211_STA_INFO_ACK_SIGNAL_AVG = 0x23 @@ -5865,6 +6159,13 @@ const ( NL80211_VHT_CAPABILITY_LEN = 0xc NL80211_VHT_NSS_MAX = 0x8 NL80211_WIPHY_NAME_MAXLEN = 0x40 + NL80211_WIPHY_RADIO_ATTR_FREQ_RANGE = 0x2 + NL80211_WIPHY_RADIO_ATTR_INDEX = 0x1 + NL80211_WIPHY_RADIO_ATTR_INTERFACE_COMBINATION = 0x3 + NL80211_WIPHY_RADIO_ATTR_MAX = 0x4 + NL80211_WIPHY_RADIO_FREQ_ATTR_END = 0x2 + NL80211_WIPHY_RADIO_FREQ_ATTR_MAX = 0x2 + NL80211_WIPHY_RADIO_FREQ_ATTR_START = 0x1 NL80211_WMMR_AIFSN = 0x3 NL80211_WMMR_CW_MAX = 0x2 NL80211_WMMR_CW_MIN = 0x1 @@ -5896,6 +6197,7 @@ const ( NL80211_WOWLAN_TRIG_PKT_PATTERN = 0x4 NL80211_WOWLAN_TRIG_RFKILL_RELEASE = 0x9 NL80211_WOWLAN_TRIG_TCP_CONNECTION = 0xe + NL80211_WOWLAN_TRIG_UNPROTECTED_DEAUTH_DISASSOC = 0x14 NL80211_WOWLAN_TRIG_WAKEUP_PKT_80211 = 0xa NL80211_WOWLAN_TRIG_WAKEUP_PKT_80211_LEN = 0xb NL80211_WOWLAN_TRIG_WAKEUP_PKT_8023 = 0xc @@ -6032,3 +6334,32 @@ type SockDiagReq struct { Family uint8 Protocol uint8 } + +const RTM_NEWNVLAN = 0x70 + +const ( + MPOL_BIND = 0x2 + MPOL_DEFAULT = 0x0 + MPOL_F_ADDR = 0x2 + MPOL_F_MEMS_ALLOWED = 0x4 + MPOL_F_MOF = 0x8 + MPOL_F_MORON = 0x10 + MPOL_F_NODE = 0x1 + MPOL_F_NUMA_BALANCING = 0x2000 + MPOL_F_RELATIVE_NODES = 0x4000 + MPOL_F_SHARED = 0x1 + MPOL_F_STATIC_NODES = 0x8000 + MPOL_INTERLEAVE = 0x3 + MPOL_LOCAL = 0x4 + MPOL_MAX = 0x7 + MPOL_MF_INTERNAL = 0x10 + MPOL_MF_LAZY = 0x8 + MPOL_MF_MOVE_ALL = 0x4 + MPOL_MF_MOVE = 0x2 + MPOL_MF_STRICT = 0x1 + MPOL_MF_VALID = 0x7 + MPOL_MODE_FLAGS = 0xe000 + MPOL_PREFERRED = 0x1 + MPOL_PREFERRED_MANY = 0x5 + MPOL_WEIGHTED_INTERLEAVE = 0x6 +) diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_386.go b/vendor/golang.org/x/sys/unix/ztypes_linux_386.go index fd402da43f..485f2d3a1b 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_386.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_386.go @@ -282,7 +282,7 @@ type Taskstats struct { Ac_exitcode uint32 Ac_flag uint8 Ac_nice uint8 - _ [4]byte + _ [6]byte Cpu_count uint64 Cpu_delay_total uint64 Blkio_count uint64 @@ -338,6 +338,22 @@ type Taskstats struct { Wpcopy_delay_total uint64 Irq_count uint64 Irq_delay_total uint64 + Cpu_delay_max uint64 + Cpu_delay_min uint64 + Blkio_delay_max uint64 + Blkio_delay_min uint64 + Swapin_delay_max uint64 + Swapin_delay_min uint64 + Freepages_delay_max uint64 + Freepages_delay_min uint64 + Thrashing_delay_max uint64 + Thrashing_delay_min uint64 + Compact_delay_max uint64 + Compact_delay_min uint64 + Wpcopy_delay_max uint64 + Wpcopy_delay_min uint64 + Irq_delay_max uint64 + Irq_delay_min uint64 } type cpuMask uint32 diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go index eb7a5e1864..ecbd1ad8bc 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_amd64.go @@ -351,6 +351,22 @@ type Taskstats struct { Wpcopy_delay_total uint64 Irq_count uint64 Irq_delay_total uint64 + Cpu_delay_max uint64 + Cpu_delay_min uint64 + Blkio_delay_max uint64 + Blkio_delay_min uint64 + Swapin_delay_max uint64 + Swapin_delay_min uint64 + Freepages_delay_max uint64 + Freepages_delay_min uint64 + Thrashing_delay_max uint64 + Thrashing_delay_min uint64 + Compact_delay_max uint64 + Compact_delay_min uint64 + Wpcopy_delay_max uint64 + Wpcopy_delay_min uint64 + Irq_delay_max uint64 + Irq_delay_min uint64 } type cpuMask uint64 diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go b/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go index d78ac108b6..02f0463a44 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_arm.go @@ -91,7 +91,7 @@ type Stat_t struct { Gid uint32 Rdev uint64 _ uint16 - _ [4]byte + _ [6]byte Size int64 Blksize int32 _ [4]byte @@ -273,7 +273,7 @@ type Taskstats struct { Ac_exitcode uint32 Ac_flag uint8 Ac_nice uint8 - _ [4]byte + _ [6]byte Cpu_count uint64 Cpu_delay_total uint64 Blkio_count uint64 @@ -329,6 +329,22 @@ type Taskstats struct { Wpcopy_delay_total uint64 Irq_count uint64 Irq_delay_total uint64 + Cpu_delay_max uint64 + Cpu_delay_min uint64 + Blkio_delay_max uint64 + Blkio_delay_min uint64 + Swapin_delay_max uint64 + Swapin_delay_min uint64 + Freepages_delay_max uint64 + Freepages_delay_min uint64 + Thrashing_delay_max uint64 + Thrashing_delay_min uint64 + Compact_delay_max uint64 + Compact_delay_min uint64 + Wpcopy_delay_max uint64 + Wpcopy_delay_min uint64 + Irq_delay_max uint64 + Irq_delay_min uint64 } type cpuMask uint32 diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go index cd06d47f1f..6f4d400d24 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_arm64.go @@ -330,6 +330,22 @@ type Taskstats struct { Wpcopy_delay_total uint64 Irq_count uint64 Irq_delay_total uint64 + Cpu_delay_max uint64 + Cpu_delay_min uint64 + Blkio_delay_max uint64 + Blkio_delay_min uint64 + Swapin_delay_max uint64 + Swapin_delay_min uint64 + Freepages_delay_max uint64 + Freepages_delay_min uint64 + Thrashing_delay_max uint64 + Thrashing_delay_min uint64 + Compact_delay_max uint64 + Compact_delay_min uint64 + Wpcopy_delay_max uint64 + Wpcopy_delay_min uint64 + Irq_delay_max uint64 + Irq_delay_min uint64 } type cpuMask uint64 diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_loong64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_loong64.go index 2f28fe26c1..cd532cfa55 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_loong64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_loong64.go @@ -331,6 +331,22 @@ type Taskstats struct { Wpcopy_delay_total uint64 Irq_count uint64 Irq_delay_total uint64 + Cpu_delay_max uint64 + Cpu_delay_min uint64 + Blkio_delay_max uint64 + Blkio_delay_min uint64 + Swapin_delay_max uint64 + Swapin_delay_min uint64 + Freepages_delay_max uint64 + Freepages_delay_min uint64 + Thrashing_delay_max uint64 + Thrashing_delay_min uint64 + Compact_delay_max uint64 + Compact_delay_min uint64 + Wpcopy_delay_max uint64 + Wpcopy_delay_min uint64 + Irq_delay_max uint64 + Irq_delay_min uint64 } type cpuMask uint64 diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go b/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go index 71d6cac2f1..4133620851 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_mips.go @@ -278,7 +278,7 @@ type Taskstats struct { Ac_exitcode uint32 Ac_flag uint8 Ac_nice uint8 - _ [4]byte + _ [6]byte Cpu_count uint64 Cpu_delay_total uint64 Blkio_count uint64 @@ -334,6 +334,22 @@ type Taskstats struct { Wpcopy_delay_total uint64 Irq_count uint64 Irq_delay_total uint64 + Cpu_delay_max uint64 + Cpu_delay_min uint64 + Blkio_delay_max uint64 + Blkio_delay_min uint64 + Swapin_delay_max uint64 + Swapin_delay_min uint64 + Freepages_delay_max uint64 + Freepages_delay_min uint64 + Thrashing_delay_max uint64 + Thrashing_delay_min uint64 + Compact_delay_max uint64 + Compact_delay_min uint64 + Wpcopy_delay_max uint64 + Wpcopy_delay_min uint64 + Irq_delay_max uint64 + Irq_delay_min uint64 } type cpuMask uint32 diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go index 8596d45356..eaa37eb718 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_mips64.go @@ -333,6 +333,22 @@ type Taskstats struct { Wpcopy_delay_total uint64 Irq_count uint64 Irq_delay_total uint64 + Cpu_delay_max uint64 + Cpu_delay_min uint64 + Blkio_delay_max uint64 + Blkio_delay_min uint64 + Swapin_delay_max uint64 + Swapin_delay_min uint64 + Freepages_delay_max uint64 + Freepages_delay_min uint64 + Thrashing_delay_max uint64 + Thrashing_delay_min uint64 + Compact_delay_max uint64 + Compact_delay_min uint64 + Wpcopy_delay_max uint64 + Wpcopy_delay_min uint64 + Irq_delay_max uint64 + Irq_delay_min uint64 } type cpuMask uint64 diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go b/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go index cd60ea1866..98ae6a1e4a 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.go @@ -333,6 +333,22 @@ type Taskstats struct { Wpcopy_delay_total uint64 Irq_count uint64 Irq_delay_total uint64 + Cpu_delay_max uint64 + Cpu_delay_min uint64 + Blkio_delay_max uint64 + Blkio_delay_min uint64 + Swapin_delay_max uint64 + Swapin_delay_min uint64 + Freepages_delay_max uint64 + Freepages_delay_min uint64 + Thrashing_delay_max uint64 + Thrashing_delay_min uint64 + Compact_delay_max uint64 + Compact_delay_min uint64 + Wpcopy_delay_max uint64 + Wpcopy_delay_min uint64 + Irq_delay_max uint64 + Irq_delay_min uint64 } type cpuMask uint64 diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go b/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go index b0ae420c48..cae1961594 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.go @@ -278,7 +278,7 @@ type Taskstats struct { Ac_exitcode uint32 Ac_flag uint8 Ac_nice uint8 - _ [4]byte + _ [6]byte Cpu_count uint64 Cpu_delay_total uint64 Blkio_count uint64 @@ -334,6 +334,22 @@ type Taskstats struct { Wpcopy_delay_total uint64 Irq_count uint64 Irq_delay_total uint64 + Cpu_delay_max uint64 + Cpu_delay_min uint64 + Blkio_delay_max uint64 + Blkio_delay_min uint64 + Swapin_delay_max uint64 + Swapin_delay_min uint64 + Freepages_delay_max uint64 + Freepages_delay_min uint64 + Thrashing_delay_max uint64 + Thrashing_delay_min uint64 + Compact_delay_max uint64 + Compact_delay_min uint64 + Wpcopy_delay_max uint64 + Wpcopy_delay_min uint64 + Irq_delay_max uint64 + Irq_delay_min uint64 } type cpuMask uint32 diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc.go b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc.go index 8359728759..6ce3b4e028 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc.go @@ -90,7 +90,7 @@ type Stat_t struct { Gid uint32 Rdev uint64 _ uint16 - _ [4]byte + _ [6]byte Size int64 Blksize int32 _ [4]byte @@ -285,7 +285,7 @@ type Taskstats struct { Ac_exitcode uint32 Ac_flag uint8 Ac_nice uint8 - _ [4]byte + _ [6]byte Cpu_count uint64 Cpu_delay_total uint64 Blkio_count uint64 @@ -341,6 +341,22 @@ type Taskstats struct { Wpcopy_delay_total uint64 Irq_count uint64 Irq_delay_total uint64 + Cpu_delay_max uint64 + Cpu_delay_min uint64 + Blkio_delay_max uint64 + Blkio_delay_min uint64 + Swapin_delay_max uint64 + Swapin_delay_min uint64 + Freepages_delay_max uint64 + Freepages_delay_min uint64 + Thrashing_delay_max uint64 + Thrashing_delay_min uint64 + Compact_delay_max uint64 + Compact_delay_min uint64 + Wpcopy_delay_max uint64 + Wpcopy_delay_min uint64 + Irq_delay_max uint64 + Irq_delay_min uint64 } type cpuMask uint32 diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go index 69eb6a5c68..c7429c6a14 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.go @@ -340,6 +340,22 @@ type Taskstats struct { Wpcopy_delay_total uint64 Irq_count uint64 Irq_delay_total uint64 + Cpu_delay_max uint64 + Cpu_delay_min uint64 + Blkio_delay_max uint64 + Blkio_delay_min uint64 + Swapin_delay_max uint64 + Swapin_delay_min uint64 + Freepages_delay_max uint64 + Freepages_delay_min uint64 + Thrashing_delay_max uint64 + Thrashing_delay_min uint64 + Compact_delay_max uint64 + Compact_delay_min uint64 + Wpcopy_delay_max uint64 + Wpcopy_delay_min uint64 + Irq_delay_max uint64 + Irq_delay_min uint64 } type cpuMask uint64 diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go index 5f583cb62b..4bf4baf4ca 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.go @@ -340,6 +340,22 @@ type Taskstats struct { Wpcopy_delay_total uint64 Irq_count uint64 Irq_delay_total uint64 + Cpu_delay_max uint64 + Cpu_delay_min uint64 + Blkio_delay_max uint64 + Blkio_delay_min uint64 + Swapin_delay_max uint64 + Swapin_delay_min uint64 + Freepages_delay_max uint64 + Freepages_delay_min uint64 + Thrashing_delay_max uint64 + Thrashing_delay_min uint64 + Compact_delay_max uint64 + Compact_delay_min uint64 + Wpcopy_delay_max uint64 + Wpcopy_delay_min uint64 + Irq_delay_max uint64 + Irq_delay_min uint64 } type cpuMask uint64 diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go index 15adc04142..e9709d70af 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.go @@ -358,6 +358,22 @@ type Taskstats struct { Wpcopy_delay_total uint64 Irq_count uint64 Irq_delay_total uint64 + Cpu_delay_max uint64 + Cpu_delay_min uint64 + Blkio_delay_max uint64 + Blkio_delay_min uint64 + Swapin_delay_max uint64 + Swapin_delay_min uint64 + Freepages_delay_max uint64 + Freepages_delay_min uint64 + Thrashing_delay_max uint64 + Thrashing_delay_min uint64 + Compact_delay_max uint64 + Compact_delay_min uint64 + Wpcopy_delay_max uint64 + Wpcopy_delay_min uint64 + Irq_delay_max uint64 + Irq_delay_min uint64 } type cpuMask uint64 @@ -727,6 +743,37 @@ const ( RISCV_HWPROBE_EXT_ZBA = 0x8 RISCV_HWPROBE_EXT_ZBB = 0x10 RISCV_HWPROBE_EXT_ZBS = 0x20 + RISCV_HWPROBE_EXT_ZICBOZ = 0x40 + RISCV_HWPROBE_EXT_ZBC = 0x80 + RISCV_HWPROBE_EXT_ZBKB = 0x100 + RISCV_HWPROBE_EXT_ZBKC = 0x200 + RISCV_HWPROBE_EXT_ZBKX = 0x400 + RISCV_HWPROBE_EXT_ZKND = 0x800 + RISCV_HWPROBE_EXT_ZKNE = 0x1000 + RISCV_HWPROBE_EXT_ZKNH = 0x2000 + RISCV_HWPROBE_EXT_ZKSED = 0x4000 + RISCV_HWPROBE_EXT_ZKSH = 0x8000 + RISCV_HWPROBE_EXT_ZKT = 0x10000 + RISCV_HWPROBE_EXT_ZVBB = 0x20000 + RISCV_HWPROBE_EXT_ZVBC = 0x40000 + RISCV_HWPROBE_EXT_ZVKB = 0x80000 + RISCV_HWPROBE_EXT_ZVKG = 0x100000 + RISCV_HWPROBE_EXT_ZVKNED = 0x200000 + RISCV_HWPROBE_EXT_ZVKNHA = 0x400000 + RISCV_HWPROBE_EXT_ZVKNHB = 0x800000 + RISCV_HWPROBE_EXT_ZVKSED = 0x1000000 + RISCV_HWPROBE_EXT_ZVKSH = 0x2000000 + RISCV_HWPROBE_EXT_ZVKT = 0x4000000 + RISCV_HWPROBE_EXT_ZFH = 0x8000000 + RISCV_HWPROBE_EXT_ZFHMIN = 0x10000000 + RISCV_HWPROBE_EXT_ZIHINTNTL = 0x20000000 + RISCV_HWPROBE_EXT_ZVFH = 0x40000000 + RISCV_HWPROBE_EXT_ZVFHMIN = 0x80000000 + RISCV_HWPROBE_EXT_ZFA = 0x100000000 + RISCV_HWPROBE_EXT_ZTSO = 0x200000000 + RISCV_HWPROBE_EXT_ZACAS = 0x400000000 + RISCV_HWPROBE_EXT_ZICOND = 0x800000000 + RISCV_HWPROBE_EXT_ZIHINTPAUSE = 0x1000000000 RISCV_HWPROBE_KEY_CPUPERF_0 = 0x5 RISCV_HWPROBE_MISALIGNED_UNKNOWN = 0x0 RISCV_HWPROBE_MISALIGNED_EMULATED = 0x1 @@ -734,4 +781,6 @@ const ( RISCV_HWPROBE_MISALIGNED_FAST = 0x3 RISCV_HWPROBE_MISALIGNED_UNSUPPORTED = 0x4 RISCV_HWPROBE_MISALIGNED_MASK = 0x7 + RISCV_HWPROBE_KEY_ZICBOZ_BLOCK_SIZE = 0x6 + RISCV_HWPROBE_WHICH_CPUS = 0x1 ) diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go b/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go index cf3ce90037..fb44268ca7 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_s390x.go @@ -353,6 +353,22 @@ type Taskstats struct { Wpcopy_delay_total uint64 Irq_count uint64 Irq_delay_total uint64 + Cpu_delay_max uint64 + Cpu_delay_min uint64 + Blkio_delay_max uint64 + Blkio_delay_min uint64 + Swapin_delay_max uint64 + Swapin_delay_min uint64 + Freepages_delay_max uint64 + Freepages_delay_min uint64 + Thrashing_delay_max uint64 + Thrashing_delay_min uint64 + Compact_delay_max uint64 + Compact_delay_min uint64 + Wpcopy_delay_max uint64 + Wpcopy_delay_min uint64 + Irq_delay_max uint64 + Irq_delay_min uint64 } type cpuMask uint64 diff --git a/vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go b/vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go index 590b56739c..9c38265c74 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go +++ b/vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.go @@ -335,6 +335,22 @@ type Taskstats struct { Wpcopy_delay_total uint64 Irq_count uint64 Irq_delay_total uint64 + Cpu_delay_max uint64 + Cpu_delay_min uint64 + Blkio_delay_max uint64 + Blkio_delay_min uint64 + Swapin_delay_max uint64 + Swapin_delay_min uint64 + Freepages_delay_max uint64 + Freepages_delay_min uint64 + Thrashing_delay_max uint64 + Thrashing_delay_min uint64 + Compact_delay_max uint64 + Compact_delay_min uint64 + Wpcopy_delay_max uint64 + Wpcopy_delay_min uint64 + Irq_delay_max uint64 + Irq_delay_min uint64 } type cpuMask uint64 diff --git a/vendor/golang.org/x/sys/unix/ztypes_netbsd_arm.go b/vendor/golang.org/x/sys/unix/ztypes_netbsd_arm.go index 439548ec9a..50e8e64497 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_netbsd_arm.go +++ b/vendor/golang.org/x/sys/unix/ztypes_netbsd_arm.go @@ -104,7 +104,7 @@ type Statvfs_t struct { Fsid uint32 Namemax uint32 Owner uint32 - Spare [4]uint32 + Spare [4]uint64 Fstypename [32]byte Mntonname [1024]byte Mntfromname [1024]byte diff --git a/vendor/golang.org/x/sys/unix/ztypes_zos_s390x.go b/vendor/golang.org/x/sys/unix/ztypes_zos_s390x.go index d9a13af468..2e5d5a4435 100644 --- a/vendor/golang.org/x/sys/unix/ztypes_zos_s390x.go +++ b/vendor/golang.org/x/sys/unix/ztypes_zos_s390x.go @@ -377,6 +377,12 @@ type Flock_t struct { Pid int32 } +type F_cnvrt struct { + Cvtcmd int32 + Pccsid int16 + Fccsid int16 +} + type Termios struct { Cflag uint32 Iflag uint32 diff --git a/vendor/golang.org/x/sys/windows/dll_windows.go b/vendor/golang.org/x/sys/windows/dll_windows.go index 115341fba6..3ca814f54d 100644 --- a/vendor/golang.org/x/sys/windows/dll_windows.go +++ b/vendor/golang.org/x/sys/windows/dll_windows.go @@ -43,8 +43,8 @@ type DLL struct { // LoadDLL loads DLL file into memory. // // Warning: using LoadDLL without an absolute path name is subject to -// DLL preloading attacks. To safely load a system DLL, use LazyDLL -// with System set to true, or use LoadLibraryEx directly. +// DLL preloading attacks. To safely load a system DLL, use [NewLazySystemDLL], +// or use [LoadLibraryEx] directly. func LoadDLL(name string) (dll *DLL, err error) { namep, err := UTF16PtrFromString(name) if err != nil { @@ -65,7 +65,7 @@ func LoadDLL(name string) (dll *DLL, err error) { return d, nil } -// MustLoadDLL is like LoadDLL but panics if load operation failes. +// MustLoadDLL is like LoadDLL but panics if load operation fails. func MustLoadDLL(name string) *DLL { d, e := LoadDLL(name) if e != nil { @@ -271,6 +271,9 @@ func (d *LazyDLL) NewProc(name string) *LazyProc { } // NewLazyDLL creates new LazyDLL associated with DLL file. +// +// Warning: using NewLazyDLL without an absolute path name is subject to +// DLL preloading attacks. To safely load a system DLL, use [NewLazySystemDLL]. func NewLazyDLL(name string) *LazyDLL { return &LazyDLL{Name: name} } @@ -410,7 +413,3 @@ func loadLibraryEx(name string, system bool) (*DLL, error) { } return &DLL{Name: name, Handle: h}, nil } - -type errString string - -func (s errString) Error() string { return string(s) } diff --git a/vendor/golang.org/x/sys/windows/security_windows.go b/vendor/golang.org/x/sys/windows/security_windows.go index 97651b5bd0..a8b0364c7c 100644 --- a/vendor/golang.org/x/sys/windows/security_windows.go +++ b/vendor/golang.org/x/sys/windows/security_windows.go @@ -1179,7 +1179,7 @@ type OBJECTS_AND_NAME struct { //sys makeSelfRelativeSD(absoluteSD *SECURITY_DESCRIPTOR, selfRelativeSD *SECURITY_DESCRIPTOR, selfRelativeSDSize *uint32) (err error) = advapi32.MakeSelfRelativeSD //sys setEntriesInAcl(countExplicitEntries uint32, explicitEntries *EXPLICIT_ACCESS, oldACL *ACL, newACL **ACL) (ret error) = advapi32.SetEntriesInAclW -//sys GetAce(acl *ACL, aceIndex uint32, pAce **ACCESS_ALLOWED_ACE) (ret error) = advapi32.GetAce +//sys GetAce(acl *ACL, aceIndex uint32, pAce **ACCESS_ALLOWED_ACE) (err error) = advapi32.GetAce // Control returns the security descriptor control bits. func (sd *SECURITY_DESCRIPTOR) Control() (control SECURITY_DESCRIPTOR_CONTROL, revision uint32, err error) { @@ -1303,7 +1303,10 @@ func (selfRelativeSD *SECURITY_DESCRIPTOR) ToAbsolute() (absoluteSD *SECURITY_DE return nil, err } if absoluteSDSize > 0 { - absoluteSD = (*SECURITY_DESCRIPTOR)(unsafe.Pointer(&make([]byte, absoluteSDSize)[0])) + absoluteSD = new(SECURITY_DESCRIPTOR) + if unsafe.Sizeof(*absoluteSD) < uintptr(absoluteSDSize) { + panic("sizeof(SECURITY_DESCRIPTOR) too small") + } } var ( dacl *ACL @@ -1312,19 +1315,55 @@ func (selfRelativeSD *SECURITY_DESCRIPTOR) ToAbsolute() (absoluteSD *SECURITY_DE group *SID ) if daclSize > 0 { - dacl = (*ACL)(unsafe.Pointer(&make([]byte, daclSize)[0])) + dacl = (*ACL)(unsafe.Pointer(unsafe.SliceData(make([]byte, daclSize)))) } if saclSize > 0 { - sacl = (*ACL)(unsafe.Pointer(&make([]byte, saclSize)[0])) + sacl = (*ACL)(unsafe.Pointer(unsafe.SliceData(make([]byte, saclSize)))) } if ownerSize > 0 { - owner = (*SID)(unsafe.Pointer(&make([]byte, ownerSize)[0])) + owner = (*SID)(unsafe.Pointer(unsafe.SliceData(make([]byte, ownerSize)))) } if groupSize > 0 { - group = (*SID)(unsafe.Pointer(&make([]byte, groupSize)[0])) + group = (*SID)(unsafe.Pointer(unsafe.SliceData(make([]byte, groupSize)))) } + // We call into Windows via makeAbsoluteSD, which sets up + // pointers within absoluteSD that point to other chunks of memory + // we pass into makeAbsoluteSD, and that happens outside the view of the GC. + // We therefore take some care here to then verify the pointers are as we expect + // and set them explicitly in view of the GC. See https://go.dev/issue/73199. + // TODO: consider weak pointers once Go 1.24 is appropriate. See suggestion in https://go.dev/cl/663575. err = makeAbsoluteSD(selfRelativeSD, absoluteSD, &absoluteSDSize, dacl, &daclSize, sacl, &saclSize, owner, &ownerSize, group, &groupSize) + if err != nil { + // Don't return absoluteSD, which might be partially initialized. + return nil, err + } + // Before using any fields, verify absoluteSD is in the format we expect according to Windows. + // See https://learn.microsoft.com/en-us/windows/win32/secauthz/absolute-and-self-relative-security-descriptors + absControl, _, err := absoluteSD.Control() + if err != nil { + panic("absoluteSD: " + err.Error()) + } + if absControl&SE_SELF_RELATIVE != 0 { + panic("absoluteSD not in absolute format") + } + if absoluteSD.dacl != dacl { + panic("dacl pointer mismatch") + } + if absoluteSD.sacl != sacl { + panic("sacl pointer mismatch") + } + if absoluteSD.owner != owner { + panic("owner pointer mismatch") + } + if absoluteSD.group != group { + panic("group pointer mismatch") + } + absoluteSD.dacl = dacl + absoluteSD.sacl = sacl + absoluteSD.owner = owner + absoluteSD.group = group + return } diff --git a/vendor/golang.org/x/sys/windows/syscall_windows.go b/vendor/golang.org/x/sys/windows/syscall_windows.go index 6525c62f3c..738a9f2121 100644 --- a/vendor/golang.org/x/sys/windows/syscall_windows.go +++ b/vendor/golang.org/x/sys/windows/syscall_windows.go @@ -17,8 +17,10 @@ import ( "unsafe" ) -type Handle uintptr -type HWND uintptr +type ( + Handle uintptr + HWND uintptr +) const ( InvalidHandle = ^Handle(0) @@ -166,6 +168,8 @@ func NewCallbackCDecl(fn interface{}) uintptr { //sys CreateNamedPipe(name *uint16, flags uint32, pipeMode uint32, maxInstances uint32, outSize uint32, inSize uint32, defaultTimeout uint32, sa *SecurityAttributes) (handle Handle, err error) [failretval==InvalidHandle] = CreateNamedPipeW //sys ConnectNamedPipe(pipe Handle, overlapped *Overlapped) (err error) //sys DisconnectNamedPipe(pipe Handle) (err error) +//sys GetNamedPipeClientProcessId(pipe Handle, clientProcessID *uint32) (err error) +//sys GetNamedPipeServerProcessId(pipe Handle, serverProcessID *uint32) (err error) //sys GetNamedPipeInfo(pipe Handle, flags *uint32, outSize *uint32, inSize *uint32, maxInstances *uint32) (err error) //sys GetNamedPipeHandleState(pipe Handle, state *uint32, curInstances *uint32, maxCollectionCount *uint32, collectDataTimeout *uint32, userName *uint16, maxUserNameSize uint32) (err error) = GetNamedPipeHandleStateW //sys SetNamedPipeHandleState(pipe Handle, state *uint32, maxCollectionCount *uint32, collectDataTimeout *uint32) (err error) = SetNamedPipeHandleState @@ -211,6 +215,10 @@ func NewCallbackCDecl(fn interface{}) uintptr { //sys OpenProcess(desiredAccess uint32, inheritHandle bool, processId uint32) (handle Handle, err error) //sys ShellExecute(hwnd Handle, verb *uint16, file *uint16, args *uint16, cwd *uint16, showCmd int32) (err error) [failretval<=32] = shell32.ShellExecuteW //sys GetWindowThreadProcessId(hwnd HWND, pid *uint32) (tid uint32, err error) = user32.GetWindowThreadProcessId +//sys LoadKeyboardLayout(name *uint16, flags uint32) (hkl Handle, err error) [failretval==0] = user32.LoadKeyboardLayoutW +//sys UnloadKeyboardLayout(hkl Handle) (err error) = user32.UnloadKeyboardLayout +//sys GetKeyboardLayout(tid uint32) (hkl Handle) = user32.GetKeyboardLayout +//sys ToUnicodeEx(vkey uint32, scancode uint32, keystate *byte, pwszBuff *uint16, cchBuff int32, flags uint32, hkl Handle) (ret int32) = user32.ToUnicodeEx //sys GetShellWindow() (shellWindow HWND) = user32.GetShellWindow //sys MessageBox(hwnd HWND, text *uint16, caption *uint16, boxtype uint32) (ret int32, err error) [failretval==0] = user32.MessageBoxW //sys ExitWindowsEx(flags uint32, reason uint32) (err error) = user32.ExitWindowsEx @@ -307,8 +315,14 @@ func NewCallbackCDecl(fn interface{}) uintptr { //sys SetConsoleMode(console Handle, mode uint32) (err error) = kernel32.SetConsoleMode //sys GetConsoleScreenBufferInfo(console Handle, info *ConsoleScreenBufferInfo) (err error) = kernel32.GetConsoleScreenBufferInfo //sys setConsoleCursorPosition(console Handle, position uint32) (err error) = kernel32.SetConsoleCursorPosition +//sys GetConsoleCP() (cp uint32, err error) = kernel32.GetConsoleCP +//sys GetConsoleOutputCP() (cp uint32, err error) = kernel32.GetConsoleOutputCP +//sys SetConsoleCP(cp uint32) (err error) = kernel32.SetConsoleCP +//sys SetConsoleOutputCP(cp uint32) (err error) = kernel32.SetConsoleOutputCP //sys WriteConsole(console Handle, buf *uint16, towrite uint32, written *uint32, reserved *byte) (err error) = kernel32.WriteConsoleW //sys ReadConsole(console Handle, buf *uint16, toread uint32, read *uint32, inputControl *byte) (err error) = kernel32.ReadConsoleW +//sys GetNumberOfConsoleInputEvents(console Handle, numevents *uint32) (err error) = kernel32.GetNumberOfConsoleInputEvents +//sys FlushConsoleInputBuffer(console Handle) (err error) = kernel32.FlushConsoleInputBuffer //sys resizePseudoConsole(pconsole Handle, size uint32) (hr error) = kernel32.ResizePseudoConsole //sys CreateToolhelp32Snapshot(flags uint32, processId uint32) (handle Handle, err error) [failretval==InvalidHandle] = kernel32.CreateToolhelp32Snapshot //sys Module32First(snapshot Handle, moduleEntry *ModuleEntry32) (err error) = kernel32.Module32FirstW @@ -715,20 +729,12 @@ func DurationSinceBoot() time.Duration { } func Ftruncate(fd Handle, length int64) (err error) { - curoffset, e := Seek(fd, 0, 1) - if e != nil { - return e - } - defer Seek(fd, curoffset, 0) - _, e = Seek(fd, length, 0) - if e != nil { - return e + type _FILE_END_OF_FILE_INFO struct { + EndOfFile int64 } - e = SetEndOfFile(fd) - if e != nil { - return e - } - return nil + var info _FILE_END_OF_FILE_INFO + info.EndOfFile = length + return SetFileInformationByHandle(fd, FileEndOfFileInfo, (*byte)(unsafe.Pointer(&info)), uint32(unsafe.Sizeof(info))) } func Gettimeofday(tv *Timeval) (err error) { @@ -866,6 +872,7 @@ const socket_error = uintptr(^uint32(0)) //sys WSARecvFrom(s Handle, bufs *WSABuf, bufcnt uint32, recvd *uint32, flags *uint32, from *RawSockaddrAny, fromlen *int32, overlapped *Overlapped, croutine *byte) (err error) [failretval==socket_error] = ws2_32.WSARecvFrom //sys WSASendTo(s Handle, bufs *WSABuf, bufcnt uint32, sent *uint32, flags uint32, to *RawSockaddrAny, tolen int32, overlapped *Overlapped, croutine *byte) (err error) [failretval==socket_error] = ws2_32.WSASendTo //sys WSASocket(af int32, typ int32, protocol int32, protoInfo *WSAProtocolInfo, group uint32, flags uint32) (handle Handle, err error) [failretval==InvalidHandle] = ws2_32.WSASocketW +//sys WSADuplicateSocket(s Handle, processID uint32, info *WSAProtocolInfo) (err error) [failretval!=0] = ws2_32.WSADuplicateSocketW //sys GetHostByName(name string) (h *Hostent, err error) [failretval==nil] = ws2_32.gethostbyname //sys GetServByName(name string, proto string) (s *Servent, err error) [failretval==nil] = ws2_32.getservbyname //sys Ntohs(netshort uint16) (u uint16) = ws2_32.ntohs @@ -884,6 +891,16 @@ const socket_error = uintptr(^uint32(0)) //sys GetACP() (acp uint32) = kernel32.GetACP //sys MultiByteToWideChar(codePage uint32, dwFlags uint32, str *byte, nstr int32, wchar *uint16, nwchar int32) (nwrite int32, err error) = kernel32.MultiByteToWideChar //sys getBestInterfaceEx(sockaddr unsafe.Pointer, pdwBestIfIndex *uint32) (errcode error) = iphlpapi.GetBestInterfaceEx +//sys GetIfEntry2Ex(level uint32, row *MibIfRow2) (errcode error) = iphlpapi.GetIfEntry2Ex +//sys GetIpForwardEntry2(row *MibIpForwardRow2) (errcode error) = iphlpapi.GetIpForwardEntry2 +//sys GetIpForwardTable2(family uint16, table **MibIpForwardTable2) (errcode error) = iphlpapi.GetIpForwardTable2 +//sys GetUnicastIpAddressEntry(row *MibUnicastIpAddressRow) (errcode error) = iphlpapi.GetUnicastIpAddressEntry +//sys FreeMibTable(memory unsafe.Pointer) = iphlpapi.FreeMibTable +//sys NotifyIpInterfaceChange(family uint16, callback uintptr, callerContext unsafe.Pointer, initialNotification bool, notificationHandle *Handle) (errcode error) = iphlpapi.NotifyIpInterfaceChange +//sys NotifyRouteChange2(family uint16, callback uintptr, callerContext unsafe.Pointer, initialNotification bool, notificationHandle *Handle) (errcode error) = iphlpapi.NotifyRouteChange2 +//sys NotifyUnicastIpAddressChange(family uint16, callback uintptr, callerContext unsafe.Pointer, initialNotification bool, notificationHandle *Handle) (errcode error) = iphlpapi.NotifyUnicastIpAddressChange +//sys CancelMibChangeNotify2(notificationHandle Handle) (errcode error) = iphlpapi.CancelMibChangeNotify2 +//sys IsProcessorFeaturePresent(ProcessorFeature uint32) (ret bool) = kernel32.IsProcessorFeaturePresent // For testing: clients can set this flag to force // creation of IPv6 sockets to return EAFNOSUPPORT. @@ -904,6 +921,17 @@ type RawSockaddrInet6 struct { Scope_id uint32 } +// RawSockaddrInet is a union that contains an IPv4, an IPv6 address, or an address family. See +// https://learn.microsoft.com/en-us/windows/win32/api/ws2ipdef/ns-ws2ipdef-sockaddr_inet. +// +// A [*RawSockaddrInet] may be converted to a [*RawSockaddrInet4] or [*RawSockaddrInet6] using +// unsafe, depending on the address family. +type RawSockaddrInet struct { + Family uint16 + Port uint16 + Data [6]uint32 +} + type RawSockaddr struct { Family uint16 Data [14]int8 @@ -1368,9 +1396,11 @@ func SetsockoptLinger(fd Handle, level, opt int, l *Linger) (err error) { func SetsockoptInet4Addr(fd Handle, level, opt int, value [4]byte) (err error) { return Setsockopt(fd, int32(level), int32(opt), (*byte)(unsafe.Pointer(&value[0])), 4) } + func SetsockoptIPMreq(fd Handle, level, opt int, mreq *IPMreq) (err error) { return Setsockopt(fd, int32(level), int32(opt), (*byte)(unsafe.Pointer(mreq)), int32(unsafe.Sizeof(*mreq))) } + func SetsockoptIPv6Mreq(fd Handle, level, opt int, mreq *IPv6Mreq) (err error) { return syscall.EWINDOWS } @@ -1673,19 +1703,23 @@ func (s NTStatus) Error() string { // do not use NTUnicodeString, and instead UTF16PtrFromString should be used for // the more common *uint16 string type. func NewNTUnicodeString(s string) (*NTUnicodeString, error) { - var u NTUnicodeString - s16, err := UTF16PtrFromString(s) + s16, err := UTF16FromString(s) if err != nil { return nil, err } - RtlInitUnicodeString(&u, s16) - return &u, nil + n := uint16(len(s16) * 2) + return &NTUnicodeString{ + Length: n - 2, // subtract 2 bytes for the NULL terminator + MaximumLength: n, + Buffer: &s16[0], + }, nil } // Slice returns a uint16 slice that aliases the data in the NTUnicodeString. func (s *NTUnicodeString) Slice() []uint16 { - slice := unsafe.Slice(s.Buffer, s.MaximumLength) - return slice[:s.Length] + // Note: this rounds the length down, if it happens + // to (incorrectly) be odd. Probably safer than rounding up. + return unsafe.Slice(s.Buffer, s.MaximumLength/2)[:s.Length/2] } func (s *NTUnicodeString) String() string { diff --git a/vendor/golang.org/x/sys/windows/types_windows.go b/vendor/golang.org/x/sys/windows/types_windows.go index d8cb71db0a..d5658a138c 100644 --- a/vendor/golang.org/x/sys/windows/types_windows.go +++ b/vendor/golang.org/x/sys/windows/types_windows.go @@ -65,6 +65,22 @@ var signals = [...]string{ 15: "terminated", } +// File flags for [os.OpenFile]. The O_ prefix is used to indicate +// that these flags are specific to the OpenFile function. +const ( + O_FILE_FLAG_OPEN_NO_RECALL = FILE_FLAG_OPEN_NO_RECALL + O_FILE_FLAG_OPEN_REPARSE_POINT = FILE_FLAG_OPEN_REPARSE_POINT + O_FILE_FLAG_SESSION_AWARE = FILE_FLAG_SESSION_AWARE + O_FILE_FLAG_POSIX_SEMANTICS = FILE_FLAG_POSIX_SEMANTICS + O_FILE_FLAG_BACKUP_SEMANTICS = FILE_FLAG_BACKUP_SEMANTICS + O_FILE_FLAG_DELETE_ON_CLOSE = FILE_FLAG_DELETE_ON_CLOSE + O_FILE_FLAG_SEQUENTIAL_SCAN = FILE_FLAG_SEQUENTIAL_SCAN + O_FILE_FLAG_RANDOM_ACCESS = FILE_FLAG_RANDOM_ACCESS + O_FILE_FLAG_NO_BUFFERING = FILE_FLAG_NO_BUFFERING + O_FILE_FLAG_OVERLAPPED = FILE_FLAG_OVERLAPPED + O_FILE_FLAG_WRITE_THROUGH = FILE_FLAG_WRITE_THROUGH +) + const ( FILE_READ_DATA = 0x00000001 FILE_READ_ATTRIBUTES = 0x00000080 @@ -176,6 +192,7 @@ const ( WAIT_FAILED = 0xFFFFFFFF // Access rights for process. + PROCESS_ALL_ACCESS = 0xFFFF PROCESS_CREATE_PROCESS = 0x0080 PROCESS_CREATE_THREAD = 0x0002 PROCESS_DUP_HANDLE = 0x0040 @@ -1060,6 +1077,7 @@ const ( SIO_GET_EXTENSION_FUNCTION_POINTER = IOC_INOUT | IOC_WS2 | 6 SIO_KEEPALIVE_VALS = IOC_IN | IOC_VENDOR | 4 SIO_UDP_CONNRESET = IOC_IN | IOC_VENDOR | 12 + SIO_UDP_NETRESET = IOC_IN | IOC_VENDOR | 15 // cf. http://support.microsoft.com/default.aspx?scid=kb;en-us;257460 @@ -1072,6 +1090,7 @@ const ( IP_ADD_MEMBERSHIP = 0xc IP_DROP_MEMBERSHIP = 0xd IP_PKTINFO = 0x13 + IP_MTU_DISCOVER = 0x47 IPV6_V6ONLY = 0x1b IPV6_UNICAST_HOPS = 0x4 @@ -1081,6 +1100,7 @@ const ( IPV6_JOIN_GROUP = 0xc IPV6_LEAVE_GROUP = 0xd IPV6_PKTINFO = 0x13 + IPV6_MTU_DISCOVER = 0x47 MSG_OOB = 0x1 MSG_PEEK = 0x2 @@ -1130,6 +1150,15 @@ const ( WSASYS_STATUS_LEN = 128 ) +// enum PMTUD_STATE from ws2ipdef.h +const ( + IP_PMTUDISC_NOT_SET = 0 + IP_PMTUDISC_DO = 1 + IP_PMTUDISC_DONT = 2 + IP_PMTUDISC_PROBE = 3 + IP_PMTUDISC_MAX = 4 +) + type WSABuf struct { Len uint32 Buf *byte @@ -1144,6 +1173,22 @@ type WSAMsg struct { Flags uint32 } +type WSACMSGHDR struct { + Len uintptr + Level int32 + Type int32 +} + +type IN_PKTINFO struct { + Addr [4]byte + Ifindex uint32 +} + +type IN6_PKTINFO struct { + Addr [16]byte + Ifindex uint32 +} + // Flags for WSASocket const ( WSA_FLAG_OVERLAPPED = 0x01 @@ -1947,6 +1992,12 @@ const ( SYMBOLIC_LINK_FLAG_DIRECTORY = 0x1 ) +// FILE_ZERO_DATA_INFORMATION from winioctl.h +type FileZeroDataInformation struct { + FileOffset int64 + BeyondFinalZero int64 +} + const ( ComputerNameNetBIOS = 0 ComputerNameDnsHostname = 1 @@ -2003,7 +2054,21 @@ const ( MOVEFILE_FAIL_IF_NOT_TRACKABLE = 0x20 ) -const GAA_FLAG_INCLUDE_PREFIX = 0x00000010 +// Flags for GetAdaptersAddresses, see +// https://learn.microsoft.com/en-us/windows/win32/api/iphlpapi/nf-iphlpapi-getadaptersaddresses. +const ( + GAA_FLAG_SKIP_UNICAST = 0x1 + GAA_FLAG_SKIP_ANYCAST = 0x2 + GAA_FLAG_SKIP_MULTICAST = 0x4 + GAA_FLAG_SKIP_DNS_SERVER = 0x8 + GAA_FLAG_INCLUDE_PREFIX = 0x10 + GAA_FLAG_SKIP_FRIENDLY_NAME = 0x20 + GAA_FLAG_INCLUDE_WINS_INFO = 0x40 + GAA_FLAG_INCLUDE_GATEWAYS = 0x80 + GAA_FLAG_INCLUDE_ALL_INTERFACES = 0x100 + GAA_FLAG_INCLUDE_ALL_COMPARTMENTS = 0x200 + GAA_FLAG_INCLUDE_TUNNEL_BINDINGORDER = 0x400 +) const ( IF_TYPE_OTHER = 1 @@ -2017,6 +2082,50 @@ const ( IF_TYPE_IEEE1394 = 144 ) +// Enum NL_PREFIX_ORIGIN for [IpAdapterUnicastAddress], see +// https://learn.microsoft.com/en-us/windows/win32/api/nldef/ne-nldef-nl_prefix_origin +const ( + IpPrefixOriginOther = 0 + IpPrefixOriginManual = 1 + IpPrefixOriginWellKnown = 2 + IpPrefixOriginDhcp = 3 + IpPrefixOriginRouterAdvertisement = 4 + IpPrefixOriginUnchanged = 1 << 4 +) + +// Enum NL_SUFFIX_ORIGIN for [IpAdapterUnicastAddress], see +// https://learn.microsoft.com/en-us/windows/win32/api/nldef/ne-nldef-nl_suffix_origin +const ( + NlsoOther = 0 + NlsoManual = 1 + NlsoWellKnown = 2 + NlsoDhcp = 3 + NlsoLinkLayerAddress = 4 + NlsoRandom = 5 + IpSuffixOriginOther = 0 + IpSuffixOriginManual = 1 + IpSuffixOriginWellKnown = 2 + IpSuffixOriginDhcp = 3 + IpSuffixOriginLinkLayerAddress = 4 + IpSuffixOriginRandom = 5 + IpSuffixOriginUnchanged = 1 << 4 +) + +// Enum NL_DAD_STATE for [IpAdapterUnicastAddress], see +// https://learn.microsoft.com/en-us/windows/win32/api/nldef/ne-nldef-nl_dad_state +const ( + NldsInvalid = 0 + NldsTentative = 1 + NldsDuplicate = 2 + NldsDeprecated = 3 + NldsPreferred = 4 + IpDadStateInvalid = 0 + IpDadStateTentative = 1 + IpDadStateDuplicate = 2 + IpDadStateDeprecated = 3 + IpDadStatePreferred = 4 +) + type SocketAddress struct { Sockaddr *syscall.RawSockaddrAny SockaddrLength int32 @@ -2144,6 +2253,208 @@ const ( IfOperStatusLowerLayerDown = 7 ) +const ( + IF_MAX_PHYS_ADDRESS_LENGTH = 32 + IF_MAX_STRING_SIZE = 256 +) + +// MIB_IF_ENTRY_LEVEL enumeration from netioapi.h or +// https://learn.microsoft.com/en-us/windows/win32/api/netioapi/nf-netioapi-getifentry2ex. +const ( + MibIfEntryNormal = 0 + MibIfEntryNormalWithoutStatistics = 2 +) + +// MIB_NOTIFICATION_TYPE enumeration from netioapi.h or +// https://learn.microsoft.com/en-us/windows/win32/api/netioapi/ne-netioapi-mib_notification_type. +const ( + MibParameterNotification = 0 + MibAddInstance = 1 + MibDeleteInstance = 2 + MibInitialNotification = 3 +) + +// MibIfRow2 stores information about a particular interface. See +// https://learn.microsoft.com/en-us/windows/win32/api/netioapi/ns-netioapi-mib_if_row2. +type MibIfRow2 struct { + InterfaceLuid uint64 + InterfaceIndex uint32 + InterfaceGuid GUID + Alias [IF_MAX_STRING_SIZE + 1]uint16 + Description [IF_MAX_STRING_SIZE + 1]uint16 + PhysicalAddressLength uint32 + PhysicalAddress [IF_MAX_PHYS_ADDRESS_LENGTH]uint8 + PermanentPhysicalAddress [IF_MAX_PHYS_ADDRESS_LENGTH]uint8 + Mtu uint32 + Type uint32 + TunnelType uint32 + MediaType uint32 + PhysicalMediumType uint32 + AccessType uint32 + DirectionType uint32 + InterfaceAndOperStatusFlags uint8 + OperStatus uint32 + AdminStatus uint32 + MediaConnectState uint32 + NetworkGuid GUID + ConnectionType uint32 + TransmitLinkSpeed uint64 + ReceiveLinkSpeed uint64 + InOctets uint64 + InUcastPkts uint64 + InNUcastPkts uint64 + InDiscards uint64 + InErrors uint64 + InUnknownProtos uint64 + InUcastOctets uint64 + InMulticastOctets uint64 + InBroadcastOctets uint64 + OutOctets uint64 + OutUcastPkts uint64 + OutNUcastPkts uint64 + OutDiscards uint64 + OutErrors uint64 + OutUcastOctets uint64 + OutMulticastOctets uint64 + OutBroadcastOctets uint64 + OutQLen uint64 +} + +// IP_ADDRESS_PREFIX stores an IP address prefix. See +// https://learn.microsoft.com/en-us/windows/win32/api/netioapi/ns-netioapi-ip_address_prefix. +type IpAddressPrefix struct { + Prefix RawSockaddrInet + PrefixLength uint8 +} + +// NL_ROUTE_ORIGIN enumeration from nldef.h or +// https://learn.microsoft.com/en-us/windows/win32/api/nldef/ne-nldef-nl_route_origin. +const ( + NlroManual = 0 + NlroWellKnown = 1 + NlroDHCP = 2 + NlroRouterAdvertisement = 3 + Nlro6to4 = 4 +) + +// NL_ROUTE_ORIGIN enumeration from nldef.h or +// https://learn.microsoft.com/en-us/windows/win32/api/nldef/ne-nldef-nl_route_protocol. +const ( + MIB_IPPROTO_OTHER = 1 + MIB_IPPROTO_LOCAL = 2 + MIB_IPPROTO_NETMGMT = 3 + MIB_IPPROTO_ICMP = 4 + MIB_IPPROTO_EGP = 5 + MIB_IPPROTO_GGP = 6 + MIB_IPPROTO_HELLO = 7 + MIB_IPPROTO_RIP = 8 + MIB_IPPROTO_IS_IS = 9 + MIB_IPPROTO_ES_IS = 10 + MIB_IPPROTO_CISCO = 11 + MIB_IPPROTO_BBN = 12 + MIB_IPPROTO_OSPF = 13 + MIB_IPPROTO_BGP = 14 + MIB_IPPROTO_IDPR = 15 + MIB_IPPROTO_EIGRP = 16 + MIB_IPPROTO_DVMRP = 17 + MIB_IPPROTO_RPL = 18 + MIB_IPPROTO_DHCP = 19 + MIB_IPPROTO_NT_AUTOSTATIC = 10002 + MIB_IPPROTO_NT_STATIC = 10006 + MIB_IPPROTO_NT_STATIC_NON_DOD = 10007 +) + +// MIB_IPFORWARD_ROW2 stores information about an IP route entry. See +// https://learn.microsoft.com/en-us/windows/win32/api/netioapi/ns-netioapi-mib_ipforward_row2. +type MibIpForwardRow2 struct { + InterfaceLuid uint64 + InterfaceIndex uint32 + DestinationPrefix IpAddressPrefix + NextHop RawSockaddrInet + SitePrefixLength uint8 + ValidLifetime uint32 + PreferredLifetime uint32 + Metric uint32 + Protocol uint32 + Loopback uint8 + AutoconfigureAddress uint8 + Publish uint8 + Immortal uint8 + Age uint32 + Origin uint32 +} + +// MIB_IPFORWARD_TABLE2 contains a table of IP route entries. See +// https://learn.microsoft.com/en-us/windows/win32/api/netioapi/ns-netioapi-mib_ipforward_table2. +type MibIpForwardTable2 struct { + NumEntries uint32 + Table [1]MibIpForwardRow2 +} + +// Rows returns the IP route entries in the table. +func (t *MibIpForwardTable2) Rows() []MibIpForwardRow2 { + return unsafe.Slice(&t.Table[0], t.NumEntries) +} + +// MIB_UNICASTIPADDRESS_ROW stores information about a unicast IP address. See +// https://learn.microsoft.com/en-us/windows/win32/api/netioapi/ns-netioapi-mib_unicastipaddress_row. +type MibUnicastIpAddressRow struct { + Address RawSockaddrInet6 // SOCKADDR_INET union + InterfaceLuid uint64 + InterfaceIndex uint32 + PrefixOrigin uint32 + SuffixOrigin uint32 + ValidLifetime uint32 + PreferredLifetime uint32 + OnLinkPrefixLength uint8 + SkipAsSource uint8 + DadState uint32 + ScopeId uint32 + CreationTimeStamp Filetime +} + +const ScopeLevelCount = 16 + +// MIB_IPINTERFACE_ROW stores interface management information for a particular IP address family on a network interface. +// See https://learn.microsoft.com/en-us/windows/win32/api/netioapi/ns-netioapi-mib_ipinterface_row. +type MibIpInterfaceRow struct { + Family uint16 + InterfaceLuid uint64 + InterfaceIndex uint32 + MaxReassemblySize uint32 + InterfaceIdentifier uint64 + MinRouterAdvertisementInterval uint32 + MaxRouterAdvertisementInterval uint32 + AdvertisingEnabled uint8 + ForwardingEnabled uint8 + WeakHostSend uint8 + WeakHostReceive uint8 + UseAutomaticMetric uint8 + UseNeighborUnreachabilityDetection uint8 + ManagedAddressConfigurationSupported uint8 + OtherStatefulConfigurationSupported uint8 + AdvertiseDefaultRoute uint8 + RouterDiscoveryBehavior uint32 + DadTransmits uint32 + BaseReachableTime uint32 + RetransmitTime uint32 + PathMtuDiscoveryTimeout uint32 + LinkLocalAddressBehavior uint32 + LinkLocalAddressTimeout uint32 + ZoneIndices [ScopeLevelCount]uint32 + SitePrefixLength uint32 + Metric uint32 + NlMtu uint32 + Connected uint8 + SupportsWakeUpPatterns uint8 + SupportsNeighborDiscovery uint8 + SupportsRouterDiscovery uint8 + ReachableTime uint32 + TransmitOffload uint32 + ReceiveOffload uint32 + DisableDefaultRoutes uint8 +} + // Console related constants used for the mode parameter to SetConsoleMode. See // https://docs.microsoft.com/en-us/windows/console/setconsolemode for details. @@ -2487,6 +2798,8 @@ type CommTimeouts struct { // NTUnicodeString is a UTF-16 string for NT native APIs, corresponding to UNICODE_STRING. type NTUnicodeString struct { + // Note: Length and MaximumLength are in *bytes*, not uint16s. + // They should always be even. Length uint16 MaximumLength uint16 Buffer *uint16 @@ -3404,3 +3717,309 @@ type DCB struct { EvtChar byte wReserved1 uint16 } + +// Keyboard Layout Flags. +// See https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-loadkeyboardlayoutw +const ( + KLF_ACTIVATE = 0x00000001 + KLF_SUBSTITUTE_OK = 0x00000002 + KLF_REORDER = 0x00000008 + KLF_REPLACELANG = 0x00000010 + KLF_NOTELLSHELL = 0x00000080 + KLF_SETFORPROCESS = 0x00000100 +) + +// Virtual Key codes +// https://docs.microsoft.com/en-us/windows/win32/inputdev/virtual-key-codes +const ( + VK_LBUTTON = 0x01 + VK_RBUTTON = 0x02 + VK_CANCEL = 0x03 + VK_MBUTTON = 0x04 + VK_XBUTTON1 = 0x05 + VK_XBUTTON2 = 0x06 + VK_BACK = 0x08 + VK_TAB = 0x09 + VK_CLEAR = 0x0C + VK_RETURN = 0x0D + VK_SHIFT = 0x10 + VK_CONTROL = 0x11 + VK_MENU = 0x12 + VK_PAUSE = 0x13 + VK_CAPITAL = 0x14 + VK_KANA = 0x15 + VK_HANGEUL = 0x15 + VK_HANGUL = 0x15 + VK_IME_ON = 0x16 + VK_JUNJA = 0x17 + VK_FINAL = 0x18 + VK_HANJA = 0x19 + VK_KANJI = 0x19 + VK_IME_OFF = 0x1A + VK_ESCAPE = 0x1B + VK_CONVERT = 0x1C + VK_NONCONVERT = 0x1D + VK_ACCEPT = 0x1E + VK_MODECHANGE = 0x1F + VK_SPACE = 0x20 + VK_PRIOR = 0x21 + VK_NEXT = 0x22 + VK_END = 0x23 + VK_HOME = 0x24 + VK_LEFT = 0x25 + VK_UP = 0x26 + VK_RIGHT = 0x27 + VK_DOWN = 0x28 + VK_SELECT = 0x29 + VK_PRINT = 0x2A + VK_EXECUTE = 0x2B + VK_SNAPSHOT = 0x2C + VK_INSERT = 0x2D + VK_DELETE = 0x2E + VK_HELP = 0x2F + VK_LWIN = 0x5B + VK_RWIN = 0x5C + VK_APPS = 0x5D + VK_SLEEP = 0x5F + VK_NUMPAD0 = 0x60 + VK_NUMPAD1 = 0x61 + VK_NUMPAD2 = 0x62 + VK_NUMPAD3 = 0x63 + VK_NUMPAD4 = 0x64 + VK_NUMPAD5 = 0x65 + VK_NUMPAD6 = 0x66 + VK_NUMPAD7 = 0x67 + VK_NUMPAD8 = 0x68 + VK_NUMPAD9 = 0x69 + VK_MULTIPLY = 0x6A + VK_ADD = 0x6B + VK_SEPARATOR = 0x6C + VK_SUBTRACT = 0x6D + VK_DECIMAL = 0x6E + VK_DIVIDE = 0x6F + VK_F1 = 0x70 + VK_F2 = 0x71 + VK_F3 = 0x72 + VK_F4 = 0x73 + VK_F5 = 0x74 + VK_F6 = 0x75 + VK_F7 = 0x76 + VK_F8 = 0x77 + VK_F9 = 0x78 + VK_F10 = 0x79 + VK_F11 = 0x7A + VK_F12 = 0x7B + VK_F13 = 0x7C + VK_F14 = 0x7D + VK_F15 = 0x7E + VK_F16 = 0x7F + VK_F17 = 0x80 + VK_F18 = 0x81 + VK_F19 = 0x82 + VK_F20 = 0x83 + VK_F21 = 0x84 + VK_F22 = 0x85 + VK_F23 = 0x86 + VK_F24 = 0x87 + VK_NUMLOCK = 0x90 + VK_SCROLL = 0x91 + VK_OEM_NEC_EQUAL = 0x92 + VK_OEM_FJ_JISHO = 0x92 + VK_OEM_FJ_MASSHOU = 0x93 + VK_OEM_FJ_TOUROKU = 0x94 + VK_OEM_FJ_LOYA = 0x95 + VK_OEM_FJ_ROYA = 0x96 + VK_LSHIFT = 0xA0 + VK_RSHIFT = 0xA1 + VK_LCONTROL = 0xA2 + VK_RCONTROL = 0xA3 + VK_LMENU = 0xA4 + VK_RMENU = 0xA5 + VK_BROWSER_BACK = 0xA6 + VK_BROWSER_FORWARD = 0xA7 + VK_BROWSER_REFRESH = 0xA8 + VK_BROWSER_STOP = 0xA9 + VK_BROWSER_SEARCH = 0xAA + VK_BROWSER_FAVORITES = 0xAB + VK_BROWSER_HOME = 0xAC + VK_VOLUME_MUTE = 0xAD + VK_VOLUME_DOWN = 0xAE + VK_VOLUME_UP = 0xAF + VK_MEDIA_NEXT_TRACK = 0xB0 + VK_MEDIA_PREV_TRACK = 0xB1 + VK_MEDIA_STOP = 0xB2 + VK_MEDIA_PLAY_PAUSE = 0xB3 + VK_LAUNCH_MAIL = 0xB4 + VK_LAUNCH_MEDIA_SELECT = 0xB5 + VK_LAUNCH_APP1 = 0xB6 + VK_LAUNCH_APP2 = 0xB7 + VK_OEM_1 = 0xBA + VK_OEM_PLUS = 0xBB + VK_OEM_COMMA = 0xBC + VK_OEM_MINUS = 0xBD + VK_OEM_PERIOD = 0xBE + VK_OEM_2 = 0xBF + VK_OEM_3 = 0xC0 + VK_OEM_4 = 0xDB + VK_OEM_5 = 0xDC + VK_OEM_6 = 0xDD + VK_OEM_7 = 0xDE + VK_OEM_8 = 0xDF + VK_OEM_AX = 0xE1 + VK_OEM_102 = 0xE2 + VK_ICO_HELP = 0xE3 + VK_ICO_00 = 0xE4 + VK_PROCESSKEY = 0xE5 + VK_ICO_CLEAR = 0xE6 + VK_OEM_RESET = 0xE9 + VK_OEM_JUMP = 0xEA + VK_OEM_PA1 = 0xEB + VK_OEM_PA2 = 0xEC + VK_OEM_PA3 = 0xED + VK_OEM_WSCTRL = 0xEE + VK_OEM_CUSEL = 0xEF + VK_OEM_ATTN = 0xF0 + VK_OEM_FINISH = 0xF1 + VK_OEM_COPY = 0xF2 + VK_OEM_AUTO = 0xF3 + VK_OEM_ENLW = 0xF4 + VK_OEM_BACKTAB = 0xF5 + VK_ATTN = 0xF6 + VK_CRSEL = 0xF7 + VK_EXSEL = 0xF8 + VK_EREOF = 0xF9 + VK_PLAY = 0xFA + VK_ZOOM = 0xFB + VK_NONAME = 0xFC + VK_PA1 = 0xFD + VK_OEM_CLEAR = 0xFE +) + +// Mouse button constants. +// https://docs.microsoft.com/en-us/windows/console/mouse-event-record-str +const ( + FROM_LEFT_1ST_BUTTON_PRESSED = 0x0001 + RIGHTMOST_BUTTON_PRESSED = 0x0002 + FROM_LEFT_2ND_BUTTON_PRESSED = 0x0004 + FROM_LEFT_3RD_BUTTON_PRESSED = 0x0008 + FROM_LEFT_4TH_BUTTON_PRESSED = 0x0010 +) + +// Control key state constaints. +// https://docs.microsoft.com/en-us/windows/console/key-event-record-str +// https://docs.microsoft.com/en-us/windows/console/mouse-event-record-str +const ( + CAPSLOCK_ON = 0x0080 + ENHANCED_KEY = 0x0100 + LEFT_ALT_PRESSED = 0x0002 + LEFT_CTRL_PRESSED = 0x0008 + NUMLOCK_ON = 0x0020 + RIGHT_ALT_PRESSED = 0x0001 + RIGHT_CTRL_PRESSED = 0x0004 + SCROLLLOCK_ON = 0x0040 + SHIFT_PRESSED = 0x0010 +) + +// Mouse event record event flags. +// https://docs.microsoft.com/en-us/windows/console/mouse-event-record-str +const ( + MOUSE_MOVED = 0x0001 + DOUBLE_CLICK = 0x0002 + MOUSE_WHEELED = 0x0004 + MOUSE_HWHEELED = 0x0008 +) + +// Input Record Event Types +// https://learn.microsoft.com/en-us/windows/console/input-record-str +const ( + FOCUS_EVENT = 0x0010 + KEY_EVENT = 0x0001 + MENU_EVENT = 0x0008 + MOUSE_EVENT = 0x0002 + WINDOW_BUFFER_SIZE_EVENT = 0x0004 +) + +// The processor features to be tested for IsProcessorFeaturePresent, see +// https://learn.microsoft.com/en-us/windows/win32/api/processthreadsapi/nf-processthreadsapi-isprocessorfeaturepresent +const ( + PF_ARM_64BIT_LOADSTORE_ATOMIC = 25 + PF_ARM_DIVIDE_INSTRUCTION_AVAILABLE = 24 + PF_ARM_EXTERNAL_CACHE_AVAILABLE = 26 + PF_ARM_FMAC_INSTRUCTIONS_AVAILABLE = 27 + PF_ARM_VFP_32_REGISTERS_AVAILABLE = 18 + PF_3DNOW_INSTRUCTIONS_AVAILABLE = 7 + PF_CHANNELS_ENABLED = 16 + PF_COMPARE_EXCHANGE_DOUBLE = 2 + PF_COMPARE_EXCHANGE128 = 14 + PF_COMPARE64_EXCHANGE128 = 15 + PF_FASTFAIL_AVAILABLE = 23 + PF_FLOATING_POINT_EMULATED = 1 + PF_FLOATING_POINT_PRECISION_ERRATA = 0 + PF_MMX_INSTRUCTIONS_AVAILABLE = 3 + PF_NX_ENABLED = 12 + PF_PAE_ENABLED = 9 + PF_RDTSC_INSTRUCTION_AVAILABLE = 8 + PF_RDWRFSGSBASE_AVAILABLE = 22 + PF_SECOND_LEVEL_ADDRESS_TRANSLATION = 20 + PF_SSE3_INSTRUCTIONS_AVAILABLE = 13 + PF_SSSE3_INSTRUCTIONS_AVAILABLE = 36 + PF_SSE4_1_INSTRUCTIONS_AVAILABLE = 37 + PF_SSE4_2_INSTRUCTIONS_AVAILABLE = 38 + PF_AVX_INSTRUCTIONS_AVAILABLE = 39 + PF_AVX2_INSTRUCTIONS_AVAILABLE = 40 + PF_AVX512F_INSTRUCTIONS_AVAILABLE = 41 + PF_VIRT_FIRMWARE_ENABLED = 21 + PF_XMMI_INSTRUCTIONS_AVAILABLE = 6 + PF_XMMI64_INSTRUCTIONS_AVAILABLE = 10 + PF_XSAVE_ENABLED = 17 + PF_ARM_V8_INSTRUCTIONS_AVAILABLE = 29 + PF_ARM_V8_CRYPTO_INSTRUCTIONS_AVAILABLE = 30 + PF_ARM_V8_CRC32_INSTRUCTIONS_AVAILABLE = 31 + PF_ARM_V81_ATOMIC_INSTRUCTIONS_AVAILABLE = 34 + PF_ARM_V82_DP_INSTRUCTIONS_AVAILABLE = 43 + PF_ARM_V83_JSCVT_INSTRUCTIONS_AVAILABLE = 44 + PF_ARM_V83_LRCPC_INSTRUCTIONS_AVAILABLE = 45 + PF_ARM_SVE_INSTRUCTIONS_AVAILABLE = 46 + PF_ARM_SVE2_INSTRUCTIONS_AVAILABLE = 47 + PF_ARM_SVE2_1_INSTRUCTIONS_AVAILABLE = 48 + PF_ARM_SVE_AES_INSTRUCTIONS_AVAILABLE = 49 + PF_ARM_SVE_PMULL128_INSTRUCTIONS_AVAILABLE = 50 + PF_ARM_SVE_BITPERM_INSTRUCTIONS_AVAILABLE = 51 + PF_ARM_SVE_BF16_INSTRUCTIONS_AVAILABLE = 52 + PF_ARM_SVE_EBF16_INSTRUCTIONS_AVAILABLE = 53 + PF_ARM_SVE_B16B16_INSTRUCTIONS_AVAILABLE = 54 + PF_ARM_SVE_SHA3_INSTRUCTIONS_AVAILABLE = 55 + PF_ARM_SVE_SM4_INSTRUCTIONS_AVAILABLE = 56 + PF_ARM_SVE_I8MM_INSTRUCTIONS_AVAILABLE = 57 + PF_ARM_SVE_F32MM_INSTRUCTIONS_AVAILABLE = 58 + PF_ARM_SVE_F64MM_INSTRUCTIONS_AVAILABLE = 59 + PF_BMI2_INSTRUCTIONS_AVAILABLE = 60 + PF_MOVDIR64B_INSTRUCTION_AVAILABLE = 61 + PF_ARM_LSE2_AVAILABLE = 62 + PF_ARM_SHA3_INSTRUCTIONS_AVAILABLE = 64 + PF_ARM_SHA512_INSTRUCTIONS_AVAILABLE = 65 + PF_ARM_V82_I8MM_INSTRUCTIONS_AVAILABLE = 66 + PF_ARM_V82_FP16_INSTRUCTIONS_AVAILABLE = 67 + PF_ARM_V86_BF16_INSTRUCTIONS_AVAILABLE = 68 + PF_ARM_V86_EBF16_INSTRUCTIONS_AVAILABLE = 69 + PF_ARM_SME_INSTRUCTIONS_AVAILABLE = 70 + PF_ARM_SME2_INSTRUCTIONS_AVAILABLE = 71 + PF_ARM_SME2_1_INSTRUCTIONS_AVAILABLE = 72 + PF_ARM_SME2_2_INSTRUCTIONS_AVAILABLE = 73 + PF_ARM_SME_AES_INSTRUCTIONS_AVAILABLE = 74 + PF_ARM_SME_SBITPERM_INSTRUCTIONS_AVAILABLE = 75 + PF_ARM_SME_SF8MM4_INSTRUCTIONS_AVAILABLE = 76 + PF_ARM_SME_SF8MM8_INSTRUCTIONS_AVAILABLE = 77 + PF_ARM_SME_SF8DP2_INSTRUCTIONS_AVAILABLE = 78 + PF_ARM_SME_SF8DP4_INSTRUCTIONS_AVAILABLE = 79 + PF_ARM_SME_SF8FMA_INSTRUCTIONS_AVAILABLE = 80 + PF_ARM_SME_F8F32_INSTRUCTIONS_AVAILABLE = 81 + PF_ARM_SME_F8F16_INSTRUCTIONS_AVAILABLE = 82 + PF_ARM_SME_F16F16_INSTRUCTIONS_AVAILABLE = 83 + PF_ARM_SME_B16B16_INSTRUCTIONS_AVAILABLE = 84 + PF_ARM_SME_F64F64_INSTRUCTIONS_AVAILABLE = 85 + PF_ARM_SME_I16I64_INSTRUCTIONS_AVAILABLE = 86 + PF_ARM_SME_LUTv2_INSTRUCTIONS_AVAILABLE = 87 + PF_ARM_SME_FA64_INSTRUCTIONS_AVAILABLE = 88 + PF_UMONITOR_INSTRUCTION_AVAILABLE = 89 +) diff --git a/vendor/golang.org/x/sys/windows/zsyscall_windows.go b/vendor/golang.org/x/sys/windows/zsyscall_windows.go index eba761018a..fe7a4ea124 100644 --- a/vendor/golang.org/x/sys/windows/zsyscall_windows.go +++ b/vendor/golang.org/x/sys/windows/zsyscall_windows.go @@ -181,10 +181,19 @@ var ( procDnsRecordListFree = moddnsapi.NewProc("DnsRecordListFree") procDwmGetWindowAttribute = moddwmapi.NewProc("DwmGetWindowAttribute") procDwmSetWindowAttribute = moddwmapi.NewProc("DwmSetWindowAttribute") + procCancelMibChangeNotify2 = modiphlpapi.NewProc("CancelMibChangeNotify2") + procFreeMibTable = modiphlpapi.NewProc("FreeMibTable") procGetAdaptersAddresses = modiphlpapi.NewProc("GetAdaptersAddresses") procGetAdaptersInfo = modiphlpapi.NewProc("GetAdaptersInfo") procGetBestInterfaceEx = modiphlpapi.NewProc("GetBestInterfaceEx") procGetIfEntry = modiphlpapi.NewProc("GetIfEntry") + procGetIfEntry2Ex = modiphlpapi.NewProc("GetIfEntry2Ex") + procGetIpForwardEntry2 = modiphlpapi.NewProc("GetIpForwardEntry2") + procGetIpForwardTable2 = modiphlpapi.NewProc("GetIpForwardTable2") + procGetUnicastIpAddressEntry = modiphlpapi.NewProc("GetUnicastIpAddressEntry") + procNotifyIpInterfaceChange = modiphlpapi.NewProc("NotifyIpInterfaceChange") + procNotifyRouteChange2 = modiphlpapi.NewProc("NotifyRouteChange2") + procNotifyUnicastIpAddressChange = modiphlpapi.NewProc("NotifyUnicastIpAddressChange") procAddDllDirectory = modkernel32.NewProc("AddDllDirectory") procAssignProcessToJobObject = modkernel32.NewProc("AssignProcessToJobObject") procCancelIo = modkernel32.NewProc("CancelIo") @@ -233,6 +242,7 @@ var ( procFindResourceW = modkernel32.NewProc("FindResourceW") procFindVolumeClose = modkernel32.NewProc("FindVolumeClose") procFindVolumeMountPointClose = modkernel32.NewProc("FindVolumeMountPointClose") + procFlushConsoleInputBuffer = modkernel32.NewProc("FlushConsoleInputBuffer") procFlushFileBuffers = modkernel32.NewProc("FlushFileBuffers") procFlushViewOfFile = modkernel32.NewProc("FlushViewOfFile") procFormatMessageW = modkernel32.NewProc("FormatMessageW") @@ -247,7 +257,9 @@ var ( procGetCommandLineW = modkernel32.NewProc("GetCommandLineW") procGetComputerNameExW = modkernel32.NewProc("GetComputerNameExW") procGetComputerNameW = modkernel32.NewProc("GetComputerNameW") + procGetConsoleCP = modkernel32.NewProc("GetConsoleCP") procGetConsoleMode = modkernel32.NewProc("GetConsoleMode") + procGetConsoleOutputCP = modkernel32.NewProc("GetConsoleOutputCP") procGetConsoleScreenBufferInfo = modkernel32.NewProc("GetConsoleScreenBufferInfo") procGetCurrentDirectoryW = modkernel32.NewProc("GetCurrentDirectoryW") procGetCurrentProcessId = modkernel32.NewProc("GetCurrentProcessId") @@ -273,8 +285,11 @@ var ( procGetMaximumProcessorCount = modkernel32.NewProc("GetMaximumProcessorCount") procGetModuleFileNameW = modkernel32.NewProc("GetModuleFileNameW") procGetModuleHandleExW = modkernel32.NewProc("GetModuleHandleExW") + procGetNamedPipeClientProcessId = modkernel32.NewProc("GetNamedPipeClientProcessId") procGetNamedPipeHandleStateW = modkernel32.NewProc("GetNamedPipeHandleStateW") procGetNamedPipeInfo = modkernel32.NewProc("GetNamedPipeInfo") + procGetNamedPipeServerProcessId = modkernel32.NewProc("GetNamedPipeServerProcessId") + procGetNumberOfConsoleInputEvents = modkernel32.NewProc("GetNumberOfConsoleInputEvents") procGetOverlappedResult = modkernel32.NewProc("GetOverlappedResult") procGetPriorityClass = modkernel32.NewProc("GetPriorityClass") procGetProcAddress = modkernel32.NewProc("GetProcAddress") @@ -305,6 +320,7 @@ var ( procGetVolumePathNamesForVolumeNameW = modkernel32.NewProc("GetVolumePathNamesForVolumeNameW") procGetWindowsDirectoryW = modkernel32.NewProc("GetWindowsDirectoryW") procInitializeProcThreadAttributeList = modkernel32.NewProc("InitializeProcThreadAttributeList") + procIsProcessorFeaturePresent = modkernel32.NewProc("IsProcessorFeaturePresent") procIsWow64Process = modkernel32.NewProc("IsWow64Process") procIsWow64Process2 = modkernel32.NewProc("IsWow64Process2") procLoadLibraryExW = modkernel32.NewProc("LoadLibraryExW") @@ -347,8 +363,10 @@ var ( procSetCommMask = modkernel32.NewProc("SetCommMask") procSetCommState = modkernel32.NewProc("SetCommState") procSetCommTimeouts = modkernel32.NewProc("SetCommTimeouts") + procSetConsoleCP = modkernel32.NewProc("SetConsoleCP") procSetConsoleCursorPosition = modkernel32.NewProc("SetConsoleCursorPosition") procSetConsoleMode = modkernel32.NewProc("SetConsoleMode") + procSetConsoleOutputCP = modkernel32.NewProc("SetConsoleOutputCP") procSetCurrentDirectoryW = modkernel32.NewProc("SetCurrentDirectoryW") procSetDefaultDllDirectories = modkernel32.NewProc("SetDefaultDllDirectories") procSetDllDirectoryW = modkernel32.NewProc("SetDllDirectoryW") @@ -478,12 +496,16 @@ var ( procGetDesktopWindow = moduser32.NewProc("GetDesktopWindow") procGetForegroundWindow = moduser32.NewProc("GetForegroundWindow") procGetGUIThreadInfo = moduser32.NewProc("GetGUIThreadInfo") + procGetKeyboardLayout = moduser32.NewProc("GetKeyboardLayout") procGetShellWindow = moduser32.NewProc("GetShellWindow") procGetWindowThreadProcessId = moduser32.NewProc("GetWindowThreadProcessId") procIsWindow = moduser32.NewProc("IsWindow") procIsWindowUnicode = moduser32.NewProc("IsWindowUnicode") procIsWindowVisible = moduser32.NewProc("IsWindowVisible") + procLoadKeyboardLayoutW = moduser32.NewProc("LoadKeyboardLayoutW") procMessageBoxW = moduser32.NewProc("MessageBoxW") + procToUnicodeEx = moduser32.NewProc("ToUnicodeEx") + procUnloadKeyboardLayout = moduser32.NewProc("UnloadKeyboardLayout") procCreateEnvironmentBlock = moduserenv.NewProc("CreateEnvironmentBlock") procDestroyEnvironmentBlock = moduserenv.NewProc("DestroyEnvironmentBlock") procGetUserProfileDirectoryW = moduserenv.NewProc("GetUserProfileDirectoryW") @@ -496,6 +518,7 @@ var ( procFreeAddrInfoW = modws2_32.NewProc("FreeAddrInfoW") procGetAddrInfoW = modws2_32.NewProc("GetAddrInfoW") procWSACleanup = modws2_32.NewProc("WSACleanup") + procWSADuplicateSocketW = modws2_32.NewProc("WSADuplicateSocketW") procWSAEnumProtocolsW = modws2_32.NewProc("WSAEnumProtocolsW") procWSAGetOverlappedResult = modws2_32.NewProc("WSAGetOverlappedResult") procWSAIoctl = modws2_32.NewProc("WSAIoctl") @@ -530,25 +553,25 @@ var ( ) func cm_Get_DevNode_Status(status *uint32, problemNumber *uint32, devInst DEVINST, flags uint32) (ret CONFIGRET) { - r0, _, _ := syscall.Syscall6(procCM_Get_DevNode_Status.Addr(), 4, uintptr(unsafe.Pointer(status)), uintptr(unsafe.Pointer(problemNumber)), uintptr(devInst), uintptr(flags), 0, 0) + r0, _, _ := syscall.SyscallN(procCM_Get_DevNode_Status.Addr(), uintptr(unsafe.Pointer(status)), uintptr(unsafe.Pointer(problemNumber)), uintptr(devInst), uintptr(flags)) ret = CONFIGRET(r0) return } func cm_Get_Device_Interface_List(interfaceClass *GUID, deviceID *uint16, buffer *uint16, bufferLen uint32, flags uint32) (ret CONFIGRET) { - r0, _, _ := syscall.Syscall6(procCM_Get_Device_Interface_ListW.Addr(), 5, uintptr(unsafe.Pointer(interfaceClass)), uintptr(unsafe.Pointer(deviceID)), uintptr(unsafe.Pointer(buffer)), uintptr(bufferLen), uintptr(flags), 0) + r0, _, _ := syscall.SyscallN(procCM_Get_Device_Interface_ListW.Addr(), uintptr(unsafe.Pointer(interfaceClass)), uintptr(unsafe.Pointer(deviceID)), uintptr(unsafe.Pointer(buffer)), uintptr(bufferLen), uintptr(flags)) ret = CONFIGRET(r0) return } func cm_Get_Device_Interface_List_Size(len *uint32, interfaceClass *GUID, deviceID *uint16, flags uint32) (ret CONFIGRET) { - r0, _, _ := syscall.Syscall6(procCM_Get_Device_Interface_List_SizeW.Addr(), 4, uintptr(unsafe.Pointer(len)), uintptr(unsafe.Pointer(interfaceClass)), uintptr(unsafe.Pointer(deviceID)), uintptr(flags), 0, 0) + r0, _, _ := syscall.SyscallN(procCM_Get_Device_Interface_List_SizeW.Addr(), uintptr(unsafe.Pointer(len)), uintptr(unsafe.Pointer(interfaceClass)), uintptr(unsafe.Pointer(deviceID)), uintptr(flags)) ret = CONFIGRET(r0) return } func cm_MapCrToWin32Err(configRet CONFIGRET, defaultWin32Error Errno) (ret Errno) { - r0, _, _ := syscall.Syscall(procCM_MapCrToWin32Err.Addr(), 2, uintptr(configRet), uintptr(defaultWin32Error), 0) + r0, _, _ := syscall.SyscallN(procCM_MapCrToWin32Err.Addr(), uintptr(configRet), uintptr(defaultWin32Error)) ret = Errno(r0) return } @@ -558,7 +581,7 @@ func AdjustTokenGroups(token Token, resetToDefault bool, newstate *Tokengroups, if resetToDefault { _p0 = 1 } - r1, _, e1 := syscall.Syscall6(procAdjustTokenGroups.Addr(), 6, uintptr(token), uintptr(_p0), uintptr(unsafe.Pointer(newstate)), uintptr(buflen), uintptr(unsafe.Pointer(prevstate)), uintptr(unsafe.Pointer(returnlen))) + r1, _, e1 := syscall.SyscallN(procAdjustTokenGroups.Addr(), uintptr(token), uintptr(_p0), uintptr(unsafe.Pointer(newstate)), uintptr(buflen), uintptr(unsafe.Pointer(prevstate)), uintptr(unsafe.Pointer(returnlen))) if r1 == 0 { err = errnoErr(e1) } @@ -570,7 +593,7 @@ func AdjustTokenPrivileges(token Token, disableAllPrivileges bool, newstate *Tok if disableAllPrivileges { _p0 = 1 } - r1, _, e1 := syscall.Syscall6(procAdjustTokenPrivileges.Addr(), 6, uintptr(token), uintptr(_p0), uintptr(unsafe.Pointer(newstate)), uintptr(buflen), uintptr(unsafe.Pointer(prevstate)), uintptr(unsafe.Pointer(returnlen))) + r1, _, e1 := syscall.SyscallN(procAdjustTokenPrivileges.Addr(), uintptr(token), uintptr(_p0), uintptr(unsafe.Pointer(newstate)), uintptr(buflen), uintptr(unsafe.Pointer(prevstate)), uintptr(unsafe.Pointer(returnlen))) if r1 == 0 { err = errnoErr(e1) } @@ -578,7 +601,7 @@ func AdjustTokenPrivileges(token Token, disableAllPrivileges bool, newstate *Tok } func AllocateAndInitializeSid(identAuth *SidIdentifierAuthority, subAuth byte, subAuth0 uint32, subAuth1 uint32, subAuth2 uint32, subAuth3 uint32, subAuth4 uint32, subAuth5 uint32, subAuth6 uint32, subAuth7 uint32, sid **SID) (err error) { - r1, _, e1 := syscall.Syscall12(procAllocateAndInitializeSid.Addr(), 11, uintptr(unsafe.Pointer(identAuth)), uintptr(subAuth), uintptr(subAuth0), uintptr(subAuth1), uintptr(subAuth2), uintptr(subAuth3), uintptr(subAuth4), uintptr(subAuth5), uintptr(subAuth6), uintptr(subAuth7), uintptr(unsafe.Pointer(sid)), 0) + r1, _, e1 := syscall.SyscallN(procAllocateAndInitializeSid.Addr(), uintptr(unsafe.Pointer(identAuth)), uintptr(subAuth), uintptr(subAuth0), uintptr(subAuth1), uintptr(subAuth2), uintptr(subAuth3), uintptr(subAuth4), uintptr(subAuth5), uintptr(subAuth6), uintptr(subAuth7), uintptr(unsafe.Pointer(sid))) if r1 == 0 { err = errnoErr(e1) } @@ -586,7 +609,7 @@ func AllocateAndInitializeSid(identAuth *SidIdentifierAuthority, subAuth byte, s } func buildSecurityDescriptor(owner *TRUSTEE, group *TRUSTEE, countAccessEntries uint32, accessEntries *EXPLICIT_ACCESS, countAuditEntries uint32, auditEntries *EXPLICIT_ACCESS, oldSecurityDescriptor *SECURITY_DESCRIPTOR, sizeNewSecurityDescriptor *uint32, newSecurityDescriptor **SECURITY_DESCRIPTOR) (ret error) { - r0, _, _ := syscall.Syscall9(procBuildSecurityDescriptorW.Addr(), 9, uintptr(unsafe.Pointer(owner)), uintptr(unsafe.Pointer(group)), uintptr(countAccessEntries), uintptr(unsafe.Pointer(accessEntries)), uintptr(countAuditEntries), uintptr(unsafe.Pointer(auditEntries)), uintptr(unsafe.Pointer(oldSecurityDescriptor)), uintptr(unsafe.Pointer(sizeNewSecurityDescriptor)), uintptr(unsafe.Pointer(newSecurityDescriptor))) + r0, _, _ := syscall.SyscallN(procBuildSecurityDescriptorW.Addr(), uintptr(unsafe.Pointer(owner)), uintptr(unsafe.Pointer(group)), uintptr(countAccessEntries), uintptr(unsafe.Pointer(accessEntries)), uintptr(countAuditEntries), uintptr(unsafe.Pointer(auditEntries)), uintptr(unsafe.Pointer(oldSecurityDescriptor)), uintptr(unsafe.Pointer(sizeNewSecurityDescriptor)), uintptr(unsafe.Pointer(newSecurityDescriptor))) if r0 != 0 { ret = syscall.Errno(r0) } @@ -594,7 +617,7 @@ func buildSecurityDescriptor(owner *TRUSTEE, group *TRUSTEE, countAccessEntries } func ChangeServiceConfig2(service Handle, infoLevel uint32, info *byte) (err error) { - r1, _, e1 := syscall.Syscall(procChangeServiceConfig2W.Addr(), 3, uintptr(service), uintptr(infoLevel), uintptr(unsafe.Pointer(info))) + r1, _, e1 := syscall.SyscallN(procChangeServiceConfig2W.Addr(), uintptr(service), uintptr(infoLevel), uintptr(unsafe.Pointer(info))) if r1 == 0 { err = errnoErr(e1) } @@ -602,7 +625,7 @@ func ChangeServiceConfig2(service Handle, infoLevel uint32, info *byte) (err err } func ChangeServiceConfig(service Handle, serviceType uint32, startType uint32, errorControl uint32, binaryPathName *uint16, loadOrderGroup *uint16, tagId *uint32, dependencies *uint16, serviceStartName *uint16, password *uint16, displayName *uint16) (err error) { - r1, _, e1 := syscall.Syscall12(procChangeServiceConfigW.Addr(), 11, uintptr(service), uintptr(serviceType), uintptr(startType), uintptr(errorControl), uintptr(unsafe.Pointer(binaryPathName)), uintptr(unsafe.Pointer(loadOrderGroup)), uintptr(unsafe.Pointer(tagId)), uintptr(unsafe.Pointer(dependencies)), uintptr(unsafe.Pointer(serviceStartName)), uintptr(unsafe.Pointer(password)), uintptr(unsafe.Pointer(displayName)), 0) + r1, _, e1 := syscall.SyscallN(procChangeServiceConfigW.Addr(), uintptr(service), uintptr(serviceType), uintptr(startType), uintptr(errorControl), uintptr(unsafe.Pointer(binaryPathName)), uintptr(unsafe.Pointer(loadOrderGroup)), uintptr(unsafe.Pointer(tagId)), uintptr(unsafe.Pointer(dependencies)), uintptr(unsafe.Pointer(serviceStartName)), uintptr(unsafe.Pointer(password)), uintptr(unsafe.Pointer(displayName))) if r1 == 0 { err = errnoErr(e1) } @@ -610,7 +633,7 @@ func ChangeServiceConfig(service Handle, serviceType uint32, startType uint32, e } func checkTokenMembership(tokenHandle Token, sidToCheck *SID, isMember *int32) (err error) { - r1, _, e1 := syscall.Syscall(procCheckTokenMembership.Addr(), 3, uintptr(tokenHandle), uintptr(unsafe.Pointer(sidToCheck)), uintptr(unsafe.Pointer(isMember))) + r1, _, e1 := syscall.SyscallN(procCheckTokenMembership.Addr(), uintptr(tokenHandle), uintptr(unsafe.Pointer(sidToCheck)), uintptr(unsafe.Pointer(isMember))) if r1 == 0 { err = errnoErr(e1) } @@ -618,7 +641,7 @@ func checkTokenMembership(tokenHandle Token, sidToCheck *SID, isMember *int32) ( } func CloseServiceHandle(handle Handle) (err error) { - r1, _, e1 := syscall.Syscall(procCloseServiceHandle.Addr(), 1, uintptr(handle), 0, 0) + r1, _, e1 := syscall.SyscallN(procCloseServiceHandle.Addr(), uintptr(handle)) if r1 == 0 { err = errnoErr(e1) } @@ -626,7 +649,7 @@ func CloseServiceHandle(handle Handle) (err error) { } func ControlService(service Handle, control uint32, status *SERVICE_STATUS) (err error) { - r1, _, e1 := syscall.Syscall(procControlService.Addr(), 3, uintptr(service), uintptr(control), uintptr(unsafe.Pointer(status))) + r1, _, e1 := syscall.SyscallN(procControlService.Addr(), uintptr(service), uintptr(control), uintptr(unsafe.Pointer(status))) if r1 == 0 { err = errnoErr(e1) } @@ -634,7 +657,7 @@ func ControlService(service Handle, control uint32, status *SERVICE_STATUS) (err } func convertSecurityDescriptorToStringSecurityDescriptor(sd *SECURITY_DESCRIPTOR, revision uint32, securityInformation SECURITY_INFORMATION, str **uint16, strLen *uint32) (err error) { - r1, _, e1 := syscall.Syscall6(procConvertSecurityDescriptorToStringSecurityDescriptorW.Addr(), 5, uintptr(unsafe.Pointer(sd)), uintptr(revision), uintptr(securityInformation), uintptr(unsafe.Pointer(str)), uintptr(unsafe.Pointer(strLen)), 0) + r1, _, e1 := syscall.SyscallN(procConvertSecurityDescriptorToStringSecurityDescriptorW.Addr(), uintptr(unsafe.Pointer(sd)), uintptr(revision), uintptr(securityInformation), uintptr(unsafe.Pointer(str)), uintptr(unsafe.Pointer(strLen))) if r1 == 0 { err = errnoErr(e1) } @@ -642,7 +665,7 @@ func convertSecurityDescriptorToStringSecurityDescriptor(sd *SECURITY_DESCRIPTOR } func ConvertSidToStringSid(sid *SID, stringSid **uint16) (err error) { - r1, _, e1 := syscall.Syscall(procConvertSidToStringSidW.Addr(), 2, uintptr(unsafe.Pointer(sid)), uintptr(unsafe.Pointer(stringSid)), 0) + r1, _, e1 := syscall.SyscallN(procConvertSidToStringSidW.Addr(), uintptr(unsafe.Pointer(sid)), uintptr(unsafe.Pointer(stringSid))) if r1 == 0 { err = errnoErr(e1) } @@ -659,7 +682,7 @@ func convertStringSecurityDescriptorToSecurityDescriptor(str string, revision ui } func _convertStringSecurityDescriptorToSecurityDescriptor(str *uint16, revision uint32, sd **SECURITY_DESCRIPTOR, size *uint32) (err error) { - r1, _, e1 := syscall.Syscall6(procConvertStringSecurityDescriptorToSecurityDescriptorW.Addr(), 4, uintptr(unsafe.Pointer(str)), uintptr(revision), uintptr(unsafe.Pointer(sd)), uintptr(unsafe.Pointer(size)), 0, 0) + r1, _, e1 := syscall.SyscallN(procConvertStringSecurityDescriptorToSecurityDescriptorW.Addr(), uintptr(unsafe.Pointer(str)), uintptr(revision), uintptr(unsafe.Pointer(sd)), uintptr(unsafe.Pointer(size))) if r1 == 0 { err = errnoErr(e1) } @@ -667,7 +690,7 @@ func _convertStringSecurityDescriptorToSecurityDescriptor(str *uint16, revision } func ConvertStringSidToSid(stringSid *uint16, sid **SID) (err error) { - r1, _, e1 := syscall.Syscall(procConvertStringSidToSidW.Addr(), 2, uintptr(unsafe.Pointer(stringSid)), uintptr(unsafe.Pointer(sid)), 0) + r1, _, e1 := syscall.SyscallN(procConvertStringSidToSidW.Addr(), uintptr(unsafe.Pointer(stringSid)), uintptr(unsafe.Pointer(sid))) if r1 == 0 { err = errnoErr(e1) } @@ -675,7 +698,7 @@ func ConvertStringSidToSid(stringSid *uint16, sid **SID) (err error) { } func CopySid(destSidLen uint32, destSid *SID, srcSid *SID) (err error) { - r1, _, e1 := syscall.Syscall(procCopySid.Addr(), 3, uintptr(destSidLen), uintptr(unsafe.Pointer(destSid)), uintptr(unsafe.Pointer(srcSid))) + r1, _, e1 := syscall.SyscallN(procCopySid.Addr(), uintptr(destSidLen), uintptr(unsafe.Pointer(destSid)), uintptr(unsafe.Pointer(srcSid))) if r1 == 0 { err = errnoErr(e1) } @@ -687,7 +710,7 @@ func CreateProcessAsUser(token Token, appName *uint16, commandLine *uint16, proc if inheritHandles { _p0 = 1 } - r1, _, e1 := syscall.Syscall12(procCreateProcessAsUserW.Addr(), 11, uintptr(token), uintptr(unsafe.Pointer(appName)), uintptr(unsafe.Pointer(commandLine)), uintptr(unsafe.Pointer(procSecurity)), uintptr(unsafe.Pointer(threadSecurity)), uintptr(_p0), uintptr(creationFlags), uintptr(unsafe.Pointer(env)), uintptr(unsafe.Pointer(currentDir)), uintptr(unsafe.Pointer(startupInfo)), uintptr(unsafe.Pointer(outProcInfo)), 0) + r1, _, e1 := syscall.SyscallN(procCreateProcessAsUserW.Addr(), uintptr(token), uintptr(unsafe.Pointer(appName)), uintptr(unsafe.Pointer(commandLine)), uintptr(unsafe.Pointer(procSecurity)), uintptr(unsafe.Pointer(threadSecurity)), uintptr(_p0), uintptr(creationFlags), uintptr(unsafe.Pointer(env)), uintptr(unsafe.Pointer(currentDir)), uintptr(unsafe.Pointer(startupInfo)), uintptr(unsafe.Pointer(outProcInfo))) if r1 == 0 { err = errnoErr(e1) } @@ -695,7 +718,7 @@ func CreateProcessAsUser(token Token, appName *uint16, commandLine *uint16, proc } func CreateService(mgr Handle, serviceName *uint16, displayName *uint16, access uint32, srvType uint32, startType uint32, errCtl uint32, pathName *uint16, loadOrderGroup *uint16, tagId *uint32, dependencies *uint16, serviceStartName *uint16, password *uint16) (handle Handle, err error) { - r0, _, e1 := syscall.Syscall15(procCreateServiceW.Addr(), 13, uintptr(mgr), uintptr(unsafe.Pointer(serviceName)), uintptr(unsafe.Pointer(displayName)), uintptr(access), uintptr(srvType), uintptr(startType), uintptr(errCtl), uintptr(unsafe.Pointer(pathName)), uintptr(unsafe.Pointer(loadOrderGroup)), uintptr(unsafe.Pointer(tagId)), uintptr(unsafe.Pointer(dependencies)), uintptr(unsafe.Pointer(serviceStartName)), uintptr(unsafe.Pointer(password)), 0, 0) + r0, _, e1 := syscall.SyscallN(procCreateServiceW.Addr(), uintptr(mgr), uintptr(unsafe.Pointer(serviceName)), uintptr(unsafe.Pointer(displayName)), uintptr(access), uintptr(srvType), uintptr(startType), uintptr(errCtl), uintptr(unsafe.Pointer(pathName)), uintptr(unsafe.Pointer(loadOrderGroup)), uintptr(unsafe.Pointer(tagId)), uintptr(unsafe.Pointer(dependencies)), uintptr(unsafe.Pointer(serviceStartName)), uintptr(unsafe.Pointer(password))) handle = Handle(r0) if handle == 0 { err = errnoErr(e1) @@ -704,7 +727,7 @@ func CreateService(mgr Handle, serviceName *uint16, displayName *uint16, access } func createWellKnownSid(sidType WELL_KNOWN_SID_TYPE, domainSid *SID, sid *SID, sizeSid *uint32) (err error) { - r1, _, e1 := syscall.Syscall6(procCreateWellKnownSid.Addr(), 4, uintptr(sidType), uintptr(unsafe.Pointer(domainSid)), uintptr(unsafe.Pointer(sid)), uintptr(unsafe.Pointer(sizeSid)), 0, 0) + r1, _, e1 := syscall.SyscallN(procCreateWellKnownSid.Addr(), uintptr(sidType), uintptr(unsafe.Pointer(domainSid)), uintptr(unsafe.Pointer(sid)), uintptr(unsafe.Pointer(sizeSid))) if r1 == 0 { err = errnoErr(e1) } @@ -712,7 +735,7 @@ func createWellKnownSid(sidType WELL_KNOWN_SID_TYPE, domainSid *SID, sid *SID, s } func CryptAcquireContext(provhandle *Handle, container *uint16, provider *uint16, provtype uint32, flags uint32) (err error) { - r1, _, e1 := syscall.Syscall6(procCryptAcquireContextW.Addr(), 5, uintptr(unsafe.Pointer(provhandle)), uintptr(unsafe.Pointer(container)), uintptr(unsafe.Pointer(provider)), uintptr(provtype), uintptr(flags), 0) + r1, _, e1 := syscall.SyscallN(procCryptAcquireContextW.Addr(), uintptr(unsafe.Pointer(provhandle)), uintptr(unsafe.Pointer(container)), uintptr(unsafe.Pointer(provider)), uintptr(provtype), uintptr(flags)) if r1 == 0 { err = errnoErr(e1) } @@ -720,7 +743,7 @@ func CryptAcquireContext(provhandle *Handle, container *uint16, provider *uint16 } func CryptGenRandom(provhandle Handle, buflen uint32, buf *byte) (err error) { - r1, _, e1 := syscall.Syscall(procCryptGenRandom.Addr(), 3, uintptr(provhandle), uintptr(buflen), uintptr(unsafe.Pointer(buf))) + r1, _, e1 := syscall.SyscallN(procCryptGenRandom.Addr(), uintptr(provhandle), uintptr(buflen), uintptr(unsafe.Pointer(buf))) if r1 == 0 { err = errnoErr(e1) } @@ -728,7 +751,7 @@ func CryptGenRandom(provhandle Handle, buflen uint32, buf *byte) (err error) { } func CryptReleaseContext(provhandle Handle, flags uint32) (err error) { - r1, _, e1 := syscall.Syscall(procCryptReleaseContext.Addr(), 2, uintptr(provhandle), uintptr(flags), 0) + r1, _, e1 := syscall.SyscallN(procCryptReleaseContext.Addr(), uintptr(provhandle), uintptr(flags)) if r1 == 0 { err = errnoErr(e1) } @@ -736,7 +759,7 @@ func CryptReleaseContext(provhandle Handle, flags uint32) (err error) { } func DeleteService(service Handle) (err error) { - r1, _, e1 := syscall.Syscall(procDeleteService.Addr(), 1, uintptr(service), 0, 0) + r1, _, e1 := syscall.SyscallN(procDeleteService.Addr(), uintptr(service)) if r1 == 0 { err = errnoErr(e1) } @@ -744,7 +767,7 @@ func DeleteService(service Handle) (err error) { } func DeregisterEventSource(handle Handle) (err error) { - r1, _, e1 := syscall.Syscall(procDeregisterEventSource.Addr(), 1, uintptr(handle), 0, 0) + r1, _, e1 := syscall.SyscallN(procDeregisterEventSource.Addr(), uintptr(handle)) if r1 == 0 { err = errnoErr(e1) } @@ -752,7 +775,7 @@ func DeregisterEventSource(handle Handle) (err error) { } func DuplicateTokenEx(existingToken Token, desiredAccess uint32, tokenAttributes *SecurityAttributes, impersonationLevel uint32, tokenType uint32, newToken *Token) (err error) { - r1, _, e1 := syscall.Syscall6(procDuplicateTokenEx.Addr(), 6, uintptr(existingToken), uintptr(desiredAccess), uintptr(unsafe.Pointer(tokenAttributes)), uintptr(impersonationLevel), uintptr(tokenType), uintptr(unsafe.Pointer(newToken))) + r1, _, e1 := syscall.SyscallN(procDuplicateTokenEx.Addr(), uintptr(existingToken), uintptr(desiredAccess), uintptr(unsafe.Pointer(tokenAttributes)), uintptr(impersonationLevel), uintptr(tokenType), uintptr(unsafe.Pointer(newToken))) if r1 == 0 { err = errnoErr(e1) } @@ -760,7 +783,7 @@ func DuplicateTokenEx(existingToken Token, desiredAccess uint32, tokenAttributes } func EnumDependentServices(service Handle, activityState uint32, services *ENUM_SERVICE_STATUS, buffSize uint32, bytesNeeded *uint32, servicesReturned *uint32) (err error) { - r1, _, e1 := syscall.Syscall6(procEnumDependentServicesW.Addr(), 6, uintptr(service), uintptr(activityState), uintptr(unsafe.Pointer(services)), uintptr(buffSize), uintptr(unsafe.Pointer(bytesNeeded)), uintptr(unsafe.Pointer(servicesReturned))) + r1, _, e1 := syscall.SyscallN(procEnumDependentServicesW.Addr(), uintptr(service), uintptr(activityState), uintptr(unsafe.Pointer(services)), uintptr(buffSize), uintptr(unsafe.Pointer(bytesNeeded)), uintptr(unsafe.Pointer(servicesReturned))) if r1 == 0 { err = errnoErr(e1) } @@ -768,7 +791,7 @@ func EnumDependentServices(service Handle, activityState uint32, services *ENUM_ } func EnumServicesStatusEx(mgr Handle, infoLevel uint32, serviceType uint32, serviceState uint32, services *byte, bufSize uint32, bytesNeeded *uint32, servicesReturned *uint32, resumeHandle *uint32, groupName *uint16) (err error) { - r1, _, e1 := syscall.Syscall12(procEnumServicesStatusExW.Addr(), 10, uintptr(mgr), uintptr(infoLevel), uintptr(serviceType), uintptr(serviceState), uintptr(unsafe.Pointer(services)), uintptr(bufSize), uintptr(unsafe.Pointer(bytesNeeded)), uintptr(unsafe.Pointer(servicesReturned)), uintptr(unsafe.Pointer(resumeHandle)), uintptr(unsafe.Pointer(groupName)), 0, 0) + r1, _, e1 := syscall.SyscallN(procEnumServicesStatusExW.Addr(), uintptr(mgr), uintptr(infoLevel), uintptr(serviceType), uintptr(serviceState), uintptr(unsafe.Pointer(services)), uintptr(bufSize), uintptr(unsafe.Pointer(bytesNeeded)), uintptr(unsafe.Pointer(servicesReturned)), uintptr(unsafe.Pointer(resumeHandle)), uintptr(unsafe.Pointer(groupName))) if r1 == 0 { err = errnoErr(e1) } @@ -776,21 +799,29 @@ func EnumServicesStatusEx(mgr Handle, infoLevel uint32, serviceType uint32, serv } func EqualSid(sid1 *SID, sid2 *SID) (isEqual bool) { - r0, _, _ := syscall.Syscall(procEqualSid.Addr(), 2, uintptr(unsafe.Pointer(sid1)), uintptr(unsafe.Pointer(sid2)), 0) + r0, _, _ := syscall.SyscallN(procEqualSid.Addr(), uintptr(unsafe.Pointer(sid1)), uintptr(unsafe.Pointer(sid2))) isEqual = r0 != 0 return } func FreeSid(sid *SID) (err error) { - r1, _, e1 := syscall.Syscall(procFreeSid.Addr(), 1, uintptr(unsafe.Pointer(sid)), 0, 0) + r1, _, e1 := syscall.SyscallN(procFreeSid.Addr(), uintptr(unsafe.Pointer(sid))) if r1 != 0 { err = errnoErr(e1) } return } +func GetAce(acl *ACL, aceIndex uint32, pAce **ACCESS_ALLOWED_ACE) (err error) { + r1, _, e1 := syscall.SyscallN(procGetAce.Addr(), uintptr(unsafe.Pointer(acl)), uintptr(aceIndex), uintptr(unsafe.Pointer(pAce))) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + func GetLengthSid(sid *SID) (len uint32) { - r0, _, _ := syscall.Syscall(procGetLengthSid.Addr(), 1, uintptr(unsafe.Pointer(sid)), 0, 0) + r0, _, _ := syscall.SyscallN(procGetLengthSid.Addr(), uintptr(unsafe.Pointer(sid))) len = uint32(r0) return } @@ -805,7 +836,7 @@ func getNamedSecurityInfo(objectName string, objectType SE_OBJECT_TYPE, security } func _getNamedSecurityInfo(objectName *uint16, objectType SE_OBJECT_TYPE, securityInformation SECURITY_INFORMATION, owner **SID, group **SID, dacl **ACL, sacl **ACL, sd **SECURITY_DESCRIPTOR) (ret error) { - r0, _, _ := syscall.Syscall9(procGetNamedSecurityInfoW.Addr(), 8, uintptr(unsafe.Pointer(objectName)), uintptr(objectType), uintptr(securityInformation), uintptr(unsafe.Pointer(owner)), uintptr(unsafe.Pointer(group)), uintptr(unsafe.Pointer(dacl)), uintptr(unsafe.Pointer(sacl)), uintptr(unsafe.Pointer(sd)), 0) + r0, _, _ := syscall.SyscallN(procGetNamedSecurityInfoW.Addr(), uintptr(unsafe.Pointer(objectName)), uintptr(objectType), uintptr(securityInformation), uintptr(unsafe.Pointer(owner)), uintptr(unsafe.Pointer(group)), uintptr(unsafe.Pointer(dacl)), uintptr(unsafe.Pointer(sacl)), uintptr(unsafe.Pointer(sd))) if r0 != 0 { ret = syscall.Errno(r0) } @@ -813,7 +844,7 @@ func _getNamedSecurityInfo(objectName *uint16, objectType SE_OBJECT_TYPE, securi } func getSecurityDescriptorControl(sd *SECURITY_DESCRIPTOR, control *SECURITY_DESCRIPTOR_CONTROL, revision *uint32) (err error) { - r1, _, e1 := syscall.Syscall(procGetSecurityDescriptorControl.Addr(), 3, uintptr(unsafe.Pointer(sd)), uintptr(unsafe.Pointer(control)), uintptr(unsafe.Pointer(revision))) + r1, _, e1 := syscall.SyscallN(procGetSecurityDescriptorControl.Addr(), uintptr(unsafe.Pointer(sd)), uintptr(unsafe.Pointer(control)), uintptr(unsafe.Pointer(revision))) if r1 == 0 { err = errnoErr(e1) } @@ -829,7 +860,7 @@ func getSecurityDescriptorDacl(sd *SECURITY_DESCRIPTOR, daclPresent *bool, dacl if *daclDefaulted { _p1 = 1 } - r1, _, e1 := syscall.Syscall6(procGetSecurityDescriptorDacl.Addr(), 4, uintptr(unsafe.Pointer(sd)), uintptr(unsafe.Pointer(&_p0)), uintptr(unsafe.Pointer(dacl)), uintptr(unsafe.Pointer(&_p1)), 0, 0) + r1, _, e1 := syscall.SyscallN(procGetSecurityDescriptorDacl.Addr(), uintptr(unsafe.Pointer(sd)), uintptr(unsafe.Pointer(&_p0)), uintptr(unsafe.Pointer(dacl)), uintptr(unsafe.Pointer(&_p1))) *daclPresent = _p0 != 0 *daclDefaulted = _p1 != 0 if r1 == 0 { @@ -843,7 +874,7 @@ func getSecurityDescriptorGroup(sd *SECURITY_DESCRIPTOR, group **SID, groupDefau if *groupDefaulted { _p0 = 1 } - r1, _, e1 := syscall.Syscall(procGetSecurityDescriptorGroup.Addr(), 3, uintptr(unsafe.Pointer(sd)), uintptr(unsafe.Pointer(group)), uintptr(unsafe.Pointer(&_p0))) + r1, _, e1 := syscall.SyscallN(procGetSecurityDescriptorGroup.Addr(), uintptr(unsafe.Pointer(sd)), uintptr(unsafe.Pointer(group)), uintptr(unsafe.Pointer(&_p0))) *groupDefaulted = _p0 != 0 if r1 == 0 { err = errnoErr(e1) @@ -852,7 +883,7 @@ func getSecurityDescriptorGroup(sd *SECURITY_DESCRIPTOR, group **SID, groupDefau } func getSecurityDescriptorLength(sd *SECURITY_DESCRIPTOR) (len uint32) { - r0, _, _ := syscall.Syscall(procGetSecurityDescriptorLength.Addr(), 1, uintptr(unsafe.Pointer(sd)), 0, 0) + r0, _, _ := syscall.SyscallN(procGetSecurityDescriptorLength.Addr(), uintptr(unsafe.Pointer(sd))) len = uint32(r0) return } @@ -862,7 +893,7 @@ func getSecurityDescriptorOwner(sd *SECURITY_DESCRIPTOR, owner **SID, ownerDefau if *ownerDefaulted { _p0 = 1 } - r1, _, e1 := syscall.Syscall(procGetSecurityDescriptorOwner.Addr(), 3, uintptr(unsafe.Pointer(sd)), uintptr(unsafe.Pointer(owner)), uintptr(unsafe.Pointer(&_p0))) + r1, _, e1 := syscall.SyscallN(procGetSecurityDescriptorOwner.Addr(), uintptr(unsafe.Pointer(sd)), uintptr(unsafe.Pointer(owner)), uintptr(unsafe.Pointer(&_p0))) *ownerDefaulted = _p0 != 0 if r1 == 0 { err = errnoErr(e1) @@ -871,7 +902,7 @@ func getSecurityDescriptorOwner(sd *SECURITY_DESCRIPTOR, owner **SID, ownerDefau } func getSecurityDescriptorRMControl(sd *SECURITY_DESCRIPTOR, rmControl *uint8) (ret error) { - r0, _, _ := syscall.Syscall(procGetSecurityDescriptorRMControl.Addr(), 2, uintptr(unsafe.Pointer(sd)), uintptr(unsafe.Pointer(rmControl)), 0) + r0, _, _ := syscall.SyscallN(procGetSecurityDescriptorRMControl.Addr(), uintptr(unsafe.Pointer(sd)), uintptr(unsafe.Pointer(rmControl))) if r0 != 0 { ret = syscall.Errno(r0) } @@ -887,7 +918,7 @@ func getSecurityDescriptorSacl(sd *SECURITY_DESCRIPTOR, saclPresent *bool, sacl if *saclDefaulted { _p1 = 1 } - r1, _, e1 := syscall.Syscall6(procGetSecurityDescriptorSacl.Addr(), 4, uintptr(unsafe.Pointer(sd)), uintptr(unsafe.Pointer(&_p0)), uintptr(unsafe.Pointer(sacl)), uintptr(unsafe.Pointer(&_p1)), 0, 0) + r1, _, e1 := syscall.SyscallN(procGetSecurityDescriptorSacl.Addr(), uintptr(unsafe.Pointer(sd)), uintptr(unsafe.Pointer(&_p0)), uintptr(unsafe.Pointer(sacl)), uintptr(unsafe.Pointer(&_p1))) *saclPresent = _p0 != 0 *saclDefaulted = _p1 != 0 if r1 == 0 { @@ -897,7 +928,7 @@ func getSecurityDescriptorSacl(sd *SECURITY_DESCRIPTOR, saclPresent *bool, sacl } func getSecurityInfo(handle Handle, objectType SE_OBJECT_TYPE, securityInformation SECURITY_INFORMATION, owner **SID, group **SID, dacl **ACL, sacl **ACL, sd **SECURITY_DESCRIPTOR) (ret error) { - r0, _, _ := syscall.Syscall9(procGetSecurityInfo.Addr(), 8, uintptr(handle), uintptr(objectType), uintptr(securityInformation), uintptr(unsafe.Pointer(owner)), uintptr(unsafe.Pointer(group)), uintptr(unsafe.Pointer(dacl)), uintptr(unsafe.Pointer(sacl)), uintptr(unsafe.Pointer(sd)), 0) + r0, _, _ := syscall.SyscallN(procGetSecurityInfo.Addr(), uintptr(handle), uintptr(objectType), uintptr(securityInformation), uintptr(unsafe.Pointer(owner)), uintptr(unsafe.Pointer(group)), uintptr(unsafe.Pointer(dacl)), uintptr(unsafe.Pointer(sacl)), uintptr(unsafe.Pointer(sd))) if r0 != 0 { ret = syscall.Errno(r0) } @@ -905,25 +936,25 @@ func getSecurityInfo(handle Handle, objectType SE_OBJECT_TYPE, securityInformati } func getSidIdentifierAuthority(sid *SID) (authority *SidIdentifierAuthority) { - r0, _, _ := syscall.Syscall(procGetSidIdentifierAuthority.Addr(), 1, uintptr(unsafe.Pointer(sid)), 0, 0) + r0, _, _ := syscall.SyscallN(procGetSidIdentifierAuthority.Addr(), uintptr(unsafe.Pointer(sid))) authority = (*SidIdentifierAuthority)(unsafe.Pointer(r0)) return } func getSidSubAuthority(sid *SID, index uint32) (subAuthority *uint32) { - r0, _, _ := syscall.Syscall(procGetSidSubAuthority.Addr(), 2, uintptr(unsafe.Pointer(sid)), uintptr(index), 0) + r0, _, _ := syscall.SyscallN(procGetSidSubAuthority.Addr(), uintptr(unsafe.Pointer(sid)), uintptr(index)) subAuthority = (*uint32)(unsafe.Pointer(r0)) return } func getSidSubAuthorityCount(sid *SID) (count *uint8) { - r0, _, _ := syscall.Syscall(procGetSidSubAuthorityCount.Addr(), 1, uintptr(unsafe.Pointer(sid)), 0, 0) + r0, _, _ := syscall.SyscallN(procGetSidSubAuthorityCount.Addr(), uintptr(unsafe.Pointer(sid))) count = (*uint8)(unsafe.Pointer(r0)) return } func GetTokenInformation(token Token, infoClass uint32, info *byte, infoLen uint32, returnedLen *uint32) (err error) { - r1, _, e1 := syscall.Syscall6(procGetTokenInformation.Addr(), 5, uintptr(token), uintptr(infoClass), uintptr(unsafe.Pointer(info)), uintptr(infoLen), uintptr(unsafe.Pointer(returnedLen)), 0) + r1, _, e1 := syscall.SyscallN(procGetTokenInformation.Addr(), uintptr(token), uintptr(infoClass), uintptr(unsafe.Pointer(info)), uintptr(infoLen), uintptr(unsafe.Pointer(returnedLen))) if r1 == 0 { err = errnoErr(e1) } @@ -931,7 +962,7 @@ func GetTokenInformation(token Token, infoClass uint32, info *byte, infoLen uint } func ImpersonateSelf(impersonationlevel uint32) (err error) { - r1, _, e1 := syscall.Syscall(procImpersonateSelf.Addr(), 1, uintptr(impersonationlevel), 0, 0) + r1, _, e1 := syscall.SyscallN(procImpersonateSelf.Addr(), uintptr(impersonationlevel)) if r1 == 0 { err = errnoErr(e1) } @@ -939,7 +970,7 @@ func ImpersonateSelf(impersonationlevel uint32) (err error) { } func initializeSecurityDescriptor(absoluteSD *SECURITY_DESCRIPTOR, revision uint32) (err error) { - r1, _, e1 := syscall.Syscall(procInitializeSecurityDescriptor.Addr(), 2, uintptr(unsafe.Pointer(absoluteSD)), uintptr(revision), 0) + r1, _, e1 := syscall.SyscallN(procInitializeSecurityDescriptor.Addr(), uintptr(unsafe.Pointer(absoluteSD)), uintptr(revision)) if r1 == 0 { err = errnoErr(e1) } @@ -955,7 +986,7 @@ func InitiateSystemShutdownEx(machineName *uint16, message *uint16, timeout uint if rebootAfterShutdown { _p1 = 1 } - r1, _, e1 := syscall.Syscall6(procInitiateSystemShutdownExW.Addr(), 6, uintptr(unsafe.Pointer(machineName)), uintptr(unsafe.Pointer(message)), uintptr(timeout), uintptr(_p0), uintptr(_p1), uintptr(reason)) + r1, _, e1 := syscall.SyscallN(procInitiateSystemShutdownExW.Addr(), uintptr(unsafe.Pointer(machineName)), uintptr(unsafe.Pointer(message)), uintptr(timeout), uintptr(_p0), uintptr(_p1), uintptr(reason)) if r1 == 0 { err = errnoErr(e1) } @@ -963,7 +994,7 @@ func InitiateSystemShutdownEx(machineName *uint16, message *uint16, timeout uint } func isTokenRestricted(tokenHandle Token) (ret bool, err error) { - r0, _, e1 := syscall.Syscall(procIsTokenRestricted.Addr(), 1, uintptr(tokenHandle), 0, 0) + r0, _, e1 := syscall.SyscallN(procIsTokenRestricted.Addr(), uintptr(tokenHandle)) ret = r0 != 0 if !ret { err = errnoErr(e1) @@ -972,25 +1003,25 @@ func isTokenRestricted(tokenHandle Token) (ret bool, err error) { } func isValidSecurityDescriptor(sd *SECURITY_DESCRIPTOR) (isValid bool) { - r0, _, _ := syscall.Syscall(procIsValidSecurityDescriptor.Addr(), 1, uintptr(unsafe.Pointer(sd)), 0, 0) + r0, _, _ := syscall.SyscallN(procIsValidSecurityDescriptor.Addr(), uintptr(unsafe.Pointer(sd))) isValid = r0 != 0 return } func isValidSid(sid *SID) (isValid bool) { - r0, _, _ := syscall.Syscall(procIsValidSid.Addr(), 1, uintptr(unsafe.Pointer(sid)), 0, 0) + r0, _, _ := syscall.SyscallN(procIsValidSid.Addr(), uintptr(unsafe.Pointer(sid))) isValid = r0 != 0 return } func isWellKnownSid(sid *SID, sidType WELL_KNOWN_SID_TYPE) (isWellKnown bool) { - r0, _, _ := syscall.Syscall(procIsWellKnownSid.Addr(), 2, uintptr(unsafe.Pointer(sid)), uintptr(sidType), 0) + r0, _, _ := syscall.SyscallN(procIsWellKnownSid.Addr(), uintptr(unsafe.Pointer(sid)), uintptr(sidType)) isWellKnown = r0 != 0 return } func LookupAccountName(systemName *uint16, accountName *uint16, sid *SID, sidLen *uint32, refdDomainName *uint16, refdDomainNameLen *uint32, use *uint32) (err error) { - r1, _, e1 := syscall.Syscall9(procLookupAccountNameW.Addr(), 7, uintptr(unsafe.Pointer(systemName)), uintptr(unsafe.Pointer(accountName)), uintptr(unsafe.Pointer(sid)), uintptr(unsafe.Pointer(sidLen)), uintptr(unsafe.Pointer(refdDomainName)), uintptr(unsafe.Pointer(refdDomainNameLen)), uintptr(unsafe.Pointer(use)), 0, 0) + r1, _, e1 := syscall.SyscallN(procLookupAccountNameW.Addr(), uintptr(unsafe.Pointer(systemName)), uintptr(unsafe.Pointer(accountName)), uintptr(unsafe.Pointer(sid)), uintptr(unsafe.Pointer(sidLen)), uintptr(unsafe.Pointer(refdDomainName)), uintptr(unsafe.Pointer(refdDomainNameLen)), uintptr(unsafe.Pointer(use))) if r1 == 0 { err = errnoErr(e1) } @@ -998,7 +1029,7 @@ func LookupAccountName(systemName *uint16, accountName *uint16, sid *SID, sidLen } func LookupAccountSid(systemName *uint16, sid *SID, name *uint16, nameLen *uint32, refdDomainName *uint16, refdDomainNameLen *uint32, use *uint32) (err error) { - r1, _, e1 := syscall.Syscall9(procLookupAccountSidW.Addr(), 7, uintptr(unsafe.Pointer(systemName)), uintptr(unsafe.Pointer(sid)), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(nameLen)), uintptr(unsafe.Pointer(refdDomainName)), uintptr(unsafe.Pointer(refdDomainNameLen)), uintptr(unsafe.Pointer(use)), 0, 0) + r1, _, e1 := syscall.SyscallN(procLookupAccountSidW.Addr(), uintptr(unsafe.Pointer(systemName)), uintptr(unsafe.Pointer(sid)), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(nameLen)), uintptr(unsafe.Pointer(refdDomainName)), uintptr(unsafe.Pointer(refdDomainNameLen)), uintptr(unsafe.Pointer(use))) if r1 == 0 { err = errnoErr(e1) } @@ -1006,7 +1037,7 @@ func LookupAccountSid(systemName *uint16, sid *SID, name *uint16, nameLen *uint3 } func LookupPrivilegeValue(systemname *uint16, name *uint16, luid *LUID) (err error) { - r1, _, e1 := syscall.Syscall(procLookupPrivilegeValueW.Addr(), 3, uintptr(unsafe.Pointer(systemname)), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(luid))) + r1, _, e1 := syscall.SyscallN(procLookupPrivilegeValueW.Addr(), uintptr(unsafe.Pointer(systemname)), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(luid))) if r1 == 0 { err = errnoErr(e1) } @@ -1014,7 +1045,7 @@ func LookupPrivilegeValue(systemname *uint16, name *uint16, luid *LUID) (err err } func makeAbsoluteSD(selfRelativeSD *SECURITY_DESCRIPTOR, absoluteSD *SECURITY_DESCRIPTOR, absoluteSDSize *uint32, dacl *ACL, daclSize *uint32, sacl *ACL, saclSize *uint32, owner *SID, ownerSize *uint32, group *SID, groupSize *uint32) (err error) { - r1, _, e1 := syscall.Syscall12(procMakeAbsoluteSD.Addr(), 11, uintptr(unsafe.Pointer(selfRelativeSD)), uintptr(unsafe.Pointer(absoluteSD)), uintptr(unsafe.Pointer(absoluteSDSize)), uintptr(unsafe.Pointer(dacl)), uintptr(unsafe.Pointer(daclSize)), uintptr(unsafe.Pointer(sacl)), uintptr(unsafe.Pointer(saclSize)), uintptr(unsafe.Pointer(owner)), uintptr(unsafe.Pointer(ownerSize)), uintptr(unsafe.Pointer(group)), uintptr(unsafe.Pointer(groupSize)), 0) + r1, _, e1 := syscall.SyscallN(procMakeAbsoluteSD.Addr(), uintptr(unsafe.Pointer(selfRelativeSD)), uintptr(unsafe.Pointer(absoluteSD)), uintptr(unsafe.Pointer(absoluteSDSize)), uintptr(unsafe.Pointer(dacl)), uintptr(unsafe.Pointer(daclSize)), uintptr(unsafe.Pointer(sacl)), uintptr(unsafe.Pointer(saclSize)), uintptr(unsafe.Pointer(owner)), uintptr(unsafe.Pointer(ownerSize)), uintptr(unsafe.Pointer(group)), uintptr(unsafe.Pointer(groupSize))) if r1 == 0 { err = errnoErr(e1) } @@ -1022,7 +1053,7 @@ func makeAbsoluteSD(selfRelativeSD *SECURITY_DESCRIPTOR, absoluteSD *SECURITY_DE } func makeSelfRelativeSD(absoluteSD *SECURITY_DESCRIPTOR, selfRelativeSD *SECURITY_DESCRIPTOR, selfRelativeSDSize *uint32) (err error) { - r1, _, e1 := syscall.Syscall(procMakeSelfRelativeSD.Addr(), 3, uintptr(unsafe.Pointer(absoluteSD)), uintptr(unsafe.Pointer(selfRelativeSD)), uintptr(unsafe.Pointer(selfRelativeSDSize))) + r1, _, e1 := syscall.SyscallN(procMakeSelfRelativeSD.Addr(), uintptr(unsafe.Pointer(absoluteSD)), uintptr(unsafe.Pointer(selfRelativeSD)), uintptr(unsafe.Pointer(selfRelativeSDSize))) if r1 == 0 { err = errnoErr(e1) } @@ -1030,7 +1061,7 @@ func makeSelfRelativeSD(absoluteSD *SECURITY_DESCRIPTOR, selfRelativeSD *SECURIT } func NotifyServiceStatusChange(service Handle, notifyMask uint32, notifier *SERVICE_NOTIFY) (ret error) { - r0, _, _ := syscall.Syscall(procNotifyServiceStatusChangeW.Addr(), 3, uintptr(service), uintptr(notifyMask), uintptr(unsafe.Pointer(notifier))) + r0, _, _ := syscall.SyscallN(procNotifyServiceStatusChangeW.Addr(), uintptr(service), uintptr(notifyMask), uintptr(unsafe.Pointer(notifier))) if r0 != 0 { ret = syscall.Errno(r0) } @@ -1038,7 +1069,7 @@ func NotifyServiceStatusChange(service Handle, notifyMask uint32, notifier *SERV } func OpenProcessToken(process Handle, access uint32, token *Token) (err error) { - r1, _, e1 := syscall.Syscall(procOpenProcessToken.Addr(), 3, uintptr(process), uintptr(access), uintptr(unsafe.Pointer(token))) + r1, _, e1 := syscall.SyscallN(procOpenProcessToken.Addr(), uintptr(process), uintptr(access), uintptr(unsafe.Pointer(token))) if r1 == 0 { err = errnoErr(e1) } @@ -1046,7 +1077,7 @@ func OpenProcessToken(process Handle, access uint32, token *Token) (err error) { } func OpenSCManager(machineName *uint16, databaseName *uint16, access uint32) (handle Handle, err error) { - r0, _, e1 := syscall.Syscall(procOpenSCManagerW.Addr(), 3, uintptr(unsafe.Pointer(machineName)), uintptr(unsafe.Pointer(databaseName)), uintptr(access)) + r0, _, e1 := syscall.SyscallN(procOpenSCManagerW.Addr(), uintptr(unsafe.Pointer(machineName)), uintptr(unsafe.Pointer(databaseName)), uintptr(access)) handle = Handle(r0) if handle == 0 { err = errnoErr(e1) @@ -1055,7 +1086,7 @@ func OpenSCManager(machineName *uint16, databaseName *uint16, access uint32) (ha } func OpenService(mgr Handle, serviceName *uint16, access uint32) (handle Handle, err error) { - r0, _, e1 := syscall.Syscall(procOpenServiceW.Addr(), 3, uintptr(mgr), uintptr(unsafe.Pointer(serviceName)), uintptr(access)) + r0, _, e1 := syscall.SyscallN(procOpenServiceW.Addr(), uintptr(mgr), uintptr(unsafe.Pointer(serviceName)), uintptr(access)) handle = Handle(r0) if handle == 0 { err = errnoErr(e1) @@ -1068,7 +1099,7 @@ func OpenThreadToken(thread Handle, access uint32, openAsSelf bool, token *Token if openAsSelf { _p0 = 1 } - r1, _, e1 := syscall.Syscall6(procOpenThreadToken.Addr(), 4, uintptr(thread), uintptr(access), uintptr(_p0), uintptr(unsafe.Pointer(token)), 0, 0) + r1, _, e1 := syscall.SyscallN(procOpenThreadToken.Addr(), uintptr(thread), uintptr(access), uintptr(_p0), uintptr(unsafe.Pointer(token))) if r1 == 0 { err = errnoErr(e1) } @@ -1076,7 +1107,7 @@ func OpenThreadToken(thread Handle, access uint32, openAsSelf bool, token *Token } func QueryServiceConfig2(service Handle, infoLevel uint32, buff *byte, buffSize uint32, bytesNeeded *uint32) (err error) { - r1, _, e1 := syscall.Syscall6(procQueryServiceConfig2W.Addr(), 5, uintptr(service), uintptr(infoLevel), uintptr(unsafe.Pointer(buff)), uintptr(buffSize), uintptr(unsafe.Pointer(bytesNeeded)), 0) + r1, _, e1 := syscall.SyscallN(procQueryServiceConfig2W.Addr(), uintptr(service), uintptr(infoLevel), uintptr(unsafe.Pointer(buff)), uintptr(buffSize), uintptr(unsafe.Pointer(bytesNeeded))) if r1 == 0 { err = errnoErr(e1) } @@ -1084,7 +1115,7 @@ func QueryServiceConfig2(service Handle, infoLevel uint32, buff *byte, buffSize } func QueryServiceConfig(service Handle, serviceConfig *QUERY_SERVICE_CONFIG, bufSize uint32, bytesNeeded *uint32) (err error) { - r1, _, e1 := syscall.Syscall6(procQueryServiceConfigW.Addr(), 4, uintptr(service), uintptr(unsafe.Pointer(serviceConfig)), uintptr(bufSize), uintptr(unsafe.Pointer(bytesNeeded)), 0, 0) + r1, _, e1 := syscall.SyscallN(procQueryServiceConfigW.Addr(), uintptr(service), uintptr(unsafe.Pointer(serviceConfig)), uintptr(bufSize), uintptr(unsafe.Pointer(bytesNeeded))) if r1 == 0 { err = errnoErr(e1) } @@ -1096,7 +1127,7 @@ func QueryServiceDynamicInformation(service Handle, infoLevel uint32, dynamicInf if err != nil { return } - r1, _, e1 := syscall.Syscall(procQueryServiceDynamicInformation.Addr(), 3, uintptr(service), uintptr(infoLevel), uintptr(dynamicInfo)) + r1, _, e1 := syscall.SyscallN(procQueryServiceDynamicInformation.Addr(), uintptr(service), uintptr(infoLevel), uintptr(dynamicInfo)) if r1 == 0 { err = errnoErr(e1) } @@ -1104,7 +1135,7 @@ func QueryServiceDynamicInformation(service Handle, infoLevel uint32, dynamicInf } func QueryServiceLockStatus(mgr Handle, lockStatus *QUERY_SERVICE_LOCK_STATUS, bufSize uint32, bytesNeeded *uint32) (err error) { - r1, _, e1 := syscall.Syscall6(procQueryServiceLockStatusW.Addr(), 4, uintptr(mgr), uintptr(unsafe.Pointer(lockStatus)), uintptr(bufSize), uintptr(unsafe.Pointer(bytesNeeded)), 0, 0) + r1, _, e1 := syscall.SyscallN(procQueryServiceLockStatusW.Addr(), uintptr(mgr), uintptr(unsafe.Pointer(lockStatus)), uintptr(bufSize), uintptr(unsafe.Pointer(bytesNeeded))) if r1 == 0 { err = errnoErr(e1) } @@ -1112,7 +1143,7 @@ func QueryServiceLockStatus(mgr Handle, lockStatus *QUERY_SERVICE_LOCK_STATUS, b } func QueryServiceStatus(service Handle, status *SERVICE_STATUS) (err error) { - r1, _, e1 := syscall.Syscall(procQueryServiceStatus.Addr(), 2, uintptr(service), uintptr(unsafe.Pointer(status)), 0) + r1, _, e1 := syscall.SyscallN(procQueryServiceStatus.Addr(), uintptr(service), uintptr(unsafe.Pointer(status))) if r1 == 0 { err = errnoErr(e1) } @@ -1120,7 +1151,7 @@ func QueryServiceStatus(service Handle, status *SERVICE_STATUS) (err error) { } func QueryServiceStatusEx(service Handle, infoLevel uint32, buff *byte, buffSize uint32, bytesNeeded *uint32) (err error) { - r1, _, e1 := syscall.Syscall6(procQueryServiceStatusEx.Addr(), 5, uintptr(service), uintptr(infoLevel), uintptr(unsafe.Pointer(buff)), uintptr(buffSize), uintptr(unsafe.Pointer(bytesNeeded)), 0) + r1, _, e1 := syscall.SyscallN(procQueryServiceStatusEx.Addr(), uintptr(service), uintptr(infoLevel), uintptr(unsafe.Pointer(buff)), uintptr(buffSize), uintptr(unsafe.Pointer(bytesNeeded))) if r1 == 0 { err = errnoErr(e1) } @@ -1128,7 +1159,7 @@ func QueryServiceStatusEx(service Handle, infoLevel uint32, buff *byte, buffSize } func RegCloseKey(key Handle) (regerrno error) { - r0, _, _ := syscall.Syscall(procRegCloseKey.Addr(), 1, uintptr(key), 0, 0) + r0, _, _ := syscall.SyscallN(procRegCloseKey.Addr(), uintptr(key)) if r0 != 0 { regerrno = syscall.Errno(r0) } @@ -1136,7 +1167,7 @@ func RegCloseKey(key Handle) (regerrno error) { } func RegEnumKeyEx(key Handle, index uint32, name *uint16, nameLen *uint32, reserved *uint32, class *uint16, classLen *uint32, lastWriteTime *Filetime) (regerrno error) { - r0, _, _ := syscall.Syscall9(procRegEnumKeyExW.Addr(), 8, uintptr(key), uintptr(index), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(nameLen)), uintptr(unsafe.Pointer(reserved)), uintptr(unsafe.Pointer(class)), uintptr(unsafe.Pointer(classLen)), uintptr(unsafe.Pointer(lastWriteTime)), 0) + r0, _, _ := syscall.SyscallN(procRegEnumKeyExW.Addr(), uintptr(key), uintptr(index), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(nameLen)), uintptr(unsafe.Pointer(reserved)), uintptr(unsafe.Pointer(class)), uintptr(unsafe.Pointer(classLen)), uintptr(unsafe.Pointer(lastWriteTime))) if r0 != 0 { regerrno = syscall.Errno(r0) } @@ -1152,7 +1183,7 @@ func RegNotifyChangeKeyValue(key Handle, watchSubtree bool, notifyFilter uint32, if asynchronous { _p1 = 1 } - r0, _, _ := syscall.Syscall6(procRegNotifyChangeKeyValue.Addr(), 5, uintptr(key), uintptr(_p0), uintptr(notifyFilter), uintptr(event), uintptr(_p1), 0) + r0, _, _ := syscall.SyscallN(procRegNotifyChangeKeyValue.Addr(), uintptr(key), uintptr(_p0), uintptr(notifyFilter), uintptr(event), uintptr(_p1)) if r0 != 0 { regerrno = syscall.Errno(r0) } @@ -1160,7 +1191,7 @@ func RegNotifyChangeKeyValue(key Handle, watchSubtree bool, notifyFilter uint32, } func RegOpenKeyEx(key Handle, subkey *uint16, options uint32, desiredAccess uint32, result *Handle) (regerrno error) { - r0, _, _ := syscall.Syscall6(procRegOpenKeyExW.Addr(), 5, uintptr(key), uintptr(unsafe.Pointer(subkey)), uintptr(options), uintptr(desiredAccess), uintptr(unsafe.Pointer(result)), 0) + r0, _, _ := syscall.SyscallN(procRegOpenKeyExW.Addr(), uintptr(key), uintptr(unsafe.Pointer(subkey)), uintptr(options), uintptr(desiredAccess), uintptr(unsafe.Pointer(result))) if r0 != 0 { regerrno = syscall.Errno(r0) } @@ -1168,7 +1199,7 @@ func RegOpenKeyEx(key Handle, subkey *uint16, options uint32, desiredAccess uint } func RegQueryInfoKey(key Handle, class *uint16, classLen *uint32, reserved *uint32, subkeysLen *uint32, maxSubkeyLen *uint32, maxClassLen *uint32, valuesLen *uint32, maxValueNameLen *uint32, maxValueLen *uint32, saLen *uint32, lastWriteTime *Filetime) (regerrno error) { - r0, _, _ := syscall.Syscall12(procRegQueryInfoKeyW.Addr(), 12, uintptr(key), uintptr(unsafe.Pointer(class)), uintptr(unsafe.Pointer(classLen)), uintptr(unsafe.Pointer(reserved)), uintptr(unsafe.Pointer(subkeysLen)), uintptr(unsafe.Pointer(maxSubkeyLen)), uintptr(unsafe.Pointer(maxClassLen)), uintptr(unsafe.Pointer(valuesLen)), uintptr(unsafe.Pointer(maxValueNameLen)), uintptr(unsafe.Pointer(maxValueLen)), uintptr(unsafe.Pointer(saLen)), uintptr(unsafe.Pointer(lastWriteTime))) + r0, _, _ := syscall.SyscallN(procRegQueryInfoKeyW.Addr(), uintptr(key), uintptr(unsafe.Pointer(class)), uintptr(unsafe.Pointer(classLen)), uintptr(unsafe.Pointer(reserved)), uintptr(unsafe.Pointer(subkeysLen)), uintptr(unsafe.Pointer(maxSubkeyLen)), uintptr(unsafe.Pointer(maxClassLen)), uintptr(unsafe.Pointer(valuesLen)), uintptr(unsafe.Pointer(maxValueNameLen)), uintptr(unsafe.Pointer(maxValueLen)), uintptr(unsafe.Pointer(saLen)), uintptr(unsafe.Pointer(lastWriteTime))) if r0 != 0 { regerrno = syscall.Errno(r0) } @@ -1176,7 +1207,7 @@ func RegQueryInfoKey(key Handle, class *uint16, classLen *uint32, reserved *uint } func RegQueryValueEx(key Handle, name *uint16, reserved *uint32, valtype *uint32, buf *byte, buflen *uint32) (regerrno error) { - r0, _, _ := syscall.Syscall6(procRegQueryValueExW.Addr(), 6, uintptr(key), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(reserved)), uintptr(unsafe.Pointer(valtype)), uintptr(unsafe.Pointer(buf)), uintptr(unsafe.Pointer(buflen))) + r0, _, _ := syscall.SyscallN(procRegQueryValueExW.Addr(), uintptr(key), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(reserved)), uintptr(unsafe.Pointer(valtype)), uintptr(unsafe.Pointer(buf)), uintptr(unsafe.Pointer(buflen))) if r0 != 0 { regerrno = syscall.Errno(r0) } @@ -1184,7 +1215,7 @@ func RegQueryValueEx(key Handle, name *uint16, reserved *uint32, valtype *uint32 } func RegisterEventSource(uncServerName *uint16, sourceName *uint16) (handle Handle, err error) { - r0, _, e1 := syscall.Syscall(procRegisterEventSourceW.Addr(), 2, uintptr(unsafe.Pointer(uncServerName)), uintptr(unsafe.Pointer(sourceName)), 0) + r0, _, e1 := syscall.SyscallN(procRegisterEventSourceW.Addr(), uintptr(unsafe.Pointer(uncServerName)), uintptr(unsafe.Pointer(sourceName))) handle = Handle(r0) if handle == 0 { err = errnoErr(e1) @@ -1193,7 +1224,7 @@ func RegisterEventSource(uncServerName *uint16, sourceName *uint16) (handle Hand } func RegisterServiceCtrlHandlerEx(serviceName *uint16, handlerProc uintptr, context uintptr) (handle Handle, err error) { - r0, _, e1 := syscall.Syscall(procRegisterServiceCtrlHandlerExW.Addr(), 3, uintptr(unsafe.Pointer(serviceName)), uintptr(handlerProc), uintptr(context)) + r0, _, e1 := syscall.SyscallN(procRegisterServiceCtrlHandlerExW.Addr(), uintptr(unsafe.Pointer(serviceName)), uintptr(handlerProc), uintptr(context)) handle = Handle(r0) if handle == 0 { err = errnoErr(e1) @@ -1202,7 +1233,7 @@ func RegisterServiceCtrlHandlerEx(serviceName *uint16, handlerProc uintptr, cont } func ReportEvent(log Handle, etype uint16, category uint16, eventId uint32, usrSId uintptr, numStrings uint16, dataSize uint32, strings **uint16, rawData *byte) (err error) { - r1, _, e1 := syscall.Syscall9(procReportEventW.Addr(), 9, uintptr(log), uintptr(etype), uintptr(category), uintptr(eventId), uintptr(usrSId), uintptr(numStrings), uintptr(dataSize), uintptr(unsafe.Pointer(strings)), uintptr(unsafe.Pointer(rawData))) + r1, _, e1 := syscall.SyscallN(procReportEventW.Addr(), uintptr(log), uintptr(etype), uintptr(category), uintptr(eventId), uintptr(usrSId), uintptr(numStrings), uintptr(dataSize), uintptr(unsafe.Pointer(strings)), uintptr(unsafe.Pointer(rawData))) if r1 == 0 { err = errnoErr(e1) } @@ -1210,7 +1241,7 @@ func ReportEvent(log Handle, etype uint16, category uint16, eventId uint32, usrS } func RevertToSelf() (err error) { - r1, _, e1 := syscall.Syscall(procRevertToSelf.Addr(), 0, 0, 0, 0) + r1, _, e1 := syscall.SyscallN(procRevertToSelf.Addr()) if r1 == 0 { err = errnoErr(e1) } @@ -1218,23 +1249,15 @@ func RevertToSelf() (err error) { } func setEntriesInAcl(countExplicitEntries uint32, explicitEntries *EXPLICIT_ACCESS, oldACL *ACL, newACL **ACL) (ret error) { - r0, _, _ := syscall.Syscall6(procSetEntriesInAclW.Addr(), 4, uintptr(countExplicitEntries), uintptr(unsafe.Pointer(explicitEntries)), uintptr(unsafe.Pointer(oldACL)), uintptr(unsafe.Pointer(newACL)), 0, 0) + r0, _, _ := syscall.SyscallN(procSetEntriesInAclW.Addr(), uintptr(countExplicitEntries), uintptr(unsafe.Pointer(explicitEntries)), uintptr(unsafe.Pointer(oldACL)), uintptr(unsafe.Pointer(newACL))) if r0 != 0 { ret = syscall.Errno(r0) } return } -func GetAce(acl *ACL, aceIndex uint32, pAce **ACCESS_ALLOWED_ACE) (ret error) { - r0, _, _ := syscall.Syscall(procGetAce.Addr(), 3, uintptr(unsafe.Pointer(acl)), uintptr(aceIndex), uintptr(unsafe.Pointer(pAce))) - if r0 == 0 { - ret = GetLastError() - } - return -} - func SetKernelObjectSecurity(handle Handle, securityInformation SECURITY_INFORMATION, securityDescriptor *SECURITY_DESCRIPTOR) (err error) { - r1, _, e1 := syscall.Syscall(procSetKernelObjectSecurity.Addr(), 3, uintptr(handle), uintptr(securityInformation), uintptr(unsafe.Pointer(securityDescriptor))) + r1, _, e1 := syscall.SyscallN(procSetKernelObjectSecurity.Addr(), uintptr(handle), uintptr(securityInformation), uintptr(unsafe.Pointer(securityDescriptor))) if r1 == 0 { err = errnoErr(e1) } @@ -1251,7 +1274,7 @@ func SetNamedSecurityInfo(objectName string, objectType SE_OBJECT_TYPE, security } func _SetNamedSecurityInfo(objectName *uint16, objectType SE_OBJECT_TYPE, securityInformation SECURITY_INFORMATION, owner *SID, group *SID, dacl *ACL, sacl *ACL) (ret error) { - r0, _, _ := syscall.Syscall9(procSetNamedSecurityInfoW.Addr(), 7, uintptr(unsafe.Pointer(objectName)), uintptr(objectType), uintptr(securityInformation), uintptr(unsafe.Pointer(owner)), uintptr(unsafe.Pointer(group)), uintptr(unsafe.Pointer(dacl)), uintptr(unsafe.Pointer(sacl)), 0, 0) + r0, _, _ := syscall.SyscallN(procSetNamedSecurityInfoW.Addr(), uintptr(unsafe.Pointer(objectName)), uintptr(objectType), uintptr(securityInformation), uintptr(unsafe.Pointer(owner)), uintptr(unsafe.Pointer(group)), uintptr(unsafe.Pointer(dacl)), uintptr(unsafe.Pointer(sacl))) if r0 != 0 { ret = syscall.Errno(r0) } @@ -1259,7 +1282,7 @@ func _SetNamedSecurityInfo(objectName *uint16, objectType SE_OBJECT_TYPE, securi } func setSecurityDescriptorControl(sd *SECURITY_DESCRIPTOR, controlBitsOfInterest SECURITY_DESCRIPTOR_CONTROL, controlBitsToSet SECURITY_DESCRIPTOR_CONTROL) (err error) { - r1, _, e1 := syscall.Syscall(procSetSecurityDescriptorControl.Addr(), 3, uintptr(unsafe.Pointer(sd)), uintptr(controlBitsOfInterest), uintptr(controlBitsToSet)) + r1, _, e1 := syscall.SyscallN(procSetSecurityDescriptorControl.Addr(), uintptr(unsafe.Pointer(sd)), uintptr(controlBitsOfInterest), uintptr(controlBitsToSet)) if r1 == 0 { err = errnoErr(e1) } @@ -1275,7 +1298,7 @@ func setSecurityDescriptorDacl(sd *SECURITY_DESCRIPTOR, daclPresent bool, dacl * if daclDefaulted { _p1 = 1 } - r1, _, e1 := syscall.Syscall6(procSetSecurityDescriptorDacl.Addr(), 4, uintptr(unsafe.Pointer(sd)), uintptr(_p0), uintptr(unsafe.Pointer(dacl)), uintptr(_p1), 0, 0) + r1, _, e1 := syscall.SyscallN(procSetSecurityDescriptorDacl.Addr(), uintptr(unsafe.Pointer(sd)), uintptr(_p0), uintptr(unsafe.Pointer(dacl)), uintptr(_p1)) if r1 == 0 { err = errnoErr(e1) } @@ -1287,7 +1310,7 @@ func setSecurityDescriptorGroup(sd *SECURITY_DESCRIPTOR, group *SID, groupDefaul if groupDefaulted { _p0 = 1 } - r1, _, e1 := syscall.Syscall(procSetSecurityDescriptorGroup.Addr(), 3, uintptr(unsafe.Pointer(sd)), uintptr(unsafe.Pointer(group)), uintptr(_p0)) + r1, _, e1 := syscall.SyscallN(procSetSecurityDescriptorGroup.Addr(), uintptr(unsafe.Pointer(sd)), uintptr(unsafe.Pointer(group)), uintptr(_p0)) if r1 == 0 { err = errnoErr(e1) } @@ -1299,7 +1322,7 @@ func setSecurityDescriptorOwner(sd *SECURITY_DESCRIPTOR, owner *SID, ownerDefaul if ownerDefaulted { _p0 = 1 } - r1, _, e1 := syscall.Syscall(procSetSecurityDescriptorOwner.Addr(), 3, uintptr(unsafe.Pointer(sd)), uintptr(unsafe.Pointer(owner)), uintptr(_p0)) + r1, _, e1 := syscall.SyscallN(procSetSecurityDescriptorOwner.Addr(), uintptr(unsafe.Pointer(sd)), uintptr(unsafe.Pointer(owner)), uintptr(_p0)) if r1 == 0 { err = errnoErr(e1) } @@ -1307,7 +1330,7 @@ func setSecurityDescriptorOwner(sd *SECURITY_DESCRIPTOR, owner *SID, ownerDefaul } func setSecurityDescriptorRMControl(sd *SECURITY_DESCRIPTOR, rmControl *uint8) { - syscall.Syscall(procSetSecurityDescriptorRMControl.Addr(), 2, uintptr(unsafe.Pointer(sd)), uintptr(unsafe.Pointer(rmControl)), 0) + syscall.SyscallN(procSetSecurityDescriptorRMControl.Addr(), uintptr(unsafe.Pointer(sd)), uintptr(unsafe.Pointer(rmControl))) return } @@ -1320,7 +1343,7 @@ func setSecurityDescriptorSacl(sd *SECURITY_DESCRIPTOR, saclPresent bool, sacl * if saclDefaulted { _p1 = 1 } - r1, _, e1 := syscall.Syscall6(procSetSecurityDescriptorSacl.Addr(), 4, uintptr(unsafe.Pointer(sd)), uintptr(_p0), uintptr(unsafe.Pointer(sacl)), uintptr(_p1), 0, 0) + r1, _, e1 := syscall.SyscallN(procSetSecurityDescriptorSacl.Addr(), uintptr(unsafe.Pointer(sd)), uintptr(_p0), uintptr(unsafe.Pointer(sacl)), uintptr(_p1)) if r1 == 0 { err = errnoErr(e1) } @@ -1328,7 +1351,7 @@ func setSecurityDescriptorSacl(sd *SECURITY_DESCRIPTOR, saclPresent bool, sacl * } func SetSecurityInfo(handle Handle, objectType SE_OBJECT_TYPE, securityInformation SECURITY_INFORMATION, owner *SID, group *SID, dacl *ACL, sacl *ACL) (ret error) { - r0, _, _ := syscall.Syscall9(procSetSecurityInfo.Addr(), 7, uintptr(handle), uintptr(objectType), uintptr(securityInformation), uintptr(unsafe.Pointer(owner)), uintptr(unsafe.Pointer(group)), uintptr(unsafe.Pointer(dacl)), uintptr(unsafe.Pointer(sacl)), 0, 0) + r0, _, _ := syscall.SyscallN(procSetSecurityInfo.Addr(), uintptr(handle), uintptr(objectType), uintptr(securityInformation), uintptr(unsafe.Pointer(owner)), uintptr(unsafe.Pointer(group)), uintptr(unsafe.Pointer(dacl)), uintptr(unsafe.Pointer(sacl))) if r0 != 0 { ret = syscall.Errno(r0) } @@ -1336,7 +1359,7 @@ func SetSecurityInfo(handle Handle, objectType SE_OBJECT_TYPE, securityInformati } func SetServiceStatus(service Handle, serviceStatus *SERVICE_STATUS) (err error) { - r1, _, e1 := syscall.Syscall(procSetServiceStatus.Addr(), 2, uintptr(service), uintptr(unsafe.Pointer(serviceStatus)), 0) + r1, _, e1 := syscall.SyscallN(procSetServiceStatus.Addr(), uintptr(service), uintptr(unsafe.Pointer(serviceStatus))) if r1 == 0 { err = errnoErr(e1) } @@ -1344,7 +1367,7 @@ func SetServiceStatus(service Handle, serviceStatus *SERVICE_STATUS) (err error) } func SetThreadToken(thread *Handle, token Token) (err error) { - r1, _, e1 := syscall.Syscall(procSetThreadToken.Addr(), 2, uintptr(unsafe.Pointer(thread)), uintptr(token), 0) + r1, _, e1 := syscall.SyscallN(procSetThreadToken.Addr(), uintptr(unsafe.Pointer(thread)), uintptr(token)) if r1 == 0 { err = errnoErr(e1) } @@ -1352,7 +1375,7 @@ func SetThreadToken(thread *Handle, token Token) (err error) { } func SetTokenInformation(token Token, infoClass uint32, info *byte, infoLen uint32) (err error) { - r1, _, e1 := syscall.Syscall6(procSetTokenInformation.Addr(), 4, uintptr(token), uintptr(infoClass), uintptr(unsafe.Pointer(info)), uintptr(infoLen), 0, 0) + r1, _, e1 := syscall.SyscallN(procSetTokenInformation.Addr(), uintptr(token), uintptr(infoClass), uintptr(unsafe.Pointer(info)), uintptr(infoLen)) if r1 == 0 { err = errnoErr(e1) } @@ -1360,7 +1383,7 @@ func SetTokenInformation(token Token, infoClass uint32, info *byte, infoLen uint } func StartServiceCtrlDispatcher(serviceTable *SERVICE_TABLE_ENTRY) (err error) { - r1, _, e1 := syscall.Syscall(procStartServiceCtrlDispatcherW.Addr(), 1, uintptr(unsafe.Pointer(serviceTable)), 0, 0) + r1, _, e1 := syscall.SyscallN(procStartServiceCtrlDispatcherW.Addr(), uintptr(unsafe.Pointer(serviceTable))) if r1 == 0 { err = errnoErr(e1) } @@ -1368,7 +1391,7 @@ func StartServiceCtrlDispatcher(serviceTable *SERVICE_TABLE_ENTRY) (err error) { } func StartService(service Handle, numArgs uint32, argVectors **uint16) (err error) { - r1, _, e1 := syscall.Syscall(procStartServiceW.Addr(), 3, uintptr(service), uintptr(numArgs), uintptr(unsafe.Pointer(argVectors))) + r1, _, e1 := syscall.SyscallN(procStartServiceW.Addr(), uintptr(service), uintptr(numArgs), uintptr(unsafe.Pointer(argVectors))) if r1 == 0 { err = errnoErr(e1) } @@ -1376,7 +1399,7 @@ func StartService(service Handle, numArgs uint32, argVectors **uint16) (err erro } func CertAddCertificateContextToStore(store Handle, certContext *CertContext, addDisposition uint32, storeContext **CertContext) (err error) { - r1, _, e1 := syscall.Syscall6(procCertAddCertificateContextToStore.Addr(), 4, uintptr(store), uintptr(unsafe.Pointer(certContext)), uintptr(addDisposition), uintptr(unsafe.Pointer(storeContext)), 0, 0) + r1, _, e1 := syscall.SyscallN(procCertAddCertificateContextToStore.Addr(), uintptr(store), uintptr(unsafe.Pointer(certContext)), uintptr(addDisposition), uintptr(unsafe.Pointer(storeContext))) if r1 == 0 { err = errnoErr(e1) } @@ -1384,7 +1407,7 @@ func CertAddCertificateContextToStore(store Handle, certContext *CertContext, ad } func CertCloseStore(store Handle, flags uint32) (err error) { - r1, _, e1 := syscall.Syscall(procCertCloseStore.Addr(), 2, uintptr(store), uintptr(flags), 0) + r1, _, e1 := syscall.SyscallN(procCertCloseStore.Addr(), uintptr(store), uintptr(flags)) if r1 == 0 { err = errnoErr(e1) } @@ -1392,7 +1415,7 @@ func CertCloseStore(store Handle, flags uint32) (err error) { } func CertCreateCertificateContext(certEncodingType uint32, certEncoded *byte, encodedLen uint32) (context *CertContext, err error) { - r0, _, e1 := syscall.Syscall(procCertCreateCertificateContext.Addr(), 3, uintptr(certEncodingType), uintptr(unsafe.Pointer(certEncoded)), uintptr(encodedLen)) + r0, _, e1 := syscall.SyscallN(procCertCreateCertificateContext.Addr(), uintptr(certEncodingType), uintptr(unsafe.Pointer(certEncoded)), uintptr(encodedLen)) context = (*CertContext)(unsafe.Pointer(r0)) if context == nil { err = errnoErr(e1) @@ -1401,7 +1424,7 @@ func CertCreateCertificateContext(certEncodingType uint32, certEncoded *byte, en } func CertDeleteCertificateFromStore(certContext *CertContext) (err error) { - r1, _, e1 := syscall.Syscall(procCertDeleteCertificateFromStore.Addr(), 1, uintptr(unsafe.Pointer(certContext)), 0, 0) + r1, _, e1 := syscall.SyscallN(procCertDeleteCertificateFromStore.Addr(), uintptr(unsafe.Pointer(certContext))) if r1 == 0 { err = errnoErr(e1) } @@ -1409,13 +1432,13 @@ func CertDeleteCertificateFromStore(certContext *CertContext) (err error) { } func CertDuplicateCertificateContext(certContext *CertContext) (dupContext *CertContext) { - r0, _, _ := syscall.Syscall(procCertDuplicateCertificateContext.Addr(), 1, uintptr(unsafe.Pointer(certContext)), 0, 0) + r0, _, _ := syscall.SyscallN(procCertDuplicateCertificateContext.Addr(), uintptr(unsafe.Pointer(certContext))) dupContext = (*CertContext)(unsafe.Pointer(r0)) return } func CertEnumCertificatesInStore(store Handle, prevContext *CertContext) (context *CertContext, err error) { - r0, _, e1 := syscall.Syscall(procCertEnumCertificatesInStore.Addr(), 2, uintptr(store), uintptr(unsafe.Pointer(prevContext)), 0) + r0, _, e1 := syscall.SyscallN(procCertEnumCertificatesInStore.Addr(), uintptr(store), uintptr(unsafe.Pointer(prevContext))) context = (*CertContext)(unsafe.Pointer(r0)) if context == nil { err = errnoErr(e1) @@ -1424,7 +1447,7 @@ func CertEnumCertificatesInStore(store Handle, prevContext *CertContext) (contex } func CertFindCertificateInStore(store Handle, certEncodingType uint32, findFlags uint32, findType uint32, findPara unsafe.Pointer, prevCertContext *CertContext) (cert *CertContext, err error) { - r0, _, e1 := syscall.Syscall6(procCertFindCertificateInStore.Addr(), 6, uintptr(store), uintptr(certEncodingType), uintptr(findFlags), uintptr(findType), uintptr(findPara), uintptr(unsafe.Pointer(prevCertContext))) + r0, _, e1 := syscall.SyscallN(procCertFindCertificateInStore.Addr(), uintptr(store), uintptr(certEncodingType), uintptr(findFlags), uintptr(findType), uintptr(findPara), uintptr(unsafe.Pointer(prevCertContext))) cert = (*CertContext)(unsafe.Pointer(r0)) if cert == nil { err = errnoErr(e1) @@ -1433,7 +1456,7 @@ func CertFindCertificateInStore(store Handle, certEncodingType uint32, findFlags } func CertFindChainInStore(store Handle, certEncodingType uint32, findFlags uint32, findType uint32, findPara unsafe.Pointer, prevChainContext *CertChainContext) (certchain *CertChainContext, err error) { - r0, _, e1 := syscall.Syscall6(procCertFindChainInStore.Addr(), 6, uintptr(store), uintptr(certEncodingType), uintptr(findFlags), uintptr(findType), uintptr(findPara), uintptr(unsafe.Pointer(prevChainContext))) + r0, _, e1 := syscall.SyscallN(procCertFindChainInStore.Addr(), uintptr(store), uintptr(certEncodingType), uintptr(findFlags), uintptr(findType), uintptr(findPara), uintptr(unsafe.Pointer(prevChainContext))) certchain = (*CertChainContext)(unsafe.Pointer(r0)) if certchain == nil { err = errnoErr(e1) @@ -1442,18 +1465,18 @@ func CertFindChainInStore(store Handle, certEncodingType uint32, findFlags uint3 } func CertFindExtension(objId *byte, countExtensions uint32, extensions *CertExtension) (ret *CertExtension) { - r0, _, _ := syscall.Syscall(procCertFindExtension.Addr(), 3, uintptr(unsafe.Pointer(objId)), uintptr(countExtensions), uintptr(unsafe.Pointer(extensions))) + r0, _, _ := syscall.SyscallN(procCertFindExtension.Addr(), uintptr(unsafe.Pointer(objId)), uintptr(countExtensions), uintptr(unsafe.Pointer(extensions))) ret = (*CertExtension)(unsafe.Pointer(r0)) return } func CertFreeCertificateChain(ctx *CertChainContext) { - syscall.Syscall(procCertFreeCertificateChain.Addr(), 1, uintptr(unsafe.Pointer(ctx)), 0, 0) + syscall.SyscallN(procCertFreeCertificateChain.Addr(), uintptr(unsafe.Pointer(ctx))) return } func CertFreeCertificateContext(ctx *CertContext) (err error) { - r1, _, e1 := syscall.Syscall(procCertFreeCertificateContext.Addr(), 1, uintptr(unsafe.Pointer(ctx)), 0, 0) + r1, _, e1 := syscall.SyscallN(procCertFreeCertificateContext.Addr(), uintptr(unsafe.Pointer(ctx))) if r1 == 0 { err = errnoErr(e1) } @@ -1461,7 +1484,7 @@ func CertFreeCertificateContext(ctx *CertContext) (err error) { } func CertGetCertificateChain(engine Handle, leaf *CertContext, time *Filetime, additionalStore Handle, para *CertChainPara, flags uint32, reserved uintptr, chainCtx **CertChainContext) (err error) { - r1, _, e1 := syscall.Syscall9(procCertGetCertificateChain.Addr(), 8, uintptr(engine), uintptr(unsafe.Pointer(leaf)), uintptr(unsafe.Pointer(time)), uintptr(additionalStore), uintptr(unsafe.Pointer(para)), uintptr(flags), uintptr(reserved), uintptr(unsafe.Pointer(chainCtx)), 0) + r1, _, e1 := syscall.SyscallN(procCertGetCertificateChain.Addr(), uintptr(engine), uintptr(unsafe.Pointer(leaf)), uintptr(unsafe.Pointer(time)), uintptr(additionalStore), uintptr(unsafe.Pointer(para)), uintptr(flags), uintptr(reserved), uintptr(unsafe.Pointer(chainCtx))) if r1 == 0 { err = errnoErr(e1) } @@ -1469,13 +1492,13 @@ func CertGetCertificateChain(engine Handle, leaf *CertContext, time *Filetime, a } func CertGetNameString(certContext *CertContext, nameType uint32, flags uint32, typePara unsafe.Pointer, name *uint16, size uint32) (chars uint32) { - r0, _, _ := syscall.Syscall6(procCertGetNameStringW.Addr(), 6, uintptr(unsafe.Pointer(certContext)), uintptr(nameType), uintptr(flags), uintptr(typePara), uintptr(unsafe.Pointer(name)), uintptr(size)) + r0, _, _ := syscall.SyscallN(procCertGetNameStringW.Addr(), uintptr(unsafe.Pointer(certContext)), uintptr(nameType), uintptr(flags), uintptr(typePara), uintptr(unsafe.Pointer(name)), uintptr(size)) chars = uint32(r0) return } func CertOpenStore(storeProvider uintptr, msgAndCertEncodingType uint32, cryptProv uintptr, flags uint32, para uintptr) (handle Handle, err error) { - r0, _, e1 := syscall.Syscall6(procCertOpenStore.Addr(), 5, uintptr(storeProvider), uintptr(msgAndCertEncodingType), uintptr(cryptProv), uintptr(flags), uintptr(para), 0) + r0, _, e1 := syscall.SyscallN(procCertOpenStore.Addr(), uintptr(storeProvider), uintptr(msgAndCertEncodingType), uintptr(cryptProv), uintptr(flags), uintptr(para)) handle = Handle(r0) if handle == 0 { err = errnoErr(e1) @@ -1484,7 +1507,7 @@ func CertOpenStore(storeProvider uintptr, msgAndCertEncodingType uint32, cryptPr } func CertOpenSystemStore(hprov Handle, name *uint16) (store Handle, err error) { - r0, _, e1 := syscall.Syscall(procCertOpenSystemStoreW.Addr(), 2, uintptr(hprov), uintptr(unsafe.Pointer(name)), 0) + r0, _, e1 := syscall.SyscallN(procCertOpenSystemStoreW.Addr(), uintptr(hprov), uintptr(unsafe.Pointer(name))) store = Handle(r0) if store == 0 { err = errnoErr(e1) @@ -1493,7 +1516,7 @@ func CertOpenSystemStore(hprov Handle, name *uint16) (store Handle, err error) { } func CertVerifyCertificateChainPolicy(policyOID uintptr, chain *CertChainContext, para *CertChainPolicyPara, status *CertChainPolicyStatus) (err error) { - r1, _, e1 := syscall.Syscall6(procCertVerifyCertificateChainPolicy.Addr(), 4, uintptr(policyOID), uintptr(unsafe.Pointer(chain)), uintptr(unsafe.Pointer(para)), uintptr(unsafe.Pointer(status)), 0, 0) + r1, _, e1 := syscall.SyscallN(procCertVerifyCertificateChainPolicy.Addr(), uintptr(policyOID), uintptr(unsafe.Pointer(chain)), uintptr(unsafe.Pointer(para)), uintptr(unsafe.Pointer(status))) if r1 == 0 { err = errnoErr(e1) } @@ -1505,7 +1528,7 @@ func CryptAcquireCertificatePrivateKey(cert *CertContext, flags uint32, paramete if *callerFreeProvOrNCryptKey { _p0 = 1 } - r1, _, e1 := syscall.Syscall6(procCryptAcquireCertificatePrivateKey.Addr(), 6, uintptr(unsafe.Pointer(cert)), uintptr(flags), uintptr(parameters), uintptr(unsafe.Pointer(cryptProvOrNCryptKey)), uintptr(unsafe.Pointer(keySpec)), uintptr(unsafe.Pointer(&_p0))) + r1, _, e1 := syscall.SyscallN(procCryptAcquireCertificatePrivateKey.Addr(), uintptr(unsafe.Pointer(cert)), uintptr(flags), uintptr(parameters), uintptr(unsafe.Pointer(cryptProvOrNCryptKey)), uintptr(unsafe.Pointer(keySpec)), uintptr(unsafe.Pointer(&_p0))) *callerFreeProvOrNCryptKey = _p0 != 0 if r1 == 0 { err = errnoErr(e1) @@ -1514,7 +1537,7 @@ func CryptAcquireCertificatePrivateKey(cert *CertContext, flags uint32, paramete } func CryptDecodeObject(encodingType uint32, structType *byte, encodedBytes *byte, lenEncodedBytes uint32, flags uint32, decoded unsafe.Pointer, decodedLen *uint32) (err error) { - r1, _, e1 := syscall.Syscall9(procCryptDecodeObject.Addr(), 7, uintptr(encodingType), uintptr(unsafe.Pointer(structType)), uintptr(unsafe.Pointer(encodedBytes)), uintptr(lenEncodedBytes), uintptr(flags), uintptr(decoded), uintptr(unsafe.Pointer(decodedLen)), 0, 0) + r1, _, e1 := syscall.SyscallN(procCryptDecodeObject.Addr(), uintptr(encodingType), uintptr(unsafe.Pointer(structType)), uintptr(unsafe.Pointer(encodedBytes)), uintptr(lenEncodedBytes), uintptr(flags), uintptr(decoded), uintptr(unsafe.Pointer(decodedLen))) if r1 == 0 { err = errnoErr(e1) } @@ -1522,7 +1545,7 @@ func CryptDecodeObject(encodingType uint32, structType *byte, encodedBytes *byte } func CryptProtectData(dataIn *DataBlob, name *uint16, optionalEntropy *DataBlob, reserved uintptr, promptStruct *CryptProtectPromptStruct, flags uint32, dataOut *DataBlob) (err error) { - r1, _, e1 := syscall.Syscall9(procCryptProtectData.Addr(), 7, uintptr(unsafe.Pointer(dataIn)), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(optionalEntropy)), uintptr(reserved), uintptr(unsafe.Pointer(promptStruct)), uintptr(flags), uintptr(unsafe.Pointer(dataOut)), 0, 0) + r1, _, e1 := syscall.SyscallN(procCryptProtectData.Addr(), uintptr(unsafe.Pointer(dataIn)), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(optionalEntropy)), uintptr(reserved), uintptr(unsafe.Pointer(promptStruct)), uintptr(flags), uintptr(unsafe.Pointer(dataOut))) if r1 == 0 { err = errnoErr(e1) } @@ -1530,7 +1553,7 @@ func CryptProtectData(dataIn *DataBlob, name *uint16, optionalEntropy *DataBlob, } func CryptQueryObject(objectType uint32, object unsafe.Pointer, expectedContentTypeFlags uint32, expectedFormatTypeFlags uint32, flags uint32, msgAndCertEncodingType *uint32, contentType *uint32, formatType *uint32, certStore *Handle, msg *Handle, context *unsafe.Pointer) (err error) { - r1, _, e1 := syscall.Syscall12(procCryptQueryObject.Addr(), 11, uintptr(objectType), uintptr(object), uintptr(expectedContentTypeFlags), uintptr(expectedFormatTypeFlags), uintptr(flags), uintptr(unsafe.Pointer(msgAndCertEncodingType)), uintptr(unsafe.Pointer(contentType)), uintptr(unsafe.Pointer(formatType)), uintptr(unsafe.Pointer(certStore)), uintptr(unsafe.Pointer(msg)), uintptr(unsafe.Pointer(context)), 0) + r1, _, e1 := syscall.SyscallN(procCryptQueryObject.Addr(), uintptr(objectType), uintptr(object), uintptr(expectedContentTypeFlags), uintptr(expectedFormatTypeFlags), uintptr(flags), uintptr(unsafe.Pointer(msgAndCertEncodingType)), uintptr(unsafe.Pointer(contentType)), uintptr(unsafe.Pointer(formatType)), uintptr(unsafe.Pointer(certStore)), uintptr(unsafe.Pointer(msg)), uintptr(unsafe.Pointer(context))) if r1 == 0 { err = errnoErr(e1) } @@ -1538,7 +1561,7 @@ func CryptQueryObject(objectType uint32, object unsafe.Pointer, expectedContentT } func CryptUnprotectData(dataIn *DataBlob, name **uint16, optionalEntropy *DataBlob, reserved uintptr, promptStruct *CryptProtectPromptStruct, flags uint32, dataOut *DataBlob) (err error) { - r1, _, e1 := syscall.Syscall9(procCryptUnprotectData.Addr(), 7, uintptr(unsafe.Pointer(dataIn)), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(optionalEntropy)), uintptr(reserved), uintptr(unsafe.Pointer(promptStruct)), uintptr(flags), uintptr(unsafe.Pointer(dataOut)), 0, 0) + r1, _, e1 := syscall.SyscallN(procCryptUnprotectData.Addr(), uintptr(unsafe.Pointer(dataIn)), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(optionalEntropy)), uintptr(reserved), uintptr(unsafe.Pointer(promptStruct)), uintptr(flags), uintptr(unsafe.Pointer(dataOut))) if r1 == 0 { err = errnoErr(e1) } @@ -1546,7 +1569,7 @@ func CryptUnprotectData(dataIn *DataBlob, name **uint16, optionalEntropy *DataBl } func PFXImportCertStore(pfx *CryptDataBlob, password *uint16, flags uint32) (store Handle, err error) { - r0, _, e1 := syscall.Syscall(procPFXImportCertStore.Addr(), 3, uintptr(unsafe.Pointer(pfx)), uintptr(unsafe.Pointer(password)), uintptr(flags)) + r0, _, e1 := syscall.SyscallN(procPFXImportCertStore.Addr(), uintptr(unsafe.Pointer(pfx)), uintptr(unsafe.Pointer(password)), uintptr(flags)) store = Handle(r0) if store == 0 { err = errnoErr(e1) @@ -1555,7 +1578,7 @@ func PFXImportCertStore(pfx *CryptDataBlob, password *uint16, flags uint32) (sto } func DnsNameCompare(name1 *uint16, name2 *uint16) (same bool) { - r0, _, _ := syscall.Syscall(procDnsNameCompare_W.Addr(), 2, uintptr(unsafe.Pointer(name1)), uintptr(unsafe.Pointer(name2)), 0) + r0, _, _ := syscall.SyscallN(procDnsNameCompare_W.Addr(), uintptr(unsafe.Pointer(name1)), uintptr(unsafe.Pointer(name2))) same = r0 != 0 return } @@ -1570,7 +1593,7 @@ func DnsQuery(name string, qtype uint16, options uint32, extra *byte, qrs **DNSR } func _DnsQuery(name *uint16, qtype uint16, options uint32, extra *byte, qrs **DNSRecord, pr *byte) (status error) { - r0, _, _ := syscall.Syscall6(procDnsQuery_W.Addr(), 6, uintptr(unsafe.Pointer(name)), uintptr(qtype), uintptr(options), uintptr(unsafe.Pointer(extra)), uintptr(unsafe.Pointer(qrs)), uintptr(unsafe.Pointer(pr))) + r0, _, _ := syscall.SyscallN(procDnsQuery_W.Addr(), uintptr(unsafe.Pointer(name)), uintptr(qtype), uintptr(options), uintptr(unsafe.Pointer(extra)), uintptr(unsafe.Pointer(qrs)), uintptr(unsafe.Pointer(pr))) if r0 != 0 { status = syscall.Errno(r0) } @@ -1578,12 +1601,12 @@ func _DnsQuery(name *uint16, qtype uint16, options uint32, extra *byte, qrs **DN } func DnsRecordListFree(rl *DNSRecord, freetype uint32) { - syscall.Syscall(procDnsRecordListFree.Addr(), 2, uintptr(unsafe.Pointer(rl)), uintptr(freetype), 0) + syscall.SyscallN(procDnsRecordListFree.Addr(), uintptr(unsafe.Pointer(rl)), uintptr(freetype)) return } func DwmGetWindowAttribute(hwnd HWND, attribute uint32, value unsafe.Pointer, size uint32) (ret error) { - r0, _, _ := syscall.Syscall6(procDwmGetWindowAttribute.Addr(), 4, uintptr(hwnd), uintptr(attribute), uintptr(value), uintptr(size), 0, 0) + r0, _, _ := syscall.SyscallN(procDwmGetWindowAttribute.Addr(), uintptr(hwnd), uintptr(attribute), uintptr(value), uintptr(size)) if r0 != 0 { ret = syscall.Errno(r0) } @@ -1591,15 +1614,28 @@ func DwmGetWindowAttribute(hwnd HWND, attribute uint32, value unsafe.Pointer, si } func DwmSetWindowAttribute(hwnd HWND, attribute uint32, value unsafe.Pointer, size uint32) (ret error) { - r0, _, _ := syscall.Syscall6(procDwmSetWindowAttribute.Addr(), 4, uintptr(hwnd), uintptr(attribute), uintptr(value), uintptr(size), 0, 0) + r0, _, _ := syscall.SyscallN(procDwmSetWindowAttribute.Addr(), uintptr(hwnd), uintptr(attribute), uintptr(value), uintptr(size)) if r0 != 0 { ret = syscall.Errno(r0) } return } +func CancelMibChangeNotify2(notificationHandle Handle) (errcode error) { + r0, _, _ := syscall.SyscallN(procCancelMibChangeNotify2.Addr(), uintptr(notificationHandle)) + if r0 != 0 { + errcode = syscall.Errno(r0) + } + return +} + +func FreeMibTable(memory unsafe.Pointer) { + syscall.SyscallN(procFreeMibTable.Addr(), uintptr(memory)) + return +} + func GetAdaptersAddresses(family uint32, flags uint32, reserved uintptr, adapterAddresses *IpAdapterAddresses, sizePointer *uint32) (errcode error) { - r0, _, _ := syscall.Syscall6(procGetAdaptersAddresses.Addr(), 5, uintptr(family), uintptr(flags), uintptr(reserved), uintptr(unsafe.Pointer(adapterAddresses)), uintptr(unsafe.Pointer(sizePointer)), 0) + r0, _, _ := syscall.SyscallN(procGetAdaptersAddresses.Addr(), uintptr(family), uintptr(flags), uintptr(reserved), uintptr(unsafe.Pointer(adapterAddresses)), uintptr(unsafe.Pointer(sizePointer))) if r0 != 0 { errcode = syscall.Errno(r0) } @@ -1607,7 +1643,7 @@ func GetAdaptersAddresses(family uint32, flags uint32, reserved uintptr, adapter } func GetAdaptersInfo(ai *IpAdapterInfo, ol *uint32) (errcode error) { - r0, _, _ := syscall.Syscall(procGetAdaptersInfo.Addr(), 2, uintptr(unsafe.Pointer(ai)), uintptr(unsafe.Pointer(ol)), 0) + r0, _, _ := syscall.SyscallN(procGetAdaptersInfo.Addr(), uintptr(unsafe.Pointer(ai)), uintptr(unsafe.Pointer(ol))) if r0 != 0 { errcode = syscall.Errno(r0) } @@ -1615,7 +1651,7 @@ func GetAdaptersInfo(ai *IpAdapterInfo, ol *uint32) (errcode error) { } func getBestInterfaceEx(sockaddr unsafe.Pointer, pdwBestIfIndex *uint32) (errcode error) { - r0, _, _ := syscall.Syscall(procGetBestInterfaceEx.Addr(), 2, uintptr(sockaddr), uintptr(unsafe.Pointer(pdwBestIfIndex)), 0) + r0, _, _ := syscall.SyscallN(procGetBestInterfaceEx.Addr(), uintptr(sockaddr), uintptr(unsafe.Pointer(pdwBestIfIndex))) if r0 != 0 { errcode = syscall.Errno(r0) } @@ -1623,7 +1659,75 @@ func getBestInterfaceEx(sockaddr unsafe.Pointer, pdwBestIfIndex *uint32) (errcod } func GetIfEntry(pIfRow *MibIfRow) (errcode error) { - r0, _, _ := syscall.Syscall(procGetIfEntry.Addr(), 1, uintptr(unsafe.Pointer(pIfRow)), 0, 0) + r0, _, _ := syscall.SyscallN(procGetIfEntry.Addr(), uintptr(unsafe.Pointer(pIfRow))) + if r0 != 0 { + errcode = syscall.Errno(r0) + } + return +} + +func GetIfEntry2Ex(level uint32, row *MibIfRow2) (errcode error) { + r0, _, _ := syscall.SyscallN(procGetIfEntry2Ex.Addr(), uintptr(level), uintptr(unsafe.Pointer(row))) + if r0 != 0 { + errcode = syscall.Errno(r0) + } + return +} + +func GetIpForwardEntry2(row *MibIpForwardRow2) (errcode error) { + r0, _, _ := syscall.SyscallN(procGetIpForwardEntry2.Addr(), uintptr(unsafe.Pointer(row))) + if r0 != 0 { + errcode = syscall.Errno(r0) + } + return +} + +func GetIpForwardTable2(family uint16, table **MibIpForwardTable2) (errcode error) { + r0, _, _ := syscall.SyscallN(procGetIpForwardTable2.Addr(), uintptr(family), uintptr(unsafe.Pointer(table))) + if r0 != 0 { + errcode = syscall.Errno(r0) + } + return +} + +func GetUnicastIpAddressEntry(row *MibUnicastIpAddressRow) (errcode error) { + r0, _, _ := syscall.SyscallN(procGetUnicastIpAddressEntry.Addr(), uintptr(unsafe.Pointer(row))) + if r0 != 0 { + errcode = syscall.Errno(r0) + } + return +} + +func NotifyIpInterfaceChange(family uint16, callback uintptr, callerContext unsafe.Pointer, initialNotification bool, notificationHandle *Handle) (errcode error) { + var _p0 uint32 + if initialNotification { + _p0 = 1 + } + r0, _, _ := syscall.SyscallN(procNotifyIpInterfaceChange.Addr(), uintptr(family), uintptr(callback), uintptr(callerContext), uintptr(_p0), uintptr(unsafe.Pointer(notificationHandle))) + if r0 != 0 { + errcode = syscall.Errno(r0) + } + return +} + +func NotifyRouteChange2(family uint16, callback uintptr, callerContext unsafe.Pointer, initialNotification bool, notificationHandle *Handle) (errcode error) { + var _p0 uint32 + if initialNotification { + _p0 = 1 + } + r0, _, _ := syscall.SyscallN(procNotifyRouteChange2.Addr(), uintptr(family), uintptr(callback), uintptr(callerContext), uintptr(_p0), uintptr(unsafe.Pointer(notificationHandle))) + if r0 != 0 { + errcode = syscall.Errno(r0) + } + return +} + +func NotifyUnicastIpAddressChange(family uint16, callback uintptr, callerContext unsafe.Pointer, initialNotification bool, notificationHandle *Handle) (errcode error) { + var _p0 uint32 + if initialNotification { + _p0 = 1 + } + r0, _, _ := syscall.SyscallN(procNotifyUnicastIpAddressChange.Addr(), uintptr(family), uintptr(callback), uintptr(callerContext), uintptr(_p0), uintptr(unsafe.Pointer(notificationHandle))) if r0 != 0 { errcode = syscall.Errno(r0) } @@ -1631,7 +1735,7 @@ func GetIfEntry(pIfRow *MibIfRow) (errcode error) { } func AddDllDirectory(path *uint16) (cookie uintptr, err error) { - r0, _, e1 := syscall.Syscall(procAddDllDirectory.Addr(), 1, uintptr(unsafe.Pointer(path)), 0, 0) + r0, _, e1 := syscall.SyscallN(procAddDllDirectory.Addr(), uintptr(unsafe.Pointer(path))) cookie = uintptr(r0) if cookie == 0 { err = errnoErr(e1) @@ -1640,7 +1744,7 @@ func AddDllDirectory(path *uint16) (cookie uintptr, err error) { } func AssignProcessToJobObject(job Handle, process Handle) (err error) { - r1, _, e1 := syscall.Syscall(procAssignProcessToJobObject.Addr(), 2, uintptr(job), uintptr(process), 0) + r1, _, e1 := syscall.SyscallN(procAssignProcessToJobObject.Addr(), uintptr(job), uintptr(process)) if r1 == 0 { err = errnoErr(e1) } @@ -1648,7 +1752,7 @@ func AssignProcessToJobObject(job Handle, process Handle) (err error) { } func CancelIo(s Handle) (err error) { - r1, _, e1 := syscall.Syscall(procCancelIo.Addr(), 1, uintptr(s), 0, 0) + r1, _, e1 := syscall.SyscallN(procCancelIo.Addr(), uintptr(s)) if r1 == 0 { err = errnoErr(e1) } @@ -1656,7 +1760,7 @@ func CancelIo(s Handle) (err error) { } func CancelIoEx(s Handle, o *Overlapped) (err error) { - r1, _, e1 := syscall.Syscall(procCancelIoEx.Addr(), 2, uintptr(s), uintptr(unsafe.Pointer(o)), 0) + r1, _, e1 := syscall.SyscallN(procCancelIoEx.Addr(), uintptr(s), uintptr(unsafe.Pointer(o))) if r1 == 0 { err = errnoErr(e1) } @@ -1664,7 +1768,7 @@ func CancelIoEx(s Handle, o *Overlapped) (err error) { } func ClearCommBreak(handle Handle) (err error) { - r1, _, e1 := syscall.Syscall(procClearCommBreak.Addr(), 1, uintptr(handle), 0, 0) + r1, _, e1 := syscall.SyscallN(procClearCommBreak.Addr(), uintptr(handle)) if r1 == 0 { err = errnoErr(e1) } @@ -1672,7 +1776,7 @@ func ClearCommBreak(handle Handle) (err error) { } func ClearCommError(handle Handle, lpErrors *uint32, lpStat *ComStat) (err error) { - r1, _, e1 := syscall.Syscall(procClearCommError.Addr(), 3, uintptr(handle), uintptr(unsafe.Pointer(lpErrors)), uintptr(unsafe.Pointer(lpStat))) + r1, _, e1 := syscall.SyscallN(procClearCommError.Addr(), uintptr(handle), uintptr(unsafe.Pointer(lpErrors)), uintptr(unsafe.Pointer(lpStat))) if r1 == 0 { err = errnoErr(e1) } @@ -1680,7 +1784,7 @@ func ClearCommError(handle Handle, lpErrors *uint32, lpStat *ComStat) (err error } func CloseHandle(handle Handle) (err error) { - r1, _, e1 := syscall.Syscall(procCloseHandle.Addr(), 1, uintptr(handle), 0, 0) + r1, _, e1 := syscall.SyscallN(procCloseHandle.Addr(), uintptr(handle)) if r1 == 0 { err = errnoErr(e1) } @@ -1688,12 +1792,12 @@ func CloseHandle(handle Handle) (err error) { } func ClosePseudoConsole(console Handle) { - syscall.Syscall(procClosePseudoConsole.Addr(), 1, uintptr(console), 0, 0) + syscall.SyscallN(procClosePseudoConsole.Addr(), uintptr(console)) return } func ConnectNamedPipe(pipe Handle, overlapped *Overlapped) (err error) { - r1, _, e1 := syscall.Syscall(procConnectNamedPipe.Addr(), 2, uintptr(pipe), uintptr(unsafe.Pointer(overlapped)), 0) + r1, _, e1 := syscall.SyscallN(procConnectNamedPipe.Addr(), uintptr(pipe), uintptr(unsafe.Pointer(overlapped))) if r1 == 0 { err = errnoErr(e1) } @@ -1701,7 +1805,7 @@ func ConnectNamedPipe(pipe Handle, overlapped *Overlapped) (err error) { } func CreateDirectory(path *uint16, sa *SecurityAttributes) (err error) { - r1, _, e1 := syscall.Syscall(procCreateDirectoryW.Addr(), 2, uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(sa)), 0) + r1, _, e1 := syscall.SyscallN(procCreateDirectoryW.Addr(), uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(sa))) if r1 == 0 { err = errnoErr(e1) } @@ -1709,7 +1813,7 @@ func CreateDirectory(path *uint16, sa *SecurityAttributes) (err error) { } func CreateEventEx(eventAttrs *SecurityAttributes, name *uint16, flags uint32, desiredAccess uint32) (handle Handle, err error) { - r0, _, e1 := syscall.Syscall6(procCreateEventExW.Addr(), 4, uintptr(unsafe.Pointer(eventAttrs)), uintptr(unsafe.Pointer(name)), uintptr(flags), uintptr(desiredAccess), 0, 0) + r0, _, e1 := syscall.SyscallN(procCreateEventExW.Addr(), uintptr(unsafe.Pointer(eventAttrs)), uintptr(unsafe.Pointer(name)), uintptr(flags), uintptr(desiredAccess)) handle = Handle(r0) if handle == 0 || e1 == ERROR_ALREADY_EXISTS { err = errnoErr(e1) @@ -1718,7 +1822,7 @@ func CreateEventEx(eventAttrs *SecurityAttributes, name *uint16, flags uint32, d } func CreateEvent(eventAttrs *SecurityAttributes, manualReset uint32, initialState uint32, name *uint16) (handle Handle, err error) { - r0, _, e1 := syscall.Syscall6(procCreateEventW.Addr(), 4, uintptr(unsafe.Pointer(eventAttrs)), uintptr(manualReset), uintptr(initialState), uintptr(unsafe.Pointer(name)), 0, 0) + r0, _, e1 := syscall.SyscallN(procCreateEventW.Addr(), uintptr(unsafe.Pointer(eventAttrs)), uintptr(manualReset), uintptr(initialState), uintptr(unsafe.Pointer(name))) handle = Handle(r0) if handle == 0 || e1 == ERROR_ALREADY_EXISTS { err = errnoErr(e1) @@ -1727,7 +1831,7 @@ func CreateEvent(eventAttrs *SecurityAttributes, manualReset uint32, initialStat } func CreateFileMapping(fhandle Handle, sa *SecurityAttributes, prot uint32, maxSizeHigh uint32, maxSizeLow uint32, name *uint16) (handle Handle, err error) { - r0, _, e1 := syscall.Syscall6(procCreateFileMappingW.Addr(), 6, uintptr(fhandle), uintptr(unsafe.Pointer(sa)), uintptr(prot), uintptr(maxSizeHigh), uintptr(maxSizeLow), uintptr(unsafe.Pointer(name))) + r0, _, e1 := syscall.SyscallN(procCreateFileMappingW.Addr(), uintptr(fhandle), uintptr(unsafe.Pointer(sa)), uintptr(prot), uintptr(maxSizeHigh), uintptr(maxSizeLow), uintptr(unsafe.Pointer(name))) handle = Handle(r0) if handle == 0 || e1 == ERROR_ALREADY_EXISTS { err = errnoErr(e1) @@ -1736,7 +1840,7 @@ func CreateFileMapping(fhandle Handle, sa *SecurityAttributes, prot uint32, maxS } func CreateFile(name *uint16, access uint32, mode uint32, sa *SecurityAttributes, createmode uint32, attrs uint32, templatefile Handle) (handle Handle, err error) { - r0, _, e1 := syscall.Syscall9(procCreateFileW.Addr(), 7, uintptr(unsafe.Pointer(name)), uintptr(access), uintptr(mode), uintptr(unsafe.Pointer(sa)), uintptr(createmode), uintptr(attrs), uintptr(templatefile), 0, 0) + r0, _, e1 := syscall.SyscallN(procCreateFileW.Addr(), uintptr(unsafe.Pointer(name)), uintptr(access), uintptr(mode), uintptr(unsafe.Pointer(sa)), uintptr(createmode), uintptr(attrs), uintptr(templatefile)) handle = Handle(r0) if handle == InvalidHandle { err = errnoErr(e1) @@ -1745,7 +1849,7 @@ func CreateFile(name *uint16, access uint32, mode uint32, sa *SecurityAttributes } func CreateHardLink(filename *uint16, existingfilename *uint16, reserved uintptr) (err error) { - r1, _, e1 := syscall.Syscall(procCreateHardLinkW.Addr(), 3, uintptr(unsafe.Pointer(filename)), uintptr(unsafe.Pointer(existingfilename)), uintptr(reserved)) + r1, _, e1 := syscall.SyscallN(procCreateHardLinkW.Addr(), uintptr(unsafe.Pointer(filename)), uintptr(unsafe.Pointer(existingfilename)), uintptr(reserved)) if r1&0xff == 0 { err = errnoErr(e1) } @@ -1753,7 +1857,7 @@ func CreateHardLink(filename *uint16, existingfilename *uint16, reserved uintptr } func CreateIoCompletionPort(filehandle Handle, cphandle Handle, key uintptr, threadcnt uint32) (handle Handle, err error) { - r0, _, e1 := syscall.Syscall6(procCreateIoCompletionPort.Addr(), 4, uintptr(filehandle), uintptr(cphandle), uintptr(key), uintptr(threadcnt), 0, 0) + r0, _, e1 := syscall.SyscallN(procCreateIoCompletionPort.Addr(), uintptr(filehandle), uintptr(cphandle), uintptr(key), uintptr(threadcnt)) handle = Handle(r0) if handle == 0 { err = errnoErr(e1) @@ -1762,7 +1866,7 @@ func CreateIoCompletionPort(filehandle Handle, cphandle Handle, key uintptr, thr } func CreateJobObject(jobAttr *SecurityAttributes, name *uint16) (handle Handle, err error) { - r0, _, e1 := syscall.Syscall(procCreateJobObjectW.Addr(), 2, uintptr(unsafe.Pointer(jobAttr)), uintptr(unsafe.Pointer(name)), 0) + r0, _, e1 := syscall.SyscallN(procCreateJobObjectW.Addr(), uintptr(unsafe.Pointer(jobAttr)), uintptr(unsafe.Pointer(name))) handle = Handle(r0) if handle == 0 { err = errnoErr(e1) @@ -1771,7 +1875,7 @@ func CreateJobObject(jobAttr *SecurityAttributes, name *uint16) (handle Handle, } func CreateMutexEx(mutexAttrs *SecurityAttributes, name *uint16, flags uint32, desiredAccess uint32) (handle Handle, err error) { - r0, _, e1 := syscall.Syscall6(procCreateMutexExW.Addr(), 4, uintptr(unsafe.Pointer(mutexAttrs)), uintptr(unsafe.Pointer(name)), uintptr(flags), uintptr(desiredAccess), 0, 0) + r0, _, e1 := syscall.SyscallN(procCreateMutexExW.Addr(), uintptr(unsafe.Pointer(mutexAttrs)), uintptr(unsafe.Pointer(name)), uintptr(flags), uintptr(desiredAccess)) handle = Handle(r0) if handle == 0 || e1 == ERROR_ALREADY_EXISTS { err = errnoErr(e1) @@ -1784,7 +1888,7 @@ func CreateMutex(mutexAttrs *SecurityAttributes, initialOwner bool, name *uint16 if initialOwner { _p0 = 1 } - r0, _, e1 := syscall.Syscall(procCreateMutexW.Addr(), 3, uintptr(unsafe.Pointer(mutexAttrs)), uintptr(_p0), uintptr(unsafe.Pointer(name))) + r0, _, e1 := syscall.SyscallN(procCreateMutexW.Addr(), uintptr(unsafe.Pointer(mutexAttrs)), uintptr(_p0), uintptr(unsafe.Pointer(name))) handle = Handle(r0) if handle == 0 || e1 == ERROR_ALREADY_EXISTS { err = errnoErr(e1) @@ -1793,7 +1897,7 @@ func CreateMutex(mutexAttrs *SecurityAttributes, initialOwner bool, name *uint16 } func CreateNamedPipe(name *uint16, flags uint32, pipeMode uint32, maxInstances uint32, outSize uint32, inSize uint32, defaultTimeout uint32, sa *SecurityAttributes) (handle Handle, err error) { - r0, _, e1 := syscall.Syscall9(procCreateNamedPipeW.Addr(), 8, uintptr(unsafe.Pointer(name)), uintptr(flags), uintptr(pipeMode), uintptr(maxInstances), uintptr(outSize), uintptr(inSize), uintptr(defaultTimeout), uintptr(unsafe.Pointer(sa)), 0) + r0, _, e1 := syscall.SyscallN(procCreateNamedPipeW.Addr(), uintptr(unsafe.Pointer(name)), uintptr(flags), uintptr(pipeMode), uintptr(maxInstances), uintptr(outSize), uintptr(inSize), uintptr(defaultTimeout), uintptr(unsafe.Pointer(sa))) handle = Handle(r0) if handle == InvalidHandle { err = errnoErr(e1) @@ -1802,7 +1906,7 @@ func CreateNamedPipe(name *uint16, flags uint32, pipeMode uint32, maxInstances u } func CreatePipe(readhandle *Handle, writehandle *Handle, sa *SecurityAttributes, size uint32) (err error) { - r1, _, e1 := syscall.Syscall6(procCreatePipe.Addr(), 4, uintptr(unsafe.Pointer(readhandle)), uintptr(unsafe.Pointer(writehandle)), uintptr(unsafe.Pointer(sa)), uintptr(size), 0, 0) + r1, _, e1 := syscall.SyscallN(procCreatePipe.Addr(), uintptr(unsafe.Pointer(readhandle)), uintptr(unsafe.Pointer(writehandle)), uintptr(unsafe.Pointer(sa)), uintptr(size)) if r1 == 0 { err = errnoErr(e1) } @@ -1814,7 +1918,7 @@ func CreateProcess(appName *uint16, commandLine *uint16, procSecurity *SecurityA if inheritHandles { _p0 = 1 } - r1, _, e1 := syscall.Syscall12(procCreateProcessW.Addr(), 10, uintptr(unsafe.Pointer(appName)), uintptr(unsafe.Pointer(commandLine)), uintptr(unsafe.Pointer(procSecurity)), uintptr(unsafe.Pointer(threadSecurity)), uintptr(_p0), uintptr(creationFlags), uintptr(unsafe.Pointer(env)), uintptr(unsafe.Pointer(currentDir)), uintptr(unsafe.Pointer(startupInfo)), uintptr(unsafe.Pointer(outProcInfo)), 0, 0) + r1, _, e1 := syscall.SyscallN(procCreateProcessW.Addr(), uintptr(unsafe.Pointer(appName)), uintptr(unsafe.Pointer(commandLine)), uintptr(unsafe.Pointer(procSecurity)), uintptr(unsafe.Pointer(threadSecurity)), uintptr(_p0), uintptr(creationFlags), uintptr(unsafe.Pointer(env)), uintptr(unsafe.Pointer(currentDir)), uintptr(unsafe.Pointer(startupInfo)), uintptr(unsafe.Pointer(outProcInfo))) if r1 == 0 { err = errnoErr(e1) } @@ -1822,7 +1926,7 @@ func CreateProcess(appName *uint16, commandLine *uint16, procSecurity *SecurityA } func createPseudoConsole(size uint32, in Handle, out Handle, flags uint32, pconsole *Handle) (hr error) { - r0, _, _ := syscall.Syscall6(procCreatePseudoConsole.Addr(), 5, uintptr(size), uintptr(in), uintptr(out), uintptr(flags), uintptr(unsafe.Pointer(pconsole)), 0) + r0, _, _ := syscall.SyscallN(procCreatePseudoConsole.Addr(), uintptr(size), uintptr(in), uintptr(out), uintptr(flags), uintptr(unsafe.Pointer(pconsole))) if r0 != 0 { hr = syscall.Errno(r0) } @@ -1830,7 +1934,7 @@ func createPseudoConsole(size uint32, in Handle, out Handle, flags uint32, pcons } func CreateSymbolicLink(symlinkfilename *uint16, targetfilename *uint16, flags uint32) (err error) { - r1, _, e1 := syscall.Syscall(procCreateSymbolicLinkW.Addr(), 3, uintptr(unsafe.Pointer(symlinkfilename)), uintptr(unsafe.Pointer(targetfilename)), uintptr(flags)) + r1, _, e1 := syscall.SyscallN(procCreateSymbolicLinkW.Addr(), uintptr(unsafe.Pointer(symlinkfilename)), uintptr(unsafe.Pointer(targetfilename)), uintptr(flags)) if r1&0xff == 0 { err = errnoErr(e1) } @@ -1838,7 +1942,7 @@ func CreateSymbolicLink(symlinkfilename *uint16, targetfilename *uint16, flags u } func CreateToolhelp32Snapshot(flags uint32, processId uint32) (handle Handle, err error) { - r0, _, e1 := syscall.Syscall(procCreateToolhelp32Snapshot.Addr(), 2, uintptr(flags), uintptr(processId), 0) + r0, _, e1 := syscall.SyscallN(procCreateToolhelp32Snapshot.Addr(), uintptr(flags), uintptr(processId)) handle = Handle(r0) if handle == InvalidHandle { err = errnoErr(e1) @@ -1847,7 +1951,7 @@ func CreateToolhelp32Snapshot(flags uint32, processId uint32) (handle Handle, er } func DefineDosDevice(flags uint32, deviceName *uint16, targetPath *uint16) (err error) { - r1, _, e1 := syscall.Syscall(procDefineDosDeviceW.Addr(), 3, uintptr(flags), uintptr(unsafe.Pointer(deviceName)), uintptr(unsafe.Pointer(targetPath))) + r1, _, e1 := syscall.SyscallN(procDefineDosDeviceW.Addr(), uintptr(flags), uintptr(unsafe.Pointer(deviceName)), uintptr(unsafe.Pointer(targetPath))) if r1 == 0 { err = errnoErr(e1) } @@ -1855,7 +1959,7 @@ func DefineDosDevice(flags uint32, deviceName *uint16, targetPath *uint16) (err } func DeleteFile(path *uint16) (err error) { - r1, _, e1 := syscall.Syscall(procDeleteFileW.Addr(), 1, uintptr(unsafe.Pointer(path)), 0, 0) + r1, _, e1 := syscall.SyscallN(procDeleteFileW.Addr(), uintptr(unsafe.Pointer(path))) if r1 == 0 { err = errnoErr(e1) } @@ -1863,12 +1967,12 @@ func DeleteFile(path *uint16) (err error) { } func deleteProcThreadAttributeList(attrlist *ProcThreadAttributeList) { - syscall.Syscall(procDeleteProcThreadAttributeList.Addr(), 1, uintptr(unsafe.Pointer(attrlist)), 0, 0) + syscall.SyscallN(procDeleteProcThreadAttributeList.Addr(), uintptr(unsafe.Pointer(attrlist))) return } func DeleteVolumeMountPoint(volumeMountPoint *uint16) (err error) { - r1, _, e1 := syscall.Syscall(procDeleteVolumeMountPointW.Addr(), 1, uintptr(unsafe.Pointer(volumeMountPoint)), 0, 0) + r1, _, e1 := syscall.SyscallN(procDeleteVolumeMountPointW.Addr(), uintptr(unsafe.Pointer(volumeMountPoint))) if r1 == 0 { err = errnoErr(e1) } @@ -1876,7 +1980,7 @@ func DeleteVolumeMountPoint(volumeMountPoint *uint16) (err error) { } func DeviceIoControl(handle Handle, ioControlCode uint32, inBuffer *byte, inBufferSize uint32, outBuffer *byte, outBufferSize uint32, bytesReturned *uint32, overlapped *Overlapped) (err error) { - r1, _, e1 := syscall.Syscall9(procDeviceIoControl.Addr(), 8, uintptr(handle), uintptr(ioControlCode), uintptr(unsafe.Pointer(inBuffer)), uintptr(inBufferSize), uintptr(unsafe.Pointer(outBuffer)), uintptr(outBufferSize), uintptr(unsafe.Pointer(bytesReturned)), uintptr(unsafe.Pointer(overlapped)), 0) + r1, _, e1 := syscall.SyscallN(procDeviceIoControl.Addr(), uintptr(handle), uintptr(ioControlCode), uintptr(unsafe.Pointer(inBuffer)), uintptr(inBufferSize), uintptr(unsafe.Pointer(outBuffer)), uintptr(outBufferSize), uintptr(unsafe.Pointer(bytesReturned)), uintptr(unsafe.Pointer(overlapped))) if r1 == 0 { err = errnoErr(e1) } @@ -1884,7 +1988,7 @@ func DeviceIoControl(handle Handle, ioControlCode uint32, inBuffer *byte, inBuff } func DisconnectNamedPipe(pipe Handle) (err error) { - r1, _, e1 := syscall.Syscall(procDisconnectNamedPipe.Addr(), 1, uintptr(pipe), 0, 0) + r1, _, e1 := syscall.SyscallN(procDisconnectNamedPipe.Addr(), uintptr(pipe)) if r1 == 0 { err = errnoErr(e1) } @@ -1896,7 +2000,7 @@ func DuplicateHandle(hSourceProcessHandle Handle, hSourceHandle Handle, hTargetP if bInheritHandle { _p0 = 1 } - r1, _, e1 := syscall.Syscall9(procDuplicateHandle.Addr(), 7, uintptr(hSourceProcessHandle), uintptr(hSourceHandle), uintptr(hTargetProcessHandle), uintptr(unsafe.Pointer(lpTargetHandle)), uintptr(dwDesiredAccess), uintptr(_p0), uintptr(dwOptions), 0, 0) + r1, _, e1 := syscall.SyscallN(procDuplicateHandle.Addr(), uintptr(hSourceProcessHandle), uintptr(hSourceHandle), uintptr(hTargetProcessHandle), uintptr(unsafe.Pointer(lpTargetHandle)), uintptr(dwDesiredAccess), uintptr(_p0), uintptr(dwOptions)) if r1 == 0 { err = errnoErr(e1) } @@ -1904,7 +2008,7 @@ func DuplicateHandle(hSourceProcessHandle Handle, hSourceHandle Handle, hTargetP } func EscapeCommFunction(handle Handle, dwFunc uint32) (err error) { - r1, _, e1 := syscall.Syscall(procEscapeCommFunction.Addr(), 2, uintptr(handle), uintptr(dwFunc), 0) + r1, _, e1 := syscall.SyscallN(procEscapeCommFunction.Addr(), uintptr(handle), uintptr(dwFunc)) if r1 == 0 { err = errnoErr(e1) } @@ -1912,12 +2016,12 @@ func EscapeCommFunction(handle Handle, dwFunc uint32) (err error) { } func ExitProcess(exitcode uint32) { - syscall.Syscall(procExitProcess.Addr(), 1, uintptr(exitcode), 0, 0) + syscall.SyscallN(procExitProcess.Addr(), uintptr(exitcode)) return } func ExpandEnvironmentStrings(src *uint16, dst *uint16, size uint32) (n uint32, err error) { - r0, _, e1 := syscall.Syscall(procExpandEnvironmentStringsW.Addr(), 3, uintptr(unsafe.Pointer(src)), uintptr(unsafe.Pointer(dst)), uintptr(size)) + r0, _, e1 := syscall.SyscallN(procExpandEnvironmentStringsW.Addr(), uintptr(unsafe.Pointer(src)), uintptr(unsafe.Pointer(dst)), uintptr(size)) n = uint32(r0) if n == 0 { err = errnoErr(e1) @@ -1926,7 +2030,7 @@ func ExpandEnvironmentStrings(src *uint16, dst *uint16, size uint32) (n uint32, } func FindClose(handle Handle) (err error) { - r1, _, e1 := syscall.Syscall(procFindClose.Addr(), 1, uintptr(handle), 0, 0) + r1, _, e1 := syscall.SyscallN(procFindClose.Addr(), uintptr(handle)) if r1 == 0 { err = errnoErr(e1) } @@ -1934,7 +2038,7 @@ func FindClose(handle Handle) (err error) { } func FindCloseChangeNotification(handle Handle) (err error) { - r1, _, e1 := syscall.Syscall(procFindCloseChangeNotification.Addr(), 1, uintptr(handle), 0, 0) + r1, _, e1 := syscall.SyscallN(procFindCloseChangeNotification.Addr(), uintptr(handle)) if r1 == 0 { err = errnoErr(e1) } @@ -1955,7 +2059,7 @@ func _FindFirstChangeNotification(path *uint16, watchSubtree bool, notifyFilter if watchSubtree { _p1 = 1 } - r0, _, e1 := syscall.Syscall(procFindFirstChangeNotificationW.Addr(), 3, uintptr(unsafe.Pointer(path)), uintptr(_p1), uintptr(notifyFilter)) + r0, _, e1 := syscall.SyscallN(procFindFirstChangeNotificationW.Addr(), uintptr(unsafe.Pointer(path)), uintptr(_p1), uintptr(notifyFilter)) handle = Handle(r0) if handle == InvalidHandle { err = errnoErr(e1) @@ -1964,7 +2068,7 @@ func _FindFirstChangeNotification(path *uint16, watchSubtree bool, notifyFilter } func findFirstFile1(name *uint16, data *win32finddata1) (handle Handle, err error) { - r0, _, e1 := syscall.Syscall(procFindFirstFileW.Addr(), 2, uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(data)), 0) + r0, _, e1 := syscall.SyscallN(procFindFirstFileW.Addr(), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(data))) handle = Handle(r0) if handle == InvalidHandle { err = errnoErr(e1) @@ -1973,7 +2077,7 @@ func findFirstFile1(name *uint16, data *win32finddata1) (handle Handle, err erro } func FindFirstVolumeMountPoint(rootPathName *uint16, volumeMountPoint *uint16, bufferLength uint32) (handle Handle, err error) { - r0, _, e1 := syscall.Syscall(procFindFirstVolumeMountPointW.Addr(), 3, uintptr(unsafe.Pointer(rootPathName)), uintptr(unsafe.Pointer(volumeMountPoint)), uintptr(bufferLength)) + r0, _, e1 := syscall.SyscallN(procFindFirstVolumeMountPointW.Addr(), uintptr(unsafe.Pointer(rootPathName)), uintptr(unsafe.Pointer(volumeMountPoint)), uintptr(bufferLength)) handle = Handle(r0) if handle == InvalidHandle { err = errnoErr(e1) @@ -1982,7 +2086,7 @@ func FindFirstVolumeMountPoint(rootPathName *uint16, volumeMountPoint *uint16, b } func FindFirstVolume(volumeName *uint16, bufferLength uint32) (handle Handle, err error) { - r0, _, e1 := syscall.Syscall(procFindFirstVolumeW.Addr(), 2, uintptr(unsafe.Pointer(volumeName)), uintptr(bufferLength), 0) + r0, _, e1 := syscall.SyscallN(procFindFirstVolumeW.Addr(), uintptr(unsafe.Pointer(volumeName)), uintptr(bufferLength)) handle = Handle(r0) if handle == InvalidHandle { err = errnoErr(e1) @@ -1991,7 +2095,7 @@ func FindFirstVolume(volumeName *uint16, bufferLength uint32) (handle Handle, er } func FindNextChangeNotification(handle Handle) (err error) { - r1, _, e1 := syscall.Syscall(procFindNextChangeNotification.Addr(), 1, uintptr(handle), 0, 0) + r1, _, e1 := syscall.SyscallN(procFindNextChangeNotification.Addr(), uintptr(handle)) if r1 == 0 { err = errnoErr(e1) } @@ -1999,7 +2103,7 @@ func FindNextChangeNotification(handle Handle) (err error) { } func findNextFile1(handle Handle, data *win32finddata1) (err error) { - r1, _, e1 := syscall.Syscall(procFindNextFileW.Addr(), 2, uintptr(handle), uintptr(unsafe.Pointer(data)), 0) + r1, _, e1 := syscall.SyscallN(procFindNextFileW.Addr(), uintptr(handle), uintptr(unsafe.Pointer(data))) if r1 == 0 { err = errnoErr(e1) } @@ -2007,7 +2111,7 @@ func findNextFile1(handle Handle, data *win32finddata1) (err error) { } func FindNextVolumeMountPoint(findVolumeMountPoint Handle, volumeMountPoint *uint16, bufferLength uint32) (err error) { - r1, _, e1 := syscall.Syscall(procFindNextVolumeMountPointW.Addr(), 3, uintptr(findVolumeMountPoint), uintptr(unsafe.Pointer(volumeMountPoint)), uintptr(bufferLength)) + r1, _, e1 := syscall.SyscallN(procFindNextVolumeMountPointW.Addr(), uintptr(findVolumeMountPoint), uintptr(unsafe.Pointer(volumeMountPoint)), uintptr(bufferLength)) if r1 == 0 { err = errnoErr(e1) } @@ -2015,7 +2119,7 @@ func FindNextVolumeMountPoint(findVolumeMountPoint Handle, volumeMountPoint *uin } func FindNextVolume(findVolume Handle, volumeName *uint16, bufferLength uint32) (err error) { - r1, _, e1 := syscall.Syscall(procFindNextVolumeW.Addr(), 3, uintptr(findVolume), uintptr(unsafe.Pointer(volumeName)), uintptr(bufferLength)) + r1, _, e1 := syscall.SyscallN(procFindNextVolumeW.Addr(), uintptr(findVolume), uintptr(unsafe.Pointer(volumeName)), uintptr(bufferLength)) if r1 == 0 { err = errnoErr(e1) } @@ -2023,7 +2127,7 @@ func FindNextVolume(findVolume Handle, volumeName *uint16, bufferLength uint32) } func findResource(module Handle, name uintptr, resType uintptr) (resInfo Handle, err error) { - r0, _, e1 := syscall.Syscall(procFindResourceW.Addr(), 3, uintptr(module), uintptr(name), uintptr(resType)) + r0, _, e1 := syscall.SyscallN(procFindResourceW.Addr(), uintptr(module), uintptr(name), uintptr(resType)) resInfo = Handle(r0) if resInfo == 0 { err = errnoErr(e1) @@ -2032,7 +2136,7 @@ func findResource(module Handle, name uintptr, resType uintptr) (resInfo Handle, } func FindVolumeClose(findVolume Handle) (err error) { - r1, _, e1 := syscall.Syscall(procFindVolumeClose.Addr(), 1, uintptr(findVolume), 0, 0) + r1, _, e1 := syscall.SyscallN(procFindVolumeClose.Addr(), uintptr(findVolume)) if r1 == 0 { err = errnoErr(e1) } @@ -2040,7 +2144,15 @@ func FindVolumeClose(findVolume Handle) (err error) { } func FindVolumeMountPointClose(findVolumeMountPoint Handle) (err error) { - r1, _, e1 := syscall.Syscall(procFindVolumeMountPointClose.Addr(), 1, uintptr(findVolumeMountPoint), 0, 0) + r1, _, e1 := syscall.SyscallN(procFindVolumeMountPointClose.Addr(), uintptr(findVolumeMountPoint)) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func FlushConsoleInputBuffer(console Handle) (err error) { + r1, _, e1 := syscall.SyscallN(procFlushConsoleInputBuffer.Addr(), uintptr(console)) if r1 == 0 { err = errnoErr(e1) } @@ -2048,7 +2160,7 @@ func FindVolumeMountPointClose(findVolumeMountPoint Handle) (err error) { } func FlushFileBuffers(handle Handle) (err error) { - r1, _, e1 := syscall.Syscall(procFlushFileBuffers.Addr(), 1, uintptr(handle), 0, 0) + r1, _, e1 := syscall.SyscallN(procFlushFileBuffers.Addr(), uintptr(handle)) if r1 == 0 { err = errnoErr(e1) } @@ -2056,7 +2168,7 @@ func FlushFileBuffers(handle Handle) (err error) { } func FlushViewOfFile(addr uintptr, length uintptr) (err error) { - r1, _, e1 := syscall.Syscall(procFlushViewOfFile.Addr(), 2, uintptr(addr), uintptr(length), 0) + r1, _, e1 := syscall.SyscallN(procFlushViewOfFile.Addr(), uintptr(addr), uintptr(length)) if r1 == 0 { err = errnoErr(e1) } @@ -2068,7 +2180,7 @@ func FormatMessage(flags uint32, msgsrc uintptr, msgid uint32, langid uint32, bu if len(buf) > 0 { _p0 = &buf[0] } - r0, _, e1 := syscall.Syscall9(procFormatMessageW.Addr(), 7, uintptr(flags), uintptr(msgsrc), uintptr(msgid), uintptr(langid), uintptr(unsafe.Pointer(_p0)), uintptr(len(buf)), uintptr(unsafe.Pointer(args)), 0, 0) + r0, _, e1 := syscall.SyscallN(procFormatMessageW.Addr(), uintptr(flags), uintptr(msgsrc), uintptr(msgid), uintptr(langid), uintptr(unsafe.Pointer(_p0)), uintptr(len(buf)), uintptr(unsafe.Pointer(args))) n = uint32(r0) if n == 0 { err = errnoErr(e1) @@ -2077,7 +2189,7 @@ func FormatMessage(flags uint32, msgsrc uintptr, msgid uint32, langid uint32, bu } func FreeEnvironmentStrings(envs *uint16) (err error) { - r1, _, e1 := syscall.Syscall(procFreeEnvironmentStringsW.Addr(), 1, uintptr(unsafe.Pointer(envs)), 0, 0) + r1, _, e1 := syscall.SyscallN(procFreeEnvironmentStringsW.Addr(), uintptr(unsafe.Pointer(envs))) if r1 == 0 { err = errnoErr(e1) } @@ -2085,7 +2197,7 @@ func FreeEnvironmentStrings(envs *uint16) (err error) { } func FreeLibrary(handle Handle) (err error) { - r1, _, e1 := syscall.Syscall(procFreeLibrary.Addr(), 1, uintptr(handle), 0, 0) + r1, _, e1 := syscall.SyscallN(procFreeLibrary.Addr(), uintptr(handle)) if r1 == 0 { err = errnoErr(e1) } @@ -2093,7 +2205,7 @@ func FreeLibrary(handle Handle) (err error) { } func GenerateConsoleCtrlEvent(ctrlEvent uint32, processGroupID uint32) (err error) { - r1, _, e1 := syscall.Syscall(procGenerateConsoleCtrlEvent.Addr(), 2, uintptr(ctrlEvent), uintptr(processGroupID), 0) + r1, _, e1 := syscall.SyscallN(procGenerateConsoleCtrlEvent.Addr(), uintptr(ctrlEvent), uintptr(processGroupID)) if r1 == 0 { err = errnoErr(e1) } @@ -2101,19 +2213,19 @@ func GenerateConsoleCtrlEvent(ctrlEvent uint32, processGroupID uint32) (err erro } func GetACP() (acp uint32) { - r0, _, _ := syscall.Syscall(procGetACP.Addr(), 0, 0, 0, 0) + r0, _, _ := syscall.SyscallN(procGetACP.Addr()) acp = uint32(r0) return } func GetActiveProcessorCount(groupNumber uint16) (ret uint32) { - r0, _, _ := syscall.Syscall(procGetActiveProcessorCount.Addr(), 1, uintptr(groupNumber), 0, 0) + r0, _, _ := syscall.SyscallN(procGetActiveProcessorCount.Addr(), uintptr(groupNumber)) ret = uint32(r0) return } func GetCommModemStatus(handle Handle, lpModemStat *uint32) (err error) { - r1, _, e1 := syscall.Syscall(procGetCommModemStatus.Addr(), 2, uintptr(handle), uintptr(unsafe.Pointer(lpModemStat)), 0) + r1, _, e1 := syscall.SyscallN(procGetCommModemStatus.Addr(), uintptr(handle), uintptr(unsafe.Pointer(lpModemStat))) if r1 == 0 { err = errnoErr(e1) } @@ -2121,7 +2233,7 @@ func GetCommModemStatus(handle Handle, lpModemStat *uint32) (err error) { } func GetCommState(handle Handle, lpDCB *DCB) (err error) { - r1, _, e1 := syscall.Syscall(procGetCommState.Addr(), 2, uintptr(handle), uintptr(unsafe.Pointer(lpDCB)), 0) + r1, _, e1 := syscall.SyscallN(procGetCommState.Addr(), uintptr(handle), uintptr(unsafe.Pointer(lpDCB))) if r1 == 0 { err = errnoErr(e1) } @@ -2129,7 +2241,7 @@ func GetCommState(handle Handle, lpDCB *DCB) (err error) { } func GetCommTimeouts(handle Handle, timeouts *CommTimeouts) (err error) { - r1, _, e1 := syscall.Syscall(procGetCommTimeouts.Addr(), 2, uintptr(handle), uintptr(unsafe.Pointer(timeouts)), 0) + r1, _, e1 := syscall.SyscallN(procGetCommTimeouts.Addr(), uintptr(handle), uintptr(unsafe.Pointer(timeouts))) if r1 == 0 { err = errnoErr(e1) } @@ -2137,13 +2249,13 @@ func GetCommTimeouts(handle Handle, timeouts *CommTimeouts) (err error) { } func GetCommandLine() (cmd *uint16) { - r0, _, _ := syscall.Syscall(procGetCommandLineW.Addr(), 0, 0, 0, 0) + r0, _, _ := syscall.SyscallN(procGetCommandLineW.Addr()) cmd = (*uint16)(unsafe.Pointer(r0)) return } func GetComputerNameEx(nametype uint32, buf *uint16, n *uint32) (err error) { - r1, _, e1 := syscall.Syscall(procGetComputerNameExW.Addr(), 3, uintptr(nametype), uintptr(unsafe.Pointer(buf)), uintptr(unsafe.Pointer(n))) + r1, _, e1 := syscall.SyscallN(procGetComputerNameExW.Addr(), uintptr(nametype), uintptr(unsafe.Pointer(buf)), uintptr(unsafe.Pointer(n))) if r1 == 0 { err = errnoErr(e1) } @@ -2151,23 +2263,41 @@ func GetComputerNameEx(nametype uint32, buf *uint16, n *uint32) (err error) { } func GetComputerName(buf *uint16, n *uint32) (err error) { - r1, _, e1 := syscall.Syscall(procGetComputerNameW.Addr(), 2, uintptr(unsafe.Pointer(buf)), uintptr(unsafe.Pointer(n)), 0) + r1, _, e1 := syscall.SyscallN(procGetComputerNameW.Addr(), uintptr(unsafe.Pointer(buf)), uintptr(unsafe.Pointer(n))) if r1 == 0 { err = errnoErr(e1) } return } +func GetConsoleCP() (cp uint32, err error) { + r0, _, e1 := syscall.SyscallN(procGetConsoleCP.Addr()) + cp = uint32(r0) + if cp == 0 { + err = errnoErr(e1) + } + return +} + func GetConsoleMode(console Handle, mode *uint32) (err error) { - r1, _, e1 := syscall.Syscall(procGetConsoleMode.Addr(), 2, uintptr(console), uintptr(unsafe.Pointer(mode)), 0) + r1, _, e1 := syscall.SyscallN(procGetConsoleMode.Addr(), uintptr(console), uintptr(unsafe.Pointer(mode))) if r1 == 0 { err = errnoErr(e1) } return } +func GetConsoleOutputCP() (cp uint32, err error) { + r0, _, e1 := syscall.SyscallN(procGetConsoleOutputCP.Addr()) + cp = uint32(r0) + if cp == 0 { + err = errnoErr(e1) + } + return +} + func GetConsoleScreenBufferInfo(console Handle, info *ConsoleScreenBufferInfo) (err error) { - r1, _, e1 := syscall.Syscall(procGetConsoleScreenBufferInfo.Addr(), 2, uintptr(console), uintptr(unsafe.Pointer(info)), 0) + r1, _, e1 := syscall.SyscallN(procGetConsoleScreenBufferInfo.Addr(), uintptr(console), uintptr(unsafe.Pointer(info))) if r1 == 0 { err = errnoErr(e1) } @@ -2175,7 +2305,7 @@ func GetConsoleScreenBufferInfo(console Handle, info *ConsoleScreenBufferInfo) ( } func GetCurrentDirectory(buflen uint32, buf *uint16) (n uint32, err error) { - r0, _, e1 := syscall.Syscall(procGetCurrentDirectoryW.Addr(), 2, uintptr(buflen), uintptr(unsafe.Pointer(buf)), 0) + r0, _, e1 := syscall.SyscallN(procGetCurrentDirectoryW.Addr(), uintptr(buflen), uintptr(unsafe.Pointer(buf))) n = uint32(r0) if n == 0 { err = errnoErr(e1) @@ -2184,19 +2314,19 @@ func GetCurrentDirectory(buflen uint32, buf *uint16) (n uint32, err error) { } func GetCurrentProcessId() (pid uint32) { - r0, _, _ := syscall.Syscall(procGetCurrentProcessId.Addr(), 0, 0, 0, 0) + r0, _, _ := syscall.SyscallN(procGetCurrentProcessId.Addr()) pid = uint32(r0) return } func GetCurrentThreadId() (id uint32) { - r0, _, _ := syscall.Syscall(procGetCurrentThreadId.Addr(), 0, 0, 0, 0) + r0, _, _ := syscall.SyscallN(procGetCurrentThreadId.Addr()) id = uint32(r0) return } func GetDiskFreeSpaceEx(directoryName *uint16, freeBytesAvailableToCaller *uint64, totalNumberOfBytes *uint64, totalNumberOfFreeBytes *uint64) (err error) { - r1, _, e1 := syscall.Syscall6(procGetDiskFreeSpaceExW.Addr(), 4, uintptr(unsafe.Pointer(directoryName)), uintptr(unsafe.Pointer(freeBytesAvailableToCaller)), uintptr(unsafe.Pointer(totalNumberOfBytes)), uintptr(unsafe.Pointer(totalNumberOfFreeBytes)), 0, 0) + r1, _, e1 := syscall.SyscallN(procGetDiskFreeSpaceExW.Addr(), uintptr(unsafe.Pointer(directoryName)), uintptr(unsafe.Pointer(freeBytesAvailableToCaller)), uintptr(unsafe.Pointer(totalNumberOfBytes)), uintptr(unsafe.Pointer(totalNumberOfFreeBytes))) if r1 == 0 { err = errnoErr(e1) } @@ -2204,13 +2334,13 @@ func GetDiskFreeSpaceEx(directoryName *uint16, freeBytesAvailableToCaller *uint6 } func GetDriveType(rootPathName *uint16) (driveType uint32) { - r0, _, _ := syscall.Syscall(procGetDriveTypeW.Addr(), 1, uintptr(unsafe.Pointer(rootPathName)), 0, 0) + r0, _, _ := syscall.SyscallN(procGetDriveTypeW.Addr(), uintptr(unsafe.Pointer(rootPathName))) driveType = uint32(r0) return } func GetEnvironmentStrings() (envs *uint16, err error) { - r0, _, e1 := syscall.Syscall(procGetEnvironmentStringsW.Addr(), 0, 0, 0, 0) + r0, _, e1 := syscall.SyscallN(procGetEnvironmentStringsW.Addr()) envs = (*uint16)(unsafe.Pointer(r0)) if envs == nil { err = errnoErr(e1) @@ -2219,7 +2349,7 @@ func GetEnvironmentStrings() (envs *uint16, err error) { } func GetEnvironmentVariable(name *uint16, buffer *uint16, size uint32) (n uint32, err error) { - r0, _, e1 := syscall.Syscall(procGetEnvironmentVariableW.Addr(), 3, uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(buffer)), uintptr(size)) + r0, _, e1 := syscall.SyscallN(procGetEnvironmentVariableW.Addr(), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(buffer)), uintptr(size)) n = uint32(r0) if n == 0 { err = errnoErr(e1) @@ -2228,7 +2358,7 @@ func GetEnvironmentVariable(name *uint16, buffer *uint16, size uint32) (n uint32 } func GetExitCodeProcess(handle Handle, exitcode *uint32) (err error) { - r1, _, e1 := syscall.Syscall(procGetExitCodeProcess.Addr(), 2, uintptr(handle), uintptr(unsafe.Pointer(exitcode)), 0) + r1, _, e1 := syscall.SyscallN(procGetExitCodeProcess.Addr(), uintptr(handle), uintptr(unsafe.Pointer(exitcode))) if r1 == 0 { err = errnoErr(e1) } @@ -2236,7 +2366,7 @@ func GetExitCodeProcess(handle Handle, exitcode *uint32) (err error) { } func GetFileAttributesEx(name *uint16, level uint32, info *byte) (err error) { - r1, _, e1 := syscall.Syscall(procGetFileAttributesExW.Addr(), 3, uintptr(unsafe.Pointer(name)), uintptr(level), uintptr(unsafe.Pointer(info))) + r1, _, e1 := syscall.SyscallN(procGetFileAttributesExW.Addr(), uintptr(unsafe.Pointer(name)), uintptr(level), uintptr(unsafe.Pointer(info))) if r1 == 0 { err = errnoErr(e1) } @@ -2244,7 +2374,7 @@ func GetFileAttributesEx(name *uint16, level uint32, info *byte) (err error) { } func GetFileAttributes(name *uint16) (attrs uint32, err error) { - r0, _, e1 := syscall.Syscall(procGetFileAttributesW.Addr(), 1, uintptr(unsafe.Pointer(name)), 0, 0) + r0, _, e1 := syscall.SyscallN(procGetFileAttributesW.Addr(), uintptr(unsafe.Pointer(name))) attrs = uint32(r0) if attrs == INVALID_FILE_ATTRIBUTES { err = errnoErr(e1) @@ -2253,7 +2383,7 @@ func GetFileAttributes(name *uint16) (attrs uint32, err error) { } func GetFileInformationByHandle(handle Handle, data *ByHandleFileInformation) (err error) { - r1, _, e1 := syscall.Syscall(procGetFileInformationByHandle.Addr(), 2, uintptr(handle), uintptr(unsafe.Pointer(data)), 0) + r1, _, e1 := syscall.SyscallN(procGetFileInformationByHandle.Addr(), uintptr(handle), uintptr(unsafe.Pointer(data))) if r1 == 0 { err = errnoErr(e1) } @@ -2261,7 +2391,7 @@ func GetFileInformationByHandle(handle Handle, data *ByHandleFileInformation) (e } func GetFileInformationByHandleEx(handle Handle, class uint32, outBuffer *byte, outBufferLen uint32) (err error) { - r1, _, e1 := syscall.Syscall6(procGetFileInformationByHandleEx.Addr(), 4, uintptr(handle), uintptr(class), uintptr(unsafe.Pointer(outBuffer)), uintptr(outBufferLen), 0, 0) + r1, _, e1 := syscall.SyscallN(procGetFileInformationByHandleEx.Addr(), uintptr(handle), uintptr(class), uintptr(unsafe.Pointer(outBuffer)), uintptr(outBufferLen)) if r1 == 0 { err = errnoErr(e1) } @@ -2269,7 +2399,7 @@ func GetFileInformationByHandleEx(handle Handle, class uint32, outBuffer *byte, } func GetFileTime(handle Handle, ctime *Filetime, atime *Filetime, wtime *Filetime) (err error) { - r1, _, e1 := syscall.Syscall6(procGetFileTime.Addr(), 4, uintptr(handle), uintptr(unsafe.Pointer(ctime)), uintptr(unsafe.Pointer(atime)), uintptr(unsafe.Pointer(wtime)), 0, 0) + r1, _, e1 := syscall.SyscallN(procGetFileTime.Addr(), uintptr(handle), uintptr(unsafe.Pointer(ctime)), uintptr(unsafe.Pointer(atime)), uintptr(unsafe.Pointer(wtime))) if r1 == 0 { err = errnoErr(e1) } @@ -2277,7 +2407,7 @@ func GetFileTime(handle Handle, ctime *Filetime, atime *Filetime, wtime *Filetim } func GetFileType(filehandle Handle) (n uint32, err error) { - r0, _, e1 := syscall.Syscall(procGetFileType.Addr(), 1, uintptr(filehandle), 0, 0) + r0, _, e1 := syscall.SyscallN(procGetFileType.Addr(), uintptr(filehandle)) n = uint32(r0) if n == 0 { err = errnoErr(e1) @@ -2286,7 +2416,7 @@ func GetFileType(filehandle Handle) (n uint32, err error) { } func GetFinalPathNameByHandle(file Handle, filePath *uint16, filePathSize uint32, flags uint32) (n uint32, err error) { - r0, _, e1 := syscall.Syscall6(procGetFinalPathNameByHandleW.Addr(), 4, uintptr(file), uintptr(unsafe.Pointer(filePath)), uintptr(filePathSize), uintptr(flags), 0, 0) + r0, _, e1 := syscall.SyscallN(procGetFinalPathNameByHandleW.Addr(), uintptr(file), uintptr(unsafe.Pointer(filePath)), uintptr(filePathSize), uintptr(flags)) n = uint32(r0) if n == 0 { err = errnoErr(e1) @@ -2295,7 +2425,7 @@ func GetFinalPathNameByHandle(file Handle, filePath *uint16, filePathSize uint32 } func GetFullPathName(path *uint16, buflen uint32, buf *uint16, fname **uint16) (n uint32, err error) { - r0, _, e1 := syscall.Syscall6(procGetFullPathNameW.Addr(), 4, uintptr(unsafe.Pointer(path)), uintptr(buflen), uintptr(unsafe.Pointer(buf)), uintptr(unsafe.Pointer(fname)), 0, 0) + r0, _, e1 := syscall.SyscallN(procGetFullPathNameW.Addr(), uintptr(unsafe.Pointer(path)), uintptr(buflen), uintptr(unsafe.Pointer(buf)), uintptr(unsafe.Pointer(fname))) n = uint32(r0) if n == 0 { err = errnoErr(e1) @@ -2304,13 +2434,13 @@ func GetFullPathName(path *uint16, buflen uint32, buf *uint16, fname **uint16) ( } func GetLargePageMinimum() (size uintptr) { - r0, _, _ := syscall.Syscall(procGetLargePageMinimum.Addr(), 0, 0, 0, 0) + r0, _, _ := syscall.SyscallN(procGetLargePageMinimum.Addr()) size = uintptr(r0) return } func GetLastError() (lasterr error) { - r0, _, _ := syscall.Syscall(procGetLastError.Addr(), 0, 0, 0, 0) + r0, _, _ := syscall.SyscallN(procGetLastError.Addr()) if r0 != 0 { lasterr = syscall.Errno(r0) } @@ -2318,7 +2448,7 @@ func GetLastError() (lasterr error) { } func GetLogicalDriveStrings(bufferLength uint32, buffer *uint16) (n uint32, err error) { - r0, _, e1 := syscall.Syscall(procGetLogicalDriveStringsW.Addr(), 2, uintptr(bufferLength), uintptr(unsafe.Pointer(buffer)), 0) + r0, _, e1 := syscall.SyscallN(procGetLogicalDriveStringsW.Addr(), uintptr(bufferLength), uintptr(unsafe.Pointer(buffer))) n = uint32(r0) if n == 0 { err = errnoErr(e1) @@ -2327,7 +2457,7 @@ func GetLogicalDriveStrings(bufferLength uint32, buffer *uint16) (n uint32, err } func GetLogicalDrives() (drivesBitMask uint32, err error) { - r0, _, e1 := syscall.Syscall(procGetLogicalDrives.Addr(), 0, 0, 0, 0) + r0, _, e1 := syscall.SyscallN(procGetLogicalDrives.Addr()) drivesBitMask = uint32(r0) if drivesBitMask == 0 { err = errnoErr(e1) @@ -2336,7 +2466,7 @@ func GetLogicalDrives() (drivesBitMask uint32, err error) { } func GetLongPathName(path *uint16, buf *uint16, buflen uint32) (n uint32, err error) { - r0, _, e1 := syscall.Syscall(procGetLongPathNameW.Addr(), 3, uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(buf)), uintptr(buflen)) + r0, _, e1 := syscall.SyscallN(procGetLongPathNameW.Addr(), uintptr(unsafe.Pointer(path)), uintptr(unsafe.Pointer(buf)), uintptr(buflen)) n = uint32(r0) if n == 0 { err = errnoErr(e1) @@ -2345,13 +2475,13 @@ func GetLongPathName(path *uint16, buf *uint16, buflen uint32) (n uint32, err er } func GetMaximumProcessorCount(groupNumber uint16) (ret uint32) { - r0, _, _ := syscall.Syscall(procGetMaximumProcessorCount.Addr(), 1, uintptr(groupNumber), 0, 0) + r0, _, _ := syscall.SyscallN(procGetMaximumProcessorCount.Addr(), uintptr(groupNumber)) ret = uint32(r0) return } func GetModuleFileName(module Handle, filename *uint16, size uint32) (n uint32, err error) { - r0, _, e1 := syscall.Syscall(procGetModuleFileNameW.Addr(), 3, uintptr(module), uintptr(unsafe.Pointer(filename)), uintptr(size)) + r0, _, e1 := syscall.SyscallN(procGetModuleFileNameW.Addr(), uintptr(module), uintptr(unsafe.Pointer(filename)), uintptr(size)) n = uint32(r0) if n == 0 { err = errnoErr(e1) @@ -2360,7 +2490,15 @@ func GetModuleFileName(module Handle, filename *uint16, size uint32) (n uint32, } func GetModuleHandleEx(flags uint32, moduleName *uint16, module *Handle) (err error) { - r1, _, e1 := syscall.Syscall(procGetModuleHandleExW.Addr(), 3, uintptr(flags), uintptr(unsafe.Pointer(moduleName)), uintptr(unsafe.Pointer(module))) + r1, _, e1 := syscall.SyscallN(procGetModuleHandleExW.Addr(), uintptr(flags), uintptr(unsafe.Pointer(moduleName)), uintptr(unsafe.Pointer(module))) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func GetNamedPipeClientProcessId(pipe Handle, clientProcessID *uint32) (err error) { + r1, _, e1 := syscall.SyscallN(procGetNamedPipeClientProcessId.Addr(), uintptr(pipe), uintptr(unsafe.Pointer(clientProcessID))) if r1 == 0 { err = errnoErr(e1) } @@ -2368,7 +2506,7 @@ func GetModuleHandleEx(flags uint32, moduleName *uint16, module *Handle) (err er } func GetNamedPipeHandleState(pipe Handle, state *uint32, curInstances *uint32, maxCollectionCount *uint32, collectDataTimeout *uint32, userName *uint16, maxUserNameSize uint32) (err error) { - r1, _, e1 := syscall.Syscall9(procGetNamedPipeHandleStateW.Addr(), 7, uintptr(pipe), uintptr(unsafe.Pointer(state)), uintptr(unsafe.Pointer(curInstances)), uintptr(unsafe.Pointer(maxCollectionCount)), uintptr(unsafe.Pointer(collectDataTimeout)), uintptr(unsafe.Pointer(userName)), uintptr(maxUserNameSize), 0, 0) + r1, _, e1 := syscall.SyscallN(procGetNamedPipeHandleStateW.Addr(), uintptr(pipe), uintptr(unsafe.Pointer(state)), uintptr(unsafe.Pointer(curInstances)), uintptr(unsafe.Pointer(maxCollectionCount)), uintptr(unsafe.Pointer(collectDataTimeout)), uintptr(unsafe.Pointer(userName)), uintptr(maxUserNameSize)) if r1 == 0 { err = errnoErr(e1) } @@ -2376,7 +2514,23 @@ func GetNamedPipeHandleState(pipe Handle, state *uint32, curInstances *uint32, m } func GetNamedPipeInfo(pipe Handle, flags *uint32, outSize *uint32, inSize *uint32, maxInstances *uint32) (err error) { - r1, _, e1 := syscall.Syscall6(procGetNamedPipeInfo.Addr(), 5, uintptr(pipe), uintptr(unsafe.Pointer(flags)), uintptr(unsafe.Pointer(outSize)), uintptr(unsafe.Pointer(inSize)), uintptr(unsafe.Pointer(maxInstances)), 0) + r1, _, e1 := syscall.SyscallN(procGetNamedPipeInfo.Addr(), uintptr(pipe), uintptr(unsafe.Pointer(flags)), uintptr(unsafe.Pointer(outSize)), uintptr(unsafe.Pointer(inSize)), uintptr(unsafe.Pointer(maxInstances))) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func GetNamedPipeServerProcessId(pipe Handle, serverProcessID *uint32) (err error) { + r1, _, e1 := syscall.SyscallN(procGetNamedPipeServerProcessId.Addr(), uintptr(pipe), uintptr(unsafe.Pointer(serverProcessID))) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func GetNumberOfConsoleInputEvents(console Handle, numevents *uint32) (err error) { + r1, _, e1 := syscall.SyscallN(procGetNumberOfConsoleInputEvents.Addr(), uintptr(console), uintptr(unsafe.Pointer(numevents))) if r1 == 0 { err = errnoErr(e1) } @@ -2388,7 +2542,7 @@ func GetOverlappedResult(handle Handle, overlapped *Overlapped, done *uint32, wa if wait { _p0 = 1 } - r1, _, e1 := syscall.Syscall6(procGetOverlappedResult.Addr(), 4, uintptr(handle), uintptr(unsafe.Pointer(overlapped)), uintptr(unsafe.Pointer(done)), uintptr(_p0), 0, 0) + r1, _, e1 := syscall.SyscallN(procGetOverlappedResult.Addr(), uintptr(handle), uintptr(unsafe.Pointer(overlapped)), uintptr(unsafe.Pointer(done)), uintptr(_p0)) if r1 == 0 { err = errnoErr(e1) } @@ -2396,7 +2550,7 @@ func GetOverlappedResult(handle Handle, overlapped *Overlapped, done *uint32, wa } func GetPriorityClass(process Handle) (ret uint32, err error) { - r0, _, e1 := syscall.Syscall(procGetPriorityClass.Addr(), 1, uintptr(process), 0, 0) + r0, _, e1 := syscall.SyscallN(procGetPriorityClass.Addr(), uintptr(process)) ret = uint32(r0) if ret == 0 { err = errnoErr(e1) @@ -2414,7 +2568,7 @@ func GetProcAddress(module Handle, procname string) (proc uintptr, err error) { } func _GetProcAddress(module Handle, procname *byte) (proc uintptr, err error) { - r0, _, e1 := syscall.Syscall(procGetProcAddress.Addr(), 2, uintptr(module), uintptr(unsafe.Pointer(procname)), 0) + r0, _, e1 := syscall.SyscallN(procGetProcAddress.Addr(), uintptr(module), uintptr(unsafe.Pointer(procname))) proc = uintptr(r0) if proc == 0 { err = errnoErr(e1) @@ -2423,7 +2577,7 @@ func _GetProcAddress(module Handle, procname *byte) (proc uintptr, err error) { } func GetProcessId(process Handle) (id uint32, err error) { - r0, _, e1 := syscall.Syscall(procGetProcessId.Addr(), 1, uintptr(process), 0, 0) + r0, _, e1 := syscall.SyscallN(procGetProcessId.Addr(), uintptr(process)) id = uint32(r0) if id == 0 { err = errnoErr(e1) @@ -2432,7 +2586,7 @@ func GetProcessId(process Handle) (id uint32, err error) { } func getProcessPreferredUILanguages(flags uint32, numLanguages *uint32, buf *uint16, bufSize *uint32) (err error) { - r1, _, e1 := syscall.Syscall6(procGetProcessPreferredUILanguages.Addr(), 4, uintptr(flags), uintptr(unsafe.Pointer(numLanguages)), uintptr(unsafe.Pointer(buf)), uintptr(unsafe.Pointer(bufSize)), 0, 0) + r1, _, e1 := syscall.SyscallN(procGetProcessPreferredUILanguages.Addr(), uintptr(flags), uintptr(unsafe.Pointer(numLanguages)), uintptr(unsafe.Pointer(buf)), uintptr(unsafe.Pointer(bufSize))) if r1 == 0 { err = errnoErr(e1) } @@ -2440,7 +2594,7 @@ func getProcessPreferredUILanguages(flags uint32, numLanguages *uint32, buf *uin } func GetProcessShutdownParameters(level *uint32, flags *uint32) (err error) { - r1, _, e1 := syscall.Syscall(procGetProcessShutdownParameters.Addr(), 2, uintptr(unsafe.Pointer(level)), uintptr(unsafe.Pointer(flags)), 0) + r1, _, e1 := syscall.SyscallN(procGetProcessShutdownParameters.Addr(), uintptr(unsafe.Pointer(level)), uintptr(unsafe.Pointer(flags))) if r1 == 0 { err = errnoErr(e1) } @@ -2448,7 +2602,7 @@ func GetProcessShutdownParameters(level *uint32, flags *uint32) (err error) { } func GetProcessTimes(handle Handle, creationTime *Filetime, exitTime *Filetime, kernelTime *Filetime, userTime *Filetime) (err error) { - r1, _, e1 := syscall.Syscall6(procGetProcessTimes.Addr(), 5, uintptr(handle), uintptr(unsafe.Pointer(creationTime)), uintptr(unsafe.Pointer(exitTime)), uintptr(unsafe.Pointer(kernelTime)), uintptr(unsafe.Pointer(userTime)), 0) + r1, _, e1 := syscall.SyscallN(procGetProcessTimes.Addr(), uintptr(handle), uintptr(unsafe.Pointer(creationTime)), uintptr(unsafe.Pointer(exitTime)), uintptr(unsafe.Pointer(kernelTime)), uintptr(unsafe.Pointer(userTime))) if r1 == 0 { err = errnoErr(e1) } @@ -2456,12 +2610,12 @@ func GetProcessTimes(handle Handle, creationTime *Filetime, exitTime *Filetime, } func GetProcessWorkingSetSizeEx(hProcess Handle, lpMinimumWorkingSetSize *uintptr, lpMaximumWorkingSetSize *uintptr, flags *uint32) { - syscall.Syscall6(procGetProcessWorkingSetSizeEx.Addr(), 4, uintptr(hProcess), uintptr(unsafe.Pointer(lpMinimumWorkingSetSize)), uintptr(unsafe.Pointer(lpMaximumWorkingSetSize)), uintptr(unsafe.Pointer(flags)), 0, 0) + syscall.SyscallN(procGetProcessWorkingSetSizeEx.Addr(), uintptr(hProcess), uintptr(unsafe.Pointer(lpMinimumWorkingSetSize)), uintptr(unsafe.Pointer(lpMaximumWorkingSetSize)), uintptr(unsafe.Pointer(flags))) return } func GetQueuedCompletionStatus(cphandle Handle, qty *uint32, key *uintptr, overlapped **Overlapped, timeout uint32) (err error) { - r1, _, e1 := syscall.Syscall6(procGetQueuedCompletionStatus.Addr(), 5, uintptr(cphandle), uintptr(unsafe.Pointer(qty)), uintptr(unsafe.Pointer(key)), uintptr(unsafe.Pointer(overlapped)), uintptr(timeout), 0) + r1, _, e1 := syscall.SyscallN(procGetQueuedCompletionStatus.Addr(), uintptr(cphandle), uintptr(unsafe.Pointer(qty)), uintptr(unsafe.Pointer(key)), uintptr(unsafe.Pointer(overlapped)), uintptr(timeout)) if r1 == 0 { err = errnoErr(e1) } @@ -2469,7 +2623,7 @@ func GetQueuedCompletionStatus(cphandle Handle, qty *uint32, key *uintptr, overl } func GetShortPathName(longpath *uint16, shortpath *uint16, buflen uint32) (n uint32, err error) { - r0, _, e1 := syscall.Syscall(procGetShortPathNameW.Addr(), 3, uintptr(unsafe.Pointer(longpath)), uintptr(unsafe.Pointer(shortpath)), uintptr(buflen)) + r0, _, e1 := syscall.SyscallN(procGetShortPathNameW.Addr(), uintptr(unsafe.Pointer(longpath)), uintptr(unsafe.Pointer(shortpath)), uintptr(buflen)) n = uint32(r0) if n == 0 { err = errnoErr(e1) @@ -2478,12 +2632,12 @@ func GetShortPathName(longpath *uint16, shortpath *uint16, buflen uint32) (n uin } func getStartupInfo(startupInfo *StartupInfo) { - syscall.Syscall(procGetStartupInfoW.Addr(), 1, uintptr(unsafe.Pointer(startupInfo)), 0, 0) + syscall.SyscallN(procGetStartupInfoW.Addr(), uintptr(unsafe.Pointer(startupInfo))) return } func GetStdHandle(stdhandle uint32) (handle Handle, err error) { - r0, _, e1 := syscall.Syscall(procGetStdHandle.Addr(), 1, uintptr(stdhandle), 0, 0) + r0, _, e1 := syscall.SyscallN(procGetStdHandle.Addr(), uintptr(stdhandle)) handle = Handle(r0) if handle == InvalidHandle { err = errnoErr(e1) @@ -2492,7 +2646,7 @@ func GetStdHandle(stdhandle uint32) (handle Handle, err error) { } func getSystemDirectory(dir *uint16, dirLen uint32) (len uint32, err error) { - r0, _, e1 := syscall.Syscall(procGetSystemDirectoryW.Addr(), 2, uintptr(unsafe.Pointer(dir)), uintptr(dirLen), 0) + r0, _, e1 := syscall.SyscallN(procGetSystemDirectoryW.Addr(), uintptr(unsafe.Pointer(dir)), uintptr(dirLen)) len = uint32(r0) if len == 0 { err = errnoErr(e1) @@ -2501,7 +2655,7 @@ func getSystemDirectory(dir *uint16, dirLen uint32) (len uint32, err error) { } func getSystemPreferredUILanguages(flags uint32, numLanguages *uint32, buf *uint16, bufSize *uint32) (err error) { - r1, _, e1 := syscall.Syscall6(procGetSystemPreferredUILanguages.Addr(), 4, uintptr(flags), uintptr(unsafe.Pointer(numLanguages)), uintptr(unsafe.Pointer(buf)), uintptr(unsafe.Pointer(bufSize)), 0, 0) + r1, _, e1 := syscall.SyscallN(procGetSystemPreferredUILanguages.Addr(), uintptr(flags), uintptr(unsafe.Pointer(numLanguages)), uintptr(unsafe.Pointer(buf)), uintptr(unsafe.Pointer(bufSize))) if r1 == 0 { err = errnoErr(e1) } @@ -2509,17 +2663,17 @@ func getSystemPreferredUILanguages(flags uint32, numLanguages *uint32, buf *uint } func GetSystemTimeAsFileTime(time *Filetime) { - syscall.Syscall(procGetSystemTimeAsFileTime.Addr(), 1, uintptr(unsafe.Pointer(time)), 0, 0) + syscall.SyscallN(procGetSystemTimeAsFileTime.Addr(), uintptr(unsafe.Pointer(time))) return } func GetSystemTimePreciseAsFileTime(time *Filetime) { - syscall.Syscall(procGetSystemTimePreciseAsFileTime.Addr(), 1, uintptr(unsafe.Pointer(time)), 0, 0) + syscall.SyscallN(procGetSystemTimePreciseAsFileTime.Addr(), uintptr(unsafe.Pointer(time))) return } func getSystemWindowsDirectory(dir *uint16, dirLen uint32) (len uint32, err error) { - r0, _, e1 := syscall.Syscall(procGetSystemWindowsDirectoryW.Addr(), 2, uintptr(unsafe.Pointer(dir)), uintptr(dirLen), 0) + r0, _, e1 := syscall.SyscallN(procGetSystemWindowsDirectoryW.Addr(), uintptr(unsafe.Pointer(dir)), uintptr(dirLen)) len = uint32(r0) if len == 0 { err = errnoErr(e1) @@ -2528,7 +2682,7 @@ func getSystemWindowsDirectory(dir *uint16, dirLen uint32) (len uint32, err erro } func GetTempPath(buflen uint32, buf *uint16) (n uint32, err error) { - r0, _, e1 := syscall.Syscall(procGetTempPathW.Addr(), 2, uintptr(buflen), uintptr(unsafe.Pointer(buf)), 0) + r0, _, e1 := syscall.SyscallN(procGetTempPathW.Addr(), uintptr(buflen), uintptr(unsafe.Pointer(buf))) n = uint32(r0) if n == 0 { err = errnoErr(e1) @@ -2537,7 +2691,7 @@ func GetTempPath(buflen uint32, buf *uint16) (n uint32, err error) { } func getThreadPreferredUILanguages(flags uint32, numLanguages *uint32, buf *uint16, bufSize *uint32) (err error) { - r1, _, e1 := syscall.Syscall6(procGetThreadPreferredUILanguages.Addr(), 4, uintptr(flags), uintptr(unsafe.Pointer(numLanguages)), uintptr(unsafe.Pointer(buf)), uintptr(unsafe.Pointer(bufSize)), 0, 0) + r1, _, e1 := syscall.SyscallN(procGetThreadPreferredUILanguages.Addr(), uintptr(flags), uintptr(unsafe.Pointer(numLanguages)), uintptr(unsafe.Pointer(buf)), uintptr(unsafe.Pointer(bufSize))) if r1 == 0 { err = errnoErr(e1) } @@ -2545,13 +2699,13 @@ func getThreadPreferredUILanguages(flags uint32, numLanguages *uint32, buf *uint } func getTickCount64() (ms uint64) { - r0, _, _ := syscall.Syscall(procGetTickCount64.Addr(), 0, 0, 0, 0) + r0, _, _ := syscall.SyscallN(procGetTickCount64.Addr()) ms = uint64(r0) return } func GetTimeZoneInformation(tzi *Timezoneinformation) (rc uint32, err error) { - r0, _, e1 := syscall.Syscall(procGetTimeZoneInformation.Addr(), 1, uintptr(unsafe.Pointer(tzi)), 0, 0) + r0, _, e1 := syscall.SyscallN(procGetTimeZoneInformation.Addr(), uintptr(unsafe.Pointer(tzi))) rc = uint32(r0) if rc == 0xffffffff { err = errnoErr(e1) @@ -2560,7 +2714,7 @@ func GetTimeZoneInformation(tzi *Timezoneinformation) (rc uint32, err error) { } func getUserPreferredUILanguages(flags uint32, numLanguages *uint32, buf *uint16, bufSize *uint32) (err error) { - r1, _, e1 := syscall.Syscall6(procGetUserPreferredUILanguages.Addr(), 4, uintptr(flags), uintptr(unsafe.Pointer(numLanguages)), uintptr(unsafe.Pointer(buf)), uintptr(unsafe.Pointer(bufSize)), 0, 0) + r1, _, e1 := syscall.SyscallN(procGetUserPreferredUILanguages.Addr(), uintptr(flags), uintptr(unsafe.Pointer(numLanguages)), uintptr(unsafe.Pointer(buf)), uintptr(unsafe.Pointer(bufSize))) if r1 == 0 { err = errnoErr(e1) } @@ -2568,7 +2722,7 @@ func getUserPreferredUILanguages(flags uint32, numLanguages *uint32, buf *uint16 } func GetVersion() (ver uint32, err error) { - r0, _, e1 := syscall.Syscall(procGetVersion.Addr(), 0, 0, 0, 0) + r0, _, e1 := syscall.SyscallN(procGetVersion.Addr()) ver = uint32(r0) if ver == 0 { err = errnoErr(e1) @@ -2577,7 +2731,7 @@ func GetVersion() (ver uint32, err error) { } func GetVolumeInformationByHandle(file Handle, volumeNameBuffer *uint16, volumeNameSize uint32, volumeNameSerialNumber *uint32, maximumComponentLength *uint32, fileSystemFlags *uint32, fileSystemNameBuffer *uint16, fileSystemNameSize uint32) (err error) { - r1, _, e1 := syscall.Syscall9(procGetVolumeInformationByHandleW.Addr(), 8, uintptr(file), uintptr(unsafe.Pointer(volumeNameBuffer)), uintptr(volumeNameSize), uintptr(unsafe.Pointer(volumeNameSerialNumber)), uintptr(unsafe.Pointer(maximumComponentLength)), uintptr(unsafe.Pointer(fileSystemFlags)), uintptr(unsafe.Pointer(fileSystemNameBuffer)), uintptr(fileSystemNameSize), 0) + r1, _, e1 := syscall.SyscallN(procGetVolumeInformationByHandleW.Addr(), uintptr(file), uintptr(unsafe.Pointer(volumeNameBuffer)), uintptr(volumeNameSize), uintptr(unsafe.Pointer(volumeNameSerialNumber)), uintptr(unsafe.Pointer(maximumComponentLength)), uintptr(unsafe.Pointer(fileSystemFlags)), uintptr(unsafe.Pointer(fileSystemNameBuffer)), uintptr(fileSystemNameSize)) if r1 == 0 { err = errnoErr(e1) } @@ -2585,7 +2739,7 @@ func GetVolumeInformationByHandle(file Handle, volumeNameBuffer *uint16, volumeN } func GetVolumeInformation(rootPathName *uint16, volumeNameBuffer *uint16, volumeNameSize uint32, volumeNameSerialNumber *uint32, maximumComponentLength *uint32, fileSystemFlags *uint32, fileSystemNameBuffer *uint16, fileSystemNameSize uint32) (err error) { - r1, _, e1 := syscall.Syscall9(procGetVolumeInformationW.Addr(), 8, uintptr(unsafe.Pointer(rootPathName)), uintptr(unsafe.Pointer(volumeNameBuffer)), uintptr(volumeNameSize), uintptr(unsafe.Pointer(volumeNameSerialNumber)), uintptr(unsafe.Pointer(maximumComponentLength)), uintptr(unsafe.Pointer(fileSystemFlags)), uintptr(unsafe.Pointer(fileSystemNameBuffer)), uintptr(fileSystemNameSize), 0) + r1, _, e1 := syscall.SyscallN(procGetVolumeInformationW.Addr(), uintptr(unsafe.Pointer(rootPathName)), uintptr(unsafe.Pointer(volumeNameBuffer)), uintptr(volumeNameSize), uintptr(unsafe.Pointer(volumeNameSerialNumber)), uintptr(unsafe.Pointer(maximumComponentLength)), uintptr(unsafe.Pointer(fileSystemFlags)), uintptr(unsafe.Pointer(fileSystemNameBuffer)), uintptr(fileSystemNameSize)) if r1 == 0 { err = errnoErr(e1) } @@ -2593,7 +2747,7 @@ func GetVolumeInformation(rootPathName *uint16, volumeNameBuffer *uint16, volume } func GetVolumeNameForVolumeMountPoint(volumeMountPoint *uint16, volumeName *uint16, bufferlength uint32) (err error) { - r1, _, e1 := syscall.Syscall(procGetVolumeNameForVolumeMountPointW.Addr(), 3, uintptr(unsafe.Pointer(volumeMountPoint)), uintptr(unsafe.Pointer(volumeName)), uintptr(bufferlength)) + r1, _, e1 := syscall.SyscallN(procGetVolumeNameForVolumeMountPointW.Addr(), uintptr(unsafe.Pointer(volumeMountPoint)), uintptr(unsafe.Pointer(volumeName)), uintptr(bufferlength)) if r1 == 0 { err = errnoErr(e1) } @@ -2601,7 +2755,7 @@ func GetVolumeNameForVolumeMountPoint(volumeMountPoint *uint16, volumeName *uint } func GetVolumePathName(fileName *uint16, volumePathName *uint16, bufferLength uint32) (err error) { - r1, _, e1 := syscall.Syscall(procGetVolumePathNameW.Addr(), 3, uintptr(unsafe.Pointer(fileName)), uintptr(unsafe.Pointer(volumePathName)), uintptr(bufferLength)) + r1, _, e1 := syscall.SyscallN(procGetVolumePathNameW.Addr(), uintptr(unsafe.Pointer(fileName)), uintptr(unsafe.Pointer(volumePathName)), uintptr(bufferLength)) if r1 == 0 { err = errnoErr(e1) } @@ -2609,7 +2763,7 @@ func GetVolumePathName(fileName *uint16, volumePathName *uint16, bufferLength ui } func GetVolumePathNamesForVolumeName(volumeName *uint16, volumePathNames *uint16, bufferLength uint32, returnLength *uint32) (err error) { - r1, _, e1 := syscall.Syscall6(procGetVolumePathNamesForVolumeNameW.Addr(), 4, uintptr(unsafe.Pointer(volumeName)), uintptr(unsafe.Pointer(volumePathNames)), uintptr(bufferLength), uintptr(unsafe.Pointer(returnLength)), 0, 0) + r1, _, e1 := syscall.SyscallN(procGetVolumePathNamesForVolumeNameW.Addr(), uintptr(unsafe.Pointer(volumeName)), uintptr(unsafe.Pointer(volumePathNames)), uintptr(bufferLength), uintptr(unsafe.Pointer(returnLength))) if r1 == 0 { err = errnoErr(e1) } @@ -2617,7 +2771,7 @@ func GetVolumePathNamesForVolumeName(volumeName *uint16, volumePathNames *uint16 } func getWindowsDirectory(dir *uint16, dirLen uint32) (len uint32, err error) { - r0, _, e1 := syscall.Syscall(procGetWindowsDirectoryW.Addr(), 2, uintptr(unsafe.Pointer(dir)), uintptr(dirLen), 0) + r0, _, e1 := syscall.SyscallN(procGetWindowsDirectoryW.Addr(), uintptr(unsafe.Pointer(dir)), uintptr(dirLen)) len = uint32(r0) if len == 0 { err = errnoErr(e1) @@ -2626,19 +2780,25 @@ func getWindowsDirectory(dir *uint16, dirLen uint32) (len uint32, err error) { } func initializeProcThreadAttributeList(attrlist *ProcThreadAttributeList, attrcount uint32, flags uint32, size *uintptr) (err error) { - r1, _, e1 := syscall.Syscall6(procInitializeProcThreadAttributeList.Addr(), 4, uintptr(unsafe.Pointer(attrlist)), uintptr(attrcount), uintptr(flags), uintptr(unsafe.Pointer(size)), 0, 0) + r1, _, e1 := syscall.SyscallN(procInitializeProcThreadAttributeList.Addr(), uintptr(unsafe.Pointer(attrlist)), uintptr(attrcount), uintptr(flags), uintptr(unsafe.Pointer(size))) if r1 == 0 { err = errnoErr(e1) } return } +func IsProcessorFeaturePresent(ProcessorFeature uint32) (ret bool) { + r0, _, _ := syscall.SyscallN(procIsProcessorFeaturePresent.Addr(), uintptr(ProcessorFeature)) + ret = r0 != 0 + return +} + func IsWow64Process(handle Handle, isWow64 *bool) (err error) { var _p0 uint32 if *isWow64 { _p0 = 1 } - r1, _, e1 := syscall.Syscall(procIsWow64Process.Addr(), 2, uintptr(handle), uintptr(unsafe.Pointer(&_p0)), 0) + r1, _, e1 := syscall.SyscallN(procIsWow64Process.Addr(), uintptr(handle), uintptr(unsafe.Pointer(&_p0))) *isWow64 = _p0 != 0 if r1 == 0 { err = errnoErr(e1) @@ -2651,7 +2811,7 @@ func IsWow64Process2(handle Handle, processMachine *uint16, nativeMachine *uint1 if err != nil { return } - r1, _, e1 := syscall.Syscall(procIsWow64Process2.Addr(), 3, uintptr(handle), uintptr(unsafe.Pointer(processMachine)), uintptr(unsafe.Pointer(nativeMachine))) + r1, _, e1 := syscall.SyscallN(procIsWow64Process2.Addr(), uintptr(handle), uintptr(unsafe.Pointer(processMachine)), uintptr(unsafe.Pointer(nativeMachine))) if r1 == 0 { err = errnoErr(e1) } @@ -2668,7 +2828,7 @@ func LoadLibraryEx(libname string, zero Handle, flags uintptr) (handle Handle, e } func _LoadLibraryEx(libname *uint16, zero Handle, flags uintptr) (handle Handle, err error) { - r0, _, e1 := syscall.Syscall(procLoadLibraryExW.Addr(), 3, uintptr(unsafe.Pointer(libname)), uintptr(zero), uintptr(flags)) + r0, _, e1 := syscall.SyscallN(procLoadLibraryExW.Addr(), uintptr(unsafe.Pointer(libname)), uintptr(zero), uintptr(flags)) handle = Handle(r0) if handle == 0 { err = errnoErr(e1) @@ -2686,7 +2846,7 @@ func LoadLibrary(libname string) (handle Handle, err error) { } func _LoadLibrary(libname *uint16) (handle Handle, err error) { - r0, _, e1 := syscall.Syscall(procLoadLibraryW.Addr(), 1, uintptr(unsafe.Pointer(libname)), 0, 0) + r0, _, e1 := syscall.SyscallN(procLoadLibraryW.Addr(), uintptr(unsafe.Pointer(libname))) handle = Handle(r0) if handle == 0 { err = errnoErr(e1) @@ -2695,7 +2855,7 @@ func _LoadLibrary(libname *uint16) (handle Handle, err error) { } func LoadResource(module Handle, resInfo Handle) (resData Handle, err error) { - r0, _, e1 := syscall.Syscall(procLoadResource.Addr(), 2, uintptr(module), uintptr(resInfo), 0) + r0, _, e1 := syscall.SyscallN(procLoadResource.Addr(), uintptr(module), uintptr(resInfo)) resData = Handle(r0) if resData == 0 { err = errnoErr(e1) @@ -2704,7 +2864,7 @@ func LoadResource(module Handle, resInfo Handle) (resData Handle, err error) { } func LocalAlloc(flags uint32, length uint32) (ptr uintptr, err error) { - r0, _, e1 := syscall.Syscall(procLocalAlloc.Addr(), 2, uintptr(flags), uintptr(length), 0) + r0, _, e1 := syscall.SyscallN(procLocalAlloc.Addr(), uintptr(flags), uintptr(length)) ptr = uintptr(r0) if ptr == 0 { err = errnoErr(e1) @@ -2713,7 +2873,7 @@ func LocalAlloc(flags uint32, length uint32) (ptr uintptr, err error) { } func LocalFree(hmem Handle) (handle Handle, err error) { - r0, _, e1 := syscall.Syscall(procLocalFree.Addr(), 1, uintptr(hmem), 0, 0) + r0, _, e1 := syscall.SyscallN(procLocalFree.Addr(), uintptr(hmem)) handle = Handle(r0) if handle != 0 { err = errnoErr(e1) @@ -2722,7 +2882,7 @@ func LocalFree(hmem Handle) (handle Handle, err error) { } func LockFileEx(file Handle, flags uint32, reserved uint32, bytesLow uint32, bytesHigh uint32, overlapped *Overlapped) (err error) { - r1, _, e1 := syscall.Syscall6(procLockFileEx.Addr(), 6, uintptr(file), uintptr(flags), uintptr(reserved), uintptr(bytesLow), uintptr(bytesHigh), uintptr(unsafe.Pointer(overlapped))) + r1, _, e1 := syscall.SyscallN(procLockFileEx.Addr(), uintptr(file), uintptr(flags), uintptr(reserved), uintptr(bytesLow), uintptr(bytesHigh), uintptr(unsafe.Pointer(overlapped))) if r1 == 0 { err = errnoErr(e1) } @@ -2730,7 +2890,7 @@ func LockFileEx(file Handle, flags uint32, reserved uint32, bytesLow uint32, byt } func LockResource(resData Handle) (addr uintptr, err error) { - r0, _, e1 := syscall.Syscall(procLockResource.Addr(), 1, uintptr(resData), 0, 0) + r0, _, e1 := syscall.SyscallN(procLockResource.Addr(), uintptr(resData)) addr = uintptr(r0) if addr == 0 { err = errnoErr(e1) @@ -2739,7 +2899,7 @@ func LockResource(resData Handle) (addr uintptr, err error) { } func MapViewOfFile(handle Handle, access uint32, offsetHigh uint32, offsetLow uint32, length uintptr) (addr uintptr, err error) { - r0, _, e1 := syscall.Syscall6(procMapViewOfFile.Addr(), 5, uintptr(handle), uintptr(access), uintptr(offsetHigh), uintptr(offsetLow), uintptr(length), 0) + r0, _, e1 := syscall.SyscallN(procMapViewOfFile.Addr(), uintptr(handle), uintptr(access), uintptr(offsetHigh), uintptr(offsetLow), uintptr(length)) addr = uintptr(r0) if addr == 0 { err = errnoErr(e1) @@ -2748,7 +2908,7 @@ func MapViewOfFile(handle Handle, access uint32, offsetHigh uint32, offsetLow ui } func Module32First(snapshot Handle, moduleEntry *ModuleEntry32) (err error) { - r1, _, e1 := syscall.Syscall(procModule32FirstW.Addr(), 2, uintptr(snapshot), uintptr(unsafe.Pointer(moduleEntry)), 0) + r1, _, e1 := syscall.SyscallN(procModule32FirstW.Addr(), uintptr(snapshot), uintptr(unsafe.Pointer(moduleEntry))) if r1 == 0 { err = errnoErr(e1) } @@ -2756,7 +2916,7 @@ func Module32First(snapshot Handle, moduleEntry *ModuleEntry32) (err error) { } func Module32Next(snapshot Handle, moduleEntry *ModuleEntry32) (err error) { - r1, _, e1 := syscall.Syscall(procModule32NextW.Addr(), 2, uintptr(snapshot), uintptr(unsafe.Pointer(moduleEntry)), 0) + r1, _, e1 := syscall.SyscallN(procModule32NextW.Addr(), uintptr(snapshot), uintptr(unsafe.Pointer(moduleEntry))) if r1 == 0 { err = errnoErr(e1) } @@ -2764,7 +2924,7 @@ func Module32Next(snapshot Handle, moduleEntry *ModuleEntry32) (err error) { } func MoveFileEx(from *uint16, to *uint16, flags uint32) (err error) { - r1, _, e1 := syscall.Syscall(procMoveFileExW.Addr(), 3, uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(to)), uintptr(flags)) + r1, _, e1 := syscall.SyscallN(procMoveFileExW.Addr(), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(to)), uintptr(flags)) if r1 == 0 { err = errnoErr(e1) } @@ -2772,7 +2932,7 @@ func MoveFileEx(from *uint16, to *uint16, flags uint32) (err error) { } func MoveFile(from *uint16, to *uint16) (err error) { - r1, _, e1 := syscall.Syscall(procMoveFileW.Addr(), 2, uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(to)), 0) + r1, _, e1 := syscall.SyscallN(procMoveFileW.Addr(), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(to))) if r1 == 0 { err = errnoErr(e1) } @@ -2780,7 +2940,7 @@ func MoveFile(from *uint16, to *uint16) (err error) { } func MultiByteToWideChar(codePage uint32, dwFlags uint32, str *byte, nstr int32, wchar *uint16, nwchar int32) (nwrite int32, err error) { - r0, _, e1 := syscall.Syscall6(procMultiByteToWideChar.Addr(), 6, uintptr(codePage), uintptr(dwFlags), uintptr(unsafe.Pointer(str)), uintptr(nstr), uintptr(unsafe.Pointer(wchar)), uintptr(nwchar)) + r0, _, e1 := syscall.SyscallN(procMultiByteToWideChar.Addr(), uintptr(codePage), uintptr(dwFlags), uintptr(unsafe.Pointer(str)), uintptr(nstr), uintptr(unsafe.Pointer(wchar)), uintptr(nwchar)) nwrite = int32(r0) if nwrite == 0 { err = errnoErr(e1) @@ -2793,7 +2953,7 @@ func OpenEvent(desiredAccess uint32, inheritHandle bool, name *uint16) (handle H if inheritHandle { _p0 = 1 } - r0, _, e1 := syscall.Syscall(procOpenEventW.Addr(), 3, uintptr(desiredAccess), uintptr(_p0), uintptr(unsafe.Pointer(name))) + r0, _, e1 := syscall.SyscallN(procOpenEventW.Addr(), uintptr(desiredAccess), uintptr(_p0), uintptr(unsafe.Pointer(name))) handle = Handle(r0) if handle == 0 { err = errnoErr(e1) @@ -2806,7 +2966,7 @@ func OpenMutex(desiredAccess uint32, inheritHandle bool, name *uint16) (handle H if inheritHandle { _p0 = 1 } - r0, _, e1 := syscall.Syscall(procOpenMutexW.Addr(), 3, uintptr(desiredAccess), uintptr(_p0), uintptr(unsafe.Pointer(name))) + r0, _, e1 := syscall.SyscallN(procOpenMutexW.Addr(), uintptr(desiredAccess), uintptr(_p0), uintptr(unsafe.Pointer(name))) handle = Handle(r0) if handle == 0 { err = errnoErr(e1) @@ -2819,7 +2979,7 @@ func OpenProcess(desiredAccess uint32, inheritHandle bool, processId uint32) (ha if inheritHandle { _p0 = 1 } - r0, _, e1 := syscall.Syscall(procOpenProcess.Addr(), 3, uintptr(desiredAccess), uintptr(_p0), uintptr(processId)) + r0, _, e1 := syscall.SyscallN(procOpenProcess.Addr(), uintptr(desiredAccess), uintptr(_p0), uintptr(processId)) handle = Handle(r0) if handle == 0 { err = errnoErr(e1) @@ -2832,7 +2992,7 @@ func OpenThread(desiredAccess uint32, inheritHandle bool, threadId uint32) (hand if inheritHandle { _p0 = 1 } - r0, _, e1 := syscall.Syscall(procOpenThread.Addr(), 3, uintptr(desiredAccess), uintptr(_p0), uintptr(threadId)) + r0, _, e1 := syscall.SyscallN(procOpenThread.Addr(), uintptr(desiredAccess), uintptr(_p0), uintptr(threadId)) handle = Handle(r0) if handle == 0 { err = errnoErr(e1) @@ -2841,7 +3001,7 @@ func OpenThread(desiredAccess uint32, inheritHandle bool, threadId uint32) (hand } func PostQueuedCompletionStatus(cphandle Handle, qty uint32, key uintptr, overlapped *Overlapped) (err error) { - r1, _, e1 := syscall.Syscall6(procPostQueuedCompletionStatus.Addr(), 4, uintptr(cphandle), uintptr(qty), uintptr(key), uintptr(unsafe.Pointer(overlapped)), 0, 0) + r1, _, e1 := syscall.SyscallN(procPostQueuedCompletionStatus.Addr(), uintptr(cphandle), uintptr(qty), uintptr(key), uintptr(unsafe.Pointer(overlapped))) if r1 == 0 { err = errnoErr(e1) } @@ -2849,7 +3009,7 @@ func PostQueuedCompletionStatus(cphandle Handle, qty uint32, key uintptr, overla } func Process32First(snapshot Handle, procEntry *ProcessEntry32) (err error) { - r1, _, e1 := syscall.Syscall(procProcess32FirstW.Addr(), 2, uintptr(snapshot), uintptr(unsafe.Pointer(procEntry)), 0) + r1, _, e1 := syscall.SyscallN(procProcess32FirstW.Addr(), uintptr(snapshot), uintptr(unsafe.Pointer(procEntry))) if r1 == 0 { err = errnoErr(e1) } @@ -2857,7 +3017,7 @@ func Process32First(snapshot Handle, procEntry *ProcessEntry32) (err error) { } func Process32Next(snapshot Handle, procEntry *ProcessEntry32) (err error) { - r1, _, e1 := syscall.Syscall(procProcess32NextW.Addr(), 2, uintptr(snapshot), uintptr(unsafe.Pointer(procEntry)), 0) + r1, _, e1 := syscall.SyscallN(procProcess32NextW.Addr(), uintptr(snapshot), uintptr(unsafe.Pointer(procEntry))) if r1 == 0 { err = errnoErr(e1) } @@ -2865,7 +3025,7 @@ func Process32Next(snapshot Handle, procEntry *ProcessEntry32) (err error) { } func ProcessIdToSessionId(pid uint32, sessionid *uint32) (err error) { - r1, _, e1 := syscall.Syscall(procProcessIdToSessionId.Addr(), 2, uintptr(pid), uintptr(unsafe.Pointer(sessionid)), 0) + r1, _, e1 := syscall.SyscallN(procProcessIdToSessionId.Addr(), uintptr(pid), uintptr(unsafe.Pointer(sessionid))) if r1 == 0 { err = errnoErr(e1) } @@ -2873,7 +3033,7 @@ func ProcessIdToSessionId(pid uint32, sessionid *uint32) (err error) { } func PulseEvent(event Handle) (err error) { - r1, _, e1 := syscall.Syscall(procPulseEvent.Addr(), 1, uintptr(event), 0, 0) + r1, _, e1 := syscall.SyscallN(procPulseEvent.Addr(), uintptr(event)) if r1 == 0 { err = errnoErr(e1) } @@ -2881,7 +3041,7 @@ func PulseEvent(event Handle) (err error) { } func PurgeComm(handle Handle, dwFlags uint32) (err error) { - r1, _, e1 := syscall.Syscall(procPurgeComm.Addr(), 2, uintptr(handle), uintptr(dwFlags), 0) + r1, _, e1 := syscall.SyscallN(procPurgeComm.Addr(), uintptr(handle), uintptr(dwFlags)) if r1 == 0 { err = errnoErr(e1) } @@ -2889,7 +3049,7 @@ func PurgeComm(handle Handle, dwFlags uint32) (err error) { } func QueryDosDevice(deviceName *uint16, targetPath *uint16, max uint32) (n uint32, err error) { - r0, _, e1 := syscall.Syscall(procQueryDosDeviceW.Addr(), 3, uintptr(unsafe.Pointer(deviceName)), uintptr(unsafe.Pointer(targetPath)), uintptr(max)) + r0, _, e1 := syscall.SyscallN(procQueryDosDeviceW.Addr(), uintptr(unsafe.Pointer(deviceName)), uintptr(unsafe.Pointer(targetPath)), uintptr(max)) n = uint32(r0) if n == 0 { err = errnoErr(e1) @@ -2898,7 +3058,7 @@ func QueryDosDevice(deviceName *uint16, targetPath *uint16, max uint32) (n uint3 } func QueryFullProcessImageName(proc Handle, flags uint32, exeName *uint16, size *uint32) (err error) { - r1, _, e1 := syscall.Syscall6(procQueryFullProcessImageNameW.Addr(), 4, uintptr(proc), uintptr(flags), uintptr(unsafe.Pointer(exeName)), uintptr(unsafe.Pointer(size)), 0, 0) + r1, _, e1 := syscall.SyscallN(procQueryFullProcessImageNameW.Addr(), uintptr(proc), uintptr(flags), uintptr(unsafe.Pointer(exeName)), uintptr(unsafe.Pointer(size))) if r1 == 0 { err = errnoErr(e1) } @@ -2906,7 +3066,7 @@ func QueryFullProcessImageName(proc Handle, flags uint32, exeName *uint16, size } func QueryInformationJobObject(job Handle, JobObjectInformationClass int32, JobObjectInformation uintptr, JobObjectInformationLength uint32, retlen *uint32) (err error) { - r1, _, e1 := syscall.Syscall6(procQueryInformationJobObject.Addr(), 5, uintptr(job), uintptr(JobObjectInformationClass), uintptr(JobObjectInformation), uintptr(JobObjectInformationLength), uintptr(unsafe.Pointer(retlen)), 0) + r1, _, e1 := syscall.SyscallN(procQueryInformationJobObject.Addr(), uintptr(job), uintptr(JobObjectInformationClass), uintptr(JobObjectInformation), uintptr(JobObjectInformationLength), uintptr(unsafe.Pointer(retlen))) if r1 == 0 { err = errnoErr(e1) } @@ -2914,7 +3074,7 @@ func QueryInformationJobObject(job Handle, JobObjectInformationClass int32, JobO } func ReadConsole(console Handle, buf *uint16, toread uint32, read *uint32, inputControl *byte) (err error) { - r1, _, e1 := syscall.Syscall6(procReadConsoleW.Addr(), 5, uintptr(console), uintptr(unsafe.Pointer(buf)), uintptr(toread), uintptr(unsafe.Pointer(read)), uintptr(unsafe.Pointer(inputControl)), 0) + r1, _, e1 := syscall.SyscallN(procReadConsoleW.Addr(), uintptr(console), uintptr(unsafe.Pointer(buf)), uintptr(toread), uintptr(unsafe.Pointer(read)), uintptr(unsafe.Pointer(inputControl))) if r1 == 0 { err = errnoErr(e1) } @@ -2926,7 +3086,7 @@ func ReadDirectoryChanges(handle Handle, buf *byte, buflen uint32, watchSubTree if watchSubTree { _p0 = 1 } - r1, _, e1 := syscall.Syscall9(procReadDirectoryChangesW.Addr(), 8, uintptr(handle), uintptr(unsafe.Pointer(buf)), uintptr(buflen), uintptr(_p0), uintptr(mask), uintptr(unsafe.Pointer(retlen)), uintptr(unsafe.Pointer(overlapped)), uintptr(completionRoutine), 0) + r1, _, e1 := syscall.SyscallN(procReadDirectoryChangesW.Addr(), uintptr(handle), uintptr(unsafe.Pointer(buf)), uintptr(buflen), uintptr(_p0), uintptr(mask), uintptr(unsafe.Pointer(retlen)), uintptr(unsafe.Pointer(overlapped)), uintptr(completionRoutine)) if r1 == 0 { err = errnoErr(e1) } @@ -2938,7 +3098,7 @@ func readFile(handle Handle, buf []byte, done *uint32, overlapped *Overlapped) ( if len(buf) > 0 { _p0 = &buf[0] } - r1, _, e1 := syscall.Syscall6(procReadFile.Addr(), 5, uintptr(handle), uintptr(unsafe.Pointer(_p0)), uintptr(len(buf)), uintptr(unsafe.Pointer(done)), uintptr(unsafe.Pointer(overlapped)), 0) + r1, _, e1 := syscall.SyscallN(procReadFile.Addr(), uintptr(handle), uintptr(unsafe.Pointer(_p0)), uintptr(len(buf)), uintptr(unsafe.Pointer(done)), uintptr(unsafe.Pointer(overlapped))) if r1 == 0 { err = errnoErr(e1) } @@ -2946,7 +3106,7 @@ func readFile(handle Handle, buf []byte, done *uint32, overlapped *Overlapped) ( } func ReadProcessMemory(process Handle, baseAddress uintptr, buffer *byte, size uintptr, numberOfBytesRead *uintptr) (err error) { - r1, _, e1 := syscall.Syscall6(procReadProcessMemory.Addr(), 5, uintptr(process), uintptr(baseAddress), uintptr(unsafe.Pointer(buffer)), uintptr(size), uintptr(unsafe.Pointer(numberOfBytesRead)), 0) + r1, _, e1 := syscall.SyscallN(procReadProcessMemory.Addr(), uintptr(process), uintptr(baseAddress), uintptr(unsafe.Pointer(buffer)), uintptr(size), uintptr(unsafe.Pointer(numberOfBytesRead))) if r1 == 0 { err = errnoErr(e1) } @@ -2954,7 +3114,7 @@ func ReadProcessMemory(process Handle, baseAddress uintptr, buffer *byte, size u } func ReleaseMutex(mutex Handle) (err error) { - r1, _, e1 := syscall.Syscall(procReleaseMutex.Addr(), 1, uintptr(mutex), 0, 0) + r1, _, e1 := syscall.SyscallN(procReleaseMutex.Addr(), uintptr(mutex)) if r1 == 0 { err = errnoErr(e1) } @@ -2962,7 +3122,7 @@ func ReleaseMutex(mutex Handle) (err error) { } func RemoveDirectory(path *uint16) (err error) { - r1, _, e1 := syscall.Syscall(procRemoveDirectoryW.Addr(), 1, uintptr(unsafe.Pointer(path)), 0, 0) + r1, _, e1 := syscall.SyscallN(procRemoveDirectoryW.Addr(), uintptr(unsafe.Pointer(path))) if r1 == 0 { err = errnoErr(e1) } @@ -2970,7 +3130,7 @@ func RemoveDirectory(path *uint16) (err error) { } func RemoveDllDirectory(cookie uintptr) (err error) { - r1, _, e1 := syscall.Syscall(procRemoveDllDirectory.Addr(), 1, uintptr(cookie), 0, 0) + r1, _, e1 := syscall.SyscallN(procRemoveDllDirectory.Addr(), uintptr(cookie)) if r1 == 0 { err = errnoErr(e1) } @@ -2978,7 +3138,7 @@ func RemoveDllDirectory(cookie uintptr) (err error) { } func ResetEvent(event Handle) (err error) { - r1, _, e1 := syscall.Syscall(procResetEvent.Addr(), 1, uintptr(event), 0, 0) + r1, _, e1 := syscall.SyscallN(procResetEvent.Addr(), uintptr(event)) if r1 == 0 { err = errnoErr(e1) } @@ -2986,7 +3146,7 @@ func ResetEvent(event Handle) (err error) { } func resizePseudoConsole(pconsole Handle, size uint32) (hr error) { - r0, _, _ := syscall.Syscall(procResizePseudoConsole.Addr(), 2, uintptr(pconsole), uintptr(size), 0) + r0, _, _ := syscall.SyscallN(procResizePseudoConsole.Addr(), uintptr(pconsole), uintptr(size)) if r0 != 0 { hr = syscall.Errno(r0) } @@ -2994,7 +3154,7 @@ func resizePseudoConsole(pconsole Handle, size uint32) (hr error) { } func ResumeThread(thread Handle) (ret uint32, err error) { - r0, _, e1 := syscall.Syscall(procResumeThread.Addr(), 1, uintptr(thread), 0, 0) + r0, _, e1 := syscall.SyscallN(procResumeThread.Addr(), uintptr(thread)) ret = uint32(r0) if ret == 0xffffffff { err = errnoErr(e1) @@ -3003,7 +3163,7 @@ func ResumeThread(thread Handle) (ret uint32, err error) { } func SetCommBreak(handle Handle) (err error) { - r1, _, e1 := syscall.Syscall(procSetCommBreak.Addr(), 1, uintptr(handle), 0, 0) + r1, _, e1 := syscall.SyscallN(procSetCommBreak.Addr(), uintptr(handle)) if r1 == 0 { err = errnoErr(e1) } @@ -3011,7 +3171,7 @@ func SetCommBreak(handle Handle) (err error) { } func SetCommMask(handle Handle, dwEvtMask uint32) (err error) { - r1, _, e1 := syscall.Syscall(procSetCommMask.Addr(), 2, uintptr(handle), uintptr(dwEvtMask), 0) + r1, _, e1 := syscall.SyscallN(procSetCommMask.Addr(), uintptr(handle), uintptr(dwEvtMask)) if r1 == 0 { err = errnoErr(e1) } @@ -3019,7 +3179,7 @@ func SetCommMask(handle Handle, dwEvtMask uint32) (err error) { } func SetCommState(handle Handle, lpDCB *DCB) (err error) { - r1, _, e1 := syscall.Syscall(procSetCommState.Addr(), 2, uintptr(handle), uintptr(unsafe.Pointer(lpDCB)), 0) + r1, _, e1 := syscall.SyscallN(procSetCommState.Addr(), uintptr(handle), uintptr(unsafe.Pointer(lpDCB))) if r1 == 0 { err = errnoErr(e1) } @@ -3027,7 +3187,15 @@ func SetCommState(handle Handle, lpDCB *DCB) (err error) { } func SetCommTimeouts(handle Handle, timeouts *CommTimeouts) (err error) { - r1, _, e1 := syscall.Syscall(procSetCommTimeouts.Addr(), 2, uintptr(handle), uintptr(unsafe.Pointer(timeouts)), 0) + r1, _, e1 := syscall.SyscallN(procSetCommTimeouts.Addr(), uintptr(handle), uintptr(unsafe.Pointer(timeouts))) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func SetConsoleCP(cp uint32) (err error) { + r1, _, e1 := syscall.SyscallN(procSetConsoleCP.Addr(), uintptr(cp)) if r1 == 0 { err = errnoErr(e1) } @@ -3035,7 +3203,7 @@ func SetCommTimeouts(handle Handle, timeouts *CommTimeouts) (err error) { } func setConsoleCursorPosition(console Handle, position uint32) (err error) { - r1, _, e1 := syscall.Syscall(procSetConsoleCursorPosition.Addr(), 2, uintptr(console), uintptr(position), 0) + r1, _, e1 := syscall.SyscallN(procSetConsoleCursorPosition.Addr(), uintptr(console), uintptr(position)) if r1 == 0 { err = errnoErr(e1) } @@ -3043,7 +3211,15 @@ func setConsoleCursorPosition(console Handle, position uint32) (err error) { } func SetConsoleMode(console Handle, mode uint32) (err error) { - r1, _, e1 := syscall.Syscall(procSetConsoleMode.Addr(), 2, uintptr(console), uintptr(mode), 0) + r1, _, e1 := syscall.SyscallN(procSetConsoleMode.Addr(), uintptr(console), uintptr(mode)) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + +func SetConsoleOutputCP(cp uint32) (err error) { + r1, _, e1 := syscall.SyscallN(procSetConsoleOutputCP.Addr(), uintptr(cp)) if r1 == 0 { err = errnoErr(e1) } @@ -3051,7 +3227,7 @@ func SetConsoleMode(console Handle, mode uint32) (err error) { } func SetCurrentDirectory(path *uint16) (err error) { - r1, _, e1 := syscall.Syscall(procSetCurrentDirectoryW.Addr(), 1, uintptr(unsafe.Pointer(path)), 0, 0) + r1, _, e1 := syscall.SyscallN(procSetCurrentDirectoryW.Addr(), uintptr(unsafe.Pointer(path))) if r1 == 0 { err = errnoErr(e1) } @@ -3059,7 +3235,7 @@ func SetCurrentDirectory(path *uint16) (err error) { } func SetDefaultDllDirectories(directoryFlags uint32) (err error) { - r1, _, e1 := syscall.Syscall(procSetDefaultDllDirectories.Addr(), 1, uintptr(directoryFlags), 0, 0) + r1, _, e1 := syscall.SyscallN(procSetDefaultDllDirectories.Addr(), uintptr(directoryFlags)) if r1 == 0 { err = errnoErr(e1) } @@ -3076,7 +3252,7 @@ func SetDllDirectory(path string) (err error) { } func _SetDllDirectory(path *uint16) (err error) { - r1, _, e1 := syscall.Syscall(procSetDllDirectoryW.Addr(), 1, uintptr(unsafe.Pointer(path)), 0, 0) + r1, _, e1 := syscall.SyscallN(procSetDllDirectoryW.Addr(), uintptr(unsafe.Pointer(path))) if r1 == 0 { err = errnoErr(e1) } @@ -3084,7 +3260,7 @@ func _SetDllDirectory(path *uint16) (err error) { } func SetEndOfFile(handle Handle) (err error) { - r1, _, e1 := syscall.Syscall(procSetEndOfFile.Addr(), 1, uintptr(handle), 0, 0) + r1, _, e1 := syscall.SyscallN(procSetEndOfFile.Addr(), uintptr(handle)) if r1 == 0 { err = errnoErr(e1) } @@ -3092,7 +3268,7 @@ func SetEndOfFile(handle Handle) (err error) { } func SetEnvironmentVariable(name *uint16, value *uint16) (err error) { - r1, _, e1 := syscall.Syscall(procSetEnvironmentVariableW.Addr(), 2, uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(value)), 0) + r1, _, e1 := syscall.SyscallN(procSetEnvironmentVariableW.Addr(), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(value))) if r1 == 0 { err = errnoErr(e1) } @@ -3100,13 +3276,13 @@ func SetEnvironmentVariable(name *uint16, value *uint16) (err error) { } func SetErrorMode(mode uint32) (ret uint32) { - r0, _, _ := syscall.Syscall(procSetErrorMode.Addr(), 1, uintptr(mode), 0, 0) + r0, _, _ := syscall.SyscallN(procSetErrorMode.Addr(), uintptr(mode)) ret = uint32(r0) return } func SetEvent(event Handle) (err error) { - r1, _, e1 := syscall.Syscall(procSetEvent.Addr(), 1, uintptr(event), 0, 0) + r1, _, e1 := syscall.SyscallN(procSetEvent.Addr(), uintptr(event)) if r1 == 0 { err = errnoErr(e1) } @@ -3114,7 +3290,7 @@ func SetEvent(event Handle) (err error) { } func SetFileAttributes(name *uint16, attrs uint32) (err error) { - r1, _, e1 := syscall.Syscall(procSetFileAttributesW.Addr(), 2, uintptr(unsafe.Pointer(name)), uintptr(attrs), 0) + r1, _, e1 := syscall.SyscallN(procSetFileAttributesW.Addr(), uintptr(unsafe.Pointer(name)), uintptr(attrs)) if r1 == 0 { err = errnoErr(e1) } @@ -3122,7 +3298,7 @@ func SetFileAttributes(name *uint16, attrs uint32) (err error) { } func SetFileCompletionNotificationModes(handle Handle, flags uint8) (err error) { - r1, _, e1 := syscall.Syscall(procSetFileCompletionNotificationModes.Addr(), 2, uintptr(handle), uintptr(flags), 0) + r1, _, e1 := syscall.SyscallN(procSetFileCompletionNotificationModes.Addr(), uintptr(handle), uintptr(flags)) if r1 == 0 { err = errnoErr(e1) } @@ -3130,7 +3306,7 @@ func SetFileCompletionNotificationModes(handle Handle, flags uint8) (err error) } func SetFileInformationByHandle(handle Handle, class uint32, inBuffer *byte, inBufferLen uint32) (err error) { - r1, _, e1 := syscall.Syscall6(procSetFileInformationByHandle.Addr(), 4, uintptr(handle), uintptr(class), uintptr(unsafe.Pointer(inBuffer)), uintptr(inBufferLen), 0, 0) + r1, _, e1 := syscall.SyscallN(procSetFileInformationByHandle.Addr(), uintptr(handle), uintptr(class), uintptr(unsafe.Pointer(inBuffer)), uintptr(inBufferLen)) if r1 == 0 { err = errnoErr(e1) } @@ -3138,7 +3314,7 @@ func SetFileInformationByHandle(handle Handle, class uint32, inBuffer *byte, inB } func SetFilePointer(handle Handle, lowoffset int32, highoffsetptr *int32, whence uint32) (newlowoffset uint32, err error) { - r0, _, e1 := syscall.Syscall6(procSetFilePointer.Addr(), 4, uintptr(handle), uintptr(lowoffset), uintptr(unsafe.Pointer(highoffsetptr)), uintptr(whence), 0, 0) + r0, _, e1 := syscall.SyscallN(procSetFilePointer.Addr(), uintptr(handle), uintptr(lowoffset), uintptr(unsafe.Pointer(highoffsetptr)), uintptr(whence)) newlowoffset = uint32(r0) if newlowoffset == 0xffffffff { err = errnoErr(e1) @@ -3147,7 +3323,7 @@ func SetFilePointer(handle Handle, lowoffset int32, highoffsetptr *int32, whence } func SetFileTime(handle Handle, ctime *Filetime, atime *Filetime, wtime *Filetime) (err error) { - r1, _, e1 := syscall.Syscall6(procSetFileTime.Addr(), 4, uintptr(handle), uintptr(unsafe.Pointer(ctime)), uintptr(unsafe.Pointer(atime)), uintptr(unsafe.Pointer(wtime)), 0, 0) + r1, _, e1 := syscall.SyscallN(procSetFileTime.Addr(), uintptr(handle), uintptr(unsafe.Pointer(ctime)), uintptr(unsafe.Pointer(atime)), uintptr(unsafe.Pointer(wtime))) if r1 == 0 { err = errnoErr(e1) } @@ -3155,7 +3331,7 @@ func SetFileTime(handle Handle, ctime *Filetime, atime *Filetime, wtime *Filetim } func SetFileValidData(handle Handle, validDataLength int64) (err error) { - r1, _, e1 := syscall.Syscall(procSetFileValidData.Addr(), 2, uintptr(handle), uintptr(validDataLength), 0) + r1, _, e1 := syscall.SyscallN(procSetFileValidData.Addr(), uintptr(handle), uintptr(validDataLength)) if r1 == 0 { err = errnoErr(e1) } @@ -3163,7 +3339,7 @@ func SetFileValidData(handle Handle, validDataLength int64) (err error) { } func SetHandleInformation(handle Handle, mask uint32, flags uint32) (err error) { - r1, _, e1 := syscall.Syscall(procSetHandleInformation.Addr(), 3, uintptr(handle), uintptr(mask), uintptr(flags)) + r1, _, e1 := syscall.SyscallN(procSetHandleInformation.Addr(), uintptr(handle), uintptr(mask), uintptr(flags)) if r1 == 0 { err = errnoErr(e1) } @@ -3171,7 +3347,7 @@ func SetHandleInformation(handle Handle, mask uint32, flags uint32) (err error) } func SetInformationJobObject(job Handle, JobObjectInformationClass uint32, JobObjectInformation uintptr, JobObjectInformationLength uint32) (ret int, err error) { - r0, _, e1 := syscall.Syscall6(procSetInformationJobObject.Addr(), 4, uintptr(job), uintptr(JobObjectInformationClass), uintptr(JobObjectInformation), uintptr(JobObjectInformationLength), 0, 0) + r0, _, e1 := syscall.SyscallN(procSetInformationJobObject.Addr(), uintptr(job), uintptr(JobObjectInformationClass), uintptr(JobObjectInformation), uintptr(JobObjectInformationLength)) ret = int(r0) if ret == 0 { err = errnoErr(e1) @@ -3180,7 +3356,7 @@ func SetInformationJobObject(job Handle, JobObjectInformationClass uint32, JobOb } func SetNamedPipeHandleState(pipe Handle, state *uint32, maxCollectionCount *uint32, collectDataTimeout *uint32) (err error) { - r1, _, e1 := syscall.Syscall6(procSetNamedPipeHandleState.Addr(), 4, uintptr(pipe), uintptr(unsafe.Pointer(state)), uintptr(unsafe.Pointer(maxCollectionCount)), uintptr(unsafe.Pointer(collectDataTimeout)), 0, 0) + r1, _, e1 := syscall.SyscallN(procSetNamedPipeHandleState.Addr(), uintptr(pipe), uintptr(unsafe.Pointer(state)), uintptr(unsafe.Pointer(maxCollectionCount)), uintptr(unsafe.Pointer(collectDataTimeout))) if r1 == 0 { err = errnoErr(e1) } @@ -3188,7 +3364,7 @@ func SetNamedPipeHandleState(pipe Handle, state *uint32, maxCollectionCount *uin } func SetPriorityClass(process Handle, priorityClass uint32) (err error) { - r1, _, e1 := syscall.Syscall(procSetPriorityClass.Addr(), 2, uintptr(process), uintptr(priorityClass), 0) + r1, _, e1 := syscall.SyscallN(procSetPriorityClass.Addr(), uintptr(process), uintptr(priorityClass)) if r1 == 0 { err = errnoErr(e1) } @@ -3200,7 +3376,7 @@ func SetProcessPriorityBoost(process Handle, disable bool) (err error) { if disable { _p0 = 1 } - r1, _, e1 := syscall.Syscall(procSetProcessPriorityBoost.Addr(), 2, uintptr(process), uintptr(_p0), 0) + r1, _, e1 := syscall.SyscallN(procSetProcessPriorityBoost.Addr(), uintptr(process), uintptr(_p0)) if r1 == 0 { err = errnoErr(e1) } @@ -3208,7 +3384,7 @@ func SetProcessPriorityBoost(process Handle, disable bool) (err error) { } func SetProcessShutdownParameters(level uint32, flags uint32) (err error) { - r1, _, e1 := syscall.Syscall(procSetProcessShutdownParameters.Addr(), 2, uintptr(level), uintptr(flags), 0) + r1, _, e1 := syscall.SyscallN(procSetProcessShutdownParameters.Addr(), uintptr(level), uintptr(flags)) if r1 == 0 { err = errnoErr(e1) } @@ -3216,7 +3392,7 @@ func SetProcessShutdownParameters(level uint32, flags uint32) (err error) { } func SetProcessWorkingSetSizeEx(hProcess Handle, dwMinimumWorkingSetSize uintptr, dwMaximumWorkingSetSize uintptr, flags uint32) (err error) { - r1, _, e1 := syscall.Syscall6(procSetProcessWorkingSetSizeEx.Addr(), 4, uintptr(hProcess), uintptr(dwMinimumWorkingSetSize), uintptr(dwMaximumWorkingSetSize), uintptr(flags), 0, 0) + r1, _, e1 := syscall.SyscallN(procSetProcessWorkingSetSizeEx.Addr(), uintptr(hProcess), uintptr(dwMinimumWorkingSetSize), uintptr(dwMaximumWorkingSetSize), uintptr(flags)) if r1 == 0 { err = errnoErr(e1) } @@ -3224,7 +3400,7 @@ func SetProcessWorkingSetSizeEx(hProcess Handle, dwMinimumWorkingSetSize uintptr } func SetStdHandle(stdhandle uint32, handle Handle) (err error) { - r1, _, e1 := syscall.Syscall(procSetStdHandle.Addr(), 2, uintptr(stdhandle), uintptr(handle), 0) + r1, _, e1 := syscall.SyscallN(procSetStdHandle.Addr(), uintptr(stdhandle), uintptr(handle)) if r1 == 0 { err = errnoErr(e1) } @@ -3232,7 +3408,7 @@ func SetStdHandle(stdhandle uint32, handle Handle) (err error) { } func SetVolumeLabel(rootPathName *uint16, volumeName *uint16) (err error) { - r1, _, e1 := syscall.Syscall(procSetVolumeLabelW.Addr(), 2, uintptr(unsafe.Pointer(rootPathName)), uintptr(unsafe.Pointer(volumeName)), 0) + r1, _, e1 := syscall.SyscallN(procSetVolumeLabelW.Addr(), uintptr(unsafe.Pointer(rootPathName)), uintptr(unsafe.Pointer(volumeName))) if r1 == 0 { err = errnoErr(e1) } @@ -3240,7 +3416,7 @@ func SetVolumeLabel(rootPathName *uint16, volumeName *uint16) (err error) { } func SetVolumeMountPoint(volumeMountPoint *uint16, volumeName *uint16) (err error) { - r1, _, e1 := syscall.Syscall(procSetVolumeMountPointW.Addr(), 2, uintptr(unsafe.Pointer(volumeMountPoint)), uintptr(unsafe.Pointer(volumeName)), 0) + r1, _, e1 := syscall.SyscallN(procSetVolumeMountPointW.Addr(), uintptr(unsafe.Pointer(volumeMountPoint)), uintptr(unsafe.Pointer(volumeName))) if r1 == 0 { err = errnoErr(e1) } @@ -3248,7 +3424,7 @@ func SetVolumeMountPoint(volumeMountPoint *uint16, volumeName *uint16) (err erro } func SetupComm(handle Handle, dwInQueue uint32, dwOutQueue uint32) (err error) { - r1, _, e1 := syscall.Syscall(procSetupComm.Addr(), 3, uintptr(handle), uintptr(dwInQueue), uintptr(dwOutQueue)) + r1, _, e1 := syscall.SyscallN(procSetupComm.Addr(), uintptr(handle), uintptr(dwInQueue), uintptr(dwOutQueue)) if r1 == 0 { err = errnoErr(e1) } @@ -3256,7 +3432,7 @@ func SetupComm(handle Handle, dwInQueue uint32, dwOutQueue uint32) (err error) { } func SizeofResource(module Handle, resInfo Handle) (size uint32, err error) { - r0, _, e1 := syscall.Syscall(procSizeofResource.Addr(), 2, uintptr(module), uintptr(resInfo), 0) + r0, _, e1 := syscall.SyscallN(procSizeofResource.Addr(), uintptr(module), uintptr(resInfo)) size = uint32(r0) if size == 0 { err = errnoErr(e1) @@ -3269,13 +3445,13 @@ func SleepEx(milliseconds uint32, alertable bool) (ret uint32) { if alertable { _p0 = 1 } - r0, _, _ := syscall.Syscall(procSleepEx.Addr(), 2, uintptr(milliseconds), uintptr(_p0), 0) + r0, _, _ := syscall.SyscallN(procSleepEx.Addr(), uintptr(milliseconds), uintptr(_p0)) ret = uint32(r0) return } func TerminateJobObject(job Handle, exitCode uint32) (err error) { - r1, _, e1 := syscall.Syscall(procTerminateJobObject.Addr(), 2, uintptr(job), uintptr(exitCode), 0) + r1, _, e1 := syscall.SyscallN(procTerminateJobObject.Addr(), uintptr(job), uintptr(exitCode)) if r1 == 0 { err = errnoErr(e1) } @@ -3283,7 +3459,7 @@ func TerminateJobObject(job Handle, exitCode uint32) (err error) { } func TerminateProcess(handle Handle, exitcode uint32) (err error) { - r1, _, e1 := syscall.Syscall(procTerminateProcess.Addr(), 2, uintptr(handle), uintptr(exitcode), 0) + r1, _, e1 := syscall.SyscallN(procTerminateProcess.Addr(), uintptr(handle), uintptr(exitcode)) if r1 == 0 { err = errnoErr(e1) } @@ -3291,7 +3467,7 @@ func TerminateProcess(handle Handle, exitcode uint32) (err error) { } func Thread32First(snapshot Handle, threadEntry *ThreadEntry32) (err error) { - r1, _, e1 := syscall.Syscall(procThread32First.Addr(), 2, uintptr(snapshot), uintptr(unsafe.Pointer(threadEntry)), 0) + r1, _, e1 := syscall.SyscallN(procThread32First.Addr(), uintptr(snapshot), uintptr(unsafe.Pointer(threadEntry))) if r1 == 0 { err = errnoErr(e1) } @@ -3299,7 +3475,7 @@ func Thread32First(snapshot Handle, threadEntry *ThreadEntry32) (err error) { } func Thread32Next(snapshot Handle, threadEntry *ThreadEntry32) (err error) { - r1, _, e1 := syscall.Syscall(procThread32Next.Addr(), 2, uintptr(snapshot), uintptr(unsafe.Pointer(threadEntry)), 0) + r1, _, e1 := syscall.SyscallN(procThread32Next.Addr(), uintptr(snapshot), uintptr(unsafe.Pointer(threadEntry))) if r1 == 0 { err = errnoErr(e1) } @@ -3307,7 +3483,7 @@ func Thread32Next(snapshot Handle, threadEntry *ThreadEntry32) (err error) { } func UnlockFileEx(file Handle, reserved uint32, bytesLow uint32, bytesHigh uint32, overlapped *Overlapped) (err error) { - r1, _, e1 := syscall.Syscall6(procUnlockFileEx.Addr(), 5, uintptr(file), uintptr(reserved), uintptr(bytesLow), uintptr(bytesHigh), uintptr(unsafe.Pointer(overlapped)), 0) + r1, _, e1 := syscall.SyscallN(procUnlockFileEx.Addr(), uintptr(file), uintptr(reserved), uintptr(bytesLow), uintptr(bytesHigh), uintptr(unsafe.Pointer(overlapped))) if r1 == 0 { err = errnoErr(e1) } @@ -3315,7 +3491,7 @@ func UnlockFileEx(file Handle, reserved uint32, bytesLow uint32, bytesHigh uint3 } func UnmapViewOfFile(addr uintptr) (err error) { - r1, _, e1 := syscall.Syscall(procUnmapViewOfFile.Addr(), 1, uintptr(addr), 0, 0) + r1, _, e1 := syscall.SyscallN(procUnmapViewOfFile.Addr(), uintptr(addr)) if r1 == 0 { err = errnoErr(e1) } @@ -3323,7 +3499,7 @@ func UnmapViewOfFile(addr uintptr) (err error) { } func updateProcThreadAttribute(attrlist *ProcThreadAttributeList, flags uint32, attr uintptr, value unsafe.Pointer, size uintptr, prevvalue unsafe.Pointer, returnedsize *uintptr) (err error) { - r1, _, e1 := syscall.Syscall9(procUpdateProcThreadAttribute.Addr(), 7, uintptr(unsafe.Pointer(attrlist)), uintptr(flags), uintptr(attr), uintptr(value), uintptr(size), uintptr(prevvalue), uintptr(unsafe.Pointer(returnedsize)), 0, 0) + r1, _, e1 := syscall.SyscallN(procUpdateProcThreadAttribute.Addr(), uintptr(unsafe.Pointer(attrlist)), uintptr(flags), uintptr(attr), uintptr(value), uintptr(size), uintptr(prevvalue), uintptr(unsafe.Pointer(returnedsize))) if r1 == 0 { err = errnoErr(e1) } @@ -3331,7 +3507,7 @@ func updateProcThreadAttribute(attrlist *ProcThreadAttributeList, flags uint32, } func VirtualAlloc(address uintptr, size uintptr, alloctype uint32, protect uint32) (value uintptr, err error) { - r0, _, e1 := syscall.Syscall6(procVirtualAlloc.Addr(), 4, uintptr(address), uintptr(size), uintptr(alloctype), uintptr(protect), 0, 0) + r0, _, e1 := syscall.SyscallN(procVirtualAlloc.Addr(), uintptr(address), uintptr(size), uintptr(alloctype), uintptr(protect)) value = uintptr(r0) if value == 0 { err = errnoErr(e1) @@ -3340,7 +3516,7 @@ func VirtualAlloc(address uintptr, size uintptr, alloctype uint32, protect uint3 } func VirtualFree(address uintptr, size uintptr, freetype uint32) (err error) { - r1, _, e1 := syscall.Syscall(procVirtualFree.Addr(), 3, uintptr(address), uintptr(size), uintptr(freetype)) + r1, _, e1 := syscall.SyscallN(procVirtualFree.Addr(), uintptr(address), uintptr(size), uintptr(freetype)) if r1 == 0 { err = errnoErr(e1) } @@ -3348,7 +3524,7 @@ func VirtualFree(address uintptr, size uintptr, freetype uint32) (err error) { } func VirtualLock(addr uintptr, length uintptr) (err error) { - r1, _, e1 := syscall.Syscall(procVirtualLock.Addr(), 2, uintptr(addr), uintptr(length), 0) + r1, _, e1 := syscall.SyscallN(procVirtualLock.Addr(), uintptr(addr), uintptr(length)) if r1 == 0 { err = errnoErr(e1) } @@ -3356,7 +3532,7 @@ func VirtualLock(addr uintptr, length uintptr) (err error) { } func VirtualProtect(address uintptr, size uintptr, newprotect uint32, oldprotect *uint32) (err error) { - r1, _, e1 := syscall.Syscall6(procVirtualProtect.Addr(), 4, uintptr(address), uintptr(size), uintptr(newprotect), uintptr(unsafe.Pointer(oldprotect)), 0, 0) + r1, _, e1 := syscall.SyscallN(procVirtualProtect.Addr(), uintptr(address), uintptr(size), uintptr(newprotect), uintptr(unsafe.Pointer(oldprotect))) if r1 == 0 { err = errnoErr(e1) } @@ -3364,7 +3540,7 @@ func VirtualProtect(address uintptr, size uintptr, newprotect uint32, oldprotect } func VirtualProtectEx(process Handle, address uintptr, size uintptr, newProtect uint32, oldProtect *uint32) (err error) { - r1, _, e1 := syscall.Syscall6(procVirtualProtectEx.Addr(), 5, uintptr(process), uintptr(address), uintptr(size), uintptr(newProtect), uintptr(unsafe.Pointer(oldProtect)), 0) + r1, _, e1 := syscall.SyscallN(procVirtualProtectEx.Addr(), uintptr(process), uintptr(address), uintptr(size), uintptr(newProtect), uintptr(unsafe.Pointer(oldProtect))) if r1 == 0 { err = errnoErr(e1) } @@ -3372,7 +3548,7 @@ func VirtualProtectEx(process Handle, address uintptr, size uintptr, newProtect } func VirtualQuery(address uintptr, buffer *MemoryBasicInformation, length uintptr) (err error) { - r1, _, e1 := syscall.Syscall(procVirtualQuery.Addr(), 3, uintptr(address), uintptr(unsafe.Pointer(buffer)), uintptr(length)) + r1, _, e1 := syscall.SyscallN(procVirtualQuery.Addr(), uintptr(address), uintptr(unsafe.Pointer(buffer)), uintptr(length)) if r1 == 0 { err = errnoErr(e1) } @@ -3380,7 +3556,7 @@ func VirtualQuery(address uintptr, buffer *MemoryBasicInformation, length uintpt } func VirtualQueryEx(process Handle, address uintptr, buffer *MemoryBasicInformation, length uintptr) (err error) { - r1, _, e1 := syscall.Syscall6(procVirtualQueryEx.Addr(), 4, uintptr(process), uintptr(address), uintptr(unsafe.Pointer(buffer)), uintptr(length), 0, 0) + r1, _, e1 := syscall.SyscallN(procVirtualQueryEx.Addr(), uintptr(process), uintptr(address), uintptr(unsafe.Pointer(buffer)), uintptr(length)) if r1 == 0 { err = errnoErr(e1) } @@ -3388,7 +3564,7 @@ func VirtualQueryEx(process Handle, address uintptr, buffer *MemoryBasicInformat } func VirtualUnlock(addr uintptr, length uintptr) (err error) { - r1, _, e1 := syscall.Syscall(procVirtualUnlock.Addr(), 2, uintptr(addr), uintptr(length), 0) + r1, _, e1 := syscall.SyscallN(procVirtualUnlock.Addr(), uintptr(addr), uintptr(length)) if r1 == 0 { err = errnoErr(e1) } @@ -3396,13 +3572,13 @@ func VirtualUnlock(addr uintptr, length uintptr) (err error) { } func WTSGetActiveConsoleSessionId() (sessionID uint32) { - r0, _, _ := syscall.Syscall(procWTSGetActiveConsoleSessionId.Addr(), 0, 0, 0, 0) + r0, _, _ := syscall.SyscallN(procWTSGetActiveConsoleSessionId.Addr()) sessionID = uint32(r0) return } func WaitCommEvent(handle Handle, lpEvtMask *uint32, lpOverlapped *Overlapped) (err error) { - r1, _, e1 := syscall.Syscall(procWaitCommEvent.Addr(), 3, uintptr(handle), uintptr(unsafe.Pointer(lpEvtMask)), uintptr(unsafe.Pointer(lpOverlapped))) + r1, _, e1 := syscall.SyscallN(procWaitCommEvent.Addr(), uintptr(handle), uintptr(unsafe.Pointer(lpEvtMask)), uintptr(unsafe.Pointer(lpOverlapped))) if r1 == 0 { err = errnoErr(e1) } @@ -3414,7 +3590,7 @@ func waitForMultipleObjects(count uint32, handles uintptr, waitAll bool, waitMil if waitAll { _p0 = 1 } - r0, _, e1 := syscall.Syscall6(procWaitForMultipleObjects.Addr(), 4, uintptr(count), uintptr(handles), uintptr(_p0), uintptr(waitMilliseconds), 0, 0) + r0, _, e1 := syscall.SyscallN(procWaitForMultipleObjects.Addr(), uintptr(count), uintptr(handles), uintptr(_p0), uintptr(waitMilliseconds)) event = uint32(r0) if event == 0xffffffff { err = errnoErr(e1) @@ -3423,7 +3599,7 @@ func waitForMultipleObjects(count uint32, handles uintptr, waitAll bool, waitMil } func WaitForSingleObject(handle Handle, waitMilliseconds uint32) (event uint32, err error) { - r0, _, e1 := syscall.Syscall(procWaitForSingleObject.Addr(), 2, uintptr(handle), uintptr(waitMilliseconds), 0) + r0, _, e1 := syscall.SyscallN(procWaitForSingleObject.Addr(), uintptr(handle), uintptr(waitMilliseconds)) event = uint32(r0) if event == 0xffffffff { err = errnoErr(e1) @@ -3432,7 +3608,7 @@ func WaitForSingleObject(handle Handle, waitMilliseconds uint32) (event uint32, } func WriteConsole(console Handle, buf *uint16, towrite uint32, written *uint32, reserved *byte) (err error) { - r1, _, e1 := syscall.Syscall6(procWriteConsoleW.Addr(), 5, uintptr(console), uintptr(unsafe.Pointer(buf)), uintptr(towrite), uintptr(unsafe.Pointer(written)), uintptr(unsafe.Pointer(reserved)), 0) + r1, _, e1 := syscall.SyscallN(procWriteConsoleW.Addr(), uintptr(console), uintptr(unsafe.Pointer(buf)), uintptr(towrite), uintptr(unsafe.Pointer(written)), uintptr(unsafe.Pointer(reserved))) if r1 == 0 { err = errnoErr(e1) } @@ -3444,7 +3620,7 @@ func writeFile(handle Handle, buf []byte, done *uint32, overlapped *Overlapped) if len(buf) > 0 { _p0 = &buf[0] } - r1, _, e1 := syscall.Syscall6(procWriteFile.Addr(), 5, uintptr(handle), uintptr(unsafe.Pointer(_p0)), uintptr(len(buf)), uintptr(unsafe.Pointer(done)), uintptr(unsafe.Pointer(overlapped)), 0) + r1, _, e1 := syscall.SyscallN(procWriteFile.Addr(), uintptr(handle), uintptr(unsafe.Pointer(_p0)), uintptr(len(buf)), uintptr(unsafe.Pointer(done)), uintptr(unsafe.Pointer(overlapped))) if r1 == 0 { err = errnoErr(e1) } @@ -3452,7 +3628,7 @@ func writeFile(handle Handle, buf []byte, done *uint32, overlapped *Overlapped) } func WriteProcessMemory(process Handle, baseAddress uintptr, buffer *byte, size uintptr, numberOfBytesWritten *uintptr) (err error) { - r1, _, e1 := syscall.Syscall6(procWriteProcessMemory.Addr(), 5, uintptr(process), uintptr(baseAddress), uintptr(unsafe.Pointer(buffer)), uintptr(size), uintptr(unsafe.Pointer(numberOfBytesWritten)), 0) + r1, _, e1 := syscall.SyscallN(procWriteProcessMemory.Addr(), uintptr(process), uintptr(baseAddress), uintptr(unsafe.Pointer(buffer)), uintptr(size), uintptr(unsafe.Pointer(numberOfBytesWritten))) if r1 == 0 { err = errnoErr(e1) } @@ -3460,7 +3636,7 @@ func WriteProcessMemory(process Handle, baseAddress uintptr, buffer *byte, size } func AcceptEx(ls Handle, as Handle, buf *byte, rxdatalen uint32, laddrlen uint32, raddrlen uint32, recvd *uint32, overlapped *Overlapped) (err error) { - r1, _, e1 := syscall.Syscall9(procAcceptEx.Addr(), 8, uintptr(ls), uintptr(as), uintptr(unsafe.Pointer(buf)), uintptr(rxdatalen), uintptr(laddrlen), uintptr(raddrlen), uintptr(unsafe.Pointer(recvd)), uintptr(unsafe.Pointer(overlapped)), 0) + r1, _, e1 := syscall.SyscallN(procAcceptEx.Addr(), uintptr(ls), uintptr(as), uintptr(unsafe.Pointer(buf)), uintptr(rxdatalen), uintptr(laddrlen), uintptr(raddrlen), uintptr(unsafe.Pointer(recvd)), uintptr(unsafe.Pointer(overlapped))) if r1 == 0 { err = errnoErr(e1) } @@ -3468,12 +3644,12 @@ func AcceptEx(ls Handle, as Handle, buf *byte, rxdatalen uint32, laddrlen uint32 } func GetAcceptExSockaddrs(buf *byte, rxdatalen uint32, laddrlen uint32, raddrlen uint32, lrsa **RawSockaddrAny, lrsalen *int32, rrsa **RawSockaddrAny, rrsalen *int32) { - syscall.Syscall9(procGetAcceptExSockaddrs.Addr(), 8, uintptr(unsafe.Pointer(buf)), uintptr(rxdatalen), uintptr(laddrlen), uintptr(raddrlen), uintptr(unsafe.Pointer(lrsa)), uintptr(unsafe.Pointer(lrsalen)), uintptr(unsafe.Pointer(rrsa)), uintptr(unsafe.Pointer(rrsalen)), 0) + syscall.SyscallN(procGetAcceptExSockaddrs.Addr(), uintptr(unsafe.Pointer(buf)), uintptr(rxdatalen), uintptr(laddrlen), uintptr(raddrlen), uintptr(unsafe.Pointer(lrsa)), uintptr(unsafe.Pointer(lrsalen)), uintptr(unsafe.Pointer(rrsa)), uintptr(unsafe.Pointer(rrsalen))) return } func TransmitFile(s Handle, handle Handle, bytesToWrite uint32, bytsPerSend uint32, overlapped *Overlapped, transmitFileBuf *TransmitFileBuffers, flags uint32) (err error) { - r1, _, e1 := syscall.Syscall9(procTransmitFile.Addr(), 7, uintptr(s), uintptr(handle), uintptr(bytesToWrite), uintptr(bytsPerSend), uintptr(unsafe.Pointer(overlapped)), uintptr(unsafe.Pointer(transmitFileBuf)), uintptr(flags), 0, 0) + r1, _, e1 := syscall.SyscallN(procTransmitFile.Addr(), uintptr(s), uintptr(handle), uintptr(bytesToWrite), uintptr(bytsPerSend), uintptr(unsafe.Pointer(overlapped)), uintptr(unsafe.Pointer(transmitFileBuf)), uintptr(flags)) if r1 == 0 { err = errnoErr(e1) } @@ -3481,7 +3657,7 @@ func TransmitFile(s Handle, handle Handle, bytesToWrite uint32, bytsPerSend uint } func NetApiBufferFree(buf *byte) (neterr error) { - r0, _, _ := syscall.Syscall(procNetApiBufferFree.Addr(), 1, uintptr(unsafe.Pointer(buf)), 0, 0) + r0, _, _ := syscall.SyscallN(procNetApiBufferFree.Addr(), uintptr(unsafe.Pointer(buf))) if r0 != 0 { neterr = syscall.Errno(r0) } @@ -3489,7 +3665,7 @@ func NetApiBufferFree(buf *byte) (neterr error) { } func NetGetJoinInformation(server *uint16, name **uint16, bufType *uint32) (neterr error) { - r0, _, _ := syscall.Syscall(procNetGetJoinInformation.Addr(), 3, uintptr(unsafe.Pointer(server)), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(bufType))) + r0, _, _ := syscall.SyscallN(procNetGetJoinInformation.Addr(), uintptr(unsafe.Pointer(server)), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(bufType))) if r0 != 0 { neterr = syscall.Errno(r0) } @@ -3497,7 +3673,7 @@ func NetGetJoinInformation(server *uint16, name **uint16, bufType *uint32) (nete } func NetUserEnum(serverName *uint16, level uint32, filter uint32, buf **byte, prefMaxLen uint32, entriesRead *uint32, totalEntries *uint32, resumeHandle *uint32) (neterr error) { - r0, _, _ := syscall.Syscall9(procNetUserEnum.Addr(), 8, uintptr(unsafe.Pointer(serverName)), uintptr(level), uintptr(filter), uintptr(unsafe.Pointer(buf)), uintptr(prefMaxLen), uintptr(unsafe.Pointer(entriesRead)), uintptr(unsafe.Pointer(totalEntries)), uintptr(unsafe.Pointer(resumeHandle)), 0) + r0, _, _ := syscall.SyscallN(procNetUserEnum.Addr(), uintptr(unsafe.Pointer(serverName)), uintptr(level), uintptr(filter), uintptr(unsafe.Pointer(buf)), uintptr(prefMaxLen), uintptr(unsafe.Pointer(entriesRead)), uintptr(unsafe.Pointer(totalEntries)), uintptr(unsafe.Pointer(resumeHandle))) if r0 != 0 { neterr = syscall.Errno(r0) } @@ -3505,7 +3681,7 @@ func NetUserEnum(serverName *uint16, level uint32, filter uint32, buf **byte, pr } func NetUserGetInfo(serverName *uint16, userName *uint16, level uint32, buf **byte) (neterr error) { - r0, _, _ := syscall.Syscall6(procNetUserGetInfo.Addr(), 4, uintptr(unsafe.Pointer(serverName)), uintptr(unsafe.Pointer(userName)), uintptr(level), uintptr(unsafe.Pointer(buf)), 0, 0) + r0, _, _ := syscall.SyscallN(procNetUserGetInfo.Addr(), uintptr(unsafe.Pointer(serverName)), uintptr(unsafe.Pointer(userName)), uintptr(level), uintptr(unsafe.Pointer(buf))) if r0 != 0 { neterr = syscall.Errno(r0) } @@ -3513,7 +3689,7 @@ func NetUserGetInfo(serverName *uint16, userName *uint16, level uint32, buf **by } func NtCreateFile(handle *Handle, access uint32, oa *OBJECT_ATTRIBUTES, iosb *IO_STATUS_BLOCK, allocationSize *int64, attributes uint32, share uint32, disposition uint32, options uint32, eabuffer uintptr, ealength uint32) (ntstatus error) { - r0, _, _ := syscall.Syscall12(procNtCreateFile.Addr(), 11, uintptr(unsafe.Pointer(handle)), uintptr(access), uintptr(unsafe.Pointer(oa)), uintptr(unsafe.Pointer(iosb)), uintptr(unsafe.Pointer(allocationSize)), uintptr(attributes), uintptr(share), uintptr(disposition), uintptr(options), uintptr(eabuffer), uintptr(ealength), 0) + r0, _, _ := syscall.SyscallN(procNtCreateFile.Addr(), uintptr(unsafe.Pointer(handle)), uintptr(access), uintptr(unsafe.Pointer(oa)), uintptr(unsafe.Pointer(iosb)), uintptr(unsafe.Pointer(allocationSize)), uintptr(attributes), uintptr(share), uintptr(disposition), uintptr(options), uintptr(eabuffer), uintptr(ealength)) if r0 != 0 { ntstatus = NTStatus(r0) } @@ -3521,7 +3697,7 @@ func NtCreateFile(handle *Handle, access uint32, oa *OBJECT_ATTRIBUTES, iosb *IO } func NtCreateNamedPipeFile(pipe *Handle, access uint32, oa *OBJECT_ATTRIBUTES, iosb *IO_STATUS_BLOCK, share uint32, disposition uint32, options uint32, typ uint32, readMode uint32, completionMode uint32, maxInstances uint32, inboundQuota uint32, outputQuota uint32, timeout *int64) (ntstatus error) { - r0, _, _ := syscall.Syscall15(procNtCreateNamedPipeFile.Addr(), 14, uintptr(unsafe.Pointer(pipe)), uintptr(access), uintptr(unsafe.Pointer(oa)), uintptr(unsafe.Pointer(iosb)), uintptr(share), uintptr(disposition), uintptr(options), uintptr(typ), uintptr(readMode), uintptr(completionMode), uintptr(maxInstances), uintptr(inboundQuota), uintptr(outputQuota), uintptr(unsafe.Pointer(timeout)), 0) + r0, _, _ := syscall.SyscallN(procNtCreateNamedPipeFile.Addr(), uintptr(unsafe.Pointer(pipe)), uintptr(access), uintptr(unsafe.Pointer(oa)), uintptr(unsafe.Pointer(iosb)), uintptr(share), uintptr(disposition), uintptr(options), uintptr(typ), uintptr(readMode), uintptr(completionMode), uintptr(maxInstances), uintptr(inboundQuota), uintptr(outputQuota), uintptr(unsafe.Pointer(timeout))) if r0 != 0 { ntstatus = NTStatus(r0) } @@ -3529,7 +3705,7 @@ func NtCreateNamedPipeFile(pipe *Handle, access uint32, oa *OBJECT_ATTRIBUTES, i } func NtQueryInformationProcess(proc Handle, procInfoClass int32, procInfo unsafe.Pointer, procInfoLen uint32, retLen *uint32) (ntstatus error) { - r0, _, _ := syscall.Syscall6(procNtQueryInformationProcess.Addr(), 5, uintptr(proc), uintptr(procInfoClass), uintptr(procInfo), uintptr(procInfoLen), uintptr(unsafe.Pointer(retLen)), 0) + r0, _, _ := syscall.SyscallN(procNtQueryInformationProcess.Addr(), uintptr(proc), uintptr(procInfoClass), uintptr(procInfo), uintptr(procInfoLen), uintptr(unsafe.Pointer(retLen))) if r0 != 0 { ntstatus = NTStatus(r0) } @@ -3537,7 +3713,7 @@ func NtQueryInformationProcess(proc Handle, procInfoClass int32, procInfo unsafe } func NtQuerySystemInformation(sysInfoClass int32, sysInfo unsafe.Pointer, sysInfoLen uint32, retLen *uint32) (ntstatus error) { - r0, _, _ := syscall.Syscall6(procNtQuerySystemInformation.Addr(), 4, uintptr(sysInfoClass), uintptr(sysInfo), uintptr(sysInfoLen), uintptr(unsafe.Pointer(retLen)), 0, 0) + r0, _, _ := syscall.SyscallN(procNtQuerySystemInformation.Addr(), uintptr(sysInfoClass), uintptr(sysInfo), uintptr(sysInfoLen), uintptr(unsafe.Pointer(retLen))) if r0 != 0 { ntstatus = NTStatus(r0) } @@ -3545,7 +3721,7 @@ func NtQuerySystemInformation(sysInfoClass int32, sysInfo unsafe.Pointer, sysInf } func NtSetInformationFile(handle Handle, iosb *IO_STATUS_BLOCK, inBuffer *byte, inBufferLen uint32, class uint32) (ntstatus error) { - r0, _, _ := syscall.Syscall6(procNtSetInformationFile.Addr(), 5, uintptr(handle), uintptr(unsafe.Pointer(iosb)), uintptr(unsafe.Pointer(inBuffer)), uintptr(inBufferLen), uintptr(class), 0) + r0, _, _ := syscall.SyscallN(procNtSetInformationFile.Addr(), uintptr(handle), uintptr(unsafe.Pointer(iosb)), uintptr(unsafe.Pointer(inBuffer)), uintptr(inBufferLen), uintptr(class)) if r0 != 0 { ntstatus = NTStatus(r0) } @@ -3553,7 +3729,7 @@ func NtSetInformationFile(handle Handle, iosb *IO_STATUS_BLOCK, inBuffer *byte, } func NtSetInformationProcess(proc Handle, procInfoClass int32, procInfo unsafe.Pointer, procInfoLen uint32) (ntstatus error) { - r0, _, _ := syscall.Syscall6(procNtSetInformationProcess.Addr(), 4, uintptr(proc), uintptr(procInfoClass), uintptr(procInfo), uintptr(procInfoLen), 0, 0) + r0, _, _ := syscall.SyscallN(procNtSetInformationProcess.Addr(), uintptr(proc), uintptr(procInfoClass), uintptr(procInfo), uintptr(procInfoLen)) if r0 != 0 { ntstatus = NTStatus(r0) } @@ -3561,7 +3737,7 @@ func NtSetInformationProcess(proc Handle, procInfoClass int32, procInfo unsafe.P } func NtSetSystemInformation(sysInfoClass int32, sysInfo unsafe.Pointer, sysInfoLen uint32) (ntstatus error) { - r0, _, _ := syscall.Syscall(procNtSetSystemInformation.Addr(), 3, uintptr(sysInfoClass), uintptr(sysInfo), uintptr(sysInfoLen)) + r0, _, _ := syscall.SyscallN(procNtSetSystemInformation.Addr(), uintptr(sysInfoClass), uintptr(sysInfo), uintptr(sysInfoLen)) if r0 != 0 { ntstatus = NTStatus(r0) } @@ -3569,13 +3745,13 @@ func NtSetSystemInformation(sysInfoClass int32, sysInfo unsafe.Pointer, sysInfoL } func RtlAddFunctionTable(functionTable *RUNTIME_FUNCTION, entryCount uint32, baseAddress uintptr) (ret bool) { - r0, _, _ := syscall.Syscall(procRtlAddFunctionTable.Addr(), 3, uintptr(unsafe.Pointer(functionTable)), uintptr(entryCount), uintptr(baseAddress)) + r0, _, _ := syscall.SyscallN(procRtlAddFunctionTable.Addr(), uintptr(unsafe.Pointer(functionTable)), uintptr(entryCount), uintptr(baseAddress)) ret = r0 != 0 return } func RtlDefaultNpAcl(acl **ACL) (ntstatus error) { - r0, _, _ := syscall.Syscall(procRtlDefaultNpAcl.Addr(), 1, uintptr(unsafe.Pointer(acl)), 0, 0) + r0, _, _ := syscall.SyscallN(procRtlDefaultNpAcl.Addr(), uintptr(unsafe.Pointer(acl))) if r0 != 0 { ntstatus = NTStatus(r0) } @@ -3583,13 +3759,13 @@ func RtlDefaultNpAcl(acl **ACL) (ntstatus error) { } func RtlDeleteFunctionTable(functionTable *RUNTIME_FUNCTION) (ret bool) { - r0, _, _ := syscall.Syscall(procRtlDeleteFunctionTable.Addr(), 1, uintptr(unsafe.Pointer(functionTable)), 0, 0) + r0, _, _ := syscall.SyscallN(procRtlDeleteFunctionTable.Addr(), uintptr(unsafe.Pointer(functionTable))) ret = r0 != 0 return } func RtlDosPathNameToNtPathName(dosName *uint16, ntName *NTUnicodeString, ntFileNamePart *uint16, relativeName *RTL_RELATIVE_NAME) (ntstatus error) { - r0, _, _ := syscall.Syscall6(procRtlDosPathNameToNtPathName_U_WithStatus.Addr(), 4, uintptr(unsafe.Pointer(dosName)), uintptr(unsafe.Pointer(ntName)), uintptr(unsafe.Pointer(ntFileNamePart)), uintptr(unsafe.Pointer(relativeName)), 0, 0) + r0, _, _ := syscall.SyscallN(procRtlDosPathNameToNtPathName_U_WithStatus.Addr(), uintptr(unsafe.Pointer(dosName)), uintptr(unsafe.Pointer(ntName)), uintptr(unsafe.Pointer(ntFileNamePart)), uintptr(unsafe.Pointer(relativeName))) if r0 != 0 { ntstatus = NTStatus(r0) } @@ -3597,7 +3773,7 @@ func RtlDosPathNameToNtPathName(dosName *uint16, ntName *NTUnicodeString, ntFile } func RtlDosPathNameToRelativeNtPathName(dosName *uint16, ntName *NTUnicodeString, ntFileNamePart *uint16, relativeName *RTL_RELATIVE_NAME) (ntstatus error) { - r0, _, _ := syscall.Syscall6(procRtlDosPathNameToRelativeNtPathName_U_WithStatus.Addr(), 4, uintptr(unsafe.Pointer(dosName)), uintptr(unsafe.Pointer(ntName)), uintptr(unsafe.Pointer(ntFileNamePart)), uintptr(unsafe.Pointer(relativeName)), 0, 0) + r0, _, _ := syscall.SyscallN(procRtlDosPathNameToRelativeNtPathName_U_WithStatus.Addr(), uintptr(unsafe.Pointer(dosName)), uintptr(unsafe.Pointer(ntName)), uintptr(unsafe.Pointer(ntFileNamePart)), uintptr(unsafe.Pointer(relativeName))) if r0 != 0 { ntstatus = NTStatus(r0) } @@ -3605,18 +3781,18 @@ func RtlDosPathNameToRelativeNtPathName(dosName *uint16, ntName *NTUnicodeString } func RtlGetCurrentPeb() (peb *PEB) { - r0, _, _ := syscall.Syscall(procRtlGetCurrentPeb.Addr(), 0, 0, 0, 0) + r0, _, _ := syscall.SyscallN(procRtlGetCurrentPeb.Addr()) peb = (*PEB)(unsafe.Pointer(r0)) return } func rtlGetNtVersionNumbers(majorVersion *uint32, minorVersion *uint32, buildNumber *uint32) { - syscall.Syscall(procRtlGetNtVersionNumbers.Addr(), 3, uintptr(unsafe.Pointer(majorVersion)), uintptr(unsafe.Pointer(minorVersion)), uintptr(unsafe.Pointer(buildNumber))) + syscall.SyscallN(procRtlGetNtVersionNumbers.Addr(), uintptr(unsafe.Pointer(majorVersion)), uintptr(unsafe.Pointer(minorVersion)), uintptr(unsafe.Pointer(buildNumber))) return } func rtlGetVersion(info *OsVersionInfoEx) (ntstatus error) { - r0, _, _ := syscall.Syscall(procRtlGetVersion.Addr(), 1, uintptr(unsafe.Pointer(info)), 0, 0) + r0, _, _ := syscall.SyscallN(procRtlGetVersion.Addr(), uintptr(unsafe.Pointer(info))) if r0 != 0 { ntstatus = NTStatus(r0) } @@ -3624,23 +3800,23 @@ func rtlGetVersion(info *OsVersionInfoEx) (ntstatus error) { } func RtlInitString(destinationString *NTString, sourceString *byte) { - syscall.Syscall(procRtlInitString.Addr(), 2, uintptr(unsafe.Pointer(destinationString)), uintptr(unsafe.Pointer(sourceString)), 0) + syscall.SyscallN(procRtlInitString.Addr(), uintptr(unsafe.Pointer(destinationString)), uintptr(unsafe.Pointer(sourceString))) return } func RtlInitUnicodeString(destinationString *NTUnicodeString, sourceString *uint16) { - syscall.Syscall(procRtlInitUnicodeString.Addr(), 2, uintptr(unsafe.Pointer(destinationString)), uintptr(unsafe.Pointer(sourceString)), 0) + syscall.SyscallN(procRtlInitUnicodeString.Addr(), uintptr(unsafe.Pointer(destinationString)), uintptr(unsafe.Pointer(sourceString))) return } func rtlNtStatusToDosErrorNoTeb(ntstatus NTStatus) (ret syscall.Errno) { - r0, _, _ := syscall.Syscall(procRtlNtStatusToDosErrorNoTeb.Addr(), 1, uintptr(ntstatus), 0, 0) + r0, _, _ := syscall.SyscallN(procRtlNtStatusToDosErrorNoTeb.Addr(), uintptr(ntstatus)) ret = syscall.Errno(r0) return } func clsidFromString(lpsz *uint16, pclsid *GUID) (ret error) { - r0, _, _ := syscall.Syscall(procCLSIDFromString.Addr(), 2, uintptr(unsafe.Pointer(lpsz)), uintptr(unsafe.Pointer(pclsid)), 0) + r0, _, _ := syscall.SyscallN(procCLSIDFromString.Addr(), uintptr(unsafe.Pointer(lpsz)), uintptr(unsafe.Pointer(pclsid))) if r0 != 0 { ret = syscall.Errno(r0) } @@ -3648,7 +3824,7 @@ func clsidFromString(lpsz *uint16, pclsid *GUID) (ret error) { } func coCreateGuid(pguid *GUID) (ret error) { - r0, _, _ := syscall.Syscall(procCoCreateGuid.Addr(), 1, uintptr(unsafe.Pointer(pguid)), 0, 0) + r0, _, _ := syscall.SyscallN(procCoCreateGuid.Addr(), uintptr(unsafe.Pointer(pguid))) if r0 != 0 { ret = syscall.Errno(r0) } @@ -3656,7 +3832,7 @@ func coCreateGuid(pguid *GUID) (ret error) { } func CoGetObject(name *uint16, bindOpts *BIND_OPTS3, guid *GUID, functionTable **uintptr) (ret error) { - r0, _, _ := syscall.Syscall6(procCoGetObject.Addr(), 4, uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(bindOpts)), uintptr(unsafe.Pointer(guid)), uintptr(unsafe.Pointer(functionTable)), 0, 0) + r0, _, _ := syscall.SyscallN(procCoGetObject.Addr(), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(bindOpts)), uintptr(unsafe.Pointer(guid)), uintptr(unsafe.Pointer(functionTable))) if r0 != 0 { ret = syscall.Errno(r0) } @@ -3664,7 +3840,7 @@ func CoGetObject(name *uint16, bindOpts *BIND_OPTS3, guid *GUID, functionTable * } func CoInitializeEx(reserved uintptr, coInit uint32) (ret error) { - r0, _, _ := syscall.Syscall(procCoInitializeEx.Addr(), 2, uintptr(reserved), uintptr(coInit), 0) + r0, _, _ := syscall.SyscallN(procCoInitializeEx.Addr(), uintptr(reserved), uintptr(coInit)) if r0 != 0 { ret = syscall.Errno(r0) } @@ -3672,23 +3848,23 @@ func CoInitializeEx(reserved uintptr, coInit uint32) (ret error) { } func CoTaskMemFree(address unsafe.Pointer) { - syscall.Syscall(procCoTaskMemFree.Addr(), 1, uintptr(address), 0, 0) + syscall.SyscallN(procCoTaskMemFree.Addr(), uintptr(address)) return } func CoUninitialize() { - syscall.Syscall(procCoUninitialize.Addr(), 0, 0, 0, 0) + syscall.SyscallN(procCoUninitialize.Addr()) return } func stringFromGUID2(rguid *GUID, lpsz *uint16, cchMax int32) (chars int32) { - r0, _, _ := syscall.Syscall(procStringFromGUID2.Addr(), 3, uintptr(unsafe.Pointer(rguid)), uintptr(unsafe.Pointer(lpsz)), uintptr(cchMax)) + r0, _, _ := syscall.SyscallN(procStringFromGUID2.Addr(), uintptr(unsafe.Pointer(rguid)), uintptr(unsafe.Pointer(lpsz)), uintptr(cchMax)) chars = int32(r0) return } func EnumProcessModules(process Handle, module *Handle, cb uint32, cbNeeded *uint32) (err error) { - r1, _, e1 := syscall.Syscall6(procEnumProcessModules.Addr(), 4, uintptr(process), uintptr(unsafe.Pointer(module)), uintptr(cb), uintptr(unsafe.Pointer(cbNeeded)), 0, 0) + r1, _, e1 := syscall.SyscallN(procEnumProcessModules.Addr(), uintptr(process), uintptr(unsafe.Pointer(module)), uintptr(cb), uintptr(unsafe.Pointer(cbNeeded))) if r1 == 0 { err = errnoErr(e1) } @@ -3696,7 +3872,7 @@ func EnumProcessModules(process Handle, module *Handle, cb uint32, cbNeeded *uin } func EnumProcessModulesEx(process Handle, module *Handle, cb uint32, cbNeeded *uint32, filterFlag uint32) (err error) { - r1, _, e1 := syscall.Syscall6(procEnumProcessModulesEx.Addr(), 5, uintptr(process), uintptr(unsafe.Pointer(module)), uintptr(cb), uintptr(unsafe.Pointer(cbNeeded)), uintptr(filterFlag), 0) + r1, _, e1 := syscall.SyscallN(procEnumProcessModulesEx.Addr(), uintptr(process), uintptr(unsafe.Pointer(module)), uintptr(cb), uintptr(unsafe.Pointer(cbNeeded)), uintptr(filterFlag)) if r1 == 0 { err = errnoErr(e1) } @@ -3704,7 +3880,7 @@ func EnumProcessModulesEx(process Handle, module *Handle, cb uint32, cbNeeded *u } func enumProcesses(processIds *uint32, nSize uint32, bytesReturned *uint32) (err error) { - r1, _, e1 := syscall.Syscall(procEnumProcesses.Addr(), 3, uintptr(unsafe.Pointer(processIds)), uintptr(nSize), uintptr(unsafe.Pointer(bytesReturned))) + r1, _, e1 := syscall.SyscallN(procEnumProcesses.Addr(), uintptr(unsafe.Pointer(processIds)), uintptr(nSize), uintptr(unsafe.Pointer(bytesReturned))) if r1 == 0 { err = errnoErr(e1) } @@ -3712,7 +3888,7 @@ func enumProcesses(processIds *uint32, nSize uint32, bytesReturned *uint32) (err } func GetModuleBaseName(process Handle, module Handle, baseName *uint16, size uint32) (err error) { - r1, _, e1 := syscall.Syscall6(procGetModuleBaseNameW.Addr(), 4, uintptr(process), uintptr(module), uintptr(unsafe.Pointer(baseName)), uintptr(size), 0, 0) + r1, _, e1 := syscall.SyscallN(procGetModuleBaseNameW.Addr(), uintptr(process), uintptr(module), uintptr(unsafe.Pointer(baseName)), uintptr(size)) if r1 == 0 { err = errnoErr(e1) } @@ -3720,7 +3896,7 @@ func GetModuleBaseName(process Handle, module Handle, baseName *uint16, size uin } func GetModuleFileNameEx(process Handle, module Handle, filename *uint16, size uint32) (err error) { - r1, _, e1 := syscall.Syscall6(procGetModuleFileNameExW.Addr(), 4, uintptr(process), uintptr(module), uintptr(unsafe.Pointer(filename)), uintptr(size), 0, 0) + r1, _, e1 := syscall.SyscallN(procGetModuleFileNameExW.Addr(), uintptr(process), uintptr(module), uintptr(unsafe.Pointer(filename)), uintptr(size)) if r1 == 0 { err = errnoErr(e1) } @@ -3728,7 +3904,7 @@ func GetModuleFileNameEx(process Handle, module Handle, filename *uint16, size u } func GetModuleInformation(process Handle, module Handle, modinfo *ModuleInfo, cb uint32) (err error) { - r1, _, e1 := syscall.Syscall6(procGetModuleInformation.Addr(), 4, uintptr(process), uintptr(module), uintptr(unsafe.Pointer(modinfo)), uintptr(cb), 0, 0) + r1, _, e1 := syscall.SyscallN(procGetModuleInformation.Addr(), uintptr(process), uintptr(module), uintptr(unsafe.Pointer(modinfo)), uintptr(cb)) if r1 == 0 { err = errnoErr(e1) } @@ -3736,7 +3912,7 @@ func GetModuleInformation(process Handle, module Handle, modinfo *ModuleInfo, cb } func QueryWorkingSetEx(process Handle, pv uintptr, cb uint32) (err error) { - r1, _, e1 := syscall.Syscall(procQueryWorkingSetEx.Addr(), 3, uintptr(process), uintptr(pv), uintptr(cb)) + r1, _, e1 := syscall.SyscallN(procQueryWorkingSetEx.Addr(), uintptr(process), uintptr(pv), uintptr(cb)) if r1 == 0 { err = errnoErr(e1) } @@ -3748,7 +3924,7 @@ func SubscribeServiceChangeNotifications(service Handle, eventType uint32, callb if ret != nil { return } - r0, _, _ := syscall.Syscall6(procSubscribeServiceChangeNotifications.Addr(), 5, uintptr(service), uintptr(eventType), uintptr(callback), uintptr(callbackCtx), uintptr(unsafe.Pointer(subscription)), 0) + r0, _, _ := syscall.SyscallN(procSubscribeServiceChangeNotifications.Addr(), uintptr(service), uintptr(eventType), uintptr(callback), uintptr(callbackCtx), uintptr(unsafe.Pointer(subscription))) if r0 != 0 { ret = syscall.Errno(r0) } @@ -3760,12 +3936,12 @@ func UnsubscribeServiceChangeNotifications(subscription uintptr) (err error) { if err != nil { return } - syscall.Syscall(procUnsubscribeServiceChangeNotifications.Addr(), 1, uintptr(subscription), 0, 0) + syscall.SyscallN(procUnsubscribeServiceChangeNotifications.Addr(), uintptr(subscription)) return } func GetUserNameEx(nameFormat uint32, nameBuffre *uint16, nSize *uint32) (err error) { - r1, _, e1 := syscall.Syscall(procGetUserNameExW.Addr(), 3, uintptr(nameFormat), uintptr(unsafe.Pointer(nameBuffre)), uintptr(unsafe.Pointer(nSize))) + r1, _, e1 := syscall.SyscallN(procGetUserNameExW.Addr(), uintptr(nameFormat), uintptr(unsafe.Pointer(nameBuffre)), uintptr(unsafe.Pointer(nSize))) if r1&0xff == 0 { err = errnoErr(e1) } @@ -3773,7 +3949,7 @@ func GetUserNameEx(nameFormat uint32, nameBuffre *uint16, nSize *uint32) (err er } func TranslateName(accName *uint16, accNameFormat uint32, desiredNameFormat uint32, translatedName *uint16, nSize *uint32) (err error) { - r1, _, e1 := syscall.Syscall6(procTranslateNameW.Addr(), 5, uintptr(unsafe.Pointer(accName)), uintptr(accNameFormat), uintptr(desiredNameFormat), uintptr(unsafe.Pointer(translatedName)), uintptr(unsafe.Pointer(nSize)), 0) + r1, _, e1 := syscall.SyscallN(procTranslateNameW.Addr(), uintptr(unsafe.Pointer(accName)), uintptr(accNameFormat), uintptr(desiredNameFormat), uintptr(unsafe.Pointer(translatedName)), uintptr(unsafe.Pointer(nSize))) if r1&0xff == 0 { err = errnoErr(e1) } @@ -3781,7 +3957,7 @@ func TranslateName(accName *uint16, accNameFormat uint32, desiredNameFormat uint } func SetupDiBuildDriverInfoList(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, driverType SPDIT) (err error) { - r1, _, e1 := syscall.Syscall(procSetupDiBuildDriverInfoList.Addr(), 3, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(driverType)) + r1, _, e1 := syscall.SyscallN(procSetupDiBuildDriverInfoList.Addr(), uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(driverType)) if r1 == 0 { err = errnoErr(e1) } @@ -3789,7 +3965,7 @@ func SetupDiBuildDriverInfoList(deviceInfoSet DevInfo, deviceInfoData *DevInfoDa } func SetupDiCallClassInstaller(installFunction DI_FUNCTION, deviceInfoSet DevInfo, deviceInfoData *DevInfoData) (err error) { - r1, _, e1 := syscall.Syscall(procSetupDiCallClassInstaller.Addr(), 3, uintptr(installFunction), uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData))) + r1, _, e1 := syscall.SyscallN(procSetupDiCallClassInstaller.Addr(), uintptr(installFunction), uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData))) if r1 == 0 { err = errnoErr(e1) } @@ -3797,7 +3973,7 @@ func SetupDiCallClassInstaller(installFunction DI_FUNCTION, deviceInfoSet DevInf } func SetupDiCancelDriverInfoSearch(deviceInfoSet DevInfo) (err error) { - r1, _, e1 := syscall.Syscall(procSetupDiCancelDriverInfoSearch.Addr(), 1, uintptr(deviceInfoSet), 0, 0) + r1, _, e1 := syscall.SyscallN(procSetupDiCancelDriverInfoSearch.Addr(), uintptr(deviceInfoSet)) if r1 == 0 { err = errnoErr(e1) } @@ -3805,7 +3981,7 @@ func SetupDiCancelDriverInfoSearch(deviceInfoSet DevInfo) (err error) { } func setupDiClassGuidsFromNameEx(className *uint16, classGuidList *GUID, classGuidListSize uint32, requiredSize *uint32, machineName *uint16, reserved uintptr) (err error) { - r1, _, e1 := syscall.Syscall6(procSetupDiClassGuidsFromNameExW.Addr(), 6, uintptr(unsafe.Pointer(className)), uintptr(unsafe.Pointer(classGuidList)), uintptr(classGuidListSize), uintptr(unsafe.Pointer(requiredSize)), uintptr(unsafe.Pointer(machineName)), uintptr(reserved)) + r1, _, e1 := syscall.SyscallN(procSetupDiClassGuidsFromNameExW.Addr(), uintptr(unsafe.Pointer(className)), uintptr(unsafe.Pointer(classGuidList)), uintptr(classGuidListSize), uintptr(unsafe.Pointer(requiredSize)), uintptr(unsafe.Pointer(machineName)), uintptr(reserved)) if r1 == 0 { err = errnoErr(e1) } @@ -3813,7 +3989,7 @@ func setupDiClassGuidsFromNameEx(className *uint16, classGuidList *GUID, classGu } func setupDiClassNameFromGuidEx(classGUID *GUID, className *uint16, classNameSize uint32, requiredSize *uint32, machineName *uint16, reserved uintptr) (err error) { - r1, _, e1 := syscall.Syscall6(procSetupDiClassNameFromGuidExW.Addr(), 6, uintptr(unsafe.Pointer(classGUID)), uintptr(unsafe.Pointer(className)), uintptr(classNameSize), uintptr(unsafe.Pointer(requiredSize)), uintptr(unsafe.Pointer(machineName)), uintptr(reserved)) + r1, _, e1 := syscall.SyscallN(procSetupDiClassNameFromGuidExW.Addr(), uintptr(unsafe.Pointer(classGUID)), uintptr(unsafe.Pointer(className)), uintptr(classNameSize), uintptr(unsafe.Pointer(requiredSize)), uintptr(unsafe.Pointer(machineName)), uintptr(reserved)) if r1 == 0 { err = errnoErr(e1) } @@ -3821,7 +3997,7 @@ func setupDiClassNameFromGuidEx(classGUID *GUID, className *uint16, classNameSiz } func setupDiCreateDeviceInfoListEx(classGUID *GUID, hwndParent uintptr, machineName *uint16, reserved uintptr) (handle DevInfo, err error) { - r0, _, e1 := syscall.Syscall6(procSetupDiCreateDeviceInfoListExW.Addr(), 4, uintptr(unsafe.Pointer(classGUID)), uintptr(hwndParent), uintptr(unsafe.Pointer(machineName)), uintptr(reserved), 0, 0) + r0, _, e1 := syscall.SyscallN(procSetupDiCreateDeviceInfoListExW.Addr(), uintptr(unsafe.Pointer(classGUID)), uintptr(hwndParent), uintptr(unsafe.Pointer(machineName)), uintptr(reserved)) handle = DevInfo(r0) if handle == DevInfo(InvalidHandle) { err = errnoErr(e1) @@ -3830,7 +4006,7 @@ func setupDiCreateDeviceInfoListEx(classGUID *GUID, hwndParent uintptr, machineN } func setupDiCreateDeviceInfo(deviceInfoSet DevInfo, DeviceName *uint16, classGUID *GUID, DeviceDescription *uint16, hwndParent uintptr, CreationFlags DICD, deviceInfoData *DevInfoData) (err error) { - r1, _, e1 := syscall.Syscall9(procSetupDiCreateDeviceInfoW.Addr(), 7, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(DeviceName)), uintptr(unsafe.Pointer(classGUID)), uintptr(unsafe.Pointer(DeviceDescription)), uintptr(hwndParent), uintptr(CreationFlags), uintptr(unsafe.Pointer(deviceInfoData)), 0, 0) + r1, _, e1 := syscall.SyscallN(procSetupDiCreateDeviceInfoW.Addr(), uintptr(deviceInfoSet), uintptr(unsafe.Pointer(DeviceName)), uintptr(unsafe.Pointer(classGUID)), uintptr(unsafe.Pointer(DeviceDescription)), uintptr(hwndParent), uintptr(CreationFlags), uintptr(unsafe.Pointer(deviceInfoData))) if r1 == 0 { err = errnoErr(e1) } @@ -3838,7 +4014,7 @@ func setupDiCreateDeviceInfo(deviceInfoSet DevInfo, DeviceName *uint16, classGUI } func SetupDiDestroyDeviceInfoList(deviceInfoSet DevInfo) (err error) { - r1, _, e1 := syscall.Syscall(procSetupDiDestroyDeviceInfoList.Addr(), 1, uintptr(deviceInfoSet), 0, 0) + r1, _, e1 := syscall.SyscallN(procSetupDiDestroyDeviceInfoList.Addr(), uintptr(deviceInfoSet)) if r1 == 0 { err = errnoErr(e1) } @@ -3846,7 +4022,7 @@ func SetupDiDestroyDeviceInfoList(deviceInfoSet DevInfo) (err error) { } func SetupDiDestroyDriverInfoList(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, driverType SPDIT) (err error) { - r1, _, e1 := syscall.Syscall(procSetupDiDestroyDriverInfoList.Addr(), 3, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(driverType)) + r1, _, e1 := syscall.SyscallN(procSetupDiDestroyDriverInfoList.Addr(), uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(driverType)) if r1 == 0 { err = errnoErr(e1) } @@ -3854,7 +4030,7 @@ func SetupDiDestroyDriverInfoList(deviceInfoSet DevInfo, deviceInfoData *DevInfo } func setupDiEnumDeviceInfo(deviceInfoSet DevInfo, memberIndex uint32, deviceInfoData *DevInfoData) (err error) { - r1, _, e1 := syscall.Syscall(procSetupDiEnumDeviceInfo.Addr(), 3, uintptr(deviceInfoSet), uintptr(memberIndex), uintptr(unsafe.Pointer(deviceInfoData))) + r1, _, e1 := syscall.SyscallN(procSetupDiEnumDeviceInfo.Addr(), uintptr(deviceInfoSet), uintptr(memberIndex), uintptr(unsafe.Pointer(deviceInfoData))) if r1 == 0 { err = errnoErr(e1) } @@ -3862,7 +4038,7 @@ func setupDiEnumDeviceInfo(deviceInfoSet DevInfo, memberIndex uint32, deviceInfo } func setupDiEnumDriverInfo(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, driverType SPDIT, memberIndex uint32, driverInfoData *DrvInfoData) (err error) { - r1, _, e1 := syscall.Syscall6(procSetupDiEnumDriverInfoW.Addr(), 5, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(driverType), uintptr(memberIndex), uintptr(unsafe.Pointer(driverInfoData)), 0) + r1, _, e1 := syscall.SyscallN(procSetupDiEnumDriverInfoW.Addr(), uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(driverType), uintptr(memberIndex), uintptr(unsafe.Pointer(driverInfoData))) if r1 == 0 { err = errnoErr(e1) } @@ -3870,7 +4046,7 @@ func setupDiEnumDriverInfo(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, d } func setupDiGetClassDevsEx(classGUID *GUID, Enumerator *uint16, hwndParent uintptr, Flags DIGCF, deviceInfoSet DevInfo, machineName *uint16, reserved uintptr) (handle DevInfo, err error) { - r0, _, e1 := syscall.Syscall9(procSetupDiGetClassDevsExW.Addr(), 7, uintptr(unsafe.Pointer(classGUID)), uintptr(unsafe.Pointer(Enumerator)), uintptr(hwndParent), uintptr(Flags), uintptr(deviceInfoSet), uintptr(unsafe.Pointer(machineName)), uintptr(reserved), 0, 0) + r0, _, e1 := syscall.SyscallN(procSetupDiGetClassDevsExW.Addr(), uintptr(unsafe.Pointer(classGUID)), uintptr(unsafe.Pointer(Enumerator)), uintptr(hwndParent), uintptr(Flags), uintptr(deviceInfoSet), uintptr(unsafe.Pointer(machineName)), uintptr(reserved)) handle = DevInfo(r0) if handle == DevInfo(InvalidHandle) { err = errnoErr(e1) @@ -3879,7 +4055,7 @@ func setupDiGetClassDevsEx(classGUID *GUID, Enumerator *uint16, hwndParent uintp } func SetupDiGetClassInstallParams(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, classInstallParams *ClassInstallHeader, classInstallParamsSize uint32, requiredSize *uint32) (err error) { - r1, _, e1 := syscall.Syscall6(procSetupDiGetClassInstallParamsW.Addr(), 5, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(unsafe.Pointer(classInstallParams)), uintptr(classInstallParamsSize), uintptr(unsafe.Pointer(requiredSize)), 0) + r1, _, e1 := syscall.SyscallN(procSetupDiGetClassInstallParamsW.Addr(), uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(unsafe.Pointer(classInstallParams)), uintptr(classInstallParamsSize), uintptr(unsafe.Pointer(requiredSize))) if r1 == 0 { err = errnoErr(e1) } @@ -3887,7 +4063,7 @@ func SetupDiGetClassInstallParams(deviceInfoSet DevInfo, deviceInfoData *DevInfo } func setupDiGetDeviceInfoListDetail(deviceInfoSet DevInfo, deviceInfoSetDetailData *DevInfoListDetailData) (err error) { - r1, _, e1 := syscall.Syscall(procSetupDiGetDeviceInfoListDetailW.Addr(), 2, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoSetDetailData)), 0) + r1, _, e1 := syscall.SyscallN(procSetupDiGetDeviceInfoListDetailW.Addr(), uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoSetDetailData))) if r1 == 0 { err = errnoErr(e1) } @@ -3895,7 +4071,7 @@ func setupDiGetDeviceInfoListDetail(deviceInfoSet DevInfo, deviceInfoSetDetailDa } func setupDiGetDeviceInstallParams(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, deviceInstallParams *DevInstallParams) (err error) { - r1, _, e1 := syscall.Syscall(procSetupDiGetDeviceInstallParamsW.Addr(), 3, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(unsafe.Pointer(deviceInstallParams))) + r1, _, e1 := syscall.SyscallN(procSetupDiGetDeviceInstallParamsW.Addr(), uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(unsafe.Pointer(deviceInstallParams))) if r1 == 0 { err = errnoErr(e1) } @@ -3903,7 +4079,7 @@ func setupDiGetDeviceInstallParams(deviceInfoSet DevInfo, deviceInfoData *DevInf } func setupDiGetDeviceInstanceId(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, instanceId *uint16, instanceIdSize uint32, instanceIdRequiredSize *uint32) (err error) { - r1, _, e1 := syscall.Syscall6(procSetupDiGetDeviceInstanceIdW.Addr(), 5, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(unsafe.Pointer(instanceId)), uintptr(instanceIdSize), uintptr(unsafe.Pointer(instanceIdRequiredSize)), 0) + r1, _, e1 := syscall.SyscallN(procSetupDiGetDeviceInstanceIdW.Addr(), uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(unsafe.Pointer(instanceId)), uintptr(instanceIdSize), uintptr(unsafe.Pointer(instanceIdRequiredSize))) if r1 == 0 { err = errnoErr(e1) } @@ -3911,7 +4087,7 @@ func setupDiGetDeviceInstanceId(deviceInfoSet DevInfo, deviceInfoData *DevInfoDa } func setupDiGetDeviceProperty(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, propertyKey *DEVPROPKEY, propertyType *DEVPROPTYPE, propertyBuffer *byte, propertyBufferSize uint32, requiredSize *uint32, flags uint32) (err error) { - r1, _, e1 := syscall.Syscall9(procSetupDiGetDevicePropertyW.Addr(), 8, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(unsafe.Pointer(propertyKey)), uintptr(unsafe.Pointer(propertyType)), uintptr(unsafe.Pointer(propertyBuffer)), uintptr(propertyBufferSize), uintptr(unsafe.Pointer(requiredSize)), uintptr(flags), 0) + r1, _, e1 := syscall.SyscallN(procSetupDiGetDevicePropertyW.Addr(), uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(unsafe.Pointer(propertyKey)), uintptr(unsafe.Pointer(propertyType)), uintptr(unsafe.Pointer(propertyBuffer)), uintptr(propertyBufferSize), uintptr(unsafe.Pointer(requiredSize)), uintptr(flags)) if r1 == 0 { err = errnoErr(e1) } @@ -3919,7 +4095,7 @@ func setupDiGetDeviceProperty(deviceInfoSet DevInfo, deviceInfoData *DevInfoData } func setupDiGetDeviceRegistryProperty(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, property SPDRP, propertyRegDataType *uint32, propertyBuffer *byte, propertyBufferSize uint32, requiredSize *uint32) (err error) { - r1, _, e1 := syscall.Syscall9(procSetupDiGetDeviceRegistryPropertyW.Addr(), 7, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(property), uintptr(unsafe.Pointer(propertyRegDataType)), uintptr(unsafe.Pointer(propertyBuffer)), uintptr(propertyBufferSize), uintptr(unsafe.Pointer(requiredSize)), 0, 0) + r1, _, e1 := syscall.SyscallN(procSetupDiGetDeviceRegistryPropertyW.Addr(), uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(property), uintptr(unsafe.Pointer(propertyRegDataType)), uintptr(unsafe.Pointer(propertyBuffer)), uintptr(propertyBufferSize), uintptr(unsafe.Pointer(requiredSize))) if r1 == 0 { err = errnoErr(e1) } @@ -3927,7 +4103,7 @@ func setupDiGetDeviceRegistryProperty(deviceInfoSet DevInfo, deviceInfoData *Dev } func setupDiGetDriverInfoDetail(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, driverInfoData *DrvInfoData, driverInfoDetailData *DrvInfoDetailData, driverInfoDetailDataSize uint32, requiredSize *uint32) (err error) { - r1, _, e1 := syscall.Syscall6(procSetupDiGetDriverInfoDetailW.Addr(), 6, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(unsafe.Pointer(driverInfoData)), uintptr(unsafe.Pointer(driverInfoDetailData)), uintptr(driverInfoDetailDataSize), uintptr(unsafe.Pointer(requiredSize))) + r1, _, e1 := syscall.SyscallN(procSetupDiGetDriverInfoDetailW.Addr(), uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(unsafe.Pointer(driverInfoData)), uintptr(unsafe.Pointer(driverInfoDetailData)), uintptr(driverInfoDetailDataSize), uintptr(unsafe.Pointer(requiredSize))) if r1 == 0 { err = errnoErr(e1) } @@ -3935,7 +4111,7 @@ func setupDiGetDriverInfoDetail(deviceInfoSet DevInfo, deviceInfoData *DevInfoDa } func setupDiGetSelectedDevice(deviceInfoSet DevInfo, deviceInfoData *DevInfoData) (err error) { - r1, _, e1 := syscall.Syscall(procSetupDiGetSelectedDevice.Addr(), 2, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), 0) + r1, _, e1 := syscall.SyscallN(procSetupDiGetSelectedDevice.Addr(), uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData))) if r1 == 0 { err = errnoErr(e1) } @@ -3943,7 +4119,7 @@ func setupDiGetSelectedDevice(deviceInfoSet DevInfo, deviceInfoData *DevInfoData } func setupDiGetSelectedDriver(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, driverInfoData *DrvInfoData) (err error) { - r1, _, e1 := syscall.Syscall(procSetupDiGetSelectedDriverW.Addr(), 3, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(unsafe.Pointer(driverInfoData))) + r1, _, e1 := syscall.SyscallN(procSetupDiGetSelectedDriverW.Addr(), uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(unsafe.Pointer(driverInfoData))) if r1 == 0 { err = errnoErr(e1) } @@ -3951,7 +4127,7 @@ func setupDiGetSelectedDriver(deviceInfoSet DevInfo, deviceInfoData *DevInfoData } func SetupDiOpenDevRegKey(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, Scope DICS_FLAG, HwProfile uint32, KeyType DIREG, samDesired uint32) (key Handle, err error) { - r0, _, e1 := syscall.Syscall6(procSetupDiOpenDevRegKey.Addr(), 6, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(Scope), uintptr(HwProfile), uintptr(KeyType), uintptr(samDesired)) + r0, _, e1 := syscall.SyscallN(procSetupDiOpenDevRegKey.Addr(), uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(Scope), uintptr(HwProfile), uintptr(KeyType), uintptr(samDesired)) key = Handle(r0) if key == InvalidHandle { err = errnoErr(e1) @@ -3960,7 +4136,7 @@ func SetupDiOpenDevRegKey(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, Sc } func SetupDiSetClassInstallParams(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, classInstallParams *ClassInstallHeader, classInstallParamsSize uint32) (err error) { - r1, _, e1 := syscall.Syscall6(procSetupDiSetClassInstallParamsW.Addr(), 4, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(unsafe.Pointer(classInstallParams)), uintptr(classInstallParamsSize), 0, 0) + r1, _, e1 := syscall.SyscallN(procSetupDiSetClassInstallParamsW.Addr(), uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(unsafe.Pointer(classInstallParams)), uintptr(classInstallParamsSize)) if r1 == 0 { err = errnoErr(e1) } @@ -3968,7 +4144,7 @@ func SetupDiSetClassInstallParams(deviceInfoSet DevInfo, deviceInfoData *DevInfo } func SetupDiSetDeviceInstallParams(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, deviceInstallParams *DevInstallParams) (err error) { - r1, _, e1 := syscall.Syscall(procSetupDiSetDeviceInstallParamsW.Addr(), 3, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(unsafe.Pointer(deviceInstallParams))) + r1, _, e1 := syscall.SyscallN(procSetupDiSetDeviceInstallParamsW.Addr(), uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(unsafe.Pointer(deviceInstallParams))) if r1 == 0 { err = errnoErr(e1) } @@ -3976,7 +4152,7 @@ func SetupDiSetDeviceInstallParams(deviceInfoSet DevInfo, deviceInfoData *DevInf } func setupDiSetDeviceRegistryProperty(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, property SPDRP, propertyBuffer *byte, propertyBufferSize uint32) (err error) { - r1, _, e1 := syscall.Syscall6(procSetupDiSetDeviceRegistryPropertyW.Addr(), 5, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(property), uintptr(unsafe.Pointer(propertyBuffer)), uintptr(propertyBufferSize), 0) + r1, _, e1 := syscall.SyscallN(procSetupDiSetDeviceRegistryPropertyW.Addr(), uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(property), uintptr(unsafe.Pointer(propertyBuffer)), uintptr(propertyBufferSize)) if r1 == 0 { err = errnoErr(e1) } @@ -3984,7 +4160,7 @@ func setupDiSetDeviceRegistryProperty(deviceInfoSet DevInfo, deviceInfoData *Dev } func SetupDiSetSelectedDevice(deviceInfoSet DevInfo, deviceInfoData *DevInfoData) (err error) { - r1, _, e1 := syscall.Syscall(procSetupDiSetSelectedDevice.Addr(), 2, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), 0) + r1, _, e1 := syscall.SyscallN(procSetupDiSetSelectedDevice.Addr(), uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData))) if r1 == 0 { err = errnoErr(e1) } @@ -3992,7 +4168,7 @@ func SetupDiSetSelectedDevice(deviceInfoSet DevInfo, deviceInfoData *DevInfoData } func SetupDiSetSelectedDriver(deviceInfoSet DevInfo, deviceInfoData *DevInfoData, driverInfoData *DrvInfoData) (err error) { - r1, _, e1 := syscall.Syscall(procSetupDiSetSelectedDriverW.Addr(), 3, uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(unsafe.Pointer(driverInfoData))) + r1, _, e1 := syscall.SyscallN(procSetupDiSetSelectedDriverW.Addr(), uintptr(deviceInfoSet), uintptr(unsafe.Pointer(deviceInfoData)), uintptr(unsafe.Pointer(driverInfoData))) if r1 == 0 { err = errnoErr(e1) } @@ -4000,7 +4176,7 @@ func SetupDiSetSelectedDriver(deviceInfoSet DevInfo, deviceInfoData *DevInfoData } func setupUninstallOEMInf(infFileName *uint16, flags SUOI, reserved uintptr) (err error) { - r1, _, e1 := syscall.Syscall(procSetupUninstallOEMInfW.Addr(), 3, uintptr(unsafe.Pointer(infFileName)), uintptr(flags), uintptr(reserved)) + r1, _, e1 := syscall.SyscallN(procSetupUninstallOEMInfW.Addr(), uintptr(unsafe.Pointer(infFileName)), uintptr(flags), uintptr(reserved)) if r1 == 0 { err = errnoErr(e1) } @@ -4008,7 +4184,7 @@ func setupUninstallOEMInf(infFileName *uint16, flags SUOI, reserved uintptr) (er } func commandLineToArgv(cmd *uint16, argc *int32) (argv **uint16, err error) { - r0, _, e1 := syscall.Syscall(procCommandLineToArgvW.Addr(), 2, uintptr(unsafe.Pointer(cmd)), uintptr(unsafe.Pointer(argc)), 0) + r0, _, e1 := syscall.SyscallN(procCommandLineToArgvW.Addr(), uintptr(unsafe.Pointer(cmd)), uintptr(unsafe.Pointer(argc))) argv = (**uint16)(unsafe.Pointer(r0)) if argv == nil { err = errnoErr(e1) @@ -4017,7 +4193,7 @@ func commandLineToArgv(cmd *uint16, argc *int32) (argv **uint16, err error) { } func shGetKnownFolderPath(id *KNOWNFOLDERID, flags uint32, token Token, path **uint16) (ret error) { - r0, _, _ := syscall.Syscall6(procSHGetKnownFolderPath.Addr(), 4, uintptr(unsafe.Pointer(id)), uintptr(flags), uintptr(token), uintptr(unsafe.Pointer(path)), 0, 0) + r0, _, _ := syscall.SyscallN(procSHGetKnownFolderPath.Addr(), uintptr(unsafe.Pointer(id)), uintptr(flags), uintptr(token), uintptr(unsafe.Pointer(path))) if r0 != 0 { ret = syscall.Errno(r0) } @@ -4025,7 +4201,7 @@ func shGetKnownFolderPath(id *KNOWNFOLDERID, flags uint32, token Token, path **u } func ShellExecute(hwnd Handle, verb *uint16, file *uint16, args *uint16, cwd *uint16, showCmd int32) (err error) { - r1, _, e1 := syscall.Syscall6(procShellExecuteW.Addr(), 6, uintptr(hwnd), uintptr(unsafe.Pointer(verb)), uintptr(unsafe.Pointer(file)), uintptr(unsafe.Pointer(args)), uintptr(unsafe.Pointer(cwd)), uintptr(showCmd)) + r1, _, e1 := syscall.SyscallN(procShellExecuteW.Addr(), uintptr(hwnd), uintptr(unsafe.Pointer(verb)), uintptr(unsafe.Pointer(file)), uintptr(unsafe.Pointer(args)), uintptr(unsafe.Pointer(cwd)), uintptr(showCmd)) if r1 <= 32 { err = errnoErr(e1) } @@ -4033,12 +4209,12 @@ func ShellExecute(hwnd Handle, verb *uint16, file *uint16, args *uint16, cwd *ui } func EnumChildWindows(hwnd HWND, enumFunc uintptr, param unsafe.Pointer) { - syscall.Syscall(procEnumChildWindows.Addr(), 3, uintptr(hwnd), uintptr(enumFunc), uintptr(param)) + syscall.SyscallN(procEnumChildWindows.Addr(), uintptr(hwnd), uintptr(enumFunc), uintptr(param)) return } func EnumWindows(enumFunc uintptr, param unsafe.Pointer) (err error) { - r1, _, e1 := syscall.Syscall(procEnumWindows.Addr(), 2, uintptr(enumFunc), uintptr(param), 0) + r1, _, e1 := syscall.SyscallN(procEnumWindows.Addr(), uintptr(enumFunc), uintptr(param)) if r1 == 0 { err = errnoErr(e1) } @@ -4046,7 +4222,7 @@ func EnumWindows(enumFunc uintptr, param unsafe.Pointer) (err error) { } func ExitWindowsEx(flags uint32, reason uint32) (err error) { - r1, _, e1 := syscall.Syscall(procExitWindowsEx.Addr(), 2, uintptr(flags), uintptr(reason), 0) + r1, _, e1 := syscall.SyscallN(procExitWindowsEx.Addr(), uintptr(flags), uintptr(reason)) if r1 == 0 { err = errnoErr(e1) } @@ -4054,7 +4230,7 @@ func ExitWindowsEx(flags uint32, reason uint32) (err error) { } func GetClassName(hwnd HWND, className *uint16, maxCount int32) (copied int32, err error) { - r0, _, e1 := syscall.Syscall(procGetClassNameW.Addr(), 3, uintptr(hwnd), uintptr(unsafe.Pointer(className)), uintptr(maxCount)) + r0, _, e1 := syscall.SyscallN(procGetClassNameW.Addr(), uintptr(hwnd), uintptr(unsafe.Pointer(className)), uintptr(maxCount)) copied = int32(r0) if copied == 0 { err = errnoErr(e1) @@ -4063,33 +4239,39 @@ func GetClassName(hwnd HWND, className *uint16, maxCount int32) (copied int32, e } func GetDesktopWindow() (hwnd HWND) { - r0, _, _ := syscall.Syscall(procGetDesktopWindow.Addr(), 0, 0, 0, 0) + r0, _, _ := syscall.SyscallN(procGetDesktopWindow.Addr()) hwnd = HWND(r0) return } func GetForegroundWindow() (hwnd HWND) { - r0, _, _ := syscall.Syscall(procGetForegroundWindow.Addr(), 0, 0, 0, 0) + r0, _, _ := syscall.SyscallN(procGetForegroundWindow.Addr()) hwnd = HWND(r0) return } func GetGUIThreadInfo(thread uint32, info *GUIThreadInfo) (err error) { - r1, _, e1 := syscall.Syscall(procGetGUIThreadInfo.Addr(), 2, uintptr(thread), uintptr(unsafe.Pointer(info)), 0) + r1, _, e1 := syscall.SyscallN(procGetGUIThreadInfo.Addr(), uintptr(thread), uintptr(unsafe.Pointer(info))) if r1 == 0 { err = errnoErr(e1) } return } +func GetKeyboardLayout(tid uint32) (hkl Handle) { + r0, _, _ := syscall.SyscallN(procGetKeyboardLayout.Addr(), uintptr(tid)) + hkl = Handle(r0) + return +} + func GetShellWindow() (shellWindow HWND) { - r0, _, _ := syscall.Syscall(procGetShellWindow.Addr(), 0, 0, 0, 0) + r0, _, _ := syscall.SyscallN(procGetShellWindow.Addr()) shellWindow = HWND(r0) return } func GetWindowThreadProcessId(hwnd HWND, pid *uint32) (tid uint32, err error) { - r0, _, e1 := syscall.Syscall(procGetWindowThreadProcessId.Addr(), 2, uintptr(hwnd), uintptr(unsafe.Pointer(pid)), 0) + r0, _, e1 := syscall.SyscallN(procGetWindowThreadProcessId.Addr(), uintptr(hwnd), uintptr(unsafe.Pointer(pid))) tid = uint32(r0) if tid == 0 { err = errnoErr(e1) @@ -4098,25 +4280,34 @@ func GetWindowThreadProcessId(hwnd HWND, pid *uint32) (tid uint32, err error) { } func IsWindow(hwnd HWND) (isWindow bool) { - r0, _, _ := syscall.Syscall(procIsWindow.Addr(), 1, uintptr(hwnd), 0, 0) + r0, _, _ := syscall.SyscallN(procIsWindow.Addr(), uintptr(hwnd)) isWindow = r0 != 0 return } func IsWindowUnicode(hwnd HWND) (isUnicode bool) { - r0, _, _ := syscall.Syscall(procIsWindowUnicode.Addr(), 1, uintptr(hwnd), 0, 0) + r0, _, _ := syscall.SyscallN(procIsWindowUnicode.Addr(), uintptr(hwnd)) isUnicode = r0 != 0 return } func IsWindowVisible(hwnd HWND) (isVisible bool) { - r0, _, _ := syscall.Syscall(procIsWindowVisible.Addr(), 1, uintptr(hwnd), 0, 0) + r0, _, _ := syscall.SyscallN(procIsWindowVisible.Addr(), uintptr(hwnd)) isVisible = r0 != 0 return } +func LoadKeyboardLayout(name *uint16, flags uint32) (hkl Handle, err error) { + r0, _, e1 := syscall.SyscallN(procLoadKeyboardLayoutW.Addr(), uintptr(unsafe.Pointer(name)), uintptr(flags)) + hkl = Handle(r0) + if hkl == 0 { + err = errnoErr(e1) + } + return +} + func MessageBox(hwnd HWND, text *uint16, caption *uint16, boxtype uint32) (ret int32, err error) { - r0, _, e1 := syscall.Syscall6(procMessageBoxW.Addr(), 4, uintptr(hwnd), uintptr(unsafe.Pointer(text)), uintptr(unsafe.Pointer(caption)), uintptr(boxtype), 0, 0) + r0, _, e1 := syscall.SyscallN(procMessageBoxW.Addr(), uintptr(hwnd), uintptr(unsafe.Pointer(text)), uintptr(unsafe.Pointer(caption)), uintptr(boxtype)) ret = int32(r0) if ret == 0 { err = errnoErr(e1) @@ -4124,12 +4315,26 @@ func MessageBox(hwnd HWND, text *uint16, caption *uint16, boxtype uint32) (ret i return } +func ToUnicodeEx(vkey uint32, scancode uint32, keystate *byte, pwszBuff *uint16, cchBuff int32, flags uint32, hkl Handle) (ret int32) { + r0, _, _ := syscall.SyscallN(procToUnicodeEx.Addr(), uintptr(vkey), uintptr(scancode), uintptr(unsafe.Pointer(keystate)), uintptr(unsafe.Pointer(pwszBuff)), uintptr(cchBuff), uintptr(flags), uintptr(hkl)) + ret = int32(r0) + return +} + +func UnloadKeyboardLayout(hkl Handle) (err error) { + r1, _, e1 := syscall.SyscallN(procUnloadKeyboardLayout.Addr(), uintptr(hkl)) + if r1 == 0 { + err = errnoErr(e1) + } + return +} + func CreateEnvironmentBlock(block **uint16, token Token, inheritExisting bool) (err error) { var _p0 uint32 if inheritExisting { _p0 = 1 } - r1, _, e1 := syscall.Syscall(procCreateEnvironmentBlock.Addr(), 3, uintptr(unsafe.Pointer(block)), uintptr(token), uintptr(_p0)) + r1, _, e1 := syscall.SyscallN(procCreateEnvironmentBlock.Addr(), uintptr(unsafe.Pointer(block)), uintptr(token), uintptr(_p0)) if r1 == 0 { err = errnoErr(e1) } @@ -4137,7 +4342,7 @@ func CreateEnvironmentBlock(block **uint16, token Token, inheritExisting bool) ( } func DestroyEnvironmentBlock(block *uint16) (err error) { - r1, _, e1 := syscall.Syscall(procDestroyEnvironmentBlock.Addr(), 1, uintptr(unsafe.Pointer(block)), 0, 0) + r1, _, e1 := syscall.SyscallN(procDestroyEnvironmentBlock.Addr(), uintptr(unsafe.Pointer(block))) if r1 == 0 { err = errnoErr(e1) } @@ -4145,7 +4350,7 @@ func DestroyEnvironmentBlock(block *uint16) (err error) { } func GetUserProfileDirectory(t Token, dir *uint16, dirLen *uint32) (err error) { - r1, _, e1 := syscall.Syscall(procGetUserProfileDirectoryW.Addr(), 3, uintptr(t), uintptr(unsafe.Pointer(dir)), uintptr(unsafe.Pointer(dirLen))) + r1, _, e1 := syscall.SyscallN(procGetUserProfileDirectoryW.Addr(), uintptr(t), uintptr(unsafe.Pointer(dir)), uintptr(unsafe.Pointer(dirLen))) if r1 == 0 { err = errnoErr(e1) } @@ -4162,7 +4367,7 @@ func GetFileVersionInfoSize(filename string, zeroHandle *Handle) (bufSize uint32 } func _GetFileVersionInfoSize(filename *uint16, zeroHandle *Handle) (bufSize uint32, err error) { - r0, _, e1 := syscall.Syscall(procGetFileVersionInfoSizeW.Addr(), 2, uintptr(unsafe.Pointer(filename)), uintptr(unsafe.Pointer(zeroHandle)), 0) + r0, _, e1 := syscall.SyscallN(procGetFileVersionInfoSizeW.Addr(), uintptr(unsafe.Pointer(filename)), uintptr(unsafe.Pointer(zeroHandle))) bufSize = uint32(r0) if bufSize == 0 { err = errnoErr(e1) @@ -4180,7 +4385,7 @@ func GetFileVersionInfo(filename string, handle uint32, bufSize uint32, buffer u } func _GetFileVersionInfo(filename *uint16, handle uint32, bufSize uint32, buffer unsafe.Pointer) (err error) { - r1, _, e1 := syscall.Syscall6(procGetFileVersionInfoW.Addr(), 4, uintptr(unsafe.Pointer(filename)), uintptr(handle), uintptr(bufSize), uintptr(buffer), 0, 0) + r1, _, e1 := syscall.SyscallN(procGetFileVersionInfoW.Addr(), uintptr(unsafe.Pointer(filename)), uintptr(handle), uintptr(bufSize), uintptr(buffer)) if r1 == 0 { err = errnoErr(e1) } @@ -4197,7 +4402,7 @@ func VerQueryValue(block unsafe.Pointer, subBlock string, pointerToBufferPointer } func _VerQueryValue(block unsafe.Pointer, subBlock *uint16, pointerToBufferPointer unsafe.Pointer, bufSize *uint32) (err error) { - r1, _, e1 := syscall.Syscall6(procVerQueryValueW.Addr(), 4, uintptr(block), uintptr(unsafe.Pointer(subBlock)), uintptr(pointerToBufferPointer), uintptr(unsafe.Pointer(bufSize)), 0, 0) + r1, _, e1 := syscall.SyscallN(procVerQueryValueW.Addr(), uintptr(block), uintptr(unsafe.Pointer(subBlock)), uintptr(pointerToBufferPointer), uintptr(unsafe.Pointer(bufSize))) if r1 == 0 { err = errnoErr(e1) } @@ -4205,7 +4410,7 @@ func _VerQueryValue(block unsafe.Pointer, subBlock *uint16, pointerToBufferPoint } func TimeBeginPeriod(period uint32) (err error) { - r1, _, e1 := syscall.Syscall(proctimeBeginPeriod.Addr(), 1, uintptr(period), 0, 0) + r1, _, e1 := syscall.SyscallN(proctimeBeginPeriod.Addr(), uintptr(period)) if r1 != 0 { err = errnoErr(e1) } @@ -4213,7 +4418,7 @@ func TimeBeginPeriod(period uint32) (err error) { } func TimeEndPeriod(period uint32) (err error) { - r1, _, e1 := syscall.Syscall(proctimeEndPeriod.Addr(), 1, uintptr(period), 0, 0) + r1, _, e1 := syscall.SyscallN(proctimeEndPeriod.Addr(), uintptr(period)) if r1 != 0 { err = errnoErr(e1) } @@ -4221,7 +4426,7 @@ func TimeEndPeriod(period uint32) (err error) { } func WinVerifyTrustEx(hwnd HWND, actionId *GUID, data *WinTrustData) (ret error) { - r0, _, _ := syscall.Syscall(procWinVerifyTrustEx.Addr(), 3, uintptr(hwnd), uintptr(unsafe.Pointer(actionId)), uintptr(unsafe.Pointer(data))) + r0, _, _ := syscall.SyscallN(procWinVerifyTrustEx.Addr(), uintptr(hwnd), uintptr(unsafe.Pointer(actionId)), uintptr(unsafe.Pointer(data))) if r0 != 0 { ret = syscall.Errno(r0) } @@ -4229,12 +4434,12 @@ func WinVerifyTrustEx(hwnd HWND, actionId *GUID, data *WinTrustData) (ret error) } func FreeAddrInfoW(addrinfo *AddrinfoW) { - syscall.Syscall(procFreeAddrInfoW.Addr(), 1, uintptr(unsafe.Pointer(addrinfo)), 0, 0) + syscall.SyscallN(procFreeAddrInfoW.Addr(), uintptr(unsafe.Pointer(addrinfo))) return } func GetAddrInfoW(nodename *uint16, servicename *uint16, hints *AddrinfoW, result **AddrinfoW) (sockerr error) { - r0, _, _ := syscall.Syscall6(procGetAddrInfoW.Addr(), 4, uintptr(unsafe.Pointer(nodename)), uintptr(unsafe.Pointer(servicename)), uintptr(unsafe.Pointer(hints)), uintptr(unsafe.Pointer(result)), 0, 0) + r0, _, _ := syscall.SyscallN(procGetAddrInfoW.Addr(), uintptr(unsafe.Pointer(nodename)), uintptr(unsafe.Pointer(servicename)), uintptr(unsafe.Pointer(hints)), uintptr(unsafe.Pointer(result))) if r0 != 0 { sockerr = syscall.Errno(r0) } @@ -4242,15 +4447,23 @@ func GetAddrInfoW(nodename *uint16, servicename *uint16, hints *AddrinfoW, resul } func WSACleanup() (err error) { - r1, _, e1 := syscall.Syscall(procWSACleanup.Addr(), 0, 0, 0, 0) + r1, _, e1 := syscall.SyscallN(procWSACleanup.Addr()) if r1 == socket_error { err = errnoErr(e1) } return } +func WSADuplicateSocket(s Handle, processID uint32, info *WSAProtocolInfo) (err error) { + r1, _, e1 := syscall.SyscallN(procWSADuplicateSocketW.Addr(), uintptr(s), uintptr(processID), uintptr(unsafe.Pointer(info))) + if r1 != 0 { + err = errnoErr(e1) + } + return +} + func WSAEnumProtocols(protocols *int32, protocolBuffer *WSAProtocolInfo, bufferLength *uint32) (n int32, err error) { - r0, _, e1 := syscall.Syscall(procWSAEnumProtocolsW.Addr(), 3, uintptr(unsafe.Pointer(protocols)), uintptr(unsafe.Pointer(protocolBuffer)), uintptr(unsafe.Pointer(bufferLength))) + r0, _, e1 := syscall.SyscallN(procWSAEnumProtocolsW.Addr(), uintptr(unsafe.Pointer(protocols)), uintptr(unsafe.Pointer(protocolBuffer)), uintptr(unsafe.Pointer(bufferLength))) n = int32(r0) if n == -1 { err = errnoErr(e1) @@ -4263,7 +4476,7 @@ func WSAGetOverlappedResult(h Handle, o *Overlapped, bytes *uint32, wait bool, f if wait { _p0 = 1 } - r1, _, e1 := syscall.Syscall6(procWSAGetOverlappedResult.Addr(), 5, uintptr(h), uintptr(unsafe.Pointer(o)), uintptr(unsafe.Pointer(bytes)), uintptr(_p0), uintptr(unsafe.Pointer(flags)), 0) + r1, _, e1 := syscall.SyscallN(procWSAGetOverlappedResult.Addr(), uintptr(h), uintptr(unsafe.Pointer(o)), uintptr(unsafe.Pointer(bytes)), uintptr(_p0), uintptr(unsafe.Pointer(flags))) if r1 == 0 { err = errnoErr(e1) } @@ -4271,7 +4484,7 @@ func WSAGetOverlappedResult(h Handle, o *Overlapped, bytes *uint32, wait bool, f } func WSAIoctl(s Handle, iocc uint32, inbuf *byte, cbif uint32, outbuf *byte, cbob uint32, cbbr *uint32, overlapped *Overlapped, completionRoutine uintptr) (err error) { - r1, _, e1 := syscall.Syscall9(procWSAIoctl.Addr(), 9, uintptr(s), uintptr(iocc), uintptr(unsafe.Pointer(inbuf)), uintptr(cbif), uintptr(unsafe.Pointer(outbuf)), uintptr(cbob), uintptr(unsafe.Pointer(cbbr)), uintptr(unsafe.Pointer(overlapped)), uintptr(completionRoutine)) + r1, _, e1 := syscall.SyscallN(procWSAIoctl.Addr(), uintptr(s), uintptr(iocc), uintptr(unsafe.Pointer(inbuf)), uintptr(cbif), uintptr(unsafe.Pointer(outbuf)), uintptr(cbob), uintptr(unsafe.Pointer(cbbr)), uintptr(unsafe.Pointer(overlapped)), uintptr(completionRoutine)) if r1 == socket_error { err = errnoErr(e1) } @@ -4279,7 +4492,7 @@ func WSAIoctl(s Handle, iocc uint32, inbuf *byte, cbif uint32, outbuf *byte, cbo } func WSALookupServiceBegin(querySet *WSAQUERYSET, flags uint32, handle *Handle) (err error) { - r1, _, e1 := syscall.Syscall(procWSALookupServiceBeginW.Addr(), 3, uintptr(unsafe.Pointer(querySet)), uintptr(flags), uintptr(unsafe.Pointer(handle))) + r1, _, e1 := syscall.SyscallN(procWSALookupServiceBeginW.Addr(), uintptr(unsafe.Pointer(querySet)), uintptr(flags), uintptr(unsafe.Pointer(handle))) if r1 == socket_error { err = errnoErr(e1) } @@ -4287,7 +4500,7 @@ func WSALookupServiceBegin(querySet *WSAQUERYSET, flags uint32, handle *Handle) } func WSALookupServiceEnd(handle Handle) (err error) { - r1, _, e1 := syscall.Syscall(procWSALookupServiceEnd.Addr(), 1, uintptr(handle), 0, 0) + r1, _, e1 := syscall.SyscallN(procWSALookupServiceEnd.Addr(), uintptr(handle)) if r1 == socket_error { err = errnoErr(e1) } @@ -4295,7 +4508,7 @@ func WSALookupServiceEnd(handle Handle) (err error) { } func WSALookupServiceNext(handle Handle, flags uint32, size *int32, querySet *WSAQUERYSET) (err error) { - r1, _, e1 := syscall.Syscall6(procWSALookupServiceNextW.Addr(), 4, uintptr(handle), uintptr(flags), uintptr(unsafe.Pointer(size)), uintptr(unsafe.Pointer(querySet)), 0, 0) + r1, _, e1 := syscall.SyscallN(procWSALookupServiceNextW.Addr(), uintptr(handle), uintptr(flags), uintptr(unsafe.Pointer(size)), uintptr(unsafe.Pointer(querySet))) if r1 == socket_error { err = errnoErr(e1) } @@ -4303,7 +4516,7 @@ func WSALookupServiceNext(handle Handle, flags uint32, size *int32, querySet *WS } func WSARecv(s Handle, bufs *WSABuf, bufcnt uint32, recvd *uint32, flags *uint32, overlapped *Overlapped, croutine *byte) (err error) { - r1, _, e1 := syscall.Syscall9(procWSARecv.Addr(), 7, uintptr(s), uintptr(unsafe.Pointer(bufs)), uintptr(bufcnt), uintptr(unsafe.Pointer(recvd)), uintptr(unsafe.Pointer(flags)), uintptr(unsafe.Pointer(overlapped)), uintptr(unsafe.Pointer(croutine)), 0, 0) + r1, _, e1 := syscall.SyscallN(procWSARecv.Addr(), uintptr(s), uintptr(unsafe.Pointer(bufs)), uintptr(bufcnt), uintptr(unsafe.Pointer(recvd)), uintptr(unsafe.Pointer(flags)), uintptr(unsafe.Pointer(overlapped)), uintptr(unsafe.Pointer(croutine))) if r1 == socket_error { err = errnoErr(e1) } @@ -4311,7 +4524,7 @@ func WSARecv(s Handle, bufs *WSABuf, bufcnt uint32, recvd *uint32, flags *uint32 } func WSARecvFrom(s Handle, bufs *WSABuf, bufcnt uint32, recvd *uint32, flags *uint32, from *RawSockaddrAny, fromlen *int32, overlapped *Overlapped, croutine *byte) (err error) { - r1, _, e1 := syscall.Syscall9(procWSARecvFrom.Addr(), 9, uintptr(s), uintptr(unsafe.Pointer(bufs)), uintptr(bufcnt), uintptr(unsafe.Pointer(recvd)), uintptr(unsafe.Pointer(flags)), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)), uintptr(unsafe.Pointer(overlapped)), uintptr(unsafe.Pointer(croutine))) + r1, _, e1 := syscall.SyscallN(procWSARecvFrom.Addr(), uintptr(s), uintptr(unsafe.Pointer(bufs)), uintptr(bufcnt), uintptr(unsafe.Pointer(recvd)), uintptr(unsafe.Pointer(flags)), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen)), uintptr(unsafe.Pointer(overlapped)), uintptr(unsafe.Pointer(croutine))) if r1 == socket_error { err = errnoErr(e1) } @@ -4319,7 +4532,7 @@ func WSARecvFrom(s Handle, bufs *WSABuf, bufcnt uint32, recvd *uint32, flags *ui } func WSASend(s Handle, bufs *WSABuf, bufcnt uint32, sent *uint32, flags uint32, overlapped *Overlapped, croutine *byte) (err error) { - r1, _, e1 := syscall.Syscall9(procWSASend.Addr(), 7, uintptr(s), uintptr(unsafe.Pointer(bufs)), uintptr(bufcnt), uintptr(unsafe.Pointer(sent)), uintptr(flags), uintptr(unsafe.Pointer(overlapped)), uintptr(unsafe.Pointer(croutine)), 0, 0) + r1, _, e1 := syscall.SyscallN(procWSASend.Addr(), uintptr(s), uintptr(unsafe.Pointer(bufs)), uintptr(bufcnt), uintptr(unsafe.Pointer(sent)), uintptr(flags), uintptr(unsafe.Pointer(overlapped)), uintptr(unsafe.Pointer(croutine))) if r1 == socket_error { err = errnoErr(e1) } @@ -4327,7 +4540,7 @@ func WSASend(s Handle, bufs *WSABuf, bufcnt uint32, sent *uint32, flags uint32, } func WSASendTo(s Handle, bufs *WSABuf, bufcnt uint32, sent *uint32, flags uint32, to *RawSockaddrAny, tolen int32, overlapped *Overlapped, croutine *byte) (err error) { - r1, _, e1 := syscall.Syscall9(procWSASendTo.Addr(), 9, uintptr(s), uintptr(unsafe.Pointer(bufs)), uintptr(bufcnt), uintptr(unsafe.Pointer(sent)), uintptr(flags), uintptr(unsafe.Pointer(to)), uintptr(tolen), uintptr(unsafe.Pointer(overlapped)), uintptr(unsafe.Pointer(croutine))) + r1, _, e1 := syscall.SyscallN(procWSASendTo.Addr(), uintptr(s), uintptr(unsafe.Pointer(bufs)), uintptr(bufcnt), uintptr(unsafe.Pointer(sent)), uintptr(flags), uintptr(unsafe.Pointer(to)), uintptr(tolen), uintptr(unsafe.Pointer(overlapped)), uintptr(unsafe.Pointer(croutine))) if r1 == socket_error { err = errnoErr(e1) } @@ -4335,7 +4548,7 @@ func WSASendTo(s Handle, bufs *WSABuf, bufcnt uint32, sent *uint32, flags uint32 } func WSASocket(af int32, typ int32, protocol int32, protoInfo *WSAProtocolInfo, group uint32, flags uint32) (handle Handle, err error) { - r0, _, e1 := syscall.Syscall6(procWSASocketW.Addr(), 6, uintptr(af), uintptr(typ), uintptr(protocol), uintptr(unsafe.Pointer(protoInfo)), uintptr(group), uintptr(flags)) + r0, _, e1 := syscall.SyscallN(procWSASocketW.Addr(), uintptr(af), uintptr(typ), uintptr(protocol), uintptr(unsafe.Pointer(protoInfo)), uintptr(group), uintptr(flags)) handle = Handle(r0) if handle == InvalidHandle { err = errnoErr(e1) @@ -4344,7 +4557,7 @@ func WSASocket(af int32, typ int32, protocol int32, protoInfo *WSAProtocolInfo, } func WSAStartup(verreq uint32, data *WSAData) (sockerr error) { - r0, _, _ := syscall.Syscall(procWSAStartup.Addr(), 2, uintptr(verreq), uintptr(unsafe.Pointer(data)), 0) + r0, _, _ := syscall.SyscallN(procWSAStartup.Addr(), uintptr(verreq), uintptr(unsafe.Pointer(data))) if r0 != 0 { sockerr = syscall.Errno(r0) } @@ -4352,7 +4565,7 @@ func WSAStartup(verreq uint32, data *WSAData) (sockerr error) { } func bind(s Handle, name unsafe.Pointer, namelen int32) (err error) { - r1, _, e1 := syscall.Syscall(procbind.Addr(), 3, uintptr(s), uintptr(name), uintptr(namelen)) + r1, _, e1 := syscall.SyscallN(procbind.Addr(), uintptr(s), uintptr(name), uintptr(namelen)) if r1 == socket_error { err = errnoErr(e1) } @@ -4360,7 +4573,7 @@ func bind(s Handle, name unsafe.Pointer, namelen int32) (err error) { } func Closesocket(s Handle) (err error) { - r1, _, e1 := syscall.Syscall(procclosesocket.Addr(), 1, uintptr(s), 0, 0) + r1, _, e1 := syscall.SyscallN(procclosesocket.Addr(), uintptr(s)) if r1 == socket_error { err = errnoErr(e1) } @@ -4368,7 +4581,7 @@ func Closesocket(s Handle) (err error) { } func connect(s Handle, name unsafe.Pointer, namelen int32) (err error) { - r1, _, e1 := syscall.Syscall(procconnect.Addr(), 3, uintptr(s), uintptr(name), uintptr(namelen)) + r1, _, e1 := syscall.SyscallN(procconnect.Addr(), uintptr(s), uintptr(name), uintptr(namelen)) if r1 == socket_error { err = errnoErr(e1) } @@ -4385,7 +4598,7 @@ func GetHostByName(name string) (h *Hostent, err error) { } func _GetHostByName(name *byte) (h *Hostent, err error) { - r0, _, e1 := syscall.Syscall(procgethostbyname.Addr(), 1, uintptr(unsafe.Pointer(name)), 0, 0) + r0, _, e1 := syscall.SyscallN(procgethostbyname.Addr(), uintptr(unsafe.Pointer(name))) h = (*Hostent)(unsafe.Pointer(r0)) if h == nil { err = errnoErr(e1) @@ -4394,7 +4607,7 @@ func _GetHostByName(name *byte) (h *Hostent, err error) { } func getpeername(s Handle, rsa *RawSockaddrAny, addrlen *int32) (err error) { - r1, _, e1 := syscall.Syscall(procgetpeername.Addr(), 3, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + r1, _, e1 := syscall.SyscallN(procgetpeername.Addr(), uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) if r1 == socket_error { err = errnoErr(e1) } @@ -4411,7 +4624,7 @@ func GetProtoByName(name string) (p *Protoent, err error) { } func _GetProtoByName(name *byte) (p *Protoent, err error) { - r0, _, e1 := syscall.Syscall(procgetprotobyname.Addr(), 1, uintptr(unsafe.Pointer(name)), 0, 0) + r0, _, e1 := syscall.SyscallN(procgetprotobyname.Addr(), uintptr(unsafe.Pointer(name))) p = (*Protoent)(unsafe.Pointer(r0)) if p == nil { err = errnoErr(e1) @@ -4434,7 +4647,7 @@ func GetServByName(name string, proto string) (s *Servent, err error) { } func _GetServByName(name *byte, proto *byte) (s *Servent, err error) { - r0, _, e1 := syscall.Syscall(procgetservbyname.Addr(), 2, uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(proto)), 0) + r0, _, e1 := syscall.SyscallN(procgetservbyname.Addr(), uintptr(unsafe.Pointer(name)), uintptr(unsafe.Pointer(proto))) s = (*Servent)(unsafe.Pointer(r0)) if s == nil { err = errnoErr(e1) @@ -4443,7 +4656,7 @@ func _GetServByName(name *byte, proto *byte) (s *Servent, err error) { } func getsockname(s Handle, rsa *RawSockaddrAny, addrlen *int32) (err error) { - r1, _, e1 := syscall.Syscall(procgetsockname.Addr(), 3, uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) + r1, _, e1 := syscall.SyscallN(procgetsockname.Addr(), uintptr(s), uintptr(unsafe.Pointer(rsa)), uintptr(unsafe.Pointer(addrlen))) if r1 == socket_error { err = errnoErr(e1) } @@ -4451,7 +4664,7 @@ func getsockname(s Handle, rsa *RawSockaddrAny, addrlen *int32) (err error) { } func Getsockopt(s Handle, level int32, optname int32, optval *byte, optlen *int32) (err error) { - r1, _, e1 := syscall.Syscall6(procgetsockopt.Addr(), 5, uintptr(s), uintptr(level), uintptr(optname), uintptr(unsafe.Pointer(optval)), uintptr(unsafe.Pointer(optlen)), 0) + r1, _, e1 := syscall.SyscallN(procgetsockopt.Addr(), uintptr(s), uintptr(level), uintptr(optname), uintptr(unsafe.Pointer(optval)), uintptr(unsafe.Pointer(optlen))) if r1 == socket_error { err = errnoErr(e1) } @@ -4459,7 +4672,7 @@ func Getsockopt(s Handle, level int32, optname int32, optval *byte, optlen *int3 } func listen(s Handle, backlog int32) (err error) { - r1, _, e1 := syscall.Syscall(proclisten.Addr(), 2, uintptr(s), uintptr(backlog), 0) + r1, _, e1 := syscall.SyscallN(proclisten.Addr(), uintptr(s), uintptr(backlog)) if r1 == socket_error { err = errnoErr(e1) } @@ -4467,7 +4680,7 @@ func listen(s Handle, backlog int32) (err error) { } func Ntohs(netshort uint16) (u uint16) { - r0, _, _ := syscall.Syscall(procntohs.Addr(), 1, uintptr(netshort), 0, 0) + r0, _, _ := syscall.SyscallN(procntohs.Addr(), uintptr(netshort)) u = uint16(r0) return } @@ -4477,7 +4690,7 @@ func recvfrom(s Handle, buf []byte, flags int32, from *RawSockaddrAny, fromlen * if len(buf) > 0 { _p0 = &buf[0] } - r0, _, e1 := syscall.Syscall6(procrecvfrom.Addr(), 6, uintptr(s), uintptr(unsafe.Pointer(_p0)), uintptr(len(buf)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) + r0, _, e1 := syscall.SyscallN(procrecvfrom.Addr(), uintptr(s), uintptr(unsafe.Pointer(_p0)), uintptr(len(buf)), uintptr(flags), uintptr(unsafe.Pointer(from)), uintptr(unsafe.Pointer(fromlen))) n = int32(r0) if n == -1 { err = errnoErr(e1) @@ -4490,7 +4703,7 @@ func sendto(s Handle, buf []byte, flags int32, to unsafe.Pointer, tolen int32) ( if len(buf) > 0 { _p0 = &buf[0] } - r1, _, e1 := syscall.Syscall6(procsendto.Addr(), 6, uintptr(s), uintptr(unsafe.Pointer(_p0)), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(tolen)) + r1, _, e1 := syscall.SyscallN(procsendto.Addr(), uintptr(s), uintptr(unsafe.Pointer(_p0)), uintptr(len(buf)), uintptr(flags), uintptr(to), uintptr(tolen)) if r1 == socket_error { err = errnoErr(e1) } @@ -4498,7 +4711,7 @@ func sendto(s Handle, buf []byte, flags int32, to unsafe.Pointer, tolen int32) ( } func Setsockopt(s Handle, level int32, optname int32, optval *byte, optlen int32) (err error) { - r1, _, e1 := syscall.Syscall6(procsetsockopt.Addr(), 5, uintptr(s), uintptr(level), uintptr(optname), uintptr(unsafe.Pointer(optval)), uintptr(optlen), 0) + r1, _, e1 := syscall.SyscallN(procsetsockopt.Addr(), uintptr(s), uintptr(level), uintptr(optname), uintptr(unsafe.Pointer(optval)), uintptr(optlen)) if r1 == socket_error { err = errnoErr(e1) } @@ -4506,7 +4719,7 @@ func Setsockopt(s Handle, level int32, optname int32, optval *byte, optlen int32 } func shutdown(s Handle, how int32) (err error) { - r1, _, e1 := syscall.Syscall(procshutdown.Addr(), 2, uintptr(s), uintptr(how), 0) + r1, _, e1 := syscall.SyscallN(procshutdown.Addr(), uintptr(s), uintptr(how)) if r1 == socket_error { err = errnoErr(e1) } @@ -4514,7 +4727,7 @@ func shutdown(s Handle, how int32) (err error) { } func socket(af int32, typ int32, protocol int32) (handle Handle, err error) { - r0, _, e1 := syscall.Syscall(procsocket.Addr(), 3, uintptr(af), uintptr(typ), uintptr(protocol)) + r0, _, e1 := syscall.SyscallN(procsocket.Addr(), uintptr(af), uintptr(typ), uintptr(protocol)) handle = Handle(r0) if handle == InvalidHandle { err = errnoErr(e1) @@ -4523,7 +4736,7 @@ func socket(af int32, typ int32, protocol int32) (handle Handle, err error) { } func WTSEnumerateSessions(handle Handle, reserved uint32, version uint32, sessions **WTS_SESSION_INFO, count *uint32) (err error) { - r1, _, e1 := syscall.Syscall6(procWTSEnumerateSessionsW.Addr(), 5, uintptr(handle), uintptr(reserved), uintptr(version), uintptr(unsafe.Pointer(sessions)), uintptr(unsafe.Pointer(count)), 0) + r1, _, e1 := syscall.SyscallN(procWTSEnumerateSessionsW.Addr(), uintptr(handle), uintptr(reserved), uintptr(version), uintptr(unsafe.Pointer(sessions)), uintptr(unsafe.Pointer(count))) if r1 == 0 { err = errnoErr(e1) } @@ -4531,12 +4744,12 @@ func WTSEnumerateSessions(handle Handle, reserved uint32, version uint32, sessio } func WTSFreeMemory(ptr uintptr) { - syscall.Syscall(procWTSFreeMemory.Addr(), 1, uintptr(ptr), 0, 0) + syscall.SyscallN(procWTSFreeMemory.Addr(), uintptr(ptr)) return } func WTSQueryUserToken(session uint32, token *Token) (err error) { - r1, _, e1 := syscall.Syscall(procWTSQueryUserToken.Addr(), 2, uintptr(session), uintptr(unsafe.Pointer(token)), 0) + r1, _, e1 := syscall.SyscallN(procWTSQueryUserToken.Addr(), uintptr(session), uintptr(unsafe.Pointer(token))) if r1 == 0 { err = errnoErr(e1) } diff --git a/vendor/golang.org/x/term/LICENSE b/vendor/golang.org/x/term/LICENSE index 6a66aea5ea..2a7cf70da6 100644 --- a/vendor/golang.org/x/term/LICENSE +++ b/vendor/golang.org/x/term/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2009 The Go Authors. All rights reserved. +Copyright 2009 The Go Authors. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are @@ -10,7 +10,7 @@ notice, this list of conditions and the following disclaimer. copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. - * Neither the name of Google Inc. nor the names of its + * Neither the name of Google LLC nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. diff --git a/vendor/golang.org/x/term/README.md b/vendor/golang.org/x/term/README.md index d03d0aefef..05ff623f94 100644 --- a/vendor/golang.org/x/term/README.md +++ b/vendor/golang.org/x/term/README.md @@ -4,16 +4,13 @@ This repository provides Go terminal and console support packages. -## Download/Install - -The easiest way to install is to run `go get -u golang.org/x/term`. You can -also manually git clone the repository to `$GOPATH/src/golang.org/x/term`. - ## Report Issues / Send Patches This repository uses Gerrit for code changes. To learn how to submit changes to -this repository, see https://golang.org/doc/contribute.html. +this repository, see https://go.dev/doc/contribute. + +The git repository is https://go.googlesource.com/term. The main issue tracker for the term repository is located at -https://github.com/golang/go/issues. Prefix your issue with "x/term:" in the +https://go.dev/issues. Prefix your issue with "x/term:" in the subject line, so it is easy to find. diff --git a/vendor/golang.org/x/term/term_windows.go b/vendor/golang.org/x/term/term_windows.go index 465f560604..0ddd81c02a 100644 --- a/vendor/golang.org/x/term/term_windows.go +++ b/vendor/golang.org/x/term/term_windows.go @@ -20,12 +20,15 @@ func isTerminal(fd int) bool { return err == nil } +// This is intended to be used on a console input handle. +// See https://learn.microsoft.com/en-us/windows/console/setconsolemode func makeRaw(fd int) (*State, error) { var st uint32 if err := windows.GetConsoleMode(windows.Handle(fd), &st); err != nil { return nil, err } - raw := st &^ (windows.ENABLE_ECHO_INPUT | windows.ENABLE_PROCESSED_INPUT | windows.ENABLE_LINE_INPUT | windows.ENABLE_PROCESSED_OUTPUT) + raw := st &^ (windows.ENABLE_ECHO_INPUT | windows.ENABLE_PROCESSED_INPUT | windows.ENABLE_LINE_INPUT) + raw |= windows.ENABLE_VIRTUAL_TERMINAL_INPUT if err := windows.SetConsoleMode(windows.Handle(fd), raw); err != nil { return nil, err } diff --git a/vendor/golang.org/x/term/terminal.go b/vendor/golang.org/x/term/terminal.go index f636667fb0..6ec537cdc1 100644 --- a/vendor/golang.org/x/term/terminal.go +++ b/vendor/golang.org/x/term/terminal.go @@ -6,6 +6,7 @@ package term import ( "bytes" + "fmt" "io" "runtime" "strconv" @@ -36,6 +37,26 @@ var vt100EscapeCodes = EscapeCodes{ Reset: []byte{keyEscape, '[', '0', 'm'}, } +// A History provides a (possibly bounded) queue of input lines read by [Terminal.ReadLine]. +type History interface { + // Add will be called by [Terminal.ReadLine] to add + // a new, most recent entry to the history. + // It is allowed to drop any entry, including + // the entry being added (e.g., if it's deemed an invalid entry), + // the least-recent entry (e.g., to keep the history bounded), + // or any other entry. + Add(entry string) + + // Len returns the number of entries in the history. + Len() int + + // At returns an entry from the history. + // Index 0 is the most-recently added entry and + // index Len()-1 is the least-recently added entry. + // If index is < 0 or >= Len(), it panics. + At(idx int) string +} + // Terminal contains the state for running a VT100 terminal that is capable of // reading lines of input. type Terminal struct { @@ -44,6 +65,8 @@ type Terminal struct { // bytes, as an index into |line|). If it returns ok=false, the key // press is processed normally. Otherwise it returns a replacement line // and the new cursor position. + // + // This will be disabled during ReadPassword. AutoCompleteCallback func(line string, pos int, key rune) (newLine string, newPos int, ok bool) // Escape contains a pointer to the escape codes for this terminal. @@ -84,9 +107,14 @@ type Terminal struct { remainder []byte inBuf [256]byte - // history contains previously entered commands so that they can be - // accessed with the up and down keys. - history stRingBuffer + // History records and retrieves lines of input read by [ReadLine] which + // a user can retrieve and navigate using the up and down arrow keys. + // + // It is not safe to call ReadLine concurrently with any methods on History. + // + // [NewTerminal] sets this to a default implementation that records the + // last 100 lines of input. + History History // historyIndex stores the currently accessed history entry, where zero // means the immediately previous entry. historyIndex int @@ -109,6 +137,7 @@ func NewTerminal(c io.ReadWriter, prompt string) *Terminal { termHeight: 24, echo: true, historyIndex: -1, + History: &stRingBuffer{}, } } @@ -117,6 +146,7 @@ const ( keyCtrlD = 4 keyCtrlU = 21 keyEnter = '\r' + keyLF = '\n' keyEscape = 27 keyBackspace = 127 keyUnknown = 0xd800 /* UTF-16 surrogate area */ + iota @@ -130,7 +160,9 @@ const ( keyEnd keyDeleteWord keyDeleteLine + keyDelete keyClearScreen + keyTranspose keyPasteStart keyPasteEnd ) @@ -164,6 +196,8 @@ func bytesToKey(b []byte, pasteActive bool) (rune, []byte) { return keyDeleteLine, b[1:] case 12: // ^L return keyClearScreen, b[1:] + case 20: // ^T + return keyTranspose, b[1:] case 23: // ^W return keyDeleteWord, b[1:] case 14: // ^N @@ -198,6 +232,10 @@ func bytesToKey(b []byte, pasteActive bool) (rune, []byte) { } } + if !pasteActive && len(b) >= 4 && b[0] == keyEscape && b[1] == '[' && b[2] == '3' && b[3] == '~' { + return keyDelete, b[4:] + } + if !pasteActive && len(b) >= 6 && b[0] == keyEscape && b[1] == '[' && b[2] == '1' && b[3] == ';' && b[4] == '3' { switch b[5] { case 'C': @@ -383,7 +421,7 @@ func (t *Terminal) eraseNPreviousChars(n int) { } } -// countToLeftWord returns then number of characters from the cursor to the +// countToLeftWord returns the number of characters from the cursor to the // start of the previous word. func (t *Terminal) countToLeftWord() int { if t.pos == 0 { @@ -408,7 +446,7 @@ func (t *Terminal) countToLeftWord() int { return t.pos - pos } -// countToRightWord returns then number of characters from the cursor to the +// countToRightWord returns the number of characters from the cursor to the // start of the next word. func (t *Terminal) countToRightWord() int { pos := t.pos @@ -448,10 +486,27 @@ func visualLength(runes []rune) int { return length } +// historyAt unlocks the terminal and relocks it while calling History.At. +func (t *Terminal) historyAt(idx int) (string, bool) { + t.lock.Unlock() // Unlock to avoid deadlock if History methods use the output writer. + defer t.lock.Lock() // panic in At (or Len) protection. + if idx < 0 || idx >= t.History.Len() { + return "", false + } + return t.History.At(idx), true +} + +// historyAdd unlocks the terminal and relocks it while calling History.Add. +func (t *Terminal) historyAdd(entry string) { + t.lock.Unlock() // Unlock to avoid deadlock if History methods use the output writer. + defer t.lock.Lock() // panic in Add protection. + t.History.Add(entry) +} + // handleKey processes the given key and, optionally, returns a line of text // that the user has entered. func (t *Terminal) handleKey(key rune) (line string, ok bool) { - if t.pasteActive && key != keyEnter { + if t.pasteActive && key != keyEnter && key != keyLF { t.addKeyToLine(key) return } @@ -495,7 +550,7 @@ func (t *Terminal) handleKey(key rune) (line string, ok bool) { t.pos = len(t.line) t.moveCursorToPos(t.pos) case keyUp: - entry, ok := t.history.NthPreviousEntry(t.historyIndex + 1) + entry, ok := t.historyAt(t.historyIndex + 1) if !ok { return "", false } @@ -514,14 +569,14 @@ func (t *Terminal) handleKey(key rune) (line string, ok bool) { t.setLine(runes, len(runes)) t.historyIndex-- default: - entry, ok := t.history.NthPreviousEntry(t.historyIndex - 1) + entry, ok := t.historyAt(t.historyIndex - 1) if ok { t.historyIndex-- runes := []rune(entry) t.setLine(runes, len(runes)) } } - case keyEnter: + case keyEnter, keyLF: t.moveCursorToPos(len(t.line)) t.queue([]rune("\r\n")) line = string(t.line) @@ -543,7 +598,7 @@ func (t *Terminal) handleKey(key rune) (line string, ok bool) { } t.line = t.line[:t.pos] t.moveCursorToPos(t.pos) - case keyCtrlD: + case keyCtrlD, keyDelete: // Erase the character under the current position. // The EOF case when the line is empty is handled in // readLine(). @@ -553,6 +608,24 @@ func (t *Terminal) handleKey(key rune) (line string, ok bool) { } case keyCtrlU: t.eraseNPreviousChars(t.pos) + case keyTranspose: + // This transposes the two characters around the cursor and advances the cursor. Best-effort. + if len(t.line) < 2 || t.pos < 1 { + return + } + swap := t.pos + if swap == len(t.line) { + swap-- // special: at end of line, swap previous two chars + } + t.line[swap-1], t.line[swap] = t.line[swap], t.line[swap-1] + if t.pos < len(t.line) { + t.pos++ + } + if t.echo { + t.moveCursorToPos(swap - 1) + t.writeLine(t.line[swap-1:]) + t.moveCursorToPos(t.pos) + } case keyClearScreen: // Erases the screen and moves the cursor to the home position. t.queue([]rune("\x1b[2J\x1b[H")) @@ -692,6 +765,8 @@ func (t *Terminal) Write(buf []byte) (n int, err error) { // ReadPassword temporarily changes the prompt and reads a password, without // echo, from the terminal. +// +// The AutoCompleteCallback is disabled during this call. func (t *Terminal) ReadPassword(prompt string) (line string, err error) { t.lock.Lock() defer t.lock.Unlock() @@ -699,6 +774,11 @@ func (t *Terminal) ReadPassword(prompt string) (line string, err error) { oldPrompt := t.prompt t.prompt = []rune(prompt) t.echo = false + oldAutoCompleteCallback := t.AutoCompleteCallback + t.AutoCompleteCallback = nil + defer func() { + t.AutoCompleteCallback = oldAutoCompleteCallback + }() line, err = t.readLine() @@ -759,6 +839,10 @@ func (t *Terminal) readLine() (line string, err error) { if !t.pasteActive { lineIsPasted = false } + // If we have CR, consume LF if present (CRLF sequence) to avoid returning an extra empty line. + if key == keyEnter && len(rest) > 0 && rest[0] == keyLF { + rest = rest[1:] + } line, lineOk = t.handleKey(key) } if len(rest) > 0 { @@ -772,7 +856,7 @@ func (t *Terminal) readLine() (line string, err error) { if lineOk { if t.echo { t.historyIndex = -1 - t.history.Add(line) + t.historyAdd(line) } if lineIsPasted { err = ErrPasteIndicator @@ -929,19 +1013,23 @@ func (s *stRingBuffer) Add(a string) { } } -// NthPreviousEntry returns the value passed to the nth previous call to Add. +func (s *stRingBuffer) Len() int { + return s.size +} + +// At returns the value passed to the nth previous call to Add. // If n is zero then the immediately prior value is returned, if one, then the // next most recent, and so on. If such an element doesn't exist then ok is // false. -func (s *stRingBuffer) NthPreviousEntry(n int) (value string, ok bool) { +func (s *stRingBuffer) At(n int) string { if n < 0 || n >= s.size { - return "", false + panic(fmt.Sprintf("term: history index [%d] out of range [0,%d)", n, s.size)) } index := s.head - n if index < 0 { index += s.max } - return s.entries[index], true + return s.entries[index] } // readPasswordLine reads from reader until it finds \n or io.EOF. diff --git a/vendor/golang.org/x/text/encoding/japanese/eucjp.go b/vendor/golang.org/x/text/encoding/japanese/eucjp.go index 79313fa589..6fce8c5f52 100644 --- a/vendor/golang.org/x/text/encoding/japanese/eucjp.go +++ b/vendor/golang.org/x/text/encoding/japanese/eucjp.go @@ -17,9 +17,9 @@ import ( var EUCJP encoding.Encoding = &eucJP var eucJP = internal.Encoding{ - &internal.SimpleEncoding{eucJPDecoder{}, eucJPEncoder{}}, - "EUC-JP", - identifier.EUCPkdFmtJapanese, + Encoding: &internal.SimpleEncoding{Decoder: eucJPDecoder{}, Encoder: eucJPEncoder{}}, + Name: "EUC-JP", + MIB: identifier.EUCPkdFmtJapanese, } type eucJPDecoder struct{ transform.NopResetter } diff --git a/vendor/golang.org/x/text/encoding/japanese/iso2022jp.go b/vendor/golang.org/x/text/encoding/japanese/iso2022jp.go index 613226df5e..6f7bd460a6 100644 --- a/vendor/golang.org/x/text/encoding/japanese/iso2022jp.go +++ b/vendor/golang.org/x/text/encoding/japanese/iso2022jp.go @@ -17,9 +17,9 @@ import ( var ISO2022JP encoding.Encoding = &iso2022JP var iso2022JP = internal.Encoding{ - internal.FuncEncoding{iso2022JPNewDecoder, iso2022JPNewEncoder}, - "ISO-2022-JP", - identifier.ISO2022JP, + Encoding: internal.FuncEncoding{Decoder: iso2022JPNewDecoder, Encoder: iso2022JPNewEncoder}, + Name: "ISO-2022-JP", + MIB: identifier.ISO2022JP, } func iso2022JPNewDecoder() transform.Transformer { diff --git a/vendor/golang.org/x/text/encoding/japanese/shiftjis.go b/vendor/golang.org/x/text/encoding/japanese/shiftjis.go index 16fd8a6e3e..af65d43d95 100644 --- a/vendor/golang.org/x/text/encoding/japanese/shiftjis.go +++ b/vendor/golang.org/x/text/encoding/japanese/shiftjis.go @@ -18,9 +18,9 @@ import ( var ShiftJIS encoding.Encoding = &shiftJIS var shiftJIS = internal.Encoding{ - &internal.SimpleEncoding{shiftJISDecoder{}, shiftJISEncoder{}}, - "Shift JIS", - identifier.ShiftJIS, + Encoding: &internal.SimpleEncoding{Decoder: shiftJISDecoder{}, Encoder: shiftJISEncoder{}}, + Name: "Shift JIS", + MIB: identifier.ShiftJIS, } type shiftJISDecoder struct{ transform.NopResetter } diff --git a/vendor/golang.org/x/text/encoding/korean/euckr.go b/vendor/golang.org/x/text/encoding/korean/euckr.go index 034337f5df..81c834730c 100644 --- a/vendor/golang.org/x/text/encoding/korean/euckr.go +++ b/vendor/golang.org/x/text/encoding/korean/euckr.go @@ -20,9 +20,9 @@ var All = []encoding.Encoding{EUCKR} var EUCKR encoding.Encoding = &eucKR var eucKR = internal.Encoding{ - &internal.SimpleEncoding{eucKRDecoder{}, eucKREncoder{}}, - "EUC-KR", - identifier.EUCKR, + Encoding: &internal.SimpleEncoding{Decoder: eucKRDecoder{}, Encoder: eucKREncoder{}}, + Name: "EUC-KR", + MIB: identifier.EUCKR, } type eucKRDecoder struct{ transform.NopResetter } diff --git a/vendor/golang.org/x/text/encoding/simplifiedchinese/gbk.go b/vendor/golang.org/x/text/encoding/simplifiedchinese/gbk.go index 0e0fabfd6b..2f2fd5d449 100644 --- a/vendor/golang.org/x/text/encoding/simplifiedchinese/gbk.go +++ b/vendor/golang.org/x/text/encoding/simplifiedchinese/gbk.go @@ -22,21 +22,21 @@ var ( ) var gbk = internal.Encoding{ - &internal.SimpleEncoding{ - gbkDecoder{gb18030: false}, - gbkEncoder{gb18030: false}, + Encoding: &internal.SimpleEncoding{ + Decoder: gbkDecoder{gb18030: false}, + Encoder: gbkEncoder{gb18030: false}, }, - "GBK", - identifier.GBK, + Name: "GBK", + MIB: identifier.GBK, } var gbk18030 = internal.Encoding{ - &internal.SimpleEncoding{ - gbkDecoder{gb18030: true}, - gbkEncoder{gb18030: true}, + Encoding: &internal.SimpleEncoding{ + Decoder: gbkDecoder{gb18030: true}, + Encoder: gbkEncoder{gb18030: true}, }, - "GB18030", - identifier.GB18030, + Name: "GB18030", + MIB: identifier.GB18030, } type gbkDecoder struct { diff --git a/vendor/golang.org/x/text/encoding/simplifiedchinese/hzgb2312.go b/vendor/golang.org/x/text/encoding/simplifiedchinese/hzgb2312.go index e15b7bf6a7..351750e60e 100644 --- a/vendor/golang.org/x/text/encoding/simplifiedchinese/hzgb2312.go +++ b/vendor/golang.org/x/text/encoding/simplifiedchinese/hzgb2312.go @@ -17,9 +17,9 @@ import ( var HZGB2312 encoding.Encoding = &hzGB2312 var hzGB2312 = internal.Encoding{ - internal.FuncEncoding{hzGB2312NewDecoder, hzGB2312NewEncoder}, - "HZ-GB2312", - identifier.HZGB2312, + Encoding: internal.FuncEncoding{Decoder: hzGB2312NewDecoder, Encoder: hzGB2312NewEncoder}, + Name: "HZ-GB2312", + MIB: identifier.HZGB2312, } func hzGB2312NewDecoder() transform.Transformer { diff --git a/vendor/golang.org/x/text/encoding/traditionalchinese/big5.go b/vendor/golang.org/x/text/encoding/traditionalchinese/big5.go index 1fcddde082..5046920ee0 100644 --- a/vendor/golang.org/x/text/encoding/traditionalchinese/big5.go +++ b/vendor/golang.org/x/text/encoding/traditionalchinese/big5.go @@ -20,9 +20,9 @@ var All = []encoding.Encoding{Big5} var Big5 encoding.Encoding = &big5 var big5 = internal.Encoding{ - &internal.SimpleEncoding{big5Decoder{}, big5Encoder{}}, - "Big5", - identifier.Big5, + Encoding: &internal.SimpleEncoding{Decoder: big5Decoder{}, Encoder: big5Encoder{}}, + Name: "Big5", + MIB: identifier.Big5, } type big5Decoder struct{ transform.NopResetter } diff --git a/vendor/golang.org/x/text/encoding/unicode/unicode.go b/vendor/golang.org/x/text/encoding/unicode/unicode.go index dd99ad14d3..ce28c90628 100644 --- a/vendor/golang.org/x/text/encoding/unicode/unicode.go +++ b/vendor/golang.org/x/text/encoding/unicode/unicode.go @@ -60,9 +60,9 @@ func (utf8bomEncoding) NewDecoder() *encoding.Decoder { } var utf8enc = &internal.Encoding{ - &internal.SimpleEncoding{utf8Decoder{}, runes.ReplaceIllFormed()}, - "UTF-8", - identifier.UTF8, + Encoding: &internal.SimpleEncoding{Decoder: utf8Decoder{}, Encoder: runes.ReplaceIllFormed()}, + Name: "UTF-8", + MIB: identifier.UTF8, } type utf8bomDecoder struct { diff --git a/vendor/golang.org/x/text/language/parse.go b/vendor/golang.org/x/text/language/parse.go index 4d57222e77..053336e286 100644 --- a/vendor/golang.org/x/text/language/parse.go +++ b/vendor/golang.org/x/text/language/parse.go @@ -59,7 +59,7 @@ func (c CanonType) Parse(s string) (t Tag, err error) { if changed { tt.RemakeString() } - return makeTag(tt), err + return makeTag(tt), nil } // Compose creates a Tag from individual parts, which may be of type Tag, Base, diff --git a/vendor/golang.org/x/text/secure/bidirule/bidirule.go b/vendor/golang.org/x/text/secure/bidirule/bidirule.go index e2b70f76c2..5386327308 100644 --- a/vendor/golang.org/x/text/secure/bidirule/bidirule.go +++ b/vendor/golang.org/x/text/secure/bidirule/bidirule.go @@ -334,3 +334,7 @@ func (t *Transformer) advanceString(s string) (n int, ok bool) { } return n, true } + +func (t *Transformer) isFinal() bool { + return t.state == ruleLTRFinal || t.state == ruleRTLFinal || t.state == ruleInitial +} diff --git a/vendor/golang.org/x/text/secure/bidirule/bidirule10.0.0.go b/vendor/golang.org/x/text/secure/bidirule/bidirule10.0.0.go deleted file mode 100644 index 784bb88087..0000000000 --- a/vendor/golang.org/x/text/secure/bidirule/bidirule10.0.0.go +++ /dev/null @@ -1,11 +0,0 @@ -// Copyright 2016 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build go1.10 - -package bidirule - -func (t *Transformer) isFinal() bool { - return t.state == ruleLTRFinal || t.state == ruleRTLFinal || t.state == ruleInitial -} diff --git a/vendor/golang.org/x/text/secure/bidirule/bidirule9.0.0.go b/vendor/golang.org/x/text/secure/bidirule/bidirule9.0.0.go deleted file mode 100644 index 8e1e943955..0000000000 --- a/vendor/golang.org/x/text/secure/bidirule/bidirule9.0.0.go +++ /dev/null @@ -1,14 +0,0 @@ -// Copyright 2016 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build !go1.10 - -package bidirule - -func (t *Transformer) isFinal() bool { - if !t.isRTL() { - return true - } - return t.state == ruleLTRFinal || t.state == ruleRTLFinal || t.state == ruleInitial -} diff --git a/vendor/golang.org/x/text/unicode/bidi/core.go b/vendor/golang.org/x/text/unicode/bidi/core.go index 9d2ae547b5..fb8273236d 100644 --- a/vendor/golang.org/x/text/unicode/bidi/core.go +++ b/vendor/golang.org/x/text/unicode/bidi/core.go @@ -427,13 +427,6 @@ type isolatingRunSequence struct { func (i *isolatingRunSequence) Len() int { return len(i.indexes) } -func maxLevel(a, b level) level { - if a > b { - return a - } - return b -} - // Rule X10, second bullet: Determine the start-of-sequence (sos) and end-of-sequence (eos) types, // either L or R, for each isolating run sequence. func (p *paragraph) isolatingRunSequence(indexes []int) *isolatingRunSequence { @@ -474,8 +467,8 @@ func (p *paragraph) isolatingRunSequence(indexes []int) *isolatingRunSequence { indexes: indexes, types: types, level: level, - sos: typeForLevel(maxLevel(prevLevel, level)), - eos: typeForLevel(maxLevel(succLevel, level)), + sos: typeForLevel(max(prevLevel, level)), + eos: typeForLevel(max(succLevel, level)), } } diff --git a/vendor/golang.org/x/text/unicode/bidi/tables10.0.0.go b/vendor/golang.org/x/text/unicode/bidi/tables10.0.0.go deleted file mode 100644 index d2bd71181d..0000000000 --- a/vendor/golang.org/x/text/unicode/bidi/tables10.0.0.go +++ /dev/null @@ -1,1815 +0,0 @@ -// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. - -//go:build go1.10 && !go1.13 - -package bidi - -// UnicodeVersion is the Unicode version from which the tables in this package are derived. -const UnicodeVersion = "10.0.0" - -// xorMasks contains masks to be xor-ed with brackets to get the reverse -// version. -var xorMasks = []int32{ // 8 elements - 0, 1, 6, 7, 3, 15, 29, 63, -} // Size: 56 bytes - -// lookup returns the trie value for the first UTF-8 encoding in s and -// the width in bytes of this encoding. The size will be 0 if s does not -// hold enough bytes to complete the encoding. len(s) must be greater than 0. -func (t *bidiTrie) lookup(s []byte) (v uint8, sz int) { - c0 := s[0] - switch { - case c0 < 0x80: // is ASCII - return bidiValues[c0], 1 - case c0 < 0xC2: - return 0, 1 // Illegal UTF-8: not a starter, not ASCII. - case c0 < 0xE0: // 2-byte UTF-8 - if len(s) < 2 { - return 0, 0 - } - i := bidiIndex[c0] - c1 := s[1] - if c1 < 0x80 || 0xC0 <= c1 { - return 0, 1 // Illegal UTF-8: not a continuation byte. - } - return t.lookupValue(uint32(i), c1), 2 - case c0 < 0xF0: // 3-byte UTF-8 - if len(s) < 3 { - return 0, 0 - } - i := bidiIndex[c0] - c1 := s[1] - if c1 < 0x80 || 0xC0 <= c1 { - return 0, 1 // Illegal UTF-8: not a continuation byte. - } - o := uint32(i)<<6 + uint32(c1) - i = bidiIndex[o] - c2 := s[2] - if c2 < 0x80 || 0xC0 <= c2 { - return 0, 2 // Illegal UTF-8: not a continuation byte. - } - return t.lookupValue(uint32(i), c2), 3 - case c0 < 0xF8: // 4-byte UTF-8 - if len(s) < 4 { - return 0, 0 - } - i := bidiIndex[c0] - c1 := s[1] - if c1 < 0x80 || 0xC0 <= c1 { - return 0, 1 // Illegal UTF-8: not a continuation byte. - } - o := uint32(i)<<6 + uint32(c1) - i = bidiIndex[o] - c2 := s[2] - if c2 < 0x80 || 0xC0 <= c2 { - return 0, 2 // Illegal UTF-8: not a continuation byte. - } - o = uint32(i)<<6 + uint32(c2) - i = bidiIndex[o] - c3 := s[3] - if c3 < 0x80 || 0xC0 <= c3 { - return 0, 3 // Illegal UTF-8: not a continuation byte. - } - return t.lookupValue(uint32(i), c3), 4 - } - // Illegal rune - return 0, 1 -} - -// lookupUnsafe returns the trie value for the first UTF-8 encoding in s. -// s must start with a full and valid UTF-8 encoded rune. -func (t *bidiTrie) lookupUnsafe(s []byte) uint8 { - c0 := s[0] - if c0 < 0x80 { // is ASCII - return bidiValues[c0] - } - i := bidiIndex[c0] - if c0 < 0xE0 { // 2-byte UTF-8 - return t.lookupValue(uint32(i), s[1]) - } - i = bidiIndex[uint32(i)<<6+uint32(s[1])] - if c0 < 0xF0 { // 3-byte UTF-8 - return t.lookupValue(uint32(i), s[2]) - } - i = bidiIndex[uint32(i)<<6+uint32(s[2])] - if c0 < 0xF8 { // 4-byte UTF-8 - return t.lookupValue(uint32(i), s[3]) - } - return 0 -} - -// lookupString returns the trie value for the first UTF-8 encoding in s and -// the width in bytes of this encoding. The size will be 0 if s does not -// hold enough bytes to complete the encoding. len(s) must be greater than 0. -func (t *bidiTrie) lookupString(s string) (v uint8, sz int) { - c0 := s[0] - switch { - case c0 < 0x80: // is ASCII - return bidiValues[c0], 1 - case c0 < 0xC2: - return 0, 1 // Illegal UTF-8: not a starter, not ASCII. - case c0 < 0xE0: // 2-byte UTF-8 - if len(s) < 2 { - return 0, 0 - } - i := bidiIndex[c0] - c1 := s[1] - if c1 < 0x80 || 0xC0 <= c1 { - return 0, 1 // Illegal UTF-8: not a continuation byte. - } - return t.lookupValue(uint32(i), c1), 2 - case c0 < 0xF0: // 3-byte UTF-8 - if len(s) < 3 { - return 0, 0 - } - i := bidiIndex[c0] - c1 := s[1] - if c1 < 0x80 || 0xC0 <= c1 { - return 0, 1 // Illegal UTF-8: not a continuation byte. - } - o := uint32(i)<<6 + uint32(c1) - i = bidiIndex[o] - c2 := s[2] - if c2 < 0x80 || 0xC0 <= c2 { - return 0, 2 // Illegal UTF-8: not a continuation byte. - } - return t.lookupValue(uint32(i), c2), 3 - case c0 < 0xF8: // 4-byte UTF-8 - if len(s) < 4 { - return 0, 0 - } - i := bidiIndex[c0] - c1 := s[1] - if c1 < 0x80 || 0xC0 <= c1 { - return 0, 1 // Illegal UTF-8: not a continuation byte. - } - o := uint32(i)<<6 + uint32(c1) - i = bidiIndex[o] - c2 := s[2] - if c2 < 0x80 || 0xC0 <= c2 { - return 0, 2 // Illegal UTF-8: not a continuation byte. - } - o = uint32(i)<<6 + uint32(c2) - i = bidiIndex[o] - c3 := s[3] - if c3 < 0x80 || 0xC0 <= c3 { - return 0, 3 // Illegal UTF-8: not a continuation byte. - } - return t.lookupValue(uint32(i), c3), 4 - } - // Illegal rune - return 0, 1 -} - -// lookupStringUnsafe returns the trie value for the first UTF-8 encoding in s. -// s must start with a full and valid UTF-8 encoded rune. -func (t *bidiTrie) lookupStringUnsafe(s string) uint8 { - c0 := s[0] - if c0 < 0x80 { // is ASCII - return bidiValues[c0] - } - i := bidiIndex[c0] - if c0 < 0xE0 { // 2-byte UTF-8 - return t.lookupValue(uint32(i), s[1]) - } - i = bidiIndex[uint32(i)<<6+uint32(s[1])] - if c0 < 0xF0 { // 3-byte UTF-8 - return t.lookupValue(uint32(i), s[2]) - } - i = bidiIndex[uint32(i)<<6+uint32(s[2])] - if c0 < 0xF8 { // 4-byte UTF-8 - return t.lookupValue(uint32(i), s[3]) - } - return 0 -} - -// bidiTrie. Total size: 16128 bytes (15.75 KiB). Checksum: 8122d83e461996f. -type bidiTrie struct{} - -func newBidiTrie(i int) *bidiTrie { - return &bidiTrie{} -} - -// lookupValue determines the type of block n and looks up the value for b. -func (t *bidiTrie) lookupValue(n uint32, b byte) uint8 { - switch { - default: - return uint8(bidiValues[n<<6+uint32(b)]) - } -} - -// bidiValues: 228 blocks, 14592 entries, 14592 bytes -// The third block is the zero block. -var bidiValues = [14592]uint8{ - // Block 0x0, offset 0x0 - 0x00: 0x000b, 0x01: 0x000b, 0x02: 0x000b, 0x03: 0x000b, 0x04: 0x000b, 0x05: 0x000b, - 0x06: 0x000b, 0x07: 0x000b, 0x08: 0x000b, 0x09: 0x0008, 0x0a: 0x0007, 0x0b: 0x0008, - 0x0c: 0x0009, 0x0d: 0x0007, 0x0e: 0x000b, 0x0f: 0x000b, 0x10: 0x000b, 0x11: 0x000b, - 0x12: 0x000b, 0x13: 0x000b, 0x14: 0x000b, 0x15: 0x000b, 0x16: 0x000b, 0x17: 0x000b, - 0x18: 0x000b, 0x19: 0x000b, 0x1a: 0x000b, 0x1b: 0x000b, 0x1c: 0x0007, 0x1d: 0x0007, - 0x1e: 0x0007, 0x1f: 0x0008, 0x20: 0x0009, 0x21: 0x000a, 0x22: 0x000a, 0x23: 0x0004, - 0x24: 0x0004, 0x25: 0x0004, 0x26: 0x000a, 0x27: 0x000a, 0x28: 0x003a, 0x29: 0x002a, - 0x2a: 0x000a, 0x2b: 0x0003, 0x2c: 0x0006, 0x2d: 0x0003, 0x2e: 0x0006, 0x2f: 0x0006, - 0x30: 0x0002, 0x31: 0x0002, 0x32: 0x0002, 0x33: 0x0002, 0x34: 0x0002, 0x35: 0x0002, - 0x36: 0x0002, 0x37: 0x0002, 0x38: 0x0002, 0x39: 0x0002, 0x3a: 0x0006, 0x3b: 0x000a, - 0x3c: 0x000a, 0x3d: 0x000a, 0x3e: 0x000a, 0x3f: 0x000a, - // Block 0x1, offset 0x40 - 0x40: 0x000a, - 0x5b: 0x005a, 0x5c: 0x000a, 0x5d: 0x004a, - 0x5e: 0x000a, 0x5f: 0x000a, 0x60: 0x000a, - 0x7b: 0x005a, - 0x7c: 0x000a, 0x7d: 0x004a, 0x7e: 0x000a, 0x7f: 0x000b, - // Block 0x2, offset 0x80 - // Block 0x3, offset 0xc0 - 0xc0: 0x000b, 0xc1: 0x000b, 0xc2: 0x000b, 0xc3: 0x000b, 0xc4: 0x000b, 0xc5: 0x0007, - 0xc6: 0x000b, 0xc7: 0x000b, 0xc8: 0x000b, 0xc9: 0x000b, 0xca: 0x000b, 0xcb: 0x000b, - 0xcc: 0x000b, 0xcd: 0x000b, 0xce: 0x000b, 0xcf: 0x000b, 0xd0: 0x000b, 0xd1: 0x000b, - 0xd2: 0x000b, 0xd3: 0x000b, 0xd4: 0x000b, 0xd5: 0x000b, 0xd6: 0x000b, 0xd7: 0x000b, - 0xd8: 0x000b, 0xd9: 0x000b, 0xda: 0x000b, 0xdb: 0x000b, 0xdc: 0x000b, 0xdd: 0x000b, - 0xde: 0x000b, 0xdf: 0x000b, 0xe0: 0x0006, 0xe1: 0x000a, 0xe2: 0x0004, 0xe3: 0x0004, - 0xe4: 0x0004, 0xe5: 0x0004, 0xe6: 0x000a, 0xe7: 0x000a, 0xe8: 0x000a, 0xe9: 0x000a, - 0xeb: 0x000a, 0xec: 0x000a, 0xed: 0x000b, 0xee: 0x000a, 0xef: 0x000a, - 0xf0: 0x0004, 0xf1: 0x0004, 0xf2: 0x0002, 0xf3: 0x0002, 0xf4: 0x000a, - 0xf6: 0x000a, 0xf7: 0x000a, 0xf8: 0x000a, 0xf9: 0x0002, 0xfb: 0x000a, - 0xfc: 0x000a, 0xfd: 0x000a, 0xfe: 0x000a, 0xff: 0x000a, - // Block 0x4, offset 0x100 - 0x117: 0x000a, - 0x137: 0x000a, - // Block 0x5, offset 0x140 - 0x179: 0x000a, 0x17a: 0x000a, - // Block 0x6, offset 0x180 - 0x182: 0x000a, 0x183: 0x000a, 0x184: 0x000a, 0x185: 0x000a, - 0x186: 0x000a, 0x187: 0x000a, 0x188: 0x000a, 0x189: 0x000a, 0x18a: 0x000a, 0x18b: 0x000a, - 0x18c: 0x000a, 0x18d: 0x000a, 0x18e: 0x000a, 0x18f: 0x000a, - 0x192: 0x000a, 0x193: 0x000a, 0x194: 0x000a, 0x195: 0x000a, 0x196: 0x000a, 0x197: 0x000a, - 0x198: 0x000a, 0x199: 0x000a, 0x19a: 0x000a, 0x19b: 0x000a, 0x19c: 0x000a, 0x19d: 0x000a, - 0x19e: 0x000a, 0x19f: 0x000a, - 0x1a5: 0x000a, 0x1a6: 0x000a, 0x1a7: 0x000a, 0x1a8: 0x000a, 0x1a9: 0x000a, - 0x1aa: 0x000a, 0x1ab: 0x000a, 0x1ac: 0x000a, 0x1ad: 0x000a, 0x1af: 0x000a, - 0x1b0: 0x000a, 0x1b1: 0x000a, 0x1b2: 0x000a, 0x1b3: 0x000a, 0x1b4: 0x000a, 0x1b5: 0x000a, - 0x1b6: 0x000a, 0x1b7: 0x000a, 0x1b8: 0x000a, 0x1b9: 0x000a, 0x1ba: 0x000a, 0x1bb: 0x000a, - 0x1bc: 0x000a, 0x1bd: 0x000a, 0x1be: 0x000a, 0x1bf: 0x000a, - // Block 0x7, offset 0x1c0 - 0x1c0: 0x000c, 0x1c1: 0x000c, 0x1c2: 0x000c, 0x1c3: 0x000c, 0x1c4: 0x000c, 0x1c5: 0x000c, - 0x1c6: 0x000c, 0x1c7: 0x000c, 0x1c8: 0x000c, 0x1c9: 0x000c, 0x1ca: 0x000c, 0x1cb: 0x000c, - 0x1cc: 0x000c, 0x1cd: 0x000c, 0x1ce: 0x000c, 0x1cf: 0x000c, 0x1d0: 0x000c, 0x1d1: 0x000c, - 0x1d2: 0x000c, 0x1d3: 0x000c, 0x1d4: 0x000c, 0x1d5: 0x000c, 0x1d6: 0x000c, 0x1d7: 0x000c, - 0x1d8: 0x000c, 0x1d9: 0x000c, 0x1da: 0x000c, 0x1db: 0x000c, 0x1dc: 0x000c, 0x1dd: 0x000c, - 0x1de: 0x000c, 0x1df: 0x000c, 0x1e0: 0x000c, 0x1e1: 0x000c, 0x1e2: 0x000c, 0x1e3: 0x000c, - 0x1e4: 0x000c, 0x1e5: 0x000c, 0x1e6: 0x000c, 0x1e7: 0x000c, 0x1e8: 0x000c, 0x1e9: 0x000c, - 0x1ea: 0x000c, 0x1eb: 0x000c, 0x1ec: 0x000c, 0x1ed: 0x000c, 0x1ee: 0x000c, 0x1ef: 0x000c, - 0x1f0: 0x000c, 0x1f1: 0x000c, 0x1f2: 0x000c, 0x1f3: 0x000c, 0x1f4: 0x000c, 0x1f5: 0x000c, - 0x1f6: 0x000c, 0x1f7: 0x000c, 0x1f8: 0x000c, 0x1f9: 0x000c, 0x1fa: 0x000c, 0x1fb: 0x000c, - 0x1fc: 0x000c, 0x1fd: 0x000c, 0x1fe: 0x000c, 0x1ff: 0x000c, - // Block 0x8, offset 0x200 - 0x200: 0x000c, 0x201: 0x000c, 0x202: 0x000c, 0x203: 0x000c, 0x204: 0x000c, 0x205: 0x000c, - 0x206: 0x000c, 0x207: 0x000c, 0x208: 0x000c, 0x209: 0x000c, 0x20a: 0x000c, 0x20b: 0x000c, - 0x20c: 0x000c, 0x20d: 0x000c, 0x20e: 0x000c, 0x20f: 0x000c, 0x210: 0x000c, 0x211: 0x000c, - 0x212: 0x000c, 0x213: 0x000c, 0x214: 0x000c, 0x215: 0x000c, 0x216: 0x000c, 0x217: 0x000c, - 0x218: 0x000c, 0x219: 0x000c, 0x21a: 0x000c, 0x21b: 0x000c, 0x21c: 0x000c, 0x21d: 0x000c, - 0x21e: 0x000c, 0x21f: 0x000c, 0x220: 0x000c, 0x221: 0x000c, 0x222: 0x000c, 0x223: 0x000c, - 0x224: 0x000c, 0x225: 0x000c, 0x226: 0x000c, 0x227: 0x000c, 0x228: 0x000c, 0x229: 0x000c, - 0x22a: 0x000c, 0x22b: 0x000c, 0x22c: 0x000c, 0x22d: 0x000c, 0x22e: 0x000c, 0x22f: 0x000c, - 0x234: 0x000a, 0x235: 0x000a, - 0x23e: 0x000a, - // Block 0x9, offset 0x240 - 0x244: 0x000a, 0x245: 0x000a, - 0x247: 0x000a, - // Block 0xa, offset 0x280 - 0x2b6: 0x000a, - // Block 0xb, offset 0x2c0 - 0x2c3: 0x000c, 0x2c4: 0x000c, 0x2c5: 0x000c, - 0x2c6: 0x000c, 0x2c7: 0x000c, 0x2c8: 0x000c, 0x2c9: 0x000c, - // Block 0xc, offset 0x300 - 0x30a: 0x000a, - 0x30d: 0x000a, 0x30e: 0x000a, 0x30f: 0x0004, 0x310: 0x0001, 0x311: 0x000c, - 0x312: 0x000c, 0x313: 0x000c, 0x314: 0x000c, 0x315: 0x000c, 0x316: 0x000c, 0x317: 0x000c, - 0x318: 0x000c, 0x319: 0x000c, 0x31a: 0x000c, 0x31b: 0x000c, 0x31c: 0x000c, 0x31d: 0x000c, - 0x31e: 0x000c, 0x31f: 0x000c, 0x320: 0x000c, 0x321: 0x000c, 0x322: 0x000c, 0x323: 0x000c, - 0x324: 0x000c, 0x325: 0x000c, 0x326: 0x000c, 0x327: 0x000c, 0x328: 0x000c, 0x329: 0x000c, - 0x32a: 0x000c, 0x32b: 0x000c, 0x32c: 0x000c, 0x32d: 0x000c, 0x32e: 0x000c, 0x32f: 0x000c, - 0x330: 0x000c, 0x331: 0x000c, 0x332: 0x000c, 0x333: 0x000c, 0x334: 0x000c, 0x335: 0x000c, - 0x336: 0x000c, 0x337: 0x000c, 0x338: 0x000c, 0x339: 0x000c, 0x33a: 0x000c, 0x33b: 0x000c, - 0x33c: 0x000c, 0x33d: 0x000c, 0x33e: 0x0001, 0x33f: 0x000c, - // Block 0xd, offset 0x340 - 0x340: 0x0001, 0x341: 0x000c, 0x342: 0x000c, 0x343: 0x0001, 0x344: 0x000c, 0x345: 0x000c, - 0x346: 0x0001, 0x347: 0x000c, 0x348: 0x0001, 0x349: 0x0001, 0x34a: 0x0001, 0x34b: 0x0001, - 0x34c: 0x0001, 0x34d: 0x0001, 0x34e: 0x0001, 0x34f: 0x0001, 0x350: 0x0001, 0x351: 0x0001, - 0x352: 0x0001, 0x353: 0x0001, 0x354: 0x0001, 0x355: 0x0001, 0x356: 0x0001, 0x357: 0x0001, - 0x358: 0x0001, 0x359: 0x0001, 0x35a: 0x0001, 0x35b: 0x0001, 0x35c: 0x0001, 0x35d: 0x0001, - 0x35e: 0x0001, 0x35f: 0x0001, 0x360: 0x0001, 0x361: 0x0001, 0x362: 0x0001, 0x363: 0x0001, - 0x364: 0x0001, 0x365: 0x0001, 0x366: 0x0001, 0x367: 0x0001, 0x368: 0x0001, 0x369: 0x0001, - 0x36a: 0x0001, 0x36b: 0x0001, 0x36c: 0x0001, 0x36d: 0x0001, 0x36e: 0x0001, 0x36f: 0x0001, - 0x370: 0x0001, 0x371: 0x0001, 0x372: 0x0001, 0x373: 0x0001, 0x374: 0x0001, 0x375: 0x0001, - 0x376: 0x0001, 0x377: 0x0001, 0x378: 0x0001, 0x379: 0x0001, 0x37a: 0x0001, 0x37b: 0x0001, - 0x37c: 0x0001, 0x37d: 0x0001, 0x37e: 0x0001, 0x37f: 0x0001, - // Block 0xe, offset 0x380 - 0x380: 0x0005, 0x381: 0x0005, 0x382: 0x0005, 0x383: 0x0005, 0x384: 0x0005, 0x385: 0x0005, - 0x386: 0x000a, 0x387: 0x000a, 0x388: 0x000d, 0x389: 0x0004, 0x38a: 0x0004, 0x38b: 0x000d, - 0x38c: 0x0006, 0x38d: 0x000d, 0x38e: 0x000a, 0x38f: 0x000a, 0x390: 0x000c, 0x391: 0x000c, - 0x392: 0x000c, 0x393: 0x000c, 0x394: 0x000c, 0x395: 0x000c, 0x396: 0x000c, 0x397: 0x000c, - 0x398: 0x000c, 0x399: 0x000c, 0x39a: 0x000c, 0x39b: 0x000d, 0x39c: 0x000d, 0x39d: 0x000d, - 0x39e: 0x000d, 0x39f: 0x000d, 0x3a0: 0x000d, 0x3a1: 0x000d, 0x3a2: 0x000d, 0x3a3: 0x000d, - 0x3a4: 0x000d, 0x3a5: 0x000d, 0x3a6: 0x000d, 0x3a7: 0x000d, 0x3a8: 0x000d, 0x3a9: 0x000d, - 0x3aa: 0x000d, 0x3ab: 0x000d, 0x3ac: 0x000d, 0x3ad: 0x000d, 0x3ae: 0x000d, 0x3af: 0x000d, - 0x3b0: 0x000d, 0x3b1: 0x000d, 0x3b2: 0x000d, 0x3b3: 0x000d, 0x3b4: 0x000d, 0x3b5: 0x000d, - 0x3b6: 0x000d, 0x3b7: 0x000d, 0x3b8: 0x000d, 0x3b9: 0x000d, 0x3ba: 0x000d, 0x3bb: 0x000d, - 0x3bc: 0x000d, 0x3bd: 0x000d, 0x3be: 0x000d, 0x3bf: 0x000d, - // Block 0xf, offset 0x3c0 - 0x3c0: 0x000d, 0x3c1: 0x000d, 0x3c2: 0x000d, 0x3c3: 0x000d, 0x3c4: 0x000d, 0x3c5: 0x000d, - 0x3c6: 0x000d, 0x3c7: 0x000d, 0x3c8: 0x000d, 0x3c9: 0x000d, 0x3ca: 0x000d, 0x3cb: 0x000c, - 0x3cc: 0x000c, 0x3cd: 0x000c, 0x3ce: 0x000c, 0x3cf: 0x000c, 0x3d0: 0x000c, 0x3d1: 0x000c, - 0x3d2: 0x000c, 0x3d3: 0x000c, 0x3d4: 0x000c, 0x3d5: 0x000c, 0x3d6: 0x000c, 0x3d7: 0x000c, - 0x3d8: 0x000c, 0x3d9: 0x000c, 0x3da: 0x000c, 0x3db: 0x000c, 0x3dc: 0x000c, 0x3dd: 0x000c, - 0x3de: 0x000c, 0x3df: 0x000c, 0x3e0: 0x0005, 0x3e1: 0x0005, 0x3e2: 0x0005, 0x3e3: 0x0005, - 0x3e4: 0x0005, 0x3e5: 0x0005, 0x3e6: 0x0005, 0x3e7: 0x0005, 0x3e8: 0x0005, 0x3e9: 0x0005, - 0x3ea: 0x0004, 0x3eb: 0x0005, 0x3ec: 0x0005, 0x3ed: 0x000d, 0x3ee: 0x000d, 0x3ef: 0x000d, - 0x3f0: 0x000c, 0x3f1: 0x000d, 0x3f2: 0x000d, 0x3f3: 0x000d, 0x3f4: 0x000d, 0x3f5: 0x000d, - 0x3f6: 0x000d, 0x3f7: 0x000d, 0x3f8: 0x000d, 0x3f9: 0x000d, 0x3fa: 0x000d, 0x3fb: 0x000d, - 0x3fc: 0x000d, 0x3fd: 0x000d, 0x3fe: 0x000d, 0x3ff: 0x000d, - // Block 0x10, offset 0x400 - 0x400: 0x000d, 0x401: 0x000d, 0x402: 0x000d, 0x403: 0x000d, 0x404: 0x000d, 0x405: 0x000d, - 0x406: 0x000d, 0x407: 0x000d, 0x408: 0x000d, 0x409: 0x000d, 0x40a: 0x000d, 0x40b: 0x000d, - 0x40c: 0x000d, 0x40d: 0x000d, 0x40e: 0x000d, 0x40f: 0x000d, 0x410: 0x000d, 0x411: 0x000d, - 0x412: 0x000d, 0x413: 0x000d, 0x414: 0x000d, 0x415: 0x000d, 0x416: 0x000d, 0x417: 0x000d, - 0x418: 0x000d, 0x419: 0x000d, 0x41a: 0x000d, 0x41b: 0x000d, 0x41c: 0x000d, 0x41d: 0x000d, - 0x41e: 0x000d, 0x41f: 0x000d, 0x420: 0x000d, 0x421: 0x000d, 0x422: 0x000d, 0x423: 0x000d, - 0x424: 0x000d, 0x425: 0x000d, 0x426: 0x000d, 0x427: 0x000d, 0x428: 0x000d, 0x429: 0x000d, - 0x42a: 0x000d, 0x42b: 0x000d, 0x42c: 0x000d, 0x42d: 0x000d, 0x42e: 0x000d, 0x42f: 0x000d, - 0x430: 0x000d, 0x431: 0x000d, 0x432: 0x000d, 0x433: 0x000d, 0x434: 0x000d, 0x435: 0x000d, - 0x436: 0x000d, 0x437: 0x000d, 0x438: 0x000d, 0x439: 0x000d, 0x43a: 0x000d, 0x43b: 0x000d, - 0x43c: 0x000d, 0x43d: 0x000d, 0x43e: 0x000d, 0x43f: 0x000d, - // Block 0x11, offset 0x440 - 0x440: 0x000d, 0x441: 0x000d, 0x442: 0x000d, 0x443: 0x000d, 0x444: 0x000d, 0x445: 0x000d, - 0x446: 0x000d, 0x447: 0x000d, 0x448: 0x000d, 0x449: 0x000d, 0x44a: 0x000d, 0x44b: 0x000d, - 0x44c: 0x000d, 0x44d: 0x000d, 0x44e: 0x000d, 0x44f: 0x000d, 0x450: 0x000d, 0x451: 0x000d, - 0x452: 0x000d, 0x453: 0x000d, 0x454: 0x000d, 0x455: 0x000d, 0x456: 0x000c, 0x457: 0x000c, - 0x458: 0x000c, 0x459: 0x000c, 0x45a: 0x000c, 0x45b: 0x000c, 0x45c: 0x000c, 0x45d: 0x0005, - 0x45e: 0x000a, 0x45f: 0x000c, 0x460: 0x000c, 0x461: 0x000c, 0x462: 0x000c, 0x463: 0x000c, - 0x464: 0x000c, 0x465: 0x000d, 0x466: 0x000d, 0x467: 0x000c, 0x468: 0x000c, 0x469: 0x000a, - 0x46a: 0x000c, 0x46b: 0x000c, 0x46c: 0x000c, 0x46d: 0x000c, 0x46e: 0x000d, 0x46f: 0x000d, - 0x470: 0x0002, 0x471: 0x0002, 0x472: 0x0002, 0x473: 0x0002, 0x474: 0x0002, 0x475: 0x0002, - 0x476: 0x0002, 0x477: 0x0002, 0x478: 0x0002, 0x479: 0x0002, 0x47a: 0x000d, 0x47b: 0x000d, - 0x47c: 0x000d, 0x47d: 0x000d, 0x47e: 0x000d, 0x47f: 0x000d, - // Block 0x12, offset 0x480 - 0x480: 0x000d, 0x481: 0x000d, 0x482: 0x000d, 0x483: 0x000d, 0x484: 0x000d, 0x485: 0x000d, - 0x486: 0x000d, 0x487: 0x000d, 0x488: 0x000d, 0x489: 0x000d, 0x48a: 0x000d, 0x48b: 0x000d, - 0x48c: 0x000d, 0x48d: 0x000d, 0x48e: 0x000d, 0x48f: 0x000d, 0x490: 0x000d, 0x491: 0x000c, - 0x492: 0x000d, 0x493: 0x000d, 0x494: 0x000d, 0x495: 0x000d, 0x496: 0x000d, 0x497: 0x000d, - 0x498: 0x000d, 0x499: 0x000d, 0x49a: 0x000d, 0x49b: 0x000d, 0x49c: 0x000d, 0x49d: 0x000d, - 0x49e: 0x000d, 0x49f: 0x000d, 0x4a0: 0x000d, 0x4a1: 0x000d, 0x4a2: 0x000d, 0x4a3: 0x000d, - 0x4a4: 0x000d, 0x4a5: 0x000d, 0x4a6: 0x000d, 0x4a7: 0x000d, 0x4a8: 0x000d, 0x4a9: 0x000d, - 0x4aa: 0x000d, 0x4ab: 0x000d, 0x4ac: 0x000d, 0x4ad: 0x000d, 0x4ae: 0x000d, 0x4af: 0x000d, - 0x4b0: 0x000c, 0x4b1: 0x000c, 0x4b2: 0x000c, 0x4b3: 0x000c, 0x4b4: 0x000c, 0x4b5: 0x000c, - 0x4b6: 0x000c, 0x4b7: 0x000c, 0x4b8: 0x000c, 0x4b9: 0x000c, 0x4ba: 0x000c, 0x4bb: 0x000c, - 0x4bc: 0x000c, 0x4bd: 0x000c, 0x4be: 0x000c, 0x4bf: 0x000c, - // Block 0x13, offset 0x4c0 - 0x4c0: 0x000c, 0x4c1: 0x000c, 0x4c2: 0x000c, 0x4c3: 0x000c, 0x4c4: 0x000c, 0x4c5: 0x000c, - 0x4c6: 0x000c, 0x4c7: 0x000c, 0x4c8: 0x000c, 0x4c9: 0x000c, 0x4ca: 0x000c, 0x4cb: 0x000d, - 0x4cc: 0x000d, 0x4cd: 0x000d, 0x4ce: 0x000d, 0x4cf: 0x000d, 0x4d0: 0x000d, 0x4d1: 0x000d, - 0x4d2: 0x000d, 0x4d3: 0x000d, 0x4d4: 0x000d, 0x4d5: 0x000d, 0x4d6: 0x000d, 0x4d7: 0x000d, - 0x4d8: 0x000d, 0x4d9: 0x000d, 0x4da: 0x000d, 0x4db: 0x000d, 0x4dc: 0x000d, 0x4dd: 0x000d, - 0x4de: 0x000d, 0x4df: 0x000d, 0x4e0: 0x000d, 0x4e1: 0x000d, 0x4e2: 0x000d, 0x4e3: 0x000d, - 0x4e4: 0x000d, 0x4e5: 0x000d, 0x4e6: 0x000d, 0x4e7: 0x000d, 0x4e8: 0x000d, 0x4e9: 0x000d, - 0x4ea: 0x000d, 0x4eb: 0x000d, 0x4ec: 0x000d, 0x4ed: 0x000d, 0x4ee: 0x000d, 0x4ef: 0x000d, - 0x4f0: 0x000d, 0x4f1: 0x000d, 0x4f2: 0x000d, 0x4f3: 0x000d, 0x4f4: 0x000d, 0x4f5: 0x000d, - 0x4f6: 0x000d, 0x4f7: 0x000d, 0x4f8: 0x000d, 0x4f9: 0x000d, 0x4fa: 0x000d, 0x4fb: 0x000d, - 0x4fc: 0x000d, 0x4fd: 0x000d, 0x4fe: 0x000d, 0x4ff: 0x000d, - // Block 0x14, offset 0x500 - 0x500: 0x000d, 0x501: 0x000d, 0x502: 0x000d, 0x503: 0x000d, 0x504: 0x000d, 0x505: 0x000d, - 0x506: 0x000d, 0x507: 0x000d, 0x508: 0x000d, 0x509: 0x000d, 0x50a: 0x000d, 0x50b: 0x000d, - 0x50c: 0x000d, 0x50d: 0x000d, 0x50e: 0x000d, 0x50f: 0x000d, 0x510: 0x000d, 0x511: 0x000d, - 0x512: 0x000d, 0x513: 0x000d, 0x514: 0x000d, 0x515: 0x000d, 0x516: 0x000d, 0x517: 0x000d, - 0x518: 0x000d, 0x519: 0x000d, 0x51a: 0x000d, 0x51b: 0x000d, 0x51c: 0x000d, 0x51d: 0x000d, - 0x51e: 0x000d, 0x51f: 0x000d, 0x520: 0x000d, 0x521: 0x000d, 0x522: 0x000d, 0x523: 0x000d, - 0x524: 0x000d, 0x525: 0x000d, 0x526: 0x000c, 0x527: 0x000c, 0x528: 0x000c, 0x529: 0x000c, - 0x52a: 0x000c, 0x52b: 0x000c, 0x52c: 0x000c, 0x52d: 0x000c, 0x52e: 0x000c, 0x52f: 0x000c, - 0x530: 0x000c, 0x531: 0x000d, 0x532: 0x000d, 0x533: 0x000d, 0x534: 0x000d, 0x535: 0x000d, - 0x536: 0x000d, 0x537: 0x000d, 0x538: 0x000d, 0x539: 0x000d, 0x53a: 0x000d, 0x53b: 0x000d, - 0x53c: 0x000d, 0x53d: 0x000d, 0x53e: 0x000d, 0x53f: 0x000d, - // Block 0x15, offset 0x540 - 0x540: 0x0001, 0x541: 0x0001, 0x542: 0x0001, 0x543: 0x0001, 0x544: 0x0001, 0x545: 0x0001, - 0x546: 0x0001, 0x547: 0x0001, 0x548: 0x0001, 0x549: 0x0001, 0x54a: 0x0001, 0x54b: 0x0001, - 0x54c: 0x0001, 0x54d: 0x0001, 0x54e: 0x0001, 0x54f: 0x0001, 0x550: 0x0001, 0x551: 0x0001, - 0x552: 0x0001, 0x553: 0x0001, 0x554: 0x0001, 0x555: 0x0001, 0x556: 0x0001, 0x557: 0x0001, - 0x558: 0x0001, 0x559: 0x0001, 0x55a: 0x0001, 0x55b: 0x0001, 0x55c: 0x0001, 0x55d: 0x0001, - 0x55e: 0x0001, 0x55f: 0x0001, 0x560: 0x0001, 0x561: 0x0001, 0x562: 0x0001, 0x563: 0x0001, - 0x564: 0x0001, 0x565: 0x0001, 0x566: 0x0001, 0x567: 0x0001, 0x568: 0x0001, 0x569: 0x0001, - 0x56a: 0x0001, 0x56b: 0x000c, 0x56c: 0x000c, 0x56d: 0x000c, 0x56e: 0x000c, 0x56f: 0x000c, - 0x570: 0x000c, 0x571: 0x000c, 0x572: 0x000c, 0x573: 0x000c, 0x574: 0x0001, 0x575: 0x0001, - 0x576: 0x000a, 0x577: 0x000a, 0x578: 0x000a, 0x579: 0x000a, 0x57a: 0x0001, 0x57b: 0x0001, - 0x57c: 0x0001, 0x57d: 0x0001, 0x57e: 0x0001, 0x57f: 0x0001, - // Block 0x16, offset 0x580 - 0x580: 0x0001, 0x581: 0x0001, 0x582: 0x0001, 0x583: 0x0001, 0x584: 0x0001, 0x585: 0x0001, - 0x586: 0x0001, 0x587: 0x0001, 0x588: 0x0001, 0x589: 0x0001, 0x58a: 0x0001, 0x58b: 0x0001, - 0x58c: 0x0001, 0x58d: 0x0001, 0x58e: 0x0001, 0x58f: 0x0001, 0x590: 0x0001, 0x591: 0x0001, - 0x592: 0x0001, 0x593: 0x0001, 0x594: 0x0001, 0x595: 0x0001, 0x596: 0x000c, 0x597: 0x000c, - 0x598: 0x000c, 0x599: 0x000c, 0x59a: 0x0001, 0x59b: 0x000c, 0x59c: 0x000c, 0x59d: 0x000c, - 0x59e: 0x000c, 0x59f: 0x000c, 0x5a0: 0x000c, 0x5a1: 0x000c, 0x5a2: 0x000c, 0x5a3: 0x000c, - 0x5a4: 0x0001, 0x5a5: 0x000c, 0x5a6: 0x000c, 0x5a7: 0x000c, 0x5a8: 0x0001, 0x5a9: 0x000c, - 0x5aa: 0x000c, 0x5ab: 0x000c, 0x5ac: 0x000c, 0x5ad: 0x000c, 0x5ae: 0x0001, 0x5af: 0x0001, - 0x5b0: 0x0001, 0x5b1: 0x0001, 0x5b2: 0x0001, 0x5b3: 0x0001, 0x5b4: 0x0001, 0x5b5: 0x0001, - 0x5b6: 0x0001, 0x5b7: 0x0001, 0x5b8: 0x0001, 0x5b9: 0x0001, 0x5ba: 0x0001, 0x5bb: 0x0001, - 0x5bc: 0x0001, 0x5bd: 0x0001, 0x5be: 0x0001, 0x5bf: 0x0001, - // Block 0x17, offset 0x5c0 - 0x5c0: 0x0001, 0x5c1: 0x0001, 0x5c2: 0x0001, 0x5c3: 0x0001, 0x5c4: 0x0001, 0x5c5: 0x0001, - 0x5c6: 0x0001, 0x5c7: 0x0001, 0x5c8: 0x0001, 0x5c9: 0x0001, 0x5ca: 0x0001, 0x5cb: 0x0001, - 0x5cc: 0x0001, 0x5cd: 0x0001, 0x5ce: 0x0001, 0x5cf: 0x0001, 0x5d0: 0x0001, 0x5d1: 0x0001, - 0x5d2: 0x0001, 0x5d3: 0x0001, 0x5d4: 0x0001, 0x5d5: 0x0001, 0x5d6: 0x0001, 0x5d7: 0x0001, - 0x5d8: 0x0001, 0x5d9: 0x000c, 0x5da: 0x000c, 0x5db: 0x000c, 0x5dc: 0x0001, 0x5dd: 0x0001, - 0x5de: 0x0001, 0x5df: 0x0001, 0x5e0: 0x000d, 0x5e1: 0x000d, 0x5e2: 0x000d, 0x5e3: 0x000d, - 0x5e4: 0x000d, 0x5e5: 0x000d, 0x5e6: 0x000d, 0x5e7: 0x000d, 0x5e8: 0x000d, 0x5e9: 0x000d, - 0x5ea: 0x000d, 0x5eb: 0x000d, 0x5ec: 0x000d, 0x5ed: 0x000d, 0x5ee: 0x000d, 0x5ef: 0x000d, - 0x5f0: 0x0001, 0x5f1: 0x0001, 0x5f2: 0x0001, 0x5f3: 0x0001, 0x5f4: 0x0001, 0x5f5: 0x0001, - 0x5f6: 0x0001, 0x5f7: 0x0001, 0x5f8: 0x0001, 0x5f9: 0x0001, 0x5fa: 0x0001, 0x5fb: 0x0001, - 0x5fc: 0x0001, 0x5fd: 0x0001, 0x5fe: 0x0001, 0x5ff: 0x0001, - // Block 0x18, offset 0x600 - 0x600: 0x0001, 0x601: 0x0001, 0x602: 0x0001, 0x603: 0x0001, 0x604: 0x0001, 0x605: 0x0001, - 0x606: 0x0001, 0x607: 0x0001, 0x608: 0x0001, 0x609: 0x0001, 0x60a: 0x0001, 0x60b: 0x0001, - 0x60c: 0x0001, 0x60d: 0x0001, 0x60e: 0x0001, 0x60f: 0x0001, 0x610: 0x0001, 0x611: 0x0001, - 0x612: 0x0001, 0x613: 0x0001, 0x614: 0x0001, 0x615: 0x0001, 0x616: 0x0001, 0x617: 0x0001, - 0x618: 0x0001, 0x619: 0x0001, 0x61a: 0x0001, 0x61b: 0x0001, 0x61c: 0x0001, 0x61d: 0x0001, - 0x61e: 0x0001, 0x61f: 0x0001, 0x620: 0x000d, 0x621: 0x000d, 0x622: 0x000d, 0x623: 0x000d, - 0x624: 0x000d, 0x625: 0x000d, 0x626: 0x000d, 0x627: 0x000d, 0x628: 0x000d, 0x629: 0x000d, - 0x62a: 0x000d, 0x62b: 0x000d, 0x62c: 0x000d, 0x62d: 0x000d, 0x62e: 0x000d, 0x62f: 0x000d, - 0x630: 0x000d, 0x631: 0x000d, 0x632: 0x000d, 0x633: 0x000d, 0x634: 0x000d, 0x635: 0x000d, - 0x636: 0x000d, 0x637: 0x000d, 0x638: 0x000d, 0x639: 0x000d, 0x63a: 0x000d, 0x63b: 0x000d, - 0x63c: 0x000d, 0x63d: 0x000d, 0x63e: 0x000d, 0x63f: 0x000d, - // Block 0x19, offset 0x640 - 0x640: 0x000d, 0x641: 0x000d, 0x642: 0x000d, 0x643: 0x000d, 0x644: 0x000d, 0x645: 0x000d, - 0x646: 0x000d, 0x647: 0x000d, 0x648: 0x000d, 0x649: 0x000d, 0x64a: 0x000d, 0x64b: 0x000d, - 0x64c: 0x000d, 0x64d: 0x000d, 0x64e: 0x000d, 0x64f: 0x000d, 0x650: 0x000d, 0x651: 0x000d, - 0x652: 0x000d, 0x653: 0x000d, 0x654: 0x000c, 0x655: 0x000c, 0x656: 0x000c, 0x657: 0x000c, - 0x658: 0x000c, 0x659: 0x000c, 0x65a: 0x000c, 0x65b: 0x000c, 0x65c: 0x000c, 0x65d: 0x000c, - 0x65e: 0x000c, 0x65f: 0x000c, 0x660: 0x000c, 0x661: 0x000c, 0x662: 0x0005, 0x663: 0x000c, - 0x664: 0x000c, 0x665: 0x000c, 0x666: 0x000c, 0x667: 0x000c, 0x668: 0x000c, 0x669: 0x000c, - 0x66a: 0x000c, 0x66b: 0x000c, 0x66c: 0x000c, 0x66d: 0x000c, 0x66e: 0x000c, 0x66f: 0x000c, - 0x670: 0x000c, 0x671: 0x000c, 0x672: 0x000c, 0x673: 0x000c, 0x674: 0x000c, 0x675: 0x000c, - 0x676: 0x000c, 0x677: 0x000c, 0x678: 0x000c, 0x679: 0x000c, 0x67a: 0x000c, 0x67b: 0x000c, - 0x67c: 0x000c, 0x67d: 0x000c, 0x67e: 0x000c, 0x67f: 0x000c, - // Block 0x1a, offset 0x680 - 0x680: 0x000c, 0x681: 0x000c, 0x682: 0x000c, - 0x6ba: 0x000c, - 0x6bc: 0x000c, - // Block 0x1b, offset 0x6c0 - 0x6c1: 0x000c, 0x6c2: 0x000c, 0x6c3: 0x000c, 0x6c4: 0x000c, 0x6c5: 0x000c, - 0x6c6: 0x000c, 0x6c7: 0x000c, 0x6c8: 0x000c, - 0x6cd: 0x000c, 0x6d1: 0x000c, - 0x6d2: 0x000c, 0x6d3: 0x000c, 0x6d4: 0x000c, 0x6d5: 0x000c, 0x6d6: 0x000c, 0x6d7: 0x000c, - 0x6e2: 0x000c, 0x6e3: 0x000c, - // Block 0x1c, offset 0x700 - 0x701: 0x000c, - 0x73c: 0x000c, - // Block 0x1d, offset 0x740 - 0x741: 0x000c, 0x742: 0x000c, 0x743: 0x000c, 0x744: 0x000c, - 0x74d: 0x000c, - 0x762: 0x000c, 0x763: 0x000c, - 0x772: 0x0004, 0x773: 0x0004, - 0x77b: 0x0004, - // Block 0x1e, offset 0x780 - 0x781: 0x000c, 0x782: 0x000c, - 0x7bc: 0x000c, - // Block 0x1f, offset 0x7c0 - 0x7c1: 0x000c, 0x7c2: 0x000c, - 0x7c7: 0x000c, 0x7c8: 0x000c, 0x7cb: 0x000c, - 0x7cc: 0x000c, 0x7cd: 0x000c, 0x7d1: 0x000c, - 0x7f0: 0x000c, 0x7f1: 0x000c, 0x7f5: 0x000c, - // Block 0x20, offset 0x800 - 0x801: 0x000c, 0x802: 0x000c, 0x803: 0x000c, 0x804: 0x000c, 0x805: 0x000c, - 0x807: 0x000c, 0x808: 0x000c, - 0x80d: 0x000c, - 0x822: 0x000c, 0x823: 0x000c, - 0x831: 0x0004, - 0x83a: 0x000c, 0x83b: 0x000c, - 0x83c: 0x000c, 0x83d: 0x000c, 0x83e: 0x000c, 0x83f: 0x000c, - // Block 0x21, offset 0x840 - 0x841: 0x000c, - 0x87c: 0x000c, 0x87f: 0x000c, - // Block 0x22, offset 0x880 - 0x881: 0x000c, 0x882: 0x000c, 0x883: 0x000c, 0x884: 0x000c, - 0x88d: 0x000c, - 0x896: 0x000c, - 0x8a2: 0x000c, 0x8a3: 0x000c, - // Block 0x23, offset 0x8c0 - 0x8c2: 0x000c, - // Block 0x24, offset 0x900 - 0x900: 0x000c, - 0x90d: 0x000c, - 0x933: 0x000a, 0x934: 0x000a, 0x935: 0x000a, - 0x936: 0x000a, 0x937: 0x000a, 0x938: 0x000a, 0x939: 0x0004, 0x93a: 0x000a, - // Block 0x25, offset 0x940 - 0x940: 0x000c, - 0x97e: 0x000c, 0x97f: 0x000c, - // Block 0x26, offset 0x980 - 0x980: 0x000c, - 0x986: 0x000c, 0x987: 0x000c, 0x988: 0x000c, 0x98a: 0x000c, 0x98b: 0x000c, - 0x98c: 0x000c, 0x98d: 0x000c, - 0x995: 0x000c, 0x996: 0x000c, - 0x9a2: 0x000c, 0x9a3: 0x000c, - 0x9b8: 0x000a, 0x9b9: 0x000a, 0x9ba: 0x000a, 0x9bb: 0x000a, - 0x9bc: 0x000a, 0x9bd: 0x000a, 0x9be: 0x000a, - // Block 0x27, offset 0x9c0 - 0x9cc: 0x000c, 0x9cd: 0x000c, - 0x9e2: 0x000c, 0x9e3: 0x000c, - // Block 0x28, offset 0xa00 - 0xa00: 0x000c, 0xa01: 0x000c, - 0xa3b: 0x000c, - 0xa3c: 0x000c, - // Block 0x29, offset 0xa40 - 0xa41: 0x000c, 0xa42: 0x000c, 0xa43: 0x000c, 0xa44: 0x000c, - 0xa4d: 0x000c, - 0xa62: 0x000c, 0xa63: 0x000c, - // Block 0x2a, offset 0xa80 - 0xa8a: 0x000c, - 0xa92: 0x000c, 0xa93: 0x000c, 0xa94: 0x000c, 0xa96: 0x000c, - // Block 0x2b, offset 0xac0 - 0xaf1: 0x000c, 0xaf4: 0x000c, 0xaf5: 0x000c, - 0xaf6: 0x000c, 0xaf7: 0x000c, 0xaf8: 0x000c, 0xaf9: 0x000c, 0xafa: 0x000c, - 0xaff: 0x0004, - // Block 0x2c, offset 0xb00 - 0xb07: 0x000c, 0xb08: 0x000c, 0xb09: 0x000c, 0xb0a: 0x000c, 0xb0b: 0x000c, - 0xb0c: 0x000c, 0xb0d: 0x000c, 0xb0e: 0x000c, - // Block 0x2d, offset 0xb40 - 0xb71: 0x000c, 0xb74: 0x000c, 0xb75: 0x000c, - 0xb76: 0x000c, 0xb77: 0x000c, 0xb78: 0x000c, 0xb79: 0x000c, 0xb7b: 0x000c, - 0xb7c: 0x000c, - // Block 0x2e, offset 0xb80 - 0xb88: 0x000c, 0xb89: 0x000c, 0xb8a: 0x000c, 0xb8b: 0x000c, - 0xb8c: 0x000c, 0xb8d: 0x000c, - // Block 0x2f, offset 0xbc0 - 0xbd8: 0x000c, 0xbd9: 0x000c, - 0xbf5: 0x000c, - 0xbf7: 0x000c, 0xbf9: 0x000c, 0xbfa: 0x003a, 0xbfb: 0x002a, - 0xbfc: 0x003a, 0xbfd: 0x002a, - // Block 0x30, offset 0xc00 - 0xc31: 0x000c, 0xc32: 0x000c, 0xc33: 0x000c, 0xc34: 0x000c, 0xc35: 0x000c, - 0xc36: 0x000c, 0xc37: 0x000c, 0xc38: 0x000c, 0xc39: 0x000c, 0xc3a: 0x000c, 0xc3b: 0x000c, - 0xc3c: 0x000c, 0xc3d: 0x000c, 0xc3e: 0x000c, - // Block 0x31, offset 0xc40 - 0xc40: 0x000c, 0xc41: 0x000c, 0xc42: 0x000c, 0xc43: 0x000c, 0xc44: 0x000c, - 0xc46: 0x000c, 0xc47: 0x000c, - 0xc4d: 0x000c, 0xc4e: 0x000c, 0xc4f: 0x000c, 0xc50: 0x000c, 0xc51: 0x000c, - 0xc52: 0x000c, 0xc53: 0x000c, 0xc54: 0x000c, 0xc55: 0x000c, 0xc56: 0x000c, 0xc57: 0x000c, - 0xc59: 0x000c, 0xc5a: 0x000c, 0xc5b: 0x000c, 0xc5c: 0x000c, 0xc5d: 0x000c, - 0xc5e: 0x000c, 0xc5f: 0x000c, 0xc60: 0x000c, 0xc61: 0x000c, 0xc62: 0x000c, 0xc63: 0x000c, - 0xc64: 0x000c, 0xc65: 0x000c, 0xc66: 0x000c, 0xc67: 0x000c, 0xc68: 0x000c, 0xc69: 0x000c, - 0xc6a: 0x000c, 0xc6b: 0x000c, 0xc6c: 0x000c, 0xc6d: 0x000c, 0xc6e: 0x000c, 0xc6f: 0x000c, - 0xc70: 0x000c, 0xc71: 0x000c, 0xc72: 0x000c, 0xc73: 0x000c, 0xc74: 0x000c, 0xc75: 0x000c, - 0xc76: 0x000c, 0xc77: 0x000c, 0xc78: 0x000c, 0xc79: 0x000c, 0xc7a: 0x000c, 0xc7b: 0x000c, - 0xc7c: 0x000c, - // Block 0x32, offset 0xc80 - 0xc86: 0x000c, - // Block 0x33, offset 0xcc0 - 0xced: 0x000c, 0xcee: 0x000c, 0xcef: 0x000c, - 0xcf0: 0x000c, 0xcf2: 0x000c, 0xcf3: 0x000c, 0xcf4: 0x000c, 0xcf5: 0x000c, - 0xcf6: 0x000c, 0xcf7: 0x000c, 0xcf9: 0x000c, 0xcfa: 0x000c, - 0xcfd: 0x000c, 0xcfe: 0x000c, - // Block 0x34, offset 0xd00 - 0xd18: 0x000c, 0xd19: 0x000c, - 0xd1e: 0x000c, 0xd1f: 0x000c, 0xd20: 0x000c, - 0xd31: 0x000c, 0xd32: 0x000c, 0xd33: 0x000c, 0xd34: 0x000c, - // Block 0x35, offset 0xd40 - 0xd42: 0x000c, 0xd45: 0x000c, - 0xd46: 0x000c, - 0xd4d: 0x000c, - 0xd5d: 0x000c, - // Block 0x36, offset 0xd80 - 0xd9d: 0x000c, - 0xd9e: 0x000c, 0xd9f: 0x000c, - // Block 0x37, offset 0xdc0 - 0xdd0: 0x000a, 0xdd1: 0x000a, - 0xdd2: 0x000a, 0xdd3: 0x000a, 0xdd4: 0x000a, 0xdd5: 0x000a, 0xdd6: 0x000a, 0xdd7: 0x000a, - 0xdd8: 0x000a, 0xdd9: 0x000a, - // Block 0x38, offset 0xe00 - 0xe00: 0x000a, - // Block 0x39, offset 0xe40 - 0xe40: 0x0009, - 0xe5b: 0x007a, 0xe5c: 0x006a, - // Block 0x3a, offset 0xe80 - 0xe92: 0x000c, 0xe93: 0x000c, 0xe94: 0x000c, - 0xeb2: 0x000c, 0xeb3: 0x000c, 0xeb4: 0x000c, - // Block 0x3b, offset 0xec0 - 0xed2: 0x000c, 0xed3: 0x000c, - 0xef2: 0x000c, 0xef3: 0x000c, - // Block 0x3c, offset 0xf00 - 0xf34: 0x000c, 0xf35: 0x000c, - 0xf37: 0x000c, 0xf38: 0x000c, 0xf39: 0x000c, 0xf3a: 0x000c, 0xf3b: 0x000c, - 0xf3c: 0x000c, 0xf3d: 0x000c, - // Block 0x3d, offset 0xf40 - 0xf46: 0x000c, 0xf49: 0x000c, 0xf4a: 0x000c, 0xf4b: 0x000c, - 0xf4c: 0x000c, 0xf4d: 0x000c, 0xf4e: 0x000c, 0xf4f: 0x000c, 0xf50: 0x000c, 0xf51: 0x000c, - 0xf52: 0x000c, 0xf53: 0x000c, - 0xf5b: 0x0004, 0xf5d: 0x000c, - 0xf70: 0x000a, 0xf71: 0x000a, 0xf72: 0x000a, 0xf73: 0x000a, 0xf74: 0x000a, 0xf75: 0x000a, - 0xf76: 0x000a, 0xf77: 0x000a, 0xf78: 0x000a, 0xf79: 0x000a, - // Block 0x3e, offset 0xf80 - 0xf80: 0x000a, 0xf81: 0x000a, 0xf82: 0x000a, 0xf83: 0x000a, 0xf84: 0x000a, 0xf85: 0x000a, - 0xf86: 0x000a, 0xf87: 0x000a, 0xf88: 0x000a, 0xf89: 0x000a, 0xf8a: 0x000a, 0xf8b: 0x000c, - 0xf8c: 0x000c, 0xf8d: 0x000c, 0xf8e: 0x000b, - // Block 0x3f, offset 0xfc0 - 0xfc5: 0x000c, - 0xfc6: 0x000c, - 0xfe9: 0x000c, - // Block 0x40, offset 0x1000 - 0x1020: 0x000c, 0x1021: 0x000c, 0x1022: 0x000c, - 0x1027: 0x000c, 0x1028: 0x000c, - 0x1032: 0x000c, - 0x1039: 0x000c, 0x103a: 0x000c, 0x103b: 0x000c, - // Block 0x41, offset 0x1040 - 0x1040: 0x000a, 0x1044: 0x000a, 0x1045: 0x000a, - // Block 0x42, offset 0x1080 - 0x109e: 0x000a, 0x109f: 0x000a, 0x10a0: 0x000a, 0x10a1: 0x000a, 0x10a2: 0x000a, 0x10a3: 0x000a, - 0x10a4: 0x000a, 0x10a5: 0x000a, 0x10a6: 0x000a, 0x10a7: 0x000a, 0x10a8: 0x000a, 0x10a9: 0x000a, - 0x10aa: 0x000a, 0x10ab: 0x000a, 0x10ac: 0x000a, 0x10ad: 0x000a, 0x10ae: 0x000a, 0x10af: 0x000a, - 0x10b0: 0x000a, 0x10b1: 0x000a, 0x10b2: 0x000a, 0x10b3: 0x000a, 0x10b4: 0x000a, 0x10b5: 0x000a, - 0x10b6: 0x000a, 0x10b7: 0x000a, 0x10b8: 0x000a, 0x10b9: 0x000a, 0x10ba: 0x000a, 0x10bb: 0x000a, - 0x10bc: 0x000a, 0x10bd: 0x000a, 0x10be: 0x000a, 0x10bf: 0x000a, - // Block 0x43, offset 0x10c0 - 0x10d7: 0x000c, - 0x10d8: 0x000c, 0x10db: 0x000c, - // Block 0x44, offset 0x1100 - 0x1116: 0x000c, - 0x1118: 0x000c, 0x1119: 0x000c, 0x111a: 0x000c, 0x111b: 0x000c, 0x111c: 0x000c, 0x111d: 0x000c, - 0x111e: 0x000c, 0x1120: 0x000c, 0x1122: 0x000c, - 0x1125: 0x000c, 0x1126: 0x000c, 0x1127: 0x000c, 0x1128: 0x000c, 0x1129: 0x000c, - 0x112a: 0x000c, 0x112b: 0x000c, 0x112c: 0x000c, - 0x1133: 0x000c, 0x1134: 0x000c, 0x1135: 0x000c, - 0x1136: 0x000c, 0x1137: 0x000c, 0x1138: 0x000c, 0x1139: 0x000c, 0x113a: 0x000c, 0x113b: 0x000c, - 0x113c: 0x000c, 0x113f: 0x000c, - // Block 0x45, offset 0x1140 - 0x1170: 0x000c, 0x1171: 0x000c, 0x1172: 0x000c, 0x1173: 0x000c, 0x1174: 0x000c, 0x1175: 0x000c, - 0x1176: 0x000c, 0x1177: 0x000c, 0x1178: 0x000c, 0x1179: 0x000c, 0x117a: 0x000c, 0x117b: 0x000c, - 0x117c: 0x000c, 0x117d: 0x000c, 0x117e: 0x000c, - // Block 0x46, offset 0x1180 - 0x1180: 0x000c, 0x1181: 0x000c, 0x1182: 0x000c, 0x1183: 0x000c, - 0x11b4: 0x000c, - 0x11b6: 0x000c, 0x11b7: 0x000c, 0x11b8: 0x000c, 0x11b9: 0x000c, 0x11ba: 0x000c, - 0x11bc: 0x000c, - // Block 0x47, offset 0x11c0 - 0x11c2: 0x000c, - 0x11eb: 0x000c, 0x11ec: 0x000c, 0x11ed: 0x000c, 0x11ee: 0x000c, 0x11ef: 0x000c, - 0x11f0: 0x000c, 0x11f1: 0x000c, 0x11f2: 0x000c, 0x11f3: 0x000c, - // Block 0x48, offset 0x1200 - 0x1200: 0x000c, 0x1201: 0x000c, - 0x1222: 0x000c, 0x1223: 0x000c, - 0x1224: 0x000c, 0x1225: 0x000c, 0x1228: 0x000c, 0x1229: 0x000c, - 0x122b: 0x000c, 0x122c: 0x000c, 0x122d: 0x000c, - // Block 0x49, offset 0x1240 - 0x1266: 0x000c, 0x1268: 0x000c, 0x1269: 0x000c, - 0x126d: 0x000c, 0x126f: 0x000c, - 0x1270: 0x000c, 0x1271: 0x000c, - // Block 0x4a, offset 0x1280 - 0x12ac: 0x000c, 0x12ad: 0x000c, 0x12ae: 0x000c, 0x12af: 0x000c, - 0x12b0: 0x000c, 0x12b1: 0x000c, 0x12b2: 0x000c, 0x12b3: 0x000c, - 0x12b6: 0x000c, 0x12b7: 0x000c, - // Block 0x4b, offset 0x12c0 - 0x12d0: 0x000c, 0x12d1: 0x000c, - 0x12d2: 0x000c, 0x12d4: 0x000c, 0x12d5: 0x000c, 0x12d6: 0x000c, 0x12d7: 0x000c, - 0x12d8: 0x000c, 0x12d9: 0x000c, 0x12da: 0x000c, 0x12db: 0x000c, 0x12dc: 0x000c, 0x12dd: 0x000c, - 0x12de: 0x000c, 0x12df: 0x000c, 0x12e0: 0x000c, 0x12e2: 0x000c, 0x12e3: 0x000c, - 0x12e4: 0x000c, 0x12e5: 0x000c, 0x12e6: 0x000c, 0x12e7: 0x000c, 0x12e8: 0x000c, - 0x12ed: 0x000c, - 0x12f4: 0x000c, - 0x12f8: 0x000c, 0x12f9: 0x000c, - // Block 0x4c, offset 0x1300 - 0x1300: 0x000c, 0x1301: 0x000c, 0x1302: 0x000c, 0x1303: 0x000c, 0x1304: 0x000c, 0x1305: 0x000c, - 0x1306: 0x000c, 0x1307: 0x000c, 0x1308: 0x000c, 0x1309: 0x000c, 0x130a: 0x000c, 0x130b: 0x000c, - 0x130c: 0x000c, 0x130d: 0x000c, 0x130e: 0x000c, 0x130f: 0x000c, 0x1310: 0x000c, 0x1311: 0x000c, - 0x1312: 0x000c, 0x1313: 0x000c, 0x1314: 0x000c, 0x1315: 0x000c, 0x1316: 0x000c, 0x1317: 0x000c, - 0x1318: 0x000c, 0x1319: 0x000c, 0x131a: 0x000c, 0x131b: 0x000c, 0x131c: 0x000c, 0x131d: 0x000c, - 0x131e: 0x000c, 0x131f: 0x000c, 0x1320: 0x000c, 0x1321: 0x000c, 0x1322: 0x000c, 0x1323: 0x000c, - 0x1324: 0x000c, 0x1325: 0x000c, 0x1326: 0x000c, 0x1327: 0x000c, 0x1328: 0x000c, 0x1329: 0x000c, - 0x132a: 0x000c, 0x132b: 0x000c, 0x132c: 0x000c, 0x132d: 0x000c, 0x132e: 0x000c, 0x132f: 0x000c, - 0x1330: 0x000c, 0x1331: 0x000c, 0x1332: 0x000c, 0x1333: 0x000c, 0x1334: 0x000c, 0x1335: 0x000c, - 0x1336: 0x000c, 0x1337: 0x000c, 0x1338: 0x000c, 0x1339: 0x000c, 0x133b: 0x000c, - 0x133c: 0x000c, 0x133d: 0x000c, 0x133e: 0x000c, 0x133f: 0x000c, - // Block 0x4d, offset 0x1340 - 0x137d: 0x000a, 0x137f: 0x000a, - // Block 0x4e, offset 0x1380 - 0x1380: 0x000a, 0x1381: 0x000a, - 0x138d: 0x000a, 0x138e: 0x000a, 0x138f: 0x000a, - 0x139d: 0x000a, - 0x139e: 0x000a, 0x139f: 0x000a, - 0x13ad: 0x000a, 0x13ae: 0x000a, 0x13af: 0x000a, - 0x13bd: 0x000a, 0x13be: 0x000a, - // Block 0x4f, offset 0x13c0 - 0x13c0: 0x0009, 0x13c1: 0x0009, 0x13c2: 0x0009, 0x13c3: 0x0009, 0x13c4: 0x0009, 0x13c5: 0x0009, - 0x13c6: 0x0009, 0x13c7: 0x0009, 0x13c8: 0x0009, 0x13c9: 0x0009, 0x13ca: 0x0009, 0x13cb: 0x000b, - 0x13cc: 0x000b, 0x13cd: 0x000b, 0x13cf: 0x0001, 0x13d0: 0x000a, 0x13d1: 0x000a, - 0x13d2: 0x000a, 0x13d3: 0x000a, 0x13d4: 0x000a, 0x13d5: 0x000a, 0x13d6: 0x000a, 0x13d7: 0x000a, - 0x13d8: 0x000a, 0x13d9: 0x000a, 0x13da: 0x000a, 0x13db: 0x000a, 0x13dc: 0x000a, 0x13dd: 0x000a, - 0x13de: 0x000a, 0x13df: 0x000a, 0x13e0: 0x000a, 0x13e1: 0x000a, 0x13e2: 0x000a, 0x13e3: 0x000a, - 0x13e4: 0x000a, 0x13e5: 0x000a, 0x13e6: 0x000a, 0x13e7: 0x000a, 0x13e8: 0x0009, 0x13e9: 0x0007, - 0x13ea: 0x000e, 0x13eb: 0x000e, 0x13ec: 0x000e, 0x13ed: 0x000e, 0x13ee: 0x000e, 0x13ef: 0x0006, - 0x13f0: 0x0004, 0x13f1: 0x0004, 0x13f2: 0x0004, 0x13f3: 0x0004, 0x13f4: 0x0004, 0x13f5: 0x000a, - 0x13f6: 0x000a, 0x13f7: 0x000a, 0x13f8: 0x000a, 0x13f9: 0x000a, 0x13fa: 0x000a, 0x13fb: 0x000a, - 0x13fc: 0x000a, 0x13fd: 0x000a, 0x13fe: 0x000a, 0x13ff: 0x000a, - // Block 0x50, offset 0x1400 - 0x1400: 0x000a, 0x1401: 0x000a, 0x1402: 0x000a, 0x1403: 0x000a, 0x1404: 0x0006, 0x1405: 0x009a, - 0x1406: 0x008a, 0x1407: 0x000a, 0x1408: 0x000a, 0x1409: 0x000a, 0x140a: 0x000a, 0x140b: 0x000a, - 0x140c: 0x000a, 0x140d: 0x000a, 0x140e: 0x000a, 0x140f: 0x000a, 0x1410: 0x000a, 0x1411: 0x000a, - 0x1412: 0x000a, 0x1413: 0x000a, 0x1414: 0x000a, 0x1415: 0x000a, 0x1416: 0x000a, 0x1417: 0x000a, - 0x1418: 0x000a, 0x1419: 0x000a, 0x141a: 0x000a, 0x141b: 0x000a, 0x141c: 0x000a, 0x141d: 0x000a, - 0x141e: 0x000a, 0x141f: 0x0009, 0x1420: 0x000b, 0x1421: 0x000b, 0x1422: 0x000b, 0x1423: 0x000b, - 0x1424: 0x000b, 0x1425: 0x000b, 0x1426: 0x000e, 0x1427: 0x000e, 0x1428: 0x000e, 0x1429: 0x000e, - 0x142a: 0x000b, 0x142b: 0x000b, 0x142c: 0x000b, 0x142d: 0x000b, 0x142e: 0x000b, 0x142f: 0x000b, - 0x1430: 0x0002, 0x1434: 0x0002, 0x1435: 0x0002, - 0x1436: 0x0002, 0x1437: 0x0002, 0x1438: 0x0002, 0x1439: 0x0002, 0x143a: 0x0003, 0x143b: 0x0003, - 0x143c: 0x000a, 0x143d: 0x009a, 0x143e: 0x008a, - // Block 0x51, offset 0x1440 - 0x1440: 0x0002, 0x1441: 0x0002, 0x1442: 0x0002, 0x1443: 0x0002, 0x1444: 0x0002, 0x1445: 0x0002, - 0x1446: 0x0002, 0x1447: 0x0002, 0x1448: 0x0002, 0x1449: 0x0002, 0x144a: 0x0003, 0x144b: 0x0003, - 0x144c: 0x000a, 0x144d: 0x009a, 0x144e: 0x008a, - 0x1460: 0x0004, 0x1461: 0x0004, 0x1462: 0x0004, 0x1463: 0x0004, - 0x1464: 0x0004, 0x1465: 0x0004, 0x1466: 0x0004, 0x1467: 0x0004, 0x1468: 0x0004, 0x1469: 0x0004, - 0x146a: 0x0004, 0x146b: 0x0004, 0x146c: 0x0004, 0x146d: 0x0004, 0x146e: 0x0004, 0x146f: 0x0004, - 0x1470: 0x0004, 0x1471: 0x0004, 0x1472: 0x0004, 0x1473: 0x0004, 0x1474: 0x0004, 0x1475: 0x0004, - 0x1476: 0x0004, 0x1477: 0x0004, 0x1478: 0x0004, 0x1479: 0x0004, 0x147a: 0x0004, 0x147b: 0x0004, - 0x147c: 0x0004, 0x147d: 0x0004, 0x147e: 0x0004, 0x147f: 0x0004, - // Block 0x52, offset 0x1480 - 0x1480: 0x0004, 0x1481: 0x0004, 0x1482: 0x0004, 0x1483: 0x0004, 0x1484: 0x0004, 0x1485: 0x0004, - 0x1486: 0x0004, 0x1487: 0x0004, 0x1488: 0x0004, 0x1489: 0x0004, 0x148a: 0x0004, 0x148b: 0x0004, - 0x148c: 0x0004, 0x148d: 0x0004, 0x148e: 0x0004, 0x148f: 0x0004, 0x1490: 0x000c, 0x1491: 0x000c, - 0x1492: 0x000c, 0x1493: 0x000c, 0x1494: 0x000c, 0x1495: 0x000c, 0x1496: 0x000c, 0x1497: 0x000c, - 0x1498: 0x000c, 0x1499: 0x000c, 0x149a: 0x000c, 0x149b: 0x000c, 0x149c: 0x000c, 0x149d: 0x000c, - 0x149e: 0x000c, 0x149f: 0x000c, 0x14a0: 0x000c, 0x14a1: 0x000c, 0x14a2: 0x000c, 0x14a3: 0x000c, - 0x14a4: 0x000c, 0x14a5: 0x000c, 0x14a6: 0x000c, 0x14a7: 0x000c, 0x14a8: 0x000c, 0x14a9: 0x000c, - 0x14aa: 0x000c, 0x14ab: 0x000c, 0x14ac: 0x000c, 0x14ad: 0x000c, 0x14ae: 0x000c, 0x14af: 0x000c, - 0x14b0: 0x000c, - // Block 0x53, offset 0x14c0 - 0x14c0: 0x000a, 0x14c1: 0x000a, 0x14c3: 0x000a, 0x14c4: 0x000a, 0x14c5: 0x000a, - 0x14c6: 0x000a, 0x14c8: 0x000a, 0x14c9: 0x000a, - 0x14d4: 0x000a, 0x14d6: 0x000a, 0x14d7: 0x000a, - 0x14d8: 0x000a, - 0x14de: 0x000a, 0x14df: 0x000a, 0x14e0: 0x000a, 0x14e1: 0x000a, 0x14e2: 0x000a, 0x14e3: 0x000a, - 0x14e5: 0x000a, 0x14e7: 0x000a, 0x14e9: 0x000a, - 0x14ee: 0x0004, - 0x14fa: 0x000a, 0x14fb: 0x000a, - // Block 0x54, offset 0x1500 - 0x1500: 0x000a, 0x1501: 0x000a, 0x1502: 0x000a, 0x1503: 0x000a, 0x1504: 0x000a, - 0x150a: 0x000a, 0x150b: 0x000a, - 0x150c: 0x000a, 0x150d: 0x000a, 0x1510: 0x000a, 0x1511: 0x000a, - 0x1512: 0x000a, 0x1513: 0x000a, 0x1514: 0x000a, 0x1515: 0x000a, 0x1516: 0x000a, 0x1517: 0x000a, - 0x1518: 0x000a, 0x1519: 0x000a, 0x151a: 0x000a, 0x151b: 0x000a, 0x151c: 0x000a, 0x151d: 0x000a, - 0x151e: 0x000a, 0x151f: 0x000a, - // Block 0x55, offset 0x1540 - 0x1549: 0x000a, 0x154a: 0x000a, 0x154b: 0x000a, - 0x1550: 0x000a, 0x1551: 0x000a, - 0x1552: 0x000a, 0x1553: 0x000a, 0x1554: 0x000a, 0x1555: 0x000a, 0x1556: 0x000a, 0x1557: 0x000a, - 0x1558: 0x000a, 0x1559: 0x000a, 0x155a: 0x000a, 0x155b: 0x000a, 0x155c: 0x000a, 0x155d: 0x000a, - 0x155e: 0x000a, 0x155f: 0x000a, 0x1560: 0x000a, 0x1561: 0x000a, 0x1562: 0x000a, 0x1563: 0x000a, - 0x1564: 0x000a, 0x1565: 0x000a, 0x1566: 0x000a, 0x1567: 0x000a, 0x1568: 0x000a, 0x1569: 0x000a, - 0x156a: 0x000a, 0x156b: 0x000a, 0x156c: 0x000a, 0x156d: 0x000a, 0x156e: 0x000a, 0x156f: 0x000a, - 0x1570: 0x000a, 0x1571: 0x000a, 0x1572: 0x000a, 0x1573: 0x000a, 0x1574: 0x000a, 0x1575: 0x000a, - 0x1576: 0x000a, 0x1577: 0x000a, 0x1578: 0x000a, 0x1579: 0x000a, 0x157a: 0x000a, 0x157b: 0x000a, - 0x157c: 0x000a, 0x157d: 0x000a, 0x157e: 0x000a, 0x157f: 0x000a, - // Block 0x56, offset 0x1580 - 0x1580: 0x000a, 0x1581: 0x000a, 0x1582: 0x000a, 0x1583: 0x000a, 0x1584: 0x000a, 0x1585: 0x000a, - 0x1586: 0x000a, 0x1587: 0x000a, 0x1588: 0x000a, 0x1589: 0x000a, 0x158a: 0x000a, 0x158b: 0x000a, - 0x158c: 0x000a, 0x158d: 0x000a, 0x158e: 0x000a, 0x158f: 0x000a, 0x1590: 0x000a, 0x1591: 0x000a, - 0x1592: 0x000a, 0x1593: 0x000a, 0x1594: 0x000a, 0x1595: 0x000a, 0x1596: 0x000a, 0x1597: 0x000a, - 0x1598: 0x000a, 0x1599: 0x000a, 0x159a: 0x000a, 0x159b: 0x000a, 0x159c: 0x000a, 0x159d: 0x000a, - 0x159e: 0x000a, 0x159f: 0x000a, 0x15a0: 0x000a, 0x15a1: 0x000a, 0x15a2: 0x000a, 0x15a3: 0x000a, - 0x15a4: 0x000a, 0x15a5: 0x000a, 0x15a6: 0x000a, 0x15a7: 0x000a, 0x15a8: 0x000a, 0x15a9: 0x000a, - 0x15aa: 0x000a, 0x15ab: 0x000a, 0x15ac: 0x000a, 0x15ad: 0x000a, 0x15ae: 0x000a, 0x15af: 0x000a, - 0x15b0: 0x000a, 0x15b1: 0x000a, 0x15b2: 0x000a, 0x15b3: 0x000a, 0x15b4: 0x000a, 0x15b5: 0x000a, - 0x15b6: 0x000a, 0x15b7: 0x000a, 0x15b8: 0x000a, 0x15b9: 0x000a, 0x15ba: 0x000a, 0x15bb: 0x000a, - 0x15bc: 0x000a, 0x15bd: 0x000a, 0x15be: 0x000a, 0x15bf: 0x000a, - // Block 0x57, offset 0x15c0 - 0x15c0: 0x000a, 0x15c1: 0x000a, 0x15c2: 0x000a, 0x15c3: 0x000a, 0x15c4: 0x000a, 0x15c5: 0x000a, - 0x15c6: 0x000a, 0x15c7: 0x000a, 0x15c8: 0x000a, 0x15c9: 0x000a, 0x15ca: 0x000a, 0x15cb: 0x000a, - 0x15cc: 0x000a, 0x15cd: 0x000a, 0x15ce: 0x000a, 0x15cf: 0x000a, 0x15d0: 0x000a, 0x15d1: 0x000a, - 0x15d2: 0x0003, 0x15d3: 0x0004, 0x15d4: 0x000a, 0x15d5: 0x000a, 0x15d6: 0x000a, 0x15d7: 0x000a, - 0x15d8: 0x000a, 0x15d9: 0x000a, 0x15da: 0x000a, 0x15db: 0x000a, 0x15dc: 0x000a, 0x15dd: 0x000a, - 0x15de: 0x000a, 0x15df: 0x000a, 0x15e0: 0x000a, 0x15e1: 0x000a, 0x15e2: 0x000a, 0x15e3: 0x000a, - 0x15e4: 0x000a, 0x15e5: 0x000a, 0x15e6: 0x000a, 0x15e7: 0x000a, 0x15e8: 0x000a, 0x15e9: 0x000a, - 0x15ea: 0x000a, 0x15eb: 0x000a, 0x15ec: 0x000a, 0x15ed: 0x000a, 0x15ee: 0x000a, 0x15ef: 0x000a, - 0x15f0: 0x000a, 0x15f1: 0x000a, 0x15f2: 0x000a, 0x15f3: 0x000a, 0x15f4: 0x000a, 0x15f5: 0x000a, - 0x15f6: 0x000a, 0x15f7: 0x000a, 0x15f8: 0x000a, 0x15f9: 0x000a, 0x15fa: 0x000a, 0x15fb: 0x000a, - 0x15fc: 0x000a, 0x15fd: 0x000a, 0x15fe: 0x000a, 0x15ff: 0x000a, - // Block 0x58, offset 0x1600 - 0x1600: 0x000a, 0x1601: 0x000a, 0x1602: 0x000a, 0x1603: 0x000a, 0x1604: 0x000a, 0x1605: 0x000a, - 0x1606: 0x000a, 0x1607: 0x000a, 0x1608: 0x003a, 0x1609: 0x002a, 0x160a: 0x003a, 0x160b: 0x002a, - 0x160c: 0x000a, 0x160d: 0x000a, 0x160e: 0x000a, 0x160f: 0x000a, 0x1610: 0x000a, 0x1611: 0x000a, - 0x1612: 0x000a, 0x1613: 0x000a, 0x1614: 0x000a, 0x1615: 0x000a, 0x1616: 0x000a, 0x1617: 0x000a, - 0x1618: 0x000a, 0x1619: 0x000a, 0x161a: 0x000a, 0x161b: 0x000a, 0x161c: 0x000a, 0x161d: 0x000a, - 0x161e: 0x000a, 0x161f: 0x000a, 0x1620: 0x000a, 0x1621: 0x000a, 0x1622: 0x000a, 0x1623: 0x000a, - 0x1624: 0x000a, 0x1625: 0x000a, 0x1626: 0x000a, 0x1627: 0x000a, 0x1628: 0x000a, 0x1629: 0x009a, - 0x162a: 0x008a, 0x162b: 0x000a, 0x162c: 0x000a, 0x162d: 0x000a, 0x162e: 0x000a, 0x162f: 0x000a, - 0x1630: 0x000a, 0x1631: 0x000a, 0x1632: 0x000a, 0x1633: 0x000a, 0x1634: 0x000a, 0x1635: 0x000a, - // Block 0x59, offset 0x1640 - 0x167b: 0x000a, - 0x167c: 0x000a, 0x167d: 0x000a, 0x167e: 0x000a, 0x167f: 0x000a, - // Block 0x5a, offset 0x1680 - 0x1680: 0x000a, 0x1681: 0x000a, 0x1682: 0x000a, 0x1683: 0x000a, 0x1684: 0x000a, 0x1685: 0x000a, - 0x1686: 0x000a, 0x1687: 0x000a, 0x1688: 0x000a, 0x1689: 0x000a, 0x168a: 0x000a, 0x168b: 0x000a, - 0x168c: 0x000a, 0x168d: 0x000a, 0x168e: 0x000a, 0x168f: 0x000a, 0x1690: 0x000a, 0x1691: 0x000a, - 0x1692: 0x000a, 0x1693: 0x000a, 0x1694: 0x000a, 0x1696: 0x000a, 0x1697: 0x000a, - 0x1698: 0x000a, 0x1699: 0x000a, 0x169a: 0x000a, 0x169b: 0x000a, 0x169c: 0x000a, 0x169d: 0x000a, - 0x169e: 0x000a, 0x169f: 0x000a, 0x16a0: 0x000a, 0x16a1: 0x000a, 0x16a2: 0x000a, 0x16a3: 0x000a, - 0x16a4: 0x000a, 0x16a5: 0x000a, 0x16a6: 0x000a, 0x16a7: 0x000a, 0x16a8: 0x000a, 0x16a9: 0x000a, - 0x16aa: 0x000a, 0x16ab: 0x000a, 0x16ac: 0x000a, 0x16ad: 0x000a, 0x16ae: 0x000a, 0x16af: 0x000a, - 0x16b0: 0x000a, 0x16b1: 0x000a, 0x16b2: 0x000a, 0x16b3: 0x000a, 0x16b4: 0x000a, 0x16b5: 0x000a, - 0x16b6: 0x000a, 0x16b7: 0x000a, 0x16b8: 0x000a, 0x16b9: 0x000a, 0x16ba: 0x000a, 0x16bb: 0x000a, - 0x16bc: 0x000a, 0x16bd: 0x000a, 0x16be: 0x000a, 0x16bf: 0x000a, - // Block 0x5b, offset 0x16c0 - 0x16c0: 0x000a, 0x16c1: 0x000a, 0x16c2: 0x000a, 0x16c3: 0x000a, 0x16c4: 0x000a, 0x16c5: 0x000a, - 0x16c6: 0x000a, 0x16c7: 0x000a, 0x16c8: 0x000a, 0x16c9: 0x000a, 0x16ca: 0x000a, 0x16cb: 0x000a, - 0x16cc: 0x000a, 0x16cd: 0x000a, 0x16ce: 0x000a, 0x16cf: 0x000a, 0x16d0: 0x000a, 0x16d1: 0x000a, - 0x16d2: 0x000a, 0x16d3: 0x000a, 0x16d4: 0x000a, 0x16d5: 0x000a, 0x16d6: 0x000a, 0x16d7: 0x000a, - 0x16d8: 0x000a, 0x16d9: 0x000a, 0x16da: 0x000a, 0x16db: 0x000a, 0x16dc: 0x000a, 0x16dd: 0x000a, - 0x16de: 0x000a, 0x16df: 0x000a, 0x16e0: 0x000a, 0x16e1: 0x000a, 0x16e2: 0x000a, 0x16e3: 0x000a, - 0x16e4: 0x000a, 0x16e5: 0x000a, 0x16e6: 0x000a, - // Block 0x5c, offset 0x1700 - 0x1700: 0x000a, 0x1701: 0x000a, 0x1702: 0x000a, 0x1703: 0x000a, 0x1704: 0x000a, 0x1705: 0x000a, - 0x1706: 0x000a, 0x1707: 0x000a, 0x1708: 0x000a, 0x1709: 0x000a, 0x170a: 0x000a, - 0x1720: 0x000a, 0x1721: 0x000a, 0x1722: 0x000a, 0x1723: 0x000a, - 0x1724: 0x000a, 0x1725: 0x000a, 0x1726: 0x000a, 0x1727: 0x000a, 0x1728: 0x000a, 0x1729: 0x000a, - 0x172a: 0x000a, 0x172b: 0x000a, 0x172c: 0x000a, 0x172d: 0x000a, 0x172e: 0x000a, 0x172f: 0x000a, - 0x1730: 0x000a, 0x1731: 0x000a, 0x1732: 0x000a, 0x1733: 0x000a, 0x1734: 0x000a, 0x1735: 0x000a, - 0x1736: 0x000a, 0x1737: 0x000a, 0x1738: 0x000a, 0x1739: 0x000a, 0x173a: 0x000a, 0x173b: 0x000a, - 0x173c: 0x000a, 0x173d: 0x000a, 0x173e: 0x000a, 0x173f: 0x000a, - // Block 0x5d, offset 0x1740 - 0x1740: 0x000a, 0x1741: 0x000a, 0x1742: 0x000a, 0x1743: 0x000a, 0x1744: 0x000a, 0x1745: 0x000a, - 0x1746: 0x000a, 0x1747: 0x000a, 0x1748: 0x0002, 0x1749: 0x0002, 0x174a: 0x0002, 0x174b: 0x0002, - 0x174c: 0x0002, 0x174d: 0x0002, 0x174e: 0x0002, 0x174f: 0x0002, 0x1750: 0x0002, 0x1751: 0x0002, - 0x1752: 0x0002, 0x1753: 0x0002, 0x1754: 0x0002, 0x1755: 0x0002, 0x1756: 0x0002, 0x1757: 0x0002, - 0x1758: 0x0002, 0x1759: 0x0002, 0x175a: 0x0002, 0x175b: 0x0002, - // Block 0x5e, offset 0x1780 - 0x17aa: 0x000a, 0x17ab: 0x000a, 0x17ac: 0x000a, 0x17ad: 0x000a, 0x17ae: 0x000a, 0x17af: 0x000a, - 0x17b0: 0x000a, 0x17b1: 0x000a, 0x17b2: 0x000a, 0x17b3: 0x000a, 0x17b4: 0x000a, 0x17b5: 0x000a, - 0x17b6: 0x000a, 0x17b7: 0x000a, 0x17b8: 0x000a, 0x17b9: 0x000a, 0x17ba: 0x000a, 0x17bb: 0x000a, - 0x17bc: 0x000a, 0x17bd: 0x000a, 0x17be: 0x000a, 0x17bf: 0x000a, - // Block 0x5f, offset 0x17c0 - 0x17c0: 0x000a, 0x17c1: 0x000a, 0x17c2: 0x000a, 0x17c3: 0x000a, 0x17c4: 0x000a, 0x17c5: 0x000a, - 0x17c6: 0x000a, 0x17c7: 0x000a, 0x17c8: 0x000a, 0x17c9: 0x000a, 0x17ca: 0x000a, 0x17cb: 0x000a, - 0x17cc: 0x000a, 0x17cd: 0x000a, 0x17ce: 0x000a, 0x17cf: 0x000a, 0x17d0: 0x000a, 0x17d1: 0x000a, - 0x17d2: 0x000a, 0x17d3: 0x000a, 0x17d4: 0x000a, 0x17d5: 0x000a, 0x17d6: 0x000a, 0x17d7: 0x000a, - 0x17d8: 0x000a, 0x17d9: 0x000a, 0x17da: 0x000a, 0x17db: 0x000a, 0x17dc: 0x000a, 0x17dd: 0x000a, - 0x17de: 0x000a, 0x17df: 0x000a, 0x17e0: 0x000a, 0x17e1: 0x000a, 0x17e2: 0x000a, 0x17e3: 0x000a, - 0x17e4: 0x000a, 0x17e5: 0x000a, 0x17e6: 0x000a, 0x17e7: 0x000a, 0x17e8: 0x000a, 0x17e9: 0x000a, - 0x17ea: 0x000a, 0x17eb: 0x000a, 0x17ed: 0x000a, 0x17ee: 0x000a, 0x17ef: 0x000a, - 0x17f0: 0x000a, 0x17f1: 0x000a, 0x17f2: 0x000a, 0x17f3: 0x000a, 0x17f4: 0x000a, 0x17f5: 0x000a, - 0x17f6: 0x000a, 0x17f7: 0x000a, 0x17f8: 0x000a, 0x17f9: 0x000a, 0x17fa: 0x000a, 0x17fb: 0x000a, - 0x17fc: 0x000a, 0x17fd: 0x000a, 0x17fe: 0x000a, 0x17ff: 0x000a, - // Block 0x60, offset 0x1800 - 0x1800: 0x000a, 0x1801: 0x000a, 0x1802: 0x000a, 0x1803: 0x000a, 0x1804: 0x000a, 0x1805: 0x000a, - 0x1806: 0x000a, 0x1807: 0x000a, 0x1808: 0x000a, 0x1809: 0x000a, 0x180a: 0x000a, 0x180b: 0x000a, - 0x180c: 0x000a, 0x180d: 0x000a, 0x180e: 0x000a, 0x180f: 0x000a, 0x1810: 0x000a, 0x1811: 0x000a, - 0x1812: 0x000a, 0x1813: 0x000a, 0x1814: 0x000a, 0x1815: 0x000a, 0x1816: 0x000a, 0x1817: 0x000a, - 0x1818: 0x000a, 0x1819: 0x000a, 0x181a: 0x000a, 0x181b: 0x000a, 0x181c: 0x000a, 0x181d: 0x000a, - 0x181e: 0x000a, 0x181f: 0x000a, 0x1820: 0x000a, 0x1821: 0x000a, 0x1822: 0x000a, 0x1823: 0x000a, - 0x1824: 0x000a, 0x1825: 0x000a, 0x1826: 0x000a, 0x1827: 0x000a, 0x1828: 0x003a, 0x1829: 0x002a, - 0x182a: 0x003a, 0x182b: 0x002a, 0x182c: 0x003a, 0x182d: 0x002a, 0x182e: 0x003a, 0x182f: 0x002a, - 0x1830: 0x003a, 0x1831: 0x002a, 0x1832: 0x003a, 0x1833: 0x002a, 0x1834: 0x003a, 0x1835: 0x002a, - 0x1836: 0x000a, 0x1837: 0x000a, 0x1838: 0x000a, 0x1839: 0x000a, 0x183a: 0x000a, 0x183b: 0x000a, - 0x183c: 0x000a, 0x183d: 0x000a, 0x183e: 0x000a, 0x183f: 0x000a, - // Block 0x61, offset 0x1840 - 0x1840: 0x000a, 0x1841: 0x000a, 0x1842: 0x000a, 0x1843: 0x000a, 0x1844: 0x000a, 0x1845: 0x009a, - 0x1846: 0x008a, 0x1847: 0x000a, 0x1848: 0x000a, 0x1849: 0x000a, 0x184a: 0x000a, 0x184b: 0x000a, - 0x184c: 0x000a, 0x184d: 0x000a, 0x184e: 0x000a, 0x184f: 0x000a, 0x1850: 0x000a, 0x1851: 0x000a, - 0x1852: 0x000a, 0x1853: 0x000a, 0x1854: 0x000a, 0x1855: 0x000a, 0x1856: 0x000a, 0x1857: 0x000a, - 0x1858: 0x000a, 0x1859: 0x000a, 0x185a: 0x000a, 0x185b: 0x000a, 0x185c: 0x000a, 0x185d: 0x000a, - 0x185e: 0x000a, 0x185f: 0x000a, 0x1860: 0x000a, 0x1861: 0x000a, 0x1862: 0x000a, 0x1863: 0x000a, - 0x1864: 0x000a, 0x1865: 0x000a, 0x1866: 0x003a, 0x1867: 0x002a, 0x1868: 0x003a, 0x1869: 0x002a, - 0x186a: 0x003a, 0x186b: 0x002a, 0x186c: 0x003a, 0x186d: 0x002a, 0x186e: 0x003a, 0x186f: 0x002a, - 0x1870: 0x000a, 0x1871: 0x000a, 0x1872: 0x000a, 0x1873: 0x000a, 0x1874: 0x000a, 0x1875: 0x000a, - 0x1876: 0x000a, 0x1877: 0x000a, 0x1878: 0x000a, 0x1879: 0x000a, 0x187a: 0x000a, 0x187b: 0x000a, - 0x187c: 0x000a, 0x187d: 0x000a, 0x187e: 0x000a, 0x187f: 0x000a, - // Block 0x62, offset 0x1880 - 0x1880: 0x000a, 0x1881: 0x000a, 0x1882: 0x000a, 0x1883: 0x007a, 0x1884: 0x006a, 0x1885: 0x009a, - 0x1886: 0x008a, 0x1887: 0x00ba, 0x1888: 0x00aa, 0x1889: 0x009a, 0x188a: 0x008a, 0x188b: 0x007a, - 0x188c: 0x006a, 0x188d: 0x00da, 0x188e: 0x002a, 0x188f: 0x003a, 0x1890: 0x00ca, 0x1891: 0x009a, - 0x1892: 0x008a, 0x1893: 0x007a, 0x1894: 0x006a, 0x1895: 0x009a, 0x1896: 0x008a, 0x1897: 0x00ba, - 0x1898: 0x00aa, 0x1899: 0x000a, 0x189a: 0x000a, 0x189b: 0x000a, 0x189c: 0x000a, 0x189d: 0x000a, - 0x189e: 0x000a, 0x189f: 0x000a, 0x18a0: 0x000a, 0x18a1: 0x000a, 0x18a2: 0x000a, 0x18a3: 0x000a, - 0x18a4: 0x000a, 0x18a5: 0x000a, 0x18a6: 0x000a, 0x18a7: 0x000a, 0x18a8: 0x000a, 0x18a9: 0x000a, - 0x18aa: 0x000a, 0x18ab: 0x000a, 0x18ac: 0x000a, 0x18ad: 0x000a, 0x18ae: 0x000a, 0x18af: 0x000a, - 0x18b0: 0x000a, 0x18b1: 0x000a, 0x18b2: 0x000a, 0x18b3: 0x000a, 0x18b4: 0x000a, 0x18b5: 0x000a, - 0x18b6: 0x000a, 0x18b7: 0x000a, 0x18b8: 0x000a, 0x18b9: 0x000a, 0x18ba: 0x000a, 0x18bb: 0x000a, - 0x18bc: 0x000a, 0x18bd: 0x000a, 0x18be: 0x000a, 0x18bf: 0x000a, - // Block 0x63, offset 0x18c0 - 0x18c0: 0x000a, 0x18c1: 0x000a, 0x18c2: 0x000a, 0x18c3: 0x000a, 0x18c4: 0x000a, 0x18c5: 0x000a, - 0x18c6: 0x000a, 0x18c7: 0x000a, 0x18c8: 0x000a, 0x18c9: 0x000a, 0x18ca: 0x000a, 0x18cb: 0x000a, - 0x18cc: 0x000a, 0x18cd: 0x000a, 0x18ce: 0x000a, 0x18cf: 0x000a, 0x18d0: 0x000a, 0x18d1: 0x000a, - 0x18d2: 0x000a, 0x18d3: 0x000a, 0x18d4: 0x000a, 0x18d5: 0x000a, 0x18d6: 0x000a, 0x18d7: 0x000a, - 0x18d8: 0x003a, 0x18d9: 0x002a, 0x18da: 0x003a, 0x18db: 0x002a, 0x18dc: 0x000a, 0x18dd: 0x000a, - 0x18de: 0x000a, 0x18df: 0x000a, 0x18e0: 0x000a, 0x18e1: 0x000a, 0x18e2: 0x000a, 0x18e3: 0x000a, - 0x18e4: 0x000a, 0x18e5: 0x000a, 0x18e6: 0x000a, 0x18e7: 0x000a, 0x18e8: 0x000a, 0x18e9: 0x000a, - 0x18ea: 0x000a, 0x18eb: 0x000a, 0x18ec: 0x000a, 0x18ed: 0x000a, 0x18ee: 0x000a, 0x18ef: 0x000a, - 0x18f0: 0x000a, 0x18f1: 0x000a, 0x18f2: 0x000a, 0x18f3: 0x000a, 0x18f4: 0x000a, 0x18f5: 0x000a, - 0x18f6: 0x000a, 0x18f7: 0x000a, 0x18f8: 0x000a, 0x18f9: 0x000a, 0x18fa: 0x000a, 0x18fb: 0x000a, - 0x18fc: 0x003a, 0x18fd: 0x002a, 0x18fe: 0x000a, 0x18ff: 0x000a, - // Block 0x64, offset 0x1900 - 0x1900: 0x000a, 0x1901: 0x000a, 0x1902: 0x000a, 0x1903: 0x000a, 0x1904: 0x000a, 0x1905: 0x000a, - 0x1906: 0x000a, 0x1907: 0x000a, 0x1908: 0x000a, 0x1909: 0x000a, 0x190a: 0x000a, 0x190b: 0x000a, - 0x190c: 0x000a, 0x190d: 0x000a, 0x190e: 0x000a, 0x190f: 0x000a, 0x1910: 0x000a, 0x1911: 0x000a, - 0x1912: 0x000a, 0x1913: 0x000a, 0x1914: 0x000a, 0x1915: 0x000a, 0x1916: 0x000a, 0x1917: 0x000a, - 0x1918: 0x000a, 0x1919: 0x000a, 0x191a: 0x000a, 0x191b: 0x000a, 0x191c: 0x000a, 0x191d: 0x000a, - 0x191e: 0x000a, 0x191f: 0x000a, 0x1920: 0x000a, 0x1921: 0x000a, 0x1922: 0x000a, 0x1923: 0x000a, - 0x1924: 0x000a, 0x1925: 0x000a, 0x1926: 0x000a, 0x1927: 0x000a, 0x1928: 0x000a, 0x1929: 0x000a, - 0x192a: 0x000a, 0x192b: 0x000a, 0x192c: 0x000a, 0x192d: 0x000a, 0x192e: 0x000a, 0x192f: 0x000a, - 0x1930: 0x000a, 0x1931: 0x000a, 0x1932: 0x000a, 0x1933: 0x000a, - 0x1936: 0x000a, 0x1937: 0x000a, 0x1938: 0x000a, 0x1939: 0x000a, 0x193a: 0x000a, 0x193b: 0x000a, - 0x193c: 0x000a, 0x193d: 0x000a, 0x193e: 0x000a, 0x193f: 0x000a, - // Block 0x65, offset 0x1940 - 0x1940: 0x000a, 0x1941: 0x000a, 0x1942: 0x000a, 0x1943: 0x000a, 0x1944: 0x000a, 0x1945: 0x000a, - 0x1946: 0x000a, 0x1947: 0x000a, 0x1948: 0x000a, 0x1949: 0x000a, 0x194a: 0x000a, 0x194b: 0x000a, - 0x194c: 0x000a, 0x194d: 0x000a, 0x194e: 0x000a, 0x194f: 0x000a, 0x1950: 0x000a, 0x1951: 0x000a, - 0x1952: 0x000a, 0x1953: 0x000a, 0x1954: 0x000a, 0x1955: 0x000a, - 0x1958: 0x000a, 0x1959: 0x000a, 0x195a: 0x000a, 0x195b: 0x000a, 0x195c: 0x000a, 0x195d: 0x000a, - 0x195e: 0x000a, 0x195f: 0x000a, 0x1960: 0x000a, 0x1961: 0x000a, 0x1962: 0x000a, 0x1963: 0x000a, - 0x1964: 0x000a, 0x1965: 0x000a, 0x1966: 0x000a, 0x1967: 0x000a, 0x1968: 0x000a, 0x1969: 0x000a, - 0x196a: 0x000a, 0x196b: 0x000a, 0x196c: 0x000a, 0x196d: 0x000a, 0x196e: 0x000a, 0x196f: 0x000a, - 0x1970: 0x000a, 0x1971: 0x000a, 0x1972: 0x000a, 0x1973: 0x000a, 0x1974: 0x000a, 0x1975: 0x000a, - 0x1976: 0x000a, 0x1977: 0x000a, 0x1978: 0x000a, 0x1979: 0x000a, - 0x197d: 0x000a, 0x197e: 0x000a, 0x197f: 0x000a, - // Block 0x66, offset 0x1980 - 0x1980: 0x000a, 0x1981: 0x000a, 0x1982: 0x000a, 0x1983: 0x000a, 0x1984: 0x000a, 0x1985: 0x000a, - 0x1986: 0x000a, 0x1987: 0x000a, 0x1988: 0x000a, 0x198a: 0x000a, 0x198b: 0x000a, - 0x198c: 0x000a, 0x198d: 0x000a, 0x198e: 0x000a, 0x198f: 0x000a, 0x1990: 0x000a, 0x1991: 0x000a, - 0x1992: 0x000a, - 0x19ac: 0x000a, 0x19ad: 0x000a, 0x19ae: 0x000a, 0x19af: 0x000a, - // Block 0x67, offset 0x19c0 - 0x19e5: 0x000a, 0x19e6: 0x000a, 0x19e7: 0x000a, 0x19e8: 0x000a, 0x19e9: 0x000a, - 0x19ea: 0x000a, 0x19ef: 0x000c, - 0x19f0: 0x000c, 0x19f1: 0x000c, - 0x19f9: 0x000a, 0x19fa: 0x000a, 0x19fb: 0x000a, - 0x19fc: 0x000a, 0x19fd: 0x000a, 0x19fe: 0x000a, 0x19ff: 0x000a, - // Block 0x68, offset 0x1a00 - 0x1a3f: 0x000c, - // Block 0x69, offset 0x1a40 - 0x1a60: 0x000c, 0x1a61: 0x000c, 0x1a62: 0x000c, 0x1a63: 0x000c, - 0x1a64: 0x000c, 0x1a65: 0x000c, 0x1a66: 0x000c, 0x1a67: 0x000c, 0x1a68: 0x000c, 0x1a69: 0x000c, - 0x1a6a: 0x000c, 0x1a6b: 0x000c, 0x1a6c: 0x000c, 0x1a6d: 0x000c, 0x1a6e: 0x000c, 0x1a6f: 0x000c, - 0x1a70: 0x000c, 0x1a71: 0x000c, 0x1a72: 0x000c, 0x1a73: 0x000c, 0x1a74: 0x000c, 0x1a75: 0x000c, - 0x1a76: 0x000c, 0x1a77: 0x000c, 0x1a78: 0x000c, 0x1a79: 0x000c, 0x1a7a: 0x000c, 0x1a7b: 0x000c, - 0x1a7c: 0x000c, 0x1a7d: 0x000c, 0x1a7e: 0x000c, 0x1a7f: 0x000c, - // Block 0x6a, offset 0x1a80 - 0x1a80: 0x000a, 0x1a81: 0x000a, 0x1a82: 0x000a, 0x1a83: 0x000a, 0x1a84: 0x000a, 0x1a85: 0x000a, - 0x1a86: 0x000a, 0x1a87: 0x000a, 0x1a88: 0x000a, 0x1a89: 0x000a, 0x1a8a: 0x000a, 0x1a8b: 0x000a, - 0x1a8c: 0x000a, 0x1a8d: 0x000a, 0x1a8e: 0x000a, 0x1a8f: 0x000a, 0x1a90: 0x000a, 0x1a91: 0x000a, - 0x1a92: 0x000a, 0x1a93: 0x000a, 0x1a94: 0x000a, 0x1a95: 0x000a, 0x1a96: 0x000a, 0x1a97: 0x000a, - 0x1a98: 0x000a, 0x1a99: 0x000a, 0x1a9a: 0x000a, 0x1a9b: 0x000a, 0x1a9c: 0x000a, 0x1a9d: 0x000a, - 0x1a9e: 0x000a, 0x1a9f: 0x000a, 0x1aa0: 0x000a, 0x1aa1: 0x000a, 0x1aa2: 0x003a, 0x1aa3: 0x002a, - 0x1aa4: 0x003a, 0x1aa5: 0x002a, 0x1aa6: 0x003a, 0x1aa7: 0x002a, 0x1aa8: 0x003a, 0x1aa9: 0x002a, - 0x1aaa: 0x000a, 0x1aab: 0x000a, 0x1aac: 0x000a, 0x1aad: 0x000a, 0x1aae: 0x000a, 0x1aaf: 0x000a, - 0x1ab0: 0x000a, 0x1ab1: 0x000a, 0x1ab2: 0x000a, 0x1ab3: 0x000a, 0x1ab4: 0x000a, 0x1ab5: 0x000a, - 0x1ab6: 0x000a, 0x1ab7: 0x000a, 0x1ab8: 0x000a, 0x1ab9: 0x000a, 0x1aba: 0x000a, 0x1abb: 0x000a, - 0x1abc: 0x000a, 0x1abd: 0x000a, 0x1abe: 0x000a, 0x1abf: 0x000a, - // Block 0x6b, offset 0x1ac0 - 0x1ac0: 0x000a, 0x1ac1: 0x000a, 0x1ac2: 0x000a, 0x1ac3: 0x000a, 0x1ac4: 0x000a, 0x1ac5: 0x000a, - 0x1ac6: 0x000a, 0x1ac7: 0x000a, 0x1ac8: 0x000a, 0x1ac9: 0x000a, - // Block 0x6c, offset 0x1b00 - 0x1b00: 0x000a, 0x1b01: 0x000a, 0x1b02: 0x000a, 0x1b03: 0x000a, 0x1b04: 0x000a, 0x1b05: 0x000a, - 0x1b06: 0x000a, 0x1b07: 0x000a, 0x1b08: 0x000a, 0x1b09: 0x000a, 0x1b0a: 0x000a, 0x1b0b: 0x000a, - 0x1b0c: 0x000a, 0x1b0d: 0x000a, 0x1b0e: 0x000a, 0x1b0f: 0x000a, 0x1b10: 0x000a, 0x1b11: 0x000a, - 0x1b12: 0x000a, 0x1b13: 0x000a, 0x1b14: 0x000a, 0x1b15: 0x000a, 0x1b16: 0x000a, 0x1b17: 0x000a, - 0x1b18: 0x000a, 0x1b19: 0x000a, 0x1b1b: 0x000a, 0x1b1c: 0x000a, 0x1b1d: 0x000a, - 0x1b1e: 0x000a, 0x1b1f: 0x000a, 0x1b20: 0x000a, 0x1b21: 0x000a, 0x1b22: 0x000a, 0x1b23: 0x000a, - 0x1b24: 0x000a, 0x1b25: 0x000a, 0x1b26: 0x000a, 0x1b27: 0x000a, 0x1b28: 0x000a, 0x1b29: 0x000a, - 0x1b2a: 0x000a, 0x1b2b: 0x000a, 0x1b2c: 0x000a, 0x1b2d: 0x000a, 0x1b2e: 0x000a, 0x1b2f: 0x000a, - 0x1b30: 0x000a, 0x1b31: 0x000a, 0x1b32: 0x000a, 0x1b33: 0x000a, 0x1b34: 0x000a, 0x1b35: 0x000a, - 0x1b36: 0x000a, 0x1b37: 0x000a, 0x1b38: 0x000a, 0x1b39: 0x000a, 0x1b3a: 0x000a, 0x1b3b: 0x000a, - 0x1b3c: 0x000a, 0x1b3d: 0x000a, 0x1b3e: 0x000a, 0x1b3f: 0x000a, - // Block 0x6d, offset 0x1b40 - 0x1b40: 0x000a, 0x1b41: 0x000a, 0x1b42: 0x000a, 0x1b43: 0x000a, 0x1b44: 0x000a, 0x1b45: 0x000a, - 0x1b46: 0x000a, 0x1b47: 0x000a, 0x1b48: 0x000a, 0x1b49: 0x000a, 0x1b4a: 0x000a, 0x1b4b: 0x000a, - 0x1b4c: 0x000a, 0x1b4d: 0x000a, 0x1b4e: 0x000a, 0x1b4f: 0x000a, 0x1b50: 0x000a, 0x1b51: 0x000a, - 0x1b52: 0x000a, 0x1b53: 0x000a, 0x1b54: 0x000a, 0x1b55: 0x000a, 0x1b56: 0x000a, 0x1b57: 0x000a, - 0x1b58: 0x000a, 0x1b59: 0x000a, 0x1b5a: 0x000a, 0x1b5b: 0x000a, 0x1b5c: 0x000a, 0x1b5d: 0x000a, - 0x1b5e: 0x000a, 0x1b5f: 0x000a, 0x1b60: 0x000a, 0x1b61: 0x000a, 0x1b62: 0x000a, 0x1b63: 0x000a, - 0x1b64: 0x000a, 0x1b65: 0x000a, 0x1b66: 0x000a, 0x1b67: 0x000a, 0x1b68: 0x000a, 0x1b69: 0x000a, - 0x1b6a: 0x000a, 0x1b6b: 0x000a, 0x1b6c: 0x000a, 0x1b6d: 0x000a, 0x1b6e: 0x000a, 0x1b6f: 0x000a, - 0x1b70: 0x000a, 0x1b71: 0x000a, 0x1b72: 0x000a, 0x1b73: 0x000a, - // Block 0x6e, offset 0x1b80 - 0x1b80: 0x000a, 0x1b81: 0x000a, 0x1b82: 0x000a, 0x1b83: 0x000a, 0x1b84: 0x000a, 0x1b85: 0x000a, - 0x1b86: 0x000a, 0x1b87: 0x000a, 0x1b88: 0x000a, 0x1b89: 0x000a, 0x1b8a: 0x000a, 0x1b8b: 0x000a, - 0x1b8c: 0x000a, 0x1b8d: 0x000a, 0x1b8e: 0x000a, 0x1b8f: 0x000a, 0x1b90: 0x000a, 0x1b91: 0x000a, - 0x1b92: 0x000a, 0x1b93: 0x000a, 0x1b94: 0x000a, 0x1b95: 0x000a, - 0x1bb0: 0x000a, 0x1bb1: 0x000a, 0x1bb2: 0x000a, 0x1bb3: 0x000a, 0x1bb4: 0x000a, 0x1bb5: 0x000a, - 0x1bb6: 0x000a, 0x1bb7: 0x000a, 0x1bb8: 0x000a, 0x1bb9: 0x000a, 0x1bba: 0x000a, 0x1bbb: 0x000a, - // Block 0x6f, offset 0x1bc0 - 0x1bc0: 0x0009, 0x1bc1: 0x000a, 0x1bc2: 0x000a, 0x1bc3: 0x000a, 0x1bc4: 0x000a, - 0x1bc8: 0x003a, 0x1bc9: 0x002a, 0x1bca: 0x003a, 0x1bcb: 0x002a, - 0x1bcc: 0x003a, 0x1bcd: 0x002a, 0x1bce: 0x003a, 0x1bcf: 0x002a, 0x1bd0: 0x003a, 0x1bd1: 0x002a, - 0x1bd2: 0x000a, 0x1bd3: 0x000a, 0x1bd4: 0x003a, 0x1bd5: 0x002a, 0x1bd6: 0x003a, 0x1bd7: 0x002a, - 0x1bd8: 0x003a, 0x1bd9: 0x002a, 0x1bda: 0x003a, 0x1bdb: 0x002a, 0x1bdc: 0x000a, 0x1bdd: 0x000a, - 0x1bde: 0x000a, 0x1bdf: 0x000a, 0x1be0: 0x000a, - 0x1bea: 0x000c, 0x1beb: 0x000c, 0x1bec: 0x000c, 0x1bed: 0x000c, - 0x1bf0: 0x000a, - 0x1bf6: 0x000a, 0x1bf7: 0x000a, - 0x1bfd: 0x000a, 0x1bfe: 0x000a, 0x1bff: 0x000a, - // Block 0x70, offset 0x1c00 - 0x1c19: 0x000c, 0x1c1a: 0x000c, 0x1c1b: 0x000a, 0x1c1c: 0x000a, - 0x1c20: 0x000a, - // Block 0x71, offset 0x1c40 - 0x1c7b: 0x000a, - // Block 0x72, offset 0x1c80 - 0x1c80: 0x000a, 0x1c81: 0x000a, 0x1c82: 0x000a, 0x1c83: 0x000a, 0x1c84: 0x000a, 0x1c85: 0x000a, - 0x1c86: 0x000a, 0x1c87: 0x000a, 0x1c88: 0x000a, 0x1c89: 0x000a, 0x1c8a: 0x000a, 0x1c8b: 0x000a, - 0x1c8c: 0x000a, 0x1c8d: 0x000a, 0x1c8e: 0x000a, 0x1c8f: 0x000a, 0x1c90: 0x000a, 0x1c91: 0x000a, - 0x1c92: 0x000a, 0x1c93: 0x000a, 0x1c94: 0x000a, 0x1c95: 0x000a, 0x1c96: 0x000a, 0x1c97: 0x000a, - 0x1c98: 0x000a, 0x1c99: 0x000a, 0x1c9a: 0x000a, 0x1c9b: 0x000a, 0x1c9c: 0x000a, 0x1c9d: 0x000a, - 0x1c9e: 0x000a, 0x1c9f: 0x000a, 0x1ca0: 0x000a, 0x1ca1: 0x000a, 0x1ca2: 0x000a, 0x1ca3: 0x000a, - // Block 0x73, offset 0x1cc0 - 0x1cdd: 0x000a, - 0x1cde: 0x000a, - // Block 0x74, offset 0x1d00 - 0x1d10: 0x000a, 0x1d11: 0x000a, - 0x1d12: 0x000a, 0x1d13: 0x000a, 0x1d14: 0x000a, 0x1d15: 0x000a, 0x1d16: 0x000a, 0x1d17: 0x000a, - 0x1d18: 0x000a, 0x1d19: 0x000a, 0x1d1a: 0x000a, 0x1d1b: 0x000a, 0x1d1c: 0x000a, 0x1d1d: 0x000a, - 0x1d1e: 0x000a, 0x1d1f: 0x000a, - 0x1d3c: 0x000a, 0x1d3d: 0x000a, 0x1d3e: 0x000a, - // Block 0x75, offset 0x1d40 - 0x1d71: 0x000a, 0x1d72: 0x000a, 0x1d73: 0x000a, 0x1d74: 0x000a, 0x1d75: 0x000a, - 0x1d76: 0x000a, 0x1d77: 0x000a, 0x1d78: 0x000a, 0x1d79: 0x000a, 0x1d7a: 0x000a, 0x1d7b: 0x000a, - 0x1d7c: 0x000a, 0x1d7d: 0x000a, 0x1d7e: 0x000a, 0x1d7f: 0x000a, - // Block 0x76, offset 0x1d80 - 0x1d8c: 0x000a, 0x1d8d: 0x000a, 0x1d8e: 0x000a, 0x1d8f: 0x000a, - // Block 0x77, offset 0x1dc0 - 0x1df7: 0x000a, 0x1df8: 0x000a, 0x1df9: 0x000a, 0x1dfa: 0x000a, - // Block 0x78, offset 0x1e00 - 0x1e1e: 0x000a, 0x1e1f: 0x000a, - 0x1e3f: 0x000a, - // Block 0x79, offset 0x1e40 - 0x1e50: 0x000a, 0x1e51: 0x000a, - 0x1e52: 0x000a, 0x1e53: 0x000a, 0x1e54: 0x000a, 0x1e55: 0x000a, 0x1e56: 0x000a, 0x1e57: 0x000a, - 0x1e58: 0x000a, 0x1e59: 0x000a, 0x1e5a: 0x000a, 0x1e5b: 0x000a, 0x1e5c: 0x000a, 0x1e5d: 0x000a, - 0x1e5e: 0x000a, 0x1e5f: 0x000a, 0x1e60: 0x000a, 0x1e61: 0x000a, 0x1e62: 0x000a, 0x1e63: 0x000a, - 0x1e64: 0x000a, 0x1e65: 0x000a, 0x1e66: 0x000a, 0x1e67: 0x000a, 0x1e68: 0x000a, 0x1e69: 0x000a, - 0x1e6a: 0x000a, 0x1e6b: 0x000a, 0x1e6c: 0x000a, 0x1e6d: 0x000a, 0x1e6e: 0x000a, 0x1e6f: 0x000a, - 0x1e70: 0x000a, 0x1e71: 0x000a, 0x1e72: 0x000a, 0x1e73: 0x000a, 0x1e74: 0x000a, 0x1e75: 0x000a, - 0x1e76: 0x000a, 0x1e77: 0x000a, 0x1e78: 0x000a, 0x1e79: 0x000a, 0x1e7a: 0x000a, 0x1e7b: 0x000a, - 0x1e7c: 0x000a, 0x1e7d: 0x000a, 0x1e7e: 0x000a, 0x1e7f: 0x000a, - // Block 0x7a, offset 0x1e80 - 0x1e80: 0x000a, 0x1e81: 0x000a, 0x1e82: 0x000a, 0x1e83: 0x000a, 0x1e84: 0x000a, 0x1e85: 0x000a, - 0x1e86: 0x000a, - // Block 0x7b, offset 0x1ec0 - 0x1ecd: 0x000a, 0x1ece: 0x000a, 0x1ecf: 0x000a, - // Block 0x7c, offset 0x1f00 - 0x1f2f: 0x000c, - 0x1f30: 0x000c, 0x1f31: 0x000c, 0x1f32: 0x000c, 0x1f33: 0x000a, 0x1f34: 0x000c, 0x1f35: 0x000c, - 0x1f36: 0x000c, 0x1f37: 0x000c, 0x1f38: 0x000c, 0x1f39: 0x000c, 0x1f3a: 0x000c, 0x1f3b: 0x000c, - 0x1f3c: 0x000c, 0x1f3d: 0x000c, 0x1f3e: 0x000a, 0x1f3f: 0x000a, - // Block 0x7d, offset 0x1f40 - 0x1f5e: 0x000c, 0x1f5f: 0x000c, - // Block 0x7e, offset 0x1f80 - 0x1fb0: 0x000c, 0x1fb1: 0x000c, - // Block 0x7f, offset 0x1fc0 - 0x1fc0: 0x000a, 0x1fc1: 0x000a, 0x1fc2: 0x000a, 0x1fc3: 0x000a, 0x1fc4: 0x000a, 0x1fc5: 0x000a, - 0x1fc6: 0x000a, 0x1fc7: 0x000a, 0x1fc8: 0x000a, 0x1fc9: 0x000a, 0x1fca: 0x000a, 0x1fcb: 0x000a, - 0x1fcc: 0x000a, 0x1fcd: 0x000a, 0x1fce: 0x000a, 0x1fcf: 0x000a, 0x1fd0: 0x000a, 0x1fd1: 0x000a, - 0x1fd2: 0x000a, 0x1fd3: 0x000a, 0x1fd4: 0x000a, 0x1fd5: 0x000a, 0x1fd6: 0x000a, 0x1fd7: 0x000a, - 0x1fd8: 0x000a, 0x1fd9: 0x000a, 0x1fda: 0x000a, 0x1fdb: 0x000a, 0x1fdc: 0x000a, 0x1fdd: 0x000a, - 0x1fde: 0x000a, 0x1fdf: 0x000a, 0x1fe0: 0x000a, 0x1fe1: 0x000a, - // Block 0x80, offset 0x2000 - 0x2008: 0x000a, - // Block 0x81, offset 0x2040 - 0x2042: 0x000c, - 0x2046: 0x000c, 0x204b: 0x000c, - 0x2065: 0x000c, 0x2066: 0x000c, 0x2068: 0x000a, 0x2069: 0x000a, - 0x206a: 0x000a, 0x206b: 0x000a, - 0x2078: 0x0004, 0x2079: 0x0004, - // Block 0x82, offset 0x2080 - 0x20b4: 0x000a, 0x20b5: 0x000a, - 0x20b6: 0x000a, 0x20b7: 0x000a, - // Block 0x83, offset 0x20c0 - 0x20c4: 0x000c, 0x20c5: 0x000c, - 0x20e0: 0x000c, 0x20e1: 0x000c, 0x20e2: 0x000c, 0x20e3: 0x000c, - 0x20e4: 0x000c, 0x20e5: 0x000c, 0x20e6: 0x000c, 0x20e7: 0x000c, 0x20e8: 0x000c, 0x20e9: 0x000c, - 0x20ea: 0x000c, 0x20eb: 0x000c, 0x20ec: 0x000c, 0x20ed: 0x000c, 0x20ee: 0x000c, 0x20ef: 0x000c, - 0x20f0: 0x000c, 0x20f1: 0x000c, - // Block 0x84, offset 0x2100 - 0x2126: 0x000c, 0x2127: 0x000c, 0x2128: 0x000c, 0x2129: 0x000c, - 0x212a: 0x000c, 0x212b: 0x000c, 0x212c: 0x000c, 0x212d: 0x000c, - // Block 0x85, offset 0x2140 - 0x2147: 0x000c, 0x2148: 0x000c, 0x2149: 0x000c, 0x214a: 0x000c, 0x214b: 0x000c, - 0x214c: 0x000c, 0x214d: 0x000c, 0x214e: 0x000c, 0x214f: 0x000c, 0x2150: 0x000c, 0x2151: 0x000c, - // Block 0x86, offset 0x2180 - 0x2180: 0x000c, 0x2181: 0x000c, 0x2182: 0x000c, - 0x21b3: 0x000c, - 0x21b6: 0x000c, 0x21b7: 0x000c, 0x21b8: 0x000c, 0x21b9: 0x000c, - 0x21bc: 0x000c, - // Block 0x87, offset 0x21c0 - 0x21e5: 0x000c, - // Block 0x88, offset 0x2200 - 0x2229: 0x000c, - 0x222a: 0x000c, 0x222b: 0x000c, 0x222c: 0x000c, 0x222d: 0x000c, 0x222e: 0x000c, - 0x2231: 0x000c, 0x2232: 0x000c, 0x2235: 0x000c, - 0x2236: 0x000c, - // Block 0x89, offset 0x2240 - 0x2243: 0x000c, - 0x224c: 0x000c, - 0x227c: 0x000c, - // Block 0x8a, offset 0x2280 - 0x22b0: 0x000c, 0x22b2: 0x000c, 0x22b3: 0x000c, 0x22b4: 0x000c, - 0x22b7: 0x000c, 0x22b8: 0x000c, - 0x22be: 0x000c, 0x22bf: 0x000c, - // Block 0x8b, offset 0x22c0 - 0x22c1: 0x000c, - 0x22ec: 0x000c, 0x22ed: 0x000c, - 0x22f6: 0x000c, - // Block 0x8c, offset 0x2300 - 0x2325: 0x000c, 0x2328: 0x000c, - 0x232d: 0x000c, - // Block 0x8d, offset 0x2340 - 0x235d: 0x0001, - 0x235e: 0x000c, 0x235f: 0x0001, 0x2360: 0x0001, 0x2361: 0x0001, 0x2362: 0x0001, 0x2363: 0x0001, - 0x2364: 0x0001, 0x2365: 0x0001, 0x2366: 0x0001, 0x2367: 0x0001, 0x2368: 0x0001, 0x2369: 0x0003, - 0x236a: 0x0001, 0x236b: 0x0001, 0x236c: 0x0001, 0x236d: 0x0001, 0x236e: 0x0001, 0x236f: 0x0001, - 0x2370: 0x0001, 0x2371: 0x0001, 0x2372: 0x0001, 0x2373: 0x0001, 0x2374: 0x0001, 0x2375: 0x0001, - 0x2376: 0x0001, 0x2377: 0x0001, 0x2378: 0x0001, 0x2379: 0x0001, 0x237a: 0x0001, 0x237b: 0x0001, - 0x237c: 0x0001, 0x237d: 0x0001, 0x237e: 0x0001, 0x237f: 0x0001, - // Block 0x8e, offset 0x2380 - 0x2380: 0x0001, 0x2381: 0x0001, 0x2382: 0x0001, 0x2383: 0x0001, 0x2384: 0x0001, 0x2385: 0x0001, - 0x2386: 0x0001, 0x2387: 0x0001, 0x2388: 0x0001, 0x2389: 0x0001, 0x238a: 0x0001, 0x238b: 0x0001, - 0x238c: 0x0001, 0x238d: 0x0001, 0x238e: 0x0001, 0x238f: 0x0001, 0x2390: 0x000d, 0x2391: 0x000d, - 0x2392: 0x000d, 0x2393: 0x000d, 0x2394: 0x000d, 0x2395: 0x000d, 0x2396: 0x000d, 0x2397: 0x000d, - 0x2398: 0x000d, 0x2399: 0x000d, 0x239a: 0x000d, 0x239b: 0x000d, 0x239c: 0x000d, 0x239d: 0x000d, - 0x239e: 0x000d, 0x239f: 0x000d, 0x23a0: 0x000d, 0x23a1: 0x000d, 0x23a2: 0x000d, 0x23a3: 0x000d, - 0x23a4: 0x000d, 0x23a5: 0x000d, 0x23a6: 0x000d, 0x23a7: 0x000d, 0x23a8: 0x000d, 0x23a9: 0x000d, - 0x23aa: 0x000d, 0x23ab: 0x000d, 0x23ac: 0x000d, 0x23ad: 0x000d, 0x23ae: 0x000d, 0x23af: 0x000d, - 0x23b0: 0x000d, 0x23b1: 0x000d, 0x23b2: 0x000d, 0x23b3: 0x000d, 0x23b4: 0x000d, 0x23b5: 0x000d, - 0x23b6: 0x000d, 0x23b7: 0x000d, 0x23b8: 0x000d, 0x23b9: 0x000d, 0x23ba: 0x000d, 0x23bb: 0x000d, - 0x23bc: 0x000d, 0x23bd: 0x000d, 0x23be: 0x000d, 0x23bf: 0x000d, - // Block 0x8f, offset 0x23c0 - 0x23c0: 0x000d, 0x23c1: 0x000d, 0x23c2: 0x000d, 0x23c3: 0x000d, 0x23c4: 0x000d, 0x23c5: 0x000d, - 0x23c6: 0x000d, 0x23c7: 0x000d, 0x23c8: 0x000d, 0x23c9: 0x000d, 0x23ca: 0x000d, 0x23cb: 0x000d, - 0x23cc: 0x000d, 0x23cd: 0x000d, 0x23ce: 0x000d, 0x23cf: 0x000d, 0x23d0: 0x000d, 0x23d1: 0x000d, - 0x23d2: 0x000d, 0x23d3: 0x000d, 0x23d4: 0x000d, 0x23d5: 0x000d, 0x23d6: 0x000d, 0x23d7: 0x000d, - 0x23d8: 0x000d, 0x23d9: 0x000d, 0x23da: 0x000d, 0x23db: 0x000d, 0x23dc: 0x000d, 0x23dd: 0x000d, - 0x23de: 0x000d, 0x23df: 0x000d, 0x23e0: 0x000d, 0x23e1: 0x000d, 0x23e2: 0x000d, 0x23e3: 0x000d, - 0x23e4: 0x000d, 0x23e5: 0x000d, 0x23e6: 0x000d, 0x23e7: 0x000d, 0x23e8: 0x000d, 0x23e9: 0x000d, - 0x23ea: 0x000d, 0x23eb: 0x000d, 0x23ec: 0x000d, 0x23ed: 0x000d, 0x23ee: 0x000d, 0x23ef: 0x000d, - 0x23f0: 0x000d, 0x23f1: 0x000d, 0x23f2: 0x000d, 0x23f3: 0x000d, 0x23f4: 0x000d, 0x23f5: 0x000d, - 0x23f6: 0x000d, 0x23f7: 0x000d, 0x23f8: 0x000d, 0x23f9: 0x000d, 0x23fa: 0x000d, 0x23fb: 0x000d, - 0x23fc: 0x000d, 0x23fd: 0x000d, 0x23fe: 0x000a, 0x23ff: 0x000a, - // Block 0x90, offset 0x2400 - 0x2400: 0x000d, 0x2401: 0x000d, 0x2402: 0x000d, 0x2403: 0x000d, 0x2404: 0x000d, 0x2405: 0x000d, - 0x2406: 0x000d, 0x2407: 0x000d, 0x2408: 0x000d, 0x2409: 0x000d, 0x240a: 0x000d, 0x240b: 0x000d, - 0x240c: 0x000d, 0x240d: 0x000d, 0x240e: 0x000d, 0x240f: 0x000d, 0x2410: 0x000b, 0x2411: 0x000b, - 0x2412: 0x000b, 0x2413: 0x000b, 0x2414: 0x000b, 0x2415: 0x000b, 0x2416: 0x000b, 0x2417: 0x000b, - 0x2418: 0x000b, 0x2419: 0x000b, 0x241a: 0x000b, 0x241b: 0x000b, 0x241c: 0x000b, 0x241d: 0x000b, - 0x241e: 0x000b, 0x241f: 0x000b, 0x2420: 0x000b, 0x2421: 0x000b, 0x2422: 0x000b, 0x2423: 0x000b, - 0x2424: 0x000b, 0x2425: 0x000b, 0x2426: 0x000b, 0x2427: 0x000b, 0x2428: 0x000b, 0x2429: 0x000b, - 0x242a: 0x000b, 0x242b: 0x000b, 0x242c: 0x000b, 0x242d: 0x000b, 0x242e: 0x000b, 0x242f: 0x000b, - 0x2430: 0x000d, 0x2431: 0x000d, 0x2432: 0x000d, 0x2433: 0x000d, 0x2434: 0x000d, 0x2435: 0x000d, - 0x2436: 0x000d, 0x2437: 0x000d, 0x2438: 0x000d, 0x2439: 0x000d, 0x243a: 0x000d, 0x243b: 0x000d, - 0x243c: 0x000d, 0x243d: 0x000a, 0x243e: 0x000d, 0x243f: 0x000d, - // Block 0x91, offset 0x2440 - 0x2440: 0x000c, 0x2441: 0x000c, 0x2442: 0x000c, 0x2443: 0x000c, 0x2444: 0x000c, 0x2445: 0x000c, - 0x2446: 0x000c, 0x2447: 0x000c, 0x2448: 0x000c, 0x2449: 0x000c, 0x244a: 0x000c, 0x244b: 0x000c, - 0x244c: 0x000c, 0x244d: 0x000c, 0x244e: 0x000c, 0x244f: 0x000c, 0x2450: 0x000a, 0x2451: 0x000a, - 0x2452: 0x000a, 0x2453: 0x000a, 0x2454: 0x000a, 0x2455: 0x000a, 0x2456: 0x000a, 0x2457: 0x000a, - 0x2458: 0x000a, 0x2459: 0x000a, - 0x2460: 0x000c, 0x2461: 0x000c, 0x2462: 0x000c, 0x2463: 0x000c, - 0x2464: 0x000c, 0x2465: 0x000c, 0x2466: 0x000c, 0x2467: 0x000c, 0x2468: 0x000c, 0x2469: 0x000c, - 0x246a: 0x000c, 0x246b: 0x000c, 0x246c: 0x000c, 0x246d: 0x000c, 0x246e: 0x000c, 0x246f: 0x000c, - 0x2470: 0x000a, 0x2471: 0x000a, 0x2472: 0x000a, 0x2473: 0x000a, 0x2474: 0x000a, 0x2475: 0x000a, - 0x2476: 0x000a, 0x2477: 0x000a, 0x2478: 0x000a, 0x2479: 0x000a, 0x247a: 0x000a, 0x247b: 0x000a, - 0x247c: 0x000a, 0x247d: 0x000a, 0x247e: 0x000a, 0x247f: 0x000a, - // Block 0x92, offset 0x2480 - 0x2480: 0x000a, 0x2481: 0x000a, 0x2482: 0x000a, 0x2483: 0x000a, 0x2484: 0x000a, 0x2485: 0x000a, - 0x2486: 0x000a, 0x2487: 0x000a, 0x2488: 0x000a, 0x2489: 0x000a, 0x248a: 0x000a, 0x248b: 0x000a, - 0x248c: 0x000a, 0x248d: 0x000a, 0x248e: 0x000a, 0x248f: 0x000a, 0x2490: 0x0006, 0x2491: 0x000a, - 0x2492: 0x0006, 0x2494: 0x000a, 0x2495: 0x0006, 0x2496: 0x000a, 0x2497: 0x000a, - 0x2498: 0x000a, 0x2499: 0x009a, 0x249a: 0x008a, 0x249b: 0x007a, 0x249c: 0x006a, 0x249d: 0x009a, - 0x249e: 0x008a, 0x249f: 0x0004, 0x24a0: 0x000a, 0x24a1: 0x000a, 0x24a2: 0x0003, 0x24a3: 0x0003, - 0x24a4: 0x000a, 0x24a5: 0x000a, 0x24a6: 0x000a, 0x24a8: 0x000a, 0x24a9: 0x0004, - 0x24aa: 0x0004, 0x24ab: 0x000a, - 0x24b0: 0x000d, 0x24b1: 0x000d, 0x24b2: 0x000d, 0x24b3: 0x000d, 0x24b4: 0x000d, 0x24b5: 0x000d, - 0x24b6: 0x000d, 0x24b7: 0x000d, 0x24b8: 0x000d, 0x24b9: 0x000d, 0x24ba: 0x000d, 0x24bb: 0x000d, - 0x24bc: 0x000d, 0x24bd: 0x000d, 0x24be: 0x000d, 0x24bf: 0x000d, - // Block 0x93, offset 0x24c0 - 0x24c0: 0x000d, 0x24c1: 0x000d, 0x24c2: 0x000d, 0x24c3: 0x000d, 0x24c4: 0x000d, 0x24c5: 0x000d, - 0x24c6: 0x000d, 0x24c7: 0x000d, 0x24c8: 0x000d, 0x24c9: 0x000d, 0x24ca: 0x000d, 0x24cb: 0x000d, - 0x24cc: 0x000d, 0x24cd: 0x000d, 0x24ce: 0x000d, 0x24cf: 0x000d, 0x24d0: 0x000d, 0x24d1: 0x000d, - 0x24d2: 0x000d, 0x24d3: 0x000d, 0x24d4: 0x000d, 0x24d5: 0x000d, 0x24d6: 0x000d, 0x24d7: 0x000d, - 0x24d8: 0x000d, 0x24d9: 0x000d, 0x24da: 0x000d, 0x24db: 0x000d, 0x24dc: 0x000d, 0x24dd: 0x000d, - 0x24de: 0x000d, 0x24df: 0x000d, 0x24e0: 0x000d, 0x24e1: 0x000d, 0x24e2: 0x000d, 0x24e3: 0x000d, - 0x24e4: 0x000d, 0x24e5: 0x000d, 0x24e6: 0x000d, 0x24e7: 0x000d, 0x24e8: 0x000d, 0x24e9: 0x000d, - 0x24ea: 0x000d, 0x24eb: 0x000d, 0x24ec: 0x000d, 0x24ed: 0x000d, 0x24ee: 0x000d, 0x24ef: 0x000d, - 0x24f0: 0x000d, 0x24f1: 0x000d, 0x24f2: 0x000d, 0x24f3: 0x000d, 0x24f4: 0x000d, 0x24f5: 0x000d, - 0x24f6: 0x000d, 0x24f7: 0x000d, 0x24f8: 0x000d, 0x24f9: 0x000d, 0x24fa: 0x000d, 0x24fb: 0x000d, - 0x24fc: 0x000d, 0x24fd: 0x000d, 0x24fe: 0x000d, 0x24ff: 0x000b, - // Block 0x94, offset 0x2500 - 0x2501: 0x000a, 0x2502: 0x000a, 0x2503: 0x0004, 0x2504: 0x0004, 0x2505: 0x0004, - 0x2506: 0x000a, 0x2507: 0x000a, 0x2508: 0x003a, 0x2509: 0x002a, 0x250a: 0x000a, 0x250b: 0x0003, - 0x250c: 0x0006, 0x250d: 0x0003, 0x250e: 0x0006, 0x250f: 0x0006, 0x2510: 0x0002, 0x2511: 0x0002, - 0x2512: 0x0002, 0x2513: 0x0002, 0x2514: 0x0002, 0x2515: 0x0002, 0x2516: 0x0002, 0x2517: 0x0002, - 0x2518: 0x0002, 0x2519: 0x0002, 0x251a: 0x0006, 0x251b: 0x000a, 0x251c: 0x000a, 0x251d: 0x000a, - 0x251e: 0x000a, 0x251f: 0x000a, 0x2520: 0x000a, - 0x253b: 0x005a, - 0x253c: 0x000a, 0x253d: 0x004a, 0x253e: 0x000a, 0x253f: 0x000a, - // Block 0x95, offset 0x2540 - 0x2540: 0x000a, - 0x255b: 0x005a, 0x255c: 0x000a, 0x255d: 0x004a, - 0x255e: 0x000a, 0x255f: 0x00fa, 0x2560: 0x00ea, 0x2561: 0x000a, 0x2562: 0x003a, 0x2563: 0x002a, - 0x2564: 0x000a, 0x2565: 0x000a, - // Block 0x96, offset 0x2580 - 0x25a0: 0x0004, 0x25a1: 0x0004, 0x25a2: 0x000a, 0x25a3: 0x000a, - 0x25a4: 0x000a, 0x25a5: 0x0004, 0x25a6: 0x0004, 0x25a8: 0x000a, 0x25a9: 0x000a, - 0x25aa: 0x000a, 0x25ab: 0x000a, 0x25ac: 0x000a, 0x25ad: 0x000a, 0x25ae: 0x000a, - 0x25b0: 0x000b, 0x25b1: 0x000b, 0x25b2: 0x000b, 0x25b3: 0x000b, 0x25b4: 0x000b, 0x25b5: 0x000b, - 0x25b6: 0x000b, 0x25b7: 0x000b, 0x25b8: 0x000b, 0x25b9: 0x000a, 0x25ba: 0x000a, 0x25bb: 0x000a, - 0x25bc: 0x000a, 0x25bd: 0x000a, 0x25be: 0x000b, 0x25bf: 0x000b, - // Block 0x97, offset 0x25c0 - 0x25c1: 0x000a, - // Block 0x98, offset 0x2600 - 0x2600: 0x000a, 0x2601: 0x000a, 0x2602: 0x000a, 0x2603: 0x000a, 0x2604: 0x000a, 0x2605: 0x000a, - 0x2606: 0x000a, 0x2607: 0x000a, 0x2608: 0x000a, 0x2609: 0x000a, 0x260a: 0x000a, 0x260b: 0x000a, - 0x260c: 0x000a, 0x2610: 0x000a, 0x2611: 0x000a, - 0x2612: 0x000a, 0x2613: 0x000a, 0x2614: 0x000a, 0x2615: 0x000a, 0x2616: 0x000a, 0x2617: 0x000a, - 0x2618: 0x000a, 0x2619: 0x000a, 0x261a: 0x000a, 0x261b: 0x000a, - 0x2620: 0x000a, - // Block 0x99, offset 0x2640 - 0x267d: 0x000c, - // Block 0x9a, offset 0x2680 - 0x26a0: 0x000c, 0x26a1: 0x0002, 0x26a2: 0x0002, 0x26a3: 0x0002, - 0x26a4: 0x0002, 0x26a5: 0x0002, 0x26a6: 0x0002, 0x26a7: 0x0002, 0x26a8: 0x0002, 0x26a9: 0x0002, - 0x26aa: 0x0002, 0x26ab: 0x0002, 0x26ac: 0x0002, 0x26ad: 0x0002, 0x26ae: 0x0002, 0x26af: 0x0002, - 0x26b0: 0x0002, 0x26b1: 0x0002, 0x26b2: 0x0002, 0x26b3: 0x0002, 0x26b4: 0x0002, 0x26b5: 0x0002, - 0x26b6: 0x0002, 0x26b7: 0x0002, 0x26b8: 0x0002, 0x26b9: 0x0002, 0x26ba: 0x0002, 0x26bb: 0x0002, - // Block 0x9b, offset 0x26c0 - 0x26f6: 0x000c, 0x26f7: 0x000c, 0x26f8: 0x000c, 0x26f9: 0x000c, 0x26fa: 0x000c, - // Block 0x9c, offset 0x2700 - 0x2700: 0x0001, 0x2701: 0x0001, 0x2702: 0x0001, 0x2703: 0x0001, 0x2704: 0x0001, 0x2705: 0x0001, - 0x2706: 0x0001, 0x2707: 0x0001, 0x2708: 0x0001, 0x2709: 0x0001, 0x270a: 0x0001, 0x270b: 0x0001, - 0x270c: 0x0001, 0x270d: 0x0001, 0x270e: 0x0001, 0x270f: 0x0001, 0x2710: 0x0001, 0x2711: 0x0001, - 0x2712: 0x0001, 0x2713: 0x0001, 0x2714: 0x0001, 0x2715: 0x0001, 0x2716: 0x0001, 0x2717: 0x0001, - 0x2718: 0x0001, 0x2719: 0x0001, 0x271a: 0x0001, 0x271b: 0x0001, 0x271c: 0x0001, 0x271d: 0x0001, - 0x271e: 0x0001, 0x271f: 0x0001, 0x2720: 0x0001, 0x2721: 0x0001, 0x2722: 0x0001, 0x2723: 0x0001, - 0x2724: 0x0001, 0x2725: 0x0001, 0x2726: 0x0001, 0x2727: 0x0001, 0x2728: 0x0001, 0x2729: 0x0001, - 0x272a: 0x0001, 0x272b: 0x0001, 0x272c: 0x0001, 0x272d: 0x0001, 0x272e: 0x0001, 0x272f: 0x0001, - 0x2730: 0x0001, 0x2731: 0x0001, 0x2732: 0x0001, 0x2733: 0x0001, 0x2734: 0x0001, 0x2735: 0x0001, - 0x2736: 0x0001, 0x2737: 0x0001, 0x2738: 0x0001, 0x2739: 0x0001, 0x273a: 0x0001, 0x273b: 0x0001, - 0x273c: 0x0001, 0x273d: 0x0001, 0x273e: 0x0001, 0x273f: 0x0001, - // Block 0x9d, offset 0x2740 - 0x2740: 0x0001, 0x2741: 0x0001, 0x2742: 0x0001, 0x2743: 0x0001, 0x2744: 0x0001, 0x2745: 0x0001, - 0x2746: 0x0001, 0x2747: 0x0001, 0x2748: 0x0001, 0x2749: 0x0001, 0x274a: 0x0001, 0x274b: 0x0001, - 0x274c: 0x0001, 0x274d: 0x0001, 0x274e: 0x0001, 0x274f: 0x0001, 0x2750: 0x0001, 0x2751: 0x0001, - 0x2752: 0x0001, 0x2753: 0x0001, 0x2754: 0x0001, 0x2755: 0x0001, 0x2756: 0x0001, 0x2757: 0x0001, - 0x2758: 0x0001, 0x2759: 0x0001, 0x275a: 0x0001, 0x275b: 0x0001, 0x275c: 0x0001, 0x275d: 0x0001, - 0x275e: 0x0001, 0x275f: 0x000a, 0x2760: 0x0001, 0x2761: 0x0001, 0x2762: 0x0001, 0x2763: 0x0001, - 0x2764: 0x0001, 0x2765: 0x0001, 0x2766: 0x0001, 0x2767: 0x0001, 0x2768: 0x0001, 0x2769: 0x0001, - 0x276a: 0x0001, 0x276b: 0x0001, 0x276c: 0x0001, 0x276d: 0x0001, 0x276e: 0x0001, 0x276f: 0x0001, - 0x2770: 0x0001, 0x2771: 0x0001, 0x2772: 0x0001, 0x2773: 0x0001, 0x2774: 0x0001, 0x2775: 0x0001, - 0x2776: 0x0001, 0x2777: 0x0001, 0x2778: 0x0001, 0x2779: 0x0001, 0x277a: 0x0001, 0x277b: 0x0001, - 0x277c: 0x0001, 0x277d: 0x0001, 0x277e: 0x0001, 0x277f: 0x0001, - // Block 0x9e, offset 0x2780 - 0x2780: 0x0001, 0x2781: 0x000c, 0x2782: 0x000c, 0x2783: 0x000c, 0x2784: 0x0001, 0x2785: 0x000c, - 0x2786: 0x000c, 0x2787: 0x0001, 0x2788: 0x0001, 0x2789: 0x0001, 0x278a: 0x0001, 0x278b: 0x0001, - 0x278c: 0x000c, 0x278d: 0x000c, 0x278e: 0x000c, 0x278f: 0x000c, 0x2790: 0x0001, 0x2791: 0x0001, - 0x2792: 0x0001, 0x2793: 0x0001, 0x2794: 0x0001, 0x2795: 0x0001, 0x2796: 0x0001, 0x2797: 0x0001, - 0x2798: 0x0001, 0x2799: 0x0001, 0x279a: 0x0001, 0x279b: 0x0001, 0x279c: 0x0001, 0x279d: 0x0001, - 0x279e: 0x0001, 0x279f: 0x0001, 0x27a0: 0x0001, 0x27a1: 0x0001, 0x27a2: 0x0001, 0x27a3: 0x0001, - 0x27a4: 0x0001, 0x27a5: 0x0001, 0x27a6: 0x0001, 0x27a7: 0x0001, 0x27a8: 0x0001, 0x27a9: 0x0001, - 0x27aa: 0x0001, 0x27ab: 0x0001, 0x27ac: 0x0001, 0x27ad: 0x0001, 0x27ae: 0x0001, 0x27af: 0x0001, - 0x27b0: 0x0001, 0x27b1: 0x0001, 0x27b2: 0x0001, 0x27b3: 0x0001, 0x27b4: 0x0001, 0x27b5: 0x0001, - 0x27b6: 0x0001, 0x27b7: 0x0001, 0x27b8: 0x000c, 0x27b9: 0x000c, 0x27ba: 0x000c, 0x27bb: 0x0001, - 0x27bc: 0x0001, 0x27bd: 0x0001, 0x27be: 0x0001, 0x27bf: 0x000c, - // Block 0x9f, offset 0x27c0 - 0x27c0: 0x0001, 0x27c1: 0x0001, 0x27c2: 0x0001, 0x27c3: 0x0001, 0x27c4: 0x0001, 0x27c5: 0x0001, - 0x27c6: 0x0001, 0x27c7: 0x0001, 0x27c8: 0x0001, 0x27c9: 0x0001, 0x27ca: 0x0001, 0x27cb: 0x0001, - 0x27cc: 0x0001, 0x27cd: 0x0001, 0x27ce: 0x0001, 0x27cf: 0x0001, 0x27d0: 0x0001, 0x27d1: 0x0001, - 0x27d2: 0x0001, 0x27d3: 0x0001, 0x27d4: 0x0001, 0x27d5: 0x0001, 0x27d6: 0x0001, 0x27d7: 0x0001, - 0x27d8: 0x0001, 0x27d9: 0x0001, 0x27da: 0x0001, 0x27db: 0x0001, 0x27dc: 0x0001, 0x27dd: 0x0001, - 0x27de: 0x0001, 0x27df: 0x0001, 0x27e0: 0x0001, 0x27e1: 0x0001, 0x27e2: 0x0001, 0x27e3: 0x0001, - 0x27e4: 0x0001, 0x27e5: 0x000c, 0x27e6: 0x000c, 0x27e7: 0x0001, 0x27e8: 0x0001, 0x27e9: 0x0001, - 0x27ea: 0x0001, 0x27eb: 0x0001, 0x27ec: 0x0001, 0x27ed: 0x0001, 0x27ee: 0x0001, 0x27ef: 0x0001, - 0x27f0: 0x0001, 0x27f1: 0x0001, 0x27f2: 0x0001, 0x27f3: 0x0001, 0x27f4: 0x0001, 0x27f5: 0x0001, - 0x27f6: 0x0001, 0x27f7: 0x0001, 0x27f8: 0x0001, 0x27f9: 0x0001, 0x27fa: 0x0001, 0x27fb: 0x0001, - 0x27fc: 0x0001, 0x27fd: 0x0001, 0x27fe: 0x0001, 0x27ff: 0x0001, - // Block 0xa0, offset 0x2800 - 0x2800: 0x0001, 0x2801: 0x0001, 0x2802: 0x0001, 0x2803: 0x0001, 0x2804: 0x0001, 0x2805: 0x0001, - 0x2806: 0x0001, 0x2807: 0x0001, 0x2808: 0x0001, 0x2809: 0x0001, 0x280a: 0x0001, 0x280b: 0x0001, - 0x280c: 0x0001, 0x280d: 0x0001, 0x280e: 0x0001, 0x280f: 0x0001, 0x2810: 0x0001, 0x2811: 0x0001, - 0x2812: 0x0001, 0x2813: 0x0001, 0x2814: 0x0001, 0x2815: 0x0001, 0x2816: 0x0001, 0x2817: 0x0001, - 0x2818: 0x0001, 0x2819: 0x0001, 0x281a: 0x0001, 0x281b: 0x0001, 0x281c: 0x0001, 0x281d: 0x0001, - 0x281e: 0x0001, 0x281f: 0x0001, 0x2820: 0x0001, 0x2821: 0x0001, 0x2822: 0x0001, 0x2823: 0x0001, - 0x2824: 0x0001, 0x2825: 0x0001, 0x2826: 0x0001, 0x2827: 0x0001, 0x2828: 0x0001, 0x2829: 0x0001, - 0x282a: 0x0001, 0x282b: 0x0001, 0x282c: 0x0001, 0x282d: 0x0001, 0x282e: 0x0001, 0x282f: 0x0001, - 0x2830: 0x0001, 0x2831: 0x0001, 0x2832: 0x0001, 0x2833: 0x0001, 0x2834: 0x0001, 0x2835: 0x0001, - 0x2836: 0x0001, 0x2837: 0x0001, 0x2838: 0x0001, 0x2839: 0x000a, 0x283a: 0x000a, 0x283b: 0x000a, - 0x283c: 0x000a, 0x283d: 0x000a, 0x283e: 0x000a, 0x283f: 0x000a, - // Block 0xa1, offset 0x2840 - 0x2840: 0x0001, 0x2841: 0x0001, 0x2842: 0x0001, 0x2843: 0x0001, 0x2844: 0x0001, 0x2845: 0x0001, - 0x2846: 0x0001, 0x2847: 0x0001, 0x2848: 0x0001, 0x2849: 0x0001, 0x284a: 0x0001, 0x284b: 0x0001, - 0x284c: 0x0001, 0x284d: 0x0001, 0x284e: 0x0001, 0x284f: 0x0001, 0x2850: 0x0001, 0x2851: 0x0001, - 0x2852: 0x0001, 0x2853: 0x0001, 0x2854: 0x0001, 0x2855: 0x0001, 0x2856: 0x0001, 0x2857: 0x0001, - 0x2858: 0x0001, 0x2859: 0x0001, 0x285a: 0x0001, 0x285b: 0x0001, 0x285c: 0x0001, 0x285d: 0x0001, - 0x285e: 0x0001, 0x285f: 0x0001, 0x2860: 0x0005, 0x2861: 0x0005, 0x2862: 0x0005, 0x2863: 0x0005, - 0x2864: 0x0005, 0x2865: 0x0005, 0x2866: 0x0005, 0x2867: 0x0005, 0x2868: 0x0005, 0x2869: 0x0005, - 0x286a: 0x0005, 0x286b: 0x0005, 0x286c: 0x0005, 0x286d: 0x0005, 0x286e: 0x0005, 0x286f: 0x0005, - 0x2870: 0x0005, 0x2871: 0x0005, 0x2872: 0x0005, 0x2873: 0x0005, 0x2874: 0x0005, 0x2875: 0x0005, - 0x2876: 0x0005, 0x2877: 0x0005, 0x2878: 0x0005, 0x2879: 0x0005, 0x287a: 0x0005, 0x287b: 0x0005, - 0x287c: 0x0005, 0x287d: 0x0005, 0x287e: 0x0005, 0x287f: 0x0001, - // Block 0xa2, offset 0x2880 - 0x2881: 0x000c, - 0x28b8: 0x000c, 0x28b9: 0x000c, 0x28ba: 0x000c, 0x28bb: 0x000c, - 0x28bc: 0x000c, 0x28bd: 0x000c, 0x28be: 0x000c, 0x28bf: 0x000c, - // Block 0xa3, offset 0x28c0 - 0x28c0: 0x000c, 0x28c1: 0x000c, 0x28c2: 0x000c, 0x28c3: 0x000c, 0x28c4: 0x000c, 0x28c5: 0x000c, - 0x28c6: 0x000c, - 0x28d2: 0x000a, 0x28d3: 0x000a, 0x28d4: 0x000a, 0x28d5: 0x000a, 0x28d6: 0x000a, 0x28d7: 0x000a, - 0x28d8: 0x000a, 0x28d9: 0x000a, 0x28da: 0x000a, 0x28db: 0x000a, 0x28dc: 0x000a, 0x28dd: 0x000a, - 0x28de: 0x000a, 0x28df: 0x000a, 0x28e0: 0x000a, 0x28e1: 0x000a, 0x28e2: 0x000a, 0x28e3: 0x000a, - 0x28e4: 0x000a, 0x28e5: 0x000a, - 0x28ff: 0x000c, - // Block 0xa4, offset 0x2900 - 0x2900: 0x000c, 0x2901: 0x000c, - 0x2933: 0x000c, 0x2934: 0x000c, 0x2935: 0x000c, - 0x2936: 0x000c, 0x2939: 0x000c, 0x293a: 0x000c, - // Block 0xa5, offset 0x2940 - 0x2940: 0x000c, 0x2941: 0x000c, 0x2942: 0x000c, - 0x2967: 0x000c, 0x2968: 0x000c, 0x2969: 0x000c, - 0x296a: 0x000c, 0x296b: 0x000c, 0x296d: 0x000c, 0x296e: 0x000c, 0x296f: 0x000c, - 0x2970: 0x000c, 0x2971: 0x000c, 0x2972: 0x000c, 0x2973: 0x000c, 0x2974: 0x000c, - // Block 0xa6, offset 0x2980 - 0x29b3: 0x000c, - // Block 0xa7, offset 0x29c0 - 0x29c0: 0x000c, 0x29c1: 0x000c, - 0x29f6: 0x000c, 0x29f7: 0x000c, 0x29f8: 0x000c, 0x29f9: 0x000c, 0x29fa: 0x000c, 0x29fb: 0x000c, - 0x29fc: 0x000c, 0x29fd: 0x000c, 0x29fe: 0x000c, - // Block 0xa8, offset 0x2a00 - 0x2a0a: 0x000c, 0x2a0b: 0x000c, - 0x2a0c: 0x000c, - // Block 0xa9, offset 0x2a40 - 0x2a6f: 0x000c, - 0x2a70: 0x000c, 0x2a71: 0x000c, 0x2a74: 0x000c, - 0x2a76: 0x000c, 0x2a77: 0x000c, - 0x2a7e: 0x000c, - // Block 0xaa, offset 0x2a80 - 0x2a9f: 0x000c, 0x2aa3: 0x000c, - 0x2aa4: 0x000c, 0x2aa5: 0x000c, 0x2aa6: 0x000c, 0x2aa7: 0x000c, 0x2aa8: 0x000c, 0x2aa9: 0x000c, - 0x2aaa: 0x000c, - // Block 0xab, offset 0x2ac0 - 0x2ac0: 0x000c, 0x2ac1: 0x000c, - 0x2afc: 0x000c, - // Block 0xac, offset 0x2b00 - 0x2b00: 0x000c, - 0x2b26: 0x000c, 0x2b27: 0x000c, 0x2b28: 0x000c, 0x2b29: 0x000c, - 0x2b2a: 0x000c, 0x2b2b: 0x000c, 0x2b2c: 0x000c, - 0x2b30: 0x000c, 0x2b31: 0x000c, 0x2b32: 0x000c, 0x2b33: 0x000c, 0x2b34: 0x000c, - // Block 0xad, offset 0x2b40 - 0x2b78: 0x000c, 0x2b79: 0x000c, 0x2b7a: 0x000c, 0x2b7b: 0x000c, - 0x2b7c: 0x000c, 0x2b7d: 0x000c, 0x2b7e: 0x000c, 0x2b7f: 0x000c, - // Block 0xae, offset 0x2b80 - 0x2b82: 0x000c, 0x2b83: 0x000c, 0x2b84: 0x000c, - 0x2b86: 0x000c, - // Block 0xaf, offset 0x2bc0 - 0x2bf3: 0x000c, 0x2bf4: 0x000c, 0x2bf5: 0x000c, - 0x2bf6: 0x000c, 0x2bf7: 0x000c, 0x2bf8: 0x000c, 0x2bfa: 0x000c, - 0x2bff: 0x000c, - // Block 0xb0, offset 0x2c00 - 0x2c00: 0x000c, 0x2c02: 0x000c, 0x2c03: 0x000c, - // Block 0xb1, offset 0x2c40 - 0x2c72: 0x000c, 0x2c73: 0x000c, 0x2c74: 0x000c, 0x2c75: 0x000c, - 0x2c7c: 0x000c, 0x2c7d: 0x000c, 0x2c7f: 0x000c, - // Block 0xb2, offset 0x2c80 - 0x2c80: 0x000c, - 0x2c9c: 0x000c, 0x2c9d: 0x000c, - // Block 0xb3, offset 0x2cc0 - 0x2cf3: 0x000c, 0x2cf4: 0x000c, 0x2cf5: 0x000c, - 0x2cf6: 0x000c, 0x2cf7: 0x000c, 0x2cf8: 0x000c, 0x2cf9: 0x000c, 0x2cfa: 0x000c, - 0x2cfd: 0x000c, 0x2cff: 0x000c, - // Block 0xb4, offset 0x2d00 - 0x2d00: 0x000c, - 0x2d20: 0x000a, 0x2d21: 0x000a, 0x2d22: 0x000a, 0x2d23: 0x000a, - 0x2d24: 0x000a, 0x2d25: 0x000a, 0x2d26: 0x000a, 0x2d27: 0x000a, 0x2d28: 0x000a, 0x2d29: 0x000a, - 0x2d2a: 0x000a, 0x2d2b: 0x000a, 0x2d2c: 0x000a, - // Block 0xb5, offset 0x2d40 - 0x2d6b: 0x000c, 0x2d6d: 0x000c, - 0x2d70: 0x000c, 0x2d71: 0x000c, 0x2d72: 0x000c, 0x2d73: 0x000c, 0x2d74: 0x000c, 0x2d75: 0x000c, - 0x2d77: 0x000c, - // Block 0xb6, offset 0x2d80 - 0x2d9d: 0x000c, - 0x2d9e: 0x000c, 0x2d9f: 0x000c, 0x2da2: 0x000c, 0x2da3: 0x000c, - 0x2da4: 0x000c, 0x2da5: 0x000c, 0x2da7: 0x000c, 0x2da8: 0x000c, 0x2da9: 0x000c, - 0x2daa: 0x000c, 0x2dab: 0x000c, - // Block 0xb7, offset 0x2dc0 - 0x2dc1: 0x000c, 0x2dc2: 0x000c, 0x2dc3: 0x000c, 0x2dc4: 0x000c, 0x2dc5: 0x000c, - 0x2dc6: 0x000c, 0x2dc9: 0x000c, 0x2dca: 0x000c, - 0x2df3: 0x000c, 0x2df4: 0x000c, 0x2df5: 0x000c, - 0x2df6: 0x000c, 0x2df7: 0x000c, 0x2df8: 0x000c, 0x2dfb: 0x000c, - 0x2dfc: 0x000c, 0x2dfd: 0x000c, 0x2dfe: 0x000c, - // Block 0xb8, offset 0x2e00 - 0x2e07: 0x000c, - 0x2e11: 0x000c, - 0x2e12: 0x000c, 0x2e13: 0x000c, 0x2e14: 0x000c, 0x2e15: 0x000c, 0x2e16: 0x000c, - 0x2e19: 0x000c, 0x2e1a: 0x000c, 0x2e1b: 0x000c, - // Block 0xb9, offset 0x2e40 - 0x2e4a: 0x000c, 0x2e4b: 0x000c, - 0x2e4c: 0x000c, 0x2e4d: 0x000c, 0x2e4e: 0x000c, 0x2e4f: 0x000c, 0x2e50: 0x000c, 0x2e51: 0x000c, - 0x2e52: 0x000c, 0x2e53: 0x000c, 0x2e54: 0x000c, 0x2e55: 0x000c, 0x2e56: 0x000c, - 0x2e58: 0x000c, 0x2e59: 0x000c, - // Block 0xba, offset 0x2e80 - 0x2eb0: 0x000c, 0x2eb1: 0x000c, 0x2eb2: 0x000c, 0x2eb3: 0x000c, 0x2eb4: 0x000c, 0x2eb5: 0x000c, - 0x2eb6: 0x000c, 0x2eb8: 0x000c, 0x2eb9: 0x000c, 0x2eba: 0x000c, 0x2ebb: 0x000c, - 0x2ebc: 0x000c, 0x2ebd: 0x000c, - // Block 0xbb, offset 0x2ec0 - 0x2ed2: 0x000c, 0x2ed3: 0x000c, 0x2ed4: 0x000c, 0x2ed5: 0x000c, 0x2ed6: 0x000c, 0x2ed7: 0x000c, - 0x2ed8: 0x000c, 0x2ed9: 0x000c, 0x2eda: 0x000c, 0x2edb: 0x000c, 0x2edc: 0x000c, 0x2edd: 0x000c, - 0x2ede: 0x000c, 0x2edf: 0x000c, 0x2ee0: 0x000c, 0x2ee1: 0x000c, 0x2ee2: 0x000c, 0x2ee3: 0x000c, - 0x2ee4: 0x000c, 0x2ee5: 0x000c, 0x2ee6: 0x000c, 0x2ee7: 0x000c, - 0x2eea: 0x000c, 0x2eeb: 0x000c, 0x2eec: 0x000c, 0x2eed: 0x000c, 0x2eee: 0x000c, 0x2eef: 0x000c, - 0x2ef0: 0x000c, 0x2ef2: 0x000c, 0x2ef3: 0x000c, 0x2ef5: 0x000c, - 0x2ef6: 0x000c, - // Block 0xbc, offset 0x2f00 - 0x2f31: 0x000c, 0x2f32: 0x000c, 0x2f33: 0x000c, 0x2f34: 0x000c, 0x2f35: 0x000c, - 0x2f36: 0x000c, 0x2f3a: 0x000c, - 0x2f3c: 0x000c, 0x2f3d: 0x000c, 0x2f3f: 0x000c, - // Block 0xbd, offset 0x2f40 - 0x2f40: 0x000c, 0x2f41: 0x000c, 0x2f42: 0x000c, 0x2f43: 0x000c, 0x2f44: 0x000c, 0x2f45: 0x000c, - 0x2f47: 0x000c, - // Block 0xbe, offset 0x2f80 - 0x2fb0: 0x000c, 0x2fb1: 0x000c, 0x2fb2: 0x000c, 0x2fb3: 0x000c, 0x2fb4: 0x000c, - // Block 0xbf, offset 0x2fc0 - 0x2ff0: 0x000c, 0x2ff1: 0x000c, 0x2ff2: 0x000c, 0x2ff3: 0x000c, 0x2ff4: 0x000c, 0x2ff5: 0x000c, - 0x2ff6: 0x000c, - // Block 0xc0, offset 0x3000 - 0x300f: 0x000c, 0x3010: 0x000c, 0x3011: 0x000c, - 0x3012: 0x000c, - // Block 0xc1, offset 0x3040 - 0x305d: 0x000c, - 0x305e: 0x000c, 0x3060: 0x000b, 0x3061: 0x000b, 0x3062: 0x000b, 0x3063: 0x000b, - // Block 0xc2, offset 0x3080 - 0x30a7: 0x000c, 0x30a8: 0x000c, 0x30a9: 0x000c, - 0x30b3: 0x000b, 0x30b4: 0x000b, 0x30b5: 0x000b, - 0x30b6: 0x000b, 0x30b7: 0x000b, 0x30b8: 0x000b, 0x30b9: 0x000b, 0x30ba: 0x000b, 0x30bb: 0x000c, - 0x30bc: 0x000c, 0x30bd: 0x000c, 0x30be: 0x000c, 0x30bf: 0x000c, - // Block 0xc3, offset 0x30c0 - 0x30c0: 0x000c, 0x30c1: 0x000c, 0x30c2: 0x000c, 0x30c5: 0x000c, - 0x30c6: 0x000c, 0x30c7: 0x000c, 0x30c8: 0x000c, 0x30c9: 0x000c, 0x30ca: 0x000c, 0x30cb: 0x000c, - 0x30ea: 0x000c, 0x30eb: 0x000c, 0x30ec: 0x000c, 0x30ed: 0x000c, - // Block 0xc4, offset 0x3100 - 0x3100: 0x000a, 0x3101: 0x000a, 0x3102: 0x000c, 0x3103: 0x000c, 0x3104: 0x000c, 0x3105: 0x000a, - // Block 0xc5, offset 0x3140 - 0x3140: 0x000a, 0x3141: 0x000a, 0x3142: 0x000a, 0x3143: 0x000a, 0x3144: 0x000a, 0x3145: 0x000a, - 0x3146: 0x000a, 0x3147: 0x000a, 0x3148: 0x000a, 0x3149: 0x000a, 0x314a: 0x000a, 0x314b: 0x000a, - 0x314c: 0x000a, 0x314d: 0x000a, 0x314e: 0x000a, 0x314f: 0x000a, 0x3150: 0x000a, 0x3151: 0x000a, - 0x3152: 0x000a, 0x3153: 0x000a, 0x3154: 0x000a, 0x3155: 0x000a, 0x3156: 0x000a, - // Block 0xc6, offset 0x3180 - 0x319b: 0x000a, - // Block 0xc7, offset 0x31c0 - 0x31d5: 0x000a, - // Block 0xc8, offset 0x3200 - 0x320f: 0x000a, - // Block 0xc9, offset 0x3240 - 0x3249: 0x000a, - // Block 0xca, offset 0x3280 - 0x3283: 0x000a, - 0x328e: 0x0002, 0x328f: 0x0002, 0x3290: 0x0002, 0x3291: 0x0002, - 0x3292: 0x0002, 0x3293: 0x0002, 0x3294: 0x0002, 0x3295: 0x0002, 0x3296: 0x0002, 0x3297: 0x0002, - 0x3298: 0x0002, 0x3299: 0x0002, 0x329a: 0x0002, 0x329b: 0x0002, 0x329c: 0x0002, 0x329d: 0x0002, - 0x329e: 0x0002, 0x329f: 0x0002, 0x32a0: 0x0002, 0x32a1: 0x0002, 0x32a2: 0x0002, 0x32a3: 0x0002, - 0x32a4: 0x0002, 0x32a5: 0x0002, 0x32a6: 0x0002, 0x32a7: 0x0002, 0x32a8: 0x0002, 0x32a9: 0x0002, - 0x32aa: 0x0002, 0x32ab: 0x0002, 0x32ac: 0x0002, 0x32ad: 0x0002, 0x32ae: 0x0002, 0x32af: 0x0002, - 0x32b0: 0x0002, 0x32b1: 0x0002, 0x32b2: 0x0002, 0x32b3: 0x0002, 0x32b4: 0x0002, 0x32b5: 0x0002, - 0x32b6: 0x0002, 0x32b7: 0x0002, 0x32b8: 0x0002, 0x32b9: 0x0002, 0x32ba: 0x0002, 0x32bb: 0x0002, - 0x32bc: 0x0002, 0x32bd: 0x0002, 0x32be: 0x0002, 0x32bf: 0x0002, - // Block 0xcb, offset 0x32c0 - 0x32c0: 0x000c, 0x32c1: 0x000c, 0x32c2: 0x000c, 0x32c3: 0x000c, 0x32c4: 0x000c, 0x32c5: 0x000c, - 0x32c6: 0x000c, 0x32c7: 0x000c, 0x32c8: 0x000c, 0x32c9: 0x000c, 0x32ca: 0x000c, 0x32cb: 0x000c, - 0x32cc: 0x000c, 0x32cd: 0x000c, 0x32ce: 0x000c, 0x32cf: 0x000c, 0x32d0: 0x000c, 0x32d1: 0x000c, - 0x32d2: 0x000c, 0x32d3: 0x000c, 0x32d4: 0x000c, 0x32d5: 0x000c, 0x32d6: 0x000c, 0x32d7: 0x000c, - 0x32d8: 0x000c, 0x32d9: 0x000c, 0x32da: 0x000c, 0x32db: 0x000c, 0x32dc: 0x000c, 0x32dd: 0x000c, - 0x32de: 0x000c, 0x32df: 0x000c, 0x32e0: 0x000c, 0x32e1: 0x000c, 0x32e2: 0x000c, 0x32e3: 0x000c, - 0x32e4: 0x000c, 0x32e5: 0x000c, 0x32e6: 0x000c, 0x32e7: 0x000c, 0x32e8: 0x000c, 0x32e9: 0x000c, - 0x32ea: 0x000c, 0x32eb: 0x000c, 0x32ec: 0x000c, 0x32ed: 0x000c, 0x32ee: 0x000c, 0x32ef: 0x000c, - 0x32f0: 0x000c, 0x32f1: 0x000c, 0x32f2: 0x000c, 0x32f3: 0x000c, 0x32f4: 0x000c, 0x32f5: 0x000c, - 0x32f6: 0x000c, 0x32fb: 0x000c, - 0x32fc: 0x000c, 0x32fd: 0x000c, 0x32fe: 0x000c, 0x32ff: 0x000c, - // Block 0xcc, offset 0x3300 - 0x3300: 0x000c, 0x3301: 0x000c, 0x3302: 0x000c, 0x3303: 0x000c, 0x3304: 0x000c, 0x3305: 0x000c, - 0x3306: 0x000c, 0x3307: 0x000c, 0x3308: 0x000c, 0x3309: 0x000c, 0x330a: 0x000c, 0x330b: 0x000c, - 0x330c: 0x000c, 0x330d: 0x000c, 0x330e: 0x000c, 0x330f: 0x000c, 0x3310: 0x000c, 0x3311: 0x000c, - 0x3312: 0x000c, 0x3313: 0x000c, 0x3314: 0x000c, 0x3315: 0x000c, 0x3316: 0x000c, 0x3317: 0x000c, - 0x3318: 0x000c, 0x3319: 0x000c, 0x331a: 0x000c, 0x331b: 0x000c, 0x331c: 0x000c, 0x331d: 0x000c, - 0x331e: 0x000c, 0x331f: 0x000c, 0x3320: 0x000c, 0x3321: 0x000c, 0x3322: 0x000c, 0x3323: 0x000c, - 0x3324: 0x000c, 0x3325: 0x000c, 0x3326: 0x000c, 0x3327: 0x000c, 0x3328: 0x000c, 0x3329: 0x000c, - 0x332a: 0x000c, 0x332b: 0x000c, 0x332c: 0x000c, - 0x3335: 0x000c, - // Block 0xcd, offset 0x3340 - 0x3344: 0x000c, - 0x335b: 0x000c, 0x335c: 0x000c, 0x335d: 0x000c, - 0x335e: 0x000c, 0x335f: 0x000c, 0x3361: 0x000c, 0x3362: 0x000c, 0x3363: 0x000c, - 0x3364: 0x000c, 0x3365: 0x000c, 0x3366: 0x000c, 0x3367: 0x000c, 0x3368: 0x000c, 0x3369: 0x000c, - 0x336a: 0x000c, 0x336b: 0x000c, 0x336c: 0x000c, 0x336d: 0x000c, 0x336e: 0x000c, 0x336f: 0x000c, - // Block 0xce, offset 0x3380 - 0x3380: 0x000c, 0x3381: 0x000c, 0x3382: 0x000c, 0x3383: 0x000c, 0x3384: 0x000c, 0x3385: 0x000c, - 0x3386: 0x000c, 0x3388: 0x000c, 0x3389: 0x000c, 0x338a: 0x000c, 0x338b: 0x000c, - 0x338c: 0x000c, 0x338d: 0x000c, 0x338e: 0x000c, 0x338f: 0x000c, 0x3390: 0x000c, 0x3391: 0x000c, - 0x3392: 0x000c, 0x3393: 0x000c, 0x3394: 0x000c, 0x3395: 0x000c, 0x3396: 0x000c, 0x3397: 0x000c, - 0x3398: 0x000c, 0x339b: 0x000c, 0x339c: 0x000c, 0x339d: 0x000c, - 0x339e: 0x000c, 0x339f: 0x000c, 0x33a0: 0x000c, 0x33a1: 0x000c, 0x33a3: 0x000c, - 0x33a4: 0x000c, 0x33a6: 0x000c, 0x33a7: 0x000c, 0x33a8: 0x000c, 0x33a9: 0x000c, - 0x33aa: 0x000c, - // Block 0xcf, offset 0x33c0 - 0x33c0: 0x0001, 0x33c1: 0x0001, 0x33c2: 0x0001, 0x33c3: 0x0001, 0x33c4: 0x0001, 0x33c5: 0x0001, - 0x33c6: 0x0001, 0x33c7: 0x0001, 0x33c8: 0x0001, 0x33c9: 0x0001, 0x33ca: 0x0001, 0x33cb: 0x0001, - 0x33cc: 0x0001, 0x33cd: 0x0001, 0x33ce: 0x0001, 0x33cf: 0x0001, 0x33d0: 0x000c, 0x33d1: 0x000c, - 0x33d2: 0x000c, 0x33d3: 0x000c, 0x33d4: 0x000c, 0x33d5: 0x000c, 0x33d6: 0x000c, 0x33d7: 0x0001, - 0x33d8: 0x0001, 0x33d9: 0x0001, 0x33da: 0x0001, 0x33db: 0x0001, 0x33dc: 0x0001, 0x33dd: 0x0001, - 0x33de: 0x0001, 0x33df: 0x0001, 0x33e0: 0x0001, 0x33e1: 0x0001, 0x33e2: 0x0001, 0x33e3: 0x0001, - 0x33e4: 0x0001, 0x33e5: 0x0001, 0x33e6: 0x0001, 0x33e7: 0x0001, 0x33e8: 0x0001, 0x33e9: 0x0001, - 0x33ea: 0x0001, 0x33eb: 0x0001, 0x33ec: 0x0001, 0x33ed: 0x0001, 0x33ee: 0x0001, 0x33ef: 0x0001, - 0x33f0: 0x0001, 0x33f1: 0x0001, 0x33f2: 0x0001, 0x33f3: 0x0001, 0x33f4: 0x0001, 0x33f5: 0x0001, - 0x33f6: 0x0001, 0x33f7: 0x0001, 0x33f8: 0x0001, 0x33f9: 0x0001, 0x33fa: 0x0001, 0x33fb: 0x0001, - 0x33fc: 0x0001, 0x33fd: 0x0001, 0x33fe: 0x0001, 0x33ff: 0x0001, - // Block 0xd0, offset 0x3400 - 0x3400: 0x0001, 0x3401: 0x0001, 0x3402: 0x0001, 0x3403: 0x0001, 0x3404: 0x000c, 0x3405: 0x000c, - 0x3406: 0x000c, 0x3407: 0x000c, 0x3408: 0x000c, 0x3409: 0x000c, 0x340a: 0x000c, 0x340b: 0x0001, - 0x340c: 0x0001, 0x340d: 0x0001, 0x340e: 0x0001, 0x340f: 0x0001, 0x3410: 0x0001, 0x3411: 0x0001, - 0x3412: 0x0001, 0x3413: 0x0001, 0x3414: 0x0001, 0x3415: 0x0001, 0x3416: 0x0001, 0x3417: 0x0001, - 0x3418: 0x0001, 0x3419: 0x0001, 0x341a: 0x0001, 0x341b: 0x0001, 0x341c: 0x0001, 0x341d: 0x0001, - 0x341e: 0x0001, 0x341f: 0x0001, 0x3420: 0x0001, 0x3421: 0x0001, 0x3422: 0x0001, 0x3423: 0x0001, - 0x3424: 0x0001, 0x3425: 0x0001, 0x3426: 0x0001, 0x3427: 0x0001, 0x3428: 0x0001, 0x3429: 0x0001, - 0x342a: 0x0001, 0x342b: 0x0001, 0x342c: 0x0001, 0x342d: 0x0001, 0x342e: 0x0001, 0x342f: 0x0001, - 0x3430: 0x0001, 0x3431: 0x0001, 0x3432: 0x0001, 0x3433: 0x0001, 0x3434: 0x0001, 0x3435: 0x0001, - 0x3436: 0x0001, 0x3437: 0x0001, 0x3438: 0x0001, 0x3439: 0x0001, 0x343a: 0x0001, 0x343b: 0x0001, - 0x343c: 0x0001, 0x343d: 0x0001, 0x343e: 0x0001, 0x343f: 0x0001, - // Block 0xd1, offset 0x3440 - 0x3440: 0x000d, 0x3441: 0x000d, 0x3442: 0x000d, 0x3443: 0x000d, 0x3444: 0x000d, 0x3445: 0x000d, - 0x3446: 0x000d, 0x3447: 0x000d, 0x3448: 0x000d, 0x3449: 0x000d, 0x344a: 0x000d, 0x344b: 0x000d, - 0x344c: 0x000d, 0x344d: 0x000d, 0x344e: 0x000d, 0x344f: 0x000d, 0x3450: 0x000d, 0x3451: 0x000d, - 0x3452: 0x000d, 0x3453: 0x000d, 0x3454: 0x000d, 0x3455: 0x000d, 0x3456: 0x000d, 0x3457: 0x000d, - 0x3458: 0x000d, 0x3459: 0x000d, 0x345a: 0x000d, 0x345b: 0x000d, 0x345c: 0x000d, 0x345d: 0x000d, - 0x345e: 0x000d, 0x345f: 0x000d, 0x3460: 0x000d, 0x3461: 0x000d, 0x3462: 0x000d, 0x3463: 0x000d, - 0x3464: 0x000d, 0x3465: 0x000d, 0x3466: 0x000d, 0x3467: 0x000d, 0x3468: 0x000d, 0x3469: 0x000d, - 0x346a: 0x000d, 0x346b: 0x000d, 0x346c: 0x000d, 0x346d: 0x000d, 0x346e: 0x000d, 0x346f: 0x000d, - 0x3470: 0x000a, 0x3471: 0x000a, 0x3472: 0x000d, 0x3473: 0x000d, 0x3474: 0x000d, 0x3475: 0x000d, - 0x3476: 0x000d, 0x3477: 0x000d, 0x3478: 0x000d, 0x3479: 0x000d, 0x347a: 0x000d, 0x347b: 0x000d, - 0x347c: 0x000d, 0x347d: 0x000d, 0x347e: 0x000d, 0x347f: 0x000d, - // Block 0xd2, offset 0x3480 - 0x3480: 0x000a, 0x3481: 0x000a, 0x3482: 0x000a, 0x3483: 0x000a, 0x3484: 0x000a, 0x3485: 0x000a, - 0x3486: 0x000a, 0x3487: 0x000a, 0x3488: 0x000a, 0x3489: 0x000a, 0x348a: 0x000a, 0x348b: 0x000a, - 0x348c: 0x000a, 0x348d: 0x000a, 0x348e: 0x000a, 0x348f: 0x000a, 0x3490: 0x000a, 0x3491: 0x000a, - 0x3492: 0x000a, 0x3493: 0x000a, 0x3494: 0x000a, 0x3495: 0x000a, 0x3496: 0x000a, 0x3497: 0x000a, - 0x3498: 0x000a, 0x3499: 0x000a, 0x349a: 0x000a, 0x349b: 0x000a, 0x349c: 0x000a, 0x349d: 0x000a, - 0x349e: 0x000a, 0x349f: 0x000a, 0x34a0: 0x000a, 0x34a1: 0x000a, 0x34a2: 0x000a, 0x34a3: 0x000a, - 0x34a4: 0x000a, 0x34a5: 0x000a, 0x34a6: 0x000a, 0x34a7: 0x000a, 0x34a8: 0x000a, 0x34a9: 0x000a, - 0x34aa: 0x000a, 0x34ab: 0x000a, - 0x34b0: 0x000a, 0x34b1: 0x000a, 0x34b2: 0x000a, 0x34b3: 0x000a, 0x34b4: 0x000a, 0x34b5: 0x000a, - 0x34b6: 0x000a, 0x34b7: 0x000a, 0x34b8: 0x000a, 0x34b9: 0x000a, 0x34ba: 0x000a, 0x34bb: 0x000a, - 0x34bc: 0x000a, 0x34bd: 0x000a, 0x34be: 0x000a, 0x34bf: 0x000a, - // Block 0xd3, offset 0x34c0 - 0x34c0: 0x000a, 0x34c1: 0x000a, 0x34c2: 0x000a, 0x34c3: 0x000a, 0x34c4: 0x000a, 0x34c5: 0x000a, - 0x34c6: 0x000a, 0x34c7: 0x000a, 0x34c8: 0x000a, 0x34c9: 0x000a, 0x34ca: 0x000a, 0x34cb: 0x000a, - 0x34cc: 0x000a, 0x34cd: 0x000a, 0x34ce: 0x000a, 0x34cf: 0x000a, 0x34d0: 0x000a, 0x34d1: 0x000a, - 0x34d2: 0x000a, 0x34d3: 0x000a, - 0x34e0: 0x000a, 0x34e1: 0x000a, 0x34e2: 0x000a, 0x34e3: 0x000a, - 0x34e4: 0x000a, 0x34e5: 0x000a, 0x34e6: 0x000a, 0x34e7: 0x000a, 0x34e8: 0x000a, 0x34e9: 0x000a, - 0x34ea: 0x000a, 0x34eb: 0x000a, 0x34ec: 0x000a, 0x34ed: 0x000a, 0x34ee: 0x000a, - 0x34f1: 0x000a, 0x34f2: 0x000a, 0x34f3: 0x000a, 0x34f4: 0x000a, 0x34f5: 0x000a, - 0x34f6: 0x000a, 0x34f7: 0x000a, 0x34f8: 0x000a, 0x34f9: 0x000a, 0x34fa: 0x000a, 0x34fb: 0x000a, - 0x34fc: 0x000a, 0x34fd: 0x000a, 0x34fe: 0x000a, 0x34ff: 0x000a, - // Block 0xd4, offset 0x3500 - 0x3501: 0x000a, 0x3502: 0x000a, 0x3503: 0x000a, 0x3504: 0x000a, 0x3505: 0x000a, - 0x3506: 0x000a, 0x3507: 0x000a, 0x3508: 0x000a, 0x3509: 0x000a, 0x350a: 0x000a, 0x350b: 0x000a, - 0x350c: 0x000a, 0x350d: 0x000a, 0x350e: 0x000a, 0x350f: 0x000a, 0x3511: 0x000a, - 0x3512: 0x000a, 0x3513: 0x000a, 0x3514: 0x000a, 0x3515: 0x000a, 0x3516: 0x000a, 0x3517: 0x000a, - 0x3518: 0x000a, 0x3519: 0x000a, 0x351a: 0x000a, 0x351b: 0x000a, 0x351c: 0x000a, 0x351d: 0x000a, - 0x351e: 0x000a, 0x351f: 0x000a, 0x3520: 0x000a, 0x3521: 0x000a, 0x3522: 0x000a, 0x3523: 0x000a, - 0x3524: 0x000a, 0x3525: 0x000a, 0x3526: 0x000a, 0x3527: 0x000a, 0x3528: 0x000a, 0x3529: 0x000a, - 0x352a: 0x000a, 0x352b: 0x000a, 0x352c: 0x000a, 0x352d: 0x000a, 0x352e: 0x000a, 0x352f: 0x000a, - 0x3530: 0x000a, 0x3531: 0x000a, 0x3532: 0x000a, 0x3533: 0x000a, 0x3534: 0x000a, 0x3535: 0x000a, - // Block 0xd5, offset 0x3540 - 0x3540: 0x0002, 0x3541: 0x0002, 0x3542: 0x0002, 0x3543: 0x0002, 0x3544: 0x0002, 0x3545: 0x0002, - 0x3546: 0x0002, 0x3547: 0x0002, 0x3548: 0x0002, 0x3549: 0x0002, 0x354a: 0x0002, 0x354b: 0x000a, - 0x354c: 0x000a, - // Block 0xd6, offset 0x3580 - 0x35aa: 0x000a, 0x35ab: 0x000a, - // Block 0xd7, offset 0x35c0 - 0x35e0: 0x000a, 0x35e1: 0x000a, 0x35e2: 0x000a, 0x35e3: 0x000a, - 0x35e4: 0x000a, 0x35e5: 0x000a, - // Block 0xd8, offset 0x3600 - 0x3600: 0x000a, 0x3601: 0x000a, 0x3602: 0x000a, 0x3603: 0x000a, 0x3604: 0x000a, 0x3605: 0x000a, - 0x3606: 0x000a, 0x3607: 0x000a, 0x3608: 0x000a, 0x3609: 0x000a, 0x360a: 0x000a, 0x360b: 0x000a, - 0x360c: 0x000a, 0x360d: 0x000a, 0x360e: 0x000a, 0x360f: 0x000a, 0x3610: 0x000a, 0x3611: 0x000a, - 0x3612: 0x000a, 0x3613: 0x000a, 0x3614: 0x000a, - 0x3620: 0x000a, 0x3621: 0x000a, 0x3622: 0x000a, 0x3623: 0x000a, - 0x3624: 0x000a, 0x3625: 0x000a, 0x3626: 0x000a, 0x3627: 0x000a, 0x3628: 0x000a, 0x3629: 0x000a, - 0x362a: 0x000a, 0x362b: 0x000a, 0x362c: 0x000a, - 0x3630: 0x000a, 0x3631: 0x000a, 0x3632: 0x000a, 0x3633: 0x000a, 0x3634: 0x000a, 0x3635: 0x000a, - 0x3636: 0x000a, 0x3637: 0x000a, 0x3638: 0x000a, - // Block 0xd9, offset 0x3640 - 0x3640: 0x000a, 0x3641: 0x000a, 0x3642: 0x000a, 0x3643: 0x000a, 0x3644: 0x000a, 0x3645: 0x000a, - 0x3646: 0x000a, 0x3647: 0x000a, 0x3648: 0x000a, 0x3649: 0x000a, 0x364a: 0x000a, 0x364b: 0x000a, - 0x364c: 0x000a, 0x364d: 0x000a, 0x364e: 0x000a, 0x364f: 0x000a, 0x3650: 0x000a, 0x3651: 0x000a, - 0x3652: 0x000a, 0x3653: 0x000a, 0x3654: 0x000a, - // Block 0xda, offset 0x3680 - 0x3680: 0x000a, 0x3681: 0x000a, 0x3682: 0x000a, 0x3683: 0x000a, 0x3684: 0x000a, 0x3685: 0x000a, - 0x3686: 0x000a, 0x3687: 0x000a, 0x3688: 0x000a, 0x3689: 0x000a, 0x368a: 0x000a, 0x368b: 0x000a, - 0x3690: 0x000a, 0x3691: 0x000a, - 0x3692: 0x000a, 0x3693: 0x000a, 0x3694: 0x000a, 0x3695: 0x000a, 0x3696: 0x000a, 0x3697: 0x000a, - 0x3698: 0x000a, 0x3699: 0x000a, 0x369a: 0x000a, 0x369b: 0x000a, 0x369c: 0x000a, 0x369d: 0x000a, - 0x369e: 0x000a, 0x369f: 0x000a, 0x36a0: 0x000a, 0x36a1: 0x000a, 0x36a2: 0x000a, 0x36a3: 0x000a, - 0x36a4: 0x000a, 0x36a5: 0x000a, 0x36a6: 0x000a, 0x36a7: 0x000a, 0x36a8: 0x000a, 0x36a9: 0x000a, - 0x36aa: 0x000a, 0x36ab: 0x000a, 0x36ac: 0x000a, 0x36ad: 0x000a, 0x36ae: 0x000a, 0x36af: 0x000a, - 0x36b0: 0x000a, 0x36b1: 0x000a, 0x36b2: 0x000a, 0x36b3: 0x000a, 0x36b4: 0x000a, 0x36b5: 0x000a, - 0x36b6: 0x000a, 0x36b7: 0x000a, 0x36b8: 0x000a, 0x36b9: 0x000a, 0x36ba: 0x000a, 0x36bb: 0x000a, - 0x36bc: 0x000a, 0x36bd: 0x000a, 0x36be: 0x000a, 0x36bf: 0x000a, - // Block 0xdb, offset 0x36c0 - 0x36c0: 0x000a, 0x36c1: 0x000a, 0x36c2: 0x000a, 0x36c3: 0x000a, 0x36c4: 0x000a, 0x36c5: 0x000a, - 0x36c6: 0x000a, 0x36c7: 0x000a, - 0x36d0: 0x000a, 0x36d1: 0x000a, - 0x36d2: 0x000a, 0x36d3: 0x000a, 0x36d4: 0x000a, 0x36d5: 0x000a, 0x36d6: 0x000a, 0x36d7: 0x000a, - 0x36d8: 0x000a, 0x36d9: 0x000a, - 0x36e0: 0x000a, 0x36e1: 0x000a, 0x36e2: 0x000a, 0x36e3: 0x000a, - 0x36e4: 0x000a, 0x36e5: 0x000a, 0x36e6: 0x000a, 0x36e7: 0x000a, 0x36e8: 0x000a, 0x36e9: 0x000a, - 0x36ea: 0x000a, 0x36eb: 0x000a, 0x36ec: 0x000a, 0x36ed: 0x000a, 0x36ee: 0x000a, 0x36ef: 0x000a, - 0x36f0: 0x000a, 0x36f1: 0x000a, 0x36f2: 0x000a, 0x36f3: 0x000a, 0x36f4: 0x000a, 0x36f5: 0x000a, - 0x36f6: 0x000a, 0x36f7: 0x000a, 0x36f8: 0x000a, 0x36f9: 0x000a, 0x36fa: 0x000a, 0x36fb: 0x000a, - 0x36fc: 0x000a, 0x36fd: 0x000a, 0x36fe: 0x000a, 0x36ff: 0x000a, - // Block 0xdc, offset 0x3700 - 0x3700: 0x000a, 0x3701: 0x000a, 0x3702: 0x000a, 0x3703: 0x000a, 0x3704: 0x000a, 0x3705: 0x000a, - 0x3706: 0x000a, 0x3707: 0x000a, - 0x3710: 0x000a, 0x3711: 0x000a, - 0x3712: 0x000a, 0x3713: 0x000a, 0x3714: 0x000a, 0x3715: 0x000a, 0x3716: 0x000a, 0x3717: 0x000a, - 0x3718: 0x000a, 0x3719: 0x000a, 0x371a: 0x000a, 0x371b: 0x000a, 0x371c: 0x000a, 0x371d: 0x000a, - 0x371e: 0x000a, 0x371f: 0x000a, 0x3720: 0x000a, 0x3721: 0x000a, 0x3722: 0x000a, 0x3723: 0x000a, - 0x3724: 0x000a, 0x3725: 0x000a, 0x3726: 0x000a, 0x3727: 0x000a, 0x3728: 0x000a, 0x3729: 0x000a, - 0x372a: 0x000a, 0x372b: 0x000a, 0x372c: 0x000a, 0x372d: 0x000a, - // Block 0xdd, offset 0x3740 - 0x3740: 0x000a, 0x3741: 0x000a, 0x3742: 0x000a, 0x3743: 0x000a, 0x3744: 0x000a, 0x3745: 0x000a, - 0x3746: 0x000a, 0x3747: 0x000a, 0x3748: 0x000a, 0x3749: 0x000a, 0x374a: 0x000a, 0x374b: 0x000a, - 0x3750: 0x000a, 0x3751: 0x000a, - 0x3752: 0x000a, 0x3753: 0x000a, 0x3754: 0x000a, 0x3755: 0x000a, 0x3756: 0x000a, 0x3757: 0x000a, - 0x3758: 0x000a, 0x3759: 0x000a, 0x375a: 0x000a, 0x375b: 0x000a, 0x375c: 0x000a, 0x375d: 0x000a, - 0x375e: 0x000a, 0x375f: 0x000a, 0x3760: 0x000a, 0x3761: 0x000a, 0x3762: 0x000a, 0x3763: 0x000a, - 0x3764: 0x000a, 0x3765: 0x000a, 0x3766: 0x000a, 0x3767: 0x000a, 0x3768: 0x000a, 0x3769: 0x000a, - 0x376a: 0x000a, 0x376b: 0x000a, 0x376c: 0x000a, 0x376d: 0x000a, 0x376e: 0x000a, 0x376f: 0x000a, - 0x3770: 0x000a, 0x3771: 0x000a, 0x3772: 0x000a, 0x3773: 0x000a, 0x3774: 0x000a, 0x3775: 0x000a, - 0x3776: 0x000a, 0x3777: 0x000a, 0x3778: 0x000a, 0x3779: 0x000a, 0x377a: 0x000a, 0x377b: 0x000a, - 0x377c: 0x000a, 0x377d: 0x000a, 0x377e: 0x000a, - // Block 0xde, offset 0x3780 - 0x3780: 0x000a, 0x3781: 0x000a, 0x3782: 0x000a, 0x3783: 0x000a, 0x3784: 0x000a, 0x3785: 0x000a, - 0x3786: 0x000a, 0x3787: 0x000a, 0x3788: 0x000a, 0x3789: 0x000a, 0x378a: 0x000a, 0x378b: 0x000a, - 0x378c: 0x000a, 0x3790: 0x000a, 0x3791: 0x000a, - 0x3792: 0x000a, 0x3793: 0x000a, 0x3794: 0x000a, 0x3795: 0x000a, 0x3796: 0x000a, 0x3797: 0x000a, - 0x3798: 0x000a, 0x3799: 0x000a, 0x379a: 0x000a, 0x379b: 0x000a, 0x379c: 0x000a, 0x379d: 0x000a, - 0x379e: 0x000a, 0x379f: 0x000a, 0x37a0: 0x000a, 0x37a1: 0x000a, 0x37a2: 0x000a, 0x37a3: 0x000a, - 0x37a4: 0x000a, 0x37a5: 0x000a, 0x37a6: 0x000a, 0x37a7: 0x000a, 0x37a8: 0x000a, 0x37a9: 0x000a, - 0x37aa: 0x000a, 0x37ab: 0x000a, - // Block 0xdf, offset 0x37c0 - 0x37c0: 0x000a, 0x37c1: 0x000a, 0x37c2: 0x000a, 0x37c3: 0x000a, 0x37c4: 0x000a, 0x37c5: 0x000a, - 0x37c6: 0x000a, 0x37c7: 0x000a, 0x37c8: 0x000a, 0x37c9: 0x000a, 0x37ca: 0x000a, 0x37cb: 0x000a, - 0x37cc: 0x000a, 0x37cd: 0x000a, 0x37ce: 0x000a, 0x37cf: 0x000a, 0x37d0: 0x000a, 0x37d1: 0x000a, - 0x37d2: 0x000a, 0x37d3: 0x000a, 0x37d4: 0x000a, 0x37d5: 0x000a, 0x37d6: 0x000a, 0x37d7: 0x000a, - // Block 0xe0, offset 0x3800 - 0x3800: 0x000a, - 0x3810: 0x000a, 0x3811: 0x000a, - 0x3812: 0x000a, 0x3813: 0x000a, 0x3814: 0x000a, 0x3815: 0x000a, 0x3816: 0x000a, 0x3817: 0x000a, - 0x3818: 0x000a, 0x3819: 0x000a, 0x381a: 0x000a, 0x381b: 0x000a, 0x381c: 0x000a, 0x381d: 0x000a, - 0x381e: 0x000a, 0x381f: 0x000a, 0x3820: 0x000a, 0x3821: 0x000a, 0x3822: 0x000a, 0x3823: 0x000a, - 0x3824: 0x000a, 0x3825: 0x000a, 0x3826: 0x000a, - // Block 0xe1, offset 0x3840 - 0x387e: 0x000b, 0x387f: 0x000b, - // Block 0xe2, offset 0x3880 - 0x3880: 0x000b, 0x3881: 0x000b, 0x3882: 0x000b, 0x3883: 0x000b, 0x3884: 0x000b, 0x3885: 0x000b, - 0x3886: 0x000b, 0x3887: 0x000b, 0x3888: 0x000b, 0x3889: 0x000b, 0x388a: 0x000b, 0x388b: 0x000b, - 0x388c: 0x000b, 0x388d: 0x000b, 0x388e: 0x000b, 0x388f: 0x000b, 0x3890: 0x000b, 0x3891: 0x000b, - 0x3892: 0x000b, 0x3893: 0x000b, 0x3894: 0x000b, 0x3895: 0x000b, 0x3896: 0x000b, 0x3897: 0x000b, - 0x3898: 0x000b, 0x3899: 0x000b, 0x389a: 0x000b, 0x389b: 0x000b, 0x389c: 0x000b, 0x389d: 0x000b, - 0x389e: 0x000b, 0x389f: 0x000b, 0x38a0: 0x000b, 0x38a1: 0x000b, 0x38a2: 0x000b, 0x38a3: 0x000b, - 0x38a4: 0x000b, 0x38a5: 0x000b, 0x38a6: 0x000b, 0x38a7: 0x000b, 0x38a8: 0x000b, 0x38a9: 0x000b, - 0x38aa: 0x000b, 0x38ab: 0x000b, 0x38ac: 0x000b, 0x38ad: 0x000b, 0x38ae: 0x000b, 0x38af: 0x000b, - 0x38b0: 0x000b, 0x38b1: 0x000b, 0x38b2: 0x000b, 0x38b3: 0x000b, 0x38b4: 0x000b, 0x38b5: 0x000b, - 0x38b6: 0x000b, 0x38b7: 0x000b, 0x38b8: 0x000b, 0x38b9: 0x000b, 0x38ba: 0x000b, 0x38bb: 0x000b, - 0x38bc: 0x000b, 0x38bd: 0x000b, 0x38be: 0x000b, 0x38bf: 0x000b, - // Block 0xe3, offset 0x38c0 - 0x38c0: 0x000c, 0x38c1: 0x000c, 0x38c2: 0x000c, 0x38c3: 0x000c, 0x38c4: 0x000c, 0x38c5: 0x000c, - 0x38c6: 0x000c, 0x38c7: 0x000c, 0x38c8: 0x000c, 0x38c9: 0x000c, 0x38ca: 0x000c, 0x38cb: 0x000c, - 0x38cc: 0x000c, 0x38cd: 0x000c, 0x38ce: 0x000c, 0x38cf: 0x000c, 0x38d0: 0x000c, 0x38d1: 0x000c, - 0x38d2: 0x000c, 0x38d3: 0x000c, 0x38d4: 0x000c, 0x38d5: 0x000c, 0x38d6: 0x000c, 0x38d7: 0x000c, - 0x38d8: 0x000c, 0x38d9: 0x000c, 0x38da: 0x000c, 0x38db: 0x000c, 0x38dc: 0x000c, 0x38dd: 0x000c, - 0x38de: 0x000c, 0x38df: 0x000c, 0x38e0: 0x000c, 0x38e1: 0x000c, 0x38e2: 0x000c, 0x38e3: 0x000c, - 0x38e4: 0x000c, 0x38e5: 0x000c, 0x38e6: 0x000c, 0x38e7: 0x000c, 0x38e8: 0x000c, 0x38e9: 0x000c, - 0x38ea: 0x000c, 0x38eb: 0x000c, 0x38ec: 0x000c, 0x38ed: 0x000c, 0x38ee: 0x000c, 0x38ef: 0x000c, - 0x38f0: 0x000b, 0x38f1: 0x000b, 0x38f2: 0x000b, 0x38f3: 0x000b, 0x38f4: 0x000b, 0x38f5: 0x000b, - 0x38f6: 0x000b, 0x38f7: 0x000b, 0x38f8: 0x000b, 0x38f9: 0x000b, 0x38fa: 0x000b, 0x38fb: 0x000b, - 0x38fc: 0x000b, 0x38fd: 0x000b, 0x38fe: 0x000b, 0x38ff: 0x000b, -} - -// bidiIndex: 24 blocks, 1536 entries, 1536 bytes -// Block 0 is the zero block. -var bidiIndex = [1536]uint8{ - // Block 0x0, offset 0x0 - // Block 0x1, offset 0x40 - // Block 0x2, offset 0x80 - // Block 0x3, offset 0xc0 - 0xc2: 0x01, 0xc3: 0x02, - 0xca: 0x03, 0xcb: 0x04, 0xcc: 0x05, 0xcd: 0x06, 0xce: 0x07, 0xcf: 0x08, - 0xd2: 0x09, 0xd6: 0x0a, 0xd7: 0x0b, - 0xd8: 0x0c, 0xd9: 0x0d, 0xda: 0x0e, 0xdb: 0x0f, 0xdc: 0x10, 0xdd: 0x11, 0xde: 0x12, 0xdf: 0x13, - 0xe0: 0x02, 0xe1: 0x03, 0xe2: 0x04, 0xe3: 0x05, 0xe4: 0x06, - 0xea: 0x07, 0xef: 0x08, - 0xf0: 0x11, 0xf1: 0x12, 0xf2: 0x12, 0xf3: 0x14, 0xf4: 0x15, - // Block 0x4, offset 0x100 - 0x120: 0x14, 0x121: 0x15, 0x122: 0x16, 0x123: 0x17, 0x124: 0x18, 0x125: 0x19, 0x126: 0x1a, 0x127: 0x1b, - 0x128: 0x1c, 0x129: 0x1d, 0x12a: 0x1c, 0x12b: 0x1e, 0x12c: 0x1f, 0x12d: 0x20, 0x12e: 0x21, 0x12f: 0x22, - 0x130: 0x23, 0x131: 0x24, 0x132: 0x1a, 0x133: 0x25, 0x134: 0x26, 0x135: 0x27, 0x137: 0x28, - 0x138: 0x29, 0x139: 0x2a, 0x13a: 0x2b, 0x13b: 0x2c, 0x13c: 0x2d, 0x13d: 0x2e, 0x13e: 0x2f, 0x13f: 0x30, - // Block 0x5, offset 0x140 - 0x140: 0x31, 0x141: 0x32, 0x142: 0x33, - 0x14d: 0x34, 0x14e: 0x35, - 0x150: 0x36, - 0x15a: 0x37, 0x15c: 0x38, 0x15d: 0x39, 0x15e: 0x3a, 0x15f: 0x3b, - 0x160: 0x3c, 0x162: 0x3d, 0x164: 0x3e, 0x165: 0x3f, 0x167: 0x40, - 0x168: 0x41, 0x169: 0x42, 0x16a: 0x43, 0x16c: 0x44, 0x16d: 0x45, 0x16e: 0x46, 0x16f: 0x47, - 0x170: 0x48, 0x173: 0x49, 0x177: 0x4a, - 0x17e: 0x4b, 0x17f: 0x4c, - // Block 0x6, offset 0x180 - 0x180: 0x4d, 0x181: 0x4e, 0x182: 0x4f, 0x183: 0x50, 0x184: 0x51, 0x185: 0x52, 0x186: 0x53, 0x187: 0x54, - 0x188: 0x55, 0x189: 0x54, 0x18a: 0x54, 0x18b: 0x54, 0x18c: 0x56, 0x18d: 0x57, 0x18e: 0x58, 0x18f: 0x54, - 0x190: 0x59, 0x191: 0x5a, 0x192: 0x5b, 0x193: 0x5c, 0x194: 0x54, 0x195: 0x54, 0x196: 0x54, 0x197: 0x54, - 0x198: 0x54, 0x199: 0x54, 0x19a: 0x5d, 0x19b: 0x54, 0x19c: 0x54, 0x19d: 0x5e, 0x19e: 0x54, 0x19f: 0x5f, - 0x1a4: 0x54, 0x1a5: 0x54, 0x1a6: 0x60, 0x1a7: 0x61, - 0x1a8: 0x54, 0x1a9: 0x54, 0x1aa: 0x54, 0x1ab: 0x54, 0x1ac: 0x54, 0x1ad: 0x62, 0x1ae: 0x63, 0x1af: 0x64, - 0x1b3: 0x65, 0x1b5: 0x66, 0x1b7: 0x67, - 0x1b8: 0x68, 0x1b9: 0x69, 0x1ba: 0x6a, 0x1bb: 0x6b, 0x1bc: 0x54, 0x1bd: 0x54, 0x1be: 0x54, 0x1bf: 0x6c, - // Block 0x7, offset 0x1c0 - 0x1c0: 0x6d, 0x1c2: 0x6e, 0x1c3: 0x6f, 0x1c7: 0x70, - 0x1c8: 0x71, 0x1c9: 0x72, 0x1ca: 0x73, 0x1cb: 0x74, 0x1cd: 0x75, 0x1cf: 0x76, - // Block 0x8, offset 0x200 - 0x237: 0x54, - // Block 0x9, offset 0x240 - 0x252: 0x77, 0x253: 0x78, - 0x258: 0x79, 0x259: 0x7a, 0x25a: 0x7b, 0x25b: 0x7c, 0x25c: 0x7d, 0x25e: 0x7e, - 0x260: 0x7f, 0x261: 0x80, 0x263: 0x81, 0x264: 0x82, 0x265: 0x83, 0x266: 0x84, 0x267: 0x85, - 0x268: 0x86, 0x269: 0x87, 0x26a: 0x88, 0x26b: 0x89, 0x26f: 0x8a, - // Block 0xa, offset 0x280 - 0x2ac: 0x8b, 0x2ad: 0x8c, 0x2ae: 0x0e, 0x2af: 0x0e, - 0x2b0: 0x0e, 0x2b1: 0x0e, 0x2b2: 0x0e, 0x2b3: 0x0e, 0x2b4: 0x8d, 0x2b5: 0x0e, 0x2b6: 0x0e, 0x2b7: 0x8e, - 0x2b8: 0x8f, 0x2b9: 0x90, 0x2ba: 0x0e, 0x2bb: 0x91, 0x2bc: 0x92, 0x2bd: 0x93, 0x2bf: 0x94, - // Block 0xb, offset 0x2c0 - 0x2c4: 0x95, 0x2c5: 0x54, 0x2c6: 0x96, 0x2c7: 0x97, - 0x2cb: 0x98, 0x2cd: 0x99, - 0x2e0: 0x9a, 0x2e1: 0x9a, 0x2e2: 0x9a, 0x2e3: 0x9a, 0x2e4: 0x9b, 0x2e5: 0x9a, 0x2e6: 0x9a, 0x2e7: 0x9a, - 0x2e8: 0x9c, 0x2e9: 0x9a, 0x2ea: 0x9a, 0x2eb: 0x9d, 0x2ec: 0x9e, 0x2ed: 0x9a, 0x2ee: 0x9a, 0x2ef: 0x9a, - 0x2f0: 0x9a, 0x2f1: 0x9a, 0x2f2: 0x9a, 0x2f3: 0x9a, 0x2f4: 0x9a, 0x2f5: 0x9a, 0x2f6: 0x9a, 0x2f7: 0x9a, - 0x2f8: 0x9a, 0x2f9: 0x9f, 0x2fa: 0x9a, 0x2fb: 0x9a, 0x2fc: 0x9a, 0x2fd: 0x9a, 0x2fe: 0x9a, 0x2ff: 0x9a, - // Block 0xc, offset 0x300 - 0x300: 0xa0, 0x301: 0xa1, 0x302: 0xa2, 0x304: 0xa3, 0x305: 0xa4, 0x306: 0xa5, 0x307: 0xa6, - 0x308: 0xa7, 0x30b: 0xa8, 0x30c: 0xa9, 0x30d: 0xaa, - 0x310: 0xab, 0x311: 0xac, 0x312: 0xad, 0x313: 0xae, 0x316: 0xaf, 0x317: 0xb0, - 0x318: 0xb1, 0x319: 0xb2, 0x31a: 0xb3, 0x31c: 0xb4, - 0x328: 0xb5, 0x329: 0xb6, 0x32a: 0xb7, - 0x330: 0xb8, 0x332: 0xb9, 0x334: 0xba, 0x335: 0xbb, - // Block 0xd, offset 0x340 - 0x36b: 0xbc, 0x36c: 0xbd, - 0x37e: 0xbe, - // Block 0xe, offset 0x380 - 0x3b2: 0xbf, - // Block 0xf, offset 0x3c0 - 0x3c5: 0xc0, 0x3c6: 0xc1, - 0x3c8: 0x54, 0x3c9: 0xc2, 0x3cc: 0x54, 0x3cd: 0xc3, - 0x3db: 0xc4, 0x3dc: 0xc5, 0x3dd: 0xc6, 0x3de: 0xc7, 0x3df: 0xc8, - 0x3e8: 0xc9, 0x3e9: 0xca, 0x3ea: 0xcb, - // Block 0x10, offset 0x400 - 0x400: 0xcc, - 0x420: 0x9a, 0x421: 0x9a, 0x422: 0x9a, 0x423: 0xcd, 0x424: 0x9a, 0x425: 0xce, 0x426: 0x9a, 0x427: 0x9a, - 0x428: 0x9a, 0x429: 0x9a, 0x42a: 0x9a, 0x42b: 0x9a, 0x42c: 0x9a, 0x42d: 0x9a, 0x42e: 0x9a, 0x42f: 0x9a, - 0x430: 0x9a, 0x431: 0x9a, 0x432: 0x9a, 0x433: 0x9a, 0x434: 0x9a, 0x435: 0x9a, 0x436: 0x9a, 0x437: 0x9a, - 0x438: 0x0e, 0x439: 0x0e, 0x43a: 0x0e, 0x43b: 0xcf, 0x43c: 0x9a, 0x43d: 0x9a, 0x43e: 0x9a, 0x43f: 0x9a, - // Block 0x11, offset 0x440 - 0x440: 0xd0, 0x441: 0x54, 0x442: 0xd1, 0x443: 0xd2, 0x444: 0xd3, 0x445: 0xd4, - 0x449: 0xd5, 0x44c: 0x54, 0x44d: 0x54, 0x44e: 0x54, 0x44f: 0x54, - 0x450: 0x54, 0x451: 0x54, 0x452: 0x54, 0x453: 0x54, 0x454: 0x54, 0x455: 0x54, 0x456: 0x54, 0x457: 0x54, - 0x458: 0x54, 0x459: 0x54, 0x45a: 0x54, 0x45b: 0xd6, 0x45c: 0x54, 0x45d: 0x6b, 0x45e: 0x54, 0x45f: 0xd7, - 0x460: 0xd8, 0x461: 0xd9, 0x462: 0xda, 0x464: 0xdb, 0x465: 0xdc, 0x466: 0xdd, 0x467: 0xde, - 0x47f: 0xdf, - // Block 0x12, offset 0x480 - 0x4bf: 0xdf, - // Block 0x13, offset 0x4c0 - 0x4d0: 0x09, 0x4d1: 0x0a, 0x4d6: 0x0b, - 0x4db: 0x0c, 0x4dd: 0x0d, 0x4de: 0x0e, 0x4df: 0x0f, - 0x4ef: 0x10, - 0x4ff: 0x10, - // Block 0x14, offset 0x500 - 0x50f: 0x10, - 0x51f: 0x10, - 0x52f: 0x10, - 0x53f: 0x10, - // Block 0x15, offset 0x540 - 0x540: 0xe0, 0x541: 0xe0, 0x542: 0xe0, 0x543: 0xe0, 0x544: 0x05, 0x545: 0x05, 0x546: 0x05, 0x547: 0xe1, - 0x548: 0xe0, 0x549: 0xe0, 0x54a: 0xe0, 0x54b: 0xe0, 0x54c: 0xe0, 0x54d: 0xe0, 0x54e: 0xe0, 0x54f: 0xe0, - 0x550: 0xe0, 0x551: 0xe0, 0x552: 0xe0, 0x553: 0xe0, 0x554: 0xe0, 0x555: 0xe0, 0x556: 0xe0, 0x557: 0xe0, - 0x558: 0xe0, 0x559: 0xe0, 0x55a: 0xe0, 0x55b: 0xe0, 0x55c: 0xe0, 0x55d: 0xe0, 0x55e: 0xe0, 0x55f: 0xe0, - 0x560: 0xe0, 0x561: 0xe0, 0x562: 0xe0, 0x563: 0xe0, 0x564: 0xe0, 0x565: 0xe0, 0x566: 0xe0, 0x567: 0xe0, - 0x568: 0xe0, 0x569: 0xe0, 0x56a: 0xe0, 0x56b: 0xe0, 0x56c: 0xe0, 0x56d: 0xe0, 0x56e: 0xe0, 0x56f: 0xe0, - 0x570: 0xe0, 0x571: 0xe0, 0x572: 0xe0, 0x573: 0xe0, 0x574: 0xe0, 0x575: 0xe0, 0x576: 0xe0, 0x577: 0xe0, - 0x578: 0xe0, 0x579: 0xe0, 0x57a: 0xe0, 0x57b: 0xe0, 0x57c: 0xe0, 0x57d: 0xe0, 0x57e: 0xe0, 0x57f: 0xe0, - // Block 0x16, offset 0x580 - 0x58f: 0x10, - 0x59f: 0x10, - 0x5a0: 0x13, - 0x5af: 0x10, - 0x5bf: 0x10, - // Block 0x17, offset 0x5c0 - 0x5cf: 0x10, -} - -// Total table size 16184 bytes (15KiB); checksum: F50EF68C diff --git a/vendor/golang.org/x/text/unicode/bidi/tables11.0.0.go b/vendor/golang.org/x/text/unicode/bidi/tables11.0.0.go deleted file mode 100644 index f76bdca273..0000000000 --- a/vendor/golang.org/x/text/unicode/bidi/tables11.0.0.go +++ /dev/null @@ -1,1887 +0,0 @@ -// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. - -//go:build go1.13 && !go1.14 - -package bidi - -// UnicodeVersion is the Unicode version from which the tables in this package are derived. -const UnicodeVersion = "11.0.0" - -// xorMasks contains masks to be xor-ed with brackets to get the reverse -// version. -var xorMasks = []int32{ // 8 elements - 0, 1, 6, 7, 3, 15, 29, 63, -} // Size: 56 bytes - -// lookup returns the trie value for the first UTF-8 encoding in s and -// the width in bytes of this encoding. The size will be 0 if s does not -// hold enough bytes to complete the encoding. len(s) must be greater than 0. -func (t *bidiTrie) lookup(s []byte) (v uint8, sz int) { - c0 := s[0] - switch { - case c0 < 0x80: // is ASCII - return bidiValues[c0], 1 - case c0 < 0xC2: - return 0, 1 // Illegal UTF-8: not a starter, not ASCII. - case c0 < 0xE0: // 2-byte UTF-8 - if len(s) < 2 { - return 0, 0 - } - i := bidiIndex[c0] - c1 := s[1] - if c1 < 0x80 || 0xC0 <= c1 { - return 0, 1 // Illegal UTF-8: not a continuation byte. - } - return t.lookupValue(uint32(i), c1), 2 - case c0 < 0xF0: // 3-byte UTF-8 - if len(s) < 3 { - return 0, 0 - } - i := bidiIndex[c0] - c1 := s[1] - if c1 < 0x80 || 0xC0 <= c1 { - return 0, 1 // Illegal UTF-8: not a continuation byte. - } - o := uint32(i)<<6 + uint32(c1) - i = bidiIndex[o] - c2 := s[2] - if c2 < 0x80 || 0xC0 <= c2 { - return 0, 2 // Illegal UTF-8: not a continuation byte. - } - return t.lookupValue(uint32(i), c2), 3 - case c0 < 0xF8: // 4-byte UTF-8 - if len(s) < 4 { - return 0, 0 - } - i := bidiIndex[c0] - c1 := s[1] - if c1 < 0x80 || 0xC0 <= c1 { - return 0, 1 // Illegal UTF-8: not a continuation byte. - } - o := uint32(i)<<6 + uint32(c1) - i = bidiIndex[o] - c2 := s[2] - if c2 < 0x80 || 0xC0 <= c2 { - return 0, 2 // Illegal UTF-8: not a continuation byte. - } - o = uint32(i)<<6 + uint32(c2) - i = bidiIndex[o] - c3 := s[3] - if c3 < 0x80 || 0xC0 <= c3 { - return 0, 3 // Illegal UTF-8: not a continuation byte. - } - return t.lookupValue(uint32(i), c3), 4 - } - // Illegal rune - return 0, 1 -} - -// lookupUnsafe returns the trie value for the first UTF-8 encoding in s. -// s must start with a full and valid UTF-8 encoded rune. -func (t *bidiTrie) lookupUnsafe(s []byte) uint8 { - c0 := s[0] - if c0 < 0x80 { // is ASCII - return bidiValues[c0] - } - i := bidiIndex[c0] - if c0 < 0xE0 { // 2-byte UTF-8 - return t.lookupValue(uint32(i), s[1]) - } - i = bidiIndex[uint32(i)<<6+uint32(s[1])] - if c0 < 0xF0 { // 3-byte UTF-8 - return t.lookupValue(uint32(i), s[2]) - } - i = bidiIndex[uint32(i)<<6+uint32(s[2])] - if c0 < 0xF8 { // 4-byte UTF-8 - return t.lookupValue(uint32(i), s[3]) - } - return 0 -} - -// lookupString returns the trie value for the first UTF-8 encoding in s and -// the width in bytes of this encoding. The size will be 0 if s does not -// hold enough bytes to complete the encoding. len(s) must be greater than 0. -func (t *bidiTrie) lookupString(s string) (v uint8, sz int) { - c0 := s[0] - switch { - case c0 < 0x80: // is ASCII - return bidiValues[c0], 1 - case c0 < 0xC2: - return 0, 1 // Illegal UTF-8: not a starter, not ASCII. - case c0 < 0xE0: // 2-byte UTF-8 - if len(s) < 2 { - return 0, 0 - } - i := bidiIndex[c0] - c1 := s[1] - if c1 < 0x80 || 0xC0 <= c1 { - return 0, 1 // Illegal UTF-8: not a continuation byte. - } - return t.lookupValue(uint32(i), c1), 2 - case c0 < 0xF0: // 3-byte UTF-8 - if len(s) < 3 { - return 0, 0 - } - i := bidiIndex[c0] - c1 := s[1] - if c1 < 0x80 || 0xC0 <= c1 { - return 0, 1 // Illegal UTF-8: not a continuation byte. - } - o := uint32(i)<<6 + uint32(c1) - i = bidiIndex[o] - c2 := s[2] - if c2 < 0x80 || 0xC0 <= c2 { - return 0, 2 // Illegal UTF-8: not a continuation byte. - } - return t.lookupValue(uint32(i), c2), 3 - case c0 < 0xF8: // 4-byte UTF-8 - if len(s) < 4 { - return 0, 0 - } - i := bidiIndex[c0] - c1 := s[1] - if c1 < 0x80 || 0xC0 <= c1 { - return 0, 1 // Illegal UTF-8: not a continuation byte. - } - o := uint32(i)<<6 + uint32(c1) - i = bidiIndex[o] - c2 := s[2] - if c2 < 0x80 || 0xC0 <= c2 { - return 0, 2 // Illegal UTF-8: not a continuation byte. - } - o = uint32(i)<<6 + uint32(c2) - i = bidiIndex[o] - c3 := s[3] - if c3 < 0x80 || 0xC0 <= c3 { - return 0, 3 // Illegal UTF-8: not a continuation byte. - } - return t.lookupValue(uint32(i), c3), 4 - } - // Illegal rune - return 0, 1 -} - -// lookupStringUnsafe returns the trie value for the first UTF-8 encoding in s. -// s must start with a full and valid UTF-8 encoded rune. -func (t *bidiTrie) lookupStringUnsafe(s string) uint8 { - c0 := s[0] - if c0 < 0x80 { // is ASCII - return bidiValues[c0] - } - i := bidiIndex[c0] - if c0 < 0xE0 { // 2-byte UTF-8 - return t.lookupValue(uint32(i), s[1]) - } - i = bidiIndex[uint32(i)<<6+uint32(s[1])] - if c0 < 0xF0 { // 3-byte UTF-8 - return t.lookupValue(uint32(i), s[2]) - } - i = bidiIndex[uint32(i)<<6+uint32(s[2])] - if c0 < 0xF8 { // 4-byte UTF-8 - return t.lookupValue(uint32(i), s[3]) - } - return 0 -} - -// bidiTrie. Total size: 16512 bytes (16.12 KiB). Checksum: 2a9cf1317f2ffaa. -type bidiTrie struct{} - -func newBidiTrie(i int) *bidiTrie { - return &bidiTrie{} -} - -// lookupValue determines the type of block n and looks up the value for b. -func (t *bidiTrie) lookupValue(n uint32, b byte) uint8 { - switch { - default: - return uint8(bidiValues[n<<6+uint32(b)]) - } -} - -// bidiValues: 234 blocks, 14976 entries, 14976 bytes -// The third block is the zero block. -var bidiValues = [14976]uint8{ - // Block 0x0, offset 0x0 - 0x00: 0x000b, 0x01: 0x000b, 0x02: 0x000b, 0x03: 0x000b, 0x04: 0x000b, 0x05: 0x000b, - 0x06: 0x000b, 0x07: 0x000b, 0x08: 0x000b, 0x09: 0x0008, 0x0a: 0x0007, 0x0b: 0x0008, - 0x0c: 0x0009, 0x0d: 0x0007, 0x0e: 0x000b, 0x0f: 0x000b, 0x10: 0x000b, 0x11: 0x000b, - 0x12: 0x000b, 0x13: 0x000b, 0x14: 0x000b, 0x15: 0x000b, 0x16: 0x000b, 0x17: 0x000b, - 0x18: 0x000b, 0x19: 0x000b, 0x1a: 0x000b, 0x1b: 0x000b, 0x1c: 0x0007, 0x1d: 0x0007, - 0x1e: 0x0007, 0x1f: 0x0008, 0x20: 0x0009, 0x21: 0x000a, 0x22: 0x000a, 0x23: 0x0004, - 0x24: 0x0004, 0x25: 0x0004, 0x26: 0x000a, 0x27: 0x000a, 0x28: 0x003a, 0x29: 0x002a, - 0x2a: 0x000a, 0x2b: 0x0003, 0x2c: 0x0006, 0x2d: 0x0003, 0x2e: 0x0006, 0x2f: 0x0006, - 0x30: 0x0002, 0x31: 0x0002, 0x32: 0x0002, 0x33: 0x0002, 0x34: 0x0002, 0x35: 0x0002, - 0x36: 0x0002, 0x37: 0x0002, 0x38: 0x0002, 0x39: 0x0002, 0x3a: 0x0006, 0x3b: 0x000a, - 0x3c: 0x000a, 0x3d: 0x000a, 0x3e: 0x000a, 0x3f: 0x000a, - // Block 0x1, offset 0x40 - 0x40: 0x000a, - 0x5b: 0x005a, 0x5c: 0x000a, 0x5d: 0x004a, - 0x5e: 0x000a, 0x5f: 0x000a, 0x60: 0x000a, - 0x7b: 0x005a, - 0x7c: 0x000a, 0x7d: 0x004a, 0x7e: 0x000a, 0x7f: 0x000b, - // Block 0x2, offset 0x80 - // Block 0x3, offset 0xc0 - 0xc0: 0x000b, 0xc1: 0x000b, 0xc2: 0x000b, 0xc3: 0x000b, 0xc4: 0x000b, 0xc5: 0x0007, - 0xc6: 0x000b, 0xc7: 0x000b, 0xc8: 0x000b, 0xc9: 0x000b, 0xca: 0x000b, 0xcb: 0x000b, - 0xcc: 0x000b, 0xcd: 0x000b, 0xce: 0x000b, 0xcf: 0x000b, 0xd0: 0x000b, 0xd1: 0x000b, - 0xd2: 0x000b, 0xd3: 0x000b, 0xd4: 0x000b, 0xd5: 0x000b, 0xd6: 0x000b, 0xd7: 0x000b, - 0xd8: 0x000b, 0xd9: 0x000b, 0xda: 0x000b, 0xdb: 0x000b, 0xdc: 0x000b, 0xdd: 0x000b, - 0xde: 0x000b, 0xdf: 0x000b, 0xe0: 0x0006, 0xe1: 0x000a, 0xe2: 0x0004, 0xe3: 0x0004, - 0xe4: 0x0004, 0xe5: 0x0004, 0xe6: 0x000a, 0xe7: 0x000a, 0xe8: 0x000a, 0xe9: 0x000a, - 0xeb: 0x000a, 0xec: 0x000a, 0xed: 0x000b, 0xee: 0x000a, 0xef: 0x000a, - 0xf0: 0x0004, 0xf1: 0x0004, 0xf2: 0x0002, 0xf3: 0x0002, 0xf4: 0x000a, - 0xf6: 0x000a, 0xf7: 0x000a, 0xf8: 0x000a, 0xf9: 0x0002, 0xfb: 0x000a, - 0xfc: 0x000a, 0xfd: 0x000a, 0xfe: 0x000a, 0xff: 0x000a, - // Block 0x4, offset 0x100 - 0x117: 0x000a, - 0x137: 0x000a, - // Block 0x5, offset 0x140 - 0x179: 0x000a, 0x17a: 0x000a, - // Block 0x6, offset 0x180 - 0x182: 0x000a, 0x183: 0x000a, 0x184: 0x000a, 0x185: 0x000a, - 0x186: 0x000a, 0x187: 0x000a, 0x188: 0x000a, 0x189: 0x000a, 0x18a: 0x000a, 0x18b: 0x000a, - 0x18c: 0x000a, 0x18d: 0x000a, 0x18e: 0x000a, 0x18f: 0x000a, - 0x192: 0x000a, 0x193: 0x000a, 0x194: 0x000a, 0x195: 0x000a, 0x196: 0x000a, 0x197: 0x000a, - 0x198: 0x000a, 0x199: 0x000a, 0x19a: 0x000a, 0x19b: 0x000a, 0x19c: 0x000a, 0x19d: 0x000a, - 0x19e: 0x000a, 0x19f: 0x000a, - 0x1a5: 0x000a, 0x1a6: 0x000a, 0x1a7: 0x000a, 0x1a8: 0x000a, 0x1a9: 0x000a, - 0x1aa: 0x000a, 0x1ab: 0x000a, 0x1ac: 0x000a, 0x1ad: 0x000a, 0x1af: 0x000a, - 0x1b0: 0x000a, 0x1b1: 0x000a, 0x1b2: 0x000a, 0x1b3: 0x000a, 0x1b4: 0x000a, 0x1b5: 0x000a, - 0x1b6: 0x000a, 0x1b7: 0x000a, 0x1b8: 0x000a, 0x1b9: 0x000a, 0x1ba: 0x000a, 0x1bb: 0x000a, - 0x1bc: 0x000a, 0x1bd: 0x000a, 0x1be: 0x000a, 0x1bf: 0x000a, - // Block 0x7, offset 0x1c0 - 0x1c0: 0x000c, 0x1c1: 0x000c, 0x1c2: 0x000c, 0x1c3: 0x000c, 0x1c4: 0x000c, 0x1c5: 0x000c, - 0x1c6: 0x000c, 0x1c7: 0x000c, 0x1c8: 0x000c, 0x1c9: 0x000c, 0x1ca: 0x000c, 0x1cb: 0x000c, - 0x1cc: 0x000c, 0x1cd: 0x000c, 0x1ce: 0x000c, 0x1cf: 0x000c, 0x1d0: 0x000c, 0x1d1: 0x000c, - 0x1d2: 0x000c, 0x1d3: 0x000c, 0x1d4: 0x000c, 0x1d5: 0x000c, 0x1d6: 0x000c, 0x1d7: 0x000c, - 0x1d8: 0x000c, 0x1d9: 0x000c, 0x1da: 0x000c, 0x1db: 0x000c, 0x1dc: 0x000c, 0x1dd: 0x000c, - 0x1de: 0x000c, 0x1df: 0x000c, 0x1e0: 0x000c, 0x1e1: 0x000c, 0x1e2: 0x000c, 0x1e3: 0x000c, - 0x1e4: 0x000c, 0x1e5: 0x000c, 0x1e6: 0x000c, 0x1e7: 0x000c, 0x1e8: 0x000c, 0x1e9: 0x000c, - 0x1ea: 0x000c, 0x1eb: 0x000c, 0x1ec: 0x000c, 0x1ed: 0x000c, 0x1ee: 0x000c, 0x1ef: 0x000c, - 0x1f0: 0x000c, 0x1f1: 0x000c, 0x1f2: 0x000c, 0x1f3: 0x000c, 0x1f4: 0x000c, 0x1f5: 0x000c, - 0x1f6: 0x000c, 0x1f7: 0x000c, 0x1f8: 0x000c, 0x1f9: 0x000c, 0x1fa: 0x000c, 0x1fb: 0x000c, - 0x1fc: 0x000c, 0x1fd: 0x000c, 0x1fe: 0x000c, 0x1ff: 0x000c, - // Block 0x8, offset 0x200 - 0x200: 0x000c, 0x201: 0x000c, 0x202: 0x000c, 0x203: 0x000c, 0x204: 0x000c, 0x205: 0x000c, - 0x206: 0x000c, 0x207: 0x000c, 0x208: 0x000c, 0x209: 0x000c, 0x20a: 0x000c, 0x20b: 0x000c, - 0x20c: 0x000c, 0x20d: 0x000c, 0x20e: 0x000c, 0x20f: 0x000c, 0x210: 0x000c, 0x211: 0x000c, - 0x212: 0x000c, 0x213: 0x000c, 0x214: 0x000c, 0x215: 0x000c, 0x216: 0x000c, 0x217: 0x000c, - 0x218: 0x000c, 0x219: 0x000c, 0x21a: 0x000c, 0x21b: 0x000c, 0x21c: 0x000c, 0x21d: 0x000c, - 0x21e: 0x000c, 0x21f: 0x000c, 0x220: 0x000c, 0x221: 0x000c, 0x222: 0x000c, 0x223: 0x000c, - 0x224: 0x000c, 0x225: 0x000c, 0x226: 0x000c, 0x227: 0x000c, 0x228: 0x000c, 0x229: 0x000c, - 0x22a: 0x000c, 0x22b: 0x000c, 0x22c: 0x000c, 0x22d: 0x000c, 0x22e: 0x000c, 0x22f: 0x000c, - 0x234: 0x000a, 0x235: 0x000a, - 0x23e: 0x000a, - // Block 0x9, offset 0x240 - 0x244: 0x000a, 0x245: 0x000a, - 0x247: 0x000a, - // Block 0xa, offset 0x280 - 0x2b6: 0x000a, - // Block 0xb, offset 0x2c0 - 0x2c3: 0x000c, 0x2c4: 0x000c, 0x2c5: 0x000c, - 0x2c6: 0x000c, 0x2c7: 0x000c, 0x2c8: 0x000c, 0x2c9: 0x000c, - // Block 0xc, offset 0x300 - 0x30a: 0x000a, - 0x30d: 0x000a, 0x30e: 0x000a, 0x30f: 0x0004, 0x310: 0x0001, 0x311: 0x000c, - 0x312: 0x000c, 0x313: 0x000c, 0x314: 0x000c, 0x315: 0x000c, 0x316: 0x000c, 0x317: 0x000c, - 0x318: 0x000c, 0x319: 0x000c, 0x31a: 0x000c, 0x31b: 0x000c, 0x31c: 0x000c, 0x31d: 0x000c, - 0x31e: 0x000c, 0x31f: 0x000c, 0x320: 0x000c, 0x321: 0x000c, 0x322: 0x000c, 0x323: 0x000c, - 0x324: 0x000c, 0x325: 0x000c, 0x326: 0x000c, 0x327: 0x000c, 0x328: 0x000c, 0x329: 0x000c, - 0x32a: 0x000c, 0x32b: 0x000c, 0x32c: 0x000c, 0x32d: 0x000c, 0x32e: 0x000c, 0x32f: 0x000c, - 0x330: 0x000c, 0x331: 0x000c, 0x332: 0x000c, 0x333: 0x000c, 0x334: 0x000c, 0x335: 0x000c, - 0x336: 0x000c, 0x337: 0x000c, 0x338: 0x000c, 0x339: 0x000c, 0x33a: 0x000c, 0x33b: 0x000c, - 0x33c: 0x000c, 0x33d: 0x000c, 0x33e: 0x0001, 0x33f: 0x000c, - // Block 0xd, offset 0x340 - 0x340: 0x0001, 0x341: 0x000c, 0x342: 0x000c, 0x343: 0x0001, 0x344: 0x000c, 0x345: 0x000c, - 0x346: 0x0001, 0x347: 0x000c, 0x348: 0x0001, 0x349: 0x0001, 0x34a: 0x0001, 0x34b: 0x0001, - 0x34c: 0x0001, 0x34d: 0x0001, 0x34e: 0x0001, 0x34f: 0x0001, 0x350: 0x0001, 0x351: 0x0001, - 0x352: 0x0001, 0x353: 0x0001, 0x354: 0x0001, 0x355: 0x0001, 0x356: 0x0001, 0x357: 0x0001, - 0x358: 0x0001, 0x359: 0x0001, 0x35a: 0x0001, 0x35b: 0x0001, 0x35c: 0x0001, 0x35d: 0x0001, - 0x35e: 0x0001, 0x35f: 0x0001, 0x360: 0x0001, 0x361: 0x0001, 0x362: 0x0001, 0x363: 0x0001, - 0x364: 0x0001, 0x365: 0x0001, 0x366: 0x0001, 0x367: 0x0001, 0x368: 0x0001, 0x369: 0x0001, - 0x36a: 0x0001, 0x36b: 0x0001, 0x36c: 0x0001, 0x36d: 0x0001, 0x36e: 0x0001, 0x36f: 0x0001, - 0x370: 0x0001, 0x371: 0x0001, 0x372: 0x0001, 0x373: 0x0001, 0x374: 0x0001, 0x375: 0x0001, - 0x376: 0x0001, 0x377: 0x0001, 0x378: 0x0001, 0x379: 0x0001, 0x37a: 0x0001, 0x37b: 0x0001, - 0x37c: 0x0001, 0x37d: 0x0001, 0x37e: 0x0001, 0x37f: 0x0001, - // Block 0xe, offset 0x380 - 0x380: 0x0005, 0x381: 0x0005, 0x382: 0x0005, 0x383: 0x0005, 0x384: 0x0005, 0x385: 0x0005, - 0x386: 0x000a, 0x387: 0x000a, 0x388: 0x000d, 0x389: 0x0004, 0x38a: 0x0004, 0x38b: 0x000d, - 0x38c: 0x0006, 0x38d: 0x000d, 0x38e: 0x000a, 0x38f: 0x000a, 0x390: 0x000c, 0x391: 0x000c, - 0x392: 0x000c, 0x393: 0x000c, 0x394: 0x000c, 0x395: 0x000c, 0x396: 0x000c, 0x397: 0x000c, - 0x398: 0x000c, 0x399: 0x000c, 0x39a: 0x000c, 0x39b: 0x000d, 0x39c: 0x000d, 0x39d: 0x000d, - 0x39e: 0x000d, 0x39f: 0x000d, 0x3a0: 0x000d, 0x3a1: 0x000d, 0x3a2: 0x000d, 0x3a3: 0x000d, - 0x3a4: 0x000d, 0x3a5: 0x000d, 0x3a6: 0x000d, 0x3a7: 0x000d, 0x3a8: 0x000d, 0x3a9: 0x000d, - 0x3aa: 0x000d, 0x3ab: 0x000d, 0x3ac: 0x000d, 0x3ad: 0x000d, 0x3ae: 0x000d, 0x3af: 0x000d, - 0x3b0: 0x000d, 0x3b1: 0x000d, 0x3b2: 0x000d, 0x3b3: 0x000d, 0x3b4: 0x000d, 0x3b5: 0x000d, - 0x3b6: 0x000d, 0x3b7: 0x000d, 0x3b8: 0x000d, 0x3b9: 0x000d, 0x3ba: 0x000d, 0x3bb: 0x000d, - 0x3bc: 0x000d, 0x3bd: 0x000d, 0x3be: 0x000d, 0x3bf: 0x000d, - // Block 0xf, offset 0x3c0 - 0x3c0: 0x000d, 0x3c1: 0x000d, 0x3c2: 0x000d, 0x3c3: 0x000d, 0x3c4: 0x000d, 0x3c5: 0x000d, - 0x3c6: 0x000d, 0x3c7: 0x000d, 0x3c8: 0x000d, 0x3c9: 0x000d, 0x3ca: 0x000d, 0x3cb: 0x000c, - 0x3cc: 0x000c, 0x3cd: 0x000c, 0x3ce: 0x000c, 0x3cf: 0x000c, 0x3d0: 0x000c, 0x3d1: 0x000c, - 0x3d2: 0x000c, 0x3d3: 0x000c, 0x3d4: 0x000c, 0x3d5: 0x000c, 0x3d6: 0x000c, 0x3d7: 0x000c, - 0x3d8: 0x000c, 0x3d9: 0x000c, 0x3da: 0x000c, 0x3db: 0x000c, 0x3dc: 0x000c, 0x3dd: 0x000c, - 0x3de: 0x000c, 0x3df: 0x000c, 0x3e0: 0x0005, 0x3e1: 0x0005, 0x3e2: 0x0005, 0x3e3: 0x0005, - 0x3e4: 0x0005, 0x3e5: 0x0005, 0x3e6: 0x0005, 0x3e7: 0x0005, 0x3e8: 0x0005, 0x3e9: 0x0005, - 0x3ea: 0x0004, 0x3eb: 0x0005, 0x3ec: 0x0005, 0x3ed: 0x000d, 0x3ee: 0x000d, 0x3ef: 0x000d, - 0x3f0: 0x000c, 0x3f1: 0x000d, 0x3f2: 0x000d, 0x3f3: 0x000d, 0x3f4: 0x000d, 0x3f5: 0x000d, - 0x3f6: 0x000d, 0x3f7: 0x000d, 0x3f8: 0x000d, 0x3f9: 0x000d, 0x3fa: 0x000d, 0x3fb: 0x000d, - 0x3fc: 0x000d, 0x3fd: 0x000d, 0x3fe: 0x000d, 0x3ff: 0x000d, - // Block 0x10, offset 0x400 - 0x400: 0x000d, 0x401: 0x000d, 0x402: 0x000d, 0x403: 0x000d, 0x404: 0x000d, 0x405: 0x000d, - 0x406: 0x000d, 0x407: 0x000d, 0x408: 0x000d, 0x409: 0x000d, 0x40a: 0x000d, 0x40b: 0x000d, - 0x40c: 0x000d, 0x40d: 0x000d, 0x40e: 0x000d, 0x40f: 0x000d, 0x410: 0x000d, 0x411: 0x000d, - 0x412: 0x000d, 0x413: 0x000d, 0x414: 0x000d, 0x415: 0x000d, 0x416: 0x000d, 0x417: 0x000d, - 0x418: 0x000d, 0x419: 0x000d, 0x41a: 0x000d, 0x41b: 0x000d, 0x41c: 0x000d, 0x41d: 0x000d, - 0x41e: 0x000d, 0x41f: 0x000d, 0x420: 0x000d, 0x421: 0x000d, 0x422: 0x000d, 0x423: 0x000d, - 0x424: 0x000d, 0x425: 0x000d, 0x426: 0x000d, 0x427: 0x000d, 0x428: 0x000d, 0x429: 0x000d, - 0x42a: 0x000d, 0x42b: 0x000d, 0x42c: 0x000d, 0x42d: 0x000d, 0x42e: 0x000d, 0x42f: 0x000d, - 0x430: 0x000d, 0x431: 0x000d, 0x432: 0x000d, 0x433: 0x000d, 0x434: 0x000d, 0x435: 0x000d, - 0x436: 0x000d, 0x437: 0x000d, 0x438: 0x000d, 0x439: 0x000d, 0x43a: 0x000d, 0x43b: 0x000d, - 0x43c: 0x000d, 0x43d: 0x000d, 0x43e: 0x000d, 0x43f: 0x000d, - // Block 0x11, offset 0x440 - 0x440: 0x000d, 0x441: 0x000d, 0x442: 0x000d, 0x443: 0x000d, 0x444: 0x000d, 0x445: 0x000d, - 0x446: 0x000d, 0x447: 0x000d, 0x448: 0x000d, 0x449: 0x000d, 0x44a: 0x000d, 0x44b: 0x000d, - 0x44c: 0x000d, 0x44d: 0x000d, 0x44e: 0x000d, 0x44f: 0x000d, 0x450: 0x000d, 0x451: 0x000d, - 0x452: 0x000d, 0x453: 0x000d, 0x454: 0x000d, 0x455: 0x000d, 0x456: 0x000c, 0x457: 0x000c, - 0x458: 0x000c, 0x459: 0x000c, 0x45a: 0x000c, 0x45b: 0x000c, 0x45c: 0x000c, 0x45d: 0x0005, - 0x45e: 0x000a, 0x45f: 0x000c, 0x460: 0x000c, 0x461: 0x000c, 0x462: 0x000c, 0x463: 0x000c, - 0x464: 0x000c, 0x465: 0x000d, 0x466: 0x000d, 0x467: 0x000c, 0x468: 0x000c, 0x469: 0x000a, - 0x46a: 0x000c, 0x46b: 0x000c, 0x46c: 0x000c, 0x46d: 0x000c, 0x46e: 0x000d, 0x46f: 0x000d, - 0x470: 0x0002, 0x471: 0x0002, 0x472: 0x0002, 0x473: 0x0002, 0x474: 0x0002, 0x475: 0x0002, - 0x476: 0x0002, 0x477: 0x0002, 0x478: 0x0002, 0x479: 0x0002, 0x47a: 0x000d, 0x47b: 0x000d, - 0x47c: 0x000d, 0x47d: 0x000d, 0x47e: 0x000d, 0x47f: 0x000d, - // Block 0x12, offset 0x480 - 0x480: 0x000d, 0x481: 0x000d, 0x482: 0x000d, 0x483: 0x000d, 0x484: 0x000d, 0x485: 0x000d, - 0x486: 0x000d, 0x487: 0x000d, 0x488: 0x000d, 0x489: 0x000d, 0x48a: 0x000d, 0x48b: 0x000d, - 0x48c: 0x000d, 0x48d: 0x000d, 0x48e: 0x000d, 0x48f: 0x000d, 0x490: 0x000d, 0x491: 0x000c, - 0x492: 0x000d, 0x493: 0x000d, 0x494: 0x000d, 0x495: 0x000d, 0x496: 0x000d, 0x497: 0x000d, - 0x498: 0x000d, 0x499: 0x000d, 0x49a: 0x000d, 0x49b: 0x000d, 0x49c: 0x000d, 0x49d: 0x000d, - 0x49e: 0x000d, 0x49f: 0x000d, 0x4a0: 0x000d, 0x4a1: 0x000d, 0x4a2: 0x000d, 0x4a3: 0x000d, - 0x4a4: 0x000d, 0x4a5: 0x000d, 0x4a6: 0x000d, 0x4a7: 0x000d, 0x4a8: 0x000d, 0x4a9: 0x000d, - 0x4aa: 0x000d, 0x4ab: 0x000d, 0x4ac: 0x000d, 0x4ad: 0x000d, 0x4ae: 0x000d, 0x4af: 0x000d, - 0x4b0: 0x000c, 0x4b1: 0x000c, 0x4b2: 0x000c, 0x4b3: 0x000c, 0x4b4: 0x000c, 0x4b5: 0x000c, - 0x4b6: 0x000c, 0x4b7: 0x000c, 0x4b8: 0x000c, 0x4b9: 0x000c, 0x4ba: 0x000c, 0x4bb: 0x000c, - 0x4bc: 0x000c, 0x4bd: 0x000c, 0x4be: 0x000c, 0x4bf: 0x000c, - // Block 0x13, offset 0x4c0 - 0x4c0: 0x000c, 0x4c1: 0x000c, 0x4c2: 0x000c, 0x4c3: 0x000c, 0x4c4: 0x000c, 0x4c5: 0x000c, - 0x4c6: 0x000c, 0x4c7: 0x000c, 0x4c8: 0x000c, 0x4c9: 0x000c, 0x4ca: 0x000c, 0x4cb: 0x000d, - 0x4cc: 0x000d, 0x4cd: 0x000d, 0x4ce: 0x000d, 0x4cf: 0x000d, 0x4d0: 0x000d, 0x4d1: 0x000d, - 0x4d2: 0x000d, 0x4d3: 0x000d, 0x4d4: 0x000d, 0x4d5: 0x000d, 0x4d6: 0x000d, 0x4d7: 0x000d, - 0x4d8: 0x000d, 0x4d9: 0x000d, 0x4da: 0x000d, 0x4db: 0x000d, 0x4dc: 0x000d, 0x4dd: 0x000d, - 0x4de: 0x000d, 0x4df: 0x000d, 0x4e0: 0x000d, 0x4e1: 0x000d, 0x4e2: 0x000d, 0x4e3: 0x000d, - 0x4e4: 0x000d, 0x4e5: 0x000d, 0x4e6: 0x000d, 0x4e7: 0x000d, 0x4e8: 0x000d, 0x4e9: 0x000d, - 0x4ea: 0x000d, 0x4eb: 0x000d, 0x4ec: 0x000d, 0x4ed: 0x000d, 0x4ee: 0x000d, 0x4ef: 0x000d, - 0x4f0: 0x000d, 0x4f1: 0x000d, 0x4f2: 0x000d, 0x4f3: 0x000d, 0x4f4: 0x000d, 0x4f5: 0x000d, - 0x4f6: 0x000d, 0x4f7: 0x000d, 0x4f8: 0x000d, 0x4f9: 0x000d, 0x4fa: 0x000d, 0x4fb: 0x000d, - 0x4fc: 0x000d, 0x4fd: 0x000d, 0x4fe: 0x000d, 0x4ff: 0x000d, - // Block 0x14, offset 0x500 - 0x500: 0x000d, 0x501: 0x000d, 0x502: 0x000d, 0x503: 0x000d, 0x504: 0x000d, 0x505: 0x000d, - 0x506: 0x000d, 0x507: 0x000d, 0x508: 0x000d, 0x509: 0x000d, 0x50a: 0x000d, 0x50b: 0x000d, - 0x50c: 0x000d, 0x50d: 0x000d, 0x50e: 0x000d, 0x50f: 0x000d, 0x510: 0x000d, 0x511: 0x000d, - 0x512: 0x000d, 0x513: 0x000d, 0x514: 0x000d, 0x515: 0x000d, 0x516: 0x000d, 0x517: 0x000d, - 0x518: 0x000d, 0x519: 0x000d, 0x51a: 0x000d, 0x51b: 0x000d, 0x51c: 0x000d, 0x51d: 0x000d, - 0x51e: 0x000d, 0x51f: 0x000d, 0x520: 0x000d, 0x521: 0x000d, 0x522: 0x000d, 0x523: 0x000d, - 0x524: 0x000d, 0x525: 0x000d, 0x526: 0x000c, 0x527: 0x000c, 0x528: 0x000c, 0x529: 0x000c, - 0x52a: 0x000c, 0x52b: 0x000c, 0x52c: 0x000c, 0x52d: 0x000c, 0x52e: 0x000c, 0x52f: 0x000c, - 0x530: 0x000c, 0x531: 0x000d, 0x532: 0x000d, 0x533: 0x000d, 0x534: 0x000d, 0x535: 0x000d, - 0x536: 0x000d, 0x537: 0x000d, 0x538: 0x000d, 0x539: 0x000d, 0x53a: 0x000d, 0x53b: 0x000d, - 0x53c: 0x000d, 0x53d: 0x000d, 0x53e: 0x000d, 0x53f: 0x000d, - // Block 0x15, offset 0x540 - 0x540: 0x0001, 0x541: 0x0001, 0x542: 0x0001, 0x543: 0x0001, 0x544: 0x0001, 0x545: 0x0001, - 0x546: 0x0001, 0x547: 0x0001, 0x548: 0x0001, 0x549: 0x0001, 0x54a: 0x0001, 0x54b: 0x0001, - 0x54c: 0x0001, 0x54d: 0x0001, 0x54e: 0x0001, 0x54f: 0x0001, 0x550: 0x0001, 0x551: 0x0001, - 0x552: 0x0001, 0x553: 0x0001, 0x554: 0x0001, 0x555: 0x0001, 0x556: 0x0001, 0x557: 0x0001, - 0x558: 0x0001, 0x559: 0x0001, 0x55a: 0x0001, 0x55b: 0x0001, 0x55c: 0x0001, 0x55d: 0x0001, - 0x55e: 0x0001, 0x55f: 0x0001, 0x560: 0x0001, 0x561: 0x0001, 0x562: 0x0001, 0x563: 0x0001, - 0x564: 0x0001, 0x565: 0x0001, 0x566: 0x0001, 0x567: 0x0001, 0x568: 0x0001, 0x569: 0x0001, - 0x56a: 0x0001, 0x56b: 0x000c, 0x56c: 0x000c, 0x56d: 0x000c, 0x56e: 0x000c, 0x56f: 0x000c, - 0x570: 0x000c, 0x571: 0x000c, 0x572: 0x000c, 0x573: 0x000c, 0x574: 0x0001, 0x575: 0x0001, - 0x576: 0x000a, 0x577: 0x000a, 0x578: 0x000a, 0x579: 0x000a, 0x57a: 0x0001, 0x57b: 0x0001, - 0x57c: 0x0001, 0x57d: 0x000c, 0x57e: 0x0001, 0x57f: 0x0001, - // Block 0x16, offset 0x580 - 0x580: 0x0001, 0x581: 0x0001, 0x582: 0x0001, 0x583: 0x0001, 0x584: 0x0001, 0x585: 0x0001, - 0x586: 0x0001, 0x587: 0x0001, 0x588: 0x0001, 0x589: 0x0001, 0x58a: 0x0001, 0x58b: 0x0001, - 0x58c: 0x0001, 0x58d: 0x0001, 0x58e: 0x0001, 0x58f: 0x0001, 0x590: 0x0001, 0x591: 0x0001, - 0x592: 0x0001, 0x593: 0x0001, 0x594: 0x0001, 0x595: 0x0001, 0x596: 0x000c, 0x597: 0x000c, - 0x598: 0x000c, 0x599: 0x000c, 0x59a: 0x0001, 0x59b: 0x000c, 0x59c: 0x000c, 0x59d: 0x000c, - 0x59e: 0x000c, 0x59f: 0x000c, 0x5a0: 0x000c, 0x5a1: 0x000c, 0x5a2: 0x000c, 0x5a3: 0x000c, - 0x5a4: 0x0001, 0x5a5: 0x000c, 0x5a6: 0x000c, 0x5a7: 0x000c, 0x5a8: 0x0001, 0x5a9: 0x000c, - 0x5aa: 0x000c, 0x5ab: 0x000c, 0x5ac: 0x000c, 0x5ad: 0x000c, 0x5ae: 0x0001, 0x5af: 0x0001, - 0x5b0: 0x0001, 0x5b1: 0x0001, 0x5b2: 0x0001, 0x5b3: 0x0001, 0x5b4: 0x0001, 0x5b5: 0x0001, - 0x5b6: 0x0001, 0x5b7: 0x0001, 0x5b8: 0x0001, 0x5b9: 0x0001, 0x5ba: 0x0001, 0x5bb: 0x0001, - 0x5bc: 0x0001, 0x5bd: 0x0001, 0x5be: 0x0001, 0x5bf: 0x0001, - // Block 0x17, offset 0x5c0 - 0x5c0: 0x0001, 0x5c1: 0x0001, 0x5c2: 0x0001, 0x5c3: 0x0001, 0x5c4: 0x0001, 0x5c5: 0x0001, - 0x5c6: 0x0001, 0x5c7: 0x0001, 0x5c8: 0x0001, 0x5c9: 0x0001, 0x5ca: 0x0001, 0x5cb: 0x0001, - 0x5cc: 0x0001, 0x5cd: 0x0001, 0x5ce: 0x0001, 0x5cf: 0x0001, 0x5d0: 0x0001, 0x5d1: 0x0001, - 0x5d2: 0x0001, 0x5d3: 0x0001, 0x5d4: 0x0001, 0x5d5: 0x0001, 0x5d6: 0x0001, 0x5d7: 0x0001, - 0x5d8: 0x0001, 0x5d9: 0x000c, 0x5da: 0x000c, 0x5db: 0x000c, 0x5dc: 0x0001, 0x5dd: 0x0001, - 0x5de: 0x0001, 0x5df: 0x0001, 0x5e0: 0x000d, 0x5e1: 0x000d, 0x5e2: 0x000d, 0x5e3: 0x000d, - 0x5e4: 0x000d, 0x5e5: 0x000d, 0x5e6: 0x000d, 0x5e7: 0x000d, 0x5e8: 0x000d, 0x5e9: 0x000d, - 0x5ea: 0x000d, 0x5eb: 0x000d, 0x5ec: 0x000d, 0x5ed: 0x000d, 0x5ee: 0x000d, 0x5ef: 0x000d, - 0x5f0: 0x0001, 0x5f1: 0x0001, 0x5f2: 0x0001, 0x5f3: 0x0001, 0x5f4: 0x0001, 0x5f5: 0x0001, - 0x5f6: 0x0001, 0x5f7: 0x0001, 0x5f8: 0x0001, 0x5f9: 0x0001, 0x5fa: 0x0001, 0x5fb: 0x0001, - 0x5fc: 0x0001, 0x5fd: 0x0001, 0x5fe: 0x0001, 0x5ff: 0x0001, - // Block 0x18, offset 0x600 - 0x600: 0x0001, 0x601: 0x0001, 0x602: 0x0001, 0x603: 0x0001, 0x604: 0x0001, 0x605: 0x0001, - 0x606: 0x0001, 0x607: 0x0001, 0x608: 0x0001, 0x609: 0x0001, 0x60a: 0x0001, 0x60b: 0x0001, - 0x60c: 0x0001, 0x60d: 0x0001, 0x60e: 0x0001, 0x60f: 0x0001, 0x610: 0x0001, 0x611: 0x0001, - 0x612: 0x0001, 0x613: 0x0001, 0x614: 0x0001, 0x615: 0x0001, 0x616: 0x0001, 0x617: 0x0001, - 0x618: 0x0001, 0x619: 0x0001, 0x61a: 0x0001, 0x61b: 0x0001, 0x61c: 0x0001, 0x61d: 0x0001, - 0x61e: 0x0001, 0x61f: 0x0001, 0x620: 0x000d, 0x621: 0x000d, 0x622: 0x000d, 0x623: 0x000d, - 0x624: 0x000d, 0x625: 0x000d, 0x626: 0x000d, 0x627: 0x000d, 0x628: 0x000d, 0x629: 0x000d, - 0x62a: 0x000d, 0x62b: 0x000d, 0x62c: 0x000d, 0x62d: 0x000d, 0x62e: 0x000d, 0x62f: 0x000d, - 0x630: 0x000d, 0x631: 0x000d, 0x632: 0x000d, 0x633: 0x000d, 0x634: 0x000d, 0x635: 0x000d, - 0x636: 0x000d, 0x637: 0x000d, 0x638: 0x000d, 0x639: 0x000d, 0x63a: 0x000d, 0x63b: 0x000d, - 0x63c: 0x000d, 0x63d: 0x000d, 0x63e: 0x000d, 0x63f: 0x000d, - // Block 0x19, offset 0x640 - 0x640: 0x000d, 0x641: 0x000d, 0x642: 0x000d, 0x643: 0x000d, 0x644: 0x000d, 0x645: 0x000d, - 0x646: 0x000d, 0x647: 0x000d, 0x648: 0x000d, 0x649: 0x000d, 0x64a: 0x000d, 0x64b: 0x000d, - 0x64c: 0x000d, 0x64d: 0x000d, 0x64e: 0x000d, 0x64f: 0x000d, 0x650: 0x000d, 0x651: 0x000d, - 0x652: 0x000d, 0x653: 0x000c, 0x654: 0x000c, 0x655: 0x000c, 0x656: 0x000c, 0x657: 0x000c, - 0x658: 0x000c, 0x659: 0x000c, 0x65a: 0x000c, 0x65b: 0x000c, 0x65c: 0x000c, 0x65d: 0x000c, - 0x65e: 0x000c, 0x65f: 0x000c, 0x660: 0x000c, 0x661: 0x000c, 0x662: 0x0005, 0x663: 0x000c, - 0x664: 0x000c, 0x665: 0x000c, 0x666: 0x000c, 0x667: 0x000c, 0x668: 0x000c, 0x669: 0x000c, - 0x66a: 0x000c, 0x66b: 0x000c, 0x66c: 0x000c, 0x66d: 0x000c, 0x66e: 0x000c, 0x66f: 0x000c, - 0x670: 0x000c, 0x671: 0x000c, 0x672: 0x000c, 0x673: 0x000c, 0x674: 0x000c, 0x675: 0x000c, - 0x676: 0x000c, 0x677: 0x000c, 0x678: 0x000c, 0x679: 0x000c, 0x67a: 0x000c, 0x67b: 0x000c, - 0x67c: 0x000c, 0x67d: 0x000c, 0x67e: 0x000c, 0x67f: 0x000c, - // Block 0x1a, offset 0x680 - 0x680: 0x000c, 0x681: 0x000c, 0x682: 0x000c, - 0x6ba: 0x000c, - 0x6bc: 0x000c, - // Block 0x1b, offset 0x6c0 - 0x6c1: 0x000c, 0x6c2: 0x000c, 0x6c3: 0x000c, 0x6c4: 0x000c, 0x6c5: 0x000c, - 0x6c6: 0x000c, 0x6c7: 0x000c, 0x6c8: 0x000c, - 0x6cd: 0x000c, 0x6d1: 0x000c, - 0x6d2: 0x000c, 0x6d3: 0x000c, 0x6d4: 0x000c, 0x6d5: 0x000c, 0x6d6: 0x000c, 0x6d7: 0x000c, - 0x6e2: 0x000c, 0x6e3: 0x000c, - // Block 0x1c, offset 0x700 - 0x701: 0x000c, - 0x73c: 0x000c, - // Block 0x1d, offset 0x740 - 0x741: 0x000c, 0x742: 0x000c, 0x743: 0x000c, 0x744: 0x000c, - 0x74d: 0x000c, - 0x762: 0x000c, 0x763: 0x000c, - 0x772: 0x0004, 0x773: 0x0004, - 0x77b: 0x0004, - 0x77e: 0x000c, - // Block 0x1e, offset 0x780 - 0x781: 0x000c, 0x782: 0x000c, - 0x7bc: 0x000c, - // Block 0x1f, offset 0x7c0 - 0x7c1: 0x000c, 0x7c2: 0x000c, - 0x7c7: 0x000c, 0x7c8: 0x000c, 0x7cb: 0x000c, - 0x7cc: 0x000c, 0x7cd: 0x000c, 0x7d1: 0x000c, - 0x7f0: 0x000c, 0x7f1: 0x000c, 0x7f5: 0x000c, - // Block 0x20, offset 0x800 - 0x801: 0x000c, 0x802: 0x000c, 0x803: 0x000c, 0x804: 0x000c, 0x805: 0x000c, - 0x807: 0x000c, 0x808: 0x000c, - 0x80d: 0x000c, - 0x822: 0x000c, 0x823: 0x000c, - 0x831: 0x0004, - 0x83a: 0x000c, 0x83b: 0x000c, - 0x83c: 0x000c, 0x83d: 0x000c, 0x83e: 0x000c, 0x83f: 0x000c, - // Block 0x21, offset 0x840 - 0x841: 0x000c, - 0x87c: 0x000c, 0x87f: 0x000c, - // Block 0x22, offset 0x880 - 0x881: 0x000c, 0x882: 0x000c, 0x883: 0x000c, 0x884: 0x000c, - 0x88d: 0x000c, - 0x896: 0x000c, - 0x8a2: 0x000c, 0x8a3: 0x000c, - // Block 0x23, offset 0x8c0 - 0x8c2: 0x000c, - // Block 0x24, offset 0x900 - 0x900: 0x000c, - 0x90d: 0x000c, - 0x933: 0x000a, 0x934: 0x000a, 0x935: 0x000a, - 0x936: 0x000a, 0x937: 0x000a, 0x938: 0x000a, 0x939: 0x0004, 0x93a: 0x000a, - // Block 0x25, offset 0x940 - 0x940: 0x000c, 0x944: 0x000c, - 0x97e: 0x000c, 0x97f: 0x000c, - // Block 0x26, offset 0x980 - 0x980: 0x000c, - 0x986: 0x000c, 0x987: 0x000c, 0x988: 0x000c, 0x98a: 0x000c, 0x98b: 0x000c, - 0x98c: 0x000c, 0x98d: 0x000c, - 0x995: 0x000c, 0x996: 0x000c, - 0x9a2: 0x000c, 0x9a3: 0x000c, - 0x9b8: 0x000a, 0x9b9: 0x000a, 0x9ba: 0x000a, 0x9bb: 0x000a, - 0x9bc: 0x000a, 0x9bd: 0x000a, 0x9be: 0x000a, - // Block 0x27, offset 0x9c0 - 0x9cc: 0x000c, 0x9cd: 0x000c, - 0x9e2: 0x000c, 0x9e3: 0x000c, - // Block 0x28, offset 0xa00 - 0xa00: 0x000c, 0xa01: 0x000c, - 0xa3b: 0x000c, - 0xa3c: 0x000c, - // Block 0x29, offset 0xa40 - 0xa41: 0x000c, 0xa42: 0x000c, 0xa43: 0x000c, 0xa44: 0x000c, - 0xa4d: 0x000c, - 0xa62: 0x000c, 0xa63: 0x000c, - // Block 0x2a, offset 0xa80 - 0xa8a: 0x000c, - 0xa92: 0x000c, 0xa93: 0x000c, 0xa94: 0x000c, 0xa96: 0x000c, - // Block 0x2b, offset 0xac0 - 0xaf1: 0x000c, 0xaf4: 0x000c, 0xaf5: 0x000c, - 0xaf6: 0x000c, 0xaf7: 0x000c, 0xaf8: 0x000c, 0xaf9: 0x000c, 0xafa: 0x000c, - 0xaff: 0x0004, - // Block 0x2c, offset 0xb00 - 0xb07: 0x000c, 0xb08: 0x000c, 0xb09: 0x000c, 0xb0a: 0x000c, 0xb0b: 0x000c, - 0xb0c: 0x000c, 0xb0d: 0x000c, 0xb0e: 0x000c, - // Block 0x2d, offset 0xb40 - 0xb71: 0x000c, 0xb74: 0x000c, 0xb75: 0x000c, - 0xb76: 0x000c, 0xb77: 0x000c, 0xb78: 0x000c, 0xb79: 0x000c, 0xb7b: 0x000c, - 0xb7c: 0x000c, - // Block 0x2e, offset 0xb80 - 0xb88: 0x000c, 0xb89: 0x000c, 0xb8a: 0x000c, 0xb8b: 0x000c, - 0xb8c: 0x000c, 0xb8d: 0x000c, - // Block 0x2f, offset 0xbc0 - 0xbd8: 0x000c, 0xbd9: 0x000c, - 0xbf5: 0x000c, - 0xbf7: 0x000c, 0xbf9: 0x000c, 0xbfa: 0x003a, 0xbfb: 0x002a, - 0xbfc: 0x003a, 0xbfd: 0x002a, - // Block 0x30, offset 0xc00 - 0xc31: 0x000c, 0xc32: 0x000c, 0xc33: 0x000c, 0xc34: 0x000c, 0xc35: 0x000c, - 0xc36: 0x000c, 0xc37: 0x000c, 0xc38: 0x000c, 0xc39: 0x000c, 0xc3a: 0x000c, 0xc3b: 0x000c, - 0xc3c: 0x000c, 0xc3d: 0x000c, 0xc3e: 0x000c, - // Block 0x31, offset 0xc40 - 0xc40: 0x000c, 0xc41: 0x000c, 0xc42: 0x000c, 0xc43: 0x000c, 0xc44: 0x000c, - 0xc46: 0x000c, 0xc47: 0x000c, - 0xc4d: 0x000c, 0xc4e: 0x000c, 0xc4f: 0x000c, 0xc50: 0x000c, 0xc51: 0x000c, - 0xc52: 0x000c, 0xc53: 0x000c, 0xc54: 0x000c, 0xc55: 0x000c, 0xc56: 0x000c, 0xc57: 0x000c, - 0xc59: 0x000c, 0xc5a: 0x000c, 0xc5b: 0x000c, 0xc5c: 0x000c, 0xc5d: 0x000c, - 0xc5e: 0x000c, 0xc5f: 0x000c, 0xc60: 0x000c, 0xc61: 0x000c, 0xc62: 0x000c, 0xc63: 0x000c, - 0xc64: 0x000c, 0xc65: 0x000c, 0xc66: 0x000c, 0xc67: 0x000c, 0xc68: 0x000c, 0xc69: 0x000c, - 0xc6a: 0x000c, 0xc6b: 0x000c, 0xc6c: 0x000c, 0xc6d: 0x000c, 0xc6e: 0x000c, 0xc6f: 0x000c, - 0xc70: 0x000c, 0xc71: 0x000c, 0xc72: 0x000c, 0xc73: 0x000c, 0xc74: 0x000c, 0xc75: 0x000c, - 0xc76: 0x000c, 0xc77: 0x000c, 0xc78: 0x000c, 0xc79: 0x000c, 0xc7a: 0x000c, 0xc7b: 0x000c, - 0xc7c: 0x000c, - // Block 0x32, offset 0xc80 - 0xc86: 0x000c, - // Block 0x33, offset 0xcc0 - 0xced: 0x000c, 0xcee: 0x000c, 0xcef: 0x000c, - 0xcf0: 0x000c, 0xcf2: 0x000c, 0xcf3: 0x000c, 0xcf4: 0x000c, 0xcf5: 0x000c, - 0xcf6: 0x000c, 0xcf7: 0x000c, 0xcf9: 0x000c, 0xcfa: 0x000c, - 0xcfd: 0x000c, 0xcfe: 0x000c, - // Block 0x34, offset 0xd00 - 0xd18: 0x000c, 0xd19: 0x000c, - 0xd1e: 0x000c, 0xd1f: 0x000c, 0xd20: 0x000c, - 0xd31: 0x000c, 0xd32: 0x000c, 0xd33: 0x000c, 0xd34: 0x000c, - // Block 0x35, offset 0xd40 - 0xd42: 0x000c, 0xd45: 0x000c, - 0xd46: 0x000c, - 0xd4d: 0x000c, - 0xd5d: 0x000c, - // Block 0x36, offset 0xd80 - 0xd9d: 0x000c, - 0xd9e: 0x000c, 0xd9f: 0x000c, - // Block 0x37, offset 0xdc0 - 0xdd0: 0x000a, 0xdd1: 0x000a, - 0xdd2: 0x000a, 0xdd3: 0x000a, 0xdd4: 0x000a, 0xdd5: 0x000a, 0xdd6: 0x000a, 0xdd7: 0x000a, - 0xdd8: 0x000a, 0xdd9: 0x000a, - // Block 0x38, offset 0xe00 - 0xe00: 0x000a, - // Block 0x39, offset 0xe40 - 0xe40: 0x0009, - 0xe5b: 0x007a, 0xe5c: 0x006a, - // Block 0x3a, offset 0xe80 - 0xe92: 0x000c, 0xe93: 0x000c, 0xe94: 0x000c, - 0xeb2: 0x000c, 0xeb3: 0x000c, 0xeb4: 0x000c, - // Block 0x3b, offset 0xec0 - 0xed2: 0x000c, 0xed3: 0x000c, - 0xef2: 0x000c, 0xef3: 0x000c, - // Block 0x3c, offset 0xf00 - 0xf34: 0x000c, 0xf35: 0x000c, - 0xf37: 0x000c, 0xf38: 0x000c, 0xf39: 0x000c, 0xf3a: 0x000c, 0xf3b: 0x000c, - 0xf3c: 0x000c, 0xf3d: 0x000c, - // Block 0x3d, offset 0xf40 - 0xf46: 0x000c, 0xf49: 0x000c, 0xf4a: 0x000c, 0xf4b: 0x000c, - 0xf4c: 0x000c, 0xf4d: 0x000c, 0xf4e: 0x000c, 0xf4f: 0x000c, 0xf50: 0x000c, 0xf51: 0x000c, - 0xf52: 0x000c, 0xf53: 0x000c, - 0xf5b: 0x0004, 0xf5d: 0x000c, - 0xf70: 0x000a, 0xf71: 0x000a, 0xf72: 0x000a, 0xf73: 0x000a, 0xf74: 0x000a, 0xf75: 0x000a, - 0xf76: 0x000a, 0xf77: 0x000a, 0xf78: 0x000a, 0xf79: 0x000a, - // Block 0x3e, offset 0xf80 - 0xf80: 0x000a, 0xf81: 0x000a, 0xf82: 0x000a, 0xf83: 0x000a, 0xf84: 0x000a, 0xf85: 0x000a, - 0xf86: 0x000a, 0xf87: 0x000a, 0xf88: 0x000a, 0xf89: 0x000a, 0xf8a: 0x000a, 0xf8b: 0x000c, - 0xf8c: 0x000c, 0xf8d: 0x000c, 0xf8e: 0x000b, - // Block 0x3f, offset 0xfc0 - 0xfc5: 0x000c, - 0xfc6: 0x000c, - 0xfe9: 0x000c, - // Block 0x40, offset 0x1000 - 0x1020: 0x000c, 0x1021: 0x000c, 0x1022: 0x000c, - 0x1027: 0x000c, 0x1028: 0x000c, - 0x1032: 0x000c, - 0x1039: 0x000c, 0x103a: 0x000c, 0x103b: 0x000c, - // Block 0x41, offset 0x1040 - 0x1040: 0x000a, 0x1044: 0x000a, 0x1045: 0x000a, - // Block 0x42, offset 0x1080 - 0x109e: 0x000a, 0x109f: 0x000a, 0x10a0: 0x000a, 0x10a1: 0x000a, 0x10a2: 0x000a, 0x10a3: 0x000a, - 0x10a4: 0x000a, 0x10a5: 0x000a, 0x10a6: 0x000a, 0x10a7: 0x000a, 0x10a8: 0x000a, 0x10a9: 0x000a, - 0x10aa: 0x000a, 0x10ab: 0x000a, 0x10ac: 0x000a, 0x10ad: 0x000a, 0x10ae: 0x000a, 0x10af: 0x000a, - 0x10b0: 0x000a, 0x10b1: 0x000a, 0x10b2: 0x000a, 0x10b3: 0x000a, 0x10b4: 0x000a, 0x10b5: 0x000a, - 0x10b6: 0x000a, 0x10b7: 0x000a, 0x10b8: 0x000a, 0x10b9: 0x000a, 0x10ba: 0x000a, 0x10bb: 0x000a, - 0x10bc: 0x000a, 0x10bd: 0x000a, 0x10be: 0x000a, 0x10bf: 0x000a, - // Block 0x43, offset 0x10c0 - 0x10d7: 0x000c, - 0x10d8: 0x000c, 0x10db: 0x000c, - // Block 0x44, offset 0x1100 - 0x1116: 0x000c, - 0x1118: 0x000c, 0x1119: 0x000c, 0x111a: 0x000c, 0x111b: 0x000c, 0x111c: 0x000c, 0x111d: 0x000c, - 0x111e: 0x000c, 0x1120: 0x000c, 0x1122: 0x000c, - 0x1125: 0x000c, 0x1126: 0x000c, 0x1127: 0x000c, 0x1128: 0x000c, 0x1129: 0x000c, - 0x112a: 0x000c, 0x112b: 0x000c, 0x112c: 0x000c, - 0x1133: 0x000c, 0x1134: 0x000c, 0x1135: 0x000c, - 0x1136: 0x000c, 0x1137: 0x000c, 0x1138: 0x000c, 0x1139: 0x000c, 0x113a: 0x000c, 0x113b: 0x000c, - 0x113c: 0x000c, 0x113f: 0x000c, - // Block 0x45, offset 0x1140 - 0x1170: 0x000c, 0x1171: 0x000c, 0x1172: 0x000c, 0x1173: 0x000c, 0x1174: 0x000c, 0x1175: 0x000c, - 0x1176: 0x000c, 0x1177: 0x000c, 0x1178: 0x000c, 0x1179: 0x000c, 0x117a: 0x000c, 0x117b: 0x000c, - 0x117c: 0x000c, 0x117d: 0x000c, 0x117e: 0x000c, - // Block 0x46, offset 0x1180 - 0x1180: 0x000c, 0x1181: 0x000c, 0x1182: 0x000c, 0x1183: 0x000c, - 0x11b4: 0x000c, - 0x11b6: 0x000c, 0x11b7: 0x000c, 0x11b8: 0x000c, 0x11b9: 0x000c, 0x11ba: 0x000c, - 0x11bc: 0x000c, - // Block 0x47, offset 0x11c0 - 0x11c2: 0x000c, - 0x11eb: 0x000c, 0x11ec: 0x000c, 0x11ed: 0x000c, 0x11ee: 0x000c, 0x11ef: 0x000c, - 0x11f0: 0x000c, 0x11f1: 0x000c, 0x11f2: 0x000c, 0x11f3: 0x000c, - // Block 0x48, offset 0x1200 - 0x1200: 0x000c, 0x1201: 0x000c, - 0x1222: 0x000c, 0x1223: 0x000c, - 0x1224: 0x000c, 0x1225: 0x000c, 0x1228: 0x000c, 0x1229: 0x000c, - 0x122b: 0x000c, 0x122c: 0x000c, 0x122d: 0x000c, - // Block 0x49, offset 0x1240 - 0x1266: 0x000c, 0x1268: 0x000c, 0x1269: 0x000c, - 0x126d: 0x000c, 0x126f: 0x000c, - 0x1270: 0x000c, 0x1271: 0x000c, - // Block 0x4a, offset 0x1280 - 0x12ac: 0x000c, 0x12ad: 0x000c, 0x12ae: 0x000c, 0x12af: 0x000c, - 0x12b0: 0x000c, 0x12b1: 0x000c, 0x12b2: 0x000c, 0x12b3: 0x000c, - 0x12b6: 0x000c, 0x12b7: 0x000c, - // Block 0x4b, offset 0x12c0 - 0x12d0: 0x000c, 0x12d1: 0x000c, - 0x12d2: 0x000c, 0x12d4: 0x000c, 0x12d5: 0x000c, 0x12d6: 0x000c, 0x12d7: 0x000c, - 0x12d8: 0x000c, 0x12d9: 0x000c, 0x12da: 0x000c, 0x12db: 0x000c, 0x12dc: 0x000c, 0x12dd: 0x000c, - 0x12de: 0x000c, 0x12df: 0x000c, 0x12e0: 0x000c, 0x12e2: 0x000c, 0x12e3: 0x000c, - 0x12e4: 0x000c, 0x12e5: 0x000c, 0x12e6: 0x000c, 0x12e7: 0x000c, 0x12e8: 0x000c, - 0x12ed: 0x000c, - 0x12f4: 0x000c, - 0x12f8: 0x000c, 0x12f9: 0x000c, - // Block 0x4c, offset 0x1300 - 0x1300: 0x000c, 0x1301: 0x000c, 0x1302: 0x000c, 0x1303: 0x000c, 0x1304: 0x000c, 0x1305: 0x000c, - 0x1306: 0x000c, 0x1307: 0x000c, 0x1308: 0x000c, 0x1309: 0x000c, 0x130a: 0x000c, 0x130b: 0x000c, - 0x130c: 0x000c, 0x130d: 0x000c, 0x130e: 0x000c, 0x130f: 0x000c, 0x1310: 0x000c, 0x1311: 0x000c, - 0x1312: 0x000c, 0x1313: 0x000c, 0x1314: 0x000c, 0x1315: 0x000c, 0x1316: 0x000c, 0x1317: 0x000c, - 0x1318: 0x000c, 0x1319: 0x000c, 0x131a: 0x000c, 0x131b: 0x000c, 0x131c: 0x000c, 0x131d: 0x000c, - 0x131e: 0x000c, 0x131f: 0x000c, 0x1320: 0x000c, 0x1321: 0x000c, 0x1322: 0x000c, 0x1323: 0x000c, - 0x1324: 0x000c, 0x1325: 0x000c, 0x1326: 0x000c, 0x1327: 0x000c, 0x1328: 0x000c, 0x1329: 0x000c, - 0x132a: 0x000c, 0x132b: 0x000c, 0x132c: 0x000c, 0x132d: 0x000c, 0x132e: 0x000c, 0x132f: 0x000c, - 0x1330: 0x000c, 0x1331: 0x000c, 0x1332: 0x000c, 0x1333: 0x000c, 0x1334: 0x000c, 0x1335: 0x000c, - 0x1336: 0x000c, 0x1337: 0x000c, 0x1338: 0x000c, 0x1339: 0x000c, 0x133b: 0x000c, - 0x133c: 0x000c, 0x133d: 0x000c, 0x133e: 0x000c, 0x133f: 0x000c, - // Block 0x4d, offset 0x1340 - 0x137d: 0x000a, 0x137f: 0x000a, - // Block 0x4e, offset 0x1380 - 0x1380: 0x000a, 0x1381: 0x000a, - 0x138d: 0x000a, 0x138e: 0x000a, 0x138f: 0x000a, - 0x139d: 0x000a, - 0x139e: 0x000a, 0x139f: 0x000a, - 0x13ad: 0x000a, 0x13ae: 0x000a, 0x13af: 0x000a, - 0x13bd: 0x000a, 0x13be: 0x000a, - // Block 0x4f, offset 0x13c0 - 0x13c0: 0x0009, 0x13c1: 0x0009, 0x13c2: 0x0009, 0x13c3: 0x0009, 0x13c4: 0x0009, 0x13c5: 0x0009, - 0x13c6: 0x0009, 0x13c7: 0x0009, 0x13c8: 0x0009, 0x13c9: 0x0009, 0x13ca: 0x0009, 0x13cb: 0x000b, - 0x13cc: 0x000b, 0x13cd: 0x000b, 0x13cf: 0x0001, 0x13d0: 0x000a, 0x13d1: 0x000a, - 0x13d2: 0x000a, 0x13d3: 0x000a, 0x13d4: 0x000a, 0x13d5: 0x000a, 0x13d6: 0x000a, 0x13d7: 0x000a, - 0x13d8: 0x000a, 0x13d9: 0x000a, 0x13da: 0x000a, 0x13db: 0x000a, 0x13dc: 0x000a, 0x13dd: 0x000a, - 0x13de: 0x000a, 0x13df: 0x000a, 0x13e0: 0x000a, 0x13e1: 0x000a, 0x13e2: 0x000a, 0x13e3: 0x000a, - 0x13e4: 0x000a, 0x13e5: 0x000a, 0x13e6: 0x000a, 0x13e7: 0x000a, 0x13e8: 0x0009, 0x13e9: 0x0007, - 0x13ea: 0x000e, 0x13eb: 0x000e, 0x13ec: 0x000e, 0x13ed: 0x000e, 0x13ee: 0x000e, 0x13ef: 0x0006, - 0x13f0: 0x0004, 0x13f1: 0x0004, 0x13f2: 0x0004, 0x13f3: 0x0004, 0x13f4: 0x0004, 0x13f5: 0x000a, - 0x13f6: 0x000a, 0x13f7: 0x000a, 0x13f8: 0x000a, 0x13f9: 0x000a, 0x13fa: 0x000a, 0x13fb: 0x000a, - 0x13fc: 0x000a, 0x13fd: 0x000a, 0x13fe: 0x000a, 0x13ff: 0x000a, - // Block 0x50, offset 0x1400 - 0x1400: 0x000a, 0x1401: 0x000a, 0x1402: 0x000a, 0x1403: 0x000a, 0x1404: 0x0006, 0x1405: 0x009a, - 0x1406: 0x008a, 0x1407: 0x000a, 0x1408: 0x000a, 0x1409: 0x000a, 0x140a: 0x000a, 0x140b: 0x000a, - 0x140c: 0x000a, 0x140d: 0x000a, 0x140e: 0x000a, 0x140f: 0x000a, 0x1410: 0x000a, 0x1411: 0x000a, - 0x1412: 0x000a, 0x1413: 0x000a, 0x1414: 0x000a, 0x1415: 0x000a, 0x1416: 0x000a, 0x1417: 0x000a, - 0x1418: 0x000a, 0x1419: 0x000a, 0x141a: 0x000a, 0x141b: 0x000a, 0x141c: 0x000a, 0x141d: 0x000a, - 0x141e: 0x000a, 0x141f: 0x0009, 0x1420: 0x000b, 0x1421: 0x000b, 0x1422: 0x000b, 0x1423: 0x000b, - 0x1424: 0x000b, 0x1425: 0x000b, 0x1426: 0x000e, 0x1427: 0x000e, 0x1428: 0x000e, 0x1429: 0x000e, - 0x142a: 0x000b, 0x142b: 0x000b, 0x142c: 0x000b, 0x142d: 0x000b, 0x142e: 0x000b, 0x142f: 0x000b, - 0x1430: 0x0002, 0x1434: 0x0002, 0x1435: 0x0002, - 0x1436: 0x0002, 0x1437: 0x0002, 0x1438: 0x0002, 0x1439: 0x0002, 0x143a: 0x0003, 0x143b: 0x0003, - 0x143c: 0x000a, 0x143d: 0x009a, 0x143e: 0x008a, - // Block 0x51, offset 0x1440 - 0x1440: 0x0002, 0x1441: 0x0002, 0x1442: 0x0002, 0x1443: 0x0002, 0x1444: 0x0002, 0x1445: 0x0002, - 0x1446: 0x0002, 0x1447: 0x0002, 0x1448: 0x0002, 0x1449: 0x0002, 0x144a: 0x0003, 0x144b: 0x0003, - 0x144c: 0x000a, 0x144d: 0x009a, 0x144e: 0x008a, - 0x1460: 0x0004, 0x1461: 0x0004, 0x1462: 0x0004, 0x1463: 0x0004, - 0x1464: 0x0004, 0x1465: 0x0004, 0x1466: 0x0004, 0x1467: 0x0004, 0x1468: 0x0004, 0x1469: 0x0004, - 0x146a: 0x0004, 0x146b: 0x0004, 0x146c: 0x0004, 0x146d: 0x0004, 0x146e: 0x0004, 0x146f: 0x0004, - 0x1470: 0x0004, 0x1471: 0x0004, 0x1472: 0x0004, 0x1473: 0x0004, 0x1474: 0x0004, 0x1475: 0x0004, - 0x1476: 0x0004, 0x1477: 0x0004, 0x1478: 0x0004, 0x1479: 0x0004, 0x147a: 0x0004, 0x147b: 0x0004, - 0x147c: 0x0004, 0x147d: 0x0004, 0x147e: 0x0004, 0x147f: 0x0004, - // Block 0x52, offset 0x1480 - 0x1480: 0x0004, 0x1481: 0x0004, 0x1482: 0x0004, 0x1483: 0x0004, 0x1484: 0x0004, 0x1485: 0x0004, - 0x1486: 0x0004, 0x1487: 0x0004, 0x1488: 0x0004, 0x1489: 0x0004, 0x148a: 0x0004, 0x148b: 0x0004, - 0x148c: 0x0004, 0x148d: 0x0004, 0x148e: 0x0004, 0x148f: 0x0004, 0x1490: 0x000c, 0x1491: 0x000c, - 0x1492: 0x000c, 0x1493: 0x000c, 0x1494: 0x000c, 0x1495: 0x000c, 0x1496: 0x000c, 0x1497: 0x000c, - 0x1498: 0x000c, 0x1499: 0x000c, 0x149a: 0x000c, 0x149b: 0x000c, 0x149c: 0x000c, 0x149d: 0x000c, - 0x149e: 0x000c, 0x149f: 0x000c, 0x14a0: 0x000c, 0x14a1: 0x000c, 0x14a2: 0x000c, 0x14a3: 0x000c, - 0x14a4: 0x000c, 0x14a5: 0x000c, 0x14a6: 0x000c, 0x14a7: 0x000c, 0x14a8: 0x000c, 0x14a9: 0x000c, - 0x14aa: 0x000c, 0x14ab: 0x000c, 0x14ac: 0x000c, 0x14ad: 0x000c, 0x14ae: 0x000c, 0x14af: 0x000c, - 0x14b0: 0x000c, - // Block 0x53, offset 0x14c0 - 0x14c0: 0x000a, 0x14c1: 0x000a, 0x14c3: 0x000a, 0x14c4: 0x000a, 0x14c5: 0x000a, - 0x14c6: 0x000a, 0x14c8: 0x000a, 0x14c9: 0x000a, - 0x14d4: 0x000a, 0x14d6: 0x000a, 0x14d7: 0x000a, - 0x14d8: 0x000a, - 0x14de: 0x000a, 0x14df: 0x000a, 0x14e0: 0x000a, 0x14e1: 0x000a, 0x14e2: 0x000a, 0x14e3: 0x000a, - 0x14e5: 0x000a, 0x14e7: 0x000a, 0x14e9: 0x000a, - 0x14ee: 0x0004, - 0x14fa: 0x000a, 0x14fb: 0x000a, - // Block 0x54, offset 0x1500 - 0x1500: 0x000a, 0x1501: 0x000a, 0x1502: 0x000a, 0x1503: 0x000a, 0x1504: 0x000a, - 0x150a: 0x000a, 0x150b: 0x000a, - 0x150c: 0x000a, 0x150d: 0x000a, 0x1510: 0x000a, 0x1511: 0x000a, - 0x1512: 0x000a, 0x1513: 0x000a, 0x1514: 0x000a, 0x1515: 0x000a, 0x1516: 0x000a, 0x1517: 0x000a, - 0x1518: 0x000a, 0x1519: 0x000a, 0x151a: 0x000a, 0x151b: 0x000a, 0x151c: 0x000a, 0x151d: 0x000a, - 0x151e: 0x000a, 0x151f: 0x000a, - // Block 0x55, offset 0x1540 - 0x1549: 0x000a, 0x154a: 0x000a, 0x154b: 0x000a, - 0x1550: 0x000a, 0x1551: 0x000a, - 0x1552: 0x000a, 0x1553: 0x000a, 0x1554: 0x000a, 0x1555: 0x000a, 0x1556: 0x000a, 0x1557: 0x000a, - 0x1558: 0x000a, 0x1559: 0x000a, 0x155a: 0x000a, 0x155b: 0x000a, 0x155c: 0x000a, 0x155d: 0x000a, - 0x155e: 0x000a, 0x155f: 0x000a, 0x1560: 0x000a, 0x1561: 0x000a, 0x1562: 0x000a, 0x1563: 0x000a, - 0x1564: 0x000a, 0x1565: 0x000a, 0x1566: 0x000a, 0x1567: 0x000a, 0x1568: 0x000a, 0x1569: 0x000a, - 0x156a: 0x000a, 0x156b: 0x000a, 0x156c: 0x000a, 0x156d: 0x000a, 0x156e: 0x000a, 0x156f: 0x000a, - 0x1570: 0x000a, 0x1571: 0x000a, 0x1572: 0x000a, 0x1573: 0x000a, 0x1574: 0x000a, 0x1575: 0x000a, - 0x1576: 0x000a, 0x1577: 0x000a, 0x1578: 0x000a, 0x1579: 0x000a, 0x157a: 0x000a, 0x157b: 0x000a, - 0x157c: 0x000a, 0x157d: 0x000a, 0x157e: 0x000a, 0x157f: 0x000a, - // Block 0x56, offset 0x1580 - 0x1580: 0x000a, 0x1581: 0x000a, 0x1582: 0x000a, 0x1583: 0x000a, 0x1584: 0x000a, 0x1585: 0x000a, - 0x1586: 0x000a, 0x1587: 0x000a, 0x1588: 0x000a, 0x1589: 0x000a, 0x158a: 0x000a, 0x158b: 0x000a, - 0x158c: 0x000a, 0x158d: 0x000a, 0x158e: 0x000a, 0x158f: 0x000a, 0x1590: 0x000a, 0x1591: 0x000a, - 0x1592: 0x000a, 0x1593: 0x000a, 0x1594: 0x000a, 0x1595: 0x000a, 0x1596: 0x000a, 0x1597: 0x000a, - 0x1598: 0x000a, 0x1599: 0x000a, 0x159a: 0x000a, 0x159b: 0x000a, 0x159c: 0x000a, 0x159d: 0x000a, - 0x159e: 0x000a, 0x159f: 0x000a, 0x15a0: 0x000a, 0x15a1: 0x000a, 0x15a2: 0x000a, 0x15a3: 0x000a, - 0x15a4: 0x000a, 0x15a5: 0x000a, 0x15a6: 0x000a, 0x15a7: 0x000a, 0x15a8: 0x000a, 0x15a9: 0x000a, - 0x15aa: 0x000a, 0x15ab: 0x000a, 0x15ac: 0x000a, 0x15ad: 0x000a, 0x15ae: 0x000a, 0x15af: 0x000a, - 0x15b0: 0x000a, 0x15b1: 0x000a, 0x15b2: 0x000a, 0x15b3: 0x000a, 0x15b4: 0x000a, 0x15b5: 0x000a, - 0x15b6: 0x000a, 0x15b7: 0x000a, 0x15b8: 0x000a, 0x15b9: 0x000a, 0x15ba: 0x000a, 0x15bb: 0x000a, - 0x15bc: 0x000a, 0x15bd: 0x000a, 0x15be: 0x000a, 0x15bf: 0x000a, - // Block 0x57, offset 0x15c0 - 0x15c0: 0x000a, 0x15c1: 0x000a, 0x15c2: 0x000a, 0x15c3: 0x000a, 0x15c4: 0x000a, 0x15c5: 0x000a, - 0x15c6: 0x000a, 0x15c7: 0x000a, 0x15c8: 0x000a, 0x15c9: 0x000a, 0x15ca: 0x000a, 0x15cb: 0x000a, - 0x15cc: 0x000a, 0x15cd: 0x000a, 0x15ce: 0x000a, 0x15cf: 0x000a, 0x15d0: 0x000a, 0x15d1: 0x000a, - 0x15d2: 0x0003, 0x15d3: 0x0004, 0x15d4: 0x000a, 0x15d5: 0x000a, 0x15d6: 0x000a, 0x15d7: 0x000a, - 0x15d8: 0x000a, 0x15d9: 0x000a, 0x15da: 0x000a, 0x15db: 0x000a, 0x15dc: 0x000a, 0x15dd: 0x000a, - 0x15de: 0x000a, 0x15df: 0x000a, 0x15e0: 0x000a, 0x15e1: 0x000a, 0x15e2: 0x000a, 0x15e3: 0x000a, - 0x15e4: 0x000a, 0x15e5: 0x000a, 0x15e6: 0x000a, 0x15e7: 0x000a, 0x15e8: 0x000a, 0x15e9: 0x000a, - 0x15ea: 0x000a, 0x15eb: 0x000a, 0x15ec: 0x000a, 0x15ed: 0x000a, 0x15ee: 0x000a, 0x15ef: 0x000a, - 0x15f0: 0x000a, 0x15f1: 0x000a, 0x15f2: 0x000a, 0x15f3: 0x000a, 0x15f4: 0x000a, 0x15f5: 0x000a, - 0x15f6: 0x000a, 0x15f7: 0x000a, 0x15f8: 0x000a, 0x15f9: 0x000a, 0x15fa: 0x000a, 0x15fb: 0x000a, - 0x15fc: 0x000a, 0x15fd: 0x000a, 0x15fe: 0x000a, 0x15ff: 0x000a, - // Block 0x58, offset 0x1600 - 0x1600: 0x000a, 0x1601: 0x000a, 0x1602: 0x000a, 0x1603: 0x000a, 0x1604: 0x000a, 0x1605: 0x000a, - 0x1606: 0x000a, 0x1607: 0x000a, 0x1608: 0x003a, 0x1609: 0x002a, 0x160a: 0x003a, 0x160b: 0x002a, - 0x160c: 0x000a, 0x160d: 0x000a, 0x160e: 0x000a, 0x160f: 0x000a, 0x1610: 0x000a, 0x1611: 0x000a, - 0x1612: 0x000a, 0x1613: 0x000a, 0x1614: 0x000a, 0x1615: 0x000a, 0x1616: 0x000a, 0x1617: 0x000a, - 0x1618: 0x000a, 0x1619: 0x000a, 0x161a: 0x000a, 0x161b: 0x000a, 0x161c: 0x000a, 0x161d: 0x000a, - 0x161e: 0x000a, 0x161f: 0x000a, 0x1620: 0x000a, 0x1621: 0x000a, 0x1622: 0x000a, 0x1623: 0x000a, - 0x1624: 0x000a, 0x1625: 0x000a, 0x1626: 0x000a, 0x1627: 0x000a, 0x1628: 0x000a, 0x1629: 0x009a, - 0x162a: 0x008a, 0x162b: 0x000a, 0x162c: 0x000a, 0x162d: 0x000a, 0x162e: 0x000a, 0x162f: 0x000a, - 0x1630: 0x000a, 0x1631: 0x000a, 0x1632: 0x000a, 0x1633: 0x000a, 0x1634: 0x000a, 0x1635: 0x000a, - // Block 0x59, offset 0x1640 - 0x167b: 0x000a, - 0x167c: 0x000a, 0x167d: 0x000a, 0x167e: 0x000a, 0x167f: 0x000a, - // Block 0x5a, offset 0x1680 - 0x1680: 0x000a, 0x1681: 0x000a, 0x1682: 0x000a, 0x1683: 0x000a, 0x1684: 0x000a, 0x1685: 0x000a, - 0x1686: 0x000a, 0x1687: 0x000a, 0x1688: 0x000a, 0x1689: 0x000a, 0x168a: 0x000a, 0x168b: 0x000a, - 0x168c: 0x000a, 0x168d: 0x000a, 0x168e: 0x000a, 0x168f: 0x000a, 0x1690: 0x000a, 0x1691: 0x000a, - 0x1692: 0x000a, 0x1693: 0x000a, 0x1694: 0x000a, 0x1696: 0x000a, 0x1697: 0x000a, - 0x1698: 0x000a, 0x1699: 0x000a, 0x169a: 0x000a, 0x169b: 0x000a, 0x169c: 0x000a, 0x169d: 0x000a, - 0x169e: 0x000a, 0x169f: 0x000a, 0x16a0: 0x000a, 0x16a1: 0x000a, 0x16a2: 0x000a, 0x16a3: 0x000a, - 0x16a4: 0x000a, 0x16a5: 0x000a, 0x16a6: 0x000a, 0x16a7: 0x000a, 0x16a8: 0x000a, 0x16a9: 0x000a, - 0x16aa: 0x000a, 0x16ab: 0x000a, 0x16ac: 0x000a, 0x16ad: 0x000a, 0x16ae: 0x000a, 0x16af: 0x000a, - 0x16b0: 0x000a, 0x16b1: 0x000a, 0x16b2: 0x000a, 0x16b3: 0x000a, 0x16b4: 0x000a, 0x16b5: 0x000a, - 0x16b6: 0x000a, 0x16b7: 0x000a, 0x16b8: 0x000a, 0x16b9: 0x000a, 0x16ba: 0x000a, 0x16bb: 0x000a, - 0x16bc: 0x000a, 0x16bd: 0x000a, 0x16be: 0x000a, 0x16bf: 0x000a, - // Block 0x5b, offset 0x16c0 - 0x16c0: 0x000a, 0x16c1: 0x000a, 0x16c2: 0x000a, 0x16c3: 0x000a, 0x16c4: 0x000a, 0x16c5: 0x000a, - 0x16c6: 0x000a, 0x16c7: 0x000a, 0x16c8: 0x000a, 0x16c9: 0x000a, 0x16ca: 0x000a, 0x16cb: 0x000a, - 0x16cc: 0x000a, 0x16cd: 0x000a, 0x16ce: 0x000a, 0x16cf: 0x000a, 0x16d0: 0x000a, 0x16d1: 0x000a, - 0x16d2: 0x000a, 0x16d3: 0x000a, 0x16d4: 0x000a, 0x16d5: 0x000a, 0x16d6: 0x000a, 0x16d7: 0x000a, - 0x16d8: 0x000a, 0x16d9: 0x000a, 0x16da: 0x000a, 0x16db: 0x000a, 0x16dc: 0x000a, 0x16dd: 0x000a, - 0x16de: 0x000a, 0x16df: 0x000a, 0x16e0: 0x000a, 0x16e1: 0x000a, 0x16e2: 0x000a, 0x16e3: 0x000a, - 0x16e4: 0x000a, 0x16e5: 0x000a, 0x16e6: 0x000a, - // Block 0x5c, offset 0x1700 - 0x1700: 0x000a, 0x1701: 0x000a, 0x1702: 0x000a, 0x1703: 0x000a, 0x1704: 0x000a, 0x1705: 0x000a, - 0x1706: 0x000a, 0x1707: 0x000a, 0x1708: 0x000a, 0x1709: 0x000a, 0x170a: 0x000a, - 0x1720: 0x000a, 0x1721: 0x000a, 0x1722: 0x000a, 0x1723: 0x000a, - 0x1724: 0x000a, 0x1725: 0x000a, 0x1726: 0x000a, 0x1727: 0x000a, 0x1728: 0x000a, 0x1729: 0x000a, - 0x172a: 0x000a, 0x172b: 0x000a, 0x172c: 0x000a, 0x172d: 0x000a, 0x172e: 0x000a, 0x172f: 0x000a, - 0x1730: 0x000a, 0x1731: 0x000a, 0x1732: 0x000a, 0x1733: 0x000a, 0x1734: 0x000a, 0x1735: 0x000a, - 0x1736: 0x000a, 0x1737: 0x000a, 0x1738: 0x000a, 0x1739: 0x000a, 0x173a: 0x000a, 0x173b: 0x000a, - 0x173c: 0x000a, 0x173d: 0x000a, 0x173e: 0x000a, 0x173f: 0x000a, - // Block 0x5d, offset 0x1740 - 0x1740: 0x000a, 0x1741: 0x000a, 0x1742: 0x000a, 0x1743: 0x000a, 0x1744: 0x000a, 0x1745: 0x000a, - 0x1746: 0x000a, 0x1747: 0x000a, 0x1748: 0x0002, 0x1749: 0x0002, 0x174a: 0x0002, 0x174b: 0x0002, - 0x174c: 0x0002, 0x174d: 0x0002, 0x174e: 0x0002, 0x174f: 0x0002, 0x1750: 0x0002, 0x1751: 0x0002, - 0x1752: 0x0002, 0x1753: 0x0002, 0x1754: 0x0002, 0x1755: 0x0002, 0x1756: 0x0002, 0x1757: 0x0002, - 0x1758: 0x0002, 0x1759: 0x0002, 0x175a: 0x0002, 0x175b: 0x0002, - // Block 0x5e, offset 0x1780 - 0x17aa: 0x000a, 0x17ab: 0x000a, 0x17ac: 0x000a, 0x17ad: 0x000a, 0x17ae: 0x000a, 0x17af: 0x000a, - 0x17b0: 0x000a, 0x17b1: 0x000a, 0x17b2: 0x000a, 0x17b3: 0x000a, 0x17b4: 0x000a, 0x17b5: 0x000a, - 0x17b6: 0x000a, 0x17b7: 0x000a, 0x17b8: 0x000a, 0x17b9: 0x000a, 0x17ba: 0x000a, 0x17bb: 0x000a, - 0x17bc: 0x000a, 0x17bd: 0x000a, 0x17be: 0x000a, 0x17bf: 0x000a, - // Block 0x5f, offset 0x17c0 - 0x17c0: 0x000a, 0x17c1: 0x000a, 0x17c2: 0x000a, 0x17c3: 0x000a, 0x17c4: 0x000a, 0x17c5: 0x000a, - 0x17c6: 0x000a, 0x17c7: 0x000a, 0x17c8: 0x000a, 0x17c9: 0x000a, 0x17ca: 0x000a, 0x17cb: 0x000a, - 0x17cc: 0x000a, 0x17cd: 0x000a, 0x17ce: 0x000a, 0x17cf: 0x000a, 0x17d0: 0x000a, 0x17d1: 0x000a, - 0x17d2: 0x000a, 0x17d3: 0x000a, 0x17d4: 0x000a, 0x17d5: 0x000a, 0x17d6: 0x000a, 0x17d7: 0x000a, - 0x17d8: 0x000a, 0x17d9: 0x000a, 0x17da: 0x000a, 0x17db: 0x000a, 0x17dc: 0x000a, 0x17dd: 0x000a, - 0x17de: 0x000a, 0x17df: 0x000a, 0x17e0: 0x000a, 0x17e1: 0x000a, 0x17e2: 0x000a, 0x17e3: 0x000a, - 0x17e4: 0x000a, 0x17e5: 0x000a, 0x17e6: 0x000a, 0x17e7: 0x000a, 0x17e8: 0x000a, 0x17e9: 0x000a, - 0x17ea: 0x000a, 0x17eb: 0x000a, 0x17ed: 0x000a, 0x17ee: 0x000a, 0x17ef: 0x000a, - 0x17f0: 0x000a, 0x17f1: 0x000a, 0x17f2: 0x000a, 0x17f3: 0x000a, 0x17f4: 0x000a, 0x17f5: 0x000a, - 0x17f6: 0x000a, 0x17f7: 0x000a, 0x17f8: 0x000a, 0x17f9: 0x000a, 0x17fa: 0x000a, 0x17fb: 0x000a, - 0x17fc: 0x000a, 0x17fd: 0x000a, 0x17fe: 0x000a, 0x17ff: 0x000a, - // Block 0x60, offset 0x1800 - 0x1800: 0x000a, 0x1801: 0x000a, 0x1802: 0x000a, 0x1803: 0x000a, 0x1804: 0x000a, 0x1805: 0x000a, - 0x1806: 0x000a, 0x1807: 0x000a, 0x1808: 0x000a, 0x1809: 0x000a, 0x180a: 0x000a, 0x180b: 0x000a, - 0x180c: 0x000a, 0x180d: 0x000a, 0x180e: 0x000a, 0x180f: 0x000a, 0x1810: 0x000a, 0x1811: 0x000a, - 0x1812: 0x000a, 0x1813: 0x000a, 0x1814: 0x000a, 0x1815: 0x000a, 0x1816: 0x000a, 0x1817: 0x000a, - 0x1818: 0x000a, 0x1819: 0x000a, 0x181a: 0x000a, 0x181b: 0x000a, 0x181c: 0x000a, 0x181d: 0x000a, - 0x181e: 0x000a, 0x181f: 0x000a, 0x1820: 0x000a, 0x1821: 0x000a, 0x1822: 0x000a, 0x1823: 0x000a, - 0x1824: 0x000a, 0x1825: 0x000a, 0x1826: 0x000a, 0x1827: 0x000a, 0x1828: 0x003a, 0x1829: 0x002a, - 0x182a: 0x003a, 0x182b: 0x002a, 0x182c: 0x003a, 0x182d: 0x002a, 0x182e: 0x003a, 0x182f: 0x002a, - 0x1830: 0x003a, 0x1831: 0x002a, 0x1832: 0x003a, 0x1833: 0x002a, 0x1834: 0x003a, 0x1835: 0x002a, - 0x1836: 0x000a, 0x1837: 0x000a, 0x1838: 0x000a, 0x1839: 0x000a, 0x183a: 0x000a, 0x183b: 0x000a, - 0x183c: 0x000a, 0x183d: 0x000a, 0x183e: 0x000a, 0x183f: 0x000a, - // Block 0x61, offset 0x1840 - 0x1840: 0x000a, 0x1841: 0x000a, 0x1842: 0x000a, 0x1843: 0x000a, 0x1844: 0x000a, 0x1845: 0x009a, - 0x1846: 0x008a, 0x1847: 0x000a, 0x1848: 0x000a, 0x1849: 0x000a, 0x184a: 0x000a, 0x184b: 0x000a, - 0x184c: 0x000a, 0x184d: 0x000a, 0x184e: 0x000a, 0x184f: 0x000a, 0x1850: 0x000a, 0x1851: 0x000a, - 0x1852: 0x000a, 0x1853: 0x000a, 0x1854: 0x000a, 0x1855: 0x000a, 0x1856: 0x000a, 0x1857: 0x000a, - 0x1858: 0x000a, 0x1859: 0x000a, 0x185a: 0x000a, 0x185b: 0x000a, 0x185c: 0x000a, 0x185d: 0x000a, - 0x185e: 0x000a, 0x185f: 0x000a, 0x1860: 0x000a, 0x1861: 0x000a, 0x1862: 0x000a, 0x1863: 0x000a, - 0x1864: 0x000a, 0x1865: 0x000a, 0x1866: 0x003a, 0x1867: 0x002a, 0x1868: 0x003a, 0x1869: 0x002a, - 0x186a: 0x003a, 0x186b: 0x002a, 0x186c: 0x003a, 0x186d: 0x002a, 0x186e: 0x003a, 0x186f: 0x002a, - 0x1870: 0x000a, 0x1871: 0x000a, 0x1872: 0x000a, 0x1873: 0x000a, 0x1874: 0x000a, 0x1875: 0x000a, - 0x1876: 0x000a, 0x1877: 0x000a, 0x1878: 0x000a, 0x1879: 0x000a, 0x187a: 0x000a, 0x187b: 0x000a, - 0x187c: 0x000a, 0x187d: 0x000a, 0x187e: 0x000a, 0x187f: 0x000a, - // Block 0x62, offset 0x1880 - 0x1880: 0x000a, 0x1881: 0x000a, 0x1882: 0x000a, 0x1883: 0x007a, 0x1884: 0x006a, 0x1885: 0x009a, - 0x1886: 0x008a, 0x1887: 0x00ba, 0x1888: 0x00aa, 0x1889: 0x009a, 0x188a: 0x008a, 0x188b: 0x007a, - 0x188c: 0x006a, 0x188d: 0x00da, 0x188e: 0x002a, 0x188f: 0x003a, 0x1890: 0x00ca, 0x1891: 0x009a, - 0x1892: 0x008a, 0x1893: 0x007a, 0x1894: 0x006a, 0x1895: 0x009a, 0x1896: 0x008a, 0x1897: 0x00ba, - 0x1898: 0x00aa, 0x1899: 0x000a, 0x189a: 0x000a, 0x189b: 0x000a, 0x189c: 0x000a, 0x189d: 0x000a, - 0x189e: 0x000a, 0x189f: 0x000a, 0x18a0: 0x000a, 0x18a1: 0x000a, 0x18a2: 0x000a, 0x18a3: 0x000a, - 0x18a4: 0x000a, 0x18a5: 0x000a, 0x18a6: 0x000a, 0x18a7: 0x000a, 0x18a8: 0x000a, 0x18a9: 0x000a, - 0x18aa: 0x000a, 0x18ab: 0x000a, 0x18ac: 0x000a, 0x18ad: 0x000a, 0x18ae: 0x000a, 0x18af: 0x000a, - 0x18b0: 0x000a, 0x18b1: 0x000a, 0x18b2: 0x000a, 0x18b3: 0x000a, 0x18b4: 0x000a, 0x18b5: 0x000a, - 0x18b6: 0x000a, 0x18b7: 0x000a, 0x18b8: 0x000a, 0x18b9: 0x000a, 0x18ba: 0x000a, 0x18bb: 0x000a, - 0x18bc: 0x000a, 0x18bd: 0x000a, 0x18be: 0x000a, 0x18bf: 0x000a, - // Block 0x63, offset 0x18c0 - 0x18c0: 0x000a, 0x18c1: 0x000a, 0x18c2: 0x000a, 0x18c3: 0x000a, 0x18c4: 0x000a, 0x18c5: 0x000a, - 0x18c6: 0x000a, 0x18c7: 0x000a, 0x18c8: 0x000a, 0x18c9: 0x000a, 0x18ca: 0x000a, 0x18cb: 0x000a, - 0x18cc: 0x000a, 0x18cd: 0x000a, 0x18ce: 0x000a, 0x18cf: 0x000a, 0x18d0: 0x000a, 0x18d1: 0x000a, - 0x18d2: 0x000a, 0x18d3: 0x000a, 0x18d4: 0x000a, 0x18d5: 0x000a, 0x18d6: 0x000a, 0x18d7: 0x000a, - 0x18d8: 0x003a, 0x18d9: 0x002a, 0x18da: 0x003a, 0x18db: 0x002a, 0x18dc: 0x000a, 0x18dd: 0x000a, - 0x18de: 0x000a, 0x18df: 0x000a, 0x18e0: 0x000a, 0x18e1: 0x000a, 0x18e2: 0x000a, 0x18e3: 0x000a, - 0x18e4: 0x000a, 0x18e5: 0x000a, 0x18e6: 0x000a, 0x18e7: 0x000a, 0x18e8: 0x000a, 0x18e9: 0x000a, - 0x18ea: 0x000a, 0x18eb: 0x000a, 0x18ec: 0x000a, 0x18ed: 0x000a, 0x18ee: 0x000a, 0x18ef: 0x000a, - 0x18f0: 0x000a, 0x18f1: 0x000a, 0x18f2: 0x000a, 0x18f3: 0x000a, 0x18f4: 0x000a, 0x18f5: 0x000a, - 0x18f6: 0x000a, 0x18f7: 0x000a, 0x18f8: 0x000a, 0x18f9: 0x000a, 0x18fa: 0x000a, 0x18fb: 0x000a, - 0x18fc: 0x003a, 0x18fd: 0x002a, 0x18fe: 0x000a, 0x18ff: 0x000a, - // Block 0x64, offset 0x1900 - 0x1900: 0x000a, 0x1901: 0x000a, 0x1902: 0x000a, 0x1903: 0x000a, 0x1904: 0x000a, 0x1905: 0x000a, - 0x1906: 0x000a, 0x1907: 0x000a, 0x1908: 0x000a, 0x1909: 0x000a, 0x190a: 0x000a, 0x190b: 0x000a, - 0x190c: 0x000a, 0x190d: 0x000a, 0x190e: 0x000a, 0x190f: 0x000a, 0x1910: 0x000a, 0x1911: 0x000a, - 0x1912: 0x000a, 0x1913: 0x000a, 0x1914: 0x000a, 0x1915: 0x000a, 0x1916: 0x000a, 0x1917: 0x000a, - 0x1918: 0x000a, 0x1919: 0x000a, 0x191a: 0x000a, 0x191b: 0x000a, 0x191c: 0x000a, 0x191d: 0x000a, - 0x191e: 0x000a, 0x191f: 0x000a, 0x1920: 0x000a, 0x1921: 0x000a, 0x1922: 0x000a, 0x1923: 0x000a, - 0x1924: 0x000a, 0x1925: 0x000a, 0x1926: 0x000a, 0x1927: 0x000a, 0x1928: 0x000a, 0x1929: 0x000a, - 0x192a: 0x000a, 0x192b: 0x000a, 0x192c: 0x000a, 0x192d: 0x000a, 0x192e: 0x000a, 0x192f: 0x000a, - 0x1930: 0x000a, 0x1931: 0x000a, 0x1932: 0x000a, 0x1933: 0x000a, - 0x1936: 0x000a, 0x1937: 0x000a, 0x1938: 0x000a, 0x1939: 0x000a, 0x193a: 0x000a, 0x193b: 0x000a, - 0x193c: 0x000a, 0x193d: 0x000a, 0x193e: 0x000a, 0x193f: 0x000a, - // Block 0x65, offset 0x1940 - 0x1940: 0x000a, 0x1941: 0x000a, 0x1942: 0x000a, 0x1943: 0x000a, 0x1944: 0x000a, 0x1945: 0x000a, - 0x1946: 0x000a, 0x1947: 0x000a, 0x1948: 0x000a, 0x1949: 0x000a, 0x194a: 0x000a, 0x194b: 0x000a, - 0x194c: 0x000a, 0x194d: 0x000a, 0x194e: 0x000a, 0x194f: 0x000a, 0x1950: 0x000a, 0x1951: 0x000a, - 0x1952: 0x000a, 0x1953: 0x000a, 0x1954: 0x000a, 0x1955: 0x000a, - 0x1958: 0x000a, 0x1959: 0x000a, 0x195a: 0x000a, 0x195b: 0x000a, 0x195c: 0x000a, 0x195d: 0x000a, - 0x195e: 0x000a, 0x195f: 0x000a, 0x1960: 0x000a, 0x1961: 0x000a, 0x1962: 0x000a, 0x1963: 0x000a, - 0x1964: 0x000a, 0x1965: 0x000a, 0x1966: 0x000a, 0x1967: 0x000a, 0x1968: 0x000a, 0x1969: 0x000a, - 0x196a: 0x000a, 0x196b: 0x000a, 0x196c: 0x000a, 0x196d: 0x000a, 0x196e: 0x000a, 0x196f: 0x000a, - 0x1970: 0x000a, 0x1971: 0x000a, 0x1972: 0x000a, 0x1973: 0x000a, 0x1974: 0x000a, 0x1975: 0x000a, - 0x1976: 0x000a, 0x1977: 0x000a, 0x1978: 0x000a, 0x1979: 0x000a, 0x197a: 0x000a, 0x197b: 0x000a, - 0x197c: 0x000a, 0x197d: 0x000a, 0x197e: 0x000a, 0x197f: 0x000a, - // Block 0x66, offset 0x1980 - 0x1980: 0x000a, 0x1981: 0x000a, 0x1982: 0x000a, 0x1983: 0x000a, 0x1984: 0x000a, 0x1985: 0x000a, - 0x1986: 0x000a, 0x1987: 0x000a, 0x1988: 0x000a, 0x198a: 0x000a, 0x198b: 0x000a, - 0x198c: 0x000a, 0x198d: 0x000a, 0x198e: 0x000a, 0x198f: 0x000a, 0x1990: 0x000a, 0x1991: 0x000a, - 0x1992: 0x000a, 0x1993: 0x000a, 0x1994: 0x000a, 0x1995: 0x000a, 0x1996: 0x000a, 0x1997: 0x000a, - 0x1998: 0x000a, 0x1999: 0x000a, 0x199a: 0x000a, 0x199b: 0x000a, 0x199c: 0x000a, 0x199d: 0x000a, - 0x199e: 0x000a, 0x199f: 0x000a, 0x19a0: 0x000a, 0x19a1: 0x000a, 0x19a2: 0x000a, 0x19a3: 0x000a, - 0x19a4: 0x000a, 0x19a5: 0x000a, 0x19a6: 0x000a, 0x19a7: 0x000a, 0x19a8: 0x000a, 0x19a9: 0x000a, - 0x19aa: 0x000a, 0x19ab: 0x000a, 0x19ac: 0x000a, 0x19ad: 0x000a, 0x19ae: 0x000a, 0x19af: 0x000a, - 0x19b0: 0x000a, 0x19b1: 0x000a, 0x19b2: 0x000a, 0x19b3: 0x000a, 0x19b4: 0x000a, 0x19b5: 0x000a, - 0x19b6: 0x000a, 0x19b7: 0x000a, 0x19b8: 0x000a, 0x19b9: 0x000a, 0x19ba: 0x000a, 0x19bb: 0x000a, - 0x19bc: 0x000a, 0x19bd: 0x000a, 0x19be: 0x000a, - // Block 0x67, offset 0x19c0 - 0x19e5: 0x000a, 0x19e6: 0x000a, 0x19e7: 0x000a, 0x19e8: 0x000a, 0x19e9: 0x000a, - 0x19ea: 0x000a, 0x19ef: 0x000c, - 0x19f0: 0x000c, 0x19f1: 0x000c, - 0x19f9: 0x000a, 0x19fa: 0x000a, 0x19fb: 0x000a, - 0x19fc: 0x000a, 0x19fd: 0x000a, 0x19fe: 0x000a, 0x19ff: 0x000a, - // Block 0x68, offset 0x1a00 - 0x1a3f: 0x000c, - // Block 0x69, offset 0x1a40 - 0x1a60: 0x000c, 0x1a61: 0x000c, 0x1a62: 0x000c, 0x1a63: 0x000c, - 0x1a64: 0x000c, 0x1a65: 0x000c, 0x1a66: 0x000c, 0x1a67: 0x000c, 0x1a68: 0x000c, 0x1a69: 0x000c, - 0x1a6a: 0x000c, 0x1a6b: 0x000c, 0x1a6c: 0x000c, 0x1a6d: 0x000c, 0x1a6e: 0x000c, 0x1a6f: 0x000c, - 0x1a70: 0x000c, 0x1a71: 0x000c, 0x1a72: 0x000c, 0x1a73: 0x000c, 0x1a74: 0x000c, 0x1a75: 0x000c, - 0x1a76: 0x000c, 0x1a77: 0x000c, 0x1a78: 0x000c, 0x1a79: 0x000c, 0x1a7a: 0x000c, 0x1a7b: 0x000c, - 0x1a7c: 0x000c, 0x1a7d: 0x000c, 0x1a7e: 0x000c, 0x1a7f: 0x000c, - // Block 0x6a, offset 0x1a80 - 0x1a80: 0x000a, 0x1a81: 0x000a, 0x1a82: 0x000a, 0x1a83: 0x000a, 0x1a84: 0x000a, 0x1a85: 0x000a, - 0x1a86: 0x000a, 0x1a87: 0x000a, 0x1a88: 0x000a, 0x1a89: 0x000a, 0x1a8a: 0x000a, 0x1a8b: 0x000a, - 0x1a8c: 0x000a, 0x1a8d: 0x000a, 0x1a8e: 0x000a, 0x1a8f: 0x000a, 0x1a90: 0x000a, 0x1a91: 0x000a, - 0x1a92: 0x000a, 0x1a93: 0x000a, 0x1a94: 0x000a, 0x1a95: 0x000a, 0x1a96: 0x000a, 0x1a97: 0x000a, - 0x1a98: 0x000a, 0x1a99: 0x000a, 0x1a9a: 0x000a, 0x1a9b: 0x000a, 0x1a9c: 0x000a, 0x1a9d: 0x000a, - 0x1a9e: 0x000a, 0x1a9f: 0x000a, 0x1aa0: 0x000a, 0x1aa1: 0x000a, 0x1aa2: 0x003a, 0x1aa3: 0x002a, - 0x1aa4: 0x003a, 0x1aa5: 0x002a, 0x1aa6: 0x003a, 0x1aa7: 0x002a, 0x1aa8: 0x003a, 0x1aa9: 0x002a, - 0x1aaa: 0x000a, 0x1aab: 0x000a, 0x1aac: 0x000a, 0x1aad: 0x000a, 0x1aae: 0x000a, 0x1aaf: 0x000a, - 0x1ab0: 0x000a, 0x1ab1: 0x000a, 0x1ab2: 0x000a, 0x1ab3: 0x000a, 0x1ab4: 0x000a, 0x1ab5: 0x000a, - 0x1ab6: 0x000a, 0x1ab7: 0x000a, 0x1ab8: 0x000a, 0x1ab9: 0x000a, 0x1aba: 0x000a, 0x1abb: 0x000a, - 0x1abc: 0x000a, 0x1abd: 0x000a, 0x1abe: 0x000a, 0x1abf: 0x000a, - // Block 0x6b, offset 0x1ac0 - 0x1ac0: 0x000a, 0x1ac1: 0x000a, 0x1ac2: 0x000a, 0x1ac3: 0x000a, 0x1ac4: 0x000a, 0x1ac5: 0x000a, - 0x1ac6: 0x000a, 0x1ac7: 0x000a, 0x1ac8: 0x000a, 0x1ac9: 0x000a, 0x1aca: 0x000a, 0x1acb: 0x000a, - 0x1acc: 0x000a, 0x1acd: 0x000a, 0x1ace: 0x000a, - // Block 0x6c, offset 0x1b00 - 0x1b00: 0x000a, 0x1b01: 0x000a, 0x1b02: 0x000a, 0x1b03: 0x000a, 0x1b04: 0x000a, 0x1b05: 0x000a, - 0x1b06: 0x000a, 0x1b07: 0x000a, 0x1b08: 0x000a, 0x1b09: 0x000a, 0x1b0a: 0x000a, 0x1b0b: 0x000a, - 0x1b0c: 0x000a, 0x1b0d: 0x000a, 0x1b0e: 0x000a, 0x1b0f: 0x000a, 0x1b10: 0x000a, 0x1b11: 0x000a, - 0x1b12: 0x000a, 0x1b13: 0x000a, 0x1b14: 0x000a, 0x1b15: 0x000a, 0x1b16: 0x000a, 0x1b17: 0x000a, - 0x1b18: 0x000a, 0x1b19: 0x000a, 0x1b1b: 0x000a, 0x1b1c: 0x000a, 0x1b1d: 0x000a, - 0x1b1e: 0x000a, 0x1b1f: 0x000a, 0x1b20: 0x000a, 0x1b21: 0x000a, 0x1b22: 0x000a, 0x1b23: 0x000a, - 0x1b24: 0x000a, 0x1b25: 0x000a, 0x1b26: 0x000a, 0x1b27: 0x000a, 0x1b28: 0x000a, 0x1b29: 0x000a, - 0x1b2a: 0x000a, 0x1b2b: 0x000a, 0x1b2c: 0x000a, 0x1b2d: 0x000a, 0x1b2e: 0x000a, 0x1b2f: 0x000a, - 0x1b30: 0x000a, 0x1b31: 0x000a, 0x1b32: 0x000a, 0x1b33: 0x000a, 0x1b34: 0x000a, 0x1b35: 0x000a, - 0x1b36: 0x000a, 0x1b37: 0x000a, 0x1b38: 0x000a, 0x1b39: 0x000a, 0x1b3a: 0x000a, 0x1b3b: 0x000a, - 0x1b3c: 0x000a, 0x1b3d: 0x000a, 0x1b3e: 0x000a, 0x1b3f: 0x000a, - // Block 0x6d, offset 0x1b40 - 0x1b40: 0x000a, 0x1b41: 0x000a, 0x1b42: 0x000a, 0x1b43: 0x000a, 0x1b44: 0x000a, 0x1b45: 0x000a, - 0x1b46: 0x000a, 0x1b47: 0x000a, 0x1b48: 0x000a, 0x1b49: 0x000a, 0x1b4a: 0x000a, 0x1b4b: 0x000a, - 0x1b4c: 0x000a, 0x1b4d: 0x000a, 0x1b4e: 0x000a, 0x1b4f: 0x000a, 0x1b50: 0x000a, 0x1b51: 0x000a, - 0x1b52: 0x000a, 0x1b53: 0x000a, 0x1b54: 0x000a, 0x1b55: 0x000a, 0x1b56: 0x000a, 0x1b57: 0x000a, - 0x1b58: 0x000a, 0x1b59: 0x000a, 0x1b5a: 0x000a, 0x1b5b: 0x000a, 0x1b5c: 0x000a, 0x1b5d: 0x000a, - 0x1b5e: 0x000a, 0x1b5f: 0x000a, 0x1b60: 0x000a, 0x1b61: 0x000a, 0x1b62: 0x000a, 0x1b63: 0x000a, - 0x1b64: 0x000a, 0x1b65: 0x000a, 0x1b66: 0x000a, 0x1b67: 0x000a, 0x1b68: 0x000a, 0x1b69: 0x000a, - 0x1b6a: 0x000a, 0x1b6b: 0x000a, 0x1b6c: 0x000a, 0x1b6d: 0x000a, 0x1b6e: 0x000a, 0x1b6f: 0x000a, - 0x1b70: 0x000a, 0x1b71: 0x000a, 0x1b72: 0x000a, 0x1b73: 0x000a, - // Block 0x6e, offset 0x1b80 - 0x1b80: 0x000a, 0x1b81: 0x000a, 0x1b82: 0x000a, 0x1b83: 0x000a, 0x1b84: 0x000a, 0x1b85: 0x000a, - 0x1b86: 0x000a, 0x1b87: 0x000a, 0x1b88: 0x000a, 0x1b89: 0x000a, 0x1b8a: 0x000a, 0x1b8b: 0x000a, - 0x1b8c: 0x000a, 0x1b8d: 0x000a, 0x1b8e: 0x000a, 0x1b8f: 0x000a, 0x1b90: 0x000a, 0x1b91: 0x000a, - 0x1b92: 0x000a, 0x1b93: 0x000a, 0x1b94: 0x000a, 0x1b95: 0x000a, - 0x1bb0: 0x000a, 0x1bb1: 0x000a, 0x1bb2: 0x000a, 0x1bb3: 0x000a, 0x1bb4: 0x000a, 0x1bb5: 0x000a, - 0x1bb6: 0x000a, 0x1bb7: 0x000a, 0x1bb8: 0x000a, 0x1bb9: 0x000a, 0x1bba: 0x000a, 0x1bbb: 0x000a, - // Block 0x6f, offset 0x1bc0 - 0x1bc0: 0x0009, 0x1bc1: 0x000a, 0x1bc2: 0x000a, 0x1bc3: 0x000a, 0x1bc4: 0x000a, - 0x1bc8: 0x003a, 0x1bc9: 0x002a, 0x1bca: 0x003a, 0x1bcb: 0x002a, - 0x1bcc: 0x003a, 0x1bcd: 0x002a, 0x1bce: 0x003a, 0x1bcf: 0x002a, 0x1bd0: 0x003a, 0x1bd1: 0x002a, - 0x1bd2: 0x000a, 0x1bd3: 0x000a, 0x1bd4: 0x003a, 0x1bd5: 0x002a, 0x1bd6: 0x003a, 0x1bd7: 0x002a, - 0x1bd8: 0x003a, 0x1bd9: 0x002a, 0x1bda: 0x003a, 0x1bdb: 0x002a, 0x1bdc: 0x000a, 0x1bdd: 0x000a, - 0x1bde: 0x000a, 0x1bdf: 0x000a, 0x1be0: 0x000a, - 0x1bea: 0x000c, 0x1beb: 0x000c, 0x1bec: 0x000c, 0x1bed: 0x000c, - 0x1bf0: 0x000a, - 0x1bf6: 0x000a, 0x1bf7: 0x000a, - 0x1bfd: 0x000a, 0x1bfe: 0x000a, 0x1bff: 0x000a, - // Block 0x70, offset 0x1c00 - 0x1c19: 0x000c, 0x1c1a: 0x000c, 0x1c1b: 0x000a, 0x1c1c: 0x000a, - 0x1c20: 0x000a, - // Block 0x71, offset 0x1c40 - 0x1c7b: 0x000a, - // Block 0x72, offset 0x1c80 - 0x1c80: 0x000a, 0x1c81: 0x000a, 0x1c82: 0x000a, 0x1c83: 0x000a, 0x1c84: 0x000a, 0x1c85: 0x000a, - 0x1c86: 0x000a, 0x1c87: 0x000a, 0x1c88: 0x000a, 0x1c89: 0x000a, 0x1c8a: 0x000a, 0x1c8b: 0x000a, - 0x1c8c: 0x000a, 0x1c8d: 0x000a, 0x1c8e: 0x000a, 0x1c8f: 0x000a, 0x1c90: 0x000a, 0x1c91: 0x000a, - 0x1c92: 0x000a, 0x1c93: 0x000a, 0x1c94: 0x000a, 0x1c95: 0x000a, 0x1c96: 0x000a, 0x1c97: 0x000a, - 0x1c98: 0x000a, 0x1c99: 0x000a, 0x1c9a: 0x000a, 0x1c9b: 0x000a, 0x1c9c: 0x000a, 0x1c9d: 0x000a, - 0x1c9e: 0x000a, 0x1c9f: 0x000a, 0x1ca0: 0x000a, 0x1ca1: 0x000a, 0x1ca2: 0x000a, 0x1ca3: 0x000a, - // Block 0x73, offset 0x1cc0 - 0x1cdd: 0x000a, - 0x1cde: 0x000a, - // Block 0x74, offset 0x1d00 - 0x1d10: 0x000a, 0x1d11: 0x000a, - 0x1d12: 0x000a, 0x1d13: 0x000a, 0x1d14: 0x000a, 0x1d15: 0x000a, 0x1d16: 0x000a, 0x1d17: 0x000a, - 0x1d18: 0x000a, 0x1d19: 0x000a, 0x1d1a: 0x000a, 0x1d1b: 0x000a, 0x1d1c: 0x000a, 0x1d1d: 0x000a, - 0x1d1e: 0x000a, 0x1d1f: 0x000a, - 0x1d3c: 0x000a, 0x1d3d: 0x000a, 0x1d3e: 0x000a, - // Block 0x75, offset 0x1d40 - 0x1d71: 0x000a, 0x1d72: 0x000a, 0x1d73: 0x000a, 0x1d74: 0x000a, 0x1d75: 0x000a, - 0x1d76: 0x000a, 0x1d77: 0x000a, 0x1d78: 0x000a, 0x1d79: 0x000a, 0x1d7a: 0x000a, 0x1d7b: 0x000a, - 0x1d7c: 0x000a, 0x1d7d: 0x000a, 0x1d7e: 0x000a, 0x1d7f: 0x000a, - // Block 0x76, offset 0x1d80 - 0x1d8c: 0x000a, 0x1d8d: 0x000a, 0x1d8e: 0x000a, 0x1d8f: 0x000a, - // Block 0x77, offset 0x1dc0 - 0x1df7: 0x000a, 0x1df8: 0x000a, 0x1df9: 0x000a, 0x1dfa: 0x000a, - // Block 0x78, offset 0x1e00 - 0x1e1e: 0x000a, 0x1e1f: 0x000a, - 0x1e3f: 0x000a, - // Block 0x79, offset 0x1e40 - 0x1e50: 0x000a, 0x1e51: 0x000a, - 0x1e52: 0x000a, 0x1e53: 0x000a, 0x1e54: 0x000a, 0x1e55: 0x000a, 0x1e56: 0x000a, 0x1e57: 0x000a, - 0x1e58: 0x000a, 0x1e59: 0x000a, 0x1e5a: 0x000a, 0x1e5b: 0x000a, 0x1e5c: 0x000a, 0x1e5d: 0x000a, - 0x1e5e: 0x000a, 0x1e5f: 0x000a, 0x1e60: 0x000a, 0x1e61: 0x000a, 0x1e62: 0x000a, 0x1e63: 0x000a, - 0x1e64: 0x000a, 0x1e65: 0x000a, 0x1e66: 0x000a, 0x1e67: 0x000a, 0x1e68: 0x000a, 0x1e69: 0x000a, - 0x1e6a: 0x000a, 0x1e6b: 0x000a, 0x1e6c: 0x000a, 0x1e6d: 0x000a, 0x1e6e: 0x000a, 0x1e6f: 0x000a, - 0x1e70: 0x000a, 0x1e71: 0x000a, 0x1e72: 0x000a, 0x1e73: 0x000a, 0x1e74: 0x000a, 0x1e75: 0x000a, - 0x1e76: 0x000a, 0x1e77: 0x000a, 0x1e78: 0x000a, 0x1e79: 0x000a, 0x1e7a: 0x000a, 0x1e7b: 0x000a, - 0x1e7c: 0x000a, 0x1e7d: 0x000a, 0x1e7e: 0x000a, 0x1e7f: 0x000a, - // Block 0x7a, offset 0x1e80 - 0x1e80: 0x000a, 0x1e81: 0x000a, 0x1e82: 0x000a, 0x1e83: 0x000a, 0x1e84: 0x000a, 0x1e85: 0x000a, - 0x1e86: 0x000a, - // Block 0x7b, offset 0x1ec0 - 0x1ecd: 0x000a, 0x1ece: 0x000a, 0x1ecf: 0x000a, - // Block 0x7c, offset 0x1f00 - 0x1f2f: 0x000c, - 0x1f30: 0x000c, 0x1f31: 0x000c, 0x1f32: 0x000c, 0x1f33: 0x000a, 0x1f34: 0x000c, 0x1f35: 0x000c, - 0x1f36: 0x000c, 0x1f37: 0x000c, 0x1f38: 0x000c, 0x1f39: 0x000c, 0x1f3a: 0x000c, 0x1f3b: 0x000c, - 0x1f3c: 0x000c, 0x1f3d: 0x000c, 0x1f3e: 0x000a, 0x1f3f: 0x000a, - // Block 0x7d, offset 0x1f40 - 0x1f5e: 0x000c, 0x1f5f: 0x000c, - // Block 0x7e, offset 0x1f80 - 0x1fb0: 0x000c, 0x1fb1: 0x000c, - // Block 0x7f, offset 0x1fc0 - 0x1fc0: 0x000a, 0x1fc1: 0x000a, 0x1fc2: 0x000a, 0x1fc3: 0x000a, 0x1fc4: 0x000a, 0x1fc5: 0x000a, - 0x1fc6: 0x000a, 0x1fc7: 0x000a, 0x1fc8: 0x000a, 0x1fc9: 0x000a, 0x1fca: 0x000a, 0x1fcb: 0x000a, - 0x1fcc: 0x000a, 0x1fcd: 0x000a, 0x1fce: 0x000a, 0x1fcf: 0x000a, 0x1fd0: 0x000a, 0x1fd1: 0x000a, - 0x1fd2: 0x000a, 0x1fd3: 0x000a, 0x1fd4: 0x000a, 0x1fd5: 0x000a, 0x1fd6: 0x000a, 0x1fd7: 0x000a, - 0x1fd8: 0x000a, 0x1fd9: 0x000a, 0x1fda: 0x000a, 0x1fdb: 0x000a, 0x1fdc: 0x000a, 0x1fdd: 0x000a, - 0x1fde: 0x000a, 0x1fdf: 0x000a, 0x1fe0: 0x000a, 0x1fe1: 0x000a, - // Block 0x80, offset 0x2000 - 0x2008: 0x000a, - // Block 0x81, offset 0x2040 - 0x2042: 0x000c, - 0x2046: 0x000c, 0x204b: 0x000c, - 0x2065: 0x000c, 0x2066: 0x000c, 0x2068: 0x000a, 0x2069: 0x000a, - 0x206a: 0x000a, 0x206b: 0x000a, - 0x2078: 0x0004, 0x2079: 0x0004, - // Block 0x82, offset 0x2080 - 0x20b4: 0x000a, 0x20b5: 0x000a, - 0x20b6: 0x000a, 0x20b7: 0x000a, - // Block 0x83, offset 0x20c0 - 0x20c4: 0x000c, 0x20c5: 0x000c, - 0x20e0: 0x000c, 0x20e1: 0x000c, 0x20e2: 0x000c, 0x20e3: 0x000c, - 0x20e4: 0x000c, 0x20e5: 0x000c, 0x20e6: 0x000c, 0x20e7: 0x000c, 0x20e8: 0x000c, 0x20e9: 0x000c, - 0x20ea: 0x000c, 0x20eb: 0x000c, 0x20ec: 0x000c, 0x20ed: 0x000c, 0x20ee: 0x000c, 0x20ef: 0x000c, - 0x20f0: 0x000c, 0x20f1: 0x000c, - 0x20ff: 0x000c, - // Block 0x84, offset 0x2100 - 0x2126: 0x000c, 0x2127: 0x000c, 0x2128: 0x000c, 0x2129: 0x000c, - 0x212a: 0x000c, 0x212b: 0x000c, 0x212c: 0x000c, 0x212d: 0x000c, - // Block 0x85, offset 0x2140 - 0x2147: 0x000c, 0x2148: 0x000c, 0x2149: 0x000c, 0x214a: 0x000c, 0x214b: 0x000c, - 0x214c: 0x000c, 0x214d: 0x000c, 0x214e: 0x000c, 0x214f: 0x000c, 0x2150: 0x000c, 0x2151: 0x000c, - // Block 0x86, offset 0x2180 - 0x2180: 0x000c, 0x2181: 0x000c, 0x2182: 0x000c, - 0x21b3: 0x000c, - 0x21b6: 0x000c, 0x21b7: 0x000c, 0x21b8: 0x000c, 0x21b9: 0x000c, - 0x21bc: 0x000c, - // Block 0x87, offset 0x21c0 - 0x21e5: 0x000c, - // Block 0x88, offset 0x2200 - 0x2229: 0x000c, - 0x222a: 0x000c, 0x222b: 0x000c, 0x222c: 0x000c, 0x222d: 0x000c, 0x222e: 0x000c, - 0x2231: 0x000c, 0x2232: 0x000c, 0x2235: 0x000c, - 0x2236: 0x000c, - // Block 0x89, offset 0x2240 - 0x2243: 0x000c, - 0x224c: 0x000c, - 0x227c: 0x000c, - // Block 0x8a, offset 0x2280 - 0x22b0: 0x000c, 0x22b2: 0x000c, 0x22b3: 0x000c, 0x22b4: 0x000c, - 0x22b7: 0x000c, 0x22b8: 0x000c, - 0x22be: 0x000c, 0x22bf: 0x000c, - // Block 0x8b, offset 0x22c0 - 0x22c1: 0x000c, - 0x22ec: 0x000c, 0x22ed: 0x000c, - 0x22f6: 0x000c, - // Block 0x8c, offset 0x2300 - 0x2325: 0x000c, 0x2328: 0x000c, - 0x232d: 0x000c, - // Block 0x8d, offset 0x2340 - 0x235d: 0x0001, - 0x235e: 0x000c, 0x235f: 0x0001, 0x2360: 0x0001, 0x2361: 0x0001, 0x2362: 0x0001, 0x2363: 0x0001, - 0x2364: 0x0001, 0x2365: 0x0001, 0x2366: 0x0001, 0x2367: 0x0001, 0x2368: 0x0001, 0x2369: 0x0003, - 0x236a: 0x0001, 0x236b: 0x0001, 0x236c: 0x0001, 0x236d: 0x0001, 0x236e: 0x0001, 0x236f: 0x0001, - 0x2370: 0x0001, 0x2371: 0x0001, 0x2372: 0x0001, 0x2373: 0x0001, 0x2374: 0x0001, 0x2375: 0x0001, - 0x2376: 0x0001, 0x2377: 0x0001, 0x2378: 0x0001, 0x2379: 0x0001, 0x237a: 0x0001, 0x237b: 0x0001, - 0x237c: 0x0001, 0x237d: 0x0001, 0x237e: 0x0001, 0x237f: 0x0001, - // Block 0x8e, offset 0x2380 - 0x2380: 0x0001, 0x2381: 0x0001, 0x2382: 0x0001, 0x2383: 0x0001, 0x2384: 0x0001, 0x2385: 0x0001, - 0x2386: 0x0001, 0x2387: 0x0001, 0x2388: 0x0001, 0x2389: 0x0001, 0x238a: 0x0001, 0x238b: 0x0001, - 0x238c: 0x0001, 0x238d: 0x0001, 0x238e: 0x0001, 0x238f: 0x0001, 0x2390: 0x000d, 0x2391: 0x000d, - 0x2392: 0x000d, 0x2393: 0x000d, 0x2394: 0x000d, 0x2395: 0x000d, 0x2396: 0x000d, 0x2397: 0x000d, - 0x2398: 0x000d, 0x2399: 0x000d, 0x239a: 0x000d, 0x239b: 0x000d, 0x239c: 0x000d, 0x239d: 0x000d, - 0x239e: 0x000d, 0x239f: 0x000d, 0x23a0: 0x000d, 0x23a1: 0x000d, 0x23a2: 0x000d, 0x23a3: 0x000d, - 0x23a4: 0x000d, 0x23a5: 0x000d, 0x23a6: 0x000d, 0x23a7: 0x000d, 0x23a8: 0x000d, 0x23a9: 0x000d, - 0x23aa: 0x000d, 0x23ab: 0x000d, 0x23ac: 0x000d, 0x23ad: 0x000d, 0x23ae: 0x000d, 0x23af: 0x000d, - 0x23b0: 0x000d, 0x23b1: 0x000d, 0x23b2: 0x000d, 0x23b3: 0x000d, 0x23b4: 0x000d, 0x23b5: 0x000d, - 0x23b6: 0x000d, 0x23b7: 0x000d, 0x23b8: 0x000d, 0x23b9: 0x000d, 0x23ba: 0x000d, 0x23bb: 0x000d, - 0x23bc: 0x000d, 0x23bd: 0x000d, 0x23be: 0x000d, 0x23bf: 0x000d, - // Block 0x8f, offset 0x23c0 - 0x23c0: 0x000d, 0x23c1: 0x000d, 0x23c2: 0x000d, 0x23c3: 0x000d, 0x23c4: 0x000d, 0x23c5: 0x000d, - 0x23c6: 0x000d, 0x23c7: 0x000d, 0x23c8: 0x000d, 0x23c9: 0x000d, 0x23ca: 0x000d, 0x23cb: 0x000d, - 0x23cc: 0x000d, 0x23cd: 0x000d, 0x23ce: 0x000d, 0x23cf: 0x000d, 0x23d0: 0x000d, 0x23d1: 0x000d, - 0x23d2: 0x000d, 0x23d3: 0x000d, 0x23d4: 0x000d, 0x23d5: 0x000d, 0x23d6: 0x000d, 0x23d7: 0x000d, - 0x23d8: 0x000d, 0x23d9: 0x000d, 0x23da: 0x000d, 0x23db: 0x000d, 0x23dc: 0x000d, 0x23dd: 0x000d, - 0x23de: 0x000d, 0x23df: 0x000d, 0x23e0: 0x000d, 0x23e1: 0x000d, 0x23e2: 0x000d, 0x23e3: 0x000d, - 0x23e4: 0x000d, 0x23e5: 0x000d, 0x23e6: 0x000d, 0x23e7: 0x000d, 0x23e8: 0x000d, 0x23e9: 0x000d, - 0x23ea: 0x000d, 0x23eb: 0x000d, 0x23ec: 0x000d, 0x23ed: 0x000d, 0x23ee: 0x000d, 0x23ef: 0x000d, - 0x23f0: 0x000d, 0x23f1: 0x000d, 0x23f2: 0x000d, 0x23f3: 0x000d, 0x23f4: 0x000d, 0x23f5: 0x000d, - 0x23f6: 0x000d, 0x23f7: 0x000d, 0x23f8: 0x000d, 0x23f9: 0x000d, 0x23fa: 0x000d, 0x23fb: 0x000d, - 0x23fc: 0x000d, 0x23fd: 0x000d, 0x23fe: 0x000a, 0x23ff: 0x000a, - // Block 0x90, offset 0x2400 - 0x2400: 0x000d, 0x2401: 0x000d, 0x2402: 0x000d, 0x2403: 0x000d, 0x2404: 0x000d, 0x2405: 0x000d, - 0x2406: 0x000d, 0x2407: 0x000d, 0x2408: 0x000d, 0x2409: 0x000d, 0x240a: 0x000d, 0x240b: 0x000d, - 0x240c: 0x000d, 0x240d: 0x000d, 0x240e: 0x000d, 0x240f: 0x000d, 0x2410: 0x000b, 0x2411: 0x000b, - 0x2412: 0x000b, 0x2413: 0x000b, 0x2414: 0x000b, 0x2415: 0x000b, 0x2416: 0x000b, 0x2417: 0x000b, - 0x2418: 0x000b, 0x2419: 0x000b, 0x241a: 0x000b, 0x241b: 0x000b, 0x241c: 0x000b, 0x241d: 0x000b, - 0x241e: 0x000b, 0x241f: 0x000b, 0x2420: 0x000b, 0x2421: 0x000b, 0x2422: 0x000b, 0x2423: 0x000b, - 0x2424: 0x000b, 0x2425: 0x000b, 0x2426: 0x000b, 0x2427: 0x000b, 0x2428: 0x000b, 0x2429: 0x000b, - 0x242a: 0x000b, 0x242b: 0x000b, 0x242c: 0x000b, 0x242d: 0x000b, 0x242e: 0x000b, 0x242f: 0x000b, - 0x2430: 0x000d, 0x2431: 0x000d, 0x2432: 0x000d, 0x2433: 0x000d, 0x2434: 0x000d, 0x2435: 0x000d, - 0x2436: 0x000d, 0x2437: 0x000d, 0x2438: 0x000d, 0x2439: 0x000d, 0x243a: 0x000d, 0x243b: 0x000d, - 0x243c: 0x000d, 0x243d: 0x000a, 0x243e: 0x000d, 0x243f: 0x000d, - // Block 0x91, offset 0x2440 - 0x2440: 0x000c, 0x2441: 0x000c, 0x2442: 0x000c, 0x2443: 0x000c, 0x2444: 0x000c, 0x2445: 0x000c, - 0x2446: 0x000c, 0x2447: 0x000c, 0x2448: 0x000c, 0x2449: 0x000c, 0x244a: 0x000c, 0x244b: 0x000c, - 0x244c: 0x000c, 0x244d: 0x000c, 0x244e: 0x000c, 0x244f: 0x000c, 0x2450: 0x000a, 0x2451: 0x000a, - 0x2452: 0x000a, 0x2453: 0x000a, 0x2454: 0x000a, 0x2455: 0x000a, 0x2456: 0x000a, 0x2457: 0x000a, - 0x2458: 0x000a, 0x2459: 0x000a, - 0x2460: 0x000c, 0x2461: 0x000c, 0x2462: 0x000c, 0x2463: 0x000c, - 0x2464: 0x000c, 0x2465: 0x000c, 0x2466: 0x000c, 0x2467: 0x000c, 0x2468: 0x000c, 0x2469: 0x000c, - 0x246a: 0x000c, 0x246b: 0x000c, 0x246c: 0x000c, 0x246d: 0x000c, 0x246e: 0x000c, 0x246f: 0x000c, - 0x2470: 0x000a, 0x2471: 0x000a, 0x2472: 0x000a, 0x2473: 0x000a, 0x2474: 0x000a, 0x2475: 0x000a, - 0x2476: 0x000a, 0x2477: 0x000a, 0x2478: 0x000a, 0x2479: 0x000a, 0x247a: 0x000a, 0x247b: 0x000a, - 0x247c: 0x000a, 0x247d: 0x000a, 0x247e: 0x000a, 0x247f: 0x000a, - // Block 0x92, offset 0x2480 - 0x2480: 0x000a, 0x2481: 0x000a, 0x2482: 0x000a, 0x2483: 0x000a, 0x2484: 0x000a, 0x2485: 0x000a, - 0x2486: 0x000a, 0x2487: 0x000a, 0x2488: 0x000a, 0x2489: 0x000a, 0x248a: 0x000a, 0x248b: 0x000a, - 0x248c: 0x000a, 0x248d: 0x000a, 0x248e: 0x000a, 0x248f: 0x000a, 0x2490: 0x0006, 0x2491: 0x000a, - 0x2492: 0x0006, 0x2494: 0x000a, 0x2495: 0x0006, 0x2496: 0x000a, 0x2497: 0x000a, - 0x2498: 0x000a, 0x2499: 0x009a, 0x249a: 0x008a, 0x249b: 0x007a, 0x249c: 0x006a, 0x249d: 0x009a, - 0x249e: 0x008a, 0x249f: 0x0004, 0x24a0: 0x000a, 0x24a1: 0x000a, 0x24a2: 0x0003, 0x24a3: 0x0003, - 0x24a4: 0x000a, 0x24a5: 0x000a, 0x24a6: 0x000a, 0x24a8: 0x000a, 0x24a9: 0x0004, - 0x24aa: 0x0004, 0x24ab: 0x000a, - 0x24b0: 0x000d, 0x24b1: 0x000d, 0x24b2: 0x000d, 0x24b3: 0x000d, 0x24b4: 0x000d, 0x24b5: 0x000d, - 0x24b6: 0x000d, 0x24b7: 0x000d, 0x24b8: 0x000d, 0x24b9: 0x000d, 0x24ba: 0x000d, 0x24bb: 0x000d, - 0x24bc: 0x000d, 0x24bd: 0x000d, 0x24be: 0x000d, 0x24bf: 0x000d, - // Block 0x93, offset 0x24c0 - 0x24c0: 0x000d, 0x24c1: 0x000d, 0x24c2: 0x000d, 0x24c3: 0x000d, 0x24c4: 0x000d, 0x24c5: 0x000d, - 0x24c6: 0x000d, 0x24c7: 0x000d, 0x24c8: 0x000d, 0x24c9: 0x000d, 0x24ca: 0x000d, 0x24cb: 0x000d, - 0x24cc: 0x000d, 0x24cd: 0x000d, 0x24ce: 0x000d, 0x24cf: 0x000d, 0x24d0: 0x000d, 0x24d1: 0x000d, - 0x24d2: 0x000d, 0x24d3: 0x000d, 0x24d4: 0x000d, 0x24d5: 0x000d, 0x24d6: 0x000d, 0x24d7: 0x000d, - 0x24d8: 0x000d, 0x24d9: 0x000d, 0x24da: 0x000d, 0x24db: 0x000d, 0x24dc: 0x000d, 0x24dd: 0x000d, - 0x24de: 0x000d, 0x24df: 0x000d, 0x24e0: 0x000d, 0x24e1: 0x000d, 0x24e2: 0x000d, 0x24e3: 0x000d, - 0x24e4: 0x000d, 0x24e5: 0x000d, 0x24e6: 0x000d, 0x24e7: 0x000d, 0x24e8: 0x000d, 0x24e9: 0x000d, - 0x24ea: 0x000d, 0x24eb: 0x000d, 0x24ec: 0x000d, 0x24ed: 0x000d, 0x24ee: 0x000d, 0x24ef: 0x000d, - 0x24f0: 0x000d, 0x24f1: 0x000d, 0x24f2: 0x000d, 0x24f3: 0x000d, 0x24f4: 0x000d, 0x24f5: 0x000d, - 0x24f6: 0x000d, 0x24f7: 0x000d, 0x24f8: 0x000d, 0x24f9: 0x000d, 0x24fa: 0x000d, 0x24fb: 0x000d, - 0x24fc: 0x000d, 0x24fd: 0x000d, 0x24fe: 0x000d, 0x24ff: 0x000b, - // Block 0x94, offset 0x2500 - 0x2501: 0x000a, 0x2502: 0x000a, 0x2503: 0x0004, 0x2504: 0x0004, 0x2505: 0x0004, - 0x2506: 0x000a, 0x2507: 0x000a, 0x2508: 0x003a, 0x2509: 0x002a, 0x250a: 0x000a, 0x250b: 0x0003, - 0x250c: 0x0006, 0x250d: 0x0003, 0x250e: 0x0006, 0x250f: 0x0006, 0x2510: 0x0002, 0x2511: 0x0002, - 0x2512: 0x0002, 0x2513: 0x0002, 0x2514: 0x0002, 0x2515: 0x0002, 0x2516: 0x0002, 0x2517: 0x0002, - 0x2518: 0x0002, 0x2519: 0x0002, 0x251a: 0x0006, 0x251b: 0x000a, 0x251c: 0x000a, 0x251d: 0x000a, - 0x251e: 0x000a, 0x251f: 0x000a, 0x2520: 0x000a, - 0x253b: 0x005a, - 0x253c: 0x000a, 0x253d: 0x004a, 0x253e: 0x000a, 0x253f: 0x000a, - // Block 0x95, offset 0x2540 - 0x2540: 0x000a, - 0x255b: 0x005a, 0x255c: 0x000a, 0x255d: 0x004a, - 0x255e: 0x000a, 0x255f: 0x00fa, 0x2560: 0x00ea, 0x2561: 0x000a, 0x2562: 0x003a, 0x2563: 0x002a, - 0x2564: 0x000a, 0x2565: 0x000a, - // Block 0x96, offset 0x2580 - 0x25a0: 0x0004, 0x25a1: 0x0004, 0x25a2: 0x000a, 0x25a3: 0x000a, - 0x25a4: 0x000a, 0x25a5: 0x0004, 0x25a6: 0x0004, 0x25a8: 0x000a, 0x25a9: 0x000a, - 0x25aa: 0x000a, 0x25ab: 0x000a, 0x25ac: 0x000a, 0x25ad: 0x000a, 0x25ae: 0x000a, - 0x25b0: 0x000b, 0x25b1: 0x000b, 0x25b2: 0x000b, 0x25b3: 0x000b, 0x25b4: 0x000b, 0x25b5: 0x000b, - 0x25b6: 0x000b, 0x25b7: 0x000b, 0x25b8: 0x000b, 0x25b9: 0x000a, 0x25ba: 0x000a, 0x25bb: 0x000a, - 0x25bc: 0x000a, 0x25bd: 0x000a, 0x25be: 0x000b, 0x25bf: 0x000b, - // Block 0x97, offset 0x25c0 - 0x25c1: 0x000a, - // Block 0x98, offset 0x2600 - 0x2600: 0x000a, 0x2601: 0x000a, 0x2602: 0x000a, 0x2603: 0x000a, 0x2604: 0x000a, 0x2605: 0x000a, - 0x2606: 0x000a, 0x2607: 0x000a, 0x2608: 0x000a, 0x2609: 0x000a, 0x260a: 0x000a, 0x260b: 0x000a, - 0x260c: 0x000a, 0x2610: 0x000a, 0x2611: 0x000a, - 0x2612: 0x000a, 0x2613: 0x000a, 0x2614: 0x000a, 0x2615: 0x000a, 0x2616: 0x000a, 0x2617: 0x000a, - 0x2618: 0x000a, 0x2619: 0x000a, 0x261a: 0x000a, 0x261b: 0x000a, - 0x2620: 0x000a, - // Block 0x99, offset 0x2640 - 0x267d: 0x000c, - // Block 0x9a, offset 0x2680 - 0x26a0: 0x000c, 0x26a1: 0x0002, 0x26a2: 0x0002, 0x26a3: 0x0002, - 0x26a4: 0x0002, 0x26a5: 0x0002, 0x26a6: 0x0002, 0x26a7: 0x0002, 0x26a8: 0x0002, 0x26a9: 0x0002, - 0x26aa: 0x0002, 0x26ab: 0x0002, 0x26ac: 0x0002, 0x26ad: 0x0002, 0x26ae: 0x0002, 0x26af: 0x0002, - 0x26b0: 0x0002, 0x26b1: 0x0002, 0x26b2: 0x0002, 0x26b3: 0x0002, 0x26b4: 0x0002, 0x26b5: 0x0002, - 0x26b6: 0x0002, 0x26b7: 0x0002, 0x26b8: 0x0002, 0x26b9: 0x0002, 0x26ba: 0x0002, 0x26bb: 0x0002, - // Block 0x9b, offset 0x26c0 - 0x26f6: 0x000c, 0x26f7: 0x000c, 0x26f8: 0x000c, 0x26f9: 0x000c, 0x26fa: 0x000c, - // Block 0x9c, offset 0x2700 - 0x2700: 0x0001, 0x2701: 0x0001, 0x2702: 0x0001, 0x2703: 0x0001, 0x2704: 0x0001, 0x2705: 0x0001, - 0x2706: 0x0001, 0x2707: 0x0001, 0x2708: 0x0001, 0x2709: 0x0001, 0x270a: 0x0001, 0x270b: 0x0001, - 0x270c: 0x0001, 0x270d: 0x0001, 0x270e: 0x0001, 0x270f: 0x0001, 0x2710: 0x0001, 0x2711: 0x0001, - 0x2712: 0x0001, 0x2713: 0x0001, 0x2714: 0x0001, 0x2715: 0x0001, 0x2716: 0x0001, 0x2717: 0x0001, - 0x2718: 0x0001, 0x2719: 0x0001, 0x271a: 0x0001, 0x271b: 0x0001, 0x271c: 0x0001, 0x271d: 0x0001, - 0x271e: 0x0001, 0x271f: 0x0001, 0x2720: 0x0001, 0x2721: 0x0001, 0x2722: 0x0001, 0x2723: 0x0001, - 0x2724: 0x0001, 0x2725: 0x0001, 0x2726: 0x0001, 0x2727: 0x0001, 0x2728: 0x0001, 0x2729: 0x0001, - 0x272a: 0x0001, 0x272b: 0x0001, 0x272c: 0x0001, 0x272d: 0x0001, 0x272e: 0x0001, 0x272f: 0x0001, - 0x2730: 0x0001, 0x2731: 0x0001, 0x2732: 0x0001, 0x2733: 0x0001, 0x2734: 0x0001, 0x2735: 0x0001, - 0x2736: 0x0001, 0x2737: 0x0001, 0x2738: 0x0001, 0x2739: 0x0001, 0x273a: 0x0001, 0x273b: 0x0001, - 0x273c: 0x0001, 0x273d: 0x0001, 0x273e: 0x0001, 0x273f: 0x0001, - // Block 0x9d, offset 0x2740 - 0x2740: 0x0001, 0x2741: 0x0001, 0x2742: 0x0001, 0x2743: 0x0001, 0x2744: 0x0001, 0x2745: 0x0001, - 0x2746: 0x0001, 0x2747: 0x0001, 0x2748: 0x0001, 0x2749: 0x0001, 0x274a: 0x0001, 0x274b: 0x0001, - 0x274c: 0x0001, 0x274d: 0x0001, 0x274e: 0x0001, 0x274f: 0x0001, 0x2750: 0x0001, 0x2751: 0x0001, - 0x2752: 0x0001, 0x2753: 0x0001, 0x2754: 0x0001, 0x2755: 0x0001, 0x2756: 0x0001, 0x2757: 0x0001, - 0x2758: 0x0001, 0x2759: 0x0001, 0x275a: 0x0001, 0x275b: 0x0001, 0x275c: 0x0001, 0x275d: 0x0001, - 0x275e: 0x0001, 0x275f: 0x000a, 0x2760: 0x0001, 0x2761: 0x0001, 0x2762: 0x0001, 0x2763: 0x0001, - 0x2764: 0x0001, 0x2765: 0x0001, 0x2766: 0x0001, 0x2767: 0x0001, 0x2768: 0x0001, 0x2769: 0x0001, - 0x276a: 0x0001, 0x276b: 0x0001, 0x276c: 0x0001, 0x276d: 0x0001, 0x276e: 0x0001, 0x276f: 0x0001, - 0x2770: 0x0001, 0x2771: 0x0001, 0x2772: 0x0001, 0x2773: 0x0001, 0x2774: 0x0001, 0x2775: 0x0001, - 0x2776: 0x0001, 0x2777: 0x0001, 0x2778: 0x0001, 0x2779: 0x0001, 0x277a: 0x0001, 0x277b: 0x0001, - 0x277c: 0x0001, 0x277d: 0x0001, 0x277e: 0x0001, 0x277f: 0x0001, - // Block 0x9e, offset 0x2780 - 0x2780: 0x0001, 0x2781: 0x000c, 0x2782: 0x000c, 0x2783: 0x000c, 0x2784: 0x0001, 0x2785: 0x000c, - 0x2786: 0x000c, 0x2787: 0x0001, 0x2788: 0x0001, 0x2789: 0x0001, 0x278a: 0x0001, 0x278b: 0x0001, - 0x278c: 0x000c, 0x278d: 0x000c, 0x278e: 0x000c, 0x278f: 0x000c, 0x2790: 0x0001, 0x2791: 0x0001, - 0x2792: 0x0001, 0x2793: 0x0001, 0x2794: 0x0001, 0x2795: 0x0001, 0x2796: 0x0001, 0x2797: 0x0001, - 0x2798: 0x0001, 0x2799: 0x0001, 0x279a: 0x0001, 0x279b: 0x0001, 0x279c: 0x0001, 0x279d: 0x0001, - 0x279e: 0x0001, 0x279f: 0x0001, 0x27a0: 0x0001, 0x27a1: 0x0001, 0x27a2: 0x0001, 0x27a3: 0x0001, - 0x27a4: 0x0001, 0x27a5: 0x0001, 0x27a6: 0x0001, 0x27a7: 0x0001, 0x27a8: 0x0001, 0x27a9: 0x0001, - 0x27aa: 0x0001, 0x27ab: 0x0001, 0x27ac: 0x0001, 0x27ad: 0x0001, 0x27ae: 0x0001, 0x27af: 0x0001, - 0x27b0: 0x0001, 0x27b1: 0x0001, 0x27b2: 0x0001, 0x27b3: 0x0001, 0x27b4: 0x0001, 0x27b5: 0x0001, - 0x27b6: 0x0001, 0x27b7: 0x0001, 0x27b8: 0x000c, 0x27b9: 0x000c, 0x27ba: 0x000c, 0x27bb: 0x0001, - 0x27bc: 0x0001, 0x27bd: 0x0001, 0x27be: 0x0001, 0x27bf: 0x000c, - // Block 0x9f, offset 0x27c0 - 0x27c0: 0x0001, 0x27c1: 0x0001, 0x27c2: 0x0001, 0x27c3: 0x0001, 0x27c4: 0x0001, 0x27c5: 0x0001, - 0x27c6: 0x0001, 0x27c7: 0x0001, 0x27c8: 0x0001, 0x27c9: 0x0001, 0x27ca: 0x0001, 0x27cb: 0x0001, - 0x27cc: 0x0001, 0x27cd: 0x0001, 0x27ce: 0x0001, 0x27cf: 0x0001, 0x27d0: 0x0001, 0x27d1: 0x0001, - 0x27d2: 0x0001, 0x27d3: 0x0001, 0x27d4: 0x0001, 0x27d5: 0x0001, 0x27d6: 0x0001, 0x27d7: 0x0001, - 0x27d8: 0x0001, 0x27d9: 0x0001, 0x27da: 0x0001, 0x27db: 0x0001, 0x27dc: 0x0001, 0x27dd: 0x0001, - 0x27de: 0x0001, 0x27df: 0x0001, 0x27e0: 0x0001, 0x27e1: 0x0001, 0x27e2: 0x0001, 0x27e3: 0x0001, - 0x27e4: 0x0001, 0x27e5: 0x000c, 0x27e6: 0x000c, 0x27e7: 0x0001, 0x27e8: 0x0001, 0x27e9: 0x0001, - 0x27ea: 0x0001, 0x27eb: 0x0001, 0x27ec: 0x0001, 0x27ed: 0x0001, 0x27ee: 0x0001, 0x27ef: 0x0001, - 0x27f0: 0x0001, 0x27f1: 0x0001, 0x27f2: 0x0001, 0x27f3: 0x0001, 0x27f4: 0x0001, 0x27f5: 0x0001, - 0x27f6: 0x0001, 0x27f7: 0x0001, 0x27f8: 0x0001, 0x27f9: 0x0001, 0x27fa: 0x0001, 0x27fb: 0x0001, - 0x27fc: 0x0001, 0x27fd: 0x0001, 0x27fe: 0x0001, 0x27ff: 0x0001, - // Block 0xa0, offset 0x2800 - 0x2800: 0x0001, 0x2801: 0x0001, 0x2802: 0x0001, 0x2803: 0x0001, 0x2804: 0x0001, 0x2805: 0x0001, - 0x2806: 0x0001, 0x2807: 0x0001, 0x2808: 0x0001, 0x2809: 0x0001, 0x280a: 0x0001, 0x280b: 0x0001, - 0x280c: 0x0001, 0x280d: 0x0001, 0x280e: 0x0001, 0x280f: 0x0001, 0x2810: 0x0001, 0x2811: 0x0001, - 0x2812: 0x0001, 0x2813: 0x0001, 0x2814: 0x0001, 0x2815: 0x0001, 0x2816: 0x0001, 0x2817: 0x0001, - 0x2818: 0x0001, 0x2819: 0x0001, 0x281a: 0x0001, 0x281b: 0x0001, 0x281c: 0x0001, 0x281d: 0x0001, - 0x281e: 0x0001, 0x281f: 0x0001, 0x2820: 0x0001, 0x2821: 0x0001, 0x2822: 0x0001, 0x2823: 0x0001, - 0x2824: 0x0001, 0x2825: 0x0001, 0x2826: 0x0001, 0x2827: 0x0001, 0x2828: 0x0001, 0x2829: 0x0001, - 0x282a: 0x0001, 0x282b: 0x0001, 0x282c: 0x0001, 0x282d: 0x0001, 0x282e: 0x0001, 0x282f: 0x0001, - 0x2830: 0x0001, 0x2831: 0x0001, 0x2832: 0x0001, 0x2833: 0x0001, 0x2834: 0x0001, 0x2835: 0x0001, - 0x2836: 0x0001, 0x2837: 0x0001, 0x2838: 0x0001, 0x2839: 0x000a, 0x283a: 0x000a, 0x283b: 0x000a, - 0x283c: 0x000a, 0x283d: 0x000a, 0x283e: 0x000a, 0x283f: 0x000a, - // Block 0xa1, offset 0x2840 - 0x2840: 0x000d, 0x2841: 0x000d, 0x2842: 0x000d, 0x2843: 0x000d, 0x2844: 0x000d, 0x2845: 0x000d, - 0x2846: 0x000d, 0x2847: 0x000d, 0x2848: 0x000d, 0x2849: 0x000d, 0x284a: 0x000d, 0x284b: 0x000d, - 0x284c: 0x000d, 0x284d: 0x000d, 0x284e: 0x000d, 0x284f: 0x000d, 0x2850: 0x000d, 0x2851: 0x000d, - 0x2852: 0x000d, 0x2853: 0x000d, 0x2854: 0x000d, 0x2855: 0x000d, 0x2856: 0x000d, 0x2857: 0x000d, - 0x2858: 0x000d, 0x2859: 0x000d, 0x285a: 0x000d, 0x285b: 0x000d, 0x285c: 0x000d, 0x285d: 0x000d, - 0x285e: 0x000d, 0x285f: 0x000d, 0x2860: 0x000d, 0x2861: 0x000d, 0x2862: 0x000d, 0x2863: 0x000d, - 0x2864: 0x000c, 0x2865: 0x000c, 0x2866: 0x000c, 0x2867: 0x000c, 0x2868: 0x000d, 0x2869: 0x000d, - 0x286a: 0x000d, 0x286b: 0x000d, 0x286c: 0x000d, 0x286d: 0x000d, 0x286e: 0x000d, 0x286f: 0x000d, - 0x2870: 0x0005, 0x2871: 0x0005, 0x2872: 0x0005, 0x2873: 0x0005, 0x2874: 0x0005, 0x2875: 0x0005, - 0x2876: 0x0005, 0x2877: 0x0005, 0x2878: 0x0005, 0x2879: 0x0005, 0x287a: 0x000d, 0x287b: 0x000d, - 0x287c: 0x000d, 0x287d: 0x000d, 0x287e: 0x000d, 0x287f: 0x000d, - // Block 0xa2, offset 0x2880 - 0x2880: 0x0001, 0x2881: 0x0001, 0x2882: 0x0001, 0x2883: 0x0001, 0x2884: 0x0001, 0x2885: 0x0001, - 0x2886: 0x0001, 0x2887: 0x0001, 0x2888: 0x0001, 0x2889: 0x0001, 0x288a: 0x0001, 0x288b: 0x0001, - 0x288c: 0x0001, 0x288d: 0x0001, 0x288e: 0x0001, 0x288f: 0x0001, 0x2890: 0x0001, 0x2891: 0x0001, - 0x2892: 0x0001, 0x2893: 0x0001, 0x2894: 0x0001, 0x2895: 0x0001, 0x2896: 0x0001, 0x2897: 0x0001, - 0x2898: 0x0001, 0x2899: 0x0001, 0x289a: 0x0001, 0x289b: 0x0001, 0x289c: 0x0001, 0x289d: 0x0001, - 0x289e: 0x0001, 0x289f: 0x0001, 0x28a0: 0x0005, 0x28a1: 0x0005, 0x28a2: 0x0005, 0x28a3: 0x0005, - 0x28a4: 0x0005, 0x28a5: 0x0005, 0x28a6: 0x0005, 0x28a7: 0x0005, 0x28a8: 0x0005, 0x28a9: 0x0005, - 0x28aa: 0x0005, 0x28ab: 0x0005, 0x28ac: 0x0005, 0x28ad: 0x0005, 0x28ae: 0x0005, 0x28af: 0x0005, - 0x28b0: 0x0005, 0x28b1: 0x0005, 0x28b2: 0x0005, 0x28b3: 0x0005, 0x28b4: 0x0005, 0x28b5: 0x0005, - 0x28b6: 0x0005, 0x28b7: 0x0005, 0x28b8: 0x0005, 0x28b9: 0x0005, 0x28ba: 0x0005, 0x28bb: 0x0005, - 0x28bc: 0x0005, 0x28bd: 0x0005, 0x28be: 0x0005, 0x28bf: 0x0001, - // Block 0xa3, offset 0x28c0 - 0x28c0: 0x0001, 0x28c1: 0x0001, 0x28c2: 0x0001, 0x28c3: 0x0001, 0x28c4: 0x0001, 0x28c5: 0x0001, - 0x28c6: 0x0001, 0x28c7: 0x0001, 0x28c8: 0x0001, 0x28c9: 0x0001, 0x28ca: 0x0001, 0x28cb: 0x0001, - 0x28cc: 0x0001, 0x28cd: 0x0001, 0x28ce: 0x0001, 0x28cf: 0x0001, 0x28d0: 0x0001, 0x28d1: 0x0001, - 0x28d2: 0x0001, 0x28d3: 0x0001, 0x28d4: 0x0001, 0x28d5: 0x0001, 0x28d6: 0x0001, 0x28d7: 0x0001, - 0x28d8: 0x0001, 0x28d9: 0x0001, 0x28da: 0x0001, 0x28db: 0x0001, 0x28dc: 0x0001, 0x28dd: 0x0001, - 0x28de: 0x0001, 0x28df: 0x0001, 0x28e0: 0x0001, 0x28e1: 0x0001, 0x28e2: 0x0001, 0x28e3: 0x0001, - 0x28e4: 0x0001, 0x28e5: 0x0001, 0x28e6: 0x0001, 0x28e7: 0x0001, 0x28e8: 0x0001, 0x28e9: 0x0001, - 0x28ea: 0x0001, 0x28eb: 0x0001, 0x28ec: 0x0001, 0x28ed: 0x0001, 0x28ee: 0x0001, 0x28ef: 0x0001, - 0x28f0: 0x000d, 0x28f1: 0x000d, 0x28f2: 0x000d, 0x28f3: 0x000d, 0x28f4: 0x000d, 0x28f5: 0x000d, - 0x28f6: 0x000d, 0x28f7: 0x000d, 0x28f8: 0x000d, 0x28f9: 0x000d, 0x28fa: 0x000d, 0x28fb: 0x000d, - 0x28fc: 0x000d, 0x28fd: 0x000d, 0x28fe: 0x000d, 0x28ff: 0x000d, - // Block 0xa4, offset 0x2900 - 0x2900: 0x000d, 0x2901: 0x000d, 0x2902: 0x000d, 0x2903: 0x000d, 0x2904: 0x000d, 0x2905: 0x000d, - 0x2906: 0x000c, 0x2907: 0x000c, 0x2908: 0x000c, 0x2909: 0x000c, 0x290a: 0x000c, 0x290b: 0x000c, - 0x290c: 0x000c, 0x290d: 0x000c, 0x290e: 0x000c, 0x290f: 0x000c, 0x2910: 0x000c, 0x2911: 0x000d, - 0x2912: 0x000d, 0x2913: 0x000d, 0x2914: 0x000d, 0x2915: 0x000d, 0x2916: 0x000d, 0x2917: 0x000d, - 0x2918: 0x000d, 0x2919: 0x000d, 0x291a: 0x000d, 0x291b: 0x000d, 0x291c: 0x000d, 0x291d: 0x000d, - 0x291e: 0x000d, 0x291f: 0x000d, 0x2920: 0x000d, 0x2921: 0x000d, 0x2922: 0x000d, 0x2923: 0x000d, - 0x2924: 0x000d, 0x2925: 0x000d, 0x2926: 0x000d, 0x2927: 0x000d, 0x2928: 0x000d, 0x2929: 0x000d, - 0x292a: 0x000d, 0x292b: 0x000d, 0x292c: 0x000d, 0x292d: 0x000d, 0x292e: 0x000d, 0x292f: 0x000d, - 0x2930: 0x0001, 0x2931: 0x0001, 0x2932: 0x0001, 0x2933: 0x0001, 0x2934: 0x0001, 0x2935: 0x0001, - 0x2936: 0x0001, 0x2937: 0x0001, 0x2938: 0x0001, 0x2939: 0x0001, 0x293a: 0x0001, 0x293b: 0x0001, - 0x293c: 0x0001, 0x293d: 0x0001, 0x293e: 0x0001, 0x293f: 0x0001, - // Block 0xa5, offset 0x2940 - 0x2941: 0x000c, - 0x2978: 0x000c, 0x2979: 0x000c, 0x297a: 0x000c, 0x297b: 0x000c, - 0x297c: 0x000c, 0x297d: 0x000c, 0x297e: 0x000c, 0x297f: 0x000c, - // Block 0xa6, offset 0x2980 - 0x2980: 0x000c, 0x2981: 0x000c, 0x2982: 0x000c, 0x2983: 0x000c, 0x2984: 0x000c, 0x2985: 0x000c, - 0x2986: 0x000c, - 0x2992: 0x000a, 0x2993: 0x000a, 0x2994: 0x000a, 0x2995: 0x000a, 0x2996: 0x000a, 0x2997: 0x000a, - 0x2998: 0x000a, 0x2999: 0x000a, 0x299a: 0x000a, 0x299b: 0x000a, 0x299c: 0x000a, 0x299d: 0x000a, - 0x299e: 0x000a, 0x299f: 0x000a, 0x29a0: 0x000a, 0x29a1: 0x000a, 0x29a2: 0x000a, 0x29a3: 0x000a, - 0x29a4: 0x000a, 0x29a5: 0x000a, - 0x29bf: 0x000c, - // Block 0xa7, offset 0x29c0 - 0x29c0: 0x000c, 0x29c1: 0x000c, - 0x29f3: 0x000c, 0x29f4: 0x000c, 0x29f5: 0x000c, - 0x29f6: 0x000c, 0x29f9: 0x000c, 0x29fa: 0x000c, - // Block 0xa8, offset 0x2a00 - 0x2a00: 0x000c, 0x2a01: 0x000c, 0x2a02: 0x000c, - 0x2a27: 0x000c, 0x2a28: 0x000c, 0x2a29: 0x000c, - 0x2a2a: 0x000c, 0x2a2b: 0x000c, 0x2a2d: 0x000c, 0x2a2e: 0x000c, 0x2a2f: 0x000c, - 0x2a30: 0x000c, 0x2a31: 0x000c, 0x2a32: 0x000c, 0x2a33: 0x000c, 0x2a34: 0x000c, - // Block 0xa9, offset 0x2a40 - 0x2a73: 0x000c, - // Block 0xaa, offset 0x2a80 - 0x2a80: 0x000c, 0x2a81: 0x000c, - 0x2ab6: 0x000c, 0x2ab7: 0x000c, 0x2ab8: 0x000c, 0x2ab9: 0x000c, 0x2aba: 0x000c, 0x2abb: 0x000c, - 0x2abc: 0x000c, 0x2abd: 0x000c, 0x2abe: 0x000c, - // Block 0xab, offset 0x2ac0 - 0x2ac9: 0x000c, 0x2aca: 0x000c, 0x2acb: 0x000c, - 0x2acc: 0x000c, - // Block 0xac, offset 0x2b00 - 0x2b2f: 0x000c, - 0x2b30: 0x000c, 0x2b31: 0x000c, 0x2b34: 0x000c, - 0x2b36: 0x000c, 0x2b37: 0x000c, - 0x2b3e: 0x000c, - // Block 0xad, offset 0x2b40 - 0x2b5f: 0x000c, 0x2b63: 0x000c, - 0x2b64: 0x000c, 0x2b65: 0x000c, 0x2b66: 0x000c, 0x2b67: 0x000c, 0x2b68: 0x000c, 0x2b69: 0x000c, - 0x2b6a: 0x000c, - // Block 0xae, offset 0x2b80 - 0x2b80: 0x000c, - 0x2ba6: 0x000c, 0x2ba7: 0x000c, 0x2ba8: 0x000c, 0x2ba9: 0x000c, - 0x2baa: 0x000c, 0x2bab: 0x000c, 0x2bac: 0x000c, - 0x2bb0: 0x000c, 0x2bb1: 0x000c, 0x2bb2: 0x000c, 0x2bb3: 0x000c, 0x2bb4: 0x000c, - // Block 0xaf, offset 0x2bc0 - 0x2bf8: 0x000c, 0x2bf9: 0x000c, 0x2bfa: 0x000c, 0x2bfb: 0x000c, - 0x2bfc: 0x000c, 0x2bfd: 0x000c, 0x2bfe: 0x000c, 0x2bff: 0x000c, - // Block 0xb0, offset 0x2c00 - 0x2c02: 0x000c, 0x2c03: 0x000c, 0x2c04: 0x000c, - 0x2c06: 0x000c, - 0x2c1e: 0x000c, - // Block 0xb1, offset 0x2c40 - 0x2c73: 0x000c, 0x2c74: 0x000c, 0x2c75: 0x000c, - 0x2c76: 0x000c, 0x2c77: 0x000c, 0x2c78: 0x000c, 0x2c7a: 0x000c, - 0x2c7f: 0x000c, - // Block 0xb2, offset 0x2c80 - 0x2c80: 0x000c, 0x2c82: 0x000c, 0x2c83: 0x000c, - // Block 0xb3, offset 0x2cc0 - 0x2cf2: 0x000c, 0x2cf3: 0x000c, 0x2cf4: 0x000c, 0x2cf5: 0x000c, - 0x2cfc: 0x000c, 0x2cfd: 0x000c, 0x2cff: 0x000c, - // Block 0xb4, offset 0x2d00 - 0x2d00: 0x000c, - 0x2d1c: 0x000c, 0x2d1d: 0x000c, - // Block 0xb5, offset 0x2d40 - 0x2d73: 0x000c, 0x2d74: 0x000c, 0x2d75: 0x000c, - 0x2d76: 0x000c, 0x2d77: 0x000c, 0x2d78: 0x000c, 0x2d79: 0x000c, 0x2d7a: 0x000c, - 0x2d7d: 0x000c, 0x2d7f: 0x000c, - // Block 0xb6, offset 0x2d80 - 0x2d80: 0x000c, - 0x2da0: 0x000a, 0x2da1: 0x000a, 0x2da2: 0x000a, 0x2da3: 0x000a, - 0x2da4: 0x000a, 0x2da5: 0x000a, 0x2da6: 0x000a, 0x2da7: 0x000a, 0x2da8: 0x000a, 0x2da9: 0x000a, - 0x2daa: 0x000a, 0x2dab: 0x000a, 0x2dac: 0x000a, - // Block 0xb7, offset 0x2dc0 - 0x2deb: 0x000c, 0x2ded: 0x000c, - 0x2df0: 0x000c, 0x2df1: 0x000c, 0x2df2: 0x000c, 0x2df3: 0x000c, 0x2df4: 0x000c, 0x2df5: 0x000c, - 0x2df7: 0x000c, - // Block 0xb8, offset 0x2e00 - 0x2e1d: 0x000c, - 0x2e1e: 0x000c, 0x2e1f: 0x000c, 0x2e22: 0x000c, 0x2e23: 0x000c, - 0x2e24: 0x000c, 0x2e25: 0x000c, 0x2e27: 0x000c, 0x2e28: 0x000c, 0x2e29: 0x000c, - 0x2e2a: 0x000c, 0x2e2b: 0x000c, - // Block 0xb9, offset 0x2e40 - 0x2e6f: 0x000c, - 0x2e70: 0x000c, 0x2e71: 0x000c, 0x2e72: 0x000c, 0x2e73: 0x000c, 0x2e74: 0x000c, 0x2e75: 0x000c, - 0x2e76: 0x000c, 0x2e77: 0x000c, 0x2e79: 0x000c, 0x2e7a: 0x000c, - // Block 0xba, offset 0x2e80 - 0x2e81: 0x000c, 0x2e82: 0x000c, 0x2e83: 0x000c, 0x2e84: 0x000c, 0x2e85: 0x000c, - 0x2e86: 0x000c, 0x2e89: 0x000c, 0x2e8a: 0x000c, - 0x2eb3: 0x000c, 0x2eb4: 0x000c, 0x2eb5: 0x000c, - 0x2eb6: 0x000c, 0x2eb7: 0x000c, 0x2eb8: 0x000c, 0x2ebb: 0x000c, - 0x2ebc: 0x000c, 0x2ebd: 0x000c, 0x2ebe: 0x000c, - // Block 0xbb, offset 0x2ec0 - 0x2ec7: 0x000c, - 0x2ed1: 0x000c, - 0x2ed2: 0x000c, 0x2ed3: 0x000c, 0x2ed4: 0x000c, 0x2ed5: 0x000c, 0x2ed6: 0x000c, - 0x2ed9: 0x000c, 0x2eda: 0x000c, 0x2edb: 0x000c, - // Block 0xbc, offset 0x2f00 - 0x2f0a: 0x000c, 0x2f0b: 0x000c, - 0x2f0c: 0x000c, 0x2f0d: 0x000c, 0x2f0e: 0x000c, 0x2f0f: 0x000c, 0x2f10: 0x000c, 0x2f11: 0x000c, - 0x2f12: 0x000c, 0x2f13: 0x000c, 0x2f14: 0x000c, 0x2f15: 0x000c, 0x2f16: 0x000c, - 0x2f18: 0x000c, 0x2f19: 0x000c, - // Block 0xbd, offset 0x2f40 - 0x2f70: 0x000c, 0x2f71: 0x000c, 0x2f72: 0x000c, 0x2f73: 0x000c, 0x2f74: 0x000c, 0x2f75: 0x000c, - 0x2f76: 0x000c, 0x2f78: 0x000c, 0x2f79: 0x000c, 0x2f7a: 0x000c, 0x2f7b: 0x000c, - 0x2f7c: 0x000c, 0x2f7d: 0x000c, - // Block 0xbe, offset 0x2f80 - 0x2f92: 0x000c, 0x2f93: 0x000c, 0x2f94: 0x000c, 0x2f95: 0x000c, 0x2f96: 0x000c, 0x2f97: 0x000c, - 0x2f98: 0x000c, 0x2f99: 0x000c, 0x2f9a: 0x000c, 0x2f9b: 0x000c, 0x2f9c: 0x000c, 0x2f9d: 0x000c, - 0x2f9e: 0x000c, 0x2f9f: 0x000c, 0x2fa0: 0x000c, 0x2fa1: 0x000c, 0x2fa2: 0x000c, 0x2fa3: 0x000c, - 0x2fa4: 0x000c, 0x2fa5: 0x000c, 0x2fa6: 0x000c, 0x2fa7: 0x000c, - 0x2faa: 0x000c, 0x2fab: 0x000c, 0x2fac: 0x000c, 0x2fad: 0x000c, 0x2fae: 0x000c, 0x2faf: 0x000c, - 0x2fb0: 0x000c, 0x2fb2: 0x000c, 0x2fb3: 0x000c, 0x2fb5: 0x000c, - 0x2fb6: 0x000c, - // Block 0xbf, offset 0x2fc0 - 0x2ff1: 0x000c, 0x2ff2: 0x000c, 0x2ff3: 0x000c, 0x2ff4: 0x000c, 0x2ff5: 0x000c, - 0x2ff6: 0x000c, 0x2ffa: 0x000c, - 0x2ffc: 0x000c, 0x2ffd: 0x000c, 0x2fff: 0x000c, - // Block 0xc0, offset 0x3000 - 0x3000: 0x000c, 0x3001: 0x000c, 0x3002: 0x000c, 0x3003: 0x000c, 0x3004: 0x000c, 0x3005: 0x000c, - 0x3007: 0x000c, - // Block 0xc1, offset 0x3040 - 0x3050: 0x000c, 0x3051: 0x000c, - 0x3055: 0x000c, 0x3057: 0x000c, - // Block 0xc2, offset 0x3080 - 0x30b3: 0x000c, 0x30b4: 0x000c, - // Block 0xc3, offset 0x30c0 - 0x30f0: 0x000c, 0x30f1: 0x000c, 0x30f2: 0x000c, 0x30f3: 0x000c, 0x30f4: 0x000c, - // Block 0xc4, offset 0x3100 - 0x3130: 0x000c, 0x3131: 0x000c, 0x3132: 0x000c, 0x3133: 0x000c, 0x3134: 0x000c, 0x3135: 0x000c, - 0x3136: 0x000c, - // Block 0xc5, offset 0x3140 - 0x314f: 0x000c, 0x3150: 0x000c, 0x3151: 0x000c, - 0x3152: 0x000c, - // Block 0xc6, offset 0x3180 - 0x319d: 0x000c, - 0x319e: 0x000c, 0x31a0: 0x000b, 0x31a1: 0x000b, 0x31a2: 0x000b, 0x31a3: 0x000b, - // Block 0xc7, offset 0x31c0 - 0x31e7: 0x000c, 0x31e8: 0x000c, 0x31e9: 0x000c, - 0x31f3: 0x000b, 0x31f4: 0x000b, 0x31f5: 0x000b, - 0x31f6: 0x000b, 0x31f7: 0x000b, 0x31f8: 0x000b, 0x31f9: 0x000b, 0x31fa: 0x000b, 0x31fb: 0x000c, - 0x31fc: 0x000c, 0x31fd: 0x000c, 0x31fe: 0x000c, 0x31ff: 0x000c, - // Block 0xc8, offset 0x3200 - 0x3200: 0x000c, 0x3201: 0x000c, 0x3202: 0x000c, 0x3205: 0x000c, - 0x3206: 0x000c, 0x3207: 0x000c, 0x3208: 0x000c, 0x3209: 0x000c, 0x320a: 0x000c, 0x320b: 0x000c, - 0x322a: 0x000c, 0x322b: 0x000c, 0x322c: 0x000c, 0x322d: 0x000c, - // Block 0xc9, offset 0x3240 - 0x3240: 0x000a, 0x3241: 0x000a, 0x3242: 0x000c, 0x3243: 0x000c, 0x3244: 0x000c, 0x3245: 0x000a, - // Block 0xca, offset 0x3280 - 0x3280: 0x000a, 0x3281: 0x000a, 0x3282: 0x000a, 0x3283: 0x000a, 0x3284: 0x000a, 0x3285: 0x000a, - 0x3286: 0x000a, 0x3287: 0x000a, 0x3288: 0x000a, 0x3289: 0x000a, 0x328a: 0x000a, 0x328b: 0x000a, - 0x328c: 0x000a, 0x328d: 0x000a, 0x328e: 0x000a, 0x328f: 0x000a, 0x3290: 0x000a, 0x3291: 0x000a, - 0x3292: 0x000a, 0x3293: 0x000a, 0x3294: 0x000a, 0x3295: 0x000a, 0x3296: 0x000a, - // Block 0xcb, offset 0x32c0 - 0x32db: 0x000a, - // Block 0xcc, offset 0x3300 - 0x3315: 0x000a, - // Block 0xcd, offset 0x3340 - 0x334f: 0x000a, - // Block 0xce, offset 0x3380 - 0x3389: 0x000a, - // Block 0xcf, offset 0x33c0 - 0x33c3: 0x000a, - 0x33ce: 0x0002, 0x33cf: 0x0002, 0x33d0: 0x0002, 0x33d1: 0x0002, - 0x33d2: 0x0002, 0x33d3: 0x0002, 0x33d4: 0x0002, 0x33d5: 0x0002, 0x33d6: 0x0002, 0x33d7: 0x0002, - 0x33d8: 0x0002, 0x33d9: 0x0002, 0x33da: 0x0002, 0x33db: 0x0002, 0x33dc: 0x0002, 0x33dd: 0x0002, - 0x33de: 0x0002, 0x33df: 0x0002, 0x33e0: 0x0002, 0x33e1: 0x0002, 0x33e2: 0x0002, 0x33e3: 0x0002, - 0x33e4: 0x0002, 0x33e5: 0x0002, 0x33e6: 0x0002, 0x33e7: 0x0002, 0x33e8: 0x0002, 0x33e9: 0x0002, - 0x33ea: 0x0002, 0x33eb: 0x0002, 0x33ec: 0x0002, 0x33ed: 0x0002, 0x33ee: 0x0002, 0x33ef: 0x0002, - 0x33f0: 0x0002, 0x33f1: 0x0002, 0x33f2: 0x0002, 0x33f3: 0x0002, 0x33f4: 0x0002, 0x33f5: 0x0002, - 0x33f6: 0x0002, 0x33f7: 0x0002, 0x33f8: 0x0002, 0x33f9: 0x0002, 0x33fa: 0x0002, 0x33fb: 0x0002, - 0x33fc: 0x0002, 0x33fd: 0x0002, 0x33fe: 0x0002, 0x33ff: 0x0002, - // Block 0xd0, offset 0x3400 - 0x3400: 0x000c, 0x3401: 0x000c, 0x3402: 0x000c, 0x3403: 0x000c, 0x3404: 0x000c, 0x3405: 0x000c, - 0x3406: 0x000c, 0x3407: 0x000c, 0x3408: 0x000c, 0x3409: 0x000c, 0x340a: 0x000c, 0x340b: 0x000c, - 0x340c: 0x000c, 0x340d: 0x000c, 0x340e: 0x000c, 0x340f: 0x000c, 0x3410: 0x000c, 0x3411: 0x000c, - 0x3412: 0x000c, 0x3413: 0x000c, 0x3414: 0x000c, 0x3415: 0x000c, 0x3416: 0x000c, 0x3417: 0x000c, - 0x3418: 0x000c, 0x3419: 0x000c, 0x341a: 0x000c, 0x341b: 0x000c, 0x341c: 0x000c, 0x341d: 0x000c, - 0x341e: 0x000c, 0x341f: 0x000c, 0x3420: 0x000c, 0x3421: 0x000c, 0x3422: 0x000c, 0x3423: 0x000c, - 0x3424: 0x000c, 0x3425: 0x000c, 0x3426: 0x000c, 0x3427: 0x000c, 0x3428: 0x000c, 0x3429: 0x000c, - 0x342a: 0x000c, 0x342b: 0x000c, 0x342c: 0x000c, 0x342d: 0x000c, 0x342e: 0x000c, 0x342f: 0x000c, - 0x3430: 0x000c, 0x3431: 0x000c, 0x3432: 0x000c, 0x3433: 0x000c, 0x3434: 0x000c, 0x3435: 0x000c, - 0x3436: 0x000c, 0x343b: 0x000c, - 0x343c: 0x000c, 0x343d: 0x000c, 0x343e: 0x000c, 0x343f: 0x000c, - // Block 0xd1, offset 0x3440 - 0x3440: 0x000c, 0x3441: 0x000c, 0x3442: 0x000c, 0x3443: 0x000c, 0x3444: 0x000c, 0x3445: 0x000c, - 0x3446: 0x000c, 0x3447: 0x000c, 0x3448: 0x000c, 0x3449: 0x000c, 0x344a: 0x000c, 0x344b: 0x000c, - 0x344c: 0x000c, 0x344d: 0x000c, 0x344e: 0x000c, 0x344f: 0x000c, 0x3450: 0x000c, 0x3451: 0x000c, - 0x3452: 0x000c, 0x3453: 0x000c, 0x3454: 0x000c, 0x3455: 0x000c, 0x3456: 0x000c, 0x3457: 0x000c, - 0x3458: 0x000c, 0x3459: 0x000c, 0x345a: 0x000c, 0x345b: 0x000c, 0x345c: 0x000c, 0x345d: 0x000c, - 0x345e: 0x000c, 0x345f: 0x000c, 0x3460: 0x000c, 0x3461: 0x000c, 0x3462: 0x000c, 0x3463: 0x000c, - 0x3464: 0x000c, 0x3465: 0x000c, 0x3466: 0x000c, 0x3467: 0x000c, 0x3468: 0x000c, 0x3469: 0x000c, - 0x346a: 0x000c, 0x346b: 0x000c, 0x346c: 0x000c, - 0x3475: 0x000c, - // Block 0xd2, offset 0x3480 - 0x3484: 0x000c, - 0x349b: 0x000c, 0x349c: 0x000c, 0x349d: 0x000c, - 0x349e: 0x000c, 0x349f: 0x000c, 0x34a1: 0x000c, 0x34a2: 0x000c, 0x34a3: 0x000c, - 0x34a4: 0x000c, 0x34a5: 0x000c, 0x34a6: 0x000c, 0x34a7: 0x000c, 0x34a8: 0x000c, 0x34a9: 0x000c, - 0x34aa: 0x000c, 0x34ab: 0x000c, 0x34ac: 0x000c, 0x34ad: 0x000c, 0x34ae: 0x000c, 0x34af: 0x000c, - // Block 0xd3, offset 0x34c0 - 0x34c0: 0x000c, 0x34c1: 0x000c, 0x34c2: 0x000c, 0x34c3: 0x000c, 0x34c4: 0x000c, 0x34c5: 0x000c, - 0x34c6: 0x000c, 0x34c8: 0x000c, 0x34c9: 0x000c, 0x34ca: 0x000c, 0x34cb: 0x000c, - 0x34cc: 0x000c, 0x34cd: 0x000c, 0x34ce: 0x000c, 0x34cf: 0x000c, 0x34d0: 0x000c, 0x34d1: 0x000c, - 0x34d2: 0x000c, 0x34d3: 0x000c, 0x34d4: 0x000c, 0x34d5: 0x000c, 0x34d6: 0x000c, 0x34d7: 0x000c, - 0x34d8: 0x000c, 0x34db: 0x000c, 0x34dc: 0x000c, 0x34dd: 0x000c, - 0x34de: 0x000c, 0x34df: 0x000c, 0x34e0: 0x000c, 0x34e1: 0x000c, 0x34e3: 0x000c, - 0x34e4: 0x000c, 0x34e6: 0x000c, 0x34e7: 0x000c, 0x34e8: 0x000c, 0x34e9: 0x000c, - 0x34ea: 0x000c, - // Block 0xd4, offset 0x3500 - 0x3500: 0x0001, 0x3501: 0x0001, 0x3502: 0x0001, 0x3503: 0x0001, 0x3504: 0x0001, 0x3505: 0x0001, - 0x3506: 0x0001, 0x3507: 0x0001, 0x3508: 0x0001, 0x3509: 0x0001, 0x350a: 0x0001, 0x350b: 0x0001, - 0x350c: 0x0001, 0x350d: 0x0001, 0x350e: 0x0001, 0x350f: 0x0001, 0x3510: 0x000c, 0x3511: 0x000c, - 0x3512: 0x000c, 0x3513: 0x000c, 0x3514: 0x000c, 0x3515: 0x000c, 0x3516: 0x000c, 0x3517: 0x0001, - 0x3518: 0x0001, 0x3519: 0x0001, 0x351a: 0x0001, 0x351b: 0x0001, 0x351c: 0x0001, 0x351d: 0x0001, - 0x351e: 0x0001, 0x351f: 0x0001, 0x3520: 0x0001, 0x3521: 0x0001, 0x3522: 0x0001, 0x3523: 0x0001, - 0x3524: 0x0001, 0x3525: 0x0001, 0x3526: 0x0001, 0x3527: 0x0001, 0x3528: 0x0001, 0x3529: 0x0001, - 0x352a: 0x0001, 0x352b: 0x0001, 0x352c: 0x0001, 0x352d: 0x0001, 0x352e: 0x0001, 0x352f: 0x0001, - 0x3530: 0x0001, 0x3531: 0x0001, 0x3532: 0x0001, 0x3533: 0x0001, 0x3534: 0x0001, 0x3535: 0x0001, - 0x3536: 0x0001, 0x3537: 0x0001, 0x3538: 0x0001, 0x3539: 0x0001, 0x353a: 0x0001, 0x353b: 0x0001, - 0x353c: 0x0001, 0x353d: 0x0001, 0x353e: 0x0001, 0x353f: 0x0001, - // Block 0xd5, offset 0x3540 - 0x3540: 0x0001, 0x3541: 0x0001, 0x3542: 0x0001, 0x3543: 0x0001, 0x3544: 0x000c, 0x3545: 0x000c, - 0x3546: 0x000c, 0x3547: 0x000c, 0x3548: 0x000c, 0x3549: 0x000c, 0x354a: 0x000c, 0x354b: 0x0001, - 0x354c: 0x0001, 0x354d: 0x0001, 0x354e: 0x0001, 0x354f: 0x0001, 0x3550: 0x0001, 0x3551: 0x0001, - 0x3552: 0x0001, 0x3553: 0x0001, 0x3554: 0x0001, 0x3555: 0x0001, 0x3556: 0x0001, 0x3557: 0x0001, - 0x3558: 0x0001, 0x3559: 0x0001, 0x355a: 0x0001, 0x355b: 0x0001, 0x355c: 0x0001, 0x355d: 0x0001, - 0x355e: 0x0001, 0x355f: 0x0001, 0x3560: 0x0001, 0x3561: 0x0001, 0x3562: 0x0001, 0x3563: 0x0001, - 0x3564: 0x0001, 0x3565: 0x0001, 0x3566: 0x0001, 0x3567: 0x0001, 0x3568: 0x0001, 0x3569: 0x0001, - 0x356a: 0x0001, 0x356b: 0x0001, 0x356c: 0x0001, 0x356d: 0x0001, 0x356e: 0x0001, 0x356f: 0x0001, - 0x3570: 0x0001, 0x3571: 0x0001, 0x3572: 0x0001, 0x3573: 0x0001, 0x3574: 0x0001, 0x3575: 0x0001, - 0x3576: 0x0001, 0x3577: 0x0001, 0x3578: 0x0001, 0x3579: 0x0001, 0x357a: 0x0001, 0x357b: 0x0001, - 0x357c: 0x0001, 0x357d: 0x0001, 0x357e: 0x0001, 0x357f: 0x0001, - // Block 0xd6, offset 0x3580 - 0x3580: 0x000d, 0x3581: 0x000d, 0x3582: 0x000d, 0x3583: 0x000d, 0x3584: 0x000d, 0x3585: 0x000d, - 0x3586: 0x000d, 0x3587: 0x000d, 0x3588: 0x000d, 0x3589: 0x000d, 0x358a: 0x000d, 0x358b: 0x000d, - 0x358c: 0x000d, 0x358d: 0x000d, 0x358e: 0x000d, 0x358f: 0x000d, 0x3590: 0x000d, 0x3591: 0x000d, - 0x3592: 0x000d, 0x3593: 0x000d, 0x3594: 0x000d, 0x3595: 0x000d, 0x3596: 0x000d, 0x3597: 0x000d, - 0x3598: 0x000d, 0x3599: 0x000d, 0x359a: 0x000d, 0x359b: 0x000d, 0x359c: 0x000d, 0x359d: 0x000d, - 0x359e: 0x000d, 0x359f: 0x000d, 0x35a0: 0x000d, 0x35a1: 0x000d, 0x35a2: 0x000d, 0x35a3: 0x000d, - 0x35a4: 0x000d, 0x35a5: 0x000d, 0x35a6: 0x000d, 0x35a7: 0x000d, 0x35a8: 0x000d, 0x35a9: 0x000d, - 0x35aa: 0x000d, 0x35ab: 0x000d, 0x35ac: 0x000d, 0x35ad: 0x000d, 0x35ae: 0x000d, 0x35af: 0x000d, - 0x35b0: 0x000a, 0x35b1: 0x000a, 0x35b2: 0x000d, 0x35b3: 0x000d, 0x35b4: 0x000d, 0x35b5: 0x000d, - 0x35b6: 0x000d, 0x35b7: 0x000d, 0x35b8: 0x000d, 0x35b9: 0x000d, 0x35ba: 0x000d, 0x35bb: 0x000d, - 0x35bc: 0x000d, 0x35bd: 0x000d, 0x35be: 0x000d, 0x35bf: 0x000d, - // Block 0xd7, offset 0x35c0 - 0x35c0: 0x000a, 0x35c1: 0x000a, 0x35c2: 0x000a, 0x35c3: 0x000a, 0x35c4: 0x000a, 0x35c5: 0x000a, - 0x35c6: 0x000a, 0x35c7: 0x000a, 0x35c8: 0x000a, 0x35c9: 0x000a, 0x35ca: 0x000a, 0x35cb: 0x000a, - 0x35cc: 0x000a, 0x35cd: 0x000a, 0x35ce: 0x000a, 0x35cf: 0x000a, 0x35d0: 0x000a, 0x35d1: 0x000a, - 0x35d2: 0x000a, 0x35d3: 0x000a, 0x35d4: 0x000a, 0x35d5: 0x000a, 0x35d6: 0x000a, 0x35d7: 0x000a, - 0x35d8: 0x000a, 0x35d9: 0x000a, 0x35da: 0x000a, 0x35db: 0x000a, 0x35dc: 0x000a, 0x35dd: 0x000a, - 0x35de: 0x000a, 0x35df: 0x000a, 0x35e0: 0x000a, 0x35e1: 0x000a, 0x35e2: 0x000a, 0x35e3: 0x000a, - 0x35e4: 0x000a, 0x35e5: 0x000a, 0x35e6: 0x000a, 0x35e7: 0x000a, 0x35e8: 0x000a, 0x35e9: 0x000a, - 0x35ea: 0x000a, 0x35eb: 0x000a, - 0x35f0: 0x000a, 0x35f1: 0x000a, 0x35f2: 0x000a, 0x35f3: 0x000a, 0x35f4: 0x000a, 0x35f5: 0x000a, - 0x35f6: 0x000a, 0x35f7: 0x000a, 0x35f8: 0x000a, 0x35f9: 0x000a, 0x35fa: 0x000a, 0x35fb: 0x000a, - 0x35fc: 0x000a, 0x35fd: 0x000a, 0x35fe: 0x000a, 0x35ff: 0x000a, - // Block 0xd8, offset 0x3600 - 0x3600: 0x000a, 0x3601: 0x000a, 0x3602: 0x000a, 0x3603: 0x000a, 0x3604: 0x000a, 0x3605: 0x000a, - 0x3606: 0x000a, 0x3607: 0x000a, 0x3608: 0x000a, 0x3609: 0x000a, 0x360a: 0x000a, 0x360b: 0x000a, - 0x360c: 0x000a, 0x360d: 0x000a, 0x360e: 0x000a, 0x360f: 0x000a, 0x3610: 0x000a, 0x3611: 0x000a, - 0x3612: 0x000a, 0x3613: 0x000a, - 0x3620: 0x000a, 0x3621: 0x000a, 0x3622: 0x000a, 0x3623: 0x000a, - 0x3624: 0x000a, 0x3625: 0x000a, 0x3626: 0x000a, 0x3627: 0x000a, 0x3628: 0x000a, 0x3629: 0x000a, - 0x362a: 0x000a, 0x362b: 0x000a, 0x362c: 0x000a, 0x362d: 0x000a, 0x362e: 0x000a, - 0x3631: 0x000a, 0x3632: 0x000a, 0x3633: 0x000a, 0x3634: 0x000a, 0x3635: 0x000a, - 0x3636: 0x000a, 0x3637: 0x000a, 0x3638: 0x000a, 0x3639: 0x000a, 0x363a: 0x000a, 0x363b: 0x000a, - 0x363c: 0x000a, 0x363d: 0x000a, 0x363e: 0x000a, 0x363f: 0x000a, - // Block 0xd9, offset 0x3640 - 0x3641: 0x000a, 0x3642: 0x000a, 0x3643: 0x000a, 0x3644: 0x000a, 0x3645: 0x000a, - 0x3646: 0x000a, 0x3647: 0x000a, 0x3648: 0x000a, 0x3649: 0x000a, 0x364a: 0x000a, 0x364b: 0x000a, - 0x364c: 0x000a, 0x364d: 0x000a, 0x364e: 0x000a, 0x364f: 0x000a, 0x3651: 0x000a, - 0x3652: 0x000a, 0x3653: 0x000a, 0x3654: 0x000a, 0x3655: 0x000a, 0x3656: 0x000a, 0x3657: 0x000a, - 0x3658: 0x000a, 0x3659: 0x000a, 0x365a: 0x000a, 0x365b: 0x000a, 0x365c: 0x000a, 0x365d: 0x000a, - 0x365e: 0x000a, 0x365f: 0x000a, 0x3660: 0x000a, 0x3661: 0x000a, 0x3662: 0x000a, 0x3663: 0x000a, - 0x3664: 0x000a, 0x3665: 0x000a, 0x3666: 0x000a, 0x3667: 0x000a, 0x3668: 0x000a, 0x3669: 0x000a, - 0x366a: 0x000a, 0x366b: 0x000a, 0x366c: 0x000a, 0x366d: 0x000a, 0x366e: 0x000a, 0x366f: 0x000a, - 0x3670: 0x000a, 0x3671: 0x000a, 0x3672: 0x000a, 0x3673: 0x000a, 0x3674: 0x000a, 0x3675: 0x000a, - // Block 0xda, offset 0x3680 - 0x3680: 0x0002, 0x3681: 0x0002, 0x3682: 0x0002, 0x3683: 0x0002, 0x3684: 0x0002, 0x3685: 0x0002, - 0x3686: 0x0002, 0x3687: 0x0002, 0x3688: 0x0002, 0x3689: 0x0002, 0x368a: 0x0002, 0x368b: 0x000a, - 0x368c: 0x000a, - 0x36af: 0x000a, - // Block 0xdb, offset 0x36c0 - 0x36ea: 0x000a, 0x36eb: 0x000a, - // Block 0xdc, offset 0x3700 - 0x3720: 0x000a, 0x3721: 0x000a, 0x3722: 0x000a, 0x3723: 0x000a, - 0x3724: 0x000a, 0x3725: 0x000a, - // Block 0xdd, offset 0x3740 - 0x3740: 0x000a, 0x3741: 0x000a, 0x3742: 0x000a, 0x3743: 0x000a, 0x3744: 0x000a, 0x3745: 0x000a, - 0x3746: 0x000a, 0x3747: 0x000a, 0x3748: 0x000a, 0x3749: 0x000a, 0x374a: 0x000a, 0x374b: 0x000a, - 0x374c: 0x000a, 0x374d: 0x000a, 0x374e: 0x000a, 0x374f: 0x000a, 0x3750: 0x000a, 0x3751: 0x000a, - 0x3752: 0x000a, 0x3753: 0x000a, 0x3754: 0x000a, - 0x3760: 0x000a, 0x3761: 0x000a, 0x3762: 0x000a, 0x3763: 0x000a, - 0x3764: 0x000a, 0x3765: 0x000a, 0x3766: 0x000a, 0x3767: 0x000a, 0x3768: 0x000a, 0x3769: 0x000a, - 0x376a: 0x000a, 0x376b: 0x000a, 0x376c: 0x000a, - 0x3770: 0x000a, 0x3771: 0x000a, 0x3772: 0x000a, 0x3773: 0x000a, 0x3774: 0x000a, 0x3775: 0x000a, - 0x3776: 0x000a, 0x3777: 0x000a, 0x3778: 0x000a, 0x3779: 0x000a, - // Block 0xde, offset 0x3780 - 0x3780: 0x000a, 0x3781: 0x000a, 0x3782: 0x000a, 0x3783: 0x000a, 0x3784: 0x000a, 0x3785: 0x000a, - 0x3786: 0x000a, 0x3787: 0x000a, 0x3788: 0x000a, 0x3789: 0x000a, 0x378a: 0x000a, 0x378b: 0x000a, - 0x378c: 0x000a, 0x378d: 0x000a, 0x378e: 0x000a, 0x378f: 0x000a, 0x3790: 0x000a, 0x3791: 0x000a, - 0x3792: 0x000a, 0x3793: 0x000a, 0x3794: 0x000a, 0x3795: 0x000a, 0x3796: 0x000a, 0x3797: 0x000a, - 0x3798: 0x000a, - // Block 0xdf, offset 0x37c0 - 0x37c0: 0x000a, 0x37c1: 0x000a, 0x37c2: 0x000a, 0x37c3: 0x000a, 0x37c4: 0x000a, 0x37c5: 0x000a, - 0x37c6: 0x000a, 0x37c7: 0x000a, 0x37c8: 0x000a, 0x37c9: 0x000a, 0x37ca: 0x000a, 0x37cb: 0x000a, - 0x37d0: 0x000a, 0x37d1: 0x000a, - 0x37d2: 0x000a, 0x37d3: 0x000a, 0x37d4: 0x000a, 0x37d5: 0x000a, 0x37d6: 0x000a, 0x37d7: 0x000a, - 0x37d8: 0x000a, 0x37d9: 0x000a, 0x37da: 0x000a, 0x37db: 0x000a, 0x37dc: 0x000a, 0x37dd: 0x000a, - 0x37de: 0x000a, 0x37df: 0x000a, 0x37e0: 0x000a, 0x37e1: 0x000a, 0x37e2: 0x000a, 0x37e3: 0x000a, - 0x37e4: 0x000a, 0x37e5: 0x000a, 0x37e6: 0x000a, 0x37e7: 0x000a, 0x37e8: 0x000a, 0x37e9: 0x000a, - 0x37ea: 0x000a, 0x37eb: 0x000a, 0x37ec: 0x000a, 0x37ed: 0x000a, 0x37ee: 0x000a, 0x37ef: 0x000a, - 0x37f0: 0x000a, 0x37f1: 0x000a, 0x37f2: 0x000a, 0x37f3: 0x000a, 0x37f4: 0x000a, 0x37f5: 0x000a, - 0x37f6: 0x000a, 0x37f7: 0x000a, 0x37f8: 0x000a, 0x37f9: 0x000a, 0x37fa: 0x000a, 0x37fb: 0x000a, - 0x37fc: 0x000a, 0x37fd: 0x000a, 0x37fe: 0x000a, 0x37ff: 0x000a, - // Block 0xe0, offset 0x3800 - 0x3800: 0x000a, 0x3801: 0x000a, 0x3802: 0x000a, 0x3803: 0x000a, 0x3804: 0x000a, 0x3805: 0x000a, - 0x3806: 0x000a, 0x3807: 0x000a, - 0x3810: 0x000a, 0x3811: 0x000a, - 0x3812: 0x000a, 0x3813: 0x000a, 0x3814: 0x000a, 0x3815: 0x000a, 0x3816: 0x000a, 0x3817: 0x000a, - 0x3818: 0x000a, 0x3819: 0x000a, - 0x3820: 0x000a, 0x3821: 0x000a, 0x3822: 0x000a, 0x3823: 0x000a, - 0x3824: 0x000a, 0x3825: 0x000a, 0x3826: 0x000a, 0x3827: 0x000a, 0x3828: 0x000a, 0x3829: 0x000a, - 0x382a: 0x000a, 0x382b: 0x000a, 0x382c: 0x000a, 0x382d: 0x000a, 0x382e: 0x000a, 0x382f: 0x000a, - 0x3830: 0x000a, 0x3831: 0x000a, 0x3832: 0x000a, 0x3833: 0x000a, 0x3834: 0x000a, 0x3835: 0x000a, - 0x3836: 0x000a, 0x3837: 0x000a, 0x3838: 0x000a, 0x3839: 0x000a, 0x383a: 0x000a, 0x383b: 0x000a, - 0x383c: 0x000a, 0x383d: 0x000a, 0x383e: 0x000a, 0x383f: 0x000a, - // Block 0xe1, offset 0x3840 - 0x3840: 0x000a, 0x3841: 0x000a, 0x3842: 0x000a, 0x3843: 0x000a, 0x3844: 0x000a, 0x3845: 0x000a, - 0x3846: 0x000a, 0x3847: 0x000a, - 0x3850: 0x000a, 0x3851: 0x000a, - 0x3852: 0x000a, 0x3853: 0x000a, 0x3854: 0x000a, 0x3855: 0x000a, 0x3856: 0x000a, 0x3857: 0x000a, - 0x3858: 0x000a, 0x3859: 0x000a, 0x385a: 0x000a, 0x385b: 0x000a, 0x385c: 0x000a, 0x385d: 0x000a, - 0x385e: 0x000a, 0x385f: 0x000a, 0x3860: 0x000a, 0x3861: 0x000a, 0x3862: 0x000a, 0x3863: 0x000a, - 0x3864: 0x000a, 0x3865: 0x000a, 0x3866: 0x000a, 0x3867: 0x000a, 0x3868: 0x000a, 0x3869: 0x000a, - 0x386a: 0x000a, 0x386b: 0x000a, 0x386c: 0x000a, 0x386d: 0x000a, - // Block 0xe2, offset 0x3880 - 0x3880: 0x000a, 0x3881: 0x000a, 0x3882: 0x000a, 0x3883: 0x000a, 0x3884: 0x000a, 0x3885: 0x000a, - 0x3886: 0x000a, 0x3887: 0x000a, 0x3888: 0x000a, 0x3889: 0x000a, 0x388a: 0x000a, 0x388b: 0x000a, - 0x3890: 0x000a, 0x3891: 0x000a, - 0x3892: 0x000a, 0x3893: 0x000a, 0x3894: 0x000a, 0x3895: 0x000a, 0x3896: 0x000a, 0x3897: 0x000a, - 0x3898: 0x000a, 0x3899: 0x000a, 0x389a: 0x000a, 0x389b: 0x000a, 0x389c: 0x000a, 0x389d: 0x000a, - 0x389e: 0x000a, 0x389f: 0x000a, 0x38a0: 0x000a, 0x38a1: 0x000a, 0x38a2: 0x000a, 0x38a3: 0x000a, - 0x38a4: 0x000a, 0x38a5: 0x000a, 0x38a6: 0x000a, 0x38a7: 0x000a, 0x38a8: 0x000a, 0x38a9: 0x000a, - 0x38aa: 0x000a, 0x38ab: 0x000a, 0x38ac: 0x000a, 0x38ad: 0x000a, 0x38ae: 0x000a, 0x38af: 0x000a, - 0x38b0: 0x000a, 0x38b1: 0x000a, 0x38b2: 0x000a, 0x38b3: 0x000a, 0x38b4: 0x000a, 0x38b5: 0x000a, - 0x38b6: 0x000a, 0x38b7: 0x000a, 0x38b8: 0x000a, 0x38b9: 0x000a, 0x38ba: 0x000a, 0x38bb: 0x000a, - 0x38bc: 0x000a, 0x38bd: 0x000a, 0x38be: 0x000a, - // Block 0xe3, offset 0x38c0 - 0x38c0: 0x000a, 0x38c1: 0x000a, 0x38c2: 0x000a, 0x38c3: 0x000a, 0x38c4: 0x000a, 0x38c5: 0x000a, - 0x38c6: 0x000a, 0x38c7: 0x000a, 0x38c8: 0x000a, 0x38c9: 0x000a, 0x38ca: 0x000a, 0x38cb: 0x000a, - 0x38cc: 0x000a, 0x38cd: 0x000a, 0x38ce: 0x000a, 0x38cf: 0x000a, 0x38d0: 0x000a, 0x38d1: 0x000a, - 0x38d2: 0x000a, 0x38d3: 0x000a, 0x38d4: 0x000a, 0x38d5: 0x000a, 0x38d6: 0x000a, 0x38d7: 0x000a, - 0x38d8: 0x000a, 0x38d9: 0x000a, 0x38da: 0x000a, 0x38db: 0x000a, 0x38dc: 0x000a, 0x38dd: 0x000a, - 0x38de: 0x000a, 0x38df: 0x000a, 0x38e0: 0x000a, 0x38e1: 0x000a, 0x38e2: 0x000a, 0x38e3: 0x000a, - 0x38e4: 0x000a, 0x38e5: 0x000a, 0x38e6: 0x000a, 0x38e7: 0x000a, 0x38e8: 0x000a, 0x38e9: 0x000a, - 0x38ea: 0x000a, 0x38eb: 0x000a, 0x38ec: 0x000a, 0x38ed: 0x000a, 0x38ee: 0x000a, 0x38ef: 0x000a, - 0x38f0: 0x000a, 0x38f3: 0x000a, 0x38f4: 0x000a, 0x38f5: 0x000a, - 0x38f6: 0x000a, 0x38fa: 0x000a, - 0x38fc: 0x000a, 0x38fd: 0x000a, 0x38fe: 0x000a, 0x38ff: 0x000a, - // Block 0xe4, offset 0x3900 - 0x3900: 0x000a, 0x3901: 0x000a, 0x3902: 0x000a, 0x3903: 0x000a, 0x3904: 0x000a, 0x3905: 0x000a, - 0x3906: 0x000a, 0x3907: 0x000a, 0x3908: 0x000a, 0x3909: 0x000a, 0x390a: 0x000a, 0x390b: 0x000a, - 0x390c: 0x000a, 0x390d: 0x000a, 0x390e: 0x000a, 0x390f: 0x000a, 0x3910: 0x000a, 0x3911: 0x000a, - 0x3912: 0x000a, 0x3913: 0x000a, 0x3914: 0x000a, 0x3915: 0x000a, 0x3916: 0x000a, 0x3917: 0x000a, - 0x3918: 0x000a, 0x3919: 0x000a, 0x391a: 0x000a, 0x391b: 0x000a, 0x391c: 0x000a, 0x391d: 0x000a, - 0x391e: 0x000a, 0x391f: 0x000a, 0x3920: 0x000a, 0x3921: 0x000a, 0x3922: 0x000a, - 0x3930: 0x000a, 0x3931: 0x000a, 0x3932: 0x000a, 0x3933: 0x000a, 0x3934: 0x000a, 0x3935: 0x000a, - 0x3936: 0x000a, 0x3937: 0x000a, 0x3938: 0x000a, 0x3939: 0x000a, - // Block 0xe5, offset 0x3940 - 0x3940: 0x000a, 0x3941: 0x000a, 0x3942: 0x000a, - 0x3950: 0x000a, 0x3951: 0x000a, - 0x3952: 0x000a, 0x3953: 0x000a, 0x3954: 0x000a, 0x3955: 0x000a, 0x3956: 0x000a, 0x3957: 0x000a, - 0x3958: 0x000a, 0x3959: 0x000a, 0x395a: 0x000a, 0x395b: 0x000a, 0x395c: 0x000a, 0x395d: 0x000a, - 0x395e: 0x000a, 0x395f: 0x000a, 0x3960: 0x000a, 0x3961: 0x000a, 0x3962: 0x000a, 0x3963: 0x000a, - 0x3964: 0x000a, 0x3965: 0x000a, 0x3966: 0x000a, 0x3967: 0x000a, 0x3968: 0x000a, 0x3969: 0x000a, - 0x396a: 0x000a, 0x396b: 0x000a, 0x396c: 0x000a, 0x396d: 0x000a, 0x396e: 0x000a, 0x396f: 0x000a, - 0x3970: 0x000a, 0x3971: 0x000a, 0x3972: 0x000a, 0x3973: 0x000a, 0x3974: 0x000a, 0x3975: 0x000a, - 0x3976: 0x000a, 0x3977: 0x000a, 0x3978: 0x000a, 0x3979: 0x000a, 0x397a: 0x000a, 0x397b: 0x000a, - 0x397c: 0x000a, 0x397d: 0x000a, 0x397e: 0x000a, 0x397f: 0x000a, - // Block 0xe6, offset 0x3980 - 0x39a0: 0x000a, 0x39a1: 0x000a, 0x39a2: 0x000a, 0x39a3: 0x000a, - 0x39a4: 0x000a, 0x39a5: 0x000a, 0x39a6: 0x000a, 0x39a7: 0x000a, 0x39a8: 0x000a, 0x39a9: 0x000a, - 0x39aa: 0x000a, 0x39ab: 0x000a, 0x39ac: 0x000a, 0x39ad: 0x000a, - // Block 0xe7, offset 0x39c0 - 0x39fe: 0x000b, 0x39ff: 0x000b, - // Block 0xe8, offset 0x3a00 - 0x3a00: 0x000b, 0x3a01: 0x000b, 0x3a02: 0x000b, 0x3a03: 0x000b, 0x3a04: 0x000b, 0x3a05: 0x000b, - 0x3a06: 0x000b, 0x3a07: 0x000b, 0x3a08: 0x000b, 0x3a09: 0x000b, 0x3a0a: 0x000b, 0x3a0b: 0x000b, - 0x3a0c: 0x000b, 0x3a0d: 0x000b, 0x3a0e: 0x000b, 0x3a0f: 0x000b, 0x3a10: 0x000b, 0x3a11: 0x000b, - 0x3a12: 0x000b, 0x3a13: 0x000b, 0x3a14: 0x000b, 0x3a15: 0x000b, 0x3a16: 0x000b, 0x3a17: 0x000b, - 0x3a18: 0x000b, 0x3a19: 0x000b, 0x3a1a: 0x000b, 0x3a1b: 0x000b, 0x3a1c: 0x000b, 0x3a1d: 0x000b, - 0x3a1e: 0x000b, 0x3a1f: 0x000b, 0x3a20: 0x000b, 0x3a21: 0x000b, 0x3a22: 0x000b, 0x3a23: 0x000b, - 0x3a24: 0x000b, 0x3a25: 0x000b, 0x3a26: 0x000b, 0x3a27: 0x000b, 0x3a28: 0x000b, 0x3a29: 0x000b, - 0x3a2a: 0x000b, 0x3a2b: 0x000b, 0x3a2c: 0x000b, 0x3a2d: 0x000b, 0x3a2e: 0x000b, 0x3a2f: 0x000b, - 0x3a30: 0x000b, 0x3a31: 0x000b, 0x3a32: 0x000b, 0x3a33: 0x000b, 0x3a34: 0x000b, 0x3a35: 0x000b, - 0x3a36: 0x000b, 0x3a37: 0x000b, 0x3a38: 0x000b, 0x3a39: 0x000b, 0x3a3a: 0x000b, 0x3a3b: 0x000b, - 0x3a3c: 0x000b, 0x3a3d: 0x000b, 0x3a3e: 0x000b, 0x3a3f: 0x000b, - // Block 0xe9, offset 0x3a40 - 0x3a40: 0x000c, 0x3a41: 0x000c, 0x3a42: 0x000c, 0x3a43: 0x000c, 0x3a44: 0x000c, 0x3a45: 0x000c, - 0x3a46: 0x000c, 0x3a47: 0x000c, 0x3a48: 0x000c, 0x3a49: 0x000c, 0x3a4a: 0x000c, 0x3a4b: 0x000c, - 0x3a4c: 0x000c, 0x3a4d: 0x000c, 0x3a4e: 0x000c, 0x3a4f: 0x000c, 0x3a50: 0x000c, 0x3a51: 0x000c, - 0x3a52: 0x000c, 0x3a53: 0x000c, 0x3a54: 0x000c, 0x3a55: 0x000c, 0x3a56: 0x000c, 0x3a57: 0x000c, - 0x3a58: 0x000c, 0x3a59: 0x000c, 0x3a5a: 0x000c, 0x3a5b: 0x000c, 0x3a5c: 0x000c, 0x3a5d: 0x000c, - 0x3a5e: 0x000c, 0x3a5f: 0x000c, 0x3a60: 0x000c, 0x3a61: 0x000c, 0x3a62: 0x000c, 0x3a63: 0x000c, - 0x3a64: 0x000c, 0x3a65: 0x000c, 0x3a66: 0x000c, 0x3a67: 0x000c, 0x3a68: 0x000c, 0x3a69: 0x000c, - 0x3a6a: 0x000c, 0x3a6b: 0x000c, 0x3a6c: 0x000c, 0x3a6d: 0x000c, 0x3a6e: 0x000c, 0x3a6f: 0x000c, - 0x3a70: 0x000b, 0x3a71: 0x000b, 0x3a72: 0x000b, 0x3a73: 0x000b, 0x3a74: 0x000b, 0x3a75: 0x000b, - 0x3a76: 0x000b, 0x3a77: 0x000b, 0x3a78: 0x000b, 0x3a79: 0x000b, 0x3a7a: 0x000b, 0x3a7b: 0x000b, - 0x3a7c: 0x000b, 0x3a7d: 0x000b, 0x3a7e: 0x000b, 0x3a7f: 0x000b, -} - -// bidiIndex: 24 blocks, 1536 entries, 1536 bytes -// Block 0 is the zero block. -var bidiIndex = [1536]uint8{ - // Block 0x0, offset 0x0 - // Block 0x1, offset 0x40 - // Block 0x2, offset 0x80 - // Block 0x3, offset 0xc0 - 0xc2: 0x01, 0xc3: 0x02, - 0xca: 0x03, 0xcb: 0x04, 0xcc: 0x05, 0xcd: 0x06, 0xce: 0x07, 0xcf: 0x08, - 0xd2: 0x09, 0xd6: 0x0a, 0xd7: 0x0b, - 0xd8: 0x0c, 0xd9: 0x0d, 0xda: 0x0e, 0xdb: 0x0f, 0xdc: 0x10, 0xdd: 0x11, 0xde: 0x12, 0xdf: 0x13, - 0xe0: 0x02, 0xe1: 0x03, 0xe2: 0x04, 0xe3: 0x05, 0xe4: 0x06, - 0xea: 0x07, 0xef: 0x08, - 0xf0: 0x11, 0xf1: 0x12, 0xf2: 0x12, 0xf3: 0x14, 0xf4: 0x15, - // Block 0x4, offset 0x100 - 0x120: 0x14, 0x121: 0x15, 0x122: 0x16, 0x123: 0x17, 0x124: 0x18, 0x125: 0x19, 0x126: 0x1a, 0x127: 0x1b, - 0x128: 0x1c, 0x129: 0x1d, 0x12a: 0x1c, 0x12b: 0x1e, 0x12c: 0x1f, 0x12d: 0x20, 0x12e: 0x21, 0x12f: 0x22, - 0x130: 0x23, 0x131: 0x24, 0x132: 0x1a, 0x133: 0x25, 0x134: 0x26, 0x135: 0x27, 0x137: 0x28, - 0x138: 0x29, 0x139: 0x2a, 0x13a: 0x2b, 0x13b: 0x2c, 0x13c: 0x2d, 0x13d: 0x2e, 0x13e: 0x2f, 0x13f: 0x30, - // Block 0x5, offset 0x140 - 0x140: 0x31, 0x141: 0x32, 0x142: 0x33, - 0x14d: 0x34, 0x14e: 0x35, - 0x150: 0x36, - 0x15a: 0x37, 0x15c: 0x38, 0x15d: 0x39, 0x15e: 0x3a, 0x15f: 0x3b, - 0x160: 0x3c, 0x162: 0x3d, 0x164: 0x3e, 0x165: 0x3f, 0x167: 0x40, - 0x168: 0x41, 0x169: 0x42, 0x16a: 0x43, 0x16c: 0x44, 0x16d: 0x45, 0x16e: 0x46, 0x16f: 0x47, - 0x170: 0x48, 0x173: 0x49, 0x177: 0x4a, - 0x17e: 0x4b, 0x17f: 0x4c, - // Block 0x6, offset 0x180 - 0x180: 0x4d, 0x181: 0x4e, 0x182: 0x4f, 0x183: 0x50, 0x184: 0x51, 0x185: 0x52, 0x186: 0x53, 0x187: 0x54, - 0x188: 0x55, 0x189: 0x54, 0x18a: 0x54, 0x18b: 0x54, 0x18c: 0x56, 0x18d: 0x57, 0x18e: 0x58, 0x18f: 0x54, - 0x190: 0x59, 0x191: 0x5a, 0x192: 0x5b, 0x193: 0x5c, 0x194: 0x54, 0x195: 0x54, 0x196: 0x54, 0x197: 0x54, - 0x198: 0x54, 0x199: 0x54, 0x19a: 0x5d, 0x19b: 0x54, 0x19c: 0x54, 0x19d: 0x5e, 0x19e: 0x54, 0x19f: 0x5f, - 0x1a4: 0x54, 0x1a5: 0x54, 0x1a6: 0x60, 0x1a7: 0x61, - 0x1a8: 0x54, 0x1a9: 0x54, 0x1aa: 0x54, 0x1ab: 0x54, 0x1ac: 0x54, 0x1ad: 0x62, 0x1ae: 0x63, 0x1af: 0x64, - 0x1b3: 0x65, 0x1b5: 0x66, 0x1b7: 0x67, - 0x1b8: 0x68, 0x1b9: 0x69, 0x1ba: 0x6a, 0x1bb: 0x6b, 0x1bc: 0x54, 0x1bd: 0x54, 0x1be: 0x54, 0x1bf: 0x6c, - // Block 0x7, offset 0x1c0 - 0x1c0: 0x6d, 0x1c2: 0x6e, 0x1c3: 0x6f, 0x1c7: 0x70, - 0x1c8: 0x71, 0x1c9: 0x72, 0x1ca: 0x73, 0x1cb: 0x74, 0x1cd: 0x75, 0x1cf: 0x76, - // Block 0x8, offset 0x200 - 0x237: 0x54, - // Block 0x9, offset 0x240 - 0x252: 0x77, 0x253: 0x78, - 0x258: 0x79, 0x259: 0x7a, 0x25a: 0x7b, 0x25b: 0x7c, 0x25c: 0x7d, 0x25e: 0x7e, - 0x260: 0x7f, 0x261: 0x80, 0x263: 0x81, 0x264: 0x82, 0x265: 0x83, 0x266: 0x84, 0x267: 0x85, - 0x268: 0x86, 0x269: 0x87, 0x26a: 0x88, 0x26b: 0x89, 0x26f: 0x8a, - // Block 0xa, offset 0x280 - 0x2ac: 0x8b, 0x2ad: 0x8c, 0x2ae: 0x0e, 0x2af: 0x0e, - 0x2b0: 0x0e, 0x2b1: 0x0e, 0x2b2: 0x0e, 0x2b3: 0x0e, 0x2b4: 0x8d, 0x2b5: 0x0e, 0x2b6: 0x0e, 0x2b7: 0x8e, - 0x2b8: 0x8f, 0x2b9: 0x90, 0x2ba: 0x0e, 0x2bb: 0x91, 0x2bc: 0x92, 0x2bd: 0x93, 0x2bf: 0x94, - // Block 0xb, offset 0x2c0 - 0x2c4: 0x95, 0x2c5: 0x54, 0x2c6: 0x96, 0x2c7: 0x97, - 0x2cb: 0x98, 0x2cd: 0x99, - 0x2e0: 0x9a, 0x2e1: 0x9a, 0x2e2: 0x9a, 0x2e3: 0x9a, 0x2e4: 0x9b, 0x2e5: 0x9a, 0x2e6: 0x9a, 0x2e7: 0x9a, - 0x2e8: 0x9c, 0x2e9: 0x9a, 0x2ea: 0x9a, 0x2eb: 0x9d, 0x2ec: 0x9e, 0x2ed: 0x9a, 0x2ee: 0x9a, 0x2ef: 0x9a, - 0x2f0: 0x9a, 0x2f1: 0x9a, 0x2f2: 0x9a, 0x2f3: 0x9a, 0x2f4: 0x9f, 0x2f5: 0x9a, 0x2f6: 0x9a, 0x2f7: 0x9a, - 0x2f8: 0x9a, 0x2f9: 0xa0, 0x2fa: 0x9a, 0x2fb: 0x9a, 0x2fc: 0xa1, 0x2fd: 0xa2, 0x2fe: 0x9a, 0x2ff: 0x9a, - // Block 0xc, offset 0x300 - 0x300: 0xa3, 0x301: 0xa4, 0x302: 0xa5, 0x304: 0xa6, 0x305: 0xa7, 0x306: 0xa8, 0x307: 0xa9, - 0x308: 0xaa, 0x30b: 0xab, 0x30c: 0x26, 0x30d: 0xac, - 0x310: 0xad, 0x311: 0xae, 0x312: 0xaf, 0x313: 0xb0, 0x316: 0xb1, 0x317: 0xb2, - 0x318: 0xb3, 0x319: 0xb4, 0x31a: 0xb5, 0x31c: 0xb6, - 0x320: 0xb7, - 0x328: 0xb8, 0x329: 0xb9, 0x32a: 0xba, - 0x330: 0xbb, 0x332: 0xbc, 0x334: 0xbd, 0x335: 0xbe, 0x336: 0xbf, - 0x33b: 0xc0, - // Block 0xd, offset 0x340 - 0x36b: 0xc1, 0x36c: 0xc2, - 0x37e: 0xc3, - // Block 0xe, offset 0x380 - 0x3b2: 0xc4, - // Block 0xf, offset 0x3c0 - 0x3c5: 0xc5, 0x3c6: 0xc6, - 0x3c8: 0x54, 0x3c9: 0xc7, 0x3cc: 0x54, 0x3cd: 0xc8, - 0x3db: 0xc9, 0x3dc: 0xca, 0x3dd: 0xcb, 0x3de: 0xcc, 0x3df: 0xcd, - 0x3e8: 0xce, 0x3e9: 0xcf, 0x3ea: 0xd0, - // Block 0x10, offset 0x400 - 0x400: 0xd1, - 0x420: 0x9a, 0x421: 0x9a, 0x422: 0x9a, 0x423: 0xd2, 0x424: 0x9a, 0x425: 0xd3, 0x426: 0x9a, 0x427: 0x9a, - 0x428: 0x9a, 0x429: 0x9a, 0x42a: 0x9a, 0x42b: 0x9a, 0x42c: 0x9a, 0x42d: 0x9a, 0x42e: 0x9a, 0x42f: 0x9a, - 0x430: 0x9a, 0x431: 0xa1, 0x432: 0x0e, 0x433: 0x9a, 0x434: 0x9a, 0x435: 0x9a, 0x436: 0x9a, 0x437: 0x9a, - 0x438: 0x0e, 0x439: 0x0e, 0x43a: 0x0e, 0x43b: 0xd4, 0x43c: 0x9a, 0x43d: 0x9a, 0x43e: 0x9a, 0x43f: 0x9a, - // Block 0x11, offset 0x440 - 0x440: 0xd5, 0x441: 0x54, 0x442: 0xd6, 0x443: 0xd7, 0x444: 0xd8, 0x445: 0xd9, - 0x449: 0xda, 0x44c: 0x54, 0x44d: 0x54, 0x44e: 0x54, 0x44f: 0x54, - 0x450: 0x54, 0x451: 0x54, 0x452: 0x54, 0x453: 0x54, 0x454: 0x54, 0x455: 0x54, 0x456: 0x54, 0x457: 0x54, - 0x458: 0x54, 0x459: 0x54, 0x45a: 0x54, 0x45b: 0xdb, 0x45c: 0x54, 0x45d: 0x6b, 0x45e: 0x54, 0x45f: 0xdc, - 0x460: 0xdd, 0x461: 0xde, 0x462: 0xdf, 0x464: 0xe0, 0x465: 0xe1, 0x466: 0xe2, 0x467: 0xe3, - 0x469: 0xe4, - 0x47f: 0xe5, - // Block 0x12, offset 0x480 - 0x4bf: 0xe5, - // Block 0x13, offset 0x4c0 - 0x4d0: 0x09, 0x4d1: 0x0a, 0x4d6: 0x0b, - 0x4db: 0x0c, 0x4dd: 0x0d, 0x4de: 0x0e, 0x4df: 0x0f, - 0x4ef: 0x10, - 0x4ff: 0x10, - // Block 0x14, offset 0x500 - 0x50f: 0x10, - 0x51f: 0x10, - 0x52f: 0x10, - 0x53f: 0x10, - // Block 0x15, offset 0x540 - 0x540: 0xe6, 0x541: 0xe6, 0x542: 0xe6, 0x543: 0xe6, 0x544: 0x05, 0x545: 0x05, 0x546: 0x05, 0x547: 0xe7, - 0x548: 0xe6, 0x549: 0xe6, 0x54a: 0xe6, 0x54b: 0xe6, 0x54c: 0xe6, 0x54d: 0xe6, 0x54e: 0xe6, 0x54f: 0xe6, - 0x550: 0xe6, 0x551: 0xe6, 0x552: 0xe6, 0x553: 0xe6, 0x554: 0xe6, 0x555: 0xe6, 0x556: 0xe6, 0x557: 0xe6, - 0x558: 0xe6, 0x559: 0xe6, 0x55a: 0xe6, 0x55b: 0xe6, 0x55c: 0xe6, 0x55d: 0xe6, 0x55e: 0xe6, 0x55f: 0xe6, - 0x560: 0xe6, 0x561: 0xe6, 0x562: 0xe6, 0x563: 0xe6, 0x564: 0xe6, 0x565: 0xe6, 0x566: 0xe6, 0x567: 0xe6, - 0x568: 0xe6, 0x569: 0xe6, 0x56a: 0xe6, 0x56b: 0xe6, 0x56c: 0xe6, 0x56d: 0xe6, 0x56e: 0xe6, 0x56f: 0xe6, - 0x570: 0xe6, 0x571: 0xe6, 0x572: 0xe6, 0x573: 0xe6, 0x574: 0xe6, 0x575: 0xe6, 0x576: 0xe6, 0x577: 0xe6, - 0x578: 0xe6, 0x579: 0xe6, 0x57a: 0xe6, 0x57b: 0xe6, 0x57c: 0xe6, 0x57d: 0xe6, 0x57e: 0xe6, 0x57f: 0xe6, - // Block 0x16, offset 0x580 - 0x58f: 0x10, - 0x59f: 0x10, - 0x5a0: 0x13, - 0x5af: 0x10, - 0x5bf: 0x10, - // Block 0x17, offset 0x5c0 - 0x5cf: 0x10, -} - -// Total table size 16568 bytes (16KiB); checksum: F50EF68C diff --git a/vendor/golang.org/x/text/unicode/bidi/tables12.0.0.go b/vendor/golang.org/x/text/unicode/bidi/tables12.0.0.go deleted file mode 100644 index 3aa2c3bdf8..0000000000 --- a/vendor/golang.org/x/text/unicode/bidi/tables12.0.0.go +++ /dev/null @@ -1,1923 +0,0 @@ -// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. - -//go:build go1.14 && !go1.16 - -package bidi - -// UnicodeVersion is the Unicode version from which the tables in this package are derived. -const UnicodeVersion = "12.0.0" - -// xorMasks contains masks to be xor-ed with brackets to get the reverse -// version. -var xorMasks = []int32{ // 8 elements - 0, 1, 6, 7, 3, 15, 29, 63, -} // Size: 56 bytes - -// lookup returns the trie value for the first UTF-8 encoding in s and -// the width in bytes of this encoding. The size will be 0 if s does not -// hold enough bytes to complete the encoding. len(s) must be greater than 0. -func (t *bidiTrie) lookup(s []byte) (v uint8, sz int) { - c0 := s[0] - switch { - case c0 < 0x80: // is ASCII - return bidiValues[c0], 1 - case c0 < 0xC2: - return 0, 1 // Illegal UTF-8: not a starter, not ASCII. - case c0 < 0xE0: // 2-byte UTF-8 - if len(s) < 2 { - return 0, 0 - } - i := bidiIndex[c0] - c1 := s[1] - if c1 < 0x80 || 0xC0 <= c1 { - return 0, 1 // Illegal UTF-8: not a continuation byte. - } - return t.lookupValue(uint32(i), c1), 2 - case c0 < 0xF0: // 3-byte UTF-8 - if len(s) < 3 { - return 0, 0 - } - i := bidiIndex[c0] - c1 := s[1] - if c1 < 0x80 || 0xC0 <= c1 { - return 0, 1 // Illegal UTF-8: not a continuation byte. - } - o := uint32(i)<<6 + uint32(c1) - i = bidiIndex[o] - c2 := s[2] - if c2 < 0x80 || 0xC0 <= c2 { - return 0, 2 // Illegal UTF-8: not a continuation byte. - } - return t.lookupValue(uint32(i), c2), 3 - case c0 < 0xF8: // 4-byte UTF-8 - if len(s) < 4 { - return 0, 0 - } - i := bidiIndex[c0] - c1 := s[1] - if c1 < 0x80 || 0xC0 <= c1 { - return 0, 1 // Illegal UTF-8: not a continuation byte. - } - o := uint32(i)<<6 + uint32(c1) - i = bidiIndex[o] - c2 := s[2] - if c2 < 0x80 || 0xC0 <= c2 { - return 0, 2 // Illegal UTF-8: not a continuation byte. - } - o = uint32(i)<<6 + uint32(c2) - i = bidiIndex[o] - c3 := s[3] - if c3 < 0x80 || 0xC0 <= c3 { - return 0, 3 // Illegal UTF-8: not a continuation byte. - } - return t.lookupValue(uint32(i), c3), 4 - } - // Illegal rune - return 0, 1 -} - -// lookupUnsafe returns the trie value for the first UTF-8 encoding in s. -// s must start with a full and valid UTF-8 encoded rune. -func (t *bidiTrie) lookupUnsafe(s []byte) uint8 { - c0 := s[0] - if c0 < 0x80 { // is ASCII - return bidiValues[c0] - } - i := bidiIndex[c0] - if c0 < 0xE0 { // 2-byte UTF-8 - return t.lookupValue(uint32(i), s[1]) - } - i = bidiIndex[uint32(i)<<6+uint32(s[1])] - if c0 < 0xF0 { // 3-byte UTF-8 - return t.lookupValue(uint32(i), s[2]) - } - i = bidiIndex[uint32(i)<<6+uint32(s[2])] - if c0 < 0xF8 { // 4-byte UTF-8 - return t.lookupValue(uint32(i), s[3]) - } - return 0 -} - -// lookupString returns the trie value for the first UTF-8 encoding in s and -// the width in bytes of this encoding. The size will be 0 if s does not -// hold enough bytes to complete the encoding. len(s) must be greater than 0. -func (t *bidiTrie) lookupString(s string) (v uint8, sz int) { - c0 := s[0] - switch { - case c0 < 0x80: // is ASCII - return bidiValues[c0], 1 - case c0 < 0xC2: - return 0, 1 // Illegal UTF-8: not a starter, not ASCII. - case c0 < 0xE0: // 2-byte UTF-8 - if len(s) < 2 { - return 0, 0 - } - i := bidiIndex[c0] - c1 := s[1] - if c1 < 0x80 || 0xC0 <= c1 { - return 0, 1 // Illegal UTF-8: not a continuation byte. - } - return t.lookupValue(uint32(i), c1), 2 - case c0 < 0xF0: // 3-byte UTF-8 - if len(s) < 3 { - return 0, 0 - } - i := bidiIndex[c0] - c1 := s[1] - if c1 < 0x80 || 0xC0 <= c1 { - return 0, 1 // Illegal UTF-8: not a continuation byte. - } - o := uint32(i)<<6 + uint32(c1) - i = bidiIndex[o] - c2 := s[2] - if c2 < 0x80 || 0xC0 <= c2 { - return 0, 2 // Illegal UTF-8: not a continuation byte. - } - return t.lookupValue(uint32(i), c2), 3 - case c0 < 0xF8: // 4-byte UTF-8 - if len(s) < 4 { - return 0, 0 - } - i := bidiIndex[c0] - c1 := s[1] - if c1 < 0x80 || 0xC0 <= c1 { - return 0, 1 // Illegal UTF-8: not a continuation byte. - } - o := uint32(i)<<6 + uint32(c1) - i = bidiIndex[o] - c2 := s[2] - if c2 < 0x80 || 0xC0 <= c2 { - return 0, 2 // Illegal UTF-8: not a continuation byte. - } - o = uint32(i)<<6 + uint32(c2) - i = bidiIndex[o] - c3 := s[3] - if c3 < 0x80 || 0xC0 <= c3 { - return 0, 3 // Illegal UTF-8: not a continuation byte. - } - return t.lookupValue(uint32(i), c3), 4 - } - // Illegal rune - return 0, 1 -} - -// lookupStringUnsafe returns the trie value for the first UTF-8 encoding in s. -// s must start with a full and valid UTF-8 encoded rune. -func (t *bidiTrie) lookupStringUnsafe(s string) uint8 { - c0 := s[0] - if c0 < 0x80 { // is ASCII - return bidiValues[c0] - } - i := bidiIndex[c0] - if c0 < 0xE0 { // 2-byte UTF-8 - return t.lookupValue(uint32(i), s[1]) - } - i = bidiIndex[uint32(i)<<6+uint32(s[1])] - if c0 < 0xF0 { // 3-byte UTF-8 - return t.lookupValue(uint32(i), s[2]) - } - i = bidiIndex[uint32(i)<<6+uint32(s[2])] - if c0 < 0xF8 { // 4-byte UTF-8 - return t.lookupValue(uint32(i), s[3]) - } - return 0 -} - -// bidiTrie. Total size: 16896 bytes (16.50 KiB). Checksum: 6f0927067913dc6d. -type bidiTrie struct{} - -func newBidiTrie(i int) *bidiTrie { - return &bidiTrie{} -} - -// lookupValue determines the type of block n and looks up the value for b. -func (t *bidiTrie) lookupValue(n uint32, b byte) uint8 { - switch { - default: - return uint8(bidiValues[n<<6+uint32(b)]) - } -} - -// bidiValues: 240 blocks, 15360 entries, 15360 bytes -// The third block is the zero block. -var bidiValues = [15360]uint8{ - // Block 0x0, offset 0x0 - 0x00: 0x000b, 0x01: 0x000b, 0x02: 0x000b, 0x03: 0x000b, 0x04: 0x000b, 0x05: 0x000b, - 0x06: 0x000b, 0x07: 0x000b, 0x08: 0x000b, 0x09: 0x0008, 0x0a: 0x0007, 0x0b: 0x0008, - 0x0c: 0x0009, 0x0d: 0x0007, 0x0e: 0x000b, 0x0f: 0x000b, 0x10: 0x000b, 0x11: 0x000b, - 0x12: 0x000b, 0x13: 0x000b, 0x14: 0x000b, 0x15: 0x000b, 0x16: 0x000b, 0x17: 0x000b, - 0x18: 0x000b, 0x19: 0x000b, 0x1a: 0x000b, 0x1b: 0x000b, 0x1c: 0x0007, 0x1d: 0x0007, - 0x1e: 0x0007, 0x1f: 0x0008, 0x20: 0x0009, 0x21: 0x000a, 0x22: 0x000a, 0x23: 0x0004, - 0x24: 0x0004, 0x25: 0x0004, 0x26: 0x000a, 0x27: 0x000a, 0x28: 0x003a, 0x29: 0x002a, - 0x2a: 0x000a, 0x2b: 0x0003, 0x2c: 0x0006, 0x2d: 0x0003, 0x2e: 0x0006, 0x2f: 0x0006, - 0x30: 0x0002, 0x31: 0x0002, 0x32: 0x0002, 0x33: 0x0002, 0x34: 0x0002, 0x35: 0x0002, - 0x36: 0x0002, 0x37: 0x0002, 0x38: 0x0002, 0x39: 0x0002, 0x3a: 0x0006, 0x3b: 0x000a, - 0x3c: 0x000a, 0x3d: 0x000a, 0x3e: 0x000a, 0x3f: 0x000a, - // Block 0x1, offset 0x40 - 0x40: 0x000a, - 0x5b: 0x005a, 0x5c: 0x000a, 0x5d: 0x004a, - 0x5e: 0x000a, 0x5f: 0x000a, 0x60: 0x000a, - 0x7b: 0x005a, - 0x7c: 0x000a, 0x7d: 0x004a, 0x7e: 0x000a, 0x7f: 0x000b, - // Block 0x2, offset 0x80 - // Block 0x3, offset 0xc0 - 0xc0: 0x000b, 0xc1: 0x000b, 0xc2: 0x000b, 0xc3: 0x000b, 0xc4: 0x000b, 0xc5: 0x0007, - 0xc6: 0x000b, 0xc7: 0x000b, 0xc8: 0x000b, 0xc9: 0x000b, 0xca: 0x000b, 0xcb: 0x000b, - 0xcc: 0x000b, 0xcd: 0x000b, 0xce: 0x000b, 0xcf: 0x000b, 0xd0: 0x000b, 0xd1: 0x000b, - 0xd2: 0x000b, 0xd3: 0x000b, 0xd4: 0x000b, 0xd5: 0x000b, 0xd6: 0x000b, 0xd7: 0x000b, - 0xd8: 0x000b, 0xd9: 0x000b, 0xda: 0x000b, 0xdb: 0x000b, 0xdc: 0x000b, 0xdd: 0x000b, - 0xde: 0x000b, 0xdf: 0x000b, 0xe0: 0x0006, 0xe1: 0x000a, 0xe2: 0x0004, 0xe3: 0x0004, - 0xe4: 0x0004, 0xe5: 0x0004, 0xe6: 0x000a, 0xe7: 0x000a, 0xe8: 0x000a, 0xe9: 0x000a, - 0xeb: 0x000a, 0xec: 0x000a, 0xed: 0x000b, 0xee: 0x000a, 0xef: 0x000a, - 0xf0: 0x0004, 0xf1: 0x0004, 0xf2: 0x0002, 0xf3: 0x0002, 0xf4: 0x000a, - 0xf6: 0x000a, 0xf7: 0x000a, 0xf8: 0x000a, 0xf9: 0x0002, 0xfb: 0x000a, - 0xfc: 0x000a, 0xfd: 0x000a, 0xfe: 0x000a, 0xff: 0x000a, - // Block 0x4, offset 0x100 - 0x117: 0x000a, - 0x137: 0x000a, - // Block 0x5, offset 0x140 - 0x179: 0x000a, 0x17a: 0x000a, - // Block 0x6, offset 0x180 - 0x182: 0x000a, 0x183: 0x000a, 0x184: 0x000a, 0x185: 0x000a, - 0x186: 0x000a, 0x187: 0x000a, 0x188: 0x000a, 0x189: 0x000a, 0x18a: 0x000a, 0x18b: 0x000a, - 0x18c: 0x000a, 0x18d: 0x000a, 0x18e: 0x000a, 0x18f: 0x000a, - 0x192: 0x000a, 0x193: 0x000a, 0x194: 0x000a, 0x195: 0x000a, 0x196: 0x000a, 0x197: 0x000a, - 0x198: 0x000a, 0x199: 0x000a, 0x19a: 0x000a, 0x19b: 0x000a, 0x19c: 0x000a, 0x19d: 0x000a, - 0x19e: 0x000a, 0x19f: 0x000a, - 0x1a5: 0x000a, 0x1a6: 0x000a, 0x1a7: 0x000a, 0x1a8: 0x000a, 0x1a9: 0x000a, - 0x1aa: 0x000a, 0x1ab: 0x000a, 0x1ac: 0x000a, 0x1ad: 0x000a, 0x1af: 0x000a, - 0x1b0: 0x000a, 0x1b1: 0x000a, 0x1b2: 0x000a, 0x1b3: 0x000a, 0x1b4: 0x000a, 0x1b5: 0x000a, - 0x1b6: 0x000a, 0x1b7: 0x000a, 0x1b8: 0x000a, 0x1b9: 0x000a, 0x1ba: 0x000a, 0x1bb: 0x000a, - 0x1bc: 0x000a, 0x1bd: 0x000a, 0x1be: 0x000a, 0x1bf: 0x000a, - // Block 0x7, offset 0x1c0 - 0x1c0: 0x000c, 0x1c1: 0x000c, 0x1c2: 0x000c, 0x1c3: 0x000c, 0x1c4: 0x000c, 0x1c5: 0x000c, - 0x1c6: 0x000c, 0x1c7: 0x000c, 0x1c8: 0x000c, 0x1c9: 0x000c, 0x1ca: 0x000c, 0x1cb: 0x000c, - 0x1cc: 0x000c, 0x1cd: 0x000c, 0x1ce: 0x000c, 0x1cf: 0x000c, 0x1d0: 0x000c, 0x1d1: 0x000c, - 0x1d2: 0x000c, 0x1d3: 0x000c, 0x1d4: 0x000c, 0x1d5: 0x000c, 0x1d6: 0x000c, 0x1d7: 0x000c, - 0x1d8: 0x000c, 0x1d9: 0x000c, 0x1da: 0x000c, 0x1db: 0x000c, 0x1dc: 0x000c, 0x1dd: 0x000c, - 0x1de: 0x000c, 0x1df: 0x000c, 0x1e0: 0x000c, 0x1e1: 0x000c, 0x1e2: 0x000c, 0x1e3: 0x000c, - 0x1e4: 0x000c, 0x1e5: 0x000c, 0x1e6: 0x000c, 0x1e7: 0x000c, 0x1e8: 0x000c, 0x1e9: 0x000c, - 0x1ea: 0x000c, 0x1eb: 0x000c, 0x1ec: 0x000c, 0x1ed: 0x000c, 0x1ee: 0x000c, 0x1ef: 0x000c, - 0x1f0: 0x000c, 0x1f1: 0x000c, 0x1f2: 0x000c, 0x1f3: 0x000c, 0x1f4: 0x000c, 0x1f5: 0x000c, - 0x1f6: 0x000c, 0x1f7: 0x000c, 0x1f8: 0x000c, 0x1f9: 0x000c, 0x1fa: 0x000c, 0x1fb: 0x000c, - 0x1fc: 0x000c, 0x1fd: 0x000c, 0x1fe: 0x000c, 0x1ff: 0x000c, - // Block 0x8, offset 0x200 - 0x200: 0x000c, 0x201: 0x000c, 0x202: 0x000c, 0x203: 0x000c, 0x204: 0x000c, 0x205: 0x000c, - 0x206: 0x000c, 0x207: 0x000c, 0x208: 0x000c, 0x209: 0x000c, 0x20a: 0x000c, 0x20b: 0x000c, - 0x20c: 0x000c, 0x20d: 0x000c, 0x20e: 0x000c, 0x20f: 0x000c, 0x210: 0x000c, 0x211: 0x000c, - 0x212: 0x000c, 0x213: 0x000c, 0x214: 0x000c, 0x215: 0x000c, 0x216: 0x000c, 0x217: 0x000c, - 0x218: 0x000c, 0x219: 0x000c, 0x21a: 0x000c, 0x21b: 0x000c, 0x21c: 0x000c, 0x21d: 0x000c, - 0x21e: 0x000c, 0x21f: 0x000c, 0x220: 0x000c, 0x221: 0x000c, 0x222: 0x000c, 0x223: 0x000c, - 0x224: 0x000c, 0x225: 0x000c, 0x226: 0x000c, 0x227: 0x000c, 0x228: 0x000c, 0x229: 0x000c, - 0x22a: 0x000c, 0x22b: 0x000c, 0x22c: 0x000c, 0x22d: 0x000c, 0x22e: 0x000c, 0x22f: 0x000c, - 0x234: 0x000a, 0x235: 0x000a, - 0x23e: 0x000a, - // Block 0x9, offset 0x240 - 0x244: 0x000a, 0x245: 0x000a, - 0x247: 0x000a, - // Block 0xa, offset 0x280 - 0x2b6: 0x000a, - // Block 0xb, offset 0x2c0 - 0x2c3: 0x000c, 0x2c4: 0x000c, 0x2c5: 0x000c, - 0x2c6: 0x000c, 0x2c7: 0x000c, 0x2c8: 0x000c, 0x2c9: 0x000c, - // Block 0xc, offset 0x300 - 0x30a: 0x000a, - 0x30d: 0x000a, 0x30e: 0x000a, 0x30f: 0x0004, 0x310: 0x0001, 0x311: 0x000c, - 0x312: 0x000c, 0x313: 0x000c, 0x314: 0x000c, 0x315: 0x000c, 0x316: 0x000c, 0x317: 0x000c, - 0x318: 0x000c, 0x319: 0x000c, 0x31a: 0x000c, 0x31b: 0x000c, 0x31c: 0x000c, 0x31d: 0x000c, - 0x31e: 0x000c, 0x31f: 0x000c, 0x320: 0x000c, 0x321: 0x000c, 0x322: 0x000c, 0x323: 0x000c, - 0x324: 0x000c, 0x325: 0x000c, 0x326: 0x000c, 0x327: 0x000c, 0x328: 0x000c, 0x329: 0x000c, - 0x32a: 0x000c, 0x32b: 0x000c, 0x32c: 0x000c, 0x32d: 0x000c, 0x32e: 0x000c, 0x32f: 0x000c, - 0x330: 0x000c, 0x331: 0x000c, 0x332: 0x000c, 0x333: 0x000c, 0x334: 0x000c, 0x335: 0x000c, - 0x336: 0x000c, 0x337: 0x000c, 0x338: 0x000c, 0x339: 0x000c, 0x33a: 0x000c, 0x33b: 0x000c, - 0x33c: 0x000c, 0x33d: 0x000c, 0x33e: 0x0001, 0x33f: 0x000c, - // Block 0xd, offset 0x340 - 0x340: 0x0001, 0x341: 0x000c, 0x342: 0x000c, 0x343: 0x0001, 0x344: 0x000c, 0x345: 0x000c, - 0x346: 0x0001, 0x347: 0x000c, 0x348: 0x0001, 0x349: 0x0001, 0x34a: 0x0001, 0x34b: 0x0001, - 0x34c: 0x0001, 0x34d: 0x0001, 0x34e: 0x0001, 0x34f: 0x0001, 0x350: 0x0001, 0x351: 0x0001, - 0x352: 0x0001, 0x353: 0x0001, 0x354: 0x0001, 0x355: 0x0001, 0x356: 0x0001, 0x357: 0x0001, - 0x358: 0x0001, 0x359: 0x0001, 0x35a: 0x0001, 0x35b: 0x0001, 0x35c: 0x0001, 0x35d: 0x0001, - 0x35e: 0x0001, 0x35f: 0x0001, 0x360: 0x0001, 0x361: 0x0001, 0x362: 0x0001, 0x363: 0x0001, - 0x364: 0x0001, 0x365: 0x0001, 0x366: 0x0001, 0x367: 0x0001, 0x368: 0x0001, 0x369: 0x0001, - 0x36a: 0x0001, 0x36b: 0x0001, 0x36c: 0x0001, 0x36d: 0x0001, 0x36e: 0x0001, 0x36f: 0x0001, - 0x370: 0x0001, 0x371: 0x0001, 0x372: 0x0001, 0x373: 0x0001, 0x374: 0x0001, 0x375: 0x0001, - 0x376: 0x0001, 0x377: 0x0001, 0x378: 0x0001, 0x379: 0x0001, 0x37a: 0x0001, 0x37b: 0x0001, - 0x37c: 0x0001, 0x37d: 0x0001, 0x37e: 0x0001, 0x37f: 0x0001, - // Block 0xe, offset 0x380 - 0x380: 0x0005, 0x381: 0x0005, 0x382: 0x0005, 0x383: 0x0005, 0x384: 0x0005, 0x385: 0x0005, - 0x386: 0x000a, 0x387: 0x000a, 0x388: 0x000d, 0x389: 0x0004, 0x38a: 0x0004, 0x38b: 0x000d, - 0x38c: 0x0006, 0x38d: 0x000d, 0x38e: 0x000a, 0x38f: 0x000a, 0x390: 0x000c, 0x391: 0x000c, - 0x392: 0x000c, 0x393: 0x000c, 0x394: 0x000c, 0x395: 0x000c, 0x396: 0x000c, 0x397: 0x000c, - 0x398: 0x000c, 0x399: 0x000c, 0x39a: 0x000c, 0x39b: 0x000d, 0x39c: 0x000d, 0x39d: 0x000d, - 0x39e: 0x000d, 0x39f: 0x000d, 0x3a0: 0x000d, 0x3a1: 0x000d, 0x3a2: 0x000d, 0x3a3: 0x000d, - 0x3a4: 0x000d, 0x3a5: 0x000d, 0x3a6: 0x000d, 0x3a7: 0x000d, 0x3a8: 0x000d, 0x3a9: 0x000d, - 0x3aa: 0x000d, 0x3ab: 0x000d, 0x3ac: 0x000d, 0x3ad: 0x000d, 0x3ae: 0x000d, 0x3af: 0x000d, - 0x3b0: 0x000d, 0x3b1: 0x000d, 0x3b2: 0x000d, 0x3b3: 0x000d, 0x3b4: 0x000d, 0x3b5: 0x000d, - 0x3b6: 0x000d, 0x3b7: 0x000d, 0x3b8: 0x000d, 0x3b9: 0x000d, 0x3ba: 0x000d, 0x3bb: 0x000d, - 0x3bc: 0x000d, 0x3bd: 0x000d, 0x3be: 0x000d, 0x3bf: 0x000d, - // Block 0xf, offset 0x3c0 - 0x3c0: 0x000d, 0x3c1: 0x000d, 0x3c2: 0x000d, 0x3c3: 0x000d, 0x3c4: 0x000d, 0x3c5: 0x000d, - 0x3c6: 0x000d, 0x3c7: 0x000d, 0x3c8: 0x000d, 0x3c9: 0x000d, 0x3ca: 0x000d, 0x3cb: 0x000c, - 0x3cc: 0x000c, 0x3cd: 0x000c, 0x3ce: 0x000c, 0x3cf: 0x000c, 0x3d0: 0x000c, 0x3d1: 0x000c, - 0x3d2: 0x000c, 0x3d3: 0x000c, 0x3d4: 0x000c, 0x3d5: 0x000c, 0x3d6: 0x000c, 0x3d7: 0x000c, - 0x3d8: 0x000c, 0x3d9: 0x000c, 0x3da: 0x000c, 0x3db: 0x000c, 0x3dc: 0x000c, 0x3dd: 0x000c, - 0x3de: 0x000c, 0x3df: 0x000c, 0x3e0: 0x0005, 0x3e1: 0x0005, 0x3e2: 0x0005, 0x3e3: 0x0005, - 0x3e4: 0x0005, 0x3e5: 0x0005, 0x3e6: 0x0005, 0x3e7: 0x0005, 0x3e8: 0x0005, 0x3e9: 0x0005, - 0x3ea: 0x0004, 0x3eb: 0x0005, 0x3ec: 0x0005, 0x3ed: 0x000d, 0x3ee: 0x000d, 0x3ef: 0x000d, - 0x3f0: 0x000c, 0x3f1: 0x000d, 0x3f2: 0x000d, 0x3f3: 0x000d, 0x3f4: 0x000d, 0x3f5: 0x000d, - 0x3f6: 0x000d, 0x3f7: 0x000d, 0x3f8: 0x000d, 0x3f9: 0x000d, 0x3fa: 0x000d, 0x3fb: 0x000d, - 0x3fc: 0x000d, 0x3fd: 0x000d, 0x3fe: 0x000d, 0x3ff: 0x000d, - // Block 0x10, offset 0x400 - 0x400: 0x000d, 0x401: 0x000d, 0x402: 0x000d, 0x403: 0x000d, 0x404: 0x000d, 0x405: 0x000d, - 0x406: 0x000d, 0x407: 0x000d, 0x408: 0x000d, 0x409: 0x000d, 0x40a: 0x000d, 0x40b: 0x000d, - 0x40c: 0x000d, 0x40d: 0x000d, 0x40e: 0x000d, 0x40f: 0x000d, 0x410: 0x000d, 0x411: 0x000d, - 0x412: 0x000d, 0x413: 0x000d, 0x414: 0x000d, 0x415: 0x000d, 0x416: 0x000d, 0x417: 0x000d, - 0x418: 0x000d, 0x419: 0x000d, 0x41a: 0x000d, 0x41b: 0x000d, 0x41c: 0x000d, 0x41d: 0x000d, - 0x41e: 0x000d, 0x41f: 0x000d, 0x420: 0x000d, 0x421: 0x000d, 0x422: 0x000d, 0x423: 0x000d, - 0x424: 0x000d, 0x425: 0x000d, 0x426: 0x000d, 0x427: 0x000d, 0x428: 0x000d, 0x429: 0x000d, - 0x42a: 0x000d, 0x42b: 0x000d, 0x42c: 0x000d, 0x42d: 0x000d, 0x42e: 0x000d, 0x42f: 0x000d, - 0x430: 0x000d, 0x431: 0x000d, 0x432: 0x000d, 0x433: 0x000d, 0x434: 0x000d, 0x435: 0x000d, - 0x436: 0x000d, 0x437: 0x000d, 0x438: 0x000d, 0x439: 0x000d, 0x43a: 0x000d, 0x43b: 0x000d, - 0x43c: 0x000d, 0x43d: 0x000d, 0x43e: 0x000d, 0x43f: 0x000d, - // Block 0x11, offset 0x440 - 0x440: 0x000d, 0x441: 0x000d, 0x442: 0x000d, 0x443: 0x000d, 0x444: 0x000d, 0x445: 0x000d, - 0x446: 0x000d, 0x447: 0x000d, 0x448: 0x000d, 0x449: 0x000d, 0x44a: 0x000d, 0x44b: 0x000d, - 0x44c: 0x000d, 0x44d: 0x000d, 0x44e: 0x000d, 0x44f: 0x000d, 0x450: 0x000d, 0x451: 0x000d, - 0x452: 0x000d, 0x453: 0x000d, 0x454: 0x000d, 0x455: 0x000d, 0x456: 0x000c, 0x457: 0x000c, - 0x458: 0x000c, 0x459: 0x000c, 0x45a: 0x000c, 0x45b: 0x000c, 0x45c: 0x000c, 0x45d: 0x0005, - 0x45e: 0x000a, 0x45f: 0x000c, 0x460: 0x000c, 0x461: 0x000c, 0x462: 0x000c, 0x463: 0x000c, - 0x464: 0x000c, 0x465: 0x000d, 0x466: 0x000d, 0x467: 0x000c, 0x468: 0x000c, 0x469: 0x000a, - 0x46a: 0x000c, 0x46b: 0x000c, 0x46c: 0x000c, 0x46d: 0x000c, 0x46e: 0x000d, 0x46f: 0x000d, - 0x470: 0x0002, 0x471: 0x0002, 0x472: 0x0002, 0x473: 0x0002, 0x474: 0x0002, 0x475: 0x0002, - 0x476: 0x0002, 0x477: 0x0002, 0x478: 0x0002, 0x479: 0x0002, 0x47a: 0x000d, 0x47b: 0x000d, - 0x47c: 0x000d, 0x47d: 0x000d, 0x47e: 0x000d, 0x47f: 0x000d, - // Block 0x12, offset 0x480 - 0x480: 0x000d, 0x481: 0x000d, 0x482: 0x000d, 0x483: 0x000d, 0x484: 0x000d, 0x485: 0x000d, - 0x486: 0x000d, 0x487: 0x000d, 0x488: 0x000d, 0x489: 0x000d, 0x48a: 0x000d, 0x48b: 0x000d, - 0x48c: 0x000d, 0x48d: 0x000d, 0x48e: 0x000d, 0x48f: 0x000d, 0x490: 0x000d, 0x491: 0x000c, - 0x492: 0x000d, 0x493: 0x000d, 0x494: 0x000d, 0x495: 0x000d, 0x496: 0x000d, 0x497: 0x000d, - 0x498: 0x000d, 0x499: 0x000d, 0x49a: 0x000d, 0x49b: 0x000d, 0x49c: 0x000d, 0x49d: 0x000d, - 0x49e: 0x000d, 0x49f: 0x000d, 0x4a0: 0x000d, 0x4a1: 0x000d, 0x4a2: 0x000d, 0x4a3: 0x000d, - 0x4a4: 0x000d, 0x4a5: 0x000d, 0x4a6: 0x000d, 0x4a7: 0x000d, 0x4a8: 0x000d, 0x4a9: 0x000d, - 0x4aa: 0x000d, 0x4ab: 0x000d, 0x4ac: 0x000d, 0x4ad: 0x000d, 0x4ae: 0x000d, 0x4af: 0x000d, - 0x4b0: 0x000c, 0x4b1: 0x000c, 0x4b2: 0x000c, 0x4b3: 0x000c, 0x4b4: 0x000c, 0x4b5: 0x000c, - 0x4b6: 0x000c, 0x4b7: 0x000c, 0x4b8: 0x000c, 0x4b9: 0x000c, 0x4ba: 0x000c, 0x4bb: 0x000c, - 0x4bc: 0x000c, 0x4bd: 0x000c, 0x4be: 0x000c, 0x4bf: 0x000c, - // Block 0x13, offset 0x4c0 - 0x4c0: 0x000c, 0x4c1: 0x000c, 0x4c2: 0x000c, 0x4c3: 0x000c, 0x4c4: 0x000c, 0x4c5: 0x000c, - 0x4c6: 0x000c, 0x4c7: 0x000c, 0x4c8: 0x000c, 0x4c9: 0x000c, 0x4ca: 0x000c, 0x4cb: 0x000d, - 0x4cc: 0x000d, 0x4cd: 0x000d, 0x4ce: 0x000d, 0x4cf: 0x000d, 0x4d0: 0x000d, 0x4d1: 0x000d, - 0x4d2: 0x000d, 0x4d3: 0x000d, 0x4d4: 0x000d, 0x4d5: 0x000d, 0x4d6: 0x000d, 0x4d7: 0x000d, - 0x4d8: 0x000d, 0x4d9: 0x000d, 0x4da: 0x000d, 0x4db: 0x000d, 0x4dc: 0x000d, 0x4dd: 0x000d, - 0x4de: 0x000d, 0x4df: 0x000d, 0x4e0: 0x000d, 0x4e1: 0x000d, 0x4e2: 0x000d, 0x4e3: 0x000d, - 0x4e4: 0x000d, 0x4e5: 0x000d, 0x4e6: 0x000d, 0x4e7: 0x000d, 0x4e8: 0x000d, 0x4e9: 0x000d, - 0x4ea: 0x000d, 0x4eb: 0x000d, 0x4ec: 0x000d, 0x4ed: 0x000d, 0x4ee: 0x000d, 0x4ef: 0x000d, - 0x4f0: 0x000d, 0x4f1: 0x000d, 0x4f2: 0x000d, 0x4f3: 0x000d, 0x4f4: 0x000d, 0x4f5: 0x000d, - 0x4f6: 0x000d, 0x4f7: 0x000d, 0x4f8: 0x000d, 0x4f9: 0x000d, 0x4fa: 0x000d, 0x4fb: 0x000d, - 0x4fc: 0x000d, 0x4fd: 0x000d, 0x4fe: 0x000d, 0x4ff: 0x000d, - // Block 0x14, offset 0x500 - 0x500: 0x000d, 0x501: 0x000d, 0x502: 0x000d, 0x503: 0x000d, 0x504: 0x000d, 0x505: 0x000d, - 0x506: 0x000d, 0x507: 0x000d, 0x508: 0x000d, 0x509: 0x000d, 0x50a: 0x000d, 0x50b: 0x000d, - 0x50c: 0x000d, 0x50d: 0x000d, 0x50e: 0x000d, 0x50f: 0x000d, 0x510: 0x000d, 0x511: 0x000d, - 0x512: 0x000d, 0x513: 0x000d, 0x514: 0x000d, 0x515: 0x000d, 0x516: 0x000d, 0x517: 0x000d, - 0x518: 0x000d, 0x519: 0x000d, 0x51a: 0x000d, 0x51b: 0x000d, 0x51c: 0x000d, 0x51d: 0x000d, - 0x51e: 0x000d, 0x51f: 0x000d, 0x520: 0x000d, 0x521: 0x000d, 0x522: 0x000d, 0x523: 0x000d, - 0x524: 0x000d, 0x525: 0x000d, 0x526: 0x000c, 0x527: 0x000c, 0x528: 0x000c, 0x529: 0x000c, - 0x52a: 0x000c, 0x52b: 0x000c, 0x52c: 0x000c, 0x52d: 0x000c, 0x52e: 0x000c, 0x52f: 0x000c, - 0x530: 0x000c, 0x531: 0x000d, 0x532: 0x000d, 0x533: 0x000d, 0x534: 0x000d, 0x535: 0x000d, - 0x536: 0x000d, 0x537: 0x000d, 0x538: 0x000d, 0x539: 0x000d, 0x53a: 0x000d, 0x53b: 0x000d, - 0x53c: 0x000d, 0x53d: 0x000d, 0x53e: 0x000d, 0x53f: 0x000d, - // Block 0x15, offset 0x540 - 0x540: 0x0001, 0x541: 0x0001, 0x542: 0x0001, 0x543: 0x0001, 0x544: 0x0001, 0x545: 0x0001, - 0x546: 0x0001, 0x547: 0x0001, 0x548: 0x0001, 0x549: 0x0001, 0x54a: 0x0001, 0x54b: 0x0001, - 0x54c: 0x0001, 0x54d: 0x0001, 0x54e: 0x0001, 0x54f: 0x0001, 0x550: 0x0001, 0x551: 0x0001, - 0x552: 0x0001, 0x553: 0x0001, 0x554: 0x0001, 0x555: 0x0001, 0x556: 0x0001, 0x557: 0x0001, - 0x558: 0x0001, 0x559: 0x0001, 0x55a: 0x0001, 0x55b: 0x0001, 0x55c: 0x0001, 0x55d: 0x0001, - 0x55e: 0x0001, 0x55f: 0x0001, 0x560: 0x0001, 0x561: 0x0001, 0x562: 0x0001, 0x563: 0x0001, - 0x564: 0x0001, 0x565: 0x0001, 0x566: 0x0001, 0x567: 0x0001, 0x568: 0x0001, 0x569: 0x0001, - 0x56a: 0x0001, 0x56b: 0x000c, 0x56c: 0x000c, 0x56d: 0x000c, 0x56e: 0x000c, 0x56f: 0x000c, - 0x570: 0x000c, 0x571: 0x000c, 0x572: 0x000c, 0x573: 0x000c, 0x574: 0x0001, 0x575: 0x0001, - 0x576: 0x000a, 0x577: 0x000a, 0x578: 0x000a, 0x579: 0x000a, 0x57a: 0x0001, 0x57b: 0x0001, - 0x57c: 0x0001, 0x57d: 0x000c, 0x57e: 0x0001, 0x57f: 0x0001, - // Block 0x16, offset 0x580 - 0x580: 0x0001, 0x581: 0x0001, 0x582: 0x0001, 0x583: 0x0001, 0x584: 0x0001, 0x585: 0x0001, - 0x586: 0x0001, 0x587: 0x0001, 0x588: 0x0001, 0x589: 0x0001, 0x58a: 0x0001, 0x58b: 0x0001, - 0x58c: 0x0001, 0x58d: 0x0001, 0x58e: 0x0001, 0x58f: 0x0001, 0x590: 0x0001, 0x591: 0x0001, - 0x592: 0x0001, 0x593: 0x0001, 0x594: 0x0001, 0x595: 0x0001, 0x596: 0x000c, 0x597: 0x000c, - 0x598: 0x000c, 0x599: 0x000c, 0x59a: 0x0001, 0x59b: 0x000c, 0x59c: 0x000c, 0x59d: 0x000c, - 0x59e: 0x000c, 0x59f: 0x000c, 0x5a0: 0x000c, 0x5a1: 0x000c, 0x5a2: 0x000c, 0x5a3: 0x000c, - 0x5a4: 0x0001, 0x5a5: 0x000c, 0x5a6: 0x000c, 0x5a7: 0x000c, 0x5a8: 0x0001, 0x5a9: 0x000c, - 0x5aa: 0x000c, 0x5ab: 0x000c, 0x5ac: 0x000c, 0x5ad: 0x000c, 0x5ae: 0x0001, 0x5af: 0x0001, - 0x5b0: 0x0001, 0x5b1: 0x0001, 0x5b2: 0x0001, 0x5b3: 0x0001, 0x5b4: 0x0001, 0x5b5: 0x0001, - 0x5b6: 0x0001, 0x5b7: 0x0001, 0x5b8: 0x0001, 0x5b9: 0x0001, 0x5ba: 0x0001, 0x5bb: 0x0001, - 0x5bc: 0x0001, 0x5bd: 0x0001, 0x5be: 0x0001, 0x5bf: 0x0001, - // Block 0x17, offset 0x5c0 - 0x5c0: 0x0001, 0x5c1: 0x0001, 0x5c2: 0x0001, 0x5c3: 0x0001, 0x5c4: 0x0001, 0x5c5: 0x0001, - 0x5c6: 0x0001, 0x5c7: 0x0001, 0x5c8: 0x0001, 0x5c9: 0x0001, 0x5ca: 0x0001, 0x5cb: 0x0001, - 0x5cc: 0x0001, 0x5cd: 0x0001, 0x5ce: 0x0001, 0x5cf: 0x0001, 0x5d0: 0x0001, 0x5d1: 0x0001, - 0x5d2: 0x0001, 0x5d3: 0x0001, 0x5d4: 0x0001, 0x5d5: 0x0001, 0x5d6: 0x0001, 0x5d7: 0x0001, - 0x5d8: 0x0001, 0x5d9: 0x000c, 0x5da: 0x000c, 0x5db: 0x000c, 0x5dc: 0x0001, 0x5dd: 0x0001, - 0x5de: 0x0001, 0x5df: 0x0001, 0x5e0: 0x000d, 0x5e1: 0x000d, 0x5e2: 0x000d, 0x5e3: 0x000d, - 0x5e4: 0x000d, 0x5e5: 0x000d, 0x5e6: 0x000d, 0x5e7: 0x000d, 0x5e8: 0x000d, 0x5e9: 0x000d, - 0x5ea: 0x000d, 0x5eb: 0x000d, 0x5ec: 0x000d, 0x5ed: 0x000d, 0x5ee: 0x000d, 0x5ef: 0x000d, - 0x5f0: 0x0001, 0x5f1: 0x0001, 0x5f2: 0x0001, 0x5f3: 0x0001, 0x5f4: 0x0001, 0x5f5: 0x0001, - 0x5f6: 0x0001, 0x5f7: 0x0001, 0x5f8: 0x0001, 0x5f9: 0x0001, 0x5fa: 0x0001, 0x5fb: 0x0001, - 0x5fc: 0x0001, 0x5fd: 0x0001, 0x5fe: 0x0001, 0x5ff: 0x0001, - // Block 0x18, offset 0x600 - 0x600: 0x0001, 0x601: 0x0001, 0x602: 0x0001, 0x603: 0x0001, 0x604: 0x0001, 0x605: 0x0001, - 0x606: 0x0001, 0x607: 0x0001, 0x608: 0x0001, 0x609: 0x0001, 0x60a: 0x0001, 0x60b: 0x0001, - 0x60c: 0x0001, 0x60d: 0x0001, 0x60e: 0x0001, 0x60f: 0x0001, 0x610: 0x0001, 0x611: 0x0001, - 0x612: 0x0001, 0x613: 0x0001, 0x614: 0x0001, 0x615: 0x0001, 0x616: 0x0001, 0x617: 0x0001, - 0x618: 0x0001, 0x619: 0x0001, 0x61a: 0x0001, 0x61b: 0x0001, 0x61c: 0x0001, 0x61d: 0x0001, - 0x61e: 0x0001, 0x61f: 0x0001, 0x620: 0x000d, 0x621: 0x000d, 0x622: 0x000d, 0x623: 0x000d, - 0x624: 0x000d, 0x625: 0x000d, 0x626: 0x000d, 0x627: 0x000d, 0x628: 0x000d, 0x629: 0x000d, - 0x62a: 0x000d, 0x62b: 0x000d, 0x62c: 0x000d, 0x62d: 0x000d, 0x62e: 0x000d, 0x62f: 0x000d, - 0x630: 0x000d, 0x631: 0x000d, 0x632: 0x000d, 0x633: 0x000d, 0x634: 0x000d, 0x635: 0x000d, - 0x636: 0x000d, 0x637: 0x000d, 0x638: 0x000d, 0x639: 0x000d, 0x63a: 0x000d, 0x63b: 0x000d, - 0x63c: 0x000d, 0x63d: 0x000d, 0x63e: 0x000d, 0x63f: 0x000d, - // Block 0x19, offset 0x640 - 0x640: 0x000d, 0x641: 0x000d, 0x642: 0x000d, 0x643: 0x000d, 0x644: 0x000d, 0x645: 0x000d, - 0x646: 0x000d, 0x647: 0x000d, 0x648: 0x000d, 0x649: 0x000d, 0x64a: 0x000d, 0x64b: 0x000d, - 0x64c: 0x000d, 0x64d: 0x000d, 0x64e: 0x000d, 0x64f: 0x000d, 0x650: 0x000d, 0x651: 0x000d, - 0x652: 0x000d, 0x653: 0x000c, 0x654: 0x000c, 0x655: 0x000c, 0x656: 0x000c, 0x657: 0x000c, - 0x658: 0x000c, 0x659: 0x000c, 0x65a: 0x000c, 0x65b: 0x000c, 0x65c: 0x000c, 0x65d: 0x000c, - 0x65e: 0x000c, 0x65f: 0x000c, 0x660: 0x000c, 0x661: 0x000c, 0x662: 0x0005, 0x663: 0x000c, - 0x664: 0x000c, 0x665: 0x000c, 0x666: 0x000c, 0x667: 0x000c, 0x668: 0x000c, 0x669: 0x000c, - 0x66a: 0x000c, 0x66b: 0x000c, 0x66c: 0x000c, 0x66d: 0x000c, 0x66e: 0x000c, 0x66f: 0x000c, - 0x670: 0x000c, 0x671: 0x000c, 0x672: 0x000c, 0x673: 0x000c, 0x674: 0x000c, 0x675: 0x000c, - 0x676: 0x000c, 0x677: 0x000c, 0x678: 0x000c, 0x679: 0x000c, 0x67a: 0x000c, 0x67b: 0x000c, - 0x67c: 0x000c, 0x67d: 0x000c, 0x67e: 0x000c, 0x67f: 0x000c, - // Block 0x1a, offset 0x680 - 0x680: 0x000c, 0x681: 0x000c, 0x682: 0x000c, - 0x6ba: 0x000c, - 0x6bc: 0x000c, - // Block 0x1b, offset 0x6c0 - 0x6c1: 0x000c, 0x6c2: 0x000c, 0x6c3: 0x000c, 0x6c4: 0x000c, 0x6c5: 0x000c, - 0x6c6: 0x000c, 0x6c7: 0x000c, 0x6c8: 0x000c, - 0x6cd: 0x000c, 0x6d1: 0x000c, - 0x6d2: 0x000c, 0x6d3: 0x000c, 0x6d4: 0x000c, 0x6d5: 0x000c, 0x6d6: 0x000c, 0x6d7: 0x000c, - 0x6e2: 0x000c, 0x6e3: 0x000c, - // Block 0x1c, offset 0x700 - 0x701: 0x000c, - 0x73c: 0x000c, - // Block 0x1d, offset 0x740 - 0x741: 0x000c, 0x742: 0x000c, 0x743: 0x000c, 0x744: 0x000c, - 0x74d: 0x000c, - 0x762: 0x000c, 0x763: 0x000c, - 0x772: 0x0004, 0x773: 0x0004, - 0x77b: 0x0004, - 0x77e: 0x000c, - // Block 0x1e, offset 0x780 - 0x781: 0x000c, 0x782: 0x000c, - 0x7bc: 0x000c, - // Block 0x1f, offset 0x7c0 - 0x7c1: 0x000c, 0x7c2: 0x000c, - 0x7c7: 0x000c, 0x7c8: 0x000c, 0x7cb: 0x000c, - 0x7cc: 0x000c, 0x7cd: 0x000c, 0x7d1: 0x000c, - 0x7f0: 0x000c, 0x7f1: 0x000c, 0x7f5: 0x000c, - // Block 0x20, offset 0x800 - 0x801: 0x000c, 0x802: 0x000c, 0x803: 0x000c, 0x804: 0x000c, 0x805: 0x000c, - 0x807: 0x000c, 0x808: 0x000c, - 0x80d: 0x000c, - 0x822: 0x000c, 0x823: 0x000c, - 0x831: 0x0004, - 0x83a: 0x000c, 0x83b: 0x000c, - 0x83c: 0x000c, 0x83d: 0x000c, 0x83e: 0x000c, 0x83f: 0x000c, - // Block 0x21, offset 0x840 - 0x841: 0x000c, - 0x87c: 0x000c, 0x87f: 0x000c, - // Block 0x22, offset 0x880 - 0x881: 0x000c, 0x882: 0x000c, 0x883: 0x000c, 0x884: 0x000c, - 0x88d: 0x000c, - 0x896: 0x000c, - 0x8a2: 0x000c, 0x8a3: 0x000c, - // Block 0x23, offset 0x8c0 - 0x8c2: 0x000c, - // Block 0x24, offset 0x900 - 0x900: 0x000c, - 0x90d: 0x000c, - 0x933: 0x000a, 0x934: 0x000a, 0x935: 0x000a, - 0x936: 0x000a, 0x937: 0x000a, 0x938: 0x000a, 0x939: 0x0004, 0x93a: 0x000a, - // Block 0x25, offset 0x940 - 0x940: 0x000c, 0x944: 0x000c, - 0x97e: 0x000c, 0x97f: 0x000c, - // Block 0x26, offset 0x980 - 0x980: 0x000c, - 0x986: 0x000c, 0x987: 0x000c, 0x988: 0x000c, 0x98a: 0x000c, 0x98b: 0x000c, - 0x98c: 0x000c, 0x98d: 0x000c, - 0x995: 0x000c, 0x996: 0x000c, - 0x9a2: 0x000c, 0x9a3: 0x000c, - 0x9b8: 0x000a, 0x9b9: 0x000a, 0x9ba: 0x000a, 0x9bb: 0x000a, - 0x9bc: 0x000a, 0x9bd: 0x000a, 0x9be: 0x000a, - // Block 0x27, offset 0x9c0 - 0x9cc: 0x000c, 0x9cd: 0x000c, - 0x9e2: 0x000c, 0x9e3: 0x000c, - // Block 0x28, offset 0xa00 - 0xa00: 0x000c, 0xa01: 0x000c, - 0xa3b: 0x000c, - 0xa3c: 0x000c, - // Block 0x29, offset 0xa40 - 0xa41: 0x000c, 0xa42: 0x000c, 0xa43: 0x000c, 0xa44: 0x000c, - 0xa4d: 0x000c, - 0xa62: 0x000c, 0xa63: 0x000c, - // Block 0x2a, offset 0xa80 - 0xa8a: 0x000c, - 0xa92: 0x000c, 0xa93: 0x000c, 0xa94: 0x000c, 0xa96: 0x000c, - // Block 0x2b, offset 0xac0 - 0xaf1: 0x000c, 0xaf4: 0x000c, 0xaf5: 0x000c, - 0xaf6: 0x000c, 0xaf7: 0x000c, 0xaf8: 0x000c, 0xaf9: 0x000c, 0xafa: 0x000c, - 0xaff: 0x0004, - // Block 0x2c, offset 0xb00 - 0xb07: 0x000c, 0xb08: 0x000c, 0xb09: 0x000c, 0xb0a: 0x000c, 0xb0b: 0x000c, - 0xb0c: 0x000c, 0xb0d: 0x000c, 0xb0e: 0x000c, - // Block 0x2d, offset 0xb40 - 0xb71: 0x000c, 0xb74: 0x000c, 0xb75: 0x000c, - 0xb76: 0x000c, 0xb77: 0x000c, 0xb78: 0x000c, 0xb79: 0x000c, 0xb7a: 0x000c, 0xb7b: 0x000c, - 0xb7c: 0x000c, - // Block 0x2e, offset 0xb80 - 0xb88: 0x000c, 0xb89: 0x000c, 0xb8a: 0x000c, 0xb8b: 0x000c, - 0xb8c: 0x000c, 0xb8d: 0x000c, - // Block 0x2f, offset 0xbc0 - 0xbd8: 0x000c, 0xbd9: 0x000c, - 0xbf5: 0x000c, - 0xbf7: 0x000c, 0xbf9: 0x000c, 0xbfa: 0x003a, 0xbfb: 0x002a, - 0xbfc: 0x003a, 0xbfd: 0x002a, - // Block 0x30, offset 0xc00 - 0xc31: 0x000c, 0xc32: 0x000c, 0xc33: 0x000c, 0xc34: 0x000c, 0xc35: 0x000c, - 0xc36: 0x000c, 0xc37: 0x000c, 0xc38: 0x000c, 0xc39: 0x000c, 0xc3a: 0x000c, 0xc3b: 0x000c, - 0xc3c: 0x000c, 0xc3d: 0x000c, 0xc3e: 0x000c, - // Block 0x31, offset 0xc40 - 0xc40: 0x000c, 0xc41: 0x000c, 0xc42: 0x000c, 0xc43: 0x000c, 0xc44: 0x000c, - 0xc46: 0x000c, 0xc47: 0x000c, - 0xc4d: 0x000c, 0xc4e: 0x000c, 0xc4f: 0x000c, 0xc50: 0x000c, 0xc51: 0x000c, - 0xc52: 0x000c, 0xc53: 0x000c, 0xc54: 0x000c, 0xc55: 0x000c, 0xc56: 0x000c, 0xc57: 0x000c, - 0xc59: 0x000c, 0xc5a: 0x000c, 0xc5b: 0x000c, 0xc5c: 0x000c, 0xc5d: 0x000c, - 0xc5e: 0x000c, 0xc5f: 0x000c, 0xc60: 0x000c, 0xc61: 0x000c, 0xc62: 0x000c, 0xc63: 0x000c, - 0xc64: 0x000c, 0xc65: 0x000c, 0xc66: 0x000c, 0xc67: 0x000c, 0xc68: 0x000c, 0xc69: 0x000c, - 0xc6a: 0x000c, 0xc6b: 0x000c, 0xc6c: 0x000c, 0xc6d: 0x000c, 0xc6e: 0x000c, 0xc6f: 0x000c, - 0xc70: 0x000c, 0xc71: 0x000c, 0xc72: 0x000c, 0xc73: 0x000c, 0xc74: 0x000c, 0xc75: 0x000c, - 0xc76: 0x000c, 0xc77: 0x000c, 0xc78: 0x000c, 0xc79: 0x000c, 0xc7a: 0x000c, 0xc7b: 0x000c, - 0xc7c: 0x000c, - // Block 0x32, offset 0xc80 - 0xc86: 0x000c, - // Block 0x33, offset 0xcc0 - 0xced: 0x000c, 0xcee: 0x000c, 0xcef: 0x000c, - 0xcf0: 0x000c, 0xcf2: 0x000c, 0xcf3: 0x000c, 0xcf4: 0x000c, 0xcf5: 0x000c, - 0xcf6: 0x000c, 0xcf7: 0x000c, 0xcf9: 0x000c, 0xcfa: 0x000c, - 0xcfd: 0x000c, 0xcfe: 0x000c, - // Block 0x34, offset 0xd00 - 0xd18: 0x000c, 0xd19: 0x000c, - 0xd1e: 0x000c, 0xd1f: 0x000c, 0xd20: 0x000c, - 0xd31: 0x000c, 0xd32: 0x000c, 0xd33: 0x000c, 0xd34: 0x000c, - // Block 0x35, offset 0xd40 - 0xd42: 0x000c, 0xd45: 0x000c, - 0xd46: 0x000c, - 0xd4d: 0x000c, - 0xd5d: 0x000c, - // Block 0x36, offset 0xd80 - 0xd9d: 0x000c, - 0xd9e: 0x000c, 0xd9f: 0x000c, - // Block 0x37, offset 0xdc0 - 0xdd0: 0x000a, 0xdd1: 0x000a, - 0xdd2: 0x000a, 0xdd3: 0x000a, 0xdd4: 0x000a, 0xdd5: 0x000a, 0xdd6: 0x000a, 0xdd7: 0x000a, - 0xdd8: 0x000a, 0xdd9: 0x000a, - // Block 0x38, offset 0xe00 - 0xe00: 0x000a, - // Block 0x39, offset 0xe40 - 0xe40: 0x0009, - 0xe5b: 0x007a, 0xe5c: 0x006a, - // Block 0x3a, offset 0xe80 - 0xe92: 0x000c, 0xe93: 0x000c, 0xe94: 0x000c, - 0xeb2: 0x000c, 0xeb3: 0x000c, 0xeb4: 0x000c, - // Block 0x3b, offset 0xec0 - 0xed2: 0x000c, 0xed3: 0x000c, - 0xef2: 0x000c, 0xef3: 0x000c, - // Block 0x3c, offset 0xf00 - 0xf34: 0x000c, 0xf35: 0x000c, - 0xf37: 0x000c, 0xf38: 0x000c, 0xf39: 0x000c, 0xf3a: 0x000c, 0xf3b: 0x000c, - 0xf3c: 0x000c, 0xf3d: 0x000c, - // Block 0x3d, offset 0xf40 - 0xf46: 0x000c, 0xf49: 0x000c, 0xf4a: 0x000c, 0xf4b: 0x000c, - 0xf4c: 0x000c, 0xf4d: 0x000c, 0xf4e: 0x000c, 0xf4f: 0x000c, 0xf50: 0x000c, 0xf51: 0x000c, - 0xf52: 0x000c, 0xf53: 0x000c, - 0xf5b: 0x0004, 0xf5d: 0x000c, - 0xf70: 0x000a, 0xf71: 0x000a, 0xf72: 0x000a, 0xf73: 0x000a, 0xf74: 0x000a, 0xf75: 0x000a, - 0xf76: 0x000a, 0xf77: 0x000a, 0xf78: 0x000a, 0xf79: 0x000a, - // Block 0x3e, offset 0xf80 - 0xf80: 0x000a, 0xf81: 0x000a, 0xf82: 0x000a, 0xf83: 0x000a, 0xf84: 0x000a, 0xf85: 0x000a, - 0xf86: 0x000a, 0xf87: 0x000a, 0xf88: 0x000a, 0xf89: 0x000a, 0xf8a: 0x000a, 0xf8b: 0x000c, - 0xf8c: 0x000c, 0xf8d: 0x000c, 0xf8e: 0x000b, - // Block 0x3f, offset 0xfc0 - 0xfc5: 0x000c, - 0xfc6: 0x000c, - 0xfe9: 0x000c, - // Block 0x40, offset 0x1000 - 0x1020: 0x000c, 0x1021: 0x000c, 0x1022: 0x000c, - 0x1027: 0x000c, 0x1028: 0x000c, - 0x1032: 0x000c, - 0x1039: 0x000c, 0x103a: 0x000c, 0x103b: 0x000c, - // Block 0x41, offset 0x1040 - 0x1040: 0x000a, 0x1044: 0x000a, 0x1045: 0x000a, - // Block 0x42, offset 0x1080 - 0x109e: 0x000a, 0x109f: 0x000a, 0x10a0: 0x000a, 0x10a1: 0x000a, 0x10a2: 0x000a, 0x10a3: 0x000a, - 0x10a4: 0x000a, 0x10a5: 0x000a, 0x10a6: 0x000a, 0x10a7: 0x000a, 0x10a8: 0x000a, 0x10a9: 0x000a, - 0x10aa: 0x000a, 0x10ab: 0x000a, 0x10ac: 0x000a, 0x10ad: 0x000a, 0x10ae: 0x000a, 0x10af: 0x000a, - 0x10b0: 0x000a, 0x10b1: 0x000a, 0x10b2: 0x000a, 0x10b3: 0x000a, 0x10b4: 0x000a, 0x10b5: 0x000a, - 0x10b6: 0x000a, 0x10b7: 0x000a, 0x10b8: 0x000a, 0x10b9: 0x000a, 0x10ba: 0x000a, 0x10bb: 0x000a, - 0x10bc: 0x000a, 0x10bd: 0x000a, 0x10be: 0x000a, 0x10bf: 0x000a, - // Block 0x43, offset 0x10c0 - 0x10d7: 0x000c, - 0x10d8: 0x000c, 0x10db: 0x000c, - // Block 0x44, offset 0x1100 - 0x1116: 0x000c, - 0x1118: 0x000c, 0x1119: 0x000c, 0x111a: 0x000c, 0x111b: 0x000c, 0x111c: 0x000c, 0x111d: 0x000c, - 0x111e: 0x000c, 0x1120: 0x000c, 0x1122: 0x000c, - 0x1125: 0x000c, 0x1126: 0x000c, 0x1127: 0x000c, 0x1128: 0x000c, 0x1129: 0x000c, - 0x112a: 0x000c, 0x112b: 0x000c, 0x112c: 0x000c, - 0x1133: 0x000c, 0x1134: 0x000c, 0x1135: 0x000c, - 0x1136: 0x000c, 0x1137: 0x000c, 0x1138: 0x000c, 0x1139: 0x000c, 0x113a: 0x000c, 0x113b: 0x000c, - 0x113c: 0x000c, 0x113f: 0x000c, - // Block 0x45, offset 0x1140 - 0x1170: 0x000c, 0x1171: 0x000c, 0x1172: 0x000c, 0x1173: 0x000c, 0x1174: 0x000c, 0x1175: 0x000c, - 0x1176: 0x000c, 0x1177: 0x000c, 0x1178: 0x000c, 0x1179: 0x000c, 0x117a: 0x000c, 0x117b: 0x000c, - 0x117c: 0x000c, 0x117d: 0x000c, 0x117e: 0x000c, - // Block 0x46, offset 0x1180 - 0x1180: 0x000c, 0x1181: 0x000c, 0x1182: 0x000c, 0x1183: 0x000c, - 0x11b4: 0x000c, - 0x11b6: 0x000c, 0x11b7: 0x000c, 0x11b8: 0x000c, 0x11b9: 0x000c, 0x11ba: 0x000c, - 0x11bc: 0x000c, - // Block 0x47, offset 0x11c0 - 0x11c2: 0x000c, - 0x11eb: 0x000c, 0x11ec: 0x000c, 0x11ed: 0x000c, 0x11ee: 0x000c, 0x11ef: 0x000c, - 0x11f0: 0x000c, 0x11f1: 0x000c, 0x11f2: 0x000c, 0x11f3: 0x000c, - // Block 0x48, offset 0x1200 - 0x1200: 0x000c, 0x1201: 0x000c, - 0x1222: 0x000c, 0x1223: 0x000c, - 0x1224: 0x000c, 0x1225: 0x000c, 0x1228: 0x000c, 0x1229: 0x000c, - 0x122b: 0x000c, 0x122c: 0x000c, 0x122d: 0x000c, - // Block 0x49, offset 0x1240 - 0x1266: 0x000c, 0x1268: 0x000c, 0x1269: 0x000c, - 0x126d: 0x000c, 0x126f: 0x000c, - 0x1270: 0x000c, 0x1271: 0x000c, - // Block 0x4a, offset 0x1280 - 0x12ac: 0x000c, 0x12ad: 0x000c, 0x12ae: 0x000c, 0x12af: 0x000c, - 0x12b0: 0x000c, 0x12b1: 0x000c, 0x12b2: 0x000c, 0x12b3: 0x000c, - 0x12b6: 0x000c, 0x12b7: 0x000c, - // Block 0x4b, offset 0x12c0 - 0x12d0: 0x000c, 0x12d1: 0x000c, - 0x12d2: 0x000c, 0x12d4: 0x000c, 0x12d5: 0x000c, 0x12d6: 0x000c, 0x12d7: 0x000c, - 0x12d8: 0x000c, 0x12d9: 0x000c, 0x12da: 0x000c, 0x12db: 0x000c, 0x12dc: 0x000c, 0x12dd: 0x000c, - 0x12de: 0x000c, 0x12df: 0x000c, 0x12e0: 0x000c, 0x12e2: 0x000c, 0x12e3: 0x000c, - 0x12e4: 0x000c, 0x12e5: 0x000c, 0x12e6: 0x000c, 0x12e7: 0x000c, 0x12e8: 0x000c, - 0x12ed: 0x000c, - 0x12f4: 0x000c, - 0x12f8: 0x000c, 0x12f9: 0x000c, - // Block 0x4c, offset 0x1300 - 0x1300: 0x000c, 0x1301: 0x000c, 0x1302: 0x000c, 0x1303: 0x000c, 0x1304: 0x000c, 0x1305: 0x000c, - 0x1306: 0x000c, 0x1307: 0x000c, 0x1308: 0x000c, 0x1309: 0x000c, 0x130a: 0x000c, 0x130b: 0x000c, - 0x130c: 0x000c, 0x130d: 0x000c, 0x130e: 0x000c, 0x130f: 0x000c, 0x1310: 0x000c, 0x1311: 0x000c, - 0x1312: 0x000c, 0x1313: 0x000c, 0x1314: 0x000c, 0x1315: 0x000c, 0x1316: 0x000c, 0x1317: 0x000c, - 0x1318: 0x000c, 0x1319: 0x000c, 0x131a: 0x000c, 0x131b: 0x000c, 0x131c: 0x000c, 0x131d: 0x000c, - 0x131e: 0x000c, 0x131f: 0x000c, 0x1320: 0x000c, 0x1321: 0x000c, 0x1322: 0x000c, 0x1323: 0x000c, - 0x1324: 0x000c, 0x1325: 0x000c, 0x1326: 0x000c, 0x1327: 0x000c, 0x1328: 0x000c, 0x1329: 0x000c, - 0x132a: 0x000c, 0x132b: 0x000c, 0x132c: 0x000c, 0x132d: 0x000c, 0x132e: 0x000c, 0x132f: 0x000c, - 0x1330: 0x000c, 0x1331: 0x000c, 0x1332: 0x000c, 0x1333: 0x000c, 0x1334: 0x000c, 0x1335: 0x000c, - 0x1336: 0x000c, 0x1337: 0x000c, 0x1338: 0x000c, 0x1339: 0x000c, 0x133b: 0x000c, - 0x133c: 0x000c, 0x133d: 0x000c, 0x133e: 0x000c, 0x133f: 0x000c, - // Block 0x4d, offset 0x1340 - 0x137d: 0x000a, 0x137f: 0x000a, - // Block 0x4e, offset 0x1380 - 0x1380: 0x000a, 0x1381: 0x000a, - 0x138d: 0x000a, 0x138e: 0x000a, 0x138f: 0x000a, - 0x139d: 0x000a, - 0x139e: 0x000a, 0x139f: 0x000a, - 0x13ad: 0x000a, 0x13ae: 0x000a, 0x13af: 0x000a, - 0x13bd: 0x000a, 0x13be: 0x000a, - // Block 0x4f, offset 0x13c0 - 0x13c0: 0x0009, 0x13c1: 0x0009, 0x13c2: 0x0009, 0x13c3: 0x0009, 0x13c4: 0x0009, 0x13c5: 0x0009, - 0x13c6: 0x0009, 0x13c7: 0x0009, 0x13c8: 0x0009, 0x13c9: 0x0009, 0x13ca: 0x0009, 0x13cb: 0x000b, - 0x13cc: 0x000b, 0x13cd: 0x000b, 0x13cf: 0x0001, 0x13d0: 0x000a, 0x13d1: 0x000a, - 0x13d2: 0x000a, 0x13d3: 0x000a, 0x13d4: 0x000a, 0x13d5: 0x000a, 0x13d6: 0x000a, 0x13d7: 0x000a, - 0x13d8: 0x000a, 0x13d9: 0x000a, 0x13da: 0x000a, 0x13db: 0x000a, 0x13dc: 0x000a, 0x13dd: 0x000a, - 0x13de: 0x000a, 0x13df: 0x000a, 0x13e0: 0x000a, 0x13e1: 0x000a, 0x13e2: 0x000a, 0x13e3: 0x000a, - 0x13e4: 0x000a, 0x13e5: 0x000a, 0x13e6: 0x000a, 0x13e7: 0x000a, 0x13e8: 0x0009, 0x13e9: 0x0007, - 0x13ea: 0x000e, 0x13eb: 0x000e, 0x13ec: 0x000e, 0x13ed: 0x000e, 0x13ee: 0x000e, 0x13ef: 0x0006, - 0x13f0: 0x0004, 0x13f1: 0x0004, 0x13f2: 0x0004, 0x13f3: 0x0004, 0x13f4: 0x0004, 0x13f5: 0x000a, - 0x13f6: 0x000a, 0x13f7: 0x000a, 0x13f8: 0x000a, 0x13f9: 0x000a, 0x13fa: 0x000a, 0x13fb: 0x000a, - 0x13fc: 0x000a, 0x13fd: 0x000a, 0x13fe: 0x000a, 0x13ff: 0x000a, - // Block 0x50, offset 0x1400 - 0x1400: 0x000a, 0x1401: 0x000a, 0x1402: 0x000a, 0x1403: 0x000a, 0x1404: 0x0006, 0x1405: 0x009a, - 0x1406: 0x008a, 0x1407: 0x000a, 0x1408: 0x000a, 0x1409: 0x000a, 0x140a: 0x000a, 0x140b: 0x000a, - 0x140c: 0x000a, 0x140d: 0x000a, 0x140e: 0x000a, 0x140f: 0x000a, 0x1410: 0x000a, 0x1411: 0x000a, - 0x1412: 0x000a, 0x1413: 0x000a, 0x1414: 0x000a, 0x1415: 0x000a, 0x1416: 0x000a, 0x1417: 0x000a, - 0x1418: 0x000a, 0x1419: 0x000a, 0x141a: 0x000a, 0x141b: 0x000a, 0x141c: 0x000a, 0x141d: 0x000a, - 0x141e: 0x000a, 0x141f: 0x0009, 0x1420: 0x000b, 0x1421: 0x000b, 0x1422: 0x000b, 0x1423: 0x000b, - 0x1424: 0x000b, 0x1425: 0x000b, 0x1426: 0x000e, 0x1427: 0x000e, 0x1428: 0x000e, 0x1429: 0x000e, - 0x142a: 0x000b, 0x142b: 0x000b, 0x142c: 0x000b, 0x142d: 0x000b, 0x142e: 0x000b, 0x142f: 0x000b, - 0x1430: 0x0002, 0x1434: 0x0002, 0x1435: 0x0002, - 0x1436: 0x0002, 0x1437: 0x0002, 0x1438: 0x0002, 0x1439: 0x0002, 0x143a: 0x0003, 0x143b: 0x0003, - 0x143c: 0x000a, 0x143d: 0x009a, 0x143e: 0x008a, - // Block 0x51, offset 0x1440 - 0x1440: 0x0002, 0x1441: 0x0002, 0x1442: 0x0002, 0x1443: 0x0002, 0x1444: 0x0002, 0x1445: 0x0002, - 0x1446: 0x0002, 0x1447: 0x0002, 0x1448: 0x0002, 0x1449: 0x0002, 0x144a: 0x0003, 0x144b: 0x0003, - 0x144c: 0x000a, 0x144d: 0x009a, 0x144e: 0x008a, - 0x1460: 0x0004, 0x1461: 0x0004, 0x1462: 0x0004, 0x1463: 0x0004, - 0x1464: 0x0004, 0x1465: 0x0004, 0x1466: 0x0004, 0x1467: 0x0004, 0x1468: 0x0004, 0x1469: 0x0004, - 0x146a: 0x0004, 0x146b: 0x0004, 0x146c: 0x0004, 0x146d: 0x0004, 0x146e: 0x0004, 0x146f: 0x0004, - 0x1470: 0x0004, 0x1471: 0x0004, 0x1472: 0x0004, 0x1473: 0x0004, 0x1474: 0x0004, 0x1475: 0x0004, - 0x1476: 0x0004, 0x1477: 0x0004, 0x1478: 0x0004, 0x1479: 0x0004, 0x147a: 0x0004, 0x147b: 0x0004, - 0x147c: 0x0004, 0x147d: 0x0004, 0x147e: 0x0004, 0x147f: 0x0004, - // Block 0x52, offset 0x1480 - 0x1480: 0x0004, 0x1481: 0x0004, 0x1482: 0x0004, 0x1483: 0x0004, 0x1484: 0x0004, 0x1485: 0x0004, - 0x1486: 0x0004, 0x1487: 0x0004, 0x1488: 0x0004, 0x1489: 0x0004, 0x148a: 0x0004, 0x148b: 0x0004, - 0x148c: 0x0004, 0x148d: 0x0004, 0x148e: 0x0004, 0x148f: 0x0004, 0x1490: 0x000c, 0x1491: 0x000c, - 0x1492: 0x000c, 0x1493: 0x000c, 0x1494: 0x000c, 0x1495: 0x000c, 0x1496: 0x000c, 0x1497: 0x000c, - 0x1498: 0x000c, 0x1499: 0x000c, 0x149a: 0x000c, 0x149b: 0x000c, 0x149c: 0x000c, 0x149d: 0x000c, - 0x149e: 0x000c, 0x149f: 0x000c, 0x14a0: 0x000c, 0x14a1: 0x000c, 0x14a2: 0x000c, 0x14a3: 0x000c, - 0x14a4: 0x000c, 0x14a5: 0x000c, 0x14a6: 0x000c, 0x14a7: 0x000c, 0x14a8: 0x000c, 0x14a9: 0x000c, - 0x14aa: 0x000c, 0x14ab: 0x000c, 0x14ac: 0x000c, 0x14ad: 0x000c, 0x14ae: 0x000c, 0x14af: 0x000c, - 0x14b0: 0x000c, - // Block 0x53, offset 0x14c0 - 0x14c0: 0x000a, 0x14c1: 0x000a, 0x14c3: 0x000a, 0x14c4: 0x000a, 0x14c5: 0x000a, - 0x14c6: 0x000a, 0x14c8: 0x000a, 0x14c9: 0x000a, - 0x14d4: 0x000a, 0x14d6: 0x000a, 0x14d7: 0x000a, - 0x14d8: 0x000a, - 0x14de: 0x000a, 0x14df: 0x000a, 0x14e0: 0x000a, 0x14e1: 0x000a, 0x14e2: 0x000a, 0x14e3: 0x000a, - 0x14e5: 0x000a, 0x14e7: 0x000a, 0x14e9: 0x000a, - 0x14ee: 0x0004, - 0x14fa: 0x000a, 0x14fb: 0x000a, - // Block 0x54, offset 0x1500 - 0x1500: 0x000a, 0x1501: 0x000a, 0x1502: 0x000a, 0x1503: 0x000a, 0x1504: 0x000a, - 0x150a: 0x000a, 0x150b: 0x000a, - 0x150c: 0x000a, 0x150d: 0x000a, 0x1510: 0x000a, 0x1511: 0x000a, - 0x1512: 0x000a, 0x1513: 0x000a, 0x1514: 0x000a, 0x1515: 0x000a, 0x1516: 0x000a, 0x1517: 0x000a, - 0x1518: 0x000a, 0x1519: 0x000a, 0x151a: 0x000a, 0x151b: 0x000a, 0x151c: 0x000a, 0x151d: 0x000a, - 0x151e: 0x000a, 0x151f: 0x000a, - // Block 0x55, offset 0x1540 - 0x1549: 0x000a, 0x154a: 0x000a, 0x154b: 0x000a, - 0x1550: 0x000a, 0x1551: 0x000a, - 0x1552: 0x000a, 0x1553: 0x000a, 0x1554: 0x000a, 0x1555: 0x000a, 0x1556: 0x000a, 0x1557: 0x000a, - 0x1558: 0x000a, 0x1559: 0x000a, 0x155a: 0x000a, 0x155b: 0x000a, 0x155c: 0x000a, 0x155d: 0x000a, - 0x155e: 0x000a, 0x155f: 0x000a, 0x1560: 0x000a, 0x1561: 0x000a, 0x1562: 0x000a, 0x1563: 0x000a, - 0x1564: 0x000a, 0x1565: 0x000a, 0x1566: 0x000a, 0x1567: 0x000a, 0x1568: 0x000a, 0x1569: 0x000a, - 0x156a: 0x000a, 0x156b: 0x000a, 0x156c: 0x000a, 0x156d: 0x000a, 0x156e: 0x000a, 0x156f: 0x000a, - 0x1570: 0x000a, 0x1571: 0x000a, 0x1572: 0x000a, 0x1573: 0x000a, 0x1574: 0x000a, 0x1575: 0x000a, - 0x1576: 0x000a, 0x1577: 0x000a, 0x1578: 0x000a, 0x1579: 0x000a, 0x157a: 0x000a, 0x157b: 0x000a, - 0x157c: 0x000a, 0x157d: 0x000a, 0x157e: 0x000a, 0x157f: 0x000a, - // Block 0x56, offset 0x1580 - 0x1580: 0x000a, 0x1581: 0x000a, 0x1582: 0x000a, 0x1583: 0x000a, 0x1584: 0x000a, 0x1585: 0x000a, - 0x1586: 0x000a, 0x1587: 0x000a, 0x1588: 0x000a, 0x1589: 0x000a, 0x158a: 0x000a, 0x158b: 0x000a, - 0x158c: 0x000a, 0x158d: 0x000a, 0x158e: 0x000a, 0x158f: 0x000a, 0x1590: 0x000a, 0x1591: 0x000a, - 0x1592: 0x000a, 0x1593: 0x000a, 0x1594: 0x000a, 0x1595: 0x000a, 0x1596: 0x000a, 0x1597: 0x000a, - 0x1598: 0x000a, 0x1599: 0x000a, 0x159a: 0x000a, 0x159b: 0x000a, 0x159c: 0x000a, 0x159d: 0x000a, - 0x159e: 0x000a, 0x159f: 0x000a, 0x15a0: 0x000a, 0x15a1: 0x000a, 0x15a2: 0x000a, 0x15a3: 0x000a, - 0x15a4: 0x000a, 0x15a5: 0x000a, 0x15a6: 0x000a, 0x15a7: 0x000a, 0x15a8: 0x000a, 0x15a9: 0x000a, - 0x15aa: 0x000a, 0x15ab: 0x000a, 0x15ac: 0x000a, 0x15ad: 0x000a, 0x15ae: 0x000a, 0x15af: 0x000a, - 0x15b0: 0x000a, 0x15b1: 0x000a, 0x15b2: 0x000a, 0x15b3: 0x000a, 0x15b4: 0x000a, 0x15b5: 0x000a, - 0x15b6: 0x000a, 0x15b7: 0x000a, 0x15b8: 0x000a, 0x15b9: 0x000a, 0x15ba: 0x000a, 0x15bb: 0x000a, - 0x15bc: 0x000a, 0x15bd: 0x000a, 0x15be: 0x000a, 0x15bf: 0x000a, - // Block 0x57, offset 0x15c0 - 0x15c0: 0x000a, 0x15c1: 0x000a, 0x15c2: 0x000a, 0x15c3: 0x000a, 0x15c4: 0x000a, 0x15c5: 0x000a, - 0x15c6: 0x000a, 0x15c7: 0x000a, 0x15c8: 0x000a, 0x15c9: 0x000a, 0x15ca: 0x000a, 0x15cb: 0x000a, - 0x15cc: 0x000a, 0x15cd: 0x000a, 0x15ce: 0x000a, 0x15cf: 0x000a, 0x15d0: 0x000a, 0x15d1: 0x000a, - 0x15d2: 0x0003, 0x15d3: 0x0004, 0x15d4: 0x000a, 0x15d5: 0x000a, 0x15d6: 0x000a, 0x15d7: 0x000a, - 0x15d8: 0x000a, 0x15d9: 0x000a, 0x15da: 0x000a, 0x15db: 0x000a, 0x15dc: 0x000a, 0x15dd: 0x000a, - 0x15de: 0x000a, 0x15df: 0x000a, 0x15e0: 0x000a, 0x15e1: 0x000a, 0x15e2: 0x000a, 0x15e3: 0x000a, - 0x15e4: 0x000a, 0x15e5: 0x000a, 0x15e6: 0x000a, 0x15e7: 0x000a, 0x15e8: 0x000a, 0x15e9: 0x000a, - 0x15ea: 0x000a, 0x15eb: 0x000a, 0x15ec: 0x000a, 0x15ed: 0x000a, 0x15ee: 0x000a, 0x15ef: 0x000a, - 0x15f0: 0x000a, 0x15f1: 0x000a, 0x15f2: 0x000a, 0x15f3: 0x000a, 0x15f4: 0x000a, 0x15f5: 0x000a, - 0x15f6: 0x000a, 0x15f7: 0x000a, 0x15f8: 0x000a, 0x15f9: 0x000a, 0x15fa: 0x000a, 0x15fb: 0x000a, - 0x15fc: 0x000a, 0x15fd: 0x000a, 0x15fe: 0x000a, 0x15ff: 0x000a, - // Block 0x58, offset 0x1600 - 0x1600: 0x000a, 0x1601: 0x000a, 0x1602: 0x000a, 0x1603: 0x000a, 0x1604: 0x000a, 0x1605: 0x000a, - 0x1606: 0x000a, 0x1607: 0x000a, 0x1608: 0x003a, 0x1609: 0x002a, 0x160a: 0x003a, 0x160b: 0x002a, - 0x160c: 0x000a, 0x160d: 0x000a, 0x160e: 0x000a, 0x160f: 0x000a, 0x1610: 0x000a, 0x1611: 0x000a, - 0x1612: 0x000a, 0x1613: 0x000a, 0x1614: 0x000a, 0x1615: 0x000a, 0x1616: 0x000a, 0x1617: 0x000a, - 0x1618: 0x000a, 0x1619: 0x000a, 0x161a: 0x000a, 0x161b: 0x000a, 0x161c: 0x000a, 0x161d: 0x000a, - 0x161e: 0x000a, 0x161f: 0x000a, 0x1620: 0x000a, 0x1621: 0x000a, 0x1622: 0x000a, 0x1623: 0x000a, - 0x1624: 0x000a, 0x1625: 0x000a, 0x1626: 0x000a, 0x1627: 0x000a, 0x1628: 0x000a, 0x1629: 0x009a, - 0x162a: 0x008a, 0x162b: 0x000a, 0x162c: 0x000a, 0x162d: 0x000a, 0x162e: 0x000a, 0x162f: 0x000a, - 0x1630: 0x000a, 0x1631: 0x000a, 0x1632: 0x000a, 0x1633: 0x000a, 0x1634: 0x000a, 0x1635: 0x000a, - // Block 0x59, offset 0x1640 - 0x167b: 0x000a, - 0x167c: 0x000a, 0x167d: 0x000a, 0x167e: 0x000a, 0x167f: 0x000a, - // Block 0x5a, offset 0x1680 - 0x1680: 0x000a, 0x1681: 0x000a, 0x1682: 0x000a, 0x1683: 0x000a, 0x1684: 0x000a, 0x1685: 0x000a, - 0x1686: 0x000a, 0x1687: 0x000a, 0x1688: 0x000a, 0x1689: 0x000a, 0x168a: 0x000a, 0x168b: 0x000a, - 0x168c: 0x000a, 0x168d: 0x000a, 0x168e: 0x000a, 0x168f: 0x000a, 0x1690: 0x000a, 0x1691: 0x000a, - 0x1692: 0x000a, 0x1693: 0x000a, 0x1694: 0x000a, 0x1696: 0x000a, 0x1697: 0x000a, - 0x1698: 0x000a, 0x1699: 0x000a, 0x169a: 0x000a, 0x169b: 0x000a, 0x169c: 0x000a, 0x169d: 0x000a, - 0x169e: 0x000a, 0x169f: 0x000a, 0x16a0: 0x000a, 0x16a1: 0x000a, 0x16a2: 0x000a, 0x16a3: 0x000a, - 0x16a4: 0x000a, 0x16a5: 0x000a, 0x16a6: 0x000a, 0x16a7: 0x000a, 0x16a8: 0x000a, 0x16a9: 0x000a, - 0x16aa: 0x000a, 0x16ab: 0x000a, 0x16ac: 0x000a, 0x16ad: 0x000a, 0x16ae: 0x000a, 0x16af: 0x000a, - 0x16b0: 0x000a, 0x16b1: 0x000a, 0x16b2: 0x000a, 0x16b3: 0x000a, 0x16b4: 0x000a, 0x16b5: 0x000a, - 0x16b6: 0x000a, 0x16b7: 0x000a, 0x16b8: 0x000a, 0x16b9: 0x000a, 0x16ba: 0x000a, 0x16bb: 0x000a, - 0x16bc: 0x000a, 0x16bd: 0x000a, 0x16be: 0x000a, 0x16bf: 0x000a, - // Block 0x5b, offset 0x16c0 - 0x16c0: 0x000a, 0x16c1: 0x000a, 0x16c2: 0x000a, 0x16c3: 0x000a, 0x16c4: 0x000a, 0x16c5: 0x000a, - 0x16c6: 0x000a, 0x16c7: 0x000a, 0x16c8: 0x000a, 0x16c9: 0x000a, 0x16ca: 0x000a, 0x16cb: 0x000a, - 0x16cc: 0x000a, 0x16cd: 0x000a, 0x16ce: 0x000a, 0x16cf: 0x000a, 0x16d0: 0x000a, 0x16d1: 0x000a, - 0x16d2: 0x000a, 0x16d3: 0x000a, 0x16d4: 0x000a, 0x16d5: 0x000a, 0x16d6: 0x000a, 0x16d7: 0x000a, - 0x16d8: 0x000a, 0x16d9: 0x000a, 0x16da: 0x000a, 0x16db: 0x000a, 0x16dc: 0x000a, 0x16dd: 0x000a, - 0x16de: 0x000a, 0x16df: 0x000a, 0x16e0: 0x000a, 0x16e1: 0x000a, 0x16e2: 0x000a, 0x16e3: 0x000a, - 0x16e4: 0x000a, 0x16e5: 0x000a, 0x16e6: 0x000a, - // Block 0x5c, offset 0x1700 - 0x1700: 0x000a, 0x1701: 0x000a, 0x1702: 0x000a, 0x1703: 0x000a, 0x1704: 0x000a, 0x1705: 0x000a, - 0x1706: 0x000a, 0x1707: 0x000a, 0x1708: 0x000a, 0x1709: 0x000a, 0x170a: 0x000a, - 0x1720: 0x000a, 0x1721: 0x000a, 0x1722: 0x000a, 0x1723: 0x000a, - 0x1724: 0x000a, 0x1725: 0x000a, 0x1726: 0x000a, 0x1727: 0x000a, 0x1728: 0x000a, 0x1729: 0x000a, - 0x172a: 0x000a, 0x172b: 0x000a, 0x172c: 0x000a, 0x172d: 0x000a, 0x172e: 0x000a, 0x172f: 0x000a, - 0x1730: 0x000a, 0x1731: 0x000a, 0x1732: 0x000a, 0x1733: 0x000a, 0x1734: 0x000a, 0x1735: 0x000a, - 0x1736: 0x000a, 0x1737: 0x000a, 0x1738: 0x000a, 0x1739: 0x000a, 0x173a: 0x000a, 0x173b: 0x000a, - 0x173c: 0x000a, 0x173d: 0x000a, 0x173e: 0x000a, 0x173f: 0x000a, - // Block 0x5d, offset 0x1740 - 0x1740: 0x000a, 0x1741: 0x000a, 0x1742: 0x000a, 0x1743: 0x000a, 0x1744: 0x000a, 0x1745: 0x000a, - 0x1746: 0x000a, 0x1747: 0x000a, 0x1748: 0x0002, 0x1749: 0x0002, 0x174a: 0x0002, 0x174b: 0x0002, - 0x174c: 0x0002, 0x174d: 0x0002, 0x174e: 0x0002, 0x174f: 0x0002, 0x1750: 0x0002, 0x1751: 0x0002, - 0x1752: 0x0002, 0x1753: 0x0002, 0x1754: 0x0002, 0x1755: 0x0002, 0x1756: 0x0002, 0x1757: 0x0002, - 0x1758: 0x0002, 0x1759: 0x0002, 0x175a: 0x0002, 0x175b: 0x0002, - // Block 0x5e, offset 0x1780 - 0x17aa: 0x000a, 0x17ab: 0x000a, 0x17ac: 0x000a, 0x17ad: 0x000a, 0x17ae: 0x000a, 0x17af: 0x000a, - 0x17b0: 0x000a, 0x17b1: 0x000a, 0x17b2: 0x000a, 0x17b3: 0x000a, 0x17b4: 0x000a, 0x17b5: 0x000a, - 0x17b6: 0x000a, 0x17b7: 0x000a, 0x17b8: 0x000a, 0x17b9: 0x000a, 0x17ba: 0x000a, 0x17bb: 0x000a, - 0x17bc: 0x000a, 0x17bd: 0x000a, 0x17be: 0x000a, 0x17bf: 0x000a, - // Block 0x5f, offset 0x17c0 - 0x17c0: 0x000a, 0x17c1: 0x000a, 0x17c2: 0x000a, 0x17c3: 0x000a, 0x17c4: 0x000a, 0x17c5: 0x000a, - 0x17c6: 0x000a, 0x17c7: 0x000a, 0x17c8: 0x000a, 0x17c9: 0x000a, 0x17ca: 0x000a, 0x17cb: 0x000a, - 0x17cc: 0x000a, 0x17cd: 0x000a, 0x17ce: 0x000a, 0x17cf: 0x000a, 0x17d0: 0x000a, 0x17d1: 0x000a, - 0x17d2: 0x000a, 0x17d3: 0x000a, 0x17d4: 0x000a, 0x17d5: 0x000a, 0x17d6: 0x000a, 0x17d7: 0x000a, - 0x17d8: 0x000a, 0x17d9: 0x000a, 0x17da: 0x000a, 0x17db: 0x000a, 0x17dc: 0x000a, 0x17dd: 0x000a, - 0x17de: 0x000a, 0x17df: 0x000a, 0x17e0: 0x000a, 0x17e1: 0x000a, 0x17e2: 0x000a, 0x17e3: 0x000a, - 0x17e4: 0x000a, 0x17e5: 0x000a, 0x17e6: 0x000a, 0x17e7: 0x000a, 0x17e8: 0x000a, 0x17e9: 0x000a, - 0x17ea: 0x000a, 0x17eb: 0x000a, 0x17ed: 0x000a, 0x17ee: 0x000a, 0x17ef: 0x000a, - 0x17f0: 0x000a, 0x17f1: 0x000a, 0x17f2: 0x000a, 0x17f3: 0x000a, 0x17f4: 0x000a, 0x17f5: 0x000a, - 0x17f6: 0x000a, 0x17f7: 0x000a, 0x17f8: 0x000a, 0x17f9: 0x000a, 0x17fa: 0x000a, 0x17fb: 0x000a, - 0x17fc: 0x000a, 0x17fd: 0x000a, 0x17fe: 0x000a, 0x17ff: 0x000a, - // Block 0x60, offset 0x1800 - 0x1800: 0x000a, 0x1801: 0x000a, 0x1802: 0x000a, 0x1803: 0x000a, 0x1804: 0x000a, 0x1805: 0x000a, - 0x1806: 0x000a, 0x1807: 0x000a, 0x1808: 0x000a, 0x1809: 0x000a, 0x180a: 0x000a, 0x180b: 0x000a, - 0x180c: 0x000a, 0x180d: 0x000a, 0x180e: 0x000a, 0x180f: 0x000a, 0x1810: 0x000a, 0x1811: 0x000a, - 0x1812: 0x000a, 0x1813: 0x000a, 0x1814: 0x000a, 0x1815: 0x000a, 0x1816: 0x000a, 0x1817: 0x000a, - 0x1818: 0x000a, 0x1819: 0x000a, 0x181a: 0x000a, 0x181b: 0x000a, 0x181c: 0x000a, 0x181d: 0x000a, - 0x181e: 0x000a, 0x181f: 0x000a, 0x1820: 0x000a, 0x1821: 0x000a, 0x1822: 0x000a, 0x1823: 0x000a, - 0x1824: 0x000a, 0x1825: 0x000a, 0x1826: 0x000a, 0x1827: 0x000a, 0x1828: 0x003a, 0x1829: 0x002a, - 0x182a: 0x003a, 0x182b: 0x002a, 0x182c: 0x003a, 0x182d: 0x002a, 0x182e: 0x003a, 0x182f: 0x002a, - 0x1830: 0x003a, 0x1831: 0x002a, 0x1832: 0x003a, 0x1833: 0x002a, 0x1834: 0x003a, 0x1835: 0x002a, - 0x1836: 0x000a, 0x1837: 0x000a, 0x1838: 0x000a, 0x1839: 0x000a, 0x183a: 0x000a, 0x183b: 0x000a, - 0x183c: 0x000a, 0x183d: 0x000a, 0x183e: 0x000a, 0x183f: 0x000a, - // Block 0x61, offset 0x1840 - 0x1840: 0x000a, 0x1841: 0x000a, 0x1842: 0x000a, 0x1843: 0x000a, 0x1844: 0x000a, 0x1845: 0x009a, - 0x1846: 0x008a, 0x1847: 0x000a, 0x1848: 0x000a, 0x1849: 0x000a, 0x184a: 0x000a, 0x184b: 0x000a, - 0x184c: 0x000a, 0x184d: 0x000a, 0x184e: 0x000a, 0x184f: 0x000a, 0x1850: 0x000a, 0x1851: 0x000a, - 0x1852: 0x000a, 0x1853: 0x000a, 0x1854: 0x000a, 0x1855: 0x000a, 0x1856: 0x000a, 0x1857: 0x000a, - 0x1858: 0x000a, 0x1859: 0x000a, 0x185a: 0x000a, 0x185b: 0x000a, 0x185c: 0x000a, 0x185d: 0x000a, - 0x185e: 0x000a, 0x185f: 0x000a, 0x1860: 0x000a, 0x1861: 0x000a, 0x1862: 0x000a, 0x1863: 0x000a, - 0x1864: 0x000a, 0x1865: 0x000a, 0x1866: 0x003a, 0x1867: 0x002a, 0x1868: 0x003a, 0x1869: 0x002a, - 0x186a: 0x003a, 0x186b: 0x002a, 0x186c: 0x003a, 0x186d: 0x002a, 0x186e: 0x003a, 0x186f: 0x002a, - 0x1870: 0x000a, 0x1871: 0x000a, 0x1872: 0x000a, 0x1873: 0x000a, 0x1874: 0x000a, 0x1875: 0x000a, - 0x1876: 0x000a, 0x1877: 0x000a, 0x1878: 0x000a, 0x1879: 0x000a, 0x187a: 0x000a, 0x187b: 0x000a, - 0x187c: 0x000a, 0x187d: 0x000a, 0x187e: 0x000a, 0x187f: 0x000a, - // Block 0x62, offset 0x1880 - 0x1880: 0x000a, 0x1881: 0x000a, 0x1882: 0x000a, 0x1883: 0x007a, 0x1884: 0x006a, 0x1885: 0x009a, - 0x1886: 0x008a, 0x1887: 0x00ba, 0x1888: 0x00aa, 0x1889: 0x009a, 0x188a: 0x008a, 0x188b: 0x007a, - 0x188c: 0x006a, 0x188d: 0x00da, 0x188e: 0x002a, 0x188f: 0x003a, 0x1890: 0x00ca, 0x1891: 0x009a, - 0x1892: 0x008a, 0x1893: 0x007a, 0x1894: 0x006a, 0x1895: 0x009a, 0x1896: 0x008a, 0x1897: 0x00ba, - 0x1898: 0x00aa, 0x1899: 0x000a, 0x189a: 0x000a, 0x189b: 0x000a, 0x189c: 0x000a, 0x189d: 0x000a, - 0x189e: 0x000a, 0x189f: 0x000a, 0x18a0: 0x000a, 0x18a1: 0x000a, 0x18a2: 0x000a, 0x18a3: 0x000a, - 0x18a4: 0x000a, 0x18a5: 0x000a, 0x18a6: 0x000a, 0x18a7: 0x000a, 0x18a8: 0x000a, 0x18a9: 0x000a, - 0x18aa: 0x000a, 0x18ab: 0x000a, 0x18ac: 0x000a, 0x18ad: 0x000a, 0x18ae: 0x000a, 0x18af: 0x000a, - 0x18b0: 0x000a, 0x18b1: 0x000a, 0x18b2: 0x000a, 0x18b3: 0x000a, 0x18b4: 0x000a, 0x18b5: 0x000a, - 0x18b6: 0x000a, 0x18b7: 0x000a, 0x18b8: 0x000a, 0x18b9: 0x000a, 0x18ba: 0x000a, 0x18bb: 0x000a, - 0x18bc: 0x000a, 0x18bd: 0x000a, 0x18be: 0x000a, 0x18bf: 0x000a, - // Block 0x63, offset 0x18c0 - 0x18c0: 0x000a, 0x18c1: 0x000a, 0x18c2: 0x000a, 0x18c3: 0x000a, 0x18c4: 0x000a, 0x18c5: 0x000a, - 0x18c6: 0x000a, 0x18c7: 0x000a, 0x18c8: 0x000a, 0x18c9: 0x000a, 0x18ca: 0x000a, 0x18cb: 0x000a, - 0x18cc: 0x000a, 0x18cd: 0x000a, 0x18ce: 0x000a, 0x18cf: 0x000a, 0x18d0: 0x000a, 0x18d1: 0x000a, - 0x18d2: 0x000a, 0x18d3: 0x000a, 0x18d4: 0x000a, 0x18d5: 0x000a, 0x18d6: 0x000a, 0x18d7: 0x000a, - 0x18d8: 0x003a, 0x18d9: 0x002a, 0x18da: 0x003a, 0x18db: 0x002a, 0x18dc: 0x000a, 0x18dd: 0x000a, - 0x18de: 0x000a, 0x18df: 0x000a, 0x18e0: 0x000a, 0x18e1: 0x000a, 0x18e2: 0x000a, 0x18e3: 0x000a, - 0x18e4: 0x000a, 0x18e5: 0x000a, 0x18e6: 0x000a, 0x18e7: 0x000a, 0x18e8: 0x000a, 0x18e9: 0x000a, - 0x18ea: 0x000a, 0x18eb: 0x000a, 0x18ec: 0x000a, 0x18ed: 0x000a, 0x18ee: 0x000a, 0x18ef: 0x000a, - 0x18f0: 0x000a, 0x18f1: 0x000a, 0x18f2: 0x000a, 0x18f3: 0x000a, 0x18f4: 0x000a, 0x18f5: 0x000a, - 0x18f6: 0x000a, 0x18f7: 0x000a, 0x18f8: 0x000a, 0x18f9: 0x000a, 0x18fa: 0x000a, 0x18fb: 0x000a, - 0x18fc: 0x003a, 0x18fd: 0x002a, 0x18fe: 0x000a, 0x18ff: 0x000a, - // Block 0x64, offset 0x1900 - 0x1900: 0x000a, 0x1901: 0x000a, 0x1902: 0x000a, 0x1903: 0x000a, 0x1904: 0x000a, 0x1905: 0x000a, - 0x1906: 0x000a, 0x1907: 0x000a, 0x1908: 0x000a, 0x1909: 0x000a, 0x190a: 0x000a, 0x190b: 0x000a, - 0x190c: 0x000a, 0x190d: 0x000a, 0x190e: 0x000a, 0x190f: 0x000a, 0x1910: 0x000a, 0x1911: 0x000a, - 0x1912: 0x000a, 0x1913: 0x000a, 0x1914: 0x000a, 0x1915: 0x000a, 0x1916: 0x000a, 0x1917: 0x000a, - 0x1918: 0x000a, 0x1919: 0x000a, 0x191a: 0x000a, 0x191b: 0x000a, 0x191c: 0x000a, 0x191d: 0x000a, - 0x191e: 0x000a, 0x191f: 0x000a, 0x1920: 0x000a, 0x1921: 0x000a, 0x1922: 0x000a, 0x1923: 0x000a, - 0x1924: 0x000a, 0x1925: 0x000a, 0x1926: 0x000a, 0x1927: 0x000a, 0x1928: 0x000a, 0x1929: 0x000a, - 0x192a: 0x000a, 0x192b: 0x000a, 0x192c: 0x000a, 0x192d: 0x000a, 0x192e: 0x000a, 0x192f: 0x000a, - 0x1930: 0x000a, 0x1931: 0x000a, 0x1932: 0x000a, 0x1933: 0x000a, - 0x1936: 0x000a, 0x1937: 0x000a, 0x1938: 0x000a, 0x1939: 0x000a, 0x193a: 0x000a, 0x193b: 0x000a, - 0x193c: 0x000a, 0x193d: 0x000a, 0x193e: 0x000a, 0x193f: 0x000a, - // Block 0x65, offset 0x1940 - 0x1940: 0x000a, 0x1941: 0x000a, 0x1942: 0x000a, 0x1943: 0x000a, 0x1944: 0x000a, 0x1945: 0x000a, - 0x1946: 0x000a, 0x1947: 0x000a, 0x1948: 0x000a, 0x1949: 0x000a, 0x194a: 0x000a, 0x194b: 0x000a, - 0x194c: 0x000a, 0x194d: 0x000a, 0x194e: 0x000a, 0x194f: 0x000a, 0x1950: 0x000a, 0x1951: 0x000a, - 0x1952: 0x000a, 0x1953: 0x000a, 0x1954: 0x000a, 0x1955: 0x000a, - 0x1958: 0x000a, 0x1959: 0x000a, 0x195a: 0x000a, 0x195b: 0x000a, 0x195c: 0x000a, 0x195d: 0x000a, - 0x195e: 0x000a, 0x195f: 0x000a, 0x1960: 0x000a, 0x1961: 0x000a, 0x1962: 0x000a, 0x1963: 0x000a, - 0x1964: 0x000a, 0x1965: 0x000a, 0x1966: 0x000a, 0x1967: 0x000a, 0x1968: 0x000a, 0x1969: 0x000a, - 0x196a: 0x000a, 0x196b: 0x000a, 0x196c: 0x000a, 0x196d: 0x000a, 0x196e: 0x000a, 0x196f: 0x000a, - 0x1970: 0x000a, 0x1971: 0x000a, 0x1972: 0x000a, 0x1973: 0x000a, 0x1974: 0x000a, 0x1975: 0x000a, - 0x1976: 0x000a, 0x1977: 0x000a, 0x1978: 0x000a, 0x1979: 0x000a, 0x197a: 0x000a, 0x197b: 0x000a, - 0x197c: 0x000a, 0x197d: 0x000a, 0x197e: 0x000a, 0x197f: 0x000a, - // Block 0x66, offset 0x1980 - 0x19a5: 0x000a, 0x19a6: 0x000a, 0x19a7: 0x000a, 0x19a8: 0x000a, 0x19a9: 0x000a, - 0x19aa: 0x000a, 0x19af: 0x000c, - 0x19b0: 0x000c, 0x19b1: 0x000c, - 0x19b9: 0x000a, 0x19ba: 0x000a, 0x19bb: 0x000a, - 0x19bc: 0x000a, 0x19bd: 0x000a, 0x19be: 0x000a, 0x19bf: 0x000a, - // Block 0x67, offset 0x19c0 - 0x19ff: 0x000c, - // Block 0x68, offset 0x1a00 - 0x1a20: 0x000c, 0x1a21: 0x000c, 0x1a22: 0x000c, 0x1a23: 0x000c, - 0x1a24: 0x000c, 0x1a25: 0x000c, 0x1a26: 0x000c, 0x1a27: 0x000c, 0x1a28: 0x000c, 0x1a29: 0x000c, - 0x1a2a: 0x000c, 0x1a2b: 0x000c, 0x1a2c: 0x000c, 0x1a2d: 0x000c, 0x1a2e: 0x000c, 0x1a2f: 0x000c, - 0x1a30: 0x000c, 0x1a31: 0x000c, 0x1a32: 0x000c, 0x1a33: 0x000c, 0x1a34: 0x000c, 0x1a35: 0x000c, - 0x1a36: 0x000c, 0x1a37: 0x000c, 0x1a38: 0x000c, 0x1a39: 0x000c, 0x1a3a: 0x000c, 0x1a3b: 0x000c, - 0x1a3c: 0x000c, 0x1a3d: 0x000c, 0x1a3e: 0x000c, 0x1a3f: 0x000c, - // Block 0x69, offset 0x1a40 - 0x1a40: 0x000a, 0x1a41: 0x000a, 0x1a42: 0x000a, 0x1a43: 0x000a, 0x1a44: 0x000a, 0x1a45: 0x000a, - 0x1a46: 0x000a, 0x1a47: 0x000a, 0x1a48: 0x000a, 0x1a49: 0x000a, 0x1a4a: 0x000a, 0x1a4b: 0x000a, - 0x1a4c: 0x000a, 0x1a4d: 0x000a, 0x1a4e: 0x000a, 0x1a4f: 0x000a, 0x1a50: 0x000a, 0x1a51: 0x000a, - 0x1a52: 0x000a, 0x1a53: 0x000a, 0x1a54: 0x000a, 0x1a55: 0x000a, 0x1a56: 0x000a, 0x1a57: 0x000a, - 0x1a58: 0x000a, 0x1a59: 0x000a, 0x1a5a: 0x000a, 0x1a5b: 0x000a, 0x1a5c: 0x000a, 0x1a5d: 0x000a, - 0x1a5e: 0x000a, 0x1a5f: 0x000a, 0x1a60: 0x000a, 0x1a61: 0x000a, 0x1a62: 0x003a, 0x1a63: 0x002a, - 0x1a64: 0x003a, 0x1a65: 0x002a, 0x1a66: 0x003a, 0x1a67: 0x002a, 0x1a68: 0x003a, 0x1a69: 0x002a, - 0x1a6a: 0x000a, 0x1a6b: 0x000a, 0x1a6c: 0x000a, 0x1a6d: 0x000a, 0x1a6e: 0x000a, 0x1a6f: 0x000a, - 0x1a70: 0x000a, 0x1a71: 0x000a, 0x1a72: 0x000a, 0x1a73: 0x000a, 0x1a74: 0x000a, 0x1a75: 0x000a, - 0x1a76: 0x000a, 0x1a77: 0x000a, 0x1a78: 0x000a, 0x1a79: 0x000a, 0x1a7a: 0x000a, 0x1a7b: 0x000a, - 0x1a7c: 0x000a, 0x1a7d: 0x000a, 0x1a7e: 0x000a, 0x1a7f: 0x000a, - // Block 0x6a, offset 0x1a80 - 0x1a80: 0x000a, 0x1a81: 0x000a, 0x1a82: 0x000a, 0x1a83: 0x000a, 0x1a84: 0x000a, 0x1a85: 0x000a, - 0x1a86: 0x000a, 0x1a87: 0x000a, 0x1a88: 0x000a, 0x1a89: 0x000a, 0x1a8a: 0x000a, 0x1a8b: 0x000a, - 0x1a8c: 0x000a, 0x1a8d: 0x000a, 0x1a8e: 0x000a, 0x1a8f: 0x000a, - // Block 0x6b, offset 0x1ac0 - 0x1ac0: 0x000a, 0x1ac1: 0x000a, 0x1ac2: 0x000a, 0x1ac3: 0x000a, 0x1ac4: 0x000a, 0x1ac5: 0x000a, - 0x1ac6: 0x000a, 0x1ac7: 0x000a, 0x1ac8: 0x000a, 0x1ac9: 0x000a, 0x1aca: 0x000a, 0x1acb: 0x000a, - 0x1acc: 0x000a, 0x1acd: 0x000a, 0x1ace: 0x000a, 0x1acf: 0x000a, 0x1ad0: 0x000a, 0x1ad1: 0x000a, - 0x1ad2: 0x000a, 0x1ad3: 0x000a, 0x1ad4: 0x000a, 0x1ad5: 0x000a, 0x1ad6: 0x000a, 0x1ad7: 0x000a, - 0x1ad8: 0x000a, 0x1ad9: 0x000a, 0x1adb: 0x000a, 0x1adc: 0x000a, 0x1add: 0x000a, - 0x1ade: 0x000a, 0x1adf: 0x000a, 0x1ae0: 0x000a, 0x1ae1: 0x000a, 0x1ae2: 0x000a, 0x1ae3: 0x000a, - 0x1ae4: 0x000a, 0x1ae5: 0x000a, 0x1ae6: 0x000a, 0x1ae7: 0x000a, 0x1ae8: 0x000a, 0x1ae9: 0x000a, - 0x1aea: 0x000a, 0x1aeb: 0x000a, 0x1aec: 0x000a, 0x1aed: 0x000a, 0x1aee: 0x000a, 0x1aef: 0x000a, - 0x1af0: 0x000a, 0x1af1: 0x000a, 0x1af2: 0x000a, 0x1af3: 0x000a, 0x1af4: 0x000a, 0x1af5: 0x000a, - 0x1af6: 0x000a, 0x1af7: 0x000a, 0x1af8: 0x000a, 0x1af9: 0x000a, 0x1afa: 0x000a, 0x1afb: 0x000a, - 0x1afc: 0x000a, 0x1afd: 0x000a, 0x1afe: 0x000a, 0x1aff: 0x000a, - // Block 0x6c, offset 0x1b00 - 0x1b00: 0x000a, 0x1b01: 0x000a, 0x1b02: 0x000a, 0x1b03: 0x000a, 0x1b04: 0x000a, 0x1b05: 0x000a, - 0x1b06: 0x000a, 0x1b07: 0x000a, 0x1b08: 0x000a, 0x1b09: 0x000a, 0x1b0a: 0x000a, 0x1b0b: 0x000a, - 0x1b0c: 0x000a, 0x1b0d: 0x000a, 0x1b0e: 0x000a, 0x1b0f: 0x000a, 0x1b10: 0x000a, 0x1b11: 0x000a, - 0x1b12: 0x000a, 0x1b13: 0x000a, 0x1b14: 0x000a, 0x1b15: 0x000a, 0x1b16: 0x000a, 0x1b17: 0x000a, - 0x1b18: 0x000a, 0x1b19: 0x000a, 0x1b1a: 0x000a, 0x1b1b: 0x000a, 0x1b1c: 0x000a, 0x1b1d: 0x000a, - 0x1b1e: 0x000a, 0x1b1f: 0x000a, 0x1b20: 0x000a, 0x1b21: 0x000a, 0x1b22: 0x000a, 0x1b23: 0x000a, - 0x1b24: 0x000a, 0x1b25: 0x000a, 0x1b26: 0x000a, 0x1b27: 0x000a, 0x1b28: 0x000a, 0x1b29: 0x000a, - 0x1b2a: 0x000a, 0x1b2b: 0x000a, 0x1b2c: 0x000a, 0x1b2d: 0x000a, 0x1b2e: 0x000a, 0x1b2f: 0x000a, - 0x1b30: 0x000a, 0x1b31: 0x000a, 0x1b32: 0x000a, 0x1b33: 0x000a, - // Block 0x6d, offset 0x1b40 - 0x1b40: 0x000a, 0x1b41: 0x000a, 0x1b42: 0x000a, 0x1b43: 0x000a, 0x1b44: 0x000a, 0x1b45: 0x000a, - 0x1b46: 0x000a, 0x1b47: 0x000a, 0x1b48: 0x000a, 0x1b49: 0x000a, 0x1b4a: 0x000a, 0x1b4b: 0x000a, - 0x1b4c: 0x000a, 0x1b4d: 0x000a, 0x1b4e: 0x000a, 0x1b4f: 0x000a, 0x1b50: 0x000a, 0x1b51: 0x000a, - 0x1b52: 0x000a, 0x1b53: 0x000a, 0x1b54: 0x000a, 0x1b55: 0x000a, - 0x1b70: 0x000a, 0x1b71: 0x000a, 0x1b72: 0x000a, 0x1b73: 0x000a, 0x1b74: 0x000a, 0x1b75: 0x000a, - 0x1b76: 0x000a, 0x1b77: 0x000a, 0x1b78: 0x000a, 0x1b79: 0x000a, 0x1b7a: 0x000a, 0x1b7b: 0x000a, - // Block 0x6e, offset 0x1b80 - 0x1b80: 0x0009, 0x1b81: 0x000a, 0x1b82: 0x000a, 0x1b83: 0x000a, 0x1b84: 0x000a, - 0x1b88: 0x003a, 0x1b89: 0x002a, 0x1b8a: 0x003a, 0x1b8b: 0x002a, - 0x1b8c: 0x003a, 0x1b8d: 0x002a, 0x1b8e: 0x003a, 0x1b8f: 0x002a, 0x1b90: 0x003a, 0x1b91: 0x002a, - 0x1b92: 0x000a, 0x1b93: 0x000a, 0x1b94: 0x003a, 0x1b95: 0x002a, 0x1b96: 0x003a, 0x1b97: 0x002a, - 0x1b98: 0x003a, 0x1b99: 0x002a, 0x1b9a: 0x003a, 0x1b9b: 0x002a, 0x1b9c: 0x000a, 0x1b9d: 0x000a, - 0x1b9e: 0x000a, 0x1b9f: 0x000a, 0x1ba0: 0x000a, - 0x1baa: 0x000c, 0x1bab: 0x000c, 0x1bac: 0x000c, 0x1bad: 0x000c, - 0x1bb0: 0x000a, - 0x1bb6: 0x000a, 0x1bb7: 0x000a, - 0x1bbd: 0x000a, 0x1bbe: 0x000a, 0x1bbf: 0x000a, - // Block 0x6f, offset 0x1bc0 - 0x1bd9: 0x000c, 0x1bda: 0x000c, 0x1bdb: 0x000a, 0x1bdc: 0x000a, - 0x1be0: 0x000a, - // Block 0x70, offset 0x1c00 - 0x1c3b: 0x000a, - // Block 0x71, offset 0x1c40 - 0x1c40: 0x000a, 0x1c41: 0x000a, 0x1c42: 0x000a, 0x1c43: 0x000a, 0x1c44: 0x000a, 0x1c45: 0x000a, - 0x1c46: 0x000a, 0x1c47: 0x000a, 0x1c48: 0x000a, 0x1c49: 0x000a, 0x1c4a: 0x000a, 0x1c4b: 0x000a, - 0x1c4c: 0x000a, 0x1c4d: 0x000a, 0x1c4e: 0x000a, 0x1c4f: 0x000a, 0x1c50: 0x000a, 0x1c51: 0x000a, - 0x1c52: 0x000a, 0x1c53: 0x000a, 0x1c54: 0x000a, 0x1c55: 0x000a, 0x1c56: 0x000a, 0x1c57: 0x000a, - 0x1c58: 0x000a, 0x1c59: 0x000a, 0x1c5a: 0x000a, 0x1c5b: 0x000a, 0x1c5c: 0x000a, 0x1c5d: 0x000a, - 0x1c5e: 0x000a, 0x1c5f: 0x000a, 0x1c60: 0x000a, 0x1c61: 0x000a, 0x1c62: 0x000a, 0x1c63: 0x000a, - // Block 0x72, offset 0x1c80 - 0x1c9d: 0x000a, - 0x1c9e: 0x000a, - // Block 0x73, offset 0x1cc0 - 0x1cd0: 0x000a, 0x1cd1: 0x000a, - 0x1cd2: 0x000a, 0x1cd3: 0x000a, 0x1cd4: 0x000a, 0x1cd5: 0x000a, 0x1cd6: 0x000a, 0x1cd7: 0x000a, - 0x1cd8: 0x000a, 0x1cd9: 0x000a, 0x1cda: 0x000a, 0x1cdb: 0x000a, 0x1cdc: 0x000a, 0x1cdd: 0x000a, - 0x1cde: 0x000a, 0x1cdf: 0x000a, - 0x1cfc: 0x000a, 0x1cfd: 0x000a, 0x1cfe: 0x000a, - // Block 0x74, offset 0x1d00 - 0x1d31: 0x000a, 0x1d32: 0x000a, 0x1d33: 0x000a, 0x1d34: 0x000a, 0x1d35: 0x000a, - 0x1d36: 0x000a, 0x1d37: 0x000a, 0x1d38: 0x000a, 0x1d39: 0x000a, 0x1d3a: 0x000a, 0x1d3b: 0x000a, - 0x1d3c: 0x000a, 0x1d3d: 0x000a, 0x1d3e: 0x000a, 0x1d3f: 0x000a, - // Block 0x75, offset 0x1d40 - 0x1d4c: 0x000a, 0x1d4d: 0x000a, 0x1d4e: 0x000a, 0x1d4f: 0x000a, - // Block 0x76, offset 0x1d80 - 0x1db7: 0x000a, 0x1db8: 0x000a, 0x1db9: 0x000a, 0x1dba: 0x000a, - // Block 0x77, offset 0x1dc0 - 0x1dde: 0x000a, 0x1ddf: 0x000a, - 0x1dff: 0x000a, - // Block 0x78, offset 0x1e00 - 0x1e10: 0x000a, 0x1e11: 0x000a, - 0x1e12: 0x000a, 0x1e13: 0x000a, 0x1e14: 0x000a, 0x1e15: 0x000a, 0x1e16: 0x000a, 0x1e17: 0x000a, - 0x1e18: 0x000a, 0x1e19: 0x000a, 0x1e1a: 0x000a, 0x1e1b: 0x000a, 0x1e1c: 0x000a, 0x1e1d: 0x000a, - 0x1e1e: 0x000a, 0x1e1f: 0x000a, 0x1e20: 0x000a, 0x1e21: 0x000a, 0x1e22: 0x000a, 0x1e23: 0x000a, - 0x1e24: 0x000a, 0x1e25: 0x000a, 0x1e26: 0x000a, 0x1e27: 0x000a, 0x1e28: 0x000a, 0x1e29: 0x000a, - 0x1e2a: 0x000a, 0x1e2b: 0x000a, 0x1e2c: 0x000a, 0x1e2d: 0x000a, 0x1e2e: 0x000a, 0x1e2f: 0x000a, - 0x1e30: 0x000a, 0x1e31: 0x000a, 0x1e32: 0x000a, 0x1e33: 0x000a, 0x1e34: 0x000a, 0x1e35: 0x000a, - 0x1e36: 0x000a, 0x1e37: 0x000a, 0x1e38: 0x000a, 0x1e39: 0x000a, 0x1e3a: 0x000a, 0x1e3b: 0x000a, - 0x1e3c: 0x000a, 0x1e3d: 0x000a, 0x1e3e: 0x000a, 0x1e3f: 0x000a, - // Block 0x79, offset 0x1e40 - 0x1e40: 0x000a, 0x1e41: 0x000a, 0x1e42: 0x000a, 0x1e43: 0x000a, 0x1e44: 0x000a, 0x1e45: 0x000a, - 0x1e46: 0x000a, - // Block 0x7a, offset 0x1e80 - 0x1e8d: 0x000a, 0x1e8e: 0x000a, 0x1e8f: 0x000a, - // Block 0x7b, offset 0x1ec0 - 0x1eef: 0x000c, - 0x1ef0: 0x000c, 0x1ef1: 0x000c, 0x1ef2: 0x000c, 0x1ef3: 0x000a, 0x1ef4: 0x000c, 0x1ef5: 0x000c, - 0x1ef6: 0x000c, 0x1ef7: 0x000c, 0x1ef8: 0x000c, 0x1ef9: 0x000c, 0x1efa: 0x000c, 0x1efb: 0x000c, - 0x1efc: 0x000c, 0x1efd: 0x000c, 0x1efe: 0x000a, 0x1eff: 0x000a, - // Block 0x7c, offset 0x1f00 - 0x1f1e: 0x000c, 0x1f1f: 0x000c, - // Block 0x7d, offset 0x1f40 - 0x1f70: 0x000c, 0x1f71: 0x000c, - // Block 0x7e, offset 0x1f80 - 0x1f80: 0x000a, 0x1f81: 0x000a, 0x1f82: 0x000a, 0x1f83: 0x000a, 0x1f84: 0x000a, 0x1f85: 0x000a, - 0x1f86: 0x000a, 0x1f87: 0x000a, 0x1f88: 0x000a, 0x1f89: 0x000a, 0x1f8a: 0x000a, 0x1f8b: 0x000a, - 0x1f8c: 0x000a, 0x1f8d: 0x000a, 0x1f8e: 0x000a, 0x1f8f: 0x000a, 0x1f90: 0x000a, 0x1f91: 0x000a, - 0x1f92: 0x000a, 0x1f93: 0x000a, 0x1f94: 0x000a, 0x1f95: 0x000a, 0x1f96: 0x000a, 0x1f97: 0x000a, - 0x1f98: 0x000a, 0x1f99: 0x000a, 0x1f9a: 0x000a, 0x1f9b: 0x000a, 0x1f9c: 0x000a, 0x1f9d: 0x000a, - 0x1f9e: 0x000a, 0x1f9f: 0x000a, 0x1fa0: 0x000a, 0x1fa1: 0x000a, - // Block 0x7f, offset 0x1fc0 - 0x1fc8: 0x000a, - // Block 0x80, offset 0x2000 - 0x2002: 0x000c, - 0x2006: 0x000c, 0x200b: 0x000c, - 0x2025: 0x000c, 0x2026: 0x000c, 0x2028: 0x000a, 0x2029: 0x000a, - 0x202a: 0x000a, 0x202b: 0x000a, - 0x2038: 0x0004, 0x2039: 0x0004, - // Block 0x81, offset 0x2040 - 0x2074: 0x000a, 0x2075: 0x000a, - 0x2076: 0x000a, 0x2077: 0x000a, - // Block 0x82, offset 0x2080 - 0x2084: 0x000c, 0x2085: 0x000c, - 0x20a0: 0x000c, 0x20a1: 0x000c, 0x20a2: 0x000c, 0x20a3: 0x000c, - 0x20a4: 0x000c, 0x20a5: 0x000c, 0x20a6: 0x000c, 0x20a7: 0x000c, 0x20a8: 0x000c, 0x20a9: 0x000c, - 0x20aa: 0x000c, 0x20ab: 0x000c, 0x20ac: 0x000c, 0x20ad: 0x000c, 0x20ae: 0x000c, 0x20af: 0x000c, - 0x20b0: 0x000c, 0x20b1: 0x000c, - 0x20bf: 0x000c, - // Block 0x83, offset 0x20c0 - 0x20e6: 0x000c, 0x20e7: 0x000c, 0x20e8: 0x000c, 0x20e9: 0x000c, - 0x20ea: 0x000c, 0x20eb: 0x000c, 0x20ec: 0x000c, 0x20ed: 0x000c, - // Block 0x84, offset 0x2100 - 0x2107: 0x000c, 0x2108: 0x000c, 0x2109: 0x000c, 0x210a: 0x000c, 0x210b: 0x000c, - 0x210c: 0x000c, 0x210d: 0x000c, 0x210e: 0x000c, 0x210f: 0x000c, 0x2110: 0x000c, 0x2111: 0x000c, - // Block 0x85, offset 0x2140 - 0x2140: 0x000c, 0x2141: 0x000c, 0x2142: 0x000c, - 0x2173: 0x000c, - 0x2176: 0x000c, 0x2177: 0x000c, 0x2178: 0x000c, 0x2179: 0x000c, - 0x217c: 0x000c, 0x217d: 0x000c, - // Block 0x86, offset 0x2180 - 0x21a5: 0x000c, - // Block 0x87, offset 0x21c0 - 0x21e9: 0x000c, - 0x21ea: 0x000c, 0x21eb: 0x000c, 0x21ec: 0x000c, 0x21ed: 0x000c, 0x21ee: 0x000c, - 0x21f1: 0x000c, 0x21f2: 0x000c, 0x21f5: 0x000c, - 0x21f6: 0x000c, - // Block 0x88, offset 0x2200 - 0x2203: 0x000c, - 0x220c: 0x000c, - 0x223c: 0x000c, - // Block 0x89, offset 0x2240 - 0x2270: 0x000c, 0x2272: 0x000c, 0x2273: 0x000c, 0x2274: 0x000c, - 0x2277: 0x000c, 0x2278: 0x000c, - 0x227e: 0x000c, 0x227f: 0x000c, - // Block 0x8a, offset 0x2280 - 0x2281: 0x000c, - 0x22ac: 0x000c, 0x22ad: 0x000c, - 0x22b6: 0x000c, - // Block 0x8b, offset 0x22c0 - 0x22e5: 0x000c, 0x22e8: 0x000c, - 0x22ed: 0x000c, - // Block 0x8c, offset 0x2300 - 0x231d: 0x0001, - 0x231e: 0x000c, 0x231f: 0x0001, 0x2320: 0x0001, 0x2321: 0x0001, 0x2322: 0x0001, 0x2323: 0x0001, - 0x2324: 0x0001, 0x2325: 0x0001, 0x2326: 0x0001, 0x2327: 0x0001, 0x2328: 0x0001, 0x2329: 0x0003, - 0x232a: 0x0001, 0x232b: 0x0001, 0x232c: 0x0001, 0x232d: 0x0001, 0x232e: 0x0001, 0x232f: 0x0001, - 0x2330: 0x0001, 0x2331: 0x0001, 0x2332: 0x0001, 0x2333: 0x0001, 0x2334: 0x0001, 0x2335: 0x0001, - 0x2336: 0x0001, 0x2337: 0x0001, 0x2338: 0x0001, 0x2339: 0x0001, 0x233a: 0x0001, 0x233b: 0x0001, - 0x233c: 0x0001, 0x233d: 0x0001, 0x233e: 0x0001, 0x233f: 0x0001, - // Block 0x8d, offset 0x2340 - 0x2340: 0x0001, 0x2341: 0x0001, 0x2342: 0x0001, 0x2343: 0x0001, 0x2344: 0x0001, 0x2345: 0x0001, - 0x2346: 0x0001, 0x2347: 0x0001, 0x2348: 0x0001, 0x2349: 0x0001, 0x234a: 0x0001, 0x234b: 0x0001, - 0x234c: 0x0001, 0x234d: 0x0001, 0x234e: 0x0001, 0x234f: 0x0001, 0x2350: 0x000d, 0x2351: 0x000d, - 0x2352: 0x000d, 0x2353: 0x000d, 0x2354: 0x000d, 0x2355: 0x000d, 0x2356: 0x000d, 0x2357: 0x000d, - 0x2358: 0x000d, 0x2359: 0x000d, 0x235a: 0x000d, 0x235b: 0x000d, 0x235c: 0x000d, 0x235d: 0x000d, - 0x235e: 0x000d, 0x235f: 0x000d, 0x2360: 0x000d, 0x2361: 0x000d, 0x2362: 0x000d, 0x2363: 0x000d, - 0x2364: 0x000d, 0x2365: 0x000d, 0x2366: 0x000d, 0x2367: 0x000d, 0x2368: 0x000d, 0x2369: 0x000d, - 0x236a: 0x000d, 0x236b: 0x000d, 0x236c: 0x000d, 0x236d: 0x000d, 0x236e: 0x000d, 0x236f: 0x000d, - 0x2370: 0x000d, 0x2371: 0x000d, 0x2372: 0x000d, 0x2373: 0x000d, 0x2374: 0x000d, 0x2375: 0x000d, - 0x2376: 0x000d, 0x2377: 0x000d, 0x2378: 0x000d, 0x2379: 0x000d, 0x237a: 0x000d, 0x237b: 0x000d, - 0x237c: 0x000d, 0x237d: 0x000d, 0x237e: 0x000d, 0x237f: 0x000d, - // Block 0x8e, offset 0x2380 - 0x2380: 0x000d, 0x2381: 0x000d, 0x2382: 0x000d, 0x2383: 0x000d, 0x2384: 0x000d, 0x2385: 0x000d, - 0x2386: 0x000d, 0x2387: 0x000d, 0x2388: 0x000d, 0x2389: 0x000d, 0x238a: 0x000d, 0x238b: 0x000d, - 0x238c: 0x000d, 0x238d: 0x000d, 0x238e: 0x000d, 0x238f: 0x000d, 0x2390: 0x000d, 0x2391: 0x000d, - 0x2392: 0x000d, 0x2393: 0x000d, 0x2394: 0x000d, 0x2395: 0x000d, 0x2396: 0x000d, 0x2397: 0x000d, - 0x2398: 0x000d, 0x2399: 0x000d, 0x239a: 0x000d, 0x239b: 0x000d, 0x239c: 0x000d, 0x239d: 0x000d, - 0x239e: 0x000d, 0x239f: 0x000d, 0x23a0: 0x000d, 0x23a1: 0x000d, 0x23a2: 0x000d, 0x23a3: 0x000d, - 0x23a4: 0x000d, 0x23a5: 0x000d, 0x23a6: 0x000d, 0x23a7: 0x000d, 0x23a8: 0x000d, 0x23a9: 0x000d, - 0x23aa: 0x000d, 0x23ab: 0x000d, 0x23ac: 0x000d, 0x23ad: 0x000d, 0x23ae: 0x000d, 0x23af: 0x000d, - 0x23b0: 0x000d, 0x23b1: 0x000d, 0x23b2: 0x000d, 0x23b3: 0x000d, 0x23b4: 0x000d, 0x23b5: 0x000d, - 0x23b6: 0x000d, 0x23b7: 0x000d, 0x23b8: 0x000d, 0x23b9: 0x000d, 0x23ba: 0x000d, 0x23bb: 0x000d, - 0x23bc: 0x000d, 0x23bd: 0x000d, 0x23be: 0x000a, 0x23bf: 0x000a, - // Block 0x8f, offset 0x23c0 - 0x23c0: 0x000d, 0x23c1: 0x000d, 0x23c2: 0x000d, 0x23c3: 0x000d, 0x23c4: 0x000d, 0x23c5: 0x000d, - 0x23c6: 0x000d, 0x23c7: 0x000d, 0x23c8: 0x000d, 0x23c9: 0x000d, 0x23ca: 0x000d, 0x23cb: 0x000d, - 0x23cc: 0x000d, 0x23cd: 0x000d, 0x23ce: 0x000d, 0x23cf: 0x000d, 0x23d0: 0x000b, 0x23d1: 0x000b, - 0x23d2: 0x000b, 0x23d3: 0x000b, 0x23d4: 0x000b, 0x23d5: 0x000b, 0x23d6: 0x000b, 0x23d7: 0x000b, - 0x23d8: 0x000b, 0x23d9: 0x000b, 0x23da: 0x000b, 0x23db: 0x000b, 0x23dc: 0x000b, 0x23dd: 0x000b, - 0x23de: 0x000b, 0x23df: 0x000b, 0x23e0: 0x000b, 0x23e1: 0x000b, 0x23e2: 0x000b, 0x23e3: 0x000b, - 0x23e4: 0x000b, 0x23e5: 0x000b, 0x23e6: 0x000b, 0x23e7: 0x000b, 0x23e8: 0x000b, 0x23e9: 0x000b, - 0x23ea: 0x000b, 0x23eb: 0x000b, 0x23ec: 0x000b, 0x23ed: 0x000b, 0x23ee: 0x000b, 0x23ef: 0x000b, - 0x23f0: 0x000d, 0x23f1: 0x000d, 0x23f2: 0x000d, 0x23f3: 0x000d, 0x23f4: 0x000d, 0x23f5: 0x000d, - 0x23f6: 0x000d, 0x23f7: 0x000d, 0x23f8: 0x000d, 0x23f9: 0x000d, 0x23fa: 0x000d, 0x23fb: 0x000d, - 0x23fc: 0x000d, 0x23fd: 0x000a, 0x23fe: 0x000d, 0x23ff: 0x000d, - // Block 0x90, offset 0x2400 - 0x2400: 0x000c, 0x2401: 0x000c, 0x2402: 0x000c, 0x2403: 0x000c, 0x2404: 0x000c, 0x2405: 0x000c, - 0x2406: 0x000c, 0x2407: 0x000c, 0x2408: 0x000c, 0x2409: 0x000c, 0x240a: 0x000c, 0x240b: 0x000c, - 0x240c: 0x000c, 0x240d: 0x000c, 0x240e: 0x000c, 0x240f: 0x000c, 0x2410: 0x000a, 0x2411: 0x000a, - 0x2412: 0x000a, 0x2413: 0x000a, 0x2414: 0x000a, 0x2415: 0x000a, 0x2416: 0x000a, 0x2417: 0x000a, - 0x2418: 0x000a, 0x2419: 0x000a, - 0x2420: 0x000c, 0x2421: 0x000c, 0x2422: 0x000c, 0x2423: 0x000c, - 0x2424: 0x000c, 0x2425: 0x000c, 0x2426: 0x000c, 0x2427: 0x000c, 0x2428: 0x000c, 0x2429: 0x000c, - 0x242a: 0x000c, 0x242b: 0x000c, 0x242c: 0x000c, 0x242d: 0x000c, 0x242e: 0x000c, 0x242f: 0x000c, - 0x2430: 0x000a, 0x2431: 0x000a, 0x2432: 0x000a, 0x2433: 0x000a, 0x2434: 0x000a, 0x2435: 0x000a, - 0x2436: 0x000a, 0x2437: 0x000a, 0x2438: 0x000a, 0x2439: 0x000a, 0x243a: 0x000a, 0x243b: 0x000a, - 0x243c: 0x000a, 0x243d: 0x000a, 0x243e: 0x000a, 0x243f: 0x000a, - // Block 0x91, offset 0x2440 - 0x2440: 0x000a, 0x2441: 0x000a, 0x2442: 0x000a, 0x2443: 0x000a, 0x2444: 0x000a, 0x2445: 0x000a, - 0x2446: 0x000a, 0x2447: 0x000a, 0x2448: 0x000a, 0x2449: 0x000a, 0x244a: 0x000a, 0x244b: 0x000a, - 0x244c: 0x000a, 0x244d: 0x000a, 0x244e: 0x000a, 0x244f: 0x000a, 0x2450: 0x0006, 0x2451: 0x000a, - 0x2452: 0x0006, 0x2454: 0x000a, 0x2455: 0x0006, 0x2456: 0x000a, 0x2457: 0x000a, - 0x2458: 0x000a, 0x2459: 0x009a, 0x245a: 0x008a, 0x245b: 0x007a, 0x245c: 0x006a, 0x245d: 0x009a, - 0x245e: 0x008a, 0x245f: 0x0004, 0x2460: 0x000a, 0x2461: 0x000a, 0x2462: 0x0003, 0x2463: 0x0003, - 0x2464: 0x000a, 0x2465: 0x000a, 0x2466: 0x000a, 0x2468: 0x000a, 0x2469: 0x0004, - 0x246a: 0x0004, 0x246b: 0x000a, - 0x2470: 0x000d, 0x2471: 0x000d, 0x2472: 0x000d, 0x2473: 0x000d, 0x2474: 0x000d, 0x2475: 0x000d, - 0x2476: 0x000d, 0x2477: 0x000d, 0x2478: 0x000d, 0x2479: 0x000d, 0x247a: 0x000d, 0x247b: 0x000d, - 0x247c: 0x000d, 0x247d: 0x000d, 0x247e: 0x000d, 0x247f: 0x000d, - // Block 0x92, offset 0x2480 - 0x2480: 0x000d, 0x2481: 0x000d, 0x2482: 0x000d, 0x2483: 0x000d, 0x2484: 0x000d, 0x2485: 0x000d, - 0x2486: 0x000d, 0x2487: 0x000d, 0x2488: 0x000d, 0x2489: 0x000d, 0x248a: 0x000d, 0x248b: 0x000d, - 0x248c: 0x000d, 0x248d: 0x000d, 0x248e: 0x000d, 0x248f: 0x000d, 0x2490: 0x000d, 0x2491: 0x000d, - 0x2492: 0x000d, 0x2493: 0x000d, 0x2494: 0x000d, 0x2495: 0x000d, 0x2496: 0x000d, 0x2497: 0x000d, - 0x2498: 0x000d, 0x2499: 0x000d, 0x249a: 0x000d, 0x249b: 0x000d, 0x249c: 0x000d, 0x249d: 0x000d, - 0x249e: 0x000d, 0x249f: 0x000d, 0x24a0: 0x000d, 0x24a1: 0x000d, 0x24a2: 0x000d, 0x24a3: 0x000d, - 0x24a4: 0x000d, 0x24a5: 0x000d, 0x24a6: 0x000d, 0x24a7: 0x000d, 0x24a8: 0x000d, 0x24a9: 0x000d, - 0x24aa: 0x000d, 0x24ab: 0x000d, 0x24ac: 0x000d, 0x24ad: 0x000d, 0x24ae: 0x000d, 0x24af: 0x000d, - 0x24b0: 0x000d, 0x24b1: 0x000d, 0x24b2: 0x000d, 0x24b3: 0x000d, 0x24b4: 0x000d, 0x24b5: 0x000d, - 0x24b6: 0x000d, 0x24b7: 0x000d, 0x24b8: 0x000d, 0x24b9: 0x000d, 0x24ba: 0x000d, 0x24bb: 0x000d, - 0x24bc: 0x000d, 0x24bd: 0x000d, 0x24be: 0x000d, 0x24bf: 0x000b, - // Block 0x93, offset 0x24c0 - 0x24c1: 0x000a, 0x24c2: 0x000a, 0x24c3: 0x0004, 0x24c4: 0x0004, 0x24c5: 0x0004, - 0x24c6: 0x000a, 0x24c7: 0x000a, 0x24c8: 0x003a, 0x24c9: 0x002a, 0x24ca: 0x000a, 0x24cb: 0x0003, - 0x24cc: 0x0006, 0x24cd: 0x0003, 0x24ce: 0x0006, 0x24cf: 0x0006, 0x24d0: 0x0002, 0x24d1: 0x0002, - 0x24d2: 0x0002, 0x24d3: 0x0002, 0x24d4: 0x0002, 0x24d5: 0x0002, 0x24d6: 0x0002, 0x24d7: 0x0002, - 0x24d8: 0x0002, 0x24d9: 0x0002, 0x24da: 0x0006, 0x24db: 0x000a, 0x24dc: 0x000a, 0x24dd: 0x000a, - 0x24de: 0x000a, 0x24df: 0x000a, 0x24e0: 0x000a, - 0x24fb: 0x005a, - 0x24fc: 0x000a, 0x24fd: 0x004a, 0x24fe: 0x000a, 0x24ff: 0x000a, - // Block 0x94, offset 0x2500 - 0x2500: 0x000a, - 0x251b: 0x005a, 0x251c: 0x000a, 0x251d: 0x004a, - 0x251e: 0x000a, 0x251f: 0x00fa, 0x2520: 0x00ea, 0x2521: 0x000a, 0x2522: 0x003a, 0x2523: 0x002a, - 0x2524: 0x000a, 0x2525: 0x000a, - // Block 0x95, offset 0x2540 - 0x2560: 0x0004, 0x2561: 0x0004, 0x2562: 0x000a, 0x2563: 0x000a, - 0x2564: 0x000a, 0x2565: 0x0004, 0x2566: 0x0004, 0x2568: 0x000a, 0x2569: 0x000a, - 0x256a: 0x000a, 0x256b: 0x000a, 0x256c: 0x000a, 0x256d: 0x000a, 0x256e: 0x000a, - 0x2570: 0x000b, 0x2571: 0x000b, 0x2572: 0x000b, 0x2573: 0x000b, 0x2574: 0x000b, 0x2575: 0x000b, - 0x2576: 0x000b, 0x2577: 0x000b, 0x2578: 0x000b, 0x2579: 0x000a, 0x257a: 0x000a, 0x257b: 0x000a, - 0x257c: 0x000a, 0x257d: 0x000a, 0x257e: 0x000b, 0x257f: 0x000b, - // Block 0x96, offset 0x2580 - 0x2581: 0x000a, - // Block 0x97, offset 0x25c0 - 0x25c0: 0x000a, 0x25c1: 0x000a, 0x25c2: 0x000a, 0x25c3: 0x000a, 0x25c4: 0x000a, 0x25c5: 0x000a, - 0x25c6: 0x000a, 0x25c7: 0x000a, 0x25c8: 0x000a, 0x25c9: 0x000a, 0x25ca: 0x000a, 0x25cb: 0x000a, - 0x25cc: 0x000a, 0x25d0: 0x000a, 0x25d1: 0x000a, - 0x25d2: 0x000a, 0x25d3: 0x000a, 0x25d4: 0x000a, 0x25d5: 0x000a, 0x25d6: 0x000a, 0x25d7: 0x000a, - 0x25d8: 0x000a, 0x25d9: 0x000a, 0x25da: 0x000a, 0x25db: 0x000a, - 0x25e0: 0x000a, - // Block 0x98, offset 0x2600 - 0x263d: 0x000c, - // Block 0x99, offset 0x2640 - 0x2660: 0x000c, 0x2661: 0x0002, 0x2662: 0x0002, 0x2663: 0x0002, - 0x2664: 0x0002, 0x2665: 0x0002, 0x2666: 0x0002, 0x2667: 0x0002, 0x2668: 0x0002, 0x2669: 0x0002, - 0x266a: 0x0002, 0x266b: 0x0002, 0x266c: 0x0002, 0x266d: 0x0002, 0x266e: 0x0002, 0x266f: 0x0002, - 0x2670: 0x0002, 0x2671: 0x0002, 0x2672: 0x0002, 0x2673: 0x0002, 0x2674: 0x0002, 0x2675: 0x0002, - 0x2676: 0x0002, 0x2677: 0x0002, 0x2678: 0x0002, 0x2679: 0x0002, 0x267a: 0x0002, 0x267b: 0x0002, - // Block 0x9a, offset 0x2680 - 0x26b6: 0x000c, 0x26b7: 0x000c, 0x26b8: 0x000c, 0x26b9: 0x000c, 0x26ba: 0x000c, - // Block 0x9b, offset 0x26c0 - 0x26c0: 0x0001, 0x26c1: 0x0001, 0x26c2: 0x0001, 0x26c3: 0x0001, 0x26c4: 0x0001, 0x26c5: 0x0001, - 0x26c6: 0x0001, 0x26c7: 0x0001, 0x26c8: 0x0001, 0x26c9: 0x0001, 0x26ca: 0x0001, 0x26cb: 0x0001, - 0x26cc: 0x0001, 0x26cd: 0x0001, 0x26ce: 0x0001, 0x26cf: 0x0001, 0x26d0: 0x0001, 0x26d1: 0x0001, - 0x26d2: 0x0001, 0x26d3: 0x0001, 0x26d4: 0x0001, 0x26d5: 0x0001, 0x26d6: 0x0001, 0x26d7: 0x0001, - 0x26d8: 0x0001, 0x26d9: 0x0001, 0x26da: 0x0001, 0x26db: 0x0001, 0x26dc: 0x0001, 0x26dd: 0x0001, - 0x26de: 0x0001, 0x26df: 0x0001, 0x26e0: 0x0001, 0x26e1: 0x0001, 0x26e2: 0x0001, 0x26e3: 0x0001, - 0x26e4: 0x0001, 0x26e5: 0x0001, 0x26e6: 0x0001, 0x26e7: 0x0001, 0x26e8: 0x0001, 0x26e9: 0x0001, - 0x26ea: 0x0001, 0x26eb: 0x0001, 0x26ec: 0x0001, 0x26ed: 0x0001, 0x26ee: 0x0001, 0x26ef: 0x0001, - 0x26f0: 0x0001, 0x26f1: 0x0001, 0x26f2: 0x0001, 0x26f3: 0x0001, 0x26f4: 0x0001, 0x26f5: 0x0001, - 0x26f6: 0x0001, 0x26f7: 0x0001, 0x26f8: 0x0001, 0x26f9: 0x0001, 0x26fa: 0x0001, 0x26fb: 0x0001, - 0x26fc: 0x0001, 0x26fd: 0x0001, 0x26fe: 0x0001, 0x26ff: 0x0001, - // Block 0x9c, offset 0x2700 - 0x2700: 0x0001, 0x2701: 0x0001, 0x2702: 0x0001, 0x2703: 0x0001, 0x2704: 0x0001, 0x2705: 0x0001, - 0x2706: 0x0001, 0x2707: 0x0001, 0x2708: 0x0001, 0x2709: 0x0001, 0x270a: 0x0001, 0x270b: 0x0001, - 0x270c: 0x0001, 0x270d: 0x0001, 0x270e: 0x0001, 0x270f: 0x0001, 0x2710: 0x0001, 0x2711: 0x0001, - 0x2712: 0x0001, 0x2713: 0x0001, 0x2714: 0x0001, 0x2715: 0x0001, 0x2716: 0x0001, 0x2717: 0x0001, - 0x2718: 0x0001, 0x2719: 0x0001, 0x271a: 0x0001, 0x271b: 0x0001, 0x271c: 0x0001, 0x271d: 0x0001, - 0x271e: 0x0001, 0x271f: 0x000a, 0x2720: 0x0001, 0x2721: 0x0001, 0x2722: 0x0001, 0x2723: 0x0001, - 0x2724: 0x0001, 0x2725: 0x0001, 0x2726: 0x0001, 0x2727: 0x0001, 0x2728: 0x0001, 0x2729: 0x0001, - 0x272a: 0x0001, 0x272b: 0x0001, 0x272c: 0x0001, 0x272d: 0x0001, 0x272e: 0x0001, 0x272f: 0x0001, - 0x2730: 0x0001, 0x2731: 0x0001, 0x2732: 0x0001, 0x2733: 0x0001, 0x2734: 0x0001, 0x2735: 0x0001, - 0x2736: 0x0001, 0x2737: 0x0001, 0x2738: 0x0001, 0x2739: 0x0001, 0x273a: 0x0001, 0x273b: 0x0001, - 0x273c: 0x0001, 0x273d: 0x0001, 0x273e: 0x0001, 0x273f: 0x0001, - // Block 0x9d, offset 0x2740 - 0x2740: 0x0001, 0x2741: 0x000c, 0x2742: 0x000c, 0x2743: 0x000c, 0x2744: 0x0001, 0x2745: 0x000c, - 0x2746: 0x000c, 0x2747: 0x0001, 0x2748: 0x0001, 0x2749: 0x0001, 0x274a: 0x0001, 0x274b: 0x0001, - 0x274c: 0x000c, 0x274d: 0x000c, 0x274e: 0x000c, 0x274f: 0x000c, 0x2750: 0x0001, 0x2751: 0x0001, - 0x2752: 0x0001, 0x2753: 0x0001, 0x2754: 0x0001, 0x2755: 0x0001, 0x2756: 0x0001, 0x2757: 0x0001, - 0x2758: 0x0001, 0x2759: 0x0001, 0x275a: 0x0001, 0x275b: 0x0001, 0x275c: 0x0001, 0x275d: 0x0001, - 0x275e: 0x0001, 0x275f: 0x0001, 0x2760: 0x0001, 0x2761: 0x0001, 0x2762: 0x0001, 0x2763: 0x0001, - 0x2764: 0x0001, 0x2765: 0x0001, 0x2766: 0x0001, 0x2767: 0x0001, 0x2768: 0x0001, 0x2769: 0x0001, - 0x276a: 0x0001, 0x276b: 0x0001, 0x276c: 0x0001, 0x276d: 0x0001, 0x276e: 0x0001, 0x276f: 0x0001, - 0x2770: 0x0001, 0x2771: 0x0001, 0x2772: 0x0001, 0x2773: 0x0001, 0x2774: 0x0001, 0x2775: 0x0001, - 0x2776: 0x0001, 0x2777: 0x0001, 0x2778: 0x000c, 0x2779: 0x000c, 0x277a: 0x000c, 0x277b: 0x0001, - 0x277c: 0x0001, 0x277d: 0x0001, 0x277e: 0x0001, 0x277f: 0x000c, - // Block 0x9e, offset 0x2780 - 0x2780: 0x0001, 0x2781: 0x0001, 0x2782: 0x0001, 0x2783: 0x0001, 0x2784: 0x0001, 0x2785: 0x0001, - 0x2786: 0x0001, 0x2787: 0x0001, 0x2788: 0x0001, 0x2789: 0x0001, 0x278a: 0x0001, 0x278b: 0x0001, - 0x278c: 0x0001, 0x278d: 0x0001, 0x278e: 0x0001, 0x278f: 0x0001, 0x2790: 0x0001, 0x2791: 0x0001, - 0x2792: 0x0001, 0x2793: 0x0001, 0x2794: 0x0001, 0x2795: 0x0001, 0x2796: 0x0001, 0x2797: 0x0001, - 0x2798: 0x0001, 0x2799: 0x0001, 0x279a: 0x0001, 0x279b: 0x0001, 0x279c: 0x0001, 0x279d: 0x0001, - 0x279e: 0x0001, 0x279f: 0x0001, 0x27a0: 0x0001, 0x27a1: 0x0001, 0x27a2: 0x0001, 0x27a3: 0x0001, - 0x27a4: 0x0001, 0x27a5: 0x000c, 0x27a6: 0x000c, 0x27a7: 0x0001, 0x27a8: 0x0001, 0x27a9: 0x0001, - 0x27aa: 0x0001, 0x27ab: 0x0001, 0x27ac: 0x0001, 0x27ad: 0x0001, 0x27ae: 0x0001, 0x27af: 0x0001, - 0x27b0: 0x0001, 0x27b1: 0x0001, 0x27b2: 0x0001, 0x27b3: 0x0001, 0x27b4: 0x0001, 0x27b5: 0x0001, - 0x27b6: 0x0001, 0x27b7: 0x0001, 0x27b8: 0x0001, 0x27b9: 0x0001, 0x27ba: 0x0001, 0x27bb: 0x0001, - 0x27bc: 0x0001, 0x27bd: 0x0001, 0x27be: 0x0001, 0x27bf: 0x0001, - // Block 0x9f, offset 0x27c0 - 0x27c0: 0x0001, 0x27c1: 0x0001, 0x27c2: 0x0001, 0x27c3: 0x0001, 0x27c4: 0x0001, 0x27c5: 0x0001, - 0x27c6: 0x0001, 0x27c7: 0x0001, 0x27c8: 0x0001, 0x27c9: 0x0001, 0x27ca: 0x0001, 0x27cb: 0x0001, - 0x27cc: 0x0001, 0x27cd: 0x0001, 0x27ce: 0x0001, 0x27cf: 0x0001, 0x27d0: 0x0001, 0x27d1: 0x0001, - 0x27d2: 0x0001, 0x27d3: 0x0001, 0x27d4: 0x0001, 0x27d5: 0x0001, 0x27d6: 0x0001, 0x27d7: 0x0001, - 0x27d8: 0x0001, 0x27d9: 0x0001, 0x27da: 0x0001, 0x27db: 0x0001, 0x27dc: 0x0001, 0x27dd: 0x0001, - 0x27de: 0x0001, 0x27df: 0x0001, 0x27e0: 0x0001, 0x27e1: 0x0001, 0x27e2: 0x0001, 0x27e3: 0x0001, - 0x27e4: 0x0001, 0x27e5: 0x0001, 0x27e6: 0x0001, 0x27e7: 0x0001, 0x27e8: 0x0001, 0x27e9: 0x0001, - 0x27ea: 0x0001, 0x27eb: 0x0001, 0x27ec: 0x0001, 0x27ed: 0x0001, 0x27ee: 0x0001, 0x27ef: 0x0001, - 0x27f0: 0x0001, 0x27f1: 0x0001, 0x27f2: 0x0001, 0x27f3: 0x0001, 0x27f4: 0x0001, 0x27f5: 0x0001, - 0x27f6: 0x0001, 0x27f7: 0x0001, 0x27f8: 0x0001, 0x27f9: 0x000a, 0x27fa: 0x000a, 0x27fb: 0x000a, - 0x27fc: 0x000a, 0x27fd: 0x000a, 0x27fe: 0x000a, 0x27ff: 0x000a, - // Block 0xa0, offset 0x2800 - 0x2800: 0x000d, 0x2801: 0x000d, 0x2802: 0x000d, 0x2803: 0x000d, 0x2804: 0x000d, 0x2805: 0x000d, - 0x2806: 0x000d, 0x2807: 0x000d, 0x2808: 0x000d, 0x2809: 0x000d, 0x280a: 0x000d, 0x280b: 0x000d, - 0x280c: 0x000d, 0x280d: 0x000d, 0x280e: 0x000d, 0x280f: 0x000d, 0x2810: 0x000d, 0x2811: 0x000d, - 0x2812: 0x000d, 0x2813: 0x000d, 0x2814: 0x000d, 0x2815: 0x000d, 0x2816: 0x000d, 0x2817: 0x000d, - 0x2818: 0x000d, 0x2819: 0x000d, 0x281a: 0x000d, 0x281b: 0x000d, 0x281c: 0x000d, 0x281d: 0x000d, - 0x281e: 0x000d, 0x281f: 0x000d, 0x2820: 0x000d, 0x2821: 0x000d, 0x2822: 0x000d, 0x2823: 0x000d, - 0x2824: 0x000c, 0x2825: 0x000c, 0x2826: 0x000c, 0x2827: 0x000c, 0x2828: 0x000d, 0x2829: 0x000d, - 0x282a: 0x000d, 0x282b: 0x000d, 0x282c: 0x000d, 0x282d: 0x000d, 0x282e: 0x000d, 0x282f: 0x000d, - 0x2830: 0x0005, 0x2831: 0x0005, 0x2832: 0x0005, 0x2833: 0x0005, 0x2834: 0x0005, 0x2835: 0x0005, - 0x2836: 0x0005, 0x2837: 0x0005, 0x2838: 0x0005, 0x2839: 0x0005, 0x283a: 0x000d, 0x283b: 0x000d, - 0x283c: 0x000d, 0x283d: 0x000d, 0x283e: 0x000d, 0x283f: 0x000d, - // Block 0xa1, offset 0x2840 - 0x2840: 0x0001, 0x2841: 0x0001, 0x2842: 0x0001, 0x2843: 0x0001, 0x2844: 0x0001, 0x2845: 0x0001, - 0x2846: 0x0001, 0x2847: 0x0001, 0x2848: 0x0001, 0x2849: 0x0001, 0x284a: 0x0001, 0x284b: 0x0001, - 0x284c: 0x0001, 0x284d: 0x0001, 0x284e: 0x0001, 0x284f: 0x0001, 0x2850: 0x0001, 0x2851: 0x0001, - 0x2852: 0x0001, 0x2853: 0x0001, 0x2854: 0x0001, 0x2855: 0x0001, 0x2856: 0x0001, 0x2857: 0x0001, - 0x2858: 0x0001, 0x2859: 0x0001, 0x285a: 0x0001, 0x285b: 0x0001, 0x285c: 0x0001, 0x285d: 0x0001, - 0x285e: 0x0001, 0x285f: 0x0001, 0x2860: 0x0005, 0x2861: 0x0005, 0x2862: 0x0005, 0x2863: 0x0005, - 0x2864: 0x0005, 0x2865: 0x0005, 0x2866: 0x0005, 0x2867: 0x0005, 0x2868: 0x0005, 0x2869: 0x0005, - 0x286a: 0x0005, 0x286b: 0x0005, 0x286c: 0x0005, 0x286d: 0x0005, 0x286e: 0x0005, 0x286f: 0x0005, - 0x2870: 0x0005, 0x2871: 0x0005, 0x2872: 0x0005, 0x2873: 0x0005, 0x2874: 0x0005, 0x2875: 0x0005, - 0x2876: 0x0005, 0x2877: 0x0005, 0x2878: 0x0005, 0x2879: 0x0005, 0x287a: 0x0005, 0x287b: 0x0005, - 0x287c: 0x0005, 0x287d: 0x0005, 0x287e: 0x0005, 0x287f: 0x0001, - // Block 0xa2, offset 0x2880 - 0x2880: 0x0001, 0x2881: 0x0001, 0x2882: 0x0001, 0x2883: 0x0001, 0x2884: 0x0001, 0x2885: 0x0001, - 0x2886: 0x0001, 0x2887: 0x0001, 0x2888: 0x0001, 0x2889: 0x0001, 0x288a: 0x0001, 0x288b: 0x0001, - 0x288c: 0x0001, 0x288d: 0x0001, 0x288e: 0x0001, 0x288f: 0x0001, 0x2890: 0x0001, 0x2891: 0x0001, - 0x2892: 0x0001, 0x2893: 0x0001, 0x2894: 0x0001, 0x2895: 0x0001, 0x2896: 0x0001, 0x2897: 0x0001, - 0x2898: 0x0001, 0x2899: 0x0001, 0x289a: 0x0001, 0x289b: 0x0001, 0x289c: 0x0001, 0x289d: 0x0001, - 0x289e: 0x0001, 0x289f: 0x0001, 0x28a0: 0x0001, 0x28a1: 0x0001, 0x28a2: 0x0001, 0x28a3: 0x0001, - 0x28a4: 0x0001, 0x28a5: 0x0001, 0x28a6: 0x0001, 0x28a7: 0x0001, 0x28a8: 0x0001, 0x28a9: 0x0001, - 0x28aa: 0x0001, 0x28ab: 0x0001, 0x28ac: 0x0001, 0x28ad: 0x0001, 0x28ae: 0x0001, 0x28af: 0x0001, - 0x28b0: 0x000d, 0x28b1: 0x000d, 0x28b2: 0x000d, 0x28b3: 0x000d, 0x28b4: 0x000d, 0x28b5: 0x000d, - 0x28b6: 0x000d, 0x28b7: 0x000d, 0x28b8: 0x000d, 0x28b9: 0x000d, 0x28ba: 0x000d, 0x28bb: 0x000d, - 0x28bc: 0x000d, 0x28bd: 0x000d, 0x28be: 0x000d, 0x28bf: 0x000d, - // Block 0xa3, offset 0x28c0 - 0x28c0: 0x000d, 0x28c1: 0x000d, 0x28c2: 0x000d, 0x28c3: 0x000d, 0x28c4: 0x000d, 0x28c5: 0x000d, - 0x28c6: 0x000c, 0x28c7: 0x000c, 0x28c8: 0x000c, 0x28c9: 0x000c, 0x28ca: 0x000c, 0x28cb: 0x000c, - 0x28cc: 0x000c, 0x28cd: 0x000c, 0x28ce: 0x000c, 0x28cf: 0x000c, 0x28d0: 0x000c, 0x28d1: 0x000d, - 0x28d2: 0x000d, 0x28d3: 0x000d, 0x28d4: 0x000d, 0x28d5: 0x000d, 0x28d6: 0x000d, 0x28d7: 0x000d, - 0x28d8: 0x000d, 0x28d9: 0x000d, 0x28da: 0x000d, 0x28db: 0x000d, 0x28dc: 0x000d, 0x28dd: 0x000d, - 0x28de: 0x000d, 0x28df: 0x000d, 0x28e0: 0x000d, 0x28e1: 0x000d, 0x28e2: 0x000d, 0x28e3: 0x000d, - 0x28e4: 0x000d, 0x28e5: 0x000d, 0x28e6: 0x000d, 0x28e7: 0x000d, 0x28e8: 0x000d, 0x28e9: 0x000d, - 0x28ea: 0x000d, 0x28eb: 0x000d, 0x28ec: 0x000d, 0x28ed: 0x000d, 0x28ee: 0x000d, 0x28ef: 0x000d, - 0x28f0: 0x0001, 0x28f1: 0x0001, 0x28f2: 0x0001, 0x28f3: 0x0001, 0x28f4: 0x0001, 0x28f5: 0x0001, - 0x28f6: 0x0001, 0x28f7: 0x0001, 0x28f8: 0x0001, 0x28f9: 0x0001, 0x28fa: 0x0001, 0x28fb: 0x0001, - 0x28fc: 0x0001, 0x28fd: 0x0001, 0x28fe: 0x0001, 0x28ff: 0x0001, - // Block 0xa4, offset 0x2900 - 0x2901: 0x000c, - 0x2938: 0x000c, 0x2939: 0x000c, 0x293a: 0x000c, 0x293b: 0x000c, - 0x293c: 0x000c, 0x293d: 0x000c, 0x293e: 0x000c, 0x293f: 0x000c, - // Block 0xa5, offset 0x2940 - 0x2940: 0x000c, 0x2941: 0x000c, 0x2942: 0x000c, 0x2943: 0x000c, 0x2944: 0x000c, 0x2945: 0x000c, - 0x2946: 0x000c, - 0x2952: 0x000a, 0x2953: 0x000a, 0x2954: 0x000a, 0x2955: 0x000a, 0x2956: 0x000a, 0x2957: 0x000a, - 0x2958: 0x000a, 0x2959: 0x000a, 0x295a: 0x000a, 0x295b: 0x000a, 0x295c: 0x000a, 0x295d: 0x000a, - 0x295e: 0x000a, 0x295f: 0x000a, 0x2960: 0x000a, 0x2961: 0x000a, 0x2962: 0x000a, 0x2963: 0x000a, - 0x2964: 0x000a, 0x2965: 0x000a, - 0x297f: 0x000c, - // Block 0xa6, offset 0x2980 - 0x2980: 0x000c, 0x2981: 0x000c, - 0x29b3: 0x000c, 0x29b4: 0x000c, 0x29b5: 0x000c, - 0x29b6: 0x000c, 0x29b9: 0x000c, 0x29ba: 0x000c, - // Block 0xa7, offset 0x29c0 - 0x29c0: 0x000c, 0x29c1: 0x000c, 0x29c2: 0x000c, - 0x29e7: 0x000c, 0x29e8: 0x000c, 0x29e9: 0x000c, - 0x29ea: 0x000c, 0x29eb: 0x000c, 0x29ed: 0x000c, 0x29ee: 0x000c, 0x29ef: 0x000c, - 0x29f0: 0x000c, 0x29f1: 0x000c, 0x29f2: 0x000c, 0x29f3: 0x000c, 0x29f4: 0x000c, - // Block 0xa8, offset 0x2a00 - 0x2a33: 0x000c, - // Block 0xa9, offset 0x2a40 - 0x2a40: 0x000c, 0x2a41: 0x000c, - 0x2a76: 0x000c, 0x2a77: 0x000c, 0x2a78: 0x000c, 0x2a79: 0x000c, 0x2a7a: 0x000c, 0x2a7b: 0x000c, - 0x2a7c: 0x000c, 0x2a7d: 0x000c, 0x2a7e: 0x000c, - // Block 0xaa, offset 0x2a80 - 0x2a89: 0x000c, 0x2a8a: 0x000c, 0x2a8b: 0x000c, - 0x2a8c: 0x000c, - // Block 0xab, offset 0x2ac0 - 0x2aef: 0x000c, - 0x2af0: 0x000c, 0x2af1: 0x000c, 0x2af4: 0x000c, - 0x2af6: 0x000c, 0x2af7: 0x000c, - 0x2afe: 0x000c, - // Block 0xac, offset 0x2b00 - 0x2b1f: 0x000c, 0x2b23: 0x000c, - 0x2b24: 0x000c, 0x2b25: 0x000c, 0x2b26: 0x000c, 0x2b27: 0x000c, 0x2b28: 0x000c, 0x2b29: 0x000c, - 0x2b2a: 0x000c, - // Block 0xad, offset 0x2b40 - 0x2b40: 0x000c, - 0x2b66: 0x000c, 0x2b67: 0x000c, 0x2b68: 0x000c, 0x2b69: 0x000c, - 0x2b6a: 0x000c, 0x2b6b: 0x000c, 0x2b6c: 0x000c, - 0x2b70: 0x000c, 0x2b71: 0x000c, 0x2b72: 0x000c, 0x2b73: 0x000c, 0x2b74: 0x000c, - // Block 0xae, offset 0x2b80 - 0x2bb8: 0x000c, 0x2bb9: 0x000c, 0x2bba: 0x000c, 0x2bbb: 0x000c, - 0x2bbc: 0x000c, 0x2bbd: 0x000c, 0x2bbe: 0x000c, 0x2bbf: 0x000c, - // Block 0xaf, offset 0x2bc0 - 0x2bc2: 0x000c, 0x2bc3: 0x000c, 0x2bc4: 0x000c, - 0x2bc6: 0x000c, - 0x2bde: 0x000c, - // Block 0xb0, offset 0x2c00 - 0x2c33: 0x000c, 0x2c34: 0x000c, 0x2c35: 0x000c, - 0x2c36: 0x000c, 0x2c37: 0x000c, 0x2c38: 0x000c, 0x2c3a: 0x000c, - 0x2c3f: 0x000c, - // Block 0xb1, offset 0x2c40 - 0x2c40: 0x000c, 0x2c42: 0x000c, 0x2c43: 0x000c, - // Block 0xb2, offset 0x2c80 - 0x2cb2: 0x000c, 0x2cb3: 0x000c, 0x2cb4: 0x000c, 0x2cb5: 0x000c, - 0x2cbc: 0x000c, 0x2cbd: 0x000c, 0x2cbf: 0x000c, - // Block 0xb3, offset 0x2cc0 - 0x2cc0: 0x000c, - 0x2cdc: 0x000c, 0x2cdd: 0x000c, - // Block 0xb4, offset 0x2d00 - 0x2d33: 0x000c, 0x2d34: 0x000c, 0x2d35: 0x000c, - 0x2d36: 0x000c, 0x2d37: 0x000c, 0x2d38: 0x000c, 0x2d39: 0x000c, 0x2d3a: 0x000c, - 0x2d3d: 0x000c, 0x2d3f: 0x000c, - // Block 0xb5, offset 0x2d40 - 0x2d40: 0x000c, - 0x2d60: 0x000a, 0x2d61: 0x000a, 0x2d62: 0x000a, 0x2d63: 0x000a, - 0x2d64: 0x000a, 0x2d65: 0x000a, 0x2d66: 0x000a, 0x2d67: 0x000a, 0x2d68: 0x000a, 0x2d69: 0x000a, - 0x2d6a: 0x000a, 0x2d6b: 0x000a, 0x2d6c: 0x000a, - // Block 0xb6, offset 0x2d80 - 0x2dab: 0x000c, 0x2dad: 0x000c, - 0x2db0: 0x000c, 0x2db1: 0x000c, 0x2db2: 0x000c, 0x2db3: 0x000c, 0x2db4: 0x000c, 0x2db5: 0x000c, - 0x2db7: 0x000c, - // Block 0xb7, offset 0x2dc0 - 0x2ddd: 0x000c, - 0x2dde: 0x000c, 0x2ddf: 0x000c, 0x2de2: 0x000c, 0x2de3: 0x000c, - 0x2de4: 0x000c, 0x2de5: 0x000c, 0x2de7: 0x000c, 0x2de8: 0x000c, 0x2de9: 0x000c, - 0x2dea: 0x000c, 0x2deb: 0x000c, - // Block 0xb8, offset 0x2e00 - 0x2e2f: 0x000c, - 0x2e30: 0x000c, 0x2e31: 0x000c, 0x2e32: 0x000c, 0x2e33: 0x000c, 0x2e34: 0x000c, 0x2e35: 0x000c, - 0x2e36: 0x000c, 0x2e37: 0x000c, 0x2e39: 0x000c, 0x2e3a: 0x000c, - // Block 0xb9, offset 0x2e40 - 0x2e54: 0x000c, 0x2e55: 0x000c, 0x2e56: 0x000c, 0x2e57: 0x000c, - 0x2e5a: 0x000c, 0x2e5b: 0x000c, - 0x2e60: 0x000c, - // Block 0xba, offset 0x2e80 - 0x2e81: 0x000c, 0x2e82: 0x000c, 0x2e83: 0x000c, 0x2e84: 0x000c, 0x2e85: 0x000c, - 0x2e86: 0x000c, 0x2e89: 0x000c, 0x2e8a: 0x000c, - 0x2eb3: 0x000c, 0x2eb4: 0x000c, 0x2eb5: 0x000c, - 0x2eb6: 0x000c, 0x2eb7: 0x000c, 0x2eb8: 0x000c, 0x2ebb: 0x000c, - 0x2ebc: 0x000c, 0x2ebd: 0x000c, 0x2ebe: 0x000c, - // Block 0xbb, offset 0x2ec0 - 0x2ec7: 0x000c, - 0x2ed1: 0x000c, - 0x2ed2: 0x000c, 0x2ed3: 0x000c, 0x2ed4: 0x000c, 0x2ed5: 0x000c, 0x2ed6: 0x000c, - 0x2ed9: 0x000c, 0x2eda: 0x000c, 0x2edb: 0x000c, - // Block 0xbc, offset 0x2f00 - 0x2f0a: 0x000c, 0x2f0b: 0x000c, - 0x2f0c: 0x000c, 0x2f0d: 0x000c, 0x2f0e: 0x000c, 0x2f0f: 0x000c, 0x2f10: 0x000c, 0x2f11: 0x000c, - 0x2f12: 0x000c, 0x2f13: 0x000c, 0x2f14: 0x000c, 0x2f15: 0x000c, 0x2f16: 0x000c, - 0x2f18: 0x000c, 0x2f19: 0x000c, - // Block 0xbd, offset 0x2f40 - 0x2f70: 0x000c, 0x2f71: 0x000c, 0x2f72: 0x000c, 0x2f73: 0x000c, 0x2f74: 0x000c, 0x2f75: 0x000c, - 0x2f76: 0x000c, 0x2f78: 0x000c, 0x2f79: 0x000c, 0x2f7a: 0x000c, 0x2f7b: 0x000c, - 0x2f7c: 0x000c, 0x2f7d: 0x000c, - // Block 0xbe, offset 0x2f80 - 0x2f92: 0x000c, 0x2f93: 0x000c, 0x2f94: 0x000c, 0x2f95: 0x000c, 0x2f96: 0x000c, 0x2f97: 0x000c, - 0x2f98: 0x000c, 0x2f99: 0x000c, 0x2f9a: 0x000c, 0x2f9b: 0x000c, 0x2f9c: 0x000c, 0x2f9d: 0x000c, - 0x2f9e: 0x000c, 0x2f9f: 0x000c, 0x2fa0: 0x000c, 0x2fa1: 0x000c, 0x2fa2: 0x000c, 0x2fa3: 0x000c, - 0x2fa4: 0x000c, 0x2fa5: 0x000c, 0x2fa6: 0x000c, 0x2fa7: 0x000c, - 0x2faa: 0x000c, 0x2fab: 0x000c, 0x2fac: 0x000c, 0x2fad: 0x000c, 0x2fae: 0x000c, 0x2faf: 0x000c, - 0x2fb0: 0x000c, 0x2fb2: 0x000c, 0x2fb3: 0x000c, 0x2fb5: 0x000c, - 0x2fb6: 0x000c, - // Block 0xbf, offset 0x2fc0 - 0x2ff1: 0x000c, 0x2ff2: 0x000c, 0x2ff3: 0x000c, 0x2ff4: 0x000c, 0x2ff5: 0x000c, - 0x2ff6: 0x000c, 0x2ffa: 0x000c, - 0x2ffc: 0x000c, 0x2ffd: 0x000c, 0x2fff: 0x000c, - // Block 0xc0, offset 0x3000 - 0x3000: 0x000c, 0x3001: 0x000c, 0x3002: 0x000c, 0x3003: 0x000c, 0x3004: 0x000c, 0x3005: 0x000c, - 0x3007: 0x000c, - // Block 0xc1, offset 0x3040 - 0x3050: 0x000c, 0x3051: 0x000c, - 0x3055: 0x000c, 0x3057: 0x000c, - // Block 0xc2, offset 0x3080 - 0x30b3: 0x000c, 0x30b4: 0x000c, - // Block 0xc3, offset 0x30c0 - 0x30d5: 0x000a, 0x30d6: 0x000a, 0x30d7: 0x000a, - 0x30d8: 0x000a, 0x30d9: 0x000a, 0x30da: 0x000a, 0x30db: 0x000a, 0x30dc: 0x000a, 0x30dd: 0x0004, - 0x30de: 0x0004, 0x30df: 0x0004, 0x30e0: 0x0004, 0x30e1: 0x000a, 0x30e2: 0x000a, 0x30e3: 0x000a, - 0x30e4: 0x000a, 0x30e5: 0x000a, 0x30e6: 0x000a, 0x30e7: 0x000a, 0x30e8: 0x000a, 0x30e9: 0x000a, - 0x30ea: 0x000a, 0x30eb: 0x000a, 0x30ec: 0x000a, 0x30ed: 0x000a, 0x30ee: 0x000a, 0x30ef: 0x000a, - 0x30f0: 0x000a, 0x30f1: 0x000a, - // Block 0xc4, offset 0x3100 - 0x3130: 0x000c, 0x3131: 0x000c, 0x3132: 0x000c, 0x3133: 0x000c, 0x3134: 0x000c, - // Block 0xc5, offset 0x3140 - 0x3170: 0x000c, 0x3171: 0x000c, 0x3172: 0x000c, 0x3173: 0x000c, 0x3174: 0x000c, 0x3175: 0x000c, - 0x3176: 0x000c, - // Block 0xc6, offset 0x3180 - 0x318f: 0x000c, - // Block 0xc7, offset 0x31c0 - 0x31cf: 0x000c, 0x31d0: 0x000c, 0x31d1: 0x000c, - 0x31d2: 0x000c, - // Block 0xc8, offset 0x3200 - 0x3222: 0x000a, - // Block 0xc9, offset 0x3240 - 0x325d: 0x000c, - 0x325e: 0x000c, 0x3260: 0x000b, 0x3261: 0x000b, 0x3262: 0x000b, 0x3263: 0x000b, - // Block 0xca, offset 0x3280 - 0x32a7: 0x000c, 0x32a8: 0x000c, 0x32a9: 0x000c, - 0x32b3: 0x000b, 0x32b4: 0x000b, 0x32b5: 0x000b, - 0x32b6: 0x000b, 0x32b7: 0x000b, 0x32b8: 0x000b, 0x32b9: 0x000b, 0x32ba: 0x000b, 0x32bb: 0x000c, - 0x32bc: 0x000c, 0x32bd: 0x000c, 0x32be: 0x000c, 0x32bf: 0x000c, - // Block 0xcb, offset 0x32c0 - 0x32c0: 0x000c, 0x32c1: 0x000c, 0x32c2: 0x000c, 0x32c5: 0x000c, - 0x32c6: 0x000c, 0x32c7: 0x000c, 0x32c8: 0x000c, 0x32c9: 0x000c, 0x32ca: 0x000c, 0x32cb: 0x000c, - 0x32ea: 0x000c, 0x32eb: 0x000c, 0x32ec: 0x000c, 0x32ed: 0x000c, - // Block 0xcc, offset 0x3300 - 0x3300: 0x000a, 0x3301: 0x000a, 0x3302: 0x000c, 0x3303: 0x000c, 0x3304: 0x000c, 0x3305: 0x000a, - // Block 0xcd, offset 0x3340 - 0x3340: 0x000a, 0x3341: 0x000a, 0x3342: 0x000a, 0x3343: 0x000a, 0x3344: 0x000a, 0x3345: 0x000a, - 0x3346: 0x000a, 0x3347: 0x000a, 0x3348: 0x000a, 0x3349: 0x000a, 0x334a: 0x000a, 0x334b: 0x000a, - 0x334c: 0x000a, 0x334d: 0x000a, 0x334e: 0x000a, 0x334f: 0x000a, 0x3350: 0x000a, 0x3351: 0x000a, - 0x3352: 0x000a, 0x3353: 0x000a, 0x3354: 0x000a, 0x3355: 0x000a, 0x3356: 0x000a, - // Block 0xce, offset 0x3380 - 0x339b: 0x000a, - // Block 0xcf, offset 0x33c0 - 0x33d5: 0x000a, - // Block 0xd0, offset 0x3400 - 0x340f: 0x000a, - // Block 0xd1, offset 0x3440 - 0x3449: 0x000a, - // Block 0xd2, offset 0x3480 - 0x3483: 0x000a, - 0x348e: 0x0002, 0x348f: 0x0002, 0x3490: 0x0002, 0x3491: 0x0002, - 0x3492: 0x0002, 0x3493: 0x0002, 0x3494: 0x0002, 0x3495: 0x0002, 0x3496: 0x0002, 0x3497: 0x0002, - 0x3498: 0x0002, 0x3499: 0x0002, 0x349a: 0x0002, 0x349b: 0x0002, 0x349c: 0x0002, 0x349d: 0x0002, - 0x349e: 0x0002, 0x349f: 0x0002, 0x34a0: 0x0002, 0x34a1: 0x0002, 0x34a2: 0x0002, 0x34a3: 0x0002, - 0x34a4: 0x0002, 0x34a5: 0x0002, 0x34a6: 0x0002, 0x34a7: 0x0002, 0x34a8: 0x0002, 0x34a9: 0x0002, - 0x34aa: 0x0002, 0x34ab: 0x0002, 0x34ac: 0x0002, 0x34ad: 0x0002, 0x34ae: 0x0002, 0x34af: 0x0002, - 0x34b0: 0x0002, 0x34b1: 0x0002, 0x34b2: 0x0002, 0x34b3: 0x0002, 0x34b4: 0x0002, 0x34b5: 0x0002, - 0x34b6: 0x0002, 0x34b7: 0x0002, 0x34b8: 0x0002, 0x34b9: 0x0002, 0x34ba: 0x0002, 0x34bb: 0x0002, - 0x34bc: 0x0002, 0x34bd: 0x0002, 0x34be: 0x0002, 0x34bf: 0x0002, - // Block 0xd3, offset 0x34c0 - 0x34c0: 0x000c, 0x34c1: 0x000c, 0x34c2: 0x000c, 0x34c3: 0x000c, 0x34c4: 0x000c, 0x34c5: 0x000c, - 0x34c6: 0x000c, 0x34c7: 0x000c, 0x34c8: 0x000c, 0x34c9: 0x000c, 0x34ca: 0x000c, 0x34cb: 0x000c, - 0x34cc: 0x000c, 0x34cd: 0x000c, 0x34ce: 0x000c, 0x34cf: 0x000c, 0x34d0: 0x000c, 0x34d1: 0x000c, - 0x34d2: 0x000c, 0x34d3: 0x000c, 0x34d4: 0x000c, 0x34d5: 0x000c, 0x34d6: 0x000c, 0x34d7: 0x000c, - 0x34d8: 0x000c, 0x34d9: 0x000c, 0x34da: 0x000c, 0x34db: 0x000c, 0x34dc: 0x000c, 0x34dd: 0x000c, - 0x34de: 0x000c, 0x34df: 0x000c, 0x34e0: 0x000c, 0x34e1: 0x000c, 0x34e2: 0x000c, 0x34e3: 0x000c, - 0x34e4: 0x000c, 0x34e5: 0x000c, 0x34e6: 0x000c, 0x34e7: 0x000c, 0x34e8: 0x000c, 0x34e9: 0x000c, - 0x34ea: 0x000c, 0x34eb: 0x000c, 0x34ec: 0x000c, 0x34ed: 0x000c, 0x34ee: 0x000c, 0x34ef: 0x000c, - 0x34f0: 0x000c, 0x34f1: 0x000c, 0x34f2: 0x000c, 0x34f3: 0x000c, 0x34f4: 0x000c, 0x34f5: 0x000c, - 0x34f6: 0x000c, 0x34fb: 0x000c, - 0x34fc: 0x000c, 0x34fd: 0x000c, 0x34fe: 0x000c, 0x34ff: 0x000c, - // Block 0xd4, offset 0x3500 - 0x3500: 0x000c, 0x3501: 0x000c, 0x3502: 0x000c, 0x3503: 0x000c, 0x3504: 0x000c, 0x3505: 0x000c, - 0x3506: 0x000c, 0x3507: 0x000c, 0x3508: 0x000c, 0x3509: 0x000c, 0x350a: 0x000c, 0x350b: 0x000c, - 0x350c: 0x000c, 0x350d: 0x000c, 0x350e: 0x000c, 0x350f: 0x000c, 0x3510: 0x000c, 0x3511: 0x000c, - 0x3512: 0x000c, 0x3513: 0x000c, 0x3514: 0x000c, 0x3515: 0x000c, 0x3516: 0x000c, 0x3517: 0x000c, - 0x3518: 0x000c, 0x3519: 0x000c, 0x351a: 0x000c, 0x351b: 0x000c, 0x351c: 0x000c, 0x351d: 0x000c, - 0x351e: 0x000c, 0x351f: 0x000c, 0x3520: 0x000c, 0x3521: 0x000c, 0x3522: 0x000c, 0x3523: 0x000c, - 0x3524: 0x000c, 0x3525: 0x000c, 0x3526: 0x000c, 0x3527: 0x000c, 0x3528: 0x000c, 0x3529: 0x000c, - 0x352a: 0x000c, 0x352b: 0x000c, 0x352c: 0x000c, - 0x3535: 0x000c, - // Block 0xd5, offset 0x3540 - 0x3544: 0x000c, - 0x355b: 0x000c, 0x355c: 0x000c, 0x355d: 0x000c, - 0x355e: 0x000c, 0x355f: 0x000c, 0x3561: 0x000c, 0x3562: 0x000c, 0x3563: 0x000c, - 0x3564: 0x000c, 0x3565: 0x000c, 0x3566: 0x000c, 0x3567: 0x000c, 0x3568: 0x000c, 0x3569: 0x000c, - 0x356a: 0x000c, 0x356b: 0x000c, 0x356c: 0x000c, 0x356d: 0x000c, 0x356e: 0x000c, 0x356f: 0x000c, - // Block 0xd6, offset 0x3580 - 0x3580: 0x000c, 0x3581: 0x000c, 0x3582: 0x000c, 0x3583: 0x000c, 0x3584: 0x000c, 0x3585: 0x000c, - 0x3586: 0x000c, 0x3588: 0x000c, 0x3589: 0x000c, 0x358a: 0x000c, 0x358b: 0x000c, - 0x358c: 0x000c, 0x358d: 0x000c, 0x358e: 0x000c, 0x358f: 0x000c, 0x3590: 0x000c, 0x3591: 0x000c, - 0x3592: 0x000c, 0x3593: 0x000c, 0x3594: 0x000c, 0x3595: 0x000c, 0x3596: 0x000c, 0x3597: 0x000c, - 0x3598: 0x000c, 0x359b: 0x000c, 0x359c: 0x000c, 0x359d: 0x000c, - 0x359e: 0x000c, 0x359f: 0x000c, 0x35a0: 0x000c, 0x35a1: 0x000c, 0x35a3: 0x000c, - 0x35a4: 0x000c, 0x35a6: 0x000c, 0x35a7: 0x000c, 0x35a8: 0x000c, 0x35a9: 0x000c, - 0x35aa: 0x000c, - // Block 0xd7, offset 0x35c0 - 0x35ec: 0x000c, 0x35ed: 0x000c, 0x35ee: 0x000c, 0x35ef: 0x000c, - 0x35ff: 0x0004, - // Block 0xd8, offset 0x3600 - 0x3600: 0x0001, 0x3601: 0x0001, 0x3602: 0x0001, 0x3603: 0x0001, 0x3604: 0x0001, 0x3605: 0x0001, - 0x3606: 0x0001, 0x3607: 0x0001, 0x3608: 0x0001, 0x3609: 0x0001, 0x360a: 0x0001, 0x360b: 0x0001, - 0x360c: 0x0001, 0x360d: 0x0001, 0x360e: 0x0001, 0x360f: 0x0001, 0x3610: 0x000c, 0x3611: 0x000c, - 0x3612: 0x000c, 0x3613: 0x000c, 0x3614: 0x000c, 0x3615: 0x000c, 0x3616: 0x000c, 0x3617: 0x0001, - 0x3618: 0x0001, 0x3619: 0x0001, 0x361a: 0x0001, 0x361b: 0x0001, 0x361c: 0x0001, 0x361d: 0x0001, - 0x361e: 0x0001, 0x361f: 0x0001, 0x3620: 0x0001, 0x3621: 0x0001, 0x3622: 0x0001, 0x3623: 0x0001, - 0x3624: 0x0001, 0x3625: 0x0001, 0x3626: 0x0001, 0x3627: 0x0001, 0x3628: 0x0001, 0x3629: 0x0001, - 0x362a: 0x0001, 0x362b: 0x0001, 0x362c: 0x0001, 0x362d: 0x0001, 0x362e: 0x0001, 0x362f: 0x0001, - 0x3630: 0x0001, 0x3631: 0x0001, 0x3632: 0x0001, 0x3633: 0x0001, 0x3634: 0x0001, 0x3635: 0x0001, - 0x3636: 0x0001, 0x3637: 0x0001, 0x3638: 0x0001, 0x3639: 0x0001, 0x363a: 0x0001, 0x363b: 0x0001, - 0x363c: 0x0001, 0x363d: 0x0001, 0x363e: 0x0001, 0x363f: 0x0001, - // Block 0xd9, offset 0x3640 - 0x3640: 0x0001, 0x3641: 0x0001, 0x3642: 0x0001, 0x3643: 0x0001, 0x3644: 0x000c, 0x3645: 0x000c, - 0x3646: 0x000c, 0x3647: 0x000c, 0x3648: 0x000c, 0x3649: 0x000c, 0x364a: 0x000c, 0x364b: 0x0001, - 0x364c: 0x0001, 0x364d: 0x0001, 0x364e: 0x0001, 0x364f: 0x0001, 0x3650: 0x0001, 0x3651: 0x0001, - 0x3652: 0x0001, 0x3653: 0x0001, 0x3654: 0x0001, 0x3655: 0x0001, 0x3656: 0x0001, 0x3657: 0x0001, - 0x3658: 0x0001, 0x3659: 0x0001, 0x365a: 0x0001, 0x365b: 0x0001, 0x365c: 0x0001, 0x365d: 0x0001, - 0x365e: 0x0001, 0x365f: 0x0001, 0x3660: 0x0001, 0x3661: 0x0001, 0x3662: 0x0001, 0x3663: 0x0001, - 0x3664: 0x0001, 0x3665: 0x0001, 0x3666: 0x0001, 0x3667: 0x0001, 0x3668: 0x0001, 0x3669: 0x0001, - 0x366a: 0x0001, 0x366b: 0x0001, 0x366c: 0x0001, 0x366d: 0x0001, 0x366e: 0x0001, 0x366f: 0x0001, - 0x3670: 0x0001, 0x3671: 0x0001, 0x3672: 0x0001, 0x3673: 0x0001, 0x3674: 0x0001, 0x3675: 0x0001, - 0x3676: 0x0001, 0x3677: 0x0001, 0x3678: 0x0001, 0x3679: 0x0001, 0x367a: 0x0001, 0x367b: 0x0001, - 0x367c: 0x0001, 0x367d: 0x0001, 0x367e: 0x0001, 0x367f: 0x0001, - // Block 0xda, offset 0x3680 - 0x3680: 0x000d, 0x3681: 0x000d, 0x3682: 0x000d, 0x3683: 0x000d, 0x3684: 0x000d, 0x3685: 0x000d, - 0x3686: 0x000d, 0x3687: 0x000d, 0x3688: 0x000d, 0x3689: 0x000d, 0x368a: 0x000d, 0x368b: 0x000d, - 0x368c: 0x000d, 0x368d: 0x000d, 0x368e: 0x000d, 0x368f: 0x000d, 0x3690: 0x0001, 0x3691: 0x0001, - 0x3692: 0x0001, 0x3693: 0x0001, 0x3694: 0x0001, 0x3695: 0x0001, 0x3696: 0x0001, 0x3697: 0x0001, - 0x3698: 0x0001, 0x3699: 0x0001, 0x369a: 0x0001, 0x369b: 0x0001, 0x369c: 0x0001, 0x369d: 0x0001, - 0x369e: 0x0001, 0x369f: 0x0001, 0x36a0: 0x0001, 0x36a1: 0x0001, 0x36a2: 0x0001, 0x36a3: 0x0001, - 0x36a4: 0x0001, 0x36a5: 0x0001, 0x36a6: 0x0001, 0x36a7: 0x0001, 0x36a8: 0x0001, 0x36a9: 0x0001, - 0x36aa: 0x0001, 0x36ab: 0x0001, 0x36ac: 0x0001, 0x36ad: 0x0001, 0x36ae: 0x0001, 0x36af: 0x0001, - 0x36b0: 0x0001, 0x36b1: 0x0001, 0x36b2: 0x0001, 0x36b3: 0x0001, 0x36b4: 0x0001, 0x36b5: 0x0001, - 0x36b6: 0x0001, 0x36b7: 0x0001, 0x36b8: 0x0001, 0x36b9: 0x0001, 0x36ba: 0x0001, 0x36bb: 0x0001, - 0x36bc: 0x0001, 0x36bd: 0x0001, 0x36be: 0x0001, 0x36bf: 0x0001, - // Block 0xdb, offset 0x36c0 - 0x36c0: 0x000d, 0x36c1: 0x000d, 0x36c2: 0x000d, 0x36c3: 0x000d, 0x36c4: 0x000d, 0x36c5: 0x000d, - 0x36c6: 0x000d, 0x36c7: 0x000d, 0x36c8: 0x000d, 0x36c9: 0x000d, 0x36ca: 0x000d, 0x36cb: 0x000d, - 0x36cc: 0x000d, 0x36cd: 0x000d, 0x36ce: 0x000d, 0x36cf: 0x000d, 0x36d0: 0x000d, 0x36d1: 0x000d, - 0x36d2: 0x000d, 0x36d3: 0x000d, 0x36d4: 0x000d, 0x36d5: 0x000d, 0x36d6: 0x000d, 0x36d7: 0x000d, - 0x36d8: 0x000d, 0x36d9: 0x000d, 0x36da: 0x000d, 0x36db: 0x000d, 0x36dc: 0x000d, 0x36dd: 0x000d, - 0x36de: 0x000d, 0x36df: 0x000d, 0x36e0: 0x000d, 0x36e1: 0x000d, 0x36e2: 0x000d, 0x36e3: 0x000d, - 0x36e4: 0x000d, 0x36e5: 0x000d, 0x36e6: 0x000d, 0x36e7: 0x000d, 0x36e8: 0x000d, 0x36e9: 0x000d, - 0x36ea: 0x000d, 0x36eb: 0x000d, 0x36ec: 0x000d, 0x36ed: 0x000d, 0x36ee: 0x000d, 0x36ef: 0x000d, - 0x36f0: 0x000a, 0x36f1: 0x000a, 0x36f2: 0x000d, 0x36f3: 0x000d, 0x36f4: 0x000d, 0x36f5: 0x000d, - 0x36f6: 0x000d, 0x36f7: 0x000d, 0x36f8: 0x000d, 0x36f9: 0x000d, 0x36fa: 0x000d, 0x36fb: 0x000d, - 0x36fc: 0x000d, 0x36fd: 0x000d, 0x36fe: 0x000d, 0x36ff: 0x000d, - // Block 0xdc, offset 0x3700 - 0x3700: 0x000a, 0x3701: 0x000a, 0x3702: 0x000a, 0x3703: 0x000a, 0x3704: 0x000a, 0x3705: 0x000a, - 0x3706: 0x000a, 0x3707: 0x000a, 0x3708: 0x000a, 0x3709: 0x000a, 0x370a: 0x000a, 0x370b: 0x000a, - 0x370c: 0x000a, 0x370d: 0x000a, 0x370e: 0x000a, 0x370f: 0x000a, 0x3710: 0x000a, 0x3711: 0x000a, - 0x3712: 0x000a, 0x3713: 0x000a, 0x3714: 0x000a, 0x3715: 0x000a, 0x3716: 0x000a, 0x3717: 0x000a, - 0x3718: 0x000a, 0x3719: 0x000a, 0x371a: 0x000a, 0x371b: 0x000a, 0x371c: 0x000a, 0x371d: 0x000a, - 0x371e: 0x000a, 0x371f: 0x000a, 0x3720: 0x000a, 0x3721: 0x000a, 0x3722: 0x000a, 0x3723: 0x000a, - 0x3724: 0x000a, 0x3725: 0x000a, 0x3726: 0x000a, 0x3727: 0x000a, 0x3728: 0x000a, 0x3729: 0x000a, - 0x372a: 0x000a, 0x372b: 0x000a, - 0x3730: 0x000a, 0x3731: 0x000a, 0x3732: 0x000a, 0x3733: 0x000a, 0x3734: 0x000a, 0x3735: 0x000a, - 0x3736: 0x000a, 0x3737: 0x000a, 0x3738: 0x000a, 0x3739: 0x000a, 0x373a: 0x000a, 0x373b: 0x000a, - 0x373c: 0x000a, 0x373d: 0x000a, 0x373e: 0x000a, 0x373f: 0x000a, - // Block 0xdd, offset 0x3740 - 0x3740: 0x000a, 0x3741: 0x000a, 0x3742: 0x000a, 0x3743: 0x000a, 0x3744: 0x000a, 0x3745: 0x000a, - 0x3746: 0x000a, 0x3747: 0x000a, 0x3748: 0x000a, 0x3749: 0x000a, 0x374a: 0x000a, 0x374b: 0x000a, - 0x374c: 0x000a, 0x374d: 0x000a, 0x374e: 0x000a, 0x374f: 0x000a, 0x3750: 0x000a, 0x3751: 0x000a, - 0x3752: 0x000a, 0x3753: 0x000a, - 0x3760: 0x000a, 0x3761: 0x000a, 0x3762: 0x000a, 0x3763: 0x000a, - 0x3764: 0x000a, 0x3765: 0x000a, 0x3766: 0x000a, 0x3767: 0x000a, 0x3768: 0x000a, 0x3769: 0x000a, - 0x376a: 0x000a, 0x376b: 0x000a, 0x376c: 0x000a, 0x376d: 0x000a, 0x376e: 0x000a, - 0x3771: 0x000a, 0x3772: 0x000a, 0x3773: 0x000a, 0x3774: 0x000a, 0x3775: 0x000a, - 0x3776: 0x000a, 0x3777: 0x000a, 0x3778: 0x000a, 0x3779: 0x000a, 0x377a: 0x000a, 0x377b: 0x000a, - 0x377c: 0x000a, 0x377d: 0x000a, 0x377e: 0x000a, 0x377f: 0x000a, - // Block 0xde, offset 0x3780 - 0x3781: 0x000a, 0x3782: 0x000a, 0x3783: 0x000a, 0x3784: 0x000a, 0x3785: 0x000a, - 0x3786: 0x000a, 0x3787: 0x000a, 0x3788: 0x000a, 0x3789: 0x000a, 0x378a: 0x000a, 0x378b: 0x000a, - 0x378c: 0x000a, 0x378d: 0x000a, 0x378e: 0x000a, 0x378f: 0x000a, 0x3791: 0x000a, - 0x3792: 0x000a, 0x3793: 0x000a, 0x3794: 0x000a, 0x3795: 0x000a, 0x3796: 0x000a, 0x3797: 0x000a, - 0x3798: 0x000a, 0x3799: 0x000a, 0x379a: 0x000a, 0x379b: 0x000a, 0x379c: 0x000a, 0x379d: 0x000a, - 0x379e: 0x000a, 0x379f: 0x000a, 0x37a0: 0x000a, 0x37a1: 0x000a, 0x37a2: 0x000a, 0x37a3: 0x000a, - 0x37a4: 0x000a, 0x37a5: 0x000a, 0x37a6: 0x000a, 0x37a7: 0x000a, 0x37a8: 0x000a, 0x37a9: 0x000a, - 0x37aa: 0x000a, 0x37ab: 0x000a, 0x37ac: 0x000a, 0x37ad: 0x000a, 0x37ae: 0x000a, 0x37af: 0x000a, - 0x37b0: 0x000a, 0x37b1: 0x000a, 0x37b2: 0x000a, 0x37b3: 0x000a, 0x37b4: 0x000a, 0x37b5: 0x000a, - // Block 0xdf, offset 0x37c0 - 0x37c0: 0x0002, 0x37c1: 0x0002, 0x37c2: 0x0002, 0x37c3: 0x0002, 0x37c4: 0x0002, 0x37c5: 0x0002, - 0x37c6: 0x0002, 0x37c7: 0x0002, 0x37c8: 0x0002, 0x37c9: 0x0002, 0x37ca: 0x0002, 0x37cb: 0x000a, - 0x37cc: 0x000a, - 0x37ef: 0x000a, - // Block 0xe0, offset 0x3800 - 0x382a: 0x000a, 0x382b: 0x000a, 0x382c: 0x000a, - // Block 0xe1, offset 0x3840 - 0x3860: 0x000a, 0x3861: 0x000a, 0x3862: 0x000a, 0x3863: 0x000a, - 0x3864: 0x000a, 0x3865: 0x000a, - // Block 0xe2, offset 0x3880 - 0x3880: 0x000a, 0x3881: 0x000a, 0x3882: 0x000a, 0x3883: 0x000a, 0x3884: 0x000a, 0x3885: 0x000a, - 0x3886: 0x000a, 0x3887: 0x000a, 0x3888: 0x000a, 0x3889: 0x000a, 0x388a: 0x000a, 0x388b: 0x000a, - 0x388c: 0x000a, 0x388d: 0x000a, 0x388e: 0x000a, 0x388f: 0x000a, 0x3890: 0x000a, 0x3891: 0x000a, - 0x3892: 0x000a, 0x3893: 0x000a, 0x3894: 0x000a, 0x3895: 0x000a, - 0x38a0: 0x000a, 0x38a1: 0x000a, 0x38a2: 0x000a, 0x38a3: 0x000a, - 0x38a4: 0x000a, 0x38a5: 0x000a, 0x38a6: 0x000a, 0x38a7: 0x000a, 0x38a8: 0x000a, 0x38a9: 0x000a, - 0x38aa: 0x000a, 0x38ab: 0x000a, 0x38ac: 0x000a, - 0x38b0: 0x000a, 0x38b1: 0x000a, 0x38b2: 0x000a, 0x38b3: 0x000a, 0x38b4: 0x000a, 0x38b5: 0x000a, - 0x38b6: 0x000a, 0x38b7: 0x000a, 0x38b8: 0x000a, 0x38b9: 0x000a, 0x38ba: 0x000a, - // Block 0xe3, offset 0x38c0 - 0x38c0: 0x000a, 0x38c1: 0x000a, 0x38c2: 0x000a, 0x38c3: 0x000a, 0x38c4: 0x000a, 0x38c5: 0x000a, - 0x38c6: 0x000a, 0x38c7: 0x000a, 0x38c8: 0x000a, 0x38c9: 0x000a, 0x38ca: 0x000a, 0x38cb: 0x000a, - 0x38cc: 0x000a, 0x38cd: 0x000a, 0x38ce: 0x000a, 0x38cf: 0x000a, 0x38d0: 0x000a, 0x38d1: 0x000a, - 0x38d2: 0x000a, 0x38d3: 0x000a, 0x38d4: 0x000a, 0x38d5: 0x000a, 0x38d6: 0x000a, 0x38d7: 0x000a, - 0x38d8: 0x000a, - 0x38e0: 0x000a, 0x38e1: 0x000a, 0x38e2: 0x000a, 0x38e3: 0x000a, - 0x38e4: 0x000a, 0x38e5: 0x000a, 0x38e6: 0x000a, 0x38e7: 0x000a, 0x38e8: 0x000a, 0x38e9: 0x000a, - 0x38ea: 0x000a, 0x38eb: 0x000a, - // Block 0xe4, offset 0x3900 - 0x3900: 0x000a, 0x3901: 0x000a, 0x3902: 0x000a, 0x3903: 0x000a, 0x3904: 0x000a, 0x3905: 0x000a, - 0x3906: 0x000a, 0x3907: 0x000a, 0x3908: 0x000a, 0x3909: 0x000a, 0x390a: 0x000a, 0x390b: 0x000a, - 0x3910: 0x000a, 0x3911: 0x000a, - 0x3912: 0x000a, 0x3913: 0x000a, 0x3914: 0x000a, 0x3915: 0x000a, 0x3916: 0x000a, 0x3917: 0x000a, - 0x3918: 0x000a, 0x3919: 0x000a, 0x391a: 0x000a, 0x391b: 0x000a, 0x391c: 0x000a, 0x391d: 0x000a, - 0x391e: 0x000a, 0x391f: 0x000a, 0x3920: 0x000a, 0x3921: 0x000a, 0x3922: 0x000a, 0x3923: 0x000a, - 0x3924: 0x000a, 0x3925: 0x000a, 0x3926: 0x000a, 0x3927: 0x000a, 0x3928: 0x000a, 0x3929: 0x000a, - 0x392a: 0x000a, 0x392b: 0x000a, 0x392c: 0x000a, 0x392d: 0x000a, 0x392e: 0x000a, 0x392f: 0x000a, - 0x3930: 0x000a, 0x3931: 0x000a, 0x3932: 0x000a, 0x3933: 0x000a, 0x3934: 0x000a, 0x3935: 0x000a, - 0x3936: 0x000a, 0x3937: 0x000a, 0x3938: 0x000a, 0x3939: 0x000a, 0x393a: 0x000a, 0x393b: 0x000a, - 0x393c: 0x000a, 0x393d: 0x000a, 0x393e: 0x000a, 0x393f: 0x000a, - // Block 0xe5, offset 0x3940 - 0x3940: 0x000a, 0x3941: 0x000a, 0x3942: 0x000a, 0x3943: 0x000a, 0x3944: 0x000a, 0x3945: 0x000a, - 0x3946: 0x000a, 0x3947: 0x000a, - 0x3950: 0x000a, 0x3951: 0x000a, - 0x3952: 0x000a, 0x3953: 0x000a, 0x3954: 0x000a, 0x3955: 0x000a, 0x3956: 0x000a, 0x3957: 0x000a, - 0x3958: 0x000a, 0x3959: 0x000a, - 0x3960: 0x000a, 0x3961: 0x000a, 0x3962: 0x000a, 0x3963: 0x000a, - 0x3964: 0x000a, 0x3965: 0x000a, 0x3966: 0x000a, 0x3967: 0x000a, 0x3968: 0x000a, 0x3969: 0x000a, - 0x396a: 0x000a, 0x396b: 0x000a, 0x396c: 0x000a, 0x396d: 0x000a, 0x396e: 0x000a, 0x396f: 0x000a, - 0x3970: 0x000a, 0x3971: 0x000a, 0x3972: 0x000a, 0x3973: 0x000a, 0x3974: 0x000a, 0x3975: 0x000a, - 0x3976: 0x000a, 0x3977: 0x000a, 0x3978: 0x000a, 0x3979: 0x000a, 0x397a: 0x000a, 0x397b: 0x000a, - 0x397c: 0x000a, 0x397d: 0x000a, 0x397e: 0x000a, 0x397f: 0x000a, - // Block 0xe6, offset 0x3980 - 0x3980: 0x000a, 0x3981: 0x000a, 0x3982: 0x000a, 0x3983: 0x000a, 0x3984: 0x000a, 0x3985: 0x000a, - 0x3986: 0x000a, 0x3987: 0x000a, - 0x3990: 0x000a, 0x3991: 0x000a, - 0x3992: 0x000a, 0x3993: 0x000a, 0x3994: 0x000a, 0x3995: 0x000a, 0x3996: 0x000a, 0x3997: 0x000a, - 0x3998: 0x000a, 0x3999: 0x000a, 0x399a: 0x000a, 0x399b: 0x000a, 0x399c: 0x000a, 0x399d: 0x000a, - 0x399e: 0x000a, 0x399f: 0x000a, 0x39a0: 0x000a, 0x39a1: 0x000a, 0x39a2: 0x000a, 0x39a3: 0x000a, - 0x39a4: 0x000a, 0x39a5: 0x000a, 0x39a6: 0x000a, 0x39a7: 0x000a, 0x39a8: 0x000a, 0x39a9: 0x000a, - 0x39aa: 0x000a, 0x39ab: 0x000a, 0x39ac: 0x000a, 0x39ad: 0x000a, - // Block 0xe7, offset 0x39c0 - 0x39c0: 0x000a, 0x39c1: 0x000a, 0x39c2: 0x000a, 0x39c3: 0x000a, 0x39c4: 0x000a, 0x39c5: 0x000a, - 0x39c6: 0x000a, 0x39c7: 0x000a, 0x39c8: 0x000a, 0x39c9: 0x000a, 0x39ca: 0x000a, 0x39cb: 0x000a, - 0x39cd: 0x000a, 0x39ce: 0x000a, 0x39cf: 0x000a, 0x39d0: 0x000a, 0x39d1: 0x000a, - 0x39d2: 0x000a, 0x39d3: 0x000a, 0x39d4: 0x000a, 0x39d5: 0x000a, 0x39d6: 0x000a, 0x39d7: 0x000a, - 0x39d8: 0x000a, 0x39d9: 0x000a, 0x39da: 0x000a, 0x39db: 0x000a, 0x39dc: 0x000a, 0x39dd: 0x000a, - 0x39de: 0x000a, 0x39df: 0x000a, 0x39e0: 0x000a, 0x39e1: 0x000a, 0x39e2: 0x000a, 0x39e3: 0x000a, - 0x39e4: 0x000a, 0x39e5: 0x000a, 0x39e6: 0x000a, 0x39e7: 0x000a, 0x39e8: 0x000a, 0x39e9: 0x000a, - 0x39ea: 0x000a, 0x39eb: 0x000a, 0x39ec: 0x000a, 0x39ed: 0x000a, 0x39ee: 0x000a, 0x39ef: 0x000a, - 0x39f0: 0x000a, 0x39f1: 0x000a, 0x39f2: 0x000a, 0x39f3: 0x000a, 0x39f4: 0x000a, 0x39f5: 0x000a, - 0x39f6: 0x000a, 0x39f7: 0x000a, 0x39f8: 0x000a, 0x39f9: 0x000a, 0x39fa: 0x000a, 0x39fb: 0x000a, - 0x39fc: 0x000a, 0x39fd: 0x000a, 0x39fe: 0x000a, 0x39ff: 0x000a, - // Block 0xe8, offset 0x3a00 - 0x3a00: 0x000a, 0x3a01: 0x000a, 0x3a02: 0x000a, 0x3a03: 0x000a, 0x3a04: 0x000a, 0x3a05: 0x000a, - 0x3a06: 0x000a, 0x3a07: 0x000a, 0x3a08: 0x000a, 0x3a09: 0x000a, 0x3a0a: 0x000a, 0x3a0b: 0x000a, - 0x3a0c: 0x000a, 0x3a0d: 0x000a, 0x3a0e: 0x000a, 0x3a0f: 0x000a, 0x3a10: 0x000a, 0x3a11: 0x000a, - 0x3a12: 0x000a, 0x3a13: 0x000a, 0x3a14: 0x000a, 0x3a15: 0x000a, 0x3a16: 0x000a, 0x3a17: 0x000a, - 0x3a18: 0x000a, 0x3a19: 0x000a, 0x3a1a: 0x000a, 0x3a1b: 0x000a, 0x3a1c: 0x000a, 0x3a1d: 0x000a, - 0x3a1e: 0x000a, 0x3a1f: 0x000a, 0x3a20: 0x000a, 0x3a21: 0x000a, 0x3a22: 0x000a, 0x3a23: 0x000a, - 0x3a24: 0x000a, 0x3a25: 0x000a, 0x3a26: 0x000a, 0x3a27: 0x000a, 0x3a28: 0x000a, 0x3a29: 0x000a, - 0x3a2a: 0x000a, 0x3a2b: 0x000a, 0x3a2c: 0x000a, 0x3a2d: 0x000a, 0x3a2e: 0x000a, 0x3a2f: 0x000a, - 0x3a30: 0x000a, 0x3a31: 0x000a, 0x3a33: 0x000a, 0x3a34: 0x000a, 0x3a35: 0x000a, - 0x3a36: 0x000a, 0x3a3a: 0x000a, 0x3a3b: 0x000a, - 0x3a3c: 0x000a, 0x3a3d: 0x000a, 0x3a3e: 0x000a, 0x3a3f: 0x000a, - // Block 0xe9, offset 0x3a40 - 0x3a40: 0x000a, 0x3a41: 0x000a, 0x3a42: 0x000a, 0x3a43: 0x000a, 0x3a44: 0x000a, 0x3a45: 0x000a, - 0x3a46: 0x000a, 0x3a47: 0x000a, 0x3a48: 0x000a, 0x3a49: 0x000a, 0x3a4a: 0x000a, 0x3a4b: 0x000a, - 0x3a4c: 0x000a, 0x3a4d: 0x000a, 0x3a4e: 0x000a, 0x3a4f: 0x000a, 0x3a50: 0x000a, 0x3a51: 0x000a, - 0x3a52: 0x000a, 0x3a53: 0x000a, 0x3a54: 0x000a, 0x3a55: 0x000a, 0x3a56: 0x000a, 0x3a57: 0x000a, - 0x3a58: 0x000a, 0x3a59: 0x000a, 0x3a5a: 0x000a, 0x3a5b: 0x000a, 0x3a5c: 0x000a, 0x3a5d: 0x000a, - 0x3a5e: 0x000a, 0x3a5f: 0x000a, 0x3a60: 0x000a, 0x3a61: 0x000a, 0x3a62: 0x000a, - 0x3a65: 0x000a, 0x3a66: 0x000a, 0x3a67: 0x000a, 0x3a68: 0x000a, 0x3a69: 0x000a, - 0x3a6a: 0x000a, 0x3a6e: 0x000a, 0x3a6f: 0x000a, - 0x3a70: 0x000a, 0x3a71: 0x000a, 0x3a72: 0x000a, 0x3a73: 0x000a, 0x3a74: 0x000a, 0x3a75: 0x000a, - 0x3a76: 0x000a, 0x3a77: 0x000a, 0x3a78: 0x000a, 0x3a79: 0x000a, 0x3a7a: 0x000a, 0x3a7b: 0x000a, - 0x3a7c: 0x000a, 0x3a7d: 0x000a, 0x3a7e: 0x000a, 0x3a7f: 0x000a, - // Block 0xea, offset 0x3a80 - 0x3a80: 0x000a, 0x3a81: 0x000a, 0x3a82: 0x000a, 0x3a83: 0x000a, 0x3a84: 0x000a, 0x3a85: 0x000a, - 0x3a86: 0x000a, 0x3a87: 0x000a, 0x3a88: 0x000a, 0x3a89: 0x000a, 0x3a8a: 0x000a, - 0x3a8d: 0x000a, 0x3a8e: 0x000a, 0x3a8f: 0x000a, 0x3a90: 0x000a, 0x3a91: 0x000a, - 0x3a92: 0x000a, 0x3a93: 0x000a, 0x3a94: 0x000a, 0x3a95: 0x000a, 0x3a96: 0x000a, 0x3a97: 0x000a, - 0x3a98: 0x000a, 0x3a99: 0x000a, 0x3a9a: 0x000a, 0x3a9b: 0x000a, 0x3a9c: 0x000a, 0x3a9d: 0x000a, - 0x3a9e: 0x000a, 0x3a9f: 0x000a, 0x3aa0: 0x000a, 0x3aa1: 0x000a, 0x3aa2: 0x000a, 0x3aa3: 0x000a, - 0x3aa4: 0x000a, 0x3aa5: 0x000a, 0x3aa6: 0x000a, 0x3aa7: 0x000a, 0x3aa8: 0x000a, 0x3aa9: 0x000a, - 0x3aaa: 0x000a, 0x3aab: 0x000a, 0x3aac: 0x000a, 0x3aad: 0x000a, 0x3aae: 0x000a, 0x3aaf: 0x000a, - 0x3ab0: 0x000a, 0x3ab1: 0x000a, 0x3ab2: 0x000a, 0x3ab3: 0x000a, 0x3ab4: 0x000a, 0x3ab5: 0x000a, - 0x3ab6: 0x000a, 0x3ab7: 0x000a, 0x3ab8: 0x000a, 0x3ab9: 0x000a, 0x3aba: 0x000a, 0x3abb: 0x000a, - 0x3abc: 0x000a, 0x3abd: 0x000a, 0x3abe: 0x000a, 0x3abf: 0x000a, - // Block 0xeb, offset 0x3ac0 - 0x3ac0: 0x000a, 0x3ac1: 0x000a, 0x3ac2: 0x000a, 0x3ac3: 0x000a, 0x3ac4: 0x000a, 0x3ac5: 0x000a, - 0x3ac6: 0x000a, 0x3ac7: 0x000a, 0x3ac8: 0x000a, 0x3ac9: 0x000a, 0x3aca: 0x000a, 0x3acb: 0x000a, - 0x3acc: 0x000a, 0x3acd: 0x000a, 0x3ace: 0x000a, 0x3acf: 0x000a, 0x3ad0: 0x000a, 0x3ad1: 0x000a, - 0x3ad2: 0x000a, 0x3ad3: 0x000a, - 0x3ae0: 0x000a, 0x3ae1: 0x000a, 0x3ae2: 0x000a, 0x3ae3: 0x000a, - 0x3ae4: 0x000a, 0x3ae5: 0x000a, 0x3ae6: 0x000a, 0x3ae7: 0x000a, 0x3ae8: 0x000a, 0x3ae9: 0x000a, - 0x3aea: 0x000a, 0x3aeb: 0x000a, 0x3aec: 0x000a, 0x3aed: 0x000a, - 0x3af0: 0x000a, 0x3af1: 0x000a, 0x3af2: 0x000a, 0x3af3: 0x000a, - 0x3af8: 0x000a, 0x3af9: 0x000a, 0x3afa: 0x000a, - // Block 0xec, offset 0x3b00 - 0x3b00: 0x000a, 0x3b01: 0x000a, 0x3b02: 0x000a, - 0x3b10: 0x000a, 0x3b11: 0x000a, - 0x3b12: 0x000a, 0x3b13: 0x000a, 0x3b14: 0x000a, 0x3b15: 0x000a, - // Block 0xed, offset 0x3b40 - 0x3b7e: 0x000b, 0x3b7f: 0x000b, - // Block 0xee, offset 0x3b80 - 0x3b80: 0x000b, 0x3b81: 0x000b, 0x3b82: 0x000b, 0x3b83: 0x000b, 0x3b84: 0x000b, 0x3b85: 0x000b, - 0x3b86: 0x000b, 0x3b87: 0x000b, 0x3b88: 0x000b, 0x3b89: 0x000b, 0x3b8a: 0x000b, 0x3b8b: 0x000b, - 0x3b8c: 0x000b, 0x3b8d: 0x000b, 0x3b8e: 0x000b, 0x3b8f: 0x000b, 0x3b90: 0x000b, 0x3b91: 0x000b, - 0x3b92: 0x000b, 0x3b93: 0x000b, 0x3b94: 0x000b, 0x3b95: 0x000b, 0x3b96: 0x000b, 0x3b97: 0x000b, - 0x3b98: 0x000b, 0x3b99: 0x000b, 0x3b9a: 0x000b, 0x3b9b: 0x000b, 0x3b9c: 0x000b, 0x3b9d: 0x000b, - 0x3b9e: 0x000b, 0x3b9f: 0x000b, 0x3ba0: 0x000b, 0x3ba1: 0x000b, 0x3ba2: 0x000b, 0x3ba3: 0x000b, - 0x3ba4: 0x000b, 0x3ba5: 0x000b, 0x3ba6: 0x000b, 0x3ba7: 0x000b, 0x3ba8: 0x000b, 0x3ba9: 0x000b, - 0x3baa: 0x000b, 0x3bab: 0x000b, 0x3bac: 0x000b, 0x3bad: 0x000b, 0x3bae: 0x000b, 0x3baf: 0x000b, - 0x3bb0: 0x000b, 0x3bb1: 0x000b, 0x3bb2: 0x000b, 0x3bb3: 0x000b, 0x3bb4: 0x000b, 0x3bb5: 0x000b, - 0x3bb6: 0x000b, 0x3bb7: 0x000b, 0x3bb8: 0x000b, 0x3bb9: 0x000b, 0x3bba: 0x000b, 0x3bbb: 0x000b, - 0x3bbc: 0x000b, 0x3bbd: 0x000b, 0x3bbe: 0x000b, 0x3bbf: 0x000b, - // Block 0xef, offset 0x3bc0 - 0x3bc0: 0x000c, 0x3bc1: 0x000c, 0x3bc2: 0x000c, 0x3bc3: 0x000c, 0x3bc4: 0x000c, 0x3bc5: 0x000c, - 0x3bc6: 0x000c, 0x3bc7: 0x000c, 0x3bc8: 0x000c, 0x3bc9: 0x000c, 0x3bca: 0x000c, 0x3bcb: 0x000c, - 0x3bcc: 0x000c, 0x3bcd: 0x000c, 0x3bce: 0x000c, 0x3bcf: 0x000c, 0x3bd0: 0x000c, 0x3bd1: 0x000c, - 0x3bd2: 0x000c, 0x3bd3: 0x000c, 0x3bd4: 0x000c, 0x3bd5: 0x000c, 0x3bd6: 0x000c, 0x3bd7: 0x000c, - 0x3bd8: 0x000c, 0x3bd9: 0x000c, 0x3bda: 0x000c, 0x3bdb: 0x000c, 0x3bdc: 0x000c, 0x3bdd: 0x000c, - 0x3bde: 0x000c, 0x3bdf: 0x000c, 0x3be0: 0x000c, 0x3be1: 0x000c, 0x3be2: 0x000c, 0x3be3: 0x000c, - 0x3be4: 0x000c, 0x3be5: 0x000c, 0x3be6: 0x000c, 0x3be7: 0x000c, 0x3be8: 0x000c, 0x3be9: 0x000c, - 0x3bea: 0x000c, 0x3beb: 0x000c, 0x3bec: 0x000c, 0x3bed: 0x000c, 0x3bee: 0x000c, 0x3bef: 0x000c, - 0x3bf0: 0x000b, 0x3bf1: 0x000b, 0x3bf2: 0x000b, 0x3bf3: 0x000b, 0x3bf4: 0x000b, 0x3bf5: 0x000b, - 0x3bf6: 0x000b, 0x3bf7: 0x000b, 0x3bf8: 0x000b, 0x3bf9: 0x000b, 0x3bfa: 0x000b, 0x3bfb: 0x000b, - 0x3bfc: 0x000b, 0x3bfd: 0x000b, 0x3bfe: 0x000b, 0x3bff: 0x000b, -} - -// bidiIndex: 24 blocks, 1536 entries, 1536 bytes -// Block 0 is the zero block. -var bidiIndex = [1536]uint8{ - // Block 0x0, offset 0x0 - // Block 0x1, offset 0x40 - // Block 0x2, offset 0x80 - // Block 0x3, offset 0xc0 - 0xc2: 0x01, 0xc3: 0x02, - 0xca: 0x03, 0xcb: 0x04, 0xcc: 0x05, 0xcd: 0x06, 0xce: 0x07, 0xcf: 0x08, - 0xd2: 0x09, 0xd6: 0x0a, 0xd7: 0x0b, - 0xd8: 0x0c, 0xd9: 0x0d, 0xda: 0x0e, 0xdb: 0x0f, 0xdc: 0x10, 0xdd: 0x11, 0xde: 0x12, 0xdf: 0x13, - 0xe0: 0x02, 0xe1: 0x03, 0xe2: 0x04, 0xe3: 0x05, 0xe4: 0x06, - 0xea: 0x07, 0xef: 0x08, - 0xf0: 0x11, 0xf1: 0x12, 0xf2: 0x12, 0xf3: 0x14, 0xf4: 0x15, - // Block 0x4, offset 0x100 - 0x120: 0x14, 0x121: 0x15, 0x122: 0x16, 0x123: 0x17, 0x124: 0x18, 0x125: 0x19, 0x126: 0x1a, 0x127: 0x1b, - 0x128: 0x1c, 0x129: 0x1d, 0x12a: 0x1c, 0x12b: 0x1e, 0x12c: 0x1f, 0x12d: 0x20, 0x12e: 0x21, 0x12f: 0x22, - 0x130: 0x23, 0x131: 0x24, 0x132: 0x1a, 0x133: 0x25, 0x134: 0x26, 0x135: 0x27, 0x137: 0x28, - 0x138: 0x29, 0x139: 0x2a, 0x13a: 0x2b, 0x13b: 0x2c, 0x13c: 0x2d, 0x13d: 0x2e, 0x13e: 0x2f, 0x13f: 0x30, - // Block 0x5, offset 0x140 - 0x140: 0x31, 0x141: 0x32, 0x142: 0x33, - 0x14d: 0x34, 0x14e: 0x35, - 0x150: 0x36, - 0x15a: 0x37, 0x15c: 0x38, 0x15d: 0x39, 0x15e: 0x3a, 0x15f: 0x3b, - 0x160: 0x3c, 0x162: 0x3d, 0x164: 0x3e, 0x165: 0x3f, 0x167: 0x40, - 0x168: 0x41, 0x169: 0x42, 0x16a: 0x43, 0x16c: 0x44, 0x16d: 0x45, 0x16e: 0x46, 0x16f: 0x47, - 0x170: 0x48, 0x173: 0x49, 0x177: 0x4a, - 0x17e: 0x4b, 0x17f: 0x4c, - // Block 0x6, offset 0x180 - 0x180: 0x4d, 0x181: 0x4e, 0x182: 0x4f, 0x183: 0x50, 0x184: 0x51, 0x185: 0x52, 0x186: 0x53, 0x187: 0x54, - 0x188: 0x55, 0x189: 0x54, 0x18a: 0x54, 0x18b: 0x54, 0x18c: 0x56, 0x18d: 0x57, 0x18e: 0x58, 0x18f: 0x54, - 0x190: 0x59, 0x191: 0x5a, 0x192: 0x5b, 0x193: 0x5c, 0x194: 0x54, 0x195: 0x54, 0x196: 0x54, 0x197: 0x54, - 0x198: 0x54, 0x199: 0x54, 0x19a: 0x5d, 0x19b: 0x54, 0x19c: 0x54, 0x19d: 0x5e, 0x19e: 0x54, 0x19f: 0x5f, - 0x1a4: 0x54, 0x1a5: 0x54, 0x1a6: 0x60, 0x1a7: 0x61, - 0x1a8: 0x54, 0x1a9: 0x54, 0x1aa: 0x54, 0x1ab: 0x54, 0x1ac: 0x54, 0x1ad: 0x62, 0x1ae: 0x63, 0x1af: 0x54, - 0x1b3: 0x64, 0x1b5: 0x65, 0x1b7: 0x66, - 0x1b8: 0x67, 0x1b9: 0x68, 0x1ba: 0x69, 0x1bb: 0x6a, 0x1bc: 0x54, 0x1bd: 0x54, 0x1be: 0x54, 0x1bf: 0x6b, - // Block 0x7, offset 0x1c0 - 0x1c0: 0x6c, 0x1c2: 0x6d, 0x1c3: 0x6e, 0x1c7: 0x6f, - 0x1c8: 0x70, 0x1c9: 0x71, 0x1ca: 0x72, 0x1cb: 0x73, 0x1cd: 0x74, 0x1cf: 0x75, - // Block 0x8, offset 0x200 - 0x237: 0x54, - // Block 0x9, offset 0x240 - 0x252: 0x76, 0x253: 0x77, - 0x258: 0x78, 0x259: 0x79, 0x25a: 0x7a, 0x25b: 0x7b, 0x25c: 0x7c, 0x25e: 0x7d, - 0x260: 0x7e, 0x261: 0x7f, 0x263: 0x80, 0x264: 0x81, 0x265: 0x82, 0x266: 0x83, 0x267: 0x84, - 0x268: 0x85, 0x269: 0x86, 0x26a: 0x87, 0x26b: 0x88, 0x26f: 0x89, - // Block 0xa, offset 0x280 - 0x2ac: 0x8a, 0x2ad: 0x8b, 0x2ae: 0x0e, 0x2af: 0x0e, - 0x2b0: 0x0e, 0x2b1: 0x0e, 0x2b2: 0x0e, 0x2b3: 0x0e, 0x2b4: 0x8c, 0x2b5: 0x0e, 0x2b6: 0x0e, 0x2b7: 0x8d, - 0x2b8: 0x8e, 0x2b9: 0x8f, 0x2ba: 0x0e, 0x2bb: 0x90, 0x2bc: 0x91, 0x2bd: 0x92, 0x2bf: 0x93, - // Block 0xb, offset 0x2c0 - 0x2c4: 0x94, 0x2c5: 0x54, 0x2c6: 0x95, 0x2c7: 0x96, - 0x2cb: 0x97, 0x2cd: 0x98, - 0x2e0: 0x99, 0x2e1: 0x99, 0x2e2: 0x99, 0x2e3: 0x99, 0x2e4: 0x9a, 0x2e5: 0x99, 0x2e6: 0x99, 0x2e7: 0x99, - 0x2e8: 0x9b, 0x2e9: 0x99, 0x2ea: 0x99, 0x2eb: 0x9c, 0x2ec: 0x9d, 0x2ed: 0x99, 0x2ee: 0x99, 0x2ef: 0x99, - 0x2f0: 0x99, 0x2f1: 0x99, 0x2f2: 0x99, 0x2f3: 0x99, 0x2f4: 0x9e, 0x2f5: 0x99, 0x2f6: 0x99, 0x2f7: 0x99, - 0x2f8: 0x99, 0x2f9: 0x9f, 0x2fa: 0x99, 0x2fb: 0x99, 0x2fc: 0xa0, 0x2fd: 0xa1, 0x2fe: 0x99, 0x2ff: 0x99, - // Block 0xc, offset 0x300 - 0x300: 0xa2, 0x301: 0xa3, 0x302: 0xa4, 0x304: 0xa5, 0x305: 0xa6, 0x306: 0xa7, 0x307: 0xa8, - 0x308: 0xa9, 0x30b: 0xaa, 0x30c: 0x26, 0x30d: 0xab, - 0x310: 0xac, 0x311: 0xad, 0x312: 0xae, 0x313: 0xaf, 0x316: 0xb0, 0x317: 0xb1, - 0x318: 0xb2, 0x319: 0xb3, 0x31a: 0xb4, 0x31c: 0xb5, - 0x320: 0xb6, 0x327: 0xb7, - 0x328: 0xb8, 0x329: 0xb9, 0x32a: 0xba, - 0x330: 0xbb, 0x332: 0xbc, 0x334: 0xbd, 0x335: 0xbe, 0x336: 0xbf, - 0x33b: 0xc0, 0x33f: 0xc1, - // Block 0xd, offset 0x340 - 0x36b: 0xc2, 0x36c: 0xc3, - 0x37d: 0xc4, 0x37e: 0xc5, 0x37f: 0xc6, - // Block 0xe, offset 0x380 - 0x3b2: 0xc7, - // Block 0xf, offset 0x3c0 - 0x3c5: 0xc8, 0x3c6: 0xc9, - 0x3c8: 0x54, 0x3c9: 0xca, 0x3cc: 0x54, 0x3cd: 0xcb, - 0x3db: 0xcc, 0x3dc: 0xcd, 0x3dd: 0xce, 0x3de: 0xcf, 0x3df: 0xd0, - 0x3e8: 0xd1, 0x3e9: 0xd2, 0x3ea: 0xd3, - // Block 0x10, offset 0x400 - 0x400: 0xd4, 0x404: 0xc3, - 0x40b: 0xd5, - 0x420: 0x99, 0x421: 0x99, 0x422: 0x99, 0x423: 0xd6, 0x424: 0x99, 0x425: 0xd7, 0x426: 0x99, 0x427: 0x99, - 0x428: 0x99, 0x429: 0x99, 0x42a: 0x99, 0x42b: 0x99, 0x42c: 0x99, 0x42d: 0x99, 0x42e: 0x99, 0x42f: 0x99, - 0x430: 0x99, 0x431: 0xa0, 0x432: 0x0e, 0x433: 0x99, 0x434: 0x0e, 0x435: 0xd8, 0x436: 0x99, 0x437: 0x99, - 0x438: 0x0e, 0x439: 0x0e, 0x43a: 0x0e, 0x43b: 0xd9, 0x43c: 0x99, 0x43d: 0x99, 0x43e: 0x99, 0x43f: 0x99, - // Block 0x11, offset 0x440 - 0x440: 0xda, 0x441: 0x54, 0x442: 0xdb, 0x443: 0xdc, 0x444: 0xdd, 0x445: 0xde, - 0x449: 0xdf, 0x44c: 0x54, 0x44d: 0x54, 0x44e: 0x54, 0x44f: 0x54, - 0x450: 0x54, 0x451: 0x54, 0x452: 0x54, 0x453: 0x54, 0x454: 0x54, 0x455: 0x54, 0x456: 0x54, 0x457: 0x54, - 0x458: 0x54, 0x459: 0x54, 0x45a: 0x54, 0x45b: 0xe0, 0x45c: 0x54, 0x45d: 0x6a, 0x45e: 0x54, 0x45f: 0xe1, - 0x460: 0xe2, 0x461: 0xe3, 0x462: 0xe4, 0x464: 0xe5, 0x465: 0xe6, 0x466: 0xe7, 0x467: 0xe8, - 0x468: 0x54, 0x469: 0xe9, 0x46a: 0xea, - 0x47f: 0xeb, - // Block 0x12, offset 0x480 - 0x4bf: 0xeb, - // Block 0x13, offset 0x4c0 - 0x4d0: 0x09, 0x4d1: 0x0a, 0x4d6: 0x0b, - 0x4db: 0x0c, 0x4dd: 0x0d, 0x4de: 0x0e, 0x4df: 0x0f, - 0x4ef: 0x10, - 0x4ff: 0x10, - // Block 0x14, offset 0x500 - 0x50f: 0x10, - 0x51f: 0x10, - 0x52f: 0x10, - 0x53f: 0x10, - // Block 0x15, offset 0x540 - 0x540: 0xec, 0x541: 0xec, 0x542: 0xec, 0x543: 0xec, 0x544: 0x05, 0x545: 0x05, 0x546: 0x05, 0x547: 0xed, - 0x548: 0xec, 0x549: 0xec, 0x54a: 0xec, 0x54b: 0xec, 0x54c: 0xec, 0x54d: 0xec, 0x54e: 0xec, 0x54f: 0xec, - 0x550: 0xec, 0x551: 0xec, 0x552: 0xec, 0x553: 0xec, 0x554: 0xec, 0x555: 0xec, 0x556: 0xec, 0x557: 0xec, - 0x558: 0xec, 0x559: 0xec, 0x55a: 0xec, 0x55b: 0xec, 0x55c: 0xec, 0x55d: 0xec, 0x55e: 0xec, 0x55f: 0xec, - 0x560: 0xec, 0x561: 0xec, 0x562: 0xec, 0x563: 0xec, 0x564: 0xec, 0x565: 0xec, 0x566: 0xec, 0x567: 0xec, - 0x568: 0xec, 0x569: 0xec, 0x56a: 0xec, 0x56b: 0xec, 0x56c: 0xec, 0x56d: 0xec, 0x56e: 0xec, 0x56f: 0xec, - 0x570: 0xec, 0x571: 0xec, 0x572: 0xec, 0x573: 0xec, 0x574: 0xec, 0x575: 0xec, 0x576: 0xec, 0x577: 0xec, - 0x578: 0xec, 0x579: 0xec, 0x57a: 0xec, 0x57b: 0xec, 0x57c: 0xec, 0x57d: 0xec, 0x57e: 0xec, 0x57f: 0xec, - // Block 0x16, offset 0x580 - 0x58f: 0x10, - 0x59f: 0x10, - 0x5a0: 0x13, - 0x5af: 0x10, - 0x5bf: 0x10, - // Block 0x17, offset 0x5c0 - 0x5cf: 0x10, -} - -// Total table size 16952 bytes (16KiB); checksum: F50EF68C diff --git a/vendor/golang.org/x/text/unicode/bidi/tables13.0.0.go b/vendor/golang.org/x/text/unicode/bidi/tables13.0.0.go deleted file mode 100644 index a713757906..0000000000 --- a/vendor/golang.org/x/text/unicode/bidi/tables13.0.0.go +++ /dev/null @@ -1,1955 +0,0 @@ -// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. - -//go:build go1.16 && !go1.21 - -package bidi - -// UnicodeVersion is the Unicode version from which the tables in this package are derived. -const UnicodeVersion = "13.0.0" - -// xorMasks contains masks to be xor-ed with brackets to get the reverse -// version. -var xorMasks = []int32{ // 8 elements - 0, 1, 6, 7, 3, 15, 29, 63, -} // Size: 56 bytes - -// lookup returns the trie value for the first UTF-8 encoding in s and -// the width in bytes of this encoding. The size will be 0 if s does not -// hold enough bytes to complete the encoding. len(s) must be greater than 0. -func (t *bidiTrie) lookup(s []byte) (v uint8, sz int) { - c0 := s[0] - switch { - case c0 < 0x80: // is ASCII - return bidiValues[c0], 1 - case c0 < 0xC2: - return 0, 1 // Illegal UTF-8: not a starter, not ASCII. - case c0 < 0xE0: // 2-byte UTF-8 - if len(s) < 2 { - return 0, 0 - } - i := bidiIndex[c0] - c1 := s[1] - if c1 < 0x80 || 0xC0 <= c1 { - return 0, 1 // Illegal UTF-8: not a continuation byte. - } - return t.lookupValue(uint32(i), c1), 2 - case c0 < 0xF0: // 3-byte UTF-8 - if len(s) < 3 { - return 0, 0 - } - i := bidiIndex[c0] - c1 := s[1] - if c1 < 0x80 || 0xC0 <= c1 { - return 0, 1 // Illegal UTF-8: not a continuation byte. - } - o := uint32(i)<<6 + uint32(c1) - i = bidiIndex[o] - c2 := s[2] - if c2 < 0x80 || 0xC0 <= c2 { - return 0, 2 // Illegal UTF-8: not a continuation byte. - } - return t.lookupValue(uint32(i), c2), 3 - case c0 < 0xF8: // 4-byte UTF-8 - if len(s) < 4 { - return 0, 0 - } - i := bidiIndex[c0] - c1 := s[1] - if c1 < 0x80 || 0xC0 <= c1 { - return 0, 1 // Illegal UTF-8: not a continuation byte. - } - o := uint32(i)<<6 + uint32(c1) - i = bidiIndex[o] - c2 := s[2] - if c2 < 0x80 || 0xC0 <= c2 { - return 0, 2 // Illegal UTF-8: not a continuation byte. - } - o = uint32(i)<<6 + uint32(c2) - i = bidiIndex[o] - c3 := s[3] - if c3 < 0x80 || 0xC0 <= c3 { - return 0, 3 // Illegal UTF-8: not a continuation byte. - } - return t.lookupValue(uint32(i), c3), 4 - } - // Illegal rune - return 0, 1 -} - -// lookupUnsafe returns the trie value for the first UTF-8 encoding in s. -// s must start with a full and valid UTF-8 encoded rune. -func (t *bidiTrie) lookupUnsafe(s []byte) uint8 { - c0 := s[0] - if c0 < 0x80 { // is ASCII - return bidiValues[c0] - } - i := bidiIndex[c0] - if c0 < 0xE0 { // 2-byte UTF-8 - return t.lookupValue(uint32(i), s[1]) - } - i = bidiIndex[uint32(i)<<6+uint32(s[1])] - if c0 < 0xF0 { // 3-byte UTF-8 - return t.lookupValue(uint32(i), s[2]) - } - i = bidiIndex[uint32(i)<<6+uint32(s[2])] - if c0 < 0xF8 { // 4-byte UTF-8 - return t.lookupValue(uint32(i), s[3]) - } - return 0 -} - -// lookupString returns the trie value for the first UTF-8 encoding in s and -// the width in bytes of this encoding. The size will be 0 if s does not -// hold enough bytes to complete the encoding. len(s) must be greater than 0. -func (t *bidiTrie) lookupString(s string) (v uint8, sz int) { - c0 := s[0] - switch { - case c0 < 0x80: // is ASCII - return bidiValues[c0], 1 - case c0 < 0xC2: - return 0, 1 // Illegal UTF-8: not a starter, not ASCII. - case c0 < 0xE0: // 2-byte UTF-8 - if len(s) < 2 { - return 0, 0 - } - i := bidiIndex[c0] - c1 := s[1] - if c1 < 0x80 || 0xC0 <= c1 { - return 0, 1 // Illegal UTF-8: not a continuation byte. - } - return t.lookupValue(uint32(i), c1), 2 - case c0 < 0xF0: // 3-byte UTF-8 - if len(s) < 3 { - return 0, 0 - } - i := bidiIndex[c0] - c1 := s[1] - if c1 < 0x80 || 0xC0 <= c1 { - return 0, 1 // Illegal UTF-8: not a continuation byte. - } - o := uint32(i)<<6 + uint32(c1) - i = bidiIndex[o] - c2 := s[2] - if c2 < 0x80 || 0xC0 <= c2 { - return 0, 2 // Illegal UTF-8: not a continuation byte. - } - return t.lookupValue(uint32(i), c2), 3 - case c0 < 0xF8: // 4-byte UTF-8 - if len(s) < 4 { - return 0, 0 - } - i := bidiIndex[c0] - c1 := s[1] - if c1 < 0x80 || 0xC0 <= c1 { - return 0, 1 // Illegal UTF-8: not a continuation byte. - } - o := uint32(i)<<6 + uint32(c1) - i = bidiIndex[o] - c2 := s[2] - if c2 < 0x80 || 0xC0 <= c2 { - return 0, 2 // Illegal UTF-8: not a continuation byte. - } - o = uint32(i)<<6 + uint32(c2) - i = bidiIndex[o] - c3 := s[3] - if c3 < 0x80 || 0xC0 <= c3 { - return 0, 3 // Illegal UTF-8: not a continuation byte. - } - return t.lookupValue(uint32(i), c3), 4 - } - // Illegal rune - return 0, 1 -} - -// lookupStringUnsafe returns the trie value for the first UTF-8 encoding in s. -// s must start with a full and valid UTF-8 encoded rune. -func (t *bidiTrie) lookupStringUnsafe(s string) uint8 { - c0 := s[0] - if c0 < 0x80 { // is ASCII - return bidiValues[c0] - } - i := bidiIndex[c0] - if c0 < 0xE0 { // 2-byte UTF-8 - return t.lookupValue(uint32(i), s[1]) - } - i = bidiIndex[uint32(i)<<6+uint32(s[1])] - if c0 < 0xF0 { // 3-byte UTF-8 - return t.lookupValue(uint32(i), s[2]) - } - i = bidiIndex[uint32(i)<<6+uint32(s[2])] - if c0 < 0xF8 { // 4-byte UTF-8 - return t.lookupValue(uint32(i), s[3]) - } - return 0 -} - -// bidiTrie. Total size: 17408 bytes (17.00 KiB). Checksum: df85fcbfe9b8377f. -type bidiTrie struct{} - -func newBidiTrie(i int) *bidiTrie { - return &bidiTrie{} -} - -// lookupValue determines the type of block n and looks up the value for b. -func (t *bidiTrie) lookupValue(n uint32, b byte) uint8 { - switch { - default: - return uint8(bidiValues[n<<6+uint32(b)]) - } -} - -// bidiValues: 248 blocks, 15872 entries, 15872 bytes -// The third block is the zero block. -var bidiValues = [15872]uint8{ - // Block 0x0, offset 0x0 - 0x00: 0x000b, 0x01: 0x000b, 0x02: 0x000b, 0x03: 0x000b, 0x04: 0x000b, 0x05: 0x000b, - 0x06: 0x000b, 0x07: 0x000b, 0x08: 0x000b, 0x09: 0x0008, 0x0a: 0x0007, 0x0b: 0x0008, - 0x0c: 0x0009, 0x0d: 0x0007, 0x0e: 0x000b, 0x0f: 0x000b, 0x10: 0x000b, 0x11: 0x000b, - 0x12: 0x000b, 0x13: 0x000b, 0x14: 0x000b, 0x15: 0x000b, 0x16: 0x000b, 0x17: 0x000b, - 0x18: 0x000b, 0x19: 0x000b, 0x1a: 0x000b, 0x1b: 0x000b, 0x1c: 0x0007, 0x1d: 0x0007, - 0x1e: 0x0007, 0x1f: 0x0008, 0x20: 0x0009, 0x21: 0x000a, 0x22: 0x000a, 0x23: 0x0004, - 0x24: 0x0004, 0x25: 0x0004, 0x26: 0x000a, 0x27: 0x000a, 0x28: 0x003a, 0x29: 0x002a, - 0x2a: 0x000a, 0x2b: 0x0003, 0x2c: 0x0006, 0x2d: 0x0003, 0x2e: 0x0006, 0x2f: 0x0006, - 0x30: 0x0002, 0x31: 0x0002, 0x32: 0x0002, 0x33: 0x0002, 0x34: 0x0002, 0x35: 0x0002, - 0x36: 0x0002, 0x37: 0x0002, 0x38: 0x0002, 0x39: 0x0002, 0x3a: 0x0006, 0x3b: 0x000a, - 0x3c: 0x000a, 0x3d: 0x000a, 0x3e: 0x000a, 0x3f: 0x000a, - // Block 0x1, offset 0x40 - 0x40: 0x000a, - 0x5b: 0x005a, 0x5c: 0x000a, 0x5d: 0x004a, - 0x5e: 0x000a, 0x5f: 0x000a, 0x60: 0x000a, - 0x7b: 0x005a, - 0x7c: 0x000a, 0x7d: 0x004a, 0x7e: 0x000a, 0x7f: 0x000b, - // Block 0x2, offset 0x80 - // Block 0x3, offset 0xc0 - 0xc0: 0x000b, 0xc1: 0x000b, 0xc2: 0x000b, 0xc3: 0x000b, 0xc4: 0x000b, 0xc5: 0x0007, - 0xc6: 0x000b, 0xc7: 0x000b, 0xc8: 0x000b, 0xc9: 0x000b, 0xca: 0x000b, 0xcb: 0x000b, - 0xcc: 0x000b, 0xcd: 0x000b, 0xce: 0x000b, 0xcf: 0x000b, 0xd0: 0x000b, 0xd1: 0x000b, - 0xd2: 0x000b, 0xd3: 0x000b, 0xd4: 0x000b, 0xd5: 0x000b, 0xd6: 0x000b, 0xd7: 0x000b, - 0xd8: 0x000b, 0xd9: 0x000b, 0xda: 0x000b, 0xdb: 0x000b, 0xdc: 0x000b, 0xdd: 0x000b, - 0xde: 0x000b, 0xdf: 0x000b, 0xe0: 0x0006, 0xe1: 0x000a, 0xe2: 0x0004, 0xe3: 0x0004, - 0xe4: 0x0004, 0xe5: 0x0004, 0xe6: 0x000a, 0xe7: 0x000a, 0xe8: 0x000a, 0xe9: 0x000a, - 0xeb: 0x000a, 0xec: 0x000a, 0xed: 0x000b, 0xee: 0x000a, 0xef: 0x000a, - 0xf0: 0x0004, 0xf1: 0x0004, 0xf2: 0x0002, 0xf3: 0x0002, 0xf4: 0x000a, - 0xf6: 0x000a, 0xf7: 0x000a, 0xf8: 0x000a, 0xf9: 0x0002, 0xfb: 0x000a, - 0xfc: 0x000a, 0xfd: 0x000a, 0xfe: 0x000a, 0xff: 0x000a, - // Block 0x4, offset 0x100 - 0x117: 0x000a, - 0x137: 0x000a, - // Block 0x5, offset 0x140 - 0x179: 0x000a, 0x17a: 0x000a, - // Block 0x6, offset 0x180 - 0x182: 0x000a, 0x183: 0x000a, 0x184: 0x000a, 0x185: 0x000a, - 0x186: 0x000a, 0x187: 0x000a, 0x188: 0x000a, 0x189: 0x000a, 0x18a: 0x000a, 0x18b: 0x000a, - 0x18c: 0x000a, 0x18d: 0x000a, 0x18e: 0x000a, 0x18f: 0x000a, - 0x192: 0x000a, 0x193: 0x000a, 0x194: 0x000a, 0x195: 0x000a, 0x196: 0x000a, 0x197: 0x000a, - 0x198: 0x000a, 0x199: 0x000a, 0x19a: 0x000a, 0x19b: 0x000a, 0x19c: 0x000a, 0x19d: 0x000a, - 0x19e: 0x000a, 0x19f: 0x000a, - 0x1a5: 0x000a, 0x1a6: 0x000a, 0x1a7: 0x000a, 0x1a8: 0x000a, 0x1a9: 0x000a, - 0x1aa: 0x000a, 0x1ab: 0x000a, 0x1ac: 0x000a, 0x1ad: 0x000a, 0x1af: 0x000a, - 0x1b0: 0x000a, 0x1b1: 0x000a, 0x1b2: 0x000a, 0x1b3: 0x000a, 0x1b4: 0x000a, 0x1b5: 0x000a, - 0x1b6: 0x000a, 0x1b7: 0x000a, 0x1b8: 0x000a, 0x1b9: 0x000a, 0x1ba: 0x000a, 0x1bb: 0x000a, - 0x1bc: 0x000a, 0x1bd: 0x000a, 0x1be: 0x000a, 0x1bf: 0x000a, - // Block 0x7, offset 0x1c0 - 0x1c0: 0x000c, 0x1c1: 0x000c, 0x1c2: 0x000c, 0x1c3: 0x000c, 0x1c4: 0x000c, 0x1c5: 0x000c, - 0x1c6: 0x000c, 0x1c7: 0x000c, 0x1c8: 0x000c, 0x1c9: 0x000c, 0x1ca: 0x000c, 0x1cb: 0x000c, - 0x1cc: 0x000c, 0x1cd: 0x000c, 0x1ce: 0x000c, 0x1cf: 0x000c, 0x1d0: 0x000c, 0x1d1: 0x000c, - 0x1d2: 0x000c, 0x1d3: 0x000c, 0x1d4: 0x000c, 0x1d5: 0x000c, 0x1d6: 0x000c, 0x1d7: 0x000c, - 0x1d8: 0x000c, 0x1d9: 0x000c, 0x1da: 0x000c, 0x1db: 0x000c, 0x1dc: 0x000c, 0x1dd: 0x000c, - 0x1de: 0x000c, 0x1df: 0x000c, 0x1e0: 0x000c, 0x1e1: 0x000c, 0x1e2: 0x000c, 0x1e3: 0x000c, - 0x1e4: 0x000c, 0x1e5: 0x000c, 0x1e6: 0x000c, 0x1e7: 0x000c, 0x1e8: 0x000c, 0x1e9: 0x000c, - 0x1ea: 0x000c, 0x1eb: 0x000c, 0x1ec: 0x000c, 0x1ed: 0x000c, 0x1ee: 0x000c, 0x1ef: 0x000c, - 0x1f0: 0x000c, 0x1f1: 0x000c, 0x1f2: 0x000c, 0x1f3: 0x000c, 0x1f4: 0x000c, 0x1f5: 0x000c, - 0x1f6: 0x000c, 0x1f7: 0x000c, 0x1f8: 0x000c, 0x1f9: 0x000c, 0x1fa: 0x000c, 0x1fb: 0x000c, - 0x1fc: 0x000c, 0x1fd: 0x000c, 0x1fe: 0x000c, 0x1ff: 0x000c, - // Block 0x8, offset 0x200 - 0x200: 0x000c, 0x201: 0x000c, 0x202: 0x000c, 0x203: 0x000c, 0x204: 0x000c, 0x205: 0x000c, - 0x206: 0x000c, 0x207: 0x000c, 0x208: 0x000c, 0x209: 0x000c, 0x20a: 0x000c, 0x20b: 0x000c, - 0x20c: 0x000c, 0x20d: 0x000c, 0x20e: 0x000c, 0x20f: 0x000c, 0x210: 0x000c, 0x211: 0x000c, - 0x212: 0x000c, 0x213: 0x000c, 0x214: 0x000c, 0x215: 0x000c, 0x216: 0x000c, 0x217: 0x000c, - 0x218: 0x000c, 0x219: 0x000c, 0x21a: 0x000c, 0x21b: 0x000c, 0x21c: 0x000c, 0x21d: 0x000c, - 0x21e: 0x000c, 0x21f: 0x000c, 0x220: 0x000c, 0x221: 0x000c, 0x222: 0x000c, 0x223: 0x000c, - 0x224: 0x000c, 0x225: 0x000c, 0x226: 0x000c, 0x227: 0x000c, 0x228: 0x000c, 0x229: 0x000c, - 0x22a: 0x000c, 0x22b: 0x000c, 0x22c: 0x000c, 0x22d: 0x000c, 0x22e: 0x000c, 0x22f: 0x000c, - 0x234: 0x000a, 0x235: 0x000a, - 0x23e: 0x000a, - // Block 0x9, offset 0x240 - 0x244: 0x000a, 0x245: 0x000a, - 0x247: 0x000a, - // Block 0xa, offset 0x280 - 0x2b6: 0x000a, - // Block 0xb, offset 0x2c0 - 0x2c3: 0x000c, 0x2c4: 0x000c, 0x2c5: 0x000c, - 0x2c6: 0x000c, 0x2c7: 0x000c, 0x2c8: 0x000c, 0x2c9: 0x000c, - // Block 0xc, offset 0x300 - 0x30a: 0x000a, - 0x30d: 0x000a, 0x30e: 0x000a, 0x30f: 0x0004, 0x310: 0x0001, 0x311: 0x000c, - 0x312: 0x000c, 0x313: 0x000c, 0x314: 0x000c, 0x315: 0x000c, 0x316: 0x000c, 0x317: 0x000c, - 0x318: 0x000c, 0x319: 0x000c, 0x31a: 0x000c, 0x31b: 0x000c, 0x31c: 0x000c, 0x31d: 0x000c, - 0x31e: 0x000c, 0x31f: 0x000c, 0x320: 0x000c, 0x321: 0x000c, 0x322: 0x000c, 0x323: 0x000c, - 0x324: 0x000c, 0x325: 0x000c, 0x326: 0x000c, 0x327: 0x000c, 0x328: 0x000c, 0x329: 0x000c, - 0x32a: 0x000c, 0x32b: 0x000c, 0x32c: 0x000c, 0x32d: 0x000c, 0x32e: 0x000c, 0x32f: 0x000c, - 0x330: 0x000c, 0x331: 0x000c, 0x332: 0x000c, 0x333: 0x000c, 0x334: 0x000c, 0x335: 0x000c, - 0x336: 0x000c, 0x337: 0x000c, 0x338: 0x000c, 0x339: 0x000c, 0x33a: 0x000c, 0x33b: 0x000c, - 0x33c: 0x000c, 0x33d: 0x000c, 0x33e: 0x0001, 0x33f: 0x000c, - // Block 0xd, offset 0x340 - 0x340: 0x0001, 0x341: 0x000c, 0x342: 0x000c, 0x343: 0x0001, 0x344: 0x000c, 0x345: 0x000c, - 0x346: 0x0001, 0x347: 0x000c, 0x348: 0x0001, 0x349: 0x0001, 0x34a: 0x0001, 0x34b: 0x0001, - 0x34c: 0x0001, 0x34d: 0x0001, 0x34e: 0x0001, 0x34f: 0x0001, 0x350: 0x0001, 0x351: 0x0001, - 0x352: 0x0001, 0x353: 0x0001, 0x354: 0x0001, 0x355: 0x0001, 0x356: 0x0001, 0x357: 0x0001, - 0x358: 0x0001, 0x359: 0x0001, 0x35a: 0x0001, 0x35b: 0x0001, 0x35c: 0x0001, 0x35d: 0x0001, - 0x35e: 0x0001, 0x35f: 0x0001, 0x360: 0x0001, 0x361: 0x0001, 0x362: 0x0001, 0x363: 0x0001, - 0x364: 0x0001, 0x365: 0x0001, 0x366: 0x0001, 0x367: 0x0001, 0x368: 0x0001, 0x369: 0x0001, - 0x36a: 0x0001, 0x36b: 0x0001, 0x36c: 0x0001, 0x36d: 0x0001, 0x36e: 0x0001, 0x36f: 0x0001, - 0x370: 0x0001, 0x371: 0x0001, 0x372: 0x0001, 0x373: 0x0001, 0x374: 0x0001, 0x375: 0x0001, - 0x376: 0x0001, 0x377: 0x0001, 0x378: 0x0001, 0x379: 0x0001, 0x37a: 0x0001, 0x37b: 0x0001, - 0x37c: 0x0001, 0x37d: 0x0001, 0x37e: 0x0001, 0x37f: 0x0001, - // Block 0xe, offset 0x380 - 0x380: 0x0005, 0x381: 0x0005, 0x382: 0x0005, 0x383: 0x0005, 0x384: 0x0005, 0x385: 0x0005, - 0x386: 0x000a, 0x387: 0x000a, 0x388: 0x000d, 0x389: 0x0004, 0x38a: 0x0004, 0x38b: 0x000d, - 0x38c: 0x0006, 0x38d: 0x000d, 0x38e: 0x000a, 0x38f: 0x000a, 0x390: 0x000c, 0x391: 0x000c, - 0x392: 0x000c, 0x393: 0x000c, 0x394: 0x000c, 0x395: 0x000c, 0x396: 0x000c, 0x397: 0x000c, - 0x398: 0x000c, 0x399: 0x000c, 0x39a: 0x000c, 0x39b: 0x000d, 0x39c: 0x000d, 0x39d: 0x000d, - 0x39e: 0x000d, 0x39f: 0x000d, 0x3a0: 0x000d, 0x3a1: 0x000d, 0x3a2: 0x000d, 0x3a3: 0x000d, - 0x3a4: 0x000d, 0x3a5: 0x000d, 0x3a6: 0x000d, 0x3a7: 0x000d, 0x3a8: 0x000d, 0x3a9: 0x000d, - 0x3aa: 0x000d, 0x3ab: 0x000d, 0x3ac: 0x000d, 0x3ad: 0x000d, 0x3ae: 0x000d, 0x3af: 0x000d, - 0x3b0: 0x000d, 0x3b1: 0x000d, 0x3b2: 0x000d, 0x3b3: 0x000d, 0x3b4: 0x000d, 0x3b5: 0x000d, - 0x3b6: 0x000d, 0x3b7: 0x000d, 0x3b8: 0x000d, 0x3b9: 0x000d, 0x3ba: 0x000d, 0x3bb: 0x000d, - 0x3bc: 0x000d, 0x3bd: 0x000d, 0x3be: 0x000d, 0x3bf: 0x000d, - // Block 0xf, offset 0x3c0 - 0x3c0: 0x000d, 0x3c1: 0x000d, 0x3c2: 0x000d, 0x3c3: 0x000d, 0x3c4: 0x000d, 0x3c5: 0x000d, - 0x3c6: 0x000d, 0x3c7: 0x000d, 0x3c8: 0x000d, 0x3c9: 0x000d, 0x3ca: 0x000d, 0x3cb: 0x000c, - 0x3cc: 0x000c, 0x3cd: 0x000c, 0x3ce: 0x000c, 0x3cf: 0x000c, 0x3d0: 0x000c, 0x3d1: 0x000c, - 0x3d2: 0x000c, 0x3d3: 0x000c, 0x3d4: 0x000c, 0x3d5: 0x000c, 0x3d6: 0x000c, 0x3d7: 0x000c, - 0x3d8: 0x000c, 0x3d9: 0x000c, 0x3da: 0x000c, 0x3db: 0x000c, 0x3dc: 0x000c, 0x3dd: 0x000c, - 0x3de: 0x000c, 0x3df: 0x000c, 0x3e0: 0x0005, 0x3e1: 0x0005, 0x3e2: 0x0005, 0x3e3: 0x0005, - 0x3e4: 0x0005, 0x3e5: 0x0005, 0x3e6: 0x0005, 0x3e7: 0x0005, 0x3e8: 0x0005, 0x3e9: 0x0005, - 0x3ea: 0x0004, 0x3eb: 0x0005, 0x3ec: 0x0005, 0x3ed: 0x000d, 0x3ee: 0x000d, 0x3ef: 0x000d, - 0x3f0: 0x000c, 0x3f1: 0x000d, 0x3f2: 0x000d, 0x3f3: 0x000d, 0x3f4: 0x000d, 0x3f5: 0x000d, - 0x3f6: 0x000d, 0x3f7: 0x000d, 0x3f8: 0x000d, 0x3f9: 0x000d, 0x3fa: 0x000d, 0x3fb: 0x000d, - 0x3fc: 0x000d, 0x3fd: 0x000d, 0x3fe: 0x000d, 0x3ff: 0x000d, - // Block 0x10, offset 0x400 - 0x400: 0x000d, 0x401: 0x000d, 0x402: 0x000d, 0x403: 0x000d, 0x404: 0x000d, 0x405: 0x000d, - 0x406: 0x000d, 0x407: 0x000d, 0x408: 0x000d, 0x409: 0x000d, 0x40a: 0x000d, 0x40b: 0x000d, - 0x40c: 0x000d, 0x40d: 0x000d, 0x40e: 0x000d, 0x40f: 0x000d, 0x410: 0x000d, 0x411: 0x000d, - 0x412: 0x000d, 0x413: 0x000d, 0x414: 0x000d, 0x415: 0x000d, 0x416: 0x000d, 0x417: 0x000d, - 0x418: 0x000d, 0x419: 0x000d, 0x41a: 0x000d, 0x41b: 0x000d, 0x41c: 0x000d, 0x41d: 0x000d, - 0x41e: 0x000d, 0x41f: 0x000d, 0x420: 0x000d, 0x421: 0x000d, 0x422: 0x000d, 0x423: 0x000d, - 0x424: 0x000d, 0x425: 0x000d, 0x426: 0x000d, 0x427: 0x000d, 0x428: 0x000d, 0x429: 0x000d, - 0x42a: 0x000d, 0x42b: 0x000d, 0x42c: 0x000d, 0x42d: 0x000d, 0x42e: 0x000d, 0x42f: 0x000d, - 0x430: 0x000d, 0x431: 0x000d, 0x432: 0x000d, 0x433: 0x000d, 0x434: 0x000d, 0x435: 0x000d, - 0x436: 0x000d, 0x437: 0x000d, 0x438: 0x000d, 0x439: 0x000d, 0x43a: 0x000d, 0x43b: 0x000d, - 0x43c: 0x000d, 0x43d: 0x000d, 0x43e: 0x000d, 0x43f: 0x000d, - // Block 0x11, offset 0x440 - 0x440: 0x000d, 0x441: 0x000d, 0x442: 0x000d, 0x443: 0x000d, 0x444: 0x000d, 0x445: 0x000d, - 0x446: 0x000d, 0x447: 0x000d, 0x448: 0x000d, 0x449: 0x000d, 0x44a: 0x000d, 0x44b: 0x000d, - 0x44c: 0x000d, 0x44d: 0x000d, 0x44e: 0x000d, 0x44f: 0x000d, 0x450: 0x000d, 0x451: 0x000d, - 0x452: 0x000d, 0x453: 0x000d, 0x454: 0x000d, 0x455: 0x000d, 0x456: 0x000c, 0x457: 0x000c, - 0x458: 0x000c, 0x459: 0x000c, 0x45a: 0x000c, 0x45b: 0x000c, 0x45c: 0x000c, 0x45d: 0x0005, - 0x45e: 0x000a, 0x45f: 0x000c, 0x460: 0x000c, 0x461: 0x000c, 0x462: 0x000c, 0x463: 0x000c, - 0x464: 0x000c, 0x465: 0x000d, 0x466: 0x000d, 0x467: 0x000c, 0x468: 0x000c, 0x469: 0x000a, - 0x46a: 0x000c, 0x46b: 0x000c, 0x46c: 0x000c, 0x46d: 0x000c, 0x46e: 0x000d, 0x46f: 0x000d, - 0x470: 0x0002, 0x471: 0x0002, 0x472: 0x0002, 0x473: 0x0002, 0x474: 0x0002, 0x475: 0x0002, - 0x476: 0x0002, 0x477: 0x0002, 0x478: 0x0002, 0x479: 0x0002, 0x47a: 0x000d, 0x47b: 0x000d, - 0x47c: 0x000d, 0x47d: 0x000d, 0x47e: 0x000d, 0x47f: 0x000d, - // Block 0x12, offset 0x480 - 0x480: 0x000d, 0x481: 0x000d, 0x482: 0x000d, 0x483: 0x000d, 0x484: 0x000d, 0x485: 0x000d, - 0x486: 0x000d, 0x487: 0x000d, 0x488: 0x000d, 0x489: 0x000d, 0x48a: 0x000d, 0x48b: 0x000d, - 0x48c: 0x000d, 0x48d: 0x000d, 0x48e: 0x000d, 0x48f: 0x000d, 0x490: 0x000d, 0x491: 0x000c, - 0x492: 0x000d, 0x493: 0x000d, 0x494: 0x000d, 0x495: 0x000d, 0x496: 0x000d, 0x497: 0x000d, - 0x498: 0x000d, 0x499: 0x000d, 0x49a: 0x000d, 0x49b: 0x000d, 0x49c: 0x000d, 0x49d: 0x000d, - 0x49e: 0x000d, 0x49f: 0x000d, 0x4a0: 0x000d, 0x4a1: 0x000d, 0x4a2: 0x000d, 0x4a3: 0x000d, - 0x4a4: 0x000d, 0x4a5: 0x000d, 0x4a6: 0x000d, 0x4a7: 0x000d, 0x4a8: 0x000d, 0x4a9: 0x000d, - 0x4aa: 0x000d, 0x4ab: 0x000d, 0x4ac: 0x000d, 0x4ad: 0x000d, 0x4ae: 0x000d, 0x4af: 0x000d, - 0x4b0: 0x000c, 0x4b1: 0x000c, 0x4b2: 0x000c, 0x4b3: 0x000c, 0x4b4: 0x000c, 0x4b5: 0x000c, - 0x4b6: 0x000c, 0x4b7: 0x000c, 0x4b8: 0x000c, 0x4b9: 0x000c, 0x4ba: 0x000c, 0x4bb: 0x000c, - 0x4bc: 0x000c, 0x4bd: 0x000c, 0x4be: 0x000c, 0x4bf: 0x000c, - // Block 0x13, offset 0x4c0 - 0x4c0: 0x000c, 0x4c1: 0x000c, 0x4c2: 0x000c, 0x4c3: 0x000c, 0x4c4: 0x000c, 0x4c5: 0x000c, - 0x4c6: 0x000c, 0x4c7: 0x000c, 0x4c8: 0x000c, 0x4c9: 0x000c, 0x4ca: 0x000c, 0x4cb: 0x000d, - 0x4cc: 0x000d, 0x4cd: 0x000d, 0x4ce: 0x000d, 0x4cf: 0x000d, 0x4d0: 0x000d, 0x4d1: 0x000d, - 0x4d2: 0x000d, 0x4d3: 0x000d, 0x4d4: 0x000d, 0x4d5: 0x000d, 0x4d6: 0x000d, 0x4d7: 0x000d, - 0x4d8: 0x000d, 0x4d9: 0x000d, 0x4da: 0x000d, 0x4db: 0x000d, 0x4dc: 0x000d, 0x4dd: 0x000d, - 0x4de: 0x000d, 0x4df: 0x000d, 0x4e0: 0x000d, 0x4e1: 0x000d, 0x4e2: 0x000d, 0x4e3: 0x000d, - 0x4e4: 0x000d, 0x4e5: 0x000d, 0x4e6: 0x000d, 0x4e7: 0x000d, 0x4e8: 0x000d, 0x4e9: 0x000d, - 0x4ea: 0x000d, 0x4eb: 0x000d, 0x4ec: 0x000d, 0x4ed: 0x000d, 0x4ee: 0x000d, 0x4ef: 0x000d, - 0x4f0: 0x000d, 0x4f1: 0x000d, 0x4f2: 0x000d, 0x4f3: 0x000d, 0x4f4: 0x000d, 0x4f5: 0x000d, - 0x4f6: 0x000d, 0x4f7: 0x000d, 0x4f8: 0x000d, 0x4f9: 0x000d, 0x4fa: 0x000d, 0x4fb: 0x000d, - 0x4fc: 0x000d, 0x4fd: 0x000d, 0x4fe: 0x000d, 0x4ff: 0x000d, - // Block 0x14, offset 0x500 - 0x500: 0x000d, 0x501: 0x000d, 0x502: 0x000d, 0x503: 0x000d, 0x504: 0x000d, 0x505: 0x000d, - 0x506: 0x000d, 0x507: 0x000d, 0x508: 0x000d, 0x509: 0x000d, 0x50a: 0x000d, 0x50b: 0x000d, - 0x50c: 0x000d, 0x50d: 0x000d, 0x50e: 0x000d, 0x50f: 0x000d, 0x510: 0x000d, 0x511: 0x000d, - 0x512: 0x000d, 0x513: 0x000d, 0x514: 0x000d, 0x515: 0x000d, 0x516: 0x000d, 0x517: 0x000d, - 0x518: 0x000d, 0x519: 0x000d, 0x51a: 0x000d, 0x51b: 0x000d, 0x51c: 0x000d, 0x51d: 0x000d, - 0x51e: 0x000d, 0x51f: 0x000d, 0x520: 0x000d, 0x521: 0x000d, 0x522: 0x000d, 0x523: 0x000d, - 0x524: 0x000d, 0x525: 0x000d, 0x526: 0x000c, 0x527: 0x000c, 0x528: 0x000c, 0x529: 0x000c, - 0x52a: 0x000c, 0x52b: 0x000c, 0x52c: 0x000c, 0x52d: 0x000c, 0x52e: 0x000c, 0x52f: 0x000c, - 0x530: 0x000c, 0x531: 0x000d, 0x532: 0x000d, 0x533: 0x000d, 0x534: 0x000d, 0x535: 0x000d, - 0x536: 0x000d, 0x537: 0x000d, 0x538: 0x000d, 0x539: 0x000d, 0x53a: 0x000d, 0x53b: 0x000d, - 0x53c: 0x000d, 0x53d: 0x000d, 0x53e: 0x000d, 0x53f: 0x000d, - // Block 0x15, offset 0x540 - 0x540: 0x0001, 0x541: 0x0001, 0x542: 0x0001, 0x543: 0x0001, 0x544: 0x0001, 0x545: 0x0001, - 0x546: 0x0001, 0x547: 0x0001, 0x548: 0x0001, 0x549: 0x0001, 0x54a: 0x0001, 0x54b: 0x0001, - 0x54c: 0x0001, 0x54d: 0x0001, 0x54e: 0x0001, 0x54f: 0x0001, 0x550: 0x0001, 0x551: 0x0001, - 0x552: 0x0001, 0x553: 0x0001, 0x554: 0x0001, 0x555: 0x0001, 0x556: 0x0001, 0x557: 0x0001, - 0x558: 0x0001, 0x559: 0x0001, 0x55a: 0x0001, 0x55b: 0x0001, 0x55c: 0x0001, 0x55d: 0x0001, - 0x55e: 0x0001, 0x55f: 0x0001, 0x560: 0x0001, 0x561: 0x0001, 0x562: 0x0001, 0x563: 0x0001, - 0x564: 0x0001, 0x565: 0x0001, 0x566: 0x0001, 0x567: 0x0001, 0x568: 0x0001, 0x569: 0x0001, - 0x56a: 0x0001, 0x56b: 0x000c, 0x56c: 0x000c, 0x56d: 0x000c, 0x56e: 0x000c, 0x56f: 0x000c, - 0x570: 0x000c, 0x571: 0x000c, 0x572: 0x000c, 0x573: 0x000c, 0x574: 0x0001, 0x575: 0x0001, - 0x576: 0x000a, 0x577: 0x000a, 0x578: 0x000a, 0x579: 0x000a, 0x57a: 0x0001, 0x57b: 0x0001, - 0x57c: 0x0001, 0x57d: 0x000c, 0x57e: 0x0001, 0x57f: 0x0001, - // Block 0x16, offset 0x580 - 0x580: 0x0001, 0x581: 0x0001, 0x582: 0x0001, 0x583: 0x0001, 0x584: 0x0001, 0x585: 0x0001, - 0x586: 0x0001, 0x587: 0x0001, 0x588: 0x0001, 0x589: 0x0001, 0x58a: 0x0001, 0x58b: 0x0001, - 0x58c: 0x0001, 0x58d: 0x0001, 0x58e: 0x0001, 0x58f: 0x0001, 0x590: 0x0001, 0x591: 0x0001, - 0x592: 0x0001, 0x593: 0x0001, 0x594: 0x0001, 0x595: 0x0001, 0x596: 0x000c, 0x597: 0x000c, - 0x598: 0x000c, 0x599: 0x000c, 0x59a: 0x0001, 0x59b: 0x000c, 0x59c: 0x000c, 0x59d: 0x000c, - 0x59e: 0x000c, 0x59f: 0x000c, 0x5a0: 0x000c, 0x5a1: 0x000c, 0x5a2: 0x000c, 0x5a3: 0x000c, - 0x5a4: 0x0001, 0x5a5: 0x000c, 0x5a6: 0x000c, 0x5a7: 0x000c, 0x5a8: 0x0001, 0x5a9: 0x000c, - 0x5aa: 0x000c, 0x5ab: 0x000c, 0x5ac: 0x000c, 0x5ad: 0x000c, 0x5ae: 0x0001, 0x5af: 0x0001, - 0x5b0: 0x0001, 0x5b1: 0x0001, 0x5b2: 0x0001, 0x5b3: 0x0001, 0x5b4: 0x0001, 0x5b5: 0x0001, - 0x5b6: 0x0001, 0x5b7: 0x0001, 0x5b8: 0x0001, 0x5b9: 0x0001, 0x5ba: 0x0001, 0x5bb: 0x0001, - 0x5bc: 0x0001, 0x5bd: 0x0001, 0x5be: 0x0001, 0x5bf: 0x0001, - // Block 0x17, offset 0x5c0 - 0x5c0: 0x0001, 0x5c1: 0x0001, 0x5c2: 0x0001, 0x5c3: 0x0001, 0x5c4: 0x0001, 0x5c5: 0x0001, - 0x5c6: 0x0001, 0x5c7: 0x0001, 0x5c8: 0x0001, 0x5c9: 0x0001, 0x5ca: 0x0001, 0x5cb: 0x0001, - 0x5cc: 0x0001, 0x5cd: 0x0001, 0x5ce: 0x0001, 0x5cf: 0x0001, 0x5d0: 0x0001, 0x5d1: 0x0001, - 0x5d2: 0x0001, 0x5d3: 0x0001, 0x5d4: 0x0001, 0x5d5: 0x0001, 0x5d6: 0x0001, 0x5d7: 0x0001, - 0x5d8: 0x0001, 0x5d9: 0x000c, 0x5da: 0x000c, 0x5db: 0x000c, 0x5dc: 0x0001, 0x5dd: 0x0001, - 0x5de: 0x0001, 0x5df: 0x0001, 0x5e0: 0x000d, 0x5e1: 0x000d, 0x5e2: 0x000d, 0x5e3: 0x000d, - 0x5e4: 0x000d, 0x5e5: 0x000d, 0x5e6: 0x000d, 0x5e7: 0x000d, 0x5e8: 0x000d, 0x5e9: 0x000d, - 0x5ea: 0x000d, 0x5eb: 0x000d, 0x5ec: 0x000d, 0x5ed: 0x000d, 0x5ee: 0x000d, 0x5ef: 0x000d, - 0x5f0: 0x0001, 0x5f1: 0x0001, 0x5f2: 0x0001, 0x5f3: 0x0001, 0x5f4: 0x0001, 0x5f5: 0x0001, - 0x5f6: 0x0001, 0x5f7: 0x0001, 0x5f8: 0x0001, 0x5f9: 0x0001, 0x5fa: 0x0001, 0x5fb: 0x0001, - 0x5fc: 0x0001, 0x5fd: 0x0001, 0x5fe: 0x0001, 0x5ff: 0x0001, - // Block 0x18, offset 0x600 - 0x600: 0x0001, 0x601: 0x0001, 0x602: 0x0001, 0x603: 0x0001, 0x604: 0x0001, 0x605: 0x0001, - 0x606: 0x0001, 0x607: 0x0001, 0x608: 0x0001, 0x609: 0x0001, 0x60a: 0x0001, 0x60b: 0x0001, - 0x60c: 0x0001, 0x60d: 0x0001, 0x60e: 0x0001, 0x60f: 0x0001, 0x610: 0x0001, 0x611: 0x0001, - 0x612: 0x0001, 0x613: 0x0001, 0x614: 0x0001, 0x615: 0x0001, 0x616: 0x0001, 0x617: 0x0001, - 0x618: 0x0001, 0x619: 0x0001, 0x61a: 0x0001, 0x61b: 0x0001, 0x61c: 0x0001, 0x61d: 0x0001, - 0x61e: 0x0001, 0x61f: 0x0001, 0x620: 0x000d, 0x621: 0x000d, 0x622: 0x000d, 0x623: 0x000d, - 0x624: 0x000d, 0x625: 0x000d, 0x626: 0x000d, 0x627: 0x000d, 0x628: 0x000d, 0x629: 0x000d, - 0x62a: 0x000d, 0x62b: 0x000d, 0x62c: 0x000d, 0x62d: 0x000d, 0x62e: 0x000d, 0x62f: 0x000d, - 0x630: 0x000d, 0x631: 0x000d, 0x632: 0x000d, 0x633: 0x000d, 0x634: 0x000d, 0x635: 0x000d, - 0x636: 0x000d, 0x637: 0x000d, 0x638: 0x000d, 0x639: 0x000d, 0x63a: 0x000d, 0x63b: 0x000d, - 0x63c: 0x000d, 0x63d: 0x000d, 0x63e: 0x000d, 0x63f: 0x000d, - // Block 0x19, offset 0x640 - 0x640: 0x000d, 0x641: 0x000d, 0x642: 0x000d, 0x643: 0x000d, 0x644: 0x000d, 0x645: 0x000d, - 0x646: 0x000d, 0x647: 0x000d, 0x648: 0x000d, 0x649: 0x000d, 0x64a: 0x000d, 0x64b: 0x000d, - 0x64c: 0x000d, 0x64d: 0x000d, 0x64e: 0x000d, 0x64f: 0x000d, 0x650: 0x000d, 0x651: 0x000d, - 0x652: 0x000d, 0x653: 0x000c, 0x654: 0x000c, 0x655: 0x000c, 0x656: 0x000c, 0x657: 0x000c, - 0x658: 0x000c, 0x659: 0x000c, 0x65a: 0x000c, 0x65b: 0x000c, 0x65c: 0x000c, 0x65d: 0x000c, - 0x65e: 0x000c, 0x65f: 0x000c, 0x660: 0x000c, 0x661: 0x000c, 0x662: 0x0005, 0x663: 0x000c, - 0x664: 0x000c, 0x665: 0x000c, 0x666: 0x000c, 0x667: 0x000c, 0x668: 0x000c, 0x669: 0x000c, - 0x66a: 0x000c, 0x66b: 0x000c, 0x66c: 0x000c, 0x66d: 0x000c, 0x66e: 0x000c, 0x66f: 0x000c, - 0x670: 0x000c, 0x671: 0x000c, 0x672: 0x000c, 0x673: 0x000c, 0x674: 0x000c, 0x675: 0x000c, - 0x676: 0x000c, 0x677: 0x000c, 0x678: 0x000c, 0x679: 0x000c, 0x67a: 0x000c, 0x67b: 0x000c, - 0x67c: 0x000c, 0x67d: 0x000c, 0x67e: 0x000c, 0x67f: 0x000c, - // Block 0x1a, offset 0x680 - 0x680: 0x000c, 0x681: 0x000c, 0x682: 0x000c, - 0x6ba: 0x000c, - 0x6bc: 0x000c, - // Block 0x1b, offset 0x6c0 - 0x6c1: 0x000c, 0x6c2: 0x000c, 0x6c3: 0x000c, 0x6c4: 0x000c, 0x6c5: 0x000c, - 0x6c6: 0x000c, 0x6c7: 0x000c, 0x6c8: 0x000c, - 0x6cd: 0x000c, 0x6d1: 0x000c, - 0x6d2: 0x000c, 0x6d3: 0x000c, 0x6d4: 0x000c, 0x6d5: 0x000c, 0x6d6: 0x000c, 0x6d7: 0x000c, - 0x6e2: 0x000c, 0x6e3: 0x000c, - // Block 0x1c, offset 0x700 - 0x701: 0x000c, - 0x73c: 0x000c, - // Block 0x1d, offset 0x740 - 0x741: 0x000c, 0x742: 0x000c, 0x743: 0x000c, 0x744: 0x000c, - 0x74d: 0x000c, - 0x762: 0x000c, 0x763: 0x000c, - 0x772: 0x0004, 0x773: 0x0004, - 0x77b: 0x0004, - 0x77e: 0x000c, - // Block 0x1e, offset 0x780 - 0x781: 0x000c, 0x782: 0x000c, - 0x7bc: 0x000c, - // Block 0x1f, offset 0x7c0 - 0x7c1: 0x000c, 0x7c2: 0x000c, - 0x7c7: 0x000c, 0x7c8: 0x000c, 0x7cb: 0x000c, - 0x7cc: 0x000c, 0x7cd: 0x000c, 0x7d1: 0x000c, - 0x7f0: 0x000c, 0x7f1: 0x000c, 0x7f5: 0x000c, - // Block 0x20, offset 0x800 - 0x801: 0x000c, 0x802: 0x000c, 0x803: 0x000c, 0x804: 0x000c, 0x805: 0x000c, - 0x807: 0x000c, 0x808: 0x000c, - 0x80d: 0x000c, - 0x822: 0x000c, 0x823: 0x000c, - 0x831: 0x0004, - 0x83a: 0x000c, 0x83b: 0x000c, - 0x83c: 0x000c, 0x83d: 0x000c, 0x83e: 0x000c, 0x83f: 0x000c, - // Block 0x21, offset 0x840 - 0x841: 0x000c, - 0x87c: 0x000c, 0x87f: 0x000c, - // Block 0x22, offset 0x880 - 0x881: 0x000c, 0x882: 0x000c, 0x883: 0x000c, 0x884: 0x000c, - 0x88d: 0x000c, - 0x895: 0x000c, 0x896: 0x000c, - 0x8a2: 0x000c, 0x8a3: 0x000c, - // Block 0x23, offset 0x8c0 - 0x8c2: 0x000c, - // Block 0x24, offset 0x900 - 0x900: 0x000c, - 0x90d: 0x000c, - 0x933: 0x000a, 0x934: 0x000a, 0x935: 0x000a, - 0x936: 0x000a, 0x937: 0x000a, 0x938: 0x000a, 0x939: 0x0004, 0x93a: 0x000a, - // Block 0x25, offset 0x940 - 0x940: 0x000c, 0x944: 0x000c, - 0x97e: 0x000c, 0x97f: 0x000c, - // Block 0x26, offset 0x980 - 0x980: 0x000c, - 0x986: 0x000c, 0x987: 0x000c, 0x988: 0x000c, 0x98a: 0x000c, 0x98b: 0x000c, - 0x98c: 0x000c, 0x98d: 0x000c, - 0x995: 0x000c, 0x996: 0x000c, - 0x9a2: 0x000c, 0x9a3: 0x000c, - 0x9b8: 0x000a, 0x9b9: 0x000a, 0x9ba: 0x000a, 0x9bb: 0x000a, - 0x9bc: 0x000a, 0x9bd: 0x000a, 0x9be: 0x000a, - // Block 0x27, offset 0x9c0 - 0x9cc: 0x000c, 0x9cd: 0x000c, - 0x9e2: 0x000c, 0x9e3: 0x000c, - // Block 0x28, offset 0xa00 - 0xa00: 0x000c, 0xa01: 0x000c, - 0xa3b: 0x000c, - 0xa3c: 0x000c, - // Block 0x29, offset 0xa40 - 0xa41: 0x000c, 0xa42: 0x000c, 0xa43: 0x000c, 0xa44: 0x000c, - 0xa4d: 0x000c, - 0xa62: 0x000c, 0xa63: 0x000c, - // Block 0x2a, offset 0xa80 - 0xa81: 0x000c, - // Block 0x2b, offset 0xac0 - 0xaca: 0x000c, - 0xad2: 0x000c, 0xad3: 0x000c, 0xad4: 0x000c, 0xad6: 0x000c, - // Block 0x2c, offset 0xb00 - 0xb31: 0x000c, 0xb34: 0x000c, 0xb35: 0x000c, - 0xb36: 0x000c, 0xb37: 0x000c, 0xb38: 0x000c, 0xb39: 0x000c, 0xb3a: 0x000c, - 0xb3f: 0x0004, - // Block 0x2d, offset 0xb40 - 0xb47: 0x000c, 0xb48: 0x000c, 0xb49: 0x000c, 0xb4a: 0x000c, 0xb4b: 0x000c, - 0xb4c: 0x000c, 0xb4d: 0x000c, 0xb4e: 0x000c, - // Block 0x2e, offset 0xb80 - 0xbb1: 0x000c, 0xbb4: 0x000c, 0xbb5: 0x000c, - 0xbb6: 0x000c, 0xbb7: 0x000c, 0xbb8: 0x000c, 0xbb9: 0x000c, 0xbba: 0x000c, 0xbbb: 0x000c, - 0xbbc: 0x000c, - // Block 0x2f, offset 0xbc0 - 0xbc8: 0x000c, 0xbc9: 0x000c, 0xbca: 0x000c, 0xbcb: 0x000c, - 0xbcc: 0x000c, 0xbcd: 0x000c, - // Block 0x30, offset 0xc00 - 0xc18: 0x000c, 0xc19: 0x000c, - 0xc35: 0x000c, - 0xc37: 0x000c, 0xc39: 0x000c, 0xc3a: 0x003a, 0xc3b: 0x002a, - 0xc3c: 0x003a, 0xc3d: 0x002a, - // Block 0x31, offset 0xc40 - 0xc71: 0x000c, 0xc72: 0x000c, 0xc73: 0x000c, 0xc74: 0x000c, 0xc75: 0x000c, - 0xc76: 0x000c, 0xc77: 0x000c, 0xc78: 0x000c, 0xc79: 0x000c, 0xc7a: 0x000c, 0xc7b: 0x000c, - 0xc7c: 0x000c, 0xc7d: 0x000c, 0xc7e: 0x000c, - // Block 0x32, offset 0xc80 - 0xc80: 0x000c, 0xc81: 0x000c, 0xc82: 0x000c, 0xc83: 0x000c, 0xc84: 0x000c, - 0xc86: 0x000c, 0xc87: 0x000c, - 0xc8d: 0x000c, 0xc8e: 0x000c, 0xc8f: 0x000c, 0xc90: 0x000c, 0xc91: 0x000c, - 0xc92: 0x000c, 0xc93: 0x000c, 0xc94: 0x000c, 0xc95: 0x000c, 0xc96: 0x000c, 0xc97: 0x000c, - 0xc99: 0x000c, 0xc9a: 0x000c, 0xc9b: 0x000c, 0xc9c: 0x000c, 0xc9d: 0x000c, - 0xc9e: 0x000c, 0xc9f: 0x000c, 0xca0: 0x000c, 0xca1: 0x000c, 0xca2: 0x000c, 0xca3: 0x000c, - 0xca4: 0x000c, 0xca5: 0x000c, 0xca6: 0x000c, 0xca7: 0x000c, 0xca8: 0x000c, 0xca9: 0x000c, - 0xcaa: 0x000c, 0xcab: 0x000c, 0xcac: 0x000c, 0xcad: 0x000c, 0xcae: 0x000c, 0xcaf: 0x000c, - 0xcb0: 0x000c, 0xcb1: 0x000c, 0xcb2: 0x000c, 0xcb3: 0x000c, 0xcb4: 0x000c, 0xcb5: 0x000c, - 0xcb6: 0x000c, 0xcb7: 0x000c, 0xcb8: 0x000c, 0xcb9: 0x000c, 0xcba: 0x000c, 0xcbb: 0x000c, - 0xcbc: 0x000c, - // Block 0x33, offset 0xcc0 - 0xcc6: 0x000c, - // Block 0x34, offset 0xd00 - 0xd2d: 0x000c, 0xd2e: 0x000c, 0xd2f: 0x000c, - 0xd30: 0x000c, 0xd32: 0x000c, 0xd33: 0x000c, 0xd34: 0x000c, 0xd35: 0x000c, - 0xd36: 0x000c, 0xd37: 0x000c, 0xd39: 0x000c, 0xd3a: 0x000c, - 0xd3d: 0x000c, 0xd3e: 0x000c, - // Block 0x35, offset 0xd40 - 0xd58: 0x000c, 0xd59: 0x000c, - 0xd5e: 0x000c, 0xd5f: 0x000c, 0xd60: 0x000c, - 0xd71: 0x000c, 0xd72: 0x000c, 0xd73: 0x000c, 0xd74: 0x000c, - // Block 0x36, offset 0xd80 - 0xd82: 0x000c, 0xd85: 0x000c, - 0xd86: 0x000c, - 0xd8d: 0x000c, - 0xd9d: 0x000c, - // Block 0x37, offset 0xdc0 - 0xddd: 0x000c, - 0xdde: 0x000c, 0xddf: 0x000c, - // Block 0x38, offset 0xe00 - 0xe10: 0x000a, 0xe11: 0x000a, - 0xe12: 0x000a, 0xe13: 0x000a, 0xe14: 0x000a, 0xe15: 0x000a, 0xe16: 0x000a, 0xe17: 0x000a, - 0xe18: 0x000a, 0xe19: 0x000a, - // Block 0x39, offset 0xe40 - 0xe40: 0x000a, - // Block 0x3a, offset 0xe80 - 0xe80: 0x0009, - 0xe9b: 0x007a, 0xe9c: 0x006a, - // Block 0x3b, offset 0xec0 - 0xed2: 0x000c, 0xed3: 0x000c, 0xed4: 0x000c, - 0xef2: 0x000c, 0xef3: 0x000c, 0xef4: 0x000c, - // Block 0x3c, offset 0xf00 - 0xf12: 0x000c, 0xf13: 0x000c, - 0xf32: 0x000c, 0xf33: 0x000c, - // Block 0x3d, offset 0xf40 - 0xf74: 0x000c, 0xf75: 0x000c, - 0xf77: 0x000c, 0xf78: 0x000c, 0xf79: 0x000c, 0xf7a: 0x000c, 0xf7b: 0x000c, - 0xf7c: 0x000c, 0xf7d: 0x000c, - // Block 0x3e, offset 0xf80 - 0xf86: 0x000c, 0xf89: 0x000c, 0xf8a: 0x000c, 0xf8b: 0x000c, - 0xf8c: 0x000c, 0xf8d: 0x000c, 0xf8e: 0x000c, 0xf8f: 0x000c, 0xf90: 0x000c, 0xf91: 0x000c, - 0xf92: 0x000c, 0xf93: 0x000c, - 0xf9b: 0x0004, 0xf9d: 0x000c, - 0xfb0: 0x000a, 0xfb1: 0x000a, 0xfb2: 0x000a, 0xfb3: 0x000a, 0xfb4: 0x000a, 0xfb5: 0x000a, - 0xfb6: 0x000a, 0xfb7: 0x000a, 0xfb8: 0x000a, 0xfb9: 0x000a, - // Block 0x3f, offset 0xfc0 - 0xfc0: 0x000a, 0xfc1: 0x000a, 0xfc2: 0x000a, 0xfc3: 0x000a, 0xfc4: 0x000a, 0xfc5: 0x000a, - 0xfc6: 0x000a, 0xfc7: 0x000a, 0xfc8: 0x000a, 0xfc9: 0x000a, 0xfca: 0x000a, 0xfcb: 0x000c, - 0xfcc: 0x000c, 0xfcd: 0x000c, 0xfce: 0x000b, - // Block 0x40, offset 0x1000 - 0x1005: 0x000c, - 0x1006: 0x000c, - 0x1029: 0x000c, - // Block 0x41, offset 0x1040 - 0x1060: 0x000c, 0x1061: 0x000c, 0x1062: 0x000c, - 0x1067: 0x000c, 0x1068: 0x000c, - 0x1072: 0x000c, - 0x1079: 0x000c, 0x107a: 0x000c, 0x107b: 0x000c, - // Block 0x42, offset 0x1080 - 0x1080: 0x000a, 0x1084: 0x000a, 0x1085: 0x000a, - // Block 0x43, offset 0x10c0 - 0x10de: 0x000a, 0x10df: 0x000a, 0x10e0: 0x000a, 0x10e1: 0x000a, 0x10e2: 0x000a, 0x10e3: 0x000a, - 0x10e4: 0x000a, 0x10e5: 0x000a, 0x10e6: 0x000a, 0x10e7: 0x000a, 0x10e8: 0x000a, 0x10e9: 0x000a, - 0x10ea: 0x000a, 0x10eb: 0x000a, 0x10ec: 0x000a, 0x10ed: 0x000a, 0x10ee: 0x000a, 0x10ef: 0x000a, - 0x10f0: 0x000a, 0x10f1: 0x000a, 0x10f2: 0x000a, 0x10f3: 0x000a, 0x10f4: 0x000a, 0x10f5: 0x000a, - 0x10f6: 0x000a, 0x10f7: 0x000a, 0x10f8: 0x000a, 0x10f9: 0x000a, 0x10fa: 0x000a, 0x10fb: 0x000a, - 0x10fc: 0x000a, 0x10fd: 0x000a, 0x10fe: 0x000a, 0x10ff: 0x000a, - // Block 0x44, offset 0x1100 - 0x1117: 0x000c, - 0x1118: 0x000c, 0x111b: 0x000c, - // Block 0x45, offset 0x1140 - 0x1156: 0x000c, - 0x1158: 0x000c, 0x1159: 0x000c, 0x115a: 0x000c, 0x115b: 0x000c, 0x115c: 0x000c, 0x115d: 0x000c, - 0x115e: 0x000c, 0x1160: 0x000c, 0x1162: 0x000c, - 0x1165: 0x000c, 0x1166: 0x000c, 0x1167: 0x000c, 0x1168: 0x000c, 0x1169: 0x000c, - 0x116a: 0x000c, 0x116b: 0x000c, 0x116c: 0x000c, - 0x1173: 0x000c, 0x1174: 0x000c, 0x1175: 0x000c, - 0x1176: 0x000c, 0x1177: 0x000c, 0x1178: 0x000c, 0x1179: 0x000c, 0x117a: 0x000c, 0x117b: 0x000c, - 0x117c: 0x000c, 0x117f: 0x000c, - // Block 0x46, offset 0x1180 - 0x11b0: 0x000c, 0x11b1: 0x000c, 0x11b2: 0x000c, 0x11b3: 0x000c, 0x11b4: 0x000c, 0x11b5: 0x000c, - 0x11b6: 0x000c, 0x11b7: 0x000c, 0x11b8: 0x000c, 0x11b9: 0x000c, 0x11ba: 0x000c, 0x11bb: 0x000c, - 0x11bc: 0x000c, 0x11bd: 0x000c, 0x11be: 0x000c, 0x11bf: 0x000c, - // Block 0x47, offset 0x11c0 - 0x11c0: 0x000c, - // Block 0x48, offset 0x1200 - 0x1200: 0x000c, 0x1201: 0x000c, 0x1202: 0x000c, 0x1203: 0x000c, - 0x1234: 0x000c, - 0x1236: 0x000c, 0x1237: 0x000c, 0x1238: 0x000c, 0x1239: 0x000c, 0x123a: 0x000c, - 0x123c: 0x000c, - // Block 0x49, offset 0x1240 - 0x1242: 0x000c, - 0x126b: 0x000c, 0x126c: 0x000c, 0x126d: 0x000c, 0x126e: 0x000c, 0x126f: 0x000c, - 0x1270: 0x000c, 0x1271: 0x000c, 0x1272: 0x000c, 0x1273: 0x000c, - // Block 0x4a, offset 0x1280 - 0x1280: 0x000c, 0x1281: 0x000c, - 0x12a2: 0x000c, 0x12a3: 0x000c, - 0x12a4: 0x000c, 0x12a5: 0x000c, 0x12a8: 0x000c, 0x12a9: 0x000c, - 0x12ab: 0x000c, 0x12ac: 0x000c, 0x12ad: 0x000c, - // Block 0x4b, offset 0x12c0 - 0x12e6: 0x000c, 0x12e8: 0x000c, 0x12e9: 0x000c, - 0x12ed: 0x000c, 0x12ef: 0x000c, - 0x12f0: 0x000c, 0x12f1: 0x000c, - // Block 0x4c, offset 0x1300 - 0x132c: 0x000c, 0x132d: 0x000c, 0x132e: 0x000c, 0x132f: 0x000c, - 0x1330: 0x000c, 0x1331: 0x000c, 0x1332: 0x000c, 0x1333: 0x000c, - 0x1336: 0x000c, 0x1337: 0x000c, - // Block 0x4d, offset 0x1340 - 0x1350: 0x000c, 0x1351: 0x000c, - 0x1352: 0x000c, 0x1354: 0x000c, 0x1355: 0x000c, 0x1356: 0x000c, 0x1357: 0x000c, - 0x1358: 0x000c, 0x1359: 0x000c, 0x135a: 0x000c, 0x135b: 0x000c, 0x135c: 0x000c, 0x135d: 0x000c, - 0x135e: 0x000c, 0x135f: 0x000c, 0x1360: 0x000c, 0x1362: 0x000c, 0x1363: 0x000c, - 0x1364: 0x000c, 0x1365: 0x000c, 0x1366: 0x000c, 0x1367: 0x000c, 0x1368: 0x000c, - 0x136d: 0x000c, - 0x1374: 0x000c, - 0x1378: 0x000c, 0x1379: 0x000c, - // Block 0x4e, offset 0x1380 - 0x1380: 0x000c, 0x1381: 0x000c, 0x1382: 0x000c, 0x1383: 0x000c, 0x1384: 0x000c, 0x1385: 0x000c, - 0x1386: 0x000c, 0x1387: 0x000c, 0x1388: 0x000c, 0x1389: 0x000c, 0x138a: 0x000c, 0x138b: 0x000c, - 0x138c: 0x000c, 0x138d: 0x000c, 0x138e: 0x000c, 0x138f: 0x000c, 0x1390: 0x000c, 0x1391: 0x000c, - 0x1392: 0x000c, 0x1393: 0x000c, 0x1394: 0x000c, 0x1395: 0x000c, 0x1396: 0x000c, 0x1397: 0x000c, - 0x1398: 0x000c, 0x1399: 0x000c, 0x139a: 0x000c, 0x139b: 0x000c, 0x139c: 0x000c, 0x139d: 0x000c, - 0x139e: 0x000c, 0x139f: 0x000c, 0x13a0: 0x000c, 0x13a1: 0x000c, 0x13a2: 0x000c, 0x13a3: 0x000c, - 0x13a4: 0x000c, 0x13a5: 0x000c, 0x13a6: 0x000c, 0x13a7: 0x000c, 0x13a8: 0x000c, 0x13a9: 0x000c, - 0x13aa: 0x000c, 0x13ab: 0x000c, 0x13ac: 0x000c, 0x13ad: 0x000c, 0x13ae: 0x000c, 0x13af: 0x000c, - 0x13b0: 0x000c, 0x13b1: 0x000c, 0x13b2: 0x000c, 0x13b3: 0x000c, 0x13b4: 0x000c, 0x13b5: 0x000c, - 0x13b6: 0x000c, 0x13b7: 0x000c, 0x13b8: 0x000c, 0x13b9: 0x000c, 0x13bb: 0x000c, - 0x13bc: 0x000c, 0x13bd: 0x000c, 0x13be: 0x000c, 0x13bf: 0x000c, - // Block 0x4f, offset 0x13c0 - 0x13fd: 0x000a, 0x13ff: 0x000a, - // Block 0x50, offset 0x1400 - 0x1400: 0x000a, 0x1401: 0x000a, - 0x140d: 0x000a, 0x140e: 0x000a, 0x140f: 0x000a, - 0x141d: 0x000a, - 0x141e: 0x000a, 0x141f: 0x000a, - 0x142d: 0x000a, 0x142e: 0x000a, 0x142f: 0x000a, - 0x143d: 0x000a, 0x143e: 0x000a, - // Block 0x51, offset 0x1440 - 0x1440: 0x0009, 0x1441: 0x0009, 0x1442: 0x0009, 0x1443: 0x0009, 0x1444: 0x0009, 0x1445: 0x0009, - 0x1446: 0x0009, 0x1447: 0x0009, 0x1448: 0x0009, 0x1449: 0x0009, 0x144a: 0x0009, 0x144b: 0x000b, - 0x144c: 0x000b, 0x144d: 0x000b, 0x144f: 0x0001, 0x1450: 0x000a, 0x1451: 0x000a, - 0x1452: 0x000a, 0x1453: 0x000a, 0x1454: 0x000a, 0x1455: 0x000a, 0x1456: 0x000a, 0x1457: 0x000a, - 0x1458: 0x000a, 0x1459: 0x000a, 0x145a: 0x000a, 0x145b: 0x000a, 0x145c: 0x000a, 0x145d: 0x000a, - 0x145e: 0x000a, 0x145f: 0x000a, 0x1460: 0x000a, 0x1461: 0x000a, 0x1462: 0x000a, 0x1463: 0x000a, - 0x1464: 0x000a, 0x1465: 0x000a, 0x1466: 0x000a, 0x1467: 0x000a, 0x1468: 0x0009, 0x1469: 0x0007, - 0x146a: 0x000e, 0x146b: 0x000e, 0x146c: 0x000e, 0x146d: 0x000e, 0x146e: 0x000e, 0x146f: 0x0006, - 0x1470: 0x0004, 0x1471: 0x0004, 0x1472: 0x0004, 0x1473: 0x0004, 0x1474: 0x0004, 0x1475: 0x000a, - 0x1476: 0x000a, 0x1477: 0x000a, 0x1478: 0x000a, 0x1479: 0x000a, 0x147a: 0x000a, 0x147b: 0x000a, - 0x147c: 0x000a, 0x147d: 0x000a, 0x147e: 0x000a, 0x147f: 0x000a, - // Block 0x52, offset 0x1480 - 0x1480: 0x000a, 0x1481: 0x000a, 0x1482: 0x000a, 0x1483: 0x000a, 0x1484: 0x0006, 0x1485: 0x009a, - 0x1486: 0x008a, 0x1487: 0x000a, 0x1488: 0x000a, 0x1489: 0x000a, 0x148a: 0x000a, 0x148b: 0x000a, - 0x148c: 0x000a, 0x148d: 0x000a, 0x148e: 0x000a, 0x148f: 0x000a, 0x1490: 0x000a, 0x1491: 0x000a, - 0x1492: 0x000a, 0x1493: 0x000a, 0x1494: 0x000a, 0x1495: 0x000a, 0x1496: 0x000a, 0x1497: 0x000a, - 0x1498: 0x000a, 0x1499: 0x000a, 0x149a: 0x000a, 0x149b: 0x000a, 0x149c: 0x000a, 0x149d: 0x000a, - 0x149e: 0x000a, 0x149f: 0x0009, 0x14a0: 0x000b, 0x14a1: 0x000b, 0x14a2: 0x000b, 0x14a3: 0x000b, - 0x14a4: 0x000b, 0x14a5: 0x000b, 0x14a6: 0x000e, 0x14a7: 0x000e, 0x14a8: 0x000e, 0x14a9: 0x000e, - 0x14aa: 0x000b, 0x14ab: 0x000b, 0x14ac: 0x000b, 0x14ad: 0x000b, 0x14ae: 0x000b, 0x14af: 0x000b, - 0x14b0: 0x0002, 0x14b4: 0x0002, 0x14b5: 0x0002, - 0x14b6: 0x0002, 0x14b7: 0x0002, 0x14b8: 0x0002, 0x14b9: 0x0002, 0x14ba: 0x0003, 0x14bb: 0x0003, - 0x14bc: 0x000a, 0x14bd: 0x009a, 0x14be: 0x008a, - // Block 0x53, offset 0x14c0 - 0x14c0: 0x0002, 0x14c1: 0x0002, 0x14c2: 0x0002, 0x14c3: 0x0002, 0x14c4: 0x0002, 0x14c5: 0x0002, - 0x14c6: 0x0002, 0x14c7: 0x0002, 0x14c8: 0x0002, 0x14c9: 0x0002, 0x14ca: 0x0003, 0x14cb: 0x0003, - 0x14cc: 0x000a, 0x14cd: 0x009a, 0x14ce: 0x008a, - 0x14e0: 0x0004, 0x14e1: 0x0004, 0x14e2: 0x0004, 0x14e3: 0x0004, - 0x14e4: 0x0004, 0x14e5: 0x0004, 0x14e6: 0x0004, 0x14e7: 0x0004, 0x14e8: 0x0004, 0x14e9: 0x0004, - 0x14ea: 0x0004, 0x14eb: 0x0004, 0x14ec: 0x0004, 0x14ed: 0x0004, 0x14ee: 0x0004, 0x14ef: 0x0004, - 0x14f0: 0x0004, 0x14f1: 0x0004, 0x14f2: 0x0004, 0x14f3: 0x0004, 0x14f4: 0x0004, 0x14f5: 0x0004, - 0x14f6: 0x0004, 0x14f7: 0x0004, 0x14f8: 0x0004, 0x14f9: 0x0004, 0x14fa: 0x0004, 0x14fb: 0x0004, - 0x14fc: 0x0004, 0x14fd: 0x0004, 0x14fe: 0x0004, 0x14ff: 0x0004, - // Block 0x54, offset 0x1500 - 0x1500: 0x0004, 0x1501: 0x0004, 0x1502: 0x0004, 0x1503: 0x0004, 0x1504: 0x0004, 0x1505: 0x0004, - 0x1506: 0x0004, 0x1507: 0x0004, 0x1508: 0x0004, 0x1509: 0x0004, 0x150a: 0x0004, 0x150b: 0x0004, - 0x150c: 0x0004, 0x150d: 0x0004, 0x150e: 0x0004, 0x150f: 0x0004, 0x1510: 0x000c, 0x1511: 0x000c, - 0x1512: 0x000c, 0x1513: 0x000c, 0x1514: 0x000c, 0x1515: 0x000c, 0x1516: 0x000c, 0x1517: 0x000c, - 0x1518: 0x000c, 0x1519: 0x000c, 0x151a: 0x000c, 0x151b: 0x000c, 0x151c: 0x000c, 0x151d: 0x000c, - 0x151e: 0x000c, 0x151f: 0x000c, 0x1520: 0x000c, 0x1521: 0x000c, 0x1522: 0x000c, 0x1523: 0x000c, - 0x1524: 0x000c, 0x1525: 0x000c, 0x1526: 0x000c, 0x1527: 0x000c, 0x1528: 0x000c, 0x1529: 0x000c, - 0x152a: 0x000c, 0x152b: 0x000c, 0x152c: 0x000c, 0x152d: 0x000c, 0x152e: 0x000c, 0x152f: 0x000c, - 0x1530: 0x000c, - // Block 0x55, offset 0x1540 - 0x1540: 0x000a, 0x1541: 0x000a, 0x1543: 0x000a, 0x1544: 0x000a, 0x1545: 0x000a, - 0x1546: 0x000a, 0x1548: 0x000a, 0x1549: 0x000a, - 0x1554: 0x000a, 0x1556: 0x000a, 0x1557: 0x000a, - 0x1558: 0x000a, - 0x155e: 0x000a, 0x155f: 0x000a, 0x1560: 0x000a, 0x1561: 0x000a, 0x1562: 0x000a, 0x1563: 0x000a, - 0x1565: 0x000a, 0x1567: 0x000a, 0x1569: 0x000a, - 0x156e: 0x0004, - 0x157a: 0x000a, 0x157b: 0x000a, - // Block 0x56, offset 0x1580 - 0x1580: 0x000a, 0x1581: 0x000a, 0x1582: 0x000a, 0x1583: 0x000a, 0x1584: 0x000a, - 0x158a: 0x000a, 0x158b: 0x000a, - 0x158c: 0x000a, 0x158d: 0x000a, 0x1590: 0x000a, 0x1591: 0x000a, - 0x1592: 0x000a, 0x1593: 0x000a, 0x1594: 0x000a, 0x1595: 0x000a, 0x1596: 0x000a, 0x1597: 0x000a, - 0x1598: 0x000a, 0x1599: 0x000a, 0x159a: 0x000a, 0x159b: 0x000a, 0x159c: 0x000a, 0x159d: 0x000a, - 0x159e: 0x000a, 0x159f: 0x000a, - // Block 0x57, offset 0x15c0 - 0x15c9: 0x000a, 0x15ca: 0x000a, 0x15cb: 0x000a, - 0x15d0: 0x000a, 0x15d1: 0x000a, - 0x15d2: 0x000a, 0x15d3: 0x000a, 0x15d4: 0x000a, 0x15d5: 0x000a, 0x15d6: 0x000a, 0x15d7: 0x000a, - 0x15d8: 0x000a, 0x15d9: 0x000a, 0x15da: 0x000a, 0x15db: 0x000a, 0x15dc: 0x000a, 0x15dd: 0x000a, - 0x15de: 0x000a, 0x15df: 0x000a, 0x15e0: 0x000a, 0x15e1: 0x000a, 0x15e2: 0x000a, 0x15e3: 0x000a, - 0x15e4: 0x000a, 0x15e5: 0x000a, 0x15e6: 0x000a, 0x15e7: 0x000a, 0x15e8: 0x000a, 0x15e9: 0x000a, - 0x15ea: 0x000a, 0x15eb: 0x000a, 0x15ec: 0x000a, 0x15ed: 0x000a, 0x15ee: 0x000a, 0x15ef: 0x000a, - 0x15f0: 0x000a, 0x15f1: 0x000a, 0x15f2: 0x000a, 0x15f3: 0x000a, 0x15f4: 0x000a, 0x15f5: 0x000a, - 0x15f6: 0x000a, 0x15f7: 0x000a, 0x15f8: 0x000a, 0x15f9: 0x000a, 0x15fa: 0x000a, 0x15fb: 0x000a, - 0x15fc: 0x000a, 0x15fd: 0x000a, 0x15fe: 0x000a, 0x15ff: 0x000a, - // Block 0x58, offset 0x1600 - 0x1600: 0x000a, 0x1601: 0x000a, 0x1602: 0x000a, 0x1603: 0x000a, 0x1604: 0x000a, 0x1605: 0x000a, - 0x1606: 0x000a, 0x1607: 0x000a, 0x1608: 0x000a, 0x1609: 0x000a, 0x160a: 0x000a, 0x160b: 0x000a, - 0x160c: 0x000a, 0x160d: 0x000a, 0x160e: 0x000a, 0x160f: 0x000a, 0x1610: 0x000a, 0x1611: 0x000a, - 0x1612: 0x000a, 0x1613: 0x000a, 0x1614: 0x000a, 0x1615: 0x000a, 0x1616: 0x000a, 0x1617: 0x000a, - 0x1618: 0x000a, 0x1619: 0x000a, 0x161a: 0x000a, 0x161b: 0x000a, 0x161c: 0x000a, 0x161d: 0x000a, - 0x161e: 0x000a, 0x161f: 0x000a, 0x1620: 0x000a, 0x1621: 0x000a, 0x1622: 0x000a, 0x1623: 0x000a, - 0x1624: 0x000a, 0x1625: 0x000a, 0x1626: 0x000a, 0x1627: 0x000a, 0x1628: 0x000a, 0x1629: 0x000a, - 0x162a: 0x000a, 0x162b: 0x000a, 0x162c: 0x000a, 0x162d: 0x000a, 0x162e: 0x000a, 0x162f: 0x000a, - 0x1630: 0x000a, 0x1631: 0x000a, 0x1632: 0x000a, 0x1633: 0x000a, 0x1634: 0x000a, 0x1635: 0x000a, - 0x1636: 0x000a, 0x1637: 0x000a, 0x1638: 0x000a, 0x1639: 0x000a, 0x163a: 0x000a, 0x163b: 0x000a, - 0x163c: 0x000a, 0x163d: 0x000a, 0x163e: 0x000a, 0x163f: 0x000a, - // Block 0x59, offset 0x1640 - 0x1640: 0x000a, 0x1641: 0x000a, 0x1642: 0x000a, 0x1643: 0x000a, 0x1644: 0x000a, 0x1645: 0x000a, - 0x1646: 0x000a, 0x1647: 0x000a, 0x1648: 0x000a, 0x1649: 0x000a, 0x164a: 0x000a, 0x164b: 0x000a, - 0x164c: 0x000a, 0x164d: 0x000a, 0x164e: 0x000a, 0x164f: 0x000a, 0x1650: 0x000a, 0x1651: 0x000a, - 0x1652: 0x0003, 0x1653: 0x0004, 0x1654: 0x000a, 0x1655: 0x000a, 0x1656: 0x000a, 0x1657: 0x000a, - 0x1658: 0x000a, 0x1659: 0x000a, 0x165a: 0x000a, 0x165b: 0x000a, 0x165c: 0x000a, 0x165d: 0x000a, - 0x165e: 0x000a, 0x165f: 0x000a, 0x1660: 0x000a, 0x1661: 0x000a, 0x1662: 0x000a, 0x1663: 0x000a, - 0x1664: 0x000a, 0x1665: 0x000a, 0x1666: 0x000a, 0x1667: 0x000a, 0x1668: 0x000a, 0x1669: 0x000a, - 0x166a: 0x000a, 0x166b: 0x000a, 0x166c: 0x000a, 0x166d: 0x000a, 0x166e: 0x000a, 0x166f: 0x000a, - 0x1670: 0x000a, 0x1671: 0x000a, 0x1672: 0x000a, 0x1673: 0x000a, 0x1674: 0x000a, 0x1675: 0x000a, - 0x1676: 0x000a, 0x1677: 0x000a, 0x1678: 0x000a, 0x1679: 0x000a, 0x167a: 0x000a, 0x167b: 0x000a, - 0x167c: 0x000a, 0x167d: 0x000a, 0x167e: 0x000a, 0x167f: 0x000a, - // Block 0x5a, offset 0x1680 - 0x1680: 0x000a, 0x1681: 0x000a, 0x1682: 0x000a, 0x1683: 0x000a, 0x1684: 0x000a, 0x1685: 0x000a, - 0x1686: 0x000a, 0x1687: 0x000a, 0x1688: 0x003a, 0x1689: 0x002a, 0x168a: 0x003a, 0x168b: 0x002a, - 0x168c: 0x000a, 0x168d: 0x000a, 0x168e: 0x000a, 0x168f: 0x000a, 0x1690: 0x000a, 0x1691: 0x000a, - 0x1692: 0x000a, 0x1693: 0x000a, 0x1694: 0x000a, 0x1695: 0x000a, 0x1696: 0x000a, 0x1697: 0x000a, - 0x1698: 0x000a, 0x1699: 0x000a, 0x169a: 0x000a, 0x169b: 0x000a, 0x169c: 0x000a, 0x169d: 0x000a, - 0x169e: 0x000a, 0x169f: 0x000a, 0x16a0: 0x000a, 0x16a1: 0x000a, 0x16a2: 0x000a, 0x16a3: 0x000a, - 0x16a4: 0x000a, 0x16a5: 0x000a, 0x16a6: 0x000a, 0x16a7: 0x000a, 0x16a8: 0x000a, 0x16a9: 0x009a, - 0x16aa: 0x008a, 0x16ab: 0x000a, 0x16ac: 0x000a, 0x16ad: 0x000a, 0x16ae: 0x000a, 0x16af: 0x000a, - 0x16b0: 0x000a, 0x16b1: 0x000a, 0x16b2: 0x000a, 0x16b3: 0x000a, 0x16b4: 0x000a, 0x16b5: 0x000a, - // Block 0x5b, offset 0x16c0 - 0x16fb: 0x000a, - 0x16fc: 0x000a, 0x16fd: 0x000a, 0x16fe: 0x000a, 0x16ff: 0x000a, - // Block 0x5c, offset 0x1700 - 0x1700: 0x000a, 0x1701: 0x000a, 0x1702: 0x000a, 0x1703: 0x000a, 0x1704: 0x000a, 0x1705: 0x000a, - 0x1706: 0x000a, 0x1707: 0x000a, 0x1708: 0x000a, 0x1709: 0x000a, 0x170a: 0x000a, 0x170b: 0x000a, - 0x170c: 0x000a, 0x170d: 0x000a, 0x170e: 0x000a, 0x170f: 0x000a, 0x1710: 0x000a, 0x1711: 0x000a, - 0x1712: 0x000a, 0x1713: 0x000a, 0x1714: 0x000a, 0x1716: 0x000a, 0x1717: 0x000a, - 0x1718: 0x000a, 0x1719: 0x000a, 0x171a: 0x000a, 0x171b: 0x000a, 0x171c: 0x000a, 0x171d: 0x000a, - 0x171e: 0x000a, 0x171f: 0x000a, 0x1720: 0x000a, 0x1721: 0x000a, 0x1722: 0x000a, 0x1723: 0x000a, - 0x1724: 0x000a, 0x1725: 0x000a, 0x1726: 0x000a, 0x1727: 0x000a, 0x1728: 0x000a, 0x1729: 0x000a, - 0x172a: 0x000a, 0x172b: 0x000a, 0x172c: 0x000a, 0x172d: 0x000a, 0x172e: 0x000a, 0x172f: 0x000a, - 0x1730: 0x000a, 0x1731: 0x000a, 0x1732: 0x000a, 0x1733: 0x000a, 0x1734: 0x000a, 0x1735: 0x000a, - 0x1736: 0x000a, 0x1737: 0x000a, 0x1738: 0x000a, 0x1739: 0x000a, 0x173a: 0x000a, 0x173b: 0x000a, - 0x173c: 0x000a, 0x173d: 0x000a, 0x173e: 0x000a, 0x173f: 0x000a, - // Block 0x5d, offset 0x1740 - 0x1740: 0x000a, 0x1741: 0x000a, 0x1742: 0x000a, 0x1743: 0x000a, 0x1744: 0x000a, 0x1745: 0x000a, - 0x1746: 0x000a, 0x1747: 0x000a, 0x1748: 0x000a, 0x1749: 0x000a, 0x174a: 0x000a, 0x174b: 0x000a, - 0x174c: 0x000a, 0x174d: 0x000a, 0x174e: 0x000a, 0x174f: 0x000a, 0x1750: 0x000a, 0x1751: 0x000a, - 0x1752: 0x000a, 0x1753: 0x000a, 0x1754: 0x000a, 0x1755: 0x000a, 0x1756: 0x000a, 0x1757: 0x000a, - 0x1758: 0x000a, 0x1759: 0x000a, 0x175a: 0x000a, 0x175b: 0x000a, 0x175c: 0x000a, 0x175d: 0x000a, - 0x175e: 0x000a, 0x175f: 0x000a, 0x1760: 0x000a, 0x1761: 0x000a, 0x1762: 0x000a, 0x1763: 0x000a, - 0x1764: 0x000a, 0x1765: 0x000a, 0x1766: 0x000a, - // Block 0x5e, offset 0x1780 - 0x1780: 0x000a, 0x1781: 0x000a, 0x1782: 0x000a, 0x1783: 0x000a, 0x1784: 0x000a, 0x1785: 0x000a, - 0x1786: 0x000a, 0x1787: 0x000a, 0x1788: 0x000a, 0x1789: 0x000a, 0x178a: 0x000a, - 0x17a0: 0x000a, 0x17a1: 0x000a, 0x17a2: 0x000a, 0x17a3: 0x000a, - 0x17a4: 0x000a, 0x17a5: 0x000a, 0x17a6: 0x000a, 0x17a7: 0x000a, 0x17a8: 0x000a, 0x17a9: 0x000a, - 0x17aa: 0x000a, 0x17ab: 0x000a, 0x17ac: 0x000a, 0x17ad: 0x000a, 0x17ae: 0x000a, 0x17af: 0x000a, - 0x17b0: 0x000a, 0x17b1: 0x000a, 0x17b2: 0x000a, 0x17b3: 0x000a, 0x17b4: 0x000a, 0x17b5: 0x000a, - 0x17b6: 0x000a, 0x17b7: 0x000a, 0x17b8: 0x000a, 0x17b9: 0x000a, 0x17ba: 0x000a, 0x17bb: 0x000a, - 0x17bc: 0x000a, 0x17bd: 0x000a, 0x17be: 0x000a, 0x17bf: 0x000a, - // Block 0x5f, offset 0x17c0 - 0x17c0: 0x000a, 0x17c1: 0x000a, 0x17c2: 0x000a, 0x17c3: 0x000a, 0x17c4: 0x000a, 0x17c5: 0x000a, - 0x17c6: 0x000a, 0x17c7: 0x000a, 0x17c8: 0x0002, 0x17c9: 0x0002, 0x17ca: 0x0002, 0x17cb: 0x0002, - 0x17cc: 0x0002, 0x17cd: 0x0002, 0x17ce: 0x0002, 0x17cf: 0x0002, 0x17d0: 0x0002, 0x17d1: 0x0002, - 0x17d2: 0x0002, 0x17d3: 0x0002, 0x17d4: 0x0002, 0x17d5: 0x0002, 0x17d6: 0x0002, 0x17d7: 0x0002, - 0x17d8: 0x0002, 0x17d9: 0x0002, 0x17da: 0x0002, 0x17db: 0x0002, - // Block 0x60, offset 0x1800 - 0x182a: 0x000a, 0x182b: 0x000a, 0x182c: 0x000a, 0x182d: 0x000a, 0x182e: 0x000a, 0x182f: 0x000a, - 0x1830: 0x000a, 0x1831: 0x000a, 0x1832: 0x000a, 0x1833: 0x000a, 0x1834: 0x000a, 0x1835: 0x000a, - 0x1836: 0x000a, 0x1837: 0x000a, 0x1838: 0x000a, 0x1839: 0x000a, 0x183a: 0x000a, 0x183b: 0x000a, - 0x183c: 0x000a, 0x183d: 0x000a, 0x183e: 0x000a, 0x183f: 0x000a, - // Block 0x61, offset 0x1840 - 0x1840: 0x000a, 0x1841: 0x000a, 0x1842: 0x000a, 0x1843: 0x000a, 0x1844: 0x000a, 0x1845: 0x000a, - 0x1846: 0x000a, 0x1847: 0x000a, 0x1848: 0x000a, 0x1849: 0x000a, 0x184a: 0x000a, 0x184b: 0x000a, - 0x184c: 0x000a, 0x184d: 0x000a, 0x184e: 0x000a, 0x184f: 0x000a, 0x1850: 0x000a, 0x1851: 0x000a, - 0x1852: 0x000a, 0x1853: 0x000a, 0x1854: 0x000a, 0x1855: 0x000a, 0x1856: 0x000a, 0x1857: 0x000a, - 0x1858: 0x000a, 0x1859: 0x000a, 0x185a: 0x000a, 0x185b: 0x000a, 0x185c: 0x000a, 0x185d: 0x000a, - 0x185e: 0x000a, 0x185f: 0x000a, 0x1860: 0x000a, 0x1861: 0x000a, 0x1862: 0x000a, 0x1863: 0x000a, - 0x1864: 0x000a, 0x1865: 0x000a, 0x1866: 0x000a, 0x1867: 0x000a, 0x1868: 0x000a, 0x1869: 0x000a, - 0x186a: 0x000a, 0x186b: 0x000a, 0x186d: 0x000a, 0x186e: 0x000a, 0x186f: 0x000a, - 0x1870: 0x000a, 0x1871: 0x000a, 0x1872: 0x000a, 0x1873: 0x000a, 0x1874: 0x000a, 0x1875: 0x000a, - 0x1876: 0x000a, 0x1877: 0x000a, 0x1878: 0x000a, 0x1879: 0x000a, 0x187a: 0x000a, 0x187b: 0x000a, - 0x187c: 0x000a, 0x187d: 0x000a, 0x187e: 0x000a, 0x187f: 0x000a, - // Block 0x62, offset 0x1880 - 0x1880: 0x000a, 0x1881: 0x000a, 0x1882: 0x000a, 0x1883: 0x000a, 0x1884: 0x000a, 0x1885: 0x000a, - 0x1886: 0x000a, 0x1887: 0x000a, 0x1888: 0x000a, 0x1889: 0x000a, 0x188a: 0x000a, 0x188b: 0x000a, - 0x188c: 0x000a, 0x188d: 0x000a, 0x188e: 0x000a, 0x188f: 0x000a, 0x1890: 0x000a, 0x1891: 0x000a, - 0x1892: 0x000a, 0x1893: 0x000a, 0x1894: 0x000a, 0x1895: 0x000a, 0x1896: 0x000a, 0x1897: 0x000a, - 0x1898: 0x000a, 0x1899: 0x000a, 0x189a: 0x000a, 0x189b: 0x000a, 0x189c: 0x000a, 0x189d: 0x000a, - 0x189e: 0x000a, 0x189f: 0x000a, 0x18a0: 0x000a, 0x18a1: 0x000a, 0x18a2: 0x000a, 0x18a3: 0x000a, - 0x18a4: 0x000a, 0x18a5: 0x000a, 0x18a6: 0x000a, 0x18a7: 0x000a, 0x18a8: 0x003a, 0x18a9: 0x002a, - 0x18aa: 0x003a, 0x18ab: 0x002a, 0x18ac: 0x003a, 0x18ad: 0x002a, 0x18ae: 0x003a, 0x18af: 0x002a, - 0x18b0: 0x003a, 0x18b1: 0x002a, 0x18b2: 0x003a, 0x18b3: 0x002a, 0x18b4: 0x003a, 0x18b5: 0x002a, - 0x18b6: 0x000a, 0x18b7: 0x000a, 0x18b8: 0x000a, 0x18b9: 0x000a, 0x18ba: 0x000a, 0x18bb: 0x000a, - 0x18bc: 0x000a, 0x18bd: 0x000a, 0x18be: 0x000a, 0x18bf: 0x000a, - // Block 0x63, offset 0x18c0 - 0x18c0: 0x000a, 0x18c1: 0x000a, 0x18c2: 0x000a, 0x18c3: 0x000a, 0x18c4: 0x000a, 0x18c5: 0x009a, - 0x18c6: 0x008a, 0x18c7: 0x000a, 0x18c8: 0x000a, 0x18c9: 0x000a, 0x18ca: 0x000a, 0x18cb: 0x000a, - 0x18cc: 0x000a, 0x18cd: 0x000a, 0x18ce: 0x000a, 0x18cf: 0x000a, 0x18d0: 0x000a, 0x18d1: 0x000a, - 0x18d2: 0x000a, 0x18d3: 0x000a, 0x18d4: 0x000a, 0x18d5: 0x000a, 0x18d6: 0x000a, 0x18d7: 0x000a, - 0x18d8: 0x000a, 0x18d9: 0x000a, 0x18da: 0x000a, 0x18db: 0x000a, 0x18dc: 0x000a, 0x18dd: 0x000a, - 0x18de: 0x000a, 0x18df: 0x000a, 0x18e0: 0x000a, 0x18e1: 0x000a, 0x18e2: 0x000a, 0x18e3: 0x000a, - 0x18e4: 0x000a, 0x18e5: 0x000a, 0x18e6: 0x003a, 0x18e7: 0x002a, 0x18e8: 0x003a, 0x18e9: 0x002a, - 0x18ea: 0x003a, 0x18eb: 0x002a, 0x18ec: 0x003a, 0x18ed: 0x002a, 0x18ee: 0x003a, 0x18ef: 0x002a, - 0x18f0: 0x000a, 0x18f1: 0x000a, 0x18f2: 0x000a, 0x18f3: 0x000a, 0x18f4: 0x000a, 0x18f5: 0x000a, - 0x18f6: 0x000a, 0x18f7: 0x000a, 0x18f8: 0x000a, 0x18f9: 0x000a, 0x18fa: 0x000a, 0x18fb: 0x000a, - 0x18fc: 0x000a, 0x18fd: 0x000a, 0x18fe: 0x000a, 0x18ff: 0x000a, - // Block 0x64, offset 0x1900 - 0x1900: 0x000a, 0x1901: 0x000a, 0x1902: 0x000a, 0x1903: 0x007a, 0x1904: 0x006a, 0x1905: 0x009a, - 0x1906: 0x008a, 0x1907: 0x00ba, 0x1908: 0x00aa, 0x1909: 0x009a, 0x190a: 0x008a, 0x190b: 0x007a, - 0x190c: 0x006a, 0x190d: 0x00da, 0x190e: 0x002a, 0x190f: 0x003a, 0x1910: 0x00ca, 0x1911: 0x009a, - 0x1912: 0x008a, 0x1913: 0x007a, 0x1914: 0x006a, 0x1915: 0x009a, 0x1916: 0x008a, 0x1917: 0x00ba, - 0x1918: 0x00aa, 0x1919: 0x000a, 0x191a: 0x000a, 0x191b: 0x000a, 0x191c: 0x000a, 0x191d: 0x000a, - 0x191e: 0x000a, 0x191f: 0x000a, 0x1920: 0x000a, 0x1921: 0x000a, 0x1922: 0x000a, 0x1923: 0x000a, - 0x1924: 0x000a, 0x1925: 0x000a, 0x1926: 0x000a, 0x1927: 0x000a, 0x1928: 0x000a, 0x1929: 0x000a, - 0x192a: 0x000a, 0x192b: 0x000a, 0x192c: 0x000a, 0x192d: 0x000a, 0x192e: 0x000a, 0x192f: 0x000a, - 0x1930: 0x000a, 0x1931: 0x000a, 0x1932: 0x000a, 0x1933: 0x000a, 0x1934: 0x000a, 0x1935: 0x000a, - 0x1936: 0x000a, 0x1937: 0x000a, 0x1938: 0x000a, 0x1939: 0x000a, 0x193a: 0x000a, 0x193b: 0x000a, - 0x193c: 0x000a, 0x193d: 0x000a, 0x193e: 0x000a, 0x193f: 0x000a, - // Block 0x65, offset 0x1940 - 0x1940: 0x000a, 0x1941: 0x000a, 0x1942: 0x000a, 0x1943: 0x000a, 0x1944: 0x000a, 0x1945: 0x000a, - 0x1946: 0x000a, 0x1947: 0x000a, 0x1948: 0x000a, 0x1949: 0x000a, 0x194a: 0x000a, 0x194b: 0x000a, - 0x194c: 0x000a, 0x194d: 0x000a, 0x194e: 0x000a, 0x194f: 0x000a, 0x1950: 0x000a, 0x1951: 0x000a, - 0x1952: 0x000a, 0x1953: 0x000a, 0x1954: 0x000a, 0x1955: 0x000a, 0x1956: 0x000a, 0x1957: 0x000a, - 0x1958: 0x003a, 0x1959: 0x002a, 0x195a: 0x003a, 0x195b: 0x002a, 0x195c: 0x000a, 0x195d: 0x000a, - 0x195e: 0x000a, 0x195f: 0x000a, 0x1960: 0x000a, 0x1961: 0x000a, 0x1962: 0x000a, 0x1963: 0x000a, - 0x1964: 0x000a, 0x1965: 0x000a, 0x1966: 0x000a, 0x1967: 0x000a, 0x1968: 0x000a, 0x1969: 0x000a, - 0x196a: 0x000a, 0x196b: 0x000a, 0x196c: 0x000a, 0x196d: 0x000a, 0x196e: 0x000a, 0x196f: 0x000a, - 0x1970: 0x000a, 0x1971: 0x000a, 0x1972: 0x000a, 0x1973: 0x000a, 0x1974: 0x000a, 0x1975: 0x000a, - 0x1976: 0x000a, 0x1977: 0x000a, 0x1978: 0x000a, 0x1979: 0x000a, 0x197a: 0x000a, 0x197b: 0x000a, - 0x197c: 0x003a, 0x197d: 0x002a, 0x197e: 0x000a, 0x197f: 0x000a, - // Block 0x66, offset 0x1980 - 0x1980: 0x000a, 0x1981: 0x000a, 0x1982: 0x000a, 0x1983: 0x000a, 0x1984: 0x000a, 0x1985: 0x000a, - 0x1986: 0x000a, 0x1987: 0x000a, 0x1988: 0x000a, 0x1989: 0x000a, 0x198a: 0x000a, 0x198b: 0x000a, - 0x198c: 0x000a, 0x198d: 0x000a, 0x198e: 0x000a, 0x198f: 0x000a, 0x1990: 0x000a, 0x1991: 0x000a, - 0x1992: 0x000a, 0x1993: 0x000a, 0x1994: 0x000a, 0x1995: 0x000a, 0x1996: 0x000a, 0x1997: 0x000a, - 0x1998: 0x000a, 0x1999: 0x000a, 0x199a: 0x000a, 0x199b: 0x000a, 0x199c: 0x000a, 0x199d: 0x000a, - 0x199e: 0x000a, 0x199f: 0x000a, 0x19a0: 0x000a, 0x19a1: 0x000a, 0x19a2: 0x000a, 0x19a3: 0x000a, - 0x19a4: 0x000a, 0x19a5: 0x000a, 0x19a6: 0x000a, 0x19a7: 0x000a, 0x19a8: 0x000a, 0x19a9: 0x000a, - 0x19aa: 0x000a, 0x19ab: 0x000a, 0x19ac: 0x000a, 0x19ad: 0x000a, 0x19ae: 0x000a, 0x19af: 0x000a, - 0x19b0: 0x000a, 0x19b1: 0x000a, 0x19b2: 0x000a, 0x19b3: 0x000a, - 0x19b6: 0x000a, 0x19b7: 0x000a, 0x19b8: 0x000a, 0x19b9: 0x000a, 0x19ba: 0x000a, 0x19bb: 0x000a, - 0x19bc: 0x000a, 0x19bd: 0x000a, 0x19be: 0x000a, 0x19bf: 0x000a, - // Block 0x67, offset 0x19c0 - 0x19c0: 0x000a, 0x19c1: 0x000a, 0x19c2: 0x000a, 0x19c3: 0x000a, 0x19c4: 0x000a, 0x19c5: 0x000a, - 0x19c6: 0x000a, 0x19c7: 0x000a, 0x19c8: 0x000a, 0x19c9: 0x000a, 0x19ca: 0x000a, 0x19cb: 0x000a, - 0x19cc: 0x000a, 0x19cd: 0x000a, 0x19ce: 0x000a, 0x19cf: 0x000a, 0x19d0: 0x000a, 0x19d1: 0x000a, - 0x19d2: 0x000a, 0x19d3: 0x000a, 0x19d4: 0x000a, 0x19d5: 0x000a, 0x19d7: 0x000a, - 0x19d8: 0x000a, 0x19d9: 0x000a, 0x19da: 0x000a, 0x19db: 0x000a, 0x19dc: 0x000a, 0x19dd: 0x000a, - 0x19de: 0x000a, 0x19df: 0x000a, 0x19e0: 0x000a, 0x19e1: 0x000a, 0x19e2: 0x000a, 0x19e3: 0x000a, - 0x19e4: 0x000a, 0x19e5: 0x000a, 0x19e6: 0x000a, 0x19e7: 0x000a, 0x19e8: 0x000a, 0x19e9: 0x000a, - 0x19ea: 0x000a, 0x19eb: 0x000a, 0x19ec: 0x000a, 0x19ed: 0x000a, 0x19ee: 0x000a, 0x19ef: 0x000a, - 0x19f0: 0x000a, 0x19f1: 0x000a, 0x19f2: 0x000a, 0x19f3: 0x000a, 0x19f4: 0x000a, 0x19f5: 0x000a, - 0x19f6: 0x000a, 0x19f7: 0x000a, 0x19f8: 0x000a, 0x19f9: 0x000a, 0x19fa: 0x000a, 0x19fb: 0x000a, - 0x19fc: 0x000a, 0x19fd: 0x000a, 0x19fe: 0x000a, 0x19ff: 0x000a, - // Block 0x68, offset 0x1a00 - 0x1a25: 0x000a, 0x1a26: 0x000a, 0x1a27: 0x000a, 0x1a28: 0x000a, 0x1a29: 0x000a, - 0x1a2a: 0x000a, 0x1a2f: 0x000c, - 0x1a30: 0x000c, 0x1a31: 0x000c, - 0x1a39: 0x000a, 0x1a3a: 0x000a, 0x1a3b: 0x000a, - 0x1a3c: 0x000a, 0x1a3d: 0x000a, 0x1a3e: 0x000a, 0x1a3f: 0x000a, - // Block 0x69, offset 0x1a40 - 0x1a7f: 0x000c, - // Block 0x6a, offset 0x1a80 - 0x1aa0: 0x000c, 0x1aa1: 0x000c, 0x1aa2: 0x000c, 0x1aa3: 0x000c, - 0x1aa4: 0x000c, 0x1aa5: 0x000c, 0x1aa6: 0x000c, 0x1aa7: 0x000c, 0x1aa8: 0x000c, 0x1aa9: 0x000c, - 0x1aaa: 0x000c, 0x1aab: 0x000c, 0x1aac: 0x000c, 0x1aad: 0x000c, 0x1aae: 0x000c, 0x1aaf: 0x000c, - 0x1ab0: 0x000c, 0x1ab1: 0x000c, 0x1ab2: 0x000c, 0x1ab3: 0x000c, 0x1ab4: 0x000c, 0x1ab5: 0x000c, - 0x1ab6: 0x000c, 0x1ab7: 0x000c, 0x1ab8: 0x000c, 0x1ab9: 0x000c, 0x1aba: 0x000c, 0x1abb: 0x000c, - 0x1abc: 0x000c, 0x1abd: 0x000c, 0x1abe: 0x000c, 0x1abf: 0x000c, - // Block 0x6b, offset 0x1ac0 - 0x1ac0: 0x000a, 0x1ac1: 0x000a, 0x1ac2: 0x000a, 0x1ac3: 0x000a, 0x1ac4: 0x000a, 0x1ac5: 0x000a, - 0x1ac6: 0x000a, 0x1ac7: 0x000a, 0x1ac8: 0x000a, 0x1ac9: 0x000a, 0x1aca: 0x000a, 0x1acb: 0x000a, - 0x1acc: 0x000a, 0x1acd: 0x000a, 0x1ace: 0x000a, 0x1acf: 0x000a, 0x1ad0: 0x000a, 0x1ad1: 0x000a, - 0x1ad2: 0x000a, 0x1ad3: 0x000a, 0x1ad4: 0x000a, 0x1ad5: 0x000a, 0x1ad6: 0x000a, 0x1ad7: 0x000a, - 0x1ad8: 0x000a, 0x1ad9: 0x000a, 0x1ada: 0x000a, 0x1adb: 0x000a, 0x1adc: 0x000a, 0x1add: 0x000a, - 0x1ade: 0x000a, 0x1adf: 0x000a, 0x1ae0: 0x000a, 0x1ae1: 0x000a, 0x1ae2: 0x003a, 0x1ae3: 0x002a, - 0x1ae4: 0x003a, 0x1ae5: 0x002a, 0x1ae6: 0x003a, 0x1ae7: 0x002a, 0x1ae8: 0x003a, 0x1ae9: 0x002a, - 0x1aea: 0x000a, 0x1aeb: 0x000a, 0x1aec: 0x000a, 0x1aed: 0x000a, 0x1aee: 0x000a, 0x1aef: 0x000a, - 0x1af0: 0x000a, 0x1af1: 0x000a, 0x1af2: 0x000a, 0x1af3: 0x000a, 0x1af4: 0x000a, 0x1af5: 0x000a, - 0x1af6: 0x000a, 0x1af7: 0x000a, 0x1af8: 0x000a, 0x1af9: 0x000a, 0x1afa: 0x000a, 0x1afb: 0x000a, - 0x1afc: 0x000a, 0x1afd: 0x000a, 0x1afe: 0x000a, 0x1aff: 0x000a, - // Block 0x6c, offset 0x1b00 - 0x1b00: 0x000a, 0x1b01: 0x000a, 0x1b02: 0x000a, 0x1b03: 0x000a, 0x1b04: 0x000a, 0x1b05: 0x000a, - 0x1b06: 0x000a, 0x1b07: 0x000a, 0x1b08: 0x000a, 0x1b09: 0x000a, 0x1b0a: 0x000a, 0x1b0b: 0x000a, - 0x1b0c: 0x000a, 0x1b0d: 0x000a, 0x1b0e: 0x000a, 0x1b0f: 0x000a, 0x1b10: 0x000a, 0x1b11: 0x000a, - 0x1b12: 0x000a, - // Block 0x6d, offset 0x1b40 - 0x1b40: 0x000a, 0x1b41: 0x000a, 0x1b42: 0x000a, 0x1b43: 0x000a, 0x1b44: 0x000a, 0x1b45: 0x000a, - 0x1b46: 0x000a, 0x1b47: 0x000a, 0x1b48: 0x000a, 0x1b49: 0x000a, 0x1b4a: 0x000a, 0x1b4b: 0x000a, - 0x1b4c: 0x000a, 0x1b4d: 0x000a, 0x1b4e: 0x000a, 0x1b4f: 0x000a, 0x1b50: 0x000a, 0x1b51: 0x000a, - 0x1b52: 0x000a, 0x1b53: 0x000a, 0x1b54: 0x000a, 0x1b55: 0x000a, 0x1b56: 0x000a, 0x1b57: 0x000a, - 0x1b58: 0x000a, 0x1b59: 0x000a, 0x1b5b: 0x000a, 0x1b5c: 0x000a, 0x1b5d: 0x000a, - 0x1b5e: 0x000a, 0x1b5f: 0x000a, 0x1b60: 0x000a, 0x1b61: 0x000a, 0x1b62: 0x000a, 0x1b63: 0x000a, - 0x1b64: 0x000a, 0x1b65: 0x000a, 0x1b66: 0x000a, 0x1b67: 0x000a, 0x1b68: 0x000a, 0x1b69: 0x000a, - 0x1b6a: 0x000a, 0x1b6b: 0x000a, 0x1b6c: 0x000a, 0x1b6d: 0x000a, 0x1b6e: 0x000a, 0x1b6f: 0x000a, - 0x1b70: 0x000a, 0x1b71: 0x000a, 0x1b72: 0x000a, 0x1b73: 0x000a, 0x1b74: 0x000a, 0x1b75: 0x000a, - 0x1b76: 0x000a, 0x1b77: 0x000a, 0x1b78: 0x000a, 0x1b79: 0x000a, 0x1b7a: 0x000a, 0x1b7b: 0x000a, - 0x1b7c: 0x000a, 0x1b7d: 0x000a, 0x1b7e: 0x000a, 0x1b7f: 0x000a, - // Block 0x6e, offset 0x1b80 - 0x1b80: 0x000a, 0x1b81: 0x000a, 0x1b82: 0x000a, 0x1b83: 0x000a, 0x1b84: 0x000a, 0x1b85: 0x000a, - 0x1b86: 0x000a, 0x1b87: 0x000a, 0x1b88: 0x000a, 0x1b89: 0x000a, 0x1b8a: 0x000a, 0x1b8b: 0x000a, - 0x1b8c: 0x000a, 0x1b8d: 0x000a, 0x1b8e: 0x000a, 0x1b8f: 0x000a, 0x1b90: 0x000a, 0x1b91: 0x000a, - 0x1b92: 0x000a, 0x1b93: 0x000a, 0x1b94: 0x000a, 0x1b95: 0x000a, 0x1b96: 0x000a, 0x1b97: 0x000a, - 0x1b98: 0x000a, 0x1b99: 0x000a, 0x1b9a: 0x000a, 0x1b9b: 0x000a, 0x1b9c: 0x000a, 0x1b9d: 0x000a, - 0x1b9e: 0x000a, 0x1b9f: 0x000a, 0x1ba0: 0x000a, 0x1ba1: 0x000a, 0x1ba2: 0x000a, 0x1ba3: 0x000a, - 0x1ba4: 0x000a, 0x1ba5: 0x000a, 0x1ba6: 0x000a, 0x1ba7: 0x000a, 0x1ba8: 0x000a, 0x1ba9: 0x000a, - 0x1baa: 0x000a, 0x1bab: 0x000a, 0x1bac: 0x000a, 0x1bad: 0x000a, 0x1bae: 0x000a, 0x1baf: 0x000a, - 0x1bb0: 0x000a, 0x1bb1: 0x000a, 0x1bb2: 0x000a, 0x1bb3: 0x000a, - // Block 0x6f, offset 0x1bc0 - 0x1bc0: 0x000a, 0x1bc1: 0x000a, 0x1bc2: 0x000a, 0x1bc3: 0x000a, 0x1bc4: 0x000a, 0x1bc5: 0x000a, - 0x1bc6: 0x000a, 0x1bc7: 0x000a, 0x1bc8: 0x000a, 0x1bc9: 0x000a, 0x1bca: 0x000a, 0x1bcb: 0x000a, - 0x1bcc: 0x000a, 0x1bcd: 0x000a, 0x1bce: 0x000a, 0x1bcf: 0x000a, 0x1bd0: 0x000a, 0x1bd1: 0x000a, - 0x1bd2: 0x000a, 0x1bd3: 0x000a, 0x1bd4: 0x000a, 0x1bd5: 0x000a, - 0x1bf0: 0x000a, 0x1bf1: 0x000a, 0x1bf2: 0x000a, 0x1bf3: 0x000a, 0x1bf4: 0x000a, 0x1bf5: 0x000a, - 0x1bf6: 0x000a, 0x1bf7: 0x000a, 0x1bf8: 0x000a, 0x1bf9: 0x000a, 0x1bfa: 0x000a, 0x1bfb: 0x000a, - // Block 0x70, offset 0x1c00 - 0x1c00: 0x0009, 0x1c01: 0x000a, 0x1c02: 0x000a, 0x1c03: 0x000a, 0x1c04: 0x000a, - 0x1c08: 0x003a, 0x1c09: 0x002a, 0x1c0a: 0x003a, 0x1c0b: 0x002a, - 0x1c0c: 0x003a, 0x1c0d: 0x002a, 0x1c0e: 0x003a, 0x1c0f: 0x002a, 0x1c10: 0x003a, 0x1c11: 0x002a, - 0x1c12: 0x000a, 0x1c13: 0x000a, 0x1c14: 0x003a, 0x1c15: 0x002a, 0x1c16: 0x003a, 0x1c17: 0x002a, - 0x1c18: 0x003a, 0x1c19: 0x002a, 0x1c1a: 0x003a, 0x1c1b: 0x002a, 0x1c1c: 0x000a, 0x1c1d: 0x000a, - 0x1c1e: 0x000a, 0x1c1f: 0x000a, 0x1c20: 0x000a, - 0x1c2a: 0x000c, 0x1c2b: 0x000c, 0x1c2c: 0x000c, 0x1c2d: 0x000c, - 0x1c30: 0x000a, - 0x1c36: 0x000a, 0x1c37: 0x000a, - 0x1c3d: 0x000a, 0x1c3e: 0x000a, 0x1c3f: 0x000a, - // Block 0x71, offset 0x1c40 - 0x1c59: 0x000c, 0x1c5a: 0x000c, 0x1c5b: 0x000a, 0x1c5c: 0x000a, - 0x1c60: 0x000a, - // Block 0x72, offset 0x1c80 - 0x1cbb: 0x000a, - // Block 0x73, offset 0x1cc0 - 0x1cc0: 0x000a, 0x1cc1: 0x000a, 0x1cc2: 0x000a, 0x1cc3: 0x000a, 0x1cc4: 0x000a, 0x1cc5: 0x000a, - 0x1cc6: 0x000a, 0x1cc7: 0x000a, 0x1cc8: 0x000a, 0x1cc9: 0x000a, 0x1cca: 0x000a, 0x1ccb: 0x000a, - 0x1ccc: 0x000a, 0x1ccd: 0x000a, 0x1cce: 0x000a, 0x1ccf: 0x000a, 0x1cd0: 0x000a, 0x1cd1: 0x000a, - 0x1cd2: 0x000a, 0x1cd3: 0x000a, 0x1cd4: 0x000a, 0x1cd5: 0x000a, 0x1cd6: 0x000a, 0x1cd7: 0x000a, - 0x1cd8: 0x000a, 0x1cd9: 0x000a, 0x1cda: 0x000a, 0x1cdb: 0x000a, 0x1cdc: 0x000a, 0x1cdd: 0x000a, - 0x1cde: 0x000a, 0x1cdf: 0x000a, 0x1ce0: 0x000a, 0x1ce1: 0x000a, 0x1ce2: 0x000a, 0x1ce3: 0x000a, - // Block 0x74, offset 0x1d00 - 0x1d1d: 0x000a, - 0x1d1e: 0x000a, - // Block 0x75, offset 0x1d40 - 0x1d50: 0x000a, 0x1d51: 0x000a, - 0x1d52: 0x000a, 0x1d53: 0x000a, 0x1d54: 0x000a, 0x1d55: 0x000a, 0x1d56: 0x000a, 0x1d57: 0x000a, - 0x1d58: 0x000a, 0x1d59: 0x000a, 0x1d5a: 0x000a, 0x1d5b: 0x000a, 0x1d5c: 0x000a, 0x1d5d: 0x000a, - 0x1d5e: 0x000a, 0x1d5f: 0x000a, - 0x1d7c: 0x000a, 0x1d7d: 0x000a, 0x1d7e: 0x000a, - // Block 0x76, offset 0x1d80 - 0x1db1: 0x000a, 0x1db2: 0x000a, 0x1db3: 0x000a, 0x1db4: 0x000a, 0x1db5: 0x000a, - 0x1db6: 0x000a, 0x1db7: 0x000a, 0x1db8: 0x000a, 0x1db9: 0x000a, 0x1dba: 0x000a, 0x1dbb: 0x000a, - 0x1dbc: 0x000a, 0x1dbd: 0x000a, 0x1dbe: 0x000a, 0x1dbf: 0x000a, - // Block 0x77, offset 0x1dc0 - 0x1dcc: 0x000a, 0x1dcd: 0x000a, 0x1dce: 0x000a, 0x1dcf: 0x000a, - // Block 0x78, offset 0x1e00 - 0x1e37: 0x000a, 0x1e38: 0x000a, 0x1e39: 0x000a, 0x1e3a: 0x000a, - // Block 0x79, offset 0x1e40 - 0x1e5e: 0x000a, 0x1e5f: 0x000a, - 0x1e7f: 0x000a, - // Block 0x7a, offset 0x1e80 - 0x1e90: 0x000a, 0x1e91: 0x000a, - 0x1e92: 0x000a, 0x1e93: 0x000a, 0x1e94: 0x000a, 0x1e95: 0x000a, 0x1e96: 0x000a, 0x1e97: 0x000a, - 0x1e98: 0x000a, 0x1e99: 0x000a, 0x1e9a: 0x000a, 0x1e9b: 0x000a, 0x1e9c: 0x000a, 0x1e9d: 0x000a, - 0x1e9e: 0x000a, 0x1e9f: 0x000a, 0x1ea0: 0x000a, 0x1ea1: 0x000a, 0x1ea2: 0x000a, 0x1ea3: 0x000a, - 0x1ea4: 0x000a, 0x1ea5: 0x000a, 0x1ea6: 0x000a, 0x1ea7: 0x000a, 0x1ea8: 0x000a, 0x1ea9: 0x000a, - 0x1eaa: 0x000a, 0x1eab: 0x000a, 0x1eac: 0x000a, 0x1ead: 0x000a, 0x1eae: 0x000a, 0x1eaf: 0x000a, - 0x1eb0: 0x000a, 0x1eb1: 0x000a, 0x1eb2: 0x000a, 0x1eb3: 0x000a, 0x1eb4: 0x000a, 0x1eb5: 0x000a, - 0x1eb6: 0x000a, 0x1eb7: 0x000a, 0x1eb8: 0x000a, 0x1eb9: 0x000a, 0x1eba: 0x000a, 0x1ebb: 0x000a, - 0x1ebc: 0x000a, 0x1ebd: 0x000a, 0x1ebe: 0x000a, 0x1ebf: 0x000a, - // Block 0x7b, offset 0x1ec0 - 0x1ec0: 0x000a, 0x1ec1: 0x000a, 0x1ec2: 0x000a, 0x1ec3: 0x000a, 0x1ec4: 0x000a, 0x1ec5: 0x000a, - 0x1ec6: 0x000a, - // Block 0x7c, offset 0x1f00 - 0x1f0d: 0x000a, 0x1f0e: 0x000a, 0x1f0f: 0x000a, - // Block 0x7d, offset 0x1f40 - 0x1f6f: 0x000c, - 0x1f70: 0x000c, 0x1f71: 0x000c, 0x1f72: 0x000c, 0x1f73: 0x000a, 0x1f74: 0x000c, 0x1f75: 0x000c, - 0x1f76: 0x000c, 0x1f77: 0x000c, 0x1f78: 0x000c, 0x1f79: 0x000c, 0x1f7a: 0x000c, 0x1f7b: 0x000c, - 0x1f7c: 0x000c, 0x1f7d: 0x000c, 0x1f7e: 0x000a, 0x1f7f: 0x000a, - // Block 0x7e, offset 0x1f80 - 0x1f9e: 0x000c, 0x1f9f: 0x000c, - // Block 0x7f, offset 0x1fc0 - 0x1ff0: 0x000c, 0x1ff1: 0x000c, - // Block 0x80, offset 0x2000 - 0x2000: 0x000a, 0x2001: 0x000a, 0x2002: 0x000a, 0x2003: 0x000a, 0x2004: 0x000a, 0x2005: 0x000a, - 0x2006: 0x000a, 0x2007: 0x000a, 0x2008: 0x000a, 0x2009: 0x000a, 0x200a: 0x000a, 0x200b: 0x000a, - 0x200c: 0x000a, 0x200d: 0x000a, 0x200e: 0x000a, 0x200f: 0x000a, 0x2010: 0x000a, 0x2011: 0x000a, - 0x2012: 0x000a, 0x2013: 0x000a, 0x2014: 0x000a, 0x2015: 0x000a, 0x2016: 0x000a, 0x2017: 0x000a, - 0x2018: 0x000a, 0x2019: 0x000a, 0x201a: 0x000a, 0x201b: 0x000a, 0x201c: 0x000a, 0x201d: 0x000a, - 0x201e: 0x000a, 0x201f: 0x000a, 0x2020: 0x000a, 0x2021: 0x000a, - // Block 0x81, offset 0x2040 - 0x2048: 0x000a, - // Block 0x82, offset 0x2080 - 0x2082: 0x000c, - 0x2086: 0x000c, 0x208b: 0x000c, - 0x20a5: 0x000c, 0x20a6: 0x000c, 0x20a8: 0x000a, 0x20a9: 0x000a, - 0x20aa: 0x000a, 0x20ab: 0x000a, 0x20ac: 0x000c, - 0x20b8: 0x0004, 0x20b9: 0x0004, - // Block 0x83, offset 0x20c0 - 0x20f4: 0x000a, 0x20f5: 0x000a, - 0x20f6: 0x000a, 0x20f7: 0x000a, - // Block 0x84, offset 0x2100 - 0x2104: 0x000c, 0x2105: 0x000c, - 0x2120: 0x000c, 0x2121: 0x000c, 0x2122: 0x000c, 0x2123: 0x000c, - 0x2124: 0x000c, 0x2125: 0x000c, 0x2126: 0x000c, 0x2127: 0x000c, 0x2128: 0x000c, 0x2129: 0x000c, - 0x212a: 0x000c, 0x212b: 0x000c, 0x212c: 0x000c, 0x212d: 0x000c, 0x212e: 0x000c, 0x212f: 0x000c, - 0x2130: 0x000c, 0x2131: 0x000c, - 0x213f: 0x000c, - // Block 0x85, offset 0x2140 - 0x2166: 0x000c, 0x2167: 0x000c, 0x2168: 0x000c, 0x2169: 0x000c, - 0x216a: 0x000c, 0x216b: 0x000c, 0x216c: 0x000c, 0x216d: 0x000c, - // Block 0x86, offset 0x2180 - 0x2187: 0x000c, 0x2188: 0x000c, 0x2189: 0x000c, 0x218a: 0x000c, 0x218b: 0x000c, - 0x218c: 0x000c, 0x218d: 0x000c, 0x218e: 0x000c, 0x218f: 0x000c, 0x2190: 0x000c, 0x2191: 0x000c, - // Block 0x87, offset 0x21c0 - 0x21c0: 0x000c, 0x21c1: 0x000c, 0x21c2: 0x000c, - 0x21f3: 0x000c, - 0x21f6: 0x000c, 0x21f7: 0x000c, 0x21f8: 0x000c, 0x21f9: 0x000c, - 0x21fc: 0x000c, 0x21fd: 0x000c, - // Block 0x88, offset 0x2200 - 0x2225: 0x000c, - // Block 0x89, offset 0x2240 - 0x2269: 0x000c, - 0x226a: 0x000c, 0x226b: 0x000c, 0x226c: 0x000c, 0x226d: 0x000c, 0x226e: 0x000c, - 0x2271: 0x000c, 0x2272: 0x000c, 0x2275: 0x000c, - 0x2276: 0x000c, - // Block 0x8a, offset 0x2280 - 0x2283: 0x000c, - 0x228c: 0x000c, - 0x22bc: 0x000c, - // Block 0x8b, offset 0x22c0 - 0x22f0: 0x000c, 0x22f2: 0x000c, 0x22f3: 0x000c, 0x22f4: 0x000c, - 0x22f7: 0x000c, 0x22f8: 0x000c, - 0x22fe: 0x000c, 0x22ff: 0x000c, - // Block 0x8c, offset 0x2300 - 0x2301: 0x000c, - 0x232c: 0x000c, 0x232d: 0x000c, - 0x2336: 0x000c, - // Block 0x8d, offset 0x2340 - 0x236a: 0x000a, 0x236b: 0x000a, - // Block 0x8e, offset 0x2380 - 0x23a5: 0x000c, 0x23a8: 0x000c, - 0x23ad: 0x000c, - // Block 0x8f, offset 0x23c0 - 0x23dd: 0x0001, - 0x23de: 0x000c, 0x23df: 0x0001, 0x23e0: 0x0001, 0x23e1: 0x0001, 0x23e2: 0x0001, 0x23e3: 0x0001, - 0x23e4: 0x0001, 0x23e5: 0x0001, 0x23e6: 0x0001, 0x23e7: 0x0001, 0x23e8: 0x0001, 0x23e9: 0x0003, - 0x23ea: 0x0001, 0x23eb: 0x0001, 0x23ec: 0x0001, 0x23ed: 0x0001, 0x23ee: 0x0001, 0x23ef: 0x0001, - 0x23f0: 0x0001, 0x23f1: 0x0001, 0x23f2: 0x0001, 0x23f3: 0x0001, 0x23f4: 0x0001, 0x23f5: 0x0001, - 0x23f6: 0x0001, 0x23f7: 0x0001, 0x23f8: 0x0001, 0x23f9: 0x0001, 0x23fa: 0x0001, 0x23fb: 0x0001, - 0x23fc: 0x0001, 0x23fd: 0x0001, 0x23fe: 0x0001, 0x23ff: 0x0001, - // Block 0x90, offset 0x2400 - 0x2400: 0x0001, 0x2401: 0x0001, 0x2402: 0x0001, 0x2403: 0x0001, 0x2404: 0x0001, 0x2405: 0x0001, - 0x2406: 0x0001, 0x2407: 0x0001, 0x2408: 0x0001, 0x2409: 0x0001, 0x240a: 0x0001, 0x240b: 0x0001, - 0x240c: 0x0001, 0x240d: 0x0001, 0x240e: 0x0001, 0x240f: 0x0001, 0x2410: 0x000d, 0x2411: 0x000d, - 0x2412: 0x000d, 0x2413: 0x000d, 0x2414: 0x000d, 0x2415: 0x000d, 0x2416: 0x000d, 0x2417: 0x000d, - 0x2418: 0x000d, 0x2419: 0x000d, 0x241a: 0x000d, 0x241b: 0x000d, 0x241c: 0x000d, 0x241d: 0x000d, - 0x241e: 0x000d, 0x241f: 0x000d, 0x2420: 0x000d, 0x2421: 0x000d, 0x2422: 0x000d, 0x2423: 0x000d, - 0x2424: 0x000d, 0x2425: 0x000d, 0x2426: 0x000d, 0x2427: 0x000d, 0x2428: 0x000d, 0x2429: 0x000d, - 0x242a: 0x000d, 0x242b: 0x000d, 0x242c: 0x000d, 0x242d: 0x000d, 0x242e: 0x000d, 0x242f: 0x000d, - 0x2430: 0x000d, 0x2431: 0x000d, 0x2432: 0x000d, 0x2433: 0x000d, 0x2434: 0x000d, 0x2435: 0x000d, - 0x2436: 0x000d, 0x2437: 0x000d, 0x2438: 0x000d, 0x2439: 0x000d, 0x243a: 0x000d, 0x243b: 0x000d, - 0x243c: 0x000d, 0x243d: 0x000d, 0x243e: 0x000d, 0x243f: 0x000d, - // Block 0x91, offset 0x2440 - 0x2440: 0x000d, 0x2441: 0x000d, 0x2442: 0x000d, 0x2443: 0x000d, 0x2444: 0x000d, 0x2445: 0x000d, - 0x2446: 0x000d, 0x2447: 0x000d, 0x2448: 0x000d, 0x2449: 0x000d, 0x244a: 0x000d, 0x244b: 0x000d, - 0x244c: 0x000d, 0x244d: 0x000d, 0x244e: 0x000d, 0x244f: 0x000d, 0x2450: 0x000d, 0x2451: 0x000d, - 0x2452: 0x000d, 0x2453: 0x000d, 0x2454: 0x000d, 0x2455: 0x000d, 0x2456: 0x000d, 0x2457: 0x000d, - 0x2458: 0x000d, 0x2459: 0x000d, 0x245a: 0x000d, 0x245b: 0x000d, 0x245c: 0x000d, 0x245d: 0x000d, - 0x245e: 0x000d, 0x245f: 0x000d, 0x2460: 0x000d, 0x2461: 0x000d, 0x2462: 0x000d, 0x2463: 0x000d, - 0x2464: 0x000d, 0x2465: 0x000d, 0x2466: 0x000d, 0x2467: 0x000d, 0x2468: 0x000d, 0x2469: 0x000d, - 0x246a: 0x000d, 0x246b: 0x000d, 0x246c: 0x000d, 0x246d: 0x000d, 0x246e: 0x000d, 0x246f: 0x000d, - 0x2470: 0x000d, 0x2471: 0x000d, 0x2472: 0x000d, 0x2473: 0x000d, 0x2474: 0x000d, 0x2475: 0x000d, - 0x2476: 0x000d, 0x2477: 0x000d, 0x2478: 0x000d, 0x2479: 0x000d, 0x247a: 0x000d, 0x247b: 0x000d, - 0x247c: 0x000d, 0x247d: 0x000d, 0x247e: 0x000a, 0x247f: 0x000a, - // Block 0x92, offset 0x2480 - 0x2480: 0x000d, 0x2481: 0x000d, 0x2482: 0x000d, 0x2483: 0x000d, 0x2484: 0x000d, 0x2485: 0x000d, - 0x2486: 0x000d, 0x2487: 0x000d, 0x2488: 0x000d, 0x2489: 0x000d, 0x248a: 0x000d, 0x248b: 0x000d, - 0x248c: 0x000d, 0x248d: 0x000d, 0x248e: 0x000d, 0x248f: 0x000d, 0x2490: 0x000b, 0x2491: 0x000b, - 0x2492: 0x000b, 0x2493: 0x000b, 0x2494: 0x000b, 0x2495: 0x000b, 0x2496: 0x000b, 0x2497: 0x000b, - 0x2498: 0x000b, 0x2499: 0x000b, 0x249a: 0x000b, 0x249b: 0x000b, 0x249c: 0x000b, 0x249d: 0x000b, - 0x249e: 0x000b, 0x249f: 0x000b, 0x24a0: 0x000b, 0x24a1: 0x000b, 0x24a2: 0x000b, 0x24a3: 0x000b, - 0x24a4: 0x000b, 0x24a5: 0x000b, 0x24a6: 0x000b, 0x24a7: 0x000b, 0x24a8: 0x000b, 0x24a9: 0x000b, - 0x24aa: 0x000b, 0x24ab: 0x000b, 0x24ac: 0x000b, 0x24ad: 0x000b, 0x24ae: 0x000b, 0x24af: 0x000b, - 0x24b0: 0x000d, 0x24b1: 0x000d, 0x24b2: 0x000d, 0x24b3: 0x000d, 0x24b4: 0x000d, 0x24b5: 0x000d, - 0x24b6: 0x000d, 0x24b7: 0x000d, 0x24b8: 0x000d, 0x24b9: 0x000d, 0x24ba: 0x000d, 0x24bb: 0x000d, - 0x24bc: 0x000d, 0x24bd: 0x000a, 0x24be: 0x000d, 0x24bf: 0x000d, - // Block 0x93, offset 0x24c0 - 0x24c0: 0x000c, 0x24c1: 0x000c, 0x24c2: 0x000c, 0x24c3: 0x000c, 0x24c4: 0x000c, 0x24c5: 0x000c, - 0x24c6: 0x000c, 0x24c7: 0x000c, 0x24c8: 0x000c, 0x24c9: 0x000c, 0x24ca: 0x000c, 0x24cb: 0x000c, - 0x24cc: 0x000c, 0x24cd: 0x000c, 0x24ce: 0x000c, 0x24cf: 0x000c, 0x24d0: 0x000a, 0x24d1: 0x000a, - 0x24d2: 0x000a, 0x24d3: 0x000a, 0x24d4: 0x000a, 0x24d5: 0x000a, 0x24d6: 0x000a, 0x24d7: 0x000a, - 0x24d8: 0x000a, 0x24d9: 0x000a, - 0x24e0: 0x000c, 0x24e1: 0x000c, 0x24e2: 0x000c, 0x24e3: 0x000c, - 0x24e4: 0x000c, 0x24e5: 0x000c, 0x24e6: 0x000c, 0x24e7: 0x000c, 0x24e8: 0x000c, 0x24e9: 0x000c, - 0x24ea: 0x000c, 0x24eb: 0x000c, 0x24ec: 0x000c, 0x24ed: 0x000c, 0x24ee: 0x000c, 0x24ef: 0x000c, - 0x24f0: 0x000a, 0x24f1: 0x000a, 0x24f2: 0x000a, 0x24f3: 0x000a, 0x24f4: 0x000a, 0x24f5: 0x000a, - 0x24f6: 0x000a, 0x24f7: 0x000a, 0x24f8: 0x000a, 0x24f9: 0x000a, 0x24fa: 0x000a, 0x24fb: 0x000a, - 0x24fc: 0x000a, 0x24fd: 0x000a, 0x24fe: 0x000a, 0x24ff: 0x000a, - // Block 0x94, offset 0x2500 - 0x2500: 0x000a, 0x2501: 0x000a, 0x2502: 0x000a, 0x2503: 0x000a, 0x2504: 0x000a, 0x2505: 0x000a, - 0x2506: 0x000a, 0x2507: 0x000a, 0x2508: 0x000a, 0x2509: 0x000a, 0x250a: 0x000a, 0x250b: 0x000a, - 0x250c: 0x000a, 0x250d: 0x000a, 0x250e: 0x000a, 0x250f: 0x000a, 0x2510: 0x0006, 0x2511: 0x000a, - 0x2512: 0x0006, 0x2514: 0x000a, 0x2515: 0x0006, 0x2516: 0x000a, 0x2517: 0x000a, - 0x2518: 0x000a, 0x2519: 0x009a, 0x251a: 0x008a, 0x251b: 0x007a, 0x251c: 0x006a, 0x251d: 0x009a, - 0x251e: 0x008a, 0x251f: 0x0004, 0x2520: 0x000a, 0x2521: 0x000a, 0x2522: 0x0003, 0x2523: 0x0003, - 0x2524: 0x000a, 0x2525: 0x000a, 0x2526: 0x000a, 0x2528: 0x000a, 0x2529: 0x0004, - 0x252a: 0x0004, 0x252b: 0x000a, - 0x2530: 0x000d, 0x2531: 0x000d, 0x2532: 0x000d, 0x2533: 0x000d, 0x2534: 0x000d, 0x2535: 0x000d, - 0x2536: 0x000d, 0x2537: 0x000d, 0x2538: 0x000d, 0x2539: 0x000d, 0x253a: 0x000d, 0x253b: 0x000d, - 0x253c: 0x000d, 0x253d: 0x000d, 0x253e: 0x000d, 0x253f: 0x000d, - // Block 0x95, offset 0x2540 - 0x2540: 0x000d, 0x2541: 0x000d, 0x2542: 0x000d, 0x2543: 0x000d, 0x2544: 0x000d, 0x2545: 0x000d, - 0x2546: 0x000d, 0x2547: 0x000d, 0x2548: 0x000d, 0x2549: 0x000d, 0x254a: 0x000d, 0x254b: 0x000d, - 0x254c: 0x000d, 0x254d: 0x000d, 0x254e: 0x000d, 0x254f: 0x000d, 0x2550: 0x000d, 0x2551: 0x000d, - 0x2552: 0x000d, 0x2553: 0x000d, 0x2554: 0x000d, 0x2555: 0x000d, 0x2556: 0x000d, 0x2557: 0x000d, - 0x2558: 0x000d, 0x2559: 0x000d, 0x255a: 0x000d, 0x255b: 0x000d, 0x255c: 0x000d, 0x255d: 0x000d, - 0x255e: 0x000d, 0x255f: 0x000d, 0x2560: 0x000d, 0x2561: 0x000d, 0x2562: 0x000d, 0x2563: 0x000d, - 0x2564: 0x000d, 0x2565: 0x000d, 0x2566: 0x000d, 0x2567: 0x000d, 0x2568: 0x000d, 0x2569: 0x000d, - 0x256a: 0x000d, 0x256b: 0x000d, 0x256c: 0x000d, 0x256d: 0x000d, 0x256e: 0x000d, 0x256f: 0x000d, - 0x2570: 0x000d, 0x2571: 0x000d, 0x2572: 0x000d, 0x2573: 0x000d, 0x2574: 0x000d, 0x2575: 0x000d, - 0x2576: 0x000d, 0x2577: 0x000d, 0x2578: 0x000d, 0x2579: 0x000d, 0x257a: 0x000d, 0x257b: 0x000d, - 0x257c: 0x000d, 0x257d: 0x000d, 0x257e: 0x000d, 0x257f: 0x000b, - // Block 0x96, offset 0x2580 - 0x2581: 0x000a, 0x2582: 0x000a, 0x2583: 0x0004, 0x2584: 0x0004, 0x2585: 0x0004, - 0x2586: 0x000a, 0x2587: 0x000a, 0x2588: 0x003a, 0x2589: 0x002a, 0x258a: 0x000a, 0x258b: 0x0003, - 0x258c: 0x0006, 0x258d: 0x0003, 0x258e: 0x0006, 0x258f: 0x0006, 0x2590: 0x0002, 0x2591: 0x0002, - 0x2592: 0x0002, 0x2593: 0x0002, 0x2594: 0x0002, 0x2595: 0x0002, 0x2596: 0x0002, 0x2597: 0x0002, - 0x2598: 0x0002, 0x2599: 0x0002, 0x259a: 0x0006, 0x259b: 0x000a, 0x259c: 0x000a, 0x259d: 0x000a, - 0x259e: 0x000a, 0x259f: 0x000a, 0x25a0: 0x000a, - 0x25bb: 0x005a, - 0x25bc: 0x000a, 0x25bd: 0x004a, 0x25be: 0x000a, 0x25bf: 0x000a, - // Block 0x97, offset 0x25c0 - 0x25c0: 0x000a, - 0x25db: 0x005a, 0x25dc: 0x000a, 0x25dd: 0x004a, - 0x25de: 0x000a, 0x25df: 0x00fa, 0x25e0: 0x00ea, 0x25e1: 0x000a, 0x25e2: 0x003a, 0x25e3: 0x002a, - 0x25e4: 0x000a, 0x25e5: 0x000a, - // Block 0x98, offset 0x2600 - 0x2620: 0x0004, 0x2621: 0x0004, 0x2622: 0x000a, 0x2623: 0x000a, - 0x2624: 0x000a, 0x2625: 0x0004, 0x2626: 0x0004, 0x2628: 0x000a, 0x2629: 0x000a, - 0x262a: 0x000a, 0x262b: 0x000a, 0x262c: 0x000a, 0x262d: 0x000a, 0x262e: 0x000a, - 0x2630: 0x000b, 0x2631: 0x000b, 0x2632: 0x000b, 0x2633: 0x000b, 0x2634: 0x000b, 0x2635: 0x000b, - 0x2636: 0x000b, 0x2637: 0x000b, 0x2638: 0x000b, 0x2639: 0x000a, 0x263a: 0x000a, 0x263b: 0x000a, - 0x263c: 0x000a, 0x263d: 0x000a, 0x263e: 0x000b, 0x263f: 0x000b, - // Block 0x99, offset 0x2640 - 0x2641: 0x000a, - // Block 0x9a, offset 0x2680 - 0x2680: 0x000a, 0x2681: 0x000a, 0x2682: 0x000a, 0x2683: 0x000a, 0x2684: 0x000a, 0x2685: 0x000a, - 0x2686: 0x000a, 0x2687: 0x000a, 0x2688: 0x000a, 0x2689: 0x000a, 0x268a: 0x000a, 0x268b: 0x000a, - 0x268c: 0x000a, 0x2690: 0x000a, 0x2691: 0x000a, - 0x2692: 0x000a, 0x2693: 0x000a, 0x2694: 0x000a, 0x2695: 0x000a, 0x2696: 0x000a, 0x2697: 0x000a, - 0x2698: 0x000a, 0x2699: 0x000a, 0x269a: 0x000a, 0x269b: 0x000a, 0x269c: 0x000a, - 0x26a0: 0x000a, - // Block 0x9b, offset 0x26c0 - 0x26fd: 0x000c, - // Block 0x9c, offset 0x2700 - 0x2720: 0x000c, 0x2721: 0x0002, 0x2722: 0x0002, 0x2723: 0x0002, - 0x2724: 0x0002, 0x2725: 0x0002, 0x2726: 0x0002, 0x2727: 0x0002, 0x2728: 0x0002, 0x2729: 0x0002, - 0x272a: 0x0002, 0x272b: 0x0002, 0x272c: 0x0002, 0x272d: 0x0002, 0x272e: 0x0002, 0x272f: 0x0002, - 0x2730: 0x0002, 0x2731: 0x0002, 0x2732: 0x0002, 0x2733: 0x0002, 0x2734: 0x0002, 0x2735: 0x0002, - 0x2736: 0x0002, 0x2737: 0x0002, 0x2738: 0x0002, 0x2739: 0x0002, 0x273a: 0x0002, 0x273b: 0x0002, - // Block 0x9d, offset 0x2740 - 0x2776: 0x000c, 0x2777: 0x000c, 0x2778: 0x000c, 0x2779: 0x000c, 0x277a: 0x000c, - // Block 0x9e, offset 0x2780 - 0x2780: 0x0001, 0x2781: 0x0001, 0x2782: 0x0001, 0x2783: 0x0001, 0x2784: 0x0001, 0x2785: 0x0001, - 0x2786: 0x0001, 0x2787: 0x0001, 0x2788: 0x0001, 0x2789: 0x0001, 0x278a: 0x0001, 0x278b: 0x0001, - 0x278c: 0x0001, 0x278d: 0x0001, 0x278e: 0x0001, 0x278f: 0x0001, 0x2790: 0x0001, 0x2791: 0x0001, - 0x2792: 0x0001, 0x2793: 0x0001, 0x2794: 0x0001, 0x2795: 0x0001, 0x2796: 0x0001, 0x2797: 0x0001, - 0x2798: 0x0001, 0x2799: 0x0001, 0x279a: 0x0001, 0x279b: 0x0001, 0x279c: 0x0001, 0x279d: 0x0001, - 0x279e: 0x0001, 0x279f: 0x0001, 0x27a0: 0x0001, 0x27a1: 0x0001, 0x27a2: 0x0001, 0x27a3: 0x0001, - 0x27a4: 0x0001, 0x27a5: 0x0001, 0x27a6: 0x0001, 0x27a7: 0x0001, 0x27a8: 0x0001, 0x27a9: 0x0001, - 0x27aa: 0x0001, 0x27ab: 0x0001, 0x27ac: 0x0001, 0x27ad: 0x0001, 0x27ae: 0x0001, 0x27af: 0x0001, - 0x27b0: 0x0001, 0x27b1: 0x0001, 0x27b2: 0x0001, 0x27b3: 0x0001, 0x27b4: 0x0001, 0x27b5: 0x0001, - 0x27b6: 0x0001, 0x27b7: 0x0001, 0x27b8: 0x0001, 0x27b9: 0x0001, 0x27ba: 0x0001, 0x27bb: 0x0001, - 0x27bc: 0x0001, 0x27bd: 0x0001, 0x27be: 0x0001, 0x27bf: 0x0001, - // Block 0x9f, offset 0x27c0 - 0x27c0: 0x0001, 0x27c1: 0x0001, 0x27c2: 0x0001, 0x27c3: 0x0001, 0x27c4: 0x0001, 0x27c5: 0x0001, - 0x27c6: 0x0001, 0x27c7: 0x0001, 0x27c8: 0x0001, 0x27c9: 0x0001, 0x27ca: 0x0001, 0x27cb: 0x0001, - 0x27cc: 0x0001, 0x27cd: 0x0001, 0x27ce: 0x0001, 0x27cf: 0x0001, 0x27d0: 0x0001, 0x27d1: 0x0001, - 0x27d2: 0x0001, 0x27d3: 0x0001, 0x27d4: 0x0001, 0x27d5: 0x0001, 0x27d6: 0x0001, 0x27d7: 0x0001, - 0x27d8: 0x0001, 0x27d9: 0x0001, 0x27da: 0x0001, 0x27db: 0x0001, 0x27dc: 0x0001, 0x27dd: 0x0001, - 0x27de: 0x0001, 0x27df: 0x000a, 0x27e0: 0x0001, 0x27e1: 0x0001, 0x27e2: 0x0001, 0x27e3: 0x0001, - 0x27e4: 0x0001, 0x27e5: 0x0001, 0x27e6: 0x0001, 0x27e7: 0x0001, 0x27e8: 0x0001, 0x27e9: 0x0001, - 0x27ea: 0x0001, 0x27eb: 0x0001, 0x27ec: 0x0001, 0x27ed: 0x0001, 0x27ee: 0x0001, 0x27ef: 0x0001, - 0x27f0: 0x0001, 0x27f1: 0x0001, 0x27f2: 0x0001, 0x27f3: 0x0001, 0x27f4: 0x0001, 0x27f5: 0x0001, - 0x27f6: 0x0001, 0x27f7: 0x0001, 0x27f8: 0x0001, 0x27f9: 0x0001, 0x27fa: 0x0001, 0x27fb: 0x0001, - 0x27fc: 0x0001, 0x27fd: 0x0001, 0x27fe: 0x0001, 0x27ff: 0x0001, - // Block 0xa0, offset 0x2800 - 0x2800: 0x0001, 0x2801: 0x000c, 0x2802: 0x000c, 0x2803: 0x000c, 0x2804: 0x0001, 0x2805: 0x000c, - 0x2806: 0x000c, 0x2807: 0x0001, 0x2808: 0x0001, 0x2809: 0x0001, 0x280a: 0x0001, 0x280b: 0x0001, - 0x280c: 0x000c, 0x280d: 0x000c, 0x280e: 0x000c, 0x280f: 0x000c, 0x2810: 0x0001, 0x2811: 0x0001, - 0x2812: 0x0001, 0x2813: 0x0001, 0x2814: 0x0001, 0x2815: 0x0001, 0x2816: 0x0001, 0x2817: 0x0001, - 0x2818: 0x0001, 0x2819: 0x0001, 0x281a: 0x0001, 0x281b: 0x0001, 0x281c: 0x0001, 0x281d: 0x0001, - 0x281e: 0x0001, 0x281f: 0x0001, 0x2820: 0x0001, 0x2821: 0x0001, 0x2822: 0x0001, 0x2823: 0x0001, - 0x2824: 0x0001, 0x2825: 0x0001, 0x2826: 0x0001, 0x2827: 0x0001, 0x2828: 0x0001, 0x2829: 0x0001, - 0x282a: 0x0001, 0x282b: 0x0001, 0x282c: 0x0001, 0x282d: 0x0001, 0x282e: 0x0001, 0x282f: 0x0001, - 0x2830: 0x0001, 0x2831: 0x0001, 0x2832: 0x0001, 0x2833: 0x0001, 0x2834: 0x0001, 0x2835: 0x0001, - 0x2836: 0x0001, 0x2837: 0x0001, 0x2838: 0x000c, 0x2839: 0x000c, 0x283a: 0x000c, 0x283b: 0x0001, - 0x283c: 0x0001, 0x283d: 0x0001, 0x283e: 0x0001, 0x283f: 0x000c, - // Block 0xa1, offset 0x2840 - 0x2840: 0x0001, 0x2841: 0x0001, 0x2842: 0x0001, 0x2843: 0x0001, 0x2844: 0x0001, 0x2845: 0x0001, - 0x2846: 0x0001, 0x2847: 0x0001, 0x2848: 0x0001, 0x2849: 0x0001, 0x284a: 0x0001, 0x284b: 0x0001, - 0x284c: 0x0001, 0x284d: 0x0001, 0x284e: 0x0001, 0x284f: 0x0001, 0x2850: 0x0001, 0x2851: 0x0001, - 0x2852: 0x0001, 0x2853: 0x0001, 0x2854: 0x0001, 0x2855: 0x0001, 0x2856: 0x0001, 0x2857: 0x0001, - 0x2858: 0x0001, 0x2859: 0x0001, 0x285a: 0x0001, 0x285b: 0x0001, 0x285c: 0x0001, 0x285d: 0x0001, - 0x285e: 0x0001, 0x285f: 0x0001, 0x2860: 0x0001, 0x2861: 0x0001, 0x2862: 0x0001, 0x2863: 0x0001, - 0x2864: 0x0001, 0x2865: 0x000c, 0x2866: 0x000c, 0x2867: 0x0001, 0x2868: 0x0001, 0x2869: 0x0001, - 0x286a: 0x0001, 0x286b: 0x0001, 0x286c: 0x0001, 0x286d: 0x0001, 0x286e: 0x0001, 0x286f: 0x0001, - 0x2870: 0x0001, 0x2871: 0x0001, 0x2872: 0x0001, 0x2873: 0x0001, 0x2874: 0x0001, 0x2875: 0x0001, - 0x2876: 0x0001, 0x2877: 0x0001, 0x2878: 0x0001, 0x2879: 0x0001, 0x287a: 0x0001, 0x287b: 0x0001, - 0x287c: 0x0001, 0x287d: 0x0001, 0x287e: 0x0001, 0x287f: 0x0001, - // Block 0xa2, offset 0x2880 - 0x2880: 0x0001, 0x2881: 0x0001, 0x2882: 0x0001, 0x2883: 0x0001, 0x2884: 0x0001, 0x2885: 0x0001, - 0x2886: 0x0001, 0x2887: 0x0001, 0x2888: 0x0001, 0x2889: 0x0001, 0x288a: 0x0001, 0x288b: 0x0001, - 0x288c: 0x0001, 0x288d: 0x0001, 0x288e: 0x0001, 0x288f: 0x0001, 0x2890: 0x0001, 0x2891: 0x0001, - 0x2892: 0x0001, 0x2893: 0x0001, 0x2894: 0x0001, 0x2895: 0x0001, 0x2896: 0x0001, 0x2897: 0x0001, - 0x2898: 0x0001, 0x2899: 0x0001, 0x289a: 0x0001, 0x289b: 0x0001, 0x289c: 0x0001, 0x289d: 0x0001, - 0x289e: 0x0001, 0x289f: 0x0001, 0x28a0: 0x0001, 0x28a1: 0x0001, 0x28a2: 0x0001, 0x28a3: 0x0001, - 0x28a4: 0x0001, 0x28a5: 0x0001, 0x28a6: 0x0001, 0x28a7: 0x0001, 0x28a8: 0x0001, 0x28a9: 0x0001, - 0x28aa: 0x0001, 0x28ab: 0x0001, 0x28ac: 0x0001, 0x28ad: 0x0001, 0x28ae: 0x0001, 0x28af: 0x0001, - 0x28b0: 0x0001, 0x28b1: 0x0001, 0x28b2: 0x0001, 0x28b3: 0x0001, 0x28b4: 0x0001, 0x28b5: 0x0001, - 0x28b6: 0x0001, 0x28b7: 0x0001, 0x28b8: 0x0001, 0x28b9: 0x000a, 0x28ba: 0x000a, 0x28bb: 0x000a, - 0x28bc: 0x000a, 0x28bd: 0x000a, 0x28be: 0x000a, 0x28bf: 0x000a, - // Block 0xa3, offset 0x28c0 - 0x28c0: 0x000d, 0x28c1: 0x000d, 0x28c2: 0x000d, 0x28c3: 0x000d, 0x28c4: 0x000d, 0x28c5: 0x000d, - 0x28c6: 0x000d, 0x28c7: 0x000d, 0x28c8: 0x000d, 0x28c9: 0x000d, 0x28ca: 0x000d, 0x28cb: 0x000d, - 0x28cc: 0x000d, 0x28cd: 0x000d, 0x28ce: 0x000d, 0x28cf: 0x000d, 0x28d0: 0x000d, 0x28d1: 0x000d, - 0x28d2: 0x000d, 0x28d3: 0x000d, 0x28d4: 0x000d, 0x28d5: 0x000d, 0x28d6: 0x000d, 0x28d7: 0x000d, - 0x28d8: 0x000d, 0x28d9: 0x000d, 0x28da: 0x000d, 0x28db: 0x000d, 0x28dc: 0x000d, 0x28dd: 0x000d, - 0x28de: 0x000d, 0x28df: 0x000d, 0x28e0: 0x000d, 0x28e1: 0x000d, 0x28e2: 0x000d, 0x28e3: 0x000d, - 0x28e4: 0x000c, 0x28e5: 0x000c, 0x28e6: 0x000c, 0x28e7: 0x000c, 0x28e8: 0x000d, 0x28e9: 0x000d, - 0x28ea: 0x000d, 0x28eb: 0x000d, 0x28ec: 0x000d, 0x28ed: 0x000d, 0x28ee: 0x000d, 0x28ef: 0x000d, - 0x28f0: 0x0005, 0x28f1: 0x0005, 0x28f2: 0x0005, 0x28f3: 0x0005, 0x28f4: 0x0005, 0x28f5: 0x0005, - 0x28f6: 0x0005, 0x28f7: 0x0005, 0x28f8: 0x0005, 0x28f9: 0x0005, 0x28fa: 0x000d, 0x28fb: 0x000d, - 0x28fc: 0x000d, 0x28fd: 0x000d, 0x28fe: 0x000d, 0x28ff: 0x000d, - // Block 0xa4, offset 0x2900 - 0x2900: 0x0001, 0x2901: 0x0001, 0x2902: 0x0001, 0x2903: 0x0001, 0x2904: 0x0001, 0x2905: 0x0001, - 0x2906: 0x0001, 0x2907: 0x0001, 0x2908: 0x0001, 0x2909: 0x0001, 0x290a: 0x0001, 0x290b: 0x0001, - 0x290c: 0x0001, 0x290d: 0x0001, 0x290e: 0x0001, 0x290f: 0x0001, 0x2910: 0x0001, 0x2911: 0x0001, - 0x2912: 0x0001, 0x2913: 0x0001, 0x2914: 0x0001, 0x2915: 0x0001, 0x2916: 0x0001, 0x2917: 0x0001, - 0x2918: 0x0001, 0x2919: 0x0001, 0x291a: 0x0001, 0x291b: 0x0001, 0x291c: 0x0001, 0x291d: 0x0001, - 0x291e: 0x0001, 0x291f: 0x0001, 0x2920: 0x0005, 0x2921: 0x0005, 0x2922: 0x0005, 0x2923: 0x0005, - 0x2924: 0x0005, 0x2925: 0x0005, 0x2926: 0x0005, 0x2927: 0x0005, 0x2928: 0x0005, 0x2929: 0x0005, - 0x292a: 0x0005, 0x292b: 0x0005, 0x292c: 0x0005, 0x292d: 0x0005, 0x292e: 0x0005, 0x292f: 0x0005, - 0x2930: 0x0005, 0x2931: 0x0005, 0x2932: 0x0005, 0x2933: 0x0005, 0x2934: 0x0005, 0x2935: 0x0005, - 0x2936: 0x0005, 0x2937: 0x0005, 0x2938: 0x0005, 0x2939: 0x0005, 0x293a: 0x0005, 0x293b: 0x0005, - 0x293c: 0x0005, 0x293d: 0x0005, 0x293e: 0x0005, 0x293f: 0x0001, - // Block 0xa5, offset 0x2940 - 0x2940: 0x0001, 0x2941: 0x0001, 0x2942: 0x0001, 0x2943: 0x0001, 0x2944: 0x0001, 0x2945: 0x0001, - 0x2946: 0x0001, 0x2947: 0x0001, 0x2948: 0x0001, 0x2949: 0x0001, 0x294a: 0x0001, 0x294b: 0x0001, - 0x294c: 0x0001, 0x294d: 0x0001, 0x294e: 0x0001, 0x294f: 0x0001, 0x2950: 0x0001, 0x2951: 0x0001, - 0x2952: 0x0001, 0x2953: 0x0001, 0x2954: 0x0001, 0x2955: 0x0001, 0x2956: 0x0001, 0x2957: 0x0001, - 0x2958: 0x0001, 0x2959: 0x0001, 0x295a: 0x0001, 0x295b: 0x0001, 0x295c: 0x0001, 0x295d: 0x0001, - 0x295e: 0x0001, 0x295f: 0x0001, 0x2960: 0x0001, 0x2961: 0x0001, 0x2962: 0x0001, 0x2963: 0x0001, - 0x2964: 0x0001, 0x2965: 0x0001, 0x2966: 0x0001, 0x2967: 0x0001, 0x2968: 0x0001, 0x2969: 0x0001, - 0x296a: 0x0001, 0x296b: 0x000c, 0x296c: 0x000c, 0x296d: 0x0001, 0x296e: 0x0001, 0x296f: 0x0001, - 0x2970: 0x0001, 0x2971: 0x0001, 0x2972: 0x0001, 0x2973: 0x0001, 0x2974: 0x0001, 0x2975: 0x0001, - 0x2976: 0x0001, 0x2977: 0x0001, 0x2978: 0x0001, 0x2979: 0x0001, 0x297a: 0x0001, 0x297b: 0x0001, - 0x297c: 0x0001, 0x297d: 0x0001, 0x297e: 0x0001, 0x297f: 0x0001, - // Block 0xa6, offset 0x2980 - 0x2980: 0x0001, 0x2981: 0x0001, 0x2982: 0x0001, 0x2983: 0x0001, 0x2984: 0x0001, 0x2985: 0x0001, - 0x2986: 0x0001, 0x2987: 0x0001, 0x2988: 0x0001, 0x2989: 0x0001, 0x298a: 0x0001, 0x298b: 0x0001, - 0x298c: 0x0001, 0x298d: 0x0001, 0x298e: 0x0001, 0x298f: 0x0001, 0x2990: 0x0001, 0x2991: 0x0001, - 0x2992: 0x0001, 0x2993: 0x0001, 0x2994: 0x0001, 0x2995: 0x0001, 0x2996: 0x0001, 0x2997: 0x0001, - 0x2998: 0x0001, 0x2999: 0x0001, 0x299a: 0x0001, 0x299b: 0x0001, 0x299c: 0x0001, 0x299d: 0x0001, - 0x299e: 0x0001, 0x299f: 0x0001, 0x29a0: 0x0001, 0x29a1: 0x0001, 0x29a2: 0x0001, 0x29a3: 0x0001, - 0x29a4: 0x0001, 0x29a5: 0x0001, 0x29a6: 0x0001, 0x29a7: 0x0001, 0x29a8: 0x0001, 0x29a9: 0x0001, - 0x29aa: 0x0001, 0x29ab: 0x0001, 0x29ac: 0x0001, 0x29ad: 0x0001, 0x29ae: 0x0001, 0x29af: 0x0001, - 0x29b0: 0x000d, 0x29b1: 0x000d, 0x29b2: 0x000d, 0x29b3: 0x000d, 0x29b4: 0x000d, 0x29b5: 0x000d, - 0x29b6: 0x000d, 0x29b7: 0x000d, 0x29b8: 0x000d, 0x29b9: 0x000d, 0x29ba: 0x000d, 0x29bb: 0x000d, - 0x29bc: 0x000d, 0x29bd: 0x000d, 0x29be: 0x000d, 0x29bf: 0x000d, - // Block 0xa7, offset 0x29c0 - 0x29c0: 0x000d, 0x29c1: 0x000d, 0x29c2: 0x000d, 0x29c3: 0x000d, 0x29c4: 0x000d, 0x29c5: 0x000d, - 0x29c6: 0x000c, 0x29c7: 0x000c, 0x29c8: 0x000c, 0x29c9: 0x000c, 0x29ca: 0x000c, 0x29cb: 0x000c, - 0x29cc: 0x000c, 0x29cd: 0x000c, 0x29ce: 0x000c, 0x29cf: 0x000c, 0x29d0: 0x000c, 0x29d1: 0x000d, - 0x29d2: 0x000d, 0x29d3: 0x000d, 0x29d4: 0x000d, 0x29d5: 0x000d, 0x29d6: 0x000d, 0x29d7: 0x000d, - 0x29d8: 0x000d, 0x29d9: 0x000d, 0x29da: 0x000d, 0x29db: 0x000d, 0x29dc: 0x000d, 0x29dd: 0x000d, - 0x29de: 0x000d, 0x29df: 0x000d, 0x29e0: 0x000d, 0x29e1: 0x000d, 0x29e2: 0x000d, 0x29e3: 0x000d, - 0x29e4: 0x000d, 0x29e5: 0x000d, 0x29e6: 0x000d, 0x29e7: 0x000d, 0x29e8: 0x000d, 0x29e9: 0x000d, - 0x29ea: 0x000d, 0x29eb: 0x000d, 0x29ec: 0x000d, 0x29ed: 0x000d, 0x29ee: 0x000d, 0x29ef: 0x000d, - 0x29f0: 0x0001, 0x29f1: 0x0001, 0x29f2: 0x0001, 0x29f3: 0x0001, 0x29f4: 0x0001, 0x29f5: 0x0001, - 0x29f6: 0x0001, 0x29f7: 0x0001, 0x29f8: 0x0001, 0x29f9: 0x0001, 0x29fa: 0x0001, 0x29fb: 0x0001, - 0x29fc: 0x0001, 0x29fd: 0x0001, 0x29fe: 0x0001, 0x29ff: 0x0001, - // Block 0xa8, offset 0x2a00 - 0x2a01: 0x000c, - 0x2a38: 0x000c, 0x2a39: 0x000c, 0x2a3a: 0x000c, 0x2a3b: 0x000c, - 0x2a3c: 0x000c, 0x2a3d: 0x000c, 0x2a3e: 0x000c, 0x2a3f: 0x000c, - // Block 0xa9, offset 0x2a40 - 0x2a40: 0x000c, 0x2a41: 0x000c, 0x2a42: 0x000c, 0x2a43: 0x000c, 0x2a44: 0x000c, 0x2a45: 0x000c, - 0x2a46: 0x000c, - 0x2a52: 0x000a, 0x2a53: 0x000a, 0x2a54: 0x000a, 0x2a55: 0x000a, 0x2a56: 0x000a, 0x2a57: 0x000a, - 0x2a58: 0x000a, 0x2a59: 0x000a, 0x2a5a: 0x000a, 0x2a5b: 0x000a, 0x2a5c: 0x000a, 0x2a5d: 0x000a, - 0x2a5e: 0x000a, 0x2a5f: 0x000a, 0x2a60: 0x000a, 0x2a61: 0x000a, 0x2a62: 0x000a, 0x2a63: 0x000a, - 0x2a64: 0x000a, 0x2a65: 0x000a, - 0x2a7f: 0x000c, - // Block 0xaa, offset 0x2a80 - 0x2a80: 0x000c, 0x2a81: 0x000c, - 0x2ab3: 0x000c, 0x2ab4: 0x000c, 0x2ab5: 0x000c, - 0x2ab6: 0x000c, 0x2ab9: 0x000c, 0x2aba: 0x000c, - // Block 0xab, offset 0x2ac0 - 0x2ac0: 0x000c, 0x2ac1: 0x000c, 0x2ac2: 0x000c, - 0x2ae7: 0x000c, 0x2ae8: 0x000c, 0x2ae9: 0x000c, - 0x2aea: 0x000c, 0x2aeb: 0x000c, 0x2aed: 0x000c, 0x2aee: 0x000c, 0x2aef: 0x000c, - 0x2af0: 0x000c, 0x2af1: 0x000c, 0x2af2: 0x000c, 0x2af3: 0x000c, 0x2af4: 0x000c, - // Block 0xac, offset 0x2b00 - 0x2b33: 0x000c, - // Block 0xad, offset 0x2b40 - 0x2b40: 0x000c, 0x2b41: 0x000c, - 0x2b76: 0x000c, 0x2b77: 0x000c, 0x2b78: 0x000c, 0x2b79: 0x000c, 0x2b7a: 0x000c, 0x2b7b: 0x000c, - 0x2b7c: 0x000c, 0x2b7d: 0x000c, 0x2b7e: 0x000c, - // Block 0xae, offset 0x2b80 - 0x2b89: 0x000c, 0x2b8a: 0x000c, 0x2b8b: 0x000c, - 0x2b8c: 0x000c, 0x2b8f: 0x000c, - // Block 0xaf, offset 0x2bc0 - 0x2bef: 0x000c, - 0x2bf0: 0x000c, 0x2bf1: 0x000c, 0x2bf4: 0x000c, - 0x2bf6: 0x000c, 0x2bf7: 0x000c, - 0x2bfe: 0x000c, - // Block 0xb0, offset 0x2c00 - 0x2c1f: 0x000c, 0x2c23: 0x000c, - 0x2c24: 0x000c, 0x2c25: 0x000c, 0x2c26: 0x000c, 0x2c27: 0x000c, 0x2c28: 0x000c, 0x2c29: 0x000c, - 0x2c2a: 0x000c, - // Block 0xb1, offset 0x2c40 - 0x2c40: 0x000c, - 0x2c66: 0x000c, 0x2c67: 0x000c, 0x2c68: 0x000c, 0x2c69: 0x000c, - 0x2c6a: 0x000c, 0x2c6b: 0x000c, 0x2c6c: 0x000c, - 0x2c70: 0x000c, 0x2c71: 0x000c, 0x2c72: 0x000c, 0x2c73: 0x000c, 0x2c74: 0x000c, - // Block 0xb2, offset 0x2c80 - 0x2cb8: 0x000c, 0x2cb9: 0x000c, 0x2cba: 0x000c, 0x2cbb: 0x000c, - 0x2cbc: 0x000c, 0x2cbd: 0x000c, 0x2cbe: 0x000c, 0x2cbf: 0x000c, - // Block 0xb3, offset 0x2cc0 - 0x2cc2: 0x000c, 0x2cc3: 0x000c, 0x2cc4: 0x000c, - 0x2cc6: 0x000c, - 0x2cde: 0x000c, - // Block 0xb4, offset 0x2d00 - 0x2d33: 0x000c, 0x2d34: 0x000c, 0x2d35: 0x000c, - 0x2d36: 0x000c, 0x2d37: 0x000c, 0x2d38: 0x000c, 0x2d3a: 0x000c, - 0x2d3f: 0x000c, - // Block 0xb5, offset 0x2d40 - 0x2d40: 0x000c, 0x2d42: 0x000c, 0x2d43: 0x000c, - // Block 0xb6, offset 0x2d80 - 0x2db2: 0x000c, 0x2db3: 0x000c, 0x2db4: 0x000c, 0x2db5: 0x000c, - 0x2dbc: 0x000c, 0x2dbd: 0x000c, 0x2dbf: 0x000c, - // Block 0xb7, offset 0x2dc0 - 0x2dc0: 0x000c, - 0x2ddc: 0x000c, 0x2ddd: 0x000c, - // Block 0xb8, offset 0x2e00 - 0x2e33: 0x000c, 0x2e34: 0x000c, 0x2e35: 0x000c, - 0x2e36: 0x000c, 0x2e37: 0x000c, 0x2e38: 0x000c, 0x2e39: 0x000c, 0x2e3a: 0x000c, - 0x2e3d: 0x000c, 0x2e3f: 0x000c, - // Block 0xb9, offset 0x2e40 - 0x2e40: 0x000c, - 0x2e60: 0x000a, 0x2e61: 0x000a, 0x2e62: 0x000a, 0x2e63: 0x000a, - 0x2e64: 0x000a, 0x2e65: 0x000a, 0x2e66: 0x000a, 0x2e67: 0x000a, 0x2e68: 0x000a, 0x2e69: 0x000a, - 0x2e6a: 0x000a, 0x2e6b: 0x000a, 0x2e6c: 0x000a, - // Block 0xba, offset 0x2e80 - 0x2eab: 0x000c, 0x2ead: 0x000c, - 0x2eb0: 0x000c, 0x2eb1: 0x000c, 0x2eb2: 0x000c, 0x2eb3: 0x000c, 0x2eb4: 0x000c, 0x2eb5: 0x000c, - 0x2eb7: 0x000c, - // Block 0xbb, offset 0x2ec0 - 0x2edd: 0x000c, - 0x2ede: 0x000c, 0x2edf: 0x000c, 0x2ee2: 0x000c, 0x2ee3: 0x000c, - 0x2ee4: 0x000c, 0x2ee5: 0x000c, 0x2ee7: 0x000c, 0x2ee8: 0x000c, 0x2ee9: 0x000c, - 0x2eea: 0x000c, 0x2eeb: 0x000c, - // Block 0xbc, offset 0x2f00 - 0x2f2f: 0x000c, - 0x2f30: 0x000c, 0x2f31: 0x000c, 0x2f32: 0x000c, 0x2f33: 0x000c, 0x2f34: 0x000c, 0x2f35: 0x000c, - 0x2f36: 0x000c, 0x2f37: 0x000c, 0x2f39: 0x000c, 0x2f3a: 0x000c, - // Block 0xbd, offset 0x2f40 - 0x2f7b: 0x000c, - 0x2f7c: 0x000c, 0x2f7e: 0x000c, - // Block 0xbe, offset 0x2f80 - 0x2f83: 0x000c, - // Block 0xbf, offset 0x2fc0 - 0x2fd4: 0x000c, 0x2fd5: 0x000c, 0x2fd6: 0x000c, 0x2fd7: 0x000c, - 0x2fda: 0x000c, 0x2fdb: 0x000c, - 0x2fe0: 0x000c, - // Block 0xc0, offset 0x3000 - 0x3001: 0x000c, 0x3002: 0x000c, 0x3003: 0x000c, 0x3004: 0x000c, 0x3005: 0x000c, - 0x3006: 0x000c, 0x3009: 0x000c, 0x300a: 0x000c, - 0x3033: 0x000c, 0x3034: 0x000c, 0x3035: 0x000c, - 0x3036: 0x000c, 0x3037: 0x000c, 0x3038: 0x000c, 0x303b: 0x000c, - 0x303c: 0x000c, 0x303d: 0x000c, 0x303e: 0x000c, - // Block 0xc1, offset 0x3040 - 0x3047: 0x000c, - 0x3051: 0x000c, - 0x3052: 0x000c, 0x3053: 0x000c, 0x3054: 0x000c, 0x3055: 0x000c, 0x3056: 0x000c, - 0x3059: 0x000c, 0x305a: 0x000c, 0x305b: 0x000c, - // Block 0xc2, offset 0x3080 - 0x308a: 0x000c, 0x308b: 0x000c, - 0x308c: 0x000c, 0x308d: 0x000c, 0x308e: 0x000c, 0x308f: 0x000c, 0x3090: 0x000c, 0x3091: 0x000c, - 0x3092: 0x000c, 0x3093: 0x000c, 0x3094: 0x000c, 0x3095: 0x000c, 0x3096: 0x000c, - 0x3098: 0x000c, 0x3099: 0x000c, - // Block 0xc3, offset 0x30c0 - 0x30f0: 0x000c, 0x30f1: 0x000c, 0x30f2: 0x000c, 0x30f3: 0x000c, 0x30f4: 0x000c, 0x30f5: 0x000c, - 0x30f6: 0x000c, 0x30f8: 0x000c, 0x30f9: 0x000c, 0x30fa: 0x000c, 0x30fb: 0x000c, - 0x30fc: 0x000c, 0x30fd: 0x000c, - // Block 0xc4, offset 0x3100 - 0x3112: 0x000c, 0x3113: 0x000c, 0x3114: 0x000c, 0x3115: 0x000c, 0x3116: 0x000c, 0x3117: 0x000c, - 0x3118: 0x000c, 0x3119: 0x000c, 0x311a: 0x000c, 0x311b: 0x000c, 0x311c: 0x000c, 0x311d: 0x000c, - 0x311e: 0x000c, 0x311f: 0x000c, 0x3120: 0x000c, 0x3121: 0x000c, 0x3122: 0x000c, 0x3123: 0x000c, - 0x3124: 0x000c, 0x3125: 0x000c, 0x3126: 0x000c, 0x3127: 0x000c, - 0x312a: 0x000c, 0x312b: 0x000c, 0x312c: 0x000c, 0x312d: 0x000c, 0x312e: 0x000c, 0x312f: 0x000c, - 0x3130: 0x000c, 0x3132: 0x000c, 0x3133: 0x000c, 0x3135: 0x000c, - 0x3136: 0x000c, - // Block 0xc5, offset 0x3140 - 0x3171: 0x000c, 0x3172: 0x000c, 0x3173: 0x000c, 0x3174: 0x000c, 0x3175: 0x000c, - 0x3176: 0x000c, 0x317a: 0x000c, - 0x317c: 0x000c, 0x317d: 0x000c, 0x317f: 0x000c, - // Block 0xc6, offset 0x3180 - 0x3180: 0x000c, 0x3181: 0x000c, 0x3182: 0x000c, 0x3183: 0x000c, 0x3184: 0x000c, 0x3185: 0x000c, - 0x3187: 0x000c, - // Block 0xc7, offset 0x31c0 - 0x31d0: 0x000c, 0x31d1: 0x000c, - 0x31d5: 0x000c, 0x31d7: 0x000c, - // Block 0xc8, offset 0x3200 - 0x3233: 0x000c, 0x3234: 0x000c, - // Block 0xc9, offset 0x3240 - 0x3255: 0x000a, 0x3256: 0x000a, 0x3257: 0x000a, - 0x3258: 0x000a, 0x3259: 0x000a, 0x325a: 0x000a, 0x325b: 0x000a, 0x325c: 0x000a, 0x325d: 0x0004, - 0x325e: 0x0004, 0x325f: 0x0004, 0x3260: 0x0004, 0x3261: 0x000a, 0x3262: 0x000a, 0x3263: 0x000a, - 0x3264: 0x000a, 0x3265: 0x000a, 0x3266: 0x000a, 0x3267: 0x000a, 0x3268: 0x000a, 0x3269: 0x000a, - 0x326a: 0x000a, 0x326b: 0x000a, 0x326c: 0x000a, 0x326d: 0x000a, 0x326e: 0x000a, 0x326f: 0x000a, - 0x3270: 0x000a, 0x3271: 0x000a, - // Block 0xca, offset 0x3280 - 0x32b0: 0x000c, 0x32b1: 0x000c, 0x32b2: 0x000c, 0x32b3: 0x000c, 0x32b4: 0x000c, - // Block 0xcb, offset 0x32c0 - 0x32f0: 0x000c, 0x32f1: 0x000c, 0x32f2: 0x000c, 0x32f3: 0x000c, 0x32f4: 0x000c, 0x32f5: 0x000c, - 0x32f6: 0x000c, - // Block 0xcc, offset 0x3300 - 0x330f: 0x000c, - // Block 0xcd, offset 0x3340 - 0x334f: 0x000c, 0x3350: 0x000c, 0x3351: 0x000c, - 0x3352: 0x000c, - // Block 0xce, offset 0x3380 - 0x33a2: 0x000a, - 0x33a4: 0x000c, - // Block 0xcf, offset 0x33c0 - 0x33dd: 0x000c, - 0x33de: 0x000c, 0x33e0: 0x000b, 0x33e1: 0x000b, 0x33e2: 0x000b, 0x33e3: 0x000b, - // Block 0xd0, offset 0x3400 - 0x3427: 0x000c, 0x3428: 0x000c, 0x3429: 0x000c, - 0x3433: 0x000b, 0x3434: 0x000b, 0x3435: 0x000b, - 0x3436: 0x000b, 0x3437: 0x000b, 0x3438: 0x000b, 0x3439: 0x000b, 0x343a: 0x000b, 0x343b: 0x000c, - 0x343c: 0x000c, 0x343d: 0x000c, 0x343e: 0x000c, 0x343f: 0x000c, - // Block 0xd1, offset 0x3440 - 0x3440: 0x000c, 0x3441: 0x000c, 0x3442: 0x000c, 0x3445: 0x000c, - 0x3446: 0x000c, 0x3447: 0x000c, 0x3448: 0x000c, 0x3449: 0x000c, 0x344a: 0x000c, 0x344b: 0x000c, - 0x346a: 0x000c, 0x346b: 0x000c, 0x346c: 0x000c, 0x346d: 0x000c, - // Block 0xd2, offset 0x3480 - 0x3480: 0x000a, 0x3481: 0x000a, 0x3482: 0x000c, 0x3483: 0x000c, 0x3484: 0x000c, 0x3485: 0x000a, - // Block 0xd3, offset 0x34c0 - 0x34c0: 0x000a, 0x34c1: 0x000a, 0x34c2: 0x000a, 0x34c3: 0x000a, 0x34c4: 0x000a, 0x34c5: 0x000a, - 0x34c6: 0x000a, 0x34c7: 0x000a, 0x34c8: 0x000a, 0x34c9: 0x000a, 0x34ca: 0x000a, 0x34cb: 0x000a, - 0x34cc: 0x000a, 0x34cd: 0x000a, 0x34ce: 0x000a, 0x34cf: 0x000a, 0x34d0: 0x000a, 0x34d1: 0x000a, - 0x34d2: 0x000a, 0x34d3: 0x000a, 0x34d4: 0x000a, 0x34d5: 0x000a, 0x34d6: 0x000a, - // Block 0xd4, offset 0x3500 - 0x351b: 0x000a, - // Block 0xd5, offset 0x3540 - 0x3555: 0x000a, - // Block 0xd6, offset 0x3580 - 0x358f: 0x000a, - // Block 0xd7, offset 0x35c0 - 0x35c9: 0x000a, - // Block 0xd8, offset 0x3600 - 0x3603: 0x000a, - 0x360e: 0x0002, 0x360f: 0x0002, 0x3610: 0x0002, 0x3611: 0x0002, - 0x3612: 0x0002, 0x3613: 0x0002, 0x3614: 0x0002, 0x3615: 0x0002, 0x3616: 0x0002, 0x3617: 0x0002, - 0x3618: 0x0002, 0x3619: 0x0002, 0x361a: 0x0002, 0x361b: 0x0002, 0x361c: 0x0002, 0x361d: 0x0002, - 0x361e: 0x0002, 0x361f: 0x0002, 0x3620: 0x0002, 0x3621: 0x0002, 0x3622: 0x0002, 0x3623: 0x0002, - 0x3624: 0x0002, 0x3625: 0x0002, 0x3626: 0x0002, 0x3627: 0x0002, 0x3628: 0x0002, 0x3629: 0x0002, - 0x362a: 0x0002, 0x362b: 0x0002, 0x362c: 0x0002, 0x362d: 0x0002, 0x362e: 0x0002, 0x362f: 0x0002, - 0x3630: 0x0002, 0x3631: 0x0002, 0x3632: 0x0002, 0x3633: 0x0002, 0x3634: 0x0002, 0x3635: 0x0002, - 0x3636: 0x0002, 0x3637: 0x0002, 0x3638: 0x0002, 0x3639: 0x0002, 0x363a: 0x0002, 0x363b: 0x0002, - 0x363c: 0x0002, 0x363d: 0x0002, 0x363e: 0x0002, 0x363f: 0x0002, - // Block 0xd9, offset 0x3640 - 0x3640: 0x000c, 0x3641: 0x000c, 0x3642: 0x000c, 0x3643: 0x000c, 0x3644: 0x000c, 0x3645: 0x000c, - 0x3646: 0x000c, 0x3647: 0x000c, 0x3648: 0x000c, 0x3649: 0x000c, 0x364a: 0x000c, 0x364b: 0x000c, - 0x364c: 0x000c, 0x364d: 0x000c, 0x364e: 0x000c, 0x364f: 0x000c, 0x3650: 0x000c, 0x3651: 0x000c, - 0x3652: 0x000c, 0x3653: 0x000c, 0x3654: 0x000c, 0x3655: 0x000c, 0x3656: 0x000c, 0x3657: 0x000c, - 0x3658: 0x000c, 0x3659: 0x000c, 0x365a: 0x000c, 0x365b: 0x000c, 0x365c: 0x000c, 0x365d: 0x000c, - 0x365e: 0x000c, 0x365f: 0x000c, 0x3660: 0x000c, 0x3661: 0x000c, 0x3662: 0x000c, 0x3663: 0x000c, - 0x3664: 0x000c, 0x3665: 0x000c, 0x3666: 0x000c, 0x3667: 0x000c, 0x3668: 0x000c, 0x3669: 0x000c, - 0x366a: 0x000c, 0x366b: 0x000c, 0x366c: 0x000c, 0x366d: 0x000c, 0x366e: 0x000c, 0x366f: 0x000c, - 0x3670: 0x000c, 0x3671: 0x000c, 0x3672: 0x000c, 0x3673: 0x000c, 0x3674: 0x000c, 0x3675: 0x000c, - 0x3676: 0x000c, 0x367b: 0x000c, - 0x367c: 0x000c, 0x367d: 0x000c, 0x367e: 0x000c, 0x367f: 0x000c, - // Block 0xda, offset 0x3680 - 0x3680: 0x000c, 0x3681: 0x000c, 0x3682: 0x000c, 0x3683: 0x000c, 0x3684: 0x000c, 0x3685: 0x000c, - 0x3686: 0x000c, 0x3687: 0x000c, 0x3688: 0x000c, 0x3689: 0x000c, 0x368a: 0x000c, 0x368b: 0x000c, - 0x368c: 0x000c, 0x368d: 0x000c, 0x368e: 0x000c, 0x368f: 0x000c, 0x3690: 0x000c, 0x3691: 0x000c, - 0x3692: 0x000c, 0x3693: 0x000c, 0x3694: 0x000c, 0x3695: 0x000c, 0x3696: 0x000c, 0x3697: 0x000c, - 0x3698: 0x000c, 0x3699: 0x000c, 0x369a: 0x000c, 0x369b: 0x000c, 0x369c: 0x000c, 0x369d: 0x000c, - 0x369e: 0x000c, 0x369f: 0x000c, 0x36a0: 0x000c, 0x36a1: 0x000c, 0x36a2: 0x000c, 0x36a3: 0x000c, - 0x36a4: 0x000c, 0x36a5: 0x000c, 0x36a6: 0x000c, 0x36a7: 0x000c, 0x36a8: 0x000c, 0x36a9: 0x000c, - 0x36aa: 0x000c, 0x36ab: 0x000c, 0x36ac: 0x000c, - 0x36b5: 0x000c, - // Block 0xdb, offset 0x36c0 - 0x36c4: 0x000c, - 0x36db: 0x000c, 0x36dc: 0x000c, 0x36dd: 0x000c, - 0x36de: 0x000c, 0x36df: 0x000c, 0x36e1: 0x000c, 0x36e2: 0x000c, 0x36e3: 0x000c, - 0x36e4: 0x000c, 0x36e5: 0x000c, 0x36e6: 0x000c, 0x36e7: 0x000c, 0x36e8: 0x000c, 0x36e9: 0x000c, - 0x36ea: 0x000c, 0x36eb: 0x000c, 0x36ec: 0x000c, 0x36ed: 0x000c, 0x36ee: 0x000c, 0x36ef: 0x000c, - // Block 0xdc, offset 0x3700 - 0x3700: 0x000c, 0x3701: 0x000c, 0x3702: 0x000c, 0x3703: 0x000c, 0x3704: 0x000c, 0x3705: 0x000c, - 0x3706: 0x000c, 0x3708: 0x000c, 0x3709: 0x000c, 0x370a: 0x000c, 0x370b: 0x000c, - 0x370c: 0x000c, 0x370d: 0x000c, 0x370e: 0x000c, 0x370f: 0x000c, 0x3710: 0x000c, 0x3711: 0x000c, - 0x3712: 0x000c, 0x3713: 0x000c, 0x3714: 0x000c, 0x3715: 0x000c, 0x3716: 0x000c, 0x3717: 0x000c, - 0x3718: 0x000c, 0x371b: 0x000c, 0x371c: 0x000c, 0x371d: 0x000c, - 0x371e: 0x000c, 0x371f: 0x000c, 0x3720: 0x000c, 0x3721: 0x000c, 0x3723: 0x000c, - 0x3724: 0x000c, 0x3726: 0x000c, 0x3727: 0x000c, 0x3728: 0x000c, 0x3729: 0x000c, - 0x372a: 0x000c, - // Block 0xdd, offset 0x3740 - 0x376c: 0x000c, 0x376d: 0x000c, 0x376e: 0x000c, 0x376f: 0x000c, - 0x377f: 0x0004, - // Block 0xde, offset 0x3780 - 0x3780: 0x0001, 0x3781: 0x0001, 0x3782: 0x0001, 0x3783: 0x0001, 0x3784: 0x0001, 0x3785: 0x0001, - 0x3786: 0x0001, 0x3787: 0x0001, 0x3788: 0x0001, 0x3789: 0x0001, 0x378a: 0x0001, 0x378b: 0x0001, - 0x378c: 0x0001, 0x378d: 0x0001, 0x378e: 0x0001, 0x378f: 0x0001, 0x3790: 0x000c, 0x3791: 0x000c, - 0x3792: 0x000c, 0x3793: 0x000c, 0x3794: 0x000c, 0x3795: 0x000c, 0x3796: 0x000c, 0x3797: 0x0001, - 0x3798: 0x0001, 0x3799: 0x0001, 0x379a: 0x0001, 0x379b: 0x0001, 0x379c: 0x0001, 0x379d: 0x0001, - 0x379e: 0x0001, 0x379f: 0x0001, 0x37a0: 0x0001, 0x37a1: 0x0001, 0x37a2: 0x0001, 0x37a3: 0x0001, - 0x37a4: 0x0001, 0x37a5: 0x0001, 0x37a6: 0x0001, 0x37a7: 0x0001, 0x37a8: 0x0001, 0x37a9: 0x0001, - 0x37aa: 0x0001, 0x37ab: 0x0001, 0x37ac: 0x0001, 0x37ad: 0x0001, 0x37ae: 0x0001, 0x37af: 0x0001, - 0x37b0: 0x0001, 0x37b1: 0x0001, 0x37b2: 0x0001, 0x37b3: 0x0001, 0x37b4: 0x0001, 0x37b5: 0x0001, - 0x37b6: 0x0001, 0x37b7: 0x0001, 0x37b8: 0x0001, 0x37b9: 0x0001, 0x37ba: 0x0001, 0x37bb: 0x0001, - 0x37bc: 0x0001, 0x37bd: 0x0001, 0x37be: 0x0001, 0x37bf: 0x0001, - // Block 0xdf, offset 0x37c0 - 0x37c0: 0x0001, 0x37c1: 0x0001, 0x37c2: 0x0001, 0x37c3: 0x0001, 0x37c4: 0x000c, 0x37c5: 0x000c, - 0x37c6: 0x000c, 0x37c7: 0x000c, 0x37c8: 0x000c, 0x37c9: 0x000c, 0x37ca: 0x000c, 0x37cb: 0x0001, - 0x37cc: 0x0001, 0x37cd: 0x0001, 0x37ce: 0x0001, 0x37cf: 0x0001, 0x37d0: 0x0001, 0x37d1: 0x0001, - 0x37d2: 0x0001, 0x37d3: 0x0001, 0x37d4: 0x0001, 0x37d5: 0x0001, 0x37d6: 0x0001, 0x37d7: 0x0001, - 0x37d8: 0x0001, 0x37d9: 0x0001, 0x37da: 0x0001, 0x37db: 0x0001, 0x37dc: 0x0001, 0x37dd: 0x0001, - 0x37de: 0x0001, 0x37df: 0x0001, 0x37e0: 0x0001, 0x37e1: 0x0001, 0x37e2: 0x0001, 0x37e3: 0x0001, - 0x37e4: 0x0001, 0x37e5: 0x0001, 0x37e6: 0x0001, 0x37e7: 0x0001, 0x37e8: 0x0001, 0x37e9: 0x0001, - 0x37ea: 0x0001, 0x37eb: 0x0001, 0x37ec: 0x0001, 0x37ed: 0x0001, 0x37ee: 0x0001, 0x37ef: 0x0001, - 0x37f0: 0x0001, 0x37f1: 0x0001, 0x37f2: 0x0001, 0x37f3: 0x0001, 0x37f4: 0x0001, 0x37f5: 0x0001, - 0x37f6: 0x0001, 0x37f7: 0x0001, 0x37f8: 0x0001, 0x37f9: 0x0001, 0x37fa: 0x0001, 0x37fb: 0x0001, - 0x37fc: 0x0001, 0x37fd: 0x0001, 0x37fe: 0x0001, 0x37ff: 0x0001, - // Block 0xe0, offset 0x3800 - 0x3800: 0x000d, 0x3801: 0x000d, 0x3802: 0x000d, 0x3803: 0x000d, 0x3804: 0x000d, 0x3805: 0x000d, - 0x3806: 0x000d, 0x3807: 0x000d, 0x3808: 0x000d, 0x3809: 0x000d, 0x380a: 0x000d, 0x380b: 0x000d, - 0x380c: 0x000d, 0x380d: 0x000d, 0x380e: 0x000d, 0x380f: 0x000d, 0x3810: 0x0001, 0x3811: 0x0001, - 0x3812: 0x0001, 0x3813: 0x0001, 0x3814: 0x0001, 0x3815: 0x0001, 0x3816: 0x0001, 0x3817: 0x0001, - 0x3818: 0x0001, 0x3819: 0x0001, 0x381a: 0x0001, 0x381b: 0x0001, 0x381c: 0x0001, 0x381d: 0x0001, - 0x381e: 0x0001, 0x381f: 0x0001, 0x3820: 0x0001, 0x3821: 0x0001, 0x3822: 0x0001, 0x3823: 0x0001, - 0x3824: 0x0001, 0x3825: 0x0001, 0x3826: 0x0001, 0x3827: 0x0001, 0x3828: 0x0001, 0x3829: 0x0001, - 0x382a: 0x0001, 0x382b: 0x0001, 0x382c: 0x0001, 0x382d: 0x0001, 0x382e: 0x0001, 0x382f: 0x0001, - 0x3830: 0x0001, 0x3831: 0x0001, 0x3832: 0x0001, 0x3833: 0x0001, 0x3834: 0x0001, 0x3835: 0x0001, - 0x3836: 0x0001, 0x3837: 0x0001, 0x3838: 0x0001, 0x3839: 0x0001, 0x383a: 0x0001, 0x383b: 0x0001, - 0x383c: 0x0001, 0x383d: 0x0001, 0x383e: 0x0001, 0x383f: 0x0001, - // Block 0xe1, offset 0x3840 - 0x3840: 0x000d, 0x3841: 0x000d, 0x3842: 0x000d, 0x3843: 0x000d, 0x3844: 0x000d, 0x3845: 0x000d, - 0x3846: 0x000d, 0x3847: 0x000d, 0x3848: 0x000d, 0x3849: 0x000d, 0x384a: 0x000d, 0x384b: 0x000d, - 0x384c: 0x000d, 0x384d: 0x000d, 0x384e: 0x000d, 0x384f: 0x000d, 0x3850: 0x000d, 0x3851: 0x000d, - 0x3852: 0x000d, 0x3853: 0x000d, 0x3854: 0x000d, 0x3855: 0x000d, 0x3856: 0x000d, 0x3857: 0x000d, - 0x3858: 0x000d, 0x3859: 0x000d, 0x385a: 0x000d, 0x385b: 0x000d, 0x385c: 0x000d, 0x385d: 0x000d, - 0x385e: 0x000d, 0x385f: 0x000d, 0x3860: 0x000d, 0x3861: 0x000d, 0x3862: 0x000d, 0x3863: 0x000d, - 0x3864: 0x000d, 0x3865: 0x000d, 0x3866: 0x000d, 0x3867: 0x000d, 0x3868: 0x000d, 0x3869: 0x000d, - 0x386a: 0x000d, 0x386b: 0x000d, 0x386c: 0x000d, 0x386d: 0x000d, 0x386e: 0x000d, 0x386f: 0x000d, - 0x3870: 0x000a, 0x3871: 0x000a, 0x3872: 0x000d, 0x3873: 0x000d, 0x3874: 0x000d, 0x3875: 0x000d, - 0x3876: 0x000d, 0x3877: 0x000d, 0x3878: 0x000d, 0x3879: 0x000d, 0x387a: 0x000d, 0x387b: 0x000d, - 0x387c: 0x000d, 0x387d: 0x000d, 0x387e: 0x000d, 0x387f: 0x000d, - // Block 0xe2, offset 0x3880 - 0x3880: 0x000a, 0x3881: 0x000a, 0x3882: 0x000a, 0x3883: 0x000a, 0x3884: 0x000a, 0x3885: 0x000a, - 0x3886: 0x000a, 0x3887: 0x000a, 0x3888: 0x000a, 0x3889: 0x000a, 0x388a: 0x000a, 0x388b: 0x000a, - 0x388c: 0x000a, 0x388d: 0x000a, 0x388e: 0x000a, 0x388f: 0x000a, 0x3890: 0x000a, 0x3891: 0x000a, - 0x3892: 0x000a, 0x3893: 0x000a, 0x3894: 0x000a, 0x3895: 0x000a, 0x3896: 0x000a, 0x3897: 0x000a, - 0x3898: 0x000a, 0x3899: 0x000a, 0x389a: 0x000a, 0x389b: 0x000a, 0x389c: 0x000a, 0x389d: 0x000a, - 0x389e: 0x000a, 0x389f: 0x000a, 0x38a0: 0x000a, 0x38a1: 0x000a, 0x38a2: 0x000a, 0x38a3: 0x000a, - 0x38a4: 0x000a, 0x38a5: 0x000a, 0x38a6: 0x000a, 0x38a7: 0x000a, 0x38a8: 0x000a, 0x38a9: 0x000a, - 0x38aa: 0x000a, 0x38ab: 0x000a, - 0x38b0: 0x000a, 0x38b1: 0x000a, 0x38b2: 0x000a, 0x38b3: 0x000a, 0x38b4: 0x000a, 0x38b5: 0x000a, - 0x38b6: 0x000a, 0x38b7: 0x000a, 0x38b8: 0x000a, 0x38b9: 0x000a, 0x38ba: 0x000a, 0x38bb: 0x000a, - 0x38bc: 0x000a, 0x38bd: 0x000a, 0x38be: 0x000a, 0x38bf: 0x000a, - // Block 0xe3, offset 0x38c0 - 0x38c0: 0x000a, 0x38c1: 0x000a, 0x38c2: 0x000a, 0x38c3: 0x000a, 0x38c4: 0x000a, 0x38c5: 0x000a, - 0x38c6: 0x000a, 0x38c7: 0x000a, 0x38c8: 0x000a, 0x38c9: 0x000a, 0x38ca: 0x000a, 0x38cb: 0x000a, - 0x38cc: 0x000a, 0x38cd: 0x000a, 0x38ce: 0x000a, 0x38cf: 0x000a, 0x38d0: 0x000a, 0x38d1: 0x000a, - 0x38d2: 0x000a, 0x38d3: 0x000a, - 0x38e0: 0x000a, 0x38e1: 0x000a, 0x38e2: 0x000a, 0x38e3: 0x000a, - 0x38e4: 0x000a, 0x38e5: 0x000a, 0x38e6: 0x000a, 0x38e7: 0x000a, 0x38e8: 0x000a, 0x38e9: 0x000a, - 0x38ea: 0x000a, 0x38eb: 0x000a, 0x38ec: 0x000a, 0x38ed: 0x000a, 0x38ee: 0x000a, - 0x38f1: 0x000a, 0x38f2: 0x000a, 0x38f3: 0x000a, 0x38f4: 0x000a, 0x38f5: 0x000a, - 0x38f6: 0x000a, 0x38f7: 0x000a, 0x38f8: 0x000a, 0x38f9: 0x000a, 0x38fa: 0x000a, 0x38fb: 0x000a, - 0x38fc: 0x000a, 0x38fd: 0x000a, 0x38fe: 0x000a, 0x38ff: 0x000a, - // Block 0xe4, offset 0x3900 - 0x3901: 0x000a, 0x3902: 0x000a, 0x3903: 0x000a, 0x3904: 0x000a, 0x3905: 0x000a, - 0x3906: 0x000a, 0x3907: 0x000a, 0x3908: 0x000a, 0x3909: 0x000a, 0x390a: 0x000a, 0x390b: 0x000a, - 0x390c: 0x000a, 0x390d: 0x000a, 0x390e: 0x000a, 0x390f: 0x000a, 0x3911: 0x000a, - 0x3912: 0x000a, 0x3913: 0x000a, 0x3914: 0x000a, 0x3915: 0x000a, 0x3916: 0x000a, 0x3917: 0x000a, - 0x3918: 0x000a, 0x3919: 0x000a, 0x391a: 0x000a, 0x391b: 0x000a, 0x391c: 0x000a, 0x391d: 0x000a, - 0x391e: 0x000a, 0x391f: 0x000a, 0x3920: 0x000a, 0x3921: 0x000a, 0x3922: 0x000a, 0x3923: 0x000a, - 0x3924: 0x000a, 0x3925: 0x000a, 0x3926: 0x000a, 0x3927: 0x000a, 0x3928: 0x000a, 0x3929: 0x000a, - 0x392a: 0x000a, 0x392b: 0x000a, 0x392c: 0x000a, 0x392d: 0x000a, 0x392e: 0x000a, 0x392f: 0x000a, - 0x3930: 0x000a, 0x3931: 0x000a, 0x3932: 0x000a, 0x3933: 0x000a, 0x3934: 0x000a, 0x3935: 0x000a, - // Block 0xe5, offset 0x3940 - 0x3940: 0x0002, 0x3941: 0x0002, 0x3942: 0x0002, 0x3943: 0x0002, 0x3944: 0x0002, 0x3945: 0x0002, - 0x3946: 0x0002, 0x3947: 0x0002, 0x3948: 0x0002, 0x3949: 0x0002, 0x394a: 0x0002, 0x394b: 0x000a, - 0x394c: 0x000a, 0x394d: 0x000a, 0x394e: 0x000a, 0x394f: 0x000a, - 0x396f: 0x000a, - // Block 0xe6, offset 0x3980 - 0x39aa: 0x000a, 0x39ab: 0x000a, 0x39ac: 0x000a, 0x39ad: 0x000a, 0x39ae: 0x000a, 0x39af: 0x000a, - // Block 0xe7, offset 0x39c0 - 0x39ed: 0x000a, - // Block 0xe8, offset 0x3a00 - 0x3a20: 0x000a, 0x3a21: 0x000a, 0x3a22: 0x000a, 0x3a23: 0x000a, - 0x3a24: 0x000a, 0x3a25: 0x000a, - // Block 0xe9, offset 0x3a40 - 0x3a40: 0x000a, 0x3a41: 0x000a, 0x3a42: 0x000a, 0x3a43: 0x000a, 0x3a44: 0x000a, 0x3a45: 0x000a, - 0x3a46: 0x000a, 0x3a47: 0x000a, 0x3a48: 0x000a, 0x3a49: 0x000a, 0x3a4a: 0x000a, 0x3a4b: 0x000a, - 0x3a4c: 0x000a, 0x3a4d: 0x000a, 0x3a4e: 0x000a, 0x3a4f: 0x000a, 0x3a50: 0x000a, 0x3a51: 0x000a, - 0x3a52: 0x000a, 0x3a53: 0x000a, 0x3a54: 0x000a, 0x3a55: 0x000a, 0x3a56: 0x000a, 0x3a57: 0x000a, - 0x3a60: 0x000a, 0x3a61: 0x000a, 0x3a62: 0x000a, 0x3a63: 0x000a, - 0x3a64: 0x000a, 0x3a65: 0x000a, 0x3a66: 0x000a, 0x3a67: 0x000a, 0x3a68: 0x000a, 0x3a69: 0x000a, - 0x3a6a: 0x000a, 0x3a6b: 0x000a, 0x3a6c: 0x000a, - 0x3a70: 0x000a, 0x3a71: 0x000a, 0x3a72: 0x000a, 0x3a73: 0x000a, 0x3a74: 0x000a, 0x3a75: 0x000a, - 0x3a76: 0x000a, 0x3a77: 0x000a, 0x3a78: 0x000a, 0x3a79: 0x000a, 0x3a7a: 0x000a, 0x3a7b: 0x000a, - 0x3a7c: 0x000a, - // Block 0xea, offset 0x3a80 - 0x3a80: 0x000a, 0x3a81: 0x000a, 0x3a82: 0x000a, 0x3a83: 0x000a, 0x3a84: 0x000a, 0x3a85: 0x000a, - 0x3a86: 0x000a, 0x3a87: 0x000a, 0x3a88: 0x000a, 0x3a89: 0x000a, 0x3a8a: 0x000a, 0x3a8b: 0x000a, - 0x3a8c: 0x000a, 0x3a8d: 0x000a, 0x3a8e: 0x000a, 0x3a8f: 0x000a, 0x3a90: 0x000a, 0x3a91: 0x000a, - 0x3a92: 0x000a, 0x3a93: 0x000a, 0x3a94: 0x000a, 0x3a95: 0x000a, 0x3a96: 0x000a, 0x3a97: 0x000a, - 0x3a98: 0x000a, - 0x3aa0: 0x000a, 0x3aa1: 0x000a, 0x3aa2: 0x000a, 0x3aa3: 0x000a, - 0x3aa4: 0x000a, 0x3aa5: 0x000a, 0x3aa6: 0x000a, 0x3aa7: 0x000a, 0x3aa8: 0x000a, 0x3aa9: 0x000a, - 0x3aaa: 0x000a, 0x3aab: 0x000a, - // Block 0xeb, offset 0x3ac0 - 0x3ac0: 0x000a, 0x3ac1: 0x000a, 0x3ac2: 0x000a, 0x3ac3: 0x000a, 0x3ac4: 0x000a, 0x3ac5: 0x000a, - 0x3ac6: 0x000a, 0x3ac7: 0x000a, 0x3ac8: 0x000a, 0x3ac9: 0x000a, 0x3aca: 0x000a, 0x3acb: 0x000a, - 0x3ad0: 0x000a, 0x3ad1: 0x000a, - 0x3ad2: 0x000a, 0x3ad3: 0x000a, 0x3ad4: 0x000a, 0x3ad5: 0x000a, 0x3ad6: 0x000a, 0x3ad7: 0x000a, - 0x3ad8: 0x000a, 0x3ad9: 0x000a, 0x3ada: 0x000a, 0x3adb: 0x000a, 0x3adc: 0x000a, 0x3add: 0x000a, - 0x3ade: 0x000a, 0x3adf: 0x000a, 0x3ae0: 0x000a, 0x3ae1: 0x000a, 0x3ae2: 0x000a, 0x3ae3: 0x000a, - 0x3ae4: 0x000a, 0x3ae5: 0x000a, 0x3ae6: 0x000a, 0x3ae7: 0x000a, 0x3ae8: 0x000a, 0x3ae9: 0x000a, - 0x3aea: 0x000a, 0x3aeb: 0x000a, 0x3aec: 0x000a, 0x3aed: 0x000a, 0x3aee: 0x000a, 0x3aef: 0x000a, - 0x3af0: 0x000a, 0x3af1: 0x000a, 0x3af2: 0x000a, 0x3af3: 0x000a, 0x3af4: 0x000a, 0x3af5: 0x000a, - 0x3af6: 0x000a, 0x3af7: 0x000a, 0x3af8: 0x000a, 0x3af9: 0x000a, 0x3afa: 0x000a, 0x3afb: 0x000a, - 0x3afc: 0x000a, 0x3afd: 0x000a, 0x3afe: 0x000a, 0x3aff: 0x000a, - // Block 0xec, offset 0x3b00 - 0x3b00: 0x000a, 0x3b01: 0x000a, 0x3b02: 0x000a, 0x3b03: 0x000a, 0x3b04: 0x000a, 0x3b05: 0x000a, - 0x3b06: 0x000a, 0x3b07: 0x000a, - 0x3b10: 0x000a, 0x3b11: 0x000a, - 0x3b12: 0x000a, 0x3b13: 0x000a, 0x3b14: 0x000a, 0x3b15: 0x000a, 0x3b16: 0x000a, 0x3b17: 0x000a, - 0x3b18: 0x000a, 0x3b19: 0x000a, - 0x3b20: 0x000a, 0x3b21: 0x000a, 0x3b22: 0x000a, 0x3b23: 0x000a, - 0x3b24: 0x000a, 0x3b25: 0x000a, 0x3b26: 0x000a, 0x3b27: 0x000a, 0x3b28: 0x000a, 0x3b29: 0x000a, - 0x3b2a: 0x000a, 0x3b2b: 0x000a, 0x3b2c: 0x000a, 0x3b2d: 0x000a, 0x3b2e: 0x000a, 0x3b2f: 0x000a, - 0x3b30: 0x000a, 0x3b31: 0x000a, 0x3b32: 0x000a, 0x3b33: 0x000a, 0x3b34: 0x000a, 0x3b35: 0x000a, - 0x3b36: 0x000a, 0x3b37: 0x000a, 0x3b38: 0x000a, 0x3b39: 0x000a, 0x3b3a: 0x000a, 0x3b3b: 0x000a, - 0x3b3c: 0x000a, 0x3b3d: 0x000a, 0x3b3e: 0x000a, 0x3b3f: 0x000a, - // Block 0xed, offset 0x3b40 - 0x3b40: 0x000a, 0x3b41: 0x000a, 0x3b42: 0x000a, 0x3b43: 0x000a, 0x3b44: 0x000a, 0x3b45: 0x000a, - 0x3b46: 0x000a, 0x3b47: 0x000a, - 0x3b50: 0x000a, 0x3b51: 0x000a, - 0x3b52: 0x000a, 0x3b53: 0x000a, 0x3b54: 0x000a, 0x3b55: 0x000a, 0x3b56: 0x000a, 0x3b57: 0x000a, - 0x3b58: 0x000a, 0x3b59: 0x000a, 0x3b5a: 0x000a, 0x3b5b: 0x000a, 0x3b5c: 0x000a, 0x3b5d: 0x000a, - 0x3b5e: 0x000a, 0x3b5f: 0x000a, 0x3b60: 0x000a, 0x3b61: 0x000a, 0x3b62: 0x000a, 0x3b63: 0x000a, - 0x3b64: 0x000a, 0x3b65: 0x000a, 0x3b66: 0x000a, 0x3b67: 0x000a, 0x3b68: 0x000a, 0x3b69: 0x000a, - 0x3b6a: 0x000a, 0x3b6b: 0x000a, 0x3b6c: 0x000a, 0x3b6d: 0x000a, - 0x3b70: 0x000a, 0x3b71: 0x000a, - // Block 0xee, offset 0x3b80 - 0x3b80: 0x000a, 0x3b81: 0x000a, 0x3b82: 0x000a, 0x3b83: 0x000a, 0x3b84: 0x000a, 0x3b85: 0x000a, - 0x3b86: 0x000a, 0x3b87: 0x000a, 0x3b88: 0x000a, 0x3b89: 0x000a, 0x3b8a: 0x000a, 0x3b8b: 0x000a, - 0x3b8c: 0x000a, 0x3b8d: 0x000a, 0x3b8e: 0x000a, 0x3b8f: 0x000a, 0x3b90: 0x000a, 0x3b91: 0x000a, - 0x3b92: 0x000a, 0x3b93: 0x000a, 0x3b94: 0x000a, 0x3b95: 0x000a, 0x3b96: 0x000a, 0x3b97: 0x000a, - 0x3b98: 0x000a, 0x3b99: 0x000a, 0x3b9a: 0x000a, 0x3b9b: 0x000a, 0x3b9c: 0x000a, 0x3b9d: 0x000a, - 0x3b9e: 0x000a, 0x3b9f: 0x000a, 0x3ba0: 0x000a, 0x3ba1: 0x000a, 0x3ba2: 0x000a, 0x3ba3: 0x000a, - 0x3ba4: 0x000a, 0x3ba5: 0x000a, 0x3ba6: 0x000a, 0x3ba7: 0x000a, 0x3ba8: 0x000a, 0x3ba9: 0x000a, - 0x3baa: 0x000a, 0x3bab: 0x000a, 0x3bac: 0x000a, 0x3bad: 0x000a, 0x3bae: 0x000a, 0x3baf: 0x000a, - 0x3bb0: 0x000a, 0x3bb1: 0x000a, 0x3bb2: 0x000a, 0x3bb3: 0x000a, 0x3bb4: 0x000a, 0x3bb5: 0x000a, - 0x3bb6: 0x000a, 0x3bb7: 0x000a, 0x3bb8: 0x000a, 0x3bba: 0x000a, 0x3bbb: 0x000a, - 0x3bbc: 0x000a, 0x3bbd: 0x000a, 0x3bbe: 0x000a, 0x3bbf: 0x000a, - // Block 0xef, offset 0x3bc0 - 0x3bc0: 0x000a, 0x3bc1: 0x000a, 0x3bc2: 0x000a, 0x3bc3: 0x000a, 0x3bc4: 0x000a, 0x3bc5: 0x000a, - 0x3bc6: 0x000a, 0x3bc7: 0x000a, 0x3bc8: 0x000a, 0x3bc9: 0x000a, 0x3bca: 0x000a, 0x3bcb: 0x000a, - 0x3bcd: 0x000a, 0x3bce: 0x000a, 0x3bcf: 0x000a, 0x3bd0: 0x000a, 0x3bd1: 0x000a, - 0x3bd2: 0x000a, 0x3bd3: 0x000a, 0x3bd4: 0x000a, 0x3bd5: 0x000a, 0x3bd6: 0x000a, 0x3bd7: 0x000a, - 0x3bd8: 0x000a, 0x3bd9: 0x000a, 0x3bda: 0x000a, 0x3bdb: 0x000a, 0x3bdc: 0x000a, 0x3bdd: 0x000a, - 0x3bde: 0x000a, 0x3bdf: 0x000a, 0x3be0: 0x000a, 0x3be1: 0x000a, 0x3be2: 0x000a, 0x3be3: 0x000a, - 0x3be4: 0x000a, 0x3be5: 0x000a, 0x3be6: 0x000a, 0x3be7: 0x000a, 0x3be8: 0x000a, 0x3be9: 0x000a, - 0x3bea: 0x000a, 0x3beb: 0x000a, 0x3bec: 0x000a, 0x3bed: 0x000a, 0x3bee: 0x000a, 0x3bef: 0x000a, - 0x3bf0: 0x000a, 0x3bf1: 0x000a, 0x3bf2: 0x000a, 0x3bf3: 0x000a, 0x3bf4: 0x000a, 0x3bf5: 0x000a, - 0x3bf6: 0x000a, 0x3bf7: 0x000a, 0x3bf8: 0x000a, 0x3bf9: 0x000a, 0x3bfa: 0x000a, 0x3bfb: 0x000a, - 0x3bfc: 0x000a, 0x3bfd: 0x000a, 0x3bfe: 0x000a, 0x3bff: 0x000a, - // Block 0xf0, offset 0x3c00 - 0x3c00: 0x000a, 0x3c01: 0x000a, 0x3c02: 0x000a, 0x3c03: 0x000a, 0x3c04: 0x000a, 0x3c05: 0x000a, - 0x3c06: 0x000a, 0x3c07: 0x000a, 0x3c08: 0x000a, 0x3c09: 0x000a, 0x3c0a: 0x000a, 0x3c0b: 0x000a, - 0x3c0c: 0x000a, 0x3c0d: 0x000a, 0x3c0e: 0x000a, 0x3c0f: 0x000a, 0x3c10: 0x000a, 0x3c11: 0x000a, - 0x3c12: 0x000a, 0x3c13: 0x000a, - 0x3c20: 0x000a, 0x3c21: 0x000a, 0x3c22: 0x000a, 0x3c23: 0x000a, - 0x3c24: 0x000a, 0x3c25: 0x000a, 0x3c26: 0x000a, 0x3c27: 0x000a, 0x3c28: 0x000a, 0x3c29: 0x000a, - 0x3c2a: 0x000a, 0x3c2b: 0x000a, 0x3c2c: 0x000a, 0x3c2d: 0x000a, - 0x3c30: 0x000a, 0x3c31: 0x000a, 0x3c32: 0x000a, 0x3c33: 0x000a, 0x3c34: 0x000a, - 0x3c38: 0x000a, 0x3c39: 0x000a, 0x3c3a: 0x000a, - // Block 0xf1, offset 0x3c40 - 0x3c40: 0x000a, 0x3c41: 0x000a, 0x3c42: 0x000a, 0x3c43: 0x000a, 0x3c44: 0x000a, 0x3c45: 0x000a, - 0x3c46: 0x000a, - 0x3c50: 0x000a, 0x3c51: 0x000a, - 0x3c52: 0x000a, 0x3c53: 0x000a, 0x3c54: 0x000a, 0x3c55: 0x000a, 0x3c56: 0x000a, 0x3c57: 0x000a, - 0x3c58: 0x000a, 0x3c59: 0x000a, 0x3c5a: 0x000a, 0x3c5b: 0x000a, 0x3c5c: 0x000a, 0x3c5d: 0x000a, - 0x3c5e: 0x000a, 0x3c5f: 0x000a, 0x3c60: 0x000a, 0x3c61: 0x000a, 0x3c62: 0x000a, 0x3c63: 0x000a, - 0x3c64: 0x000a, 0x3c65: 0x000a, 0x3c66: 0x000a, 0x3c67: 0x000a, 0x3c68: 0x000a, - 0x3c70: 0x000a, 0x3c71: 0x000a, 0x3c72: 0x000a, 0x3c73: 0x000a, 0x3c74: 0x000a, 0x3c75: 0x000a, - 0x3c76: 0x000a, - // Block 0xf2, offset 0x3c80 - 0x3c80: 0x000a, 0x3c81: 0x000a, 0x3c82: 0x000a, - 0x3c90: 0x000a, 0x3c91: 0x000a, - 0x3c92: 0x000a, 0x3c93: 0x000a, 0x3c94: 0x000a, 0x3c95: 0x000a, 0x3c96: 0x000a, - // Block 0xf3, offset 0x3cc0 - 0x3cc0: 0x000a, 0x3cc1: 0x000a, 0x3cc2: 0x000a, 0x3cc3: 0x000a, 0x3cc4: 0x000a, 0x3cc5: 0x000a, - 0x3cc6: 0x000a, 0x3cc7: 0x000a, 0x3cc8: 0x000a, 0x3cc9: 0x000a, 0x3cca: 0x000a, 0x3ccb: 0x000a, - 0x3ccc: 0x000a, 0x3ccd: 0x000a, 0x3cce: 0x000a, 0x3ccf: 0x000a, 0x3cd0: 0x000a, 0x3cd1: 0x000a, - 0x3cd2: 0x000a, 0x3cd4: 0x000a, 0x3cd5: 0x000a, 0x3cd6: 0x000a, 0x3cd7: 0x000a, - 0x3cd8: 0x000a, 0x3cd9: 0x000a, 0x3cda: 0x000a, 0x3cdb: 0x000a, 0x3cdc: 0x000a, 0x3cdd: 0x000a, - 0x3cde: 0x000a, 0x3cdf: 0x000a, 0x3ce0: 0x000a, 0x3ce1: 0x000a, 0x3ce2: 0x000a, 0x3ce3: 0x000a, - 0x3ce4: 0x000a, 0x3ce5: 0x000a, 0x3ce6: 0x000a, 0x3ce7: 0x000a, 0x3ce8: 0x000a, 0x3ce9: 0x000a, - 0x3cea: 0x000a, 0x3ceb: 0x000a, 0x3cec: 0x000a, 0x3ced: 0x000a, 0x3cee: 0x000a, 0x3cef: 0x000a, - 0x3cf0: 0x000a, 0x3cf1: 0x000a, 0x3cf2: 0x000a, 0x3cf3: 0x000a, 0x3cf4: 0x000a, 0x3cf5: 0x000a, - 0x3cf6: 0x000a, 0x3cf7: 0x000a, 0x3cf8: 0x000a, 0x3cf9: 0x000a, 0x3cfa: 0x000a, 0x3cfb: 0x000a, - 0x3cfc: 0x000a, 0x3cfd: 0x000a, 0x3cfe: 0x000a, 0x3cff: 0x000a, - // Block 0xf4, offset 0x3d00 - 0x3d00: 0x000a, 0x3d01: 0x000a, 0x3d02: 0x000a, 0x3d03: 0x000a, 0x3d04: 0x000a, 0x3d05: 0x000a, - 0x3d06: 0x000a, 0x3d07: 0x000a, 0x3d08: 0x000a, 0x3d09: 0x000a, 0x3d0a: 0x000a, - 0x3d30: 0x0002, 0x3d31: 0x0002, 0x3d32: 0x0002, 0x3d33: 0x0002, 0x3d34: 0x0002, 0x3d35: 0x0002, - 0x3d36: 0x0002, 0x3d37: 0x0002, 0x3d38: 0x0002, 0x3d39: 0x0002, - // Block 0xf5, offset 0x3d40 - 0x3d7e: 0x000b, 0x3d7f: 0x000b, - // Block 0xf6, offset 0x3d80 - 0x3d80: 0x000b, 0x3d81: 0x000b, 0x3d82: 0x000b, 0x3d83: 0x000b, 0x3d84: 0x000b, 0x3d85: 0x000b, - 0x3d86: 0x000b, 0x3d87: 0x000b, 0x3d88: 0x000b, 0x3d89: 0x000b, 0x3d8a: 0x000b, 0x3d8b: 0x000b, - 0x3d8c: 0x000b, 0x3d8d: 0x000b, 0x3d8e: 0x000b, 0x3d8f: 0x000b, 0x3d90: 0x000b, 0x3d91: 0x000b, - 0x3d92: 0x000b, 0x3d93: 0x000b, 0x3d94: 0x000b, 0x3d95: 0x000b, 0x3d96: 0x000b, 0x3d97: 0x000b, - 0x3d98: 0x000b, 0x3d99: 0x000b, 0x3d9a: 0x000b, 0x3d9b: 0x000b, 0x3d9c: 0x000b, 0x3d9d: 0x000b, - 0x3d9e: 0x000b, 0x3d9f: 0x000b, 0x3da0: 0x000b, 0x3da1: 0x000b, 0x3da2: 0x000b, 0x3da3: 0x000b, - 0x3da4: 0x000b, 0x3da5: 0x000b, 0x3da6: 0x000b, 0x3da7: 0x000b, 0x3da8: 0x000b, 0x3da9: 0x000b, - 0x3daa: 0x000b, 0x3dab: 0x000b, 0x3dac: 0x000b, 0x3dad: 0x000b, 0x3dae: 0x000b, 0x3daf: 0x000b, - 0x3db0: 0x000b, 0x3db1: 0x000b, 0x3db2: 0x000b, 0x3db3: 0x000b, 0x3db4: 0x000b, 0x3db5: 0x000b, - 0x3db6: 0x000b, 0x3db7: 0x000b, 0x3db8: 0x000b, 0x3db9: 0x000b, 0x3dba: 0x000b, 0x3dbb: 0x000b, - 0x3dbc: 0x000b, 0x3dbd: 0x000b, 0x3dbe: 0x000b, 0x3dbf: 0x000b, - // Block 0xf7, offset 0x3dc0 - 0x3dc0: 0x000c, 0x3dc1: 0x000c, 0x3dc2: 0x000c, 0x3dc3: 0x000c, 0x3dc4: 0x000c, 0x3dc5: 0x000c, - 0x3dc6: 0x000c, 0x3dc7: 0x000c, 0x3dc8: 0x000c, 0x3dc9: 0x000c, 0x3dca: 0x000c, 0x3dcb: 0x000c, - 0x3dcc: 0x000c, 0x3dcd: 0x000c, 0x3dce: 0x000c, 0x3dcf: 0x000c, 0x3dd0: 0x000c, 0x3dd1: 0x000c, - 0x3dd2: 0x000c, 0x3dd3: 0x000c, 0x3dd4: 0x000c, 0x3dd5: 0x000c, 0x3dd6: 0x000c, 0x3dd7: 0x000c, - 0x3dd8: 0x000c, 0x3dd9: 0x000c, 0x3dda: 0x000c, 0x3ddb: 0x000c, 0x3ddc: 0x000c, 0x3ddd: 0x000c, - 0x3dde: 0x000c, 0x3ddf: 0x000c, 0x3de0: 0x000c, 0x3de1: 0x000c, 0x3de2: 0x000c, 0x3de3: 0x000c, - 0x3de4: 0x000c, 0x3de5: 0x000c, 0x3de6: 0x000c, 0x3de7: 0x000c, 0x3de8: 0x000c, 0x3de9: 0x000c, - 0x3dea: 0x000c, 0x3deb: 0x000c, 0x3dec: 0x000c, 0x3ded: 0x000c, 0x3dee: 0x000c, 0x3def: 0x000c, - 0x3df0: 0x000b, 0x3df1: 0x000b, 0x3df2: 0x000b, 0x3df3: 0x000b, 0x3df4: 0x000b, 0x3df5: 0x000b, - 0x3df6: 0x000b, 0x3df7: 0x000b, 0x3df8: 0x000b, 0x3df9: 0x000b, 0x3dfa: 0x000b, 0x3dfb: 0x000b, - 0x3dfc: 0x000b, 0x3dfd: 0x000b, 0x3dfe: 0x000b, 0x3dff: 0x000b, -} - -// bidiIndex: 24 blocks, 1536 entries, 1536 bytes -// Block 0 is the zero block. -var bidiIndex = [1536]uint8{ - // Block 0x0, offset 0x0 - // Block 0x1, offset 0x40 - // Block 0x2, offset 0x80 - // Block 0x3, offset 0xc0 - 0xc2: 0x01, 0xc3: 0x02, - 0xca: 0x03, 0xcb: 0x04, 0xcc: 0x05, 0xcd: 0x06, 0xce: 0x07, 0xcf: 0x08, - 0xd2: 0x09, 0xd6: 0x0a, 0xd7: 0x0b, - 0xd8: 0x0c, 0xd9: 0x0d, 0xda: 0x0e, 0xdb: 0x0f, 0xdc: 0x10, 0xdd: 0x11, 0xde: 0x12, 0xdf: 0x13, - 0xe0: 0x02, 0xe1: 0x03, 0xe2: 0x04, 0xe3: 0x05, 0xe4: 0x06, - 0xea: 0x07, 0xef: 0x08, - 0xf0: 0x11, 0xf1: 0x12, 0xf2: 0x12, 0xf3: 0x14, 0xf4: 0x15, - // Block 0x4, offset 0x100 - 0x120: 0x14, 0x121: 0x15, 0x122: 0x16, 0x123: 0x17, 0x124: 0x18, 0x125: 0x19, 0x126: 0x1a, 0x127: 0x1b, - 0x128: 0x1c, 0x129: 0x1d, 0x12a: 0x1c, 0x12b: 0x1e, 0x12c: 0x1f, 0x12d: 0x20, 0x12e: 0x21, 0x12f: 0x22, - 0x130: 0x23, 0x131: 0x24, 0x132: 0x1a, 0x133: 0x25, 0x134: 0x26, 0x135: 0x27, 0x136: 0x28, 0x137: 0x29, - 0x138: 0x2a, 0x139: 0x2b, 0x13a: 0x2c, 0x13b: 0x2d, 0x13c: 0x2e, 0x13d: 0x2f, 0x13e: 0x30, 0x13f: 0x31, - // Block 0x5, offset 0x140 - 0x140: 0x32, 0x141: 0x33, 0x142: 0x34, - 0x14d: 0x35, 0x14e: 0x36, - 0x150: 0x37, - 0x15a: 0x38, 0x15c: 0x39, 0x15d: 0x3a, 0x15e: 0x3b, 0x15f: 0x3c, - 0x160: 0x3d, 0x162: 0x3e, 0x164: 0x3f, 0x165: 0x40, 0x167: 0x41, - 0x168: 0x42, 0x169: 0x43, 0x16a: 0x44, 0x16b: 0x45, 0x16c: 0x46, 0x16d: 0x47, 0x16e: 0x48, 0x16f: 0x49, - 0x170: 0x4a, 0x173: 0x4b, 0x177: 0x4c, - 0x17e: 0x4d, 0x17f: 0x4e, - // Block 0x6, offset 0x180 - 0x180: 0x4f, 0x181: 0x50, 0x182: 0x51, 0x183: 0x52, 0x184: 0x53, 0x185: 0x54, 0x186: 0x55, 0x187: 0x56, - 0x188: 0x57, 0x189: 0x56, 0x18a: 0x56, 0x18b: 0x56, 0x18c: 0x58, 0x18d: 0x59, 0x18e: 0x5a, 0x18f: 0x56, - 0x190: 0x5b, 0x191: 0x5c, 0x192: 0x5d, 0x193: 0x5e, 0x194: 0x56, 0x195: 0x56, 0x196: 0x56, 0x197: 0x56, - 0x198: 0x56, 0x199: 0x56, 0x19a: 0x5f, 0x19b: 0x56, 0x19c: 0x56, 0x19d: 0x60, 0x19e: 0x56, 0x19f: 0x61, - 0x1a4: 0x56, 0x1a5: 0x56, 0x1a6: 0x62, 0x1a7: 0x63, - 0x1a8: 0x56, 0x1a9: 0x56, 0x1aa: 0x56, 0x1ab: 0x56, 0x1ac: 0x56, 0x1ad: 0x64, 0x1ae: 0x65, 0x1af: 0x56, - 0x1b3: 0x66, 0x1b5: 0x67, 0x1b7: 0x68, - 0x1b8: 0x69, 0x1b9: 0x6a, 0x1ba: 0x6b, 0x1bb: 0x6c, 0x1bc: 0x56, 0x1bd: 0x56, 0x1be: 0x56, 0x1bf: 0x6d, - // Block 0x7, offset 0x1c0 - 0x1c0: 0x6e, 0x1c2: 0x6f, 0x1c3: 0x70, 0x1c7: 0x71, - 0x1c8: 0x72, 0x1c9: 0x73, 0x1ca: 0x74, 0x1cb: 0x75, 0x1cd: 0x76, 0x1cf: 0x77, - // Block 0x8, offset 0x200 - 0x237: 0x56, - // Block 0x9, offset 0x240 - 0x252: 0x78, 0x253: 0x79, - 0x258: 0x7a, 0x259: 0x7b, 0x25a: 0x7c, 0x25b: 0x7d, 0x25c: 0x7e, 0x25e: 0x7f, - 0x260: 0x80, 0x261: 0x81, 0x263: 0x82, 0x264: 0x83, 0x265: 0x84, 0x266: 0x85, 0x267: 0x86, - 0x268: 0x87, 0x269: 0x88, 0x26a: 0x89, 0x26b: 0x8a, 0x26d: 0x8b, 0x26f: 0x8c, - // Block 0xa, offset 0x280 - 0x2ac: 0x8d, 0x2ad: 0x8e, 0x2ae: 0x0e, 0x2af: 0x0e, - 0x2b0: 0x0e, 0x2b1: 0x0e, 0x2b2: 0x0e, 0x2b3: 0x0e, 0x2b4: 0x8f, 0x2b5: 0x0e, 0x2b6: 0x0e, 0x2b7: 0x90, - 0x2b8: 0x91, 0x2b9: 0x92, 0x2ba: 0x0e, 0x2bb: 0x93, 0x2bc: 0x94, 0x2bd: 0x95, 0x2bf: 0x96, - // Block 0xb, offset 0x2c0 - 0x2c4: 0x97, 0x2c5: 0x56, 0x2c6: 0x98, 0x2c7: 0x99, - 0x2cb: 0x9a, 0x2cd: 0x9b, - 0x2e0: 0x9c, 0x2e1: 0x9c, 0x2e2: 0x9c, 0x2e3: 0x9c, 0x2e4: 0x9d, 0x2e5: 0x9c, 0x2e6: 0x9c, 0x2e7: 0x9c, - 0x2e8: 0x9e, 0x2e9: 0x9c, 0x2ea: 0x9c, 0x2eb: 0x9f, 0x2ec: 0xa0, 0x2ed: 0x9c, 0x2ee: 0x9c, 0x2ef: 0x9c, - 0x2f0: 0x9c, 0x2f1: 0x9c, 0x2f2: 0x9c, 0x2f3: 0x9c, 0x2f4: 0xa1, 0x2f5: 0x9c, 0x2f6: 0x9c, 0x2f7: 0x9c, - 0x2f8: 0x9c, 0x2f9: 0xa2, 0x2fa: 0xa3, 0x2fb: 0x9c, 0x2fc: 0xa4, 0x2fd: 0xa5, 0x2fe: 0x9c, 0x2ff: 0x9c, - // Block 0xc, offset 0x300 - 0x300: 0xa6, 0x301: 0xa7, 0x302: 0xa8, 0x304: 0xa9, 0x305: 0xaa, 0x306: 0xab, 0x307: 0xac, - 0x308: 0xad, 0x30b: 0xae, 0x30c: 0x26, 0x30d: 0xaf, - 0x310: 0xb0, 0x311: 0xb1, 0x312: 0xb2, 0x313: 0xb3, 0x316: 0xb4, 0x317: 0xb5, - 0x318: 0xb6, 0x319: 0xb7, 0x31a: 0xb8, 0x31c: 0xb9, - 0x320: 0xba, 0x324: 0xbb, 0x325: 0xbc, 0x327: 0xbd, - 0x328: 0xbe, 0x329: 0xbf, 0x32a: 0xc0, - 0x330: 0xc1, 0x332: 0xc2, 0x334: 0xc3, 0x335: 0xc4, 0x336: 0xc5, - 0x33b: 0xc6, 0x33f: 0xc7, - // Block 0xd, offset 0x340 - 0x36b: 0xc8, 0x36c: 0xc9, - 0x37d: 0xca, 0x37e: 0xcb, 0x37f: 0xcc, - // Block 0xe, offset 0x380 - 0x3b2: 0xcd, - // Block 0xf, offset 0x3c0 - 0x3c5: 0xce, 0x3c6: 0xcf, - 0x3c8: 0x56, 0x3c9: 0xd0, 0x3cc: 0x56, 0x3cd: 0xd1, - 0x3db: 0xd2, 0x3dc: 0xd3, 0x3dd: 0xd4, 0x3de: 0xd5, 0x3df: 0xd6, - 0x3e8: 0xd7, 0x3e9: 0xd8, 0x3ea: 0xd9, - // Block 0x10, offset 0x400 - 0x400: 0xda, 0x404: 0xc9, - 0x40b: 0xdb, - 0x420: 0x9c, 0x421: 0x9c, 0x422: 0x9c, 0x423: 0xdc, 0x424: 0x9c, 0x425: 0xdd, 0x426: 0x9c, 0x427: 0x9c, - 0x428: 0x9c, 0x429: 0x9c, 0x42a: 0x9c, 0x42b: 0x9c, 0x42c: 0x9c, 0x42d: 0x9c, 0x42e: 0x9c, 0x42f: 0x9c, - 0x430: 0x9c, 0x431: 0xa4, 0x432: 0x0e, 0x433: 0x9c, 0x434: 0x0e, 0x435: 0xde, 0x436: 0x9c, 0x437: 0x9c, - 0x438: 0x0e, 0x439: 0x0e, 0x43a: 0x0e, 0x43b: 0xdf, 0x43c: 0x9c, 0x43d: 0x9c, 0x43e: 0x9c, 0x43f: 0x9c, - // Block 0x11, offset 0x440 - 0x440: 0xe0, 0x441: 0x56, 0x442: 0xe1, 0x443: 0xe2, 0x444: 0xe3, 0x445: 0xe4, 0x446: 0xe5, - 0x449: 0xe6, 0x44c: 0x56, 0x44d: 0x56, 0x44e: 0x56, 0x44f: 0x56, - 0x450: 0x56, 0x451: 0x56, 0x452: 0x56, 0x453: 0x56, 0x454: 0x56, 0x455: 0x56, 0x456: 0x56, 0x457: 0x56, - 0x458: 0x56, 0x459: 0x56, 0x45a: 0x56, 0x45b: 0xe7, 0x45c: 0x56, 0x45d: 0x6c, 0x45e: 0x56, 0x45f: 0xe8, - 0x460: 0xe9, 0x461: 0xea, 0x462: 0xeb, 0x464: 0x56, 0x465: 0xec, 0x466: 0x56, 0x467: 0xed, - 0x468: 0x56, 0x469: 0xee, 0x46a: 0xef, 0x46b: 0xf0, 0x46c: 0x56, 0x46d: 0x56, 0x46e: 0xf1, 0x46f: 0xf2, - 0x47f: 0xf3, - // Block 0x12, offset 0x480 - 0x4bf: 0xf3, - // Block 0x13, offset 0x4c0 - 0x4d0: 0x09, 0x4d1: 0x0a, 0x4d6: 0x0b, - 0x4db: 0x0c, 0x4dd: 0x0d, 0x4de: 0x0e, 0x4df: 0x0f, - 0x4ef: 0x10, - 0x4ff: 0x10, - // Block 0x14, offset 0x500 - 0x50f: 0x10, - 0x51f: 0x10, - 0x52f: 0x10, - 0x53f: 0x10, - // Block 0x15, offset 0x540 - 0x540: 0xf4, 0x541: 0xf4, 0x542: 0xf4, 0x543: 0xf4, 0x544: 0x05, 0x545: 0x05, 0x546: 0x05, 0x547: 0xf5, - 0x548: 0xf4, 0x549: 0xf4, 0x54a: 0xf4, 0x54b: 0xf4, 0x54c: 0xf4, 0x54d: 0xf4, 0x54e: 0xf4, 0x54f: 0xf4, - 0x550: 0xf4, 0x551: 0xf4, 0x552: 0xf4, 0x553: 0xf4, 0x554: 0xf4, 0x555: 0xf4, 0x556: 0xf4, 0x557: 0xf4, - 0x558: 0xf4, 0x559: 0xf4, 0x55a: 0xf4, 0x55b: 0xf4, 0x55c: 0xf4, 0x55d: 0xf4, 0x55e: 0xf4, 0x55f: 0xf4, - 0x560: 0xf4, 0x561: 0xf4, 0x562: 0xf4, 0x563: 0xf4, 0x564: 0xf4, 0x565: 0xf4, 0x566: 0xf4, 0x567: 0xf4, - 0x568: 0xf4, 0x569: 0xf4, 0x56a: 0xf4, 0x56b: 0xf4, 0x56c: 0xf4, 0x56d: 0xf4, 0x56e: 0xf4, 0x56f: 0xf4, - 0x570: 0xf4, 0x571: 0xf4, 0x572: 0xf4, 0x573: 0xf4, 0x574: 0xf4, 0x575: 0xf4, 0x576: 0xf4, 0x577: 0xf4, - 0x578: 0xf4, 0x579: 0xf4, 0x57a: 0xf4, 0x57b: 0xf4, 0x57c: 0xf4, 0x57d: 0xf4, 0x57e: 0xf4, 0x57f: 0xf4, - // Block 0x16, offset 0x580 - 0x58f: 0x10, - 0x59f: 0x10, - 0x5a0: 0x13, - 0x5af: 0x10, - 0x5bf: 0x10, - // Block 0x17, offset 0x5c0 - 0x5cf: 0x10, -} - -// Total table size 17464 bytes (17KiB); checksum: F50EF68C diff --git a/vendor/golang.org/x/text/unicode/bidi/tables15.0.0.go b/vendor/golang.org/x/text/unicode/bidi/tables15.0.0.go index f15746f7df..9f7e52da76 100644 --- a/vendor/golang.org/x/text/unicode/bidi/tables15.0.0.go +++ b/vendor/golang.org/x/text/unicode/bidi/tables15.0.0.go @@ -1,6 +1,6 @@ // Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. -//go:build go1.21 +//go:build !go1.27 package bidi diff --git a/vendor/golang.org/x/text/unicode/bidi/tables17.0.0.go b/vendor/golang.org/x/text/unicode/bidi/tables17.0.0.go new file mode 100644 index 0000000000..3dd7cf6603 --- /dev/null +++ b/vendor/golang.org/x/text/unicode/bidi/tables17.0.0.go @@ -0,0 +1,2135 @@ +// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. + +//go:build go1.27 + +package bidi + +// UnicodeVersion is the Unicode version from which the tables in this package are derived. +const UnicodeVersion = "17.0.0" + +// xorMasks contains masks to be xor-ed with brackets to get the reverse +// version. +var xorMasks = []int32{ // 8 elements + 0, 1, 6, 7, 3, 15, 29, 63, +} // Size: 56 bytes + +// lookup returns the trie value for the first UTF-8 encoding in s and +// the width in bytes of this encoding. The size will be 0 if s does not +// hold enough bytes to complete the encoding. len(s) must be greater than 0. +func (t *bidiTrie) lookup(s []byte) (v uint8, sz int) { + c0 := s[0] + switch { + case c0 < 0x80: // is ASCII + return bidiValues[c0], 1 + case c0 < 0xC2: + return 0, 1 // Illegal UTF-8: not a starter, not ASCII. + case c0 < 0xE0: // 2-byte UTF-8 + if len(s) < 2 { + return 0, 0 + } + i := bidiIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c1), 2 + case c0 < 0xF0: // 3-byte UTF-8 + if len(s) < 3 { + return 0, 0 + } + i := bidiIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = bidiIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c2), 3 + case c0 < 0xF8: // 4-byte UTF-8 + if len(s) < 4 { + return 0, 0 + } + i := bidiIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = bidiIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + o = uint32(i)<<6 + uint32(c2) + i = bidiIndex[o] + c3 := s[3] + if c3 < 0x80 || 0xC0 <= c3 { + return 0, 3 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c3), 4 + } + // Illegal rune + return 0, 1 +} + +// lookupUnsafe returns the trie value for the first UTF-8 encoding in s. +// s must start with a full and valid UTF-8 encoded rune. +func (t *bidiTrie) lookupUnsafe(s []byte) uint8 { + c0 := s[0] + if c0 < 0x80 { // is ASCII + return bidiValues[c0] + } + i := bidiIndex[c0] + if c0 < 0xE0 { // 2-byte UTF-8 + return t.lookupValue(uint32(i), s[1]) + } + i = bidiIndex[uint32(i)<<6+uint32(s[1])] + if c0 < 0xF0 { // 3-byte UTF-8 + return t.lookupValue(uint32(i), s[2]) + } + i = bidiIndex[uint32(i)<<6+uint32(s[2])] + if c0 < 0xF8 { // 4-byte UTF-8 + return t.lookupValue(uint32(i), s[3]) + } + return 0 +} + +// lookupString returns the trie value for the first UTF-8 encoding in s and +// the width in bytes of this encoding. The size will be 0 if s does not +// hold enough bytes to complete the encoding. len(s) must be greater than 0. +func (t *bidiTrie) lookupString(s string) (v uint8, sz int) { + c0 := s[0] + switch { + case c0 < 0x80: // is ASCII + return bidiValues[c0], 1 + case c0 < 0xC2: + return 0, 1 // Illegal UTF-8: not a starter, not ASCII. + case c0 < 0xE0: // 2-byte UTF-8 + if len(s) < 2 { + return 0, 0 + } + i := bidiIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c1), 2 + case c0 < 0xF0: // 3-byte UTF-8 + if len(s) < 3 { + return 0, 0 + } + i := bidiIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = bidiIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c2), 3 + case c0 < 0xF8: // 4-byte UTF-8 + if len(s) < 4 { + return 0, 0 + } + i := bidiIndex[c0] + c1 := s[1] + if c1 < 0x80 || 0xC0 <= c1 { + return 0, 1 // Illegal UTF-8: not a continuation byte. + } + o := uint32(i)<<6 + uint32(c1) + i = bidiIndex[o] + c2 := s[2] + if c2 < 0x80 || 0xC0 <= c2 { + return 0, 2 // Illegal UTF-8: not a continuation byte. + } + o = uint32(i)<<6 + uint32(c2) + i = bidiIndex[o] + c3 := s[3] + if c3 < 0x80 || 0xC0 <= c3 { + return 0, 3 // Illegal UTF-8: not a continuation byte. + } + return t.lookupValue(uint32(i), c3), 4 + } + // Illegal rune + return 0, 1 +} + +// lookupStringUnsafe returns the trie value for the first UTF-8 encoding in s. +// s must start with a full and valid UTF-8 encoded rune. +func (t *bidiTrie) lookupStringUnsafe(s string) uint8 { + c0 := s[0] + if c0 < 0x80 { // is ASCII + return bidiValues[c0] + } + i := bidiIndex[c0] + if c0 < 0xE0 { // 2-byte UTF-8 + return t.lookupValue(uint32(i), s[1]) + } + i = bidiIndex[uint32(i)<<6+uint32(s[1])] + if c0 < 0xF0 { // 3-byte UTF-8 + return t.lookupValue(uint32(i), s[2]) + } + i = bidiIndex[uint32(i)<<6+uint32(s[2])] + if c0 < 0xF8 { // 4-byte UTF-8 + return t.lookupValue(uint32(i), s[3]) + } + return 0 +} + +// bidiTrie. Total size: 20608 bytes (20.12 KiB). Checksum: 291cd0103a32a537. +type bidiTrie struct{} + +func newBidiTrie(i int) *bidiTrie { + return &bidiTrie{} +} + +// lookupValue determines the type of block n and looks up the value for b. +func (t *bidiTrie) lookupValue(n uint32, b byte) uint8 { + switch { + default: + return uint8(bidiValues[n<<6+uint32(b)]) + } +} + +// bidiValues: 270 blocks, 17280 entries, 17280 bytes +// The third block is the zero block. +var bidiValues = [17280]uint8{ + // Block 0x0, offset 0x0 + 0x00: 0x000b, 0x01: 0x000b, 0x02: 0x000b, 0x03: 0x000b, 0x04: 0x000b, 0x05: 0x000b, + 0x06: 0x000b, 0x07: 0x000b, 0x08: 0x000b, 0x09: 0x0008, 0x0a: 0x0007, 0x0b: 0x0008, + 0x0c: 0x0009, 0x0d: 0x0007, 0x0e: 0x000b, 0x0f: 0x000b, 0x10: 0x000b, 0x11: 0x000b, + 0x12: 0x000b, 0x13: 0x000b, 0x14: 0x000b, 0x15: 0x000b, 0x16: 0x000b, 0x17: 0x000b, + 0x18: 0x000b, 0x19: 0x000b, 0x1a: 0x000b, 0x1b: 0x000b, 0x1c: 0x0007, 0x1d: 0x0007, + 0x1e: 0x0007, 0x1f: 0x0008, 0x20: 0x0009, 0x21: 0x000a, 0x22: 0x000a, 0x23: 0x0004, + 0x24: 0x0004, 0x25: 0x0004, 0x26: 0x000a, 0x27: 0x000a, 0x28: 0x003a, 0x29: 0x002a, + 0x2a: 0x000a, 0x2b: 0x0003, 0x2c: 0x0006, 0x2d: 0x0003, 0x2e: 0x0006, 0x2f: 0x0006, + 0x30: 0x0002, 0x31: 0x0002, 0x32: 0x0002, 0x33: 0x0002, 0x34: 0x0002, 0x35: 0x0002, + 0x36: 0x0002, 0x37: 0x0002, 0x38: 0x0002, 0x39: 0x0002, 0x3a: 0x0006, 0x3b: 0x000a, + 0x3c: 0x000a, 0x3d: 0x000a, 0x3e: 0x000a, 0x3f: 0x000a, + // Block 0x1, offset 0x40 + 0x40: 0x000a, + 0x5b: 0x005a, 0x5c: 0x000a, 0x5d: 0x004a, + 0x5e: 0x000a, 0x5f: 0x000a, 0x60: 0x000a, + 0x7b: 0x005a, + 0x7c: 0x000a, 0x7d: 0x004a, 0x7e: 0x000a, 0x7f: 0x000b, + // Block 0x2, offset 0x80 + // Block 0x3, offset 0xc0 + 0xc0: 0x000b, 0xc1: 0x000b, 0xc2: 0x000b, 0xc3: 0x000b, 0xc4: 0x000b, 0xc5: 0x0007, + 0xc6: 0x000b, 0xc7: 0x000b, 0xc8: 0x000b, 0xc9: 0x000b, 0xca: 0x000b, 0xcb: 0x000b, + 0xcc: 0x000b, 0xcd: 0x000b, 0xce: 0x000b, 0xcf: 0x000b, 0xd0: 0x000b, 0xd1: 0x000b, + 0xd2: 0x000b, 0xd3: 0x000b, 0xd4: 0x000b, 0xd5: 0x000b, 0xd6: 0x000b, 0xd7: 0x000b, + 0xd8: 0x000b, 0xd9: 0x000b, 0xda: 0x000b, 0xdb: 0x000b, 0xdc: 0x000b, 0xdd: 0x000b, + 0xde: 0x000b, 0xdf: 0x000b, 0xe0: 0x0006, 0xe1: 0x000a, 0xe2: 0x0004, 0xe3: 0x0004, + 0xe4: 0x0004, 0xe5: 0x0004, 0xe6: 0x000a, 0xe7: 0x000a, 0xe8: 0x000a, 0xe9: 0x000a, + 0xeb: 0x000a, 0xec: 0x000a, 0xed: 0x000b, 0xee: 0x000a, 0xef: 0x000a, + 0xf0: 0x0004, 0xf1: 0x0004, 0xf2: 0x0002, 0xf3: 0x0002, 0xf4: 0x000a, + 0xf6: 0x000a, 0xf7: 0x000a, 0xf8: 0x000a, 0xf9: 0x0002, 0xfb: 0x000a, + 0xfc: 0x000a, 0xfd: 0x000a, 0xfe: 0x000a, 0xff: 0x000a, + // Block 0x4, offset 0x100 + 0x117: 0x000a, + 0x137: 0x000a, + // Block 0x5, offset 0x140 + 0x179: 0x000a, 0x17a: 0x000a, + // Block 0x6, offset 0x180 + 0x182: 0x000a, 0x183: 0x000a, 0x184: 0x000a, 0x185: 0x000a, + 0x186: 0x000a, 0x187: 0x000a, 0x188: 0x000a, 0x189: 0x000a, 0x18a: 0x000a, 0x18b: 0x000a, + 0x18c: 0x000a, 0x18d: 0x000a, 0x18e: 0x000a, 0x18f: 0x000a, + 0x192: 0x000a, 0x193: 0x000a, 0x194: 0x000a, 0x195: 0x000a, 0x196: 0x000a, 0x197: 0x000a, + 0x198: 0x000a, 0x199: 0x000a, 0x19a: 0x000a, 0x19b: 0x000a, 0x19c: 0x000a, 0x19d: 0x000a, + 0x19e: 0x000a, 0x19f: 0x000a, + 0x1a5: 0x000a, 0x1a6: 0x000a, 0x1a7: 0x000a, 0x1a8: 0x000a, 0x1a9: 0x000a, + 0x1aa: 0x000a, 0x1ab: 0x000a, 0x1ac: 0x000a, 0x1ad: 0x000a, 0x1af: 0x000a, + 0x1b0: 0x000a, 0x1b1: 0x000a, 0x1b2: 0x000a, 0x1b3: 0x000a, 0x1b4: 0x000a, 0x1b5: 0x000a, + 0x1b6: 0x000a, 0x1b7: 0x000a, 0x1b8: 0x000a, 0x1b9: 0x000a, 0x1ba: 0x000a, 0x1bb: 0x000a, + 0x1bc: 0x000a, 0x1bd: 0x000a, 0x1be: 0x000a, 0x1bf: 0x000a, + // Block 0x7, offset 0x1c0 + 0x1c0: 0x000c, 0x1c1: 0x000c, 0x1c2: 0x000c, 0x1c3: 0x000c, 0x1c4: 0x000c, 0x1c5: 0x000c, + 0x1c6: 0x000c, 0x1c7: 0x000c, 0x1c8: 0x000c, 0x1c9: 0x000c, 0x1ca: 0x000c, 0x1cb: 0x000c, + 0x1cc: 0x000c, 0x1cd: 0x000c, 0x1ce: 0x000c, 0x1cf: 0x000c, 0x1d0: 0x000c, 0x1d1: 0x000c, + 0x1d2: 0x000c, 0x1d3: 0x000c, 0x1d4: 0x000c, 0x1d5: 0x000c, 0x1d6: 0x000c, 0x1d7: 0x000c, + 0x1d8: 0x000c, 0x1d9: 0x000c, 0x1da: 0x000c, 0x1db: 0x000c, 0x1dc: 0x000c, 0x1dd: 0x000c, + 0x1de: 0x000c, 0x1df: 0x000c, 0x1e0: 0x000c, 0x1e1: 0x000c, 0x1e2: 0x000c, 0x1e3: 0x000c, + 0x1e4: 0x000c, 0x1e5: 0x000c, 0x1e6: 0x000c, 0x1e7: 0x000c, 0x1e8: 0x000c, 0x1e9: 0x000c, + 0x1ea: 0x000c, 0x1eb: 0x000c, 0x1ec: 0x000c, 0x1ed: 0x000c, 0x1ee: 0x000c, 0x1ef: 0x000c, + 0x1f0: 0x000c, 0x1f1: 0x000c, 0x1f2: 0x000c, 0x1f3: 0x000c, 0x1f4: 0x000c, 0x1f5: 0x000c, + 0x1f6: 0x000c, 0x1f7: 0x000c, 0x1f8: 0x000c, 0x1f9: 0x000c, 0x1fa: 0x000c, 0x1fb: 0x000c, + 0x1fc: 0x000c, 0x1fd: 0x000c, 0x1fe: 0x000c, 0x1ff: 0x000c, + // Block 0x8, offset 0x200 + 0x200: 0x000c, 0x201: 0x000c, 0x202: 0x000c, 0x203: 0x000c, 0x204: 0x000c, 0x205: 0x000c, + 0x206: 0x000c, 0x207: 0x000c, 0x208: 0x000c, 0x209: 0x000c, 0x20a: 0x000c, 0x20b: 0x000c, + 0x20c: 0x000c, 0x20d: 0x000c, 0x20e: 0x000c, 0x20f: 0x000c, 0x210: 0x000c, 0x211: 0x000c, + 0x212: 0x000c, 0x213: 0x000c, 0x214: 0x000c, 0x215: 0x000c, 0x216: 0x000c, 0x217: 0x000c, + 0x218: 0x000c, 0x219: 0x000c, 0x21a: 0x000c, 0x21b: 0x000c, 0x21c: 0x000c, 0x21d: 0x000c, + 0x21e: 0x000c, 0x21f: 0x000c, 0x220: 0x000c, 0x221: 0x000c, 0x222: 0x000c, 0x223: 0x000c, + 0x224: 0x000c, 0x225: 0x000c, 0x226: 0x000c, 0x227: 0x000c, 0x228: 0x000c, 0x229: 0x000c, + 0x22a: 0x000c, 0x22b: 0x000c, 0x22c: 0x000c, 0x22d: 0x000c, 0x22e: 0x000c, 0x22f: 0x000c, + 0x234: 0x000a, 0x235: 0x000a, + 0x23e: 0x000a, + // Block 0x9, offset 0x240 + 0x244: 0x000a, 0x245: 0x000a, + 0x247: 0x000a, + // Block 0xa, offset 0x280 + 0x2b6: 0x000a, + // Block 0xb, offset 0x2c0 + 0x2c3: 0x000c, 0x2c4: 0x000c, 0x2c5: 0x000c, + 0x2c6: 0x000c, 0x2c7: 0x000c, 0x2c8: 0x000c, 0x2c9: 0x000c, + // Block 0xc, offset 0x300 + 0x30a: 0x000a, + 0x30d: 0x000a, 0x30e: 0x000a, 0x30f: 0x0004, 0x310: 0x0001, 0x311: 0x000c, + 0x312: 0x000c, 0x313: 0x000c, 0x314: 0x000c, 0x315: 0x000c, 0x316: 0x000c, 0x317: 0x000c, + 0x318: 0x000c, 0x319: 0x000c, 0x31a: 0x000c, 0x31b: 0x000c, 0x31c: 0x000c, 0x31d: 0x000c, + 0x31e: 0x000c, 0x31f: 0x000c, 0x320: 0x000c, 0x321: 0x000c, 0x322: 0x000c, 0x323: 0x000c, + 0x324: 0x000c, 0x325: 0x000c, 0x326: 0x000c, 0x327: 0x000c, 0x328: 0x000c, 0x329: 0x000c, + 0x32a: 0x000c, 0x32b: 0x000c, 0x32c: 0x000c, 0x32d: 0x000c, 0x32e: 0x000c, 0x32f: 0x000c, + 0x330: 0x000c, 0x331: 0x000c, 0x332: 0x000c, 0x333: 0x000c, 0x334: 0x000c, 0x335: 0x000c, + 0x336: 0x000c, 0x337: 0x000c, 0x338: 0x000c, 0x339: 0x000c, 0x33a: 0x000c, 0x33b: 0x000c, + 0x33c: 0x000c, 0x33d: 0x000c, 0x33e: 0x0001, 0x33f: 0x000c, + // Block 0xd, offset 0x340 + 0x340: 0x0001, 0x341: 0x000c, 0x342: 0x000c, 0x343: 0x0001, 0x344: 0x000c, 0x345: 0x000c, + 0x346: 0x0001, 0x347: 0x000c, 0x348: 0x0001, 0x349: 0x0001, 0x34a: 0x0001, 0x34b: 0x0001, + 0x34c: 0x0001, 0x34d: 0x0001, 0x34e: 0x0001, 0x34f: 0x0001, 0x350: 0x0001, 0x351: 0x0001, + 0x352: 0x0001, 0x353: 0x0001, 0x354: 0x0001, 0x355: 0x0001, 0x356: 0x0001, 0x357: 0x0001, + 0x358: 0x0001, 0x359: 0x0001, 0x35a: 0x0001, 0x35b: 0x0001, 0x35c: 0x0001, 0x35d: 0x0001, + 0x35e: 0x0001, 0x35f: 0x0001, 0x360: 0x0001, 0x361: 0x0001, 0x362: 0x0001, 0x363: 0x0001, + 0x364: 0x0001, 0x365: 0x0001, 0x366: 0x0001, 0x367: 0x0001, 0x368: 0x0001, 0x369: 0x0001, + 0x36a: 0x0001, 0x36b: 0x0001, 0x36c: 0x0001, 0x36d: 0x0001, 0x36e: 0x0001, 0x36f: 0x0001, + 0x370: 0x0001, 0x371: 0x0001, 0x372: 0x0001, 0x373: 0x0001, 0x374: 0x0001, 0x375: 0x0001, + 0x376: 0x0001, 0x377: 0x0001, 0x378: 0x0001, 0x379: 0x0001, 0x37a: 0x0001, 0x37b: 0x0001, + 0x37c: 0x0001, 0x37d: 0x0001, 0x37e: 0x0001, 0x37f: 0x0001, + // Block 0xe, offset 0x380 + 0x380: 0x0005, 0x381: 0x0005, 0x382: 0x0005, 0x383: 0x0005, 0x384: 0x0005, 0x385: 0x0005, + 0x386: 0x000a, 0x387: 0x000a, 0x388: 0x000d, 0x389: 0x0004, 0x38a: 0x0004, 0x38b: 0x000d, + 0x38c: 0x0006, 0x38d: 0x000d, 0x38e: 0x000a, 0x38f: 0x000a, 0x390: 0x000c, 0x391: 0x000c, + 0x392: 0x000c, 0x393: 0x000c, 0x394: 0x000c, 0x395: 0x000c, 0x396: 0x000c, 0x397: 0x000c, + 0x398: 0x000c, 0x399: 0x000c, 0x39a: 0x000c, 0x39b: 0x000d, 0x39c: 0x000d, 0x39d: 0x000d, + 0x39e: 0x000d, 0x39f: 0x000d, 0x3a0: 0x000d, 0x3a1: 0x000d, 0x3a2: 0x000d, 0x3a3: 0x000d, + 0x3a4: 0x000d, 0x3a5: 0x000d, 0x3a6: 0x000d, 0x3a7: 0x000d, 0x3a8: 0x000d, 0x3a9: 0x000d, + 0x3aa: 0x000d, 0x3ab: 0x000d, 0x3ac: 0x000d, 0x3ad: 0x000d, 0x3ae: 0x000d, 0x3af: 0x000d, + 0x3b0: 0x000d, 0x3b1: 0x000d, 0x3b2: 0x000d, 0x3b3: 0x000d, 0x3b4: 0x000d, 0x3b5: 0x000d, + 0x3b6: 0x000d, 0x3b7: 0x000d, 0x3b8: 0x000d, 0x3b9: 0x000d, 0x3ba: 0x000d, 0x3bb: 0x000d, + 0x3bc: 0x000d, 0x3bd: 0x000d, 0x3be: 0x000d, 0x3bf: 0x000d, + // Block 0xf, offset 0x3c0 + 0x3c0: 0x000d, 0x3c1: 0x000d, 0x3c2: 0x000d, 0x3c3: 0x000d, 0x3c4: 0x000d, 0x3c5: 0x000d, + 0x3c6: 0x000d, 0x3c7: 0x000d, 0x3c8: 0x000d, 0x3c9: 0x000d, 0x3ca: 0x000d, 0x3cb: 0x000c, + 0x3cc: 0x000c, 0x3cd: 0x000c, 0x3ce: 0x000c, 0x3cf: 0x000c, 0x3d0: 0x000c, 0x3d1: 0x000c, + 0x3d2: 0x000c, 0x3d3: 0x000c, 0x3d4: 0x000c, 0x3d5: 0x000c, 0x3d6: 0x000c, 0x3d7: 0x000c, + 0x3d8: 0x000c, 0x3d9: 0x000c, 0x3da: 0x000c, 0x3db: 0x000c, 0x3dc: 0x000c, 0x3dd: 0x000c, + 0x3de: 0x000c, 0x3df: 0x000c, 0x3e0: 0x0005, 0x3e1: 0x0005, 0x3e2: 0x0005, 0x3e3: 0x0005, + 0x3e4: 0x0005, 0x3e5: 0x0005, 0x3e6: 0x0005, 0x3e7: 0x0005, 0x3e8: 0x0005, 0x3e9: 0x0005, + 0x3ea: 0x0004, 0x3eb: 0x0005, 0x3ec: 0x0005, 0x3ed: 0x000d, 0x3ee: 0x000d, 0x3ef: 0x000d, + 0x3f0: 0x000c, 0x3f1: 0x000d, 0x3f2: 0x000d, 0x3f3: 0x000d, 0x3f4: 0x000d, 0x3f5: 0x000d, + 0x3f6: 0x000d, 0x3f7: 0x000d, 0x3f8: 0x000d, 0x3f9: 0x000d, 0x3fa: 0x000d, 0x3fb: 0x000d, + 0x3fc: 0x000d, 0x3fd: 0x000d, 0x3fe: 0x000d, 0x3ff: 0x000d, + // Block 0x10, offset 0x400 + 0x400: 0x000d, 0x401: 0x000d, 0x402: 0x000d, 0x403: 0x000d, 0x404: 0x000d, 0x405: 0x000d, + 0x406: 0x000d, 0x407: 0x000d, 0x408: 0x000d, 0x409: 0x000d, 0x40a: 0x000d, 0x40b: 0x000d, + 0x40c: 0x000d, 0x40d: 0x000d, 0x40e: 0x000d, 0x40f: 0x000d, 0x410: 0x000d, 0x411: 0x000d, + 0x412: 0x000d, 0x413: 0x000d, 0x414: 0x000d, 0x415: 0x000d, 0x416: 0x000d, 0x417: 0x000d, + 0x418: 0x000d, 0x419: 0x000d, 0x41a: 0x000d, 0x41b: 0x000d, 0x41c: 0x000d, 0x41d: 0x000d, + 0x41e: 0x000d, 0x41f: 0x000d, 0x420: 0x000d, 0x421: 0x000d, 0x422: 0x000d, 0x423: 0x000d, + 0x424: 0x000d, 0x425: 0x000d, 0x426: 0x000d, 0x427: 0x000d, 0x428: 0x000d, 0x429: 0x000d, + 0x42a: 0x000d, 0x42b: 0x000d, 0x42c: 0x000d, 0x42d: 0x000d, 0x42e: 0x000d, 0x42f: 0x000d, + 0x430: 0x000d, 0x431: 0x000d, 0x432: 0x000d, 0x433: 0x000d, 0x434: 0x000d, 0x435: 0x000d, + 0x436: 0x000d, 0x437: 0x000d, 0x438: 0x000d, 0x439: 0x000d, 0x43a: 0x000d, 0x43b: 0x000d, + 0x43c: 0x000d, 0x43d: 0x000d, 0x43e: 0x000d, 0x43f: 0x000d, + // Block 0x11, offset 0x440 + 0x440: 0x000d, 0x441: 0x000d, 0x442: 0x000d, 0x443: 0x000d, 0x444: 0x000d, 0x445: 0x000d, + 0x446: 0x000d, 0x447: 0x000d, 0x448: 0x000d, 0x449: 0x000d, 0x44a: 0x000d, 0x44b: 0x000d, + 0x44c: 0x000d, 0x44d: 0x000d, 0x44e: 0x000d, 0x44f: 0x000d, 0x450: 0x000d, 0x451: 0x000d, + 0x452: 0x000d, 0x453: 0x000d, 0x454: 0x000d, 0x455: 0x000d, 0x456: 0x000c, 0x457: 0x000c, + 0x458: 0x000c, 0x459: 0x000c, 0x45a: 0x000c, 0x45b: 0x000c, 0x45c: 0x000c, 0x45d: 0x0005, + 0x45e: 0x000a, 0x45f: 0x000c, 0x460: 0x000c, 0x461: 0x000c, 0x462: 0x000c, 0x463: 0x000c, + 0x464: 0x000c, 0x465: 0x000d, 0x466: 0x000d, 0x467: 0x000c, 0x468: 0x000c, 0x469: 0x000a, + 0x46a: 0x000c, 0x46b: 0x000c, 0x46c: 0x000c, 0x46d: 0x000c, 0x46e: 0x000d, 0x46f: 0x000d, + 0x470: 0x0002, 0x471: 0x0002, 0x472: 0x0002, 0x473: 0x0002, 0x474: 0x0002, 0x475: 0x0002, + 0x476: 0x0002, 0x477: 0x0002, 0x478: 0x0002, 0x479: 0x0002, 0x47a: 0x000d, 0x47b: 0x000d, + 0x47c: 0x000d, 0x47d: 0x000d, 0x47e: 0x000d, 0x47f: 0x000d, + // Block 0x12, offset 0x480 + 0x480: 0x000d, 0x481: 0x000d, 0x482: 0x000d, 0x483: 0x000d, 0x484: 0x000d, 0x485: 0x000d, + 0x486: 0x000d, 0x487: 0x000d, 0x488: 0x000d, 0x489: 0x000d, 0x48a: 0x000d, 0x48b: 0x000d, + 0x48c: 0x000d, 0x48d: 0x000d, 0x48e: 0x000d, 0x48f: 0x000d, 0x490: 0x000d, 0x491: 0x000c, + 0x492: 0x000d, 0x493: 0x000d, 0x494: 0x000d, 0x495: 0x000d, 0x496: 0x000d, 0x497: 0x000d, + 0x498: 0x000d, 0x499: 0x000d, 0x49a: 0x000d, 0x49b: 0x000d, 0x49c: 0x000d, 0x49d: 0x000d, + 0x49e: 0x000d, 0x49f: 0x000d, 0x4a0: 0x000d, 0x4a1: 0x000d, 0x4a2: 0x000d, 0x4a3: 0x000d, + 0x4a4: 0x000d, 0x4a5: 0x000d, 0x4a6: 0x000d, 0x4a7: 0x000d, 0x4a8: 0x000d, 0x4a9: 0x000d, + 0x4aa: 0x000d, 0x4ab: 0x000d, 0x4ac: 0x000d, 0x4ad: 0x000d, 0x4ae: 0x000d, 0x4af: 0x000d, + 0x4b0: 0x000c, 0x4b1: 0x000c, 0x4b2: 0x000c, 0x4b3: 0x000c, 0x4b4: 0x000c, 0x4b5: 0x000c, + 0x4b6: 0x000c, 0x4b7: 0x000c, 0x4b8: 0x000c, 0x4b9: 0x000c, 0x4ba: 0x000c, 0x4bb: 0x000c, + 0x4bc: 0x000c, 0x4bd: 0x000c, 0x4be: 0x000c, 0x4bf: 0x000c, + // Block 0x13, offset 0x4c0 + 0x4c0: 0x000c, 0x4c1: 0x000c, 0x4c2: 0x000c, 0x4c3: 0x000c, 0x4c4: 0x000c, 0x4c5: 0x000c, + 0x4c6: 0x000c, 0x4c7: 0x000c, 0x4c8: 0x000c, 0x4c9: 0x000c, 0x4ca: 0x000c, 0x4cb: 0x000d, + 0x4cc: 0x000d, 0x4cd: 0x000d, 0x4ce: 0x000d, 0x4cf: 0x000d, 0x4d0: 0x000d, 0x4d1: 0x000d, + 0x4d2: 0x000d, 0x4d3: 0x000d, 0x4d4: 0x000d, 0x4d5: 0x000d, 0x4d6: 0x000d, 0x4d7: 0x000d, + 0x4d8: 0x000d, 0x4d9: 0x000d, 0x4da: 0x000d, 0x4db: 0x000d, 0x4dc: 0x000d, 0x4dd: 0x000d, + 0x4de: 0x000d, 0x4df: 0x000d, 0x4e0: 0x000d, 0x4e1: 0x000d, 0x4e2: 0x000d, 0x4e3: 0x000d, + 0x4e4: 0x000d, 0x4e5: 0x000d, 0x4e6: 0x000d, 0x4e7: 0x000d, 0x4e8: 0x000d, 0x4e9: 0x000d, + 0x4ea: 0x000d, 0x4eb: 0x000d, 0x4ec: 0x000d, 0x4ed: 0x000d, 0x4ee: 0x000d, 0x4ef: 0x000d, + 0x4f0: 0x000d, 0x4f1: 0x000d, 0x4f2: 0x000d, 0x4f3: 0x000d, 0x4f4: 0x000d, 0x4f5: 0x000d, + 0x4f6: 0x000d, 0x4f7: 0x000d, 0x4f8: 0x000d, 0x4f9: 0x000d, 0x4fa: 0x000d, 0x4fb: 0x000d, + 0x4fc: 0x000d, 0x4fd: 0x000d, 0x4fe: 0x000d, 0x4ff: 0x000d, + // Block 0x14, offset 0x500 + 0x500: 0x000d, 0x501: 0x000d, 0x502: 0x000d, 0x503: 0x000d, 0x504: 0x000d, 0x505: 0x000d, + 0x506: 0x000d, 0x507: 0x000d, 0x508: 0x000d, 0x509: 0x000d, 0x50a: 0x000d, 0x50b: 0x000d, + 0x50c: 0x000d, 0x50d: 0x000d, 0x50e: 0x000d, 0x50f: 0x000d, 0x510: 0x000d, 0x511: 0x000d, + 0x512: 0x000d, 0x513: 0x000d, 0x514: 0x000d, 0x515: 0x000d, 0x516: 0x000d, 0x517: 0x000d, + 0x518: 0x000d, 0x519: 0x000d, 0x51a: 0x000d, 0x51b: 0x000d, 0x51c: 0x000d, 0x51d: 0x000d, + 0x51e: 0x000d, 0x51f: 0x000d, 0x520: 0x000d, 0x521: 0x000d, 0x522: 0x000d, 0x523: 0x000d, + 0x524: 0x000d, 0x525: 0x000d, 0x526: 0x000c, 0x527: 0x000c, 0x528: 0x000c, 0x529: 0x000c, + 0x52a: 0x000c, 0x52b: 0x000c, 0x52c: 0x000c, 0x52d: 0x000c, 0x52e: 0x000c, 0x52f: 0x000c, + 0x530: 0x000c, 0x531: 0x000d, 0x532: 0x000d, 0x533: 0x000d, 0x534: 0x000d, 0x535: 0x000d, + 0x536: 0x000d, 0x537: 0x000d, 0x538: 0x000d, 0x539: 0x000d, 0x53a: 0x000d, 0x53b: 0x000d, + 0x53c: 0x000d, 0x53d: 0x000d, 0x53e: 0x000d, 0x53f: 0x000d, + // Block 0x15, offset 0x540 + 0x540: 0x0001, 0x541: 0x0001, 0x542: 0x0001, 0x543: 0x0001, 0x544: 0x0001, 0x545: 0x0001, + 0x546: 0x0001, 0x547: 0x0001, 0x548: 0x0001, 0x549: 0x0001, 0x54a: 0x0001, 0x54b: 0x0001, + 0x54c: 0x0001, 0x54d: 0x0001, 0x54e: 0x0001, 0x54f: 0x0001, 0x550: 0x0001, 0x551: 0x0001, + 0x552: 0x0001, 0x553: 0x0001, 0x554: 0x0001, 0x555: 0x0001, 0x556: 0x0001, 0x557: 0x0001, + 0x558: 0x0001, 0x559: 0x0001, 0x55a: 0x0001, 0x55b: 0x0001, 0x55c: 0x0001, 0x55d: 0x0001, + 0x55e: 0x0001, 0x55f: 0x0001, 0x560: 0x0001, 0x561: 0x0001, 0x562: 0x0001, 0x563: 0x0001, + 0x564: 0x0001, 0x565: 0x0001, 0x566: 0x0001, 0x567: 0x0001, 0x568: 0x0001, 0x569: 0x0001, + 0x56a: 0x0001, 0x56b: 0x000c, 0x56c: 0x000c, 0x56d: 0x000c, 0x56e: 0x000c, 0x56f: 0x000c, + 0x570: 0x000c, 0x571: 0x000c, 0x572: 0x000c, 0x573: 0x000c, 0x574: 0x0001, 0x575: 0x0001, + 0x576: 0x000a, 0x577: 0x000a, 0x578: 0x000a, 0x579: 0x000a, 0x57a: 0x0001, 0x57b: 0x0001, + 0x57c: 0x0001, 0x57d: 0x000c, 0x57e: 0x0001, 0x57f: 0x0001, + // Block 0x16, offset 0x580 + 0x580: 0x0001, 0x581: 0x0001, 0x582: 0x0001, 0x583: 0x0001, 0x584: 0x0001, 0x585: 0x0001, + 0x586: 0x0001, 0x587: 0x0001, 0x588: 0x0001, 0x589: 0x0001, 0x58a: 0x0001, 0x58b: 0x0001, + 0x58c: 0x0001, 0x58d: 0x0001, 0x58e: 0x0001, 0x58f: 0x0001, 0x590: 0x0001, 0x591: 0x0001, + 0x592: 0x0001, 0x593: 0x0001, 0x594: 0x0001, 0x595: 0x0001, 0x596: 0x000c, 0x597: 0x000c, + 0x598: 0x000c, 0x599: 0x000c, 0x59a: 0x0001, 0x59b: 0x000c, 0x59c: 0x000c, 0x59d: 0x000c, + 0x59e: 0x000c, 0x59f: 0x000c, 0x5a0: 0x000c, 0x5a1: 0x000c, 0x5a2: 0x000c, 0x5a3: 0x000c, + 0x5a4: 0x0001, 0x5a5: 0x000c, 0x5a6: 0x000c, 0x5a7: 0x000c, 0x5a8: 0x0001, 0x5a9: 0x000c, + 0x5aa: 0x000c, 0x5ab: 0x000c, 0x5ac: 0x000c, 0x5ad: 0x000c, 0x5ae: 0x0001, 0x5af: 0x0001, + 0x5b0: 0x0001, 0x5b1: 0x0001, 0x5b2: 0x0001, 0x5b3: 0x0001, 0x5b4: 0x0001, 0x5b5: 0x0001, + 0x5b6: 0x0001, 0x5b7: 0x0001, 0x5b8: 0x0001, 0x5b9: 0x0001, 0x5ba: 0x0001, 0x5bb: 0x0001, + 0x5bc: 0x0001, 0x5bd: 0x0001, 0x5be: 0x0001, 0x5bf: 0x0001, + // Block 0x17, offset 0x5c0 + 0x5c0: 0x0001, 0x5c1: 0x0001, 0x5c2: 0x0001, 0x5c3: 0x0001, 0x5c4: 0x0001, 0x5c5: 0x0001, + 0x5c6: 0x0001, 0x5c7: 0x0001, 0x5c8: 0x0001, 0x5c9: 0x0001, 0x5ca: 0x0001, 0x5cb: 0x0001, + 0x5cc: 0x0001, 0x5cd: 0x0001, 0x5ce: 0x0001, 0x5cf: 0x0001, 0x5d0: 0x0001, 0x5d1: 0x0001, + 0x5d2: 0x0001, 0x5d3: 0x0001, 0x5d4: 0x0001, 0x5d5: 0x0001, 0x5d6: 0x0001, 0x5d7: 0x0001, + 0x5d8: 0x0001, 0x5d9: 0x000c, 0x5da: 0x000c, 0x5db: 0x000c, 0x5dc: 0x0001, 0x5dd: 0x0001, + 0x5de: 0x0001, 0x5df: 0x0001, 0x5e0: 0x000d, 0x5e1: 0x000d, 0x5e2: 0x000d, 0x5e3: 0x000d, + 0x5e4: 0x000d, 0x5e5: 0x000d, 0x5e6: 0x000d, 0x5e7: 0x000d, 0x5e8: 0x000d, 0x5e9: 0x000d, + 0x5ea: 0x000d, 0x5eb: 0x0001, 0x5ec: 0x0001, 0x5ed: 0x0001, 0x5ee: 0x0001, 0x5ef: 0x0001, + 0x5f0: 0x000d, 0x5f1: 0x000d, 0x5f2: 0x000d, 0x5f3: 0x000d, 0x5f4: 0x000d, 0x5f5: 0x000d, + 0x5f6: 0x000d, 0x5f7: 0x000d, 0x5f8: 0x000d, 0x5f9: 0x000d, 0x5fa: 0x000d, 0x5fb: 0x000d, + 0x5fc: 0x000d, 0x5fd: 0x000d, 0x5fe: 0x000d, 0x5ff: 0x000d, + // Block 0x18, offset 0x600 + 0x600: 0x000d, 0x601: 0x000d, 0x602: 0x000d, 0x603: 0x000d, 0x604: 0x000d, 0x605: 0x000d, + 0x606: 0x000d, 0x607: 0x000d, 0x608: 0x000d, 0x609: 0x000d, 0x60a: 0x000d, 0x60b: 0x000d, + 0x60c: 0x000d, 0x60d: 0x000d, 0x60e: 0x000d, 0x60f: 0x000d, 0x610: 0x0005, 0x611: 0x0005, + 0x612: 0x0001, 0x613: 0x0001, 0x614: 0x0001, 0x615: 0x0001, 0x616: 0x0001, 0x617: 0x000c, + 0x618: 0x000c, 0x619: 0x000c, 0x61a: 0x000c, 0x61b: 0x000c, 0x61c: 0x000c, 0x61d: 0x000c, + 0x61e: 0x000c, 0x61f: 0x000c, 0x620: 0x000d, 0x621: 0x000d, 0x622: 0x000d, 0x623: 0x000d, + 0x624: 0x000d, 0x625: 0x000d, 0x626: 0x000d, 0x627: 0x000d, 0x628: 0x000d, 0x629: 0x000d, + 0x62a: 0x000d, 0x62b: 0x000d, 0x62c: 0x000d, 0x62d: 0x000d, 0x62e: 0x000d, 0x62f: 0x000d, + 0x630: 0x000d, 0x631: 0x000d, 0x632: 0x000d, 0x633: 0x000d, 0x634: 0x000d, 0x635: 0x000d, + 0x636: 0x000d, 0x637: 0x000d, 0x638: 0x000d, 0x639: 0x000d, 0x63a: 0x000d, 0x63b: 0x000d, + 0x63c: 0x000d, 0x63d: 0x000d, 0x63e: 0x000d, 0x63f: 0x000d, + // Block 0x19, offset 0x640 + 0x640: 0x000d, 0x641: 0x000d, 0x642: 0x000d, 0x643: 0x000d, 0x644: 0x000d, 0x645: 0x000d, + 0x646: 0x000d, 0x647: 0x000d, 0x648: 0x000d, 0x649: 0x000d, 0x64a: 0x000c, 0x64b: 0x000c, + 0x64c: 0x000c, 0x64d: 0x000c, 0x64e: 0x000c, 0x64f: 0x000c, 0x650: 0x000c, 0x651: 0x000c, + 0x652: 0x000c, 0x653: 0x000c, 0x654: 0x000c, 0x655: 0x000c, 0x656: 0x000c, 0x657: 0x000c, + 0x658: 0x000c, 0x659: 0x000c, 0x65a: 0x000c, 0x65b: 0x000c, 0x65c: 0x000c, 0x65d: 0x000c, + 0x65e: 0x000c, 0x65f: 0x000c, 0x660: 0x000c, 0x661: 0x000c, 0x662: 0x0005, 0x663: 0x000c, + 0x664: 0x000c, 0x665: 0x000c, 0x666: 0x000c, 0x667: 0x000c, 0x668: 0x000c, 0x669: 0x000c, + 0x66a: 0x000c, 0x66b: 0x000c, 0x66c: 0x000c, 0x66d: 0x000c, 0x66e: 0x000c, 0x66f: 0x000c, + 0x670: 0x000c, 0x671: 0x000c, 0x672: 0x000c, 0x673: 0x000c, 0x674: 0x000c, 0x675: 0x000c, + 0x676: 0x000c, 0x677: 0x000c, 0x678: 0x000c, 0x679: 0x000c, 0x67a: 0x000c, 0x67b: 0x000c, + 0x67c: 0x000c, 0x67d: 0x000c, 0x67e: 0x000c, 0x67f: 0x000c, + // Block 0x1a, offset 0x680 + 0x680: 0x000c, 0x681: 0x000c, 0x682: 0x000c, + 0x6ba: 0x000c, + 0x6bc: 0x000c, + // Block 0x1b, offset 0x6c0 + 0x6c1: 0x000c, 0x6c2: 0x000c, 0x6c3: 0x000c, 0x6c4: 0x000c, 0x6c5: 0x000c, + 0x6c6: 0x000c, 0x6c7: 0x000c, 0x6c8: 0x000c, + 0x6cd: 0x000c, 0x6d1: 0x000c, + 0x6d2: 0x000c, 0x6d3: 0x000c, 0x6d4: 0x000c, 0x6d5: 0x000c, 0x6d6: 0x000c, 0x6d7: 0x000c, + 0x6e2: 0x000c, 0x6e3: 0x000c, + // Block 0x1c, offset 0x700 + 0x701: 0x000c, + 0x73c: 0x000c, + // Block 0x1d, offset 0x740 + 0x741: 0x000c, 0x742: 0x000c, 0x743: 0x000c, 0x744: 0x000c, + 0x74d: 0x000c, + 0x762: 0x000c, 0x763: 0x000c, + 0x772: 0x0004, 0x773: 0x0004, + 0x77b: 0x0004, + 0x77e: 0x000c, + // Block 0x1e, offset 0x780 + 0x781: 0x000c, 0x782: 0x000c, + 0x7bc: 0x000c, + // Block 0x1f, offset 0x7c0 + 0x7c1: 0x000c, 0x7c2: 0x000c, + 0x7c7: 0x000c, 0x7c8: 0x000c, 0x7cb: 0x000c, + 0x7cc: 0x000c, 0x7cd: 0x000c, 0x7d1: 0x000c, + 0x7f0: 0x000c, 0x7f1: 0x000c, 0x7f5: 0x000c, + // Block 0x20, offset 0x800 + 0x801: 0x000c, 0x802: 0x000c, 0x803: 0x000c, 0x804: 0x000c, 0x805: 0x000c, + 0x807: 0x000c, 0x808: 0x000c, + 0x80d: 0x000c, + 0x822: 0x000c, 0x823: 0x000c, + 0x831: 0x0004, + 0x83a: 0x000c, 0x83b: 0x000c, + 0x83c: 0x000c, 0x83d: 0x000c, 0x83e: 0x000c, 0x83f: 0x000c, + // Block 0x21, offset 0x840 + 0x841: 0x000c, + 0x87c: 0x000c, 0x87f: 0x000c, + // Block 0x22, offset 0x880 + 0x881: 0x000c, 0x882: 0x000c, 0x883: 0x000c, 0x884: 0x000c, + 0x88d: 0x000c, + 0x895: 0x000c, 0x896: 0x000c, + 0x8a2: 0x000c, 0x8a3: 0x000c, + // Block 0x23, offset 0x8c0 + 0x8c2: 0x000c, + // Block 0x24, offset 0x900 + 0x900: 0x000c, + 0x90d: 0x000c, + 0x933: 0x000a, 0x934: 0x000a, 0x935: 0x000a, + 0x936: 0x000a, 0x937: 0x000a, 0x938: 0x000a, 0x939: 0x0004, 0x93a: 0x000a, + // Block 0x25, offset 0x940 + 0x940: 0x000c, 0x944: 0x000c, + 0x97c: 0x000c, 0x97e: 0x000c, 0x97f: 0x000c, + // Block 0x26, offset 0x980 + 0x980: 0x000c, + 0x986: 0x000c, 0x987: 0x000c, 0x988: 0x000c, 0x98a: 0x000c, 0x98b: 0x000c, + 0x98c: 0x000c, 0x98d: 0x000c, + 0x995: 0x000c, 0x996: 0x000c, + 0x9a2: 0x000c, 0x9a3: 0x000c, + 0x9b8: 0x000a, 0x9b9: 0x000a, 0x9ba: 0x000a, 0x9bb: 0x000a, + 0x9bc: 0x000a, 0x9bd: 0x000a, 0x9be: 0x000a, + // Block 0x27, offset 0x9c0 + 0x9cc: 0x000c, 0x9cd: 0x000c, + 0x9e2: 0x000c, 0x9e3: 0x000c, + // Block 0x28, offset 0xa00 + 0xa00: 0x000c, 0xa01: 0x000c, + 0xa3b: 0x000c, + 0xa3c: 0x000c, + // Block 0x29, offset 0xa40 + 0xa41: 0x000c, 0xa42: 0x000c, 0xa43: 0x000c, 0xa44: 0x000c, + 0xa4d: 0x000c, + 0xa62: 0x000c, 0xa63: 0x000c, + // Block 0x2a, offset 0xa80 + 0xa81: 0x000c, + // Block 0x2b, offset 0xac0 + 0xaca: 0x000c, + 0xad2: 0x000c, 0xad3: 0x000c, 0xad4: 0x000c, 0xad6: 0x000c, + // Block 0x2c, offset 0xb00 + 0xb31: 0x000c, 0xb34: 0x000c, 0xb35: 0x000c, + 0xb36: 0x000c, 0xb37: 0x000c, 0xb38: 0x000c, 0xb39: 0x000c, 0xb3a: 0x000c, + 0xb3f: 0x0004, + // Block 0x2d, offset 0xb40 + 0xb47: 0x000c, 0xb48: 0x000c, 0xb49: 0x000c, 0xb4a: 0x000c, 0xb4b: 0x000c, + 0xb4c: 0x000c, 0xb4d: 0x000c, 0xb4e: 0x000c, + // Block 0x2e, offset 0xb80 + 0xbb1: 0x000c, 0xbb4: 0x000c, 0xbb5: 0x000c, + 0xbb6: 0x000c, 0xbb7: 0x000c, 0xbb8: 0x000c, 0xbb9: 0x000c, 0xbba: 0x000c, 0xbbb: 0x000c, + 0xbbc: 0x000c, + // Block 0x2f, offset 0xbc0 + 0xbc8: 0x000c, 0xbc9: 0x000c, 0xbca: 0x000c, 0xbcb: 0x000c, + 0xbcc: 0x000c, 0xbcd: 0x000c, 0xbce: 0x000c, + // Block 0x30, offset 0xc00 + 0xc18: 0x000c, 0xc19: 0x000c, + 0xc35: 0x000c, + 0xc37: 0x000c, 0xc39: 0x000c, 0xc3a: 0x003a, 0xc3b: 0x002a, + 0xc3c: 0x003a, 0xc3d: 0x002a, + // Block 0x31, offset 0xc40 + 0xc71: 0x000c, 0xc72: 0x000c, 0xc73: 0x000c, 0xc74: 0x000c, 0xc75: 0x000c, + 0xc76: 0x000c, 0xc77: 0x000c, 0xc78: 0x000c, 0xc79: 0x000c, 0xc7a: 0x000c, 0xc7b: 0x000c, + 0xc7c: 0x000c, 0xc7d: 0x000c, 0xc7e: 0x000c, + // Block 0x32, offset 0xc80 + 0xc80: 0x000c, 0xc81: 0x000c, 0xc82: 0x000c, 0xc83: 0x000c, 0xc84: 0x000c, + 0xc86: 0x000c, 0xc87: 0x000c, + 0xc8d: 0x000c, 0xc8e: 0x000c, 0xc8f: 0x000c, 0xc90: 0x000c, 0xc91: 0x000c, + 0xc92: 0x000c, 0xc93: 0x000c, 0xc94: 0x000c, 0xc95: 0x000c, 0xc96: 0x000c, 0xc97: 0x000c, + 0xc99: 0x000c, 0xc9a: 0x000c, 0xc9b: 0x000c, 0xc9c: 0x000c, 0xc9d: 0x000c, + 0xc9e: 0x000c, 0xc9f: 0x000c, 0xca0: 0x000c, 0xca1: 0x000c, 0xca2: 0x000c, 0xca3: 0x000c, + 0xca4: 0x000c, 0xca5: 0x000c, 0xca6: 0x000c, 0xca7: 0x000c, 0xca8: 0x000c, 0xca9: 0x000c, + 0xcaa: 0x000c, 0xcab: 0x000c, 0xcac: 0x000c, 0xcad: 0x000c, 0xcae: 0x000c, 0xcaf: 0x000c, + 0xcb0: 0x000c, 0xcb1: 0x000c, 0xcb2: 0x000c, 0xcb3: 0x000c, 0xcb4: 0x000c, 0xcb5: 0x000c, + 0xcb6: 0x000c, 0xcb7: 0x000c, 0xcb8: 0x000c, 0xcb9: 0x000c, 0xcba: 0x000c, 0xcbb: 0x000c, + 0xcbc: 0x000c, + // Block 0x33, offset 0xcc0 + 0xcc6: 0x000c, + // Block 0x34, offset 0xd00 + 0xd2d: 0x000c, 0xd2e: 0x000c, 0xd2f: 0x000c, + 0xd30: 0x000c, 0xd32: 0x000c, 0xd33: 0x000c, 0xd34: 0x000c, 0xd35: 0x000c, + 0xd36: 0x000c, 0xd37: 0x000c, 0xd39: 0x000c, 0xd3a: 0x000c, + 0xd3d: 0x000c, 0xd3e: 0x000c, + // Block 0x35, offset 0xd40 + 0xd58: 0x000c, 0xd59: 0x000c, + 0xd5e: 0x000c, 0xd5f: 0x000c, 0xd60: 0x000c, + 0xd71: 0x000c, 0xd72: 0x000c, 0xd73: 0x000c, 0xd74: 0x000c, + // Block 0x36, offset 0xd80 + 0xd82: 0x000c, 0xd85: 0x000c, + 0xd86: 0x000c, + 0xd8d: 0x000c, + 0xd9d: 0x000c, + // Block 0x37, offset 0xdc0 + 0xddd: 0x000c, + 0xdde: 0x000c, 0xddf: 0x000c, + // Block 0x38, offset 0xe00 + 0xe10: 0x000a, 0xe11: 0x000a, + 0xe12: 0x000a, 0xe13: 0x000a, 0xe14: 0x000a, 0xe15: 0x000a, 0xe16: 0x000a, 0xe17: 0x000a, + 0xe18: 0x000a, 0xe19: 0x000a, + // Block 0x39, offset 0xe40 + 0xe40: 0x000a, + // Block 0x3a, offset 0xe80 + 0xe80: 0x0009, + 0xe9b: 0x007a, 0xe9c: 0x006a, + // Block 0x3b, offset 0xec0 + 0xed2: 0x000c, 0xed3: 0x000c, 0xed4: 0x000c, + 0xef2: 0x000c, 0xef3: 0x000c, + // Block 0x3c, offset 0xf00 + 0xf12: 0x000c, 0xf13: 0x000c, + 0xf32: 0x000c, 0xf33: 0x000c, + // Block 0x3d, offset 0xf40 + 0xf74: 0x000c, 0xf75: 0x000c, + 0xf77: 0x000c, 0xf78: 0x000c, 0xf79: 0x000c, 0xf7a: 0x000c, 0xf7b: 0x000c, + 0xf7c: 0x000c, 0xf7d: 0x000c, + // Block 0x3e, offset 0xf80 + 0xf86: 0x000c, 0xf89: 0x000c, 0xf8a: 0x000c, 0xf8b: 0x000c, + 0xf8c: 0x000c, 0xf8d: 0x000c, 0xf8e: 0x000c, 0xf8f: 0x000c, 0xf90: 0x000c, 0xf91: 0x000c, + 0xf92: 0x000c, 0xf93: 0x000c, + 0xf9b: 0x0004, 0xf9d: 0x000c, + 0xfb0: 0x000a, 0xfb1: 0x000a, 0xfb2: 0x000a, 0xfb3: 0x000a, 0xfb4: 0x000a, 0xfb5: 0x000a, + 0xfb6: 0x000a, 0xfb7: 0x000a, 0xfb8: 0x000a, 0xfb9: 0x000a, + // Block 0x3f, offset 0xfc0 + 0xfc0: 0x000a, 0xfc1: 0x000a, 0xfc2: 0x000a, 0xfc3: 0x000a, 0xfc4: 0x000a, 0xfc5: 0x000a, + 0xfc6: 0x000a, 0xfc7: 0x000a, 0xfc8: 0x000a, 0xfc9: 0x000a, 0xfca: 0x000a, 0xfcb: 0x000c, + 0xfcc: 0x000c, 0xfcd: 0x000c, 0xfce: 0x000b, 0xfcf: 0x000c, + // Block 0x40, offset 0x1000 + 0x1005: 0x000c, + 0x1006: 0x000c, + 0x1029: 0x000c, + // Block 0x41, offset 0x1040 + 0x1060: 0x000c, 0x1061: 0x000c, 0x1062: 0x000c, + 0x1067: 0x000c, 0x1068: 0x000c, + 0x1072: 0x000c, + 0x1079: 0x000c, 0x107a: 0x000c, 0x107b: 0x000c, + // Block 0x42, offset 0x1080 + 0x1080: 0x000a, 0x1084: 0x000a, 0x1085: 0x000a, + // Block 0x43, offset 0x10c0 + 0x10de: 0x000a, 0x10df: 0x000a, 0x10e0: 0x000a, 0x10e1: 0x000a, 0x10e2: 0x000a, 0x10e3: 0x000a, + 0x10e4: 0x000a, 0x10e5: 0x000a, 0x10e6: 0x000a, 0x10e7: 0x000a, 0x10e8: 0x000a, 0x10e9: 0x000a, + 0x10ea: 0x000a, 0x10eb: 0x000a, 0x10ec: 0x000a, 0x10ed: 0x000a, 0x10ee: 0x000a, 0x10ef: 0x000a, + 0x10f0: 0x000a, 0x10f1: 0x000a, 0x10f2: 0x000a, 0x10f3: 0x000a, 0x10f4: 0x000a, 0x10f5: 0x000a, + 0x10f6: 0x000a, 0x10f7: 0x000a, 0x10f8: 0x000a, 0x10f9: 0x000a, 0x10fa: 0x000a, 0x10fb: 0x000a, + 0x10fc: 0x000a, 0x10fd: 0x000a, 0x10fe: 0x000a, 0x10ff: 0x000a, + // Block 0x44, offset 0x1100 + 0x1117: 0x000c, + 0x1118: 0x000c, 0x111b: 0x000c, + // Block 0x45, offset 0x1140 + 0x1156: 0x000c, + 0x1158: 0x000c, 0x1159: 0x000c, 0x115a: 0x000c, 0x115b: 0x000c, 0x115c: 0x000c, 0x115d: 0x000c, + 0x115e: 0x000c, 0x1160: 0x000c, 0x1162: 0x000c, + 0x1165: 0x000c, 0x1166: 0x000c, 0x1167: 0x000c, 0x1168: 0x000c, 0x1169: 0x000c, + 0x116a: 0x000c, 0x116b: 0x000c, 0x116c: 0x000c, + 0x1173: 0x000c, 0x1174: 0x000c, 0x1175: 0x000c, + 0x1176: 0x000c, 0x1177: 0x000c, 0x1178: 0x000c, 0x1179: 0x000c, 0x117a: 0x000c, 0x117b: 0x000c, + 0x117c: 0x000c, 0x117f: 0x000c, + // Block 0x46, offset 0x1180 + 0x11b0: 0x000c, 0x11b1: 0x000c, 0x11b2: 0x000c, 0x11b3: 0x000c, 0x11b4: 0x000c, 0x11b5: 0x000c, + 0x11b6: 0x000c, 0x11b7: 0x000c, 0x11b8: 0x000c, 0x11b9: 0x000c, 0x11ba: 0x000c, 0x11bb: 0x000c, + 0x11bc: 0x000c, 0x11bd: 0x000c, 0x11be: 0x000c, 0x11bf: 0x000c, + // Block 0x47, offset 0x11c0 + 0x11c0: 0x000c, 0x11c1: 0x000c, 0x11c2: 0x000c, 0x11c3: 0x000c, 0x11c4: 0x000c, 0x11c5: 0x000c, + 0x11c6: 0x000c, 0x11c7: 0x000c, 0x11c8: 0x000c, 0x11c9: 0x000c, 0x11ca: 0x000c, 0x11cb: 0x000c, + 0x11cc: 0x000c, 0x11cd: 0x000c, 0x11ce: 0x000c, 0x11cf: 0x000c, 0x11d0: 0x000c, 0x11d1: 0x000c, + 0x11d2: 0x000c, 0x11d3: 0x000c, 0x11d4: 0x000c, 0x11d5: 0x000c, 0x11d6: 0x000c, 0x11d7: 0x000c, + 0x11d8: 0x000c, 0x11d9: 0x000c, 0x11da: 0x000c, 0x11db: 0x000c, 0x11dc: 0x000c, 0x11dd: 0x000c, + 0x11e0: 0x000c, 0x11e1: 0x000c, 0x11e2: 0x000c, 0x11e3: 0x000c, + 0x11e4: 0x000c, 0x11e5: 0x000c, 0x11e6: 0x000c, 0x11e7: 0x000c, 0x11e8: 0x000c, 0x11e9: 0x000c, + 0x11ea: 0x000c, 0x11eb: 0x000c, + // Block 0x48, offset 0x1200 + 0x1200: 0x000c, 0x1201: 0x000c, 0x1202: 0x000c, 0x1203: 0x000c, + 0x1234: 0x000c, + 0x1236: 0x000c, 0x1237: 0x000c, 0x1238: 0x000c, 0x1239: 0x000c, 0x123a: 0x000c, + 0x123c: 0x000c, + // Block 0x49, offset 0x1240 + 0x1242: 0x000c, + 0x126b: 0x000c, 0x126c: 0x000c, 0x126d: 0x000c, 0x126e: 0x000c, 0x126f: 0x000c, + 0x1270: 0x000c, 0x1271: 0x000c, 0x1272: 0x000c, 0x1273: 0x000c, + // Block 0x4a, offset 0x1280 + 0x1280: 0x000c, 0x1281: 0x000c, + 0x12a2: 0x000c, 0x12a3: 0x000c, + 0x12a4: 0x000c, 0x12a5: 0x000c, 0x12a8: 0x000c, 0x12a9: 0x000c, + 0x12ab: 0x000c, 0x12ac: 0x000c, 0x12ad: 0x000c, + // Block 0x4b, offset 0x12c0 + 0x12e6: 0x000c, 0x12e8: 0x000c, 0x12e9: 0x000c, + 0x12ed: 0x000c, 0x12ef: 0x000c, + 0x12f0: 0x000c, 0x12f1: 0x000c, + // Block 0x4c, offset 0x1300 + 0x132c: 0x000c, 0x132d: 0x000c, 0x132e: 0x000c, 0x132f: 0x000c, + 0x1330: 0x000c, 0x1331: 0x000c, 0x1332: 0x000c, 0x1333: 0x000c, + 0x1336: 0x000c, 0x1337: 0x000c, + // Block 0x4d, offset 0x1340 + 0x1350: 0x000c, 0x1351: 0x000c, + 0x1352: 0x000c, 0x1354: 0x000c, 0x1355: 0x000c, 0x1356: 0x000c, 0x1357: 0x000c, + 0x1358: 0x000c, 0x1359: 0x000c, 0x135a: 0x000c, 0x135b: 0x000c, 0x135c: 0x000c, 0x135d: 0x000c, + 0x135e: 0x000c, 0x135f: 0x000c, 0x1360: 0x000c, 0x1362: 0x000c, 0x1363: 0x000c, + 0x1364: 0x000c, 0x1365: 0x000c, 0x1366: 0x000c, 0x1367: 0x000c, 0x1368: 0x000c, + 0x136d: 0x000c, + 0x1374: 0x000c, + 0x1378: 0x000c, 0x1379: 0x000c, + // Block 0x4e, offset 0x1380 + 0x13bd: 0x000a, 0x13bf: 0x000a, + // Block 0x4f, offset 0x13c0 + 0x13c0: 0x000a, 0x13c1: 0x000a, + 0x13cd: 0x000a, 0x13ce: 0x000a, 0x13cf: 0x000a, + 0x13dd: 0x000a, + 0x13de: 0x000a, 0x13df: 0x000a, + 0x13ed: 0x000a, 0x13ee: 0x000a, 0x13ef: 0x000a, + 0x13fd: 0x000a, 0x13fe: 0x000a, + // Block 0x50, offset 0x1400 + 0x1400: 0x0009, 0x1401: 0x0009, 0x1402: 0x0009, 0x1403: 0x0009, 0x1404: 0x0009, 0x1405: 0x0009, + 0x1406: 0x0009, 0x1407: 0x0009, 0x1408: 0x0009, 0x1409: 0x0009, 0x140a: 0x0009, 0x140b: 0x000b, + 0x140c: 0x000b, 0x140d: 0x000b, 0x140f: 0x0001, 0x1410: 0x000a, 0x1411: 0x000a, + 0x1412: 0x000a, 0x1413: 0x000a, 0x1414: 0x000a, 0x1415: 0x000a, 0x1416: 0x000a, 0x1417: 0x000a, + 0x1418: 0x000a, 0x1419: 0x000a, 0x141a: 0x000a, 0x141b: 0x000a, 0x141c: 0x000a, 0x141d: 0x000a, + 0x141e: 0x000a, 0x141f: 0x000a, 0x1420: 0x000a, 0x1421: 0x000a, 0x1422: 0x000a, 0x1423: 0x000a, + 0x1424: 0x000a, 0x1425: 0x000a, 0x1426: 0x000a, 0x1427: 0x000a, 0x1428: 0x0009, 0x1429: 0x0007, + 0x142a: 0x000e, 0x142b: 0x000e, 0x142c: 0x000e, 0x142d: 0x000e, 0x142e: 0x000e, 0x142f: 0x0006, + 0x1430: 0x0004, 0x1431: 0x0004, 0x1432: 0x0004, 0x1433: 0x0004, 0x1434: 0x0004, 0x1435: 0x000a, + 0x1436: 0x000a, 0x1437: 0x000a, 0x1438: 0x000a, 0x1439: 0x000a, 0x143a: 0x000a, 0x143b: 0x000a, + 0x143c: 0x000a, 0x143d: 0x000a, 0x143e: 0x000a, 0x143f: 0x000a, + // Block 0x51, offset 0x1440 + 0x1440: 0x000a, 0x1441: 0x000a, 0x1442: 0x000a, 0x1443: 0x000a, 0x1444: 0x0006, 0x1445: 0x009a, + 0x1446: 0x008a, 0x1447: 0x000a, 0x1448: 0x000a, 0x1449: 0x000a, 0x144a: 0x000a, 0x144b: 0x000a, + 0x144c: 0x000a, 0x144d: 0x000a, 0x144e: 0x000a, 0x144f: 0x000a, 0x1450: 0x000a, 0x1451: 0x000a, + 0x1452: 0x000a, 0x1453: 0x000a, 0x1454: 0x000a, 0x1455: 0x000a, 0x1456: 0x000a, 0x1457: 0x000a, + 0x1458: 0x000a, 0x1459: 0x000a, 0x145a: 0x000a, 0x145b: 0x000a, 0x145c: 0x000a, 0x145d: 0x000a, + 0x145e: 0x000a, 0x145f: 0x0009, 0x1460: 0x000b, 0x1461: 0x000b, 0x1462: 0x000b, 0x1463: 0x000b, + 0x1464: 0x000b, 0x1465: 0x000b, 0x1466: 0x000e, 0x1467: 0x000e, 0x1468: 0x000e, 0x1469: 0x000e, + 0x146a: 0x000b, 0x146b: 0x000b, 0x146c: 0x000b, 0x146d: 0x000b, 0x146e: 0x000b, 0x146f: 0x000b, + 0x1470: 0x0002, 0x1474: 0x0002, 0x1475: 0x0002, + 0x1476: 0x0002, 0x1477: 0x0002, 0x1478: 0x0002, 0x1479: 0x0002, 0x147a: 0x0003, 0x147b: 0x0003, + 0x147c: 0x000a, 0x147d: 0x009a, 0x147e: 0x008a, + // Block 0x52, offset 0x1480 + 0x1480: 0x0002, 0x1481: 0x0002, 0x1482: 0x0002, 0x1483: 0x0002, 0x1484: 0x0002, 0x1485: 0x0002, + 0x1486: 0x0002, 0x1487: 0x0002, 0x1488: 0x0002, 0x1489: 0x0002, 0x148a: 0x0003, 0x148b: 0x0003, + 0x148c: 0x000a, 0x148d: 0x009a, 0x148e: 0x008a, + 0x14a0: 0x0004, 0x14a1: 0x0004, 0x14a2: 0x0004, 0x14a3: 0x0004, + 0x14a4: 0x0004, 0x14a5: 0x0004, 0x14a6: 0x0004, 0x14a7: 0x0004, 0x14a8: 0x0004, 0x14a9: 0x0004, + 0x14aa: 0x0004, 0x14ab: 0x0004, 0x14ac: 0x0004, 0x14ad: 0x0004, 0x14ae: 0x0004, 0x14af: 0x0004, + 0x14b0: 0x0004, 0x14b1: 0x0004, 0x14b2: 0x0004, 0x14b3: 0x0004, 0x14b4: 0x0004, 0x14b5: 0x0004, + 0x14b6: 0x0004, 0x14b7: 0x0004, 0x14b8: 0x0004, 0x14b9: 0x0004, 0x14ba: 0x0004, 0x14bb: 0x0004, + 0x14bc: 0x0004, 0x14bd: 0x0004, 0x14be: 0x0004, 0x14bf: 0x0004, + // Block 0x53, offset 0x14c0 + 0x14c0: 0x0004, 0x14c1: 0x0004, 0x14c2: 0x0004, 0x14c3: 0x0004, 0x14c4: 0x0004, 0x14c5: 0x0004, + 0x14c6: 0x0004, 0x14c7: 0x0004, 0x14c8: 0x0004, 0x14c9: 0x0004, 0x14ca: 0x0004, 0x14cb: 0x0004, + 0x14cc: 0x0004, 0x14cd: 0x0004, 0x14ce: 0x0004, 0x14cf: 0x0004, 0x14d0: 0x000c, 0x14d1: 0x000c, + 0x14d2: 0x000c, 0x14d3: 0x000c, 0x14d4: 0x000c, 0x14d5: 0x000c, 0x14d6: 0x000c, 0x14d7: 0x000c, + 0x14d8: 0x000c, 0x14d9: 0x000c, 0x14da: 0x000c, 0x14db: 0x000c, 0x14dc: 0x000c, 0x14dd: 0x000c, + 0x14de: 0x000c, 0x14df: 0x000c, 0x14e0: 0x000c, 0x14e1: 0x000c, 0x14e2: 0x000c, 0x14e3: 0x000c, + 0x14e4: 0x000c, 0x14e5: 0x000c, 0x14e6: 0x000c, 0x14e7: 0x000c, 0x14e8: 0x000c, 0x14e9: 0x000c, + 0x14ea: 0x000c, 0x14eb: 0x000c, 0x14ec: 0x000c, 0x14ed: 0x000c, 0x14ee: 0x000c, 0x14ef: 0x000c, + 0x14f0: 0x000c, + // Block 0x54, offset 0x1500 + 0x1500: 0x000a, 0x1501: 0x000a, 0x1503: 0x000a, 0x1504: 0x000a, 0x1505: 0x000a, + 0x1506: 0x000a, 0x1508: 0x000a, 0x1509: 0x000a, + 0x1514: 0x000a, 0x1516: 0x000a, 0x1517: 0x000a, + 0x1518: 0x000a, + 0x151e: 0x000a, 0x151f: 0x000a, 0x1520: 0x000a, 0x1521: 0x000a, 0x1522: 0x000a, 0x1523: 0x000a, + 0x1525: 0x000a, 0x1527: 0x000a, 0x1529: 0x000a, + 0x152e: 0x0004, + 0x153a: 0x000a, 0x153b: 0x000a, + // Block 0x55, offset 0x1540 + 0x1540: 0x000a, 0x1541: 0x000a, 0x1542: 0x000a, 0x1543: 0x000a, 0x1544: 0x000a, + 0x154a: 0x000a, 0x154b: 0x000a, + 0x154c: 0x000a, 0x154d: 0x000a, 0x1550: 0x000a, 0x1551: 0x000a, + 0x1552: 0x000a, 0x1553: 0x000a, 0x1554: 0x000a, 0x1555: 0x000a, 0x1556: 0x000a, 0x1557: 0x000a, + 0x1558: 0x000a, 0x1559: 0x000a, 0x155a: 0x000a, 0x155b: 0x000a, 0x155c: 0x000a, 0x155d: 0x000a, + 0x155e: 0x000a, 0x155f: 0x000a, + // Block 0x56, offset 0x1580 + 0x1589: 0x000a, 0x158a: 0x000a, 0x158b: 0x000a, + 0x1590: 0x000a, 0x1591: 0x000a, + 0x1592: 0x000a, 0x1593: 0x000a, 0x1594: 0x000a, 0x1595: 0x000a, 0x1596: 0x000a, 0x1597: 0x000a, + 0x1598: 0x000a, 0x1599: 0x000a, 0x159a: 0x000a, 0x159b: 0x000a, 0x159c: 0x000a, 0x159d: 0x000a, + 0x159e: 0x000a, 0x159f: 0x000a, 0x15a0: 0x000a, 0x15a1: 0x000a, 0x15a2: 0x000a, 0x15a3: 0x000a, + 0x15a4: 0x000a, 0x15a5: 0x000a, 0x15a6: 0x000a, 0x15a7: 0x000a, 0x15a8: 0x000a, 0x15a9: 0x000a, + 0x15aa: 0x000a, 0x15ab: 0x000a, 0x15ac: 0x000a, 0x15ad: 0x000a, 0x15ae: 0x000a, 0x15af: 0x000a, + 0x15b0: 0x000a, 0x15b1: 0x000a, 0x15b2: 0x000a, 0x15b3: 0x000a, 0x15b4: 0x000a, 0x15b5: 0x000a, + 0x15b6: 0x000a, 0x15b7: 0x000a, 0x15b8: 0x000a, 0x15b9: 0x000a, 0x15ba: 0x000a, 0x15bb: 0x000a, + 0x15bc: 0x000a, 0x15bd: 0x000a, 0x15be: 0x000a, 0x15bf: 0x000a, + // Block 0x57, offset 0x15c0 + 0x15c0: 0x000a, 0x15c1: 0x000a, 0x15c2: 0x000a, 0x15c3: 0x000a, 0x15c4: 0x000a, 0x15c5: 0x000a, + 0x15c6: 0x000a, 0x15c7: 0x000a, 0x15c8: 0x000a, 0x15c9: 0x000a, 0x15ca: 0x000a, 0x15cb: 0x000a, + 0x15cc: 0x000a, 0x15cd: 0x000a, 0x15ce: 0x000a, 0x15cf: 0x000a, 0x15d0: 0x000a, 0x15d1: 0x000a, + 0x15d2: 0x000a, 0x15d3: 0x000a, 0x15d4: 0x000a, 0x15d5: 0x000a, 0x15d6: 0x000a, 0x15d7: 0x000a, + 0x15d8: 0x000a, 0x15d9: 0x000a, 0x15da: 0x000a, 0x15db: 0x000a, 0x15dc: 0x000a, 0x15dd: 0x000a, + 0x15de: 0x000a, 0x15df: 0x000a, 0x15e0: 0x000a, 0x15e1: 0x000a, 0x15e2: 0x000a, 0x15e3: 0x000a, + 0x15e4: 0x000a, 0x15e5: 0x000a, 0x15e6: 0x000a, 0x15e7: 0x000a, 0x15e8: 0x000a, 0x15e9: 0x000a, + 0x15ea: 0x000a, 0x15eb: 0x000a, 0x15ec: 0x000a, 0x15ed: 0x000a, 0x15ee: 0x000a, 0x15ef: 0x000a, + 0x15f0: 0x000a, 0x15f1: 0x000a, 0x15f2: 0x000a, 0x15f3: 0x000a, 0x15f4: 0x000a, 0x15f5: 0x000a, + 0x15f6: 0x000a, 0x15f7: 0x000a, 0x15f8: 0x000a, 0x15f9: 0x000a, 0x15fa: 0x000a, 0x15fb: 0x000a, + 0x15fc: 0x000a, 0x15fd: 0x000a, 0x15fe: 0x000a, 0x15ff: 0x000a, + // Block 0x58, offset 0x1600 + 0x1600: 0x000a, 0x1601: 0x000a, 0x1602: 0x000a, 0x1603: 0x000a, 0x1604: 0x000a, 0x1605: 0x000a, + 0x1606: 0x000a, 0x1607: 0x000a, 0x1608: 0x000a, 0x1609: 0x000a, 0x160a: 0x000a, 0x160b: 0x000a, + 0x160c: 0x000a, 0x160d: 0x000a, 0x160e: 0x000a, 0x160f: 0x000a, 0x1610: 0x000a, 0x1611: 0x000a, + 0x1612: 0x0003, 0x1613: 0x0004, 0x1614: 0x000a, 0x1615: 0x000a, 0x1616: 0x000a, 0x1617: 0x000a, + 0x1618: 0x000a, 0x1619: 0x000a, 0x161a: 0x000a, 0x161b: 0x000a, 0x161c: 0x000a, 0x161d: 0x000a, + 0x161e: 0x000a, 0x161f: 0x000a, 0x1620: 0x000a, 0x1621: 0x000a, 0x1622: 0x000a, 0x1623: 0x000a, + 0x1624: 0x000a, 0x1625: 0x000a, 0x1626: 0x000a, 0x1627: 0x000a, 0x1628: 0x000a, 0x1629: 0x000a, + 0x162a: 0x000a, 0x162b: 0x000a, 0x162c: 0x000a, 0x162d: 0x000a, 0x162e: 0x000a, 0x162f: 0x000a, + 0x1630: 0x000a, 0x1631: 0x000a, 0x1632: 0x000a, 0x1633: 0x000a, 0x1634: 0x000a, 0x1635: 0x000a, + 0x1636: 0x000a, 0x1637: 0x000a, 0x1638: 0x000a, 0x1639: 0x000a, 0x163a: 0x000a, 0x163b: 0x000a, + 0x163c: 0x000a, 0x163d: 0x000a, 0x163e: 0x000a, 0x163f: 0x000a, + // Block 0x59, offset 0x1640 + 0x1640: 0x000a, 0x1641: 0x000a, 0x1642: 0x000a, 0x1643: 0x000a, 0x1644: 0x000a, 0x1645: 0x000a, + 0x1646: 0x000a, 0x1647: 0x000a, 0x1648: 0x003a, 0x1649: 0x002a, 0x164a: 0x003a, 0x164b: 0x002a, + 0x164c: 0x000a, 0x164d: 0x000a, 0x164e: 0x000a, 0x164f: 0x000a, 0x1650: 0x000a, 0x1651: 0x000a, + 0x1652: 0x000a, 0x1653: 0x000a, 0x1654: 0x000a, 0x1655: 0x000a, 0x1656: 0x000a, 0x1657: 0x000a, + 0x1658: 0x000a, 0x1659: 0x000a, 0x165a: 0x000a, 0x165b: 0x000a, 0x165c: 0x000a, 0x165d: 0x000a, + 0x165e: 0x000a, 0x165f: 0x000a, 0x1660: 0x000a, 0x1661: 0x000a, 0x1662: 0x000a, 0x1663: 0x000a, + 0x1664: 0x000a, 0x1665: 0x000a, 0x1666: 0x000a, 0x1667: 0x000a, 0x1668: 0x000a, 0x1669: 0x009a, + 0x166a: 0x008a, 0x166b: 0x000a, 0x166c: 0x000a, 0x166d: 0x000a, 0x166e: 0x000a, 0x166f: 0x000a, + 0x1670: 0x000a, 0x1671: 0x000a, 0x1672: 0x000a, 0x1673: 0x000a, 0x1674: 0x000a, 0x1675: 0x000a, + // Block 0x5a, offset 0x1680 + 0x16bb: 0x000a, + 0x16bc: 0x000a, 0x16bd: 0x000a, 0x16be: 0x000a, 0x16bf: 0x000a, + // Block 0x5b, offset 0x16c0 + 0x16c0: 0x000a, 0x16c1: 0x000a, 0x16c2: 0x000a, 0x16c3: 0x000a, 0x16c4: 0x000a, 0x16c5: 0x000a, + 0x16c6: 0x000a, 0x16c7: 0x000a, 0x16c8: 0x000a, 0x16c9: 0x000a, 0x16ca: 0x000a, 0x16cb: 0x000a, + 0x16cc: 0x000a, 0x16cd: 0x000a, 0x16ce: 0x000a, 0x16cf: 0x000a, 0x16d0: 0x000a, 0x16d1: 0x000a, + 0x16d2: 0x000a, 0x16d3: 0x000a, 0x16d4: 0x000a, 0x16d6: 0x000a, 0x16d7: 0x000a, + 0x16d8: 0x000a, 0x16d9: 0x000a, 0x16da: 0x000a, 0x16db: 0x000a, 0x16dc: 0x000a, 0x16dd: 0x000a, + 0x16de: 0x000a, 0x16df: 0x000a, 0x16e0: 0x000a, 0x16e1: 0x000a, 0x16e2: 0x000a, 0x16e3: 0x000a, + 0x16e4: 0x000a, 0x16e5: 0x000a, 0x16e6: 0x000a, 0x16e7: 0x000a, 0x16e8: 0x000a, 0x16e9: 0x000a, + 0x16ea: 0x000a, 0x16eb: 0x000a, 0x16ec: 0x000a, 0x16ed: 0x000a, 0x16ee: 0x000a, 0x16ef: 0x000a, + 0x16f0: 0x000a, 0x16f1: 0x000a, 0x16f2: 0x000a, 0x16f3: 0x000a, 0x16f4: 0x000a, 0x16f5: 0x000a, + 0x16f6: 0x000a, 0x16f7: 0x000a, 0x16f8: 0x000a, 0x16f9: 0x000a, 0x16fa: 0x000a, 0x16fb: 0x000a, + 0x16fc: 0x000a, 0x16fd: 0x000a, 0x16fe: 0x000a, 0x16ff: 0x000a, + // Block 0x5c, offset 0x1700 + 0x1700: 0x000a, 0x1701: 0x000a, 0x1702: 0x000a, 0x1703: 0x000a, 0x1704: 0x000a, 0x1705: 0x000a, + 0x1706: 0x000a, 0x1707: 0x000a, 0x1708: 0x000a, 0x1709: 0x000a, 0x170a: 0x000a, 0x170b: 0x000a, + 0x170c: 0x000a, 0x170d: 0x000a, 0x170e: 0x000a, 0x170f: 0x000a, 0x1710: 0x000a, 0x1711: 0x000a, + 0x1712: 0x000a, 0x1713: 0x000a, 0x1714: 0x000a, 0x1715: 0x000a, 0x1716: 0x000a, 0x1717: 0x000a, + 0x1718: 0x000a, 0x1719: 0x000a, 0x171a: 0x000a, 0x171b: 0x000a, 0x171c: 0x000a, 0x171d: 0x000a, + 0x171e: 0x000a, 0x171f: 0x000a, 0x1720: 0x000a, 0x1721: 0x000a, 0x1722: 0x000a, 0x1723: 0x000a, + 0x1724: 0x000a, 0x1725: 0x000a, 0x1726: 0x000a, 0x1727: 0x000a, 0x1728: 0x000a, 0x1729: 0x000a, + // Block 0x5d, offset 0x1740 + 0x1740: 0x000a, 0x1741: 0x000a, 0x1742: 0x000a, 0x1743: 0x000a, 0x1744: 0x000a, 0x1745: 0x000a, + 0x1746: 0x000a, 0x1747: 0x000a, 0x1748: 0x000a, 0x1749: 0x000a, 0x174a: 0x000a, + 0x1760: 0x000a, 0x1761: 0x000a, 0x1762: 0x000a, 0x1763: 0x000a, + 0x1764: 0x000a, 0x1765: 0x000a, 0x1766: 0x000a, 0x1767: 0x000a, 0x1768: 0x000a, 0x1769: 0x000a, + 0x176a: 0x000a, 0x176b: 0x000a, 0x176c: 0x000a, 0x176d: 0x000a, 0x176e: 0x000a, 0x176f: 0x000a, + 0x1770: 0x000a, 0x1771: 0x000a, 0x1772: 0x000a, 0x1773: 0x000a, 0x1774: 0x000a, 0x1775: 0x000a, + 0x1776: 0x000a, 0x1777: 0x000a, 0x1778: 0x000a, 0x1779: 0x000a, 0x177a: 0x000a, 0x177b: 0x000a, + 0x177c: 0x000a, 0x177d: 0x000a, 0x177e: 0x000a, 0x177f: 0x000a, + // Block 0x5e, offset 0x1780 + 0x1780: 0x000a, 0x1781: 0x000a, 0x1782: 0x000a, 0x1783: 0x000a, 0x1784: 0x000a, 0x1785: 0x000a, + 0x1786: 0x000a, 0x1787: 0x000a, 0x1788: 0x0002, 0x1789: 0x0002, 0x178a: 0x0002, 0x178b: 0x0002, + 0x178c: 0x0002, 0x178d: 0x0002, 0x178e: 0x0002, 0x178f: 0x0002, 0x1790: 0x0002, 0x1791: 0x0002, + 0x1792: 0x0002, 0x1793: 0x0002, 0x1794: 0x0002, 0x1795: 0x0002, 0x1796: 0x0002, 0x1797: 0x0002, + 0x1798: 0x0002, 0x1799: 0x0002, 0x179a: 0x0002, 0x179b: 0x0002, + // Block 0x5f, offset 0x17c0 + 0x17ea: 0x000a, 0x17eb: 0x000a, 0x17ec: 0x000a, 0x17ed: 0x000a, 0x17ee: 0x000a, 0x17ef: 0x000a, + 0x17f0: 0x000a, 0x17f1: 0x000a, 0x17f2: 0x000a, 0x17f3: 0x000a, 0x17f4: 0x000a, 0x17f5: 0x000a, + 0x17f6: 0x000a, 0x17f7: 0x000a, 0x17f8: 0x000a, 0x17f9: 0x000a, 0x17fa: 0x000a, 0x17fb: 0x000a, + 0x17fc: 0x000a, 0x17fd: 0x000a, 0x17fe: 0x000a, 0x17ff: 0x000a, + // Block 0x60, offset 0x1800 + 0x1800: 0x000a, 0x1801: 0x000a, 0x1802: 0x000a, 0x1803: 0x000a, 0x1804: 0x000a, 0x1805: 0x000a, + 0x1806: 0x000a, 0x1807: 0x000a, 0x1808: 0x000a, 0x1809: 0x000a, 0x180a: 0x000a, 0x180b: 0x000a, + 0x180c: 0x000a, 0x180d: 0x000a, 0x180e: 0x000a, 0x180f: 0x000a, 0x1810: 0x000a, 0x1811: 0x000a, + 0x1812: 0x000a, 0x1813: 0x000a, 0x1814: 0x000a, 0x1815: 0x000a, 0x1816: 0x000a, 0x1817: 0x000a, + 0x1818: 0x000a, 0x1819: 0x000a, 0x181a: 0x000a, 0x181b: 0x000a, 0x181c: 0x000a, 0x181d: 0x000a, + 0x181e: 0x000a, 0x181f: 0x000a, 0x1820: 0x000a, 0x1821: 0x000a, 0x1822: 0x000a, 0x1823: 0x000a, + 0x1824: 0x000a, 0x1825: 0x000a, 0x1826: 0x000a, 0x1827: 0x000a, 0x1828: 0x000a, 0x1829: 0x000a, + 0x182a: 0x000a, 0x182b: 0x000a, 0x182d: 0x000a, 0x182e: 0x000a, 0x182f: 0x000a, + 0x1830: 0x000a, 0x1831: 0x000a, 0x1832: 0x000a, 0x1833: 0x000a, 0x1834: 0x000a, 0x1835: 0x000a, + 0x1836: 0x000a, 0x1837: 0x000a, 0x1838: 0x000a, 0x1839: 0x000a, 0x183a: 0x000a, 0x183b: 0x000a, + 0x183c: 0x000a, 0x183d: 0x000a, 0x183e: 0x000a, 0x183f: 0x000a, + // Block 0x61, offset 0x1840 + 0x1840: 0x000a, 0x1841: 0x000a, 0x1842: 0x000a, 0x1843: 0x000a, 0x1844: 0x000a, 0x1845: 0x000a, + 0x1846: 0x000a, 0x1847: 0x000a, 0x1848: 0x000a, 0x1849: 0x000a, 0x184a: 0x000a, 0x184b: 0x000a, + 0x184c: 0x000a, 0x184d: 0x000a, 0x184e: 0x000a, 0x184f: 0x000a, 0x1850: 0x000a, 0x1851: 0x000a, + 0x1852: 0x000a, 0x1853: 0x000a, 0x1854: 0x000a, 0x1855: 0x000a, 0x1856: 0x000a, 0x1857: 0x000a, + 0x1858: 0x000a, 0x1859: 0x000a, 0x185a: 0x000a, 0x185b: 0x000a, 0x185c: 0x000a, 0x185d: 0x000a, + 0x185e: 0x000a, 0x185f: 0x000a, 0x1860: 0x000a, 0x1861: 0x000a, 0x1862: 0x000a, 0x1863: 0x000a, + 0x1864: 0x000a, 0x1865: 0x000a, 0x1866: 0x000a, 0x1867: 0x000a, 0x1868: 0x003a, 0x1869: 0x002a, + 0x186a: 0x003a, 0x186b: 0x002a, 0x186c: 0x003a, 0x186d: 0x002a, 0x186e: 0x003a, 0x186f: 0x002a, + 0x1870: 0x003a, 0x1871: 0x002a, 0x1872: 0x003a, 0x1873: 0x002a, 0x1874: 0x003a, 0x1875: 0x002a, + 0x1876: 0x000a, 0x1877: 0x000a, 0x1878: 0x000a, 0x1879: 0x000a, 0x187a: 0x000a, 0x187b: 0x000a, + 0x187c: 0x000a, 0x187d: 0x000a, 0x187e: 0x000a, 0x187f: 0x000a, + // Block 0x62, offset 0x1880 + 0x1880: 0x000a, 0x1881: 0x000a, 0x1882: 0x000a, 0x1883: 0x000a, 0x1884: 0x000a, 0x1885: 0x009a, + 0x1886: 0x008a, 0x1887: 0x000a, 0x1888: 0x000a, 0x1889: 0x000a, 0x188a: 0x000a, 0x188b: 0x000a, + 0x188c: 0x000a, 0x188d: 0x000a, 0x188e: 0x000a, 0x188f: 0x000a, 0x1890: 0x000a, 0x1891: 0x000a, + 0x1892: 0x000a, 0x1893: 0x000a, 0x1894: 0x000a, 0x1895: 0x000a, 0x1896: 0x000a, 0x1897: 0x000a, + 0x1898: 0x000a, 0x1899: 0x000a, 0x189a: 0x000a, 0x189b: 0x000a, 0x189c: 0x000a, 0x189d: 0x000a, + 0x189e: 0x000a, 0x189f: 0x000a, 0x18a0: 0x000a, 0x18a1: 0x000a, 0x18a2: 0x000a, 0x18a3: 0x000a, + 0x18a4: 0x000a, 0x18a5: 0x000a, 0x18a6: 0x003a, 0x18a7: 0x002a, 0x18a8: 0x003a, 0x18a9: 0x002a, + 0x18aa: 0x003a, 0x18ab: 0x002a, 0x18ac: 0x003a, 0x18ad: 0x002a, 0x18ae: 0x003a, 0x18af: 0x002a, + 0x18b0: 0x000a, 0x18b1: 0x000a, 0x18b2: 0x000a, 0x18b3: 0x000a, 0x18b4: 0x000a, 0x18b5: 0x000a, + 0x18b6: 0x000a, 0x18b7: 0x000a, 0x18b8: 0x000a, 0x18b9: 0x000a, 0x18ba: 0x000a, 0x18bb: 0x000a, + 0x18bc: 0x000a, 0x18bd: 0x000a, 0x18be: 0x000a, 0x18bf: 0x000a, + // Block 0x63, offset 0x18c0 + 0x18c0: 0x000a, 0x18c1: 0x000a, 0x18c2: 0x000a, 0x18c3: 0x007a, 0x18c4: 0x006a, 0x18c5: 0x009a, + 0x18c6: 0x008a, 0x18c7: 0x00ba, 0x18c8: 0x00aa, 0x18c9: 0x009a, 0x18ca: 0x008a, 0x18cb: 0x007a, + 0x18cc: 0x006a, 0x18cd: 0x00da, 0x18ce: 0x002a, 0x18cf: 0x003a, 0x18d0: 0x00ca, 0x18d1: 0x009a, + 0x18d2: 0x008a, 0x18d3: 0x007a, 0x18d4: 0x006a, 0x18d5: 0x009a, 0x18d6: 0x008a, 0x18d7: 0x00ba, + 0x18d8: 0x00aa, 0x18d9: 0x000a, 0x18da: 0x000a, 0x18db: 0x000a, 0x18dc: 0x000a, 0x18dd: 0x000a, + 0x18de: 0x000a, 0x18df: 0x000a, 0x18e0: 0x000a, 0x18e1: 0x000a, 0x18e2: 0x000a, 0x18e3: 0x000a, + 0x18e4: 0x000a, 0x18e5: 0x000a, 0x18e6: 0x000a, 0x18e7: 0x000a, 0x18e8: 0x000a, 0x18e9: 0x000a, + 0x18ea: 0x000a, 0x18eb: 0x000a, 0x18ec: 0x000a, 0x18ed: 0x000a, 0x18ee: 0x000a, 0x18ef: 0x000a, + 0x18f0: 0x000a, 0x18f1: 0x000a, 0x18f2: 0x000a, 0x18f3: 0x000a, 0x18f4: 0x000a, 0x18f5: 0x000a, + 0x18f6: 0x000a, 0x18f7: 0x000a, 0x18f8: 0x000a, 0x18f9: 0x000a, 0x18fa: 0x000a, 0x18fb: 0x000a, + 0x18fc: 0x000a, 0x18fd: 0x000a, 0x18fe: 0x000a, 0x18ff: 0x000a, + // Block 0x64, offset 0x1900 + 0x1900: 0x000a, 0x1901: 0x000a, 0x1902: 0x000a, 0x1903: 0x000a, 0x1904: 0x000a, 0x1905: 0x000a, + 0x1906: 0x000a, 0x1907: 0x000a, 0x1908: 0x000a, 0x1909: 0x000a, 0x190a: 0x000a, 0x190b: 0x000a, + 0x190c: 0x000a, 0x190d: 0x000a, 0x190e: 0x000a, 0x190f: 0x000a, 0x1910: 0x000a, 0x1911: 0x000a, + 0x1912: 0x000a, 0x1913: 0x000a, 0x1914: 0x000a, 0x1915: 0x000a, 0x1916: 0x000a, 0x1917: 0x000a, + 0x1918: 0x003a, 0x1919: 0x002a, 0x191a: 0x003a, 0x191b: 0x002a, 0x191c: 0x000a, 0x191d: 0x000a, + 0x191e: 0x000a, 0x191f: 0x000a, 0x1920: 0x000a, 0x1921: 0x000a, 0x1922: 0x000a, 0x1923: 0x000a, + 0x1924: 0x000a, 0x1925: 0x000a, 0x1926: 0x000a, 0x1927: 0x000a, 0x1928: 0x000a, 0x1929: 0x000a, + 0x192a: 0x000a, 0x192b: 0x000a, 0x192c: 0x000a, 0x192d: 0x000a, 0x192e: 0x000a, 0x192f: 0x000a, + 0x1930: 0x000a, 0x1931: 0x000a, 0x1932: 0x000a, 0x1933: 0x000a, 0x1934: 0x000a, 0x1935: 0x000a, + 0x1936: 0x000a, 0x1937: 0x000a, 0x1938: 0x000a, 0x1939: 0x000a, 0x193a: 0x000a, 0x193b: 0x000a, + 0x193c: 0x003a, 0x193d: 0x002a, 0x193e: 0x000a, 0x193f: 0x000a, + // Block 0x65, offset 0x1940 + 0x1940: 0x000a, 0x1941: 0x000a, 0x1942: 0x000a, 0x1943: 0x000a, 0x1944: 0x000a, 0x1945: 0x000a, + 0x1946: 0x000a, 0x1947: 0x000a, 0x1948: 0x000a, 0x1949: 0x000a, 0x194a: 0x000a, 0x194b: 0x000a, + 0x194c: 0x000a, 0x194d: 0x000a, 0x194e: 0x000a, 0x194f: 0x000a, 0x1950: 0x000a, 0x1951: 0x000a, + 0x1952: 0x000a, 0x1953: 0x000a, 0x1954: 0x000a, 0x1955: 0x000a, 0x1956: 0x000a, 0x1957: 0x000a, + 0x1958: 0x000a, 0x1959: 0x000a, 0x195a: 0x000a, 0x195b: 0x000a, 0x195c: 0x000a, 0x195d: 0x000a, + 0x195e: 0x000a, 0x195f: 0x000a, 0x1960: 0x000a, 0x1961: 0x000a, 0x1962: 0x000a, 0x1963: 0x000a, + 0x1964: 0x000a, 0x1965: 0x000a, 0x1966: 0x000a, 0x1967: 0x000a, 0x1968: 0x000a, 0x1969: 0x000a, + 0x196a: 0x000a, 0x196b: 0x000a, 0x196c: 0x000a, 0x196d: 0x000a, 0x196e: 0x000a, 0x196f: 0x000a, + 0x1970: 0x000a, 0x1971: 0x000a, 0x1972: 0x000a, 0x1973: 0x000a, + 0x1976: 0x000a, 0x1977: 0x000a, 0x1978: 0x000a, 0x1979: 0x000a, 0x197a: 0x000a, 0x197b: 0x000a, + 0x197c: 0x000a, 0x197d: 0x000a, 0x197e: 0x000a, 0x197f: 0x000a, + // Block 0x66, offset 0x1980 + 0x19a5: 0x000a, 0x19a6: 0x000a, 0x19a7: 0x000a, 0x19a8: 0x000a, 0x19a9: 0x000a, + 0x19aa: 0x000a, 0x19af: 0x000c, + 0x19b0: 0x000c, 0x19b1: 0x000c, + 0x19b9: 0x000a, 0x19ba: 0x000a, 0x19bb: 0x000a, + 0x19bc: 0x000a, 0x19bd: 0x000a, 0x19be: 0x000a, 0x19bf: 0x000a, + // Block 0x67, offset 0x19c0 + 0x19ff: 0x000c, + // Block 0x68, offset 0x1a00 + 0x1a20: 0x000c, 0x1a21: 0x000c, 0x1a22: 0x000c, 0x1a23: 0x000c, + 0x1a24: 0x000c, 0x1a25: 0x000c, 0x1a26: 0x000c, 0x1a27: 0x000c, 0x1a28: 0x000c, 0x1a29: 0x000c, + 0x1a2a: 0x000c, 0x1a2b: 0x000c, 0x1a2c: 0x000c, 0x1a2d: 0x000c, 0x1a2e: 0x000c, 0x1a2f: 0x000c, + 0x1a30: 0x000c, 0x1a31: 0x000c, 0x1a32: 0x000c, 0x1a33: 0x000c, 0x1a34: 0x000c, 0x1a35: 0x000c, + 0x1a36: 0x000c, 0x1a37: 0x000c, 0x1a38: 0x000c, 0x1a39: 0x000c, 0x1a3a: 0x000c, 0x1a3b: 0x000c, + 0x1a3c: 0x000c, 0x1a3d: 0x000c, 0x1a3e: 0x000c, 0x1a3f: 0x000c, + // Block 0x69, offset 0x1a40 + 0x1a40: 0x000a, 0x1a41: 0x000a, 0x1a42: 0x000a, 0x1a43: 0x000a, 0x1a44: 0x000a, 0x1a45: 0x000a, + 0x1a46: 0x000a, 0x1a47: 0x000a, 0x1a48: 0x000a, 0x1a49: 0x000a, 0x1a4a: 0x000a, 0x1a4b: 0x000a, + 0x1a4c: 0x000a, 0x1a4d: 0x000a, 0x1a4e: 0x000a, 0x1a4f: 0x000a, 0x1a50: 0x000a, 0x1a51: 0x000a, + 0x1a52: 0x000a, 0x1a53: 0x000a, 0x1a54: 0x000a, 0x1a55: 0x000a, 0x1a56: 0x000a, 0x1a57: 0x000a, + 0x1a58: 0x000a, 0x1a59: 0x000a, 0x1a5a: 0x000a, 0x1a5b: 0x000a, 0x1a5c: 0x000a, 0x1a5d: 0x000a, + 0x1a5e: 0x000a, 0x1a5f: 0x000a, 0x1a60: 0x000a, 0x1a61: 0x000a, 0x1a62: 0x003a, 0x1a63: 0x002a, + 0x1a64: 0x003a, 0x1a65: 0x002a, 0x1a66: 0x003a, 0x1a67: 0x002a, 0x1a68: 0x003a, 0x1a69: 0x002a, + 0x1a6a: 0x000a, 0x1a6b: 0x000a, 0x1a6c: 0x000a, 0x1a6d: 0x000a, 0x1a6e: 0x000a, 0x1a6f: 0x000a, + 0x1a70: 0x000a, 0x1a71: 0x000a, 0x1a72: 0x000a, 0x1a73: 0x000a, 0x1a74: 0x000a, 0x1a75: 0x000a, + 0x1a76: 0x000a, 0x1a77: 0x000a, 0x1a78: 0x000a, 0x1a79: 0x000a, 0x1a7a: 0x000a, 0x1a7b: 0x000a, + 0x1a7c: 0x000a, 0x1a7d: 0x000a, 0x1a7e: 0x000a, 0x1a7f: 0x000a, + // Block 0x6a, offset 0x1a80 + 0x1a80: 0x000a, 0x1a81: 0x000a, 0x1a82: 0x000a, 0x1a83: 0x000a, 0x1a84: 0x000a, 0x1a85: 0x000a, + 0x1a86: 0x000a, 0x1a87: 0x000a, 0x1a88: 0x000a, 0x1a89: 0x000a, 0x1a8a: 0x000a, 0x1a8b: 0x000a, + 0x1a8c: 0x000a, 0x1a8d: 0x000a, 0x1a8e: 0x000a, 0x1a8f: 0x000a, 0x1a90: 0x000a, 0x1a91: 0x000a, + 0x1a92: 0x000a, 0x1a93: 0x000a, 0x1a94: 0x000a, 0x1a95: 0x009a, 0x1a96: 0x008a, 0x1a97: 0x00ba, + 0x1a98: 0x00aa, 0x1a99: 0x009a, 0x1a9a: 0x008a, 0x1a9b: 0x007a, 0x1a9c: 0x006a, 0x1a9d: 0x000a, + // Block 0x6b, offset 0x1ac0 + 0x1ac0: 0x000a, 0x1ac1: 0x000a, 0x1ac2: 0x000a, 0x1ac3: 0x000a, 0x1ac4: 0x000a, 0x1ac5: 0x000a, + 0x1ac6: 0x000a, 0x1ac7: 0x000a, 0x1ac8: 0x000a, 0x1ac9: 0x000a, 0x1aca: 0x000a, 0x1acb: 0x000a, + 0x1acc: 0x000a, 0x1acd: 0x000a, 0x1ace: 0x000a, 0x1acf: 0x000a, 0x1ad0: 0x000a, 0x1ad1: 0x000a, + 0x1ad2: 0x000a, 0x1ad3: 0x000a, 0x1ad4: 0x000a, 0x1ad5: 0x000a, 0x1ad6: 0x000a, 0x1ad7: 0x000a, + 0x1ad8: 0x000a, 0x1ad9: 0x000a, 0x1adb: 0x000a, 0x1adc: 0x000a, 0x1add: 0x000a, + 0x1ade: 0x000a, 0x1adf: 0x000a, 0x1ae0: 0x000a, 0x1ae1: 0x000a, 0x1ae2: 0x000a, 0x1ae3: 0x000a, + 0x1ae4: 0x000a, 0x1ae5: 0x000a, 0x1ae6: 0x000a, 0x1ae7: 0x000a, 0x1ae8: 0x000a, 0x1ae9: 0x000a, + 0x1aea: 0x000a, 0x1aeb: 0x000a, 0x1aec: 0x000a, 0x1aed: 0x000a, 0x1aee: 0x000a, 0x1aef: 0x000a, + 0x1af0: 0x000a, 0x1af1: 0x000a, 0x1af2: 0x000a, 0x1af3: 0x000a, 0x1af4: 0x000a, 0x1af5: 0x000a, + 0x1af6: 0x000a, 0x1af7: 0x000a, 0x1af8: 0x000a, 0x1af9: 0x000a, 0x1afa: 0x000a, 0x1afb: 0x000a, + 0x1afc: 0x000a, 0x1afd: 0x000a, 0x1afe: 0x000a, 0x1aff: 0x000a, + // Block 0x6c, offset 0x1b00 + 0x1b00: 0x000a, 0x1b01: 0x000a, 0x1b02: 0x000a, 0x1b03: 0x000a, 0x1b04: 0x000a, 0x1b05: 0x000a, + 0x1b06: 0x000a, 0x1b07: 0x000a, 0x1b08: 0x000a, 0x1b09: 0x000a, 0x1b0a: 0x000a, 0x1b0b: 0x000a, + 0x1b0c: 0x000a, 0x1b0d: 0x000a, 0x1b0e: 0x000a, 0x1b0f: 0x000a, 0x1b10: 0x000a, 0x1b11: 0x000a, + 0x1b12: 0x000a, 0x1b13: 0x000a, 0x1b14: 0x000a, 0x1b15: 0x000a, 0x1b16: 0x000a, 0x1b17: 0x000a, + 0x1b18: 0x000a, 0x1b19: 0x000a, 0x1b1a: 0x000a, 0x1b1b: 0x000a, 0x1b1c: 0x000a, 0x1b1d: 0x000a, + 0x1b1e: 0x000a, 0x1b1f: 0x000a, 0x1b20: 0x000a, 0x1b21: 0x000a, 0x1b22: 0x000a, 0x1b23: 0x000a, + 0x1b24: 0x000a, 0x1b25: 0x000a, 0x1b26: 0x000a, 0x1b27: 0x000a, 0x1b28: 0x000a, 0x1b29: 0x000a, + 0x1b2a: 0x000a, 0x1b2b: 0x000a, 0x1b2c: 0x000a, 0x1b2d: 0x000a, 0x1b2e: 0x000a, 0x1b2f: 0x000a, + 0x1b30: 0x000a, 0x1b31: 0x000a, 0x1b32: 0x000a, 0x1b33: 0x000a, + // Block 0x6d, offset 0x1b40 + 0x1b40: 0x000a, 0x1b41: 0x000a, 0x1b42: 0x000a, 0x1b43: 0x000a, 0x1b44: 0x000a, 0x1b45: 0x000a, + 0x1b46: 0x000a, 0x1b47: 0x000a, 0x1b48: 0x000a, 0x1b49: 0x000a, 0x1b4a: 0x000a, 0x1b4b: 0x000a, + 0x1b4c: 0x000a, 0x1b4d: 0x000a, 0x1b4e: 0x000a, 0x1b4f: 0x000a, 0x1b50: 0x000a, 0x1b51: 0x000a, + 0x1b52: 0x000a, 0x1b53: 0x000a, 0x1b54: 0x000a, 0x1b55: 0x000a, + 0x1b70: 0x000a, 0x1b71: 0x000a, 0x1b72: 0x000a, 0x1b73: 0x000a, 0x1b74: 0x000a, 0x1b75: 0x000a, + 0x1b76: 0x000a, 0x1b77: 0x000a, 0x1b78: 0x000a, 0x1b79: 0x000a, 0x1b7a: 0x000a, 0x1b7b: 0x000a, + 0x1b7c: 0x000a, 0x1b7d: 0x000a, 0x1b7e: 0x000a, 0x1b7f: 0x000a, + // Block 0x6e, offset 0x1b80 + 0x1b80: 0x0009, 0x1b81: 0x000a, 0x1b82: 0x000a, 0x1b83: 0x000a, 0x1b84: 0x000a, + 0x1b88: 0x003a, 0x1b89: 0x002a, 0x1b8a: 0x003a, 0x1b8b: 0x002a, + 0x1b8c: 0x003a, 0x1b8d: 0x002a, 0x1b8e: 0x003a, 0x1b8f: 0x002a, 0x1b90: 0x003a, 0x1b91: 0x002a, + 0x1b92: 0x000a, 0x1b93: 0x000a, 0x1b94: 0x003a, 0x1b95: 0x002a, 0x1b96: 0x003a, 0x1b97: 0x002a, + 0x1b98: 0x003a, 0x1b99: 0x002a, 0x1b9a: 0x003a, 0x1b9b: 0x002a, 0x1b9c: 0x000a, 0x1b9d: 0x000a, + 0x1b9e: 0x000a, 0x1b9f: 0x000a, 0x1ba0: 0x000a, + 0x1baa: 0x000c, 0x1bab: 0x000c, 0x1bac: 0x000c, 0x1bad: 0x000c, + 0x1bb0: 0x000a, + 0x1bb6: 0x000a, 0x1bb7: 0x000a, + 0x1bbd: 0x000a, 0x1bbe: 0x000a, 0x1bbf: 0x000a, + // Block 0x6f, offset 0x1bc0 + 0x1bd9: 0x000c, 0x1bda: 0x000c, 0x1bdb: 0x000a, 0x1bdc: 0x000a, + 0x1be0: 0x000a, + // Block 0x70, offset 0x1c00 + 0x1c3b: 0x000a, + // Block 0x71, offset 0x1c40 + 0x1c40: 0x000a, 0x1c41: 0x000a, 0x1c42: 0x000a, 0x1c43: 0x000a, 0x1c44: 0x000a, 0x1c45: 0x000a, + 0x1c46: 0x000a, 0x1c47: 0x000a, 0x1c48: 0x000a, 0x1c49: 0x000a, 0x1c4a: 0x000a, 0x1c4b: 0x000a, + 0x1c4c: 0x000a, 0x1c4d: 0x000a, 0x1c4e: 0x000a, 0x1c4f: 0x000a, 0x1c50: 0x000a, 0x1c51: 0x000a, + 0x1c52: 0x000a, 0x1c53: 0x000a, 0x1c54: 0x000a, 0x1c55: 0x000a, 0x1c56: 0x000a, 0x1c57: 0x000a, + 0x1c58: 0x000a, 0x1c59: 0x000a, 0x1c5a: 0x000a, 0x1c5b: 0x000a, 0x1c5c: 0x000a, 0x1c5d: 0x000a, + 0x1c5e: 0x000a, 0x1c5f: 0x000a, 0x1c60: 0x000a, 0x1c61: 0x000a, 0x1c62: 0x000a, 0x1c63: 0x000a, + 0x1c64: 0x000a, 0x1c65: 0x000a, + 0x1c6f: 0x000a, + // Block 0x72, offset 0x1c80 + 0x1c9d: 0x000a, + 0x1c9e: 0x000a, + // Block 0x73, offset 0x1cc0 + 0x1cd0: 0x000a, 0x1cd1: 0x000a, + 0x1cd2: 0x000a, 0x1cd3: 0x000a, 0x1cd4: 0x000a, 0x1cd5: 0x000a, 0x1cd6: 0x000a, 0x1cd7: 0x000a, + 0x1cd8: 0x000a, 0x1cd9: 0x000a, 0x1cda: 0x000a, 0x1cdb: 0x000a, 0x1cdc: 0x000a, 0x1cdd: 0x000a, + 0x1cde: 0x000a, 0x1cdf: 0x000a, + 0x1cfc: 0x000a, 0x1cfd: 0x000a, 0x1cfe: 0x000a, + // Block 0x74, offset 0x1d00 + 0x1d31: 0x000a, 0x1d32: 0x000a, 0x1d33: 0x000a, 0x1d34: 0x000a, 0x1d35: 0x000a, + 0x1d36: 0x000a, 0x1d37: 0x000a, 0x1d38: 0x000a, 0x1d39: 0x000a, 0x1d3a: 0x000a, 0x1d3b: 0x000a, + 0x1d3c: 0x000a, 0x1d3d: 0x000a, 0x1d3e: 0x000a, 0x1d3f: 0x000a, + // Block 0x75, offset 0x1d40 + 0x1d4c: 0x000a, 0x1d4d: 0x000a, 0x1d4e: 0x000a, 0x1d4f: 0x000a, + // Block 0x76, offset 0x1d80 + 0x1db7: 0x000a, 0x1db8: 0x000a, 0x1db9: 0x000a, 0x1dba: 0x000a, + // Block 0x77, offset 0x1dc0 + 0x1dde: 0x000a, 0x1ddf: 0x000a, + 0x1dff: 0x000a, + // Block 0x78, offset 0x1e00 + 0x1e10: 0x000a, 0x1e11: 0x000a, + 0x1e12: 0x000a, 0x1e13: 0x000a, 0x1e14: 0x000a, 0x1e15: 0x000a, 0x1e16: 0x000a, 0x1e17: 0x000a, + 0x1e18: 0x000a, 0x1e19: 0x000a, 0x1e1a: 0x000a, 0x1e1b: 0x000a, 0x1e1c: 0x000a, 0x1e1d: 0x000a, + 0x1e1e: 0x000a, 0x1e1f: 0x000a, 0x1e20: 0x000a, 0x1e21: 0x000a, 0x1e22: 0x000a, 0x1e23: 0x000a, + 0x1e24: 0x000a, 0x1e25: 0x000a, 0x1e26: 0x000a, 0x1e27: 0x000a, 0x1e28: 0x000a, 0x1e29: 0x000a, + 0x1e2a: 0x000a, 0x1e2b: 0x000a, 0x1e2c: 0x000a, 0x1e2d: 0x000a, 0x1e2e: 0x000a, 0x1e2f: 0x000a, + 0x1e30: 0x000a, 0x1e31: 0x000a, 0x1e32: 0x000a, 0x1e33: 0x000a, 0x1e34: 0x000a, 0x1e35: 0x000a, + 0x1e36: 0x000a, 0x1e37: 0x000a, 0x1e38: 0x000a, 0x1e39: 0x000a, 0x1e3a: 0x000a, 0x1e3b: 0x000a, + 0x1e3c: 0x000a, 0x1e3d: 0x000a, 0x1e3e: 0x000a, 0x1e3f: 0x000a, + // Block 0x79, offset 0x1e40 + 0x1e40: 0x000a, 0x1e41: 0x000a, 0x1e42: 0x000a, 0x1e43: 0x000a, 0x1e44: 0x000a, 0x1e45: 0x000a, + 0x1e46: 0x000a, + // Block 0x7a, offset 0x1e80 + 0x1e8d: 0x000a, 0x1e8e: 0x000a, 0x1e8f: 0x000a, + // Block 0x7b, offset 0x1ec0 + 0x1eef: 0x000c, + 0x1ef0: 0x000c, 0x1ef1: 0x000c, 0x1ef2: 0x000c, 0x1ef3: 0x000a, 0x1ef4: 0x000c, 0x1ef5: 0x000c, + 0x1ef6: 0x000c, 0x1ef7: 0x000c, 0x1ef8: 0x000c, 0x1ef9: 0x000c, 0x1efa: 0x000c, 0x1efb: 0x000c, + 0x1efc: 0x000c, 0x1efd: 0x000c, 0x1efe: 0x000a, 0x1eff: 0x000a, + // Block 0x7c, offset 0x1f00 + 0x1f1e: 0x000c, 0x1f1f: 0x000c, + // Block 0x7d, offset 0x1f40 + 0x1f70: 0x000c, 0x1f71: 0x000c, + // Block 0x7e, offset 0x1f80 + 0x1f80: 0x000a, 0x1f81: 0x000a, 0x1f82: 0x000a, 0x1f83: 0x000a, 0x1f84: 0x000a, 0x1f85: 0x000a, + 0x1f86: 0x000a, 0x1f87: 0x000a, 0x1f88: 0x000a, 0x1f89: 0x000a, 0x1f8a: 0x000a, 0x1f8b: 0x000a, + 0x1f8c: 0x000a, 0x1f8d: 0x000a, 0x1f8e: 0x000a, 0x1f8f: 0x000a, 0x1f90: 0x000a, 0x1f91: 0x000a, + 0x1f92: 0x000a, 0x1f93: 0x000a, 0x1f94: 0x000a, 0x1f95: 0x000a, 0x1f96: 0x000a, 0x1f97: 0x000a, + 0x1f98: 0x000a, 0x1f99: 0x000a, 0x1f9a: 0x000a, 0x1f9b: 0x000a, 0x1f9c: 0x000a, 0x1f9d: 0x000a, + 0x1f9e: 0x000a, 0x1f9f: 0x000a, 0x1fa0: 0x000a, 0x1fa1: 0x000a, + // Block 0x7f, offset 0x1fc0 + 0x1fc8: 0x000a, + // Block 0x80, offset 0x2000 + 0x2002: 0x000c, + 0x2006: 0x000c, 0x200b: 0x000c, + 0x2025: 0x000c, 0x2026: 0x000c, 0x2028: 0x000a, 0x2029: 0x000a, + 0x202a: 0x000a, 0x202b: 0x000a, 0x202c: 0x000c, + 0x2038: 0x0004, 0x2039: 0x0004, + // Block 0x81, offset 0x2040 + 0x2074: 0x000a, 0x2075: 0x000a, + 0x2076: 0x000a, 0x2077: 0x000a, + // Block 0x82, offset 0x2080 + 0x2084: 0x000c, 0x2085: 0x000c, + 0x20a0: 0x000c, 0x20a1: 0x000c, 0x20a2: 0x000c, 0x20a3: 0x000c, + 0x20a4: 0x000c, 0x20a5: 0x000c, 0x20a6: 0x000c, 0x20a7: 0x000c, 0x20a8: 0x000c, 0x20a9: 0x000c, + 0x20aa: 0x000c, 0x20ab: 0x000c, 0x20ac: 0x000c, 0x20ad: 0x000c, 0x20ae: 0x000c, 0x20af: 0x000c, + 0x20b0: 0x000c, 0x20b1: 0x000c, + 0x20bf: 0x000c, + // Block 0x83, offset 0x20c0 + 0x20e6: 0x000c, 0x20e7: 0x000c, 0x20e8: 0x000c, 0x20e9: 0x000c, + 0x20ea: 0x000c, 0x20eb: 0x000c, 0x20ec: 0x000c, 0x20ed: 0x000c, + // Block 0x84, offset 0x2100 + 0x2107: 0x000c, 0x2108: 0x000c, 0x2109: 0x000c, 0x210a: 0x000c, 0x210b: 0x000c, + 0x210c: 0x000c, 0x210d: 0x000c, 0x210e: 0x000c, 0x210f: 0x000c, 0x2110: 0x000c, 0x2111: 0x000c, + // Block 0x85, offset 0x2140 + 0x2140: 0x000c, 0x2141: 0x000c, 0x2142: 0x000c, + 0x2173: 0x000c, + 0x2176: 0x000c, 0x2177: 0x000c, 0x2178: 0x000c, 0x2179: 0x000c, + 0x217c: 0x000c, 0x217d: 0x000c, + // Block 0x86, offset 0x2180 + 0x21a5: 0x000c, + // Block 0x87, offset 0x21c0 + 0x21e9: 0x000c, + 0x21ea: 0x000c, 0x21eb: 0x000c, 0x21ec: 0x000c, 0x21ed: 0x000c, 0x21ee: 0x000c, + 0x21f1: 0x000c, 0x21f2: 0x000c, 0x21f5: 0x000c, + 0x21f6: 0x000c, + // Block 0x88, offset 0x2200 + 0x2203: 0x000c, + 0x220c: 0x000c, + 0x223c: 0x000c, + // Block 0x89, offset 0x2240 + 0x2270: 0x000c, 0x2272: 0x000c, 0x2273: 0x000c, 0x2274: 0x000c, + 0x2277: 0x000c, 0x2278: 0x000c, + 0x227e: 0x000c, 0x227f: 0x000c, + // Block 0x8a, offset 0x2280 + 0x2281: 0x000c, + 0x22ac: 0x000c, 0x22ad: 0x000c, + 0x22b6: 0x000c, + // Block 0x8b, offset 0x22c0 + 0x22ea: 0x000a, 0x22eb: 0x000a, + // Block 0x8c, offset 0x2300 + 0x2325: 0x000c, 0x2328: 0x000c, + 0x232d: 0x000c, + // Block 0x8d, offset 0x2340 + 0x235d: 0x0001, + 0x235e: 0x000c, 0x235f: 0x0001, 0x2360: 0x0001, 0x2361: 0x0001, 0x2362: 0x0001, 0x2363: 0x0001, + 0x2364: 0x0001, 0x2365: 0x0001, 0x2366: 0x0001, 0x2367: 0x0001, 0x2368: 0x0001, 0x2369: 0x0003, + 0x236a: 0x0001, 0x236b: 0x0001, 0x236c: 0x0001, 0x236d: 0x0001, 0x236e: 0x0001, 0x236f: 0x0001, + 0x2370: 0x0001, 0x2371: 0x0001, 0x2372: 0x0001, 0x2373: 0x0001, 0x2374: 0x0001, 0x2375: 0x0001, + 0x2376: 0x0001, 0x2377: 0x0001, 0x2378: 0x0001, 0x2379: 0x0001, 0x237a: 0x0001, 0x237b: 0x0001, + 0x237c: 0x0001, 0x237d: 0x0001, 0x237e: 0x0001, 0x237f: 0x0001, + // Block 0x8e, offset 0x2380 + 0x2380: 0x0001, 0x2381: 0x0001, 0x2382: 0x0001, 0x2383: 0x0001, 0x2384: 0x0001, 0x2385: 0x0001, + 0x2386: 0x0001, 0x2387: 0x0001, 0x2388: 0x0001, 0x2389: 0x0001, 0x238a: 0x0001, 0x238b: 0x0001, + 0x238c: 0x0001, 0x238d: 0x0001, 0x238e: 0x0001, 0x238f: 0x0001, 0x2390: 0x000d, 0x2391: 0x000d, + 0x2392: 0x000d, 0x2393: 0x000d, 0x2394: 0x000d, 0x2395: 0x000d, 0x2396: 0x000d, 0x2397: 0x000d, + 0x2398: 0x000d, 0x2399: 0x000d, 0x239a: 0x000d, 0x239b: 0x000d, 0x239c: 0x000d, 0x239d: 0x000d, + 0x239e: 0x000d, 0x239f: 0x000d, 0x23a0: 0x000d, 0x23a1: 0x000d, 0x23a2: 0x000d, 0x23a3: 0x000d, + 0x23a4: 0x000d, 0x23a5: 0x000d, 0x23a6: 0x000d, 0x23a7: 0x000d, 0x23a8: 0x000d, 0x23a9: 0x000d, + 0x23aa: 0x000d, 0x23ab: 0x000d, 0x23ac: 0x000d, 0x23ad: 0x000d, 0x23ae: 0x000d, 0x23af: 0x000d, + 0x23b0: 0x000d, 0x23b1: 0x000d, 0x23b2: 0x000d, 0x23b3: 0x000d, 0x23b4: 0x000d, 0x23b5: 0x000d, + 0x23b6: 0x000d, 0x23b7: 0x000d, 0x23b8: 0x000d, 0x23b9: 0x000d, 0x23ba: 0x000d, 0x23bb: 0x000d, + 0x23bc: 0x000d, 0x23bd: 0x000d, 0x23be: 0x000d, 0x23bf: 0x000d, + // Block 0x8f, offset 0x23c0 + 0x23c0: 0x000d, 0x23c1: 0x000d, 0x23c2: 0x000d, 0x23c3: 0x000a, 0x23c4: 0x000a, 0x23c5: 0x000a, + 0x23c6: 0x000a, 0x23c7: 0x000a, 0x23c8: 0x000a, 0x23c9: 0x000a, 0x23ca: 0x000a, 0x23cb: 0x000a, + 0x23cc: 0x000a, 0x23cd: 0x000a, 0x23ce: 0x000a, 0x23cf: 0x000a, 0x23d0: 0x000a, 0x23d1: 0x000a, + 0x23d2: 0x000a, 0x23d3: 0x000d, 0x23d4: 0x000d, 0x23d5: 0x000d, 0x23d6: 0x000d, 0x23d7: 0x000d, + 0x23d8: 0x000d, 0x23d9: 0x000d, 0x23da: 0x000d, 0x23db: 0x000d, 0x23dc: 0x000d, 0x23dd: 0x000d, + 0x23de: 0x000d, 0x23df: 0x000d, 0x23e0: 0x000d, 0x23e1: 0x000d, 0x23e2: 0x000d, 0x23e3: 0x000d, + 0x23e4: 0x000d, 0x23e5: 0x000d, 0x23e6: 0x000d, 0x23e7: 0x000d, 0x23e8: 0x000d, 0x23e9: 0x000d, + 0x23ea: 0x000d, 0x23eb: 0x000d, 0x23ec: 0x000d, 0x23ed: 0x000d, 0x23ee: 0x000d, 0x23ef: 0x000d, + 0x23f0: 0x000d, 0x23f1: 0x000d, 0x23f2: 0x000d, 0x23f3: 0x000d, 0x23f4: 0x000d, 0x23f5: 0x000d, + 0x23f6: 0x000d, 0x23f7: 0x000d, 0x23f8: 0x000d, 0x23f9: 0x000d, 0x23fa: 0x000d, 0x23fb: 0x000d, + 0x23fc: 0x000d, 0x23fd: 0x000d, 0x23fe: 0x000d, 0x23ff: 0x000d, + // Block 0x90, offset 0x2400 + 0x2400: 0x000d, 0x2401: 0x000d, 0x2402: 0x000d, 0x2403: 0x000d, 0x2404: 0x000d, 0x2405: 0x000d, + 0x2406: 0x000d, 0x2407: 0x000d, 0x2408: 0x000d, 0x2409: 0x000d, 0x240a: 0x000d, 0x240b: 0x000d, + 0x240c: 0x000d, 0x240d: 0x000d, 0x240e: 0x000d, 0x240f: 0x000d, 0x2410: 0x000d, 0x2411: 0x000d, + 0x2412: 0x000d, 0x2413: 0x000d, 0x2414: 0x000d, 0x2415: 0x000d, 0x2416: 0x000d, 0x2417: 0x000d, + 0x2418: 0x000d, 0x2419: 0x000d, 0x241a: 0x000d, 0x241b: 0x000d, 0x241c: 0x000d, 0x241d: 0x000d, + 0x241e: 0x000d, 0x241f: 0x000d, 0x2420: 0x000d, 0x2421: 0x000d, 0x2422: 0x000d, 0x2423: 0x000d, + 0x2424: 0x000d, 0x2425: 0x000d, 0x2426: 0x000d, 0x2427: 0x000d, 0x2428: 0x000d, 0x2429: 0x000d, + 0x242a: 0x000d, 0x242b: 0x000d, 0x242c: 0x000d, 0x242d: 0x000d, 0x242e: 0x000d, 0x242f: 0x000d, + 0x2430: 0x000d, 0x2431: 0x000d, 0x2432: 0x000d, 0x2433: 0x000d, 0x2434: 0x000d, 0x2435: 0x000d, + 0x2436: 0x000d, 0x2437: 0x000d, 0x2438: 0x000d, 0x2439: 0x000d, 0x243a: 0x000d, 0x243b: 0x000d, + 0x243c: 0x000d, 0x243d: 0x000d, 0x243e: 0x000a, 0x243f: 0x000a, + // Block 0x91, offset 0x2440 + 0x2440: 0x000a, 0x2441: 0x000a, 0x2442: 0x000a, 0x2443: 0x000a, 0x2444: 0x000a, 0x2445: 0x000a, + 0x2446: 0x000a, 0x2447: 0x000a, 0x2448: 0x000a, 0x2449: 0x000a, 0x244a: 0x000a, 0x244b: 0x000a, + 0x244c: 0x000a, 0x244d: 0x000a, 0x244e: 0x000a, 0x244f: 0x000a, 0x2450: 0x000d, 0x2451: 0x000d, + 0x2452: 0x000d, 0x2453: 0x000d, 0x2454: 0x000d, 0x2455: 0x000d, 0x2456: 0x000d, 0x2457: 0x000d, + 0x2458: 0x000d, 0x2459: 0x000d, 0x245a: 0x000d, 0x245b: 0x000d, 0x245c: 0x000d, 0x245d: 0x000d, + 0x245e: 0x000d, 0x245f: 0x000d, 0x2460: 0x000d, 0x2461: 0x000d, 0x2462: 0x000d, 0x2463: 0x000d, + 0x2464: 0x000d, 0x2465: 0x000d, 0x2466: 0x000d, 0x2467: 0x000d, 0x2468: 0x000d, 0x2469: 0x000d, + 0x246a: 0x000d, 0x246b: 0x000d, 0x246c: 0x000d, 0x246d: 0x000d, 0x246e: 0x000d, 0x246f: 0x000d, + 0x2470: 0x000d, 0x2471: 0x000d, 0x2472: 0x000d, 0x2473: 0x000d, 0x2474: 0x000d, 0x2475: 0x000d, + 0x2476: 0x000d, 0x2477: 0x000d, 0x2478: 0x000d, 0x2479: 0x000d, 0x247a: 0x000d, 0x247b: 0x000d, + 0x247c: 0x000d, 0x247d: 0x000d, 0x247e: 0x000d, 0x247f: 0x000d, + // Block 0x92, offset 0x2480 + 0x2480: 0x000d, 0x2481: 0x000d, 0x2482: 0x000d, 0x2483: 0x000d, 0x2484: 0x000d, 0x2485: 0x000d, + 0x2486: 0x000d, 0x2487: 0x000d, 0x2488: 0x000d, 0x2489: 0x000d, 0x248a: 0x000d, 0x248b: 0x000d, + 0x248c: 0x000d, 0x248d: 0x000d, 0x248e: 0x000d, 0x248f: 0x000d, 0x2490: 0x000a, 0x2491: 0x000a, + 0x2492: 0x000d, 0x2493: 0x000d, 0x2494: 0x000d, 0x2495: 0x000d, 0x2496: 0x000d, 0x2497: 0x000d, + 0x2498: 0x000d, 0x2499: 0x000d, 0x249a: 0x000d, 0x249b: 0x000d, 0x249c: 0x000d, 0x249d: 0x000d, + 0x249e: 0x000d, 0x249f: 0x000d, 0x24a0: 0x000d, 0x24a1: 0x000d, 0x24a2: 0x000d, 0x24a3: 0x000d, + 0x24a4: 0x000d, 0x24a5: 0x000d, 0x24a6: 0x000d, 0x24a7: 0x000d, 0x24a8: 0x000d, 0x24a9: 0x000d, + 0x24aa: 0x000d, 0x24ab: 0x000d, 0x24ac: 0x000d, 0x24ad: 0x000d, 0x24ae: 0x000d, 0x24af: 0x000d, + 0x24b0: 0x000d, 0x24b1: 0x000d, 0x24b2: 0x000d, 0x24b3: 0x000d, 0x24b4: 0x000d, 0x24b5: 0x000d, + 0x24b6: 0x000d, 0x24b7: 0x000d, 0x24b8: 0x000d, 0x24b9: 0x000d, 0x24ba: 0x000d, 0x24bb: 0x000d, + 0x24bc: 0x000d, 0x24bd: 0x000d, 0x24be: 0x000d, 0x24bf: 0x000d, + // Block 0x93, offset 0x24c0 + 0x24c0: 0x000d, 0x24c1: 0x000d, 0x24c2: 0x000d, 0x24c3: 0x000d, 0x24c4: 0x000d, 0x24c5: 0x000d, + 0x24c6: 0x000d, 0x24c7: 0x000d, 0x24c8: 0x000a, 0x24c9: 0x000a, 0x24ca: 0x000a, 0x24cb: 0x000a, + 0x24cc: 0x000a, 0x24cd: 0x000a, 0x24ce: 0x000a, 0x24cf: 0x000a, 0x24d0: 0x000b, 0x24d1: 0x000b, + 0x24d2: 0x000b, 0x24d3: 0x000b, 0x24d4: 0x000b, 0x24d5: 0x000b, 0x24d6: 0x000b, 0x24d7: 0x000b, + 0x24d8: 0x000b, 0x24d9: 0x000b, 0x24da: 0x000b, 0x24db: 0x000b, 0x24dc: 0x000b, 0x24dd: 0x000b, + 0x24de: 0x000b, 0x24df: 0x000b, 0x24e0: 0x000b, 0x24e1: 0x000b, 0x24e2: 0x000b, 0x24e3: 0x000b, + 0x24e4: 0x000b, 0x24e5: 0x000b, 0x24e6: 0x000b, 0x24e7: 0x000b, 0x24e8: 0x000b, 0x24e9: 0x000b, + 0x24ea: 0x000b, 0x24eb: 0x000b, 0x24ec: 0x000b, 0x24ed: 0x000b, 0x24ee: 0x000b, 0x24ef: 0x000b, + 0x24f0: 0x000d, 0x24f1: 0x000d, 0x24f2: 0x000d, 0x24f3: 0x000d, 0x24f4: 0x000d, 0x24f5: 0x000d, + 0x24f6: 0x000d, 0x24f7: 0x000d, 0x24f8: 0x000d, 0x24f9: 0x000d, 0x24fa: 0x000d, 0x24fb: 0x000d, + 0x24fc: 0x000d, 0x24fd: 0x000a, 0x24fe: 0x000a, 0x24ff: 0x000a, + // Block 0x94, offset 0x2500 + 0x2500: 0x000c, 0x2501: 0x000c, 0x2502: 0x000c, 0x2503: 0x000c, 0x2504: 0x000c, 0x2505: 0x000c, + 0x2506: 0x000c, 0x2507: 0x000c, 0x2508: 0x000c, 0x2509: 0x000c, 0x250a: 0x000c, 0x250b: 0x000c, + 0x250c: 0x000c, 0x250d: 0x000c, 0x250e: 0x000c, 0x250f: 0x000c, 0x2510: 0x000a, 0x2511: 0x000a, + 0x2512: 0x000a, 0x2513: 0x000a, 0x2514: 0x000a, 0x2515: 0x000a, 0x2516: 0x000a, 0x2517: 0x000a, + 0x2518: 0x000a, 0x2519: 0x000a, + 0x2520: 0x000c, 0x2521: 0x000c, 0x2522: 0x000c, 0x2523: 0x000c, + 0x2524: 0x000c, 0x2525: 0x000c, 0x2526: 0x000c, 0x2527: 0x000c, 0x2528: 0x000c, 0x2529: 0x000c, + 0x252a: 0x000c, 0x252b: 0x000c, 0x252c: 0x000c, 0x252d: 0x000c, 0x252e: 0x000c, 0x252f: 0x000c, + 0x2530: 0x000a, 0x2531: 0x000a, 0x2532: 0x000a, 0x2533: 0x000a, 0x2534: 0x000a, 0x2535: 0x000a, + 0x2536: 0x000a, 0x2537: 0x000a, 0x2538: 0x000a, 0x2539: 0x000a, 0x253a: 0x000a, 0x253b: 0x000a, + 0x253c: 0x000a, 0x253d: 0x000a, 0x253e: 0x000a, 0x253f: 0x000a, + // Block 0x95, offset 0x2540 + 0x2540: 0x000a, 0x2541: 0x000a, 0x2542: 0x000a, 0x2543: 0x000a, 0x2544: 0x000a, 0x2545: 0x000a, + 0x2546: 0x000a, 0x2547: 0x000a, 0x2548: 0x000a, 0x2549: 0x000a, 0x254a: 0x000a, 0x254b: 0x000a, + 0x254c: 0x000a, 0x254d: 0x000a, 0x254e: 0x000a, 0x254f: 0x000a, 0x2550: 0x0006, 0x2551: 0x000a, + 0x2552: 0x0006, 0x2554: 0x000a, 0x2555: 0x0006, 0x2556: 0x000a, 0x2557: 0x000a, + 0x2558: 0x000a, 0x2559: 0x009a, 0x255a: 0x008a, 0x255b: 0x007a, 0x255c: 0x006a, 0x255d: 0x009a, + 0x255e: 0x008a, 0x255f: 0x0004, 0x2560: 0x000a, 0x2561: 0x000a, 0x2562: 0x0003, 0x2563: 0x0003, + 0x2564: 0x000a, 0x2565: 0x000a, 0x2566: 0x000a, 0x2568: 0x000a, 0x2569: 0x0004, + 0x256a: 0x0004, 0x256b: 0x000a, + 0x2570: 0x000d, 0x2571: 0x000d, 0x2572: 0x000d, 0x2573: 0x000d, 0x2574: 0x000d, 0x2575: 0x000d, + 0x2576: 0x000d, 0x2577: 0x000d, 0x2578: 0x000d, 0x2579: 0x000d, 0x257a: 0x000d, 0x257b: 0x000d, + 0x257c: 0x000d, 0x257d: 0x000d, 0x257e: 0x000d, 0x257f: 0x000d, + // Block 0x96, offset 0x2580 + 0x2580: 0x000d, 0x2581: 0x000d, 0x2582: 0x000d, 0x2583: 0x000d, 0x2584: 0x000d, 0x2585: 0x000d, + 0x2586: 0x000d, 0x2587: 0x000d, 0x2588: 0x000d, 0x2589: 0x000d, 0x258a: 0x000d, 0x258b: 0x000d, + 0x258c: 0x000d, 0x258d: 0x000d, 0x258e: 0x000d, 0x258f: 0x000d, 0x2590: 0x000d, 0x2591: 0x000d, + 0x2592: 0x000d, 0x2593: 0x000d, 0x2594: 0x000d, 0x2595: 0x000d, 0x2596: 0x000d, 0x2597: 0x000d, + 0x2598: 0x000d, 0x2599: 0x000d, 0x259a: 0x000d, 0x259b: 0x000d, 0x259c: 0x000d, 0x259d: 0x000d, + 0x259e: 0x000d, 0x259f: 0x000d, 0x25a0: 0x000d, 0x25a1: 0x000d, 0x25a2: 0x000d, 0x25a3: 0x000d, + 0x25a4: 0x000d, 0x25a5: 0x000d, 0x25a6: 0x000d, 0x25a7: 0x000d, 0x25a8: 0x000d, 0x25a9: 0x000d, + 0x25aa: 0x000d, 0x25ab: 0x000d, 0x25ac: 0x000d, 0x25ad: 0x000d, 0x25ae: 0x000d, 0x25af: 0x000d, + 0x25b0: 0x000d, 0x25b1: 0x000d, 0x25b2: 0x000d, 0x25b3: 0x000d, 0x25b4: 0x000d, 0x25b5: 0x000d, + 0x25b6: 0x000d, 0x25b7: 0x000d, 0x25b8: 0x000d, 0x25b9: 0x000d, 0x25ba: 0x000d, 0x25bb: 0x000d, + 0x25bc: 0x000d, 0x25bd: 0x000d, 0x25be: 0x000d, 0x25bf: 0x000b, + // Block 0x97, offset 0x25c0 + 0x25c1: 0x000a, 0x25c2: 0x000a, 0x25c3: 0x0004, 0x25c4: 0x0004, 0x25c5: 0x0004, + 0x25c6: 0x000a, 0x25c7: 0x000a, 0x25c8: 0x003a, 0x25c9: 0x002a, 0x25ca: 0x000a, 0x25cb: 0x0003, + 0x25cc: 0x0006, 0x25cd: 0x0003, 0x25ce: 0x0006, 0x25cf: 0x0006, 0x25d0: 0x0002, 0x25d1: 0x0002, + 0x25d2: 0x0002, 0x25d3: 0x0002, 0x25d4: 0x0002, 0x25d5: 0x0002, 0x25d6: 0x0002, 0x25d7: 0x0002, + 0x25d8: 0x0002, 0x25d9: 0x0002, 0x25da: 0x0006, 0x25db: 0x000a, 0x25dc: 0x000a, 0x25dd: 0x000a, + 0x25de: 0x000a, 0x25df: 0x000a, 0x25e0: 0x000a, + 0x25fb: 0x005a, + 0x25fc: 0x000a, 0x25fd: 0x004a, 0x25fe: 0x000a, 0x25ff: 0x000a, + // Block 0x98, offset 0x2600 + 0x2600: 0x000a, + 0x261b: 0x005a, 0x261c: 0x000a, 0x261d: 0x004a, + 0x261e: 0x000a, 0x261f: 0x00fa, 0x2620: 0x00ea, 0x2621: 0x000a, 0x2622: 0x003a, 0x2623: 0x002a, + 0x2624: 0x000a, 0x2625: 0x000a, + // Block 0x99, offset 0x2640 + 0x2660: 0x0004, 0x2661: 0x0004, 0x2662: 0x000a, 0x2663: 0x000a, + 0x2664: 0x000a, 0x2665: 0x0004, 0x2666: 0x0004, 0x2668: 0x000a, 0x2669: 0x000a, + 0x266a: 0x000a, 0x266b: 0x000a, 0x266c: 0x000a, 0x266d: 0x000a, 0x266e: 0x000a, + 0x2670: 0x000b, 0x2671: 0x000b, 0x2672: 0x000b, 0x2673: 0x000b, 0x2674: 0x000b, 0x2675: 0x000b, + 0x2676: 0x000b, 0x2677: 0x000b, 0x2678: 0x000b, 0x2679: 0x000a, 0x267a: 0x000a, 0x267b: 0x000a, + 0x267c: 0x000a, 0x267d: 0x000a, 0x267e: 0x000b, 0x267f: 0x000b, + // Block 0x9a, offset 0x2680 + 0x2681: 0x000a, + // Block 0x9b, offset 0x26c0 + 0x26c0: 0x000a, 0x26c1: 0x000a, 0x26c2: 0x000a, 0x26c3: 0x000a, 0x26c4: 0x000a, 0x26c5: 0x000a, + 0x26c6: 0x000a, 0x26c7: 0x000a, 0x26c8: 0x000a, 0x26c9: 0x000a, 0x26ca: 0x000a, 0x26cb: 0x000a, + 0x26cc: 0x000a, 0x26d0: 0x000a, 0x26d1: 0x000a, + 0x26d2: 0x000a, 0x26d3: 0x000a, 0x26d4: 0x000a, 0x26d5: 0x000a, 0x26d6: 0x000a, 0x26d7: 0x000a, + 0x26d8: 0x000a, 0x26d9: 0x000a, 0x26da: 0x000a, 0x26db: 0x000a, 0x26dc: 0x000a, + 0x26e0: 0x000a, + // Block 0x9c, offset 0x2700 + 0x273d: 0x000c, + // Block 0x9d, offset 0x2740 + 0x2760: 0x000c, 0x2761: 0x0002, 0x2762: 0x0002, 0x2763: 0x0002, + 0x2764: 0x0002, 0x2765: 0x0002, 0x2766: 0x0002, 0x2767: 0x0002, 0x2768: 0x0002, 0x2769: 0x0002, + 0x276a: 0x0002, 0x276b: 0x0002, 0x276c: 0x0002, 0x276d: 0x0002, 0x276e: 0x0002, 0x276f: 0x0002, + 0x2770: 0x0002, 0x2771: 0x0002, 0x2772: 0x0002, 0x2773: 0x0002, 0x2774: 0x0002, 0x2775: 0x0002, + 0x2776: 0x0002, 0x2777: 0x0002, 0x2778: 0x0002, 0x2779: 0x0002, 0x277a: 0x0002, 0x277b: 0x0002, + // Block 0x9e, offset 0x2780 + 0x27b6: 0x000c, 0x27b7: 0x000c, 0x27b8: 0x000c, 0x27b9: 0x000c, 0x27ba: 0x000c, + // Block 0x9f, offset 0x27c0 + 0x27c0: 0x0001, 0x27c1: 0x0001, 0x27c2: 0x0001, 0x27c3: 0x0001, 0x27c4: 0x0001, 0x27c5: 0x0001, + 0x27c6: 0x0001, 0x27c7: 0x0001, 0x27c8: 0x0001, 0x27c9: 0x0001, 0x27ca: 0x0001, 0x27cb: 0x0001, + 0x27cc: 0x0001, 0x27cd: 0x0001, 0x27ce: 0x0001, 0x27cf: 0x0001, 0x27d0: 0x0001, 0x27d1: 0x0001, + 0x27d2: 0x0001, 0x27d3: 0x0001, 0x27d4: 0x0001, 0x27d5: 0x0001, 0x27d6: 0x0001, 0x27d7: 0x0001, + 0x27d8: 0x0001, 0x27d9: 0x0001, 0x27da: 0x0001, 0x27db: 0x0001, 0x27dc: 0x0001, 0x27dd: 0x0001, + 0x27de: 0x0001, 0x27df: 0x0001, 0x27e0: 0x0001, 0x27e1: 0x0001, 0x27e2: 0x0001, 0x27e3: 0x0001, + 0x27e4: 0x0001, 0x27e5: 0x0001, 0x27e6: 0x0001, 0x27e7: 0x0001, 0x27e8: 0x0001, 0x27e9: 0x0001, + 0x27ea: 0x0001, 0x27eb: 0x0001, 0x27ec: 0x0001, 0x27ed: 0x0001, 0x27ee: 0x0001, 0x27ef: 0x0001, + 0x27f0: 0x0001, 0x27f1: 0x0001, 0x27f2: 0x0001, 0x27f3: 0x0001, 0x27f4: 0x0001, 0x27f5: 0x0001, + 0x27f6: 0x0001, 0x27f7: 0x0001, 0x27f8: 0x0001, 0x27f9: 0x0001, 0x27fa: 0x0001, 0x27fb: 0x0001, + 0x27fc: 0x0001, 0x27fd: 0x0001, 0x27fe: 0x0001, 0x27ff: 0x0001, + // Block 0xa0, offset 0x2800 + 0x2800: 0x0001, 0x2801: 0x0001, 0x2802: 0x0001, 0x2803: 0x0001, 0x2804: 0x0001, 0x2805: 0x0001, + 0x2806: 0x0001, 0x2807: 0x0001, 0x2808: 0x0001, 0x2809: 0x0001, 0x280a: 0x0001, 0x280b: 0x0001, + 0x280c: 0x0001, 0x280d: 0x0001, 0x280e: 0x0001, 0x280f: 0x0001, 0x2810: 0x0001, 0x2811: 0x0001, + 0x2812: 0x0001, 0x2813: 0x0001, 0x2814: 0x0001, 0x2815: 0x0001, 0x2816: 0x0001, 0x2817: 0x0001, + 0x2818: 0x0001, 0x2819: 0x0001, 0x281a: 0x0001, 0x281b: 0x0001, 0x281c: 0x0001, 0x281d: 0x0001, + 0x281e: 0x0001, 0x281f: 0x000a, 0x2820: 0x0001, 0x2821: 0x0001, 0x2822: 0x0001, 0x2823: 0x0001, + 0x2824: 0x0001, 0x2825: 0x0001, 0x2826: 0x0001, 0x2827: 0x0001, 0x2828: 0x0001, 0x2829: 0x0001, + 0x282a: 0x0001, 0x282b: 0x0001, 0x282c: 0x0001, 0x282d: 0x0001, 0x282e: 0x0001, 0x282f: 0x0001, + 0x2830: 0x0001, 0x2831: 0x0001, 0x2832: 0x0001, 0x2833: 0x0001, 0x2834: 0x0001, 0x2835: 0x0001, + 0x2836: 0x0001, 0x2837: 0x0001, 0x2838: 0x0001, 0x2839: 0x0001, 0x283a: 0x0001, 0x283b: 0x0001, + 0x283c: 0x0001, 0x283d: 0x0001, 0x283e: 0x0001, 0x283f: 0x0001, + // Block 0xa1, offset 0x2840 + 0x2840: 0x0001, 0x2841: 0x000c, 0x2842: 0x000c, 0x2843: 0x000c, 0x2844: 0x0001, 0x2845: 0x000c, + 0x2846: 0x000c, 0x2847: 0x0001, 0x2848: 0x0001, 0x2849: 0x0001, 0x284a: 0x0001, 0x284b: 0x0001, + 0x284c: 0x000c, 0x284d: 0x000c, 0x284e: 0x000c, 0x284f: 0x000c, 0x2850: 0x0001, 0x2851: 0x0001, + 0x2852: 0x0001, 0x2853: 0x0001, 0x2854: 0x0001, 0x2855: 0x0001, 0x2856: 0x0001, 0x2857: 0x0001, + 0x2858: 0x0001, 0x2859: 0x0001, 0x285a: 0x0001, 0x285b: 0x0001, 0x285c: 0x0001, 0x285d: 0x0001, + 0x285e: 0x0001, 0x285f: 0x0001, 0x2860: 0x0001, 0x2861: 0x0001, 0x2862: 0x0001, 0x2863: 0x0001, + 0x2864: 0x0001, 0x2865: 0x0001, 0x2866: 0x0001, 0x2867: 0x0001, 0x2868: 0x0001, 0x2869: 0x0001, + 0x286a: 0x0001, 0x286b: 0x0001, 0x286c: 0x0001, 0x286d: 0x0001, 0x286e: 0x0001, 0x286f: 0x0001, + 0x2870: 0x0001, 0x2871: 0x0001, 0x2872: 0x0001, 0x2873: 0x0001, 0x2874: 0x0001, 0x2875: 0x0001, + 0x2876: 0x0001, 0x2877: 0x0001, 0x2878: 0x000c, 0x2879: 0x000c, 0x287a: 0x000c, 0x287b: 0x0001, + 0x287c: 0x0001, 0x287d: 0x0001, 0x287e: 0x0001, 0x287f: 0x000c, + // Block 0xa2, offset 0x2880 + 0x2880: 0x0001, 0x2881: 0x0001, 0x2882: 0x0001, 0x2883: 0x0001, 0x2884: 0x0001, 0x2885: 0x0001, + 0x2886: 0x0001, 0x2887: 0x0001, 0x2888: 0x0001, 0x2889: 0x0001, 0x288a: 0x0001, 0x288b: 0x0001, + 0x288c: 0x0001, 0x288d: 0x0001, 0x288e: 0x0001, 0x288f: 0x0001, 0x2890: 0x0001, 0x2891: 0x0001, + 0x2892: 0x0001, 0x2893: 0x0001, 0x2894: 0x0001, 0x2895: 0x0001, 0x2896: 0x0001, 0x2897: 0x0001, + 0x2898: 0x0001, 0x2899: 0x0001, 0x289a: 0x0001, 0x289b: 0x0001, 0x289c: 0x0001, 0x289d: 0x0001, + 0x289e: 0x0001, 0x289f: 0x0001, 0x28a0: 0x0001, 0x28a1: 0x0001, 0x28a2: 0x0001, 0x28a3: 0x0001, + 0x28a4: 0x0001, 0x28a5: 0x000c, 0x28a6: 0x000c, 0x28a7: 0x0001, 0x28a8: 0x0001, 0x28a9: 0x0001, + 0x28aa: 0x0001, 0x28ab: 0x0001, 0x28ac: 0x0001, 0x28ad: 0x0001, 0x28ae: 0x0001, 0x28af: 0x0001, + 0x28b0: 0x0001, 0x28b1: 0x0001, 0x28b2: 0x0001, 0x28b3: 0x0001, 0x28b4: 0x0001, 0x28b5: 0x0001, + 0x28b6: 0x0001, 0x28b7: 0x0001, 0x28b8: 0x0001, 0x28b9: 0x0001, 0x28ba: 0x0001, 0x28bb: 0x0001, + 0x28bc: 0x0001, 0x28bd: 0x0001, 0x28be: 0x0001, 0x28bf: 0x0001, + // Block 0xa3, offset 0x28c0 + 0x28c0: 0x0001, 0x28c1: 0x0001, 0x28c2: 0x0001, 0x28c3: 0x0001, 0x28c4: 0x0001, 0x28c5: 0x0001, + 0x28c6: 0x0001, 0x28c7: 0x0001, 0x28c8: 0x0001, 0x28c9: 0x0001, 0x28ca: 0x0001, 0x28cb: 0x0001, + 0x28cc: 0x0001, 0x28cd: 0x0001, 0x28ce: 0x0001, 0x28cf: 0x0001, 0x28d0: 0x0001, 0x28d1: 0x0001, + 0x28d2: 0x0001, 0x28d3: 0x0001, 0x28d4: 0x0001, 0x28d5: 0x0001, 0x28d6: 0x0001, 0x28d7: 0x0001, + 0x28d8: 0x0001, 0x28d9: 0x0001, 0x28da: 0x0001, 0x28db: 0x0001, 0x28dc: 0x0001, 0x28dd: 0x0001, + 0x28de: 0x0001, 0x28df: 0x0001, 0x28e0: 0x0001, 0x28e1: 0x0001, 0x28e2: 0x0001, 0x28e3: 0x0001, + 0x28e4: 0x0001, 0x28e5: 0x0001, 0x28e6: 0x0001, 0x28e7: 0x0001, 0x28e8: 0x0001, 0x28e9: 0x0001, + 0x28ea: 0x0001, 0x28eb: 0x0001, 0x28ec: 0x0001, 0x28ed: 0x0001, 0x28ee: 0x0001, 0x28ef: 0x0001, + 0x28f0: 0x0001, 0x28f1: 0x0001, 0x28f2: 0x0001, 0x28f3: 0x0001, 0x28f4: 0x0001, 0x28f5: 0x0001, + 0x28f6: 0x0001, 0x28f7: 0x0001, 0x28f8: 0x0001, 0x28f9: 0x000a, 0x28fa: 0x000a, 0x28fb: 0x000a, + 0x28fc: 0x000a, 0x28fd: 0x000a, 0x28fe: 0x000a, 0x28ff: 0x000a, + // Block 0xa4, offset 0x2900 + 0x2900: 0x000d, 0x2901: 0x000d, 0x2902: 0x000d, 0x2903: 0x000d, 0x2904: 0x000d, 0x2905: 0x000d, + 0x2906: 0x000d, 0x2907: 0x000d, 0x2908: 0x000d, 0x2909: 0x000d, 0x290a: 0x000d, 0x290b: 0x000d, + 0x290c: 0x000d, 0x290d: 0x000d, 0x290e: 0x000d, 0x290f: 0x000d, 0x2910: 0x000d, 0x2911: 0x000d, + 0x2912: 0x000d, 0x2913: 0x000d, 0x2914: 0x000d, 0x2915: 0x000d, 0x2916: 0x000d, 0x2917: 0x000d, + 0x2918: 0x000d, 0x2919: 0x000d, 0x291a: 0x000d, 0x291b: 0x000d, 0x291c: 0x000d, 0x291d: 0x000d, + 0x291e: 0x000d, 0x291f: 0x000d, 0x2920: 0x000d, 0x2921: 0x000d, 0x2922: 0x000d, 0x2923: 0x000d, + 0x2924: 0x000c, 0x2925: 0x000c, 0x2926: 0x000c, 0x2927: 0x000c, 0x2928: 0x0001, 0x2929: 0x0001, + 0x292a: 0x0001, 0x292b: 0x0001, 0x292c: 0x0001, 0x292d: 0x0001, 0x292e: 0x0001, 0x292f: 0x0001, + 0x2930: 0x0005, 0x2931: 0x0005, 0x2932: 0x0005, 0x2933: 0x0005, 0x2934: 0x0005, 0x2935: 0x0005, + 0x2936: 0x0005, 0x2937: 0x0005, 0x2938: 0x0005, 0x2939: 0x0005, 0x293a: 0x0001, 0x293b: 0x0001, + 0x293c: 0x0001, 0x293d: 0x0001, 0x293e: 0x0001, 0x293f: 0x0001, + // Block 0xa5, offset 0x2940 + 0x2940: 0x0005, 0x2941: 0x0005, 0x2942: 0x0005, 0x2943: 0x0005, 0x2944: 0x0005, 0x2945: 0x0005, + 0x2946: 0x0005, 0x2947: 0x0005, 0x2948: 0x0005, 0x2949: 0x0005, 0x294a: 0x0001, 0x294b: 0x0001, + 0x294c: 0x0001, 0x294d: 0x0001, 0x294e: 0x0001, 0x294f: 0x0001, 0x2950: 0x0001, 0x2951: 0x0001, + 0x2952: 0x0001, 0x2953: 0x0001, 0x2954: 0x0001, 0x2955: 0x0001, 0x2956: 0x0001, 0x2957: 0x0001, + 0x2958: 0x0001, 0x2959: 0x0001, 0x295a: 0x0001, 0x295b: 0x0001, 0x295c: 0x0001, 0x295d: 0x0001, + 0x295e: 0x0001, 0x295f: 0x0001, 0x2960: 0x0001, 0x2961: 0x0001, 0x2962: 0x0001, 0x2963: 0x0001, + 0x2964: 0x0001, 0x2965: 0x0001, 0x2966: 0x0001, 0x2967: 0x0001, 0x2968: 0x0001, 0x2969: 0x000c, + 0x296a: 0x000c, 0x296b: 0x000c, 0x296c: 0x000c, 0x296d: 0x000c, 0x296e: 0x000a, 0x296f: 0x0001, + 0x2970: 0x0001, 0x2971: 0x0001, 0x2972: 0x0001, 0x2973: 0x0001, 0x2974: 0x0001, 0x2975: 0x0001, + 0x2976: 0x0001, 0x2977: 0x0001, 0x2978: 0x0001, 0x2979: 0x0001, 0x297a: 0x0001, 0x297b: 0x0001, + 0x297c: 0x0001, 0x297d: 0x0001, 0x297e: 0x0001, 0x297f: 0x0001, + // Block 0xa6, offset 0x2980 + 0x2980: 0x0001, 0x2981: 0x0001, 0x2982: 0x0001, 0x2983: 0x0001, 0x2984: 0x0001, 0x2985: 0x0001, + 0x2986: 0x0001, 0x2987: 0x0001, 0x2988: 0x0001, 0x2989: 0x0001, 0x298a: 0x0001, 0x298b: 0x0001, + 0x298c: 0x0001, 0x298d: 0x0001, 0x298e: 0x0001, 0x298f: 0x0001, 0x2990: 0x0001, 0x2991: 0x0001, + 0x2992: 0x0001, 0x2993: 0x0001, 0x2994: 0x0001, 0x2995: 0x0001, 0x2996: 0x0001, 0x2997: 0x0001, + 0x2998: 0x0001, 0x2999: 0x0001, 0x299a: 0x0001, 0x299b: 0x0001, 0x299c: 0x0001, 0x299d: 0x0001, + 0x299e: 0x0001, 0x299f: 0x0001, 0x29a0: 0x0005, 0x29a1: 0x0005, 0x29a2: 0x0005, 0x29a3: 0x0005, + 0x29a4: 0x0005, 0x29a5: 0x0005, 0x29a6: 0x0005, 0x29a7: 0x0005, 0x29a8: 0x0005, 0x29a9: 0x0005, + 0x29aa: 0x0005, 0x29ab: 0x0005, 0x29ac: 0x0005, 0x29ad: 0x0005, 0x29ae: 0x0005, 0x29af: 0x0005, + 0x29b0: 0x0005, 0x29b1: 0x0005, 0x29b2: 0x0005, 0x29b3: 0x0005, 0x29b4: 0x0005, 0x29b5: 0x0005, + 0x29b6: 0x0005, 0x29b7: 0x0005, 0x29b8: 0x0005, 0x29b9: 0x0005, 0x29ba: 0x0005, 0x29bb: 0x0005, + 0x29bc: 0x0005, 0x29bd: 0x0005, 0x29be: 0x0005, 0x29bf: 0x0001, + // Block 0xa7, offset 0x29c0 + 0x29c0: 0x0001, 0x29c1: 0x0001, 0x29c2: 0x0001, 0x29c3: 0x0001, 0x29c4: 0x0001, 0x29c5: 0x0001, + 0x29c6: 0x0001, 0x29c7: 0x0001, 0x29c8: 0x0001, 0x29c9: 0x0001, 0x29ca: 0x0001, 0x29cb: 0x0001, + 0x29cc: 0x0001, 0x29cd: 0x0001, 0x29ce: 0x0001, 0x29cf: 0x0001, 0x29d0: 0x0001, 0x29d1: 0x0001, + 0x29d2: 0x0001, 0x29d3: 0x0001, 0x29d4: 0x0001, 0x29d5: 0x0001, 0x29d6: 0x0001, 0x29d7: 0x0001, + 0x29d8: 0x0001, 0x29d9: 0x0001, 0x29da: 0x0001, 0x29db: 0x0001, 0x29dc: 0x0001, 0x29dd: 0x0001, + 0x29de: 0x0001, 0x29df: 0x0001, 0x29e0: 0x0001, 0x29e1: 0x0001, 0x29e2: 0x0001, 0x29e3: 0x0001, + 0x29e4: 0x0001, 0x29e5: 0x0001, 0x29e6: 0x0001, 0x29e7: 0x0001, 0x29e8: 0x0001, 0x29e9: 0x0001, + 0x29ea: 0x0001, 0x29eb: 0x000c, 0x29ec: 0x000c, 0x29ed: 0x0001, 0x29ee: 0x0001, 0x29ef: 0x0001, + 0x29f0: 0x0001, 0x29f1: 0x0001, 0x29f2: 0x0001, 0x29f3: 0x0001, 0x29f4: 0x0001, 0x29f5: 0x0001, + 0x29f6: 0x0001, 0x29f7: 0x0001, 0x29f8: 0x0001, 0x29f9: 0x0001, 0x29fa: 0x0001, 0x29fb: 0x0001, + 0x29fc: 0x0001, 0x29fd: 0x0001, 0x29fe: 0x0001, 0x29ff: 0x0001, + // Block 0xa8, offset 0x2a00 + 0x2a00: 0x0001, 0x2a01: 0x0001, 0x2a02: 0x000d, 0x2a03: 0x000d, 0x2a04: 0x000d, 0x2a05: 0x000d, + 0x2a06: 0x000d, 0x2a07: 0x000d, 0x2a08: 0x0001, 0x2a09: 0x0001, 0x2a0a: 0x0001, 0x2a0b: 0x0001, + 0x2a0c: 0x0001, 0x2a0d: 0x0001, 0x2a0e: 0x0001, 0x2a0f: 0x0001, 0x2a10: 0x000a, 0x2a11: 0x000a, + 0x2a12: 0x000a, 0x2a13: 0x000a, 0x2a14: 0x000a, 0x2a15: 0x000a, 0x2a16: 0x000a, 0x2a17: 0x000a, + 0x2a18: 0x000a, 0x2a19: 0x0001, 0x2a1a: 0x0001, 0x2a1b: 0x0001, 0x2a1c: 0x0001, 0x2a1d: 0x0001, + 0x2a1e: 0x0001, 0x2a1f: 0x0001, 0x2a20: 0x0001, 0x2a21: 0x0001, 0x2a22: 0x0001, 0x2a23: 0x0001, + 0x2a24: 0x0001, 0x2a25: 0x0001, 0x2a26: 0x0001, 0x2a27: 0x0001, 0x2a28: 0x0001, 0x2a29: 0x0001, + 0x2a2a: 0x0001, 0x2a2b: 0x0001, 0x2a2c: 0x0001, 0x2a2d: 0x0001, 0x2a2e: 0x0001, 0x2a2f: 0x0001, + 0x2a30: 0x0001, 0x2a31: 0x0001, 0x2a32: 0x0001, 0x2a33: 0x0001, 0x2a34: 0x0001, 0x2a35: 0x0001, + 0x2a36: 0x0001, 0x2a37: 0x0001, 0x2a38: 0x0001, 0x2a39: 0x0001, 0x2a3a: 0x000c, 0x2a3b: 0x000c, + 0x2a3c: 0x000c, 0x2a3d: 0x000c, 0x2a3e: 0x000c, 0x2a3f: 0x000c, + // Block 0xa9, offset 0x2a40 + 0x2a40: 0x0001, 0x2a41: 0x0001, 0x2a42: 0x0001, 0x2a43: 0x0001, 0x2a44: 0x0001, 0x2a45: 0x0001, + 0x2a46: 0x0001, 0x2a47: 0x0001, 0x2a48: 0x0001, 0x2a49: 0x0001, 0x2a4a: 0x0001, 0x2a4b: 0x0001, + 0x2a4c: 0x0001, 0x2a4d: 0x0001, 0x2a4e: 0x0001, 0x2a4f: 0x0001, 0x2a50: 0x0001, 0x2a51: 0x0001, + 0x2a52: 0x0001, 0x2a53: 0x0001, 0x2a54: 0x0001, 0x2a55: 0x0001, 0x2a56: 0x0001, 0x2a57: 0x0001, + 0x2a58: 0x0001, 0x2a59: 0x0001, 0x2a5a: 0x0001, 0x2a5b: 0x0001, 0x2a5c: 0x0001, 0x2a5d: 0x0001, + 0x2a5e: 0x0001, 0x2a5f: 0x0001, 0x2a60: 0x0001, 0x2a61: 0x0001, 0x2a62: 0x0001, 0x2a63: 0x0001, + 0x2a64: 0x0001, 0x2a65: 0x0001, 0x2a66: 0x0001, 0x2a67: 0x0001, 0x2a68: 0x0001, 0x2a69: 0x0001, + 0x2a6a: 0x0001, 0x2a6b: 0x0001, 0x2a6c: 0x0001, 0x2a6d: 0x0001, 0x2a6e: 0x0001, 0x2a6f: 0x0001, + 0x2a70: 0x000d, 0x2a71: 0x000d, 0x2a72: 0x000d, 0x2a73: 0x000d, 0x2a74: 0x000d, 0x2a75: 0x000d, + 0x2a76: 0x000d, 0x2a77: 0x000d, 0x2a78: 0x000d, 0x2a79: 0x000d, 0x2a7a: 0x000d, 0x2a7b: 0x000d, + 0x2a7c: 0x000d, 0x2a7d: 0x000d, 0x2a7e: 0x000d, 0x2a7f: 0x000d, + // Block 0xaa, offset 0x2a80 + 0x2a80: 0x000d, 0x2a81: 0x000d, 0x2a82: 0x000d, 0x2a83: 0x000d, 0x2a84: 0x000d, 0x2a85: 0x000d, + 0x2a86: 0x000c, 0x2a87: 0x000c, 0x2a88: 0x000c, 0x2a89: 0x000c, 0x2a8a: 0x000c, 0x2a8b: 0x000c, + 0x2a8c: 0x000c, 0x2a8d: 0x000c, 0x2a8e: 0x000c, 0x2a8f: 0x000c, 0x2a90: 0x000c, 0x2a91: 0x000d, + 0x2a92: 0x000d, 0x2a93: 0x000d, 0x2a94: 0x000d, 0x2a95: 0x000d, 0x2a96: 0x000d, 0x2a97: 0x000d, + 0x2a98: 0x000d, 0x2a99: 0x000d, 0x2a9a: 0x0001, 0x2a9b: 0x0001, 0x2a9c: 0x0001, 0x2a9d: 0x0001, + 0x2a9e: 0x0001, 0x2a9f: 0x0001, 0x2aa0: 0x0001, 0x2aa1: 0x0001, 0x2aa2: 0x0001, 0x2aa3: 0x0001, + 0x2aa4: 0x0001, 0x2aa5: 0x0001, 0x2aa6: 0x0001, 0x2aa7: 0x0001, 0x2aa8: 0x0001, 0x2aa9: 0x0001, + 0x2aaa: 0x0001, 0x2aab: 0x0001, 0x2aac: 0x0001, 0x2aad: 0x0001, 0x2aae: 0x0001, 0x2aaf: 0x0001, + 0x2ab0: 0x0001, 0x2ab1: 0x0001, 0x2ab2: 0x0001, 0x2ab3: 0x0001, 0x2ab4: 0x0001, 0x2ab5: 0x0001, + 0x2ab6: 0x0001, 0x2ab7: 0x0001, 0x2ab8: 0x0001, 0x2ab9: 0x0001, 0x2aba: 0x0001, 0x2abb: 0x0001, + 0x2abc: 0x0001, 0x2abd: 0x0001, 0x2abe: 0x0001, 0x2abf: 0x0001, + // Block 0xab, offset 0x2ac0 + 0x2ac0: 0x0001, 0x2ac1: 0x0001, 0x2ac2: 0x000c, 0x2ac3: 0x000c, 0x2ac4: 0x000c, 0x2ac5: 0x000c, + 0x2ac6: 0x0001, 0x2ac7: 0x0001, 0x2ac8: 0x0001, 0x2ac9: 0x0001, 0x2aca: 0x0001, 0x2acb: 0x0001, + 0x2acc: 0x0001, 0x2acd: 0x0001, 0x2ace: 0x0001, 0x2acf: 0x0001, 0x2ad0: 0x0001, 0x2ad1: 0x0001, + 0x2ad2: 0x0001, 0x2ad3: 0x0001, 0x2ad4: 0x0001, 0x2ad5: 0x0001, 0x2ad6: 0x0001, 0x2ad7: 0x0001, + 0x2ad8: 0x0001, 0x2ad9: 0x0001, 0x2ada: 0x0001, 0x2adb: 0x0001, 0x2adc: 0x0001, 0x2add: 0x0001, + 0x2ade: 0x0001, 0x2adf: 0x0001, 0x2ae0: 0x0001, 0x2ae1: 0x0001, 0x2ae2: 0x0001, 0x2ae3: 0x0001, + 0x2ae4: 0x0001, 0x2ae5: 0x0001, 0x2ae6: 0x0001, 0x2ae7: 0x0001, 0x2ae8: 0x0001, 0x2ae9: 0x0001, + 0x2aea: 0x0001, 0x2aeb: 0x0001, 0x2aec: 0x0001, 0x2aed: 0x0001, 0x2aee: 0x0001, 0x2aef: 0x0001, + 0x2af0: 0x0001, 0x2af1: 0x0001, 0x2af2: 0x0001, 0x2af3: 0x0001, 0x2af4: 0x0001, 0x2af5: 0x0001, + 0x2af6: 0x0001, 0x2af7: 0x0001, 0x2af8: 0x0001, 0x2af9: 0x0001, 0x2afa: 0x0001, 0x2afb: 0x0001, + 0x2afc: 0x0001, 0x2afd: 0x0001, 0x2afe: 0x0001, 0x2aff: 0x0001, + // Block 0xac, offset 0x2b00 + 0x2b01: 0x000c, + 0x2b38: 0x000c, 0x2b39: 0x000c, 0x2b3a: 0x000c, 0x2b3b: 0x000c, + 0x2b3c: 0x000c, 0x2b3d: 0x000c, 0x2b3e: 0x000c, 0x2b3f: 0x000c, + // Block 0xad, offset 0x2b40 + 0x2b40: 0x000c, 0x2b41: 0x000c, 0x2b42: 0x000c, 0x2b43: 0x000c, 0x2b44: 0x000c, 0x2b45: 0x000c, + 0x2b46: 0x000c, + 0x2b52: 0x000a, 0x2b53: 0x000a, 0x2b54: 0x000a, 0x2b55: 0x000a, 0x2b56: 0x000a, 0x2b57: 0x000a, + 0x2b58: 0x000a, 0x2b59: 0x000a, 0x2b5a: 0x000a, 0x2b5b: 0x000a, 0x2b5c: 0x000a, 0x2b5d: 0x000a, + 0x2b5e: 0x000a, 0x2b5f: 0x000a, 0x2b60: 0x000a, 0x2b61: 0x000a, 0x2b62: 0x000a, 0x2b63: 0x000a, + 0x2b64: 0x000a, 0x2b65: 0x000a, + 0x2b70: 0x000c, 0x2b73: 0x000c, 0x2b74: 0x000c, + 0x2b7f: 0x000c, + // Block 0xae, offset 0x2b80 + 0x2b80: 0x000c, 0x2b81: 0x000c, + 0x2bb3: 0x000c, 0x2bb4: 0x000c, 0x2bb5: 0x000c, + 0x2bb6: 0x000c, 0x2bb9: 0x000c, 0x2bba: 0x000c, + // Block 0xaf, offset 0x2bc0 + 0x2bc0: 0x000c, 0x2bc1: 0x000c, 0x2bc2: 0x000c, + 0x2be7: 0x000c, 0x2be8: 0x000c, 0x2be9: 0x000c, + 0x2bea: 0x000c, 0x2beb: 0x000c, 0x2bed: 0x000c, 0x2bee: 0x000c, 0x2bef: 0x000c, + 0x2bf0: 0x000c, 0x2bf1: 0x000c, 0x2bf2: 0x000c, 0x2bf3: 0x000c, 0x2bf4: 0x000c, + // Block 0xb0, offset 0x2c00 + 0x2c33: 0x000c, + // Block 0xb1, offset 0x2c40 + 0x2c40: 0x000c, 0x2c41: 0x000c, + 0x2c76: 0x000c, 0x2c77: 0x000c, 0x2c78: 0x000c, 0x2c79: 0x000c, 0x2c7a: 0x000c, 0x2c7b: 0x000c, + 0x2c7c: 0x000c, 0x2c7d: 0x000c, 0x2c7e: 0x000c, + // Block 0xb2, offset 0x2c80 + 0x2c89: 0x000c, 0x2c8a: 0x000c, 0x2c8b: 0x000c, + 0x2c8c: 0x000c, 0x2c8f: 0x000c, + // Block 0xb3, offset 0x2cc0 + 0x2cef: 0x000c, + 0x2cf0: 0x000c, 0x2cf1: 0x000c, 0x2cf4: 0x000c, + 0x2cf6: 0x000c, 0x2cf7: 0x000c, + 0x2cfe: 0x000c, + // Block 0xb4, offset 0x2d00 + 0x2d1f: 0x000c, 0x2d23: 0x000c, + 0x2d24: 0x000c, 0x2d25: 0x000c, 0x2d26: 0x000c, 0x2d27: 0x000c, 0x2d28: 0x000c, 0x2d29: 0x000c, + 0x2d2a: 0x000c, + // Block 0xb5, offset 0x2d40 + 0x2d40: 0x000c, + 0x2d66: 0x000c, 0x2d67: 0x000c, 0x2d68: 0x000c, 0x2d69: 0x000c, + 0x2d6a: 0x000c, 0x2d6b: 0x000c, 0x2d6c: 0x000c, + 0x2d70: 0x000c, 0x2d71: 0x000c, 0x2d72: 0x000c, 0x2d73: 0x000c, 0x2d74: 0x000c, + // Block 0xb6, offset 0x2d80 + 0x2dbb: 0x000c, + 0x2dbc: 0x000c, 0x2dbd: 0x000c, 0x2dbe: 0x000c, 0x2dbf: 0x000c, + // Block 0xb7, offset 0x2dc0 + 0x2dc0: 0x000c, + 0x2dce: 0x000c, 0x2dd0: 0x000c, + 0x2dd2: 0x000c, + 0x2de1: 0x000c, 0x2de2: 0x000c, + // Block 0xb8, offset 0x2e00 + 0x2e38: 0x000c, 0x2e39: 0x000c, 0x2e3a: 0x000c, 0x2e3b: 0x000c, + 0x2e3c: 0x000c, 0x2e3d: 0x000c, 0x2e3e: 0x000c, 0x2e3f: 0x000c, + // Block 0xb9, offset 0x2e40 + 0x2e42: 0x000c, 0x2e43: 0x000c, 0x2e44: 0x000c, + 0x2e46: 0x000c, + 0x2e5e: 0x000c, + // Block 0xba, offset 0x2e80 + 0x2eb3: 0x000c, 0x2eb4: 0x000c, 0x2eb5: 0x000c, + 0x2eb6: 0x000c, 0x2eb7: 0x000c, 0x2eb8: 0x000c, 0x2eba: 0x000c, + 0x2ebf: 0x000c, + // Block 0xbb, offset 0x2ec0 + 0x2ec0: 0x000c, 0x2ec2: 0x000c, 0x2ec3: 0x000c, + // Block 0xbc, offset 0x2f00 + 0x2f32: 0x000c, 0x2f33: 0x000c, 0x2f34: 0x000c, 0x2f35: 0x000c, + 0x2f3c: 0x000c, 0x2f3d: 0x000c, 0x2f3f: 0x000c, + // Block 0xbd, offset 0x2f40 + 0x2f40: 0x000c, + 0x2f5c: 0x000c, 0x2f5d: 0x000c, + // Block 0xbe, offset 0x2f80 + 0x2fb3: 0x000c, 0x2fb4: 0x000c, 0x2fb5: 0x000c, + 0x2fb6: 0x000c, 0x2fb7: 0x000c, 0x2fb8: 0x000c, 0x2fb9: 0x000c, 0x2fba: 0x000c, + 0x2fbd: 0x000c, 0x2fbf: 0x000c, + // Block 0xbf, offset 0x2fc0 + 0x2fc0: 0x000c, + 0x2fe0: 0x000a, 0x2fe1: 0x000a, 0x2fe2: 0x000a, 0x2fe3: 0x000a, + 0x2fe4: 0x000a, 0x2fe5: 0x000a, 0x2fe6: 0x000a, 0x2fe7: 0x000a, 0x2fe8: 0x000a, 0x2fe9: 0x000a, + 0x2fea: 0x000a, 0x2feb: 0x000a, 0x2fec: 0x000a, + // Block 0xc0, offset 0x3000 + 0x302b: 0x000c, 0x302d: 0x000c, + 0x3030: 0x000c, 0x3031: 0x000c, 0x3032: 0x000c, 0x3033: 0x000c, 0x3034: 0x000c, 0x3035: 0x000c, + 0x3037: 0x000c, + // Block 0xc1, offset 0x3040 + 0x305d: 0x000c, + 0x305f: 0x000c, 0x3062: 0x000c, 0x3063: 0x000c, + 0x3064: 0x000c, 0x3065: 0x000c, 0x3067: 0x000c, 0x3068: 0x000c, 0x3069: 0x000c, + 0x306a: 0x000c, 0x306b: 0x000c, + // Block 0xc2, offset 0x3080 + 0x30af: 0x000c, + 0x30b0: 0x000c, 0x30b1: 0x000c, 0x30b2: 0x000c, 0x30b3: 0x000c, 0x30b4: 0x000c, 0x30b5: 0x000c, + 0x30b6: 0x000c, 0x30b7: 0x000c, 0x30b9: 0x000c, 0x30ba: 0x000c, + // Block 0xc3, offset 0x30c0 + 0x30fb: 0x000c, + 0x30fc: 0x000c, 0x30fe: 0x000c, + // Block 0xc4, offset 0x3100 + 0x3103: 0x000c, + // Block 0xc5, offset 0x3140 + 0x3154: 0x000c, 0x3155: 0x000c, 0x3156: 0x000c, 0x3157: 0x000c, + 0x315a: 0x000c, 0x315b: 0x000c, + 0x3160: 0x000c, + // Block 0xc6, offset 0x3180 + 0x3181: 0x000c, 0x3182: 0x000c, 0x3183: 0x000c, 0x3184: 0x000c, 0x3185: 0x000c, + 0x3186: 0x000c, 0x3189: 0x000c, 0x318a: 0x000c, + 0x31b3: 0x000c, 0x31b4: 0x000c, 0x31b5: 0x000c, + 0x31b6: 0x000c, 0x31b7: 0x000c, 0x31b8: 0x000c, 0x31bb: 0x000c, + 0x31bc: 0x000c, 0x31bd: 0x000c, 0x31be: 0x000c, + // Block 0xc7, offset 0x31c0 + 0x31c7: 0x000c, + 0x31d1: 0x000c, + 0x31d2: 0x000c, 0x31d3: 0x000c, 0x31d4: 0x000c, 0x31d5: 0x000c, 0x31d6: 0x000c, + 0x31d9: 0x000c, 0x31da: 0x000c, 0x31db: 0x000c, + // Block 0xc8, offset 0x3200 + 0x320a: 0x000c, 0x320b: 0x000c, + 0x320c: 0x000c, 0x320d: 0x000c, 0x320e: 0x000c, 0x320f: 0x000c, 0x3210: 0x000c, 0x3211: 0x000c, + 0x3212: 0x000c, 0x3213: 0x000c, 0x3214: 0x000c, 0x3215: 0x000c, 0x3216: 0x000c, + 0x3218: 0x000c, 0x3219: 0x000c, + // Block 0xc9, offset 0x3240 + 0x3260: 0x000c, 0x3262: 0x000c, 0x3263: 0x000c, + 0x3264: 0x000c, 0x3266: 0x000c, + // Block 0xca, offset 0x3280 + 0x32b0: 0x000c, 0x32b1: 0x000c, 0x32b2: 0x000c, 0x32b3: 0x000c, 0x32b4: 0x000c, 0x32b5: 0x000c, + 0x32b6: 0x000c, 0x32b8: 0x000c, 0x32b9: 0x000c, 0x32ba: 0x000c, 0x32bb: 0x000c, + 0x32bc: 0x000c, 0x32bd: 0x000c, + // Block 0xcb, offset 0x32c0 + 0x32d2: 0x000c, 0x32d3: 0x000c, 0x32d4: 0x000c, 0x32d5: 0x000c, 0x32d6: 0x000c, 0x32d7: 0x000c, + 0x32d8: 0x000c, 0x32d9: 0x000c, 0x32da: 0x000c, 0x32db: 0x000c, 0x32dc: 0x000c, 0x32dd: 0x000c, + 0x32de: 0x000c, 0x32df: 0x000c, 0x32e0: 0x000c, 0x32e1: 0x000c, 0x32e2: 0x000c, 0x32e3: 0x000c, + 0x32e4: 0x000c, 0x32e5: 0x000c, 0x32e6: 0x000c, 0x32e7: 0x000c, + 0x32ea: 0x000c, 0x32eb: 0x000c, 0x32ec: 0x000c, 0x32ed: 0x000c, 0x32ee: 0x000c, 0x32ef: 0x000c, + 0x32f0: 0x000c, 0x32f2: 0x000c, 0x32f3: 0x000c, 0x32f5: 0x000c, + 0x32f6: 0x000c, + // Block 0xcc, offset 0x3300 + 0x3331: 0x000c, 0x3332: 0x000c, 0x3333: 0x000c, 0x3334: 0x000c, 0x3335: 0x000c, + 0x3336: 0x000c, 0x333a: 0x000c, + 0x333c: 0x000c, 0x333d: 0x000c, 0x333f: 0x000c, + // Block 0xcd, offset 0x3340 + 0x3340: 0x000c, 0x3341: 0x000c, 0x3342: 0x000c, 0x3343: 0x000c, 0x3344: 0x000c, 0x3345: 0x000c, + 0x3347: 0x000c, + // Block 0xce, offset 0x3380 + 0x3390: 0x000c, 0x3391: 0x000c, + 0x3395: 0x000c, 0x3397: 0x000c, + // Block 0xcf, offset 0x33c0 + 0x33f3: 0x000c, 0x33f4: 0x000c, + // Block 0xd0, offset 0x3400 + 0x3400: 0x000c, 0x3401: 0x000c, + 0x3436: 0x000c, 0x3437: 0x000c, 0x3438: 0x000c, 0x3439: 0x000c, 0x343a: 0x000c, + // Block 0xd1, offset 0x3440 + 0x3440: 0x000c, 0x3442: 0x000c, + 0x345a: 0x000c, + // Block 0xd2, offset 0x3480 + 0x3495: 0x000a, 0x3496: 0x000a, 0x3497: 0x000a, + 0x3498: 0x000a, 0x3499: 0x000a, 0x349a: 0x000a, 0x349b: 0x000a, 0x349c: 0x000a, 0x349d: 0x0004, + 0x349e: 0x0004, 0x349f: 0x0004, 0x34a0: 0x0004, 0x34a1: 0x000a, 0x34a2: 0x000a, 0x34a3: 0x000a, + 0x34a4: 0x000a, 0x34a5: 0x000a, 0x34a6: 0x000a, 0x34a7: 0x000a, 0x34a8: 0x000a, 0x34a9: 0x000a, + 0x34aa: 0x000a, 0x34ab: 0x000a, 0x34ac: 0x000a, 0x34ad: 0x000a, 0x34ae: 0x000a, 0x34af: 0x000a, + 0x34b0: 0x000a, 0x34b1: 0x000a, + // Block 0xd3, offset 0x34c0 + 0x34c0: 0x000c, + 0x34c7: 0x000c, 0x34c8: 0x000c, 0x34c9: 0x000c, 0x34ca: 0x000c, 0x34cb: 0x000c, + 0x34cc: 0x000c, 0x34cd: 0x000c, 0x34ce: 0x000c, 0x34cf: 0x000c, 0x34d0: 0x000c, 0x34d1: 0x000c, + 0x34d2: 0x000c, 0x34d3: 0x000c, 0x34d4: 0x000c, 0x34d5: 0x000c, + // Block 0xd4, offset 0x3500 + 0x351e: 0x000c, 0x351f: 0x000c, 0x3520: 0x000c, 0x3521: 0x000c, 0x3522: 0x000c, 0x3523: 0x000c, + 0x3524: 0x000c, 0x3525: 0x000c, 0x3526: 0x000c, 0x3527: 0x000c, 0x3528: 0x000c, 0x3529: 0x000c, + 0x352d: 0x000c, 0x352e: 0x000c, 0x352f: 0x000c, + // Block 0xd5, offset 0x3540 + 0x3570: 0x000c, 0x3571: 0x000c, 0x3572: 0x000c, 0x3573: 0x000c, 0x3574: 0x000c, + // Block 0xd6, offset 0x3580 + 0x35b0: 0x000c, 0x35b1: 0x000c, 0x35b2: 0x000c, 0x35b3: 0x000c, 0x35b4: 0x000c, 0x35b5: 0x000c, + 0x35b6: 0x000c, + // Block 0xd7, offset 0x35c0 + 0x35cf: 0x000c, + // Block 0xd8, offset 0x3600 + 0x360f: 0x000c, 0x3610: 0x000c, 0x3611: 0x000c, + 0x3612: 0x000c, + // Block 0xd9, offset 0x3640 + 0x3662: 0x000a, + 0x3664: 0x000c, + // Block 0xda, offset 0x3680 + 0x369d: 0x000c, + 0x369e: 0x000c, 0x36a0: 0x000b, 0x36a1: 0x000b, 0x36a2: 0x000b, 0x36a3: 0x000b, + // Block 0xdb, offset 0x36c0 + 0x36c0: 0x000a, 0x36c1: 0x000a, 0x36c2: 0x000a, 0x36c3: 0x000a, 0x36c4: 0x000a, 0x36c5: 0x000a, + 0x36c6: 0x000a, 0x36c7: 0x000a, 0x36c8: 0x000a, 0x36c9: 0x000a, 0x36ca: 0x000a, 0x36cb: 0x000a, + 0x36cc: 0x000a, 0x36cd: 0x000a, 0x36ce: 0x000a, 0x36cf: 0x000a, 0x36d0: 0x000a, 0x36d1: 0x000a, + 0x36d2: 0x000a, 0x36d3: 0x000a, 0x36d4: 0x000a, 0x36d5: 0x000a, + 0x36f0: 0x0002, 0x36f1: 0x0002, 0x36f2: 0x0002, 0x36f3: 0x0002, 0x36f4: 0x0002, 0x36f5: 0x0002, + 0x36f6: 0x0002, 0x36f7: 0x0002, 0x36f8: 0x0002, 0x36f9: 0x0002, 0x36fa: 0x000a, 0x36fb: 0x000a, + 0x36fc: 0x000a, + // Block 0xdc, offset 0x3700 + 0x3700: 0x000a, 0x3701: 0x000a, 0x3702: 0x000a, 0x3703: 0x000a, 0x3704: 0x000a, 0x3705: 0x000a, + 0x3706: 0x000a, 0x3707: 0x000a, 0x3708: 0x000a, 0x3709: 0x000a, 0x370a: 0x000a, 0x370b: 0x000a, + 0x370c: 0x000a, 0x370d: 0x000a, 0x370e: 0x000a, 0x370f: 0x000a, 0x3710: 0x000a, 0x3711: 0x000a, + 0x3712: 0x000a, 0x3713: 0x000a, 0x3714: 0x000a, 0x3715: 0x000a, 0x3716: 0x000a, 0x3717: 0x000a, + 0x3718: 0x000a, 0x3719: 0x000a, 0x371a: 0x000a, 0x371b: 0x000a, 0x371c: 0x000a, 0x371d: 0x000a, + 0x371e: 0x000a, 0x371f: 0x000a, 0x3720: 0x000a, 0x3721: 0x000a, 0x3722: 0x000a, 0x3723: 0x000a, + 0x3724: 0x000a, 0x3725: 0x000a, 0x3726: 0x000a, 0x3727: 0x000a, 0x3728: 0x000a, 0x3729: 0x000a, + 0x372a: 0x000a, 0x372b: 0x000a, 0x372c: 0x000a, 0x372d: 0x000a, 0x372e: 0x000a, 0x372f: 0x000a, + 0x3730: 0x000a, 0x3731: 0x000a, 0x3732: 0x000a, 0x3733: 0x000a, + 0x373a: 0x000a, 0x373b: 0x000a, + 0x373c: 0x000a, 0x373d: 0x000a, 0x373e: 0x000a, 0x373f: 0x000a, + // Block 0xdd, offset 0x3740 + 0x3740: 0x000a, 0x3741: 0x000a, 0x3742: 0x000a, 0x3743: 0x000a, 0x3744: 0x000a, 0x3745: 0x000a, + 0x3746: 0x000a, 0x3747: 0x000a, 0x3748: 0x000a, 0x3749: 0x000a, 0x374a: 0x000a, 0x374b: 0x000a, + 0x374c: 0x000a, 0x374d: 0x000a, 0x374e: 0x000a, 0x374f: 0x000a, 0x3750: 0x000a, + 0x3760: 0x000a, 0x3761: 0x000a, 0x3762: 0x000a, 0x3763: 0x000a, + 0x3764: 0x000a, 0x3765: 0x000a, 0x3766: 0x000a, 0x3767: 0x000a, 0x3768: 0x000a, 0x3769: 0x000a, + 0x376a: 0x000a, 0x376b: 0x000a, 0x376c: 0x000a, 0x376d: 0x000a, 0x376e: 0x000a, 0x376f: 0x000a, + 0x3770: 0x000a, + // Block 0xde, offset 0x3780 + 0x3780: 0x000c, 0x3781: 0x000c, 0x3782: 0x000c, 0x3783: 0x000c, 0x3784: 0x000c, 0x3785: 0x000c, + 0x3786: 0x000c, 0x3787: 0x000c, 0x3788: 0x000c, 0x3789: 0x000c, 0x378a: 0x000c, 0x378b: 0x000c, + 0x378c: 0x000c, 0x378d: 0x000c, 0x378e: 0x000c, 0x378f: 0x000c, 0x3790: 0x000c, 0x3791: 0x000c, + 0x3792: 0x000c, 0x3793: 0x000c, 0x3794: 0x000c, 0x3795: 0x000c, 0x3796: 0x000c, 0x3797: 0x000c, + 0x3798: 0x000c, 0x3799: 0x000c, 0x379a: 0x000c, 0x379b: 0x000c, 0x379c: 0x000c, 0x379d: 0x000c, + 0x379e: 0x000c, 0x379f: 0x000c, 0x37a0: 0x000c, 0x37a1: 0x000c, 0x37a2: 0x000c, 0x37a3: 0x000c, + 0x37a4: 0x000c, 0x37a5: 0x000c, 0x37a6: 0x000c, 0x37a7: 0x000c, 0x37a8: 0x000c, 0x37a9: 0x000c, + 0x37aa: 0x000c, 0x37ab: 0x000c, 0x37ac: 0x000c, 0x37ad: 0x000c, + 0x37b0: 0x000c, 0x37b1: 0x000c, 0x37b2: 0x000c, 0x37b3: 0x000c, 0x37b4: 0x000c, 0x37b5: 0x000c, + 0x37b6: 0x000c, 0x37b7: 0x000c, 0x37b8: 0x000c, 0x37b9: 0x000c, 0x37ba: 0x000c, 0x37bb: 0x000c, + 0x37bc: 0x000c, 0x37bd: 0x000c, 0x37be: 0x000c, 0x37bf: 0x000c, + // Block 0xdf, offset 0x37c0 + 0x37c0: 0x000c, 0x37c1: 0x000c, 0x37c2: 0x000c, 0x37c3: 0x000c, 0x37c4: 0x000c, 0x37c5: 0x000c, + 0x37c6: 0x000c, + // Block 0xe0, offset 0x3800 + 0x3827: 0x000c, 0x3828: 0x000c, 0x3829: 0x000c, + 0x3833: 0x000b, 0x3834: 0x000b, 0x3835: 0x000b, + 0x3836: 0x000b, 0x3837: 0x000b, 0x3838: 0x000b, 0x3839: 0x000b, 0x383a: 0x000b, 0x383b: 0x000c, + 0x383c: 0x000c, 0x383d: 0x000c, 0x383e: 0x000c, 0x383f: 0x000c, + // Block 0xe1, offset 0x3840 + 0x3840: 0x000c, 0x3841: 0x000c, 0x3842: 0x000c, 0x3845: 0x000c, + 0x3846: 0x000c, 0x3847: 0x000c, 0x3848: 0x000c, 0x3849: 0x000c, 0x384a: 0x000c, 0x384b: 0x000c, + 0x386a: 0x000c, 0x386b: 0x000c, 0x386c: 0x000c, 0x386d: 0x000c, + // Block 0xe2, offset 0x3880 + 0x38a9: 0x000a, + 0x38aa: 0x000a, + // Block 0xe3, offset 0x38c0 + 0x38c0: 0x000a, 0x38c1: 0x000a, 0x38c2: 0x000c, 0x38c3: 0x000c, 0x38c4: 0x000c, 0x38c5: 0x000a, + // Block 0xe4, offset 0x3900 + 0x3900: 0x000a, 0x3901: 0x000a, 0x3902: 0x000a, 0x3903: 0x000a, 0x3904: 0x000a, 0x3905: 0x000a, + 0x3906: 0x000a, 0x3907: 0x000a, 0x3908: 0x000a, 0x3909: 0x000a, 0x390a: 0x000a, 0x390b: 0x000a, + 0x390c: 0x000a, 0x390d: 0x000a, 0x390e: 0x000a, 0x390f: 0x000a, 0x3910: 0x000a, 0x3911: 0x000a, + 0x3912: 0x000a, 0x3913: 0x000a, 0x3914: 0x000a, 0x3915: 0x000a, 0x3916: 0x000a, + // Block 0xe5, offset 0x3940 + 0x3941: 0x000a, + 0x395b: 0x000a, + 0x397b: 0x000a, + // Block 0xe6, offset 0x3980 + 0x3995: 0x000a, + 0x39b5: 0x000a, + // Block 0xe7, offset 0x39c0 + 0x39cf: 0x000a, + 0x39ef: 0x000a, + // Block 0xe8, offset 0x3a00 + 0x3a09: 0x000a, + 0x3a29: 0x000a, + // Block 0xe9, offset 0x3a40 + 0x3a43: 0x000a, + 0x3a4e: 0x0002, 0x3a4f: 0x0002, 0x3a50: 0x0002, 0x3a51: 0x0002, + 0x3a52: 0x0002, 0x3a53: 0x0002, 0x3a54: 0x0002, 0x3a55: 0x0002, 0x3a56: 0x0002, 0x3a57: 0x0002, + 0x3a58: 0x0002, 0x3a59: 0x0002, 0x3a5a: 0x0002, 0x3a5b: 0x0002, 0x3a5c: 0x0002, 0x3a5d: 0x0002, + 0x3a5e: 0x0002, 0x3a5f: 0x0002, 0x3a60: 0x0002, 0x3a61: 0x0002, 0x3a62: 0x0002, 0x3a63: 0x0002, + 0x3a64: 0x0002, 0x3a65: 0x0002, 0x3a66: 0x0002, 0x3a67: 0x0002, 0x3a68: 0x0002, 0x3a69: 0x0002, + 0x3a6a: 0x0002, 0x3a6b: 0x0002, 0x3a6c: 0x0002, 0x3a6d: 0x0002, 0x3a6e: 0x0002, 0x3a6f: 0x0002, + 0x3a70: 0x0002, 0x3a71: 0x0002, 0x3a72: 0x0002, 0x3a73: 0x0002, 0x3a74: 0x0002, 0x3a75: 0x0002, + 0x3a76: 0x0002, 0x3a77: 0x0002, 0x3a78: 0x0002, 0x3a79: 0x0002, 0x3a7a: 0x0002, 0x3a7b: 0x0002, + 0x3a7c: 0x0002, 0x3a7d: 0x0002, 0x3a7e: 0x0002, 0x3a7f: 0x0002, + // Block 0xea, offset 0x3a80 + 0x3a80: 0x000c, 0x3a81: 0x000c, 0x3a82: 0x000c, 0x3a83: 0x000c, 0x3a84: 0x000c, 0x3a85: 0x000c, + 0x3a86: 0x000c, 0x3a87: 0x000c, 0x3a88: 0x000c, 0x3a89: 0x000c, 0x3a8a: 0x000c, 0x3a8b: 0x000c, + 0x3a8c: 0x000c, 0x3a8d: 0x000c, 0x3a8e: 0x000c, 0x3a8f: 0x000c, 0x3a90: 0x000c, 0x3a91: 0x000c, + 0x3a92: 0x000c, 0x3a93: 0x000c, 0x3a94: 0x000c, 0x3a95: 0x000c, 0x3a96: 0x000c, 0x3a97: 0x000c, + 0x3a98: 0x000c, 0x3a99: 0x000c, 0x3a9a: 0x000c, 0x3a9b: 0x000c, 0x3a9c: 0x000c, 0x3a9d: 0x000c, + 0x3a9e: 0x000c, 0x3a9f: 0x000c, 0x3aa0: 0x000c, 0x3aa1: 0x000c, 0x3aa2: 0x000c, 0x3aa3: 0x000c, + 0x3aa4: 0x000c, 0x3aa5: 0x000c, 0x3aa6: 0x000c, 0x3aa7: 0x000c, 0x3aa8: 0x000c, 0x3aa9: 0x000c, + 0x3aaa: 0x000c, 0x3aab: 0x000c, 0x3aac: 0x000c, 0x3aad: 0x000c, 0x3aae: 0x000c, 0x3aaf: 0x000c, + 0x3ab0: 0x000c, 0x3ab1: 0x000c, 0x3ab2: 0x000c, 0x3ab3: 0x000c, 0x3ab4: 0x000c, 0x3ab5: 0x000c, + 0x3ab6: 0x000c, 0x3abb: 0x000c, + 0x3abc: 0x000c, 0x3abd: 0x000c, 0x3abe: 0x000c, 0x3abf: 0x000c, + // Block 0xeb, offset 0x3ac0 + 0x3ac0: 0x000c, 0x3ac1: 0x000c, 0x3ac2: 0x000c, 0x3ac3: 0x000c, 0x3ac4: 0x000c, 0x3ac5: 0x000c, + 0x3ac6: 0x000c, 0x3ac7: 0x000c, 0x3ac8: 0x000c, 0x3ac9: 0x000c, 0x3aca: 0x000c, 0x3acb: 0x000c, + 0x3acc: 0x000c, 0x3acd: 0x000c, 0x3ace: 0x000c, 0x3acf: 0x000c, 0x3ad0: 0x000c, 0x3ad1: 0x000c, + 0x3ad2: 0x000c, 0x3ad3: 0x000c, 0x3ad4: 0x000c, 0x3ad5: 0x000c, 0x3ad6: 0x000c, 0x3ad7: 0x000c, + 0x3ad8: 0x000c, 0x3ad9: 0x000c, 0x3ada: 0x000c, 0x3adb: 0x000c, 0x3adc: 0x000c, 0x3add: 0x000c, + 0x3ade: 0x000c, 0x3adf: 0x000c, 0x3ae0: 0x000c, 0x3ae1: 0x000c, 0x3ae2: 0x000c, 0x3ae3: 0x000c, + 0x3ae4: 0x000c, 0x3ae5: 0x000c, 0x3ae6: 0x000c, 0x3ae7: 0x000c, 0x3ae8: 0x000c, 0x3ae9: 0x000c, + 0x3aea: 0x000c, 0x3aeb: 0x000c, 0x3aec: 0x000c, + 0x3af5: 0x000c, + // Block 0xec, offset 0x3b00 + 0x3b04: 0x000c, + 0x3b1b: 0x000c, 0x3b1c: 0x000c, 0x3b1d: 0x000c, + 0x3b1e: 0x000c, 0x3b1f: 0x000c, 0x3b21: 0x000c, 0x3b22: 0x000c, 0x3b23: 0x000c, + 0x3b24: 0x000c, 0x3b25: 0x000c, 0x3b26: 0x000c, 0x3b27: 0x000c, 0x3b28: 0x000c, 0x3b29: 0x000c, + 0x3b2a: 0x000c, 0x3b2b: 0x000c, 0x3b2c: 0x000c, 0x3b2d: 0x000c, 0x3b2e: 0x000c, 0x3b2f: 0x000c, + // Block 0xed, offset 0x3b40 + 0x3b40: 0x000c, 0x3b41: 0x000c, 0x3b42: 0x000c, 0x3b43: 0x000c, 0x3b44: 0x000c, 0x3b45: 0x000c, + 0x3b46: 0x000c, 0x3b48: 0x000c, 0x3b49: 0x000c, 0x3b4a: 0x000c, 0x3b4b: 0x000c, + 0x3b4c: 0x000c, 0x3b4d: 0x000c, 0x3b4e: 0x000c, 0x3b4f: 0x000c, 0x3b50: 0x000c, 0x3b51: 0x000c, + 0x3b52: 0x000c, 0x3b53: 0x000c, 0x3b54: 0x000c, 0x3b55: 0x000c, 0x3b56: 0x000c, 0x3b57: 0x000c, + 0x3b58: 0x000c, 0x3b5b: 0x000c, 0x3b5c: 0x000c, 0x3b5d: 0x000c, + 0x3b5e: 0x000c, 0x3b5f: 0x000c, 0x3b60: 0x000c, 0x3b61: 0x000c, 0x3b63: 0x000c, + 0x3b64: 0x000c, 0x3b66: 0x000c, 0x3b67: 0x000c, 0x3b68: 0x000c, 0x3b69: 0x000c, + 0x3b6a: 0x000c, + // Block 0xee, offset 0x3b80 + 0x3bae: 0x000c, + // Block 0xef, offset 0x3bc0 + 0x3bec: 0x000c, 0x3bed: 0x000c, 0x3bee: 0x000c, 0x3bef: 0x000c, + 0x3bff: 0x0004, + // Block 0xf0, offset 0x3c00 + 0x3c2c: 0x000c, 0x3c2d: 0x000c, 0x3c2e: 0x000c, 0x3c2f: 0x000c, + // Block 0xf1, offset 0x3c40 + 0x3c6e: 0x000c, 0x3c6f: 0x000c, + // Block 0xf2, offset 0x3c80 + 0x3ca3: 0x000c, + 0x3ca6: 0x000c, + 0x3cae: 0x000c, 0x3caf: 0x000c, + 0x3cb5: 0x000c, + // Block 0xf3, offset 0x3cc0 + 0x3cc0: 0x0001, 0x3cc1: 0x0001, 0x3cc2: 0x0001, 0x3cc3: 0x0001, 0x3cc4: 0x0001, 0x3cc5: 0x0001, + 0x3cc6: 0x0001, 0x3cc7: 0x0001, 0x3cc8: 0x0001, 0x3cc9: 0x0001, 0x3cca: 0x0001, 0x3ccb: 0x0001, + 0x3ccc: 0x0001, 0x3ccd: 0x0001, 0x3cce: 0x0001, 0x3ccf: 0x0001, 0x3cd0: 0x000c, 0x3cd1: 0x000c, + 0x3cd2: 0x000c, 0x3cd3: 0x000c, 0x3cd4: 0x000c, 0x3cd5: 0x000c, 0x3cd6: 0x000c, 0x3cd7: 0x0001, + 0x3cd8: 0x0001, 0x3cd9: 0x0001, 0x3cda: 0x0001, 0x3cdb: 0x0001, 0x3cdc: 0x0001, 0x3cdd: 0x0001, + 0x3cde: 0x0001, 0x3cdf: 0x0001, 0x3ce0: 0x0001, 0x3ce1: 0x0001, 0x3ce2: 0x0001, 0x3ce3: 0x0001, + 0x3ce4: 0x0001, 0x3ce5: 0x0001, 0x3ce6: 0x0001, 0x3ce7: 0x0001, 0x3ce8: 0x0001, 0x3ce9: 0x0001, + 0x3cea: 0x0001, 0x3ceb: 0x0001, 0x3cec: 0x0001, 0x3ced: 0x0001, 0x3cee: 0x0001, 0x3cef: 0x0001, + 0x3cf0: 0x0001, 0x3cf1: 0x0001, 0x3cf2: 0x0001, 0x3cf3: 0x0001, 0x3cf4: 0x0001, 0x3cf5: 0x0001, + 0x3cf6: 0x0001, 0x3cf7: 0x0001, 0x3cf8: 0x0001, 0x3cf9: 0x0001, 0x3cfa: 0x0001, 0x3cfb: 0x0001, + 0x3cfc: 0x0001, 0x3cfd: 0x0001, 0x3cfe: 0x0001, 0x3cff: 0x0001, + // Block 0xf4, offset 0x3d00 + 0x3d00: 0x0001, 0x3d01: 0x0001, 0x3d02: 0x0001, 0x3d03: 0x0001, 0x3d04: 0x000c, 0x3d05: 0x000c, + 0x3d06: 0x000c, 0x3d07: 0x000c, 0x3d08: 0x000c, 0x3d09: 0x000c, 0x3d0a: 0x000c, 0x3d0b: 0x0001, + 0x3d0c: 0x0001, 0x3d0d: 0x0001, 0x3d0e: 0x0001, 0x3d0f: 0x0001, 0x3d10: 0x0001, 0x3d11: 0x0001, + 0x3d12: 0x0001, 0x3d13: 0x0001, 0x3d14: 0x0001, 0x3d15: 0x0001, 0x3d16: 0x0001, 0x3d17: 0x0001, + 0x3d18: 0x0001, 0x3d19: 0x0001, 0x3d1a: 0x0001, 0x3d1b: 0x0001, 0x3d1c: 0x0001, 0x3d1d: 0x0001, + 0x3d1e: 0x0001, 0x3d1f: 0x0001, 0x3d20: 0x0001, 0x3d21: 0x0001, 0x3d22: 0x0001, 0x3d23: 0x0001, + 0x3d24: 0x0001, 0x3d25: 0x0001, 0x3d26: 0x0001, 0x3d27: 0x0001, 0x3d28: 0x0001, 0x3d29: 0x0001, + 0x3d2a: 0x0001, 0x3d2b: 0x0001, 0x3d2c: 0x0001, 0x3d2d: 0x0001, 0x3d2e: 0x0001, 0x3d2f: 0x0001, + 0x3d30: 0x0001, 0x3d31: 0x0001, 0x3d32: 0x0001, 0x3d33: 0x0001, 0x3d34: 0x0001, 0x3d35: 0x0001, + 0x3d36: 0x0001, 0x3d37: 0x0001, 0x3d38: 0x0001, 0x3d39: 0x0001, 0x3d3a: 0x0001, 0x3d3b: 0x0001, + 0x3d3c: 0x0001, 0x3d3d: 0x0001, 0x3d3e: 0x0001, 0x3d3f: 0x0001, + // Block 0xf5, offset 0x3d40 + 0x3d40: 0x0001, 0x3d41: 0x0001, 0x3d42: 0x0001, 0x3d43: 0x0001, 0x3d44: 0x0001, 0x3d45: 0x0001, + 0x3d46: 0x0001, 0x3d47: 0x0001, 0x3d48: 0x0001, 0x3d49: 0x0001, 0x3d4a: 0x0001, 0x3d4b: 0x0001, + 0x3d4c: 0x0001, 0x3d4d: 0x0001, 0x3d4e: 0x0001, 0x3d4f: 0x0001, 0x3d50: 0x0001, 0x3d51: 0x0001, + 0x3d52: 0x0001, 0x3d53: 0x0001, 0x3d54: 0x0001, 0x3d55: 0x0001, 0x3d56: 0x0001, 0x3d57: 0x0001, + 0x3d58: 0x0001, 0x3d59: 0x0001, 0x3d5a: 0x0001, 0x3d5b: 0x0001, 0x3d5c: 0x0001, 0x3d5d: 0x0001, + 0x3d5e: 0x0001, 0x3d5f: 0x0001, 0x3d60: 0x0001, 0x3d61: 0x0001, 0x3d62: 0x0001, 0x3d63: 0x0001, + 0x3d64: 0x0001, 0x3d65: 0x0001, 0x3d66: 0x0001, 0x3d67: 0x0001, 0x3d68: 0x0001, 0x3d69: 0x0001, + 0x3d6a: 0x0001, 0x3d6b: 0x0001, 0x3d6c: 0x0001, 0x3d6d: 0x0001, 0x3d6e: 0x0001, 0x3d6f: 0x0001, + 0x3d70: 0x0001, 0x3d71: 0x000d, 0x3d72: 0x000d, 0x3d73: 0x000d, 0x3d74: 0x000d, 0x3d75: 0x000d, + 0x3d76: 0x000d, 0x3d77: 0x000d, 0x3d78: 0x000d, 0x3d79: 0x000d, 0x3d7a: 0x000d, 0x3d7b: 0x000d, + 0x3d7c: 0x000d, 0x3d7d: 0x000d, 0x3d7e: 0x000d, 0x3d7f: 0x000d, + // Block 0xf6, offset 0x3d80 + 0x3d80: 0x000d, 0x3d81: 0x000d, 0x3d82: 0x000d, 0x3d83: 0x000d, 0x3d84: 0x000d, 0x3d85: 0x000d, + 0x3d86: 0x000d, 0x3d87: 0x000d, 0x3d88: 0x000d, 0x3d89: 0x000d, 0x3d8a: 0x000d, 0x3d8b: 0x000d, + 0x3d8c: 0x000d, 0x3d8d: 0x000d, 0x3d8e: 0x000d, 0x3d8f: 0x000d, 0x3d90: 0x000d, 0x3d91: 0x000d, + 0x3d92: 0x000d, 0x3d93: 0x000d, 0x3d94: 0x000d, 0x3d95: 0x000d, 0x3d96: 0x000d, 0x3d97: 0x000d, + 0x3d98: 0x000d, 0x3d99: 0x000d, 0x3d9a: 0x000d, 0x3d9b: 0x000d, 0x3d9c: 0x000d, 0x3d9d: 0x000d, + 0x3d9e: 0x000d, 0x3d9f: 0x000d, 0x3da0: 0x000d, 0x3da1: 0x000d, 0x3da2: 0x000d, 0x3da3: 0x000d, + 0x3da4: 0x000d, 0x3da5: 0x000d, 0x3da6: 0x000d, 0x3da7: 0x000d, 0x3da8: 0x000d, 0x3da9: 0x000d, + 0x3daa: 0x000d, 0x3dab: 0x000d, 0x3dac: 0x000d, 0x3dad: 0x000d, 0x3dae: 0x000d, 0x3daf: 0x000d, + 0x3db0: 0x000d, 0x3db1: 0x000d, 0x3db2: 0x000d, 0x3db3: 0x000d, 0x3db4: 0x000d, 0x3db5: 0x0001, + 0x3db6: 0x0001, 0x3db7: 0x0001, 0x3db8: 0x0001, 0x3db9: 0x0001, 0x3dba: 0x0001, 0x3dbb: 0x0001, + 0x3dbc: 0x0001, 0x3dbd: 0x0001, 0x3dbe: 0x0001, 0x3dbf: 0x0001, + // Block 0xf7, offset 0x3dc0 + 0x3dc0: 0x0001, 0x3dc1: 0x000d, 0x3dc2: 0x000d, 0x3dc3: 0x000d, 0x3dc4: 0x000d, 0x3dc5: 0x000d, + 0x3dc6: 0x000d, 0x3dc7: 0x000d, 0x3dc8: 0x000d, 0x3dc9: 0x000d, 0x3dca: 0x000d, 0x3dcb: 0x000d, + 0x3dcc: 0x000d, 0x3dcd: 0x000d, 0x3dce: 0x000d, 0x3dcf: 0x000d, 0x3dd0: 0x000d, 0x3dd1: 0x000d, + 0x3dd2: 0x000d, 0x3dd3: 0x000d, 0x3dd4: 0x000d, 0x3dd5: 0x000d, 0x3dd6: 0x000d, 0x3dd7: 0x000d, + 0x3dd8: 0x000d, 0x3dd9: 0x000d, 0x3dda: 0x000d, 0x3ddb: 0x000d, 0x3ddc: 0x000d, 0x3ddd: 0x000d, + 0x3dde: 0x000d, 0x3ddf: 0x000d, 0x3de0: 0x000d, 0x3de1: 0x000d, 0x3de2: 0x000d, 0x3de3: 0x000d, + 0x3de4: 0x000d, 0x3de5: 0x000d, 0x3de6: 0x000d, 0x3de7: 0x000d, 0x3de8: 0x000d, 0x3de9: 0x000d, + 0x3dea: 0x000d, 0x3deb: 0x000d, 0x3dec: 0x000d, 0x3ded: 0x000d, 0x3dee: 0x000d, 0x3def: 0x000d, + 0x3df0: 0x000d, 0x3df1: 0x000d, 0x3df2: 0x000d, 0x3df3: 0x000d, 0x3df4: 0x000d, 0x3df5: 0x000d, + 0x3df6: 0x000d, 0x3df7: 0x000d, 0x3df8: 0x000d, 0x3df9: 0x000d, 0x3dfa: 0x000d, 0x3dfb: 0x000d, + 0x3dfc: 0x000d, 0x3dfd: 0x000d, 0x3dfe: 0x0001, 0x3dff: 0x0001, + // Block 0xf8, offset 0x3e00 + 0x3e00: 0x000d, 0x3e01: 0x000d, 0x3e02: 0x000d, 0x3e03: 0x000d, 0x3e04: 0x000d, 0x3e05: 0x000d, + 0x3e06: 0x000d, 0x3e07: 0x000d, 0x3e08: 0x000d, 0x3e09: 0x000d, 0x3e0a: 0x000d, 0x3e0b: 0x000d, + 0x3e0c: 0x000d, 0x3e0d: 0x000d, 0x3e0e: 0x000d, 0x3e0f: 0x000d, 0x3e10: 0x000d, 0x3e11: 0x000d, + 0x3e12: 0x000d, 0x3e13: 0x000d, 0x3e14: 0x000d, 0x3e15: 0x000d, 0x3e16: 0x000d, 0x3e17: 0x000d, + 0x3e18: 0x000d, 0x3e19: 0x000d, 0x3e1a: 0x000d, 0x3e1b: 0x000d, 0x3e1c: 0x000d, 0x3e1d: 0x000d, + 0x3e1e: 0x000d, 0x3e1f: 0x000d, 0x3e20: 0x000d, 0x3e21: 0x000d, 0x3e22: 0x000d, 0x3e23: 0x000d, + 0x3e24: 0x000d, 0x3e25: 0x000d, 0x3e26: 0x000d, 0x3e27: 0x000d, 0x3e28: 0x000d, 0x3e29: 0x000d, + 0x3e2a: 0x000d, 0x3e2b: 0x000d, 0x3e2c: 0x000d, 0x3e2d: 0x000d, 0x3e2e: 0x000d, 0x3e2f: 0x000d, + 0x3e30: 0x000a, 0x3e31: 0x000a, 0x3e32: 0x000d, 0x3e33: 0x000d, 0x3e34: 0x000d, 0x3e35: 0x000d, + 0x3e36: 0x000d, 0x3e37: 0x000d, 0x3e38: 0x000d, 0x3e39: 0x000d, 0x3e3a: 0x000d, 0x3e3b: 0x000d, + 0x3e3c: 0x000d, 0x3e3d: 0x000d, 0x3e3e: 0x000d, 0x3e3f: 0x000d, + // Block 0xf9, offset 0x3e40 + 0x3e40: 0x000a, 0x3e41: 0x000a, 0x3e42: 0x000a, 0x3e43: 0x000a, 0x3e44: 0x000a, 0x3e45: 0x000a, + 0x3e46: 0x000a, 0x3e47: 0x000a, 0x3e48: 0x000a, 0x3e49: 0x000a, 0x3e4a: 0x000a, 0x3e4b: 0x000a, + 0x3e4c: 0x000a, 0x3e4d: 0x000a, 0x3e4e: 0x000a, 0x3e4f: 0x000a, 0x3e50: 0x000a, 0x3e51: 0x000a, + 0x3e52: 0x000a, 0x3e53: 0x000a, 0x3e54: 0x000a, 0x3e55: 0x000a, 0x3e56: 0x000a, 0x3e57: 0x000a, + 0x3e58: 0x000a, 0x3e59: 0x000a, 0x3e5a: 0x000a, 0x3e5b: 0x000a, 0x3e5c: 0x000a, 0x3e5d: 0x000a, + 0x3e5e: 0x000a, 0x3e5f: 0x000a, 0x3e60: 0x000a, 0x3e61: 0x000a, 0x3e62: 0x000a, 0x3e63: 0x000a, + 0x3e64: 0x000a, 0x3e65: 0x000a, 0x3e66: 0x000a, 0x3e67: 0x000a, 0x3e68: 0x000a, 0x3e69: 0x000a, + 0x3e6a: 0x000a, 0x3e6b: 0x000a, + 0x3e70: 0x000a, 0x3e71: 0x000a, 0x3e72: 0x000a, 0x3e73: 0x000a, 0x3e74: 0x000a, 0x3e75: 0x000a, + 0x3e76: 0x000a, 0x3e77: 0x000a, 0x3e78: 0x000a, 0x3e79: 0x000a, 0x3e7a: 0x000a, 0x3e7b: 0x000a, + 0x3e7c: 0x000a, 0x3e7d: 0x000a, 0x3e7e: 0x000a, 0x3e7f: 0x000a, + // Block 0xfa, offset 0x3e80 + 0x3e80: 0x000a, 0x3e81: 0x000a, 0x3e82: 0x000a, 0x3e83: 0x000a, 0x3e84: 0x000a, 0x3e85: 0x000a, + 0x3e86: 0x000a, 0x3e87: 0x000a, 0x3e88: 0x000a, 0x3e89: 0x000a, 0x3e8a: 0x000a, 0x3e8b: 0x000a, + 0x3e8c: 0x000a, 0x3e8d: 0x000a, 0x3e8e: 0x000a, 0x3e8f: 0x000a, 0x3e90: 0x000a, 0x3e91: 0x000a, + 0x3e92: 0x000a, 0x3e93: 0x000a, + 0x3ea0: 0x000a, 0x3ea1: 0x000a, 0x3ea2: 0x000a, 0x3ea3: 0x000a, + 0x3ea4: 0x000a, 0x3ea5: 0x000a, 0x3ea6: 0x000a, 0x3ea7: 0x000a, 0x3ea8: 0x000a, 0x3ea9: 0x000a, + 0x3eaa: 0x000a, 0x3eab: 0x000a, 0x3eac: 0x000a, 0x3ead: 0x000a, 0x3eae: 0x000a, + 0x3eb1: 0x000a, 0x3eb2: 0x000a, 0x3eb3: 0x000a, 0x3eb4: 0x000a, 0x3eb5: 0x000a, + 0x3eb6: 0x000a, 0x3eb7: 0x000a, 0x3eb8: 0x000a, 0x3eb9: 0x000a, 0x3eba: 0x000a, 0x3ebb: 0x000a, + 0x3ebc: 0x000a, 0x3ebd: 0x000a, 0x3ebe: 0x000a, 0x3ebf: 0x000a, + // Block 0xfb, offset 0x3ec0 + 0x3ec1: 0x000a, 0x3ec2: 0x000a, 0x3ec3: 0x000a, 0x3ec4: 0x000a, 0x3ec5: 0x000a, + 0x3ec6: 0x000a, 0x3ec7: 0x000a, 0x3ec8: 0x000a, 0x3ec9: 0x000a, 0x3eca: 0x000a, 0x3ecb: 0x000a, + 0x3ecc: 0x000a, 0x3ecd: 0x000a, 0x3ece: 0x000a, 0x3ecf: 0x000a, 0x3ed1: 0x000a, + 0x3ed2: 0x000a, 0x3ed3: 0x000a, 0x3ed4: 0x000a, 0x3ed5: 0x000a, 0x3ed6: 0x000a, 0x3ed7: 0x000a, + 0x3ed8: 0x000a, 0x3ed9: 0x000a, 0x3eda: 0x000a, 0x3edb: 0x000a, 0x3edc: 0x000a, 0x3edd: 0x000a, + 0x3ede: 0x000a, 0x3edf: 0x000a, 0x3ee0: 0x000a, 0x3ee1: 0x000a, 0x3ee2: 0x000a, 0x3ee3: 0x000a, + 0x3ee4: 0x000a, 0x3ee5: 0x000a, 0x3ee6: 0x000a, 0x3ee7: 0x000a, 0x3ee8: 0x000a, 0x3ee9: 0x000a, + 0x3eea: 0x000a, 0x3eeb: 0x000a, 0x3eec: 0x000a, 0x3eed: 0x000a, 0x3eee: 0x000a, 0x3eef: 0x000a, + 0x3ef0: 0x000a, 0x3ef1: 0x000a, 0x3ef2: 0x000a, 0x3ef3: 0x000a, 0x3ef4: 0x000a, 0x3ef5: 0x000a, + // Block 0xfc, offset 0x3f00 + 0x3f00: 0x0002, 0x3f01: 0x0002, 0x3f02: 0x0002, 0x3f03: 0x0002, 0x3f04: 0x0002, 0x3f05: 0x0002, + 0x3f06: 0x0002, 0x3f07: 0x0002, 0x3f08: 0x0002, 0x3f09: 0x0002, 0x3f0a: 0x0002, 0x3f0b: 0x000a, + 0x3f0c: 0x000a, 0x3f0d: 0x000a, 0x3f0e: 0x000a, 0x3f0f: 0x000a, + 0x3f2f: 0x000a, + // Block 0xfd, offset 0x3f40 + 0x3f6a: 0x000a, 0x3f6b: 0x000a, 0x3f6c: 0x000a, 0x3f6d: 0x000a, 0x3f6e: 0x000a, 0x3f6f: 0x000a, + // Block 0xfe, offset 0x3f80 + 0x3fad: 0x000a, + // Block 0xff, offset 0x3fc0 + 0x3fe0: 0x000a, 0x3fe1: 0x000a, 0x3fe2: 0x000a, 0x3fe3: 0x000a, + 0x3fe4: 0x000a, 0x3fe5: 0x000a, + // Block 0x100, offset 0x4000 + 0x4000: 0x000a, 0x4001: 0x000a, 0x4002: 0x000a, 0x4003: 0x000a, 0x4004: 0x000a, 0x4005: 0x000a, + 0x4006: 0x000a, 0x4007: 0x000a, 0x4008: 0x000a, 0x4009: 0x000a, 0x400a: 0x000a, 0x400b: 0x000a, + 0x400c: 0x000a, 0x400d: 0x000a, 0x400e: 0x000a, 0x400f: 0x000a, 0x4010: 0x000a, 0x4011: 0x000a, + 0x4012: 0x000a, 0x4013: 0x000a, 0x4014: 0x000a, 0x4015: 0x000a, 0x4016: 0x000a, 0x4017: 0x000a, + 0x4018: 0x000a, 0x401c: 0x000a, 0x401d: 0x000a, + 0x401e: 0x000a, 0x401f: 0x000a, 0x4020: 0x000a, 0x4021: 0x000a, 0x4022: 0x000a, 0x4023: 0x000a, + 0x4024: 0x000a, 0x4025: 0x000a, 0x4026: 0x000a, 0x4027: 0x000a, 0x4028: 0x000a, 0x4029: 0x000a, + 0x402a: 0x000a, 0x402b: 0x000a, 0x402c: 0x000a, + 0x4030: 0x000a, 0x4031: 0x000a, 0x4032: 0x000a, 0x4033: 0x000a, 0x4034: 0x000a, 0x4035: 0x000a, + 0x4036: 0x000a, 0x4037: 0x000a, 0x4038: 0x000a, 0x4039: 0x000a, 0x403a: 0x000a, 0x403b: 0x000a, + 0x403c: 0x000a, + // Block 0x101, offset 0x4040 + 0x4040: 0x000a, 0x4041: 0x000a, 0x4042: 0x000a, 0x4043: 0x000a, 0x4044: 0x000a, 0x4045: 0x000a, + 0x4046: 0x000a, 0x4047: 0x000a, 0x4048: 0x000a, 0x4049: 0x000a, 0x404a: 0x000a, 0x404b: 0x000a, + 0x404c: 0x000a, 0x404d: 0x000a, 0x404e: 0x000a, 0x404f: 0x000a, 0x4050: 0x000a, 0x4051: 0x000a, + 0x4052: 0x000a, 0x4053: 0x000a, 0x4054: 0x000a, 0x4055: 0x000a, 0x4056: 0x000a, 0x4057: 0x000a, + 0x4058: 0x000a, 0x4059: 0x000a, + 0x4060: 0x000a, 0x4061: 0x000a, 0x4062: 0x000a, 0x4063: 0x000a, + 0x4064: 0x000a, 0x4065: 0x000a, 0x4066: 0x000a, 0x4067: 0x000a, 0x4068: 0x000a, 0x4069: 0x000a, + 0x406a: 0x000a, 0x406b: 0x000a, + 0x4070: 0x000a, + // Block 0x102, offset 0x4080 + 0x4080: 0x000a, 0x4081: 0x000a, 0x4082: 0x000a, 0x4083: 0x000a, 0x4084: 0x000a, 0x4085: 0x000a, + 0x4086: 0x000a, 0x4087: 0x000a, 0x4088: 0x000a, 0x4089: 0x000a, 0x408a: 0x000a, 0x408b: 0x000a, + 0x4090: 0x000a, 0x4091: 0x000a, + 0x4092: 0x000a, 0x4093: 0x000a, 0x4094: 0x000a, 0x4095: 0x000a, 0x4096: 0x000a, 0x4097: 0x000a, + 0x4098: 0x000a, 0x4099: 0x000a, 0x409a: 0x000a, 0x409b: 0x000a, 0x409c: 0x000a, 0x409d: 0x000a, + 0x409e: 0x000a, 0x409f: 0x000a, 0x40a0: 0x000a, 0x40a1: 0x000a, 0x40a2: 0x000a, 0x40a3: 0x000a, + 0x40a4: 0x000a, 0x40a5: 0x000a, 0x40a6: 0x000a, 0x40a7: 0x000a, 0x40a8: 0x000a, 0x40a9: 0x000a, + 0x40aa: 0x000a, 0x40ab: 0x000a, 0x40ac: 0x000a, 0x40ad: 0x000a, 0x40ae: 0x000a, 0x40af: 0x000a, + 0x40b0: 0x000a, 0x40b1: 0x000a, 0x40b2: 0x000a, 0x40b3: 0x000a, 0x40b4: 0x000a, 0x40b5: 0x000a, + 0x40b6: 0x000a, 0x40b7: 0x000a, 0x40b8: 0x000a, 0x40b9: 0x000a, 0x40ba: 0x000a, 0x40bb: 0x000a, + 0x40bc: 0x000a, 0x40bd: 0x000a, 0x40be: 0x000a, 0x40bf: 0x000a, + // Block 0x103, offset 0x40c0 + 0x40c0: 0x000a, 0x40c1: 0x000a, 0x40c2: 0x000a, 0x40c3: 0x000a, 0x40c4: 0x000a, 0x40c5: 0x000a, + 0x40c6: 0x000a, 0x40c7: 0x000a, + 0x40d0: 0x000a, 0x40d1: 0x000a, + 0x40d2: 0x000a, 0x40d3: 0x000a, 0x40d4: 0x000a, 0x40d5: 0x000a, 0x40d6: 0x000a, 0x40d7: 0x000a, + 0x40d8: 0x000a, 0x40d9: 0x000a, + 0x40e0: 0x000a, 0x40e1: 0x000a, 0x40e2: 0x000a, 0x40e3: 0x000a, + 0x40e4: 0x000a, 0x40e5: 0x000a, 0x40e6: 0x000a, 0x40e7: 0x000a, 0x40e8: 0x000a, 0x40e9: 0x000a, + 0x40ea: 0x000a, 0x40eb: 0x000a, 0x40ec: 0x000a, 0x40ed: 0x000a, 0x40ee: 0x000a, 0x40ef: 0x000a, + 0x40f0: 0x000a, 0x40f1: 0x000a, 0x40f2: 0x000a, 0x40f3: 0x000a, 0x40f4: 0x000a, 0x40f5: 0x000a, + 0x40f6: 0x000a, 0x40f7: 0x000a, 0x40f8: 0x000a, 0x40f9: 0x000a, 0x40fa: 0x000a, 0x40fb: 0x000a, + 0x40fc: 0x000a, 0x40fd: 0x000a, 0x40fe: 0x000a, 0x40ff: 0x000a, + // Block 0x104, offset 0x4100 + 0x4100: 0x000a, 0x4101: 0x000a, 0x4102: 0x000a, 0x4103: 0x000a, 0x4104: 0x000a, 0x4105: 0x000a, + 0x4106: 0x000a, 0x4107: 0x000a, + 0x4110: 0x000a, 0x4111: 0x000a, + 0x4112: 0x000a, 0x4113: 0x000a, 0x4114: 0x000a, 0x4115: 0x000a, 0x4116: 0x000a, 0x4117: 0x000a, + 0x4118: 0x000a, 0x4119: 0x000a, 0x411a: 0x000a, 0x411b: 0x000a, 0x411c: 0x000a, 0x411d: 0x000a, + 0x411e: 0x000a, 0x411f: 0x000a, 0x4120: 0x000a, 0x4121: 0x000a, 0x4122: 0x000a, 0x4123: 0x000a, + 0x4124: 0x000a, 0x4125: 0x000a, 0x4126: 0x000a, 0x4127: 0x000a, 0x4128: 0x000a, 0x4129: 0x000a, + 0x412a: 0x000a, 0x412b: 0x000a, 0x412c: 0x000a, 0x412d: 0x000a, + 0x4130: 0x000a, 0x4131: 0x000a, 0x4132: 0x000a, 0x4133: 0x000a, 0x4134: 0x000a, 0x4135: 0x000a, + 0x4136: 0x000a, 0x4137: 0x000a, 0x4138: 0x000a, 0x4139: 0x000a, 0x413a: 0x000a, 0x413b: 0x000a, + // Block 0x105, offset 0x4140 + 0x4140: 0x000a, 0x4141: 0x000a, + 0x4150: 0x000a, 0x4151: 0x000a, + 0x4152: 0x000a, 0x4153: 0x000a, 0x4154: 0x000a, 0x4155: 0x000a, 0x4156: 0x000a, 0x4157: 0x000a, + 0x4158: 0x000a, + // Block 0x106, offset 0x4180 + 0x4180: 0x000a, 0x4181: 0x000a, 0x4182: 0x000a, 0x4183: 0x000a, 0x4184: 0x000a, 0x4185: 0x000a, + 0x4186: 0x000a, 0x4187: 0x000a, 0x4188: 0x000a, 0x4189: 0x000a, 0x418a: 0x000a, 0x418b: 0x000a, + 0x418c: 0x000a, 0x418d: 0x000a, 0x418e: 0x000a, 0x418f: 0x000a, 0x4190: 0x000a, 0x4191: 0x000a, + 0x4192: 0x000a, 0x4193: 0x000a, 0x4194: 0x000a, 0x4195: 0x000a, 0x4196: 0x000a, 0x4197: 0x000a, + 0x41a0: 0x000a, 0x41a1: 0x000a, 0x41a2: 0x000a, 0x41a3: 0x000a, + 0x41a4: 0x000a, 0x41a5: 0x000a, 0x41a6: 0x000a, 0x41a7: 0x000a, 0x41a8: 0x000a, 0x41a9: 0x000a, + 0x41aa: 0x000a, 0x41ab: 0x000a, 0x41ac: 0x000a, 0x41ad: 0x000a, + 0x41b0: 0x000a, 0x41b1: 0x000a, 0x41b2: 0x000a, 0x41b3: 0x000a, 0x41b4: 0x000a, 0x41b5: 0x000a, + 0x41b6: 0x000a, 0x41b7: 0x000a, 0x41b8: 0x000a, 0x41b9: 0x000a, 0x41ba: 0x000a, 0x41bb: 0x000a, + 0x41bc: 0x000a, + // Block 0x107, offset 0x41c0 + 0x41c0: 0x000a, 0x41c1: 0x000a, 0x41c2: 0x000a, 0x41c3: 0x000a, 0x41c4: 0x000a, 0x41c5: 0x000a, + 0x41c6: 0x000a, 0x41c7: 0x000a, 0x41c8: 0x000a, 0x41c9: 0x000a, 0x41ca: 0x000a, + 0x41ce: 0x000a, 0x41cf: 0x000a, 0x41d0: 0x000a, 0x41d1: 0x000a, + 0x41d2: 0x000a, 0x41d3: 0x000a, 0x41d4: 0x000a, 0x41d5: 0x000a, 0x41d6: 0x000a, 0x41d7: 0x000a, + 0x41d8: 0x000a, 0x41d9: 0x000a, 0x41da: 0x000a, 0x41db: 0x000a, 0x41dc: 0x000a, 0x41dd: 0x000a, + 0x41de: 0x000a, 0x41df: 0x000a, 0x41e0: 0x000a, 0x41e1: 0x000a, 0x41e2: 0x000a, 0x41e3: 0x000a, + 0x41e4: 0x000a, 0x41e5: 0x000a, 0x41e6: 0x000a, 0x41e7: 0x000a, 0x41e8: 0x000a, 0x41e9: 0x000a, + 0x41ea: 0x000a, 0x41eb: 0x000a, 0x41ec: 0x000a, 0x41ed: 0x000a, 0x41ee: 0x000a, 0x41ef: 0x000a, + 0x41f0: 0x000a, 0x41f1: 0x000a, 0x41f2: 0x000a, 0x41f3: 0x000a, 0x41f4: 0x000a, 0x41f5: 0x000a, + 0x41f6: 0x000a, 0x41f7: 0x000a, 0x41f8: 0x000a, 0x41f9: 0x000a, 0x41fa: 0x000a, 0x41fb: 0x000a, + 0x41fc: 0x000a, 0x41fd: 0x000a, 0x41fe: 0x000a, 0x41ff: 0x000a, + // Block 0x108, offset 0x4200 + 0x4200: 0x000a, 0x4201: 0x000a, 0x4202: 0x000a, 0x4203: 0x000a, 0x4204: 0x000a, 0x4205: 0x000a, + 0x4206: 0x000a, 0x4208: 0x000a, + 0x420d: 0x000a, 0x420e: 0x000a, 0x420f: 0x000a, 0x4210: 0x000a, 0x4211: 0x000a, + 0x4212: 0x000a, 0x4213: 0x000a, 0x4214: 0x000a, 0x4215: 0x000a, 0x4216: 0x000a, 0x4217: 0x000a, + 0x4218: 0x000a, 0x4219: 0x000a, 0x421a: 0x000a, 0x421b: 0x000a, 0x421c: 0x000a, + 0x421f: 0x000a, 0x4220: 0x000a, 0x4221: 0x000a, 0x4222: 0x000a, 0x4223: 0x000a, + 0x4224: 0x000a, 0x4225: 0x000a, 0x4226: 0x000a, 0x4227: 0x000a, 0x4228: 0x000a, 0x4229: 0x000a, + 0x422a: 0x000a, 0x422f: 0x000a, + 0x4230: 0x000a, 0x4231: 0x000a, 0x4232: 0x000a, 0x4233: 0x000a, 0x4234: 0x000a, 0x4235: 0x000a, + 0x4236: 0x000a, 0x4237: 0x000a, 0x4238: 0x000a, + // Block 0x109, offset 0x4240 + 0x4240: 0x000a, 0x4241: 0x000a, 0x4242: 0x000a, 0x4243: 0x000a, 0x4244: 0x000a, 0x4245: 0x000a, + 0x4246: 0x000a, 0x4247: 0x000a, 0x4248: 0x000a, 0x4249: 0x000a, 0x424a: 0x000a, 0x424b: 0x000a, + 0x424c: 0x000a, 0x424d: 0x000a, 0x424e: 0x000a, 0x424f: 0x000a, 0x4250: 0x000a, 0x4251: 0x000a, + 0x4252: 0x000a, 0x4254: 0x000a, 0x4255: 0x000a, 0x4256: 0x000a, 0x4257: 0x000a, + 0x4258: 0x000a, 0x4259: 0x000a, 0x425a: 0x000a, 0x425b: 0x000a, 0x425c: 0x000a, 0x425d: 0x000a, + 0x425e: 0x000a, 0x425f: 0x000a, 0x4260: 0x000a, 0x4261: 0x000a, 0x4262: 0x000a, 0x4263: 0x000a, + 0x4264: 0x000a, 0x4265: 0x000a, 0x4266: 0x000a, 0x4267: 0x000a, 0x4268: 0x000a, 0x4269: 0x000a, + 0x426a: 0x000a, 0x426b: 0x000a, 0x426c: 0x000a, 0x426d: 0x000a, 0x426e: 0x000a, 0x426f: 0x000a, + 0x4270: 0x000a, 0x4271: 0x000a, 0x4272: 0x000a, 0x4273: 0x000a, 0x4274: 0x000a, 0x4275: 0x000a, + 0x4276: 0x000a, 0x4277: 0x000a, 0x4278: 0x000a, 0x4279: 0x000a, 0x427a: 0x000a, 0x427b: 0x000a, + 0x427c: 0x000a, 0x427d: 0x000a, 0x427e: 0x000a, 0x427f: 0x000a, + // Block 0x10a, offset 0x4280 + 0x4280: 0x000a, 0x4281: 0x000a, 0x4282: 0x000a, 0x4283: 0x000a, 0x4284: 0x000a, 0x4285: 0x000a, + 0x4286: 0x000a, 0x4287: 0x000a, 0x4288: 0x000a, 0x4289: 0x000a, 0x428a: 0x000a, 0x428b: 0x000a, + 0x428c: 0x000a, 0x428d: 0x000a, 0x428e: 0x000a, 0x428f: 0x000a, 0x4290: 0x000a, 0x4291: 0x000a, + 0x4292: 0x000a, 0x4293: 0x000a, 0x4294: 0x000a, 0x4295: 0x000a, 0x4296: 0x000a, 0x4297: 0x000a, + 0x4298: 0x000a, 0x4299: 0x000a, 0x429a: 0x000a, 0x429b: 0x000a, 0x429c: 0x000a, 0x429d: 0x000a, + 0x429e: 0x000a, 0x429f: 0x000a, 0x42a0: 0x000a, 0x42a1: 0x000a, 0x42a2: 0x000a, 0x42a3: 0x000a, + 0x42a4: 0x000a, 0x42a5: 0x000a, 0x42a6: 0x000a, 0x42a7: 0x000a, 0x42a8: 0x000a, 0x42a9: 0x000a, + 0x42aa: 0x000a, 0x42ab: 0x000a, 0x42ac: 0x000a, 0x42ad: 0x000a, 0x42ae: 0x000a, 0x42af: 0x000a, + 0x42b0: 0x0002, 0x42b1: 0x0002, 0x42b2: 0x0002, 0x42b3: 0x0002, 0x42b4: 0x0002, 0x42b5: 0x0002, + 0x42b6: 0x0002, 0x42b7: 0x0002, 0x42b8: 0x0002, 0x42b9: 0x0002, 0x42ba: 0x000a, + // Block 0x10b, offset 0x42c0 + 0x42fe: 0x000b, 0x42ff: 0x000b, + // Block 0x10c, offset 0x4300 + 0x4300: 0x000b, 0x4301: 0x000b, 0x4302: 0x000b, 0x4303: 0x000b, 0x4304: 0x000b, 0x4305: 0x000b, + 0x4306: 0x000b, 0x4307: 0x000b, 0x4308: 0x000b, 0x4309: 0x000b, 0x430a: 0x000b, 0x430b: 0x000b, + 0x430c: 0x000b, 0x430d: 0x000b, 0x430e: 0x000b, 0x430f: 0x000b, 0x4310: 0x000b, 0x4311: 0x000b, + 0x4312: 0x000b, 0x4313: 0x000b, 0x4314: 0x000b, 0x4315: 0x000b, 0x4316: 0x000b, 0x4317: 0x000b, + 0x4318: 0x000b, 0x4319: 0x000b, 0x431a: 0x000b, 0x431b: 0x000b, 0x431c: 0x000b, 0x431d: 0x000b, + 0x431e: 0x000b, 0x431f: 0x000b, 0x4320: 0x000b, 0x4321: 0x000b, 0x4322: 0x000b, 0x4323: 0x000b, + 0x4324: 0x000b, 0x4325: 0x000b, 0x4326: 0x000b, 0x4327: 0x000b, 0x4328: 0x000b, 0x4329: 0x000b, + 0x432a: 0x000b, 0x432b: 0x000b, 0x432c: 0x000b, 0x432d: 0x000b, 0x432e: 0x000b, 0x432f: 0x000b, + 0x4330: 0x000b, 0x4331: 0x000b, 0x4332: 0x000b, 0x4333: 0x000b, 0x4334: 0x000b, 0x4335: 0x000b, + 0x4336: 0x000b, 0x4337: 0x000b, 0x4338: 0x000b, 0x4339: 0x000b, 0x433a: 0x000b, 0x433b: 0x000b, + 0x433c: 0x000b, 0x433d: 0x000b, 0x433e: 0x000b, 0x433f: 0x000b, + // Block 0x10d, offset 0x4340 + 0x4340: 0x000c, 0x4341: 0x000c, 0x4342: 0x000c, 0x4343: 0x000c, 0x4344: 0x000c, 0x4345: 0x000c, + 0x4346: 0x000c, 0x4347: 0x000c, 0x4348: 0x000c, 0x4349: 0x000c, 0x434a: 0x000c, 0x434b: 0x000c, + 0x434c: 0x000c, 0x434d: 0x000c, 0x434e: 0x000c, 0x434f: 0x000c, 0x4350: 0x000c, 0x4351: 0x000c, + 0x4352: 0x000c, 0x4353: 0x000c, 0x4354: 0x000c, 0x4355: 0x000c, 0x4356: 0x000c, 0x4357: 0x000c, + 0x4358: 0x000c, 0x4359: 0x000c, 0x435a: 0x000c, 0x435b: 0x000c, 0x435c: 0x000c, 0x435d: 0x000c, + 0x435e: 0x000c, 0x435f: 0x000c, 0x4360: 0x000c, 0x4361: 0x000c, 0x4362: 0x000c, 0x4363: 0x000c, + 0x4364: 0x000c, 0x4365: 0x000c, 0x4366: 0x000c, 0x4367: 0x000c, 0x4368: 0x000c, 0x4369: 0x000c, + 0x436a: 0x000c, 0x436b: 0x000c, 0x436c: 0x000c, 0x436d: 0x000c, 0x436e: 0x000c, 0x436f: 0x000c, + 0x4370: 0x000b, 0x4371: 0x000b, 0x4372: 0x000b, 0x4373: 0x000b, 0x4374: 0x000b, 0x4375: 0x000b, + 0x4376: 0x000b, 0x4377: 0x000b, 0x4378: 0x000b, 0x4379: 0x000b, 0x437a: 0x000b, 0x437b: 0x000b, + 0x437c: 0x000b, 0x437d: 0x000b, 0x437e: 0x000b, 0x437f: 0x000b, +} + +// bidiIndex: 26 blocks, 1664 entries, 3328 bytes +// Block 0 is the zero block. +var bidiIndex = [1664]uint16{ + // Block 0x0, offset 0x0 + // Block 0x1, offset 0x40 + // Block 0x2, offset 0x80 + // Block 0x3, offset 0xc0 + 0xc2: 0x01, 0xc3: 0x02, + 0xca: 0x03, 0xcb: 0x04, 0xcc: 0x05, 0xcd: 0x06, 0xce: 0x07, 0xcf: 0x08, + 0xd2: 0x09, 0xd6: 0x0a, 0xd7: 0x0b, + 0xd8: 0x0c, 0xd9: 0x0d, 0xda: 0x0e, 0xdb: 0x0f, 0xdc: 0x10, 0xdd: 0x11, 0xde: 0x12, 0xdf: 0x13, + 0xe0: 0x02, 0xe1: 0x03, 0xe2: 0x04, 0xe3: 0x05, 0xe4: 0x06, + 0xea: 0x07, 0xef: 0x08, + 0xf0: 0x13, 0xf1: 0x14, 0xf2: 0x14, 0xf3: 0x16, 0xf4: 0x17, + // Block 0x4, offset 0x100 + 0x120: 0x14, 0x121: 0x15, 0x122: 0x16, 0x123: 0x17, 0x124: 0x18, 0x125: 0x19, 0x126: 0x1a, 0x127: 0x1b, + 0x128: 0x1c, 0x129: 0x1d, 0x12a: 0x1c, 0x12b: 0x1e, 0x12c: 0x1f, 0x12d: 0x20, 0x12e: 0x21, 0x12f: 0x22, + 0x130: 0x23, 0x131: 0x24, 0x132: 0x1a, 0x133: 0x25, 0x134: 0x26, 0x135: 0x27, 0x136: 0x28, 0x137: 0x29, + 0x138: 0x2a, 0x139: 0x2b, 0x13a: 0x2c, 0x13b: 0x2d, 0x13c: 0x2e, 0x13d: 0x2f, 0x13e: 0x30, 0x13f: 0x31, + // Block 0x5, offset 0x140 + 0x140: 0x32, 0x141: 0x33, 0x142: 0x34, + 0x14d: 0x35, 0x14e: 0x36, + 0x150: 0x37, + 0x15a: 0x38, 0x15c: 0x39, 0x15d: 0x3a, 0x15e: 0x3b, 0x15f: 0x3c, + 0x160: 0x3d, 0x162: 0x3e, 0x164: 0x3f, 0x165: 0x40, 0x167: 0x41, + 0x168: 0x42, 0x169: 0x43, 0x16a: 0x44, 0x16b: 0x45, 0x16c: 0x46, 0x16d: 0x47, 0x16e: 0x48, 0x16f: 0x49, + 0x170: 0x4a, 0x173: 0x4b, 0x177: 0x05, + 0x17e: 0x4c, 0x17f: 0x4d, + // Block 0x6, offset 0x180 + 0x180: 0x4e, 0x181: 0x4f, 0x182: 0x50, 0x183: 0x51, 0x184: 0x52, 0x185: 0x53, 0x186: 0x54, 0x187: 0x55, + 0x188: 0x56, 0x189: 0x55, 0x18a: 0x55, 0x18b: 0x55, 0x18c: 0x57, 0x18d: 0x58, 0x18e: 0x59, 0x18f: 0x55, + 0x190: 0x5a, 0x191: 0x5b, 0x192: 0x5c, 0x193: 0x5d, 0x194: 0x55, 0x195: 0x55, 0x196: 0x55, 0x197: 0x55, + 0x198: 0x55, 0x199: 0x55, 0x19a: 0x5e, 0x19b: 0x55, 0x19c: 0x55, 0x19d: 0x5f, 0x19e: 0x55, 0x19f: 0x60, + 0x1a4: 0x55, 0x1a5: 0x55, 0x1a6: 0x61, 0x1a7: 0x62, + 0x1a8: 0x55, 0x1a9: 0x55, 0x1aa: 0x55, 0x1ab: 0x55, 0x1ac: 0x55, 0x1ad: 0x63, 0x1ae: 0x55, 0x1af: 0x55, + 0x1b3: 0x64, 0x1b5: 0x65, 0x1b7: 0x66, + 0x1b8: 0x67, 0x1b9: 0x68, 0x1ba: 0x69, 0x1bb: 0x6a, 0x1bc: 0x55, 0x1bd: 0x55, 0x1be: 0x55, 0x1bf: 0x6b, + // Block 0x7, offset 0x1c0 + 0x1c0: 0x6c, 0x1c2: 0x6d, 0x1c3: 0x6e, 0x1c7: 0x6f, + 0x1c8: 0x70, 0x1c9: 0x71, 0x1ca: 0x72, 0x1cb: 0x73, 0x1cd: 0x74, 0x1cf: 0x75, + // Block 0x8, offset 0x200 + 0x237: 0x55, + // Block 0x9, offset 0x240 + 0x252: 0x76, 0x253: 0x77, + 0x258: 0x78, 0x259: 0x79, 0x25a: 0x7a, 0x25b: 0x7b, 0x25c: 0x7c, 0x25e: 0x7d, + 0x260: 0x7e, 0x261: 0x7f, 0x263: 0x80, 0x264: 0x81, 0x265: 0x82, 0x266: 0x83, 0x267: 0x84, + 0x268: 0x85, 0x269: 0x86, 0x26a: 0x87, 0x26b: 0x88, 0x26d: 0x89, 0x26f: 0x8a, + // Block 0xa, offset 0x280 + 0x2ac: 0x8b, 0x2ad: 0x8c, 0x2ae: 0x0e, 0x2af: 0x8d, + 0x2b0: 0x0e, 0x2b1: 0x0e, 0x2b2: 0x0e, 0x2b3: 0x0e, 0x2b4: 0x8e, 0x2b5: 0x8f, 0x2b6: 0x90, 0x2b7: 0x91, + 0x2b8: 0x92, 0x2b9: 0x93, 0x2ba: 0x0e, 0x2bb: 0x94, 0x2bc: 0x95, 0x2bd: 0x96, 0x2bf: 0x97, + // Block 0xb, offset 0x2c0 + 0x2c4: 0x98, 0x2c5: 0x55, 0x2c6: 0x99, 0x2c7: 0x9a, + 0x2cb: 0x9b, 0x2cd: 0x9c, + 0x2e0: 0x9d, 0x2e1: 0x9d, 0x2e2: 0x9d, 0x2e3: 0x9d, 0x2e4: 0x9e, 0x2e5: 0x9d, 0x2e6: 0x9d, 0x2e7: 0x9d, + 0x2e8: 0x9f, 0x2e9: 0x9d, 0x2ea: 0x9d, 0x2eb: 0xa0, 0x2ec: 0xa1, 0x2ed: 0x9d, 0x2ee: 0x9d, 0x2ef: 0x9d, + 0x2f0: 0x9d, 0x2f1: 0x9d, 0x2f2: 0x9d, 0x2f3: 0x9d, 0x2f4: 0xa2, 0x2f5: 0xa3, 0x2f6: 0x9d, 0x2f7: 0x9d, + 0x2f8: 0x9d, 0x2f9: 0xa4, 0x2fa: 0xa5, 0x2fb: 0xa6, 0x2fc: 0xa7, 0x2fd: 0xa8, 0x2fe: 0xa9, 0x2ff: 0x9d, + // Block 0xc, offset 0x300 + 0x300: 0xaa, 0x301: 0xab, 0x302: 0xac, 0x303: 0x21, 0x304: 0xad, 0x305: 0xae, 0x306: 0xaf, 0x307: 0xb0, + 0x308: 0xb1, 0x309: 0x28, 0x30b: 0xb2, 0x30c: 0x26, 0x30d: 0xb3, 0x30e: 0xb4, 0x30f: 0xb5, + 0x310: 0xb6, 0x311: 0xb7, 0x312: 0xb8, 0x313: 0xb9, 0x316: 0xba, 0x317: 0xbb, + 0x318: 0xbc, 0x319: 0xbd, 0x31a: 0xbe, 0x31c: 0xbf, + 0x320: 0xc0, 0x324: 0xc1, 0x325: 0xc2, 0x327: 0xc3, + 0x328: 0xc4, 0x329: 0xc5, 0x32a: 0xc6, 0x32d: 0xc7, + 0x330: 0xc8, 0x332: 0xc9, 0x334: 0xca, 0x335: 0xcb, 0x336: 0xcc, + 0x33b: 0xcd, 0x33c: 0xce, 0x33d: 0xcf, 0x33f: 0xd0, + // Block 0xd, offset 0x340 + 0x351: 0xd1, + // Block 0xe, offset 0x380 + 0x384: 0xd2, + 0x3ab: 0xd3, 0x3ac: 0xd4, + 0x3bd: 0xd5, 0x3be: 0xd6, 0x3bf: 0xd7, + // Block 0xf, offset 0x3c0 + 0x3f2: 0xd8, + // Block 0x10, offset 0x400 + 0x430: 0x55, 0x431: 0x55, 0x432: 0x55, 0x433: 0xd9, 0x434: 0x55, 0x435: 0x55, 0x436: 0x55, 0x437: 0x55, + 0x438: 0x55, 0x439: 0x55, 0x43a: 0xda, 0x43b: 0xdb, 0x43c: 0xdc, 0x43d: 0xdd, + // Block 0x11, offset 0x440 + 0x445: 0xde, 0x446: 0xdf, 0x447: 0xe0, + 0x448: 0x55, 0x449: 0xe1, 0x44c: 0x55, 0x44d: 0xe2, + 0x45b: 0xe3, 0x45c: 0xe4, 0x45d: 0xe5, 0x45e: 0xe6, 0x45f: 0xe7, + 0x468: 0xe8, 0x469: 0xe9, 0x46a: 0xea, + // Block 0x12, offset 0x480 + 0x480: 0xeb, 0x482: 0xd5, 0x484: 0xd4, + 0x48a: 0xec, 0x48b: 0xed, + 0x493: 0xee, 0x497: 0xef, + 0x49b: 0xf0, + 0x4a0: 0x9d, 0x4a1: 0x9d, 0x4a2: 0x9d, 0x4a3: 0xf1, 0x4a4: 0x9d, 0x4a5: 0xf2, 0x4a6: 0x9d, 0x4a7: 0x9d, + 0x4a8: 0x9d, 0x4a9: 0x9d, 0x4aa: 0x9d, 0x4ab: 0x9d, 0x4ac: 0x9d, 0x4ad: 0x9d, 0x4ae: 0x9d, 0x4af: 0x9d, + 0x4b0: 0x9d, 0x4b1: 0xf3, 0x4b2: 0xf4, 0x4b3: 0x9d, 0x4b4: 0xf5, 0x4b5: 0x9d, 0x4b6: 0x9d, 0x4b7: 0x9d, + 0x4b8: 0x0e, 0x4b9: 0x0e, 0x4ba: 0x0e, 0x4bb: 0xf6, 0x4bc: 0x9d, 0x4bd: 0x9d, 0x4be: 0x9d, 0x4bf: 0x9d, + // Block 0x13, offset 0x4c0 + 0x4c0: 0xf7, 0x4c1: 0x55, 0x4c2: 0xf8, 0x4c3: 0xf9, 0x4c4: 0xfa, 0x4c5: 0xfb, 0x4c6: 0xfc, + 0x4c9: 0xfd, 0x4cc: 0x55, 0x4cd: 0x55, 0x4ce: 0x55, 0x4cf: 0x55, + 0x4d0: 0x55, 0x4d1: 0x55, 0x4d2: 0x55, 0x4d3: 0x55, 0x4d4: 0x55, 0x4d5: 0x55, 0x4d6: 0x55, 0x4d7: 0x55, + 0x4d8: 0x55, 0x4d9: 0x55, 0x4da: 0x55, 0x4db: 0xfe, 0x4dc: 0x55, 0x4dd: 0x55, 0x4de: 0x55, 0x4df: 0xff, + 0x4e0: 0x100, 0x4e1: 0x101, 0x4e2: 0x102, 0x4e3: 0x103, 0x4e4: 0x55, 0x4e5: 0x55, 0x4e6: 0x55, 0x4e7: 0x55, + 0x4e8: 0x55, 0x4e9: 0x104, 0x4ea: 0x105, 0x4eb: 0x106, 0x4ec: 0x55, 0x4ed: 0x55, 0x4ee: 0x107, 0x4ef: 0x108, + 0x4ff: 0x109, + // Block 0x14, offset 0x500 + 0x53f: 0x109, + // Block 0x15, offset 0x540 + 0x550: 0x09, 0x551: 0x0a, 0x553: 0x0b, 0x556: 0x0c, + 0x55b: 0x0d, 0x55c: 0x0e, 0x55d: 0x0f, 0x55e: 0x10, 0x55f: 0x11, + 0x56f: 0x12, + 0x57f: 0x12, + // Block 0x16, offset 0x580 + 0x58f: 0x12, + 0x59f: 0x12, + 0x5af: 0x12, + 0x5bf: 0x12, + // Block 0x17, offset 0x5c0 + 0x5c0: 0x10a, 0x5c1: 0x10a, 0x5c2: 0x10a, 0x5c3: 0x10a, 0x5c4: 0x05, 0x5c5: 0x05, 0x5c6: 0x05, 0x5c7: 0x10b, + 0x5c8: 0x10a, 0x5c9: 0x10a, 0x5ca: 0x10a, 0x5cb: 0x10a, 0x5cc: 0x10a, 0x5cd: 0x10a, 0x5ce: 0x10a, 0x5cf: 0x10a, + 0x5d0: 0x10a, 0x5d1: 0x10a, 0x5d2: 0x10a, 0x5d3: 0x10a, 0x5d4: 0x10a, 0x5d5: 0x10a, 0x5d6: 0x10a, 0x5d7: 0x10a, + 0x5d8: 0x10a, 0x5d9: 0x10a, 0x5da: 0x10a, 0x5db: 0x10a, 0x5dc: 0x10a, 0x5dd: 0x10a, 0x5de: 0x10a, 0x5df: 0x10a, + 0x5e0: 0x10a, 0x5e1: 0x10a, 0x5e2: 0x10a, 0x5e3: 0x10a, 0x5e4: 0x10a, 0x5e5: 0x10a, 0x5e6: 0x10a, 0x5e7: 0x10a, + 0x5e8: 0x10a, 0x5e9: 0x10a, 0x5ea: 0x10a, 0x5eb: 0x10a, 0x5ec: 0x10a, 0x5ed: 0x10a, 0x5ee: 0x10a, 0x5ef: 0x10a, + 0x5f0: 0x10a, 0x5f1: 0x10a, 0x5f2: 0x10a, 0x5f3: 0x10a, 0x5f4: 0x10a, 0x5f5: 0x10a, 0x5f6: 0x10a, 0x5f7: 0x10a, + 0x5f8: 0x10a, 0x5f9: 0x10a, 0x5fa: 0x10a, 0x5fb: 0x10a, 0x5fc: 0x10a, 0x5fd: 0x10a, 0x5fe: 0x10a, 0x5ff: 0x10a, + // Block 0x18, offset 0x600 + 0x60f: 0x12, + 0x61f: 0x12, + 0x620: 0x15, + 0x62f: 0x12, + 0x63f: 0x12, + // Block 0x19, offset 0x640 + 0x64f: 0x12, +} + +// Total table size 20664 bytes (20KiB); checksum: F50EF68C diff --git a/vendor/golang.org/x/text/unicode/bidi/tables9.0.0.go b/vendor/golang.org/x/text/unicode/bidi/tables9.0.0.go deleted file mode 100644 index c164d37917..0000000000 --- a/vendor/golang.org/x/text/unicode/bidi/tables9.0.0.go +++ /dev/null @@ -1,1781 +0,0 @@ -// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. - -//go:build !go1.10 - -package bidi - -// UnicodeVersion is the Unicode version from which the tables in this package are derived. -const UnicodeVersion = "9.0.0" - -// xorMasks contains masks to be xor-ed with brackets to get the reverse -// version. -var xorMasks = []int32{ // 8 elements - 0, 1, 6, 7, 3, 15, 29, 63, -} // Size: 56 bytes - -// lookup returns the trie value for the first UTF-8 encoding in s and -// the width in bytes of this encoding. The size will be 0 if s does not -// hold enough bytes to complete the encoding. len(s) must be greater than 0. -func (t *bidiTrie) lookup(s []byte) (v uint8, sz int) { - c0 := s[0] - switch { - case c0 < 0x80: // is ASCII - return bidiValues[c0], 1 - case c0 < 0xC2: - return 0, 1 // Illegal UTF-8: not a starter, not ASCII. - case c0 < 0xE0: // 2-byte UTF-8 - if len(s) < 2 { - return 0, 0 - } - i := bidiIndex[c0] - c1 := s[1] - if c1 < 0x80 || 0xC0 <= c1 { - return 0, 1 // Illegal UTF-8: not a continuation byte. - } - return t.lookupValue(uint32(i), c1), 2 - case c0 < 0xF0: // 3-byte UTF-8 - if len(s) < 3 { - return 0, 0 - } - i := bidiIndex[c0] - c1 := s[1] - if c1 < 0x80 || 0xC0 <= c1 { - return 0, 1 // Illegal UTF-8: not a continuation byte. - } - o := uint32(i)<<6 + uint32(c1) - i = bidiIndex[o] - c2 := s[2] - if c2 < 0x80 || 0xC0 <= c2 { - return 0, 2 // Illegal UTF-8: not a continuation byte. - } - return t.lookupValue(uint32(i), c2), 3 - case c0 < 0xF8: // 4-byte UTF-8 - if len(s) < 4 { - return 0, 0 - } - i := bidiIndex[c0] - c1 := s[1] - if c1 < 0x80 || 0xC0 <= c1 { - return 0, 1 // Illegal UTF-8: not a continuation byte. - } - o := uint32(i)<<6 + uint32(c1) - i = bidiIndex[o] - c2 := s[2] - if c2 < 0x80 || 0xC0 <= c2 { - return 0, 2 // Illegal UTF-8: not a continuation byte. - } - o = uint32(i)<<6 + uint32(c2) - i = bidiIndex[o] - c3 := s[3] - if c3 < 0x80 || 0xC0 <= c3 { - return 0, 3 // Illegal UTF-8: not a continuation byte. - } - return t.lookupValue(uint32(i), c3), 4 - } - // Illegal rune - return 0, 1 -} - -// lookupUnsafe returns the trie value for the first UTF-8 encoding in s. -// s must start with a full and valid UTF-8 encoded rune. -func (t *bidiTrie) lookupUnsafe(s []byte) uint8 { - c0 := s[0] - if c0 < 0x80 { // is ASCII - return bidiValues[c0] - } - i := bidiIndex[c0] - if c0 < 0xE0 { // 2-byte UTF-8 - return t.lookupValue(uint32(i), s[1]) - } - i = bidiIndex[uint32(i)<<6+uint32(s[1])] - if c0 < 0xF0 { // 3-byte UTF-8 - return t.lookupValue(uint32(i), s[2]) - } - i = bidiIndex[uint32(i)<<6+uint32(s[2])] - if c0 < 0xF8 { // 4-byte UTF-8 - return t.lookupValue(uint32(i), s[3]) - } - return 0 -} - -// lookupString returns the trie value for the first UTF-8 encoding in s and -// the width in bytes of this encoding. The size will be 0 if s does not -// hold enough bytes to complete the encoding. len(s) must be greater than 0. -func (t *bidiTrie) lookupString(s string) (v uint8, sz int) { - c0 := s[0] - switch { - case c0 < 0x80: // is ASCII - return bidiValues[c0], 1 - case c0 < 0xC2: - return 0, 1 // Illegal UTF-8: not a starter, not ASCII. - case c0 < 0xE0: // 2-byte UTF-8 - if len(s) < 2 { - return 0, 0 - } - i := bidiIndex[c0] - c1 := s[1] - if c1 < 0x80 || 0xC0 <= c1 { - return 0, 1 // Illegal UTF-8: not a continuation byte. - } - return t.lookupValue(uint32(i), c1), 2 - case c0 < 0xF0: // 3-byte UTF-8 - if len(s) < 3 { - return 0, 0 - } - i := bidiIndex[c0] - c1 := s[1] - if c1 < 0x80 || 0xC0 <= c1 { - return 0, 1 // Illegal UTF-8: not a continuation byte. - } - o := uint32(i)<<6 + uint32(c1) - i = bidiIndex[o] - c2 := s[2] - if c2 < 0x80 || 0xC0 <= c2 { - return 0, 2 // Illegal UTF-8: not a continuation byte. - } - return t.lookupValue(uint32(i), c2), 3 - case c0 < 0xF8: // 4-byte UTF-8 - if len(s) < 4 { - return 0, 0 - } - i := bidiIndex[c0] - c1 := s[1] - if c1 < 0x80 || 0xC0 <= c1 { - return 0, 1 // Illegal UTF-8: not a continuation byte. - } - o := uint32(i)<<6 + uint32(c1) - i = bidiIndex[o] - c2 := s[2] - if c2 < 0x80 || 0xC0 <= c2 { - return 0, 2 // Illegal UTF-8: not a continuation byte. - } - o = uint32(i)<<6 + uint32(c2) - i = bidiIndex[o] - c3 := s[3] - if c3 < 0x80 || 0xC0 <= c3 { - return 0, 3 // Illegal UTF-8: not a continuation byte. - } - return t.lookupValue(uint32(i), c3), 4 - } - // Illegal rune - return 0, 1 -} - -// lookupStringUnsafe returns the trie value for the first UTF-8 encoding in s. -// s must start with a full and valid UTF-8 encoded rune. -func (t *bidiTrie) lookupStringUnsafe(s string) uint8 { - c0 := s[0] - if c0 < 0x80 { // is ASCII - return bidiValues[c0] - } - i := bidiIndex[c0] - if c0 < 0xE0 { // 2-byte UTF-8 - return t.lookupValue(uint32(i), s[1]) - } - i = bidiIndex[uint32(i)<<6+uint32(s[1])] - if c0 < 0xF0 { // 3-byte UTF-8 - return t.lookupValue(uint32(i), s[2]) - } - i = bidiIndex[uint32(i)<<6+uint32(s[2])] - if c0 < 0xF8 { // 4-byte UTF-8 - return t.lookupValue(uint32(i), s[3]) - } - return 0 -} - -// bidiTrie. Total size: 15744 bytes (15.38 KiB). Checksum: b4c3b70954803b86. -type bidiTrie struct{} - -func newBidiTrie(i int) *bidiTrie { - return &bidiTrie{} -} - -// lookupValue determines the type of block n and looks up the value for b. -func (t *bidiTrie) lookupValue(n uint32, b byte) uint8 { - switch { - default: - return uint8(bidiValues[n<<6+uint32(b)]) - } -} - -// bidiValues: 222 blocks, 14208 entries, 14208 bytes -// The third block is the zero block. -var bidiValues = [14208]uint8{ - // Block 0x0, offset 0x0 - 0x00: 0x000b, 0x01: 0x000b, 0x02: 0x000b, 0x03: 0x000b, 0x04: 0x000b, 0x05: 0x000b, - 0x06: 0x000b, 0x07: 0x000b, 0x08: 0x000b, 0x09: 0x0008, 0x0a: 0x0007, 0x0b: 0x0008, - 0x0c: 0x0009, 0x0d: 0x0007, 0x0e: 0x000b, 0x0f: 0x000b, 0x10: 0x000b, 0x11: 0x000b, - 0x12: 0x000b, 0x13: 0x000b, 0x14: 0x000b, 0x15: 0x000b, 0x16: 0x000b, 0x17: 0x000b, - 0x18: 0x000b, 0x19: 0x000b, 0x1a: 0x000b, 0x1b: 0x000b, 0x1c: 0x0007, 0x1d: 0x0007, - 0x1e: 0x0007, 0x1f: 0x0008, 0x20: 0x0009, 0x21: 0x000a, 0x22: 0x000a, 0x23: 0x0004, - 0x24: 0x0004, 0x25: 0x0004, 0x26: 0x000a, 0x27: 0x000a, 0x28: 0x003a, 0x29: 0x002a, - 0x2a: 0x000a, 0x2b: 0x0003, 0x2c: 0x0006, 0x2d: 0x0003, 0x2e: 0x0006, 0x2f: 0x0006, - 0x30: 0x0002, 0x31: 0x0002, 0x32: 0x0002, 0x33: 0x0002, 0x34: 0x0002, 0x35: 0x0002, - 0x36: 0x0002, 0x37: 0x0002, 0x38: 0x0002, 0x39: 0x0002, 0x3a: 0x0006, 0x3b: 0x000a, - 0x3c: 0x000a, 0x3d: 0x000a, 0x3e: 0x000a, 0x3f: 0x000a, - // Block 0x1, offset 0x40 - 0x40: 0x000a, - 0x5b: 0x005a, 0x5c: 0x000a, 0x5d: 0x004a, - 0x5e: 0x000a, 0x5f: 0x000a, 0x60: 0x000a, - 0x7b: 0x005a, - 0x7c: 0x000a, 0x7d: 0x004a, 0x7e: 0x000a, 0x7f: 0x000b, - // Block 0x2, offset 0x80 - // Block 0x3, offset 0xc0 - 0xc0: 0x000b, 0xc1: 0x000b, 0xc2: 0x000b, 0xc3: 0x000b, 0xc4: 0x000b, 0xc5: 0x0007, - 0xc6: 0x000b, 0xc7: 0x000b, 0xc8: 0x000b, 0xc9: 0x000b, 0xca: 0x000b, 0xcb: 0x000b, - 0xcc: 0x000b, 0xcd: 0x000b, 0xce: 0x000b, 0xcf: 0x000b, 0xd0: 0x000b, 0xd1: 0x000b, - 0xd2: 0x000b, 0xd3: 0x000b, 0xd4: 0x000b, 0xd5: 0x000b, 0xd6: 0x000b, 0xd7: 0x000b, - 0xd8: 0x000b, 0xd9: 0x000b, 0xda: 0x000b, 0xdb: 0x000b, 0xdc: 0x000b, 0xdd: 0x000b, - 0xde: 0x000b, 0xdf: 0x000b, 0xe0: 0x0006, 0xe1: 0x000a, 0xe2: 0x0004, 0xe3: 0x0004, - 0xe4: 0x0004, 0xe5: 0x0004, 0xe6: 0x000a, 0xe7: 0x000a, 0xe8: 0x000a, 0xe9: 0x000a, - 0xeb: 0x000a, 0xec: 0x000a, 0xed: 0x000b, 0xee: 0x000a, 0xef: 0x000a, - 0xf0: 0x0004, 0xf1: 0x0004, 0xf2: 0x0002, 0xf3: 0x0002, 0xf4: 0x000a, - 0xf6: 0x000a, 0xf7: 0x000a, 0xf8: 0x000a, 0xf9: 0x0002, 0xfb: 0x000a, - 0xfc: 0x000a, 0xfd: 0x000a, 0xfe: 0x000a, 0xff: 0x000a, - // Block 0x4, offset 0x100 - 0x117: 0x000a, - 0x137: 0x000a, - // Block 0x5, offset 0x140 - 0x179: 0x000a, 0x17a: 0x000a, - // Block 0x6, offset 0x180 - 0x182: 0x000a, 0x183: 0x000a, 0x184: 0x000a, 0x185: 0x000a, - 0x186: 0x000a, 0x187: 0x000a, 0x188: 0x000a, 0x189: 0x000a, 0x18a: 0x000a, 0x18b: 0x000a, - 0x18c: 0x000a, 0x18d: 0x000a, 0x18e: 0x000a, 0x18f: 0x000a, - 0x192: 0x000a, 0x193: 0x000a, 0x194: 0x000a, 0x195: 0x000a, 0x196: 0x000a, 0x197: 0x000a, - 0x198: 0x000a, 0x199: 0x000a, 0x19a: 0x000a, 0x19b: 0x000a, 0x19c: 0x000a, 0x19d: 0x000a, - 0x19e: 0x000a, 0x19f: 0x000a, - 0x1a5: 0x000a, 0x1a6: 0x000a, 0x1a7: 0x000a, 0x1a8: 0x000a, 0x1a9: 0x000a, - 0x1aa: 0x000a, 0x1ab: 0x000a, 0x1ac: 0x000a, 0x1ad: 0x000a, 0x1af: 0x000a, - 0x1b0: 0x000a, 0x1b1: 0x000a, 0x1b2: 0x000a, 0x1b3: 0x000a, 0x1b4: 0x000a, 0x1b5: 0x000a, - 0x1b6: 0x000a, 0x1b7: 0x000a, 0x1b8: 0x000a, 0x1b9: 0x000a, 0x1ba: 0x000a, 0x1bb: 0x000a, - 0x1bc: 0x000a, 0x1bd: 0x000a, 0x1be: 0x000a, 0x1bf: 0x000a, - // Block 0x7, offset 0x1c0 - 0x1c0: 0x000c, 0x1c1: 0x000c, 0x1c2: 0x000c, 0x1c3: 0x000c, 0x1c4: 0x000c, 0x1c5: 0x000c, - 0x1c6: 0x000c, 0x1c7: 0x000c, 0x1c8: 0x000c, 0x1c9: 0x000c, 0x1ca: 0x000c, 0x1cb: 0x000c, - 0x1cc: 0x000c, 0x1cd: 0x000c, 0x1ce: 0x000c, 0x1cf: 0x000c, 0x1d0: 0x000c, 0x1d1: 0x000c, - 0x1d2: 0x000c, 0x1d3: 0x000c, 0x1d4: 0x000c, 0x1d5: 0x000c, 0x1d6: 0x000c, 0x1d7: 0x000c, - 0x1d8: 0x000c, 0x1d9: 0x000c, 0x1da: 0x000c, 0x1db: 0x000c, 0x1dc: 0x000c, 0x1dd: 0x000c, - 0x1de: 0x000c, 0x1df: 0x000c, 0x1e0: 0x000c, 0x1e1: 0x000c, 0x1e2: 0x000c, 0x1e3: 0x000c, - 0x1e4: 0x000c, 0x1e5: 0x000c, 0x1e6: 0x000c, 0x1e7: 0x000c, 0x1e8: 0x000c, 0x1e9: 0x000c, - 0x1ea: 0x000c, 0x1eb: 0x000c, 0x1ec: 0x000c, 0x1ed: 0x000c, 0x1ee: 0x000c, 0x1ef: 0x000c, - 0x1f0: 0x000c, 0x1f1: 0x000c, 0x1f2: 0x000c, 0x1f3: 0x000c, 0x1f4: 0x000c, 0x1f5: 0x000c, - 0x1f6: 0x000c, 0x1f7: 0x000c, 0x1f8: 0x000c, 0x1f9: 0x000c, 0x1fa: 0x000c, 0x1fb: 0x000c, - 0x1fc: 0x000c, 0x1fd: 0x000c, 0x1fe: 0x000c, 0x1ff: 0x000c, - // Block 0x8, offset 0x200 - 0x200: 0x000c, 0x201: 0x000c, 0x202: 0x000c, 0x203: 0x000c, 0x204: 0x000c, 0x205: 0x000c, - 0x206: 0x000c, 0x207: 0x000c, 0x208: 0x000c, 0x209: 0x000c, 0x20a: 0x000c, 0x20b: 0x000c, - 0x20c: 0x000c, 0x20d: 0x000c, 0x20e: 0x000c, 0x20f: 0x000c, 0x210: 0x000c, 0x211: 0x000c, - 0x212: 0x000c, 0x213: 0x000c, 0x214: 0x000c, 0x215: 0x000c, 0x216: 0x000c, 0x217: 0x000c, - 0x218: 0x000c, 0x219: 0x000c, 0x21a: 0x000c, 0x21b: 0x000c, 0x21c: 0x000c, 0x21d: 0x000c, - 0x21e: 0x000c, 0x21f: 0x000c, 0x220: 0x000c, 0x221: 0x000c, 0x222: 0x000c, 0x223: 0x000c, - 0x224: 0x000c, 0x225: 0x000c, 0x226: 0x000c, 0x227: 0x000c, 0x228: 0x000c, 0x229: 0x000c, - 0x22a: 0x000c, 0x22b: 0x000c, 0x22c: 0x000c, 0x22d: 0x000c, 0x22e: 0x000c, 0x22f: 0x000c, - 0x234: 0x000a, 0x235: 0x000a, - 0x23e: 0x000a, - // Block 0x9, offset 0x240 - 0x244: 0x000a, 0x245: 0x000a, - 0x247: 0x000a, - // Block 0xa, offset 0x280 - 0x2b6: 0x000a, - // Block 0xb, offset 0x2c0 - 0x2c3: 0x000c, 0x2c4: 0x000c, 0x2c5: 0x000c, - 0x2c6: 0x000c, 0x2c7: 0x000c, 0x2c8: 0x000c, 0x2c9: 0x000c, - // Block 0xc, offset 0x300 - 0x30a: 0x000a, - 0x30d: 0x000a, 0x30e: 0x000a, 0x30f: 0x0004, 0x310: 0x0001, 0x311: 0x000c, - 0x312: 0x000c, 0x313: 0x000c, 0x314: 0x000c, 0x315: 0x000c, 0x316: 0x000c, 0x317: 0x000c, - 0x318: 0x000c, 0x319: 0x000c, 0x31a: 0x000c, 0x31b: 0x000c, 0x31c: 0x000c, 0x31d: 0x000c, - 0x31e: 0x000c, 0x31f: 0x000c, 0x320: 0x000c, 0x321: 0x000c, 0x322: 0x000c, 0x323: 0x000c, - 0x324: 0x000c, 0x325: 0x000c, 0x326: 0x000c, 0x327: 0x000c, 0x328: 0x000c, 0x329: 0x000c, - 0x32a: 0x000c, 0x32b: 0x000c, 0x32c: 0x000c, 0x32d: 0x000c, 0x32e: 0x000c, 0x32f: 0x000c, - 0x330: 0x000c, 0x331: 0x000c, 0x332: 0x000c, 0x333: 0x000c, 0x334: 0x000c, 0x335: 0x000c, - 0x336: 0x000c, 0x337: 0x000c, 0x338: 0x000c, 0x339: 0x000c, 0x33a: 0x000c, 0x33b: 0x000c, - 0x33c: 0x000c, 0x33d: 0x000c, 0x33e: 0x0001, 0x33f: 0x000c, - // Block 0xd, offset 0x340 - 0x340: 0x0001, 0x341: 0x000c, 0x342: 0x000c, 0x343: 0x0001, 0x344: 0x000c, 0x345: 0x000c, - 0x346: 0x0001, 0x347: 0x000c, 0x348: 0x0001, 0x349: 0x0001, 0x34a: 0x0001, 0x34b: 0x0001, - 0x34c: 0x0001, 0x34d: 0x0001, 0x34e: 0x0001, 0x34f: 0x0001, 0x350: 0x0001, 0x351: 0x0001, - 0x352: 0x0001, 0x353: 0x0001, 0x354: 0x0001, 0x355: 0x0001, 0x356: 0x0001, 0x357: 0x0001, - 0x358: 0x0001, 0x359: 0x0001, 0x35a: 0x0001, 0x35b: 0x0001, 0x35c: 0x0001, 0x35d: 0x0001, - 0x35e: 0x0001, 0x35f: 0x0001, 0x360: 0x0001, 0x361: 0x0001, 0x362: 0x0001, 0x363: 0x0001, - 0x364: 0x0001, 0x365: 0x0001, 0x366: 0x0001, 0x367: 0x0001, 0x368: 0x0001, 0x369: 0x0001, - 0x36a: 0x0001, 0x36b: 0x0001, 0x36c: 0x0001, 0x36d: 0x0001, 0x36e: 0x0001, 0x36f: 0x0001, - 0x370: 0x0001, 0x371: 0x0001, 0x372: 0x0001, 0x373: 0x0001, 0x374: 0x0001, 0x375: 0x0001, - 0x376: 0x0001, 0x377: 0x0001, 0x378: 0x0001, 0x379: 0x0001, 0x37a: 0x0001, 0x37b: 0x0001, - 0x37c: 0x0001, 0x37d: 0x0001, 0x37e: 0x0001, 0x37f: 0x0001, - // Block 0xe, offset 0x380 - 0x380: 0x0005, 0x381: 0x0005, 0x382: 0x0005, 0x383: 0x0005, 0x384: 0x0005, 0x385: 0x0005, - 0x386: 0x000a, 0x387: 0x000a, 0x388: 0x000d, 0x389: 0x0004, 0x38a: 0x0004, 0x38b: 0x000d, - 0x38c: 0x0006, 0x38d: 0x000d, 0x38e: 0x000a, 0x38f: 0x000a, 0x390: 0x000c, 0x391: 0x000c, - 0x392: 0x000c, 0x393: 0x000c, 0x394: 0x000c, 0x395: 0x000c, 0x396: 0x000c, 0x397: 0x000c, - 0x398: 0x000c, 0x399: 0x000c, 0x39a: 0x000c, 0x39b: 0x000d, 0x39c: 0x000d, 0x39d: 0x000d, - 0x39e: 0x000d, 0x39f: 0x000d, 0x3a0: 0x000d, 0x3a1: 0x000d, 0x3a2: 0x000d, 0x3a3: 0x000d, - 0x3a4: 0x000d, 0x3a5: 0x000d, 0x3a6: 0x000d, 0x3a7: 0x000d, 0x3a8: 0x000d, 0x3a9: 0x000d, - 0x3aa: 0x000d, 0x3ab: 0x000d, 0x3ac: 0x000d, 0x3ad: 0x000d, 0x3ae: 0x000d, 0x3af: 0x000d, - 0x3b0: 0x000d, 0x3b1: 0x000d, 0x3b2: 0x000d, 0x3b3: 0x000d, 0x3b4: 0x000d, 0x3b5: 0x000d, - 0x3b6: 0x000d, 0x3b7: 0x000d, 0x3b8: 0x000d, 0x3b9: 0x000d, 0x3ba: 0x000d, 0x3bb: 0x000d, - 0x3bc: 0x000d, 0x3bd: 0x000d, 0x3be: 0x000d, 0x3bf: 0x000d, - // Block 0xf, offset 0x3c0 - 0x3c0: 0x000d, 0x3c1: 0x000d, 0x3c2: 0x000d, 0x3c3: 0x000d, 0x3c4: 0x000d, 0x3c5: 0x000d, - 0x3c6: 0x000d, 0x3c7: 0x000d, 0x3c8: 0x000d, 0x3c9: 0x000d, 0x3ca: 0x000d, 0x3cb: 0x000c, - 0x3cc: 0x000c, 0x3cd: 0x000c, 0x3ce: 0x000c, 0x3cf: 0x000c, 0x3d0: 0x000c, 0x3d1: 0x000c, - 0x3d2: 0x000c, 0x3d3: 0x000c, 0x3d4: 0x000c, 0x3d5: 0x000c, 0x3d6: 0x000c, 0x3d7: 0x000c, - 0x3d8: 0x000c, 0x3d9: 0x000c, 0x3da: 0x000c, 0x3db: 0x000c, 0x3dc: 0x000c, 0x3dd: 0x000c, - 0x3de: 0x000c, 0x3df: 0x000c, 0x3e0: 0x0005, 0x3e1: 0x0005, 0x3e2: 0x0005, 0x3e3: 0x0005, - 0x3e4: 0x0005, 0x3e5: 0x0005, 0x3e6: 0x0005, 0x3e7: 0x0005, 0x3e8: 0x0005, 0x3e9: 0x0005, - 0x3ea: 0x0004, 0x3eb: 0x0005, 0x3ec: 0x0005, 0x3ed: 0x000d, 0x3ee: 0x000d, 0x3ef: 0x000d, - 0x3f0: 0x000c, 0x3f1: 0x000d, 0x3f2: 0x000d, 0x3f3: 0x000d, 0x3f4: 0x000d, 0x3f5: 0x000d, - 0x3f6: 0x000d, 0x3f7: 0x000d, 0x3f8: 0x000d, 0x3f9: 0x000d, 0x3fa: 0x000d, 0x3fb: 0x000d, - 0x3fc: 0x000d, 0x3fd: 0x000d, 0x3fe: 0x000d, 0x3ff: 0x000d, - // Block 0x10, offset 0x400 - 0x400: 0x000d, 0x401: 0x000d, 0x402: 0x000d, 0x403: 0x000d, 0x404: 0x000d, 0x405: 0x000d, - 0x406: 0x000d, 0x407: 0x000d, 0x408: 0x000d, 0x409: 0x000d, 0x40a: 0x000d, 0x40b: 0x000d, - 0x40c: 0x000d, 0x40d: 0x000d, 0x40e: 0x000d, 0x40f: 0x000d, 0x410: 0x000d, 0x411: 0x000d, - 0x412: 0x000d, 0x413: 0x000d, 0x414: 0x000d, 0x415: 0x000d, 0x416: 0x000d, 0x417: 0x000d, - 0x418: 0x000d, 0x419: 0x000d, 0x41a: 0x000d, 0x41b: 0x000d, 0x41c: 0x000d, 0x41d: 0x000d, - 0x41e: 0x000d, 0x41f: 0x000d, 0x420: 0x000d, 0x421: 0x000d, 0x422: 0x000d, 0x423: 0x000d, - 0x424: 0x000d, 0x425: 0x000d, 0x426: 0x000d, 0x427: 0x000d, 0x428: 0x000d, 0x429: 0x000d, - 0x42a: 0x000d, 0x42b: 0x000d, 0x42c: 0x000d, 0x42d: 0x000d, 0x42e: 0x000d, 0x42f: 0x000d, - 0x430: 0x000d, 0x431: 0x000d, 0x432: 0x000d, 0x433: 0x000d, 0x434: 0x000d, 0x435: 0x000d, - 0x436: 0x000d, 0x437: 0x000d, 0x438: 0x000d, 0x439: 0x000d, 0x43a: 0x000d, 0x43b: 0x000d, - 0x43c: 0x000d, 0x43d: 0x000d, 0x43e: 0x000d, 0x43f: 0x000d, - // Block 0x11, offset 0x440 - 0x440: 0x000d, 0x441: 0x000d, 0x442: 0x000d, 0x443: 0x000d, 0x444: 0x000d, 0x445: 0x000d, - 0x446: 0x000d, 0x447: 0x000d, 0x448: 0x000d, 0x449: 0x000d, 0x44a: 0x000d, 0x44b: 0x000d, - 0x44c: 0x000d, 0x44d: 0x000d, 0x44e: 0x000d, 0x44f: 0x000d, 0x450: 0x000d, 0x451: 0x000d, - 0x452: 0x000d, 0x453: 0x000d, 0x454: 0x000d, 0x455: 0x000d, 0x456: 0x000c, 0x457: 0x000c, - 0x458: 0x000c, 0x459: 0x000c, 0x45a: 0x000c, 0x45b: 0x000c, 0x45c: 0x000c, 0x45d: 0x0005, - 0x45e: 0x000a, 0x45f: 0x000c, 0x460: 0x000c, 0x461: 0x000c, 0x462: 0x000c, 0x463: 0x000c, - 0x464: 0x000c, 0x465: 0x000d, 0x466: 0x000d, 0x467: 0x000c, 0x468: 0x000c, 0x469: 0x000a, - 0x46a: 0x000c, 0x46b: 0x000c, 0x46c: 0x000c, 0x46d: 0x000c, 0x46e: 0x000d, 0x46f: 0x000d, - 0x470: 0x0002, 0x471: 0x0002, 0x472: 0x0002, 0x473: 0x0002, 0x474: 0x0002, 0x475: 0x0002, - 0x476: 0x0002, 0x477: 0x0002, 0x478: 0x0002, 0x479: 0x0002, 0x47a: 0x000d, 0x47b: 0x000d, - 0x47c: 0x000d, 0x47d: 0x000d, 0x47e: 0x000d, 0x47f: 0x000d, - // Block 0x12, offset 0x480 - 0x480: 0x000d, 0x481: 0x000d, 0x482: 0x000d, 0x483: 0x000d, 0x484: 0x000d, 0x485: 0x000d, - 0x486: 0x000d, 0x487: 0x000d, 0x488: 0x000d, 0x489: 0x000d, 0x48a: 0x000d, 0x48b: 0x000d, - 0x48c: 0x000d, 0x48d: 0x000d, 0x48e: 0x000d, 0x48f: 0x000d, 0x490: 0x000d, 0x491: 0x000c, - 0x492: 0x000d, 0x493: 0x000d, 0x494: 0x000d, 0x495: 0x000d, 0x496: 0x000d, 0x497: 0x000d, - 0x498: 0x000d, 0x499: 0x000d, 0x49a: 0x000d, 0x49b: 0x000d, 0x49c: 0x000d, 0x49d: 0x000d, - 0x49e: 0x000d, 0x49f: 0x000d, 0x4a0: 0x000d, 0x4a1: 0x000d, 0x4a2: 0x000d, 0x4a3: 0x000d, - 0x4a4: 0x000d, 0x4a5: 0x000d, 0x4a6: 0x000d, 0x4a7: 0x000d, 0x4a8: 0x000d, 0x4a9: 0x000d, - 0x4aa: 0x000d, 0x4ab: 0x000d, 0x4ac: 0x000d, 0x4ad: 0x000d, 0x4ae: 0x000d, 0x4af: 0x000d, - 0x4b0: 0x000c, 0x4b1: 0x000c, 0x4b2: 0x000c, 0x4b3: 0x000c, 0x4b4: 0x000c, 0x4b5: 0x000c, - 0x4b6: 0x000c, 0x4b7: 0x000c, 0x4b8: 0x000c, 0x4b9: 0x000c, 0x4ba: 0x000c, 0x4bb: 0x000c, - 0x4bc: 0x000c, 0x4bd: 0x000c, 0x4be: 0x000c, 0x4bf: 0x000c, - // Block 0x13, offset 0x4c0 - 0x4c0: 0x000c, 0x4c1: 0x000c, 0x4c2: 0x000c, 0x4c3: 0x000c, 0x4c4: 0x000c, 0x4c5: 0x000c, - 0x4c6: 0x000c, 0x4c7: 0x000c, 0x4c8: 0x000c, 0x4c9: 0x000c, 0x4ca: 0x000c, 0x4cb: 0x000d, - 0x4cc: 0x000d, 0x4cd: 0x000d, 0x4ce: 0x000d, 0x4cf: 0x000d, 0x4d0: 0x000d, 0x4d1: 0x000d, - 0x4d2: 0x000d, 0x4d3: 0x000d, 0x4d4: 0x000d, 0x4d5: 0x000d, 0x4d6: 0x000d, 0x4d7: 0x000d, - 0x4d8: 0x000d, 0x4d9: 0x000d, 0x4da: 0x000d, 0x4db: 0x000d, 0x4dc: 0x000d, 0x4dd: 0x000d, - 0x4de: 0x000d, 0x4df: 0x000d, 0x4e0: 0x000d, 0x4e1: 0x000d, 0x4e2: 0x000d, 0x4e3: 0x000d, - 0x4e4: 0x000d, 0x4e5: 0x000d, 0x4e6: 0x000d, 0x4e7: 0x000d, 0x4e8: 0x000d, 0x4e9: 0x000d, - 0x4ea: 0x000d, 0x4eb: 0x000d, 0x4ec: 0x000d, 0x4ed: 0x000d, 0x4ee: 0x000d, 0x4ef: 0x000d, - 0x4f0: 0x000d, 0x4f1: 0x000d, 0x4f2: 0x000d, 0x4f3: 0x000d, 0x4f4: 0x000d, 0x4f5: 0x000d, - 0x4f6: 0x000d, 0x4f7: 0x000d, 0x4f8: 0x000d, 0x4f9: 0x000d, 0x4fa: 0x000d, 0x4fb: 0x000d, - 0x4fc: 0x000d, 0x4fd: 0x000d, 0x4fe: 0x000d, 0x4ff: 0x000d, - // Block 0x14, offset 0x500 - 0x500: 0x000d, 0x501: 0x000d, 0x502: 0x000d, 0x503: 0x000d, 0x504: 0x000d, 0x505: 0x000d, - 0x506: 0x000d, 0x507: 0x000d, 0x508: 0x000d, 0x509: 0x000d, 0x50a: 0x000d, 0x50b: 0x000d, - 0x50c: 0x000d, 0x50d: 0x000d, 0x50e: 0x000d, 0x50f: 0x000d, 0x510: 0x000d, 0x511: 0x000d, - 0x512: 0x000d, 0x513: 0x000d, 0x514: 0x000d, 0x515: 0x000d, 0x516: 0x000d, 0x517: 0x000d, - 0x518: 0x000d, 0x519: 0x000d, 0x51a: 0x000d, 0x51b: 0x000d, 0x51c: 0x000d, 0x51d: 0x000d, - 0x51e: 0x000d, 0x51f: 0x000d, 0x520: 0x000d, 0x521: 0x000d, 0x522: 0x000d, 0x523: 0x000d, - 0x524: 0x000d, 0x525: 0x000d, 0x526: 0x000c, 0x527: 0x000c, 0x528: 0x000c, 0x529: 0x000c, - 0x52a: 0x000c, 0x52b: 0x000c, 0x52c: 0x000c, 0x52d: 0x000c, 0x52e: 0x000c, 0x52f: 0x000c, - 0x530: 0x000c, 0x531: 0x000d, 0x532: 0x000d, 0x533: 0x000d, 0x534: 0x000d, 0x535: 0x000d, - 0x536: 0x000d, 0x537: 0x000d, 0x538: 0x000d, 0x539: 0x000d, 0x53a: 0x000d, 0x53b: 0x000d, - 0x53c: 0x000d, 0x53d: 0x000d, 0x53e: 0x000d, 0x53f: 0x000d, - // Block 0x15, offset 0x540 - 0x540: 0x0001, 0x541: 0x0001, 0x542: 0x0001, 0x543: 0x0001, 0x544: 0x0001, 0x545: 0x0001, - 0x546: 0x0001, 0x547: 0x0001, 0x548: 0x0001, 0x549: 0x0001, 0x54a: 0x0001, 0x54b: 0x0001, - 0x54c: 0x0001, 0x54d: 0x0001, 0x54e: 0x0001, 0x54f: 0x0001, 0x550: 0x0001, 0x551: 0x0001, - 0x552: 0x0001, 0x553: 0x0001, 0x554: 0x0001, 0x555: 0x0001, 0x556: 0x0001, 0x557: 0x0001, - 0x558: 0x0001, 0x559: 0x0001, 0x55a: 0x0001, 0x55b: 0x0001, 0x55c: 0x0001, 0x55d: 0x0001, - 0x55e: 0x0001, 0x55f: 0x0001, 0x560: 0x0001, 0x561: 0x0001, 0x562: 0x0001, 0x563: 0x0001, - 0x564: 0x0001, 0x565: 0x0001, 0x566: 0x0001, 0x567: 0x0001, 0x568: 0x0001, 0x569: 0x0001, - 0x56a: 0x0001, 0x56b: 0x000c, 0x56c: 0x000c, 0x56d: 0x000c, 0x56e: 0x000c, 0x56f: 0x000c, - 0x570: 0x000c, 0x571: 0x000c, 0x572: 0x000c, 0x573: 0x000c, 0x574: 0x0001, 0x575: 0x0001, - 0x576: 0x000a, 0x577: 0x000a, 0x578: 0x000a, 0x579: 0x000a, 0x57a: 0x0001, 0x57b: 0x0001, - 0x57c: 0x0001, 0x57d: 0x0001, 0x57e: 0x0001, 0x57f: 0x0001, - // Block 0x16, offset 0x580 - 0x580: 0x0001, 0x581: 0x0001, 0x582: 0x0001, 0x583: 0x0001, 0x584: 0x0001, 0x585: 0x0001, - 0x586: 0x0001, 0x587: 0x0001, 0x588: 0x0001, 0x589: 0x0001, 0x58a: 0x0001, 0x58b: 0x0001, - 0x58c: 0x0001, 0x58d: 0x0001, 0x58e: 0x0001, 0x58f: 0x0001, 0x590: 0x0001, 0x591: 0x0001, - 0x592: 0x0001, 0x593: 0x0001, 0x594: 0x0001, 0x595: 0x0001, 0x596: 0x000c, 0x597: 0x000c, - 0x598: 0x000c, 0x599: 0x000c, 0x59a: 0x0001, 0x59b: 0x000c, 0x59c: 0x000c, 0x59d: 0x000c, - 0x59e: 0x000c, 0x59f: 0x000c, 0x5a0: 0x000c, 0x5a1: 0x000c, 0x5a2: 0x000c, 0x5a3: 0x000c, - 0x5a4: 0x0001, 0x5a5: 0x000c, 0x5a6: 0x000c, 0x5a7: 0x000c, 0x5a8: 0x0001, 0x5a9: 0x000c, - 0x5aa: 0x000c, 0x5ab: 0x000c, 0x5ac: 0x000c, 0x5ad: 0x000c, 0x5ae: 0x0001, 0x5af: 0x0001, - 0x5b0: 0x0001, 0x5b1: 0x0001, 0x5b2: 0x0001, 0x5b3: 0x0001, 0x5b4: 0x0001, 0x5b5: 0x0001, - 0x5b6: 0x0001, 0x5b7: 0x0001, 0x5b8: 0x0001, 0x5b9: 0x0001, 0x5ba: 0x0001, 0x5bb: 0x0001, - 0x5bc: 0x0001, 0x5bd: 0x0001, 0x5be: 0x0001, 0x5bf: 0x0001, - // Block 0x17, offset 0x5c0 - 0x5c0: 0x0001, 0x5c1: 0x0001, 0x5c2: 0x0001, 0x5c3: 0x0001, 0x5c4: 0x0001, 0x5c5: 0x0001, - 0x5c6: 0x0001, 0x5c7: 0x0001, 0x5c8: 0x0001, 0x5c9: 0x0001, 0x5ca: 0x0001, 0x5cb: 0x0001, - 0x5cc: 0x0001, 0x5cd: 0x0001, 0x5ce: 0x0001, 0x5cf: 0x0001, 0x5d0: 0x0001, 0x5d1: 0x0001, - 0x5d2: 0x0001, 0x5d3: 0x0001, 0x5d4: 0x0001, 0x5d5: 0x0001, 0x5d6: 0x0001, 0x5d7: 0x0001, - 0x5d8: 0x0001, 0x5d9: 0x000c, 0x5da: 0x000c, 0x5db: 0x000c, 0x5dc: 0x0001, 0x5dd: 0x0001, - 0x5de: 0x0001, 0x5df: 0x0001, 0x5e0: 0x0001, 0x5e1: 0x0001, 0x5e2: 0x0001, 0x5e3: 0x0001, - 0x5e4: 0x0001, 0x5e5: 0x0001, 0x5e6: 0x0001, 0x5e7: 0x0001, 0x5e8: 0x0001, 0x5e9: 0x0001, - 0x5ea: 0x0001, 0x5eb: 0x0001, 0x5ec: 0x0001, 0x5ed: 0x0001, 0x5ee: 0x0001, 0x5ef: 0x0001, - 0x5f0: 0x0001, 0x5f1: 0x0001, 0x5f2: 0x0001, 0x5f3: 0x0001, 0x5f4: 0x0001, 0x5f5: 0x0001, - 0x5f6: 0x0001, 0x5f7: 0x0001, 0x5f8: 0x0001, 0x5f9: 0x0001, 0x5fa: 0x0001, 0x5fb: 0x0001, - 0x5fc: 0x0001, 0x5fd: 0x0001, 0x5fe: 0x0001, 0x5ff: 0x0001, - // Block 0x18, offset 0x600 - 0x600: 0x0001, 0x601: 0x0001, 0x602: 0x0001, 0x603: 0x0001, 0x604: 0x0001, 0x605: 0x0001, - 0x606: 0x0001, 0x607: 0x0001, 0x608: 0x0001, 0x609: 0x0001, 0x60a: 0x0001, 0x60b: 0x0001, - 0x60c: 0x0001, 0x60d: 0x0001, 0x60e: 0x0001, 0x60f: 0x0001, 0x610: 0x0001, 0x611: 0x0001, - 0x612: 0x0001, 0x613: 0x0001, 0x614: 0x0001, 0x615: 0x0001, 0x616: 0x0001, 0x617: 0x0001, - 0x618: 0x0001, 0x619: 0x0001, 0x61a: 0x0001, 0x61b: 0x0001, 0x61c: 0x0001, 0x61d: 0x0001, - 0x61e: 0x0001, 0x61f: 0x0001, 0x620: 0x000d, 0x621: 0x000d, 0x622: 0x000d, 0x623: 0x000d, - 0x624: 0x000d, 0x625: 0x000d, 0x626: 0x000d, 0x627: 0x000d, 0x628: 0x000d, 0x629: 0x000d, - 0x62a: 0x000d, 0x62b: 0x000d, 0x62c: 0x000d, 0x62d: 0x000d, 0x62e: 0x000d, 0x62f: 0x000d, - 0x630: 0x000d, 0x631: 0x000d, 0x632: 0x000d, 0x633: 0x000d, 0x634: 0x000d, 0x635: 0x000d, - 0x636: 0x000d, 0x637: 0x000d, 0x638: 0x000d, 0x639: 0x000d, 0x63a: 0x000d, 0x63b: 0x000d, - 0x63c: 0x000d, 0x63d: 0x000d, 0x63e: 0x000d, 0x63f: 0x000d, - // Block 0x19, offset 0x640 - 0x640: 0x000d, 0x641: 0x000d, 0x642: 0x000d, 0x643: 0x000d, 0x644: 0x000d, 0x645: 0x000d, - 0x646: 0x000d, 0x647: 0x000d, 0x648: 0x000d, 0x649: 0x000d, 0x64a: 0x000d, 0x64b: 0x000d, - 0x64c: 0x000d, 0x64d: 0x000d, 0x64e: 0x000d, 0x64f: 0x000d, 0x650: 0x000d, 0x651: 0x000d, - 0x652: 0x000d, 0x653: 0x000d, 0x654: 0x000c, 0x655: 0x000c, 0x656: 0x000c, 0x657: 0x000c, - 0x658: 0x000c, 0x659: 0x000c, 0x65a: 0x000c, 0x65b: 0x000c, 0x65c: 0x000c, 0x65d: 0x000c, - 0x65e: 0x000c, 0x65f: 0x000c, 0x660: 0x000c, 0x661: 0x000c, 0x662: 0x0005, 0x663: 0x000c, - 0x664: 0x000c, 0x665: 0x000c, 0x666: 0x000c, 0x667: 0x000c, 0x668: 0x000c, 0x669: 0x000c, - 0x66a: 0x000c, 0x66b: 0x000c, 0x66c: 0x000c, 0x66d: 0x000c, 0x66e: 0x000c, 0x66f: 0x000c, - 0x670: 0x000c, 0x671: 0x000c, 0x672: 0x000c, 0x673: 0x000c, 0x674: 0x000c, 0x675: 0x000c, - 0x676: 0x000c, 0x677: 0x000c, 0x678: 0x000c, 0x679: 0x000c, 0x67a: 0x000c, 0x67b: 0x000c, - 0x67c: 0x000c, 0x67d: 0x000c, 0x67e: 0x000c, 0x67f: 0x000c, - // Block 0x1a, offset 0x680 - 0x680: 0x000c, 0x681: 0x000c, 0x682: 0x000c, - 0x6ba: 0x000c, - 0x6bc: 0x000c, - // Block 0x1b, offset 0x6c0 - 0x6c1: 0x000c, 0x6c2: 0x000c, 0x6c3: 0x000c, 0x6c4: 0x000c, 0x6c5: 0x000c, - 0x6c6: 0x000c, 0x6c7: 0x000c, 0x6c8: 0x000c, - 0x6cd: 0x000c, 0x6d1: 0x000c, - 0x6d2: 0x000c, 0x6d3: 0x000c, 0x6d4: 0x000c, 0x6d5: 0x000c, 0x6d6: 0x000c, 0x6d7: 0x000c, - 0x6e2: 0x000c, 0x6e3: 0x000c, - // Block 0x1c, offset 0x700 - 0x701: 0x000c, - 0x73c: 0x000c, - // Block 0x1d, offset 0x740 - 0x741: 0x000c, 0x742: 0x000c, 0x743: 0x000c, 0x744: 0x000c, - 0x74d: 0x000c, - 0x762: 0x000c, 0x763: 0x000c, - 0x772: 0x0004, 0x773: 0x0004, - 0x77b: 0x0004, - // Block 0x1e, offset 0x780 - 0x781: 0x000c, 0x782: 0x000c, - 0x7bc: 0x000c, - // Block 0x1f, offset 0x7c0 - 0x7c1: 0x000c, 0x7c2: 0x000c, - 0x7c7: 0x000c, 0x7c8: 0x000c, 0x7cb: 0x000c, - 0x7cc: 0x000c, 0x7cd: 0x000c, 0x7d1: 0x000c, - 0x7f0: 0x000c, 0x7f1: 0x000c, 0x7f5: 0x000c, - // Block 0x20, offset 0x800 - 0x801: 0x000c, 0x802: 0x000c, 0x803: 0x000c, 0x804: 0x000c, 0x805: 0x000c, - 0x807: 0x000c, 0x808: 0x000c, - 0x80d: 0x000c, - 0x822: 0x000c, 0x823: 0x000c, - 0x831: 0x0004, - // Block 0x21, offset 0x840 - 0x841: 0x000c, - 0x87c: 0x000c, 0x87f: 0x000c, - // Block 0x22, offset 0x880 - 0x881: 0x000c, 0x882: 0x000c, 0x883: 0x000c, 0x884: 0x000c, - 0x88d: 0x000c, - 0x896: 0x000c, - 0x8a2: 0x000c, 0x8a3: 0x000c, - // Block 0x23, offset 0x8c0 - 0x8c2: 0x000c, - // Block 0x24, offset 0x900 - 0x900: 0x000c, - 0x90d: 0x000c, - 0x933: 0x000a, 0x934: 0x000a, 0x935: 0x000a, - 0x936: 0x000a, 0x937: 0x000a, 0x938: 0x000a, 0x939: 0x0004, 0x93a: 0x000a, - // Block 0x25, offset 0x940 - 0x940: 0x000c, - 0x97e: 0x000c, 0x97f: 0x000c, - // Block 0x26, offset 0x980 - 0x980: 0x000c, - 0x986: 0x000c, 0x987: 0x000c, 0x988: 0x000c, 0x98a: 0x000c, 0x98b: 0x000c, - 0x98c: 0x000c, 0x98d: 0x000c, - 0x995: 0x000c, 0x996: 0x000c, - 0x9a2: 0x000c, 0x9a3: 0x000c, - 0x9b8: 0x000a, 0x9b9: 0x000a, 0x9ba: 0x000a, 0x9bb: 0x000a, - 0x9bc: 0x000a, 0x9bd: 0x000a, 0x9be: 0x000a, - // Block 0x27, offset 0x9c0 - 0x9cc: 0x000c, 0x9cd: 0x000c, - 0x9e2: 0x000c, 0x9e3: 0x000c, - // Block 0x28, offset 0xa00 - 0xa01: 0x000c, - // Block 0x29, offset 0xa40 - 0xa41: 0x000c, 0xa42: 0x000c, 0xa43: 0x000c, 0xa44: 0x000c, - 0xa4d: 0x000c, - 0xa62: 0x000c, 0xa63: 0x000c, - // Block 0x2a, offset 0xa80 - 0xa8a: 0x000c, - 0xa92: 0x000c, 0xa93: 0x000c, 0xa94: 0x000c, 0xa96: 0x000c, - // Block 0x2b, offset 0xac0 - 0xaf1: 0x000c, 0xaf4: 0x000c, 0xaf5: 0x000c, - 0xaf6: 0x000c, 0xaf7: 0x000c, 0xaf8: 0x000c, 0xaf9: 0x000c, 0xafa: 0x000c, - 0xaff: 0x0004, - // Block 0x2c, offset 0xb00 - 0xb07: 0x000c, 0xb08: 0x000c, 0xb09: 0x000c, 0xb0a: 0x000c, 0xb0b: 0x000c, - 0xb0c: 0x000c, 0xb0d: 0x000c, 0xb0e: 0x000c, - // Block 0x2d, offset 0xb40 - 0xb71: 0x000c, 0xb74: 0x000c, 0xb75: 0x000c, - 0xb76: 0x000c, 0xb77: 0x000c, 0xb78: 0x000c, 0xb79: 0x000c, 0xb7b: 0x000c, - 0xb7c: 0x000c, - // Block 0x2e, offset 0xb80 - 0xb88: 0x000c, 0xb89: 0x000c, 0xb8a: 0x000c, 0xb8b: 0x000c, - 0xb8c: 0x000c, 0xb8d: 0x000c, - // Block 0x2f, offset 0xbc0 - 0xbd8: 0x000c, 0xbd9: 0x000c, - 0xbf5: 0x000c, - 0xbf7: 0x000c, 0xbf9: 0x000c, 0xbfa: 0x003a, 0xbfb: 0x002a, - 0xbfc: 0x003a, 0xbfd: 0x002a, - // Block 0x30, offset 0xc00 - 0xc31: 0x000c, 0xc32: 0x000c, 0xc33: 0x000c, 0xc34: 0x000c, 0xc35: 0x000c, - 0xc36: 0x000c, 0xc37: 0x000c, 0xc38: 0x000c, 0xc39: 0x000c, 0xc3a: 0x000c, 0xc3b: 0x000c, - 0xc3c: 0x000c, 0xc3d: 0x000c, 0xc3e: 0x000c, - // Block 0x31, offset 0xc40 - 0xc40: 0x000c, 0xc41: 0x000c, 0xc42: 0x000c, 0xc43: 0x000c, 0xc44: 0x000c, - 0xc46: 0x000c, 0xc47: 0x000c, - 0xc4d: 0x000c, 0xc4e: 0x000c, 0xc4f: 0x000c, 0xc50: 0x000c, 0xc51: 0x000c, - 0xc52: 0x000c, 0xc53: 0x000c, 0xc54: 0x000c, 0xc55: 0x000c, 0xc56: 0x000c, 0xc57: 0x000c, - 0xc59: 0x000c, 0xc5a: 0x000c, 0xc5b: 0x000c, 0xc5c: 0x000c, 0xc5d: 0x000c, - 0xc5e: 0x000c, 0xc5f: 0x000c, 0xc60: 0x000c, 0xc61: 0x000c, 0xc62: 0x000c, 0xc63: 0x000c, - 0xc64: 0x000c, 0xc65: 0x000c, 0xc66: 0x000c, 0xc67: 0x000c, 0xc68: 0x000c, 0xc69: 0x000c, - 0xc6a: 0x000c, 0xc6b: 0x000c, 0xc6c: 0x000c, 0xc6d: 0x000c, 0xc6e: 0x000c, 0xc6f: 0x000c, - 0xc70: 0x000c, 0xc71: 0x000c, 0xc72: 0x000c, 0xc73: 0x000c, 0xc74: 0x000c, 0xc75: 0x000c, - 0xc76: 0x000c, 0xc77: 0x000c, 0xc78: 0x000c, 0xc79: 0x000c, 0xc7a: 0x000c, 0xc7b: 0x000c, - 0xc7c: 0x000c, - // Block 0x32, offset 0xc80 - 0xc86: 0x000c, - // Block 0x33, offset 0xcc0 - 0xced: 0x000c, 0xcee: 0x000c, 0xcef: 0x000c, - 0xcf0: 0x000c, 0xcf2: 0x000c, 0xcf3: 0x000c, 0xcf4: 0x000c, 0xcf5: 0x000c, - 0xcf6: 0x000c, 0xcf7: 0x000c, 0xcf9: 0x000c, 0xcfa: 0x000c, - 0xcfd: 0x000c, 0xcfe: 0x000c, - // Block 0x34, offset 0xd00 - 0xd18: 0x000c, 0xd19: 0x000c, - 0xd1e: 0x000c, 0xd1f: 0x000c, 0xd20: 0x000c, - 0xd31: 0x000c, 0xd32: 0x000c, 0xd33: 0x000c, 0xd34: 0x000c, - // Block 0x35, offset 0xd40 - 0xd42: 0x000c, 0xd45: 0x000c, - 0xd46: 0x000c, - 0xd4d: 0x000c, - 0xd5d: 0x000c, - // Block 0x36, offset 0xd80 - 0xd9d: 0x000c, - 0xd9e: 0x000c, 0xd9f: 0x000c, - // Block 0x37, offset 0xdc0 - 0xdd0: 0x000a, 0xdd1: 0x000a, - 0xdd2: 0x000a, 0xdd3: 0x000a, 0xdd4: 0x000a, 0xdd5: 0x000a, 0xdd6: 0x000a, 0xdd7: 0x000a, - 0xdd8: 0x000a, 0xdd9: 0x000a, - // Block 0x38, offset 0xe00 - 0xe00: 0x000a, - // Block 0x39, offset 0xe40 - 0xe40: 0x0009, - 0xe5b: 0x007a, 0xe5c: 0x006a, - // Block 0x3a, offset 0xe80 - 0xe92: 0x000c, 0xe93: 0x000c, 0xe94: 0x000c, - 0xeb2: 0x000c, 0xeb3: 0x000c, 0xeb4: 0x000c, - // Block 0x3b, offset 0xec0 - 0xed2: 0x000c, 0xed3: 0x000c, - 0xef2: 0x000c, 0xef3: 0x000c, - // Block 0x3c, offset 0xf00 - 0xf34: 0x000c, 0xf35: 0x000c, - 0xf37: 0x000c, 0xf38: 0x000c, 0xf39: 0x000c, 0xf3a: 0x000c, 0xf3b: 0x000c, - 0xf3c: 0x000c, 0xf3d: 0x000c, - // Block 0x3d, offset 0xf40 - 0xf46: 0x000c, 0xf49: 0x000c, 0xf4a: 0x000c, 0xf4b: 0x000c, - 0xf4c: 0x000c, 0xf4d: 0x000c, 0xf4e: 0x000c, 0xf4f: 0x000c, 0xf50: 0x000c, 0xf51: 0x000c, - 0xf52: 0x000c, 0xf53: 0x000c, - 0xf5b: 0x0004, 0xf5d: 0x000c, - 0xf70: 0x000a, 0xf71: 0x000a, 0xf72: 0x000a, 0xf73: 0x000a, 0xf74: 0x000a, 0xf75: 0x000a, - 0xf76: 0x000a, 0xf77: 0x000a, 0xf78: 0x000a, 0xf79: 0x000a, - // Block 0x3e, offset 0xf80 - 0xf80: 0x000a, 0xf81: 0x000a, 0xf82: 0x000a, 0xf83: 0x000a, 0xf84: 0x000a, 0xf85: 0x000a, - 0xf86: 0x000a, 0xf87: 0x000a, 0xf88: 0x000a, 0xf89: 0x000a, 0xf8a: 0x000a, 0xf8b: 0x000c, - 0xf8c: 0x000c, 0xf8d: 0x000c, 0xf8e: 0x000b, - // Block 0x3f, offset 0xfc0 - 0xfc5: 0x000c, - 0xfc6: 0x000c, - 0xfe9: 0x000c, - // Block 0x40, offset 0x1000 - 0x1020: 0x000c, 0x1021: 0x000c, 0x1022: 0x000c, - 0x1027: 0x000c, 0x1028: 0x000c, - 0x1032: 0x000c, - 0x1039: 0x000c, 0x103a: 0x000c, 0x103b: 0x000c, - // Block 0x41, offset 0x1040 - 0x1040: 0x000a, 0x1044: 0x000a, 0x1045: 0x000a, - // Block 0x42, offset 0x1080 - 0x109e: 0x000a, 0x109f: 0x000a, 0x10a0: 0x000a, 0x10a1: 0x000a, 0x10a2: 0x000a, 0x10a3: 0x000a, - 0x10a4: 0x000a, 0x10a5: 0x000a, 0x10a6: 0x000a, 0x10a7: 0x000a, 0x10a8: 0x000a, 0x10a9: 0x000a, - 0x10aa: 0x000a, 0x10ab: 0x000a, 0x10ac: 0x000a, 0x10ad: 0x000a, 0x10ae: 0x000a, 0x10af: 0x000a, - 0x10b0: 0x000a, 0x10b1: 0x000a, 0x10b2: 0x000a, 0x10b3: 0x000a, 0x10b4: 0x000a, 0x10b5: 0x000a, - 0x10b6: 0x000a, 0x10b7: 0x000a, 0x10b8: 0x000a, 0x10b9: 0x000a, 0x10ba: 0x000a, 0x10bb: 0x000a, - 0x10bc: 0x000a, 0x10bd: 0x000a, 0x10be: 0x000a, 0x10bf: 0x000a, - // Block 0x43, offset 0x10c0 - 0x10d7: 0x000c, - 0x10d8: 0x000c, 0x10db: 0x000c, - // Block 0x44, offset 0x1100 - 0x1116: 0x000c, - 0x1118: 0x000c, 0x1119: 0x000c, 0x111a: 0x000c, 0x111b: 0x000c, 0x111c: 0x000c, 0x111d: 0x000c, - 0x111e: 0x000c, 0x1120: 0x000c, 0x1122: 0x000c, - 0x1125: 0x000c, 0x1126: 0x000c, 0x1127: 0x000c, 0x1128: 0x000c, 0x1129: 0x000c, - 0x112a: 0x000c, 0x112b: 0x000c, 0x112c: 0x000c, - 0x1133: 0x000c, 0x1134: 0x000c, 0x1135: 0x000c, - 0x1136: 0x000c, 0x1137: 0x000c, 0x1138: 0x000c, 0x1139: 0x000c, 0x113a: 0x000c, 0x113b: 0x000c, - 0x113c: 0x000c, 0x113f: 0x000c, - // Block 0x45, offset 0x1140 - 0x1170: 0x000c, 0x1171: 0x000c, 0x1172: 0x000c, 0x1173: 0x000c, 0x1174: 0x000c, 0x1175: 0x000c, - 0x1176: 0x000c, 0x1177: 0x000c, 0x1178: 0x000c, 0x1179: 0x000c, 0x117a: 0x000c, 0x117b: 0x000c, - 0x117c: 0x000c, 0x117d: 0x000c, 0x117e: 0x000c, - // Block 0x46, offset 0x1180 - 0x1180: 0x000c, 0x1181: 0x000c, 0x1182: 0x000c, 0x1183: 0x000c, - 0x11b4: 0x000c, - 0x11b6: 0x000c, 0x11b7: 0x000c, 0x11b8: 0x000c, 0x11b9: 0x000c, 0x11ba: 0x000c, - 0x11bc: 0x000c, - // Block 0x47, offset 0x11c0 - 0x11c2: 0x000c, - 0x11eb: 0x000c, 0x11ec: 0x000c, 0x11ed: 0x000c, 0x11ee: 0x000c, 0x11ef: 0x000c, - 0x11f0: 0x000c, 0x11f1: 0x000c, 0x11f2: 0x000c, 0x11f3: 0x000c, - // Block 0x48, offset 0x1200 - 0x1200: 0x000c, 0x1201: 0x000c, - 0x1222: 0x000c, 0x1223: 0x000c, - 0x1224: 0x000c, 0x1225: 0x000c, 0x1228: 0x000c, 0x1229: 0x000c, - 0x122b: 0x000c, 0x122c: 0x000c, 0x122d: 0x000c, - // Block 0x49, offset 0x1240 - 0x1266: 0x000c, 0x1268: 0x000c, 0x1269: 0x000c, - 0x126d: 0x000c, 0x126f: 0x000c, - 0x1270: 0x000c, 0x1271: 0x000c, - // Block 0x4a, offset 0x1280 - 0x12ac: 0x000c, 0x12ad: 0x000c, 0x12ae: 0x000c, 0x12af: 0x000c, - 0x12b0: 0x000c, 0x12b1: 0x000c, 0x12b2: 0x000c, 0x12b3: 0x000c, - 0x12b6: 0x000c, 0x12b7: 0x000c, - // Block 0x4b, offset 0x12c0 - 0x12d0: 0x000c, 0x12d1: 0x000c, - 0x12d2: 0x000c, 0x12d4: 0x000c, 0x12d5: 0x000c, 0x12d6: 0x000c, 0x12d7: 0x000c, - 0x12d8: 0x000c, 0x12d9: 0x000c, 0x12da: 0x000c, 0x12db: 0x000c, 0x12dc: 0x000c, 0x12dd: 0x000c, - 0x12de: 0x000c, 0x12df: 0x000c, 0x12e0: 0x000c, 0x12e2: 0x000c, 0x12e3: 0x000c, - 0x12e4: 0x000c, 0x12e5: 0x000c, 0x12e6: 0x000c, 0x12e7: 0x000c, 0x12e8: 0x000c, - 0x12ed: 0x000c, - 0x12f4: 0x000c, - 0x12f8: 0x000c, 0x12f9: 0x000c, - // Block 0x4c, offset 0x1300 - 0x1300: 0x000c, 0x1301: 0x000c, 0x1302: 0x000c, 0x1303: 0x000c, 0x1304: 0x000c, 0x1305: 0x000c, - 0x1306: 0x000c, 0x1307: 0x000c, 0x1308: 0x000c, 0x1309: 0x000c, 0x130a: 0x000c, 0x130b: 0x000c, - 0x130c: 0x000c, 0x130d: 0x000c, 0x130e: 0x000c, 0x130f: 0x000c, 0x1310: 0x000c, 0x1311: 0x000c, - 0x1312: 0x000c, 0x1313: 0x000c, 0x1314: 0x000c, 0x1315: 0x000c, 0x1316: 0x000c, 0x1317: 0x000c, - 0x1318: 0x000c, 0x1319: 0x000c, 0x131a: 0x000c, 0x131b: 0x000c, 0x131c: 0x000c, 0x131d: 0x000c, - 0x131e: 0x000c, 0x131f: 0x000c, 0x1320: 0x000c, 0x1321: 0x000c, 0x1322: 0x000c, 0x1323: 0x000c, - 0x1324: 0x000c, 0x1325: 0x000c, 0x1326: 0x000c, 0x1327: 0x000c, 0x1328: 0x000c, 0x1329: 0x000c, - 0x132a: 0x000c, 0x132b: 0x000c, 0x132c: 0x000c, 0x132d: 0x000c, 0x132e: 0x000c, 0x132f: 0x000c, - 0x1330: 0x000c, 0x1331: 0x000c, 0x1332: 0x000c, 0x1333: 0x000c, 0x1334: 0x000c, 0x1335: 0x000c, - 0x133b: 0x000c, - 0x133c: 0x000c, 0x133d: 0x000c, 0x133e: 0x000c, 0x133f: 0x000c, - // Block 0x4d, offset 0x1340 - 0x137d: 0x000a, 0x137f: 0x000a, - // Block 0x4e, offset 0x1380 - 0x1380: 0x000a, 0x1381: 0x000a, - 0x138d: 0x000a, 0x138e: 0x000a, 0x138f: 0x000a, - 0x139d: 0x000a, - 0x139e: 0x000a, 0x139f: 0x000a, - 0x13ad: 0x000a, 0x13ae: 0x000a, 0x13af: 0x000a, - 0x13bd: 0x000a, 0x13be: 0x000a, - // Block 0x4f, offset 0x13c0 - 0x13c0: 0x0009, 0x13c1: 0x0009, 0x13c2: 0x0009, 0x13c3: 0x0009, 0x13c4: 0x0009, 0x13c5: 0x0009, - 0x13c6: 0x0009, 0x13c7: 0x0009, 0x13c8: 0x0009, 0x13c9: 0x0009, 0x13ca: 0x0009, 0x13cb: 0x000b, - 0x13cc: 0x000b, 0x13cd: 0x000b, 0x13cf: 0x0001, 0x13d0: 0x000a, 0x13d1: 0x000a, - 0x13d2: 0x000a, 0x13d3: 0x000a, 0x13d4: 0x000a, 0x13d5: 0x000a, 0x13d6: 0x000a, 0x13d7: 0x000a, - 0x13d8: 0x000a, 0x13d9: 0x000a, 0x13da: 0x000a, 0x13db: 0x000a, 0x13dc: 0x000a, 0x13dd: 0x000a, - 0x13de: 0x000a, 0x13df: 0x000a, 0x13e0: 0x000a, 0x13e1: 0x000a, 0x13e2: 0x000a, 0x13e3: 0x000a, - 0x13e4: 0x000a, 0x13e5: 0x000a, 0x13e6: 0x000a, 0x13e7: 0x000a, 0x13e8: 0x0009, 0x13e9: 0x0007, - 0x13ea: 0x000e, 0x13eb: 0x000e, 0x13ec: 0x000e, 0x13ed: 0x000e, 0x13ee: 0x000e, 0x13ef: 0x0006, - 0x13f0: 0x0004, 0x13f1: 0x0004, 0x13f2: 0x0004, 0x13f3: 0x0004, 0x13f4: 0x0004, 0x13f5: 0x000a, - 0x13f6: 0x000a, 0x13f7: 0x000a, 0x13f8: 0x000a, 0x13f9: 0x000a, 0x13fa: 0x000a, 0x13fb: 0x000a, - 0x13fc: 0x000a, 0x13fd: 0x000a, 0x13fe: 0x000a, 0x13ff: 0x000a, - // Block 0x50, offset 0x1400 - 0x1400: 0x000a, 0x1401: 0x000a, 0x1402: 0x000a, 0x1403: 0x000a, 0x1404: 0x0006, 0x1405: 0x009a, - 0x1406: 0x008a, 0x1407: 0x000a, 0x1408: 0x000a, 0x1409: 0x000a, 0x140a: 0x000a, 0x140b: 0x000a, - 0x140c: 0x000a, 0x140d: 0x000a, 0x140e: 0x000a, 0x140f: 0x000a, 0x1410: 0x000a, 0x1411: 0x000a, - 0x1412: 0x000a, 0x1413: 0x000a, 0x1414: 0x000a, 0x1415: 0x000a, 0x1416: 0x000a, 0x1417: 0x000a, - 0x1418: 0x000a, 0x1419: 0x000a, 0x141a: 0x000a, 0x141b: 0x000a, 0x141c: 0x000a, 0x141d: 0x000a, - 0x141e: 0x000a, 0x141f: 0x0009, 0x1420: 0x000b, 0x1421: 0x000b, 0x1422: 0x000b, 0x1423: 0x000b, - 0x1424: 0x000b, 0x1425: 0x000b, 0x1426: 0x000e, 0x1427: 0x000e, 0x1428: 0x000e, 0x1429: 0x000e, - 0x142a: 0x000b, 0x142b: 0x000b, 0x142c: 0x000b, 0x142d: 0x000b, 0x142e: 0x000b, 0x142f: 0x000b, - 0x1430: 0x0002, 0x1434: 0x0002, 0x1435: 0x0002, - 0x1436: 0x0002, 0x1437: 0x0002, 0x1438: 0x0002, 0x1439: 0x0002, 0x143a: 0x0003, 0x143b: 0x0003, - 0x143c: 0x000a, 0x143d: 0x009a, 0x143e: 0x008a, - // Block 0x51, offset 0x1440 - 0x1440: 0x0002, 0x1441: 0x0002, 0x1442: 0x0002, 0x1443: 0x0002, 0x1444: 0x0002, 0x1445: 0x0002, - 0x1446: 0x0002, 0x1447: 0x0002, 0x1448: 0x0002, 0x1449: 0x0002, 0x144a: 0x0003, 0x144b: 0x0003, - 0x144c: 0x000a, 0x144d: 0x009a, 0x144e: 0x008a, - 0x1460: 0x0004, 0x1461: 0x0004, 0x1462: 0x0004, 0x1463: 0x0004, - 0x1464: 0x0004, 0x1465: 0x0004, 0x1466: 0x0004, 0x1467: 0x0004, 0x1468: 0x0004, 0x1469: 0x0004, - 0x146a: 0x0004, 0x146b: 0x0004, 0x146c: 0x0004, 0x146d: 0x0004, 0x146e: 0x0004, 0x146f: 0x0004, - 0x1470: 0x0004, 0x1471: 0x0004, 0x1472: 0x0004, 0x1473: 0x0004, 0x1474: 0x0004, 0x1475: 0x0004, - 0x1476: 0x0004, 0x1477: 0x0004, 0x1478: 0x0004, 0x1479: 0x0004, 0x147a: 0x0004, 0x147b: 0x0004, - 0x147c: 0x0004, 0x147d: 0x0004, 0x147e: 0x0004, 0x147f: 0x0004, - // Block 0x52, offset 0x1480 - 0x1480: 0x0004, 0x1481: 0x0004, 0x1482: 0x0004, 0x1483: 0x0004, 0x1484: 0x0004, 0x1485: 0x0004, - 0x1486: 0x0004, 0x1487: 0x0004, 0x1488: 0x0004, 0x1489: 0x0004, 0x148a: 0x0004, 0x148b: 0x0004, - 0x148c: 0x0004, 0x148d: 0x0004, 0x148e: 0x0004, 0x148f: 0x0004, 0x1490: 0x000c, 0x1491: 0x000c, - 0x1492: 0x000c, 0x1493: 0x000c, 0x1494: 0x000c, 0x1495: 0x000c, 0x1496: 0x000c, 0x1497: 0x000c, - 0x1498: 0x000c, 0x1499: 0x000c, 0x149a: 0x000c, 0x149b: 0x000c, 0x149c: 0x000c, 0x149d: 0x000c, - 0x149e: 0x000c, 0x149f: 0x000c, 0x14a0: 0x000c, 0x14a1: 0x000c, 0x14a2: 0x000c, 0x14a3: 0x000c, - 0x14a4: 0x000c, 0x14a5: 0x000c, 0x14a6: 0x000c, 0x14a7: 0x000c, 0x14a8: 0x000c, 0x14a9: 0x000c, - 0x14aa: 0x000c, 0x14ab: 0x000c, 0x14ac: 0x000c, 0x14ad: 0x000c, 0x14ae: 0x000c, 0x14af: 0x000c, - 0x14b0: 0x000c, - // Block 0x53, offset 0x14c0 - 0x14c0: 0x000a, 0x14c1: 0x000a, 0x14c3: 0x000a, 0x14c4: 0x000a, 0x14c5: 0x000a, - 0x14c6: 0x000a, 0x14c8: 0x000a, 0x14c9: 0x000a, - 0x14d4: 0x000a, 0x14d6: 0x000a, 0x14d7: 0x000a, - 0x14d8: 0x000a, - 0x14de: 0x000a, 0x14df: 0x000a, 0x14e0: 0x000a, 0x14e1: 0x000a, 0x14e2: 0x000a, 0x14e3: 0x000a, - 0x14e5: 0x000a, 0x14e7: 0x000a, 0x14e9: 0x000a, - 0x14ee: 0x0004, - 0x14fa: 0x000a, 0x14fb: 0x000a, - // Block 0x54, offset 0x1500 - 0x1500: 0x000a, 0x1501: 0x000a, 0x1502: 0x000a, 0x1503: 0x000a, 0x1504: 0x000a, - 0x150a: 0x000a, 0x150b: 0x000a, - 0x150c: 0x000a, 0x150d: 0x000a, 0x1510: 0x000a, 0x1511: 0x000a, - 0x1512: 0x000a, 0x1513: 0x000a, 0x1514: 0x000a, 0x1515: 0x000a, 0x1516: 0x000a, 0x1517: 0x000a, - 0x1518: 0x000a, 0x1519: 0x000a, 0x151a: 0x000a, 0x151b: 0x000a, 0x151c: 0x000a, 0x151d: 0x000a, - 0x151e: 0x000a, 0x151f: 0x000a, - // Block 0x55, offset 0x1540 - 0x1549: 0x000a, 0x154a: 0x000a, 0x154b: 0x000a, - 0x1550: 0x000a, 0x1551: 0x000a, - 0x1552: 0x000a, 0x1553: 0x000a, 0x1554: 0x000a, 0x1555: 0x000a, 0x1556: 0x000a, 0x1557: 0x000a, - 0x1558: 0x000a, 0x1559: 0x000a, 0x155a: 0x000a, 0x155b: 0x000a, 0x155c: 0x000a, 0x155d: 0x000a, - 0x155e: 0x000a, 0x155f: 0x000a, 0x1560: 0x000a, 0x1561: 0x000a, 0x1562: 0x000a, 0x1563: 0x000a, - 0x1564: 0x000a, 0x1565: 0x000a, 0x1566: 0x000a, 0x1567: 0x000a, 0x1568: 0x000a, 0x1569: 0x000a, - 0x156a: 0x000a, 0x156b: 0x000a, 0x156c: 0x000a, 0x156d: 0x000a, 0x156e: 0x000a, 0x156f: 0x000a, - 0x1570: 0x000a, 0x1571: 0x000a, 0x1572: 0x000a, 0x1573: 0x000a, 0x1574: 0x000a, 0x1575: 0x000a, - 0x1576: 0x000a, 0x1577: 0x000a, 0x1578: 0x000a, 0x1579: 0x000a, 0x157a: 0x000a, 0x157b: 0x000a, - 0x157c: 0x000a, 0x157d: 0x000a, 0x157e: 0x000a, 0x157f: 0x000a, - // Block 0x56, offset 0x1580 - 0x1580: 0x000a, 0x1581: 0x000a, 0x1582: 0x000a, 0x1583: 0x000a, 0x1584: 0x000a, 0x1585: 0x000a, - 0x1586: 0x000a, 0x1587: 0x000a, 0x1588: 0x000a, 0x1589: 0x000a, 0x158a: 0x000a, 0x158b: 0x000a, - 0x158c: 0x000a, 0x158d: 0x000a, 0x158e: 0x000a, 0x158f: 0x000a, 0x1590: 0x000a, 0x1591: 0x000a, - 0x1592: 0x000a, 0x1593: 0x000a, 0x1594: 0x000a, 0x1595: 0x000a, 0x1596: 0x000a, 0x1597: 0x000a, - 0x1598: 0x000a, 0x1599: 0x000a, 0x159a: 0x000a, 0x159b: 0x000a, 0x159c: 0x000a, 0x159d: 0x000a, - 0x159e: 0x000a, 0x159f: 0x000a, 0x15a0: 0x000a, 0x15a1: 0x000a, 0x15a2: 0x000a, 0x15a3: 0x000a, - 0x15a4: 0x000a, 0x15a5: 0x000a, 0x15a6: 0x000a, 0x15a7: 0x000a, 0x15a8: 0x000a, 0x15a9: 0x000a, - 0x15aa: 0x000a, 0x15ab: 0x000a, 0x15ac: 0x000a, 0x15ad: 0x000a, 0x15ae: 0x000a, 0x15af: 0x000a, - 0x15b0: 0x000a, 0x15b1: 0x000a, 0x15b2: 0x000a, 0x15b3: 0x000a, 0x15b4: 0x000a, 0x15b5: 0x000a, - 0x15b6: 0x000a, 0x15b7: 0x000a, 0x15b8: 0x000a, 0x15b9: 0x000a, 0x15ba: 0x000a, 0x15bb: 0x000a, - 0x15bc: 0x000a, 0x15bd: 0x000a, 0x15be: 0x000a, 0x15bf: 0x000a, - // Block 0x57, offset 0x15c0 - 0x15c0: 0x000a, 0x15c1: 0x000a, 0x15c2: 0x000a, 0x15c3: 0x000a, 0x15c4: 0x000a, 0x15c5: 0x000a, - 0x15c6: 0x000a, 0x15c7: 0x000a, 0x15c8: 0x000a, 0x15c9: 0x000a, 0x15ca: 0x000a, 0x15cb: 0x000a, - 0x15cc: 0x000a, 0x15cd: 0x000a, 0x15ce: 0x000a, 0x15cf: 0x000a, 0x15d0: 0x000a, 0x15d1: 0x000a, - 0x15d2: 0x0003, 0x15d3: 0x0004, 0x15d4: 0x000a, 0x15d5: 0x000a, 0x15d6: 0x000a, 0x15d7: 0x000a, - 0x15d8: 0x000a, 0x15d9: 0x000a, 0x15da: 0x000a, 0x15db: 0x000a, 0x15dc: 0x000a, 0x15dd: 0x000a, - 0x15de: 0x000a, 0x15df: 0x000a, 0x15e0: 0x000a, 0x15e1: 0x000a, 0x15e2: 0x000a, 0x15e3: 0x000a, - 0x15e4: 0x000a, 0x15e5: 0x000a, 0x15e6: 0x000a, 0x15e7: 0x000a, 0x15e8: 0x000a, 0x15e9: 0x000a, - 0x15ea: 0x000a, 0x15eb: 0x000a, 0x15ec: 0x000a, 0x15ed: 0x000a, 0x15ee: 0x000a, 0x15ef: 0x000a, - 0x15f0: 0x000a, 0x15f1: 0x000a, 0x15f2: 0x000a, 0x15f3: 0x000a, 0x15f4: 0x000a, 0x15f5: 0x000a, - 0x15f6: 0x000a, 0x15f7: 0x000a, 0x15f8: 0x000a, 0x15f9: 0x000a, 0x15fa: 0x000a, 0x15fb: 0x000a, - 0x15fc: 0x000a, 0x15fd: 0x000a, 0x15fe: 0x000a, 0x15ff: 0x000a, - // Block 0x58, offset 0x1600 - 0x1600: 0x000a, 0x1601: 0x000a, 0x1602: 0x000a, 0x1603: 0x000a, 0x1604: 0x000a, 0x1605: 0x000a, - 0x1606: 0x000a, 0x1607: 0x000a, 0x1608: 0x003a, 0x1609: 0x002a, 0x160a: 0x003a, 0x160b: 0x002a, - 0x160c: 0x000a, 0x160d: 0x000a, 0x160e: 0x000a, 0x160f: 0x000a, 0x1610: 0x000a, 0x1611: 0x000a, - 0x1612: 0x000a, 0x1613: 0x000a, 0x1614: 0x000a, 0x1615: 0x000a, 0x1616: 0x000a, 0x1617: 0x000a, - 0x1618: 0x000a, 0x1619: 0x000a, 0x161a: 0x000a, 0x161b: 0x000a, 0x161c: 0x000a, 0x161d: 0x000a, - 0x161e: 0x000a, 0x161f: 0x000a, 0x1620: 0x000a, 0x1621: 0x000a, 0x1622: 0x000a, 0x1623: 0x000a, - 0x1624: 0x000a, 0x1625: 0x000a, 0x1626: 0x000a, 0x1627: 0x000a, 0x1628: 0x000a, 0x1629: 0x009a, - 0x162a: 0x008a, 0x162b: 0x000a, 0x162c: 0x000a, 0x162d: 0x000a, 0x162e: 0x000a, 0x162f: 0x000a, - 0x1630: 0x000a, 0x1631: 0x000a, 0x1632: 0x000a, 0x1633: 0x000a, 0x1634: 0x000a, 0x1635: 0x000a, - // Block 0x59, offset 0x1640 - 0x167b: 0x000a, - 0x167c: 0x000a, 0x167d: 0x000a, 0x167e: 0x000a, 0x167f: 0x000a, - // Block 0x5a, offset 0x1680 - 0x1680: 0x000a, 0x1681: 0x000a, 0x1682: 0x000a, 0x1683: 0x000a, 0x1684: 0x000a, 0x1685: 0x000a, - 0x1686: 0x000a, 0x1687: 0x000a, 0x1688: 0x000a, 0x1689: 0x000a, 0x168a: 0x000a, 0x168b: 0x000a, - 0x168c: 0x000a, 0x168d: 0x000a, 0x168e: 0x000a, 0x168f: 0x000a, 0x1690: 0x000a, 0x1691: 0x000a, - 0x1692: 0x000a, 0x1693: 0x000a, 0x1694: 0x000a, 0x1696: 0x000a, 0x1697: 0x000a, - 0x1698: 0x000a, 0x1699: 0x000a, 0x169a: 0x000a, 0x169b: 0x000a, 0x169c: 0x000a, 0x169d: 0x000a, - 0x169e: 0x000a, 0x169f: 0x000a, 0x16a0: 0x000a, 0x16a1: 0x000a, 0x16a2: 0x000a, 0x16a3: 0x000a, - 0x16a4: 0x000a, 0x16a5: 0x000a, 0x16a6: 0x000a, 0x16a7: 0x000a, 0x16a8: 0x000a, 0x16a9: 0x000a, - 0x16aa: 0x000a, 0x16ab: 0x000a, 0x16ac: 0x000a, 0x16ad: 0x000a, 0x16ae: 0x000a, 0x16af: 0x000a, - 0x16b0: 0x000a, 0x16b1: 0x000a, 0x16b2: 0x000a, 0x16b3: 0x000a, 0x16b4: 0x000a, 0x16b5: 0x000a, - 0x16b6: 0x000a, 0x16b7: 0x000a, 0x16b8: 0x000a, 0x16b9: 0x000a, 0x16ba: 0x000a, 0x16bb: 0x000a, - 0x16bc: 0x000a, 0x16bd: 0x000a, 0x16be: 0x000a, 0x16bf: 0x000a, - // Block 0x5b, offset 0x16c0 - 0x16c0: 0x000a, 0x16c1: 0x000a, 0x16c2: 0x000a, 0x16c3: 0x000a, 0x16c4: 0x000a, 0x16c5: 0x000a, - 0x16c6: 0x000a, 0x16c7: 0x000a, 0x16c8: 0x000a, 0x16c9: 0x000a, 0x16ca: 0x000a, 0x16cb: 0x000a, - 0x16cc: 0x000a, 0x16cd: 0x000a, 0x16ce: 0x000a, 0x16cf: 0x000a, 0x16d0: 0x000a, 0x16d1: 0x000a, - 0x16d2: 0x000a, 0x16d3: 0x000a, 0x16d4: 0x000a, 0x16d5: 0x000a, 0x16d6: 0x000a, 0x16d7: 0x000a, - 0x16d8: 0x000a, 0x16d9: 0x000a, 0x16da: 0x000a, 0x16db: 0x000a, 0x16dc: 0x000a, 0x16dd: 0x000a, - 0x16de: 0x000a, 0x16df: 0x000a, 0x16e0: 0x000a, 0x16e1: 0x000a, 0x16e2: 0x000a, 0x16e3: 0x000a, - 0x16e4: 0x000a, 0x16e5: 0x000a, 0x16e6: 0x000a, 0x16e7: 0x000a, 0x16e8: 0x000a, 0x16e9: 0x000a, - 0x16ea: 0x000a, 0x16eb: 0x000a, 0x16ec: 0x000a, 0x16ed: 0x000a, 0x16ee: 0x000a, 0x16ef: 0x000a, - 0x16f0: 0x000a, 0x16f1: 0x000a, 0x16f2: 0x000a, 0x16f3: 0x000a, 0x16f4: 0x000a, 0x16f5: 0x000a, - 0x16f6: 0x000a, 0x16f7: 0x000a, 0x16f8: 0x000a, 0x16f9: 0x000a, 0x16fa: 0x000a, 0x16fb: 0x000a, - 0x16fc: 0x000a, 0x16fd: 0x000a, 0x16fe: 0x000a, - // Block 0x5c, offset 0x1700 - 0x1700: 0x000a, 0x1701: 0x000a, 0x1702: 0x000a, 0x1703: 0x000a, 0x1704: 0x000a, 0x1705: 0x000a, - 0x1706: 0x000a, 0x1707: 0x000a, 0x1708: 0x000a, 0x1709: 0x000a, 0x170a: 0x000a, 0x170b: 0x000a, - 0x170c: 0x000a, 0x170d: 0x000a, 0x170e: 0x000a, 0x170f: 0x000a, 0x1710: 0x000a, 0x1711: 0x000a, - 0x1712: 0x000a, 0x1713: 0x000a, 0x1714: 0x000a, 0x1715: 0x000a, 0x1716: 0x000a, 0x1717: 0x000a, - 0x1718: 0x000a, 0x1719: 0x000a, 0x171a: 0x000a, 0x171b: 0x000a, 0x171c: 0x000a, 0x171d: 0x000a, - 0x171e: 0x000a, 0x171f: 0x000a, 0x1720: 0x000a, 0x1721: 0x000a, 0x1722: 0x000a, 0x1723: 0x000a, - 0x1724: 0x000a, 0x1725: 0x000a, 0x1726: 0x000a, - // Block 0x5d, offset 0x1740 - 0x1740: 0x000a, 0x1741: 0x000a, 0x1742: 0x000a, 0x1743: 0x000a, 0x1744: 0x000a, 0x1745: 0x000a, - 0x1746: 0x000a, 0x1747: 0x000a, 0x1748: 0x000a, 0x1749: 0x000a, 0x174a: 0x000a, - 0x1760: 0x000a, 0x1761: 0x000a, 0x1762: 0x000a, 0x1763: 0x000a, - 0x1764: 0x000a, 0x1765: 0x000a, 0x1766: 0x000a, 0x1767: 0x000a, 0x1768: 0x000a, 0x1769: 0x000a, - 0x176a: 0x000a, 0x176b: 0x000a, 0x176c: 0x000a, 0x176d: 0x000a, 0x176e: 0x000a, 0x176f: 0x000a, - 0x1770: 0x000a, 0x1771: 0x000a, 0x1772: 0x000a, 0x1773: 0x000a, 0x1774: 0x000a, 0x1775: 0x000a, - 0x1776: 0x000a, 0x1777: 0x000a, 0x1778: 0x000a, 0x1779: 0x000a, 0x177a: 0x000a, 0x177b: 0x000a, - 0x177c: 0x000a, 0x177d: 0x000a, 0x177e: 0x000a, 0x177f: 0x000a, - // Block 0x5e, offset 0x1780 - 0x1780: 0x000a, 0x1781: 0x000a, 0x1782: 0x000a, 0x1783: 0x000a, 0x1784: 0x000a, 0x1785: 0x000a, - 0x1786: 0x000a, 0x1787: 0x000a, 0x1788: 0x0002, 0x1789: 0x0002, 0x178a: 0x0002, 0x178b: 0x0002, - 0x178c: 0x0002, 0x178d: 0x0002, 0x178e: 0x0002, 0x178f: 0x0002, 0x1790: 0x0002, 0x1791: 0x0002, - 0x1792: 0x0002, 0x1793: 0x0002, 0x1794: 0x0002, 0x1795: 0x0002, 0x1796: 0x0002, 0x1797: 0x0002, - 0x1798: 0x0002, 0x1799: 0x0002, 0x179a: 0x0002, 0x179b: 0x0002, - // Block 0x5f, offset 0x17c0 - 0x17ea: 0x000a, 0x17eb: 0x000a, 0x17ec: 0x000a, 0x17ed: 0x000a, 0x17ee: 0x000a, 0x17ef: 0x000a, - 0x17f0: 0x000a, 0x17f1: 0x000a, 0x17f2: 0x000a, 0x17f3: 0x000a, 0x17f4: 0x000a, 0x17f5: 0x000a, - 0x17f6: 0x000a, 0x17f7: 0x000a, 0x17f8: 0x000a, 0x17f9: 0x000a, 0x17fa: 0x000a, 0x17fb: 0x000a, - 0x17fc: 0x000a, 0x17fd: 0x000a, 0x17fe: 0x000a, 0x17ff: 0x000a, - // Block 0x60, offset 0x1800 - 0x1800: 0x000a, 0x1801: 0x000a, 0x1802: 0x000a, 0x1803: 0x000a, 0x1804: 0x000a, 0x1805: 0x000a, - 0x1806: 0x000a, 0x1807: 0x000a, 0x1808: 0x000a, 0x1809: 0x000a, 0x180a: 0x000a, 0x180b: 0x000a, - 0x180c: 0x000a, 0x180d: 0x000a, 0x180e: 0x000a, 0x180f: 0x000a, 0x1810: 0x000a, 0x1811: 0x000a, - 0x1812: 0x000a, 0x1813: 0x000a, 0x1814: 0x000a, 0x1815: 0x000a, 0x1816: 0x000a, 0x1817: 0x000a, - 0x1818: 0x000a, 0x1819: 0x000a, 0x181a: 0x000a, 0x181b: 0x000a, 0x181c: 0x000a, 0x181d: 0x000a, - 0x181e: 0x000a, 0x181f: 0x000a, 0x1820: 0x000a, 0x1821: 0x000a, 0x1822: 0x000a, 0x1823: 0x000a, - 0x1824: 0x000a, 0x1825: 0x000a, 0x1826: 0x000a, 0x1827: 0x000a, 0x1828: 0x000a, 0x1829: 0x000a, - 0x182a: 0x000a, 0x182b: 0x000a, 0x182d: 0x000a, 0x182e: 0x000a, 0x182f: 0x000a, - 0x1830: 0x000a, 0x1831: 0x000a, 0x1832: 0x000a, 0x1833: 0x000a, 0x1834: 0x000a, 0x1835: 0x000a, - 0x1836: 0x000a, 0x1837: 0x000a, 0x1838: 0x000a, 0x1839: 0x000a, 0x183a: 0x000a, 0x183b: 0x000a, - 0x183c: 0x000a, 0x183d: 0x000a, 0x183e: 0x000a, 0x183f: 0x000a, - // Block 0x61, offset 0x1840 - 0x1840: 0x000a, 0x1841: 0x000a, 0x1842: 0x000a, 0x1843: 0x000a, 0x1844: 0x000a, 0x1845: 0x000a, - 0x1846: 0x000a, 0x1847: 0x000a, 0x1848: 0x000a, 0x1849: 0x000a, 0x184a: 0x000a, 0x184b: 0x000a, - 0x184c: 0x000a, 0x184d: 0x000a, 0x184e: 0x000a, 0x184f: 0x000a, 0x1850: 0x000a, 0x1851: 0x000a, - 0x1852: 0x000a, 0x1853: 0x000a, 0x1854: 0x000a, 0x1855: 0x000a, 0x1856: 0x000a, 0x1857: 0x000a, - 0x1858: 0x000a, 0x1859: 0x000a, 0x185a: 0x000a, 0x185b: 0x000a, 0x185c: 0x000a, 0x185d: 0x000a, - 0x185e: 0x000a, 0x185f: 0x000a, 0x1860: 0x000a, 0x1861: 0x000a, 0x1862: 0x000a, 0x1863: 0x000a, - 0x1864: 0x000a, 0x1865: 0x000a, 0x1866: 0x000a, 0x1867: 0x000a, 0x1868: 0x003a, 0x1869: 0x002a, - 0x186a: 0x003a, 0x186b: 0x002a, 0x186c: 0x003a, 0x186d: 0x002a, 0x186e: 0x003a, 0x186f: 0x002a, - 0x1870: 0x003a, 0x1871: 0x002a, 0x1872: 0x003a, 0x1873: 0x002a, 0x1874: 0x003a, 0x1875: 0x002a, - 0x1876: 0x000a, 0x1877: 0x000a, 0x1878: 0x000a, 0x1879: 0x000a, 0x187a: 0x000a, 0x187b: 0x000a, - 0x187c: 0x000a, 0x187d: 0x000a, 0x187e: 0x000a, 0x187f: 0x000a, - // Block 0x62, offset 0x1880 - 0x1880: 0x000a, 0x1881: 0x000a, 0x1882: 0x000a, 0x1883: 0x000a, 0x1884: 0x000a, 0x1885: 0x009a, - 0x1886: 0x008a, 0x1887: 0x000a, 0x1888: 0x000a, 0x1889: 0x000a, 0x188a: 0x000a, 0x188b: 0x000a, - 0x188c: 0x000a, 0x188d: 0x000a, 0x188e: 0x000a, 0x188f: 0x000a, 0x1890: 0x000a, 0x1891: 0x000a, - 0x1892: 0x000a, 0x1893: 0x000a, 0x1894: 0x000a, 0x1895: 0x000a, 0x1896: 0x000a, 0x1897: 0x000a, - 0x1898: 0x000a, 0x1899: 0x000a, 0x189a: 0x000a, 0x189b: 0x000a, 0x189c: 0x000a, 0x189d: 0x000a, - 0x189e: 0x000a, 0x189f: 0x000a, 0x18a0: 0x000a, 0x18a1: 0x000a, 0x18a2: 0x000a, 0x18a3: 0x000a, - 0x18a4: 0x000a, 0x18a5: 0x000a, 0x18a6: 0x003a, 0x18a7: 0x002a, 0x18a8: 0x003a, 0x18a9: 0x002a, - 0x18aa: 0x003a, 0x18ab: 0x002a, 0x18ac: 0x003a, 0x18ad: 0x002a, 0x18ae: 0x003a, 0x18af: 0x002a, - 0x18b0: 0x000a, 0x18b1: 0x000a, 0x18b2: 0x000a, 0x18b3: 0x000a, 0x18b4: 0x000a, 0x18b5: 0x000a, - 0x18b6: 0x000a, 0x18b7: 0x000a, 0x18b8: 0x000a, 0x18b9: 0x000a, 0x18ba: 0x000a, 0x18bb: 0x000a, - 0x18bc: 0x000a, 0x18bd: 0x000a, 0x18be: 0x000a, 0x18bf: 0x000a, - // Block 0x63, offset 0x18c0 - 0x18c0: 0x000a, 0x18c1: 0x000a, 0x18c2: 0x000a, 0x18c3: 0x007a, 0x18c4: 0x006a, 0x18c5: 0x009a, - 0x18c6: 0x008a, 0x18c7: 0x00ba, 0x18c8: 0x00aa, 0x18c9: 0x009a, 0x18ca: 0x008a, 0x18cb: 0x007a, - 0x18cc: 0x006a, 0x18cd: 0x00da, 0x18ce: 0x002a, 0x18cf: 0x003a, 0x18d0: 0x00ca, 0x18d1: 0x009a, - 0x18d2: 0x008a, 0x18d3: 0x007a, 0x18d4: 0x006a, 0x18d5: 0x009a, 0x18d6: 0x008a, 0x18d7: 0x00ba, - 0x18d8: 0x00aa, 0x18d9: 0x000a, 0x18da: 0x000a, 0x18db: 0x000a, 0x18dc: 0x000a, 0x18dd: 0x000a, - 0x18de: 0x000a, 0x18df: 0x000a, 0x18e0: 0x000a, 0x18e1: 0x000a, 0x18e2: 0x000a, 0x18e3: 0x000a, - 0x18e4: 0x000a, 0x18e5: 0x000a, 0x18e6: 0x000a, 0x18e7: 0x000a, 0x18e8: 0x000a, 0x18e9: 0x000a, - 0x18ea: 0x000a, 0x18eb: 0x000a, 0x18ec: 0x000a, 0x18ed: 0x000a, 0x18ee: 0x000a, 0x18ef: 0x000a, - 0x18f0: 0x000a, 0x18f1: 0x000a, 0x18f2: 0x000a, 0x18f3: 0x000a, 0x18f4: 0x000a, 0x18f5: 0x000a, - 0x18f6: 0x000a, 0x18f7: 0x000a, 0x18f8: 0x000a, 0x18f9: 0x000a, 0x18fa: 0x000a, 0x18fb: 0x000a, - 0x18fc: 0x000a, 0x18fd: 0x000a, 0x18fe: 0x000a, 0x18ff: 0x000a, - // Block 0x64, offset 0x1900 - 0x1900: 0x000a, 0x1901: 0x000a, 0x1902: 0x000a, 0x1903: 0x000a, 0x1904: 0x000a, 0x1905: 0x000a, - 0x1906: 0x000a, 0x1907: 0x000a, 0x1908: 0x000a, 0x1909: 0x000a, 0x190a: 0x000a, 0x190b: 0x000a, - 0x190c: 0x000a, 0x190d: 0x000a, 0x190e: 0x000a, 0x190f: 0x000a, 0x1910: 0x000a, 0x1911: 0x000a, - 0x1912: 0x000a, 0x1913: 0x000a, 0x1914: 0x000a, 0x1915: 0x000a, 0x1916: 0x000a, 0x1917: 0x000a, - 0x1918: 0x003a, 0x1919: 0x002a, 0x191a: 0x003a, 0x191b: 0x002a, 0x191c: 0x000a, 0x191d: 0x000a, - 0x191e: 0x000a, 0x191f: 0x000a, 0x1920: 0x000a, 0x1921: 0x000a, 0x1922: 0x000a, 0x1923: 0x000a, - 0x1924: 0x000a, 0x1925: 0x000a, 0x1926: 0x000a, 0x1927: 0x000a, 0x1928: 0x000a, 0x1929: 0x000a, - 0x192a: 0x000a, 0x192b: 0x000a, 0x192c: 0x000a, 0x192d: 0x000a, 0x192e: 0x000a, 0x192f: 0x000a, - 0x1930: 0x000a, 0x1931: 0x000a, 0x1932: 0x000a, 0x1933: 0x000a, 0x1934: 0x000a, 0x1935: 0x000a, - 0x1936: 0x000a, 0x1937: 0x000a, 0x1938: 0x000a, 0x1939: 0x000a, 0x193a: 0x000a, 0x193b: 0x000a, - 0x193c: 0x003a, 0x193d: 0x002a, 0x193e: 0x000a, 0x193f: 0x000a, - // Block 0x65, offset 0x1940 - 0x1940: 0x000a, 0x1941: 0x000a, 0x1942: 0x000a, 0x1943: 0x000a, 0x1944: 0x000a, 0x1945: 0x000a, - 0x1946: 0x000a, 0x1947: 0x000a, 0x1948: 0x000a, 0x1949: 0x000a, 0x194a: 0x000a, 0x194b: 0x000a, - 0x194c: 0x000a, 0x194d: 0x000a, 0x194e: 0x000a, 0x194f: 0x000a, 0x1950: 0x000a, 0x1951: 0x000a, - 0x1952: 0x000a, 0x1953: 0x000a, 0x1954: 0x000a, 0x1955: 0x000a, 0x1956: 0x000a, 0x1957: 0x000a, - 0x1958: 0x000a, 0x1959: 0x000a, 0x195a: 0x000a, 0x195b: 0x000a, 0x195c: 0x000a, 0x195d: 0x000a, - 0x195e: 0x000a, 0x195f: 0x000a, 0x1960: 0x000a, 0x1961: 0x000a, 0x1962: 0x000a, 0x1963: 0x000a, - 0x1964: 0x000a, 0x1965: 0x000a, 0x1966: 0x000a, 0x1967: 0x000a, 0x1968: 0x000a, 0x1969: 0x000a, - 0x196a: 0x000a, 0x196b: 0x000a, 0x196c: 0x000a, 0x196d: 0x000a, 0x196e: 0x000a, 0x196f: 0x000a, - 0x1970: 0x000a, 0x1971: 0x000a, 0x1972: 0x000a, 0x1973: 0x000a, - 0x1976: 0x000a, 0x1977: 0x000a, 0x1978: 0x000a, 0x1979: 0x000a, 0x197a: 0x000a, 0x197b: 0x000a, - 0x197c: 0x000a, 0x197d: 0x000a, 0x197e: 0x000a, 0x197f: 0x000a, - // Block 0x66, offset 0x1980 - 0x1980: 0x000a, 0x1981: 0x000a, 0x1982: 0x000a, 0x1983: 0x000a, 0x1984: 0x000a, 0x1985: 0x000a, - 0x1986: 0x000a, 0x1987: 0x000a, 0x1988: 0x000a, 0x1989: 0x000a, 0x198a: 0x000a, 0x198b: 0x000a, - 0x198c: 0x000a, 0x198d: 0x000a, 0x198e: 0x000a, 0x198f: 0x000a, 0x1990: 0x000a, 0x1991: 0x000a, - 0x1992: 0x000a, 0x1993: 0x000a, 0x1994: 0x000a, 0x1995: 0x000a, - 0x1998: 0x000a, 0x1999: 0x000a, 0x199a: 0x000a, 0x199b: 0x000a, 0x199c: 0x000a, 0x199d: 0x000a, - 0x199e: 0x000a, 0x199f: 0x000a, 0x19a0: 0x000a, 0x19a1: 0x000a, 0x19a2: 0x000a, 0x19a3: 0x000a, - 0x19a4: 0x000a, 0x19a5: 0x000a, 0x19a6: 0x000a, 0x19a7: 0x000a, 0x19a8: 0x000a, 0x19a9: 0x000a, - 0x19aa: 0x000a, 0x19ab: 0x000a, 0x19ac: 0x000a, 0x19ad: 0x000a, 0x19ae: 0x000a, 0x19af: 0x000a, - 0x19b0: 0x000a, 0x19b1: 0x000a, 0x19b2: 0x000a, 0x19b3: 0x000a, 0x19b4: 0x000a, 0x19b5: 0x000a, - 0x19b6: 0x000a, 0x19b7: 0x000a, 0x19b8: 0x000a, 0x19b9: 0x000a, - 0x19bd: 0x000a, 0x19be: 0x000a, 0x19bf: 0x000a, - // Block 0x67, offset 0x19c0 - 0x19c0: 0x000a, 0x19c1: 0x000a, 0x19c2: 0x000a, 0x19c3: 0x000a, 0x19c4: 0x000a, 0x19c5: 0x000a, - 0x19c6: 0x000a, 0x19c7: 0x000a, 0x19c8: 0x000a, 0x19ca: 0x000a, 0x19cb: 0x000a, - 0x19cc: 0x000a, 0x19cd: 0x000a, 0x19ce: 0x000a, 0x19cf: 0x000a, 0x19d0: 0x000a, 0x19d1: 0x000a, - 0x19ec: 0x000a, 0x19ed: 0x000a, 0x19ee: 0x000a, 0x19ef: 0x000a, - // Block 0x68, offset 0x1a00 - 0x1a25: 0x000a, 0x1a26: 0x000a, 0x1a27: 0x000a, 0x1a28: 0x000a, 0x1a29: 0x000a, - 0x1a2a: 0x000a, 0x1a2f: 0x000c, - 0x1a30: 0x000c, 0x1a31: 0x000c, - 0x1a39: 0x000a, 0x1a3a: 0x000a, 0x1a3b: 0x000a, - 0x1a3c: 0x000a, 0x1a3d: 0x000a, 0x1a3e: 0x000a, 0x1a3f: 0x000a, - // Block 0x69, offset 0x1a40 - 0x1a7f: 0x000c, - // Block 0x6a, offset 0x1a80 - 0x1aa0: 0x000c, 0x1aa1: 0x000c, 0x1aa2: 0x000c, 0x1aa3: 0x000c, - 0x1aa4: 0x000c, 0x1aa5: 0x000c, 0x1aa6: 0x000c, 0x1aa7: 0x000c, 0x1aa8: 0x000c, 0x1aa9: 0x000c, - 0x1aaa: 0x000c, 0x1aab: 0x000c, 0x1aac: 0x000c, 0x1aad: 0x000c, 0x1aae: 0x000c, 0x1aaf: 0x000c, - 0x1ab0: 0x000c, 0x1ab1: 0x000c, 0x1ab2: 0x000c, 0x1ab3: 0x000c, 0x1ab4: 0x000c, 0x1ab5: 0x000c, - 0x1ab6: 0x000c, 0x1ab7: 0x000c, 0x1ab8: 0x000c, 0x1ab9: 0x000c, 0x1aba: 0x000c, 0x1abb: 0x000c, - 0x1abc: 0x000c, 0x1abd: 0x000c, 0x1abe: 0x000c, 0x1abf: 0x000c, - // Block 0x6b, offset 0x1ac0 - 0x1ac0: 0x000a, 0x1ac1: 0x000a, 0x1ac2: 0x000a, 0x1ac3: 0x000a, 0x1ac4: 0x000a, 0x1ac5: 0x000a, - 0x1ac6: 0x000a, 0x1ac7: 0x000a, 0x1ac8: 0x000a, 0x1ac9: 0x000a, 0x1aca: 0x000a, 0x1acb: 0x000a, - 0x1acc: 0x000a, 0x1acd: 0x000a, 0x1ace: 0x000a, 0x1acf: 0x000a, 0x1ad0: 0x000a, 0x1ad1: 0x000a, - 0x1ad2: 0x000a, 0x1ad3: 0x000a, 0x1ad4: 0x000a, 0x1ad5: 0x000a, 0x1ad6: 0x000a, 0x1ad7: 0x000a, - 0x1ad8: 0x000a, 0x1ad9: 0x000a, 0x1ada: 0x000a, 0x1adb: 0x000a, 0x1adc: 0x000a, 0x1add: 0x000a, - 0x1ade: 0x000a, 0x1adf: 0x000a, 0x1ae0: 0x000a, 0x1ae1: 0x000a, 0x1ae2: 0x003a, 0x1ae3: 0x002a, - 0x1ae4: 0x003a, 0x1ae5: 0x002a, 0x1ae6: 0x003a, 0x1ae7: 0x002a, 0x1ae8: 0x003a, 0x1ae9: 0x002a, - 0x1aea: 0x000a, 0x1aeb: 0x000a, 0x1aec: 0x000a, 0x1aed: 0x000a, 0x1aee: 0x000a, 0x1aef: 0x000a, - 0x1af0: 0x000a, 0x1af1: 0x000a, 0x1af2: 0x000a, 0x1af3: 0x000a, 0x1af4: 0x000a, 0x1af5: 0x000a, - 0x1af6: 0x000a, 0x1af7: 0x000a, 0x1af8: 0x000a, 0x1af9: 0x000a, 0x1afa: 0x000a, 0x1afb: 0x000a, - 0x1afc: 0x000a, 0x1afd: 0x000a, 0x1afe: 0x000a, 0x1aff: 0x000a, - // Block 0x6c, offset 0x1b00 - 0x1b00: 0x000a, 0x1b01: 0x000a, 0x1b02: 0x000a, 0x1b03: 0x000a, 0x1b04: 0x000a, - // Block 0x6d, offset 0x1b40 - 0x1b40: 0x000a, 0x1b41: 0x000a, 0x1b42: 0x000a, 0x1b43: 0x000a, 0x1b44: 0x000a, 0x1b45: 0x000a, - 0x1b46: 0x000a, 0x1b47: 0x000a, 0x1b48: 0x000a, 0x1b49: 0x000a, 0x1b4a: 0x000a, 0x1b4b: 0x000a, - 0x1b4c: 0x000a, 0x1b4d: 0x000a, 0x1b4e: 0x000a, 0x1b4f: 0x000a, 0x1b50: 0x000a, 0x1b51: 0x000a, - 0x1b52: 0x000a, 0x1b53: 0x000a, 0x1b54: 0x000a, 0x1b55: 0x000a, 0x1b56: 0x000a, 0x1b57: 0x000a, - 0x1b58: 0x000a, 0x1b59: 0x000a, 0x1b5b: 0x000a, 0x1b5c: 0x000a, 0x1b5d: 0x000a, - 0x1b5e: 0x000a, 0x1b5f: 0x000a, 0x1b60: 0x000a, 0x1b61: 0x000a, 0x1b62: 0x000a, 0x1b63: 0x000a, - 0x1b64: 0x000a, 0x1b65: 0x000a, 0x1b66: 0x000a, 0x1b67: 0x000a, 0x1b68: 0x000a, 0x1b69: 0x000a, - 0x1b6a: 0x000a, 0x1b6b: 0x000a, 0x1b6c: 0x000a, 0x1b6d: 0x000a, 0x1b6e: 0x000a, 0x1b6f: 0x000a, - 0x1b70: 0x000a, 0x1b71: 0x000a, 0x1b72: 0x000a, 0x1b73: 0x000a, 0x1b74: 0x000a, 0x1b75: 0x000a, - 0x1b76: 0x000a, 0x1b77: 0x000a, 0x1b78: 0x000a, 0x1b79: 0x000a, 0x1b7a: 0x000a, 0x1b7b: 0x000a, - 0x1b7c: 0x000a, 0x1b7d: 0x000a, 0x1b7e: 0x000a, 0x1b7f: 0x000a, - // Block 0x6e, offset 0x1b80 - 0x1b80: 0x000a, 0x1b81: 0x000a, 0x1b82: 0x000a, 0x1b83: 0x000a, 0x1b84: 0x000a, 0x1b85: 0x000a, - 0x1b86: 0x000a, 0x1b87: 0x000a, 0x1b88: 0x000a, 0x1b89: 0x000a, 0x1b8a: 0x000a, 0x1b8b: 0x000a, - 0x1b8c: 0x000a, 0x1b8d: 0x000a, 0x1b8e: 0x000a, 0x1b8f: 0x000a, 0x1b90: 0x000a, 0x1b91: 0x000a, - 0x1b92: 0x000a, 0x1b93: 0x000a, 0x1b94: 0x000a, 0x1b95: 0x000a, 0x1b96: 0x000a, 0x1b97: 0x000a, - 0x1b98: 0x000a, 0x1b99: 0x000a, 0x1b9a: 0x000a, 0x1b9b: 0x000a, 0x1b9c: 0x000a, 0x1b9d: 0x000a, - 0x1b9e: 0x000a, 0x1b9f: 0x000a, 0x1ba0: 0x000a, 0x1ba1: 0x000a, 0x1ba2: 0x000a, 0x1ba3: 0x000a, - 0x1ba4: 0x000a, 0x1ba5: 0x000a, 0x1ba6: 0x000a, 0x1ba7: 0x000a, 0x1ba8: 0x000a, 0x1ba9: 0x000a, - 0x1baa: 0x000a, 0x1bab: 0x000a, 0x1bac: 0x000a, 0x1bad: 0x000a, 0x1bae: 0x000a, 0x1baf: 0x000a, - 0x1bb0: 0x000a, 0x1bb1: 0x000a, 0x1bb2: 0x000a, 0x1bb3: 0x000a, - // Block 0x6f, offset 0x1bc0 - 0x1bc0: 0x000a, 0x1bc1: 0x000a, 0x1bc2: 0x000a, 0x1bc3: 0x000a, 0x1bc4: 0x000a, 0x1bc5: 0x000a, - 0x1bc6: 0x000a, 0x1bc7: 0x000a, 0x1bc8: 0x000a, 0x1bc9: 0x000a, 0x1bca: 0x000a, 0x1bcb: 0x000a, - 0x1bcc: 0x000a, 0x1bcd: 0x000a, 0x1bce: 0x000a, 0x1bcf: 0x000a, 0x1bd0: 0x000a, 0x1bd1: 0x000a, - 0x1bd2: 0x000a, 0x1bd3: 0x000a, 0x1bd4: 0x000a, 0x1bd5: 0x000a, - 0x1bf0: 0x000a, 0x1bf1: 0x000a, 0x1bf2: 0x000a, 0x1bf3: 0x000a, 0x1bf4: 0x000a, 0x1bf5: 0x000a, - 0x1bf6: 0x000a, 0x1bf7: 0x000a, 0x1bf8: 0x000a, 0x1bf9: 0x000a, 0x1bfa: 0x000a, 0x1bfb: 0x000a, - // Block 0x70, offset 0x1c00 - 0x1c00: 0x0009, 0x1c01: 0x000a, 0x1c02: 0x000a, 0x1c03: 0x000a, 0x1c04: 0x000a, - 0x1c08: 0x003a, 0x1c09: 0x002a, 0x1c0a: 0x003a, 0x1c0b: 0x002a, - 0x1c0c: 0x003a, 0x1c0d: 0x002a, 0x1c0e: 0x003a, 0x1c0f: 0x002a, 0x1c10: 0x003a, 0x1c11: 0x002a, - 0x1c12: 0x000a, 0x1c13: 0x000a, 0x1c14: 0x003a, 0x1c15: 0x002a, 0x1c16: 0x003a, 0x1c17: 0x002a, - 0x1c18: 0x003a, 0x1c19: 0x002a, 0x1c1a: 0x003a, 0x1c1b: 0x002a, 0x1c1c: 0x000a, 0x1c1d: 0x000a, - 0x1c1e: 0x000a, 0x1c1f: 0x000a, 0x1c20: 0x000a, - 0x1c2a: 0x000c, 0x1c2b: 0x000c, 0x1c2c: 0x000c, 0x1c2d: 0x000c, - 0x1c30: 0x000a, - 0x1c36: 0x000a, 0x1c37: 0x000a, - 0x1c3d: 0x000a, 0x1c3e: 0x000a, 0x1c3f: 0x000a, - // Block 0x71, offset 0x1c40 - 0x1c59: 0x000c, 0x1c5a: 0x000c, 0x1c5b: 0x000a, 0x1c5c: 0x000a, - 0x1c60: 0x000a, - // Block 0x72, offset 0x1c80 - 0x1cbb: 0x000a, - // Block 0x73, offset 0x1cc0 - 0x1cc0: 0x000a, 0x1cc1: 0x000a, 0x1cc2: 0x000a, 0x1cc3: 0x000a, 0x1cc4: 0x000a, 0x1cc5: 0x000a, - 0x1cc6: 0x000a, 0x1cc7: 0x000a, 0x1cc8: 0x000a, 0x1cc9: 0x000a, 0x1cca: 0x000a, 0x1ccb: 0x000a, - 0x1ccc: 0x000a, 0x1ccd: 0x000a, 0x1cce: 0x000a, 0x1ccf: 0x000a, 0x1cd0: 0x000a, 0x1cd1: 0x000a, - 0x1cd2: 0x000a, 0x1cd3: 0x000a, 0x1cd4: 0x000a, 0x1cd5: 0x000a, 0x1cd6: 0x000a, 0x1cd7: 0x000a, - 0x1cd8: 0x000a, 0x1cd9: 0x000a, 0x1cda: 0x000a, 0x1cdb: 0x000a, 0x1cdc: 0x000a, 0x1cdd: 0x000a, - 0x1cde: 0x000a, 0x1cdf: 0x000a, 0x1ce0: 0x000a, 0x1ce1: 0x000a, 0x1ce2: 0x000a, 0x1ce3: 0x000a, - // Block 0x74, offset 0x1d00 - 0x1d1d: 0x000a, - 0x1d1e: 0x000a, - // Block 0x75, offset 0x1d40 - 0x1d50: 0x000a, 0x1d51: 0x000a, - 0x1d52: 0x000a, 0x1d53: 0x000a, 0x1d54: 0x000a, 0x1d55: 0x000a, 0x1d56: 0x000a, 0x1d57: 0x000a, - 0x1d58: 0x000a, 0x1d59: 0x000a, 0x1d5a: 0x000a, 0x1d5b: 0x000a, 0x1d5c: 0x000a, 0x1d5d: 0x000a, - 0x1d5e: 0x000a, 0x1d5f: 0x000a, - 0x1d7c: 0x000a, 0x1d7d: 0x000a, 0x1d7e: 0x000a, - // Block 0x76, offset 0x1d80 - 0x1db1: 0x000a, 0x1db2: 0x000a, 0x1db3: 0x000a, 0x1db4: 0x000a, 0x1db5: 0x000a, - 0x1db6: 0x000a, 0x1db7: 0x000a, 0x1db8: 0x000a, 0x1db9: 0x000a, 0x1dba: 0x000a, 0x1dbb: 0x000a, - 0x1dbc: 0x000a, 0x1dbd: 0x000a, 0x1dbe: 0x000a, 0x1dbf: 0x000a, - // Block 0x77, offset 0x1dc0 - 0x1dcc: 0x000a, 0x1dcd: 0x000a, 0x1dce: 0x000a, 0x1dcf: 0x000a, - // Block 0x78, offset 0x1e00 - 0x1e37: 0x000a, 0x1e38: 0x000a, 0x1e39: 0x000a, 0x1e3a: 0x000a, - // Block 0x79, offset 0x1e40 - 0x1e5e: 0x000a, 0x1e5f: 0x000a, - 0x1e7f: 0x000a, - // Block 0x7a, offset 0x1e80 - 0x1e90: 0x000a, 0x1e91: 0x000a, - 0x1e92: 0x000a, 0x1e93: 0x000a, 0x1e94: 0x000a, 0x1e95: 0x000a, 0x1e96: 0x000a, 0x1e97: 0x000a, - 0x1e98: 0x000a, 0x1e99: 0x000a, 0x1e9a: 0x000a, 0x1e9b: 0x000a, 0x1e9c: 0x000a, 0x1e9d: 0x000a, - 0x1e9e: 0x000a, 0x1e9f: 0x000a, 0x1ea0: 0x000a, 0x1ea1: 0x000a, 0x1ea2: 0x000a, 0x1ea3: 0x000a, - 0x1ea4: 0x000a, 0x1ea5: 0x000a, 0x1ea6: 0x000a, 0x1ea7: 0x000a, 0x1ea8: 0x000a, 0x1ea9: 0x000a, - 0x1eaa: 0x000a, 0x1eab: 0x000a, 0x1eac: 0x000a, 0x1ead: 0x000a, 0x1eae: 0x000a, 0x1eaf: 0x000a, - 0x1eb0: 0x000a, 0x1eb1: 0x000a, 0x1eb2: 0x000a, 0x1eb3: 0x000a, 0x1eb4: 0x000a, 0x1eb5: 0x000a, - 0x1eb6: 0x000a, 0x1eb7: 0x000a, 0x1eb8: 0x000a, 0x1eb9: 0x000a, 0x1eba: 0x000a, 0x1ebb: 0x000a, - 0x1ebc: 0x000a, 0x1ebd: 0x000a, 0x1ebe: 0x000a, 0x1ebf: 0x000a, - // Block 0x7b, offset 0x1ec0 - 0x1ec0: 0x000a, 0x1ec1: 0x000a, 0x1ec2: 0x000a, 0x1ec3: 0x000a, 0x1ec4: 0x000a, 0x1ec5: 0x000a, - 0x1ec6: 0x000a, - // Block 0x7c, offset 0x1f00 - 0x1f0d: 0x000a, 0x1f0e: 0x000a, 0x1f0f: 0x000a, - // Block 0x7d, offset 0x1f40 - 0x1f6f: 0x000c, - 0x1f70: 0x000c, 0x1f71: 0x000c, 0x1f72: 0x000c, 0x1f73: 0x000a, 0x1f74: 0x000c, 0x1f75: 0x000c, - 0x1f76: 0x000c, 0x1f77: 0x000c, 0x1f78: 0x000c, 0x1f79: 0x000c, 0x1f7a: 0x000c, 0x1f7b: 0x000c, - 0x1f7c: 0x000c, 0x1f7d: 0x000c, 0x1f7e: 0x000a, 0x1f7f: 0x000a, - // Block 0x7e, offset 0x1f80 - 0x1f9e: 0x000c, 0x1f9f: 0x000c, - // Block 0x7f, offset 0x1fc0 - 0x1ff0: 0x000c, 0x1ff1: 0x000c, - // Block 0x80, offset 0x2000 - 0x2000: 0x000a, 0x2001: 0x000a, 0x2002: 0x000a, 0x2003: 0x000a, 0x2004: 0x000a, 0x2005: 0x000a, - 0x2006: 0x000a, 0x2007: 0x000a, 0x2008: 0x000a, 0x2009: 0x000a, 0x200a: 0x000a, 0x200b: 0x000a, - 0x200c: 0x000a, 0x200d: 0x000a, 0x200e: 0x000a, 0x200f: 0x000a, 0x2010: 0x000a, 0x2011: 0x000a, - 0x2012: 0x000a, 0x2013: 0x000a, 0x2014: 0x000a, 0x2015: 0x000a, 0x2016: 0x000a, 0x2017: 0x000a, - 0x2018: 0x000a, 0x2019: 0x000a, 0x201a: 0x000a, 0x201b: 0x000a, 0x201c: 0x000a, 0x201d: 0x000a, - 0x201e: 0x000a, 0x201f: 0x000a, 0x2020: 0x000a, 0x2021: 0x000a, - // Block 0x81, offset 0x2040 - 0x2048: 0x000a, - // Block 0x82, offset 0x2080 - 0x2082: 0x000c, - 0x2086: 0x000c, 0x208b: 0x000c, - 0x20a5: 0x000c, 0x20a6: 0x000c, 0x20a8: 0x000a, 0x20a9: 0x000a, - 0x20aa: 0x000a, 0x20ab: 0x000a, - 0x20b8: 0x0004, 0x20b9: 0x0004, - // Block 0x83, offset 0x20c0 - 0x20f4: 0x000a, 0x20f5: 0x000a, - 0x20f6: 0x000a, 0x20f7: 0x000a, - // Block 0x84, offset 0x2100 - 0x2104: 0x000c, 0x2105: 0x000c, - 0x2120: 0x000c, 0x2121: 0x000c, 0x2122: 0x000c, 0x2123: 0x000c, - 0x2124: 0x000c, 0x2125: 0x000c, 0x2126: 0x000c, 0x2127: 0x000c, 0x2128: 0x000c, 0x2129: 0x000c, - 0x212a: 0x000c, 0x212b: 0x000c, 0x212c: 0x000c, 0x212d: 0x000c, 0x212e: 0x000c, 0x212f: 0x000c, - 0x2130: 0x000c, 0x2131: 0x000c, - // Block 0x85, offset 0x2140 - 0x2166: 0x000c, 0x2167: 0x000c, 0x2168: 0x000c, 0x2169: 0x000c, - 0x216a: 0x000c, 0x216b: 0x000c, 0x216c: 0x000c, 0x216d: 0x000c, - // Block 0x86, offset 0x2180 - 0x2187: 0x000c, 0x2188: 0x000c, 0x2189: 0x000c, 0x218a: 0x000c, 0x218b: 0x000c, - 0x218c: 0x000c, 0x218d: 0x000c, 0x218e: 0x000c, 0x218f: 0x000c, 0x2190: 0x000c, 0x2191: 0x000c, - // Block 0x87, offset 0x21c0 - 0x21c0: 0x000c, 0x21c1: 0x000c, 0x21c2: 0x000c, - 0x21f3: 0x000c, - 0x21f6: 0x000c, 0x21f7: 0x000c, 0x21f8: 0x000c, 0x21f9: 0x000c, - 0x21fc: 0x000c, - // Block 0x88, offset 0x2200 - 0x2225: 0x000c, - // Block 0x89, offset 0x2240 - 0x2269: 0x000c, - 0x226a: 0x000c, 0x226b: 0x000c, 0x226c: 0x000c, 0x226d: 0x000c, 0x226e: 0x000c, - 0x2271: 0x000c, 0x2272: 0x000c, 0x2275: 0x000c, - 0x2276: 0x000c, - // Block 0x8a, offset 0x2280 - 0x2283: 0x000c, - 0x228c: 0x000c, - 0x22bc: 0x000c, - // Block 0x8b, offset 0x22c0 - 0x22f0: 0x000c, 0x22f2: 0x000c, 0x22f3: 0x000c, 0x22f4: 0x000c, - 0x22f7: 0x000c, 0x22f8: 0x000c, - 0x22fe: 0x000c, 0x22ff: 0x000c, - // Block 0x8c, offset 0x2300 - 0x2301: 0x000c, - 0x232c: 0x000c, 0x232d: 0x000c, - 0x2336: 0x000c, - // Block 0x8d, offset 0x2340 - 0x2365: 0x000c, 0x2368: 0x000c, - 0x236d: 0x000c, - // Block 0x8e, offset 0x2380 - 0x239d: 0x0001, - 0x239e: 0x000c, 0x239f: 0x0001, 0x23a0: 0x0001, 0x23a1: 0x0001, 0x23a2: 0x0001, 0x23a3: 0x0001, - 0x23a4: 0x0001, 0x23a5: 0x0001, 0x23a6: 0x0001, 0x23a7: 0x0001, 0x23a8: 0x0001, 0x23a9: 0x0003, - 0x23aa: 0x0001, 0x23ab: 0x0001, 0x23ac: 0x0001, 0x23ad: 0x0001, 0x23ae: 0x0001, 0x23af: 0x0001, - 0x23b0: 0x0001, 0x23b1: 0x0001, 0x23b2: 0x0001, 0x23b3: 0x0001, 0x23b4: 0x0001, 0x23b5: 0x0001, - 0x23b6: 0x0001, 0x23b7: 0x0001, 0x23b8: 0x0001, 0x23b9: 0x0001, 0x23ba: 0x0001, 0x23bb: 0x0001, - 0x23bc: 0x0001, 0x23bd: 0x0001, 0x23be: 0x0001, 0x23bf: 0x0001, - // Block 0x8f, offset 0x23c0 - 0x23c0: 0x0001, 0x23c1: 0x0001, 0x23c2: 0x0001, 0x23c3: 0x0001, 0x23c4: 0x0001, 0x23c5: 0x0001, - 0x23c6: 0x0001, 0x23c7: 0x0001, 0x23c8: 0x0001, 0x23c9: 0x0001, 0x23ca: 0x0001, 0x23cb: 0x0001, - 0x23cc: 0x0001, 0x23cd: 0x0001, 0x23ce: 0x0001, 0x23cf: 0x0001, 0x23d0: 0x000d, 0x23d1: 0x000d, - 0x23d2: 0x000d, 0x23d3: 0x000d, 0x23d4: 0x000d, 0x23d5: 0x000d, 0x23d6: 0x000d, 0x23d7: 0x000d, - 0x23d8: 0x000d, 0x23d9: 0x000d, 0x23da: 0x000d, 0x23db: 0x000d, 0x23dc: 0x000d, 0x23dd: 0x000d, - 0x23de: 0x000d, 0x23df: 0x000d, 0x23e0: 0x000d, 0x23e1: 0x000d, 0x23e2: 0x000d, 0x23e3: 0x000d, - 0x23e4: 0x000d, 0x23e5: 0x000d, 0x23e6: 0x000d, 0x23e7: 0x000d, 0x23e8: 0x000d, 0x23e9: 0x000d, - 0x23ea: 0x000d, 0x23eb: 0x000d, 0x23ec: 0x000d, 0x23ed: 0x000d, 0x23ee: 0x000d, 0x23ef: 0x000d, - 0x23f0: 0x000d, 0x23f1: 0x000d, 0x23f2: 0x000d, 0x23f3: 0x000d, 0x23f4: 0x000d, 0x23f5: 0x000d, - 0x23f6: 0x000d, 0x23f7: 0x000d, 0x23f8: 0x000d, 0x23f9: 0x000d, 0x23fa: 0x000d, 0x23fb: 0x000d, - 0x23fc: 0x000d, 0x23fd: 0x000d, 0x23fe: 0x000d, 0x23ff: 0x000d, - // Block 0x90, offset 0x2400 - 0x2400: 0x000d, 0x2401: 0x000d, 0x2402: 0x000d, 0x2403: 0x000d, 0x2404: 0x000d, 0x2405: 0x000d, - 0x2406: 0x000d, 0x2407: 0x000d, 0x2408: 0x000d, 0x2409: 0x000d, 0x240a: 0x000d, 0x240b: 0x000d, - 0x240c: 0x000d, 0x240d: 0x000d, 0x240e: 0x000d, 0x240f: 0x000d, 0x2410: 0x000d, 0x2411: 0x000d, - 0x2412: 0x000d, 0x2413: 0x000d, 0x2414: 0x000d, 0x2415: 0x000d, 0x2416: 0x000d, 0x2417: 0x000d, - 0x2418: 0x000d, 0x2419: 0x000d, 0x241a: 0x000d, 0x241b: 0x000d, 0x241c: 0x000d, 0x241d: 0x000d, - 0x241e: 0x000d, 0x241f: 0x000d, 0x2420: 0x000d, 0x2421: 0x000d, 0x2422: 0x000d, 0x2423: 0x000d, - 0x2424: 0x000d, 0x2425: 0x000d, 0x2426: 0x000d, 0x2427: 0x000d, 0x2428: 0x000d, 0x2429: 0x000d, - 0x242a: 0x000d, 0x242b: 0x000d, 0x242c: 0x000d, 0x242d: 0x000d, 0x242e: 0x000d, 0x242f: 0x000d, - 0x2430: 0x000d, 0x2431: 0x000d, 0x2432: 0x000d, 0x2433: 0x000d, 0x2434: 0x000d, 0x2435: 0x000d, - 0x2436: 0x000d, 0x2437: 0x000d, 0x2438: 0x000d, 0x2439: 0x000d, 0x243a: 0x000d, 0x243b: 0x000d, - 0x243c: 0x000d, 0x243d: 0x000d, 0x243e: 0x000a, 0x243f: 0x000a, - // Block 0x91, offset 0x2440 - 0x2440: 0x000d, 0x2441: 0x000d, 0x2442: 0x000d, 0x2443: 0x000d, 0x2444: 0x000d, 0x2445: 0x000d, - 0x2446: 0x000d, 0x2447: 0x000d, 0x2448: 0x000d, 0x2449: 0x000d, 0x244a: 0x000d, 0x244b: 0x000d, - 0x244c: 0x000d, 0x244d: 0x000d, 0x244e: 0x000d, 0x244f: 0x000d, 0x2450: 0x000b, 0x2451: 0x000b, - 0x2452: 0x000b, 0x2453: 0x000b, 0x2454: 0x000b, 0x2455: 0x000b, 0x2456: 0x000b, 0x2457: 0x000b, - 0x2458: 0x000b, 0x2459: 0x000b, 0x245a: 0x000b, 0x245b: 0x000b, 0x245c: 0x000b, 0x245d: 0x000b, - 0x245e: 0x000b, 0x245f: 0x000b, 0x2460: 0x000b, 0x2461: 0x000b, 0x2462: 0x000b, 0x2463: 0x000b, - 0x2464: 0x000b, 0x2465: 0x000b, 0x2466: 0x000b, 0x2467: 0x000b, 0x2468: 0x000b, 0x2469: 0x000b, - 0x246a: 0x000b, 0x246b: 0x000b, 0x246c: 0x000b, 0x246d: 0x000b, 0x246e: 0x000b, 0x246f: 0x000b, - 0x2470: 0x000d, 0x2471: 0x000d, 0x2472: 0x000d, 0x2473: 0x000d, 0x2474: 0x000d, 0x2475: 0x000d, - 0x2476: 0x000d, 0x2477: 0x000d, 0x2478: 0x000d, 0x2479: 0x000d, 0x247a: 0x000d, 0x247b: 0x000d, - 0x247c: 0x000d, 0x247d: 0x000a, 0x247e: 0x000d, 0x247f: 0x000d, - // Block 0x92, offset 0x2480 - 0x2480: 0x000c, 0x2481: 0x000c, 0x2482: 0x000c, 0x2483: 0x000c, 0x2484: 0x000c, 0x2485: 0x000c, - 0x2486: 0x000c, 0x2487: 0x000c, 0x2488: 0x000c, 0x2489: 0x000c, 0x248a: 0x000c, 0x248b: 0x000c, - 0x248c: 0x000c, 0x248d: 0x000c, 0x248e: 0x000c, 0x248f: 0x000c, 0x2490: 0x000a, 0x2491: 0x000a, - 0x2492: 0x000a, 0x2493: 0x000a, 0x2494: 0x000a, 0x2495: 0x000a, 0x2496: 0x000a, 0x2497: 0x000a, - 0x2498: 0x000a, 0x2499: 0x000a, - 0x24a0: 0x000c, 0x24a1: 0x000c, 0x24a2: 0x000c, 0x24a3: 0x000c, - 0x24a4: 0x000c, 0x24a5: 0x000c, 0x24a6: 0x000c, 0x24a7: 0x000c, 0x24a8: 0x000c, 0x24a9: 0x000c, - 0x24aa: 0x000c, 0x24ab: 0x000c, 0x24ac: 0x000c, 0x24ad: 0x000c, 0x24ae: 0x000c, 0x24af: 0x000c, - 0x24b0: 0x000a, 0x24b1: 0x000a, 0x24b2: 0x000a, 0x24b3: 0x000a, 0x24b4: 0x000a, 0x24b5: 0x000a, - 0x24b6: 0x000a, 0x24b7: 0x000a, 0x24b8: 0x000a, 0x24b9: 0x000a, 0x24ba: 0x000a, 0x24bb: 0x000a, - 0x24bc: 0x000a, 0x24bd: 0x000a, 0x24be: 0x000a, 0x24bf: 0x000a, - // Block 0x93, offset 0x24c0 - 0x24c0: 0x000a, 0x24c1: 0x000a, 0x24c2: 0x000a, 0x24c3: 0x000a, 0x24c4: 0x000a, 0x24c5: 0x000a, - 0x24c6: 0x000a, 0x24c7: 0x000a, 0x24c8: 0x000a, 0x24c9: 0x000a, 0x24ca: 0x000a, 0x24cb: 0x000a, - 0x24cc: 0x000a, 0x24cd: 0x000a, 0x24ce: 0x000a, 0x24cf: 0x000a, 0x24d0: 0x0006, 0x24d1: 0x000a, - 0x24d2: 0x0006, 0x24d4: 0x000a, 0x24d5: 0x0006, 0x24d6: 0x000a, 0x24d7: 0x000a, - 0x24d8: 0x000a, 0x24d9: 0x009a, 0x24da: 0x008a, 0x24db: 0x007a, 0x24dc: 0x006a, 0x24dd: 0x009a, - 0x24de: 0x008a, 0x24df: 0x0004, 0x24e0: 0x000a, 0x24e1: 0x000a, 0x24e2: 0x0003, 0x24e3: 0x0003, - 0x24e4: 0x000a, 0x24e5: 0x000a, 0x24e6: 0x000a, 0x24e8: 0x000a, 0x24e9: 0x0004, - 0x24ea: 0x0004, 0x24eb: 0x000a, - 0x24f0: 0x000d, 0x24f1: 0x000d, 0x24f2: 0x000d, 0x24f3: 0x000d, 0x24f4: 0x000d, 0x24f5: 0x000d, - 0x24f6: 0x000d, 0x24f7: 0x000d, 0x24f8: 0x000d, 0x24f9: 0x000d, 0x24fa: 0x000d, 0x24fb: 0x000d, - 0x24fc: 0x000d, 0x24fd: 0x000d, 0x24fe: 0x000d, 0x24ff: 0x000d, - // Block 0x94, offset 0x2500 - 0x2500: 0x000d, 0x2501: 0x000d, 0x2502: 0x000d, 0x2503: 0x000d, 0x2504: 0x000d, 0x2505: 0x000d, - 0x2506: 0x000d, 0x2507: 0x000d, 0x2508: 0x000d, 0x2509: 0x000d, 0x250a: 0x000d, 0x250b: 0x000d, - 0x250c: 0x000d, 0x250d: 0x000d, 0x250e: 0x000d, 0x250f: 0x000d, 0x2510: 0x000d, 0x2511: 0x000d, - 0x2512: 0x000d, 0x2513: 0x000d, 0x2514: 0x000d, 0x2515: 0x000d, 0x2516: 0x000d, 0x2517: 0x000d, - 0x2518: 0x000d, 0x2519: 0x000d, 0x251a: 0x000d, 0x251b: 0x000d, 0x251c: 0x000d, 0x251d: 0x000d, - 0x251e: 0x000d, 0x251f: 0x000d, 0x2520: 0x000d, 0x2521: 0x000d, 0x2522: 0x000d, 0x2523: 0x000d, - 0x2524: 0x000d, 0x2525: 0x000d, 0x2526: 0x000d, 0x2527: 0x000d, 0x2528: 0x000d, 0x2529: 0x000d, - 0x252a: 0x000d, 0x252b: 0x000d, 0x252c: 0x000d, 0x252d: 0x000d, 0x252e: 0x000d, 0x252f: 0x000d, - 0x2530: 0x000d, 0x2531: 0x000d, 0x2532: 0x000d, 0x2533: 0x000d, 0x2534: 0x000d, 0x2535: 0x000d, - 0x2536: 0x000d, 0x2537: 0x000d, 0x2538: 0x000d, 0x2539: 0x000d, 0x253a: 0x000d, 0x253b: 0x000d, - 0x253c: 0x000d, 0x253d: 0x000d, 0x253e: 0x000d, 0x253f: 0x000b, - // Block 0x95, offset 0x2540 - 0x2541: 0x000a, 0x2542: 0x000a, 0x2543: 0x0004, 0x2544: 0x0004, 0x2545: 0x0004, - 0x2546: 0x000a, 0x2547: 0x000a, 0x2548: 0x003a, 0x2549: 0x002a, 0x254a: 0x000a, 0x254b: 0x0003, - 0x254c: 0x0006, 0x254d: 0x0003, 0x254e: 0x0006, 0x254f: 0x0006, 0x2550: 0x0002, 0x2551: 0x0002, - 0x2552: 0x0002, 0x2553: 0x0002, 0x2554: 0x0002, 0x2555: 0x0002, 0x2556: 0x0002, 0x2557: 0x0002, - 0x2558: 0x0002, 0x2559: 0x0002, 0x255a: 0x0006, 0x255b: 0x000a, 0x255c: 0x000a, 0x255d: 0x000a, - 0x255e: 0x000a, 0x255f: 0x000a, 0x2560: 0x000a, - 0x257b: 0x005a, - 0x257c: 0x000a, 0x257d: 0x004a, 0x257e: 0x000a, 0x257f: 0x000a, - // Block 0x96, offset 0x2580 - 0x2580: 0x000a, - 0x259b: 0x005a, 0x259c: 0x000a, 0x259d: 0x004a, - 0x259e: 0x000a, 0x259f: 0x00fa, 0x25a0: 0x00ea, 0x25a1: 0x000a, 0x25a2: 0x003a, 0x25a3: 0x002a, - 0x25a4: 0x000a, 0x25a5: 0x000a, - // Block 0x97, offset 0x25c0 - 0x25e0: 0x0004, 0x25e1: 0x0004, 0x25e2: 0x000a, 0x25e3: 0x000a, - 0x25e4: 0x000a, 0x25e5: 0x0004, 0x25e6: 0x0004, 0x25e8: 0x000a, 0x25e9: 0x000a, - 0x25ea: 0x000a, 0x25eb: 0x000a, 0x25ec: 0x000a, 0x25ed: 0x000a, 0x25ee: 0x000a, - 0x25f0: 0x000b, 0x25f1: 0x000b, 0x25f2: 0x000b, 0x25f3: 0x000b, 0x25f4: 0x000b, 0x25f5: 0x000b, - 0x25f6: 0x000b, 0x25f7: 0x000b, 0x25f8: 0x000b, 0x25f9: 0x000a, 0x25fa: 0x000a, 0x25fb: 0x000a, - 0x25fc: 0x000a, 0x25fd: 0x000a, 0x25fe: 0x000b, 0x25ff: 0x000b, - // Block 0x98, offset 0x2600 - 0x2601: 0x000a, - // Block 0x99, offset 0x2640 - 0x2640: 0x000a, 0x2641: 0x000a, 0x2642: 0x000a, 0x2643: 0x000a, 0x2644: 0x000a, 0x2645: 0x000a, - 0x2646: 0x000a, 0x2647: 0x000a, 0x2648: 0x000a, 0x2649: 0x000a, 0x264a: 0x000a, 0x264b: 0x000a, - 0x264c: 0x000a, 0x2650: 0x000a, 0x2651: 0x000a, - 0x2652: 0x000a, 0x2653: 0x000a, 0x2654: 0x000a, 0x2655: 0x000a, 0x2656: 0x000a, 0x2657: 0x000a, - 0x2658: 0x000a, 0x2659: 0x000a, 0x265a: 0x000a, 0x265b: 0x000a, - 0x2660: 0x000a, - // Block 0x9a, offset 0x2680 - 0x26bd: 0x000c, - // Block 0x9b, offset 0x26c0 - 0x26e0: 0x000c, 0x26e1: 0x0002, 0x26e2: 0x0002, 0x26e3: 0x0002, - 0x26e4: 0x0002, 0x26e5: 0x0002, 0x26e6: 0x0002, 0x26e7: 0x0002, 0x26e8: 0x0002, 0x26e9: 0x0002, - 0x26ea: 0x0002, 0x26eb: 0x0002, 0x26ec: 0x0002, 0x26ed: 0x0002, 0x26ee: 0x0002, 0x26ef: 0x0002, - 0x26f0: 0x0002, 0x26f1: 0x0002, 0x26f2: 0x0002, 0x26f3: 0x0002, 0x26f4: 0x0002, 0x26f5: 0x0002, - 0x26f6: 0x0002, 0x26f7: 0x0002, 0x26f8: 0x0002, 0x26f9: 0x0002, 0x26fa: 0x0002, 0x26fb: 0x0002, - // Block 0x9c, offset 0x2700 - 0x2736: 0x000c, 0x2737: 0x000c, 0x2738: 0x000c, 0x2739: 0x000c, 0x273a: 0x000c, - // Block 0x9d, offset 0x2740 - 0x2740: 0x0001, 0x2741: 0x0001, 0x2742: 0x0001, 0x2743: 0x0001, 0x2744: 0x0001, 0x2745: 0x0001, - 0x2746: 0x0001, 0x2747: 0x0001, 0x2748: 0x0001, 0x2749: 0x0001, 0x274a: 0x0001, 0x274b: 0x0001, - 0x274c: 0x0001, 0x274d: 0x0001, 0x274e: 0x0001, 0x274f: 0x0001, 0x2750: 0x0001, 0x2751: 0x0001, - 0x2752: 0x0001, 0x2753: 0x0001, 0x2754: 0x0001, 0x2755: 0x0001, 0x2756: 0x0001, 0x2757: 0x0001, - 0x2758: 0x0001, 0x2759: 0x0001, 0x275a: 0x0001, 0x275b: 0x0001, 0x275c: 0x0001, 0x275d: 0x0001, - 0x275e: 0x0001, 0x275f: 0x0001, 0x2760: 0x0001, 0x2761: 0x0001, 0x2762: 0x0001, 0x2763: 0x0001, - 0x2764: 0x0001, 0x2765: 0x0001, 0x2766: 0x0001, 0x2767: 0x0001, 0x2768: 0x0001, 0x2769: 0x0001, - 0x276a: 0x0001, 0x276b: 0x0001, 0x276c: 0x0001, 0x276d: 0x0001, 0x276e: 0x0001, 0x276f: 0x0001, - 0x2770: 0x0001, 0x2771: 0x0001, 0x2772: 0x0001, 0x2773: 0x0001, 0x2774: 0x0001, 0x2775: 0x0001, - 0x2776: 0x0001, 0x2777: 0x0001, 0x2778: 0x0001, 0x2779: 0x0001, 0x277a: 0x0001, 0x277b: 0x0001, - 0x277c: 0x0001, 0x277d: 0x0001, 0x277e: 0x0001, 0x277f: 0x0001, - // Block 0x9e, offset 0x2780 - 0x2780: 0x0001, 0x2781: 0x0001, 0x2782: 0x0001, 0x2783: 0x0001, 0x2784: 0x0001, 0x2785: 0x0001, - 0x2786: 0x0001, 0x2787: 0x0001, 0x2788: 0x0001, 0x2789: 0x0001, 0x278a: 0x0001, 0x278b: 0x0001, - 0x278c: 0x0001, 0x278d: 0x0001, 0x278e: 0x0001, 0x278f: 0x0001, 0x2790: 0x0001, 0x2791: 0x0001, - 0x2792: 0x0001, 0x2793: 0x0001, 0x2794: 0x0001, 0x2795: 0x0001, 0x2796: 0x0001, 0x2797: 0x0001, - 0x2798: 0x0001, 0x2799: 0x0001, 0x279a: 0x0001, 0x279b: 0x0001, 0x279c: 0x0001, 0x279d: 0x0001, - 0x279e: 0x0001, 0x279f: 0x000a, 0x27a0: 0x0001, 0x27a1: 0x0001, 0x27a2: 0x0001, 0x27a3: 0x0001, - 0x27a4: 0x0001, 0x27a5: 0x0001, 0x27a6: 0x0001, 0x27a7: 0x0001, 0x27a8: 0x0001, 0x27a9: 0x0001, - 0x27aa: 0x0001, 0x27ab: 0x0001, 0x27ac: 0x0001, 0x27ad: 0x0001, 0x27ae: 0x0001, 0x27af: 0x0001, - 0x27b0: 0x0001, 0x27b1: 0x0001, 0x27b2: 0x0001, 0x27b3: 0x0001, 0x27b4: 0x0001, 0x27b5: 0x0001, - 0x27b6: 0x0001, 0x27b7: 0x0001, 0x27b8: 0x0001, 0x27b9: 0x0001, 0x27ba: 0x0001, 0x27bb: 0x0001, - 0x27bc: 0x0001, 0x27bd: 0x0001, 0x27be: 0x0001, 0x27bf: 0x0001, - // Block 0x9f, offset 0x27c0 - 0x27c0: 0x0001, 0x27c1: 0x000c, 0x27c2: 0x000c, 0x27c3: 0x000c, 0x27c4: 0x0001, 0x27c5: 0x000c, - 0x27c6: 0x000c, 0x27c7: 0x0001, 0x27c8: 0x0001, 0x27c9: 0x0001, 0x27ca: 0x0001, 0x27cb: 0x0001, - 0x27cc: 0x000c, 0x27cd: 0x000c, 0x27ce: 0x000c, 0x27cf: 0x000c, 0x27d0: 0x0001, 0x27d1: 0x0001, - 0x27d2: 0x0001, 0x27d3: 0x0001, 0x27d4: 0x0001, 0x27d5: 0x0001, 0x27d6: 0x0001, 0x27d7: 0x0001, - 0x27d8: 0x0001, 0x27d9: 0x0001, 0x27da: 0x0001, 0x27db: 0x0001, 0x27dc: 0x0001, 0x27dd: 0x0001, - 0x27de: 0x0001, 0x27df: 0x0001, 0x27e0: 0x0001, 0x27e1: 0x0001, 0x27e2: 0x0001, 0x27e3: 0x0001, - 0x27e4: 0x0001, 0x27e5: 0x0001, 0x27e6: 0x0001, 0x27e7: 0x0001, 0x27e8: 0x0001, 0x27e9: 0x0001, - 0x27ea: 0x0001, 0x27eb: 0x0001, 0x27ec: 0x0001, 0x27ed: 0x0001, 0x27ee: 0x0001, 0x27ef: 0x0001, - 0x27f0: 0x0001, 0x27f1: 0x0001, 0x27f2: 0x0001, 0x27f3: 0x0001, 0x27f4: 0x0001, 0x27f5: 0x0001, - 0x27f6: 0x0001, 0x27f7: 0x0001, 0x27f8: 0x000c, 0x27f9: 0x000c, 0x27fa: 0x000c, 0x27fb: 0x0001, - 0x27fc: 0x0001, 0x27fd: 0x0001, 0x27fe: 0x0001, 0x27ff: 0x000c, - // Block 0xa0, offset 0x2800 - 0x2800: 0x0001, 0x2801: 0x0001, 0x2802: 0x0001, 0x2803: 0x0001, 0x2804: 0x0001, 0x2805: 0x0001, - 0x2806: 0x0001, 0x2807: 0x0001, 0x2808: 0x0001, 0x2809: 0x0001, 0x280a: 0x0001, 0x280b: 0x0001, - 0x280c: 0x0001, 0x280d: 0x0001, 0x280e: 0x0001, 0x280f: 0x0001, 0x2810: 0x0001, 0x2811: 0x0001, - 0x2812: 0x0001, 0x2813: 0x0001, 0x2814: 0x0001, 0x2815: 0x0001, 0x2816: 0x0001, 0x2817: 0x0001, - 0x2818: 0x0001, 0x2819: 0x0001, 0x281a: 0x0001, 0x281b: 0x0001, 0x281c: 0x0001, 0x281d: 0x0001, - 0x281e: 0x0001, 0x281f: 0x0001, 0x2820: 0x0001, 0x2821: 0x0001, 0x2822: 0x0001, 0x2823: 0x0001, - 0x2824: 0x0001, 0x2825: 0x000c, 0x2826: 0x000c, 0x2827: 0x0001, 0x2828: 0x0001, 0x2829: 0x0001, - 0x282a: 0x0001, 0x282b: 0x0001, 0x282c: 0x0001, 0x282d: 0x0001, 0x282e: 0x0001, 0x282f: 0x0001, - 0x2830: 0x0001, 0x2831: 0x0001, 0x2832: 0x0001, 0x2833: 0x0001, 0x2834: 0x0001, 0x2835: 0x0001, - 0x2836: 0x0001, 0x2837: 0x0001, 0x2838: 0x0001, 0x2839: 0x0001, 0x283a: 0x0001, 0x283b: 0x0001, - 0x283c: 0x0001, 0x283d: 0x0001, 0x283e: 0x0001, 0x283f: 0x0001, - // Block 0xa1, offset 0x2840 - 0x2840: 0x0001, 0x2841: 0x0001, 0x2842: 0x0001, 0x2843: 0x0001, 0x2844: 0x0001, 0x2845: 0x0001, - 0x2846: 0x0001, 0x2847: 0x0001, 0x2848: 0x0001, 0x2849: 0x0001, 0x284a: 0x0001, 0x284b: 0x0001, - 0x284c: 0x0001, 0x284d: 0x0001, 0x284e: 0x0001, 0x284f: 0x0001, 0x2850: 0x0001, 0x2851: 0x0001, - 0x2852: 0x0001, 0x2853: 0x0001, 0x2854: 0x0001, 0x2855: 0x0001, 0x2856: 0x0001, 0x2857: 0x0001, - 0x2858: 0x0001, 0x2859: 0x0001, 0x285a: 0x0001, 0x285b: 0x0001, 0x285c: 0x0001, 0x285d: 0x0001, - 0x285e: 0x0001, 0x285f: 0x0001, 0x2860: 0x0001, 0x2861: 0x0001, 0x2862: 0x0001, 0x2863: 0x0001, - 0x2864: 0x0001, 0x2865: 0x0001, 0x2866: 0x0001, 0x2867: 0x0001, 0x2868: 0x0001, 0x2869: 0x0001, - 0x286a: 0x0001, 0x286b: 0x0001, 0x286c: 0x0001, 0x286d: 0x0001, 0x286e: 0x0001, 0x286f: 0x0001, - 0x2870: 0x0001, 0x2871: 0x0001, 0x2872: 0x0001, 0x2873: 0x0001, 0x2874: 0x0001, 0x2875: 0x0001, - 0x2876: 0x0001, 0x2877: 0x0001, 0x2878: 0x0001, 0x2879: 0x000a, 0x287a: 0x000a, 0x287b: 0x000a, - 0x287c: 0x000a, 0x287d: 0x000a, 0x287e: 0x000a, 0x287f: 0x000a, - // Block 0xa2, offset 0x2880 - 0x2880: 0x0001, 0x2881: 0x0001, 0x2882: 0x0001, 0x2883: 0x0001, 0x2884: 0x0001, 0x2885: 0x0001, - 0x2886: 0x0001, 0x2887: 0x0001, 0x2888: 0x0001, 0x2889: 0x0001, 0x288a: 0x0001, 0x288b: 0x0001, - 0x288c: 0x0001, 0x288d: 0x0001, 0x288e: 0x0001, 0x288f: 0x0001, 0x2890: 0x0001, 0x2891: 0x0001, - 0x2892: 0x0001, 0x2893: 0x0001, 0x2894: 0x0001, 0x2895: 0x0001, 0x2896: 0x0001, 0x2897: 0x0001, - 0x2898: 0x0001, 0x2899: 0x0001, 0x289a: 0x0001, 0x289b: 0x0001, 0x289c: 0x0001, 0x289d: 0x0001, - 0x289e: 0x0001, 0x289f: 0x0001, 0x28a0: 0x0005, 0x28a1: 0x0005, 0x28a2: 0x0005, 0x28a3: 0x0005, - 0x28a4: 0x0005, 0x28a5: 0x0005, 0x28a6: 0x0005, 0x28a7: 0x0005, 0x28a8: 0x0005, 0x28a9: 0x0005, - 0x28aa: 0x0005, 0x28ab: 0x0005, 0x28ac: 0x0005, 0x28ad: 0x0005, 0x28ae: 0x0005, 0x28af: 0x0005, - 0x28b0: 0x0005, 0x28b1: 0x0005, 0x28b2: 0x0005, 0x28b3: 0x0005, 0x28b4: 0x0005, 0x28b5: 0x0005, - 0x28b6: 0x0005, 0x28b7: 0x0005, 0x28b8: 0x0005, 0x28b9: 0x0005, 0x28ba: 0x0005, 0x28bb: 0x0005, - 0x28bc: 0x0005, 0x28bd: 0x0005, 0x28be: 0x0005, 0x28bf: 0x0001, - // Block 0xa3, offset 0x28c0 - 0x28c1: 0x000c, - 0x28f8: 0x000c, 0x28f9: 0x000c, 0x28fa: 0x000c, 0x28fb: 0x000c, - 0x28fc: 0x000c, 0x28fd: 0x000c, 0x28fe: 0x000c, 0x28ff: 0x000c, - // Block 0xa4, offset 0x2900 - 0x2900: 0x000c, 0x2901: 0x000c, 0x2902: 0x000c, 0x2903: 0x000c, 0x2904: 0x000c, 0x2905: 0x000c, - 0x2906: 0x000c, - 0x2912: 0x000a, 0x2913: 0x000a, 0x2914: 0x000a, 0x2915: 0x000a, 0x2916: 0x000a, 0x2917: 0x000a, - 0x2918: 0x000a, 0x2919: 0x000a, 0x291a: 0x000a, 0x291b: 0x000a, 0x291c: 0x000a, 0x291d: 0x000a, - 0x291e: 0x000a, 0x291f: 0x000a, 0x2920: 0x000a, 0x2921: 0x000a, 0x2922: 0x000a, 0x2923: 0x000a, - 0x2924: 0x000a, 0x2925: 0x000a, - 0x293f: 0x000c, - // Block 0xa5, offset 0x2940 - 0x2940: 0x000c, 0x2941: 0x000c, - 0x2973: 0x000c, 0x2974: 0x000c, 0x2975: 0x000c, - 0x2976: 0x000c, 0x2979: 0x000c, 0x297a: 0x000c, - // Block 0xa6, offset 0x2980 - 0x2980: 0x000c, 0x2981: 0x000c, 0x2982: 0x000c, - 0x29a7: 0x000c, 0x29a8: 0x000c, 0x29a9: 0x000c, - 0x29aa: 0x000c, 0x29ab: 0x000c, 0x29ad: 0x000c, 0x29ae: 0x000c, 0x29af: 0x000c, - 0x29b0: 0x000c, 0x29b1: 0x000c, 0x29b2: 0x000c, 0x29b3: 0x000c, 0x29b4: 0x000c, - // Block 0xa7, offset 0x29c0 - 0x29f3: 0x000c, - // Block 0xa8, offset 0x2a00 - 0x2a00: 0x000c, 0x2a01: 0x000c, - 0x2a36: 0x000c, 0x2a37: 0x000c, 0x2a38: 0x000c, 0x2a39: 0x000c, 0x2a3a: 0x000c, 0x2a3b: 0x000c, - 0x2a3c: 0x000c, 0x2a3d: 0x000c, 0x2a3e: 0x000c, - // Block 0xa9, offset 0x2a40 - 0x2a4a: 0x000c, 0x2a4b: 0x000c, - 0x2a4c: 0x000c, - // Block 0xaa, offset 0x2a80 - 0x2aaf: 0x000c, - 0x2ab0: 0x000c, 0x2ab1: 0x000c, 0x2ab4: 0x000c, - 0x2ab6: 0x000c, 0x2ab7: 0x000c, - 0x2abe: 0x000c, - // Block 0xab, offset 0x2ac0 - 0x2adf: 0x000c, 0x2ae3: 0x000c, - 0x2ae4: 0x000c, 0x2ae5: 0x000c, 0x2ae6: 0x000c, 0x2ae7: 0x000c, 0x2ae8: 0x000c, 0x2ae9: 0x000c, - 0x2aea: 0x000c, - // Block 0xac, offset 0x2b00 - 0x2b00: 0x000c, 0x2b01: 0x000c, - 0x2b3c: 0x000c, - // Block 0xad, offset 0x2b40 - 0x2b40: 0x000c, - 0x2b66: 0x000c, 0x2b67: 0x000c, 0x2b68: 0x000c, 0x2b69: 0x000c, - 0x2b6a: 0x000c, 0x2b6b: 0x000c, 0x2b6c: 0x000c, - 0x2b70: 0x000c, 0x2b71: 0x000c, 0x2b72: 0x000c, 0x2b73: 0x000c, 0x2b74: 0x000c, - // Block 0xae, offset 0x2b80 - 0x2bb8: 0x000c, 0x2bb9: 0x000c, 0x2bba: 0x000c, 0x2bbb: 0x000c, - 0x2bbc: 0x000c, 0x2bbd: 0x000c, 0x2bbe: 0x000c, 0x2bbf: 0x000c, - // Block 0xaf, offset 0x2bc0 - 0x2bc2: 0x000c, 0x2bc3: 0x000c, 0x2bc4: 0x000c, - 0x2bc6: 0x000c, - // Block 0xb0, offset 0x2c00 - 0x2c33: 0x000c, 0x2c34: 0x000c, 0x2c35: 0x000c, - 0x2c36: 0x000c, 0x2c37: 0x000c, 0x2c38: 0x000c, 0x2c3a: 0x000c, - 0x2c3f: 0x000c, - // Block 0xb1, offset 0x2c40 - 0x2c40: 0x000c, 0x2c42: 0x000c, 0x2c43: 0x000c, - // Block 0xb2, offset 0x2c80 - 0x2cb2: 0x000c, 0x2cb3: 0x000c, 0x2cb4: 0x000c, 0x2cb5: 0x000c, - 0x2cbc: 0x000c, 0x2cbd: 0x000c, 0x2cbf: 0x000c, - // Block 0xb3, offset 0x2cc0 - 0x2cc0: 0x000c, - 0x2cdc: 0x000c, 0x2cdd: 0x000c, - // Block 0xb4, offset 0x2d00 - 0x2d33: 0x000c, 0x2d34: 0x000c, 0x2d35: 0x000c, - 0x2d36: 0x000c, 0x2d37: 0x000c, 0x2d38: 0x000c, 0x2d39: 0x000c, 0x2d3a: 0x000c, - 0x2d3d: 0x000c, 0x2d3f: 0x000c, - // Block 0xb5, offset 0x2d40 - 0x2d40: 0x000c, - 0x2d60: 0x000a, 0x2d61: 0x000a, 0x2d62: 0x000a, 0x2d63: 0x000a, - 0x2d64: 0x000a, 0x2d65: 0x000a, 0x2d66: 0x000a, 0x2d67: 0x000a, 0x2d68: 0x000a, 0x2d69: 0x000a, - 0x2d6a: 0x000a, 0x2d6b: 0x000a, 0x2d6c: 0x000a, - // Block 0xb6, offset 0x2d80 - 0x2dab: 0x000c, 0x2dad: 0x000c, - 0x2db0: 0x000c, 0x2db1: 0x000c, 0x2db2: 0x000c, 0x2db3: 0x000c, 0x2db4: 0x000c, 0x2db5: 0x000c, - 0x2db7: 0x000c, - // Block 0xb7, offset 0x2dc0 - 0x2ddd: 0x000c, - 0x2dde: 0x000c, 0x2ddf: 0x000c, 0x2de2: 0x000c, 0x2de3: 0x000c, - 0x2de4: 0x000c, 0x2de5: 0x000c, 0x2de7: 0x000c, 0x2de8: 0x000c, 0x2de9: 0x000c, - 0x2dea: 0x000c, 0x2deb: 0x000c, - // Block 0xb8, offset 0x2e00 - 0x2e30: 0x000c, 0x2e31: 0x000c, 0x2e32: 0x000c, 0x2e33: 0x000c, 0x2e34: 0x000c, 0x2e35: 0x000c, - 0x2e36: 0x000c, 0x2e38: 0x000c, 0x2e39: 0x000c, 0x2e3a: 0x000c, 0x2e3b: 0x000c, - 0x2e3c: 0x000c, 0x2e3d: 0x000c, - // Block 0xb9, offset 0x2e40 - 0x2e52: 0x000c, 0x2e53: 0x000c, 0x2e54: 0x000c, 0x2e55: 0x000c, 0x2e56: 0x000c, 0x2e57: 0x000c, - 0x2e58: 0x000c, 0x2e59: 0x000c, 0x2e5a: 0x000c, 0x2e5b: 0x000c, 0x2e5c: 0x000c, 0x2e5d: 0x000c, - 0x2e5e: 0x000c, 0x2e5f: 0x000c, 0x2e60: 0x000c, 0x2e61: 0x000c, 0x2e62: 0x000c, 0x2e63: 0x000c, - 0x2e64: 0x000c, 0x2e65: 0x000c, 0x2e66: 0x000c, 0x2e67: 0x000c, - 0x2e6a: 0x000c, 0x2e6b: 0x000c, 0x2e6c: 0x000c, 0x2e6d: 0x000c, 0x2e6e: 0x000c, 0x2e6f: 0x000c, - 0x2e70: 0x000c, 0x2e72: 0x000c, 0x2e73: 0x000c, 0x2e75: 0x000c, - 0x2e76: 0x000c, - // Block 0xba, offset 0x2e80 - 0x2eb0: 0x000c, 0x2eb1: 0x000c, 0x2eb2: 0x000c, 0x2eb3: 0x000c, 0x2eb4: 0x000c, - // Block 0xbb, offset 0x2ec0 - 0x2ef0: 0x000c, 0x2ef1: 0x000c, 0x2ef2: 0x000c, 0x2ef3: 0x000c, 0x2ef4: 0x000c, 0x2ef5: 0x000c, - 0x2ef6: 0x000c, - // Block 0xbc, offset 0x2f00 - 0x2f0f: 0x000c, 0x2f10: 0x000c, 0x2f11: 0x000c, - 0x2f12: 0x000c, - // Block 0xbd, offset 0x2f40 - 0x2f5d: 0x000c, - 0x2f5e: 0x000c, 0x2f60: 0x000b, 0x2f61: 0x000b, 0x2f62: 0x000b, 0x2f63: 0x000b, - // Block 0xbe, offset 0x2f80 - 0x2fa7: 0x000c, 0x2fa8: 0x000c, 0x2fa9: 0x000c, - 0x2fb3: 0x000b, 0x2fb4: 0x000b, 0x2fb5: 0x000b, - 0x2fb6: 0x000b, 0x2fb7: 0x000b, 0x2fb8: 0x000b, 0x2fb9: 0x000b, 0x2fba: 0x000b, 0x2fbb: 0x000c, - 0x2fbc: 0x000c, 0x2fbd: 0x000c, 0x2fbe: 0x000c, 0x2fbf: 0x000c, - // Block 0xbf, offset 0x2fc0 - 0x2fc0: 0x000c, 0x2fc1: 0x000c, 0x2fc2: 0x000c, 0x2fc5: 0x000c, - 0x2fc6: 0x000c, 0x2fc7: 0x000c, 0x2fc8: 0x000c, 0x2fc9: 0x000c, 0x2fca: 0x000c, 0x2fcb: 0x000c, - 0x2fea: 0x000c, 0x2feb: 0x000c, 0x2fec: 0x000c, 0x2fed: 0x000c, - // Block 0xc0, offset 0x3000 - 0x3000: 0x000a, 0x3001: 0x000a, 0x3002: 0x000c, 0x3003: 0x000c, 0x3004: 0x000c, 0x3005: 0x000a, - // Block 0xc1, offset 0x3040 - 0x3040: 0x000a, 0x3041: 0x000a, 0x3042: 0x000a, 0x3043: 0x000a, 0x3044: 0x000a, 0x3045: 0x000a, - 0x3046: 0x000a, 0x3047: 0x000a, 0x3048: 0x000a, 0x3049: 0x000a, 0x304a: 0x000a, 0x304b: 0x000a, - 0x304c: 0x000a, 0x304d: 0x000a, 0x304e: 0x000a, 0x304f: 0x000a, 0x3050: 0x000a, 0x3051: 0x000a, - 0x3052: 0x000a, 0x3053: 0x000a, 0x3054: 0x000a, 0x3055: 0x000a, 0x3056: 0x000a, - // Block 0xc2, offset 0x3080 - 0x309b: 0x000a, - // Block 0xc3, offset 0x30c0 - 0x30d5: 0x000a, - // Block 0xc4, offset 0x3100 - 0x310f: 0x000a, - // Block 0xc5, offset 0x3140 - 0x3149: 0x000a, - // Block 0xc6, offset 0x3180 - 0x3183: 0x000a, - 0x318e: 0x0002, 0x318f: 0x0002, 0x3190: 0x0002, 0x3191: 0x0002, - 0x3192: 0x0002, 0x3193: 0x0002, 0x3194: 0x0002, 0x3195: 0x0002, 0x3196: 0x0002, 0x3197: 0x0002, - 0x3198: 0x0002, 0x3199: 0x0002, 0x319a: 0x0002, 0x319b: 0x0002, 0x319c: 0x0002, 0x319d: 0x0002, - 0x319e: 0x0002, 0x319f: 0x0002, 0x31a0: 0x0002, 0x31a1: 0x0002, 0x31a2: 0x0002, 0x31a3: 0x0002, - 0x31a4: 0x0002, 0x31a5: 0x0002, 0x31a6: 0x0002, 0x31a7: 0x0002, 0x31a8: 0x0002, 0x31a9: 0x0002, - 0x31aa: 0x0002, 0x31ab: 0x0002, 0x31ac: 0x0002, 0x31ad: 0x0002, 0x31ae: 0x0002, 0x31af: 0x0002, - 0x31b0: 0x0002, 0x31b1: 0x0002, 0x31b2: 0x0002, 0x31b3: 0x0002, 0x31b4: 0x0002, 0x31b5: 0x0002, - 0x31b6: 0x0002, 0x31b7: 0x0002, 0x31b8: 0x0002, 0x31b9: 0x0002, 0x31ba: 0x0002, 0x31bb: 0x0002, - 0x31bc: 0x0002, 0x31bd: 0x0002, 0x31be: 0x0002, 0x31bf: 0x0002, - // Block 0xc7, offset 0x31c0 - 0x31c0: 0x000c, 0x31c1: 0x000c, 0x31c2: 0x000c, 0x31c3: 0x000c, 0x31c4: 0x000c, 0x31c5: 0x000c, - 0x31c6: 0x000c, 0x31c7: 0x000c, 0x31c8: 0x000c, 0x31c9: 0x000c, 0x31ca: 0x000c, 0x31cb: 0x000c, - 0x31cc: 0x000c, 0x31cd: 0x000c, 0x31ce: 0x000c, 0x31cf: 0x000c, 0x31d0: 0x000c, 0x31d1: 0x000c, - 0x31d2: 0x000c, 0x31d3: 0x000c, 0x31d4: 0x000c, 0x31d5: 0x000c, 0x31d6: 0x000c, 0x31d7: 0x000c, - 0x31d8: 0x000c, 0x31d9: 0x000c, 0x31da: 0x000c, 0x31db: 0x000c, 0x31dc: 0x000c, 0x31dd: 0x000c, - 0x31de: 0x000c, 0x31df: 0x000c, 0x31e0: 0x000c, 0x31e1: 0x000c, 0x31e2: 0x000c, 0x31e3: 0x000c, - 0x31e4: 0x000c, 0x31e5: 0x000c, 0x31e6: 0x000c, 0x31e7: 0x000c, 0x31e8: 0x000c, 0x31e9: 0x000c, - 0x31ea: 0x000c, 0x31eb: 0x000c, 0x31ec: 0x000c, 0x31ed: 0x000c, 0x31ee: 0x000c, 0x31ef: 0x000c, - 0x31f0: 0x000c, 0x31f1: 0x000c, 0x31f2: 0x000c, 0x31f3: 0x000c, 0x31f4: 0x000c, 0x31f5: 0x000c, - 0x31f6: 0x000c, 0x31fb: 0x000c, - 0x31fc: 0x000c, 0x31fd: 0x000c, 0x31fe: 0x000c, 0x31ff: 0x000c, - // Block 0xc8, offset 0x3200 - 0x3200: 0x000c, 0x3201: 0x000c, 0x3202: 0x000c, 0x3203: 0x000c, 0x3204: 0x000c, 0x3205: 0x000c, - 0x3206: 0x000c, 0x3207: 0x000c, 0x3208: 0x000c, 0x3209: 0x000c, 0x320a: 0x000c, 0x320b: 0x000c, - 0x320c: 0x000c, 0x320d: 0x000c, 0x320e: 0x000c, 0x320f: 0x000c, 0x3210: 0x000c, 0x3211: 0x000c, - 0x3212: 0x000c, 0x3213: 0x000c, 0x3214: 0x000c, 0x3215: 0x000c, 0x3216: 0x000c, 0x3217: 0x000c, - 0x3218: 0x000c, 0x3219: 0x000c, 0x321a: 0x000c, 0x321b: 0x000c, 0x321c: 0x000c, 0x321d: 0x000c, - 0x321e: 0x000c, 0x321f: 0x000c, 0x3220: 0x000c, 0x3221: 0x000c, 0x3222: 0x000c, 0x3223: 0x000c, - 0x3224: 0x000c, 0x3225: 0x000c, 0x3226: 0x000c, 0x3227: 0x000c, 0x3228: 0x000c, 0x3229: 0x000c, - 0x322a: 0x000c, 0x322b: 0x000c, 0x322c: 0x000c, - 0x3235: 0x000c, - // Block 0xc9, offset 0x3240 - 0x3244: 0x000c, - 0x325b: 0x000c, 0x325c: 0x000c, 0x325d: 0x000c, - 0x325e: 0x000c, 0x325f: 0x000c, 0x3261: 0x000c, 0x3262: 0x000c, 0x3263: 0x000c, - 0x3264: 0x000c, 0x3265: 0x000c, 0x3266: 0x000c, 0x3267: 0x000c, 0x3268: 0x000c, 0x3269: 0x000c, - 0x326a: 0x000c, 0x326b: 0x000c, 0x326c: 0x000c, 0x326d: 0x000c, 0x326e: 0x000c, 0x326f: 0x000c, - // Block 0xca, offset 0x3280 - 0x3280: 0x000c, 0x3281: 0x000c, 0x3282: 0x000c, 0x3283: 0x000c, 0x3284: 0x000c, 0x3285: 0x000c, - 0x3286: 0x000c, 0x3288: 0x000c, 0x3289: 0x000c, 0x328a: 0x000c, 0x328b: 0x000c, - 0x328c: 0x000c, 0x328d: 0x000c, 0x328e: 0x000c, 0x328f: 0x000c, 0x3290: 0x000c, 0x3291: 0x000c, - 0x3292: 0x000c, 0x3293: 0x000c, 0x3294: 0x000c, 0x3295: 0x000c, 0x3296: 0x000c, 0x3297: 0x000c, - 0x3298: 0x000c, 0x329b: 0x000c, 0x329c: 0x000c, 0x329d: 0x000c, - 0x329e: 0x000c, 0x329f: 0x000c, 0x32a0: 0x000c, 0x32a1: 0x000c, 0x32a3: 0x000c, - 0x32a4: 0x000c, 0x32a6: 0x000c, 0x32a7: 0x000c, 0x32a8: 0x000c, 0x32a9: 0x000c, - 0x32aa: 0x000c, - // Block 0xcb, offset 0x32c0 - 0x32c0: 0x0001, 0x32c1: 0x0001, 0x32c2: 0x0001, 0x32c3: 0x0001, 0x32c4: 0x0001, 0x32c5: 0x0001, - 0x32c6: 0x0001, 0x32c7: 0x0001, 0x32c8: 0x0001, 0x32c9: 0x0001, 0x32ca: 0x0001, 0x32cb: 0x0001, - 0x32cc: 0x0001, 0x32cd: 0x0001, 0x32ce: 0x0001, 0x32cf: 0x0001, 0x32d0: 0x000c, 0x32d1: 0x000c, - 0x32d2: 0x000c, 0x32d3: 0x000c, 0x32d4: 0x000c, 0x32d5: 0x000c, 0x32d6: 0x000c, 0x32d7: 0x0001, - 0x32d8: 0x0001, 0x32d9: 0x0001, 0x32da: 0x0001, 0x32db: 0x0001, 0x32dc: 0x0001, 0x32dd: 0x0001, - 0x32de: 0x0001, 0x32df: 0x0001, 0x32e0: 0x0001, 0x32e1: 0x0001, 0x32e2: 0x0001, 0x32e3: 0x0001, - 0x32e4: 0x0001, 0x32e5: 0x0001, 0x32e6: 0x0001, 0x32e7: 0x0001, 0x32e8: 0x0001, 0x32e9: 0x0001, - 0x32ea: 0x0001, 0x32eb: 0x0001, 0x32ec: 0x0001, 0x32ed: 0x0001, 0x32ee: 0x0001, 0x32ef: 0x0001, - 0x32f0: 0x0001, 0x32f1: 0x0001, 0x32f2: 0x0001, 0x32f3: 0x0001, 0x32f4: 0x0001, 0x32f5: 0x0001, - 0x32f6: 0x0001, 0x32f7: 0x0001, 0x32f8: 0x0001, 0x32f9: 0x0001, 0x32fa: 0x0001, 0x32fb: 0x0001, - 0x32fc: 0x0001, 0x32fd: 0x0001, 0x32fe: 0x0001, 0x32ff: 0x0001, - // Block 0xcc, offset 0x3300 - 0x3300: 0x0001, 0x3301: 0x0001, 0x3302: 0x0001, 0x3303: 0x0001, 0x3304: 0x000c, 0x3305: 0x000c, - 0x3306: 0x000c, 0x3307: 0x000c, 0x3308: 0x000c, 0x3309: 0x000c, 0x330a: 0x000c, 0x330b: 0x0001, - 0x330c: 0x0001, 0x330d: 0x0001, 0x330e: 0x0001, 0x330f: 0x0001, 0x3310: 0x0001, 0x3311: 0x0001, - 0x3312: 0x0001, 0x3313: 0x0001, 0x3314: 0x0001, 0x3315: 0x0001, 0x3316: 0x0001, 0x3317: 0x0001, - 0x3318: 0x0001, 0x3319: 0x0001, 0x331a: 0x0001, 0x331b: 0x0001, 0x331c: 0x0001, 0x331d: 0x0001, - 0x331e: 0x0001, 0x331f: 0x0001, 0x3320: 0x0001, 0x3321: 0x0001, 0x3322: 0x0001, 0x3323: 0x0001, - 0x3324: 0x0001, 0x3325: 0x0001, 0x3326: 0x0001, 0x3327: 0x0001, 0x3328: 0x0001, 0x3329: 0x0001, - 0x332a: 0x0001, 0x332b: 0x0001, 0x332c: 0x0001, 0x332d: 0x0001, 0x332e: 0x0001, 0x332f: 0x0001, - 0x3330: 0x0001, 0x3331: 0x0001, 0x3332: 0x0001, 0x3333: 0x0001, 0x3334: 0x0001, 0x3335: 0x0001, - 0x3336: 0x0001, 0x3337: 0x0001, 0x3338: 0x0001, 0x3339: 0x0001, 0x333a: 0x0001, 0x333b: 0x0001, - 0x333c: 0x0001, 0x333d: 0x0001, 0x333e: 0x0001, 0x333f: 0x0001, - // Block 0xcd, offset 0x3340 - 0x3340: 0x000d, 0x3341: 0x000d, 0x3342: 0x000d, 0x3343: 0x000d, 0x3344: 0x000d, 0x3345: 0x000d, - 0x3346: 0x000d, 0x3347: 0x000d, 0x3348: 0x000d, 0x3349: 0x000d, 0x334a: 0x000d, 0x334b: 0x000d, - 0x334c: 0x000d, 0x334d: 0x000d, 0x334e: 0x000d, 0x334f: 0x000d, 0x3350: 0x000d, 0x3351: 0x000d, - 0x3352: 0x000d, 0x3353: 0x000d, 0x3354: 0x000d, 0x3355: 0x000d, 0x3356: 0x000d, 0x3357: 0x000d, - 0x3358: 0x000d, 0x3359: 0x000d, 0x335a: 0x000d, 0x335b: 0x000d, 0x335c: 0x000d, 0x335d: 0x000d, - 0x335e: 0x000d, 0x335f: 0x000d, 0x3360: 0x000d, 0x3361: 0x000d, 0x3362: 0x000d, 0x3363: 0x000d, - 0x3364: 0x000d, 0x3365: 0x000d, 0x3366: 0x000d, 0x3367: 0x000d, 0x3368: 0x000d, 0x3369: 0x000d, - 0x336a: 0x000d, 0x336b: 0x000d, 0x336c: 0x000d, 0x336d: 0x000d, 0x336e: 0x000d, 0x336f: 0x000d, - 0x3370: 0x000a, 0x3371: 0x000a, 0x3372: 0x000d, 0x3373: 0x000d, 0x3374: 0x000d, 0x3375: 0x000d, - 0x3376: 0x000d, 0x3377: 0x000d, 0x3378: 0x000d, 0x3379: 0x000d, 0x337a: 0x000d, 0x337b: 0x000d, - 0x337c: 0x000d, 0x337d: 0x000d, 0x337e: 0x000d, 0x337f: 0x000d, - // Block 0xce, offset 0x3380 - 0x3380: 0x000a, 0x3381: 0x000a, 0x3382: 0x000a, 0x3383: 0x000a, 0x3384: 0x000a, 0x3385: 0x000a, - 0x3386: 0x000a, 0x3387: 0x000a, 0x3388: 0x000a, 0x3389: 0x000a, 0x338a: 0x000a, 0x338b: 0x000a, - 0x338c: 0x000a, 0x338d: 0x000a, 0x338e: 0x000a, 0x338f: 0x000a, 0x3390: 0x000a, 0x3391: 0x000a, - 0x3392: 0x000a, 0x3393: 0x000a, 0x3394: 0x000a, 0x3395: 0x000a, 0x3396: 0x000a, 0x3397: 0x000a, - 0x3398: 0x000a, 0x3399: 0x000a, 0x339a: 0x000a, 0x339b: 0x000a, 0x339c: 0x000a, 0x339d: 0x000a, - 0x339e: 0x000a, 0x339f: 0x000a, 0x33a0: 0x000a, 0x33a1: 0x000a, 0x33a2: 0x000a, 0x33a3: 0x000a, - 0x33a4: 0x000a, 0x33a5: 0x000a, 0x33a6: 0x000a, 0x33a7: 0x000a, 0x33a8: 0x000a, 0x33a9: 0x000a, - 0x33aa: 0x000a, 0x33ab: 0x000a, - 0x33b0: 0x000a, 0x33b1: 0x000a, 0x33b2: 0x000a, 0x33b3: 0x000a, 0x33b4: 0x000a, 0x33b5: 0x000a, - 0x33b6: 0x000a, 0x33b7: 0x000a, 0x33b8: 0x000a, 0x33b9: 0x000a, 0x33ba: 0x000a, 0x33bb: 0x000a, - 0x33bc: 0x000a, 0x33bd: 0x000a, 0x33be: 0x000a, 0x33bf: 0x000a, - // Block 0xcf, offset 0x33c0 - 0x33c0: 0x000a, 0x33c1: 0x000a, 0x33c2: 0x000a, 0x33c3: 0x000a, 0x33c4: 0x000a, 0x33c5: 0x000a, - 0x33c6: 0x000a, 0x33c7: 0x000a, 0x33c8: 0x000a, 0x33c9: 0x000a, 0x33ca: 0x000a, 0x33cb: 0x000a, - 0x33cc: 0x000a, 0x33cd: 0x000a, 0x33ce: 0x000a, 0x33cf: 0x000a, 0x33d0: 0x000a, 0x33d1: 0x000a, - 0x33d2: 0x000a, 0x33d3: 0x000a, - 0x33e0: 0x000a, 0x33e1: 0x000a, 0x33e2: 0x000a, 0x33e3: 0x000a, - 0x33e4: 0x000a, 0x33e5: 0x000a, 0x33e6: 0x000a, 0x33e7: 0x000a, 0x33e8: 0x000a, 0x33e9: 0x000a, - 0x33ea: 0x000a, 0x33eb: 0x000a, 0x33ec: 0x000a, 0x33ed: 0x000a, 0x33ee: 0x000a, - 0x33f1: 0x000a, 0x33f2: 0x000a, 0x33f3: 0x000a, 0x33f4: 0x000a, 0x33f5: 0x000a, - 0x33f6: 0x000a, 0x33f7: 0x000a, 0x33f8: 0x000a, 0x33f9: 0x000a, 0x33fa: 0x000a, 0x33fb: 0x000a, - 0x33fc: 0x000a, 0x33fd: 0x000a, 0x33fe: 0x000a, 0x33ff: 0x000a, - // Block 0xd0, offset 0x3400 - 0x3401: 0x000a, 0x3402: 0x000a, 0x3403: 0x000a, 0x3404: 0x000a, 0x3405: 0x000a, - 0x3406: 0x000a, 0x3407: 0x000a, 0x3408: 0x000a, 0x3409: 0x000a, 0x340a: 0x000a, 0x340b: 0x000a, - 0x340c: 0x000a, 0x340d: 0x000a, 0x340e: 0x000a, 0x340f: 0x000a, 0x3411: 0x000a, - 0x3412: 0x000a, 0x3413: 0x000a, 0x3414: 0x000a, 0x3415: 0x000a, 0x3416: 0x000a, 0x3417: 0x000a, - 0x3418: 0x000a, 0x3419: 0x000a, 0x341a: 0x000a, 0x341b: 0x000a, 0x341c: 0x000a, 0x341d: 0x000a, - 0x341e: 0x000a, 0x341f: 0x000a, 0x3420: 0x000a, 0x3421: 0x000a, 0x3422: 0x000a, 0x3423: 0x000a, - 0x3424: 0x000a, 0x3425: 0x000a, 0x3426: 0x000a, 0x3427: 0x000a, 0x3428: 0x000a, 0x3429: 0x000a, - 0x342a: 0x000a, 0x342b: 0x000a, 0x342c: 0x000a, 0x342d: 0x000a, 0x342e: 0x000a, 0x342f: 0x000a, - 0x3430: 0x000a, 0x3431: 0x000a, 0x3432: 0x000a, 0x3433: 0x000a, 0x3434: 0x000a, 0x3435: 0x000a, - // Block 0xd1, offset 0x3440 - 0x3440: 0x0002, 0x3441: 0x0002, 0x3442: 0x0002, 0x3443: 0x0002, 0x3444: 0x0002, 0x3445: 0x0002, - 0x3446: 0x0002, 0x3447: 0x0002, 0x3448: 0x0002, 0x3449: 0x0002, 0x344a: 0x0002, 0x344b: 0x000a, - 0x344c: 0x000a, - // Block 0xd2, offset 0x3480 - 0x34aa: 0x000a, 0x34ab: 0x000a, - // Block 0xd3, offset 0x34c0 - 0x34c0: 0x000a, 0x34c1: 0x000a, 0x34c2: 0x000a, 0x34c3: 0x000a, 0x34c4: 0x000a, 0x34c5: 0x000a, - 0x34c6: 0x000a, 0x34c7: 0x000a, 0x34c8: 0x000a, 0x34c9: 0x000a, 0x34ca: 0x000a, 0x34cb: 0x000a, - 0x34cc: 0x000a, 0x34cd: 0x000a, 0x34ce: 0x000a, 0x34cf: 0x000a, 0x34d0: 0x000a, 0x34d1: 0x000a, - 0x34d2: 0x000a, - 0x34e0: 0x000a, 0x34e1: 0x000a, 0x34e2: 0x000a, 0x34e3: 0x000a, - 0x34e4: 0x000a, 0x34e5: 0x000a, 0x34e6: 0x000a, 0x34e7: 0x000a, 0x34e8: 0x000a, 0x34e9: 0x000a, - 0x34ea: 0x000a, 0x34eb: 0x000a, 0x34ec: 0x000a, - 0x34f0: 0x000a, 0x34f1: 0x000a, 0x34f2: 0x000a, 0x34f3: 0x000a, 0x34f4: 0x000a, 0x34f5: 0x000a, - 0x34f6: 0x000a, - // Block 0xd4, offset 0x3500 - 0x3500: 0x000a, 0x3501: 0x000a, 0x3502: 0x000a, 0x3503: 0x000a, 0x3504: 0x000a, 0x3505: 0x000a, - 0x3506: 0x000a, 0x3507: 0x000a, 0x3508: 0x000a, 0x3509: 0x000a, 0x350a: 0x000a, 0x350b: 0x000a, - 0x350c: 0x000a, 0x350d: 0x000a, 0x350e: 0x000a, 0x350f: 0x000a, 0x3510: 0x000a, 0x3511: 0x000a, - 0x3512: 0x000a, 0x3513: 0x000a, 0x3514: 0x000a, - // Block 0xd5, offset 0x3540 - 0x3540: 0x000a, 0x3541: 0x000a, 0x3542: 0x000a, 0x3543: 0x000a, 0x3544: 0x000a, 0x3545: 0x000a, - 0x3546: 0x000a, 0x3547: 0x000a, 0x3548: 0x000a, 0x3549: 0x000a, 0x354a: 0x000a, 0x354b: 0x000a, - 0x3550: 0x000a, 0x3551: 0x000a, - 0x3552: 0x000a, 0x3553: 0x000a, 0x3554: 0x000a, 0x3555: 0x000a, 0x3556: 0x000a, 0x3557: 0x000a, - 0x3558: 0x000a, 0x3559: 0x000a, 0x355a: 0x000a, 0x355b: 0x000a, 0x355c: 0x000a, 0x355d: 0x000a, - 0x355e: 0x000a, 0x355f: 0x000a, 0x3560: 0x000a, 0x3561: 0x000a, 0x3562: 0x000a, 0x3563: 0x000a, - 0x3564: 0x000a, 0x3565: 0x000a, 0x3566: 0x000a, 0x3567: 0x000a, 0x3568: 0x000a, 0x3569: 0x000a, - 0x356a: 0x000a, 0x356b: 0x000a, 0x356c: 0x000a, 0x356d: 0x000a, 0x356e: 0x000a, 0x356f: 0x000a, - 0x3570: 0x000a, 0x3571: 0x000a, 0x3572: 0x000a, 0x3573: 0x000a, 0x3574: 0x000a, 0x3575: 0x000a, - 0x3576: 0x000a, 0x3577: 0x000a, 0x3578: 0x000a, 0x3579: 0x000a, 0x357a: 0x000a, 0x357b: 0x000a, - 0x357c: 0x000a, 0x357d: 0x000a, 0x357e: 0x000a, 0x357f: 0x000a, - // Block 0xd6, offset 0x3580 - 0x3580: 0x000a, 0x3581: 0x000a, 0x3582: 0x000a, 0x3583: 0x000a, 0x3584: 0x000a, 0x3585: 0x000a, - 0x3586: 0x000a, 0x3587: 0x000a, - 0x3590: 0x000a, 0x3591: 0x000a, - 0x3592: 0x000a, 0x3593: 0x000a, 0x3594: 0x000a, 0x3595: 0x000a, 0x3596: 0x000a, 0x3597: 0x000a, - 0x3598: 0x000a, 0x3599: 0x000a, - 0x35a0: 0x000a, 0x35a1: 0x000a, 0x35a2: 0x000a, 0x35a3: 0x000a, - 0x35a4: 0x000a, 0x35a5: 0x000a, 0x35a6: 0x000a, 0x35a7: 0x000a, 0x35a8: 0x000a, 0x35a9: 0x000a, - 0x35aa: 0x000a, 0x35ab: 0x000a, 0x35ac: 0x000a, 0x35ad: 0x000a, 0x35ae: 0x000a, 0x35af: 0x000a, - 0x35b0: 0x000a, 0x35b1: 0x000a, 0x35b2: 0x000a, 0x35b3: 0x000a, 0x35b4: 0x000a, 0x35b5: 0x000a, - 0x35b6: 0x000a, 0x35b7: 0x000a, 0x35b8: 0x000a, 0x35b9: 0x000a, 0x35ba: 0x000a, 0x35bb: 0x000a, - 0x35bc: 0x000a, 0x35bd: 0x000a, 0x35be: 0x000a, 0x35bf: 0x000a, - // Block 0xd7, offset 0x35c0 - 0x35c0: 0x000a, 0x35c1: 0x000a, 0x35c2: 0x000a, 0x35c3: 0x000a, 0x35c4: 0x000a, 0x35c5: 0x000a, - 0x35c6: 0x000a, 0x35c7: 0x000a, - 0x35d0: 0x000a, 0x35d1: 0x000a, - 0x35d2: 0x000a, 0x35d3: 0x000a, 0x35d4: 0x000a, 0x35d5: 0x000a, 0x35d6: 0x000a, 0x35d7: 0x000a, - 0x35d8: 0x000a, 0x35d9: 0x000a, 0x35da: 0x000a, 0x35db: 0x000a, 0x35dc: 0x000a, 0x35dd: 0x000a, - 0x35de: 0x000a, 0x35df: 0x000a, 0x35e0: 0x000a, 0x35e1: 0x000a, 0x35e2: 0x000a, 0x35e3: 0x000a, - 0x35e4: 0x000a, 0x35e5: 0x000a, 0x35e6: 0x000a, 0x35e7: 0x000a, 0x35e8: 0x000a, 0x35e9: 0x000a, - 0x35ea: 0x000a, 0x35eb: 0x000a, 0x35ec: 0x000a, 0x35ed: 0x000a, - // Block 0xd8, offset 0x3600 - 0x3610: 0x000a, 0x3611: 0x000a, - 0x3612: 0x000a, 0x3613: 0x000a, 0x3614: 0x000a, 0x3615: 0x000a, 0x3616: 0x000a, 0x3617: 0x000a, - 0x3618: 0x000a, 0x3619: 0x000a, 0x361a: 0x000a, 0x361b: 0x000a, 0x361c: 0x000a, 0x361d: 0x000a, - 0x361e: 0x000a, 0x3620: 0x000a, 0x3621: 0x000a, 0x3622: 0x000a, 0x3623: 0x000a, - 0x3624: 0x000a, 0x3625: 0x000a, 0x3626: 0x000a, 0x3627: 0x000a, - 0x3630: 0x000a, 0x3633: 0x000a, 0x3634: 0x000a, 0x3635: 0x000a, - 0x3636: 0x000a, 0x3637: 0x000a, 0x3638: 0x000a, 0x3639: 0x000a, 0x363a: 0x000a, 0x363b: 0x000a, - 0x363c: 0x000a, 0x363d: 0x000a, 0x363e: 0x000a, - // Block 0xd9, offset 0x3640 - 0x3640: 0x000a, 0x3641: 0x000a, 0x3642: 0x000a, 0x3643: 0x000a, 0x3644: 0x000a, 0x3645: 0x000a, - 0x3646: 0x000a, 0x3647: 0x000a, 0x3648: 0x000a, 0x3649: 0x000a, 0x364a: 0x000a, 0x364b: 0x000a, - 0x3650: 0x000a, 0x3651: 0x000a, - 0x3652: 0x000a, 0x3653: 0x000a, 0x3654: 0x000a, 0x3655: 0x000a, 0x3656: 0x000a, 0x3657: 0x000a, - 0x3658: 0x000a, 0x3659: 0x000a, 0x365a: 0x000a, 0x365b: 0x000a, 0x365c: 0x000a, 0x365d: 0x000a, - 0x365e: 0x000a, - // Block 0xda, offset 0x3680 - 0x3680: 0x000a, 0x3681: 0x000a, 0x3682: 0x000a, 0x3683: 0x000a, 0x3684: 0x000a, 0x3685: 0x000a, - 0x3686: 0x000a, 0x3687: 0x000a, 0x3688: 0x000a, 0x3689: 0x000a, 0x368a: 0x000a, 0x368b: 0x000a, - 0x368c: 0x000a, 0x368d: 0x000a, 0x368e: 0x000a, 0x368f: 0x000a, 0x3690: 0x000a, 0x3691: 0x000a, - // Block 0xdb, offset 0x36c0 - 0x36fe: 0x000b, 0x36ff: 0x000b, - // Block 0xdc, offset 0x3700 - 0x3700: 0x000b, 0x3701: 0x000b, 0x3702: 0x000b, 0x3703: 0x000b, 0x3704: 0x000b, 0x3705: 0x000b, - 0x3706: 0x000b, 0x3707: 0x000b, 0x3708: 0x000b, 0x3709: 0x000b, 0x370a: 0x000b, 0x370b: 0x000b, - 0x370c: 0x000b, 0x370d: 0x000b, 0x370e: 0x000b, 0x370f: 0x000b, 0x3710: 0x000b, 0x3711: 0x000b, - 0x3712: 0x000b, 0x3713: 0x000b, 0x3714: 0x000b, 0x3715: 0x000b, 0x3716: 0x000b, 0x3717: 0x000b, - 0x3718: 0x000b, 0x3719: 0x000b, 0x371a: 0x000b, 0x371b: 0x000b, 0x371c: 0x000b, 0x371d: 0x000b, - 0x371e: 0x000b, 0x371f: 0x000b, 0x3720: 0x000b, 0x3721: 0x000b, 0x3722: 0x000b, 0x3723: 0x000b, - 0x3724: 0x000b, 0x3725: 0x000b, 0x3726: 0x000b, 0x3727: 0x000b, 0x3728: 0x000b, 0x3729: 0x000b, - 0x372a: 0x000b, 0x372b: 0x000b, 0x372c: 0x000b, 0x372d: 0x000b, 0x372e: 0x000b, 0x372f: 0x000b, - 0x3730: 0x000b, 0x3731: 0x000b, 0x3732: 0x000b, 0x3733: 0x000b, 0x3734: 0x000b, 0x3735: 0x000b, - 0x3736: 0x000b, 0x3737: 0x000b, 0x3738: 0x000b, 0x3739: 0x000b, 0x373a: 0x000b, 0x373b: 0x000b, - 0x373c: 0x000b, 0x373d: 0x000b, 0x373e: 0x000b, 0x373f: 0x000b, - // Block 0xdd, offset 0x3740 - 0x3740: 0x000c, 0x3741: 0x000c, 0x3742: 0x000c, 0x3743: 0x000c, 0x3744: 0x000c, 0x3745: 0x000c, - 0x3746: 0x000c, 0x3747: 0x000c, 0x3748: 0x000c, 0x3749: 0x000c, 0x374a: 0x000c, 0x374b: 0x000c, - 0x374c: 0x000c, 0x374d: 0x000c, 0x374e: 0x000c, 0x374f: 0x000c, 0x3750: 0x000c, 0x3751: 0x000c, - 0x3752: 0x000c, 0x3753: 0x000c, 0x3754: 0x000c, 0x3755: 0x000c, 0x3756: 0x000c, 0x3757: 0x000c, - 0x3758: 0x000c, 0x3759: 0x000c, 0x375a: 0x000c, 0x375b: 0x000c, 0x375c: 0x000c, 0x375d: 0x000c, - 0x375e: 0x000c, 0x375f: 0x000c, 0x3760: 0x000c, 0x3761: 0x000c, 0x3762: 0x000c, 0x3763: 0x000c, - 0x3764: 0x000c, 0x3765: 0x000c, 0x3766: 0x000c, 0x3767: 0x000c, 0x3768: 0x000c, 0x3769: 0x000c, - 0x376a: 0x000c, 0x376b: 0x000c, 0x376c: 0x000c, 0x376d: 0x000c, 0x376e: 0x000c, 0x376f: 0x000c, - 0x3770: 0x000b, 0x3771: 0x000b, 0x3772: 0x000b, 0x3773: 0x000b, 0x3774: 0x000b, 0x3775: 0x000b, - 0x3776: 0x000b, 0x3777: 0x000b, 0x3778: 0x000b, 0x3779: 0x000b, 0x377a: 0x000b, 0x377b: 0x000b, - 0x377c: 0x000b, 0x377d: 0x000b, 0x377e: 0x000b, 0x377f: 0x000b, -} - -// bidiIndex: 24 blocks, 1536 entries, 1536 bytes -// Block 0 is the zero block. -var bidiIndex = [1536]uint8{ - // Block 0x0, offset 0x0 - // Block 0x1, offset 0x40 - // Block 0x2, offset 0x80 - // Block 0x3, offset 0xc0 - 0xc2: 0x01, 0xc3: 0x02, - 0xca: 0x03, 0xcb: 0x04, 0xcc: 0x05, 0xcd: 0x06, 0xce: 0x07, 0xcf: 0x08, - 0xd2: 0x09, 0xd6: 0x0a, 0xd7: 0x0b, - 0xd8: 0x0c, 0xd9: 0x0d, 0xda: 0x0e, 0xdb: 0x0f, 0xdc: 0x10, 0xdd: 0x11, 0xde: 0x12, 0xdf: 0x13, - 0xe0: 0x02, 0xe1: 0x03, 0xe2: 0x04, 0xe3: 0x05, 0xe4: 0x06, - 0xea: 0x07, 0xef: 0x08, - 0xf0: 0x11, 0xf1: 0x12, 0xf2: 0x12, 0xf3: 0x14, 0xf4: 0x15, - // Block 0x4, offset 0x100 - 0x120: 0x14, 0x121: 0x15, 0x122: 0x16, 0x123: 0x17, 0x124: 0x18, 0x125: 0x19, 0x126: 0x1a, 0x127: 0x1b, - 0x128: 0x1c, 0x129: 0x1d, 0x12a: 0x1c, 0x12b: 0x1e, 0x12c: 0x1f, 0x12d: 0x20, 0x12e: 0x21, 0x12f: 0x22, - 0x130: 0x23, 0x131: 0x24, 0x132: 0x1a, 0x133: 0x25, 0x134: 0x26, 0x135: 0x27, 0x137: 0x28, - 0x138: 0x29, 0x139: 0x2a, 0x13a: 0x2b, 0x13b: 0x2c, 0x13c: 0x2d, 0x13d: 0x2e, 0x13e: 0x2f, 0x13f: 0x30, - // Block 0x5, offset 0x140 - 0x140: 0x31, 0x141: 0x32, 0x142: 0x33, - 0x14d: 0x34, 0x14e: 0x35, - 0x150: 0x36, - 0x15a: 0x37, 0x15c: 0x38, 0x15d: 0x39, 0x15e: 0x3a, 0x15f: 0x3b, - 0x160: 0x3c, 0x162: 0x3d, 0x164: 0x3e, 0x165: 0x3f, 0x167: 0x40, - 0x168: 0x41, 0x169: 0x42, 0x16a: 0x43, 0x16c: 0x44, 0x16d: 0x45, 0x16e: 0x46, 0x16f: 0x47, - 0x170: 0x48, 0x173: 0x49, 0x177: 0x4a, - 0x17e: 0x4b, 0x17f: 0x4c, - // Block 0x6, offset 0x180 - 0x180: 0x4d, 0x181: 0x4e, 0x182: 0x4f, 0x183: 0x50, 0x184: 0x51, 0x185: 0x52, 0x186: 0x53, 0x187: 0x54, - 0x188: 0x55, 0x189: 0x54, 0x18a: 0x54, 0x18b: 0x54, 0x18c: 0x56, 0x18d: 0x57, 0x18e: 0x58, 0x18f: 0x59, - 0x190: 0x5a, 0x191: 0x5b, 0x192: 0x5c, 0x193: 0x5d, 0x194: 0x54, 0x195: 0x54, 0x196: 0x54, 0x197: 0x54, - 0x198: 0x54, 0x199: 0x54, 0x19a: 0x5e, 0x19b: 0x54, 0x19c: 0x54, 0x19d: 0x5f, 0x19e: 0x54, 0x19f: 0x60, - 0x1a4: 0x54, 0x1a5: 0x54, 0x1a6: 0x61, 0x1a7: 0x62, - 0x1a8: 0x54, 0x1a9: 0x54, 0x1aa: 0x54, 0x1ab: 0x54, 0x1ac: 0x54, 0x1ad: 0x63, 0x1ae: 0x64, 0x1af: 0x65, - 0x1b3: 0x66, 0x1b5: 0x67, 0x1b7: 0x68, - 0x1b8: 0x69, 0x1b9: 0x6a, 0x1ba: 0x6b, 0x1bb: 0x6c, 0x1bc: 0x54, 0x1bd: 0x54, 0x1be: 0x54, 0x1bf: 0x6d, - // Block 0x7, offset 0x1c0 - 0x1c0: 0x6e, 0x1c2: 0x6f, 0x1c3: 0x70, 0x1c7: 0x71, - 0x1c8: 0x72, 0x1c9: 0x73, 0x1ca: 0x74, 0x1cb: 0x75, 0x1cd: 0x76, 0x1cf: 0x77, - // Block 0x8, offset 0x200 - 0x237: 0x54, - // Block 0x9, offset 0x240 - 0x252: 0x78, 0x253: 0x79, - 0x258: 0x7a, 0x259: 0x7b, 0x25a: 0x7c, 0x25b: 0x7d, 0x25c: 0x7e, 0x25e: 0x7f, - 0x260: 0x80, 0x261: 0x81, 0x263: 0x82, 0x264: 0x83, 0x265: 0x84, 0x266: 0x85, 0x267: 0x86, - 0x268: 0x87, 0x269: 0x88, 0x26a: 0x89, 0x26b: 0x8a, 0x26f: 0x8b, - // Block 0xa, offset 0x280 - 0x2ac: 0x8c, 0x2ad: 0x8d, 0x2ae: 0x0e, 0x2af: 0x0e, - 0x2b0: 0x0e, 0x2b1: 0x0e, 0x2b2: 0x0e, 0x2b3: 0x0e, 0x2b4: 0x8e, 0x2b5: 0x0e, 0x2b6: 0x0e, 0x2b7: 0x8f, - 0x2b8: 0x90, 0x2b9: 0x91, 0x2ba: 0x0e, 0x2bb: 0x92, 0x2bc: 0x93, 0x2bd: 0x94, 0x2bf: 0x95, - // Block 0xb, offset 0x2c0 - 0x2c4: 0x96, 0x2c5: 0x54, 0x2c6: 0x97, 0x2c7: 0x98, - 0x2cb: 0x99, 0x2cd: 0x9a, - 0x2e0: 0x9b, 0x2e1: 0x9b, 0x2e2: 0x9b, 0x2e3: 0x9b, 0x2e4: 0x9c, 0x2e5: 0x9b, 0x2e6: 0x9b, 0x2e7: 0x9b, - 0x2e8: 0x9d, 0x2e9: 0x9b, 0x2ea: 0x9b, 0x2eb: 0x9e, 0x2ec: 0x9f, 0x2ed: 0x9b, 0x2ee: 0x9b, 0x2ef: 0x9b, - 0x2f0: 0x9b, 0x2f1: 0x9b, 0x2f2: 0x9b, 0x2f3: 0x9b, 0x2f4: 0x9b, 0x2f5: 0x9b, 0x2f6: 0x9b, 0x2f7: 0x9b, - 0x2f8: 0x9b, 0x2f9: 0xa0, 0x2fa: 0x9b, 0x2fb: 0x9b, 0x2fc: 0x9b, 0x2fd: 0x9b, 0x2fe: 0x9b, 0x2ff: 0x9b, - // Block 0xc, offset 0x300 - 0x300: 0xa1, 0x301: 0xa2, 0x302: 0xa3, 0x304: 0xa4, 0x305: 0xa5, 0x306: 0xa6, 0x307: 0xa7, - 0x308: 0xa8, 0x30b: 0xa9, 0x30c: 0xaa, 0x30d: 0xab, - 0x310: 0xac, 0x311: 0xad, 0x312: 0xae, 0x313: 0xaf, 0x316: 0xb0, 0x317: 0xb1, - 0x318: 0xb2, 0x319: 0xb3, 0x31a: 0xb4, 0x31c: 0xb5, - 0x330: 0xb6, 0x332: 0xb7, - // Block 0xd, offset 0x340 - 0x36b: 0xb8, 0x36c: 0xb9, - 0x37e: 0xba, - // Block 0xe, offset 0x380 - 0x3b2: 0xbb, - // Block 0xf, offset 0x3c0 - 0x3c5: 0xbc, 0x3c6: 0xbd, - 0x3c8: 0x54, 0x3c9: 0xbe, 0x3cc: 0x54, 0x3cd: 0xbf, - 0x3db: 0xc0, 0x3dc: 0xc1, 0x3dd: 0xc2, 0x3de: 0xc3, 0x3df: 0xc4, - 0x3e8: 0xc5, 0x3e9: 0xc6, 0x3ea: 0xc7, - // Block 0x10, offset 0x400 - 0x400: 0xc8, - 0x420: 0x9b, 0x421: 0x9b, 0x422: 0x9b, 0x423: 0xc9, 0x424: 0x9b, 0x425: 0xca, 0x426: 0x9b, 0x427: 0x9b, - 0x428: 0x9b, 0x429: 0x9b, 0x42a: 0x9b, 0x42b: 0x9b, 0x42c: 0x9b, 0x42d: 0x9b, 0x42e: 0x9b, 0x42f: 0x9b, - 0x430: 0x9b, 0x431: 0x9b, 0x432: 0x9b, 0x433: 0x9b, 0x434: 0x9b, 0x435: 0x9b, 0x436: 0x9b, 0x437: 0x9b, - 0x438: 0x0e, 0x439: 0x0e, 0x43a: 0x0e, 0x43b: 0xcb, 0x43c: 0x9b, 0x43d: 0x9b, 0x43e: 0x9b, 0x43f: 0x9b, - // Block 0x11, offset 0x440 - 0x440: 0xcc, 0x441: 0x54, 0x442: 0xcd, 0x443: 0xce, 0x444: 0xcf, 0x445: 0xd0, - 0x44c: 0x54, 0x44d: 0x54, 0x44e: 0x54, 0x44f: 0x54, - 0x450: 0x54, 0x451: 0x54, 0x452: 0x54, 0x453: 0x54, 0x454: 0x54, 0x455: 0x54, 0x456: 0x54, 0x457: 0x54, - 0x458: 0x54, 0x459: 0x54, 0x45a: 0x54, 0x45b: 0xd1, 0x45c: 0x54, 0x45d: 0x6c, 0x45e: 0x54, 0x45f: 0xd2, - 0x460: 0xd3, 0x461: 0xd4, 0x462: 0xd5, 0x464: 0xd6, 0x465: 0xd7, 0x466: 0xd8, 0x467: 0x36, - 0x47f: 0xd9, - // Block 0x12, offset 0x480 - 0x4bf: 0xd9, - // Block 0x13, offset 0x4c0 - 0x4d0: 0x09, 0x4d1: 0x0a, 0x4d6: 0x0b, - 0x4db: 0x0c, 0x4dd: 0x0d, 0x4de: 0x0e, 0x4df: 0x0f, - 0x4ef: 0x10, - 0x4ff: 0x10, - // Block 0x14, offset 0x500 - 0x50f: 0x10, - 0x51f: 0x10, - 0x52f: 0x10, - 0x53f: 0x10, - // Block 0x15, offset 0x540 - 0x540: 0xda, 0x541: 0xda, 0x542: 0xda, 0x543: 0xda, 0x544: 0x05, 0x545: 0x05, 0x546: 0x05, 0x547: 0xdb, - 0x548: 0xda, 0x549: 0xda, 0x54a: 0xda, 0x54b: 0xda, 0x54c: 0xda, 0x54d: 0xda, 0x54e: 0xda, 0x54f: 0xda, - 0x550: 0xda, 0x551: 0xda, 0x552: 0xda, 0x553: 0xda, 0x554: 0xda, 0x555: 0xda, 0x556: 0xda, 0x557: 0xda, - 0x558: 0xda, 0x559: 0xda, 0x55a: 0xda, 0x55b: 0xda, 0x55c: 0xda, 0x55d: 0xda, 0x55e: 0xda, 0x55f: 0xda, - 0x560: 0xda, 0x561: 0xda, 0x562: 0xda, 0x563: 0xda, 0x564: 0xda, 0x565: 0xda, 0x566: 0xda, 0x567: 0xda, - 0x568: 0xda, 0x569: 0xda, 0x56a: 0xda, 0x56b: 0xda, 0x56c: 0xda, 0x56d: 0xda, 0x56e: 0xda, 0x56f: 0xda, - 0x570: 0xda, 0x571: 0xda, 0x572: 0xda, 0x573: 0xda, 0x574: 0xda, 0x575: 0xda, 0x576: 0xda, 0x577: 0xda, - 0x578: 0xda, 0x579: 0xda, 0x57a: 0xda, 0x57b: 0xda, 0x57c: 0xda, 0x57d: 0xda, 0x57e: 0xda, 0x57f: 0xda, - // Block 0x16, offset 0x580 - 0x58f: 0x10, - 0x59f: 0x10, - 0x5a0: 0x13, - 0x5af: 0x10, - 0x5bf: 0x10, - // Block 0x17, offset 0x5c0 - 0x5cf: 0x10, -} - -// Total table size 15800 bytes (15KiB); checksum: F50EF68C diff --git a/vendor/golang.org/x/text/unicode/norm/forminfo.go b/vendor/golang.org/x/text/unicode/norm/forminfo.go index 487335d14d..f3a234e5f5 100644 --- a/vendor/golang.org/x/text/unicode/norm/forminfo.go +++ b/vendor/golang.org/x/text/unicode/norm/forminfo.go @@ -13,15 +13,18 @@ import "encoding/binary" // a rune to a uint16. The values take two forms. For v >= 0x8000: // bits // 15: 1 (inverse of NFD_QC bit of qcInfo) -// 13..7: qcInfo (see below). isYesD is always true (no decomposition). +// 12..7: qcInfo (see below). isYesD is always true (no decomposition). // 6..0: ccc (compressed CCC value). // For v < 0x8000, the respective rune has a decomposition and v is an index // into a byte array of UTF-8 decomposition sequences and additional info and // has the form: //

* [ []] // The header contains the number of bytes in the decomposition (excluding this -// length byte). The two most significant bits of this length byte correspond -// to bit 5 and 4 of qcInfo (see below). The byte sequence itself starts at v+1. +// length byte), with 33 mapped to 31 to fit in 5 bits. +// (If any 31- or 32-byte decompositions come along, we could switch to using +// use a general lookup table as long as there are at most 32 distinct lengths.) +// The three most significant bits of this length byte correspond +// to bit 5, 4, and 3 of qcInfo (see below). The byte sequence itself starts at v+1. // The byte sequence is followed by a trailing and leading CCC if the values // for these are not zero. The value of v determines which ccc are appended // to the sequences. For v < firstCCC, there are none, for v >= firstCCC, @@ -32,8 +35,8 @@ import "encoding/binary" const ( qcInfoMask = 0x3F // to clear all but the relevant bits in a qcInfo - headerLenMask = 0x3F // extract the length value from the header byte - headerFlagsMask = 0xC0 // extract the qcInfo bits from the header byte + headerLenMask = 0x1F // extract the length value from the header byte (31 => 33) + headerFlagsMask = 0xE0 // extract the qcInfo bits from the header byte ) // Properties provides access to normalization properties of a rune. @@ -109,14 +112,14 @@ func (p Properties) BoundaryAfter() bool { return p.isInert() } -// We pack quick check data in 4 bits: +// We pack quick check data in 6 bits: // // 5: Combines forward (0 == false, 1 == true) // 4..3: NFC_QC Yes(00), No (10), or Maybe (11) // 2: NFD_QC Yes (0) or No (1). No also means there is a decomposition. // 1..0: Number of trailing non-starters. // -// When all 4 bits are zero, the character is inert, meaning it is never +// When all 6 bits are zero, the character is inert, meaning it is never // influenced by normalization. type qcInfo uint8 @@ -152,6 +155,9 @@ func (p Properties) Decomposition() []byte { } i := p.index n := decomps[i] & headerLenMask + if n == 31 { + n = 33 + } i++ return decomps[i : i+uint16(n)] } @@ -260,7 +266,11 @@ func compInfo(v uint16, sz int) Properties { f := (qcInfo(h&headerFlagsMask) >> 2) | 0x4 p := Properties{size: uint8(sz), flags: f, index: v} if v >= firstCCC { - v += uint16(h&headerLenMask) + 1 + n := uint16(h & headerLenMask) + if n == 31 { + n = 33 + } + v += n + 1 c := decomps[v] p.tccc = c >> 2 p.flags |= qcInfo(c & 0x3) diff --git a/vendor/golang.org/x/text/unicode/norm/tables10.0.0.go b/vendor/golang.org/x/text/unicode/norm/tables10.0.0.go deleted file mode 100644 index 1af161c756..0000000000 --- a/vendor/golang.org/x/text/unicode/norm/tables10.0.0.go +++ /dev/null @@ -1,7657 +0,0 @@ -// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. - -//go:build go1.10 && !go1.13 - -package norm - -import "sync" - -const ( - // Version is the Unicode edition from which the tables are derived. - Version = "10.0.0" - - // MaxTransformChunkSize indicates the maximum number of bytes that Transform - // may need to write atomically for any Form. Making a destination buffer at - // least this size ensures that Transform can always make progress and that - // the user does not need to grow the buffer on an ErrShortDst. - MaxTransformChunkSize = 35 + maxNonStarters*4 -) - -var ccc = [55]uint8{ - 0, 1, 7, 8, 9, 10, 11, 12, - 13, 14, 15, 16, 17, 18, 19, 20, - 21, 22, 23, 24, 25, 26, 27, 28, - 29, 30, 31, 32, 33, 34, 35, 36, - 84, 91, 103, 107, 118, 122, 129, 130, - 132, 202, 214, 216, 218, 220, 222, 224, - 226, 228, 230, 232, 233, 234, 240, -} - -const ( - firstMulti = 0x186D - firstCCC = 0x2C9E - endMulti = 0x2F60 - firstLeadingCCC = 0x49AE - firstCCCZeroExcept = 0x4A78 - firstStarterWithNLead = 0x4A9F - lastDecomp = 0x4AA1 - maxDecomp = 0x8000 -) - -// decomps: 19105 bytes -var decomps = [...]byte{ - // Bytes 0 - 3f - 0x00, 0x41, 0x20, 0x41, 0x21, 0x41, 0x22, 0x41, - 0x23, 0x41, 0x24, 0x41, 0x25, 0x41, 0x26, 0x41, - 0x27, 0x41, 0x28, 0x41, 0x29, 0x41, 0x2A, 0x41, - 0x2B, 0x41, 0x2C, 0x41, 0x2D, 0x41, 0x2E, 0x41, - 0x2F, 0x41, 0x30, 0x41, 0x31, 0x41, 0x32, 0x41, - 0x33, 0x41, 0x34, 0x41, 0x35, 0x41, 0x36, 0x41, - 0x37, 0x41, 0x38, 0x41, 0x39, 0x41, 0x3A, 0x41, - 0x3B, 0x41, 0x3C, 0x41, 0x3D, 0x41, 0x3E, 0x41, - // Bytes 40 - 7f - 0x3F, 0x41, 0x40, 0x41, 0x41, 0x41, 0x42, 0x41, - 0x43, 0x41, 0x44, 0x41, 0x45, 0x41, 0x46, 0x41, - 0x47, 0x41, 0x48, 0x41, 0x49, 0x41, 0x4A, 0x41, - 0x4B, 0x41, 0x4C, 0x41, 0x4D, 0x41, 0x4E, 0x41, - 0x4F, 0x41, 0x50, 0x41, 0x51, 0x41, 0x52, 0x41, - 0x53, 0x41, 0x54, 0x41, 0x55, 0x41, 0x56, 0x41, - 0x57, 0x41, 0x58, 0x41, 0x59, 0x41, 0x5A, 0x41, - 0x5B, 0x41, 0x5C, 0x41, 0x5D, 0x41, 0x5E, 0x41, - // Bytes 80 - bf - 0x5F, 0x41, 0x60, 0x41, 0x61, 0x41, 0x62, 0x41, - 0x63, 0x41, 0x64, 0x41, 0x65, 0x41, 0x66, 0x41, - 0x67, 0x41, 0x68, 0x41, 0x69, 0x41, 0x6A, 0x41, - 0x6B, 0x41, 0x6C, 0x41, 0x6D, 0x41, 0x6E, 0x41, - 0x6F, 0x41, 0x70, 0x41, 0x71, 0x41, 0x72, 0x41, - 0x73, 0x41, 0x74, 0x41, 0x75, 0x41, 0x76, 0x41, - 0x77, 0x41, 0x78, 0x41, 0x79, 0x41, 0x7A, 0x41, - 0x7B, 0x41, 0x7C, 0x41, 0x7D, 0x41, 0x7E, 0x42, - // Bytes c0 - ff - 0xC2, 0xA2, 0x42, 0xC2, 0xA3, 0x42, 0xC2, 0xA5, - 0x42, 0xC2, 0xA6, 0x42, 0xC2, 0xAC, 0x42, 0xC2, - 0xB7, 0x42, 0xC3, 0x86, 0x42, 0xC3, 0xB0, 0x42, - 0xC4, 0xA6, 0x42, 0xC4, 0xA7, 0x42, 0xC4, 0xB1, - 0x42, 0xC5, 0x8B, 0x42, 0xC5, 0x93, 0x42, 0xC6, - 0x8E, 0x42, 0xC6, 0x90, 0x42, 0xC6, 0xAB, 0x42, - 0xC8, 0xA2, 0x42, 0xC8, 0xB7, 0x42, 0xC9, 0x90, - 0x42, 0xC9, 0x91, 0x42, 0xC9, 0x92, 0x42, 0xC9, - // Bytes 100 - 13f - 0x94, 0x42, 0xC9, 0x95, 0x42, 0xC9, 0x99, 0x42, - 0xC9, 0x9B, 0x42, 0xC9, 0x9C, 0x42, 0xC9, 0x9F, - 0x42, 0xC9, 0xA1, 0x42, 0xC9, 0xA3, 0x42, 0xC9, - 0xA5, 0x42, 0xC9, 0xA6, 0x42, 0xC9, 0xA8, 0x42, - 0xC9, 0xA9, 0x42, 0xC9, 0xAA, 0x42, 0xC9, 0xAB, - 0x42, 0xC9, 0xAD, 0x42, 0xC9, 0xAF, 0x42, 0xC9, - 0xB0, 0x42, 0xC9, 0xB1, 0x42, 0xC9, 0xB2, 0x42, - 0xC9, 0xB3, 0x42, 0xC9, 0xB4, 0x42, 0xC9, 0xB5, - // Bytes 140 - 17f - 0x42, 0xC9, 0xB8, 0x42, 0xC9, 0xB9, 0x42, 0xC9, - 0xBB, 0x42, 0xCA, 0x81, 0x42, 0xCA, 0x82, 0x42, - 0xCA, 0x83, 0x42, 0xCA, 0x89, 0x42, 0xCA, 0x8A, - 0x42, 0xCA, 0x8B, 0x42, 0xCA, 0x8C, 0x42, 0xCA, - 0x90, 0x42, 0xCA, 0x91, 0x42, 0xCA, 0x92, 0x42, - 0xCA, 0x95, 0x42, 0xCA, 0x9D, 0x42, 0xCA, 0x9F, - 0x42, 0xCA, 0xB9, 0x42, 0xCE, 0x91, 0x42, 0xCE, - 0x92, 0x42, 0xCE, 0x93, 0x42, 0xCE, 0x94, 0x42, - // Bytes 180 - 1bf - 0xCE, 0x95, 0x42, 0xCE, 0x96, 0x42, 0xCE, 0x97, - 0x42, 0xCE, 0x98, 0x42, 0xCE, 0x99, 0x42, 0xCE, - 0x9A, 0x42, 0xCE, 0x9B, 0x42, 0xCE, 0x9C, 0x42, - 0xCE, 0x9D, 0x42, 0xCE, 0x9E, 0x42, 0xCE, 0x9F, - 0x42, 0xCE, 0xA0, 0x42, 0xCE, 0xA1, 0x42, 0xCE, - 0xA3, 0x42, 0xCE, 0xA4, 0x42, 0xCE, 0xA5, 0x42, - 0xCE, 0xA6, 0x42, 0xCE, 0xA7, 0x42, 0xCE, 0xA8, - 0x42, 0xCE, 0xA9, 0x42, 0xCE, 0xB1, 0x42, 0xCE, - // Bytes 1c0 - 1ff - 0xB2, 0x42, 0xCE, 0xB3, 0x42, 0xCE, 0xB4, 0x42, - 0xCE, 0xB5, 0x42, 0xCE, 0xB6, 0x42, 0xCE, 0xB7, - 0x42, 0xCE, 0xB8, 0x42, 0xCE, 0xB9, 0x42, 0xCE, - 0xBA, 0x42, 0xCE, 0xBB, 0x42, 0xCE, 0xBC, 0x42, - 0xCE, 0xBD, 0x42, 0xCE, 0xBE, 0x42, 0xCE, 0xBF, - 0x42, 0xCF, 0x80, 0x42, 0xCF, 0x81, 0x42, 0xCF, - 0x82, 0x42, 0xCF, 0x83, 0x42, 0xCF, 0x84, 0x42, - 0xCF, 0x85, 0x42, 0xCF, 0x86, 0x42, 0xCF, 0x87, - // Bytes 200 - 23f - 0x42, 0xCF, 0x88, 0x42, 0xCF, 0x89, 0x42, 0xCF, - 0x9C, 0x42, 0xCF, 0x9D, 0x42, 0xD0, 0xBD, 0x42, - 0xD1, 0x8A, 0x42, 0xD1, 0x8C, 0x42, 0xD7, 0x90, - 0x42, 0xD7, 0x91, 0x42, 0xD7, 0x92, 0x42, 0xD7, - 0x93, 0x42, 0xD7, 0x94, 0x42, 0xD7, 0x9B, 0x42, - 0xD7, 0x9C, 0x42, 0xD7, 0x9D, 0x42, 0xD7, 0xA2, - 0x42, 0xD7, 0xA8, 0x42, 0xD7, 0xAA, 0x42, 0xD8, - 0xA1, 0x42, 0xD8, 0xA7, 0x42, 0xD8, 0xA8, 0x42, - // Bytes 240 - 27f - 0xD8, 0xA9, 0x42, 0xD8, 0xAA, 0x42, 0xD8, 0xAB, - 0x42, 0xD8, 0xAC, 0x42, 0xD8, 0xAD, 0x42, 0xD8, - 0xAE, 0x42, 0xD8, 0xAF, 0x42, 0xD8, 0xB0, 0x42, - 0xD8, 0xB1, 0x42, 0xD8, 0xB2, 0x42, 0xD8, 0xB3, - 0x42, 0xD8, 0xB4, 0x42, 0xD8, 0xB5, 0x42, 0xD8, - 0xB6, 0x42, 0xD8, 0xB7, 0x42, 0xD8, 0xB8, 0x42, - 0xD8, 0xB9, 0x42, 0xD8, 0xBA, 0x42, 0xD9, 0x81, - 0x42, 0xD9, 0x82, 0x42, 0xD9, 0x83, 0x42, 0xD9, - // Bytes 280 - 2bf - 0x84, 0x42, 0xD9, 0x85, 0x42, 0xD9, 0x86, 0x42, - 0xD9, 0x87, 0x42, 0xD9, 0x88, 0x42, 0xD9, 0x89, - 0x42, 0xD9, 0x8A, 0x42, 0xD9, 0xAE, 0x42, 0xD9, - 0xAF, 0x42, 0xD9, 0xB1, 0x42, 0xD9, 0xB9, 0x42, - 0xD9, 0xBA, 0x42, 0xD9, 0xBB, 0x42, 0xD9, 0xBE, - 0x42, 0xD9, 0xBF, 0x42, 0xDA, 0x80, 0x42, 0xDA, - 0x83, 0x42, 0xDA, 0x84, 0x42, 0xDA, 0x86, 0x42, - 0xDA, 0x87, 0x42, 0xDA, 0x88, 0x42, 0xDA, 0x8C, - // Bytes 2c0 - 2ff - 0x42, 0xDA, 0x8D, 0x42, 0xDA, 0x8E, 0x42, 0xDA, - 0x91, 0x42, 0xDA, 0x98, 0x42, 0xDA, 0xA1, 0x42, - 0xDA, 0xA4, 0x42, 0xDA, 0xA6, 0x42, 0xDA, 0xA9, - 0x42, 0xDA, 0xAD, 0x42, 0xDA, 0xAF, 0x42, 0xDA, - 0xB1, 0x42, 0xDA, 0xB3, 0x42, 0xDA, 0xBA, 0x42, - 0xDA, 0xBB, 0x42, 0xDA, 0xBE, 0x42, 0xDB, 0x81, - 0x42, 0xDB, 0x85, 0x42, 0xDB, 0x86, 0x42, 0xDB, - 0x87, 0x42, 0xDB, 0x88, 0x42, 0xDB, 0x89, 0x42, - // Bytes 300 - 33f - 0xDB, 0x8B, 0x42, 0xDB, 0x8C, 0x42, 0xDB, 0x90, - 0x42, 0xDB, 0x92, 0x43, 0xE0, 0xBC, 0x8B, 0x43, - 0xE1, 0x83, 0x9C, 0x43, 0xE1, 0x84, 0x80, 0x43, - 0xE1, 0x84, 0x81, 0x43, 0xE1, 0x84, 0x82, 0x43, - 0xE1, 0x84, 0x83, 0x43, 0xE1, 0x84, 0x84, 0x43, - 0xE1, 0x84, 0x85, 0x43, 0xE1, 0x84, 0x86, 0x43, - 0xE1, 0x84, 0x87, 0x43, 0xE1, 0x84, 0x88, 0x43, - 0xE1, 0x84, 0x89, 0x43, 0xE1, 0x84, 0x8A, 0x43, - // Bytes 340 - 37f - 0xE1, 0x84, 0x8B, 0x43, 0xE1, 0x84, 0x8C, 0x43, - 0xE1, 0x84, 0x8D, 0x43, 0xE1, 0x84, 0x8E, 0x43, - 0xE1, 0x84, 0x8F, 0x43, 0xE1, 0x84, 0x90, 0x43, - 0xE1, 0x84, 0x91, 0x43, 0xE1, 0x84, 0x92, 0x43, - 0xE1, 0x84, 0x94, 0x43, 0xE1, 0x84, 0x95, 0x43, - 0xE1, 0x84, 0x9A, 0x43, 0xE1, 0x84, 0x9C, 0x43, - 0xE1, 0x84, 0x9D, 0x43, 0xE1, 0x84, 0x9E, 0x43, - 0xE1, 0x84, 0xA0, 0x43, 0xE1, 0x84, 0xA1, 0x43, - // Bytes 380 - 3bf - 0xE1, 0x84, 0xA2, 0x43, 0xE1, 0x84, 0xA3, 0x43, - 0xE1, 0x84, 0xA7, 0x43, 0xE1, 0x84, 0xA9, 0x43, - 0xE1, 0x84, 0xAB, 0x43, 0xE1, 0x84, 0xAC, 0x43, - 0xE1, 0x84, 0xAD, 0x43, 0xE1, 0x84, 0xAE, 0x43, - 0xE1, 0x84, 0xAF, 0x43, 0xE1, 0x84, 0xB2, 0x43, - 0xE1, 0x84, 0xB6, 0x43, 0xE1, 0x85, 0x80, 0x43, - 0xE1, 0x85, 0x87, 0x43, 0xE1, 0x85, 0x8C, 0x43, - 0xE1, 0x85, 0x97, 0x43, 0xE1, 0x85, 0x98, 0x43, - // Bytes 3c0 - 3ff - 0xE1, 0x85, 0x99, 0x43, 0xE1, 0x85, 0xA0, 0x43, - 0xE1, 0x86, 0x84, 0x43, 0xE1, 0x86, 0x85, 0x43, - 0xE1, 0x86, 0x88, 0x43, 0xE1, 0x86, 0x91, 0x43, - 0xE1, 0x86, 0x92, 0x43, 0xE1, 0x86, 0x94, 0x43, - 0xE1, 0x86, 0x9E, 0x43, 0xE1, 0x86, 0xA1, 0x43, - 0xE1, 0x87, 0x87, 0x43, 0xE1, 0x87, 0x88, 0x43, - 0xE1, 0x87, 0x8C, 0x43, 0xE1, 0x87, 0x8E, 0x43, - 0xE1, 0x87, 0x93, 0x43, 0xE1, 0x87, 0x97, 0x43, - // Bytes 400 - 43f - 0xE1, 0x87, 0x99, 0x43, 0xE1, 0x87, 0x9D, 0x43, - 0xE1, 0x87, 0x9F, 0x43, 0xE1, 0x87, 0xB1, 0x43, - 0xE1, 0x87, 0xB2, 0x43, 0xE1, 0xB4, 0x82, 0x43, - 0xE1, 0xB4, 0x96, 0x43, 0xE1, 0xB4, 0x97, 0x43, - 0xE1, 0xB4, 0x9C, 0x43, 0xE1, 0xB4, 0x9D, 0x43, - 0xE1, 0xB4, 0xA5, 0x43, 0xE1, 0xB5, 0xBB, 0x43, - 0xE1, 0xB6, 0x85, 0x43, 0xE2, 0x80, 0x82, 0x43, - 0xE2, 0x80, 0x83, 0x43, 0xE2, 0x80, 0x90, 0x43, - // Bytes 440 - 47f - 0xE2, 0x80, 0x93, 0x43, 0xE2, 0x80, 0x94, 0x43, - 0xE2, 0x82, 0xA9, 0x43, 0xE2, 0x86, 0x90, 0x43, - 0xE2, 0x86, 0x91, 0x43, 0xE2, 0x86, 0x92, 0x43, - 0xE2, 0x86, 0x93, 0x43, 0xE2, 0x88, 0x82, 0x43, - 0xE2, 0x88, 0x87, 0x43, 0xE2, 0x88, 0x91, 0x43, - 0xE2, 0x88, 0x92, 0x43, 0xE2, 0x94, 0x82, 0x43, - 0xE2, 0x96, 0xA0, 0x43, 0xE2, 0x97, 0x8B, 0x43, - 0xE2, 0xA6, 0x85, 0x43, 0xE2, 0xA6, 0x86, 0x43, - // Bytes 480 - 4bf - 0xE2, 0xB5, 0xA1, 0x43, 0xE3, 0x80, 0x81, 0x43, - 0xE3, 0x80, 0x82, 0x43, 0xE3, 0x80, 0x88, 0x43, - 0xE3, 0x80, 0x89, 0x43, 0xE3, 0x80, 0x8A, 0x43, - 0xE3, 0x80, 0x8B, 0x43, 0xE3, 0x80, 0x8C, 0x43, - 0xE3, 0x80, 0x8D, 0x43, 0xE3, 0x80, 0x8E, 0x43, - 0xE3, 0x80, 0x8F, 0x43, 0xE3, 0x80, 0x90, 0x43, - 0xE3, 0x80, 0x91, 0x43, 0xE3, 0x80, 0x92, 0x43, - 0xE3, 0x80, 0x94, 0x43, 0xE3, 0x80, 0x95, 0x43, - // Bytes 4c0 - 4ff - 0xE3, 0x80, 0x96, 0x43, 0xE3, 0x80, 0x97, 0x43, - 0xE3, 0x82, 0xA1, 0x43, 0xE3, 0x82, 0xA2, 0x43, - 0xE3, 0x82, 0xA3, 0x43, 0xE3, 0x82, 0xA4, 0x43, - 0xE3, 0x82, 0xA5, 0x43, 0xE3, 0x82, 0xA6, 0x43, - 0xE3, 0x82, 0xA7, 0x43, 0xE3, 0x82, 0xA8, 0x43, - 0xE3, 0x82, 0xA9, 0x43, 0xE3, 0x82, 0xAA, 0x43, - 0xE3, 0x82, 0xAB, 0x43, 0xE3, 0x82, 0xAD, 0x43, - 0xE3, 0x82, 0xAF, 0x43, 0xE3, 0x82, 0xB1, 0x43, - // Bytes 500 - 53f - 0xE3, 0x82, 0xB3, 0x43, 0xE3, 0x82, 0xB5, 0x43, - 0xE3, 0x82, 0xB7, 0x43, 0xE3, 0x82, 0xB9, 0x43, - 0xE3, 0x82, 0xBB, 0x43, 0xE3, 0x82, 0xBD, 0x43, - 0xE3, 0x82, 0xBF, 0x43, 0xE3, 0x83, 0x81, 0x43, - 0xE3, 0x83, 0x83, 0x43, 0xE3, 0x83, 0x84, 0x43, - 0xE3, 0x83, 0x86, 0x43, 0xE3, 0x83, 0x88, 0x43, - 0xE3, 0x83, 0x8A, 0x43, 0xE3, 0x83, 0x8B, 0x43, - 0xE3, 0x83, 0x8C, 0x43, 0xE3, 0x83, 0x8D, 0x43, - // Bytes 540 - 57f - 0xE3, 0x83, 0x8E, 0x43, 0xE3, 0x83, 0x8F, 0x43, - 0xE3, 0x83, 0x92, 0x43, 0xE3, 0x83, 0x95, 0x43, - 0xE3, 0x83, 0x98, 0x43, 0xE3, 0x83, 0x9B, 0x43, - 0xE3, 0x83, 0x9E, 0x43, 0xE3, 0x83, 0x9F, 0x43, - 0xE3, 0x83, 0xA0, 0x43, 0xE3, 0x83, 0xA1, 0x43, - 0xE3, 0x83, 0xA2, 0x43, 0xE3, 0x83, 0xA3, 0x43, - 0xE3, 0x83, 0xA4, 0x43, 0xE3, 0x83, 0xA5, 0x43, - 0xE3, 0x83, 0xA6, 0x43, 0xE3, 0x83, 0xA7, 0x43, - // Bytes 580 - 5bf - 0xE3, 0x83, 0xA8, 0x43, 0xE3, 0x83, 0xA9, 0x43, - 0xE3, 0x83, 0xAA, 0x43, 0xE3, 0x83, 0xAB, 0x43, - 0xE3, 0x83, 0xAC, 0x43, 0xE3, 0x83, 0xAD, 0x43, - 0xE3, 0x83, 0xAF, 0x43, 0xE3, 0x83, 0xB0, 0x43, - 0xE3, 0x83, 0xB1, 0x43, 0xE3, 0x83, 0xB2, 0x43, - 0xE3, 0x83, 0xB3, 0x43, 0xE3, 0x83, 0xBB, 0x43, - 0xE3, 0x83, 0xBC, 0x43, 0xE3, 0x92, 0x9E, 0x43, - 0xE3, 0x92, 0xB9, 0x43, 0xE3, 0x92, 0xBB, 0x43, - // Bytes 5c0 - 5ff - 0xE3, 0x93, 0x9F, 0x43, 0xE3, 0x94, 0x95, 0x43, - 0xE3, 0x9B, 0xAE, 0x43, 0xE3, 0x9B, 0xBC, 0x43, - 0xE3, 0x9E, 0x81, 0x43, 0xE3, 0xA0, 0xAF, 0x43, - 0xE3, 0xA1, 0xA2, 0x43, 0xE3, 0xA1, 0xBC, 0x43, - 0xE3, 0xA3, 0x87, 0x43, 0xE3, 0xA3, 0xA3, 0x43, - 0xE3, 0xA4, 0x9C, 0x43, 0xE3, 0xA4, 0xBA, 0x43, - 0xE3, 0xA8, 0xAE, 0x43, 0xE3, 0xA9, 0xAC, 0x43, - 0xE3, 0xAB, 0xA4, 0x43, 0xE3, 0xAC, 0x88, 0x43, - // Bytes 600 - 63f - 0xE3, 0xAC, 0x99, 0x43, 0xE3, 0xAD, 0x89, 0x43, - 0xE3, 0xAE, 0x9D, 0x43, 0xE3, 0xB0, 0x98, 0x43, - 0xE3, 0xB1, 0x8E, 0x43, 0xE3, 0xB4, 0xB3, 0x43, - 0xE3, 0xB6, 0x96, 0x43, 0xE3, 0xBA, 0xAC, 0x43, - 0xE3, 0xBA, 0xB8, 0x43, 0xE3, 0xBC, 0x9B, 0x43, - 0xE3, 0xBF, 0xBC, 0x43, 0xE4, 0x80, 0x88, 0x43, - 0xE4, 0x80, 0x98, 0x43, 0xE4, 0x80, 0xB9, 0x43, - 0xE4, 0x81, 0x86, 0x43, 0xE4, 0x82, 0x96, 0x43, - // Bytes 640 - 67f - 0xE4, 0x83, 0xA3, 0x43, 0xE4, 0x84, 0xAF, 0x43, - 0xE4, 0x88, 0x82, 0x43, 0xE4, 0x88, 0xA7, 0x43, - 0xE4, 0x8A, 0xA0, 0x43, 0xE4, 0x8C, 0x81, 0x43, - 0xE4, 0x8C, 0xB4, 0x43, 0xE4, 0x8D, 0x99, 0x43, - 0xE4, 0x8F, 0x95, 0x43, 0xE4, 0x8F, 0x99, 0x43, - 0xE4, 0x90, 0x8B, 0x43, 0xE4, 0x91, 0xAB, 0x43, - 0xE4, 0x94, 0xAB, 0x43, 0xE4, 0x95, 0x9D, 0x43, - 0xE4, 0x95, 0xA1, 0x43, 0xE4, 0x95, 0xAB, 0x43, - // Bytes 680 - 6bf - 0xE4, 0x97, 0x97, 0x43, 0xE4, 0x97, 0xB9, 0x43, - 0xE4, 0x98, 0xB5, 0x43, 0xE4, 0x9A, 0xBE, 0x43, - 0xE4, 0x9B, 0x87, 0x43, 0xE4, 0xA6, 0x95, 0x43, - 0xE4, 0xA7, 0xA6, 0x43, 0xE4, 0xA9, 0xAE, 0x43, - 0xE4, 0xA9, 0xB6, 0x43, 0xE4, 0xAA, 0xB2, 0x43, - 0xE4, 0xAC, 0xB3, 0x43, 0xE4, 0xAF, 0x8E, 0x43, - 0xE4, 0xB3, 0x8E, 0x43, 0xE4, 0xB3, 0xAD, 0x43, - 0xE4, 0xB3, 0xB8, 0x43, 0xE4, 0xB5, 0x96, 0x43, - // Bytes 6c0 - 6ff - 0xE4, 0xB8, 0x80, 0x43, 0xE4, 0xB8, 0x81, 0x43, - 0xE4, 0xB8, 0x83, 0x43, 0xE4, 0xB8, 0x89, 0x43, - 0xE4, 0xB8, 0x8A, 0x43, 0xE4, 0xB8, 0x8B, 0x43, - 0xE4, 0xB8, 0x8D, 0x43, 0xE4, 0xB8, 0x99, 0x43, - 0xE4, 0xB8, 0xA6, 0x43, 0xE4, 0xB8, 0xA8, 0x43, - 0xE4, 0xB8, 0xAD, 0x43, 0xE4, 0xB8, 0xB2, 0x43, - 0xE4, 0xB8, 0xB6, 0x43, 0xE4, 0xB8, 0xB8, 0x43, - 0xE4, 0xB8, 0xB9, 0x43, 0xE4, 0xB8, 0xBD, 0x43, - // Bytes 700 - 73f - 0xE4, 0xB8, 0xBF, 0x43, 0xE4, 0xB9, 0x81, 0x43, - 0xE4, 0xB9, 0x99, 0x43, 0xE4, 0xB9, 0x9D, 0x43, - 0xE4, 0xBA, 0x82, 0x43, 0xE4, 0xBA, 0x85, 0x43, - 0xE4, 0xBA, 0x86, 0x43, 0xE4, 0xBA, 0x8C, 0x43, - 0xE4, 0xBA, 0x94, 0x43, 0xE4, 0xBA, 0xA0, 0x43, - 0xE4, 0xBA, 0xA4, 0x43, 0xE4, 0xBA, 0xAE, 0x43, - 0xE4, 0xBA, 0xBA, 0x43, 0xE4, 0xBB, 0x80, 0x43, - 0xE4, 0xBB, 0x8C, 0x43, 0xE4, 0xBB, 0xA4, 0x43, - // Bytes 740 - 77f - 0xE4, 0xBC, 0x81, 0x43, 0xE4, 0xBC, 0x91, 0x43, - 0xE4, 0xBD, 0xA0, 0x43, 0xE4, 0xBE, 0x80, 0x43, - 0xE4, 0xBE, 0x86, 0x43, 0xE4, 0xBE, 0x8B, 0x43, - 0xE4, 0xBE, 0xAE, 0x43, 0xE4, 0xBE, 0xBB, 0x43, - 0xE4, 0xBE, 0xBF, 0x43, 0xE5, 0x80, 0x82, 0x43, - 0xE5, 0x80, 0xAB, 0x43, 0xE5, 0x81, 0xBA, 0x43, - 0xE5, 0x82, 0x99, 0x43, 0xE5, 0x83, 0x8F, 0x43, - 0xE5, 0x83, 0x9A, 0x43, 0xE5, 0x83, 0xA7, 0x43, - // Bytes 780 - 7bf - 0xE5, 0x84, 0xAA, 0x43, 0xE5, 0x84, 0xBF, 0x43, - 0xE5, 0x85, 0x80, 0x43, 0xE5, 0x85, 0x85, 0x43, - 0xE5, 0x85, 0x8D, 0x43, 0xE5, 0x85, 0x94, 0x43, - 0xE5, 0x85, 0xA4, 0x43, 0xE5, 0x85, 0xA5, 0x43, - 0xE5, 0x85, 0xA7, 0x43, 0xE5, 0x85, 0xA8, 0x43, - 0xE5, 0x85, 0xA9, 0x43, 0xE5, 0x85, 0xAB, 0x43, - 0xE5, 0x85, 0xAD, 0x43, 0xE5, 0x85, 0xB7, 0x43, - 0xE5, 0x86, 0x80, 0x43, 0xE5, 0x86, 0x82, 0x43, - // Bytes 7c0 - 7ff - 0xE5, 0x86, 0x8D, 0x43, 0xE5, 0x86, 0x92, 0x43, - 0xE5, 0x86, 0x95, 0x43, 0xE5, 0x86, 0x96, 0x43, - 0xE5, 0x86, 0x97, 0x43, 0xE5, 0x86, 0x99, 0x43, - 0xE5, 0x86, 0xA4, 0x43, 0xE5, 0x86, 0xAB, 0x43, - 0xE5, 0x86, 0xAC, 0x43, 0xE5, 0x86, 0xB5, 0x43, - 0xE5, 0x86, 0xB7, 0x43, 0xE5, 0x87, 0x89, 0x43, - 0xE5, 0x87, 0x8C, 0x43, 0xE5, 0x87, 0x9C, 0x43, - 0xE5, 0x87, 0x9E, 0x43, 0xE5, 0x87, 0xA0, 0x43, - // Bytes 800 - 83f - 0xE5, 0x87, 0xB5, 0x43, 0xE5, 0x88, 0x80, 0x43, - 0xE5, 0x88, 0x83, 0x43, 0xE5, 0x88, 0x87, 0x43, - 0xE5, 0x88, 0x97, 0x43, 0xE5, 0x88, 0x9D, 0x43, - 0xE5, 0x88, 0xA9, 0x43, 0xE5, 0x88, 0xBA, 0x43, - 0xE5, 0x88, 0xBB, 0x43, 0xE5, 0x89, 0x86, 0x43, - 0xE5, 0x89, 0x8D, 0x43, 0xE5, 0x89, 0xB2, 0x43, - 0xE5, 0x89, 0xB7, 0x43, 0xE5, 0x8A, 0x89, 0x43, - 0xE5, 0x8A, 0x9B, 0x43, 0xE5, 0x8A, 0xA3, 0x43, - // Bytes 840 - 87f - 0xE5, 0x8A, 0xB3, 0x43, 0xE5, 0x8A, 0xB4, 0x43, - 0xE5, 0x8B, 0x87, 0x43, 0xE5, 0x8B, 0x89, 0x43, - 0xE5, 0x8B, 0x92, 0x43, 0xE5, 0x8B, 0x9E, 0x43, - 0xE5, 0x8B, 0xA4, 0x43, 0xE5, 0x8B, 0xB5, 0x43, - 0xE5, 0x8B, 0xB9, 0x43, 0xE5, 0x8B, 0xBA, 0x43, - 0xE5, 0x8C, 0x85, 0x43, 0xE5, 0x8C, 0x86, 0x43, - 0xE5, 0x8C, 0x95, 0x43, 0xE5, 0x8C, 0x97, 0x43, - 0xE5, 0x8C, 0x9A, 0x43, 0xE5, 0x8C, 0xB8, 0x43, - // Bytes 880 - 8bf - 0xE5, 0x8C, 0xBB, 0x43, 0xE5, 0x8C, 0xBF, 0x43, - 0xE5, 0x8D, 0x81, 0x43, 0xE5, 0x8D, 0x84, 0x43, - 0xE5, 0x8D, 0x85, 0x43, 0xE5, 0x8D, 0x89, 0x43, - 0xE5, 0x8D, 0x91, 0x43, 0xE5, 0x8D, 0x94, 0x43, - 0xE5, 0x8D, 0x9A, 0x43, 0xE5, 0x8D, 0x9C, 0x43, - 0xE5, 0x8D, 0xA9, 0x43, 0xE5, 0x8D, 0xB0, 0x43, - 0xE5, 0x8D, 0xB3, 0x43, 0xE5, 0x8D, 0xB5, 0x43, - 0xE5, 0x8D, 0xBD, 0x43, 0xE5, 0x8D, 0xBF, 0x43, - // Bytes 8c0 - 8ff - 0xE5, 0x8E, 0x82, 0x43, 0xE5, 0x8E, 0xB6, 0x43, - 0xE5, 0x8F, 0x83, 0x43, 0xE5, 0x8F, 0x88, 0x43, - 0xE5, 0x8F, 0x8A, 0x43, 0xE5, 0x8F, 0x8C, 0x43, - 0xE5, 0x8F, 0x9F, 0x43, 0xE5, 0x8F, 0xA3, 0x43, - 0xE5, 0x8F, 0xA5, 0x43, 0xE5, 0x8F, 0xAB, 0x43, - 0xE5, 0x8F, 0xAF, 0x43, 0xE5, 0x8F, 0xB1, 0x43, - 0xE5, 0x8F, 0xB3, 0x43, 0xE5, 0x90, 0x86, 0x43, - 0xE5, 0x90, 0x88, 0x43, 0xE5, 0x90, 0x8D, 0x43, - // Bytes 900 - 93f - 0xE5, 0x90, 0x8F, 0x43, 0xE5, 0x90, 0x9D, 0x43, - 0xE5, 0x90, 0xB8, 0x43, 0xE5, 0x90, 0xB9, 0x43, - 0xE5, 0x91, 0x82, 0x43, 0xE5, 0x91, 0x88, 0x43, - 0xE5, 0x91, 0xA8, 0x43, 0xE5, 0x92, 0x9E, 0x43, - 0xE5, 0x92, 0xA2, 0x43, 0xE5, 0x92, 0xBD, 0x43, - 0xE5, 0x93, 0xB6, 0x43, 0xE5, 0x94, 0x90, 0x43, - 0xE5, 0x95, 0x8F, 0x43, 0xE5, 0x95, 0x93, 0x43, - 0xE5, 0x95, 0x95, 0x43, 0xE5, 0x95, 0xA3, 0x43, - // Bytes 940 - 97f - 0xE5, 0x96, 0x84, 0x43, 0xE5, 0x96, 0x87, 0x43, - 0xE5, 0x96, 0x99, 0x43, 0xE5, 0x96, 0x9D, 0x43, - 0xE5, 0x96, 0xAB, 0x43, 0xE5, 0x96, 0xB3, 0x43, - 0xE5, 0x96, 0xB6, 0x43, 0xE5, 0x97, 0x80, 0x43, - 0xE5, 0x97, 0x82, 0x43, 0xE5, 0x97, 0xA2, 0x43, - 0xE5, 0x98, 0x86, 0x43, 0xE5, 0x99, 0x91, 0x43, - 0xE5, 0x99, 0xA8, 0x43, 0xE5, 0x99, 0xB4, 0x43, - 0xE5, 0x9B, 0x97, 0x43, 0xE5, 0x9B, 0x9B, 0x43, - // Bytes 980 - 9bf - 0xE5, 0x9B, 0xB9, 0x43, 0xE5, 0x9C, 0x96, 0x43, - 0xE5, 0x9C, 0x97, 0x43, 0xE5, 0x9C, 0x9F, 0x43, - 0xE5, 0x9C, 0xB0, 0x43, 0xE5, 0x9E, 0x8B, 0x43, - 0xE5, 0x9F, 0x8E, 0x43, 0xE5, 0x9F, 0xB4, 0x43, - 0xE5, 0xA0, 0x8D, 0x43, 0xE5, 0xA0, 0xB1, 0x43, - 0xE5, 0xA0, 0xB2, 0x43, 0xE5, 0xA1, 0x80, 0x43, - 0xE5, 0xA1, 0x9A, 0x43, 0xE5, 0xA1, 0x9E, 0x43, - 0xE5, 0xA2, 0xA8, 0x43, 0xE5, 0xA2, 0xAC, 0x43, - // Bytes 9c0 - 9ff - 0xE5, 0xA2, 0xB3, 0x43, 0xE5, 0xA3, 0x98, 0x43, - 0xE5, 0xA3, 0x9F, 0x43, 0xE5, 0xA3, 0xAB, 0x43, - 0xE5, 0xA3, 0xAE, 0x43, 0xE5, 0xA3, 0xB0, 0x43, - 0xE5, 0xA3, 0xB2, 0x43, 0xE5, 0xA3, 0xB7, 0x43, - 0xE5, 0xA4, 0x82, 0x43, 0xE5, 0xA4, 0x86, 0x43, - 0xE5, 0xA4, 0x8A, 0x43, 0xE5, 0xA4, 0x95, 0x43, - 0xE5, 0xA4, 0x9A, 0x43, 0xE5, 0xA4, 0x9C, 0x43, - 0xE5, 0xA4, 0xA2, 0x43, 0xE5, 0xA4, 0xA7, 0x43, - // Bytes a00 - a3f - 0xE5, 0xA4, 0xA9, 0x43, 0xE5, 0xA5, 0x84, 0x43, - 0xE5, 0xA5, 0x88, 0x43, 0xE5, 0xA5, 0x91, 0x43, - 0xE5, 0xA5, 0x94, 0x43, 0xE5, 0xA5, 0xA2, 0x43, - 0xE5, 0xA5, 0xB3, 0x43, 0xE5, 0xA7, 0x98, 0x43, - 0xE5, 0xA7, 0xAC, 0x43, 0xE5, 0xA8, 0x9B, 0x43, - 0xE5, 0xA8, 0xA7, 0x43, 0xE5, 0xA9, 0xA2, 0x43, - 0xE5, 0xA9, 0xA6, 0x43, 0xE5, 0xAA, 0xB5, 0x43, - 0xE5, 0xAC, 0x88, 0x43, 0xE5, 0xAC, 0xA8, 0x43, - // Bytes a40 - a7f - 0xE5, 0xAC, 0xBE, 0x43, 0xE5, 0xAD, 0x90, 0x43, - 0xE5, 0xAD, 0x97, 0x43, 0xE5, 0xAD, 0xA6, 0x43, - 0xE5, 0xAE, 0x80, 0x43, 0xE5, 0xAE, 0x85, 0x43, - 0xE5, 0xAE, 0x97, 0x43, 0xE5, 0xAF, 0x83, 0x43, - 0xE5, 0xAF, 0x98, 0x43, 0xE5, 0xAF, 0xA7, 0x43, - 0xE5, 0xAF, 0xAE, 0x43, 0xE5, 0xAF, 0xB3, 0x43, - 0xE5, 0xAF, 0xB8, 0x43, 0xE5, 0xAF, 0xBF, 0x43, - 0xE5, 0xB0, 0x86, 0x43, 0xE5, 0xB0, 0x8F, 0x43, - // Bytes a80 - abf - 0xE5, 0xB0, 0xA2, 0x43, 0xE5, 0xB0, 0xB8, 0x43, - 0xE5, 0xB0, 0xBF, 0x43, 0xE5, 0xB1, 0xA0, 0x43, - 0xE5, 0xB1, 0xA2, 0x43, 0xE5, 0xB1, 0xA4, 0x43, - 0xE5, 0xB1, 0xA5, 0x43, 0xE5, 0xB1, 0xAE, 0x43, - 0xE5, 0xB1, 0xB1, 0x43, 0xE5, 0xB2, 0x8D, 0x43, - 0xE5, 0xB3, 0x80, 0x43, 0xE5, 0xB4, 0x99, 0x43, - 0xE5, 0xB5, 0x83, 0x43, 0xE5, 0xB5, 0x90, 0x43, - 0xE5, 0xB5, 0xAB, 0x43, 0xE5, 0xB5, 0xAE, 0x43, - // Bytes ac0 - aff - 0xE5, 0xB5, 0xBC, 0x43, 0xE5, 0xB6, 0xB2, 0x43, - 0xE5, 0xB6, 0xBA, 0x43, 0xE5, 0xB7, 0x9B, 0x43, - 0xE5, 0xB7, 0xA1, 0x43, 0xE5, 0xB7, 0xA2, 0x43, - 0xE5, 0xB7, 0xA5, 0x43, 0xE5, 0xB7, 0xA6, 0x43, - 0xE5, 0xB7, 0xB1, 0x43, 0xE5, 0xB7, 0xBD, 0x43, - 0xE5, 0xB7, 0xBE, 0x43, 0xE5, 0xB8, 0xA8, 0x43, - 0xE5, 0xB8, 0xBD, 0x43, 0xE5, 0xB9, 0xA9, 0x43, - 0xE5, 0xB9, 0xB2, 0x43, 0xE5, 0xB9, 0xB4, 0x43, - // Bytes b00 - b3f - 0xE5, 0xB9, 0xBA, 0x43, 0xE5, 0xB9, 0xBC, 0x43, - 0xE5, 0xB9, 0xBF, 0x43, 0xE5, 0xBA, 0xA6, 0x43, - 0xE5, 0xBA, 0xB0, 0x43, 0xE5, 0xBA, 0xB3, 0x43, - 0xE5, 0xBA, 0xB6, 0x43, 0xE5, 0xBB, 0x89, 0x43, - 0xE5, 0xBB, 0x8A, 0x43, 0xE5, 0xBB, 0x92, 0x43, - 0xE5, 0xBB, 0x93, 0x43, 0xE5, 0xBB, 0x99, 0x43, - 0xE5, 0xBB, 0xAC, 0x43, 0xE5, 0xBB, 0xB4, 0x43, - 0xE5, 0xBB, 0xBE, 0x43, 0xE5, 0xBC, 0x84, 0x43, - // Bytes b40 - b7f - 0xE5, 0xBC, 0x8B, 0x43, 0xE5, 0xBC, 0x93, 0x43, - 0xE5, 0xBC, 0xA2, 0x43, 0xE5, 0xBD, 0x90, 0x43, - 0xE5, 0xBD, 0x93, 0x43, 0xE5, 0xBD, 0xA1, 0x43, - 0xE5, 0xBD, 0xA2, 0x43, 0xE5, 0xBD, 0xA9, 0x43, - 0xE5, 0xBD, 0xAB, 0x43, 0xE5, 0xBD, 0xB3, 0x43, - 0xE5, 0xBE, 0x8B, 0x43, 0xE5, 0xBE, 0x8C, 0x43, - 0xE5, 0xBE, 0x97, 0x43, 0xE5, 0xBE, 0x9A, 0x43, - 0xE5, 0xBE, 0xA9, 0x43, 0xE5, 0xBE, 0xAD, 0x43, - // Bytes b80 - bbf - 0xE5, 0xBF, 0x83, 0x43, 0xE5, 0xBF, 0x8D, 0x43, - 0xE5, 0xBF, 0x97, 0x43, 0xE5, 0xBF, 0xB5, 0x43, - 0xE5, 0xBF, 0xB9, 0x43, 0xE6, 0x80, 0x92, 0x43, - 0xE6, 0x80, 0x9C, 0x43, 0xE6, 0x81, 0xB5, 0x43, - 0xE6, 0x82, 0x81, 0x43, 0xE6, 0x82, 0x94, 0x43, - 0xE6, 0x83, 0x87, 0x43, 0xE6, 0x83, 0x98, 0x43, - 0xE6, 0x83, 0xA1, 0x43, 0xE6, 0x84, 0x88, 0x43, - 0xE6, 0x85, 0x84, 0x43, 0xE6, 0x85, 0x88, 0x43, - // Bytes bc0 - bff - 0xE6, 0x85, 0x8C, 0x43, 0xE6, 0x85, 0x8E, 0x43, - 0xE6, 0x85, 0xA0, 0x43, 0xE6, 0x85, 0xA8, 0x43, - 0xE6, 0x85, 0xBA, 0x43, 0xE6, 0x86, 0x8E, 0x43, - 0xE6, 0x86, 0x90, 0x43, 0xE6, 0x86, 0xA4, 0x43, - 0xE6, 0x86, 0xAF, 0x43, 0xE6, 0x86, 0xB2, 0x43, - 0xE6, 0x87, 0x9E, 0x43, 0xE6, 0x87, 0xB2, 0x43, - 0xE6, 0x87, 0xB6, 0x43, 0xE6, 0x88, 0x80, 0x43, - 0xE6, 0x88, 0x88, 0x43, 0xE6, 0x88, 0x90, 0x43, - // Bytes c00 - c3f - 0xE6, 0x88, 0x9B, 0x43, 0xE6, 0x88, 0xAE, 0x43, - 0xE6, 0x88, 0xB4, 0x43, 0xE6, 0x88, 0xB6, 0x43, - 0xE6, 0x89, 0x8B, 0x43, 0xE6, 0x89, 0x93, 0x43, - 0xE6, 0x89, 0x9D, 0x43, 0xE6, 0x8A, 0x95, 0x43, - 0xE6, 0x8A, 0xB1, 0x43, 0xE6, 0x8B, 0x89, 0x43, - 0xE6, 0x8B, 0x8F, 0x43, 0xE6, 0x8B, 0x93, 0x43, - 0xE6, 0x8B, 0x94, 0x43, 0xE6, 0x8B, 0xBC, 0x43, - 0xE6, 0x8B, 0xBE, 0x43, 0xE6, 0x8C, 0x87, 0x43, - // Bytes c40 - c7f - 0xE6, 0x8C, 0xBD, 0x43, 0xE6, 0x8D, 0x90, 0x43, - 0xE6, 0x8D, 0x95, 0x43, 0xE6, 0x8D, 0xA8, 0x43, - 0xE6, 0x8D, 0xBB, 0x43, 0xE6, 0x8E, 0x83, 0x43, - 0xE6, 0x8E, 0xA0, 0x43, 0xE6, 0x8E, 0xA9, 0x43, - 0xE6, 0x8F, 0x84, 0x43, 0xE6, 0x8F, 0x85, 0x43, - 0xE6, 0x8F, 0xA4, 0x43, 0xE6, 0x90, 0x9C, 0x43, - 0xE6, 0x90, 0xA2, 0x43, 0xE6, 0x91, 0x92, 0x43, - 0xE6, 0x91, 0xA9, 0x43, 0xE6, 0x91, 0xB7, 0x43, - // Bytes c80 - cbf - 0xE6, 0x91, 0xBE, 0x43, 0xE6, 0x92, 0x9A, 0x43, - 0xE6, 0x92, 0x9D, 0x43, 0xE6, 0x93, 0x84, 0x43, - 0xE6, 0x94, 0xAF, 0x43, 0xE6, 0x94, 0xB4, 0x43, - 0xE6, 0x95, 0x8F, 0x43, 0xE6, 0x95, 0x96, 0x43, - 0xE6, 0x95, 0xAC, 0x43, 0xE6, 0x95, 0xB8, 0x43, - 0xE6, 0x96, 0x87, 0x43, 0xE6, 0x96, 0x97, 0x43, - 0xE6, 0x96, 0x99, 0x43, 0xE6, 0x96, 0xA4, 0x43, - 0xE6, 0x96, 0xB0, 0x43, 0xE6, 0x96, 0xB9, 0x43, - // Bytes cc0 - cff - 0xE6, 0x97, 0x85, 0x43, 0xE6, 0x97, 0xA0, 0x43, - 0xE6, 0x97, 0xA2, 0x43, 0xE6, 0x97, 0xA3, 0x43, - 0xE6, 0x97, 0xA5, 0x43, 0xE6, 0x98, 0x93, 0x43, - 0xE6, 0x98, 0xA0, 0x43, 0xE6, 0x99, 0x89, 0x43, - 0xE6, 0x99, 0xB4, 0x43, 0xE6, 0x9A, 0x88, 0x43, - 0xE6, 0x9A, 0x91, 0x43, 0xE6, 0x9A, 0x9C, 0x43, - 0xE6, 0x9A, 0xB4, 0x43, 0xE6, 0x9B, 0x86, 0x43, - 0xE6, 0x9B, 0xB0, 0x43, 0xE6, 0x9B, 0xB4, 0x43, - // Bytes d00 - d3f - 0xE6, 0x9B, 0xB8, 0x43, 0xE6, 0x9C, 0x80, 0x43, - 0xE6, 0x9C, 0x88, 0x43, 0xE6, 0x9C, 0x89, 0x43, - 0xE6, 0x9C, 0x97, 0x43, 0xE6, 0x9C, 0x9B, 0x43, - 0xE6, 0x9C, 0xA1, 0x43, 0xE6, 0x9C, 0xA8, 0x43, - 0xE6, 0x9D, 0x8E, 0x43, 0xE6, 0x9D, 0x93, 0x43, - 0xE6, 0x9D, 0x96, 0x43, 0xE6, 0x9D, 0x9E, 0x43, - 0xE6, 0x9D, 0xBB, 0x43, 0xE6, 0x9E, 0x85, 0x43, - 0xE6, 0x9E, 0x97, 0x43, 0xE6, 0x9F, 0xB3, 0x43, - // Bytes d40 - d7f - 0xE6, 0x9F, 0xBA, 0x43, 0xE6, 0xA0, 0x97, 0x43, - 0xE6, 0xA0, 0x9F, 0x43, 0xE6, 0xA0, 0xAA, 0x43, - 0xE6, 0xA1, 0x92, 0x43, 0xE6, 0xA2, 0x81, 0x43, - 0xE6, 0xA2, 0x85, 0x43, 0xE6, 0xA2, 0x8E, 0x43, - 0xE6, 0xA2, 0xA8, 0x43, 0xE6, 0xA4, 0x94, 0x43, - 0xE6, 0xA5, 0x82, 0x43, 0xE6, 0xA6, 0xA3, 0x43, - 0xE6, 0xA7, 0xAA, 0x43, 0xE6, 0xA8, 0x82, 0x43, - 0xE6, 0xA8, 0x93, 0x43, 0xE6, 0xAA, 0xA8, 0x43, - // Bytes d80 - dbf - 0xE6, 0xAB, 0x93, 0x43, 0xE6, 0xAB, 0x9B, 0x43, - 0xE6, 0xAC, 0x84, 0x43, 0xE6, 0xAC, 0xA0, 0x43, - 0xE6, 0xAC, 0xA1, 0x43, 0xE6, 0xAD, 0x94, 0x43, - 0xE6, 0xAD, 0xA2, 0x43, 0xE6, 0xAD, 0xA3, 0x43, - 0xE6, 0xAD, 0xB2, 0x43, 0xE6, 0xAD, 0xB7, 0x43, - 0xE6, 0xAD, 0xB9, 0x43, 0xE6, 0xAE, 0x9F, 0x43, - 0xE6, 0xAE, 0xAE, 0x43, 0xE6, 0xAE, 0xB3, 0x43, - 0xE6, 0xAE, 0xBA, 0x43, 0xE6, 0xAE, 0xBB, 0x43, - // Bytes dc0 - dff - 0xE6, 0xAF, 0x8B, 0x43, 0xE6, 0xAF, 0x8D, 0x43, - 0xE6, 0xAF, 0x94, 0x43, 0xE6, 0xAF, 0x9B, 0x43, - 0xE6, 0xB0, 0x8F, 0x43, 0xE6, 0xB0, 0x94, 0x43, - 0xE6, 0xB0, 0xB4, 0x43, 0xE6, 0xB1, 0x8E, 0x43, - 0xE6, 0xB1, 0xA7, 0x43, 0xE6, 0xB2, 0x88, 0x43, - 0xE6, 0xB2, 0xBF, 0x43, 0xE6, 0xB3, 0x8C, 0x43, - 0xE6, 0xB3, 0x8D, 0x43, 0xE6, 0xB3, 0xA5, 0x43, - 0xE6, 0xB3, 0xA8, 0x43, 0xE6, 0xB4, 0x96, 0x43, - // Bytes e00 - e3f - 0xE6, 0xB4, 0x9B, 0x43, 0xE6, 0xB4, 0x9E, 0x43, - 0xE6, 0xB4, 0xB4, 0x43, 0xE6, 0xB4, 0xBE, 0x43, - 0xE6, 0xB5, 0x81, 0x43, 0xE6, 0xB5, 0xA9, 0x43, - 0xE6, 0xB5, 0xAA, 0x43, 0xE6, 0xB5, 0xB7, 0x43, - 0xE6, 0xB5, 0xB8, 0x43, 0xE6, 0xB6, 0x85, 0x43, - 0xE6, 0xB7, 0x8B, 0x43, 0xE6, 0xB7, 0x9A, 0x43, - 0xE6, 0xB7, 0xAA, 0x43, 0xE6, 0xB7, 0xB9, 0x43, - 0xE6, 0xB8, 0x9A, 0x43, 0xE6, 0xB8, 0xAF, 0x43, - // Bytes e40 - e7f - 0xE6, 0xB9, 0xAE, 0x43, 0xE6, 0xBA, 0x80, 0x43, - 0xE6, 0xBA, 0x9C, 0x43, 0xE6, 0xBA, 0xBA, 0x43, - 0xE6, 0xBB, 0x87, 0x43, 0xE6, 0xBB, 0x8B, 0x43, - 0xE6, 0xBB, 0x91, 0x43, 0xE6, 0xBB, 0x9B, 0x43, - 0xE6, 0xBC, 0x8F, 0x43, 0xE6, 0xBC, 0x94, 0x43, - 0xE6, 0xBC, 0xA2, 0x43, 0xE6, 0xBC, 0xA3, 0x43, - 0xE6, 0xBD, 0xAE, 0x43, 0xE6, 0xBF, 0x86, 0x43, - 0xE6, 0xBF, 0xAB, 0x43, 0xE6, 0xBF, 0xBE, 0x43, - // Bytes e80 - ebf - 0xE7, 0x80, 0x9B, 0x43, 0xE7, 0x80, 0x9E, 0x43, - 0xE7, 0x80, 0xB9, 0x43, 0xE7, 0x81, 0x8A, 0x43, - 0xE7, 0x81, 0xAB, 0x43, 0xE7, 0x81, 0xB0, 0x43, - 0xE7, 0x81, 0xB7, 0x43, 0xE7, 0x81, 0xBD, 0x43, - 0xE7, 0x82, 0x99, 0x43, 0xE7, 0x82, 0xAD, 0x43, - 0xE7, 0x83, 0x88, 0x43, 0xE7, 0x83, 0x99, 0x43, - 0xE7, 0x84, 0xA1, 0x43, 0xE7, 0x85, 0x85, 0x43, - 0xE7, 0x85, 0x89, 0x43, 0xE7, 0x85, 0xAE, 0x43, - // Bytes ec0 - eff - 0xE7, 0x86, 0x9C, 0x43, 0xE7, 0x87, 0x8E, 0x43, - 0xE7, 0x87, 0x90, 0x43, 0xE7, 0x88, 0x90, 0x43, - 0xE7, 0x88, 0x9B, 0x43, 0xE7, 0x88, 0xA8, 0x43, - 0xE7, 0x88, 0xAA, 0x43, 0xE7, 0x88, 0xAB, 0x43, - 0xE7, 0x88, 0xB5, 0x43, 0xE7, 0x88, 0xB6, 0x43, - 0xE7, 0x88, 0xBB, 0x43, 0xE7, 0x88, 0xBF, 0x43, - 0xE7, 0x89, 0x87, 0x43, 0xE7, 0x89, 0x90, 0x43, - 0xE7, 0x89, 0x99, 0x43, 0xE7, 0x89, 0x9B, 0x43, - // Bytes f00 - f3f - 0xE7, 0x89, 0xA2, 0x43, 0xE7, 0x89, 0xB9, 0x43, - 0xE7, 0x8A, 0x80, 0x43, 0xE7, 0x8A, 0x95, 0x43, - 0xE7, 0x8A, 0xAC, 0x43, 0xE7, 0x8A, 0xAF, 0x43, - 0xE7, 0x8B, 0x80, 0x43, 0xE7, 0x8B, 0xBC, 0x43, - 0xE7, 0x8C, 0xAA, 0x43, 0xE7, 0x8D, 0xB5, 0x43, - 0xE7, 0x8D, 0xBA, 0x43, 0xE7, 0x8E, 0x84, 0x43, - 0xE7, 0x8E, 0x87, 0x43, 0xE7, 0x8E, 0x89, 0x43, - 0xE7, 0x8E, 0x8B, 0x43, 0xE7, 0x8E, 0xA5, 0x43, - // Bytes f40 - f7f - 0xE7, 0x8E, 0xB2, 0x43, 0xE7, 0x8F, 0x9E, 0x43, - 0xE7, 0x90, 0x86, 0x43, 0xE7, 0x90, 0x89, 0x43, - 0xE7, 0x90, 0xA2, 0x43, 0xE7, 0x91, 0x87, 0x43, - 0xE7, 0x91, 0x9C, 0x43, 0xE7, 0x91, 0xA9, 0x43, - 0xE7, 0x91, 0xB1, 0x43, 0xE7, 0x92, 0x85, 0x43, - 0xE7, 0x92, 0x89, 0x43, 0xE7, 0x92, 0x98, 0x43, - 0xE7, 0x93, 0x8A, 0x43, 0xE7, 0x93, 0x9C, 0x43, - 0xE7, 0x93, 0xA6, 0x43, 0xE7, 0x94, 0x86, 0x43, - // Bytes f80 - fbf - 0xE7, 0x94, 0x98, 0x43, 0xE7, 0x94, 0x9F, 0x43, - 0xE7, 0x94, 0xA4, 0x43, 0xE7, 0x94, 0xA8, 0x43, - 0xE7, 0x94, 0xB0, 0x43, 0xE7, 0x94, 0xB2, 0x43, - 0xE7, 0x94, 0xB3, 0x43, 0xE7, 0x94, 0xB7, 0x43, - 0xE7, 0x94, 0xBB, 0x43, 0xE7, 0x94, 0xBE, 0x43, - 0xE7, 0x95, 0x99, 0x43, 0xE7, 0x95, 0xA5, 0x43, - 0xE7, 0x95, 0xB0, 0x43, 0xE7, 0x96, 0x8B, 0x43, - 0xE7, 0x96, 0x92, 0x43, 0xE7, 0x97, 0xA2, 0x43, - // Bytes fc0 - fff - 0xE7, 0x98, 0x90, 0x43, 0xE7, 0x98, 0x9D, 0x43, - 0xE7, 0x98, 0x9F, 0x43, 0xE7, 0x99, 0x82, 0x43, - 0xE7, 0x99, 0xA9, 0x43, 0xE7, 0x99, 0xB6, 0x43, - 0xE7, 0x99, 0xBD, 0x43, 0xE7, 0x9A, 0xAE, 0x43, - 0xE7, 0x9A, 0xBF, 0x43, 0xE7, 0x9B, 0x8A, 0x43, - 0xE7, 0x9B, 0x9B, 0x43, 0xE7, 0x9B, 0xA3, 0x43, - 0xE7, 0x9B, 0xA7, 0x43, 0xE7, 0x9B, 0xAE, 0x43, - 0xE7, 0x9B, 0xB4, 0x43, 0xE7, 0x9C, 0x81, 0x43, - // Bytes 1000 - 103f - 0xE7, 0x9C, 0x9E, 0x43, 0xE7, 0x9C, 0x9F, 0x43, - 0xE7, 0x9D, 0x80, 0x43, 0xE7, 0x9D, 0x8A, 0x43, - 0xE7, 0x9E, 0x8B, 0x43, 0xE7, 0x9E, 0xA7, 0x43, - 0xE7, 0x9F, 0x9B, 0x43, 0xE7, 0x9F, 0xA2, 0x43, - 0xE7, 0x9F, 0xB3, 0x43, 0xE7, 0xA1, 0x8E, 0x43, - 0xE7, 0xA1, 0xAB, 0x43, 0xE7, 0xA2, 0x8C, 0x43, - 0xE7, 0xA2, 0x91, 0x43, 0xE7, 0xA3, 0x8A, 0x43, - 0xE7, 0xA3, 0x8C, 0x43, 0xE7, 0xA3, 0xBB, 0x43, - // Bytes 1040 - 107f - 0xE7, 0xA4, 0xAA, 0x43, 0xE7, 0xA4, 0xBA, 0x43, - 0xE7, 0xA4, 0xBC, 0x43, 0xE7, 0xA4, 0xBE, 0x43, - 0xE7, 0xA5, 0x88, 0x43, 0xE7, 0xA5, 0x89, 0x43, - 0xE7, 0xA5, 0x90, 0x43, 0xE7, 0xA5, 0x96, 0x43, - 0xE7, 0xA5, 0x9D, 0x43, 0xE7, 0xA5, 0x9E, 0x43, - 0xE7, 0xA5, 0xA5, 0x43, 0xE7, 0xA5, 0xBF, 0x43, - 0xE7, 0xA6, 0x81, 0x43, 0xE7, 0xA6, 0x8D, 0x43, - 0xE7, 0xA6, 0x8E, 0x43, 0xE7, 0xA6, 0x8F, 0x43, - // Bytes 1080 - 10bf - 0xE7, 0xA6, 0xAE, 0x43, 0xE7, 0xA6, 0xB8, 0x43, - 0xE7, 0xA6, 0xBE, 0x43, 0xE7, 0xA7, 0x8A, 0x43, - 0xE7, 0xA7, 0x98, 0x43, 0xE7, 0xA7, 0xAB, 0x43, - 0xE7, 0xA8, 0x9C, 0x43, 0xE7, 0xA9, 0x80, 0x43, - 0xE7, 0xA9, 0x8A, 0x43, 0xE7, 0xA9, 0x8F, 0x43, - 0xE7, 0xA9, 0xB4, 0x43, 0xE7, 0xA9, 0xBA, 0x43, - 0xE7, 0xAA, 0x81, 0x43, 0xE7, 0xAA, 0xB1, 0x43, - 0xE7, 0xAB, 0x8B, 0x43, 0xE7, 0xAB, 0xAE, 0x43, - // Bytes 10c0 - 10ff - 0xE7, 0xAB, 0xB9, 0x43, 0xE7, 0xAC, 0xA0, 0x43, - 0xE7, 0xAE, 0x8F, 0x43, 0xE7, 0xAF, 0x80, 0x43, - 0xE7, 0xAF, 0x86, 0x43, 0xE7, 0xAF, 0x89, 0x43, - 0xE7, 0xB0, 0xBE, 0x43, 0xE7, 0xB1, 0xA0, 0x43, - 0xE7, 0xB1, 0xB3, 0x43, 0xE7, 0xB1, 0xBB, 0x43, - 0xE7, 0xB2, 0x92, 0x43, 0xE7, 0xB2, 0xBE, 0x43, - 0xE7, 0xB3, 0x92, 0x43, 0xE7, 0xB3, 0x96, 0x43, - 0xE7, 0xB3, 0xA3, 0x43, 0xE7, 0xB3, 0xA7, 0x43, - // Bytes 1100 - 113f - 0xE7, 0xB3, 0xA8, 0x43, 0xE7, 0xB3, 0xB8, 0x43, - 0xE7, 0xB4, 0x80, 0x43, 0xE7, 0xB4, 0x90, 0x43, - 0xE7, 0xB4, 0xA2, 0x43, 0xE7, 0xB4, 0xAF, 0x43, - 0xE7, 0xB5, 0x82, 0x43, 0xE7, 0xB5, 0x9B, 0x43, - 0xE7, 0xB5, 0xA3, 0x43, 0xE7, 0xB6, 0xA0, 0x43, - 0xE7, 0xB6, 0xBE, 0x43, 0xE7, 0xB7, 0x87, 0x43, - 0xE7, 0xB7, 0xB4, 0x43, 0xE7, 0xB8, 0x82, 0x43, - 0xE7, 0xB8, 0x89, 0x43, 0xE7, 0xB8, 0xB7, 0x43, - // Bytes 1140 - 117f - 0xE7, 0xB9, 0x81, 0x43, 0xE7, 0xB9, 0x85, 0x43, - 0xE7, 0xBC, 0xB6, 0x43, 0xE7, 0xBC, 0xBE, 0x43, - 0xE7, 0xBD, 0x91, 0x43, 0xE7, 0xBD, 0xB2, 0x43, - 0xE7, 0xBD, 0xB9, 0x43, 0xE7, 0xBD, 0xBA, 0x43, - 0xE7, 0xBE, 0x85, 0x43, 0xE7, 0xBE, 0x8A, 0x43, - 0xE7, 0xBE, 0x95, 0x43, 0xE7, 0xBE, 0x9A, 0x43, - 0xE7, 0xBE, 0xBD, 0x43, 0xE7, 0xBF, 0xBA, 0x43, - 0xE8, 0x80, 0x81, 0x43, 0xE8, 0x80, 0x85, 0x43, - // Bytes 1180 - 11bf - 0xE8, 0x80, 0x8C, 0x43, 0xE8, 0x80, 0x92, 0x43, - 0xE8, 0x80, 0xB3, 0x43, 0xE8, 0x81, 0x86, 0x43, - 0xE8, 0x81, 0xA0, 0x43, 0xE8, 0x81, 0xAF, 0x43, - 0xE8, 0x81, 0xB0, 0x43, 0xE8, 0x81, 0xBE, 0x43, - 0xE8, 0x81, 0xBF, 0x43, 0xE8, 0x82, 0x89, 0x43, - 0xE8, 0x82, 0x8B, 0x43, 0xE8, 0x82, 0xAD, 0x43, - 0xE8, 0x82, 0xB2, 0x43, 0xE8, 0x84, 0x83, 0x43, - 0xE8, 0x84, 0xBE, 0x43, 0xE8, 0x87, 0x98, 0x43, - // Bytes 11c0 - 11ff - 0xE8, 0x87, 0xA3, 0x43, 0xE8, 0x87, 0xA8, 0x43, - 0xE8, 0x87, 0xAA, 0x43, 0xE8, 0x87, 0xAD, 0x43, - 0xE8, 0x87, 0xB3, 0x43, 0xE8, 0x87, 0xBC, 0x43, - 0xE8, 0x88, 0x81, 0x43, 0xE8, 0x88, 0x84, 0x43, - 0xE8, 0x88, 0x8C, 0x43, 0xE8, 0x88, 0x98, 0x43, - 0xE8, 0x88, 0x9B, 0x43, 0xE8, 0x88, 0x9F, 0x43, - 0xE8, 0x89, 0xAE, 0x43, 0xE8, 0x89, 0xAF, 0x43, - 0xE8, 0x89, 0xB2, 0x43, 0xE8, 0x89, 0xB8, 0x43, - // Bytes 1200 - 123f - 0xE8, 0x89, 0xB9, 0x43, 0xE8, 0x8A, 0x8B, 0x43, - 0xE8, 0x8A, 0x91, 0x43, 0xE8, 0x8A, 0x9D, 0x43, - 0xE8, 0x8A, 0xB1, 0x43, 0xE8, 0x8A, 0xB3, 0x43, - 0xE8, 0x8A, 0xBD, 0x43, 0xE8, 0x8B, 0xA5, 0x43, - 0xE8, 0x8B, 0xA6, 0x43, 0xE8, 0x8C, 0x9D, 0x43, - 0xE8, 0x8C, 0xA3, 0x43, 0xE8, 0x8C, 0xB6, 0x43, - 0xE8, 0x8D, 0x92, 0x43, 0xE8, 0x8D, 0x93, 0x43, - 0xE8, 0x8D, 0xA3, 0x43, 0xE8, 0x8E, 0xAD, 0x43, - // Bytes 1240 - 127f - 0xE8, 0x8E, 0xBD, 0x43, 0xE8, 0x8F, 0x89, 0x43, - 0xE8, 0x8F, 0x8A, 0x43, 0xE8, 0x8F, 0x8C, 0x43, - 0xE8, 0x8F, 0x9C, 0x43, 0xE8, 0x8F, 0xA7, 0x43, - 0xE8, 0x8F, 0xAF, 0x43, 0xE8, 0x8F, 0xB1, 0x43, - 0xE8, 0x90, 0xBD, 0x43, 0xE8, 0x91, 0x89, 0x43, - 0xE8, 0x91, 0x97, 0x43, 0xE8, 0x93, 0xAE, 0x43, - 0xE8, 0x93, 0xB1, 0x43, 0xE8, 0x93, 0xB3, 0x43, - 0xE8, 0x93, 0xBC, 0x43, 0xE8, 0x94, 0x96, 0x43, - // Bytes 1280 - 12bf - 0xE8, 0x95, 0xA4, 0x43, 0xE8, 0x97, 0x8D, 0x43, - 0xE8, 0x97, 0xBA, 0x43, 0xE8, 0x98, 0x86, 0x43, - 0xE8, 0x98, 0x92, 0x43, 0xE8, 0x98, 0xAD, 0x43, - 0xE8, 0x98, 0xBF, 0x43, 0xE8, 0x99, 0x8D, 0x43, - 0xE8, 0x99, 0x90, 0x43, 0xE8, 0x99, 0x9C, 0x43, - 0xE8, 0x99, 0xA7, 0x43, 0xE8, 0x99, 0xA9, 0x43, - 0xE8, 0x99, 0xAB, 0x43, 0xE8, 0x9A, 0x88, 0x43, - 0xE8, 0x9A, 0xA9, 0x43, 0xE8, 0x9B, 0xA2, 0x43, - // Bytes 12c0 - 12ff - 0xE8, 0x9C, 0x8E, 0x43, 0xE8, 0x9C, 0xA8, 0x43, - 0xE8, 0x9D, 0xAB, 0x43, 0xE8, 0x9D, 0xB9, 0x43, - 0xE8, 0x9E, 0x86, 0x43, 0xE8, 0x9E, 0xBA, 0x43, - 0xE8, 0x9F, 0xA1, 0x43, 0xE8, 0xA0, 0x81, 0x43, - 0xE8, 0xA0, 0x9F, 0x43, 0xE8, 0xA1, 0x80, 0x43, - 0xE8, 0xA1, 0x8C, 0x43, 0xE8, 0xA1, 0xA0, 0x43, - 0xE8, 0xA1, 0xA3, 0x43, 0xE8, 0xA3, 0x82, 0x43, - 0xE8, 0xA3, 0x8F, 0x43, 0xE8, 0xA3, 0x97, 0x43, - // Bytes 1300 - 133f - 0xE8, 0xA3, 0x9E, 0x43, 0xE8, 0xA3, 0xA1, 0x43, - 0xE8, 0xA3, 0xB8, 0x43, 0xE8, 0xA3, 0xBA, 0x43, - 0xE8, 0xA4, 0x90, 0x43, 0xE8, 0xA5, 0x81, 0x43, - 0xE8, 0xA5, 0xA4, 0x43, 0xE8, 0xA5, 0xBE, 0x43, - 0xE8, 0xA6, 0x86, 0x43, 0xE8, 0xA6, 0x8B, 0x43, - 0xE8, 0xA6, 0x96, 0x43, 0xE8, 0xA7, 0x92, 0x43, - 0xE8, 0xA7, 0xA3, 0x43, 0xE8, 0xA8, 0x80, 0x43, - 0xE8, 0xAA, 0xA0, 0x43, 0xE8, 0xAA, 0xAA, 0x43, - // Bytes 1340 - 137f - 0xE8, 0xAA, 0xBF, 0x43, 0xE8, 0xAB, 0x8B, 0x43, - 0xE8, 0xAB, 0x92, 0x43, 0xE8, 0xAB, 0x96, 0x43, - 0xE8, 0xAB, 0xAD, 0x43, 0xE8, 0xAB, 0xB8, 0x43, - 0xE8, 0xAB, 0xBE, 0x43, 0xE8, 0xAC, 0x81, 0x43, - 0xE8, 0xAC, 0xB9, 0x43, 0xE8, 0xAD, 0x98, 0x43, - 0xE8, 0xAE, 0x80, 0x43, 0xE8, 0xAE, 0x8A, 0x43, - 0xE8, 0xB0, 0xB7, 0x43, 0xE8, 0xB1, 0x86, 0x43, - 0xE8, 0xB1, 0x88, 0x43, 0xE8, 0xB1, 0x95, 0x43, - // Bytes 1380 - 13bf - 0xE8, 0xB1, 0xB8, 0x43, 0xE8, 0xB2, 0x9D, 0x43, - 0xE8, 0xB2, 0xA1, 0x43, 0xE8, 0xB2, 0xA9, 0x43, - 0xE8, 0xB2, 0xAB, 0x43, 0xE8, 0xB3, 0x81, 0x43, - 0xE8, 0xB3, 0x82, 0x43, 0xE8, 0xB3, 0x87, 0x43, - 0xE8, 0xB3, 0x88, 0x43, 0xE8, 0xB3, 0x93, 0x43, - 0xE8, 0xB4, 0x88, 0x43, 0xE8, 0xB4, 0x9B, 0x43, - 0xE8, 0xB5, 0xA4, 0x43, 0xE8, 0xB5, 0xB0, 0x43, - 0xE8, 0xB5, 0xB7, 0x43, 0xE8, 0xB6, 0xB3, 0x43, - // Bytes 13c0 - 13ff - 0xE8, 0xB6, 0xBC, 0x43, 0xE8, 0xB7, 0x8B, 0x43, - 0xE8, 0xB7, 0xAF, 0x43, 0xE8, 0xB7, 0xB0, 0x43, - 0xE8, 0xBA, 0xAB, 0x43, 0xE8, 0xBB, 0x8A, 0x43, - 0xE8, 0xBB, 0x94, 0x43, 0xE8, 0xBC, 0xA6, 0x43, - 0xE8, 0xBC, 0xAA, 0x43, 0xE8, 0xBC, 0xB8, 0x43, - 0xE8, 0xBC, 0xBB, 0x43, 0xE8, 0xBD, 0xA2, 0x43, - 0xE8, 0xBE, 0x9B, 0x43, 0xE8, 0xBE, 0x9E, 0x43, - 0xE8, 0xBE, 0xB0, 0x43, 0xE8, 0xBE, 0xB5, 0x43, - // Bytes 1400 - 143f - 0xE8, 0xBE, 0xB6, 0x43, 0xE9, 0x80, 0xA3, 0x43, - 0xE9, 0x80, 0xB8, 0x43, 0xE9, 0x81, 0x8A, 0x43, - 0xE9, 0x81, 0xA9, 0x43, 0xE9, 0x81, 0xB2, 0x43, - 0xE9, 0x81, 0xBC, 0x43, 0xE9, 0x82, 0x8F, 0x43, - 0xE9, 0x82, 0x91, 0x43, 0xE9, 0x82, 0x94, 0x43, - 0xE9, 0x83, 0x8E, 0x43, 0xE9, 0x83, 0x9E, 0x43, - 0xE9, 0x83, 0xB1, 0x43, 0xE9, 0x83, 0xBD, 0x43, - 0xE9, 0x84, 0x91, 0x43, 0xE9, 0x84, 0x9B, 0x43, - // Bytes 1440 - 147f - 0xE9, 0x85, 0x89, 0x43, 0xE9, 0x85, 0x8D, 0x43, - 0xE9, 0x85, 0xAA, 0x43, 0xE9, 0x86, 0x99, 0x43, - 0xE9, 0x86, 0xB4, 0x43, 0xE9, 0x87, 0x86, 0x43, - 0xE9, 0x87, 0x8C, 0x43, 0xE9, 0x87, 0x8F, 0x43, - 0xE9, 0x87, 0x91, 0x43, 0xE9, 0x88, 0xB4, 0x43, - 0xE9, 0x88, 0xB8, 0x43, 0xE9, 0x89, 0xB6, 0x43, - 0xE9, 0x89, 0xBC, 0x43, 0xE9, 0x8B, 0x97, 0x43, - 0xE9, 0x8B, 0x98, 0x43, 0xE9, 0x8C, 0x84, 0x43, - // Bytes 1480 - 14bf - 0xE9, 0x8D, 0x8A, 0x43, 0xE9, 0x8F, 0xB9, 0x43, - 0xE9, 0x90, 0x95, 0x43, 0xE9, 0x95, 0xB7, 0x43, - 0xE9, 0x96, 0x80, 0x43, 0xE9, 0x96, 0x8B, 0x43, - 0xE9, 0x96, 0xAD, 0x43, 0xE9, 0x96, 0xB7, 0x43, - 0xE9, 0x98, 0x9C, 0x43, 0xE9, 0x98, 0xAE, 0x43, - 0xE9, 0x99, 0x8B, 0x43, 0xE9, 0x99, 0x8D, 0x43, - 0xE9, 0x99, 0xB5, 0x43, 0xE9, 0x99, 0xB8, 0x43, - 0xE9, 0x99, 0xBC, 0x43, 0xE9, 0x9A, 0x86, 0x43, - // Bytes 14c0 - 14ff - 0xE9, 0x9A, 0xA3, 0x43, 0xE9, 0x9A, 0xB6, 0x43, - 0xE9, 0x9A, 0xB7, 0x43, 0xE9, 0x9A, 0xB8, 0x43, - 0xE9, 0x9A, 0xB9, 0x43, 0xE9, 0x9B, 0x83, 0x43, - 0xE9, 0x9B, 0xA2, 0x43, 0xE9, 0x9B, 0xA3, 0x43, - 0xE9, 0x9B, 0xA8, 0x43, 0xE9, 0x9B, 0xB6, 0x43, - 0xE9, 0x9B, 0xB7, 0x43, 0xE9, 0x9C, 0xA3, 0x43, - 0xE9, 0x9C, 0xB2, 0x43, 0xE9, 0x9D, 0x88, 0x43, - 0xE9, 0x9D, 0x91, 0x43, 0xE9, 0x9D, 0x96, 0x43, - // Bytes 1500 - 153f - 0xE9, 0x9D, 0x9E, 0x43, 0xE9, 0x9D, 0xA2, 0x43, - 0xE9, 0x9D, 0xA9, 0x43, 0xE9, 0x9F, 0x8B, 0x43, - 0xE9, 0x9F, 0x9B, 0x43, 0xE9, 0x9F, 0xA0, 0x43, - 0xE9, 0x9F, 0xAD, 0x43, 0xE9, 0x9F, 0xB3, 0x43, - 0xE9, 0x9F, 0xBF, 0x43, 0xE9, 0xA0, 0x81, 0x43, - 0xE9, 0xA0, 0x85, 0x43, 0xE9, 0xA0, 0x8B, 0x43, - 0xE9, 0xA0, 0x98, 0x43, 0xE9, 0xA0, 0xA9, 0x43, - 0xE9, 0xA0, 0xBB, 0x43, 0xE9, 0xA1, 0x9E, 0x43, - // Bytes 1540 - 157f - 0xE9, 0xA2, 0xA8, 0x43, 0xE9, 0xA3, 0x9B, 0x43, - 0xE9, 0xA3, 0x9F, 0x43, 0xE9, 0xA3, 0xA2, 0x43, - 0xE9, 0xA3, 0xAF, 0x43, 0xE9, 0xA3, 0xBC, 0x43, - 0xE9, 0xA4, 0xA8, 0x43, 0xE9, 0xA4, 0xA9, 0x43, - 0xE9, 0xA6, 0x96, 0x43, 0xE9, 0xA6, 0x99, 0x43, - 0xE9, 0xA6, 0xA7, 0x43, 0xE9, 0xA6, 0xAC, 0x43, - 0xE9, 0xA7, 0x82, 0x43, 0xE9, 0xA7, 0xB1, 0x43, - 0xE9, 0xA7, 0xBE, 0x43, 0xE9, 0xA9, 0xAA, 0x43, - // Bytes 1580 - 15bf - 0xE9, 0xAA, 0xA8, 0x43, 0xE9, 0xAB, 0x98, 0x43, - 0xE9, 0xAB, 0x9F, 0x43, 0xE9, 0xAC, 0x92, 0x43, - 0xE9, 0xAC, 0xA5, 0x43, 0xE9, 0xAC, 0xAF, 0x43, - 0xE9, 0xAC, 0xB2, 0x43, 0xE9, 0xAC, 0xBC, 0x43, - 0xE9, 0xAD, 0x9A, 0x43, 0xE9, 0xAD, 0xAF, 0x43, - 0xE9, 0xB1, 0x80, 0x43, 0xE9, 0xB1, 0x97, 0x43, - 0xE9, 0xB3, 0xA5, 0x43, 0xE9, 0xB3, 0xBD, 0x43, - 0xE9, 0xB5, 0xA7, 0x43, 0xE9, 0xB6, 0xB4, 0x43, - // Bytes 15c0 - 15ff - 0xE9, 0xB7, 0xBA, 0x43, 0xE9, 0xB8, 0x9E, 0x43, - 0xE9, 0xB9, 0xB5, 0x43, 0xE9, 0xB9, 0xBF, 0x43, - 0xE9, 0xBA, 0x97, 0x43, 0xE9, 0xBA, 0x9F, 0x43, - 0xE9, 0xBA, 0xA5, 0x43, 0xE9, 0xBA, 0xBB, 0x43, - 0xE9, 0xBB, 0x83, 0x43, 0xE9, 0xBB, 0x8D, 0x43, - 0xE9, 0xBB, 0x8E, 0x43, 0xE9, 0xBB, 0x91, 0x43, - 0xE9, 0xBB, 0xB9, 0x43, 0xE9, 0xBB, 0xBD, 0x43, - 0xE9, 0xBB, 0xBE, 0x43, 0xE9, 0xBC, 0x85, 0x43, - // Bytes 1600 - 163f - 0xE9, 0xBC, 0x8E, 0x43, 0xE9, 0xBC, 0x8F, 0x43, - 0xE9, 0xBC, 0x93, 0x43, 0xE9, 0xBC, 0x96, 0x43, - 0xE9, 0xBC, 0xA0, 0x43, 0xE9, 0xBC, 0xBB, 0x43, - 0xE9, 0xBD, 0x83, 0x43, 0xE9, 0xBD, 0x8A, 0x43, - 0xE9, 0xBD, 0x92, 0x43, 0xE9, 0xBE, 0x8D, 0x43, - 0xE9, 0xBE, 0x8E, 0x43, 0xE9, 0xBE, 0x9C, 0x43, - 0xE9, 0xBE, 0x9F, 0x43, 0xE9, 0xBE, 0xA0, 0x43, - 0xEA, 0x9C, 0xA7, 0x43, 0xEA, 0x9D, 0xAF, 0x43, - // Bytes 1640 - 167f - 0xEA, 0xAC, 0xB7, 0x43, 0xEA, 0xAD, 0x92, 0x44, - 0xF0, 0xA0, 0x84, 0xA2, 0x44, 0xF0, 0xA0, 0x94, - 0x9C, 0x44, 0xF0, 0xA0, 0x94, 0xA5, 0x44, 0xF0, - 0xA0, 0x95, 0x8B, 0x44, 0xF0, 0xA0, 0x98, 0xBA, - 0x44, 0xF0, 0xA0, 0xA0, 0x84, 0x44, 0xF0, 0xA0, - 0xA3, 0x9E, 0x44, 0xF0, 0xA0, 0xA8, 0xAC, 0x44, - 0xF0, 0xA0, 0xAD, 0xA3, 0x44, 0xF0, 0xA1, 0x93, - 0xA4, 0x44, 0xF0, 0xA1, 0x9A, 0xA8, 0x44, 0xF0, - // Bytes 1680 - 16bf - 0xA1, 0x9B, 0xAA, 0x44, 0xF0, 0xA1, 0xA7, 0x88, - 0x44, 0xF0, 0xA1, 0xAC, 0x98, 0x44, 0xF0, 0xA1, - 0xB4, 0x8B, 0x44, 0xF0, 0xA1, 0xB7, 0xA4, 0x44, - 0xF0, 0xA1, 0xB7, 0xA6, 0x44, 0xF0, 0xA2, 0x86, - 0x83, 0x44, 0xF0, 0xA2, 0x86, 0x9F, 0x44, 0xF0, - 0xA2, 0x8C, 0xB1, 0x44, 0xF0, 0xA2, 0x9B, 0x94, - 0x44, 0xF0, 0xA2, 0xA1, 0x84, 0x44, 0xF0, 0xA2, - 0xA1, 0x8A, 0x44, 0xF0, 0xA2, 0xAC, 0x8C, 0x44, - // Bytes 16c0 - 16ff - 0xF0, 0xA2, 0xAF, 0xB1, 0x44, 0xF0, 0xA3, 0x80, - 0x8A, 0x44, 0xF0, 0xA3, 0x8A, 0xB8, 0x44, 0xF0, - 0xA3, 0x8D, 0x9F, 0x44, 0xF0, 0xA3, 0x8E, 0x93, - 0x44, 0xF0, 0xA3, 0x8E, 0x9C, 0x44, 0xF0, 0xA3, - 0x8F, 0x83, 0x44, 0xF0, 0xA3, 0x8F, 0x95, 0x44, - 0xF0, 0xA3, 0x91, 0xAD, 0x44, 0xF0, 0xA3, 0x9A, - 0xA3, 0x44, 0xF0, 0xA3, 0xA2, 0xA7, 0x44, 0xF0, - 0xA3, 0xAA, 0x8D, 0x44, 0xF0, 0xA3, 0xAB, 0xBA, - // Bytes 1700 - 173f - 0x44, 0xF0, 0xA3, 0xB2, 0xBC, 0x44, 0xF0, 0xA3, - 0xB4, 0x9E, 0x44, 0xF0, 0xA3, 0xBB, 0x91, 0x44, - 0xF0, 0xA3, 0xBD, 0x9E, 0x44, 0xF0, 0xA3, 0xBE, - 0x8E, 0x44, 0xF0, 0xA4, 0x89, 0xA3, 0x44, 0xF0, - 0xA4, 0x8B, 0xAE, 0x44, 0xF0, 0xA4, 0x8E, 0xAB, - 0x44, 0xF0, 0xA4, 0x98, 0x88, 0x44, 0xF0, 0xA4, - 0x9C, 0xB5, 0x44, 0xF0, 0xA4, 0xA0, 0x94, 0x44, - 0xF0, 0xA4, 0xB0, 0xB6, 0x44, 0xF0, 0xA4, 0xB2, - // Bytes 1740 - 177f - 0x92, 0x44, 0xF0, 0xA4, 0xBE, 0xA1, 0x44, 0xF0, - 0xA4, 0xBE, 0xB8, 0x44, 0xF0, 0xA5, 0x81, 0x84, - 0x44, 0xF0, 0xA5, 0x83, 0xB2, 0x44, 0xF0, 0xA5, - 0x83, 0xB3, 0x44, 0xF0, 0xA5, 0x84, 0x99, 0x44, - 0xF0, 0xA5, 0x84, 0xB3, 0x44, 0xF0, 0xA5, 0x89, - 0x89, 0x44, 0xF0, 0xA5, 0x90, 0x9D, 0x44, 0xF0, - 0xA5, 0x98, 0xA6, 0x44, 0xF0, 0xA5, 0x9A, 0x9A, - 0x44, 0xF0, 0xA5, 0x9B, 0x85, 0x44, 0xF0, 0xA5, - // Bytes 1780 - 17bf - 0xA5, 0xBC, 0x44, 0xF0, 0xA5, 0xAA, 0xA7, 0x44, - 0xF0, 0xA5, 0xAE, 0xAB, 0x44, 0xF0, 0xA5, 0xB2, - 0x80, 0x44, 0xF0, 0xA5, 0xB3, 0x90, 0x44, 0xF0, - 0xA5, 0xBE, 0x86, 0x44, 0xF0, 0xA6, 0x87, 0x9A, - 0x44, 0xF0, 0xA6, 0x88, 0xA8, 0x44, 0xF0, 0xA6, - 0x89, 0x87, 0x44, 0xF0, 0xA6, 0x8B, 0x99, 0x44, - 0xF0, 0xA6, 0x8C, 0xBE, 0x44, 0xF0, 0xA6, 0x93, - 0x9A, 0x44, 0xF0, 0xA6, 0x94, 0xA3, 0x44, 0xF0, - // Bytes 17c0 - 17ff - 0xA6, 0x96, 0xA8, 0x44, 0xF0, 0xA6, 0x9E, 0xA7, - 0x44, 0xF0, 0xA6, 0x9E, 0xB5, 0x44, 0xF0, 0xA6, - 0xAC, 0xBC, 0x44, 0xF0, 0xA6, 0xB0, 0xB6, 0x44, - 0xF0, 0xA6, 0xB3, 0x95, 0x44, 0xF0, 0xA6, 0xB5, - 0xAB, 0x44, 0xF0, 0xA6, 0xBC, 0xAC, 0x44, 0xF0, - 0xA6, 0xBE, 0xB1, 0x44, 0xF0, 0xA7, 0x83, 0x92, - 0x44, 0xF0, 0xA7, 0x8F, 0x8A, 0x44, 0xF0, 0xA7, - 0x99, 0xA7, 0x44, 0xF0, 0xA7, 0xA2, 0xAE, 0x44, - // Bytes 1800 - 183f - 0xF0, 0xA7, 0xA5, 0xA6, 0x44, 0xF0, 0xA7, 0xB2, - 0xA8, 0x44, 0xF0, 0xA7, 0xBB, 0x93, 0x44, 0xF0, - 0xA7, 0xBC, 0xAF, 0x44, 0xF0, 0xA8, 0x97, 0x92, - 0x44, 0xF0, 0xA8, 0x97, 0xAD, 0x44, 0xF0, 0xA8, - 0x9C, 0xAE, 0x44, 0xF0, 0xA8, 0xAF, 0xBA, 0x44, - 0xF0, 0xA8, 0xB5, 0xB7, 0x44, 0xF0, 0xA9, 0x85, - 0x85, 0x44, 0xF0, 0xA9, 0x87, 0x9F, 0x44, 0xF0, - 0xA9, 0x88, 0x9A, 0x44, 0xF0, 0xA9, 0x90, 0x8A, - // Bytes 1840 - 187f - 0x44, 0xF0, 0xA9, 0x92, 0x96, 0x44, 0xF0, 0xA9, - 0x96, 0xB6, 0x44, 0xF0, 0xA9, 0xAC, 0xB0, 0x44, - 0xF0, 0xAA, 0x83, 0x8E, 0x44, 0xF0, 0xAA, 0x84, - 0x85, 0x44, 0xF0, 0xAA, 0x88, 0x8E, 0x44, 0xF0, - 0xAA, 0x8A, 0x91, 0x44, 0xF0, 0xAA, 0x8E, 0x92, - 0x44, 0xF0, 0xAA, 0x98, 0x80, 0x42, 0x21, 0x21, - 0x42, 0x21, 0x3F, 0x42, 0x2E, 0x2E, 0x42, 0x30, - 0x2C, 0x42, 0x30, 0x2E, 0x42, 0x31, 0x2C, 0x42, - // Bytes 1880 - 18bf - 0x31, 0x2E, 0x42, 0x31, 0x30, 0x42, 0x31, 0x31, - 0x42, 0x31, 0x32, 0x42, 0x31, 0x33, 0x42, 0x31, - 0x34, 0x42, 0x31, 0x35, 0x42, 0x31, 0x36, 0x42, - 0x31, 0x37, 0x42, 0x31, 0x38, 0x42, 0x31, 0x39, - 0x42, 0x32, 0x2C, 0x42, 0x32, 0x2E, 0x42, 0x32, - 0x30, 0x42, 0x32, 0x31, 0x42, 0x32, 0x32, 0x42, - 0x32, 0x33, 0x42, 0x32, 0x34, 0x42, 0x32, 0x35, - 0x42, 0x32, 0x36, 0x42, 0x32, 0x37, 0x42, 0x32, - // Bytes 18c0 - 18ff - 0x38, 0x42, 0x32, 0x39, 0x42, 0x33, 0x2C, 0x42, - 0x33, 0x2E, 0x42, 0x33, 0x30, 0x42, 0x33, 0x31, - 0x42, 0x33, 0x32, 0x42, 0x33, 0x33, 0x42, 0x33, - 0x34, 0x42, 0x33, 0x35, 0x42, 0x33, 0x36, 0x42, - 0x33, 0x37, 0x42, 0x33, 0x38, 0x42, 0x33, 0x39, - 0x42, 0x34, 0x2C, 0x42, 0x34, 0x2E, 0x42, 0x34, - 0x30, 0x42, 0x34, 0x31, 0x42, 0x34, 0x32, 0x42, - 0x34, 0x33, 0x42, 0x34, 0x34, 0x42, 0x34, 0x35, - // Bytes 1900 - 193f - 0x42, 0x34, 0x36, 0x42, 0x34, 0x37, 0x42, 0x34, - 0x38, 0x42, 0x34, 0x39, 0x42, 0x35, 0x2C, 0x42, - 0x35, 0x2E, 0x42, 0x35, 0x30, 0x42, 0x36, 0x2C, - 0x42, 0x36, 0x2E, 0x42, 0x37, 0x2C, 0x42, 0x37, - 0x2E, 0x42, 0x38, 0x2C, 0x42, 0x38, 0x2E, 0x42, - 0x39, 0x2C, 0x42, 0x39, 0x2E, 0x42, 0x3D, 0x3D, - 0x42, 0x3F, 0x21, 0x42, 0x3F, 0x3F, 0x42, 0x41, - 0x55, 0x42, 0x42, 0x71, 0x42, 0x43, 0x44, 0x42, - // Bytes 1940 - 197f - 0x44, 0x4A, 0x42, 0x44, 0x5A, 0x42, 0x44, 0x7A, - 0x42, 0x47, 0x42, 0x42, 0x47, 0x79, 0x42, 0x48, - 0x50, 0x42, 0x48, 0x56, 0x42, 0x48, 0x67, 0x42, - 0x48, 0x7A, 0x42, 0x49, 0x49, 0x42, 0x49, 0x4A, - 0x42, 0x49, 0x55, 0x42, 0x49, 0x56, 0x42, 0x49, - 0x58, 0x42, 0x4B, 0x42, 0x42, 0x4B, 0x4B, 0x42, - 0x4B, 0x4D, 0x42, 0x4C, 0x4A, 0x42, 0x4C, 0x6A, - 0x42, 0x4D, 0x42, 0x42, 0x4D, 0x43, 0x42, 0x4D, - // Bytes 1980 - 19bf - 0x44, 0x42, 0x4D, 0x56, 0x42, 0x4D, 0x57, 0x42, - 0x4E, 0x4A, 0x42, 0x4E, 0x6A, 0x42, 0x4E, 0x6F, - 0x42, 0x50, 0x48, 0x42, 0x50, 0x52, 0x42, 0x50, - 0x61, 0x42, 0x52, 0x73, 0x42, 0x53, 0x44, 0x42, - 0x53, 0x4D, 0x42, 0x53, 0x53, 0x42, 0x53, 0x76, - 0x42, 0x54, 0x4D, 0x42, 0x56, 0x49, 0x42, 0x57, - 0x43, 0x42, 0x57, 0x5A, 0x42, 0x57, 0x62, 0x42, - 0x58, 0x49, 0x42, 0x63, 0x63, 0x42, 0x63, 0x64, - // Bytes 19c0 - 19ff - 0x42, 0x63, 0x6D, 0x42, 0x64, 0x42, 0x42, 0x64, - 0x61, 0x42, 0x64, 0x6C, 0x42, 0x64, 0x6D, 0x42, - 0x64, 0x7A, 0x42, 0x65, 0x56, 0x42, 0x66, 0x66, - 0x42, 0x66, 0x69, 0x42, 0x66, 0x6C, 0x42, 0x66, - 0x6D, 0x42, 0x68, 0x61, 0x42, 0x69, 0x69, 0x42, - 0x69, 0x6A, 0x42, 0x69, 0x6E, 0x42, 0x69, 0x76, - 0x42, 0x69, 0x78, 0x42, 0x6B, 0x41, 0x42, 0x6B, - 0x56, 0x42, 0x6B, 0x57, 0x42, 0x6B, 0x67, 0x42, - // Bytes 1a00 - 1a3f - 0x6B, 0x6C, 0x42, 0x6B, 0x6D, 0x42, 0x6B, 0x74, - 0x42, 0x6C, 0x6A, 0x42, 0x6C, 0x6D, 0x42, 0x6C, - 0x6E, 0x42, 0x6C, 0x78, 0x42, 0x6D, 0x32, 0x42, - 0x6D, 0x33, 0x42, 0x6D, 0x41, 0x42, 0x6D, 0x56, - 0x42, 0x6D, 0x57, 0x42, 0x6D, 0x62, 0x42, 0x6D, - 0x67, 0x42, 0x6D, 0x6C, 0x42, 0x6D, 0x6D, 0x42, - 0x6D, 0x73, 0x42, 0x6E, 0x41, 0x42, 0x6E, 0x46, - 0x42, 0x6E, 0x56, 0x42, 0x6E, 0x57, 0x42, 0x6E, - // Bytes 1a40 - 1a7f - 0x6A, 0x42, 0x6E, 0x6D, 0x42, 0x6E, 0x73, 0x42, - 0x6F, 0x56, 0x42, 0x70, 0x41, 0x42, 0x70, 0x46, - 0x42, 0x70, 0x56, 0x42, 0x70, 0x57, 0x42, 0x70, - 0x63, 0x42, 0x70, 0x73, 0x42, 0x73, 0x72, 0x42, - 0x73, 0x74, 0x42, 0x76, 0x69, 0x42, 0x78, 0x69, - 0x43, 0x28, 0x31, 0x29, 0x43, 0x28, 0x32, 0x29, - 0x43, 0x28, 0x33, 0x29, 0x43, 0x28, 0x34, 0x29, - 0x43, 0x28, 0x35, 0x29, 0x43, 0x28, 0x36, 0x29, - // Bytes 1a80 - 1abf - 0x43, 0x28, 0x37, 0x29, 0x43, 0x28, 0x38, 0x29, - 0x43, 0x28, 0x39, 0x29, 0x43, 0x28, 0x41, 0x29, - 0x43, 0x28, 0x42, 0x29, 0x43, 0x28, 0x43, 0x29, - 0x43, 0x28, 0x44, 0x29, 0x43, 0x28, 0x45, 0x29, - 0x43, 0x28, 0x46, 0x29, 0x43, 0x28, 0x47, 0x29, - 0x43, 0x28, 0x48, 0x29, 0x43, 0x28, 0x49, 0x29, - 0x43, 0x28, 0x4A, 0x29, 0x43, 0x28, 0x4B, 0x29, - 0x43, 0x28, 0x4C, 0x29, 0x43, 0x28, 0x4D, 0x29, - // Bytes 1ac0 - 1aff - 0x43, 0x28, 0x4E, 0x29, 0x43, 0x28, 0x4F, 0x29, - 0x43, 0x28, 0x50, 0x29, 0x43, 0x28, 0x51, 0x29, - 0x43, 0x28, 0x52, 0x29, 0x43, 0x28, 0x53, 0x29, - 0x43, 0x28, 0x54, 0x29, 0x43, 0x28, 0x55, 0x29, - 0x43, 0x28, 0x56, 0x29, 0x43, 0x28, 0x57, 0x29, - 0x43, 0x28, 0x58, 0x29, 0x43, 0x28, 0x59, 0x29, - 0x43, 0x28, 0x5A, 0x29, 0x43, 0x28, 0x61, 0x29, - 0x43, 0x28, 0x62, 0x29, 0x43, 0x28, 0x63, 0x29, - // Bytes 1b00 - 1b3f - 0x43, 0x28, 0x64, 0x29, 0x43, 0x28, 0x65, 0x29, - 0x43, 0x28, 0x66, 0x29, 0x43, 0x28, 0x67, 0x29, - 0x43, 0x28, 0x68, 0x29, 0x43, 0x28, 0x69, 0x29, - 0x43, 0x28, 0x6A, 0x29, 0x43, 0x28, 0x6B, 0x29, - 0x43, 0x28, 0x6C, 0x29, 0x43, 0x28, 0x6D, 0x29, - 0x43, 0x28, 0x6E, 0x29, 0x43, 0x28, 0x6F, 0x29, - 0x43, 0x28, 0x70, 0x29, 0x43, 0x28, 0x71, 0x29, - 0x43, 0x28, 0x72, 0x29, 0x43, 0x28, 0x73, 0x29, - // Bytes 1b40 - 1b7f - 0x43, 0x28, 0x74, 0x29, 0x43, 0x28, 0x75, 0x29, - 0x43, 0x28, 0x76, 0x29, 0x43, 0x28, 0x77, 0x29, - 0x43, 0x28, 0x78, 0x29, 0x43, 0x28, 0x79, 0x29, - 0x43, 0x28, 0x7A, 0x29, 0x43, 0x2E, 0x2E, 0x2E, - 0x43, 0x31, 0x30, 0x2E, 0x43, 0x31, 0x31, 0x2E, - 0x43, 0x31, 0x32, 0x2E, 0x43, 0x31, 0x33, 0x2E, - 0x43, 0x31, 0x34, 0x2E, 0x43, 0x31, 0x35, 0x2E, - 0x43, 0x31, 0x36, 0x2E, 0x43, 0x31, 0x37, 0x2E, - // Bytes 1b80 - 1bbf - 0x43, 0x31, 0x38, 0x2E, 0x43, 0x31, 0x39, 0x2E, - 0x43, 0x32, 0x30, 0x2E, 0x43, 0x3A, 0x3A, 0x3D, - 0x43, 0x3D, 0x3D, 0x3D, 0x43, 0x43, 0x6F, 0x2E, - 0x43, 0x46, 0x41, 0x58, 0x43, 0x47, 0x48, 0x7A, - 0x43, 0x47, 0x50, 0x61, 0x43, 0x49, 0x49, 0x49, - 0x43, 0x4C, 0x54, 0x44, 0x43, 0x4C, 0xC2, 0xB7, - 0x43, 0x4D, 0x48, 0x7A, 0x43, 0x4D, 0x50, 0x61, - 0x43, 0x4D, 0xCE, 0xA9, 0x43, 0x50, 0x50, 0x4D, - // Bytes 1bc0 - 1bff - 0x43, 0x50, 0x50, 0x56, 0x43, 0x50, 0x54, 0x45, - 0x43, 0x54, 0x45, 0x4C, 0x43, 0x54, 0x48, 0x7A, - 0x43, 0x56, 0x49, 0x49, 0x43, 0x58, 0x49, 0x49, - 0x43, 0x61, 0x2F, 0x63, 0x43, 0x61, 0x2F, 0x73, - 0x43, 0x61, 0xCA, 0xBE, 0x43, 0x62, 0x61, 0x72, - 0x43, 0x63, 0x2F, 0x6F, 0x43, 0x63, 0x2F, 0x75, - 0x43, 0x63, 0x61, 0x6C, 0x43, 0x63, 0x6D, 0x32, - 0x43, 0x63, 0x6D, 0x33, 0x43, 0x64, 0x6D, 0x32, - // Bytes 1c00 - 1c3f - 0x43, 0x64, 0x6D, 0x33, 0x43, 0x65, 0x72, 0x67, - 0x43, 0x66, 0x66, 0x69, 0x43, 0x66, 0x66, 0x6C, - 0x43, 0x67, 0x61, 0x6C, 0x43, 0x68, 0x50, 0x61, - 0x43, 0x69, 0x69, 0x69, 0x43, 0x6B, 0x48, 0x7A, - 0x43, 0x6B, 0x50, 0x61, 0x43, 0x6B, 0x6D, 0x32, - 0x43, 0x6B, 0x6D, 0x33, 0x43, 0x6B, 0xCE, 0xA9, - 0x43, 0x6C, 0x6F, 0x67, 0x43, 0x6C, 0xC2, 0xB7, - 0x43, 0x6D, 0x69, 0x6C, 0x43, 0x6D, 0x6D, 0x32, - // Bytes 1c40 - 1c7f - 0x43, 0x6D, 0x6D, 0x33, 0x43, 0x6D, 0x6F, 0x6C, - 0x43, 0x72, 0x61, 0x64, 0x43, 0x76, 0x69, 0x69, - 0x43, 0x78, 0x69, 0x69, 0x43, 0xC2, 0xB0, 0x43, - 0x43, 0xC2, 0xB0, 0x46, 0x43, 0xCA, 0xBC, 0x6E, - 0x43, 0xCE, 0xBC, 0x41, 0x43, 0xCE, 0xBC, 0x46, - 0x43, 0xCE, 0xBC, 0x56, 0x43, 0xCE, 0xBC, 0x57, - 0x43, 0xCE, 0xBC, 0x67, 0x43, 0xCE, 0xBC, 0x6C, - 0x43, 0xCE, 0xBC, 0x6D, 0x43, 0xCE, 0xBC, 0x73, - // Bytes 1c80 - 1cbf - 0x44, 0x28, 0x31, 0x30, 0x29, 0x44, 0x28, 0x31, - 0x31, 0x29, 0x44, 0x28, 0x31, 0x32, 0x29, 0x44, - 0x28, 0x31, 0x33, 0x29, 0x44, 0x28, 0x31, 0x34, - 0x29, 0x44, 0x28, 0x31, 0x35, 0x29, 0x44, 0x28, - 0x31, 0x36, 0x29, 0x44, 0x28, 0x31, 0x37, 0x29, - 0x44, 0x28, 0x31, 0x38, 0x29, 0x44, 0x28, 0x31, - 0x39, 0x29, 0x44, 0x28, 0x32, 0x30, 0x29, 0x44, - 0x30, 0xE7, 0x82, 0xB9, 0x44, 0x31, 0xE2, 0x81, - // Bytes 1cc0 - 1cff - 0x84, 0x44, 0x31, 0xE6, 0x97, 0xA5, 0x44, 0x31, - 0xE6, 0x9C, 0x88, 0x44, 0x31, 0xE7, 0x82, 0xB9, - 0x44, 0x32, 0xE6, 0x97, 0xA5, 0x44, 0x32, 0xE6, - 0x9C, 0x88, 0x44, 0x32, 0xE7, 0x82, 0xB9, 0x44, - 0x33, 0xE6, 0x97, 0xA5, 0x44, 0x33, 0xE6, 0x9C, - 0x88, 0x44, 0x33, 0xE7, 0x82, 0xB9, 0x44, 0x34, - 0xE6, 0x97, 0xA5, 0x44, 0x34, 0xE6, 0x9C, 0x88, - 0x44, 0x34, 0xE7, 0x82, 0xB9, 0x44, 0x35, 0xE6, - // Bytes 1d00 - 1d3f - 0x97, 0xA5, 0x44, 0x35, 0xE6, 0x9C, 0x88, 0x44, - 0x35, 0xE7, 0x82, 0xB9, 0x44, 0x36, 0xE6, 0x97, - 0xA5, 0x44, 0x36, 0xE6, 0x9C, 0x88, 0x44, 0x36, - 0xE7, 0x82, 0xB9, 0x44, 0x37, 0xE6, 0x97, 0xA5, - 0x44, 0x37, 0xE6, 0x9C, 0x88, 0x44, 0x37, 0xE7, - 0x82, 0xB9, 0x44, 0x38, 0xE6, 0x97, 0xA5, 0x44, - 0x38, 0xE6, 0x9C, 0x88, 0x44, 0x38, 0xE7, 0x82, - 0xB9, 0x44, 0x39, 0xE6, 0x97, 0xA5, 0x44, 0x39, - // Bytes 1d40 - 1d7f - 0xE6, 0x9C, 0x88, 0x44, 0x39, 0xE7, 0x82, 0xB9, - 0x44, 0x56, 0x49, 0x49, 0x49, 0x44, 0x61, 0x2E, - 0x6D, 0x2E, 0x44, 0x6B, 0x63, 0x61, 0x6C, 0x44, - 0x70, 0x2E, 0x6D, 0x2E, 0x44, 0x76, 0x69, 0x69, - 0x69, 0x44, 0xD5, 0xA5, 0xD6, 0x82, 0x44, 0xD5, - 0xB4, 0xD5, 0xA5, 0x44, 0xD5, 0xB4, 0xD5, 0xAB, - 0x44, 0xD5, 0xB4, 0xD5, 0xAD, 0x44, 0xD5, 0xB4, - 0xD5, 0xB6, 0x44, 0xD5, 0xBE, 0xD5, 0xB6, 0x44, - // Bytes 1d80 - 1dbf - 0xD7, 0x90, 0xD7, 0x9C, 0x44, 0xD8, 0xA7, 0xD9, - 0xB4, 0x44, 0xD8, 0xA8, 0xD8, 0xAC, 0x44, 0xD8, - 0xA8, 0xD8, 0xAD, 0x44, 0xD8, 0xA8, 0xD8, 0xAE, - 0x44, 0xD8, 0xA8, 0xD8, 0xB1, 0x44, 0xD8, 0xA8, - 0xD8, 0xB2, 0x44, 0xD8, 0xA8, 0xD9, 0x85, 0x44, - 0xD8, 0xA8, 0xD9, 0x86, 0x44, 0xD8, 0xA8, 0xD9, - 0x87, 0x44, 0xD8, 0xA8, 0xD9, 0x89, 0x44, 0xD8, - 0xA8, 0xD9, 0x8A, 0x44, 0xD8, 0xAA, 0xD8, 0xAC, - // Bytes 1dc0 - 1dff - 0x44, 0xD8, 0xAA, 0xD8, 0xAD, 0x44, 0xD8, 0xAA, - 0xD8, 0xAE, 0x44, 0xD8, 0xAA, 0xD8, 0xB1, 0x44, - 0xD8, 0xAA, 0xD8, 0xB2, 0x44, 0xD8, 0xAA, 0xD9, - 0x85, 0x44, 0xD8, 0xAA, 0xD9, 0x86, 0x44, 0xD8, - 0xAA, 0xD9, 0x87, 0x44, 0xD8, 0xAA, 0xD9, 0x89, - 0x44, 0xD8, 0xAA, 0xD9, 0x8A, 0x44, 0xD8, 0xAB, - 0xD8, 0xAC, 0x44, 0xD8, 0xAB, 0xD8, 0xB1, 0x44, - 0xD8, 0xAB, 0xD8, 0xB2, 0x44, 0xD8, 0xAB, 0xD9, - // Bytes 1e00 - 1e3f - 0x85, 0x44, 0xD8, 0xAB, 0xD9, 0x86, 0x44, 0xD8, - 0xAB, 0xD9, 0x87, 0x44, 0xD8, 0xAB, 0xD9, 0x89, - 0x44, 0xD8, 0xAB, 0xD9, 0x8A, 0x44, 0xD8, 0xAC, - 0xD8, 0xAD, 0x44, 0xD8, 0xAC, 0xD9, 0x85, 0x44, - 0xD8, 0xAC, 0xD9, 0x89, 0x44, 0xD8, 0xAC, 0xD9, - 0x8A, 0x44, 0xD8, 0xAD, 0xD8, 0xAC, 0x44, 0xD8, - 0xAD, 0xD9, 0x85, 0x44, 0xD8, 0xAD, 0xD9, 0x89, - 0x44, 0xD8, 0xAD, 0xD9, 0x8A, 0x44, 0xD8, 0xAE, - // Bytes 1e40 - 1e7f - 0xD8, 0xAC, 0x44, 0xD8, 0xAE, 0xD8, 0xAD, 0x44, - 0xD8, 0xAE, 0xD9, 0x85, 0x44, 0xD8, 0xAE, 0xD9, - 0x89, 0x44, 0xD8, 0xAE, 0xD9, 0x8A, 0x44, 0xD8, - 0xB3, 0xD8, 0xAC, 0x44, 0xD8, 0xB3, 0xD8, 0xAD, - 0x44, 0xD8, 0xB3, 0xD8, 0xAE, 0x44, 0xD8, 0xB3, - 0xD8, 0xB1, 0x44, 0xD8, 0xB3, 0xD9, 0x85, 0x44, - 0xD8, 0xB3, 0xD9, 0x87, 0x44, 0xD8, 0xB3, 0xD9, - 0x89, 0x44, 0xD8, 0xB3, 0xD9, 0x8A, 0x44, 0xD8, - // Bytes 1e80 - 1ebf - 0xB4, 0xD8, 0xAC, 0x44, 0xD8, 0xB4, 0xD8, 0xAD, - 0x44, 0xD8, 0xB4, 0xD8, 0xAE, 0x44, 0xD8, 0xB4, - 0xD8, 0xB1, 0x44, 0xD8, 0xB4, 0xD9, 0x85, 0x44, - 0xD8, 0xB4, 0xD9, 0x87, 0x44, 0xD8, 0xB4, 0xD9, - 0x89, 0x44, 0xD8, 0xB4, 0xD9, 0x8A, 0x44, 0xD8, - 0xB5, 0xD8, 0xAD, 0x44, 0xD8, 0xB5, 0xD8, 0xAE, - 0x44, 0xD8, 0xB5, 0xD8, 0xB1, 0x44, 0xD8, 0xB5, - 0xD9, 0x85, 0x44, 0xD8, 0xB5, 0xD9, 0x89, 0x44, - // Bytes 1ec0 - 1eff - 0xD8, 0xB5, 0xD9, 0x8A, 0x44, 0xD8, 0xB6, 0xD8, - 0xAC, 0x44, 0xD8, 0xB6, 0xD8, 0xAD, 0x44, 0xD8, - 0xB6, 0xD8, 0xAE, 0x44, 0xD8, 0xB6, 0xD8, 0xB1, - 0x44, 0xD8, 0xB6, 0xD9, 0x85, 0x44, 0xD8, 0xB6, - 0xD9, 0x89, 0x44, 0xD8, 0xB6, 0xD9, 0x8A, 0x44, - 0xD8, 0xB7, 0xD8, 0xAD, 0x44, 0xD8, 0xB7, 0xD9, - 0x85, 0x44, 0xD8, 0xB7, 0xD9, 0x89, 0x44, 0xD8, - 0xB7, 0xD9, 0x8A, 0x44, 0xD8, 0xB8, 0xD9, 0x85, - // Bytes 1f00 - 1f3f - 0x44, 0xD8, 0xB9, 0xD8, 0xAC, 0x44, 0xD8, 0xB9, - 0xD9, 0x85, 0x44, 0xD8, 0xB9, 0xD9, 0x89, 0x44, - 0xD8, 0xB9, 0xD9, 0x8A, 0x44, 0xD8, 0xBA, 0xD8, - 0xAC, 0x44, 0xD8, 0xBA, 0xD9, 0x85, 0x44, 0xD8, - 0xBA, 0xD9, 0x89, 0x44, 0xD8, 0xBA, 0xD9, 0x8A, - 0x44, 0xD9, 0x81, 0xD8, 0xAC, 0x44, 0xD9, 0x81, - 0xD8, 0xAD, 0x44, 0xD9, 0x81, 0xD8, 0xAE, 0x44, - 0xD9, 0x81, 0xD9, 0x85, 0x44, 0xD9, 0x81, 0xD9, - // Bytes 1f40 - 1f7f - 0x89, 0x44, 0xD9, 0x81, 0xD9, 0x8A, 0x44, 0xD9, - 0x82, 0xD8, 0xAD, 0x44, 0xD9, 0x82, 0xD9, 0x85, - 0x44, 0xD9, 0x82, 0xD9, 0x89, 0x44, 0xD9, 0x82, - 0xD9, 0x8A, 0x44, 0xD9, 0x83, 0xD8, 0xA7, 0x44, - 0xD9, 0x83, 0xD8, 0xAC, 0x44, 0xD9, 0x83, 0xD8, - 0xAD, 0x44, 0xD9, 0x83, 0xD8, 0xAE, 0x44, 0xD9, - 0x83, 0xD9, 0x84, 0x44, 0xD9, 0x83, 0xD9, 0x85, - 0x44, 0xD9, 0x83, 0xD9, 0x89, 0x44, 0xD9, 0x83, - // Bytes 1f80 - 1fbf - 0xD9, 0x8A, 0x44, 0xD9, 0x84, 0xD8, 0xA7, 0x44, - 0xD9, 0x84, 0xD8, 0xAC, 0x44, 0xD9, 0x84, 0xD8, - 0xAD, 0x44, 0xD9, 0x84, 0xD8, 0xAE, 0x44, 0xD9, - 0x84, 0xD9, 0x85, 0x44, 0xD9, 0x84, 0xD9, 0x87, - 0x44, 0xD9, 0x84, 0xD9, 0x89, 0x44, 0xD9, 0x84, - 0xD9, 0x8A, 0x44, 0xD9, 0x85, 0xD8, 0xA7, 0x44, - 0xD9, 0x85, 0xD8, 0xAC, 0x44, 0xD9, 0x85, 0xD8, - 0xAD, 0x44, 0xD9, 0x85, 0xD8, 0xAE, 0x44, 0xD9, - // Bytes 1fc0 - 1fff - 0x85, 0xD9, 0x85, 0x44, 0xD9, 0x85, 0xD9, 0x89, - 0x44, 0xD9, 0x85, 0xD9, 0x8A, 0x44, 0xD9, 0x86, - 0xD8, 0xAC, 0x44, 0xD9, 0x86, 0xD8, 0xAD, 0x44, - 0xD9, 0x86, 0xD8, 0xAE, 0x44, 0xD9, 0x86, 0xD8, - 0xB1, 0x44, 0xD9, 0x86, 0xD8, 0xB2, 0x44, 0xD9, - 0x86, 0xD9, 0x85, 0x44, 0xD9, 0x86, 0xD9, 0x86, - 0x44, 0xD9, 0x86, 0xD9, 0x87, 0x44, 0xD9, 0x86, - 0xD9, 0x89, 0x44, 0xD9, 0x86, 0xD9, 0x8A, 0x44, - // Bytes 2000 - 203f - 0xD9, 0x87, 0xD8, 0xAC, 0x44, 0xD9, 0x87, 0xD9, - 0x85, 0x44, 0xD9, 0x87, 0xD9, 0x89, 0x44, 0xD9, - 0x87, 0xD9, 0x8A, 0x44, 0xD9, 0x88, 0xD9, 0xB4, - 0x44, 0xD9, 0x8A, 0xD8, 0xAC, 0x44, 0xD9, 0x8A, - 0xD8, 0xAD, 0x44, 0xD9, 0x8A, 0xD8, 0xAE, 0x44, - 0xD9, 0x8A, 0xD8, 0xB1, 0x44, 0xD9, 0x8A, 0xD8, - 0xB2, 0x44, 0xD9, 0x8A, 0xD9, 0x85, 0x44, 0xD9, - 0x8A, 0xD9, 0x86, 0x44, 0xD9, 0x8A, 0xD9, 0x87, - // Bytes 2040 - 207f - 0x44, 0xD9, 0x8A, 0xD9, 0x89, 0x44, 0xD9, 0x8A, - 0xD9, 0x8A, 0x44, 0xD9, 0x8A, 0xD9, 0xB4, 0x44, - 0xDB, 0x87, 0xD9, 0xB4, 0x45, 0x28, 0xE1, 0x84, - 0x80, 0x29, 0x45, 0x28, 0xE1, 0x84, 0x82, 0x29, - 0x45, 0x28, 0xE1, 0x84, 0x83, 0x29, 0x45, 0x28, - 0xE1, 0x84, 0x85, 0x29, 0x45, 0x28, 0xE1, 0x84, - 0x86, 0x29, 0x45, 0x28, 0xE1, 0x84, 0x87, 0x29, - 0x45, 0x28, 0xE1, 0x84, 0x89, 0x29, 0x45, 0x28, - // Bytes 2080 - 20bf - 0xE1, 0x84, 0x8B, 0x29, 0x45, 0x28, 0xE1, 0x84, - 0x8C, 0x29, 0x45, 0x28, 0xE1, 0x84, 0x8E, 0x29, - 0x45, 0x28, 0xE1, 0x84, 0x8F, 0x29, 0x45, 0x28, - 0xE1, 0x84, 0x90, 0x29, 0x45, 0x28, 0xE1, 0x84, - 0x91, 0x29, 0x45, 0x28, 0xE1, 0x84, 0x92, 0x29, - 0x45, 0x28, 0xE4, 0xB8, 0x80, 0x29, 0x45, 0x28, - 0xE4, 0xB8, 0x83, 0x29, 0x45, 0x28, 0xE4, 0xB8, - 0x89, 0x29, 0x45, 0x28, 0xE4, 0xB9, 0x9D, 0x29, - // Bytes 20c0 - 20ff - 0x45, 0x28, 0xE4, 0xBA, 0x8C, 0x29, 0x45, 0x28, - 0xE4, 0xBA, 0x94, 0x29, 0x45, 0x28, 0xE4, 0xBB, - 0xA3, 0x29, 0x45, 0x28, 0xE4, 0xBC, 0x81, 0x29, - 0x45, 0x28, 0xE4, 0xBC, 0x91, 0x29, 0x45, 0x28, - 0xE5, 0x85, 0xAB, 0x29, 0x45, 0x28, 0xE5, 0x85, - 0xAD, 0x29, 0x45, 0x28, 0xE5, 0x8A, 0xB4, 0x29, - 0x45, 0x28, 0xE5, 0x8D, 0x81, 0x29, 0x45, 0x28, - 0xE5, 0x8D, 0x94, 0x29, 0x45, 0x28, 0xE5, 0x90, - // Bytes 2100 - 213f - 0x8D, 0x29, 0x45, 0x28, 0xE5, 0x91, 0xBC, 0x29, - 0x45, 0x28, 0xE5, 0x9B, 0x9B, 0x29, 0x45, 0x28, - 0xE5, 0x9C, 0x9F, 0x29, 0x45, 0x28, 0xE5, 0xAD, - 0xA6, 0x29, 0x45, 0x28, 0xE6, 0x97, 0xA5, 0x29, - 0x45, 0x28, 0xE6, 0x9C, 0x88, 0x29, 0x45, 0x28, - 0xE6, 0x9C, 0x89, 0x29, 0x45, 0x28, 0xE6, 0x9C, - 0xA8, 0x29, 0x45, 0x28, 0xE6, 0xA0, 0xAA, 0x29, - 0x45, 0x28, 0xE6, 0xB0, 0xB4, 0x29, 0x45, 0x28, - // Bytes 2140 - 217f - 0xE7, 0x81, 0xAB, 0x29, 0x45, 0x28, 0xE7, 0x89, - 0xB9, 0x29, 0x45, 0x28, 0xE7, 0x9B, 0xA3, 0x29, - 0x45, 0x28, 0xE7, 0xA4, 0xBE, 0x29, 0x45, 0x28, - 0xE7, 0xA5, 0x9D, 0x29, 0x45, 0x28, 0xE7, 0xA5, - 0xAD, 0x29, 0x45, 0x28, 0xE8, 0x87, 0xAA, 0x29, - 0x45, 0x28, 0xE8, 0x87, 0xB3, 0x29, 0x45, 0x28, - 0xE8, 0xB2, 0xA1, 0x29, 0x45, 0x28, 0xE8, 0xB3, - 0x87, 0x29, 0x45, 0x28, 0xE9, 0x87, 0x91, 0x29, - // Bytes 2180 - 21bf - 0x45, 0x30, 0xE2, 0x81, 0x84, 0x33, 0x45, 0x31, - 0x30, 0xE6, 0x97, 0xA5, 0x45, 0x31, 0x30, 0xE6, - 0x9C, 0x88, 0x45, 0x31, 0x30, 0xE7, 0x82, 0xB9, - 0x45, 0x31, 0x31, 0xE6, 0x97, 0xA5, 0x45, 0x31, - 0x31, 0xE6, 0x9C, 0x88, 0x45, 0x31, 0x31, 0xE7, - 0x82, 0xB9, 0x45, 0x31, 0x32, 0xE6, 0x97, 0xA5, - 0x45, 0x31, 0x32, 0xE6, 0x9C, 0x88, 0x45, 0x31, - 0x32, 0xE7, 0x82, 0xB9, 0x45, 0x31, 0x33, 0xE6, - // Bytes 21c0 - 21ff - 0x97, 0xA5, 0x45, 0x31, 0x33, 0xE7, 0x82, 0xB9, - 0x45, 0x31, 0x34, 0xE6, 0x97, 0xA5, 0x45, 0x31, - 0x34, 0xE7, 0x82, 0xB9, 0x45, 0x31, 0x35, 0xE6, - 0x97, 0xA5, 0x45, 0x31, 0x35, 0xE7, 0x82, 0xB9, - 0x45, 0x31, 0x36, 0xE6, 0x97, 0xA5, 0x45, 0x31, - 0x36, 0xE7, 0x82, 0xB9, 0x45, 0x31, 0x37, 0xE6, - 0x97, 0xA5, 0x45, 0x31, 0x37, 0xE7, 0x82, 0xB9, - 0x45, 0x31, 0x38, 0xE6, 0x97, 0xA5, 0x45, 0x31, - // Bytes 2200 - 223f - 0x38, 0xE7, 0x82, 0xB9, 0x45, 0x31, 0x39, 0xE6, - 0x97, 0xA5, 0x45, 0x31, 0x39, 0xE7, 0x82, 0xB9, - 0x45, 0x31, 0xE2, 0x81, 0x84, 0x32, 0x45, 0x31, - 0xE2, 0x81, 0x84, 0x33, 0x45, 0x31, 0xE2, 0x81, - 0x84, 0x34, 0x45, 0x31, 0xE2, 0x81, 0x84, 0x35, - 0x45, 0x31, 0xE2, 0x81, 0x84, 0x36, 0x45, 0x31, - 0xE2, 0x81, 0x84, 0x37, 0x45, 0x31, 0xE2, 0x81, - 0x84, 0x38, 0x45, 0x31, 0xE2, 0x81, 0x84, 0x39, - // Bytes 2240 - 227f - 0x45, 0x32, 0x30, 0xE6, 0x97, 0xA5, 0x45, 0x32, - 0x30, 0xE7, 0x82, 0xB9, 0x45, 0x32, 0x31, 0xE6, - 0x97, 0xA5, 0x45, 0x32, 0x31, 0xE7, 0x82, 0xB9, - 0x45, 0x32, 0x32, 0xE6, 0x97, 0xA5, 0x45, 0x32, - 0x32, 0xE7, 0x82, 0xB9, 0x45, 0x32, 0x33, 0xE6, - 0x97, 0xA5, 0x45, 0x32, 0x33, 0xE7, 0x82, 0xB9, - 0x45, 0x32, 0x34, 0xE6, 0x97, 0xA5, 0x45, 0x32, - 0x34, 0xE7, 0x82, 0xB9, 0x45, 0x32, 0x35, 0xE6, - // Bytes 2280 - 22bf - 0x97, 0xA5, 0x45, 0x32, 0x36, 0xE6, 0x97, 0xA5, - 0x45, 0x32, 0x37, 0xE6, 0x97, 0xA5, 0x45, 0x32, - 0x38, 0xE6, 0x97, 0xA5, 0x45, 0x32, 0x39, 0xE6, - 0x97, 0xA5, 0x45, 0x32, 0xE2, 0x81, 0x84, 0x33, - 0x45, 0x32, 0xE2, 0x81, 0x84, 0x35, 0x45, 0x33, - 0x30, 0xE6, 0x97, 0xA5, 0x45, 0x33, 0x31, 0xE6, - 0x97, 0xA5, 0x45, 0x33, 0xE2, 0x81, 0x84, 0x34, - 0x45, 0x33, 0xE2, 0x81, 0x84, 0x35, 0x45, 0x33, - // Bytes 22c0 - 22ff - 0xE2, 0x81, 0x84, 0x38, 0x45, 0x34, 0xE2, 0x81, - 0x84, 0x35, 0x45, 0x35, 0xE2, 0x81, 0x84, 0x36, - 0x45, 0x35, 0xE2, 0x81, 0x84, 0x38, 0x45, 0x37, - 0xE2, 0x81, 0x84, 0x38, 0x45, 0x41, 0xE2, 0x88, - 0x95, 0x6D, 0x45, 0x56, 0xE2, 0x88, 0x95, 0x6D, - 0x45, 0x6D, 0xE2, 0x88, 0x95, 0x73, 0x46, 0x31, - 0xE2, 0x81, 0x84, 0x31, 0x30, 0x46, 0x43, 0xE2, - 0x88, 0x95, 0x6B, 0x67, 0x46, 0x6D, 0xE2, 0x88, - // Bytes 2300 - 233f - 0x95, 0x73, 0x32, 0x46, 0xD8, 0xA8, 0xD8, 0xAD, - 0xD9, 0x8A, 0x46, 0xD8, 0xA8, 0xD8, 0xAE, 0xD9, - 0x8A, 0x46, 0xD8, 0xAA, 0xD8, 0xAC, 0xD9, 0x85, - 0x46, 0xD8, 0xAA, 0xD8, 0xAC, 0xD9, 0x89, 0x46, - 0xD8, 0xAA, 0xD8, 0xAC, 0xD9, 0x8A, 0x46, 0xD8, - 0xAA, 0xD8, 0xAD, 0xD8, 0xAC, 0x46, 0xD8, 0xAA, - 0xD8, 0xAD, 0xD9, 0x85, 0x46, 0xD8, 0xAA, 0xD8, - 0xAE, 0xD9, 0x85, 0x46, 0xD8, 0xAA, 0xD8, 0xAE, - // Bytes 2340 - 237f - 0xD9, 0x89, 0x46, 0xD8, 0xAA, 0xD8, 0xAE, 0xD9, - 0x8A, 0x46, 0xD8, 0xAA, 0xD9, 0x85, 0xD8, 0xAC, - 0x46, 0xD8, 0xAA, 0xD9, 0x85, 0xD8, 0xAD, 0x46, - 0xD8, 0xAA, 0xD9, 0x85, 0xD8, 0xAE, 0x46, 0xD8, - 0xAA, 0xD9, 0x85, 0xD9, 0x89, 0x46, 0xD8, 0xAA, - 0xD9, 0x85, 0xD9, 0x8A, 0x46, 0xD8, 0xAC, 0xD8, - 0xAD, 0xD9, 0x89, 0x46, 0xD8, 0xAC, 0xD8, 0xAD, - 0xD9, 0x8A, 0x46, 0xD8, 0xAC, 0xD9, 0x85, 0xD8, - // Bytes 2380 - 23bf - 0xAD, 0x46, 0xD8, 0xAC, 0xD9, 0x85, 0xD9, 0x89, - 0x46, 0xD8, 0xAC, 0xD9, 0x85, 0xD9, 0x8A, 0x46, - 0xD8, 0xAD, 0xD8, 0xAC, 0xD9, 0x8A, 0x46, 0xD8, - 0xAD, 0xD9, 0x85, 0xD9, 0x89, 0x46, 0xD8, 0xAD, - 0xD9, 0x85, 0xD9, 0x8A, 0x46, 0xD8, 0xB3, 0xD8, - 0xAC, 0xD8, 0xAD, 0x46, 0xD8, 0xB3, 0xD8, 0xAC, - 0xD9, 0x89, 0x46, 0xD8, 0xB3, 0xD8, 0xAD, 0xD8, - 0xAC, 0x46, 0xD8, 0xB3, 0xD8, 0xAE, 0xD9, 0x89, - // Bytes 23c0 - 23ff - 0x46, 0xD8, 0xB3, 0xD8, 0xAE, 0xD9, 0x8A, 0x46, - 0xD8, 0xB3, 0xD9, 0x85, 0xD8, 0xAC, 0x46, 0xD8, - 0xB3, 0xD9, 0x85, 0xD8, 0xAD, 0x46, 0xD8, 0xB3, - 0xD9, 0x85, 0xD9, 0x85, 0x46, 0xD8, 0xB4, 0xD8, - 0xAC, 0xD9, 0x8A, 0x46, 0xD8, 0xB4, 0xD8, 0xAD, - 0xD9, 0x85, 0x46, 0xD8, 0xB4, 0xD8, 0xAD, 0xD9, - 0x8A, 0x46, 0xD8, 0xB4, 0xD9, 0x85, 0xD8, 0xAE, - 0x46, 0xD8, 0xB4, 0xD9, 0x85, 0xD9, 0x85, 0x46, - // Bytes 2400 - 243f - 0xD8, 0xB5, 0xD8, 0xAD, 0xD8, 0xAD, 0x46, 0xD8, - 0xB5, 0xD8, 0xAD, 0xD9, 0x8A, 0x46, 0xD8, 0xB5, - 0xD9, 0x84, 0xD9, 0x89, 0x46, 0xD8, 0xB5, 0xD9, - 0x84, 0xDB, 0x92, 0x46, 0xD8, 0xB5, 0xD9, 0x85, - 0xD9, 0x85, 0x46, 0xD8, 0xB6, 0xD8, 0xAD, 0xD9, - 0x89, 0x46, 0xD8, 0xB6, 0xD8, 0xAD, 0xD9, 0x8A, - 0x46, 0xD8, 0xB6, 0xD8, 0xAE, 0xD9, 0x85, 0x46, - 0xD8, 0xB7, 0xD9, 0x85, 0xD8, 0xAD, 0x46, 0xD8, - // Bytes 2440 - 247f - 0xB7, 0xD9, 0x85, 0xD9, 0x85, 0x46, 0xD8, 0xB7, - 0xD9, 0x85, 0xD9, 0x8A, 0x46, 0xD8, 0xB9, 0xD8, - 0xAC, 0xD9, 0x85, 0x46, 0xD8, 0xB9, 0xD9, 0x85, - 0xD9, 0x85, 0x46, 0xD8, 0xB9, 0xD9, 0x85, 0xD9, - 0x89, 0x46, 0xD8, 0xB9, 0xD9, 0x85, 0xD9, 0x8A, - 0x46, 0xD8, 0xBA, 0xD9, 0x85, 0xD9, 0x85, 0x46, - 0xD8, 0xBA, 0xD9, 0x85, 0xD9, 0x89, 0x46, 0xD8, - 0xBA, 0xD9, 0x85, 0xD9, 0x8A, 0x46, 0xD9, 0x81, - // Bytes 2480 - 24bf - 0xD8, 0xAE, 0xD9, 0x85, 0x46, 0xD9, 0x81, 0xD9, - 0x85, 0xD9, 0x8A, 0x46, 0xD9, 0x82, 0xD9, 0x84, - 0xDB, 0x92, 0x46, 0xD9, 0x82, 0xD9, 0x85, 0xD8, - 0xAD, 0x46, 0xD9, 0x82, 0xD9, 0x85, 0xD9, 0x85, - 0x46, 0xD9, 0x82, 0xD9, 0x85, 0xD9, 0x8A, 0x46, - 0xD9, 0x83, 0xD9, 0x85, 0xD9, 0x85, 0x46, 0xD9, - 0x83, 0xD9, 0x85, 0xD9, 0x8A, 0x46, 0xD9, 0x84, - 0xD8, 0xAC, 0xD8, 0xAC, 0x46, 0xD9, 0x84, 0xD8, - // Bytes 24c0 - 24ff - 0xAC, 0xD9, 0x85, 0x46, 0xD9, 0x84, 0xD8, 0xAC, - 0xD9, 0x8A, 0x46, 0xD9, 0x84, 0xD8, 0xAD, 0xD9, - 0x85, 0x46, 0xD9, 0x84, 0xD8, 0xAD, 0xD9, 0x89, - 0x46, 0xD9, 0x84, 0xD8, 0xAD, 0xD9, 0x8A, 0x46, - 0xD9, 0x84, 0xD8, 0xAE, 0xD9, 0x85, 0x46, 0xD9, - 0x84, 0xD9, 0x85, 0xD8, 0xAD, 0x46, 0xD9, 0x84, - 0xD9, 0x85, 0xD9, 0x8A, 0x46, 0xD9, 0x85, 0xD8, - 0xAC, 0xD8, 0xAD, 0x46, 0xD9, 0x85, 0xD8, 0xAC, - // Bytes 2500 - 253f - 0xD8, 0xAE, 0x46, 0xD9, 0x85, 0xD8, 0xAC, 0xD9, - 0x85, 0x46, 0xD9, 0x85, 0xD8, 0xAC, 0xD9, 0x8A, - 0x46, 0xD9, 0x85, 0xD8, 0xAD, 0xD8, 0xAC, 0x46, - 0xD9, 0x85, 0xD8, 0xAD, 0xD9, 0x85, 0x46, 0xD9, - 0x85, 0xD8, 0xAD, 0xD9, 0x8A, 0x46, 0xD9, 0x85, - 0xD8, 0xAE, 0xD8, 0xAC, 0x46, 0xD9, 0x85, 0xD8, - 0xAE, 0xD9, 0x85, 0x46, 0xD9, 0x85, 0xD8, 0xAE, - 0xD9, 0x8A, 0x46, 0xD9, 0x85, 0xD9, 0x85, 0xD9, - // Bytes 2540 - 257f - 0x8A, 0x46, 0xD9, 0x86, 0xD8, 0xAC, 0xD8, 0xAD, - 0x46, 0xD9, 0x86, 0xD8, 0xAC, 0xD9, 0x85, 0x46, - 0xD9, 0x86, 0xD8, 0xAC, 0xD9, 0x89, 0x46, 0xD9, - 0x86, 0xD8, 0xAC, 0xD9, 0x8A, 0x46, 0xD9, 0x86, - 0xD8, 0xAD, 0xD9, 0x85, 0x46, 0xD9, 0x86, 0xD8, - 0xAD, 0xD9, 0x89, 0x46, 0xD9, 0x86, 0xD8, 0xAD, - 0xD9, 0x8A, 0x46, 0xD9, 0x86, 0xD9, 0x85, 0xD9, - 0x89, 0x46, 0xD9, 0x86, 0xD9, 0x85, 0xD9, 0x8A, - // Bytes 2580 - 25bf - 0x46, 0xD9, 0x87, 0xD9, 0x85, 0xD8, 0xAC, 0x46, - 0xD9, 0x87, 0xD9, 0x85, 0xD9, 0x85, 0x46, 0xD9, - 0x8A, 0xD8, 0xAC, 0xD9, 0x8A, 0x46, 0xD9, 0x8A, - 0xD8, 0xAD, 0xD9, 0x8A, 0x46, 0xD9, 0x8A, 0xD9, - 0x85, 0xD9, 0x85, 0x46, 0xD9, 0x8A, 0xD9, 0x85, - 0xD9, 0x8A, 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xD8, - 0xA7, 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xD8, 0xAC, - 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xD8, 0xAD, 0x46, - // Bytes 25c0 - 25ff - 0xD9, 0x8A, 0xD9, 0x94, 0xD8, 0xAE, 0x46, 0xD9, - 0x8A, 0xD9, 0x94, 0xD8, 0xB1, 0x46, 0xD9, 0x8A, - 0xD9, 0x94, 0xD8, 0xB2, 0x46, 0xD9, 0x8A, 0xD9, - 0x94, 0xD9, 0x85, 0x46, 0xD9, 0x8A, 0xD9, 0x94, - 0xD9, 0x86, 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xD9, - 0x87, 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xD9, 0x88, - 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xD9, 0x89, 0x46, - 0xD9, 0x8A, 0xD9, 0x94, 0xD9, 0x8A, 0x46, 0xD9, - // Bytes 2600 - 263f - 0x8A, 0xD9, 0x94, 0xDB, 0x86, 0x46, 0xD9, 0x8A, - 0xD9, 0x94, 0xDB, 0x87, 0x46, 0xD9, 0x8A, 0xD9, - 0x94, 0xDB, 0x88, 0x46, 0xD9, 0x8A, 0xD9, 0x94, - 0xDB, 0x90, 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xDB, - 0x95, 0x46, 0xE0, 0xB9, 0x8D, 0xE0, 0xB8, 0xB2, - 0x46, 0xE0, 0xBA, 0xAB, 0xE0, 0xBA, 0x99, 0x46, - 0xE0, 0xBA, 0xAB, 0xE0, 0xBA, 0xA1, 0x46, 0xE0, - 0xBB, 0x8D, 0xE0, 0xBA, 0xB2, 0x46, 0xE0, 0xBD, - // Bytes 2640 - 267f - 0x80, 0xE0, 0xBE, 0xB5, 0x46, 0xE0, 0xBD, 0x82, - 0xE0, 0xBE, 0xB7, 0x46, 0xE0, 0xBD, 0x8C, 0xE0, - 0xBE, 0xB7, 0x46, 0xE0, 0xBD, 0x91, 0xE0, 0xBE, - 0xB7, 0x46, 0xE0, 0xBD, 0x96, 0xE0, 0xBE, 0xB7, - 0x46, 0xE0, 0xBD, 0x9B, 0xE0, 0xBE, 0xB7, 0x46, - 0xE0, 0xBE, 0x90, 0xE0, 0xBE, 0xB5, 0x46, 0xE0, - 0xBE, 0x92, 0xE0, 0xBE, 0xB7, 0x46, 0xE0, 0xBE, - 0x9C, 0xE0, 0xBE, 0xB7, 0x46, 0xE0, 0xBE, 0xA1, - // Bytes 2680 - 26bf - 0xE0, 0xBE, 0xB7, 0x46, 0xE0, 0xBE, 0xA6, 0xE0, - 0xBE, 0xB7, 0x46, 0xE0, 0xBE, 0xAB, 0xE0, 0xBE, - 0xB7, 0x46, 0xE2, 0x80, 0xB2, 0xE2, 0x80, 0xB2, - 0x46, 0xE2, 0x80, 0xB5, 0xE2, 0x80, 0xB5, 0x46, - 0xE2, 0x88, 0xAB, 0xE2, 0x88, 0xAB, 0x46, 0xE2, - 0x88, 0xAE, 0xE2, 0x88, 0xAE, 0x46, 0xE3, 0x81, - 0xBB, 0xE3, 0x81, 0x8B, 0x46, 0xE3, 0x82, 0x88, - 0xE3, 0x82, 0x8A, 0x46, 0xE3, 0x82, 0xAD, 0xE3, - // Bytes 26c0 - 26ff - 0x83, 0xAD, 0x46, 0xE3, 0x82, 0xB3, 0xE3, 0x82, - 0xB3, 0x46, 0xE3, 0x82, 0xB3, 0xE3, 0x83, 0x88, - 0x46, 0xE3, 0x83, 0x88, 0xE3, 0x83, 0xB3, 0x46, - 0xE3, 0x83, 0x8A, 0xE3, 0x83, 0x8E, 0x46, 0xE3, - 0x83, 0x9B, 0xE3, 0x83, 0xB3, 0x46, 0xE3, 0x83, - 0x9F, 0xE3, 0x83, 0xAA, 0x46, 0xE3, 0x83, 0xAA, - 0xE3, 0x83, 0xA9, 0x46, 0xE3, 0x83, 0xAC, 0xE3, - 0x83, 0xA0, 0x46, 0xE5, 0xA4, 0xA7, 0xE6, 0xAD, - // Bytes 2700 - 273f - 0xA3, 0x46, 0xE5, 0xB9, 0xB3, 0xE6, 0x88, 0x90, - 0x46, 0xE6, 0x98, 0x8E, 0xE6, 0xB2, 0xBB, 0x46, - 0xE6, 0x98, 0xAD, 0xE5, 0x92, 0x8C, 0x47, 0x72, - 0x61, 0x64, 0xE2, 0x88, 0x95, 0x73, 0x47, 0xE3, - 0x80, 0x94, 0x53, 0xE3, 0x80, 0x95, 0x48, 0x28, - 0xE1, 0x84, 0x80, 0xE1, 0x85, 0xA1, 0x29, 0x48, - 0x28, 0xE1, 0x84, 0x82, 0xE1, 0x85, 0xA1, 0x29, - 0x48, 0x28, 0xE1, 0x84, 0x83, 0xE1, 0x85, 0xA1, - // Bytes 2740 - 277f - 0x29, 0x48, 0x28, 0xE1, 0x84, 0x85, 0xE1, 0x85, - 0xA1, 0x29, 0x48, 0x28, 0xE1, 0x84, 0x86, 0xE1, - 0x85, 0xA1, 0x29, 0x48, 0x28, 0xE1, 0x84, 0x87, - 0xE1, 0x85, 0xA1, 0x29, 0x48, 0x28, 0xE1, 0x84, - 0x89, 0xE1, 0x85, 0xA1, 0x29, 0x48, 0x28, 0xE1, - 0x84, 0x8B, 0xE1, 0x85, 0xA1, 0x29, 0x48, 0x28, - 0xE1, 0x84, 0x8C, 0xE1, 0x85, 0xA1, 0x29, 0x48, - 0x28, 0xE1, 0x84, 0x8C, 0xE1, 0x85, 0xAE, 0x29, - // Bytes 2780 - 27bf - 0x48, 0x28, 0xE1, 0x84, 0x8E, 0xE1, 0x85, 0xA1, - 0x29, 0x48, 0x28, 0xE1, 0x84, 0x8F, 0xE1, 0x85, - 0xA1, 0x29, 0x48, 0x28, 0xE1, 0x84, 0x90, 0xE1, - 0x85, 0xA1, 0x29, 0x48, 0x28, 0xE1, 0x84, 0x91, - 0xE1, 0x85, 0xA1, 0x29, 0x48, 0x28, 0xE1, 0x84, - 0x92, 0xE1, 0x85, 0xA1, 0x29, 0x48, 0x72, 0x61, - 0x64, 0xE2, 0x88, 0x95, 0x73, 0x32, 0x48, 0xD8, - 0xA7, 0xD9, 0x83, 0xD8, 0xA8, 0xD8, 0xB1, 0x48, - // Bytes 27c0 - 27ff - 0xD8, 0xA7, 0xD9, 0x84, 0xD9, 0x84, 0xD9, 0x87, - 0x48, 0xD8, 0xB1, 0xD8, 0xB3, 0xD9, 0x88, 0xD9, - 0x84, 0x48, 0xD8, 0xB1, 0xDB, 0x8C, 0xD8, 0xA7, - 0xD9, 0x84, 0x48, 0xD8, 0xB5, 0xD9, 0x84, 0xD8, - 0xB9, 0xD9, 0x85, 0x48, 0xD8, 0xB9, 0xD9, 0x84, - 0xD9, 0x8A, 0xD9, 0x87, 0x48, 0xD9, 0x85, 0xD8, - 0xAD, 0xD9, 0x85, 0xD8, 0xAF, 0x48, 0xD9, 0x88, - 0xD8, 0xB3, 0xD9, 0x84, 0xD9, 0x85, 0x49, 0xE2, - // Bytes 2800 - 283f - 0x80, 0xB2, 0xE2, 0x80, 0xB2, 0xE2, 0x80, 0xB2, - 0x49, 0xE2, 0x80, 0xB5, 0xE2, 0x80, 0xB5, 0xE2, - 0x80, 0xB5, 0x49, 0xE2, 0x88, 0xAB, 0xE2, 0x88, - 0xAB, 0xE2, 0x88, 0xAB, 0x49, 0xE2, 0x88, 0xAE, - 0xE2, 0x88, 0xAE, 0xE2, 0x88, 0xAE, 0x49, 0xE3, - 0x80, 0x94, 0xE4, 0xB8, 0x89, 0xE3, 0x80, 0x95, - 0x49, 0xE3, 0x80, 0x94, 0xE4, 0xBA, 0x8C, 0xE3, - 0x80, 0x95, 0x49, 0xE3, 0x80, 0x94, 0xE5, 0x8B, - // Bytes 2840 - 287f - 0x9D, 0xE3, 0x80, 0x95, 0x49, 0xE3, 0x80, 0x94, - 0xE5, 0xAE, 0x89, 0xE3, 0x80, 0x95, 0x49, 0xE3, - 0x80, 0x94, 0xE6, 0x89, 0x93, 0xE3, 0x80, 0x95, - 0x49, 0xE3, 0x80, 0x94, 0xE6, 0x95, 0x97, 0xE3, - 0x80, 0x95, 0x49, 0xE3, 0x80, 0x94, 0xE6, 0x9C, - 0xAC, 0xE3, 0x80, 0x95, 0x49, 0xE3, 0x80, 0x94, - 0xE7, 0x82, 0xB9, 0xE3, 0x80, 0x95, 0x49, 0xE3, - 0x80, 0x94, 0xE7, 0x9B, 0x97, 0xE3, 0x80, 0x95, - // Bytes 2880 - 28bf - 0x49, 0xE3, 0x82, 0xA2, 0xE3, 0x83, 0xBC, 0xE3, - 0x83, 0xAB, 0x49, 0xE3, 0x82, 0xA4, 0xE3, 0x83, - 0xB3, 0xE3, 0x83, 0x81, 0x49, 0xE3, 0x82, 0xA6, - 0xE3, 0x82, 0xA9, 0xE3, 0x83, 0xB3, 0x49, 0xE3, - 0x82, 0xAA, 0xE3, 0x83, 0xB3, 0xE3, 0x82, 0xB9, - 0x49, 0xE3, 0x82, 0xAA, 0xE3, 0x83, 0xBC, 0xE3, - 0x83, 0xA0, 0x49, 0xE3, 0x82, 0xAB, 0xE3, 0x82, - 0xA4, 0xE3, 0x83, 0xAA, 0x49, 0xE3, 0x82, 0xB1, - // Bytes 28c0 - 28ff - 0xE3, 0x83, 0xBC, 0xE3, 0x82, 0xB9, 0x49, 0xE3, - 0x82, 0xB3, 0xE3, 0x83, 0xAB, 0xE3, 0x83, 0x8A, - 0x49, 0xE3, 0x82, 0xBB, 0xE3, 0x83, 0xB3, 0xE3, - 0x83, 0x81, 0x49, 0xE3, 0x82, 0xBB, 0xE3, 0x83, - 0xB3, 0xE3, 0x83, 0x88, 0x49, 0xE3, 0x83, 0x86, - 0xE3, 0x82, 0x99, 0xE3, 0x82, 0xB7, 0x49, 0xE3, - 0x83, 0x88, 0xE3, 0x82, 0x99, 0xE3, 0x83, 0xAB, - 0x49, 0xE3, 0x83, 0x8E, 0xE3, 0x83, 0x83, 0xE3, - // Bytes 2900 - 293f - 0x83, 0x88, 0x49, 0xE3, 0x83, 0x8F, 0xE3, 0x82, - 0xA4, 0xE3, 0x83, 0x84, 0x49, 0xE3, 0x83, 0x92, - 0xE3, 0x82, 0x99, 0xE3, 0x83, 0xAB, 0x49, 0xE3, - 0x83, 0x92, 0xE3, 0x82, 0x9A, 0xE3, 0x82, 0xB3, - 0x49, 0xE3, 0x83, 0x95, 0xE3, 0x83, 0xA9, 0xE3, - 0x83, 0xB3, 0x49, 0xE3, 0x83, 0x98, 0xE3, 0x82, - 0x9A, 0xE3, 0x82, 0xBD, 0x49, 0xE3, 0x83, 0x98, - 0xE3, 0x83, 0xAB, 0xE3, 0x83, 0x84, 0x49, 0xE3, - // Bytes 2940 - 297f - 0x83, 0x9B, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0xAB, - 0x49, 0xE3, 0x83, 0x9B, 0xE3, 0x83, 0xBC, 0xE3, - 0x83, 0xB3, 0x49, 0xE3, 0x83, 0x9E, 0xE3, 0x82, - 0xA4, 0xE3, 0x83, 0xAB, 0x49, 0xE3, 0x83, 0x9E, - 0xE3, 0x83, 0x83, 0xE3, 0x83, 0x8F, 0x49, 0xE3, - 0x83, 0x9E, 0xE3, 0x83, 0xAB, 0xE3, 0x82, 0xAF, - 0x49, 0xE3, 0x83, 0xA4, 0xE3, 0x83, 0xBC, 0xE3, - 0x83, 0xAB, 0x49, 0xE3, 0x83, 0xA6, 0xE3, 0x82, - // Bytes 2980 - 29bf - 0xA2, 0xE3, 0x83, 0xB3, 0x49, 0xE3, 0x83, 0xAF, - 0xE3, 0x83, 0x83, 0xE3, 0x83, 0x88, 0x4C, 0xE2, - 0x80, 0xB2, 0xE2, 0x80, 0xB2, 0xE2, 0x80, 0xB2, - 0xE2, 0x80, 0xB2, 0x4C, 0xE2, 0x88, 0xAB, 0xE2, - 0x88, 0xAB, 0xE2, 0x88, 0xAB, 0xE2, 0x88, 0xAB, - 0x4C, 0xE3, 0x82, 0xA2, 0xE3, 0x83, 0xAB, 0xE3, - 0x83, 0x95, 0xE3, 0x82, 0xA1, 0x4C, 0xE3, 0x82, - 0xA8, 0xE3, 0x83, 0xBC, 0xE3, 0x82, 0xAB, 0xE3, - // Bytes 29c0 - 29ff - 0x83, 0xBC, 0x4C, 0xE3, 0x82, 0xAB, 0xE3, 0x82, - 0x99, 0xE3, 0x83, 0xAD, 0xE3, 0x83, 0xB3, 0x4C, - 0xE3, 0x82, 0xAB, 0xE3, 0x82, 0x99, 0xE3, 0x83, - 0xB3, 0xE3, 0x83, 0x9E, 0x4C, 0xE3, 0x82, 0xAB, - 0xE3, 0x83, 0xA9, 0xE3, 0x83, 0x83, 0xE3, 0x83, - 0x88, 0x4C, 0xE3, 0x82, 0xAB, 0xE3, 0x83, 0xAD, - 0xE3, 0x83, 0xAA, 0xE3, 0x83, 0xBC, 0x4C, 0xE3, - 0x82, 0xAD, 0xE3, 0x82, 0x99, 0xE3, 0x83, 0x8B, - // Bytes 2a00 - 2a3f - 0xE3, 0x83, 0xBC, 0x4C, 0xE3, 0x82, 0xAD, 0xE3, - 0x83, 0xA5, 0xE3, 0x83, 0xAA, 0xE3, 0x83, 0xBC, - 0x4C, 0xE3, 0x82, 0xAF, 0xE3, 0x82, 0x99, 0xE3, - 0x83, 0xA9, 0xE3, 0x83, 0xA0, 0x4C, 0xE3, 0x82, - 0xAF, 0xE3, 0x83, 0xAD, 0xE3, 0x83, 0xBC, 0xE3, - 0x83, 0x8D, 0x4C, 0xE3, 0x82, 0xB5, 0xE3, 0x82, - 0xA4, 0xE3, 0x82, 0xAF, 0xE3, 0x83, 0xAB, 0x4C, - 0xE3, 0x82, 0xBF, 0xE3, 0x82, 0x99, 0xE3, 0x83, - // Bytes 2a40 - 2a7f - 0xBC, 0xE3, 0x82, 0xB9, 0x4C, 0xE3, 0x83, 0x8F, - 0xE3, 0x82, 0x9A, 0xE3, 0x83, 0xBC, 0xE3, 0x83, - 0x84, 0x4C, 0xE3, 0x83, 0x92, 0xE3, 0x82, 0x9A, - 0xE3, 0x82, 0xAF, 0xE3, 0x83, 0xAB, 0x4C, 0xE3, - 0x83, 0x95, 0xE3, 0x82, 0xA3, 0xE3, 0x83, 0xBC, - 0xE3, 0x83, 0x88, 0x4C, 0xE3, 0x83, 0x98, 0xE3, - 0x82, 0x99, 0xE3, 0x83, 0xBC, 0xE3, 0x82, 0xBF, - 0x4C, 0xE3, 0x83, 0x98, 0xE3, 0x82, 0x9A, 0xE3, - // Bytes 2a80 - 2abf - 0x83, 0x8B, 0xE3, 0x83, 0x92, 0x4C, 0xE3, 0x83, - 0x98, 0xE3, 0x82, 0x9A, 0xE3, 0x83, 0xB3, 0xE3, - 0x82, 0xB9, 0x4C, 0xE3, 0x83, 0x9B, 0xE3, 0x82, - 0x99, 0xE3, 0x83, 0xAB, 0xE3, 0x83, 0x88, 0x4C, - 0xE3, 0x83, 0x9E, 0xE3, 0x82, 0xA4, 0xE3, 0x82, - 0xAF, 0xE3, 0x83, 0xAD, 0x4C, 0xE3, 0x83, 0x9F, - 0xE3, 0x82, 0xAF, 0xE3, 0x83, 0xAD, 0xE3, 0x83, - 0xB3, 0x4C, 0xE3, 0x83, 0xA1, 0xE3, 0x83, 0xBC, - // Bytes 2ac0 - 2aff - 0xE3, 0x83, 0x88, 0xE3, 0x83, 0xAB, 0x4C, 0xE3, - 0x83, 0xAA, 0xE3, 0x83, 0x83, 0xE3, 0x83, 0x88, - 0xE3, 0x83, 0xAB, 0x4C, 0xE3, 0x83, 0xAB, 0xE3, - 0x83, 0x92, 0xE3, 0x82, 0x9A, 0xE3, 0x83, 0xBC, - 0x4C, 0xE6, 0xA0, 0xAA, 0xE5, 0xBC, 0x8F, 0xE4, - 0xBC, 0x9A, 0xE7, 0xA4, 0xBE, 0x4E, 0x28, 0xE1, - 0x84, 0x8B, 0xE1, 0x85, 0xA9, 0xE1, 0x84, 0x92, - 0xE1, 0x85, 0xAE, 0x29, 0x4F, 0xD8, 0xAC, 0xD9, - // Bytes 2b00 - 2b3f - 0x84, 0x20, 0xD8, 0xAC, 0xD9, 0x84, 0xD8, 0xA7, - 0xD9, 0x84, 0xD9, 0x87, 0x4F, 0xE3, 0x82, 0xA2, - 0xE3, 0x83, 0x8F, 0xE3, 0x82, 0x9A, 0xE3, 0x83, - 0xBC, 0xE3, 0x83, 0x88, 0x4F, 0xE3, 0x82, 0xA2, - 0xE3, 0x83, 0xB3, 0xE3, 0x83, 0x98, 0xE3, 0x82, - 0x9A, 0xE3, 0x82, 0xA2, 0x4F, 0xE3, 0x82, 0xAD, - 0xE3, 0x83, 0xAD, 0xE3, 0x83, 0xAF, 0xE3, 0x83, - 0x83, 0xE3, 0x83, 0x88, 0x4F, 0xE3, 0x82, 0xB5, - // Bytes 2b40 - 2b7f - 0xE3, 0x83, 0xB3, 0xE3, 0x83, 0x81, 0xE3, 0x83, - 0xBC, 0xE3, 0x83, 0xA0, 0x4F, 0xE3, 0x83, 0x8F, - 0xE3, 0x82, 0x99, 0xE3, 0x83, 0xBC, 0xE3, 0x83, - 0xAC, 0xE3, 0x83, 0xAB, 0x4F, 0xE3, 0x83, 0x98, - 0xE3, 0x82, 0xAF, 0xE3, 0x82, 0xBF, 0xE3, 0x83, - 0xBC, 0xE3, 0x83, 0xAB, 0x4F, 0xE3, 0x83, 0x9B, - 0xE3, 0x82, 0x9A, 0xE3, 0x82, 0xA4, 0xE3, 0x83, - 0xB3, 0xE3, 0x83, 0x88, 0x4F, 0xE3, 0x83, 0x9E, - // Bytes 2b80 - 2bbf - 0xE3, 0x83, 0xB3, 0xE3, 0x82, 0xB7, 0xE3, 0x83, - 0xA7, 0xE3, 0x83, 0xB3, 0x4F, 0xE3, 0x83, 0xA1, - 0xE3, 0x82, 0xAB, 0xE3, 0x82, 0x99, 0xE3, 0x83, - 0x88, 0xE3, 0x83, 0xB3, 0x4F, 0xE3, 0x83, 0xAB, - 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0x95, 0xE3, 0x82, - 0x99, 0xE3, 0x83, 0xAB, 0x51, 0x28, 0xE1, 0x84, - 0x8B, 0xE1, 0x85, 0xA9, 0xE1, 0x84, 0x8C, 0xE1, - 0x85, 0xA5, 0xE1, 0x86, 0xAB, 0x29, 0x52, 0xE3, - // Bytes 2bc0 - 2bff - 0x82, 0xAD, 0xE3, 0x82, 0x99, 0xE3, 0x83, 0xAB, - 0xE3, 0x82, 0xBF, 0xE3, 0x82, 0x99, 0xE3, 0x83, - 0xBC, 0x52, 0xE3, 0x82, 0xAD, 0xE3, 0x83, 0xAD, - 0xE3, 0x82, 0xAF, 0xE3, 0x82, 0x99, 0xE3, 0x83, - 0xA9, 0xE3, 0x83, 0xA0, 0x52, 0xE3, 0x82, 0xAD, - 0xE3, 0x83, 0xAD, 0xE3, 0x83, 0xA1, 0xE3, 0x83, - 0xBC, 0xE3, 0x83, 0x88, 0xE3, 0x83, 0xAB, 0x52, - 0xE3, 0x82, 0xAF, 0xE3, 0x82, 0x99, 0xE3, 0x83, - // Bytes 2c00 - 2c3f - 0xA9, 0xE3, 0x83, 0xA0, 0xE3, 0x83, 0x88, 0xE3, - 0x83, 0xB3, 0x52, 0xE3, 0x82, 0xAF, 0xE3, 0x83, - 0xAB, 0xE3, 0x82, 0xBB, 0xE3, 0x82, 0x99, 0xE3, - 0x82, 0xA4, 0xE3, 0x83, 0xAD, 0x52, 0xE3, 0x83, - 0x8F, 0xE3, 0x82, 0x9A, 0xE3, 0x83, 0xBC, 0xE3, - 0x82, 0xBB, 0xE3, 0x83, 0xB3, 0xE3, 0x83, 0x88, - 0x52, 0xE3, 0x83, 0x92, 0xE3, 0x82, 0x9A, 0xE3, - 0x82, 0xA2, 0xE3, 0x82, 0xB9, 0xE3, 0x83, 0x88, - // Bytes 2c40 - 2c7f - 0xE3, 0x83, 0xAB, 0x52, 0xE3, 0x83, 0x95, 0xE3, - 0x82, 0x99, 0xE3, 0x83, 0x83, 0xE3, 0x82, 0xB7, - 0xE3, 0x82, 0xA7, 0xE3, 0x83, 0xAB, 0x52, 0xE3, - 0x83, 0x9F, 0xE3, 0x83, 0xAA, 0xE3, 0x83, 0x8F, - 0xE3, 0x82, 0x99, 0xE3, 0x83, 0xBC, 0xE3, 0x83, - 0xAB, 0x52, 0xE3, 0x83, 0xAC, 0xE3, 0x83, 0xB3, - 0xE3, 0x83, 0x88, 0xE3, 0x82, 0xB1, 0xE3, 0x82, - 0x99, 0xE3, 0x83, 0xB3, 0x61, 0xD8, 0xB5, 0xD9, - // Bytes 2c80 - 2cbf - 0x84, 0xD9, 0x89, 0x20, 0xD8, 0xA7, 0xD9, 0x84, - 0xD9, 0x84, 0xD9, 0x87, 0x20, 0xD8, 0xB9, 0xD9, - 0x84, 0xD9, 0x8A, 0xD9, 0x87, 0x20, 0xD9, 0x88, - 0xD8, 0xB3, 0xD9, 0x84, 0xD9, 0x85, 0x06, 0xE0, - 0xA7, 0x87, 0xE0, 0xA6, 0xBE, 0x01, 0x06, 0xE0, - 0xA7, 0x87, 0xE0, 0xA7, 0x97, 0x01, 0x06, 0xE0, - 0xAD, 0x87, 0xE0, 0xAC, 0xBE, 0x01, 0x06, 0xE0, - 0xAD, 0x87, 0xE0, 0xAD, 0x96, 0x01, 0x06, 0xE0, - // Bytes 2cc0 - 2cff - 0xAD, 0x87, 0xE0, 0xAD, 0x97, 0x01, 0x06, 0xE0, - 0xAE, 0x92, 0xE0, 0xAF, 0x97, 0x01, 0x06, 0xE0, - 0xAF, 0x86, 0xE0, 0xAE, 0xBE, 0x01, 0x06, 0xE0, - 0xAF, 0x86, 0xE0, 0xAF, 0x97, 0x01, 0x06, 0xE0, - 0xAF, 0x87, 0xE0, 0xAE, 0xBE, 0x01, 0x06, 0xE0, - 0xB2, 0xBF, 0xE0, 0xB3, 0x95, 0x01, 0x06, 0xE0, - 0xB3, 0x86, 0xE0, 0xB3, 0x95, 0x01, 0x06, 0xE0, - 0xB3, 0x86, 0xE0, 0xB3, 0x96, 0x01, 0x06, 0xE0, - // Bytes 2d00 - 2d3f - 0xB5, 0x86, 0xE0, 0xB4, 0xBE, 0x01, 0x06, 0xE0, - 0xB5, 0x86, 0xE0, 0xB5, 0x97, 0x01, 0x06, 0xE0, - 0xB5, 0x87, 0xE0, 0xB4, 0xBE, 0x01, 0x06, 0xE0, - 0xB7, 0x99, 0xE0, 0xB7, 0x9F, 0x01, 0x06, 0xE1, - 0x80, 0xA5, 0xE1, 0x80, 0xAE, 0x01, 0x06, 0xE1, - 0xAC, 0x85, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1, - 0xAC, 0x87, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1, - 0xAC, 0x89, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1, - // Bytes 2d40 - 2d7f - 0xAC, 0x8B, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1, - 0xAC, 0x8D, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1, - 0xAC, 0x91, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1, - 0xAC, 0xBA, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1, - 0xAC, 0xBC, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1, - 0xAC, 0xBE, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1, - 0xAC, 0xBF, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1, - 0xAD, 0x82, 0xE1, 0xAC, 0xB5, 0x01, 0x08, 0xF0, - // Bytes 2d80 - 2dbf - 0x91, 0x84, 0xB1, 0xF0, 0x91, 0x84, 0xA7, 0x01, - 0x08, 0xF0, 0x91, 0x84, 0xB2, 0xF0, 0x91, 0x84, - 0xA7, 0x01, 0x08, 0xF0, 0x91, 0x8D, 0x87, 0xF0, - 0x91, 0x8C, 0xBE, 0x01, 0x08, 0xF0, 0x91, 0x8D, - 0x87, 0xF0, 0x91, 0x8D, 0x97, 0x01, 0x08, 0xF0, - 0x91, 0x92, 0xB9, 0xF0, 0x91, 0x92, 0xB0, 0x01, - 0x08, 0xF0, 0x91, 0x92, 0xB9, 0xF0, 0x91, 0x92, - 0xBA, 0x01, 0x08, 0xF0, 0x91, 0x92, 0xB9, 0xF0, - // Bytes 2dc0 - 2dff - 0x91, 0x92, 0xBD, 0x01, 0x08, 0xF0, 0x91, 0x96, - 0xB8, 0xF0, 0x91, 0x96, 0xAF, 0x01, 0x08, 0xF0, - 0x91, 0x96, 0xB9, 0xF0, 0x91, 0x96, 0xAF, 0x01, - 0x09, 0xE0, 0xB3, 0x86, 0xE0, 0xB3, 0x82, 0xE0, - 0xB3, 0x95, 0x02, 0x09, 0xE0, 0xB7, 0x99, 0xE0, - 0xB7, 0x8F, 0xE0, 0xB7, 0x8A, 0x12, 0x44, 0x44, - 0x5A, 0xCC, 0x8C, 0xC9, 0x44, 0x44, 0x7A, 0xCC, - 0x8C, 0xC9, 0x44, 0x64, 0x7A, 0xCC, 0x8C, 0xC9, - // Bytes 2e00 - 2e3f - 0x46, 0xD9, 0x84, 0xD8, 0xA7, 0xD9, 0x93, 0xC9, - 0x46, 0xD9, 0x84, 0xD8, 0xA7, 0xD9, 0x94, 0xC9, - 0x46, 0xD9, 0x84, 0xD8, 0xA7, 0xD9, 0x95, 0xB5, - 0x46, 0xE1, 0x84, 0x80, 0xE1, 0x85, 0xA1, 0x01, - 0x46, 0xE1, 0x84, 0x82, 0xE1, 0x85, 0xA1, 0x01, - 0x46, 0xE1, 0x84, 0x83, 0xE1, 0x85, 0xA1, 0x01, - 0x46, 0xE1, 0x84, 0x85, 0xE1, 0x85, 0xA1, 0x01, - 0x46, 0xE1, 0x84, 0x86, 0xE1, 0x85, 0xA1, 0x01, - // Bytes 2e40 - 2e7f - 0x46, 0xE1, 0x84, 0x87, 0xE1, 0x85, 0xA1, 0x01, - 0x46, 0xE1, 0x84, 0x89, 0xE1, 0x85, 0xA1, 0x01, - 0x46, 0xE1, 0x84, 0x8B, 0xE1, 0x85, 0xA1, 0x01, - 0x46, 0xE1, 0x84, 0x8B, 0xE1, 0x85, 0xAE, 0x01, - 0x46, 0xE1, 0x84, 0x8C, 0xE1, 0x85, 0xA1, 0x01, - 0x46, 0xE1, 0x84, 0x8E, 0xE1, 0x85, 0xA1, 0x01, - 0x46, 0xE1, 0x84, 0x8F, 0xE1, 0x85, 0xA1, 0x01, - 0x46, 0xE1, 0x84, 0x90, 0xE1, 0x85, 0xA1, 0x01, - // Bytes 2e80 - 2ebf - 0x46, 0xE1, 0x84, 0x91, 0xE1, 0x85, 0xA1, 0x01, - 0x46, 0xE1, 0x84, 0x92, 0xE1, 0x85, 0xA1, 0x01, - 0x49, 0xE3, 0x83, 0xA1, 0xE3, 0x82, 0xAB, 0xE3, - 0x82, 0x99, 0x0D, 0x4C, 0xE1, 0x84, 0x8C, 0xE1, - 0x85, 0xAE, 0xE1, 0x84, 0x8B, 0xE1, 0x85, 0xB4, - 0x01, 0x4C, 0xE3, 0x82, 0xAD, 0xE3, 0x82, 0x99, - 0xE3, 0x82, 0xAB, 0xE3, 0x82, 0x99, 0x0D, 0x4C, - 0xE3, 0x82, 0xB3, 0xE3, 0x83, 0xBC, 0xE3, 0x83, - // Bytes 2ec0 - 2eff - 0x9B, 0xE3, 0x82, 0x9A, 0x0D, 0x4C, 0xE3, 0x83, - 0xA4, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0x88, 0xE3, - 0x82, 0x99, 0x0D, 0x4F, 0xE1, 0x84, 0x8E, 0xE1, - 0x85, 0xA1, 0xE1, 0x86, 0xB7, 0xE1, 0x84, 0x80, - 0xE1, 0x85, 0xA9, 0x01, 0x4F, 0xE3, 0x82, 0xA4, - 0xE3, 0x83, 0x8B, 0xE3, 0x83, 0xB3, 0xE3, 0x82, - 0xAF, 0xE3, 0x82, 0x99, 0x0D, 0x4F, 0xE3, 0x82, - 0xB7, 0xE3, 0x83, 0xAA, 0xE3, 0x83, 0xB3, 0xE3, - // Bytes 2f00 - 2f3f - 0x82, 0xAF, 0xE3, 0x82, 0x99, 0x0D, 0x4F, 0xE3, - 0x83, 0x98, 0xE3, 0x82, 0x9A, 0xE3, 0x83, 0xBC, - 0xE3, 0x82, 0xB7, 0xE3, 0x82, 0x99, 0x0D, 0x4F, - 0xE3, 0x83, 0x9B, 0xE3, 0x82, 0x9A, 0xE3, 0x83, - 0xB3, 0xE3, 0x83, 0x88, 0xE3, 0x82, 0x99, 0x0D, - 0x52, 0xE3, 0x82, 0xA8, 0xE3, 0x82, 0xB9, 0xE3, - 0x82, 0xAF, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0x88, - 0xE3, 0x82, 0x99, 0x0D, 0x52, 0xE3, 0x83, 0x95, - // Bytes 2f40 - 2f7f - 0xE3, 0x82, 0xA1, 0xE3, 0x83, 0xA9, 0xE3, 0x83, - 0x83, 0xE3, 0x83, 0x88, 0xE3, 0x82, 0x99, 0x0D, - 0x86, 0xE0, 0xB3, 0x86, 0xE0, 0xB3, 0x82, 0x01, - 0x86, 0xE0, 0xB7, 0x99, 0xE0, 0xB7, 0x8F, 0x01, - 0x03, 0x3C, 0xCC, 0xB8, 0x05, 0x03, 0x3D, 0xCC, - 0xB8, 0x05, 0x03, 0x3E, 0xCC, 0xB8, 0x05, 0x03, - 0x41, 0xCC, 0x80, 0xC9, 0x03, 0x41, 0xCC, 0x81, - 0xC9, 0x03, 0x41, 0xCC, 0x83, 0xC9, 0x03, 0x41, - // Bytes 2f80 - 2fbf - 0xCC, 0x84, 0xC9, 0x03, 0x41, 0xCC, 0x89, 0xC9, - 0x03, 0x41, 0xCC, 0x8C, 0xC9, 0x03, 0x41, 0xCC, - 0x8F, 0xC9, 0x03, 0x41, 0xCC, 0x91, 0xC9, 0x03, - 0x41, 0xCC, 0xA5, 0xB5, 0x03, 0x41, 0xCC, 0xA8, - 0xA5, 0x03, 0x42, 0xCC, 0x87, 0xC9, 0x03, 0x42, - 0xCC, 0xA3, 0xB5, 0x03, 0x42, 0xCC, 0xB1, 0xB5, - 0x03, 0x43, 0xCC, 0x81, 0xC9, 0x03, 0x43, 0xCC, - 0x82, 0xC9, 0x03, 0x43, 0xCC, 0x87, 0xC9, 0x03, - // Bytes 2fc0 - 2fff - 0x43, 0xCC, 0x8C, 0xC9, 0x03, 0x44, 0xCC, 0x87, - 0xC9, 0x03, 0x44, 0xCC, 0x8C, 0xC9, 0x03, 0x44, - 0xCC, 0xA3, 0xB5, 0x03, 0x44, 0xCC, 0xA7, 0xA5, - 0x03, 0x44, 0xCC, 0xAD, 0xB5, 0x03, 0x44, 0xCC, - 0xB1, 0xB5, 0x03, 0x45, 0xCC, 0x80, 0xC9, 0x03, - 0x45, 0xCC, 0x81, 0xC9, 0x03, 0x45, 0xCC, 0x83, - 0xC9, 0x03, 0x45, 0xCC, 0x86, 0xC9, 0x03, 0x45, - 0xCC, 0x87, 0xC9, 0x03, 0x45, 0xCC, 0x88, 0xC9, - // Bytes 3000 - 303f - 0x03, 0x45, 0xCC, 0x89, 0xC9, 0x03, 0x45, 0xCC, - 0x8C, 0xC9, 0x03, 0x45, 0xCC, 0x8F, 0xC9, 0x03, - 0x45, 0xCC, 0x91, 0xC9, 0x03, 0x45, 0xCC, 0xA8, - 0xA5, 0x03, 0x45, 0xCC, 0xAD, 0xB5, 0x03, 0x45, - 0xCC, 0xB0, 0xB5, 0x03, 0x46, 0xCC, 0x87, 0xC9, - 0x03, 0x47, 0xCC, 0x81, 0xC9, 0x03, 0x47, 0xCC, - 0x82, 0xC9, 0x03, 0x47, 0xCC, 0x84, 0xC9, 0x03, - 0x47, 0xCC, 0x86, 0xC9, 0x03, 0x47, 0xCC, 0x87, - // Bytes 3040 - 307f - 0xC9, 0x03, 0x47, 0xCC, 0x8C, 0xC9, 0x03, 0x47, - 0xCC, 0xA7, 0xA5, 0x03, 0x48, 0xCC, 0x82, 0xC9, - 0x03, 0x48, 0xCC, 0x87, 0xC9, 0x03, 0x48, 0xCC, - 0x88, 0xC9, 0x03, 0x48, 0xCC, 0x8C, 0xC9, 0x03, - 0x48, 0xCC, 0xA3, 0xB5, 0x03, 0x48, 0xCC, 0xA7, - 0xA5, 0x03, 0x48, 0xCC, 0xAE, 0xB5, 0x03, 0x49, - 0xCC, 0x80, 0xC9, 0x03, 0x49, 0xCC, 0x81, 0xC9, - 0x03, 0x49, 0xCC, 0x82, 0xC9, 0x03, 0x49, 0xCC, - // Bytes 3080 - 30bf - 0x83, 0xC9, 0x03, 0x49, 0xCC, 0x84, 0xC9, 0x03, - 0x49, 0xCC, 0x86, 0xC9, 0x03, 0x49, 0xCC, 0x87, - 0xC9, 0x03, 0x49, 0xCC, 0x89, 0xC9, 0x03, 0x49, - 0xCC, 0x8C, 0xC9, 0x03, 0x49, 0xCC, 0x8F, 0xC9, - 0x03, 0x49, 0xCC, 0x91, 0xC9, 0x03, 0x49, 0xCC, - 0xA3, 0xB5, 0x03, 0x49, 0xCC, 0xA8, 0xA5, 0x03, - 0x49, 0xCC, 0xB0, 0xB5, 0x03, 0x4A, 0xCC, 0x82, - 0xC9, 0x03, 0x4B, 0xCC, 0x81, 0xC9, 0x03, 0x4B, - // Bytes 30c0 - 30ff - 0xCC, 0x8C, 0xC9, 0x03, 0x4B, 0xCC, 0xA3, 0xB5, - 0x03, 0x4B, 0xCC, 0xA7, 0xA5, 0x03, 0x4B, 0xCC, - 0xB1, 0xB5, 0x03, 0x4C, 0xCC, 0x81, 0xC9, 0x03, - 0x4C, 0xCC, 0x8C, 0xC9, 0x03, 0x4C, 0xCC, 0xA7, - 0xA5, 0x03, 0x4C, 0xCC, 0xAD, 0xB5, 0x03, 0x4C, - 0xCC, 0xB1, 0xB5, 0x03, 0x4D, 0xCC, 0x81, 0xC9, - 0x03, 0x4D, 0xCC, 0x87, 0xC9, 0x03, 0x4D, 0xCC, - 0xA3, 0xB5, 0x03, 0x4E, 0xCC, 0x80, 0xC9, 0x03, - // Bytes 3100 - 313f - 0x4E, 0xCC, 0x81, 0xC9, 0x03, 0x4E, 0xCC, 0x83, - 0xC9, 0x03, 0x4E, 0xCC, 0x87, 0xC9, 0x03, 0x4E, - 0xCC, 0x8C, 0xC9, 0x03, 0x4E, 0xCC, 0xA3, 0xB5, - 0x03, 0x4E, 0xCC, 0xA7, 0xA5, 0x03, 0x4E, 0xCC, - 0xAD, 0xB5, 0x03, 0x4E, 0xCC, 0xB1, 0xB5, 0x03, - 0x4F, 0xCC, 0x80, 0xC9, 0x03, 0x4F, 0xCC, 0x81, - 0xC9, 0x03, 0x4F, 0xCC, 0x86, 0xC9, 0x03, 0x4F, - 0xCC, 0x89, 0xC9, 0x03, 0x4F, 0xCC, 0x8B, 0xC9, - // Bytes 3140 - 317f - 0x03, 0x4F, 0xCC, 0x8C, 0xC9, 0x03, 0x4F, 0xCC, - 0x8F, 0xC9, 0x03, 0x4F, 0xCC, 0x91, 0xC9, 0x03, - 0x50, 0xCC, 0x81, 0xC9, 0x03, 0x50, 0xCC, 0x87, - 0xC9, 0x03, 0x52, 0xCC, 0x81, 0xC9, 0x03, 0x52, - 0xCC, 0x87, 0xC9, 0x03, 0x52, 0xCC, 0x8C, 0xC9, - 0x03, 0x52, 0xCC, 0x8F, 0xC9, 0x03, 0x52, 0xCC, - 0x91, 0xC9, 0x03, 0x52, 0xCC, 0xA7, 0xA5, 0x03, - 0x52, 0xCC, 0xB1, 0xB5, 0x03, 0x53, 0xCC, 0x82, - // Bytes 3180 - 31bf - 0xC9, 0x03, 0x53, 0xCC, 0x87, 0xC9, 0x03, 0x53, - 0xCC, 0xA6, 0xB5, 0x03, 0x53, 0xCC, 0xA7, 0xA5, - 0x03, 0x54, 0xCC, 0x87, 0xC9, 0x03, 0x54, 0xCC, - 0x8C, 0xC9, 0x03, 0x54, 0xCC, 0xA3, 0xB5, 0x03, - 0x54, 0xCC, 0xA6, 0xB5, 0x03, 0x54, 0xCC, 0xA7, - 0xA5, 0x03, 0x54, 0xCC, 0xAD, 0xB5, 0x03, 0x54, - 0xCC, 0xB1, 0xB5, 0x03, 0x55, 0xCC, 0x80, 0xC9, - 0x03, 0x55, 0xCC, 0x81, 0xC9, 0x03, 0x55, 0xCC, - // Bytes 31c0 - 31ff - 0x82, 0xC9, 0x03, 0x55, 0xCC, 0x86, 0xC9, 0x03, - 0x55, 0xCC, 0x89, 0xC9, 0x03, 0x55, 0xCC, 0x8A, - 0xC9, 0x03, 0x55, 0xCC, 0x8B, 0xC9, 0x03, 0x55, - 0xCC, 0x8C, 0xC9, 0x03, 0x55, 0xCC, 0x8F, 0xC9, - 0x03, 0x55, 0xCC, 0x91, 0xC9, 0x03, 0x55, 0xCC, - 0xA3, 0xB5, 0x03, 0x55, 0xCC, 0xA4, 0xB5, 0x03, - 0x55, 0xCC, 0xA8, 0xA5, 0x03, 0x55, 0xCC, 0xAD, - 0xB5, 0x03, 0x55, 0xCC, 0xB0, 0xB5, 0x03, 0x56, - // Bytes 3200 - 323f - 0xCC, 0x83, 0xC9, 0x03, 0x56, 0xCC, 0xA3, 0xB5, - 0x03, 0x57, 0xCC, 0x80, 0xC9, 0x03, 0x57, 0xCC, - 0x81, 0xC9, 0x03, 0x57, 0xCC, 0x82, 0xC9, 0x03, - 0x57, 0xCC, 0x87, 0xC9, 0x03, 0x57, 0xCC, 0x88, - 0xC9, 0x03, 0x57, 0xCC, 0xA3, 0xB5, 0x03, 0x58, - 0xCC, 0x87, 0xC9, 0x03, 0x58, 0xCC, 0x88, 0xC9, - 0x03, 0x59, 0xCC, 0x80, 0xC9, 0x03, 0x59, 0xCC, - 0x81, 0xC9, 0x03, 0x59, 0xCC, 0x82, 0xC9, 0x03, - // Bytes 3240 - 327f - 0x59, 0xCC, 0x83, 0xC9, 0x03, 0x59, 0xCC, 0x84, - 0xC9, 0x03, 0x59, 0xCC, 0x87, 0xC9, 0x03, 0x59, - 0xCC, 0x88, 0xC9, 0x03, 0x59, 0xCC, 0x89, 0xC9, - 0x03, 0x59, 0xCC, 0xA3, 0xB5, 0x03, 0x5A, 0xCC, - 0x81, 0xC9, 0x03, 0x5A, 0xCC, 0x82, 0xC9, 0x03, - 0x5A, 0xCC, 0x87, 0xC9, 0x03, 0x5A, 0xCC, 0x8C, - 0xC9, 0x03, 0x5A, 0xCC, 0xA3, 0xB5, 0x03, 0x5A, - 0xCC, 0xB1, 0xB5, 0x03, 0x61, 0xCC, 0x80, 0xC9, - // Bytes 3280 - 32bf - 0x03, 0x61, 0xCC, 0x81, 0xC9, 0x03, 0x61, 0xCC, - 0x83, 0xC9, 0x03, 0x61, 0xCC, 0x84, 0xC9, 0x03, - 0x61, 0xCC, 0x89, 0xC9, 0x03, 0x61, 0xCC, 0x8C, - 0xC9, 0x03, 0x61, 0xCC, 0x8F, 0xC9, 0x03, 0x61, - 0xCC, 0x91, 0xC9, 0x03, 0x61, 0xCC, 0xA5, 0xB5, - 0x03, 0x61, 0xCC, 0xA8, 0xA5, 0x03, 0x62, 0xCC, - 0x87, 0xC9, 0x03, 0x62, 0xCC, 0xA3, 0xB5, 0x03, - 0x62, 0xCC, 0xB1, 0xB5, 0x03, 0x63, 0xCC, 0x81, - // Bytes 32c0 - 32ff - 0xC9, 0x03, 0x63, 0xCC, 0x82, 0xC9, 0x03, 0x63, - 0xCC, 0x87, 0xC9, 0x03, 0x63, 0xCC, 0x8C, 0xC9, - 0x03, 0x64, 0xCC, 0x87, 0xC9, 0x03, 0x64, 0xCC, - 0x8C, 0xC9, 0x03, 0x64, 0xCC, 0xA3, 0xB5, 0x03, - 0x64, 0xCC, 0xA7, 0xA5, 0x03, 0x64, 0xCC, 0xAD, - 0xB5, 0x03, 0x64, 0xCC, 0xB1, 0xB5, 0x03, 0x65, - 0xCC, 0x80, 0xC9, 0x03, 0x65, 0xCC, 0x81, 0xC9, - 0x03, 0x65, 0xCC, 0x83, 0xC9, 0x03, 0x65, 0xCC, - // Bytes 3300 - 333f - 0x86, 0xC9, 0x03, 0x65, 0xCC, 0x87, 0xC9, 0x03, - 0x65, 0xCC, 0x88, 0xC9, 0x03, 0x65, 0xCC, 0x89, - 0xC9, 0x03, 0x65, 0xCC, 0x8C, 0xC9, 0x03, 0x65, - 0xCC, 0x8F, 0xC9, 0x03, 0x65, 0xCC, 0x91, 0xC9, - 0x03, 0x65, 0xCC, 0xA8, 0xA5, 0x03, 0x65, 0xCC, - 0xAD, 0xB5, 0x03, 0x65, 0xCC, 0xB0, 0xB5, 0x03, - 0x66, 0xCC, 0x87, 0xC9, 0x03, 0x67, 0xCC, 0x81, - 0xC9, 0x03, 0x67, 0xCC, 0x82, 0xC9, 0x03, 0x67, - // Bytes 3340 - 337f - 0xCC, 0x84, 0xC9, 0x03, 0x67, 0xCC, 0x86, 0xC9, - 0x03, 0x67, 0xCC, 0x87, 0xC9, 0x03, 0x67, 0xCC, - 0x8C, 0xC9, 0x03, 0x67, 0xCC, 0xA7, 0xA5, 0x03, - 0x68, 0xCC, 0x82, 0xC9, 0x03, 0x68, 0xCC, 0x87, - 0xC9, 0x03, 0x68, 0xCC, 0x88, 0xC9, 0x03, 0x68, - 0xCC, 0x8C, 0xC9, 0x03, 0x68, 0xCC, 0xA3, 0xB5, - 0x03, 0x68, 0xCC, 0xA7, 0xA5, 0x03, 0x68, 0xCC, - 0xAE, 0xB5, 0x03, 0x68, 0xCC, 0xB1, 0xB5, 0x03, - // Bytes 3380 - 33bf - 0x69, 0xCC, 0x80, 0xC9, 0x03, 0x69, 0xCC, 0x81, - 0xC9, 0x03, 0x69, 0xCC, 0x82, 0xC9, 0x03, 0x69, - 0xCC, 0x83, 0xC9, 0x03, 0x69, 0xCC, 0x84, 0xC9, - 0x03, 0x69, 0xCC, 0x86, 0xC9, 0x03, 0x69, 0xCC, - 0x89, 0xC9, 0x03, 0x69, 0xCC, 0x8C, 0xC9, 0x03, - 0x69, 0xCC, 0x8F, 0xC9, 0x03, 0x69, 0xCC, 0x91, - 0xC9, 0x03, 0x69, 0xCC, 0xA3, 0xB5, 0x03, 0x69, - 0xCC, 0xA8, 0xA5, 0x03, 0x69, 0xCC, 0xB0, 0xB5, - // Bytes 33c0 - 33ff - 0x03, 0x6A, 0xCC, 0x82, 0xC9, 0x03, 0x6A, 0xCC, - 0x8C, 0xC9, 0x03, 0x6B, 0xCC, 0x81, 0xC9, 0x03, - 0x6B, 0xCC, 0x8C, 0xC9, 0x03, 0x6B, 0xCC, 0xA3, - 0xB5, 0x03, 0x6B, 0xCC, 0xA7, 0xA5, 0x03, 0x6B, - 0xCC, 0xB1, 0xB5, 0x03, 0x6C, 0xCC, 0x81, 0xC9, - 0x03, 0x6C, 0xCC, 0x8C, 0xC9, 0x03, 0x6C, 0xCC, - 0xA7, 0xA5, 0x03, 0x6C, 0xCC, 0xAD, 0xB5, 0x03, - 0x6C, 0xCC, 0xB1, 0xB5, 0x03, 0x6D, 0xCC, 0x81, - // Bytes 3400 - 343f - 0xC9, 0x03, 0x6D, 0xCC, 0x87, 0xC9, 0x03, 0x6D, - 0xCC, 0xA3, 0xB5, 0x03, 0x6E, 0xCC, 0x80, 0xC9, - 0x03, 0x6E, 0xCC, 0x81, 0xC9, 0x03, 0x6E, 0xCC, - 0x83, 0xC9, 0x03, 0x6E, 0xCC, 0x87, 0xC9, 0x03, - 0x6E, 0xCC, 0x8C, 0xC9, 0x03, 0x6E, 0xCC, 0xA3, - 0xB5, 0x03, 0x6E, 0xCC, 0xA7, 0xA5, 0x03, 0x6E, - 0xCC, 0xAD, 0xB5, 0x03, 0x6E, 0xCC, 0xB1, 0xB5, - 0x03, 0x6F, 0xCC, 0x80, 0xC9, 0x03, 0x6F, 0xCC, - // Bytes 3440 - 347f - 0x81, 0xC9, 0x03, 0x6F, 0xCC, 0x86, 0xC9, 0x03, - 0x6F, 0xCC, 0x89, 0xC9, 0x03, 0x6F, 0xCC, 0x8B, - 0xC9, 0x03, 0x6F, 0xCC, 0x8C, 0xC9, 0x03, 0x6F, - 0xCC, 0x8F, 0xC9, 0x03, 0x6F, 0xCC, 0x91, 0xC9, - 0x03, 0x70, 0xCC, 0x81, 0xC9, 0x03, 0x70, 0xCC, - 0x87, 0xC9, 0x03, 0x72, 0xCC, 0x81, 0xC9, 0x03, - 0x72, 0xCC, 0x87, 0xC9, 0x03, 0x72, 0xCC, 0x8C, - 0xC9, 0x03, 0x72, 0xCC, 0x8F, 0xC9, 0x03, 0x72, - // Bytes 3480 - 34bf - 0xCC, 0x91, 0xC9, 0x03, 0x72, 0xCC, 0xA7, 0xA5, - 0x03, 0x72, 0xCC, 0xB1, 0xB5, 0x03, 0x73, 0xCC, - 0x82, 0xC9, 0x03, 0x73, 0xCC, 0x87, 0xC9, 0x03, - 0x73, 0xCC, 0xA6, 0xB5, 0x03, 0x73, 0xCC, 0xA7, - 0xA5, 0x03, 0x74, 0xCC, 0x87, 0xC9, 0x03, 0x74, - 0xCC, 0x88, 0xC9, 0x03, 0x74, 0xCC, 0x8C, 0xC9, - 0x03, 0x74, 0xCC, 0xA3, 0xB5, 0x03, 0x74, 0xCC, - 0xA6, 0xB5, 0x03, 0x74, 0xCC, 0xA7, 0xA5, 0x03, - // Bytes 34c0 - 34ff - 0x74, 0xCC, 0xAD, 0xB5, 0x03, 0x74, 0xCC, 0xB1, - 0xB5, 0x03, 0x75, 0xCC, 0x80, 0xC9, 0x03, 0x75, - 0xCC, 0x81, 0xC9, 0x03, 0x75, 0xCC, 0x82, 0xC9, - 0x03, 0x75, 0xCC, 0x86, 0xC9, 0x03, 0x75, 0xCC, - 0x89, 0xC9, 0x03, 0x75, 0xCC, 0x8A, 0xC9, 0x03, - 0x75, 0xCC, 0x8B, 0xC9, 0x03, 0x75, 0xCC, 0x8C, - 0xC9, 0x03, 0x75, 0xCC, 0x8F, 0xC9, 0x03, 0x75, - 0xCC, 0x91, 0xC9, 0x03, 0x75, 0xCC, 0xA3, 0xB5, - // Bytes 3500 - 353f - 0x03, 0x75, 0xCC, 0xA4, 0xB5, 0x03, 0x75, 0xCC, - 0xA8, 0xA5, 0x03, 0x75, 0xCC, 0xAD, 0xB5, 0x03, - 0x75, 0xCC, 0xB0, 0xB5, 0x03, 0x76, 0xCC, 0x83, - 0xC9, 0x03, 0x76, 0xCC, 0xA3, 0xB5, 0x03, 0x77, - 0xCC, 0x80, 0xC9, 0x03, 0x77, 0xCC, 0x81, 0xC9, - 0x03, 0x77, 0xCC, 0x82, 0xC9, 0x03, 0x77, 0xCC, - 0x87, 0xC9, 0x03, 0x77, 0xCC, 0x88, 0xC9, 0x03, - 0x77, 0xCC, 0x8A, 0xC9, 0x03, 0x77, 0xCC, 0xA3, - // Bytes 3540 - 357f - 0xB5, 0x03, 0x78, 0xCC, 0x87, 0xC9, 0x03, 0x78, - 0xCC, 0x88, 0xC9, 0x03, 0x79, 0xCC, 0x80, 0xC9, - 0x03, 0x79, 0xCC, 0x81, 0xC9, 0x03, 0x79, 0xCC, - 0x82, 0xC9, 0x03, 0x79, 0xCC, 0x83, 0xC9, 0x03, - 0x79, 0xCC, 0x84, 0xC9, 0x03, 0x79, 0xCC, 0x87, - 0xC9, 0x03, 0x79, 0xCC, 0x88, 0xC9, 0x03, 0x79, - 0xCC, 0x89, 0xC9, 0x03, 0x79, 0xCC, 0x8A, 0xC9, - 0x03, 0x79, 0xCC, 0xA3, 0xB5, 0x03, 0x7A, 0xCC, - // Bytes 3580 - 35bf - 0x81, 0xC9, 0x03, 0x7A, 0xCC, 0x82, 0xC9, 0x03, - 0x7A, 0xCC, 0x87, 0xC9, 0x03, 0x7A, 0xCC, 0x8C, - 0xC9, 0x03, 0x7A, 0xCC, 0xA3, 0xB5, 0x03, 0x7A, - 0xCC, 0xB1, 0xB5, 0x04, 0xC2, 0xA8, 0xCC, 0x80, - 0xCA, 0x04, 0xC2, 0xA8, 0xCC, 0x81, 0xCA, 0x04, - 0xC2, 0xA8, 0xCD, 0x82, 0xCA, 0x04, 0xC3, 0x86, - 0xCC, 0x81, 0xC9, 0x04, 0xC3, 0x86, 0xCC, 0x84, - 0xC9, 0x04, 0xC3, 0x98, 0xCC, 0x81, 0xC9, 0x04, - // Bytes 35c0 - 35ff - 0xC3, 0xA6, 0xCC, 0x81, 0xC9, 0x04, 0xC3, 0xA6, - 0xCC, 0x84, 0xC9, 0x04, 0xC3, 0xB8, 0xCC, 0x81, - 0xC9, 0x04, 0xC5, 0xBF, 0xCC, 0x87, 0xC9, 0x04, - 0xC6, 0xB7, 0xCC, 0x8C, 0xC9, 0x04, 0xCA, 0x92, - 0xCC, 0x8C, 0xC9, 0x04, 0xCE, 0x91, 0xCC, 0x80, - 0xC9, 0x04, 0xCE, 0x91, 0xCC, 0x81, 0xC9, 0x04, - 0xCE, 0x91, 0xCC, 0x84, 0xC9, 0x04, 0xCE, 0x91, - 0xCC, 0x86, 0xC9, 0x04, 0xCE, 0x91, 0xCD, 0x85, - // Bytes 3600 - 363f - 0xD9, 0x04, 0xCE, 0x95, 0xCC, 0x80, 0xC9, 0x04, - 0xCE, 0x95, 0xCC, 0x81, 0xC9, 0x04, 0xCE, 0x97, - 0xCC, 0x80, 0xC9, 0x04, 0xCE, 0x97, 0xCC, 0x81, - 0xC9, 0x04, 0xCE, 0x97, 0xCD, 0x85, 0xD9, 0x04, - 0xCE, 0x99, 0xCC, 0x80, 0xC9, 0x04, 0xCE, 0x99, - 0xCC, 0x81, 0xC9, 0x04, 0xCE, 0x99, 0xCC, 0x84, - 0xC9, 0x04, 0xCE, 0x99, 0xCC, 0x86, 0xC9, 0x04, - 0xCE, 0x99, 0xCC, 0x88, 0xC9, 0x04, 0xCE, 0x9F, - // Bytes 3640 - 367f - 0xCC, 0x80, 0xC9, 0x04, 0xCE, 0x9F, 0xCC, 0x81, - 0xC9, 0x04, 0xCE, 0xA1, 0xCC, 0x94, 0xC9, 0x04, - 0xCE, 0xA5, 0xCC, 0x80, 0xC9, 0x04, 0xCE, 0xA5, - 0xCC, 0x81, 0xC9, 0x04, 0xCE, 0xA5, 0xCC, 0x84, - 0xC9, 0x04, 0xCE, 0xA5, 0xCC, 0x86, 0xC9, 0x04, - 0xCE, 0xA5, 0xCC, 0x88, 0xC9, 0x04, 0xCE, 0xA9, - 0xCC, 0x80, 0xC9, 0x04, 0xCE, 0xA9, 0xCC, 0x81, - 0xC9, 0x04, 0xCE, 0xA9, 0xCD, 0x85, 0xD9, 0x04, - // Bytes 3680 - 36bf - 0xCE, 0xB1, 0xCC, 0x84, 0xC9, 0x04, 0xCE, 0xB1, - 0xCC, 0x86, 0xC9, 0x04, 0xCE, 0xB1, 0xCD, 0x85, - 0xD9, 0x04, 0xCE, 0xB5, 0xCC, 0x80, 0xC9, 0x04, - 0xCE, 0xB5, 0xCC, 0x81, 0xC9, 0x04, 0xCE, 0xB7, - 0xCD, 0x85, 0xD9, 0x04, 0xCE, 0xB9, 0xCC, 0x80, - 0xC9, 0x04, 0xCE, 0xB9, 0xCC, 0x81, 0xC9, 0x04, - 0xCE, 0xB9, 0xCC, 0x84, 0xC9, 0x04, 0xCE, 0xB9, - 0xCC, 0x86, 0xC9, 0x04, 0xCE, 0xB9, 0xCD, 0x82, - // Bytes 36c0 - 36ff - 0xC9, 0x04, 0xCE, 0xBF, 0xCC, 0x80, 0xC9, 0x04, - 0xCE, 0xBF, 0xCC, 0x81, 0xC9, 0x04, 0xCF, 0x81, - 0xCC, 0x93, 0xC9, 0x04, 0xCF, 0x81, 0xCC, 0x94, - 0xC9, 0x04, 0xCF, 0x85, 0xCC, 0x80, 0xC9, 0x04, - 0xCF, 0x85, 0xCC, 0x81, 0xC9, 0x04, 0xCF, 0x85, - 0xCC, 0x84, 0xC9, 0x04, 0xCF, 0x85, 0xCC, 0x86, - 0xC9, 0x04, 0xCF, 0x85, 0xCD, 0x82, 0xC9, 0x04, - 0xCF, 0x89, 0xCD, 0x85, 0xD9, 0x04, 0xCF, 0x92, - // Bytes 3700 - 373f - 0xCC, 0x81, 0xC9, 0x04, 0xCF, 0x92, 0xCC, 0x88, - 0xC9, 0x04, 0xD0, 0x86, 0xCC, 0x88, 0xC9, 0x04, - 0xD0, 0x90, 0xCC, 0x86, 0xC9, 0x04, 0xD0, 0x90, - 0xCC, 0x88, 0xC9, 0x04, 0xD0, 0x93, 0xCC, 0x81, - 0xC9, 0x04, 0xD0, 0x95, 0xCC, 0x80, 0xC9, 0x04, - 0xD0, 0x95, 0xCC, 0x86, 0xC9, 0x04, 0xD0, 0x95, - 0xCC, 0x88, 0xC9, 0x04, 0xD0, 0x96, 0xCC, 0x86, - 0xC9, 0x04, 0xD0, 0x96, 0xCC, 0x88, 0xC9, 0x04, - // Bytes 3740 - 377f - 0xD0, 0x97, 0xCC, 0x88, 0xC9, 0x04, 0xD0, 0x98, - 0xCC, 0x80, 0xC9, 0x04, 0xD0, 0x98, 0xCC, 0x84, - 0xC9, 0x04, 0xD0, 0x98, 0xCC, 0x86, 0xC9, 0x04, - 0xD0, 0x98, 0xCC, 0x88, 0xC9, 0x04, 0xD0, 0x9A, - 0xCC, 0x81, 0xC9, 0x04, 0xD0, 0x9E, 0xCC, 0x88, - 0xC9, 0x04, 0xD0, 0xA3, 0xCC, 0x84, 0xC9, 0x04, - 0xD0, 0xA3, 0xCC, 0x86, 0xC9, 0x04, 0xD0, 0xA3, - 0xCC, 0x88, 0xC9, 0x04, 0xD0, 0xA3, 0xCC, 0x8B, - // Bytes 3780 - 37bf - 0xC9, 0x04, 0xD0, 0xA7, 0xCC, 0x88, 0xC9, 0x04, - 0xD0, 0xAB, 0xCC, 0x88, 0xC9, 0x04, 0xD0, 0xAD, - 0xCC, 0x88, 0xC9, 0x04, 0xD0, 0xB0, 0xCC, 0x86, - 0xC9, 0x04, 0xD0, 0xB0, 0xCC, 0x88, 0xC9, 0x04, - 0xD0, 0xB3, 0xCC, 0x81, 0xC9, 0x04, 0xD0, 0xB5, - 0xCC, 0x80, 0xC9, 0x04, 0xD0, 0xB5, 0xCC, 0x86, - 0xC9, 0x04, 0xD0, 0xB5, 0xCC, 0x88, 0xC9, 0x04, - 0xD0, 0xB6, 0xCC, 0x86, 0xC9, 0x04, 0xD0, 0xB6, - // Bytes 37c0 - 37ff - 0xCC, 0x88, 0xC9, 0x04, 0xD0, 0xB7, 0xCC, 0x88, - 0xC9, 0x04, 0xD0, 0xB8, 0xCC, 0x80, 0xC9, 0x04, - 0xD0, 0xB8, 0xCC, 0x84, 0xC9, 0x04, 0xD0, 0xB8, - 0xCC, 0x86, 0xC9, 0x04, 0xD0, 0xB8, 0xCC, 0x88, - 0xC9, 0x04, 0xD0, 0xBA, 0xCC, 0x81, 0xC9, 0x04, - 0xD0, 0xBE, 0xCC, 0x88, 0xC9, 0x04, 0xD1, 0x83, - 0xCC, 0x84, 0xC9, 0x04, 0xD1, 0x83, 0xCC, 0x86, - 0xC9, 0x04, 0xD1, 0x83, 0xCC, 0x88, 0xC9, 0x04, - // Bytes 3800 - 383f - 0xD1, 0x83, 0xCC, 0x8B, 0xC9, 0x04, 0xD1, 0x87, - 0xCC, 0x88, 0xC9, 0x04, 0xD1, 0x8B, 0xCC, 0x88, - 0xC9, 0x04, 0xD1, 0x8D, 0xCC, 0x88, 0xC9, 0x04, - 0xD1, 0x96, 0xCC, 0x88, 0xC9, 0x04, 0xD1, 0xB4, - 0xCC, 0x8F, 0xC9, 0x04, 0xD1, 0xB5, 0xCC, 0x8F, - 0xC9, 0x04, 0xD3, 0x98, 0xCC, 0x88, 0xC9, 0x04, - 0xD3, 0x99, 0xCC, 0x88, 0xC9, 0x04, 0xD3, 0xA8, - 0xCC, 0x88, 0xC9, 0x04, 0xD3, 0xA9, 0xCC, 0x88, - // Bytes 3840 - 387f - 0xC9, 0x04, 0xD8, 0xA7, 0xD9, 0x93, 0xC9, 0x04, - 0xD8, 0xA7, 0xD9, 0x94, 0xC9, 0x04, 0xD8, 0xA7, - 0xD9, 0x95, 0xB5, 0x04, 0xD9, 0x88, 0xD9, 0x94, - 0xC9, 0x04, 0xD9, 0x8A, 0xD9, 0x94, 0xC9, 0x04, - 0xDB, 0x81, 0xD9, 0x94, 0xC9, 0x04, 0xDB, 0x92, - 0xD9, 0x94, 0xC9, 0x04, 0xDB, 0x95, 0xD9, 0x94, - 0xC9, 0x05, 0x41, 0xCC, 0x82, 0xCC, 0x80, 0xCA, - 0x05, 0x41, 0xCC, 0x82, 0xCC, 0x81, 0xCA, 0x05, - // Bytes 3880 - 38bf - 0x41, 0xCC, 0x82, 0xCC, 0x83, 0xCA, 0x05, 0x41, - 0xCC, 0x82, 0xCC, 0x89, 0xCA, 0x05, 0x41, 0xCC, - 0x86, 0xCC, 0x80, 0xCA, 0x05, 0x41, 0xCC, 0x86, - 0xCC, 0x81, 0xCA, 0x05, 0x41, 0xCC, 0x86, 0xCC, - 0x83, 0xCA, 0x05, 0x41, 0xCC, 0x86, 0xCC, 0x89, - 0xCA, 0x05, 0x41, 0xCC, 0x87, 0xCC, 0x84, 0xCA, - 0x05, 0x41, 0xCC, 0x88, 0xCC, 0x84, 0xCA, 0x05, - 0x41, 0xCC, 0x8A, 0xCC, 0x81, 0xCA, 0x05, 0x41, - // Bytes 38c0 - 38ff - 0xCC, 0xA3, 0xCC, 0x82, 0xCA, 0x05, 0x41, 0xCC, - 0xA3, 0xCC, 0x86, 0xCA, 0x05, 0x43, 0xCC, 0xA7, - 0xCC, 0x81, 0xCA, 0x05, 0x45, 0xCC, 0x82, 0xCC, - 0x80, 0xCA, 0x05, 0x45, 0xCC, 0x82, 0xCC, 0x81, - 0xCA, 0x05, 0x45, 0xCC, 0x82, 0xCC, 0x83, 0xCA, - 0x05, 0x45, 0xCC, 0x82, 0xCC, 0x89, 0xCA, 0x05, - 0x45, 0xCC, 0x84, 0xCC, 0x80, 0xCA, 0x05, 0x45, - 0xCC, 0x84, 0xCC, 0x81, 0xCA, 0x05, 0x45, 0xCC, - // Bytes 3900 - 393f - 0xA3, 0xCC, 0x82, 0xCA, 0x05, 0x45, 0xCC, 0xA7, - 0xCC, 0x86, 0xCA, 0x05, 0x49, 0xCC, 0x88, 0xCC, - 0x81, 0xCA, 0x05, 0x4C, 0xCC, 0xA3, 0xCC, 0x84, - 0xCA, 0x05, 0x4F, 0xCC, 0x82, 0xCC, 0x80, 0xCA, - 0x05, 0x4F, 0xCC, 0x82, 0xCC, 0x81, 0xCA, 0x05, - 0x4F, 0xCC, 0x82, 0xCC, 0x83, 0xCA, 0x05, 0x4F, - 0xCC, 0x82, 0xCC, 0x89, 0xCA, 0x05, 0x4F, 0xCC, - 0x83, 0xCC, 0x81, 0xCA, 0x05, 0x4F, 0xCC, 0x83, - // Bytes 3940 - 397f - 0xCC, 0x84, 0xCA, 0x05, 0x4F, 0xCC, 0x83, 0xCC, - 0x88, 0xCA, 0x05, 0x4F, 0xCC, 0x84, 0xCC, 0x80, - 0xCA, 0x05, 0x4F, 0xCC, 0x84, 0xCC, 0x81, 0xCA, - 0x05, 0x4F, 0xCC, 0x87, 0xCC, 0x84, 0xCA, 0x05, - 0x4F, 0xCC, 0x88, 0xCC, 0x84, 0xCA, 0x05, 0x4F, - 0xCC, 0x9B, 0xCC, 0x80, 0xCA, 0x05, 0x4F, 0xCC, - 0x9B, 0xCC, 0x81, 0xCA, 0x05, 0x4F, 0xCC, 0x9B, - 0xCC, 0x83, 0xCA, 0x05, 0x4F, 0xCC, 0x9B, 0xCC, - // Bytes 3980 - 39bf - 0x89, 0xCA, 0x05, 0x4F, 0xCC, 0x9B, 0xCC, 0xA3, - 0xB6, 0x05, 0x4F, 0xCC, 0xA3, 0xCC, 0x82, 0xCA, - 0x05, 0x4F, 0xCC, 0xA8, 0xCC, 0x84, 0xCA, 0x05, - 0x52, 0xCC, 0xA3, 0xCC, 0x84, 0xCA, 0x05, 0x53, - 0xCC, 0x81, 0xCC, 0x87, 0xCA, 0x05, 0x53, 0xCC, - 0x8C, 0xCC, 0x87, 0xCA, 0x05, 0x53, 0xCC, 0xA3, - 0xCC, 0x87, 0xCA, 0x05, 0x55, 0xCC, 0x83, 0xCC, - 0x81, 0xCA, 0x05, 0x55, 0xCC, 0x84, 0xCC, 0x88, - // Bytes 39c0 - 39ff - 0xCA, 0x05, 0x55, 0xCC, 0x88, 0xCC, 0x80, 0xCA, - 0x05, 0x55, 0xCC, 0x88, 0xCC, 0x81, 0xCA, 0x05, - 0x55, 0xCC, 0x88, 0xCC, 0x84, 0xCA, 0x05, 0x55, - 0xCC, 0x88, 0xCC, 0x8C, 0xCA, 0x05, 0x55, 0xCC, - 0x9B, 0xCC, 0x80, 0xCA, 0x05, 0x55, 0xCC, 0x9B, - 0xCC, 0x81, 0xCA, 0x05, 0x55, 0xCC, 0x9B, 0xCC, - 0x83, 0xCA, 0x05, 0x55, 0xCC, 0x9B, 0xCC, 0x89, - 0xCA, 0x05, 0x55, 0xCC, 0x9B, 0xCC, 0xA3, 0xB6, - // Bytes 3a00 - 3a3f - 0x05, 0x61, 0xCC, 0x82, 0xCC, 0x80, 0xCA, 0x05, - 0x61, 0xCC, 0x82, 0xCC, 0x81, 0xCA, 0x05, 0x61, - 0xCC, 0x82, 0xCC, 0x83, 0xCA, 0x05, 0x61, 0xCC, - 0x82, 0xCC, 0x89, 0xCA, 0x05, 0x61, 0xCC, 0x86, - 0xCC, 0x80, 0xCA, 0x05, 0x61, 0xCC, 0x86, 0xCC, - 0x81, 0xCA, 0x05, 0x61, 0xCC, 0x86, 0xCC, 0x83, - 0xCA, 0x05, 0x61, 0xCC, 0x86, 0xCC, 0x89, 0xCA, - 0x05, 0x61, 0xCC, 0x87, 0xCC, 0x84, 0xCA, 0x05, - // Bytes 3a40 - 3a7f - 0x61, 0xCC, 0x88, 0xCC, 0x84, 0xCA, 0x05, 0x61, - 0xCC, 0x8A, 0xCC, 0x81, 0xCA, 0x05, 0x61, 0xCC, - 0xA3, 0xCC, 0x82, 0xCA, 0x05, 0x61, 0xCC, 0xA3, - 0xCC, 0x86, 0xCA, 0x05, 0x63, 0xCC, 0xA7, 0xCC, - 0x81, 0xCA, 0x05, 0x65, 0xCC, 0x82, 0xCC, 0x80, - 0xCA, 0x05, 0x65, 0xCC, 0x82, 0xCC, 0x81, 0xCA, - 0x05, 0x65, 0xCC, 0x82, 0xCC, 0x83, 0xCA, 0x05, - 0x65, 0xCC, 0x82, 0xCC, 0x89, 0xCA, 0x05, 0x65, - // Bytes 3a80 - 3abf - 0xCC, 0x84, 0xCC, 0x80, 0xCA, 0x05, 0x65, 0xCC, - 0x84, 0xCC, 0x81, 0xCA, 0x05, 0x65, 0xCC, 0xA3, - 0xCC, 0x82, 0xCA, 0x05, 0x65, 0xCC, 0xA7, 0xCC, - 0x86, 0xCA, 0x05, 0x69, 0xCC, 0x88, 0xCC, 0x81, - 0xCA, 0x05, 0x6C, 0xCC, 0xA3, 0xCC, 0x84, 0xCA, - 0x05, 0x6F, 0xCC, 0x82, 0xCC, 0x80, 0xCA, 0x05, - 0x6F, 0xCC, 0x82, 0xCC, 0x81, 0xCA, 0x05, 0x6F, - 0xCC, 0x82, 0xCC, 0x83, 0xCA, 0x05, 0x6F, 0xCC, - // Bytes 3ac0 - 3aff - 0x82, 0xCC, 0x89, 0xCA, 0x05, 0x6F, 0xCC, 0x83, - 0xCC, 0x81, 0xCA, 0x05, 0x6F, 0xCC, 0x83, 0xCC, - 0x84, 0xCA, 0x05, 0x6F, 0xCC, 0x83, 0xCC, 0x88, - 0xCA, 0x05, 0x6F, 0xCC, 0x84, 0xCC, 0x80, 0xCA, - 0x05, 0x6F, 0xCC, 0x84, 0xCC, 0x81, 0xCA, 0x05, - 0x6F, 0xCC, 0x87, 0xCC, 0x84, 0xCA, 0x05, 0x6F, - 0xCC, 0x88, 0xCC, 0x84, 0xCA, 0x05, 0x6F, 0xCC, - 0x9B, 0xCC, 0x80, 0xCA, 0x05, 0x6F, 0xCC, 0x9B, - // Bytes 3b00 - 3b3f - 0xCC, 0x81, 0xCA, 0x05, 0x6F, 0xCC, 0x9B, 0xCC, - 0x83, 0xCA, 0x05, 0x6F, 0xCC, 0x9B, 0xCC, 0x89, - 0xCA, 0x05, 0x6F, 0xCC, 0x9B, 0xCC, 0xA3, 0xB6, - 0x05, 0x6F, 0xCC, 0xA3, 0xCC, 0x82, 0xCA, 0x05, - 0x6F, 0xCC, 0xA8, 0xCC, 0x84, 0xCA, 0x05, 0x72, - 0xCC, 0xA3, 0xCC, 0x84, 0xCA, 0x05, 0x73, 0xCC, - 0x81, 0xCC, 0x87, 0xCA, 0x05, 0x73, 0xCC, 0x8C, - 0xCC, 0x87, 0xCA, 0x05, 0x73, 0xCC, 0xA3, 0xCC, - // Bytes 3b40 - 3b7f - 0x87, 0xCA, 0x05, 0x75, 0xCC, 0x83, 0xCC, 0x81, - 0xCA, 0x05, 0x75, 0xCC, 0x84, 0xCC, 0x88, 0xCA, - 0x05, 0x75, 0xCC, 0x88, 0xCC, 0x80, 0xCA, 0x05, - 0x75, 0xCC, 0x88, 0xCC, 0x81, 0xCA, 0x05, 0x75, - 0xCC, 0x88, 0xCC, 0x84, 0xCA, 0x05, 0x75, 0xCC, - 0x88, 0xCC, 0x8C, 0xCA, 0x05, 0x75, 0xCC, 0x9B, - 0xCC, 0x80, 0xCA, 0x05, 0x75, 0xCC, 0x9B, 0xCC, - 0x81, 0xCA, 0x05, 0x75, 0xCC, 0x9B, 0xCC, 0x83, - // Bytes 3b80 - 3bbf - 0xCA, 0x05, 0x75, 0xCC, 0x9B, 0xCC, 0x89, 0xCA, - 0x05, 0x75, 0xCC, 0x9B, 0xCC, 0xA3, 0xB6, 0x05, - 0xE1, 0xBE, 0xBF, 0xCC, 0x80, 0xCA, 0x05, 0xE1, - 0xBE, 0xBF, 0xCC, 0x81, 0xCA, 0x05, 0xE1, 0xBE, - 0xBF, 0xCD, 0x82, 0xCA, 0x05, 0xE1, 0xBF, 0xBE, - 0xCC, 0x80, 0xCA, 0x05, 0xE1, 0xBF, 0xBE, 0xCC, - 0x81, 0xCA, 0x05, 0xE1, 0xBF, 0xBE, 0xCD, 0x82, - 0xCA, 0x05, 0xE2, 0x86, 0x90, 0xCC, 0xB8, 0x05, - // Bytes 3bc0 - 3bff - 0x05, 0xE2, 0x86, 0x92, 0xCC, 0xB8, 0x05, 0x05, - 0xE2, 0x86, 0x94, 0xCC, 0xB8, 0x05, 0x05, 0xE2, - 0x87, 0x90, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x87, - 0x92, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x87, 0x94, - 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x88, 0x83, 0xCC, - 0xB8, 0x05, 0x05, 0xE2, 0x88, 0x88, 0xCC, 0xB8, - 0x05, 0x05, 0xE2, 0x88, 0x8B, 0xCC, 0xB8, 0x05, - 0x05, 0xE2, 0x88, 0xA3, 0xCC, 0xB8, 0x05, 0x05, - // Bytes 3c00 - 3c3f - 0xE2, 0x88, 0xA5, 0xCC, 0xB8, 0x05, 0x05, 0xE2, - 0x88, 0xBC, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89, - 0x83, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89, 0x85, - 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89, 0x88, 0xCC, - 0xB8, 0x05, 0x05, 0xE2, 0x89, 0x8D, 0xCC, 0xB8, - 0x05, 0x05, 0xE2, 0x89, 0xA1, 0xCC, 0xB8, 0x05, - 0x05, 0xE2, 0x89, 0xA4, 0xCC, 0xB8, 0x05, 0x05, - 0xE2, 0x89, 0xA5, 0xCC, 0xB8, 0x05, 0x05, 0xE2, - // Bytes 3c40 - 3c7f - 0x89, 0xB2, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89, - 0xB3, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89, 0xB6, - 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89, 0xB7, 0xCC, - 0xB8, 0x05, 0x05, 0xE2, 0x89, 0xBA, 0xCC, 0xB8, - 0x05, 0x05, 0xE2, 0x89, 0xBB, 0xCC, 0xB8, 0x05, - 0x05, 0xE2, 0x89, 0xBC, 0xCC, 0xB8, 0x05, 0x05, - 0xE2, 0x89, 0xBD, 0xCC, 0xB8, 0x05, 0x05, 0xE2, - 0x8A, 0x82, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A, - // Bytes 3c80 - 3cbf - 0x83, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A, 0x86, - 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A, 0x87, 0xCC, - 0xB8, 0x05, 0x05, 0xE2, 0x8A, 0x91, 0xCC, 0xB8, - 0x05, 0x05, 0xE2, 0x8A, 0x92, 0xCC, 0xB8, 0x05, - 0x05, 0xE2, 0x8A, 0xA2, 0xCC, 0xB8, 0x05, 0x05, - 0xE2, 0x8A, 0xA8, 0xCC, 0xB8, 0x05, 0x05, 0xE2, - 0x8A, 0xA9, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A, - 0xAB, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A, 0xB2, - // Bytes 3cc0 - 3cff - 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A, 0xB3, 0xCC, - 0xB8, 0x05, 0x05, 0xE2, 0x8A, 0xB4, 0xCC, 0xB8, - 0x05, 0x05, 0xE2, 0x8A, 0xB5, 0xCC, 0xB8, 0x05, - 0x06, 0xCE, 0x91, 0xCC, 0x93, 0xCD, 0x85, 0xDA, - 0x06, 0xCE, 0x91, 0xCC, 0x94, 0xCD, 0x85, 0xDA, - 0x06, 0xCE, 0x95, 0xCC, 0x93, 0xCC, 0x80, 0xCA, - 0x06, 0xCE, 0x95, 0xCC, 0x93, 0xCC, 0x81, 0xCA, - 0x06, 0xCE, 0x95, 0xCC, 0x94, 0xCC, 0x80, 0xCA, - // Bytes 3d00 - 3d3f - 0x06, 0xCE, 0x95, 0xCC, 0x94, 0xCC, 0x81, 0xCA, - 0x06, 0xCE, 0x97, 0xCC, 0x93, 0xCD, 0x85, 0xDA, - 0x06, 0xCE, 0x97, 0xCC, 0x94, 0xCD, 0x85, 0xDA, - 0x06, 0xCE, 0x99, 0xCC, 0x93, 0xCC, 0x80, 0xCA, - 0x06, 0xCE, 0x99, 0xCC, 0x93, 0xCC, 0x81, 0xCA, - 0x06, 0xCE, 0x99, 0xCC, 0x93, 0xCD, 0x82, 0xCA, - 0x06, 0xCE, 0x99, 0xCC, 0x94, 0xCC, 0x80, 0xCA, - 0x06, 0xCE, 0x99, 0xCC, 0x94, 0xCC, 0x81, 0xCA, - // Bytes 3d40 - 3d7f - 0x06, 0xCE, 0x99, 0xCC, 0x94, 0xCD, 0x82, 0xCA, - 0x06, 0xCE, 0x9F, 0xCC, 0x93, 0xCC, 0x80, 0xCA, - 0x06, 0xCE, 0x9F, 0xCC, 0x93, 0xCC, 0x81, 0xCA, - 0x06, 0xCE, 0x9F, 0xCC, 0x94, 0xCC, 0x80, 0xCA, - 0x06, 0xCE, 0x9F, 0xCC, 0x94, 0xCC, 0x81, 0xCA, - 0x06, 0xCE, 0xA5, 0xCC, 0x94, 0xCC, 0x80, 0xCA, - 0x06, 0xCE, 0xA5, 0xCC, 0x94, 0xCC, 0x81, 0xCA, - 0x06, 0xCE, 0xA5, 0xCC, 0x94, 0xCD, 0x82, 0xCA, - // Bytes 3d80 - 3dbf - 0x06, 0xCE, 0xA9, 0xCC, 0x93, 0xCD, 0x85, 0xDA, - 0x06, 0xCE, 0xA9, 0xCC, 0x94, 0xCD, 0x85, 0xDA, - 0x06, 0xCE, 0xB1, 0xCC, 0x80, 0xCD, 0x85, 0xDA, - 0x06, 0xCE, 0xB1, 0xCC, 0x81, 0xCD, 0x85, 0xDA, - 0x06, 0xCE, 0xB1, 0xCC, 0x93, 0xCD, 0x85, 0xDA, - 0x06, 0xCE, 0xB1, 0xCC, 0x94, 0xCD, 0x85, 0xDA, - 0x06, 0xCE, 0xB1, 0xCD, 0x82, 0xCD, 0x85, 0xDA, - 0x06, 0xCE, 0xB5, 0xCC, 0x93, 0xCC, 0x80, 0xCA, - // Bytes 3dc0 - 3dff - 0x06, 0xCE, 0xB5, 0xCC, 0x93, 0xCC, 0x81, 0xCA, - 0x06, 0xCE, 0xB5, 0xCC, 0x94, 0xCC, 0x80, 0xCA, - 0x06, 0xCE, 0xB5, 0xCC, 0x94, 0xCC, 0x81, 0xCA, - 0x06, 0xCE, 0xB7, 0xCC, 0x80, 0xCD, 0x85, 0xDA, - 0x06, 0xCE, 0xB7, 0xCC, 0x81, 0xCD, 0x85, 0xDA, - 0x06, 0xCE, 0xB7, 0xCC, 0x93, 0xCD, 0x85, 0xDA, - 0x06, 0xCE, 0xB7, 0xCC, 0x94, 0xCD, 0x85, 0xDA, - 0x06, 0xCE, 0xB7, 0xCD, 0x82, 0xCD, 0x85, 0xDA, - // Bytes 3e00 - 3e3f - 0x06, 0xCE, 0xB9, 0xCC, 0x88, 0xCC, 0x80, 0xCA, - 0x06, 0xCE, 0xB9, 0xCC, 0x88, 0xCC, 0x81, 0xCA, - 0x06, 0xCE, 0xB9, 0xCC, 0x88, 0xCD, 0x82, 0xCA, - 0x06, 0xCE, 0xB9, 0xCC, 0x93, 0xCC, 0x80, 0xCA, - 0x06, 0xCE, 0xB9, 0xCC, 0x93, 0xCC, 0x81, 0xCA, - 0x06, 0xCE, 0xB9, 0xCC, 0x93, 0xCD, 0x82, 0xCA, - 0x06, 0xCE, 0xB9, 0xCC, 0x94, 0xCC, 0x80, 0xCA, - 0x06, 0xCE, 0xB9, 0xCC, 0x94, 0xCC, 0x81, 0xCA, - // Bytes 3e40 - 3e7f - 0x06, 0xCE, 0xB9, 0xCC, 0x94, 0xCD, 0x82, 0xCA, - 0x06, 0xCE, 0xBF, 0xCC, 0x93, 0xCC, 0x80, 0xCA, - 0x06, 0xCE, 0xBF, 0xCC, 0x93, 0xCC, 0x81, 0xCA, - 0x06, 0xCE, 0xBF, 0xCC, 0x94, 0xCC, 0x80, 0xCA, - 0x06, 0xCE, 0xBF, 0xCC, 0x94, 0xCC, 0x81, 0xCA, - 0x06, 0xCF, 0x85, 0xCC, 0x88, 0xCC, 0x80, 0xCA, - 0x06, 0xCF, 0x85, 0xCC, 0x88, 0xCC, 0x81, 0xCA, - 0x06, 0xCF, 0x85, 0xCC, 0x88, 0xCD, 0x82, 0xCA, - // Bytes 3e80 - 3ebf - 0x06, 0xCF, 0x85, 0xCC, 0x93, 0xCC, 0x80, 0xCA, - 0x06, 0xCF, 0x85, 0xCC, 0x93, 0xCC, 0x81, 0xCA, - 0x06, 0xCF, 0x85, 0xCC, 0x93, 0xCD, 0x82, 0xCA, - 0x06, 0xCF, 0x85, 0xCC, 0x94, 0xCC, 0x80, 0xCA, - 0x06, 0xCF, 0x85, 0xCC, 0x94, 0xCC, 0x81, 0xCA, - 0x06, 0xCF, 0x85, 0xCC, 0x94, 0xCD, 0x82, 0xCA, - 0x06, 0xCF, 0x89, 0xCC, 0x80, 0xCD, 0x85, 0xDA, - 0x06, 0xCF, 0x89, 0xCC, 0x81, 0xCD, 0x85, 0xDA, - // Bytes 3ec0 - 3eff - 0x06, 0xCF, 0x89, 0xCC, 0x93, 0xCD, 0x85, 0xDA, - 0x06, 0xCF, 0x89, 0xCC, 0x94, 0xCD, 0x85, 0xDA, - 0x06, 0xCF, 0x89, 0xCD, 0x82, 0xCD, 0x85, 0xDA, - 0x06, 0xE0, 0xA4, 0xA8, 0xE0, 0xA4, 0xBC, 0x09, - 0x06, 0xE0, 0xA4, 0xB0, 0xE0, 0xA4, 0xBC, 0x09, - 0x06, 0xE0, 0xA4, 0xB3, 0xE0, 0xA4, 0xBC, 0x09, - 0x06, 0xE0, 0xB1, 0x86, 0xE0, 0xB1, 0x96, 0x85, - 0x06, 0xE0, 0xB7, 0x99, 0xE0, 0xB7, 0x8A, 0x11, - // Bytes 3f00 - 3f3f - 0x06, 0xE3, 0x81, 0x86, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x81, 0x8B, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x81, 0x8D, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x81, 0x8F, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x81, 0x91, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x81, 0x93, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x81, 0x95, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x81, 0x97, 0xE3, 0x82, 0x99, 0x0D, - // Bytes 3f40 - 3f7f - 0x06, 0xE3, 0x81, 0x99, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x81, 0x9B, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x81, 0x9D, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x81, 0x9F, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x81, 0xA1, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x81, 0xA4, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x81, 0xA6, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x81, 0xA8, 0xE3, 0x82, 0x99, 0x0D, - // Bytes 3f80 - 3fbf - 0x06, 0xE3, 0x81, 0xAF, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x81, 0xAF, 0xE3, 0x82, 0x9A, 0x0D, - 0x06, 0xE3, 0x81, 0xB2, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x81, 0xB2, 0xE3, 0x82, 0x9A, 0x0D, - 0x06, 0xE3, 0x81, 0xB5, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x81, 0xB5, 0xE3, 0x82, 0x9A, 0x0D, - 0x06, 0xE3, 0x81, 0xB8, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x81, 0xB8, 0xE3, 0x82, 0x9A, 0x0D, - // Bytes 3fc0 - 3fff - 0x06, 0xE3, 0x81, 0xBB, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x81, 0xBB, 0xE3, 0x82, 0x9A, 0x0D, - 0x06, 0xE3, 0x82, 0x9D, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x82, 0xA6, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x82, 0xAB, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x82, 0xAD, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x82, 0xAF, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x82, 0xB1, 0xE3, 0x82, 0x99, 0x0D, - // Bytes 4000 - 403f - 0x06, 0xE3, 0x82, 0xB3, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x82, 0xB5, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x82, 0xB7, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x82, 0xB9, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x82, 0xBB, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x82, 0xBD, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x82, 0xBF, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x83, 0x81, 0xE3, 0x82, 0x99, 0x0D, - // Bytes 4040 - 407f - 0x06, 0xE3, 0x83, 0x84, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x83, 0x86, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x83, 0x88, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x83, 0x8F, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x83, 0x8F, 0xE3, 0x82, 0x9A, 0x0D, - 0x06, 0xE3, 0x83, 0x92, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x83, 0x92, 0xE3, 0x82, 0x9A, 0x0D, - 0x06, 0xE3, 0x83, 0x95, 0xE3, 0x82, 0x99, 0x0D, - // Bytes 4080 - 40bf - 0x06, 0xE3, 0x83, 0x95, 0xE3, 0x82, 0x9A, 0x0D, - 0x06, 0xE3, 0x83, 0x98, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x83, 0x98, 0xE3, 0x82, 0x9A, 0x0D, - 0x06, 0xE3, 0x83, 0x9B, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x83, 0x9B, 0xE3, 0x82, 0x9A, 0x0D, - 0x06, 0xE3, 0x83, 0xAF, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x83, 0xB0, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x83, 0xB1, 0xE3, 0x82, 0x99, 0x0D, - // Bytes 40c0 - 40ff - 0x06, 0xE3, 0x83, 0xB2, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x83, 0xBD, 0xE3, 0x82, 0x99, 0x0D, - 0x08, 0xCE, 0x91, 0xCC, 0x93, 0xCC, 0x80, 0xCD, - 0x85, 0xDB, 0x08, 0xCE, 0x91, 0xCC, 0x93, 0xCC, - 0x81, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0x91, 0xCC, - 0x93, 0xCD, 0x82, 0xCD, 0x85, 0xDB, 0x08, 0xCE, - 0x91, 0xCC, 0x94, 0xCC, 0x80, 0xCD, 0x85, 0xDB, - 0x08, 0xCE, 0x91, 0xCC, 0x94, 0xCC, 0x81, 0xCD, - // Bytes 4100 - 413f - 0x85, 0xDB, 0x08, 0xCE, 0x91, 0xCC, 0x94, 0xCD, - 0x82, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0x97, 0xCC, - 0x93, 0xCC, 0x80, 0xCD, 0x85, 0xDB, 0x08, 0xCE, - 0x97, 0xCC, 0x93, 0xCC, 0x81, 0xCD, 0x85, 0xDB, - 0x08, 0xCE, 0x97, 0xCC, 0x93, 0xCD, 0x82, 0xCD, - 0x85, 0xDB, 0x08, 0xCE, 0x97, 0xCC, 0x94, 0xCC, - 0x80, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0x97, 0xCC, - 0x94, 0xCC, 0x81, 0xCD, 0x85, 0xDB, 0x08, 0xCE, - // Bytes 4140 - 417f - 0x97, 0xCC, 0x94, 0xCD, 0x82, 0xCD, 0x85, 0xDB, - 0x08, 0xCE, 0xA9, 0xCC, 0x93, 0xCC, 0x80, 0xCD, - 0x85, 0xDB, 0x08, 0xCE, 0xA9, 0xCC, 0x93, 0xCC, - 0x81, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0xA9, 0xCC, - 0x93, 0xCD, 0x82, 0xCD, 0x85, 0xDB, 0x08, 0xCE, - 0xA9, 0xCC, 0x94, 0xCC, 0x80, 0xCD, 0x85, 0xDB, - 0x08, 0xCE, 0xA9, 0xCC, 0x94, 0xCC, 0x81, 0xCD, - 0x85, 0xDB, 0x08, 0xCE, 0xA9, 0xCC, 0x94, 0xCD, - // Bytes 4180 - 41bf - 0x82, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0xB1, 0xCC, - 0x93, 0xCC, 0x80, 0xCD, 0x85, 0xDB, 0x08, 0xCE, - 0xB1, 0xCC, 0x93, 0xCC, 0x81, 0xCD, 0x85, 0xDB, - 0x08, 0xCE, 0xB1, 0xCC, 0x93, 0xCD, 0x82, 0xCD, - 0x85, 0xDB, 0x08, 0xCE, 0xB1, 0xCC, 0x94, 0xCC, - 0x80, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0xB1, 0xCC, - 0x94, 0xCC, 0x81, 0xCD, 0x85, 0xDB, 0x08, 0xCE, - 0xB1, 0xCC, 0x94, 0xCD, 0x82, 0xCD, 0x85, 0xDB, - // Bytes 41c0 - 41ff - 0x08, 0xCE, 0xB7, 0xCC, 0x93, 0xCC, 0x80, 0xCD, - 0x85, 0xDB, 0x08, 0xCE, 0xB7, 0xCC, 0x93, 0xCC, - 0x81, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0xB7, 0xCC, - 0x93, 0xCD, 0x82, 0xCD, 0x85, 0xDB, 0x08, 0xCE, - 0xB7, 0xCC, 0x94, 0xCC, 0x80, 0xCD, 0x85, 0xDB, - 0x08, 0xCE, 0xB7, 0xCC, 0x94, 0xCC, 0x81, 0xCD, - 0x85, 0xDB, 0x08, 0xCE, 0xB7, 0xCC, 0x94, 0xCD, - 0x82, 0xCD, 0x85, 0xDB, 0x08, 0xCF, 0x89, 0xCC, - // Bytes 4200 - 423f - 0x93, 0xCC, 0x80, 0xCD, 0x85, 0xDB, 0x08, 0xCF, - 0x89, 0xCC, 0x93, 0xCC, 0x81, 0xCD, 0x85, 0xDB, - 0x08, 0xCF, 0x89, 0xCC, 0x93, 0xCD, 0x82, 0xCD, - 0x85, 0xDB, 0x08, 0xCF, 0x89, 0xCC, 0x94, 0xCC, - 0x80, 0xCD, 0x85, 0xDB, 0x08, 0xCF, 0x89, 0xCC, - 0x94, 0xCC, 0x81, 0xCD, 0x85, 0xDB, 0x08, 0xCF, - 0x89, 0xCC, 0x94, 0xCD, 0x82, 0xCD, 0x85, 0xDB, - 0x08, 0xF0, 0x91, 0x82, 0x99, 0xF0, 0x91, 0x82, - // Bytes 4240 - 427f - 0xBA, 0x09, 0x08, 0xF0, 0x91, 0x82, 0x9B, 0xF0, - 0x91, 0x82, 0xBA, 0x09, 0x08, 0xF0, 0x91, 0x82, - 0xA5, 0xF0, 0x91, 0x82, 0xBA, 0x09, 0x42, 0xC2, - 0xB4, 0x01, 0x43, 0x20, 0xCC, 0x81, 0xC9, 0x43, - 0x20, 0xCC, 0x83, 0xC9, 0x43, 0x20, 0xCC, 0x84, - 0xC9, 0x43, 0x20, 0xCC, 0x85, 0xC9, 0x43, 0x20, - 0xCC, 0x86, 0xC9, 0x43, 0x20, 0xCC, 0x87, 0xC9, - 0x43, 0x20, 0xCC, 0x88, 0xC9, 0x43, 0x20, 0xCC, - // Bytes 4280 - 42bf - 0x8A, 0xC9, 0x43, 0x20, 0xCC, 0x8B, 0xC9, 0x43, - 0x20, 0xCC, 0x93, 0xC9, 0x43, 0x20, 0xCC, 0x94, - 0xC9, 0x43, 0x20, 0xCC, 0xA7, 0xA5, 0x43, 0x20, - 0xCC, 0xA8, 0xA5, 0x43, 0x20, 0xCC, 0xB3, 0xB5, - 0x43, 0x20, 0xCD, 0x82, 0xC9, 0x43, 0x20, 0xCD, - 0x85, 0xD9, 0x43, 0x20, 0xD9, 0x8B, 0x59, 0x43, - 0x20, 0xD9, 0x8C, 0x5D, 0x43, 0x20, 0xD9, 0x8D, - 0x61, 0x43, 0x20, 0xD9, 0x8E, 0x65, 0x43, 0x20, - // Bytes 42c0 - 42ff - 0xD9, 0x8F, 0x69, 0x43, 0x20, 0xD9, 0x90, 0x6D, - 0x43, 0x20, 0xD9, 0x91, 0x71, 0x43, 0x20, 0xD9, - 0x92, 0x75, 0x43, 0x41, 0xCC, 0x8A, 0xC9, 0x43, - 0x73, 0xCC, 0x87, 0xC9, 0x44, 0x20, 0xE3, 0x82, - 0x99, 0x0D, 0x44, 0x20, 0xE3, 0x82, 0x9A, 0x0D, - 0x44, 0xC2, 0xA8, 0xCC, 0x81, 0xCA, 0x44, 0xCE, - 0x91, 0xCC, 0x81, 0xC9, 0x44, 0xCE, 0x95, 0xCC, - 0x81, 0xC9, 0x44, 0xCE, 0x97, 0xCC, 0x81, 0xC9, - // Bytes 4300 - 433f - 0x44, 0xCE, 0x99, 0xCC, 0x81, 0xC9, 0x44, 0xCE, - 0x9F, 0xCC, 0x81, 0xC9, 0x44, 0xCE, 0xA5, 0xCC, - 0x81, 0xC9, 0x44, 0xCE, 0xA5, 0xCC, 0x88, 0xC9, - 0x44, 0xCE, 0xA9, 0xCC, 0x81, 0xC9, 0x44, 0xCE, - 0xB1, 0xCC, 0x81, 0xC9, 0x44, 0xCE, 0xB5, 0xCC, - 0x81, 0xC9, 0x44, 0xCE, 0xB7, 0xCC, 0x81, 0xC9, - 0x44, 0xCE, 0xB9, 0xCC, 0x81, 0xC9, 0x44, 0xCE, - 0xBF, 0xCC, 0x81, 0xC9, 0x44, 0xCF, 0x85, 0xCC, - // Bytes 4340 - 437f - 0x81, 0xC9, 0x44, 0xCF, 0x89, 0xCC, 0x81, 0xC9, - 0x44, 0xD7, 0x90, 0xD6, 0xB7, 0x31, 0x44, 0xD7, - 0x90, 0xD6, 0xB8, 0x35, 0x44, 0xD7, 0x90, 0xD6, - 0xBC, 0x41, 0x44, 0xD7, 0x91, 0xD6, 0xBC, 0x41, - 0x44, 0xD7, 0x91, 0xD6, 0xBF, 0x49, 0x44, 0xD7, - 0x92, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0x93, 0xD6, - 0xBC, 0x41, 0x44, 0xD7, 0x94, 0xD6, 0xBC, 0x41, - 0x44, 0xD7, 0x95, 0xD6, 0xB9, 0x39, 0x44, 0xD7, - // Bytes 4380 - 43bf - 0x95, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0x96, 0xD6, - 0xBC, 0x41, 0x44, 0xD7, 0x98, 0xD6, 0xBC, 0x41, - 0x44, 0xD7, 0x99, 0xD6, 0xB4, 0x25, 0x44, 0xD7, - 0x99, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0x9A, 0xD6, - 0xBC, 0x41, 0x44, 0xD7, 0x9B, 0xD6, 0xBC, 0x41, - 0x44, 0xD7, 0x9B, 0xD6, 0xBF, 0x49, 0x44, 0xD7, - 0x9C, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0x9E, 0xD6, - 0xBC, 0x41, 0x44, 0xD7, 0xA0, 0xD6, 0xBC, 0x41, - // Bytes 43c0 - 43ff - 0x44, 0xD7, 0xA1, 0xD6, 0xBC, 0x41, 0x44, 0xD7, - 0xA3, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0xA4, 0xD6, - 0xBC, 0x41, 0x44, 0xD7, 0xA4, 0xD6, 0xBF, 0x49, - 0x44, 0xD7, 0xA6, 0xD6, 0xBC, 0x41, 0x44, 0xD7, - 0xA7, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0xA8, 0xD6, - 0xBC, 0x41, 0x44, 0xD7, 0xA9, 0xD6, 0xBC, 0x41, - 0x44, 0xD7, 0xA9, 0xD7, 0x81, 0x4D, 0x44, 0xD7, - 0xA9, 0xD7, 0x82, 0x51, 0x44, 0xD7, 0xAA, 0xD6, - // Bytes 4400 - 443f - 0xBC, 0x41, 0x44, 0xD7, 0xB2, 0xD6, 0xB7, 0x31, - 0x44, 0xD8, 0xA7, 0xD9, 0x8B, 0x59, 0x44, 0xD8, - 0xA7, 0xD9, 0x93, 0xC9, 0x44, 0xD8, 0xA7, 0xD9, - 0x94, 0xC9, 0x44, 0xD8, 0xA7, 0xD9, 0x95, 0xB5, - 0x44, 0xD8, 0xB0, 0xD9, 0xB0, 0x79, 0x44, 0xD8, - 0xB1, 0xD9, 0xB0, 0x79, 0x44, 0xD9, 0x80, 0xD9, - 0x8B, 0x59, 0x44, 0xD9, 0x80, 0xD9, 0x8E, 0x65, - 0x44, 0xD9, 0x80, 0xD9, 0x8F, 0x69, 0x44, 0xD9, - // Bytes 4440 - 447f - 0x80, 0xD9, 0x90, 0x6D, 0x44, 0xD9, 0x80, 0xD9, - 0x91, 0x71, 0x44, 0xD9, 0x80, 0xD9, 0x92, 0x75, - 0x44, 0xD9, 0x87, 0xD9, 0xB0, 0x79, 0x44, 0xD9, - 0x88, 0xD9, 0x94, 0xC9, 0x44, 0xD9, 0x89, 0xD9, - 0xB0, 0x79, 0x44, 0xD9, 0x8A, 0xD9, 0x94, 0xC9, - 0x44, 0xDB, 0x92, 0xD9, 0x94, 0xC9, 0x44, 0xDB, - 0x95, 0xD9, 0x94, 0xC9, 0x45, 0x20, 0xCC, 0x88, - 0xCC, 0x80, 0xCA, 0x45, 0x20, 0xCC, 0x88, 0xCC, - // Bytes 4480 - 44bf - 0x81, 0xCA, 0x45, 0x20, 0xCC, 0x88, 0xCD, 0x82, - 0xCA, 0x45, 0x20, 0xCC, 0x93, 0xCC, 0x80, 0xCA, - 0x45, 0x20, 0xCC, 0x93, 0xCC, 0x81, 0xCA, 0x45, - 0x20, 0xCC, 0x93, 0xCD, 0x82, 0xCA, 0x45, 0x20, - 0xCC, 0x94, 0xCC, 0x80, 0xCA, 0x45, 0x20, 0xCC, - 0x94, 0xCC, 0x81, 0xCA, 0x45, 0x20, 0xCC, 0x94, - 0xCD, 0x82, 0xCA, 0x45, 0x20, 0xD9, 0x8C, 0xD9, - 0x91, 0x72, 0x45, 0x20, 0xD9, 0x8D, 0xD9, 0x91, - // Bytes 44c0 - 44ff - 0x72, 0x45, 0x20, 0xD9, 0x8E, 0xD9, 0x91, 0x72, - 0x45, 0x20, 0xD9, 0x8F, 0xD9, 0x91, 0x72, 0x45, - 0x20, 0xD9, 0x90, 0xD9, 0x91, 0x72, 0x45, 0x20, - 0xD9, 0x91, 0xD9, 0xB0, 0x7A, 0x45, 0xE2, 0xAB, - 0x9D, 0xCC, 0xB8, 0x05, 0x46, 0xCE, 0xB9, 0xCC, - 0x88, 0xCC, 0x81, 0xCA, 0x46, 0xCF, 0x85, 0xCC, - 0x88, 0xCC, 0x81, 0xCA, 0x46, 0xD7, 0xA9, 0xD6, - 0xBC, 0xD7, 0x81, 0x4E, 0x46, 0xD7, 0xA9, 0xD6, - // Bytes 4500 - 453f - 0xBC, 0xD7, 0x82, 0x52, 0x46, 0xD9, 0x80, 0xD9, - 0x8E, 0xD9, 0x91, 0x72, 0x46, 0xD9, 0x80, 0xD9, - 0x8F, 0xD9, 0x91, 0x72, 0x46, 0xD9, 0x80, 0xD9, - 0x90, 0xD9, 0x91, 0x72, 0x46, 0xE0, 0xA4, 0x95, - 0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0x96, - 0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0x97, - 0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0x9C, - 0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0xA1, - // Bytes 4540 - 457f - 0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0xA2, - 0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0xAB, - 0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0xAF, - 0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA6, 0xA1, - 0xE0, 0xA6, 0xBC, 0x09, 0x46, 0xE0, 0xA6, 0xA2, - 0xE0, 0xA6, 0xBC, 0x09, 0x46, 0xE0, 0xA6, 0xAF, - 0xE0, 0xA6, 0xBC, 0x09, 0x46, 0xE0, 0xA8, 0x96, - 0xE0, 0xA8, 0xBC, 0x09, 0x46, 0xE0, 0xA8, 0x97, - // Bytes 4580 - 45bf - 0xE0, 0xA8, 0xBC, 0x09, 0x46, 0xE0, 0xA8, 0x9C, - 0xE0, 0xA8, 0xBC, 0x09, 0x46, 0xE0, 0xA8, 0xAB, - 0xE0, 0xA8, 0xBC, 0x09, 0x46, 0xE0, 0xA8, 0xB2, - 0xE0, 0xA8, 0xBC, 0x09, 0x46, 0xE0, 0xA8, 0xB8, - 0xE0, 0xA8, 0xBC, 0x09, 0x46, 0xE0, 0xAC, 0xA1, - 0xE0, 0xAC, 0xBC, 0x09, 0x46, 0xE0, 0xAC, 0xA2, - 0xE0, 0xAC, 0xBC, 0x09, 0x46, 0xE0, 0xBE, 0xB2, - 0xE0, 0xBE, 0x80, 0x9D, 0x46, 0xE0, 0xBE, 0xB3, - // Bytes 45c0 - 45ff - 0xE0, 0xBE, 0x80, 0x9D, 0x46, 0xE3, 0x83, 0x86, - 0xE3, 0x82, 0x99, 0x0D, 0x48, 0xF0, 0x9D, 0x85, - 0x97, 0xF0, 0x9D, 0x85, 0xA5, 0xAD, 0x48, 0xF0, - 0x9D, 0x85, 0x98, 0xF0, 0x9D, 0x85, 0xA5, 0xAD, - 0x48, 0xF0, 0x9D, 0x86, 0xB9, 0xF0, 0x9D, 0x85, - 0xA5, 0xAD, 0x48, 0xF0, 0x9D, 0x86, 0xBA, 0xF0, - 0x9D, 0x85, 0xA5, 0xAD, 0x49, 0xE0, 0xBE, 0xB2, - 0xE0, 0xBD, 0xB1, 0xE0, 0xBE, 0x80, 0x9E, 0x49, - // Bytes 4600 - 463f - 0xE0, 0xBE, 0xB3, 0xE0, 0xBD, 0xB1, 0xE0, 0xBE, - 0x80, 0x9E, 0x4C, 0xF0, 0x9D, 0x85, 0x98, 0xF0, - 0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85, 0xAE, 0xAE, - 0x4C, 0xF0, 0x9D, 0x85, 0x98, 0xF0, 0x9D, 0x85, - 0xA5, 0xF0, 0x9D, 0x85, 0xAF, 0xAE, 0x4C, 0xF0, - 0x9D, 0x85, 0x98, 0xF0, 0x9D, 0x85, 0xA5, 0xF0, - 0x9D, 0x85, 0xB0, 0xAE, 0x4C, 0xF0, 0x9D, 0x85, - 0x98, 0xF0, 0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85, - // Bytes 4640 - 467f - 0xB1, 0xAE, 0x4C, 0xF0, 0x9D, 0x85, 0x98, 0xF0, - 0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85, 0xB2, 0xAE, - 0x4C, 0xF0, 0x9D, 0x86, 0xB9, 0xF0, 0x9D, 0x85, - 0xA5, 0xF0, 0x9D, 0x85, 0xAE, 0xAE, 0x4C, 0xF0, - 0x9D, 0x86, 0xB9, 0xF0, 0x9D, 0x85, 0xA5, 0xF0, - 0x9D, 0x85, 0xAF, 0xAE, 0x4C, 0xF0, 0x9D, 0x86, - 0xBA, 0xF0, 0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85, - 0xAE, 0xAE, 0x4C, 0xF0, 0x9D, 0x86, 0xBA, 0xF0, - // Bytes 4680 - 46bf - 0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85, 0xAF, 0xAE, - 0x83, 0x41, 0xCC, 0x82, 0xC9, 0x83, 0x41, 0xCC, - 0x86, 0xC9, 0x83, 0x41, 0xCC, 0x87, 0xC9, 0x83, - 0x41, 0xCC, 0x88, 0xC9, 0x83, 0x41, 0xCC, 0x8A, - 0xC9, 0x83, 0x41, 0xCC, 0xA3, 0xB5, 0x83, 0x43, - 0xCC, 0xA7, 0xA5, 0x83, 0x45, 0xCC, 0x82, 0xC9, - 0x83, 0x45, 0xCC, 0x84, 0xC9, 0x83, 0x45, 0xCC, - 0xA3, 0xB5, 0x83, 0x45, 0xCC, 0xA7, 0xA5, 0x83, - // Bytes 46c0 - 46ff - 0x49, 0xCC, 0x88, 0xC9, 0x83, 0x4C, 0xCC, 0xA3, - 0xB5, 0x83, 0x4F, 0xCC, 0x82, 0xC9, 0x83, 0x4F, - 0xCC, 0x83, 0xC9, 0x83, 0x4F, 0xCC, 0x84, 0xC9, - 0x83, 0x4F, 0xCC, 0x87, 0xC9, 0x83, 0x4F, 0xCC, - 0x88, 0xC9, 0x83, 0x4F, 0xCC, 0x9B, 0xAD, 0x83, - 0x4F, 0xCC, 0xA3, 0xB5, 0x83, 0x4F, 0xCC, 0xA8, - 0xA5, 0x83, 0x52, 0xCC, 0xA3, 0xB5, 0x83, 0x53, - 0xCC, 0x81, 0xC9, 0x83, 0x53, 0xCC, 0x8C, 0xC9, - // Bytes 4700 - 473f - 0x83, 0x53, 0xCC, 0xA3, 0xB5, 0x83, 0x55, 0xCC, - 0x83, 0xC9, 0x83, 0x55, 0xCC, 0x84, 0xC9, 0x83, - 0x55, 0xCC, 0x88, 0xC9, 0x83, 0x55, 0xCC, 0x9B, - 0xAD, 0x83, 0x61, 0xCC, 0x82, 0xC9, 0x83, 0x61, - 0xCC, 0x86, 0xC9, 0x83, 0x61, 0xCC, 0x87, 0xC9, - 0x83, 0x61, 0xCC, 0x88, 0xC9, 0x83, 0x61, 0xCC, - 0x8A, 0xC9, 0x83, 0x61, 0xCC, 0xA3, 0xB5, 0x83, - 0x63, 0xCC, 0xA7, 0xA5, 0x83, 0x65, 0xCC, 0x82, - // Bytes 4740 - 477f - 0xC9, 0x83, 0x65, 0xCC, 0x84, 0xC9, 0x83, 0x65, - 0xCC, 0xA3, 0xB5, 0x83, 0x65, 0xCC, 0xA7, 0xA5, - 0x83, 0x69, 0xCC, 0x88, 0xC9, 0x83, 0x6C, 0xCC, - 0xA3, 0xB5, 0x83, 0x6F, 0xCC, 0x82, 0xC9, 0x83, - 0x6F, 0xCC, 0x83, 0xC9, 0x83, 0x6F, 0xCC, 0x84, - 0xC9, 0x83, 0x6F, 0xCC, 0x87, 0xC9, 0x83, 0x6F, - 0xCC, 0x88, 0xC9, 0x83, 0x6F, 0xCC, 0x9B, 0xAD, - 0x83, 0x6F, 0xCC, 0xA3, 0xB5, 0x83, 0x6F, 0xCC, - // Bytes 4780 - 47bf - 0xA8, 0xA5, 0x83, 0x72, 0xCC, 0xA3, 0xB5, 0x83, - 0x73, 0xCC, 0x81, 0xC9, 0x83, 0x73, 0xCC, 0x8C, - 0xC9, 0x83, 0x73, 0xCC, 0xA3, 0xB5, 0x83, 0x75, - 0xCC, 0x83, 0xC9, 0x83, 0x75, 0xCC, 0x84, 0xC9, - 0x83, 0x75, 0xCC, 0x88, 0xC9, 0x83, 0x75, 0xCC, - 0x9B, 0xAD, 0x84, 0xCE, 0x91, 0xCC, 0x93, 0xC9, - 0x84, 0xCE, 0x91, 0xCC, 0x94, 0xC9, 0x84, 0xCE, - 0x95, 0xCC, 0x93, 0xC9, 0x84, 0xCE, 0x95, 0xCC, - // Bytes 47c0 - 47ff - 0x94, 0xC9, 0x84, 0xCE, 0x97, 0xCC, 0x93, 0xC9, - 0x84, 0xCE, 0x97, 0xCC, 0x94, 0xC9, 0x84, 0xCE, - 0x99, 0xCC, 0x93, 0xC9, 0x84, 0xCE, 0x99, 0xCC, - 0x94, 0xC9, 0x84, 0xCE, 0x9F, 0xCC, 0x93, 0xC9, - 0x84, 0xCE, 0x9F, 0xCC, 0x94, 0xC9, 0x84, 0xCE, - 0xA5, 0xCC, 0x94, 0xC9, 0x84, 0xCE, 0xA9, 0xCC, - 0x93, 0xC9, 0x84, 0xCE, 0xA9, 0xCC, 0x94, 0xC9, - 0x84, 0xCE, 0xB1, 0xCC, 0x80, 0xC9, 0x84, 0xCE, - // Bytes 4800 - 483f - 0xB1, 0xCC, 0x81, 0xC9, 0x84, 0xCE, 0xB1, 0xCC, - 0x93, 0xC9, 0x84, 0xCE, 0xB1, 0xCC, 0x94, 0xC9, - 0x84, 0xCE, 0xB1, 0xCD, 0x82, 0xC9, 0x84, 0xCE, - 0xB5, 0xCC, 0x93, 0xC9, 0x84, 0xCE, 0xB5, 0xCC, - 0x94, 0xC9, 0x84, 0xCE, 0xB7, 0xCC, 0x80, 0xC9, - 0x84, 0xCE, 0xB7, 0xCC, 0x81, 0xC9, 0x84, 0xCE, - 0xB7, 0xCC, 0x93, 0xC9, 0x84, 0xCE, 0xB7, 0xCC, - 0x94, 0xC9, 0x84, 0xCE, 0xB7, 0xCD, 0x82, 0xC9, - // Bytes 4840 - 487f - 0x84, 0xCE, 0xB9, 0xCC, 0x88, 0xC9, 0x84, 0xCE, - 0xB9, 0xCC, 0x93, 0xC9, 0x84, 0xCE, 0xB9, 0xCC, - 0x94, 0xC9, 0x84, 0xCE, 0xBF, 0xCC, 0x93, 0xC9, - 0x84, 0xCE, 0xBF, 0xCC, 0x94, 0xC9, 0x84, 0xCF, - 0x85, 0xCC, 0x88, 0xC9, 0x84, 0xCF, 0x85, 0xCC, - 0x93, 0xC9, 0x84, 0xCF, 0x85, 0xCC, 0x94, 0xC9, - 0x84, 0xCF, 0x89, 0xCC, 0x80, 0xC9, 0x84, 0xCF, - 0x89, 0xCC, 0x81, 0xC9, 0x84, 0xCF, 0x89, 0xCC, - // Bytes 4880 - 48bf - 0x93, 0xC9, 0x84, 0xCF, 0x89, 0xCC, 0x94, 0xC9, - 0x84, 0xCF, 0x89, 0xCD, 0x82, 0xC9, 0x86, 0xCE, - 0x91, 0xCC, 0x93, 0xCC, 0x80, 0xCA, 0x86, 0xCE, - 0x91, 0xCC, 0x93, 0xCC, 0x81, 0xCA, 0x86, 0xCE, - 0x91, 0xCC, 0x93, 0xCD, 0x82, 0xCA, 0x86, 0xCE, - 0x91, 0xCC, 0x94, 0xCC, 0x80, 0xCA, 0x86, 0xCE, - 0x91, 0xCC, 0x94, 0xCC, 0x81, 0xCA, 0x86, 0xCE, - 0x91, 0xCC, 0x94, 0xCD, 0x82, 0xCA, 0x86, 0xCE, - // Bytes 48c0 - 48ff - 0x97, 0xCC, 0x93, 0xCC, 0x80, 0xCA, 0x86, 0xCE, - 0x97, 0xCC, 0x93, 0xCC, 0x81, 0xCA, 0x86, 0xCE, - 0x97, 0xCC, 0x93, 0xCD, 0x82, 0xCA, 0x86, 0xCE, - 0x97, 0xCC, 0x94, 0xCC, 0x80, 0xCA, 0x86, 0xCE, - 0x97, 0xCC, 0x94, 0xCC, 0x81, 0xCA, 0x86, 0xCE, - 0x97, 0xCC, 0x94, 0xCD, 0x82, 0xCA, 0x86, 0xCE, - 0xA9, 0xCC, 0x93, 0xCC, 0x80, 0xCA, 0x86, 0xCE, - 0xA9, 0xCC, 0x93, 0xCC, 0x81, 0xCA, 0x86, 0xCE, - // Bytes 4900 - 493f - 0xA9, 0xCC, 0x93, 0xCD, 0x82, 0xCA, 0x86, 0xCE, - 0xA9, 0xCC, 0x94, 0xCC, 0x80, 0xCA, 0x86, 0xCE, - 0xA9, 0xCC, 0x94, 0xCC, 0x81, 0xCA, 0x86, 0xCE, - 0xA9, 0xCC, 0x94, 0xCD, 0x82, 0xCA, 0x86, 0xCE, - 0xB1, 0xCC, 0x93, 0xCC, 0x80, 0xCA, 0x86, 0xCE, - 0xB1, 0xCC, 0x93, 0xCC, 0x81, 0xCA, 0x86, 0xCE, - 0xB1, 0xCC, 0x93, 0xCD, 0x82, 0xCA, 0x86, 0xCE, - 0xB1, 0xCC, 0x94, 0xCC, 0x80, 0xCA, 0x86, 0xCE, - // Bytes 4940 - 497f - 0xB1, 0xCC, 0x94, 0xCC, 0x81, 0xCA, 0x86, 0xCE, - 0xB1, 0xCC, 0x94, 0xCD, 0x82, 0xCA, 0x86, 0xCE, - 0xB7, 0xCC, 0x93, 0xCC, 0x80, 0xCA, 0x86, 0xCE, - 0xB7, 0xCC, 0x93, 0xCC, 0x81, 0xCA, 0x86, 0xCE, - 0xB7, 0xCC, 0x93, 0xCD, 0x82, 0xCA, 0x86, 0xCE, - 0xB7, 0xCC, 0x94, 0xCC, 0x80, 0xCA, 0x86, 0xCE, - 0xB7, 0xCC, 0x94, 0xCC, 0x81, 0xCA, 0x86, 0xCE, - 0xB7, 0xCC, 0x94, 0xCD, 0x82, 0xCA, 0x86, 0xCF, - // Bytes 4980 - 49bf - 0x89, 0xCC, 0x93, 0xCC, 0x80, 0xCA, 0x86, 0xCF, - 0x89, 0xCC, 0x93, 0xCC, 0x81, 0xCA, 0x86, 0xCF, - 0x89, 0xCC, 0x93, 0xCD, 0x82, 0xCA, 0x86, 0xCF, - 0x89, 0xCC, 0x94, 0xCC, 0x80, 0xCA, 0x86, 0xCF, - 0x89, 0xCC, 0x94, 0xCC, 0x81, 0xCA, 0x86, 0xCF, - 0x89, 0xCC, 0x94, 0xCD, 0x82, 0xCA, 0x42, 0xCC, - 0x80, 0xC9, 0x32, 0x42, 0xCC, 0x81, 0xC9, 0x32, - 0x42, 0xCC, 0x93, 0xC9, 0x32, 0x43, 0xE1, 0x85, - // Bytes 49c0 - 49ff - 0xA1, 0x01, 0x00, 0x43, 0xE1, 0x85, 0xA2, 0x01, - 0x00, 0x43, 0xE1, 0x85, 0xA3, 0x01, 0x00, 0x43, - 0xE1, 0x85, 0xA4, 0x01, 0x00, 0x43, 0xE1, 0x85, - 0xA5, 0x01, 0x00, 0x43, 0xE1, 0x85, 0xA6, 0x01, - 0x00, 0x43, 0xE1, 0x85, 0xA7, 0x01, 0x00, 0x43, - 0xE1, 0x85, 0xA8, 0x01, 0x00, 0x43, 0xE1, 0x85, - 0xA9, 0x01, 0x00, 0x43, 0xE1, 0x85, 0xAA, 0x01, - 0x00, 0x43, 0xE1, 0x85, 0xAB, 0x01, 0x00, 0x43, - // Bytes 4a00 - 4a3f - 0xE1, 0x85, 0xAC, 0x01, 0x00, 0x43, 0xE1, 0x85, - 0xAD, 0x01, 0x00, 0x43, 0xE1, 0x85, 0xAE, 0x01, - 0x00, 0x43, 0xE1, 0x85, 0xAF, 0x01, 0x00, 0x43, - 0xE1, 0x85, 0xB0, 0x01, 0x00, 0x43, 0xE1, 0x85, - 0xB1, 0x01, 0x00, 0x43, 0xE1, 0x85, 0xB2, 0x01, - 0x00, 0x43, 0xE1, 0x85, 0xB3, 0x01, 0x00, 0x43, - 0xE1, 0x85, 0xB4, 0x01, 0x00, 0x43, 0xE1, 0x85, - 0xB5, 0x01, 0x00, 0x43, 0xE1, 0x86, 0xAA, 0x01, - // Bytes 4a40 - 4a7f - 0x00, 0x43, 0xE1, 0x86, 0xAC, 0x01, 0x00, 0x43, - 0xE1, 0x86, 0xAD, 0x01, 0x00, 0x43, 0xE1, 0x86, - 0xB0, 0x01, 0x00, 0x43, 0xE1, 0x86, 0xB1, 0x01, - 0x00, 0x43, 0xE1, 0x86, 0xB2, 0x01, 0x00, 0x43, - 0xE1, 0x86, 0xB3, 0x01, 0x00, 0x43, 0xE1, 0x86, - 0xB4, 0x01, 0x00, 0x43, 0xE1, 0x86, 0xB5, 0x01, - 0x00, 0x44, 0xCC, 0x88, 0xCC, 0x81, 0xCA, 0x32, - 0x43, 0xE3, 0x82, 0x99, 0x0D, 0x03, 0x43, 0xE3, - // Bytes 4a80 - 4abf - 0x82, 0x9A, 0x0D, 0x03, 0x46, 0xE0, 0xBD, 0xB1, - 0xE0, 0xBD, 0xB2, 0x9E, 0x26, 0x46, 0xE0, 0xBD, - 0xB1, 0xE0, 0xBD, 0xB4, 0xA2, 0x26, 0x46, 0xE0, - 0xBD, 0xB1, 0xE0, 0xBE, 0x80, 0x9E, 0x26, 0x00, - 0x01, -} - -// lookup returns the trie value for the first UTF-8 encoding in s and -// the width in bytes of this encoding. The size will be 0 if s does not -// hold enough bytes to complete the encoding. len(s) must be greater than 0. -func (t *nfcTrie) lookup(s []byte) (v uint16, sz int) { - c0 := s[0] - switch { - case c0 < 0x80: // is ASCII - return nfcValues[c0], 1 - case c0 < 0xC2: - return 0, 1 // Illegal UTF-8: not a starter, not ASCII. - case c0 < 0xE0: // 2-byte UTF-8 - if len(s) < 2 { - return 0, 0 - } - i := nfcIndex[c0] - c1 := s[1] - if c1 < 0x80 || 0xC0 <= c1 { - return 0, 1 // Illegal UTF-8: not a continuation byte. - } - return t.lookupValue(uint32(i), c1), 2 - case c0 < 0xF0: // 3-byte UTF-8 - if len(s) < 3 { - return 0, 0 - } - i := nfcIndex[c0] - c1 := s[1] - if c1 < 0x80 || 0xC0 <= c1 { - return 0, 1 // Illegal UTF-8: not a continuation byte. - } - o := uint32(i)<<6 + uint32(c1) - i = nfcIndex[o] - c2 := s[2] - if c2 < 0x80 || 0xC0 <= c2 { - return 0, 2 // Illegal UTF-8: not a continuation byte. - } - return t.lookupValue(uint32(i), c2), 3 - case c0 < 0xF8: // 4-byte UTF-8 - if len(s) < 4 { - return 0, 0 - } - i := nfcIndex[c0] - c1 := s[1] - if c1 < 0x80 || 0xC0 <= c1 { - return 0, 1 // Illegal UTF-8: not a continuation byte. - } - o := uint32(i)<<6 + uint32(c1) - i = nfcIndex[o] - c2 := s[2] - if c2 < 0x80 || 0xC0 <= c2 { - return 0, 2 // Illegal UTF-8: not a continuation byte. - } - o = uint32(i)<<6 + uint32(c2) - i = nfcIndex[o] - c3 := s[3] - if c3 < 0x80 || 0xC0 <= c3 { - return 0, 3 // Illegal UTF-8: not a continuation byte. - } - return t.lookupValue(uint32(i), c3), 4 - } - // Illegal rune - return 0, 1 -} - -// lookupUnsafe returns the trie value for the first UTF-8 encoding in s. -// s must start with a full and valid UTF-8 encoded rune. -func (t *nfcTrie) lookupUnsafe(s []byte) uint16 { - c0 := s[0] - if c0 < 0x80 { // is ASCII - return nfcValues[c0] - } - i := nfcIndex[c0] - if c0 < 0xE0 { // 2-byte UTF-8 - return t.lookupValue(uint32(i), s[1]) - } - i = nfcIndex[uint32(i)<<6+uint32(s[1])] - if c0 < 0xF0 { // 3-byte UTF-8 - return t.lookupValue(uint32(i), s[2]) - } - i = nfcIndex[uint32(i)<<6+uint32(s[2])] - if c0 < 0xF8 { // 4-byte UTF-8 - return t.lookupValue(uint32(i), s[3]) - } - return 0 -} - -// lookupString returns the trie value for the first UTF-8 encoding in s and -// the width in bytes of this encoding. The size will be 0 if s does not -// hold enough bytes to complete the encoding. len(s) must be greater than 0. -func (t *nfcTrie) lookupString(s string) (v uint16, sz int) { - c0 := s[0] - switch { - case c0 < 0x80: // is ASCII - return nfcValues[c0], 1 - case c0 < 0xC2: - return 0, 1 // Illegal UTF-8: not a starter, not ASCII. - case c0 < 0xE0: // 2-byte UTF-8 - if len(s) < 2 { - return 0, 0 - } - i := nfcIndex[c0] - c1 := s[1] - if c1 < 0x80 || 0xC0 <= c1 { - return 0, 1 // Illegal UTF-8: not a continuation byte. - } - return t.lookupValue(uint32(i), c1), 2 - case c0 < 0xF0: // 3-byte UTF-8 - if len(s) < 3 { - return 0, 0 - } - i := nfcIndex[c0] - c1 := s[1] - if c1 < 0x80 || 0xC0 <= c1 { - return 0, 1 // Illegal UTF-8: not a continuation byte. - } - o := uint32(i)<<6 + uint32(c1) - i = nfcIndex[o] - c2 := s[2] - if c2 < 0x80 || 0xC0 <= c2 { - return 0, 2 // Illegal UTF-8: not a continuation byte. - } - return t.lookupValue(uint32(i), c2), 3 - case c0 < 0xF8: // 4-byte UTF-8 - if len(s) < 4 { - return 0, 0 - } - i := nfcIndex[c0] - c1 := s[1] - if c1 < 0x80 || 0xC0 <= c1 { - return 0, 1 // Illegal UTF-8: not a continuation byte. - } - o := uint32(i)<<6 + uint32(c1) - i = nfcIndex[o] - c2 := s[2] - if c2 < 0x80 || 0xC0 <= c2 { - return 0, 2 // Illegal UTF-8: not a continuation byte. - } - o = uint32(i)<<6 + uint32(c2) - i = nfcIndex[o] - c3 := s[3] - if c3 < 0x80 || 0xC0 <= c3 { - return 0, 3 // Illegal UTF-8: not a continuation byte. - } - return t.lookupValue(uint32(i), c3), 4 - } - // Illegal rune - return 0, 1 -} - -// lookupStringUnsafe returns the trie value for the first UTF-8 encoding in s. -// s must start with a full and valid UTF-8 encoded rune. -func (t *nfcTrie) lookupStringUnsafe(s string) uint16 { - c0 := s[0] - if c0 < 0x80 { // is ASCII - return nfcValues[c0] - } - i := nfcIndex[c0] - if c0 < 0xE0 { // 2-byte UTF-8 - return t.lookupValue(uint32(i), s[1]) - } - i = nfcIndex[uint32(i)<<6+uint32(s[1])] - if c0 < 0xF0 { // 3-byte UTF-8 - return t.lookupValue(uint32(i), s[2]) - } - i = nfcIndex[uint32(i)<<6+uint32(s[2])] - if c0 < 0xF8 { // 4-byte UTF-8 - return t.lookupValue(uint32(i), s[3]) - } - return 0 -} - -// nfcTrie. Total size: 10442 bytes (10.20 KiB). Checksum: 4ba400a9d8208e03. -type nfcTrie struct{} - -func newNfcTrie(i int) *nfcTrie { - return &nfcTrie{} -} - -// lookupValue determines the type of block n and looks up the value for b. -func (t *nfcTrie) lookupValue(n uint32, b byte) uint16 { - switch { - case n < 45: - return uint16(nfcValues[n<<6+uint32(b)]) - default: - n -= 45 - return uint16(nfcSparse.lookup(n, b)) - } -} - -// nfcValues: 47 blocks, 3008 entries, 6016 bytes -// The third block is the zero block. -var nfcValues = [3008]uint16{ - // Block 0x0, offset 0x0 - 0x3c: 0xa000, 0x3d: 0xa000, 0x3e: 0xa000, - // Block 0x1, offset 0x40 - 0x41: 0xa000, 0x42: 0xa000, 0x43: 0xa000, 0x44: 0xa000, 0x45: 0xa000, - 0x46: 0xa000, 0x47: 0xa000, 0x48: 0xa000, 0x49: 0xa000, 0x4a: 0xa000, 0x4b: 0xa000, - 0x4c: 0xa000, 0x4d: 0xa000, 0x4e: 0xa000, 0x4f: 0xa000, 0x50: 0xa000, - 0x52: 0xa000, 0x53: 0xa000, 0x54: 0xa000, 0x55: 0xa000, 0x56: 0xa000, 0x57: 0xa000, - 0x58: 0xa000, 0x59: 0xa000, 0x5a: 0xa000, - 0x61: 0xa000, 0x62: 0xa000, 0x63: 0xa000, - 0x64: 0xa000, 0x65: 0xa000, 0x66: 0xa000, 0x67: 0xa000, 0x68: 0xa000, 0x69: 0xa000, - 0x6a: 0xa000, 0x6b: 0xa000, 0x6c: 0xa000, 0x6d: 0xa000, 0x6e: 0xa000, 0x6f: 0xa000, - 0x70: 0xa000, 0x72: 0xa000, 0x73: 0xa000, 0x74: 0xa000, 0x75: 0xa000, - 0x76: 0xa000, 0x77: 0xa000, 0x78: 0xa000, 0x79: 0xa000, 0x7a: 0xa000, - // Block 0x2, offset 0x80 - // Block 0x3, offset 0xc0 - 0xc0: 0x2f6f, 0xc1: 0x2f74, 0xc2: 0x4688, 0xc3: 0x2f79, 0xc4: 0x4697, 0xc5: 0x469c, - 0xc6: 0xa000, 0xc7: 0x46a6, 0xc8: 0x2fe2, 0xc9: 0x2fe7, 0xca: 0x46ab, 0xcb: 0x2ffb, - 0xcc: 0x306e, 0xcd: 0x3073, 0xce: 0x3078, 0xcf: 0x46bf, 0xd1: 0x3104, - 0xd2: 0x3127, 0xd3: 0x312c, 0xd4: 0x46c9, 0xd5: 0x46ce, 0xd6: 0x46dd, - 0xd8: 0xa000, 0xd9: 0x31b3, 0xda: 0x31b8, 0xdb: 0x31bd, 0xdc: 0x470f, 0xdd: 0x3235, - 0xe0: 0x327b, 0xe1: 0x3280, 0xe2: 0x4719, 0xe3: 0x3285, - 0xe4: 0x4728, 0xe5: 0x472d, 0xe6: 0xa000, 0xe7: 0x4737, 0xe8: 0x32ee, 0xe9: 0x32f3, - 0xea: 0x473c, 0xeb: 0x3307, 0xec: 0x337f, 0xed: 0x3384, 0xee: 0x3389, 0xef: 0x4750, - 0xf1: 0x3415, 0xf2: 0x3438, 0xf3: 0x343d, 0xf4: 0x475a, 0xf5: 0x475f, - 0xf6: 0x476e, 0xf8: 0xa000, 0xf9: 0x34c9, 0xfa: 0x34ce, 0xfb: 0x34d3, - 0xfc: 0x47a0, 0xfd: 0x3550, 0xff: 0x3569, - // Block 0x4, offset 0x100 - 0x100: 0x2f7e, 0x101: 0x328a, 0x102: 0x468d, 0x103: 0x471e, 0x104: 0x2f9c, 0x105: 0x32a8, - 0x106: 0x2fb0, 0x107: 0x32bc, 0x108: 0x2fb5, 0x109: 0x32c1, 0x10a: 0x2fba, 0x10b: 0x32c6, - 0x10c: 0x2fbf, 0x10d: 0x32cb, 0x10e: 0x2fc9, 0x10f: 0x32d5, - 0x112: 0x46b0, 0x113: 0x4741, 0x114: 0x2ff1, 0x115: 0x32fd, 0x116: 0x2ff6, 0x117: 0x3302, - 0x118: 0x3014, 0x119: 0x3320, 0x11a: 0x3005, 0x11b: 0x3311, 0x11c: 0x302d, 0x11d: 0x3339, - 0x11e: 0x3037, 0x11f: 0x3343, 0x120: 0x303c, 0x121: 0x3348, 0x122: 0x3046, 0x123: 0x3352, - 0x124: 0x304b, 0x125: 0x3357, 0x128: 0x307d, 0x129: 0x338e, - 0x12a: 0x3082, 0x12b: 0x3393, 0x12c: 0x3087, 0x12d: 0x3398, 0x12e: 0x30aa, 0x12f: 0x33b6, - 0x130: 0x308c, 0x134: 0x30b4, 0x135: 0x33c0, - 0x136: 0x30c8, 0x137: 0x33d9, 0x139: 0x30d2, 0x13a: 0x33e3, 0x13b: 0x30dc, - 0x13c: 0x33ed, 0x13d: 0x30d7, 0x13e: 0x33e8, - // Block 0x5, offset 0x140 - 0x143: 0x30ff, 0x144: 0x3410, 0x145: 0x3118, - 0x146: 0x3429, 0x147: 0x310e, 0x148: 0x341f, - 0x14c: 0x46d3, 0x14d: 0x4764, 0x14e: 0x3131, 0x14f: 0x3442, 0x150: 0x313b, 0x151: 0x344c, - 0x154: 0x3159, 0x155: 0x346a, 0x156: 0x3172, 0x157: 0x3483, - 0x158: 0x3163, 0x159: 0x3474, 0x15a: 0x46f6, 0x15b: 0x4787, 0x15c: 0x317c, 0x15d: 0x348d, - 0x15e: 0x318b, 0x15f: 0x349c, 0x160: 0x46fb, 0x161: 0x478c, 0x162: 0x31a4, 0x163: 0x34ba, - 0x164: 0x3195, 0x165: 0x34ab, 0x168: 0x4705, 0x169: 0x4796, - 0x16a: 0x470a, 0x16b: 0x479b, 0x16c: 0x31c2, 0x16d: 0x34d8, 0x16e: 0x31cc, 0x16f: 0x34e2, - 0x170: 0x31d1, 0x171: 0x34e7, 0x172: 0x31ef, 0x173: 0x3505, 0x174: 0x3212, 0x175: 0x3528, - 0x176: 0x323a, 0x177: 0x3555, 0x178: 0x324e, 0x179: 0x325d, 0x17a: 0x357d, 0x17b: 0x3267, - 0x17c: 0x3587, 0x17d: 0x326c, 0x17e: 0x358c, 0x17f: 0xa000, - // Block 0x6, offset 0x180 - 0x184: 0x8100, 0x185: 0x8100, - 0x186: 0x8100, - 0x18d: 0x2f88, 0x18e: 0x3294, 0x18f: 0x3096, 0x190: 0x33a2, 0x191: 0x3140, - 0x192: 0x3451, 0x193: 0x31d6, 0x194: 0x34ec, 0x195: 0x39cf, 0x196: 0x3b5e, 0x197: 0x39c8, - 0x198: 0x3b57, 0x199: 0x39d6, 0x19a: 0x3b65, 0x19b: 0x39c1, 0x19c: 0x3b50, - 0x19e: 0x38b0, 0x19f: 0x3a3f, 0x1a0: 0x38a9, 0x1a1: 0x3a38, 0x1a2: 0x35b3, 0x1a3: 0x35c5, - 0x1a6: 0x3041, 0x1a7: 0x334d, 0x1a8: 0x30be, 0x1a9: 0x33cf, - 0x1aa: 0x46ec, 0x1ab: 0x477d, 0x1ac: 0x3990, 0x1ad: 0x3b1f, 0x1ae: 0x35d7, 0x1af: 0x35dd, - 0x1b0: 0x33c5, 0x1b4: 0x3028, 0x1b5: 0x3334, - 0x1b8: 0x30fa, 0x1b9: 0x340b, 0x1ba: 0x38b7, 0x1bb: 0x3a46, - 0x1bc: 0x35ad, 0x1bd: 0x35bf, 0x1be: 0x35b9, 0x1bf: 0x35cb, - // Block 0x7, offset 0x1c0 - 0x1c0: 0x2f8d, 0x1c1: 0x3299, 0x1c2: 0x2f92, 0x1c3: 0x329e, 0x1c4: 0x300a, 0x1c5: 0x3316, - 0x1c6: 0x300f, 0x1c7: 0x331b, 0x1c8: 0x309b, 0x1c9: 0x33a7, 0x1ca: 0x30a0, 0x1cb: 0x33ac, - 0x1cc: 0x3145, 0x1cd: 0x3456, 0x1ce: 0x314a, 0x1cf: 0x345b, 0x1d0: 0x3168, 0x1d1: 0x3479, - 0x1d2: 0x316d, 0x1d3: 0x347e, 0x1d4: 0x31db, 0x1d5: 0x34f1, 0x1d6: 0x31e0, 0x1d7: 0x34f6, - 0x1d8: 0x3186, 0x1d9: 0x3497, 0x1da: 0x319f, 0x1db: 0x34b5, - 0x1de: 0x305a, 0x1df: 0x3366, - 0x1e6: 0x4692, 0x1e7: 0x4723, 0x1e8: 0x46ba, 0x1e9: 0x474b, - 0x1ea: 0x395f, 0x1eb: 0x3aee, 0x1ec: 0x393c, 0x1ed: 0x3acb, 0x1ee: 0x46d8, 0x1ef: 0x4769, - 0x1f0: 0x3958, 0x1f1: 0x3ae7, 0x1f2: 0x3244, 0x1f3: 0x355f, - // Block 0x8, offset 0x200 - 0x200: 0x9932, 0x201: 0x9932, 0x202: 0x9932, 0x203: 0x9932, 0x204: 0x9932, 0x205: 0x8132, - 0x206: 0x9932, 0x207: 0x9932, 0x208: 0x9932, 0x209: 0x9932, 0x20a: 0x9932, 0x20b: 0x9932, - 0x20c: 0x9932, 0x20d: 0x8132, 0x20e: 0x8132, 0x20f: 0x9932, 0x210: 0x8132, 0x211: 0x9932, - 0x212: 0x8132, 0x213: 0x9932, 0x214: 0x9932, 0x215: 0x8133, 0x216: 0x812d, 0x217: 0x812d, - 0x218: 0x812d, 0x219: 0x812d, 0x21a: 0x8133, 0x21b: 0x992b, 0x21c: 0x812d, 0x21d: 0x812d, - 0x21e: 0x812d, 0x21f: 0x812d, 0x220: 0x812d, 0x221: 0x8129, 0x222: 0x8129, 0x223: 0x992d, - 0x224: 0x992d, 0x225: 0x992d, 0x226: 0x992d, 0x227: 0x9929, 0x228: 0x9929, 0x229: 0x812d, - 0x22a: 0x812d, 0x22b: 0x812d, 0x22c: 0x812d, 0x22d: 0x992d, 0x22e: 0x992d, 0x22f: 0x812d, - 0x230: 0x992d, 0x231: 0x992d, 0x232: 0x812d, 0x233: 0x812d, 0x234: 0x8101, 0x235: 0x8101, - 0x236: 0x8101, 0x237: 0x8101, 0x238: 0x9901, 0x239: 0x812d, 0x23a: 0x812d, 0x23b: 0x812d, - 0x23c: 0x812d, 0x23d: 0x8132, 0x23e: 0x8132, 0x23f: 0x8132, - // Block 0x9, offset 0x240 - 0x240: 0x49ae, 0x241: 0x49b3, 0x242: 0x9932, 0x243: 0x49b8, 0x244: 0x4a71, 0x245: 0x9936, - 0x246: 0x8132, 0x247: 0x812d, 0x248: 0x812d, 0x249: 0x812d, 0x24a: 0x8132, 0x24b: 0x8132, - 0x24c: 0x8132, 0x24d: 0x812d, 0x24e: 0x812d, 0x250: 0x8132, 0x251: 0x8132, - 0x252: 0x8132, 0x253: 0x812d, 0x254: 0x812d, 0x255: 0x812d, 0x256: 0x812d, 0x257: 0x8132, - 0x258: 0x8133, 0x259: 0x812d, 0x25a: 0x812d, 0x25b: 0x8132, 0x25c: 0x8134, 0x25d: 0x8135, - 0x25e: 0x8135, 0x25f: 0x8134, 0x260: 0x8135, 0x261: 0x8135, 0x262: 0x8134, 0x263: 0x8132, - 0x264: 0x8132, 0x265: 0x8132, 0x266: 0x8132, 0x267: 0x8132, 0x268: 0x8132, 0x269: 0x8132, - 0x26a: 0x8132, 0x26b: 0x8132, 0x26c: 0x8132, 0x26d: 0x8132, 0x26e: 0x8132, 0x26f: 0x8132, - 0x274: 0x0170, - 0x27a: 0x8100, - 0x27e: 0x0037, - // Block 0xa, offset 0x280 - 0x284: 0x8100, 0x285: 0x35a1, - 0x286: 0x35e9, 0x287: 0x00ce, 0x288: 0x3607, 0x289: 0x3613, 0x28a: 0x3625, - 0x28c: 0x3643, 0x28e: 0x3655, 0x28f: 0x3673, 0x290: 0x3e08, 0x291: 0xa000, - 0x295: 0xa000, 0x297: 0xa000, - 0x299: 0xa000, - 0x29f: 0xa000, 0x2a1: 0xa000, - 0x2a5: 0xa000, 0x2a9: 0xa000, - 0x2aa: 0x3637, 0x2ab: 0x3667, 0x2ac: 0x47fe, 0x2ad: 0x3697, 0x2ae: 0x4828, 0x2af: 0x36a9, - 0x2b0: 0x3e70, 0x2b1: 0xa000, 0x2b5: 0xa000, - 0x2b7: 0xa000, 0x2b9: 0xa000, - 0x2bf: 0xa000, - // Block 0xb, offset 0x2c0 - 0x2c0: 0x3721, 0x2c1: 0x372d, 0x2c3: 0x371b, - 0x2c6: 0xa000, 0x2c7: 0x3709, - 0x2cc: 0x375d, 0x2cd: 0x3745, 0x2ce: 0x376f, 0x2d0: 0xa000, - 0x2d3: 0xa000, 0x2d5: 0xa000, 0x2d6: 0xa000, 0x2d7: 0xa000, - 0x2d8: 0xa000, 0x2d9: 0x3751, 0x2da: 0xa000, - 0x2de: 0xa000, 0x2e3: 0xa000, - 0x2e7: 0xa000, - 0x2eb: 0xa000, 0x2ed: 0xa000, - 0x2f0: 0xa000, 0x2f3: 0xa000, 0x2f5: 0xa000, - 0x2f6: 0xa000, 0x2f7: 0xa000, 0x2f8: 0xa000, 0x2f9: 0x37d5, 0x2fa: 0xa000, - 0x2fe: 0xa000, - // Block 0xc, offset 0x300 - 0x301: 0x3733, 0x302: 0x37b7, - 0x310: 0x370f, 0x311: 0x3793, - 0x312: 0x3715, 0x313: 0x3799, 0x316: 0x3727, 0x317: 0x37ab, - 0x318: 0xa000, 0x319: 0xa000, 0x31a: 0x3829, 0x31b: 0x382f, 0x31c: 0x3739, 0x31d: 0x37bd, - 0x31e: 0x373f, 0x31f: 0x37c3, 0x322: 0x374b, 0x323: 0x37cf, - 0x324: 0x3757, 0x325: 0x37db, 0x326: 0x3763, 0x327: 0x37e7, 0x328: 0xa000, 0x329: 0xa000, - 0x32a: 0x3835, 0x32b: 0x383b, 0x32c: 0x378d, 0x32d: 0x3811, 0x32e: 0x3769, 0x32f: 0x37ed, - 0x330: 0x3775, 0x331: 0x37f9, 0x332: 0x377b, 0x333: 0x37ff, 0x334: 0x3781, 0x335: 0x3805, - 0x338: 0x3787, 0x339: 0x380b, - // Block 0xd, offset 0x340 - 0x351: 0x812d, - 0x352: 0x8132, 0x353: 0x8132, 0x354: 0x8132, 0x355: 0x8132, 0x356: 0x812d, 0x357: 0x8132, - 0x358: 0x8132, 0x359: 0x8132, 0x35a: 0x812e, 0x35b: 0x812d, 0x35c: 0x8132, 0x35d: 0x8132, - 0x35e: 0x8132, 0x35f: 0x8132, 0x360: 0x8132, 0x361: 0x8132, 0x362: 0x812d, 0x363: 0x812d, - 0x364: 0x812d, 0x365: 0x812d, 0x366: 0x812d, 0x367: 0x812d, 0x368: 0x8132, 0x369: 0x8132, - 0x36a: 0x812d, 0x36b: 0x8132, 0x36c: 0x8132, 0x36d: 0x812e, 0x36e: 0x8131, 0x36f: 0x8132, - 0x370: 0x8105, 0x371: 0x8106, 0x372: 0x8107, 0x373: 0x8108, 0x374: 0x8109, 0x375: 0x810a, - 0x376: 0x810b, 0x377: 0x810c, 0x378: 0x810d, 0x379: 0x810e, 0x37a: 0x810e, 0x37b: 0x810f, - 0x37c: 0x8110, 0x37d: 0x8111, 0x37f: 0x8112, - // Block 0xe, offset 0x380 - 0x388: 0xa000, 0x38a: 0xa000, 0x38b: 0x8116, - 0x38c: 0x8117, 0x38d: 0x8118, 0x38e: 0x8119, 0x38f: 0x811a, 0x390: 0x811b, 0x391: 0x811c, - 0x392: 0x811d, 0x393: 0x9932, 0x394: 0x9932, 0x395: 0x992d, 0x396: 0x812d, 0x397: 0x8132, - 0x398: 0x8132, 0x399: 0x8132, 0x39a: 0x8132, 0x39b: 0x8132, 0x39c: 0x812d, 0x39d: 0x8132, - 0x39e: 0x8132, 0x39f: 0x812d, - 0x3b0: 0x811e, - // Block 0xf, offset 0x3c0 - 0x3c5: 0xa000, - 0x3c6: 0x2d26, 0x3c7: 0xa000, 0x3c8: 0x2d2e, 0x3c9: 0xa000, 0x3ca: 0x2d36, 0x3cb: 0xa000, - 0x3cc: 0x2d3e, 0x3cd: 0xa000, 0x3ce: 0x2d46, 0x3d1: 0xa000, - 0x3d2: 0x2d4e, - 0x3f4: 0x8102, 0x3f5: 0x9900, - 0x3fa: 0xa000, 0x3fb: 0x2d56, - 0x3fc: 0xa000, 0x3fd: 0x2d5e, 0x3fe: 0xa000, 0x3ff: 0xa000, - // Block 0x10, offset 0x400 - 0x400: 0x8132, 0x401: 0x8132, 0x402: 0x812d, 0x403: 0x8132, 0x404: 0x8132, 0x405: 0x8132, - 0x406: 0x8132, 0x407: 0x8132, 0x408: 0x8132, 0x409: 0x8132, 0x40a: 0x812d, 0x40b: 0x8132, - 0x40c: 0x8132, 0x40d: 0x8135, 0x40e: 0x812a, 0x40f: 0x812d, 0x410: 0x8129, 0x411: 0x8132, - 0x412: 0x8132, 0x413: 0x8132, 0x414: 0x8132, 0x415: 0x8132, 0x416: 0x8132, 0x417: 0x8132, - 0x418: 0x8132, 0x419: 0x8132, 0x41a: 0x8132, 0x41b: 0x8132, 0x41c: 0x8132, 0x41d: 0x8132, - 0x41e: 0x8132, 0x41f: 0x8132, 0x420: 0x8132, 0x421: 0x8132, 0x422: 0x8132, 0x423: 0x8132, - 0x424: 0x8132, 0x425: 0x8132, 0x426: 0x8132, 0x427: 0x8132, 0x428: 0x8132, 0x429: 0x8132, - 0x42a: 0x8132, 0x42b: 0x8132, 0x42c: 0x8132, 0x42d: 0x8132, 0x42e: 0x8132, 0x42f: 0x8132, - 0x430: 0x8132, 0x431: 0x8132, 0x432: 0x8132, 0x433: 0x8132, 0x434: 0x8132, 0x435: 0x8132, - 0x436: 0x8133, 0x437: 0x8131, 0x438: 0x8131, 0x439: 0x812d, 0x43b: 0x8132, - 0x43c: 0x8134, 0x43d: 0x812d, 0x43e: 0x8132, 0x43f: 0x812d, - // Block 0x11, offset 0x440 - 0x440: 0x2f97, 0x441: 0x32a3, 0x442: 0x2fa1, 0x443: 0x32ad, 0x444: 0x2fa6, 0x445: 0x32b2, - 0x446: 0x2fab, 0x447: 0x32b7, 0x448: 0x38cc, 0x449: 0x3a5b, 0x44a: 0x2fc4, 0x44b: 0x32d0, - 0x44c: 0x2fce, 0x44d: 0x32da, 0x44e: 0x2fdd, 0x44f: 0x32e9, 0x450: 0x2fd3, 0x451: 0x32df, - 0x452: 0x2fd8, 0x453: 0x32e4, 0x454: 0x38ef, 0x455: 0x3a7e, 0x456: 0x38f6, 0x457: 0x3a85, - 0x458: 0x3019, 0x459: 0x3325, 0x45a: 0x301e, 0x45b: 0x332a, 0x45c: 0x3904, 0x45d: 0x3a93, - 0x45e: 0x3023, 0x45f: 0x332f, 0x460: 0x3032, 0x461: 0x333e, 0x462: 0x3050, 0x463: 0x335c, - 0x464: 0x305f, 0x465: 0x336b, 0x466: 0x3055, 0x467: 0x3361, 0x468: 0x3064, 0x469: 0x3370, - 0x46a: 0x3069, 0x46b: 0x3375, 0x46c: 0x30af, 0x46d: 0x33bb, 0x46e: 0x390b, 0x46f: 0x3a9a, - 0x470: 0x30b9, 0x471: 0x33ca, 0x472: 0x30c3, 0x473: 0x33d4, 0x474: 0x30cd, 0x475: 0x33de, - 0x476: 0x46c4, 0x477: 0x4755, 0x478: 0x3912, 0x479: 0x3aa1, 0x47a: 0x30e6, 0x47b: 0x33f7, - 0x47c: 0x30e1, 0x47d: 0x33f2, 0x47e: 0x30eb, 0x47f: 0x33fc, - // Block 0x12, offset 0x480 - 0x480: 0x30f0, 0x481: 0x3401, 0x482: 0x30f5, 0x483: 0x3406, 0x484: 0x3109, 0x485: 0x341a, - 0x486: 0x3113, 0x487: 0x3424, 0x488: 0x3122, 0x489: 0x3433, 0x48a: 0x311d, 0x48b: 0x342e, - 0x48c: 0x3935, 0x48d: 0x3ac4, 0x48e: 0x3943, 0x48f: 0x3ad2, 0x490: 0x394a, 0x491: 0x3ad9, - 0x492: 0x3951, 0x493: 0x3ae0, 0x494: 0x314f, 0x495: 0x3460, 0x496: 0x3154, 0x497: 0x3465, - 0x498: 0x315e, 0x499: 0x346f, 0x49a: 0x46f1, 0x49b: 0x4782, 0x49c: 0x3997, 0x49d: 0x3b26, - 0x49e: 0x3177, 0x49f: 0x3488, 0x4a0: 0x3181, 0x4a1: 0x3492, 0x4a2: 0x4700, 0x4a3: 0x4791, - 0x4a4: 0x399e, 0x4a5: 0x3b2d, 0x4a6: 0x39a5, 0x4a7: 0x3b34, 0x4a8: 0x39ac, 0x4a9: 0x3b3b, - 0x4aa: 0x3190, 0x4ab: 0x34a1, 0x4ac: 0x319a, 0x4ad: 0x34b0, 0x4ae: 0x31ae, 0x4af: 0x34c4, - 0x4b0: 0x31a9, 0x4b1: 0x34bf, 0x4b2: 0x31ea, 0x4b3: 0x3500, 0x4b4: 0x31f9, 0x4b5: 0x350f, - 0x4b6: 0x31f4, 0x4b7: 0x350a, 0x4b8: 0x39b3, 0x4b9: 0x3b42, 0x4ba: 0x39ba, 0x4bb: 0x3b49, - 0x4bc: 0x31fe, 0x4bd: 0x3514, 0x4be: 0x3203, 0x4bf: 0x3519, - // Block 0x13, offset 0x4c0 - 0x4c0: 0x3208, 0x4c1: 0x351e, 0x4c2: 0x320d, 0x4c3: 0x3523, 0x4c4: 0x321c, 0x4c5: 0x3532, - 0x4c6: 0x3217, 0x4c7: 0x352d, 0x4c8: 0x3221, 0x4c9: 0x353c, 0x4ca: 0x3226, 0x4cb: 0x3541, - 0x4cc: 0x322b, 0x4cd: 0x3546, 0x4ce: 0x3249, 0x4cf: 0x3564, 0x4d0: 0x3262, 0x4d1: 0x3582, - 0x4d2: 0x3271, 0x4d3: 0x3591, 0x4d4: 0x3276, 0x4d5: 0x3596, 0x4d6: 0x337a, 0x4d7: 0x34a6, - 0x4d8: 0x3537, 0x4d9: 0x3573, 0x4db: 0x35d1, - 0x4e0: 0x46a1, 0x4e1: 0x4732, 0x4e2: 0x2f83, 0x4e3: 0x328f, - 0x4e4: 0x3878, 0x4e5: 0x3a07, 0x4e6: 0x3871, 0x4e7: 0x3a00, 0x4e8: 0x3886, 0x4e9: 0x3a15, - 0x4ea: 0x387f, 0x4eb: 0x3a0e, 0x4ec: 0x38be, 0x4ed: 0x3a4d, 0x4ee: 0x3894, 0x4ef: 0x3a23, - 0x4f0: 0x388d, 0x4f1: 0x3a1c, 0x4f2: 0x38a2, 0x4f3: 0x3a31, 0x4f4: 0x389b, 0x4f5: 0x3a2a, - 0x4f6: 0x38c5, 0x4f7: 0x3a54, 0x4f8: 0x46b5, 0x4f9: 0x4746, 0x4fa: 0x3000, 0x4fb: 0x330c, - 0x4fc: 0x2fec, 0x4fd: 0x32f8, 0x4fe: 0x38da, 0x4ff: 0x3a69, - // Block 0x14, offset 0x500 - 0x500: 0x38d3, 0x501: 0x3a62, 0x502: 0x38e8, 0x503: 0x3a77, 0x504: 0x38e1, 0x505: 0x3a70, - 0x506: 0x38fd, 0x507: 0x3a8c, 0x508: 0x3091, 0x509: 0x339d, 0x50a: 0x30a5, 0x50b: 0x33b1, - 0x50c: 0x46e7, 0x50d: 0x4778, 0x50e: 0x3136, 0x50f: 0x3447, 0x510: 0x3920, 0x511: 0x3aaf, - 0x512: 0x3919, 0x513: 0x3aa8, 0x514: 0x392e, 0x515: 0x3abd, 0x516: 0x3927, 0x517: 0x3ab6, - 0x518: 0x3989, 0x519: 0x3b18, 0x51a: 0x396d, 0x51b: 0x3afc, 0x51c: 0x3966, 0x51d: 0x3af5, - 0x51e: 0x397b, 0x51f: 0x3b0a, 0x520: 0x3974, 0x521: 0x3b03, 0x522: 0x3982, 0x523: 0x3b11, - 0x524: 0x31e5, 0x525: 0x34fb, 0x526: 0x31c7, 0x527: 0x34dd, 0x528: 0x39e4, 0x529: 0x3b73, - 0x52a: 0x39dd, 0x52b: 0x3b6c, 0x52c: 0x39f2, 0x52d: 0x3b81, 0x52e: 0x39eb, 0x52f: 0x3b7a, - 0x530: 0x39f9, 0x531: 0x3b88, 0x532: 0x3230, 0x533: 0x354b, 0x534: 0x3258, 0x535: 0x3578, - 0x536: 0x3253, 0x537: 0x356e, 0x538: 0x323f, 0x539: 0x355a, - // Block 0x15, offset 0x540 - 0x540: 0x4804, 0x541: 0x480a, 0x542: 0x491e, 0x543: 0x4936, 0x544: 0x4926, 0x545: 0x493e, - 0x546: 0x492e, 0x547: 0x4946, 0x548: 0x47aa, 0x549: 0x47b0, 0x54a: 0x488e, 0x54b: 0x48a6, - 0x54c: 0x4896, 0x54d: 0x48ae, 0x54e: 0x489e, 0x54f: 0x48b6, 0x550: 0x4816, 0x551: 0x481c, - 0x552: 0x3db8, 0x553: 0x3dc8, 0x554: 0x3dc0, 0x555: 0x3dd0, - 0x558: 0x47b6, 0x559: 0x47bc, 0x55a: 0x3ce8, 0x55b: 0x3cf8, 0x55c: 0x3cf0, 0x55d: 0x3d00, - 0x560: 0x482e, 0x561: 0x4834, 0x562: 0x494e, 0x563: 0x4966, - 0x564: 0x4956, 0x565: 0x496e, 0x566: 0x495e, 0x567: 0x4976, 0x568: 0x47c2, 0x569: 0x47c8, - 0x56a: 0x48be, 0x56b: 0x48d6, 0x56c: 0x48c6, 0x56d: 0x48de, 0x56e: 0x48ce, 0x56f: 0x48e6, - 0x570: 0x4846, 0x571: 0x484c, 0x572: 0x3e18, 0x573: 0x3e30, 0x574: 0x3e20, 0x575: 0x3e38, - 0x576: 0x3e28, 0x577: 0x3e40, 0x578: 0x47ce, 0x579: 0x47d4, 0x57a: 0x3d18, 0x57b: 0x3d30, - 0x57c: 0x3d20, 0x57d: 0x3d38, 0x57e: 0x3d28, 0x57f: 0x3d40, - // Block 0x16, offset 0x580 - 0x580: 0x4852, 0x581: 0x4858, 0x582: 0x3e48, 0x583: 0x3e58, 0x584: 0x3e50, 0x585: 0x3e60, - 0x588: 0x47da, 0x589: 0x47e0, 0x58a: 0x3d48, 0x58b: 0x3d58, - 0x58c: 0x3d50, 0x58d: 0x3d60, 0x590: 0x4864, 0x591: 0x486a, - 0x592: 0x3e80, 0x593: 0x3e98, 0x594: 0x3e88, 0x595: 0x3ea0, 0x596: 0x3e90, 0x597: 0x3ea8, - 0x599: 0x47e6, 0x59b: 0x3d68, 0x59d: 0x3d70, - 0x59f: 0x3d78, 0x5a0: 0x487c, 0x5a1: 0x4882, 0x5a2: 0x497e, 0x5a3: 0x4996, - 0x5a4: 0x4986, 0x5a5: 0x499e, 0x5a6: 0x498e, 0x5a7: 0x49a6, 0x5a8: 0x47ec, 0x5a9: 0x47f2, - 0x5aa: 0x48ee, 0x5ab: 0x4906, 0x5ac: 0x48f6, 0x5ad: 0x490e, 0x5ae: 0x48fe, 0x5af: 0x4916, - 0x5b0: 0x47f8, 0x5b1: 0x431e, 0x5b2: 0x3691, 0x5b3: 0x4324, 0x5b4: 0x4822, 0x5b5: 0x432a, - 0x5b6: 0x36a3, 0x5b7: 0x4330, 0x5b8: 0x36c1, 0x5b9: 0x4336, 0x5ba: 0x36d9, 0x5bb: 0x433c, - 0x5bc: 0x4870, 0x5bd: 0x4342, - // Block 0x17, offset 0x5c0 - 0x5c0: 0x3da0, 0x5c1: 0x3da8, 0x5c2: 0x4184, 0x5c3: 0x41a2, 0x5c4: 0x418e, 0x5c5: 0x41ac, - 0x5c6: 0x4198, 0x5c7: 0x41b6, 0x5c8: 0x3cd8, 0x5c9: 0x3ce0, 0x5ca: 0x40d0, 0x5cb: 0x40ee, - 0x5cc: 0x40da, 0x5cd: 0x40f8, 0x5ce: 0x40e4, 0x5cf: 0x4102, 0x5d0: 0x3de8, 0x5d1: 0x3df0, - 0x5d2: 0x41c0, 0x5d3: 0x41de, 0x5d4: 0x41ca, 0x5d5: 0x41e8, 0x5d6: 0x41d4, 0x5d7: 0x41f2, - 0x5d8: 0x3d08, 0x5d9: 0x3d10, 0x5da: 0x410c, 0x5db: 0x412a, 0x5dc: 0x4116, 0x5dd: 0x4134, - 0x5de: 0x4120, 0x5df: 0x413e, 0x5e0: 0x3ec0, 0x5e1: 0x3ec8, 0x5e2: 0x41fc, 0x5e3: 0x421a, - 0x5e4: 0x4206, 0x5e5: 0x4224, 0x5e6: 0x4210, 0x5e7: 0x422e, 0x5e8: 0x3d80, 0x5e9: 0x3d88, - 0x5ea: 0x4148, 0x5eb: 0x4166, 0x5ec: 0x4152, 0x5ed: 0x4170, 0x5ee: 0x415c, 0x5ef: 0x417a, - 0x5f0: 0x3685, 0x5f1: 0x367f, 0x5f2: 0x3d90, 0x5f3: 0x368b, 0x5f4: 0x3d98, - 0x5f6: 0x4810, 0x5f7: 0x3db0, 0x5f8: 0x35f5, 0x5f9: 0x35ef, 0x5fa: 0x35e3, 0x5fb: 0x42ee, - 0x5fc: 0x35fb, 0x5fd: 0x8100, 0x5fe: 0x01d3, 0x5ff: 0xa100, - // Block 0x18, offset 0x600 - 0x600: 0x8100, 0x601: 0x35a7, 0x602: 0x3dd8, 0x603: 0x369d, 0x604: 0x3de0, - 0x606: 0x483a, 0x607: 0x3df8, 0x608: 0x3601, 0x609: 0x42f4, 0x60a: 0x360d, 0x60b: 0x42fa, - 0x60c: 0x3619, 0x60d: 0x3b8f, 0x60e: 0x3b96, 0x60f: 0x3b9d, 0x610: 0x36b5, 0x611: 0x36af, - 0x612: 0x3e00, 0x613: 0x44e4, 0x616: 0x36bb, 0x617: 0x3e10, - 0x618: 0x3631, 0x619: 0x362b, 0x61a: 0x361f, 0x61b: 0x4300, 0x61d: 0x3ba4, - 0x61e: 0x3bab, 0x61f: 0x3bb2, 0x620: 0x36eb, 0x621: 0x36e5, 0x622: 0x3e68, 0x623: 0x44ec, - 0x624: 0x36cd, 0x625: 0x36d3, 0x626: 0x36f1, 0x627: 0x3e78, 0x628: 0x3661, 0x629: 0x365b, - 0x62a: 0x364f, 0x62b: 0x430c, 0x62c: 0x3649, 0x62d: 0x359b, 0x62e: 0x42e8, 0x62f: 0x0081, - 0x632: 0x3eb0, 0x633: 0x36f7, 0x634: 0x3eb8, - 0x636: 0x4888, 0x637: 0x3ed0, 0x638: 0x363d, 0x639: 0x4306, 0x63a: 0x366d, 0x63b: 0x4318, - 0x63c: 0x3679, 0x63d: 0x4256, 0x63e: 0xa100, - // Block 0x19, offset 0x640 - 0x641: 0x3c06, 0x643: 0xa000, 0x644: 0x3c0d, 0x645: 0xa000, - 0x647: 0x3c14, 0x648: 0xa000, 0x649: 0x3c1b, - 0x64d: 0xa000, - 0x660: 0x2f65, 0x661: 0xa000, 0x662: 0x3c29, - 0x664: 0xa000, 0x665: 0xa000, - 0x66d: 0x3c22, 0x66e: 0x2f60, 0x66f: 0x2f6a, - 0x670: 0x3c30, 0x671: 0x3c37, 0x672: 0xa000, 0x673: 0xa000, 0x674: 0x3c3e, 0x675: 0x3c45, - 0x676: 0xa000, 0x677: 0xa000, 0x678: 0x3c4c, 0x679: 0x3c53, 0x67a: 0xa000, 0x67b: 0xa000, - 0x67c: 0xa000, 0x67d: 0xa000, - // Block 0x1a, offset 0x680 - 0x680: 0x3c5a, 0x681: 0x3c61, 0x682: 0xa000, 0x683: 0xa000, 0x684: 0x3c76, 0x685: 0x3c7d, - 0x686: 0xa000, 0x687: 0xa000, 0x688: 0x3c84, 0x689: 0x3c8b, - 0x691: 0xa000, - 0x692: 0xa000, - 0x6a2: 0xa000, - 0x6a8: 0xa000, 0x6a9: 0xa000, - 0x6ab: 0xa000, 0x6ac: 0x3ca0, 0x6ad: 0x3ca7, 0x6ae: 0x3cae, 0x6af: 0x3cb5, - 0x6b2: 0xa000, 0x6b3: 0xa000, 0x6b4: 0xa000, 0x6b5: 0xa000, - // Block 0x1b, offset 0x6c0 - 0x6c6: 0xa000, 0x6cb: 0xa000, - 0x6cc: 0x3f08, 0x6cd: 0xa000, 0x6ce: 0x3f10, 0x6cf: 0xa000, 0x6d0: 0x3f18, 0x6d1: 0xa000, - 0x6d2: 0x3f20, 0x6d3: 0xa000, 0x6d4: 0x3f28, 0x6d5: 0xa000, 0x6d6: 0x3f30, 0x6d7: 0xa000, - 0x6d8: 0x3f38, 0x6d9: 0xa000, 0x6da: 0x3f40, 0x6db: 0xa000, 0x6dc: 0x3f48, 0x6dd: 0xa000, - 0x6de: 0x3f50, 0x6df: 0xa000, 0x6e0: 0x3f58, 0x6e1: 0xa000, 0x6e2: 0x3f60, - 0x6e4: 0xa000, 0x6e5: 0x3f68, 0x6e6: 0xa000, 0x6e7: 0x3f70, 0x6e8: 0xa000, 0x6e9: 0x3f78, - 0x6ef: 0xa000, - 0x6f0: 0x3f80, 0x6f1: 0x3f88, 0x6f2: 0xa000, 0x6f3: 0x3f90, 0x6f4: 0x3f98, 0x6f5: 0xa000, - 0x6f6: 0x3fa0, 0x6f7: 0x3fa8, 0x6f8: 0xa000, 0x6f9: 0x3fb0, 0x6fa: 0x3fb8, 0x6fb: 0xa000, - 0x6fc: 0x3fc0, 0x6fd: 0x3fc8, - // Block 0x1c, offset 0x700 - 0x714: 0x3f00, - 0x719: 0x9903, 0x71a: 0x9903, 0x71b: 0x8100, 0x71c: 0x8100, 0x71d: 0xa000, - 0x71e: 0x3fd0, - 0x726: 0xa000, - 0x72b: 0xa000, 0x72c: 0x3fe0, 0x72d: 0xa000, 0x72e: 0x3fe8, 0x72f: 0xa000, - 0x730: 0x3ff0, 0x731: 0xa000, 0x732: 0x3ff8, 0x733: 0xa000, 0x734: 0x4000, 0x735: 0xa000, - 0x736: 0x4008, 0x737: 0xa000, 0x738: 0x4010, 0x739: 0xa000, 0x73a: 0x4018, 0x73b: 0xa000, - 0x73c: 0x4020, 0x73d: 0xa000, 0x73e: 0x4028, 0x73f: 0xa000, - // Block 0x1d, offset 0x740 - 0x740: 0x4030, 0x741: 0xa000, 0x742: 0x4038, 0x744: 0xa000, 0x745: 0x4040, - 0x746: 0xa000, 0x747: 0x4048, 0x748: 0xa000, 0x749: 0x4050, - 0x74f: 0xa000, 0x750: 0x4058, 0x751: 0x4060, - 0x752: 0xa000, 0x753: 0x4068, 0x754: 0x4070, 0x755: 0xa000, 0x756: 0x4078, 0x757: 0x4080, - 0x758: 0xa000, 0x759: 0x4088, 0x75a: 0x4090, 0x75b: 0xa000, 0x75c: 0x4098, 0x75d: 0x40a0, - 0x76f: 0xa000, - 0x770: 0xa000, 0x771: 0xa000, 0x772: 0xa000, 0x774: 0x3fd8, - 0x777: 0x40a8, 0x778: 0x40b0, 0x779: 0x40b8, 0x77a: 0x40c0, - 0x77d: 0xa000, 0x77e: 0x40c8, - // Block 0x1e, offset 0x780 - 0x780: 0x1377, 0x781: 0x0cfb, 0x782: 0x13d3, 0x783: 0x139f, 0x784: 0x0e57, 0x785: 0x06eb, - 0x786: 0x08df, 0x787: 0x162b, 0x788: 0x162b, 0x789: 0x0a0b, 0x78a: 0x145f, 0x78b: 0x0943, - 0x78c: 0x0a07, 0x78d: 0x0bef, 0x78e: 0x0fcf, 0x78f: 0x115f, 0x790: 0x1297, 0x791: 0x12d3, - 0x792: 0x1307, 0x793: 0x141b, 0x794: 0x0d73, 0x795: 0x0dff, 0x796: 0x0eab, 0x797: 0x0f43, - 0x798: 0x125f, 0x799: 0x1447, 0x79a: 0x1573, 0x79b: 0x070f, 0x79c: 0x08b3, 0x79d: 0x0d87, - 0x79e: 0x0ecf, 0x79f: 0x1293, 0x7a0: 0x15c3, 0x7a1: 0x0ab3, 0x7a2: 0x0e77, 0x7a3: 0x1283, - 0x7a4: 0x1317, 0x7a5: 0x0c23, 0x7a6: 0x11bb, 0x7a7: 0x12df, 0x7a8: 0x0b1f, 0x7a9: 0x0d0f, - 0x7aa: 0x0e17, 0x7ab: 0x0f1b, 0x7ac: 0x1427, 0x7ad: 0x074f, 0x7ae: 0x07e7, 0x7af: 0x0853, - 0x7b0: 0x0c8b, 0x7b1: 0x0d7f, 0x7b2: 0x0ecb, 0x7b3: 0x0fef, 0x7b4: 0x1177, 0x7b5: 0x128b, - 0x7b6: 0x12a3, 0x7b7: 0x13c7, 0x7b8: 0x14ef, 0x7b9: 0x15a3, 0x7ba: 0x15bf, 0x7bb: 0x102b, - 0x7bc: 0x106b, 0x7bd: 0x1123, 0x7be: 0x1243, 0x7bf: 0x147b, - // Block 0x1f, offset 0x7c0 - 0x7c0: 0x15cb, 0x7c1: 0x134b, 0x7c2: 0x09c7, 0x7c3: 0x0b3b, 0x7c4: 0x10db, 0x7c5: 0x119b, - 0x7c6: 0x0eff, 0x7c7: 0x1033, 0x7c8: 0x1397, 0x7c9: 0x14e7, 0x7ca: 0x09c3, 0x7cb: 0x0a8f, - 0x7cc: 0x0d77, 0x7cd: 0x0e2b, 0x7ce: 0x0e5f, 0x7cf: 0x1113, 0x7d0: 0x113b, 0x7d1: 0x14a7, - 0x7d2: 0x084f, 0x7d3: 0x11a7, 0x7d4: 0x07f3, 0x7d5: 0x07ef, 0x7d6: 0x1097, 0x7d7: 0x1127, - 0x7d8: 0x125b, 0x7d9: 0x14af, 0x7da: 0x1367, 0x7db: 0x0c27, 0x7dc: 0x0d73, 0x7dd: 0x1357, - 0x7de: 0x06f7, 0x7df: 0x0a63, 0x7e0: 0x0b93, 0x7e1: 0x0f2f, 0x7e2: 0x0faf, 0x7e3: 0x0873, - 0x7e4: 0x103b, 0x7e5: 0x075f, 0x7e6: 0x0b77, 0x7e7: 0x06d7, 0x7e8: 0x0deb, 0x7e9: 0x0ca3, - 0x7ea: 0x110f, 0x7eb: 0x08c7, 0x7ec: 0x09b3, 0x7ed: 0x0ffb, 0x7ee: 0x1263, 0x7ef: 0x133b, - 0x7f0: 0x0db7, 0x7f1: 0x13f7, 0x7f2: 0x0de3, 0x7f3: 0x0c37, 0x7f4: 0x121b, 0x7f5: 0x0c57, - 0x7f6: 0x0fab, 0x7f7: 0x072b, 0x7f8: 0x07a7, 0x7f9: 0x07eb, 0x7fa: 0x0d53, 0x7fb: 0x10fb, - 0x7fc: 0x11f3, 0x7fd: 0x1347, 0x7fe: 0x145b, 0x7ff: 0x085b, - // Block 0x20, offset 0x800 - 0x800: 0x090f, 0x801: 0x0a17, 0x802: 0x0b2f, 0x803: 0x0cbf, 0x804: 0x0e7b, 0x805: 0x103f, - 0x806: 0x1497, 0x807: 0x157b, 0x808: 0x15cf, 0x809: 0x15e7, 0x80a: 0x0837, 0x80b: 0x0cf3, - 0x80c: 0x0da3, 0x80d: 0x13eb, 0x80e: 0x0afb, 0x80f: 0x0bd7, 0x810: 0x0bf3, 0x811: 0x0c83, - 0x812: 0x0e6b, 0x813: 0x0eb7, 0x814: 0x0f67, 0x815: 0x108b, 0x816: 0x112f, 0x817: 0x1193, - 0x818: 0x13db, 0x819: 0x126b, 0x81a: 0x1403, 0x81b: 0x147f, 0x81c: 0x080f, 0x81d: 0x083b, - 0x81e: 0x0923, 0x81f: 0x0ea7, 0x820: 0x12f3, 0x821: 0x133b, 0x822: 0x0b1b, 0x823: 0x0b8b, - 0x824: 0x0c4f, 0x825: 0x0daf, 0x826: 0x10d7, 0x827: 0x0f23, 0x828: 0x073b, 0x829: 0x097f, - 0x82a: 0x0a63, 0x82b: 0x0ac7, 0x82c: 0x0b97, 0x82d: 0x0f3f, 0x82e: 0x0f5b, 0x82f: 0x116b, - 0x830: 0x118b, 0x831: 0x1463, 0x832: 0x14e3, 0x833: 0x14f3, 0x834: 0x152f, 0x835: 0x0753, - 0x836: 0x107f, 0x837: 0x144f, 0x838: 0x14cb, 0x839: 0x0baf, 0x83a: 0x0717, 0x83b: 0x0777, - 0x83c: 0x0a67, 0x83d: 0x0a87, 0x83e: 0x0caf, 0x83f: 0x0d73, - // Block 0x21, offset 0x840 - 0x840: 0x0ec3, 0x841: 0x0fcb, 0x842: 0x1277, 0x843: 0x1417, 0x844: 0x1623, 0x845: 0x0ce3, - 0x846: 0x14a3, 0x847: 0x0833, 0x848: 0x0d2f, 0x849: 0x0d3b, 0x84a: 0x0e0f, 0x84b: 0x0e47, - 0x84c: 0x0f4b, 0x84d: 0x0fa7, 0x84e: 0x1027, 0x84f: 0x110b, 0x850: 0x153b, 0x851: 0x07af, - 0x852: 0x0c03, 0x853: 0x14b3, 0x854: 0x0767, 0x855: 0x0aab, 0x856: 0x0e2f, 0x857: 0x13df, - 0x858: 0x0b67, 0x859: 0x0bb7, 0x85a: 0x0d43, 0x85b: 0x0f2f, 0x85c: 0x14bb, 0x85d: 0x0817, - 0x85e: 0x08ff, 0x85f: 0x0a97, 0x860: 0x0cd3, 0x861: 0x0d1f, 0x862: 0x0d5f, 0x863: 0x0df3, - 0x864: 0x0f47, 0x865: 0x0fbb, 0x866: 0x1157, 0x867: 0x12f7, 0x868: 0x1303, 0x869: 0x1457, - 0x86a: 0x14d7, 0x86b: 0x0883, 0x86c: 0x0e4b, 0x86d: 0x0903, 0x86e: 0x0ec7, 0x86f: 0x0f6b, - 0x870: 0x1287, 0x871: 0x14bf, 0x872: 0x15ab, 0x873: 0x15d3, 0x874: 0x0d37, 0x875: 0x0e27, - 0x876: 0x11c3, 0x877: 0x10b7, 0x878: 0x10c3, 0x879: 0x10e7, 0x87a: 0x0f17, 0x87b: 0x0e9f, - 0x87c: 0x1363, 0x87d: 0x0733, 0x87e: 0x122b, 0x87f: 0x081b, - // Block 0x22, offset 0x880 - 0x880: 0x080b, 0x881: 0x0b0b, 0x882: 0x0c2b, 0x883: 0x10f3, 0x884: 0x0a53, 0x885: 0x0e03, - 0x886: 0x0cef, 0x887: 0x13e7, 0x888: 0x12e7, 0x889: 0x14ab, 0x88a: 0x1323, 0x88b: 0x0b27, - 0x88c: 0x0787, 0x88d: 0x095b, 0x890: 0x09af, - 0x892: 0x0cdf, 0x895: 0x07f7, 0x896: 0x0f1f, 0x897: 0x0fe3, - 0x898: 0x1047, 0x899: 0x1063, 0x89a: 0x1067, 0x89b: 0x107b, 0x89c: 0x14fb, 0x89d: 0x10eb, - 0x89e: 0x116f, 0x8a0: 0x128f, 0x8a2: 0x1353, - 0x8a5: 0x1407, 0x8a6: 0x1433, - 0x8aa: 0x154f, 0x8ab: 0x1553, 0x8ac: 0x1557, 0x8ad: 0x15bb, 0x8ae: 0x142b, 0x8af: 0x14c7, - 0x8b0: 0x0757, 0x8b1: 0x077b, 0x8b2: 0x078f, 0x8b3: 0x084b, 0x8b4: 0x0857, 0x8b5: 0x0897, - 0x8b6: 0x094b, 0x8b7: 0x0967, 0x8b8: 0x096f, 0x8b9: 0x09ab, 0x8ba: 0x09b7, 0x8bb: 0x0a93, - 0x8bc: 0x0a9b, 0x8bd: 0x0ba3, 0x8be: 0x0bcb, 0x8bf: 0x0bd3, - // Block 0x23, offset 0x8c0 - 0x8c0: 0x0beb, 0x8c1: 0x0c97, 0x8c2: 0x0cc7, 0x8c3: 0x0ce7, 0x8c4: 0x0d57, 0x8c5: 0x0e1b, - 0x8c6: 0x0e37, 0x8c7: 0x0e67, 0x8c8: 0x0ebb, 0x8c9: 0x0edb, 0x8ca: 0x0f4f, 0x8cb: 0x102f, - 0x8cc: 0x104b, 0x8cd: 0x1053, 0x8ce: 0x104f, 0x8cf: 0x1057, 0x8d0: 0x105b, 0x8d1: 0x105f, - 0x8d2: 0x1073, 0x8d3: 0x1077, 0x8d4: 0x109b, 0x8d5: 0x10af, 0x8d6: 0x10cb, 0x8d7: 0x112f, - 0x8d8: 0x1137, 0x8d9: 0x113f, 0x8da: 0x1153, 0x8db: 0x117b, 0x8dc: 0x11cb, 0x8dd: 0x11ff, - 0x8de: 0x11ff, 0x8df: 0x1267, 0x8e0: 0x130f, 0x8e1: 0x1327, 0x8e2: 0x135b, 0x8e3: 0x135f, - 0x8e4: 0x13a3, 0x8e5: 0x13a7, 0x8e6: 0x13ff, 0x8e7: 0x1407, 0x8e8: 0x14db, 0x8e9: 0x151f, - 0x8ea: 0x1537, 0x8eb: 0x0b9b, 0x8ec: 0x171e, 0x8ed: 0x11e3, - 0x8f0: 0x06df, 0x8f1: 0x07e3, 0x8f2: 0x07a3, 0x8f3: 0x074b, 0x8f4: 0x078b, 0x8f5: 0x07b7, - 0x8f6: 0x0847, 0x8f7: 0x0863, 0x8f8: 0x094b, 0x8f9: 0x0937, 0x8fa: 0x0947, 0x8fb: 0x0963, - 0x8fc: 0x09af, 0x8fd: 0x09bf, 0x8fe: 0x0a03, 0x8ff: 0x0a0f, - // Block 0x24, offset 0x900 - 0x900: 0x0a2b, 0x901: 0x0a3b, 0x902: 0x0b23, 0x903: 0x0b2b, 0x904: 0x0b5b, 0x905: 0x0b7b, - 0x906: 0x0bab, 0x907: 0x0bc3, 0x908: 0x0bb3, 0x909: 0x0bd3, 0x90a: 0x0bc7, 0x90b: 0x0beb, - 0x90c: 0x0c07, 0x90d: 0x0c5f, 0x90e: 0x0c6b, 0x90f: 0x0c73, 0x910: 0x0c9b, 0x911: 0x0cdf, - 0x912: 0x0d0f, 0x913: 0x0d13, 0x914: 0x0d27, 0x915: 0x0da7, 0x916: 0x0db7, 0x917: 0x0e0f, - 0x918: 0x0e5b, 0x919: 0x0e53, 0x91a: 0x0e67, 0x91b: 0x0e83, 0x91c: 0x0ebb, 0x91d: 0x1013, - 0x91e: 0x0edf, 0x91f: 0x0f13, 0x920: 0x0f1f, 0x921: 0x0f5f, 0x922: 0x0f7b, 0x923: 0x0f9f, - 0x924: 0x0fc3, 0x925: 0x0fc7, 0x926: 0x0fe3, 0x927: 0x0fe7, 0x928: 0x0ff7, 0x929: 0x100b, - 0x92a: 0x1007, 0x92b: 0x1037, 0x92c: 0x10b3, 0x92d: 0x10cb, 0x92e: 0x10e3, 0x92f: 0x111b, - 0x930: 0x112f, 0x931: 0x114b, 0x932: 0x117b, 0x933: 0x122f, 0x934: 0x1257, 0x935: 0x12cb, - 0x936: 0x1313, 0x937: 0x131f, 0x938: 0x1327, 0x939: 0x133f, 0x93a: 0x1353, 0x93b: 0x1343, - 0x93c: 0x135b, 0x93d: 0x1357, 0x93e: 0x134f, 0x93f: 0x135f, - // Block 0x25, offset 0x940 - 0x940: 0x136b, 0x941: 0x13a7, 0x942: 0x13e3, 0x943: 0x1413, 0x944: 0x144b, 0x945: 0x146b, - 0x946: 0x14b7, 0x947: 0x14db, 0x948: 0x14fb, 0x949: 0x150f, 0x94a: 0x151f, 0x94b: 0x152b, - 0x94c: 0x1537, 0x94d: 0x158b, 0x94e: 0x162b, 0x94f: 0x16b5, 0x950: 0x16b0, 0x951: 0x16e2, - 0x952: 0x0607, 0x953: 0x062f, 0x954: 0x0633, 0x955: 0x1764, 0x956: 0x1791, 0x957: 0x1809, - 0x958: 0x1617, 0x959: 0x1627, - // Block 0x26, offset 0x980 - 0x980: 0x06fb, 0x981: 0x06f3, 0x982: 0x0703, 0x983: 0x1647, 0x984: 0x0747, 0x985: 0x0757, - 0x986: 0x075b, 0x987: 0x0763, 0x988: 0x076b, 0x989: 0x076f, 0x98a: 0x077b, 0x98b: 0x0773, - 0x98c: 0x05b3, 0x98d: 0x165b, 0x98e: 0x078f, 0x98f: 0x0793, 0x990: 0x0797, 0x991: 0x07b3, - 0x992: 0x164c, 0x993: 0x05b7, 0x994: 0x079f, 0x995: 0x07bf, 0x996: 0x1656, 0x997: 0x07cf, - 0x998: 0x07d7, 0x999: 0x0737, 0x99a: 0x07df, 0x99b: 0x07e3, 0x99c: 0x1831, 0x99d: 0x07ff, - 0x99e: 0x0807, 0x99f: 0x05bf, 0x9a0: 0x081f, 0x9a1: 0x0823, 0x9a2: 0x082b, 0x9a3: 0x082f, - 0x9a4: 0x05c3, 0x9a5: 0x0847, 0x9a6: 0x084b, 0x9a7: 0x0857, 0x9a8: 0x0863, 0x9a9: 0x0867, - 0x9aa: 0x086b, 0x9ab: 0x0873, 0x9ac: 0x0893, 0x9ad: 0x0897, 0x9ae: 0x089f, 0x9af: 0x08af, - 0x9b0: 0x08b7, 0x9b1: 0x08bb, 0x9b2: 0x08bb, 0x9b3: 0x08bb, 0x9b4: 0x166a, 0x9b5: 0x0e93, - 0x9b6: 0x08cf, 0x9b7: 0x08d7, 0x9b8: 0x166f, 0x9b9: 0x08e3, 0x9ba: 0x08eb, 0x9bb: 0x08f3, - 0x9bc: 0x091b, 0x9bd: 0x0907, 0x9be: 0x0913, 0x9bf: 0x0917, - // Block 0x27, offset 0x9c0 - 0x9c0: 0x091f, 0x9c1: 0x0927, 0x9c2: 0x092b, 0x9c3: 0x0933, 0x9c4: 0x093b, 0x9c5: 0x093f, - 0x9c6: 0x093f, 0x9c7: 0x0947, 0x9c8: 0x094f, 0x9c9: 0x0953, 0x9ca: 0x095f, 0x9cb: 0x0983, - 0x9cc: 0x0967, 0x9cd: 0x0987, 0x9ce: 0x096b, 0x9cf: 0x0973, 0x9d0: 0x080b, 0x9d1: 0x09cf, - 0x9d2: 0x0997, 0x9d3: 0x099b, 0x9d4: 0x099f, 0x9d5: 0x0993, 0x9d6: 0x09a7, 0x9d7: 0x09a3, - 0x9d8: 0x09bb, 0x9d9: 0x1674, 0x9da: 0x09d7, 0x9db: 0x09db, 0x9dc: 0x09e3, 0x9dd: 0x09ef, - 0x9de: 0x09f7, 0x9df: 0x0a13, 0x9e0: 0x1679, 0x9e1: 0x167e, 0x9e2: 0x0a1f, 0x9e3: 0x0a23, - 0x9e4: 0x0a27, 0x9e5: 0x0a1b, 0x9e6: 0x0a2f, 0x9e7: 0x05c7, 0x9e8: 0x05cb, 0x9e9: 0x0a37, - 0x9ea: 0x0a3f, 0x9eb: 0x0a3f, 0x9ec: 0x1683, 0x9ed: 0x0a5b, 0x9ee: 0x0a5f, 0x9ef: 0x0a63, - 0x9f0: 0x0a6b, 0x9f1: 0x1688, 0x9f2: 0x0a73, 0x9f3: 0x0a77, 0x9f4: 0x0b4f, 0x9f5: 0x0a7f, - 0x9f6: 0x05cf, 0x9f7: 0x0a8b, 0x9f8: 0x0a9b, 0x9f9: 0x0aa7, 0x9fa: 0x0aa3, 0x9fb: 0x1692, - 0x9fc: 0x0aaf, 0x9fd: 0x1697, 0x9fe: 0x0abb, 0x9ff: 0x0ab7, - // Block 0x28, offset 0xa00 - 0xa00: 0x0abf, 0xa01: 0x0acf, 0xa02: 0x0ad3, 0xa03: 0x05d3, 0xa04: 0x0ae3, 0xa05: 0x0aeb, - 0xa06: 0x0aef, 0xa07: 0x0af3, 0xa08: 0x05d7, 0xa09: 0x169c, 0xa0a: 0x05db, 0xa0b: 0x0b0f, - 0xa0c: 0x0b13, 0xa0d: 0x0b17, 0xa0e: 0x0b1f, 0xa0f: 0x1863, 0xa10: 0x0b37, 0xa11: 0x16a6, - 0xa12: 0x16a6, 0xa13: 0x11d7, 0xa14: 0x0b47, 0xa15: 0x0b47, 0xa16: 0x05df, 0xa17: 0x16c9, - 0xa18: 0x179b, 0xa19: 0x0b57, 0xa1a: 0x0b5f, 0xa1b: 0x05e3, 0xa1c: 0x0b73, 0xa1d: 0x0b83, - 0xa1e: 0x0b87, 0xa1f: 0x0b8f, 0xa20: 0x0b9f, 0xa21: 0x05eb, 0xa22: 0x05e7, 0xa23: 0x0ba3, - 0xa24: 0x16ab, 0xa25: 0x0ba7, 0xa26: 0x0bbb, 0xa27: 0x0bbf, 0xa28: 0x0bc3, 0xa29: 0x0bbf, - 0xa2a: 0x0bcf, 0xa2b: 0x0bd3, 0xa2c: 0x0be3, 0xa2d: 0x0bdb, 0xa2e: 0x0bdf, 0xa2f: 0x0be7, - 0xa30: 0x0beb, 0xa31: 0x0bef, 0xa32: 0x0bfb, 0xa33: 0x0bff, 0xa34: 0x0c17, 0xa35: 0x0c1f, - 0xa36: 0x0c2f, 0xa37: 0x0c43, 0xa38: 0x16ba, 0xa39: 0x0c3f, 0xa3a: 0x0c33, 0xa3b: 0x0c4b, - 0xa3c: 0x0c53, 0xa3d: 0x0c67, 0xa3e: 0x16bf, 0xa3f: 0x0c6f, - // Block 0x29, offset 0xa40 - 0xa40: 0x0c63, 0xa41: 0x0c5b, 0xa42: 0x05ef, 0xa43: 0x0c77, 0xa44: 0x0c7f, 0xa45: 0x0c87, - 0xa46: 0x0c7b, 0xa47: 0x05f3, 0xa48: 0x0c97, 0xa49: 0x0c9f, 0xa4a: 0x16c4, 0xa4b: 0x0ccb, - 0xa4c: 0x0cff, 0xa4d: 0x0cdb, 0xa4e: 0x05ff, 0xa4f: 0x0ce7, 0xa50: 0x05fb, 0xa51: 0x05f7, - 0xa52: 0x07c3, 0xa53: 0x07c7, 0xa54: 0x0d03, 0xa55: 0x0ceb, 0xa56: 0x11ab, 0xa57: 0x0663, - 0xa58: 0x0d0f, 0xa59: 0x0d13, 0xa5a: 0x0d17, 0xa5b: 0x0d2b, 0xa5c: 0x0d23, 0xa5d: 0x16dd, - 0xa5e: 0x0603, 0xa5f: 0x0d3f, 0xa60: 0x0d33, 0xa61: 0x0d4f, 0xa62: 0x0d57, 0xa63: 0x16e7, - 0xa64: 0x0d5b, 0xa65: 0x0d47, 0xa66: 0x0d63, 0xa67: 0x0607, 0xa68: 0x0d67, 0xa69: 0x0d6b, - 0xa6a: 0x0d6f, 0xa6b: 0x0d7b, 0xa6c: 0x16ec, 0xa6d: 0x0d83, 0xa6e: 0x060b, 0xa6f: 0x0d8f, - 0xa70: 0x16f1, 0xa71: 0x0d93, 0xa72: 0x060f, 0xa73: 0x0d9f, 0xa74: 0x0dab, 0xa75: 0x0db7, - 0xa76: 0x0dbb, 0xa77: 0x16f6, 0xa78: 0x168d, 0xa79: 0x16fb, 0xa7a: 0x0ddb, 0xa7b: 0x1700, - 0xa7c: 0x0de7, 0xa7d: 0x0def, 0xa7e: 0x0ddf, 0xa7f: 0x0dfb, - // Block 0x2a, offset 0xa80 - 0xa80: 0x0e0b, 0xa81: 0x0e1b, 0xa82: 0x0e0f, 0xa83: 0x0e13, 0xa84: 0x0e1f, 0xa85: 0x0e23, - 0xa86: 0x1705, 0xa87: 0x0e07, 0xa88: 0x0e3b, 0xa89: 0x0e3f, 0xa8a: 0x0613, 0xa8b: 0x0e53, - 0xa8c: 0x0e4f, 0xa8d: 0x170a, 0xa8e: 0x0e33, 0xa8f: 0x0e6f, 0xa90: 0x170f, 0xa91: 0x1714, - 0xa92: 0x0e73, 0xa93: 0x0e87, 0xa94: 0x0e83, 0xa95: 0x0e7f, 0xa96: 0x0617, 0xa97: 0x0e8b, - 0xa98: 0x0e9b, 0xa99: 0x0e97, 0xa9a: 0x0ea3, 0xa9b: 0x1651, 0xa9c: 0x0eb3, 0xa9d: 0x1719, - 0xa9e: 0x0ebf, 0xa9f: 0x1723, 0xaa0: 0x0ed3, 0xaa1: 0x0edf, 0xaa2: 0x0ef3, 0xaa3: 0x1728, - 0xaa4: 0x0f07, 0xaa5: 0x0f0b, 0xaa6: 0x172d, 0xaa7: 0x1732, 0xaa8: 0x0f27, 0xaa9: 0x0f37, - 0xaaa: 0x061b, 0xaab: 0x0f3b, 0xaac: 0x061f, 0xaad: 0x061f, 0xaae: 0x0f53, 0xaaf: 0x0f57, - 0xab0: 0x0f5f, 0xab1: 0x0f63, 0xab2: 0x0f6f, 0xab3: 0x0623, 0xab4: 0x0f87, 0xab5: 0x1737, - 0xab6: 0x0fa3, 0xab7: 0x173c, 0xab8: 0x0faf, 0xab9: 0x16a1, 0xaba: 0x0fbf, 0xabb: 0x1741, - 0xabc: 0x1746, 0xabd: 0x174b, 0xabe: 0x0627, 0xabf: 0x062b, - // Block 0x2b, offset 0xac0 - 0xac0: 0x0ff7, 0xac1: 0x1755, 0xac2: 0x1750, 0xac3: 0x175a, 0xac4: 0x175f, 0xac5: 0x0fff, - 0xac6: 0x1003, 0xac7: 0x1003, 0xac8: 0x100b, 0xac9: 0x0633, 0xaca: 0x100f, 0xacb: 0x0637, - 0xacc: 0x063b, 0xacd: 0x1769, 0xace: 0x1023, 0xacf: 0x102b, 0xad0: 0x1037, 0xad1: 0x063f, - 0xad2: 0x176e, 0xad3: 0x105b, 0xad4: 0x1773, 0xad5: 0x1778, 0xad6: 0x107b, 0xad7: 0x1093, - 0xad8: 0x0643, 0xad9: 0x109b, 0xada: 0x109f, 0xadb: 0x10a3, 0xadc: 0x177d, 0xadd: 0x1782, - 0xade: 0x1782, 0xadf: 0x10bb, 0xae0: 0x0647, 0xae1: 0x1787, 0xae2: 0x10cf, 0xae3: 0x10d3, - 0xae4: 0x064b, 0xae5: 0x178c, 0xae6: 0x10ef, 0xae7: 0x064f, 0xae8: 0x10ff, 0xae9: 0x10f7, - 0xaea: 0x1107, 0xaeb: 0x1796, 0xaec: 0x111f, 0xaed: 0x0653, 0xaee: 0x112b, 0xaef: 0x1133, - 0xaf0: 0x1143, 0xaf1: 0x0657, 0xaf2: 0x17a0, 0xaf3: 0x17a5, 0xaf4: 0x065b, 0xaf5: 0x17aa, - 0xaf6: 0x115b, 0xaf7: 0x17af, 0xaf8: 0x1167, 0xaf9: 0x1173, 0xafa: 0x117b, 0xafb: 0x17b4, - 0xafc: 0x17b9, 0xafd: 0x118f, 0xafe: 0x17be, 0xaff: 0x1197, - // Block 0x2c, offset 0xb00 - 0xb00: 0x16ce, 0xb01: 0x065f, 0xb02: 0x11af, 0xb03: 0x11b3, 0xb04: 0x0667, 0xb05: 0x11b7, - 0xb06: 0x0a33, 0xb07: 0x17c3, 0xb08: 0x17c8, 0xb09: 0x16d3, 0xb0a: 0x16d8, 0xb0b: 0x11d7, - 0xb0c: 0x11db, 0xb0d: 0x13f3, 0xb0e: 0x066b, 0xb0f: 0x1207, 0xb10: 0x1203, 0xb11: 0x120b, - 0xb12: 0x083f, 0xb13: 0x120f, 0xb14: 0x1213, 0xb15: 0x1217, 0xb16: 0x121f, 0xb17: 0x17cd, - 0xb18: 0x121b, 0xb19: 0x1223, 0xb1a: 0x1237, 0xb1b: 0x123b, 0xb1c: 0x1227, 0xb1d: 0x123f, - 0xb1e: 0x1253, 0xb1f: 0x1267, 0xb20: 0x1233, 0xb21: 0x1247, 0xb22: 0x124b, 0xb23: 0x124f, - 0xb24: 0x17d2, 0xb25: 0x17dc, 0xb26: 0x17d7, 0xb27: 0x066f, 0xb28: 0x126f, 0xb29: 0x1273, - 0xb2a: 0x127b, 0xb2b: 0x17f0, 0xb2c: 0x127f, 0xb2d: 0x17e1, 0xb2e: 0x0673, 0xb2f: 0x0677, - 0xb30: 0x17e6, 0xb31: 0x17eb, 0xb32: 0x067b, 0xb33: 0x129f, 0xb34: 0x12a3, 0xb35: 0x12a7, - 0xb36: 0x12ab, 0xb37: 0x12b7, 0xb38: 0x12b3, 0xb39: 0x12bf, 0xb3a: 0x12bb, 0xb3b: 0x12cb, - 0xb3c: 0x12c3, 0xb3d: 0x12c7, 0xb3e: 0x12cf, 0xb3f: 0x067f, - // Block 0x2d, offset 0xb40 - 0xb40: 0x12d7, 0xb41: 0x12db, 0xb42: 0x0683, 0xb43: 0x12eb, 0xb44: 0x12ef, 0xb45: 0x17f5, - 0xb46: 0x12fb, 0xb47: 0x12ff, 0xb48: 0x0687, 0xb49: 0x130b, 0xb4a: 0x05bb, 0xb4b: 0x17fa, - 0xb4c: 0x17ff, 0xb4d: 0x068b, 0xb4e: 0x068f, 0xb4f: 0x1337, 0xb50: 0x134f, 0xb51: 0x136b, - 0xb52: 0x137b, 0xb53: 0x1804, 0xb54: 0x138f, 0xb55: 0x1393, 0xb56: 0x13ab, 0xb57: 0x13b7, - 0xb58: 0x180e, 0xb59: 0x1660, 0xb5a: 0x13c3, 0xb5b: 0x13bf, 0xb5c: 0x13cb, 0xb5d: 0x1665, - 0xb5e: 0x13d7, 0xb5f: 0x13e3, 0xb60: 0x1813, 0xb61: 0x1818, 0xb62: 0x1423, 0xb63: 0x142f, - 0xb64: 0x1437, 0xb65: 0x181d, 0xb66: 0x143b, 0xb67: 0x1467, 0xb68: 0x1473, 0xb69: 0x1477, - 0xb6a: 0x146f, 0xb6b: 0x1483, 0xb6c: 0x1487, 0xb6d: 0x1822, 0xb6e: 0x1493, 0xb6f: 0x0693, - 0xb70: 0x149b, 0xb71: 0x1827, 0xb72: 0x0697, 0xb73: 0x14d3, 0xb74: 0x0ac3, 0xb75: 0x14eb, - 0xb76: 0x182c, 0xb77: 0x1836, 0xb78: 0x069b, 0xb79: 0x069f, 0xb7a: 0x1513, 0xb7b: 0x183b, - 0xb7c: 0x06a3, 0xb7d: 0x1840, 0xb7e: 0x152b, 0xb7f: 0x152b, - // Block 0x2e, offset 0xb80 - 0xb80: 0x1533, 0xb81: 0x1845, 0xb82: 0x154b, 0xb83: 0x06a7, 0xb84: 0x155b, 0xb85: 0x1567, - 0xb86: 0x156f, 0xb87: 0x1577, 0xb88: 0x06ab, 0xb89: 0x184a, 0xb8a: 0x158b, 0xb8b: 0x15a7, - 0xb8c: 0x15b3, 0xb8d: 0x06af, 0xb8e: 0x06b3, 0xb8f: 0x15b7, 0xb90: 0x184f, 0xb91: 0x06b7, - 0xb92: 0x1854, 0xb93: 0x1859, 0xb94: 0x185e, 0xb95: 0x15db, 0xb96: 0x06bb, 0xb97: 0x15ef, - 0xb98: 0x15f7, 0xb99: 0x15fb, 0xb9a: 0x1603, 0xb9b: 0x160b, 0xb9c: 0x1613, 0xb9d: 0x1868, -} - -// nfcIndex: 22 blocks, 1408 entries, 1408 bytes -// Block 0 is the zero block. -var nfcIndex = [1408]uint8{ - // Block 0x0, offset 0x0 - // Block 0x1, offset 0x40 - // Block 0x2, offset 0x80 - // Block 0x3, offset 0xc0 - 0xc2: 0x2d, 0xc3: 0x01, 0xc4: 0x02, 0xc5: 0x03, 0xc6: 0x2e, 0xc7: 0x04, - 0xc8: 0x05, 0xca: 0x2f, 0xcb: 0x30, 0xcc: 0x06, 0xcd: 0x07, 0xce: 0x08, 0xcf: 0x31, - 0xd0: 0x09, 0xd1: 0x32, 0xd2: 0x33, 0xd3: 0x0a, 0xd6: 0x0b, 0xd7: 0x34, - 0xd8: 0x35, 0xd9: 0x0c, 0xdb: 0x36, 0xdc: 0x37, 0xdd: 0x38, 0xdf: 0x39, - 0xe0: 0x02, 0xe1: 0x03, 0xe2: 0x04, 0xe3: 0x05, - 0xea: 0x06, 0xeb: 0x07, 0xec: 0x08, 0xed: 0x09, 0xef: 0x0a, - 0xf0: 0x13, - // Block 0x4, offset 0x100 - 0x120: 0x3a, 0x121: 0x3b, 0x123: 0x3c, 0x124: 0x3d, 0x125: 0x3e, 0x126: 0x3f, 0x127: 0x40, - 0x128: 0x41, 0x129: 0x42, 0x12a: 0x43, 0x12b: 0x44, 0x12c: 0x3f, 0x12d: 0x45, 0x12e: 0x46, 0x12f: 0x47, - 0x131: 0x48, 0x132: 0x49, 0x133: 0x4a, 0x134: 0x4b, 0x135: 0x4c, 0x137: 0x4d, - 0x138: 0x4e, 0x139: 0x4f, 0x13a: 0x50, 0x13b: 0x51, 0x13c: 0x52, 0x13d: 0x53, 0x13e: 0x54, 0x13f: 0x55, - // Block 0x5, offset 0x140 - 0x140: 0x56, 0x142: 0x57, 0x144: 0x58, 0x145: 0x59, 0x146: 0x5a, 0x147: 0x5b, - 0x14d: 0x5c, - 0x15c: 0x5d, 0x15f: 0x5e, - 0x162: 0x5f, 0x164: 0x60, - 0x168: 0x61, 0x169: 0x62, 0x16a: 0x63, 0x16c: 0x0d, 0x16d: 0x64, 0x16e: 0x65, 0x16f: 0x66, - 0x170: 0x67, 0x173: 0x68, 0x177: 0x0e, - 0x178: 0x0f, 0x179: 0x10, 0x17a: 0x11, 0x17b: 0x12, 0x17c: 0x13, 0x17d: 0x14, 0x17e: 0x15, 0x17f: 0x16, - // Block 0x6, offset 0x180 - 0x180: 0x69, 0x183: 0x6a, 0x184: 0x6b, 0x186: 0x6c, 0x187: 0x6d, - 0x188: 0x6e, 0x189: 0x17, 0x18a: 0x18, 0x18b: 0x6f, 0x18c: 0x70, - 0x1ab: 0x71, - 0x1b3: 0x72, 0x1b5: 0x73, 0x1b7: 0x74, - // Block 0x7, offset 0x1c0 - 0x1c0: 0x75, 0x1c1: 0x19, 0x1c2: 0x1a, 0x1c3: 0x1b, 0x1c4: 0x76, 0x1c5: 0x77, - 0x1c9: 0x78, 0x1cc: 0x79, 0x1cd: 0x7a, - // Block 0x8, offset 0x200 - 0x219: 0x7b, 0x21a: 0x7c, 0x21b: 0x7d, - 0x220: 0x7e, 0x223: 0x7f, 0x224: 0x80, 0x225: 0x81, 0x226: 0x82, 0x227: 0x83, - 0x22a: 0x84, 0x22b: 0x85, 0x22f: 0x86, - 0x230: 0x87, 0x231: 0x88, 0x232: 0x89, 0x233: 0x8a, 0x234: 0x8b, 0x235: 0x8c, 0x236: 0x8d, 0x237: 0x87, - 0x238: 0x88, 0x239: 0x89, 0x23a: 0x8a, 0x23b: 0x8b, 0x23c: 0x8c, 0x23d: 0x8d, 0x23e: 0x87, 0x23f: 0x88, - // Block 0x9, offset 0x240 - 0x240: 0x89, 0x241: 0x8a, 0x242: 0x8b, 0x243: 0x8c, 0x244: 0x8d, 0x245: 0x87, 0x246: 0x88, 0x247: 0x89, - 0x248: 0x8a, 0x249: 0x8b, 0x24a: 0x8c, 0x24b: 0x8d, 0x24c: 0x87, 0x24d: 0x88, 0x24e: 0x89, 0x24f: 0x8a, - 0x250: 0x8b, 0x251: 0x8c, 0x252: 0x8d, 0x253: 0x87, 0x254: 0x88, 0x255: 0x89, 0x256: 0x8a, 0x257: 0x8b, - 0x258: 0x8c, 0x259: 0x8d, 0x25a: 0x87, 0x25b: 0x88, 0x25c: 0x89, 0x25d: 0x8a, 0x25e: 0x8b, 0x25f: 0x8c, - 0x260: 0x8d, 0x261: 0x87, 0x262: 0x88, 0x263: 0x89, 0x264: 0x8a, 0x265: 0x8b, 0x266: 0x8c, 0x267: 0x8d, - 0x268: 0x87, 0x269: 0x88, 0x26a: 0x89, 0x26b: 0x8a, 0x26c: 0x8b, 0x26d: 0x8c, 0x26e: 0x8d, 0x26f: 0x87, - 0x270: 0x88, 0x271: 0x89, 0x272: 0x8a, 0x273: 0x8b, 0x274: 0x8c, 0x275: 0x8d, 0x276: 0x87, 0x277: 0x88, - 0x278: 0x89, 0x279: 0x8a, 0x27a: 0x8b, 0x27b: 0x8c, 0x27c: 0x8d, 0x27d: 0x87, 0x27e: 0x88, 0x27f: 0x89, - // Block 0xa, offset 0x280 - 0x280: 0x8a, 0x281: 0x8b, 0x282: 0x8c, 0x283: 0x8d, 0x284: 0x87, 0x285: 0x88, 0x286: 0x89, 0x287: 0x8a, - 0x288: 0x8b, 0x289: 0x8c, 0x28a: 0x8d, 0x28b: 0x87, 0x28c: 0x88, 0x28d: 0x89, 0x28e: 0x8a, 0x28f: 0x8b, - 0x290: 0x8c, 0x291: 0x8d, 0x292: 0x87, 0x293: 0x88, 0x294: 0x89, 0x295: 0x8a, 0x296: 0x8b, 0x297: 0x8c, - 0x298: 0x8d, 0x299: 0x87, 0x29a: 0x88, 0x29b: 0x89, 0x29c: 0x8a, 0x29d: 0x8b, 0x29e: 0x8c, 0x29f: 0x8d, - 0x2a0: 0x87, 0x2a1: 0x88, 0x2a2: 0x89, 0x2a3: 0x8a, 0x2a4: 0x8b, 0x2a5: 0x8c, 0x2a6: 0x8d, 0x2a7: 0x87, - 0x2a8: 0x88, 0x2a9: 0x89, 0x2aa: 0x8a, 0x2ab: 0x8b, 0x2ac: 0x8c, 0x2ad: 0x8d, 0x2ae: 0x87, 0x2af: 0x88, - 0x2b0: 0x89, 0x2b1: 0x8a, 0x2b2: 0x8b, 0x2b3: 0x8c, 0x2b4: 0x8d, 0x2b5: 0x87, 0x2b6: 0x88, 0x2b7: 0x89, - 0x2b8: 0x8a, 0x2b9: 0x8b, 0x2ba: 0x8c, 0x2bb: 0x8d, 0x2bc: 0x87, 0x2bd: 0x88, 0x2be: 0x89, 0x2bf: 0x8a, - // Block 0xb, offset 0x2c0 - 0x2c0: 0x8b, 0x2c1: 0x8c, 0x2c2: 0x8d, 0x2c3: 0x87, 0x2c4: 0x88, 0x2c5: 0x89, 0x2c6: 0x8a, 0x2c7: 0x8b, - 0x2c8: 0x8c, 0x2c9: 0x8d, 0x2ca: 0x87, 0x2cb: 0x88, 0x2cc: 0x89, 0x2cd: 0x8a, 0x2ce: 0x8b, 0x2cf: 0x8c, - 0x2d0: 0x8d, 0x2d1: 0x87, 0x2d2: 0x88, 0x2d3: 0x89, 0x2d4: 0x8a, 0x2d5: 0x8b, 0x2d6: 0x8c, 0x2d7: 0x8d, - 0x2d8: 0x87, 0x2d9: 0x88, 0x2da: 0x89, 0x2db: 0x8a, 0x2dc: 0x8b, 0x2dd: 0x8c, 0x2de: 0x8e, - // Block 0xc, offset 0x300 - 0x324: 0x1c, 0x325: 0x1d, 0x326: 0x1e, 0x327: 0x1f, - 0x328: 0x20, 0x329: 0x21, 0x32a: 0x22, 0x32b: 0x23, 0x32c: 0x8f, 0x32d: 0x90, 0x32e: 0x91, - 0x331: 0x92, 0x332: 0x93, 0x333: 0x94, 0x334: 0x95, - 0x338: 0x96, 0x339: 0x97, 0x33a: 0x98, 0x33b: 0x99, 0x33e: 0x9a, 0x33f: 0x9b, - // Block 0xd, offset 0x340 - 0x347: 0x9c, - 0x34b: 0x9d, 0x34d: 0x9e, - 0x368: 0x9f, 0x36b: 0xa0, - // Block 0xe, offset 0x380 - 0x381: 0xa1, 0x382: 0xa2, 0x384: 0xa3, 0x385: 0x82, 0x387: 0xa4, - 0x388: 0xa5, 0x38b: 0xa6, 0x38c: 0x3f, 0x38d: 0xa7, - 0x391: 0xa8, 0x392: 0xa9, 0x393: 0xaa, 0x396: 0xab, 0x397: 0xac, - 0x398: 0x73, 0x39a: 0xad, 0x39c: 0xae, - 0x3a8: 0xaf, 0x3a9: 0xb0, 0x3aa: 0xb1, - 0x3b0: 0x73, 0x3b5: 0xb2, - // Block 0xf, offset 0x3c0 - 0x3eb: 0xb3, 0x3ec: 0xb4, - // Block 0x10, offset 0x400 - 0x432: 0xb5, - // Block 0x11, offset 0x440 - 0x445: 0xb6, 0x446: 0xb7, 0x447: 0xb8, - 0x449: 0xb9, - // Block 0x12, offset 0x480 - 0x480: 0xba, - 0x4a3: 0xbb, 0x4a5: 0xbc, - // Block 0x13, offset 0x4c0 - 0x4c8: 0xbd, - // Block 0x14, offset 0x500 - 0x520: 0x24, 0x521: 0x25, 0x522: 0x26, 0x523: 0x27, 0x524: 0x28, 0x525: 0x29, 0x526: 0x2a, 0x527: 0x2b, - 0x528: 0x2c, - // Block 0x15, offset 0x540 - 0x550: 0x0b, 0x551: 0x0c, 0x556: 0x0d, - 0x55b: 0x0e, 0x55d: 0x0f, 0x55e: 0x10, 0x55f: 0x11, - 0x56f: 0x12, -} - -// nfcSparseOffset: 145 entries, 290 bytes -var nfcSparseOffset = []uint16{0x0, 0x5, 0x9, 0xb, 0xd, 0x18, 0x28, 0x2a, 0x2f, 0x3a, 0x49, 0x56, 0x5e, 0x62, 0x67, 0x69, 0x7a, 0x82, 0x89, 0x8c, 0x93, 0x97, 0x9b, 0x9d, 0x9f, 0xa8, 0xac, 0xb3, 0xb8, 0xbb, 0xc5, 0xc8, 0xcf, 0xd7, 0xda, 0xdc, 0xde, 0xe0, 0xe5, 0xf6, 0x102, 0x104, 0x10a, 0x10c, 0x10e, 0x110, 0x112, 0x114, 0x116, 0x119, 0x11c, 0x11e, 0x121, 0x124, 0x128, 0x12d, 0x136, 0x138, 0x13b, 0x13d, 0x148, 0x14c, 0x15a, 0x15d, 0x163, 0x169, 0x174, 0x178, 0x17a, 0x17c, 0x17e, 0x180, 0x182, 0x188, 0x18c, 0x18e, 0x190, 0x198, 0x19c, 0x19f, 0x1a1, 0x1a3, 0x1a5, 0x1a8, 0x1aa, 0x1ac, 0x1ae, 0x1b0, 0x1b6, 0x1b9, 0x1bb, 0x1c2, 0x1c8, 0x1ce, 0x1d6, 0x1dc, 0x1e2, 0x1e8, 0x1ec, 0x1fa, 0x203, 0x206, 0x209, 0x20b, 0x20e, 0x210, 0x214, 0x219, 0x21b, 0x21d, 0x222, 0x228, 0x22a, 0x22c, 0x22e, 0x234, 0x237, 0x23a, 0x242, 0x249, 0x24c, 0x24f, 0x251, 0x259, 0x25c, 0x263, 0x266, 0x26c, 0x26e, 0x271, 0x273, 0x275, 0x277, 0x279, 0x27c, 0x27e, 0x280, 0x282, 0x28f, 0x299, 0x29b, 0x29d, 0x2a3, 0x2a5, 0x2a8} - -// nfcSparseValues: 682 entries, 2728 bytes -var nfcSparseValues = [682]valueRange{ - // Block 0x0, offset 0x0 - {value: 0x0000, lo: 0x04}, - {value: 0xa100, lo: 0xa8, hi: 0xa8}, - {value: 0x8100, lo: 0xaf, hi: 0xaf}, - {value: 0x8100, lo: 0xb4, hi: 0xb4}, - {value: 0x8100, lo: 0xb8, hi: 0xb8}, - // Block 0x1, offset 0x5 - {value: 0x0091, lo: 0x03}, - {value: 0x46e2, lo: 0xa0, hi: 0xa1}, - {value: 0x4714, lo: 0xaf, hi: 0xb0}, - {value: 0xa000, lo: 0xb7, hi: 0xb7}, - // Block 0x2, offset 0x9 - {value: 0x0000, lo: 0x01}, - {value: 0xa000, lo: 0x92, hi: 0x92}, - // Block 0x3, offset 0xb - {value: 0x0000, lo: 0x01}, - {value: 0x8100, lo: 0x98, hi: 0x9d}, - // Block 0x4, offset 0xd - {value: 0x0006, lo: 0x0a}, - {value: 0xa000, lo: 0x81, hi: 0x81}, - {value: 0xa000, lo: 0x85, hi: 0x85}, - {value: 0xa000, lo: 0x89, hi: 0x89}, - {value: 0x4840, lo: 0x8a, hi: 0x8a}, - {value: 0x485e, lo: 0x8b, hi: 0x8b}, - {value: 0x36c7, lo: 0x8c, hi: 0x8c}, - {value: 0x36df, lo: 0x8d, hi: 0x8d}, - {value: 0x4876, lo: 0x8e, hi: 0x8e}, - {value: 0xa000, lo: 0x92, hi: 0x92}, - {value: 0x36fd, lo: 0x93, hi: 0x94}, - // Block 0x5, offset 0x18 - {value: 0x0000, lo: 0x0f}, - {value: 0xa000, lo: 0x83, hi: 0x83}, - {value: 0xa000, lo: 0x87, hi: 0x87}, - {value: 0xa000, lo: 0x8b, hi: 0x8b}, - {value: 0xa000, lo: 0x8d, hi: 0x8d}, - {value: 0x37a5, lo: 0x90, hi: 0x90}, - {value: 0x37b1, lo: 0x91, hi: 0x91}, - {value: 0x379f, lo: 0x93, hi: 0x93}, - {value: 0xa000, lo: 0x96, hi: 0x96}, - {value: 0x3817, lo: 0x97, hi: 0x97}, - {value: 0x37e1, lo: 0x9c, hi: 0x9c}, - {value: 0x37c9, lo: 0x9d, hi: 0x9d}, - {value: 0x37f3, lo: 0x9e, hi: 0x9e}, - {value: 0xa000, lo: 0xb4, hi: 0xb5}, - {value: 0x381d, lo: 0xb6, hi: 0xb6}, - {value: 0x3823, lo: 0xb7, hi: 0xb7}, - // Block 0x6, offset 0x28 - {value: 0x0000, lo: 0x01}, - {value: 0x8132, lo: 0x83, hi: 0x87}, - // Block 0x7, offset 0x2a - {value: 0x0001, lo: 0x04}, - {value: 0x8113, lo: 0x81, hi: 0x82}, - {value: 0x8132, lo: 0x84, hi: 0x84}, - {value: 0x812d, lo: 0x85, hi: 0x85}, - {value: 0x810d, lo: 0x87, hi: 0x87}, - // Block 0x8, offset 0x2f - {value: 0x0000, lo: 0x0a}, - {value: 0x8132, lo: 0x90, hi: 0x97}, - {value: 0x8119, lo: 0x98, hi: 0x98}, - {value: 0x811a, lo: 0x99, hi: 0x99}, - {value: 0x811b, lo: 0x9a, hi: 0x9a}, - {value: 0x3841, lo: 0xa2, hi: 0xa2}, - {value: 0x3847, lo: 0xa3, hi: 0xa3}, - {value: 0x3853, lo: 0xa4, hi: 0xa4}, - {value: 0x384d, lo: 0xa5, hi: 0xa5}, - {value: 0x3859, lo: 0xa6, hi: 0xa6}, - {value: 0xa000, lo: 0xa7, hi: 0xa7}, - // Block 0x9, offset 0x3a - {value: 0x0000, lo: 0x0e}, - {value: 0x386b, lo: 0x80, hi: 0x80}, - {value: 0xa000, lo: 0x81, hi: 0x81}, - {value: 0x385f, lo: 0x82, hi: 0x82}, - {value: 0xa000, lo: 0x92, hi: 0x92}, - {value: 0x3865, lo: 0x93, hi: 0x93}, - {value: 0xa000, lo: 0x95, hi: 0x95}, - {value: 0x8132, lo: 0x96, hi: 0x9c}, - {value: 0x8132, lo: 0x9f, hi: 0xa2}, - {value: 0x812d, lo: 0xa3, hi: 0xa3}, - {value: 0x8132, lo: 0xa4, hi: 0xa4}, - {value: 0x8132, lo: 0xa7, hi: 0xa8}, - {value: 0x812d, lo: 0xaa, hi: 0xaa}, - {value: 0x8132, lo: 0xab, hi: 0xac}, - {value: 0x812d, lo: 0xad, hi: 0xad}, - // Block 0xa, offset 0x49 - {value: 0x0000, lo: 0x0c}, - {value: 0x811f, lo: 0x91, hi: 0x91}, - {value: 0x8132, lo: 0xb0, hi: 0xb0}, - {value: 0x812d, lo: 0xb1, hi: 0xb1}, - {value: 0x8132, lo: 0xb2, hi: 0xb3}, - {value: 0x812d, lo: 0xb4, hi: 0xb4}, - {value: 0x8132, lo: 0xb5, hi: 0xb6}, - {value: 0x812d, lo: 0xb7, hi: 0xb9}, - {value: 0x8132, lo: 0xba, hi: 0xba}, - {value: 0x812d, lo: 0xbb, hi: 0xbc}, - {value: 0x8132, lo: 0xbd, hi: 0xbd}, - {value: 0x812d, lo: 0xbe, hi: 0xbe}, - {value: 0x8132, lo: 0xbf, hi: 0xbf}, - // Block 0xb, offset 0x56 - {value: 0x0005, lo: 0x07}, - {value: 0x8132, lo: 0x80, hi: 0x80}, - {value: 0x8132, lo: 0x81, hi: 0x81}, - {value: 0x812d, lo: 0x82, hi: 0x83}, - {value: 0x812d, lo: 0x84, hi: 0x85}, - {value: 0x812d, lo: 0x86, hi: 0x87}, - {value: 0x812d, lo: 0x88, hi: 0x89}, - {value: 0x8132, lo: 0x8a, hi: 0x8a}, - // Block 0xc, offset 0x5e - {value: 0x0000, lo: 0x03}, - {value: 0x8132, lo: 0xab, hi: 0xb1}, - {value: 0x812d, lo: 0xb2, hi: 0xb2}, - {value: 0x8132, lo: 0xb3, hi: 0xb3}, - // Block 0xd, offset 0x62 - {value: 0x0000, lo: 0x04}, - {value: 0x8132, lo: 0x96, hi: 0x99}, - {value: 0x8132, lo: 0x9b, hi: 0xa3}, - {value: 0x8132, lo: 0xa5, hi: 0xa7}, - {value: 0x8132, lo: 0xa9, hi: 0xad}, - // Block 0xe, offset 0x67 - {value: 0x0000, lo: 0x01}, - {value: 0x812d, lo: 0x99, hi: 0x9b}, - // Block 0xf, offset 0x69 - {value: 0x0000, lo: 0x10}, - {value: 0x8132, lo: 0x94, hi: 0xa1}, - {value: 0x812d, lo: 0xa3, hi: 0xa3}, - {value: 0x8132, lo: 0xa4, hi: 0xa5}, - {value: 0x812d, lo: 0xa6, hi: 0xa6}, - {value: 0x8132, lo: 0xa7, hi: 0xa8}, - {value: 0x812d, lo: 0xa9, hi: 0xa9}, - {value: 0x8132, lo: 0xaa, hi: 0xac}, - {value: 0x812d, lo: 0xad, hi: 0xaf}, - {value: 0x8116, lo: 0xb0, hi: 0xb0}, - {value: 0x8117, lo: 0xb1, hi: 0xb1}, - {value: 0x8118, lo: 0xb2, hi: 0xb2}, - {value: 0x8132, lo: 0xb3, hi: 0xb5}, - {value: 0x812d, lo: 0xb6, hi: 0xb6}, - {value: 0x8132, lo: 0xb7, hi: 0xb8}, - {value: 0x812d, lo: 0xb9, hi: 0xba}, - {value: 0x8132, lo: 0xbb, hi: 0xbf}, - // Block 0x10, offset 0x7a - {value: 0x0000, lo: 0x07}, - {value: 0xa000, lo: 0xa8, hi: 0xa8}, - {value: 0x3ed8, lo: 0xa9, hi: 0xa9}, - {value: 0xa000, lo: 0xb0, hi: 0xb0}, - {value: 0x3ee0, lo: 0xb1, hi: 0xb1}, - {value: 0xa000, lo: 0xb3, hi: 0xb3}, - {value: 0x3ee8, lo: 0xb4, hi: 0xb4}, - {value: 0x9902, lo: 0xbc, hi: 0xbc}, - // Block 0x11, offset 0x82 - {value: 0x0008, lo: 0x06}, - {value: 0x8104, lo: 0x8d, hi: 0x8d}, - {value: 0x8132, lo: 0x91, hi: 0x91}, - {value: 0x812d, lo: 0x92, hi: 0x92}, - {value: 0x8132, lo: 0x93, hi: 0x93}, - {value: 0x8132, lo: 0x94, hi: 0x94}, - {value: 0x451c, lo: 0x98, hi: 0x9f}, - // Block 0x12, offset 0x89 - {value: 0x0000, lo: 0x02}, - {value: 0x8102, lo: 0xbc, hi: 0xbc}, - {value: 0x9900, lo: 0xbe, hi: 0xbe}, - // Block 0x13, offset 0x8c - {value: 0x0008, lo: 0x06}, - {value: 0xa000, lo: 0x87, hi: 0x87}, - {value: 0x2c9e, lo: 0x8b, hi: 0x8c}, - {value: 0x8104, lo: 0x8d, hi: 0x8d}, - {value: 0x9900, lo: 0x97, hi: 0x97}, - {value: 0x455c, lo: 0x9c, hi: 0x9d}, - {value: 0x456c, lo: 0x9f, hi: 0x9f}, - // Block 0x14, offset 0x93 - {value: 0x0000, lo: 0x03}, - {value: 0x4594, lo: 0xb3, hi: 0xb3}, - {value: 0x459c, lo: 0xb6, hi: 0xb6}, - {value: 0x8102, lo: 0xbc, hi: 0xbc}, - // Block 0x15, offset 0x97 - {value: 0x0008, lo: 0x03}, - {value: 0x8104, lo: 0x8d, hi: 0x8d}, - {value: 0x4574, lo: 0x99, hi: 0x9b}, - {value: 0x458c, lo: 0x9e, hi: 0x9e}, - // Block 0x16, offset 0x9b - {value: 0x0000, lo: 0x01}, - {value: 0x8102, lo: 0xbc, hi: 0xbc}, - // Block 0x17, offset 0x9d - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0x8d, hi: 0x8d}, - // Block 0x18, offset 0x9f - {value: 0x0000, lo: 0x08}, - {value: 0xa000, lo: 0x87, hi: 0x87}, - {value: 0x2cb6, lo: 0x88, hi: 0x88}, - {value: 0x2cae, lo: 0x8b, hi: 0x8b}, - {value: 0x2cbe, lo: 0x8c, hi: 0x8c}, - {value: 0x8104, lo: 0x8d, hi: 0x8d}, - {value: 0x9900, lo: 0x96, hi: 0x97}, - {value: 0x45a4, lo: 0x9c, hi: 0x9c}, - {value: 0x45ac, lo: 0x9d, hi: 0x9d}, - // Block 0x19, offset 0xa8 - {value: 0x0000, lo: 0x03}, - {value: 0xa000, lo: 0x92, hi: 0x92}, - {value: 0x2cc6, lo: 0x94, hi: 0x94}, - {value: 0x9900, lo: 0xbe, hi: 0xbe}, - // Block 0x1a, offset 0xac - {value: 0x0000, lo: 0x06}, - {value: 0xa000, lo: 0x86, hi: 0x87}, - {value: 0x2cce, lo: 0x8a, hi: 0x8a}, - {value: 0x2cde, lo: 0x8b, hi: 0x8b}, - {value: 0x2cd6, lo: 0x8c, hi: 0x8c}, - {value: 0x8104, lo: 0x8d, hi: 0x8d}, - {value: 0x9900, lo: 0x97, hi: 0x97}, - // Block 0x1b, offset 0xb3 - {value: 0x1801, lo: 0x04}, - {value: 0xa000, lo: 0x86, hi: 0x86}, - {value: 0x3ef0, lo: 0x88, hi: 0x88}, - {value: 0x8104, lo: 0x8d, hi: 0x8d}, - {value: 0x8120, lo: 0x95, hi: 0x96}, - // Block 0x1c, offset 0xb8 - {value: 0x0000, lo: 0x02}, - {value: 0x8102, lo: 0xbc, hi: 0xbc}, - {value: 0xa000, lo: 0xbf, hi: 0xbf}, - // Block 0x1d, offset 0xbb - {value: 0x0000, lo: 0x09}, - {value: 0x2ce6, lo: 0x80, hi: 0x80}, - {value: 0x9900, lo: 0x82, hi: 0x82}, - {value: 0xa000, lo: 0x86, hi: 0x86}, - {value: 0x2cee, lo: 0x87, hi: 0x87}, - {value: 0x2cf6, lo: 0x88, hi: 0x88}, - {value: 0x2f50, lo: 0x8a, hi: 0x8a}, - {value: 0x2dd8, lo: 0x8b, hi: 0x8b}, - {value: 0x8104, lo: 0x8d, hi: 0x8d}, - {value: 0x9900, lo: 0x95, hi: 0x96}, - // Block 0x1e, offset 0xc5 - {value: 0x0000, lo: 0x02}, - {value: 0x8104, lo: 0xbb, hi: 0xbc}, - {value: 0x9900, lo: 0xbe, hi: 0xbe}, - // Block 0x1f, offset 0xc8 - {value: 0x0000, lo: 0x06}, - {value: 0xa000, lo: 0x86, hi: 0x87}, - {value: 0x2cfe, lo: 0x8a, hi: 0x8a}, - {value: 0x2d0e, lo: 0x8b, hi: 0x8b}, - {value: 0x2d06, lo: 0x8c, hi: 0x8c}, - {value: 0x8104, lo: 0x8d, hi: 0x8d}, - {value: 0x9900, lo: 0x97, hi: 0x97}, - // Block 0x20, offset 0xcf - {value: 0x6bea, lo: 0x07}, - {value: 0x9904, lo: 0x8a, hi: 0x8a}, - {value: 0x9900, lo: 0x8f, hi: 0x8f}, - {value: 0xa000, lo: 0x99, hi: 0x99}, - {value: 0x3ef8, lo: 0x9a, hi: 0x9a}, - {value: 0x2f58, lo: 0x9c, hi: 0x9c}, - {value: 0x2de3, lo: 0x9d, hi: 0x9d}, - {value: 0x2d16, lo: 0x9e, hi: 0x9f}, - // Block 0x21, offset 0xd7 - {value: 0x0000, lo: 0x02}, - {value: 0x8122, lo: 0xb8, hi: 0xb9}, - {value: 0x8104, lo: 0xba, hi: 0xba}, - // Block 0x22, offset 0xda - {value: 0x0000, lo: 0x01}, - {value: 0x8123, lo: 0x88, hi: 0x8b}, - // Block 0x23, offset 0xdc - {value: 0x0000, lo: 0x01}, - {value: 0x8124, lo: 0xb8, hi: 0xb9}, - // Block 0x24, offset 0xde - {value: 0x0000, lo: 0x01}, - {value: 0x8125, lo: 0x88, hi: 0x8b}, - // Block 0x25, offset 0xe0 - {value: 0x0000, lo: 0x04}, - {value: 0x812d, lo: 0x98, hi: 0x99}, - {value: 0x812d, lo: 0xb5, hi: 0xb5}, - {value: 0x812d, lo: 0xb7, hi: 0xb7}, - {value: 0x812b, lo: 0xb9, hi: 0xb9}, - // Block 0x26, offset 0xe5 - {value: 0x0000, lo: 0x10}, - {value: 0x2644, lo: 0x83, hi: 0x83}, - {value: 0x264b, lo: 0x8d, hi: 0x8d}, - {value: 0x2652, lo: 0x92, hi: 0x92}, - {value: 0x2659, lo: 0x97, hi: 0x97}, - {value: 0x2660, lo: 0x9c, hi: 0x9c}, - {value: 0x263d, lo: 0xa9, hi: 0xa9}, - {value: 0x8126, lo: 0xb1, hi: 0xb1}, - {value: 0x8127, lo: 0xb2, hi: 0xb2}, - {value: 0x4a84, lo: 0xb3, hi: 0xb3}, - {value: 0x8128, lo: 0xb4, hi: 0xb4}, - {value: 0x4a8d, lo: 0xb5, hi: 0xb5}, - {value: 0x45b4, lo: 0xb6, hi: 0xb6}, - {value: 0x8200, lo: 0xb7, hi: 0xb7}, - {value: 0x45bc, lo: 0xb8, hi: 0xb8}, - {value: 0x8200, lo: 0xb9, hi: 0xb9}, - {value: 0x8127, lo: 0xba, hi: 0xbd}, - // Block 0x27, offset 0xf6 - {value: 0x0000, lo: 0x0b}, - {value: 0x8127, lo: 0x80, hi: 0x80}, - {value: 0x4a96, lo: 0x81, hi: 0x81}, - {value: 0x8132, lo: 0x82, hi: 0x83}, - {value: 0x8104, lo: 0x84, hi: 0x84}, - {value: 0x8132, lo: 0x86, hi: 0x87}, - {value: 0x266e, lo: 0x93, hi: 0x93}, - {value: 0x2675, lo: 0x9d, hi: 0x9d}, - {value: 0x267c, lo: 0xa2, hi: 0xa2}, - {value: 0x2683, lo: 0xa7, hi: 0xa7}, - {value: 0x268a, lo: 0xac, hi: 0xac}, - {value: 0x2667, lo: 0xb9, hi: 0xb9}, - // Block 0x28, offset 0x102 - {value: 0x0000, lo: 0x01}, - {value: 0x812d, lo: 0x86, hi: 0x86}, - // Block 0x29, offset 0x104 - {value: 0x0000, lo: 0x05}, - {value: 0xa000, lo: 0xa5, hi: 0xa5}, - {value: 0x2d1e, lo: 0xa6, hi: 0xa6}, - {value: 0x9900, lo: 0xae, hi: 0xae}, - {value: 0x8102, lo: 0xb7, hi: 0xb7}, - {value: 0x8104, lo: 0xb9, hi: 0xba}, - // Block 0x2a, offset 0x10a - {value: 0x0000, lo: 0x01}, - {value: 0x812d, lo: 0x8d, hi: 0x8d}, - // Block 0x2b, offset 0x10c - {value: 0x0000, lo: 0x01}, - {value: 0xa000, lo: 0x80, hi: 0x92}, - // Block 0x2c, offset 0x10e - {value: 0x0000, lo: 0x01}, - {value: 0xb900, lo: 0xa1, hi: 0xb5}, - // Block 0x2d, offset 0x110 - {value: 0x0000, lo: 0x01}, - {value: 0x9900, lo: 0xa8, hi: 0xbf}, - // Block 0x2e, offset 0x112 - {value: 0x0000, lo: 0x01}, - {value: 0x9900, lo: 0x80, hi: 0x82}, - // Block 0x2f, offset 0x114 - {value: 0x0000, lo: 0x01}, - {value: 0x8132, lo: 0x9d, hi: 0x9f}, - // Block 0x30, offset 0x116 - {value: 0x0000, lo: 0x02}, - {value: 0x8104, lo: 0x94, hi: 0x94}, - {value: 0x8104, lo: 0xb4, hi: 0xb4}, - // Block 0x31, offset 0x119 - {value: 0x0000, lo: 0x02}, - {value: 0x8104, lo: 0x92, hi: 0x92}, - {value: 0x8132, lo: 0x9d, hi: 0x9d}, - // Block 0x32, offset 0x11c - {value: 0x0000, lo: 0x01}, - {value: 0x8131, lo: 0xa9, hi: 0xa9}, - // Block 0x33, offset 0x11e - {value: 0x0004, lo: 0x02}, - {value: 0x812e, lo: 0xb9, hi: 0xba}, - {value: 0x812d, lo: 0xbb, hi: 0xbb}, - // Block 0x34, offset 0x121 - {value: 0x0000, lo: 0x02}, - {value: 0x8132, lo: 0x97, hi: 0x97}, - {value: 0x812d, lo: 0x98, hi: 0x98}, - // Block 0x35, offset 0x124 - {value: 0x0000, lo: 0x03}, - {value: 0x8104, lo: 0xa0, hi: 0xa0}, - {value: 0x8132, lo: 0xb5, hi: 0xbc}, - {value: 0x812d, lo: 0xbf, hi: 0xbf}, - // Block 0x36, offset 0x128 - {value: 0x0000, lo: 0x04}, - {value: 0x8132, lo: 0xb0, hi: 0xb4}, - {value: 0x812d, lo: 0xb5, hi: 0xba}, - {value: 0x8132, lo: 0xbb, hi: 0xbc}, - {value: 0x812d, lo: 0xbd, hi: 0xbd}, - // Block 0x37, offset 0x12d - {value: 0x0000, lo: 0x08}, - {value: 0x2d66, lo: 0x80, hi: 0x80}, - {value: 0x2d6e, lo: 0x81, hi: 0x81}, - {value: 0xa000, lo: 0x82, hi: 0x82}, - {value: 0x2d76, lo: 0x83, hi: 0x83}, - {value: 0x8104, lo: 0x84, hi: 0x84}, - {value: 0x8132, lo: 0xab, hi: 0xab}, - {value: 0x812d, lo: 0xac, hi: 0xac}, - {value: 0x8132, lo: 0xad, hi: 0xb3}, - // Block 0x38, offset 0x136 - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0xaa, hi: 0xab}, - // Block 0x39, offset 0x138 - {value: 0x0000, lo: 0x02}, - {value: 0x8102, lo: 0xa6, hi: 0xa6}, - {value: 0x8104, lo: 0xb2, hi: 0xb3}, - // Block 0x3a, offset 0x13b - {value: 0x0000, lo: 0x01}, - {value: 0x8102, lo: 0xb7, hi: 0xb7}, - // Block 0x3b, offset 0x13d - {value: 0x0000, lo: 0x0a}, - {value: 0x8132, lo: 0x90, hi: 0x92}, - {value: 0x8101, lo: 0x94, hi: 0x94}, - {value: 0x812d, lo: 0x95, hi: 0x99}, - {value: 0x8132, lo: 0x9a, hi: 0x9b}, - {value: 0x812d, lo: 0x9c, hi: 0x9f}, - {value: 0x8132, lo: 0xa0, hi: 0xa0}, - {value: 0x8101, lo: 0xa2, hi: 0xa8}, - {value: 0x812d, lo: 0xad, hi: 0xad}, - {value: 0x8132, lo: 0xb4, hi: 0xb4}, - {value: 0x8132, lo: 0xb8, hi: 0xb9}, - // Block 0x3c, offset 0x148 - {value: 0x0004, lo: 0x03}, - {value: 0x0433, lo: 0x80, hi: 0x81}, - {value: 0x8100, lo: 0x97, hi: 0x97}, - {value: 0x8100, lo: 0xbe, hi: 0xbe}, - // Block 0x3d, offset 0x14c - {value: 0x0000, lo: 0x0d}, - {value: 0x8132, lo: 0x90, hi: 0x91}, - {value: 0x8101, lo: 0x92, hi: 0x93}, - {value: 0x8132, lo: 0x94, hi: 0x97}, - {value: 0x8101, lo: 0x98, hi: 0x9a}, - {value: 0x8132, lo: 0x9b, hi: 0x9c}, - {value: 0x8132, lo: 0xa1, hi: 0xa1}, - {value: 0x8101, lo: 0xa5, hi: 0xa6}, - {value: 0x8132, lo: 0xa7, hi: 0xa7}, - {value: 0x812d, lo: 0xa8, hi: 0xa8}, - {value: 0x8132, lo: 0xa9, hi: 0xa9}, - {value: 0x8101, lo: 0xaa, hi: 0xab}, - {value: 0x812d, lo: 0xac, hi: 0xaf}, - {value: 0x8132, lo: 0xb0, hi: 0xb0}, - // Block 0x3e, offset 0x15a - {value: 0x427b, lo: 0x02}, - {value: 0x01b8, lo: 0xa6, hi: 0xa6}, - {value: 0x0057, lo: 0xaa, hi: 0xab}, - // Block 0x3f, offset 0x15d - {value: 0x0007, lo: 0x05}, - {value: 0xa000, lo: 0x90, hi: 0x90}, - {value: 0xa000, lo: 0x92, hi: 0x92}, - {value: 0xa000, lo: 0x94, hi: 0x94}, - {value: 0x3bb9, lo: 0x9a, hi: 0x9b}, - {value: 0x3bc7, lo: 0xae, hi: 0xae}, - // Block 0x40, offset 0x163 - {value: 0x000e, lo: 0x05}, - {value: 0x3bce, lo: 0x8d, hi: 0x8e}, - {value: 0x3bd5, lo: 0x8f, hi: 0x8f}, - {value: 0xa000, lo: 0x90, hi: 0x90}, - {value: 0xa000, lo: 0x92, hi: 0x92}, - {value: 0xa000, lo: 0x94, hi: 0x94}, - // Block 0x41, offset 0x169 - {value: 0x6408, lo: 0x0a}, - {value: 0xa000, lo: 0x83, hi: 0x83}, - {value: 0x3be3, lo: 0x84, hi: 0x84}, - {value: 0xa000, lo: 0x88, hi: 0x88}, - {value: 0x3bea, lo: 0x89, hi: 0x89}, - {value: 0xa000, lo: 0x8b, hi: 0x8b}, - {value: 0x3bf1, lo: 0x8c, hi: 0x8c}, - {value: 0xa000, lo: 0xa3, hi: 0xa3}, - {value: 0x3bf8, lo: 0xa4, hi: 0xa5}, - {value: 0x3bff, lo: 0xa6, hi: 0xa6}, - {value: 0xa000, lo: 0xbc, hi: 0xbc}, - // Block 0x42, offset 0x174 - {value: 0x0007, lo: 0x03}, - {value: 0x3c68, lo: 0xa0, hi: 0xa1}, - {value: 0x3c92, lo: 0xa2, hi: 0xa3}, - {value: 0x3cbc, lo: 0xaa, hi: 0xad}, - // Block 0x43, offset 0x178 - {value: 0x0004, lo: 0x01}, - {value: 0x048b, lo: 0xa9, hi: 0xaa}, - // Block 0x44, offset 0x17a - {value: 0x0000, lo: 0x01}, - {value: 0x44dd, lo: 0x9c, hi: 0x9c}, - // Block 0x45, offset 0x17c - {value: 0x0000, lo: 0x01}, - {value: 0x8132, lo: 0xaf, hi: 0xb1}, - // Block 0x46, offset 0x17e - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0xbf, hi: 0xbf}, - // Block 0x47, offset 0x180 - {value: 0x0000, lo: 0x01}, - {value: 0x8132, lo: 0xa0, hi: 0xbf}, - // Block 0x48, offset 0x182 - {value: 0x0000, lo: 0x05}, - {value: 0x812c, lo: 0xaa, hi: 0xaa}, - {value: 0x8131, lo: 0xab, hi: 0xab}, - {value: 0x8133, lo: 0xac, hi: 0xac}, - {value: 0x812e, lo: 0xad, hi: 0xad}, - {value: 0x812f, lo: 0xae, hi: 0xaf}, - // Block 0x49, offset 0x188 - {value: 0x0000, lo: 0x03}, - {value: 0x4a9f, lo: 0xb3, hi: 0xb3}, - {value: 0x4a9f, lo: 0xb5, hi: 0xb6}, - {value: 0x4a9f, lo: 0xba, hi: 0xbf}, - // Block 0x4a, offset 0x18c - {value: 0x0000, lo: 0x01}, - {value: 0x4a9f, lo: 0x8f, hi: 0xa3}, - // Block 0x4b, offset 0x18e - {value: 0x0000, lo: 0x01}, - {value: 0x8100, lo: 0xae, hi: 0xbe}, - // Block 0x4c, offset 0x190 - {value: 0x0000, lo: 0x07}, - {value: 0x8100, lo: 0x84, hi: 0x84}, - {value: 0x8100, lo: 0x87, hi: 0x87}, - {value: 0x8100, lo: 0x90, hi: 0x90}, - {value: 0x8100, lo: 0x9e, hi: 0x9e}, - {value: 0x8100, lo: 0xa1, hi: 0xa1}, - {value: 0x8100, lo: 0xb2, hi: 0xb2}, - {value: 0x8100, lo: 0xbb, hi: 0xbb}, - // Block 0x4d, offset 0x198 - {value: 0x0000, lo: 0x03}, - {value: 0x8100, lo: 0x80, hi: 0x80}, - {value: 0x8100, lo: 0x8b, hi: 0x8b}, - {value: 0x8100, lo: 0x8e, hi: 0x8e}, - // Block 0x4e, offset 0x19c - {value: 0x0000, lo: 0x02}, - {value: 0x8132, lo: 0xaf, hi: 0xaf}, - {value: 0x8132, lo: 0xb4, hi: 0xbd}, - // Block 0x4f, offset 0x19f - {value: 0x0000, lo: 0x01}, - {value: 0x8132, lo: 0x9e, hi: 0x9f}, - // Block 0x50, offset 0x1a1 - {value: 0x0000, lo: 0x01}, - {value: 0x8132, lo: 0xb0, hi: 0xb1}, - // Block 0x51, offset 0x1a3 - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0x86, hi: 0x86}, - // Block 0x52, offset 0x1a5 - {value: 0x0000, lo: 0x02}, - {value: 0x8104, lo: 0x84, hi: 0x84}, - {value: 0x8132, lo: 0xa0, hi: 0xb1}, - // Block 0x53, offset 0x1a8 - {value: 0x0000, lo: 0x01}, - {value: 0x812d, lo: 0xab, hi: 0xad}, - // Block 0x54, offset 0x1aa - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0x93, hi: 0x93}, - // Block 0x55, offset 0x1ac - {value: 0x0000, lo: 0x01}, - {value: 0x8102, lo: 0xb3, hi: 0xb3}, - // Block 0x56, offset 0x1ae - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0x80, hi: 0x80}, - // Block 0x57, offset 0x1b0 - {value: 0x0000, lo: 0x05}, - {value: 0x8132, lo: 0xb0, hi: 0xb0}, - {value: 0x8132, lo: 0xb2, hi: 0xb3}, - {value: 0x812d, lo: 0xb4, hi: 0xb4}, - {value: 0x8132, lo: 0xb7, hi: 0xb8}, - {value: 0x8132, lo: 0xbe, hi: 0xbf}, - // Block 0x58, offset 0x1b6 - {value: 0x0000, lo: 0x02}, - {value: 0x8132, lo: 0x81, hi: 0x81}, - {value: 0x8104, lo: 0xb6, hi: 0xb6}, - // Block 0x59, offset 0x1b9 - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0xad, hi: 0xad}, - // Block 0x5a, offset 0x1bb - {value: 0x0000, lo: 0x06}, - {value: 0xe500, lo: 0x80, hi: 0x80}, - {value: 0xc600, lo: 0x81, hi: 0x9b}, - {value: 0xe500, lo: 0x9c, hi: 0x9c}, - {value: 0xc600, lo: 0x9d, hi: 0xb7}, - {value: 0xe500, lo: 0xb8, hi: 0xb8}, - {value: 0xc600, lo: 0xb9, hi: 0xbf}, - // Block 0x5b, offset 0x1c2 - {value: 0x0000, lo: 0x05}, - {value: 0xc600, lo: 0x80, hi: 0x93}, - {value: 0xe500, lo: 0x94, hi: 0x94}, - {value: 0xc600, lo: 0x95, hi: 0xaf}, - {value: 0xe500, lo: 0xb0, hi: 0xb0}, - {value: 0xc600, lo: 0xb1, hi: 0xbf}, - // Block 0x5c, offset 0x1c8 - {value: 0x0000, lo: 0x05}, - {value: 0xc600, lo: 0x80, hi: 0x8b}, - {value: 0xe500, lo: 0x8c, hi: 0x8c}, - {value: 0xc600, lo: 0x8d, hi: 0xa7}, - {value: 0xe500, lo: 0xa8, hi: 0xa8}, - {value: 0xc600, lo: 0xa9, hi: 0xbf}, - // Block 0x5d, offset 0x1ce - {value: 0x0000, lo: 0x07}, - {value: 0xc600, lo: 0x80, hi: 0x83}, - {value: 0xe500, lo: 0x84, hi: 0x84}, - {value: 0xc600, lo: 0x85, hi: 0x9f}, - {value: 0xe500, lo: 0xa0, hi: 0xa0}, - {value: 0xc600, lo: 0xa1, hi: 0xbb}, - {value: 0xe500, lo: 0xbc, hi: 0xbc}, - {value: 0xc600, lo: 0xbd, hi: 0xbf}, - // Block 0x5e, offset 0x1d6 - {value: 0x0000, lo: 0x05}, - {value: 0xc600, lo: 0x80, hi: 0x97}, - {value: 0xe500, lo: 0x98, hi: 0x98}, - {value: 0xc600, lo: 0x99, hi: 0xb3}, - {value: 0xe500, lo: 0xb4, hi: 0xb4}, - {value: 0xc600, lo: 0xb5, hi: 0xbf}, - // Block 0x5f, offset 0x1dc - {value: 0x0000, lo: 0x05}, - {value: 0xc600, lo: 0x80, hi: 0x8f}, - {value: 0xe500, lo: 0x90, hi: 0x90}, - {value: 0xc600, lo: 0x91, hi: 0xab}, - {value: 0xe500, lo: 0xac, hi: 0xac}, - {value: 0xc600, lo: 0xad, hi: 0xbf}, - // Block 0x60, offset 0x1e2 - {value: 0x0000, lo: 0x05}, - {value: 0xc600, lo: 0x80, hi: 0x87}, - {value: 0xe500, lo: 0x88, hi: 0x88}, - {value: 0xc600, lo: 0x89, hi: 0xa3}, - {value: 0xe500, lo: 0xa4, hi: 0xa4}, - {value: 0xc600, lo: 0xa5, hi: 0xbf}, - // Block 0x61, offset 0x1e8 - {value: 0x0000, lo: 0x03}, - {value: 0xc600, lo: 0x80, hi: 0x87}, - {value: 0xe500, lo: 0x88, hi: 0x88}, - {value: 0xc600, lo: 0x89, hi: 0xa3}, - // Block 0x62, offset 0x1ec - {value: 0x0006, lo: 0x0d}, - {value: 0x4390, lo: 0x9d, hi: 0x9d}, - {value: 0x8115, lo: 0x9e, hi: 0x9e}, - {value: 0x4402, lo: 0x9f, hi: 0x9f}, - {value: 0x43f0, lo: 0xaa, hi: 0xab}, - {value: 0x44f4, lo: 0xac, hi: 0xac}, - {value: 0x44fc, lo: 0xad, hi: 0xad}, - {value: 0x4348, lo: 0xae, hi: 0xb1}, - {value: 0x4366, lo: 0xb2, hi: 0xb4}, - {value: 0x437e, lo: 0xb5, hi: 0xb6}, - {value: 0x438a, lo: 0xb8, hi: 0xb8}, - {value: 0x4396, lo: 0xb9, hi: 0xbb}, - {value: 0x43ae, lo: 0xbc, hi: 0xbc}, - {value: 0x43b4, lo: 0xbe, hi: 0xbe}, - // Block 0x63, offset 0x1fa - {value: 0x0006, lo: 0x08}, - {value: 0x43ba, lo: 0x80, hi: 0x81}, - {value: 0x43c6, lo: 0x83, hi: 0x84}, - {value: 0x43d8, lo: 0x86, hi: 0x89}, - {value: 0x43fc, lo: 0x8a, hi: 0x8a}, - {value: 0x4378, lo: 0x8b, hi: 0x8b}, - {value: 0x4360, lo: 0x8c, hi: 0x8c}, - {value: 0x43a8, lo: 0x8d, hi: 0x8d}, - {value: 0x43d2, lo: 0x8e, hi: 0x8e}, - // Block 0x64, offset 0x203 - {value: 0x0000, lo: 0x02}, - {value: 0x8100, lo: 0xa4, hi: 0xa5}, - {value: 0x8100, lo: 0xb0, hi: 0xb1}, - // Block 0x65, offset 0x206 - {value: 0x0000, lo: 0x02}, - {value: 0x8100, lo: 0x9b, hi: 0x9d}, - {value: 0x8200, lo: 0x9e, hi: 0xa3}, - // Block 0x66, offset 0x209 - {value: 0x0000, lo: 0x01}, - {value: 0x8100, lo: 0x90, hi: 0x90}, - // Block 0x67, offset 0x20b - {value: 0x0000, lo: 0x02}, - {value: 0x8100, lo: 0x99, hi: 0x99}, - {value: 0x8200, lo: 0xb2, hi: 0xb4}, - // Block 0x68, offset 0x20e - {value: 0x0000, lo: 0x01}, - {value: 0x8100, lo: 0xbc, hi: 0xbd}, - // Block 0x69, offset 0x210 - {value: 0x0000, lo: 0x03}, - {value: 0x8132, lo: 0xa0, hi: 0xa6}, - {value: 0x812d, lo: 0xa7, hi: 0xad}, - {value: 0x8132, lo: 0xae, hi: 0xaf}, - // Block 0x6a, offset 0x214 - {value: 0x0000, lo: 0x04}, - {value: 0x8100, lo: 0x89, hi: 0x8c}, - {value: 0x8100, lo: 0xb0, hi: 0xb2}, - {value: 0x8100, lo: 0xb4, hi: 0xb4}, - {value: 0x8100, lo: 0xb6, hi: 0xbf}, - // Block 0x6b, offset 0x219 - {value: 0x0000, lo: 0x01}, - {value: 0x8100, lo: 0x81, hi: 0x8c}, - // Block 0x6c, offset 0x21b - {value: 0x0000, lo: 0x01}, - {value: 0x8100, lo: 0xb5, hi: 0xba}, - // Block 0x6d, offset 0x21d - {value: 0x0000, lo: 0x04}, - {value: 0x4a9f, lo: 0x9e, hi: 0x9f}, - {value: 0x4a9f, lo: 0xa3, hi: 0xa3}, - {value: 0x4a9f, lo: 0xa5, hi: 0xa6}, - {value: 0x4a9f, lo: 0xaa, hi: 0xaf}, - // Block 0x6e, offset 0x222 - {value: 0x0000, lo: 0x05}, - {value: 0x4a9f, lo: 0x82, hi: 0x87}, - {value: 0x4a9f, lo: 0x8a, hi: 0x8f}, - {value: 0x4a9f, lo: 0x92, hi: 0x97}, - {value: 0x4a9f, lo: 0x9a, hi: 0x9c}, - {value: 0x8100, lo: 0xa3, hi: 0xa3}, - // Block 0x6f, offset 0x228 - {value: 0x0000, lo: 0x01}, - {value: 0x812d, lo: 0xbd, hi: 0xbd}, - // Block 0x70, offset 0x22a - {value: 0x0000, lo: 0x01}, - {value: 0x812d, lo: 0xa0, hi: 0xa0}, - // Block 0x71, offset 0x22c - {value: 0x0000, lo: 0x01}, - {value: 0x8132, lo: 0xb6, hi: 0xba}, - // Block 0x72, offset 0x22e - {value: 0x002c, lo: 0x05}, - {value: 0x812d, lo: 0x8d, hi: 0x8d}, - {value: 0x8132, lo: 0x8f, hi: 0x8f}, - {value: 0x8132, lo: 0xb8, hi: 0xb8}, - {value: 0x8101, lo: 0xb9, hi: 0xba}, - {value: 0x8104, lo: 0xbf, hi: 0xbf}, - // Block 0x73, offset 0x234 - {value: 0x0000, lo: 0x02}, - {value: 0x8132, lo: 0xa5, hi: 0xa5}, - {value: 0x812d, lo: 0xa6, hi: 0xa6}, - // Block 0x74, offset 0x237 - {value: 0x0000, lo: 0x02}, - {value: 0x8104, lo: 0x86, hi: 0x86}, - {value: 0x8104, lo: 0xbf, hi: 0xbf}, - // Block 0x75, offset 0x23a - {value: 0x17fe, lo: 0x07}, - {value: 0xa000, lo: 0x99, hi: 0x99}, - {value: 0x4238, lo: 0x9a, hi: 0x9a}, - {value: 0xa000, lo: 0x9b, hi: 0x9b}, - {value: 0x4242, lo: 0x9c, hi: 0x9c}, - {value: 0xa000, lo: 0xa5, hi: 0xa5}, - {value: 0x424c, lo: 0xab, hi: 0xab}, - {value: 0x8104, lo: 0xb9, hi: 0xba}, - // Block 0x76, offset 0x242 - {value: 0x0000, lo: 0x06}, - {value: 0x8132, lo: 0x80, hi: 0x82}, - {value: 0x9900, lo: 0xa7, hi: 0xa7}, - {value: 0x2d7e, lo: 0xae, hi: 0xae}, - {value: 0x2d88, lo: 0xaf, hi: 0xaf}, - {value: 0xa000, lo: 0xb1, hi: 0xb2}, - {value: 0x8104, lo: 0xb3, hi: 0xb4}, - // Block 0x77, offset 0x249 - {value: 0x0000, lo: 0x02}, - {value: 0x8104, lo: 0x80, hi: 0x80}, - {value: 0x8102, lo: 0x8a, hi: 0x8a}, - // Block 0x78, offset 0x24c - {value: 0x0000, lo: 0x02}, - {value: 0x8104, lo: 0xb5, hi: 0xb5}, - {value: 0x8102, lo: 0xb6, hi: 0xb6}, - // Block 0x79, offset 0x24f - {value: 0x0002, lo: 0x01}, - {value: 0x8102, lo: 0xa9, hi: 0xaa}, - // Block 0x7a, offset 0x251 - {value: 0x0000, lo: 0x07}, - {value: 0xa000, lo: 0x87, hi: 0x87}, - {value: 0x2d92, lo: 0x8b, hi: 0x8b}, - {value: 0x2d9c, lo: 0x8c, hi: 0x8c}, - {value: 0x8104, lo: 0x8d, hi: 0x8d}, - {value: 0x9900, lo: 0x97, hi: 0x97}, - {value: 0x8132, lo: 0xa6, hi: 0xac}, - {value: 0x8132, lo: 0xb0, hi: 0xb4}, - // Block 0x7b, offset 0x259 - {value: 0x0000, lo: 0x02}, - {value: 0x8104, lo: 0x82, hi: 0x82}, - {value: 0x8102, lo: 0x86, hi: 0x86}, - // Block 0x7c, offset 0x25c - {value: 0x6b5a, lo: 0x06}, - {value: 0x9900, lo: 0xb0, hi: 0xb0}, - {value: 0xa000, lo: 0xb9, hi: 0xb9}, - {value: 0x9900, lo: 0xba, hi: 0xba}, - {value: 0x2db0, lo: 0xbb, hi: 0xbb}, - {value: 0x2da6, lo: 0xbc, hi: 0xbd}, - {value: 0x2dba, lo: 0xbe, hi: 0xbe}, - // Block 0x7d, offset 0x263 - {value: 0x0000, lo: 0x02}, - {value: 0x8104, lo: 0x82, hi: 0x82}, - {value: 0x8102, lo: 0x83, hi: 0x83}, - // Block 0x7e, offset 0x266 - {value: 0x0000, lo: 0x05}, - {value: 0x9900, lo: 0xaf, hi: 0xaf}, - {value: 0xa000, lo: 0xb8, hi: 0xb9}, - {value: 0x2dc4, lo: 0xba, hi: 0xba}, - {value: 0x2dce, lo: 0xbb, hi: 0xbb}, - {value: 0x8104, lo: 0xbf, hi: 0xbf}, - // Block 0x7f, offset 0x26c - {value: 0x0000, lo: 0x01}, - {value: 0x8102, lo: 0x80, hi: 0x80}, - // Block 0x80, offset 0x26e - {value: 0x0000, lo: 0x02}, - {value: 0x8104, lo: 0xb6, hi: 0xb6}, - {value: 0x8102, lo: 0xb7, hi: 0xb7}, - // Block 0x81, offset 0x271 - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0xab, hi: 0xab}, - // Block 0x82, offset 0x273 - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0xb4, hi: 0xb4}, - // Block 0x83, offset 0x275 - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0x87, hi: 0x87}, - // Block 0x84, offset 0x277 - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0x99, hi: 0x99}, - // Block 0x85, offset 0x279 - {value: 0x0000, lo: 0x02}, - {value: 0x8102, lo: 0x82, hi: 0x82}, - {value: 0x8104, lo: 0x84, hi: 0x85}, - // Block 0x86, offset 0x27c - {value: 0x0000, lo: 0x01}, - {value: 0x8101, lo: 0xb0, hi: 0xb4}, - // Block 0x87, offset 0x27e - {value: 0x0000, lo: 0x01}, - {value: 0x8132, lo: 0xb0, hi: 0xb6}, - // Block 0x88, offset 0x280 - {value: 0x0000, lo: 0x01}, - {value: 0x8101, lo: 0x9e, hi: 0x9e}, - // Block 0x89, offset 0x282 - {value: 0x0000, lo: 0x0c}, - {value: 0x45cc, lo: 0x9e, hi: 0x9e}, - {value: 0x45d6, lo: 0x9f, hi: 0x9f}, - {value: 0x460a, lo: 0xa0, hi: 0xa0}, - {value: 0x4618, lo: 0xa1, hi: 0xa1}, - {value: 0x4626, lo: 0xa2, hi: 0xa2}, - {value: 0x4634, lo: 0xa3, hi: 0xa3}, - {value: 0x4642, lo: 0xa4, hi: 0xa4}, - {value: 0x812b, lo: 0xa5, hi: 0xa6}, - {value: 0x8101, lo: 0xa7, hi: 0xa9}, - {value: 0x8130, lo: 0xad, hi: 0xad}, - {value: 0x812b, lo: 0xae, hi: 0xb2}, - {value: 0x812d, lo: 0xbb, hi: 0xbf}, - // Block 0x8a, offset 0x28f - {value: 0x0000, lo: 0x09}, - {value: 0x812d, lo: 0x80, hi: 0x82}, - {value: 0x8132, lo: 0x85, hi: 0x89}, - {value: 0x812d, lo: 0x8a, hi: 0x8b}, - {value: 0x8132, lo: 0xaa, hi: 0xad}, - {value: 0x45e0, lo: 0xbb, hi: 0xbb}, - {value: 0x45ea, lo: 0xbc, hi: 0xbc}, - {value: 0x4650, lo: 0xbd, hi: 0xbd}, - {value: 0x466c, lo: 0xbe, hi: 0xbe}, - {value: 0x465e, lo: 0xbf, hi: 0xbf}, - // Block 0x8b, offset 0x299 - {value: 0x0000, lo: 0x01}, - {value: 0x467a, lo: 0x80, hi: 0x80}, - // Block 0x8c, offset 0x29b - {value: 0x0000, lo: 0x01}, - {value: 0x8132, lo: 0x82, hi: 0x84}, - // Block 0x8d, offset 0x29d - {value: 0x0000, lo: 0x05}, - {value: 0x8132, lo: 0x80, hi: 0x86}, - {value: 0x8132, lo: 0x88, hi: 0x98}, - {value: 0x8132, lo: 0x9b, hi: 0xa1}, - {value: 0x8132, lo: 0xa3, hi: 0xa4}, - {value: 0x8132, lo: 0xa6, hi: 0xaa}, - // Block 0x8e, offset 0x2a3 - {value: 0x0000, lo: 0x01}, - {value: 0x812d, lo: 0x90, hi: 0x96}, - // Block 0x8f, offset 0x2a5 - {value: 0x0000, lo: 0x02}, - {value: 0x8132, lo: 0x84, hi: 0x89}, - {value: 0x8102, lo: 0x8a, hi: 0x8a}, - // Block 0x90, offset 0x2a8 - {value: 0x0000, lo: 0x01}, - {value: 0x8100, lo: 0x93, hi: 0x93}, -} - -// lookup returns the trie value for the first UTF-8 encoding in s and -// the width in bytes of this encoding. The size will be 0 if s does not -// hold enough bytes to complete the encoding. len(s) must be greater than 0. -func (t *nfkcTrie) lookup(s []byte) (v uint16, sz int) { - c0 := s[0] - switch { - case c0 < 0x80: // is ASCII - return nfkcValues[c0], 1 - case c0 < 0xC2: - return 0, 1 // Illegal UTF-8: not a starter, not ASCII. - case c0 < 0xE0: // 2-byte UTF-8 - if len(s) < 2 { - return 0, 0 - } - i := nfkcIndex[c0] - c1 := s[1] - if c1 < 0x80 || 0xC0 <= c1 { - return 0, 1 // Illegal UTF-8: not a continuation byte. - } - return t.lookupValue(uint32(i), c1), 2 - case c0 < 0xF0: // 3-byte UTF-8 - if len(s) < 3 { - return 0, 0 - } - i := nfkcIndex[c0] - c1 := s[1] - if c1 < 0x80 || 0xC0 <= c1 { - return 0, 1 // Illegal UTF-8: not a continuation byte. - } - o := uint32(i)<<6 + uint32(c1) - i = nfkcIndex[o] - c2 := s[2] - if c2 < 0x80 || 0xC0 <= c2 { - return 0, 2 // Illegal UTF-8: not a continuation byte. - } - return t.lookupValue(uint32(i), c2), 3 - case c0 < 0xF8: // 4-byte UTF-8 - if len(s) < 4 { - return 0, 0 - } - i := nfkcIndex[c0] - c1 := s[1] - if c1 < 0x80 || 0xC0 <= c1 { - return 0, 1 // Illegal UTF-8: not a continuation byte. - } - o := uint32(i)<<6 + uint32(c1) - i = nfkcIndex[o] - c2 := s[2] - if c2 < 0x80 || 0xC0 <= c2 { - return 0, 2 // Illegal UTF-8: not a continuation byte. - } - o = uint32(i)<<6 + uint32(c2) - i = nfkcIndex[o] - c3 := s[3] - if c3 < 0x80 || 0xC0 <= c3 { - return 0, 3 // Illegal UTF-8: not a continuation byte. - } - return t.lookupValue(uint32(i), c3), 4 - } - // Illegal rune - return 0, 1 -} - -// lookupUnsafe returns the trie value for the first UTF-8 encoding in s. -// s must start with a full and valid UTF-8 encoded rune. -func (t *nfkcTrie) lookupUnsafe(s []byte) uint16 { - c0 := s[0] - if c0 < 0x80 { // is ASCII - return nfkcValues[c0] - } - i := nfkcIndex[c0] - if c0 < 0xE0 { // 2-byte UTF-8 - return t.lookupValue(uint32(i), s[1]) - } - i = nfkcIndex[uint32(i)<<6+uint32(s[1])] - if c0 < 0xF0 { // 3-byte UTF-8 - return t.lookupValue(uint32(i), s[2]) - } - i = nfkcIndex[uint32(i)<<6+uint32(s[2])] - if c0 < 0xF8 { // 4-byte UTF-8 - return t.lookupValue(uint32(i), s[3]) - } - return 0 -} - -// lookupString returns the trie value for the first UTF-8 encoding in s and -// the width in bytes of this encoding. The size will be 0 if s does not -// hold enough bytes to complete the encoding. len(s) must be greater than 0. -func (t *nfkcTrie) lookupString(s string) (v uint16, sz int) { - c0 := s[0] - switch { - case c0 < 0x80: // is ASCII - return nfkcValues[c0], 1 - case c0 < 0xC2: - return 0, 1 // Illegal UTF-8: not a starter, not ASCII. - case c0 < 0xE0: // 2-byte UTF-8 - if len(s) < 2 { - return 0, 0 - } - i := nfkcIndex[c0] - c1 := s[1] - if c1 < 0x80 || 0xC0 <= c1 { - return 0, 1 // Illegal UTF-8: not a continuation byte. - } - return t.lookupValue(uint32(i), c1), 2 - case c0 < 0xF0: // 3-byte UTF-8 - if len(s) < 3 { - return 0, 0 - } - i := nfkcIndex[c0] - c1 := s[1] - if c1 < 0x80 || 0xC0 <= c1 { - return 0, 1 // Illegal UTF-8: not a continuation byte. - } - o := uint32(i)<<6 + uint32(c1) - i = nfkcIndex[o] - c2 := s[2] - if c2 < 0x80 || 0xC0 <= c2 { - return 0, 2 // Illegal UTF-8: not a continuation byte. - } - return t.lookupValue(uint32(i), c2), 3 - case c0 < 0xF8: // 4-byte UTF-8 - if len(s) < 4 { - return 0, 0 - } - i := nfkcIndex[c0] - c1 := s[1] - if c1 < 0x80 || 0xC0 <= c1 { - return 0, 1 // Illegal UTF-8: not a continuation byte. - } - o := uint32(i)<<6 + uint32(c1) - i = nfkcIndex[o] - c2 := s[2] - if c2 < 0x80 || 0xC0 <= c2 { - return 0, 2 // Illegal UTF-8: not a continuation byte. - } - o = uint32(i)<<6 + uint32(c2) - i = nfkcIndex[o] - c3 := s[3] - if c3 < 0x80 || 0xC0 <= c3 { - return 0, 3 // Illegal UTF-8: not a continuation byte. - } - return t.lookupValue(uint32(i), c3), 4 - } - // Illegal rune - return 0, 1 -} - -// lookupStringUnsafe returns the trie value for the first UTF-8 encoding in s. -// s must start with a full and valid UTF-8 encoded rune. -func (t *nfkcTrie) lookupStringUnsafe(s string) uint16 { - c0 := s[0] - if c0 < 0x80 { // is ASCII - return nfkcValues[c0] - } - i := nfkcIndex[c0] - if c0 < 0xE0 { // 2-byte UTF-8 - return t.lookupValue(uint32(i), s[1]) - } - i = nfkcIndex[uint32(i)<<6+uint32(s[1])] - if c0 < 0xF0 { // 3-byte UTF-8 - return t.lookupValue(uint32(i), s[2]) - } - i = nfkcIndex[uint32(i)<<6+uint32(s[2])] - if c0 < 0xF8 { // 4-byte UTF-8 - return t.lookupValue(uint32(i), s[3]) - } - return 0 -} - -// nfkcTrie. Total size: 17104 bytes (16.70 KiB). Checksum: d985061cf5307b35. -type nfkcTrie struct{} - -func newNfkcTrie(i int) *nfkcTrie { - return &nfkcTrie{} -} - -// lookupValue determines the type of block n and looks up the value for b. -func (t *nfkcTrie) lookupValue(n uint32, b byte) uint16 { - switch { - case n < 91: - return uint16(nfkcValues[n<<6+uint32(b)]) - default: - n -= 91 - return uint16(nfkcSparse.lookup(n, b)) - } -} - -// nfkcValues: 93 blocks, 5952 entries, 11904 bytes -// The third block is the zero block. -var nfkcValues = [5952]uint16{ - // Block 0x0, offset 0x0 - 0x3c: 0xa000, 0x3d: 0xa000, 0x3e: 0xa000, - // Block 0x1, offset 0x40 - 0x41: 0xa000, 0x42: 0xa000, 0x43: 0xa000, 0x44: 0xa000, 0x45: 0xa000, - 0x46: 0xa000, 0x47: 0xa000, 0x48: 0xa000, 0x49: 0xa000, 0x4a: 0xa000, 0x4b: 0xa000, - 0x4c: 0xa000, 0x4d: 0xa000, 0x4e: 0xa000, 0x4f: 0xa000, 0x50: 0xa000, - 0x52: 0xa000, 0x53: 0xa000, 0x54: 0xa000, 0x55: 0xa000, 0x56: 0xa000, 0x57: 0xa000, - 0x58: 0xa000, 0x59: 0xa000, 0x5a: 0xa000, - 0x61: 0xa000, 0x62: 0xa000, 0x63: 0xa000, - 0x64: 0xa000, 0x65: 0xa000, 0x66: 0xa000, 0x67: 0xa000, 0x68: 0xa000, 0x69: 0xa000, - 0x6a: 0xa000, 0x6b: 0xa000, 0x6c: 0xa000, 0x6d: 0xa000, 0x6e: 0xa000, 0x6f: 0xa000, - 0x70: 0xa000, 0x72: 0xa000, 0x73: 0xa000, 0x74: 0xa000, 0x75: 0xa000, - 0x76: 0xa000, 0x77: 0xa000, 0x78: 0xa000, 0x79: 0xa000, 0x7a: 0xa000, - // Block 0x2, offset 0x80 - // Block 0x3, offset 0xc0 - 0xc0: 0x2f6f, 0xc1: 0x2f74, 0xc2: 0x4688, 0xc3: 0x2f79, 0xc4: 0x4697, 0xc5: 0x469c, - 0xc6: 0xa000, 0xc7: 0x46a6, 0xc8: 0x2fe2, 0xc9: 0x2fe7, 0xca: 0x46ab, 0xcb: 0x2ffb, - 0xcc: 0x306e, 0xcd: 0x3073, 0xce: 0x3078, 0xcf: 0x46bf, 0xd1: 0x3104, - 0xd2: 0x3127, 0xd3: 0x312c, 0xd4: 0x46c9, 0xd5: 0x46ce, 0xd6: 0x46dd, - 0xd8: 0xa000, 0xd9: 0x31b3, 0xda: 0x31b8, 0xdb: 0x31bd, 0xdc: 0x470f, 0xdd: 0x3235, - 0xe0: 0x327b, 0xe1: 0x3280, 0xe2: 0x4719, 0xe3: 0x3285, - 0xe4: 0x4728, 0xe5: 0x472d, 0xe6: 0xa000, 0xe7: 0x4737, 0xe8: 0x32ee, 0xe9: 0x32f3, - 0xea: 0x473c, 0xeb: 0x3307, 0xec: 0x337f, 0xed: 0x3384, 0xee: 0x3389, 0xef: 0x4750, - 0xf1: 0x3415, 0xf2: 0x3438, 0xf3: 0x343d, 0xf4: 0x475a, 0xf5: 0x475f, - 0xf6: 0x476e, 0xf8: 0xa000, 0xf9: 0x34c9, 0xfa: 0x34ce, 0xfb: 0x34d3, - 0xfc: 0x47a0, 0xfd: 0x3550, 0xff: 0x3569, - // Block 0x4, offset 0x100 - 0x100: 0x2f7e, 0x101: 0x328a, 0x102: 0x468d, 0x103: 0x471e, 0x104: 0x2f9c, 0x105: 0x32a8, - 0x106: 0x2fb0, 0x107: 0x32bc, 0x108: 0x2fb5, 0x109: 0x32c1, 0x10a: 0x2fba, 0x10b: 0x32c6, - 0x10c: 0x2fbf, 0x10d: 0x32cb, 0x10e: 0x2fc9, 0x10f: 0x32d5, - 0x112: 0x46b0, 0x113: 0x4741, 0x114: 0x2ff1, 0x115: 0x32fd, 0x116: 0x2ff6, 0x117: 0x3302, - 0x118: 0x3014, 0x119: 0x3320, 0x11a: 0x3005, 0x11b: 0x3311, 0x11c: 0x302d, 0x11d: 0x3339, - 0x11e: 0x3037, 0x11f: 0x3343, 0x120: 0x303c, 0x121: 0x3348, 0x122: 0x3046, 0x123: 0x3352, - 0x124: 0x304b, 0x125: 0x3357, 0x128: 0x307d, 0x129: 0x338e, - 0x12a: 0x3082, 0x12b: 0x3393, 0x12c: 0x3087, 0x12d: 0x3398, 0x12e: 0x30aa, 0x12f: 0x33b6, - 0x130: 0x308c, 0x132: 0x195d, 0x133: 0x19e7, 0x134: 0x30b4, 0x135: 0x33c0, - 0x136: 0x30c8, 0x137: 0x33d9, 0x139: 0x30d2, 0x13a: 0x33e3, 0x13b: 0x30dc, - 0x13c: 0x33ed, 0x13d: 0x30d7, 0x13e: 0x33e8, 0x13f: 0x1bac, - // Block 0x5, offset 0x140 - 0x140: 0x1c34, 0x143: 0x30ff, 0x144: 0x3410, 0x145: 0x3118, - 0x146: 0x3429, 0x147: 0x310e, 0x148: 0x341f, 0x149: 0x1c5c, - 0x14c: 0x46d3, 0x14d: 0x4764, 0x14e: 0x3131, 0x14f: 0x3442, 0x150: 0x313b, 0x151: 0x344c, - 0x154: 0x3159, 0x155: 0x346a, 0x156: 0x3172, 0x157: 0x3483, - 0x158: 0x3163, 0x159: 0x3474, 0x15a: 0x46f6, 0x15b: 0x4787, 0x15c: 0x317c, 0x15d: 0x348d, - 0x15e: 0x318b, 0x15f: 0x349c, 0x160: 0x46fb, 0x161: 0x478c, 0x162: 0x31a4, 0x163: 0x34ba, - 0x164: 0x3195, 0x165: 0x34ab, 0x168: 0x4705, 0x169: 0x4796, - 0x16a: 0x470a, 0x16b: 0x479b, 0x16c: 0x31c2, 0x16d: 0x34d8, 0x16e: 0x31cc, 0x16f: 0x34e2, - 0x170: 0x31d1, 0x171: 0x34e7, 0x172: 0x31ef, 0x173: 0x3505, 0x174: 0x3212, 0x175: 0x3528, - 0x176: 0x323a, 0x177: 0x3555, 0x178: 0x324e, 0x179: 0x325d, 0x17a: 0x357d, 0x17b: 0x3267, - 0x17c: 0x3587, 0x17d: 0x326c, 0x17e: 0x358c, 0x17f: 0x00a7, - // Block 0x6, offset 0x180 - 0x184: 0x2dee, 0x185: 0x2df4, - 0x186: 0x2dfa, 0x187: 0x1972, 0x188: 0x1975, 0x189: 0x1a08, 0x18a: 0x1987, 0x18b: 0x198a, - 0x18c: 0x1a3e, 0x18d: 0x2f88, 0x18e: 0x3294, 0x18f: 0x3096, 0x190: 0x33a2, 0x191: 0x3140, - 0x192: 0x3451, 0x193: 0x31d6, 0x194: 0x34ec, 0x195: 0x39cf, 0x196: 0x3b5e, 0x197: 0x39c8, - 0x198: 0x3b57, 0x199: 0x39d6, 0x19a: 0x3b65, 0x19b: 0x39c1, 0x19c: 0x3b50, - 0x19e: 0x38b0, 0x19f: 0x3a3f, 0x1a0: 0x38a9, 0x1a1: 0x3a38, 0x1a2: 0x35b3, 0x1a3: 0x35c5, - 0x1a6: 0x3041, 0x1a7: 0x334d, 0x1a8: 0x30be, 0x1a9: 0x33cf, - 0x1aa: 0x46ec, 0x1ab: 0x477d, 0x1ac: 0x3990, 0x1ad: 0x3b1f, 0x1ae: 0x35d7, 0x1af: 0x35dd, - 0x1b0: 0x33c5, 0x1b1: 0x1942, 0x1b2: 0x1945, 0x1b3: 0x19cf, 0x1b4: 0x3028, 0x1b5: 0x3334, - 0x1b8: 0x30fa, 0x1b9: 0x340b, 0x1ba: 0x38b7, 0x1bb: 0x3a46, - 0x1bc: 0x35ad, 0x1bd: 0x35bf, 0x1be: 0x35b9, 0x1bf: 0x35cb, - // Block 0x7, offset 0x1c0 - 0x1c0: 0x2f8d, 0x1c1: 0x3299, 0x1c2: 0x2f92, 0x1c3: 0x329e, 0x1c4: 0x300a, 0x1c5: 0x3316, - 0x1c6: 0x300f, 0x1c7: 0x331b, 0x1c8: 0x309b, 0x1c9: 0x33a7, 0x1ca: 0x30a0, 0x1cb: 0x33ac, - 0x1cc: 0x3145, 0x1cd: 0x3456, 0x1ce: 0x314a, 0x1cf: 0x345b, 0x1d0: 0x3168, 0x1d1: 0x3479, - 0x1d2: 0x316d, 0x1d3: 0x347e, 0x1d4: 0x31db, 0x1d5: 0x34f1, 0x1d6: 0x31e0, 0x1d7: 0x34f6, - 0x1d8: 0x3186, 0x1d9: 0x3497, 0x1da: 0x319f, 0x1db: 0x34b5, - 0x1de: 0x305a, 0x1df: 0x3366, - 0x1e6: 0x4692, 0x1e7: 0x4723, 0x1e8: 0x46ba, 0x1e9: 0x474b, - 0x1ea: 0x395f, 0x1eb: 0x3aee, 0x1ec: 0x393c, 0x1ed: 0x3acb, 0x1ee: 0x46d8, 0x1ef: 0x4769, - 0x1f0: 0x3958, 0x1f1: 0x3ae7, 0x1f2: 0x3244, 0x1f3: 0x355f, - // Block 0x8, offset 0x200 - 0x200: 0x9932, 0x201: 0x9932, 0x202: 0x9932, 0x203: 0x9932, 0x204: 0x9932, 0x205: 0x8132, - 0x206: 0x9932, 0x207: 0x9932, 0x208: 0x9932, 0x209: 0x9932, 0x20a: 0x9932, 0x20b: 0x9932, - 0x20c: 0x9932, 0x20d: 0x8132, 0x20e: 0x8132, 0x20f: 0x9932, 0x210: 0x8132, 0x211: 0x9932, - 0x212: 0x8132, 0x213: 0x9932, 0x214: 0x9932, 0x215: 0x8133, 0x216: 0x812d, 0x217: 0x812d, - 0x218: 0x812d, 0x219: 0x812d, 0x21a: 0x8133, 0x21b: 0x992b, 0x21c: 0x812d, 0x21d: 0x812d, - 0x21e: 0x812d, 0x21f: 0x812d, 0x220: 0x812d, 0x221: 0x8129, 0x222: 0x8129, 0x223: 0x992d, - 0x224: 0x992d, 0x225: 0x992d, 0x226: 0x992d, 0x227: 0x9929, 0x228: 0x9929, 0x229: 0x812d, - 0x22a: 0x812d, 0x22b: 0x812d, 0x22c: 0x812d, 0x22d: 0x992d, 0x22e: 0x992d, 0x22f: 0x812d, - 0x230: 0x992d, 0x231: 0x992d, 0x232: 0x812d, 0x233: 0x812d, 0x234: 0x8101, 0x235: 0x8101, - 0x236: 0x8101, 0x237: 0x8101, 0x238: 0x9901, 0x239: 0x812d, 0x23a: 0x812d, 0x23b: 0x812d, - 0x23c: 0x812d, 0x23d: 0x8132, 0x23e: 0x8132, 0x23f: 0x8132, - // Block 0x9, offset 0x240 - 0x240: 0x49ae, 0x241: 0x49b3, 0x242: 0x9932, 0x243: 0x49b8, 0x244: 0x4a71, 0x245: 0x9936, - 0x246: 0x8132, 0x247: 0x812d, 0x248: 0x812d, 0x249: 0x812d, 0x24a: 0x8132, 0x24b: 0x8132, - 0x24c: 0x8132, 0x24d: 0x812d, 0x24e: 0x812d, 0x250: 0x8132, 0x251: 0x8132, - 0x252: 0x8132, 0x253: 0x812d, 0x254: 0x812d, 0x255: 0x812d, 0x256: 0x812d, 0x257: 0x8132, - 0x258: 0x8133, 0x259: 0x812d, 0x25a: 0x812d, 0x25b: 0x8132, 0x25c: 0x8134, 0x25d: 0x8135, - 0x25e: 0x8135, 0x25f: 0x8134, 0x260: 0x8135, 0x261: 0x8135, 0x262: 0x8134, 0x263: 0x8132, - 0x264: 0x8132, 0x265: 0x8132, 0x266: 0x8132, 0x267: 0x8132, 0x268: 0x8132, 0x269: 0x8132, - 0x26a: 0x8132, 0x26b: 0x8132, 0x26c: 0x8132, 0x26d: 0x8132, 0x26e: 0x8132, 0x26f: 0x8132, - 0x274: 0x0170, - 0x27a: 0x42a5, - 0x27e: 0x0037, - // Block 0xa, offset 0x280 - 0x284: 0x425a, 0x285: 0x447b, - 0x286: 0x35e9, 0x287: 0x00ce, 0x288: 0x3607, 0x289: 0x3613, 0x28a: 0x3625, - 0x28c: 0x3643, 0x28e: 0x3655, 0x28f: 0x3673, 0x290: 0x3e08, 0x291: 0xa000, - 0x295: 0xa000, 0x297: 0xa000, - 0x299: 0xa000, - 0x29f: 0xa000, 0x2a1: 0xa000, - 0x2a5: 0xa000, 0x2a9: 0xa000, - 0x2aa: 0x3637, 0x2ab: 0x3667, 0x2ac: 0x47fe, 0x2ad: 0x3697, 0x2ae: 0x4828, 0x2af: 0x36a9, - 0x2b0: 0x3e70, 0x2b1: 0xa000, 0x2b5: 0xa000, - 0x2b7: 0xa000, 0x2b9: 0xa000, - 0x2bf: 0xa000, - // Block 0xb, offset 0x2c0 - 0x2c1: 0xa000, 0x2c5: 0xa000, - 0x2c9: 0xa000, 0x2ca: 0x4840, 0x2cb: 0x485e, - 0x2cc: 0x36c7, 0x2cd: 0x36df, 0x2ce: 0x4876, 0x2d0: 0x01be, 0x2d1: 0x01d0, - 0x2d2: 0x01ac, 0x2d3: 0x430c, 0x2d4: 0x4312, 0x2d5: 0x01fa, 0x2d6: 0x01e8, - 0x2f0: 0x01d6, 0x2f1: 0x01eb, 0x2f2: 0x01ee, 0x2f4: 0x0188, 0x2f5: 0x01c7, - 0x2f9: 0x01a6, - // Block 0xc, offset 0x300 - 0x300: 0x3721, 0x301: 0x372d, 0x303: 0x371b, - 0x306: 0xa000, 0x307: 0x3709, - 0x30c: 0x375d, 0x30d: 0x3745, 0x30e: 0x376f, 0x310: 0xa000, - 0x313: 0xa000, 0x315: 0xa000, 0x316: 0xa000, 0x317: 0xa000, - 0x318: 0xa000, 0x319: 0x3751, 0x31a: 0xa000, - 0x31e: 0xa000, 0x323: 0xa000, - 0x327: 0xa000, - 0x32b: 0xa000, 0x32d: 0xa000, - 0x330: 0xa000, 0x333: 0xa000, 0x335: 0xa000, - 0x336: 0xa000, 0x337: 0xa000, 0x338: 0xa000, 0x339: 0x37d5, 0x33a: 0xa000, - 0x33e: 0xa000, - // Block 0xd, offset 0x340 - 0x341: 0x3733, 0x342: 0x37b7, - 0x350: 0x370f, 0x351: 0x3793, - 0x352: 0x3715, 0x353: 0x3799, 0x356: 0x3727, 0x357: 0x37ab, - 0x358: 0xa000, 0x359: 0xa000, 0x35a: 0x3829, 0x35b: 0x382f, 0x35c: 0x3739, 0x35d: 0x37bd, - 0x35e: 0x373f, 0x35f: 0x37c3, 0x362: 0x374b, 0x363: 0x37cf, - 0x364: 0x3757, 0x365: 0x37db, 0x366: 0x3763, 0x367: 0x37e7, 0x368: 0xa000, 0x369: 0xa000, - 0x36a: 0x3835, 0x36b: 0x383b, 0x36c: 0x378d, 0x36d: 0x3811, 0x36e: 0x3769, 0x36f: 0x37ed, - 0x370: 0x3775, 0x371: 0x37f9, 0x372: 0x377b, 0x373: 0x37ff, 0x374: 0x3781, 0x375: 0x3805, - 0x378: 0x3787, 0x379: 0x380b, - // Block 0xe, offset 0x380 - 0x387: 0x1d61, - 0x391: 0x812d, - 0x392: 0x8132, 0x393: 0x8132, 0x394: 0x8132, 0x395: 0x8132, 0x396: 0x812d, 0x397: 0x8132, - 0x398: 0x8132, 0x399: 0x8132, 0x39a: 0x812e, 0x39b: 0x812d, 0x39c: 0x8132, 0x39d: 0x8132, - 0x39e: 0x8132, 0x39f: 0x8132, 0x3a0: 0x8132, 0x3a1: 0x8132, 0x3a2: 0x812d, 0x3a3: 0x812d, - 0x3a4: 0x812d, 0x3a5: 0x812d, 0x3a6: 0x812d, 0x3a7: 0x812d, 0x3a8: 0x8132, 0x3a9: 0x8132, - 0x3aa: 0x812d, 0x3ab: 0x8132, 0x3ac: 0x8132, 0x3ad: 0x812e, 0x3ae: 0x8131, 0x3af: 0x8132, - 0x3b0: 0x8105, 0x3b1: 0x8106, 0x3b2: 0x8107, 0x3b3: 0x8108, 0x3b4: 0x8109, 0x3b5: 0x810a, - 0x3b6: 0x810b, 0x3b7: 0x810c, 0x3b8: 0x810d, 0x3b9: 0x810e, 0x3ba: 0x810e, 0x3bb: 0x810f, - 0x3bc: 0x8110, 0x3bd: 0x8111, 0x3bf: 0x8112, - // Block 0xf, offset 0x3c0 - 0x3c8: 0xa000, 0x3ca: 0xa000, 0x3cb: 0x8116, - 0x3cc: 0x8117, 0x3cd: 0x8118, 0x3ce: 0x8119, 0x3cf: 0x811a, 0x3d0: 0x811b, 0x3d1: 0x811c, - 0x3d2: 0x811d, 0x3d3: 0x9932, 0x3d4: 0x9932, 0x3d5: 0x992d, 0x3d6: 0x812d, 0x3d7: 0x8132, - 0x3d8: 0x8132, 0x3d9: 0x8132, 0x3da: 0x8132, 0x3db: 0x8132, 0x3dc: 0x812d, 0x3dd: 0x8132, - 0x3de: 0x8132, 0x3df: 0x812d, - 0x3f0: 0x811e, 0x3f5: 0x1d84, - 0x3f6: 0x2013, 0x3f7: 0x204f, 0x3f8: 0x204a, - // Block 0x10, offset 0x400 - 0x405: 0xa000, - 0x406: 0x2d26, 0x407: 0xa000, 0x408: 0x2d2e, 0x409: 0xa000, 0x40a: 0x2d36, 0x40b: 0xa000, - 0x40c: 0x2d3e, 0x40d: 0xa000, 0x40e: 0x2d46, 0x411: 0xa000, - 0x412: 0x2d4e, - 0x434: 0x8102, 0x435: 0x9900, - 0x43a: 0xa000, 0x43b: 0x2d56, - 0x43c: 0xa000, 0x43d: 0x2d5e, 0x43e: 0xa000, 0x43f: 0xa000, - // Block 0x11, offset 0x440 - 0x440: 0x0069, 0x441: 0x006b, 0x442: 0x006f, 0x443: 0x0083, 0x444: 0x00f5, 0x445: 0x00f8, - 0x446: 0x0413, 0x447: 0x0085, 0x448: 0x0089, 0x449: 0x008b, 0x44a: 0x0104, 0x44b: 0x0107, - 0x44c: 0x010a, 0x44d: 0x008f, 0x44f: 0x0097, 0x450: 0x009b, 0x451: 0x00e0, - 0x452: 0x009f, 0x453: 0x00fe, 0x454: 0x0417, 0x455: 0x041b, 0x456: 0x00a1, 0x457: 0x00a9, - 0x458: 0x00ab, 0x459: 0x0423, 0x45a: 0x012b, 0x45b: 0x00ad, 0x45c: 0x0427, 0x45d: 0x01be, - 0x45e: 0x01c1, 0x45f: 0x01c4, 0x460: 0x01fa, 0x461: 0x01fd, 0x462: 0x0093, 0x463: 0x00a5, - 0x464: 0x00ab, 0x465: 0x00ad, 0x466: 0x01be, 0x467: 0x01c1, 0x468: 0x01eb, 0x469: 0x01fa, - 0x46a: 0x01fd, - 0x478: 0x020c, - // Block 0x12, offset 0x480 - 0x49b: 0x00fb, 0x49c: 0x0087, 0x49d: 0x0101, - 0x49e: 0x00d4, 0x49f: 0x010a, 0x4a0: 0x008d, 0x4a1: 0x010d, 0x4a2: 0x0110, 0x4a3: 0x0116, - 0x4a4: 0x011c, 0x4a5: 0x011f, 0x4a6: 0x0122, 0x4a7: 0x042b, 0x4a8: 0x016a, 0x4a9: 0x0128, - 0x4aa: 0x042f, 0x4ab: 0x016d, 0x4ac: 0x0131, 0x4ad: 0x012e, 0x4ae: 0x0134, 0x4af: 0x0137, - 0x4b0: 0x013a, 0x4b1: 0x013d, 0x4b2: 0x0140, 0x4b3: 0x014c, 0x4b4: 0x014f, 0x4b5: 0x00ec, - 0x4b6: 0x0152, 0x4b7: 0x0155, 0x4b8: 0x041f, 0x4b9: 0x0158, 0x4ba: 0x015b, 0x4bb: 0x00b5, - 0x4bc: 0x015e, 0x4bd: 0x0161, 0x4be: 0x0164, 0x4bf: 0x01d0, - // Block 0x13, offset 0x4c0 - 0x4c0: 0x8132, 0x4c1: 0x8132, 0x4c2: 0x812d, 0x4c3: 0x8132, 0x4c4: 0x8132, 0x4c5: 0x8132, - 0x4c6: 0x8132, 0x4c7: 0x8132, 0x4c8: 0x8132, 0x4c9: 0x8132, 0x4ca: 0x812d, 0x4cb: 0x8132, - 0x4cc: 0x8132, 0x4cd: 0x8135, 0x4ce: 0x812a, 0x4cf: 0x812d, 0x4d0: 0x8129, 0x4d1: 0x8132, - 0x4d2: 0x8132, 0x4d3: 0x8132, 0x4d4: 0x8132, 0x4d5: 0x8132, 0x4d6: 0x8132, 0x4d7: 0x8132, - 0x4d8: 0x8132, 0x4d9: 0x8132, 0x4da: 0x8132, 0x4db: 0x8132, 0x4dc: 0x8132, 0x4dd: 0x8132, - 0x4de: 0x8132, 0x4df: 0x8132, 0x4e0: 0x8132, 0x4e1: 0x8132, 0x4e2: 0x8132, 0x4e3: 0x8132, - 0x4e4: 0x8132, 0x4e5: 0x8132, 0x4e6: 0x8132, 0x4e7: 0x8132, 0x4e8: 0x8132, 0x4e9: 0x8132, - 0x4ea: 0x8132, 0x4eb: 0x8132, 0x4ec: 0x8132, 0x4ed: 0x8132, 0x4ee: 0x8132, 0x4ef: 0x8132, - 0x4f0: 0x8132, 0x4f1: 0x8132, 0x4f2: 0x8132, 0x4f3: 0x8132, 0x4f4: 0x8132, 0x4f5: 0x8132, - 0x4f6: 0x8133, 0x4f7: 0x8131, 0x4f8: 0x8131, 0x4f9: 0x812d, 0x4fb: 0x8132, - 0x4fc: 0x8134, 0x4fd: 0x812d, 0x4fe: 0x8132, 0x4ff: 0x812d, - // Block 0x14, offset 0x500 - 0x500: 0x2f97, 0x501: 0x32a3, 0x502: 0x2fa1, 0x503: 0x32ad, 0x504: 0x2fa6, 0x505: 0x32b2, - 0x506: 0x2fab, 0x507: 0x32b7, 0x508: 0x38cc, 0x509: 0x3a5b, 0x50a: 0x2fc4, 0x50b: 0x32d0, - 0x50c: 0x2fce, 0x50d: 0x32da, 0x50e: 0x2fdd, 0x50f: 0x32e9, 0x510: 0x2fd3, 0x511: 0x32df, - 0x512: 0x2fd8, 0x513: 0x32e4, 0x514: 0x38ef, 0x515: 0x3a7e, 0x516: 0x38f6, 0x517: 0x3a85, - 0x518: 0x3019, 0x519: 0x3325, 0x51a: 0x301e, 0x51b: 0x332a, 0x51c: 0x3904, 0x51d: 0x3a93, - 0x51e: 0x3023, 0x51f: 0x332f, 0x520: 0x3032, 0x521: 0x333e, 0x522: 0x3050, 0x523: 0x335c, - 0x524: 0x305f, 0x525: 0x336b, 0x526: 0x3055, 0x527: 0x3361, 0x528: 0x3064, 0x529: 0x3370, - 0x52a: 0x3069, 0x52b: 0x3375, 0x52c: 0x30af, 0x52d: 0x33bb, 0x52e: 0x390b, 0x52f: 0x3a9a, - 0x530: 0x30b9, 0x531: 0x33ca, 0x532: 0x30c3, 0x533: 0x33d4, 0x534: 0x30cd, 0x535: 0x33de, - 0x536: 0x46c4, 0x537: 0x4755, 0x538: 0x3912, 0x539: 0x3aa1, 0x53a: 0x30e6, 0x53b: 0x33f7, - 0x53c: 0x30e1, 0x53d: 0x33f2, 0x53e: 0x30eb, 0x53f: 0x33fc, - // Block 0x15, offset 0x540 - 0x540: 0x30f0, 0x541: 0x3401, 0x542: 0x30f5, 0x543: 0x3406, 0x544: 0x3109, 0x545: 0x341a, - 0x546: 0x3113, 0x547: 0x3424, 0x548: 0x3122, 0x549: 0x3433, 0x54a: 0x311d, 0x54b: 0x342e, - 0x54c: 0x3935, 0x54d: 0x3ac4, 0x54e: 0x3943, 0x54f: 0x3ad2, 0x550: 0x394a, 0x551: 0x3ad9, - 0x552: 0x3951, 0x553: 0x3ae0, 0x554: 0x314f, 0x555: 0x3460, 0x556: 0x3154, 0x557: 0x3465, - 0x558: 0x315e, 0x559: 0x346f, 0x55a: 0x46f1, 0x55b: 0x4782, 0x55c: 0x3997, 0x55d: 0x3b26, - 0x55e: 0x3177, 0x55f: 0x3488, 0x560: 0x3181, 0x561: 0x3492, 0x562: 0x4700, 0x563: 0x4791, - 0x564: 0x399e, 0x565: 0x3b2d, 0x566: 0x39a5, 0x567: 0x3b34, 0x568: 0x39ac, 0x569: 0x3b3b, - 0x56a: 0x3190, 0x56b: 0x34a1, 0x56c: 0x319a, 0x56d: 0x34b0, 0x56e: 0x31ae, 0x56f: 0x34c4, - 0x570: 0x31a9, 0x571: 0x34bf, 0x572: 0x31ea, 0x573: 0x3500, 0x574: 0x31f9, 0x575: 0x350f, - 0x576: 0x31f4, 0x577: 0x350a, 0x578: 0x39b3, 0x579: 0x3b42, 0x57a: 0x39ba, 0x57b: 0x3b49, - 0x57c: 0x31fe, 0x57d: 0x3514, 0x57e: 0x3203, 0x57f: 0x3519, - // Block 0x16, offset 0x580 - 0x580: 0x3208, 0x581: 0x351e, 0x582: 0x320d, 0x583: 0x3523, 0x584: 0x321c, 0x585: 0x3532, - 0x586: 0x3217, 0x587: 0x352d, 0x588: 0x3221, 0x589: 0x353c, 0x58a: 0x3226, 0x58b: 0x3541, - 0x58c: 0x322b, 0x58d: 0x3546, 0x58e: 0x3249, 0x58f: 0x3564, 0x590: 0x3262, 0x591: 0x3582, - 0x592: 0x3271, 0x593: 0x3591, 0x594: 0x3276, 0x595: 0x3596, 0x596: 0x337a, 0x597: 0x34a6, - 0x598: 0x3537, 0x599: 0x3573, 0x59a: 0x1be0, 0x59b: 0x42d7, - 0x5a0: 0x46a1, 0x5a1: 0x4732, 0x5a2: 0x2f83, 0x5a3: 0x328f, - 0x5a4: 0x3878, 0x5a5: 0x3a07, 0x5a6: 0x3871, 0x5a7: 0x3a00, 0x5a8: 0x3886, 0x5a9: 0x3a15, - 0x5aa: 0x387f, 0x5ab: 0x3a0e, 0x5ac: 0x38be, 0x5ad: 0x3a4d, 0x5ae: 0x3894, 0x5af: 0x3a23, - 0x5b0: 0x388d, 0x5b1: 0x3a1c, 0x5b2: 0x38a2, 0x5b3: 0x3a31, 0x5b4: 0x389b, 0x5b5: 0x3a2a, - 0x5b6: 0x38c5, 0x5b7: 0x3a54, 0x5b8: 0x46b5, 0x5b9: 0x4746, 0x5ba: 0x3000, 0x5bb: 0x330c, - 0x5bc: 0x2fec, 0x5bd: 0x32f8, 0x5be: 0x38da, 0x5bf: 0x3a69, - // Block 0x17, offset 0x5c0 - 0x5c0: 0x38d3, 0x5c1: 0x3a62, 0x5c2: 0x38e8, 0x5c3: 0x3a77, 0x5c4: 0x38e1, 0x5c5: 0x3a70, - 0x5c6: 0x38fd, 0x5c7: 0x3a8c, 0x5c8: 0x3091, 0x5c9: 0x339d, 0x5ca: 0x30a5, 0x5cb: 0x33b1, - 0x5cc: 0x46e7, 0x5cd: 0x4778, 0x5ce: 0x3136, 0x5cf: 0x3447, 0x5d0: 0x3920, 0x5d1: 0x3aaf, - 0x5d2: 0x3919, 0x5d3: 0x3aa8, 0x5d4: 0x392e, 0x5d5: 0x3abd, 0x5d6: 0x3927, 0x5d7: 0x3ab6, - 0x5d8: 0x3989, 0x5d9: 0x3b18, 0x5da: 0x396d, 0x5db: 0x3afc, 0x5dc: 0x3966, 0x5dd: 0x3af5, - 0x5de: 0x397b, 0x5df: 0x3b0a, 0x5e0: 0x3974, 0x5e1: 0x3b03, 0x5e2: 0x3982, 0x5e3: 0x3b11, - 0x5e4: 0x31e5, 0x5e5: 0x34fb, 0x5e6: 0x31c7, 0x5e7: 0x34dd, 0x5e8: 0x39e4, 0x5e9: 0x3b73, - 0x5ea: 0x39dd, 0x5eb: 0x3b6c, 0x5ec: 0x39f2, 0x5ed: 0x3b81, 0x5ee: 0x39eb, 0x5ef: 0x3b7a, - 0x5f0: 0x39f9, 0x5f1: 0x3b88, 0x5f2: 0x3230, 0x5f3: 0x354b, 0x5f4: 0x3258, 0x5f5: 0x3578, - 0x5f6: 0x3253, 0x5f7: 0x356e, 0x5f8: 0x323f, 0x5f9: 0x355a, - // Block 0x18, offset 0x600 - 0x600: 0x4804, 0x601: 0x480a, 0x602: 0x491e, 0x603: 0x4936, 0x604: 0x4926, 0x605: 0x493e, - 0x606: 0x492e, 0x607: 0x4946, 0x608: 0x47aa, 0x609: 0x47b0, 0x60a: 0x488e, 0x60b: 0x48a6, - 0x60c: 0x4896, 0x60d: 0x48ae, 0x60e: 0x489e, 0x60f: 0x48b6, 0x610: 0x4816, 0x611: 0x481c, - 0x612: 0x3db8, 0x613: 0x3dc8, 0x614: 0x3dc0, 0x615: 0x3dd0, - 0x618: 0x47b6, 0x619: 0x47bc, 0x61a: 0x3ce8, 0x61b: 0x3cf8, 0x61c: 0x3cf0, 0x61d: 0x3d00, - 0x620: 0x482e, 0x621: 0x4834, 0x622: 0x494e, 0x623: 0x4966, - 0x624: 0x4956, 0x625: 0x496e, 0x626: 0x495e, 0x627: 0x4976, 0x628: 0x47c2, 0x629: 0x47c8, - 0x62a: 0x48be, 0x62b: 0x48d6, 0x62c: 0x48c6, 0x62d: 0x48de, 0x62e: 0x48ce, 0x62f: 0x48e6, - 0x630: 0x4846, 0x631: 0x484c, 0x632: 0x3e18, 0x633: 0x3e30, 0x634: 0x3e20, 0x635: 0x3e38, - 0x636: 0x3e28, 0x637: 0x3e40, 0x638: 0x47ce, 0x639: 0x47d4, 0x63a: 0x3d18, 0x63b: 0x3d30, - 0x63c: 0x3d20, 0x63d: 0x3d38, 0x63e: 0x3d28, 0x63f: 0x3d40, - // Block 0x19, offset 0x640 - 0x640: 0x4852, 0x641: 0x4858, 0x642: 0x3e48, 0x643: 0x3e58, 0x644: 0x3e50, 0x645: 0x3e60, - 0x648: 0x47da, 0x649: 0x47e0, 0x64a: 0x3d48, 0x64b: 0x3d58, - 0x64c: 0x3d50, 0x64d: 0x3d60, 0x650: 0x4864, 0x651: 0x486a, - 0x652: 0x3e80, 0x653: 0x3e98, 0x654: 0x3e88, 0x655: 0x3ea0, 0x656: 0x3e90, 0x657: 0x3ea8, - 0x659: 0x47e6, 0x65b: 0x3d68, 0x65d: 0x3d70, - 0x65f: 0x3d78, 0x660: 0x487c, 0x661: 0x4882, 0x662: 0x497e, 0x663: 0x4996, - 0x664: 0x4986, 0x665: 0x499e, 0x666: 0x498e, 0x667: 0x49a6, 0x668: 0x47ec, 0x669: 0x47f2, - 0x66a: 0x48ee, 0x66b: 0x4906, 0x66c: 0x48f6, 0x66d: 0x490e, 0x66e: 0x48fe, 0x66f: 0x4916, - 0x670: 0x47f8, 0x671: 0x431e, 0x672: 0x3691, 0x673: 0x4324, 0x674: 0x4822, 0x675: 0x432a, - 0x676: 0x36a3, 0x677: 0x4330, 0x678: 0x36c1, 0x679: 0x4336, 0x67a: 0x36d9, 0x67b: 0x433c, - 0x67c: 0x4870, 0x67d: 0x4342, - // Block 0x1a, offset 0x680 - 0x680: 0x3da0, 0x681: 0x3da8, 0x682: 0x4184, 0x683: 0x41a2, 0x684: 0x418e, 0x685: 0x41ac, - 0x686: 0x4198, 0x687: 0x41b6, 0x688: 0x3cd8, 0x689: 0x3ce0, 0x68a: 0x40d0, 0x68b: 0x40ee, - 0x68c: 0x40da, 0x68d: 0x40f8, 0x68e: 0x40e4, 0x68f: 0x4102, 0x690: 0x3de8, 0x691: 0x3df0, - 0x692: 0x41c0, 0x693: 0x41de, 0x694: 0x41ca, 0x695: 0x41e8, 0x696: 0x41d4, 0x697: 0x41f2, - 0x698: 0x3d08, 0x699: 0x3d10, 0x69a: 0x410c, 0x69b: 0x412a, 0x69c: 0x4116, 0x69d: 0x4134, - 0x69e: 0x4120, 0x69f: 0x413e, 0x6a0: 0x3ec0, 0x6a1: 0x3ec8, 0x6a2: 0x41fc, 0x6a3: 0x421a, - 0x6a4: 0x4206, 0x6a5: 0x4224, 0x6a6: 0x4210, 0x6a7: 0x422e, 0x6a8: 0x3d80, 0x6a9: 0x3d88, - 0x6aa: 0x4148, 0x6ab: 0x4166, 0x6ac: 0x4152, 0x6ad: 0x4170, 0x6ae: 0x415c, 0x6af: 0x417a, - 0x6b0: 0x3685, 0x6b1: 0x367f, 0x6b2: 0x3d90, 0x6b3: 0x368b, 0x6b4: 0x3d98, - 0x6b6: 0x4810, 0x6b7: 0x3db0, 0x6b8: 0x35f5, 0x6b9: 0x35ef, 0x6ba: 0x35e3, 0x6bb: 0x42ee, - 0x6bc: 0x35fb, 0x6bd: 0x4287, 0x6be: 0x01d3, 0x6bf: 0x4287, - // Block 0x1b, offset 0x6c0 - 0x6c0: 0x42a0, 0x6c1: 0x4482, 0x6c2: 0x3dd8, 0x6c3: 0x369d, 0x6c4: 0x3de0, - 0x6c6: 0x483a, 0x6c7: 0x3df8, 0x6c8: 0x3601, 0x6c9: 0x42f4, 0x6ca: 0x360d, 0x6cb: 0x42fa, - 0x6cc: 0x3619, 0x6cd: 0x4489, 0x6ce: 0x4490, 0x6cf: 0x4497, 0x6d0: 0x36b5, 0x6d1: 0x36af, - 0x6d2: 0x3e00, 0x6d3: 0x44e4, 0x6d6: 0x36bb, 0x6d7: 0x3e10, - 0x6d8: 0x3631, 0x6d9: 0x362b, 0x6da: 0x361f, 0x6db: 0x4300, 0x6dd: 0x449e, - 0x6de: 0x44a5, 0x6df: 0x44ac, 0x6e0: 0x36eb, 0x6e1: 0x36e5, 0x6e2: 0x3e68, 0x6e3: 0x44ec, - 0x6e4: 0x36cd, 0x6e5: 0x36d3, 0x6e6: 0x36f1, 0x6e7: 0x3e78, 0x6e8: 0x3661, 0x6e9: 0x365b, - 0x6ea: 0x364f, 0x6eb: 0x430c, 0x6ec: 0x3649, 0x6ed: 0x4474, 0x6ee: 0x447b, 0x6ef: 0x0081, - 0x6f2: 0x3eb0, 0x6f3: 0x36f7, 0x6f4: 0x3eb8, - 0x6f6: 0x4888, 0x6f7: 0x3ed0, 0x6f8: 0x363d, 0x6f9: 0x4306, 0x6fa: 0x366d, 0x6fb: 0x4318, - 0x6fc: 0x3679, 0x6fd: 0x425a, 0x6fe: 0x428c, - // Block 0x1c, offset 0x700 - 0x700: 0x1bd8, 0x701: 0x1bdc, 0x702: 0x0047, 0x703: 0x1c54, 0x705: 0x1be8, - 0x706: 0x1bec, 0x707: 0x00e9, 0x709: 0x1c58, 0x70a: 0x008f, 0x70b: 0x0051, - 0x70c: 0x0051, 0x70d: 0x0051, 0x70e: 0x0091, 0x70f: 0x00da, 0x710: 0x0053, 0x711: 0x0053, - 0x712: 0x0059, 0x713: 0x0099, 0x715: 0x005d, 0x716: 0x198d, - 0x719: 0x0061, 0x71a: 0x0063, 0x71b: 0x0065, 0x71c: 0x0065, 0x71d: 0x0065, - 0x720: 0x199f, 0x721: 0x1bc8, 0x722: 0x19a8, - 0x724: 0x0075, 0x726: 0x01b8, 0x728: 0x0075, - 0x72a: 0x0057, 0x72b: 0x42d2, 0x72c: 0x0045, 0x72d: 0x0047, 0x72f: 0x008b, - 0x730: 0x004b, 0x731: 0x004d, 0x733: 0x005b, 0x734: 0x009f, 0x735: 0x0215, - 0x736: 0x0218, 0x737: 0x021b, 0x738: 0x021e, 0x739: 0x0093, 0x73b: 0x1b98, - 0x73c: 0x01e8, 0x73d: 0x01c1, 0x73e: 0x0179, 0x73f: 0x01a0, - // Block 0x1d, offset 0x740 - 0x740: 0x0463, 0x745: 0x0049, - 0x746: 0x0089, 0x747: 0x008b, 0x748: 0x0093, 0x749: 0x0095, - 0x750: 0x222e, 0x751: 0x223a, - 0x752: 0x22ee, 0x753: 0x2216, 0x754: 0x229a, 0x755: 0x2222, 0x756: 0x22a0, 0x757: 0x22b8, - 0x758: 0x22c4, 0x759: 0x2228, 0x75a: 0x22ca, 0x75b: 0x2234, 0x75c: 0x22be, 0x75d: 0x22d0, - 0x75e: 0x22d6, 0x75f: 0x1cbc, 0x760: 0x0053, 0x761: 0x195a, 0x762: 0x1ba4, 0x763: 0x1963, - 0x764: 0x006d, 0x765: 0x19ab, 0x766: 0x1bd0, 0x767: 0x1d48, 0x768: 0x1966, 0x769: 0x0071, - 0x76a: 0x19b7, 0x76b: 0x1bd4, 0x76c: 0x0059, 0x76d: 0x0047, 0x76e: 0x0049, 0x76f: 0x005b, - 0x770: 0x0093, 0x771: 0x19e4, 0x772: 0x1c18, 0x773: 0x19ed, 0x774: 0x00ad, 0x775: 0x1a62, - 0x776: 0x1c4c, 0x777: 0x1d5c, 0x778: 0x19f0, 0x779: 0x00b1, 0x77a: 0x1a65, 0x77b: 0x1c50, - 0x77c: 0x0099, 0x77d: 0x0087, 0x77e: 0x0089, 0x77f: 0x009b, - // Block 0x1e, offset 0x780 - 0x781: 0x3c06, 0x783: 0xa000, 0x784: 0x3c0d, 0x785: 0xa000, - 0x787: 0x3c14, 0x788: 0xa000, 0x789: 0x3c1b, - 0x78d: 0xa000, - 0x7a0: 0x2f65, 0x7a1: 0xa000, 0x7a2: 0x3c29, - 0x7a4: 0xa000, 0x7a5: 0xa000, - 0x7ad: 0x3c22, 0x7ae: 0x2f60, 0x7af: 0x2f6a, - 0x7b0: 0x3c30, 0x7b1: 0x3c37, 0x7b2: 0xa000, 0x7b3: 0xa000, 0x7b4: 0x3c3e, 0x7b5: 0x3c45, - 0x7b6: 0xa000, 0x7b7: 0xa000, 0x7b8: 0x3c4c, 0x7b9: 0x3c53, 0x7ba: 0xa000, 0x7bb: 0xa000, - 0x7bc: 0xa000, 0x7bd: 0xa000, - // Block 0x1f, offset 0x7c0 - 0x7c0: 0x3c5a, 0x7c1: 0x3c61, 0x7c2: 0xa000, 0x7c3: 0xa000, 0x7c4: 0x3c76, 0x7c5: 0x3c7d, - 0x7c6: 0xa000, 0x7c7: 0xa000, 0x7c8: 0x3c84, 0x7c9: 0x3c8b, - 0x7d1: 0xa000, - 0x7d2: 0xa000, - 0x7e2: 0xa000, - 0x7e8: 0xa000, 0x7e9: 0xa000, - 0x7eb: 0xa000, 0x7ec: 0x3ca0, 0x7ed: 0x3ca7, 0x7ee: 0x3cae, 0x7ef: 0x3cb5, - 0x7f2: 0xa000, 0x7f3: 0xa000, 0x7f4: 0xa000, 0x7f5: 0xa000, - // Block 0x20, offset 0x800 - 0x820: 0x0023, 0x821: 0x0025, 0x822: 0x0027, 0x823: 0x0029, - 0x824: 0x002b, 0x825: 0x002d, 0x826: 0x002f, 0x827: 0x0031, 0x828: 0x0033, 0x829: 0x1882, - 0x82a: 0x1885, 0x82b: 0x1888, 0x82c: 0x188b, 0x82d: 0x188e, 0x82e: 0x1891, 0x82f: 0x1894, - 0x830: 0x1897, 0x831: 0x189a, 0x832: 0x189d, 0x833: 0x18a6, 0x834: 0x1a68, 0x835: 0x1a6c, - 0x836: 0x1a70, 0x837: 0x1a74, 0x838: 0x1a78, 0x839: 0x1a7c, 0x83a: 0x1a80, 0x83b: 0x1a84, - 0x83c: 0x1a88, 0x83d: 0x1c80, 0x83e: 0x1c85, 0x83f: 0x1c8a, - // Block 0x21, offset 0x840 - 0x840: 0x1c8f, 0x841: 0x1c94, 0x842: 0x1c99, 0x843: 0x1c9e, 0x844: 0x1ca3, 0x845: 0x1ca8, - 0x846: 0x1cad, 0x847: 0x1cb2, 0x848: 0x187f, 0x849: 0x18a3, 0x84a: 0x18c7, 0x84b: 0x18eb, - 0x84c: 0x190f, 0x84d: 0x1918, 0x84e: 0x191e, 0x84f: 0x1924, 0x850: 0x192a, 0x851: 0x1b60, - 0x852: 0x1b64, 0x853: 0x1b68, 0x854: 0x1b6c, 0x855: 0x1b70, 0x856: 0x1b74, 0x857: 0x1b78, - 0x858: 0x1b7c, 0x859: 0x1b80, 0x85a: 0x1b84, 0x85b: 0x1b88, 0x85c: 0x1af4, 0x85d: 0x1af8, - 0x85e: 0x1afc, 0x85f: 0x1b00, 0x860: 0x1b04, 0x861: 0x1b08, 0x862: 0x1b0c, 0x863: 0x1b10, - 0x864: 0x1b14, 0x865: 0x1b18, 0x866: 0x1b1c, 0x867: 0x1b20, 0x868: 0x1b24, 0x869: 0x1b28, - 0x86a: 0x1b2c, 0x86b: 0x1b30, 0x86c: 0x1b34, 0x86d: 0x1b38, 0x86e: 0x1b3c, 0x86f: 0x1b40, - 0x870: 0x1b44, 0x871: 0x1b48, 0x872: 0x1b4c, 0x873: 0x1b50, 0x874: 0x1b54, 0x875: 0x1b58, - 0x876: 0x0043, 0x877: 0x0045, 0x878: 0x0047, 0x879: 0x0049, 0x87a: 0x004b, 0x87b: 0x004d, - 0x87c: 0x004f, 0x87d: 0x0051, 0x87e: 0x0053, 0x87f: 0x0055, - // Block 0x22, offset 0x880 - 0x880: 0x06bf, 0x881: 0x06e3, 0x882: 0x06ef, 0x883: 0x06ff, 0x884: 0x0707, 0x885: 0x0713, - 0x886: 0x071b, 0x887: 0x0723, 0x888: 0x072f, 0x889: 0x0783, 0x88a: 0x079b, 0x88b: 0x07ab, - 0x88c: 0x07bb, 0x88d: 0x07cb, 0x88e: 0x07db, 0x88f: 0x07fb, 0x890: 0x07ff, 0x891: 0x0803, - 0x892: 0x0837, 0x893: 0x085f, 0x894: 0x086f, 0x895: 0x0877, 0x896: 0x087b, 0x897: 0x0887, - 0x898: 0x08a3, 0x899: 0x08a7, 0x89a: 0x08bf, 0x89b: 0x08c3, 0x89c: 0x08cb, 0x89d: 0x08db, - 0x89e: 0x0977, 0x89f: 0x098b, 0x8a0: 0x09cb, 0x8a1: 0x09df, 0x8a2: 0x09e7, 0x8a3: 0x09eb, - 0x8a4: 0x09fb, 0x8a5: 0x0a17, 0x8a6: 0x0a43, 0x8a7: 0x0a4f, 0x8a8: 0x0a6f, 0x8a9: 0x0a7b, - 0x8aa: 0x0a7f, 0x8ab: 0x0a83, 0x8ac: 0x0a9b, 0x8ad: 0x0a9f, 0x8ae: 0x0acb, 0x8af: 0x0ad7, - 0x8b0: 0x0adf, 0x8b1: 0x0ae7, 0x8b2: 0x0af7, 0x8b3: 0x0aff, 0x8b4: 0x0b07, 0x8b5: 0x0b33, - 0x8b6: 0x0b37, 0x8b7: 0x0b3f, 0x8b8: 0x0b43, 0x8b9: 0x0b4b, 0x8ba: 0x0b53, 0x8bb: 0x0b63, - 0x8bc: 0x0b7f, 0x8bd: 0x0bf7, 0x8be: 0x0c0b, 0x8bf: 0x0c0f, - // Block 0x23, offset 0x8c0 - 0x8c0: 0x0c8f, 0x8c1: 0x0c93, 0x8c2: 0x0ca7, 0x8c3: 0x0cab, 0x8c4: 0x0cb3, 0x8c5: 0x0cbb, - 0x8c6: 0x0cc3, 0x8c7: 0x0ccf, 0x8c8: 0x0cf7, 0x8c9: 0x0d07, 0x8ca: 0x0d1b, 0x8cb: 0x0d8b, - 0x8cc: 0x0d97, 0x8cd: 0x0da7, 0x8ce: 0x0db3, 0x8cf: 0x0dbf, 0x8d0: 0x0dc7, 0x8d1: 0x0dcb, - 0x8d2: 0x0dcf, 0x8d3: 0x0dd3, 0x8d4: 0x0dd7, 0x8d5: 0x0e8f, 0x8d6: 0x0ed7, 0x8d7: 0x0ee3, - 0x8d8: 0x0ee7, 0x8d9: 0x0eeb, 0x8da: 0x0eef, 0x8db: 0x0ef7, 0x8dc: 0x0efb, 0x8dd: 0x0f0f, - 0x8de: 0x0f2b, 0x8df: 0x0f33, 0x8e0: 0x0f73, 0x8e1: 0x0f77, 0x8e2: 0x0f7f, 0x8e3: 0x0f83, - 0x8e4: 0x0f8b, 0x8e5: 0x0f8f, 0x8e6: 0x0fb3, 0x8e7: 0x0fb7, 0x8e8: 0x0fd3, 0x8e9: 0x0fd7, - 0x8ea: 0x0fdb, 0x8eb: 0x0fdf, 0x8ec: 0x0ff3, 0x8ed: 0x1017, 0x8ee: 0x101b, 0x8ef: 0x101f, - 0x8f0: 0x1043, 0x8f1: 0x1083, 0x8f2: 0x1087, 0x8f3: 0x10a7, 0x8f4: 0x10b7, 0x8f5: 0x10bf, - 0x8f6: 0x10df, 0x8f7: 0x1103, 0x8f8: 0x1147, 0x8f9: 0x114f, 0x8fa: 0x1163, 0x8fb: 0x116f, - 0x8fc: 0x1177, 0x8fd: 0x117f, 0x8fe: 0x1183, 0x8ff: 0x1187, - // Block 0x24, offset 0x900 - 0x900: 0x119f, 0x901: 0x11a3, 0x902: 0x11bf, 0x903: 0x11c7, 0x904: 0x11cf, 0x905: 0x11d3, - 0x906: 0x11df, 0x907: 0x11e7, 0x908: 0x11eb, 0x909: 0x11ef, 0x90a: 0x11f7, 0x90b: 0x11fb, - 0x90c: 0x129b, 0x90d: 0x12af, 0x90e: 0x12e3, 0x90f: 0x12e7, 0x910: 0x12ef, 0x911: 0x131b, - 0x912: 0x1323, 0x913: 0x132b, 0x914: 0x1333, 0x915: 0x136f, 0x916: 0x1373, 0x917: 0x137b, - 0x918: 0x137f, 0x919: 0x1383, 0x91a: 0x13af, 0x91b: 0x13b3, 0x91c: 0x13bb, 0x91d: 0x13cf, - 0x91e: 0x13d3, 0x91f: 0x13ef, 0x920: 0x13f7, 0x921: 0x13fb, 0x922: 0x141f, 0x923: 0x143f, - 0x924: 0x1453, 0x925: 0x1457, 0x926: 0x145f, 0x927: 0x148b, 0x928: 0x148f, 0x929: 0x149f, - 0x92a: 0x14c3, 0x92b: 0x14cf, 0x92c: 0x14df, 0x92d: 0x14f7, 0x92e: 0x14ff, 0x92f: 0x1503, - 0x930: 0x1507, 0x931: 0x150b, 0x932: 0x1517, 0x933: 0x151b, 0x934: 0x1523, 0x935: 0x153f, - 0x936: 0x1543, 0x937: 0x1547, 0x938: 0x155f, 0x939: 0x1563, 0x93a: 0x156b, 0x93b: 0x157f, - 0x93c: 0x1583, 0x93d: 0x1587, 0x93e: 0x158f, 0x93f: 0x1593, - // Block 0x25, offset 0x940 - 0x946: 0xa000, 0x94b: 0xa000, - 0x94c: 0x3f08, 0x94d: 0xa000, 0x94e: 0x3f10, 0x94f: 0xa000, 0x950: 0x3f18, 0x951: 0xa000, - 0x952: 0x3f20, 0x953: 0xa000, 0x954: 0x3f28, 0x955: 0xa000, 0x956: 0x3f30, 0x957: 0xa000, - 0x958: 0x3f38, 0x959: 0xa000, 0x95a: 0x3f40, 0x95b: 0xa000, 0x95c: 0x3f48, 0x95d: 0xa000, - 0x95e: 0x3f50, 0x95f: 0xa000, 0x960: 0x3f58, 0x961: 0xa000, 0x962: 0x3f60, - 0x964: 0xa000, 0x965: 0x3f68, 0x966: 0xa000, 0x967: 0x3f70, 0x968: 0xa000, 0x969: 0x3f78, - 0x96f: 0xa000, - 0x970: 0x3f80, 0x971: 0x3f88, 0x972: 0xa000, 0x973: 0x3f90, 0x974: 0x3f98, 0x975: 0xa000, - 0x976: 0x3fa0, 0x977: 0x3fa8, 0x978: 0xa000, 0x979: 0x3fb0, 0x97a: 0x3fb8, 0x97b: 0xa000, - 0x97c: 0x3fc0, 0x97d: 0x3fc8, - // Block 0x26, offset 0x980 - 0x994: 0x3f00, - 0x999: 0x9903, 0x99a: 0x9903, 0x99b: 0x42dc, 0x99c: 0x42e2, 0x99d: 0xa000, - 0x99e: 0x3fd0, 0x99f: 0x26b4, - 0x9a6: 0xa000, - 0x9ab: 0xa000, 0x9ac: 0x3fe0, 0x9ad: 0xa000, 0x9ae: 0x3fe8, 0x9af: 0xa000, - 0x9b0: 0x3ff0, 0x9b1: 0xa000, 0x9b2: 0x3ff8, 0x9b3: 0xa000, 0x9b4: 0x4000, 0x9b5: 0xa000, - 0x9b6: 0x4008, 0x9b7: 0xa000, 0x9b8: 0x4010, 0x9b9: 0xa000, 0x9ba: 0x4018, 0x9bb: 0xa000, - 0x9bc: 0x4020, 0x9bd: 0xa000, 0x9be: 0x4028, 0x9bf: 0xa000, - // Block 0x27, offset 0x9c0 - 0x9c0: 0x4030, 0x9c1: 0xa000, 0x9c2: 0x4038, 0x9c4: 0xa000, 0x9c5: 0x4040, - 0x9c6: 0xa000, 0x9c7: 0x4048, 0x9c8: 0xa000, 0x9c9: 0x4050, - 0x9cf: 0xa000, 0x9d0: 0x4058, 0x9d1: 0x4060, - 0x9d2: 0xa000, 0x9d3: 0x4068, 0x9d4: 0x4070, 0x9d5: 0xa000, 0x9d6: 0x4078, 0x9d7: 0x4080, - 0x9d8: 0xa000, 0x9d9: 0x4088, 0x9da: 0x4090, 0x9db: 0xa000, 0x9dc: 0x4098, 0x9dd: 0x40a0, - 0x9ef: 0xa000, - 0x9f0: 0xa000, 0x9f1: 0xa000, 0x9f2: 0xa000, 0x9f4: 0x3fd8, - 0x9f7: 0x40a8, 0x9f8: 0x40b0, 0x9f9: 0x40b8, 0x9fa: 0x40c0, - 0x9fd: 0xa000, 0x9fe: 0x40c8, 0x9ff: 0x26c9, - // Block 0x28, offset 0xa00 - 0xa00: 0x0367, 0xa01: 0x032b, 0xa02: 0x032f, 0xa03: 0x0333, 0xa04: 0x037b, 0xa05: 0x0337, - 0xa06: 0x033b, 0xa07: 0x033f, 0xa08: 0x0343, 0xa09: 0x0347, 0xa0a: 0x034b, 0xa0b: 0x034f, - 0xa0c: 0x0353, 0xa0d: 0x0357, 0xa0e: 0x035b, 0xa0f: 0x49bd, 0xa10: 0x49c3, 0xa11: 0x49c9, - 0xa12: 0x49cf, 0xa13: 0x49d5, 0xa14: 0x49db, 0xa15: 0x49e1, 0xa16: 0x49e7, 0xa17: 0x49ed, - 0xa18: 0x49f3, 0xa19: 0x49f9, 0xa1a: 0x49ff, 0xa1b: 0x4a05, 0xa1c: 0x4a0b, 0xa1d: 0x4a11, - 0xa1e: 0x4a17, 0xa1f: 0x4a1d, 0xa20: 0x4a23, 0xa21: 0x4a29, 0xa22: 0x4a2f, 0xa23: 0x4a35, - 0xa24: 0x03c3, 0xa25: 0x035f, 0xa26: 0x0363, 0xa27: 0x03e7, 0xa28: 0x03eb, 0xa29: 0x03ef, - 0xa2a: 0x03f3, 0xa2b: 0x03f7, 0xa2c: 0x03fb, 0xa2d: 0x03ff, 0xa2e: 0x036b, 0xa2f: 0x0403, - 0xa30: 0x0407, 0xa31: 0x036f, 0xa32: 0x0373, 0xa33: 0x0377, 0xa34: 0x037f, 0xa35: 0x0383, - 0xa36: 0x0387, 0xa37: 0x038b, 0xa38: 0x038f, 0xa39: 0x0393, 0xa3a: 0x0397, 0xa3b: 0x039b, - 0xa3c: 0x039f, 0xa3d: 0x03a3, 0xa3e: 0x03a7, 0xa3f: 0x03ab, - // Block 0x29, offset 0xa40 - 0xa40: 0x03af, 0xa41: 0x03b3, 0xa42: 0x040b, 0xa43: 0x040f, 0xa44: 0x03b7, 0xa45: 0x03bb, - 0xa46: 0x03bf, 0xa47: 0x03c7, 0xa48: 0x03cb, 0xa49: 0x03cf, 0xa4a: 0x03d3, 0xa4b: 0x03d7, - 0xa4c: 0x03db, 0xa4d: 0x03df, 0xa4e: 0x03e3, - 0xa52: 0x06bf, 0xa53: 0x071b, 0xa54: 0x06cb, 0xa55: 0x097b, 0xa56: 0x06cf, 0xa57: 0x06e7, - 0xa58: 0x06d3, 0xa59: 0x0f93, 0xa5a: 0x0707, 0xa5b: 0x06db, 0xa5c: 0x06c3, 0xa5d: 0x09ff, - 0xa5e: 0x098f, 0xa5f: 0x072f, - // Block 0x2a, offset 0xa80 - 0xa80: 0x2054, 0xa81: 0x205a, 0xa82: 0x2060, 0xa83: 0x2066, 0xa84: 0x206c, 0xa85: 0x2072, - 0xa86: 0x2078, 0xa87: 0x207e, 0xa88: 0x2084, 0xa89: 0x208a, 0xa8a: 0x2090, 0xa8b: 0x2096, - 0xa8c: 0x209c, 0xa8d: 0x20a2, 0xa8e: 0x2726, 0xa8f: 0x272f, 0xa90: 0x2738, 0xa91: 0x2741, - 0xa92: 0x274a, 0xa93: 0x2753, 0xa94: 0x275c, 0xa95: 0x2765, 0xa96: 0x276e, 0xa97: 0x2780, - 0xa98: 0x2789, 0xa99: 0x2792, 0xa9a: 0x279b, 0xa9b: 0x27a4, 0xa9c: 0x2777, 0xa9d: 0x2bac, - 0xa9e: 0x2aed, 0xaa0: 0x20a8, 0xaa1: 0x20c0, 0xaa2: 0x20b4, 0xaa3: 0x2108, - 0xaa4: 0x20c6, 0xaa5: 0x20e4, 0xaa6: 0x20ae, 0xaa7: 0x20de, 0xaa8: 0x20ba, 0xaa9: 0x20f0, - 0xaaa: 0x2120, 0xaab: 0x213e, 0xaac: 0x2138, 0xaad: 0x212c, 0xaae: 0x217a, 0xaaf: 0x210e, - 0xab0: 0x211a, 0xab1: 0x2132, 0xab2: 0x2126, 0xab3: 0x2150, 0xab4: 0x20fc, 0xab5: 0x2144, - 0xab6: 0x216e, 0xab7: 0x2156, 0xab8: 0x20ea, 0xab9: 0x20cc, 0xaba: 0x2102, 0xabb: 0x2114, - 0xabc: 0x214a, 0xabd: 0x20d2, 0xabe: 0x2174, 0xabf: 0x20f6, - // Block 0x2b, offset 0xac0 - 0xac0: 0x215c, 0xac1: 0x20d8, 0xac2: 0x2162, 0xac3: 0x2168, 0xac4: 0x092f, 0xac5: 0x0b03, - 0xac6: 0x0ca7, 0xac7: 0x10c7, - 0xad0: 0x1bc4, 0xad1: 0x18a9, - 0xad2: 0x18ac, 0xad3: 0x18af, 0xad4: 0x18b2, 0xad5: 0x18b5, 0xad6: 0x18b8, 0xad7: 0x18bb, - 0xad8: 0x18be, 0xad9: 0x18c1, 0xada: 0x18ca, 0xadb: 0x18cd, 0xadc: 0x18d0, 0xadd: 0x18d3, - 0xade: 0x18d6, 0xadf: 0x18d9, 0xae0: 0x0313, 0xae1: 0x031b, 0xae2: 0x031f, 0xae3: 0x0327, - 0xae4: 0x032b, 0xae5: 0x032f, 0xae6: 0x0337, 0xae7: 0x033f, 0xae8: 0x0343, 0xae9: 0x034b, - 0xaea: 0x034f, 0xaeb: 0x0353, 0xaec: 0x0357, 0xaed: 0x035b, 0xaee: 0x2e18, 0xaef: 0x2e20, - 0xaf0: 0x2e28, 0xaf1: 0x2e30, 0xaf2: 0x2e38, 0xaf3: 0x2e40, 0xaf4: 0x2e48, 0xaf5: 0x2e50, - 0xaf6: 0x2e60, 0xaf7: 0x2e68, 0xaf8: 0x2e70, 0xaf9: 0x2e78, 0xafa: 0x2e80, 0xafb: 0x2e88, - 0xafc: 0x2ed3, 0xafd: 0x2e9b, 0xafe: 0x2e58, - // Block 0x2c, offset 0xb00 - 0xb00: 0x06bf, 0xb01: 0x071b, 0xb02: 0x06cb, 0xb03: 0x097b, 0xb04: 0x071f, 0xb05: 0x07af, - 0xb06: 0x06c7, 0xb07: 0x07ab, 0xb08: 0x070b, 0xb09: 0x0887, 0xb0a: 0x0d07, 0xb0b: 0x0e8f, - 0xb0c: 0x0dd7, 0xb0d: 0x0d1b, 0xb0e: 0x145f, 0xb0f: 0x098b, 0xb10: 0x0ccf, 0xb11: 0x0d4b, - 0xb12: 0x0d0b, 0xb13: 0x104b, 0xb14: 0x08fb, 0xb15: 0x0f03, 0xb16: 0x1387, 0xb17: 0x105f, - 0xb18: 0x0843, 0xb19: 0x108f, 0xb1a: 0x0f9b, 0xb1b: 0x0a17, 0xb1c: 0x140f, 0xb1d: 0x077f, - 0xb1e: 0x08ab, 0xb1f: 0x0df7, 0xb20: 0x1527, 0xb21: 0x0743, 0xb22: 0x07d3, 0xb23: 0x0d9b, - 0xb24: 0x06cf, 0xb25: 0x06e7, 0xb26: 0x06d3, 0xb27: 0x0adb, 0xb28: 0x08ef, 0xb29: 0x087f, - 0xb2a: 0x0a57, 0xb2b: 0x0a4b, 0xb2c: 0x0feb, 0xb2d: 0x073f, 0xb2e: 0x139b, 0xb2f: 0x089b, - 0xb30: 0x09f3, 0xb31: 0x18dc, 0xb32: 0x18df, 0xb33: 0x18e2, 0xb34: 0x18e5, 0xb35: 0x18ee, - 0xb36: 0x18f1, 0xb37: 0x18f4, 0xb38: 0x18f7, 0xb39: 0x18fa, 0xb3a: 0x18fd, 0xb3b: 0x1900, - 0xb3c: 0x1903, 0xb3d: 0x1906, 0xb3e: 0x1909, 0xb3f: 0x1912, - // Block 0x2d, offset 0xb40 - 0xb40: 0x1cc6, 0xb41: 0x1cd5, 0xb42: 0x1ce4, 0xb43: 0x1cf3, 0xb44: 0x1d02, 0xb45: 0x1d11, - 0xb46: 0x1d20, 0xb47: 0x1d2f, 0xb48: 0x1d3e, 0xb49: 0x218c, 0xb4a: 0x219e, 0xb4b: 0x21b0, - 0xb4c: 0x1954, 0xb4d: 0x1c04, 0xb4e: 0x19d2, 0xb4f: 0x1ba8, 0xb50: 0x04cb, 0xb51: 0x04d3, - 0xb52: 0x04db, 0xb53: 0x04e3, 0xb54: 0x04eb, 0xb55: 0x04ef, 0xb56: 0x04f3, 0xb57: 0x04f7, - 0xb58: 0x04fb, 0xb59: 0x04ff, 0xb5a: 0x0503, 0xb5b: 0x0507, 0xb5c: 0x050b, 0xb5d: 0x050f, - 0xb5e: 0x0513, 0xb5f: 0x0517, 0xb60: 0x051b, 0xb61: 0x0523, 0xb62: 0x0527, 0xb63: 0x052b, - 0xb64: 0x052f, 0xb65: 0x0533, 0xb66: 0x0537, 0xb67: 0x053b, 0xb68: 0x053f, 0xb69: 0x0543, - 0xb6a: 0x0547, 0xb6b: 0x054b, 0xb6c: 0x054f, 0xb6d: 0x0553, 0xb6e: 0x0557, 0xb6f: 0x055b, - 0xb70: 0x055f, 0xb71: 0x0563, 0xb72: 0x0567, 0xb73: 0x056f, 0xb74: 0x0577, 0xb75: 0x057f, - 0xb76: 0x0583, 0xb77: 0x0587, 0xb78: 0x058b, 0xb79: 0x058f, 0xb7a: 0x0593, 0xb7b: 0x0597, - 0xb7c: 0x059b, 0xb7d: 0x059f, 0xb7e: 0x05a3, - // Block 0x2e, offset 0xb80 - 0xb80: 0x2b0c, 0xb81: 0x29a8, 0xb82: 0x2b1c, 0xb83: 0x2880, 0xb84: 0x2ee4, 0xb85: 0x288a, - 0xb86: 0x2894, 0xb87: 0x2f28, 0xb88: 0x29b5, 0xb89: 0x289e, 0xb8a: 0x28a8, 0xb8b: 0x28b2, - 0xb8c: 0x29dc, 0xb8d: 0x29e9, 0xb8e: 0x29c2, 0xb8f: 0x29cf, 0xb90: 0x2ea9, 0xb91: 0x29f6, - 0xb92: 0x2a03, 0xb93: 0x2bbe, 0xb94: 0x26bb, 0xb95: 0x2bd1, 0xb96: 0x2be4, 0xb97: 0x2b2c, - 0xb98: 0x2a10, 0xb99: 0x2bf7, 0xb9a: 0x2c0a, 0xb9b: 0x2a1d, 0xb9c: 0x28bc, 0xb9d: 0x28c6, - 0xb9e: 0x2eb7, 0xb9f: 0x2a2a, 0xba0: 0x2b3c, 0xba1: 0x2ef5, 0xba2: 0x28d0, 0xba3: 0x28da, - 0xba4: 0x2a37, 0xba5: 0x28e4, 0xba6: 0x28ee, 0xba7: 0x26d0, 0xba8: 0x26d7, 0xba9: 0x28f8, - 0xbaa: 0x2902, 0xbab: 0x2c1d, 0xbac: 0x2a44, 0xbad: 0x2b4c, 0xbae: 0x2c30, 0xbaf: 0x2a51, - 0xbb0: 0x2916, 0xbb1: 0x290c, 0xbb2: 0x2f3c, 0xbb3: 0x2a5e, 0xbb4: 0x2c43, 0xbb5: 0x2920, - 0xbb6: 0x2b5c, 0xbb7: 0x292a, 0xbb8: 0x2a78, 0xbb9: 0x2934, 0xbba: 0x2a85, 0xbbb: 0x2f06, - 0xbbc: 0x2a6b, 0xbbd: 0x2b6c, 0xbbe: 0x2a92, 0xbbf: 0x26de, - // Block 0x2f, offset 0xbc0 - 0xbc0: 0x2f17, 0xbc1: 0x293e, 0xbc2: 0x2948, 0xbc3: 0x2a9f, 0xbc4: 0x2952, 0xbc5: 0x295c, - 0xbc6: 0x2966, 0xbc7: 0x2b7c, 0xbc8: 0x2aac, 0xbc9: 0x26e5, 0xbca: 0x2c56, 0xbcb: 0x2e90, - 0xbcc: 0x2b8c, 0xbcd: 0x2ab9, 0xbce: 0x2ec5, 0xbcf: 0x2970, 0xbd0: 0x297a, 0xbd1: 0x2ac6, - 0xbd2: 0x26ec, 0xbd3: 0x2ad3, 0xbd4: 0x2b9c, 0xbd5: 0x26f3, 0xbd6: 0x2c69, 0xbd7: 0x2984, - 0xbd8: 0x1cb7, 0xbd9: 0x1ccb, 0xbda: 0x1cda, 0xbdb: 0x1ce9, 0xbdc: 0x1cf8, 0xbdd: 0x1d07, - 0xbde: 0x1d16, 0xbdf: 0x1d25, 0xbe0: 0x1d34, 0xbe1: 0x1d43, 0xbe2: 0x2192, 0xbe3: 0x21a4, - 0xbe4: 0x21b6, 0xbe5: 0x21c2, 0xbe6: 0x21ce, 0xbe7: 0x21da, 0xbe8: 0x21e6, 0xbe9: 0x21f2, - 0xbea: 0x21fe, 0xbeb: 0x220a, 0xbec: 0x2246, 0xbed: 0x2252, 0xbee: 0x225e, 0xbef: 0x226a, - 0xbf0: 0x2276, 0xbf1: 0x1c14, 0xbf2: 0x19c6, 0xbf3: 0x1936, 0xbf4: 0x1be4, 0xbf5: 0x1a47, - 0xbf6: 0x1a56, 0xbf7: 0x19cc, 0xbf8: 0x1bfc, 0xbf9: 0x1c00, 0xbfa: 0x1960, 0xbfb: 0x2701, - 0xbfc: 0x270f, 0xbfd: 0x26fa, 0xbfe: 0x2708, 0xbff: 0x2ae0, - // Block 0x30, offset 0xc00 - 0xc00: 0x1a4a, 0xc01: 0x1a32, 0xc02: 0x1c60, 0xc03: 0x1a1a, 0xc04: 0x19f3, 0xc05: 0x1969, - 0xc06: 0x1978, 0xc07: 0x1948, 0xc08: 0x1bf0, 0xc09: 0x1d52, 0xc0a: 0x1a4d, 0xc0b: 0x1a35, - 0xc0c: 0x1c64, 0xc0d: 0x1c70, 0xc0e: 0x1a26, 0xc0f: 0x19fc, 0xc10: 0x1957, 0xc11: 0x1c1c, - 0xc12: 0x1bb0, 0xc13: 0x1b9c, 0xc14: 0x1bcc, 0xc15: 0x1c74, 0xc16: 0x1a29, 0xc17: 0x19c9, - 0xc18: 0x19ff, 0xc19: 0x19de, 0xc1a: 0x1a41, 0xc1b: 0x1c78, 0xc1c: 0x1a2c, 0xc1d: 0x19c0, - 0xc1e: 0x1a02, 0xc1f: 0x1c3c, 0xc20: 0x1bf4, 0xc21: 0x1a14, 0xc22: 0x1c24, 0xc23: 0x1c40, - 0xc24: 0x1bf8, 0xc25: 0x1a17, 0xc26: 0x1c28, 0xc27: 0x22e8, 0xc28: 0x22fc, 0xc29: 0x1996, - 0xc2a: 0x1c20, 0xc2b: 0x1bb4, 0xc2c: 0x1ba0, 0xc2d: 0x1c48, 0xc2e: 0x2716, 0xc2f: 0x27ad, - 0xc30: 0x1a59, 0xc31: 0x1a44, 0xc32: 0x1c7c, 0xc33: 0x1a2f, 0xc34: 0x1a50, 0xc35: 0x1a38, - 0xc36: 0x1c68, 0xc37: 0x1a1d, 0xc38: 0x19f6, 0xc39: 0x1981, 0xc3a: 0x1a53, 0xc3b: 0x1a3b, - 0xc3c: 0x1c6c, 0xc3d: 0x1a20, 0xc3e: 0x19f9, 0xc3f: 0x1984, - // Block 0x31, offset 0xc40 - 0xc40: 0x1c2c, 0xc41: 0x1bb8, 0xc42: 0x1d4d, 0xc43: 0x1939, 0xc44: 0x19ba, 0xc45: 0x19bd, - 0xc46: 0x22f5, 0xc47: 0x1b94, 0xc48: 0x19c3, 0xc49: 0x194b, 0xc4a: 0x19e1, 0xc4b: 0x194e, - 0xc4c: 0x19ea, 0xc4d: 0x196c, 0xc4e: 0x196f, 0xc4f: 0x1a05, 0xc50: 0x1a0b, 0xc51: 0x1a0e, - 0xc52: 0x1c30, 0xc53: 0x1a11, 0xc54: 0x1a23, 0xc55: 0x1c38, 0xc56: 0x1c44, 0xc57: 0x1990, - 0xc58: 0x1d57, 0xc59: 0x1bbc, 0xc5a: 0x1993, 0xc5b: 0x1a5c, 0xc5c: 0x19a5, 0xc5d: 0x19b4, - 0xc5e: 0x22e2, 0xc5f: 0x22dc, 0xc60: 0x1cc1, 0xc61: 0x1cd0, 0xc62: 0x1cdf, 0xc63: 0x1cee, - 0xc64: 0x1cfd, 0xc65: 0x1d0c, 0xc66: 0x1d1b, 0xc67: 0x1d2a, 0xc68: 0x1d39, 0xc69: 0x2186, - 0xc6a: 0x2198, 0xc6b: 0x21aa, 0xc6c: 0x21bc, 0xc6d: 0x21c8, 0xc6e: 0x21d4, 0xc6f: 0x21e0, - 0xc70: 0x21ec, 0xc71: 0x21f8, 0xc72: 0x2204, 0xc73: 0x2240, 0xc74: 0x224c, 0xc75: 0x2258, - 0xc76: 0x2264, 0xc77: 0x2270, 0xc78: 0x227c, 0xc79: 0x2282, 0xc7a: 0x2288, 0xc7b: 0x228e, - 0xc7c: 0x2294, 0xc7d: 0x22a6, 0xc7e: 0x22ac, 0xc7f: 0x1c10, - // Block 0x32, offset 0xc80 - 0xc80: 0x1377, 0xc81: 0x0cfb, 0xc82: 0x13d3, 0xc83: 0x139f, 0xc84: 0x0e57, 0xc85: 0x06eb, - 0xc86: 0x08df, 0xc87: 0x162b, 0xc88: 0x162b, 0xc89: 0x0a0b, 0xc8a: 0x145f, 0xc8b: 0x0943, - 0xc8c: 0x0a07, 0xc8d: 0x0bef, 0xc8e: 0x0fcf, 0xc8f: 0x115f, 0xc90: 0x1297, 0xc91: 0x12d3, - 0xc92: 0x1307, 0xc93: 0x141b, 0xc94: 0x0d73, 0xc95: 0x0dff, 0xc96: 0x0eab, 0xc97: 0x0f43, - 0xc98: 0x125f, 0xc99: 0x1447, 0xc9a: 0x1573, 0xc9b: 0x070f, 0xc9c: 0x08b3, 0xc9d: 0x0d87, - 0xc9e: 0x0ecf, 0xc9f: 0x1293, 0xca0: 0x15c3, 0xca1: 0x0ab3, 0xca2: 0x0e77, 0xca3: 0x1283, - 0xca4: 0x1317, 0xca5: 0x0c23, 0xca6: 0x11bb, 0xca7: 0x12df, 0xca8: 0x0b1f, 0xca9: 0x0d0f, - 0xcaa: 0x0e17, 0xcab: 0x0f1b, 0xcac: 0x1427, 0xcad: 0x074f, 0xcae: 0x07e7, 0xcaf: 0x0853, - 0xcb0: 0x0c8b, 0xcb1: 0x0d7f, 0xcb2: 0x0ecb, 0xcb3: 0x0fef, 0xcb4: 0x1177, 0xcb5: 0x128b, - 0xcb6: 0x12a3, 0xcb7: 0x13c7, 0xcb8: 0x14ef, 0xcb9: 0x15a3, 0xcba: 0x15bf, 0xcbb: 0x102b, - 0xcbc: 0x106b, 0xcbd: 0x1123, 0xcbe: 0x1243, 0xcbf: 0x147b, - // Block 0x33, offset 0xcc0 - 0xcc0: 0x15cb, 0xcc1: 0x134b, 0xcc2: 0x09c7, 0xcc3: 0x0b3b, 0xcc4: 0x10db, 0xcc5: 0x119b, - 0xcc6: 0x0eff, 0xcc7: 0x1033, 0xcc8: 0x1397, 0xcc9: 0x14e7, 0xcca: 0x09c3, 0xccb: 0x0a8f, - 0xccc: 0x0d77, 0xccd: 0x0e2b, 0xcce: 0x0e5f, 0xccf: 0x1113, 0xcd0: 0x113b, 0xcd1: 0x14a7, - 0xcd2: 0x084f, 0xcd3: 0x11a7, 0xcd4: 0x07f3, 0xcd5: 0x07ef, 0xcd6: 0x1097, 0xcd7: 0x1127, - 0xcd8: 0x125b, 0xcd9: 0x14af, 0xcda: 0x1367, 0xcdb: 0x0c27, 0xcdc: 0x0d73, 0xcdd: 0x1357, - 0xcde: 0x06f7, 0xcdf: 0x0a63, 0xce0: 0x0b93, 0xce1: 0x0f2f, 0xce2: 0x0faf, 0xce3: 0x0873, - 0xce4: 0x103b, 0xce5: 0x075f, 0xce6: 0x0b77, 0xce7: 0x06d7, 0xce8: 0x0deb, 0xce9: 0x0ca3, - 0xcea: 0x110f, 0xceb: 0x08c7, 0xcec: 0x09b3, 0xced: 0x0ffb, 0xcee: 0x1263, 0xcef: 0x133b, - 0xcf0: 0x0db7, 0xcf1: 0x13f7, 0xcf2: 0x0de3, 0xcf3: 0x0c37, 0xcf4: 0x121b, 0xcf5: 0x0c57, - 0xcf6: 0x0fab, 0xcf7: 0x072b, 0xcf8: 0x07a7, 0xcf9: 0x07eb, 0xcfa: 0x0d53, 0xcfb: 0x10fb, - 0xcfc: 0x11f3, 0xcfd: 0x1347, 0xcfe: 0x145b, 0xcff: 0x085b, - // Block 0x34, offset 0xd00 - 0xd00: 0x090f, 0xd01: 0x0a17, 0xd02: 0x0b2f, 0xd03: 0x0cbf, 0xd04: 0x0e7b, 0xd05: 0x103f, - 0xd06: 0x1497, 0xd07: 0x157b, 0xd08: 0x15cf, 0xd09: 0x15e7, 0xd0a: 0x0837, 0xd0b: 0x0cf3, - 0xd0c: 0x0da3, 0xd0d: 0x13eb, 0xd0e: 0x0afb, 0xd0f: 0x0bd7, 0xd10: 0x0bf3, 0xd11: 0x0c83, - 0xd12: 0x0e6b, 0xd13: 0x0eb7, 0xd14: 0x0f67, 0xd15: 0x108b, 0xd16: 0x112f, 0xd17: 0x1193, - 0xd18: 0x13db, 0xd19: 0x126b, 0xd1a: 0x1403, 0xd1b: 0x147f, 0xd1c: 0x080f, 0xd1d: 0x083b, - 0xd1e: 0x0923, 0xd1f: 0x0ea7, 0xd20: 0x12f3, 0xd21: 0x133b, 0xd22: 0x0b1b, 0xd23: 0x0b8b, - 0xd24: 0x0c4f, 0xd25: 0x0daf, 0xd26: 0x10d7, 0xd27: 0x0f23, 0xd28: 0x073b, 0xd29: 0x097f, - 0xd2a: 0x0a63, 0xd2b: 0x0ac7, 0xd2c: 0x0b97, 0xd2d: 0x0f3f, 0xd2e: 0x0f5b, 0xd2f: 0x116b, - 0xd30: 0x118b, 0xd31: 0x1463, 0xd32: 0x14e3, 0xd33: 0x14f3, 0xd34: 0x152f, 0xd35: 0x0753, - 0xd36: 0x107f, 0xd37: 0x144f, 0xd38: 0x14cb, 0xd39: 0x0baf, 0xd3a: 0x0717, 0xd3b: 0x0777, - 0xd3c: 0x0a67, 0xd3d: 0x0a87, 0xd3e: 0x0caf, 0xd3f: 0x0d73, - // Block 0x35, offset 0xd40 - 0xd40: 0x0ec3, 0xd41: 0x0fcb, 0xd42: 0x1277, 0xd43: 0x1417, 0xd44: 0x1623, 0xd45: 0x0ce3, - 0xd46: 0x14a3, 0xd47: 0x0833, 0xd48: 0x0d2f, 0xd49: 0x0d3b, 0xd4a: 0x0e0f, 0xd4b: 0x0e47, - 0xd4c: 0x0f4b, 0xd4d: 0x0fa7, 0xd4e: 0x1027, 0xd4f: 0x110b, 0xd50: 0x153b, 0xd51: 0x07af, - 0xd52: 0x0c03, 0xd53: 0x14b3, 0xd54: 0x0767, 0xd55: 0x0aab, 0xd56: 0x0e2f, 0xd57: 0x13df, - 0xd58: 0x0b67, 0xd59: 0x0bb7, 0xd5a: 0x0d43, 0xd5b: 0x0f2f, 0xd5c: 0x14bb, 0xd5d: 0x0817, - 0xd5e: 0x08ff, 0xd5f: 0x0a97, 0xd60: 0x0cd3, 0xd61: 0x0d1f, 0xd62: 0x0d5f, 0xd63: 0x0df3, - 0xd64: 0x0f47, 0xd65: 0x0fbb, 0xd66: 0x1157, 0xd67: 0x12f7, 0xd68: 0x1303, 0xd69: 0x1457, - 0xd6a: 0x14d7, 0xd6b: 0x0883, 0xd6c: 0x0e4b, 0xd6d: 0x0903, 0xd6e: 0x0ec7, 0xd6f: 0x0f6b, - 0xd70: 0x1287, 0xd71: 0x14bf, 0xd72: 0x15ab, 0xd73: 0x15d3, 0xd74: 0x0d37, 0xd75: 0x0e27, - 0xd76: 0x11c3, 0xd77: 0x10b7, 0xd78: 0x10c3, 0xd79: 0x10e7, 0xd7a: 0x0f17, 0xd7b: 0x0e9f, - 0xd7c: 0x1363, 0xd7d: 0x0733, 0xd7e: 0x122b, 0xd7f: 0x081b, - // Block 0x36, offset 0xd80 - 0xd80: 0x080b, 0xd81: 0x0b0b, 0xd82: 0x0c2b, 0xd83: 0x10f3, 0xd84: 0x0a53, 0xd85: 0x0e03, - 0xd86: 0x0cef, 0xd87: 0x13e7, 0xd88: 0x12e7, 0xd89: 0x14ab, 0xd8a: 0x1323, 0xd8b: 0x0b27, - 0xd8c: 0x0787, 0xd8d: 0x095b, 0xd90: 0x09af, - 0xd92: 0x0cdf, 0xd95: 0x07f7, 0xd96: 0x0f1f, 0xd97: 0x0fe3, - 0xd98: 0x1047, 0xd99: 0x1063, 0xd9a: 0x1067, 0xd9b: 0x107b, 0xd9c: 0x14fb, 0xd9d: 0x10eb, - 0xd9e: 0x116f, 0xda0: 0x128f, 0xda2: 0x1353, - 0xda5: 0x1407, 0xda6: 0x1433, - 0xdaa: 0x154f, 0xdab: 0x1553, 0xdac: 0x1557, 0xdad: 0x15bb, 0xdae: 0x142b, 0xdaf: 0x14c7, - 0xdb0: 0x0757, 0xdb1: 0x077b, 0xdb2: 0x078f, 0xdb3: 0x084b, 0xdb4: 0x0857, 0xdb5: 0x0897, - 0xdb6: 0x094b, 0xdb7: 0x0967, 0xdb8: 0x096f, 0xdb9: 0x09ab, 0xdba: 0x09b7, 0xdbb: 0x0a93, - 0xdbc: 0x0a9b, 0xdbd: 0x0ba3, 0xdbe: 0x0bcb, 0xdbf: 0x0bd3, - // Block 0x37, offset 0xdc0 - 0xdc0: 0x0beb, 0xdc1: 0x0c97, 0xdc2: 0x0cc7, 0xdc3: 0x0ce7, 0xdc4: 0x0d57, 0xdc5: 0x0e1b, - 0xdc6: 0x0e37, 0xdc7: 0x0e67, 0xdc8: 0x0ebb, 0xdc9: 0x0edb, 0xdca: 0x0f4f, 0xdcb: 0x102f, - 0xdcc: 0x104b, 0xdcd: 0x1053, 0xdce: 0x104f, 0xdcf: 0x1057, 0xdd0: 0x105b, 0xdd1: 0x105f, - 0xdd2: 0x1073, 0xdd3: 0x1077, 0xdd4: 0x109b, 0xdd5: 0x10af, 0xdd6: 0x10cb, 0xdd7: 0x112f, - 0xdd8: 0x1137, 0xdd9: 0x113f, 0xdda: 0x1153, 0xddb: 0x117b, 0xddc: 0x11cb, 0xddd: 0x11ff, - 0xdde: 0x11ff, 0xddf: 0x1267, 0xde0: 0x130f, 0xde1: 0x1327, 0xde2: 0x135b, 0xde3: 0x135f, - 0xde4: 0x13a3, 0xde5: 0x13a7, 0xde6: 0x13ff, 0xde7: 0x1407, 0xde8: 0x14db, 0xde9: 0x151f, - 0xdea: 0x1537, 0xdeb: 0x0b9b, 0xdec: 0x171e, 0xded: 0x11e3, - 0xdf0: 0x06df, 0xdf1: 0x07e3, 0xdf2: 0x07a3, 0xdf3: 0x074b, 0xdf4: 0x078b, 0xdf5: 0x07b7, - 0xdf6: 0x0847, 0xdf7: 0x0863, 0xdf8: 0x094b, 0xdf9: 0x0937, 0xdfa: 0x0947, 0xdfb: 0x0963, - 0xdfc: 0x09af, 0xdfd: 0x09bf, 0xdfe: 0x0a03, 0xdff: 0x0a0f, - // Block 0x38, offset 0xe00 - 0xe00: 0x0a2b, 0xe01: 0x0a3b, 0xe02: 0x0b23, 0xe03: 0x0b2b, 0xe04: 0x0b5b, 0xe05: 0x0b7b, - 0xe06: 0x0bab, 0xe07: 0x0bc3, 0xe08: 0x0bb3, 0xe09: 0x0bd3, 0xe0a: 0x0bc7, 0xe0b: 0x0beb, - 0xe0c: 0x0c07, 0xe0d: 0x0c5f, 0xe0e: 0x0c6b, 0xe0f: 0x0c73, 0xe10: 0x0c9b, 0xe11: 0x0cdf, - 0xe12: 0x0d0f, 0xe13: 0x0d13, 0xe14: 0x0d27, 0xe15: 0x0da7, 0xe16: 0x0db7, 0xe17: 0x0e0f, - 0xe18: 0x0e5b, 0xe19: 0x0e53, 0xe1a: 0x0e67, 0xe1b: 0x0e83, 0xe1c: 0x0ebb, 0xe1d: 0x1013, - 0xe1e: 0x0edf, 0xe1f: 0x0f13, 0xe20: 0x0f1f, 0xe21: 0x0f5f, 0xe22: 0x0f7b, 0xe23: 0x0f9f, - 0xe24: 0x0fc3, 0xe25: 0x0fc7, 0xe26: 0x0fe3, 0xe27: 0x0fe7, 0xe28: 0x0ff7, 0xe29: 0x100b, - 0xe2a: 0x1007, 0xe2b: 0x1037, 0xe2c: 0x10b3, 0xe2d: 0x10cb, 0xe2e: 0x10e3, 0xe2f: 0x111b, - 0xe30: 0x112f, 0xe31: 0x114b, 0xe32: 0x117b, 0xe33: 0x122f, 0xe34: 0x1257, 0xe35: 0x12cb, - 0xe36: 0x1313, 0xe37: 0x131f, 0xe38: 0x1327, 0xe39: 0x133f, 0xe3a: 0x1353, 0xe3b: 0x1343, - 0xe3c: 0x135b, 0xe3d: 0x1357, 0xe3e: 0x134f, 0xe3f: 0x135f, - // Block 0x39, offset 0xe40 - 0xe40: 0x136b, 0xe41: 0x13a7, 0xe42: 0x13e3, 0xe43: 0x1413, 0xe44: 0x144b, 0xe45: 0x146b, - 0xe46: 0x14b7, 0xe47: 0x14db, 0xe48: 0x14fb, 0xe49: 0x150f, 0xe4a: 0x151f, 0xe4b: 0x152b, - 0xe4c: 0x1537, 0xe4d: 0x158b, 0xe4e: 0x162b, 0xe4f: 0x16b5, 0xe50: 0x16b0, 0xe51: 0x16e2, - 0xe52: 0x0607, 0xe53: 0x062f, 0xe54: 0x0633, 0xe55: 0x1764, 0xe56: 0x1791, 0xe57: 0x1809, - 0xe58: 0x1617, 0xe59: 0x1627, - // Block 0x3a, offset 0xe80 - 0xe80: 0x19d5, 0xe81: 0x19d8, 0xe82: 0x19db, 0xe83: 0x1c08, 0xe84: 0x1c0c, 0xe85: 0x1a5f, - 0xe86: 0x1a5f, - 0xe93: 0x1d75, 0xe94: 0x1d66, 0xe95: 0x1d6b, 0xe96: 0x1d7a, 0xe97: 0x1d70, - 0xe9d: 0x4390, - 0xe9e: 0x8115, 0xe9f: 0x4402, 0xea0: 0x022d, 0xea1: 0x0215, 0xea2: 0x021e, 0xea3: 0x0221, - 0xea4: 0x0224, 0xea5: 0x0227, 0xea6: 0x022a, 0xea7: 0x0230, 0xea8: 0x0233, 0xea9: 0x0017, - 0xeaa: 0x43f0, 0xeab: 0x43f6, 0xeac: 0x44f4, 0xead: 0x44fc, 0xeae: 0x4348, 0xeaf: 0x434e, - 0xeb0: 0x4354, 0xeb1: 0x435a, 0xeb2: 0x4366, 0xeb3: 0x436c, 0xeb4: 0x4372, 0xeb5: 0x437e, - 0xeb6: 0x4384, 0xeb8: 0x438a, 0xeb9: 0x4396, 0xeba: 0x439c, 0xebb: 0x43a2, - 0xebc: 0x43ae, 0xebe: 0x43b4, - // Block 0x3b, offset 0xec0 - 0xec0: 0x43ba, 0xec1: 0x43c0, 0xec3: 0x43c6, 0xec4: 0x43cc, - 0xec6: 0x43d8, 0xec7: 0x43de, 0xec8: 0x43e4, 0xec9: 0x43ea, 0xeca: 0x43fc, 0xecb: 0x4378, - 0xecc: 0x4360, 0xecd: 0x43a8, 0xece: 0x43d2, 0xecf: 0x1d7f, 0xed0: 0x0299, 0xed1: 0x0299, - 0xed2: 0x02a2, 0xed3: 0x02a2, 0xed4: 0x02a2, 0xed5: 0x02a2, 0xed6: 0x02a5, 0xed7: 0x02a5, - 0xed8: 0x02a5, 0xed9: 0x02a5, 0xeda: 0x02ab, 0xedb: 0x02ab, 0xedc: 0x02ab, 0xedd: 0x02ab, - 0xede: 0x029f, 0xedf: 0x029f, 0xee0: 0x029f, 0xee1: 0x029f, 0xee2: 0x02a8, 0xee3: 0x02a8, - 0xee4: 0x02a8, 0xee5: 0x02a8, 0xee6: 0x029c, 0xee7: 0x029c, 0xee8: 0x029c, 0xee9: 0x029c, - 0xeea: 0x02cf, 0xeeb: 0x02cf, 0xeec: 0x02cf, 0xeed: 0x02cf, 0xeee: 0x02d2, 0xeef: 0x02d2, - 0xef0: 0x02d2, 0xef1: 0x02d2, 0xef2: 0x02b1, 0xef3: 0x02b1, 0xef4: 0x02b1, 0xef5: 0x02b1, - 0xef6: 0x02ae, 0xef7: 0x02ae, 0xef8: 0x02ae, 0xef9: 0x02ae, 0xefa: 0x02b4, 0xefb: 0x02b4, - 0xefc: 0x02b4, 0xefd: 0x02b4, 0xefe: 0x02b7, 0xeff: 0x02b7, - // Block 0x3c, offset 0xf00 - 0xf00: 0x02b7, 0xf01: 0x02b7, 0xf02: 0x02c0, 0xf03: 0x02c0, 0xf04: 0x02bd, 0xf05: 0x02bd, - 0xf06: 0x02c3, 0xf07: 0x02c3, 0xf08: 0x02ba, 0xf09: 0x02ba, 0xf0a: 0x02c9, 0xf0b: 0x02c9, - 0xf0c: 0x02c6, 0xf0d: 0x02c6, 0xf0e: 0x02d5, 0xf0f: 0x02d5, 0xf10: 0x02d5, 0xf11: 0x02d5, - 0xf12: 0x02db, 0xf13: 0x02db, 0xf14: 0x02db, 0xf15: 0x02db, 0xf16: 0x02e1, 0xf17: 0x02e1, - 0xf18: 0x02e1, 0xf19: 0x02e1, 0xf1a: 0x02de, 0xf1b: 0x02de, 0xf1c: 0x02de, 0xf1d: 0x02de, - 0xf1e: 0x02e4, 0xf1f: 0x02e4, 0xf20: 0x02e7, 0xf21: 0x02e7, 0xf22: 0x02e7, 0xf23: 0x02e7, - 0xf24: 0x446e, 0xf25: 0x446e, 0xf26: 0x02ed, 0xf27: 0x02ed, 0xf28: 0x02ed, 0xf29: 0x02ed, - 0xf2a: 0x02ea, 0xf2b: 0x02ea, 0xf2c: 0x02ea, 0xf2d: 0x02ea, 0xf2e: 0x0308, 0xf2f: 0x0308, - 0xf30: 0x4468, 0xf31: 0x4468, - // Block 0x3d, offset 0xf40 - 0xf53: 0x02d8, 0xf54: 0x02d8, 0xf55: 0x02d8, 0xf56: 0x02d8, 0xf57: 0x02f6, - 0xf58: 0x02f6, 0xf59: 0x02f3, 0xf5a: 0x02f3, 0xf5b: 0x02f9, 0xf5c: 0x02f9, 0xf5d: 0x204f, - 0xf5e: 0x02ff, 0xf5f: 0x02ff, 0xf60: 0x02f0, 0xf61: 0x02f0, 0xf62: 0x02fc, 0xf63: 0x02fc, - 0xf64: 0x0305, 0xf65: 0x0305, 0xf66: 0x0305, 0xf67: 0x0305, 0xf68: 0x028d, 0xf69: 0x028d, - 0xf6a: 0x25aa, 0xf6b: 0x25aa, 0xf6c: 0x261a, 0xf6d: 0x261a, 0xf6e: 0x25e9, 0xf6f: 0x25e9, - 0xf70: 0x2605, 0xf71: 0x2605, 0xf72: 0x25fe, 0xf73: 0x25fe, 0xf74: 0x260c, 0xf75: 0x260c, - 0xf76: 0x2613, 0xf77: 0x2613, 0xf78: 0x2613, 0xf79: 0x25f0, 0xf7a: 0x25f0, 0xf7b: 0x25f0, - 0xf7c: 0x0302, 0xf7d: 0x0302, 0xf7e: 0x0302, 0xf7f: 0x0302, - // Block 0x3e, offset 0xf80 - 0xf80: 0x25b1, 0xf81: 0x25b8, 0xf82: 0x25d4, 0xf83: 0x25f0, 0xf84: 0x25f7, 0xf85: 0x1d89, - 0xf86: 0x1d8e, 0xf87: 0x1d93, 0xf88: 0x1da2, 0xf89: 0x1db1, 0xf8a: 0x1db6, 0xf8b: 0x1dbb, - 0xf8c: 0x1dc0, 0xf8d: 0x1dc5, 0xf8e: 0x1dd4, 0xf8f: 0x1de3, 0xf90: 0x1de8, 0xf91: 0x1ded, - 0xf92: 0x1dfc, 0xf93: 0x1e0b, 0xf94: 0x1e10, 0xf95: 0x1e15, 0xf96: 0x1e1a, 0xf97: 0x1e29, - 0xf98: 0x1e2e, 0xf99: 0x1e3d, 0xf9a: 0x1e42, 0xf9b: 0x1e47, 0xf9c: 0x1e56, 0xf9d: 0x1e5b, - 0xf9e: 0x1e60, 0xf9f: 0x1e6a, 0xfa0: 0x1ea6, 0xfa1: 0x1eb5, 0xfa2: 0x1ec4, 0xfa3: 0x1ec9, - 0xfa4: 0x1ece, 0xfa5: 0x1ed8, 0xfa6: 0x1ee7, 0xfa7: 0x1eec, 0xfa8: 0x1efb, 0xfa9: 0x1f00, - 0xfaa: 0x1f05, 0xfab: 0x1f14, 0xfac: 0x1f19, 0xfad: 0x1f28, 0xfae: 0x1f2d, 0xfaf: 0x1f32, - 0xfb0: 0x1f37, 0xfb1: 0x1f3c, 0xfb2: 0x1f41, 0xfb3: 0x1f46, 0xfb4: 0x1f4b, 0xfb5: 0x1f50, - 0xfb6: 0x1f55, 0xfb7: 0x1f5a, 0xfb8: 0x1f5f, 0xfb9: 0x1f64, 0xfba: 0x1f69, 0xfbb: 0x1f6e, - 0xfbc: 0x1f73, 0xfbd: 0x1f78, 0xfbe: 0x1f7d, 0xfbf: 0x1f87, - // Block 0x3f, offset 0xfc0 - 0xfc0: 0x1f8c, 0xfc1: 0x1f91, 0xfc2: 0x1f96, 0xfc3: 0x1fa0, 0xfc4: 0x1fa5, 0xfc5: 0x1faf, - 0xfc6: 0x1fb4, 0xfc7: 0x1fb9, 0xfc8: 0x1fbe, 0xfc9: 0x1fc3, 0xfca: 0x1fc8, 0xfcb: 0x1fcd, - 0xfcc: 0x1fd2, 0xfcd: 0x1fd7, 0xfce: 0x1fe6, 0xfcf: 0x1ff5, 0xfd0: 0x1ffa, 0xfd1: 0x1fff, - 0xfd2: 0x2004, 0xfd3: 0x2009, 0xfd4: 0x200e, 0xfd5: 0x2018, 0xfd6: 0x201d, 0xfd7: 0x2022, - 0xfd8: 0x2031, 0xfd9: 0x2040, 0xfda: 0x2045, 0xfdb: 0x4420, 0xfdc: 0x4426, 0xfdd: 0x445c, - 0xfde: 0x44b3, 0xfdf: 0x44ba, 0xfe0: 0x44c1, 0xfe1: 0x44c8, 0xfe2: 0x44cf, 0xfe3: 0x44d6, - 0xfe4: 0x25c6, 0xfe5: 0x25cd, 0xfe6: 0x25d4, 0xfe7: 0x25db, 0xfe8: 0x25f0, 0xfe9: 0x25f7, - 0xfea: 0x1d98, 0xfeb: 0x1d9d, 0xfec: 0x1da2, 0xfed: 0x1da7, 0xfee: 0x1db1, 0xfef: 0x1db6, - 0xff0: 0x1dca, 0xff1: 0x1dcf, 0xff2: 0x1dd4, 0xff3: 0x1dd9, 0xff4: 0x1de3, 0xff5: 0x1de8, - 0xff6: 0x1df2, 0xff7: 0x1df7, 0xff8: 0x1dfc, 0xff9: 0x1e01, 0xffa: 0x1e0b, 0xffb: 0x1e10, - 0xffc: 0x1f3c, 0xffd: 0x1f41, 0xffe: 0x1f50, 0xfff: 0x1f55, - // Block 0x40, offset 0x1000 - 0x1000: 0x1f5a, 0x1001: 0x1f6e, 0x1002: 0x1f73, 0x1003: 0x1f78, 0x1004: 0x1f7d, 0x1005: 0x1f96, - 0x1006: 0x1fa0, 0x1007: 0x1fa5, 0x1008: 0x1faa, 0x1009: 0x1fbe, 0x100a: 0x1fdc, 0x100b: 0x1fe1, - 0x100c: 0x1fe6, 0x100d: 0x1feb, 0x100e: 0x1ff5, 0x100f: 0x1ffa, 0x1010: 0x445c, 0x1011: 0x2027, - 0x1012: 0x202c, 0x1013: 0x2031, 0x1014: 0x2036, 0x1015: 0x2040, 0x1016: 0x2045, 0x1017: 0x25b1, - 0x1018: 0x25b8, 0x1019: 0x25bf, 0x101a: 0x25d4, 0x101b: 0x25e2, 0x101c: 0x1d89, 0x101d: 0x1d8e, - 0x101e: 0x1d93, 0x101f: 0x1da2, 0x1020: 0x1dac, 0x1021: 0x1dbb, 0x1022: 0x1dc0, 0x1023: 0x1dc5, - 0x1024: 0x1dd4, 0x1025: 0x1dde, 0x1026: 0x1dfc, 0x1027: 0x1e15, 0x1028: 0x1e1a, 0x1029: 0x1e29, - 0x102a: 0x1e2e, 0x102b: 0x1e3d, 0x102c: 0x1e47, 0x102d: 0x1e56, 0x102e: 0x1e5b, 0x102f: 0x1e60, - 0x1030: 0x1e6a, 0x1031: 0x1ea6, 0x1032: 0x1eab, 0x1033: 0x1eb5, 0x1034: 0x1ec4, 0x1035: 0x1ec9, - 0x1036: 0x1ece, 0x1037: 0x1ed8, 0x1038: 0x1ee7, 0x1039: 0x1efb, 0x103a: 0x1f00, 0x103b: 0x1f05, - 0x103c: 0x1f14, 0x103d: 0x1f19, 0x103e: 0x1f28, 0x103f: 0x1f2d, - // Block 0x41, offset 0x1040 - 0x1040: 0x1f32, 0x1041: 0x1f37, 0x1042: 0x1f46, 0x1043: 0x1f4b, 0x1044: 0x1f5f, 0x1045: 0x1f64, - 0x1046: 0x1f69, 0x1047: 0x1f6e, 0x1048: 0x1f73, 0x1049: 0x1f87, 0x104a: 0x1f8c, 0x104b: 0x1f91, - 0x104c: 0x1f96, 0x104d: 0x1f9b, 0x104e: 0x1faf, 0x104f: 0x1fb4, 0x1050: 0x1fb9, 0x1051: 0x1fbe, - 0x1052: 0x1fcd, 0x1053: 0x1fd2, 0x1054: 0x1fd7, 0x1055: 0x1fe6, 0x1056: 0x1ff0, 0x1057: 0x1fff, - 0x1058: 0x2004, 0x1059: 0x4450, 0x105a: 0x2018, 0x105b: 0x201d, 0x105c: 0x2022, 0x105d: 0x2031, - 0x105e: 0x203b, 0x105f: 0x25d4, 0x1060: 0x25e2, 0x1061: 0x1da2, 0x1062: 0x1dac, 0x1063: 0x1dd4, - 0x1064: 0x1dde, 0x1065: 0x1dfc, 0x1066: 0x1e06, 0x1067: 0x1e6a, 0x1068: 0x1e6f, 0x1069: 0x1e92, - 0x106a: 0x1e97, 0x106b: 0x1f6e, 0x106c: 0x1f73, 0x106d: 0x1f96, 0x106e: 0x1fe6, 0x106f: 0x1ff0, - 0x1070: 0x2031, 0x1071: 0x203b, 0x1072: 0x4504, 0x1073: 0x450c, 0x1074: 0x4514, 0x1075: 0x1ef1, - 0x1076: 0x1ef6, 0x1077: 0x1f0a, 0x1078: 0x1f0f, 0x1079: 0x1f1e, 0x107a: 0x1f23, 0x107b: 0x1e74, - 0x107c: 0x1e79, 0x107d: 0x1e9c, 0x107e: 0x1ea1, 0x107f: 0x1e33, - // Block 0x42, offset 0x1080 - 0x1080: 0x1e38, 0x1081: 0x1e1f, 0x1082: 0x1e24, 0x1083: 0x1e4c, 0x1084: 0x1e51, 0x1085: 0x1eba, - 0x1086: 0x1ebf, 0x1087: 0x1edd, 0x1088: 0x1ee2, 0x1089: 0x1e7e, 0x108a: 0x1e83, 0x108b: 0x1e88, - 0x108c: 0x1e92, 0x108d: 0x1e8d, 0x108e: 0x1e65, 0x108f: 0x1eb0, 0x1090: 0x1ed3, 0x1091: 0x1ef1, - 0x1092: 0x1ef6, 0x1093: 0x1f0a, 0x1094: 0x1f0f, 0x1095: 0x1f1e, 0x1096: 0x1f23, 0x1097: 0x1e74, - 0x1098: 0x1e79, 0x1099: 0x1e9c, 0x109a: 0x1ea1, 0x109b: 0x1e33, 0x109c: 0x1e38, 0x109d: 0x1e1f, - 0x109e: 0x1e24, 0x109f: 0x1e4c, 0x10a0: 0x1e51, 0x10a1: 0x1eba, 0x10a2: 0x1ebf, 0x10a3: 0x1edd, - 0x10a4: 0x1ee2, 0x10a5: 0x1e7e, 0x10a6: 0x1e83, 0x10a7: 0x1e88, 0x10a8: 0x1e92, 0x10a9: 0x1e8d, - 0x10aa: 0x1e65, 0x10ab: 0x1eb0, 0x10ac: 0x1ed3, 0x10ad: 0x1e7e, 0x10ae: 0x1e83, 0x10af: 0x1e88, - 0x10b0: 0x1e92, 0x10b1: 0x1e6f, 0x10b2: 0x1e97, 0x10b3: 0x1eec, 0x10b4: 0x1e56, 0x10b5: 0x1e5b, - 0x10b6: 0x1e60, 0x10b7: 0x1e7e, 0x10b8: 0x1e83, 0x10b9: 0x1e88, 0x10ba: 0x1eec, 0x10bb: 0x1efb, - 0x10bc: 0x4408, 0x10bd: 0x4408, - // Block 0x43, offset 0x10c0 - 0x10d0: 0x2311, 0x10d1: 0x2326, - 0x10d2: 0x2326, 0x10d3: 0x232d, 0x10d4: 0x2334, 0x10d5: 0x2349, 0x10d6: 0x2350, 0x10d7: 0x2357, - 0x10d8: 0x237a, 0x10d9: 0x237a, 0x10da: 0x239d, 0x10db: 0x2396, 0x10dc: 0x23b2, 0x10dd: 0x23a4, - 0x10de: 0x23ab, 0x10df: 0x23ce, 0x10e0: 0x23ce, 0x10e1: 0x23c7, 0x10e2: 0x23d5, 0x10e3: 0x23d5, - 0x10e4: 0x23ff, 0x10e5: 0x23ff, 0x10e6: 0x241b, 0x10e7: 0x23e3, 0x10e8: 0x23e3, 0x10e9: 0x23dc, - 0x10ea: 0x23f1, 0x10eb: 0x23f1, 0x10ec: 0x23f8, 0x10ed: 0x23f8, 0x10ee: 0x2422, 0x10ef: 0x2430, - 0x10f0: 0x2430, 0x10f1: 0x2437, 0x10f2: 0x2437, 0x10f3: 0x243e, 0x10f4: 0x2445, 0x10f5: 0x244c, - 0x10f6: 0x2453, 0x10f7: 0x2453, 0x10f8: 0x245a, 0x10f9: 0x2468, 0x10fa: 0x2476, 0x10fb: 0x246f, - 0x10fc: 0x247d, 0x10fd: 0x247d, 0x10fe: 0x2492, 0x10ff: 0x2499, - // Block 0x44, offset 0x1100 - 0x1100: 0x24ca, 0x1101: 0x24d8, 0x1102: 0x24d1, 0x1103: 0x24b5, 0x1104: 0x24b5, 0x1105: 0x24df, - 0x1106: 0x24df, 0x1107: 0x24e6, 0x1108: 0x24e6, 0x1109: 0x2510, 0x110a: 0x2517, 0x110b: 0x251e, - 0x110c: 0x24f4, 0x110d: 0x2502, 0x110e: 0x2525, 0x110f: 0x252c, - 0x1112: 0x24fb, 0x1113: 0x2580, 0x1114: 0x2587, 0x1115: 0x255d, 0x1116: 0x2564, 0x1117: 0x2548, - 0x1118: 0x2548, 0x1119: 0x254f, 0x111a: 0x2579, 0x111b: 0x2572, 0x111c: 0x259c, 0x111d: 0x259c, - 0x111e: 0x230a, 0x111f: 0x231f, 0x1120: 0x2318, 0x1121: 0x2342, 0x1122: 0x233b, 0x1123: 0x2365, - 0x1124: 0x235e, 0x1125: 0x2388, 0x1126: 0x236c, 0x1127: 0x2381, 0x1128: 0x23b9, 0x1129: 0x2406, - 0x112a: 0x23ea, 0x112b: 0x2429, 0x112c: 0x24c3, 0x112d: 0x24ed, 0x112e: 0x2595, 0x112f: 0x258e, - 0x1130: 0x25a3, 0x1131: 0x253a, 0x1132: 0x24a0, 0x1133: 0x256b, 0x1134: 0x2492, 0x1135: 0x24ca, - 0x1136: 0x2461, 0x1137: 0x24ae, 0x1138: 0x2541, 0x1139: 0x2533, 0x113a: 0x24bc, 0x113b: 0x24a7, - 0x113c: 0x24bc, 0x113d: 0x2541, 0x113e: 0x2373, 0x113f: 0x238f, - // Block 0x45, offset 0x1140 - 0x1140: 0x2509, 0x1141: 0x2484, 0x1142: 0x2303, 0x1143: 0x24a7, 0x1144: 0x244c, 0x1145: 0x241b, - 0x1146: 0x23c0, 0x1147: 0x2556, - 0x1170: 0x2414, 0x1171: 0x248b, 0x1172: 0x27bf, 0x1173: 0x27b6, 0x1174: 0x27ec, 0x1175: 0x27da, - 0x1176: 0x27c8, 0x1177: 0x27e3, 0x1178: 0x27f5, 0x1179: 0x240d, 0x117a: 0x2c7c, 0x117b: 0x2afc, - 0x117c: 0x27d1, - // Block 0x46, offset 0x1180 - 0x1190: 0x0019, 0x1191: 0x0483, - 0x1192: 0x0487, 0x1193: 0x0035, 0x1194: 0x0037, 0x1195: 0x0003, 0x1196: 0x003f, 0x1197: 0x04bf, - 0x1198: 0x04c3, 0x1199: 0x1b5c, - 0x11a0: 0x8132, 0x11a1: 0x8132, 0x11a2: 0x8132, 0x11a3: 0x8132, - 0x11a4: 0x8132, 0x11a5: 0x8132, 0x11a6: 0x8132, 0x11a7: 0x812d, 0x11a8: 0x812d, 0x11a9: 0x812d, - 0x11aa: 0x812d, 0x11ab: 0x812d, 0x11ac: 0x812d, 0x11ad: 0x812d, 0x11ae: 0x8132, 0x11af: 0x8132, - 0x11b0: 0x1873, 0x11b1: 0x0443, 0x11b2: 0x043f, 0x11b3: 0x007f, 0x11b4: 0x007f, 0x11b5: 0x0011, - 0x11b6: 0x0013, 0x11b7: 0x00b7, 0x11b8: 0x00bb, 0x11b9: 0x04b7, 0x11ba: 0x04bb, 0x11bb: 0x04ab, - 0x11bc: 0x04af, 0x11bd: 0x0493, 0x11be: 0x0497, 0x11bf: 0x048b, - // Block 0x47, offset 0x11c0 - 0x11c0: 0x048f, 0x11c1: 0x049b, 0x11c2: 0x049f, 0x11c3: 0x04a3, 0x11c4: 0x04a7, - 0x11c7: 0x0077, 0x11c8: 0x007b, 0x11c9: 0x4269, 0x11ca: 0x4269, 0x11cb: 0x4269, - 0x11cc: 0x4269, 0x11cd: 0x007f, 0x11ce: 0x007f, 0x11cf: 0x007f, 0x11d0: 0x0019, 0x11d1: 0x0483, - 0x11d2: 0x001d, 0x11d4: 0x0037, 0x11d5: 0x0035, 0x11d6: 0x003f, 0x11d7: 0x0003, - 0x11d8: 0x0443, 0x11d9: 0x0011, 0x11da: 0x0013, 0x11db: 0x00b7, 0x11dc: 0x00bb, 0x11dd: 0x04b7, - 0x11de: 0x04bb, 0x11df: 0x0007, 0x11e0: 0x000d, 0x11e1: 0x0015, 0x11e2: 0x0017, 0x11e3: 0x001b, - 0x11e4: 0x0039, 0x11e5: 0x003d, 0x11e6: 0x003b, 0x11e8: 0x0079, 0x11e9: 0x0009, - 0x11ea: 0x000b, 0x11eb: 0x0041, - 0x11f0: 0x42aa, 0x11f1: 0x442c, 0x11f2: 0x42af, 0x11f4: 0x42b4, - 0x11f6: 0x42b9, 0x11f7: 0x4432, 0x11f8: 0x42be, 0x11f9: 0x4438, 0x11fa: 0x42c3, 0x11fb: 0x443e, - 0x11fc: 0x42c8, 0x11fd: 0x4444, 0x11fe: 0x42cd, 0x11ff: 0x444a, - // Block 0x48, offset 0x1200 - 0x1200: 0x0236, 0x1201: 0x440e, 0x1202: 0x440e, 0x1203: 0x4414, 0x1204: 0x4414, 0x1205: 0x4456, - 0x1206: 0x4456, 0x1207: 0x441a, 0x1208: 0x441a, 0x1209: 0x4462, 0x120a: 0x4462, 0x120b: 0x4462, - 0x120c: 0x4462, 0x120d: 0x0239, 0x120e: 0x0239, 0x120f: 0x023c, 0x1210: 0x023c, 0x1211: 0x023c, - 0x1212: 0x023c, 0x1213: 0x023f, 0x1214: 0x023f, 0x1215: 0x0242, 0x1216: 0x0242, 0x1217: 0x0242, - 0x1218: 0x0242, 0x1219: 0x0245, 0x121a: 0x0245, 0x121b: 0x0245, 0x121c: 0x0245, 0x121d: 0x0248, - 0x121e: 0x0248, 0x121f: 0x0248, 0x1220: 0x0248, 0x1221: 0x024b, 0x1222: 0x024b, 0x1223: 0x024b, - 0x1224: 0x024b, 0x1225: 0x024e, 0x1226: 0x024e, 0x1227: 0x024e, 0x1228: 0x024e, 0x1229: 0x0251, - 0x122a: 0x0251, 0x122b: 0x0254, 0x122c: 0x0254, 0x122d: 0x0257, 0x122e: 0x0257, 0x122f: 0x025a, - 0x1230: 0x025a, 0x1231: 0x025d, 0x1232: 0x025d, 0x1233: 0x025d, 0x1234: 0x025d, 0x1235: 0x0260, - 0x1236: 0x0260, 0x1237: 0x0260, 0x1238: 0x0260, 0x1239: 0x0263, 0x123a: 0x0263, 0x123b: 0x0263, - 0x123c: 0x0263, 0x123d: 0x0266, 0x123e: 0x0266, 0x123f: 0x0266, - // Block 0x49, offset 0x1240 - 0x1240: 0x0266, 0x1241: 0x0269, 0x1242: 0x0269, 0x1243: 0x0269, 0x1244: 0x0269, 0x1245: 0x026c, - 0x1246: 0x026c, 0x1247: 0x026c, 0x1248: 0x026c, 0x1249: 0x026f, 0x124a: 0x026f, 0x124b: 0x026f, - 0x124c: 0x026f, 0x124d: 0x0272, 0x124e: 0x0272, 0x124f: 0x0272, 0x1250: 0x0272, 0x1251: 0x0275, - 0x1252: 0x0275, 0x1253: 0x0275, 0x1254: 0x0275, 0x1255: 0x0278, 0x1256: 0x0278, 0x1257: 0x0278, - 0x1258: 0x0278, 0x1259: 0x027b, 0x125a: 0x027b, 0x125b: 0x027b, 0x125c: 0x027b, 0x125d: 0x027e, - 0x125e: 0x027e, 0x125f: 0x027e, 0x1260: 0x027e, 0x1261: 0x0281, 0x1262: 0x0281, 0x1263: 0x0281, - 0x1264: 0x0281, 0x1265: 0x0284, 0x1266: 0x0284, 0x1267: 0x0284, 0x1268: 0x0284, 0x1269: 0x0287, - 0x126a: 0x0287, 0x126b: 0x0287, 0x126c: 0x0287, 0x126d: 0x028a, 0x126e: 0x028a, 0x126f: 0x028d, - 0x1270: 0x028d, 0x1271: 0x0290, 0x1272: 0x0290, 0x1273: 0x0290, 0x1274: 0x0290, 0x1275: 0x2e00, - 0x1276: 0x2e00, 0x1277: 0x2e08, 0x1278: 0x2e08, 0x1279: 0x2e10, 0x127a: 0x2e10, 0x127b: 0x1f82, - 0x127c: 0x1f82, - // Block 0x4a, offset 0x1280 - 0x1280: 0x0081, 0x1281: 0x0083, 0x1282: 0x0085, 0x1283: 0x0087, 0x1284: 0x0089, 0x1285: 0x008b, - 0x1286: 0x008d, 0x1287: 0x008f, 0x1288: 0x0091, 0x1289: 0x0093, 0x128a: 0x0095, 0x128b: 0x0097, - 0x128c: 0x0099, 0x128d: 0x009b, 0x128e: 0x009d, 0x128f: 0x009f, 0x1290: 0x00a1, 0x1291: 0x00a3, - 0x1292: 0x00a5, 0x1293: 0x00a7, 0x1294: 0x00a9, 0x1295: 0x00ab, 0x1296: 0x00ad, 0x1297: 0x00af, - 0x1298: 0x00b1, 0x1299: 0x00b3, 0x129a: 0x00b5, 0x129b: 0x00b7, 0x129c: 0x00b9, 0x129d: 0x00bb, - 0x129e: 0x00bd, 0x129f: 0x0477, 0x12a0: 0x047b, 0x12a1: 0x0487, 0x12a2: 0x049b, 0x12a3: 0x049f, - 0x12a4: 0x0483, 0x12a5: 0x05ab, 0x12a6: 0x05a3, 0x12a7: 0x04c7, 0x12a8: 0x04cf, 0x12a9: 0x04d7, - 0x12aa: 0x04df, 0x12ab: 0x04e7, 0x12ac: 0x056b, 0x12ad: 0x0573, 0x12ae: 0x057b, 0x12af: 0x051f, - 0x12b0: 0x05af, 0x12b1: 0x04cb, 0x12b2: 0x04d3, 0x12b3: 0x04db, 0x12b4: 0x04e3, 0x12b5: 0x04eb, - 0x12b6: 0x04ef, 0x12b7: 0x04f3, 0x12b8: 0x04f7, 0x12b9: 0x04fb, 0x12ba: 0x04ff, 0x12bb: 0x0503, - 0x12bc: 0x0507, 0x12bd: 0x050b, 0x12be: 0x050f, 0x12bf: 0x0513, - // Block 0x4b, offset 0x12c0 - 0x12c0: 0x0517, 0x12c1: 0x051b, 0x12c2: 0x0523, 0x12c3: 0x0527, 0x12c4: 0x052b, 0x12c5: 0x052f, - 0x12c6: 0x0533, 0x12c7: 0x0537, 0x12c8: 0x053b, 0x12c9: 0x053f, 0x12ca: 0x0543, 0x12cb: 0x0547, - 0x12cc: 0x054b, 0x12cd: 0x054f, 0x12ce: 0x0553, 0x12cf: 0x0557, 0x12d0: 0x055b, 0x12d1: 0x055f, - 0x12d2: 0x0563, 0x12d3: 0x0567, 0x12d4: 0x056f, 0x12d5: 0x0577, 0x12d6: 0x057f, 0x12d7: 0x0583, - 0x12d8: 0x0587, 0x12d9: 0x058b, 0x12da: 0x058f, 0x12db: 0x0593, 0x12dc: 0x0597, 0x12dd: 0x05a7, - 0x12de: 0x4a78, 0x12df: 0x4a7e, 0x12e0: 0x03c3, 0x12e1: 0x0313, 0x12e2: 0x0317, 0x12e3: 0x4a3b, - 0x12e4: 0x031b, 0x12e5: 0x4a41, 0x12e6: 0x4a47, 0x12e7: 0x031f, 0x12e8: 0x0323, 0x12e9: 0x0327, - 0x12ea: 0x4a4d, 0x12eb: 0x4a53, 0x12ec: 0x4a59, 0x12ed: 0x4a5f, 0x12ee: 0x4a65, 0x12ef: 0x4a6b, - 0x12f0: 0x0367, 0x12f1: 0x032b, 0x12f2: 0x032f, 0x12f3: 0x0333, 0x12f4: 0x037b, 0x12f5: 0x0337, - 0x12f6: 0x033b, 0x12f7: 0x033f, 0x12f8: 0x0343, 0x12f9: 0x0347, 0x12fa: 0x034b, 0x12fb: 0x034f, - 0x12fc: 0x0353, 0x12fd: 0x0357, 0x12fe: 0x035b, - // Block 0x4c, offset 0x1300 - 0x1302: 0x49bd, 0x1303: 0x49c3, 0x1304: 0x49c9, 0x1305: 0x49cf, - 0x1306: 0x49d5, 0x1307: 0x49db, 0x130a: 0x49e1, 0x130b: 0x49e7, - 0x130c: 0x49ed, 0x130d: 0x49f3, 0x130e: 0x49f9, 0x130f: 0x49ff, - 0x1312: 0x4a05, 0x1313: 0x4a0b, 0x1314: 0x4a11, 0x1315: 0x4a17, 0x1316: 0x4a1d, 0x1317: 0x4a23, - 0x131a: 0x4a29, 0x131b: 0x4a2f, 0x131c: 0x4a35, - 0x1320: 0x00bf, 0x1321: 0x00c2, 0x1322: 0x00cb, 0x1323: 0x4264, - 0x1324: 0x00c8, 0x1325: 0x00c5, 0x1326: 0x0447, 0x1328: 0x046b, 0x1329: 0x044b, - 0x132a: 0x044f, 0x132b: 0x0453, 0x132c: 0x0457, 0x132d: 0x046f, 0x132e: 0x0473, - // Block 0x4d, offset 0x1340 - 0x1340: 0x0063, 0x1341: 0x0065, 0x1342: 0x0067, 0x1343: 0x0069, 0x1344: 0x006b, 0x1345: 0x006d, - 0x1346: 0x006f, 0x1347: 0x0071, 0x1348: 0x0073, 0x1349: 0x0075, 0x134a: 0x0083, 0x134b: 0x0085, - 0x134c: 0x0087, 0x134d: 0x0089, 0x134e: 0x008b, 0x134f: 0x008d, 0x1350: 0x008f, 0x1351: 0x0091, - 0x1352: 0x0093, 0x1353: 0x0095, 0x1354: 0x0097, 0x1355: 0x0099, 0x1356: 0x009b, 0x1357: 0x009d, - 0x1358: 0x009f, 0x1359: 0x00a1, 0x135a: 0x00a3, 0x135b: 0x00a5, 0x135c: 0x00a7, 0x135d: 0x00a9, - 0x135e: 0x00ab, 0x135f: 0x00ad, 0x1360: 0x00af, 0x1361: 0x00b1, 0x1362: 0x00b3, 0x1363: 0x00b5, - 0x1364: 0x00dd, 0x1365: 0x00f2, 0x1368: 0x0173, 0x1369: 0x0176, - 0x136a: 0x0179, 0x136b: 0x017c, 0x136c: 0x017f, 0x136d: 0x0182, 0x136e: 0x0185, 0x136f: 0x0188, - 0x1370: 0x018b, 0x1371: 0x018e, 0x1372: 0x0191, 0x1373: 0x0194, 0x1374: 0x0197, 0x1375: 0x019a, - 0x1376: 0x019d, 0x1377: 0x01a0, 0x1378: 0x01a3, 0x1379: 0x0188, 0x137a: 0x01a6, 0x137b: 0x01a9, - 0x137c: 0x01ac, 0x137d: 0x01af, 0x137e: 0x01b2, 0x137f: 0x01b5, - // Block 0x4e, offset 0x1380 - 0x1380: 0x01fd, 0x1381: 0x0200, 0x1382: 0x0203, 0x1383: 0x045b, 0x1384: 0x01c7, 0x1385: 0x01d0, - 0x1386: 0x01d6, 0x1387: 0x01fa, 0x1388: 0x01eb, 0x1389: 0x01e8, 0x138a: 0x0206, 0x138b: 0x0209, - 0x138e: 0x0021, 0x138f: 0x0023, 0x1390: 0x0025, 0x1391: 0x0027, - 0x1392: 0x0029, 0x1393: 0x002b, 0x1394: 0x002d, 0x1395: 0x002f, 0x1396: 0x0031, 0x1397: 0x0033, - 0x1398: 0x0021, 0x1399: 0x0023, 0x139a: 0x0025, 0x139b: 0x0027, 0x139c: 0x0029, 0x139d: 0x002b, - 0x139e: 0x002d, 0x139f: 0x002f, 0x13a0: 0x0031, 0x13a1: 0x0033, 0x13a2: 0x0021, 0x13a3: 0x0023, - 0x13a4: 0x0025, 0x13a5: 0x0027, 0x13a6: 0x0029, 0x13a7: 0x002b, 0x13a8: 0x002d, 0x13a9: 0x002f, - 0x13aa: 0x0031, 0x13ab: 0x0033, 0x13ac: 0x0021, 0x13ad: 0x0023, 0x13ae: 0x0025, 0x13af: 0x0027, - 0x13b0: 0x0029, 0x13b1: 0x002b, 0x13b2: 0x002d, 0x13b3: 0x002f, 0x13b4: 0x0031, 0x13b5: 0x0033, - 0x13b6: 0x0021, 0x13b7: 0x0023, 0x13b8: 0x0025, 0x13b9: 0x0027, 0x13ba: 0x0029, 0x13bb: 0x002b, - 0x13bc: 0x002d, 0x13bd: 0x002f, 0x13be: 0x0031, 0x13bf: 0x0033, - // Block 0x4f, offset 0x13c0 - 0x13c0: 0x0239, 0x13c1: 0x023c, 0x13c2: 0x0248, 0x13c3: 0x0251, 0x13c5: 0x028a, - 0x13c6: 0x025a, 0x13c7: 0x024b, 0x13c8: 0x0269, 0x13c9: 0x0290, 0x13ca: 0x027b, 0x13cb: 0x027e, - 0x13cc: 0x0281, 0x13cd: 0x0284, 0x13ce: 0x025d, 0x13cf: 0x026f, 0x13d0: 0x0275, 0x13d1: 0x0263, - 0x13d2: 0x0278, 0x13d3: 0x0257, 0x13d4: 0x0260, 0x13d5: 0x0242, 0x13d6: 0x0245, 0x13d7: 0x024e, - 0x13d8: 0x0254, 0x13d9: 0x0266, 0x13da: 0x026c, 0x13db: 0x0272, 0x13dc: 0x0293, 0x13dd: 0x02e4, - 0x13de: 0x02cc, 0x13df: 0x0296, 0x13e1: 0x023c, 0x13e2: 0x0248, - 0x13e4: 0x0287, 0x13e7: 0x024b, 0x13e9: 0x0290, - 0x13ea: 0x027b, 0x13eb: 0x027e, 0x13ec: 0x0281, 0x13ed: 0x0284, 0x13ee: 0x025d, 0x13ef: 0x026f, - 0x13f0: 0x0275, 0x13f1: 0x0263, 0x13f2: 0x0278, 0x13f4: 0x0260, 0x13f5: 0x0242, - 0x13f6: 0x0245, 0x13f7: 0x024e, 0x13f9: 0x0266, 0x13fb: 0x0272, - // Block 0x50, offset 0x1400 - 0x1402: 0x0248, - 0x1407: 0x024b, 0x1409: 0x0290, 0x140b: 0x027e, - 0x140d: 0x0284, 0x140e: 0x025d, 0x140f: 0x026f, 0x1411: 0x0263, - 0x1412: 0x0278, 0x1414: 0x0260, 0x1417: 0x024e, - 0x1419: 0x0266, 0x141b: 0x0272, 0x141d: 0x02e4, - 0x141f: 0x0296, 0x1421: 0x023c, 0x1422: 0x0248, - 0x1424: 0x0287, 0x1427: 0x024b, 0x1428: 0x0269, 0x1429: 0x0290, - 0x142a: 0x027b, 0x142c: 0x0281, 0x142d: 0x0284, 0x142e: 0x025d, 0x142f: 0x026f, - 0x1430: 0x0275, 0x1431: 0x0263, 0x1432: 0x0278, 0x1434: 0x0260, 0x1435: 0x0242, - 0x1436: 0x0245, 0x1437: 0x024e, 0x1439: 0x0266, 0x143a: 0x026c, 0x143b: 0x0272, - 0x143c: 0x0293, 0x143e: 0x02cc, - // Block 0x51, offset 0x1440 - 0x1440: 0x0239, 0x1441: 0x023c, 0x1442: 0x0248, 0x1443: 0x0251, 0x1444: 0x0287, 0x1445: 0x028a, - 0x1446: 0x025a, 0x1447: 0x024b, 0x1448: 0x0269, 0x1449: 0x0290, 0x144b: 0x027e, - 0x144c: 0x0281, 0x144d: 0x0284, 0x144e: 0x025d, 0x144f: 0x026f, 0x1450: 0x0275, 0x1451: 0x0263, - 0x1452: 0x0278, 0x1453: 0x0257, 0x1454: 0x0260, 0x1455: 0x0242, 0x1456: 0x0245, 0x1457: 0x024e, - 0x1458: 0x0254, 0x1459: 0x0266, 0x145a: 0x026c, 0x145b: 0x0272, - 0x1461: 0x023c, 0x1462: 0x0248, 0x1463: 0x0251, - 0x1465: 0x028a, 0x1466: 0x025a, 0x1467: 0x024b, 0x1468: 0x0269, 0x1469: 0x0290, - 0x146b: 0x027e, 0x146c: 0x0281, 0x146d: 0x0284, 0x146e: 0x025d, 0x146f: 0x026f, - 0x1470: 0x0275, 0x1471: 0x0263, 0x1472: 0x0278, 0x1473: 0x0257, 0x1474: 0x0260, 0x1475: 0x0242, - 0x1476: 0x0245, 0x1477: 0x024e, 0x1478: 0x0254, 0x1479: 0x0266, 0x147a: 0x026c, 0x147b: 0x0272, - // Block 0x52, offset 0x1480 - 0x1480: 0x1879, 0x1481: 0x1876, 0x1482: 0x187c, 0x1483: 0x18a0, 0x1484: 0x18c4, 0x1485: 0x18e8, - 0x1486: 0x190c, 0x1487: 0x1915, 0x1488: 0x191b, 0x1489: 0x1921, 0x148a: 0x1927, - 0x1490: 0x1a8c, 0x1491: 0x1a90, - 0x1492: 0x1a94, 0x1493: 0x1a98, 0x1494: 0x1a9c, 0x1495: 0x1aa0, 0x1496: 0x1aa4, 0x1497: 0x1aa8, - 0x1498: 0x1aac, 0x1499: 0x1ab0, 0x149a: 0x1ab4, 0x149b: 0x1ab8, 0x149c: 0x1abc, 0x149d: 0x1ac0, - 0x149e: 0x1ac4, 0x149f: 0x1ac8, 0x14a0: 0x1acc, 0x14a1: 0x1ad0, 0x14a2: 0x1ad4, 0x14a3: 0x1ad8, - 0x14a4: 0x1adc, 0x14a5: 0x1ae0, 0x14a6: 0x1ae4, 0x14a7: 0x1ae8, 0x14a8: 0x1aec, 0x14a9: 0x1af0, - 0x14aa: 0x271e, 0x14ab: 0x0047, 0x14ac: 0x0065, 0x14ad: 0x193c, 0x14ae: 0x19b1, - 0x14b0: 0x0043, 0x14b1: 0x0045, 0x14b2: 0x0047, 0x14b3: 0x0049, 0x14b4: 0x004b, 0x14b5: 0x004d, - 0x14b6: 0x004f, 0x14b7: 0x0051, 0x14b8: 0x0053, 0x14b9: 0x0055, 0x14ba: 0x0057, 0x14bb: 0x0059, - 0x14bc: 0x005b, 0x14bd: 0x005d, 0x14be: 0x005f, 0x14bf: 0x0061, - // Block 0x53, offset 0x14c0 - 0x14c0: 0x26ad, 0x14c1: 0x26c2, 0x14c2: 0x0503, - 0x14d0: 0x0c0f, 0x14d1: 0x0a47, - 0x14d2: 0x08d3, 0x14d3: 0x45c4, 0x14d4: 0x071b, 0x14d5: 0x09ef, 0x14d6: 0x132f, 0x14d7: 0x09ff, - 0x14d8: 0x0727, 0x14d9: 0x0cd7, 0x14da: 0x0eaf, 0x14db: 0x0caf, 0x14dc: 0x0827, 0x14dd: 0x0b6b, - 0x14de: 0x07bf, 0x14df: 0x0cb7, 0x14e0: 0x0813, 0x14e1: 0x1117, 0x14e2: 0x0f83, 0x14e3: 0x138b, - 0x14e4: 0x09d3, 0x14e5: 0x090b, 0x14e6: 0x0e63, 0x14e7: 0x0c1b, 0x14e8: 0x0c47, 0x14e9: 0x06bf, - 0x14ea: 0x06cb, 0x14eb: 0x140b, 0x14ec: 0x0adb, 0x14ed: 0x06e7, 0x14ee: 0x08ef, 0x14ef: 0x0c3b, - 0x14f0: 0x13b3, 0x14f1: 0x0c13, 0x14f2: 0x106f, 0x14f3: 0x10ab, 0x14f4: 0x08f7, 0x14f5: 0x0e43, - 0x14f6: 0x0d0b, 0x14f7: 0x0d07, 0x14f8: 0x0f97, 0x14f9: 0x082b, 0x14fa: 0x0957, 0x14fb: 0x1443, - // Block 0x54, offset 0x1500 - 0x1500: 0x06fb, 0x1501: 0x06f3, 0x1502: 0x0703, 0x1503: 0x1647, 0x1504: 0x0747, 0x1505: 0x0757, - 0x1506: 0x075b, 0x1507: 0x0763, 0x1508: 0x076b, 0x1509: 0x076f, 0x150a: 0x077b, 0x150b: 0x0773, - 0x150c: 0x05b3, 0x150d: 0x165b, 0x150e: 0x078f, 0x150f: 0x0793, 0x1510: 0x0797, 0x1511: 0x07b3, - 0x1512: 0x164c, 0x1513: 0x05b7, 0x1514: 0x079f, 0x1515: 0x07bf, 0x1516: 0x1656, 0x1517: 0x07cf, - 0x1518: 0x07d7, 0x1519: 0x0737, 0x151a: 0x07df, 0x151b: 0x07e3, 0x151c: 0x1831, 0x151d: 0x07ff, - 0x151e: 0x0807, 0x151f: 0x05bf, 0x1520: 0x081f, 0x1521: 0x0823, 0x1522: 0x082b, 0x1523: 0x082f, - 0x1524: 0x05c3, 0x1525: 0x0847, 0x1526: 0x084b, 0x1527: 0x0857, 0x1528: 0x0863, 0x1529: 0x0867, - 0x152a: 0x086b, 0x152b: 0x0873, 0x152c: 0x0893, 0x152d: 0x0897, 0x152e: 0x089f, 0x152f: 0x08af, - 0x1530: 0x08b7, 0x1531: 0x08bb, 0x1532: 0x08bb, 0x1533: 0x08bb, 0x1534: 0x166a, 0x1535: 0x0e93, - 0x1536: 0x08cf, 0x1537: 0x08d7, 0x1538: 0x166f, 0x1539: 0x08e3, 0x153a: 0x08eb, 0x153b: 0x08f3, - 0x153c: 0x091b, 0x153d: 0x0907, 0x153e: 0x0913, 0x153f: 0x0917, - // Block 0x55, offset 0x1540 - 0x1540: 0x091f, 0x1541: 0x0927, 0x1542: 0x092b, 0x1543: 0x0933, 0x1544: 0x093b, 0x1545: 0x093f, - 0x1546: 0x093f, 0x1547: 0x0947, 0x1548: 0x094f, 0x1549: 0x0953, 0x154a: 0x095f, 0x154b: 0x0983, - 0x154c: 0x0967, 0x154d: 0x0987, 0x154e: 0x096b, 0x154f: 0x0973, 0x1550: 0x080b, 0x1551: 0x09cf, - 0x1552: 0x0997, 0x1553: 0x099b, 0x1554: 0x099f, 0x1555: 0x0993, 0x1556: 0x09a7, 0x1557: 0x09a3, - 0x1558: 0x09bb, 0x1559: 0x1674, 0x155a: 0x09d7, 0x155b: 0x09db, 0x155c: 0x09e3, 0x155d: 0x09ef, - 0x155e: 0x09f7, 0x155f: 0x0a13, 0x1560: 0x1679, 0x1561: 0x167e, 0x1562: 0x0a1f, 0x1563: 0x0a23, - 0x1564: 0x0a27, 0x1565: 0x0a1b, 0x1566: 0x0a2f, 0x1567: 0x05c7, 0x1568: 0x05cb, 0x1569: 0x0a37, - 0x156a: 0x0a3f, 0x156b: 0x0a3f, 0x156c: 0x1683, 0x156d: 0x0a5b, 0x156e: 0x0a5f, 0x156f: 0x0a63, - 0x1570: 0x0a6b, 0x1571: 0x1688, 0x1572: 0x0a73, 0x1573: 0x0a77, 0x1574: 0x0b4f, 0x1575: 0x0a7f, - 0x1576: 0x05cf, 0x1577: 0x0a8b, 0x1578: 0x0a9b, 0x1579: 0x0aa7, 0x157a: 0x0aa3, 0x157b: 0x1692, - 0x157c: 0x0aaf, 0x157d: 0x1697, 0x157e: 0x0abb, 0x157f: 0x0ab7, - // Block 0x56, offset 0x1580 - 0x1580: 0x0abf, 0x1581: 0x0acf, 0x1582: 0x0ad3, 0x1583: 0x05d3, 0x1584: 0x0ae3, 0x1585: 0x0aeb, - 0x1586: 0x0aef, 0x1587: 0x0af3, 0x1588: 0x05d7, 0x1589: 0x169c, 0x158a: 0x05db, 0x158b: 0x0b0f, - 0x158c: 0x0b13, 0x158d: 0x0b17, 0x158e: 0x0b1f, 0x158f: 0x1863, 0x1590: 0x0b37, 0x1591: 0x16a6, - 0x1592: 0x16a6, 0x1593: 0x11d7, 0x1594: 0x0b47, 0x1595: 0x0b47, 0x1596: 0x05df, 0x1597: 0x16c9, - 0x1598: 0x179b, 0x1599: 0x0b57, 0x159a: 0x0b5f, 0x159b: 0x05e3, 0x159c: 0x0b73, 0x159d: 0x0b83, - 0x159e: 0x0b87, 0x159f: 0x0b8f, 0x15a0: 0x0b9f, 0x15a1: 0x05eb, 0x15a2: 0x05e7, 0x15a3: 0x0ba3, - 0x15a4: 0x16ab, 0x15a5: 0x0ba7, 0x15a6: 0x0bbb, 0x15a7: 0x0bbf, 0x15a8: 0x0bc3, 0x15a9: 0x0bbf, - 0x15aa: 0x0bcf, 0x15ab: 0x0bd3, 0x15ac: 0x0be3, 0x15ad: 0x0bdb, 0x15ae: 0x0bdf, 0x15af: 0x0be7, - 0x15b0: 0x0beb, 0x15b1: 0x0bef, 0x15b2: 0x0bfb, 0x15b3: 0x0bff, 0x15b4: 0x0c17, 0x15b5: 0x0c1f, - 0x15b6: 0x0c2f, 0x15b7: 0x0c43, 0x15b8: 0x16ba, 0x15b9: 0x0c3f, 0x15ba: 0x0c33, 0x15bb: 0x0c4b, - 0x15bc: 0x0c53, 0x15bd: 0x0c67, 0x15be: 0x16bf, 0x15bf: 0x0c6f, - // Block 0x57, offset 0x15c0 - 0x15c0: 0x0c63, 0x15c1: 0x0c5b, 0x15c2: 0x05ef, 0x15c3: 0x0c77, 0x15c4: 0x0c7f, 0x15c5: 0x0c87, - 0x15c6: 0x0c7b, 0x15c7: 0x05f3, 0x15c8: 0x0c97, 0x15c9: 0x0c9f, 0x15ca: 0x16c4, 0x15cb: 0x0ccb, - 0x15cc: 0x0cff, 0x15cd: 0x0cdb, 0x15ce: 0x05ff, 0x15cf: 0x0ce7, 0x15d0: 0x05fb, 0x15d1: 0x05f7, - 0x15d2: 0x07c3, 0x15d3: 0x07c7, 0x15d4: 0x0d03, 0x15d5: 0x0ceb, 0x15d6: 0x11ab, 0x15d7: 0x0663, - 0x15d8: 0x0d0f, 0x15d9: 0x0d13, 0x15da: 0x0d17, 0x15db: 0x0d2b, 0x15dc: 0x0d23, 0x15dd: 0x16dd, - 0x15de: 0x0603, 0x15df: 0x0d3f, 0x15e0: 0x0d33, 0x15e1: 0x0d4f, 0x15e2: 0x0d57, 0x15e3: 0x16e7, - 0x15e4: 0x0d5b, 0x15e5: 0x0d47, 0x15e6: 0x0d63, 0x15e7: 0x0607, 0x15e8: 0x0d67, 0x15e9: 0x0d6b, - 0x15ea: 0x0d6f, 0x15eb: 0x0d7b, 0x15ec: 0x16ec, 0x15ed: 0x0d83, 0x15ee: 0x060b, 0x15ef: 0x0d8f, - 0x15f0: 0x16f1, 0x15f1: 0x0d93, 0x15f2: 0x060f, 0x15f3: 0x0d9f, 0x15f4: 0x0dab, 0x15f5: 0x0db7, - 0x15f6: 0x0dbb, 0x15f7: 0x16f6, 0x15f8: 0x168d, 0x15f9: 0x16fb, 0x15fa: 0x0ddb, 0x15fb: 0x1700, - 0x15fc: 0x0de7, 0x15fd: 0x0def, 0x15fe: 0x0ddf, 0x15ff: 0x0dfb, - // Block 0x58, offset 0x1600 - 0x1600: 0x0e0b, 0x1601: 0x0e1b, 0x1602: 0x0e0f, 0x1603: 0x0e13, 0x1604: 0x0e1f, 0x1605: 0x0e23, - 0x1606: 0x1705, 0x1607: 0x0e07, 0x1608: 0x0e3b, 0x1609: 0x0e3f, 0x160a: 0x0613, 0x160b: 0x0e53, - 0x160c: 0x0e4f, 0x160d: 0x170a, 0x160e: 0x0e33, 0x160f: 0x0e6f, 0x1610: 0x170f, 0x1611: 0x1714, - 0x1612: 0x0e73, 0x1613: 0x0e87, 0x1614: 0x0e83, 0x1615: 0x0e7f, 0x1616: 0x0617, 0x1617: 0x0e8b, - 0x1618: 0x0e9b, 0x1619: 0x0e97, 0x161a: 0x0ea3, 0x161b: 0x1651, 0x161c: 0x0eb3, 0x161d: 0x1719, - 0x161e: 0x0ebf, 0x161f: 0x1723, 0x1620: 0x0ed3, 0x1621: 0x0edf, 0x1622: 0x0ef3, 0x1623: 0x1728, - 0x1624: 0x0f07, 0x1625: 0x0f0b, 0x1626: 0x172d, 0x1627: 0x1732, 0x1628: 0x0f27, 0x1629: 0x0f37, - 0x162a: 0x061b, 0x162b: 0x0f3b, 0x162c: 0x061f, 0x162d: 0x061f, 0x162e: 0x0f53, 0x162f: 0x0f57, - 0x1630: 0x0f5f, 0x1631: 0x0f63, 0x1632: 0x0f6f, 0x1633: 0x0623, 0x1634: 0x0f87, 0x1635: 0x1737, - 0x1636: 0x0fa3, 0x1637: 0x173c, 0x1638: 0x0faf, 0x1639: 0x16a1, 0x163a: 0x0fbf, 0x163b: 0x1741, - 0x163c: 0x1746, 0x163d: 0x174b, 0x163e: 0x0627, 0x163f: 0x062b, - // Block 0x59, offset 0x1640 - 0x1640: 0x0ff7, 0x1641: 0x1755, 0x1642: 0x1750, 0x1643: 0x175a, 0x1644: 0x175f, 0x1645: 0x0fff, - 0x1646: 0x1003, 0x1647: 0x1003, 0x1648: 0x100b, 0x1649: 0x0633, 0x164a: 0x100f, 0x164b: 0x0637, - 0x164c: 0x063b, 0x164d: 0x1769, 0x164e: 0x1023, 0x164f: 0x102b, 0x1650: 0x1037, 0x1651: 0x063f, - 0x1652: 0x176e, 0x1653: 0x105b, 0x1654: 0x1773, 0x1655: 0x1778, 0x1656: 0x107b, 0x1657: 0x1093, - 0x1658: 0x0643, 0x1659: 0x109b, 0x165a: 0x109f, 0x165b: 0x10a3, 0x165c: 0x177d, 0x165d: 0x1782, - 0x165e: 0x1782, 0x165f: 0x10bb, 0x1660: 0x0647, 0x1661: 0x1787, 0x1662: 0x10cf, 0x1663: 0x10d3, - 0x1664: 0x064b, 0x1665: 0x178c, 0x1666: 0x10ef, 0x1667: 0x064f, 0x1668: 0x10ff, 0x1669: 0x10f7, - 0x166a: 0x1107, 0x166b: 0x1796, 0x166c: 0x111f, 0x166d: 0x0653, 0x166e: 0x112b, 0x166f: 0x1133, - 0x1670: 0x1143, 0x1671: 0x0657, 0x1672: 0x17a0, 0x1673: 0x17a5, 0x1674: 0x065b, 0x1675: 0x17aa, - 0x1676: 0x115b, 0x1677: 0x17af, 0x1678: 0x1167, 0x1679: 0x1173, 0x167a: 0x117b, 0x167b: 0x17b4, - 0x167c: 0x17b9, 0x167d: 0x118f, 0x167e: 0x17be, 0x167f: 0x1197, - // Block 0x5a, offset 0x1680 - 0x1680: 0x16ce, 0x1681: 0x065f, 0x1682: 0x11af, 0x1683: 0x11b3, 0x1684: 0x0667, 0x1685: 0x11b7, - 0x1686: 0x0a33, 0x1687: 0x17c3, 0x1688: 0x17c8, 0x1689: 0x16d3, 0x168a: 0x16d8, 0x168b: 0x11d7, - 0x168c: 0x11db, 0x168d: 0x13f3, 0x168e: 0x066b, 0x168f: 0x1207, 0x1690: 0x1203, 0x1691: 0x120b, - 0x1692: 0x083f, 0x1693: 0x120f, 0x1694: 0x1213, 0x1695: 0x1217, 0x1696: 0x121f, 0x1697: 0x17cd, - 0x1698: 0x121b, 0x1699: 0x1223, 0x169a: 0x1237, 0x169b: 0x123b, 0x169c: 0x1227, 0x169d: 0x123f, - 0x169e: 0x1253, 0x169f: 0x1267, 0x16a0: 0x1233, 0x16a1: 0x1247, 0x16a2: 0x124b, 0x16a3: 0x124f, - 0x16a4: 0x17d2, 0x16a5: 0x17dc, 0x16a6: 0x17d7, 0x16a7: 0x066f, 0x16a8: 0x126f, 0x16a9: 0x1273, - 0x16aa: 0x127b, 0x16ab: 0x17f0, 0x16ac: 0x127f, 0x16ad: 0x17e1, 0x16ae: 0x0673, 0x16af: 0x0677, - 0x16b0: 0x17e6, 0x16b1: 0x17eb, 0x16b2: 0x067b, 0x16b3: 0x129f, 0x16b4: 0x12a3, 0x16b5: 0x12a7, - 0x16b6: 0x12ab, 0x16b7: 0x12b7, 0x16b8: 0x12b3, 0x16b9: 0x12bf, 0x16ba: 0x12bb, 0x16bb: 0x12cb, - 0x16bc: 0x12c3, 0x16bd: 0x12c7, 0x16be: 0x12cf, 0x16bf: 0x067f, - // Block 0x5b, offset 0x16c0 - 0x16c0: 0x12d7, 0x16c1: 0x12db, 0x16c2: 0x0683, 0x16c3: 0x12eb, 0x16c4: 0x12ef, 0x16c5: 0x17f5, - 0x16c6: 0x12fb, 0x16c7: 0x12ff, 0x16c8: 0x0687, 0x16c9: 0x130b, 0x16ca: 0x05bb, 0x16cb: 0x17fa, - 0x16cc: 0x17ff, 0x16cd: 0x068b, 0x16ce: 0x068f, 0x16cf: 0x1337, 0x16d0: 0x134f, 0x16d1: 0x136b, - 0x16d2: 0x137b, 0x16d3: 0x1804, 0x16d4: 0x138f, 0x16d5: 0x1393, 0x16d6: 0x13ab, 0x16d7: 0x13b7, - 0x16d8: 0x180e, 0x16d9: 0x1660, 0x16da: 0x13c3, 0x16db: 0x13bf, 0x16dc: 0x13cb, 0x16dd: 0x1665, - 0x16de: 0x13d7, 0x16df: 0x13e3, 0x16e0: 0x1813, 0x16e1: 0x1818, 0x16e2: 0x1423, 0x16e3: 0x142f, - 0x16e4: 0x1437, 0x16e5: 0x181d, 0x16e6: 0x143b, 0x16e7: 0x1467, 0x16e8: 0x1473, 0x16e9: 0x1477, - 0x16ea: 0x146f, 0x16eb: 0x1483, 0x16ec: 0x1487, 0x16ed: 0x1822, 0x16ee: 0x1493, 0x16ef: 0x0693, - 0x16f0: 0x149b, 0x16f1: 0x1827, 0x16f2: 0x0697, 0x16f3: 0x14d3, 0x16f4: 0x0ac3, 0x16f5: 0x14eb, - 0x16f6: 0x182c, 0x16f7: 0x1836, 0x16f8: 0x069b, 0x16f9: 0x069f, 0x16fa: 0x1513, 0x16fb: 0x183b, - 0x16fc: 0x06a3, 0x16fd: 0x1840, 0x16fe: 0x152b, 0x16ff: 0x152b, - // Block 0x5c, offset 0x1700 - 0x1700: 0x1533, 0x1701: 0x1845, 0x1702: 0x154b, 0x1703: 0x06a7, 0x1704: 0x155b, 0x1705: 0x1567, - 0x1706: 0x156f, 0x1707: 0x1577, 0x1708: 0x06ab, 0x1709: 0x184a, 0x170a: 0x158b, 0x170b: 0x15a7, - 0x170c: 0x15b3, 0x170d: 0x06af, 0x170e: 0x06b3, 0x170f: 0x15b7, 0x1710: 0x184f, 0x1711: 0x06b7, - 0x1712: 0x1854, 0x1713: 0x1859, 0x1714: 0x185e, 0x1715: 0x15db, 0x1716: 0x06bb, 0x1717: 0x15ef, - 0x1718: 0x15f7, 0x1719: 0x15fb, 0x171a: 0x1603, 0x171b: 0x160b, 0x171c: 0x1613, 0x171d: 0x1868, -} - -// nfkcIndex: 22 blocks, 1408 entries, 1408 bytes -// Block 0 is the zero block. -var nfkcIndex = [1408]uint8{ - // Block 0x0, offset 0x0 - // Block 0x1, offset 0x40 - // Block 0x2, offset 0x80 - // Block 0x3, offset 0xc0 - 0xc2: 0x5b, 0xc3: 0x01, 0xc4: 0x02, 0xc5: 0x03, 0xc6: 0x5c, 0xc7: 0x04, - 0xc8: 0x05, 0xca: 0x5d, 0xcb: 0x5e, 0xcc: 0x06, 0xcd: 0x07, 0xce: 0x08, 0xcf: 0x09, - 0xd0: 0x0a, 0xd1: 0x5f, 0xd2: 0x60, 0xd3: 0x0b, 0xd6: 0x0c, 0xd7: 0x61, - 0xd8: 0x62, 0xd9: 0x0d, 0xdb: 0x63, 0xdc: 0x64, 0xdd: 0x65, 0xdf: 0x66, - 0xe0: 0x02, 0xe1: 0x03, 0xe2: 0x04, 0xe3: 0x05, - 0xea: 0x06, 0xeb: 0x07, 0xec: 0x08, 0xed: 0x09, 0xef: 0x0a, - 0xf0: 0x13, - // Block 0x4, offset 0x100 - 0x120: 0x67, 0x121: 0x68, 0x123: 0x69, 0x124: 0x6a, 0x125: 0x6b, 0x126: 0x6c, 0x127: 0x6d, - 0x128: 0x6e, 0x129: 0x6f, 0x12a: 0x70, 0x12b: 0x71, 0x12c: 0x6c, 0x12d: 0x72, 0x12e: 0x73, 0x12f: 0x74, - 0x131: 0x75, 0x132: 0x76, 0x133: 0x77, 0x134: 0x78, 0x135: 0x79, 0x137: 0x7a, - 0x138: 0x7b, 0x139: 0x7c, 0x13a: 0x7d, 0x13b: 0x7e, 0x13c: 0x7f, 0x13d: 0x80, 0x13e: 0x81, 0x13f: 0x82, - // Block 0x5, offset 0x140 - 0x140: 0x83, 0x142: 0x84, 0x143: 0x85, 0x144: 0x86, 0x145: 0x87, 0x146: 0x88, 0x147: 0x89, - 0x14d: 0x8a, - 0x15c: 0x8b, 0x15f: 0x8c, - 0x162: 0x8d, 0x164: 0x8e, - 0x168: 0x8f, 0x169: 0x90, 0x16a: 0x91, 0x16c: 0x0e, 0x16d: 0x92, 0x16e: 0x93, 0x16f: 0x94, - 0x170: 0x95, 0x173: 0x96, 0x174: 0x97, 0x175: 0x0f, 0x176: 0x10, 0x177: 0x11, - 0x178: 0x12, 0x179: 0x13, 0x17a: 0x14, 0x17b: 0x15, 0x17c: 0x16, 0x17d: 0x17, 0x17e: 0x18, 0x17f: 0x19, - // Block 0x6, offset 0x180 - 0x180: 0x98, 0x181: 0x99, 0x182: 0x9a, 0x183: 0x9b, 0x184: 0x1a, 0x185: 0x1b, 0x186: 0x9c, 0x187: 0x9d, - 0x188: 0x9e, 0x189: 0x1c, 0x18a: 0x1d, 0x18b: 0x9f, 0x18c: 0xa0, - 0x191: 0x1e, 0x192: 0x1f, 0x193: 0xa1, - 0x1a8: 0xa2, 0x1a9: 0xa3, 0x1ab: 0xa4, - 0x1b1: 0xa5, 0x1b3: 0xa6, 0x1b5: 0xa7, 0x1b7: 0xa8, - 0x1ba: 0xa9, 0x1bb: 0xaa, 0x1bc: 0x20, 0x1bd: 0x21, 0x1be: 0x22, 0x1bf: 0xab, - // Block 0x7, offset 0x1c0 - 0x1c0: 0xac, 0x1c1: 0x23, 0x1c2: 0x24, 0x1c3: 0x25, 0x1c4: 0xad, 0x1c5: 0x26, 0x1c6: 0x27, - 0x1c8: 0x28, 0x1c9: 0x29, 0x1ca: 0x2a, 0x1cb: 0x2b, 0x1cc: 0x2c, 0x1cd: 0x2d, 0x1ce: 0x2e, 0x1cf: 0x2f, - // Block 0x8, offset 0x200 - 0x219: 0xae, 0x21a: 0xaf, 0x21b: 0xb0, 0x21d: 0xb1, 0x21f: 0xb2, - 0x220: 0xb3, 0x223: 0xb4, 0x224: 0xb5, 0x225: 0xb6, 0x226: 0xb7, 0x227: 0xb8, - 0x22a: 0xb9, 0x22b: 0xba, 0x22d: 0xbb, 0x22f: 0xbc, - 0x230: 0xbd, 0x231: 0xbe, 0x232: 0xbf, 0x233: 0xc0, 0x234: 0xc1, 0x235: 0xc2, 0x236: 0xc3, 0x237: 0xbd, - 0x238: 0xbe, 0x239: 0xbf, 0x23a: 0xc0, 0x23b: 0xc1, 0x23c: 0xc2, 0x23d: 0xc3, 0x23e: 0xbd, 0x23f: 0xbe, - // Block 0x9, offset 0x240 - 0x240: 0xbf, 0x241: 0xc0, 0x242: 0xc1, 0x243: 0xc2, 0x244: 0xc3, 0x245: 0xbd, 0x246: 0xbe, 0x247: 0xbf, - 0x248: 0xc0, 0x249: 0xc1, 0x24a: 0xc2, 0x24b: 0xc3, 0x24c: 0xbd, 0x24d: 0xbe, 0x24e: 0xbf, 0x24f: 0xc0, - 0x250: 0xc1, 0x251: 0xc2, 0x252: 0xc3, 0x253: 0xbd, 0x254: 0xbe, 0x255: 0xbf, 0x256: 0xc0, 0x257: 0xc1, - 0x258: 0xc2, 0x259: 0xc3, 0x25a: 0xbd, 0x25b: 0xbe, 0x25c: 0xbf, 0x25d: 0xc0, 0x25e: 0xc1, 0x25f: 0xc2, - 0x260: 0xc3, 0x261: 0xbd, 0x262: 0xbe, 0x263: 0xbf, 0x264: 0xc0, 0x265: 0xc1, 0x266: 0xc2, 0x267: 0xc3, - 0x268: 0xbd, 0x269: 0xbe, 0x26a: 0xbf, 0x26b: 0xc0, 0x26c: 0xc1, 0x26d: 0xc2, 0x26e: 0xc3, 0x26f: 0xbd, - 0x270: 0xbe, 0x271: 0xbf, 0x272: 0xc0, 0x273: 0xc1, 0x274: 0xc2, 0x275: 0xc3, 0x276: 0xbd, 0x277: 0xbe, - 0x278: 0xbf, 0x279: 0xc0, 0x27a: 0xc1, 0x27b: 0xc2, 0x27c: 0xc3, 0x27d: 0xbd, 0x27e: 0xbe, 0x27f: 0xbf, - // Block 0xa, offset 0x280 - 0x280: 0xc0, 0x281: 0xc1, 0x282: 0xc2, 0x283: 0xc3, 0x284: 0xbd, 0x285: 0xbe, 0x286: 0xbf, 0x287: 0xc0, - 0x288: 0xc1, 0x289: 0xc2, 0x28a: 0xc3, 0x28b: 0xbd, 0x28c: 0xbe, 0x28d: 0xbf, 0x28e: 0xc0, 0x28f: 0xc1, - 0x290: 0xc2, 0x291: 0xc3, 0x292: 0xbd, 0x293: 0xbe, 0x294: 0xbf, 0x295: 0xc0, 0x296: 0xc1, 0x297: 0xc2, - 0x298: 0xc3, 0x299: 0xbd, 0x29a: 0xbe, 0x29b: 0xbf, 0x29c: 0xc0, 0x29d: 0xc1, 0x29e: 0xc2, 0x29f: 0xc3, - 0x2a0: 0xbd, 0x2a1: 0xbe, 0x2a2: 0xbf, 0x2a3: 0xc0, 0x2a4: 0xc1, 0x2a5: 0xc2, 0x2a6: 0xc3, 0x2a7: 0xbd, - 0x2a8: 0xbe, 0x2a9: 0xbf, 0x2aa: 0xc0, 0x2ab: 0xc1, 0x2ac: 0xc2, 0x2ad: 0xc3, 0x2ae: 0xbd, 0x2af: 0xbe, - 0x2b0: 0xbf, 0x2b1: 0xc0, 0x2b2: 0xc1, 0x2b3: 0xc2, 0x2b4: 0xc3, 0x2b5: 0xbd, 0x2b6: 0xbe, 0x2b7: 0xbf, - 0x2b8: 0xc0, 0x2b9: 0xc1, 0x2ba: 0xc2, 0x2bb: 0xc3, 0x2bc: 0xbd, 0x2bd: 0xbe, 0x2be: 0xbf, 0x2bf: 0xc0, - // Block 0xb, offset 0x2c0 - 0x2c0: 0xc1, 0x2c1: 0xc2, 0x2c2: 0xc3, 0x2c3: 0xbd, 0x2c4: 0xbe, 0x2c5: 0xbf, 0x2c6: 0xc0, 0x2c7: 0xc1, - 0x2c8: 0xc2, 0x2c9: 0xc3, 0x2ca: 0xbd, 0x2cb: 0xbe, 0x2cc: 0xbf, 0x2cd: 0xc0, 0x2ce: 0xc1, 0x2cf: 0xc2, - 0x2d0: 0xc3, 0x2d1: 0xbd, 0x2d2: 0xbe, 0x2d3: 0xbf, 0x2d4: 0xc0, 0x2d5: 0xc1, 0x2d6: 0xc2, 0x2d7: 0xc3, - 0x2d8: 0xbd, 0x2d9: 0xbe, 0x2da: 0xbf, 0x2db: 0xc0, 0x2dc: 0xc1, 0x2dd: 0xc2, 0x2de: 0xc4, - // Block 0xc, offset 0x300 - 0x324: 0x30, 0x325: 0x31, 0x326: 0x32, 0x327: 0x33, - 0x328: 0x34, 0x329: 0x35, 0x32a: 0x36, 0x32b: 0x37, 0x32c: 0x38, 0x32d: 0x39, 0x32e: 0x3a, 0x32f: 0x3b, - 0x330: 0x3c, 0x331: 0x3d, 0x332: 0x3e, 0x333: 0x3f, 0x334: 0x40, 0x335: 0x41, 0x336: 0x42, 0x337: 0x43, - 0x338: 0x44, 0x339: 0x45, 0x33a: 0x46, 0x33b: 0x47, 0x33c: 0xc5, 0x33d: 0x48, 0x33e: 0x49, 0x33f: 0x4a, - // Block 0xd, offset 0x340 - 0x347: 0xc6, - 0x34b: 0xc7, 0x34d: 0xc8, - 0x368: 0xc9, 0x36b: 0xca, - // Block 0xe, offset 0x380 - 0x381: 0xcb, 0x382: 0xcc, 0x384: 0xcd, 0x385: 0xb7, 0x387: 0xce, - 0x388: 0xcf, 0x38b: 0xd0, 0x38c: 0x6c, 0x38d: 0xd1, - 0x391: 0xd2, 0x392: 0xd3, 0x393: 0xd4, 0x396: 0xd5, 0x397: 0xd6, - 0x398: 0xd7, 0x39a: 0xd8, 0x39c: 0xd9, - 0x3a8: 0xda, 0x3a9: 0xdb, 0x3aa: 0xdc, - 0x3b0: 0xd7, 0x3b5: 0xdd, - // Block 0xf, offset 0x3c0 - 0x3eb: 0xde, 0x3ec: 0xdf, - // Block 0x10, offset 0x400 - 0x432: 0xe0, - // Block 0x11, offset 0x440 - 0x445: 0xe1, 0x446: 0xe2, 0x447: 0xe3, - 0x449: 0xe4, - 0x450: 0xe5, 0x451: 0xe6, 0x452: 0xe7, 0x453: 0xe8, 0x454: 0xe9, 0x455: 0xea, 0x456: 0xeb, 0x457: 0xec, - 0x458: 0xed, 0x459: 0xee, 0x45a: 0x4b, 0x45b: 0xef, 0x45c: 0xf0, 0x45d: 0xf1, 0x45e: 0xf2, 0x45f: 0x4c, - // Block 0x12, offset 0x480 - 0x480: 0xf3, - 0x4a3: 0xf4, 0x4a5: 0xf5, - 0x4b8: 0x4d, 0x4b9: 0x4e, 0x4ba: 0x4f, - // Block 0x13, offset 0x4c0 - 0x4c4: 0x50, 0x4c5: 0xf6, 0x4c6: 0xf7, - 0x4c8: 0x51, 0x4c9: 0xf8, - // Block 0x14, offset 0x500 - 0x520: 0x52, 0x521: 0x53, 0x522: 0x54, 0x523: 0x55, 0x524: 0x56, 0x525: 0x57, 0x526: 0x58, 0x527: 0x59, - 0x528: 0x5a, - // Block 0x15, offset 0x540 - 0x550: 0x0b, 0x551: 0x0c, 0x556: 0x0d, - 0x55b: 0x0e, 0x55d: 0x0f, 0x55e: 0x10, 0x55f: 0x11, - 0x56f: 0x12, -} - -// nfkcSparseOffset: 158 entries, 316 bytes -var nfkcSparseOffset = []uint16{0x0, 0xe, 0x12, 0x1b, 0x25, 0x35, 0x37, 0x3c, 0x47, 0x56, 0x63, 0x6b, 0x6f, 0x74, 0x76, 0x87, 0x8f, 0x96, 0x99, 0xa0, 0xa4, 0xa8, 0xaa, 0xac, 0xb5, 0xb9, 0xc0, 0xc5, 0xc8, 0xd2, 0xd5, 0xdc, 0xe4, 0xe8, 0xea, 0xed, 0xf1, 0xf7, 0x108, 0x114, 0x116, 0x11c, 0x11e, 0x120, 0x122, 0x124, 0x126, 0x128, 0x12a, 0x12d, 0x130, 0x132, 0x135, 0x138, 0x13c, 0x141, 0x14a, 0x14c, 0x14f, 0x151, 0x15c, 0x167, 0x175, 0x183, 0x193, 0x1a1, 0x1a8, 0x1ae, 0x1bd, 0x1c1, 0x1c3, 0x1c7, 0x1c9, 0x1cc, 0x1ce, 0x1d1, 0x1d3, 0x1d6, 0x1d8, 0x1da, 0x1dc, 0x1e8, 0x1f2, 0x1fc, 0x1ff, 0x203, 0x205, 0x207, 0x209, 0x20b, 0x20e, 0x210, 0x212, 0x214, 0x216, 0x21c, 0x21f, 0x223, 0x225, 0x22c, 0x232, 0x238, 0x240, 0x246, 0x24c, 0x252, 0x256, 0x258, 0x25a, 0x25c, 0x25e, 0x264, 0x267, 0x26a, 0x272, 0x279, 0x27c, 0x27f, 0x281, 0x289, 0x28c, 0x293, 0x296, 0x29c, 0x29e, 0x2a0, 0x2a3, 0x2a5, 0x2a7, 0x2a9, 0x2ab, 0x2ae, 0x2b0, 0x2b2, 0x2b4, 0x2c1, 0x2cb, 0x2cd, 0x2cf, 0x2d3, 0x2d8, 0x2e4, 0x2e9, 0x2f2, 0x2f8, 0x2fd, 0x301, 0x306, 0x30a, 0x31a, 0x328, 0x336, 0x344, 0x34a, 0x34c, 0x34f, 0x359, 0x35b} - -// nfkcSparseValues: 869 entries, 3476 bytes -var nfkcSparseValues = [869]valueRange{ - // Block 0x0, offset 0x0 - {value: 0x0002, lo: 0x0d}, - {value: 0x0001, lo: 0xa0, hi: 0xa0}, - {value: 0x4278, lo: 0xa8, hi: 0xa8}, - {value: 0x0083, lo: 0xaa, hi: 0xaa}, - {value: 0x4264, lo: 0xaf, hi: 0xaf}, - {value: 0x0025, lo: 0xb2, hi: 0xb3}, - {value: 0x425a, lo: 0xb4, hi: 0xb4}, - {value: 0x01dc, lo: 0xb5, hi: 0xb5}, - {value: 0x4291, lo: 0xb8, hi: 0xb8}, - {value: 0x0023, lo: 0xb9, hi: 0xb9}, - {value: 0x009f, lo: 0xba, hi: 0xba}, - {value: 0x221c, lo: 0xbc, hi: 0xbc}, - {value: 0x2210, lo: 0xbd, hi: 0xbd}, - {value: 0x22b2, lo: 0xbe, hi: 0xbe}, - // Block 0x1, offset 0xe - {value: 0x0091, lo: 0x03}, - {value: 0x46e2, lo: 0xa0, hi: 0xa1}, - {value: 0x4714, lo: 0xaf, hi: 0xb0}, - {value: 0xa000, lo: 0xb7, hi: 0xb7}, - // Block 0x2, offset 0x12 - {value: 0x0003, lo: 0x08}, - {value: 0xa000, lo: 0x92, hi: 0x92}, - {value: 0x0091, lo: 0xb0, hi: 0xb0}, - {value: 0x0119, lo: 0xb1, hi: 0xb1}, - {value: 0x0095, lo: 0xb2, hi: 0xb2}, - {value: 0x00a5, lo: 0xb3, hi: 0xb3}, - {value: 0x0143, lo: 0xb4, hi: 0xb6}, - {value: 0x00af, lo: 0xb7, hi: 0xb7}, - {value: 0x00b3, lo: 0xb8, hi: 0xb8}, - // Block 0x3, offset 0x1b - {value: 0x000a, lo: 0x09}, - {value: 0x426e, lo: 0x98, hi: 0x98}, - {value: 0x4273, lo: 0x99, hi: 0x9a}, - {value: 0x4296, lo: 0x9b, hi: 0x9b}, - {value: 0x425f, lo: 0x9c, hi: 0x9c}, - {value: 0x4282, lo: 0x9d, hi: 0x9d}, - {value: 0x0113, lo: 0xa0, hi: 0xa0}, - {value: 0x0099, lo: 0xa1, hi: 0xa1}, - {value: 0x00a7, lo: 0xa2, hi: 0xa3}, - {value: 0x0167, lo: 0xa4, hi: 0xa4}, - // Block 0x4, offset 0x25 - {value: 0x0000, lo: 0x0f}, - {value: 0xa000, lo: 0x83, hi: 0x83}, - {value: 0xa000, lo: 0x87, hi: 0x87}, - {value: 0xa000, lo: 0x8b, hi: 0x8b}, - {value: 0xa000, lo: 0x8d, hi: 0x8d}, - {value: 0x37a5, lo: 0x90, hi: 0x90}, - {value: 0x37b1, lo: 0x91, hi: 0x91}, - {value: 0x379f, lo: 0x93, hi: 0x93}, - {value: 0xa000, lo: 0x96, hi: 0x96}, - {value: 0x3817, lo: 0x97, hi: 0x97}, - {value: 0x37e1, lo: 0x9c, hi: 0x9c}, - {value: 0x37c9, lo: 0x9d, hi: 0x9d}, - {value: 0x37f3, lo: 0x9e, hi: 0x9e}, - {value: 0xa000, lo: 0xb4, hi: 0xb5}, - {value: 0x381d, lo: 0xb6, hi: 0xb6}, - {value: 0x3823, lo: 0xb7, hi: 0xb7}, - // Block 0x5, offset 0x35 - {value: 0x0000, lo: 0x01}, - {value: 0x8132, lo: 0x83, hi: 0x87}, - // Block 0x6, offset 0x37 - {value: 0x0001, lo: 0x04}, - {value: 0x8113, lo: 0x81, hi: 0x82}, - {value: 0x8132, lo: 0x84, hi: 0x84}, - {value: 0x812d, lo: 0x85, hi: 0x85}, - {value: 0x810d, lo: 0x87, hi: 0x87}, - // Block 0x7, offset 0x3c - {value: 0x0000, lo: 0x0a}, - {value: 0x8132, lo: 0x90, hi: 0x97}, - {value: 0x8119, lo: 0x98, hi: 0x98}, - {value: 0x811a, lo: 0x99, hi: 0x99}, - {value: 0x811b, lo: 0x9a, hi: 0x9a}, - {value: 0x3841, lo: 0xa2, hi: 0xa2}, - {value: 0x3847, lo: 0xa3, hi: 0xa3}, - {value: 0x3853, lo: 0xa4, hi: 0xa4}, - {value: 0x384d, lo: 0xa5, hi: 0xa5}, - {value: 0x3859, lo: 0xa6, hi: 0xa6}, - {value: 0xa000, lo: 0xa7, hi: 0xa7}, - // Block 0x8, offset 0x47 - {value: 0x0000, lo: 0x0e}, - {value: 0x386b, lo: 0x80, hi: 0x80}, - {value: 0xa000, lo: 0x81, hi: 0x81}, - {value: 0x385f, lo: 0x82, hi: 0x82}, - {value: 0xa000, lo: 0x92, hi: 0x92}, - {value: 0x3865, lo: 0x93, hi: 0x93}, - {value: 0xa000, lo: 0x95, hi: 0x95}, - {value: 0x8132, lo: 0x96, hi: 0x9c}, - {value: 0x8132, lo: 0x9f, hi: 0xa2}, - {value: 0x812d, lo: 0xa3, hi: 0xa3}, - {value: 0x8132, lo: 0xa4, hi: 0xa4}, - {value: 0x8132, lo: 0xa7, hi: 0xa8}, - {value: 0x812d, lo: 0xaa, hi: 0xaa}, - {value: 0x8132, lo: 0xab, hi: 0xac}, - {value: 0x812d, lo: 0xad, hi: 0xad}, - // Block 0x9, offset 0x56 - {value: 0x0000, lo: 0x0c}, - {value: 0x811f, lo: 0x91, hi: 0x91}, - {value: 0x8132, lo: 0xb0, hi: 0xb0}, - {value: 0x812d, lo: 0xb1, hi: 0xb1}, - {value: 0x8132, lo: 0xb2, hi: 0xb3}, - {value: 0x812d, lo: 0xb4, hi: 0xb4}, - {value: 0x8132, lo: 0xb5, hi: 0xb6}, - {value: 0x812d, lo: 0xb7, hi: 0xb9}, - {value: 0x8132, lo: 0xba, hi: 0xba}, - {value: 0x812d, lo: 0xbb, hi: 0xbc}, - {value: 0x8132, lo: 0xbd, hi: 0xbd}, - {value: 0x812d, lo: 0xbe, hi: 0xbe}, - {value: 0x8132, lo: 0xbf, hi: 0xbf}, - // Block 0xa, offset 0x63 - {value: 0x0005, lo: 0x07}, - {value: 0x8132, lo: 0x80, hi: 0x80}, - {value: 0x8132, lo: 0x81, hi: 0x81}, - {value: 0x812d, lo: 0x82, hi: 0x83}, - {value: 0x812d, lo: 0x84, hi: 0x85}, - {value: 0x812d, lo: 0x86, hi: 0x87}, - {value: 0x812d, lo: 0x88, hi: 0x89}, - {value: 0x8132, lo: 0x8a, hi: 0x8a}, - // Block 0xb, offset 0x6b - {value: 0x0000, lo: 0x03}, - {value: 0x8132, lo: 0xab, hi: 0xb1}, - {value: 0x812d, lo: 0xb2, hi: 0xb2}, - {value: 0x8132, lo: 0xb3, hi: 0xb3}, - // Block 0xc, offset 0x6f - {value: 0x0000, lo: 0x04}, - {value: 0x8132, lo: 0x96, hi: 0x99}, - {value: 0x8132, lo: 0x9b, hi: 0xa3}, - {value: 0x8132, lo: 0xa5, hi: 0xa7}, - {value: 0x8132, lo: 0xa9, hi: 0xad}, - // Block 0xd, offset 0x74 - {value: 0x0000, lo: 0x01}, - {value: 0x812d, lo: 0x99, hi: 0x9b}, - // Block 0xe, offset 0x76 - {value: 0x0000, lo: 0x10}, - {value: 0x8132, lo: 0x94, hi: 0xa1}, - {value: 0x812d, lo: 0xa3, hi: 0xa3}, - {value: 0x8132, lo: 0xa4, hi: 0xa5}, - {value: 0x812d, lo: 0xa6, hi: 0xa6}, - {value: 0x8132, lo: 0xa7, hi: 0xa8}, - {value: 0x812d, lo: 0xa9, hi: 0xa9}, - {value: 0x8132, lo: 0xaa, hi: 0xac}, - {value: 0x812d, lo: 0xad, hi: 0xaf}, - {value: 0x8116, lo: 0xb0, hi: 0xb0}, - {value: 0x8117, lo: 0xb1, hi: 0xb1}, - {value: 0x8118, lo: 0xb2, hi: 0xb2}, - {value: 0x8132, lo: 0xb3, hi: 0xb5}, - {value: 0x812d, lo: 0xb6, hi: 0xb6}, - {value: 0x8132, lo: 0xb7, hi: 0xb8}, - {value: 0x812d, lo: 0xb9, hi: 0xba}, - {value: 0x8132, lo: 0xbb, hi: 0xbf}, - // Block 0xf, offset 0x87 - {value: 0x0000, lo: 0x07}, - {value: 0xa000, lo: 0xa8, hi: 0xa8}, - {value: 0x3ed8, lo: 0xa9, hi: 0xa9}, - {value: 0xa000, lo: 0xb0, hi: 0xb0}, - {value: 0x3ee0, lo: 0xb1, hi: 0xb1}, - {value: 0xa000, lo: 0xb3, hi: 0xb3}, - {value: 0x3ee8, lo: 0xb4, hi: 0xb4}, - {value: 0x9902, lo: 0xbc, hi: 0xbc}, - // Block 0x10, offset 0x8f - {value: 0x0008, lo: 0x06}, - {value: 0x8104, lo: 0x8d, hi: 0x8d}, - {value: 0x8132, lo: 0x91, hi: 0x91}, - {value: 0x812d, lo: 0x92, hi: 0x92}, - {value: 0x8132, lo: 0x93, hi: 0x93}, - {value: 0x8132, lo: 0x94, hi: 0x94}, - {value: 0x451c, lo: 0x98, hi: 0x9f}, - // Block 0x11, offset 0x96 - {value: 0x0000, lo: 0x02}, - {value: 0x8102, lo: 0xbc, hi: 0xbc}, - {value: 0x9900, lo: 0xbe, hi: 0xbe}, - // Block 0x12, offset 0x99 - {value: 0x0008, lo: 0x06}, - {value: 0xa000, lo: 0x87, hi: 0x87}, - {value: 0x2c9e, lo: 0x8b, hi: 0x8c}, - {value: 0x8104, lo: 0x8d, hi: 0x8d}, - {value: 0x9900, lo: 0x97, hi: 0x97}, - {value: 0x455c, lo: 0x9c, hi: 0x9d}, - {value: 0x456c, lo: 0x9f, hi: 0x9f}, - // Block 0x13, offset 0xa0 - {value: 0x0000, lo: 0x03}, - {value: 0x4594, lo: 0xb3, hi: 0xb3}, - {value: 0x459c, lo: 0xb6, hi: 0xb6}, - {value: 0x8102, lo: 0xbc, hi: 0xbc}, - // Block 0x14, offset 0xa4 - {value: 0x0008, lo: 0x03}, - {value: 0x8104, lo: 0x8d, hi: 0x8d}, - {value: 0x4574, lo: 0x99, hi: 0x9b}, - {value: 0x458c, lo: 0x9e, hi: 0x9e}, - // Block 0x15, offset 0xa8 - {value: 0x0000, lo: 0x01}, - {value: 0x8102, lo: 0xbc, hi: 0xbc}, - // Block 0x16, offset 0xaa - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0x8d, hi: 0x8d}, - // Block 0x17, offset 0xac - {value: 0x0000, lo: 0x08}, - {value: 0xa000, lo: 0x87, hi: 0x87}, - {value: 0x2cb6, lo: 0x88, hi: 0x88}, - {value: 0x2cae, lo: 0x8b, hi: 0x8b}, - {value: 0x2cbe, lo: 0x8c, hi: 0x8c}, - {value: 0x8104, lo: 0x8d, hi: 0x8d}, - {value: 0x9900, lo: 0x96, hi: 0x97}, - {value: 0x45a4, lo: 0x9c, hi: 0x9c}, - {value: 0x45ac, lo: 0x9d, hi: 0x9d}, - // Block 0x18, offset 0xb5 - {value: 0x0000, lo: 0x03}, - {value: 0xa000, lo: 0x92, hi: 0x92}, - {value: 0x2cc6, lo: 0x94, hi: 0x94}, - {value: 0x9900, lo: 0xbe, hi: 0xbe}, - // Block 0x19, offset 0xb9 - {value: 0x0000, lo: 0x06}, - {value: 0xa000, lo: 0x86, hi: 0x87}, - {value: 0x2cce, lo: 0x8a, hi: 0x8a}, - {value: 0x2cde, lo: 0x8b, hi: 0x8b}, - {value: 0x2cd6, lo: 0x8c, hi: 0x8c}, - {value: 0x8104, lo: 0x8d, hi: 0x8d}, - {value: 0x9900, lo: 0x97, hi: 0x97}, - // Block 0x1a, offset 0xc0 - {value: 0x1801, lo: 0x04}, - {value: 0xa000, lo: 0x86, hi: 0x86}, - {value: 0x3ef0, lo: 0x88, hi: 0x88}, - {value: 0x8104, lo: 0x8d, hi: 0x8d}, - {value: 0x8120, lo: 0x95, hi: 0x96}, - // Block 0x1b, offset 0xc5 - {value: 0x0000, lo: 0x02}, - {value: 0x8102, lo: 0xbc, hi: 0xbc}, - {value: 0xa000, lo: 0xbf, hi: 0xbf}, - // Block 0x1c, offset 0xc8 - {value: 0x0000, lo: 0x09}, - {value: 0x2ce6, lo: 0x80, hi: 0x80}, - {value: 0x9900, lo: 0x82, hi: 0x82}, - {value: 0xa000, lo: 0x86, hi: 0x86}, - {value: 0x2cee, lo: 0x87, hi: 0x87}, - {value: 0x2cf6, lo: 0x88, hi: 0x88}, - {value: 0x2f50, lo: 0x8a, hi: 0x8a}, - {value: 0x2dd8, lo: 0x8b, hi: 0x8b}, - {value: 0x8104, lo: 0x8d, hi: 0x8d}, - {value: 0x9900, lo: 0x95, hi: 0x96}, - // Block 0x1d, offset 0xd2 - {value: 0x0000, lo: 0x02}, - {value: 0x8104, lo: 0xbb, hi: 0xbc}, - {value: 0x9900, lo: 0xbe, hi: 0xbe}, - // Block 0x1e, offset 0xd5 - {value: 0x0000, lo: 0x06}, - {value: 0xa000, lo: 0x86, hi: 0x87}, - {value: 0x2cfe, lo: 0x8a, hi: 0x8a}, - {value: 0x2d0e, lo: 0x8b, hi: 0x8b}, - {value: 0x2d06, lo: 0x8c, hi: 0x8c}, - {value: 0x8104, lo: 0x8d, hi: 0x8d}, - {value: 0x9900, lo: 0x97, hi: 0x97}, - // Block 0x1f, offset 0xdc - {value: 0x6bea, lo: 0x07}, - {value: 0x9904, lo: 0x8a, hi: 0x8a}, - {value: 0x9900, lo: 0x8f, hi: 0x8f}, - {value: 0xa000, lo: 0x99, hi: 0x99}, - {value: 0x3ef8, lo: 0x9a, hi: 0x9a}, - {value: 0x2f58, lo: 0x9c, hi: 0x9c}, - {value: 0x2de3, lo: 0x9d, hi: 0x9d}, - {value: 0x2d16, lo: 0x9e, hi: 0x9f}, - // Block 0x20, offset 0xe4 - {value: 0x0000, lo: 0x03}, - {value: 0x2621, lo: 0xb3, hi: 0xb3}, - {value: 0x8122, lo: 0xb8, hi: 0xb9}, - {value: 0x8104, lo: 0xba, hi: 0xba}, - // Block 0x21, offset 0xe8 - {value: 0x0000, lo: 0x01}, - {value: 0x8123, lo: 0x88, hi: 0x8b}, - // Block 0x22, offset 0xea - {value: 0x0000, lo: 0x02}, - {value: 0x2636, lo: 0xb3, hi: 0xb3}, - {value: 0x8124, lo: 0xb8, hi: 0xb9}, - // Block 0x23, offset 0xed - {value: 0x0000, lo: 0x03}, - {value: 0x8125, lo: 0x88, hi: 0x8b}, - {value: 0x2628, lo: 0x9c, hi: 0x9c}, - {value: 0x262f, lo: 0x9d, hi: 0x9d}, - // Block 0x24, offset 0xf1 - {value: 0x0000, lo: 0x05}, - {value: 0x030b, lo: 0x8c, hi: 0x8c}, - {value: 0x812d, lo: 0x98, hi: 0x99}, - {value: 0x812d, lo: 0xb5, hi: 0xb5}, - {value: 0x812d, lo: 0xb7, hi: 0xb7}, - {value: 0x812b, lo: 0xb9, hi: 0xb9}, - // Block 0x25, offset 0xf7 - {value: 0x0000, lo: 0x10}, - {value: 0x2644, lo: 0x83, hi: 0x83}, - {value: 0x264b, lo: 0x8d, hi: 0x8d}, - {value: 0x2652, lo: 0x92, hi: 0x92}, - {value: 0x2659, lo: 0x97, hi: 0x97}, - {value: 0x2660, lo: 0x9c, hi: 0x9c}, - {value: 0x263d, lo: 0xa9, hi: 0xa9}, - {value: 0x8126, lo: 0xb1, hi: 0xb1}, - {value: 0x8127, lo: 0xb2, hi: 0xb2}, - {value: 0x4a84, lo: 0xb3, hi: 0xb3}, - {value: 0x8128, lo: 0xb4, hi: 0xb4}, - {value: 0x4a8d, lo: 0xb5, hi: 0xb5}, - {value: 0x45b4, lo: 0xb6, hi: 0xb6}, - {value: 0x45f4, lo: 0xb7, hi: 0xb7}, - {value: 0x45bc, lo: 0xb8, hi: 0xb8}, - {value: 0x45ff, lo: 0xb9, hi: 0xb9}, - {value: 0x8127, lo: 0xba, hi: 0xbd}, - // Block 0x26, offset 0x108 - {value: 0x0000, lo: 0x0b}, - {value: 0x8127, lo: 0x80, hi: 0x80}, - {value: 0x4a96, lo: 0x81, hi: 0x81}, - {value: 0x8132, lo: 0x82, hi: 0x83}, - {value: 0x8104, lo: 0x84, hi: 0x84}, - {value: 0x8132, lo: 0x86, hi: 0x87}, - {value: 0x266e, lo: 0x93, hi: 0x93}, - {value: 0x2675, lo: 0x9d, hi: 0x9d}, - {value: 0x267c, lo: 0xa2, hi: 0xa2}, - {value: 0x2683, lo: 0xa7, hi: 0xa7}, - {value: 0x268a, lo: 0xac, hi: 0xac}, - {value: 0x2667, lo: 0xb9, hi: 0xb9}, - // Block 0x27, offset 0x114 - {value: 0x0000, lo: 0x01}, - {value: 0x812d, lo: 0x86, hi: 0x86}, - // Block 0x28, offset 0x116 - {value: 0x0000, lo: 0x05}, - {value: 0xa000, lo: 0xa5, hi: 0xa5}, - {value: 0x2d1e, lo: 0xa6, hi: 0xa6}, - {value: 0x9900, lo: 0xae, hi: 0xae}, - {value: 0x8102, lo: 0xb7, hi: 0xb7}, - {value: 0x8104, lo: 0xb9, hi: 0xba}, - // Block 0x29, offset 0x11c - {value: 0x0000, lo: 0x01}, - {value: 0x812d, lo: 0x8d, hi: 0x8d}, - // Block 0x2a, offset 0x11e - {value: 0x0000, lo: 0x01}, - {value: 0x030f, lo: 0xbc, hi: 0xbc}, - // Block 0x2b, offset 0x120 - {value: 0x0000, lo: 0x01}, - {value: 0xa000, lo: 0x80, hi: 0x92}, - // Block 0x2c, offset 0x122 - {value: 0x0000, lo: 0x01}, - {value: 0xb900, lo: 0xa1, hi: 0xb5}, - // Block 0x2d, offset 0x124 - {value: 0x0000, lo: 0x01}, - {value: 0x9900, lo: 0xa8, hi: 0xbf}, - // Block 0x2e, offset 0x126 - {value: 0x0000, lo: 0x01}, - {value: 0x9900, lo: 0x80, hi: 0x82}, - // Block 0x2f, offset 0x128 - {value: 0x0000, lo: 0x01}, - {value: 0x8132, lo: 0x9d, hi: 0x9f}, - // Block 0x30, offset 0x12a - {value: 0x0000, lo: 0x02}, - {value: 0x8104, lo: 0x94, hi: 0x94}, - {value: 0x8104, lo: 0xb4, hi: 0xb4}, - // Block 0x31, offset 0x12d - {value: 0x0000, lo: 0x02}, - {value: 0x8104, lo: 0x92, hi: 0x92}, - {value: 0x8132, lo: 0x9d, hi: 0x9d}, - // Block 0x32, offset 0x130 - {value: 0x0000, lo: 0x01}, - {value: 0x8131, lo: 0xa9, hi: 0xa9}, - // Block 0x33, offset 0x132 - {value: 0x0004, lo: 0x02}, - {value: 0x812e, lo: 0xb9, hi: 0xba}, - {value: 0x812d, lo: 0xbb, hi: 0xbb}, - // Block 0x34, offset 0x135 - {value: 0x0000, lo: 0x02}, - {value: 0x8132, lo: 0x97, hi: 0x97}, - {value: 0x812d, lo: 0x98, hi: 0x98}, - // Block 0x35, offset 0x138 - {value: 0x0000, lo: 0x03}, - {value: 0x8104, lo: 0xa0, hi: 0xa0}, - {value: 0x8132, lo: 0xb5, hi: 0xbc}, - {value: 0x812d, lo: 0xbf, hi: 0xbf}, - // Block 0x36, offset 0x13c - {value: 0x0000, lo: 0x04}, - {value: 0x8132, lo: 0xb0, hi: 0xb4}, - {value: 0x812d, lo: 0xb5, hi: 0xba}, - {value: 0x8132, lo: 0xbb, hi: 0xbc}, - {value: 0x812d, lo: 0xbd, hi: 0xbd}, - // Block 0x37, offset 0x141 - {value: 0x0000, lo: 0x08}, - {value: 0x2d66, lo: 0x80, hi: 0x80}, - {value: 0x2d6e, lo: 0x81, hi: 0x81}, - {value: 0xa000, lo: 0x82, hi: 0x82}, - {value: 0x2d76, lo: 0x83, hi: 0x83}, - {value: 0x8104, lo: 0x84, hi: 0x84}, - {value: 0x8132, lo: 0xab, hi: 0xab}, - {value: 0x812d, lo: 0xac, hi: 0xac}, - {value: 0x8132, lo: 0xad, hi: 0xb3}, - // Block 0x38, offset 0x14a - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0xaa, hi: 0xab}, - // Block 0x39, offset 0x14c - {value: 0x0000, lo: 0x02}, - {value: 0x8102, lo: 0xa6, hi: 0xa6}, - {value: 0x8104, lo: 0xb2, hi: 0xb3}, - // Block 0x3a, offset 0x14f - {value: 0x0000, lo: 0x01}, - {value: 0x8102, lo: 0xb7, hi: 0xb7}, - // Block 0x3b, offset 0x151 - {value: 0x0000, lo: 0x0a}, - {value: 0x8132, lo: 0x90, hi: 0x92}, - {value: 0x8101, lo: 0x94, hi: 0x94}, - {value: 0x812d, lo: 0x95, hi: 0x99}, - {value: 0x8132, lo: 0x9a, hi: 0x9b}, - {value: 0x812d, lo: 0x9c, hi: 0x9f}, - {value: 0x8132, lo: 0xa0, hi: 0xa0}, - {value: 0x8101, lo: 0xa2, hi: 0xa8}, - {value: 0x812d, lo: 0xad, hi: 0xad}, - {value: 0x8132, lo: 0xb4, hi: 0xb4}, - {value: 0x8132, lo: 0xb8, hi: 0xb9}, - // Block 0x3c, offset 0x15c - {value: 0x0002, lo: 0x0a}, - {value: 0x0043, lo: 0xac, hi: 0xac}, - {value: 0x00d1, lo: 0xad, hi: 0xad}, - {value: 0x0045, lo: 0xae, hi: 0xae}, - {value: 0x0049, lo: 0xb0, hi: 0xb1}, - {value: 0x00e6, lo: 0xb2, hi: 0xb2}, - {value: 0x004f, lo: 0xb3, hi: 0xba}, - {value: 0x005f, lo: 0xbc, hi: 0xbc}, - {value: 0x00ef, lo: 0xbd, hi: 0xbd}, - {value: 0x0061, lo: 0xbe, hi: 0xbe}, - {value: 0x0065, lo: 0xbf, hi: 0xbf}, - // Block 0x3d, offset 0x167 - {value: 0x0000, lo: 0x0d}, - {value: 0x0001, lo: 0x80, hi: 0x8a}, - {value: 0x043b, lo: 0x91, hi: 0x91}, - {value: 0x429b, lo: 0x97, hi: 0x97}, - {value: 0x001d, lo: 0xa4, hi: 0xa4}, - {value: 0x1873, lo: 0xa5, hi: 0xa5}, - {value: 0x1b5c, lo: 0xa6, hi: 0xa6}, - {value: 0x0001, lo: 0xaf, hi: 0xaf}, - {value: 0x2691, lo: 0xb3, hi: 0xb3}, - {value: 0x27fe, lo: 0xb4, hi: 0xb4}, - {value: 0x2698, lo: 0xb6, hi: 0xb6}, - {value: 0x2808, lo: 0xb7, hi: 0xb7}, - {value: 0x186d, lo: 0xbc, hi: 0xbc}, - {value: 0x4269, lo: 0xbe, hi: 0xbe}, - // Block 0x3e, offset 0x175 - {value: 0x0002, lo: 0x0d}, - {value: 0x1933, lo: 0x87, hi: 0x87}, - {value: 0x1930, lo: 0x88, hi: 0x88}, - {value: 0x1870, lo: 0x89, hi: 0x89}, - {value: 0x298e, lo: 0x97, hi: 0x97}, - {value: 0x0001, lo: 0x9f, hi: 0x9f}, - {value: 0x0021, lo: 0xb0, hi: 0xb0}, - {value: 0x0093, lo: 0xb1, hi: 0xb1}, - {value: 0x0029, lo: 0xb4, hi: 0xb9}, - {value: 0x0017, lo: 0xba, hi: 0xba}, - {value: 0x0467, lo: 0xbb, hi: 0xbb}, - {value: 0x003b, lo: 0xbc, hi: 0xbc}, - {value: 0x0011, lo: 0xbd, hi: 0xbe}, - {value: 0x009d, lo: 0xbf, hi: 0xbf}, - // Block 0x3f, offset 0x183 - {value: 0x0002, lo: 0x0f}, - {value: 0x0021, lo: 0x80, hi: 0x89}, - {value: 0x0017, lo: 0x8a, hi: 0x8a}, - {value: 0x0467, lo: 0x8b, hi: 0x8b}, - {value: 0x003b, lo: 0x8c, hi: 0x8c}, - {value: 0x0011, lo: 0x8d, hi: 0x8e}, - {value: 0x0083, lo: 0x90, hi: 0x90}, - {value: 0x008b, lo: 0x91, hi: 0x91}, - {value: 0x009f, lo: 0x92, hi: 0x92}, - {value: 0x00b1, lo: 0x93, hi: 0x93}, - {value: 0x0104, lo: 0x94, hi: 0x94}, - {value: 0x0091, lo: 0x95, hi: 0x95}, - {value: 0x0097, lo: 0x96, hi: 0x99}, - {value: 0x00a1, lo: 0x9a, hi: 0x9a}, - {value: 0x00a7, lo: 0x9b, hi: 0x9c}, - {value: 0x1999, lo: 0xa8, hi: 0xa8}, - // Block 0x40, offset 0x193 - {value: 0x0000, lo: 0x0d}, - {value: 0x8132, lo: 0x90, hi: 0x91}, - {value: 0x8101, lo: 0x92, hi: 0x93}, - {value: 0x8132, lo: 0x94, hi: 0x97}, - {value: 0x8101, lo: 0x98, hi: 0x9a}, - {value: 0x8132, lo: 0x9b, hi: 0x9c}, - {value: 0x8132, lo: 0xa1, hi: 0xa1}, - {value: 0x8101, lo: 0xa5, hi: 0xa6}, - {value: 0x8132, lo: 0xa7, hi: 0xa7}, - {value: 0x812d, lo: 0xa8, hi: 0xa8}, - {value: 0x8132, lo: 0xa9, hi: 0xa9}, - {value: 0x8101, lo: 0xaa, hi: 0xab}, - {value: 0x812d, lo: 0xac, hi: 0xaf}, - {value: 0x8132, lo: 0xb0, hi: 0xb0}, - // Block 0x41, offset 0x1a1 - {value: 0x0007, lo: 0x06}, - {value: 0x2180, lo: 0x89, hi: 0x89}, - {value: 0xa000, lo: 0x90, hi: 0x90}, - {value: 0xa000, lo: 0x92, hi: 0x92}, - {value: 0xa000, lo: 0x94, hi: 0x94}, - {value: 0x3bb9, lo: 0x9a, hi: 0x9b}, - {value: 0x3bc7, lo: 0xae, hi: 0xae}, - // Block 0x42, offset 0x1a8 - {value: 0x000e, lo: 0x05}, - {value: 0x3bce, lo: 0x8d, hi: 0x8e}, - {value: 0x3bd5, lo: 0x8f, hi: 0x8f}, - {value: 0xa000, lo: 0x90, hi: 0x90}, - {value: 0xa000, lo: 0x92, hi: 0x92}, - {value: 0xa000, lo: 0x94, hi: 0x94}, - // Block 0x43, offset 0x1ae - {value: 0x0173, lo: 0x0e}, - {value: 0xa000, lo: 0x83, hi: 0x83}, - {value: 0x3be3, lo: 0x84, hi: 0x84}, - {value: 0xa000, lo: 0x88, hi: 0x88}, - {value: 0x3bea, lo: 0x89, hi: 0x89}, - {value: 0xa000, lo: 0x8b, hi: 0x8b}, - {value: 0x3bf1, lo: 0x8c, hi: 0x8c}, - {value: 0xa000, lo: 0xa3, hi: 0xa3}, - {value: 0x3bf8, lo: 0xa4, hi: 0xa4}, - {value: 0xa000, lo: 0xa5, hi: 0xa5}, - {value: 0x3bff, lo: 0xa6, hi: 0xa6}, - {value: 0x269f, lo: 0xac, hi: 0xad}, - {value: 0x26a6, lo: 0xaf, hi: 0xaf}, - {value: 0x281c, lo: 0xb0, hi: 0xb0}, - {value: 0xa000, lo: 0xbc, hi: 0xbc}, - // Block 0x44, offset 0x1bd - {value: 0x0007, lo: 0x03}, - {value: 0x3c68, lo: 0xa0, hi: 0xa1}, - {value: 0x3c92, lo: 0xa2, hi: 0xa3}, - {value: 0x3cbc, lo: 0xaa, hi: 0xad}, - // Block 0x45, offset 0x1c1 - {value: 0x0004, lo: 0x01}, - {value: 0x048b, lo: 0xa9, hi: 0xaa}, - // Block 0x46, offset 0x1c3 - {value: 0x0002, lo: 0x03}, - {value: 0x0057, lo: 0x80, hi: 0x8f}, - {value: 0x0083, lo: 0x90, hi: 0xa9}, - {value: 0x0021, lo: 0xaa, hi: 0xaa}, - // Block 0x47, offset 0x1c7 - {value: 0x0000, lo: 0x01}, - {value: 0x299b, lo: 0x8c, hi: 0x8c}, - // Block 0x48, offset 0x1c9 - {value: 0x0263, lo: 0x02}, - {value: 0x1b8c, lo: 0xb4, hi: 0xb4}, - {value: 0x192d, lo: 0xb5, hi: 0xb6}, - // Block 0x49, offset 0x1cc - {value: 0x0000, lo: 0x01}, - {value: 0x44dd, lo: 0x9c, hi: 0x9c}, - // Block 0x4a, offset 0x1ce - {value: 0x0000, lo: 0x02}, - {value: 0x0095, lo: 0xbc, hi: 0xbc}, - {value: 0x006d, lo: 0xbd, hi: 0xbd}, - // Block 0x4b, offset 0x1d1 - {value: 0x0000, lo: 0x01}, - {value: 0x8132, lo: 0xaf, hi: 0xb1}, - // Block 0x4c, offset 0x1d3 - {value: 0x0000, lo: 0x02}, - {value: 0x047f, lo: 0xaf, hi: 0xaf}, - {value: 0x8104, lo: 0xbf, hi: 0xbf}, - // Block 0x4d, offset 0x1d6 - {value: 0x0000, lo: 0x01}, - {value: 0x8132, lo: 0xa0, hi: 0xbf}, - // Block 0x4e, offset 0x1d8 - {value: 0x0000, lo: 0x01}, - {value: 0x0dc3, lo: 0x9f, hi: 0x9f}, - // Block 0x4f, offset 0x1da - {value: 0x0000, lo: 0x01}, - {value: 0x162f, lo: 0xb3, hi: 0xb3}, - // Block 0x50, offset 0x1dc - {value: 0x0004, lo: 0x0b}, - {value: 0x1597, lo: 0x80, hi: 0x82}, - {value: 0x15af, lo: 0x83, hi: 0x83}, - {value: 0x15c7, lo: 0x84, hi: 0x85}, - {value: 0x15d7, lo: 0x86, hi: 0x89}, - {value: 0x15eb, lo: 0x8a, hi: 0x8c}, - {value: 0x15ff, lo: 0x8d, hi: 0x8d}, - {value: 0x1607, lo: 0x8e, hi: 0x8e}, - {value: 0x160f, lo: 0x8f, hi: 0x90}, - {value: 0x161b, lo: 0x91, hi: 0x93}, - {value: 0x162b, lo: 0x94, hi: 0x94}, - {value: 0x1633, lo: 0x95, hi: 0x95}, - // Block 0x51, offset 0x1e8 - {value: 0x0004, lo: 0x09}, - {value: 0x0001, lo: 0x80, hi: 0x80}, - {value: 0x812c, lo: 0xaa, hi: 0xaa}, - {value: 0x8131, lo: 0xab, hi: 0xab}, - {value: 0x8133, lo: 0xac, hi: 0xac}, - {value: 0x812e, lo: 0xad, hi: 0xad}, - {value: 0x812f, lo: 0xae, hi: 0xae}, - {value: 0x812f, lo: 0xaf, hi: 0xaf}, - {value: 0x04b3, lo: 0xb6, hi: 0xb6}, - {value: 0x0887, lo: 0xb8, hi: 0xba}, - // Block 0x52, offset 0x1f2 - {value: 0x0006, lo: 0x09}, - {value: 0x0313, lo: 0xb1, hi: 0xb1}, - {value: 0x0317, lo: 0xb2, hi: 0xb2}, - {value: 0x4a3b, lo: 0xb3, hi: 0xb3}, - {value: 0x031b, lo: 0xb4, hi: 0xb4}, - {value: 0x4a41, lo: 0xb5, hi: 0xb6}, - {value: 0x031f, lo: 0xb7, hi: 0xb7}, - {value: 0x0323, lo: 0xb8, hi: 0xb8}, - {value: 0x0327, lo: 0xb9, hi: 0xb9}, - {value: 0x4a4d, lo: 0xba, hi: 0xbf}, - // Block 0x53, offset 0x1fc - {value: 0x0000, lo: 0x02}, - {value: 0x8132, lo: 0xaf, hi: 0xaf}, - {value: 0x8132, lo: 0xb4, hi: 0xbd}, - // Block 0x54, offset 0x1ff - {value: 0x0000, lo: 0x03}, - {value: 0x020f, lo: 0x9c, hi: 0x9c}, - {value: 0x0212, lo: 0x9d, hi: 0x9d}, - {value: 0x8132, lo: 0x9e, hi: 0x9f}, - // Block 0x55, offset 0x203 - {value: 0x0000, lo: 0x01}, - {value: 0x8132, lo: 0xb0, hi: 0xb1}, - // Block 0x56, offset 0x205 - {value: 0x0000, lo: 0x01}, - {value: 0x163b, lo: 0xb0, hi: 0xb0}, - // Block 0x57, offset 0x207 - {value: 0x000c, lo: 0x01}, - {value: 0x00d7, lo: 0xb8, hi: 0xb9}, - // Block 0x58, offset 0x209 - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0x86, hi: 0x86}, - // Block 0x59, offset 0x20b - {value: 0x0000, lo: 0x02}, - {value: 0x8104, lo: 0x84, hi: 0x84}, - {value: 0x8132, lo: 0xa0, hi: 0xb1}, - // Block 0x5a, offset 0x20e - {value: 0x0000, lo: 0x01}, - {value: 0x812d, lo: 0xab, hi: 0xad}, - // Block 0x5b, offset 0x210 - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0x93, hi: 0x93}, - // Block 0x5c, offset 0x212 - {value: 0x0000, lo: 0x01}, - {value: 0x8102, lo: 0xb3, hi: 0xb3}, - // Block 0x5d, offset 0x214 - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0x80, hi: 0x80}, - // Block 0x5e, offset 0x216 - {value: 0x0000, lo: 0x05}, - {value: 0x8132, lo: 0xb0, hi: 0xb0}, - {value: 0x8132, lo: 0xb2, hi: 0xb3}, - {value: 0x812d, lo: 0xb4, hi: 0xb4}, - {value: 0x8132, lo: 0xb7, hi: 0xb8}, - {value: 0x8132, lo: 0xbe, hi: 0xbf}, - // Block 0x5f, offset 0x21c - {value: 0x0000, lo: 0x02}, - {value: 0x8132, lo: 0x81, hi: 0x81}, - {value: 0x8104, lo: 0xb6, hi: 0xb6}, - // Block 0x60, offset 0x21f - {value: 0x0008, lo: 0x03}, - {value: 0x1637, lo: 0x9c, hi: 0x9d}, - {value: 0x0125, lo: 0x9e, hi: 0x9e}, - {value: 0x1643, lo: 0x9f, hi: 0x9f}, - // Block 0x61, offset 0x223 - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0xad, hi: 0xad}, - // Block 0x62, offset 0x225 - {value: 0x0000, lo: 0x06}, - {value: 0xe500, lo: 0x80, hi: 0x80}, - {value: 0xc600, lo: 0x81, hi: 0x9b}, - {value: 0xe500, lo: 0x9c, hi: 0x9c}, - {value: 0xc600, lo: 0x9d, hi: 0xb7}, - {value: 0xe500, lo: 0xb8, hi: 0xb8}, - {value: 0xc600, lo: 0xb9, hi: 0xbf}, - // Block 0x63, offset 0x22c - {value: 0x0000, lo: 0x05}, - {value: 0xc600, lo: 0x80, hi: 0x93}, - {value: 0xe500, lo: 0x94, hi: 0x94}, - {value: 0xc600, lo: 0x95, hi: 0xaf}, - {value: 0xe500, lo: 0xb0, hi: 0xb0}, - {value: 0xc600, lo: 0xb1, hi: 0xbf}, - // Block 0x64, offset 0x232 - {value: 0x0000, lo: 0x05}, - {value: 0xc600, lo: 0x80, hi: 0x8b}, - {value: 0xe500, lo: 0x8c, hi: 0x8c}, - {value: 0xc600, lo: 0x8d, hi: 0xa7}, - {value: 0xe500, lo: 0xa8, hi: 0xa8}, - {value: 0xc600, lo: 0xa9, hi: 0xbf}, - // Block 0x65, offset 0x238 - {value: 0x0000, lo: 0x07}, - {value: 0xc600, lo: 0x80, hi: 0x83}, - {value: 0xe500, lo: 0x84, hi: 0x84}, - {value: 0xc600, lo: 0x85, hi: 0x9f}, - {value: 0xe500, lo: 0xa0, hi: 0xa0}, - {value: 0xc600, lo: 0xa1, hi: 0xbb}, - {value: 0xe500, lo: 0xbc, hi: 0xbc}, - {value: 0xc600, lo: 0xbd, hi: 0xbf}, - // Block 0x66, offset 0x240 - {value: 0x0000, lo: 0x05}, - {value: 0xc600, lo: 0x80, hi: 0x97}, - {value: 0xe500, lo: 0x98, hi: 0x98}, - {value: 0xc600, lo: 0x99, hi: 0xb3}, - {value: 0xe500, lo: 0xb4, hi: 0xb4}, - {value: 0xc600, lo: 0xb5, hi: 0xbf}, - // Block 0x67, offset 0x246 - {value: 0x0000, lo: 0x05}, - {value: 0xc600, lo: 0x80, hi: 0x8f}, - {value: 0xe500, lo: 0x90, hi: 0x90}, - {value: 0xc600, lo: 0x91, hi: 0xab}, - {value: 0xe500, lo: 0xac, hi: 0xac}, - {value: 0xc600, lo: 0xad, hi: 0xbf}, - // Block 0x68, offset 0x24c - {value: 0x0000, lo: 0x05}, - {value: 0xc600, lo: 0x80, hi: 0x87}, - {value: 0xe500, lo: 0x88, hi: 0x88}, - {value: 0xc600, lo: 0x89, hi: 0xa3}, - {value: 0xe500, lo: 0xa4, hi: 0xa4}, - {value: 0xc600, lo: 0xa5, hi: 0xbf}, - // Block 0x69, offset 0x252 - {value: 0x0000, lo: 0x03}, - {value: 0xc600, lo: 0x80, hi: 0x87}, - {value: 0xe500, lo: 0x88, hi: 0x88}, - {value: 0xc600, lo: 0x89, hi: 0xa3}, - // Block 0x6a, offset 0x256 - {value: 0x0002, lo: 0x01}, - {value: 0x0003, lo: 0x81, hi: 0xbf}, - // Block 0x6b, offset 0x258 - {value: 0x0000, lo: 0x01}, - {value: 0x812d, lo: 0xbd, hi: 0xbd}, - // Block 0x6c, offset 0x25a - {value: 0x0000, lo: 0x01}, - {value: 0x812d, lo: 0xa0, hi: 0xa0}, - // Block 0x6d, offset 0x25c - {value: 0x0000, lo: 0x01}, - {value: 0x8132, lo: 0xb6, hi: 0xba}, - // Block 0x6e, offset 0x25e - {value: 0x002c, lo: 0x05}, - {value: 0x812d, lo: 0x8d, hi: 0x8d}, - {value: 0x8132, lo: 0x8f, hi: 0x8f}, - {value: 0x8132, lo: 0xb8, hi: 0xb8}, - {value: 0x8101, lo: 0xb9, hi: 0xba}, - {value: 0x8104, lo: 0xbf, hi: 0xbf}, - // Block 0x6f, offset 0x264 - {value: 0x0000, lo: 0x02}, - {value: 0x8132, lo: 0xa5, hi: 0xa5}, - {value: 0x812d, lo: 0xa6, hi: 0xa6}, - // Block 0x70, offset 0x267 - {value: 0x0000, lo: 0x02}, - {value: 0x8104, lo: 0x86, hi: 0x86}, - {value: 0x8104, lo: 0xbf, hi: 0xbf}, - // Block 0x71, offset 0x26a - {value: 0x17fe, lo: 0x07}, - {value: 0xa000, lo: 0x99, hi: 0x99}, - {value: 0x4238, lo: 0x9a, hi: 0x9a}, - {value: 0xa000, lo: 0x9b, hi: 0x9b}, - {value: 0x4242, lo: 0x9c, hi: 0x9c}, - {value: 0xa000, lo: 0xa5, hi: 0xa5}, - {value: 0x424c, lo: 0xab, hi: 0xab}, - {value: 0x8104, lo: 0xb9, hi: 0xba}, - // Block 0x72, offset 0x272 - {value: 0x0000, lo: 0x06}, - {value: 0x8132, lo: 0x80, hi: 0x82}, - {value: 0x9900, lo: 0xa7, hi: 0xa7}, - {value: 0x2d7e, lo: 0xae, hi: 0xae}, - {value: 0x2d88, lo: 0xaf, hi: 0xaf}, - {value: 0xa000, lo: 0xb1, hi: 0xb2}, - {value: 0x8104, lo: 0xb3, hi: 0xb4}, - // Block 0x73, offset 0x279 - {value: 0x0000, lo: 0x02}, - {value: 0x8104, lo: 0x80, hi: 0x80}, - {value: 0x8102, lo: 0x8a, hi: 0x8a}, - // Block 0x74, offset 0x27c - {value: 0x0000, lo: 0x02}, - {value: 0x8104, lo: 0xb5, hi: 0xb5}, - {value: 0x8102, lo: 0xb6, hi: 0xb6}, - // Block 0x75, offset 0x27f - {value: 0x0002, lo: 0x01}, - {value: 0x8102, lo: 0xa9, hi: 0xaa}, - // Block 0x76, offset 0x281 - {value: 0x0000, lo: 0x07}, - {value: 0xa000, lo: 0x87, hi: 0x87}, - {value: 0x2d92, lo: 0x8b, hi: 0x8b}, - {value: 0x2d9c, lo: 0x8c, hi: 0x8c}, - {value: 0x8104, lo: 0x8d, hi: 0x8d}, - {value: 0x9900, lo: 0x97, hi: 0x97}, - {value: 0x8132, lo: 0xa6, hi: 0xac}, - {value: 0x8132, lo: 0xb0, hi: 0xb4}, - // Block 0x77, offset 0x289 - {value: 0x0000, lo: 0x02}, - {value: 0x8104, lo: 0x82, hi: 0x82}, - {value: 0x8102, lo: 0x86, hi: 0x86}, - // Block 0x78, offset 0x28c - {value: 0x6b5a, lo: 0x06}, - {value: 0x9900, lo: 0xb0, hi: 0xb0}, - {value: 0xa000, lo: 0xb9, hi: 0xb9}, - {value: 0x9900, lo: 0xba, hi: 0xba}, - {value: 0x2db0, lo: 0xbb, hi: 0xbb}, - {value: 0x2da6, lo: 0xbc, hi: 0xbd}, - {value: 0x2dba, lo: 0xbe, hi: 0xbe}, - // Block 0x79, offset 0x293 - {value: 0x0000, lo: 0x02}, - {value: 0x8104, lo: 0x82, hi: 0x82}, - {value: 0x8102, lo: 0x83, hi: 0x83}, - // Block 0x7a, offset 0x296 - {value: 0x0000, lo: 0x05}, - {value: 0x9900, lo: 0xaf, hi: 0xaf}, - {value: 0xa000, lo: 0xb8, hi: 0xb9}, - {value: 0x2dc4, lo: 0xba, hi: 0xba}, - {value: 0x2dce, lo: 0xbb, hi: 0xbb}, - {value: 0x8104, lo: 0xbf, hi: 0xbf}, - // Block 0x7b, offset 0x29c - {value: 0x0000, lo: 0x01}, - {value: 0x8102, lo: 0x80, hi: 0x80}, - // Block 0x7c, offset 0x29e - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0xbf, hi: 0xbf}, - // Block 0x7d, offset 0x2a0 - {value: 0x0000, lo: 0x02}, - {value: 0x8104, lo: 0xb6, hi: 0xb6}, - {value: 0x8102, lo: 0xb7, hi: 0xb7}, - // Block 0x7e, offset 0x2a3 - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0xab, hi: 0xab}, - // Block 0x7f, offset 0x2a5 - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0xb4, hi: 0xb4}, - // Block 0x80, offset 0x2a7 - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0x87, hi: 0x87}, - // Block 0x81, offset 0x2a9 - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0x99, hi: 0x99}, - // Block 0x82, offset 0x2ab - {value: 0x0000, lo: 0x02}, - {value: 0x8102, lo: 0x82, hi: 0x82}, - {value: 0x8104, lo: 0x84, hi: 0x85}, - // Block 0x83, offset 0x2ae - {value: 0x0000, lo: 0x01}, - {value: 0x8101, lo: 0xb0, hi: 0xb4}, - // Block 0x84, offset 0x2b0 - {value: 0x0000, lo: 0x01}, - {value: 0x8132, lo: 0xb0, hi: 0xb6}, - // Block 0x85, offset 0x2b2 - {value: 0x0000, lo: 0x01}, - {value: 0x8101, lo: 0x9e, hi: 0x9e}, - // Block 0x86, offset 0x2b4 - {value: 0x0000, lo: 0x0c}, - {value: 0x45cc, lo: 0x9e, hi: 0x9e}, - {value: 0x45d6, lo: 0x9f, hi: 0x9f}, - {value: 0x460a, lo: 0xa0, hi: 0xa0}, - {value: 0x4618, lo: 0xa1, hi: 0xa1}, - {value: 0x4626, lo: 0xa2, hi: 0xa2}, - {value: 0x4634, lo: 0xa3, hi: 0xa3}, - {value: 0x4642, lo: 0xa4, hi: 0xa4}, - {value: 0x812b, lo: 0xa5, hi: 0xa6}, - {value: 0x8101, lo: 0xa7, hi: 0xa9}, - {value: 0x8130, lo: 0xad, hi: 0xad}, - {value: 0x812b, lo: 0xae, hi: 0xb2}, - {value: 0x812d, lo: 0xbb, hi: 0xbf}, - // Block 0x87, offset 0x2c1 - {value: 0x0000, lo: 0x09}, - {value: 0x812d, lo: 0x80, hi: 0x82}, - {value: 0x8132, lo: 0x85, hi: 0x89}, - {value: 0x812d, lo: 0x8a, hi: 0x8b}, - {value: 0x8132, lo: 0xaa, hi: 0xad}, - {value: 0x45e0, lo: 0xbb, hi: 0xbb}, - {value: 0x45ea, lo: 0xbc, hi: 0xbc}, - {value: 0x4650, lo: 0xbd, hi: 0xbd}, - {value: 0x466c, lo: 0xbe, hi: 0xbe}, - {value: 0x465e, lo: 0xbf, hi: 0xbf}, - // Block 0x88, offset 0x2cb - {value: 0x0000, lo: 0x01}, - {value: 0x467a, lo: 0x80, hi: 0x80}, - // Block 0x89, offset 0x2cd - {value: 0x0000, lo: 0x01}, - {value: 0x8132, lo: 0x82, hi: 0x84}, - // Block 0x8a, offset 0x2cf - {value: 0x0002, lo: 0x03}, - {value: 0x0043, lo: 0x80, hi: 0x99}, - {value: 0x0083, lo: 0x9a, hi: 0xb3}, - {value: 0x0043, lo: 0xb4, hi: 0xbf}, - // Block 0x8b, offset 0x2d3 - {value: 0x0002, lo: 0x04}, - {value: 0x005b, lo: 0x80, hi: 0x8d}, - {value: 0x0083, lo: 0x8e, hi: 0x94}, - {value: 0x0093, lo: 0x96, hi: 0xa7}, - {value: 0x0043, lo: 0xa8, hi: 0xbf}, - // Block 0x8c, offset 0x2d8 - {value: 0x0002, lo: 0x0b}, - {value: 0x0073, lo: 0x80, hi: 0x81}, - {value: 0x0083, lo: 0x82, hi: 0x9b}, - {value: 0x0043, lo: 0x9c, hi: 0x9c}, - {value: 0x0047, lo: 0x9e, hi: 0x9f}, - {value: 0x004f, lo: 0xa2, hi: 0xa2}, - {value: 0x0055, lo: 0xa5, hi: 0xa6}, - {value: 0x005d, lo: 0xa9, hi: 0xac}, - {value: 0x0067, lo: 0xae, hi: 0xb5}, - {value: 0x0083, lo: 0xb6, hi: 0xb9}, - {value: 0x008d, lo: 0xbb, hi: 0xbb}, - {value: 0x0091, lo: 0xbd, hi: 0xbf}, - // Block 0x8d, offset 0x2e4 - {value: 0x0002, lo: 0x04}, - {value: 0x0097, lo: 0x80, hi: 0x83}, - {value: 0x00a1, lo: 0x85, hi: 0x8f}, - {value: 0x0043, lo: 0x90, hi: 0xa9}, - {value: 0x0083, lo: 0xaa, hi: 0xbf}, - // Block 0x8e, offset 0x2e9 - {value: 0x0002, lo: 0x08}, - {value: 0x00af, lo: 0x80, hi: 0x83}, - {value: 0x0043, lo: 0x84, hi: 0x85}, - {value: 0x0049, lo: 0x87, hi: 0x8a}, - {value: 0x0055, lo: 0x8d, hi: 0x94}, - {value: 0x0067, lo: 0x96, hi: 0x9c}, - {value: 0x0083, lo: 0x9e, hi: 0xb7}, - {value: 0x0043, lo: 0xb8, hi: 0xb9}, - {value: 0x0049, lo: 0xbb, hi: 0xbe}, - // Block 0x8f, offset 0x2f2 - {value: 0x0002, lo: 0x05}, - {value: 0x0053, lo: 0x80, hi: 0x84}, - {value: 0x005f, lo: 0x86, hi: 0x86}, - {value: 0x0067, lo: 0x8a, hi: 0x90}, - {value: 0x0083, lo: 0x92, hi: 0xab}, - {value: 0x0043, lo: 0xac, hi: 0xbf}, - // Block 0x90, offset 0x2f8 - {value: 0x0002, lo: 0x04}, - {value: 0x006b, lo: 0x80, hi: 0x85}, - {value: 0x0083, lo: 0x86, hi: 0x9f}, - {value: 0x0043, lo: 0xa0, hi: 0xb9}, - {value: 0x0083, lo: 0xba, hi: 0xbf}, - // Block 0x91, offset 0x2fd - {value: 0x0002, lo: 0x03}, - {value: 0x008f, lo: 0x80, hi: 0x93}, - {value: 0x0043, lo: 0x94, hi: 0xad}, - {value: 0x0083, lo: 0xae, hi: 0xbf}, - // Block 0x92, offset 0x301 - {value: 0x0002, lo: 0x04}, - {value: 0x00a7, lo: 0x80, hi: 0x87}, - {value: 0x0043, lo: 0x88, hi: 0xa1}, - {value: 0x0083, lo: 0xa2, hi: 0xbb}, - {value: 0x0043, lo: 0xbc, hi: 0xbf}, - // Block 0x93, offset 0x306 - {value: 0x0002, lo: 0x03}, - {value: 0x004b, lo: 0x80, hi: 0x95}, - {value: 0x0083, lo: 0x96, hi: 0xaf}, - {value: 0x0043, lo: 0xb0, hi: 0xbf}, - // Block 0x94, offset 0x30a - {value: 0x0003, lo: 0x0f}, - {value: 0x01b8, lo: 0x80, hi: 0x80}, - {value: 0x045f, lo: 0x81, hi: 0x81}, - {value: 0x01bb, lo: 0x82, hi: 0x9a}, - {value: 0x045b, lo: 0x9b, hi: 0x9b}, - {value: 0x01c7, lo: 0x9c, hi: 0x9c}, - {value: 0x01d0, lo: 0x9d, hi: 0x9d}, - {value: 0x01d6, lo: 0x9e, hi: 0x9e}, - {value: 0x01fa, lo: 0x9f, hi: 0x9f}, - {value: 0x01eb, lo: 0xa0, hi: 0xa0}, - {value: 0x01e8, lo: 0xa1, hi: 0xa1}, - {value: 0x0173, lo: 0xa2, hi: 0xb2}, - {value: 0x0188, lo: 0xb3, hi: 0xb3}, - {value: 0x01a6, lo: 0xb4, hi: 0xba}, - {value: 0x045f, lo: 0xbb, hi: 0xbb}, - {value: 0x01bb, lo: 0xbc, hi: 0xbf}, - // Block 0x95, offset 0x31a - {value: 0x0003, lo: 0x0d}, - {value: 0x01c7, lo: 0x80, hi: 0x94}, - {value: 0x045b, lo: 0x95, hi: 0x95}, - {value: 0x01c7, lo: 0x96, hi: 0x96}, - {value: 0x01d0, lo: 0x97, hi: 0x97}, - {value: 0x01d6, lo: 0x98, hi: 0x98}, - {value: 0x01fa, lo: 0x99, hi: 0x99}, - {value: 0x01eb, lo: 0x9a, hi: 0x9a}, - {value: 0x01e8, lo: 0x9b, hi: 0x9b}, - {value: 0x0173, lo: 0x9c, hi: 0xac}, - {value: 0x0188, lo: 0xad, hi: 0xad}, - {value: 0x01a6, lo: 0xae, hi: 0xb4}, - {value: 0x045f, lo: 0xb5, hi: 0xb5}, - {value: 0x01bb, lo: 0xb6, hi: 0xbf}, - // Block 0x96, offset 0x328 - {value: 0x0003, lo: 0x0d}, - {value: 0x01d9, lo: 0x80, hi: 0x8e}, - {value: 0x045b, lo: 0x8f, hi: 0x8f}, - {value: 0x01c7, lo: 0x90, hi: 0x90}, - {value: 0x01d0, lo: 0x91, hi: 0x91}, - {value: 0x01d6, lo: 0x92, hi: 0x92}, - {value: 0x01fa, lo: 0x93, hi: 0x93}, - {value: 0x01eb, lo: 0x94, hi: 0x94}, - {value: 0x01e8, lo: 0x95, hi: 0x95}, - {value: 0x0173, lo: 0x96, hi: 0xa6}, - {value: 0x0188, lo: 0xa7, hi: 0xa7}, - {value: 0x01a6, lo: 0xa8, hi: 0xae}, - {value: 0x045f, lo: 0xaf, hi: 0xaf}, - {value: 0x01bb, lo: 0xb0, hi: 0xbf}, - // Block 0x97, offset 0x336 - {value: 0x0003, lo: 0x0d}, - {value: 0x01eb, lo: 0x80, hi: 0x88}, - {value: 0x045b, lo: 0x89, hi: 0x89}, - {value: 0x01c7, lo: 0x8a, hi: 0x8a}, - {value: 0x01d0, lo: 0x8b, hi: 0x8b}, - {value: 0x01d6, lo: 0x8c, hi: 0x8c}, - {value: 0x01fa, lo: 0x8d, hi: 0x8d}, - {value: 0x01eb, lo: 0x8e, hi: 0x8e}, - {value: 0x01e8, lo: 0x8f, hi: 0x8f}, - {value: 0x0173, lo: 0x90, hi: 0xa0}, - {value: 0x0188, lo: 0xa1, hi: 0xa1}, - {value: 0x01a6, lo: 0xa2, hi: 0xa8}, - {value: 0x045f, lo: 0xa9, hi: 0xa9}, - {value: 0x01bb, lo: 0xaa, hi: 0xbf}, - // Block 0x98, offset 0x344 - {value: 0x0000, lo: 0x05}, - {value: 0x8132, lo: 0x80, hi: 0x86}, - {value: 0x8132, lo: 0x88, hi: 0x98}, - {value: 0x8132, lo: 0x9b, hi: 0xa1}, - {value: 0x8132, lo: 0xa3, hi: 0xa4}, - {value: 0x8132, lo: 0xa6, hi: 0xaa}, - // Block 0x99, offset 0x34a - {value: 0x0000, lo: 0x01}, - {value: 0x812d, lo: 0x90, hi: 0x96}, - // Block 0x9a, offset 0x34c - {value: 0x0000, lo: 0x02}, - {value: 0x8132, lo: 0x84, hi: 0x89}, - {value: 0x8102, lo: 0x8a, hi: 0x8a}, - // Block 0x9b, offset 0x34f - {value: 0x0002, lo: 0x09}, - {value: 0x0063, lo: 0x80, hi: 0x89}, - {value: 0x1951, lo: 0x8a, hi: 0x8a}, - {value: 0x1981, lo: 0x8b, hi: 0x8b}, - {value: 0x199c, lo: 0x8c, hi: 0x8c}, - {value: 0x19a2, lo: 0x8d, hi: 0x8d}, - {value: 0x1bc0, lo: 0x8e, hi: 0x8e}, - {value: 0x19ae, lo: 0x8f, hi: 0x8f}, - {value: 0x197b, lo: 0xaa, hi: 0xaa}, - {value: 0x197e, lo: 0xab, hi: 0xab}, - // Block 0x9c, offset 0x359 - {value: 0x0000, lo: 0x01}, - {value: 0x193f, lo: 0x90, hi: 0x90}, - // Block 0x9d, offset 0x35b - {value: 0x0028, lo: 0x09}, - {value: 0x2862, lo: 0x80, hi: 0x80}, - {value: 0x2826, lo: 0x81, hi: 0x81}, - {value: 0x2830, lo: 0x82, hi: 0x82}, - {value: 0x2844, lo: 0x83, hi: 0x84}, - {value: 0x284e, lo: 0x85, hi: 0x86}, - {value: 0x283a, lo: 0x87, hi: 0x87}, - {value: 0x2858, lo: 0x88, hi: 0x88}, - {value: 0x0b6f, lo: 0x90, hi: 0x90}, - {value: 0x08e7, lo: 0x91, hi: 0x91}, -} - -// recompMap: 7520 bytes (entries only) -var recompMap map[uint32]rune -var recompMapOnce sync.Once - -const recompMapPacked = "" + - "\x00A\x03\x00\x00\x00\x00\xc0" + // 0x00410300: 0x000000C0 - "\x00A\x03\x01\x00\x00\x00\xc1" + // 0x00410301: 0x000000C1 - "\x00A\x03\x02\x00\x00\x00\xc2" + // 0x00410302: 0x000000C2 - "\x00A\x03\x03\x00\x00\x00\xc3" + // 0x00410303: 0x000000C3 - "\x00A\x03\b\x00\x00\x00\xc4" + // 0x00410308: 0x000000C4 - "\x00A\x03\n\x00\x00\x00\xc5" + // 0x0041030A: 0x000000C5 - "\x00C\x03'\x00\x00\x00\xc7" + // 0x00430327: 0x000000C7 - "\x00E\x03\x00\x00\x00\x00\xc8" + // 0x00450300: 0x000000C8 - "\x00E\x03\x01\x00\x00\x00\xc9" + // 0x00450301: 0x000000C9 - "\x00E\x03\x02\x00\x00\x00\xca" + // 0x00450302: 0x000000CA - "\x00E\x03\b\x00\x00\x00\xcb" + // 0x00450308: 0x000000CB - "\x00I\x03\x00\x00\x00\x00\xcc" + // 0x00490300: 0x000000CC - "\x00I\x03\x01\x00\x00\x00\xcd" + // 0x00490301: 0x000000CD - "\x00I\x03\x02\x00\x00\x00\xce" + // 0x00490302: 0x000000CE - "\x00I\x03\b\x00\x00\x00\xcf" + // 0x00490308: 0x000000CF - "\x00N\x03\x03\x00\x00\x00\xd1" + // 0x004E0303: 0x000000D1 - "\x00O\x03\x00\x00\x00\x00\xd2" + // 0x004F0300: 0x000000D2 - "\x00O\x03\x01\x00\x00\x00\xd3" + // 0x004F0301: 0x000000D3 - "\x00O\x03\x02\x00\x00\x00\xd4" + // 0x004F0302: 0x000000D4 - "\x00O\x03\x03\x00\x00\x00\xd5" + // 0x004F0303: 0x000000D5 - "\x00O\x03\b\x00\x00\x00\xd6" + // 0x004F0308: 0x000000D6 - "\x00U\x03\x00\x00\x00\x00\xd9" + // 0x00550300: 0x000000D9 - "\x00U\x03\x01\x00\x00\x00\xda" + // 0x00550301: 0x000000DA - "\x00U\x03\x02\x00\x00\x00\xdb" + // 0x00550302: 0x000000DB - "\x00U\x03\b\x00\x00\x00\xdc" + // 0x00550308: 0x000000DC - "\x00Y\x03\x01\x00\x00\x00\xdd" + // 0x00590301: 0x000000DD - "\x00a\x03\x00\x00\x00\x00\xe0" + // 0x00610300: 0x000000E0 - "\x00a\x03\x01\x00\x00\x00\xe1" + // 0x00610301: 0x000000E1 - "\x00a\x03\x02\x00\x00\x00\xe2" + // 0x00610302: 0x000000E2 - "\x00a\x03\x03\x00\x00\x00\xe3" + // 0x00610303: 0x000000E3 - "\x00a\x03\b\x00\x00\x00\xe4" + // 0x00610308: 0x000000E4 - "\x00a\x03\n\x00\x00\x00\xe5" + // 0x0061030A: 0x000000E5 - "\x00c\x03'\x00\x00\x00\xe7" + // 0x00630327: 0x000000E7 - "\x00e\x03\x00\x00\x00\x00\xe8" + // 0x00650300: 0x000000E8 - "\x00e\x03\x01\x00\x00\x00\xe9" + // 0x00650301: 0x000000E9 - "\x00e\x03\x02\x00\x00\x00\xea" + // 0x00650302: 0x000000EA - "\x00e\x03\b\x00\x00\x00\xeb" + // 0x00650308: 0x000000EB - "\x00i\x03\x00\x00\x00\x00\xec" + // 0x00690300: 0x000000EC - "\x00i\x03\x01\x00\x00\x00\xed" + // 0x00690301: 0x000000ED - "\x00i\x03\x02\x00\x00\x00\xee" + // 0x00690302: 0x000000EE - "\x00i\x03\b\x00\x00\x00\xef" + // 0x00690308: 0x000000EF - "\x00n\x03\x03\x00\x00\x00\xf1" + // 0x006E0303: 0x000000F1 - "\x00o\x03\x00\x00\x00\x00\xf2" + // 0x006F0300: 0x000000F2 - "\x00o\x03\x01\x00\x00\x00\xf3" + // 0x006F0301: 0x000000F3 - "\x00o\x03\x02\x00\x00\x00\xf4" + // 0x006F0302: 0x000000F4 - "\x00o\x03\x03\x00\x00\x00\xf5" + // 0x006F0303: 0x000000F5 - "\x00o\x03\b\x00\x00\x00\xf6" + // 0x006F0308: 0x000000F6 - "\x00u\x03\x00\x00\x00\x00\xf9" + // 0x00750300: 0x000000F9 - "\x00u\x03\x01\x00\x00\x00\xfa" + // 0x00750301: 0x000000FA - "\x00u\x03\x02\x00\x00\x00\xfb" + // 0x00750302: 0x000000FB - "\x00u\x03\b\x00\x00\x00\xfc" + // 0x00750308: 0x000000FC - "\x00y\x03\x01\x00\x00\x00\xfd" + // 0x00790301: 0x000000FD - "\x00y\x03\b\x00\x00\x00\xff" + // 0x00790308: 0x000000FF - "\x00A\x03\x04\x00\x00\x01\x00" + // 0x00410304: 0x00000100 - "\x00a\x03\x04\x00\x00\x01\x01" + // 0x00610304: 0x00000101 - "\x00A\x03\x06\x00\x00\x01\x02" + // 0x00410306: 0x00000102 - "\x00a\x03\x06\x00\x00\x01\x03" + // 0x00610306: 0x00000103 - "\x00A\x03(\x00\x00\x01\x04" + // 0x00410328: 0x00000104 - "\x00a\x03(\x00\x00\x01\x05" + // 0x00610328: 0x00000105 - "\x00C\x03\x01\x00\x00\x01\x06" + // 0x00430301: 0x00000106 - "\x00c\x03\x01\x00\x00\x01\a" + // 0x00630301: 0x00000107 - "\x00C\x03\x02\x00\x00\x01\b" + // 0x00430302: 0x00000108 - "\x00c\x03\x02\x00\x00\x01\t" + // 0x00630302: 0x00000109 - "\x00C\x03\a\x00\x00\x01\n" + // 0x00430307: 0x0000010A - "\x00c\x03\a\x00\x00\x01\v" + // 0x00630307: 0x0000010B - "\x00C\x03\f\x00\x00\x01\f" + // 0x0043030C: 0x0000010C - "\x00c\x03\f\x00\x00\x01\r" + // 0x0063030C: 0x0000010D - "\x00D\x03\f\x00\x00\x01\x0e" + // 0x0044030C: 0x0000010E - "\x00d\x03\f\x00\x00\x01\x0f" + // 0x0064030C: 0x0000010F - "\x00E\x03\x04\x00\x00\x01\x12" + // 0x00450304: 0x00000112 - "\x00e\x03\x04\x00\x00\x01\x13" + // 0x00650304: 0x00000113 - "\x00E\x03\x06\x00\x00\x01\x14" + // 0x00450306: 0x00000114 - "\x00e\x03\x06\x00\x00\x01\x15" + // 0x00650306: 0x00000115 - "\x00E\x03\a\x00\x00\x01\x16" + // 0x00450307: 0x00000116 - "\x00e\x03\a\x00\x00\x01\x17" + // 0x00650307: 0x00000117 - "\x00E\x03(\x00\x00\x01\x18" + // 0x00450328: 0x00000118 - "\x00e\x03(\x00\x00\x01\x19" + // 0x00650328: 0x00000119 - "\x00E\x03\f\x00\x00\x01\x1a" + // 0x0045030C: 0x0000011A - "\x00e\x03\f\x00\x00\x01\x1b" + // 0x0065030C: 0x0000011B - "\x00G\x03\x02\x00\x00\x01\x1c" + // 0x00470302: 0x0000011C - "\x00g\x03\x02\x00\x00\x01\x1d" + // 0x00670302: 0x0000011D - "\x00G\x03\x06\x00\x00\x01\x1e" + // 0x00470306: 0x0000011E - "\x00g\x03\x06\x00\x00\x01\x1f" + // 0x00670306: 0x0000011F - "\x00G\x03\a\x00\x00\x01 " + // 0x00470307: 0x00000120 - "\x00g\x03\a\x00\x00\x01!" + // 0x00670307: 0x00000121 - "\x00G\x03'\x00\x00\x01\"" + // 0x00470327: 0x00000122 - "\x00g\x03'\x00\x00\x01#" + // 0x00670327: 0x00000123 - "\x00H\x03\x02\x00\x00\x01$" + // 0x00480302: 0x00000124 - "\x00h\x03\x02\x00\x00\x01%" + // 0x00680302: 0x00000125 - "\x00I\x03\x03\x00\x00\x01(" + // 0x00490303: 0x00000128 - "\x00i\x03\x03\x00\x00\x01)" + // 0x00690303: 0x00000129 - "\x00I\x03\x04\x00\x00\x01*" + // 0x00490304: 0x0000012A - "\x00i\x03\x04\x00\x00\x01+" + // 0x00690304: 0x0000012B - "\x00I\x03\x06\x00\x00\x01," + // 0x00490306: 0x0000012C - "\x00i\x03\x06\x00\x00\x01-" + // 0x00690306: 0x0000012D - "\x00I\x03(\x00\x00\x01." + // 0x00490328: 0x0000012E - "\x00i\x03(\x00\x00\x01/" + // 0x00690328: 0x0000012F - "\x00I\x03\a\x00\x00\x010" + // 0x00490307: 0x00000130 - "\x00J\x03\x02\x00\x00\x014" + // 0x004A0302: 0x00000134 - "\x00j\x03\x02\x00\x00\x015" + // 0x006A0302: 0x00000135 - "\x00K\x03'\x00\x00\x016" + // 0x004B0327: 0x00000136 - "\x00k\x03'\x00\x00\x017" + // 0x006B0327: 0x00000137 - "\x00L\x03\x01\x00\x00\x019" + // 0x004C0301: 0x00000139 - "\x00l\x03\x01\x00\x00\x01:" + // 0x006C0301: 0x0000013A - "\x00L\x03'\x00\x00\x01;" + // 0x004C0327: 0x0000013B - "\x00l\x03'\x00\x00\x01<" + // 0x006C0327: 0x0000013C - "\x00L\x03\f\x00\x00\x01=" + // 0x004C030C: 0x0000013D - "\x00l\x03\f\x00\x00\x01>" + // 0x006C030C: 0x0000013E - "\x00N\x03\x01\x00\x00\x01C" + // 0x004E0301: 0x00000143 - "\x00n\x03\x01\x00\x00\x01D" + // 0x006E0301: 0x00000144 - "\x00N\x03'\x00\x00\x01E" + // 0x004E0327: 0x00000145 - "\x00n\x03'\x00\x00\x01F" + // 0x006E0327: 0x00000146 - "\x00N\x03\f\x00\x00\x01G" + // 0x004E030C: 0x00000147 - "\x00n\x03\f\x00\x00\x01H" + // 0x006E030C: 0x00000148 - "\x00O\x03\x04\x00\x00\x01L" + // 0x004F0304: 0x0000014C - "\x00o\x03\x04\x00\x00\x01M" + // 0x006F0304: 0x0000014D - "\x00O\x03\x06\x00\x00\x01N" + // 0x004F0306: 0x0000014E - "\x00o\x03\x06\x00\x00\x01O" + // 0x006F0306: 0x0000014F - "\x00O\x03\v\x00\x00\x01P" + // 0x004F030B: 0x00000150 - "\x00o\x03\v\x00\x00\x01Q" + // 0x006F030B: 0x00000151 - "\x00R\x03\x01\x00\x00\x01T" + // 0x00520301: 0x00000154 - "\x00r\x03\x01\x00\x00\x01U" + // 0x00720301: 0x00000155 - "\x00R\x03'\x00\x00\x01V" + // 0x00520327: 0x00000156 - "\x00r\x03'\x00\x00\x01W" + // 0x00720327: 0x00000157 - "\x00R\x03\f\x00\x00\x01X" + // 0x0052030C: 0x00000158 - "\x00r\x03\f\x00\x00\x01Y" + // 0x0072030C: 0x00000159 - "\x00S\x03\x01\x00\x00\x01Z" + // 0x00530301: 0x0000015A - "\x00s\x03\x01\x00\x00\x01[" + // 0x00730301: 0x0000015B - "\x00S\x03\x02\x00\x00\x01\\" + // 0x00530302: 0x0000015C - "\x00s\x03\x02\x00\x00\x01]" + // 0x00730302: 0x0000015D - "\x00S\x03'\x00\x00\x01^" + // 0x00530327: 0x0000015E - "\x00s\x03'\x00\x00\x01_" + // 0x00730327: 0x0000015F - "\x00S\x03\f\x00\x00\x01`" + // 0x0053030C: 0x00000160 - "\x00s\x03\f\x00\x00\x01a" + // 0x0073030C: 0x00000161 - "\x00T\x03'\x00\x00\x01b" + // 0x00540327: 0x00000162 - "\x00t\x03'\x00\x00\x01c" + // 0x00740327: 0x00000163 - "\x00T\x03\f\x00\x00\x01d" + // 0x0054030C: 0x00000164 - "\x00t\x03\f\x00\x00\x01e" + // 0x0074030C: 0x00000165 - "\x00U\x03\x03\x00\x00\x01h" + // 0x00550303: 0x00000168 - "\x00u\x03\x03\x00\x00\x01i" + // 0x00750303: 0x00000169 - "\x00U\x03\x04\x00\x00\x01j" + // 0x00550304: 0x0000016A - "\x00u\x03\x04\x00\x00\x01k" + // 0x00750304: 0x0000016B - "\x00U\x03\x06\x00\x00\x01l" + // 0x00550306: 0x0000016C - "\x00u\x03\x06\x00\x00\x01m" + // 0x00750306: 0x0000016D - "\x00U\x03\n\x00\x00\x01n" + // 0x0055030A: 0x0000016E - "\x00u\x03\n\x00\x00\x01o" + // 0x0075030A: 0x0000016F - "\x00U\x03\v\x00\x00\x01p" + // 0x0055030B: 0x00000170 - "\x00u\x03\v\x00\x00\x01q" + // 0x0075030B: 0x00000171 - "\x00U\x03(\x00\x00\x01r" + // 0x00550328: 0x00000172 - "\x00u\x03(\x00\x00\x01s" + // 0x00750328: 0x00000173 - "\x00W\x03\x02\x00\x00\x01t" + // 0x00570302: 0x00000174 - "\x00w\x03\x02\x00\x00\x01u" + // 0x00770302: 0x00000175 - "\x00Y\x03\x02\x00\x00\x01v" + // 0x00590302: 0x00000176 - "\x00y\x03\x02\x00\x00\x01w" + // 0x00790302: 0x00000177 - "\x00Y\x03\b\x00\x00\x01x" + // 0x00590308: 0x00000178 - "\x00Z\x03\x01\x00\x00\x01y" + // 0x005A0301: 0x00000179 - "\x00z\x03\x01\x00\x00\x01z" + // 0x007A0301: 0x0000017A - "\x00Z\x03\a\x00\x00\x01{" + // 0x005A0307: 0x0000017B - "\x00z\x03\a\x00\x00\x01|" + // 0x007A0307: 0x0000017C - "\x00Z\x03\f\x00\x00\x01}" + // 0x005A030C: 0x0000017D - "\x00z\x03\f\x00\x00\x01~" + // 0x007A030C: 0x0000017E - "\x00O\x03\x1b\x00\x00\x01\xa0" + // 0x004F031B: 0x000001A0 - "\x00o\x03\x1b\x00\x00\x01\xa1" + // 0x006F031B: 0x000001A1 - "\x00U\x03\x1b\x00\x00\x01\xaf" + // 0x0055031B: 0x000001AF - "\x00u\x03\x1b\x00\x00\x01\xb0" + // 0x0075031B: 0x000001B0 - "\x00A\x03\f\x00\x00\x01\xcd" + // 0x0041030C: 0x000001CD - "\x00a\x03\f\x00\x00\x01\xce" + // 0x0061030C: 0x000001CE - "\x00I\x03\f\x00\x00\x01\xcf" + // 0x0049030C: 0x000001CF - "\x00i\x03\f\x00\x00\x01\xd0" + // 0x0069030C: 0x000001D0 - "\x00O\x03\f\x00\x00\x01\xd1" + // 0x004F030C: 0x000001D1 - "\x00o\x03\f\x00\x00\x01\xd2" + // 0x006F030C: 0x000001D2 - "\x00U\x03\f\x00\x00\x01\xd3" + // 0x0055030C: 0x000001D3 - "\x00u\x03\f\x00\x00\x01\xd4" + // 0x0075030C: 0x000001D4 - "\x00\xdc\x03\x04\x00\x00\x01\xd5" + // 0x00DC0304: 0x000001D5 - "\x00\xfc\x03\x04\x00\x00\x01\xd6" + // 0x00FC0304: 0x000001D6 - "\x00\xdc\x03\x01\x00\x00\x01\xd7" + // 0x00DC0301: 0x000001D7 - "\x00\xfc\x03\x01\x00\x00\x01\xd8" + // 0x00FC0301: 0x000001D8 - "\x00\xdc\x03\f\x00\x00\x01\xd9" + // 0x00DC030C: 0x000001D9 - "\x00\xfc\x03\f\x00\x00\x01\xda" + // 0x00FC030C: 0x000001DA - "\x00\xdc\x03\x00\x00\x00\x01\xdb" + // 0x00DC0300: 0x000001DB - "\x00\xfc\x03\x00\x00\x00\x01\xdc" + // 0x00FC0300: 0x000001DC - "\x00\xc4\x03\x04\x00\x00\x01\xde" + // 0x00C40304: 0x000001DE - "\x00\xe4\x03\x04\x00\x00\x01\xdf" + // 0x00E40304: 0x000001DF - "\x02&\x03\x04\x00\x00\x01\xe0" + // 0x02260304: 0x000001E0 - "\x02'\x03\x04\x00\x00\x01\xe1" + // 0x02270304: 0x000001E1 - "\x00\xc6\x03\x04\x00\x00\x01\xe2" + // 0x00C60304: 0x000001E2 - "\x00\xe6\x03\x04\x00\x00\x01\xe3" + // 0x00E60304: 0x000001E3 - "\x00G\x03\f\x00\x00\x01\xe6" + // 0x0047030C: 0x000001E6 - "\x00g\x03\f\x00\x00\x01\xe7" + // 0x0067030C: 0x000001E7 - "\x00K\x03\f\x00\x00\x01\xe8" + // 0x004B030C: 0x000001E8 - "\x00k\x03\f\x00\x00\x01\xe9" + // 0x006B030C: 0x000001E9 - "\x00O\x03(\x00\x00\x01\xea" + // 0x004F0328: 0x000001EA - "\x00o\x03(\x00\x00\x01\xeb" + // 0x006F0328: 0x000001EB - "\x01\xea\x03\x04\x00\x00\x01\xec" + // 0x01EA0304: 0x000001EC - "\x01\xeb\x03\x04\x00\x00\x01\xed" + // 0x01EB0304: 0x000001ED - "\x01\xb7\x03\f\x00\x00\x01\xee" + // 0x01B7030C: 0x000001EE - "\x02\x92\x03\f\x00\x00\x01\xef" + // 0x0292030C: 0x000001EF - "\x00j\x03\f\x00\x00\x01\xf0" + // 0x006A030C: 0x000001F0 - "\x00G\x03\x01\x00\x00\x01\xf4" + // 0x00470301: 0x000001F4 - "\x00g\x03\x01\x00\x00\x01\xf5" + // 0x00670301: 0x000001F5 - "\x00N\x03\x00\x00\x00\x01\xf8" + // 0x004E0300: 0x000001F8 - "\x00n\x03\x00\x00\x00\x01\xf9" + // 0x006E0300: 0x000001F9 - "\x00\xc5\x03\x01\x00\x00\x01\xfa" + // 0x00C50301: 0x000001FA - "\x00\xe5\x03\x01\x00\x00\x01\xfb" + // 0x00E50301: 0x000001FB - "\x00\xc6\x03\x01\x00\x00\x01\xfc" + // 0x00C60301: 0x000001FC - "\x00\xe6\x03\x01\x00\x00\x01\xfd" + // 0x00E60301: 0x000001FD - "\x00\xd8\x03\x01\x00\x00\x01\xfe" + // 0x00D80301: 0x000001FE - "\x00\xf8\x03\x01\x00\x00\x01\xff" + // 0x00F80301: 0x000001FF - "\x00A\x03\x0f\x00\x00\x02\x00" + // 0x0041030F: 0x00000200 - "\x00a\x03\x0f\x00\x00\x02\x01" + // 0x0061030F: 0x00000201 - "\x00A\x03\x11\x00\x00\x02\x02" + // 0x00410311: 0x00000202 - "\x00a\x03\x11\x00\x00\x02\x03" + // 0x00610311: 0x00000203 - "\x00E\x03\x0f\x00\x00\x02\x04" + // 0x0045030F: 0x00000204 - "\x00e\x03\x0f\x00\x00\x02\x05" + // 0x0065030F: 0x00000205 - "\x00E\x03\x11\x00\x00\x02\x06" + // 0x00450311: 0x00000206 - "\x00e\x03\x11\x00\x00\x02\a" + // 0x00650311: 0x00000207 - "\x00I\x03\x0f\x00\x00\x02\b" + // 0x0049030F: 0x00000208 - "\x00i\x03\x0f\x00\x00\x02\t" + // 0x0069030F: 0x00000209 - "\x00I\x03\x11\x00\x00\x02\n" + // 0x00490311: 0x0000020A - "\x00i\x03\x11\x00\x00\x02\v" + // 0x00690311: 0x0000020B - "\x00O\x03\x0f\x00\x00\x02\f" + // 0x004F030F: 0x0000020C - "\x00o\x03\x0f\x00\x00\x02\r" + // 0x006F030F: 0x0000020D - "\x00O\x03\x11\x00\x00\x02\x0e" + // 0x004F0311: 0x0000020E - "\x00o\x03\x11\x00\x00\x02\x0f" + // 0x006F0311: 0x0000020F - "\x00R\x03\x0f\x00\x00\x02\x10" + // 0x0052030F: 0x00000210 - "\x00r\x03\x0f\x00\x00\x02\x11" + // 0x0072030F: 0x00000211 - "\x00R\x03\x11\x00\x00\x02\x12" + // 0x00520311: 0x00000212 - "\x00r\x03\x11\x00\x00\x02\x13" + // 0x00720311: 0x00000213 - "\x00U\x03\x0f\x00\x00\x02\x14" + // 0x0055030F: 0x00000214 - "\x00u\x03\x0f\x00\x00\x02\x15" + // 0x0075030F: 0x00000215 - "\x00U\x03\x11\x00\x00\x02\x16" + // 0x00550311: 0x00000216 - "\x00u\x03\x11\x00\x00\x02\x17" + // 0x00750311: 0x00000217 - "\x00S\x03&\x00\x00\x02\x18" + // 0x00530326: 0x00000218 - "\x00s\x03&\x00\x00\x02\x19" + // 0x00730326: 0x00000219 - "\x00T\x03&\x00\x00\x02\x1a" + // 0x00540326: 0x0000021A - "\x00t\x03&\x00\x00\x02\x1b" + // 0x00740326: 0x0000021B - "\x00H\x03\f\x00\x00\x02\x1e" + // 0x0048030C: 0x0000021E - "\x00h\x03\f\x00\x00\x02\x1f" + // 0x0068030C: 0x0000021F - "\x00A\x03\a\x00\x00\x02&" + // 0x00410307: 0x00000226 - "\x00a\x03\a\x00\x00\x02'" + // 0x00610307: 0x00000227 - "\x00E\x03'\x00\x00\x02(" + // 0x00450327: 0x00000228 - "\x00e\x03'\x00\x00\x02)" + // 0x00650327: 0x00000229 - "\x00\xd6\x03\x04\x00\x00\x02*" + // 0x00D60304: 0x0000022A - "\x00\xf6\x03\x04\x00\x00\x02+" + // 0x00F60304: 0x0000022B - "\x00\xd5\x03\x04\x00\x00\x02," + // 0x00D50304: 0x0000022C - "\x00\xf5\x03\x04\x00\x00\x02-" + // 0x00F50304: 0x0000022D - "\x00O\x03\a\x00\x00\x02." + // 0x004F0307: 0x0000022E - "\x00o\x03\a\x00\x00\x02/" + // 0x006F0307: 0x0000022F - "\x02.\x03\x04\x00\x00\x020" + // 0x022E0304: 0x00000230 - "\x02/\x03\x04\x00\x00\x021" + // 0x022F0304: 0x00000231 - "\x00Y\x03\x04\x00\x00\x022" + // 0x00590304: 0x00000232 - "\x00y\x03\x04\x00\x00\x023" + // 0x00790304: 0x00000233 - "\x00\xa8\x03\x01\x00\x00\x03\x85" + // 0x00A80301: 0x00000385 - "\x03\x91\x03\x01\x00\x00\x03\x86" + // 0x03910301: 0x00000386 - "\x03\x95\x03\x01\x00\x00\x03\x88" + // 0x03950301: 0x00000388 - "\x03\x97\x03\x01\x00\x00\x03\x89" + // 0x03970301: 0x00000389 - "\x03\x99\x03\x01\x00\x00\x03\x8a" + // 0x03990301: 0x0000038A - "\x03\x9f\x03\x01\x00\x00\x03\x8c" + // 0x039F0301: 0x0000038C - "\x03\xa5\x03\x01\x00\x00\x03\x8e" + // 0x03A50301: 0x0000038E - "\x03\xa9\x03\x01\x00\x00\x03\x8f" + // 0x03A90301: 0x0000038F - "\x03\xca\x03\x01\x00\x00\x03\x90" + // 0x03CA0301: 0x00000390 - "\x03\x99\x03\b\x00\x00\x03\xaa" + // 0x03990308: 0x000003AA - "\x03\xa5\x03\b\x00\x00\x03\xab" + // 0x03A50308: 0x000003AB - "\x03\xb1\x03\x01\x00\x00\x03\xac" + // 0x03B10301: 0x000003AC - "\x03\xb5\x03\x01\x00\x00\x03\xad" + // 0x03B50301: 0x000003AD - "\x03\xb7\x03\x01\x00\x00\x03\xae" + // 0x03B70301: 0x000003AE - "\x03\xb9\x03\x01\x00\x00\x03\xaf" + // 0x03B90301: 0x000003AF - "\x03\xcb\x03\x01\x00\x00\x03\xb0" + // 0x03CB0301: 0x000003B0 - "\x03\xb9\x03\b\x00\x00\x03\xca" + // 0x03B90308: 0x000003CA - "\x03\xc5\x03\b\x00\x00\x03\xcb" + // 0x03C50308: 0x000003CB - "\x03\xbf\x03\x01\x00\x00\x03\xcc" + // 0x03BF0301: 0x000003CC - "\x03\xc5\x03\x01\x00\x00\x03\xcd" + // 0x03C50301: 0x000003CD - "\x03\xc9\x03\x01\x00\x00\x03\xce" + // 0x03C90301: 0x000003CE - "\x03\xd2\x03\x01\x00\x00\x03\xd3" + // 0x03D20301: 0x000003D3 - "\x03\xd2\x03\b\x00\x00\x03\xd4" + // 0x03D20308: 0x000003D4 - "\x04\x15\x03\x00\x00\x00\x04\x00" + // 0x04150300: 0x00000400 - "\x04\x15\x03\b\x00\x00\x04\x01" + // 0x04150308: 0x00000401 - "\x04\x13\x03\x01\x00\x00\x04\x03" + // 0x04130301: 0x00000403 - "\x04\x06\x03\b\x00\x00\x04\a" + // 0x04060308: 0x00000407 - "\x04\x1a\x03\x01\x00\x00\x04\f" + // 0x041A0301: 0x0000040C - "\x04\x18\x03\x00\x00\x00\x04\r" + // 0x04180300: 0x0000040D - "\x04#\x03\x06\x00\x00\x04\x0e" + // 0x04230306: 0x0000040E - "\x04\x18\x03\x06\x00\x00\x04\x19" + // 0x04180306: 0x00000419 - "\x048\x03\x06\x00\x00\x049" + // 0x04380306: 0x00000439 - "\x045\x03\x00\x00\x00\x04P" + // 0x04350300: 0x00000450 - "\x045\x03\b\x00\x00\x04Q" + // 0x04350308: 0x00000451 - "\x043\x03\x01\x00\x00\x04S" + // 0x04330301: 0x00000453 - "\x04V\x03\b\x00\x00\x04W" + // 0x04560308: 0x00000457 - "\x04:\x03\x01\x00\x00\x04\\" + // 0x043A0301: 0x0000045C - "\x048\x03\x00\x00\x00\x04]" + // 0x04380300: 0x0000045D - "\x04C\x03\x06\x00\x00\x04^" + // 0x04430306: 0x0000045E - "\x04t\x03\x0f\x00\x00\x04v" + // 0x0474030F: 0x00000476 - "\x04u\x03\x0f\x00\x00\x04w" + // 0x0475030F: 0x00000477 - "\x04\x16\x03\x06\x00\x00\x04\xc1" + // 0x04160306: 0x000004C1 - "\x046\x03\x06\x00\x00\x04\xc2" + // 0x04360306: 0x000004C2 - "\x04\x10\x03\x06\x00\x00\x04\xd0" + // 0x04100306: 0x000004D0 - "\x040\x03\x06\x00\x00\x04\xd1" + // 0x04300306: 0x000004D1 - "\x04\x10\x03\b\x00\x00\x04\xd2" + // 0x04100308: 0x000004D2 - "\x040\x03\b\x00\x00\x04\xd3" + // 0x04300308: 0x000004D3 - "\x04\x15\x03\x06\x00\x00\x04\xd6" + // 0x04150306: 0x000004D6 - "\x045\x03\x06\x00\x00\x04\xd7" + // 0x04350306: 0x000004D7 - "\x04\xd8\x03\b\x00\x00\x04\xda" + // 0x04D80308: 0x000004DA - "\x04\xd9\x03\b\x00\x00\x04\xdb" + // 0x04D90308: 0x000004DB - "\x04\x16\x03\b\x00\x00\x04\xdc" + // 0x04160308: 0x000004DC - "\x046\x03\b\x00\x00\x04\xdd" + // 0x04360308: 0x000004DD - "\x04\x17\x03\b\x00\x00\x04\xde" + // 0x04170308: 0x000004DE - "\x047\x03\b\x00\x00\x04\xdf" + // 0x04370308: 0x000004DF - "\x04\x18\x03\x04\x00\x00\x04\xe2" + // 0x04180304: 0x000004E2 - "\x048\x03\x04\x00\x00\x04\xe3" + // 0x04380304: 0x000004E3 - "\x04\x18\x03\b\x00\x00\x04\xe4" + // 0x04180308: 0x000004E4 - "\x048\x03\b\x00\x00\x04\xe5" + // 0x04380308: 0x000004E5 - "\x04\x1e\x03\b\x00\x00\x04\xe6" + // 0x041E0308: 0x000004E6 - "\x04>\x03\b\x00\x00\x04\xe7" + // 0x043E0308: 0x000004E7 - "\x04\xe8\x03\b\x00\x00\x04\xea" + // 0x04E80308: 0x000004EA - "\x04\xe9\x03\b\x00\x00\x04\xeb" + // 0x04E90308: 0x000004EB - "\x04-\x03\b\x00\x00\x04\xec" + // 0x042D0308: 0x000004EC - "\x04M\x03\b\x00\x00\x04\xed" + // 0x044D0308: 0x000004ED - "\x04#\x03\x04\x00\x00\x04\xee" + // 0x04230304: 0x000004EE - "\x04C\x03\x04\x00\x00\x04\xef" + // 0x04430304: 0x000004EF - "\x04#\x03\b\x00\x00\x04\xf0" + // 0x04230308: 0x000004F0 - "\x04C\x03\b\x00\x00\x04\xf1" + // 0x04430308: 0x000004F1 - "\x04#\x03\v\x00\x00\x04\xf2" + // 0x0423030B: 0x000004F2 - "\x04C\x03\v\x00\x00\x04\xf3" + // 0x0443030B: 0x000004F3 - "\x04'\x03\b\x00\x00\x04\xf4" + // 0x04270308: 0x000004F4 - "\x04G\x03\b\x00\x00\x04\xf5" + // 0x04470308: 0x000004F5 - "\x04+\x03\b\x00\x00\x04\xf8" + // 0x042B0308: 0x000004F8 - "\x04K\x03\b\x00\x00\x04\xf9" + // 0x044B0308: 0x000004F9 - "\x06'\x06S\x00\x00\x06\"" + // 0x06270653: 0x00000622 - "\x06'\x06T\x00\x00\x06#" + // 0x06270654: 0x00000623 - "\x06H\x06T\x00\x00\x06$" + // 0x06480654: 0x00000624 - "\x06'\x06U\x00\x00\x06%" + // 0x06270655: 0x00000625 - "\x06J\x06T\x00\x00\x06&" + // 0x064A0654: 0x00000626 - "\x06\xd5\x06T\x00\x00\x06\xc0" + // 0x06D50654: 0x000006C0 - "\x06\xc1\x06T\x00\x00\x06\xc2" + // 0x06C10654: 0x000006C2 - "\x06\xd2\x06T\x00\x00\x06\xd3" + // 0x06D20654: 0x000006D3 - "\t(\t<\x00\x00\t)" + // 0x0928093C: 0x00000929 - "\t0\t<\x00\x00\t1" + // 0x0930093C: 0x00000931 - "\t3\t<\x00\x00\t4" + // 0x0933093C: 0x00000934 - "\t\xc7\t\xbe\x00\x00\t\xcb" + // 0x09C709BE: 0x000009CB - "\t\xc7\t\xd7\x00\x00\t\xcc" + // 0x09C709D7: 0x000009CC - "\vG\vV\x00\x00\vH" + // 0x0B470B56: 0x00000B48 - "\vG\v>\x00\x00\vK" + // 0x0B470B3E: 0x00000B4B - "\vG\vW\x00\x00\vL" + // 0x0B470B57: 0x00000B4C - "\v\x92\v\xd7\x00\x00\v\x94" + // 0x0B920BD7: 0x00000B94 - "\v\xc6\v\xbe\x00\x00\v\xca" + // 0x0BC60BBE: 0x00000BCA - "\v\xc7\v\xbe\x00\x00\v\xcb" + // 0x0BC70BBE: 0x00000BCB - "\v\xc6\v\xd7\x00\x00\v\xcc" + // 0x0BC60BD7: 0x00000BCC - "\fF\fV\x00\x00\fH" + // 0x0C460C56: 0x00000C48 - "\f\xbf\f\xd5\x00\x00\f\xc0" + // 0x0CBF0CD5: 0x00000CC0 - "\f\xc6\f\xd5\x00\x00\f\xc7" + // 0x0CC60CD5: 0x00000CC7 - "\f\xc6\f\xd6\x00\x00\f\xc8" + // 0x0CC60CD6: 0x00000CC8 - "\f\xc6\f\xc2\x00\x00\f\xca" + // 0x0CC60CC2: 0x00000CCA - "\f\xca\f\xd5\x00\x00\f\xcb" + // 0x0CCA0CD5: 0x00000CCB - "\rF\r>\x00\x00\rJ" + // 0x0D460D3E: 0x00000D4A - "\rG\r>\x00\x00\rK" + // 0x0D470D3E: 0x00000D4B - "\rF\rW\x00\x00\rL" + // 0x0D460D57: 0x00000D4C - "\r\xd9\r\xca\x00\x00\r\xda" + // 0x0DD90DCA: 0x00000DDA - "\r\xd9\r\xcf\x00\x00\r\xdc" + // 0x0DD90DCF: 0x00000DDC - "\r\xdc\r\xca\x00\x00\r\xdd" + // 0x0DDC0DCA: 0x00000DDD - "\r\xd9\r\xdf\x00\x00\r\xde" + // 0x0DD90DDF: 0x00000DDE - "\x10%\x10.\x00\x00\x10&" + // 0x1025102E: 0x00001026 - "\x1b\x05\x1b5\x00\x00\x1b\x06" + // 0x1B051B35: 0x00001B06 - "\x1b\a\x1b5\x00\x00\x1b\b" + // 0x1B071B35: 0x00001B08 - "\x1b\t\x1b5\x00\x00\x1b\n" + // 0x1B091B35: 0x00001B0A - "\x1b\v\x1b5\x00\x00\x1b\f" + // 0x1B0B1B35: 0x00001B0C - "\x1b\r\x1b5\x00\x00\x1b\x0e" + // 0x1B0D1B35: 0x00001B0E - "\x1b\x11\x1b5\x00\x00\x1b\x12" + // 0x1B111B35: 0x00001B12 - "\x1b:\x1b5\x00\x00\x1b;" + // 0x1B3A1B35: 0x00001B3B - "\x1b<\x1b5\x00\x00\x1b=" + // 0x1B3C1B35: 0x00001B3D - "\x1b>\x1b5\x00\x00\x1b@" + // 0x1B3E1B35: 0x00001B40 - "\x1b?\x1b5\x00\x00\x1bA" + // 0x1B3F1B35: 0x00001B41 - "\x1bB\x1b5\x00\x00\x1bC" + // 0x1B421B35: 0x00001B43 - "\x00A\x03%\x00\x00\x1e\x00" + // 0x00410325: 0x00001E00 - "\x00a\x03%\x00\x00\x1e\x01" + // 0x00610325: 0x00001E01 - "\x00B\x03\a\x00\x00\x1e\x02" + // 0x00420307: 0x00001E02 - "\x00b\x03\a\x00\x00\x1e\x03" + // 0x00620307: 0x00001E03 - "\x00B\x03#\x00\x00\x1e\x04" + // 0x00420323: 0x00001E04 - "\x00b\x03#\x00\x00\x1e\x05" + // 0x00620323: 0x00001E05 - "\x00B\x031\x00\x00\x1e\x06" + // 0x00420331: 0x00001E06 - "\x00b\x031\x00\x00\x1e\a" + // 0x00620331: 0x00001E07 - "\x00\xc7\x03\x01\x00\x00\x1e\b" + // 0x00C70301: 0x00001E08 - "\x00\xe7\x03\x01\x00\x00\x1e\t" + // 0x00E70301: 0x00001E09 - "\x00D\x03\a\x00\x00\x1e\n" + // 0x00440307: 0x00001E0A - "\x00d\x03\a\x00\x00\x1e\v" + // 0x00640307: 0x00001E0B - "\x00D\x03#\x00\x00\x1e\f" + // 0x00440323: 0x00001E0C - "\x00d\x03#\x00\x00\x1e\r" + // 0x00640323: 0x00001E0D - "\x00D\x031\x00\x00\x1e\x0e" + // 0x00440331: 0x00001E0E - "\x00d\x031\x00\x00\x1e\x0f" + // 0x00640331: 0x00001E0F - "\x00D\x03'\x00\x00\x1e\x10" + // 0x00440327: 0x00001E10 - "\x00d\x03'\x00\x00\x1e\x11" + // 0x00640327: 0x00001E11 - "\x00D\x03-\x00\x00\x1e\x12" + // 0x0044032D: 0x00001E12 - "\x00d\x03-\x00\x00\x1e\x13" + // 0x0064032D: 0x00001E13 - "\x01\x12\x03\x00\x00\x00\x1e\x14" + // 0x01120300: 0x00001E14 - "\x01\x13\x03\x00\x00\x00\x1e\x15" + // 0x01130300: 0x00001E15 - "\x01\x12\x03\x01\x00\x00\x1e\x16" + // 0x01120301: 0x00001E16 - "\x01\x13\x03\x01\x00\x00\x1e\x17" + // 0x01130301: 0x00001E17 - "\x00E\x03-\x00\x00\x1e\x18" + // 0x0045032D: 0x00001E18 - "\x00e\x03-\x00\x00\x1e\x19" + // 0x0065032D: 0x00001E19 - "\x00E\x030\x00\x00\x1e\x1a" + // 0x00450330: 0x00001E1A - "\x00e\x030\x00\x00\x1e\x1b" + // 0x00650330: 0x00001E1B - "\x02(\x03\x06\x00\x00\x1e\x1c" + // 0x02280306: 0x00001E1C - "\x02)\x03\x06\x00\x00\x1e\x1d" + // 0x02290306: 0x00001E1D - "\x00F\x03\a\x00\x00\x1e\x1e" + // 0x00460307: 0x00001E1E - "\x00f\x03\a\x00\x00\x1e\x1f" + // 0x00660307: 0x00001E1F - "\x00G\x03\x04\x00\x00\x1e " + // 0x00470304: 0x00001E20 - "\x00g\x03\x04\x00\x00\x1e!" + // 0x00670304: 0x00001E21 - "\x00H\x03\a\x00\x00\x1e\"" + // 0x00480307: 0x00001E22 - "\x00h\x03\a\x00\x00\x1e#" + // 0x00680307: 0x00001E23 - "\x00H\x03#\x00\x00\x1e$" + // 0x00480323: 0x00001E24 - "\x00h\x03#\x00\x00\x1e%" + // 0x00680323: 0x00001E25 - "\x00H\x03\b\x00\x00\x1e&" + // 0x00480308: 0x00001E26 - "\x00h\x03\b\x00\x00\x1e'" + // 0x00680308: 0x00001E27 - "\x00H\x03'\x00\x00\x1e(" + // 0x00480327: 0x00001E28 - "\x00h\x03'\x00\x00\x1e)" + // 0x00680327: 0x00001E29 - "\x00H\x03.\x00\x00\x1e*" + // 0x0048032E: 0x00001E2A - "\x00h\x03.\x00\x00\x1e+" + // 0x0068032E: 0x00001E2B - "\x00I\x030\x00\x00\x1e," + // 0x00490330: 0x00001E2C - "\x00i\x030\x00\x00\x1e-" + // 0x00690330: 0x00001E2D - "\x00\xcf\x03\x01\x00\x00\x1e." + // 0x00CF0301: 0x00001E2E - "\x00\xef\x03\x01\x00\x00\x1e/" + // 0x00EF0301: 0x00001E2F - "\x00K\x03\x01\x00\x00\x1e0" + // 0x004B0301: 0x00001E30 - "\x00k\x03\x01\x00\x00\x1e1" + // 0x006B0301: 0x00001E31 - "\x00K\x03#\x00\x00\x1e2" + // 0x004B0323: 0x00001E32 - "\x00k\x03#\x00\x00\x1e3" + // 0x006B0323: 0x00001E33 - "\x00K\x031\x00\x00\x1e4" + // 0x004B0331: 0x00001E34 - "\x00k\x031\x00\x00\x1e5" + // 0x006B0331: 0x00001E35 - "\x00L\x03#\x00\x00\x1e6" + // 0x004C0323: 0x00001E36 - "\x00l\x03#\x00\x00\x1e7" + // 0x006C0323: 0x00001E37 - "\x1e6\x03\x04\x00\x00\x1e8" + // 0x1E360304: 0x00001E38 - "\x1e7\x03\x04\x00\x00\x1e9" + // 0x1E370304: 0x00001E39 - "\x00L\x031\x00\x00\x1e:" + // 0x004C0331: 0x00001E3A - "\x00l\x031\x00\x00\x1e;" + // 0x006C0331: 0x00001E3B - "\x00L\x03-\x00\x00\x1e<" + // 0x004C032D: 0x00001E3C - "\x00l\x03-\x00\x00\x1e=" + // 0x006C032D: 0x00001E3D - "\x00M\x03\x01\x00\x00\x1e>" + // 0x004D0301: 0x00001E3E - "\x00m\x03\x01\x00\x00\x1e?" + // 0x006D0301: 0x00001E3F - "\x00M\x03\a\x00\x00\x1e@" + // 0x004D0307: 0x00001E40 - "\x00m\x03\a\x00\x00\x1eA" + // 0x006D0307: 0x00001E41 - "\x00M\x03#\x00\x00\x1eB" + // 0x004D0323: 0x00001E42 - "\x00m\x03#\x00\x00\x1eC" + // 0x006D0323: 0x00001E43 - "\x00N\x03\a\x00\x00\x1eD" + // 0x004E0307: 0x00001E44 - "\x00n\x03\a\x00\x00\x1eE" + // 0x006E0307: 0x00001E45 - "\x00N\x03#\x00\x00\x1eF" + // 0x004E0323: 0x00001E46 - "\x00n\x03#\x00\x00\x1eG" + // 0x006E0323: 0x00001E47 - "\x00N\x031\x00\x00\x1eH" + // 0x004E0331: 0x00001E48 - "\x00n\x031\x00\x00\x1eI" + // 0x006E0331: 0x00001E49 - "\x00N\x03-\x00\x00\x1eJ" + // 0x004E032D: 0x00001E4A - "\x00n\x03-\x00\x00\x1eK" + // 0x006E032D: 0x00001E4B - "\x00\xd5\x03\x01\x00\x00\x1eL" + // 0x00D50301: 0x00001E4C - "\x00\xf5\x03\x01\x00\x00\x1eM" + // 0x00F50301: 0x00001E4D - "\x00\xd5\x03\b\x00\x00\x1eN" + // 0x00D50308: 0x00001E4E - "\x00\xf5\x03\b\x00\x00\x1eO" + // 0x00F50308: 0x00001E4F - "\x01L\x03\x00\x00\x00\x1eP" + // 0x014C0300: 0x00001E50 - "\x01M\x03\x00\x00\x00\x1eQ" + // 0x014D0300: 0x00001E51 - "\x01L\x03\x01\x00\x00\x1eR" + // 0x014C0301: 0x00001E52 - "\x01M\x03\x01\x00\x00\x1eS" + // 0x014D0301: 0x00001E53 - "\x00P\x03\x01\x00\x00\x1eT" + // 0x00500301: 0x00001E54 - "\x00p\x03\x01\x00\x00\x1eU" + // 0x00700301: 0x00001E55 - "\x00P\x03\a\x00\x00\x1eV" + // 0x00500307: 0x00001E56 - "\x00p\x03\a\x00\x00\x1eW" + // 0x00700307: 0x00001E57 - "\x00R\x03\a\x00\x00\x1eX" + // 0x00520307: 0x00001E58 - "\x00r\x03\a\x00\x00\x1eY" + // 0x00720307: 0x00001E59 - "\x00R\x03#\x00\x00\x1eZ" + // 0x00520323: 0x00001E5A - "\x00r\x03#\x00\x00\x1e[" + // 0x00720323: 0x00001E5B - "\x1eZ\x03\x04\x00\x00\x1e\\" + // 0x1E5A0304: 0x00001E5C - "\x1e[\x03\x04\x00\x00\x1e]" + // 0x1E5B0304: 0x00001E5D - "\x00R\x031\x00\x00\x1e^" + // 0x00520331: 0x00001E5E - "\x00r\x031\x00\x00\x1e_" + // 0x00720331: 0x00001E5F - "\x00S\x03\a\x00\x00\x1e`" + // 0x00530307: 0x00001E60 - "\x00s\x03\a\x00\x00\x1ea" + // 0x00730307: 0x00001E61 - "\x00S\x03#\x00\x00\x1eb" + // 0x00530323: 0x00001E62 - "\x00s\x03#\x00\x00\x1ec" + // 0x00730323: 0x00001E63 - "\x01Z\x03\a\x00\x00\x1ed" + // 0x015A0307: 0x00001E64 - "\x01[\x03\a\x00\x00\x1ee" + // 0x015B0307: 0x00001E65 - "\x01`\x03\a\x00\x00\x1ef" + // 0x01600307: 0x00001E66 - "\x01a\x03\a\x00\x00\x1eg" + // 0x01610307: 0x00001E67 - "\x1eb\x03\a\x00\x00\x1eh" + // 0x1E620307: 0x00001E68 - "\x1ec\x03\a\x00\x00\x1ei" + // 0x1E630307: 0x00001E69 - "\x00T\x03\a\x00\x00\x1ej" + // 0x00540307: 0x00001E6A - "\x00t\x03\a\x00\x00\x1ek" + // 0x00740307: 0x00001E6B - "\x00T\x03#\x00\x00\x1el" + // 0x00540323: 0x00001E6C - "\x00t\x03#\x00\x00\x1em" + // 0x00740323: 0x00001E6D - "\x00T\x031\x00\x00\x1en" + // 0x00540331: 0x00001E6E - "\x00t\x031\x00\x00\x1eo" + // 0x00740331: 0x00001E6F - "\x00T\x03-\x00\x00\x1ep" + // 0x0054032D: 0x00001E70 - "\x00t\x03-\x00\x00\x1eq" + // 0x0074032D: 0x00001E71 - "\x00U\x03$\x00\x00\x1er" + // 0x00550324: 0x00001E72 - "\x00u\x03$\x00\x00\x1es" + // 0x00750324: 0x00001E73 - "\x00U\x030\x00\x00\x1et" + // 0x00550330: 0x00001E74 - "\x00u\x030\x00\x00\x1eu" + // 0x00750330: 0x00001E75 - "\x00U\x03-\x00\x00\x1ev" + // 0x0055032D: 0x00001E76 - "\x00u\x03-\x00\x00\x1ew" + // 0x0075032D: 0x00001E77 - "\x01h\x03\x01\x00\x00\x1ex" + // 0x01680301: 0x00001E78 - "\x01i\x03\x01\x00\x00\x1ey" + // 0x01690301: 0x00001E79 - "\x01j\x03\b\x00\x00\x1ez" + // 0x016A0308: 0x00001E7A - "\x01k\x03\b\x00\x00\x1e{" + // 0x016B0308: 0x00001E7B - "\x00V\x03\x03\x00\x00\x1e|" + // 0x00560303: 0x00001E7C - "\x00v\x03\x03\x00\x00\x1e}" + // 0x00760303: 0x00001E7D - "\x00V\x03#\x00\x00\x1e~" + // 0x00560323: 0x00001E7E - "\x00v\x03#\x00\x00\x1e\u007f" + // 0x00760323: 0x00001E7F - "\x00W\x03\x00\x00\x00\x1e\x80" + // 0x00570300: 0x00001E80 - "\x00w\x03\x00\x00\x00\x1e\x81" + // 0x00770300: 0x00001E81 - "\x00W\x03\x01\x00\x00\x1e\x82" + // 0x00570301: 0x00001E82 - "\x00w\x03\x01\x00\x00\x1e\x83" + // 0x00770301: 0x00001E83 - "\x00W\x03\b\x00\x00\x1e\x84" + // 0x00570308: 0x00001E84 - "\x00w\x03\b\x00\x00\x1e\x85" + // 0x00770308: 0x00001E85 - "\x00W\x03\a\x00\x00\x1e\x86" + // 0x00570307: 0x00001E86 - "\x00w\x03\a\x00\x00\x1e\x87" + // 0x00770307: 0x00001E87 - "\x00W\x03#\x00\x00\x1e\x88" + // 0x00570323: 0x00001E88 - "\x00w\x03#\x00\x00\x1e\x89" + // 0x00770323: 0x00001E89 - "\x00X\x03\a\x00\x00\x1e\x8a" + // 0x00580307: 0x00001E8A - "\x00x\x03\a\x00\x00\x1e\x8b" + // 0x00780307: 0x00001E8B - "\x00X\x03\b\x00\x00\x1e\x8c" + // 0x00580308: 0x00001E8C - "\x00x\x03\b\x00\x00\x1e\x8d" + // 0x00780308: 0x00001E8D - "\x00Y\x03\a\x00\x00\x1e\x8e" + // 0x00590307: 0x00001E8E - "\x00y\x03\a\x00\x00\x1e\x8f" + // 0x00790307: 0x00001E8F - "\x00Z\x03\x02\x00\x00\x1e\x90" + // 0x005A0302: 0x00001E90 - "\x00z\x03\x02\x00\x00\x1e\x91" + // 0x007A0302: 0x00001E91 - "\x00Z\x03#\x00\x00\x1e\x92" + // 0x005A0323: 0x00001E92 - "\x00z\x03#\x00\x00\x1e\x93" + // 0x007A0323: 0x00001E93 - "\x00Z\x031\x00\x00\x1e\x94" + // 0x005A0331: 0x00001E94 - "\x00z\x031\x00\x00\x1e\x95" + // 0x007A0331: 0x00001E95 - "\x00h\x031\x00\x00\x1e\x96" + // 0x00680331: 0x00001E96 - "\x00t\x03\b\x00\x00\x1e\x97" + // 0x00740308: 0x00001E97 - "\x00w\x03\n\x00\x00\x1e\x98" + // 0x0077030A: 0x00001E98 - "\x00y\x03\n\x00\x00\x1e\x99" + // 0x0079030A: 0x00001E99 - "\x01\u007f\x03\a\x00\x00\x1e\x9b" + // 0x017F0307: 0x00001E9B - "\x00A\x03#\x00\x00\x1e\xa0" + // 0x00410323: 0x00001EA0 - "\x00a\x03#\x00\x00\x1e\xa1" + // 0x00610323: 0x00001EA1 - "\x00A\x03\t\x00\x00\x1e\xa2" + // 0x00410309: 0x00001EA2 - "\x00a\x03\t\x00\x00\x1e\xa3" + // 0x00610309: 0x00001EA3 - "\x00\xc2\x03\x01\x00\x00\x1e\xa4" + // 0x00C20301: 0x00001EA4 - "\x00\xe2\x03\x01\x00\x00\x1e\xa5" + // 0x00E20301: 0x00001EA5 - "\x00\xc2\x03\x00\x00\x00\x1e\xa6" + // 0x00C20300: 0x00001EA6 - "\x00\xe2\x03\x00\x00\x00\x1e\xa7" + // 0x00E20300: 0x00001EA7 - "\x00\xc2\x03\t\x00\x00\x1e\xa8" + // 0x00C20309: 0x00001EA8 - "\x00\xe2\x03\t\x00\x00\x1e\xa9" + // 0x00E20309: 0x00001EA9 - "\x00\xc2\x03\x03\x00\x00\x1e\xaa" + // 0x00C20303: 0x00001EAA - "\x00\xe2\x03\x03\x00\x00\x1e\xab" + // 0x00E20303: 0x00001EAB - "\x1e\xa0\x03\x02\x00\x00\x1e\xac" + // 0x1EA00302: 0x00001EAC - "\x1e\xa1\x03\x02\x00\x00\x1e\xad" + // 0x1EA10302: 0x00001EAD - "\x01\x02\x03\x01\x00\x00\x1e\xae" + // 0x01020301: 0x00001EAE - "\x01\x03\x03\x01\x00\x00\x1e\xaf" + // 0x01030301: 0x00001EAF - "\x01\x02\x03\x00\x00\x00\x1e\xb0" + // 0x01020300: 0x00001EB0 - "\x01\x03\x03\x00\x00\x00\x1e\xb1" + // 0x01030300: 0x00001EB1 - "\x01\x02\x03\t\x00\x00\x1e\xb2" + // 0x01020309: 0x00001EB2 - "\x01\x03\x03\t\x00\x00\x1e\xb3" + // 0x01030309: 0x00001EB3 - "\x01\x02\x03\x03\x00\x00\x1e\xb4" + // 0x01020303: 0x00001EB4 - "\x01\x03\x03\x03\x00\x00\x1e\xb5" + // 0x01030303: 0x00001EB5 - "\x1e\xa0\x03\x06\x00\x00\x1e\xb6" + // 0x1EA00306: 0x00001EB6 - "\x1e\xa1\x03\x06\x00\x00\x1e\xb7" + // 0x1EA10306: 0x00001EB7 - "\x00E\x03#\x00\x00\x1e\xb8" + // 0x00450323: 0x00001EB8 - "\x00e\x03#\x00\x00\x1e\xb9" + // 0x00650323: 0x00001EB9 - "\x00E\x03\t\x00\x00\x1e\xba" + // 0x00450309: 0x00001EBA - "\x00e\x03\t\x00\x00\x1e\xbb" + // 0x00650309: 0x00001EBB - "\x00E\x03\x03\x00\x00\x1e\xbc" + // 0x00450303: 0x00001EBC - "\x00e\x03\x03\x00\x00\x1e\xbd" + // 0x00650303: 0x00001EBD - "\x00\xca\x03\x01\x00\x00\x1e\xbe" + // 0x00CA0301: 0x00001EBE - "\x00\xea\x03\x01\x00\x00\x1e\xbf" + // 0x00EA0301: 0x00001EBF - "\x00\xca\x03\x00\x00\x00\x1e\xc0" + // 0x00CA0300: 0x00001EC0 - "\x00\xea\x03\x00\x00\x00\x1e\xc1" + // 0x00EA0300: 0x00001EC1 - "\x00\xca\x03\t\x00\x00\x1e\xc2" + // 0x00CA0309: 0x00001EC2 - "\x00\xea\x03\t\x00\x00\x1e\xc3" + // 0x00EA0309: 0x00001EC3 - "\x00\xca\x03\x03\x00\x00\x1e\xc4" + // 0x00CA0303: 0x00001EC4 - "\x00\xea\x03\x03\x00\x00\x1e\xc5" + // 0x00EA0303: 0x00001EC5 - "\x1e\xb8\x03\x02\x00\x00\x1e\xc6" + // 0x1EB80302: 0x00001EC6 - "\x1e\xb9\x03\x02\x00\x00\x1e\xc7" + // 0x1EB90302: 0x00001EC7 - "\x00I\x03\t\x00\x00\x1e\xc8" + // 0x00490309: 0x00001EC8 - "\x00i\x03\t\x00\x00\x1e\xc9" + // 0x00690309: 0x00001EC9 - "\x00I\x03#\x00\x00\x1e\xca" + // 0x00490323: 0x00001ECA - "\x00i\x03#\x00\x00\x1e\xcb" + // 0x00690323: 0x00001ECB - "\x00O\x03#\x00\x00\x1e\xcc" + // 0x004F0323: 0x00001ECC - "\x00o\x03#\x00\x00\x1e\xcd" + // 0x006F0323: 0x00001ECD - "\x00O\x03\t\x00\x00\x1e\xce" + // 0x004F0309: 0x00001ECE - "\x00o\x03\t\x00\x00\x1e\xcf" + // 0x006F0309: 0x00001ECF - "\x00\xd4\x03\x01\x00\x00\x1e\xd0" + // 0x00D40301: 0x00001ED0 - "\x00\xf4\x03\x01\x00\x00\x1e\xd1" + // 0x00F40301: 0x00001ED1 - "\x00\xd4\x03\x00\x00\x00\x1e\xd2" + // 0x00D40300: 0x00001ED2 - "\x00\xf4\x03\x00\x00\x00\x1e\xd3" + // 0x00F40300: 0x00001ED3 - "\x00\xd4\x03\t\x00\x00\x1e\xd4" + // 0x00D40309: 0x00001ED4 - "\x00\xf4\x03\t\x00\x00\x1e\xd5" + // 0x00F40309: 0x00001ED5 - "\x00\xd4\x03\x03\x00\x00\x1e\xd6" + // 0x00D40303: 0x00001ED6 - "\x00\xf4\x03\x03\x00\x00\x1e\xd7" + // 0x00F40303: 0x00001ED7 - "\x1e\xcc\x03\x02\x00\x00\x1e\xd8" + // 0x1ECC0302: 0x00001ED8 - "\x1e\xcd\x03\x02\x00\x00\x1e\xd9" + // 0x1ECD0302: 0x00001ED9 - "\x01\xa0\x03\x01\x00\x00\x1e\xda" + // 0x01A00301: 0x00001EDA - "\x01\xa1\x03\x01\x00\x00\x1e\xdb" + // 0x01A10301: 0x00001EDB - "\x01\xa0\x03\x00\x00\x00\x1e\xdc" + // 0x01A00300: 0x00001EDC - "\x01\xa1\x03\x00\x00\x00\x1e\xdd" + // 0x01A10300: 0x00001EDD - "\x01\xa0\x03\t\x00\x00\x1e\xde" + // 0x01A00309: 0x00001EDE - "\x01\xa1\x03\t\x00\x00\x1e\xdf" + // 0x01A10309: 0x00001EDF - "\x01\xa0\x03\x03\x00\x00\x1e\xe0" + // 0x01A00303: 0x00001EE0 - "\x01\xa1\x03\x03\x00\x00\x1e\xe1" + // 0x01A10303: 0x00001EE1 - "\x01\xa0\x03#\x00\x00\x1e\xe2" + // 0x01A00323: 0x00001EE2 - "\x01\xa1\x03#\x00\x00\x1e\xe3" + // 0x01A10323: 0x00001EE3 - "\x00U\x03#\x00\x00\x1e\xe4" + // 0x00550323: 0x00001EE4 - "\x00u\x03#\x00\x00\x1e\xe5" + // 0x00750323: 0x00001EE5 - "\x00U\x03\t\x00\x00\x1e\xe6" + // 0x00550309: 0x00001EE6 - "\x00u\x03\t\x00\x00\x1e\xe7" + // 0x00750309: 0x00001EE7 - "\x01\xaf\x03\x01\x00\x00\x1e\xe8" + // 0x01AF0301: 0x00001EE8 - "\x01\xb0\x03\x01\x00\x00\x1e\xe9" + // 0x01B00301: 0x00001EE9 - "\x01\xaf\x03\x00\x00\x00\x1e\xea" + // 0x01AF0300: 0x00001EEA - "\x01\xb0\x03\x00\x00\x00\x1e\xeb" + // 0x01B00300: 0x00001EEB - "\x01\xaf\x03\t\x00\x00\x1e\xec" + // 0x01AF0309: 0x00001EEC - "\x01\xb0\x03\t\x00\x00\x1e\xed" + // 0x01B00309: 0x00001EED - "\x01\xaf\x03\x03\x00\x00\x1e\xee" + // 0x01AF0303: 0x00001EEE - "\x01\xb0\x03\x03\x00\x00\x1e\xef" + // 0x01B00303: 0x00001EEF - "\x01\xaf\x03#\x00\x00\x1e\xf0" + // 0x01AF0323: 0x00001EF0 - "\x01\xb0\x03#\x00\x00\x1e\xf1" + // 0x01B00323: 0x00001EF1 - "\x00Y\x03\x00\x00\x00\x1e\xf2" + // 0x00590300: 0x00001EF2 - "\x00y\x03\x00\x00\x00\x1e\xf3" + // 0x00790300: 0x00001EF3 - "\x00Y\x03#\x00\x00\x1e\xf4" + // 0x00590323: 0x00001EF4 - "\x00y\x03#\x00\x00\x1e\xf5" + // 0x00790323: 0x00001EF5 - "\x00Y\x03\t\x00\x00\x1e\xf6" + // 0x00590309: 0x00001EF6 - "\x00y\x03\t\x00\x00\x1e\xf7" + // 0x00790309: 0x00001EF7 - "\x00Y\x03\x03\x00\x00\x1e\xf8" + // 0x00590303: 0x00001EF8 - "\x00y\x03\x03\x00\x00\x1e\xf9" + // 0x00790303: 0x00001EF9 - "\x03\xb1\x03\x13\x00\x00\x1f\x00" + // 0x03B10313: 0x00001F00 - "\x03\xb1\x03\x14\x00\x00\x1f\x01" + // 0x03B10314: 0x00001F01 - "\x1f\x00\x03\x00\x00\x00\x1f\x02" + // 0x1F000300: 0x00001F02 - "\x1f\x01\x03\x00\x00\x00\x1f\x03" + // 0x1F010300: 0x00001F03 - "\x1f\x00\x03\x01\x00\x00\x1f\x04" + // 0x1F000301: 0x00001F04 - "\x1f\x01\x03\x01\x00\x00\x1f\x05" + // 0x1F010301: 0x00001F05 - "\x1f\x00\x03B\x00\x00\x1f\x06" + // 0x1F000342: 0x00001F06 - "\x1f\x01\x03B\x00\x00\x1f\a" + // 0x1F010342: 0x00001F07 - "\x03\x91\x03\x13\x00\x00\x1f\b" + // 0x03910313: 0x00001F08 - "\x03\x91\x03\x14\x00\x00\x1f\t" + // 0x03910314: 0x00001F09 - "\x1f\b\x03\x00\x00\x00\x1f\n" + // 0x1F080300: 0x00001F0A - "\x1f\t\x03\x00\x00\x00\x1f\v" + // 0x1F090300: 0x00001F0B - "\x1f\b\x03\x01\x00\x00\x1f\f" + // 0x1F080301: 0x00001F0C - "\x1f\t\x03\x01\x00\x00\x1f\r" + // 0x1F090301: 0x00001F0D - "\x1f\b\x03B\x00\x00\x1f\x0e" + // 0x1F080342: 0x00001F0E - "\x1f\t\x03B\x00\x00\x1f\x0f" + // 0x1F090342: 0x00001F0F - "\x03\xb5\x03\x13\x00\x00\x1f\x10" + // 0x03B50313: 0x00001F10 - "\x03\xb5\x03\x14\x00\x00\x1f\x11" + // 0x03B50314: 0x00001F11 - "\x1f\x10\x03\x00\x00\x00\x1f\x12" + // 0x1F100300: 0x00001F12 - "\x1f\x11\x03\x00\x00\x00\x1f\x13" + // 0x1F110300: 0x00001F13 - "\x1f\x10\x03\x01\x00\x00\x1f\x14" + // 0x1F100301: 0x00001F14 - "\x1f\x11\x03\x01\x00\x00\x1f\x15" + // 0x1F110301: 0x00001F15 - "\x03\x95\x03\x13\x00\x00\x1f\x18" + // 0x03950313: 0x00001F18 - "\x03\x95\x03\x14\x00\x00\x1f\x19" + // 0x03950314: 0x00001F19 - "\x1f\x18\x03\x00\x00\x00\x1f\x1a" + // 0x1F180300: 0x00001F1A - "\x1f\x19\x03\x00\x00\x00\x1f\x1b" + // 0x1F190300: 0x00001F1B - "\x1f\x18\x03\x01\x00\x00\x1f\x1c" + // 0x1F180301: 0x00001F1C - "\x1f\x19\x03\x01\x00\x00\x1f\x1d" + // 0x1F190301: 0x00001F1D - "\x03\xb7\x03\x13\x00\x00\x1f " + // 0x03B70313: 0x00001F20 - "\x03\xb7\x03\x14\x00\x00\x1f!" + // 0x03B70314: 0x00001F21 - "\x1f \x03\x00\x00\x00\x1f\"" + // 0x1F200300: 0x00001F22 - "\x1f!\x03\x00\x00\x00\x1f#" + // 0x1F210300: 0x00001F23 - "\x1f \x03\x01\x00\x00\x1f$" + // 0x1F200301: 0x00001F24 - "\x1f!\x03\x01\x00\x00\x1f%" + // 0x1F210301: 0x00001F25 - "\x1f \x03B\x00\x00\x1f&" + // 0x1F200342: 0x00001F26 - "\x1f!\x03B\x00\x00\x1f'" + // 0x1F210342: 0x00001F27 - "\x03\x97\x03\x13\x00\x00\x1f(" + // 0x03970313: 0x00001F28 - "\x03\x97\x03\x14\x00\x00\x1f)" + // 0x03970314: 0x00001F29 - "\x1f(\x03\x00\x00\x00\x1f*" + // 0x1F280300: 0x00001F2A - "\x1f)\x03\x00\x00\x00\x1f+" + // 0x1F290300: 0x00001F2B - "\x1f(\x03\x01\x00\x00\x1f," + // 0x1F280301: 0x00001F2C - "\x1f)\x03\x01\x00\x00\x1f-" + // 0x1F290301: 0x00001F2D - "\x1f(\x03B\x00\x00\x1f." + // 0x1F280342: 0x00001F2E - "\x1f)\x03B\x00\x00\x1f/" + // 0x1F290342: 0x00001F2F - "\x03\xb9\x03\x13\x00\x00\x1f0" + // 0x03B90313: 0x00001F30 - "\x03\xb9\x03\x14\x00\x00\x1f1" + // 0x03B90314: 0x00001F31 - "\x1f0\x03\x00\x00\x00\x1f2" + // 0x1F300300: 0x00001F32 - "\x1f1\x03\x00\x00\x00\x1f3" + // 0x1F310300: 0x00001F33 - "\x1f0\x03\x01\x00\x00\x1f4" + // 0x1F300301: 0x00001F34 - "\x1f1\x03\x01\x00\x00\x1f5" + // 0x1F310301: 0x00001F35 - "\x1f0\x03B\x00\x00\x1f6" + // 0x1F300342: 0x00001F36 - "\x1f1\x03B\x00\x00\x1f7" + // 0x1F310342: 0x00001F37 - "\x03\x99\x03\x13\x00\x00\x1f8" + // 0x03990313: 0x00001F38 - "\x03\x99\x03\x14\x00\x00\x1f9" + // 0x03990314: 0x00001F39 - "\x1f8\x03\x00\x00\x00\x1f:" + // 0x1F380300: 0x00001F3A - "\x1f9\x03\x00\x00\x00\x1f;" + // 0x1F390300: 0x00001F3B - "\x1f8\x03\x01\x00\x00\x1f<" + // 0x1F380301: 0x00001F3C - "\x1f9\x03\x01\x00\x00\x1f=" + // 0x1F390301: 0x00001F3D - "\x1f8\x03B\x00\x00\x1f>" + // 0x1F380342: 0x00001F3E - "\x1f9\x03B\x00\x00\x1f?" + // 0x1F390342: 0x00001F3F - "\x03\xbf\x03\x13\x00\x00\x1f@" + // 0x03BF0313: 0x00001F40 - "\x03\xbf\x03\x14\x00\x00\x1fA" + // 0x03BF0314: 0x00001F41 - "\x1f@\x03\x00\x00\x00\x1fB" + // 0x1F400300: 0x00001F42 - "\x1fA\x03\x00\x00\x00\x1fC" + // 0x1F410300: 0x00001F43 - "\x1f@\x03\x01\x00\x00\x1fD" + // 0x1F400301: 0x00001F44 - "\x1fA\x03\x01\x00\x00\x1fE" + // 0x1F410301: 0x00001F45 - "\x03\x9f\x03\x13\x00\x00\x1fH" + // 0x039F0313: 0x00001F48 - "\x03\x9f\x03\x14\x00\x00\x1fI" + // 0x039F0314: 0x00001F49 - "\x1fH\x03\x00\x00\x00\x1fJ" + // 0x1F480300: 0x00001F4A - "\x1fI\x03\x00\x00\x00\x1fK" + // 0x1F490300: 0x00001F4B - "\x1fH\x03\x01\x00\x00\x1fL" + // 0x1F480301: 0x00001F4C - "\x1fI\x03\x01\x00\x00\x1fM" + // 0x1F490301: 0x00001F4D - "\x03\xc5\x03\x13\x00\x00\x1fP" + // 0x03C50313: 0x00001F50 - "\x03\xc5\x03\x14\x00\x00\x1fQ" + // 0x03C50314: 0x00001F51 - "\x1fP\x03\x00\x00\x00\x1fR" + // 0x1F500300: 0x00001F52 - "\x1fQ\x03\x00\x00\x00\x1fS" + // 0x1F510300: 0x00001F53 - "\x1fP\x03\x01\x00\x00\x1fT" + // 0x1F500301: 0x00001F54 - "\x1fQ\x03\x01\x00\x00\x1fU" + // 0x1F510301: 0x00001F55 - "\x1fP\x03B\x00\x00\x1fV" + // 0x1F500342: 0x00001F56 - "\x1fQ\x03B\x00\x00\x1fW" + // 0x1F510342: 0x00001F57 - "\x03\xa5\x03\x14\x00\x00\x1fY" + // 0x03A50314: 0x00001F59 - "\x1fY\x03\x00\x00\x00\x1f[" + // 0x1F590300: 0x00001F5B - "\x1fY\x03\x01\x00\x00\x1f]" + // 0x1F590301: 0x00001F5D - "\x1fY\x03B\x00\x00\x1f_" + // 0x1F590342: 0x00001F5F - "\x03\xc9\x03\x13\x00\x00\x1f`" + // 0x03C90313: 0x00001F60 - "\x03\xc9\x03\x14\x00\x00\x1fa" + // 0x03C90314: 0x00001F61 - "\x1f`\x03\x00\x00\x00\x1fb" + // 0x1F600300: 0x00001F62 - "\x1fa\x03\x00\x00\x00\x1fc" + // 0x1F610300: 0x00001F63 - "\x1f`\x03\x01\x00\x00\x1fd" + // 0x1F600301: 0x00001F64 - "\x1fa\x03\x01\x00\x00\x1fe" + // 0x1F610301: 0x00001F65 - "\x1f`\x03B\x00\x00\x1ff" + // 0x1F600342: 0x00001F66 - "\x1fa\x03B\x00\x00\x1fg" + // 0x1F610342: 0x00001F67 - "\x03\xa9\x03\x13\x00\x00\x1fh" + // 0x03A90313: 0x00001F68 - "\x03\xa9\x03\x14\x00\x00\x1fi" + // 0x03A90314: 0x00001F69 - "\x1fh\x03\x00\x00\x00\x1fj" + // 0x1F680300: 0x00001F6A - "\x1fi\x03\x00\x00\x00\x1fk" + // 0x1F690300: 0x00001F6B - "\x1fh\x03\x01\x00\x00\x1fl" + // 0x1F680301: 0x00001F6C - "\x1fi\x03\x01\x00\x00\x1fm" + // 0x1F690301: 0x00001F6D - "\x1fh\x03B\x00\x00\x1fn" + // 0x1F680342: 0x00001F6E - "\x1fi\x03B\x00\x00\x1fo" + // 0x1F690342: 0x00001F6F - "\x03\xb1\x03\x00\x00\x00\x1fp" + // 0x03B10300: 0x00001F70 - "\x03\xb5\x03\x00\x00\x00\x1fr" + // 0x03B50300: 0x00001F72 - "\x03\xb7\x03\x00\x00\x00\x1ft" + // 0x03B70300: 0x00001F74 - "\x03\xb9\x03\x00\x00\x00\x1fv" + // 0x03B90300: 0x00001F76 - "\x03\xbf\x03\x00\x00\x00\x1fx" + // 0x03BF0300: 0x00001F78 - "\x03\xc5\x03\x00\x00\x00\x1fz" + // 0x03C50300: 0x00001F7A - "\x03\xc9\x03\x00\x00\x00\x1f|" + // 0x03C90300: 0x00001F7C - "\x1f\x00\x03E\x00\x00\x1f\x80" + // 0x1F000345: 0x00001F80 - "\x1f\x01\x03E\x00\x00\x1f\x81" + // 0x1F010345: 0x00001F81 - "\x1f\x02\x03E\x00\x00\x1f\x82" + // 0x1F020345: 0x00001F82 - "\x1f\x03\x03E\x00\x00\x1f\x83" + // 0x1F030345: 0x00001F83 - "\x1f\x04\x03E\x00\x00\x1f\x84" + // 0x1F040345: 0x00001F84 - "\x1f\x05\x03E\x00\x00\x1f\x85" + // 0x1F050345: 0x00001F85 - "\x1f\x06\x03E\x00\x00\x1f\x86" + // 0x1F060345: 0x00001F86 - "\x1f\a\x03E\x00\x00\x1f\x87" + // 0x1F070345: 0x00001F87 - "\x1f\b\x03E\x00\x00\x1f\x88" + // 0x1F080345: 0x00001F88 - "\x1f\t\x03E\x00\x00\x1f\x89" + // 0x1F090345: 0x00001F89 - "\x1f\n\x03E\x00\x00\x1f\x8a" + // 0x1F0A0345: 0x00001F8A - "\x1f\v\x03E\x00\x00\x1f\x8b" + // 0x1F0B0345: 0x00001F8B - "\x1f\f\x03E\x00\x00\x1f\x8c" + // 0x1F0C0345: 0x00001F8C - "\x1f\r\x03E\x00\x00\x1f\x8d" + // 0x1F0D0345: 0x00001F8D - "\x1f\x0e\x03E\x00\x00\x1f\x8e" + // 0x1F0E0345: 0x00001F8E - "\x1f\x0f\x03E\x00\x00\x1f\x8f" + // 0x1F0F0345: 0x00001F8F - "\x1f \x03E\x00\x00\x1f\x90" + // 0x1F200345: 0x00001F90 - "\x1f!\x03E\x00\x00\x1f\x91" + // 0x1F210345: 0x00001F91 - "\x1f\"\x03E\x00\x00\x1f\x92" + // 0x1F220345: 0x00001F92 - "\x1f#\x03E\x00\x00\x1f\x93" + // 0x1F230345: 0x00001F93 - "\x1f$\x03E\x00\x00\x1f\x94" + // 0x1F240345: 0x00001F94 - "\x1f%\x03E\x00\x00\x1f\x95" + // 0x1F250345: 0x00001F95 - "\x1f&\x03E\x00\x00\x1f\x96" + // 0x1F260345: 0x00001F96 - "\x1f'\x03E\x00\x00\x1f\x97" + // 0x1F270345: 0x00001F97 - "\x1f(\x03E\x00\x00\x1f\x98" + // 0x1F280345: 0x00001F98 - "\x1f)\x03E\x00\x00\x1f\x99" + // 0x1F290345: 0x00001F99 - "\x1f*\x03E\x00\x00\x1f\x9a" + // 0x1F2A0345: 0x00001F9A - "\x1f+\x03E\x00\x00\x1f\x9b" + // 0x1F2B0345: 0x00001F9B - "\x1f,\x03E\x00\x00\x1f\x9c" + // 0x1F2C0345: 0x00001F9C - "\x1f-\x03E\x00\x00\x1f\x9d" + // 0x1F2D0345: 0x00001F9D - "\x1f.\x03E\x00\x00\x1f\x9e" + // 0x1F2E0345: 0x00001F9E - "\x1f/\x03E\x00\x00\x1f\x9f" + // 0x1F2F0345: 0x00001F9F - "\x1f`\x03E\x00\x00\x1f\xa0" + // 0x1F600345: 0x00001FA0 - "\x1fa\x03E\x00\x00\x1f\xa1" + // 0x1F610345: 0x00001FA1 - "\x1fb\x03E\x00\x00\x1f\xa2" + // 0x1F620345: 0x00001FA2 - "\x1fc\x03E\x00\x00\x1f\xa3" + // 0x1F630345: 0x00001FA3 - "\x1fd\x03E\x00\x00\x1f\xa4" + // 0x1F640345: 0x00001FA4 - "\x1fe\x03E\x00\x00\x1f\xa5" + // 0x1F650345: 0x00001FA5 - "\x1ff\x03E\x00\x00\x1f\xa6" + // 0x1F660345: 0x00001FA6 - "\x1fg\x03E\x00\x00\x1f\xa7" + // 0x1F670345: 0x00001FA7 - "\x1fh\x03E\x00\x00\x1f\xa8" + // 0x1F680345: 0x00001FA8 - "\x1fi\x03E\x00\x00\x1f\xa9" + // 0x1F690345: 0x00001FA9 - "\x1fj\x03E\x00\x00\x1f\xaa" + // 0x1F6A0345: 0x00001FAA - "\x1fk\x03E\x00\x00\x1f\xab" + // 0x1F6B0345: 0x00001FAB - "\x1fl\x03E\x00\x00\x1f\xac" + // 0x1F6C0345: 0x00001FAC - "\x1fm\x03E\x00\x00\x1f\xad" + // 0x1F6D0345: 0x00001FAD - "\x1fn\x03E\x00\x00\x1f\xae" + // 0x1F6E0345: 0x00001FAE - "\x1fo\x03E\x00\x00\x1f\xaf" + // 0x1F6F0345: 0x00001FAF - "\x03\xb1\x03\x06\x00\x00\x1f\xb0" + // 0x03B10306: 0x00001FB0 - "\x03\xb1\x03\x04\x00\x00\x1f\xb1" + // 0x03B10304: 0x00001FB1 - "\x1fp\x03E\x00\x00\x1f\xb2" + // 0x1F700345: 0x00001FB2 - "\x03\xb1\x03E\x00\x00\x1f\xb3" + // 0x03B10345: 0x00001FB3 - "\x03\xac\x03E\x00\x00\x1f\xb4" + // 0x03AC0345: 0x00001FB4 - "\x03\xb1\x03B\x00\x00\x1f\xb6" + // 0x03B10342: 0x00001FB6 - "\x1f\xb6\x03E\x00\x00\x1f\xb7" + // 0x1FB60345: 0x00001FB7 - "\x03\x91\x03\x06\x00\x00\x1f\xb8" + // 0x03910306: 0x00001FB8 - "\x03\x91\x03\x04\x00\x00\x1f\xb9" + // 0x03910304: 0x00001FB9 - "\x03\x91\x03\x00\x00\x00\x1f\xba" + // 0x03910300: 0x00001FBA - "\x03\x91\x03E\x00\x00\x1f\xbc" + // 0x03910345: 0x00001FBC - "\x00\xa8\x03B\x00\x00\x1f\xc1" + // 0x00A80342: 0x00001FC1 - "\x1ft\x03E\x00\x00\x1f\xc2" + // 0x1F740345: 0x00001FC2 - "\x03\xb7\x03E\x00\x00\x1f\xc3" + // 0x03B70345: 0x00001FC3 - "\x03\xae\x03E\x00\x00\x1f\xc4" + // 0x03AE0345: 0x00001FC4 - "\x03\xb7\x03B\x00\x00\x1f\xc6" + // 0x03B70342: 0x00001FC6 - "\x1f\xc6\x03E\x00\x00\x1f\xc7" + // 0x1FC60345: 0x00001FC7 - "\x03\x95\x03\x00\x00\x00\x1f\xc8" + // 0x03950300: 0x00001FC8 - "\x03\x97\x03\x00\x00\x00\x1f\xca" + // 0x03970300: 0x00001FCA - "\x03\x97\x03E\x00\x00\x1f\xcc" + // 0x03970345: 0x00001FCC - "\x1f\xbf\x03\x00\x00\x00\x1f\xcd" + // 0x1FBF0300: 0x00001FCD - "\x1f\xbf\x03\x01\x00\x00\x1f\xce" + // 0x1FBF0301: 0x00001FCE - "\x1f\xbf\x03B\x00\x00\x1f\xcf" + // 0x1FBF0342: 0x00001FCF - "\x03\xb9\x03\x06\x00\x00\x1f\xd0" + // 0x03B90306: 0x00001FD0 - "\x03\xb9\x03\x04\x00\x00\x1f\xd1" + // 0x03B90304: 0x00001FD1 - "\x03\xca\x03\x00\x00\x00\x1f\xd2" + // 0x03CA0300: 0x00001FD2 - "\x03\xb9\x03B\x00\x00\x1f\xd6" + // 0x03B90342: 0x00001FD6 - "\x03\xca\x03B\x00\x00\x1f\xd7" + // 0x03CA0342: 0x00001FD7 - "\x03\x99\x03\x06\x00\x00\x1f\xd8" + // 0x03990306: 0x00001FD8 - "\x03\x99\x03\x04\x00\x00\x1f\xd9" + // 0x03990304: 0x00001FD9 - "\x03\x99\x03\x00\x00\x00\x1f\xda" + // 0x03990300: 0x00001FDA - "\x1f\xfe\x03\x00\x00\x00\x1f\xdd" + // 0x1FFE0300: 0x00001FDD - "\x1f\xfe\x03\x01\x00\x00\x1f\xde" + // 0x1FFE0301: 0x00001FDE - "\x1f\xfe\x03B\x00\x00\x1f\xdf" + // 0x1FFE0342: 0x00001FDF - "\x03\xc5\x03\x06\x00\x00\x1f\xe0" + // 0x03C50306: 0x00001FE0 - "\x03\xc5\x03\x04\x00\x00\x1f\xe1" + // 0x03C50304: 0x00001FE1 - "\x03\xcb\x03\x00\x00\x00\x1f\xe2" + // 0x03CB0300: 0x00001FE2 - "\x03\xc1\x03\x13\x00\x00\x1f\xe4" + // 0x03C10313: 0x00001FE4 - "\x03\xc1\x03\x14\x00\x00\x1f\xe5" + // 0x03C10314: 0x00001FE5 - "\x03\xc5\x03B\x00\x00\x1f\xe6" + // 0x03C50342: 0x00001FE6 - "\x03\xcb\x03B\x00\x00\x1f\xe7" + // 0x03CB0342: 0x00001FE7 - "\x03\xa5\x03\x06\x00\x00\x1f\xe8" + // 0x03A50306: 0x00001FE8 - "\x03\xa5\x03\x04\x00\x00\x1f\xe9" + // 0x03A50304: 0x00001FE9 - "\x03\xa5\x03\x00\x00\x00\x1f\xea" + // 0x03A50300: 0x00001FEA - "\x03\xa1\x03\x14\x00\x00\x1f\xec" + // 0x03A10314: 0x00001FEC - "\x00\xa8\x03\x00\x00\x00\x1f\xed" + // 0x00A80300: 0x00001FED - "\x1f|\x03E\x00\x00\x1f\xf2" + // 0x1F7C0345: 0x00001FF2 - "\x03\xc9\x03E\x00\x00\x1f\xf3" + // 0x03C90345: 0x00001FF3 - "\x03\xce\x03E\x00\x00\x1f\xf4" + // 0x03CE0345: 0x00001FF4 - "\x03\xc9\x03B\x00\x00\x1f\xf6" + // 0x03C90342: 0x00001FF6 - "\x1f\xf6\x03E\x00\x00\x1f\xf7" + // 0x1FF60345: 0x00001FF7 - "\x03\x9f\x03\x00\x00\x00\x1f\xf8" + // 0x039F0300: 0x00001FF8 - "\x03\xa9\x03\x00\x00\x00\x1f\xfa" + // 0x03A90300: 0x00001FFA - "\x03\xa9\x03E\x00\x00\x1f\xfc" + // 0x03A90345: 0x00001FFC - "!\x90\x038\x00\x00!\x9a" + // 0x21900338: 0x0000219A - "!\x92\x038\x00\x00!\x9b" + // 0x21920338: 0x0000219B - "!\x94\x038\x00\x00!\xae" + // 0x21940338: 0x000021AE - "!\xd0\x038\x00\x00!\xcd" + // 0x21D00338: 0x000021CD - "!\xd4\x038\x00\x00!\xce" + // 0x21D40338: 0x000021CE - "!\xd2\x038\x00\x00!\xcf" + // 0x21D20338: 0x000021CF - "\"\x03\x038\x00\x00\"\x04" + // 0x22030338: 0x00002204 - "\"\b\x038\x00\x00\"\t" + // 0x22080338: 0x00002209 - "\"\v\x038\x00\x00\"\f" + // 0x220B0338: 0x0000220C - "\"#\x038\x00\x00\"$" + // 0x22230338: 0x00002224 - "\"%\x038\x00\x00\"&" + // 0x22250338: 0x00002226 - "\"<\x038\x00\x00\"A" + // 0x223C0338: 0x00002241 - "\"C\x038\x00\x00\"D" + // 0x22430338: 0x00002244 - "\"E\x038\x00\x00\"G" + // 0x22450338: 0x00002247 - "\"H\x038\x00\x00\"I" + // 0x22480338: 0x00002249 - "\x00=\x038\x00\x00\"`" + // 0x003D0338: 0x00002260 - "\"a\x038\x00\x00\"b" + // 0x22610338: 0x00002262 - "\"M\x038\x00\x00\"m" + // 0x224D0338: 0x0000226D - "\x00<\x038\x00\x00\"n" + // 0x003C0338: 0x0000226E - "\x00>\x038\x00\x00\"o" + // 0x003E0338: 0x0000226F - "\"d\x038\x00\x00\"p" + // 0x22640338: 0x00002270 - "\"e\x038\x00\x00\"q" + // 0x22650338: 0x00002271 - "\"r\x038\x00\x00\"t" + // 0x22720338: 0x00002274 - "\"s\x038\x00\x00\"u" + // 0x22730338: 0x00002275 - "\"v\x038\x00\x00\"x" + // 0x22760338: 0x00002278 - "\"w\x038\x00\x00\"y" + // 0x22770338: 0x00002279 - "\"z\x038\x00\x00\"\x80" + // 0x227A0338: 0x00002280 - "\"{\x038\x00\x00\"\x81" + // 0x227B0338: 0x00002281 - "\"\x82\x038\x00\x00\"\x84" + // 0x22820338: 0x00002284 - "\"\x83\x038\x00\x00\"\x85" + // 0x22830338: 0x00002285 - "\"\x86\x038\x00\x00\"\x88" + // 0x22860338: 0x00002288 - "\"\x87\x038\x00\x00\"\x89" + // 0x22870338: 0x00002289 - "\"\xa2\x038\x00\x00\"\xac" + // 0x22A20338: 0x000022AC - "\"\xa8\x038\x00\x00\"\xad" + // 0x22A80338: 0x000022AD - "\"\xa9\x038\x00\x00\"\xae" + // 0x22A90338: 0x000022AE - "\"\xab\x038\x00\x00\"\xaf" + // 0x22AB0338: 0x000022AF - "\"|\x038\x00\x00\"\xe0" + // 0x227C0338: 0x000022E0 - "\"}\x038\x00\x00\"\xe1" + // 0x227D0338: 0x000022E1 - "\"\x91\x038\x00\x00\"\xe2" + // 0x22910338: 0x000022E2 - "\"\x92\x038\x00\x00\"\xe3" + // 0x22920338: 0x000022E3 - "\"\xb2\x038\x00\x00\"\xea" + // 0x22B20338: 0x000022EA - "\"\xb3\x038\x00\x00\"\xeb" + // 0x22B30338: 0x000022EB - "\"\xb4\x038\x00\x00\"\xec" + // 0x22B40338: 0x000022EC - "\"\xb5\x038\x00\x00\"\xed" + // 0x22B50338: 0x000022ED - "0K0\x99\x00\x000L" + // 0x304B3099: 0x0000304C - "0M0\x99\x00\x000N" + // 0x304D3099: 0x0000304E - "0O0\x99\x00\x000P" + // 0x304F3099: 0x00003050 - "0Q0\x99\x00\x000R" + // 0x30513099: 0x00003052 - "0S0\x99\x00\x000T" + // 0x30533099: 0x00003054 - "0U0\x99\x00\x000V" + // 0x30553099: 0x00003056 - "0W0\x99\x00\x000X" + // 0x30573099: 0x00003058 - "0Y0\x99\x00\x000Z" + // 0x30593099: 0x0000305A - "0[0\x99\x00\x000\\" + // 0x305B3099: 0x0000305C - "0]0\x99\x00\x000^" + // 0x305D3099: 0x0000305E - "0_0\x99\x00\x000`" + // 0x305F3099: 0x00003060 - "0a0\x99\x00\x000b" + // 0x30613099: 0x00003062 - "0d0\x99\x00\x000e" + // 0x30643099: 0x00003065 - "0f0\x99\x00\x000g" + // 0x30663099: 0x00003067 - "0h0\x99\x00\x000i" + // 0x30683099: 0x00003069 - "0o0\x99\x00\x000p" + // 0x306F3099: 0x00003070 - "0o0\x9a\x00\x000q" + // 0x306F309A: 0x00003071 - "0r0\x99\x00\x000s" + // 0x30723099: 0x00003073 - "0r0\x9a\x00\x000t" + // 0x3072309A: 0x00003074 - "0u0\x99\x00\x000v" + // 0x30753099: 0x00003076 - "0u0\x9a\x00\x000w" + // 0x3075309A: 0x00003077 - "0x0\x99\x00\x000y" + // 0x30783099: 0x00003079 - "0x0\x9a\x00\x000z" + // 0x3078309A: 0x0000307A - "0{0\x99\x00\x000|" + // 0x307B3099: 0x0000307C - "0{0\x9a\x00\x000}" + // 0x307B309A: 0x0000307D - "0F0\x99\x00\x000\x94" + // 0x30463099: 0x00003094 - "0\x9d0\x99\x00\x000\x9e" + // 0x309D3099: 0x0000309E - "0\xab0\x99\x00\x000\xac" + // 0x30AB3099: 0x000030AC - "0\xad0\x99\x00\x000\xae" + // 0x30AD3099: 0x000030AE - "0\xaf0\x99\x00\x000\xb0" + // 0x30AF3099: 0x000030B0 - "0\xb10\x99\x00\x000\xb2" + // 0x30B13099: 0x000030B2 - "0\xb30\x99\x00\x000\xb4" + // 0x30B33099: 0x000030B4 - "0\xb50\x99\x00\x000\xb6" + // 0x30B53099: 0x000030B6 - "0\xb70\x99\x00\x000\xb8" + // 0x30B73099: 0x000030B8 - "0\xb90\x99\x00\x000\xba" + // 0x30B93099: 0x000030BA - "0\xbb0\x99\x00\x000\xbc" + // 0x30BB3099: 0x000030BC - "0\xbd0\x99\x00\x000\xbe" + // 0x30BD3099: 0x000030BE - "0\xbf0\x99\x00\x000\xc0" + // 0x30BF3099: 0x000030C0 - "0\xc10\x99\x00\x000\xc2" + // 0x30C13099: 0x000030C2 - "0\xc40\x99\x00\x000\xc5" + // 0x30C43099: 0x000030C5 - "0\xc60\x99\x00\x000\xc7" + // 0x30C63099: 0x000030C7 - "0\xc80\x99\x00\x000\xc9" + // 0x30C83099: 0x000030C9 - "0\xcf0\x99\x00\x000\xd0" + // 0x30CF3099: 0x000030D0 - "0\xcf0\x9a\x00\x000\xd1" + // 0x30CF309A: 0x000030D1 - "0\xd20\x99\x00\x000\xd3" + // 0x30D23099: 0x000030D3 - "0\xd20\x9a\x00\x000\xd4" + // 0x30D2309A: 0x000030D4 - "0\xd50\x99\x00\x000\xd6" + // 0x30D53099: 0x000030D6 - "0\xd50\x9a\x00\x000\xd7" + // 0x30D5309A: 0x000030D7 - "0\xd80\x99\x00\x000\xd9" + // 0x30D83099: 0x000030D9 - "0\xd80\x9a\x00\x000\xda" + // 0x30D8309A: 0x000030DA - "0\xdb0\x99\x00\x000\xdc" + // 0x30DB3099: 0x000030DC - "0\xdb0\x9a\x00\x000\xdd" + // 0x30DB309A: 0x000030DD - "0\xa60\x99\x00\x000\xf4" + // 0x30A63099: 0x000030F4 - "0\xef0\x99\x00\x000\xf7" + // 0x30EF3099: 0x000030F7 - "0\xf00\x99\x00\x000\xf8" + // 0x30F03099: 0x000030F8 - "0\xf10\x99\x00\x000\xf9" + // 0x30F13099: 0x000030F9 - "0\xf20\x99\x00\x000\xfa" + // 0x30F23099: 0x000030FA - "0\xfd0\x99\x00\x000\xfe" + // 0x30FD3099: 0x000030FE - "\x10\x99\x10\xba\x00\x01\x10\x9a" + // 0x109910BA: 0x0001109A - "\x10\x9b\x10\xba\x00\x01\x10\x9c" + // 0x109B10BA: 0x0001109C - "\x10\xa5\x10\xba\x00\x01\x10\xab" + // 0x10A510BA: 0x000110AB - "\x111\x11'\x00\x01\x11." + // 0x11311127: 0x0001112E - "\x112\x11'\x00\x01\x11/" + // 0x11321127: 0x0001112F - "\x13G\x13>\x00\x01\x13K" + // 0x1347133E: 0x0001134B - "\x13G\x13W\x00\x01\x13L" + // 0x13471357: 0x0001134C - "\x14\xb9\x14\xba\x00\x01\x14\xbb" + // 0x14B914BA: 0x000114BB - "\x14\xb9\x14\xb0\x00\x01\x14\xbc" + // 0x14B914B0: 0x000114BC - "\x14\xb9\x14\xbd\x00\x01\x14\xbe" + // 0x14B914BD: 0x000114BE - "\x15\xb8\x15\xaf\x00\x01\x15\xba" + // 0x15B815AF: 0x000115BA - "\x15\xb9\x15\xaf\x00\x01\x15\xbb" + // 0x15B915AF: 0x000115BB - "" - // Total size of tables: 53KB (54226 bytes) diff --git a/vendor/golang.org/x/text/unicode/norm/tables11.0.0.go b/vendor/golang.org/x/text/unicode/norm/tables11.0.0.go deleted file mode 100644 index eb73ecc373..0000000000 --- a/vendor/golang.org/x/text/unicode/norm/tables11.0.0.go +++ /dev/null @@ -1,7693 +0,0 @@ -// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. - -//go:build go1.13 && !go1.14 - -package norm - -import "sync" - -const ( - // Version is the Unicode edition from which the tables are derived. - Version = "11.0.0" - - // MaxTransformChunkSize indicates the maximum number of bytes that Transform - // may need to write atomically for any Form. Making a destination buffer at - // least this size ensures that Transform can always make progress and that - // the user does not need to grow the buffer on an ErrShortDst. - MaxTransformChunkSize = 35 + maxNonStarters*4 -) - -var ccc = [55]uint8{ - 0, 1, 7, 8, 9, 10, 11, 12, - 13, 14, 15, 16, 17, 18, 19, 20, - 21, 22, 23, 24, 25, 26, 27, 28, - 29, 30, 31, 32, 33, 34, 35, 36, - 84, 91, 103, 107, 118, 122, 129, 130, - 132, 202, 214, 216, 218, 220, 222, 224, - 226, 228, 230, 232, 233, 234, 240, -} - -const ( - firstMulti = 0x186D - firstCCC = 0x2C9E - endMulti = 0x2F60 - firstLeadingCCC = 0x49AE - firstCCCZeroExcept = 0x4A78 - firstStarterWithNLead = 0x4A9F - lastDecomp = 0x4AA1 - maxDecomp = 0x8000 -) - -// decomps: 19105 bytes -var decomps = [...]byte{ - // Bytes 0 - 3f - 0x00, 0x41, 0x20, 0x41, 0x21, 0x41, 0x22, 0x41, - 0x23, 0x41, 0x24, 0x41, 0x25, 0x41, 0x26, 0x41, - 0x27, 0x41, 0x28, 0x41, 0x29, 0x41, 0x2A, 0x41, - 0x2B, 0x41, 0x2C, 0x41, 0x2D, 0x41, 0x2E, 0x41, - 0x2F, 0x41, 0x30, 0x41, 0x31, 0x41, 0x32, 0x41, - 0x33, 0x41, 0x34, 0x41, 0x35, 0x41, 0x36, 0x41, - 0x37, 0x41, 0x38, 0x41, 0x39, 0x41, 0x3A, 0x41, - 0x3B, 0x41, 0x3C, 0x41, 0x3D, 0x41, 0x3E, 0x41, - // Bytes 40 - 7f - 0x3F, 0x41, 0x40, 0x41, 0x41, 0x41, 0x42, 0x41, - 0x43, 0x41, 0x44, 0x41, 0x45, 0x41, 0x46, 0x41, - 0x47, 0x41, 0x48, 0x41, 0x49, 0x41, 0x4A, 0x41, - 0x4B, 0x41, 0x4C, 0x41, 0x4D, 0x41, 0x4E, 0x41, - 0x4F, 0x41, 0x50, 0x41, 0x51, 0x41, 0x52, 0x41, - 0x53, 0x41, 0x54, 0x41, 0x55, 0x41, 0x56, 0x41, - 0x57, 0x41, 0x58, 0x41, 0x59, 0x41, 0x5A, 0x41, - 0x5B, 0x41, 0x5C, 0x41, 0x5D, 0x41, 0x5E, 0x41, - // Bytes 80 - bf - 0x5F, 0x41, 0x60, 0x41, 0x61, 0x41, 0x62, 0x41, - 0x63, 0x41, 0x64, 0x41, 0x65, 0x41, 0x66, 0x41, - 0x67, 0x41, 0x68, 0x41, 0x69, 0x41, 0x6A, 0x41, - 0x6B, 0x41, 0x6C, 0x41, 0x6D, 0x41, 0x6E, 0x41, - 0x6F, 0x41, 0x70, 0x41, 0x71, 0x41, 0x72, 0x41, - 0x73, 0x41, 0x74, 0x41, 0x75, 0x41, 0x76, 0x41, - 0x77, 0x41, 0x78, 0x41, 0x79, 0x41, 0x7A, 0x41, - 0x7B, 0x41, 0x7C, 0x41, 0x7D, 0x41, 0x7E, 0x42, - // Bytes c0 - ff - 0xC2, 0xA2, 0x42, 0xC2, 0xA3, 0x42, 0xC2, 0xA5, - 0x42, 0xC2, 0xA6, 0x42, 0xC2, 0xAC, 0x42, 0xC2, - 0xB7, 0x42, 0xC3, 0x86, 0x42, 0xC3, 0xB0, 0x42, - 0xC4, 0xA6, 0x42, 0xC4, 0xA7, 0x42, 0xC4, 0xB1, - 0x42, 0xC5, 0x8B, 0x42, 0xC5, 0x93, 0x42, 0xC6, - 0x8E, 0x42, 0xC6, 0x90, 0x42, 0xC6, 0xAB, 0x42, - 0xC8, 0xA2, 0x42, 0xC8, 0xB7, 0x42, 0xC9, 0x90, - 0x42, 0xC9, 0x91, 0x42, 0xC9, 0x92, 0x42, 0xC9, - // Bytes 100 - 13f - 0x94, 0x42, 0xC9, 0x95, 0x42, 0xC9, 0x99, 0x42, - 0xC9, 0x9B, 0x42, 0xC9, 0x9C, 0x42, 0xC9, 0x9F, - 0x42, 0xC9, 0xA1, 0x42, 0xC9, 0xA3, 0x42, 0xC9, - 0xA5, 0x42, 0xC9, 0xA6, 0x42, 0xC9, 0xA8, 0x42, - 0xC9, 0xA9, 0x42, 0xC9, 0xAA, 0x42, 0xC9, 0xAB, - 0x42, 0xC9, 0xAD, 0x42, 0xC9, 0xAF, 0x42, 0xC9, - 0xB0, 0x42, 0xC9, 0xB1, 0x42, 0xC9, 0xB2, 0x42, - 0xC9, 0xB3, 0x42, 0xC9, 0xB4, 0x42, 0xC9, 0xB5, - // Bytes 140 - 17f - 0x42, 0xC9, 0xB8, 0x42, 0xC9, 0xB9, 0x42, 0xC9, - 0xBB, 0x42, 0xCA, 0x81, 0x42, 0xCA, 0x82, 0x42, - 0xCA, 0x83, 0x42, 0xCA, 0x89, 0x42, 0xCA, 0x8A, - 0x42, 0xCA, 0x8B, 0x42, 0xCA, 0x8C, 0x42, 0xCA, - 0x90, 0x42, 0xCA, 0x91, 0x42, 0xCA, 0x92, 0x42, - 0xCA, 0x95, 0x42, 0xCA, 0x9D, 0x42, 0xCA, 0x9F, - 0x42, 0xCA, 0xB9, 0x42, 0xCE, 0x91, 0x42, 0xCE, - 0x92, 0x42, 0xCE, 0x93, 0x42, 0xCE, 0x94, 0x42, - // Bytes 180 - 1bf - 0xCE, 0x95, 0x42, 0xCE, 0x96, 0x42, 0xCE, 0x97, - 0x42, 0xCE, 0x98, 0x42, 0xCE, 0x99, 0x42, 0xCE, - 0x9A, 0x42, 0xCE, 0x9B, 0x42, 0xCE, 0x9C, 0x42, - 0xCE, 0x9D, 0x42, 0xCE, 0x9E, 0x42, 0xCE, 0x9F, - 0x42, 0xCE, 0xA0, 0x42, 0xCE, 0xA1, 0x42, 0xCE, - 0xA3, 0x42, 0xCE, 0xA4, 0x42, 0xCE, 0xA5, 0x42, - 0xCE, 0xA6, 0x42, 0xCE, 0xA7, 0x42, 0xCE, 0xA8, - 0x42, 0xCE, 0xA9, 0x42, 0xCE, 0xB1, 0x42, 0xCE, - // Bytes 1c0 - 1ff - 0xB2, 0x42, 0xCE, 0xB3, 0x42, 0xCE, 0xB4, 0x42, - 0xCE, 0xB5, 0x42, 0xCE, 0xB6, 0x42, 0xCE, 0xB7, - 0x42, 0xCE, 0xB8, 0x42, 0xCE, 0xB9, 0x42, 0xCE, - 0xBA, 0x42, 0xCE, 0xBB, 0x42, 0xCE, 0xBC, 0x42, - 0xCE, 0xBD, 0x42, 0xCE, 0xBE, 0x42, 0xCE, 0xBF, - 0x42, 0xCF, 0x80, 0x42, 0xCF, 0x81, 0x42, 0xCF, - 0x82, 0x42, 0xCF, 0x83, 0x42, 0xCF, 0x84, 0x42, - 0xCF, 0x85, 0x42, 0xCF, 0x86, 0x42, 0xCF, 0x87, - // Bytes 200 - 23f - 0x42, 0xCF, 0x88, 0x42, 0xCF, 0x89, 0x42, 0xCF, - 0x9C, 0x42, 0xCF, 0x9D, 0x42, 0xD0, 0xBD, 0x42, - 0xD1, 0x8A, 0x42, 0xD1, 0x8C, 0x42, 0xD7, 0x90, - 0x42, 0xD7, 0x91, 0x42, 0xD7, 0x92, 0x42, 0xD7, - 0x93, 0x42, 0xD7, 0x94, 0x42, 0xD7, 0x9B, 0x42, - 0xD7, 0x9C, 0x42, 0xD7, 0x9D, 0x42, 0xD7, 0xA2, - 0x42, 0xD7, 0xA8, 0x42, 0xD7, 0xAA, 0x42, 0xD8, - 0xA1, 0x42, 0xD8, 0xA7, 0x42, 0xD8, 0xA8, 0x42, - // Bytes 240 - 27f - 0xD8, 0xA9, 0x42, 0xD8, 0xAA, 0x42, 0xD8, 0xAB, - 0x42, 0xD8, 0xAC, 0x42, 0xD8, 0xAD, 0x42, 0xD8, - 0xAE, 0x42, 0xD8, 0xAF, 0x42, 0xD8, 0xB0, 0x42, - 0xD8, 0xB1, 0x42, 0xD8, 0xB2, 0x42, 0xD8, 0xB3, - 0x42, 0xD8, 0xB4, 0x42, 0xD8, 0xB5, 0x42, 0xD8, - 0xB6, 0x42, 0xD8, 0xB7, 0x42, 0xD8, 0xB8, 0x42, - 0xD8, 0xB9, 0x42, 0xD8, 0xBA, 0x42, 0xD9, 0x81, - 0x42, 0xD9, 0x82, 0x42, 0xD9, 0x83, 0x42, 0xD9, - // Bytes 280 - 2bf - 0x84, 0x42, 0xD9, 0x85, 0x42, 0xD9, 0x86, 0x42, - 0xD9, 0x87, 0x42, 0xD9, 0x88, 0x42, 0xD9, 0x89, - 0x42, 0xD9, 0x8A, 0x42, 0xD9, 0xAE, 0x42, 0xD9, - 0xAF, 0x42, 0xD9, 0xB1, 0x42, 0xD9, 0xB9, 0x42, - 0xD9, 0xBA, 0x42, 0xD9, 0xBB, 0x42, 0xD9, 0xBE, - 0x42, 0xD9, 0xBF, 0x42, 0xDA, 0x80, 0x42, 0xDA, - 0x83, 0x42, 0xDA, 0x84, 0x42, 0xDA, 0x86, 0x42, - 0xDA, 0x87, 0x42, 0xDA, 0x88, 0x42, 0xDA, 0x8C, - // Bytes 2c0 - 2ff - 0x42, 0xDA, 0x8D, 0x42, 0xDA, 0x8E, 0x42, 0xDA, - 0x91, 0x42, 0xDA, 0x98, 0x42, 0xDA, 0xA1, 0x42, - 0xDA, 0xA4, 0x42, 0xDA, 0xA6, 0x42, 0xDA, 0xA9, - 0x42, 0xDA, 0xAD, 0x42, 0xDA, 0xAF, 0x42, 0xDA, - 0xB1, 0x42, 0xDA, 0xB3, 0x42, 0xDA, 0xBA, 0x42, - 0xDA, 0xBB, 0x42, 0xDA, 0xBE, 0x42, 0xDB, 0x81, - 0x42, 0xDB, 0x85, 0x42, 0xDB, 0x86, 0x42, 0xDB, - 0x87, 0x42, 0xDB, 0x88, 0x42, 0xDB, 0x89, 0x42, - // Bytes 300 - 33f - 0xDB, 0x8B, 0x42, 0xDB, 0x8C, 0x42, 0xDB, 0x90, - 0x42, 0xDB, 0x92, 0x43, 0xE0, 0xBC, 0x8B, 0x43, - 0xE1, 0x83, 0x9C, 0x43, 0xE1, 0x84, 0x80, 0x43, - 0xE1, 0x84, 0x81, 0x43, 0xE1, 0x84, 0x82, 0x43, - 0xE1, 0x84, 0x83, 0x43, 0xE1, 0x84, 0x84, 0x43, - 0xE1, 0x84, 0x85, 0x43, 0xE1, 0x84, 0x86, 0x43, - 0xE1, 0x84, 0x87, 0x43, 0xE1, 0x84, 0x88, 0x43, - 0xE1, 0x84, 0x89, 0x43, 0xE1, 0x84, 0x8A, 0x43, - // Bytes 340 - 37f - 0xE1, 0x84, 0x8B, 0x43, 0xE1, 0x84, 0x8C, 0x43, - 0xE1, 0x84, 0x8D, 0x43, 0xE1, 0x84, 0x8E, 0x43, - 0xE1, 0x84, 0x8F, 0x43, 0xE1, 0x84, 0x90, 0x43, - 0xE1, 0x84, 0x91, 0x43, 0xE1, 0x84, 0x92, 0x43, - 0xE1, 0x84, 0x94, 0x43, 0xE1, 0x84, 0x95, 0x43, - 0xE1, 0x84, 0x9A, 0x43, 0xE1, 0x84, 0x9C, 0x43, - 0xE1, 0x84, 0x9D, 0x43, 0xE1, 0x84, 0x9E, 0x43, - 0xE1, 0x84, 0xA0, 0x43, 0xE1, 0x84, 0xA1, 0x43, - // Bytes 380 - 3bf - 0xE1, 0x84, 0xA2, 0x43, 0xE1, 0x84, 0xA3, 0x43, - 0xE1, 0x84, 0xA7, 0x43, 0xE1, 0x84, 0xA9, 0x43, - 0xE1, 0x84, 0xAB, 0x43, 0xE1, 0x84, 0xAC, 0x43, - 0xE1, 0x84, 0xAD, 0x43, 0xE1, 0x84, 0xAE, 0x43, - 0xE1, 0x84, 0xAF, 0x43, 0xE1, 0x84, 0xB2, 0x43, - 0xE1, 0x84, 0xB6, 0x43, 0xE1, 0x85, 0x80, 0x43, - 0xE1, 0x85, 0x87, 0x43, 0xE1, 0x85, 0x8C, 0x43, - 0xE1, 0x85, 0x97, 0x43, 0xE1, 0x85, 0x98, 0x43, - // Bytes 3c0 - 3ff - 0xE1, 0x85, 0x99, 0x43, 0xE1, 0x85, 0xA0, 0x43, - 0xE1, 0x86, 0x84, 0x43, 0xE1, 0x86, 0x85, 0x43, - 0xE1, 0x86, 0x88, 0x43, 0xE1, 0x86, 0x91, 0x43, - 0xE1, 0x86, 0x92, 0x43, 0xE1, 0x86, 0x94, 0x43, - 0xE1, 0x86, 0x9E, 0x43, 0xE1, 0x86, 0xA1, 0x43, - 0xE1, 0x87, 0x87, 0x43, 0xE1, 0x87, 0x88, 0x43, - 0xE1, 0x87, 0x8C, 0x43, 0xE1, 0x87, 0x8E, 0x43, - 0xE1, 0x87, 0x93, 0x43, 0xE1, 0x87, 0x97, 0x43, - // Bytes 400 - 43f - 0xE1, 0x87, 0x99, 0x43, 0xE1, 0x87, 0x9D, 0x43, - 0xE1, 0x87, 0x9F, 0x43, 0xE1, 0x87, 0xB1, 0x43, - 0xE1, 0x87, 0xB2, 0x43, 0xE1, 0xB4, 0x82, 0x43, - 0xE1, 0xB4, 0x96, 0x43, 0xE1, 0xB4, 0x97, 0x43, - 0xE1, 0xB4, 0x9C, 0x43, 0xE1, 0xB4, 0x9D, 0x43, - 0xE1, 0xB4, 0xA5, 0x43, 0xE1, 0xB5, 0xBB, 0x43, - 0xE1, 0xB6, 0x85, 0x43, 0xE2, 0x80, 0x82, 0x43, - 0xE2, 0x80, 0x83, 0x43, 0xE2, 0x80, 0x90, 0x43, - // Bytes 440 - 47f - 0xE2, 0x80, 0x93, 0x43, 0xE2, 0x80, 0x94, 0x43, - 0xE2, 0x82, 0xA9, 0x43, 0xE2, 0x86, 0x90, 0x43, - 0xE2, 0x86, 0x91, 0x43, 0xE2, 0x86, 0x92, 0x43, - 0xE2, 0x86, 0x93, 0x43, 0xE2, 0x88, 0x82, 0x43, - 0xE2, 0x88, 0x87, 0x43, 0xE2, 0x88, 0x91, 0x43, - 0xE2, 0x88, 0x92, 0x43, 0xE2, 0x94, 0x82, 0x43, - 0xE2, 0x96, 0xA0, 0x43, 0xE2, 0x97, 0x8B, 0x43, - 0xE2, 0xA6, 0x85, 0x43, 0xE2, 0xA6, 0x86, 0x43, - // Bytes 480 - 4bf - 0xE2, 0xB5, 0xA1, 0x43, 0xE3, 0x80, 0x81, 0x43, - 0xE3, 0x80, 0x82, 0x43, 0xE3, 0x80, 0x88, 0x43, - 0xE3, 0x80, 0x89, 0x43, 0xE3, 0x80, 0x8A, 0x43, - 0xE3, 0x80, 0x8B, 0x43, 0xE3, 0x80, 0x8C, 0x43, - 0xE3, 0x80, 0x8D, 0x43, 0xE3, 0x80, 0x8E, 0x43, - 0xE3, 0x80, 0x8F, 0x43, 0xE3, 0x80, 0x90, 0x43, - 0xE3, 0x80, 0x91, 0x43, 0xE3, 0x80, 0x92, 0x43, - 0xE3, 0x80, 0x94, 0x43, 0xE3, 0x80, 0x95, 0x43, - // Bytes 4c0 - 4ff - 0xE3, 0x80, 0x96, 0x43, 0xE3, 0x80, 0x97, 0x43, - 0xE3, 0x82, 0xA1, 0x43, 0xE3, 0x82, 0xA2, 0x43, - 0xE3, 0x82, 0xA3, 0x43, 0xE3, 0x82, 0xA4, 0x43, - 0xE3, 0x82, 0xA5, 0x43, 0xE3, 0x82, 0xA6, 0x43, - 0xE3, 0x82, 0xA7, 0x43, 0xE3, 0x82, 0xA8, 0x43, - 0xE3, 0x82, 0xA9, 0x43, 0xE3, 0x82, 0xAA, 0x43, - 0xE3, 0x82, 0xAB, 0x43, 0xE3, 0x82, 0xAD, 0x43, - 0xE3, 0x82, 0xAF, 0x43, 0xE3, 0x82, 0xB1, 0x43, - // Bytes 500 - 53f - 0xE3, 0x82, 0xB3, 0x43, 0xE3, 0x82, 0xB5, 0x43, - 0xE3, 0x82, 0xB7, 0x43, 0xE3, 0x82, 0xB9, 0x43, - 0xE3, 0x82, 0xBB, 0x43, 0xE3, 0x82, 0xBD, 0x43, - 0xE3, 0x82, 0xBF, 0x43, 0xE3, 0x83, 0x81, 0x43, - 0xE3, 0x83, 0x83, 0x43, 0xE3, 0x83, 0x84, 0x43, - 0xE3, 0x83, 0x86, 0x43, 0xE3, 0x83, 0x88, 0x43, - 0xE3, 0x83, 0x8A, 0x43, 0xE3, 0x83, 0x8B, 0x43, - 0xE3, 0x83, 0x8C, 0x43, 0xE3, 0x83, 0x8D, 0x43, - // Bytes 540 - 57f - 0xE3, 0x83, 0x8E, 0x43, 0xE3, 0x83, 0x8F, 0x43, - 0xE3, 0x83, 0x92, 0x43, 0xE3, 0x83, 0x95, 0x43, - 0xE3, 0x83, 0x98, 0x43, 0xE3, 0x83, 0x9B, 0x43, - 0xE3, 0x83, 0x9E, 0x43, 0xE3, 0x83, 0x9F, 0x43, - 0xE3, 0x83, 0xA0, 0x43, 0xE3, 0x83, 0xA1, 0x43, - 0xE3, 0x83, 0xA2, 0x43, 0xE3, 0x83, 0xA3, 0x43, - 0xE3, 0x83, 0xA4, 0x43, 0xE3, 0x83, 0xA5, 0x43, - 0xE3, 0x83, 0xA6, 0x43, 0xE3, 0x83, 0xA7, 0x43, - // Bytes 580 - 5bf - 0xE3, 0x83, 0xA8, 0x43, 0xE3, 0x83, 0xA9, 0x43, - 0xE3, 0x83, 0xAA, 0x43, 0xE3, 0x83, 0xAB, 0x43, - 0xE3, 0x83, 0xAC, 0x43, 0xE3, 0x83, 0xAD, 0x43, - 0xE3, 0x83, 0xAF, 0x43, 0xE3, 0x83, 0xB0, 0x43, - 0xE3, 0x83, 0xB1, 0x43, 0xE3, 0x83, 0xB2, 0x43, - 0xE3, 0x83, 0xB3, 0x43, 0xE3, 0x83, 0xBB, 0x43, - 0xE3, 0x83, 0xBC, 0x43, 0xE3, 0x92, 0x9E, 0x43, - 0xE3, 0x92, 0xB9, 0x43, 0xE3, 0x92, 0xBB, 0x43, - // Bytes 5c0 - 5ff - 0xE3, 0x93, 0x9F, 0x43, 0xE3, 0x94, 0x95, 0x43, - 0xE3, 0x9B, 0xAE, 0x43, 0xE3, 0x9B, 0xBC, 0x43, - 0xE3, 0x9E, 0x81, 0x43, 0xE3, 0xA0, 0xAF, 0x43, - 0xE3, 0xA1, 0xA2, 0x43, 0xE3, 0xA1, 0xBC, 0x43, - 0xE3, 0xA3, 0x87, 0x43, 0xE3, 0xA3, 0xA3, 0x43, - 0xE3, 0xA4, 0x9C, 0x43, 0xE3, 0xA4, 0xBA, 0x43, - 0xE3, 0xA8, 0xAE, 0x43, 0xE3, 0xA9, 0xAC, 0x43, - 0xE3, 0xAB, 0xA4, 0x43, 0xE3, 0xAC, 0x88, 0x43, - // Bytes 600 - 63f - 0xE3, 0xAC, 0x99, 0x43, 0xE3, 0xAD, 0x89, 0x43, - 0xE3, 0xAE, 0x9D, 0x43, 0xE3, 0xB0, 0x98, 0x43, - 0xE3, 0xB1, 0x8E, 0x43, 0xE3, 0xB4, 0xB3, 0x43, - 0xE3, 0xB6, 0x96, 0x43, 0xE3, 0xBA, 0xAC, 0x43, - 0xE3, 0xBA, 0xB8, 0x43, 0xE3, 0xBC, 0x9B, 0x43, - 0xE3, 0xBF, 0xBC, 0x43, 0xE4, 0x80, 0x88, 0x43, - 0xE4, 0x80, 0x98, 0x43, 0xE4, 0x80, 0xB9, 0x43, - 0xE4, 0x81, 0x86, 0x43, 0xE4, 0x82, 0x96, 0x43, - // Bytes 640 - 67f - 0xE4, 0x83, 0xA3, 0x43, 0xE4, 0x84, 0xAF, 0x43, - 0xE4, 0x88, 0x82, 0x43, 0xE4, 0x88, 0xA7, 0x43, - 0xE4, 0x8A, 0xA0, 0x43, 0xE4, 0x8C, 0x81, 0x43, - 0xE4, 0x8C, 0xB4, 0x43, 0xE4, 0x8D, 0x99, 0x43, - 0xE4, 0x8F, 0x95, 0x43, 0xE4, 0x8F, 0x99, 0x43, - 0xE4, 0x90, 0x8B, 0x43, 0xE4, 0x91, 0xAB, 0x43, - 0xE4, 0x94, 0xAB, 0x43, 0xE4, 0x95, 0x9D, 0x43, - 0xE4, 0x95, 0xA1, 0x43, 0xE4, 0x95, 0xAB, 0x43, - // Bytes 680 - 6bf - 0xE4, 0x97, 0x97, 0x43, 0xE4, 0x97, 0xB9, 0x43, - 0xE4, 0x98, 0xB5, 0x43, 0xE4, 0x9A, 0xBE, 0x43, - 0xE4, 0x9B, 0x87, 0x43, 0xE4, 0xA6, 0x95, 0x43, - 0xE4, 0xA7, 0xA6, 0x43, 0xE4, 0xA9, 0xAE, 0x43, - 0xE4, 0xA9, 0xB6, 0x43, 0xE4, 0xAA, 0xB2, 0x43, - 0xE4, 0xAC, 0xB3, 0x43, 0xE4, 0xAF, 0x8E, 0x43, - 0xE4, 0xB3, 0x8E, 0x43, 0xE4, 0xB3, 0xAD, 0x43, - 0xE4, 0xB3, 0xB8, 0x43, 0xE4, 0xB5, 0x96, 0x43, - // Bytes 6c0 - 6ff - 0xE4, 0xB8, 0x80, 0x43, 0xE4, 0xB8, 0x81, 0x43, - 0xE4, 0xB8, 0x83, 0x43, 0xE4, 0xB8, 0x89, 0x43, - 0xE4, 0xB8, 0x8A, 0x43, 0xE4, 0xB8, 0x8B, 0x43, - 0xE4, 0xB8, 0x8D, 0x43, 0xE4, 0xB8, 0x99, 0x43, - 0xE4, 0xB8, 0xA6, 0x43, 0xE4, 0xB8, 0xA8, 0x43, - 0xE4, 0xB8, 0xAD, 0x43, 0xE4, 0xB8, 0xB2, 0x43, - 0xE4, 0xB8, 0xB6, 0x43, 0xE4, 0xB8, 0xB8, 0x43, - 0xE4, 0xB8, 0xB9, 0x43, 0xE4, 0xB8, 0xBD, 0x43, - // Bytes 700 - 73f - 0xE4, 0xB8, 0xBF, 0x43, 0xE4, 0xB9, 0x81, 0x43, - 0xE4, 0xB9, 0x99, 0x43, 0xE4, 0xB9, 0x9D, 0x43, - 0xE4, 0xBA, 0x82, 0x43, 0xE4, 0xBA, 0x85, 0x43, - 0xE4, 0xBA, 0x86, 0x43, 0xE4, 0xBA, 0x8C, 0x43, - 0xE4, 0xBA, 0x94, 0x43, 0xE4, 0xBA, 0xA0, 0x43, - 0xE4, 0xBA, 0xA4, 0x43, 0xE4, 0xBA, 0xAE, 0x43, - 0xE4, 0xBA, 0xBA, 0x43, 0xE4, 0xBB, 0x80, 0x43, - 0xE4, 0xBB, 0x8C, 0x43, 0xE4, 0xBB, 0xA4, 0x43, - // Bytes 740 - 77f - 0xE4, 0xBC, 0x81, 0x43, 0xE4, 0xBC, 0x91, 0x43, - 0xE4, 0xBD, 0xA0, 0x43, 0xE4, 0xBE, 0x80, 0x43, - 0xE4, 0xBE, 0x86, 0x43, 0xE4, 0xBE, 0x8B, 0x43, - 0xE4, 0xBE, 0xAE, 0x43, 0xE4, 0xBE, 0xBB, 0x43, - 0xE4, 0xBE, 0xBF, 0x43, 0xE5, 0x80, 0x82, 0x43, - 0xE5, 0x80, 0xAB, 0x43, 0xE5, 0x81, 0xBA, 0x43, - 0xE5, 0x82, 0x99, 0x43, 0xE5, 0x83, 0x8F, 0x43, - 0xE5, 0x83, 0x9A, 0x43, 0xE5, 0x83, 0xA7, 0x43, - // Bytes 780 - 7bf - 0xE5, 0x84, 0xAA, 0x43, 0xE5, 0x84, 0xBF, 0x43, - 0xE5, 0x85, 0x80, 0x43, 0xE5, 0x85, 0x85, 0x43, - 0xE5, 0x85, 0x8D, 0x43, 0xE5, 0x85, 0x94, 0x43, - 0xE5, 0x85, 0xA4, 0x43, 0xE5, 0x85, 0xA5, 0x43, - 0xE5, 0x85, 0xA7, 0x43, 0xE5, 0x85, 0xA8, 0x43, - 0xE5, 0x85, 0xA9, 0x43, 0xE5, 0x85, 0xAB, 0x43, - 0xE5, 0x85, 0xAD, 0x43, 0xE5, 0x85, 0xB7, 0x43, - 0xE5, 0x86, 0x80, 0x43, 0xE5, 0x86, 0x82, 0x43, - // Bytes 7c0 - 7ff - 0xE5, 0x86, 0x8D, 0x43, 0xE5, 0x86, 0x92, 0x43, - 0xE5, 0x86, 0x95, 0x43, 0xE5, 0x86, 0x96, 0x43, - 0xE5, 0x86, 0x97, 0x43, 0xE5, 0x86, 0x99, 0x43, - 0xE5, 0x86, 0xA4, 0x43, 0xE5, 0x86, 0xAB, 0x43, - 0xE5, 0x86, 0xAC, 0x43, 0xE5, 0x86, 0xB5, 0x43, - 0xE5, 0x86, 0xB7, 0x43, 0xE5, 0x87, 0x89, 0x43, - 0xE5, 0x87, 0x8C, 0x43, 0xE5, 0x87, 0x9C, 0x43, - 0xE5, 0x87, 0x9E, 0x43, 0xE5, 0x87, 0xA0, 0x43, - // Bytes 800 - 83f - 0xE5, 0x87, 0xB5, 0x43, 0xE5, 0x88, 0x80, 0x43, - 0xE5, 0x88, 0x83, 0x43, 0xE5, 0x88, 0x87, 0x43, - 0xE5, 0x88, 0x97, 0x43, 0xE5, 0x88, 0x9D, 0x43, - 0xE5, 0x88, 0xA9, 0x43, 0xE5, 0x88, 0xBA, 0x43, - 0xE5, 0x88, 0xBB, 0x43, 0xE5, 0x89, 0x86, 0x43, - 0xE5, 0x89, 0x8D, 0x43, 0xE5, 0x89, 0xB2, 0x43, - 0xE5, 0x89, 0xB7, 0x43, 0xE5, 0x8A, 0x89, 0x43, - 0xE5, 0x8A, 0x9B, 0x43, 0xE5, 0x8A, 0xA3, 0x43, - // Bytes 840 - 87f - 0xE5, 0x8A, 0xB3, 0x43, 0xE5, 0x8A, 0xB4, 0x43, - 0xE5, 0x8B, 0x87, 0x43, 0xE5, 0x8B, 0x89, 0x43, - 0xE5, 0x8B, 0x92, 0x43, 0xE5, 0x8B, 0x9E, 0x43, - 0xE5, 0x8B, 0xA4, 0x43, 0xE5, 0x8B, 0xB5, 0x43, - 0xE5, 0x8B, 0xB9, 0x43, 0xE5, 0x8B, 0xBA, 0x43, - 0xE5, 0x8C, 0x85, 0x43, 0xE5, 0x8C, 0x86, 0x43, - 0xE5, 0x8C, 0x95, 0x43, 0xE5, 0x8C, 0x97, 0x43, - 0xE5, 0x8C, 0x9A, 0x43, 0xE5, 0x8C, 0xB8, 0x43, - // Bytes 880 - 8bf - 0xE5, 0x8C, 0xBB, 0x43, 0xE5, 0x8C, 0xBF, 0x43, - 0xE5, 0x8D, 0x81, 0x43, 0xE5, 0x8D, 0x84, 0x43, - 0xE5, 0x8D, 0x85, 0x43, 0xE5, 0x8D, 0x89, 0x43, - 0xE5, 0x8D, 0x91, 0x43, 0xE5, 0x8D, 0x94, 0x43, - 0xE5, 0x8D, 0x9A, 0x43, 0xE5, 0x8D, 0x9C, 0x43, - 0xE5, 0x8D, 0xA9, 0x43, 0xE5, 0x8D, 0xB0, 0x43, - 0xE5, 0x8D, 0xB3, 0x43, 0xE5, 0x8D, 0xB5, 0x43, - 0xE5, 0x8D, 0xBD, 0x43, 0xE5, 0x8D, 0xBF, 0x43, - // Bytes 8c0 - 8ff - 0xE5, 0x8E, 0x82, 0x43, 0xE5, 0x8E, 0xB6, 0x43, - 0xE5, 0x8F, 0x83, 0x43, 0xE5, 0x8F, 0x88, 0x43, - 0xE5, 0x8F, 0x8A, 0x43, 0xE5, 0x8F, 0x8C, 0x43, - 0xE5, 0x8F, 0x9F, 0x43, 0xE5, 0x8F, 0xA3, 0x43, - 0xE5, 0x8F, 0xA5, 0x43, 0xE5, 0x8F, 0xAB, 0x43, - 0xE5, 0x8F, 0xAF, 0x43, 0xE5, 0x8F, 0xB1, 0x43, - 0xE5, 0x8F, 0xB3, 0x43, 0xE5, 0x90, 0x86, 0x43, - 0xE5, 0x90, 0x88, 0x43, 0xE5, 0x90, 0x8D, 0x43, - // Bytes 900 - 93f - 0xE5, 0x90, 0x8F, 0x43, 0xE5, 0x90, 0x9D, 0x43, - 0xE5, 0x90, 0xB8, 0x43, 0xE5, 0x90, 0xB9, 0x43, - 0xE5, 0x91, 0x82, 0x43, 0xE5, 0x91, 0x88, 0x43, - 0xE5, 0x91, 0xA8, 0x43, 0xE5, 0x92, 0x9E, 0x43, - 0xE5, 0x92, 0xA2, 0x43, 0xE5, 0x92, 0xBD, 0x43, - 0xE5, 0x93, 0xB6, 0x43, 0xE5, 0x94, 0x90, 0x43, - 0xE5, 0x95, 0x8F, 0x43, 0xE5, 0x95, 0x93, 0x43, - 0xE5, 0x95, 0x95, 0x43, 0xE5, 0x95, 0xA3, 0x43, - // Bytes 940 - 97f - 0xE5, 0x96, 0x84, 0x43, 0xE5, 0x96, 0x87, 0x43, - 0xE5, 0x96, 0x99, 0x43, 0xE5, 0x96, 0x9D, 0x43, - 0xE5, 0x96, 0xAB, 0x43, 0xE5, 0x96, 0xB3, 0x43, - 0xE5, 0x96, 0xB6, 0x43, 0xE5, 0x97, 0x80, 0x43, - 0xE5, 0x97, 0x82, 0x43, 0xE5, 0x97, 0xA2, 0x43, - 0xE5, 0x98, 0x86, 0x43, 0xE5, 0x99, 0x91, 0x43, - 0xE5, 0x99, 0xA8, 0x43, 0xE5, 0x99, 0xB4, 0x43, - 0xE5, 0x9B, 0x97, 0x43, 0xE5, 0x9B, 0x9B, 0x43, - // Bytes 980 - 9bf - 0xE5, 0x9B, 0xB9, 0x43, 0xE5, 0x9C, 0x96, 0x43, - 0xE5, 0x9C, 0x97, 0x43, 0xE5, 0x9C, 0x9F, 0x43, - 0xE5, 0x9C, 0xB0, 0x43, 0xE5, 0x9E, 0x8B, 0x43, - 0xE5, 0x9F, 0x8E, 0x43, 0xE5, 0x9F, 0xB4, 0x43, - 0xE5, 0xA0, 0x8D, 0x43, 0xE5, 0xA0, 0xB1, 0x43, - 0xE5, 0xA0, 0xB2, 0x43, 0xE5, 0xA1, 0x80, 0x43, - 0xE5, 0xA1, 0x9A, 0x43, 0xE5, 0xA1, 0x9E, 0x43, - 0xE5, 0xA2, 0xA8, 0x43, 0xE5, 0xA2, 0xAC, 0x43, - // Bytes 9c0 - 9ff - 0xE5, 0xA2, 0xB3, 0x43, 0xE5, 0xA3, 0x98, 0x43, - 0xE5, 0xA3, 0x9F, 0x43, 0xE5, 0xA3, 0xAB, 0x43, - 0xE5, 0xA3, 0xAE, 0x43, 0xE5, 0xA3, 0xB0, 0x43, - 0xE5, 0xA3, 0xB2, 0x43, 0xE5, 0xA3, 0xB7, 0x43, - 0xE5, 0xA4, 0x82, 0x43, 0xE5, 0xA4, 0x86, 0x43, - 0xE5, 0xA4, 0x8A, 0x43, 0xE5, 0xA4, 0x95, 0x43, - 0xE5, 0xA4, 0x9A, 0x43, 0xE5, 0xA4, 0x9C, 0x43, - 0xE5, 0xA4, 0xA2, 0x43, 0xE5, 0xA4, 0xA7, 0x43, - // Bytes a00 - a3f - 0xE5, 0xA4, 0xA9, 0x43, 0xE5, 0xA5, 0x84, 0x43, - 0xE5, 0xA5, 0x88, 0x43, 0xE5, 0xA5, 0x91, 0x43, - 0xE5, 0xA5, 0x94, 0x43, 0xE5, 0xA5, 0xA2, 0x43, - 0xE5, 0xA5, 0xB3, 0x43, 0xE5, 0xA7, 0x98, 0x43, - 0xE5, 0xA7, 0xAC, 0x43, 0xE5, 0xA8, 0x9B, 0x43, - 0xE5, 0xA8, 0xA7, 0x43, 0xE5, 0xA9, 0xA2, 0x43, - 0xE5, 0xA9, 0xA6, 0x43, 0xE5, 0xAA, 0xB5, 0x43, - 0xE5, 0xAC, 0x88, 0x43, 0xE5, 0xAC, 0xA8, 0x43, - // Bytes a40 - a7f - 0xE5, 0xAC, 0xBE, 0x43, 0xE5, 0xAD, 0x90, 0x43, - 0xE5, 0xAD, 0x97, 0x43, 0xE5, 0xAD, 0xA6, 0x43, - 0xE5, 0xAE, 0x80, 0x43, 0xE5, 0xAE, 0x85, 0x43, - 0xE5, 0xAE, 0x97, 0x43, 0xE5, 0xAF, 0x83, 0x43, - 0xE5, 0xAF, 0x98, 0x43, 0xE5, 0xAF, 0xA7, 0x43, - 0xE5, 0xAF, 0xAE, 0x43, 0xE5, 0xAF, 0xB3, 0x43, - 0xE5, 0xAF, 0xB8, 0x43, 0xE5, 0xAF, 0xBF, 0x43, - 0xE5, 0xB0, 0x86, 0x43, 0xE5, 0xB0, 0x8F, 0x43, - // Bytes a80 - abf - 0xE5, 0xB0, 0xA2, 0x43, 0xE5, 0xB0, 0xB8, 0x43, - 0xE5, 0xB0, 0xBF, 0x43, 0xE5, 0xB1, 0xA0, 0x43, - 0xE5, 0xB1, 0xA2, 0x43, 0xE5, 0xB1, 0xA4, 0x43, - 0xE5, 0xB1, 0xA5, 0x43, 0xE5, 0xB1, 0xAE, 0x43, - 0xE5, 0xB1, 0xB1, 0x43, 0xE5, 0xB2, 0x8D, 0x43, - 0xE5, 0xB3, 0x80, 0x43, 0xE5, 0xB4, 0x99, 0x43, - 0xE5, 0xB5, 0x83, 0x43, 0xE5, 0xB5, 0x90, 0x43, - 0xE5, 0xB5, 0xAB, 0x43, 0xE5, 0xB5, 0xAE, 0x43, - // Bytes ac0 - aff - 0xE5, 0xB5, 0xBC, 0x43, 0xE5, 0xB6, 0xB2, 0x43, - 0xE5, 0xB6, 0xBA, 0x43, 0xE5, 0xB7, 0x9B, 0x43, - 0xE5, 0xB7, 0xA1, 0x43, 0xE5, 0xB7, 0xA2, 0x43, - 0xE5, 0xB7, 0xA5, 0x43, 0xE5, 0xB7, 0xA6, 0x43, - 0xE5, 0xB7, 0xB1, 0x43, 0xE5, 0xB7, 0xBD, 0x43, - 0xE5, 0xB7, 0xBE, 0x43, 0xE5, 0xB8, 0xA8, 0x43, - 0xE5, 0xB8, 0xBD, 0x43, 0xE5, 0xB9, 0xA9, 0x43, - 0xE5, 0xB9, 0xB2, 0x43, 0xE5, 0xB9, 0xB4, 0x43, - // Bytes b00 - b3f - 0xE5, 0xB9, 0xBA, 0x43, 0xE5, 0xB9, 0xBC, 0x43, - 0xE5, 0xB9, 0xBF, 0x43, 0xE5, 0xBA, 0xA6, 0x43, - 0xE5, 0xBA, 0xB0, 0x43, 0xE5, 0xBA, 0xB3, 0x43, - 0xE5, 0xBA, 0xB6, 0x43, 0xE5, 0xBB, 0x89, 0x43, - 0xE5, 0xBB, 0x8A, 0x43, 0xE5, 0xBB, 0x92, 0x43, - 0xE5, 0xBB, 0x93, 0x43, 0xE5, 0xBB, 0x99, 0x43, - 0xE5, 0xBB, 0xAC, 0x43, 0xE5, 0xBB, 0xB4, 0x43, - 0xE5, 0xBB, 0xBE, 0x43, 0xE5, 0xBC, 0x84, 0x43, - // Bytes b40 - b7f - 0xE5, 0xBC, 0x8B, 0x43, 0xE5, 0xBC, 0x93, 0x43, - 0xE5, 0xBC, 0xA2, 0x43, 0xE5, 0xBD, 0x90, 0x43, - 0xE5, 0xBD, 0x93, 0x43, 0xE5, 0xBD, 0xA1, 0x43, - 0xE5, 0xBD, 0xA2, 0x43, 0xE5, 0xBD, 0xA9, 0x43, - 0xE5, 0xBD, 0xAB, 0x43, 0xE5, 0xBD, 0xB3, 0x43, - 0xE5, 0xBE, 0x8B, 0x43, 0xE5, 0xBE, 0x8C, 0x43, - 0xE5, 0xBE, 0x97, 0x43, 0xE5, 0xBE, 0x9A, 0x43, - 0xE5, 0xBE, 0xA9, 0x43, 0xE5, 0xBE, 0xAD, 0x43, - // Bytes b80 - bbf - 0xE5, 0xBF, 0x83, 0x43, 0xE5, 0xBF, 0x8D, 0x43, - 0xE5, 0xBF, 0x97, 0x43, 0xE5, 0xBF, 0xB5, 0x43, - 0xE5, 0xBF, 0xB9, 0x43, 0xE6, 0x80, 0x92, 0x43, - 0xE6, 0x80, 0x9C, 0x43, 0xE6, 0x81, 0xB5, 0x43, - 0xE6, 0x82, 0x81, 0x43, 0xE6, 0x82, 0x94, 0x43, - 0xE6, 0x83, 0x87, 0x43, 0xE6, 0x83, 0x98, 0x43, - 0xE6, 0x83, 0xA1, 0x43, 0xE6, 0x84, 0x88, 0x43, - 0xE6, 0x85, 0x84, 0x43, 0xE6, 0x85, 0x88, 0x43, - // Bytes bc0 - bff - 0xE6, 0x85, 0x8C, 0x43, 0xE6, 0x85, 0x8E, 0x43, - 0xE6, 0x85, 0xA0, 0x43, 0xE6, 0x85, 0xA8, 0x43, - 0xE6, 0x85, 0xBA, 0x43, 0xE6, 0x86, 0x8E, 0x43, - 0xE6, 0x86, 0x90, 0x43, 0xE6, 0x86, 0xA4, 0x43, - 0xE6, 0x86, 0xAF, 0x43, 0xE6, 0x86, 0xB2, 0x43, - 0xE6, 0x87, 0x9E, 0x43, 0xE6, 0x87, 0xB2, 0x43, - 0xE6, 0x87, 0xB6, 0x43, 0xE6, 0x88, 0x80, 0x43, - 0xE6, 0x88, 0x88, 0x43, 0xE6, 0x88, 0x90, 0x43, - // Bytes c00 - c3f - 0xE6, 0x88, 0x9B, 0x43, 0xE6, 0x88, 0xAE, 0x43, - 0xE6, 0x88, 0xB4, 0x43, 0xE6, 0x88, 0xB6, 0x43, - 0xE6, 0x89, 0x8B, 0x43, 0xE6, 0x89, 0x93, 0x43, - 0xE6, 0x89, 0x9D, 0x43, 0xE6, 0x8A, 0x95, 0x43, - 0xE6, 0x8A, 0xB1, 0x43, 0xE6, 0x8B, 0x89, 0x43, - 0xE6, 0x8B, 0x8F, 0x43, 0xE6, 0x8B, 0x93, 0x43, - 0xE6, 0x8B, 0x94, 0x43, 0xE6, 0x8B, 0xBC, 0x43, - 0xE6, 0x8B, 0xBE, 0x43, 0xE6, 0x8C, 0x87, 0x43, - // Bytes c40 - c7f - 0xE6, 0x8C, 0xBD, 0x43, 0xE6, 0x8D, 0x90, 0x43, - 0xE6, 0x8D, 0x95, 0x43, 0xE6, 0x8D, 0xA8, 0x43, - 0xE6, 0x8D, 0xBB, 0x43, 0xE6, 0x8E, 0x83, 0x43, - 0xE6, 0x8E, 0xA0, 0x43, 0xE6, 0x8E, 0xA9, 0x43, - 0xE6, 0x8F, 0x84, 0x43, 0xE6, 0x8F, 0x85, 0x43, - 0xE6, 0x8F, 0xA4, 0x43, 0xE6, 0x90, 0x9C, 0x43, - 0xE6, 0x90, 0xA2, 0x43, 0xE6, 0x91, 0x92, 0x43, - 0xE6, 0x91, 0xA9, 0x43, 0xE6, 0x91, 0xB7, 0x43, - // Bytes c80 - cbf - 0xE6, 0x91, 0xBE, 0x43, 0xE6, 0x92, 0x9A, 0x43, - 0xE6, 0x92, 0x9D, 0x43, 0xE6, 0x93, 0x84, 0x43, - 0xE6, 0x94, 0xAF, 0x43, 0xE6, 0x94, 0xB4, 0x43, - 0xE6, 0x95, 0x8F, 0x43, 0xE6, 0x95, 0x96, 0x43, - 0xE6, 0x95, 0xAC, 0x43, 0xE6, 0x95, 0xB8, 0x43, - 0xE6, 0x96, 0x87, 0x43, 0xE6, 0x96, 0x97, 0x43, - 0xE6, 0x96, 0x99, 0x43, 0xE6, 0x96, 0xA4, 0x43, - 0xE6, 0x96, 0xB0, 0x43, 0xE6, 0x96, 0xB9, 0x43, - // Bytes cc0 - cff - 0xE6, 0x97, 0x85, 0x43, 0xE6, 0x97, 0xA0, 0x43, - 0xE6, 0x97, 0xA2, 0x43, 0xE6, 0x97, 0xA3, 0x43, - 0xE6, 0x97, 0xA5, 0x43, 0xE6, 0x98, 0x93, 0x43, - 0xE6, 0x98, 0xA0, 0x43, 0xE6, 0x99, 0x89, 0x43, - 0xE6, 0x99, 0xB4, 0x43, 0xE6, 0x9A, 0x88, 0x43, - 0xE6, 0x9A, 0x91, 0x43, 0xE6, 0x9A, 0x9C, 0x43, - 0xE6, 0x9A, 0xB4, 0x43, 0xE6, 0x9B, 0x86, 0x43, - 0xE6, 0x9B, 0xB0, 0x43, 0xE6, 0x9B, 0xB4, 0x43, - // Bytes d00 - d3f - 0xE6, 0x9B, 0xB8, 0x43, 0xE6, 0x9C, 0x80, 0x43, - 0xE6, 0x9C, 0x88, 0x43, 0xE6, 0x9C, 0x89, 0x43, - 0xE6, 0x9C, 0x97, 0x43, 0xE6, 0x9C, 0x9B, 0x43, - 0xE6, 0x9C, 0xA1, 0x43, 0xE6, 0x9C, 0xA8, 0x43, - 0xE6, 0x9D, 0x8E, 0x43, 0xE6, 0x9D, 0x93, 0x43, - 0xE6, 0x9D, 0x96, 0x43, 0xE6, 0x9D, 0x9E, 0x43, - 0xE6, 0x9D, 0xBB, 0x43, 0xE6, 0x9E, 0x85, 0x43, - 0xE6, 0x9E, 0x97, 0x43, 0xE6, 0x9F, 0xB3, 0x43, - // Bytes d40 - d7f - 0xE6, 0x9F, 0xBA, 0x43, 0xE6, 0xA0, 0x97, 0x43, - 0xE6, 0xA0, 0x9F, 0x43, 0xE6, 0xA0, 0xAA, 0x43, - 0xE6, 0xA1, 0x92, 0x43, 0xE6, 0xA2, 0x81, 0x43, - 0xE6, 0xA2, 0x85, 0x43, 0xE6, 0xA2, 0x8E, 0x43, - 0xE6, 0xA2, 0xA8, 0x43, 0xE6, 0xA4, 0x94, 0x43, - 0xE6, 0xA5, 0x82, 0x43, 0xE6, 0xA6, 0xA3, 0x43, - 0xE6, 0xA7, 0xAA, 0x43, 0xE6, 0xA8, 0x82, 0x43, - 0xE6, 0xA8, 0x93, 0x43, 0xE6, 0xAA, 0xA8, 0x43, - // Bytes d80 - dbf - 0xE6, 0xAB, 0x93, 0x43, 0xE6, 0xAB, 0x9B, 0x43, - 0xE6, 0xAC, 0x84, 0x43, 0xE6, 0xAC, 0xA0, 0x43, - 0xE6, 0xAC, 0xA1, 0x43, 0xE6, 0xAD, 0x94, 0x43, - 0xE6, 0xAD, 0xA2, 0x43, 0xE6, 0xAD, 0xA3, 0x43, - 0xE6, 0xAD, 0xB2, 0x43, 0xE6, 0xAD, 0xB7, 0x43, - 0xE6, 0xAD, 0xB9, 0x43, 0xE6, 0xAE, 0x9F, 0x43, - 0xE6, 0xAE, 0xAE, 0x43, 0xE6, 0xAE, 0xB3, 0x43, - 0xE6, 0xAE, 0xBA, 0x43, 0xE6, 0xAE, 0xBB, 0x43, - // Bytes dc0 - dff - 0xE6, 0xAF, 0x8B, 0x43, 0xE6, 0xAF, 0x8D, 0x43, - 0xE6, 0xAF, 0x94, 0x43, 0xE6, 0xAF, 0x9B, 0x43, - 0xE6, 0xB0, 0x8F, 0x43, 0xE6, 0xB0, 0x94, 0x43, - 0xE6, 0xB0, 0xB4, 0x43, 0xE6, 0xB1, 0x8E, 0x43, - 0xE6, 0xB1, 0xA7, 0x43, 0xE6, 0xB2, 0x88, 0x43, - 0xE6, 0xB2, 0xBF, 0x43, 0xE6, 0xB3, 0x8C, 0x43, - 0xE6, 0xB3, 0x8D, 0x43, 0xE6, 0xB3, 0xA5, 0x43, - 0xE6, 0xB3, 0xA8, 0x43, 0xE6, 0xB4, 0x96, 0x43, - // Bytes e00 - e3f - 0xE6, 0xB4, 0x9B, 0x43, 0xE6, 0xB4, 0x9E, 0x43, - 0xE6, 0xB4, 0xB4, 0x43, 0xE6, 0xB4, 0xBE, 0x43, - 0xE6, 0xB5, 0x81, 0x43, 0xE6, 0xB5, 0xA9, 0x43, - 0xE6, 0xB5, 0xAA, 0x43, 0xE6, 0xB5, 0xB7, 0x43, - 0xE6, 0xB5, 0xB8, 0x43, 0xE6, 0xB6, 0x85, 0x43, - 0xE6, 0xB7, 0x8B, 0x43, 0xE6, 0xB7, 0x9A, 0x43, - 0xE6, 0xB7, 0xAA, 0x43, 0xE6, 0xB7, 0xB9, 0x43, - 0xE6, 0xB8, 0x9A, 0x43, 0xE6, 0xB8, 0xAF, 0x43, - // Bytes e40 - e7f - 0xE6, 0xB9, 0xAE, 0x43, 0xE6, 0xBA, 0x80, 0x43, - 0xE6, 0xBA, 0x9C, 0x43, 0xE6, 0xBA, 0xBA, 0x43, - 0xE6, 0xBB, 0x87, 0x43, 0xE6, 0xBB, 0x8B, 0x43, - 0xE6, 0xBB, 0x91, 0x43, 0xE6, 0xBB, 0x9B, 0x43, - 0xE6, 0xBC, 0x8F, 0x43, 0xE6, 0xBC, 0x94, 0x43, - 0xE6, 0xBC, 0xA2, 0x43, 0xE6, 0xBC, 0xA3, 0x43, - 0xE6, 0xBD, 0xAE, 0x43, 0xE6, 0xBF, 0x86, 0x43, - 0xE6, 0xBF, 0xAB, 0x43, 0xE6, 0xBF, 0xBE, 0x43, - // Bytes e80 - ebf - 0xE7, 0x80, 0x9B, 0x43, 0xE7, 0x80, 0x9E, 0x43, - 0xE7, 0x80, 0xB9, 0x43, 0xE7, 0x81, 0x8A, 0x43, - 0xE7, 0x81, 0xAB, 0x43, 0xE7, 0x81, 0xB0, 0x43, - 0xE7, 0x81, 0xB7, 0x43, 0xE7, 0x81, 0xBD, 0x43, - 0xE7, 0x82, 0x99, 0x43, 0xE7, 0x82, 0xAD, 0x43, - 0xE7, 0x83, 0x88, 0x43, 0xE7, 0x83, 0x99, 0x43, - 0xE7, 0x84, 0xA1, 0x43, 0xE7, 0x85, 0x85, 0x43, - 0xE7, 0x85, 0x89, 0x43, 0xE7, 0x85, 0xAE, 0x43, - // Bytes ec0 - eff - 0xE7, 0x86, 0x9C, 0x43, 0xE7, 0x87, 0x8E, 0x43, - 0xE7, 0x87, 0x90, 0x43, 0xE7, 0x88, 0x90, 0x43, - 0xE7, 0x88, 0x9B, 0x43, 0xE7, 0x88, 0xA8, 0x43, - 0xE7, 0x88, 0xAA, 0x43, 0xE7, 0x88, 0xAB, 0x43, - 0xE7, 0x88, 0xB5, 0x43, 0xE7, 0x88, 0xB6, 0x43, - 0xE7, 0x88, 0xBB, 0x43, 0xE7, 0x88, 0xBF, 0x43, - 0xE7, 0x89, 0x87, 0x43, 0xE7, 0x89, 0x90, 0x43, - 0xE7, 0x89, 0x99, 0x43, 0xE7, 0x89, 0x9B, 0x43, - // Bytes f00 - f3f - 0xE7, 0x89, 0xA2, 0x43, 0xE7, 0x89, 0xB9, 0x43, - 0xE7, 0x8A, 0x80, 0x43, 0xE7, 0x8A, 0x95, 0x43, - 0xE7, 0x8A, 0xAC, 0x43, 0xE7, 0x8A, 0xAF, 0x43, - 0xE7, 0x8B, 0x80, 0x43, 0xE7, 0x8B, 0xBC, 0x43, - 0xE7, 0x8C, 0xAA, 0x43, 0xE7, 0x8D, 0xB5, 0x43, - 0xE7, 0x8D, 0xBA, 0x43, 0xE7, 0x8E, 0x84, 0x43, - 0xE7, 0x8E, 0x87, 0x43, 0xE7, 0x8E, 0x89, 0x43, - 0xE7, 0x8E, 0x8B, 0x43, 0xE7, 0x8E, 0xA5, 0x43, - // Bytes f40 - f7f - 0xE7, 0x8E, 0xB2, 0x43, 0xE7, 0x8F, 0x9E, 0x43, - 0xE7, 0x90, 0x86, 0x43, 0xE7, 0x90, 0x89, 0x43, - 0xE7, 0x90, 0xA2, 0x43, 0xE7, 0x91, 0x87, 0x43, - 0xE7, 0x91, 0x9C, 0x43, 0xE7, 0x91, 0xA9, 0x43, - 0xE7, 0x91, 0xB1, 0x43, 0xE7, 0x92, 0x85, 0x43, - 0xE7, 0x92, 0x89, 0x43, 0xE7, 0x92, 0x98, 0x43, - 0xE7, 0x93, 0x8A, 0x43, 0xE7, 0x93, 0x9C, 0x43, - 0xE7, 0x93, 0xA6, 0x43, 0xE7, 0x94, 0x86, 0x43, - // Bytes f80 - fbf - 0xE7, 0x94, 0x98, 0x43, 0xE7, 0x94, 0x9F, 0x43, - 0xE7, 0x94, 0xA4, 0x43, 0xE7, 0x94, 0xA8, 0x43, - 0xE7, 0x94, 0xB0, 0x43, 0xE7, 0x94, 0xB2, 0x43, - 0xE7, 0x94, 0xB3, 0x43, 0xE7, 0x94, 0xB7, 0x43, - 0xE7, 0x94, 0xBB, 0x43, 0xE7, 0x94, 0xBE, 0x43, - 0xE7, 0x95, 0x99, 0x43, 0xE7, 0x95, 0xA5, 0x43, - 0xE7, 0x95, 0xB0, 0x43, 0xE7, 0x96, 0x8B, 0x43, - 0xE7, 0x96, 0x92, 0x43, 0xE7, 0x97, 0xA2, 0x43, - // Bytes fc0 - fff - 0xE7, 0x98, 0x90, 0x43, 0xE7, 0x98, 0x9D, 0x43, - 0xE7, 0x98, 0x9F, 0x43, 0xE7, 0x99, 0x82, 0x43, - 0xE7, 0x99, 0xA9, 0x43, 0xE7, 0x99, 0xB6, 0x43, - 0xE7, 0x99, 0xBD, 0x43, 0xE7, 0x9A, 0xAE, 0x43, - 0xE7, 0x9A, 0xBF, 0x43, 0xE7, 0x9B, 0x8A, 0x43, - 0xE7, 0x9B, 0x9B, 0x43, 0xE7, 0x9B, 0xA3, 0x43, - 0xE7, 0x9B, 0xA7, 0x43, 0xE7, 0x9B, 0xAE, 0x43, - 0xE7, 0x9B, 0xB4, 0x43, 0xE7, 0x9C, 0x81, 0x43, - // Bytes 1000 - 103f - 0xE7, 0x9C, 0x9E, 0x43, 0xE7, 0x9C, 0x9F, 0x43, - 0xE7, 0x9D, 0x80, 0x43, 0xE7, 0x9D, 0x8A, 0x43, - 0xE7, 0x9E, 0x8B, 0x43, 0xE7, 0x9E, 0xA7, 0x43, - 0xE7, 0x9F, 0x9B, 0x43, 0xE7, 0x9F, 0xA2, 0x43, - 0xE7, 0x9F, 0xB3, 0x43, 0xE7, 0xA1, 0x8E, 0x43, - 0xE7, 0xA1, 0xAB, 0x43, 0xE7, 0xA2, 0x8C, 0x43, - 0xE7, 0xA2, 0x91, 0x43, 0xE7, 0xA3, 0x8A, 0x43, - 0xE7, 0xA3, 0x8C, 0x43, 0xE7, 0xA3, 0xBB, 0x43, - // Bytes 1040 - 107f - 0xE7, 0xA4, 0xAA, 0x43, 0xE7, 0xA4, 0xBA, 0x43, - 0xE7, 0xA4, 0xBC, 0x43, 0xE7, 0xA4, 0xBE, 0x43, - 0xE7, 0xA5, 0x88, 0x43, 0xE7, 0xA5, 0x89, 0x43, - 0xE7, 0xA5, 0x90, 0x43, 0xE7, 0xA5, 0x96, 0x43, - 0xE7, 0xA5, 0x9D, 0x43, 0xE7, 0xA5, 0x9E, 0x43, - 0xE7, 0xA5, 0xA5, 0x43, 0xE7, 0xA5, 0xBF, 0x43, - 0xE7, 0xA6, 0x81, 0x43, 0xE7, 0xA6, 0x8D, 0x43, - 0xE7, 0xA6, 0x8E, 0x43, 0xE7, 0xA6, 0x8F, 0x43, - // Bytes 1080 - 10bf - 0xE7, 0xA6, 0xAE, 0x43, 0xE7, 0xA6, 0xB8, 0x43, - 0xE7, 0xA6, 0xBE, 0x43, 0xE7, 0xA7, 0x8A, 0x43, - 0xE7, 0xA7, 0x98, 0x43, 0xE7, 0xA7, 0xAB, 0x43, - 0xE7, 0xA8, 0x9C, 0x43, 0xE7, 0xA9, 0x80, 0x43, - 0xE7, 0xA9, 0x8A, 0x43, 0xE7, 0xA9, 0x8F, 0x43, - 0xE7, 0xA9, 0xB4, 0x43, 0xE7, 0xA9, 0xBA, 0x43, - 0xE7, 0xAA, 0x81, 0x43, 0xE7, 0xAA, 0xB1, 0x43, - 0xE7, 0xAB, 0x8B, 0x43, 0xE7, 0xAB, 0xAE, 0x43, - // Bytes 10c0 - 10ff - 0xE7, 0xAB, 0xB9, 0x43, 0xE7, 0xAC, 0xA0, 0x43, - 0xE7, 0xAE, 0x8F, 0x43, 0xE7, 0xAF, 0x80, 0x43, - 0xE7, 0xAF, 0x86, 0x43, 0xE7, 0xAF, 0x89, 0x43, - 0xE7, 0xB0, 0xBE, 0x43, 0xE7, 0xB1, 0xA0, 0x43, - 0xE7, 0xB1, 0xB3, 0x43, 0xE7, 0xB1, 0xBB, 0x43, - 0xE7, 0xB2, 0x92, 0x43, 0xE7, 0xB2, 0xBE, 0x43, - 0xE7, 0xB3, 0x92, 0x43, 0xE7, 0xB3, 0x96, 0x43, - 0xE7, 0xB3, 0xA3, 0x43, 0xE7, 0xB3, 0xA7, 0x43, - // Bytes 1100 - 113f - 0xE7, 0xB3, 0xA8, 0x43, 0xE7, 0xB3, 0xB8, 0x43, - 0xE7, 0xB4, 0x80, 0x43, 0xE7, 0xB4, 0x90, 0x43, - 0xE7, 0xB4, 0xA2, 0x43, 0xE7, 0xB4, 0xAF, 0x43, - 0xE7, 0xB5, 0x82, 0x43, 0xE7, 0xB5, 0x9B, 0x43, - 0xE7, 0xB5, 0xA3, 0x43, 0xE7, 0xB6, 0xA0, 0x43, - 0xE7, 0xB6, 0xBE, 0x43, 0xE7, 0xB7, 0x87, 0x43, - 0xE7, 0xB7, 0xB4, 0x43, 0xE7, 0xB8, 0x82, 0x43, - 0xE7, 0xB8, 0x89, 0x43, 0xE7, 0xB8, 0xB7, 0x43, - // Bytes 1140 - 117f - 0xE7, 0xB9, 0x81, 0x43, 0xE7, 0xB9, 0x85, 0x43, - 0xE7, 0xBC, 0xB6, 0x43, 0xE7, 0xBC, 0xBE, 0x43, - 0xE7, 0xBD, 0x91, 0x43, 0xE7, 0xBD, 0xB2, 0x43, - 0xE7, 0xBD, 0xB9, 0x43, 0xE7, 0xBD, 0xBA, 0x43, - 0xE7, 0xBE, 0x85, 0x43, 0xE7, 0xBE, 0x8A, 0x43, - 0xE7, 0xBE, 0x95, 0x43, 0xE7, 0xBE, 0x9A, 0x43, - 0xE7, 0xBE, 0xBD, 0x43, 0xE7, 0xBF, 0xBA, 0x43, - 0xE8, 0x80, 0x81, 0x43, 0xE8, 0x80, 0x85, 0x43, - // Bytes 1180 - 11bf - 0xE8, 0x80, 0x8C, 0x43, 0xE8, 0x80, 0x92, 0x43, - 0xE8, 0x80, 0xB3, 0x43, 0xE8, 0x81, 0x86, 0x43, - 0xE8, 0x81, 0xA0, 0x43, 0xE8, 0x81, 0xAF, 0x43, - 0xE8, 0x81, 0xB0, 0x43, 0xE8, 0x81, 0xBE, 0x43, - 0xE8, 0x81, 0xBF, 0x43, 0xE8, 0x82, 0x89, 0x43, - 0xE8, 0x82, 0x8B, 0x43, 0xE8, 0x82, 0xAD, 0x43, - 0xE8, 0x82, 0xB2, 0x43, 0xE8, 0x84, 0x83, 0x43, - 0xE8, 0x84, 0xBE, 0x43, 0xE8, 0x87, 0x98, 0x43, - // Bytes 11c0 - 11ff - 0xE8, 0x87, 0xA3, 0x43, 0xE8, 0x87, 0xA8, 0x43, - 0xE8, 0x87, 0xAA, 0x43, 0xE8, 0x87, 0xAD, 0x43, - 0xE8, 0x87, 0xB3, 0x43, 0xE8, 0x87, 0xBC, 0x43, - 0xE8, 0x88, 0x81, 0x43, 0xE8, 0x88, 0x84, 0x43, - 0xE8, 0x88, 0x8C, 0x43, 0xE8, 0x88, 0x98, 0x43, - 0xE8, 0x88, 0x9B, 0x43, 0xE8, 0x88, 0x9F, 0x43, - 0xE8, 0x89, 0xAE, 0x43, 0xE8, 0x89, 0xAF, 0x43, - 0xE8, 0x89, 0xB2, 0x43, 0xE8, 0x89, 0xB8, 0x43, - // Bytes 1200 - 123f - 0xE8, 0x89, 0xB9, 0x43, 0xE8, 0x8A, 0x8B, 0x43, - 0xE8, 0x8A, 0x91, 0x43, 0xE8, 0x8A, 0x9D, 0x43, - 0xE8, 0x8A, 0xB1, 0x43, 0xE8, 0x8A, 0xB3, 0x43, - 0xE8, 0x8A, 0xBD, 0x43, 0xE8, 0x8B, 0xA5, 0x43, - 0xE8, 0x8B, 0xA6, 0x43, 0xE8, 0x8C, 0x9D, 0x43, - 0xE8, 0x8C, 0xA3, 0x43, 0xE8, 0x8C, 0xB6, 0x43, - 0xE8, 0x8D, 0x92, 0x43, 0xE8, 0x8D, 0x93, 0x43, - 0xE8, 0x8D, 0xA3, 0x43, 0xE8, 0x8E, 0xAD, 0x43, - // Bytes 1240 - 127f - 0xE8, 0x8E, 0xBD, 0x43, 0xE8, 0x8F, 0x89, 0x43, - 0xE8, 0x8F, 0x8A, 0x43, 0xE8, 0x8F, 0x8C, 0x43, - 0xE8, 0x8F, 0x9C, 0x43, 0xE8, 0x8F, 0xA7, 0x43, - 0xE8, 0x8F, 0xAF, 0x43, 0xE8, 0x8F, 0xB1, 0x43, - 0xE8, 0x90, 0xBD, 0x43, 0xE8, 0x91, 0x89, 0x43, - 0xE8, 0x91, 0x97, 0x43, 0xE8, 0x93, 0xAE, 0x43, - 0xE8, 0x93, 0xB1, 0x43, 0xE8, 0x93, 0xB3, 0x43, - 0xE8, 0x93, 0xBC, 0x43, 0xE8, 0x94, 0x96, 0x43, - // Bytes 1280 - 12bf - 0xE8, 0x95, 0xA4, 0x43, 0xE8, 0x97, 0x8D, 0x43, - 0xE8, 0x97, 0xBA, 0x43, 0xE8, 0x98, 0x86, 0x43, - 0xE8, 0x98, 0x92, 0x43, 0xE8, 0x98, 0xAD, 0x43, - 0xE8, 0x98, 0xBF, 0x43, 0xE8, 0x99, 0x8D, 0x43, - 0xE8, 0x99, 0x90, 0x43, 0xE8, 0x99, 0x9C, 0x43, - 0xE8, 0x99, 0xA7, 0x43, 0xE8, 0x99, 0xA9, 0x43, - 0xE8, 0x99, 0xAB, 0x43, 0xE8, 0x9A, 0x88, 0x43, - 0xE8, 0x9A, 0xA9, 0x43, 0xE8, 0x9B, 0xA2, 0x43, - // Bytes 12c0 - 12ff - 0xE8, 0x9C, 0x8E, 0x43, 0xE8, 0x9C, 0xA8, 0x43, - 0xE8, 0x9D, 0xAB, 0x43, 0xE8, 0x9D, 0xB9, 0x43, - 0xE8, 0x9E, 0x86, 0x43, 0xE8, 0x9E, 0xBA, 0x43, - 0xE8, 0x9F, 0xA1, 0x43, 0xE8, 0xA0, 0x81, 0x43, - 0xE8, 0xA0, 0x9F, 0x43, 0xE8, 0xA1, 0x80, 0x43, - 0xE8, 0xA1, 0x8C, 0x43, 0xE8, 0xA1, 0xA0, 0x43, - 0xE8, 0xA1, 0xA3, 0x43, 0xE8, 0xA3, 0x82, 0x43, - 0xE8, 0xA3, 0x8F, 0x43, 0xE8, 0xA3, 0x97, 0x43, - // Bytes 1300 - 133f - 0xE8, 0xA3, 0x9E, 0x43, 0xE8, 0xA3, 0xA1, 0x43, - 0xE8, 0xA3, 0xB8, 0x43, 0xE8, 0xA3, 0xBA, 0x43, - 0xE8, 0xA4, 0x90, 0x43, 0xE8, 0xA5, 0x81, 0x43, - 0xE8, 0xA5, 0xA4, 0x43, 0xE8, 0xA5, 0xBE, 0x43, - 0xE8, 0xA6, 0x86, 0x43, 0xE8, 0xA6, 0x8B, 0x43, - 0xE8, 0xA6, 0x96, 0x43, 0xE8, 0xA7, 0x92, 0x43, - 0xE8, 0xA7, 0xA3, 0x43, 0xE8, 0xA8, 0x80, 0x43, - 0xE8, 0xAA, 0xA0, 0x43, 0xE8, 0xAA, 0xAA, 0x43, - // Bytes 1340 - 137f - 0xE8, 0xAA, 0xBF, 0x43, 0xE8, 0xAB, 0x8B, 0x43, - 0xE8, 0xAB, 0x92, 0x43, 0xE8, 0xAB, 0x96, 0x43, - 0xE8, 0xAB, 0xAD, 0x43, 0xE8, 0xAB, 0xB8, 0x43, - 0xE8, 0xAB, 0xBE, 0x43, 0xE8, 0xAC, 0x81, 0x43, - 0xE8, 0xAC, 0xB9, 0x43, 0xE8, 0xAD, 0x98, 0x43, - 0xE8, 0xAE, 0x80, 0x43, 0xE8, 0xAE, 0x8A, 0x43, - 0xE8, 0xB0, 0xB7, 0x43, 0xE8, 0xB1, 0x86, 0x43, - 0xE8, 0xB1, 0x88, 0x43, 0xE8, 0xB1, 0x95, 0x43, - // Bytes 1380 - 13bf - 0xE8, 0xB1, 0xB8, 0x43, 0xE8, 0xB2, 0x9D, 0x43, - 0xE8, 0xB2, 0xA1, 0x43, 0xE8, 0xB2, 0xA9, 0x43, - 0xE8, 0xB2, 0xAB, 0x43, 0xE8, 0xB3, 0x81, 0x43, - 0xE8, 0xB3, 0x82, 0x43, 0xE8, 0xB3, 0x87, 0x43, - 0xE8, 0xB3, 0x88, 0x43, 0xE8, 0xB3, 0x93, 0x43, - 0xE8, 0xB4, 0x88, 0x43, 0xE8, 0xB4, 0x9B, 0x43, - 0xE8, 0xB5, 0xA4, 0x43, 0xE8, 0xB5, 0xB0, 0x43, - 0xE8, 0xB5, 0xB7, 0x43, 0xE8, 0xB6, 0xB3, 0x43, - // Bytes 13c0 - 13ff - 0xE8, 0xB6, 0xBC, 0x43, 0xE8, 0xB7, 0x8B, 0x43, - 0xE8, 0xB7, 0xAF, 0x43, 0xE8, 0xB7, 0xB0, 0x43, - 0xE8, 0xBA, 0xAB, 0x43, 0xE8, 0xBB, 0x8A, 0x43, - 0xE8, 0xBB, 0x94, 0x43, 0xE8, 0xBC, 0xA6, 0x43, - 0xE8, 0xBC, 0xAA, 0x43, 0xE8, 0xBC, 0xB8, 0x43, - 0xE8, 0xBC, 0xBB, 0x43, 0xE8, 0xBD, 0xA2, 0x43, - 0xE8, 0xBE, 0x9B, 0x43, 0xE8, 0xBE, 0x9E, 0x43, - 0xE8, 0xBE, 0xB0, 0x43, 0xE8, 0xBE, 0xB5, 0x43, - // Bytes 1400 - 143f - 0xE8, 0xBE, 0xB6, 0x43, 0xE9, 0x80, 0xA3, 0x43, - 0xE9, 0x80, 0xB8, 0x43, 0xE9, 0x81, 0x8A, 0x43, - 0xE9, 0x81, 0xA9, 0x43, 0xE9, 0x81, 0xB2, 0x43, - 0xE9, 0x81, 0xBC, 0x43, 0xE9, 0x82, 0x8F, 0x43, - 0xE9, 0x82, 0x91, 0x43, 0xE9, 0x82, 0x94, 0x43, - 0xE9, 0x83, 0x8E, 0x43, 0xE9, 0x83, 0x9E, 0x43, - 0xE9, 0x83, 0xB1, 0x43, 0xE9, 0x83, 0xBD, 0x43, - 0xE9, 0x84, 0x91, 0x43, 0xE9, 0x84, 0x9B, 0x43, - // Bytes 1440 - 147f - 0xE9, 0x85, 0x89, 0x43, 0xE9, 0x85, 0x8D, 0x43, - 0xE9, 0x85, 0xAA, 0x43, 0xE9, 0x86, 0x99, 0x43, - 0xE9, 0x86, 0xB4, 0x43, 0xE9, 0x87, 0x86, 0x43, - 0xE9, 0x87, 0x8C, 0x43, 0xE9, 0x87, 0x8F, 0x43, - 0xE9, 0x87, 0x91, 0x43, 0xE9, 0x88, 0xB4, 0x43, - 0xE9, 0x88, 0xB8, 0x43, 0xE9, 0x89, 0xB6, 0x43, - 0xE9, 0x89, 0xBC, 0x43, 0xE9, 0x8B, 0x97, 0x43, - 0xE9, 0x8B, 0x98, 0x43, 0xE9, 0x8C, 0x84, 0x43, - // Bytes 1480 - 14bf - 0xE9, 0x8D, 0x8A, 0x43, 0xE9, 0x8F, 0xB9, 0x43, - 0xE9, 0x90, 0x95, 0x43, 0xE9, 0x95, 0xB7, 0x43, - 0xE9, 0x96, 0x80, 0x43, 0xE9, 0x96, 0x8B, 0x43, - 0xE9, 0x96, 0xAD, 0x43, 0xE9, 0x96, 0xB7, 0x43, - 0xE9, 0x98, 0x9C, 0x43, 0xE9, 0x98, 0xAE, 0x43, - 0xE9, 0x99, 0x8B, 0x43, 0xE9, 0x99, 0x8D, 0x43, - 0xE9, 0x99, 0xB5, 0x43, 0xE9, 0x99, 0xB8, 0x43, - 0xE9, 0x99, 0xBC, 0x43, 0xE9, 0x9A, 0x86, 0x43, - // Bytes 14c0 - 14ff - 0xE9, 0x9A, 0xA3, 0x43, 0xE9, 0x9A, 0xB6, 0x43, - 0xE9, 0x9A, 0xB7, 0x43, 0xE9, 0x9A, 0xB8, 0x43, - 0xE9, 0x9A, 0xB9, 0x43, 0xE9, 0x9B, 0x83, 0x43, - 0xE9, 0x9B, 0xA2, 0x43, 0xE9, 0x9B, 0xA3, 0x43, - 0xE9, 0x9B, 0xA8, 0x43, 0xE9, 0x9B, 0xB6, 0x43, - 0xE9, 0x9B, 0xB7, 0x43, 0xE9, 0x9C, 0xA3, 0x43, - 0xE9, 0x9C, 0xB2, 0x43, 0xE9, 0x9D, 0x88, 0x43, - 0xE9, 0x9D, 0x91, 0x43, 0xE9, 0x9D, 0x96, 0x43, - // Bytes 1500 - 153f - 0xE9, 0x9D, 0x9E, 0x43, 0xE9, 0x9D, 0xA2, 0x43, - 0xE9, 0x9D, 0xA9, 0x43, 0xE9, 0x9F, 0x8B, 0x43, - 0xE9, 0x9F, 0x9B, 0x43, 0xE9, 0x9F, 0xA0, 0x43, - 0xE9, 0x9F, 0xAD, 0x43, 0xE9, 0x9F, 0xB3, 0x43, - 0xE9, 0x9F, 0xBF, 0x43, 0xE9, 0xA0, 0x81, 0x43, - 0xE9, 0xA0, 0x85, 0x43, 0xE9, 0xA0, 0x8B, 0x43, - 0xE9, 0xA0, 0x98, 0x43, 0xE9, 0xA0, 0xA9, 0x43, - 0xE9, 0xA0, 0xBB, 0x43, 0xE9, 0xA1, 0x9E, 0x43, - // Bytes 1540 - 157f - 0xE9, 0xA2, 0xA8, 0x43, 0xE9, 0xA3, 0x9B, 0x43, - 0xE9, 0xA3, 0x9F, 0x43, 0xE9, 0xA3, 0xA2, 0x43, - 0xE9, 0xA3, 0xAF, 0x43, 0xE9, 0xA3, 0xBC, 0x43, - 0xE9, 0xA4, 0xA8, 0x43, 0xE9, 0xA4, 0xA9, 0x43, - 0xE9, 0xA6, 0x96, 0x43, 0xE9, 0xA6, 0x99, 0x43, - 0xE9, 0xA6, 0xA7, 0x43, 0xE9, 0xA6, 0xAC, 0x43, - 0xE9, 0xA7, 0x82, 0x43, 0xE9, 0xA7, 0xB1, 0x43, - 0xE9, 0xA7, 0xBE, 0x43, 0xE9, 0xA9, 0xAA, 0x43, - // Bytes 1580 - 15bf - 0xE9, 0xAA, 0xA8, 0x43, 0xE9, 0xAB, 0x98, 0x43, - 0xE9, 0xAB, 0x9F, 0x43, 0xE9, 0xAC, 0x92, 0x43, - 0xE9, 0xAC, 0xA5, 0x43, 0xE9, 0xAC, 0xAF, 0x43, - 0xE9, 0xAC, 0xB2, 0x43, 0xE9, 0xAC, 0xBC, 0x43, - 0xE9, 0xAD, 0x9A, 0x43, 0xE9, 0xAD, 0xAF, 0x43, - 0xE9, 0xB1, 0x80, 0x43, 0xE9, 0xB1, 0x97, 0x43, - 0xE9, 0xB3, 0xA5, 0x43, 0xE9, 0xB3, 0xBD, 0x43, - 0xE9, 0xB5, 0xA7, 0x43, 0xE9, 0xB6, 0xB4, 0x43, - // Bytes 15c0 - 15ff - 0xE9, 0xB7, 0xBA, 0x43, 0xE9, 0xB8, 0x9E, 0x43, - 0xE9, 0xB9, 0xB5, 0x43, 0xE9, 0xB9, 0xBF, 0x43, - 0xE9, 0xBA, 0x97, 0x43, 0xE9, 0xBA, 0x9F, 0x43, - 0xE9, 0xBA, 0xA5, 0x43, 0xE9, 0xBA, 0xBB, 0x43, - 0xE9, 0xBB, 0x83, 0x43, 0xE9, 0xBB, 0x8D, 0x43, - 0xE9, 0xBB, 0x8E, 0x43, 0xE9, 0xBB, 0x91, 0x43, - 0xE9, 0xBB, 0xB9, 0x43, 0xE9, 0xBB, 0xBD, 0x43, - 0xE9, 0xBB, 0xBE, 0x43, 0xE9, 0xBC, 0x85, 0x43, - // Bytes 1600 - 163f - 0xE9, 0xBC, 0x8E, 0x43, 0xE9, 0xBC, 0x8F, 0x43, - 0xE9, 0xBC, 0x93, 0x43, 0xE9, 0xBC, 0x96, 0x43, - 0xE9, 0xBC, 0xA0, 0x43, 0xE9, 0xBC, 0xBB, 0x43, - 0xE9, 0xBD, 0x83, 0x43, 0xE9, 0xBD, 0x8A, 0x43, - 0xE9, 0xBD, 0x92, 0x43, 0xE9, 0xBE, 0x8D, 0x43, - 0xE9, 0xBE, 0x8E, 0x43, 0xE9, 0xBE, 0x9C, 0x43, - 0xE9, 0xBE, 0x9F, 0x43, 0xE9, 0xBE, 0xA0, 0x43, - 0xEA, 0x9C, 0xA7, 0x43, 0xEA, 0x9D, 0xAF, 0x43, - // Bytes 1640 - 167f - 0xEA, 0xAC, 0xB7, 0x43, 0xEA, 0xAD, 0x92, 0x44, - 0xF0, 0xA0, 0x84, 0xA2, 0x44, 0xF0, 0xA0, 0x94, - 0x9C, 0x44, 0xF0, 0xA0, 0x94, 0xA5, 0x44, 0xF0, - 0xA0, 0x95, 0x8B, 0x44, 0xF0, 0xA0, 0x98, 0xBA, - 0x44, 0xF0, 0xA0, 0xA0, 0x84, 0x44, 0xF0, 0xA0, - 0xA3, 0x9E, 0x44, 0xF0, 0xA0, 0xA8, 0xAC, 0x44, - 0xF0, 0xA0, 0xAD, 0xA3, 0x44, 0xF0, 0xA1, 0x93, - 0xA4, 0x44, 0xF0, 0xA1, 0x9A, 0xA8, 0x44, 0xF0, - // Bytes 1680 - 16bf - 0xA1, 0x9B, 0xAA, 0x44, 0xF0, 0xA1, 0xA7, 0x88, - 0x44, 0xF0, 0xA1, 0xAC, 0x98, 0x44, 0xF0, 0xA1, - 0xB4, 0x8B, 0x44, 0xF0, 0xA1, 0xB7, 0xA4, 0x44, - 0xF0, 0xA1, 0xB7, 0xA6, 0x44, 0xF0, 0xA2, 0x86, - 0x83, 0x44, 0xF0, 0xA2, 0x86, 0x9F, 0x44, 0xF0, - 0xA2, 0x8C, 0xB1, 0x44, 0xF0, 0xA2, 0x9B, 0x94, - 0x44, 0xF0, 0xA2, 0xA1, 0x84, 0x44, 0xF0, 0xA2, - 0xA1, 0x8A, 0x44, 0xF0, 0xA2, 0xAC, 0x8C, 0x44, - // Bytes 16c0 - 16ff - 0xF0, 0xA2, 0xAF, 0xB1, 0x44, 0xF0, 0xA3, 0x80, - 0x8A, 0x44, 0xF0, 0xA3, 0x8A, 0xB8, 0x44, 0xF0, - 0xA3, 0x8D, 0x9F, 0x44, 0xF0, 0xA3, 0x8E, 0x93, - 0x44, 0xF0, 0xA3, 0x8E, 0x9C, 0x44, 0xF0, 0xA3, - 0x8F, 0x83, 0x44, 0xF0, 0xA3, 0x8F, 0x95, 0x44, - 0xF0, 0xA3, 0x91, 0xAD, 0x44, 0xF0, 0xA3, 0x9A, - 0xA3, 0x44, 0xF0, 0xA3, 0xA2, 0xA7, 0x44, 0xF0, - 0xA3, 0xAA, 0x8D, 0x44, 0xF0, 0xA3, 0xAB, 0xBA, - // Bytes 1700 - 173f - 0x44, 0xF0, 0xA3, 0xB2, 0xBC, 0x44, 0xF0, 0xA3, - 0xB4, 0x9E, 0x44, 0xF0, 0xA3, 0xBB, 0x91, 0x44, - 0xF0, 0xA3, 0xBD, 0x9E, 0x44, 0xF0, 0xA3, 0xBE, - 0x8E, 0x44, 0xF0, 0xA4, 0x89, 0xA3, 0x44, 0xF0, - 0xA4, 0x8B, 0xAE, 0x44, 0xF0, 0xA4, 0x8E, 0xAB, - 0x44, 0xF0, 0xA4, 0x98, 0x88, 0x44, 0xF0, 0xA4, - 0x9C, 0xB5, 0x44, 0xF0, 0xA4, 0xA0, 0x94, 0x44, - 0xF0, 0xA4, 0xB0, 0xB6, 0x44, 0xF0, 0xA4, 0xB2, - // Bytes 1740 - 177f - 0x92, 0x44, 0xF0, 0xA4, 0xBE, 0xA1, 0x44, 0xF0, - 0xA4, 0xBE, 0xB8, 0x44, 0xF0, 0xA5, 0x81, 0x84, - 0x44, 0xF0, 0xA5, 0x83, 0xB2, 0x44, 0xF0, 0xA5, - 0x83, 0xB3, 0x44, 0xF0, 0xA5, 0x84, 0x99, 0x44, - 0xF0, 0xA5, 0x84, 0xB3, 0x44, 0xF0, 0xA5, 0x89, - 0x89, 0x44, 0xF0, 0xA5, 0x90, 0x9D, 0x44, 0xF0, - 0xA5, 0x98, 0xA6, 0x44, 0xF0, 0xA5, 0x9A, 0x9A, - 0x44, 0xF0, 0xA5, 0x9B, 0x85, 0x44, 0xF0, 0xA5, - // Bytes 1780 - 17bf - 0xA5, 0xBC, 0x44, 0xF0, 0xA5, 0xAA, 0xA7, 0x44, - 0xF0, 0xA5, 0xAE, 0xAB, 0x44, 0xF0, 0xA5, 0xB2, - 0x80, 0x44, 0xF0, 0xA5, 0xB3, 0x90, 0x44, 0xF0, - 0xA5, 0xBE, 0x86, 0x44, 0xF0, 0xA6, 0x87, 0x9A, - 0x44, 0xF0, 0xA6, 0x88, 0xA8, 0x44, 0xF0, 0xA6, - 0x89, 0x87, 0x44, 0xF0, 0xA6, 0x8B, 0x99, 0x44, - 0xF0, 0xA6, 0x8C, 0xBE, 0x44, 0xF0, 0xA6, 0x93, - 0x9A, 0x44, 0xF0, 0xA6, 0x94, 0xA3, 0x44, 0xF0, - // Bytes 17c0 - 17ff - 0xA6, 0x96, 0xA8, 0x44, 0xF0, 0xA6, 0x9E, 0xA7, - 0x44, 0xF0, 0xA6, 0x9E, 0xB5, 0x44, 0xF0, 0xA6, - 0xAC, 0xBC, 0x44, 0xF0, 0xA6, 0xB0, 0xB6, 0x44, - 0xF0, 0xA6, 0xB3, 0x95, 0x44, 0xF0, 0xA6, 0xB5, - 0xAB, 0x44, 0xF0, 0xA6, 0xBC, 0xAC, 0x44, 0xF0, - 0xA6, 0xBE, 0xB1, 0x44, 0xF0, 0xA7, 0x83, 0x92, - 0x44, 0xF0, 0xA7, 0x8F, 0x8A, 0x44, 0xF0, 0xA7, - 0x99, 0xA7, 0x44, 0xF0, 0xA7, 0xA2, 0xAE, 0x44, - // Bytes 1800 - 183f - 0xF0, 0xA7, 0xA5, 0xA6, 0x44, 0xF0, 0xA7, 0xB2, - 0xA8, 0x44, 0xF0, 0xA7, 0xBB, 0x93, 0x44, 0xF0, - 0xA7, 0xBC, 0xAF, 0x44, 0xF0, 0xA8, 0x97, 0x92, - 0x44, 0xF0, 0xA8, 0x97, 0xAD, 0x44, 0xF0, 0xA8, - 0x9C, 0xAE, 0x44, 0xF0, 0xA8, 0xAF, 0xBA, 0x44, - 0xF0, 0xA8, 0xB5, 0xB7, 0x44, 0xF0, 0xA9, 0x85, - 0x85, 0x44, 0xF0, 0xA9, 0x87, 0x9F, 0x44, 0xF0, - 0xA9, 0x88, 0x9A, 0x44, 0xF0, 0xA9, 0x90, 0x8A, - // Bytes 1840 - 187f - 0x44, 0xF0, 0xA9, 0x92, 0x96, 0x44, 0xF0, 0xA9, - 0x96, 0xB6, 0x44, 0xF0, 0xA9, 0xAC, 0xB0, 0x44, - 0xF0, 0xAA, 0x83, 0x8E, 0x44, 0xF0, 0xAA, 0x84, - 0x85, 0x44, 0xF0, 0xAA, 0x88, 0x8E, 0x44, 0xF0, - 0xAA, 0x8A, 0x91, 0x44, 0xF0, 0xAA, 0x8E, 0x92, - 0x44, 0xF0, 0xAA, 0x98, 0x80, 0x42, 0x21, 0x21, - 0x42, 0x21, 0x3F, 0x42, 0x2E, 0x2E, 0x42, 0x30, - 0x2C, 0x42, 0x30, 0x2E, 0x42, 0x31, 0x2C, 0x42, - // Bytes 1880 - 18bf - 0x31, 0x2E, 0x42, 0x31, 0x30, 0x42, 0x31, 0x31, - 0x42, 0x31, 0x32, 0x42, 0x31, 0x33, 0x42, 0x31, - 0x34, 0x42, 0x31, 0x35, 0x42, 0x31, 0x36, 0x42, - 0x31, 0x37, 0x42, 0x31, 0x38, 0x42, 0x31, 0x39, - 0x42, 0x32, 0x2C, 0x42, 0x32, 0x2E, 0x42, 0x32, - 0x30, 0x42, 0x32, 0x31, 0x42, 0x32, 0x32, 0x42, - 0x32, 0x33, 0x42, 0x32, 0x34, 0x42, 0x32, 0x35, - 0x42, 0x32, 0x36, 0x42, 0x32, 0x37, 0x42, 0x32, - // Bytes 18c0 - 18ff - 0x38, 0x42, 0x32, 0x39, 0x42, 0x33, 0x2C, 0x42, - 0x33, 0x2E, 0x42, 0x33, 0x30, 0x42, 0x33, 0x31, - 0x42, 0x33, 0x32, 0x42, 0x33, 0x33, 0x42, 0x33, - 0x34, 0x42, 0x33, 0x35, 0x42, 0x33, 0x36, 0x42, - 0x33, 0x37, 0x42, 0x33, 0x38, 0x42, 0x33, 0x39, - 0x42, 0x34, 0x2C, 0x42, 0x34, 0x2E, 0x42, 0x34, - 0x30, 0x42, 0x34, 0x31, 0x42, 0x34, 0x32, 0x42, - 0x34, 0x33, 0x42, 0x34, 0x34, 0x42, 0x34, 0x35, - // Bytes 1900 - 193f - 0x42, 0x34, 0x36, 0x42, 0x34, 0x37, 0x42, 0x34, - 0x38, 0x42, 0x34, 0x39, 0x42, 0x35, 0x2C, 0x42, - 0x35, 0x2E, 0x42, 0x35, 0x30, 0x42, 0x36, 0x2C, - 0x42, 0x36, 0x2E, 0x42, 0x37, 0x2C, 0x42, 0x37, - 0x2E, 0x42, 0x38, 0x2C, 0x42, 0x38, 0x2E, 0x42, - 0x39, 0x2C, 0x42, 0x39, 0x2E, 0x42, 0x3D, 0x3D, - 0x42, 0x3F, 0x21, 0x42, 0x3F, 0x3F, 0x42, 0x41, - 0x55, 0x42, 0x42, 0x71, 0x42, 0x43, 0x44, 0x42, - // Bytes 1940 - 197f - 0x44, 0x4A, 0x42, 0x44, 0x5A, 0x42, 0x44, 0x7A, - 0x42, 0x47, 0x42, 0x42, 0x47, 0x79, 0x42, 0x48, - 0x50, 0x42, 0x48, 0x56, 0x42, 0x48, 0x67, 0x42, - 0x48, 0x7A, 0x42, 0x49, 0x49, 0x42, 0x49, 0x4A, - 0x42, 0x49, 0x55, 0x42, 0x49, 0x56, 0x42, 0x49, - 0x58, 0x42, 0x4B, 0x42, 0x42, 0x4B, 0x4B, 0x42, - 0x4B, 0x4D, 0x42, 0x4C, 0x4A, 0x42, 0x4C, 0x6A, - 0x42, 0x4D, 0x42, 0x42, 0x4D, 0x43, 0x42, 0x4D, - // Bytes 1980 - 19bf - 0x44, 0x42, 0x4D, 0x56, 0x42, 0x4D, 0x57, 0x42, - 0x4E, 0x4A, 0x42, 0x4E, 0x6A, 0x42, 0x4E, 0x6F, - 0x42, 0x50, 0x48, 0x42, 0x50, 0x52, 0x42, 0x50, - 0x61, 0x42, 0x52, 0x73, 0x42, 0x53, 0x44, 0x42, - 0x53, 0x4D, 0x42, 0x53, 0x53, 0x42, 0x53, 0x76, - 0x42, 0x54, 0x4D, 0x42, 0x56, 0x49, 0x42, 0x57, - 0x43, 0x42, 0x57, 0x5A, 0x42, 0x57, 0x62, 0x42, - 0x58, 0x49, 0x42, 0x63, 0x63, 0x42, 0x63, 0x64, - // Bytes 19c0 - 19ff - 0x42, 0x63, 0x6D, 0x42, 0x64, 0x42, 0x42, 0x64, - 0x61, 0x42, 0x64, 0x6C, 0x42, 0x64, 0x6D, 0x42, - 0x64, 0x7A, 0x42, 0x65, 0x56, 0x42, 0x66, 0x66, - 0x42, 0x66, 0x69, 0x42, 0x66, 0x6C, 0x42, 0x66, - 0x6D, 0x42, 0x68, 0x61, 0x42, 0x69, 0x69, 0x42, - 0x69, 0x6A, 0x42, 0x69, 0x6E, 0x42, 0x69, 0x76, - 0x42, 0x69, 0x78, 0x42, 0x6B, 0x41, 0x42, 0x6B, - 0x56, 0x42, 0x6B, 0x57, 0x42, 0x6B, 0x67, 0x42, - // Bytes 1a00 - 1a3f - 0x6B, 0x6C, 0x42, 0x6B, 0x6D, 0x42, 0x6B, 0x74, - 0x42, 0x6C, 0x6A, 0x42, 0x6C, 0x6D, 0x42, 0x6C, - 0x6E, 0x42, 0x6C, 0x78, 0x42, 0x6D, 0x32, 0x42, - 0x6D, 0x33, 0x42, 0x6D, 0x41, 0x42, 0x6D, 0x56, - 0x42, 0x6D, 0x57, 0x42, 0x6D, 0x62, 0x42, 0x6D, - 0x67, 0x42, 0x6D, 0x6C, 0x42, 0x6D, 0x6D, 0x42, - 0x6D, 0x73, 0x42, 0x6E, 0x41, 0x42, 0x6E, 0x46, - 0x42, 0x6E, 0x56, 0x42, 0x6E, 0x57, 0x42, 0x6E, - // Bytes 1a40 - 1a7f - 0x6A, 0x42, 0x6E, 0x6D, 0x42, 0x6E, 0x73, 0x42, - 0x6F, 0x56, 0x42, 0x70, 0x41, 0x42, 0x70, 0x46, - 0x42, 0x70, 0x56, 0x42, 0x70, 0x57, 0x42, 0x70, - 0x63, 0x42, 0x70, 0x73, 0x42, 0x73, 0x72, 0x42, - 0x73, 0x74, 0x42, 0x76, 0x69, 0x42, 0x78, 0x69, - 0x43, 0x28, 0x31, 0x29, 0x43, 0x28, 0x32, 0x29, - 0x43, 0x28, 0x33, 0x29, 0x43, 0x28, 0x34, 0x29, - 0x43, 0x28, 0x35, 0x29, 0x43, 0x28, 0x36, 0x29, - // Bytes 1a80 - 1abf - 0x43, 0x28, 0x37, 0x29, 0x43, 0x28, 0x38, 0x29, - 0x43, 0x28, 0x39, 0x29, 0x43, 0x28, 0x41, 0x29, - 0x43, 0x28, 0x42, 0x29, 0x43, 0x28, 0x43, 0x29, - 0x43, 0x28, 0x44, 0x29, 0x43, 0x28, 0x45, 0x29, - 0x43, 0x28, 0x46, 0x29, 0x43, 0x28, 0x47, 0x29, - 0x43, 0x28, 0x48, 0x29, 0x43, 0x28, 0x49, 0x29, - 0x43, 0x28, 0x4A, 0x29, 0x43, 0x28, 0x4B, 0x29, - 0x43, 0x28, 0x4C, 0x29, 0x43, 0x28, 0x4D, 0x29, - // Bytes 1ac0 - 1aff - 0x43, 0x28, 0x4E, 0x29, 0x43, 0x28, 0x4F, 0x29, - 0x43, 0x28, 0x50, 0x29, 0x43, 0x28, 0x51, 0x29, - 0x43, 0x28, 0x52, 0x29, 0x43, 0x28, 0x53, 0x29, - 0x43, 0x28, 0x54, 0x29, 0x43, 0x28, 0x55, 0x29, - 0x43, 0x28, 0x56, 0x29, 0x43, 0x28, 0x57, 0x29, - 0x43, 0x28, 0x58, 0x29, 0x43, 0x28, 0x59, 0x29, - 0x43, 0x28, 0x5A, 0x29, 0x43, 0x28, 0x61, 0x29, - 0x43, 0x28, 0x62, 0x29, 0x43, 0x28, 0x63, 0x29, - // Bytes 1b00 - 1b3f - 0x43, 0x28, 0x64, 0x29, 0x43, 0x28, 0x65, 0x29, - 0x43, 0x28, 0x66, 0x29, 0x43, 0x28, 0x67, 0x29, - 0x43, 0x28, 0x68, 0x29, 0x43, 0x28, 0x69, 0x29, - 0x43, 0x28, 0x6A, 0x29, 0x43, 0x28, 0x6B, 0x29, - 0x43, 0x28, 0x6C, 0x29, 0x43, 0x28, 0x6D, 0x29, - 0x43, 0x28, 0x6E, 0x29, 0x43, 0x28, 0x6F, 0x29, - 0x43, 0x28, 0x70, 0x29, 0x43, 0x28, 0x71, 0x29, - 0x43, 0x28, 0x72, 0x29, 0x43, 0x28, 0x73, 0x29, - // Bytes 1b40 - 1b7f - 0x43, 0x28, 0x74, 0x29, 0x43, 0x28, 0x75, 0x29, - 0x43, 0x28, 0x76, 0x29, 0x43, 0x28, 0x77, 0x29, - 0x43, 0x28, 0x78, 0x29, 0x43, 0x28, 0x79, 0x29, - 0x43, 0x28, 0x7A, 0x29, 0x43, 0x2E, 0x2E, 0x2E, - 0x43, 0x31, 0x30, 0x2E, 0x43, 0x31, 0x31, 0x2E, - 0x43, 0x31, 0x32, 0x2E, 0x43, 0x31, 0x33, 0x2E, - 0x43, 0x31, 0x34, 0x2E, 0x43, 0x31, 0x35, 0x2E, - 0x43, 0x31, 0x36, 0x2E, 0x43, 0x31, 0x37, 0x2E, - // Bytes 1b80 - 1bbf - 0x43, 0x31, 0x38, 0x2E, 0x43, 0x31, 0x39, 0x2E, - 0x43, 0x32, 0x30, 0x2E, 0x43, 0x3A, 0x3A, 0x3D, - 0x43, 0x3D, 0x3D, 0x3D, 0x43, 0x43, 0x6F, 0x2E, - 0x43, 0x46, 0x41, 0x58, 0x43, 0x47, 0x48, 0x7A, - 0x43, 0x47, 0x50, 0x61, 0x43, 0x49, 0x49, 0x49, - 0x43, 0x4C, 0x54, 0x44, 0x43, 0x4C, 0xC2, 0xB7, - 0x43, 0x4D, 0x48, 0x7A, 0x43, 0x4D, 0x50, 0x61, - 0x43, 0x4D, 0xCE, 0xA9, 0x43, 0x50, 0x50, 0x4D, - // Bytes 1bc0 - 1bff - 0x43, 0x50, 0x50, 0x56, 0x43, 0x50, 0x54, 0x45, - 0x43, 0x54, 0x45, 0x4C, 0x43, 0x54, 0x48, 0x7A, - 0x43, 0x56, 0x49, 0x49, 0x43, 0x58, 0x49, 0x49, - 0x43, 0x61, 0x2F, 0x63, 0x43, 0x61, 0x2F, 0x73, - 0x43, 0x61, 0xCA, 0xBE, 0x43, 0x62, 0x61, 0x72, - 0x43, 0x63, 0x2F, 0x6F, 0x43, 0x63, 0x2F, 0x75, - 0x43, 0x63, 0x61, 0x6C, 0x43, 0x63, 0x6D, 0x32, - 0x43, 0x63, 0x6D, 0x33, 0x43, 0x64, 0x6D, 0x32, - // Bytes 1c00 - 1c3f - 0x43, 0x64, 0x6D, 0x33, 0x43, 0x65, 0x72, 0x67, - 0x43, 0x66, 0x66, 0x69, 0x43, 0x66, 0x66, 0x6C, - 0x43, 0x67, 0x61, 0x6C, 0x43, 0x68, 0x50, 0x61, - 0x43, 0x69, 0x69, 0x69, 0x43, 0x6B, 0x48, 0x7A, - 0x43, 0x6B, 0x50, 0x61, 0x43, 0x6B, 0x6D, 0x32, - 0x43, 0x6B, 0x6D, 0x33, 0x43, 0x6B, 0xCE, 0xA9, - 0x43, 0x6C, 0x6F, 0x67, 0x43, 0x6C, 0xC2, 0xB7, - 0x43, 0x6D, 0x69, 0x6C, 0x43, 0x6D, 0x6D, 0x32, - // Bytes 1c40 - 1c7f - 0x43, 0x6D, 0x6D, 0x33, 0x43, 0x6D, 0x6F, 0x6C, - 0x43, 0x72, 0x61, 0x64, 0x43, 0x76, 0x69, 0x69, - 0x43, 0x78, 0x69, 0x69, 0x43, 0xC2, 0xB0, 0x43, - 0x43, 0xC2, 0xB0, 0x46, 0x43, 0xCA, 0xBC, 0x6E, - 0x43, 0xCE, 0xBC, 0x41, 0x43, 0xCE, 0xBC, 0x46, - 0x43, 0xCE, 0xBC, 0x56, 0x43, 0xCE, 0xBC, 0x57, - 0x43, 0xCE, 0xBC, 0x67, 0x43, 0xCE, 0xBC, 0x6C, - 0x43, 0xCE, 0xBC, 0x6D, 0x43, 0xCE, 0xBC, 0x73, - // Bytes 1c80 - 1cbf - 0x44, 0x28, 0x31, 0x30, 0x29, 0x44, 0x28, 0x31, - 0x31, 0x29, 0x44, 0x28, 0x31, 0x32, 0x29, 0x44, - 0x28, 0x31, 0x33, 0x29, 0x44, 0x28, 0x31, 0x34, - 0x29, 0x44, 0x28, 0x31, 0x35, 0x29, 0x44, 0x28, - 0x31, 0x36, 0x29, 0x44, 0x28, 0x31, 0x37, 0x29, - 0x44, 0x28, 0x31, 0x38, 0x29, 0x44, 0x28, 0x31, - 0x39, 0x29, 0x44, 0x28, 0x32, 0x30, 0x29, 0x44, - 0x30, 0xE7, 0x82, 0xB9, 0x44, 0x31, 0xE2, 0x81, - // Bytes 1cc0 - 1cff - 0x84, 0x44, 0x31, 0xE6, 0x97, 0xA5, 0x44, 0x31, - 0xE6, 0x9C, 0x88, 0x44, 0x31, 0xE7, 0x82, 0xB9, - 0x44, 0x32, 0xE6, 0x97, 0xA5, 0x44, 0x32, 0xE6, - 0x9C, 0x88, 0x44, 0x32, 0xE7, 0x82, 0xB9, 0x44, - 0x33, 0xE6, 0x97, 0xA5, 0x44, 0x33, 0xE6, 0x9C, - 0x88, 0x44, 0x33, 0xE7, 0x82, 0xB9, 0x44, 0x34, - 0xE6, 0x97, 0xA5, 0x44, 0x34, 0xE6, 0x9C, 0x88, - 0x44, 0x34, 0xE7, 0x82, 0xB9, 0x44, 0x35, 0xE6, - // Bytes 1d00 - 1d3f - 0x97, 0xA5, 0x44, 0x35, 0xE6, 0x9C, 0x88, 0x44, - 0x35, 0xE7, 0x82, 0xB9, 0x44, 0x36, 0xE6, 0x97, - 0xA5, 0x44, 0x36, 0xE6, 0x9C, 0x88, 0x44, 0x36, - 0xE7, 0x82, 0xB9, 0x44, 0x37, 0xE6, 0x97, 0xA5, - 0x44, 0x37, 0xE6, 0x9C, 0x88, 0x44, 0x37, 0xE7, - 0x82, 0xB9, 0x44, 0x38, 0xE6, 0x97, 0xA5, 0x44, - 0x38, 0xE6, 0x9C, 0x88, 0x44, 0x38, 0xE7, 0x82, - 0xB9, 0x44, 0x39, 0xE6, 0x97, 0xA5, 0x44, 0x39, - // Bytes 1d40 - 1d7f - 0xE6, 0x9C, 0x88, 0x44, 0x39, 0xE7, 0x82, 0xB9, - 0x44, 0x56, 0x49, 0x49, 0x49, 0x44, 0x61, 0x2E, - 0x6D, 0x2E, 0x44, 0x6B, 0x63, 0x61, 0x6C, 0x44, - 0x70, 0x2E, 0x6D, 0x2E, 0x44, 0x76, 0x69, 0x69, - 0x69, 0x44, 0xD5, 0xA5, 0xD6, 0x82, 0x44, 0xD5, - 0xB4, 0xD5, 0xA5, 0x44, 0xD5, 0xB4, 0xD5, 0xAB, - 0x44, 0xD5, 0xB4, 0xD5, 0xAD, 0x44, 0xD5, 0xB4, - 0xD5, 0xB6, 0x44, 0xD5, 0xBE, 0xD5, 0xB6, 0x44, - // Bytes 1d80 - 1dbf - 0xD7, 0x90, 0xD7, 0x9C, 0x44, 0xD8, 0xA7, 0xD9, - 0xB4, 0x44, 0xD8, 0xA8, 0xD8, 0xAC, 0x44, 0xD8, - 0xA8, 0xD8, 0xAD, 0x44, 0xD8, 0xA8, 0xD8, 0xAE, - 0x44, 0xD8, 0xA8, 0xD8, 0xB1, 0x44, 0xD8, 0xA8, - 0xD8, 0xB2, 0x44, 0xD8, 0xA8, 0xD9, 0x85, 0x44, - 0xD8, 0xA8, 0xD9, 0x86, 0x44, 0xD8, 0xA8, 0xD9, - 0x87, 0x44, 0xD8, 0xA8, 0xD9, 0x89, 0x44, 0xD8, - 0xA8, 0xD9, 0x8A, 0x44, 0xD8, 0xAA, 0xD8, 0xAC, - // Bytes 1dc0 - 1dff - 0x44, 0xD8, 0xAA, 0xD8, 0xAD, 0x44, 0xD8, 0xAA, - 0xD8, 0xAE, 0x44, 0xD8, 0xAA, 0xD8, 0xB1, 0x44, - 0xD8, 0xAA, 0xD8, 0xB2, 0x44, 0xD8, 0xAA, 0xD9, - 0x85, 0x44, 0xD8, 0xAA, 0xD9, 0x86, 0x44, 0xD8, - 0xAA, 0xD9, 0x87, 0x44, 0xD8, 0xAA, 0xD9, 0x89, - 0x44, 0xD8, 0xAA, 0xD9, 0x8A, 0x44, 0xD8, 0xAB, - 0xD8, 0xAC, 0x44, 0xD8, 0xAB, 0xD8, 0xB1, 0x44, - 0xD8, 0xAB, 0xD8, 0xB2, 0x44, 0xD8, 0xAB, 0xD9, - // Bytes 1e00 - 1e3f - 0x85, 0x44, 0xD8, 0xAB, 0xD9, 0x86, 0x44, 0xD8, - 0xAB, 0xD9, 0x87, 0x44, 0xD8, 0xAB, 0xD9, 0x89, - 0x44, 0xD8, 0xAB, 0xD9, 0x8A, 0x44, 0xD8, 0xAC, - 0xD8, 0xAD, 0x44, 0xD8, 0xAC, 0xD9, 0x85, 0x44, - 0xD8, 0xAC, 0xD9, 0x89, 0x44, 0xD8, 0xAC, 0xD9, - 0x8A, 0x44, 0xD8, 0xAD, 0xD8, 0xAC, 0x44, 0xD8, - 0xAD, 0xD9, 0x85, 0x44, 0xD8, 0xAD, 0xD9, 0x89, - 0x44, 0xD8, 0xAD, 0xD9, 0x8A, 0x44, 0xD8, 0xAE, - // Bytes 1e40 - 1e7f - 0xD8, 0xAC, 0x44, 0xD8, 0xAE, 0xD8, 0xAD, 0x44, - 0xD8, 0xAE, 0xD9, 0x85, 0x44, 0xD8, 0xAE, 0xD9, - 0x89, 0x44, 0xD8, 0xAE, 0xD9, 0x8A, 0x44, 0xD8, - 0xB3, 0xD8, 0xAC, 0x44, 0xD8, 0xB3, 0xD8, 0xAD, - 0x44, 0xD8, 0xB3, 0xD8, 0xAE, 0x44, 0xD8, 0xB3, - 0xD8, 0xB1, 0x44, 0xD8, 0xB3, 0xD9, 0x85, 0x44, - 0xD8, 0xB3, 0xD9, 0x87, 0x44, 0xD8, 0xB3, 0xD9, - 0x89, 0x44, 0xD8, 0xB3, 0xD9, 0x8A, 0x44, 0xD8, - // Bytes 1e80 - 1ebf - 0xB4, 0xD8, 0xAC, 0x44, 0xD8, 0xB4, 0xD8, 0xAD, - 0x44, 0xD8, 0xB4, 0xD8, 0xAE, 0x44, 0xD8, 0xB4, - 0xD8, 0xB1, 0x44, 0xD8, 0xB4, 0xD9, 0x85, 0x44, - 0xD8, 0xB4, 0xD9, 0x87, 0x44, 0xD8, 0xB4, 0xD9, - 0x89, 0x44, 0xD8, 0xB4, 0xD9, 0x8A, 0x44, 0xD8, - 0xB5, 0xD8, 0xAD, 0x44, 0xD8, 0xB5, 0xD8, 0xAE, - 0x44, 0xD8, 0xB5, 0xD8, 0xB1, 0x44, 0xD8, 0xB5, - 0xD9, 0x85, 0x44, 0xD8, 0xB5, 0xD9, 0x89, 0x44, - // Bytes 1ec0 - 1eff - 0xD8, 0xB5, 0xD9, 0x8A, 0x44, 0xD8, 0xB6, 0xD8, - 0xAC, 0x44, 0xD8, 0xB6, 0xD8, 0xAD, 0x44, 0xD8, - 0xB6, 0xD8, 0xAE, 0x44, 0xD8, 0xB6, 0xD8, 0xB1, - 0x44, 0xD8, 0xB6, 0xD9, 0x85, 0x44, 0xD8, 0xB6, - 0xD9, 0x89, 0x44, 0xD8, 0xB6, 0xD9, 0x8A, 0x44, - 0xD8, 0xB7, 0xD8, 0xAD, 0x44, 0xD8, 0xB7, 0xD9, - 0x85, 0x44, 0xD8, 0xB7, 0xD9, 0x89, 0x44, 0xD8, - 0xB7, 0xD9, 0x8A, 0x44, 0xD8, 0xB8, 0xD9, 0x85, - // Bytes 1f00 - 1f3f - 0x44, 0xD8, 0xB9, 0xD8, 0xAC, 0x44, 0xD8, 0xB9, - 0xD9, 0x85, 0x44, 0xD8, 0xB9, 0xD9, 0x89, 0x44, - 0xD8, 0xB9, 0xD9, 0x8A, 0x44, 0xD8, 0xBA, 0xD8, - 0xAC, 0x44, 0xD8, 0xBA, 0xD9, 0x85, 0x44, 0xD8, - 0xBA, 0xD9, 0x89, 0x44, 0xD8, 0xBA, 0xD9, 0x8A, - 0x44, 0xD9, 0x81, 0xD8, 0xAC, 0x44, 0xD9, 0x81, - 0xD8, 0xAD, 0x44, 0xD9, 0x81, 0xD8, 0xAE, 0x44, - 0xD9, 0x81, 0xD9, 0x85, 0x44, 0xD9, 0x81, 0xD9, - // Bytes 1f40 - 1f7f - 0x89, 0x44, 0xD9, 0x81, 0xD9, 0x8A, 0x44, 0xD9, - 0x82, 0xD8, 0xAD, 0x44, 0xD9, 0x82, 0xD9, 0x85, - 0x44, 0xD9, 0x82, 0xD9, 0x89, 0x44, 0xD9, 0x82, - 0xD9, 0x8A, 0x44, 0xD9, 0x83, 0xD8, 0xA7, 0x44, - 0xD9, 0x83, 0xD8, 0xAC, 0x44, 0xD9, 0x83, 0xD8, - 0xAD, 0x44, 0xD9, 0x83, 0xD8, 0xAE, 0x44, 0xD9, - 0x83, 0xD9, 0x84, 0x44, 0xD9, 0x83, 0xD9, 0x85, - 0x44, 0xD9, 0x83, 0xD9, 0x89, 0x44, 0xD9, 0x83, - // Bytes 1f80 - 1fbf - 0xD9, 0x8A, 0x44, 0xD9, 0x84, 0xD8, 0xA7, 0x44, - 0xD9, 0x84, 0xD8, 0xAC, 0x44, 0xD9, 0x84, 0xD8, - 0xAD, 0x44, 0xD9, 0x84, 0xD8, 0xAE, 0x44, 0xD9, - 0x84, 0xD9, 0x85, 0x44, 0xD9, 0x84, 0xD9, 0x87, - 0x44, 0xD9, 0x84, 0xD9, 0x89, 0x44, 0xD9, 0x84, - 0xD9, 0x8A, 0x44, 0xD9, 0x85, 0xD8, 0xA7, 0x44, - 0xD9, 0x85, 0xD8, 0xAC, 0x44, 0xD9, 0x85, 0xD8, - 0xAD, 0x44, 0xD9, 0x85, 0xD8, 0xAE, 0x44, 0xD9, - // Bytes 1fc0 - 1fff - 0x85, 0xD9, 0x85, 0x44, 0xD9, 0x85, 0xD9, 0x89, - 0x44, 0xD9, 0x85, 0xD9, 0x8A, 0x44, 0xD9, 0x86, - 0xD8, 0xAC, 0x44, 0xD9, 0x86, 0xD8, 0xAD, 0x44, - 0xD9, 0x86, 0xD8, 0xAE, 0x44, 0xD9, 0x86, 0xD8, - 0xB1, 0x44, 0xD9, 0x86, 0xD8, 0xB2, 0x44, 0xD9, - 0x86, 0xD9, 0x85, 0x44, 0xD9, 0x86, 0xD9, 0x86, - 0x44, 0xD9, 0x86, 0xD9, 0x87, 0x44, 0xD9, 0x86, - 0xD9, 0x89, 0x44, 0xD9, 0x86, 0xD9, 0x8A, 0x44, - // Bytes 2000 - 203f - 0xD9, 0x87, 0xD8, 0xAC, 0x44, 0xD9, 0x87, 0xD9, - 0x85, 0x44, 0xD9, 0x87, 0xD9, 0x89, 0x44, 0xD9, - 0x87, 0xD9, 0x8A, 0x44, 0xD9, 0x88, 0xD9, 0xB4, - 0x44, 0xD9, 0x8A, 0xD8, 0xAC, 0x44, 0xD9, 0x8A, - 0xD8, 0xAD, 0x44, 0xD9, 0x8A, 0xD8, 0xAE, 0x44, - 0xD9, 0x8A, 0xD8, 0xB1, 0x44, 0xD9, 0x8A, 0xD8, - 0xB2, 0x44, 0xD9, 0x8A, 0xD9, 0x85, 0x44, 0xD9, - 0x8A, 0xD9, 0x86, 0x44, 0xD9, 0x8A, 0xD9, 0x87, - // Bytes 2040 - 207f - 0x44, 0xD9, 0x8A, 0xD9, 0x89, 0x44, 0xD9, 0x8A, - 0xD9, 0x8A, 0x44, 0xD9, 0x8A, 0xD9, 0xB4, 0x44, - 0xDB, 0x87, 0xD9, 0xB4, 0x45, 0x28, 0xE1, 0x84, - 0x80, 0x29, 0x45, 0x28, 0xE1, 0x84, 0x82, 0x29, - 0x45, 0x28, 0xE1, 0x84, 0x83, 0x29, 0x45, 0x28, - 0xE1, 0x84, 0x85, 0x29, 0x45, 0x28, 0xE1, 0x84, - 0x86, 0x29, 0x45, 0x28, 0xE1, 0x84, 0x87, 0x29, - 0x45, 0x28, 0xE1, 0x84, 0x89, 0x29, 0x45, 0x28, - // Bytes 2080 - 20bf - 0xE1, 0x84, 0x8B, 0x29, 0x45, 0x28, 0xE1, 0x84, - 0x8C, 0x29, 0x45, 0x28, 0xE1, 0x84, 0x8E, 0x29, - 0x45, 0x28, 0xE1, 0x84, 0x8F, 0x29, 0x45, 0x28, - 0xE1, 0x84, 0x90, 0x29, 0x45, 0x28, 0xE1, 0x84, - 0x91, 0x29, 0x45, 0x28, 0xE1, 0x84, 0x92, 0x29, - 0x45, 0x28, 0xE4, 0xB8, 0x80, 0x29, 0x45, 0x28, - 0xE4, 0xB8, 0x83, 0x29, 0x45, 0x28, 0xE4, 0xB8, - 0x89, 0x29, 0x45, 0x28, 0xE4, 0xB9, 0x9D, 0x29, - // Bytes 20c0 - 20ff - 0x45, 0x28, 0xE4, 0xBA, 0x8C, 0x29, 0x45, 0x28, - 0xE4, 0xBA, 0x94, 0x29, 0x45, 0x28, 0xE4, 0xBB, - 0xA3, 0x29, 0x45, 0x28, 0xE4, 0xBC, 0x81, 0x29, - 0x45, 0x28, 0xE4, 0xBC, 0x91, 0x29, 0x45, 0x28, - 0xE5, 0x85, 0xAB, 0x29, 0x45, 0x28, 0xE5, 0x85, - 0xAD, 0x29, 0x45, 0x28, 0xE5, 0x8A, 0xB4, 0x29, - 0x45, 0x28, 0xE5, 0x8D, 0x81, 0x29, 0x45, 0x28, - 0xE5, 0x8D, 0x94, 0x29, 0x45, 0x28, 0xE5, 0x90, - // Bytes 2100 - 213f - 0x8D, 0x29, 0x45, 0x28, 0xE5, 0x91, 0xBC, 0x29, - 0x45, 0x28, 0xE5, 0x9B, 0x9B, 0x29, 0x45, 0x28, - 0xE5, 0x9C, 0x9F, 0x29, 0x45, 0x28, 0xE5, 0xAD, - 0xA6, 0x29, 0x45, 0x28, 0xE6, 0x97, 0xA5, 0x29, - 0x45, 0x28, 0xE6, 0x9C, 0x88, 0x29, 0x45, 0x28, - 0xE6, 0x9C, 0x89, 0x29, 0x45, 0x28, 0xE6, 0x9C, - 0xA8, 0x29, 0x45, 0x28, 0xE6, 0xA0, 0xAA, 0x29, - 0x45, 0x28, 0xE6, 0xB0, 0xB4, 0x29, 0x45, 0x28, - // Bytes 2140 - 217f - 0xE7, 0x81, 0xAB, 0x29, 0x45, 0x28, 0xE7, 0x89, - 0xB9, 0x29, 0x45, 0x28, 0xE7, 0x9B, 0xA3, 0x29, - 0x45, 0x28, 0xE7, 0xA4, 0xBE, 0x29, 0x45, 0x28, - 0xE7, 0xA5, 0x9D, 0x29, 0x45, 0x28, 0xE7, 0xA5, - 0xAD, 0x29, 0x45, 0x28, 0xE8, 0x87, 0xAA, 0x29, - 0x45, 0x28, 0xE8, 0x87, 0xB3, 0x29, 0x45, 0x28, - 0xE8, 0xB2, 0xA1, 0x29, 0x45, 0x28, 0xE8, 0xB3, - 0x87, 0x29, 0x45, 0x28, 0xE9, 0x87, 0x91, 0x29, - // Bytes 2180 - 21bf - 0x45, 0x30, 0xE2, 0x81, 0x84, 0x33, 0x45, 0x31, - 0x30, 0xE6, 0x97, 0xA5, 0x45, 0x31, 0x30, 0xE6, - 0x9C, 0x88, 0x45, 0x31, 0x30, 0xE7, 0x82, 0xB9, - 0x45, 0x31, 0x31, 0xE6, 0x97, 0xA5, 0x45, 0x31, - 0x31, 0xE6, 0x9C, 0x88, 0x45, 0x31, 0x31, 0xE7, - 0x82, 0xB9, 0x45, 0x31, 0x32, 0xE6, 0x97, 0xA5, - 0x45, 0x31, 0x32, 0xE6, 0x9C, 0x88, 0x45, 0x31, - 0x32, 0xE7, 0x82, 0xB9, 0x45, 0x31, 0x33, 0xE6, - // Bytes 21c0 - 21ff - 0x97, 0xA5, 0x45, 0x31, 0x33, 0xE7, 0x82, 0xB9, - 0x45, 0x31, 0x34, 0xE6, 0x97, 0xA5, 0x45, 0x31, - 0x34, 0xE7, 0x82, 0xB9, 0x45, 0x31, 0x35, 0xE6, - 0x97, 0xA5, 0x45, 0x31, 0x35, 0xE7, 0x82, 0xB9, - 0x45, 0x31, 0x36, 0xE6, 0x97, 0xA5, 0x45, 0x31, - 0x36, 0xE7, 0x82, 0xB9, 0x45, 0x31, 0x37, 0xE6, - 0x97, 0xA5, 0x45, 0x31, 0x37, 0xE7, 0x82, 0xB9, - 0x45, 0x31, 0x38, 0xE6, 0x97, 0xA5, 0x45, 0x31, - // Bytes 2200 - 223f - 0x38, 0xE7, 0x82, 0xB9, 0x45, 0x31, 0x39, 0xE6, - 0x97, 0xA5, 0x45, 0x31, 0x39, 0xE7, 0x82, 0xB9, - 0x45, 0x31, 0xE2, 0x81, 0x84, 0x32, 0x45, 0x31, - 0xE2, 0x81, 0x84, 0x33, 0x45, 0x31, 0xE2, 0x81, - 0x84, 0x34, 0x45, 0x31, 0xE2, 0x81, 0x84, 0x35, - 0x45, 0x31, 0xE2, 0x81, 0x84, 0x36, 0x45, 0x31, - 0xE2, 0x81, 0x84, 0x37, 0x45, 0x31, 0xE2, 0x81, - 0x84, 0x38, 0x45, 0x31, 0xE2, 0x81, 0x84, 0x39, - // Bytes 2240 - 227f - 0x45, 0x32, 0x30, 0xE6, 0x97, 0xA5, 0x45, 0x32, - 0x30, 0xE7, 0x82, 0xB9, 0x45, 0x32, 0x31, 0xE6, - 0x97, 0xA5, 0x45, 0x32, 0x31, 0xE7, 0x82, 0xB9, - 0x45, 0x32, 0x32, 0xE6, 0x97, 0xA5, 0x45, 0x32, - 0x32, 0xE7, 0x82, 0xB9, 0x45, 0x32, 0x33, 0xE6, - 0x97, 0xA5, 0x45, 0x32, 0x33, 0xE7, 0x82, 0xB9, - 0x45, 0x32, 0x34, 0xE6, 0x97, 0xA5, 0x45, 0x32, - 0x34, 0xE7, 0x82, 0xB9, 0x45, 0x32, 0x35, 0xE6, - // Bytes 2280 - 22bf - 0x97, 0xA5, 0x45, 0x32, 0x36, 0xE6, 0x97, 0xA5, - 0x45, 0x32, 0x37, 0xE6, 0x97, 0xA5, 0x45, 0x32, - 0x38, 0xE6, 0x97, 0xA5, 0x45, 0x32, 0x39, 0xE6, - 0x97, 0xA5, 0x45, 0x32, 0xE2, 0x81, 0x84, 0x33, - 0x45, 0x32, 0xE2, 0x81, 0x84, 0x35, 0x45, 0x33, - 0x30, 0xE6, 0x97, 0xA5, 0x45, 0x33, 0x31, 0xE6, - 0x97, 0xA5, 0x45, 0x33, 0xE2, 0x81, 0x84, 0x34, - 0x45, 0x33, 0xE2, 0x81, 0x84, 0x35, 0x45, 0x33, - // Bytes 22c0 - 22ff - 0xE2, 0x81, 0x84, 0x38, 0x45, 0x34, 0xE2, 0x81, - 0x84, 0x35, 0x45, 0x35, 0xE2, 0x81, 0x84, 0x36, - 0x45, 0x35, 0xE2, 0x81, 0x84, 0x38, 0x45, 0x37, - 0xE2, 0x81, 0x84, 0x38, 0x45, 0x41, 0xE2, 0x88, - 0x95, 0x6D, 0x45, 0x56, 0xE2, 0x88, 0x95, 0x6D, - 0x45, 0x6D, 0xE2, 0x88, 0x95, 0x73, 0x46, 0x31, - 0xE2, 0x81, 0x84, 0x31, 0x30, 0x46, 0x43, 0xE2, - 0x88, 0x95, 0x6B, 0x67, 0x46, 0x6D, 0xE2, 0x88, - // Bytes 2300 - 233f - 0x95, 0x73, 0x32, 0x46, 0xD8, 0xA8, 0xD8, 0xAD, - 0xD9, 0x8A, 0x46, 0xD8, 0xA8, 0xD8, 0xAE, 0xD9, - 0x8A, 0x46, 0xD8, 0xAA, 0xD8, 0xAC, 0xD9, 0x85, - 0x46, 0xD8, 0xAA, 0xD8, 0xAC, 0xD9, 0x89, 0x46, - 0xD8, 0xAA, 0xD8, 0xAC, 0xD9, 0x8A, 0x46, 0xD8, - 0xAA, 0xD8, 0xAD, 0xD8, 0xAC, 0x46, 0xD8, 0xAA, - 0xD8, 0xAD, 0xD9, 0x85, 0x46, 0xD8, 0xAA, 0xD8, - 0xAE, 0xD9, 0x85, 0x46, 0xD8, 0xAA, 0xD8, 0xAE, - // Bytes 2340 - 237f - 0xD9, 0x89, 0x46, 0xD8, 0xAA, 0xD8, 0xAE, 0xD9, - 0x8A, 0x46, 0xD8, 0xAA, 0xD9, 0x85, 0xD8, 0xAC, - 0x46, 0xD8, 0xAA, 0xD9, 0x85, 0xD8, 0xAD, 0x46, - 0xD8, 0xAA, 0xD9, 0x85, 0xD8, 0xAE, 0x46, 0xD8, - 0xAA, 0xD9, 0x85, 0xD9, 0x89, 0x46, 0xD8, 0xAA, - 0xD9, 0x85, 0xD9, 0x8A, 0x46, 0xD8, 0xAC, 0xD8, - 0xAD, 0xD9, 0x89, 0x46, 0xD8, 0xAC, 0xD8, 0xAD, - 0xD9, 0x8A, 0x46, 0xD8, 0xAC, 0xD9, 0x85, 0xD8, - // Bytes 2380 - 23bf - 0xAD, 0x46, 0xD8, 0xAC, 0xD9, 0x85, 0xD9, 0x89, - 0x46, 0xD8, 0xAC, 0xD9, 0x85, 0xD9, 0x8A, 0x46, - 0xD8, 0xAD, 0xD8, 0xAC, 0xD9, 0x8A, 0x46, 0xD8, - 0xAD, 0xD9, 0x85, 0xD9, 0x89, 0x46, 0xD8, 0xAD, - 0xD9, 0x85, 0xD9, 0x8A, 0x46, 0xD8, 0xB3, 0xD8, - 0xAC, 0xD8, 0xAD, 0x46, 0xD8, 0xB3, 0xD8, 0xAC, - 0xD9, 0x89, 0x46, 0xD8, 0xB3, 0xD8, 0xAD, 0xD8, - 0xAC, 0x46, 0xD8, 0xB3, 0xD8, 0xAE, 0xD9, 0x89, - // Bytes 23c0 - 23ff - 0x46, 0xD8, 0xB3, 0xD8, 0xAE, 0xD9, 0x8A, 0x46, - 0xD8, 0xB3, 0xD9, 0x85, 0xD8, 0xAC, 0x46, 0xD8, - 0xB3, 0xD9, 0x85, 0xD8, 0xAD, 0x46, 0xD8, 0xB3, - 0xD9, 0x85, 0xD9, 0x85, 0x46, 0xD8, 0xB4, 0xD8, - 0xAC, 0xD9, 0x8A, 0x46, 0xD8, 0xB4, 0xD8, 0xAD, - 0xD9, 0x85, 0x46, 0xD8, 0xB4, 0xD8, 0xAD, 0xD9, - 0x8A, 0x46, 0xD8, 0xB4, 0xD9, 0x85, 0xD8, 0xAE, - 0x46, 0xD8, 0xB4, 0xD9, 0x85, 0xD9, 0x85, 0x46, - // Bytes 2400 - 243f - 0xD8, 0xB5, 0xD8, 0xAD, 0xD8, 0xAD, 0x46, 0xD8, - 0xB5, 0xD8, 0xAD, 0xD9, 0x8A, 0x46, 0xD8, 0xB5, - 0xD9, 0x84, 0xD9, 0x89, 0x46, 0xD8, 0xB5, 0xD9, - 0x84, 0xDB, 0x92, 0x46, 0xD8, 0xB5, 0xD9, 0x85, - 0xD9, 0x85, 0x46, 0xD8, 0xB6, 0xD8, 0xAD, 0xD9, - 0x89, 0x46, 0xD8, 0xB6, 0xD8, 0xAD, 0xD9, 0x8A, - 0x46, 0xD8, 0xB6, 0xD8, 0xAE, 0xD9, 0x85, 0x46, - 0xD8, 0xB7, 0xD9, 0x85, 0xD8, 0xAD, 0x46, 0xD8, - // Bytes 2440 - 247f - 0xB7, 0xD9, 0x85, 0xD9, 0x85, 0x46, 0xD8, 0xB7, - 0xD9, 0x85, 0xD9, 0x8A, 0x46, 0xD8, 0xB9, 0xD8, - 0xAC, 0xD9, 0x85, 0x46, 0xD8, 0xB9, 0xD9, 0x85, - 0xD9, 0x85, 0x46, 0xD8, 0xB9, 0xD9, 0x85, 0xD9, - 0x89, 0x46, 0xD8, 0xB9, 0xD9, 0x85, 0xD9, 0x8A, - 0x46, 0xD8, 0xBA, 0xD9, 0x85, 0xD9, 0x85, 0x46, - 0xD8, 0xBA, 0xD9, 0x85, 0xD9, 0x89, 0x46, 0xD8, - 0xBA, 0xD9, 0x85, 0xD9, 0x8A, 0x46, 0xD9, 0x81, - // Bytes 2480 - 24bf - 0xD8, 0xAE, 0xD9, 0x85, 0x46, 0xD9, 0x81, 0xD9, - 0x85, 0xD9, 0x8A, 0x46, 0xD9, 0x82, 0xD9, 0x84, - 0xDB, 0x92, 0x46, 0xD9, 0x82, 0xD9, 0x85, 0xD8, - 0xAD, 0x46, 0xD9, 0x82, 0xD9, 0x85, 0xD9, 0x85, - 0x46, 0xD9, 0x82, 0xD9, 0x85, 0xD9, 0x8A, 0x46, - 0xD9, 0x83, 0xD9, 0x85, 0xD9, 0x85, 0x46, 0xD9, - 0x83, 0xD9, 0x85, 0xD9, 0x8A, 0x46, 0xD9, 0x84, - 0xD8, 0xAC, 0xD8, 0xAC, 0x46, 0xD9, 0x84, 0xD8, - // Bytes 24c0 - 24ff - 0xAC, 0xD9, 0x85, 0x46, 0xD9, 0x84, 0xD8, 0xAC, - 0xD9, 0x8A, 0x46, 0xD9, 0x84, 0xD8, 0xAD, 0xD9, - 0x85, 0x46, 0xD9, 0x84, 0xD8, 0xAD, 0xD9, 0x89, - 0x46, 0xD9, 0x84, 0xD8, 0xAD, 0xD9, 0x8A, 0x46, - 0xD9, 0x84, 0xD8, 0xAE, 0xD9, 0x85, 0x46, 0xD9, - 0x84, 0xD9, 0x85, 0xD8, 0xAD, 0x46, 0xD9, 0x84, - 0xD9, 0x85, 0xD9, 0x8A, 0x46, 0xD9, 0x85, 0xD8, - 0xAC, 0xD8, 0xAD, 0x46, 0xD9, 0x85, 0xD8, 0xAC, - // Bytes 2500 - 253f - 0xD8, 0xAE, 0x46, 0xD9, 0x85, 0xD8, 0xAC, 0xD9, - 0x85, 0x46, 0xD9, 0x85, 0xD8, 0xAC, 0xD9, 0x8A, - 0x46, 0xD9, 0x85, 0xD8, 0xAD, 0xD8, 0xAC, 0x46, - 0xD9, 0x85, 0xD8, 0xAD, 0xD9, 0x85, 0x46, 0xD9, - 0x85, 0xD8, 0xAD, 0xD9, 0x8A, 0x46, 0xD9, 0x85, - 0xD8, 0xAE, 0xD8, 0xAC, 0x46, 0xD9, 0x85, 0xD8, - 0xAE, 0xD9, 0x85, 0x46, 0xD9, 0x85, 0xD8, 0xAE, - 0xD9, 0x8A, 0x46, 0xD9, 0x85, 0xD9, 0x85, 0xD9, - // Bytes 2540 - 257f - 0x8A, 0x46, 0xD9, 0x86, 0xD8, 0xAC, 0xD8, 0xAD, - 0x46, 0xD9, 0x86, 0xD8, 0xAC, 0xD9, 0x85, 0x46, - 0xD9, 0x86, 0xD8, 0xAC, 0xD9, 0x89, 0x46, 0xD9, - 0x86, 0xD8, 0xAC, 0xD9, 0x8A, 0x46, 0xD9, 0x86, - 0xD8, 0xAD, 0xD9, 0x85, 0x46, 0xD9, 0x86, 0xD8, - 0xAD, 0xD9, 0x89, 0x46, 0xD9, 0x86, 0xD8, 0xAD, - 0xD9, 0x8A, 0x46, 0xD9, 0x86, 0xD9, 0x85, 0xD9, - 0x89, 0x46, 0xD9, 0x86, 0xD9, 0x85, 0xD9, 0x8A, - // Bytes 2580 - 25bf - 0x46, 0xD9, 0x87, 0xD9, 0x85, 0xD8, 0xAC, 0x46, - 0xD9, 0x87, 0xD9, 0x85, 0xD9, 0x85, 0x46, 0xD9, - 0x8A, 0xD8, 0xAC, 0xD9, 0x8A, 0x46, 0xD9, 0x8A, - 0xD8, 0xAD, 0xD9, 0x8A, 0x46, 0xD9, 0x8A, 0xD9, - 0x85, 0xD9, 0x85, 0x46, 0xD9, 0x8A, 0xD9, 0x85, - 0xD9, 0x8A, 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xD8, - 0xA7, 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xD8, 0xAC, - 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xD8, 0xAD, 0x46, - // Bytes 25c0 - 25ff - 0xD9, 0x8A, 0xD9, 0x94, 0xD8, 0xAE, 0x46, 0xD9, - 0x8A, 0xD9, 0x94, 0xD8, 0xB1, 0x46, 0xD9, 0x8A, - 0xD9, 0x94, 0xD8, 0xB2, 0x46, 0xD9, 0x8A, 0xD9, - 0x94, 0xD9, 0x85, 0x46, 0xD9, 0x8A, 0xD9, 0x94, - 0xD9, 0x86, 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xD9, - 0x87, 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xD9, 0x88, - 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xD9, 0x89, 0x46, - 0xD9, 0x8A, 0xD9, 0x94, 0xD9, 0x8A, 0x46, 0xD9, - // Bytes 2600 - 263f - 0x8A, 0xD9, 0x94, 0xDB, 0x86, 0x46, 0xD9, 0x8A, - 0xD9, 0x94, 0xDB, 0x87, 0x46, 0xD9, 0x8A, 0xD9, - 0x94, 0xDB, 0x88, 0x46, 0xD9, 0x8A, 0xD9, 0x94, - 0xDB, 0x90, 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xDB, - 0x95, 0x46, 0xE0, 0xB9, 0x8D, 0xE0, 0xB8, 0xB2, - 0x46, 0xE0, 0xBA, 0xAB, 0xE0, 0xBA, 0x99, 0x46, - 0xE0, 0xBA, 0xAB, 0xE0, 0xBA, 0xA1, 0x46, 0xE0, - 0xBB, 0x8D, 0xE0, 0xBA, 0xB2, 0x46, 0xE0, 0xBD, - // Bytes 2640 - 267f - 0x80, 0xE0, 0xBE, 0xB5, 0x46, 0xE0, 0xBD, 0x82, - 0xE0, 0xBE, 0xB7, 0x46, 0xE0, 0xBD, 0x8C, 0xE0, - 0xBE, 0xB7, 0x46, 0xE0, 0xBD, 0x91, 0xE0, 0xBE, - 0xB7, 0x46, 0xE0, 0xBD, 0x96, 0xE0, 0xBE, 0xB7, - 0x46, 0xE0, 0xBD, 0x9B, 0xE0, 0xBE, 0xB7, 0x46, - 0xE0, 0xBE, 0x90, 0xE0, 0xBE, 0xB5, 0x46, 0xE0, - 0xBE, 0x92, 0xE0, 0xBE, 0xB7, 0x46, 0xE0, 0xBE, - 0x9C, 0xE0, 0xBE, 0xB7, 0x46, 0xE0, 0xBE, 0xA1, - // Bytes 2680 - 26bf - 0xE0, 0xBE, 0xB7, 0x46, 0xE0, 0xBE, 0xA6, 0xE0, - 0xBE, 0xB7, 0x46, 0xE0, 0xBE, 0xAB, 0xE0, 0xBE, - 0xB7, 0x46, 0xE2, 0x80, 0xB2, 0xE2, 0x80, 0xB2, - 0x46, 0xE2, 0x80, 0xB5, 0xE2, 0x80, 0xB5, 0x46, - 0xE2, 0x88, 0xAB, 0xE2, 0x88, 0xAB, 0x46, 0xE2, - 0x88, 0xAE, 0xE2, 0x88, 0xAE, 0x46, 0xE3, 0x81, - 0xBB, 0xE3, 0x81, 0x8B, 0x46, 0xE3, 0x82, 0x88, - 0xE3, 0x82, 0x8A, 0x46, 0xE3, 0x82, 0xAD, 0xE3, - // Bytes 26c0 - 26ff - 0x83, 0xAD, 0x46, 0xE3, 0x82, 0xB3, 0xE3, 0x82, - 0xB3, 0x46, 0xE3, 0x82, 0xB3, 0xE3, 0x83, 0x88, - 0x46, 0xE3, 0x83, 0x88, 0xE3, 0x83, 0xB3, 0x46, - 0xE3, 0x83, 0x8A, 0xE3, 0x83, 0x8E, 0x46, 0xE3, - 0x83, 0x9B, 0xE3, 0x83, 0xB3, 0x46, 0xE3, 0x83, - 0x9F, 0xE3, 0x83, 0xAA, 0x46, 0xE3, 0x83, 0xAA, - 0xE3, 0x83, 0xA9, 0x46, 0xE3, 0x83, 0xAC, 0xE3, - 0x83, 0xA0, 0x46, 0xE5, 0xA4, 0xA7, 0xE6, 0xAD, - // Bytes 2700 - 273f - 0xA3, 0x46, 0xE5, 0xB9, 0xB3, 0xE6, 0x88, 0x90, - 0x46, 0xE6, 0x98, 0x8E, 0xE6, 0xB2, 0xBB, 0x46, - 0xE6, 0x98, 0xAD, 0xE5, 0x92, 0x8C, 0x47, 0x72, - 0x61, 0x64, 0xE2, 0x88, 0x95, 0x73, 0x47, 0xE3, - 0x80, 0x94, 0x53, 0xE3, 0x80, 0x95, 0x48, 0x28, - 0xE1, 0x84, 0x80, 0xE1, 0x85, 0xA1, 0x29, 0x48, - 0x28, 0xE1, 0x84, 0x82, 0xE1, 0x85, 0xA1, 0x29, - 0x48, 0x28, 0xE1, 0x84, 0x83, 0xE1, 0x85, 0xA1, - // Bytes 2740 - 277f - 0x29, 0x48, 0x28, 0xE1, 0x84, 0x85, 0xE1, 0x85, - 0xA1, 0x29, 0x48, 0x28, 0xE1, 0x84, 0x86, 0xE1, - 0x85, 0xA1, 0x29, 0x48, 0x28, 0xE1, 0x84, 0x87, - 0xE1, 0x85, 0xA1, 0x29, 0x48, 0x28, 0xE1, 0x84, - 0x89, 0xE1, 0x85, 0xA1, 0x29, 0x48, 0x28, 0xE1, - 0x84, 0x8B, 0xE1, 0x85, 0xA1, 0x29, 0x48, 0x28, - 0xE1, 0x84, 0x8C, 0xE1, 0x85, 0xA1, 0x29, 0x48, - 0x28, 0xE1, 0x84, 0x8C, 0xE1, 0x85, 0xAE, 0x29, - // Bytes 2780 - 27bf - 0x48, 0x28, 0xE1, 0x84, 0x8E, 0xE1, 0x85, 0xA1, - 0x29, 0x48, 0x28, 0xE1, 0x84, 0x8F, 0xE1, 0x85, - 0xA1, 0x29, 0x48, 0x28, 0xE1, 0x84, 0x90, 0xE1, - 0x85, 0xA1, 0x29, 0x48, 0x28, 0xE1, 0x84, 0x91, - 0xE1, 0x85, 0xA1, 0x29, 0x48, 0x28, 0xE1, 0x84, - 0x92, 0xE1, 0x85, 0xA1, 0x29, 0x48, 0x72, 0x61, - 0x64, 0xE2, 0x88, 0x95, 0x73, 0x32, 0x48, 0xD8, - 0xA7, 0xD9, 0x83, 0xD8, 0xA8, 0xD8, 0xB1, 0x48, - // Bytes 27c0 - 27ff - 0xD8, 0xA7, 0xD9, 0x84, 0xD9, 0x84, 0xD9, 0x87, - 0x48, 0xD8, 0xB1, 0xD8, 0xB3, 0xD9, 0x88, 0xD9, - 0x84, 0x48, 0xD8, 0xB1, 0xDB, 0x8C, 0xD8, 0xA7, - 0xD9, 0x84, 0x48, 0xD8, 0xB5, 0xD9, 0x84, 0xD8, - 0xB9, 0xD9, 0x85, 0x48, 0xD8, 0xB9, 0xD9, 0x84, - 0xD9, 0x8A, 0xD9, 0x87, 0x48, 0xD9, 0x85, 0xD8, - 0xAD, 0xD9, 0x85, 0xD8, 0xAF, 0x48, 0xD9, 0x88, - 0xD8, 0xB3, 0xD9, 0x84, 0xD9, 0x85, 0x49, 0xE2, - // Bytes 2800 - 283f - 0x80, 0xB2, 0xE2, 0x80, 0xB2, 0xE2, 0x80, 0xB2, - 0x49, 0xE2, 0x80, 0xB5, 0xE2, 0x80, 0xB5, 0xE2, - 0x80, 0xB5, 0x49, 0xE2, 0x88, 0xAB, 0xE2, 0x88, - 0xAB, 0xE2, 0x88, 0xAB, 0x49, 0xE2, 0x88, 0xAE, - 0xE2, 0x88, 0xAE, 0xE2, 0x88, 0xAE, 0x49, 0xE3, - 0x80, 0x94, 0xE4, 0xB8, 0x89, 0xE3, 0x80, 0x95, - 0x49, 0xE3, 0x80, 0x94, 0xE4, 0xBA, 0x8C, 0xE3, - 0x80, 0x95, 0x49, 0xE3, 0x80, 0x94, 0xE5, 0x8B, - // Bytes 2840 - 287f - 0x9D, 0xE3, 0x80, 0x95, 0x49, 0xE3, 0x80, 0x94, - 0xE5, 0xAE, 0x89, 0xE3, 0x80, 0x95, 0x49, 0xE3, - 0x80, 0x94, 0xE6, 0x89, 0x93, 0xE3, 0x80, 0x95, - 0x49, 0xE3, 0x80, 0x94, 0xE6, 0x95, 0x97, 0xE3, - 0x80, 0x95, 0x49, 0xE3, 0x80, 0x94, 0xE6, 0x9C, - 0xAC, 0xE3, 0x80, 0x95, 0x49, 0xE3, 0x80, 0x94, - 0xE7, 0x82, 0xB9, 0xE3, 0x80, 0x95, 0x49, 0xE3, - 0x80, 0x94, 0xE7, 0x9B, 0x97, 0xE3, 0x80, 0x95, - // Bytes 2880 - 28bf - 0x49, 0xE3, 0x82, 0xA2, 0xE3, 0x83, 0xBC, 0xE3, - 0x83, 0xAB, 0x49, 0xE3, 0x82, 0xA4, 0xE3, 0x83, - 0xB3, 0xE3, 0x83, 0x81, 0x49, 0xE3, 0x82, 0xA6, - 0xE3, 0x82, 0xA9, 0xE3, 0x83, 0xB3, 0x49, 0xE3, - 0x82, 0xAA, 0xE3, 0x83, 0xB3, 0xE3, 0x82, 0xB9, - 0x49, 0xE3, 0x82, 0xAA, 0xE3, 0x83, 0xBC, 0xE3, - 0x83, 0xA0, 0x49, 0xE3, 0x82, 0xAB, 0xE3, 0x82, - 0xA4, 0xE3, 0x83, 0xAA, 0x49, 0xE3, 0x82, 0xB1, - // Bytes 28c0 - 28ff - 0xE3, 0x83, 0xBC, 0xE3, 0x82, 0xB9, 0x49, 0xE3, - 0x82, 0xB3, 0xE3, 0x83, 0xAB, 0xE3, 0x83, 0x8A, - 0x49, 0xE3, 0x82, 0xBB, 0xE3, 0x83, 0xB3, 0xE3, - 0x83, 0x81, 0x49, 0xE3, 0x82, 0xBB, 0xE3, 0x83, - 0xB3, 0xE3, 0x83, 0x88, 0x49, 0xE3, 0x83, 0x86, - 0xE3, 0x82, 0x99, 0xE3, 0x82, 0xB7, 0x49, 0xE3, - 0x83, 0x88, 0xE3, 0x82, 0x99, 0xE3, 0x83, 0xAB, - 0x49, 0xE3, 0x83, 0x8E, 0xE3, 0x83, 0x83, 0xE3, - // Bytes 2900 - 293f - 0x83, 0x88, 0x49, 0xE3, 0x83, 0x8F, 0xE3, 0x82, - 0xA4, 0xE3, 0x83, 0x84, 0x49, 0xE3, 0x83, 0x92, - 0xE3, 0x82, 0x99, 0xE3, 0x83, 0xAB, 0x49, 0xE3, - 0x83, 0x92, 0xE3, 0x82, 0x9A, 0xE3, 0x82, 0xB3, - 0x49, 0xE3, 0x83, 0x95, 0xE3, 0x83, 0xA9, 0xE3, - 0x83, 0xB3, 0x49, 0xE3, 0x83, 0x98, 0xE3, 0x82, - 0x9A, 0xE3, 0x82, 0xBD, 0x49, 0xE3, 0x83, 0x98, - 0xE3, 0x83, 0xAB, 0xE3, 0x83, 0x84, 0x49, 0xE3, - // Bytes 2940 - 297f - 0x83, 0x9B, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0xAB, - 0x49, 0xE3, 0x83, 0x9B, 0xE3, 0x83, 0xBC, 0xE3, - 0x83, 0xB3, 0x49, 0xE3, 0x83, 0x9E, 0xE3, 0x82, - 0xA4, 0xE3, 0x83, 0xAB, 0x49, 0xE3, 0x83, 0x9E, - 0xE3, 0x83, 0x83, 0xE3, 0x83, 0x8F, 0x49, 0xE3, - 0x83, 0x9E, 0xE3, 0x83, 0xAB, 0xE3, 0x82, 0xAF, - 0x49, 0xE3, 0x83, 0xA4, 0xE3, 0x83, 0xBC, 0xE3, - 0x83, 0xAB, 0x49, 0xE3, 0x83, 0xA6, 0xE3, 0x82, - // Bytes 2980 - 29bf - 0xA2, 0xE3, 0x83, 0xB3, 0x49, 0xE3, 0x83, 0xAF, - 0xE3, 0x83, 0x83, 0xE3, 0x83, 0x88, 0x4C, 0xE2, - 0x80, 0xB2, 0xE2, 0x80, 0xB2, 0xE2, 0x80, 0xB2, - 0xE2, 0x80, 0xB2, 0x4C, 0xE2, 0x88, 0xAB, 0xE2, - 0x88, 0xAB, 0xE2, 0x88, 0xAB, 0xE2, 0x88, 0xAB, - 0x4C, 0xE3, 0x82, 0xA2, 0xE3, 0x83, 0xAB, 0xE3, - 0x83, 0x95, 0xE3, 0x82, 0xA1, 0x4C, 0xE3, 0x82, - 0xA8, 0xE3, 0x83, 0xBC, 0xE3, 0x82, 0xAB, 0xE3, - // Bytes 29c0 - 29ff - 0x83, 0xBC, 0x4C, 0xE3, 0x82, 0xAB, 0xE3, 0x82, - 0x99, 0xE3, 0x83, 0xAD, 0xE3, 0x83, 0xB3, 0x4C, - 0xE3, 0x82, 0xAB, 0xE3, 0x82, 0x99, 0xE3, 0x83, - 0xB3, 0xE3, 0x83, 0x9E, 0x4C, 0xE3, 0x82, 0xAB, - 0xE3, 0x83, 0xA9, 0xE3, 0x83, 0x83, 0xE3, 0x83, - 0x88, 0x4C, 0xE3, 0x82, 0xAB, 0xE3, 0x83, 0xAD, - 0xE3, 0x83, 0xAA, 0xE3, 0x83, 0xBC, 0x4C, 0xE3, - 0x82, 0xAD, 0xE3, 0x82, 0x99, 0xE3, 0x83, 0x8B, - // Bytes 2a00 - 2a3f - 0xE3, 0x83, 0xBC, 0x4C, 0xE3, 0x82, 0xAD, 0xE3, - 0x83, 0xA5, 0xE3, 0x83, 0xAA, 0xE3, 0x83, 0xBC, - 0x4C, 0xE3, 0x82, 0xAF, 0xE3, 0x82, 0x99, 0xE3, - 0x83, 0xA9, 0xE3, 0x83, 0xA0, 0x4C, 0xE3, 0x82, - 0xAF, 0xE3, 0x83, 0xAD, 0xE3, 0x83, 0xBC, 0xE3, - 0x83, 0x8D, 0x4C, 0xE3, 0x82, 0xB5, 0xE3, 0x82, - 0xA4, 0xE3, 0x82, 0xAF, 0xE3, 0x83, 0xAB, 0x4C, - 0xE3, 0x82, 0xBF, 0xE3, 0x82, 0x99, 0xE3, 0x83, - // Bytes 2a40 - 2a7f - 0xBC, 0xE3, 0x82, 0xB9, 0x4C, 0xE3, 0x83, 0x8F, - 0xE3, 0x82, 0x9A, 0xE3, 0x83, 0xBC, 0xE3, 0x83, - 0x84, 0x4C, 0xE3, 0x83, 0x92, 0xE3, 0x82, 0x9A, - 0xE3, 0x82, 0xAF, 0xE3, 0x83, 0xAB, 0x4C, 0xE3, - 0x83, 0x95, 0xE3, 0x82, 0xA3, 0xE3, 0x83, 0xBC, - 0xE3, 0x83, 0x88, 0x4C, 0xE3, 0x83, 0x98, 0xE3, - 0x82, 0x99, 0xE3, 0x83, 0xBC, 0xE3, 0x82, 0xBF, - 0x4C, 0xE3, 0x83, 0x98, 0xE3, 0x82, 0x9A, 0xE3, - // Bytes 2a80 - 2abf - 0x83, 0x8B, 0xE3, 0x83, 0x92, 0x4C, 0xE3, 0x83, - 0x98, 0xE3, 0x82, 0x9A, 0xE3, 0x83, 0xB3, 0xE3, - 0x82, 0xB9, 0x4C, 0xE3, 0x83, 0x9B, 0xE3, 0x82, - 0x99, 0xE3, 0x83, 0xAB, 0xE3, 0x83, 0x88, 0x4C, - 0xE3, 0x83, 0x9E, 0xE3, 0x82, 0xA4, 0xE3, 0x82, - 0xAF, 0xE3, 0x83, 0xAD, 0x4C, 0xE3, 0x83, 0x9F, - 0xE3, 0x82, 0xAF, 0xE3, 0x83, 0xAD, 0xE3, 0x83, - 0xB3, 0x4C, 0xE3, 0x83, 0xA1, 0xE3, 0x83, 0xBC, - // Bytes 2ac0 - 2aff - 0xE3, 0x83, 0x88, 0xE3, 0x83, 0xAB, 0x4C, 0xE3, - 0x83, 0xAA, 0xE3, 0x83, 0x83, 0xE3, 0x83, 0x88, - 0xE3, 0x83, 0xAB, 0x4C, 0xE3, 0x83, 0xAB, 0xE3, - 0x83, 0x92, 0xE3, 0x82, 0x9A, 0xE3, 0x83, 0xBC, - 0x4C, 0xE6, 0xA0, 0xAA, 0xE5, 0xBC, 0x8F, 0xE4, - 0xBC, 0x9A, 0xE7, 0xA4, 0xBE, 0x4E, 0x28, 0xE1, - 0x84, 0x8B, 0xE1, 0x85, 0xA9, 0xE1, 0x84, 0x92, - 0xE1, 0x85, 0xAE, 0x29, 0x4F, 0xD8, 0xAC, 0xD9, - // Bytes 2b00 - 2b3f - 0x84, 0x20, 0xD8, 0xAC, 0xD9, 0x84, 0xD8, 0xA7, - 0xD9, 0x84, 0xD9, 0x87, 0x4F, 0xE3, 0x82, 0xA2, - 0xE3, 0x83, 0x8F, 0xE3, 0x82, 0x9A, 0xE3, 0x83, - 0xBC, 0xE3, 0x83, 0x88, 0x4F, 0xE3, 0x82, 0xA2, - 0xE3, 0x83, 0xB3, 0xE3, 0x83, 0x98, 0xE3, 0x82, - 0x9A, 0xE3, 0x82, 0xA2, 0x4F, 0xE3, 0x82, 0xAD, - 0xE3, 0x83, 0xAD, 0xE3, 0x83, 0xAF, 0xE3, 0x83, - 0x83, 0xE3, 0x83, 0x88, 0x4F, 0xE3, 0x82, 0xB5, - // Bytes 2b40 - 2b7f - 0xE3, 0x83, 0xB3, 0xE3, 0x83, 0x81, 0xE3, 0x83, - 0xBC, 0xE3, 0x83, 0xA0, 0x4F, 0xE3, 0x83, 0x8F, - 0xE3, 0x82, 0x99, 0xE3, 0x83, 0xBC, 0xE3, 0x83, - 0xAC, 0xE3, 0x83, 0xAB, 0x4F, 0xE3, 0x83, 0x98, - 0xE3, 0x82, 0xAF, 0xE3, 0x82, 0xBF, 0xE3, 0x83, - 0xBC, 0xE3, 0x83, 0xAB, 0x4F, 0xE3, 0x83, 0x9B, - 0xE3, 0x82, 0x9A, 0xE3, 0x82, 0xA4, 0xE3, 0x83, - 0xB3, 0xE3, 0x83, 0x88, 0x4F, 0xE3, 0x83, 0x9E, - // Bytes 2b80 - 2bbf - 0xE3, 0x83, 0xB3, 0xE3, 0x82, 0xB7, 0xE3, 0x83, - 0xA7, 0xE3, 0x83, 0xB3, 0x4F, 0xE3, 0x83, 0xA1, - 0xE3, 0x82, 0xAB, 0xE3, 0x82, 0x99, 0xE3, 0x83, - 0x88, 0xE3, 0x83, 0xB3, 0x4F, 0xE3, 0x83, 0xAB, - 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0x95, 0xE3, 0x82, - 0x99, 0xE3, 0x83, 0xAB, 0x51, 0x28, 0xE1, 0x84, - 0x8B, 0xE1, 0x85, 0xA9, 0xE1, 0x84, 0x8C, 0xE1, - 0x85, 0xA5, 0xE1, 0x86, 0xAB, 0x29, 0x52, 0xE3, - // Bytes 2bc0 - 2bff - 0x82, 0xAD, 0xE3, 0x82, 0x99, 0xE3, 0x83, 0xAB, - 0xE3, 0x82, 0xBF, 0xE3, 0x82, 0x99, 0xE3, 0x83, - 0xBC, 0x52, 0xE3, 0x82, 0xAD, 0xE3, 0x83, 0xAD, - 0xE3, 0x82, 0xAF, 0xE3, 0x82, 0x99, 0xE3, 0x83, - 0xA9, 0xE3, 0x83, 0xA0, 0x52, 0xE3, 0x82, 0xAD, - 0xE3, 0x83, 0xAD, 0xE3, 0x83, 0xA1, 0xE3, 0x83, - 0xBC, 0xE3, 0x83, 0x88, 0xE3, 0x83, 0xAB, 0x52, - 0xE3, 0x82, 0xAF, 0xE3, 0x82, 0x99, 0xE3, 0x83, - // Bytes 2c00 - 2c3f - 0xA9, 0xE3, 0x83, 0xA0, 0xE3, 0x83, 0x88, 0xE3, - 0x83, 0xB3, 0x52, 0xE3, 0x82, 0xAF, 0xE3, 0x83, - 0xAB, 0xE3, 0x82, 0xBB, 0xE3, 0x82, 0x99, 0xE3, - 0x82, 0xA4, 0xE3, 0x83, 0xAD, 0x52, 0xE3, 0x83, - 0x8F, 0xE3, 0x82, 0x9A, 0xE3, 0x83, 0xBC, 0xE3, - 0x82, 0xBB, 0xE3, 0x83, 0xB3, 0xE3, 0x83, 0x88, - 0x52, 0xE3, 0x83, 0x92, 0xE3, 0x82, 0x9A, 0xE3, - 0x82, 0xA2, 0xE3, 0x82, 0xB9, 0xE3, 0x83, 0x88, - // Bytes 2c40 - 2c7f - 0xE3, 0x83, 0xAB, 0x52, 0xE3, 0x83, 0x95, 0xE3, - 0x82, 0x99, 0xE3, 0x83, 0x83, 0xE3, 0x82, 0xB7, - 0xE3, 0x82, 0xA7, 0xE3, 0x83, 0xAB, 0x52, 0xE3, - 0x83, 0x9F, 0xE3, 0x83, 0xAA, 0xE3, 0x83, 0x8F, - 0xE3, 0x82, 0x99, 0xE3, 0x83, 0xBC, 0xE3, 0x83, - 0xAB, 0x52, 0xE3, 0x83, 0xAC, 0xE3, 0x83, 0xB3, - 0xE3, 0x83, 0x88, 0xE3, 0x82, 0xB1, 0xE3, 0x82, - 0x99, 0xE3, 0x83, 0xB3, 0x61, 0xD8, 0xB5, 0xD9, - // Bytes 2c80 - 2cbf - 0x84, 0xD9, 0x89, 0x20, 0xD8, 0xA7, 0xD9, 0x84, - 0xD9, 0x84, 0xD9, 0x87, 0x20, 0xD8, 0xB9, 0xD9, - 0x84, 0xD9, 0x8A, 0xD9, 0x87, 0x20, 0xD9, 0x88, - 0xD8, 0xB3, 0xD9, 0x84, 0xD9, 0x85, 0x06, 0xE0, - 0xA7, 0x87, 0xE0, 0xA6, 0xBE, 0x01, 0x06, 0xE0, - 0xA7, 0x87, 0xE0, 0xA7, 0x97, 0x01, 0x06, 0xE0, - 0xAD, 0x87, 0xE0, 0xAC, 0xBE, 0x01, 0x06, 0xE0, - 0xAD, 0x87, 0xE0, 0xAD, 0x96, 0x01, 0x06, 0xE0, - // Bytes 2cc0 - 2cff - 0xAD, 0x87, 0xE0, 0xAD, 0x97, 0x01, 0x06, 0xE0, - 0xAE, 0x92, 0xE0, 0xAF, 0x97, 0x01, 0x06, 0xE0, - 0xAF, 0x86, 0xE0, 0xAE, 0xBE, 0x01, 0x06, 0xE0, - 0xAF, 0x86, 0xE0, 0xAF, 0x97, 0x01, 0x06, 0xE0, - 0xAF, 0x87, 0xE0, 0xAE, 0xBE, 0x01, 0x06, 0xE0, - 0xB2, 0xBF, 0xE0, 0xB3, 0x95, 0x01, 0x06, 0xE0, - 0xB3, 0x86, 0xE0, 0xB3, 0x95, 0x01, 0x06, 0xE0, - 0xB3, 0x86, 0xE0, 0xB3, 0x96, 0x01, 0x06, 0xE0, - // Bytes 2d00 - 2d3f - 0xB5, 0x86, 0xE0, 0xB4, 0xBE, 0x01, 0x06, 0xE0, - 0xB5, 0x86, 0xE0, 0xB5, 0x97, 0x01, 0x06, 0xE0, - 0xB5, 0x87, 0xE0, 0xB4, 0xBE, 0x01, 0x06, 0xE0, - 0xB7, 0x99, 0xE0, 0xB7, 0x9F, 0x01, 0x06, 0xE1, - 0x80, 0xA5, 0xE1, 0x80, 0xAE, 0x01, 0x06, 0xE1, - 0xAC, 0x85, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1, - 0xAC, 0x87, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1, - 0xAC, 0x89, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1, - // Bytes 2d40 - 2d7f - 0xAC, 0x8B, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1, - 0xAC, 0x8D, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1, - 0xAC, 0x91, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1, - 0xAC, 0xBA, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1, - 0xAC, 0xBC, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1, - 0xAC, 0xBE, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1, - 0xAC, 0xBF, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1, - 0xAD, 0x82, 0xE1, 0xAC, 0xB5, 0x01, 0x08, 0xF0, - // Bytes 2d80 - 2dbf - 0x91, 0x84, 0xB1, 0xF0, 0x91, 0x84, 0xA7, 0x01, - 0x08, 0xF0, 0x91, 0x84, 0xB2, 0xF0, 0x91, 0x84, - 0xA7, 0x01, 0x08, 0xF0, 0x91, 0x8D, 0x87, 0xF0, - 0x91, 0x8C, 0xBE, 0x01, 0x08, 0xF0, 0x91, 0x8D, - 0x87, 0xF0, 0x91, 0x8D, 0x97, 0x01, 0x08, 0xF0, - 0x91, 0x92, 0xB9, 0xF0, 0x91, 0x92, 0xB0, 0x01, - 0x08, 0xF0, 0x91, 0x92, 0xB9, 0xF0, 0x91, 0x92, - 0xBA, 0x01, 0x08, 0xF0, 0x91, 0x92, 0xB9, 0xF0, - // Bytes 2dc0 - 2dff - 0x91, 0x92, 0xBD, 0x01, 0x08, 0xF0, 0x91, 0x96, - 0xB8, 0xF0, 0x91, 0x96, 0xAF, 0x01, 0x08, 0xF0, - 0x91, 0x96, 0xB9, 0xF0, 0x91, 0x96, 0xAF, 0x01, - 0x09, 0xE0, 0xB3, 0x86, 0xE0, 0xB3, 0x82, 0xE0, - 0xB3, 0x95, 0x02, 0x09, 0xE0, 0xB7, 0x99, 0xE0, - 0xB7, 0x8F, 0xE0, 0xB7, 0x8A, 0x12, 0x44, 0x44, - 0x5A, 0xCC, 0x8C, 0xC9, 0x44, 0x44, 0x7A, 0xCC, - 0x8C, 0xC9, 0x44, 0x64, 0x7A, 0xCC, 0x8C, 0xC9, - // Bytes 2e00 - 2e3f - 0x46, 0xD9, 0x84, 0xD8, 0xA7, 0xD9, 0x93, 0xC9, - 0x46, 0xD9, 0x84, 0xD8, 0xA7, 0xD9, 0x94, 0xC9, - 0x46, 0xD9, 0x84, 0xD8, 0xA7, 0xD9, 0x95, 0xB5, - 0x46, 0xE1, 0x84, 0x80, 0xE1, 0x85, 0xA1, 0x01, - 0x46, 0xE1, 0x84, 0x82, 0xE1, 0x85, 0xA1, 0x01, - 0x46, 0xE1, 0x84, 0x83, 0xE1, 0x85, 0xA1, 0x01, - 0x46, 0xE1, 0x84, 0x85, 0xE1, 0x85, 0xA1, 0x01, - 0x46, 0xE1, 0x84, 0x86, 0xE1, 0x85, 0xA1, 0x01, - // Bytes 2e40 - 2e7f - 0x46, 0xE1, 0x84, 0x87, 0xE1, 0x85, 0xA1, 0x01, - 0x46, 0xE1, 0x84, 0x89, 0xE1, 0x85, 0xA1, 0x01, - 0x46, 0xE1, 0x84, 0x8B, 0xE1, 0x85, 0xA1, 0x01, - 0x46, 0xE1, 0x84, 0x8B, 0xE1, 0x85, 0xAE, 0x01, - 0x46, 0xE1, 0x84, 0x8C, 0xE1, 0x85, 0xA1, 0x01, - 0x46, 0xE1, 0x84, 0x8E, 0xE1, 0x85, 0xA1, 0x01, - 0x46, 0xE1, 0x84, 0x8F, 0xE1, 0x85, 0xA1, 0x01, - 0x46, 0xE1, 0x84, 0x90, 0xE1, 0x85, 0xA1, 0x01, - // Bytes 2e80 - 2ebf - 0x46, 0xE1, 0x84, 0x91, 0xE1, 0x85, 0xA1, 0x01, - 0x46, 0xE1, 0x84, 0x92, 0xE1, 0x85, 0xA1, 0x01, - 0x49, 0xE3, 0x83, 0xA1, 0xE3, 0x82, 0xAB, 0xE3, - 0x82, 0x99, 0x0D, 0x4C, 0xE1, 0x84, 0x8C, 0xE1, - 0x85, 0xAE, 0xE1, 0x84, 0x8B, 0xE1, 0x85, 0xB4, - 0x01, 0x4C, 0xE3, 0x82, 0xAD, 0xE3, 0x82, 0x99, - 0xE3, 0x82, 0xAB, 0xE3, 0x82, 0x99, 0x0D, 0x4C, - 0xE3, 0x82, 0xB3, 0xE3, 0x83, 0xBC, 0xE3, 0x83, - // Bytes 2ec0 - 2eff - 0x9B, 0xE3, 0x82, 0x9A, 0x0D, 0x4C, 0xE3, 0x83, - 0xA4, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0x88, 0xE3, - 0x82, 0x99, 0x0D, 0x4F, 0xE1, 0x84, 0x8E, 0xE1, - 0x85, 0xA1, 0xE1, 0x86, 0xB7, 0xE1, 0x84, 0x80, - 0xE1, 0x85, 0xA9, 0x01, 0x4F, 0xE3, 0x82, 0xA4, - 0xE3, 0x83, 0x8B, 0xE3, 0x83, 0xB3, 0xE3, 0x82, - 0xAF, 0xE3, 0x82, 0x99, 0x0D, 0x4F, 0xE3, 0x82, - 0xB7, 0xE3, 0x83, 0xAA, 0xE3, 0x83, 0xB3, 0xE3, - // Bytes 2f00 - 2f3f - 0x82, 0xAF, 0xE3, 0x82, 0x99, 0x0D, 0x4F, 0xE3, - 0x83, 0x98, 0xE3, 0x82, 0x9A, 0xE3, 0x83, 0xBC, - 0xE3, 0x82, 0xB7, 0xE3, 0x82, 0x99, 0x0D, 0x4F, - 0xE3, 0x83, 0x9B, 0xE3, 0x82, 0x9A, 0xE3, 0x83, - 0xB3, 0xE3, 0x83, 0x88, 0xE3, 0x82, 0x99, 0x0D, - 0x52, 0xE3, 0x82, 0xA8, 0xE3, 0x82, 0xB9, 0xE3, - 0x82, 0xAF, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0x88, - 0xE3, 0x82, 0x99, 0x0D, 0x52, 0xE3, 0x83, 0x95, - // Bytes 2f40 - 2f7f - 0xE3, 0x82, 0xA1, 0xE3, 0x83, 0xA9, 0xE3, 0x83, - 0x83, 0xE3, 0x83, 0x88, 0xE3, 0x82, 0x99, 0x0D, - 0x86, 0xE0, 0xB3, 0x86, 0xE0, 0xB3, 0x82, 0x01, - 0x86, 0xE0, 0xB7, 0x99, 0xE0, 0xB7, 0x8F, 0x01, - 0x03, 0x3C, 0xCC, 0xB8, 0x05, 0x03, 0x3D, 0xCC, - 0xB8, 0x05, 0x03, 0x3E, 0xCC, 0xB8, 0x05, 0x03, - 0x41, 0xCC, 0x80, 0xC9, 0x03, 0x41, 0xCC, 0x81, - 0xC9, 0x03, 0x41, 0xCC, 0x83, 0xC9, 0x03, 0x41, - // Bytes 2f80 - 2fbf - 0xCC, 0x84, 0xC9, 0x03, 0x41, 0xCC, 0x89, 0xC9, - 0x03, 0x41, 0xCC, 0x8C, 0xC9, 0x03, 0x41, 0xCC, - 0x8F, 0xC9, 0x03, 0x41, 0xCC, 0x91, 0xC9, 0x03, - 0x41, 0xCC, 0xA5, 0xB5, 0x03, 0x41, 0xCC, 0xA8, - 0xA5, 0x03, 0x42, 0xCC, 0x87, 0xC9, 0x03, 0x42, - 0xCC, 0xA3, 0xB5, 0x03, 0x42, 0xCC, 0xB1, 0xB5, - 0x03, 0x43, 0xCC, 0x81, 0xC9, 0x03, 0x43, 0xCC, - 0x82, 0xC9, 0x03, 0x43, 0xCC, 0x87, 0xC9, 0x03, - // Bytes 2fc0 - 2fff - 0x43, 0xCC, 0x8C, 0xC9, 0x03, 0x44, 0xCC, 0x87, - 0xC9, 0x03, 0x44, 0xCC, 0x8C, 0xC9, 0x03, 0x44, - 0xCC, 0xA3, 0xB5, 0x03, 0x44, 0xCC, 0xA7, 0xA5, - 0x03, 0x44, 0xCC, 0xAD, 0xB5, 0x03, 0x44, 0xCC, - 0xB1, 0xB5, 0x03, 0x45, 0xCC, 0x80, 0xC9, 0x03, - 0x45, 0xCC, 0x81, 0xC9, 0x03, 0x45, 0xCC, 0x83, - 0xC9, 0x03, 0x45, 0xCC, 0x86, 0xC9, 0x03, 0x45, - 0xCC, 0x87, 0xC9, 0x03, 0x45, 0xCC, 0x88, 0xC9, - // Bytes 3000 - 303f - 0x03, 0x45, 0xCC, 0x89, 0xC9, 0x03, 0x45, 0xCC, - 0x8C, 0xC9, 0x03, 0x45, 0xCC, 0x8F, 0xC9, 0x03, - 0x45, 0xCC, 0x91, 0xC9, 0x03, 0x45, 0xCC, 0xA8, - 0xA5, 0x03, 0x45, 0xCC, 0xAD, 0xB5, 0x03, 0x45, - 0xCC, 0xB0, 0xB5, 0x03, 0x46, 0xCC, 0x87, 0xC9, - 0x03, 0x47, 0xCC, 0x81, 0xC9, 0x03, 0x47, 0xCC, - 0x82, 0xC9, 0x03, 0x47, 0xCC, 0x84, 0xC9, 0x03, - 0x47, 0xCC, 0x86, 0xC9, 0x03, 0x47, 0xCC, 0x87, - // Bytes 3040 - 307f - 0xC9, 0x03, 0x47, 0xCC, 0x8C, 0xC9, 0x03, 0x47, - 0xCC, 0xA7, 0xA5, 0x03, 0x48, 0xCC, 0x82, 0xC9, - 0x03, 0x48, 0xCC, 0x87, 0xC9, 0x03, 0x48, 0xCC, - 0x88, 0xC9, 0x03, 0x48, 0xCC, 0x8C, 0xC9, 0x03, - 0x48, 0xCC, 0xA3, 0xB5, 0x03, 0x48, 0xCC, 0xA7, - 0xA5, 0x03, 0x48, 0xCC, 0xAE, 0xB5, 0x03, 0x49, - 0xCC, 0x80, 0xC9, 0x03, 0x49, 0xCC, 0x81, 0xC9, - 0x03, 0x49, 0xCC, 0x82, 0xC9, 0x03, 0x49, 0xCC, - // Bytes 3080 - 30bf - 0x83, 0xC9, 0x03, 0x49, 0xCC, 0x84, 0xC9, 0x03, - 0x49, 0xCC, 0x86, 0xC9, 0x03, 0x49, 0xCC, 0x87, - 0xC9, 0x03, 0x49, 0xCC, 0x89, 0xC9, 0x03, 0x49, - 0xCC, 0x8C, 0xC9, 0x03, 0x49, 0xCC, 0x8F, 0xC9, - 0x03, 0x49, 0xCC, 0x91, 0xC9, 0x03, 0x49, 0xCC, - 0xA3, 0xB5, 0x03, 0x49, 0xCC, 0xA8, 0xA5, 0x03, - 0x49, 0xCC, 0xB0, 0xB5, 0x03, 0x4A, 0xCC, 0x82, - 0xC9, 0x03, 0x4B, 0xCC, 0x81, 0xC9, 0x03, 0x4B, - // Bytes 30c0 - 30ff - 0xCC, 0x8C, 0xC9, 0x03, 0x4B, 0xCC, 0xA3, 0xB5, - 0x03, 0x4B, 0xCC, 0xA7, 0xA5, 0x03, 0x4B, 0xCC, - 0xB1, 0xB5, 0x03, 0x4C, 0xCC, 0x81, 0xC9, 0x03, - 0x4C, 0xCC, 0x8C, 0xC9, 0x03, 0x4C, 0xCC, 0xA7, - 0xA5, 0x03, 0x4C, 0xCC, 0xAD, 0xB5, 0x03, 0x4C, - 0xCC, 0xB1, 0xB5, 0x03, 0x4D, 0xCC, 0x81, 0xC9, - 0x03, 0x4D, 0xCC, 0x87, 0xC9, 0x03, 0x4D, 0xCC, - 0xA3, 0xB5, 0x03, 0x4E, 0xCC, 0x80, 0xC9, 0x03, - // Bytes 3100 - 313f - 0x4E, 0xCC, 0x81, 0xC9, 0x03, 0x4E, 0xCC, 0x83, - 0xC9, 0x03, 0x4E, 0xCC, 0x87, 0xC9, 0x03, 0x4E, - 0xCC, 0x8C, 0xC9, 0x03, 0x4E, 0xCC, 0xA3, 0xB5, - 0x03, 0x4E, 0xCC, 0xA7, 0xA5, 0x03, 0x4E, 0xCC, - 0xAD, 0xB5, 0x03, 0x4E, 0xCC, 0xB1, 0xB5, 0x03, - 0x4F, 0xCC, 0x80, 0xC9, 0x03, 0x4F, 0xCC, 0x81, - 0xC9, 0x03, 0x4F, 0xCC, 0x86, 0xC9, 0x03, 0x4F, - 0xCC, 0x89, 0xC9, 0x03, 0x4F, 0xCC, 0x8B, 0xC9, - // Bytes 3140 - 317f - 0x03, 0x4F, 0xCC, 0x8C, 0xC9, 0x03, 0x4F, 0xCC, - 0x8F, 0xC9, 0x03, 0x4F, 0xCC, 0x91, 0xC9, 0x03, - 0x50, 0xCC, 0x81, 0xC9, 0x03, 0x50, 0xCC, 0x87, - 0xC9, 0x03, 0x52, 0xCC, 0x81, 0xC9, 0x03, 0x52, - 0xCC, 0x87, 0xC9, 0x03, 0x52, 0xCC, 0x8C, 0xC9, - 0x03, 0x52, 0xCC, 0x8F, 0xC9, 0x03, 0x52, 0xCC, - 0x91, 0xC9, 0x03, 0x52, 0xCC, 0xA7, 0xA5, 0x03, - 0x52, 0xCC, 0xB1, 0xB5, 0x03, 0x53, 0xCC, 0x82, - // Bytes 3180 - 31bf - 0xC9, 0x03, 0x53, 0xCC, 0x87, 0xC9, 0x03, 0x53, - 0xCC, 0xA6, 0xB5, 0x03, 0x53, 0xCC, 0xA7, 0xA5, - 0x03, 0x54, 0xCC, 0x87, 0xC9, 0x03, 0x54, 0xCC, - 0x8C, 0xC9, 0x03, 0x54, 0xCC, 0xA3, 0xB5, 0x03, - 0x54, 0xCC, 0xA6, 0xB5, 0x03, 0x54, 0xCC, 0xA7, - 0xA5, 0x03, 0x54, 0xCC, 0xAD, 0xB5, 0x03, 0x54, - 0xCC, 0xB1, 0xB5, 0x03, 0x55, 0xCC, 0x80, 0xC9, - 0x03, 0x55, 0xCC, 0x81, 0xC9, 0x03, 0x55, 0xCC, - // Bytes 31c0 - 31ff - 0x82, 0xC9, 0x03, 0x55, 0xCC, 0x86, 0xC9, 0x03, - 0x55, 0xCC, 0x89, 0xC9, 0x03, 0x55, 0xCC, 0x8A, - 0xC9, 0x03, 0x55, 0xCC, 0x8B, 0xC9, 0x03, 0x55, - 0xCC, 0x8C, 0xC9, 0x03, 0x55, 0xCC, 0x8F, 0xC9, - 0x03, 0x55, 0xCC, 0x91, 0xC9, 0x03, 0x55, 0xCC, - 0xA3, 0xB5, 0x03, 0x55, 0xCC, 0xA4, 0xB5, 0x03, - 0x55, 0xCC, 0xA8, 0xA5, 0x03, 0x55, 0xCC, 0xAD, - 0xB5, 0x03, 0x55, 0xCC, 0xB0, 0xB5, 0x03, 0x56, - // Bytes 3200 - 323f - 0xCC, 0x83, 0xC9, 0x03, 0x56, 0xCC, 0xA3, 0xB5, - 0x03, 0x57, 0xCC, 0x80, 0xC9, 0x03, 0x57, 0xCC, - 0x81, 0xC9, 0x03, 0x57, 0xCC, 0x82, 0xC9, 0x03, - 0x57, 0xCC, 0x87, 0xC9, 0x03, 0x57, 0xCC, 0x88, - 0xC9, 0x03, 0x57, 0xCC, 0xA3, 0xB5, 0x03, 0x58, - 0xCC, 0x87, 0xC9, 0x03, 0x58, 0xCC, 0x88, 0xC9, - 0x03, 0x59, 0xCC, 0x80, 0xC9, 0x03, 0x59, 0xCC, - 0x81, 0xC9, 0x03, 0x59, 0xCC, 0x82, 0xC9, 0x03, - // Bytes 3240 - 327f - 0x59, 0xCC, 0x83, 0xC9, 0x03, 0x59, 0xCC, 0x84, - 0xC9, 0x03, 0x59, 0xCC, 0x87, 0xC9, 0x03, 0x59, - 0xCC, 0x88, 0xC9, 0x03, 0x59, 0xCC, 0x89, 0xC9, - 0x03, 0x59, 0xCC, 0xA3, 0xB5, 0x03, 0x5A, 0xCC, - 0x81, 0xC9, 0x03, 0x5A, 0xCC, 0x82, 0xC9, 0x03, - 0x5A, 0xCC, 0x87, 0xC9, 0x03, 0x5A, 0xCC, 0x8C, - 0xC9, 0x03, 0x5A, 0xCC, 0xA3, 0xB5, 0x03, 0x5A, - 0xCC, 0xB1, 0xB5, 0x03, 0x61, 0xCC, 0x80, 0xC9, - // Bytes 3280 - 32bf - 0x03, 0x61, 0xCC, 0x81, 0xC9, 0x03, 0x61, 0xCC, - 0x83, 0xC9, 0x03, 0x61, 0xCC, 0x84, 0xC9, 0x03, - 0x61, 0xCC, 0x89, 0xC9, 0x03, 0x61, 0xCC, 0x8C, - 0xC9, 0x03, 0x61, 0xCC, 0x8F, 0xC9, 0x03, 0x61, - 0xCC, 0x91, 0xC9, 0x03, 0x61, 0xCC, 0xA5, 0xB5, - 0x03, 0x61, 0xCC, 0xA8, 0xA5, 0x03, 0x62, 0xCC, - 0x87, 0xC9, 0x03, 0x62, 0xCC, 0xA3, 0xB5, 0x03, - 0x62, 0xCC, 0xB1, 0xB5, 0x03, 0x63, 0xCC, 0x81, - // Bytes 32c0 - 32ff - 0xC9, 0x03, 0x63, 0xCC, 0x82, 0xC9, 0x03, 0x63, - 0xCC, 0x87, 0xC9, 0x03, 0x63, 0xCC, 0x8C, 0xC9, - 0x03, 0x64, 0xCC, 0x87, 0xC9, 0x03, 0x64, 0xCC, - 0x8C, 0xC9, 0x03, 0x64, 0xCC, 0xA3, 0xB5, 0x03, - 0x64, 0xCC, 0xA7, 0xA5, 0x03, 0x64, 0xCC, 0xAD, - 0xB5, 0x03, 0x64, 0xCC, 0xB1, 0xB5, 0x03, 0x65, - 0xCC, 0x80, 0xC9, 0x03, 0x65, 0xCC, 0x81, 0xC9, - 0x03, 0x65, 0xCC, 0x83, 0xC9, 0x03, 0x65, 0xCC, - // Bytes 3300 - 333f - 0x86, 0xC9, 0x03, 0x65, 0xCC, 0x87, 0xC9, 0x03, - 0x65, 0xCC, 0x88, 0xC9, 0x03, 0x65, 0xCC, 0x89, - 0xC9, 0x03, 0x65, 0xCC, 0x8C, 0xC9, 0x03, 0x65, - 0xCC, 0x8F, 0xC9, 0x03, 0x65, 0xCC, 0x91, 0xC9, - 0x03, 0x65, 0xCC, 0xA8, 0xA5, 0x03, 0x65, 0xCC, - 0xAD, 0xB5, 0x03, 0x65, 0xCC, 0xB0, 0xB5, 0x03, - 0x66, 0xCC, 0x87, 0xC9, 0x03, 0x67, 0xCC, 0x81, - 0xC9, 0x03, 0x67, 0xCC, 0x82, 0xC9, 0x03, 0x67, - // Bytes 3340 - 337f - 0xCC, 0x84, 0xC9, 0x03, 0x67, 0xCC, 0x86, 0xC9, - 0x03, 0x67, 0xCC, 0x87, 0xC9, 0x03, 0x67, 0xCC, - 0x8C, 0xC9, 0x03, 0x67, 0xCC, 0xA7, 0xA5, 0x03, - 0x68, 0xCC, 0x82, 0xC9, 0x03, 0x68, 0xCC, 0x87, - 0xC9, 0x03, 0x68, 0xCC, 0x88, 0xC9, 0x03, 0x68, - 0xCC, 0x8C, 0xC9, 0x03, 0x68, 0xCC, 0xA3, 0xB5, - 0x03, 0x68, 0xCC, 0xA7, 0xA5, 0x03, 0x68, 0xCC, - 0xAE, 0xB5, 0x03, 0x68, 0xCC, 0xB1, 0xB5, 0x03, - // Bytes 3380 - 33bf - 0x69, 0xCC, 0x80, 0xC9, 0x03, 0x69, 0xCC, 0x81, - 0xC9, 0x03, 0x69, 0xCC, 0x82, 0xC9, 0x03, 0x69, - 0xCC, 0x83, 0xC9, 0x03, 0x69, 0xCC, 0x84, 0xC9, - 0x03, 0x69, 0xCC, 0x86, 0xC9, 0x03, 0x69, 0xCC, - 0x89, 0xC9, 0x03, 0x69, 0xCC, 0x8C, 0xC9, 0x03, - 0x69, 0xCC, 0x8F, 0xC9, 0x03, 0x69, 0xCC, 0x91, - 0xC9, 0x03, 0x69, 0xCC, 0xA3, 0xB5, 0x03, 0x69, - 0xCC, 0xA8, 0xA5, 0x03, 0x69, 0xCC, 0xB0, 0xB5, - // Bytes 33c0 - 33ff - 0x03, 0x6A, 0xCC, 0x82, 0xC9, 0x03, 0x6A, 0xCC, - 0x8C, 0xC9, 0x03, 0x6B, 0xCC, 0x81, 0xC9, 0x03, - 0x6B, 0xCC, 0x8C, 0xC9, 0x03, 0x6B, 0xCC, 0xA3, - 0xB5, 0x03, 0x6B, 0xCC, 0xA7, 0xA5, 0x03, 0x6B, - 0xCC, 0xB1, 0xB5, 0x03, 0x6C, 0xCC, 0x81, 0xC9, - 0x03, 0x6C, 0xCC, 0x8C, 0xC9, 0x03, 0x6C, 0xCC, - 0xA7, 0xA5, 0x03, 0x6C, 0xCC, 0xAD, 0xB5, 0x03, - 0x6C, 0xCC, 0xB1, 0xB5, 0x03, 0x6D, 0xCC, 0x81, - // Bytes 3400 - 343f - 0xC9, 0x03, 0x6D, 0xCC, 0x87, 0xC9, 0x03, 0x6D, - 0xCC, 0xA3, 0xB5, 0x03, 0x6E, 0xCC, 0x80, 0xC9, - 0x03, 0x6E, 0xCC, 0x81, 0xC9, 0x03, 0x6E, 0xCC, - 0x83, 0xC9, 0x03, 0x6E, 0xCC, 0x87, 0xC9, 0x03, - 0x6E, 0xCC, 0x8C, 0xC9, 0x03, 0x6E, 0xCC, 0xA3, - 0xB5, 0x03, 0x6E, 0xCC, 0xA7, 0xA5, 0x03, 0x6E, - 0xCC, 0xAD, 0xB5, 0x03, 0x6E, 0xCC, 0xB1, 0xB5, - 0x03, 0x6F, 0xCC, 0x80, 0xC9, 0x03, 0x6F, 0xCC, - // Bytes 3440 - 347f - 0x81, 0xC9, 0x03, 0x6F, 0xCC, 0x86, 0xC9, 0x03, - 0x6F, 0xCC, 0x89, 0xC9, 0x03, 0x6F, 0xCC, 0x8B, - 0xC9, 0x03, 0x6F, 0xCC, 0x8C, 0xC9, 0x03, 0x6F, - 0xCC, 0x8F, 0xC9, 0x03, 0x6F, 0xCC, 0x91, 0xC9, - 0x03, 0x70, 0xCC, 0x81, 0xC9, 0x03, 0x70, 0xCC, - 0x87, 0xC9, 0x03, 0x72, 0xCC, 0x81, 0xC9, 0x03, - 0x72, 0xCC, 0x87, 0xC9, 0x03, 0x72, 0xCC, 0x8C, - 0xC9, 0x03, 0x72, 0xCC, 0x8F, 0xC9, 0x03, 0x72, - // Bytes 3480 - 34bf - 0xCC, 0x91, 0xC9, 0x03, 0x72, 0xCC, 0xA7, 0xA5, - 0x03, 0x72, 0xCC, 0xB1, 0xB5, 0x03, 0x73, 0xCC, - 0x82, 0xC9, 0x03, 0x73, 0xCC, 0x87, 0xC9, 0x03, - 0x73, 0xCC, 0xA6, 0xB5, 0x03, 0x73, 0xCC, 0xA7, - 0xA5, 0x03, 0x74, 0xCC, 0x87, 0xC9, 0x03, 0x74, - 0xCC, 0x88, 0xC9, 0x03, 0x74, 0xCC, 0x8C, 0xC9, - 0x03, 0x74, 0xCC, 0xA3, 0xB5, 0x03, 0x74, 0xCC, - 0xA6, 0xB5, 0x03, 0x74, 0xCC, 0xA7, 0xA5, 0x03, - // Bytes 34c0 - 34ff - 0x74, 0xCC, 0xAD, 0xB5, 0x03, 0x74, 0xCC, 0xB1, - 0xB5, 0x03, 0x75, 0xCC, 0x80, 0xC9, 0x03, 0x75, - 0xCC, 0x81, 0xC9, 0x03, 0x75, 0xCC, 0x82, 0xC9, - 0x03, 0x75, 0xCC, 0x86, 0xC9, 0x03, 0x75, 0xCC, - 0x89, 0xC9, 0x03, 0x75, 0xCC, 0x8A, 0xC9, 0x03, - 0x75, 0xCC, 0x8B, 0xC9, 0x03, 0x75, 0xCC, 0x8C, - 0xC9, 0x03, 0x75, 0xCC, 0x8F, 0xC9, 0x03, 0x75, - 0xCC, 0x91, 0xC9, 0x03, 0x75, 0xCC, 0xA3, 0xB5, - // Bytes 3500 - 353f - 0x03, 0x75, 0xCC, 0xA4, 0xB5, 0x03, 0x75, 0xCC, - 0xA8, 0xA5, 0x03, 0x75, 0xCC, 0xAD, 0xB5, 0x03, - 0x75, 0xCC, 0xB0, 0xB5, 0x03, 0x76, 0xCC, 0x83, - 0xC9, 0x03, 0x76, 0xCC, 0xA3, 0xB5, 0x03, 0x77, - 0xCC, 0x80, 0xC9, 0x03, 0x77, 0xCC, 0x81, 0xC9, - 0x03, 0x77, 0xCC, 0x82, 0xC9, 0x03, 0x77, 0xCC, - 0x87, 0xC9, 0x03, 0x77, 0xCC, 0x88, 0xC9, 0x03, - 0x77, 0xCC, 0x8A, 0xC9, 0x03, 0x77, 0xCC, 0xA3, - // Bytes 3540 - 357f - 0xB5, 0x03, 0x78, 0xCC, 0x87, 0xC9, 0x03, 0x78, - 0xCC, 0x88, 0xC9, 0x03, 0x79, 0xCC, 0x80, 0xC9, - 0x03, 0x79, 0xCC, 0x81, 0xC9, 0x03, 0x79, 0xCC, - 0x82, 0xC9, 0x03, 0x79, 0xCC, 0x83, 0xC9, 0x03, - 0x79, 0xCC, 0x84, 0xC9, 0x03, 0x79, 0xCC, 0x87, - 0xC9, 0x03, 0x79, 0xCC, 0x88, 0xC9, 0x03, 0x79, - 0xCC, 0x89, 0xC9, 0x03, 0x79, 0xCC, 0x8A, 0xC9, - 0x03, 0x79, 0xCC, 0xA3, 0xB5, 0x03, 0x7A, 0xCC, - // Bytes 3580 - 35bf - 0x81, 0xC9, 0x03, 0x7A, 0xCC, 0x82, 0xC9, 0x03, - 0x7A, 0xCC, 0x87, 0xC9, 0x03, 0x7A, 0xCC, 0x8C, - 0xC9, 0x03, 0x7A, 0xCC, 0xA3, 0xB5, 0x03, 0x7A, - 0xCC, 0xB1, 0xB5, 0x04, 0xC2, 0xA8, 0xCC, 0x80, - 0xCA, 0x04, 0xC2, 0xA8, 0xCC, 0x81, 0xCA, 0x04, - 0xC2, 0xA8, 0xCD, 0x82, 0xCA, 0x04, 0xC3, 0x86, - 0xCC, 0x81, 0xC9, 0x04, 0xC3, 0x86, 0xCC, 0x84, - 0xC9, 0x04, 0xC3, 0x98, 0xCC, 0x81, 0xC9, 0x04, - // Bytes 35c0 - 35ff - 0xC3, 0xA6, 0xCC, 0x81, 0xC9, 0x04, 0xC3, 0xA6, - 0xCC, 0x84, 0xC9, 0x04, 0xC3, 0xB8, 0xCC, 0x81, - 0xC9, 0x04, 0xC5, 0xBF, 0xCC, 0x87, 0xC9, 0x04, - 0xC6, 0xB7, 0xCC, 0x8C, 0xC9, 0x04, 0xCA, 0x92, - 0xCC, 0x8C, 0xC9, 0x04, 0xCE, 0x91, 0xCC, 0x80, - 0xC9, 0x04, 0xCE, 0x91, 0xCC, 0x81, 0xC9, 0x04, - 0xCE, 0x91, 0xCC, 0x84, 0xC9, 0x04, 0xCE, 0x91, - 0xCC, 0x86, 0xC9, 0x04, 0xCE, 0x91, 0xCD, 0x85, - // Bytes 3600 - 363f - 0xD9, 0x04, 0xCE, 0x95, 0xCC, 0x80, 0xC9, 0x04, - 0xCE, 0x95, 0xCC, 0x81, 0xC9, 0x04, 0xCE, 0x97, - 0xCC, 0x80, 0xC9, 0x04, 0xCE, 0x97, 0xCC, 0x81, - 0xC9, 0x04, 0xCE, 0x97, 0xCD, 0x85, 0xD9, 0x04, - 0xCE, 0x99, 0xCC, 0x80, 0xC9, 0x04, 0xCE, 0x99, - 0xCC, 0x81, 0xC9, 0x04, 0xCE, 0x99, 0xCC, 0x84, - 0xC9, 0x04, 0xCE, 0x99, 0xCC, 0x86, 0xC9, 0x04, - 0xCE, 0x99, 0xCC, 0x88, 0xC9, 0x04, 0xCE, 0x9F, - // Bytes 3640 - 367f - 0xCC, 0x80, 0xC9, 0x04, 0xCE, 0x9F, 0xCC, 0x81, - 0xC9, 0x04, 0xCE, 0xA1, 0xCC, 0x94, 0xC9, 0x04, - 0xCE, 0xA5, 0xCC, 0x80, 0xC9, 0x04, 0xCE, 0xA5, - 0xCC, 0x81, 0xC9, 0x04, 0xCE, 0xA5, 0xCC, 0x84, - 0xC9, 0x04, 0xCE, 0xA5, 0xCC, 0x86, 0xC9, 0x04, - 0xCE, 0xA5, 0xCC, 0x88, 0xC9, 0x04, 0xCE, 0xA9, - 0xCC, 0x80, 0xC9, 0x04, 0xCE, 0xA9, 0xCC, 0x81, - 0xC9, 0x04, 0xCE, 0xA9, 0xCD, 0x85, 0xD9, 0x04, - // Bytes 3680 - 36bf - 0xCE, 0xB1, 0xCC, 0x84, 0xC9, 0x04, 0xCE, 0xB1, - 0xCC, 0x86, 0xC9, 0x04, 0xCE, 0xB1, 0xCD, 0x85, - 0xD9, 0x04, 0xCE, 0xB5, 0xCC, 0x80, 0xC9, 0x04, - 0xCE, 0xB5, 0xCC, 0x81, 0xC9, 0x04, 0xCE, 0xB7, - 0xCD, 0x85, 0xD9, 0x04, 0xCE, 0xB9, 0xCC, 0x80, - 0xC9, 0x04, 0xCE, 0xB9, 0xCC, 0x81, 0xC9, 0x04, - 0xCE, 0xB9, 0xCC, 0x84, 0xC9, 0x04, 0xCE, 0xB9, - 0xCC, 0x86, 0xC9, 0x04, 0xCE, 0xB9, 0xCD, 0x82, - // Bytes 36c0 - 36ff - 0xC9, 0x04, 0xCE, 0xBF, 0xCC, 0x80, 0xC9, 0x04, - 0xCE, 0xBF, 0xCC, 0x81, 0xC9, 0x04, 0xCF, 0x81, - 0xCC, 0x93, 0xC9, 0x04, 0xCF, 0x81, 0xCC, 0x94, - 0xC9, 0x04, 0xCF, 0x85, 0xCC, 0x80, 0xC9, 0x04, - 0xCF, 0x85, 0xCC, 0x81, 0xC9, 0x04, 0xCF, 0x85, - 0xCC, 0x84, 0xC9, 0x04, 0xCF, 0x85, 0xCC, 0x86, - 0xC9, 0x04, 0xCF, 0x85, 0xCD, 0x82, 0xC9, 0x04, - 0xCF, 0x89, 0xCD, 0x85, 0xD9, 0x04, 0xCF, 0x92, - // Bytes 3700 - 373f - 0xCC, 0x81, 0xC9, 0x04, 0xCF, 0x92, 0xCC, 0x88, - 0xC9, 0x04, 0xD0, 0x86, 0xCC, 0x88, 0xC9, 0x04, - 0xD0, 0x90, 0xCC, 0x86, 0xC9, 0x04, 0xD0, 0x90, - 0xCC, 0x88, 0xC9, 0x04, 0xD0, 0x93, 0xCC, 0x81, - 0xC9, 0x04, 0xD0, 0x95, 0xCC, 0x80, 0xC9, 0x04, - 0xD0, 0x95, 0xCC, 0x86, 0xC9, 0x04, 0xD0, 0x95, - 0xCC, 0x88, 0xC9, 0x04, 0xD0, 0x96, 0xCC, 0x86, - 0xC9, 0x04, 0xD0, 0x96, 0xCC, 0x88, 0xC9, 0x04, - // Bytes 3740 - 377f - 0xD0, 0x97, 0xCC, 0x88, 0xC9, 0x04, 0xD0, 0x98, - 0xCC, 0x80, 0xC9, 0x04, 0xD0, 0x98, 0xCC, 0x84, - 0xC9, 0x04, 0xD0, 0x98, 0xCC, 0x86, 0xC9, 0x04, - 0xD0, 0x98, 0xCC, 0x88, 0xC9, 0x04, 0xD0, 0x9A, - 0xCC, 0x81, 0xC9, 0x04, 0xD0, 0x9E, 0xCC, 0x88, - 0xC9, 0x04, 0xD0, 0xA3, 0xCC, 0x84, 0xC9, 0x04, - 0xD0, 0xA3, 0xCC, 0x86, 0xC9, 0x04, 0xD0, 0xA3, - 0xCC, 0x88, 0xC9, 0x04, 0xD0, 0xA3, 0xCC, 0x8B, - // Bytes 3780 - 37bf - 0xC9, 0x04, 0xD0, 0xA7, 0xCC, 0x88, 0xC9, 0x04, - 0xD0, 0xAB, 0xCC, 0x88, 0xC9, 0x04, 0xD0, 0xAD, - 0xCC, 0x88, 0xC9, 0x04, 0xD0, 0xB0, 0xCC, 0x86, - 0xC9, 0x04, 0xD0, 0xB0, 0xCC, 0x88, 0xC9, 0x04, - 0xD0, 0xB3, 0xCC, 0x81, 0xC9, 0x04, 0xD0, 0xB5, - 0xCC, 0x80, 0xC9, 0x04, 0xD0, 0xB5, 0xCC, 0x86, - 0xC9, 0x04, 0xD0, 0xB5, 0xCC, 0x88, 0xC9, 0x04, - 0xD0, 0xB6, 0xCC, 0x86, 0xC9, 0x04, 0xD0, 0xB6, - // Bytes 37c0 - 37ff - 0xCC, 0x88, 0xC9, 0x04, 0xD0, 0xB7, 0xCC, 0x88, - 0xC9, 0x04, 0xD0, 0xB8, 0xCC, 0x80, 0xC9, 0x04, - 0xD0, 0xB8, 0xCC, 0x84, 0xC9, 0x04, 0xD0, 0xB8, - 0xCC, 0x86, 0xC9, 0x04, 0xD0, 0xB8, 0xCC, 0x88, - 0xC9, 0x04, 0xD0, 0xBA, 0xCC, 0x81, 0xC9, 0x04, - 0xD0, 0xBE, 0xCC, 0x88, 0xC9, 0x04, 0xD1, 0x83, - 0xCC, 0x84, 0xC9, 0x04, 0xD1, 0x83, 0xCC, 0x86, - 0xC9, 0x04, 0xD1, 0x83, 0xCC, 0x88, 0xC9, 0x04, - // Bytes 3800 - 383f - 0xD1, 0x83, 0xCC, 0x8B, 0xC9, 0x04, 0xD1, 0x87, - 0xCC, 0x88, 0xC9, 0x04, 0xD1, 0x8B, 0xCC, 0x88, - 0xC9, 0x04, 0xD1, 0x8D, 0xCC, 0x88, 0xC9, 0x04, - 0xD1, 0x96, 0xCC, 0x88, 0xC9, 0x04, 0xD1, 0xB4, - 0xCC, 0x8F, 0xC9, 0x04, 0xD1, 0xB5, 0xCC, 0x8F, - 0xC9, 0x04, 0xD3, 0x98, 0xCC, 0x88, 0xC9, 0x04, - 0xD3, 0x99, 0xCC, 0x88, 0xC9, 0x04, 0xD3, 0xA8, - 0xCC, 0x88, 0xC9, 0x04, 0xD3, 0xA9, 0xCC, 0x88, - // Bytes 3840 - 387f - 0xC9, 0x04, 0xD8, 0xA7, 0xD9, 0x93, 0xC9, 0x04, - 0xD8, 0xA7, 0xD9, 0x94, 0xC9, 0x04, 0xD8, 0xA7, - 0xD9, 0x95, 0xB5, 0x04, 0xD9, 0x88, 0xD9, 0x94, - 0xC9, 0x04, 0xD9, 0x8A, 0xD9, 0x94, 0xC9, 0x04, - 0xDB, 0x81, 0xD9, 0x94, 0xC9, 0x04, 0xDB, 0x92, - 0xD9, 0x94, 0xC9, 0x04, 0xDB, 0x95, 0xD9, 0x94, - 0xC9, 0x05, 0x41, 0xCC, 0x82, 0xCC, 0x80, 0xCA, - 0x05, 0x41, 0xCC, 0x82, 0xCC, 0x81, 0xCA, 0x05, - // Bytes 3880 - 38bf - 0x41, 0xCC, 0x82, 0xCC, 0x83, 0xCA, 0x05, 0x41, - 0xCC, 0x82, 0xCC, 0x89, 0xCA, 0x05, 0x41, 0xCC, - 0x86, 0xCC, 0x80, 0xCA, 0x05, 0x41, 0xCC, 0x86, - 0xCC, 0x81, 0xCA, 0x05, 0x41, 0xCC, 0x86, 0xCC, - 0x83, 0xCA, 0x05, 0x41, 0xCC, 0x86, 0xCC, 0x89, - 0xCA, 0x05, 0x41, 0xCC, 0x87, 0xCC, 0x84, 0xCA, - 0x05, 0x41, 0xCC, 0x88, 0xCC, 0x84, 0xCA, 0x05, - 0x41, 0xCC, 0x8A, 0xCC, 0x81, 0xCA, 0x05, 0x41, - // Bytes 38c0 - 38ff - 0xCC, 0xA3, 0xCC, 0x82, 0xCA, 0x05, 0x41, 0xCC, - 0xA3, 0xCC, 0x86, 0xCA, 0x05, 0x43, 0xCC, 0xA7, - 0xCC, 0x81, 0xCA, 0x05, 0x45, 0xCC, 0x82, 0xCC, - 0x80, 0xCA, 0x05, 0x45, 0xCC, 0x82, 0xCC, 0x81, - 0xCA, 0x05, 0x45, 0xCC, 0x82, 0xCC, 0x83, 0xCA, - 0x05, 0x45, 0xCC, 0x82, 0xCC, 0x89, 0xCA, 0x05, - 0x45, 0xCC, 0x84, 0xCC, 0x80, 0xCA, 0x05, 0x45, - 0xCC, 0x84, 0xCC, 0x81, 0xCA, 0x05, 0x45, 0xCC, - // Bytes 3900 - 393f - 0xA3, 0xCC, 0x82, 0xCA, 0x05, 0x45, 0xCC, 0xA7, - 0xCC, 0x86, 0xCA, 0x05, 0x49, 0xCC, 0x88, 0xCC, - 0x81, 0xCA, 0x05, 0x4C, 0xCC, 0xA3, 0xCC, 0x84, - 0xCA, 0x05, 0x4F, 0xCC, 0x82, 0xCC, 0x80, 0xCA, - 0x05, 0x4F, 0xCC, 0x82, 0xCC, 0x81, 0xCA, 0x05, - 0x4F, 0xCC, 0x82, 0xCC, 0x83, 0xCA, 0x05, 0x4F, - 0xCC, 0x82, 0xCC, 0x89, 0xCA, 0x05, 0x4F, 0xCC, - 0x83, 0xCC, 0x81, 0xCA, 0x05, 0x4F, 0xCC, 0x83, - // Bytes 3940 - 397f - 0xCC, 0x84, 0xCA, 0x05, 0x4F, 0xCC, 0x83, 0xCC, - 0x88, 0xCA, 0x05, 0x4F, 0xCC, 0x84, 0xCC, 0x80, - 0xCA, 0x05, 0x4F, 0xCC, 0x84, 0xCC, 0x81, 0xCA, - 0x05, 0x4F, 0xCC, 0x87, 0xCC, 0x84, 0xCA, 0x05, - 0x4F, 0xCC, 0x88, 0xCC, 0x84, 0xCA, 0x05, 0x4F, - 0xCC, 0x9B, 0xCC, 0x80, 0xCA, 0x05, 0x4F, 0xCC, - 0x9B, 0xCC, 0x81, 0xCA, 0x05, 0x4F, 0xCC, 0x9B, - 0xCC, 0x83, 0xCA, 0x05, 0x4F, 0xCC, 0x9B, 0xCC, - // Bytes 3980 - 39bf - 0x89, 0xCA, 0x05, 0x4F, 0xCC, 0x9B, 0xCC, 0xA3, - 0xB6, 0x05, 0x4F, 0xCC, 0xA3, 0xCC, 0x82, 0xCA, - 0x05, 0x4F, 0xCC, 0xA8, 0xCC, 0x84, 0xCA, 0x05, - 0x52, 0xCC, 0xA3, 0xCC, 0x84, 0xCA, 0x05, 0x53, - 0xCC, 0x81, 0xCC, 0x87, 0xCA, 0x05, 0x53, 0xCC, - 0x8C, 0xCC, 0x87, 0xCA, 0x05, 0x53, 0xCC, 0xA3, - 0xCC, 0x87, 0xCA, 0x05, 0x55, 0xCC, 0x83, 0xCC, - 0x81, 0xCA, 0x05, 0x55, 0xCC, 0x84, 0xCC, 0x88, - // Bytes 39c0 - 39ff - 0xCA, 0x05, 0x55, 0xCC, 0x88, 0xCC, 0x80, 0xCA, - 0x05, 0x55, 0xCC, 0x88, 0xCC, 0x81, 0xCA, 0x05, - 0x55, 0xCC, 0x88, 0xCC, 0x84, 0xCA, 0x05, 0x55, - 0xCC, 0x88, 0xCC, 0x8C, 0xCA, 0x05, 0x55, 0xCC, - 0x9B, 0xCC, 0x80, 0xCA, 0x05, 0x55, 0xCC, 0x9B, - 0xCC, 0x81, 0xCA, 0x05, 0x55, 0xCC, 0x9B, 0xCC, - 0x83, 0xCA, 0x05, 0x55, 0xCC, 0x9B, 0xCC, 0x89, - 0xCA, 0x05, 0x55, 0xCC, 0x9B, 0xCC, 0xA3, 0xB6, - // Bytes 3a00 - 3a3f - 0x05, 0x61, 0xCC, 0x82, 0xCC, 0x80, 0xCA, 0x05, - 0x61, 0xCC, 0x82, 0xCC, 0x81, 0xCA, 0x05, 0x61, - 0xCC, 0x82, 0xCC, 0x83, 0xCA, 0x05, 0x61, 0xCC, - 0x82, 0xCC, 0x89, 0xCA, 0x05, 0x61, 0xCC, 0x86, - 0xCC, 0x80, 0xCA, 0x05, 0x61, 0xCC, 0x86, 0xCC, - 0x81, 0xCA, 0x05, 0x61, 0xCC, 0x86, 0xCC, 0x83, - 0xCA, 0x05, 0x61, 0xCC, 0x86, 0xCC, 0x89, 0xCA, - 0x05, 0x61, 0xCC, 0x87, 0xCC, 0x84, 0xCA, 0x05, - // Bytes 3a40 - 3a7f - 0x61, 0xCC, 0x88, 0xCC, 0x84, 0xCA, 0x05, 0x61, - 0xCC, 0x8A, 0xCC, 0x81, 0xCA, 0x05, 0x61, 0xCC, - 0xA3, 0xCC, 0x82, 0xCA, 0x05, 0x61, 0xCC, 0xA3, - 0xCC, 0x86, 0xCA, 0x05, 0x63, 0xCC, 0xA7, 0xCC, - 0x81, 0xCA, 0x05, 0x65, 0xCC, 0x82, 0xCC, 0x80, - 0xCA, 0x05, 0x65, 0xCC, 0x82, 0xCC, 0x81, 0xCA, - 0x05, 0x65, 0xCC, 0x82, 0xCC, 0x83, 0xCA, 0x05, - 0x65, 0xCC, 0x82, 0xCC, 0x89, 0xCA, 0x05, 0x65, - // Bytes 3a80 - 3abf - 0xCC, 0x84, 0xCC, 0x80, 0xCA, 0x05, 0x65, 0xCC, - 0x84, 0xCC, 0x81, 0xCA, 0x05, 0x65, 0xCC, 0xA3, - 0xCC, 0x82, 0xCA, 0x05, 0x65, 0xCC, 0xA7, 0xCC, - 0x86, 0xCA, 0x05, 0x69, 0xCC, 0x88, 0xCC, 0x81, - 0xCA, 0x05, 0x6C, 0xCC, 0xA3, 0xCC, 0x84, 0xCA, - 0x05, 0x6F, 0xCC, 0x82, 0xCC, 0x80, 0xCA, 0x05, - 0x6F, 0xCC, 0x82, 0xCC, 0x81, 0xCA, 0x05, 0x6F, - 0xCC, 0x82, 0xCC, 0x83, 0xCA, 0x05, 0x6F, 0xCC, - // Bytes 3ac0 - 3aff - 0x82, 0xCC, 0x89, 0xCA, 0x05, 0x6F, 0xCC, 0x83, - 0xCC, 0x81, 0xCA, 0x05, 0x6F, 0xCC, 0x83, 0xCC, - 0x84, 0xCA, 0x05, 0x6F, 0xCC, 0x83, 0xCC, 0x88, - 0xCA, 0x05, 0x6F, 0xCC, 0x84, 0xCC, 0x80, 0xCA, - 0x05, 0x6F, 0xCC, 0x84, 0xCC, 0x81, 0xCA, 0x05, - 0x6F, 0xCC, 0x87, 0xCC, 0x84, 0xCA, 0x05, 0x6F, - 0xCC, 0x88, 0xCC, 0x84, 0xCA, 0x05, 0x6F, 0xCC, - 0x9B, 0xCC, 0x80, 0xCA, 0x05, 0x6F, 0xCC, 0x9B, - // Bytes 3b00 - 3b3f - 0xCC, 0x81, 0xCA, 0x05, 0x6F, 0xCC, 0x9B, 0xCC, - 0x83, 0xCA, 0x05, 0x6F, 0xCC, 0x9B, 0xCC, 0x89, - 0xCA, 0x05, 0x6F, 0xCC, 0x9B, 0xCC, 0xA3, 0xB6, - 0x05, 0x6F, 0xCC, 0xA3, 0xCC, 0x82, 0xCA, 0x05, - 0x6F, 0xCC, 0xA8, 0xCC, 0x84, 0xCA, 0x05, 0x72, - 0xCC, 0xA3, 0xCC, 0x84, 0xCA, 0x05, 0x73, 0xCC, - 0x81, 0xCC, 0x87, 0xCA, 0x05, 0x73, 0xCC, 0x8C, - 0xCC, 0x87, 0xCA, 0x05, 0x73, 0xCC, 0xA3, 0xCC, - // Bytes 3b40 - 3b7f - 0x87, 0xCA, 0x05, 0x75, 0xCC, 0x83, 0xCC, 0x81, - 0xCA, 0x05, 0x75, 0xCC, 0x84, 0xCC, 0x88, 0xCA, - 0x05, 0x75, 0xCC, 0x88, 0xCC, 0x80, 0xCA, 0x05, - 0x75, 0xCC, 0x88, 0xCC, 0x81, 0xCA, 0x05, 0x75, - 0xCC, 0x88, 0xCC, 0x84, 0xCA, 0x05, 0x75, 0xCC, - 0x88, 0xCC, 0x8C, 0xCA, 0x05, 0x75, 0xCC, 0x9B, - 0xCC, 0x80, 0xCA, 0x05, 0x75, 0xCC, 0x9B, 0xCC, - 0x81, 0xCA, 0x05, 0x75, 0xCC, 0x9B, 0xCC, 0x83, - // Bytes 3b80 - 3bbf - 0xCA, 0x05, 0x75, 0xCC, 0x9B, 0xCC, 0x89, 0xCA, - 0x05, 0x75, 0xCC, 0x9B, 0xCC, 0xA3, 0xB6, 0x05, - 0xE1, 0xBE, 0xBF, 0xCC, 0x80, 0xCA, 0x05, 0xE1, - 0xBE, 0xBF, 0xCC, 0x81, 0xCA, 0x05, 0xE1, 0xBE, - 0xBF, 0xCD, 0x82, 0xCA, 0x05, 0xE1, 0xBF, 0xBE, - 0xCC, 0x80, 0xCA, 0x05, 0xE1, 0xBF, 0xBE, 0xCC, - 0x81, 0xCA, 0x05, 0xE1, 0xBF, 0xBE, 0xCD, 0x82, - 0xCA, 0x05, 0xE2, 0x86, 0x90, 0xCC, 0xB8, 0x05, - // Bytes 3bc0 - 3bff - 0x05, 0xE2, 0x86, 0x92, 0xCC, 0xB8, 0x05, 0x05, - 0xE2, 0x86, 0x94, 0xCC, 0xB8, 0x05, 0x05, 0xE2, - 0x87, 0x90, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x87, - 0x92, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x87, 0x94, - 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x88, 0x83, 0xCC, - 0xB8, 0x05, 0x05, 0xE2, 0x88, 0x88, 0xCC, 0xB8, - 0x05, 0x05, 0xE2, 0x88, 0x8B, 0xCC, 0xB8, 0x05, - 0x05, 0xE2, 0x88, 0xA3, 0xCC, 0xB8, 0x05, 0x05, - // Bytes 3c00 - 3c3f - 0xE2, 0x88, 0xA5, 0xCC, 0xB8, 0x05, 0x05, 0xE2, - 0x88, 0xBC, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89, - 0x83, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89, 0x85, - 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89, 0x88, 0xCC, - 0xB8, 0x05, 0x05, 0xE2, 0x89, 0x8D, 0xCC, 0xB8, - 0x05, 0x05, 0xE2, 0x89, 0xA1, 0xCC, 0xB8, 0x05, - 0x05, 0xE2, 0x89, 0xA4, 0xCC, 0xB8, 0x05, 0x05, - 0xE2, 0x89, 0xA5, 0xCC, 0xB8, 0x05, 0x05, 0xE2, - // Bytes 3c40 - 3c7f - 0x89, 0xB2, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89, - 0xB3, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89, 0xB6, - 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89, 0xB7, 0xCC, - 0xB8, 0x05, 0x05, 0xE2, 0x89, 0xBA, 0xCC, 0xB8, - 0x05, 0x05, 0xE2, 0x89, 0xBB, 0xCC, 0xB8, 0x05, - 0x05, 0xE2, 0x89, 0xBC, 0xCC, 0xB8, 0x05, 0x05, - 0xE2, 0x89, 0xBD, 0xCC, 0xB8, 0x05, 0x05, 0xE2, - 0x8A, 0x82, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A, - // Bytes 3c80 - 3cbf - 0x83, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A, 0x86, - 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A, 0x87, 0xCC, - 0xB8, 0x05, 0x05, 0xE2, 0x8A, 0x91, 0xCC, 0xB8, - 0x05, 0x05, 0xE2, 0x8A, 0x92, 0xCC, 0xB8, 0x05, - 0x05, 0xE2, 0x8A, 0xA2, 0xCC, 0xB8, 0x05, 0x05, - 0xE2, 0x8A, 0xA8, 0xCC, 0xB8, 0x05, 0x05, 0xE2, - 0x8A, 0xA9, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A, - 0xAB, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A, 0xB2, - // Bytes 3cc0 - 3cff - 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A, 0xB3, 0xCC, - 0xB8, 0x05, 0x05, 0xE2, 0x8A, 0xB4, 0xCC, 0xB8, - 0x05, 0x05, 0xE2, 0x8A, 0xB5, 0xCC, 0xB8, 0x05, - 0x06, 0xCE, 0x91, 0xCC, 0x93, 0xCD, 0x85, 0xDA, - 0x06, 0xCE, 0x91, 0xCC, 0x94, 0xCD, 0x85, 0xDA, - 0x06, 0xCE, 0x95, 0xCC, 0x93, 0xCC, 0x80, 0xCA, - 0x06, 0xCE, 0x95, 0xCC, 0x93, 0xCC, 0x81, 0xCA, - 0x06, 0xCE, 0x95, 0xCC, 0x94, 0xCC, 0x80, 0xCA, - // Bytes 3d00 - 3d3f - 0x06, 0xCE, 0x95, 0xCC, 0x94, 0xCC, 0x81, 0xCA, - 0x06, 0xCE, 0x97, 0xCC, 0x93, 0xCD, 0x85, 0xDA, - 0x06, 0xCE, 0x97, 0xCC, 0x94, 0xCD, 0x85, 0xDA, - 0x06, 0xCE, 0x99, 0xCC, 0x93, 0xCC, 0x80, 0xCA, - 0x06, 0xCE, 0x99, 0xCC, 0x93, 0xCC, 0x81, 0xCA, - 0x06, 0xCE, 0x99, 0xCC, 0x93, 0xCD, 0x82, 0xCA, - 0x06, 0xCE, 0x99, 0xCC, 0x94, 0xCC, 0x80, 0xCA, - 0x06, 0xCE, 0x99, 0xCC, 0x94, 0xCC, 0x81, 0xCA, - // Bytes 3d40 - 3d7f - 0x06, 0xCE, 0x99, 0xCC, 0x94, 0xCD, 0x82, 0xCA, - 0x06, 0xCE, 0x9F, 0xCC, 0x93, 0xCC, 0x80, 0xCA, - 0x06, 0xCE, 0x9F, 0xCC, 0x93, 0xCC, 0x81, 0xCA, - 0x06, 0xCE, 0x9F, 0xCC, 0x94, 0xCC, 0x80, 0xCA, - 0x06, 0xCE, 0x9F, 0xCC, 0x94, 0xCC, 0x81, 0xCA, - 0x06, 0xCE, 0xA5, 0xCC, 0x94, 0xCC, 0x80, 0xCA, - 0x06, 0xCE, 0xA5, 0xCC, 0x94, 0xCC, 0x81, 0xCA, - 0x06, 0xCE, 0xA5, 0xCC, 0x94, 0xCD, 0x82, 0xCA, - // Bytes 3d80 - 3dbf - 0x06, 0xCE, 0xA9, 0xCC, 0x93, 0xCD, 0x85, 0xDA, - 0x06, 0xCE, 0xA9, 0xCC, 0x94, 0xCD, 0x85, 0xDA, - 0x06, 0xCE, 0xB1, 0xCC, 0x80, 0xCD, 0x85, 0xDA, - 0x06, 0xCE, 0xB1, 0xCC, 0x81, 0xCD, 0x85, 0xDA, - 0x06, 0xCE, 0xB1, 0xCC, 0x93, 0xCD, 0x85, 0xDA, - 0x06, 0xCE, 0xB1, 0xCC, 0x94, 0xCD, 0x85, 0xDA, - 0x06, 0xCE, 0xB1, 0xCD, 0x82, 0xCD, 0x85, 0xDA, - 0x06, 0xCE, 0xB5, 0xCC, 0x93, 0xCC, 0x80, 0xCA, - // Bytes 3dc0 - 3dff - 0x06, 0xCE, 0xB5, 0xCC, 0x93, 0xCC, 0x81, 0xCA, - 0x06, 0xCE, 0xB5, 0xCC, 0x94, 0xCC, 0x80, 0xCA, - 0x06, 0xCE, 0xB5, 0xCC, 0x94, 0xCC, 0x81, 0xCA, - 0x06, 0xCE, 0xB7, 0xCC, 0x80, 0xCD, 0x85, 0xDA, - 0x06, 0xCE, 0xB7, 0xCC, 0x81, 0xCD, 0x85, 0xDA, - 0x06, 0xCE, 0xB7, 0xCC, 0x93, 0xCD, 0x85, 0xDA, - 0x06, 0xCE, 0xB7, 0xCC, 0x94, 0xCD, 0x85, 0xDA, - 0x06, 0xCE, 0xB7, 0xCD, 0x82, 0xCD, 0x85, 0xDA, - // Bytes 3e00 - 3e3f - 0x06, 0xCE, 0xB9, 0xCC, 0x88, 0xCC, 0x80, 0xCA, - 0x06, 0xCE, 0xB9, 0xCC, 0x88, 0xCC, 0x81, 0xCA, - 0x06, 0xCE, 0xB9, 0xCC, 0x88, 0xCD, 0x82, 0xCA, - 0x06, 0xCE, 0xB9, 0xCC, 0x93, 0xCC, 0x80, 0xCA, - 0x06, 0xCE, 0xB9, 0xCC, 0x93, 0xCC, 0x81, 0xCA, - 0x06, 0xCE, 0xB9, 0xCC, 0x93, 0xCD, 0x82, 0xCA, - 0x06, 0xCE, 0xB9, 0xCC, 0x94, 0xCC, 0x80, 0xCA, - 0x06, 0xCE, 0xB9, 0xCC, 0x94, 0xCC, 0x81, 0xCA, - // Bytes 3e40 - 3e7f - 0x06, 0xCE, 0xB9, 0xCC, 0x94, 0xCD, 0x82, 0xCA, - 0x06, 0xCE, 0xBF, 0xCC, 0x93, 0xCC, 0x80, 0xCA, - 0x06, 0xCE, 0xBF, 0xCC, 0x93, 0xCC, 0x81, 0xCA, - 0x06, 0xCE, 0xBF, 0xCC, 0x94, 0xCC, 0x80, 0xCA, - 0x06, 0xCE, 0xBF, 0xCC, 0x94, 0xCC, 0x81, 0xCA, - 0x06, 0xCF, 0x85, 0xCC, 0x88, 0xCC, 0x80, 0xCA, - 0x06, 0xCF, 0x85, 0xCC, 0x88, 0xCC, 0x81, 0xCA, - 0x06, 0xCF, 0x85, 0xCC, 0x88, 0xCD, 0x82, 0xCA, - // Bytes 3e80 - 3ebf - 0x06, 0xCF, 0x85, 0xCC, 0x93, 0xCC, 0x80, 0xCA, - 0x06, 0xCF, 0x85, 0xCC, 0x93, 0xCC, 0x81, 0xCA, - 0x06, 0xCF, 0x85, 0xCC, 0x93, 0xCD, 0x82, 0xCA, - 0x06, 0xCF, 0x85, 0xCC, 0x94, 0xCC, 0x80, 0xCA, - 0x06, 0xCF, 0x85, 0xCC, 0x94, 0xCC, 0x81, 0xCA, - 0x06, 0xCF, 0x85, 0xCC, 0x94, 0xCD, 0x82, 0xCA, - 0x06, 0xCF, 0x89, 0xCC, 0x80, 0xCD, 0x85, 0xDA, - 0x06, 0xCF, 0x89, 0xCC, 0x81, 0xCD, 0x85, 0xDA, - // Bytes 3ec0 - 3eff - 0x06, 0xCF, 0x89, 0xCC, 0x93, 0xCD, 0x85, 0xDA, - 0x06, 0xCF, 0x89, 0xCC, 0x94, 0xCD, 0x85, 0xDA, - 0x06, 0xCF, 0x89, 0xCD, 0x82, 0xCD, 0x85, 0xDA, - 0x06, 0xE0, 0xA4, 0xA8, 0xE0, 0xA4, 0xBC, 0x09, - 0x06, 0xE0, 0xA4, 0xB0, 0xE0, 0xA4, 0xBC, 0x09, - 0x06, 0xE0, 0xA4, 0xB3, 0xE0, 0xA4, 0xBC, 0x09, - 0x06, 0xE0, 0xB1, 0x86, 0xE0, 0xB1, 0x96, 0x85, - 0x06, 0xE0, 0xB7, 0x99, 0xE0, 0xB7, 0x8A, 0x11, - // Bytes 3f00 - 3f3f - 0x06, 0xE3, 0x81, 0x86, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x81, 0x8B, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x81, 0x8D, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x81, 0x8F, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x81, 0x91, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x81, 0x93, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x81, 0x95, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x81, 0x97, 0xE3, 0x82, 0x99, 0x0D, - // Bytes 3f40 - 3f7f - 0x06, 0xE3, 0x81, 0x99, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x81, 0x9B, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x81, 0x9D, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x81, 0x9F, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x81, 0xA1, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x81, 0xA4, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x81, 0xA6, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x81, 0xA8, 0xE3, 0x82, 0x99, 0x0D, - // Bytes 3f80 - 3fbf - 0x06, 0xE3, 0x81, 0xAF, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x81, 0xAF, 0xE3, 0x82, 0x9A, 0x0D, - 0x06, 0xE3, 0x81, 0xB2, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x81, 0xB2, 0xE3, 0x82, 0x9A, 0x0D, - 0x06, 0xE3, 0x81, 0xB5, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x81, 0xB5, 0xE3, 0x82, 0x9A, 0x0D, - 0x06, 0xE3, 0x81, 0xB8, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x81, 0xB8, 0xE3, 0x82, 0x9A, 0x0D, - // Bytes 3fc0 - 3fff - 0x06, 0xE3, 0x81, 0xBB, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x81, 0xBB, 0xE3, 0x82, 0x9A, 0x0D, - 0x06, 0xE3, 0x82, 0x9D, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x82, 0xA6, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x82, 0xAB, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x82, 0xAD, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x82, 0xAF, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x82, 0xB1, 0xE3, 0x82, 0x99, 0x0D, - // Bytes 4000 - 403f - 0x06, 0xE3, 0x82, 0xB3, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x82, 0xB5, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x82, 0xB7, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x82, 0xB9, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x82, 0xBB, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x82, 0xBD, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x82, 0xBF, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x83, 0x81, 0xE3, 0x82, 0x99, 0x0D, - // Bytes 4040 - 407f - 0x06, 0xE3, 0x83, 0x84, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x83, 0x86, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x83, 0x88, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x83, 0x8F, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x83, 0x8F, 0xE3, 0x82, 0x9A, 0x0D, - 0x06, 0xE3, 0x83, 0x92, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x83, 0x92, 0xE3, 0x82, 0x9A, 0x0D, - 0x06, 0xE3, 0x83, 0x95, 0xE3, 0x82, 0x99, 0x0D, - // Bytes 4080 - 40bf - 0x06, 0xE3, 0x83, 0x95, 0xE3, 0x82, 0x9A, 0x0D, - 0x06, 0xE3, 0x83, 0x98, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x83, 0x98, 0xE3, 0x82, 0x9A, 0x0D, - 0x06, 0xE3, 0x83, 0x9B, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x83, 0x9B, 0xE3, 0x82, 0x9A, 0x0D, - 0x06, 0xE3, 0x83, 0xAF, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x83, 0xB0, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x83, 0xB1, 0xE3, 0x82, 0x99, 0x0D, - // Bytes 40c0 - 40ff - 0x06, 0xE3, 0x83, 0xB2, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x83, 0xBD, 0xE3, 0x82, 0x99, 0x0D, - 0x08, 0xCE, 0x91, 0xCC, 0x93, 0xCC, 0x80, 0xCD, - 0x85, 0xDB, 0x08, 0xCE, 0x91, 0xCC, 0x93, 0xCC, - 0x81, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0x91, 0xCC, - 0x93, 0xCD, 0x82, 0xCD, 0x85, 0xDB, 0x08, 0xCE, - 0x91, 0xCC, 0x94, 0xCC, 0x80, 0xCD, 0x85, 0xDB, - 0x08, 0xCE, 0x91, 0xCC, 0x94, 0xCC, 0x81, 0xCD, - // Bytes 4100 - 413f - 0x85, 0xDB, 0x08, 0xCE, 0x91, 0xCC, 0x94, 0xCD, - 0x82, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0x97, 0xCC, - 0x93, 0xCC, 0x80, 0xCD, 0x85, 0xDB, 0x08, 0xCE, - 0x97, 0xCC, 0x93, 0xCC, 0x81, 0xCD, 0x85, 0xDB, - 0x08, 0xCE, 0x97, 0xCC, 0x93, 0xCD, 0x82, 0xCD, - 0x85, 0xDB, 0x08, 0xCE, 0x97, 0xCC, 0x94, 0xCC, - 0x80, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0x97, 0xCC, - 0x94, 0xCC, 0x81, 0xCD, 0x85, 0xDB, 0x08, 0xCE, - // Bytes 4140 - 417f - 0x97, 0xCC, 0x94, 0xCD, 0x82, 0xCD, 0x85, 0xDB, - 0x08, 0xCE, 0xA9, 0xCC, 0x93, 0xCC, 0x80, 0xCD, - 0x85, 0xDB, 0x08, 0xCE, 0xA9, 0xCC, 0x93, 0xCC, - 0x81, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0xA9, 0xCC, - 0x93, 0xCD, 0x82, 0xCD, 0x85, 0xDB, 0x08, 0xCE, - 0xA9, 0xCC, 0x94, 0xCC, 0x80, 0xCD, 0x85, 0xDB, - 0x08, 0xCE, 0xA9, 0xCC, 0x94, 0xCC, 0x81, 0xCD, - 0x85, 0xDB, 0x08, 0xCE, 0xA9, 0xCC, 0x94, 0xCD, - // Bytes 4180 - 41bf - 0x82, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0xB1, 0xCC, - 0x93, 0xCC, 0x80, 0xCD, 0x85, 0xDB, 0x08, 0xCE, - 0xB1, 0xCC, 0x93, 0xCC, 0x81, 0xCD, 0x85, 0xDB, - 0x08, 0xCE, 0xB1, 0xCC, 0x93, 0xCD, 0x82, 0xCD, - 0x85, 0xDB, 0x08, 0xCE, 0xB1, 0xCC, 0x94, 0xCC, - 0x80, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0xB1, 0xCC, - 0x94, 0xCC, 0x81, 0xCD, 0x85, 0xDB, 0x08, 0xCE, - 0xB1, 0xCC, 0x94, 0xCD, 0x82, 0xCD, 0x85, 0xDB, - // Bytes 41c0 - 41ff - 0x08, 0xCE, 0xB7, 0xCC, 0x93, 0xCC, 0x80, 0xCD, - 0x85, 0xDB, 0x08, 0xCE, 0xB7, 0xCC, 0x93, 0xCC, - 0x81, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0xB7, 0xCC, - 0x93, 0xCD, 0x82, 0xCD, 0x85, 0xDB, 0x08, 0xCE, - 0xB7, 0xCC, 0x94, 0xCC, 0x80, 0xCD, 0x85, 0xDB, - 0x08, 0xCE, 0xB7, 0xCC, 0x94, 0xCC, 0x81, 0xCD, - 0x85, 0xDB, 0x08, 0xCE, 0xB7, 0xCC, 0x94, 0xCD, - 0x82, 0xCD, 0x85, 0xDB, 0x08, 0xCF, 0x89, 0xCC, - // Bytes 4200 - 423f - 0x93, 0xCC, 0x80, 0xCD, 0x85, 0xDB, 0x08, 0xCF, - 0x89, 0xCC, 0x93, 0xCC, 0x81, 0xCD, 0x85, 0xDB, - 0x08, 0xCF, 0x89, 0xCC, 0x93, 0xCD, 0x82, 0xCD, - 0x85, 0xDB, 0x08, 0xCF, 0x89, 0xCC, 0x94, 0xCC, - 0x80, 0xCD, 0x85, 0xDB, 0x08, 0xCF, 0x89, 0xCC, - 0x94, 0xCC, 0x81, 0xCD, 0x85, 0xDB, 0x08, 0xCF, - 0x89, 0xCC, 0x94, 0xCD, 0x82, 0xCD, 0x85, 0xDB, - 0x08, 0xF0, 0x91, 0x82, 0x99, 0xF0, 0x91, 0x82, - // Bytes 4240 - 427f - 0xBA, 0x09, 0x08, 0xF0, 0x91, 0x82, 0x9B, 0xF0, - 0x91, 0x82, 0xBA, 0x09, 0x08, 0xF0, 0x91, 0x82, - 0xA5, 0xF0, 0x91, 0x82, 0xBA, 0x09, 0x42, 0xC2, - 0xB4, 0x01, 0x43, 0x20, 0xCC, 0x81, 0xC9, 0x43, - 0x20, 0xCC, 0x83, 0xC9, 0x43, 0x20, 0xCC, 0x84, - 0xC9, 0x43, 0x20, 0xCC, 0x85, 0xC9, 0x43, 0x20, - 0xCC, 0x86, 0xC9, 0x43, 0x20, 0xCC, 0x87, 0xC9, - 0x43, 0x20, 0xCC, 0x88, 0xC9, 0x43, 0x20, 0xCC, - // Bytes 4280 - 42bf - 0x8A, 0xC9, 0x43, 0x20, 0xCC, 0x8B, 0xC9, 0x43, - 0x20, 0xCC, 0x93, 0xC9, 0x43, 0x20, 0xCC, 0x94, - 0xC9, 0x43, 0x20, 0xCC, 0xA7, 0xA5, 0x43, 0x20, - 0xCC, 0xA8, 0xA5, 0x43, 0x20, 0xCC, 0xB3, 0xB5, - 0x43, 0x20, 0xCD, 0x82, 0xC9, 0x43, 0x20, 0xCD, - 0x85, 0xD9, 0x43, 0x20, 0xD9, 0x8B, 0x59, 0x43, - 0x20, 0xD9, 0x8C, 0x5D, 0x43, 0x20, 0xD9, 0x8D, - 0x61, 0x43, 0x20, 0xD9, 0x8E, 0x65, 0x43, 0x20, - // Bytes 42c0 - 42ff - 0xD9, 0x8F, 0x69, 0x43, 0x20, 0xD9, 0x90, 0x6D, - 0x43, 0x20, 0xD9, 0x91, 0x71, 0x43, 0x20, 0xD9, - 0x92, 0x75, 0x43, 0x41, 0xCC, 0x8A, 0xC9, 0x43, - 0x73, 0xCC, 0x87, 0xC9, 0x44, 0x20, 0xE3, 0x82, - 0x99, 0x0D, 0x44, 0x20, 0xE3, 0x82, 0x9A, 0x0D, - 0x44, 0xC2, 0xA8, 0xCC, 0x81, 0xCA, 0x44, 0xCE, - 0x91, 0xCC, 0x81, 0xC9, 0x44, 0xCE, 0x95, 0xCC, - 0x81, 0xC9, 0x44, 0xCE, 0x97, 0xCC, 0x81, 0xC9, - // Bytes 4300 - 433f - 0x44, 0xCE, 0x99, 0xCC, 0x81, 0xC9, 0x44, 0xCE, - 0x9F, 0xCC, 0x81, 0xC9, 0x44, 0xCE, 0xA5, 0xCC, - 0x81, 0xC9, 0x44, 0xCE, 0xA5, 0xCC, 0x88, 0xC9, - 0x44, 0xCE, 0xA9, 0xCC, 0x81, 0xC9, 0x44, 0xCE, - 0xB1, 0xCC, 0x81, 0xC9, 0x44, 0xCE, 0xB5, 0xCC, - 0x81, 0xC9, 0x44, 0xCE, 0xB7, 0xCC, 0x81, 0xC9, - 0x44, 0xCE, 0xB9, 0xCC, 0x81, 0xC9, 0x44, 0xCE, - 0xBF, 0xCC, 0x81, 0xC9, 0x44, 0xCF, 0x85, 0xCC, - // Bytes 4340 - 437f - 0x81, 0xC9, 0x44, 0xCF, 0x89, 0xCC, 0x81, 0xC9, - 0x44, 0xD7, 0x90, 0xD6, 0xB7, 0x31, 0x44, 0xD7, - 0x90, 0xD6, 0xB8, 0x35, 0x44, 0xD7, 0x90, 0xD6, - 0xBC, 0x41, 0x44, 0xD7, 0x91, 0xD6, 0xBC, 0x41, - 0x44, 0xD7, 0x91, 0xD6, 0xBF, 0x49, 0x44, 0xD7, - 0x92, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0x93, 0xD6, - 0xBC, 0x41, 0x44, 0xD7, 0x94, 0xD6, 0xBC, 0x41, - 0x44, 0xD7, 0x95, 0xD6, 0xB9, 0x39, 0x44, 0xD7, - // Bytes 4380 - 43bf - 0x95, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0x96, 0xD6, - 0xBC, 0x41, 0x44, 0xD7, 0x98, 0xD6, 0xBC, 0x41, - 0x44, 0xD7, 0x99, 0xD6, 0xB4, 0x25, 0x44, 0xD7, - 0x99, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0x9A, 0xD6, - 0xBC, 0x41, 0x44, 0xD7, 0x9B, 0xD6, 0xBC, 0x41, - 0x44, 0xD7, 0x9B, 0xD6, 0xBF, 0x49, 0x44, 0xD7, - 0x9C, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0x9E, 0xD6, - 0xBC, 0x41, 0x44, 0xD7, 0xA0, 0xD6, 0xBC, 0x41, - // Bytes 43c0 - 43ff - 0x44, 0xD7, 0xA1, 0xD6, 0xBC, 0x41, 0x44, 0xD7, - 0xA3, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0xA4, 0xD6, - 0xBC, 0x41, 0x44, 0xD7, 0xA4, 0xD6, 0xBF, 0x49, - 0x44, 0xD7, 0xA6, 0xD6, 0xBC, 0x41, 0x44, 0xD7, - 0xA7, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0xA8, 0xD6, - 0xBC, 0x41, 0x44, 0xD7, 0xA9, 0xD6, 0xBC, 0x41, - 0x44, 0xD7, 0xA9, 0xD7, 0x81, 0x4D, 0x44, 0xD7, - 0xA9, 0xD7, 0x82, 0x51, 0x44, 0xD7, 0xAA, 0xD6, - // Bytes 4400 - 443f - 0xBC, 0x41, 0x44, 0xD7, 0xB2, 0xD6, 0xB7, 0x31, - 0x44, 0xD8, 0xA7, 0xD9, 0x8B, 0x59, 0x44, 0xD8, - 0xA7, 0xD9, 0x93, 0xC9, 0x44, 0xD8, 0xA7, 0xD9, - 0x94, 0xC9, 0x44, 0xD8, 0xA7, 0xD9, 0x95, 0xB5, - 0x44, 0xD8, 0xB0, 0xD9, 0xB0, 0x79, 0x44, 0xD8, - 0xB1, 0xD9, 0xB0, 0x79, 0x44, 0xD9, 0x80, 0xD9, - 0x8B, 0x59, 0x44, 0xD9, 0x80, 0xD9, 0x8E, 0x65, - 0x44, 0xD9, 0x80, 0xD9, 0x8F, 0x69, 0x44, 0xD9, - // Bytes 4440 - 447f - 0x80, 0xD9, 0x90, 0x6D, 0x44, 0xD9, 0x80, 0xD9, - 0x91, 0x71, 0x44, 0xD9, 0x80, 0xD9, 0x92, 0x75, - 0x44, 0xD9, 0x87, 0xD9, 0xB0, 0x79, 0x44, 0xD9, - 0x88, 0xD9, 0x94, 0xC9, 0x44, 0xD9, 0x89, 0xD9, - 0xB0, 0x79, 0x44, 0xD9, 0x8A, 0xD9, 0x94, 0xC9, - 0x44, 0xDB, 0x92, 0xD9, 0x94, 0xC9, 0x44, 0xDB, - 0x95, 0xD9, 0x94, 0xC9, 0x45, 0x20, 0xCC, 0x88, - 0xCC, 0x80, 0xCA, 0x45, 0x20, 0xCC, 0x88, 0xCC, - // Bytes 4480 - 44bf - 0x81, 0xCA, 0x45, 0x20, 0xCC, 0x88, 0xCD, 0x82, - 0xCA, 0x45, 0x20, 0xCC, 0x93, 0xCC, 0x80, 0xCA, - 0x45, 0x20, 0xCC, 0x93, 0xCC, 0x81, 0xCA, 0x45, - 0x20, 0xCC, 0x93, 0xCD, 0x82, 0xCA, 0x45, 0x20, - 0xCC, 0x94, 0xCC, 0x80, 0xCA, 0x45, 0x20, 0xCC, - 0x94, 0xCC, 0x81, 0xCA, 0x45, 0x20, 0xCC, 0x94, - 0xCD, 0x82, 0xCA, 0x45, 0x20, 0xD9, 0x8C, 0xD9, - 0x91, 0x72, 0x45, 0x20, 0xD9, 0x8D, 0xD9, 0x91, - // Bytes 44c0 - 44ff - 0x72, 0x45, 0x20, 0xD9, 0x8E, 0xD9, 0x91, 0x72, - 0x45, 0x20, 0xD9, 0x8F, 0xD9, 0x91, 0x72, 0x45, - 0x20, 0xD9, 0x90, 0xD9, 0x91, 0x72, 0x45, 0x20, - 0xD9, 0x91, 0xD9, 0xB0, 0x7A, 0x45, 0xE2, 0xAB, - 0x9D, 0xCC, 0xB8, 0x05, 0x46, 0xCE, 0xB9, 0xCC, - 0x88, 0xCC, 0x81, 0xCA, 0x46, 0xCF, 0x85, 0xCC, - 0x88, 0xCC, 0x81, 0xCA, 0x46, 0xD7, 0xA9, 0xD6, - 0xBC, 0xD7, 0x81, 0x4E, 0x46, 0xD7, 0xA9, 0xD6, - // Bytes 4500 - 453f - 0xBC, 0xD7, 0x82, 0x52, 0x46, 0xD9, 0x80, 0xD9, - 0x8E, 0xD9, 0x91, 0x72, 0x46, 0xD9, 0x80, 0xD9, - 0x8F, 0xD9, 0x91, 0x72, 0x46, 0xD9, 0x80, 0xD9, - 0x90, 0xD9, 0x91, 0x72, 0x46, 0xE0, 0xA4, 0x95, - 0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0x96, - 0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0x97, - 0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0x9C, - 0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0xA1, - // Bytes 4540 - 457f - 0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0xA2, - 0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0xAB, - 0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0xAF, - 0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA6, 0xA1, - 0xE0, 0xA6, 0xBC, 0x09, 0x46, 0xE0, 0xA6, 0xA2, - 0xE0, 0xA6, 0xBC, 0x09, 0x46, 0xE0, 0xA6, 0xAF, - 0xE0, 0xA6, 0xBC, 0x09, 0x46, 0xE0, 0xA8, 0x96, - 0xE0, 0xA8, 0xBC, 0x09, 0x46, 0xE0, 0xA8, 0x97, - // Bytes 4580 - 45bf - 0xE0, 0xA8, 0xBC, 0x09, 0x46, 0xE0, 0xA8, 0x9C, - 0xE0, 0xA8, 0xBC, 0x09, 0x46, 0xE0, 0xA8, 0xAB, - 0xE0, 0xA8, 0xBC, 0x09, 0x46, 0xE0, 0xA8, 0xB2, - 0xE0, 0xA8, 0xBC, 0x09, 0x46, 0xE0, 0xA8, 0xB8, - 0xE0, 0xA8, 0xBC, 0x09, 0x46, 0xE0, 0xAC, 0xA1, - 0xE0, 0xAC, 0xBC, 0x09, 0x46, 0xE0, 0xAC, 0xA2, - 0xE0, 0xAC, 0xBC, 0x09, 0x46, 0xE0, 0xBE, 0xB2, - 0xE0, 0xBE, 0x80, 0x9D, 0x46, 0xE0, 0xBE, 0xB3, - // Bytes 45c0 - 45ff - 0xE0, 0xBE, 0x80, 0x9D, 0x46, 0xE3, 0x83, 0x86, - 0xE3, 0x82, 0x99, 0x0D, 0x48, 0xF0, 0x9D, 0x85, - 0x97, 0xF0, 0x9D, 0x85, 0xA5, 0xAD, 0x48, 0xF0, - 0x9D, 0x85, 0x98, 0xF0, 0x9D, 0x85, 0xA5, 0xAD, - 0x48, 0xF0, 0x9D, 0x86, 0xB9, 0xF0, 0x9D, 0x85, - 0xA5, 0xAD, 0x48, 0xF0, 0x9D, 0x86, 0xBA, 0xF0, - 0x9D, 0x85, 0xA5, 0xAD, 0x49, 0xE0, 0xBE, 0xB2, - 0xE0, 0xBD, 0xB1, 0xE0, 0xBE, 0x80, 0x9E, 0x49, - // Bytes 4600 - 463f - 0xE0, 0xBE, 0xB3, 0xE0, 0xBD, 0xB1, 0xE0, 0xBE, - 0x80, 0x9E, 0x4C, 0xF0, 0x9D, 0x85, 0x98, 0xF0, - 0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85, 0xAE, 0xAE, - 0x4C, 0xF0, 0x9D, 0x85, 0x98, 0xF0, 0x9D, 0x85, - 0xA5, 0xF0, 0x9D, 0x85, 0xAF, 0xAE, 0x4C, 0xF0, - 0x9D, 0x85, 0x98, 0xF0, 0x9D, 0x85, 0xA5, 0xF0, - 0x9D, 0x85, 0xB0, 0xAE, 0x4C, 0xF0, 0x9D, 0x85, - 0x98, 0xF0, 0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85, - // Bytes 4640 - 467f - 0xB1, 0xAE, 0x4C, 0xF0, 0x9D, 0x85, 0x98, 0xF0, - 0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85, 0xB2, 0xAE, - 0x4C, 0xF0, 0x9D, 0x86, 0xB9, 0xF0, 0x9D, 0x85, - 0xA5, 0xF0, 0x9D, 0x85, 0xAE, 0xAE, 0x4C, 0xF0, - 0x9D, 0x86, 0xB9, 0xF0, 0x9D, 0x85, 0xA5, 0xF0, - 0x9D, 0x85, 0xAF, 0xAE, 0x4C, 0xF0, 0x9D, 0x86, - 0xBA, 0xF0, 0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85, - 0xAE, 0xAE, 0x4C, 0xF0, 0x9D, 0x86, 0xBA, 0xF0, - // Bytes 4680 - 46bf - 0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85, 0xAF, 0xAE, - 0x83, 0x41, 0xCC, 0x82, 0xC9, 0x83, 0x41, 0xCC, - 0x86, 0xC9, 0x83, 0x41, 0xCC, 0x87, 0xC9, 0x83, - 0x41, 0xCC, 0x88, 0xC9, 0x83, 0x41, 0xCC, 0x8A, - 0xC9, 0x83, 0x41, 0xCC, 0xA3, 0xB5, 0x83, 0x43, - 0xCC, 0xA7, 0xA5, 0x83, 0x45, 0xCC, 0x82, 0xC9, - 0x83, 0x45, 0xCC, 0x84, 0xC9, 0x83, 0x45, 0xCC, - 0xA3, 0xB5, 0x83, 0x45, 0xCC, 0xA7, 0xA5, 0x83, - // Bytes 46c0 - 46ff - 0x49, 0xCC, 0x88, 0xC9, 0x83, 0x4C, 0xCC, 0xA3, - 0xB5, 0x83, 0x4F, 0xCC, 0x82, 0xC9, 0x83, 0x4F, - 0xCC, 0x83, 0xC9, 0x83, 0x4F, 0xCC, 0x84, 0xC9, - 0x83, 0x4F, 0xCC, 0x87, 0xC9, 0x83, 0x4F, 0xCC, - 0x88, 0xC9, 0x83, 0x4F, 0xCC, 0x9B, 0xAD, 0x83, - 0x4F, 0xCC, 0xA3, 0xB5, 0x83, 0x4F, 0xCC, 0xA8, - 0xA5, 0x83, 0x52, 0xCC, 0xA3, 0xB5, 0x83, 0x53, - 0xCC, 0x81, 0xC9, 0x83, 0x53, 0xCC, 0x8C, 0xC9, - // Bytes 4700 - 473f - 0x83, 0x53, 0xCC, 0xA3, 0xB5, 0x83, 0x55, 0xCC, - 0x83, 0xC9, 0x83, 0x55, 0xCC, 0x84, 0xC9, 0x83, - 0x55, 0xCC, 0x88, 0xC9, 0x83, 0x55, 0xCC, 0x9B, - 0xAD, 0x83, 0x61, 0xCC, 0x82, 0xC9, 0x83, 0x61, - 0xCC, 0x86, 0xC9, 0x83, 0x61, 0xCC, 0x87, 0xC9, - 0x83, 0x61, 0xCC, 0x88, 0xC9, 0x83, 0x61, 0xCC, - 0x8A, 0xC9, 0x83, 0x61, 0xCC, 0xA3, 0xB5, 0x83, - 0x63, 0xCC, 0xA7, 0xA5, 0x83, 0x65, 0xCC, 0x82, - // Bytes 4740 - 477f - 0xC9, 0x83, 0x65, 0xCC, 0x84, 0xC9, 0x83, 0x65, - 0xCC, 0xA3, 0xB5, 0x83, 0x65, 0xCC, 0xA7, 0xA5, - 0x83, 0x69, 0xCC, 0x88, 0xC9, 0x83, 0x6C, 0xCC, - 0xA3, 0xB5, 0x83, 0x6F, 0xCC, 0x82, 0xC9, 0x83, - 0x6F, 0xCC, 0x83, 0xC9, 0x83, 0x6F, 0xCC, 0x84, - 0xC9, 0x83, 0x6F, 0xCC, 0x87, 0xC9, 0x83, 0x6F, - 0xCC, 0x88, 0xC9, 0x83, 0x6F, 0xCC, 0x9B, 0xAD, - 0x83, 0x6F, 0xCC, 0xA3, 0xB5, 0x83, 0x6F, 0xCC, - // Bytes 4780 - 47bf - 0xA8, 0xA5, 0x83, 0x72, 0xCC, 0xA3, 0xB5, 0x83, - 0x73, 0xCC, 0x81, 0xC9, 0x83, 0x73, 0xCC, 0x8C, - 0xC9, 0x83, 0x73, 0xCC, 0xA3, 0xB5, 0x83, 0x75, - 0xCC, 0x83, 0xC9, 0x83, 0x75, 0xCC, 0x84, 0xC9, - 0x83, 0x75, 0xCC, 0x88, 0xC9, 0x83, 0x75, 0xCC, - 0x9B, 0xAD, 0x84, 0xCE, 0x91, 0xCC, 0x93, 0xC9, - 0x84, 0xCE, 0x91, 0xCC, 0x94, 0xC9, 0x84, 0xCE, - 0x95, 0xCC, 0x93, 0xC9, 0x84, 0xCE, 0x95, 0xCC, - // Bytes 47c0 - 47ff - 0x94, 0xC9, 0x84, 0xCE, 0x97, 0xCC, 0x93, 0xC9, - 0x84, 0xCE, 0x97, 0xCC, 0x94, 0xC9, 0x84, 0xCE, - 0x99, 0xCC, 0x93, 0xC9, 0x84, 0xCE, 0x99, 0xCC, - 0x94, 0xC9, 0x84, 0xCE, 0x9F, 0xCC, 0x93, 0xC9, - 0x84, 0xCE, 0x9F, 0xCC, 0x94, 0xC9, 0x84, 0xCE, - 0xA5, 0xCC, 0x94, 0xC9, 0x84, 0xCE, 0xA9, 0xCC, - 0x93, 0xC9, 0x84, 0xCE, 0xA9, 0xCC, 0x94, 0xC9, - 0x84, 0xCE, 0xB1, 0xCC, 0x80, 0xC9, 0x84, 0xCE, - // Bytes 4800 - 483f - 0xB1, 0xCC, 0x81, 0xC9, 0x84, 0xCE, 0xB1, 0xCC, - 0x93, 0xC9, 0x84, 0xCE, 0xB1, 0xCC, 0x94, 0xC9, - 0x84, 0xCE, 0xB1, 0xCD, 0x82, 0xC9, 0x84, 0xCE, - 0xB5, 0xCC, 0x93, 0xC9, 0x84, 0xCE, 0xB5, 0xCC, - 0x94, 0xC9, 0x84, 0xCE, 0xB7, 0xCC, 0x80, 0xC9, - 0x84, 0xCE, 0xB7, 0xCC, 0x81, 0xC9, 0x84, 0xCE, - 0xB7, 0xCC, 0x93, 0xC9, 0x84, 0xCE, 0xB7, 0xCC, - 0x94, 0xC9, 0x84, 0xCE, 0xB7, 0xCD, 0x82, 0xC9, - // Bytes 4840 - 487f - 0x84, 0xCE, 0xB9, 0xCC, 0x88, 0xC9, 0x84, 0xCE, - 0xB9, 0xCC, 0x93, 0xC9, 0x84, 0xCE, 0xB9, 0xCC, - 0x94, 0xC9, 0x84, 0xCE, 0xBF, 0xCC, 0x93, 0xC9, - 0x84, 0xCE, 0xBF, 0xCC, 0x94, 0xC9, 0x84, 0xCF, - 0x85, 0xCC, 0x88, 0xC9, 0x84, 0xCF, 0x85, 0xCC, - 0x93, 0xC9, 0x84, 0xCF, 0x85, 0xCC, 0x94, 0xC9, - 0x84, 0xCF, 0x89, 0xCC, 0x80, 0xC9, 0x84, 0xCF, - 0x89, 0xCC, 0x81, 0xC9, 0x84, 0xCF, 0x89, 0xCC, - // Bytes 4880 - 48bf - 0x93, 0xC9, 0x84, 0xCF, 0x89, 0xCC, 0x94, 0xC9, - 0x84, 0xCF, 0x89, 0xCD, 0x82, 0xC9, 0x86, 0xCE, - 0x91, 0xCC, 0x93, 0xCC, 0x80, 0xCA, 0x86, 0xCE, - 0x91, 0xCC, 0x93, 0xCC, 0x81, 0xCA, 0x86, 0xCE, - 0x91, 0xCC, 0x93, 0xCD, 0x82, 0xCA, 0x86, 0xCE, - 0x91, 0xCC, 0x94, 0xCC, 0x80, 0xCA, 0x86, 0xCE, - 0x91, 0xCC, 0x94, 0xCC, 0x81, 0xCA, 0x86, 0xCE, - 0x91, 0xCC, 0x94, 0xCD, 0x82, 0xCA, 0x86, 0xCE, - // Bytes 48c0 - 48ff - 0x97, 0xCC, 0x93, 0xCC, 0x80, 0xCA, 0x86, 0xCE, - 0x97, 0xCC, 0x93, 0xCC, 0x81, 0xCA, 0x86, 0xCE, - 0x97, 0xCC, 0x93, 0xCD, 0x82, 0xCA, 0x86, 0xCE, - 0x97, 0xCC, 0x94, 0xCC, 0x80, 0xCA, 0x86, 0xCE, - 0x97, 0xCC, 0x94, 0xCC, 0x81, 0xCA, 0x86, 0xCE, - 0x97, 0xCC, 0x94, 0xCD, 0x82, 0xCA, 0x86, 0xCE, - 0xA9, 0xCC, 0x93, 0xCC, 0x80, 0xCA, 0x86, 0xCE, - 0xA9, 0xCC, 0x93, 0xCC, 0x81, 0xCA, 0x86, 0xCE, - // Bytes 4900 - 493f - 0xA9, 0xCC, 0x93, 0xCD, 0x82, 0xCA, 0x86, 0xCE, - 0xA9, 0xCC, 0x94, 0xCC, 0x80, 0xCA, 0x86, 0xCE, - 0xA9, 0xCC, 0x94, 0xCC, 0x81, 0xCA, 0x86, 0xCE, - 0xA9, 0xCC, 0x94, 0xCD, 0x82, 0xCA, 0x86, 0xCE, - 0xB1, 0xCC, 0x93, 0xCC, 0x80, 0xCA, 0x86, 0xCE, - 0xB1, 0xCC, 0x93, 0xCC, 0x81, 0xCA, 0x86, 0xCE, - 0xB1, 0xCC, 0x93, 0xCD, 0x82, 0xCA, 0x86, 0xCE, - 0xB1, 0xCC, 0x94, 0xCC, 0x80, 0xCA, 0x86, 0xCE, - // Bytes 4940 - 497f - 0xB1, 0xCC, 0x94, 0xCC, 0x81, 0xCA, 0x86, 0xCE, - 0xB1, 0xCC, 0x94, 0xCD, 0x82, 0xCA, 0x86, 0xCE, - 0xB7, 0xCC, 0x93, 0xCC, 0x80, 0xCA, 0x86, 0xCE, - 0xB7, 0xCC, 0x93, 0xCC, 0x81, 0xCA, 0x86, 0xCE, - 0xB7, 0xCC, 0x93, 0xCD, 0x82, 0xCA, 0x86, 0xCE, - 0xB7, 0xCC, 0x94, 0xCC, 0x80, 0xCA, 0x86, 0xCE, - 0xB7, 0xCC, 0x94, 0xCC, 0x81, 0xCA, 0x86, 0xCE, - 0xB7, 0xCC, 0x94, 0xCD, 0x82, 0xCA, 0x86, 0xCF, - // Bytes 4980 - 49bf - 0x89, 0xCC, 0x93, 0xCC, 0x80, 0xCA, 0x86, 0xCF, - 0x89, 0xCC, 0x93, 0xCC, 0x81, 0xCA, 0x86, 0xCF, - 0x89, 0xCC, 0x93, 0xCD, 0x82, 0xCA, 0x86, 0xCF, - 0x89, 0xCC, 0x94, 0xCC, 0x80, 0xCA, 0x86, 0xCF, - 0x89, 0xCC, 0x94, 0xCC, 0x81, 0xCA, 0x86, 0xCF, - 0x89, 0xCC, 0x94, 0xCD, 0x82, 0xCA, 0x42, 0xCC, - 0x80, 0xC9, 0x32, 0x42, 0xCC, 0x81, 0xC9, 0x32, - 0x42, 0xCC, 0x93, 0xC9, 0x32, 0x43, 0xE1, 0x85, - // Bytes 49c0 - 49ff - 0xA1, 0x01, 0x00, 0x43, 0xE1, 0x85, 0xA2, 0x01, - 0x00, 0x43, 0xE1, 0x85, 0xA3, 0x01, 0x00, 0x43, - 0xE1, 0x85, 0xA4, 0x01, 0x00, 0x43, 0xE1, 0x85, - 0xA5, 0x01, 0x00, 0x43, 0xE1, 0x85, 0xA6, 0x01, - 0x00, 0x43, 0xE1, 0x85, 0xA7, 0x01, 0x00, 0x43, - 0xE1, 0x85, 0xA8, 0x01, 0x00, 0x43, 0xE1, 0x85, - 0xA9, 0x01, 0x00, 0x43, 0xE1, 0x85, 0xAA, 0x01, - 0x00, 0x43, 0xE1, 0x85, 0xAB, 0x01, 0x00, 0x43, - // Bytes 4a00 - 4a3f - 0xE1, 0x85, 0xAC, 0x01, 0x00, 0x43, 0xE1, 0x85, - 0xAD, 0x01, 0x00, 0x43, 0xE1, 0x85, 0xAE, 0x01, - 0x00, 0x43, 0xE1, 0x85, 0xAF, 0x01, 0x00, 0x43, - 0xE1, 0x85, 0xB0, 0x01, 0x00, 0x43, 0xE1, 0x85, - 0xB1, 0x01, 0x00, 0x43, 0xE1, 0x85, 0xB2, 0x01, - 0x00, 0x43, 0xE1, 0x85, 0xB3, 0x01, 0x00, 0x43, - 0xE1, 0x85, 0xB4, 0x01, 0x00, 0x43, 0xE1, 0x85, - 0xB5, 0x01, 0x00, 0x43, 0xE1, 0x86, 0xAA, 0x01, - // Bytes 4a40 - 4a7f - 0x00, 0x43, 0xE1, 0x86, 0xAC, 0x01, 0x00, 0x43, - 0xE1, 0x86, 0xAD, 0x01, 0x00, 0x43, 0xE1, 0x86, - 0xB0, 0x01, 0x00, 0x43, 0xE1, 0x86, 0xB1, 0x01, - 0x00, 0x43, 0xE1, 0x86, 0xB2, 0x01, 0x00, 0x43, - 0xE1, 0x86, 0xB3, 0x01, 0x00, 0x43, 0xE1, 0x86, - 0xB4, 0x01, 0x00, 0x43, 0xE1, 0x86, 0xB5, 0x01, - 0x00, 0x44, 0xCC, 0x88, 0xCC, 0x81, 0xCA, 0x32, - 0x43, 0xE3, 0x82, 0x99, 0x0D, 0x03, 0x43, 0xE3, - // Bytes 4a80 - 4abf - 0x82, 0x9A, 0x0D, 0x03, 0x46, 0xE0, 0xBD, 0xB1, - 0xE0, 0xBD, 0xB2, 0x9E, 0x26, 0x46, 0xE0, 0xBD, - 0xB1, 0xE0, 0xBD, 0xB4, 0xA2, 0x26, 0x46, 0xE0, - 0xBD, 0xB1, 0xE0, 0xBE, 0x80, 0x9E, 0x26, 0x00, - 0x01, -} - -// lookup returns the trie value for the first UTF-8 encoding in s and -// the width in bytes of this encoding. The size will be 0 if s does not -// hold enough bytes to complete the encoding. len(s) must be greater than 0. -func (t *nfcTrie) lookup(s []byte) (v uint16, sz int) { - c0 := s[0] - switch { - case c0 < 0x80: // is ASCII - return nfcValues[c0], 1 - case c0 < 0xC2: - return 0, 1 // Illegal UTF-8: not a starter, not ASCII. - case c0 < 0xE0: // 2-byte UTF-8 - if len(s) < 2 { - return 0, 0 - } - i := nfcIndex[c0] - c1 := s[1] - if c1 < 0x80 || 0xC0 <= c1 { - return 0, 1 // Illegal UTF-8: not a continuation byte. - } - return t.lookupValue(uint32(i), c1), 2 - case c0 < 0xF0: // 3-byte UTF-8 - if len(s) < 3 { - return 0, 0 - } - i := nfcIndex[c0] - c1 := s[1] - if c1 < 0x80 || 0xC0 <= c1 { - return 0, 1 // Illegal UTF-8: not a continuation byte. - } - o := uint32(i)<<6 + uint32(c1) - i = nfcIndex[o] - c2 := s[2] - if c2 < 0x80 || 0xC0 <= c2 { - return 0, 2 // Illegal UTF-8: not a continuation byte. - } - return t.lookupValue(uint32(i), c2), 3 - case c0 < 0xF8: // 4-byte UTF-8 - if len(s) < 4 { - return 0, 0 - } - i := nfcIndex[c0] - c1 := s[1] - if c1 < 0x80 || 0xC0 <= c1 { - return 0, 1 // Illegal UTF-8: not a continuation byte. - } - o := uint32(i)<<6 + uint32(c1) - i = nfcIndex[o] - c2 := s[2] - if c2 < 0x80 || 0xC0 <= c2 { - return 0, 2 // Illegal UTF-8: not a continuation byte. - } - o = uint32(i)<<6 + uint32(c2) - i = nfcIndex[o] - c3 := s[3] - if c3 < 0x80 || 0xC0 <= c3 { - return 0, 3 // Illegal UTF-8: not a continuation byte. - } - return t.lookupValue(uint32(i), c3), 4 - } - // Illegal rune - return 0, 1 -} - -// lookupUnsafe returns the trie value for the first UTF-8 encoding in s. -// s must start with a full and valid UTF-8 encoded rune. -func (t *nfcTrie) lookupUnsafe(s []byte) uint16 { - c0 := s[0] - if c0 < 0x80 { // is ASCII - return nfcValues[c0] - } - i := nfcIndex[c0] - if c0 < 0xE0 { // 2-byte UTF-8 - return t.lookupValue(uint32(i), s[1]) - } - i = nfcIndex[uint32(i)<<6+uint32(s[1])] - if c0 < 0xF0 { // 3-byte UTF-8 - return t.lookupValue(uint32(i), s[2]) - } - i = nfcIndex[uint32(i)<<6+uint32(s[2])] - if c0 < 0xF8 { // 4-byte UTF-8 - return t.lookupValue(uint32(i), s[3]) - } - return 0 -} - -// lookupString returns the trie value for the first UTF-8 encoding in s and -// the width in bytes of this encoding. The size will be 0 if s does not -// hold enough bytes to complete the encoding. len(s) must be greater than 0. -func (t *nfcTrie) lookupString(s string) (v uint16, sz int) { - c0 := s[0] - switch { - case c0 < 0x80: // is ASCII - return nfcValues[c0], 1 - case c0 < 0xC2: - return 0, 1 // Illegal UTF-8: not a starter, not ASCII. - case c0 < 0xE0: // 2-byte UTF-8 - if len(s) < 2 { - return 0, 0 - } - i := nfcIndex[c0] - c1 := s[1] - if c1 < 0x80 || 0xC0 <= c1 { - return 0, 1 // Illegal UTF-8: not a continuation byte. - } - return t.lookupValue(uint32(i), c1), 2 - case c0 < 0xF0: // 3-byte UTF-8 - if len(s) < 3 { - return 0, 0 - } - i := nfcIndex[c0] - c1 := s[1] - if c1 < 0x80 || 0xC0 <= c1 { - return 0, 1 // Illegal UTF-8: not a continuation byte. - } - o := uint32(i)<<6 + uint32(c1) - i = nfcIndex[o] - c2 := s[2] - if c2 < 0x80 || 0xC0 <= c2 { - return 0, 2 // Illegal UTF-8: not a continuation byte. - } - return t.lookupValue(uint32(i), c2), 3 - case c0 < 0xF8: // 4-byte UTF-8 - if len(s) < 4 { - return 0, 0 - } - i := nfcIndex[c0] - c1 := s[1] - if c1 < 0x80 || 0xC0 <= c1 { - return 0, 1 // Illegal UTF-8: not a continuation byte. - } - o := uint32(i)<<6 + uint32(c1) - i = nfcIndex[o] - c2 := s[2] - if c2 < 0x80 || 0xC0 <= c2 { - return 0, 2 // Illegal UTF-8: not a continuation byte. - } - o = uint32(i)<<6 + uint32(c2) - i = nfcIndex[o] - c3 := s[3] - if c3 < 0x80 || 0xC0 <= c3 { - return 0, 3 // Illegal UTF-8: not a continuation byte. - } - return t.lookupValue(uint32(i), c3), 4 - } - // Illegal rune - return 0, 1 -} - -// lookupStringUnsafe returns the trie value for the first UTF-8 encoding in s. -// s must start with a full and valid UTF-8 encoded rune. -func (t *nfcTrie) lookupStringUnsafe(s string) uint16 { - c0 := s[0] - if c0 < 0x80 { // is ASCII - return nfcValues[c0] - } - i := nfcIndex[c0] - if c0 < 0xE0 { // 2-byte UTF-8 - return t.lookupValue(uint32(i), s[1]) - } - i = nfcIndex[uint32(i)<<6+uint32(s[1])] - if c0 < 0xF0 { // 3-byte UTF-8 - return t.lookupValue(uint32(i), s[2]) - } - i = nfcIndex[uint32(i)<<6+uint32(s[2])] - if c0 < 0xF8 { // 4-byte UTF-8 - return t.lookupValue(uint32(i), s[3]) - } - return 0 -} - -// nfcTrie. Total size: 10586 bytes (10.34 KiB). Checksum: dd926e82067bee11. -type nfcTrie struct{} - -func newNfcTrie(i int) *nfcTrie { - return &nfcTrie{} -} - -// lookupValue determines the type of block n and looks up the value for b. -func (t *nfcTrie) lookupValue(n uint32, b byte) uint16 { - switch { - case n < 46: - return uint16(nfcValues[n<<6+uint32(b)]) - default: - n -= 46 - return uint16(nfcSparse.lookup(n, b)) - } -} - -// nfcValues: 48 blocks, 3072 entries, 6144 bytes -// The third block is the zero block. -var nfcValues = [3072]uint16{ - // Block 0x0, offset 0x0 - 0x3c: 0xa000, 0x3d: 0xa000, 0x3e: 0xa000, - // Block 0x1, offset 0x40 - 0x41: 0xa000, 0x42: 0xa000, 0x43: 0xa000, 0x44: 0xa000, 0x45: 0xa000, - 0x46: 0xa000, 0x47: 0xa000, 0x48: 0xa000, 0x49: 0xa000, 0x4a: 0xa000, 0x4b: 0xa000, - 0x4c: 0xa000, 0x4d: 0xa000, 0x4e: 0xa000, 0x4f: 0xa000, 0x50: 0xa000, - 0x52: 0xa000, 0x53: 0xa000, 0x54: 0xa000, 0x55: 0xa000, 0x56: 0xa000, 0x57: 0xa000, - 0x58: 0xa000, 0x59: 0xa000, 0x5a: 0xa000, - 0x61: 0xa000, 0x62: 0xa000, 0x63: 0xa000, - 0x64: 0xa000, 0x65: 0xa000, 0x66: 0xa000, 0x67: 0xa000, 0x68: 0xa000, 0x69: 0xa000, - 0x6a: 0xa000, 0x6b: 0xa000, 0x6c: 0xa000, 0x6d: 0xa000, 0x6e: 0xa000, 0x6f: 0xa000, - 0x70: 0xa000, 0x72: 0xa000, 0x73: 0xa000, 0x74: 0xa000, 0x75: 0xa000, - 0x76: 0xa000, 0x77: 0xa000, 0x78: 0xa000, 0x79: 0xa000, 0x7a: 0xa000, - // Block 0x2, offset 0x80 - // Block 0x3, offset 0xc0 - 0xc0: 0x2f6f, 0xc1: 0x2f74, 0xc2: 0x4688, 0xc3: 0x2f79, 0xc4: 0x4697, 0xc5: 0x469c, - 0xc6: 0xa000, 0xc7: 0x46a6, 0xc8: 0x2fe2, 0xc9: 0x2fe7, 0xca: 0x46ab, 0xcb: 0x2ffb, - 0xcc: 0x306e, 0xcd: 0x3073, 0xce: 0x3078, 0xcf: 0x46bf, 0xd1: 0x3104, - 0xd2: 0x3127, 0xd3: 0x312c, 0xd4: 0x46c9, 0xd5: 0x46ce, 0xd6: 0x46dd, - 0xd8: 0xa000, 0xd9: 0x31b3, 0xda: 0x31b8, 0xdb: 0x31bd, 0xdc: 0x470f, 0xdd: 0x3235, - 0xe0: 0x327b, 0xe1: 0x3280, 0xe2: 0x4719, 0xe3: 0x3285, - 0xe4: 0x4728, 0xe5: 0x472d, 0xe6: 0xa000, 0xe7: 0x4737, 0xe8: 0x32ee, 0xe9: 0x32f3, - 0xea: 0x473c, 0xeb: 0x3307, 0xec: 0x337f, 0xed: 0x3384, 0xee: 0x3389, 0xef: 0x4750, - 0xf1: 0x3415, 0xf2: 0x3438, 0xf3: 0x343d, 0xf4: 0x475a, 0xf5: 0x475f, - 0xf6: 0x476e, 0xf8: 0xa000, 0xf9: 0x34c9, 0xfa: 0x34ce, 0xfb: 0x34d3, - 0xfc: 0x47a0, 0xfd: 0x3550, 0xff: 0x3569, - // Block 0x4, offset 0x100 - 0x100: 0x2f7e, 0x101: 0x328a, 0x102: 0x468d, 0x103: 0x471e, 0x104: 0x2f9c, 0x105: 0x32a8, - 0x106: 0x2fb0, 0x107: 0x32bc, 0x108: 0x2fb5, 0x109: 0x32c1, 0x10a: 0x2fba, 0x10b: 0x32c6, - 0x10c: 0x2fbf, 0x10d: 0x32cb, 0x10e: 0x2fc9, 0x10f: 0x32d5, - 0x112: 0x46b0, 0x113: 0x4741, 0x114: 0x2ff1, 0x115: 0x32fd, 0x116: 0x2ff6, 0x117: 0x3302, - 0x118: 0x3014, 0x119: 0x3320, 0x11a: 0x3005, 0x11b: 0x3311, 0x11c: 0x302d, 0x11d: 0x3339, - 0x11e: 0x3037, 0x11f: 0x3343, 0x120: 0x303c, 0x121: 0x3348, 0x122: 0x3046, 0x123: 0x3352, - 0x124: 0x304b, 0x125: 0x3357, 0x128: 0x307d, 0x129: 0x338e, - 0x12a: 0x3082, 0x12b: 0x3393, 0x12c: 0x3087, 0x12d: 0x3398, 0x12e: 0x30aa, 0x12f: 0x33b6, - 0x130: 0x308c, 0x134: 0x30b4, 0x135: 0x33c0, - 0x136: 0x30c8, 0x137: 0x33d9, 0x139: 0x30d2, 0x13a: 0x33e3, 0x13b: 0x30dc, - 0x13c: 0x33ed, 0x13d: 0x30d7, 0x13e: 0x33e8, - // Block 0x5, offset 0x140 - 0x143: 0x30ff, 0x144: 0x3410, 0x145: 0x3118, - 0x146: 0x3429, 0x147: 0x310e, 0x148: 0x341f, - 0x14c: 0x46d3, 0x14d: 0x4764, 0x14e: 0x3131, 0x14f: 0x3442, 0x150: 0x313b, 0x151: 0x344c, - 0x154: 0x3159, 0x155: 0x346a, 0x156: 0x3172, 0x157: 0x3483, - 0x158: 0x3163, 0x159: 0x3474, 0x15a: 0x46f6, 0x15b: 0x4787, 0x15c: 0x317c, 0x15d: 0x348d, - 0x15e: 0x318b, 0x15f: 0x349c, 0x160: 0x46fb, 0x161: 0x478c, 0x162: 0x31a4, 0x163: 0x34ba, - 0x164: 0x3195, 0x165: 0x34ab, 0x168: 0x4705, 0x169: 0x4796, - 0x16a: 0x470a, 0x16b: 0x479b, 0x16c: 0x31c2, 0x16d: 0x34d8, 0x16e: 0x31cc, 0x16f: 0x34e2, - 0x170: 0x31d1, 0x171: 0x34e7, 0x172: 0x31ef, 0x173: 0x3505, 0x174: 0x3212, 0x175: 0x3528, - 0x176: 0x323a, 0x177: 0x3555, 0x178: 0x324e, 0x179: 0x325d, 0x17a: 0x357d, 0x17b: 0x3267, - 0x17c: 0x3587, 0x17d: 0x326c, 0x17e: 0x358c, 0x17f: 0xa000, - // Block 0x6, offset 0x180 - 0x184: 0x8100, 0x185: 0x8100, - 0x186: 0x8100, - 0x18d: 0x2f88, 0x18e: 0x3294, 0x18f: 0x3096, 0x190: 0x33a2, 0x191: 0x3140, - 0x192: 0x3451, 0x193: 0x31d6, 0x194: 0x34ec, 0x195: 0x39cf, 0x196: 0x3b5e, 0x197: 0x39c8, - 0x198: 0x3b57, 0x199: 0x39d6, 0x19a: 0x3b65, 0x19b: 0x39c1, 0x19c: 0x3b50, - 0x19e: 0x38b0, 0x19f: 0x3a3f, 0x1a0: 0x38a9, 0x1a1: 0x3a38, 0x1a2: 0x35b3, 0x1a3: 0x35c5, - 0x1a6: 0x3041, 0x1a7: 0x334d, 0x1a8: 0x30be, 0x1a9: 0x33cf, - 0x1aa: 0x46ec, 0x1ab: 0x477d, 0x1ac: 0x3990, 0x1ad: 0x3b1f, 0x1ae: 0x35d7, 0x1af: 0x35dd, - 0x1b0: 0x33c5, 0x1b4: 0x3028, 0x1b5: 0x3334, - 0x1b8: 0x30fa, 0x1b9: 0x340b, 0x1ba: 0x38b7, 0x1bb: 0x3a46, - 0x1bc: 0x35ad, 0x1bd: 0x35bf, 0x1be: 0x35b9, 0x1bf: 0x35cb, - // Block 0x7, offset 0x1c0 - 0x1c0: 0x2f8d, 0x1c1: 0x3299, 0x1c2: 0x2f92, 0x1c3: 0x329e, 0x1c4: 0x300a, 0x1c5: 0x3316, - 0x1c6: 0x300f, 0x1c7: 0x331b, 0x1c8: 0x309b, 0x1c9: 0x33a7, 0x1ca: 0x30a0, 0x1cb: 0x33ac, - 0x1cc: 0x3145, 0x1cd: 0x3456, 0x1ce: 0x314a, 0x1cf: 0x345b, 0x1d0: 0x3168, 0x1d1: 0x3479, - 0x1d2: 0x316d, 0x1d3: 0x347e, 0x1d4: 0x31db, 0x1d5: 0x34f1, 0x1d6: 0x31e0, 0x1d7: 0x34f6, - 0x1d8: 0x3186, 0x1d9: 0x3497, 0x1da: 0x319f, 0x1db: 0x34b5, - 0x1de: 0x305a, 0x1df: 0x3366, - 0x1e6: 0x4692, 0x1e7: 0x4723, 0x1e8: 0x46ba, 0x1e9: 0x474b, - 0x1ea: 0x395f, 0x1eb: 0x3aee, 0x1ec: 0x393c, 0x1ed: 0x3acb, 0x1ee: 0x46d8, 0x1ef: 0x4769, - 0x1f0: 0x3958, 0x1f1: 0x3ae7, 0x1f2: 0x3244, 0x1f3: 0x355f, - // Block 0x8, offset 0x200 - 0x200: 0x9932, 0x201: 0x9932, 0x202: 0x9932, 0x203: 0x9932, 0x204: 0x9932, 0x205: 0x8132, - 0x206: 0x9932, 0x207: 0x9932, 0x208: 0x9932, 0x209: 0x9932, 0x20a: 0x9932, 0x20b: 0x9932, - 0x20c: 0x9932, 0x20d: 0x8132, 0x20e: 0x8132, 0x20f: 0x9932, 0x210: 0x8132, 0x211: 0x9932, - 0x212: 0x8132, 0x213: 0x9932, 0x214: 0x9932, 0x215: 0x8133, 0x216: 0x812d, 0x217: 0x812d, - 0x218: 0x812d, 0x219: 0x812d, 0x21a: 0x8133, 0x21b: 0x992b, 0x21c: 0x812d, 0x21d: 0x812d, - 0x21e: 0x812d, 0x21f: 0x812d, 0x220: 0x812d, 0x221: 0x8129, 0x222: 0x8129, 0x223: 0x992d, - 0x224: 0x992d, 0x225: 0x992d, 0x226: 0x992d, 0x227: 0x9929, 0x228: 0x9929, 0x229: 0x812d, - 0x22a: 0x812d, 0x22b: 0x812d, 0x22c: 0x812d, 0x22d: 0x992d, 0x22e: 0x992d, 0x22f: 0x812d, - 0x230: 0x992d, 0x231: 0x992d, 0x232: 0x812d, 0x233: 0x812d, 0x234: 0x8101, 0x235: 0x8101, - 0x236: 0x8101, 0x237: 0x8101, 0x238: 0x9901, 0x239: 0x812d, 0x23a: 0x812d, 0x23b: 0x812d, - 0x23c: 0x812d, 0x23d: 0x8132, 0x23e: 0x8132, 0x23f: 0x8132, - // Block 0x9, offset 0x240 - 0x240: 0x49ae, 0x241: 0x49b3, 0x242: 0x9932, 0x243: 0x49b8, 0x244: 0x4a71, 0x245: 0x9936, - 0x246: 0x8132, 0x247: 0x812d, 0x248: 0x812d, 0x249: 0x812d, 0x24a: 0x8132, 0x24b: 0x8132, - 0x24c: 0x8132, 0x24d: 0x812d, 0x24e: 0x812d, 0x250: 0x8132, 0x251: 0x8132, - 0x252: 0x8132, 0x253: 0x812d, 0x254: 0x812d, 0x255: 0x812d, 0x256: 0x812d, 0x257: 0x8132, - 0x258: 0x8133, 0x259: 0x812d, 0x25a: 0x812d, 0x25b: 0x8132, 0x25c: 0x8134, 0x25d: 0x8135, - 0x25e: 0x8135, 0x25f: 0x8134, 0x260: 0x8135, 0x261: 0x8135, 0x262: 0x8134, 0x263: 0x8132, - 0x264: 0x8132, 0x265: 0x8132, 0x266: 0x8132, 0x267: 0x8132, 0x268: 0x8132, 0x269: 0x8132, - 0x26a: 0x8132, 0x26b: 0x8132, 0x26c: 0x8132, 0x26d: 0x8132, 0x26e: 0x8132, 0x26f: 0x8132, - 0x274: 0x0170, - 0x27a: 0x8100, - 0x27e: 0x0037, - // Block 0xa, offset 0x280 - 0x284: 0x8100, 0x285: 0x35a1, - 0x286: 0x35e9, 0x287: 0x00ce, 0x288: 0x3607, 0x289: 0x3613, 0x28a: 0x3625, - 0x28c: 0x3643, 0x28e: 0x3655, 0x28f: 0x3673, 0x290: 0x3e08, 0x291: 0xa000, - 0x295: 0xa000, 0x297: 0xa000, - 0x299: 0xa000, - 0x29f: 0xa000, 0x2a1: 0xa000, - 0x2a5: 0xa000, 0x2a9: 0xa000, - 0x2aa: 0x3637, 0x2ab: 0x3667, 0x2ac: 0x47fe, 0x2ad: 0x3697, 0x2ae: 0x4828, 0x2af: 0x36a9, - 0x2b0: 0x3e70, 0x2b1: 0xa000, 0x2b5: 0xa000, - 0x2b7: 0xa000, 0x2b9: 0xa000, - 0x2bf: 0xa000, - // Block 0xb, offset 0x2c0 - 0x2c0: 0x3721, 0x2c1: 0x372d, 0x2c3: 0x371b, - 0x2c6: 0xa000, 0x2c7: 0x3709, - 0x2cc: 0x375d, 0x2cd: 0x3745, 0x2ce: 0x376f, 0x2d0: 0xa000, - 0x2d3: 0xa000, 0x2d5: 0xa000, 0x2d6: 0xa000, 0x2d7: 0xa000, - 0x2d8: 0xa000, 0x2d9: 0x3751, 0x2da: 0xa000, - 0x2de: 0xa000, 0x2e3: 0xa000, - 0x2e7: 0xa000, - 0x2eb: 0xa000, 0x2ed: 0xa000, - 0x2f0: 0xa000, 0x2f3: 0xa000, 0x2f5: 0xa000, - 0x2f6: 0xa000, 0x2f7: 0xa000, 0x2f8: 0xa000, 0x2f9: 0x37d5, 0x2fa: 0xa000, - 0x2fe: 0xa000, - // Block 0xc, offset 0x300 - 0x301: 0x3733, 0x302: 0x37b7, - 0x310: 0x370f, 0x311: 0x3793, - 0x312: 0x3715, 0x313: 0x3799, 0x316: 0x3727, 0x317: 0x37ab, - 0x318: 0xa000, 0x319: 0xa000, 0x31a: 0x3829, 0x31b: 0x382f, 0x31c: 0x3739, 0x31d: 0x37bd, - 0x31e: 0x373f, 0x31f: 0x37c3, 0x322: 0x374b, 0x323: 0x37cf, - 0x324: 0x3757, 0x325: 0x37db, 0x326: 0x3763, 0x327: 0x37e7, 0x328: 0xa000, 0x329: 0xa000, - 0x32a: 0x3835, 0x32b: 0x383b, 0x32c: 0x378d, 0x32d: 0x3811, 0x32e: 0x3769, 0x32f: 0x37ed, - 0x330: 0x3775, 0x331: 0x37f9, 0x332: 0x377b, 0x333: 0x37ff, 0x334: 0x3781, 0x335: 0x3805, - 0x338: 0x3787, 0x339: 0x380b, - // Block 0xd, offset 0x340 - 0x351: 0x812d, - 0x352: 0x8132, 0x353: 0x8132, 0x354: 0x8132, 0x355: 0x8132, 0x356: 0x812d, 0x357: 0x8132, - 0x358: 0x8132, 0x359: 0x8132, 0x35a: 0x812e, 0x35b: 0x812d, 0x35c: 0x8132, 0x35d: 0x8132, - 0x35e: 0x8132, 0x35f: 0x8132, 0x360: 0x8132, 0x361: 0x8132, 0x362: 0x812d, 0x363: 0x812d, - 0x364: 0x812d, 0x365: 0x812d, 0x366: 0x812d, 0x367: 0x812d, 0x368: 0x8132, 0x369: 0x8132, - 0x36a: 0x812d, 0x36b: 0x8132, 0x36c: 0x8132, 0x36d: 0x812e, 0x36e: 0x8131, 0x36f: 0x8132, - 0x370: 0x8105, 0x371: 0x8106, 0x372: 0x8107, 0x373: 0x8108, 0x374: 0x8109, 0x375: 0x810a, - 0x376: 0x810b, 0x377: 0x810c, 0x378: 0x810d, 0x379: 0x810e, 0x37a: 0x810e, 0x37b: 0x810f, - 0x37c: 0x8110, 0x37d: 0x8111, 0x37f: 0x8112, - // Block 0xe, offset 0x380 - 0x388: 0xa000, 0x38a: 0xa000, 0x38b: 0x8116, - 0x38c: 0x8117, 0x38d: 0x8118, 0x38e: 0x8119, 0x38f: 0x811a, 0x390: 0x811b, 0x391: 0x811c, - 0x392: 0x811d, 0x393: 0x9932, 0x394: 0x9932, 0x395: 0x992d, 0x396: 0x812d, 0x397: 0x8132, - 0x398: 0x8132, 0x399: 0x8132, 0x39a: 0x8132, 0x39b: 0x8132, 0x39c: 0x812d, 0x39d: 0x8132, - 0x39e: 0x8132, 0x39f: 0x812d, - 0x3b0: 0x811e, - // Block 0xf, offset 0x3c0 - 0x3d3: 0x812d, 0x3d4: 0x8132, 0x3d5: 0x8132, 0x3d6: 0x8132, 0x3d7: 0x8132, - 0x3d8: 0x8132, 0x3d9: 0x8132, 0x3da: 0x8132, 0x3db: 0x8132, 0x3dc: 0x8132, 0x3dd: 0x8132, - 0x3de: 0x8132, 0x3df: 0x8132, 0x3e0: 0x8132, 0x3e1: 0x8132, 0x3e3: 0x812d, - 0x3e4: 0x8132, 0x3e5: 0x8132, 0x3e6: 0x812d, 0x3e7: 0x8132, 0x3e8: 0x8132, 0x3e9: 0x812d, - 0x3ea: 0x8132, 0x3eb: 0x8132, 0x3ec: 0x8132, 0x3ed: 0x812d, 0x3ee: 0x812d, 0x3ef: 0x812d, - 0x3f0: 0x8116, 0x3f1: 0x8117, 0x3f2: 0x8118, 0x3f3: 0x8132, 0x3f4: 0x8132, 0x3f5: 0x8132, - 0x3f6: 0x812d, 0x3f7: 0x8132, 0x3f8: 0x8132, 0x3f9: 0x812d, 0x3fa: 0x812d, 0x3fb: 0x8132, - 0x3fc: 0x8132, 0x3fd: 0x8132, 0x3fe: 0x8132, 0x3ff: 0x8132, - // Block 0x10, offset 0x400 - 0x405: 0xa000, - 0x406: 0x2d26, 0x407: 0xa000, 0x408: 0x2d2e, 0x409: 0xa000, 0x40a: 0x2d36, 0x40b: 0xa000, - 0x40c: 0x2d3e, 0x40d: 0xa000, 0x40e: 0x2d46, 0x411: 0xa000, - 0x412: 0x2d4e, - 0x434: 0x8102, 0x435: 0x9900, - 0x43a: 0xa000, 0x43b: 0x2d56, - 0x43c: 0xa000, 0x43d: 0x2d5e, 0x43e: 0xa000, 0x43f: 0xa000, - // Block 0x11, offset 0x440 - 0x440: 0x8132, 0x441: 0x8132, 0x442: 0x812d, 0x443: 0x8132, 0x444: 0x8132, 0x445: 0x8132, - 0x446: 0x8132, 0x447: 0x8132, 0x448: 0x8132, 0x449: 0x8132, 0x44a: 0x812d, 0x44b: 0x8132, - 0x44c: 0x8132, 0x44d: 0x8135, 0x44e: 0x812a, 0x44f: 0x812d, 0x450: 0x8129, 0x451: 0x8132, - 0x452: 0x8132, 0x453: 0x8132, 0x454: 0x8132, 0x455: 0x8132, 0x456: 0x8132, 0x457: 0x8132, - 0x458: 0x8132, 0x459: 0x8132, 0x45a: 0x8132, 0x45b: 0x8132, 0x45c: 0x8132, 0x45d: 0x8132, - 0x45e: 0x8132, 0x45f: 0x8132, 0x460: 0x8132, 0x461: 0x8132, 0x462: 0x8132, 0x463: 0x8132, - 0x464: 0x8132, 0x465: 0x8132, 0x466: 0x8132, 0x467: 0x8132, 0x468: 0x8132, 0x469: 0x8132, - 0x46a: 0x8132, 0x46b: 0x8132, 0x46c: 0x8132, 0x46d: 0x8132, 0x46e: 0x8132, 0x46f: 0x8132, - 0x470: 0x8132, 0x471: 0x8132, 0x472: 0x8132, 0x473: 0x8132, 0x474: 0x8132, 0x475: 0x8132, - 0x476: 0x8133, 0x477: 0x8131, 0x478: 0x8131, 0x479: 0x812d, 0x47b: 0x8132, - 0x47c: 0x8134, 0x47d: 0x812d, 0x47e: 0x8132, 0x47f: 0x812d, - // Block 0x12, offset 0x480 - 0x480: 0x2f97, 0x481: 0x32a3, 0x482: 0x2fa1, 0x483: 0x32ad, 0x484: 0x2fa6, 0x485: 0x32b2, - 0x486: 0x2fab, 0x487: 0x32b7, 0x488: 0x38cc, 0x489: 0x3a5b, 0x48a: 0x2fc4, 0x48b: 0x32d0, - 0x48c: 0x2fce, 0x48d: 0x32da, 0x48e: 0x2fdd, 0x48f: 0x32e9, 0x490: 0x2fd3, 0x491: 0x32df, - 0x492: 0x2fd8, 0x493: 0x32e4, 0x494: 0x38ef, 0x495: 0x3a7e, 0x496: 0x38f6, 0x497: 0x3a85, - 0x498: 0x3019, 0x499: 0x3325, 0x49a: 0x301e, 0x49b: 0x332a, 0x49c: 0x3904, 0x49d: 0x3a93, - 0x49e: 0x3023, 0x49f: 0x332f, 0x4a0: 0x3032, 0x4a1: 0x333e, 0x4a2: 0x3050, 0x4a3: 0x335c, - 0x4a4: 0x305f, 0x4a5: 0x336b, 0x4a6: 0x3055, 0x4a7: 0x3361, 0x4a8: 0x3064, 0x4a9: 0x3370, - 0x4aa: 0x3069, 0x4ab: 0x3375, 0x4ac: 0x30af, 0x4ad: 0x33bb, 0x4ae: 0x390b, 0x4af: 0x3a9a, - 0x4b0: 0x30b9, 0x4b1: 0x33ca, 0x4b2: 0x30c3, 0x4b3: 0x33d4, 0x4b4: 0x30cd, 0x4b5: 0x33de, - 0x4b6: 0x46c4, 0x4b7: 0x4755, 0x4b8: 0x3912, 0x4b9: 0x3aa1, 0x4ba: 0x30e6, 0x4bb: 0x33f7, - 0x4bc: 0x30e1, 0x4bd: 0x33f2, 0x4be: 0x30eb, 0x4bf: 0x33fc, - // Block 0x13, offset 0x4c0 - 0x4c0: 0x30f0, 0x4c1: 0x3401, 0x4c2: 0x30f5, 0x4c3: 0x3406, 0x4c4: 0x3109, 0x4c5: 0x341a, - 0x4c6: 0x3113, 0x4c7: 0x3424, 0x4c8: 0x3122, 0x4c9: 0x3433, 0x4ca: 0x311d, 0x4cb: 0x342e, - 0x4cc: 0x3935, 0x4cd: 0x3ac4, 0x4ce: 0x3943, 0x4cf: 0x3ad2, 0x4d0: 0x394a, 0x4d1: 0x3ad9, - 0x4d2: 0x3951, 0x4d3: 0x3ae0, 0x4d4: 0x314f, 0x4d5: 0x3460, 0x4d6: 0x3154, 0x4d7: 0x3465, - 0x4d8: 0x315e, 0x4d9: 0x346f, 0x4da: 0x46f1, 0x4db: 0x4782, 0x4dc: 0x3997, 0x4dd: 0x3b26, - 0x4de: 0x3177, 0x4df: 0x3488, 0x4e0: 0x3181, 0x4e1: 0x3492, 0x4e2: 0x4700, 0x4e3: 0x4791, - 0x4e4: 0x399e, 0x4e5: 0x3b2d, 0x4e6: 0x39a5, 0x4e7: 0x3b34, 0x4e8: 0x39ac, 0x4e9: 0x3b3b, - 0x4ea: 0x3190, 0x4eb: 0x34a1, 0x4ec: 0x319a, 0x4ed: 0x34b0, 0x4ee: 0x31ae, 0x4ef: 0x34c4, - 0x4f0: 0x31a9, 0x4f1: 0x34bf, 0x4f2: 0x31ea, 0x4f3: 0x3500, 0x4f4: 0x31f9, 0x4f5: 0x350f, - 0x4f6: 0x31f4, 0x4f7: 0x350a, 0x4f8: 0x39b3, 0x4f9: 0x3b42, 0x4fa: 0x39ba, 0x4fb: 0x3b49, - 0x4fc: 0x31fe, 0x4fd: 0x3514, 0x4fe: 0x3203, 0x4ff: 0x3519, - // Block 0x14, offset 0x500 - 0x500: 0x3208, 0x501: 0x351e, 0x502: 0x320d, 0x503: 0x3523, 0x504: 0x321c, 0x505: 0x3532, - 0x506: 0x3217, 0x507: 0x352d, 0x508: 0x3221, 0x509: 0x353c, 0x50a: 0x3226, 0x50b: 0x3541, - 0x50c: 0x322b, 0x50d: 0x3546, 0x50e: 0x3249, 0x50f: 0x3564, 0x510: 0x3262, 0x511: 0x3582, - 0x512: 0x3271, 0x513: 0x3591, 0x514: 0x3276, 0x515: 0x3596, 0x516: 0x337a, 0x517: 0x34a6, - 0x518: 0x3537, 0x519: 0x3573, 0x51b: 0x35d1, - 0x520: 0x46a1, 0x521: 0x4732, 0x522: 0x2f83, 0x523: 0x328f, - 0x524: 0x3878, 0x525: 0x3a07, 0x526: 0x3871, 0x527: 0x3a00, 0x528: 0x3886, 0x529: 0x3a15, - 0x52a: 0x387f, 0x52b: 0x3a0e, 0x52c: 0x38be, 0x52d: 0x3a4d, 0x52e: 0x3894, 0x52f: 0x3a23, - 0x530: 0x388d, 0x531: 0x3a1c, 0x532: 0x38a2, 0x533: 0x3a31, 0x534: 0x389b, 0x535: 0x3a2a, - 0x536: 0x38c5, 0x537: 0x3a54, 0x538: 0x46b5, 0x539: 0x4746, 0x53a: 0x3000, 0x53b: 0x330c, - 0x53c: 0x2fec, 0x53d: 0x32f8, 0x53e: 0x38da, 0x53f: 0x3a69, - // Block 0x15, offset 0x540 - 0x540: 0x38d3, 0x541: 0x3a62, 0x542: 0x38e8, 0x543: 0x3a77, 0x544: 0x38e1, 0x545: 0x3a70, - 0x546: 0x38fd, 0x547: 0x3a8c, 0x548: 0x3091, 0x549: 0x339d, 0x54a: 0x30a5, 0x54b: 0x33b1, - 0x54c: 0x46e7, 0x54d: 0x4778, 0x54e: 0x3136, 0x54f: 0x3447, 0x550: 0x3920, 0x551: 0x3aaf, - 0x552: 0x3919, 0x553: 0x3aa8, 0x554: 0x392e, 0x555: 0x3abd, 0x556: 0x3927, 0x557: 0x3ab6, - 0x558: 0x3989, 0x559: 0x3b18, 0x55a: 0x396d, 0x55b: 0x3afc, 0x55c: 0x3966, 0x55d: 0x3af5, - 0x55e: 0x397b, 0x55f: 0x3b0a, 0x560: 0x3974, 0x561: 0x3b03, 0x562: 0x3982, 0x563: 0x3b11, - 0x564: 0x31e5, 0x565: 0x34fb, 0x566: 0x31c7, 0x567: 0x34dd, 0x568: 0x39e4, 0x569: 0x3b73, - 0x56a: 0x39dd, 0x56b: 0x3b6c, 0x56c: 0x39f2, 0x56d: 0x3b81, 0x56e: 0x39eb, 0x56f: 0x3b7a, - 0x570: 0x39f9, 0x571: 0x3b88, 0x572: 0x3230, 0x573: 0x354b, 0x574: 0x3258, 0x575: 0x3578, - 0x576: 0x3253, 0x577: 0x356e, 0x578: 0x323f, 0x579: 0x355a, - // Block 0x16, offset 0x580 - 0x580: 0x4804, 0x581: 0x480a, 0x582: 0x491e, 0x583: 0x4936, 0x584: 0x4926, 0x585: 0x493e, - 0x586: 0x492e, 0x587: 0x4946, 0x588: 0x47aa, 0x589: 0x47b0, 0x58a: 0x488e, 0x58b: 0x48a6, - 0x58c: 0x4896, 0x58d: 0x48ae, 0x58e: 0x489e, 0x58f: 0x48b6, 0x590: 0x4816, 0x591: 0x481c, - 0x592: 0x3db8, 0x593: 0x3dc8, 0x594: 0x3dc0, 0x595: 0x3dd0, - 0x598: 0x47b6, 0x599: 0x47bc, 0x59a: 0x3ce8, 0x59b: 0x3cf8, 0x59c: 0x3cf0, 0x59d: 0x3d00, - 0x5a0: 0x482e, 0x5a1: 0x4834, 0x5a2: 0x494e, 0x5a3: 0x4966, - 0x5a4: 0x4956, 0x5a5: 0x496e, 0x5a6: 0x495e, 0x5a7: 0x4976, 0x5a8: 0x47c2, 0x5a9: 0x47c8, - 0x5aa: 0x48be, 0x5ab: 0x48d6, 0x5ac: 0x48c6, 0x5ad: 0x48de, 0x5ae: 0x48ce, 0x5af: 0x48e6, - 0x5b0: 0x4846, 0x5b1: 0x484c, 0x5b2: 0x3e18, 0x5b3: 0x3e30, 0x5b4: 0x3e20, 0x5b5: 0x3e38, - 0x5b6: 0x3e28, 0x5b7: 0x3e40, 0x5b8: 0x47ce, 0x5b9: 0x47d4, 0x5ba: 0x3d18, 0x5bb: 0x3d30, - 0x5bc: 0x3d20, 0x5bd: 0x3d38, 0x5be: 0x3d28, 0x5bf: 0x3d40, - // Block 0x17, offset 0x5c0 - 0x5c0: 0x4852, 0x5c1: 0x4858, 0x5c2: 0x3e48, 0x5c3: 0x3e58, 0x5c4: 0x3e50, 0x5c5: 0x3e60, - 0x5c8: 0x47da, 0x5c9: 0x47e0, 0x5ca: 0x3d48, 0x5cb: 0x3d58, - 0x5cc: 0x3d50, 0x5cd: 0x3d60, 0x5d0: 0x4864, 0x5d1: 0x486a, - 0x5d2: 0x3e80, 0x5d3: 0x3e98, 0x5d4: 0x3e88, 0x5d5: 0x3ea0, 0x5d6: 0x3e90, 0x5d7: 0x3ea8, - 0x5d9: 0x47e6, 0x5db: 0x3d68, 0x5dd: 0x3d70, - 0x5df: 0x3d78, 0x5e0: 0x487c, 0x5e1: 0x4882, 0x5e2: 0x497e, 0x5e3: 0x4996, - 0x5e4: 0x4986, 0x5e5: 0x499e, 0x5e6: 0x498e, 0x5e7: 0x49a6, 0x5e8: 0x47ec, 0x5e9: 0x47f2, - 0x5ea: 0x48ee, 0x5eb: 0x4906, 0x5ec: 0x48f6, 0x5ed: 0x490e, 0x5ee: 0x48fe, 0x5ef: 0x4916, - 0x5f0: 0x47f8, 0x5f1: 0x431e, 0x5f2: 0x3691, 0x5f3: 0x4324, 0x5f4: 0x4822, 0x5f5: 0x432a, - 0x5f6: 0x36a3, 0x5f7: 0x4330, 0x5f8: 0x36c1, 0x5f9: 0x4336, 0x5fa: 0x36d9, 0x5fb: 0x433c, - 0x5fc: 0x4870, 0x5fd: 0x4342, - // Block 0x18, offset 0x600 - 0x600: 0x3da0, 0x601: 0x3da8, 0x602: 0x4184, 0x603: 0x41a2, 0x604: 0x418e, 0x605: 0x41ac, - 0x606: 0x4198, 0x607: 0x41b6, 0x608: 0x3cd8, 0x609: 0x3ce0, 0x60a: 0x40d0, 0x60b: 0x40ee, - 0x60c: 0x40da, 0x60d: 0x40f8, 0x60e: 0x40e4, 0x60f: 0x4102, 0x610: 0x3de8, 0x611: 0x3df0, - 0x612: 0x41c0, 0x613: 0x41de, 0x614: 0x41ca, 0x615: 0x41e8, 0x616: 0x41d4, 0x617: 0x41f2, - 0x618: 0x3d08, 0x619: 0x3d10, 0x61a: 0x410c, 0x61b: 0x412a, 0x61c: 0x4116, 0x61d: 0x4134, - 0x61e: 0x4120, 0x61f: 0x413e, 0x620: 0x3ec0, 0x621: 0x3ec8, 0x622: 0x41fc, 0x623: 0x421a, - 0x624: 0x4206, 0x625: 0x4224, 0x626: 0x4210, 0x627: 0x422e, 0x628: 0x3d80, 0x629: 0x3d88, - 0x62a: 0x4148, 0x62b: 0x4166, 0x62c: 0x4152, 0x62d: 0x4170, 0x62e: 0x415c, 0x62f: 0x417a, - 0x630: 0x3685, 0x631: 0x367f, 0x632: 0x3d90, 0x633: 0x368b, 0x634: 0x3d98, - 0x636: 0x4810, 0x637: 0x3db0, 0x638: 0x35f5, 0x639: 0x35ef, 0x63a: 0x35e3, 0x63b: 0x42ee, - 0x63c: 0x35fb, 0x63d: 0x8100, 0x63e: 0x01d3, 0x63f: 0xa100, - // Block 0x19, offset 0x640 - 0x640: 0x8100, 0x641: 0x35a7, 0x642: 0x3dd8, 0x643: 0x369d, 0x644: 0x3de0, - 0x646: 0x483a, 0x647: 0x3df8, 0x648: 0x3601, 0x649: 0x42f4, 0x64a: 0x360d, 0x64b: 0x42fa, - 0x64c: 0x3619, 0x64d: 0x3b8f, 0x64e: 0x3b96, 0x64f: 0x3b9d, 0x650: 0x36b5, 0x651: 0x36af, - 0x652: 0x3e00, 0x653: 0x44e4, 0x656: 0x36bb, 0x657: 0x3e10, - 0x658: 0x3631, 0x659: 0x362b, 0x65a: 0x361f, 0x65b: 0x4300, 0x65d: 0x3ba4, - 0x65e: 0x3bab, 0x65f: 0x3bb2, 0x660: 0x36eb, 0x661: 0x36e5, 0x662: 0x3e68, 0x663: 0x44ec, - 0x664: 0x36cd, 0x665: 0x36d3, 0x666: 0x36f1, 0x667: 0x3e78, 0x668: 0x3661, 0x669: 0x365b, - 0x66a: 0x364f, 0x66b: 0x430c, 0x66c: 0x3649, 0x66d: 0x359b, 0x66e: 0x42e8, 0x66f: 0x0081, - 0x672: 0x3eb0, 0x673: 0x36f7, 0x674: 0x3eb8, - 0x676: 0x4888, 0x677: 0x3ed0, 0x678: 0x363d, 0x679: 0x4306, 0x67a: 0x366d, 0x67b: 0x4318, - 0x67c: 0x3679, 0x67d: 0x4256, 0x67e: 0xa100, - // Block 0x1a, offset 0x680 - 0x681: 0x3c06, 0x683: 0xa000, 0x684: 0x3c0d, 0x685: 0xa000, - 0x687: 0x3c14, 0x688: 0xa000, 0x689: 0x3c1b, - 0x68d: 0xa000, - 0x6a0: 0x2f65, 0x6a1: 0xa000, 0x6a2: 0x3c29, - 0x6a4: 0xa000, 0x6a5: 0xa000, - 0x6ad: 0x3c22, 0x6ae: 0x2f60, 0x6af: 0x2f6a, - 0x6b0: 0x3c30, 0x6b1: 0x3c37, 0x6b2: 0xa000, 0x6b3: 0xa000, 0x6b4: 0x3c3e, 0x6b5: 0x3c45, - 0x6b6: 0xa000, 0x6b7: 0xa000, 0x6b8: 0x3c4c, 0x6b9: 0x3c53, 0x6ba: 0xa000, 0x6bb: 0xa000, - 0x6bc: 0xa000, 0x6bd: 0xa000, - // Block 0x1b, offset 0x6c0 - 0x6c0: 0x3c5a, 0x6c1: 0x3c61, 0x6c2: 0xa000, 0x6c3: 0xa000, 0x6c4: 0x3c76, 0x6c5: 0x3c7d, - 0x6c6: 0xa000, 0x6c7: 0xa000, 0x6c8: 0x3c84, 0x6c9: 0x3c8b, - 0x6d1: 0xa000, - 0x6d2: 0xa000, - 0x6e2: 0xa000, - 0x6e8: 0xa000, 0x6e9: 0xa000, - 0x6eb: 0xa000, 0x6ec: 0x3ca0, 0x6ed: 0x3ca7, 0x6ee: 0x3cae, 0x6ef: 0x3cb5, - 0x6f2: 0xa000, 0x6f3: 0xa000, 0x6f4: 0xa000, 0x6f5: 0xa000, - // Block 0x1c, offset 0x700 - 0x706: 0xa000, 0x70b: 0xa000, - 0x70c: 0x3f08, 0x70d: 0xa000, 0x70e: 0x3f10, 0x70f: 0xa000, 0x710: 0x3f18, 0x711: 0xa000, - 0x712: 0x3f20, 0x713: 0xa000, 0x714: 0x3f28, 0x715: 0xa000, 0x716: 0x3f30, 0x717: 0xa000, - 0x718: 0x3f38, 0x719: 0xa000, 0x71a: 0x3f40, 0x71b: 0xa000, 0x71c: 0x3f48, 0x71d: 0xa000, - 0x71e: 0x3f50, 0x71f: 0xa000, 0x720: 0x3f58, 0x721: 0xa000, 0x722: 0x3f60, - 0x724: 0xa000, 0x725: 0x3f68, 0x726: 0xa000, 0x727: 0x3f70, 0x728: 0xa000, 0x729: 0x3f78, - 0x72f: 0xa000, - 0x730: 0x3f80, 0x731: 0x3f88, 0x732: 0xa000, 0x733: 0x3f90, 0x734: 0x3f98, 0x735: 0xa000, - 0x736: 0x3fa0, 0x737: 0x3fa8, 0x738: 0xa000, 0x739: 0x3fb0, 0x73a: 0x3fb8, 0x73b: 0xa000, - 0x73c: 0x3fc0, 0x73d: 0x3fc8, - // Block 0x1d, offset 0x740 - 0x754: 0x3f00, - 0x759: 0x9903, 0x75a: 0x9903, 0x75b: 0x8100, 0x75c: 0x8100, 0x75d: 0xa000, - 0x75e: 0x3fd0, - 0x766: 0xa000, - 0x76b: 0xa000, 0x76c: 0x3fe0, 0x76d: 0xa000, 0x76e: 0x3fe8, 0x76f: 0xa000, - 0x770: 0x3ff0, 0x771: 0xa000, 0x772: 0x3ff8, 0x773: 0xa000, 0x774: 0x4000, 0x775: 0xa000, - 0x776: 0x4008, 0x777: 0xa000, 0x778: 0x4010, 0x779: 0xa000, 0x77a: 0x4018, 0x77b: 0xa000, - 0x77c: 0x4020, 0x77d: 0xa000, 0x77e: 0x4028, 0x77f: 0xa000, - // Block 0x1e, offset 0x780 - 0x780: 0x4030, 0x781: 0xa000, 0x782: 0x4038, 0x784: 0xa000, 0x785: 0x4040, - 0x786: 0xa000, 0x787: 0x4048, 0x788: 0xa000, 0x789: 0x4050, - 0x78f: 0xa000, 0x790: 0x4058, 0x791: 0x4060, - 0x792: 0xa000, 0x793: 0x4068, 0x794: 0x4070, 0x795: 0xa000, 0x796: 0x4078, 0x797: 0x4080, - 0x798: 0xa000, 0x799: 0x4088, 0x79a: 0x4090, 0x79b: 0xa000, 0x79c: 0x4098, 0x79d: 0x40a0, - 0x7af: 0xa000, - 0x7b0: 0xa000, 0x7b1: 0xa000, 0x7b2: 0xa000, 0x7b4: 0x3fd8, - 0x7b7: 0x40a8, 0x7b8: 0x40b0, 0x7b9: 0x40b8, 0x7ba: 0x40c0, - 0x7bd: 0xa000, 0x7be: 0x40c8, - // Block 0x1f, offset 0x7c0 - 0x7c0: 0x1377, 0x7c1: 0x0cfb, 0x7c2: 0x13d3, 0x7c3: 0x139f, 0x7c4: 0x0e57, 0x7c5: 0x06eb, - 0x7c6: 0x08df, 0x7c7: 0x162b, 0x7c8: 0x162b, 0x7c9: 0x0a0b, 0x7ca: 0x145f, 0x7cb: 0x0943, - 0x7cc: 0x0a07, 0x7cd: 0x0bef, 0x7ce: 0x0fcf, 0x7cf: 0x115f, 0x7d0: 0x1297, 0x7d1: 0x12d3, - 0x7d2: 0x1307, 0x7d3: 0x141b, 0x7d4: 0x0d73, 0x7d5: 0x0dff, 0x7d6: 0x0eab, 0x7d7: 0x0f43, - 0x7d8: 0x125f, 0x7d9: 0x1447, 0x7da: 0x1573, 0x7db: 0x070f, 0x7dc: 0x08b3, 0x7dd: 0x0d87, - 0x7de: 0x0ecf, 0x7df: 0x1293, 0x7e0: 0x15c3, 0x7e1: 0x0ab3, 0x7e2: 0x0e77, 0x7e3: 0x1283, - 0x7e4: 0x1317, 0x7e5: 0x0c23, 0x7e6: 0x11bb, 0x7e7: 0x12df, 0x7e8: 0x0b1f, 0x7e9: 0x0d0f, - 0x7ea: 0x0e17, 0x7eb: 0x0f1b, 0x7ec: 0x1427, 0x7ed: 0x074f, 0x7ee: 0x07e7, 0x7ef: 0x0853, - 0x7f0: 0x0c8b, 0x7f1: 0x0d7f, 0x7f2: 0x0ecb, 0x7f3: 0x0fef, 0x7f4: 0x1177, 0x7f5: 0x128b, - 0x7f6: 0x12a3, 0x7f7: 0x13c7, 0x7f8: 0x14ef, 0x7f9: 0x15a3, 0x7fa: 0x15bf, 0x7fb: 0x102b, - 0x7fc: 0x106b, 0x7fd: 0x1123, 0x7fe: 0x1243, 0x7ff: 0x147b, - // Block 0x20, offset 0x800 - 0x800: 0x15cb, 0x801: 0x134b, 0x802: 0x09c7, 0x803: 0x0b3b, 0x804: 0x10db, 0x805: 0x119b, - 0x806: 0x0eff, 0x807: 0x1033, 0x808: 0x1397, 0x809: 0x14e7, 0x80a: 0x09c3, 0x80b: 0x0a8f, - 0x80c: 0x0d77, 0x80d: 0x0e2b, 0x80e: 0x0e5f, 0x80f: 0x1113, 0x810: 0x113b, 0x811: 0x14a7, - 0x812: 0x084f, 0x813: 0x11a7, 0x814: 0x07f3, 0x815: 0x07ef, 0x816: 0x1097, 0x817: 0x1127, - 0x818: 0x125b, 0x819: 0x14af, 0x81a: 0x1367, 0x81b: 0x0c27, 0x81c: 0x0d73, 0x81d: 0x1357, - 0x81e: 0x06f7, 0x81f: 0x0a63, 0x820: 0x0b93, 0x821: 0x0f2f, 0x822: 0x0faf, 0x823: 0x0873, - 0x824: 0x103b, 0x825: 0x075f, 0x826: 0x0b77, 0x827: 0x06d7, 0x828: 0x0deb, 0x829: 0x0ca3, - 0x82a: 0x110f, 0x82b: 0x08c7, 0x82c: 0x09b3, 0x82d: 0x0ffb, 0x82e: 0x1263, 0x82f: 0x133b, - 0x830: 0x0db7, 0x831: 0x13f7, 0x832: 0x0de3, 0x833: 0x0c37, 0x834: 0x121b, 0x835: 0x0c57, - 0x836: 0x0fab, 0x837: 0x072b, 0x838: 0x07a7, 0x839: 0x07eb, 0x83a: 0x0d53, 0x83b: 0x10fb, - 0x83c: 0x11f3, 0x83d: 0x1347, 0x83e: 0x145b, 0x83f: 0x085b, - // Block 0x21, offset 0x840 - 0x840: 0x090f, 0x841: 0x0a17, 0x842: 0x0b2f, 0x843: 0x0cbf, 0x844: 0x0e7b, 0x845: 0x103f, - 0x846: 0x1497, 0x847: 0x157b, 0x848: 0x15cf, 0x849: 0x15e7, 0x84a: 0x0837, 0x84b: 0x0cf3, - 0x84c: 0x0da3, 0x84d: 0x13eb, 0x84e: 0x0afb, 0x84f: 0x0bd7, 0x850: 0x0bf3, 0x851: 0x0c83, - 0x852: 0x0e6b, 0x853: 0x0eb7, 0x854: 0x0f67, 0x855: 0x108b, 0x856: 0x112f, 0x857: 0x1193, - 0x858: 0x13db, 0x859: 0x126b, 0x85a: 0x1403, 0x85b: 0x147f, 0x85c: 0x080f, 0x85d: 0x083b, - 0x85e: 0x0923, 0x85f: 0x0ea7, 0x860: 0x12f3, 0x861: 0x133b, 0x862: 0x0b1b, 0x863: 0x0b8b, - 0x864: 0x0c4f, 0x865: 0x0daf, 0x866: 0x10d7, 0x867: 0x0f23, 0x868: 0x073b, 0x869: 0x097f, - 0x86a: 0x0a63, 0x86b: 0x0ac7, 0x86c: 0x0b97, 0x86d: 0x0f3f, 0x86e: 0x0f5b, 0x86f: 0x116b, - 0x870: 0x118b, 0x871: 0x1463, 0x872: 0x14e3, 0x873: 0x14f3, 0x874: 0x152f, 0x875: 0x0753, - 0x876: 0x107f, 0x877: 0x144f, 0x878: 0x14cb, 0x879: 0x0baf, 0x87a: 0x0717, 0x87b: 0x0777, - 0x87c: 0x0a67, 0x87d: 0x0a87, 0x87e: 0x0caf, 0x87f: 0x0d73, - // Block 0x22, offset 0x880 - 0x880: 0x0ec3, 0x881: 0x0fcb, 0x882: 0x1277, 0x883: 0x1417, 0x884: 0x1623, 0x885: 0x0ce3, - 0x886: 0x14a3, 0x887: 0x0833, 0x888: 0x0d2f, 0x889: 0x0d3b, 0x88a: 0x0e0f, 0x88b: 0x0e47, - 0x88c: 0x0f4b, 0x88d: 0x0fa7, 0x88e: 0x1027, 0x88f: 0x110b, 0x890: 0x153b, 0x891: 0x07af, - 0x892: 0x0c03, 0x893: 0x14b3, 0x894: 0x0767, 0x895: 0x0aab, 0x896: 0x0e2f, 0x897: 0x13df, - 0x898: 0x0b67, 0x899: 0x0bb7, 0x89a: 0x0d43, 0x89b: 0x0f2f, 0x89c: 0x14bb, 0x89d: 0x0817, - 0x89e: 0x08ff, 0x89f: 0x0a97, 0x8a0: 0x0cd3, 0x8a1: 0x0d1f, 0x8a2: 0x0d5f, 0x8a3: 0x0df3, - 0x8a4: 0x0f47, 0x8a5: 0x0fbb, 0x8a6: 0x1157, 0x8a7: 0x12f7, 0x8a8: 0x1303, 0x8a9: 0x1457, - 0x8aa: 0x14d7, 0x8ab: 0x0883, 0x8ac: 0x0e4b, 0x8ad: 0x0903, 0x8ae: 0x0ec7, 0x8af: 0x0f6b, - 0x8b0: 0x1287, 0x8b1: 0x14bf, 0x8b2: 0x15ab, 0x8b3: 0x15d3, 0x8b4: 0x0d37, 0x8b5: 0x0e27, - 0x8b6: 0x11c3, 0x8b7: 0x10b7, 0x8b8: 0x10c3, 0x8b9: 0x10e7, 0x8ba: 0x0f17, 0x8bb: 0x0e9f, - 0x8bc: 0x1363, 0x8bd: 0x0733, 0x8be: 0x122b, 0x8bf: 0x081b, - // Block 0x23, offset 0x8c0 - 0x8c0: 0x080b, 0x8c1: 0x0b0b, 0x8c2: 0x0c2b, 0x8c3: 0x10f3, 0x8c4: 0x0a53, 0x8c5: 0x0e03, - 0x8c6: 0x0cef, 0x8c7: 0x13e7, 0x8c8: 0x12e7, 0x8c9: 0x14ab, 0x8ca: 0x1323, 0x8cb: 0x0b27, - 0x8cc: 0x0787, 0x8cd: 0x095b, 0x8d0: 0x09af, - 0x8d2: 0x0cdf, 0x8d5: 0x07f7, 0x8d6: 0x0f1f, 0x8d7: 0x0fe3, - 0x8d8: 0x1047, 0x8d9: 0x1063, 0x8da: 0x1067, 0x8db: 0x107b, 0x8dc: 0x14fb, 0x8dd: 0x10eb, - 0x8de: 0x116f, 0x8e0: 0x128f, 0x8e2: 0x1353, - 0x8e5: 0x1407, 0x8e6: 0x1433, - 0x8ea: 0x154f, 0x8eb: 0x1553, 0x8ec: 0x1557, 0x8ed: 0x15bb, 0x8ee: 0x142b, 0x8ef: 0x14c7, - 0x8f0: 0x0757, 0x8f1: 0x077b, 0x8f2: 0x078f, 0x8f3: 0x084b, 0x8f4: 0x0857, 0x8f5: 0x0897, - 0x8f6: 0x094b, 0x8f7: 0x0967, 0x8f8: 0x096f, 0x8f9: 0x09ab, 0x8fa: 0x09b7, 0x8fb: 0x0a93, - 0x8fc: 0x0a9b, 0x8fd: 0x0ba3, 0x8fe: 0x0bcb, 0x8ff: 0x0bd3, - // Block 0x24, offset 0x900 - 0x900: 0x0beb, 0x901: 0x0c97, 0x902: 0x0cc7, 0x903: 0x0ce7, 0x904: 0x0d57, 0x905: 0x0e1b, - 0x906: 0x0e37, 0x907: 0x0e67, 0x908: 0x0ebb, 0x909: 0x0edb, 0x90a: 0x0f4f, 0x90b: 0x102f, - 0x90c: 0x104b, 0x90d: 0x1053, 0x90e: 0x104f, 0x90f: 0x1057, 0x910: 0x105b, 0x911: 0x105f, - 0x912: 0x1073, 0x913: 0x1077, 0x914: 0x109b, 0x915: 0x10af, 0x916: 0x10cb, 0x917: 0x112f, - 0x918: 0x1137, 0x919: 0x113f, 0x91a: 0x1153, 0x91b: 0x117b, 0x91c: 0x11cb, 0x91d: 0x11ff, - 0x91e: 0x11ff, 0x91f: 0x1267, 0x920: 0x130f, 0x921: 0x1327, 0x922: 0x135b, 0x923: 0x135f, - 0x924: 0x13a3, 0x925: 0x13a7, 0x926: 0x13ff, 0x927: 0x1407, 0x928: 0x14db, 0x929: 0x151f, - 0x92a: 0x1537, 0x92b: 0x0b9b, 0x92c: 0x171e, 0x92d: 0x11e3, - 0x930: 0x06df, 0x931: 0x07e3, 0x932: 0x07a3, 0x933: 0x074b, 0x934: 0x078b, 0x935: 0x07b7, - 0x936: 0x0847, 0x937: 0x0863, 0x938: 0x094b, 0x939: 0x0937, 0x93a: 0x0947, 0x93b: 0x0963, - 0x93c: 0x09af, 0x93d: 0x09bf, 0x93e: 0x0a03, 0x93f: 0x0a0f, - // Block 0x25, offset 0x940 - 0x940: 0x0a2b, 0x941: 0x0a3b, 0x942: 0x0b23, 0x943: 0x0b2b, 0x944: 0x0b5b, 0x945: 0x0b7b, - 0x946: 0x0bab, 0x947: 0x0bc3, 0x948: 0x0bb3, 0x949: 0x0bd3, 0x94a: 0x0bc7, 0x94b: 0x0beb, - 0x94c: 0x0c07, 0x94d: 0x0c5f, 0x94e: 0x0c6b, 0x94f: 0x0c73, 0x950: 0x0c9b, 0x951: 0x0cdf, - 0x952: 0x0d0f, 0x953: 0x0d13, 0x954: 0x0d27, 0x955: 0x0da7, 0x956: 0x0db7, 0x957: 0x0e0f, - 0x958: 0x0e5b, 0x959: 0x0e53, 0x95a: 0x0e67, 0x95b: 0x0e83, 0x95c: 0x0ebb, 0x95d: 0x1013, - 0x95e: 0x0edf, 0x95f: 0x0f13, 0x960: 0x0f1f, 0x961: 0x0f5f, 0x962: 0x0f7b, 0x963: 0x0f9f, - 0x964: 0x0fc3, 0x965: 0x0fc7, 0x966: 0x0fe3, 0x967: 0x0fe7, 0x968: 0x0ff7, 0x969: 0x100b, - 0x96a: 0x1007, 0x96b: 0x1037, 0x96c: 0x10b3, 0x96d: 0x10cb, 0x96e: 0x10e3, 0x96f: 0x111b, - 0x970: 0x112f, 0x971: 0x114b, 0x972: 0x117b, 0x973: 0x122f, 0x974: 0x1257, 0x975: 0x12cb, - 0x976: 0x1313, 0x977: 0x131f, 0x978: 0x1327, 0x979: 0x133f, 0x97a: 0x1353, 0x97b: 0x1343, - 0x97c: 0x135b, 0x97d: 0x1357, 0x97e: 0x134f, 0x97f: 0x135f, - // Block 0x26, offset 0x980 - 0x980: 0x136b, 0x981: 0x13a7, 0x982: 0x13e3, 0x983: 0x1413, 0x984: 0x144b, 0x985: 0x146b, - 0x986: 0x14b7, 0x987: 0x14db, 0x988: 0x14fb, 0x989: 0x150f, 0x98a: 0x151f, 0x98b: 0x152b, - 0x98c: 0x1537, 0x98d: 0x158b, 0x98e: 0x162b, 0x98f: 0x16b5, 0x990: 0x16b0, 0x991: 0x16e2, - 0x992: 0x0607, 0x993: 0x062f, 0x994: 0x0633, 0x995: 0x1764, 0x996: 0x1791, 0x997: 0x1809, - 0x998: 0x1617, 0x999: 0x1627, - // Block 0x27, offset 0x9c0 - 0x9c0: 0x06fb, 0x9c1: 0x06f3, 0x9c2: 0x0703, 0x9c3: 0x1647, 0x9c4: 0x0747, 0x9c5: 0x0757, - 0x9c6: 0x075b, 0x9c7: 0x0763, 0x9c8: 0x076b, 0x9c9: 0x076f, 0x9ca: 0x077b, 0x9cb: 0x0773, - 0x9cc: 0x05b3, 0x9cd: 0x165b, 0x9ce: 0x078f, 0x9cf: 0x0793, 0x9d0: 0x0797, 0x9d1: 0x07b3, - 0x9d2: 0x164c, 0x9d3: 0x05b7, 0x9d4: 0x079f, 0x9d5: 0x07bf, 0x9d6: 0x1656, 0x9d7: 0x07cf, - 0x9d8: 0x07d7, 0x9d9: 0x0737, 0x9da: 0x07df, 0x9db: 0x07e3, 0x9dc: 0x1831, 0x9dd: 0x07ff, - 0x9de: 0x0807, 0x9df: 0x05bf, 0x9e0: 0x081f, 0x9e1: 0x0823, 0x9e2: 0x082b, 0x9e3: 0x082f, - 0x9e4: 0x05c3, 0x9e5: 0x0847, 0x9e6: 0x084b, 0x9e7: 0x0857, 0x9e8: 0x0863, 0x9e9: 0x0867, - 0x9ea: 0x086b, 0x9eb: 0x0873, 0x9ec: 0x0893, 0x9ed: 0x0897, 0x9ee: 0x089f, 0x9ef: 0x08af, - 0x9f0: 0x08b7, 0x9f1: 0x08bb, 0x9f2: 0x08bb, 0x9f3: 0x08bb, 0x9f4: 0x166a, 0x9f5: 0x0e93, - 0x9f6: 0x08cf, 0x9f7: 0x08d7, 0x9f8: 0x166f, 0x9f9: 0x08e3, 0x9fa: 0x08eb, 0x9fb: 0x08f3, - 0x9fc: 0x091b, 0x9fd: 0x0907, 0x9fe: 0x0913, 0x9ff: 0x0917, - // Block 0x28, offset 0xa00 - 0xa00: 0x091f, 0xa01: 0x0927, 0xa02: 0x092b, 0xa03: 0x0933, 0xa04: 0x093b, 0xa05: 0x093f, - 0xa06: 0x093f, 0xa07: 0x0947, 0xa08: 0x094f, 0xa09: 0x0953, 0xa0a: 0x095f, 0xa0b: 0x0983, - 0xa0c: 0x0967, 0xa0d: 0x0987, 0xa0e: 0x096b, 0xa0f: 0x0973, 0xa10: 0x080b, 0xa11: 0x09cf, - 0xa12: 0x0997, 0xa13: 0x099b, 0xa14: 0x099f, 0xa15: 0x0993, 0xa16: 0x09a7, 0xa17: 0x09a3, - 0xa18: 0x09bb, 0xa19: 0x1674, 0xa1a: 0x09d7, 0xa1b: 0x09db, 0xa1c: 0x09e3, 0xa1d: 0x09ef, - 0xa1e: 0x09f7, 0xa1f: 0x0a13, 0xa20: 0x1679, 0xa21: 0x167e, 0xa22: 0x0a1f, 0xa23: 0x0a23, - 0xa24: 0x0a27, 0xa25: 0x0a1b, 0xa26: 0x0a2f, 0xa27: 0x05c7, 0xa28: 0x05cb, 0xa29: 0x0a37, - 0xa2a: 0x0a3f, 0xa2b: 0x0a3f, 0xa2c: 0x1683, 0xa2d: 0x0a5b, 0xa2e: 0x0a5f, 0xa2f: 0x0a63, - 0xa30: 0x0a6b, 0xa31: 0x1688, 0xa32: 0x0a73, 0xa33: 0x0a77, 0xa34: 0x0b4f, 0xa35: 0x0a7f, - 0xa36: 0x05cf, 0xa37: 0x0a8b, 0xa38: 0x0a9b, 0xa39: 0x0aa7, 0xa3a: 0x0aa3, 0xa3b: 0x1692, - 0xa3c: 0x0aaf, 0xa3d: 0x1697, 0xa3e: 0x0abb, 0xa3f: 0x0ab7, - // Block 0x29, offset 0xa40 - 0xa40: 0x0abf, 0xa41: 0x0acf, 0xa42: 0x0ad3, 0xa43: 0x05d3, 0xa44: 0x0ae3, 0xa45: 0x0aeb, - 0xa46: 0x0aef, 0xa47: 0x0af3, 0xa48: 0x05d7, 0xa49: 0x169c, 0xa4a: 0x05db, 0xa4b: 0x0b0f, - 0xa4c: 0x0b13, 0xa4d: 0x0b17, 0xa4e: 0x0b1f, 0xa4f: 0x1863, 0xa50: 0x0b37, 0xa51: 0x16a6, - 0xa52: 0x16a6, 0xa53: 0x11d7, 0xa54: 0x0b47, 0xa55: 0x0b47, 0xa56: 0x05df, 0xa57: 0x16c9, - 0xa58: 0x179b, 0xa59: 0x0b57, 0xa5a: 0x0b5f, 0xa5b: 0x05e3, 0xa5c: 0x0b73, 0xa5d: 0x0b83, - 0xa5e: 0x0b87, 0xa5f: 0x0b8f, 0xa60: 0x0b9f, 0xa61: 0x05eb, 0xa62: 0x05e7, 0xa63: 0x0ba3, - 0xa64: 0x16ab, 0xa65: 0x0ba7, 0xa66: 0x0bbb, 0xa67: 0x0bbf, 0xa68: 0x0bc3, 0xa69: 0x0bbf, - 0xa6a: 0x0bcf, 0xa6b: 0x0bd3, 0xa6c: 0x0be3, 0xa6d: 0x0bdb, 0xa6e: 0x0bdf, 0xa6f: 0x0be7, - 0xa70: 0x0beb, 0xa71: 0x0bef, 0xa72: 0x0bfb, 0xa73: 0x0bff, 0xa74: 0x0c17, 0xa75: 0x0c1f, - 0xa76: 0x0c2f, 0xa77: 0x0c43, 0xa78: 0x16ba, 0xa79: 0x0c3f, 0xa7a: 0x0c33, 0xa7b: 0x0c4b, - 0xa7c: 0x0c53, 0xa7d: 0x0c67, 0xa7e: 0x16bf, 0xa7f: 0x0c6f, - // Block 0x2a, offset 0xa80 - 0xa80: 0x0c63, 0xa81: 0x0c5b, 0xa82: 0x05ef, 0xa83: 0x0c77, 0xa84: 0x0c7f, 0xa85: 0x0c87, - 0xa86: 0x0c7b, 0xa87: 0x05f3, 0xa88: 0x0c97, 0xa89: 0x0c9f, 0xa8a: 0x16c4, 0xa8b: 0x0ccb, - 0xa8c: 0x0cff, 0xa8d: 0x0cdb, 0xa8e: 0x05ff, 0xa8f: 0x0ce7, 0xa90: 0x05fb, 0xa91: 0x05f7, - 0xa92: 0x07c3, 0xa93: 0x07c7, 0xa94: 0x0d03, 0xa95: 0x0ceb, 0xa96: 0x11ab, 0xa97: 0x0663, - 0xa98: 0x0d0f, 0xa99: 0x0d13, 0xa9a: 0x0d17, 0xa9b: 0x0d2b, 0xa9c: 0x0d23, 0xa9d: 0x16dd, - 0xa9e: 0x0603, 0xa9f: 0x0d3f, 0xaa0: 0x0d33, 0xaa1: 0x0d4f, 0xaa2: 0x0d57, 0xaa3: 0x16e7, - 0xaa4: 0x0d5b, 0xaa5: 0x0d47, 0xaa6: 0x0d63, 0xaa7: 0x0607, 0xaa8: 0x0d67, 0xaa9: 0x0d6b, - 0xaaa: 0x0d6f, 0xaab: 0x0d7b, 0xaac: 0x16ec, 0xaad: 0x0d83, 0xaae: 0x060b, 0xaaf: 0x0d8f, - 0xab0: 0x16f1, 0xab1: 0x0d93, 0xab2: 0x060f, 0xab3: 0x0d9f, 0xab4: 0x0dab, 0xab5: 0x0db7, - 0xab6: 0x0dbb, 0xab7: 0x16f6, 0xab8: 0x168d, 0xab9: 0x16fb, 0xaba: 0x0ddb, 0xabb: 0x1700, - 0xabc: 0x0de7, 0xabd: 0x0def, 0xabe: 0x0ddf, 0xabf: 0x0dfb, - // Block 0x2b, offset 0xac0 - 0xac0: 0x0e0b, 0xac1: 0x0e1b, 0xac2: 0x0e0f, 0xac3: 0x0e13, 0xac4: 0x0e1f, 0xac5: 0x0e23, - 0xac6: 0x1705, 0xac7: 0x0e07, 0xac8: 0x0e3b, 0xac9: 0x0e3f, 0xaca: 0x0613, 0xacb: 0x0e53, - 0xacc: 0x0e4f, 0xacd: 0x170a, 0xace: 0x0e33, 0xacf: 0x0e6f, 0xad0: 0x170f, 0xad1: 0x1714, - 0xad2: 0x0e73, 0xad3: 0x0e87, 0xad4: 0x0e83, 0xad5: 0x0e7f, 0xad6: 0x0617, 0xad7: 0x0e8b, - 0xad8: 0x0e9b, 0xad9: 0x0e97, 0xada: 0x0ea3, 0xadb: 0x1651, 0xadc: 0x0eb3, 0xadd: 0x1719, - 0xade: 0x0ebf, 0xadf: 0x1723, 0xae0: 0x0ed3, 0xae1: 0x0edf, 0xae2: 0x0ef3, 0xae3: 0x1728, - 0xae4: 0x0f07, 0xae5: 0x0f0b, 0xae6: 0x172d, 0xae7: 0x1732, 0xae8: 0x0f27, 0xae9: 0x0f37, - 0xaea: 0x061b, 0xaeb: 0x0f3b, 0xaec: 0x061f, 0xaed: 0x061f, 0xaee: 0x0f53, 0xaef: 0x0f57, - 0xaf0: 0x0f5f, 0xaf1: 0x0f63, 0xaf2: 0x0f6f, 0xaf3: 0x0623, 0xaf4: 0x0f87, 0xaf5: 0x1737, - 0xaf6: 0x0fa3, 0xaf7: 0x173c, 0xaf8: 0x0faf, 0xaf9: 0x16a1, 0xafa: 0x0fbf, 0xafb: 0x1741, - 0xafc: 0x1746, 0xafd: 0x174b, 0xafe: 0x0627, 0xaff: 0x062b, - // Block 0x2c, offset 0xb00 - 0xb00: 0x0ff7, 0xb01: 0x1755, 0xb02: 0x1750, 0xb03: 0x175a, 0xb04: 0x175f, 0xb05: 0x0fff, - 0xb06: 0x1003, 0xb07: 0x1003, 0xb08: 0x100b, 0xb09: 0x0633, 0xb0a: 0x100f, 0xb0b: 0x0637, - 0xb0c: 0x063b, 0xb0d: 0x1769, 0xb0e: 0x1023, 0xb0f: 0x102b, 0xb10: 0x1037, 0xb11: 0x063f, - 0xb12: 0x176e, 0xb13: 0x105b, 0xb14: 0x1773, 0xb15: 0x1778, 0xb16: 0x107b, 0xb17: 0x1093, - 0xb18: 0x0643, 0xb19: 0x109b, 0xb1a: 0x109f, 0xb1b: 0x10a3, 0xb1c: 0x177d, 0xb1d: 0x1782, - 0xb1e: 0x1782, 0xb1f: 0x10bb, 0xb20: 0x0647, 0xb21: 0x1787, 0xb22: 0x10cf, 0xb23: 0x10d3, - 0xb24: 0x064b, 0xb25: 0x178c, 0xb26: 0x10ef, 0xb27: 0x064f, 0xb28: 0x10ff, 0xb29: 0x10f7, - 0xb2a: 0x1107, 0xb2b: 0x1796, 0xb2c: 0x111f, 0xb2d: 0x0653, 0xb2e: 0x112b, 0xb2f: 0x1133, - 0xb30: 0x1143, 0xb31: 0x0657, 0xb32: 0x17a0, 0xb33: 0x17a5, 0xb34: 0x065b, 0xb35: 0x17aa, - 0xb36: 0x115b, 0xb37: 0x17af, 0xb38: 0x1167, 0xb39: 0x1173, 0xb3a: 0x117b, 0xb3b: 0x17b4, - 0xb3c: 0x17b9, 0xb3d: 0x118f, 0xb3e: 0x17be, 0xb3f: 0x1197, - // Block 0x2d, offset 0xb40 - 0xb40: 0x16ce, 0xb41: 0x065f, 0xb42: 0x11af, 0xb43: 0x11b3, 0xb44: 0x0667, 0xb45: 0x11b7, - 0xb46: 0x0a33, 0xb47: 0x17c3, 0xb48: 0x17c8, 0xb49: 0x16d3, 0xb4a: 0x16d8, 0xb4b: 0x11d7, - 0xb4c: 0x11db, 0xb4d: 0x13f3, 0xb4e: 0x066b, 0xb4f: 0x1207, 0xb50: 0x1203, 0xb51: 0x120b, - 0xb52: 0x083f, 0xb53: 0x120f, 0xb54: 0x1213, 0xb55: 0x1217, 0xb56: 0x121f, 0xb57: 0x17cd, - 0xb58: 0x121b, 0xb59: 0x1223, 0xb5a: 0x1237, 0xb5b: 0x123b, 0xb5c: 0x1227, 0xb5d: 0x123f, - 0xb5e: 0x1253, 0xb5f: 0x1267, 0xb60: 0x1233, 0xb61: 0x1247, 0xb62: 0x124b, 0xb63: 0x124f, - 0xb64: 0x17d2, 0xb65: 0x17dc, 0xb66: 0x17d7, 0xb67: 0x066f, 0xb68: 0x126f, 0xb69: 0x1273, - 0xb6a: 0x127b, 0xb6b: 0x17f0, 0xb6c: 0x127f, 0xb6d: 0x17e1, 0xb6e: 0x0673, 0xb6f: 0x0677, - 0xb70: 0x17e6, 0xb71: 0x17eb, 0xb72: 0x067b, 0xb73: 0x129f, 0xb74: 0x12a3, 0xb75: 0x12a7, - 0xb76: 0x12ab, 0xb77: 0x12b7, 0xb78: 0x12b3, 0xb79: 0x12bf, 0xb7a: 0x12bb, 0xb7b: 0x12cb, - 0xb7c: 0x12c3, 0xb7d: 0x12c7, 0xb7e: 0x12cf, 0xb7f: 0x067f, - // Block 0x2e, offset 0xb80 - 0xb80: 0x12d7, 0xb81: 0x12db, 0xb82: 0x0683, 0xb83: 0x12eb, 0xb84: 0x12ef, 0xb85: 0x17f5, - 0xb86: 0x12fb, 0xb87: 0x12ff, 0xb88: 0x0687, 0xb89: 0x130b, 0xb8a: 0x05bb, 0xb8b: 0x17fa, - 0xb8c: 0x17ff, 0xb8d: 0x068b, 0xb8e: 0x068f, 0xb8f: 0x1337, 0xb90: 0x134f, 0xb91: 0x136b, - 0xb92: 0x137b, 0xb93: 0x1804, 0xb94: 0x138f, 0xb95: 0x1393, 0xb96: 0x13ab, 0xb97: 0x13b7, - 0xb98: 0x180e, 0xb99: 0x1660, 0xb9a: 0x13c3, 0xb9b: 0x13bf, 0xb9c: 0x13cb, 0xb9d: 0x1665, - 0xb9e: 0x13d7, 0xb9f: 0x13e3, 0xba0: 0x1813, 0xba1: 0x1818, 0xba2: 0x1423, 0xba3: 0x142f, - 0xba4: 0x1437, 0xba5: 0x181d, 0xba6: 0x143b, 0xba7: 0x1467, 0xba8: 0x1473, 0xba9: 0x1477, - 0xbaa: 0x146f, 0xbab: 0x1483, 0xbac: 0x1487, 0xbad: 0x1822, 0xbae: 0x1493, 0xbaf: 0x0693, - 0xbb0: 0x149b, 0xbb1: 0x1827, 0xbb2: 0x0697, 0xbb3: 0x14d3, 0xbb4: 0x0ac3, 0xbb5: 0x14eb, - 0xbb6: 0x182c, 0xbb7: 0x1836, 0xbb8: 0x069b, 0xbb9: 0x069f, 0xbba: 0x1513, 0xbbb: 0x183b, - 0xbbc: 0x06a3, 0xbbd: 0x1840, 0xbbe: 0x152b, 0xbbf: 0x152b, - // Block 0x2f, offset 0xbc0 - 0xbc0: 0x1533, 0xbc1: 0x1845, 0xbc2: 0x154b, 0xbc3: 0x06a7, 0xbc4: 0x155b, 0xbc5: 0x1567, - 0xbc6: 0x156f, 0xbc7: 0x1577, 0xbc8: 0x06ab, 0xbc9: 0x184a, 0xbca: 0x158b, 0xbcb: 0x15a7, - 0xbcc: 0x15b3, 0xbcd: 0x06af, 0xbce: 0x06b3, 0xbcf: 0x15b7, 0xbd0: 0x184f, 0xbd1: 0x06b7, - 0xbd2: 0x1854, 0xbd3: 0x1859, 0xbd4: 0x185e, 0xbd5: 0x15db, 0xbd6: 0x06bb, 0xbd7: 0x15ef, - 0xbd8: 0x15f7, 0xbd9: 0x15fb, 0xbda: 0x1603, 0xbdb: 0x160b, 0xbdc: 0x1613, 0xbdd: 0x1868, -} - -// nfcIndex: 22 blocks, 1408 entries, 1408 bytes -// Block 0 is the zero block. -var nfcIndex = [1408]uint8{ - // Block 0x0, offset 0x0 - // Block 0x1, offset 0x40 - // Block 0x2, offset 0x80 - // Block 0x3, offset 0xc0 - 0xc2: 0x2e, 0xc3: 0x01, 0xc4: 0x02, 0xc5: 0x03, 0xc6: 0x2f, 0xc7: 0x04, - 0xc8: 0x05, 0xca: 0x30, 0xcb: 0x31, 0xcc: 0x06, 0xcd: 0x07, 0xce: 0x08, 0xcf: 0x32, - 0xd0: 0x09, 0xd1: 0x33, 0xd2: 0x34, 0xd3: 0x0a, 0xd6: 0x0b, 0xd7: 0x35, - 0xd8: 0x36, 0xd9: 0x0c, 0xdb: 0x37, 0xdc: 0x38, 0xdd: 0x39, 0xdf: 0x3a, - 0xe0: 0x02, 0xe1: 0x03, 0xe2: 0x04, 0xe3: 0x05, - 0xea: 0x06, 0xeb: 0x07, 0xec: 0x08, 0xed: 0x09, 0xef: 0x0a, - 0xf0: 0x13, - // Block 0x4, offset 0x100 - 0x120: 0x3b, 0x121: 0x3c, 0x123: 0x0d, 0x124: 0x3d, 0x125: 0x3e, 0x126: 0x3f, 0x127: 0x40, - 0x128: 0x41, 0x129: 0x42, 0x12a: 0x43, 0x12b: 0x44, 0x12c: 0x3f, 0x12d: 0x45, 0x12e: 0x46, 0x12f: 0x47, - 0x131: 0x48, 0x132: 0x49, 0x133: 0x4a, 0x134: 0x4b, 0x135: 0x4c, 0x137: 0x4d, - 0x138: 0x4e, 0x139: 0x4f, 0x13a: 0x50, 0x13b: 0x51, 0x13c: 0x52, 0x13d: 0x53, 0x13e: 0x54, 0x13f: 0x55, - // Block 0x5, offset 0x140 - 0x140: 0x56, 0x142: 0x57, 0x144: 0x58, 0x145: 0x59, 0x146: 0x5a, 0x147: 0x5b, - 0x14d: 0x5c, - 0x15c: 0x5d, 0x15f: 0x5e, - 0x162: 0x5f, 0x164: 0x60, - 0x168: 0x61, 0x169: 0x62, 0x16a: 0x63, 0x16c: 0x0e, 0x16d: 0x64, 0x16e: 0x65, 0x16f: 0x66, - 0x170: 0x67, 0x173: 0x68, 0x177: 0x0f, - 0x178: 0x10, 0x179: 0x11, 0x17a: 0x12, 0x17b: 0x13, 0x17c: 0x14, 0x17d: 0x15, 0x17e: 0x16, 0x17f: 0x17, - // Block 0x6, offset 0x180 - 0x180: 0x69, 0x183: 0x6a, 0x184: 0x6b, 0x186: 0x6c, 0x187: 0x6d, - 0x188: 0x6e, 0x189: 0x18, 0x18a: 0x19, 0x18b: 0x6f, 0x18c: 0x70, - 0x1ab: 0x71, - 0x1b3: 0x72, 0x1b5: 0x73, 0x1b7: 0x74, - // Block 0x7, offset 0x1c0 - 0x1c0: 0x75, 0x1c1: 0x1a, 0x1c2: 0x1b, 0x1c3: 0x1c, 0x1c4: 0x76, 0x1c5: 0x77, - 0x1c9: 0x78, 0x1cc: 0x79, 0x1cd: 0x7a, - // Block 0x8, offset 0x200 - 0x219: 0x7b, 0x21a: 0x7c, 0x21b: 0x7d, - 0x220: 0x7e, 0x223: 0x7f, 0x224: 0x80, 0x225: 0x81, 0x226: 0x82, 0x227: 0x83, - 0x22a: 0x84, 0x22b: 0x85, 0x22f: 0x86, - 0x230: 0x87, 0x231: 0x88, 0x232: 0x89, 0x233: 0x8a, 0x234: 0x8b, 0x235: 0x8c, 0x236: 0x8d, 0x237: 0x87, - 0x238: 0x88, 0x239: 0x89, 0x23a: 0x8a, 0x23b: 0x8b, 0x23c: 0x8c, 0x23d: 0x8d, 0x23e: 0x87, 0x23f: 0x88, - // Block 0x9, offset 0x240 - 0x240: 0x89, 0x241: 0x8a, 0x242: 0x8b, 0x243: 0x8c, 0x244: 0x8d, 0x245: 0x87, 0x246: 0x88, 0x247: 0x89, - 0x248: 0x8a, 0x249: 0x8b, 0x24a: 0x8c, 0x24b: 0x8d, 0x24c: 0x87, 0x24d: 0x88, 0x24e: 0x89, 0x24f: 0x8a, - 0x250: 0x8b, 0x251: 0x8c, 0x252: 0x8d, 0x253: 0x87, 0x254: 0x88, 0x255: 0x89, 0x256: 0x8a, 0x257: 0x8b, - 0x258: 0x8c, 0x259: 0x8d, 0x25a: 0x87, 0x25b: 0x88, 0x25c: 0x89, 0x25d: 0x8a, 0x25e: 0x8b, 0x25f: 0x8c, - 0x260: 0x8d, 0x261: 0x87, 0x262: 0x88, 0x263: 0x89, 0x264: 0x8a, 0x265: 0x8b, 0x266: 0x8c, 0x267: 0x8d, - 0x268: 0x87, 0x269: 0x88, 0x26a: 0x89, 0x26b: 0x8a, 0x26c: 0x8b, 0x26d: 0x8c, 0x26e: 0x8d, 0x26f: 0x87, - 0x270: 0x88, 0x271: 0x89, 0x272: 0x8a, 0x273: 0x8b, 0x274: 0x8c, 0x275: 0x8d, 0x276: 0x87, 0x277: 0x88, - 0x278: 0x89, 0x279: 0x8a, 0x27a: 0x8b, 0x27b: 0x8c, 0x27c: 0x8d, 0x27d: 0x87, 0x27e: 0x88, 0x27f: 0x89, - // Block 0xa, offset 0x280 - 0x280: 0x8a, 0x281: 0x8b, 0x282: 0x8c, 0x283: 0x8d, 0x284: 0x87, 0x285: 0x88, 0x286: 0x89, 0x287: 0x8a, - 0x288: 0x8b, 0x289: 0x8c, 0x28a: 0x8d, 0x28b: 0x87, 0x28c: 0x88, 0x28d: 0x89, 0x28e: 0x8a, 0x28f: 0x8b, - 0x290: 0x8c, 0x291: 0x8d, 0x292: 0x87, 0x293: 0x88, 0x294: 0x89, 0x295: 0x8a, 0x296: 0x8b, 0x297: 0x8c, - 0x298: 0x8d, 0x299: 0x87, 0x29a: 0x88, 0x29b: 0x89, 0x29c: 0x8a, 0x29d: 0x8b, 0x29e: 0x8c, 0x29f: 0x8d, - 0x2a0: 0x87, 0x2a1: 0x88, 0x2a2: 0x89, 0x2a3: 0x8a, 0x2a4: 0x8b, 0x2a5: 0x8c, 0x2a6: 0x8d, 0x2a7: 0x87, - 0x2a8: 0x88, 0x2a9: 0x89, 0x2aa: 0x8a, 0x2ab: 0x8b, 0x2ac: 0x8c, 0x2ad: 0x8d, 0x2ae: 0x87, 0x2af: 0x88, - 0x2b0: 0x89, 0x2b1: 0x8a, 0x2b2: 0x8b, 0x2b3: 0x8c, 0x2b4: 0x8d, 0x2b5: 0x87, 0x2b6: 0x88, 0x2b7: 0x89, - 0x2b8: 0x8a, 0x2b9: 0x8b, 0x2ba: 0x8c, 0x2bb: 0x8d, 0x2bc: 0x87, 0x2bd: 0x88, 0x2be: 0x89, 0x2bf: 0x8a, - // Block 0xb, offset 0x2c0 - 0x2c0: 0x8b, 0x2c1: 0x8c, 0x2c2: 0x8d, 0x2c3: 0x87, 0x2c4: 0x88, 0x2c5: 0x89, 0x2c6: 0x8a, 0x2c7: 0x8b, - 0x2c8: 0x8c, 0x2c9: 0x8d, 0x2ca: 0x87, 0x2cb: 0x88, 0x2cc: 0x89, 0x2cd: 0x8a, 0x2ce: 0x8b, 0x2cf: 0x8c, - 0x2d0: 0x8d, 0x2d1: 0x87, 0x2d2: 0x88, 0x2d3: 0x89, 0x2d4: 0x8a, 0x2d5: 0x8b, 0x2d6: 0x8c, 0x2d7: 0x8d, - 0x2d8: 0x87, 0x2d9: 0x88, 0x2da: 0x89, 0x2db: 0x8a, 0x2dc: 0x8b, 0x2dd: 0x8c, 0x2de: 0x8e, - // Block 0xc, offset 0x300 - 0x324: 0x1d, 0x325: 0x1e, 0x326: 0x1f, 0x327: 0x20, - 0x328: 0x21, 0x329: 0x22, 0x32a: 0x23, 0x32b: 0x24, 0x32c: 0x8f, 0x32d: 0x90, 0x32e: 0x91, - 0x331: 0x92, 0x332: 0x93, 0x333: 0x94, 0x334: 0x95, - 0x338: 0x96, 0x339: 0x97, 0x33a: 0x98, 0x33b: 0x99, 0x33e: 0x9a, 0x33f: 0x9b, - // Block 0xd, offset 0x340 - 0x347: 0x9c, - 0x34b: 0x9d, 0x34d: 0x9e, - 0x368: 0x9f, 0x36b: 0xa0, - 0x374: 0xa1, - 0x37d: 0xa2, - // Block 0xe, offset 0x380 - 0x381: 0xa3, 0x382: 0xa4, 0x384: 0xa5, 0x385: 0x82, 0x387: 0xa6, - 0x388: 0xa7, 0x38b: 0xa8, 0x38c: 0xa9, 0x38d: 0xaa, - 0x391: 0xab, 0x392: 0xac, 0x393: 0xad, 0x396: 0xae, 0x397: 0xaf, - 0x398: 0x73, 0x39a: 0xb0, 0x39c: 0xb1, - 0x3a0: 0xb2, - 0x3a8: 0xb3, 0x3a9: 0xb4, 0x3aa: 0xb5, - 0x3b0: 0x73, 0x3b5: 0xb6, 0x3b6: 0xb7, - // Block 0xf, offset 0x3c0 - 0x3eb: 0xb8, 0x3ec: 0xb9, - // Block 0x10, offset 0x400 - 0x432: 0xba, - // Block 0x11, offset 0x440 - 0x445: 0xbb, 0x446: 0xbc, 0x447: 0xbd, - 0x449: 0xbe, - // Block 0x12, offset 0x480 - 0x480: 0xbf, - 0x4a3: 0xc0, 0x4a5: 0xc1, - // Block 0x13, offset 0x4c0 - 0x4c8: 0xc2, - // Block 0x14, offset 0x500 - 0x520: 0x25, 0x521: 0x26, 0x522: 0x27, 0x523: 0x28, 0x524: 0x29, 0x525: 0x2a, 0x526: 0x2b, 0x527: 0x2c, - 0x528: 0x2d, - // Block 0x15, offset 0x540 - 0x550: 0x0b, 0x551: 0x0c, 0x556: 0x0d, - 0x55b: 0x0e, 0x55d: 0x0f, 0x55e: 0x10, 0x55f: 0x11, - 0x56f: 0x12, -} - -// nfcSparseOffset: 149 entries, 298 bytes -var nfcSparseOffset = []uint16{0x0, 0x5, 0x9, 0xb, 0xd, 0x18, 0x28, 0x2a, 0x2f, 0x3a, 0x49, 0x56, 0x5e, 0x63, 0x68, 0x6a, 0x72, 0x79, 0x7c, 0x84, 0x88, 0x8c, 0x8e, 0x90, 0x99, 0x9d, 0xa4, 0xa9, 0xac, 0xb6, 0xb9, 0xc0, 0xc8, 0xcb, 0xcd, 0xcf, 0xd1, 0xd6, 0xe7, 0xf3, 0xf5, 0xfb, 0xfd, 0xff, 0x101, 0x103, 0x105, 0x107, 0x10a, 0x10d, 0x10f, 0x112, 0x115, 0x119, 0x11e, 0x127, 0x129, 0x12c, 0x12e, 0x139, 0x13d, 0x14b, 0x14e, 0x154, 0x15a, 0x165, 0x169, 0x16b, 0x16d, 0x16f, 0x171, 0x173, 0x179, 0x17d, 0x17f, 0x181, 0x189, 0x18d, 0x190, 0x192, 0x194, 0x196, 0x199, 0x19b, 0x19d, 0x19f, 0x1a1, 0x1a7, 0x1aa, 0x1ac, 0x1b3, 0x1b9, 0x1bf, 0x1c7, 0x1cd, 0x1d3, 0x1d9, 0x1dd, 0x1eb, 0x1f4, 0x1f7, 0x1fa, 0x1fc, 0x1ff, 0x201, 0x205, 0x20a, 0x20c, 0x20e, 0x213, 0x219, 0x21b, 0x21d, 0x21f, 0x225, 0x228, 0x22a, 0x230, 0x233, 0x23b, 0x242, 0x245, 0x248, 0x24a, 0x24d, 0x255, 0x259, 0x260, 0x263, 0x269, 0x26b, 0x26e, 0x270, 0x273, 0x275, 0x277, 0x279, 0x27c, 0x27e, 0x280, 0x282, 0x284, 0x291, 0x29b, 0x29d, 0x29f, 0x2a5, 0x2a7, 0x2aa} - -// nfcSparseValues: 684 entries, 2736 bytes -var nfcSparseValues = [684]valueRange{ - // Block 0x0, offset 0x0 - {value: 0x0000, lo: 0x04}, - {value: 0xa100, lo: 0xa8, hi: 0xa8}, - {value: 0x8100, lo: 0xaf, hi: 0xaf}, - {value: 0x8100, lo: 0xb4, hi: 0xb4}, - {value: 0x8100, lo: 0xb8, hi: 0xb8}, - // Block 0x1, offset 0x5 - {value: 0x0091, lo: 0x03}, - {value: 0x46e2, lo: 0xa0, hi: 0xa1}, - {value: 0x4714, lo: 0xaf, hi: 0xb0}, - {value: 0xa000, lo: 0xb7, hi: 0xb7}, - // Block 0x2, offset 0x9 - {value: 0x0000, lo: 0x01}, - {value: 0xa000, lo: 0x92, hi: 0x92}, - // Block 0x3, offset 0xb - {value: 0x0000, lo: 0x01}, - {value: 0x8100, lo: 0x98, hi: 0x9d}, - // Block 0x4, offset 0xd - {value: 0x0006, lo: 0x0a}, - {value: 0xa000, lo: 0x81, hi: 0x81}, - {value: 0xa000, lo: 0x85, hi: 0x85}, - {value: 0xa000, lo: 0x89, hi: 0x89}, - {value: 0x4840, lo: 0x8a, hi: 0x8a}, - {value: 0x485e, lo: 0x8b, hi: 0x8b}, - {value: 0x36c7, lo: 0x8c, hi: 0x8c}, - {value: 0x36df, lo: 0x8d, hi: 0x8d}, - {value: 0x4876, lo: 0x8e, hi: 0x8e}, - {value: 0xa000, lo: 0x92, hi: 0x92}, - {value: 0x36fd, lo: 0x93, hi: 0x94}, - // Block 0x5, offset 0x18 - {value: 0x0000, lo: 0x0f}, - {value: 0xa000, lo: 0x83, hi: 0x83}, - {value: 0xa000, lo: 0x87, hi: 0x87}, - {value: 0xa000, lo: 0x8b, hi: 0x8b}, - {value: 0xa000, lo: 0x8d, hi: 0x8d}, - {value: 0x37a5, lo: 0x90, hi: 0x90}, - {value: 0x37b1, lo: 0x91, hi: 0x91}, - {value: 0x379f, lo: 0x93, hi: 0x93}, - {value: 0xa000, lo: 0x96, hi: 0x96}, - {value: 0x3817, lo: 0x97, hi: 0x97}, - {value: 0x37e1, lo: 0x9c, hi: 0x9c}, - {value: 0x37c9, lo: 0x9d, hi: 0x9d}, - {value: 0x37f3, lo: 0x9e, hi: 0x9e}, - {value: 0xa000, lo: 0xb4, hi: 0xb5}, - {value: 0x381d, lo: 0xb6, hi: 0xb6}, - {value: 0x3823, lo: 0xb7, hi: 0xb7}, - // Block 0x6, offset 0x28 - {value: 0x0000, lo: 0x01}, - {value: 0x8132, lo: 0x83, hi: 0x87}, - // Block 0x7, offset 0x2a - {value: 0x0001, lo: 0x04}, - {value: 0x8113, lo: 0x81, hi: 0x82}, - {value: 0x8132, lo: 0x84, hi: 0x84}, - {value: 0x812d, lo: 0x85, hi: 0x85}, - {value: 0x810d, lo: 0x87, hi: 0x87}, - // Block 0x8, offset 0x2f - {value: 0x0000, lo: 0x0a}, - {value: 0x8132, lo: 0x90, hi: 0x97}, - {value: 0x8119, lo: 0x98, hi: 0x98}, - {value: 0x811a, lo: 0x99, hi: 0x99}, - {value: 0x811b, lo: 0x9a, hi: 0x9a}, - {value: 0x3841, lo: 0xa2, hi: 0xa2}, - {value: 0x3847, lo: 0xa3, hi: 0xa3}, - {value: 0x3853, lo: 0xa4, hi: 0xa4}, - {value: 0x384d, lo: 0xa5, hi: 0xa5}, - {value: 0x3859, lo: 0xa6, hi: 0xa6}, - {value: 0xa000, lo: 0xa7, hi: 0xa7}, - // Block 0x9, offset 0x3a - {value: 0x0000, lo: 0x0e}, - {value: 0x386b, lo: 0x80, hi: 0x80}, - {value: 0xa000, lo: 0x81, hi: 0x81}, - {value: 0x385f, lo: 0x82, hi: 0x82}, - {value: 0xa000, lo: 0x92, hi: 0x92}, - {value: 0x3865, lo: 0x93, hi: 0x93}, - {value: 0xa000, lo: 0x95, hi: 0x95}, - {value: 0x8132, lo: 0x96, hi: 0x9c}, - {value: 0x8132, lo: 0x9f, hi: 0xa2}, - {value: 0x812d, lo: 0xa3, hi: 0xa3}, - {value: 0x8132, lo: 0xa4, hi: 0xa4}, - {value: 0x8132, lo: 0xa7, hi: 0xa8}, - {value: 0x812d, lo: 0xaa, hi: 0xaa}, - {value: 0x8132, lo: 0xab, hi: 0xac}, - {value: 0x812d, lo: 0xad, hi: 0xad}, - // Block 0xa, offset 0x49 - {value: 0x0000, lo: 0x0c}, - {value: 0x811f, lo: 0x91, hi: 0x91}, - {value: 0x8132, lo: 0xb0, hi: 0xb0}, - {value: 0x812d, lo: 0xb1, hi: 0xb1}, - {value: 0x8132, lo: 0xb2, hi: 0xb3}, - {value: 0x812d, lo: 0xb4, hi: 0xb4}, - {value: 0x8132, lo: 0xb5, hi: 0xb6}, - {value: 0x812d, lo: 0xb7, hi: 0xb9}, - {value: 0x8132, lo: 0xba, hi: 0xba}, - {value: 0x812d, lo: 0xbb, hi: 0xbc}, - {value: 0x8132, lo: 0xbd, hi: 0xbd}, - {value: 0x812d, lo: 0xbe, hi: 0xbe}, - {value: 0x8132, lo: 0xbf, hi: 0xbf}, - // Block 0xb, offset 0x56 - {value: 0x0005, lo: 0x07}, - {value: 0x8132, lo: 0x80, hi: 0x80}, - {value: 0x8132, lo: 0x81, hi: 0x81}, - {value: 0x812d, lo: 0x82, hi: 0x83}, - {value: 0x812d, lo: 0x84, hi: 0x85}, - {value: 0x812d, lo: 0x86, hi: 0x87}, - {value: 0x812d, lo: 0x88, hi: 0x89}, - {value: 0x8132, lo: 0x8a, hi: 0x8a}, - // Block 0xc, offset 0x5e - {value: 0x0000, lo: 0x04}, - {value: 0x8132, lo: 0xab, hi: 0xb1}, - {value: 0x812d, lo: 0xb2, hi: 0xb2}, - {value: 0x8132, lo: 0xb3, hi: 0xb3}, - {value: 0x812d, lo: 0xbd, hi: 0xbd}, - // Block 0xd, offset 0x63 - {value: 0x0000, lo: 0x04}, - {value: 0x8132, lo: 0x96, hi: 0x99}, - {value: 0x8132, lo: 0x9b, hi: 0xa3}, - {value: 0x8132, lo: 0xa5, hi: 0xa7}, - {value: 0x8132, lo: 0xa9, hi: 0xad}, - // Block 0xe, offset 0x68 - {value: 0x0000, lo: 0x01}, - {value: 0x812d, lo: 0x99, hi: 0x9b}, - // Block 0xf, offset 0x6a - {value: 0x0000, lo: 0x07}, - {value: 0xa000, lo: 0xa8, hi: 0xa8}, - {value: 0x3ed8, lo: 0xa9, hi: 0xa9}, - {value: 0xa000, lo: 0xb0, hi: 0xb0}, - {value: 0x3ee0, lo: 0xb1, hi: 0xb1}, - {value: 0xa000, lo: 0xb3, hi: 0xb3}, - {value: 0x3ee8, lo: 0xb4, hi: 0xb4}, - {value: 0x9902, lo: 0xbc, hi: 0xbc}, - // Block 0x10, offset 0x72 - {value: 0x0008, lo: 0x06}, - {value: 0x8104, lo: 0x8d, hi: 0x8d}, - {value: 0x8132, lo: 0x91, hi: 0x91}, - {value: 0x812d, lo: 0x92, hi: 0x92}, - {value: 0x8132, lo: 0x93, hi: 0x93}, - {value: 0x8132, lo: 0x94, hi: 0x94}, - {value: 0x451c, lo: 0x98, hi: 0x9f}, - // Block 0x11, offset 0x79 - {value: 0x0000, lo: 0x02}, - {value: 0x8102, lo: 0xbc, hi: 0xbc}, - {value: 0x9900, lo: 0xbe, hi: 0xbe}, - // Block 0x12, offset 0x7c - {value: 0x0008, lo: 0x07}, - {value: 0xa000, lo: 0x87, hi: 0x87}, - {value: 0x2c9e, lo: 0x8b, hi: 0x8c}, - {value: 0x8104, lo: 0x8d, hi: 0x8d}, - {value: 0x9900, lo: 0x97, hi: 0x97}, - {value: 0x455c, lo: 0x9c, hi: 0x9d}, - {value: 0x456c, lo: 0x9f, hi: 0x9f}, - {value: 0x8132, lo: 0xbe, hi: 0xbe}, - // Block 0x13, offset 0x84 - {value: 0x0000, lo: 0x03}, - {value: 0x4594, lo: 0xb3, hi: 0xb3}, - {value: 0x459c, lo: 0xb6, hi: 0xb6}, - {value: 0x8102, lo: 0xbc, hi: 0xbc}, - // Block 0x14, offset 0x88 - {value: 0x0008, lo: 0x03}, - {value: 0x8104, lo: 0x8d, hi: 0x8d}, - {value: 0x4574, lo: 0x99, hi: 0x9b}, - {value: 0x458c, lo: 0x9e, hi: 0x9e}, - // Block 0x15, offset 0x8c - {value: 0x0000, lo: 0x01}, - {value: 0x8102, lo: 0xbc, hi: 0xbc}, - // Block 0x16, offset 0x8e - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0x8d, hi: 0x8d}, - // Block 0x17, offset 0x90 - {value: 0x0000, lo: 0x08}, - {value: 0xa000, lo: 0x87, hi: 0x87}, - {value: 0x2cb6, lo: 0x88, hi: 0x88}, - {value: 0x2cae, lo: 0x8b, hi: 0x8b}, - {value: 0x2cbe, lo: 0x8c, hi: 0x8c}, - {value: 0x8104, lo: 0x8d, hi: 0x8d}, - {value: 0x9900, lo: 0x96, hi: 0x97}, - {value: 0x45a4, lo: 0x9c, hi: 0x9c}, - {value: 0x45ac, lo: 0x9d, hi: 0x9d}, - // Block 0x18, offset 0x99 - {value: 0x0000, lo: 0x03}, - {value: 0xa000, lo: 0x92, hi: 0x92}, - {value: 0x2cc6, lo: 0x94, hi: 0x94}, - {value: 0x9900, lo: 0xbe, hi: 0xbe}, - // Block 0x19, offset 0x9d - {value: 0x0000, lo: 0x06}, - {value: 0xa000, lo: 0x86, hi: 0x87}, - {value: 0x2cce, lo: 0x8a, hi: 0x8a}, - {value: 0x2cde, lo: 0x8b, hi: 0x8b}, - {value: 0x2cd6, lo: 0x8c, hi: 0x8c}, - {value: 0x8104, lo: 0x8d, hi: 0x8d}, - {value: 0x9900, lo: 0x97, hi: 0x97}, - // Block 0x1a, offset 0xa4 - {value: 0x1801, lo: 0x04}, - {value: 0xa000, lo: 0x86, hi: 0x86}, - {value: 0x3ef0, lo: 0x88, hi: 0x88}, - {value: 0x8104, lo: 0x8d, hi: 0x8d}, - {value: 0x8120, lo: 0x95, hi: 0x96}, - // Block 0x1b, offset 0xa9 - {value: 0x0000, lo: 0x02}, - {value: 0x8102, lo: 0xbc, hi: 0xbc}, - {value: 0xa000, lo: 0xbf, hi: 0xbf}, - // Block 0x1c, offset 0xac - {value: 0x0000, lo: 0x09}, - {value: 0x2ce6, lo: 0x80, hi: 0x80}, - {value: 0x9900, lo: 0x82, hi: 0x82}, - {value: 0xa000, lo: 0x86, hi: 0x86}, - {value: 0x2cee, lo: 0x87, hi: 0x87}, - {value: 0x2cf6, lo: 0x88, hi: 0x88}, - {value: 0x2f50, lo: 0x8a, hi: 0x8a}, - {value: 0x2dd8, lo: 0x8b, hi: 0x8b}, - {value: 0x8104, lo: 0x8d, hi: 0x8d}, - {value: 0x9900, lo: 0x95, hi: 0x96}, - // Block 0x1d, offset 0xb6 - {value: 0x0000, lo: 0x02}, - {value: 0x8104, lo: 0xbb, hi: 0xbc}, - {value: 0x9900, lo: 0xbe, hi: 0xbe}, - // Block 0x1e, offset 0xb9 - {value: 0x0000, lo: 0x06}, - {value: 0xa000, lo: 0x86, hi: 0x87}, - {value: 0x2cfe, lo: 0x8a, hi: 0x8a}, - {value: 0x2d0e, lo: 0x8b, hi: 0x8b}, - {value: 0x2d06, lo: 0x8c, hi: 0x8c}, - {value: 0x8104, lo: 0x8d, hi: 0x8d}, - {value: 0x9900, lo: 0x97, hi: 0x97}, - // Block 0x1f, offset 0xc0 - {value: 0x6bea, lo: 0x07}, - {value: 0x9904, lo: 0x8a, hi: 0x8a}, - {value: 0x9900, lo: 0x8f, hi: 0x8f}, - {value: 0xa000, lo: 0x99, hi: 0x99}, - {value: 0x3ef8, lo: 0x9a, hi: 0x9a}, - {value: 0x2f58, lo: 0x9c, hi: 0x9c}, - {value: 0x2de3, lo: 0x9d, hi: 0x9d}, - {value: 0x2d16, lo: 0x9e, hi: 0x9f}, - // Block 0x20, offset 0xc8 - {value: 0x0000, lo: 0x02}, - {value: 0x8122, lo: 0xb8, hi: 0xb9}, - {value: 0x8104, lo: 0xba, hi: 0xba}, - // Block 0x21, offset 0xcb - {value: 0x0000, lo: 0x01}, - {value: 0x8123, lo: 0x88, hi: 0x8b}, - // Block 0x22, offset 0xcd - {value: 0x0000, lo: 0x01}, - {value: 0x8124, lo: 0xb8, hi: 0xb9}, - // Block 0x23, offset 0xcf - {value: 0x0000, lo: 0x01}, - {value: 0x8125, lo: 0x88, hi: 0x8b}, - // Block 0x24, offset 0xd1 - {value: 0x0000, lo: 0x04}, - {value: 0x812d, lo: 0x98, hi: 0x99}, - {value: 0x812d, lo: 0xb5, hi: 0xb5}, - {value: 0x812d, lo: 0xb7, hi: 0xb7}, - {value: 0x812b, lo: 0xb9, hi: 0xb9}, - // Block 0x25, offset 0xd6 - {value: 0x0000, lo: 0x10}, - {value: 0x2644, lo: 0x83, hi: 0x83}, - {value: 0x264b, lo: 0x8d, hi: 0x8d}, - {value: 0x2652, lo: 0x92, hi: 0x92}, - {value: 0x2659, lo: 0x97, hi: 0x97}, - {value: 0x2660, lo: 0x9c, hi: 0x9c}, - {value: 0x263d, lo: 0xa9, hi: 0xa9}, - {value: 0x8126, lo: 0xb1, hi: 0xb1}, - {value: 0x8127, lo: 0xb2, hi: 0xb2}, - {value: 0x4a84, lo: 0xb3, hi: 0xb3}, - {value: 0x8128, lo: 0xb4, hi: 0xb4}, - {value: 0x4a8d, lo: 0xb5, hi: 0xb5}, - {value: 0x45b4, lo: 0xb6, hi: 0xb6}, - {value: 0x8200, lo: 0xb7, hi: 0xb7}, - {value: 0x45bc, lo: 0xb8, hi: 0xb8}, - {value: 0x8200, lo: 0xb9, hi: 0xb9}, - {value: 0x8127, lo: 0xba, hi: 0xbd}, - // Block 0x26, offset 0xe7 - {value: 0x0000, lo: 0x0b}, - {value: 0x8127, lo: 0x80, hi: 0x80}, - {value: 0x4a96, lo: 0x81, hi: 0x81}, - {value: 0x8132, lo: 0x82, hi: 0x83}, - {value: 0x8104, lo: 0x84, hi: 0x84}, - {value: 0x8132, lo: 0x86, hi: 0x87}, - {value: 0x266e, lo: 0x93, hi: 0x93}, - {value: 0x2675, lo: 0x9d, hi: 0x9d}, - {value: 0x267c, lo: 0xa2, hi: 0xa2}, - {value: 0x2683, lo: 0xa7, hi: 0xa7}, - {value: 0x268a, lo: 0xac, hi: 0xac}, - {value: 0x2667, lo: 0xb9, hi: 0xb9}, - // Block 0x27, offset 0xf3 - {value: 0x0000, lo: 0x01}, - {value: 0x812d, lo: 0x86, hi: 0x86}, - // Block 0x28, offset 0xf5 - {value: 0x0000, lo: 0x05}, - {value: 0xa000, lo: 0xa5, hi: 0xa5}, - {value: 0x2d1e, lo: 0xa6, hi: 0xa6}, - {value: 0x9900, lo: 0xae, hi: 0xae}, - {value: 0x8102, lo: 0xb7, hi: 0xb7}, - {value: 0x8104, lo: 0xb9, hi: 0xba}, - // Block 0x29, offset 0xfb - {value: 0x0000, lo: 0x01}, - {value: 0x812d, lo: 0x8d, hi: 0x8d}, - // Block 0x2a, offset 0xfd - {value: 0x0000, lo: 0x01}, - {value: 0xa000, lo: 0x80, hi: 0x92}, - // Block 0x2b, offset 0xff - {value: 0x0000, lo: 0x01}, - {value: 0xb900, lo: 0xa1, hi: 0xb5}, - // Block 0x2c, offset 0x101 - {value: 0x0000, lo: 0x01}, - {value: 0x9900, lo: 0xa8, hi: 0xbf}, - // Block 0x2d, offset 0x103 - {value: 0x0000, lo: 0x01}, - {value: 0x9900, lo: 0x80, hi: 0x82}, - // Block 0x2e, offset 0x105 - {value: 0x0000, lo: 0x01}, - {value: 0x8132, lo: 0x9d, hi: 0x9f}, - // Block 0x2f, offset 0x107 - {value: 0x0000, lo: 0x02}, - {value: 0x8104, lo: 0x94, hi: 0x94}, - {value: 0x8104, lo: 0xb4, hi: 0xb4}, - // Block 0x30, offset 0x10a - {value: 0x0000, lo: 0x02}, - {value: 0x8104, lo: 0x92, hi: 0x92}, - {value: 0x8132, lo: 0x9d, hi: 0x9d}, - // Block 0x31, offset 0x10d - {value: 0x0000, lo: 0x01}, - {value: 0x8131, lo: 0xa9, hi: 0xa9}, - // Block 0x32, offset 0x10f - {value: 0x0004, lo: 0x02}, - {value: 0x812e, lo: 0xb9, hi: 0xba}, - {value: 0x812d, lo: 0xbb, hi: 0xbb}, - // Block 0x33, offset 0x112 - {value: 0x0000, lo: 0x02}, - {value: 0x8132, lo: 0x97, hi: 0x97}, - {value: 0x812d, lo: 0x98, hi: 0x98}, - // Block 0x34, offset 0x115 - {value: 0x0000, lo: 0x03}, - {value: 0x8104, lo: 0xa0, hi: 0xa0}, - {value: 0x8132, lo: 0xb5, hi: 0xbc}, - {value: 0x812d, lo: 0xbf, hi: 0xbf}, - // Block 0x35, offset 0x119 - {value: 0x0000, lo: 0x04}, - {value: 0x8132, lo: 0xb0, hi: 0xb4}, - {value: 0x812d, lo: 0xb5, hi: 0xba}, - {value: 0x8132, lo: 0xbb, hi: 0xbc}, - {value: 0x812d, lo: 0xbd, hi: 0xbd}, - // Block 0x36, offset 0x11e - {value: 0x0000, lo: 0x08}, - {value: 0x2d66, lo: 0x80, hi: 0x80}, - {value: 0x2d6e, lo: 0x81, hi: 0x81}, - {value: 0xa000, lo: 0x82, hi: 0x82}, - {value: 0x2d76, lo: 0x83, hi: 0x83}, - {value: 0x8104, lo: 0x84, hi: 0x84}, - {value: 0x8132, lo: 0xab, hi: 0xab}, - {value: 0x812d, lo: 0xac, hi: 0xac}, - {value: 0x8132, lo: 0xad, hi: 0xb3}, - // Block 0x37, offset 0x127 - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0xaa, hi: 0xab}, - // Block 0x38, offset 0x129 - {value: 0x0000, lo: 0x02}, - {value: 0x8102, lo: 0xa6, hi: 0xa6}, - {value: 0x8104, lo: 0xb2, hi: 0xb3}, - // Block 0x39, offset 0x12c - {value: 0x0000, lo: 0x01}, - {value: 0x8102, lo: 0xb7, hi: 0xb7}, - // Block 0x3a, offset 0x12e - {value: 0x0000, lo: 0x0a}, - {value: 0x8132, lo: 0x90, hi: 0x92}, - {value: 0x8101, lo: 0x94, hi: 0x94}, - {value: 0x812d, lo: 0x95, hi: 0x99}, - {value: 0x8132, lo: 0x9a, hi: 0x9b}, - {value: 0x812d, lo: 0x9c, hi: 0x9f}, - {value: 0x8132, lo: 0xa0, hi: 0xa0}, - {value: 0x8101, lo: 0xa2, hi: 0xa8}, - {value: 0x812d, lo: 0xad, hi: 0xad}, - {value: 0x8132, lo: 0xb4, hi: 0xb4}, - {value: 0x8132, lo: 0xb8, hi: 0xb9}, - // Block 0x3b, offset 0x139 - {value: 0x0004, lo: 0x03}, - {value: 0x0433, lo: 0x80, hi: 0x81}, - {value: 0x8100, lo: 0x97, hi: 0x97}, - {value: 0x8100, lo: 0xbe, hi: 0xbe}, - // Block 0x3c, offset 0x13d - {value: 0x0000, lo: 0x0d}, - {value: 0x8132, lo: 0x90, hi: 0x91}, - {value: 0x8101, lo: 0x92, hi: 0x93}, - {value: 0x8132, lo: 0x94, hi: 0x97}, - {value: 0x8101, lo: 0x98, hi: 0x9a}, - {value: 0x8132, lo: 0x9b, hi: 0x9c}, - {value: 0x8132, lo: 0xa1, hi: 0xa1}, - {value: 0x8101, lo: 0xa5, hi: 0xa6}, - {value: 0x8132, lo: 0xa7, hi: 0xa7}, - {value: 0x812d, lo: 0xa8, hi: 0xa8}, - {value: 0x8132, lo: 0xa9, hi: 0xa9}, - {value: 0x8101, lo: 0xaa, hi: 0xab}, - {value: 0x812d, lo: 0xac, hi: 0xaf}, - {value: 0x8132, lo: 0xb0, hi: 0xb0}, - // Block 0x3d, offset 0x14b - {value: 0x427b, lo: 0x02}, - {value: 0x01b8, lo: 0xa6, hi: 0xa6}, - {value: 0x0057, lo: 0xaa, hi: 0xab}, - // Block 0x3e, offset 0x14e - {value: 0x0007, lo: 0x05}, - {value: 0xa000, lo: 0x90, hi: 0x90}, - {value: 0xa000, lo: 0x92, hi: 0x92}, - {value: 0xa000, lo: 0x94, hi: 0x94}, - {value: 0x3bb9, lo: 0x9a, hi: 0x9b}, - {value: 0x3bc7, lo: 0xae, hi: 0xae}, - // Block 0x3f, offset 0x154 - {value: 0x000e, lo: 0x05}, - {value: 0x3bce, lo: 0x8d, hi: 0x8e}, - {value: 0x3bd5, lo: 0x8f, hi: 0x8f}, - {value: 0xa000, lo: 0x90, hi: 0x90}, - {value: 0xa000, lo: 0x92, hi: 0x92}, - {value: 0xa000, lo: 0x94, hi: 0x94}, - // Block 0x40, offset 0x15a - {value: 0x6408, lo: 0x0a}, - {value: 0xa000, lo: 0x83, hi: 0x83}, - {value: 0x3be3, lo: 0x84, hi: 0x84}, - {value: 0xa000, lo: 0x88, hi: 0x88}, - {value: 0x3bea, lo: 0x89, hi: 0x89}, - {value: 0xa000, lo: 0x8b, hi: 0x8b}, - {value: 0x3bf1, lo: 0x8c, hi: 0x8c}, - {value: 0xa000, lo: 0xa3, hi: 0xa3}, - {value: 0x3bf8, lo: 0xa4, hi: 0xa5}, - {value: 0x3bff, lo: 0xa6, hi: 0xa6}, - {value: 0xa000, lo: 0xbc, hi: 0xbc}, - // Block 0x41, offset 0x165 - {value: 0x0007, lo: 0x03}, - {value: 0x3c68, lo: 0xa0, hi: 0xa1}, - {value: 0x3c92, lo: 0xa2, hi: 0xa3}, - {value: 0x3cbc, lo: 0xaa, hi: 0xad}, - // Block 0x42, offset 0x169 - {value: 0x0004, lo: 0x01}, - {value: 0x048b, lo: 0xa9, hi: 0xaa}, - // Block 0x43, offset 0x16b - {value: 0x0000, lo: 0x01}, - {value: 0x44dd, lo: 0x9c, hi: 0x9c}, - // Block 0x44, offset 0x16d - {value: 0x0000, lo: 0x01}, - {value: 0x8132, lo: 0xaf, hi: 0xb1}, - // Block 0x45, offset 0x16f - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0xbf, hi: 0xbf}, - // Block 0x46, offset 0x171 - {value: 0x0000, lo: 0x01}, - {value: 0x8132, lo: 0xa0, hi: 0xbf}, - // Block 0x47, offset 0x173 - {value: 0x0000, lo: 0x05}, - {value: 0x812c, lo: 0xaa, hi: 0xaa}, - {value: 0x8131, lo: 0xab, hi: 0xab}, - {value: 0x8133, lo: 0xac, hi: 0xac}, - {value: 0x812e, lo: 0xad, hi: 0xad}, - {value: 0x812f, lo: 0xae, hi: 0xaf}, - // Block 0x48, offset 0x179 - {value: 0x0000, lo: 0x03}, - {value: 0x4a9f, lo: 0xb3, hi: 0xb3}, - {value: 0x4a9f, lo: 0xb5, hi: 0xb6}, - {value: 0x4a9f, lo: 0xba, hi: 0xbf}, - // Block 0x49, offset 0x17d - {value: 0x0000, lo: 0x01}, - {value: 0x4a9f, lo: 0x8f, hi: 0xa3}, - // Block 0x4a, offset 0x17f - {value: 0x0000, lo: 0x01}, - {value: 0x8100, lo: 0xae, hi: 0xbe}, - // Block 0x4b, offset 0x181 - {value: 0x0000, lo: 0x07}, - {value: 0x8100, lo: 0x84, hi: 0x84}, - {value: 0x8100, lo: 0x87, hi: 0x87}, - {value: 0x8100, lo: 0x90, hi: 0x90}, - {value: 0x8100, lo: 0x9e, hi: 0x9e}, - {value: 0x8100, lo: 0xa1, hi: 0xa1}, - {value: 0x8100, lo: 0xb2, hi: 0xb2}, - {value: 0x8100, lo: 0xbb, hi: 0xbb}, - // Block 0x4c, offset 0x189 - {value: 0x0000, lo: 0x03}, - {value: 0x8100, lo: 0x80, hi: 0x80}, - {value: 0x8100, lo: 0x8b, hi: 0x8b}, - {value: 0x8100, lo: 0x8e, hi: 0x8e}, - // Block 0x4d, offset 0x18d - {value: 0x0000, lo: 0x02}, - {value: 0x8132, lo: 0xaf, hi: 0xaf}, - {value: 0x8132, lo: 0xb4, hi: 0xbd}, - // Block 0x4e, offset 0x190 - {value: 0x0000, lo: 0x01}, - {value: 0x8132, lo: 0x9e, hi: 0x9f}, - // Block 0x4f, offset 0x192 - {value: 0x0000, lo: 0x01}, - {value: 0x8132, lo: 0xb0, hi: 0xb1}, - // Block 0x50, offset 0x194 - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0x86, hi: 0x86}, - // Block 0x51, offset 0x196 - {value: 0x0000, lo: 0x02}, - {value: 0x8104, lo: 0x84, hi: 0x84}, - {value: 0x8132, lo: 0xa0, hi: 0xb1}, - // Block 0x52, offset 0x199 - {value: 0x0000, lo: 0x01}, - {value: 0x812d, lo: 0xab, hi: 0xad}, - // Block 0x53, offset 0x19b - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0x93, hi: 0x93}, - // Block 0x54, offset 0x19d - {value: 0x0000, lo: 0x01}, - {value: 0x8102, lo: 0xb3, hi: 0xb3}, - // Block 0x55, offset 0x19f - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0x80, hi: 0x80}, - // Block 0x56, offset 0x1a1 - {value: 0x0000, lo: 0x05}, - {value: 0x8132, lo: 0xb0, hi: 0xb0}, - {value: 0x8132, lo: 0xb2, hi: 0xb3}, - {value: 0x812d, lo: 0xb4, hi: 0xb4}, - {value: 0x8132, lo: 0xb7, hi: 0xb8}, - {value: 0x8132, lo: 0xbe, hi: 0xbf}, - // Block 0x57, offset 0x1a7 - {value: 0x0000, lo: 0x02}, - {value: 0x8132, lo: 0x81, hi: 0x81}, - {value: 0x8104, lo: 0xb6, hi: 0xb6}, - // Block 0x58, offset 0x1aa - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0xad, hi: 0xad}, - // Block 0x59, offset 0x1ac - {value: 0x0000, lo: 0x06}, - {value: 0xe500, lo: 0x80, hi: 0x80}, - {value: 0xc600, lo: 0x81, hi: 0x9b}, - {value: 0xe500, lo: 0x9c, hi: 0x9c}, - {value: 0xc600, lo: 0x9d, hi: 0xb7}, - {value: 0xe500, lo: 0xb8, hi: 0xb8}, - {value: 0xc600, lo: 0xb9, hi: 0xbf}, - // Block 0x5a, offset 0x1b3 - {value: 0x0000, lo: 0x05}, - {value: 0xc600, lo: 0x80, hi: 0x93}, - {value: 0xe500, lo: 0x94, hi: 0x94}, - {value: 0xc600, lo: 0x95, hi: 0xaf}, - {value: 0xe500, lo: 0xb0, hi: 0xb0}, - {value: 0xc600, lo: 0xb1, hi: 0xbf}, - // Block 0x5b, offset 0x1b9 - {value: 0x0000, lo: 0x05}, - {value: 0xc600, lo: 0x80, hi: 0x8b}, - {value: 0xe500, lo: 0x8c, hi: 0x8c}, - {value: 0xc600, lo: 0x8d, hi: 0xa7}, - {value: 0xe500, lo: 0xa8, hi: 0xa8}, - {value: 0xc600, lo: 0xa9, hi: 0xbf}, - // Block 0x5c, offset 0x1bf - {value: 0x0000, lo: 0x07}, - {value: 0xc600, lo: 0x80, hi: 0x83}, - {value: 0xe500, lo: 0x84, hi: 0x84}, - {value: 0xc600, lo: 0x85, hi: 0x9f}, - {value: 0xe500, lo: 0xa0, hi: 0xa0}, - {value: 0xc600, lo: 0xa1, hi: 0xbb}, - {value: 0xe500, lo: 0xbc, hi: 0xbc}, - {value: 0xc600, lo: 0xbd, hi: 0xbf}, - // Block 0x5d, offset 0x1c7 - {value: 0x0000, lo: 0x05}, - {value: 0xc600, lo: 0x80, hi: 0x97}, - {value: 0xe500, lo: 0x98, hi: 0x98}, - {value: 0xc600, lo: 0x99, hi: 0xb3}, - {value: 0xe500, lo: 0xb4, hi: 0xb4}, - {value: 0xc600, lo: 0xb5, hi: 0xbf}, - // Block 0x5e, offset 0x1cd - {value: 0x0000, lo: 0x05}, - {value: 0xc600, lo: 0x80, hi: 0x8f}, - {value: 0xe500, lo: 0x90, hi: 0x90}, - {value: 0xc600, lo: 0x91, hi: 0xab}, - {value: 0xe500, lo: 0xac, hi: 0xac}, - {value: 0xc600, lo: 0xad, hi: 0xbf}, - // Block 0x5f, offset 0x1d3 - {value: 0x0000, lo: 0x05}, - {value: 0xc600, lo: 0x80, hi: 0x87}, - {value: 0xe500, lo: 0x88, hi: 0x88}, - {value: 0xc600, lo: 0x89, hi: 0xa3}, - {value: 0xe500, lo: 0xa4, hi: 0xa4}, - {value: 0xc600, lo: 0xa5, hi: 0xbf}, - // Block 0x60, offset 0x1d9 - {value: 0x0000, lo: 0x03}, - {value: 0xc600, lo: 0x80, hi: 0x87}, - {value: 0xe500, lo: 0x88, hi: 0x88}, - {value: 0xc600, lo: 0x89, hi: 0xa3}, - // Block 0x61, offset 0x1dd - {value: 0x0006, lo: 0x0d}, - {value: 0x4390, lo: 0x9d, hi: 0x9d}, - {value: 0x8115, lo: 0x9e, hi: 0x9e}, - {value: 0x4402, lo: 0x9f, hi: 0x9f}, - {value: 0x43f0, lo: 0xaa, hi: 0xab}, - {value: 0x44f4, lo: 0xac, hi: 0xac}, - {value: 0x44fc, lo: 0xad, hi: 0xad}, - {value: 0x4348, lo: 0xae, hi: 0xb1}, - {value: 0x4366, lo: 0xb2, hi: 0xb4}, - {value: 0x437e, lo: 0xb5, hi: 0xb6}, - {value: 0x438a, lo: 0xb8, hi: 0xb8}, - {value: 0x4396, lo: 0xb9, hi: 0xbb}, - {value: 0x43ae, lo: 0xbc, hi: 0xbc}, - {value: 0x43b4, lo: 0xbe, hi: 0xbe}, - // Block 0x62, offset 0x1eb - {value: 0x0006, lo: 0x08}, - {value: 0x43ba, lo: 0x80, hi: 0x81}, - {value: 0x43c6, lo: 0x83, hi: 0x84}, - {value: 0x43d8, lo: 0x86, hi: 0x89}, - {value: 0x43fc, lo: 0x8a, hi: 0x8a}, - {value: 0x4378, lo: 0x8b, hi: 0x8b}, - {value: 0x4360, lo: 0x8c, hi: 0x8c}, - {value: 0x43a8, lo: 0x8d, hi: 0x8d}, - {value: 0x43d2, lo: 0x8e, hi: 0x8e}, - // Block 0x63, offset 0x1f4 - {value: 0x0000, lo: 0x02}, - {value: 0x8100, lo: 0xa4, hi: 0xa5}, - {value: 0x8100, lo: 0xb0, hi: 0xb1}, - // Block 0x64, offset 0x1f7 - {value: 0x0000, lo: 0x02}, - {value: 0x8100, lo: 0x9b, hi: 0x9d}, - {value: 0x8200, lo: 0x9e, hi: 0xa3}, - // Block 0x65, offset 0x1fa - {value: 0x0000, lo: 0x01}, - {value: 0x8100, lo: 0x90, hi: 0x90}, - // Block 0x66, offset 0x1fc - {value: 0x0000, lo: 0x02}, - {value: 0x8100, lo: 0x99, hi: 0x99}, - {value: 0x8200, lo: 0xb2, hi: 0xb4}, - // Block 0x67, offset 0x1ff - {value: 0x0000, lo: 0x01}, - {value: 0x8100, lo: 0xbc, hi: 0xbd}, - // Block 0x68, offset 0x201 - {value: 0x0000, lo: 0x03}, - {value: 0x8132, lo: 0xa0, hi: 0xa6}, - {value: 0x812d, lo: 0xa7, hi: 0xad}, - {value: 0x8132, lo: 0xae, hi: 0xaf}, - // Block 0x69, offset 0x205 - {value: 0x0000, lo: 0x04}, - {value: 0x8100, lo: 0x89, hi: 0x8c}, - {value: 0x8100, lo: 0xb0, hi: 0xb2}, - {value: 0x8100, lo: 0xb4, hi: 0xb4}, - {value: 0x8100, lo: 0xb6, hi: 0xbf}, - // Block 0x6a, offset 0x20a - {value: 0x0000, lo: 0x01}, - {value: 0x8100, lo: 0x81, hi: 0x8c}, - // Block 0x6b, offset 0x20c - {value: 0x0000, lo: 0x01}, - {value: 0x8100, lo: 0xb5, hi: 0xba}, - // Block 0x6c, offset 0x20e - {value: 0x0000, lo: 0x04}, - {value: 0x4a9f, lo: 0x9e, hi: 0x9f}, - {value: 0x4a9f, lo: 0xa3, hi: 0xa3}, - {value: 0x4a9f, lo: 0xa5, hi: 0xa6}, - {value: 0x4a9f, lo: 0xaa, hi: 0xaf}, - // Block 0x6d, offset 0x213 - {value: 0x0000, lo: 0x05}, - {value: 0x4a9f, lo: 0x82, hi: 0x87}, - {value: 0x4a9f, lo: 0x8a, hi: 0x8f}, - {value: 0x4a9f, lo: 0x92, hi: 0x97}, - {value: 0x4a9f, lo: 0x9a, hi: 0x9c}, - {value: 0x8100, lo: 0xa3, hi: 0xa3}, - // Block 0x6e, offset 0x219 - {value: 0x0000, lo: 0x01}, - {value: 0x812d, lo: 0xbd, hi: 0xbd}, - // Block 0x6f, offset 0x21b - {value: 0x0000, lo: 0x01}, - {value: 0x812d, lo: 0xa0, hi: 0xa0}, - // Block 0x70, offset 0x21d - {value: 0x0000, lo: 0x01}, - {value: 0x8132, lo: 0xb6, hi: 0xba}, - // Block 0x71, offset 0x21f - {value: 0x002c, lo: 0x05}, - {value: 0x812d, lo: 0x8d, hi: 0x8d}, - {value: 0x8132, lo: 0x8f, hi: 0x8f}, - {value: 0x8132, lo: 0xb8, hi: 0xb8}, - {value: 0x8101, lo: 0xb9, hi: 0xba}, - {value: 0x8104, lo: 0xbf, hi: 0xbf}, - // Block 0x72, offset 0x225 - {value: 0x0000, lo: 0x02}, - {value: 0x8132, lo: 0xa5, hi: 0xa5}, - {value: 0x812d, lo: 0xa6, hi: 0xa6}, - // Block 0x73, offset 0x228 - {value: 0x0000, lo: 0x01}, - {value: 0x8132, lo: 0xa4, hi: 0xa7}, - // Block 0x74, offset 0x22a - {value: 0x0000, lo: 0x05}, - {value: 0x812d, lo: 0x86, hi: 0x87}, - {value: 0x8132, lo: 0x88, hi: 0x8a}, - {value: 0x812d, lo: 0x8b, hi: 0x8b}, - {value: 0x8132, lo: 0x8c, hi: 0x8c}, - {value: 0x812d, lo: 0x8d, hi: 0x90}, - // Block 0x75, offset 0x230 - {value: 0x0000, lo: 0x02}, - {value: 0x8104, lo: 0x86, hi: 0x86}, - {value: 0x8104, lo: 0xbf, hi: 0xbf}, - // Block 0x76, offset 0x233 - {value: 0x17fe, lo: 0x07}, - {value: 0xa000, lo: 0x99, hi: 0x99}, - {value: 0x4238, lo: 0x9a, hi: 0x9a}, - {value: 0xa000, lo: 0x9b, hi: 0x9b}, - {value: 0x4242, lo: 0x9c, hi: 0x9c}, - {value: 0xa000, lo: 0xa5, hi: 0xa5}, - {value: 0x424c, lo: 0xab, hi: 0xab}, - {value: 0x8104, lo: 0xb9, hi: 0xba}, - // Block 0x77, offset 0x23b - {value: 0x0000, lo: 0x06}, - {value: 0x8132, lo: 0x80, hi: 0x82}, - {value: 0x9900, lo: 0xa7, hi: 0xa7}, - {value: 0x2d7e, lo: 0xae, hi: 0xae}, - {value: 0x2d88, lo: 0xaf, hi: 0xaf}, - {value: 0xa000, lo: 0xb1, hi: 0xb2}, - {value: 0x8104, lo: 0xb3, hi: 0xb4}, - // Block 0x78, offset 0x242 - {value: 0x0000, lo: 0x02}, - {value: 0x8104, lo: 0x80, hi: 0x80}, - {value: 0x8102, lo: 0x8a, hi: 0x8a}, - // Block 0x79, offset 0x245 - {value: 0x0000, lo: 0x02}, - {value: 0x8104, lo: 0xb5, hi: 0xb5}, - {value: 0x8102, lo: 0xb6, hi: 0xb6}, - // Block 0x7a, offset 0x248 - {value: 0x0002, lo: 0x01}, - {value: 0x8102, lo: 0xa9, hi: 0xaa}, - // Block 0x7b, offset 0x24a - {value: 0x0000, lo: 0x02}, - {value: 0x8102, lo: 0xbb, hi: 0xbc}, - {value: 0x9900, lo: 0xbe, hi: 0xbe}, - // Block 0x7c, offset 0x24d - {value: 0x0000, lo: 0x07}, - {value: 0xa000, lo: 0x87, hi: 0x87}, - {value: 0x2d92, lo: 0x8b, hi: 0x8b}, - {value: 0x2d9c, lo: 0x8c, hi: 0x8c}, - {value: 0x8104, lo: 0x8d, hi: 0x8d}, - {value: 0x9900, lo: 0x97, hi: 0x97}, - {value: 0x8132, lo: 0xa6, hi: 0xac}, - {value: 0x8132, lo: 0xb0, hi: 0xb4}, - // Block 0x7d, offset 0x255 - {value: 0x0000, lo: 0x03}, - {value: 0x8104, lo: 0x82, hi: 0x82}, - {value: 0x8102, lo: 0x86, hi: 0x86}, - {value: 0x8132, lo: 0x9e, hi: 0x9e}, - // Block 0x7e, offset 0x259 - {value: 0x6b5a, lo: 0x06}, - {value: 0x9900, lo: 0xb0, hi: 0xb0}, - {value: 0xa000, lo: 0xb9, hi: 0xb9}, - {value: 0x9900, lo: 0xba, hi: 0xba}, - {value: 0x2db0, lo: 0xbb, hi: 0xbb}, - {value: 0x2da6, lo: 0xbc, hi: 0xbd}, - {value: 0x2dba, lo: 0xbe, hi: 0xbe}, - // Block 0x7f, offset 0x260 - {value: 0x0000, lo: 0x02}, - {value: 0x8104, lo: 0x82, hi: 0x82}, - {value: 0x8102, lo: 0x83, hi: 0x83}, - // Block 0x80, offset 0x263 - {value: 0x0000, lo: 0x05}, - {value: 0x9900, lo: 0xaf, hi: 0xaf}, - {value: 0xa000, lo: 0xb8, hi: 0xb9}, - {value: 0x2dc4, lo: 0xba, hi: 0xba}, - {value: 0x2dce, lo: 0xbb, hi: 0xbb}, - {value: 0x8104, lo: 0xbf, hi: 0xbf}, - // Block 0x81, offset 0x269 - {value: 0x0000, lo: 0x01}, - {value: 0x8102, lo: 0x80, hi: 0x80}, - // Block 0x82, offset 0x26b - {value: 0x0000, lo: 0x02}, - {value: 0x8104, lo: 0xb6, hi: 0xb6}, - {value: 0x8102, lo: 0xb7, hi: 0xb7}, - // Block 0x83, offset 0x26e - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0xab, hi: 0xab}, - // Block 0x84, offset 0x270 - {value: 0x0000, lo: 0x02}, - {value: 0x8104, lo: 0xb9, hi: 0xb9}, - {value: 0x8102, lo: 0xba, hi: 0xba}, - // Block 0x85, offset 0x273 - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0xb4, hi: 0xb4}, - // Block 0x86, offset 0x275 - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0x87, hi: 0x87}, - // Block 0x87, offset 0x277 - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0x99, hi: 0x99}, - // Block 0x88, offset 0x279 - {value: 0x0000, lo: 0x02}, - {value: 0x8102, lo: 0x82, hi: 0x82}, - {value: 0x8104, lo: 0x84, hi: 0x85}, - // Block 0x89, offset 0x27c - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0x97, hi: 0x97}, - // Block 0x8a, offset 0x27e - {value: 0x0000, lo: 0x01}, - {value: 0x8101, lo: 0xb0, hi: 0xb4}, - // Block 0x8b, offset 0x280 - {value: 0x0000, lo: 0x01}, - {value: 0x8132, lo: 0xb0, hi: 0xb6}, - // Block 0x8c, offset 0x282 - {value: 0x0000, lo: 0x01}, - {value: 0x8101, lo: 0x9e, hi: 0x9e}, - // Block 0x8d, offset 0x284 - {value: 0x0000, lo: 0x0c}, - {value: 0x45cc, lo: 0x9e, hi: 0x9e}, - {value: 0x45d6, lo: 0x9f, hi: 0x9f}, - {value: 0x460a, lo: 0xa0, hi: 0xa0}, - {value: 0x4618, lo: 0xa1, hi: 0xa1}, - {value: 0x4626, lo: 0xa2, hi: 0xa2}, - {value: 0x4634, lo: 0xa3, hi: 0xa3}, - {value: 0x4642, lo: 0xa4, hi: 0xa4}, - {value: 0x812b, lo: 0xa5, hi: 0xa6}, - {value: 0x8101, lo: 0xa7, hi: 0xa9}, - {value: 0x8130, lo: 0xad, hi: 0xad}, - {value: 0x812b, lo: 0xae, hi: 0xb2}, - {value: 0x812d, lo: 0xbb, hi: 0xbf}, - // Block 0x8e, offset 0x291 - {value: 0x0000, lo: 0x09}, - {value: 0x812d, lo: 0x80, hi: 0x82}, - {value: 0x8132, lo: 0x85, hi: 0x89}, - {value: 0x812d, lo: 0x8a, hi: 0x8b}, - {value: 0x8132, lo: 0xaa, hi: 0xad}, - {value: 0x45e0, lo: 0xbb, hi: 0xbb}, - {value: 0x45ea, lo: 0xbc, hi: 0xbc}, - {value: 0x4650, lo: 0xbd, hi: 0xbd}, - {value: 0x466c, lo: 0xbe, hi: 0xbe}, - {value: 0x465e, lo: 0xbf, hi: 0xbf}, - // Block 0x8f, offset 0x29b - {value: 0x0000, lo: 0x01}, - {value: 0x467a, lo: 0x80, hi: 0x80}, - // Block 0x90, offset 0x29d - {value: 0x0000, lo: 0x01}, - {value: 0x8132, lo: 0x82, hi: 0x84}, - // Block 0x91, offset 0x29f - {value: 0x0000, lo: 0x05}, - {value: 0x8132, lo: 0x80, hi: 0x86}, - {value: 0x8132, lo: 0x88, hi: 0x98}, - {value: 0x8132, lo: 0x9b, hi: 0xa1}, - {value: 0x8132, lo: 0xa3, hi: 0xa4}, - {value: 0x8132, lo: 0xa6, hi: 0xaa}, - // Block 0x92, offset 0x2a5 - {value: 0x0000, lo: 0x01}, - {value: 0x812d, lo: 0x90, hi: 0x96}, - // Block 0x93, offset 0x2a7 - {value: 0x0000, lo: 0x02}, - {value: 0x8132, lo: 0x84, hi: 0x89}, - {value: 0x8102, lo: 0x8a, hi: 0x8a}, - // Block 0x94, offset 0x2aa - {value: 0x0000, lo: 0x01}, - {value: 0x8100, lo: 0x93, hi: 0x93}, -} - -// lookup returns the trie value for the first UTF-8 encoding in s and -// the width in bytes of this encoding. The size will be 0 if s does not -// hold enough bytes to complete the encoding. len(s) must be greater than 0. -func (t *nfkcTrie) lookup(s []byte) (v uint16, sz int) { - c0 := s[0] - switch { - case c0 < 0x80: // is ASCII - return nfkcValues[c0], 1 - case c0 < 0xC2: - return 0, 1 // Illegal UTF-8: not a starter, not ASCII. - case c0 < 0xE0: // 2-byte UTF-8 - if len(s) < 2 { - return 0, 0 - } - i := nfkcIndex[c0] - c1 := s[1] - if c1 < 0x80 || 0xC0 <= c1 { - return 0, 1 // Illegal UTF-8: not a continuation byte. - } - return t.lookupValue(uint32(i), c1), 2 - case c0 < 0xF0: // 3-byte UTF-8 - if len(s) < 3 { - return 0, 0 - } - i := nfkcIndex[c0] - c1 := s[1] - if c1 < 0x80 || 0xC0 <= c1 { - return 0, 1 // Illegal UTF-8: not a continuation byte. - } - o := uint32(i)<<6 + uint32(c1) - i = nfkcIndex[o] - c2 := s[2] - if c2 < 0x80 || 0xC0 <= c2 { - return 0, 2 // Illegal UTF-8: not a continuation byte. - } - return t.lookupValue(uint32(i), c2), 3 - case c0 < 0xF8: // 4-byte UTF-8 - if len(s) < 4 { - return 0, 0 - } - i := nfkcIndex[c0] - c1 := s[1] - if c1 < 0x80 || 0xC0 <= c1 { - return 0, 1 // Illegal UTF-8: not a continuation byte. - } - o := uint32(i)<<6 + uint32(c1) - i = nfkcIndex[o] - c2 := s[2] - if c2 < 0x80 || 0xC0 <= c2 { - return 0, 2 // Illegal UTF-8: not a continuation byte. - } - o = uint32(i)<<6 + uint32(c2) - i = nfkcIndex[o] - c3 := s[3] - if c3 < 0x80 || 0xC0 <= c3 { - return 0, 3 // Illegal UTF-8: not a continuation byte. - } - return t.lookupValue(uint32(i), c3), 4 - } - // Illegal rune - return 0, 1 -} - -// lookupUnsafe returns the trie value for the first UTF-8 encoding in s. -// s must start with a full and valid UTF-8 encoded rune. -func (t *nfkcTrie) lookupUnsafe(s []byte) uint16 { - c0 := s[0] - if c0 < 0x80 { // is ASCII - return nfkcValues[c0] - } - i := nfkcIndex[c0] - if c0 < 0xE0 { // 2-byte UTF-8 - return t.lookupValue(uint32(i), s[1]) - } - i = nfkcIndex[uint32(i)<<6+uint32(s[1])] - if c0 < 0xF0 { // 3-byte UTF-8 - return t.lookupValue(uint32(i), s[2]) - } - i = nfkcIndex[uint32(i)<<6+uint32(s[2])] - if c0 < 0xF8 { // 4-byte UTF-8 - return t.lookupValue(uint32(i), s[3]) - } - return 0 -} - -// lookupString returns the trie value for the first UTF-8 encoding in s and -// the width in bytes of this encoding. The size will be 0 if s does not -// hold enough bytes to complete the encoding. len(s) must be greater than 0. -func (t *nfkcTrie) lookupString(s string) (v uint16, sz int) { - c0 := s[0] - switch { - case c0 < 0x80: // is ASCII - return nfkcValues[c0], 1 - case c0 < 0xC2: - return 0, 1 // Illegal UTF-8: not a starter, not ASCII. - case c0 < 0xE0: // 2-byte UTF-8 - if len(s) < 2 { - return 0, 0 - } - i := nfkcIndex[c0] - c1 := s[1] - if c1 < 0x80 || 0xC0 <= c1 { - return 0, 1 // Illegal UTF-8: not a continuation byte. - } - return t.lookupValue(uint32(i), c1), 2 - case c0 < 0xF0: // 3-byte UTF-8 - if len(s) < 3 { - return 0, 0 - } - i := nfkcIndex[c0] - c1 := s[1] - if c1 < 0x80 || 0xC0 <= c1 { - return 0, 1 // Illegal UTF-8: not a continuation byte. - } - o := uint32(i)<<6 + uint32(c1) - i = nfkcIndex[o] - c2 := s[2] - if c2 < 0x80 || 0xC0 <= c2 { - return 0, 2 // Illegal UTF-8: not a continuation byte. - } - return t.lookupValue(uint32(i), c2), 3 - case c0 < 0xF8: // 4-byte UTF-8 - if len(s) < 4 { - return 0, 0 - } - i := nfkcIndex[c0] - c1 := s[1] - if c1 < 0x80 || 0xC0 <= c1 { - return 0, 1 // Illegal UTF-8: not a continuation byte. - } - o := uint32(i)<<6 + uint32(c1) - i = nfkcIndex[o] - c2 := s[2] - if c2 < 0x80 || 0xC0 <= c2 { - return 0, 2 // Illegal UTF-8: not a continuation byte. - } - o = uint32(i)<<6 + uint32(c2) - i = nfkcIndex[o] - c3 := s[3] - if c3 < 0x80 || 0xC0 <= c3 { - return 0, 3 // Illegal UTF-8: not a continuation byte. - } - return t.lookupValue(uint32(i), c3), 4 - } - // Illegal rune - return 0, 1 -} - -// lookupStringUnsafe returns the trie value for the first UTF-8 encoding in s. -// s must start with a full and valid UTF-8 encoded rune. -func (t *nfkcTrie) lookupStringUnsafe(s string) uint16 { - c0 := s[0] - if c0 < 0x80 { // is ASCII - return nfkcValues[c0] - } - i := nfkcIndex[c0] - if c0 < 0xE0 { // 2-byte UTF-8 - return t.lookupValue(uint32(i), s[1]) - } - i = nfkcIndex[uint32(i)<<6+uint32(s[1])] - if c0 < 0xF0 { // 3-byte UTF-8 - return t.lookupValue(uint32(i), s[2]) - } - i = nfkcIndex[uint32(i)<<6+uint32(s[2])] - if c0 < 0xF8 { // 4-byte UTF-8 - return t.lookupValue(uint32(i), s[3]) - } - return 0 -} - -// nfkcTrie. Total size: 17248 bytes (16.84 KiB). Checksum: 4fb368372b6b1b27. -type nfkcTrie struct{} - -func newNfkcTrie(i int) *nfkcTrie { - return &nfkcTrie{} -} - -// lookupValue determines the type of block n and looks up the value for b. -func (t *nfkcTrie) lookupValue(n uint32, b byte) uint16 { - switch { - case n < 92: - return uint16(nfkcValues[n<<6+uint32(b)]) - default: - n -= 92 - return uint16(nfkcSparse.lookup(n, b)) - } -} - -// nfkcValues: 94 blocks, 6016 entries, 12032 bytes -// The third block is the zero block. -var nfkcValues = [6016]uint16{ - // Block 0x0, offset 0x0 - 0x3c: 0xa000, 0x3d: 0xa000, 0x3e: 0xa000, - // Block 0x1, offset 0x40 - 0x41: 0xa000, 0x42: 0xa000, 0x43: 0xa000, 0x44: 0xa000, 0x45: 0xa000, - 0x46: 0xa000, 0x47: 0xa000, 0x48: 0xa000, 0x49: 0xa000, 0x4a: 0xa000, 0x4b: 0xa000, - 0x4c: 0xa000, 0x4d: 0xa000, 0x4e: 0xa000, 0x4f: 0xa000, 0x50: 0xa000, - 0x52: 0xa000, 0x53: 0xa000, 0x54: 0xa000, 0x55: 0xa000, 0x56: 0xa000, 0x57: 0xa000, - 0x58: 0xa000, 0x59: 0xa000, 0x5a: 0xa000, - 0x61: 0xa000, 0x62: 0xa000, 0x63: 0xa000, - 0x64: 0xa000, 0x65: 0xa000, 0x66: 0xa000, 0x67: 0xa000, 0x68: 0xa000, 0x69: 0xa000, - 0x6a: 0xa000, 0x6b: 0xa000, 0x6c: 0xa000, 0x6d: 0xa000, 0x6e: 0xa000, 0x6f: 0xa000, - 0x70: 0xa000, 0x72: 0xa000, 0x73: 0xa000, 0x74: 0xa000, 0x75: 0xa000, - 0x76: 0xa000, 0x77: 0xa000, 0x78: 0xa000, 0x79: 0xa000, 0x7a: 0xa000, - // Block 0x2, offset 0x80 - // Block 0x3, offset 0xc0 - 0xc0: 0x2f6f, 0xc1: 0x2f74, 0xc2: 0x4688, 0xc3: 0x2f79, 0xc4: 0x4697, 0xc5: 0x469c, - 0xc6: 0xa000, 0xc7: 0x46a6, 0xc8: 0x2fe2, 0xc9: 0x2fe7, 0xca: 0x46ab, 0xcb: 0x2ffb, - 0xcc: 0x306e, 0xcd: 0x3073, 0xce: 0x3078, 0xcf: 0x46bf, 0xd1: 0x3104, - 0xd2: 0x3127, 0xd3: 0x312c, 0xd4: 0x46c9, 0xd5: 0x46ce, 0xd6: 0x46dd, - 0xd8: 0xa000, 0xd9: 0x31b3, 0xda: 0x31b8, 0xdb: 0x31bd, 0xdc: 0x470f, 0xdd: 0x3235, - 0xe0: 0x327b, 0xe1: 0x3280, 0xe2: 0x4719, 0xe3: 0x3285, - 0xe4: 0x4728, 0xe5: 0x472d, 0xe6: 0xa000, 0xe7: 0x4737, 0xe8: 0x32ee, 0xe9: 0x32f3, - 0xea: 0x473c, 0xeb: 0x3307, 0xec: 0x337f, 0xed: 0x3384, 0xee: 0x3389, 0xef: 0x4750, - 0xf1: 0x3415, 0xf2: 0x3438, 0xf3: 0x343d, 0xf4: 0x475a, 0xf5: 0x475f, - 0xf6: 0x476e, 0xf8: 0xa000, 0xf9: 0x34c9, 0xfa: 0x34ce, 0xfb: 0x34d3, - 0xfc: 0x47a0, 0xfd: 0x3550, 0xff: 0x3569, - // Block 0x4, offset 0x100 - 0x100: 0x2f7e, 0x101: 0x328a, 0x102: 0x468d, 0x103: 0x471e, 0x104: 0x2f9c, 0x105: 0x32a8, - 0x106: 0x2fb0, 0x107: 0x32bc, 0x108: 0x2fb5, 0x109: 0x32c1, 0x10a: 0x2fba, 0x10b: 0x32c6, - 0x10c: 0x2fbf, 0x10d: 0x32cb, 0x10e: 0x2fc9, 0x10f: 0x32d5, - 0x112: 0x46b0, 0x113: 0x4741, 0x114: 0x2ff1, 0x115: 0x32fd, 0x116: 0x2ff6, 0x117: 0x3302, - 0x118: 0x3014, 0x119: 0x3320, 0x11a: 0x3005, 0x11b: 0x3311, 0x11c: 0x302d, 0x11d: 0x3339, - 0x11e: 0x3037, 0x11f: 0x3343, 0x120: 0x303c, 0x121: 0x3348, 0x122: 0x3046, 0x123: 0x3352, - 0x124: 0x304b, 0x125: 0x3357, 0x128: 0x307d, 0x129: 0x338e, - 0x12a: 0x3082, 0x12b: 0x3393, 0x12c: 0x3087, 0x12d: 0x3398, 0x12e: 0x30aa, 0x12f: 0x33b6, - 0x130: 0x308c, 0x132: 0x195d, 0x133: 0x19e7, 0x134: 0x30b4, 0x135: 0x33c0, - 0x136: 0x30c8, 0x137: 0x33d9, 0x139: 0x30d2, 0x13a: 0x33e3, 0x13b: 0x30dc, - 0x13c: 0x33ed, 0x13d: 0x30d7, 0x13e: 0x33e8, 0x13f: 0x1bac, - // Block 0x5, offset 0x140 - 0x140: 0x1c34, 0x143: 0x30ff, 0x144: 0x3410, 0x145: 0x3118, - 0x146: 0x3429, 0x147: 0x310e, 0x148: 0x341f, 0x149: 0x1c5c, - 0x14c: 0x46d3, 0x14d: 0x4764, 0x14e: 0x3131, 0x14f: 0x3442, 0x150: 0x313b, 0x151: 0x344c, - 0x154: 0x3159, 0x155: 0x346a, 0x156: 0x3172, 0x157: 0x3483, - 0x158: 0x3163, 0x159: 0x3474, 0x15a: 0x46f6, 0x15b: 0x4787, 0x15c: 0x317c, 0x15d: 0x348d, - 0x15e: 0x318b, 0x15f: 0x349c, 0x160: 0x46fb, 0x161: 0x478c, 0x162: 0x31a4, 0x163: 0x34ba, - 0x164: 0x3195, 0x165: 0x34ab, 0x168: 0x4705, 0x169: 0x4796, - 0x16a: 0x470a, 0x16b: 0x479b, 0x16c: 0x31c2, 0x16d: 0x34d8, 0x16e: 0x31cc, 0x16f: 0x34e2, - 0x170: 0x31d1, 0x171: 0x34e7, 0x172: 0x31ef, 0x173: 0x3505, 0x174: 0x3212, 0x175: 0x3528, - 0x176: 0x323a, 0x177: 0x3555, 0x178: 0x324e, 0x179: 0x325d, 0x17a: 0x357d, 0x17b: 0x3267, - 0x17c: 0x3587, 0x17d: 0x326c, 0x17e: 0x358c, 0x17f: 0x00a7, - // Block 0x6, offset 0x180 - 0x184: 0x2dee, 0x185: 0x2df4, - 0x186: 0x2dfa, 0x187: 0x1972, 0x188: 0x1975, 0x189: 0x1a08, 0x18a: 0x1987, 0x18b: 0x198a, - 0x18c: 0x1a3e, 0x18d: 0x2f88, 0x18e: 0x3294, 0x18f: 0x3096, 0x190: 0x33a2, 0x191: 0x3140, - 0x192: 0x3451, 0x193: 0x31d6, 0x194: 0x34ec, 0x195: 0x39cf, 0x196: 0x3b5e, 0x197: 0x39c8, - 0x198: 0x3b57, 0x199: 0x39d6, 0x19a: 0x3b65, 0x19b: 0x39c1, 0x19c: 0x3b50, - 0x19e: 0x38b0, 0x19f: 0x3a3f, 0x1a0: 0x38a9, 0x1a1: 0x3a38, 0x1a2: 0x35b3, 0x1a3: 0x35c5, - 0x1a6: 0x3041, 0x1a7: 0x334d, 0x1a8: 0x30be, 0x1a9: 0x33cf, - 0x1aa: 0x46ec, 0x1ab: 0x477d, 0x1ac: 0x3990, 0x1ad: 0x3b1f, 0x1ae: 0x35d7, 0x1af: 0x35dd, - 0x1b0: 0x33c5, 0x1b1: 0x1942, 0x1b2: 0x1945, 0x1b3: 0x19cf, 0x1b4: 0x3028, 0x1b5: 0x3334, - 0x1b8: 0x30fa, 0x1b9: 0x340b, 0x1ba: 0x38b7, 0x1bb: 0x3a46, - 0x1bc: 0x35ad, 0x1bd: 0x35bf, 0x1be: 0x35b9, 0x1bf: 0x35cb, - // Block 0x7, offset 0x1c0 - 0x1c0: 0x2f8d, 0x1c1: 0x3299, 0x1c2: 0x2f92, 0x1c3: 0x329e, 0x1c4: 0x300a, 0x1c5: 0x3316, - 0x1c6: 0x300f, 0x1c7: 0x331b, 0x1c8: 0x309b, 0x1c9: 0x33a7, 0x1ca: 0x30a0, 0x1cb: 0x33ac, - 0x1cc: 0x3145, 0x1cd: 0x3456, 0x1ce: 0x314a, 0x1cf: 0x345b, 0x1d0: 0x3168, 0x1d1: 0x3479, - 0x1d2: 0x316d, 0x1d3: 0x347e, 0x1d4: 0x31db, 0x1d5: 0x34f1, 0x1d6: 0x31e0, 0x1d7: 0x34f6, - 0x1d8: 0x3186, 0x1d9: 0x3497, 0x1da: 0x319f, 0x1db: 0x34b5, - 0x1de: 0x305a, 0x1df: 0x3366, - 0x1e6: 0x4692, 0x1e7: 0x4723, 0x1e8: 0x46ba, 0x1e9: 0x474b, - 0x1ea: 0x395f, 0x1eb: 0x3aee, 0x1ec: 0x393c, 0x1ed: 0x3acb, 0x1ee: 0x46d8, 0x1ef: 0x4769, - 0x1f0: 0x3958, 0x1f1: 0x3ae7, 0x1f2: 0x3244, 0x1f3: 0x355f, - // Block 0x8, offset 0x200 - 0x200: 0x9932, 0x201: 0x9932, 0x202: 0x9932, 0x203: 0x9932, 0x204: 0x9932, 0x205: 0x8132, - 0x206: 0x9932, 0x207: 0x9932, 0x208: 0x9932, 0x209: 0x9932, 0x20a: 0x9932, 0x20b: 0x9932, - 0x20c: 0x9932, 0x20d: 0x8132, 0x20e: 0x8132, 0x20f: 0x9932, 0x210: 0x8132, 0x211: 0x9932, - 0x212: 0x8132, 0x213: 0x9932, 0x214: 0x9932, 0x215: 0x8133, 0x216: 0x812d, 0x217: 0x812d, - 0x218: 0x812d, 0x219: 0x812d, 0x21a: 0x8133, 0x21b: 0x992b, 0x21c: 0x812d, 0x21d: 0x812d, - 0x21e: 0x812d, 0x21f: 0x812d, 0x220: 0x812d, 0x221: 0x8129, 0x222: 0x8129, 0x223: 0x992d, - 0x224: 0x992d, 0x225: 0x992d, 0x226: 0x992d, 0x227: 0x9929, 0x228: 0x9929, 0x229: 0x812d, - 0x22a: 0x812d, 0x22b: 0x812d, 0x22c: 0x812d, 0x22d: 0x992d, 0x22e: 0x992d, 0x22f: 0x812d, - 0x230: 0x992d, 0x231: 0x992d, 0x232: 0x812d, 0x233: 0x812d, 0x234: 0x8101, 0x235: 0x8101, - 0x236: 0x8101, 0x237: 0x8101, 0x238: 0x9901, 0x239: 0x812d, 0x23a: 0x812d, 0x23b: 0x812d, - 0x23c: 0x812d, 0x23d: 0x8132, 0x23e: 0x8132, 0x23f: 0x8132, - // Block 0x9, offset 0x240 - 0x240: 0x49ae, 0x241: 0x49b3, 0x242: 0x9932, 0x243: 0x49b8, 0x244: 0x4a71, 0x245: 0x9936, - 0x246: 0x8132, 0x247: 0x812d, 0x248: 0x812d, 0x249: 0x812d, 0x24a: 0x8132, 0x24b: 0x8132, - 0x24c: 0x8132, 0x24d: 0x812d, 0x24e: 0x812d, 0x250: 0x8132, 0x251: 0x8132, - 0x252: 0x8132, 0x253: 0x812d, 0x254: 0x812d, 0x255: 0x812d, 0x256: 0x812d, 0x257: 0x8132, - 0x258: 0x8133, 0x259: 0x812d, 0x25a: 0x812d, 0x25b: 0x8132, 0x25c: 0x8134, 0x25d: 0x8135, - 0x25e: 0x8135, 0x25f: 0x8134, 0x260: 0x8135, 0x261: 0x8135, 0x262: 0x8134, 0x263: 0x8132, - 0x264: 0x8132, 0x265: 0x8132, 0x266: 0x8132, 0x267: 0x8132, 0x268: 0x8132, 0x269: 0x8132, - 0x26a: 0x8132, 0x26b: 0x8132, 0x26c: 0x8132, 0x26d: 0x8132, 0x26e: 0x8132, 0x26f: 0x8132, - 0x274: 0x0170, - 0x27a: 0x42a5, - 0x27e: 0x0037, - // Block 0xa, offset 0x280 - 0x284: 0x425a, 0x285: 0x447b, - 0x286: 0x35e9, 0x287: 0x00ce, 0x288: 0x3607, 0x289: 0x3613, 0x28a: 0x3625, - 0x28c: 0x3643, 0x28e: 0x3655, 0x28f: 0x3673, 0x290: 0x3e08, 0x291: 0xa000, - 0x295: 0xa000, 0x297: 0xa000, - 0x299: 0xa000, - 0x29f: 0xa000, 0x2a1: 0xa000, - 0x2a5: 0xa000, 0x2a9: 0xa000, - 0x2aa: 0x3637, 0x2ab: 0x3667, 0x2ac: 0x47fe, 0x2ad: 0x3697, 0x2ae: 0x4828, 0x2af: 0x36a9, - 0x2b0: 0x3e70, 0x2b1: 0xa000, 0x2b5: 0xa000, - 0x2b7: 0xa000, 0x2b9: 0xa000, - 0x2bf: 0xa000, - // Block 0xb, offset 0x2c0 - 0x2c1: 0xa000, 0x2c5: 0xa000, - 0x2c9: 0xa000, 0x2ca: 0x4840, 0x2cb: 0x485e, - 0x2cc: 0x36c7, 0x2cd: 0x36df, 0x2ce: 0x4876, 0x2d0: 0x01be, 0x2d1: 0x01d0, - 0x2d2: 0x01ac, 0x2d3: 0x430c, 0x2d4: 0x4312, 0x2d5: 0x01fa, 0x2d6: 0x01e8, - 0x2f0: 0x01d6, 0x2f1: 0x01eb, 0x2f2: 0x01ee, 0x2f4: 0x0188, 0x2f5: 0x01c7, - 0x2f9: 0x01a6, - // Block 0xc, offset 0x300 - 0x300: 0x3721, 0x301: 0x372d, 0x303: 0x371b, - 0x306: 0xa000, 0x307: 0x3709, - 0x30c: 0x375d, 0x30d: 0x3745, 0x30e: 0x376f, 0x310: 0xa000, - 0x313: 0xa000, 0x315: 0xa000, 0x316: 0xa000, 0x317: 0xa000, - 0x318: 0xa000, 0x319: 0x3751, 0x31a: 0xa000, - 0x31e: 0xa000, 0x323: 0xa000, - 0x327: 0xa000, - 0x32b: 0xa000, 0x32d: 0xa000, - 0x330: 0xa000, 0x333: 0xa000, 0x335: 0xa000, - 0x336: 0xa000, 0x337: 0xa000, 0x338: 0xa000, 0x339: 0x37d5, 0x33a: 0xa000, - 0x33e: 0xa000, - // Block 0xd, offset 0x340 - 0x341: 0x3733, 0x342: 0x37b7, - 0x350: 0x370f, 0x351: 0x3793, - 0x352: 0x3715, 0x353: 0x3799, 0x356: 0x3727, 0x357: 0x37ab, - 0x358: 0xa000, 0x359: 0xa000, 0x35a: 0x3829, 0x35b: 0x382f, 0x35c: 0x3739, 0x35d: 0x37bd, - 0x35e: 0x373f, 0x35f: 0x37c3, 0x362: 0x374b, 0x363: 0x37cf, - 0x364: 0x3757, 0x365: 0x37db, 0x366: 0x3763, 0x367: 0x37e7, 0x368: 0xa000, 0x369: 0xa000, - 0x36a: 0x3835, 0x36b: 0x383b, 0x36c: 0x378d, 0x36d: 0x3811, 0x36e: 0x3769, 0x36f: 0x37ed, - 0x370: 0x3775, 0x371: 0x37f9, 0x372: 0x377b, 0x373: 0x37ff, 0x374: 0x3781, 0x375: 0x3805, - 0x378: 0x3787, 0x379: 0x380b, - // Block 0xe, offset 0x380 - 0x387: 0x1d61, - 0x391: 0x812d, - 0x392: 0x8132, 0x393: 0x8132, 0x394: 0x8132, 0x395: 0x8132, 0x396: 0x812d, 0x397: 0x8132, - 0x398: 0x8132, 0x399: 0x8132, 0x39a: 0x812e, 0x39b: 0x812d, 0x39c: 0x8132, 0x39d: 0x8132, - 0x39e: 0x8132, 0x39f: 0x8132, 0x3a0: 0x8132, 0x3a1: 0x8132, 0x3a2: 0x812d, 0x3a3: 0x812d, - 0x3a4: 0x812d, 0x3a5: 0x812d, 0x3a6: 0x812d, 0x3a7: 0x812d, 0x3a8: 0x8132, 0x3a9: 0x8132, - 0x3aa: 0x812d, 0x3ab: 0x8132, 0x3ac: 0x8132, 0x3ad: 0x812e, 0x3ae: 0x8131, 0x3af: 0x8132, - 0x3b0: 0x8105, 0x3b1: 0x8106, 0x3b2: 0x8107, 0x3b3: 0x8108, 0x3b4: 0x8109, 0x3b5: 0x810a, - 0x3b6: 0x810b, 0x3b7: 0x810c, 0x3b8: 0x810d, 0x3b9: 0x810e, 0x3ba: 0x810e, 0x3bb: 0x810f, - 0x3bc: 0x8110, 0x3bd: 0x8111, 0x3bf: 0x8112, - // Block 0xf, offset 0x3c0 - 0x3c8: 0xa000, 0x3ca: 0xa000, 0x3cb: 0x8116, - 0x3cc: 0x8117, 0x3cd: 0x8118, 0x3ce: 0x8119, 0x3cf: 0x811a, 0x3d0: 0x811b, 0x3d1: 0x811c, - 0x3d2: 0x811d, 0x3d3: 0x9932, 0x3d4: 0x9932, 0x3d5: 0x992d, 0x3d6: 0x812d, 0x3d7: 0x8132, - 0x3d8: 0x8132, 0x3d9: 0x8132, 0x3da: 0x8132, 0x3db: 0x8132, 0x3dc: 0x812d, 0x3dd: 0x8132, - 0x3de: 0x8132, 0x3df: 0x812d, - 0x3f0: 0x811e, 0x3f5: 0x1d84, - 0x3f6: 0x2013, 0x3f7: 0x204f, 0x3f8: 0x204a, - // Block 0x10, offset 0x400 - 0x413: 0x812d, 0x414: 0x8132, 0x415: 0x8132, 0x416: 0x8132, 0x417: 0x8132, - 0x418: 0x8132, 0x419: 0x8132, 0x41a: 0x8132, 0x41b: 0x8132, 0x41c: 0x8132, 0x41d: 0x8132, - 0x41e: 0x8132, 0x41f: 0x8132, 0x420: 0x8132, 0x421: 0x8132, 0x423: 0x812d, - 0x424: 0x8132, 0x425: 0x8132, 0x426: 0x812d, 0x427: 0x8132, 0x428: 0x8132, 0x429: 0x812d, - 0x42a: 0x8132, 0x42b: 0x8132, 0x42c: 0x8132, 0x42d: 0x812d, 0x42e: 0x812d, 0x42f: 0x812d, - 0x430: 0x8116, 0x431: 0x8117, 0x432: 0x8118, 0x433: 0x8132, 0x434: 0x8132, 0x435: 0x8132, - 0x436: 0x812d, 0x437: 0x8132, 0x438: 0x8132, 0x439: 0x812d, 0x43a: 0x812d, 0x43b: 0x8132, - 0x43c: 0x8132, 0x43d: 0x8132, 0x43e: 0x8132, 0x43f: 0x8132, - // Block 0x11, offset 0x440 - 0x445: 0xa000, - 0x446: 0x2d26, 0x447: 0xa000, 0x448: 0x2d2e, 0x449: 0xa000, 0x44a: 0x2d36, 0x44b: 0xa000, - 0x44c: 0x2d3e, 0x44d: 0xa000, 0x44e: 0x2d46, 0x451: 0xa000, - 0x452: 0x2d4e, - 0x474: 0x8102, 0x475: 0x9900, - 0x47a: 0xa000, 0x47b: 0x2d56, - 0x47c: 0xa000, 0x47d: 0x2d5e, 0x47e: 0xa000, 0x47f: 0xa000, - // Block 0x12, offset 0x480 - 0x480: 0x0069, 0x481: 0x006b, 0x482: 0x006f, 0x483: 0x0083, 0x484: 0x00f5, 0x485: 0x00f8, - 0x486: 0x0413, 0x487: 0x0085, 0x488: 0x0089, 0x489: 0x008b, 0x48a: 0x0104, 0x48b: 0x0107, - 0x48c: 0x010a, 0x48d: 0x008f, 0x48f: 0x0097, 0x490: 0x009b, 0x491: 0x00e0, - 0x492: 0x009f, 0x493: 0x00fe, 0x494: 0x0417, 0x495: 0x041b, 0x496: 0x00a1, 0x497: 0x00a9, - 0x498: 0x00ab, 0x499: 0x0423, 0x49a: 0x012b, 0x49b: 0x00ad, 0x49c: 0x0427, 0x49d: 0x01be, - 0x49e: 0x01c1, 0x49f: 0x01c4, 0x4a0: 0x01fa, 0x4a1: 0x01fd, 0x4a2: 0x0093, 0x4a3: 0x00a5, - 0x4a4: 0x00ab, 0x4a5: 0x00ad, 0x4a6: 0x01be, 0x4a7: 0x01c1, 0x4a8: 0x01eb, 0x4a9: 0x01fa, - 0x4aa: 0x01fd, - 0x4b8: 0x020c, - // Block 0x13, offset 0x4c0 - 0x4db: 0x00fb, 0x4dc: 0x0087, 0x4dd: 0x0101, - 0x4de: 0x00d4, 0x4df: 0x010a, 0x4e0: 0x008d, 0x4e1: 0x010d, 0x4e2: 0x0110, 0x4e3: 0x0116, - 0x4e4: 0x011c, 0x4e5: 0x011f, 0x4e6: 0x0122, 0x4e7: 0x042b, 0x4e8: 0x016a, 0x4e9: 0x0128, - 0x4ea: 0x042f, 0x4eb: 0x016d, 0x4ec: 0x0131, 0x4ed: 0x012e, 0x4ee: 0x0134, 0x4ef: 0x0137, - 0x4f0: 0x013a, 0x4f1: 0x013d, 0x4f2: 0x0140, 0x4f3: 0x014c, 0x4f4: 0x014f, 0x4f5: 0x00ec, - 0x4f6: 0x0152, 0x4f7: 0x0155, 0x4f8: 0x041f, 0x4f9: 0x0158, 0x4fa: 0x015b, 0x4fb: 0x00b5, - 0x4fc: 0x015e, 0x4fd: 0x0161, 0x4fe: 0x0164, 0x4ff: 0x01d0, - // Block 0x14, offset 0x500 - 0x500: 0x8132, 0x501: 0x8132, 0x502: 0x812d, 0x503: 0x8132, 0x504: 0x8132, 0x505: 0x8132, - 0x506: 0x8132, 0x507: 0x8132, 0x508: 0x8132, 0x509: 0x8132, 0x50a: 0x812d, 0x50b: 0x8132, - 0x50c: 0x8132, 0x50d: 0x8135, 0x50e: 0x812a, 0x50f: 0x812d, 0x510: 0x8129, 0x511: 0x8132, - 0x512: 0x8132, 0x513: 0x8132, 0x514: 0x8132, 0x515: 0x8132, 0x516: 0x8132, 0x517: 0x8132, - 0x518: 0x8132, 0x519: 0x8132, 0x51a: 0x8132, 0x51b: 0x8132, 0x51c: 0x8132, 0x51d: 0x8132, - 0x51e: 0x8132, 0x51f: 0x8132, 0x520: 0x8132, 0x521: 0x8132, 0x522: 0x8132, 0x523: 0x8132, - 0x524: 0x8132, 0x525: 0x8132, 0x526: 0x8132, 0x527: 0x8132, 0x528: 0x8132, 0x529: 0x8132, - 0x52a: 0x8132, 0x52b: 0x8132, 0x52c: 0x8132, 0x52d: 0x8132, 0x52e: 0x8132, 0x52f: 0x8132, - 0x530: 0x8132, 0x531: 0x8132, 0x532: 0x8132, 0x533: 0x8132, 0x534: 0x8132, 0x535: 0x8132, - 0x536: 0x8133, 0x537: 0x8131, 0x538: 0x8131, 0x539: 0x812d, 0x53b: 0x8132, - 0x53c: 0x8134, 0x53d: 0x812d, 0x53e: 0x8132, 0x53f: 0x812d, - // Block 0x15, offset 0x540 - 0x540: 0x2f97, 0x541: 0x32a3, 0x542: 0x2fa1, 0x543: 0x32ad, 0x544: 0x2fa6, 0x545: 0x32b2, - 0x546: 0x2fab, 0x547: 0x32b7, 0x548: 0x38cc, 0x549: 0x3a5b, 0x54a: 0x2fc4, 0x54b: 0x32d0, - 0x54c: 0x2fce, 0x54d: 0x32da, 0x54e: 0x2fdd, 0x54f: 0x32e9, 0x550: 0x2fd3, 0x551: 0x32df, - 0x552: 0x2fd8, 0x553: 0x32e4, 0x554: 0x38ef, 0x555: 0x3a7e, 0x556: 0x38f6, 0x557: 0x3a85, - 0x558: 0x3019, 0x559: 0x3325, 0x55a: 0x301e, 0x55b: 0x332a, 0x55c: 0x3904, 0x55d: 0x3a93, - 0x55e: 0x3023, 0x55f: 0x332f, 0x560: 0x3032, 0x561: 0x333e, 0x562: 0x3050, 0x563: 0x335c, - 0x564: 0x305f, 0x565: 0x336b, 0x566: 0x3055, 0x567: 0x3361, 0x568: 0x3064, 0x569: 0x3370, - 0x56a: 0x3069, 0x56b: 0x3375, 0x56c: 0x30af, 0x56d: 0x33bb, 0x56e: 0x390b, 0x56f: 0x3a9a, - 0x570: 0x30b9, 0x571: 0x33ca, 0x572: 0x30c3, 0x573: 0x33d4, 0x574: 0x30cd, 0x575: 0x33de, - 0x576: 0x46c4, 0x577: 0x4755, 0x578: 0x3912, 0x579: 0x3aa1, 0x57a: 0x30e6, 0x57b: 0x33f7, - 0x57c: 0x30e1, 0x57d: 0x33f2, 0x57e: 0x30eb, 0x57f: 0x33fc, - // Block 0x16, offset 0x580 - 0x580: 0x30f0, 0x581: 0x3401, 0x582: 0x30f5, 0x583: 0x3406, 0x584: 0x3109, 0x585: 0x341a, - 0x586: 0x3113, 0x587: 0x3424, 0x588: 0x3122, 0x589: 0x3433, 0x58a: 0x311d, 0x58b: 0x342e, - 0x58c: 0x3935, 0x58d: 0x3ac4, 0x58e: 0x3943, 0x58f: 0x3ad2, 0x590: 0x394a, 0x591: 0x3ad9, - 0x592: 0x3951, 0x593: 0x3ae0, 0x594: 0x314f, 0x595: 0x3460, 0x596: 0x3154, 0x597: 0x3465, - 0x598: 0x315e, 0x599: 0x346f, 0x59a: 0x46f1, 0x59b: 0x4782, 0x59c: 0x3997, 0x59d: 0x3b26, - 0x59e: 0x3177, 0x59f: 0x3488, 0x5a0: 0x3181, 0x5a1: 0x3492, 0x5a2: 0x4700, 0x5a3: 0x4791, - 0x5a4: 0x399e, 0x5a5: 0x3b2d, 0x5a6: 0x39a5, 0x5a7: 0x3b34, 0x5a8: 0x39ac, 0x5a9: 0x3b3b, - 0x5aa: 0x3190, 0x5ab: 0x34a1, 0x5ac: 0x319a, 0x5ad: 0x34b0, 0x5ae: 0x31ae, 0x5af: 0x34c4, - 0x5b0: 0x31a9, 0x5b1: 0x34bf, 0x5b2: 0x31ea, 0x5b3: 0x3500, 0x5b4: 0x31f9, 0x5b5: 0x350f, - 0x5b6: 0x31f4, 0x5b7: 0x350a, 0x5b8: 0x39b3, 0x5b9: 0x3b42, 0x5ba: 0x39ba, 0x5bb: 0x3b49, - 0x5bc: 0x31fe, 0x5bd: 0x3514, 0x5be: 0x3203, 0x5bf: 0x3519, - // Block 0x17, offset 0x5c0 - 0x5c0: 0x3208, 0x5c1: 0x351e, 0x5c2: 0x320d, 0x5c3: 0x3523, 0x5c4: 0x321c, 0x5c5: 0x3532, - 0x5c6: 0x3217, 0x5c7: 0x352d, 0x5c8: 0x3221, 0x5c9: 0x353c, 0x5ca: 0x3226, 0x5cb: 0x3541, - 0x5cc: 0x322b, 0x5cd: 0x3546, 0x5ce: 0x3249, 0x5cf: 0x3564, 0x5d0: 0x3262, 0x5d1: 0x3582, - 0x5d2: 0x3271, 0x5d3: 0x3591, 0x5d4: 0x3276, 0x5d5: 0x3596, 0x5d6: 0x337a, 0x5d7: 0x34a6, - 0x5d8: 0x3537, 0x5d9: 0x3573, 0x5da: 0x1be0, 0x5db: 0x42d7, - 0x5e0: 0x46a1, 0x5e1: 0x4732, 0x5e2: 0x2f83, 0x5e3: 0x328f, - 0x5e4: 0x3878, 0x5e5: 0x3a07, 0x5e6: 0x3871, 0x5e7: 0x3a00, 0x5e8: 0x3886, 0x5e9: 0x3a15, - 0x5ea: 0x387f, 0x5eb: 0x3a0e, 0x5ec: 0x38be, 0x5ed: 0x3a4d, 0x5ee: 0x3894, 0x5ef: 0x3a23, - 0x5f0: 0x388d, 0x5f1: 0x3a1c, 0x5f2: 0x38a2, 0x5f3: 0x3a31, 0x5f4: 0x389b, 0x5f5: 0x3a2a, - 0x5f6: 0x38c5, 0x5f7: 0x3a54, 0x5f8: 0x46b5, 0x5f9: 0x4746, 0x5fa: 0x3000, 0x5fb: 0x330c, - 0x5fc: 0x2fec, 0x5fd: 0x32f8, 0x5fe: 0x38da, 0x5ff: 0x3a69, - // Block 0x18, offset 0x600 - 0x600: 0x38d3, 0x601: 0x3a62, 0x602: 0x38e8, 0x603: 0x3a77, 0x604: 0x38e1, 0x605: 0x3a70, - 0x606: 0x38fd, 0x607: 0x3a8c, 0x608: 0x3091, 0x609: 0x339d, 0x60a: 0x30a5, 0x60b: 0x33b1, - 0x60c: 0x46e7, 0x60d: 0x4778, 0x60e: 0x3136, 0x60f: 0x3447, 0x610: 0x3920, 0x611: 0x3aaf, - 0x612: 0x3919, 0x613: 0x3aa8, 0x614: 0x392e, 0x615: 0x3abd, 0x616: 0x3927, 0x617: 0x3ab6, - 0x618: 0x3989, 0x619: 0x3b18, 0x61a: 0x396d, 0x61b: 0x3afc, 0x61c: 0x3966, 0x61d: 0x3af5, - 0x61e: 0x397b, 0x61f: 0x3b0a, 0x620: 0x3974, 0x621: 0x3b03, 0x622: 0x3982, 0x623: 0x3b11, - 0x624: 0x31e5, 0x625: 0x34fb, 0x626: 0x31c7, 0x627: 0x34dd, 0x628: 0x39e4, 0x629: 0x3b73, - 0x62a: 0x39dd, 0x62b: 0x3b6c, 0x62c: 0x39f2, 0x62d: 0x3b81, 0x62e: 0x39eb, 0x62f: 0x3b7a, - 0x630: 0x39f9, 0x631: 0x3b88, 0x632: 0x3230, 0x633: 0x354b, 0x634: 0x3258, 0x635: 0x3578, - 0x636: 0x3253, 0x637: 0x356e, 0x638: 0x323f, 0x639: 0x355a, - // Block 0x19, offset 0x640 - 0x640: 0x4804, 0x641: 0x480a, 0x642: 0x491e, 0x643: 0x4936, 0x644: 0x4926, 0x645: 0x493e, - 0x646: 0x492e, 0x647: 0x4946, 0x648: 0x47aa, 0x649: 0x47b0, 0x64a: 0x488e, 0x64b: 0x48a6, - 0x64c: 0x4896, 0x64d: 0x48ae, 0x64e: 0x489e, 0x64f: 0x48b6, 0x650: 0x4816, 0x651: 0x481c, - 0x652: 0x3db8, 0x653: 0x3dc8, 0x654: 0x3dc0, 0x655: 0x3dd0, - 0x658: 0x47b6, 0x659: 0x47bc, 0x65a: 0x3ce8, 0x65b: 0x3cf8, 0x65c: 0x3cf0, 0x65d: 0x3d00, - 0x660: 0x482e, 0x661: 0x4834, 0x662: 0x494e, 0x663: 0x4966, - 0x664: 0x4956, 0x665: 0x496e, 0x666: 0x495e, 0x667: 0x4976, 0x668: 0x47c2, 0x669: 0x47c8, - 0x66a: 0x48be, 0x66b: 0x48d6, 0x66c: 0x48c6, 0x66d: 0x48de, 0x66e: 0x48ce, 0x66f: 0x48e6, - 0x670: 0x4846, 0x671: 0x484c, 0x672: 0x3e18, 0x673: 0x3e30, 0x674: 0x3e20, 0x675: 0x3e38, - 0x676: 0x3e28, 0x677: 0x3e40, 0x678: 0x47ce, 0x679: 0x47d4, 0x67a: 0x3d18, 0x67b: 0x3d30, - 0x67c: 0x3d20, 0x67d: 0x3d38, 0x67e: 0x3d28, 0x67f: 0x3d40, - // Block 0x1a, offset 0x680 - 0x680: 0x4852, 0x681: 0x4858, 0x682: 0x3e48, 0x683: 0x3e58, 0x684: 0x3e50, 0x685: 0x3e60, - 0x688: 0x47da, 0x689: 0x47e0, 0x68a: 0x3d48, 0x68b: 0x3d58, - 0x68c: 0x3d50, 0x68d: 0x3d60, 0x690: 0x4864, 0x691: 0x486a, - 0x692: 0x3e80, 0x693: 0x3e98, 0x694: 0x3e88, 0x695: 0x3ea0, 0x696: 0x3e90, 0x697: 0x3ea8, - 0x699: 0x47e6, 0x69b: 0x3d68, 0x69d: 0x3d70, - 0x69f: 0x3d78, 0x6a0: 0x487c, 0x6a1: 0x4882, 0x6a2: 0x497e, 0x6a3: 0x4996, - 0x6a4: 0x4986, 0x6a5: 0x499e, 0x6a6: 0x498e, 0x6a7: 0x49a6, 0x6a8: 0x47ec, 0x6a9: 0x47f2, - 0x6aa: 0x48ee, 0x6ab: 0x4906, 0x6ac: 0x48f6, 0x6ad: 0x490e, 0x6ae: 0x48fe, 0x6af: 0x4916, - 0x6b0: 0x47f8, 0x6b1: 0x431e, 0x6b2: 0x3691, 0x6b3: 0x4324, 0x6b4: 0x4822, 0x6b5: 0x432a, - 0x6b6: 0x36a3, 0x6b7: 0x4330, 0x6b8: 0x36c1, 0x6b9: 0x4336, 0x6ba: 0x36d9, 0x6bb: 0x433c, - 0x6bc: 0x4870, 0x6bd: 0x4342, - // Block 0x1b, offset 0x6c0 - 0x6c0: 0x3da0, 0x6c1: 0x3da8, 0x6c2: 0x4184, 0x6c3: 0x41a2, 0x6c4: 0x418e, 0x6c5: 0x41ac, - 0x6c6: 0x4198, 0x6c7: 0x41b6, 0x6c8: 0x3cd8, 0x6c9: 0x3ce0, 0x6ca: 0x40d0, 0x6cb: 0x40ee, - 0x6cc: 0x40da, 0x6cd: 0x40f8, 0x6ce: 0x40e4, 0x6cf: 0x4102, 0x6d0: 0x3de8, 0x6d1: 0x3df0, - 0x6d2: 0x41c0, 0x6d3: 0x41de, 0x6d4: 0x41ca, 0x6d5: 0x41e8, 0x6d6: 0x41d4, 0x6d7: 0x41f2, - 0x6d8: 0x3d08, 0x6d9: 0x3d10, 0x6da: 0x410c, 0x6db: 0x412a, 0x6dc: 0x4116, 0x6dd: 0x4134, - 0x6de: 0x4120, 0x6df: 0x413e, 0x6e0: 0x3ec0, 0x6e1: 0x3ec8, 0x6e2: 0x41fc, 0x6e3: 0x421a, - 0x6e4: 0x4206, 0x6e5: 0x4224, 0x6e6: 0x4210, 0x6e7: 0x422e, 0x6e8: 0x3d80, 0x6e9: 0x3d88, - 0x6ea: 0x4148, 0x6eb: 0x4166, 0x6ec: 0x4152, 0x6ed: 0x4170, 0x6ee: 0x415c, 0x6ef: 0x417a, - 0x6f0: 0x3685, 0x6f1: 0x367f, 0x6f2: 0x3d90, 0x6f3: 0x368b, 0x6f4: 0x3d98, - 0x6f6: 0x4810, 0x6f7: 0x3db0, 0x6f8: 0x35f5, 0x6f9: 0x35ef, 0x6fa: 0x35e3, 0x6fb: 0x42ee, - 0x6fc: 0x35fb, 0x6fd: 0x4287, 0x6fe: 0x01d3, 0x6ff: 0x4287, - // Block 0x1c, offset 0x700 - 0x700: 0x42a0, 0x701: 0x4482, 0x702: 0x3dd8, 0x703: 0x369d, 0x704: 0x3de0, - 0x706: 0x483a, 0x707: 0x3df8, 0x708: 0x3601, 0x709: 0x42f4, 0x70a: 0x360d, 0x70b: 0x42fa, - 0x70c: 0x3619, 0x70d: 0x4489, 0x70e: 0x4490, 0x70f: 0x4497, 0x710: 0x36b5, 0x711: 0x36af, - 0x712: 0x3e00, 0x713: 0x44e4, 0x716: 0x36bb, 0x717: 0x3e10, - 0x718: 0x3631, 0x719: 0x362b, 0x71a: 0x361f, 0x71b: 0x4300, 0x71d: 0x449e, - 0x71e: 0x44a5, 0x71f: 0x44ac, 0x720: 0x36eb, 0x721: 0x36e5, 0x722: 0x3e68, 0x723: 0x44ec, - 0x724: 0x36cd, 0x725: 0x36d3, 0x726: 0x36f1, 0x727: 0x3e78, 0x728: 0x3661, 0x729: 0x365b, - 0x72a: 0x364f, 0x72b: 0x430c, 0x72c: 0x3649, 0x72d: 0x4474, 0x72e: 0x447b, 0x72f: 0x0081, - 0x732: 0x3eb0, 0x733: 0x36f7, 0x734: 0x3eb8, - 0x736: 0x4888, 0x737: 0x3ed0, 0x738: 0x363d, 0x739: 0x4306, 0x73a: 0x366d, 0x73b: 0x4318, - 0x73c: 0x3679, 0x73d: 0x425a, 0x73e: 0x428c, - // Block 0x1d, offset 0x740 - 0x740: 0x1bd8, 0x741: 0x1bdc, 0x742: 0x0047, 0x743: 0x1c54, 0x745: 0x1be8, - 0x746: 0x1bec, 0x747: 0x00e9, 0x749: 0x1c58, 0x74a: 0x008f, 0x74b: 0x0051, - 0x74c: 0x0051, 0x74d: 0x0051, 0x74e: 0x0091, 0x74f: 0x00da, 0x750: 0x0053, 0x751: 0x0053, - 0x752: 0x0059, 0x753: 0x0099, 0x755: 0x005d, 0x756: 0x198d, - 0x759: 0x0061, 0x75a: 0x0063, 0x75b: 0x0065, 0x75c: 0x0065, 0x75d: 0x0065, - 0x760: 0x199f, 0x761: 0x1bc8, 0x762: 0x19a8, - 0x764: 0x0075, 0x766: 0x01b8, 0x768: 0x0075, - 0x76a: 0x0057, 0x76b: 0x42d2, 0x76c: 0x0045, 0x76d: 0x0047, 0x76f: 0x008b, - 0x770: 0x004b, 0x771: 0x004d, 0x773: 0x005b, 0x774: 0x009f, 0x775: 0x0215, - 0x776: 0x0218, 0x777: 0x021b, 0x778: 0x021e, 0x779: 0x0093, 0x77b: 0x1b98, - 0x77c: 0x01e8, 0x77d: 0x01c1, 0x77e: 0x0179, 0x77f: 0x01a0, - // Block 0x1e, offset 0x780 - 0x780: 0x0463, 0x785: 0x0049, - 0x786: 0x0089, 0x787: 0x008b, 0x788: 0x0093, 0x789: 0x0095, - 0x790: 0x222e, 0x791: 0x223a, - 0x792: 0x22ee, 0x793: 0x2216, 0x794: 0x229a, 0x795: 0x2222, 0x796: 0x22a0, 0x797: 0x22b8, - 0x798: 0x22c4, 0x799: 0x2228, 0x79a: 0x22ca, 0x79b: 0x2234, 0x79c: 0x22be, 0x79d: 0x22d0, - 0x79e: 0x22d6, 0x79f: 0x1cbc, 0x7a0: 0x0053, 0x7a1: 0x195a, 0x7a2: 0x1ba4, 0x7a3: 0x1963, - 0x7a4: 0x006d, 0x7a5: 0x19ab, 0x7a6: 0x1bd0, 0x7a7: 0x1d48, 0x7a8: 0x1966, 0x7a9: 0x0071, - 0x7aa: 0x19b7, 0x7ab: 0x1bd4, 0x7ac: 0x0059, 0x7ad: 0x0047, 0x7ae: 0x0049, 0x7af: 0x005b, - 0x7b0: 0x0093, 0x7b1: 0x19e4, 0x7b2: 0x1c18, 0x7b3: 0x19ed, 0x7b4: 0x00ad, 0x7b5: 0x1a62, - 0x7b6: 0x1c4c, 0x7b7: 0x1d5c, 0x7b8: 0x19f0, 0x7b9: 0x00b1, 0x7ba: 0x1a65, 0x7bb: 0x1c50, - 0x7bc: 0x0099, 0x7bd: 0x0087, 0x7be: 0x0089, 0x7bf: 0x009b, - // Block 0x1f, offset 0x7c0 - 0x7c1: 0x3c06, 0x7c3: 0xa000, 0x7c4: 0x3c0d, 0x7c5: 0xa000, - 0x7c7: 0x3c14, 0x7c8: 0xa000, 0x7c9: 0x3c1b, - 0x7cd: 0xa000, - 0x7e0: 0x2f65, 0x7e1: 0xa000, 0x7e2: 0x3c29, - 0x7e4: 0xa000, 0x7e5: 0xa000, - 0x7ed: 0x3c22, 0x7ee: 0x2f60, 0x7ef: 0x2f6a, - 0x7f0: 0x3c30, 0x7f1: 0x3c37, 0x7f2: 0xa000, 0x7f3: 0xa000, 0x7f4: 0x3c3e, 0x7f5: 0x3c45, - 0x7f6: 0xa000, 0x7f7: 0xa000, 0x7f8: 0x3c4c, 0x7f9: 0x3c53, 0x7fa: 0xa000, 0x7fb: 0xa000, - 0x7fc: 0xa000, 0x7fd: 0xa000, - // Block 0x20, offset 0x800 - 0x800: 0x3c5a, 0x801: 0x3c61, 0x802: 0xa000, 0x803: 0xa000, 0x804: 0x3c76, 0x805: 0x3c7d, - 0x806: 0xa000, 0x807: 0xa000, 0x808: 0x3c84, 0x809: 0x3c8b, - 0x811: 0xa000, - 0x812: 0xa000, - 0x822: 0xa000, - 0x828: 0xa000, 0x829: 0xa000, - 0x82b: 0xa000, 0x82c: 0x3ca0, 0x82d: 0x3ca7, 0x82e: 0x3cae, 0x82f: 0x3cb5, - 0x832: 0xa000, 0x833: 0xa000, 0x834: 0xa000, 0x835: 0xa000, - // Block 0x21, offset 0x840 - 0x860: 0x0023, 0x861: 0x0025, 0x862: 0x0027, 0x863: 0x0029, - 0x864: 0x002b, 0x865: 0x002d, 0x866: 0x002f, 0x867: 0x0031, 0x868: 0x0033, 0x869: 0x1882, - 0x86a: 0x1885, 0x86b: 0x1888, 0x86c: 0x188b, 0x86d: 0x188e, 0x86e: 0x1891, 0x86f: 0x1894, - 0x870: 0x1897, 0x871: 0x189a, 0x872: 0x189d, 0x873: 0x18a6, 0x874: 0x1a68, 0x875: 0x1a6c, - 0x876: 0x1a70, 0x877: 0x1a74, 0x878: 0x1a78, 0x879: 0x1a7c, 0x87a: 0x1a80, 0x87b: 0x1a84, - 0x87c: 0x1a88, 0x87d: 0x1c80, 0x87e: 0x1c85, 0x87f: 0x1c8a, - // Block 0x22, offset 0x880 - 0x880: 0x1c8f, 0x881: 0x1c94, 0x882: 0x1c99, 0x883: 0x1c9e, 0x884: 0x1ca3, 0x885: 0x1ca8, - 0x886: 0x1cad, 0x887: 0x1cb2, 0x888: 0x187f, 0x889: 0x18a3, 0x88a: 0x18c7, 0x88b: 0x18eb, - 0x88c: 0x190f, 0x88d: 0x1918, 0x88e: 0x191e, 0x88f: 0x1924, 0x890: 0x192a, 0x891: 0x1b60, - 0x892: 0x1b64, 0x893: 0x1b68, 0x894: 0x1b6c, 0x895: 0x1b70, 0x896: 0x1b74, 0x897: 0x1b78, - 0x898: 0x1b7c, 0x899: 0x1b80, 0x89a: 0x1b84, 0x89b: 0x1b88, 0x89c: 0x1af4, 0x89d: 0x1af8, - 0x89e: 0x1afc, 0x89f: 0x1b00, 0x8a0: 0x1b04, 0x8a1: 0x1b08, 0x8a2: 0x1b0c, 0x8a3: 0x1b10, - 0x8a4: 0x1b14, 0x8a5: 0x1b18, 0x8a6: 0x1b1c, 0x8a7: 0x1b20, 0x8a8: 0x1b24, 0x8a9: 0x1b28, - 0x8aa: 0x1b2c, 0x8ab: 0x1b30, 0x8ac: 0x1b34, 0x8ad: 0x1b38, 0x8ae: 0x1b3c, 0x8af: 0x1b40, - 0x8b0: 0x1b44, 0x8b1: 0x1b48, 0x8b2: 0x1b4c, 0x8b3: 0x1b50, 0x8b4: 0x1b54, 0x8b5: 0x1b58, - 0x8b6: 0x0043, 0x8b7: 0x0045, 0x8b8: 0x0047, 0x8b9: 0x0049, 0x8ba: 0x004b, 0x8bb: 0x004d, - 0x8bc: 0x004f, 0x8bd: 0x0051, 0x8be: 0x0053, 0x8bf: 0x0055, - // Block 0x23, offset 0x8c0 - 0x8c0: 0x06bf, 0x8c1: 0x06e3, 0x8c2: 0x06ef, 0x8c3: 0x06ff, 0x8c4: 0x0707, 0x8c5: 0x0713, - 0x8c6: 0x071b, 0x8c7: 0x0723, 0x8c8: 0x072f, 0x8c9: 0x0783, 0x8ca: 0x079b, 0x8cb: 0x07ab, - 0x8cc: 0x07bb, 0x8cd: 0x07cb, 0x8ce: 0x07db, 0x8cf: 0x07fb, 0x8d0: 0x07ff, 0x8d1: 0x0803, - 0x8d2: 0x0837, 0x8d3: 0x085f, 0x8d4: 0x086f, 0x8d5: 0x0877, 0x8d6: 0x087b, 0x8d7: 0x0887, - 0x8d8: 0x08a3, 0x8d9: 0x08a7, 0x8da: 0x08bf, 0x8db: 0x08c3, 0x8dc: 0x08cb, 0x8dd: 0x08db, - 0x8de: 0x0977, 0x8df: 0x098b, 0x8e0: 0x09cb, 0x8e1: 0x09df, 0x8e2: 0x09e7, 0x8e3: 0x09eb, - 0x8e4: 0x09fb, 0x8e5: 0x0a17, 0x8e6: 0x0a43, 0x8e7: 0x0a4f, 0x8e8: 0x0a6f, 0x8e9: 0x0a7b, - 0x8ea: 0x0a7f, 0x8eb: 0x0a83, 0x8ec: 0x0a9b, 0x8ed: 0x0a9f, 0x8ee: 0x0acb, 0x8ef: 0x0ad7, - 0x8f0: 0x0adf, 0x8f1: 0x0ae7, 0x8f2: 0x0af7, 0x8f3: 0x0aff, 0x8f4: 0x0b07, 0x8f5: 0x0b33, - 0x8f6: 0x0b37, 0x8f7: 0x0b3f, 0x8f8: 0x0b43, 0x8f9: 0x0b4b, 0x8fa: 0x0b53, 0x8fb: 0x0b63, - 0x8fc: 0x0b7f, 0x8fd: 0x0bf7, 0x8fe: 0x0c0b, 0x8ff: 0x0c0f, - // Block 0x24, offset 0x900 - 0x900: 0x0c8f, 0x901: 0x0c93, 0x902: 0x0ca7, 0x903: 0x0cab, 0x904: 0x0cb3, 0x905: 0x0cbb, - 0x906: 0x0cc3, 0x907: 0x0ccf, 0x908: 0x0cf7, 0x909: 0x0d07, 0x90a: 0x0d1b, 0x90b: 0x0d8b, - 0x90c: 0x0d97, 0x90d: 0x0da7, 0x90e: 0x0db3, 0x90f: 0x0dbf, 0x910: 0x0dc7, 0x911: 0x0dcb, - 0x912: 0x0dcf, 0x913: 0x0dd3, 0x914: 0x0dd7, 0x915: 0x0e8f, 0x916: 0x0ed7, 0x917: 0x0ee3, - 0x918: 0x0ee7, 0x919: 0x0eeb, 0x91a: 0x0eef, 0x91b: 0x0ef7, 0x91c: 0x0efb, 0x91d: 0x0f0f, - 0x91e: 0x0f2b, 0x91f: 0x0f33, 0x920: 0x0f73, 0x921: 0x0f77, 0x922: 0x0f7f, 0x923: 0x0f83, - 0x924: 0x0f8b, 0x925: 0x0f8f, 0x926: 0x0fb3, 0x927: 0x0fb7, 0x928: 0x0fd3, 0x929: 0x0fd7, - 0x92a: 0x0fdb, 0x92b: 0x0fdf, 0x92c: 0x0ff3, 0x92d: 0x1017, 0x92e: 0x101b, 0x92f: 0x101f, - 0x930: 0x1043, 0x931: 0x1083, 0x932: 0x1087, 0x933: 0x10a7, 0x934: 0x10b7, 0x935: 0x10bf, - 0x936: 0x10df, 0x937: 0x1103, 0x938: 0x1147, 0x939: 0x114f, 0x93a: 0x1163, 0x93b: 0x116f, - 0x93c: 0x1177, 0x93d: 0x117f, 0x93e: 0x1183, 0x93f: 0x1187, - // Block 0x25, offset 0x940 - 0x940: 0x119f, 0x941: 0x11a3, 0x942: 0x11bf, 0x943: 0x11c7, 0x944: 0x11cf, 0x945: 0x11d3, - 0x946: 0x11df, 0x947: 0x11e7, 0x948: 0x11eb, 0x949: 0x11ef, 0x94a: 0x11f7, 0x94b: 0x11fb, - 0x94c: 0x129b, 0x94d: 0x12af, 0x94e: 0x12e3, 0x94f: 0x12e7, 0x950: 0x12ef, 0x951: 0x131b, - 0x952: 0x1323, 0x953: 0x132b, 0x954: 0x1333, 0x955: 0x136f, 0x956: 0x1373, 0x957: 0x137b, - 0x958: 0x137f, 0x959: 0x1383, 0x95a: 0x13af, 0x95b: 0x13b3, 0x95c: 0x13bb, 0x95d: 0x13cf, - 0x95e: 0x13d3, 0x95f: 0x13ef, 0x960: 0x13f7, 0x961: 0x13fb, 0x962: 0x141f, 0x963: 0x143f, - 0x964: 0x1453, 0x965: 0x1457, 0x966: 0x145f, 0x967: 0x148b, 0x968: 0x148f, 0x969: 0x149f, - 0x96a: 0x14c3, 0x96b: 0x14cf, 0x96c: 0x14df, 0x96d: 0x14f7, 0x96e: 0x14ff, 0x96f: 0x1503, - 0x970: 0x1507, 0x971: 0x150b, 0x972: 0x1517, 0x973: 0x151b, 0x974: 0x1523, 0x975: 0x153f, - 0x976: 0x1543, 0x977: 0x1547, 0x978: 0x155f, 0x979: 0x1563, 0x97a: 0x156b, 0x97b: 0x157f, - 0x97c: 0x1583, 0x97d: 0x1587, 0x97e: 0x158f, 0x97f: 0x1593, - // Block 0x26, offset 0x980 - 0x986: 0xa000, 0x98b: 0xa000, - 0x98c: 0x3f08, 0x98d: 0xa000, 0x98e: 0x3f10, 0x98f: 0xa000, 0x990: 0x3f18, 0x991: 0xa000, - 0x992: 0x3f20, 0x993: 0xa000, 0x994: 0x3f28, 0x995: 0xa000, 0x996: 0x3f30, 0x997: 0xa000, - 0x998: 0x3f38, 0x999: 0xa000, 0x99a: 0x3f40, 0x99b: 0xa000, 0x99c: 0x3f48, 0x99d: 0xa000, - 0x99e: 0x3f50, 0x99f: 0xa000, 0x9a0: 0x3f58, 0x9a1: 0xa000, 0x9a2: 0x3f60, - 0x9a4: 0xa000, 0x9a5: 0x3f68, 0x9a6: 0xa000, 0x9a7: 0x3f70, 0x9a8: 0xa000, 0x9a9: 0x3f78, - 0x9af: 0xa000, - 0x9b0: 0x3f80, 0x9b1: 0x3f88, 0x9b2: 0xa000, 0x9b3: 0x3f90, 0x9b4: 0x3f98, 0x9b5: 0xa000, - 0x9b6: 0x3fa0, 0x9b7: 0x3fa8, 0x9b8: 0xa000, 0x9b9: 0x3fb0, 0x9ba: 0x3fb8, 0x9bb: 0xa000, - 0x9bc: 0x3fc0, 0x9bd: 0x3fc8, - // Block 0x27, offset 0x9c0 - 0x9d4: 0x3f00, - 0x9d9: 0x9903, 0x9da: 0x9903, 0x9db: 0x42dc, 0x9dc: 0x42e2, 0x9dd: 0xa000, - 0x9de: 0x3fd0, 0x9df: 0x26b4, - 0x9e6: 0xa000, - 0x9eb: 0xa000, 0x9ec: 0x3fe0, 0x9ed: 0xa000, 0x9ee: 0x3fe8, 0x9ef: 0xa000, - 0x9f0: 0x3ff0, 0x9f1: 0xa000, 0x9f2: 0x3ff8, 0x9f3: 0xa000, 0x9f4: 0x4000, 0x9f5: 0xa000, - 0x9f6: 0x4008, 0x9f7: 0xa000, 0x9f8: 0x4010, 0x9f9: 0xa000, 0x9fa: 0x4018, 0x9fb: 0xa000, - 0x9fc: 0x4020, 0x9fd: 0xa000, 0x9fe: 0x4028, 0x9ff: 0xa000, - // Block 0x28, offset 0xa00 - 0xa00: 0x4030, 0xa01: 0xa000, 0xa02: 0x4038, 0xa04: 0xa000, 0xa05: 0x4040, - 0xa06: 0xa000, 0xa07: 0x4048, 0xa08: 0xa000, 0xa09: 0x4050, - 0xa0f: 0xa000, 0xa10: 0x4058, 0xa11: 0x4060, - 0xa12: 0xa000, 0xa13: 0x4068, 0xa14: 0x4070, 0xa15: 0xa000, 0xa16: 0x4078, 0xa17: 0x4080, - 0xa18: 0xa000, 0xa19: 0x4088, 0xa1a: 0x4090, 0xa1b: 0xa000, 0xa1c: 0x4098, 0xa1d: 0x40a0, - 0xa2f: 0xa000, - 0xa30: 0xa000, 0xa31: 0xa000, 0xa32: 0xa000, 0xa34: 0x3fd8, - 0xa37: 0x40a8, 0xa38: 0x40b0, 0xa39: 0x40b8, 0xa3a: 0x40c0, - 0xa3d: 0xa000, 0xa3e: 0x40c8, 0xa3f: 0x26c9, - // Block 0x29, offset 0xa40 - 0xa40: 0x0367, 0xa41: 0x032b, 0xa42: 0x032f, 0xa43: 0x0333, 0xa44: 0x037b, 0xa45: 0x0337, - 0xa46: 0x033b, 0xa47: 0x033f, 0xa48: 0x0343, 0xa49: 0x0347, 0xa4a: 0x034b, 0xa4b: 0x034f, - 0xa4c: 0x0353, 0xa4d: 0x0357, 0xa4e: 0x035b, 0xa4f: 0x49bd, 0xa50: 0x49c3, 0xa51: 0x49c9, - 0xa52: 0x49cf, 0xa53: 0x49d5, 0xa54: 0x49db, 0xa55: 0x49e1, 0xa56: 0x49e7, 0xa57: 0x49ed, - 0xa58: 0x49f3, 0xa59: 0x49f9, 0xa5a: 0x49ff, 0xa5b: 0x4a05, 0xa5c: 0x4a0b, 0xa5d: 0x4a11, - 0xa5e: 0x4a17, 0xa5f: 0x4a1d, 0xa60: 0x4a23, 0xa61: 0x4a29, 0xa62: 0x4a2f, 0xa63: 0x4a35, - 0xa64: 0x03c3, 0xa65: 0x035f, 0xa66: 0x0363, 0xa67: 0x03e7, 0xa68: 0x03eb, 0xa69: 0x03ef, - 0xa6a: 0x03f3, 0xa6b: 0x03f7, 0xa6c: 0x03fb, 0xa6d: 0x03ff, 0xa6e: 0x036b, 0xa6f: 0x0403, - 0xa70: 0x0407, 0xa71: 0x036f, 0xa72: 0x0373, 0xa73: 0x0377, 0xa74: 0x037f, 0xa75: 0x0383, - 0xa76: 0x0387, 0xa77: 0x038b, 0xa78: 0x038f, 0xa79: 0x0393, 0xa7a: 0x0397, 0xa7b: 0x039b, - 0xa7c: 0x039f, 0xa7d: 0x03a3, 0xa7e: 0x03a7, 0xa7f: 0x03ab, - // Block 0x2a, offset 0xa80 - 0xa80: 0x03af, 0xa81: 0x03b3, 0xa82: 0x040b, 0xa83: 0x040f, 0xa84: 0x03b7, 0xa85: 0x03bb, - 0xa86: 0x03bf, 0xa87: 0x03c7, 0xa88: 0x03cb, 0xa89: 0x03cf, 0xa8a: 0x03d3, 0xa8b: 0x03d7, - 0xa8c: 0x03db, 0xa8d: 0x03df, 0xa8e: 0x03e3, - 0xa92: 0x06bf, 0xa93: 0x071b, 0xa94: 0x06cb, 0xa95: 0x097b, 0xa96: 0x06cf, 0xa97: 0x06e7, - 0xa98: 0x06d3, 0xa99: 0x0f93, 0xa9a: 0x0707, 0xa9b: 0x06db, 0xa9c: 0x06c3, 0xa9d: 0x09ff, - 0xa9e: 0x098f, 0xa9f: 0x072f, - // Block 0x2b, offset 0xac0 - 0xac0: 0x2054, 0xac1: 0x205a, 0xac2: 0x2060, 0xac3: 0x2066, 0xac4: 0x206c, 0xac5: 0x2072, - 0xac6: 0x2078, 0xac7: 0x207e, 0xac8: 0x2084, 0xac9: 0x208a, 0xaca: 0x2090, 0xacb: 0x2096, - 0xacc: 0x209c, 0xacd: 0x20a2, 0xace: 0x2726, 0xacf: 0x272f, 0xad0: 0x2738, 0xad1: 0x2741, - 0xad2: 0x274a, 0xad3: 0x2753, 0xad4: 0x275c, 0xad5: 0x2765, 0xad6: 0x276e, 0xad7: 0x2780, - 0xad8: 0x2789, 0xad9: 0x2792, 0xada: 0x279b, 0xadb: 0x27a4, 0xadc: 0x2777, 0xadd: 0x2bac, - 0xade: 0x2aed, 0xae0: 0x20a8, 0xae1: 0x20c0, 0xae2: 0x20b4, 0xae3: 0x2108, - 0xae4: 0x20c6, 0xae5: 0x20e4, 0xae6: 0x20ae, 0xae7: 0x20de, 0xae8: 0x20ba, 0xae9: 0x20f0, - 0xaea: 0x2120, 0xaeb: 0x213e, 0xaec: 0x2138, 0xaed: 0x212c, 0xaee: 0x217a, 0xaef: 0x210e, - 0xaf0: 0x211a, 0xaf1: 0x2132, 0xaf2: 0x2126, 0xaf3: 0x2150, 0xaf4: 0x20fc, 0xaf5: 0x2144, - 0xaf6: 0x216e, 0xaf7: 0x2156, 0xaf8: 0x20ea, 0xaf9: 0x20cc, 0xafa: 0x2102, 0xafb: 0x2114, - 0xafc: 0x214a, 0xafd: 0x20d2, 0xafe: 0x2174, 0xaff: 0x20f6, - // Block 0x2c, offset 0xb00 - 0xb00: 0x215c, 0xb01: 0x20d8, 0xb02: 0x2162, 0xb03: 0x2168, 0xb04: 0x092f, 0xb05: 0x0b03, - 0xb06: 0x0ca7, 0xb07: 0x10c7, - 0xb10: 0x1bc4, 0xb11: 0x18a9, - 0xb12: 0x18ac, 0xb13: 0x18af, 0xb14: 0x18b2, 0xb15: 0x18b5, 0xb16: 0x18b8, 0xb17: 0x18bb, - 0xb18: 0x18be, 0xb19: 0x18c1, 0xb1a: 0x18ca, 0xb1b: 0x18cd, 0xb1c: 0x18d0, 0xb1d: 0x18d3, - 0xb1e: 0x18d6, 0xb1f: 0x18d9, 0xb20: 0x0313, 0xb21: 0x031b, 0xb22: 0x031f, 0xb23: 0x0327, - 0xb24: 0x032b, 0xb25: 0x032f, 0xb26: 0x0337, 0xb27: 0x033f, 0xb28: 0x0343, 0xb29: 0x034b, - 0xb2a: 0x034f, 0xb2b: 0x0353, 0xb2c: 0x0357, 0xb2d: 0x035b, 0xb2e: 0x2e18, 0xb2f: 0x2e20, - 0xb30: 0x2e28, 0xb31: 0x2e30, 0xb32: 0x2e38, 0xb33: 0x2e40, 0xb34: 0x2e48, 0xb35: 0x2e50, - 0xb36: 0x2e60, 0xb37: 0x2e68, 0xb38: 0x2e70, 0xb39: 0x2e78, 0xb3a: 0x2e80, 0xb3b: 0x2e88, - 0xb3c: 0x2ed3, 0xb3d: 0x2e9b, 0xb3e: 0x2e58, - // Block 0x2d, offset 0xb40 - 0xb40: 0x06bf, 0xb41: 0x071b, 0xb42: 0x06cb, 0xb43: 0x097b, 0xb44: 0x071f, 0xb45: 0x07af, - 0xb46: 0x06c7, 0xb47: 0x07ab, 0xb48: 0x070b, 0xb49: 0x0887, 0xb4a: 0x0d07, 0xb4b: 0x0e8f, - 0xb4c: 0x0dd7, 0xb4d: 0x0d1b, 0xb4e: 0x145f, 0xb4f: 0x098b, 0xb50: 0x0ccf, 0xb51: 0x0d4b, - 0xb52: 0x0d0b, 0xb53: 0x104b, 0xb54: 0x08fb, 0xb55: 0x0f03, 0xb56: 0x1387, 0xb57: 0x105f, - 0xb58: 0x0843, 0xb59: 0x108f, 0xb5a: 0x0f9b, 0xb5b: 0x0a17, 0xb5c: 0x140f, 0xb5d: 0x077f, - 0xb5e: 0x08ab, 0xb5f: 0x0df7, 0xb60: 0x1527, 0xb61: 0x0743, 0xb62: 0x07d3, 0xb63: 0x0d9b, - 0xb64: 0x06cf, 0xb65: 0x06e7, 0xb66: 0x06d3, 0xb67: 0x0adb, 0xb68: 0x08ef, 0xb69: 0x087f, - 0xb6a: 0x0a57, 0xb6b: 0x0a4b, 0xb6c: 0x0feb, 0xb6d: 0x073f, 0xb6e: 0x139b, 0xb6f: 0x089b, - 0xb70: 0x09f3, 0xb71: 0x18dc, 0xb72: 0x18df, 0xb73: 0x18e2, 0xb74: 0x18e5, 0xb75: 0x18ee, - 0xb76: 0x18f1, 0xb77: 0x18f4, 0xb78: 0x18f7, 0xb79: 0x18fa, 0xb7a: 0x18fd, 0xb7b: 0x1900, - 0xb7c: 0x1903, 0xb7d: 0x1906, 0xb7e: 0x1909, 0xb7f: 0x1912, - // Block 0x2e, offset 0xb80 - 0xb80: 0x1cc6, 0xb81: 0x1cd5, 0xb82: 0x1ce4, 0xb83: 0x1cf3, 0xb84: 0x1d02, 0xb85: 0x1d11, - 0xb86: 0x1d20, 0xb87: 0x1d2f, 0xb88: 0x1d3e, 0xb89: 0x218c, 0xb8a: 0x219e, 0xb8b: 0x21b0, - 0xb8c: 0x1954, 0xb8d: 0x1c04, 0xb8e: 0x19d2, 0xb8f: 0x1ba8, 0xb90: 0x04cb, 0xb91: 0x04d3, - 0xb92: 0x04db, 0xb93: 0x04e3, 0xb94: 0x04eb, 0xb95: 0x04ef, 0xb96: 0x04f3, 0xb97: 0x04f7, - 0xb98: 0x04fb, 0xb99: 0x04ff, 0xb9a: 0x0503, 0xb9b: 0x0507, 0xb9c: 0x050b, 0xb9d: 0x050f, - 0xb9e: 0x0513, 0xb9f: 0x0517, 0xba0: 0x051b, 0xba1: 0x0523, 0xba2: 0x0527, 0xba3: 0x052b, - 0xba4: 0x052f, 0xba5: 0x0533, 0xba6: 0x0537, 0xba7: 0x053b, 0xba8: 0x053f, 0xba9: 0x0543, - 0xbaa: 0x0547, 0xbab: 0x054b, 0xbac: 0x054f, 0xbad: 0x0553, 0xbae: 0x0557, 0xbaf: 0x055b, - 0xbb0: 0x055f, 0xbb1: 0x0563, 0xbb2: 0x0567, 0xbb3: 0x056f, 0xbb4: 0x0577, 0xbb5: 0x057f, - 0xbb6: 0x0583, 0xbb7: 0x0587, 0xbb8: 0x058b, 0xbb9: 0x058f, 0xbba: 0x0593, 0xbbb: 0x0597, - 0xbbc: 0x059b, 0xbbd: 0x059f, 0xbbe: 0x05a3, - // Block 0x2f, offset 0xbc0 - 0xbc0: 0x2b0c, 0xbc1: 0x29a8, 0xbc2: 0x2b1c, 0xbc3: 0x2880, 0xbc4: 0x2ee4, 0xbc5: 0x288a, - 0xbc6: 0x2894, 0xbc7: 0x2f28, 0xbc8: 0x29b5, 0xbc9: 0x289e, 0xbca: 0x28a8, 0xbcb: 0x28b2, - 0xbcc: 0x29dc, 0xbcd: 0x29e9, 0xbce: 0x29c2, 0xbcf: 0x29cf, 0xbd0: 0x2ea9, 0xbd1: 0x29f6, - 0xbd2: 0x2a03, 0xbd3: 0x2bbe, 0xbd4: 0x26bb, 0xbd5: 0x2bd1, 0xbd6: 0x2be4, 0xbd7: 0x2b2c, - 0xbd8: 0x2a10, 0xbd9: 0x2bf7, 0xbda: 0x2c0a, 0xbdb: 0x2a1d, 0xbdc: 0x28bc, 0xbdd: 0x28c6, - 0xbde: 0x2eb7, 0xbdf: 0x2a2a, 0xbe0: 0x2b3c, 0xbe1: 0x2ef5, 0xbe2: 0x28d0, 0xbe3: 0x28da, - 0xbe4: 0x2a37, 0xbe5: 0x28e4, 0xbe6: 0x28ee, 0xbe7: 0x26d0, 0xbe8: 0x26d7, 0xbe9: 0x28f8, - 0xbea: 0x2902, 0xbeb: 0x2c1d, 0xbec: 0x2a44, 0xbed: 0x2b4c, 0xbee: 0x2c30, 0xbef: 0x2a51, - 0xbf0: 0x2916, 0xbf1: 0x290c, 0xbf2: 0x2f3c, 0xbf3: 0x2a5e, 0xbf4: 0x2c43, 0xbf5: 0x2920, - 0xbf6: 0x2b5c, 0xbf7: 0x292a, 0xbf8: 0x2a78, 0xbf9: 0x2934, 0xbfa: 0x2a85, 0xbfb: 0x2f06, - 0xbfc: 0x2a6b, 0xbfd: 0x2b6c, 0xbfe: 0x2a92, 0xbff: 0x26de, - // Block 0x30, offset 0xc00 - 0xc00: 0x2f17, 0xc01: 0x293e, 0xc02: 0x2948, 0xc03: 0x2a9f, 0xc04: 0x2952, 0xc05: 0x295c, - 0xc06: 0x2966, 0xc07: 0x2b7c, 0xc08: 0x2aac, 0xc09: 0x26e5, 0xc0a: 0x2c56, 0xc0b: 0x2e90, - 0xc0c: 0x2b8c, 0xc0d: 0x2ab9, 0xc0e: 0x2ec5, 0xc0f: 0x2970, 0xc10: 0x297a, 0xc11: 0x2ac6, - 0xc12: 0x26ec, 0xc13: 0x2ad3, 0xc14: 0x2b9c, 0xc15: 0x26f3, 0xc16: 0x2c69, 0xc17: 0x2984, - 0xc18: 0x1cb7, 0xc19: 0x1ccb, 0xc1a: 0x1cda, 0xc1b: 0x1ce9, 0xc1c: 0x1cf8, 0xc1d: 0x1d07, - 0xc1e: 0x1d16, 0xc1f: 0x1d25, 0xc20: 0x1d34, 0xc21: 0x1d43, 0xc22: 0x2192, 0xc23: 0x21a4, - 0xc24: 0x21b6, 0xc25: 0x21c2, 0xc26: 0x21ce, 0xc27: 0x21da, 0xc28: 0x21e6, 0xc29: 0x21f2, - 0xc2a: 0x21fe, 0xc2b: 0x220a, 0xc2c: 0x2246, 0xc2d: 0x2252, 0xc2e: 0x225e, 0xc2f: 0x226a, - 0xc30: 0x2276, 0xc31: 0x1c14, 0xc32: 0x19c6, 0xc33: 0x1936, 0xc34: 0x1be4, 0xc35: 0x1a47, - 0xc36: 0x1a56, 0xc37: 0x19cc, 0xc38: 0x1bfc, 0xc39: 0x1c00, 0xc3a: 0x1960, 0xc3b: 0x2701, - 0xc3c: 0x270f, 0xc3d: 0x26fa, 0xc3e: 0x2708, 0xc3f: 0x2ae0, - // Block 0x31, offset 0xc40 - 0xc40: 0x1a4a, 0xc41: 0x1a32, 0xc42: 0x1c60, 0xc43: 0x1a1a, 0xc44: 0x19f3, 0xc45: 0x1969, - 0xc46: 0x1978, 0xc47: 0x1948, 0xc48: 0x1bf0, 0xc49: 0x1d52, 0xc4a: 0x1a4d, 0xc4b: 0x1a35, - 0xc4c: 0x1c64, 0xc4d: 0x1c70, 0xc4e: 0x1a26, 0xc4f: 0x19fc, 0xc50: 0x1957, 0xc51: 0x1c1c, - 0xc52: 0x1bb0, 0xc53: 0x1b9c, 0xc54: 0x1bcc, 0xc55: 0x1c74, 0xc56: 0x1a29, 0xc57: 0x19c9, - 0xc58: 0x19ff, 0xc59: 0x19de, 0xc5a: 0x1a41, 0xc5b: 0x1c78, 0xc5c: 0x1a2c, 0xc5d: 0x19c0, - 0xc5e: 0x1a02, 0xc5f: 0x1c3c, 0xc60: 0x1bf4, 0xc61: 0x1a14, 0xc62: 0x1c24, 0xc63: 0x1c40, - 0xc64: 0x1bf8, 0xc65: 0x1a17, 0xc66: 0x1c28, 0xc67: 0x22e8, 0xc68: 0x22fc, 0xc69: 0x1996, - 0xc6a: 0x1c20, 0xc6b: 0x1bb4, 0xc6c: 0x1ba0, 0xc6d: 0x1c48, 0xc6e: 0x2716, 0xc6f: 0x27ad, - 0xc70: 0x1a59, 0xc71: 0x1a44, 0xc72: 0x1c7c, 0xc73: 0x1a2f, 0xc74: 0x1a50, 0xc75: 0x1a38, - 0xc76: 0x1c68, 0xc77: 0x1a1d, 0xc78: 0x19f6, 0xc79: 0x1981, 0xc7a: 0x1a53, 0xc7b: 0x1a3b, - 0xc7c: 0x1c6c, 0xc7d: 0x1a20, 0xc7e: 0x19f9, 0xc7f: 0x1984, - // Block 0x32, offset 0xc80 - 0xc80: 0x1c2c, 0xc81: 0x1bb8, 0xc82: 0x1d4d, 0xc83: 0x1939, 0xc84: 0x19ba, 0xc85: 0x19bd, - 0xc86: 0x22f5, 0xc87: 0x1b94, 0xc88: 0x19c3, 0xc89: 0x194b, 0xc8a: 0x19e1, 0xc8b: 0x194e, - 0xc8c: 0x19ea, 0xc8d: 0x196c, 0xc8e: 0x196f, 0xc8f: 0x1a05, 0xc90: 0x1a0b, 0xc91: 0x1a0e, - 0xc92: 0x1c30, 0xc93: 0x1a11, 0xc94: 0x1a23, 0xc95: 0x1c38, 0xc96: 0x1c44, 0xc97: 0x1990, - 0xc98: 0x1d57, 0xc99: 0x1bbc, 0xc9a: 0x1993, 0xc9b: 0x1a5c, 0xc9c: 0x19a5, 0xc9d: 0x19b4, - 0xc9e: 0x22e2, 0xc9f: 0x22dc, 0xca0: 0x1cc1, 0xca1: 0x1cd0, 0xca2: 0x1cdf, 0xca3: 0x1cee, - 0xca4: 0x1cfd, 0xca5: 0x1d0c, 0xca6: 0x1d1b, 0xca7: 0x1d2a, 0xca8: 0x1d39, 0xca9: 0x2186, - 0xcaa: 0x2198, 0xcab: 0x21aa, 0xcac: 0x21bc, 0xcad: 0x21c8, 0xcae: 0x21d4, 0xcaf: 0x21e0, - 0xcb0: 0x21ec, 0xcb1: 0x21f8, 0xcb2: 0x2204, 0xcb3: 0x2240, 0xcb4: 0x224c, 0xcb5: 0x2258, - 0xcb6: 0x2264, 0xcb7: 0x2270, 0xcb8: 0x227c, 0xcb9: 0x2282, 0xcba: 0x2288, 0xcbb: 0x228e, - 0xcbc: 0x2294, 0xcbd: 0x22a6, 0xcbe: 0x22ac, 0xcbf: 0x1c10, - // Block 0x33, offset 0xcc0 - 0xcc0: 0x1377, 0xcc1: 0x0cfb, 0xcc2: 0x13d3, 0xcc3: 0x139f, 0xcc4: 0x0e57, 0xcc5: 0x06eb, - 0xcc6: 0x08df, 0xcc7: 0x162b, 0xcc8: 0x162b, 0xcc9: 0x0a0b, 0xcca: 0x145f, 0xccb: 0x0943, - 0xccc: 0x0a07, 0xccd: 0x0bef, 0xcce: 0x0fcf, 0xccf: 0x115f, 0xcd0: 0x1297, 0xcd1: 0x12d3, - 0xcd2: 0x1307, 0xcd3: 0x141b, 0xcd4: 0x0d73, 0xcd5: 0x0dff, 0xcd6: 0x0eab, 0xcd7: 0x0f43, - 0xcd8: 0x125f, 0xcd9: 0x1447, 0xcda: 0x1573, 0xcdb: 0x070f, 0xcdc: 0x08b3, 0xcdd: 0x0d87, - 0xcde: 0x0ecf, 0xcdf: 0x1293, 0xce0: 0x15c3, 0xce1: 0x0ab3, 0xce2: 0x0e77, 0xce3: 0x1283, - 0xce4: 0x1317, 0xce5: 0x0c23, 0xce6: 0x11bb, 0xce7: 0x12df, 0xce8: 0x0b1f, 0xce9: 0x0d0f, - 0xcea: 0x0e17, 0xceb: 0x0f1b, 0xcec: 0x1427, 0xced: 0x074f, 0xcee: 0x07e7, 0xcef: 0x0853, - 0xcf0: 0x0c8b, 0xcf1: 0x0d7f, 0xcf2: 0x0ecb, 0xcf3: 0x0fef, 0xcf4: 0x1177, 0xcf5: 0x128b, - 0xcf6: 0x12a3, 0xcf7: 0x13c7, 0xcf8: 0x14ef, 0xcf9: 0x15a3, 0xcfa: 0x15bf, 0xcfb: 0x102b, - 0xcfc: 0x106b, 0xcfd: 0x1123, 0xcfe: 0x1243, 0xcff: 0x147b, - // Block 0x34, offset 0xd00 - 0xd00: 0x15cb, 0xd01: 0x134b, 0xd02: 0x09c7, 0xd03: 0x0b3b, 0xd04: 0x10db, 0xd05: 0x119b, - 0xd06: 0x0eff, 0xd07: 0x1033, 0xd08: 0x1397, 0xd09: 0x14e7, 0xd0a: 0x09c3, 0xd0b: 0x0a8f, - 0xd0c: 0x0d77, 0xd0d: 0x0e2b, 0xd0e: 0x0e5f, 0xd0f: 0x1113, 0xd10: 0x113b, 0xd11: 0x14a7, - 0xd12: 0x084f, 0xd13: 0x11a7, 0xd14: 0x07f3, 0xd15: 0x07ef, 0xd16: 0x1097, 0xd17: 0x1127, - 0xd18: 0x125b, 0xd19: 0x14af, 0xd1a: 0x1367, 0xd1b: 0x0c27, 0xd1c: 0x0d73, 0xd1d: 0x1357, - 0xd1e: 0x06f7, 0xd1f: 0x0a63, 0xd20: 0x0b93, 0xd21: 0x0f2f, 0xd22: 0x0faf, 0xd23: 0x0873, - 0xd24: 0x103b, 0xd25: 0x075f, 0xd26: 0x0b77, 0xd27: 0x06d7, 0xd28: 0x0deb, 0xd29: 0x0ca3, - 0xd2a: 0x110f, 0xd2b: 0x08c7, 0xd2c: 0x09b3, 0xd2d: 0x0ffb, 0xd2e: 0x1263, 0xd2f: 0x133b, - 0xd30: 0x0db7, 0xd31: 0x13f7, 0xd32: 0x0de3, 0xd33: 0x0c37, 0xd34: 0x121b, 0xd35: 0x0c57, - 0xd36: 0x0fab, 0xd37: 0x072b, 0xd38: 0x07a7, 0xd39: 0x07eb, 0xd3a: 0x0d53, 0xd3b: 0x10fb, - 0xd3c: 0x11f3, 0xd3d: 0x1347, 0xd3e: 0x145b, 0xd3f: 0x085b, - // Block 0x35, offset 0xd40 - 0xd40: 0x090f, 0xd41: 0x0a17, 0xd42: 0x0b2f, 0xd43: 0x0cbf, 0xd44: 0x0e7b, 0xd45: 0x103f, - 0xd46: 0x1497, 0xd47: 0x157b, 0xd48: 0x15cf, 0xd49: 0x15e7, 0xd4a: 0x0837, 0xd4b: 0x0cf3, - 0xd4c: 0x0da3, 0xd4d: 0x13eb, 0xd4e: 0x0afb, 0xd4f: 0x0bd7, 0xd50: 0x0bf3, 0xd51: 0x0c83, - 0xd52: 0x0e6b, 0xd53: 0x0eb7, 0xd54: 0x0f67, 0xd55: 0x108b, 0xd56: 0x112f, 0xd57: 0x1193, - 0xd58: 0x13db, 0xd59: 0x126b, 0xd5a: 0x1403, 0xd5b: 0x147f, 0xd5c: 0x080f, 0xd5d: 0x083b, - 0xd5e: 0x0923, 0xd5f: 0x0ea7, 0xd60: 0x12f3, 0xd61: 0x133b, 0xd62: 0x0b1b, 0xd63: 0x0b8b, - 0xd64: 0x0c4f, 0xd65: 0x0daf, 0xd66: 0x10d7, 0xd67: 0x0f23, 0xd68: 0x073b, 0xd69: 0x097f, - 0xd6a: 0x0a63, 0xd6b: 0x0ac7, 0xd6c: 0x0b97, 0xd6d: 0x0f3f, 0xd6e: 0x0f5b, 0xd6f: 0x116b, - 0xd70: 0x118b, 0xd71: 0x1463, 0xd72: 0x14e3, 0xd73: 0x14f3, 0xd74: 0x152f, 0xd75: 0x0753, - 0xd76: 0x107f, 0xd77: 0x144f, 0xd78: 0x14cb, 0xd79: 0x0baf, 0xd7a: 0x0717, 0xd7b: 0x0777, - 0xd7c: 0x0a67, 0xd7d: 0x0a87, 0xd7e: 0x0caf, 0xd7f: 0x0d73, - // Block 0x36, offset 0xd80 - 0xd80: 0x0ec3, 0xd81: 0x0fcb, 0xd82: 0x1277, 0xd83: 0x1417, 0xd84: 0x1623, 0xd85: 0x0ce3, - 0xd86: 0x14a3, 0xd87: 0x0833, 0xd88: 0x0d2f, 0xd89: 0x0d3b, 0xd8a: 0x0e0f, 0xd8b: 0x0e47, - 0xd8c: 0x0f4b, 0xd8d: 0x0fa7, 0xd8e: 0x1027, 0xd8f: 0x110b, 0xd90: 0x153b, 0xd91: 0x07af, - 0xd92: 0x0c03, 0xd93: 0x14b3, 0xd94: 0x0767, 0xd95: 0x0aab, 0xd96: 0x0e2f, 0xd97: 0x13df, - 0xd98: 0x0b67, 0xd99: 0x0bb7, 0xd9a: 0x0d43, 0xd9b: 0x0f2f, 0xd9c: 0x14bb, 0xd9d: 0x0817, - 0xd9e: 0x08ff, 0xd9f: 0x0a97, 0xda0: 0x0cd3, 0xda1: 0x0d1f, 0xda2: 0x0d5f, 0xda3: 0x0df3, - 0xda4: 0x0f47, 0xda5: 0x0fbb, 0xda6: 0x1157, 0xda7: 0x12f7, 0xda8: 0x1303, 0xda9: 0x1457, - 0xdaa: 0x14d7, 0xdab: 0x0883, 0xdac: 0x0e4b, 0xdad: 0x0903, 0xdae: 0x0ec7, 0xdaf: 0x0f6b, - 0xdb0: 0x1287, 0xdb1: 0x14bf, 0xdb2: 0x15ab, 0xdb3: 0x15d3, 0xdb4: 0x0d37, 0xdb5: 0x0e27, - 0xdb6: 0x11c3, 0xdb7: 0x10b7, 0xdb8: 0x10c3, 0xdb9: 0x10e7, 0xdba: 0x0f17, 0xdbb: 0x0e9f, - 0xdbc: 0x1363, 0xdbd: 0x0733, 0xdbe: 0x122b, 0xdbf: 0x081b, - // Block 0x37, offset 0xdc0 - 0xdc0: 0x080b, 0xdc1: 0x0b0b, 0xdc2: 0x0c2b, 0xdc3: 0x10f3, 0xdc4: 0x0a53, 0xdc5: 0x0e03, - 0xdc6: 0x0cef, 0xdc7: 0x13e7, 0xdc8: 0x12e7, 0xdc9: 0x14ab, 0xdca: 0x1323, 0xdcb: 0x0b27, - 0xdcc: 0x0787, 0xdcd: 0x095b, 0xdd0: 0x09af, - 0xdd2: 0x0cdf, 0xdd5: 0x07f7, 0xdd6: 0x0f1f, 0xdd7: 0x0fe3, - 0xdd8: 0x1047, 0xdd9: 0x1063, 0xdda: 0x1067, 0xddb: 0x107b, 0xddc: 0x14fb, 0xddd: 0x10eb, - 0xdde: 0x116f, 0xde0: 0x128f, 0xde2: 0x1353, - 0xde5: 0x1407, 0xde6: 0x1433, - 0xdea: 0x154f, 0xdeb: 0x1553, 0xdec: 0x1557, 0xded: 0x15bb, 0xdee: 0x142b, 0xdef: 0x14c7, - 0xdf0: 0x0757, 0xdf1: 0x077b, 0xdf2: 0x078f, 0xdf3: 0x084b, 0xdf4: 0x0857, 0xdf5: 0x0897, - 0xdf6: 0x094b, 0xdf7: 0x0967, 0xdf8: 0x096f, 0xdf9: 0x09ab, 0xdfa: 0x09b7, 0xdfb: 0x0a93, - 0xdfc: 0x0a9b, 0xdfd: 0x0ba3, 0xdfe: 0x0bcb, 0xdff: 0x0bd3, - // Block 0x38, offset 0xe00 - 0xe00: 0x0beb, 0xe01: 0x0c97, 0xe02: 0x0cc7, 0xe03: 0x0ce7, 0xe04: 0x0d57, 0xe05: 0x0e1b, - 0xe06: 0x0e37, 0xe07: 0x0e67, 0xe08: 0x0ebb, 0xe09: 0x0edb, 0xe0a: 0x0f4f, 0xe0b: 0x102f, - 0xe0c: 0x104b, 0xe0d: 0x1053, 0xe0e: 0x104f, 0xe0f: 0x1057, 0xe10: 0x105b, 0xe11: 0x105f, - 0xe12: 0x1073, 0xe13: 0x1077, 0xe14: 0x109b, 0xe15: 0x10af, 0xe16: 0x10cb, 0xe17: 0x112f, - 0xe18: 0x1137, 0xe19: 0x113f, 0xe1a: 0x1153, 0xe1b: 0x117b, 0xe1c: 0x11cb, 0xe1d: 0x11ff, - 0xe1e: 0x11ff, 0xe1f: 0x1267, 0xe20: 0x130f, 0xe21: 0x1327, 0xe22: 0x135b, 0xe23: 0x135f, - 0xe24: 0x13a3, 0xe25: 0x13a7, 0xe26: 0x13ff, 0xe27: 0x1407, 0xe28: 0x14db, 0xe29: 0x151f, - 0xe2a: 0x1537, 0xe2b: 0x0b9b, 0xe2c: 0x171e, 0xe2d: 0x11e3, - 0xe30: 0x06df, 0xe31: 0x07e3, 0xe32: 0x07a3, 0xe33: 0x074b, 0xe34: 0x078b, 0xe35: 0x07b7, - 0xe36: 0x0847, 0xe37: 0x0863, 0xe38: 0x094b, 0xe39: 0x0937, 0xe3a: 0x0947, 0xe3b: 0x0963, - 0xe3c: 0x09af, 0xe3d: 0x09bf, 0xe3e: 0x0a03, 0xe3f: 0x0a0f, - // Block 0x39, offset 0xe40 - 0xe40: 0x0a2b, 0xe41: 0x0a3b, 0xe42: 0x0b23, 0xe43: 0x0b2b, 0xe44: 0x0b5b, 0xe45: 0x0b7b, - 0xe46: 0x0bab, 0xe47: 0x0bc3, 0xe48: 0x0bb3, 0xe49: 0x0bd3, 0xe4a: 0x0bc7, 0xe4b: 0x0beb, - 0xe4c: 0x0c07, 0xe4d: 0x0c5f, 0xe4e: 0x0c6b, 0xe4f: 0x0c73, 0xe50: 0x0c9b, 0xe51: 0x0cdf, - 0xe52: 0x0d0f, 0xe53: 0x0d13, 0xe54: 0x0d27, 0xe55: 0x0da7, 0xe56: 0x0db7, 0xe57: 0x0e0f, - 0xe58: 0x0e5b, 0xe59: 0x0e53, 0xe5a: 0x0e67, 0xe5b: 0x0e83, 0xe5c: 0x0ebb, 0xe5d: 0x1013, - 0xe5e: 0x0edf, 0xe5f: 0x0f13, 0xe60: 0x0f1f, 0xe61: 0x0f5f, 0xe62: 0x0f7b, 0xe63: 0x0f9f, - 0xe64: 0x0fc3, 0xe65: 0x0fc7, 0xe66: 0x0fe3, 0xe67: 0x0fe7, 0xe68: 0x0ff7, 0xe69: 0x100b, - 0xe6a: 0x1007, 0xe6b: 0x1037, 0xe6c: 0x10b3, 0xe6d: 0x10cb, 0xe6e: 0x10e3, 0xe6f: 0x111b, - 0xe70: 0x112f, 0xe71: 0x114b, 0xe72: 0x117b, 0xe73: 0x122f, 0xe74: 0x1257, 0xe75: 0x12cb, - 0xe76: 0x1313, 0xe77: 0x131f, 0xe78: 0x1327, 0xe79: 0x133f, 0xe7a: 0x1353, 0xe7b: 0x1343, - 0xe7c: 0x135b, 0xe7d: 0x1357, 0xe7e: 0x134f, 0xe7f: 0x135f, - // Block 0x3a, offset 0xe80 - 0xe80: 0x136b, 0xe81: 0x13a7, 0xe82: 0x13e3, 0xe83: 0x1413, 0xe84: 0x144b, 0xe85: 0x146b, - 0xe86: 0x14b7, 0xe87: 0x14db, 0xe88: 0x14fb, 0xe89: 0x150f, 0xe8a: 0x151f, 0xe8b: 0x152b, - 0xe8c: 0x1537, 0xe8d: 0x158b, 0xe8e: 0x162b, 0xe8f: 0x16b5, 0xe90: 0x16b0, 0xe91: 0x16e2, - 0xe92: 0x0607, 0xe93: 0x062f, 0xe94: 0x0633, 0xe95: 0x1764, 0xe96: 0x1791, 0xe97: 0x1809, - 0xe98: 0x1617, 0xe99: 0x1627, - // Block 0x3b, offset 0xec0 - 0xec0: 0x19d5, 0xec1: 0x19d8, 0xec2: 0x19db, 0xec3: 0x1c08, 0xec4: 0x1c0c, 0xec5: 0x1a5f, - 0xec6: 0x1a5f, - 0xed3: 0x1d75, 0xed4: 0x1d66, 0xed5: 0x1d6b, 0xed6: 0x1d7a, 0xed7: 0x1d70, - 0xedd: 0x4390, - 0xede: 0x8115, 0xedf: 0x4402, 0xee0: 0x022d, 0xee1: 0x0215, 0xee2: 0x021e, 0xee3: 0x0221, - 0xee4: 0x0224, 0xee5: 0x0227, 0xee6: 0x022a, 0xee7: 0x0230, 0xee8: 0x0233, 0xee9: 0x0017, - 0xeea: 0x43f0, 0xeeb: 0x43f6, 0xeec: 0x44f4, 0xeed: 0x44fc, 0xeee: 0x4348, 0xeef: 0x434e, - 0xef0: 0x4354, 0xef1: 0x435a, 0xef2: 0x4366, 0xef3: 0x436c, 0xef4: 0x4372, 0xef5: 0x437e, - 0xef6: 0x4384, 0xef8: 0x438a, 0xef9: 0x4396, 0xefa: 0x439c, 0xefb: 0x43a2, - 0xefc: 0x43ae, 0xefe: 0x43b4, - // Block 0x3c, offset 0xf00 - 0xf00: 0x43ba, 0xf01: 0x43c0, 0xf03: 0x43c6, 0xf04: 0x43cc, - 0xf06: 0x43d8, 0xf07: 0x43de, 0xf08: 0x43e4, 0xf09: 0x43ea, 0xf0a: 0x43fc, 0xf0b: 0x4378, - 0xf0c: 0x4360, 0xf0d: 0x43a8, 0xf0e: 0x43d2, 0xf0f: 0x1d7f, 0xf10: 0x0299, 0xf11: 0x0299, - 0xf12: 0x02a2, 0xf13: 0x02a2, 0xf14: 0x02a2, 0xf15: 0x02a2, 0xf16: 0x02a5, 0xf17: 0x02a5, - 0xf18: 0x02a5, 0xf19: 0x02a5, 0xf1a: 0x02ab, 0xf1b: 0x02ab, 0xf1c: 0x02ab, 0xf1d: 0x02ab, - 0xf1e: 0x029f, 0xf1f: 0x029f, 0xf20: 0x029f, 0xf21: 0x029f, 0xf22: 0x02a8, 0xf23: 0x02a8, - 0xf24: 0x02a8, 0xf25: 0x02a8, 0xf26: 0x029c, 0xf27: 0x029c, 0xf28: 0x029c, 0xf29: 0x029c, - 0xf2a: 0x02cf, 0xf2b: 0x02cf, 0xf2c: 0x02cf, 0xf2d: 0x02cf, 0xf2e: 0x02d2, 0xf2f: 0x02d2, - 0xf30: 0x02d2, 0xf31: 0x02d2, 0xf32: 0x02b1, 0xf33: 0x02b1, 0xf34: 0x02b1, 0xf35: 0x02b1, - 0xf36: 0x02ae, 0xf37: 0x02ae, 0xf38: 0x02ae, 0xf39: 0x02ae, 0xf3a: 0x02b4, 0xf3b: 0x02b4, - 0xf3c: 0x02b4, 0xf3d: 0x02b4, 0xf3e: 0x02b7, 0xf3f: 0x02b7, - // Block 0x3d, offset 0xf40 - 0xf40: 0x02b7, 0xf41: 0x02b7, 0xf42: 0x02c0, 0xf43: 0x02c0, 0xf44: 0x02bd, 0xf45: 0x02bd, - 0xf46: 0x02c3, 0xf47: 0x02c3, 0xf48: 0x02ba, 0xf49: 0x02ba, 0xf4a: 0x02c9, 0xf4b: 0x02c9, - 0xf4c: 0x02c6, 0xf4d: 0x02c6, 0xf4e: 0x02d5, 0xf4f: 0x02d5, 0xf50: 0x02d5, 0xf51: 0x02d5, - 0xf52: 0x02db, 0xf53: 0x02db, 0xf54: 0x02db, 0xf55: 0x02db, 0xf56: 0x02e1, 0xf57: 0x02e1, - 0xf58: 0x02e1, 0xf59: 0x02e1, 0xf5a: 0x02de, 0xf5b: 0x02de, 0xf5c: 0x02de, 0xf5d: 0x02de, - 0xf5e: 0x02e4, 0xf5f: 0x02e4, 0xf60: 0x02e7, 0xf61: 0x02e7, 0xf62: 0x02e7, 0xf63: 0x02e7, - 0xf64: 0x446e, 0xf65: 0x446e, 0xf66: 0x02ed, 0xf67: 0x02ed, 0xf68: 0x02ed, 0xf69: 0x02ed, - 0xf6a: 0x02ea, 0xf6b: 0x02ea, 0xf6c: 0x02ea, 0xf6d: 0x02ea, 0xf6e: 0x0308, 0xf6f: 0x0308, - 0xf70: 0x4468, 0xf71: 0x4468, - // Block 0x3e, offset 0xf80 - 0xf93: 0x02d8, 0xf94: 0x02d8, 0xf95: 0x02d8, 0xf96: 0x02d8, 0xf97: 0x02f6, - 0xf98: 0x02f6, 0xf99: 0x02f3, 0xf9a: 0x02f3, 0xf9b: 0x02f9, 0xf9c: 0x02f9, 0xf9d: 0x204f, - 0xf9e: 0x02ff, 0xf9f: 0x02ff, 0xfa0: 0x02f0, 0xfa1: 0x02f0, 0xfa2: 0x02fc, 0xfa3: 0x02fc, - 0xfa4: 0x0305, 0xfa5: 0x0305, 0xfa6: 0x0305, 0xfa7: 0x0305, 0xfa8: 0x028d, 0xfa9: 0x028d, - 0xfaa: 0x25aa, 0xfab: 0x25aa, 0xfac: 0x261a, 0xfad: 0x261a, 0xfae: 0x25e9, 0xfaf: 0x25e9, - 0xfb0: 0x2605, 0xfb1: 0x2605, 0xfb2: 0x25fe, 0xfb3: 0x25fe, 0xfb4: 0x260c, 0xfb5: 0x260c, - 0xfb6: 0x2613, 0xfb7: 0x2613, 0xfb8: 0x2613, 0xfb9: 0x25f0, 0xfba: 0x25f0, 0xfbb: 0x25f0, - 0xfbc: 0x0302, 0xfbd: 0x0302, 0xfbe: 0x0302, 0xfbf: 0x0302, - // Block 0x3f, offset 0xfc0 - 0xfc0: 0x25b1, 0xfc1: 0x25b8, 0xfc2: 0x25d4, 0xfc3: 0x25f0, 0xfc4: 0x25f7, 0xfc5: 0x1d89, - 0xfc6: 0x1d8e, 0xfc7: 0x1d93, 0xfc8: 0x1da2, 0xfc9: 0x1db1, 0xfca: 0x1db6, 0xfcb: 0x1dbb, - 0xfcc: 0x1dc0, 0xfcd: 0x1dc5, 0xfce: 0x1dd4, 0xfcf: 0x1de3, 0xfd0: 0x1de8, 0xfd1: 0x1ded, - 0xfd2: 0x1dfc, 0xfd3: 0x1e0b, 0xfd4: 0x1e10, 0xfd5: 0x1e15, 0xfd6: 0x1e1a, 0xfd7: 0x1e29, - 0xfd8: 0x1e2e, 0xfd9: 0x1e3d, 0xfda: 0x1e42, 0xfdb: 0x1e47, 0xfdc: 0x1e56, 0xfdd: 0x1e5b, - 0xfde: 0x1e60, 0xfdf: 0x1e6a, 0xfe0: 0x1ea6, 0xfe1: 0x1eb5, 0xfe2: 0x1ec4, 0xfe3: 0x1ec9, - 0xfe4: 0x1ece, 0xfe5: 0x1ed8, 0xfe6: 0x1ee7, 0xfe7: 0x1eec, 0xfe8: 0x1efb, 0xfe9: 0x1f00, - 0xfea: 0x1f05, 0xfeb: 0x1f14, 0xfec: 0x1f19, 0xfed: 0x1f28, 0xfee: 0x1f2d, 0xfef: 0x1f32, - 0xff0: 0x1f37, 0xff1: 0x1f3c, 0xff2: 0x1f41, 0xff3: 0x1f46, 0xff4: 0x1f4b, 0xff5: 0x1f50, - 0xff6: 0x1f55, 0xff7: 0x1f5a, 0xff8: 0x1f5f, 0xff9: 0x1f64, 0xffa: 0x1f69, 0xffb: 0x1f6e, - 0xffc: 0x1f73, 0xffd: 0x1f78, 0xffe: 0x1f7d, 0xfff: 0x1f87, - // Block 0x40, offset 0x1000 - 0x1000: 0x1f8c, 0x1001: 0x1f91, 0x1002: 0x1f96, 0x1003: 0x1fa0, 0x1004: 0x1fa5, 0x1005: 0x1faf, - 0x1006: 0x1fb4, 0x1007: 0x1fb9, 0x1008: 0x1fbe, 0x1009: 0x1fc3, 0x100a: 0x1fc8, 0x100b: 0x1fcd, - 0x100c: 0x1fd2, 0x100d: 0x1fd7, 0x100e: 0x1fe6, 0x100f: 0x1ff5, 0x1010: 0x1ffa, 0x1011: 0x1fff, - 0x1012: 0x2004, 0x1013: 0x2009, 0x1014: 0x200e, 0x1015: 0x2018, 0x1016: 0x201d, 0x1017: 0x2022, - 0x1018: 0x2031, 0x1019: 0x2040, 0x101a: 0x2045, 0x101b: 0x4420, 0x101c: 0x4426, 0x101d: 0x445c, - 0x101e: 0x44b3, 0x101f: 0x44ba, 0x1020: 0x44c1, 0x1021: 0x44c8, 0x1022: 0x44cf, 0x1023: 0x44d6, - 0x1024: 0x25c6, 0x1025: 0x25cd, 0x1026: 0x25d4, 0x1027: 0x25db, 0x1028: 0x25f0, 0x1029: 0x25f7, - 0x102a: 0x1d98, 0x102b: 0x1d9d, 0x102c: 0x1da2, 0x102d: 0x1da7, 0x102e: 0x1db1, 0x102f: 0x1db6, - 0x1030: 0x1dca, 0x1031: 0x1dcf, 0x1032: 0x1dd4, 0x1033: 0x1dd9, 0x1034: 0x1de3, 0x1035: 0x1de8, - 0x1036: 0x1df2, 0x1037: 0x1df7, 0x1038: 0x1dfc, 0x1039: 0x1e01, 0x103a: 0x1e0b, 0x103b: 0x1e10, - 0x103c: 0x1f3c, 0x103d: 0x1f41, 0x103e: 0x1f50, 0x103f: 0x1f55, - // Block 0x41, offset 0x1040 - 0x1040: 0x1f5a, 0x1041: 0x1f6e, 0x1042: 0x1f73, 0x1043: 0x1f78, 0x1044: 0x1f7d, 0x1045: 0x1f96, - 0x1046: 0x1fa0, 0x1047: 0x1fa5, 0x1048: 0x1faa, 0x1049: 0x1fbe, 0x104a: 0x1fdc, 0x104b: 0x1fe1, - 0x104c: 0x1fe6, 0x104d: 0x1feb, 0x104e: 0x1ff5, 0x104f: 0x1ffa, 0x1050: 0x445c, 0x1051: 0x2027, - 0x1052: 0x202c, 0x1053: 0x2031, 0x1054: 0x2036, 0x1055: 0x2040, 0x1056: 0x2045, 0x1057: 0x25b1, - 0x1058: 0x25b8, 0x1059: 0x25bf, 0x105a: 0x25d4, 0x105b: 0x25e2, 0x105c: 0x1d89, 0x105d: 0x1d8e, - 0x105e: 0x1d93, 0x105f: 0x1da2, 0x1060: 0x1dac, 0x1061: 0x1dbb, 0x1062: 0x1dc0, 0x1063: 0x1dc5, - 0x1064: 0x1dd4, 0x1065: 0x1dde, 0x1066: 0x1dfc, 0x1067: 0x1e15, 0x1068: 0x1e1a, 0x1069: 0x1e29, - 0x106a: 0x1e2e, 0x106b: 0x1e3d, 0x106c: 0x1e47, 0x106d: 0x1e56, 0x106e: 0x1e5b, 0x106f: 0x1e60, - 0x1070: 0x1e6a, 0x1071: 0x1ea6, 0x1072: 0x1eab, 0x1073: 0x1eb5, 0x1074: 0x1ec4, 0x1075: 0x1ec9, - 0x1076: 0x1ece, 0x1077: 0x1ed8, 0x1078: 0x1ee7, 0x1079: 0x1efb, 0x107a: 0x1f00, 0x107b: 0x1f05, - 0x107c: 0x1f14, 0x107d: 0x1f19, 0x107e: 0x1f28, 0x107f: 0x1f2d, - // Block 0x42, offset 0x1080 - 0x1080: 0x1f32, 0x1081: 0x1f37, 0x1082: 0x1f46, 0x1083: 0x1f4b, 0x1084: 0x1f5f, 0x1085: 0x1f64, - 0x1086: 0x1f69, 0x1087: 0x1f6e, 0x1088: 0x1f73, 0x1089: 0x1f87, 0x108a: 0x1f8c, 0x108b: 0x1f91, - 0x108c: 0x1f96, 0x108d: 0x1f9b, 0x108e: 0x1faf, 0x108f: 0x1fb4, 0x1090: 0x1fb9, 0x1091: 0x1fbe, - 0x1092: 0x1fcd, 0x1093: 0x1fd2, 0x1094: 0x1fd7, 0x1095: 0x1fe6, 0x1096: 0x1ff0, 0x1097: 0x1fff, - 0x1098: 0x2004, 0x1099: 0x4450, 0x109a: 0x2018, 0x109b: 0x201d, 0x109c: 0x2022, 0x109d: 0x2031, - 0x109e: 0x203b, 0x109f: 0x25d4, 0x10a0: 0x25e2, 0x10a1: 0x1da2, 0x10a2: 0x1dac, 0x10a3: 0x1dd4, - 0x10a4: 0x1dde, 0x10a5: 0x1dfc, 0x10a6: 0x1e06, 0x10a7: 0x1e6a, 0x10a8: 0x1e6f, 0x10a9: 0x1e92, - 0x10aa: 0x1e97, 0x10ab: 0x1f6e, 0x10ac: 0x1f73, 0x10ad: 0x1f96, 0x10ae: 0x1fe6, 0x10af: 0x1ff0, - 0x10b0: 0x2031, 0x10b1: 0x203b, 0x10b2: 0x4504, 0x10b3: 0x450c, 0x10b4: 0x4514, 0x10b5: 0x1ef1, - 0x10b6: 0x1ef6, 0x10b7: 0x1f0a, 0x10b8: 0x1f0f, 0x10b9: 0x1f1e, 0x10ba: 0x1f23, 0x10bb: 0x1e74, - 0x10bc: 0x1e79, 0x10bd: 0x1e9c, 0x10be: 0x1ea1, 0x10bf: 0x1e33, - // Block 0x43, offset 0x10c0 - 0x10c0: 0x1e38, 0x10c1: 0x1e1f, 0x10c2: 0x1e24, 0x10c3: 0x1e4c, 0x10c4: 0x1e51, 0x10c5: 0x1eba, - 0x10c6: 0x1ebf, 0x10c7: 0x1edd, 0x10c8: 0x1ee2, 0x10c9: 0x1e7e, 0x10ca: 0x1e83, 0x10cb: 0x1e88, - 0x10cc: 0x1e92, 0x10cd: 0x1e8d, 0x10ce: 0x1e65, 0x10cf: 0x1eb0, 0x10d0: 0x1ed3, 0x10d1: 0x1ef1, - 0x10d2: 0x1ef6, 0x10d3: 0x1f0a, 0x10d4: 0x1f0f, 0x10d5: 0x1f1e, 0x10d6: 0x1f23, 0x10d7: 0x1e74, - 0x10d8: 0x1e79, 0x10d9: 0x1e9c, 0x10da: 0x1ea1, 0x10db: 0x1e33, 0x10dc: 0x1e38, 0x10dd: 0x1e1f, - 0x10de: 0x1e24, 0x10df: 0x1e4c, 0x10e0: 0x1e51, 0x10e1: 0x1eba, 0x10e2: 0x1ebf, 0x10e3: 0x1edd, - 0x10e4: 0x1ee2, 0x10e5: 0x1e7e, 0x10e6: 0x1e83, 0x10e7: 0x1e88, 0x10e8: 0x1e92, 0x10e9: 0x1e8d, - 0x10ea: 0x1e65, 0x10eb: 0x1eb0, 0x10ec: 0x1ed3, 0x10ed: 0x1e7e, 0x10ee: 0x1e83, 0x10ef: 0x1e88, - 0x10f0: 0x1e92, 0x10f1: 0x1e6f, 0x10f2: 0x1e97, 0x10f3: 0x1eec, 0x10f4: 0x1e56, 0x10f5: 0x1e5b, - 0x10f6: 0x1e60, 0x10f7: 0x1e7e, 0x10f8: 0x1e83, 0x10f9: 0x1e88, 0x10fa: 0x1eec, 0x10fb: 0x1efb, - 0x10fc: 0x4408, 0x10fd: 0x4408, - // Block 0x44, offset 0x1100 - 0x1110: 0x2311, 0x1111: 0x2326, - 0x1112: 0x2326, 0x1113: 0x232d, 0x1114: 0x2334, 0x1115: 0x2349, 0x1116: 0x2350, 0x1117: 0x2357, - 0x1118: 0x237a, 0x1119: 0x237a, 0x111a: 0x239d, 0x111b: 0x2396, 0x111c: 0x23b2, 0x111d: 0x23a4, - 0x111e: 0x23ab, 0x111f: 0x23ce, 0x1120: 0x23ce, 0x1121: 0x23c7, 0x1122: 0x23d5, 0x1123: 0x23d5, - 0x1124: 0x23ff, 0x1125: 0x23ff, 0x1126: 0x241b, 0x1127: 0x23e3, 0x1128: 0x23e3, 0x1129: 0x23dc, - 0x112a: 0x23f1, 0x112b: 0x23f1, 0x112c: 0x23f8, 0x112d: 0x23f8, 0x112e: 0x2422, 0x112f: 0x2430, - 0x1130: 0x2430, 0x1131: 0x2437, 0x1132: 0x2437, 0x1133: 0x243e, 0x1134: 0x2445, 0x1135: 0x244c, - 0x1136: 0x2453, 0x1137: 0x2453, 0x1138: 0x245a, 0x1139: 0x2468, 0x113a: 0x2476, 0x113b: 0x246f, - 0x113c: 0x247d, 0x113d: 0x247d, 0x113e: 0x2492, 0x113f: 0x2499, - // Block 0x45, offset 0x1140 - 0x1140: 0x24ca, 0x1141: 0x24d8, 0x1142: 0x24d1, 0x1143: 0x24b5, 0x1144: 0x24b5, 0x1145: 0x24df, - 0x1146: 0x24df, 0x1147: 0x24e6, 0x1148: 0x24e6, 0x1149: 0x2510, 0x114a: 0x2517, 0x114b: 0x251e, - 0x114c: 0x24f4, 0x114d: 0x2502, 0x114e: 0x2525, 0x114f: 0x252c, - 0x1152: 0x24fb, 0x1153: 0x2580, 0x1154: 0x2587, 0x1155: 0x255d, 0x1156: 0x2564, 0x1157: 0x2548, - 0x1158: 0x2548, 0x1159: 0x254f, 0x115a: 0x2579, 0x115b: 0x2572, 0x115c: 0x259c, 0x115d: 0x259c, - 0x115e: 0x230a, 0x115f: 0x231f, 0x1160: 0x2318, 0x1161: 0x2342, 0x1162: 0x233b, 0x1163: 0x2365, - 0x1164: 0x235e, 0x1165: 0x2388, 0x1166: 0x236c, 0x1167: 0x2381, 0x1168: 0x23b9, 0x1169: 0x2406, - 0x116a: 0x23ea, 0x116b: 0x2429, 0x116c: 0x24c3, 0x116d: 0x24ed, 0x116e: 0x2595, 0x116f: 0x258e, - 0x1170: 0x25a3, 0x1171: 0x253a, 0x1172: 0x24a0, 0x1173: 0x256b, 0x1174: 0x2492, 0x1175: 0x24ca, - 0x1176: 0x2461, 0x1177: 0x24ae, 0x1178: 0x2541, 0x1179: 0x2533, 0x117a: 0x24bc, 0x117b: 0x24a7, - 0x117c: 0x24bc, 0x117d: 0x2541, 0x117e: 0x2373, 0x117f: 0x238f, - // Block 0x46, offset 0x1180 - 0x1180: 0x2509, 0x1181: 0x2484, 0x1182: 0x2303, 0x1183: 0x24a7, 0x1184: 0x244c, 0x1185: 0x241b, - 0x1186: 0x23c0, 0x1187: 0x2556, - 0x11b0: 0x2414, 0x11b1: 0x248b, 0x11b2: 0x27bf, 0x11b3: 0x27b6, 0x11b4: 0x27ec, 0x11b5: 0x27da, - 0x11b6: 0x27c8, 0x11b7: 0x27e3, 0x11b8: 0x27f5, 0x11b9: 0x240d, 0x11ba: 0x2c7c, 0x11bb: 0x2afc, - 0x11bc: 0x27d1, - // Block 0x47, offset 0x11c0 - 0x11d0: 0x0019, 0x11d1: 0x0483, - 0x11d2: 0x0487, 0x11d3: 0x0035, 0x11d4: 0x0037, 0x11d5: 0x0003, 0x11d6: 0x003f, 0x11d7: 0x04bf, - 0x11d8: 0x04c3, 0x11d9: 0x1b5c, - 0x11e0: 0x8132, 0x11e1: 0x8132, 0x11e2: 0x8132, 0x11e3: 0x8132, - 0x11e4: 0x8132, 0x11e5: 0x8132, 0x11e6: 0x8132, 0x11e7: 0x812d, 0x11e8: 0x812d, 0x11e9: 0x812d, - 0x11ea: 0x812d, 0x11eb: 0x812d, 0x11ec: 0x812d, 0x11ed: 0x812d, 0x11ee: 0x8132, 0x11ef: 0x8132, - 0x11f0: 0x1873, 0x11f1: 0x0443, 0x11f2: 0x043f, 0x11f3: 0x007f, 0x11f4: 0x007f, 0x11f5: 0x0011, - 0x11f6: 0x0013, 0x11f7: 0x00b7, 0x11f8: 0x00bb, 0x11f9: 0x04b7, 0x11fa: 0x04bb, 0x11fb: 0x04ab, - 0x11fc: 0x04af, 0x11fd: 0x0493, 0x11fe: 0x0497, 0x11ff: 0x048b, - // Block 0x48, offset 0x1200 - 0x1200: 0x048f, 0x1201: 0x049b, 0x1202: 0x049f, 0x1203: 0x04a3, 0x1204: 0x04a7, - 0x1207: 0x0077, 0x1208: 0x007b, 0x1209: 0x4269, 0x120a: 0x4269, 0x120b: 0x4269, - 0x120c: 0x4269, 0x120d: 0x007f, 0x120e: 0x007f, 0x120f: 0x007f, 0x1210: 0x0019, 0x1211: 0x0483, - 0x1212: 0x001d, 0x1214: 0x0037, 0x1215: 0x0035, 0x1216: 0x003f, 0x1217: 0x0003, - 0x1218: 0x0443, 0x1219: 0x0011, 0x121a: 0x0013, 0x121b: 0x00b7, 0x121c: 0x00bb, 0x121d: 0x04b7, - 0x121e: 0x04bb, 0x121f: 0x0007, 0x1220: 0x000d, 0x1221: 0x0015, 0x1222: 0x0017, 0x1223: 0x001b, - 0x1224: 0x0039, 0x1225: 0x003d, 0x1226: 0x003b, 0x1228: 0x0079, 0x1229: 0x0009, - 0x122a: 0x000b, 0x122b: 0x0041, - 0x1230: 0x42aa, 0x1231: 0x442c, 0x1232: 0x42af, 0x1234: 0x42b4, - 0x1236: 0x42b9, 0x1237: 0x4432, 0x1238: 0x42be, 0x1239: 0x4438, 0x123a: 0x42c3, 0x123b: 0x443e, - 0x123c: 0x42c8, 0x123d: 0x4444, 0x123e: 0x42cd, 0x123f: 0x444a, - // Block 0x49, offset 0x1240 - 0x1240: 0x0236, 0x1241: 0x440e, 0x1242: 0x440e, 0x1243: 0x4414, 0x1244: 0x4414, 0x1245: 0x4456, - 0x1246: 0x4456, 0x1247: 0x441a, 0x1248: 0x441a, 0x1249: 0x4462, 0x124a: 0x4462, 0x124b: 0x4462, - 0x124c: 0x4462, 0x124d: 0x0239, 0x124e: 0x0239, 0x124f: 0x023c, 0x1250: 0x023c, 0x1251: 0x023c, - 0x1252: 0x023c, 0x1253: 0x023f, 0x1254: 0x023f, 0x1255: 0x0242, 0x1256: 0x0242, 0x1257: 0x0242, - 0x1258: 0x0242, 0x1259: 0x0245, 0x125a: 0x0245, 0x125b: 0x0245, 0x125c: 0x0245, 0x125d: 0x0248, - 0x125e: 0x0248, 0x125f: 0x0248, 0x1260: 0x0248, 0x1261: 0x024b, 0x1262: 0x024b, 0x1263: 0x024b, - 0x1264: 0x024b, 0x1265: 0x024e, 0x1266: 0x024e, 0x1267: 0x024e, 0x1268: 0x024e, 0x1269: 0x0251, - 0x126a: 0x0251, 0x126b: 0x0254, 0x126c: 0x0254, 0x126d: 0x0257, 0x126e: 0x0257, 0x126f: 0x025a, - 0x1270: 0x025a, 0x1271: 0x025d, 0x1272: 0x025d, 0x1273: 0x025d, 0x1274: 0x025d, 0x1275: 0x0260, - 0x1276: 0x0260, 0x1277: 0x0260, 0x1278: 0x0260, 0x1279: 0x0263, 0x127a: 0x0263, 0x127b: 0x0263, - 0x127c: 0x0263, 0x127d: 0x0266, 0x127e: 0x0266, 0x127f: 0x0266, - // Block 0x4a, offset 0x1280 - 0x1280: 0x0266, 0x1281: 0x0269, 0x1282: 0x0269, 0x1283: 0x0269, 0x1284: 0x0269, 0x1285: 0x026c, - 0x1286: 0x026c, 0x1287: 0x026c, 0x1288: 0x026c, 0x1289: 0x026f, 0x128a: 0x026f, 0x128b: 0x026f, - 0x128c: 0x026f, 0x128d: 0x0272, 0x128e: 0x0272, 0x128f: 0x0272, 0x1290: 0x0272, 0x1291: 0x0275, - 0x1292: 0x0275, 0x1293: 0x0275, 0x1294: 0x0275, 0x1295: 0x0278, 0x1296: 0x0278, 0x1297: 0x0278, - 0x1298: 0x0278, 0x1299: 0x027b, 0x129a: 0x027b, 0x129b: 0x027b, 0x129c: 0x027b, 0x129d: 0x027e, - 0x129e: 0x027e, 0x129f: 0x027e, 0x12a0: 0x027e, 0x12a1: 0x0281, 0x12a2: 0x0281, 0x12a3: 0x0281, - 0x12a4: 0x0281, 0x12a5: 0x0284, 0x12a6: 0x0284, 0x12a7: 0x0284, 0x12a8: 0x0284, 0x12a9: 0x0287, - 0x12aa: 0x0287, 0x12ab: 0x0287, 0x12ac: 0x0287, 0x12ad: 0x028a, 0x12ae: 0x028a, 0x12af: 0x028d, - 0x12b0: 0x028d, 0x12b1: 0x0290, 0x12b2: 0x0290, 0x12b3: 0x0290, 0x12b4: 0x0290, 0x12b5: 0x2e00, - 0x12b6: 0x2e00, 0x12b7: 0x2e08, 0x12b8: 0x2e08, 0x12b9: 0x2e10, 0x12ba: 0x2e10, 0x12bb: 0x1f82, - 0x12bc: 0x1f82, - // Block 0x4b, offset 0x12c0 - 0x12c0: 0x0081, 0x12c1: 0x0083, 0x12c2: 0x0085, 0x12c3: 0x0087, 0x12c4: 0x0089, 0x12c5: 0x008b, - 0x12c6: 0x008d, 0x12c7: 0x008f, 0x12c8: 0x0091, 0x12c9: 0x0093, 0x12ca: 0x0095, 0x12cb: 0x0097, - 0x12cc: 0x0099, 0x12cd: 0x009b, 0x12ce: 0x009d, 0x12cf: 0x009f, 0x12d0: 0x00a1, 0x12d1: 0x00a3, - 0x12d2: 0x00a5, 0x12d3: 0x00a7, 0x12d4: 0x00a9, 0x12d5: 0x00ab, 0x12d6: 0x00ad, 0x12d7: 0x00af, - 0x12d8: 0x00b1, 0x12d9: 0x00b3, 0x12da: 0x00b5, 0x12db: 0x00b7, 0x12dc: 0x00b9, 0x12dd: 0x00bb, - 0x12de: 0x00bd, 0x12df: 0x0477, 0x12e0: 0x047b, 0x12e1: 0x0487, 0x12e2: 0x049b, 0x12e3: 0x049f, - 0x12e4: 0x0483, 0x12e5: 0x05ab, 0x12e6: 0x05a3, 0x12e7: 0x04c7, 0x12e8: 0x04cf, 0x12e9: 0x04d7, - 0x12ea: 0x04df, 0x12eb: 0x04e7, 0x12ec: 0x056b, 0x12ed: 0x0573, 0x12ee: 0x057b, 0x12ef: 0x051f, - 0x12f0: 0x05af, 0x12f1: 0x04cb, 0x12f2: 0x04d3, 0x12f3: 0x04db, 0x12f4: 0x04e3, 0x12f5: 0x04eb, - 0x12f6: 0x04ef, 0x12f7: 0x04f3, 0x12f8: 0x04f7, 0x12f9: 0x04fb, 0x12fa: 0x04ff, 0x12fb: 0x0503, - 0x12fc: 0x0507, 0x12fd: 0x050b, 0x12fe: 0x050f, 0x12ff: 0x0513, - // Block 0x4c, offset 0x1300 - 0x1300: 0x0517, 0x1301: 0x051b, 0x1302: 0x0523, 0x1303: 0x0527, 0x1304: 0x052b, 0x1305: 0x052f, - 0x1306: 0x0533, 0x1307: 0x0537, 0x1308: 0x053b, 0x1309: 0x053f, 0x130a: 0x0543, 0x130b: 0x0547, - 0x130c: 0x054b, 0x130d: 0x054f, 0x130e: 0x0553, 0x130f: 0x0557, 0x1310: 0x055b, 0x1311: 0x055f, - 0x1312: 0x0563, 0x1313: 0x0567, 0x1314: 0x056f, 0x1315: 0x0577, 0x1316: 0x057f, 0x1317: 0x0583, - 0x1318: 0x0587, 0x1319: 0x058b, 0x131a: 0x058f, 0x131b: 0x0593, 0x131c: 0x0597, 0x131d: 0x05a7, - 0x131e: 0x4a78, 0x131f: 0x4a7e, 0x1320: 0x03c3, 0x1321: 0x0313, 0x1322: 0x0317, 0x1323: 0x4a3b, - 0x1324: 0x031b, 0x1325: 0x4a41, 0x1326: 0x4a47, 0x1327: 0x031f, 0x1328: 0x0323, 0x1329: 0x0327, - 0x132a: 0x4a4d, 0x132b: 0x4a53, 0x132c: 0x4a59, 0x132d: 0x4a5f, 0x132e: 0x4a65, 0x132f: 0x4a6b, - 0x1330: 0x0367, 0x1331: 0x032b, 0x1332: 0x032f, 0x1333: 0x0333, 0x1334: 0x037b, 0x1335: 0x0337, - 0x1336: 0x033b, 0x1337: 0x033f, 0x1338: 0x0343, 0x1339: 0x0347, 0x133a: 0x034b, 0x133b: 0x034f, - 0x133c: 0x0353, 0x133d: 0x0357, 0x133e: 0x035b, - // Block 0x4d, offset 0x1340 - 0x1342: 0x49bd, 0x1343: 0x49c3, 0x1344: 0x49c9, 0x1345: 0x49cf, - 0x1346: 0x49d5, 0x1347: 0x49db, 0x134a: 0x49e1, 0x134b: 0x49e7, - 0x134c: 0x49ed, 0x134d: 0x49f3, 0x134e: 0x49f9, 0x134f: 0x49ff, - 0x1352: 0x4a05, 0x1353: 0x4a0b, 0x1354: 0x4a11, 0x1355: 0x4a17, 0x1356: 0x4a1d, 0x1357: 0x4a23, - 0x135a: 0x4a29, 0x135b: 0x4a2f, 0x135c: 0x4a35, - 0x1360: 0x00bf, 0x1361: 0x00c2, 0x1362: 0x00cb, 0x1363: 0x4264, - 0x1364: 0x00c8, 0x1365: 0x00c5, 0x1366: 0x0447, 0x1368: 0x046b, 0x1369: 0x044b, - 0x136a: 0x044f, 0x136b: 0x0453, 0x136c: 0x0457, 0x136d: 0x046f, 0x136e: 0x0473, - // Block 0x4e, offset 0x1380 - 0x1380: 0x0063, 0x1381: 0x0065, 0x1382: 0x0067, 0x1383: 0x0069, 0x1384: 0x006b, 0x1385: 0x006d, - 0x1386: 0x006f, 0x1387: 0x0071, 0x1388: 0x0073, 0x1389: 0x0075, 0x138a: 0x0083, 0x138b: 0x0085, - 0x138c: 0x0087, 0x138d: 0x0089, 0x138e: 0x008b, 0x138f: 0x008d, 0x1390: 0x008f, 0x1391: 0x0091, - 0x1392: 0x0093, 0x1393: 0x0095, 0x1394: 0x0097, 0x1395: 0x0099, 0x1396: 0x009b, 0x1397: 0x009d, - 0x1398: 0x009f, 0x1399: 0x00a1, 0x139a: 0x00a3, 0x139b: 0x00a5, 0x139c: 0x00a7, 0x139d: 0x00a9, - 0x139e: 0x00ab, 0x139f: 0x00ad, 0x13a0: 0x00af, 0x13a1: 0x00b1, 0x13a2: 0x00b3, 0x13a3: 0x00b5, - 0x13a4: 0x00dd, 0x13a5: 0x00f2, 0x13a8: 0x0173, 0x13a9: 0x0176, - 0x13aa: 0x0179, 0x13ab: 0x017c, 0x13ac: 0x017f, 0x13ad: 0x0182, 0x13ae: 0x0185, 0x13af: 0x0188, - 0x13b0: 0x018b, 0x13b1: 0x018e, 0x13b2: 0x0191, 0x13b3: 0x0194, 0x13b4: 0x0197, 0x13b5: 0x019a, - 0x13b6: 0x019d, 0x13b7: 0x01a0, 0x13b8: 0x01a3, 0x13b9: 0x0188, 0x13ba: 0x01a6, 0x13bb: 0x01a9, - 0x13bc: 0x01ac, 0x13bd: 0x01af, 0x13be: 0x01b2, 0x13bf: 0x01b5, - // Block 0x4f, offset 0x13c0 - 0x13c0: 0x01fd, 0x13c1: 0x0200, 0x13c2: 0x0203, 0x13c3: 0x045b, 0x13c4: 0x01c7, 0x13c5: 0x01d0, - 0x13c6: 0x01d6, 0x13c7: 0x01fa, 0x13c8: 0x01eb, 0x13c9: 0x01e8, 0x13ca: 0x0206, 0x13cb: 0x0209, - 0x13ce: 0x0021, 0x13cf: 0x0023, 0x13d0: 0x0025, 0x13d1: 0x0027, - 0x13d2: 0x0029, 0x13d3: 0x002b, 0x13d4: 0x002d, 0x13d5: 0x002f, 0x13d6: 0x0031, 0x13d7: 0x0033, - 0x13d8: 0x0021, 0x13d9: 0x0023, 0x13da: 0x0025, 0x13db: 0x0027, 0x13dc: 0x0029, 0x13dd: 0x002b, - 0x13de: 0x002d, 0x13df: 0x002f, 0x13e0: 0x0031, 0x13e1: 0x0033, 0x13e2: 0x0021, 0x13e3: 0x0023, - 0x13e4: 0x0025, 0x13e5: 0x0027, 0x13e6: 0x0029, 0x13e7: 0x002b, 0x13e8: 0x002d, 0x13e9: 0x002f, - 0x13ea: 0x0031, 0x13eb: 0x0033, 0x13ec: 0x0021, 0x13ed: 0x0023, 0x13ee: 0x0025, 0x13ef: 0x0027, - 0x13f0: 0x0029, 0x13f1: 0x002b, 0x13f2: 0x002d, 0x13f3: 0x002f, 0x13f4: 0x0031, 0x13f5: 0x0033, - 0x13f6: 0x0021, 0x13f7: 0x0023, 0x13f8: 0x0025, 0x13f9: 0x0027, 0x13fa: 0x0029, 0x13fb: 0x002b, - 0x13fc: 0x002d, 0x13fd: 0x002f, 0x13fe: 0x0031, 0x13ff: 0x0033, - // Block 0x50, offset 0x1400 - 0x1400: 0x0239, 0x1401: 0x023c, 0x1402: 0x0248, 0x1403: 0x0251, 0x1405: 0x028a, - 0x1406: 0x025a, 0x1407: 0x024b, 0x1408: 0x0269, 0x1409: 0x0290, 0x140a: 0x027b, 0x140b: 0x027e, - 0x140c: 0x0281, 0x140d: 0x0284, 0x140e: 0x025d, 0x140f: 0x026f, 0x1410: 0x0275, 0x1411: 0x0263, - 0x1412: 0x0278, 0x1413: 0x0257, 0x1414: 0x0260, 0x1415: 0x0242, 0x1416: 0x0245, 0x1417: 0x024e, - 0x1418: 0x0254, 0x1419: 0x0266, 0x141a: 0x026c, 0x141b: 0x0272, 0x141c: 0x0293, 0x141d: 0x02e4, - 0x141e: 0x02cc, 0x141f: 0x0296, 0x1421: 0x023c, 0x1422: 0x0248, - 0x1424: 0x0287, 0x1427: 0x024b, 0x1429: 0x0290, - 0x142a: 0x027b, 0x142b: 0x027e, 0x142c: 0x0281, 0x142d: 0x0284, 0x142e: 0x025d, 0x142f: 0x026f, - 0x1430: 0x0275, 0x1431: 0x0263, 0x1432: 0x0278, 0x1434: 0x0260, 0x1435: 0x0242, - 0x1436: 0x0245, 0x1437: 0x024e, 0x1439: 0x0266, 0x143b: 0x0272, - // Block 0x51, offset 0x1440 - 0x1442: 0x0248, - 0x1447: 0x024b, 0x1449: 0x0290, 0x144b: 0x027e, - 0x144d: 0x0284, 0x144e: 0x025d, 0x144f: 0x026f, 0x1451: 0x0263, - 0x1452: 0x0278, 0x1454: 0x0260, 0x1457: 0x024e, - 0x1459: 0x0266, 0x145b: 0x0272, 0x145d: 0x02e4, - 0x145f: 0x0296, 0x1461: 0x023c, 0x1462: 0x0248, - 0x1464: 0x0287, 0x1467: 0x024b, 0x1468: 0x0269, 0x1469: 0x0290, - 0x146a: 0x027b, 0x146c: 0x0281, 0x146d: 0x0284, 0x146e: 0x025d, 0x146f: 0x026f, - 0x1470: 0x0275, 0x1471: 0x0263, 0x1472: 0x0278, 0x1474: 0x0260, 0x1475: 0x0242, - 0x1476: 0x0245, 0x1477: 0x024e, 0x1479: 0x0266, 0x147a: 0x026c, 0x147b: 0x0272, - 0x147c: 0x0293, 0x147e: 0x02cc, - // Block 0x52, offset 0x1480 - 0x1480: 0x0239, 0x1481: 0x023c, 0x1482: 0x0248, 0x1483: 0x0251, 0x1484: 0x0287, 0x1485: 0x028a, - 0x1486: 0x025a, 0x1487: 0x024b, 0x1488: 0x0269, 0x1489: 0x0290, 0x148b: 0x027e, - 0x148c: 0x0281, 0x148d: 0x0284, 0x148e: 0x025d, 0x148f: 0x026f, 0x1490: 0x0275, 0x1491: 0x0263, - 0x1492: 0x0278, 0x1493: 0x0257, 0x1494: 0x0260, 0x1495: 0x0242, 0x1496: 0x0245, 0x1497: 0x024e, - 0x1498: 0x0254, 0x1499: 0x0266, 0x149a: 0x026c, 0x149b: 0x0272, - 0x14a1: 0x023c, 0x14a2: 0x0248, 0x14a3: 0x0251, - 0x14a5: 0x028a, 0x14a6: 0x025a, 0x14a7: 0x024b, 0x14a8: 0x0269, 0x14a9: 0x0290, - 0x14ab: 0x027e, 0x14ac: 0x0281, 0x14ad: 0x0284, 0x14ae: 0x025d, 0x14af: 0x026f, - 0x14b0: 0x0275, 0x14b1: 0x0263, 0x14b2: 0x0278, 0x14b3: 0x0257, 0x14b4: 0x0260, 0x14b5: 0x0242, - 0x14b6: 0x0245, 0x14b7: 0x024e, 0x14b8: 0x0254, 0x14b9: 0x0266, 0x14ba: 0x026c, 0x14bb: 0x0272, - // Block 0x53, offset 0x14c0 - 0x14c0: 0x1879, 0x14c1: 0x1876, 0x14c2: 0x187c, 0x14c3: 0x18a0, 0x14c4: 0x18c4, 0x14c5: 0x18e8, - 0x14c6: 0x190c, 0x14c7: 0x1915, 0x14c8: 0x191b, 0x14c9: 0x1921, 0x14ca: 0x1927, - 0x14d0: 0x1a8c, 0x14d1: 0x1a90, - 0x14d2: 0x1a94, 0x14d3: 0x1a98, 0x14d4: 0x1a9c, 0x14d5: 0x1aa0, 0x14d6: 0x1aa4, 0x14d7: 0x1aa8, - 0x14d8: 0x1aac, 0x14d9: 0x1ab0, 0x14da: 0x1ab4, 0x14db: 0x1ab8, 0x14dc: 0x1abc, 0x14dd: 0x1ac0, - 0x14de: 0x1ac4, 0x14df: 0x1ac8, 0x14e0: 0x1acc, 0x14e1: 0x1ad0, 0x14e2: 0x1ad4, 0x14e3: 0x1ad8, - 0x14e4: 0x1adc, 0x14e5: 0x1ae0, 0x14e6: 0x1ae4, 0x14e7: 0x1ae8, 0x14e8: 0x1aec, 0x14e9: 0x1af0, - 0x14ea: 0x271e, 0x14eb: 0x0047, 0x14ec: 0x0065, 0x14ed: 0x193c, 0x14ee: 0x19b1, - 0x14f0: 0x0043, 0x14f1: 0x0045, 0x14f2: 0x0047, 0x14f3: 0x0049, 0x14f4: 0x004b, 0x14f5: 0x004d, - 0x14f6: 0x004f, 0x14f7: 0x0051, 0x14f8: 0x0053, 0x14f9: 0x0055, 0x14fa: 0x0057, 0x14fb: 0x0059, - 0x14fc: 0x005b, 0x14fd: 0x005d, 0x14fe: 0x005f, 0x14ff: 0x0061, - // Block 0x54, offset 0x1500 - 0x1500: 0x26ad, 0x1501: 0x26c2, 0x1502: 0x0503, - 0x1510: 0x0c0f, 0x1511: 0x0a47, - 0x1512: 0x08d3, 0x1513: 0x45c4, 0x1514: 0x071b, 0x1515: 0x09ef, 0x1516: 0x132f, 0x1517: 0x09ff, - 0x1518: 0x0727, 0x1519: 0x0cd7, 0x151a: 0x0eaf, 0x151b: 0x0caf, 0x151c: 0x0827, 0x151d: 0x0b6b, - 0x151e: 0x07bf, 0x151f: 0x0cb7, 0x1520: 0x0813, 0x1521: 0x1117, 0x1522: 0x0f83, 0x1523: 0x138b, - 0x1524: 0x09d3, 0x1525: 0x090b, 0x1526: 0x0e63, 0x1527: 0x0c1b, 0x1528: 0x0c47, 0x1529: 0x06bf, - 0x152a: 0x06cb, 0x152b: 0x140b, 0x152c: 0x0adb, 0x152d: 0x06e7, 0x152e: 0x08ef, 0x152f: 0x0c3b, - 0x1530: 0x13b3, 0x1531: 0x0c13, 0x1532: 0x106f, 0x1533: 0x10ab, 0x1534: 0x08f7, 0x1535: 0x0e43, - 0x1536: 0x0d0b, 0x1537: 0x0d07, 0x1538: 0x0f97, 0x1539: 0x082b, 0x153a: 0x0957, 0x153b: 0x1443, - // Block 0x55, offset 0x1540 - 0x1540: 0x06fb, 0x1541: 0x06f3, 0x1542: 0x0703, 0x1543: 0x1647, 0x1544: 0x0747, 0x1545: 0x0757, - 0x1546: 0x075b, 0x1547: 0x0763, 0x1548: 0x076b, 0x1549: 0x076f, 0x154a: 0x077b, 0x154b: 0x0773, - 0x154c: 0x05b3, 0x154d: 0x165b, 0x154e: 0x078f, 0x154f: 0x0793, 0x1550: 0x0797, 0x1551: 0x07b3, - 0x1552: 0x164c, 0x1553: 0x05b7, 0x1554: 0x079f, 0x1555: 0x07bf, 0x1556: 0x1656, 0x1557: 0x07cf, - 0x1558: 0x07d7, 0x1559: 0x0737, 0x155a: 0x07df, 0x155b: 0x07e3, 0x155c: 0x1831, 0x155d: 0x07ff, - 0x155e: 0x0807, 0x155f: 0x05bf, 0x1560: 0x081f, 0x1561: 0x0823, 0x1562: 0x082b, 0x1563: 0x082f, - 0x1564: 0x05c3, 0x1565: 0x0847, 0x1566: 0x084b, 0x1567: 0x0857, 0x1568: 0x0863, 0x1569: 0x0867, - 0x156a: 0x086b, 0x156b: 0x0873, 0x156c: 0x0893, 0x156d: 0x0897, 0x156e: 0x089f, 0x156f: 0x08af, - 0x1570: 0x08b7, 0x1571: 0x08bb, 0x1572: 0x08bb, 0x1573: 0x08bb, 0x1574: 0x166a, 0x1575: 0x0e93, - 0x1576: 0x08cf, 0x1577: 0x08d7, 0x1578: 0x166f, 0x1579: 0x08e3, 0x157a: 0x08eb, 0x157b: 0x08f3, - 0x157c: 0x091b, 0x157d: 0x0907, 0x157e: 0x0913, 0x157f: 0x0917, - // Block 0x56, offset 0x1580 - 0x1580: 0x091f, 0x1581: 0x0927, 0x1582: 0x092b, 0x1583: 0x0933, 0x1584: 0x093b, 0x1585: 0x093f, - 0x1586: 0x093f, 0x1587: 0x0947, 0x1588: 0x094f, 0x1589: 0x0953, 0x158a: 0x095f, 0x158b: 0x0983, - 0x158c: 0x0967, 0x158d: 0x0987, 0x158e: 0x096b, 0x158f: 0x0973, 0x1590: 0x080b, 0x1591: 0x09cf, - 0x1592: 0x0997, 0x1593: 0x099b, 0x1594: 0x099f, 0x1595: 0x0993, 0x1596: 0x09a7, 0x1597: 0x09a3, - 0x1598: 0x09bb, 0x1599: 0x1674, 0x159a: 0x09d7, 0x159b: 0x09db, 0x159c: 0x09e3, 0x159d: 0x09ef, - 0x159e: 0x09f7, 0x159f: 0x0a13, 0x15a0: 0x1679, 0x15a1: 0x167e, 0x15a2: 0x0a1f, 0x15a3: 0x0a23, - 0x15a4: 0x0a27, 0x15a5: 0x0a1b, 0x15a6: 0x0a2f, 0x15a7: 0x05c7, 0x15a8: 0x05cb, 0x15a9: 0x0a37, - 0x15aa: 0x0a3f, 0x15ab: 0x0a3f, 0x15ac: 0x1683, 0x15ad: 0x0a5b, 0x15ae: 0x0a5f, 0x15af: 0x0a63, - 0x15b0: 0x0a6b, 0x15b1: 0x1688, 0x15b2: 0x0a73, 0x15b3: 0x0a77, 0x15b4: 0x0b4f, 0x15b5: 0x0a7f, - 0x15b6: 0x05cf, 0x15b7: 0x0a8b, 0x15b8: 0x0a9b, 0x15b9: 0x0aa7, 0x15ba: 0x0aa3, 0x15bb: 0x1692, - 0x15bc: 0x0aaf, 0x15bd: 0x1697, 0x15be: 0x0abb, 0x15bf: 0x0ab7, - // Block 0x57, offset 0x15c0 - 0x15c0: 0x0abf, 0x15c1: 0x0acf, 0x15c2: 0x0ad3, 0x15c3: 0x05d3, 0x15c4: 0x0ae3, 0x15c5: 0x0aeb, - 0x15c6: 0x0aef, 0x15c7: 0x0af3, 0x15c8: 0x05d7, 0x15c9: 0x169c, 0x15ca: 0x05db, 0x15cb: 0x0b0f, - 0x15cc: 0x0b13, 0x15cd: 0x0b17, 0x15ce: 0x0b1f, 0x15cf: 0x1863, 0x15d0: 0x0b37, 0x15d1: 0x16a6, - 0x15d2: 0x16a6, 0x15d3: 0x11d7, 0x15d4: 0x0b47, 0x15d5: 0x0b47, 0x15d6: 0x05df, 0x15d7: 0x16c9, - 0x15d8: 0x179b, 0x15d9: 0x0b57, 0x15da: 0x0b5f, 0x15db: 0x05e3, 0x15dc: 0x0b73, 0x15dd: 0x0b83, - 0x15de: 0x0b87, 0x15df: 0x0b8f, 0x15e0: 0x0b9f, 0x15e1: 0x05eb, 0x15e2: 0x05e7, 0x15e3: 0x0ba3, - 0x15e4: 0x16ab, 0x15e5: 0x0ba7, 0x15e6: 0x0bbb, 0x15e7: 0x0bbf, 0x15e8: 0x0bc3, 0x15e9: 0x0bbf, - 0x15ea: 0x0bcf, 0x15eb: 0x0bd3, 0x15ec: 0x0be3, 0x15ed: 0x0bdb, 0x15ee: 0x0bdf, 0x15ef: 0x0be7, - 0x15f0: 0x0beb, 0x15f1: 0x0bef, 0x15f2: 0x0bfb, 0x15f3: 0x0bff, 0x15f4: 0x0c17, 0x15f5: 0x0c1f, - 0x15f6: 0x0c2f, 0x15f7: 0x0c43, 0x15f8: 0x16ba, 0x15f9: 0x0c3f, 0x15fa: 0x0c33, 0x15fb: 0x0c4b, - 0x15fc: 0x0c53, 0x15fd: 0x0c67, 0x15fe: 0x16bf, 0x15ff: 0x0c6f, - // Block 0x58, offset 0x1600 - 0x1600: 0x0c63, 0x1601: 0x0c5b, 0x1602: 0x05ef, 0x1603: 0x0c77, 0x1604: 0x0c7f, 0x1605: 0x0c87, - 0x1606: 0x0c7b, 0x1607: 0x05f3, 0x1608: 0x0c97, 0x1609: 0x0c9f, 0x160a: 0x16c4, 0x160b: 0x0ccb, - 0x160c: 0x0cff, 0x160d: 0x0cdb, 0x160e: 0x05ff, 0x160f: 0x0ce7, 0x1610: 0x05fb, 0x1611: 0x05f7, - 0x1612: 0x07c3, 0x1613: 0x07c7, 0x1614: 0x0d03, 0x1615: 0x0ceb, 0x1616: 0x11ab, 0x1617: 0x0663, - 0x1618: 0x0d0f, 0x1619: 0x0d13, 0x161a: 0x0d17, 0x161b: 0x0d2b, 0x161c: 0x0d23, 0x161d: 0x16dd, - 0x161e: 0x0603, 0x161f: 0x0d3f, 0x1620: 0x0d33, 0x1621: 0x0d4f, 0x1622: 0x0d57, 0x1623: 0x16e7, - 0x1624: 0x0d5b, 0x1625: 0x0d47, 0x1626: 0x0d63, 0x1627: 0x0607, 0x1628: 0x0d67, 0x1629: 0x0d6b, - 0x162a: 0x0d6f, 0x162b: 0x0d7b, 0x162c: 0x16ec, 0x162d: 0x0d83, 0x162e: 0x060b, 0x162f: 0x0d8f, - 0x1630: 0x16f1, 0x1631: 0x0d93, 0x1632: 0x060f, 0x1633: 0x0d9f, 0x1634: 0x0dab, 0x1635: 0x0db7, - 0x1636: 0x0dbb, 0x1637: 0x16f6, 0x1638: 0x168d, 0x1639: 0x16fb, 0x163a: 0x0ddb, 0x163b: 0x1700, - 0x163c: 0x0de7, 0x163d: 0x0def, 0x163e: 0x0ddf, 0x163f: 0x0dfb, - // Block 0x59, offset 0x1640 - 0x1640: 0x0e0b, 0x1641: 0x0e1b, 0x1642: 0x0e0f, 0x1643: 0x0e13, 0x1644: 0x0e1f, 0x1645: 0x0e23, - 0x1646: 0x1705, 0x1647: 0x0e07, 0x1648: 0x0e3b, 0x1649: 0x0e3f, 0x164a: 0x0613, 0x164b: 0x0e53, - 0x164c: 0x0e4f, 0x164d: 0x170a, 0x164e: 0x0e33, 0x164f: 0x0e6f, 0x1650: 0x170f, 0x1651: 0x1714, - 0x1652: 0x0e73, 0x1653: 0x0e87, 0x1654: 0x0e83, 0x1655: 0x0e7f, 0x1656: 0x0617, 0x1657: 0x0e8b, - 0x1658: 0x0e9b, 0x1659: 0x0e97, 0x165a: 0x0ea3, 0x165b: 0x1651, 0x165c: 0x0eb3, 0x165d: 0x1719, - 0x165e: 0x0ebf, 0x165f: 0x1723, 0x1660: 0x0ed3, 0x1661: 0x0edf, 0x1662: 0x0ef3, 0x1663: 0x1728, - 0x1664: 0x0f07, 0x1665: 0x0f0b, 0x1666: 0x172d, 0x1667: 0x1732, 0x1668: 0x0f27, 0x1669: 0x0f37, - 0x166a: 0x061b, 0x166b: 0x0f3b, 0x166c: 0x061f, 0x166d: 0x061f, 0x166e: 0x0f53, 0x166f: 0x0f57, - 0x1670: 0x0f5f, 0x1671: 0x0f63, 0x1672: 0x0f6f, 0x1673: 0x0623, 0x1674: 0x0f87, 0x1675: 0x1737, - 0x1676: 0x0fa3, 0x1677: 0x173c, 0x1678: 0x0faf, 0x1679: 0x16a1, 0x167a: 0x0fbf, 0x167b: 0x1741, - 0x167c: 0x1746, 0x167d: 0x174b, 0x167e: 0x0627, 0x167f: 0x062b, - // Block 0x5a, offset 0x1680 - 0x1680: 0x0ff7, 0x1681: 0x1755, 0x1682: 0x1750, 0x1683: 0x175a, 0x1684: 0x175f, 0x1685: 0x0fff, - 0x1686: 0x1003, 0x1687: 0x1003, 0x1688: 0x100b, 0x1689: 0x0633, 0x168a: 0x100f, 0x168b: 0x0637, - 0x168c: 0x063b, 0x168d: 0x1769, 0x168e: 0x1023, 0x168f: 0x102b, 0x1690: 0x1037, 0x1691: 0x063f, - 0x1692: 0x176e, 0x1693: 0x105b, 0x1694: 0x1773, 0x1695: 0x1778, 0x1696: 0x107b, 0x1697: 0x1093, - 0x1698: 0x0643, 0x1699: 0x109b, 0x169a: 0x109f, 0x169b: 0x10a3, 0x169c: 0x177d, 0x169d: 0x1782, - 0x169e: 0x1782, 0x169f: 0x10bb, 0x16a0: 0x0647, 0x16a1: 0x1787, 0x16a2: 0x10cf, 0x16a3: 0x10d3, - 0x16a4: 0x064b, 0x16a5: 0x178c, 0x16a6: 0x10ef, 0x16a7: 0x064f, 0x16a8: 0x10ff, 0x16a9: 0x10f7, - 0x16aa: 0x1107, 0x16ab: 0x1796, 0x16ac: 0x111f, 0x16ad: 0x0653, 0x16ae: 0x112b, 0x16af: 0x1133, - 0x16b0: 0x1143, 0x16b1: 0x0657, 0x16b2: 0x17a0, 0x16b3: 0x17a5, 0x16b4: 0x065b, 0x16b5: 0x17aa, - 0x16b6: 0x115b, 0x16b7: 0x17af, 0x16b8: 0x1167, 0x16b9: 0x1173, 0x16ba: 0x117b, 0x16bb: 0x17b4, - 0x16bc: 0x17b9, 0x16bd: 0x118f, 0x16be: 0x17be, 0x16bf: 0x1197, - // Block 0x5b, offset 0x16c0 - 0x16c0: 0x16ce, 0x16c1: 0x065f, 0x16c2: 0x11af, 0x16c3: 0x11b3, 0x16c4: 0x0667, 0x16c5: 0x11b7, - 0x16c6: 0x0a33, 0x16c7: 0x17c3, 0x16c8: 0x17c8, 0x16c9: 0x16d3, 0x16ca: 0x16d8, 0x16cb: 0x11d7, - 0x16cc: 0x11db, 0x16cd: 0x13f3, 0x16ce: 0x066b, 0x16cf: 0x1207, 0x16d0: 0x1203, 0x16d1: 0x120b, - 0x16d2: 0x083f, 0x16d3: 0x120f, 0x16d4: 0x1213, 0x16d5: 0x1217, 0x16d6: 0x121f, 0x16d7: 0x17cd, - 0x16d8: 0x121b, 0x16d9: 0x1223, 0x16da: 0x1237, 0x16db: 0x123b, 0x16dc: 0x1227, 0x16dd: 0x123f, - 0x16de: 0x1253, 0x16df: 0x1267, 0x16e0: 0x1233, 0x16e1: 0x1247, 0x16e2: 0x124b, 0x16e3: 0x124f, - 0x16e4: 0x17d2, 0x16e5: 0x17dc, 0x16e6: 0x17d7, 0x16e7: 0x066f, 0x16e8: 0x126f, 0x16e9: 0x1273, - 0x16ea: 0x127b, 0x16eb: 0x17f0, 0x16ec: 0x127f, 0x16ed: 0x17e1, 0x16ee: 0x0673, 0x16ef: 0x0677, - 0x16f0: 0x17e6, 0x16f1: 0x17eb, 0x16f2: 0x067b, 0x16f3: 0x129f, 0x16f4: 0x12a3, 0x16f5: 0x12a7, - 0x16f6: 0x12ab, 0x16f7: 0x12b7, 0x16f8: 0x12b3, 0x16f9: 0x12bf, 0x16fa: 0x12bb, 0x16fb: 0x12cb, - 0x16fc: 0x12c3, 0x16fd: 0x12c7, 0x16fe: 0x12cf, 0x16ff: 0x067f, - // Block 0x5c, offset 0x1700 - 0x1700: 0x12d7, 0x1701: 0x12db, 0x1702: 0x0683, 0x1703: 0x12eb, 0x1704: 0x12ef, 0x1705: 0x17f5, - 0x1706: 0x12fb, 0x1707: 0x12ff, 0x1708: 0x0687, 0x1709: 0x130b, 0x170a: 0x05bb, 0x170b: 0x17fa, - 0x170c: 0x17ff, 0x170d: 0x068b, 0x170e: 0x068f, 0x170f: 0x1337, 0x1710: 0x134f, 0x1711: 0x136b, - 0x1712: 0x137b, 0x1713: 0x1804, 0x1714: 0x138f, 0x1715: 0x1393, 0x1716: 0x13ab, 0x1717: 0x13b7, - 0x1718: 0x180e, 0x1719: 0x1660, 0x171a: 0x13c3, 0x171b: 0x13bf, 0x171c: 0x13cb, 0x171d: 0x1665, - 0x171e: 0x13d7, 0x171f: 0x13e3, 0x1720: 0x1813, 0x1721: 0x1818, 0x1722: 0x1423, 0x1723: 0x142f, - 0x1724: 0x1437, 0x1725: 0x181d, 0x1726: 0x143b, 0x1727: 0x1467, 0x1728: 0x1473, 0x1729: 0x1477, - 0x172a: 0x146f, 0x172b: 0x1483, 0x172c: 0x1487, 0x172d: 0x1822, 0x172e: 0x1493, 0x172f: 0x0693, - 0x1730: 0x149b, 0x1731: 0x1827, 0x1732: 0x0697, 0x1733: 0x14d3, 0x1734: 0x0ac3, 0x1735: 0x14eb, - 0x1736: 0x182c, 0x1737: 0x1836, 0x1738: 0x069b, 0x1739: 0x069f, 0x173a: 0x1513, 0x173b: 0x183b, - 0x173c: 0x06a3, 0x173d: 0x1840, 0x173e: 0x152b, 0x173f: 0x152b, - // Block 0x5d, offset 0x1740 - 0x1740: 0x1533, 0x1741: 0x1845, 0x1742: 0x154b, 0x1743: 0x06a7, 0x1744: 0x155b, 0x1745: 0x1567, - 0x1746: 0x156f, 0x1747: 0x1577, 0x1748: 0x06ab, 0x1749: 0x184a, 0x174a: 0x158b, 0x174b: 0x15a7, - 0x174c: 0x15b3, 0x174d: 0x06af, 0x174e: 0x06b3, 0x174f: 0x15b7, 0x1750: 0x184f, 0x1751: 0x06b7, - 0x1752: 0x1854, 0x1753: 0x1859, 0x1754: 0x185e, 0x1755: 0x15db, 0x1756: 0x06bb, 0x1757: 0x15ef, - 0x1758: 0x15f7, 0x1759: 0x15fb, 0x175a: 0x1603, 0x175b: 0x160b, 0x175c: 0x1613, 0x175d: 0x1868, -} - -// nfkcIndex: 22 blocks, 1408 entries, 1408 bytes -// Block 0 is the zero block. -var nfkcIndex = [1408]uint8{ - // Block 0x0, offset 0x0 - // Block 0x1, offset 0x40 - // Block 0x2, offset 0x80 - // Block 0x3, offset 0xc0 - 0xc2: 0x5c, 0xc3: 0x01, 0xc4: 0x02, 0xc5: 0x03, 0xc6: 0x5d, 0xc7: 0x04, - 0xc8: 0x05, 0xca: 0x5e, 0xcb: 0x5f, 0xcc: 0x06, 0xcd: 0x07, 0xce: 0x08, 0xcf: 0x09, - 0xd0: 0x0a, 0xd1: 0x60, 0xd2: 0x61, 0xd3: 0x0b, 0xd6: 0x0c, 0xd7: 0x62, - 0xd8: 0x63, 0xd9: 0x0d, 0xdb: 0x64, 0xdc: 0x65, 0xdd: 0x66, 0xdf: 0x67, - 0xe0: 0x02, 0xe1: 0x03, 0xe2: 0x04, 0xe3: 0x05, - 0xea: 0x06, 0xeb: 0x07, 0xec: 0x08, 0xed: 0x09, 0xef: 0x0a, - 0xf0: 0x13, - // Block 0x4, offset 0x100 - 0x120: 0x68, 0x121: 0x69, 0x123: 0x0e, 0x124: 0x6a, 0x125: 0x6b, 0x126: 0x6c, 0x127: 0x6d, - 0x128: 0x6e, 0x129: 0x6f, 0x12a: 0x70, 0x12b: 0x71, 0x12c: 0x6c, 0x12d: 0x72, 0x12e: 0x73, 0x12f: 0x74, - 0x131: 0x75, 0x132: 0x76, 0x133: 0x77, 0x134: 0x78, 0x135: 0x79, 0x137: 0x7a, - 0x138: 0x7b, 0x139: 0x7c, 0x13a: 0x7d, 0x13b: 0x7e, 0x13c: 0x7f, 0x13d: 0x80, 0x13e: 0x81, 0x13f: 0x82, - // Block 0x5, offset 0x140 - 0x140: 0x83, 0x142: 0x84, 0x143: 0x85, 0x144: 0x86, 0x145: 0x87, 0x146: 0x88, 0x147: 0x89, - 0x14d: 0x8a, - 0x15c: 0x8b, 0x15f: 0x8c, - 0x162: 0x8d, 0x164: 0x8e, - 0x168: 0x8f, 0x169: 0x90, 0x16a: 0x91, 0x16c: 0x0f, 0x16d: 0x92, 0x16e: 0x93, 0x16f: 0x94, - 0x170: 0x95, 0x173: 0x96, 0x174: 0x97, 0x175: 0x10, 0x176: 0x11, 0x177: 0x12, - 0x178: 0x13, 0x179: 0x14, 0x17a: 0x15, 0x17b: 0x16, 0x17c: 0x17, 0x17d: 0x18, 0x17e: 0x19, 0x17f: 0x1a, - // Block 0x6, offset 0x180 - 0x180: 0x98, 0x181: 0x99, 0x182: 0x9a, 0x183: 0x9b, 0x184: 0x1b, 0x185: 0x1c, 0x186: 0x9c, 0x187: 0x9d, - 0x188: 0x9e, 0x189: 0x1d, 0x18a: 0x1e, 0x18b: 0x9f, 0x18c: 0xa0, - 0x191: 0x1f, 0x192: 0x20, 0x193: 0xa1, - 0x1a8: 0xa2, 0x1a9: 0xa3, 0x1ab: 0xa4, - 0x1b1: 0xa5, 0x1b3: 0xa6, 0x1b5: 0xa7, 0x1b7: 0xa8, - 0x1ba: 0xa9, 0x1bb: 0xaa, 0x1bc: 0x21, 0x1bd: 0x22, 0x1be: 0x23, 0x1bf: 0xab, - // Block 0x7, offset 0x1c0 - 0x1c0: 0xac, 0x1c1: 0x24, 0x1c2: 0x25, 0x1c3: 0x26, 0x1c4: 0xad, 0x1c5: 0x27, 0x1c6: 0x28, - 0x1c8: 0x29, 0x1c9: 0x2a, 0x1ca: 0x2b, 0x1cb: 0x2c, 0x1cc: 0x2d, 0x1cd: 0x2e, 0x1ce: 0x2f, 0x1cf: 0x30, - // Block 0x8, offset 0x200 - 0x219: 0xae, 0x21a: 0xaf, 0x21b: 0xb0, 0x21d: 0xb1, 0x21f: 0xb2, - 0x220: 0xb3, 0x223: 0xb4, 0x224: 0xb5, 0x225: 0xb6, 0x226: 0xb7, 0x227: 0xb8, - 0x22a: 0xb9, 0x22b: 0xba, 0x22d: 0xbb, 0x22f: 0xbc, - 0x230: 0xbd, 0x231: 0xbe, 0x232: 0xbf, 0x233: 0xc0, 0x234: 0xc1, 0x235: 0xc2, 0x236: 0xc3, 0x237: 0xbd, - 0x238: 0xbe, 0x239: 0xbf, 0x23a: 0xc0, 0x23b: 0xc1, 0x23c: 0xc2, 0x23d: 0xc3, 0x23e: 0xbd, 0x23f: 0xbe, - // Block 0x9, offset 0x240 - 0x240: 0xbf, 0x241: 0xc0, 0x242: 0xc1, 0x243: 0xc2, 0x244: 0xc3, 0x245: 0xbd, 0x246: 0xbe, 0x247: 0xbf, - 0x248: 0xc0, 0x249: 0xc1, 0x24a: 0xc2, 0x24b: 0xc3, 0x24c: 0xbd, 0x24d: 0xbe, 0x24e: 0xbf, 0x24f: 0xc0, - 0x250: 0xc1, 0x251: 0xc2, 0x252: 0xc3, 0x253: 0xbd, 0x254: 0xbe, 0x255: 0xbf, 0x256: 0xc0, 0x257: 0xc1, - 0x258: 0xc2, 0x259: 0xc3, 0x25a: 0xbd, 0x25b: 0xbe, 0x25c: 0xbf, 0x25d: 0xc0, 0x25e: 0xc1, 0x25f: 0xc2, - 0x260: 0xc3, 0x261: 0xbd, 0x262: 0xbe, 0x263: 0xbf, 0x264: 0xc0, 0x265: 0xc1, 0x266: 0xc2, 0x267: 0xc3, - 0x268: 0xbd, 0x269: 0xbe, 0x26a: 0xbf, 0x26b: 0xc0, 0x26c: 0xc1, 0x26d: 0xc2, 0x26e: 0xc3, 0x26f: 0xbd, - 0x270: 0xbe, 0x271: 0xbf, 0x272: 0xc0, 0x273: 0xc1, 0x274: 0xc2, 0x275: 0xc3, 0x276: 0xbd, 0x277: 0xbe, - 0x278: 0xbf, 0x279: 0xc0, 0x27a: 0xc1, 0x27b: 0xc2, 0x27c: 0xc3, 0x27d: 0xbd, 0x27e: 0xbe, 0x27f: 0xbf, - // Block 0xa, offset 0x280 - 0x280: 0xc0, 0x281: 0xc1, 0x282: 0xc2, 0x283: 0xc3, 0x284: 0xbd, 0x285: 0xbe, 0x286: 0xbf, 0x287: 0xc0, - 0x288: 0xc1, 0x289: 0xc2, 0x28a: 0xc3, 0x28b: 0xbd, 0x28c: 0xbe, 0x28d: 0xbf, 0x28e: 0xc0, 0x28f: 0xc1, - 0x290: 0xc2, 0x291: 0xc3, 0x292: 0xbd, 0x293: 0xbe, 0x294: 0xbf, 0x295: 0xc0, 0x296: 0xc1, 0x297: 0xc2, - 0x298: 0xc3, 0x299: 0xbd, 0x29a: 0xbe, 0x29b: 0xbf, 0x29c: 0xc0, 0x29d: 0xc1, 0x29e: 0xc2, 0x29f: 0xc3, - 0x2a0: 0xbd, 0x2a1: 0xbe, 0x2a2: 0xbf, 0x2a3: 0xc0, 0x2a4: 0xc1, 0x2a5: 0xc2, 0x2a6: 0xc3, 0x2a7: 0xbd, - 0x2a8: 0xbe, 0x2a9: 0xbf, 0x2aa: 0xc0, 0x2ab: 0xc1, 0x2ac: 0xc2, 0x2ad: 0xc3, 0x2ae: 0xbd, 0x2af: 0xbe, - 0x2b0: 0xbf, 0x2b1: 0xc0, 0x2b2: 0xc1, 0x2b3: 0xc2, 0x2b4: 0xc3, 0x2b5: 0xbd, 0x2b6: 0xbe, 0x2b7: 0xbf, - 0x2b8: 0xc0, 0x2b9: 0xc1, 0x2ba: 0xc2, 0x2bb: 0xc3, 0x2bc: 0xbd, 0x2bd: 0xbe, 0x2be: 0xbf, 0x2bf: 0xc0, - // Block 0xb, offset 0x2c0 - 0x2c0: 0xc1, 0x2c1: 0xc2, 0x2c2: 0xc3, 0x2c3: 0xbd, 0x2c4: 0xbe, 0x2c5: 0xbf, 0x2c6: 0xc0, 0x2c7: 0xc1, - 0x2c8: 0xc2, 0x2c9: 0xc3, 0x2ca: 0xbd, 0x2cb: 0xbe, 0x2cc: 0xbf, 0x2cd: 0xc0, 0x2ce: 0xc1, 0x2cf: 0xc2, - 0x2d0: 0xc3, 0x2d1: 0xbd, 0x2d2: 0xbe, 0x2d3: 0xbf, 0x2d4: 0xc0, 0x2d5: 0xc1, 0x2d6: 0xc2, 0x2d7: 0xc3, - 0x2d8: 0xbd, 0x2d9: 0xbe, 0x2da: 0xbf, 0x2db: 0xc0, 0x2dc: 0xc1, 0x2dd: 0xc2, 0x2de: 0xc4, - // Block 0xc, offset 0x300 - 0x324: 0x31, 0x325: 0x32, 0x326: 0x33, 0x327: 0x34, - 0x328: 0x35, 0x329: 0x36, 0x32a: 0x37, 0x32b: 0x38, 0x32c: 0x39, 0x32d: 0x3a, 0x32e: 0x3b, 0x32f: 0x3c, - 0x330: 0x3d, 0x331: 0x3e, 0x332: 0x3f, 0x333: 0x40, 0x334: 0x41, 0x335: 0x42, 0x336: 0x43, 0x337: 0x44, - 0x338: 0x45, 0x339: 0x46, 0x33a: 0x47, 0x33b: 0x48, 0x33c: 0xc5, 0x33d: 0x49, 0x33e: 0x4a, 0x33f: 0x4b, - // Block 0xd, offset 0x340 - 0x347: 0xc6, - 0x34b: 0xc7, 0x34d: 0xc8, - 0x368: 0xc9, 0x36b: 0xca, - 0x374: 0xcb, - 0x37d: 0xcc, - // Block 0xe, offset 0x380 - 0x381: 0xcd, 0x382: 0xce, 0x384: 0xcf, 0x385: 0xb7, 0x387: 0xd0, - 0x388: 0xd1, 0x38b: 0xd2, 0x38c: 0xd3, 0x38d: 0xd4, - 0x391: 0xd5, 0x392: 0xd6, 0x393: 0xd7, 0x396: 0xd8, 0x397: 0xd9, - 0x398: 0xda, 0x39a: 0xdb, 0x39c: 0xdc, - 0x3a0: 0xdd, - 0x3a8: 0xde, 0x3a9: 0xdf, 0x3aa: 0xe0, - 0x3b0: 0xda, 0x3b5: 0xe1, 0x3b6: 0xe2, - // Block 0xf, offset 0x3c0 - 0x3eb: 0xe3, 0x3ec: 0xe4, - // Block 0x10, offset 0x400 - 0x432: 0xe5, - // Block 0x11, offset 0x440 - 0x445: 0xe6, 0x446: 0xe7, 0x447: 0xe8, - 0x449: 0xe9, - 0x450: 0xea, 0x451: 0xeb, 0x452: 0xec, 0x453: 0xed, 0x454: 0xee, 0x455: 0xef, 0x456: 0xf0, 0x457: 0xf1, - 0x458: 0xf2, 0x459: 0xf3, 0x45a: 0x4c, 0x45b: 0xf4, 0x45c: 0xf5, 0x45d: 0xf6, 0x45e: 0xf7, 0x45f: 0x4d, - // Block 0x12, offset 0x480 - 0x480: 0xf8, - 0x4a3: 0xf9, 0x4a5: 0xfa, - 0x4b8: 0x4e, 0x4b9: 0x4f, 0x4ba: 0x50, - // Block 0x13, offset 0x4c0 - 0x4c4: 0x51, 0x4c5: 0xfb, 0x4c6: 0xfc, - 0x4c8: 0x52, 0x4c9: 0xfd, - // Block 0x14, offset 0x500 - 0x520: 0x53, 0x521: 0x54, 0x522: 0x55, 0x523: 0x56, 0x524: 0x57, 0x525: 0x58, 0x526: 0x59, 0x527: 0x5a, - 0x528: 0x5b, - // Block 0x15, offset 0x540 - 0x550: 0x0b, 0x551: 0x0c, 0x556: 0x0d, - 0x55b: 0x0e, 0x55d: 0x0f, 0x55e: 0x10, 0x55f: 0x11, - 0x56f: 0x12, -} - -// nfkcSparseOffset: 162 entries, 324 bytes -var nfkcSparseOffset = []uint16{0x0, 0xe, 0x12, 0x1b, 0x25, 0x35, 0x37, 0x3c, 0x47, 0x56, 0x63, 0x6b, 0x70, 0x75, 0x77, 0x7f, 0x86, 0x89, 0x91, 0x95, 0x99, 0x9b, 0x9d, 0xa6, 0xaa, 0xb1, 0xb6, 0xb9, 0xc3, 0xc6, 0xcd, 0xd5, 0xd9, 0xdb, 0xde, 0xe2, 0xe8, 0xf9, 0x105, 0x107, 0x10d, 0x10f, 0x111, 0x113, 0x115, 0x117, 0x119, 0x11b, 0x11e, 0x121, 0x123, 0x126, 0x129, 0x12d, 0x132, 0x13b, 0x13d, 0x140, 0x142, 0x14d, 0x158, 0x166, 0x174, 0x184, 0x192, 0x199, 0x19f, 0x1ae, 0x1b2, 0x1b4, 0x1b8, 0x1ba, 0x1bd, 0x1bf, 0x1c2, 0x1c4, 0x1c7, 0x1c9, 0x1cb, 0x1cd, 0x1d9, 0x1e3, 0x1ed, 0x1f0, 0x1f4, 0x1f6, 0x1f8, 0x1fa, 0x1fc, 0x1ff, 0x201, 0x203, 0x205, 0x207, 0x20d, 0x210, 0x214, 0x216, 0x21d, 0x223, 0x229, 0x231, 0x237, 0x23d, 0x243, 0x247, 0x249, 0x24b, 0x24d, 0x24f, 0x255, 0x258, 0x25a, 0x260, 0x263, 0x26b, 0x272, 0x275, 0x278, 0x27a, 0x27d, 0x285, 0x289, 0x290, 0x293, 0x299, 0x29b, 0x29d, 0x2a0, 0x2a2, 0x2a5, 0x2a7, 0x2a9, 0x2ab, 0x2ae, 0x2b0, 0x2b2, 0x2b4, 0x2b6, 0x2c3, 0x2cd, 0x2cf, 0x2d1, 0x2d5, 0x2da, 0x2e6, 0x2eb, 0x2f4, 0x2fa, 0x2ff, 0x303, 0x308, 0x30c, 0x31c, 0x32a, 0x338, 0x346, 0x34c, 0x34e, 0x351, 0x35b, 0x35d} - -// nfkcSparseValues: 871 entries, 3484 bytes -var nfkcSparseValues = [871]valueRange{ - // Block 0x0, offset 0x0 - {value: 0x0002, lo: 0x0d}, - {value: 0x0001, lo: 0xa0, hi: 0xa0}, - {value: 0x4278, lo: 0xa8, hi: 0xa8}, - {value: 0x0083, lo: 0xaa, hi: 0xaa}, - {value: 0x4264, lo: 0xaf, hi: 0xaf}, - {value: 0x0025, lo: 0xb2, hi: 0xb3}, - {value: 0x425a, lo: 0xb4, hi: 0xb4}, - {value: 0x01dc, lo: 0xb5, hi: 0xb5}, - {value: 0x4291, lo: 0xb8, hi: 0xb8}, - {value: 0x0023, lo: 0xb9, hi: 0xb9}, - {value: 0x009f, lo: 0xba, hi: 0xba}, - {value: 0x221c, lo: 0xbc, hi: 0xbc}, - {value: 0x2210, lo: 0xbd, hi: 0xbd}, - {value: 0x22b2, lo: 0xbe, hi: 0xbe}, - // Block 0x1, offset 0xe - {value: 0x0091, lo: 0x03}, - {value: 0x46e2, lo: 0xa0, hi: 0xa1}, - {value: 0x4714, lo: 0xaf, hi: 0xb0}, - {value: 0xa000, lo: 0xb7, hi: 0xb7}, - // Block 0x2, offset 0x12 - {value: 0x0003, lo: 0x08}, - {value: 0xa000, lo: 0x92, hi: 0x92}, - {value: 0x0091, lo: 0xb0, hi: 0xb0}, - {value: 0x0119, lo: 0xb1, hi: 0xb1}, - {value: 0x0095, lo: 0xb2, hi: 0xb2}, - {value: 0x00a5, lo: 0xb3, hi: 0xb3}, - {value: 0x0143, lo: 0xb4, hi: 0xb6}, - {value: 0x00af, lo: 0xb7, hi: 0xb7}, - {value: 0x00b3, lo: 0xb8, hi: 0xb8}, - // Block 0x3, offset 0x1b - {value: 0x000a, lo: 0x09}, - {value: 0x426e, lo: 0x98, hi: 0x98}, - {value: 0x4273, lo: 0x99, hi: 0x9a}, - {value: 0x4296, lo: 0x9b, hi: 0x9b}, - {value: 0x425f, lo: 0x9c, hi: 0x9c}, - {value: 0x4282, lo: 0x9d, hi: 0x9d}, - {value: 0x0113, lo: 0xa0, hi: 0xa0}, - {value: 0x0099, lo: 0xa1, hi: 0xa1}, - {value: 0x00a7, lo: 0xa2, hi: 0xa3}, - {value: 0x0167, lo: 0xa4, hi: 0xa4}, - // Block 0x4, offset 0x25 - {value: 0x0000, lo: 0x0f}, - {value: 0xa000, lo: 0x83, hi: 0x83}, - {value: 0xa000, lo: 0x87, hi: 0x87}, - {value: 0xa000, lo: 0x8b, hi: 0x8b}, - {value: 0xa000, lo: 0x8d, hi: 0x8d}, - {value: 0x37a5, lo: 0x90, hi: 0x90}, - {value: 0x37b1, lo: 0x91, hi: 0x91}, - {value: 0x379f, lo: 0x93, hi: 0x93}, - {value: 0xa000, lo: 0x96, hi: 0x96}, - {value: 0x3817, lo: 0x97, hi: 0x97}, - {value: 0x37e1, lo: 0x9c, hi: 0x9c}, - {value: 0x37c9, lo: 0x9d, hi: 0x9d}, - {value: 0x37f3, lo: 0x9e, hi: 0x9e}, - {value: 0xa000, lo: 0xb4, hi: 0xb5}, - {value: 0x381d, lo: 0xb6, hi: 0xb6}, - {value: 0x3823, lo: 0xb7, hi: 0xb7}, - // Block 0x5, offset 0x35 - {value: 0x0000, lo: 0x01}, - {value: 0x8132, lo: 0x83, hi: 0x87}, - // Block 0x6, offset 0x37 - {value: 0x0001, lo: 0x04}, - {value: 0x8113, lo: 0x81, hi: 0x82}, - {value: 0x8132, lo: 0x84, hi: 0x84}, - {value: 0x812d, lo: 0x85, hi: 0x85}, - {value: 0x810d, lo: 0x87, hi: 0x87}, - // Block 0x7, offset 0x3c - {value: 0x0000, lo: 0x0a}, - {value: 0x8132, lo: 0x90, hi: 0x97}, - {value: 0x8119, lo: 0x98, hi: 0x98}, - {value: 0x811a, lo: 0x99, hi: 0x99}, - {value: 0x811b, lo: 0x9a, hi: 0x9a}, - {value: 0x3841, lo: 0xa2, hi: 0xa2}, - {value: 0x3847, lo: 0xa3, hi: 0xa3}, - {value: 0x3853, lo: 0xa4, hi: 0xa4}, - {value: 0x384d, lo: 0xa5, hi: 0xa5}, - {value: 0x3859, lo: 0xa6, hi: 0xa6}, - {value: 0xa000, lo: 0xa7, hi: 0xa7}, - // Block 0x8, offset 0x47 - {value: 0x0000, lo: 0x0e}, - {value: 0x386b, lo: 0x80, hi: 0x80}, - {value: 0xa000, lo: 0x81, hi: 0x81}, - {value: 0x385f, lo: 0x82, hi: 0x82}, - {value: 0xa000, lo: 0x92, hi: 0x92}, - {value: 0x3865, lo: 0x93, hi: 0x93}, - {value: 0xa000, lo: 0x95, hi: 0x95}, - {value: 0x8132, lo: 0x96, hi: 0x9c}, - {value: 0x8132, lo: 0x9f, hi: 0xa2}, - {value: 0x812d, lo: 0xa3, hi: 0xa3}, - {value: 0x8132, lo: 0xa4, hi: 0xa4}, - {value: 0x8132, lo: 0xa7, hi: 0xa8}, - {value: 0x812d, lo: 0xaa, hi: 0xaa}, - {value: 0x8132, lo: 0xab, hi: 0xac}, - {value: 0x812d, lo: 0xad, hi: 0xad}, - // Block 0x9, offset 0x56 - {value: 0x0000, lo: 0x0c}, - {value: 0x811f, lo: 0x91, hi: 0x91}, - {value: 0x8132, lo: 0xb0, hi: 0xb0}, - {value: 0x812d, lo: 0xb1, hi: 0xb1}, - {value: 0x8132, lo: 0xb2, hi: 0xb3}, - {value: 0x812d, lo: 0xb4, hi: 0xb4}, - {value: 0x8132, lo: 0xb5, hi: 0xb6}, - {value: 0x812d, lo: 0xb7, hi: 0xb9}, - {value: 0x8132, lo: 0xba, hi: 0xba}, - {value: 0x812d, lo: 0xbb, hi: 0xbc}, - {value: 0x8132, lo: 0xbd, hi: 0xbd}, - {value: 0x812d, lo: 0xbe, hi: 0xbe}, - {value: 0x8132, lo: 0xbf, hi: 0xbf}, - // Block 0xa, offset 0x63 - {value: 0x0005, lo: 0x07}, - {value: 0x8132, lo: 0x80, hi: 0x80}, - {value: 0x8132, lo: 0x81, hi: 0x81}, - {value: 0x812d, lo: 0x82, hi: 0x83}, - {value: 0x812d, lo: 0x84, hi: 0x85}, - {value: 0x812d, lo: 0x86, hi: 0x87}, - {value: 0x812d, lo: 0x88, hi: 0x89}, - {value: 0x8132, lo: 0x8a, hi: 0x8a}, - // Block 0xb, offset 0x6b - {value: 0x0000, lo: 0x04}, - {value: 0x8132, lo: 0xab, hi: 0xb1}, - {value: 0x812d, lo: 0xb2, hi: 0xb2}, - {value: 0x8132, lo: 0xb3, hi: 0xb3}, - {value: 0x812d, lo: 0xbd, hi: 0xbd}, - // Block 0xc, offset 0x70 - {value: 0x0000, lo: 0x04}, - {value: 0x8132, lo: 0x96, hi: 0x99}, - {value: 0x8132, lo: 0x9b, hi: 0xa3}, - {value: 0x8132, lo: 0xa5, hi: 0xa7}, - {value: 0x8132, lo: 0xa9, hi: 0xad}, - // Block 0xd, offset 0x75 - {value: 0x0000, lo: 0x01}, - {value: 0x812d, lo: 0x99, hi: 0x9b}, - // Block 0xe, offset 0x77 - {value: 0x0000, lo: 0x07}, - {value: 0xa000, lo: 0xa8, hi: 0xa8}, - {value: 0x3ed8, lo: 0xa9, hi: 0xa9}, - {value: 0xa000, lo: 0xb0, hi: 0xb0}, - {value: 0x3ee0, lo: 0xb1, hi: 0xb1}, - {value: 0xa000, lo: 0xb3, hi: 0xb3}, - {value: 0x3ee8, lo: 0xb4, hi: 0xb4}, - {value: 0x9902, lo: 0xbc, hi: 0xbc}, - // Block 0xf, offset 0x7f - {value: 0x0008, lo: 0x06}, - {value: 0x8104, lo: 0x8d, hi: 0x8d}, - {value: 0x8132, lo: 0x91, hi: 0x91}, - {value: 0x812d, lo: 0x92, hi: 0x92}, - {value: 0x8132, lo: 0x93, hi: 0x93}, - {value: 0x8132, lo: 0x94, hi: 0x94}, - {value: 0x451c, lo: 0x98, hi: 0x9f}, - // Block 0x10, offset 0x86 - {value: 0x0000, lo: 0x02}, - {value: 0x8102, lo: 0xbc, hi: 0xbc}, - {value: 0x9900, lo: 0xbe, hi: 0xbe}, - // Block 0x11, offset 0x89 - {value: 0x0008, lo: 0x07}, - {value: 0xa000, lo: 0x87, hi: 0x87}, - {value: 0x2c9e, lo: 0x8b, hi: 0x8c}, - {value: 0x8104, lo: 0x8d, hi: 0x8d}, - {value: 0x9900, lo: 0x97, hi: 0x97}, - {value: 0x455c, lo: 0x9c, hi: 0x9d}, - {value: 0x456c, lo: 0x9f, hi: 0x9f}, - {value: 0x8132, lo: 0xbe, hi: 0xbe}, - // Block 0x12, offset 0x91 - {value: 0x0000, lo: 0x03}, - {value: 0x4594, lo: 0xb3, hi: 0xb3}, - {value: 0x459c, lo: 0xb6, hi: 0xb6}, - {value: 0x8102, lo: 0xbc, hi: 0xbc}, - // Block 0x13, offset 0x95 - {value: 0x0008, lo: 0x03}, - {value: 0x8104, lo: 0x8d, hi: 0x8d}, - {value: 0x4574, lo: 0x99, hi: 0x9b}, - {value: 0x458c, lo: 0x9e, hi: 0x9e}, - // Block 0x14, offset 0x99 - {value: 0x0000, lo: 0x01}, - {value: 0x8102, lo: 0xbc, hi: 0xbc}, - // Block 0x15, offset 0x9b - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0x8d, hi: 0x8d}, - // Block 0x16, offset 0x9d - {value: 0x0000, lo: 0x08}, - {value: 0xa000, lo: 0x87, hi: 0x87}, - {value: 0x2cb6, lo: 0x88, hi: 0x88}, - {value: 0x2cae, lo: 0x8b, hi: 0x8b}, - {value: 0x2cbe, lo: 0x8c, hi: 0x8c}, - {value: 0x8104, lo: 0x8d, hi: 0x8d}, - {value: 0x9900, lo: 0x96, hi: 0x97}, - {value: 0x45a4, lo: 0x9c, hi: 0x9c}, - {value: 0x45ac, lo: 0x9d, hi: 0x9d}, - // Block 0x17, offset 0xa6 - {value: 0x0000, lo: 0x03}, - {value: 0xa000, lo: 0x92, hi: 0x92}, - {value: 0x2cc6, lo: 0x94, hi: 0x94}, - {value: 0x9900, lo: 0xbe, hi: 0xbe}, - // Block 0x18, offset 0xaa - {value: 0x0000, lo: 0x06}, - {value: 0xa000, lo: 0x86, hi: 0x87}, - {value: 0x2cce, lo: 0x8a, hi: 0x8a}, - {value: 0x2cde, lo: 0x8b, hi: 0x8b}, - {value: 0x2cd6, lo: 0x8c, hi: 0x8c}, - {value: 0x8104, lo: 0x8d, hi: 0x8d}, - {value: 0x9900, lo: 0x97, hi: 0x97}, - // Block 0x19, offset 0xb1 - {value: 0x1801, lo: 0x04}, - {value: 0xa000, lo: 0x86, hi: 0x86}, - {value: 0x3ef0, lo: 0x88, hi: 0x88}, - {value: 0x8104, lo: 0x8d, hi: 0x8d}, - {value: 0x8120, lo: 0x95, hi: 0x96}, - // Block 0x1a, offset 0xb6 - {value: 0x0000, lo: 0x02}, - {value: 0x8102, lo: 0xbc, hi: 0xbc}, - {value: 0xa000, lo: 0xbf, hi: 0xbf}, - // Block 0x1b, offset 0xb9 - {value: 0x0000, lo: 0x09}, - {value: 0x2ce6, lo: 0x80, hi: 0x80}, - {value: 0x9900, lo: 0x82, hi: 0x82}, - {value: 0xa000, lo: 0x86, hi: 0x86}, - {value: 0x2cee, lo: 0x87, hi: 0x87}, - {value: 0x2cf6, lo: 0x88, hi: 0x88}, - {value: 0x2f50, lo: 0x8a, hi: 0x8a}, - {value: 0x2dd8, lo: 0x8b, hi: 0x8b}, - {value: 0x8104, lo: 0x8d, hi: 0x8d}, - {value: 0x9900, lo: 0x95, hi: 0x96}, - // Block 0x1c, offset 0xc3 - {value: 0x0000, lo: 0x02}, - {value: 0x8104, lo: 0xbb, hi: 0xbc}, - {value: 0x9900, lo: 0xbe, hi: 0xbe}, - // Block 0x1d, offset 0xc6 - {value: 0x0000, lo: 0x06}, - {value: 0xa000, lo: 0x86, hi: 0x87}, - {value: 0x2cfe, lo: 0x8a, hi: 0x8a}, - {value: 0x2d0e, lo: 0x8b, hi: 0x8b}, - {value: 0x2d06, lo: 0x8c, hi: 0x8c}, - {value: 0x8104, lo: 0x8d, hi: 0x8d}, - {value: 0x9900, lo: 0x97, hi: 0x97}, - // Block 0x1e, offset 0xcd - {value: 0x6bea, lo: 0x07}, - {value: 0x9904, lo: 0x8a, hi: 0x8a}, - {value: 0x9900, lo: 0x8f, hi: 0x8f}, - {value: 0xa000, lo: 0x99, hi: 0x99}, - {value: 0x3ef8, lo: 0x9a, hi: 0x9a}, - {value: 0x2f58, lo: 0x9c, hi: 0x9c}, - {value: 0x2de3, lo: 0x9d, hi: 0x9d}, - {value: 0x2d16, lo: 0x9e, hi: 0x9f}, - // Block 0x1f, offset 0xd5 - {value: 0x0000, lo: 0x03}, - {value: 0x2621, lo: 0xb3, hi: 0xb3}, - {value: 0x8122, lo: 0xb8, hi: 0xb9}, - {value: 0x8104, lo: 0xba, hi: 0xba}, - // Block 0x20, offset 0xd9 - {value: 0x0000, lo: 0x01}, - {value: 0x8123, lo: 0x88, hi: 0x8b}, - // Block 0x21, offset 0xdb - {value: 0x0000, lo: 0x02}, - {value: 0x2636, lo: 0xb3, hi: 0xb3}, - {value: 0x8124, lo: 0xb8, hi: 0xb9}, - // Block 0x22, offset 0xde - {value: 0x0000, lo: 0x03}, - {value: 0x8125, lo: 0x88, hi: 0x8b}, - {value: 0x2628, lo: 0x9c, hi: 0x9c}, - {value: 0x262f, lo: 0x9d, hi: 0x9d}, - // Block 0x23, offset 0xe2 - {value: 0x0000, lo: 0x05}, - {value: 0x030b, lo: 0x8c, hi: 0x8c}, - {value: 0x812d, lo: 0x98, hi: 0x99}, - {value: 0x812d, lo: 0xb5, hi: 0xb5}, - {value: 0x812d, lo: 0xb7, hi: 0xb7}, - {value: 0x812b, lo: 0xb9, hi: 0xb9}, - // Block 0x24, offset 0xe8 - {value: 0x0000, lo: 0x10}, - {value: 0x2644, lo: 0x83, hi: 0x83}, - {value: 0x264b, lo: 0x8d, hi: 0x8d}, - {value: 0x2652, lo: 0x92, hi: 0x92}, - {value: 0x2659, lo: 0x97, hi: 0x97}, - {value: 0x2660, lo: 0x9c, hi: 0x9c}, - {value: 0x263d, lo: 0xa9, hi: 0xa9}, - {value: 0x8126, lo: 0xb1, hi: 0xb1}, - {value: 0x8127, lo: 0xb2, hi: 0xb2}, - {value: 0x4a84, lo: 0xb3, hi: 0xb3}, - {value: 0x8128, lo: 0xb4, hi: 0xb4}, - {value: 0x4a8d, lo: 0xb5, hi: 0xb5}, - {value: 0x45b4, lo: 0xb6, hi: 0xb6}, - {value: 0x45f4, lo: 0xb7, hi: 0xb7}, - {value: 0x45bc, lo: 0xb8, hi: 0xb8}, - {value: 0x45ff, lo: 0xb9, hi: 0xb9}, - {value: 0x8127, lo: 0xba, hi: 0xbd}, - // Block 0x25, offset 0xf9 - {value: 0x0000, lo: 0x0b}, - {value: 0x8127, lo: 0x80, hi: 0x80}, - {value: 0x4a96, lo: 0x81, hi: 0x81}, - {value: 0x8132, lo: 0x82, hi: 0x83}, - {value: 0x8104, lo: 0x84, hi: 0x84}, - {value: 0x8132, lo: 0x86, hi: 0x87}, - {value: 0x266e, lo: 0x93, hi: 0x93}, - {value: 0x2675, lo: 0x9d, hi: 0x9d}, - {value: 0x267c, lo: 0xa2, hi: 0xa2}, - {value: 0x2683, lo: 0xa7, hi: 0xa7}, - {value: 0x268a, lo: 0xac, hi: 0xac}, - {value: 0x2667, lo: 0xb9, hi: 0xb9}, - // Block 0x26, offset 0x105 - {value: 0x0000, lo: 0x01}, - {value: 0x812d, lo: 0x86, hi: 0x86}, - // Block 0x27, offset 0x107 - {value: 0x0000, lo: 0x05}, - {value: 0xa000, lo: 0xa5, hi: 0xa5}, - {value: 0x2d1e, lo: 0xa6, hi: 0xa6}, - {value: 0x9900, lo: 0xae, hi: 0xae}, - {value: 0x8102, lo: 0xb7, hi: 0xb7}, - {value: 0x8104, lo: 0xb9, hi: 0xba}, - // Block 0x28, offset 0x10d - {value: 0x0000, lo: 0x01}, - {value: 0x812d, lo: 0x8d, hi: 0x8d}, - // Block 0x29, offset 0x10f - {value: 0x0000, lo: 0x01}, - {value: 0x030f, lo: 0xbc, hi: 0xbc}, - // Block 0x2a, offset 0x111 - {value: 0x0000, lo: 0x01}, - {value: 0xa000, lo: 0x80, hi: 0x92}, - // Block 0x2b, offset 0x113 - {value: 0x0000, lo: 0x01}, - {value: 0xb900, lo: 0xa1, hi: 0xb5}, - // Block 0x2c, offset 0x115 - {value: 0x0000, lo: 0x01}, - {value: 0x9900, lo: 0xa8, hi: 0xbf}, - // Block 0x2d, offset 0x117 - {value: 0x0000, lo: 0x01}, - {value: 0x9900, lo: 0x80, hi: 0x82}, - // Block 0x2e, offset 0x119 - {value: 0x0000, lo: 0x01}, - {value: 0x8132, lo: 0x9d, hi: 0x9f}, - // Block 0x2f, offset 0x11b - {value: 0x0000, lo: 0x02}, - {value: 0x8104, lo: 0x94, hi: 0x94}, - {value: 0x8104, lo: 0xb4, hi: 0xb4}, - // Block 0x30, offset 0x11e - {value: 0x0000, lo: 0x02}, - {value: 0x8104, lo: 0x92, hi: 0x92}, - {value: 0x8132, lo: 0x9d, hi: 0x9d}, - // Block 0x31, offset 0x121 - {value: 0x0000, lo: 0x01}, - {value: 0x8131, lo: 0xa9, hi: 0xa9}, - // Block 0x32, offset 0x123 - {value: 0x0004, lo: 0x02}, - {value: 0x812e, lo: 0xb9, hi: 0xba}, - {value: 0x812d, lo: 0xbb, hi: 0xbb}, - // Block 0x33, offset 0x126 - {value: 0x0000, lo: 0x02}, - {value: 0x8132, lo: 0x97, hi: 0x97}, - {value: 0x812d, lo: 0x98, hi: 0x98}, - // Block 0x34, offset 0x129 - {value: 0x0000, lo: 0x03}, - {value: 0x8104, lo: 0xa0, hi: 0xa0}, - {value: 0x8132, lo: 0xb5, hi: 0xbc}, - {value: 0x812d, lo: 0xbf, hi: 0xbf}, - // Block 0x35, offset 0x12d - {value: 0x0000, lo: 0x04}, - {value: 0x8132, lo: 0xb0, hi: 0xb4}, - {value: 0x812d, lo: 0xb5, hi: 0xba}, - {value: 0x8132, lo: 0xbb, hi: 0xbc}, - {value: 0x812d, lo: 0xbd, hi: 0xbd}, - // Block 0x36, offset 0x132 - {value: 0x0000, lo: 0x08}, - {value: 0x2d66, lo: 0x80, hi: 0x80}, - {value: 0x2d6e, lo: 0x81, hi: 0x81}, - {value: 0xa000, lo: 0x82, hi: 0x82}, - {value: 0x2d76, lo: 0x83, hi: 0x83}, - {value: 0x8104, lo: 0x84, hi: 0x84}, - {value: 0x8132, lo: 0xab, hi: 0xab}, - {value: 0x812d, lo: 0xac, hi: 0xac}, - {value: 0x8132, lo: 0xad, hi: 0xb3}, - // Block 0x37, offset 0x13b - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0xaa, hi: 0xab}, - // Block 0x38, offset 0x13d - {value: 0x0000, lo: 0x02}, - {value: 0x8102, lo: 0xa6, hi: 0xa6}, - {value: 0x8104, lo: 0xb2, hi: 0xb3}, - // Block 0x39, offset 0x140 - {value: 0x0000, lo: 0x01}, - {value: 0x8102, lo: 0xb7, hi: 0xb7}, - // Block 0x3a, offset 0x142 - {value: 0x0000, lo: 0x0a}, - {value: 0x8132, lo: 0x90, hi: 0x92}, - {value: 0x8101, lo: 0x94, hi: 0x94}, - {value: 0x812d, lo: 0x95, hi: 0x99}, - {value: 0x8132, lo: 0x9a, hi: 0x9b}, - {value: 0x812d, lo: 0x9c, hi: 0x9f}, - {value: 0x8132, lo: 0xa0, hi: 0xa0}, - {value: 0x8101, lo: 0xa2, hi: 0xa8}, - {value: 0x812d, lo: 0xad, hi: 0xad}, - {value: 0x8132, lo: 0xb4, hi: 0xb4}, - {value: 0x8132, lo: 0xb8, hi: 0xb9}, - // Block 0x3b, offset 0x14d - {value: 0x0002, lo: 0x0a}, - {value: 0x0043, lo: 0xac, hi: 0xac}, - {value: 0x00d1, lo: 0xad, hi: 0xad}, - {value: 0x0045, lo: 0xae, hi: 0xae}, - {value: 0x0049, lo: 0xb0, hi: 0xb1}, - {value: 0x00e6, lo: 0xb2, hi: 0xb2}, - {value: 0x004f, lo: 0xb3, hi: 0xba}, - {value: 0x005f, lo: 0xbc, hi: 0xbc}, - {value: 0x00ef, lo: 0xbd, hi: 0xbd}, - {value: 0x0061, lo: 0xbe, hi: 0xbe}, - {value: 0x0065, lo: 0xbf, hi: 0xbf}, - // Block 0x3c, offset 0x158 - {value: 0x0000, lo: 0x0d}, - {value: 0x0001, lo: 0x80, hi: 0x8a}, - {value: 0x043b, lo: 0x91, hi: 0x91}, - {value: 0x429b, lo: 0x97, hi: 0x97}, - {value: 0x001d, lo: 0xa4, hi: 0xa4}, - {value: 0x1873, lo: 0xa5, hi: 0xa5}, - {value: 0x1b5c, lo: 0xa6, hi: 0xa6}, - {value: 0x0001, lo: 0xaf, hi: 0xaf}, - {value: 0x2691, lo: 0xb3, hi: 0xb3}, - {value: 0x27fe, lo: 0xb4, hi: 0xb4}, - {value: 0x2698, lo: 0xb6, hi: 0xb6}, - {value: 0x2808, lo: 0xb7, hi: 0xb7}, - {value: 0x186d, lo: 0xbc, hi: 0xbc}, - {value: 0x4269, lo: 0xbe, hi: 0xbe}, - // Block 0x3d, offset 0x166 - {value: 0x0002, lo: 0x0d}, - {value: 0x1933, lo: 0x87, hi: 0x87}, - {value: 0x1930, lo: 0x88, hi: 0x88}, - {value: 0x1870, lo: 0x89, hi: 0x89}, - {value: 0x298e, lo: 0x97, hi: 0x97}, - {value: 0x0001, lo: 0x9f, hi: 0x9f}, - {value: 0x0021, lo: 0xb0, hi: 0xb0}, - {value: 0x0093, lo: 0xb1, hi: 0xb1}, - {value: 0x0029, lo: 0xb4, hi: 0xb9}, - {value: 0x0017, lo: 0xba, hi: 0xba}, - {value: 0x0467, lo: 0xbb, hi: 0xbb}, - {value: 0x003b, lo: 0xbc, hi: 0xbc}, - {value: 0x0011, lo: 0xbd, hi: 0xbe}, - {value: 0x009d, lo: 0xbf, hi: 0xbf}, - // Block 0x3e, offset 0x174 - {value: 0x0002, lo: 0x0f}, - {value: 0x0021, lo: 0x80, hi: 0x89}, - {value: 0x0017, lo: 0x8a, hi: 0x8a}, - {value: 0x0467, lo: 0x8b, hi: 0x8b}, - {value: 0x003b, lo: 0x8c, hi: 0x8c}, - {value: 0x0011, lo: 0x8d, hi: 0x8e}, - {value: 0x0083, lo: 0x90, hi: 0x90}, - {value: 0x008b, lo: 0x91, hi: 0x91}, - {value: 0x009f, lo: 0x92, hi: 0x92}, - {value: 0x00b1, lo: 0x93, hi: 0x93}, - {value: 0x0104, lo: 0x94, hi: 0x94}, - {value: 0x0091, lo: 0x95, hi: 0x95}, - {value: 0x0097, lo: 0x96, hi: 0x99}, - {value: 0x00a1, lo: 0x9a, hi: 0x9a}, - {value: 0x00a7, lo: 0x9b, hi: 0x9c}, - {value: 0x1999, lo: 0xa8, hi: 0xa8}, - // Block 0x3f, offset 0x184 - {value: 0x0000, lo: 0x0d}, - {value: 0x8132, lo: 0x90, hi: 0x91}, - {value: 0x8101, lo: 0x92, hi: 0x93}, - {value: 0x8132, lo: 0x94, hi: 0x97}, - {value: 0x8101, lo: 0x98, hi: 0x9a}, - {value: 0x8132, lo: 0x9b, hi: 0x9c}, - {value: 0x8132, lo: 0xa1, hi: 0xa1}, - {value: 0x8101, lo: 0xa5, hi: 0xa6}, - {value: 0x8132, lo: 0xa7, hi: 0xa7}, - {value: 0x812d, lo: 0xa8, hi: 0xa8}, - {value: 0x8132, lo: 0xa9, hi: 0xa9}, - {value: 0x8101, lo: 0xaa, hi: 0xab}, - {value: 0x812d, lo: 0xac, hi: 0xaf}, - {value: 0x8132, lo: 0xb0, hi: 0xb0}, - // Block 0x40, offset 0x192 - {value: 0x0007, lo: 0x06}, - {value: 0x2180, lo: 0x89, hi: 0x89}, - {value: 0xa000, lo: 0x90, hi: 0x90}, - {value: 0xa000, lo: 0x92, hi: 0x92}, - {value: 0xa000, lo: 0x94, hi: 0x94}, - {value: 0x3bb9, lo: 0x9a, hi: 0x9b}, - {value: 0x3bc7, lo: 0xae, hi: 0xae}, - // Block 0x41, offset 0x199 - {value: 0x000e, lo: 0x05}, - {value: 0x3bce, lo: 0x8d, hi: 0x8e}, - {value: 0x3bd5, lo: 0x8f, hi: 0x8f}, - {value: 0xa000, lo: 0x90, hi: 0x90}, - {value: 0xa000, lo: 0x92, hi: 0x92}, - {value: 0xa000, lo: 0x94, hi: 0x94}, - // Block 0x42, offset 0x19f - {value: 0x0173, lo: 0x0e}, - {value: 0xa000, lo: 0x83, hi: 0x83}, - {value: 0x3be3, lo: 0x84, hi: 0x84}, - {value: 0xa000, lo: 0x88, hi: 0x88}, - {value: 0x3bea, lo: 0x89, hi: 0x89}, - {value: 0xa000, lo: 0x8b, hi: 0x8b}, - {value: 0x3bf1, lo: 0x8c, hi: 0x8c}, - {value: 0xa000, lo: 0xa3, hi: 0xa3}, - {value: 0x3bf8, lo: 0xa4, hi: 0xa4}, - {value: 0xa000, lo: 0xa5, hi: 0xa5}, - {value: 0x3bff, lo: 0xa6, hi: 0xa6}, - {value: 0x269f, lo: 0xac, hi: 0xad}, - {value: 0x26a6, lo: 0xaf, hi: 0xaf}, - {value: 0x281c, lo: 0xb0, hi: 0xb0}, - {value: 0xa000, lo: 0xbc, hi: 0xbc}, - // Block 0x43, offset 0x1ae - {value: 0x0007, lo: 0x03}, - {value: 0x3c68, lo: 0xa0, hi: 0xa1}, - {value: 0x3c92, lo: 0xa2, hi: 0xa3}, - {value: 0x3cbc, lo: 0xaa, hi: 0xad}, - // Block 0x44, offset 0x1b2 - {value: 0x0004, lo: 0x01}, - {value: 0x048b, lo: 0xa9, hi: 0xaa}, - // Block 0x45, offset 0x1b4 - {value: 0x0002, lo: 0x03}, - {value: 0x0057, lo: 0x80, hi: 0x8f}, - {value: 0x0083, lo: 0x90, hi: 0xa9}, - {value: 0x0021, lo: 0xaa, hi: 0xaa}, - // Block 0x46, offset 0x1b8 - {value: 0x0000, lo: 0x01}, - {value: 0x299b, lo: 0x8c, hi: 0x8c}, - // Block 0x47, offset 0x1ba - {value: 0x0263, lo: 0x02}, - {value: 0x1b8c, lo: 0xb4, hi: 0xb4}, - {value: 0x192d, lo: 0xb5, hi: 0xb6}, - // Block 0x48, offset 0x1bd - {value: 0x0000, lo: 0x01}, - {value: 0x44dd, lo: 0x9c, hi: 0x9c}, - // Block 0x49, offset 0x1bf - {value: 0x0000, lo: 0x02}, - {value: 0x0095, lo: 0xbc, hi: 0xbc}, - {value: 0x006d, lo: 0xbd, hi: 0xbd}, - // Block 0x4a, offset 0x1c2 - {value: 0x0000, lo: 0x01}, - {value: 0x8132, lo: 0xaf, hi: 0xb1}, - // Block 0x4b, offset 0x1c4 - {value: 0x0000, lo: 0x02}, - {value: 0x047f, lo: 0xaf, hi: 0xaf}, - {value: 0x8104, lo: 0xbf, hi: 0xbf}, - // Block 0x4c, offset 0x1c7 - {value: 0x0000, lo: 0x01}, - {value: 0x8132, lo: 0xa0, hi: 0xbf}, - // Block 0x4d, offset 0x1c9 - {value: 0x0000, lo: 0x01}, - {value: 0x0dc3, lo: 0x9f, hi: 0x9f}, - // Block 0x4e, offset 0x1cb - {value: 0x0000, lo: 0x01}, - {value: 0x162f, lo: 0xb3, hi: 0xb3}, - // Block 0x4f, offset 0x1cd - {value: 0x0004, lo: 0x0b}, - {value: 0x1597, lo: 0x80, hi: 0x82}, - {value: 0x15af, lo: 0x83, hi: 0x83}, - {value: 0x15c7, lo: 0x84, hi: 0x85}, - {value: 0x15d7, lo: 0x86, hi: 0x89}, - {value: 0x15eb, lo: 0x8a, hi: 0x8c}, - {value: 0x15ff, lo: 0x8d, hi: 0x8d}, - {value: 0x1607, lo: 0x8e, hi: 0x8e}, - {value: 0x160f, lo: 0x8f, hi: 0x90}, - {value: 0x161b, lo: 0x91, hi: 0x93}, - {value: 0x162b, lo: 0x94, hi: 0x94}, - {value: 0x1633, lo: 0x95, hi: 0x95}, - // Block 0x50, offset 0x1d9 - {value: 0x0004, lo: 0x09}, - {value: 0x0001, lo: 0x80, hi: 0x80}, - {value: 0x812c, lo: 0xaa, hi: 0xaa}, - {value: 0x8131, lo: 0xab, hi: 0xab}, - {value: 0x8133, lo: 0xac, hi: 0xac}, - {value: 0x812e, lo: 0xad, hi: 0xad}, - {value: 0x812f, lo: 0xae, hi: 0xae}, - {value: 0x812f, lo: 0xaf, hi: 0xaf}, - {value: 0x04b3, lo: 0xb6, hi: 0xb6}, - {value: 0x0887, lo: 0xb8, hi: 0xba}, - // Block 0x51, offset 0x1e3 - {value: 0x0006, lo: 0x09}, - {value: 0x0313, lo: 0xb1, hi: 0xb1}, - {value: 0x0317, lo: 0xb2, hi: 0xb2}, - {value: 0x4a3b, lo: 0xb3, hi: 0xb3}, - {value: 0x031b, lo: 0xb4, hi: 0xb4}, - {value: 0x4a41, lo: 0xb5, hi: 0xb6}, - {value: 0x031f, lo: 0xb7, hi: 0xb7}, - {value: 0x0323, lo: 0xb8, hi: 0xb8}, - {value: 0x0327, lo: 0xb9, hi: 0xb9}, - {value: 0x4a4d, lo: 0xba, hi: 0xbf}, - // Block 0x52, offset 0x1ed - {value: 0x0000, lo: 0x02}, - {value: 0x8132, lo: 0xaf, hi: 0xaf}, - {value: 0x8132, lo: 0xb4, hi: 0xbd}, - // Block 0x53, offset 0x1f0 - {value: 0x0000, lo: 0x03}, - {value: 0x020f, lo: 0x9c, hi: 0x9c}, - {value: 0x0212, lo: 0x9d, hi: 0x9d}, - {value: 0x8132, lo: 0x9e, hi: 0x9f}, - // Block 0x54, offset 0x1f4 - {value: 0x0000, lo: 0x01}, - {value: 0x8132, lo: 0xb0, hi: 0xb1}, - // Block 0x55, offset 0x1f6 - {value: 0x0000, lo: 0x01}, - {value: 0x163b, lo: 0xb0, hi: 0xb0}, - // Block 0x56, offset 0x1f8 - {value: 0x000c, lo: 0x01}, - {value: 0x00d7, lo: 0xb8, hi: 0xb9}, - // Block 0x57, offset 0x1fa - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0x86, hi: 0x86}, - // Block 0x58, offset 0x1fc - {value: 0x0000, lo: 0x02}, - {value: 0x8104, lo: 0x84, hi: 0x84}, - {value: 0x8132, lo: 0xa0, hi: 0xb1}, - // Block 0x59, offset 0x1ff - {value: 0x0000, lo: 0x01}, - {value: 0x812d, lo: 0xab, hi: 0xad}, - // Block 0x5a, offset 0x201 - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0x93, hi: 0x93}, - // Block 0x5b, offset 0x203 - {value: 0x0000, lo: 0x01}, - {value: 0x8102, lo: 0xb3, hi: 0xb3}, - // Block 0x5c, offset 0x205 - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0x80, hi: 0x80}, - // Block 0x5d, offset 0x207 - {value: 0x0000, lo: 0x05}, - {value: 0x8132, lo: 0xb0, hi: 0xb0}, - {value: 0x8132, lo: 0xb2, hi: 0xb3}, - {value: 0x812d, lo: 0xb4, hi: 0xb4}, - {value: 0x8132, lo: 0xb7, hi: 0xb8}, - {value: 0x8132, lo: 0xbe, hi: 0xbf}, - // Block 0x5e, offset 0x20d - {value: 0x0000, lo: 0x02}, - {value: 0x8132, lo: 0x81, hi: 0x81}, - {value: 0x8104, lo: 0xb6, hi: 0xb6}, - // Block 0x5f, offset 0x210 - {value: 0x0008, lo: 0x03}, - {value: 0x1637, lo: 0x9c, hi: 0x9d}, - {value: 0x0125, lo: 0x9e, hi: 0x9e}, - {value: 0x1643, lo: 0x9f, hi: 0x9f}, - // Block 0x60, offset 0x214 - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0xad, hi: 0xad}, - // Block 0x61, offset 0x216 - {value: 0x0000, lo: 0x06}, - {value: 0xe500, lo: 0x80, hi: 0x80}, - {value: 0xc600, lo: 0x81, hi: 0x9b}, - {value: 0xe500, lo: 0x9c, hi: 0x9c}, - {value: 0xc600, lo: 0x9d, hi: 0xb7}, - {value: 0xe500, lo: 0xb8, hi: 0xb8}, - {value: 0xc600, lo: 0xb9, hi: 0xbf}, - // Block 0x62, offset 0x21d - {value: 0x0000, lo: 0x05}, - {value: 0xc600, lo: 0x80, hi: 0x93}, - {value: 0xe500, lo: 0x94, hi: 0x94}, - {value: 0xc600, lo: 0x95, hi: 0xaf}, - {value: 0xe500, lo: 0xb0, hi: 0xb0}, - {value: 0xc600, lo: 0xb1, hi: 0xbf}, - // Block 0x63, offset 0x223 - {value: 0x0000, lo: 0x05}, - {value: 0xc600, lo: 0x80, hi: 0x8b}, - {value: 0xe500, lo: 0x8c, hi: 0x8c}, - {value: 0xc600, lo: 0x8d, hi: 0xa7}, - {value: 0xe500, lo: 0xa8, hi: 0xa8}, - {value: 0xc600, lo: 0xa9, hi: 0xbf}, - // Block 0x64, offset 0x229 - {value: 0x0000, lo: 0x07}, - {value: 0xc600, lo: 0x80, hi: 0x83}, - {value: 0xe500, lo: 0x84, hi: 0x84}, - {value: 0xc600, lo: 0x85, hi: 0x9f}, - {value: 0xe500, lo: 0xa0, hi: 0xa0}, - {value: 0xc600, lo: 0xa1, hi: 0xbb}, - {value: 0xe500, lo: 0xbc, hi: 0xbc}, - {value: 0xc600, lo: 0xbd, hi: 0xbf}, - // Block 0x65, offset 0x231 - {value: 0x0000, lo: 0x05}, - {value: 0xc600, lo: 0x80, hi: 0x97}, - {value: 0xe500, lo: 0x98, hi: 0x98}, - {value: 0xc600, lo: 0x99, hi: 0xb3}, - {value: 0xe500, lo: 0xb4, hi: 0xb4}, - {value: 0xc600, lo: 0xb5, hi: 0xbf}, - // Block 0x66, offset 0x237 - {value: 0x0000, lo: 0x05}, - {value: 0xc600, lo: 0x80, hi: 0x8f}, - {value: 0xe500, lo: 0x90, hi: 0x90}, - {value: 0xc600, lo: 0x91, hi: 0xab}, - {value: 0xe500, lo: 0xac, hi: 0xac}, - {value: 0xc600, lo: 0xad, hi: 0xbf}, - // Block 0x67, offset 0x23d - {value: 0x0000, lo: 0x05}, - {value: 0xc600, lo: 0x80, hi: 0x87}, - {value: 0xe500, lo: 0x88, hi: 0x88}, - {value: 0xc600, lo: 0x89, hi: 0xa3}, - {value: 0xe500, lo: 0xa4, hi: 0xa4}, - {value: 0xc600, lo: 0xa5, hi: 0xbf}, - // Block 0x68, offset 0x243 - {value: 0x0000, lo: 0x03}, - {value: 0xc600, lo: 0x80, hi: 0x87}, - {value: 0xe500, lo: 0x88, hi: 0x88}, - {value: 0xc600, lo: 0x89, hi: 0xa3}, - // Block 0x69, offset 0x247 - {value: 0x0002, lo: 0x01}, - {value: 0x0003, lo: 0x81, hi: 0xbf}, - // Block 0x6a, offset 0x249 - {value: 0x0000, lo: 0x01}, - {value: 0x812d, lo: 0xbd, hi: 0xbd}, - // Block 0x6b, offset 0x24b - {value: 0x0000, lo: 0x01}, - {value: 0x812d, lo: 0xa0, hi: 0xa0}, - // Block 0x6c, offset 0x24d - {value: 0x0000, lo: 0x01}, - {value: 0x8132, lo: 0xb6, hi: 0xba}, - // Block 0x6d, offset 0x24f - {value: 0x002c, lo: 0x05}, - {value: 0x812d, lo: 0x8d, hi: 0x8d}, - {value: 0x8132, lo: 0x8f, hi: 0x8f}, - {value: 0x8132, lo: 0xb8, hi: 0xb8}, - {value: 0x8101, lo: 0xb9, hi: 0xba}, - {value: 0x8104, lo: 0xbf, hi: 0xbf}, - // Block 0x6e, offset 0x255 - {value: 0x0000, lo: 0x02}, - {value: 0x8132, lo: 0xa5, hi: 0xa5}, - {value: 0x812d, lo: 0xa6, hi: 0xa6}, - // Block 0x6f, offset 0x258 - {value: 0x0000, lo: 0x01}, - {value: 0x8132, lo: 0xa4, hi: 0xa7}, - // Block 0x70, offset 0x25a - {value: 0x0000, lo: 0x05}, - {value: 0x812d, lo: 0x86, hi: 0x87}, - {value: 0x8132, lo: 0x88, hi: 0x8a}, - {value: 0x812d, lo: 0x8b, hi: 0x8b}, - {value: 0x8132, lo: 0x8c, hi: 0x8c}, - {value: 0x812d, lo: 0x8d, hi: 0x90}, - // Block 0x71, offset 0x260 - {value: 0x0000, lo: 0x02}, - {value: 0x8104, lo: 0x86, hi: 0x86}, - {value: 0x8104, lo: 0xbf, hi: 0xbf}, - // Block 0x72, offset 0x263 - {value: 0x17fe, lo: 0x07}, - {value: 0xa000, lo: 0x99, hi: 0x99}, - {value: 0x4238, lo: 0x9a, hi: 0x9a}, - {value: 0xa000, lo: 0x9b, hi: 0x9b}, - {value: 0x4242, lo: 0x9c, hi: 0x9c}, - {value: 0xa000, lo: 0xa5, hi: 0xa5}, - {value: 0x424c, lo: 0xab, hi: 0xab}, - {value: 0x8104, lo: 0xb9, hi: 0xba}, - // Block 0x73, offset 0x26b - {value: 0x0000, lo: 0x06}, - {value: 0x8132, lo: 0x80, hi: 0x82}, - {value: 0x9900, lo: 0xa7, hi: 0xa7}, - {value: 0x2d7e, lo: 0xae, hi: 0xae}, - {value: 0x2d88, lo: 0xaf, hi: 0xaf}, - {value: 0xa000, lo: 0xb1, hi: 0xb2}, - {value: 0x8104, lo: 0xb3, hi: 0xb4}, - // Block 0x74, offset 0x272 - {value: 0x0000, lo: 0x02}, - {value: 0x8104, lo: 0x80, hi: 0x80}, - {value: 0x8102, lo: 0x8a, hi: 0x8a}, - // Block 0x75, offset 0x275 - {value: 0x0000, lo: 0x02}, - {value: 0x8104, lo: 0xb5, hi: 0xb5}, - {value: 0x8102, lo: 0xb6, hi: 0xb6}, - // Block 0x76, offset 0x278 - {value: 0x0002, lo: 0x01}, - {value: 0x8102, lo: 0xa9, hi: 0xaa}, - // Block 0x77, offset 0x27a - {value: 0x0000, lo: 0x02}, - {value: 0x8102, lo: 0xbb, hi: 0xbc}, - {value: 0x9900, lo: 0xbe, hi: 0xbe}, - // Block 0x78, offset 0x27d - {value: 0x0000, lo: 0x07}, - {value: 0xa000, lo: 0x87, hi: 0x87}, - {value: 0x2d92, lo: 0x8b, hi: 0x8b}, - {value: 0x2d9c, lo: 0x8c, hi: 0x8c}, - {value: 0x8104, lo: 0x8d, hi: 0x8d}, - {value: 0x9900, lo: 0x97, hi: 0x97}, - {value: 0x8132, lo: 0xa6, hi: 0xac}, - {value: 0x8132, lo: 0xb0, hi: 0xb4}, - // Block 0x79, offset 0x285 - {value: 0x0000, lo: 0x03}, - {value: 0x8104, lo: 0x82, hi: 0x82}, - {value: 0x8102, lo: 0x86, hi: 0x86}, - {value: 0x8132, lo: 0x9e, hi: 0x9e}, - // Block 0x7a, offset 0x289 - {value: 0x6b5a, lo: 0x06}, - {value: 0x9900, lo: 0xb0, hi: 0xb0}, - {value: 0xa000, lo: 0xb9, hi: 0xb9}, - {value: 0x9900, lo: 0xba, hi: 0xba}, - {value: 0x2db0, lo: 0xbb, hi: 0xbb}, - {value: 0x2da6, lo: 0xbc, hi: 0xbd}, - {value: 0x2dba, lo: 0xbe, hi: 0xbe}, - // Block 0x7b, offset 0x290 - {value: 0x0000, lo: 0x02}, - {value: 0x8104, lo: 0x82, hi: 0x82}, - {value: 0x8102, lo: 0x83, hi: 0x83}, - // Block 0x7c, offset 0x293 - {value: 0x0000, lo: 0x05}, - {value: 0x9900, lo: 0xaf, hi: 0xaf}, - {value: 0xa000, lo: 0xb8, hi: 0xb9}, - {value: 0x2dc4, lo: 0xba, hi: 0xba}, - {value: 0x2dce, lo: 0xbb, hi: 0xbb}, - {value: 0x8104, lo: 0xbf, hi: 0xbf}, - // Block 0x7d, offset 0x299 - {value: 0x0000, lo: 0x01}, - {value: 0x8102, lo: 0x80, hi: 0x80}, - // Block 0x7e, offset 0x29b - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0xbf, hi: 0xbf}, - // Block 0x7f, offset 0x29d - {value: 0x0000, lo: 0x02}, - {value: 0x8104, lo: 0xb6, hi: 0xb6}, - {value: 0x8102, lo: 0xb7, hi: 0xb7}, - // Block 0x80, offset 0x2a0 - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0xab, hi: 0xab}, - // Block 0x81, offset 0x2a2 - {value: 0x0000, lo: 0x02}, - {value: 0x8104, lo: 0xb9, hi: 0xb9}, - {value: 0x8102, lo: 0xba, hi: 0xba}, - // Block 0x82, offset 0x2a5 - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0xb4, hi: 0xb4}, - // Block 0x83, offset 0x2a7 - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0x87, hi: 0x87}, - // Block 0x84, offset 0x2a9 - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0x99, hi: 0x99}, - // Block 0x85, offset 0x2ab - {value: 0x0000, lo: 0x02}, - {value: 0x8102, lo: 0x82, hi: 0x82}, - {value: 0x8104, lo: 0x84, hi: 0x85}, - // Block 0x86, offset 0x2ae - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0x97, hi: 0x97}, - // Block 0x87, offset 0x2b0 - {value: 0x0000, lo: 0x01}, - {value: 0x8101, lo: 0xb0, hi: 0xb4}, - // Block 0x88, offset 0x2b2 - {value: 0x0000, lo: 0x01}, - {value: 0x8132, lo: 0xb0, hi: 0xb6}, - // Block 0x89, offset 0x2b4 - {value: 0x0000, lo: 0x01}, - {value: 0x8101, lo: 0x9e, hi: 0x9e}, - // Block 0x8a, offset 0x2b6 - {value: 0x0000, lo: 0x0c}, - {value: 0x45cc, lo: 0x9e, hi: 0x9e}, - {value: 0x45d6, lo: 0x9f, hi: 0x9f}, - {value: 0x460a, lo: 0xa0, hi: 0xa0}, - {value: 0x4618, lo: 0xa1, hi: 0xa1}, - {value: 0x4626, lo: 0xa2, hi: 0xa2}, - {value: 0x4634, lo: 0xa3, hi: 0xa3}, - {value: 0x4642, lo: 0xa4, hi: 0xa4}, - {value: 0x812b, lo: 0xa5, hi: 0xa6}, - {value: 0x8101, lo: 0xa7, hi: 0xa9}, - {value: 0x8130, lo: 0xad, hi: 0xad}, - {value: 0x812b, lo: 0xae, hi: 0xb2}, - {value: 0x812d, lo: 0xbb, hi: 0xbf}, - // Block 0x8b, offset 0x2c3 - {value: 0x0000, lo: 0x09}, - {value: 0x812d, lo: 0x80, hi: 0x82}, - {value: 0x8132, lo: 0x85, hi: 0x89}, - {value: 0x812d, lo: 0x8a, hi: 0x8b}, - {value: 0x8132, lo: 0xaa, hi: 0xad}, - {value: 0x45e0, lo: 0xbb, hi: 0xbb}, - {value: 0x45ea, lo: 0xbc, hi: 0xbc}, - {value: 0x4650, lo: 0xbd, hi: 0xbd}, - {value: 0x466c, lo: 0xbe, hi: 0xbe}, - {value: 0x465e, lo: 0xbf, hi: 0xbf}, - // Block 0x8c, offset 0x2cd - {value: 0x0000, lo: 0x01}, - {value: 0x467a, lo: 0x80, hi: 0x80}, - // Block 0x8d, offset 0x2cf - {value: 0x0000, lo: 0x01}, - {value: 0x8132, lo: 0x82, hi: 0x84}, - // Block 0x8e, offset 0x2d1 - {value: 0x0002, lo: 0x03}, - {value: 0x0043, lo: 0x80, hi: 0x99}, - {value: 0x0083, lo: 0x9a, hi: 0xb3}, - {value: 0x0043, lo: 0xb4, hi: 0xbf}, - // Block 0x8f, offset 0x2d5 - {value: 0x0002, lo: 0x04}, - {value: 0x005b, lo: 0x80, hi: 0x8d}, - {value: 0x0083, lo: 0x8e, hi: 0x94}, - {value: 0x0093, lo: 0x96, hi: 0xa7}, - {value: 0x0043, lo: 0xa8, hi: 0xbf}, - // Block 0x90, offset 0x2da - {value: 0x0002, lo: 0x0b}, - {value: 0x0073, lo: 0x80, hi: 0x81}, - {value: 0x0083, lo: 0x82, hi: 0x9b}, - {value: 0x0043, lo: 0x9c, hi: 0x9c}, - {value: 0x0047, lo: 0x9e, hi: 0x9f}, - {value: 0x004f, lo: 0xa2, hi: 0xa2}, - {value: 0x0055, lo: 0xa5, hi: 0xa6}, - {value: 0x005d, lo: 0xa9, hi: 0xac}, - {value: 0x0067, lo: 0xae, hi: 0xb5}, - {value: 0x0083, lo: 0xb6, hi: 0xb9}, - {value: 0x008d, lo: 0xbb, hi: 0xbb}, - {value: 0x0091, lo: 0xbd, hi: 0xbf}, - // Block 0x91, offset 0x2e6 - {value: 0x0002, lo: 0x04}, - {value: 0x0097, lo: 0x80, hi: 0x83}, - {value: 0x00a1, lo: 0x85, hi: 0x8f}, - {value: 0x0043, lo: 0x90, hi: 0xa9}, - {value: 0x0083, lo: 0xaa, hi: 0xbf}, - // Block 0x92, offset 0x2eb - {value: 0x0002, lo: 0x08}, - {value: 0x00af, lo: 0x80, hi: 0x83}, - {value: 0x0043, lo: 0x84, hi: 0x85}, - {value: 0x0049, lo: 0x87, hi: 0x8a}, - {value: 0x0055, lo: 0x8d, hi: 0x94}, - {value: 0x0067, lo: 0x96, hi: 0x9c}, - {value: 0x0083, lo: 0x9e, hi: 0xb7}, - {value: 0x0043, lo: 0xb8, hi: 0xb9}, - {value: 0x0049, lo: 0xbb, hi: 0xbe}, - // Block 0x93, offset 0x2f4 - {value: 0x0002, lo: 0x05}, - {value: 0x0053, lo: 0x80, hi: 0x84}, - {value: 0x005f, lo: 0x86, hi: 0x86}, - {value: 0x0067, lo: 0x8a, hi: 0x90}, - {value: 0x0083, lo: 0x92, hi: 0xab}, - {value: 0x0043, lo: 0xac, hi: 0xbf}, - // Block 0x94, offset 0x2fa - {value: 0x0002, lo: 0x04}, - {value: 0x006b, lo: 0x80, hi: 0x85}, - {value: 0x0083, lo: 0x86, hi: 0x9f}, - {value: 0x0043, lo: 0xa0, hi: 0xb9}, - {value: 0x0083, lo: 0xba, hi: 0xbf}, - // Block 0x95, offset 0x2ff - {value: 0x0002, lo: 0x03}, - {value: 0x008f, lo: 0x80, hi: 0x93}, - {value: 0x0043, lo: 0x94, hi: 0xad}, - {value: 0x0083, lo: 0xae, hi: 0xbf}, - // Block 0x96, offset 0x303 - {value: 0x0002, lo: 0x04}, - {value: 0x00a7, lo: 0x80, hi: 0x87}, - {value: 0x0043, lo: 0x88, hi: 0xa1}, - {value: 0x0083, lo: 0xa2, hi: 0xbb}, - {value: 0x0043, lo: 0xbc, hi: 0xbf}, - // Block 0x97, offset 0x308 - {value: 0x0002, lo: 0x03}, - {value: 0x004b, lo: 0x80, hi: 0x95}, - {value: 0x0083, lo: 0x96, hi: 0xaf}, - {value: 0x0043, lo: 0xb0, hi: 0xbf}, - // Block 0x98, offset 0x30c - {value: 0x0003, lo: 0x0f}, - {value: 0x01b8, lo: 0x80, hi: 0x80}, - {value: 0x045f, lo: 0x81, hi: 0x81}, - {value: 0x01bb, lo: 0x82, hi: 0x9a}, - {value: 0x045b, lo: 0x9b, hi: 0x9b}, - {value: 0x01c7, lo: 0x9c, hi: 0x9c}, - {value: 0x01d0, lo: 0x9d, hi: 0x9d}, - {value: 0x01d6, lo: 0x9e, hi: 0x9e}, - {value: 0x01fa, lo: 0x9f, hi: 0x9f}, - {value: 0x01eb, lo: 0xa0, hi: 0xa0}, - {value: 0x01e8, lo: 0xa1, hi: 0xa1}, - {value: 0x0173, lo: 0xa2, hi: 0xb2}, - {value: 0x0188, lo: 0xb3, hi: 0xb3}, - {value: 0x01a6, lo: 0xb4, hi: 0xba}, - {value: 0x045f, lo: 0xbb, hi: 0xbb}, - {value: 0x01bb, lo: 0xbc, hi: 0xbf}, - // Block 0x99, offset 0x31c - {value: 0x0003, lo: 0x0d}, - {value: 0x01c7, lo: 0x80, hi: 0x94}, - {value: 0x045b, lo: 0x95, hi: 0x95}, - {value: 0x01c7, lo: 0x96, hi: 0x96}, - {value: 0x01d0, lo: 0x97, hi: 0x97}, - {value: 0x01d6, lo: 0x98, hi: 0x98}, - {value: 0x01fa, lo: 0x99, hi: 0x99}, - {value: 0x01eb, lo: 0x9a, hi: 0x9a}, - {value: 0x01e8, lo: 0x9b, hi: 0x9b}, - {value: 0x0173, lo: 0x9c, hi: 0xac}, - {value: 0x0188, lo: 0xad, hi: 0xad}, - {value: 0x01a6, lo: 0xae, hi: 0xb4}, - {value: 0x045f, lo: 0xb5, hi: 0xb5}, - {value: 0x01bb, lo: 0xb6, hi: 0xbf}, - // Block 0x9a, offset 0x32a - {value: 0x0003, lo: 0x0d}, - {value: 0x01d9, lo: 0x80, hi: 0x8e}, - {value: 0x045b, lo: 0x8f, hi: 0x8f}, - {value: 0x01c7, lo: 0x90, hi: 0x90}, - {value: 0x01d0, lo: 0x91, hi: 0x91}, - {value: 0x01d6, lo: 0x92, hi: 0x92}, - {value: 0x01fa, lo: 0x93, hi: 0x93}, - {value: 0x01eb, lo: 0x94, hi: 0x94}, - {value: 0x01e8, lo: 0x95, hi: 0x95}, - {value: 0x0173, lo: 0x96, hi: 0xa6}, - {value: 0x0188, lo: 0xa7, hi: 0xa7}, - {value: 0x01a6, lo: 0xa8, hi: 0xae}, - {value: 0x045f, lo: 0xaf, hi: 0xaf}, - {value: 0x01bb, lo: 0xb0, hi: 0xbf}, - // Block 0x9b, offset 0x338 - {value: 0x0003, lo: 0x0d}, - {value: 0x01eb, lo: 0x80, hi: 0x88}, - {value: 0x045b, lo: 0x89, hi: 0x89}, - {value: 0x01c7, lo: 0x8a, hi: 0x8a}, - {value: 0x01d0, lo: 0x8b, hi: 0x8b}, - {value: 0x01d6, lo: 0x8c, hi: 0x8c}, - {value: 0x01fa, lo: 0x8d, hi: 0x8d}, - {value: 0x01eb, lo: 0x8e, hi: 0x8e}, - {value: 0x01e8, lo: 0x8f, hi: 0x8f}, - {value: 0x0173, lo: 0x90, hi: 0xa0}, - {value: 0x0188, lo: 0xa1, hi: 0xa1}, - {value: 0x01a6, lo: 0xa2, hi: 0xa8}, - {value: 0x045f, lo: 0xa9, hi: 0xa9}, - {value: 0x01bb, lo: 0xaa, hi: 0xbf}, - // Block 0x9c, offset 0x346 - {value: 0x0000, lo: 0x05}, - {value: 0x8132, lo: 0x80, hi: 0x86}, - {value: 0x8132, lo: 0x88, hi: 0x98}, - {value: 0x8132, lo: 0x9b, hi: 0xa1}, - {value: 0x8132, lo: 0xa3, hi: 0xa4}, - {value: 0x8132, lo: 0xa6, hi: 0xaa}, - // Block 0x9d, offset 0x34c - {value: 0x0000, lo: 0x01}, - {value: 0x812d, lo: 0x90, hi: 0x96}, - // Block 0x9e, offset 0x34e - {value: 0x0000, lo: 0x02}, - {value: 0x8132, lo: 0x84, hi: 0x89}, - {value: 0x8102, lo: 0x8a, hi: 0x8a}, - // Block 0x9f, offset 0x351 - {value: 0x0002, lo: 0x09}, - {value: 0x0063, lo: 0x80, hi: 0x89}, - {value: 0x1951, lo: 0x8a, hi: 0x8a}, - {value: 0x1981, lo: 0x8b, hi: 0x8b}, - {value: 0x199c, lo: 0x8c, hi: 0x8c}, - {value: 0x19a2, lo: 0x8d, hi: 0x8d}, - {value: 0x1bc0, lo: 0x8e, hi: 0x8e}, - {value: 0x19ae, lo: 0x8f, hi: 0x8f}, - {value: 0x197b, lo: 0xaa, hi: 0xaa}, - {value: 0x197e, lo: 0xab, hi: 0xab}, - // Block 0xa0, offset 0x35b - {value: 0x0000, lo: 0x01}, - {value: 0x193f, lo: 0x90, hi: 0x90}, - // Block 0xa1, offset 0x35d - {value: 0x0028, lo: 0x09}, - {value: 0x2862, lo: 0x80, hi: 0x80}, - {value: 0x2826, lo: 0x81, hi: 0x81}, - {value: 0x2830, lo: 0x82, hi: 0x82}, - {value: 0x2844, lo: 0x83, hi: 0x84}, - {value: 0x284e, lo: 0x85, hi: 0x86}, - {value: 0x283a, lo: 0x87, hi: 0x87}, - {value: 0x2858, lo: 0x88, hi: 0x88}, - {value: 0x0b6f, lo: 0x90, hi: 0x90}, - {value: 0x08e7, lo: 0x91, hi: 0x91}, -} - -// recompMap: 7520 bytes (entries only) -var recompMap map[uint32]rune -var recompMapOnce sync.Once - -const recompMapPacked = "" + - "\x00A\x03\x00\x00\x00\x00\xc0" + // 0x00410300: 0x000000C0 - "\x00A\x03\x01\x00\x00\x00\xc1" + // 0x00410301: 0x000000C1 - "\x00A\x03\x02\x00\x00\x00\xc2" + // 0x00410302: 0x000000C2 - "\x00A\x03\x03\x00\x00\x00\xc3" + // 0x00410303: 0x000000C3 - "\x00A\x03\b\x00\x00\x00\xc4" + // 0x00410308: 0x000000C4 - "\x00A\x03\n\x00\x00\x00\xc5" + // 0x0041030A: 0x000000C5 - "\x00C\x03'\x00\x00\x00\xc7" + // 0x00430327: 0x000000C7 - "\x00E\x03\x00\x00\x00\x00\xc8" + // 0x00450300: 0x000000C8 - "\x00E\x03\x01\x00\x00\x00\xc9" + // 0x00450301: 0x000000C9 - "\x00E\x03\x02\x00\x00\x00\xca" + // 0x00450302: 0x000000CA - "\x00E\x03\b\x00\x00\x00\xcb" + // 0x00450308: 0x000000CB - "\x00I\x03\x00\x00\x00\x00\xcc" + // 0x00490300: 0x000000CC - "\x00I\x03\x01\x00\x00\x00\xcd" + // 0x00490301: 0x000000CD - "\x00I\x03\x02\x00\x00\x00\xce" + // 0x00490302: 0x000000CE - "\x00I\x03\b\x00\x00\x00\xcf" + // 0x00490308: 0x000000CF - "\x00N\x03\x03\x00\x00\x00\xd1" + // 0x004E0303: 0x000000D1 - "\x00O\x03\x00\x00\x00\x00\xd2" + // 0x004F0300: 0x000000D2 - "\x00O\x03\x01\x00\x00\x00\xd3" + // 0x004F0301: 0x000000D3 - "\x00O\x03\x02\x00\x00\x00\xd4" + // 0x004F0302: 0x000000D4 - "\x00O\x03\x03\x00\x00\x00\xd5" + // 0x004F0303: 0x000000D5 - "\x00O\x03\b\x00\x00\x00\xd6" + // 0x004F0308: 0x000000D6 - "\x00U\x03\x00\x00\x00\x00\xd9" + // 0x00550300: 0x000000D9 - "\x00U\x03\x01\x00\x00\x00\xda" + // 0x00550301: 0x000000DA - "\x00U\x03\x02\x00\x00\x00\xdb" + // 0x00550302: 0x000000DB - "\x00U\x03\b\x00\x00\x00\xdc" + // 0x00550308: 0x000000DC - "\x00Y\x03\x01\x00\x00\x00\xdd" + // 0x00590301: 0x000000DD - "\x00a\x03\x00\x00\x00\x00\xe0" + // 0x00610300: 0x000000E0 - "\x00a\x03\x01\x00\x00\x00\xe1" + // 0x00610301: 0x000000E1 - "\x00a\x03\x02\x00\x00\x00\xe2" + // 0x00610302: 0x000000E2 - "\x00a\x03\x03\x00\x00\x00\xe3" + // 0x00610303: 0x000000E3 - "\x00a\x03\b\x00\x00\x00\xe4" + // 0x00610308: 0x000000E4 - "\x00a\x03\n\x00\x00\x00\xe5" + // 0x0061030A: 0x000000E5 - "\x00c\x03'\x00\x00\x00\xe7" + // 0x00630327: 0x000000E7 - "\x00e\x03\x00\x00\x00\x00\xe8" + // 0x00650300: 0x000000E8 - "\x00e\x03\x01\x00\x00\x00\xe9" + // 0x00650301: 0x000000E9 - "\x00e\x03\x02\x00\x00\x00\xea" + // 0x00650302: 0x000000EA - "\x00e\x03\b\x00\x00\x00\xeb" + // 0x00650308: 0x000000EB - "\x00i\x03\x00\x00\x00\x00\xec" + // 0x00690300: 0x000000EC - "\x00i\x03\x01\x00\x00\x00\xed" + // 0x00690301: 0x000000ED - "\x00i\x03\x02\x00\x00\x00\xee" + // 0x00690302: 0x000000EE - "\x00i\x03\b\x00\x00\x00\xef" + // 0x00690308: 0x000000EF - "\x00n\x03\x03\x00\x00\x00\xf1" + // 0x006E0303: 0x000000F1 - "\x00o\x03\x00\x00\x00\x00\xf2" + // 0x006F0300: 0x000000F2 - "\x00o\x03\x01\x00\x00\x00\xf3" + // 0x006F0301: 0x000000F3 - "\x00o\x03\x02\x00\x00\x00\xf4" + // 0x006F0302: 0x000000F4 - "\x00o\x03\x03\x00\x00\x00\xf5" + // 0x006F0303: 0x000000F5 - "\x00o\x03\b\x00\x00\x00\xf6" + // 0x006F0308: 0x000000F6 - "\x00u\x03\x00\x00\x00\x00\xf9" + // 0x00750300: 0x000000F9 - "\x00u\x03\x01\x00\x00\x00\xfa" + // 0x00750301: 0x000000FA - "\x00u\x03\x02\x00\x00\x00\xfb" + // 0x00750302: 0x000000FB - "\x00u\x03\b\x00\x00\x00\xfc" + // 0x00750308: 0x000000FC - "\x00y\x03\x01\x00\x00\x00\xfd" + // 0x00790301: 0x000000FD - "\x00y\x03\b\x00\x00\x00\xff" + // 0x00790308: 0x000000FF - "\x00A\x03\x04\x00\x00\x01\x00" + // 0x00410304: 0x00000100 - "\x00a\x03\x04\x00\x00\x01\x01" + // 0x00610304: 0x00000101 - "\x00A\x03\x06\x00\x00\x01\x02" + // 0x00410306: 0x00000102 - "\x00a\x03\x06\x00\x00\x01\x03" + // 0x00610306: 0x00000103 - "\x00A\x03(\x00\x00\x01\x04" + // 0x00410328: 0x00000104 - "\x00a\x03(\x00\x00\x01\x05" + // 0x00610328: 0x00000105 - "\x00C\x03\x01\x00\x00\x01\x06" + // 0x00430301: 0x00000106 - "\x00c\x03\x01\x00\x00\x01\a" + // 0x00630301: 0x00000107 - "\x00C\x03\x02\x00\x00\x01\b" + // 0x00430302: 0x00000108 - "\x00c\x03\x02\x00\x00\x01\t" + // 0x00630302: 0x00000109 - "\x00C\x03\a\x00\x00\x01\n" + // 0x00430307: 0x0000010A - "\x00c\x03\a\x00\x00\x01\v" + // 0x00630307: 0x0000010B - "\x00C\x03\f\x00\x00\x01\f" + // 0x0043030C: 0x0000010C - "\x00c\x03\f\x00\x00\x01\r" + // 0x0063030C: 0x0000010D - "\x00D\x03\f\x00\x00\x01\x0e" + // 0x0044030C: 0x0000010E - "\x00d\x03\f\x00\x00\x01\x0f" + // 0x0064030C: 0x0000010F - "\x00E\x03\x04\x00\x00\x01\x12" + // 0x00450304: 0x00000112 - "\x00e\x03\x04\x00\x00\x01\x13" + // 0x00650304: 0x00000113 - "\x00E\x03\x06\x00\x00\x01\x14" + // 0x00450306: 0x00000114 - "\x00e\x03\x06\x00\x00\x01\x15" + // 0x00650306: 0x00000115 - "\x00E\x03\a\x00\x00\x01\x16" + // 0x00450307: 0x00000116 - "\x00e\x03\a\x00\x00\x01\x17" + // 0x00650307: 0x00000117 - "\x00E\x03(\x00\x00\x01\x18" + // 0x00450328: 0x00000118 - "\x00e\x03(\x00\x00\x01\x19" + // 0x00650328: 0x00000119 - "\x00E\x03\f\x00\x00\x01\x1a" + // 0x0045030C: 0x0000011A - "\x00e\x03\f\x00\x00\x01\x1b" + // 0x0065030C: 0x0000011B - "\x00G\x03\x02\x00\x00\x01\x1c" + // 0x00470302: 0x0000011C - "\x00g\x03\x02\x00\x00\x01\x1d" + // 0x00670302: 0x0000011D - "\x00G\x03\x06\x00\x00\x01\x1e" + // 0x00470306: 0x0000011E - "\x00g\x03\x06\x00\x00\x01\x1f" + // 0x00670306: 0x0000011F - "\x00G\x03\a\x00\x00\x01 " + // 0x00470307: 0x00000120 - "\x00g\x03\a\x00\x00\x01!" + // 0x00670307: 0x00000121 - "\x00G\x03'\x00\x00\x01\"" + // 0x00470327: 0x00000122 - "\x00g\x03'\x00\x00\x01#" + // 0x00670327: 0x00000123 - "\x00H\x03\x02\x00\x00\x01$" + // 0x00480302: 0x00000124 - "\x00h\x03\x02\x00\x00\x01%" + // 0x00680302: 0x00000125 - "\x00I\x03\x03\x00\x00\x01(" + // 0x00490303: 0x00000128 - "\x00i\x03\x03\x00\x00\x01)" + // 0x00690303: 0x00000129 - "\x00I\x03\x04\x00\x00\x01*" + // 0x00490304: 0x0000012A - "\x00i\x03\x04\x00\x00\x01+" + // 0x00690304: 0x0000012B - "\x00I\x03\x06\x00\x00\x01," + // 0x00490306: 0x0000012C - "\x00i\x03\x06\x00\x00\x01-" + // 0x00690306: 0x0000012D - "\x00I\x03(\x00\x00\x01." + // 0x00490328: 0x0000012E - "\x00i\x03(\x00\x00\x01/" + // 0x00690328: 0x0000012F - "\x00I\x03\a\x00\x00\x010" + // 0x00490307: 0x00000130 - "\x00J\x03\x02\x00\x00\x014" + // 0x004A0302: 0x00000134 - "\x00j\x03\x02\x00\x00\x015" + // 0x006A0302: 0x00000135 - "\x00K\x03'\x00\x00\x016" + // 0x004B0327: 0x00000136 - "\x00k\x03'\x00\x00\x017" + // 0x006B0327: 0x00000137 - "\x00L\x03\x01\x00\x00\x019" + // 0x004C0301: 0x00000139 - "\x00l\x03\x01\x00\x00\x01:" + // 0x006C0301: 0x0000013A - "\x00L\x03'\x00\x00\x01;" + // 0x004C0327: 0x0000013B - "\x00l\x03'\x00\x00\x01<" + // 0x006C0327: 0x0000013C - "\x00L\x03\f\x00\x00\x01=" + // 0x004C030C: 0x0000013D - "\x00l\x03\f\x00\x00\x01>" + // 0x006C030C: 0x0000013E - "\x00N\x03\x01\x00\x00\x01C" + // 0x004E0301: 0x00000143 - "\x00n\x03\x01\x00\x00\x01D" + // 0x006E0301: 0x00000144 - "\x00N\x03'\x00\x00\x01E" + // 0x004E0327: 0x00000145 - "\x00n\x03'\x00\x00\x01F" + // 0x006E0327: 0x00000146 - "\x00N\x03\f\x00\x00\x01G" + // 0x004E030C: 0x00000147 - "\x00n\x03\f\x00\x00\x01H" + // 0x006E030C: 0x00000148 - "\x00O\x03\x04\x00\x00\x01L" + // 0x004F0304: 0x0000014C - "\x00o\x03\x04\x00\x00\x01M" + // 0x006F0304: 0x0000014D - "\x00O\x03\x06\x00\x00\x01N" + // 0x004F0306: 0x0000014E - "\x00o\x03\x06\x00\x00\x01O" + // 0x006F0306: 0x0000014F - "\x00O\x03\v\x00\x00\x01P" + // 0x004F030B: 0x00000150 - "\x00o\x03\v\x00\x00\x01Q" + // 0x006F030B: 0x00000151 - "\x00R\x03\x01\x00\x00\x01T" + // 0x00520301: 0x00000154 - "\x00r\x03\x01\x00\x00\x01U" + // 0x00720301: 0x00000155 - "\x00R\x03'\x00\x00\x01V" + // 0x00520327: 0x00000156 - "\x00r\x03'\x00\x00\x01W" + // 0x00720327: 0x00000157 - "\x00R\x03\f\x00\x00\x01X" + // 0x0052030C: 0x00000158 - "\x00r\x03\f\x00\x00\x01Y" + // 0x0072030C: 0x00000159 - "\x00S\x03\x01\x00\x00\x01Z" + // 0x00530301: 0x0000015A - "\x00s\x03\x01\x00\x00\x01[" + // 0x00730301: 0x0000015B - "\x00S\x03\x02\x00\x00\x01\\" + // 0x00530302: 0x0000015C - "\x00s\x03\x02\x00\x00\x01]" + // 0x00730302: 0x0000015D - "\x00S\x03'\x00\x00\x01^" + // 0x00530327: 0x0000015E - "\x00s\x03'\x00\x00\x01_" + // 0x00730327: 0x0000015F - "\x00S\x03\f\x00\x00\x01`" + // 0x0053030C: 0x00000160 - "\x00s\x03\f\x00\x00\x01a" + // 0x0073030C: 0x00000161 - "\x00T\x03'\x00\x00\x01b" + // 0x00540327: 0x00000162 - "\x00t\x03'\x00\x00\x01c" + // 0x00740327: 0x00000163 - "\x00T\x03\f\x00\x00\x01d" + // 0x0054030C: 0x00000164 - "\x00t\x03\f\x00\x00\x01e" + // 0x0074030C: 0x00000165 - "\x00U\x03\x03\x00\x00\x01h" + // 0x00550303: 0x00000168 - "\x00u\x03\x03\x00\x00\x01i" + // 0x00750303: 0x00000169 - "\x00U\x03\x04\x00\x00\x01j" + // 0x00550304: 0x0000016A - "\x00u\x03\x04\x00\x00\x01k" + // 0x00750304: 0x0000016B - "\x00U\x03\x06\x00\x00\x01l" + // 0x00550306: 0x0000016C - "\x00u\x03\x06\x00\x00\x01m" + // 0x00750306: 0x0000016D - "\x00U\x03\n\x00\x00\x01n" + // 0x0055030A: 0x0000016E - "\x00u\x03\n\x00\x00\x01o" + // 0x0075030A: 0x0000016F - "\x00U\x03\v\x00\x00\x01p" + // 0x0055030B: 0x00000170 - "\x00u\x03\v\x00\x00\x01q" + // 0x0075030B: 0x00000171 - "\x00U\x03(\x00\x00\x01r" + // 0x00550328: 0x00000172 - "\x00u\x03(\x00\x00\x01s" + // 0x00750328: 0x00000173 - "\x00W\x03\x02\x00\x00\x01t" + // 0x00570302: 0x00000174 - "\x00w\x03\x02\x00\x00\x01u" + // 0x00770302: 0x00000175 - "\x00Y\x03\x02\x00\x00\x01v" + // 0x00590302: 0x00000176 - "\x00y\x03\x02\x00\x00\x01w" + // 0x00790302: 0x00000177 - "\x00Y\x03\b\x00\x00\x01x" + // 0x00590308: 0x00000178 - "\x00Z\x03\x01\x00\x00\x01y" + // 0x005A0301: 0x00000179 - "\x00z\x03\x01\x00\x00\x01z" + // 0x007A0301: 0x0000017A - "\x00Z\x03\a\x00\x00\x01{" + // 0x005A0307: 0x0000017B - "\x00z\x03\a\x00\x00\x01|" + // 0x007A0307: 0x0000017C - "\x00Z\x03\f\x00\x00\x01}" + // 0x005A030C: 0x0000017D - "\x00z\x03\f\x00\x00\x01~" + // 0x007A030C: 0x0000017E - "\x00O\x03\x1b\x00\x00\x01\xa0" + // 0x004F031B: 0x000001A0 - "\x00o\x03\x1b\x00\x00\x01\xa1" + // 0x006F031B: 0x000001A1 - "\x00U\x03\x1b\x00\x00\x01\xaf" + // 0x0055031B: 0x000001AF - "\x00u\x03\x1b\x00\x00\x01\xb0" + // 0x0075031B: 0x000001B0 - "\x00A\x03\f\x00\x00\x01\xcd" + // 0x0041030C: 0x000001CD - "\x00a\x03\f\x00\x00\x01\xce" + // 0x0061030C: 0x000001CE - "\x00I\x03\f\x00\x00\x01\xcf" + // 0x0049030C: 0x000001CF - "\x00i\x03\f\x00\x00\x01\xd0" + // 0x0069030C: 0x000001D0 - "\x00O\x03\f\x00\x00\x01\xd1" + // 0x004F030C: 0x000001D1 - "\x00o\x03\f\x00\x00\x01\xd2" + // 0x006F030C: 0x000001D2 - "\x00U\x03\f\x00\x00\x01\xd3" + // 0x0055030C: 0x000001D3 - "\x00u\x03\f\x00\x00\x01\xd4" + // 0x0075030C: 0x000001D4 - "\x00\xdc\x03\x04\x00\x00\x01\xd5" + // 0x00DC0304: 0x000001D5 - "\x00\xfc\x03\x04\x00\x00\x01\xd6" + // 0x00FC0304: 0x000001D6 - "\x00\xdc\x03\x01\x00\x00\x01\xd7" + // 0x00DC0301: 0x000001D7 - "\x00\xfc\x03\x01\x00\x00\x01\xd8" + // 0x00FC0301: 0x000001D8 - "\x00\xdc\x03\f\x00\x00\x01\xd9" + // 0x00DC030C: 0x000001D9 - "\x00\xfc\x03\f\x00\x00\x01\xda" + // 0x00FC030C: 0x000001DA - "\x00\xdc\x03\x00\x00\x00\x01\xdb" + // 0x00DC0300: 0x000001DB - "\x00\xfc\x03\x00\x00\x00\x01\xdc" + // 0x00FC0300: 0x000001DC - "\x00\xc4\x03\x04\x00\x00\x01\xde" + // 0x00C40304: 0x000001DE - "\x00\xe4\x03\x04\x00\x00\x01\xdf" + // 0x00E40304: 0x000001DF - "\x02&\x03\x04\x00\x00\x01\xe0" + // 0x02260304: 0x000001E0 - "\x02'\x03\x04\x00\x00\x01\xe1" + // 0x02270304: 0x000001E1 - "\x00\xc6\x03\x04\x00\x00\x01\xe2" + // 0x00C60304: 0x000001E2 - "\x00\xe6\x03\x04\x00\x00\x01\xe3" + // 0x00E60304: 0x000001E3 - "\x00G\x03\f\x00\x00\x01\xe6" + // 0x0047030C: 0x000001E6 - "\x00g\x03\f\x00\x00\x01\xe7" + // 0x0067030C: 0x000001E7 - "\x00K\x03\f\x00\x00\x01\xe8" + // 0x004B030C: 0x000001E8 - "\x00k\x03\f\x00\x00\x01\xe9" + // 0x006B030C: 0x000001E9 - "\x00O\x03(\x00\x00\x01\xea" + // 0x004F0328: 0x000001EA - "\x00o\x03(\x00\x00\x01\xeb" + // 0x006F0328: 0x000001EB - "\x01\xea\x03\x04\x00\x00\x01\xec" + // 0x01EA0304: 0x000001EC - "\x01\xeb\x03\x04\x00\x00\x01\xed" + // 0x01EB0304: 0x000001ED - "\x01\xb7\x03\f\x00\x00\x01\xee" + // 0x01B7030C: 0x000001EE - "\x02\x92\x03\f\x00\x00\x01\xef" + // 0x0292030C: 0x000001EF - "\x00j\x03\f\x00\x00\x01\xf0" + // 0x006A030C: 0x000001F0 - "\x00G\x03\x01\x00\x00\x01\xf4" + // 0x00470301: 0x000001F4 - "\x00g\x03\x01\x00\x00\x01\xf5" + // 0x00670301: 0x000001F5 - "\x00N\x03\x00\x00\x00\x01\xf8" + // 0x004E0300: 0x000001F8 - "\x00n\x03\x00\x00\x00\x01\xf9" + // 0x006E0300: 0x000001F9 - "\x00\xc5\x03\x01\x00\x00\x01\xfa" + // 0x00C50301: 0x000001FA - "\x00\xe5\x03\x01\x00\x00\x01\xfb" + // 0x00E50301: 0x000001FB - "\x00\xc6\x03\x01\x00\x00\x01\xfc" + // 0x00C60301: 0x000001FC - "\x00\xe6\x03\x01\x00\x00\x01\xfd" + // 0x00E60301: 0x000001FD - "\x00\xd8\x03\x01\x00\x00\x01\xfe" + // 0x00D80301: 0x000001FE - "\x00\xf8\x03\x01\x00\x00\x01\xff" + // 0x00F80301: 0x000001FF - "\x00A\x03\x0f\x00\x00\x02\x00" + // 0x0041030F: 0x00000200 - "\x00a\x03\x0f\x00\x00\x02\x01" + // 0x0061030F: 0x00000201 - "\x00A\x03\x11\x00\x00\x02\x02" + // 0x00410311: 0x00000202 - "\x00a\x03\x11\x00\x00\x02\x03" + // 0x00610311: 0x00000203 - "\x00E\x03\x0f\x00\x00\x02\x04" + // 0x0045030F: 0x00000204 - "\x00e\x03\x0f\x00\x00\x02\x05" + // 0x0065030F: 0x00000205 - "\x00E\x03\x11\x00\x00\x02\x06" + // 0x00450311: 0x00000206 - "\x00e\x03\x11\x00\x00\x02\a" + // 0x00650311: 0x00000207 - "\x00I\x03\x0f\x00\x00\x02\b" + // 0x0049030F: 0x00000208 - "\x00i\x03\x0f\x00\x00\x02\t" + // 0x0069030F: 0x00000209 - "\x00I\x03\x11\x00\x00\x02\n" + // 0x00490311: 0x0000020A - "\x00i\x03\x11\x00\x00\x02\v" + // 0x00690311: 0x0000020B - "\x00O\x03\x0f\x00\x00\x02\f" + // 0x004F030F: 0x0000020C - "\x00o\x03\x0f\x00\x00\x02\r" + // 0x006F030F: 0x0000020D - "\x00O\x03\x11\x00\x00\x02\x0e" + // 0x004F0311: 0x0000020E - "\x00o\x03\x11\x00\x00\x02\x0f" + // 0x006F0311: 0x0000020F - "\x00R\x03\x0f\x00\x00\x02\x10" + // 0x0052030F: 0x00000210 - "\x00r\x03\x0f\x00\x00\x02\x11" + // 0x0072030F: 0x00000211 - "\x00R\x03\x11\x00\x00\x02\x12" + // 0x00520311: 0x00000212 - "\x00r\x03\x11\x00\x00\x02\x13" + // 0x00720311: 0x00000213 - "\x00U\x03\x0f\x00\x00\x02\x14" + // 0x0055030F: 0x00000214 - "\x00u\x03\x0f\x00\x00\x02\x15" + // 0x0075030F: 0x00000215 - "\x00U\x03\x11\x00\x00\x02\x16" + // 0x00550311: 0x00000216 - "\x00u\x03\x11\x00\x00\x02\x17" + // 0x00750311: 0x00000217 - "\x00S\x03&\x00\x00\x02\x18" + // 0x00530326: 0x00000218 - "\x00s\x03&\x00\x00\x02\x19" + // 0x00730326: 0x00000219 - "\x00T\x03&\x00\x00\x02\x1a" + // 0x00540326: 0x0000021A - "\x00t\x03&\x00\x00\x02\x1b" + // 0x00740326: 0x0000021B - "\x00H\x03\f\x00\x00\x02\x1e" + // 0x0048030C: 0x0000021E - "\x00h\x03\f\x00\x00\x02\x1f" + // 0x0068030C: 0x0000021F - "\x00A\x03\a\x00\x00\x02&" + // 0x00410307: 0x00000226 - "\x00a\x03\a\x00\x00\x02'" + // 0x00610307: 0x00000227 - "\x00E\x03'\x00\x00\x02(" + // 0x00450327: 0x00000228 - "\x00e\x03'\x00\x00\x02)" + // 0x00650327: 0x00000229 - "\x00\xd6\x03\x04\x00\x00\x02*" + // 0x00D60304: 0x0000022A - "\x00\xf6\x03\x04\x00\x00\x02+" + // 0x00F60304: 0x0000022B - "\x00\xd5\x03\x04\x00\x00\x02," + // 0x00D50304: 0x0000022C - "\x00\xf5\x03\x04\x00\x00\x02-" + // 0x00F50304: 0x0000022D - "\x00O\x03\a\x00\x00\x02." + // 0x004F0307: 0x0000022E - "\x00o\x03\a\x00\x00\x02/" + // 0x006F0307: 0x0000022F - "\x02.\x03\x04\x00\x00\x020" + // 0x022E0304: 0x00000230 - "\x02/\x03\x04\x00\x00\x021" + // 0x022F0304: 0x00000231 - "\x00Y\x03\x04\x00\x00\x022" + // 0x00590304: 0x00000232 - "\x00y\x03\x04\x00\x00\x023" + // 0x00790304: 0x00000233 - "\x00\xa8\x03\x01\x00\x00\x03\x85" + // 0x00A80301: 0x00000385 - "\x03\x91\x03\x01\x00\x00\x03\x86" + // 0x03910301: 0x00000386 - "\x03\x95\x03\x01\x00\x00\x03\x88" + // 0x03950301: 0x00000388 - "\x03\x97\x03\x01\x00\x00\x03\x89" + // 0x03970301: 0x00000389 - "\x03\x99\x03\x01\x00\x00\x03\x8a" + // 0x03990301: 0x0000038A - "\x03\x9f\x03\x01\x00\x00\x03\x8c" + // 0x039F0301: 0x0000038C - "\x03\xa5\x03\x01\x00\x00\x03\x8e" + // 0x03A50301: 0x0000038E - "\x03\xa9\x03\x01\x00\x00\x03\x8f" + // 0x03A90301: 0x0000038F - "\x03\xca\x03\x01\x00\x00\x03\x90" + // 0x03CA0301: 0x00000390 - "\x03\x99\x03\b\x00\x00\x03\xaa" + // 0x03990308: 0x000003AA - "\x03\xa5\x03\b\x00\x00\x03\xab" + // 0x03A50308: 0x000003AB - "\x03\xb1\x03\x01\x00\x00\x03\xac" + // 0x03B10301: 0x000003AC - "\x03\xb5\x03\x01\x00\x00\x03\xad" + // 0x03B50301: 0x000003AD - "\x03\xb7\x03\x01\x00\x00\x03\xae" + // 0x03B70301: 0x000003AE - "\x03\xb9\x03\x01\x00\x00\x03\xaf" + // 0x03B90301: 0x000003AF - "\x03\xcb\x03\x01\x00\x00\x03\xb0" + // 0x03CB0301: 0x000003B0 - "\x03\xb9\x03\b\x00\x00\x03\xca" + // 0x03B90308: 0x000003CA - "\x03\xc5\x03\b\x00\x00\x03\xcb" + // 0x03C50308: 0x000003CB - "\x03\xbf\x03\x01\x00\x00\x03\xcc" + // 0x03BF0301: 0x000003CC - "\x03\xc5\x03\x01\x00\x00\x03\xcd" + // 0x03C50301: 0x000003CD - "\x03\xc9\x03\x01\x00\x00\x03\xce" + // 0x03C90301: 0x000003CE - "\x03\xd2\x03\x01\x00\x00\x03\xd3" + // 0x03D20301: 0x000003D3 - "\x03\xd2\x03\b\x00\x00\x03\xd4" + // 0x03D20308: 0x000003D4 - "\x04\x15\x03\x00\x00\x00\x04\x00" + // 0x04150300: 0x00000400 - "\x04\x15\x03\b\x00\x00\x04\x01" + // 0x04150308: 0x00000401 - "\x04\x13\x03\x01\x00\x00\x04\x03" + // 0x04130301: 0x00000403 - "\x04\x06\x03\b\x00\x00\x04\a" + // 0x04060308: 0x00000407 - "\x04\x1a\x03\x01\x00\x00\x04\f" + // 0x041A0301: 0x0000040C - "\x04\x18\x03\x00\x00\x00\x04\r" + // 0x04180300: 0x0000040D - "\x04#\x03\x06\x00\x00\x04\x0e" + // 0x04230306: 0x0000040E - "\x04\x18\x03\x06\x00\x00\x04\x19" + // 0x04180306: 0x00000419 - "\x048\x03\x06\x00\x00\x049" + // 0x04380306: 0x00000439 - "\x045\x03\x00\x00\x00\x04P" + // 0x04350300: 0x00000450 - "\x045\x03\b\x00\x00\x04Q" + // 0x04350308: 0x00000451 - "\x043\x03\x01\x00\x00\x04S" + // 0x04330301: 0x00000453 - "\x04V\x03\b\x00\x00\x04W" + // 0x04560308: 0x00000457 - "\x04:\x03\x01\x00\x00\x04\\" + // 0x043A0301: 0x0000045C - "\x048\x03\x00\x00\x00\x04]" + // 0x04380300: 0x0000045D - "\x04C\x03\x06\x00\x00\x04^" + // 0x04430306: 0x0000045E - "\x04t\x03\x0f\x00\x00\x04v" + // 0x0474030F: 0x00000476 - "\x04u\x03\x0f\x00\x00\x04w" + // 0x0475030F: 0x00000477 - "\x04\x16\x03\x06\x00\x00\x04\xc1" + // 0x04160306: 0x000004C1 - "\x046\x03\x06\x00\x00\x04\xc2" + // 0x04360306: 0x000004C2 - "\x04\x10\x03\x06\x00\x00\x04\xd0" + // 0x04100306: 0x000004D0 - "\x040\x03\x06\x00\x00\x04\xd1" + // 0x04300306: 0x000004D1 - "\x04\x10\x03\b\x00\x00\x04\xd2" + // 0x04100308: 0x000004D2 - "\x040\x03\b\x00\x00\x04\xd3" + // 0x04300308: 0x000004D3 - "\x04\x15\x03\x06\x00\x00\x04\xd6" + // 0x04150306: 0x000004D6 - "\x045\x03\x06\x00\x00\x04\xd7" + // 0x04350306: 0x000004D7 - "\x04\xd8\x03\b\x00\x00\x04\xda" + // 0x04D80308: 0x000004DA - "\x04\xd9\x03\b\x00\x00\x04\xdb" + // 0x04D90308: 0x000004DB - "\x04\x16\x03\b\x00\x00\x04\xdc" + // 0x04160308: 0x000004DC - "\x046\x03\b\x00\x00\x04\xdd" + // 0x04360308: 0x000004DD - "\x04\x17\x03\b\x00\x00\x04\xde" + // 0x04170308: 0x000004DE - "\x047\x03\b\x00\x00\x04\xdf" + // 0x04370308: 0x000004DF - "\x04\x18\x03\x04\x00\x00\x04\xe2" + // 0x04180304: 0x000004E2 - "\x048\x03\x04\x00\x00\x04\xe3" + // 0x04380304: 0x000004E3 - "\x04\x18\x03\b\x00\x00\x04\xe4" + // 0x04180308: 0x000004E4 - "\x048\x03\b\x00\x00\x04\xe5" + // 0x04380308: 0x000004E5 - "\x04\x1e\x03\b\x00\x00\x04\xe6" + // 0x041E0308: 0x000004E6 - "\x04>\x03\b\x00\x00\x04\xe7" + // 0x043E0308: 0x000004E7 - "\x04\xe8\x03\b\x00\x00\x04\xea" + // 0x04E80308: 0x000004EA - "\x04\xe9\x03\b\x00\x00\x04\xeb" + // 0x04E90308: 0x000004EB - "\x04-\x03\b\x00\x00\x04\xec" + // 0x042D0308: 0x000004EC - "\x04M\x03\b\x00\x00\x04\xed" + // 0x044D0308: 0x000004ED - "\x04#\x03\x04\x00\x00\x04\xee" + // 0x04230304: 0x000004EE - "\x04C\x03\x04\x00\x00\x04\xef" + // 0x04430304: 0x000004EF - "\x04#\x03\b\x00\x00\x04\xf0" + // 0x04230308: 0x000004F0 - "\x04C\x03\b\x00\x00\x04\xf1" + // 0x04430308: 0x000004F1 - "\x04#\x03\v\x00\x00\x04\xf2" + // 0x0423030B: 0x000004F2 - "\x04C\x03\v\x00\x00\x04\xf3" + // 0x0443030B: 0x000004F3 - "\x04'\x03\b\x00\x00\x04\xf4" + // 0x04270308: 0x000004F4 - "\x04G\x03\b\x00\x00\x04\xf5" + // 0x04470308: 0x000004F5 - "\x04+\x03\b\x00\x00\x04\xf8" + // 0x042B0308: 0x000004F8 - "\x04K\x03\b\x00\x00\x04\xf9" + // 0x044B0308: 0x000004F9 - "\x06'\x06S\x00\x00\x06\"" + // 0x06270653: 0x00000622 - "\x06'\x06T\x00\x00\x06#" + // 0x06270654: 0x00000623 - "\x06H\x06T\x00\x00\x06$" + // 0x06480654: 0x00000624 - "\x06'\x06U\x00\x00\x06%" + // 0x06270655: 0x00000625 - "\x06J\x06T\x00\x00\x06&" + // 0x064A0654: 0x00000626 - "\x06\xd5\x06T\x00\x00\x06\xc0" + // 0x06D50654: 0x000006C0 - "\x06\xc1\x06T\x00\x00\x06\xc2" + // 0x06C10654: 0x000006C2 - "\x06\xd2\x06T\x00\x00\x06\xd3" + // 0x06D20654: 0x000006D3 - "\t(\t<\x00\x00\t)" + // 0x0928093C: 0x00000929 - "\t0\t<\x00\x00\t1" + // 0x0930093C: 0x00000931 - "\t3\t<\x00\x00\t4" + // 0x0933093C: 0x00000934 - "\t\xc7\t\xbe\x00\x00\t\xcb" + // 0x09C709BE: 0x000009CB - "\t\xc7\t\xd7\x00\x00\t\xcc" + // 0x09C709D7: 0x000009CC - "\vG\vV\x00\x00\vH" + // 0x0B470B56: 0x00000B48 - "\vG\v>\x00\x00\vK" + // 0x0B470B3E: 0x00000B4B - "\vG\vW\x00\x00\vL" + // 0x0B470B57: 0x00000B4C - "\v\x92\v\xd7\x00\x00\v\x94" + // 0x0B920BD7: 0x00000B94 - "\v\xc6\v\xbe\x00\x00\v\xca" + // 0x0BC60BBE: 0x00000BCA - "\v\xc7\v\xbe\x00\x00\v\xcb" + // 0x0BC70BBE: 0x00000BCB - "\v\xc6\v\xd7\x00\x00\v\xcc" + // 0x0BC60BD7: 0x00000BCC - "\fF\fV\x00\x00\fH" + // 0x0C460C56: 0x00000C48 - "\f\xbf\f\xd5\x00\x00\f\xc0" + // 0x0CBF0CD5: 0x00000CC0 - "\f\xc6\f\xd5\x00\x00\f\xc7" + // 0x0CC60CD5: 0x00000CC7 - "\f\xc6\f\xd6\x00\x00\f\xc8" + // 0x0CC60CD6: 0x00000CC8 - "\f\xc6\f\xc2\x00\x00\f\xca" + // 0x0CC60CC2: 0x00000CCA - "\f\xca\f\xd5\x00\x00\f\xcb" + // 0x0CCA0CD5: 0x00000CCB - "\rF\r>\x00\x00\rJ" + // 0x0D460D3E: 0x00000D4A - "\rG\r>\x00\x00\rK" + // 0x0D470D3E: 0x00000D4B - "\rF\rW\x00\x00\rL" + // 0x0D460D57: 0x00000D4C - "\r\xd9\r\xca\x00\x00\r\xda" + // 0x0DD90DCA: 0x00000DDA - "\r\xd9\r\xcf\x00\x00\r\xdc" + // 0x0DD90DCF: 0x00000DDC - "\r\xdc\r\xca\x00\x00\r\xdd" + // 0x0DDC0DCA: 0x00000DDD - "\r\xd9\r\xdf\x00\x00\r\xde" + // 0x0DD90DDF: 0x00000DDE - "\x10%\x10.\x00\x00\x10&" + // 0x1025102E: 0x00001026 - "\x1b\x05\x1b5\x00\x00\x1b\x06" + // 0x1B051B35: 0x00001B06 - "\x1b\a\x1b5\x00\x00\x1b\b" + // 0x1B071B35: 0x00001B08 - "\x1b\t\x1b5\x00\x00\x1b\n" + // 0x1B091B35: 0x00001B0A - "\x1b\v\x1b5\x00\x00\x1b\f" + // 0x1B0B1B35: 0x00001B0C - "\x1b\r\x1b5\x00\x00\x1b\x0e" + // 0x1B0D1B35: 0x00001B0E - "\x1b\x11\x1b5\x00\x00\x1b\x12" + // 0x1B111B35: 0x00001B12 - "\x1b:\x1b5\x00\x00\x1b;" + // 0x1B3A1B35: 0x00001B3B - "\x1b<\x1b5\x00\x00\x1b=" + // 0x1B3C1B35: 0x00001B3D - "\x1b>\x1b5\x00\x00\x1b@" + // 0x1B3E1B35: 0x00001B40 - "\x1b?\x1b5\x00\x00\x1bA" + // 0x1B3F1B35: 0x00001B41 - "\x1bB\x1b5\x00\x00\x1bC" + // 0x1B421B35: 0x00001B43 - "\x00A\x03%\x00\x00\x1e\x00" + // 0x00410325: 0x00001E00 - "\x00a\x03%\x00\x00\x1e\x01" + // 0x00610325: 0x00001E01 - "\x00B\x03\a\x00\x00\x1e\x02" + // 0x00420307: 0x00001E02 - "\x00b\x03\a\x00\x00\x1e\x03" + // 0x00620307: 0x00001E03 - "\x00B\x03#\x00\x00\x1e\x04" + // 0x00420323: 0x00001E04 - "\x00b\x03#\x00\x00\x1e\x05" + // 0x00620323: 0x00001E05 - "\x00B\x031\x00\x00\x1e\x06" + // 0x00420331: 0x00001E06 - "\x00b\x031\x00\x00\x1e\a" + // 0x00620331: 0x00001E07 - "\x00\xc7\x03\x01\x00\x00\x1e\b" + // 0x00C70301: 0x00001E08 - "\x00\xe7\x03\x01\x00\x00\x1e\t" + // 0x00E70301: 0x00001E09 - "\x00D\x03\a\x00\x00\x1e\n" + // 0x00440307: 0x00001E0A - "\x00d\x03\a\x00\x00\x1e\v" + // 0x00640307: 0x00001E0B - "\x00D\x03#\x00\x00\x1e\f" + // 0x00440323: 0x00001E0C - "\x00d\x03#\x00\x00\x1e\r" + // 0x00640323: 0x00001E0D - "\x00D\x031\x00\x00\x1e\x0e" + // 0x00440331: 0x00001E0E - "\x00d\x031\x00\x00\x1e\x0f" + // 0x00640331: 0x00001E0F - "\x00D\x03'\x00\x00\x1e\x10" + // 0x00440327: 0x00001E10 - "\x00d\x03'\x00\x00\x1e\x11" + // 0x00640327: 0x00001E11 - "\x00D\x03-\x00\x00\x1e\x12" + // 0x0044032D: 0x00001E12 - "\x00d\x03-\x00\x00\x1e\x13" + // 0x0064032D: 0x00001E13 - "\x01\x12\x03\x00\x00\x00\x1e\x14" + // 0x01120300: 0x00001E14 - "\x01\x13\x03\x00\x00\x00\x1e\x15" + // 0x01130300: 0x00001E15 - "\x01\x12\x03\x01\x00\x00\x1e\x16" + // 0x01120301: 0x00001E16 - "\x01\x13\x03\x01\x00\x00\x1e\x17" + // 0x01130301: 0x00001E17 - "\x00E\x03-\x00\x00\x1e\x18" + // 0x0045032D: 0x00001E18 - "\x00e\x03-\x00\x00\x1e\x19" + // 0x0065032D: 0x00001E19 - "\x00E\x030\x00\x00\x1e\x1a" + // 0x00450330: 0x00001E1A - "\x00e\x030\x00\x00\x1e\x1b" + // 0x00650330: 0x00001E1B - "\x02(\x03\x06\x00\x00\x1e\x1c" + // 0x02280306: 0x00001E1C - "\x02)\x03\x06\x00\x00\x1e\x1d" + // 0x02290306: 0x00001E1D - "\x00F\x03\a\x00\x00\x1e\x1e" + // 0x00460307: 0x00001E1E - "\x00f\x03\a\x00\x00\x1e\x1f" + // 0x00660307: 0x00001E1F - "\x00G\x03\x04\x00\x00\x1e " + // 0x00470304: 0x00001E20 - "\x00g\x03\x04\x00\x00\x1e!" + // 0x00670304: 0x00001E21 - "\x00H\x03\a\x00\x00\x1e\"" + // 0x00480307: 0x00001E22 - "\x00h\x03\a\x00\x00\x1e#" + // 0x00680307: 0x00001E23 - "\x00H\x03#\x00\x00\x1e$" + // 0x00480323: 0x00001E24 - "\x00h\x03#\x00\x00\x1e%" + // 0x00680323: 0x00001E25 - "\x00H\x03\b\x00\x00\x1e&" + // 0x00480308: 0x00001E26 - "\x00h\x03\b\x00\x00\x1e'" + // 0x00680308: 0x00001E27 - "\x00H\x03'\x00\x00\x1e(" + // 0x00480327: 0x00001E28 - "\x00h\x03'\x00\x00\x1e)" + // 0x00680327: 0x00001E29 - "\x00H\x03.\x00\x00\x1e*" + // 0x0048032E: 0x00001E2A - "\x00h\x03.\x00\x00\x1e+" + // 0x0068032E: 0x00001E2B - "\x00I\x030\x00\x00\x1e," + // 0x00490330: 0x00001E2C - "\x00i\x030\x00\x00\x1e-" + // 0x00690330: 0x00001E2D - "\x00\xcf\x03\x01\x00\x00\x1e." + // 0x00CF0301: 0x00001E2E - "\x00\xef\x03\x01\x00\x00\x1e/" + // 0x00EF0301: 0x00001E2F - "\x00K\x03\x01\x00\x00\x1e0" + // 0x004B0301: 0x00001E30 - "\x00k\x03\x01\x00\x00\x1e1" + // 0x006B0301: 0x00001E31 - "\x00K\x03#\x00\x00\x1e2" + // 0x004B0323: 0x00001E32 - "\x00k\x03#\x00\x00\x1e3" + // 0x006B0323: 0x00001E33 - "\x00K\x031\x00\x00\x1e4" + // 0x004B0331: 0x00001E34 - "\x00k\x031\x00\x00\x1e5" + // 0x006B0331: 0x00001E35 - "\x00L\x03#\x00\x00\x1e6" + // 0x004C0323: 0x00001E36 - "\x00l\x03#\x00\x00\x1e7" + // 0x006C0323: 0x00001E37 - "\x1e6\x03\x04\x00\x00\x1e8" + // 0x1E360304: 0x00001E38 - "\x1e7\x03\x04\x00\x00\x1e9" + // 0x1E370304: 0x00001E39 - "\x00L\x031\x00\x00\x1e:" + // 0x004C0331: 0x00001E3A - "\x00l\x031\x00\x00\x1e;" + // 0x006C0331: 0x00001E3B - "\x00L\x03-\x00\x00\x1e<" + // 0x004C032D: 0x00001E3C - "\x00l\x03-\x00\x00\x1e=" + // 0x006C032D: 0x00001E3D - "\x00M\x03\x01\x00\x00\x1e>" + // 0x004D0301: 0x00001E3E - "\x00m\x03\x01\x00\x00\x1e?" + // 0x006D0301: 0x00001E3F - "\x00M\x03\a\x00\x00\x1e@" + // 0x004D0307: 0x00001E40 - "\x00m\x03\a\x00\x00\x1eA" + // 0x006D0307: 0x00001E41 - "\x00M\x03#\x00\x00\x1eB" + // 0x004D0323: 0x00001E42 - "\x00m\x03#\x00\x00\x1eC" + // 0x006D0323: 0x00001E43 - "\x00N\x03\a\x00\x00\x1eD" + // 0x004E0307: 0x00001E44 - "\x00n\x03\a\x00\x00\x1eE" + // 0x006E0307: 0x00001E45 - "\x00N\x03#\x00\x00\x1eF" + // 0x004E0323: 0x00001E46 - "\x00n\x03#\x00\x00\x1eG" + // 0x006E0323: 0x00001E47 - "\x00N\x031\x00\x00\x1eH" + // 0x004E0331: 0x00001E48 - "\x00n\x031\x00\x00\x1eI" + // 0x006E0331: 0x00001E49 - "\x00N\x03-\x00\x00\x1eJ" + // 0x004E032D: 0x00001E4A - "\x00n\x03-\x00\x00\x1eK" + // 0x006E032D: 0x00001E4B - "\x00\xd5\x03\x01\x00\x00\x1eL" + // 0x00D50301: 0x00001E4C - "\x00\xf5\x03\x01\x00\x00\x1eM" + // 0x00F50301: 0x00001E4D - "\x00\xd5\x03\b\x00\x00\x1eN" + // 0x00D50308: 0x00001E4E - "\x00\xf5\x03\b\x00\x00\x1eO" + // 0x00F50308: 0x00001E4F - "\x01L\x03\x00\x00\x00\x1eP" + // 0x014C0300: 0x00001E50 - "\x01M\x03\x00\x00\x00\x1eQ" + // 0x014D0300: 0x00001E51 - "\x01L\x03\x01\x00\x00\x1eR" + // 0x014C0301: 0x00001E52 - "\x01M\x03\x01\x00\x00\x1eS" + // 0x014D0301: 0x00001E53 - "\x00P\x03\x01\x00\x00\x1eT" + // 0x00500301: 0x00001E54 - "\x00p\x03\x01\x00\x00\x1eU" + // 0x00700301: 0x00001E55 - "\x00P\x03\a\x00\x00\x1eV" + // 0x00500307: 0x00001E56 - "\x00p\x03\a\x00\x00\x1eW" + // 0x00700307: 0x00001E57 - "\x00R\x03\a\x00\x00\x1eX" + // 0x00520307: 0x00001E58 - "\x00r\x03\a\x00\x00\x1eY" + // 0x00720307: 0x00001E59 - "\x00R\x03#\x00\x00\x1eZ" + // 0x00520323: 0x00001E5A - "\x00r\x03#\x00\x00\x1e[" + // 0x00720323: 0x00001E5B - "\x1eZ\x03\x04\x00\x00\x1e\\" + // 0x1E5A0304: 0x00001E5C - "\x1e[\x03\x04\x00\x00\x1e]" + // 0x1E5B0304: 0x00001E5D - "\x00R\x031\x00\x00\x1e^" + // 0x00520331: 0x00001E5E - "\x00r\x031\x00\x00\x1e_" + // 0x00720331: 0x00001E5F - "\x00S\x03\a\x00\x00\x1e`" + // 0x00530307: 0x00001E60 - "\x00s\x03\a\x00\x00\x1ea" + // 0x00730307: 0x00001E61 - "\x00S\x03#\x00\x00\x1eb" + // 0x00530323: 0x00001E62 - "\x00s\x03#\x00\x00\x1ec" + // 0x00730323: 0x00001E63 - "\x01Z\x03\a\x00\x00\x1ed" + // 0x015A0307: 0x00001E64 - "\x01[\x03\a\x00\x00\x1ee" + // 0x015B0307: 0x00001E65 - "\x01`\x03\a\x00\x00\x1ef" + // 0x01600307: 0x00001E66 - "\x01a\x03\a\x00\x00\x1eg" + // 0x01610307: 0x00001E67 - "\x1eb\x03\a\x00\x00\x1eh" + // 0x1E620307: 0x00001E68 - "\x1ec\x03\a\x00\x00\x1ei" + // 0x1E630307: 0x00001E69 - "\x00T\x03\a\x00\x00\x1ej" + // 0x00540307: 0x00001E6A - "\x00t\x03\a\x00\x00\x1ek" + // 0x00740307: 0x00001E6B - "\x00T\x03#\x00\x00\x1el" + // 0x00540323: 0x00001E6C - "\x00t\x03#\x00\x00\x1em" + // 0x00740323: 0x00001E6D - "\x00T\x031\x00\x00\x1en" + // 0x00540331: 0x00001E6E - "\x00t\x031\x00\x00\x1eo" + // 0x00740331: 0x00001E6F - "\x00T\x03-\x00\x00\x1ep" + // 0x0054032D: 0x00001E70 - "\x00t\x03-\x00\x00\x1eq" + // 0x0074032D: 0x00001E71 - "\x00U\x03$\x00\x00\x1er" + // 0x00550324: 0x00001E72 - "\x00u\x03$\x00\x00\x1es" + // 0x00750324: 0x00001E73 - "\x00U\x030\x00\x00\x1et" + // 0x00550330: 0x00001E74 - "\x00u\x030\x00\x00\x1eu" + // 0x00750330: 0x00001E75 - "\x00U\x03-\x00\x00\x1ev" + // 0x0055032D: 0x00001E76 - "\x00u\x03-\x00\x00\x1ew" + // 0x0075032D: 0x00001E77 - "\x01h\x03\x01\x00\x00\x1ex" + // 0x01680301: 0x00001E78 - "\x01i\x03\x01\x00\x00\x1ey" + // 0x01690301: 0x00001E79 - "\x01j\x03\b\x00\x00\x1ez" + // 0x016A0308: 0x00001E7A - "\x01k\x03\b\x00\x00\x1e{" + // 0x016B0308: 0x00001E7B - "\x00V\x03\x03\x00\x00\x1e|" + // 0x00560303: 0x00001E7C - "\x00v\x03\x03\x00\x00\x1e}" + // 0x00760303: 0x00001E7D - "\x00V\x03#\x00\x00\x1e~" + // 0x00560323: 0x00001E7E - "\x00v\x03#\x00\x00\x1e\u007f" + // 0x00760323: 0x00001E7F - "\x00W\x03\x00\x00\x00\x1e\x80" + // 0x00570300: 0x00001E80 - "\x00w\x03\x00\x00\x00\x1e\x81" + // 0x00770300: 0x00001E81 - "\x00W\x03\x01\x00\x00\x1e\x82" + // 0x00570301: 0x00001E82 - "\x00w\x03\x01\x00\x00\x1e\x83" + // 0x00770301: 0x00001E83 - "\x00W\x03\b\x00\x00\x1e\x84" + // 0x00570308: 0x00001E84 - "\x00w\x03\b\x00\x00\x1e\x85" + // 0x00770308: 0x00001E85 - "\x00W\x03\a\x00\x00\x1e\x86" + // 0x00570307: 0x00001E86 - "\x00w\x03\a\x00\x00\x1e\x87" + // 0x00770307: 0x00001E87 - "\x00W\x03#\x00\x00\x1e\x88" + // 0x00570323: 0x00001E88 - "\x00w\x03#\x00\x00\x1e\x89" + // 0x00770323: 0x00001E89 - "\x00X\x03\a\x00\x00\x1e\x8a" + // 0x00580307: 0x00001E8A - "\x00x\x03\a\x00\x00\x1e\x8b" + // 0x00780307: 0x00001E8B - "\x00X\x03\b\x00\x00\x1e\x8c" + // 0x00580308: 0x00001E8C - "\x00x\x03\b\x00\x00\x1e\x8d" + // 0x00780308: 0x00001E8D - "\x00Y\x03\a\x00\x00\x1e\x8e" + // 0x00590307: 0x00001E8E - "\x00y\x03\a\x00\x00\x1e\x8f" + // 0x00790307: 0x00001E8F - "\x00Z\x03\x02\x00\x00\x1e\x90" + // 0x005A0302: 0x00001E90 - "\x00z\x03\x02\x00\x00\x1e\x91" + // 0x007A0302: 0x00001E91 - "\x00Z\x03#\x00\x00\x1e\x92" + // 0x005A0323: 0x00001E92 - "\x00z\x03#\x00\x00\x1e\x93" + // 0x007A0323: 0x00001E93 - "\x00Z\x031\x00\x00\x1e\x94" + // 0x005A0331: 0x00001E94 - "\x00z\x031\x00\x00\x1e\x95" + // 0x007A0331: 0x00001E95 - "\x00h\x031\x00\x00\x1e\x96" + // 0x00680331: 0x00001E96 - "\x00t\x03\b\x00\x00\x1e\x97" + // 0x00740308: 0x00001E97 - "\x00w\x03\n\x00\x00\x1e\x98" + // 0x0077030A: 0x00001E98 - "\x00y\x03\n\x00\x00\x1e\x99" + // 0x0079030A: 0x00001E99 - "\x01\u007f\x03\a\x00\x00\x1e\x9b" + // 0x017F0307: 0x00001E9B - "\x00A\x03#\x00\x00\x1e\xa0" + // 0x00410323: 0x00001EA0 - "\x00a\x03#\x00\x00\x1e\xa1" + // 0x00610323: 0x00001EA1 - "\x00A\x03\t\x00\x00\x1e\xa2" + // 0x00410309: 0x00001EA2 - "\x00a\x03\t\x00\x00\x1e\xa3" + // 0x00610309: 0x00001EA3 - "\x00\xc2\x03\x01\x00\x00\x1e\xa4" + // 0x00C20301: 0x00001EA4 - "\x00\xe2\x03\x01\x00\x00\x1e\xa5" + // 0x00E20301: 0x00001EA5 - "\x00\xc2\x03\x00\x00\x00\x1e\xa6" + // 0x00C20300: 0x00001EA6 - "\x00\xe2\x03\x00\x00\x00\x1e\xa7" + // 0x00E20300: 0x00001EA7 - "\x00\xc2\x03\t\x00\x00\x1e\xa8" + // 0x00C20309: 0x00001EA8 - "\x00\xe2\x03\t\x00\x00\x1e\xa9" + // 0x00E20309: 0x00001EA9 - "\x00\xc2\x03\x03\x00\x00\x1e\xaa" + // 0x00C20303: 0x00001EAA - "\x00\xe2\x03\x03\x00\x00\x1e\xab" + // 0x00E20303: 0x00001EAB - "\x1e\xa0\x03\x02\x00\x00\x1e\xac" + // 0x1EA00302: 0x00001EAC - "\x1e\xa1\x03\x02\x00\x00\x1e\xad" + // 0x1EA10302: 0x00001EAD - "\x01\x02\x03\x01\x00\x00\x1e\xae" + // 0x01020301: 0x00001EAE - "\x01\x03\x03\x01\x00\x00\x1e\xaf" + // 0x01030301: 0x00001EAF - "\x01\x02\x03\x00\x00\x00\x1e\xb0" + // 0x01020300: 0x00001EB0 - "\x01\x03\x03\x00\x00\x00\x1e\xb1" + // 0x01030300: 0x00001EB1 - "\x01\x02\x03\t\x00\x00\x1e\xb2" + // 0x01020309: 0x00001EB2 - "\x01\x03\x03\t\x00\x00\x1e\xb3" + // 0x01030309: 0x00001EB3 - "\x01\x02\x03\x03\x00\x00\x1e\xb4" + // 0x01020303: 0x00001EB4 - "\x01\x03\x03\x03\x00\x00\x1e\xb5" + // 0x01030303: 0x00001EB5 - "\x1e\xa0\x03\x06\x00\x00\x1e\xb6" + // 0x1EA00306: 0x00001EB6 - "\x1e\xa1\x03\x06\x00\x00\x1e\xb7" + // 0x1EA10306: 0x00001EB7 - "\x00E\x03#\x00\x00\x1e\xb8" + // 0x00450323: 0x00001EB8 - "\x00e\x03#\x00\x00\x1e\xb9" + // 0x00650323: 0x00001EB9 - "\x00E\x03\t\x00\x00\x1e\xba" + // 0x00450309: 0x00001EBA - "\x00e\x03\t\x00\x00\x1e\xbb" + // 0x00650309: 0x00001EBB - "\x00E\x03\x03\x00\x00\x1e\xbc" + // 0x00450303: 0x00001EBC - "\x00e\x03\x03\x00\x00\x1e\xbd" + // 0x00650303: 0x00001EBD - "\x00\xca\x03\x01\x00\x00\x1e\xbe" + // 0x00CA0301: 0x00001EBE - "\x00\xea\x03\x01\x00\x00\x1e\xbf" + // 0x00EA0301: 0x00001EBF - "\x00\xca\x03\x00\x00\x00\x1e\xc0" + // 0x00CA0300: 0x00001EC0 - "\x00\xea\x03\x00\x00\x00\x1e\xc1" + // 0x00EA0300: 0x00001EC1 - "\x00\xca\x03\t\x00\x00\x1e\xc2" + // 0x00CA0309: 0x00001EC2 - "\x00\xea\x03\t\x00\x00\x1e\xc3" + // 0x00EA0309: 0x00001EC3 - "\x00\xca\x03\x03\x00\x00\x1e\xc4" + // 0x00CA0303: 0x00001EC4 - "\x00\xea\x03\x03\x00\x00\x1e\xc5" + // 0x00EA0303: 0x00001EC5 - "\x1e\xb8\x03\x02\x00\x00\x1e\xc6" + // 0x1EB80302: 0x00001EC6 - "\x1e\xb9\x03\x02\x00\x00\x1e\xc7" + // 0x1EB90302: 0x00001EC7 - "\x00I\x03\t\x00\x00\x1e\xc8" + // 0x00490309: 0x00001EC8 - "\x00i\x03\t\x00\x00\x1e\xc9" + // 0x00690309: 0x00001EC9 - "\x00I\x03#\x00\x00\x1e\xca" + // 0x00490323: 0x00001ECA - "\x00i\x03#\x00\x00\x1e\xcb" + // 0x00690323: 0x00001ECB - "\x00O\x03#\x00\x00\x1e\xcc" + // 0x004F0323: 0x00001ECC - "\x00o\x03#\x00\x00\x1e\xcd" + // 0x006F0323: 0x00001ECD - "\x00O\x03\t\x00\x00\x1e\xce" + // 0x004F0309: 0x00001ECE - "\x00o\x03\t\x00\x00\x1e\xcf" + // 0x006F0309: 0x00001ECF - "\x00\xd4\x03\x01\x00\x00\x1e\xd0" + // 0x00D40301: 0x00001ED0 - "\x00\xf4\x03\x01\x00\x00\x1e\xd1" + // 0x00F40301: 0x00001ED1 - "\x00\xd4\x03\x00\x00\x00\x1e\xd2" + // 0x00D40300: 0x00001ED2 - "\x00\xf4\x03\x00\x00\x00\x1e\xd3" + // 0x00F40300: 0x00001ED3 - "\x00\xd4\x03\t\x00\x00\x1e\xd4" + // 0x00D40309: 0x00001ED4 - "\x00\xf4\x03\t\x00\x00\x1e\xd5" + // 0x00F40309: 0x00001ED5 - "\x00\xd4\x03\x03\x00\x00\x1e\xd6" + // 0x00D40303: 0x00001ED6 - "\x00\xf4\x03\x03\x00\x00\x1e\xd7" + // 0x00F40303: 0x00001ED7 - "\x1e\xcc\x03\x02\x00\x00\x1e\xd8" + // 0x1ECC0302: 0x00001ED8 - "\x1e\xcd\x03\x02\x00\x00\x1e\xd9" + // 0x1ECD0302: 0x00001ED9 - "\x01\xa0\x03\x01\x00\x00\x1e\xda" + // 0x01A00301: 0x00001EDA - "\x01\xa1\x03\x01\x00\x00\x1e\xdb" + // 0x01A10301: 0x00001EDB - "\x01\xa0\x03\x00\x00\x00\x1e\xdc" + // 0x01A00300: 0x00001EDC - "\x01\xa1\x03\x00\x00\x00\x1e\xdd" + // 0x01A10300: 0x00001EDD - "\x01\xa0\x03\t\x00\x00\x1e\xde" + // 0x01A00309: 0x00001EDE - "\x01\xa1\x03\t\x00\x00\x1e\xdf" + // 0x01A10309: 0x00001EDF - "\x01\xa0\x03\x03\x00\x00\x1e\xe0" + // 0x01A00303: 0x00001EE0 - "\x01\xa1\x03\x03\x00\x00\x1e\xe1" + // 0x01A10303: 0x00001EE1 - "\x01\xa0\x03#\x00\x00\x1e\xe2" + // 0x01A00323: 0x00001EE2 - "\x01\xa1\x03#\x00\x00\x1e\xe3" + // 0x01A10323: 0x00001EE3 - "\x00U\x03#\x00\x00\x1e\xe4" + // 0x00550323: 0x00001EE4 - "\x00u\x03#\x00\x00\x1e\xe5" + // 0x00750323: 0x00001EE5 - "\x00U\x03\t\x00\x00\x1e\xe6" + // 0x00550309: 0x00001EE6 - "\x00u\x03\t\x00\x00\x1e\xe7" + // 0x00750309: 0x00001EE7 - "\x01\xaf\x03\x01\x00\x00\x1e\xe8" + // 0x01AF0301: 0x00001EE8 - "\x01\xb0\x03\x01\x00\x00\x1e\xe9" + // 0x01B00301: 0x00001EE9 - "\x01\xaf\x03\x00\x00\x00\x1e\xea" + // 0x01AF0300: 0x00001EEA - "\x01\xb0\x03\x00\x00\x00\x1e\xeb" + // 0x01B00300: 0x00001EEB - "\x01\xaf\x03\t\x00\x00\x1e\xec" + // 0x01AF0309: 0x00001EEC - "\x01\xb0\x03\t\x00\x00\x1e\xed" + // 0x01B00309: 0x00001EED - "\x01\xaf\x03\x03\x00\x00\x1e\xee" + // 0x01AF0303: 0x00001EEE - "\x01\xb0\x03\x03\x00\x00\x1e\xef" + // 0x01B00303: 0x00001EEF - "\x01\xaf\x03#\x00\x00\x1e\xf0" + // 0x01AF0323: 0x00001EF0 - "\x01\xb0\x03#\x00\x00\x1e\xf1" + // 0x01B00323: 0x00001EF1 - "\x00Y\x03\x00\x00\x00\x1e\xf2" + // 0x00590300: 0x00001EF2 - "\x00y\x03\x00\x00\x00\x1e\xf3" + // 0x00790300: 0x00001EF3 - "\x00Y\x03#\x00\x00\x1e\xf4" + // 0x00590323: 0x00001EF4 - "\x00y\x03#\x00\x00\x1e\xf5" + // 0x00790323: 0x00001EF5 - "\x00Y\x03\t\x00\x00\x1e\xf6" + // 0x00590309: 0x00001EF6 - "\x00y\x03\t\x00\x00\x1e\xf7" + // 0x00790309: 0x00001EF7 - "\x00Y\x03\x03\x00\x00\x1e\xf8" + // 0x00590303: 0x00001EF8 - "\x00y\x03\x03\x00\x00\x1e\xf9" + // 0x00790303: 0x00001EF9 - "\x03\xb1\x03\x13\x00\x00\x1f\x00" + // 0x03B10313: 0x00001F00 - "\x03\xb1\x03\x14\x00\x00\x1f\x01" + // 0x03B10314: 0x00001F01 - "\x1f\x00\x03\x00\x00\x00\x1f\x02" + // 0x1F000300: 0x00001F02 - "\x1f\x01\x03\x00\x00\x00\x1f\x03" + // 0x1F010300: 0x00001F03 - "\x1f\x00\x03\x01\x00\x00\x1f\x04" + // 0x1F000301: 0x00001F04 - "\x1f\x01\x03\x01\x00\x00\x1f\x05" + // 0x1F010301: 0x00001F05 - "\x1f\x00\x03B\x00\x00\x1f\x06" + // 0x1F000342: 0x00001F06 - "\x1f\x01\x03B\x00\x00\x1f\a" + // 0x1F010342: 0x00001F07 - "\x03\x91\x03\x13\x00\x00\x1f\b" + // 0x03910313: 0x00001F08 - "\x03\x91\x03\x14\x00\x00\x1f\t" + // 0x03910314: 0x00001F09 - "\x1f\b\x03\x00\x00\x00\x1f\n" + // 0x1F080300: 0x00001F0A - "\x1f\t\x03\x00\x00\x00\x1f\v" + // 0x1F090300: 0x00001F0B - "\x1f\b\x03\x01\x00\x00\x1f\f" + // 0x1F080301: 0x00001F0C - "\x1f\t\x03\x01\x00\x00\x1f\r" + // 0x1F090301: 0x00001F0D - "\x1f\b\x03B\x00\x00\x1f\x0e" + // 0x1F080342: 0x00001F0E - "\x1f\t\x03B\x00\x00\x1f\x0f" + // 0x1F090342: 0x00001F0F - "\x03\xb5\x03\x13\x00\x00\x1f\x10" + // 0x03B50313: 0x00001F10 - "\x03\xb5\x03\x14\x00\x00\x1f\x11" + // 0x03B50314: 0x00001F11 - "\x1f\x10\x03\x00\x00\x00\x1f\x12" + // 0x1F100300: 0x00001F12 - "\x1f\x11\x03\x00\x00\x00\x1f\x13" + // 0x1F110300: 0x00001F13 - "\x1f\x10\x03\x01\x00\x00\x1f\x14" + // 0x1F100301: 0x00001F14 - "\x1f\x11\x03\x01\x00\x00\x1f\x15" + // 0x1F110301: 0x00001F15 - "\x03\x95\x03\x13\x00\x00\x1f\x18" + // 0x03950313: 0x00001F18 - "\x03\x95\x03\x14\x00\x00\x1f\x19" + // 0x03950314: 0x00001F19 - "\x1f\x18\x03\x00\x00\x00\x1f\x1a" + // 0x1F180300: 0x00001F1A - "\x1f\x19\x03\x00\x00\x00\x1f\x1b" + // 0x1F190300: 0x00001F1B - "\x1f\x18\x03\x01\x00\x00\x1f\x1c" + // 0x1F180301: 0x00001F1C - "\x1f\x19\x03\x01\x00\x00\x1f\x1d" + // 0x1F190301: 0x00001F1D - "\x03\xb7\x03\x13\x00\x00\x1f " + // 0x03B70313: 0x00001F20 - "\x03\xb7\x03\x14\x00\x00\x1f!" + // 0x03B70314: 0x00001F21 - "\x1f \x03\x00\x00\x00\x1f\"" + // 0x1F200300: 0x00001F22 - "\x1f!\x03\x00\x00\x00\x1f#" + // 0x1F210300: 0x00001F23 - "\x1f \x03\x01\x00\x00\x1f$" + // 0x1F200301: 0x00001F24 - "\x1f!\x03\x01\x00\x00\x1f%" + // 0x1F210301: 0x00001F25 - "\x1f \x03B\x00\x00\x1f&" + // 0x1F200342: 0x00001F26 - "\x1f!\x03B\x00\x00\x1f'" + // 0x1F210342: 0x00001F27 - "\x03\x97\x03\x13\x00\x00\x1f(" + // 0x03970313: 0x00001F28 - "\x03\x97\x03\x14\x00\x00\x1f)" + // 0x03970314: 0x00001F29 - "\x1f(\x03\x00\x00\x00\x1f*" + // 0x1F280300: 0x00001F2A - "\x1f)\x03\x00\x00\x00\x1f+" + // 0x1F290300: 0x00001F2B - "\x1f(\x03\x01\x00\x00\x1f," + // 0x1F280301: 0x00001F2C - "\x1f)\x03\x01\x00\x00\x1f-" + // 0x1F290301: 0x00001F2D - "\x1f(\x03B\x00\x00\x1f." + // 0x1F280342: 0x00001F2E - "\x1f)\x03B\x00\x00\x1f/" + // 0x1F290342: 0x00001F2F - "\x03\xb9\x03\x13\x00\x00\x1f0" + // 0x03B90313: 0x00001F30 - "\x03\xb9\x03\x14\x00\x00\x1f1" + // 0x03B90314: 0x00001F31 - "\x1f0\x03\x00\x00\x00\x1f2" + // 0x1F300300: 0x00001F32 - "\x1f1\x03\x00\x00\x00\x1f3" + // 0x1F310300: 0x00001F33 - "\x1f0\x03\x01\x00\x00\x1f4" + // 0x1F300301: 0x00001F34 - "\x1f1\x03\x01\x00\x00\x1f5" + // 0x1F310301: 0x00001F35 - "\x1f0\x03B\x00\x00\x1f6" + // 0x1F300342: 0x00001F36 - "\x1f1\x03B\x00\x00\x1f7" + // 0x1F310342: 0x00001F37 - "\x03\x99\x03\x13\x00\x00\x1f8" + // 0x03990313: 0x00001F38 - "\x03\x99\x03\x14\x00\x00\x1f9" + // 0x03990314: 0x00001F39 - "\x1f8\x03\x00\x00\x00\x1f:" + // 0x1F380300: 0x00001F3A - "\x1f9\x03\x00\x00\x00\x1f;" + // 0x1F390300: 0x00001F3B - "\x1f8\x03\x01\x00\x00\x1f<" + // 0x1F380301: 0x00001F3C - "\x1f9\x03\x01\x00\x00\x1f=" + // 0x1F390301: 0x00001F3D - "\x1f8\x03B\x00\x00\x1f>" + // 0x1F380342: 0x00001F3E - "\x1f9\x03B\x00\x00\x1f?" + // 0x1F390342: 0x00001F3F - "\x03\xbf\x03\x13\x00\x00\x1f@" + // 0x03BF0313: 0x00001F40 - "\x03\xbf\x03\x14\x00\x00\x1fA" + // 0x03BF0314: 0x00001F41 - "\x1f@\x03\x00\x00\x00\x1fB" + // 0x1F400300: 0x00001F42 - "\x1fA\x03\x00\x00\x00\x1fC" + // 0x1F410300: 0x00001F43 - "\x1f@\x03\x01\x00\x00\x1fD" + // 0x1F400301: 0x00001F44 - "\x1fA\x03\x01\x00\x00\x1fE" + // 0x1F410301: 0x00001F45 - "\x03\x9f\x03\x13\x00\x00\x1fH" + // 0x039F0313: 0x00001F48 - "\x03\x9f\x03\x14\x00\x00\x1fI" + // 0x039F0314: 0x00001F49 - "\x1fH\x03\x00\x00\x00\x1fJ" + // 0x1F480300: 0x00001F4A - "\x1fI\x03\x00\x00\x00\x1fK" + // 0x1F490300: 0x00001F4B - "\x1fH\x03\x01\x00\x00\x1fL" + // 0x1F480301: 0x00001F4C - "\x1fI\x03\x01\x00\x00\x1fM" + // 0x1F490301: 0x00001F4D - "\x03\xc5\x03\x13\x00\x00\x1fP" + // 0x03C50313: 0x00001F50 - "\x03\xc5\x03\x14\x00\x00\x1fQ" + // 0x03C50314: 0x00001F51 - "\x1fP\x03\x00\x00\x00\x1fR" + // 0x1F500300: 0x00001F52 - "\x1fQ\x03\x00\x00\x00\x1fS" + // 0x1F510300: 0x00001F53 - "\x1fP\x03\x01\x00\x00\x1fT" + // 0x1F500301: 0x00001F54 - "\x1fQ\x03\x01\x00\x00\x1fU" + // 0x1F510301: 0x00001F55 - "\x1fP\x03B\x00\x00\x1fV" + // 0x1F500342: 0x00001F56 - "\x1fQ\x03B\x00\x00\x1fW" + // 0x1F510342: 0x00001F57 - "\x03\xa5\x03\x14\x00\x00\x1fY" + // 0x03A50314: 0x00001F59 - "\x1fY\x03\x00\x00\x00\x1f[" + // 0x1F590300: 0x00001F5B - "\x1fY\x03\x01\x00\x00\x1f]" + // 0x1F590301: 0x00001F5D - "\x1fY\x03B\x00\x00\x1f_" + // 0x1F590342: 0x00001F5F - "\x03\xc9\x03\x13\x00\x00\x1f`" + // 0x03C90313: 0x00001F60 - "\x03\xc9\x03\x14\x00\x00\x1fa" + // 0x03C90314: 0x00001F61 - "\x1f`\x03\x00\x00\x00\x1fb" + // 0x1F600300: 0x00001F62 - "\x1fa\x03\x00\x00\x00\x1fc" + // 0x1F610300: 0x00001F63 - "\x1f`\x03\x01\x00\x00\x1fd" + // 0x1F600301: 0x00001F64 - "\x1fa\x03\x01\x00\x00\x1fe" + // 0x1F610301: 0x00001F65 - "\x1f`\x03B\x00\x00\x1ff" + // 0x1F600342: 0x00001F66 - "\x1fa\x03B\x00\x00\x1fg" + // 0x1F610342: 0x00001F67 - "\x03\xa9\x03\x13\x00\x00\x1fh" + // 0x03A90313: 0x00001F68 - "\x03\xa9\x03\x14\x00\x00\x1fi" + // 0x03A90314: 0x00001F69 - "\x1fh\x03\x00\x00\x00\x1fj" + // 0x1F680300: 0x00001F6A - "\x1fi\x03\x00\x00\x00\x1fk" + // 0x1F690300: 0x00001F6B - "\x1fh\x03\x01\x00\x00\x1fl" + // 0x1F680301: 0x00001F6C - "\x1fi\x03\x01\x00\x00\x1fm" + // 0x1F690301: 0x00001F6D - "\x1fh\x03B\x00\x00\x1fn" + // 0x1F680342: 0x00001F6E - "\x1fi\x03B\x00\x00\x1fo" + // 0x1F690342: 0x00001F6F - "\x03\xb1\x03\x00\x00\x00\x1fp" + // 0x03B10300: 0x00001F70 - "\x03\xb5\x03\x00\x00\x00\x1fr" + // 0x03B50300: 0x00001F72 - "\x03\xb7\x03\x00\x00\x00\x1ft" + // 0x03B70300: 0x00001F74 - "\x03\xb9\x03\x00\x00\x00\x1fv" + // 0x03B90300: 0x00001F76 - "\x03\xbf\x03\x00\x00\x00\x1fx" + // 0x03BF0300: 0x00001F78 - "\x03\xc5\x03\x00\x00\x00\x1fz" + // 0x03C50300: 0x00001F7A - "\x03\xc9\x03\x00\x00\x00\x1f|" + // 0x03C90300: 0x00001F7C - "\x1f\x00\x03E\x00\x00\x1f\x80" + // 0x1F000345: 0x00001F80 - "\x1f\x01\x03E\x00\x00\x1f\x81" + // 0x1F010345: 0x00001F81 - "\x1f\x02\x03E\x00\x00\x1f\x82" + // 0x1F020345: 0x00001F82 - "\x1f\x03\x03E\x00\x00\x1f\x83" + // 0x1F030345: 0x00001F83 - "\x1f\x04\x03E\x00\x00\x1f\x84" + // 0x1F040345: 0x00001F84 - "\x1f\x05\x03E\x00\x00\x1f\x85" + // 0x1F050345: 0x00001F85 - "\x1f\x06\x03E\x00\x00\x1f\x86" + // 0x1F060345: 0x00001F86 - "\x1f\a\x03E\x00\x00\x1f\x87" + // 0x1F070345: 0x00001F87 - "\x1f\b\x03E\x00\x00\x1f\x88" + // 0x1F080345: 0x00001F88 - "\x1f\t\x03E\x00\x00\x1f\x89" + // 0x1F090345: 0x00001F89 - "\x1f\n\x03E\x00\x00\x1f\x8a" + // 0x1F0A0345: 0x00001F8A - "\x1f\v\x03E\x00\x00\x1f\x8b" + // 0x1F0B0345: 0x00001F8B - "\x1f\f\x03E\x00\x00\x1f\x8c" + // 0x1F0C0345: 0x00001F8C - "\x1f\r\x03E\x00\x00\x1f\x8d" + // 0x1F0D0345: 0x00001F8D - "\x1f\x0e\x03E\x00\x00\x1f\x8e" + // 0x1F0E0345: 0x00001F8E - "\x1f\x0f\x03E\x00\x00\x1f\x8f" + // 0x1F0F0345: 0x00001F8F - "\x1f \x03E\x00\x00\x1f\x90" + // 0x1F200345: 0x00001F90 - "\x1f!\x03E\x00\x00\x1f\x91" + // 0x1F210345: 0x00001F91 - "\x1f\"\x03E\x00\x00\x1f\x92" + // 0x1F220345: 0x00001F92 - "\x1f#\x03E\x00\x00\x1f\x93" + // 0x1F230345: 0x00001F93 - "\x1f$\x03E\x00\x00\x1f\x94" + // 0x1F240345: 0x00001F94 - "\x1f%\x03E\x00\x00\x1f\x95" + // 0x1F250345: 0x00001F95 - "\x1f&\x03E\x00\x00\x1f\x96" + // 0x1F260345: 0x00001F96 - "\x1f'\x03E\x00\x00\x1f\x97" + // 0x1F270345: 0x00001F97 - "\x1f(\x03E\x00\x00\x1f\x98" + // 0x1F280345: 0x00001F98 - "\x1f)\x03E\x00\x00\x1f\x99" + // 0x1F290345: 0x00001F99 - "\x1f*\x03E\x00\x00\x1f\x9a" + // 0x1F2A0345: 0x00001F9A - "\x1f+\x03E\x00\x00\x1f\x9b" + // 0x1F2B0345: 0x00001F9B - "\x1f,\x03E\x00\x00\x1f\x9c" + // 0x1F2C0345: 0x00001F9C - "\x1f-\x03E\x00\x00\x1f\x9d" + // 0x1F2D0345: 0x00001F9D - "\x1f.\x03E\x00\x00\x1f\x9e" + // 0x1F2E0345: 0x00001F9E - "\x1f/\x03E\x00\x00\x1f\x9f" + // 0x1F2F0345: 0x00001F9F - "\x1f`\x03E\x00\x00\x1f\xa0" + // 0x1F600345: 0x00001FA0 - "\x1fa\x03E\x00\x00\x1f\xa1" + // 0x1F610345: 0x00001FA1 - "\x1fb\x03E\x00\x00\x1f\xa2" + // 0x1F620345: 0x00001FA2 - "\x1fc\x03E\x00\x00\x1f\xa3" + // 0x1F630345: 0x00001FA3 - "\x1fd\x03E\x00\x00\x1f\xa4" + // 0x1F640345: 0x00001FA4 - "\x1fe\x03E\x00\x00\x1f\xa5" + // 0x1F650345: 0x00001FA5 - "\x1ff\x03E\x00\x00\x1f\xa6" + // 0x1F660345: 0x00001FA6 - "\x1fg\x03E\x00\x00\x1f\xa7" + // 0x1F670345: 0x00001FA7 - "\x1fh\x03E\x00\x00\x1f\xa8" + // 0x1F680345: 0x00001FA8 - "\x1fi\x03E\x00\x00\x1f\xa9" + // 0x1F690345: 0x00001FA9 - "\x1fj\x03E\x00\x00\x1f\xaa" + // 0x1F6A0345: 0x00001FAA - "\x1fk\x03E\x00\x00\x1f\xab" + // 0x1F6B0345: 0x00001FAB - "\x1fl\x03E\x00\x00\x1f\xac" + // 0x1F6C0345: 0x00001FAC - "\x1fm\x03E\x00\x00\x1f\xad" + // 0x1F6D0345: 0x00001FAD - "\x1fn\x03E\x00\x00\x1f\xae" + // 0x1F6E0345: 0x00001FAE - "\x1fo\x03E\x00\x00\x1f\xaf" + // 0x1F6F0345: 0x00001FAF - "\x03\xb1\x03\x06\x00\x00\x1f\xb0" + // 0x03B10306: 0x00001FB0 - "\x03\xb1\x03\x04\x00\x00\x1f\xb1" + // 0x03B10304: 0x00001FB1 - "\x1fp\x03E\x00\x00\x1f\xb2" + // 0x1F700345: 0x00001FB2 - "\x03\xb1\x03E\x00\x00\x1f\xb3" + // 0x03B10345: 0x00001FB3 - "\x03\xac\x03E\x00\x00\x1f\xb4" + // 0x03AC0345: 0x00001FB4 - "\x03\xb1\x03B\x00\x00\x1f\xb6" + // 0x03B10342: 0x00001FB6 - "\x1f\xb6\x03E\x00\x00\x1f\xb7" + // 0x1FB60345: 0x00001FB7 - "\x03\x91\x03\x06\x00\x00\x1f\xb8" + // 0x03910306: 0x00001FB8 - "\x03\x91\x03\x04\x00\x00\x1f\xb9" + // 0x03910304: 0x00001FB9 - "\x03\x91\x03\x00\x00\x00\x1f\xba" + // 0x03910300: 0x00001FBA - "\x03\x91\x03E\x00\x00\x1f\xbc" + // 0x03910345: 0x00001FBC - "\x00\xa8\x03B\x00\x00\x1f\xc1" + // 0x00A80342: 0x00001FC1 - "\x1ft\x03E\x00\x00\x1f\xc2" + // 0x1F740345: 0x00001FC2 - "\x03\xb7\x03E\x00\x00\x1f\xc3" + // 0x03B70345: 0x00001FC3 - "\x03\xae\x03E\x00\x00\x1f\xc4" + // 0x03AE0345: 0x00001FC4 - "\x03\xb7\x03B\x00\x00\x1f\xc6" + // 0x03B70342: 0x00001FC6 - "\x1f\xc6\x03E\x00\x00\x1f\xc7" + // 0x1FC60345: 0x00001FC7 - "\x03\x95\x03\x00\x00\x00\x1f\xc8" + // 0x03950300: 0x00001FC8 - "\x03\x97\x03\x00\x00\x00\x1f\xca" + // 0x03970300: 0x00001FCA - "\x03\x97\x03E\x00\x00\x1f\xcc" + // 0x03970345: 0x00001FCC - "\x1f\xbf\x03\x00\x00\x00\x1f\xcd" + // 0x1FBF0300: 0x00001FCD - "\x1f\xbf\x03\x01\x00\x00\x1f\xce" + // 0x1FBF0301: 0x00001FCE - "\x1f\xbf\x03B\x00\x00\x1f\xcf" + // 0x1FBF0342: 0x00001FCF - "\x03\xb9\x03\x06\x00\x00\x1f\xd0" + // 0x03B90306: 0x00001FD0 - "\x03\xb9\x03\x04\x00\x00\x1f\xd1" + // 0x03B90304: 0x00001FD1 - "\x03\xca\x03\x00\x00\x00\x1f\xd2" + // 0x03CA0300: 0x00001FD2 - "\x03\xb9\x03B\x00\x00\x1f\xd6" + // 0x03B90342: 0x00001FD6 - "\x03\xca\x03B\x00\x00\x1f\xd7" + // 0x03CA0342: 0x00001FD7 - "\x03\x99\x03\x06\x00\x00\x1f\xd8" + // 0x03990306: 0x00001FD8 - "\x03\x99\x03\x04\x00\x00\x1f\xd9" + // 0x03990304: 0x00001FD9 - "\x03\x99\x03\x00\x00\x00\x1f\xda" + // 0x03990300: 0x00001FDA - "\x1f\xfe\x03\x00\x00\x00\x1f\xdd" + // 0x1FFE0300: 0x00001FDD - "\x1f\xfe\x03\x01\x00\x00\x1f\xde" + // 0x1FFE0301: 0x00001FDE - "\x1f\xfe\x03B\x00\x00\x1f\xdf" + // 0x1FFE0342: 0x00001FDF - "\x03\xc5\x03\x06\x00\x00\x1f\xe0" + // 0x03C50306: 0x00001FE0 - "\x03\xc5\x03\x04\x00\x00\x1f\xe1" + // 0x03C50304: 0x00001FE1 - "\x03\xcb\x03\x00\x00\x00\x1f\xe2" + // 0x03CB0300: 0x00001FE2 - "\x03\xc1\x03\x13\x00\x00\x1f\xe4" + // 0x03C10313: 0x00001FE4 - "\x03\xc1\x03\x14\x00\x00\x1f\xe5" + // 0x03C10314: 0x00001FE5 - "\x03\xc5\x03B\x00\x00\x1f\xe6" + // 0x03C50342: 0x00001FE6 - "\x03\xcb\x03B\x00\x00\x1f\xe7" + // 0x03CB0342: 0x00001FE7 - "\x03\xa5\x03\x06\x00\x00\x1f\xe8" + // 0x03A50306: 0x00001FE8 - "\x03\xa5\x03\x04\x00\x00\x1f\xe9" + // 0x03A50304: 0x00001FE9 - "\x03\xa5\x03\x00\x00\x00\x1f\xea" + // 0x03A50300: 0x00001FEA - "\x03\xa1\x03\x14\x00\x00\x1f\xec" + // 0x03A10314: 0x00001FEC - "\x00\xa8\x03\x00\x00\x00\x1f\xed" + // 0x00A80300: 0x00001FED - "\x1f|\x03E\x00\x00\x1f\xf2" + // 0x1F7C0345: 0x00001FF2 - "\x03\xc9\x03E\x00\x00\x1f\xf3" + // 0x03C90345: 0x00001FF3 - "\x03\xce\x03E\x00\x00\x1f\xf4" + // 0x03CE0345: 0x00001FF4 - "\x03\xc9\x03B\x00\x00\x1f\xf6" + // 0x03C90342: 0x00001FF6 - "\x1f\xf6\x03E\x00\x00\x1f\xf7" + // 0x1FF60345: 0x00001FF7 - "\x03\x9f\x03\x00\x00\x00\x1f\xf8" + // 0x039F0300: 0x00001FF8 - "\x03\xa9\x03\x00\x00\x00\x1f\xfa" + // 0x03A90300: 0x00001FFA - "\x03\xa9\x03E\x00\x00\x1f\xfc" + // 0x03A90345: 0x00001FFC - "!\x90\x038\x00\x00!\x9a" + // 0x21900338: 0x0000219A - "!\x92\x038\x00\x00!\x9b" + // 0x21920338: 0x0000219B - "!\x94\x038\x00\x00!\xae" + // 0x21940338: 0x000021AE - "!\xd0\x038\x00\x00!\xcd" + // 0x21D00338: 0x000021CD - "!\xd4\x038\x00\x00!\xce" + // 0x21D40338: 0x000021CE - "!\xd2\x038\x00\x00!\xcf" + // 0x21D20338: 0x000021CF - "\"\x03\x038\x00\x00\"\x04" + // 0x22030338: 0x00002204 - "\"\b\x038\x00\x00\"\t" + // 0x22080338: 0x00002209 - "\"\v\x038\x00\x00\"\f" + // 0x220B0338: 0x0000220C - "\"#\x038\x00\x00\"$" + // 0x22230338: 0x00002224 - "\"%\x038\x00\x00\"&" + // 0x22250338: 0x00002226 - "\"<\x038\x00\x00\"A" + // 0x223C0338: 0x00002241 - "\"C\x038\x00\x00\"D" + // 0x22430338: 0x00002244 - "\"E\x038\x00\x00\"G" + // 0x22450338: 0x00002247 - "\"H\x038\x00\x00\"I" + // 0x22480338: 0x00002249 - "\x00=\x038\x00\x00\"`" + // 0x003D0338: 0x00002260 - "\"a\x038\x00\x00\"b" + // 0x22610338: 0x00002262 - "\"M\x038\x00\x00\"m" + // 0x224D0338: 0x0000226D - "\x00<\x038\x00\x00\"n" + // 0x003C0338: 0x0000226E - "\x00>\x038\x00\x00\"o" + // 0x003E0338: 0x0000226F - "\"d\x038\x00\x00\"p" + // 0x22640338: 0x00002270 - "\"e\x038\x00\x00\"q" + // 0x22650338: 0x00002271 - "\"r\x038\x00\x00\"t" + // 0x22720338: 0x00002274 - "\"s\x038\x00\x00\"u" + // 0x22730338: 0x00002275 - "\"v\x038\x00\x00\"x" + // 0x22760338: 0x00002278 - "\"w\x038\x00\x00\"y" + // 0x22770338: 0x00002279 - "\"z\x038\x00\x00\"\x80" + // 0x227A0338: 0x00002280 - "\"{\x038\x00\x00\"\x81" + // 0x227B0338: 0x00002281 - "\"\x82\x038\x00\x00\"\x84" + // 0x22820338: 0x00002284 - "\"\x83\x038\x00\x00\"\x85" + // 0x22830338: 0x00002285 - "\"\x86\x038\x00\x00\"\x88" + // 0x22860338: 0x00002288 - "\"\x87\x038\x00\x00\"\x89" + // 0x22870338: 0x00002289 - "\"\xa2\x038\x00\x00\"\xac" + // 0x22A20338: 0x000022AC - "\"\xa8\x038\x00\x00\"\xad" + // 0x22A80338: 0x000022AD - "\"\xa9\x038\x00\x00\"\xae" + // 0x22A90338: 0x000022AE - "\"\xab\x038\x00\x00\"\xaf" + // 0x22AB0338: 0x000022AF - "\"|\x038\x00\x00\"\xe0" + // 0x227C0338: 0x000022E0 - "\"}\x038\x00\x00\"\xe1" + // 0x227D0338: 0x000022E1 - "\"\x91\x038\x00\x00\"\xe2" + // 0x22910338: 0x000022E2 - "\"\x92\x038\x00\x00\"\xe3" + // 0x22920338: 0x000022E3 - "\"\xb2\x038\x00\x00\"\xea" + // 0x22B20338: 0x000022EA - "\"\xb3\x038\x00\x00\"\xeb" + // 0x22B30338: 0x000022EB - "\"\xb4\x038\x00\x00\"\xec" + // 0x22B40338: 0x000022EC - "\"\xb5\x038\x00\x00\"\xed" + // 0x22B50338: 0x000022ED - "0K0\x99\x00\x000L" + // 0x304B3099: 0x0000304C - "0M0\x99\x00\x000N" + // 0x304D3099: 0x0000304E - "0O0\x99\x00\x000P" + // 0x304F3099: 0x00003050 - "0Q0\x99\x00\x000R" + // 0x30513099: 0x00003052 - "0S0\x99\x00\x000T" + // 0x30533099: 0x00003054 - "0U0\x99\x00\x000V" + // 0x30553099: 0x00003056 - "0W0\x99\x00\x000X" + // 0x30573099: 0x00003058 - "0Y0\x99\x00\x000Z" + // 0x30593099: 0x0000305A - "0[0\x99\x00\x000\\" + // 0x305B3099: 0x0000305C - "0]0\x99\x00\x000^" + // 0x305D3099: 0x0000305E - "0_0\x99\x00\x000`" + // 0x305F3099: 0x00003060 - "0a0\x99\x00\x000b" + // 0x30613099: 0x00003062 - "0d0\x99\x00\x000e" + // 0x30643099: 0x00003065 - "0f0\x99\x00\x000g" + // 0x30663099: 0x00003067 - "0h0\x99\x00\x000i" + // 0x30683099: 0x00003069 - "0o0\x99\x00\x000p" + // 0x306F3099: 0x00003070 - "0o0\x9a\x00\x000q" + // 0x306F309A: 0x00003071 - "0r0\x99\x00\x000s" + // 0x30723099: 0x00003073 - "0r0\x9a\x00\x000t" + // 0x3072309A: 0x00003074 - "0u0\x99\x00\x000v" + // 0x30753099: 0x00003076 - "0u0\x9a\x00\x000w" + // 0x3075309A: 0x00003077 - "0x0\x99\x00\x000y" + // 0x30783099: 0x00003079 - "0x0\x9a\x00\x000z" + // 0x3078309A: 0x0000307A - "0{0\x99\x00\x000|" + // 0x307B3099: 0x0000307C - "0{0\x9a\x00\x000}" + // 0x307B309A: 0x0000307D - "0F0\x99\x00\x000\x94" + // 0x30463099: 0x00003094 - "0\x9d0\x99\x00\x000\x9e" + // 0x309D3099: 0x0000309E - "0\xab0\x99\x00\x000\xac" + // 0x30AB3099: 0x000030AC - "0\xad0\x99\x00\x000\xae" + // 0x30AD3099: 0x000030AE - "0\xaf0\x99\x00\x000\xb0" + // 0x30AF3099: 0x000030B0 - "0\xb10\x99\x00\x000\xb2" + // 0x30B13099: 0x000030B2 - "0\xb30\x99\x00\x000\xb4" + // 0x30B33099: 0x000030B4 - "0\xb50\x99\x00\x000\xb6" + // 0x30B53099: 0x000030B6 - "0\xb70\x99\x00\x000\xb8" + // 0x30B73099: 0x000030B8 - "0\xb90\x99\x00\x000\xba" + // 0x30B93099: 0x000030BA - "0\xbb0\x99\x00\x000\xbc" + // 0x30BB3099: 0x000030BC - "0\xbd0\x99\x00\x000\xbe" + // 0x30BD3099: 0x000030BE - "0\xbf0\x99\x00\x000\xc0" + // 0x30BF3099: 0x000030C0 - "0\xc10\x99\x00\x000\xc2" + // 0x30C13099: 0x000030C2 - "0\xc40\x99\x00\x000\xc5" + // 0x30C43099: 0x000030C5 - "0\xc60\x99\x00\x000\xc7" + // 0x30C63099: 0x000030C7 - "0\xc80\x99\x00\x000\xc9" + // 0x30C83099: 0x000030C9 - "0\xcf0\x99\x00\x000\xd0" + // 0x30CF3099: 0x000030D0 - "0\xcf0\x9a\x00\x000\xd1" + // 0x30CF309A: 0x000030D1 - "0\xd20\x99\x00\x000\xd3" + // 0x30D23099: 0x000030D3 - "0\xd20\x9a\x00\x000\xd4" + // 0x30D2309A: 0x000030D4 - "0\xd50\x99\x00\x000\xd6" + // 0x30D53099: 0x000030D6 - "0\xd50\x9a\x00\x000\xd7" + // 0x30D5309A: 0x000030D7 - "0\xd80\x99\x00\x000\xd9" + // 0x30D83099: 0x000030D9 - "0\xd80\x9a\x00\x000\xda" + // 0x30D8309A: 0x000030DA - "0\xdb0\x99\x00\x000\xdc" + // 0x30DB3099: 0x000030DC - "0\xdb0\x9a\x00\x000\xdd" + // 0x30DB309A: 0x000030DD - "0\xa60\x99\x00\x000\xf4" + // 0x30A63099: 0x000030F4 - "0\xef0\x99\x00\x000\xf7" + // 0x30EF3099: 0x000030F7 - "0\xf00\x99\x00\x000\xf8" + // 0x30F03099: 0x000030F8 - "0\xf10\x99\x00\x000\xf9" + // 0x30F13099: 0x000030F9 - "0\xf20\x99\x00\x000\xfa" + // 0x30F23099: 0x000030FA - "0\xfd0\x99\x00\x000\xfe" + // 0x30FD3099: 0x000030FE - "\x10\x99\x10\xba\x00\x01\x10\x9a" + // 0x109910BA: 0x0001109A - "\x10\x9b\x10\xba\x00\x01\x10\x9c" + // 0x109B10BA: 0x0001109C - "\x10\xa5\x10\xba\x00\x01\x10\xab" + // 0x10A510BA: 0x000110AB - "\x111\x11'\x00\x01\x11." + // 0x11311127: 0x0001112E - "\x112\x11'\x00\x01\x11/" + // 0x11321127: 0x0001112F - "\x13G\x13>\x00\x01\x13K" + // 0x1347133E: 0x0001134B - "\x13G\x13W\x00\x01\x13L" + // 0x13471357: 0x0001134C - "\x14\xb9\x14\xba\x00\x01\x14\xbb" + // 0x14B914BA: 0x000114BB - "\x14\xb9\x14\xb0\x00\x01\x14\xbc" + // 0x14B914B0: 0x000114BC - "\x14\xb9\x14\xbd\x00\x01\x14\xbe" + // 0x14B914BD: 0x000114BE - "\x15\xb8\x15\xaf\x00\x01\x15\xba" + // 0x15B815AF: 0x000115BA - "\x15\xb9\x15\xaf\x00\x01\x15\xbb" + // 0x15B915AF: 0x000115BB - "" - // Total size of tables: 53KB (54514 bytes) diff --git a/vendor/golang.org/x/text/unicode/norm/tables12.0.0.go b/vendor/golang.org/x/text/unicode/norm/tables12.0.0.go deleted file mode 100644 index 276cb8d8c0..0000000000 --- a/vendor/golang.org/x/text/unicode/norm/tables12.0.0.go +++ /dev/null @@ -1,7710 +0,0 @@ -// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. - -//go:build go1.14 && !go1.16 - -package norm - -import "sync" - -const ( - // Version is the Unicode edition from which the tables are derived. - Version = "12.0.0" - - // MaxTransformChunkSize indicates the maximum number of bytes that Transform - // may need to write atomically for any Form. Making a destination buffer at - // least this size ensures that Transform can always make progress and that - // the user does not need to grow the buffer on an ErrShortDst. - MaxTransformChunkSize = 35 + maxNonStarters*4 -) - -var ccc = [55]uint8{ - 0, 1, 7, 8, 9, 10, 11, 12, - 13, 14, 15, 16, 17, 18, 19, 20, - 21, 22, 23, 24, 25, 26, 27, 28, - 29, 30, 31, 32, 33, 34, 35, 36, - 84, 91, 103, 107, 118, 122, 129, 130, - 132, 202, 214, 216, 218, 220, 222, 224, - 226, 228, 230, 232, 233, 234, 240, -} - -const ( - firstMulti = 0x186D - firstCCC = 0x2CA1 - endMulti = 0x2F63 - firstLeadingCCC = 0x49B1 - firstCCCZeroExcept = 0x4A7B - firstStarterWithNLead = 0x4AA2 - lastDecomp = 0x4AA4 - maxDecomp = 0x8000 -) - -// decomps: 19108 bytes -var decomps = [...]byte{ - // Bytes 0 - 3f - 0x00, 0x41, 0x20, 0x41, 0x21, 0x41, 0x22, 0x41, - 0x23, 0x41, 0x24, 0x41, 0x25, 0x41, 0x26, 0x41, - 0x27, 0x41, 0x28, 0x41, 0x29, 0x41, 0x2A, 0x41, - 0x2B, 0x41, 0x2C, 0x41, 0x2D, 0x41, 0x2E, 0x41, - 0x2F, 0x41, 0x30, 0x41, 0x31, 0x41, 0x32, 0x41, - 0x33, 0x41, 0x34, 0x41, 0x35, 0x41, 0x36, 0x41, - 0x37, 0x41, 0x38, 0x41, 0x39, 0x41, 0x3A, 0x41, - 0x3B, 0x41, 0x3C, 0x41, 0x3D, 0x41, 0x3E, 0x41, - // Bytes 40 - 7f - 0x3F, 0x41, 0x40, 0x41, 0x41, 0x41, 0x42, 0x41, - 0x43, 0x41, 0x44, 0x41, 0x45, 0x41, 0x46, 0x41, - 0x47, 0x41, 0x48, 0x41, 0x49, 0x41, 0x4A, 0x41, - 0x4B, 0x41, 0x4C, 0x41, 0x4D, 0x41, 0x4E, 0x41, - 0x4F, 0x41, 0x50, 0x41, 0x51, 0x41, 0x52, 0x41, - 0x53, 0x41, 0x54, 0x41, 0x55, 0x41, 0x56, 0x41, - 0x57, 0x41, 0x58, 0x41, 0x59, 0x41, 0x5A, 0x41, - 0x5B, 0x41, 0x5C, 0x41, 0x5D, 0x41, 0x5E, 0x41, - // Bytes 80 - bf - 0x5F, 0x41, 0x60, 0x41, 0x61, 0x41, 0x62, 0x41, - 0x63, 0x41, 0x64, 0x41, 0x65, 0x41, 0x66, 0x41, - 0x67, 0x41, 0x68, 0x41, 0x69, 0x41, 0x6A, 0x41, - 0x6B, 0x41, 0x6C, 0x41, 0x6D, 0x41, 0x6E, 0x41, - 0x6F, 0x41, 0x70, 0x41, 0x71, 0x41, 0x72, 0x41, - 0x73, 0x41, 0x74, 0x41, 0x75, 0x41, 0x76, 0x41, - 0x77, 0x41, 0x78, 0x41, 0x79, 0x41, 0x7A, 0x41, - 0x7B, 0x41, 0x7C, 0x41, 0x7D, 0x41, 0x7E, 0x42, - // Bytes c0 - ff - 0xC2, 0xA2, 0x42, 0xC2, 0xA3, 0x42, 0xC2, 0xA5, - 0x42, 0xC2, 0xA6, 0x42, 0xC2, 0xAC, 0x42, 0xC2, - 0xB7, 0x42, 0xC3, 0x86, 0x42, 0xC3, 0xB0, 0x42, - 0xC4, 0xA6, 0x42, 0xC4, 0xA7, 0x42, 0xC4, 0xB1, - 0x42, 0xC5, 0x8B, 0x42, 0xC5, 0x93, 0x42, 0xC6, - 0x8E, 0x42, 0xC6, 0x90, 0x42, 0xC6, 0xAB, 0x42, - 0xC8, 0xA2, 0x42, 0xC8, 0xB7, 0x42, 0xC9, 0x90, - 0x42, 0xC9, 0x91, 0x42, 0xC9, 0x92, 0x42, 0xC9, - // Bytes 100 - 13f - 0x94, 0x42, 0xC9, 0x95, 0x42, 0xC9, 0x99, 0x42, - 0xC9, 0x9B, 0x42, 0xC9, 0x9C, 0x42, 0xC9, 0x9F, - 0x42, 0xC9, 0xA1, 0x42, 0xC9, 0xA3, 0x42, 0xC9, - 0xA5, 0x42, 0xC9, 0xA6, 0x42, 0xC9, 0xA8, 0x42, - 0xC9, 0xA9, 0x42, 0xC9, 0xAA, 0x42, 0xC9, 0xAB, - 0x42, 0xC9, 0xAD, 0x42, 0xC9, 0xAF, 0x42, 0xC9, - 0xB0, 0x42, 0xC9, 0xB1, 0x42, 0xC9, 0xB2, 0x42, - 0xC9, 0xB3, 0x42, 0xC9, 0xB4, 0x42, 0xC9, 0xB5, - // Bytes 140 - 17f - 0x42, 0xC9, 0xB8, 0x42, 0xC9, 0xB9, 0x42, 0xC9, - 0xBB, 0x42, 0xCA, 0x81, 0x42, 0xCA, 0x82, 0x42, - 0xCA, 0x83, 0x42, 0xCA, 0x89, 0x42, 0xCA, 0x8A, - 0x42, 0xCA, 0x8B, 0x42, 0xCA, 0x8C, 0x42, 0xCA, - 0x90, 0x42, 0xCA, 0x91, 0x42, 0xCA, 0x92, 0x42, - 0xCA, 0x95, 0x42, 0xCA, 0x9D, 0x42, 0xCA, 0x9F, - 0x42, 0xCA, 0xB9, 0x42, 0xCE, 0x91, 0x42, 0xCE, - 0x92, 0x42, 0xCE, 0x93, 0x42, 0xCE, 0x94, 0x42, - // Bytes 180 - 1bf - 0xCE, 0x95, 0x42, 0xCE, 0x96, 0x42, 0xCE, 0x97, - 0x42, 0xCE, 0x98, 0x42, 0xCE, 0x99, 0x42, 0xCE, - 0x9A, 0x42, 0xCE, 0x9B, 0x42, 0xCE, 0x9C, 0x42, - 0xCE, 0x9D, 0x42, 0xCE, 0x9E, 0x42, 0xCE, 0x9F, - 0x42, 0xCE, 0xA0, 0x42, 0xCE, 0xA1, 0x42, 0xCE, - 0xA3, 0x42, 0xCE, 0xA4, 0x42, 0xCE, 0xA5, 0x42, - 0xCE, 0xA6, 0x42, 0xCE, 0xA7, 0x42, 0xCE, 0xA8, - 0x42, 0xCE, 0xA9, 0x42, 0xCE, 0xB1, 0x42, 0xCE, - // Bytes 1c0 - 1ff - 0xB2, 0x42, 0xCE, 0xB3, 0x42, 0xCE, 0xB4, 0x42, - 0xCE, 0xB5, 0x42, 0xCE, 0xB6, 0x42, 0xCE, 0xB7, - 0x42, 0xCE, 0xB8, 0x42, 0xCE, 0xB9, 0x42, 0xCE, - 0xBA, 0x42, 0xCE, 0xBB, 0x42, 0xCE, 0xBC, 0x42, - 0xCE, 0xBD, 0x42, 0xCE, 0xBE, 0x42, 0xCE, 0xBF, - 0x42, 0xCF, 0x80, 0x42, 0xCF, 0x81, 0x42, 0xCF, - 0x82, 0x42, 0xCF, 0x83, 0x42, 0xCF, 0x84, 0x42, - 0xCF, 0x85, 0x42, 0xCF, 0x86, 0x42, 0xCF, 0x87, - // Bytes 200 - 23f - 0x42, 0xCF, 0x88, 0x42, 0xCF, 0x89, 0x42, 0xCF, - 0x9C, 0x42, 0xCF, 0x9D, 0x42, 0xD0, 0xBD, 0x42, - 0xD1, 0x8A, 0x42, 0xD1, 0x8C, 0x42, 0xD7, 0x90, - 0x42, 0xD7, 0x91, 0x42, 0xD7, 0x92, 0x42, 0xD7, - 0x93, 0x42, 0xD7, 0x94, 0x42, 0xD7, 0x9B, 0x42, - 0xD7, 0x9C, 0x42, 0xD7, 0x9D, 0x42, 0xD7, 0xA2, - 0x42, 0xD7, 0xA8, 0x42, 0xD7, 0xAA, 0x42, 0xD8, - 0xA1, 0x42, 0xD8, 0xA7, 0x42, 0xD8, 0xA8, 0x42, - // Bytes 240 - 27f - 0xD8, 0xA9, 0x42, 0xD8, 0xAA, 0x42, 0xD8, 0xAB, - 0x42, 0xD8, 0xAC, 0x42, 0xD8, 0xAD, 0x42, 0xD8, - 0xAE, 0x42, 0xD8, 0xAF, 0x42, 0xD8, 0xB0, 0x42, - 0xD8, 0xB1, 0x42, 0xD8, 0xB2, 0x42, 0xD8, 0xB3, - 0x42, 0xD8, 0xB4, 0x42, 0xD8, 0xB5, 0x42, 0xD8, - 0xB6, 0x42, 0xD8, 0xB7, 0x42, 0xD8, 0xB8, 0x42, - 0xD8, 0xB9, 0x42, 0xD8, 0xBA, 0x42, 0xD9, 0x81, - 0x42, 0xD9, 0x82, 0x42, 0xD9, 0x83, 0x42, 0xD9, - // Bytes 280 - 2bf - 0x84, 0x42, 0xD9, 0x85, 0x42, 0xD9, 0x86, 0x42, - 0xD9, 0x87, 0x42, 0xD9, 0x88, 0x42, 0xD9, 0x89, - 0x42, 0xD9, 0x8A, 0x42, 0xD9, 0xAE, 0x42, 0xD9, - 0xAF, 0x42, 0xD9, 0xB1, 0x42, 0xD9, 0xB9, 0x42, - 0xD9, 0xBA, 0x42, 0xD9, 0xBB, 0x42, 0xD9, 0xBE, - 0x42, 0xD9, 0xBF, 0x42, 0xDA, 0x80, 0x42, 0xDA, - 0x83, 0x42, 0xDA, 0x84, 0x42, 0xDA, 0x86, 0x42, - 0xDA, 0x87, 0x42, 0xDA, 0x88, 0x42, 0xDA, 0x8C, - // Bytes 2c0 - 2ff - 0x42, 0xDA, 0x8D, 0x42, 0xDA, 0x8E, 0x42, 0xDA, - 0x91, 0x42, 0xDA, 0x98, 0x42, 0xDA, 0xA1, 0x42, - 0xDA, 0xA4, 0x42, 0xDA, 0xA6, 0x42, 0xDA, 0xA9, - 0x42, 0xDA, 0xAD, 0x42, 0xDA, 0xAF, 0x42, 0xDA, - 0xB1, 0x42, 0xDA, 0xB3, 0x42, 0xDA, 0xBA, 0x42, - 0xDA, 0xBB, 0x42, 0xDA, 0xBE, 0x42, 0xDB, 0x81, - 0x42, 0xDB, 0x85, 0x42, 0xDB, 0x86, 0x42, 0xDB, - 0x87, 0x42, 0xDB, 0x88, 0x42, 0xDB, 0x89, 0x42, - // Bytes 300 - 33f - 0xDB, 0x8B, 0x42, 0xDB, 0x8C, 0x42, 0xDB, 0x90, - 0x42, 0xDB, 0x92, 0x43, 0xE0, 0xBC, 0x8B, 0x43, - 0xE1, 0x83, 0x9C, 0x43, 0xE1, 0x84, 0x80, 0x43, - 0xE1, 0x84, 0x81, 0x43, 0xE1, 0x84, 0x82, 0x43, - 0xE1, 0x84, 0x83, 0x43, 0xE1, 0x84, 0x84, 0x43, - 0xE1, 0x84, 0x85, 0x43, 0xE1, 0x84, 0x86, 0x43, - 0xE1, 0x84, 0x87, 0x43, 0xE1, 0x84, 0x88, 0x43, - 0xE1, 0x84, 0x89, 0x43, 0xE1, 0x84, 0x8A, 0x43, - // Bytes 340 - 37f - 0xE1, 0x84, 0x8B, 0x43, 0xE1, 0x84, 0x8C, 0x43, - 0xE1, 0x84, 0x8D, 0x43, 0xE1, 0x84, 0x8E, 0x43, - 0xE1, 0x84, 0x8F, 0x43, 0xE1, 0x84, 0x90, 0x43, - 0xE1, 0x84, 0x91, 0x43, 0xE1, 0x84, 0x92, 0x43, - 0xE1, 0x84, 0x94, 0x43, 0xE1, 0x84, 0x95, 0x43, - 0xE1, 0x84, 0x9A, 0x43, 0xE1, 0x84, 0x9C, 0x43, - 0xE1, 0x84, 0x9D, 0x43, 0xE1, 0x84, 0x9E, 0x43, - 0xE1, 0x84, 0xA0, 0x43, 0xE1, 0x84, 0xA1, 0x43, - // Bytes 380 - 3bf - 0xE1, 0x84, 0xA2, 0x43, 0xE1, 0x84, 0xA3, 0x43, - 0xE1, 0x84, 0xA7, 0x43, 0xE1, 0x84, 0xA9, 0x43, - 0xE1, 0x84, 0xAB, 0x43, 0xE1, 0x84, 0xAC, 0x43, - 0xE1, 0x84, 0xAD, 0x43, 0xE1, 0x84, 0xAE, 0x43, - 0xE1, 0x84, 0xAF, 0x43, 0xE1, 0x84, 0xB2, 0x43, - 0xE1, 0x84, 0xB6, 0x43, 0xE1, 0x85, 0x80, 0x43, - 0xE1, 0x85, 0x87, 0x43, 0xE1, 0x85, 0x8C, 0x43, - 0xE1, 0x85, 0x97, 0x43, 0xE1, 0x85, 0x98, 0x43, - // Bytes 3c0 - 3ff - 0xE1, 0x85, 0x99, 0x43, 0xE1, 0x85, 0xA0, 0x43, - 0xE1, 0x86, 0x84, 0x43, 0xE1, 0x86, 0x85, 0x43, - 0xE1, 0x86, 0x88, 0x43, 0xE1, 0x86, 0x91, 0x43, - 0xE1, 0x86, 0x92, 0x43, 0xE1, 0x86, 0x94, 0x43, - 0xE1, 0x86, 0x9E, 0x43, 0xE1, 0x86, 0xA1, 0x43, - 0xE1, 0x87, 0x87, 0x43, 0xE1, 0x87, 0x88, 0x43, - 0xE1, 0x87, 0x8C, 0x43, 0xE1, 0x87, 0x8E, 0x43, - 0xE1, 0x87, 0x93, 0x43, 0xE1, 0x87, 0x97, 0x43, - // Bytes 400 - 43f - 0xE1, 0x87, 0x99, 0x43, 0xE1, 0x87, 0x9D, 0x43, - 0xE1, 0x87, 0x9F, 0x43, 0xE1, 0x87, 0xB1, 0x43, - 0xE1, 0x87, 0xB2, 0x43, 0xE1, 0xB4, 0x82, 0x43, - 0xE1, 0xB4, 0x96, 0x43, 0xE1, 0xB4, 0x97, 0x43, - 0xE1, 0xB4, 0x9C, 0x43, 0xE1, 0xB4, 0x9D, 0x43, - 0xE1, 0xB4, 0xA5, 0x43, 0xE1, 0xB5, 0xBB, 0x43, - 0xE1, 0xB6, 0x85, 0x43, 0xE2, 0x80, 0x82, 0x43, - 0xE2, 0x80, 0x83, 0x43, 0xE2, 0x80, 0x90, 0x43, - // Bytes 440 - 47f - 0xE2, 0x80, 0x93, 0x43, 0xE2, 0x80, 0x94, 0x43, - 0xE2, 0x82, 0xA9, 0x43, 0xE2, 0x86, 0x90, 0x43, - 0xE2, 0x86, 0x91, 0x43, 0xE2, 0x86, 0x92, 0x43, - 0xE2, 0x86, 0x93, 0x43, 0xE2, 0x88, 0x82, 0x43, - 0xE2, 0x88, 0x87, 0x43, 0xE2, 0x88, 0x91, 0x43, - 0xE2, 0x88, 0x92, 0x43, 0xE2, 0x94, 0x82, 0x43, - 0xE2, 0x96, 0xA0, 0x43, 0xE2, 0x97, 0x8B, 0x43, - 0xE2, 0xA6, 0x85, 0x43, 0xE2, 0xA6, 0x86, 0x43, - // Bytes 480 - 4bf - 0xE2, 0xB5, 0xA1, 0x43, 0xE3, 0x80, 0x81, 0x43, - 0xE3, 0x80, 0x82, 0x43, 0xE3, 0x80, 0x88, 0x43, - 0xE3, 0x80, 0x89, 0x43, 0xE3, 0x80, 0x8A, 0x43, - 0xE3, 0x80, 0x8B, 0x43, 0xE3, 0x80, 0x8C, 0x43, - 0xE3, 0x80, 0x8D, 0x43, 0xE3, 0x80, 0x8E, 0x43, - 0xE3, 0x80, 0x8F, 0x43, 0xE3, 0x80, 0x90, 0x43, - 0xE3, 0x80, 0x91, 0x43, 0xE3, 0x80, 0x92, 0x43, - 0xE3, 0x80, 0x94, 0x43, 0xE3, 0x80, 0x95, 0x43, - // Bytes 4c0 - 4ff - 0xE3, 0x80, 0x96, 0x43, 0xE3, 0x80, 0x97, 0x43, - 0xE3, 0x82, 0xA1, 0x43, 0xE3, 0x82, 0xA2, 0x43, - 0xE3, 0x82, 0xA3, 0x43, 0xE3, 0x82, 0xA4, 0x43, - 0xE3, 0x82, 0xA5, 0x43, 0xE3, 0x82, 0xA6, 0x43, - 0xE3, 0x82, 0xA7, 0x43, 0xE3, 0x82, 0xA8, 0x43, - 0xE3, 0x82, 0xA9, 0x43, 0xE3, 0x82, 0xAA, 0x43, - 0xE3, 0x82, 0xAB, 0x43, 0xE3, 0x82, 0xAD, 0x43, - 0xE3, 0x82, 0xAF, 0x43, 0xE3, 0x82, 0xB1, 0x43, - // Bytes 500 - 53f - 0xE3, 0x82, 0xB3, 0x43, 0xE3, 0x82, 0xB5, 0x43, - 0xE3, 0x82, 0xB7, 0x43, 0xE3, 0x82, 0xB9, 0x43, - 0xE3, 0x82, 0xBB, 0x43, 0xE3, 0x82, 0xBD, 0x43, - 0xE3, 0x82, 0xBF, 0x43, 0xE3, 0x83, 0x81, 0x43, - 0xE3, 0x83, 0x83, 0x43, 0xE3, 0x83, 0x84, 0x43, - 0xE3, 0x83, 0x86, 0x43, 0xE3, 0x83, 0x88, 0x43, - 0xE3, 0x83, 0x8A, 0x43, 0xE3, 0x83, 0x8B, 0x43, - 0xE3, 0x83, 0x8C, 0x43, 0xE3, 0x83, 0x8D, 0x43, - // Bytes 540 - 57f - 0xE3, 0x83, 0x8E, 0x43, 0xE3, 0x83, 0x8F, 0x43, - 0xE3, 0x83, 0x92, 0x43, 0xE3, 0x83, 0x95, 0x43, - 0xE3, 0x83, 0x98, 0x43, 0xE3, 0x83, 0x9B, 0x43, - 0xE3, 0x83, 0x9E, 0x43, 0xE3, 0x83, 0x9F, 0x43, - 0xE3, 0x83, 0xA0, 0x43, 0xE3, 0x83, 0xA1, 0x43, - 0xE3, 0x83, 0xA2, 0x43, 0xE3, 0x83, 0xA3, 0x43, - 0xE3, 0x83, 0xA4, 0x43, 0xE3, 0x83, 0xA5, 0x43, - 0xE3, 0x83, 0xA6, 0x43, 0xE3, 0x83, 0xA7, 0x43, - // Bytes 580 - 5bf - 0xE3, 0x83, 0xA8, 0x43, 0xE3, 0x83, 0xA9, 0x43, - 0xE3, 0x83, 0xAA, 0x43, 0xE3, 0x83, 0xAB, 0x43, - 0xE3, 0x83, 0xAC, 0x43, 0xE3, 0x83, 0xAD, 0x43, - 0xE3, 0x83, 0xAF, 0x43, 0xE3, 0x83, 0xB0, 0x43, - 0xE3, 0x83, 0xB1, 0x43, 0xE3, 0x83, 0xB2, 0x43, - 0xE3, 0x83, 0xB3, 0x43, 0xE3, 0x83, 0xBB, 0x43, - 0xE3, 0x83, 0xBC, 0x43, 0xE3, 0x92, 0x9E, 0x43, - 0xE3, 0x92, 0xB9, 0x43, 0xE3, 0x92, 0xBB, 0x43, - // Bytes 5c0 - 5ff - 0xE3, 0x93, 0x9F, 0x43, 0xE3, 0x94, 0x95, 0x43, - 0xE3, 0x9B, 0xAE, 0x43, 0xE3, 0x9B, 0xBC, 0x43, - 0xE3, 0x9E, 0x81, 0x43, 0xE3, 0xA0, 0xAF, 0x43, - 0xE3, 0xA1, 0xA2, 0x43, 0xE3, 0xA1, 0xBC, 0x43, - 0xE3, 0xA3, 0x87, 0x43, 0xE3, 0xA3, 0xA3, 0x43, - 0xE3, 0xA4, 0x9C, 0x43, 0xE3, 0xA4, 0xBA, 0x43, - 0xE3, 0xA8, 0xAE, 0x43, 0xE3, 0xA9, 0xAC, 0x43, - 0xE3, 0xAB, 0xA4, 0x43, 0xE3, 0xAC, 0x88, 0x43, - // Bytes 600 - 63f - 0xE3, 0xAC, 0x99, 0x43, 0xE3, 0xAD, 0x89, 0x43, - 0xE3, 0xAE, 0x9D, 0x43, 0xE3, 0xB0, 0x98, 0x43, - 0xE3, 0xB1, 0x8E, 0x43, 0xE3, 0xB4, 0xB3, 0x43, - 0xE3, 0xB6, 0x96, 0x43, 0xE3, 0xBA, 0xAC, 0x43, - 0xE3, 0xBA, 0xB8, 0x43, 0xE3, 0xBC, 0x9B, 0x43, - 0xE3, 0xBF, 0xBC, 0x43, 0xE4, 0x80, 0x88, 0x43, - 0xE4, 0x80, 0x98, 0x43, 0xE4, 0x80, 0xB9, 0x43, - 0xE4, 0x81, 0x86, 0x43, 0xE4, 0x82, 0x96, 0x43, - // Bytes 640 - 67f - 0xE4, 0x83, 0xA3, 0x43, 0xE4, 0x84, 0xAF, 0x43, - 0xE4, 0x88, 0x82, 0x43, 0xE4, 0x88, 0xA7, 0x43, - 0xE4, 0x8A, 0xA0, 0x43, 0xE4, 0x8C, 0x81, 0x43, - 0xE4, 0x8C, 0xB4, 0x43, 0xE4, 0x8D, 0x99, 0x43, - 0xE4, 0x8F, 0x95, 0x43, 0xE4, 0x8F, 0x99, 0x43, - 0xE4, 0x90, 0x8B, 0x43, 0xE4, 0x91, 0xAB, 0x43, - 0xE4, 0x94, 0xAB, 0x43, 0xE4, 0x95, 0x9D, 0x43, - 0xE4, 0x95, 0xA1, 0x43, 0xE4, 0x95, 0xAB, 0x43, - // Bytes 680 - 6bf - 0xE4, 0x97, 0x97, 0x43, 0xE4, 0x97, 0xB9, 0x43, - 0xE4, 0x98, 0xB5, 0x43, 0xE4, 0x9A, 0xBE, 0x43, - 0xE4, 0x9B, 0x87, 0x43, 0xE4, 0xA6, 0x95, 0x43, - 0xE4, 0xA7, 0xA6, 0x43, 0xE4, 0xA9, 0xAE, 0x43, - 0xE4, 0xA9, 0xB6, 0x43, 0xE4, 0xAA, 0xB2, 0x43, - 0xE4, 0xAC, 0xB3, 0x43, 0xE4, 0xAF, 0x8E, 0x43, - 0xE4, 0xB3, 0x8E, 0x43, 0xE4, 0xB3, 0xAD, 0x43, - 0xE4, 0xB3, 0xB8, 0x43, 0xE4, 0xB5, 0x96, 0x43, - // Bytes 6c0 - 6ff - 0xE4, 0xB8, 0x80, 0x43, 0xE4, 0xB8, 0x81, 0x43, - 0xE4, 0xB8, 0x83, 0x43, 0xE4, 0xB8, 0x89, 0x43, - 0xE4, 0xB8, 0x8A, 0x43, 0xE4, 0xB8, 0x8B, 0x43, - 0xE4, 0xB8, 0x8D, 0x43, 0xE4, 0xB8, 0x99, 0x43, - 0xE4, 0xB8, 0xA6, 0x43, 0xE4, 0xB8, 0xA8, 0x43, - 0xE4, 0xB8, 0xAD, 0x43, 0xE4, 0xB8, 0xB2, 0x43, - 0xE4, 0xB8, 0xB6, 0x43, 0xE4, 0xB8, 0xB8, 0x43, - 0xE4, 0xB8, 0xB9, 0x43, 0xE4, 0xB8, 0xBD, 0x43, - // Bytes 700 - 73f - 0xE4, 0xB8, 0xBF, 0x43, 0xE4, 0xB9, 0x81, 0x43, - 0xE4, 0xB9, 0x99, 0x43, 0xE4, 0xB9, 0x9D, 0x43, - 0xE4, 0xBA, 0x82, 0x43, 0xE4, 0xBA, 0x85, 0x43, - 0xE4, 0xBA, 0x86, 0x43, 0xE4, 0xBA, 0x8C, 0x43, - 0xE4, 0xBA, 0x94, 0x43, 0xE4, 0xBA, 0xA0, 0x43, - 0xE4, 0xBA, 0xA4, 0x43, 0xE4, 0xBA, 0xAE, 0x43, - 0xE4, 0xBA, 0xBA, 0x43, 0xE4, 0xBB, 0x80, 0x43, - 0xE4, 0xBB, 0x8C, 0x43, 0xE4, 0xBB, 0xA4, 0x43, - // Bytes 740 - 77f - 0xE4, 0xBC, 0x81, 0x43, 0xE4, 0xBC, 0x91, 0x43, - 0xE4, 0xBD, 0xA0, 0x43, 0xE4, 0xBE, 0x80, 0x43, - 0xE4, 0xBE, 0x86, 0x43, 0xE4, 0xBE, 0x8B, 0x43, - 0xE4, 0xBE, 0xAE, 0x43, 0xE4, 0xBE, 0xBB, 0x43, - 0xE4, 0xBE, 0xBF, 0x43, 0xE5, 0x80, 0x82, 0x43, - 0xE5, 0x80, 0xAB, 0x43, 0xE5, 0x81, 0xBA, 0x43, - 0xE5, 0x82, 0x99, 0x43, 0xE5, 0x83, 0x8F, 0x43, - 0xE5, 0x83, 0x9A, 0x43, 0xE5, 0x83, 0xA7, 0x43, - // Bytes 780 - 7bf - 0xE5, 0x84, 0xAA, 0x43, 0xE5, 0x84, 0xBF, 0x43, - 0xE5, 0x85, 0x80, 0x43, 0xE5, 0x85, 0x85, 0x43, - 0xE5, 0x85, 0x8D, 0x43, 0xE5, 0x85, 0x94, 0x43, - 0xE5, 0x85, 0xA4, 0x43, 0xE5, 0x85, 0xA5, 0x43, - 0xE5, 0x85, 0xA7, 0x43, 0xE5, 0x85, 0xA8, 0x43, - 0xE5, 0x85, 0xA9, 0x43, 0xE5, 0x85, 0xAB, 0x43, - 0xE5, 0x85, 0xAD, 0x43, 0xE5, 0x85, 0xB7, 0x43, - 0xE5, 0x86, 0x80, 0x43, 0xE5, 0x86, 0x82, 0x43, - // Bytes 7c0 - 7ff - 0xE5, 0x86, 0x8D, 0x43, 0xE5, 0x86, 0x92, 0x43, - 0xE5, 0x86, 0x95, 0x43, 0xE5, 0x86, 0x96, 0x43, - 0xE5, 0x86, 0x97, 0x43, 0xE5, 0x86, 0x99, 0x43, - 0xE5, 0x86, 0xA4, 0x43, 0xE5, 0x86, 0xAB, 0x43, - 0xE5, 0x86, 0xAC, 0x43, 0xE5, 0x86, 0xB5, 0x43, - 0xE5, 0x86, 0xB7, 0x43, 0xE5, 0x87, 0x89, 0x43, - 0xE5, 0x87, 0x8C, 0x43, 0xE5, 0x87, 0x9C, 0x43, - 0xE5, 0x87, 0x9E, 0x43, 0xE5, 0x87, 0xA0, 0x43, - // Bytes 800 - 83f - 0xE5, 0x87, 0xB5, 0x43, 0xE5, 0x88, 0x80, 0x43, - 0xE5, 0x88, 0x83, 0x43, 0xE5, 0x88, 0x87, 0x43, - 0xE5, 0x88, 0x97, 0x43, 0xE5, 0x88, 0x9D, 0x43, - 0xE5, 0x88, 0xA9, 0x43, 0xE5, 0x88, 0xBA, 0x43, - 0xE5, 0x88, 0xBB, 0x43, 0xE5, 0x89, 0x86, 0x43, - 0xE5, 0x89, 0x8D, 0x43, 0xE5, 0x89, 0xB2, 0x43, - 0xE5, 0x89, 0xB7, 0x43, 0xE5, 0x8A, 0x89, 0x43, - 0xE5, 0x8A, 0x9B, 0x43, 0xE5, 0x8A, 0xA3, 0x43, - // Bytes 840 - 87f - 0xE5, 0x8A, 0xB3, 0x43, 0xE5, 0x8A, 0xB4, 0x43, - 0xE5, 0x8B, 0x87, 0x43, 0xE5, 0x8B, 0x89, 0x43, - 0xE5, 0x8B, 0x92, 0x43, 0xE5, 0x8B, 0x9E, 0x43, - 0xE5, 0x8B, 0xA4, 0x43, 0xE5, 0x8B, 0xB5, 0x43, - 0xE5, 0x8B, 0xB9, 0x43, 0xE5, 0x8B, 0xBA, 0x43, - 0xE5, 0x8C, 0x85, 0x43, 0xE5, 0x8C, 0x86, 0x43, - 0xE5, 0x8C, 0x95, 0x43, 0xE5, 0x8C, 0x97, 0x43, - 0xE5, 0x8C, 0x9A, 0x43, 0xE5, 0x8C, 0xB8, 0x43, - // Bytes 880 - 8bf - 0xE5, 0x8C, 0xBB, 0x43, 0xE5, 0x8C, 0xBF, 0x43, - 0xE5, 0x8D, 0x81, 0x43, 0xE5, 0x8D, 0x84, 0x43, - 0xE5, 0x8D, 0x85, 0x43, 0xE5, 0x8D, 0x89, 0x43, - 0xE5, 0x8D, 0x91, 0x43, 0xE5, 0x8D, 0x94, 0x43, - 0xE5, 0x8D, 0x9A, 0x43, 0xE5, 0x8D, 0x9C, 0x43, - 0xE5, 0x8D, 0xA9, 0x43, 0xE5, 0x8D, 0xB0, 0x43, - 0xE5, 0x8D, 0xB3, 0x43, 0xE5, 0x8D, 0xB5, 0x43, - 0xE5, 0x8D, 0xBD, 0x43, 0xE5, 0x8D, 0xBF, 0x43, - // Bytes 8c0 - 8ff - 0xE5, 0x8E, 0x82, 0x43, 0xE5, 0x8E, 0xB6, 0x43, - 0xE5, 0x8F, 0x83, 0x43, 0xE5, 0x8F, 0x88, 0x43, - 0xE5, 0x8F, 0x8A, 0x43, 0xE5, 0x8F, 0x8C, 0x43, - 0xE5, 0x8F, 0x9F, 0x43, 0xE5, 0x8F, 0xA3, 0x43, - 0xE5, 0x8F, 0xA5, 0x43, 0xE5, 0x8F, 0xAB, 0x43, - 0xE5, 0x8F, 0xAF, 0x43, 0xE5, 0x8F, 0xB1, 0x43, - 0xE5, 0x8F, 0xB3, 0x43, 0xE5, 0x90, 0x86, 0x43, - 0xE5, 0x90, 0x88, 0x43, 0xE5, 0x90, 0x8D, 0x43, - // Bytes 900 - 93f - 0xE5, 0x90, 0x8F, 0x43, 0xE5, 0x90, 0x9D, 0x43, - 0xE5, 0x90, 0xB8, 0x43, 0xE5, 0x90, 0xB9, 0x43, - 0xE5, 0x91, 0x82, 0x43, 0xE5, 0x91, 0x88, 0x43, - 0xE5, 0x91, 0xA8, 0x43, 0xE5, 0x92, 0x9E, 0x43, - 0xE5, 0x92, 0xA2, 0x43, 0xE5, 0x92, 0xBD, 0x43, - 0xE5, 0x93, 0xB6, 0x43, 0xE5, 0x94, 0x90, 0x43, - 0xE5, 0x95, 0x8F, 0x43, 0xE5, 0x95, 0x93, 0x43, - 0xE5, 0x95, 0x95, 0x43, 0xE5, 0x95, 0xA3, 0x43, - // Bytes 940 - 97f - 0xE5, 0x96, 0x84, 0x43, 0xE5, 0x96, 0x87, 0x43, - 0xE5, 0x96, 0x99, 0x43, 0xE5, 0x96, 0x9D, 0x43, - 0xE5, 0x96, 0xAB, 0x43, 0xE5, 0x96, 0xB3, 0x43, - 0xE5, 0x96, 0xB6, 0x43, 0xE5, 0x97, 0x80, 0x43, - 0xE5, 0x97, 0x82, 0x43, 0xE5, 0x97, 0xA2, 0x43, - 0xE5, 0x98, 0x86, 0x43, 0xE5, 0x99, 0x91, 0x43, - 0xE5, 0x99, 0xA8, 0x43, 0xE5, 0x99, 0xB4, 0x43, - 0xE5, 0x9B, 0x97, 0x43, 0xE5, 0x9B, 0x9B, 0x43, - // Bytes 980 - 9bf - 0xE5, 0x9B, 0xB9, 0x43, 0xE5, 0x9C, 0x96, 0x43, - 0xE5, 0x9C, 0x97, 0x43, 0xE5, 0x9C, 0x9F, 0x43, - 0xE5, 0x9C, 0xB0, 0x43, 0xE5, 0x9E, 0x8B, 0x43, - 0xE5, 0x9F, 0x8E, 0x43, 0xE5, 0x9F, 0xB4, 0x43, - 0xE5, 0xA0, 0x8D, 0x43, 0xE5, 0xA0, 0xB1, 0x43, - 0xE5, 0xA0, 0xB2, 0x43, 0xE5, 0xA1, 0x80, 0x43, - 0xE5, 0xA1, 0x9A, 0x43, 0xE5, 0xA1, 0x9E, 0x43, - 0xE5, 0xA2, 0xA8, 0x43, 0xE5, 0xA2, 0xAC, 0x43, - // Bytes 9c0 - 9ff - 0xE5, 0xA2, 0xB3, 0x43, 0xE5, 0xA3, 0x98, 0x43, - 0xE5, 0xA3, 0x9F, 0x43, 0xE5, 0xA3, 0xAB, 0x43, - 0xE5, 0xA3, 0xAE, 0x43, 0xE5, 0xA3, 0xB0, 0x43, - 0xE5, 0xA3, 0xB2, 0x43, 0xE5, 0xA3, 0xB7, 0x43, - 0xE5, 0xA4, 0x82, 0x43, 0xE5, 0xA4, 0x86, 0x43, - 0xE5, 0xA4, 0x8A, 0x43, 0xE5, 0xA4, 0x95, 0x43, - 0xE5, 0xA4, 0x9A, 0x43, 0xE5, 0xA4, 0x9C, 0x43, - 0xE5, 0xA4, 0xA2, 0x43, 0xE5, 0xA4, 0xA7, 0x43, - // Bytes a00 - a3f - 0xE5, 0xA4, 0xA9, 0x43, 0xE5, 0xA5, 0x84, 0x43, - 0xE5, 0xA5, 0x88, 0x43, 0xE5, 0xA5, 0x91, 0x43, - 0xE5, 0xA5, 0x94, 0x43, 0xE5, 0xA5, 0xA2, 0x43, - 0xE5, 0xA5, 0xB3, 0x43, 0xE5, 0xA7, 0x98, 0x43, - 0xE5, 0xA7, 0xAC, 0x43, 0xE5, 0xA8, 0x9B, 0x43, - 0xE5, 0xA8, 0xA7, 0x43, 0xE5, 0xA9, 0xA2, 0x43, - 0xE5, 0xA9, 0xA6, 0x43, 0xE5, 0xAA, 0xB5, 0x43, - 0xE5, 0xAC, 0x88, 0x43, 0xE5, 0xAC, 0xA8, 0x43, - // Bytes a40 - a7f - 0xE5, 0xAC, 0xBE, 0x43, 0xE5, 0xAD, 0x90, 0x43, - 0xE5, 0xAD, 0x97, 0x43, 0xE5, 0xAD, 0xA6, 0x43, - 0xE5, 0xAE, 0x80, 0x43, 0xE5, 0xAE, 0x85, 0x43, - 0xE5, 0xAE, 0x97, 0x43, 0xE5, 0xAF, 0x83, 0x43, - 0xE5, 0xAF, 0x98, 0x43, 0xE5, 0xAF, 0xA7, 0x43, - 0xE5, 0xAF, 0xAE, 0x43, 0xE5, 0xAF, 0xB3, 0x43, - 0xE5, 0xAF, 0xB8, 0x43, 0xE5, 0xAF, 0xBF, 0x43, - 0xE5, 0xB0, 0x86, 0x43, 0xE5, 0xB0, 0x8F, 0x43, - // Bytes a80 - abf - 0xE5, 0xB0, 0xA2, 0x43, 0xE5, 0xB0, 0xB8, 0x43, - 0xE5, 0xB0, 0xBF, 0x43, 0xE5, 0xB1, 0xA0, 0x43, - 0xE5, 0xB1, 0xA2, 0x43, 0xE5, 0xB1, 0xA4, 0x43, - 0xE5, 0xB1, 0xA5, 0x43, 0xE5, 0xB1, 0xAE, 0x43, - 0xE5, 0xB1, 0xB1, 0x43, 0xE5, 0xB2, 0x8D, 0x43, - 0xE5, 0xB3, 0x80, 0x43, 0xE5, 0xB4, 0x99, 0x43, - 0xE5, 0xB5, 0x83, 0x43, 0xE5, 0xB5, 0x90, 0x43, - 0xE5, 0xB5, 0xAB, 0x43, 0xE5, 0xB5, 0xAE, 0x43, - // Bytes ac0 - aff - 0xE5, 0xB5, 0xBC, 0x43, 0xE5, 0xB6, 0xB2, 0x43, - 0xE5, 0xB6, 0xBA, 0x43, 0xE5, 0xB7, 0x9B, 0x43, - 0xE5, 0xB7, 0xA1, 0x43, 0xE5, 0xB7, 0xA2, 0x43, - 0xE5, 0xB7, 0xA5, 0x43, 0xE5, 0xB7, 0xA6, 0x43, - 0xE5, 0xB7, 0xB1, 0x43, 0xE5, 0xB7, 0xBD, 0x43, - 0xE5, 0xB7, 0xBE, 0x43, 0xE5, 0xB8, 0xA8, 0x43, - 0xE5, 0xB8, 0xBD, 0x43, 0xE5, 0xB9, 0xA9, 0x43, - 0xE5, 0xB9, 0xB2, 0x43, 0xE5, 0xB9, 0xB4, 0x43, - // Bytes b00 - b3f - 0xE5, 0xB9, 0xBA, 0x43, 0xE5, 0xB9, 0xBC, 0x43, - 0xE5, 0xB9, 0xBF, 0x43, 0xE5, 0xBA, 0xA6, 0x43, - 0xE5, 0xBA, 0xB0, 0x43, 0xE5, 0xBA, 0xB3, 0x43, - 0xE5, 0xBA, 0xB6, 0x43, 0xE5, 0xBB, 0x89, 0x43, - 0xE5, 0xBB, 0x8A, 0x43, 0xE5, 0xBB, 0x92, 0x43, - 0xE5, 0xBB, 0x93, 0x43, 0xE5, 0xBB, 0x99, 0x43, - 0xE5, 0xBB, 0xAC, 0x43, 0xE5, 0xBB, 0xB4, 0x43, - 0xE5, 0xBB, 0xBE, 0x43, 0xE5, 0xBC, 0x84, 0x43, - // Bytes b40 - b7f - 0xE5, 0xBC, 0x8B, 0x43, 0xE5, 0xBC, 0x93, 0x43, - 0xE5, 0xBC, 0xA2, 0x43, 0xE5, 0xBD, 0x90, 0x43, - 0xE5, 0xBD, 0x93, 0x43, 0xE5, 0xBD, 0xA1, 0x43, - 0xE5, 0xBD, 0xA2, 0x43, 0xE5, 0xBD, 0xA9, 0x43, - 0xE5, 0xBD, 0xAB, 0x43, 0xE5, 0xBD, 0xB3, 0x43, - 0xE5, 0xBE, 0x8B, 0x43, 0xE5, 0xBE, 0x8C, 0x43, - 0xE5, 0xBE, 0x97, 0x43, 0xE5, 0xBE, 0x9A, 0x43, - 0xE5, 0xBE, 0xA9, 0x43, 0xE5, 0xBE, 0xAD, 0x43, - // Bytes b80 - bbf - 0xE5, 0xBF, 0x83, 0x43, 0xE5, 0xBF, 0x8D, 0x43, - 0xE5, 0xBF, 0x97, 0x43, 0xE5, 0xBF, 0xB5, 0x43, - 0xE5, 0xBF, 0xB9, 0x43, 0xE6, 0x80, 0x92, 0x43, - 0xE6, 0x80, 0x9C, 0x43, 0xE6, 0x81, 0xB5, 0x43, - 0xE6, 0x82, 0x81, 0x43, 0xE6, 0x82, 0x94, 0x43, - 0xE6, 0x83, 0x87, 0x43, 0xE6, 0x83, 0x98, 0x43, - 0xE6, 0x83, 0xA1, 0x43, 0xE6, 0x84, 0x88, 0x43, - 0xE6, 0x85, 0x84, 0x43, 0xE6, 0x85, 0x88, 0x43, - // Bytes bc0 - bff - 0xE6, 0x85, 0x8C, 0x43, 0xE6, 0x85, 0x8E, 0x43, - 0xE6, 0x85, 0xA0, 0x43, 0xE6, 0x85, 0xA8, 0x43, - 0xE6, 0x85, 0xBA, 0x43, 0xE6, 0x86, 0x8E, 0x43, - 0xE6, 0x86, 0x90, 0x43, 0xE6, 0x86, 0xA4, 0x43, - 0xE6, 0x86, 0xAF, 0x43, 0xE6, 0x86, 0xB2, 0x43, - 0xE6, 0x87, 0x9E, 0x43, 0xE6, 0x87, 0xB2, 0x43, - 0xE6, 0x87, 0xB6, 0x43, 0xE6, 0x88, 0x80, 0x43, - 0xE6, 0x88, 0x88, 0x43, 0xE6, 0x88, 0x90, 0x43, - // Bytes c00 - c3f - 0xE6, 0x88, 0x9B, 0x43, 0xE6, 0x88, 0xAE, 0x43, - 0xE6, 0x88, 0xB4, 0x43, 0xE6, 0x88, 0xB6, 0x43, - 0xE6, 0x89, 0x8B, 0x43, 0xE6, 0x89, 0x93, 0x43, - 0xE6, 0x89, 0x9D, 0x43, 0xE6, 0x8A, 0x95, 0x43, - 0xE6, 0x8A, 0xB1, 0x43, 0xE6, 0x8B, 0x89, 0x43, - 0xE6, 0x8B, 0x8F, 0x43, 0xE6, 0x8B, 0x93, 0x43, - 0xE6, 0x8B, 0x94, 0x43, 0xE6, 0x8B, 0xBC, 0x43, - 0xE6, 0x8B, 0xBE, 0x43, 0xE6, 0x8C, 0x87, 0x43, - // Bytes c40 - c7f - 0xE6, 0x8C, 0xBD, 0x43, 0xE6, 0x8D, 0x90, 0x43, - 0xE6, 0x8D, 0x95, 0x43, 0xE6, 0x8D, 0xA8, 0x43, - 0xE6, 0x8D, 0xBB, 0x43, 0xE6, 0x8E, 0x83, 0x43, - 0xE6, 0x8E, 0xA0, 0x43, 0xE6, 0x8E, 0xA9, 0x43, - 0xE6, 0x8F, 0x84, 0x43, 0xE6, 0x8F, 0x85, 0x43, - 0xE6, 0x8F, 0xA4, 0x43, 0xE6, 0x90, 0x9C, 0x43, - 0xE6, 0x90, 0xA2, 0x43, 0xE6, 0x91, 0x92, 0x43, - 0xE6, 0x91, 0xA9, 0x43, 0xE6, 0x91, 0xB7, 0x43, - // Bytes c80 - cbf - 0xE6, 0x91, 0xBE, 0x43, 0xE6, 0x92, 0x9A, 0x43, - 0xE6, 0x92, 0x9D, 0x43, 0xE6, 0x93, 0x84, 0x43, - 0xE6, 0x94, 0xAF, 0x43, 0xE6, 0x94, 0xB4, 0x43, - 0xE6, 0x95, 0x8F, 0x43, 0xE6, 0x95, 0x96, 0x43, - 0xE6, 0x95, 0xAC, 0x43, 0xE6, 0x95, 0xB8, 0x43, - 0xE6, 0x96, 0x87, 0x43, 0xE6, 0x96, 0x97, 0x43, - 0xE6, 0x96, 0x99, 0x43, 0xE6, 0x96, 0xA4, 0x43, - 0xE6, 0x96, 0xB0, 0x43, 0xE6, 0x96, 0xB9, 0x43, - // Bytes cc0 - cff - 0xE6, 0x97, 0x85, 0x43, 0xE6, 0x97, 0xA0, 0x43, - 0xE6, 0x97, 0xA2, 0x43, 0xE6, 0x97, 0xA3, 0x43, - 0xE6, 0x97, 0xA5, 0x43, 0xE6, 0x98, 0x93, 0x43, - 0xE6, 0x98, 0xA0, 0x43, 0xE6, 0x99, 0x89, 0x43, - 0xE6, 0x99, 0xB4, 0x43, 0xE6, 0x9A, 0x88, 0x43, - 0xE6, 0x9A, 0x91, 0x43, 0xE6, 0x9A, 0x9C, 0x43, - 0xE6, 0x9A, 0xB4, 0x43, 0xE6, 0x9B, 0x86, 0x43, - 0xE6, 0x9B, 0xB0, 0x43, 0xE6, 0x9B, 0xB4, 0x43, - // Bytes d00 - d3f - 0xE6, 0x9B, 0xB8, 0x43, 0xE6, 0x9C, 0x80, 0x43, - 0xE6, 0x9C, 0x88, 0x43, 0xE6, 0x9C, 0x89, 0x43, - 0xE6, 0x9C, 0x97, 0x43, 0xE6, 0x9C, 0x9B, 0x43, - 0xE6, 0x9C, 0xA1, 0x43, 0xE6, 0x9C, 0xA8, 0x43, - 0xE6, 0x9D, 0x8E, 0x43, 0xE6, 0x9D, 0x93, 0x43, - 0xE6, 0x9D, 0x96, 0x43, 0xE6, 0x9D, 0x9E, 0x43, - 0xE6, 0x9D, 0xBB, 0x43, 0xE6, 0x9E, 0x85, 0x43, - 0xE6, 0x9E, 0x97, 0x43, 0xE6, 0x9F, 0xB3, 0x43, - // Bytes d40 - d7f - 0xE6, 0x9F, 0xBA, 0x43, 0xE6, 0xA0, 0x97, 0x43, - 0xE6, 0xA0, 0x9F, 0x43, 0xE6, 0xA0, 0xAA, 0x43, - 0xE6, 0xA1, 0x92, 0x43, 0xE6, 0xA2, 0x81, 0x43, - 0xE6, 0xA2, 0x85, 0x43, 0xE6, 0xA2, 0x8E, 0x43, - 0xE6, 0xA2, 0xA8, 0x43, 0xE6, 0xA4, 0x94, 0x43, - 0xE6, 0xA5, 0x82, 0x43, 0xE6, 0xA6, 0xA3, 0x43, - 0xE6, 0xA7, 0xAA, 0x43, 0xE6, 0xA8, 0x82, 0x43, - 0xE6, 0xA8, 0x93, 0x43, 0xE6, 0xAA, 0xA8, 0x43, - // Bytes d80 - dbf - 0xE6, 0xAB, 0x93, 0x43, 0xE6, 0xAB, 0x9B, 0x43, - 0xE6, 0xAC, 0x84, 0x43, 0xE6, 0xAC, 0xA0, 0x43, - 0xE6, 0xAC, 0xA1, 0x43, 0xE6, 0xAD, 0x94, 0x43, - 0xE6, 0xAD, 0xA2, 0x43, 0xE6, 0xAD, 0xA3, 0x43, - 0xE6, 0xAD, 0xB2, 0x43, 0xE6, 0xAD, 0xB7, 0x43, - 0xE6, 0xAD, 0xB9, 0x43, 0xE6, 0xAE, 0x9F, 0x43, - 0xE6, 0xAE, 0xAE, 0x43, 0xE6, 0xAE, 0xB3, 0x43, - 0xE6, 0xAE, 0xBA, 0x43, 0xE6, 0xAE, 0xBB, 0x43, - // Bytes dc0 - dff - 0xE6, 0xAF, 0x8B, 0x43, 0xE6, 0xAF, 0x8D, 0x43, - 0xE6, 0xAF, 0x94, 0x43, 0xE6, 0xAF, 0x9B, 0x43, - 0xE6, 0xB0, 0x8F, 0x43, 0xE6, 0xB0, 0x94, 0x43, - 0xE6, 0xB0, 0xB4, 0x43, 0xE6, 0xB1, 0x8E, 0x43, - 0xE6, 0xB1, 0xA7, 0x43, 0xE6, 0xB2, 0x88, 0x43, - 0xE6, 0xB2, 0xBF, 0x43, 0xE6, 0xB3, 0x8C, 0x43, - 0xE6, 0xB3, 0x8D, 0x43, 0xE6, 0xB3, 0xA5, 0x43, - 0xE6, 0xB3, 0xA8, 0x43, 0xE6, 0xB4, 0x96, 0x43, - // Bytes e00 - e3f - 0xE6, 0xB4, 0x9B, 0x43, 0xE6, 0xB4, 0x9E, 0x43, - 0xE6, 0xB4, 0xB4, 0x43, 0xE6, 0xB4, 0xBE, 0x43, - 0xE6, 0xB5, 0x81, 0x43, 0xE6, 0xB5, 0xA9, 0x43, - 0xE6, 0xB5, 0xAA, 0x43, 0xE6, 0xB5, 0xB7, 0x43, - 0xE6, 0xB5, 0xB8, 0x43, 0xE6, 0xB6, 0x85, 0x43, - 0xE6, 0xB7, 0x8B, 0x43, 0xE6, 0xB7, 0x9A, 0x43, - 0xE6, 0xB7, 0xAA, 0x43, 0xE6, 0xB7, 0xB9, 0x43, - 0xE6, 0xB8, 0x9A, 0x43, 0xE6, 0xB8, 0xAF, 0x43, - // Bytes e40 - e7f - 0xE6, 0xB9, 0xAE, 0x43, 0xE6, 0xBA, 0x80, 0x43, - 0xE6, 0xBA, 0x9C, 0x43, 0xE6, 0xBA, 0xBA, 0x43, - 0xE6, 0xBB, 0x87, 0x43, 0xE6, 0xBB, 0x8B, 0x43, - 0xE6, 0xBB, 0x91, 0x43, 0xE6, 0xBB, 0x9B, 0x43, - 0xE6, 0xBC, 0x8F, 0x43, 0xE6, 0xBC, 0x94, 0x43, - 0xE6, 0xBC, 0xA2, 0x43, 0xE6, 0xBC, 0xA3, 0x43, - 0xE6, 0xBD, 0xAE, 0x43, 0xE6, 0xBF, 0x86, 0x43, - 0xE6, 0xBF, 0xAB, 0x43, 0xE6, 0xBF, 0xBE, 0x43, - // Bytes e80 - ebf - 0xE7, 0x80, 0x9B, 0x43, 0xE7, 0x80, 0x9E, 0x43, - 0xE7, 0x80, 0xB9, 0x43, 0xE7, 0x81, 0x8A, 0x43, - 0xE7, 0x81, 0xAB, 0x43, 0xE7, 0x81, 0xB0, 0x43, - 0xE7, 0x81, 0xB7, 0x43, 0xE7, 0x81, 0xBD, 0x43, - 0xE7, 0x82, 0x99, 0x43, 0xE7, 0x82, 0xAD, 0x43, - 0xE7, 0x83, 0x88, 0x43, 0xE7, 0x83, 0x99, 0x43, - 0xE7, 0x84, 0xA1, 0x43, 0xE7, 0x85, 0x85, 0x43, - 0xE7, 0x85, 0x89, 0x43, 0xE7, 0x85, 0xAE, 0x43, - // Bytes ec0 - eff - 0xE7, 0x86, 0x9C, 0x43, 0xE7, 0x87, 0x8E, 0x43, - 0xE7, 0x87, 0x90, 0x43, 0xE7, 0x88, 0x90, 0x43, - 0xE7, 0x88, 0x9B, 0x43, 0xE7, 0x88, 0xA8, 0x43, - 0xE7, 0x88, 0xAA, 0x43, 0xE7, 0x88, 0xAB, 0x43, - 0xE7, 0x88, 0xB5, 0x43, 0xE7, 0x88, 0xB6, 0x43, - 0xE7, 0x88, 0xBB, 0x43, 0xE7, 0x88, 0xBF, 0x43, - 0xE7, 0x89, 0x87, 0x43, 0xE7, 0x89, 0x90, 0x43, - 0xE7, 0x89, 0x99, 0x43, 0xE7, 0x89, 0x9B, 0x43, - // Bytes f00 - f3f - 0xE7, 0x89, 0xA2, 0x43, 0xE7, 0x89, 0xB9, 0x43, - 0xE7, 0x8A, 0x80, 0x43, 0xE7, 0x8A, 0x95, 0x43, - 0xE7, 0x8A, 0xAC, 0x43, 0xE7, 0x8A, 0xAF, 0x43, - 0xE7, 0x8B, 0x80, 0x43, 0xE7, 0x8B, 0xBC, 0x43, - 0xE7, 0x8C, 0xAA, 0x43, 0xE7, 0x8D, 0xB5, 0x43, - 0xE7, 0x8D, 0xBA, 0x43, 0xE7, 0x8E, 0x84, 0x43, - 0xE7, 0x8E, 0x87, 0x43, 0xE7, 0x8E, 0x89, 0x43, - 0xE7, 0x8E, 0x8B, 0x43, 0xE7, 0x8E, 0xA5, 0x43, - // Bytes f40 - f7f - 0xE7, 0x8E, 0xB2, 0x43, 0xE7, 0x8F, 0x9E, 0x43, - 0xE7, 0x90, 0x86, 0x43, 0xE7, 0x90, 0x89, 0x43, - 0xE7, 0x90, 0xA2, 0x43, 0xE7, 0x91, 0x87, 0x43, - 0xE7, 0x91, 0x9C, 0x43, 0xE7, 0x91, 0xA9, 0x43, - 0xE7, 0x91, 0xB1, 0x43, 0xE7, 0x92, 0x85, 0x43, - 0xE7, 0x92, 0x89, 0x43, 0xE7, 0x92, 0x98, 0x43, - 0xE7, 0x93, 0x8A, 0x43, 0xE7, 0x93, 0x9C, 0x43, - 0xE7, 0x93, 0xA6, 0x43, 0xE7, 0x94, 0x86, 0x43, - // Bytes f80 - fbf - 0xE7, 0x94, 0x98, 0x43, 0xE7, 0x94, 0x9F, 0x43, - 0xE7, 0x94, 0xA4, 0x43, 0xE7, 0x94, 0xA8, 0x43, - 0xE7, 0x94, 0xB0, 0x43, 0xE7, 0x94, 0xB2, 0x43, - 0xE7, 0x94, 0xB3, 0x43, 0xE7, 0x94, 0xB7, 0x43, - 0xE7, 0x94, 0xBB, 0x43, 0xE7, 0x94, 0xBE, 0x43, - 0xE7, 0x95, 0x99, 0x43, 0xE7, 0x95, 0xA5, 0x43, - 0xE7, 0x95, 0xB0, 0x43, 0xE7, 0x96, 0x8B, 0x43, - 0xE7, 0x96, 0x92, 0x43, 0xE7, 0x97, 0xA2, 0x43, - // Bytes fc0 - fff - 0xE7, 0x98, 0x90, 0x43, 0xE7, 0x98, 0x9D, 0x43, - 0xE7, 0x98, 0x9F, 0x43, 0xE7, 0x99, 0x82, 0x43, - 0xE7, 0x99, 0xA9, 0x43, 0xE7, 0x99, 0xB6, 0x43, - 0xE7, 0x99, 0xBD, 0x43, 0xE7, 0x9A, 0xAE, 0x43, - 0xE7, 0x9A, 0xBF, 0x43, 0xE7, 0x9B, 0x8A, 0x43, - 0xE7, 0x9B, 0x9B, 0x43, 0xE7, 0x9B, 0xA3, 0x43, - 0xE7, 0x9B, 0xA7, 0x43, 0xE7, 0x9B, 0xAE, 0x43, - 0xE7, 0x9B, 0xB4, 0x43, 0xE7, 0x9C, 0x81, 0x43, - // Bytes 1000 - 103f - 0xE7, 0x9C, 0x9E, 0x43, 0xE7, 0x9C, 0x9F, 0x43, - 0xE7, 0x9D, 0x80, 0x43, 0xE7, 0x9D, 0x8A, 0x43, - 0xE7, 0x9E, 0x8B, 0x43, 0xE7, 0x9E, 0xA7, 0x43, - 0xE7, 0x9F, 0x9B, 0x43, 0xE7, 0x9F, 0xA2, 0x43, - 0xE7, 0x9F, 0xB3, 0x43, 0xE7, 0xA1, 0x8E, 0x43, - 0xE7, 0xA1, 0xAB, 0x43, 0xE7, 0xA2, 0x8C, 0x43, - 0xE7, 0xA2, 0x91, 0x43, 0xE7, 0xA3, 0x8A, 0x43, - 0xE7, 0xA3, 0x8C, 0x43, 0xE7, 0xA3, 0xBB, 0x43, - // Bytes 1040 - 107f - 0xE7, 0xA4, 0xAA, 0x43, 0xE7, 0xA4, 0xBA, 0x43, - 0xE7, 0xA4, 0xBC, 0x43, 0xE7, 0xA4, 0xBE, 0x43, - 0xE7, 0xA5, 0x88, 0x43, 0xE7, 0xA5, 0x89, 0x43, - 0xE7, 0xA5, 0x90, 0x43, 0xE7, 0xA5, 0x96, 0x43, - 0xE7, 0xA5, 0x9D, 0x43, 0xE7, 0xA5, 0x9E, 0x43, - 0xE7, 0xA5, 0xA5, 0x43, 0xE7, 0xA5, 0xBF, 0x43, - 0xE7, 0xA6, 0x81, 0x43, 0xE7, 0xA6, 0x8D, 0x43, - 0xE7, 0xA6, 0x8E, 0x43, 0xE7, 0xA6, 0x8F, 0x43, - // Bytes 1080 - 10bf - 0xE7, 0xA6, 0xAE, 0x43, 0xE7, 0xA6, 0xB8, 0x43, - 0xE7, 0xA6, 0xBE, 0x43, 0xE7, 0xA7, 0x8A, 0x43, - 0xE7, 0xA7, 0x98, 0x43, 0xE7, 0xA7, 0xAB, 0x43, - 0xE7, 0xA8, 0x9C, 0x43, 0xE7, 0xA9, 0x80, 0x43, - 0xE7, 0xA9, 0x8A, 0x43, 0xE7, 0xA9, 0x8F, 0x43, - 0xE7, 0xA9, 0xB4, 0x43, 0xE7, 0xA9, 0xBA, 0x43, - 0xE7, 0xAA, 0x81, 0x43, 0xE7, 0xAA, 0xB1, 0x43, - 0xE7, 0xAB, 0x8B, 0x43, 0xE7, 0xAB, 0xAE, 0x43, - // Bytes 10c0 - 10ff - 0xE7, 0xAB, 0xB9, 0x43, 0xE7, 0xAC, 0xA0, 0x43, - 0xE7, 0xAE, 0x8F, 0x43, 0xE7, 0xAF, 0x80, 0x43, - 0xE7, 0xAF, 0x86, 0x43, 0xE7, 0xAF, 0x89, 0x43, - 0xE7, 0xB0, 0xBE, 0x43, 0xE7, 0xB1, 0xA0, 0x43, - 0xE7, 0xB1, 0xB3, 0x43, 0xE7, 0xB1, 0xBB, 0x43, - 0xE7, 0xB2, 0x92, 0x43, 0xE7, 0xB2, 0xBE, 0x43, - 0xE7, 0xB3, 0x92, 0x43, 0xE7, 0xB3, 0x96, 0x43, - 0xE7, 0xB3, 0xA3, 0x43, 0xE7, 0xB3, 0xA7, 0x43, - // Bytes 1100 - 113f - 0xE7, 0xB3, 0xA8, 0x43, 0xE7, 0xB3, 0xB8, 0x43, - 0xE7, 0xB4, 0x80, 0x43, 0xE7, 0xB4, 0x90, 0x43, - 0xE7, 0xB4, 0xA2, 0x43, 0xE7, 0xB4, 0xAF, 0x43, - 0xE7, 0xB5, 0x82, 0x43, 0xE7, 0xB5, 0x9B, 0x43, - 0xE7, 0xB5, 0xA3, 0x43, 0xE7, 0xB6, 0xA0, 0x43, - 0xE7, 0xB6, 0xBE, 0x43, 0xE7, 0xB7, 0x87, 0x43, - 0xE7, 0xB7, 0xB4, 0x43, 0xE7, 0xB8, 0x82, 0x43, - 0xE7, 0xB8, 0x89, 0x43, 0xE7, 0xB8, 0xB7, 0x43, - // Bytes 1140 - 117f - 0xE7, 0xB9, 0x81, 0x43, 0xE7, 0xB9, 0x85, 0x43, - 0xE7, 0xBC, 0xB6, 0x43, 0xE7, 0xBC, 0xBE, 0x43, - 0xE7, 0xBD, 0x91, 0x43, 0xE7, 0xBD, 0xB2, 0x43, - 0xE7, 0xBD, 0xB9, 0x43, 0xE7, 0xBD, 0xBA, 0x43, - 0xE7, 0xBE, 0x85, 0x43, 0xE7, 0xBE, 0x8A, 0x43, - 0xE7, 0xBE, 0x95, 0x43, 0xE7, 0xBE, 0x9A, 0x43, - 0xE7, 0xBE, 0xBD, 0x43, 0xE7, 0xBF, 0xBA, 0x43, - 0xE8, 0x80, 0x81, 0x43, 0xE8, 0x80, 0x85, 0x43, - // Bytes 1180 - 11bf - 0xE8, 0x80, 0x8C, 0x43, 0xE8, 0x80, 0x92, 0x43, - 0xE8, 0x80, 0xB3, 0x43, 0xE8, 0x81, 0x86, 0x43, - 0xE8, 0x81, 0xA0, 0x43, 0xE8, 0x81, 0xAF, 0x43, - 0xE8, 0x81, 0xB0, 0x43, 0xE8, 0x81, 0xBE, 0x43, - 0xE8, 0x81, 0xBF, 0x43, 0xE8, 0x82, 0x89, 0x43, - 0xE8, 0x82, 0x8B, 0x43, 0xE8, 0x82, 0xAD, 0x43, - 0xE8, 0x82, 0xB2, 0x43, 0xE8, 0x84, 0x83, 0x43, - 0xE8, 0x84, 0xBE, 0x43, 0xE8, 0x87, 0x98, 0x43, - // Bytes 11c0 - 11ff - 0xE8, 0x87, 0xA3, 0x43, 0xE8, 0x87, 0xA8, 0x43, - 0xE8, 0x87, 0xAA, 0x43, 0xE8, 0x87, 0xAD, 0x43, - 0xE8, 0x87, 0xB3, 0x43, 0xE8, 0x87, 0xBC, 0x43, - 0xE8, 0x88, 0x81, 0x43, 0xE8, 0x88, 0x84, 0x43, - 0xE8, 0x88, 0x8C, 0x43, 0xE8, 0x88, 0x98, 0x43, - 0xE8, 0x88, 0x9B, 0x43, 0xE8, 0x88, 0x9F, 0x43, - 0xE8, 0x89, 0xAE, 0x43, 0xE8, 0x89, 0xAF, 0x43, - 0xE8, 0x89, 0xB2, 0x43, 0xE8, 0x89, 0xB8, 0x43, - // Bytes 1200 - 123f - 0xE8, 0x89, 0xB9, 0x43, 0xE8, 0x8A, 0x8B, 0x43, - 0xE8, 0x8A, 0x91, 0x43, 0xE8, 0x8A, 0x9D, 0x43, - 0xE8, 0x8A, 0xB1, 0x43, 0xE8, 0x8A, 0xB3, 0x43, - 0xE8, 0x8A, 0xBD, 0x43, 0xE8, 0x8B, 0xA5, 0x43, - 0xE8, 0x8B, 0xA6, 0x43, 0xE8, 0x8C, 0x9D, 0x43, - 0xE8, 0x8C, 0xA3, 0x43, 0xE8, 0x8C, 0xB6, 0x43, - 0xE8, 0x8D, 0x92, 0x43, 0xE8, 0x8D, 0x93, 0x43, - 0xE8, 0x8D, 0xA3, 0x43, 0xE8, 0x8E, 0xAD, 0x43, - // Bytes 1240 - 127f - 0xE8, 0x8E, 0xBD, 0x43, 0xE8, 0x8F, 0x89, 0x43, - 0xE8, 0x8F, 0x8A, 0x43, 0xE8, 0x8F, 0x8C, 0x43, - 0xE8, 0x8F, 0x9C, 0x43, 0xE8, 0x8F, 0xA7, 0x43, - 0xE8, 0x8F, 0xAF, 0x43, 0xE8, 0x8F, 0xB1, 0x43, - 0xE8, 0x90, 0xBD, 0x43, 0xE8, 0x91, 0x89, 0x43, - 0xE8, 0x91, 0x97, 0x43, 0xE8, 0x93, 0xAE, 0x43, - 0xE8, 0x93, 0xB1, 0x43, 0xE8, 0x93, 0xB3, 0x43, - 0xE8, 0x93, 0xBC, 0x43, 0xE8, 0x94, 0x96, 0x43, - // Bytes 1280 - 12bf - 0xE8, 0x95, 0xA4, 0x43, 0xE8, 0x97, 0x8D, 0x43, - 0xE8, 0x97, 0xBA, 0x43, 0xE8, 0x98, 0x86, 0x43, - 0xE8, 0x98, 0x92, 0x43, 0xE8, 0x98, 0xAD, 0x43, - 0xE8, 0x98, 0xBF, 0x43, 0xE8, 0x99, 0x8D, 0x43, - 0xE8, 0x99, 0x90, 0x43, 0xE8, 0x99, 0x9C, 0x43, - 0xE8, 0x99, 0xA7, 0x43, 0xE8, 0x99, 0xA9, 0x43, - 0xE8, 0x99, 0xAB, 0x43, 0xE8, 0x9A, 0x88, 0x43, - 0xE8, 0x9A, 0xA9, 0x43, 0xE8, 0x9B, 0xA2, 0x43, - // Bytes 12c0 - 12ff - 0xE8, 0x9C, 0x8E, 0x43, 0xE8, 0x9C, 0xA8, 0x43, - 0xE8, 0x9D, 0xAB, 0x43, 0xE8, 0x9D, 0xB9, 0x43, - 0xE8, 0x9E, 0x86, 0x43, 0xE8, 0x9E, 0xBA, 0x43, - 0xE8, 0x9F, 0xA1, 0x43, 0xE8, 0xA0, 0x81, 0x43, - 0xE8, 0xA0, 0x9F, 0x43, 0xE8, 0xA1, 0x80, 0x43, - 0xE8, 0xA1, 0x8C, 0x43, 0xE8, 0xA1, 0xA0, 0x43, - 0xE8, 0xA1, 0xA3, 0x43, 0xE8, 0xA3, 0x82, 0x43, - 0xE8, 0xA3, 0x8F, 0x43, 0xE8, 0xA3, 0x97, 0x43, - // Bytes 1300 - 133f - 0xE8, 0xA3, 0x9E, 0x43, 0xE8, 0xA3, 0xA1, 0x43, - 0xE8, 0xA3, 0xB8, 0x43, 0xE8, 0xA3, 0xBA, 0x43, - 0xE8, 0xA4, 0x90, 0x43, 0xE8, 0xA5, 0x81, 0x43, - 0xE8, 0xA5, 0xA4, 0x43, 0xE8, 0xA5, 0xBE, 0x43, - 0xE8, 0xA6, 0x86, 0x43, 0xE8, 0xA6, 0x8B, 0x43, - 0xE8, 0xA6, 0x96, 0x43, 0xE8, 0xA7, 0x92, 0x43, - 0xE8, 0xA7, 0xA3, 0x43, 0xE8, 0xA8, 0x80, 0x43, - 0xE8, 0xAA, 0xA0, 0x43, 0xE8, 0xAA, 0xAA, 0x43, - // Bytes 1340 - 137f - 0xE8, 0xAA, 0xBF, 0x43, 0xE8, 0xAB, 0x8B, 0x43, - 0xE8, 0xAB, 0x92, 0x43, 0xE8, 0xAB, 0x96, 0x43, - 0xE8, 0xAB, 0xAD, 0x43, 0xE8, 0xAB, 0xB8, 0x43, - 0xE8, 0xAB, 0xBE, 0x43, 0xE8, 0xAC, 0x81, 0x43, - 0xE8, 0xAC, 0xB9, 0x43, 0xE8, 0xAD, 0x98, 0x43, - 0xE8, 0xAE, 0x80, 0x43, 0xE8, 0xAE, 0x8A, 0x43, - 0xE8, 0xB0, 0xB7, 0x43, 0xE8, 0xB1, 0x86, 0x43, - 0xE8, 0xB1, 0x88, 0x43, 0xE8, 0xB1, 0x95, 0x43, - // Bytes 1380 - 13bf - 0xE8, 0xB1, 0xB8, 0x43, 0xE8, 0xB2, 0x9D, 0x43, - 0xE8, 0xB2, 0xA1, 0x43, 0xE8, 0xB2, 0xA9, 0x43, - 0xE8, 0xB2, 0xAB, 0x43, 0xE8, 0xB3, 0x81, 0x43, - 0xE8, 0xB3, 0x82, 0x43, 0xE8, 0xB3, 0x87, 0x43, - 0xE8, 0xB3, 0x88, 0x43, 0xE8, 0xB3, 0x93, 0x43, - 0xE8, 0xB4, 0x88, 0x43, 0xE8, 0xB4, 0x9B, 0x43, - 0xE8, 0xB5, 0xA4, 0x43, 0xE8, 0xB5, 0xB0, 0x43, - 0xE8, 0xB5, 0xB7, 0x43, 0xE8, 0xB6, 0xB3, 0x43, - // Bytes 13c0 - 13ff - 0xE8, 0xB6, 0xBC, 0x43, 0xE8, 0xB7, 0x8B, 0x43, - 0xE8, 0xB7, 0xAF, 0x43, 0xE8, 0xB7, 0xB0, 0x43, - 0xE8, 0xBA, 0xAB, 0x43, 0xE8, 0xBB, 0x8A, 0x43, - 0xE8, 0xBB, 0x94, 0x43, 0xE8, 0xBC, 0xA6, 0x43, - 0xE8, 0xBC, 0xAA, 0x43, 0xE8, 0xBC, 0xB8, 0x43, - 0xE8, 0xBC, 0xBB, 0x43, 0xE8, 0xBD, 0xA2, 0x43, - 0xE8, 0xBE, 0x9B, 0x43, 0xE8, 0xBE, 0x9E, 0x43, - 0xE8, 0xBE, 0xB0, 0x43, 0xE8, 0xBE, 0xB5, 0x43, - // Bytes 1400 - 143f - 0xE8, 0xBE, 0xB6, 0x43, 0xE9, 0x80, 0xA3, 0x43, - 0xE9, 0x80, 0xB8, 0x43, 0xE9, 0x81, 0x8A, 0x43, - 0xE9, 0x81, 0xA9, 0x43, 0xE9, 0x81, 0xB2, 0x43, - 0xE9, 0x81, 0xBC, 0x43, 0xE9, 0x82, 0x8F, 0x43, - 0xE9, 0x82, 0x91, 0x43, 0xE9, 0x82, 0x94, 0x43, - 0xE9, 0x83, 0x8E, 0x43, 0xE9, 0x83, 0x9E, 0x43, - 0xE9, 0x83, 0xB1, 0x43, 0xE9, 0x83, 0xBD, 0x43, - 0xE9, 0x84, 0x91, 0x43, 0xE9, 0x84, 0x9B, 0x43, - // Bytes 1440 - 147f - 0xE9, 0x85, 0x89, 0x43, 0xE9, 0x85, 0x8D, 0x43, - 0xE9, 0x85, 0xAA, 0x43, 0xE9, 0x86, 0x99, 0x43, - 0xE9, 0x86, 0xB4, 0x43, 0xE9, 0x87, 0x86, 0x43, - 0xE9, 0x87, 0x8C, 0x43, 0xE9, 0x87, 0x8F, 0x43, - 0xE9, 0x87, 0x91, 0x43, 0xE9, 0x88, 0xB4, 0x43, - 0xE9, 0x88, 0xB8, 0x43, 0xE9, 0x89, 0xB6, 0x43, - 0xE9, 0x89, 0xBC, 0x43, 0xE9, 0x8B, 0x97, 0x43, - 0xE9, 0x8B, 0x98, 0x43, 0xE9, 0x8C, 0x84, 0x43, - // Bytes 1480 - 14bf - 0xE9, 0x8D, 0x8A, 0x43, 0xE9, 0x8F, 0xB9, 0x43, - 0xE9, 0x90, 0x95, 0x43, 0xE9, 0x95, 0xB7, 0x43, - 0xE9, 0x96, 0x80, 0x43, 0xE9, 0x96, 0x8B, 0x43, - 0xE9, 0x96, 0xAD, 0x43, 0xE9, 0x96, 0xB7, 0x43, - 0xE9, 0x98, 0x9C, 0x43, 0xE9, 0x98, 0xAE, 0x43, - 0xE9, 0x99, 0x8B, 0x43, 0xE9, 0x99, 0x8D, 0x43, - 0xE9, 0x99, 0xB5, 0x43, 0xE9, 0x99, 0xB8, 0x43, - 0xE9, 0x99, 0xBC, 0x43, 0xE9, 0x9A, 0x86, 0x43, - // Bytes 14c0 - 14ff - 0xE9, 0x9A, 0xA3, 0x43, 0xE9, 0x9A, 0xB6, 0x43, - 0xE9, 0x9A, 0xB7, 0x43, 0xE9, 0x9A, 0xB8, 0x43, - 0xE9, 0x9A, 0xB9, 0x43, 0xE9, 0x9B, 0x83, 0x43, - 0xE9, 0x9B, 0xA2, 0x43, 0xE9, 0x9B, 0xA3, 0x43, - 0xE9, 0x9B, 0xA8, 0x43, 0xE9, 0x9B, 0xB6, 0x43, - 0xE9, 0x9B, 0xB7, 0x43, 0xE9, 0x9C, 0xA3, 0x43, - 0xE9, 0x9C, 0xB2, 0x43, 0xE9, 0x9D, 0x88, 0x43, - 0xE9, 0x9D, 0x91, 0x43, 0xE9, 0x9D, 0x96, 0x43, - // Bytes 1500 - 153f - 0xE9, 0x9D, 0x9E, 0x43, 0xE9, 0x9D, 0xA2, 0x43, - 0xE9, 0x9D, 0xA9, 0x43, 0xE9, 0x9F, 0x8B, 0x43, - 0xE9, 0x9F, 0x9B, 0x43, 0xE9, 0x9F, 0xA0, 0x43, - 0xE9, 0x9F, 0xAD, 0x43, 0xE9, 0x9F, 0xB3, 0x43, - 0xE9, 0x9F, 0xBF, 0x43, 0xE9, 0xA0, 0x81, 0x43, - 0xE9, 0xA0, 0x85, 0x43, 0xE9, 0xA0, 0x8B, 0x43, - 0xE9, 0xA0, 0x98, 0x43, 0xE9, 0xA0, 0xA9, 0x43, - 0xE9, 0xA0, 0xBB, 0x43, 0xE9, 0xA1, 0x9E, 0x43, - // Bytes 1540 - 157f - 0xE9, 0xA2, 0xA8, 0x43, 0xE9, 0xA3, 0x9B, 0x43, - 0xE9, 0xA3, 0x9F, 0x43, 0xE9, 0xA3, 0xA2, 0x43, - 0xE9, 0xA3, 0xAF, 0x43, 0xE9, 0xA3, 0xBC, 0x43, - 0xE9, 0xA4, 0xA8, 0x43, 0xE9, 0xA4, 0xA9, 0x43, - 0xE9, 0xA6, 0x96, 0x43, 0xE9, 0xA6, 0x99, 0x43, - 0xE9, 0xA6, 0xA7, 0x43, 0xE9, 0xA6, 0xAC, 0x43, - 0xE9, 0xA7, 0x82, 0x43, 0xE9, 0xA7, 0xB1, 0x43, - 0xE9, 0xA7, 0xBE, 0x43, 0xE9, 0xA9, 0xAA, 0x43, - // Bytes 1580 - 15bf - 0xE9, 0xAA, 0xA8, 0x43, 0xE9, 0xAB, 0x98, 0x43, - 0xE9, 0xAB, 0x9F, 0x43, 0xE9, 0xAC, 0x92, 0x43, - 0xE9, 0xAC, 0xA5, 0x43, 0xE9, 0xAC, 0xAF, 0x43, - 0xE9, 0xAC, 0xB2, 0x43, 0xE9, 0xAC, 0xBC, 0x43, - 0xE9, 0xAD, 0x9A, 0x43, 0xE9, 0xAD, 0xAF, 0x43, - 0xE9, 0xB1, 0x80, 0x43, 0xE9, 0xB1, 0x97, 0x43, - 0xE9, 0xB3, 0xA5, 0x43, 0xE9, 0xB3, 0xBD, 0x43, - 0xE9, 0xB5, 0xA7, 0x43, 0xE9, 0xB6, 0xB4, 0x43, - // Bytes 15c0 - 15ff - 0xE9, 0xB7, 0xBA, 0x43, 0xE9, 0xB8, 0x9E, 0x43, - 0xE9, 0xB9, 0xB5, 0x43, 0xE9, 0xB9, 0xBF, 0x43, - 0xE9, 0xBA, 0x97, 0x43, 0xE9, 0xBA, 0x9F, 0x43, - 0xE9, 0xBA, 0xA5, 0x43, 0xE9, 0xBA, 0xBB, 0x43, - 0xE9, 0xBB, 0x83, 0x43, 0xE9, 0xBB, 0x8D, 0x43, - 0xE9, 0xBB, 0x8E, 0x43, 0xE9, 0xBB, 0x91, 0x43, - 0xE9, 0xBB, 0xB9, 0x43, 0xE9, 0xBB, 0xBD, 0x43, - 0xE9, 0xBB, 0xBE, 0x43, 0xE9, 0xBC, 0x85, 0x43, - // Bytes 1600 - 163f - 0xE9, 0xBC, 0x8E, 0x43, 0xE9, 0xBC, 0x8F, 0x43, - 0xE9, 0xBC, 0x93, 0x43, 0xE9, 0xBC, 0x96, 0x43, - 0xE9, 0xBC, 0xA0, 0x43, 0xE9, 0xBC, 0xBB, 0x43, - 0xE9, 0xBD, 0x83, 0x43, 0xE9, 0xBD, 0x8A, 0x43, - 0xE9, 0xBD, 0x92, 0x43, 0xE9, 0xBE, 0x8D, 0x43, - 0xE9, 0xBE, 0x8E, 0x43, 0xE9, 0xBE, 0x9C, 0x43, - 0xE9, 0xBE, 0x9F, 0x43, 0xE9, 0xBE, 0xA0, 0x43, - 0xEA, 0x9C, 0xA7, 0x43, 0xEA, 0x9D, 0xAF, 0x43, - // Bytes 1640 - 167f - 0xEA, 0xAC, 0xB7, 0x43, 0xEA, 0xAD, 0x92, 0x44, - 0xF0, 0xA0, 0x84, 0xA2, 0x44, 0xF0, 0xA0, 0x94, - 0x9C, 0x44, 0xF0, 0xA0, 0x94, 0xA5, 0x44, 0xF0, - 0xA0, 0x95, 0x8B, 0x44, 0xF0, 0xA0, 0x98, 0xBA, - 0x44, 0xF0, 0xA0, 0xA0, 0x84, 0x44, 0xF0, 0xA0, - 0xA3, 0x9E, 0x44, 0xF0, 0xA0, 0xA8, 0xAC, 0x44, - 0xF0, 0xA0, 0xAD, 0xA3, 0x44, 0xF0, 0xA1, 0x93, - 0xA4, 0x44, 0xF0, 0xA1, 0x9A, 0xA8, 0x44, 0xF0, - // Bytes 1680 - 16bf - 0xA1, 0x9B, 0xAA, 0x44, 0xF0, 0xA1, 0xA7, 0x88, - 0x44, 0xF0, 0xA1, 0xAC, 0x98, 0x44, 0xF0, 0xA1, - 0xB4, 0x8B, 0x44, 0xF0, 0xA1, 0xB7, 0xA4, 0x44, - 0xF0, 0xA1, 0xB7, 0xA6, 0x44, 0xF0, 0xA2, 0x86, - 0x83, 0x44, 0xF0, 0xA2, 0x86, 0x9F, 0x44, 0xF0, - 0xA2, 0x8C, 0xB1, 0x44, 0xF0, 0xA2, 0x9B, 0x94, - 0x44, 0xF0, 0xA2, 0xA1, 0x84, 0x44, 0xF0, 0xA2, - 0xA1, 0x8A, 0x44, 0xF0, 0xA2, 0xAC, 0x8C, 0x44, - // Bytes 16c0 - 16ff - 0xF0, 0xA2, 0xAF, 0xB1, 0x44, 0xF0, 0xA3, 0x80, - 0x8A, 0x44, 0xF0, 0xA3, 0x8A, 0xB8, 0x44, 0xF0, - 0xA3, 0x8D, 0x9F, 0x44, 0xF0, 0xA3, 0x8E, 0x93, - 0x44, 0xF0, 0xA3, 0x8E, 0x9C, 0x44, 0xF0, 0xA3, - 0x8F, 0x83, 0x44, 0xF0, 0xA3, 0x8F, 0x95, 0x44, - 0xF0, 0xA3, 0x91, 0xAD, 0x44, 0xF0, 0xA3, 0x9A, - 0xA3, 0x44, 0xF0, 0xA3, 0xA2, 0xA7, 0x44, 0xF0, - 0xA3, 0xAA, 0x8D, 0x44, 0xF0, 0xA3, 0xAB, 0xBA, - // Bytes 1700 - 173f - 0x44, 0xF0, 0xA3, 0xB2, 0xBC, 0x44, 0xF0, 0xA3, - 0xB4, 0x9E, 0x44, 0xF0, 0xA3, 0xBB, 0x91, 0x44, - 0xF0, 0xA3, 0xBD, 0x9E, 0x44, 0xF0, 0xA3, 0xBE, - 0x8E, 0x44, 0xF0, 0xA4, 0x89, 0xA3, 0x44, 0xF0, - 0xA4, 0x8B, 0xAE, 0x44, 0xF0, 0xA4, 0x8E, 0xAB, - 0x44, 0xF0, 0xA4, 0x98, 0x88, 0x44, 0xF0, 0xA4, - 0x9C, 0xB5, 0x44, 0xF0, 0xA4, 0xA0, 0x94, 0x44, - 0xF0, 0xA4, 0xB0, 0xB6, 0x44, 0xF0, 0xA4, 0xB2, - // Bytes 1740 - 177f - 0x92, 0x44, 0xF0, 0xA4, 0xBE, 0xA1, 0x44, 0xF0, - 0xA4, 0xBE, 0xB8, 0x44, 0xF0, 0xA5, 0x81, 0x84, - 0x44, 0xF0, 0xA5, 0x83, 0xB2, 0x44, 0xF0, 0xA5, - 0x83, 0xB3, 0x44, 0xF0, 0xA5, 0x84, 0x99, 0x44, - 0xF0, 0xA5, 0x84, 0xB3, 0x44, 0xF0, 0xA5, 0x89, - 0x89, 0x44, 0xF0, 0xA5, 0x90, 0x9D, 0x44, 0xF0, - 0xA5, 0x98, 0xA6, 0x44, 0xF0, 0xA5, 0x9A, 0x9A, - 0x44, 0xF0, 0xA5, 0x9B, 0x85, 0x44, 0xF0, 0xA5, - // Bytes 1780 - 17bf - 0xA5, 0xBC, 0x44, 0xF0, 0xA5, 0xAA, 0xA7, 0x44, - 0xF0, 0xA5, 0xAE, 0xAB, 0x44, 0xF0, 0xA5, 0xB2, - 0x80, 0x44, 0xF0, 0xA5, 0xB3, 0x90, 0x44, 0xF0, - 0xA5, 0xBE, 0x86, 0x44, 0xF0, 0xA6, 0x87, 0x9A, - 0x44, 0xF0, 0xA6, 0x88, 0xA8, 0x44, 0xF0, 0xA6, - 0x89, 0x87, 0x44, 0xF0, 0xA6, 0x8B, 0x99, 0x44, - 0xF0, 0xA6, 0x8C, 0xBE, 0x44, 0xF0, 0xA6, 0x93, - 0x9A, 0x44, 0xF0, 0xA6, 0x94, 0xA3, 0x44, 0xF0, - // Bytes 17c0 - 17ff - 0xA6, 0x96, 0xA8, 0x44, 0xF0, 0xA6, 0x9E, 0xA7, - 0x44, 0xF0, 0xA6, 0x9E, 0xB5, 0x44, 0xF0, 0xA6, - 0xAC, 0xBC, 0x44, 0xF0, 0xA6, 0xB0, 0xB6, 0x44, - 0xF0, 0xA6, 0xB3, 0x95, 0x44, 0xF0, 0xA6, 0xB5, - 0xAB, 0x44, 0xF0, 0xA6, 0xBC, 0xAC, 0x44, 0xF0, - 0xA6, 0xBE, 0xB1, 0x44, 0xF0, 0xA7, 0x83, 0x92, - 0x44, 0xF0, 0xA7, 0x8F, 0x8A, 0x44, 0xF0, 0xA7, - 0x99, 0xA7, 0x44, 0xF0, 0xA7, 0xA2, 0xAE, 0x44, - // Bytes 1800 - 183f - 0xF0, 0xA7, 0xA5, 0xA6, 0x44, 0xF0, 0xA7, 0xB2, - 0xA8, 0x44, 0xF0, 0xA7, 0xBB, 0x93, 0x44, 0xF0, - 0xA7, 0xBC, 0xAF, 0x44, 0xF0, 0xA8, 0x97, 0x92, - 0x44, 0xF0, 0xA8, 0x97, 0xAD, 0x44, 0xF0, 0xA8, - 0x9C, 0xAE, 0x44, 0xF0, 0xA8, 0xAF, 0xBA, 0x44, - 0xF0, 0xA8, 0xB5, 0xB7, 0x44, 0xF0, 0xA9, 0x85, - 0x85, 0x44, 0xF0, 0xA9, 0x87, 0x9F, 0x44, 0xF0, - 0xA9, 0x88, 0x9A, 0x44, 0xF0, 0xA9, 0x90, 0x8A, - // Bytes 1840 - 187f - 0x44, 0xF0, 0xA9, 0x92, 0x96, 0x44, 0xF0, 0xA9, - 0x96, 0xB6, 0x44, 0xF0, 0xA9, 0xAC, 0xB0, 0x44, - 0xF0, 0xAA, 0x83, 0x8E, 0x44, 0xF0, 0xAA, 0x84, - 0x85, 0x44, 0xF0, 0xAA, 0x88, 0x8E, 0x44, 0xF0, - 0xAA, 0x8A, 0x91, 0x44, 0xF0, 0xAA, 0x8E, 0x92, - 0x44, 0xF0, 0xAA, 0x98, 0x80, 0x42, 0x21, 0x21, - 0x42, 0x21, 0x3F, 0x42, 0x2E, 0x2E, 0x42, 0x30, - 0x2C, 0x42, 0x30, 0x2E, 0x42, 0x31, 0x2C, 0x42, - // Bytes 1880 - 18bf - 0x31, 0x2E, 0x42, 0x31, 0x30, 0x42, 0x31, 0x31, - 0x42, 0x31, 0x32, 0x42, 0x31, 0x33, 0x42, 0x31, - 0x34, 0x42, 0x31, 0x35, 0x42, 0x31, 0x36, 0x42, - 0x31, 0x37, 0x42, 0x31, 0x38, 0x42, 0x31, 0x39, - 0x42, 0x32, 0x2C, 0x42, 0x32, 0x2E, 0x42, 0x32, - 0x30, 0x42, 0x32, 0x31, 0x42, 0x32, 0x32, 0x42, - 0x32, 0x33, 0x42, 0x32, 0x34, 0x42, 0x32, 0x35, - 0x42, 0x32, 0x36, 0x42, 0x32, 0x37, 0x42, 0x32, - // Bytes 18c0 - 18ff - 0x38, 0x42, 0x32, 0x39, 0x42, 0x33, 0x2C, 0x42, - 0x33, 0x2E, 0x42, 0x33, 0x30, 0x42, 0x33, 0x31, - 0x42, 0x33, 0x32, 0x42, 0x33, 0x33, 0x42, 0x33, - 0x34, 0x42, 0x33, 0x35, 0x42, 0x33, 0x36, 0x42, - 0x33, 0x37, 0x42, 0x33, 0x38, 0x42, 0x33, 0x39, - 0x42, 0x34, 0x2C, 0x42, 0x34, 0x2E, 0x42, 0x34, - 0x30, 0x42, 0x34, 0x31, 0x42, 0x34, 0x32, 0x42, - 0x34, 0x33, 0x42, 0x34, 0x34, 0x42, 0x34, 0x35, - // Bytes 1900 - 193f - 0x42, 0x34, 0x36, 0x42, 0x34, 0x37, 0x42, 0x34, - 0x38, 0x42, 0x34, 0x39, 0x42, 0x35, 0x2C, 0x42, - 0x35, 0x2E, 0x42, 0x35, 0x30, 0x42, 0x36, 0x2C, - 0x42, 0x36, 0x2E, 0x42, 0x37, 0x2C, 0x42, 0x37, - 0x2E, 0x42, 0x38, 0x2C, 0x42, 0x38, 0x2E, 0x42, - 0x39, 0x2C, 0x42, 0x39, 0x2E, 0x42, 0x3D, 0x3D, - 0x42, 0x3F, 0x21, 0x42, 0x3F, 0x3F, 0x42, 0x41, - 0x55, 0x42, 0x42, 0x71, 0x42, 0x43, 0x44, 0x42, - // Bytes 1940 - 197f - 0x44, 0x4A, 0x42, 0x44, 0x5A, 0x42, 0x44, 0x7A, - 0x42, 0x47, 0x42, 0x42, 0x47, 0x79, 0x42, 0x48, - 0x50, 0x42, 0x48, 0x56, 0x42, 0x48, 0x67, 0x42, - 0x48, 0x7A, 0x42, 0x49, 0x49, 0x42, 0x49, 0x4A, - 0x42, 0x49, 0x55, 0x42, 0x49, 0x56, 0x42, 0x49, - 0x58, 0x42, 0x4B, 0x42, 0x42, 0x4B, 0x4B, 0x42, - 0x4B, 0x4D, 0x42, 0x4C, 0x4A, 0x42, 0x4C, 0x6A, - 0x42, 0x4D, 0x42, 0x42, 0x4D, 0x43, 0x42, 0x4D, - // Bytes 1980 - 19bf - 0x44, 0x42, 0x4D, 0x52, 0x42, 0x4D, 0x56, 0x42, - 0x4D, 0x57, 0x42, 0x4E, 0x4A, 0x42, 0x4E, 0x6A, - 0x42, 0x4E, 0x6F, 0x42, 0x50, 0x48, 0x42, 0x50, - 0x52, 0x42, 0x50, 0x61, 0x42, 0x52, 0x73, 0x42, - 0x53, 0x44, 0x42, 0x53, 0x4D, 0x42, 0x53, 0x53, - 0x42, 0x53, 0x76, 0x42, 0x54, 0x4D, 0x42, 0x56, - 0x49, 0x42, 0x57, 0x43, 0x42, 0x57, 0x5A, 0x42, - 0x57, 0x62, 0x42, 0x58, 0x49, 0x42, 0x63, 0x63, - // Bytes 19c0 - 19ff - 0x42, 0x63, 0x64, 0x42, 0x63, 0x6D, 0x42, 0x64, - 0x42, 0x42, 0x64, 0x61, 0x42, 0x64, 0x6C, 0x42, - 0x64, 0x6D, 0x42, 0x64, 0x7A, 0x42, 0x65, 0x56, - 0x42, 0x66, 0x66, 0x42, 0x66, 0x69, 0x42, 0x66, - 0x6C, 0x42, 0x66, 0x6D, 0x42, 0x68, 0x61, 0x42, - 0x69, 0x69, 0x42, 0x69, 0x6A, 0x42, 0x69, 0x6E, - 0x42, 0x69, 0x76, 0x42, 0x69, 0x78, 0x42, 0x6B, - 0x41, 0x42, 0x6B, 0x56, 0x42, 0x6B, 0x57, 0x42, - // Bytes 1a00 - 1a3f - 0x6B, 0x67, 0x42, 0x6B, 0x6C, 0x42, 0x6B, 0x6D, - 0x42, 0x6B, 0x74, 0x42, 0x6C, 0x6A, 0x42, 0x6C, - 0x6D, 0x42, 0x6C, 0x6E, 0x42, 0x6C, 0x78, 0x42, - 0x6D, 0x32, 0x42, 0x6D, 0x33, 0x42, 0x6D, 0x41, - 0x42, 0x6D, 0x56, 0x42, 0x6D, 0x57, 0x42, 0x6D, - 0x62, 0x42, 0x6D, 0x67, 0x42, 0x6D, 0x6C, 0x42, - 0x6D, 0x6D, 0x42, 0x6D, 0x73, 0x42, 0x6E, 0x41, - 0x42, 0x6E, 0x46, 0x42, 0x6E, 0x56, 0x42, 0x6E, - // Bytes 1a40 - 1a7f - 0x57, 0x42, 0x6E, 0x6A, 0x42, 0x6E, 0x6D, 0x42, - 0x6E, 0x73, 0x42, 0x6F, 0x56, 0x42, 0x70, 0x41, - 0x42, 0x70, 0x46, 0x42, 0x70, 0x56, 0x42, 0x70, - 0x57, 0x42, 0x70, 0x63, 0x42, 0x70, 0x73, 0x42, - 0x73, 0x72, 0x42, 0x73, 0x74, 0x42, 0x76, 0x69, - 0x42, 0x78, 0x69, 0x43, 0x28, 0x31, 0x29, 0x43, - 0x28, 0x32, 0x29, 0x43, 0x28, 0x33, 0x29, 0x43, - 0x28, 0x34, 0x29, 0x43, 0x28, 0x35, 0x29, 0x43, - // Bytes 1a80 - 1abf - 0x28, 0x36, 0x29, 0x43, 0x28, 0x37, 0x29, 0x43, - 0x28, 0x38, 0x29, 0x43, 0x28, 0x39, 0x29, 0x43, - 0x28, 0x41, 0x29, 0x43, 0x28, 0x42, 0x29, 0x43, - 0x28, 0x43, 0x29, 0x43, 0x28, 0x44, 0x29, 0x43, - 0x28, 0x45, 0x29, 0x43, 0x28, 0x46, 0x29, 0x43, - 0x28, 0x47, 0x29, 0x43, 0x28, 0x48, 0x29, 0x43, - 0x28, 0x49, 0x29, 0x43, 0x28, 0x4A, 0x29, 0x43, - 0x28, 0x4B, 0x29, 0x43, 0x28, 0x4C, 0x29, 0x43, - // Bytes 1ac0 - 1aff - 0x28, 0x4D, 0x29, 0x43, 0x28, 0x4E, 0x29, 0x43, - 0x28, 0x4F, 0x29, 0x43, 0x28, 0x50, 0x29, 0x43, - 0x28, 0x51, 0x29, 0x43, 0x28, 0x52, 0x29, 0x43, - 0x28, 0x53, 0x29, 0x43, 0x28, 0x54, 0x29, 0x43, - 0x28, 0x55, 0x29, 0x43, 0x28, 0x56, 0x29, 0x43, - 0x28, 0x57, 0x29, 0x43, 0x28, 0x58, 0x29, 0x43, - 0x28, 0x59, 0x29, 0x43, 0x28, 0x5A, 0x29, 0x43, - 0x28, 0x61, 0x29, 0x43, 0x28, 0x62, 0x29, 0x43, - // Bytes 1b00 - 1b3f - 0x28, 0x63, 0x29, 0x43, 0x28, 0x64, 0x29, 0x43, - 0x28, 0x65, 0x29, 0x43, 0x28, 0x66, 0x29, 0x43, - 0x28, 0x67, 0x29, 0x43, 0x28, 0x68, 0x29, 0x43, - 0x28, 0x69, 0x29, 0x43, 0x28, 0x6A, 0x29, 0x43, - 0x28, 0x6B, 0x29, 0x43, 0x28, 0x6C, 0x29, 0x43, - 0x28, 0x6D, 0x29, 0x43, 0x28, 0x6E, 0x29, 0x43, - 0x28, 0x6F, 0x29, 0x43, 0x28, 0x70, 0x29, 0x43, - 0x28, 0x71, 0x29, 0x43, 0x28, 0x72, 0x29, 0x43, - // Bytes 1b40 - 1b7f - 0x28, 0x73, 0x29, 0x43, 0x28, 0x74, 0x29, 0x43, - 0x28, 0x75, 0x29, 0x43, 0x28, 0x76, 0x29, 0x43, - 0x28, 0x77, 0x29, 0x43, 0x28, 0x78, 0x29, 0x43, - 0x28, 0x79, 0x29, 0x43, 0x28, 0x7A, 0x29, 0x43, - 0x2E, 0x2E, 0x2E, 0x43, 0x31, 0x30, 0x2E, 0x43, - 0x31, 0x31, 0x2E, 0x43, 0x31, 0x32, 0x2E, 0x43, - 0x31, 0x33, 0x2E, 0x43, 0x31, 0x34, 0x2E, 0x43, - 0x31, 0x35, 0x2E, 0x43, 0x31, 0x36, 0x2E, 0x43, - // Bytes 1b80 - 1bbf - 0x31, 0x37, 0x2E, 0x43, 0x31, 0x38, 0x2E, 0x43, - 0x31, 0x39, 0x2E, 0x43, 0x32, 0x30, 0x2E, 0x43, - 0x3A, 0x3A, 0x3D, 0x43, 0x3D, 0x3D, 0x3D, 0x43, - 0x43, 0x6F, 0x2E, 0x43, 0x46, 0x41, 0x58, 0x43, - 0x47, 0x48, 0x7A, 0x43, 0x47, 0x50, 0x61, 0x43, - 0x49, 0x49, 0x49, 0x43, 0x4C, 0x54, 0x44, 0x43, - 0x4C, 0xC2, 0xB7, 0x43, 0x4D, 0x48, 0x7A, 0x43, - 0x4D, 0x50, 0x61, 0x43, 0x4D, 0xCE, 0xA9, 0x43, - // Bytes 1bc0 - 1bff - 0x50, 0x50, 0x4D, 0x43, 0x50, 0x50, 0x56, 0x43, - 0x50, 0x54, 0x45, 0x43, 0x54, 0x45, 0x4C, 0x43, - 0x54, 0x48, 0x7A, 0x43, 0x56, 0x49, 0x49, 0x43, - 0x58, 0x49, 0x49, 0x43, 0x61, 0x2F, 0x63, 0x43, - 0x61, 0x2F, 0x73, 0x43, 0x61, 0xCA, 0xBE, 0x43, - 0x62, 0x61, 0x72, 0x43, 0x63, 0x2F, 0x6F, 0x43, - 0x63, 0x2F, 0x75, 0x43, 0x63, 0x61, 0x6C, 0x43, - 0x63, 0x6D, 0x32, 0x43, 0x63, 0x6D, 0x33, 0x43, - // Bytes 1c00 - 1c3f - 0x64, 0x6D, 0x32, 0x43, 0x64, 0x6D, 0x33, 0x43, - 0x65, 0x72, 0x67, 0x43, 0x66, 0x66, 0x69, 0x43, - 0x66, 0x66, 0x6C, 0x43, 0x67, 0x61, 0x6C, 0x43, - 0x68, 0x50, 0x61, 0x43, 0x69, 0x69, 0x69, 0x43, - 0x6B, 0x48, 0x7A, 0x43, 0x6B, 0x50, 0x61, 0x43, - 0x6B, 0x6D, 0x32, 0x43, 0x6B, 0x6D, 0x33, 0x43, - 0x6B, 0xCE, 0xA9, 0x43, 0x6C, 0x6F, 0x67, 0x43, - 0x6C, 0xC2, 0xB7, 0x43, 0x6D, 0x69, 0x6C, 0x43, - // Bytes 1c40 - 1c7f - 0x6D, 0x6D, 0x32, 0x43, 0x6D, 0x6D, 0x33, 0x43, - 0x6D, 0x6F, 0x6C, 0x43, 0x72, 0x61, 0x64, 0x43, - 0x76, 0x69, 0x69, 0x43, 0x78, 0x69, 0x69, 0x43, - 0xC2, 0xB0, 0x43, 0x43, 0xC2, 0xB0, 0x46, 0x43, - 0xCA, 0xBC, 0x6E, 0x43, 0xCE, 0xBC, 0x41, 0x43, - 0xCE, 0xBC, 0x46, 0x43, 0xCE, 0xBC, 0x56, 0x43, - 0xCE, 0xBC, 0x57, 0x43, 0xCE, 0xBC, 0x67, 0x43, - 0xCE, 0xBC, 0x6C, 0x43, 0xCE, 0xBC, 0x6D, 0x43, - // Bytes 1c80 - 1cbf - 0xCE, 0xBC, 0x73, 0x44, 0x28, 0x31, 0x30, 0x29, - 0x44, 0x28, 0x31, 0x31, 0x29, 0x44, 0x28, 0x31, - 0x32, 0x29, 0x44, 0x28, 0x31, 0x33, 0x29, 0x44, - 0x28, 0x31, 0x34, 0x29, 0x44, 0x28, 0x31, 0x35, - 0x29, 0x44, 0x28, 0x31, 0x36, 0x29, 0x44, 0x28, - 0x31, 0x37, 0x29, 0x44, 0x28, 0x31, 0x38, 0x29, - 0x44, 0x28, 0x31, 0x39, 0x29, 0x44, 0x28, 0x32, - 0x30, 0x29, 0x44, 0x30, 0xE7, 0x82, 0xB9, 0x44, - // Bytes 1cc0 - 1cff - 0x31, 0xE2, 0x81, 0x84, 0x44, 0x31, 0xE6, 0x97, - 0xA5, 0x44, 0x31, 0xE6, 0x9C, 0x88, 0x44, 0x31, - 0xE7, 0x82, 0xB9, 0x44, 0x32, 0xE6, 0x97, 0xA5, - 0x44, 0x32, 0xE6, 0x9C, 0x88, 0x44, 0x32, 0xE7, - 0x82, 0xB9, 0x44, 0x33, 0xE6, 0x97, 0xA5, 0x44, - 0x33, 0xE6, 0x9C, 0x88, 0x44, 0x33, 0xE7, 0x82, - 0xB9, 0x44, 0x34, 0xE6, 0x97, 0xA5, 0x44, 0x34, - 0xE6, 0x9C, 0x88, 0x44, 0x34, 0xE7, 0x82, 0xB9, - // Bytes 1d00 - 1d3f - 0x44, 0x35, 0xE6, 0x97, 0xA5, 0x44, 0x35, 0xE6, - 0x9C, 0x88, 0x44, 0x35, 0xE7, 0x82, 0xB9, 0x44, - 0x36, 0xE6, 0x97, 0xA5, 0x44, 0x36, 0xE6, 0x9C, - 0x88, 0x44, 0x36, 0xE7, 0x82, 0xB9, 0x44, 0x37, - 0xE6, 0x97, 0xA5, 0x44, 0x37, 0xE6, 0x9C, 0x88, - 0x44, 0x37, 0xE7, 0x82, 0xB9, 0x44, 0x38, 0xE6, - 0x97, 0xA5, 0x44, 0x38, 0xE6, 0x9C, 0x88, 0x44, - 0x38, 0xE7, 0x82, 0xB9, 0x44, 0x39, 0xE6, 0x97, - // Bytes 1d40 - 1d7f - 0xA5, 0x44, 0x39, 0xE6, 0x9C, 0x88, 0x44, 0x39, - 0xE7, 0x82, 0xB9, 0x44, 0x56, 0x49, 0x49, 0x49, - 0x44, 0x61, 0x2E, 0x6D, 0x2E, 0x44, 0x6B, 0x63, - 0x61, 0x6C, 0x44, 0x70, 0x2E, 0x6D, 0x2E, 0x44, - 0x76, 0x69, 0x69, 0x69, 0x44, 0xD5, 0xA5, 0xD6, - 0x82, 0x44, 0xD5, 0xB4, 0xD5, 0xA5, 0x44, 0xD5, - 0xB4, 0xD5, 0xAB, 0x44, 0xD5, 0xB4, 0xD5, 0xAD, - 0x44, 0xD5, 0xB4, 0xD5, 0xB6, 0x44, 0xD5, 0xBE, - // Bytes 1d80 - 1dbf - 0xD5, 0xB6, 0x44, 0xD7, 0x90, 0xD7, 0x9C, 0x44, - 0xD8, 0xA7, 0xD9, 0xB4, 0x44, 0xD8, 0xA8, 0xD8, - 0xAC, 0x44, 0xD8, 0xA8, 0xD8, 0xAD, 0x44, 0xD8, - 0xA8, 0xD8, 0xAE, 0x44, 0xD8, 0xA8, 0xD8, 0xB1, - 0x44, 0xD8, 0xA8, 0xD8, 0xB2, 0x44, 0xD8, 0xA8, - 0xD9, 0x85, 0x44, 0xD8, 0xA8, 0xD9, 0x86, 0x44, - 0xD8, 0xA8, 0xD9, 0x87, 0x44, 0xD8, 0xA8, 0xD9, - 0x89, 0x44, 0xD8, 0xA8, 0xD9, 0x8A, 0x44, 0xD8, - // Bytes 1dc0 - 1dff - 0xAA, 0xD8, 0xAC, 0x44, 0xD8, 0xAA, 0xD8, 0xAD, - 0x44, 0xD8, 0xAA, 0xD8, 0xAE, 0x44, 0xD8, 0xAA, - 0xD8, 0xB1, 0x44, 0xD8, 0xAA, 0xD8, 0xB2, 0x44, - 0xD8, 0xAA, 0xD9, 0x85, 0x44, 0xD8, 0xAA, 0xD9, - 0x86, 0x44, 0xD8, 0xAA, 0xD9, 0x87, 0x44, 0xD8, - 0xAA, 0xD9, 0x89, 0x44, 0xD8, 0xAA, 0xD9, 0x8A, - 0x44, 0xD8, 0xAB, 0xD8, 0xAC, 0x44, 0xD8, 0xAB, - 0xD8, 0xB1, 0x44, 0xD8, 0xAB, 0xD8, 0xB2, 0x44, - // Bytes 1e00 - 1e3f - 0xD8, 0xAB, 0xD9, 0x85, 0x44, 0xD8, 0xAB, 0xD9, - 0x86, 0x44, 0xD8, 0xAB, 0xD9, 0x87, 0x44, 0xD8, - 0xAB, 0xD9, 0x89, 0x44, 0xD8, 0xAB, 0xD9, 0x8A, - 0x44, 0xD8, 0xAC, 0xD8, 0xAD, 0x44, 0xD8, 0xAC, - 0xD9, 0x85, 0x44, 0xD8, 0xAC, 0xD9, 0x89, 0x44, - 0xD8, 0xAC, 0xD9, 0x8A, 0x44, 0xD8, 0xAD, 0xD8, - 0xAC, 0x44, 0xD8, 0xAD, 0xD9, 0x85, 0x44, 0xD8, - 0xAD, 0xD9, 0x89, 0x44, 0xD8, 0xAD, 0xD9, 0x8A, - // Bytes 1e40 - 1e7f - 0x44, 0xD8, 0xAE, 0xD8, 0xAC, 0x44, 0xD8, 0xAE, - 0xD8, 0xAD, 0x44, 0xD8, 0xAE, 0xD9, 0x85, 0x44, - 0xD8, 0xAE, 0xD9, 0x89, 0x44, 0xD8, 0xAE, 0xD9, - 0x8A, 0x44, 0xD8, 0xB3, 0xD8, 0xAC, 0x44, 0xD8, - 0xB3, 0xD8, 0xAD, 0x44, 0xD8, 0xB3, 0xD8, 0xAE, - 0x44, 0xD8, 0xB3, 0xD8, 0xB1, 0x44, 0xD8, 0xB3, - 0xD9, 0x85, 0x44, 0xD8, 0xB3, 0xD9, 0x87, 0x44, - 0xD8, 0xB3, 0xD9, 0x89, 0x44, 0xD8, 0xB3, 0xD9, - // Bytes 1e80 - 1ebf - 0x8A, 0x44, 0xD8, 0xB4, 0xD8, 0xAC, 0x44, 0xD8, - 0xB4, 0xD8, 0xAD, 0x44, 0xD8, 0xB4, 0xD8, 0xAE, - 0x44, 0xD8, 0xB4, 0xD8, 0xB1, 0x44, 0xD8, 0xB4, - 0xD9, 0x85, 0x44, 0xD8, 0xB4, 0xD9, 0x87, 0x44, - 0xD8, 0xB4, 0xD9, 0x89, 0x44, 0xD8, 0xB4, 0xD9, - 0x8A, 0x44, 0xD8, 0xB5, 0xD8, 0xAD, 0x44, 0xD8, - 0xB5, 0xD8, 0xAE, 0x44, 0xD8, 0xB5, 0xD8, 0xB1, - 0x44, 0xD8, 0xB5, 0xD9, 0x85, 0x44, 0xD8, 0xB5, - // Bytes 1ec0 - 1eff - 0xD9, 0x89, 0x44, 0xD8, 0xB5, 0xD9, 0x8A, 0x44, - 0xD8, 0xB6, 0xD8, 0xAC, 0x44, 0xD8, 0xB6, 0xD8, - 0xAD, 0x44, 0xD8, 0xB6, 0xD8, 0xAE, 0x44, 0xD8, - 0xB6, 0xD8, 0xB1, 0x44, 0xD8, 0xB6, 0xD9, 0x85, - 0x44, 0xD8, 0xB6, 0xD9, 0x89, 0x44, 0xD8, 0xB6, - 0xD9, 0x8A, 0x44, 0xD8, 0xB7, 0xD8, 0xAD, 0x44, - 0xD8, 0xB7, 0xD9, 0x85, 0x44, 0xD8, 0xB7, 0xD9, - 0x89, 0x44, 0xD8, 0xB7, 0xD9, 0x8A, 0x44, 0xD8, - // Bytes 1f00 - 1f3f - 0xB8, 0xD9, 0x85, 0x44, 0xD8, 0xB9, 0xD8, 0xAC, - 0x44, 0xD8, 0xB9, 0xD9, 0x85, 0x44, 0xD8, 0xB9, - 0xD9, 0x89, 0x44, 0xD8, 0xB9, 0xD9, 0x8A, 0x44, - 0xD8, 0xBA, 0xD8, 0xAC, 0x44, 0xD8, 0xBA, 0xD9, - 0x85, 0x44, 0xD8, 0xBA, 0xD9, 0x89, 0x44, 0xD8, - 0xBA, 0xD9, 0x8A, 0x44, 0xD9, 0x81, 0xD8, 0xAC, - 0x44, 0xD9, 0x81, 0xD8, 0xAD, 0x44, 0xD9, 0x81, - 0xD8, 0xAE, 0x44, 0xD9, 0x81, 0xD9, 0x85, 0x44, - // Bytes 1f40 - 1f7f - 0xD9, 0x81, 0xD9, 0x89, 0x44, 0xD9, 0x81, 0xD9, - 0x8A, 0x44, 0xD9, 0x82, 0xD8, 0xAD, 0x44, 0xD9, - 0x82, 0xD9, 0x85, 0x44, 0xD9, 0x82, 0xD9, 0x89, - 0x44, 0xD9, 0x82, 0xD9, 0x8A, 0x44, 0xD9, 0x83, - 0xD8, 0xA7, 0x44, 0xD9, 0x83, 0xD8, 0xAC, 0x44, - 0xD9, 0x83, 0xD8, 0xAD, 0x44, 0xD9, 0x83, 0xD8, - 0xAE, 0x44, 0xD9, 0x83, 0xD9, 0x84, 0x44, 0xD9, - 0x83, 0xD9, 0x85, 0x44, 0xD9, 0x83, 0xD9, 0x89, - // Bytes 1f80 - 1fbf - 0x44, 0xD9, 0x83, 0xD9, 0x8A, 0x44, 0xD9, 0x84, - 0xD8, 0xA7, 0x44, 0xD9, 0x84, 0xD8, 0xAC, 0x44, - 0xD9, 0x84, 0xD8, 0xAD, 0x44, 0xD9, 0x84, 0xD8, - 0xAE, 0x44, 0xD9, 0x84, 0xD9, 0x85, 0x44, 0xD9, - 0x84, 0xD9, 0x87, 0x44, 0xD9, 0x84, 0xD9, 0x89, - 0x44, 0xD9, 0x84, 0xD9, 0x8A, 0x44, 0xD9, 0x85, - 0xD8, 0xA7, 0x44, 0xD9, 0x85, 0xD8, 0xAC, 0x44, - 0xD9, 0x85, 0xD8, 0xAD, 0x44, 0xD9, 0x85, 0xD8, - // Bytes 1fc0 - 1fff - 0xAE, 0x44, 0xD9, 0x85, 0xD9, 0x85, 0x44, 0xD9, - 0x85, 0xD9, 0x89, 0x44, 0xD9, 0x85, 0xD9, 0x8A, - 0x44, 0xD9, 0x86, 0xD8, 0xAC, 0x44, 0xD9, 0x86, - 0xD8, 0xAD, 0x44, 0xD9, 0x86, 0xD8, 0xAE, 0x44, - 0xD9, 0x86, 0xD8, 0xB1, 0x44, 0xD9, 0x86, 0xD8, - 0xB2, 0x44, 0xD9, 0x86, 0xD9, 0x85, 0x44, 0xD9, - 0x86, 0xD9, 0x86, 0x44, 0xD9, 0x86, 0xD9, 0x87, - 0x44, 0xD9, 0x86, 0xD9, 0x89, 0x44, 0xD9, 0x86, - // Bytes 2000 - 203f - 0xD9, 0x8A, 0x44, 0xD9, 0x87, 0xD8, 0xAC, 0x44, - 0xD9, 0x87, 0xD9, 0x85, 0x44, 0xD9, 0x87, 0xD9, - 0x89, 0x44, 0xD9, 0x87, 0xD9, 0x8A, 0x44, 0xD9, - 0x88, 0xD9, 0xB4, 0x44, 0xD9, 0x8A, 0xD8, 0xAC, - 0x44, 0xD9, 0x8A, 0xD8, 0xAD, 0x44, 0xD9, 0x8A, - 0xD8, 0xAE, 0x44, 0xD9, 0x8A, 0xD8, 0xB1, 0x44, - 0xD9, 0x8A, 0xD8, 0xB2, 0x44, 0xD9, 0x8A, 0xD9, - 0x85, 0x44, 0xD9, 0x8A, 0xD9, 0x86, 0x44, 0xD9, - // Bytes 2040 - 207f - 0x8A, 0xD9, 0x87, 0x44, 0xD9, 0x8A, 0xD9, 0x89, - 0x44, 0xD9, 0x8A, 0xD9, 0x8A, 0x44, 0xD9, 0x8A, - 0xD9, 0xB4, 0x44, 0xDB, 0x87, 0xD9, 0xB4, 0x45, - 0x28, 0xE1, 0x84, 0x80, 0x29, 0x45, 0x28, 0xE1, - 0x84, 0x82, 0x29, 0x45, 0x28, 0xE1, 0x84, 0x83, - 0x29, 0x45, 0x28, 0xE1, 0x84, 0x85, 0x29, 0x45, - 0x28, 0xE1, 0x84, 0x86, 0x29, 0x45, 0x28, 0xE1, - 0x84, 0x87, 0x29, 0x45, 0x28, 0xE1, 0x84, 0x89, - // Bytes 2080 - 20bf - 0x29, 0x45, 0x28, 0xE1, 0x84, 0x8B, 0x29, 0x45, - 0x28, 0xE1, 0x84, 0x8C, 0x29, 0x45, 0x28, 0xE1, - 0x84, 0x8E, 0x29, 0x45, 0x28, 0xE1, 0x84, 0x8F, - 0x29, 0x45, 0x28, 0xE1, 0x84, 0x90, 0x29, 0x45, - 0x28, 0xE1, 0x84, 0x91, 0x29, 0x45, 0x28, 0xE1, - 0x84, 0x92, 0x29, 0x45, 0x28, 0xE4, 0xB8, 0x80, - 0x29, 0x45, 0x28, 0xE4, 0xB8, 0x83, 0x29, 0x45, - 0x28, 0xE4, 0xB8, 0x89, 0x29, 0x45, 0x28, 0xE4, - // Bytes 20c0 - 20ff - 0xB9, 0x9D, 0x29, 0x45, 0x28, 0xE4, 0xBA, 0x8C, - 0x29, 0x45, 0x28, 0xE4, 0xBA, 0x94, 0x29, 0x45, - 0x28, 0xE4, 0xBB, 0xA3, 0x29, 0x45, 0x28, 0xE4, - 0xBC, 0x81, 0x29, 0x45, 0x28, 0xE4, 0xBC, 0x91, - 0x29, 0x45, 0x28, 0xE5, 0x85, 0xAB, 0x29, 0x45, - 0x28, 0xE5, 0x85, 0xAD, 0x29, 0x45, 0x28, 0xE5, - 0x8A, 0xB4, 0x29, 0x45, 0x28, 0xE5, 0x8D, 0x81, - 0x29, 0x45, 0x28, 0xE5, 0x8D, 0x94, 0x29, 0x45, - // Bytes 2100 - 213f - 0x28, 0xE5, 0x90, 0x8D, 0x29, 0x45, 0x28, 0xE5, - 0x91, 0xBC, 0x29, 0x45, 0x28, 0xE5, 0x9B, 0x9B, - 0x29, 0x45, 0x28, 0xE5, 0x9C, 0x9F, 0x29, 0x45, - 0x28, 0xE5, 0xAD, 0xA6, 0x29, 0x45, 0x28, 0xE6, - 0x97, 0xA5, 0x29, 0x45, 0x28, 0xE6, 0x9C, 0x88, - 0x29, 0x45, 0x28, 0xE6, 0x9C, 0x89, 0x29, 0x45, - 0x28, 0xE6, 0x9C, 0xA8, 0x29, 0x45, 0x28, 0xE6, - 0xA0, 0xAA, 0x29, 0x45, 0x28, 0xE6, 0xB0, 0xB4, - // Bytes 2140 - 217f - 0x29, 0x45, 0x28, 0xE7, 0x81, 0xAB, 0x29, 0x45, - 0x28, 0xE7, 0x89, 0xB9, 0x29, 0x45, 0x28, 0xE7, - 0x9B, 0xA3, 0x29, 0x45, 0x28, 0xE7, 0xA4, 0xBE, - 0x29, 0x45, 0x28, 0xE7, 0xA5, 0x9D, 0x29, 0x45, - 0x28, 0xE7, 0xA5, 0xAD, 0x29, 0x45, 0x28, 0xE8, - 0x87, 0xAA, 0x29, 0x45, 0x28, 0xE8, 0x87, 0xB3, - 0x29, 0x45, 0x28, 0xE8, 0xB2, 0xA1, 0x29, 0x45, - 0x28, 0xE8, 0xB3, 0x87, 0x29, 0x45, 0x28, 0xE9, - // Bytes 2180 - 21bf - 0x87, 0x91, 0x29, 0x45, 0x30, 0xE2, 0x81, 0x84, - 0x33, 0x45, 0x31, 0x30, 0xE6, 0x97, 0xA5, 0x45, - 0x31, 0x30, 0xE6, 0x9C, 0x88, 0x45, 0x31, 0x30, - 0xE7, 0x82, 0xB9, 0x45, 0x31, 0x31, 0xE6, 0x97, - 0xA5, 0x45, 0x31, 0x31, 0xE6, 0x9C, 0x88, 0x45, - 0x31, 0x31, 0xE7, 0x82, 0xB9, 0x45, 0x31, 0x32, - 0xE6, 0x97, 0xA5, 0x45, 0x31, 0x32, 0xE6, 0x9C, - 0x88, 0x45, 0x31, 0x32, 0xE7, 0x82, 0xB9, 0x45, - // Bytes 21c0 - 21ff - 0x31, 0x33, 0xE6, 0x97, 0xA5, 0x45, 0x31, 0x33, - 0xE7, 0x82, 0xB9, 0x45, 0x31, 0x34, 0xE6, 0x97, - 0xA5, 0x45, 0x31, 0x34, 0xE7, 0x82, 0xB9, 0x45, - 0x31, 0x35, 0xE6, 0x97, 0xA5, 0x45, 0x31, 0x35, - 0xE7, 0x82, 0xB9, 0x45, 0x31, 0x36, 0xE6, 0x97, - 0xA5, 0x45, 0x31, 0x36, 0xE7, 0x82, 0xB9, 0x45, - 0x31, 0x37, 0xE6, 0x97, 0xA5, 0x45, 0x31, 0x37, - 0xE7, 0x82, 0xB9, 0x45, 0x31, 0x38, 0xE6, 0x97, - // Bytes 2200 - 223f - 0xA5, 0x45, 0x31, 0x38, 0xE7, 0x82, 0xB9, 0x45, - 0x31, 0x39, 0xE6, 0x97, 0xA5, 0x45, 0x31, 0x39, - 0xE7, 0x82, 0xB9, 0x45, 0x31, 0xE2, 0x81, 0x84, - 0x32, 0x45, 0x31, 0xE2, 0x81, 0x84, 0x33, 0x45, - 0x31, 0xE2, 0x81, 0x84, 0x34, 0x45, 0x31, 0xE2, - 0x81, 0x84, 0x35, 0x45, 0x31, 0xE2, 0x81, 0x84, - 0x36, 0x45, 0x31, 0xE2, 0x81, 0x84, 0x37, 0x45, - 0x31, 0xE2, 0x81, 0x84, 0x38, 0x45, 0x31, 0xE2, - // Bytes 2240 - 227f - 0x81, 0x84, 0x39, 0x45, 0x32, 0x30, 0xE6, 0x97, - 0xA5, 0x45, 0x32, 0x30, 0xE7, 0x82, 0xB9, 0x45, - 0x32, 0x31, 0xE6, 0x97, 0xA5, 0x45, 0x32, 0x31, - 0xE7, 0x82, 0xB9, 0x45, 0x32, 0x32, 0xE6, 0x97, - 0xA5, 0x45, 0x32, 0x32, 0xE7, 0x82, 0xB9, 0x45, - 0x32, 0x33, 0xE6, 0x97, 0xA5, 0x45, 0x32, 0x33, - 0xE7, 0x82, 0xB9, 0x45, 0x32, 0x34, 0xE6, 0x97, - 0xA5, 0x45, 0x32, 0x34, 0xE7, 0x82, 0xB9, 0x45, - // Bytes 2280 - 22bf - 0x32, 0x35, 0xE6, 0x97, 0xA5, 0x45, 0x32, 0x36, - 0xE6, 0x97, 0xA5, 0x45, 0x32, 0x37, 0xE6, 0x97, - 0xA5, 0x45, 0x32, 0x38, 0xE6, 0x97, 0xA5, 0x45, - 0x32, 0x39, 0xE6, 0x97, 0xA5, 0x45, 0x32, 0xE2, - 0x81, 0x84, 0x33, 0x45, 0x32, 0xE2, 0x81, 0x84, - 0x35, 0x45, 0x33, 0x30, 0xE6, 0x97, 0xA5, 0x45, - 0x33, 0x31, 0xE6, 0x97, 0xA5, 0x45, 0x33, 0xE2, - 0x81, 0x84, 0x34, 0x45, 0x33, 0xE2, 0x81, 0x84, - // Bytes 22c0 - 22ff - 0x35, 0x45, 0x33, 0xE2, 0x81, 0x84, 0x38, 0x45, - 0x34, 0xE2, 0x81, 0x84, 0x35, 0x45, 0x35, 0xE2, - 0x81, 0x84, 0x36, 0x45, 0x35, 0xE2, 0x81, 0x84, - 0x38, 0x45, 0x37, 0xE2, 0x81, 0x84, 0x38, 0x45, - 0x41, 0xE2, 0x88, 0x95, 0x6D, 0x45, 0x56, 0xE2, - 0x88, 0x95, 0x6D, 0x45, 0x6D, 0xE2, 0x88, 0x95, - 0x73, 0x46, 0x31, 0xE2, 0x81, 0x84, 0x31, 0x30, - 0x46, 0x43, 0xE2, 0x88, 0x95, 0x6B, 0x67, 0x46, - // Bytes 2300 - 233f - 0x6D, 0xE2, 0x88, 0x95, 0x73, 0x32, 0x46, 0xD8, - 0xA8, 0xD8, 0xAD, 0xD9, 0x8A, 0x46, 0xD8, 0xA8, - 0xD8, 0xAE, 0xD9, 0x8A, 0x46, 0xD8, 0xAA, 0xD8, - 0xAC, 0xD9, 0x85, 0x46, 0xD8, 0xAA, 0xD8, 0xAC, - 0xD9, 0x89, 0x46, 0xD8, 0xAA, 0xD8, 0xAC, 0xD9, - 0x8A, 0x46, 0xD8, 0xAA, 0xD8, 0xAD, 0xD8, 0xAC, - 0x46, 0xD8, 0xAA, 0xD8, 0xAD, 0xD9, 0x85, 0x46, - 0xD8, 0xAA, 0xD8, 0xAE, 0xD9, 0x85, 0x46, 0xD8, - // Bytes 2340 - 237f - 0xAA, 0xD8, 0xAE, 0xD9, 0x89, 0x46, 0xD8, 0xAA, - 0xD8, 0xAE, 0xD9, 0x8A, 0x46, 0xD8, 0xAA, 0xD9, - 0x85, 0xD8, 0xAC, 0x46, 0xD8, 0xAA, 0xD9, 0x85, - 0xD8, 0xAD, 0x46, 0xD8, 0xAA, 0xD9, 0x85, 0xD8, - 0xAE, 0x46, 0xD8, 0xAA, 0xD9, 0x85, 0xD9, 0x89, - 0x46, 0xD8, 0xAA, 0xD9, 0x85, 0xD9, 0x8A, 0x46, - 0xD8, 0xAC, 0xD8, 0xAD, 0xD9, 0x89, 0x46, 0xD8, - 0xAC, 0xD8, 0xAD, 0xD9, 0x8A, 0x46, 0xD8, 0xAC, - // Bytes 2380 - 23bf - 0xD9, 0x85, 0xD8, 0xAD, 0x46, 0xD8, 0xAC, 0xD9, - 0x85, 0xD9, 0x89, 0x46, 0xD8, 0xAC, 0xD9, 0x85, - 0xD9, 0x8A, 0x46, 0xD8, 0xAD, 0xD8, 0xAC, 0xD9, - 0x8A, 0x46, 0xD8, 0xAD, 0xD9, 0x85, 0xD9, 0x89, - 0x46, 0xD8, 0xAD, 0xD9, 0x85, 0xD9, 0x8A, 0x46, - 0xD8, 0xB3, 0xD8, 0xAC, 0xD8, 0xAD, 0x46, 0xD8, - 0xB3, 0xD8, 0xAC, 0xD9, 0x89, 0x46, 0xD8, 0xB3, - 0xD8, 0xAD, 0xD8, 0xAC, 0x46, 0xD8, 0xB3, 0xD8, - // Bytes 23c0 - 23ff - 0xAE, 0xD9, 0x89, 0x46, 0xD8, 0xB3, 0xD8, 0xAE, - 0xD9, 0x8A, 0x46, 0xD8, 0xB3, 0xD9, 0x85, 0xD8, - 0xAC, 0x46, 0xD8, 0xB3, 0xD9, 0x85, 0xD8, 0xAD, - 0x46, 0xD8, 0xB3, 0xD9, 0x85, 0xD9, 0x85, 0x46, - 0xD8, 0xB4, 0xD8, 0xAC, 0xD9, 0x8A, 0x46, 0xD8, - 0xB4, 0xD8, 0xAD, 0xD9, 0x85, 0x46, 0xD8, 0xB4, - 0xD8, 0xAD, 0xD9, 0x8A, 0x46, 0xD8, 0xB4, 0xD9, - 0x85, 0xD8, 0xAE, 0x46, 0xD8, 0xB4, 0xD9, 0x85, - // Bytes 2400 - 243f - 0xD9, 0x85, 0x46, 0xD8, 0xB5, 0xD8, 0xAD, 0xD8, - 0xAD, 0x46, 0xD8, 0xB5, 0xD8, 0xAD, 0xD9, 0x8A, - 0x46, 0xD8, 0xB5, 0xD9, 0x84, 0xD9, 0x89, 0x46, - 0xD8, 0xB5, 0xD9, 0x84, 0xDB, 0x92, 0x46, 0xD8, - 0xB5, 0xD9, 0x85, 0xD9, 0x85, 0x46, 0xD8, 0xB6, - 0xD8, 0xAD, 0xD9, 0x89, 0x46, 0xD8, 0xB6, 0xD8, - 0xAD, 0xD9, 0x8A, 0x46, 0xD8, 0xB6, 0xD8, 0xAE, - 0xD9, 0x85, 0x46, 0xD8, 0xB7, 0xD9, 0x85, 0xD8, - // Bytes 2440 - 247f - 0xAD, 0x46, 0xD8, 0xB7, 0xD9, 0x85, 0xD9, 0x85, - 0x46, 0xD8, 0xB7, 0xD9, 0x85, 0xD9, 0x8A, 0x46, - 0xD8, 0xB9, 0xD8, 0xAC, 0xD9, 0x85, 0x46, 0xD8, - 0xB9, 0xD9, 0x85, 0xD9, 0x85, 0x46, 0xD8, 0xB9, - 0xD9, 0x85, 0xD9, 0x89, 0x46, 0xD8, 0xB9, 0xD9, - 0x85, 0xD9, 0x8A, 0x46, 0xD8, 0xBA, 0xD9, 0x85, - 0xD9, 0x85, 0x46, 0xD8, 0xBA, 0xD9, 0x85, 0xD9, - 0x89, 0x46, 0xD8, 0xBA, 0xD9, 0x85, 0xD9, 0x8A, - // Bytes 2480 - 24bf - 0x46, 0xD9, 0x81, 0xD8, 0xAE, 0xD9, 0x85, 0x46, - 0xD9, 0x81, 0xD9, 0x85, 0xD9, 0x8A, 0x46, 0xD9, - 0x82, 0xD9, 0x84, 0xDB, 0x92, 0x46, 0xD9, 0x82, - 0xD9, 0x85, 0xD8, 0xAD, 0x46, 0xD9, 0x82, 0xD9, - 0x85, 0xD9, 0x85, 0x46, 0xD9, 0x82, 0xD9, 0x85, - 0xD9, 0x8A, 0x46, 0xD9, 0x83, 0xD9, 0x85, 0xD9, - 0x85, 0x46, 0xD9, 0x83, 0xD9, 0x85, 0xD9, 0x8A, - 0x46, 0xD9, 0x84, 0xD8, 0xAC, 0xD8, 0xAC, 0x46, - // Bytes 24c0 - 24ff - 0xD9, 0x84, 0xD8, 0xAC, 0xD9, 0x85, 0x46, 0xD9, - 0x84, 0xD8, 0xAC, 0xD9, 0x8A, 0x46, 0xD9, 0x84, - 0xD8, 0xAD, 0xD9, 0x85, 0x46, 0xD9, 0x84, 0xD8, - 0xAD, 0xD9, 0x89, 0x46, 0xD9, 0x84, 0xD8, 0xAD, - 0xD9, 0x8A, 0x46, 0xD9, 0x84, 0xD8, 0xAE, 0xD9, - 0x85, 0x46, 0xD9, 0x84, 0xD9, 0x85, 0xD8, 0xAD, - 0x46, 0xD9, 0x84, 0xD9, 0x85, 0xD9, 0x8A, 0x46, - 0xD9, 0x85, 0xD8, 0xAC, 0xD8, 0xAD, 0x46, 0xD9, - // Bytes 2500 - 253f - 0x85, 0xD8, 0xAC, 0xD8, 0xAE, 0x46, 0xD9, 0x85, - 0xD8, 0xAC, 0xD9, 0x85, 0x46, 0xD9, 0x85, 0xD8, - 0xAC, 0xD9, 0x8A, 0x46, 0xD9, 0x85, 0xD8, 0xAD, - 0xD8, 0xAC, 0x46, 0xD9, 0x85, 0xD8, 0xAD, 0xD9, - 0x85, 0x46, 0xD9, 0x85, 0xD8, 0xAD, 0xD9, 0x8A, - 0x46, 0xD9, 0x85, 0xD8, 0xAE, 0xD8, 0xAC, 0x46, - 0xD9, 0x85, 0xD8, 0xAE, 0xD9, 0x85, 0x46, 0xD9, - 0x85, 0xD8, 0xAE, 0xD9, 0x8A, 0x46, 0xD9, 0x85, - // Bytes 2540 - 257f - 0xD9, 0x85, 0xD9, 0x8A, 0x46, 0xD9, 0x86, 0xD8, - 0xAC, 0xD8, 0xAD, 0x46, 0xD9, 0x86, 0xD8, 0xAC, - 0xD9, 0x85, 0x46, 0xD9, 0x86, 0xD8, 0xAC, 0xD9, - 0x89, 0x46, 0xD9, 0x86, 0xD8, 0xAC, 0xD9, 0x8A, - 0x46, 0xD9, 0x86, 0xD8, 0xAD, 0xD9, 0x85, 0x46, - 0xD9, 0x86, 0xD8, 0xAD, 0xD9, 0x89, 0x46, 0xD9, - 0x86, 0xD8, 0xAD, 0xD9, 0x8A, 0x46, 0xD9, 0x86, - 0xD9, 0x85, 0xD9, 0x89, 0x46, 0xD9, 0x86, 0xD9, - // Bytes 2580 - 25bf - 0x85, 0xD9, 0x8A, 0x46, 0xD9, 0x87, 0xD9, 0x85, - 0xD8, 0xAC, 0x46, 0xD9, 0x87, 0xD9, 0x85, 0xD9, - 0x85, 0x46, 0xD9, 0x8A, 0xD8, 0xAC, 0xD9, 0x8A, - 0x46, 0xD9, 0x8A, 0xD8, 0xAD, 0xD9, 0x8A, 0x46, - 0xD9, 0x8A, 0xD9, 0x85, 0xD9, 0x85, 0x46, 0xD9, - 0x8A, 0xD9, 0x85, 0xD9, 0x8A, 0x46, 0xD9, 0x8A, - 0xD9, 0x94, 0xD8, 0xA7, 0x46, 0xD9, 0x8A, 0xD9, - 0x94, 0xD8, 0xAC, 0x46, 0xD9, 0x8A, 0xD9, 0x94, - // Bytes 25c0 - 25ff - 0xD8, 0xAD, 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xD8, - 0xAE, 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xD8, 0xB1, - 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xD8, 0xB2, 0x46, - 0xD9, 0x8A, 0xD9, 0x94, 0xD9, 0x85, 0x46, 0xD9, - 0x8A, 0xD9, 0x94, 0xD9, 0x86, 0x46, 0xD9, 0x8A, - 0xD9, 0x94, 0xD9, 0x87, 0x46, 0xD9, 0x8A, 0xD9, - 0x94, 0xD9, 0x88, 0x46, 0xD9, 0x8A, 0xD9, 0x94, - 0xD9, 0x89, 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xD9, - // Bytes 2600 - 263f - 0x8A, 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xDB, 0x86, - 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xDB, 0x87, 0x46, - 0xD9, 0x8A, 0xD9, 0x94, 0xDB, 0x88, 0x46, 0xD9, - 0x8A, 0xD9, 0x94, 0xDB, 0x90, 0x46, 0xD9, 0x8A, - 0xD9, 0x94, 0xDB, 0x95, 0x46, 0xE0, 0xB9, 0x8D, - 0xE0, 0xB8, 0xB2, 0x46, 0xE0, 0xBA, 0xAB, 0xE0, - 0xBA, 0x99, 0x46, 0xE0, 0xBA, 0xAB, 0xE0, 0xBA, - 0xA1, 0x46, 0xE0, 0xBB, 0x8D, 0xE0, 0xBA, 0xB2, - // Bytes 2640 - 267f - 0x46, 0xE0, 0xBD, 0x80, 0xE0, 0xBE, 0xB5, 0x46, - 0xE0, 0xBD, 0x82, 0xE0, 0xBE, 0xB7, 0x46, 0xE0, - 0xBD, 0x8C, 0xE0, 0xBE, 0xB7, 0x46, 0xE0, 0xBD, - 0x91, 0xE0, 0xBE, 0xB7, 0x46, 0xE0, 0xBD, 0x96, - 0xE0, 0xBE, 0xB7, 0x46, 0xE0, 0xBD, 0x9B, 0xE0, - 0xBE, 0xB7, 0x46, 0xE0, 0xBE, 0x90, 0xE0, 0xBE, - 0xB5, 0x46, 0xE0, 0xBE, 0x92, 0xE0, 0xBE, 0xB7, - 0x46, 0xE0, 0xBE, 0x9C, 0xE0, 0xBE, 0xB7, 0x46, - // Bytes 2680 - 26bf - 0xE0, 0xBE, 0xA1, 0xE0, 0xBE, 0xB7, 0x46, 0xE0, - 0xBE, 0xA6, 0xE0, 0xBE, 0xB7, 0x46, 0xE0, 0xBE, - 0xAB, 0xE0, 0xBE, 0xB7, 0x46, 0xE2, 0x80, 0xB2, - 0xE2, 0x80, 0xB2, 0x46, 0xE2, 0x80, 0xB5, 0xE2, - 0x80, 0xB5, 0x46, 0xE2, 0x88, 0xAB, 0xE2, 0x88, - 0xAB, 0x46, 0xE2, 0x88, 0xAE, 0xE2, 0x88, 0xAE, - 0x46, 0xE3, 0x81, 0xBB, 0xE3, 0x81, 0x8B, 0x46, - 0xE3, 0x82, 0x88, 0xE3, 0x82, 0x8A, 0x46, 0xE3, - // Bytes 26c0 - 26ff - 0x82, 0xAD, 0xE3, 0x83, 0xAD, 0x46, 0xE3, 0x82, - 0xB3, 0xE3, 0x82, 0xB3, 0x46, 0xE3, 0x82, 0xB3, - 0xE3, 0x83, 0x88, 0x46, 0xE3, 0x83, 0x88, 0xE3, - 0x83, 0xB3, 0x46, 0xE3, 0x83, 0x8A, 0xE3, 0x83, - 0x8E, 0x46, 0xE3, 0x83, 0x9B, 0xE3, 0x83, 0xB3, - 0x46, 0xE3, 0x83, 0x9F, 0xE3, 0x83, 0xAA, 0x46, - 0xE3, 0x83, 0xAA, 0xE3, 0x83, 0xA9, 0x46, 0xE3, - 0x83, 0xAC, 0xE3, 0x83, 0xA0, 0x46, 0xE5, 0xA4, - // Bytes 2700 - 273f - 0xA7, 0xE6, 0xAD, 0xA3, 0x46, 0xE5, 0xB9, 0xB3, - 0xE6, 0x88, 0x90, 0x46, 0xE6, 0x98, 0x8E, 0xE6, - 0xB2, 0xBB, 0x46, 0xE6, 0x98, 0xAD, 0xE5, 0x92, - 0x8C, 0x47, 0x72, 0x61, 0x64, 0xE2, 0x88, 0x95, - 0x73, 0x47, 0xE3, 0x80, 0x94, 0x53, 0xE3, 0x80, - 0x95, 0x48, 0x28, 0xE1, 0x84, 0x80, 0xE1, 0x85, - 0xA1, 0x29, 0x48, 0x28, 0xE1, 0x84, 0x82, 0xE1, - 0x85, 0xA1, 0x29, 0x48, 0x28, 0xE1, 0x84, 0x83, - // Bytes 2740 - 277f - 0xE1, 0x85, 0xA1, 0x29, 0x48, 0x28, 0xE1, 0x84, - 0x85, 0xE1, 0x85, 0xA1, 0x29, 0x48, 0x28, 0xE1, - 0x84, 0x86, 0xE1, 0x85, 0xA1, 0x29, 0x48, 0x28, - 0xE1, 0x84, 0x87, 0xE1, 0x85, 0xA1, 0x29, 0x48, - 0x28, 0xE1, 0x84, 0x89, 0xE1, 0x85, 0xA1, 0x29, - 0x48, 0x28, 0xE1, 0x84, 0x8B, 0xE1, 0x85, 0xA1, - 0x29, 0x48, 0x28, 0xE1, 0x84, 0x8C, 0xE1, 0x85, - 0xA1, 0x29, 0x48, 0x28, 0xE1, 0x84, 0x8C, 0xE1, - // Bytes 2780 - 27bf - 0x85, 0xAE, 0x29, 0x48, 0x28, 0xE1, 0x84, 0x8E, - 0xE1, 0x85, 0xA1, 0x29, 0x48, 0x28, 0xE1, 0x84, - 0x8F, 0xE1, 0x85, 0xA1, 0x29, 0x48, 0x28, 0xE1, - 0x84, 0x90, 0xE1, 0x85, 0xA1, 0x29, 0x48, 0x28, - 0xE1, 0x84, 0x91, 0xE1, 0x85, 0xA1, 0x29, 0x48, - 0x28, 0xE1, 0x84, 0x92, 0xE1, 0x85, 0xA1, 0x29, - 0x48, 0x72, 0x61, 0x64, 0xE2, 0x88, 0x95, 0x73, - 0x32, 0x48, 0xD8, 0xA7, 0xD9, 0x83, 0xD8, 0xA8, - // Bytes 27c0 - 27ff - 0xD8, 0xB1, 0x48, 0xD8, 0xA7, 0xD9, 0x84, 0xD9, - 0x84, 0xD9, 0x87, 0x48, 0xD8, 0xB1, 0xD8, 0xB3, - 0xD9, 0x88, 0xD9, 0x84, 0x48, 0xD8, 0xB1, 0xDB, - 0x8C, 0xD8, 0xA7, 0xD9, 0x84, 0x48, 0xD8, 0xB5, - 0xD9, 0x84, 0xD8, 0xB9, 0xD9, 0x85, 0x48, 0xD8, - 0xB9, 0xD9, 0x84, 0xD9, 0x8A, 0xD9, 0x87, 0x48, - 0xD9, 0x85, 0xD8, 0xAD, 0xD9, 0x85, 0xD8, 0xAF, - 0x48, 0xD9, 0x88, 0xD8, 0xB3, 0xD9, 0x84, 0xD9, - // Bytes 2800 - 283f - 0x85, 0x49, 0xE2, 0x80, 0xB2, 0xE2, 0x80, 0xB2, - 0xE2, 0x80, 0xB2, 0x49, 0xE2, 0x80, 0xB5, 0xE2, - 0x80, 0xB5, 0xE2, 0x80, 0xB5, 0x49, 0xE2, 0x88, - 0xAB, 0xE2, 0x88, 0xAB, 0xE2, 0x88, 0xAB, 0x49, - 0xE2, 0x88, 0xAE, 0xE2, 0x88, 0xAE, 0xE2, 0x88, - 0xAE, 0x49, 0xE3, 0x80, 0x94, 0xE4, 0xB8, 0x89, - 0xE3, 0x80, 0x95, 0x49, 0xE3, 0x80, 0x94, 0xE4, - 0xBA, 0x8C, 0xE3, 0x80, 0x95, 0x49, 0xE3, 0x80, - // Bytes 2840 - 287f - 0x94, 0xE5, 0x8B, 0x9D, 0xE3, 0x80, 0x95, 0x49, - 0xE3, 0x80, 0x94, 0xE5, 0xAE, 0x89, 0xE3, 0x80, - 0x95, 0x49, 0xE3, 0x80, 0x94, 0xE6, 0x89, 0x93, - 0xE3, 0x80, 0x95, 0x49, 0xE3, 0x80, 0x94, 0xE6, - 0x95, 0x97, 0xE3, 0x80, 0x95, 0x49, 0xE3, 0x80, - 0x94, 0xE6, 0x9C, 0xAC, 0xE3, 0x80, 0x95, 0x49, - 0xE3, 0x80, 0x94, 0xE7, 0x82, 0xB9, 0xE3, 0x80, - 0x95, 0x49, 0xE3, 0x80, 0x94, 0xE7, 0x9B, 0x97, - // Bytes 2880 - 28bf - 0xE3, 0x80, 0x95, 0x49, 0xE3, 0x82, 0xA2, 0xE3, - 0x83, 0xBC, 0xE3, 0x83, 0xAB, 0x49, 0xE3, 0x82, - 0xA4, 0xE3, 0x83, 0xB3, 0xE3, 0x83, 0x81, 0x49, - 0xE3, 0x82, 0xA6, 0xE3, 0x82, 0xA9, 0xE3, 0x83, - 0xB3, 0x49, 0xE3, 0x82, 0xAA, 0xE3, 0x83, 0xB3, - 0xE3, 0x82, 0xB9, 0x49, 0xE3, 0x82, 0xAA, 0xE3, - 0x83, 0xBC, 0xE3, 0x83, 0xA0, 0x49, 0xE3, 0x82, - 0xAB, 0xE3, 0x82, 0xA4, 0xE3, 0x83, 0xAA, 0x49, - // Bytes 28c0 - 28ff - 0xE3, 0x82, 0xB1, 0xE3, 0x83, 0xBC, 0xE3, 0x82, - 0xB9, 0x49, 0xE3, 0x82, 0xB3, 0xE3, 0x83, 0xAB, - 0xE3, 0x83, 0x8A, 0x49, 0xE3, 0x82, 0xBB, 0xE3, - 0x83, 0xB3, 0xE3, 0x83, 0x81, 0x49, 0xE3, 0x82, - 0xBB, 0xE3, 0x83, 0xB3, 0xE3, 0x83, 0x88, 0x49, - 0xE3, 0x83, 0x86, 0xE3, 0x82, 0x99, 0xE3, 0x82, - 0xB7, 0x49, 0xE3, 0x83, 0x88, 0xE3, 0x82, 0x99, - 0xE3, 0x83, 0xAB, 0x49, 0xE3, 0x83, 0x8E, 0xE3, - // Bytes 2900 - 293f - 0x83, 0x83, 0xE3, 0x83, 0x88, 0x49, 0xE3, 0x83, - 0x8F, 0xE3, 0x82, 0xA4, 0xE3, 0x83, 0x84, 0x49, - 0xE3, 0x83, 0x92, 0xE3, 0x82, 0x99, 0xE3, 0x83, - 0xAB, 0x49, 0xE3, 0x83, 0x92, 0xE3, 0x82, 0x9A, - 0xE3, 0x82, 0xB3, 0x49, 0xE3, 0x83, 0x95, 0xE3, - 0x83, 0xA9, 0xE3, 0x83, 0xB3, 0x49, 0xE3, 0x83, - 0x98, 0xE3, 0x82, 0x9A, 0xE3, 0x82, 0xBD, 0x49, - 0xE3, 0x83, 0x98, 0xE3, 0x83, 0xAB, 0xE3, 0x83, - // Bytes 2940 - 297f - 0x84, 0x49, 0xE3, 0x83, 0x9B, 0xE3, 0x83, 0xBC, - 0xE3, 0x83, 0xAB, 0x49, 0xE3, 0x83, 0x9B, 0xE3, - 0x83, 0xBC, 0xE3, 0x83, 0xB3, 0x49, 0xE3, 0x83, - 0x9E, 0xE3, 0x82, 0xA4, 0xE3, 0x83, 0xAB, 0x49, - 0xE3, 0x83, 0x9E, 0xE3, 0x83, 0x83, 0xE3, 0x83, - 0x8F, 0x49, 0xE3, 0x83, 0x9E, 0xE3, 0x83, 0xAB, - 0xE3, 0x82, 0xAF, 0x49, 0xE3, 0x83, 0xA4, 0xE3, - 0x83, 0xBC, 0xE3, 0x83, 0xAB, 0x49, 0xE3, 0x83, - // Bytes 2980 - 29bf - 0xA6, 0xE3, 0x82, 0xA2, 0xE3, 0x83, 0xB3, 0x49, - 0xE3, 0x83, 0xAF, 0xE3, 0x83, 0x83, 0xE3, 0x83, - 0x88, 0x4C, 0xE2, 0x80, 0xB2, 0xE2, 0x80, 0xB2, - 0xE2, 0x80, 0xB2, 0xE2, 0x80, 0xB2, 0x4C, 0xE2, - 0x88, 0xAB, 0xE2, 0x88, 0xAB, 0xE2, 0x88, 0xAB, - 0xE2, 0x88, 0xAB, 0x4C, 0xE3, 0x82, 0xA2, 0xE3, - 0x83, 0xAB, 0xE3, 0x83, 0x95, 0xE3, 0x82, 0xA1, - 0x4C, 0xE3, 0x82, 0xA8, 0xE3, 0x83, 0xBC, 0xE3, - // Bytes 29c0 - 29ff - 0x82, 0xAB, 0xE3, 0x83, 0xBC, 0x4C, 0xE3, 0x82, - 0xAB, 0xE3, 0x82, 0x99, 0xE3, 0x83, 0xAD, 0xE3, - 0x83, 0xB3, 0x4C, 0xE3, 0x82, 0xAB, 0xE3, 0x82, - 0x99, 0xE3, 0x83, 0xB3, 0xE3, 0x83, 0x9E, 0x4C, - 0xE3, 0x82, 0xAB, 0xE3, 0x83, 0xA9, 0xE3, 0x83, - 0x83, 0xE3, 0x83, 0x88, 0x4C, 0xE3, 0x82, 0xAB, - 0xE3, 0x83, 0xAD, 0xE3, 0x83, 0xAA, 0xE3, 0x83, - 0xBC, 0x4C, 0xE3, 0x82, 0xAD, 0xE3, 0x82, 0x99, - // Bytes 2a00 - 2a3f - 0xE3, 0x83, 0x8B, 0xE3, 0x83, 0xBC, 0x4C, 0xE3, - 0x82, 0xAD, 0xE3, 0x83, 0xA5, 0xE3, 0x83, 0xAA, - 0xE3, 0x83, 0xBC, 0x4C, 0xE3, 0x82, 0xAF, 0xE3, - 0x82, 0x99, 0xE3, 0x83, 0xA9, 0xE3, 0x83, 0xA0, - 0x4C, 0xE3, 0x82, 0xAF, 0xE3, 0x83, 0xAD, 0xE3, - 0x83, 0xBC, 0xE3, 0x83, 0x8D, 0x4C, 0xE3, 0x82, - 0xB5, 0xE3, 0x82, 0xA4, 0xE3, 0x82, 0xAF, 0xE3, - 0x83, 0xAB, 0x4C, 0xE3, 0x82, 0xBF, 0xE3, 0x82, - // Bytes 2a40 - 2a7f - 0x99, 0xE3, 0x83, 0xBC, 0xE3, 0x82, 0xB9, 0x4C, - 0xE3, 0x83, 0x8F, 0xE3, 0x82, 0x9A, 0xE3, 0x83, - 0xBC, 0xE3, 0x83, 0x84, 0x4C, 0xE3, 0x83, 0x92, - 0xE3, 0x82, 0x9A, 0xE3, 0x82, 0xAF, 0xE3, 0x83, - 0xAB, 0x4C, 0xE3, 0x83, 0x95, 0xE3, 0x82, 0xA3, - 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0x88, 0x4C, 0xE3, - 0x83, 0x98, 0xE3, 0x82, 0x99, 0xE3, 0x83, 0xBC, - 0xE3, 0x82, 0xBF, 0x4C, 0xE3, 0x83, 0x98, 0xE3, - // Bytes 2a80 - 2abf - 0x82, 0x9A, 0xE3, 0x83, 0x8B, 0xE3, 0x83, 0x92, - 0x4C, 0xE3, 0x83, 0x98, 0xE3, 0x82, 0x9A, 0xE3, - 0x83, 0xB3, 0xE3, 0x82, 0xB9, 0x4C, 0xE3, 0x83, - 0x9B, 0xE3, 0x82, 0x99, 0xE3, 0x83, 0xAB, 0xE3, - 0x83, 0x88, 0x4C, 0xE3, 0x83, 0x9E, 0xE3, 0x82, - 0xA4, 0xE3, 0x82, 0xAF, 0xE3, 0x83, 0xAD, 0x4C, - 0xE3, 0x83, 0x9F, 0xE3, 0x82, 0xAF, 0xE3, 0x83, - 0xAD, 0xE3, 0x83, 0xB3, 0x4C, 0xE3, 0x83, 0xA1, - // Bytes 2ac0 - 2aff - 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0x88, 0xE3, 0x83, - 0xAB, 0x4C, 0xE3, 0x83, 0xAA, 0xE3, 0x83, 0x83, - 0xE3, 0x83, 0x88, 0xE3, 0x83, 0xAB, 0x4C, 0xE3, - 0x83, 0xAB, 0xE3, 0x83, 0x92, 0xE3, 0x82, 0x9A, - 0xE3, 0x83, 0xBC, 0x4C, 0xE6, 0xA0, 0xAA, 0xE5, - 0xBC, 0x8F, 0xE4, 0xBC, 0x9A, 0xE7, 0xA4, 0xBE, - 0x4E, 0x28, 0xE1, 0x84, 0x8B, 0xE1, 0x85, 0xA9, - 0xE1, 0x84, 0x92, 0xE1, 0x85, 0xAE, 0x29, 0x4F, - // Bytes 2b00 - 2b3f - 0xD8, 0xAC, 0xD9, 0x84, 0x20, 0xD8, 0xAC, 0xD9, - 0x84, 0xD8, 0xA7, 0xD9, 0x84, 0xD9, 0x87, 0x4F, - 0xE3, 0x82, 0xA2, 0xE3, 0x83, 0x8F, 0xE3, 0x82, - 0x9A, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0x88, 0x4F, - 0xE3, 0x82, 0xA2, 0xE3, 0x83, 0xB3, 0xE3, 0x83, - 0x98, 0xE3, 0x82, 0x9A, 0xE3, 0x82, 0xA2, 0x4F, - 0xE3, 0x82, 0xAD, 0xE3, 0x83, 0xAD, 0xE3, 0x83, - 0xAF, 0xE3, 0x83, 0x83, 0xE3, 0x83, 0x88, 0x4F, - // Bytes 2b40 - 2b7f - 0xE3, 0x82, 0xB5, 0xE3, 0x83, 0xB3, 0xE3, 0x83, - 0x81, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0xA0, 0x4F, - 0xE3, 0x83, 0x8F, 0xE3, 0x82, 0x99, 0xE3, 0x83, - 0xBC, 0xE3, 0x83, 0xAC, 0xE3, 0x83, 0xAB, 0x4F, - 0xE3, 0x83, 0x98, 0xE3, 0x82, 0xAF, 0xE3, 0x82, - 0xBF, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0xAB, 0x4F, - 0xE3, 0x83, 0x9B, 0xE3, 0x82, 0x9A, 0xE3, 0x82, - 0xA4, 0xE3, 0x83, 0xB3, 0xE3, 0x83, 0x88, 0x4F, - // Bytes 2b80 - 2bbf - 0xE3, 0x83, 0x9E, 0xE3, 0x83, 0xB3, 0xE3, 0x82, - 0xB7, 0xE3, 0x83, 0xA7, 0xE3, 0x83, 0xB3, 0x4F, - 0xE3, 0x83, 0xA1, 0xE3, 0x82, 0xAB, 0xE3, 0x82, - 0x99, 0xE3, 0x83, 0x88, 0xE3, 0x83, 0xB3, 0x4F, - 0xE3, 0x83, 0xAB, 0xE3, 0x83, 0xBC, 0xE3, 0x83, - 0x95, 0xE3, 0x82, 0x99, 0xE3, 0x83, 0xAB, 0x51, - 0x28, 0xE1, 0x84, 0x8B, 0xE1, 0x85, 0xA9, 0xE1, - 0x84, 0x8C, 0xE1, 0x85, 0xA5, 0xE1, 0x86, 0xAB, - // Bytes 2bc0 - 2bff - 0x29, 0x52, 0xE3, 0x82, 0xAD, 0xE3, 0x82, 0x99, - 0xE3, 0x83, 0xAB, 0xE3, 0x82, 0xBF, 0xE3, 0x82, - 0x99, 0xE3, 0x83, 0xBC, 0x52, 0xE3, 0x82, 0xAD, - 0xE3, 0x83, 0xAD, 0xE3, 0x82, 0xAF, 0xE3, 0x82, - 0x99, 0xE3, 0x83, 0xA9, 0xE3, 0x83, 0xA0, 0x52, - 0xE3, 0x82, 0xAD, 0xE3, 0x83, 0xAD, 0xE3, 0x83, - 0xA1, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0x88, 0xE3, - 0x83, 0xAB, 0x52, 0xE3, 0x82, 0xAF, 0xE3, 0x82, - // Bytes 2c00 - 2c3f - 0x99, 0xE3, 0x83, 0xA9, 0xE3, 0x83, 0xA0, 0xE3, - 0x83, 0x88, 0xE3, 0x83, 0xB3, 0x52, 0xE3, 0x82, - 0xAF, 0xE3, 0x83, 0xAB, 0xE3, 0x82, 0xBB, 0xE3, - 0x82, 0x99, 0xE3, 0x82, 0xA4, 0xE3, 0x83, 0xAD, - 0x52, 0xE3, 0x83, 0x8F, 0xE3, 0x82, 0x9A, 0xE3, - 0x83, 0xBC, 0xE3, 0x82, 0xBB, 0xE3, 0x83, 0xB3, - 0xE3, 0x83, 0x88, 0x52, 0xE3, 0x83, 0x92, 0xE3, - 0x82, 0x9A, 0xE3, 0x82, 0xA2, 0xE3, 0x82, 0xB9, - // Bytes 2c40 - 2c7f - 0xE3, 0x83, 0x88, 0xE3, 0x83, 0xAB, 0x52, 0xE3, - 0x83, 0x95, 0xE3, 0x82, 0x99, 0xE3, 0x83, 0x83, - 0xE3, 0x82, 0xB7, 0xE3, 0x82, 0xA7, 0xE3, 0x83, - 0xAB, 0x52, 0xE3, 0x83, 0x9F, 0xE3, 0x83, 0xAA, - 0xE3, 0x83, 0x8F, 0xE3, 0x82, 0x99, 0xE3, 0x83, - 0xBC, 0xE3, 0x83, 0xAB, 0x52, 0xE3, 0x83, 0xAC, - 0xE3, 0x83, 0xB3, 0xE3, 0x83, 0x88, 0xE3, 0x82, - 0xB1, 0xE3, 0x82, 0x99, 0xE3, 0x83, 0xB3, 0x61, - // Bytes 2c80 - 2cbf - 0xD8, 0xB5, 0xD9, 0x84, 0xD9, 0x89, 0x20, 0xD8, - 0xA7, 0xD9, 0x84, 0xD9, 0x84, 0xD9, 0x87, 0x20, - 0xD8, 0xB9, 0xD9, 0x84, 0xD9, 0x8A, 0xD9, 0x87, - 0x20, 0xD9, 0x88, 0xD8, 0xB3, 0xD9, 0x84, 0xD9, - 0x85, 0x06, 0xE0, 0xA7, 0x87, 0xE0, 0xA6, 0xBE, - 0x01, 0x06, 0xE0, 0xA7, 0x87, 0xE0, 0xA7, 0x97, - 0x01, 0x06, 0xE0, 0xAD, 0x87, 0xE0, 0xAC, 0xBE, - 0x01, 0x06, 0xE0, 0xAD, 0x87, 0xE0, 0xAD, 0x96, - // Bytes 2cc0 - 2cff - 0x01, 0x06, 0xE0, 0xAD, 0x87, 0xE0, 0xAD, 0x97, - 0x01, 0x06, 0xE0, 0xAE, 0x92, 0xE0, 0xAF, 0x97, - 0x01, 0x06, 0xE0, 0xAF, 0x86, 0xE0, 0xAE, 0xBE, - 0x01, 0x06, 0xE0, 0xAF, 0x86, 0xE0, 0xAF, 0x97, - 0x01, 0x06, 0xE0, 0xAF, 0x87, 0xE0, 0xAE, 0xBE, - 0x01, 0x06, 0xE0, 0xB2, 0xBF, 0xE0, 0xB3, 0x95, - 0x01, 0x06, 0xE0, 0xB3, 0x86, 0xE0, 0xB3, 0x95, - 0x01, 0x06, 0xE0, 0xB3, 0x86, 0xE0, 0xB3, 0x96, - // Bytes 2d00 - 2d3f - 0x01, 0x06, 0xE0, 0xB5, 0x86, 0xE0, 0xB4, 0xBE, - 0x01, 0x06, 0xE0, 0xB5, 0x86, 0xE0, 0xB5, 0x97, - 0x01, 0x06, 0xE0, 0xB5, 0x87, 0xE0, 0xB4, 0xBE, - 0x01, 0x06, 0xE0, 0xB7, 0x99, 0xE0, 0xB7, 0x9F, - 0x01, 0x06, 0xE1, 0x80, 0xA5, 0xE1, 0x80, 0xAE, - 0x01, 0x06, 0xE1, 0xAC, 0x85, 0xE1, 0xAC, 0xB5, - 0x01, 0x06, 0xE1, 0xAC, 0x87, 0xE1, 0xAC, 0xB5, - 0x01, 0x06, 0xE1, 0xAC, 0x89, 0xE1, 0xAC, 0xB5, - // Bytes 2d40 - 2d7f - 0x01, 0x06, 0xE1, 0xAC, 0x8B, 0xE1, 0xAC, 0xB5, - 0x01, 0x06, 0xE1, 0xAC, 0x8D, 0xE1, 0xAC, 0xB5, - 0x01, 0x06, 0xE1, 0xAC, 0x91, 0xE1, 0xAC, 0xB5, - 0x01, 0x06, 0xE1, 0xAC, 0xBA, 0xE1, 0xAC, 0xB5, - 0x01, 0x06, 0xE1, 0xAC, 0xBC, 0xE1, 0xAC, 0xB5, - 0x01, 0x06, 0xE1, 0xAC, 0xBE, 0xE1, 0xAC, 0xB5, - 0x01, 0x06, 0xE1, 0xAC, 0xBF, 0xE1, 0xAC, 0xB5, - 0x01, 0x06, 0xE1, 0xAD, 0x82, 0xE1, 0xAC, 0xB5, - // Bytes 2d80 - 2dbf - 0x01, 0x08, 0xF0, 0x91, 0x84, 0xB1, 0xF0, 0x91, - 0x84, 0xA7, 0x01, 0x08, 0xF0, 0x91, 0x84, 0xB2, - 0xF0, 0x91, 0x84, 0xA7, 0x01, 0x08, 0xF0, 0x91, - 0x8D, 0x87, 0xF0, 0x91, 0x8C, 0xBE, 0x01, 0x08, - 0xF0, 0x91, 0x8D, 0x87, 0xF0, 0x91, 0x8D, 0x97, - 0x01, 0x08, 0xF0, 0x91, 0x92, 0xB9, 0xF0, 0x91, - 0x92, 0xB0, 0x01, 0x08, 0xF0, 0x91, 0x92, 0xB9, - 0xF0, 0x91, 0x92, 0xBA, 0x01, 0x08, 0xF0, 0x91, - // Bytes 2dc0 - 2dff - 0x92, 0xB9, 0xF0, 0x91, 0x92, 0xBD, 0x01, 0x08, - 0xF0, 0x91, 0x96, 0xB8, 0xF0, 0x91, 0x96, 0xAF, - 0x01, 0x08, 0xF0, 0x91, 0x96, 0xB9, 0xF0, 0x91, - 0x96, 0xAF, 0x01, 0x09, 0xE0, 0xB3, 0x86, 0xE0, - 0xB3, 0x82, 0xE0, 0xB3, 0x95, 0x02, 0x09, 0xE0, - 0xB7, 0x99, 0xE0, 0xB7, 0x8F, 0xE0, 0xB7, 0x8A, - 0x12, 0x44, 0x44, 0x5A, 0xCC, 0x8C, 0xC9, 0x44, - 0x44, 0x7A, 0xCC, 0x8C, 0xC9, 0x44, 0x64, 0x7A, - // Bytes 2e00 - 2e3f - 0xCC, 0x8C, 0xC9, 0x46, 0xD9, 0x84, 0xD8, 0xA7, - 0xD9, 0x93, 0xC9, 0x46, 0xD9, 0x84, 0xD8, 0xA7, - 0xD9, 0x94, 0xC9, 0x46, 0xD9, 0x84, 0xD8, 0xA7, - 0xD9, 0x95, 0xB5, 0x46, 0xE1, 0x84, 0x80, 0xE1, - 0x85, 0xA1, 0x01, 0x46, 0xE1, 0x84, 0x82, 0xE1, - 0x85, 0xA1, 0x01, 0x46, 0xE1, 0x84, 0x83, 0xE1, - 0x85, 0xA1, 0x01, 0x46, 0xE1, 0x84, 0x85, 0xE1, - 0x85, 0xA1, 0x01, 0x46, 0xE1, 0x84, 0x86, 0xE1, - // Bytes 2e40 - 2e7f - 0x85, 0xA1, 0x01, 0x46, 0xE1, 0x84, 0x87, 0xE1, - 0x85, 0xA1, 0x01, 0x46, 0xE1, 0x84, 0x89, 0xE1, - 0x85, 0xA1, 0x01, 0x46, 0xE1, 0x84, 0x8B, 0xE1, - 0x85, 0xA1, 0x01, 0x46, 0xE1, 0x84, 0x8B, 0xE1, - 0x85, 0xAE, 0x01, 0x46, 0xE1, 0x84, 0x8C, 0xE1, - 0x85, 0xA1, 0x01, 0x46, 0xE1, 0x84, 0x8E, 0xE1, - 0x85, 0xA1, 0x01, 0x46, 0xE1, 0x84, 0x8F, 0xE1, - 0x85, 0xA1, 0x01, 0x46, 0xE1, 0x84, 0x90, 0xE1, - // Bytes 2e80 - 2ebf - 0x85, 0xA1, 0x01, 0x46, 0xE1, 0x84, 0x91, 0xE1, - 0x85, 0xA1, 0x01, 0x46, 0xE1, 0x84, 0x92, 0xE1, - 0x85, 0xA1, 0x01, 0x49, 0xE3, 0x83, 0xA1, 0xE3, - 0x82, 0xAB, 0xE3, 0x82, 0x99, 0x0D, 0x4C, 0xE1, - 0x84, 0x8C, 0xE1, 0x85, 0xAE, 0xE1, 0x84, 0x8B, - 0xE1, 0x85, 0xB4, 0x01, 0x4C, 0xE3, 0x82, 0xAD, - 0xE3, 0x82, 0x99, 0xE3, 0x82, 0xAB, 0xE3, 0x82, - 0x99, 0x0D, 0x4C, 0xE3, 0x82, 0xB3, 0xE3, 0x83, - // Bytes 2ec0 - 2eff - 0xBC, 0xE3, 0x83, 0x9B, 0xE3, 0x82, 0x9A, 0x0D, - 0x4C, 0xE3, 0x83, 0xA4, 0xE3, 0x83, 0xBC, 0xE3, - 0x83, 0x88, 0xE3, 0x82, 0x99, 0x0D, 0x4F, 0xE1, - 0x84, 0x8E, 0xE1, 0x85, 0xA1, 0xE1, 0x86, 0xB7, - 0xE1, 0x84, 0x80, 0xE1, 0x85, 0xA9, 0x01, 0x4F, - 0xE3, 0x82, 0xA4, 0xE3, 0x83, 0x8B, 0xE3, 0x83, - 0xB3, 0xE3, 0x82, 0xAF, 0xE3, 0x82, 0x99, 0x0D, - 0x4F, 0xE3, 0x82, 0xB7, 0xE3, 0x83, 0xAA, 0xE3, - // Bytes 2f00 - 2f3f - 0x83, 0xB3, 0xE3, 0x82, 0xAF, 0xE3, 0x82, 0x99, - 0x0D, 0x4F, 0xE3, 0x83, 0x98, 0xE3, 0x82, 0x9A, - 0xE3, 0x83, 0xBC, 0xE3, 0x82, 0xB7, 0xE3, 0x82, - 0x99, 0x0D, 0x4F, 0xE3, 0x83, 0x9B, 0xE3, 0x82, - 0x9A, 0xE3, 0x83, 0xB3, 0xE3, 0x83, 0x88, 0xE3, - 0x82, 0x99, 0x0D, 0x52, 0xE3, 0x82, 0xA8, 0xE3, - 0x82, 0xB9, 0xE3, 0x82, 0xAF, 0xE3, 0x83, 0xBC, - 0xE3, 0x83, 0x88, 0xE3, 0x82, 0x99, 0x0D, 0x52, - // Bytes 2f40 - 2f7f - 0xE3, 0x83, 0x95, 0xE3, 0x82, 0xA1, 0xE3, 0x83, - 0xA9, 0xE3, 0x83, 0x83, 0xE3, 0x83, 0x88, 0xE3, - 0x82, 0x99, 0x0D, 0x86, 0xE0, 0xB3, 0x86, 0xE0, - 0xB3, 0x82, 0x01, 0x86, 0xE0, 0xB7, 0x99, 0xE0, - 0xB7, 0x8F, 0x01, 0x03, 0x3C, 0xCC, 0xB8, 0x05, - 0x03, 0x3D, 0xCC, 0xB8, 0x05, 0x03, 0x3E, 0xCC, - 0xB8, 0x05, 0x03, 0x41, 0xCC, 0x80, 0xC9, 0x03, - 0x41, 0xCC, 0x81, 0xC9, 0x03, 0x41, 0xCC, 0x83, - // Bytes 2f80 - 2fbf - 0xC9, 0x03, 0x41, 0xCC, 0x84, 0xC9, 0x03, 0x41, - 0xCC, 0x89, 0xC9, 0x03, 0x41, 0xCC, 0x8C, 0xC9, - 0x03, 0x41, 0xCC, 0x8F, 0xC9, 0x03, 0x41, 0xCC, - 0x91, 0xC9, 0x03, 0x41, 0xCC, 0xA5, 0xB5, 0x03, - 0x41, 0xCC, 0xA8, 0xA5, 0x03, 0x42, 0xCC, 0x87, - 0xC9, 0x03, 0x42, 0xCC, 0xA3, 0xB5, 0x03, 0x42, - 0xCC, 0xB1, 0xB5, 0x03, 0x43, 0xCC, 0x81, 0xC9, - 0x03, 0x43, 0xCC, 0x82, 0xC9, 0x03, 0x43, 0xCC, - // Bytes 2fc0 - 2fff - 0x87, 0xC9, 0x03, 0x43, 0xCC, 0x8C, 0xC9, 0x03, - 0x44, 0xCC, 0x87, 0xC9, 0x03, 0x44, 0xCC, 0x8C, - 0xC9, 0x03, 0x44, 0xCC, 0xA3, 0xB5, 0x03, 0x44, - 0xCC, 0xA7, 0xA5, 0x03, 0x44, 0xCC, 0xAD, 0xB5, - 0x03, 0x44, 0xCC, 0xB1, 0xB5, 0x03, 0x45, 0xCC, - 0x80, 0xC9, 0x03, 0x45, 0xCC, 0x81, 0xC9, 0x03, - 0x45, 0xCC, 0x83, 0xC9, 0x03, 0x45, 0xCC, 0x86, - 0xC9, 0x03, 0x45, 0xCC, 0x87, 0xC9, 0x03, 0x45, - // Bytes 3000 - 303f - 0xCC, 0x88, 0xC9, 0x03, 0x45, 0xCC, 0x89, 0xC9, - 0x03, 0x45, 0xCC, 0x8C, 0xC9, 0x03, 0x45, 0xCC, - 0x8F, 0xC9, 0x03, 0x45, 0xCC, 0x91, 0xC9, 0x03, - 0x45, 0xCC, 0xA8, 0xA5, 0x03, 0x45, 0xCC, 0xAD, - 0xB5, 0x03, 0x45, 0xCC, 0xB0, 0xB5, 0x03, 0x46, - 0xCC, 0x87, 0xC9, 0x03, 0x47, 0xCC, 0x81, 0xC9, - 0x03, 0x47, 0xCC, 0x82, 0xC9, 0x03, 0x47, 0xCC, - 0x84, 0xC9, 0x03, 0x47, 0xCC, 0x86, 0xC9, 0x03, - // Bytes 3040 - 307f - 0x47, 0xCC, 0x87, 0xC9, 0x03, 0x47, 0xCC, 0x8C, - 0xC9, 0x03, 0x47, 0xCC, 0xA7, 0xA5, 0x03, 0x48, - 0xCC, 0x82, 0xC9, 0x03, 0x48, 0xCC, 0x87, 0xC9, - 0x03, 0x48, 0xCC, 0x88, 0xC9, 0x03, 0x48, 0xCC, - 0x8C, 0xC9, 0x03, 0x48, 0xCC, 0xA3, 0xB5, 0x03, - 0x48, 0xCC, 0xA7, 0xA5, 0x03, 0x48, 0xCC, 0xAE, - 0xB5, 0x03, 0x49, 0xCC, 0x80, 0xC9, 0x03, 0x49, - 0xCC, 0x81, 0xC9, 0x03, 0x49, 0xCC, 0x82, 0xC9, - // Bytes 3080 - 30bf - 0x03, 0x49, 0xCC, 0x83, 0xC9, 0x03, 0x49, 0xCC, - 0x84, 0xC9, 0x03, 0x49, 0xCC, 0x86, 0xC9, 0x03, - 0x49, 0xCC, 0x87, 0xC9, 0x03, 0x49, 0xCC, 0x89, - 0xC9, 0x03, 0x49, 0xCC, 0x8C, 0xC9, 0x03, 0x49, - 0xCC, 0x8F, 0xC9, 0x03, 0x49, 0xCC, 0x91, 0xC9, - 0x03, 0x49, 0xCC, 0xA3, 0xB5, 0x03, 0x49, 0xCC, - 0xA8, 0xA5, 0x03, 0x49, 0xCC, 0xB0, 0xB5, 0x03, - 0x4A, 0xCC, 0x82, 0xC9, 0x03, 0x4B, 0xCC, 0x81, - // Bytes 30c0 - 30ff - 0xC9, 0x03, 0x4B, 0xCC, 0x8C, 0xC9, 0x03, 0x4B, - 0xCC, 0xA3, 0xB5, 0x03, 0x4B, 0xCC, 0xA7, 0xA5, - 0x03, 0x4B, 0xCC, 0xB1, 0xB5, 0x03, 0x4C, 0xCC, - 0x81, 0xC9, 0x03, 0x4C, 0xCC, 0x8C, 0xC9, 0x03, - 0x4C, 0xCC, 0xA7, 0xA5, 0x03, 0x4C, 0xCC, 0xAD, - 0xB5, 0x03, 0x4C, 0xCC, 0xB1, 0xB5, 0x03, 0x4D, - 0xCC, 0x81, 0xC9, 0x03, 0x4D, 0xCC, 0x87, 0xC9, - 0x03, 0x4D, 0xCC, 0xA3, 0xB5, 0x03, 0x4E, 0xCC, - // Bytes 3100 - 313f - 0x80, 0xC9, 0x03, 0x4E, 0xCC, 0x81, 0xC9, 0x03, - 0x4E, 0xCC, 0x83, 0xC9, 0x03, 0x4E, 0xCC, 0x87, - 0xC9, 0x03, 0x4E, 0xCC, 0x8C, 0xC9, 0x03, 0x4E, - 0xCC, 0xA3, 0xB5, 0x03, 0x4E, 0xCC, 0xA7, 0xA5, - 0x03, 0x4E, 0xCC, 0xAD, 0xB5, 0x03, 0x4E, 0xCC, - 0xB1, 0xB5, 0x03, 0x4F, 0xCC, 0x80, 0xC9, 0x03, - 0x4F, 0xCC, 0x81, 0xC9, 0x03, 0x4F, 0xCC, 0x86, - 0xC9, 0x03, 0x4F, 0xCC, 0x89, 0xC9, 0x03, 0x4F, - // Bytes 3140 - 317f - 0xCC, 0x8B, 0xC9, 0x03, 0x4F, 0xCC, 0x8C, 0xC9, - 0x03, 0x4F, 0xCC, 0x8F, 0xC9, 0x03, 0x4F, 0xCC, - 0x91, 0xC9, 0x03, 0x50, 0xCC, 0x81, 0xC9, 0x03, - 0x50, 0xCC, 0x87, 0xC9, 0x03, 0x52, 0xCC, 0x81, - 0xC9, 0x03, 0x52, 0xCC, 0x87, 0xC9, 0x03, 0x52, - 0xCC, 0x8C, 0xC9, 0x03, 0x52, 0xCC, 0x8F, 0xC9, - 0x03, 0x52, 0xCC, 0x91, 0xC9, 0x03, 0x52, 0xCC, - 0xA7, 0xA5, 0x03, 0x52, 0xCC, 0xB1, 0xB5, 0x03, - // Bytes 3180 - 31bf - 0x53, 0xCC, 0x82, 0xC9, 0x03, 0x53, 0xCC, 0x87, - 0xC9, 0x03, 0x53, 0xCC, 0xA6, 0xB5, 0x03, 0x53, - 0xCC, 0xA7, 0xA5, 0x03, 0x54, 0xCC, 0x87, 0xC9, - 0x03, 0x54, 0xCC, 0x8C, 0xC9, 0x03, 0x54, 0xCC, - 0xA3, 0xB5, 0x03, 0x54, 0xCC, 0xA6, 0xB5, 0x03, - 0x54, 0xCC, 0xA7, 0xA5, 0x03, 0x54, 0xCC, 0xAD, - 0xB5, 0x03, 0x54, 0xCC, 0xB1, 0xB5, 0x03, 0x55, - 0xCC, 0x80, 0xC9, 0x03, 0x55, 0xCC, 0x81, 0xC9, - // Bytes 31c0 - 31ff - 0x03, 0x55, 0xCC, 0x82, 0xC9, 0x03, 0x55, 0xCC, - 0x86, 0xC9, 0x03, 0x55, 0xCC, 0x89, 0xC9, 0x03, - 0x55, 0xCC, 0x8A, 0xC9, 0x03, 0x55, 0xCC, 0x8B, - 0xC9, 0x03, 0x55, 0xCC, 0x8C, 0xC9, 0x03, 0x55, - 0xCC, 0x8F, 0xC9, 0x03, 0x55, 0xCC, 0x91, 0xC9, - 0x03, 0x55, 0xCC, 0xA3, 0xB5, 0x03, 0x55, 0xCC, - 0xA4, 0xB5, 0x03, 0x55, 0xCC, 0xA8, 0xA5, 0x03, - 0x55, 0xCC, 0xAD, 0xB5, 0x03, 0x55, 0xCC, 0xB0, - // Bytes 3200 - 323f - 0xB5, 0x03, 0x56, 0xCC, 0x83, 0xC9, 0x03, 0x56, - 0xCC, 0xA3, 0xB5, 0x03, 0x57, 0xCC, 0x80, 0xC9, - 0x03, 0x57, 0xCC, 0x81, 0xC9, 0x03, 0x57, 0xCC, - 0x82, 0xC9, 0x03, 0x57, 0xCC, 0x87, 0xC9, 0x03, - 0x57, 0xCC, 0x88, 0xC9, 0x03, 0x57, 0xCC, 0xA3, - 0xB5, 0x03, 0x58, 0xCC, 0x87, 0xC9, 0x03, 0x58, - 0xCC, 0x88, 0xC9, 0x03, 0x59, 0xCC, 0x80, 0xC9, - 0x03, 0x59, 0xCC, 0x81, 0xC9, 0x03, 0x59, 0xCC, - // Bytes 3240 - 327f - 0x82, 0xC9, 0x03, 0x59, 0xCC, 0x83, 0xC9, 0x03, - 0x59, 0xCC, 0x84, 0xC9, 0x03, 0x59, 0xCC, 0x87, - 0xC9, 0x03, 0x59, 0xCC, 0x88, 0xC9, 0x03, 0x59, - 0xCC, 0x89, 0xC9, 0x03, 0x59, 0xCC, 0xA3, 0xB5, - 0x03, 0x5A, 0xCC, 0x81, 0xC9, 0x03, 0x5A, 0xCC, - 0x82, 0xC9, 0x03, 0x5A, 0xCC, 0x87, 0xC9, 0x03, - 0x5A, 0xCC, 0x8C, 0xC9, 0x03, 0x5A, 0xCC, 0xA3, - 0xB5, 0x03, 0x5A, 0xCC, 0xB1, 0xB5, 0x03, 0x61, - // Bytes 3280 - 32bf - 0xCC, 0x80, 0xC9, 0x03, 0x61, 0xCC, 0x81, 0xC9, - 0x03, 0x61, 0xCC, 0x83, 0xC9, 0x03, 0x61, 0xCC, - 0x84, 0xC9, 0x03, 0x61, 0xCC, 0x89, 0xC9, 0x03, - 0x61, 0xCC, 0x8C, 0xC9, 0x03, 0x61, 0xCC, 0x8F, - 0xC9, 0x03, 0x61, 0xCC, 0x91, 0xC9, 0x03, 0x61, - 0xCC, 0xA5, 0xB5, 0x03, 0x61, 0xCC, 0xA8, 0xA5, - 0x03, 0x62, 0xCC, 0x87, 0xC9, 0x03, 0x62, 0xCC, - 0xA3, 0xB5, 0x03, 0x62, 0xCC, 0xB1, 0xB5, 0x03, - // Bytes 32c0 - 32ff - 0x63, 0xCC, 0x81, 0xC9, 0x03, 0x63, 0xCC, 0x82, - 0xC9, 0x03, 0x63, 0xCC, 0x87, 0xC9, 0x03, 0x63, - 0xCC, 0x8C, 0xC9, 0x03, 0x64, 0xCC, 0x87, 0xC9, - 0x03, 0x64, 0xCC, 0x8C, 0xC9, 0x03, 0x64, 0xCC, - 0xA3, 0xB5, 0x03, 0x64, 0xCC, 0xA7, 0xA5, 0x03, - 0x64, 0xCC, 0xAD, 0xB5, 0x03, 0x64, 0xCC, 0xB1, - 0xB5, 0x03, 0x65, 0xCC, 0x80, 0xC9, 0x03, 0x65, - 0xCC, 0x81, 0xC9, 0x03, 0x65, 0xCC, 0x83, 0xC9, - // Bytes 3300 - 333f - 0x03, 0x65, 0xCC, 0x86, 0xC9, 0x03, 0x65, 0xCC, - 0x87, 0xC9, 0x03, 0x65, 0xCC, 0x88, 0xC9, 0x03, - 0x65, 0xCC, 0x89, 0xC9, 0x03, 0x65, 0xCC, 0x8C, - 0xC9, 0x03, 0x65, 0xCC, 0x8F, 0xC9, 0x03, 0x65, - 0xCC, 0x91, 0xC9, 0x03, 0x65, 0xCC, 0xA8, 0xA5, - 0x03, 0x65, 0xCC, 0xAD, 0xB5, 0x03, 0x65, 0xCC, - 0xB0, 0xB5, 0x03, 0x66, 0xCC, 0x87, 0xC9, 0x03, - 0x67, 0xCC, 0x81, 0xC9, 0x03, 0x67, 0xCC, 0x82, - // Bytes 3340 - 337f - 0xC9, 0x03, 0x67, 0xCC, 0x84, 0xC9, 0x03, 0x67, - 0xCC, 0x86, 0xC9, 0x03, 0x67, 0xCC, 0x87, 0xC9, - 0x03, 0x67, 0xCC, 0x8C, 0xC9, 0x03, 0x67, 0xCC, - 0xA7, 0xA5, 0x03, 0x68, 0xCC, 0x82, 0xC9, 0x03, - 0x68, 0xCC, 0x87, 0xC9, 0x03, 0x68, 0xCC, 0x88, - 0xC9, 0x03, 0x68, 0xCC, 0x8C, 0xC9, 0x03, 0x68, - 0xCC, 0xA3, 0xB5, 0x03, 0x68, 0xCC, 0xA7, 0xA5, - 0x03, 0x68, 0xCC, 0xAE, 0xB5, 0x03, 0x68, 0xCC, - // Bytes 3380 - 33bf - 0xB1, 0xB5, 0x03, 0x69, 0xCC, 0x80, 0xC9, 0x03, - 0x69, 0xCC, 0x81, 0xC9, 0x03, 0x69, 0xCC, 0x82, - 0xC9, 0x03, 0x69, 0xCC, 0x83, 0xC9, 0x03, 0x69, - 0xCC, 0x84, 0xC9, 0x03, 0x69, 0xCC, 0x86, 0xC9, - 0x03, 0x69, 0xCC, 0x89, 0xC9, 0x03, 0x69, 0xCC, - 0x8C, 0xC9, 0x03, 0x69, 0xCC, 0x8F, 0xC9, 0x03, - 0x69, 0xCC, 0x91, 0xC9, 0x03, 0x69, 0xCC, 0xA3, - 0xB5, 0x03, 0x69, 0xCC, 0xA8, 0xA5, 0x03, 0x69, - // Bytes 33c0 - 33ff - 0xCC, 0xB0, 0xB5, 0x03, 0x6A, 0xCC, 0x82, 0xC9, - 0x03, 0x6A, 0xCC, 0x8C, 0xC9, 0x03, 0x6B, 0xCC, - 0x81, 0xC9, 0x03, 0x6B, 0xCC, 0x8C, 0xC9, 0x03, - 0x6B, 0xCC, 0xA3, 0xB5, 0x03, 0x6B, 0xCC, 0xA7, - 0xA5, 0x03, 0x6B, 0xCC, 0xB1, 0xB5, 0x03, 0x6C, - 0xCC, 0x81, 0xC9, 0x03, 0x6C, 0xCC, 0x8C, 0xC9, - 0x03, 0x6C, 0xCC, 0xA7, 0xA5, 0x03, 0x6C, 0xCC, - 0xAD, 0xB5, 0x03, 0x6C, 0xCC, 0xB1, 0xB5, 0x03, - // Bytes 3400 - 343f - 0x6D, 0xCC, 0x81, 0xC9, 0x03, 0x6D, 0xCC, 0x87, - 0xC9, 0x03, 0x6D, 0xCC, 0xA3, 0xB5, 0x03, 0x6E, - 0xCC, 0x80, 0xC9, 0x03, 0x6E, 0xCC, 0x81, 0xC9, - 0x03, 0x6E, 0xCC, 0x83, 0xC9, 0x03, 0x6E, 0xCC, - 0x87, 0xC9, 0x03, 0x6E, 0xCC, 0x8C, 0xC9, 0x03, - 0x6E, 0xCC, 0xA3, 0xB5, 0x03, 0x6E, 0xCC, 0xA7, - 0xA5, 0x03, 0x6E, 0xCC, 0xAD, 0xB5, 0x03, 0x6E, - 0xCC, 0xB1, 0xB5, 0x03, 0x6F, 0xCC, 0x80, 0xC9, - // Bytes 3440 - 347f - 0x03, 0x6F, 0xCC, 0x81, 0xC9, 0x03, 0x6F, 0xCC, - 0x86, 0xC9, 0x03, 0x6F, 0xCC, 0x89, 0xC9, 0x03, - 0x6F, 0xCC, 0x8B, 0xC9, 0x03, 0x6F, 0xCC, 0x8C, - 0xC9, 0x03, 0x6F, 0xCC, 0x8F, 0xC9, 0x03, 0x6F, - 0xCC, 0x91, 0xC9, 0x03, 0x70, 0xCC, 0x81, 0xC9, - 0x03, 0x70, 0xCC, 0x87, 0xC9, 0x03, 0x72, 0xCC, - 0x81, 0xC9, 0x03, 0x72, 0xCC, 0x87, 0xC9, 0x03, - 0x72, 0xCC, 0x8C, 0xC9, 0x03, 0x72, 0xCC, 0x8F, - // Bytes 3480 - 34bf - 0xC9, 0x03, 0x72, 0xCC, 0x91, 0xC9, 0x03, 0x72, - 0xCC, 0xA7, 0xA5, 0x03, 0x72, 0xCC, 0xB1, 0xB5, - 0x03, 0x73, 0xCC, 0x82, 0xC9, 0x03, 0x73, 0xCC, - 0x87, 0xC9, 0x03, 0x73, 0xCC, 0xA6, 0xB5, 0x03, - 0x73, 0xCC, 0xA7, 0xA5, 0x03, 0x74, 0xCC, 0x87, - 0xC9, 0x03, 0x74, 0xCC, 0x88, 0xC9, 0x03, 0x74, - 0xCC, 0x8C, 0xC9, 0x03, 0x74, 0xCC, 0xA3, 0xB5, - 0x03, 0x74, 0xCC, 0xA6, 0xB5, 0x03, 0x74, 0xCC, - // Bytes 34c0 - 34ff - 0xA7, 0xA5, 0x03, 0x74, 0xCC, 0xAD, 0xB5, 0x03, - 0x74, 0xCC, 0xB1, 0xB5, 0x03, 0x75, 0xCC, 0x80, - 0xC9, 0x03, 0x75, 0xCC, 0x81, 0xC9, 0x03, 0x75, - 0xCC, 0x82, 0xC9, 0x03, 0x75, 0xCC, 0x86, 0xC9, - 0x03, 0x75, 0xCC, 0x89, 0xC9, 0x03, 0x75, 0xCC, - 0x8A, 0xC9, 0x03, 0x75, 0xCC, 0x8B, 0xC9, 0x03, - 0x75, 0xCC, 0x8C, 0xC9, 0x03, 0x75, 0xCC, 0x8F, - 0xC9, 0x03, 0x75, 0xCC, 0x91, 0xC9, 0x03, 0x75, - // Bytes 3500 - 353f - 0xCC, 0xA3, 0xB5, 0x03, 0x75, 0xCC, 0xA4, 0xB5, - 0x03, 0x75, 0xCC, 0xA8, 0xA5, 0x03, 0x75, 0xCC, - 0xAD, 0xB5, 0x03, 0x75, 0xCC, 0xB0, 0xB5, 0x03, - 0x76, 0xCC, 0x83, 0xC9, 0x03, 0x76, 0xCC, 0xA3, - 0xB5, 0x03, 0x77, 0xCC, 0x80, 0xC9, 0x03, 0x77, - 0xCC, 0x81, 0xC9, 0x03, 0x77, 0xCC, 0x82, 0xC9, - 0x03, 0x77, 0xCC, 0x87, 0xC9, 0x03, 0x77, 0xCC, - 0x88, 0xC9, 0x03, 0x77, 0xCC, 0x8A, 0xC9, 0x03, - // Bytes 3540 - 357f - 0x77, 0xCC, 0xA3, 0xB5, 0x03, 0x78, 0xCC, 0x87, - 0xC9, 0x03, 0x78, 0xCC, 0x88, 0xC9, 0x03, 0x79, - 0xCC, 0x80, 0xC9, 0x03, 0x79, 0xCC, 0x81, 0xC9, - 0x03, 0x79, 0xCC, 0x82, 0xC9, 0x03, 0x79, 0xCC, - 0x83, 0xC9, 0x03, 0x79, 0xCC, 0x84, 0xC9, 0x03, - 0x79, 0xCC, 0x87, 0xC9, 0x03, 0x79, 0xCC, 0x88, - 0xC9, 0x03, 0x79, 0xCC, 0x89, 0xC9, 0x03, 0x79, - 0xCC, 0x8A, 0xC9, 0x03, 0x79, 0xCC, 0xA3, 0xB5, - // Bytes 3580 - 35bf - 0x03, 0x7A, 0xCC, 0x81, 0xC9, 0x03, 0x7A, 0xCC, - 0x82, 0xC9, 0x03, 0x7A, 0xCC, 0x87, 0xC9, 0x03, - 0x7A, 0xCC, 0x8C, 0xC9, 0x03, 0x7A, 0xCC, 0xA3, - 0xB5, 0x03, 0x7A, 0xCC, 0xB1, 0xB5, 0x04, 0xC2, - 0xA8, 0xCC, 0x80, 0xCA, 0x04, 0xC2, 0xA8, 0xCC, - 0x81, 0xCA, 0x04, 0xC2, 0xA8, 0xCD, 0x82, 0xCA, - 0x04, 0xC3, 0x86, 0xCC, 0x81, 0xC9, 0x04, 0xC3, - 0x86, 0xCC, 0x84, 0xC9, 0x04, 0xC3, 0x98, 0xCC, - // Bytes 35c0 - 35ff - 0x81, 0xC9, 0x04, 0xC3, 0xA6, 0xCC, 0x81, 0xC9, - 0x04, 0xC3, 0xA6, 0xCC, 0x84, 0xC9, 0x04, 0xC3, - 0xB8, 0xCC, 0x81, 0xC9, 0x04, 0xC5, 0xBF, 0xCC, - 0x87, 0xC9, 0x04, 0xC6, 0xB7, 0xCC, 0x8C, 0xC9, - 0x04, 0xCA, 0x92, 0xCC, 0x8C, 0xC9, 0x04, 0xCE, - 0x91, 0xCC, 0x80, 0xC9, 0x04, 0xCE, 0x91, 0xCC, - 0x81, 0xC9, 0x04, 0xCE, 0x91, 0xCC, 0x84, 0xC9, - 0x04, 0xCE, 0x91, 0xCC, 0x86, 0xC9, 0x04, 0xCE, - // Bytes 3600 - 363f - 0x91, 0xCD, 0x85, 0xD9, 0x04, 0xCE, 0x95, 0xCC, - 0x80, 0xC9, 0x04, 0xCE, 0x95, 0xCC, 0x81, 0xC9, - 0x04, 0xCE, 0x97, 0xCC, 0x80, 0xC9, 0x04, 0xCE, - 0x97, 0xCC, 0x81, 0xC9, 0x04, 0xCE, 0x97, 0xCD, - 0x85, 0xD9, 0x04, 0xCE, 0x99, 0xCC, 0x80, 0xC9, - 0x04, 0xCE, 0x99, 0xCC, 0x81, 0xC9, 0x04, 0xCE, - 0x99, 0xCC, 0x84, 0xC9, 0x04, 0xCE, 0x99, 0xCC, - 0x86, 0xC9, 0x04, 0xCE, 0x99, 0xCC, 0x88, 0xC9, - // Bytes 3640 - 367f - 0x04, 0xCE, 0x9F, 0xCC, 0x80, 0xC9, 0x04, 0xCE, - 0x9F, 0xCC, 0x81, 0xC9, 0x04, 0xCE, 0xA1, 0xCC, - 0x94, 0xC9, 0x04, 0xCE, 0xA5, 0xCC, 0x80, 0xC9, - 0x04, 0xCE, 0xA5, 0xCC, 0x81, 0xC9, 0x04, 0xCE, - 0xA5, 0xCC, 0x84, 0xC9, 0x04, 0xCE, 0xA5, 0xCC, - 0x86, 0xC9, 0x04, 0xCE, 0xA5, 0xCC, 0x88, 0xC9, - 0x04, 0xCE, 0xA9, 0xCC, 0x80, 0xC9, 0x04, 0xCE, - 0xA9, 0xCC, 0x81, 0xC9, 0x04, 0xCE, 0xA9, 0xCD, - // Bytes 3680 - 36bf - 0x85, 0xD9, 0x04, 0xCE, 0xB1, 0xCC, 0x84, 0xC9, - 0x04, 0xCE, 0xB1, 0xCC, 0x86, 0xC9, 0x04, 0xCE, - 0xB1, 0xCD, 0x85, 0xD9, 0x04, 0xCE, 0xB5, 0xCC, - 0x80, 0xC9, 0x04, 0xCE, 0xB5, 0xCC, 0x81, 0xC9, - 0x04, 0xCE, 0xB7, 0xCD, 0x85, 0xD9, 0x04, 0xCE, - 0xB9, 0xCC, 0x80, 0xC9, 0x04, 0xCE, 0xB9, 0xCC, - 0x81, 0xC9, 0x04, 0xCE, 0xB9, 0xCC, 0x84, 0xC9, - 0x04, 0xCE, 0xB9, 0xCC, 0x86, 0xC9, 0x04, 0xCE, - // Bytes 36c0 - 36ff - 0xB9, 0xCD, 0x82, 0xC9, 0x04, 0xCE, 0xBF, 0xCC, - 0x80, 0xC9, 0x04, 0xCE, 0xBF, 0xCC, 0x81, 0xC9, - 0x04, 0xCF, 0x81, 0xCC, 0x93, 0xC9, 0x04, 0xCF, - 0x81, 0xCC, 0x94, 0xC9, 0x04, 0xCF, 0x85, 0xCC, - 0x80, 0xC9, 0x04, 0xCF, 0x85, 0xCC, 0x81, 0xC9, - 0x04, 0xCF, 0x85, 0xCC, 0x84, 0xC9, 0x04, 0xCF, - 0x85, 0xCC, 0x86, 0xC9, 0x04, 0xCF, 0x85, 0xCD, - 0x82, 0xC9, 0x04, 0xCF, 0x89, 0xCD, 0x85, 0xD9, - // Bytes 3700 - 373f - 0x04, 0xCF, 0x92, 0xCC, 0x81, 0xC9, 0x04, 0xCF, - 0x92, 0xCC, 0x88, 0xC9, 0x04, 0xD0, 0x86, 0xCC, - 0x88, 0xC9, 0x04, 0xD0, 0x90, 0xCC, 0x86, 0xC9, - 0x04, 0xD0, 0x90, 0xCC, 0x88, 0xC9, 0x04, 0xD0, - 0x93, 0xCC, 0x81, 0xC9, 0x04, 0xD0, 0x95, 0xCC, - 0x80, 0xC9, 0x04, 0xD0, 0x95, 0xCC, 0x86, 0xC9, - 0x04, 0xD0, 0x95, 0xCC, 0x88, 0xC9, 0x04, 0xD0, - 0x96, 0xCC, 0x86, 0xC9, 0x04, 0xD0, 0x96, 0xCC, - // Bytes 3740 - 377f - 0x88, 0xC9, 0x04, 0xD0, 0x97, 0xCC, 0x88, 0xC9, - 0x04, 0xD0, 0x98, 0xCC, 0x80, 0xC9, 0x04, 0xD0, - 0x98, 0xCC, 0x84, 0xC9, 0x04, 0xD0, 0x98, 0xCC, - 0x86, 0xC9, 0x04, 0xD0, 0x98, 0xCC, 0x88, 0xC9, - 0x04, 0xD0, 0x9A, 0xCC, 0x81, 0xC9, 0x04, 0xD0, - 0x9E, 0xCC, 0x88, 0xC9, 0x04, 0xD0, 0xA3, 0xCC, - 0x84, 0xC9, 0x04, 0xD0, 0xA3, 0xCC, 0x86, 0xC9, - 0x04, 0xD0, 0xA3, 0xCC, 0x88, 0xC9, 0x04, 0xD0, - // Bytes 3780 - 37bf - 0xA3, 0xCC, 0x8B, 0xC9, 0x04, 0xD0, 0xA7, 0xCC, - 0x88, 0xC9, 0x04, 0xD0, 0xAB, 0xCC, 0x88, 0xC9, - 0x04, 0xD0, 0xAD, 0xCC, 0x88, 0xC9, 0x04, 0xD0, - 0xB0, 0xCC, 0x86, 0xC9, 0x04, 0xD0, 0xB0, 0xCC, - 0x88, 0xC9, 0x04, 0xD0, 0xB3, 0xCC, 0x81, 0xC9, - 0x04, 0xD0, 0xB5, 0xCC, 0x80, 0xC9, 0x04, 0xD0, - 0xB5, 0xCC, 0x86, 0xC9, 0x04, 0xD0, 0xB5, 0xCC, - 0x88, 0xC9, 0x04, 0xD0, 0xB6, 0xCC, 0x86, 0xC9, - // Bytes 37c0 - 37ff - 0x04, 0xD0, 0xB6, 0xCC, 0x88, 0xC9, 0x04, 0xD0, - 0xB7, 0xCC, 0x88, 0xC9, 0x04, 0xD0, 0xB8, 0xCC, - 0x80, 0xC9, 0x04, 0xD0, 0xB8, 0xCC, 0x84, 0xC9, - 0x04, 0xD0, 0xB8, 0xCC, 0x86, 0xC9, 0x04, 0xD0, - 0xB8, 0xCC, 0x88, 0xC9, 0x04, 0xD0, 0xBA, 0xCC, - 0x81, 0xC9, 0x04, 0xD0, 0xBE, 0xCC, 0x88, 0xC9, - 0x04, 0xD1, 0x83, 0xCC, 0x84, 0xC9, 0x04, 0xD1, - 0x83, 0xCC, 0x86, 0xC9, 0x04, 0xD1, 0x83, 0xCC, - // Bytes 3800 - 383f - 0x88, 0xC9, 0x04, 0xD1, 0x83, 0xCC, 0x8B, 0xC9, - 0x04, 0xD1, 0x87, 0xCC, 0x88, 0xC9, 0x04, 0xD1, - 0x8B, 0xCC, 0x88, 0xC9, 0x04, 0xD1, 0x8D, 0xCC, - 0x88, 0xC9, 0x04, 0xD1, 0x96, 0xCC, 0x88, 0xC9, - 0x04, 0xD1, 0xB4, 0xCC, 0x8F, 0xC9, 0x04, 0xD1, - 0xB5, 0xCC, 0x8F, 0xC9, 0x04, 0xD3, 0x98, 0xCC, - 0x88, 0xC9, 0x04, 0xD3, 0x99, 0xCC, 0x88, 0xC9, - 0x04, 0xD3, 0xA8, 0xCC, 0x88, 0xC9, 0x04, 0xD3, - // Bytes 3840 - 387f - 0xA9, 0xCC, 0x88, 0xC9, 0x04, 0xD8, 0xA7, 0xD9, - 0x93, 0xC9, 0x04, 0xD8, 0xA7, 0xD9, 0x94, 0xC9, - 0x04, 0xD8, 0xA7, 0xD9, 0x95, 0xB5, 0x04, 0xD9, - 0x88, 0xD9, 0x94, 0xC9, 0x04, 0xD9, 0x8A, 0xD9, - 0x94, 0xC9, 0x04, 0xDB, 0x81, 0xD9, 0x94, 0xC9, - 0x04, 0xDB, 0x92, 0xD9, 0x94, 0xC9, 0x04, 0xDB, - 0x95, 0xD9, 0x94, 0xC9, 0x05, 0x41, 0xCC, 0x82, - 0xCC, 0x80, 0xCA, 0x05, 0x41, 0xCC, 0x82, 0xCC, - // Bytes 3880 - 38bf - 0x81, 0xCA, 0x05, 0x41, 0xCC, 0x82, 0xCC, 0x83, - 0xCA, 0x05, 0x41, 0xCC, 0x82, 0xCC, 0x89, 0xCA, - 0x05, 0x41, 0xCC, 0x86, 0xCC, 0x80, 0xCA, 0x05, - 0x41, 0xCC, 0x86, 0xCC, 0x81, 0xCA, 0x05, 0x41, - 0xCC, 0x86, 0xCC, 0x83, 0xCA, 0x05, 0x41, 0xCC, - 0x86, 0xCC, 0x89, 0xCA, 0x05, 0x41, 0xCC, 0x87, - 0xCC, 0x84, 0xCA, 0x05, 0x41, 0xCC, 0x88, 0xCC, - 0x84, 0xCA, 0x05, 0x41, 0xCC, 0x8A, 0xCC, 0x81, - // Bytes 38c0 - 38ff - 0xCA, 0x05, 0x41, 0xCC, 0xA3, 0xCC, 0x82, 0xCA, - 0x05, 0x41, 0xCC, 0xA3, 0xCC, 0x86, 0xCA, 0x05, - 0x43, 0xCC, 0xA7, 0xCC, 0x81, 0xCA, 0x05, 0x45, - 0xCC, 0x82, 0xCC, 0x80, 0xCA, 0x05, 0x45, 0xCC, - 0x82, 0xCC, 0x81, 0xCA, 0x05, 0x45, 0xCC, 0x82, - 0xCC, 0x83, 0xCA, 0x05, 0x45, 0xCC, 0x82, 0xCC, - 0x89, 0xCA, 0x05, 0x45, 0xCC, 0x84, 0xCC, 0x80, - 0xCA, 0x05, 0x45, 0xCC, 0x84, 0xCC, 0x81, 0xCA, - // Bytes 3900 - 393f - 0x05, 0x45, 0xCC, 0xA3, 0xCC, 0x82, 0xCA, 0x05, - 0x45, 0xCC, 0xA7, 0xCC, 0x86, 0xCA, 0x05, 0x49, - 0xCC, 0x88, 0xCC, 0x81, 0xCA, 0x05, 0x4C, 0xCC, - 0xA3, 0xCC, 0x84, 0xCA, 0x05, 0x4F, 0xCC, 0x82, - 0xCC, 0x80, 0xCA, 0x05, 0x4F, 0xCC, 0x82, 0xCC, - 0x81, 0xCA, 0x05, 0x4F, 0xCC, 0x82, 0xCC, 0x83, - 0xCA, 0x05, 0x4F, 0xCC, 0x82, 0xCC, 0x89, 0xCA, - 0x05, 0x4F, 0xCC, 0x83, 0xCC, 0x81, 0xCA, 0x05, - // Bytes 3940 - 397f - 0x4F, 0xCC, 0x83, 0xCC, 0x84, 0xCA, 0x05, 0x4F, - 0xCC, 0x83, 0xCC, 0x88, 0xCA, 0x05, 0x4F, 0xCC, - 0x84, 0xCC, 0x80, 0xCA, 0x05, 0x4F, 0xCC, 0x84, - 0xCC, 0x81, 0xCA, 0x05, 0x4F, 0xCC, 0x87, 0xCC, - 0x84, 0xCA, 0x05, 0x4F, 0xCC, 0x88, 0xCC, 0x84, - 0xCA, 0x05, 0x4F, 0xCC, 0x9B, 0xCC, 0x80, 0xCA, - 0x05, 0x4F, 0xCC, 0x9B, 0xCC, 0x81, 0xCA, 0x05, - 0x4F, 0xCC, 0x9B, 0xCC, 0x83, 0xCA, 0x05, 0x4F, - // Bytes 3980 - 39bf - 0xCC, 0x9B, 0xCC, 0x89, 0xCA, 0x05, 0x4F, 0xCC, - 0x9B, 0xCC, 0xA3, 0xB6, 0x05, 0x4F, 0xCC, 0xA3, - 0xCC, 0x82, 0xCA, 0x05, 0x4F, 0xCC, 0xA8, 0xCC, - 0x84, 0xCA, 0x05, 0x52, 0xCC, 0xA3, 0xCC, 0x84, - 0xCA, 0x05, 0x53, 0xCC, 0x81, 0xCC, 0x87, 0xCA, - 0x05, 0x53, 0xCC, 0x8C, 0xCC, 0x87, 0xCA, 0x05, - 0x53, 0xCC, 0xA3, 0xCC, 0x87, 0xCA, 0x05, 0x55, - 0xCC, 0x83, 0xCC, 0x81, 0xCA, 0x05, 0x55, 0xCC, - // Bytes 39c0 - 39ff - 0x84, 0xCC, 0x88, 0xCA, 0x05, 0x55, 0xCC, 0x88, - 0xCC, 0x80, 0xCA, 0x05, 0x55, 0xCC, 0x88, 0xCC, - 0x81, 0xCA, 0x05, 0x55, 0xCC, 0x88, 0xCC, 0x84, - 0xCA, 0x05, 0x55, 0xCC, 0x88, 0xCC, 0x8C, 0xCA, - 0x05, 0x55, 0xCC, 0x9B, 0xCC, 0x80, 0xCA, 0x05, - 0x55, 0xCC, 0x9B, 0xCC, 0x81, 0xCA, 0x05, 0x55, - 0xCC, 0x9B, 0xCC, 0x83, 0xCA, 0x05, 0x55, 0xCC, - 0x9B, 0xCC, 0x89, 0xCA, 0x05, 0x55, 0xCC, 0x9B, - // Bytes 3a00 - 3a3f - 0xCC, 0xA3, 0xB6, 0x05, 0x61, 0xCC, 0x82, 0xCC, - 0x80, 0xCA, 0x05, 0x61, 0xCC, 0x82, 0xCC, 0x81, - 0xCA, 0x05, 0x61, 0xCC, 0x82, 0xCC, 0x83, 0xCA, - 0x05, 0x61, 0xCC, 0x82, 0xCC, 0x89, 0xCA, 0x05, - 0x61, 0xCC, 0x86, 0xCC, 0x80, 0xCA, 0x05, 0x61, - 0xCC, 0x86, 0xCC, 0x81, 0xCA, 0x05, 0x61, 0xCC, - 0x86, 0xCC, 0x83, 0xCA, 0x05, 0x61, 0xCC, 0x86, - 0xCC, 0x89, 0xCA, 0x05, 0x61, 0xCC, 0x87, 0xCC, - // Bytes 3a40 - 3a7f - 0x84, 0xCA, 0x05, 0x61, 0xCC, 0x88, 0xCC, 0x84, - 0xCA, 0x05, 0x61, 0xCC, 0x8A, 0xCC, 0x81, 0xCA, - 0x05, 0x61, 0xCC, 0xA3, 0xCC, 0x82, 0xCA, 0x05, - 0x61, 0xCC, 0xA3, 0xCC, 0x86, 0xCA, 0x05, 0x63, - 0xCC, 0xA7, 0xCC, 0x81, 0xCA, 0x05, 0x65, 0xCC, - 0x82, 0xCC, 0x80, 0xCA, 0x05, 0x65, 0xCC, 0x82, - 0xCC, 0x81, 0xCA, 0x05, 0x65, 0xCC, 0x82, 0xCC, - 0x83, 0xCA, 0x05, 0x65, 0xCC, 0x82, 0xCC, 0x89, - // Bytes 3a80 - 3abf - 0xCA, 0x05, 0x65, 0xCC, 0x84, 0xCC, 0x80, 0xCA, - 0x05, 0x65, 0xCC, 0x84, 0xCC, 0x81, 0xCA, 0x05, - 0x65, 0xCC, 0xA3, 0xCC, 0x82, 0xCA, 0x05, 0x65, - 0xCC, 0xA7, 0xCC, 0x86, 0xCA, 0x05, 0x69, 0xCC, - 0x88, 0xCC, 0x81, 0xCA, 0x05, 0x6C, 0xCC, 0xA3, - 0xCC, 0x84, 0xCA, 0x05, 0x6F, 0xCC, 0x82, 0xCC, - 0x80, 0xCA, 0x05, 0x6F, 0xCC, 0x82, 0xCC, 0x81, - 0xCA, 0x05, 0x6F, 0xCC, 0x82, 0xCC, 0x83, 0xCA, - // Bytes 3ac0 - 3aff - 0x05, 0x6F, 0xCC, 0x82, 0xCC, 0x89, 0xCA, 0x05, - 0x6F, 0xCC, 0x83, 0xCC, 0x81, 0xCA, 0x05, 0x6F, - 0xCC, 0x83, 0xCC, 0x84, 0xCA, 0x05, 0x6F, 0xCC, - 0x83, 0xCC, 0x88, 0xCA, 0x05, 0x6F, 0xCC, 0x84, - 0xCC, 0x80, 0xCA, 0x05, 0x6F, 0xCC, 0x84, 0xCC, - 0x81, 0xCA, 0x05, 0x6F, 0xCC, 0x87, 0xCC, 0x84, - 0xCA, 0x05, 0x6F, 0xCC, 0x88, 0xCC, 0x84, 0xCA, - 0x05, 0x6F, 0xCC, 0x9B, 0xCC, 0x80, 0xCA, 0x05, - // Bytes 3b00 - 3b3f - 0x6F, 0xCC, 0x9B, 0xCC, 0x81, 0xCA, 0x05, 0x6F, - 0xCC, 0x9B, 0xCC, 0x83, 0xCA, 0x05, 0x6F, 0xCC, - 0x9B, 0xCC, 0x89, 0xCA, 0x05, 0x6F, 0xCC, 0x9B, - 0xCC, 0xA3, 0xB6, 0x05, 0x6F, 0xCC, 0xA3, 0xCC, - 0x82, 0xCA, 0x05, 0x6F, 0xCC, 0xA8, 0xCC, 0x84, - 0xCA, 0x05, 0x72, 0xCC, 0xA3, 0xCC, 0x84, 0xCA, - 0x05, 0x73, 0xCC, 0x81, 0xCC, 0x87, 0xCA, 0x05, - 0x73, 0xCC, 0x8C, 0xCC, 0x87, 0xCA, 0x05, 0x73, - // Bytes 3b40 - 3b7f - 0xCC, 0xA3, 0xCC, 0x87, 0xCA, 0x05, 0x75, 0xCC, - 0x83, 0xCC, 0x81, 0xCA, 0x05, 0x75, 0xCC, 0x84, - 0xCC, 0x88, 0xCA, 0x05, 0x75, 0xCC, 0x88, 0xCC, - 0x80, 0xCA, 0x05, 0x75, 0xCC, 0x88, 0xCC, 0x81, - 0xCA, 0x05, 0x75, 0xCC, 0x88, 0xCC, 0x84, 0xCA, - 0x05, 0x75, 0xCC, 0x88, 0xCC, 0x8C, 0xCA, 0x05, - 0x75, 0xCC, 0x9B, 0xCC, 0x80, 0xCA, 0x05, 0x75, - 0xCC, 0x9B, 0xCC, 0x81, 0xCA, 0x05, 0x75, 0xCC, - // Bytes 3b80 - 3bbf - 0x9B, 0xCC, 0x83, 0xCA, 0x05, 0x75, 0xCC, 0x9B, - 0xCC, 0x89, 0xCA, 0x05, 0x75, 0xCC, 0x9B, 0xCC, - 0xA3, 0xB6, 0x05, 0xE1, 0xBE, 0xBF, 0xCC, 0x80, - 0xCA, 0x05, 0xE1, 0xBE, 0xBF, 0xCC, 0x81, 0xCA, - 0x05, 0xE1, 0xBE, 0xBF, 0xCD, 0x82, 0xCA, 0x05, - 0xE1, 0xBF, 0xBE, 0xCC, 0x80, 0xCA, 0x05, 0xE1, - 0xBF, 0xBE, 0xCC, 0x81, 0xCA, 0x05, 0xE1, 0xBF, - 0xBE, 0xCD, 0x82, 0xCA, 0x05, 0xE2, 0x86, 0x90, - // Bytes 3bc0 - 3bff - 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x86, 0x92, 0xCC, - 0xB8, 0x05, 0x05, 0xE2, 0x86, 0x94, 0xCC, 0xB8, - 0x05, 0x05, 0xE2, 0x87, 0x90, 0xCC, 0xB8, 0x05, - 0x05, 0xE2, 0x87, 0x92, 0xCC, 0xB8, 0x05, 0x05, - 0xE2, 0x87, 0x94, 0xCC, 0xB8, 0x05, 0x05, 0xE2, - 0x88, 0x83, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x88, - 0x88, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x88, 0x8B, - 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x88, 0xA3, 0xCC, - // Bytes 3c00 - 3c3f - 0xB8, 0x05, 0x05, 0xE2, 0x88, 0xA5, 0xCC, 0xB8, - 0x05, 0x05, 0xE2, 0x88, 0xBC, 0xCC, 0xB8, 0x05, - 0x05, 0xE2, 0x89, 0x83, 0xCC, 0xB8, 0x05, 0x05, - 0xE2, 0x89, 0x85, 0xCC, 0xB8, 0x05, 0x05, 0xE2, - 0x89, 0x88, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89, - 0x8D, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89, 0xA1, - 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89, 0xA4, 0xCC, - 0xB8, 0x05, 0x05, 0xE2, 0x89, 0xA5, 0xCC, 0xB8, - // Bytes 3c40 - 3c7f - 0x05, 0x05, 0xE2, 0x89, 0xB2, 0xCC, 0xB8, 0x05, - 0x05, 0xE2, 0x89, 0xB3, 0xCC, 0xB8, 0x05, 0x05, - 0xE2, 0x89, 0xB6, 0xCC, 0xB8, 0x05, 0x05, 0xE2, - 0x89, 0xB7, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89, - 0xBA, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89, 0xBB, - 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89, 0xBC, 0xCC, - 0xB8, 0x05, 0x05, 0xE2, 0x89, 0xBD, 0xCC, 0xB8, - 0x05, 0x05, 0xE2, 0x8A, 0x82, 0xCC, 0xB8, 0x05, - // Bytes 3c80 - 3cbf - 0x05, 0xE2, 0x8A, 0x83, 0xCC, 0xB8, 0x05, 0x05, - 0xE2, 0x8A, 0x86, 0xCC, 0xB8, 0x05, 0x05, 0xE2, - 0x8A, 0x87, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A, - 0x91, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A, 0x92, - 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A, 0xA2, 0xCC, - 0xB8, 0x05, 0x05, 0xE2, 0x8A, 0xA8, 0xCC, 0xB8, - 0x05, 0x05, 0xE2, 0x8A, 0xA9, 0xCC, 0xB8, 0x05, - 0x05, 0xE2, 0x8A, 0xAB, 0xCC, 0xB8, 0x05, 0x05, - // Bytes 3cc0 - 3cff - 0xE2, 0x8A, 0xB2, 0xCC, 0xB8, 0x05, 0x05, 0xE2, - 0x8A, 0xB3, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A, - 0xB4, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A, 0xB5, - 0xCC, 0xB8, 0x05, 0x06, 0xCE, 0x91, 0xCC, 0x93, - 0xCD, 0x85, 0xDA, 0x06, 0xCE, 0x91, 0xCC, 0x94, - 0xCD, 0x85, 0xDA, 0x06, 0xCE, 0x95, 0xCC, 0x93, - 0xCC, 0x80, 0xCA, 0x06, 0xCE, 0x95, 0xCC, 0x93, - 0xCC, 0x81, 0xCA, 0x06, 0xCE, 0x95, 0xCC, 0x94, - // Bytes 3d00 - 3d3f - 0xCC, 0x80, 0xCA, 0x06, 0xCE, 0x95, 0xCC, 0x94, - 0xCC, 0x81, 0xCA, 0x06, 0xCE, 0x97, 0xCC, 0x93, - 0xCD, 0x85, 0xDA, 0x06, 0xCE, 0x97, 0xCC, 0x94, - 0xCD, 0x85, 0xDA, 0x06, 0xCE, 0x99, 0xCC, 0x93, - 0xCC, 0x80, 0xCA, 0x06, 0xCE, 0x99, 0xCC, 0x93, - 0xCC, 0x81, 0xCA, 0x06, 0xCE, 0x99, 0xCC, 0x93, - 0xCD, 0x82, 0xCA, 0x06, 0xCE, 0x99, 0xCC, 0x94, - 0xCC, 0x80, 0xCA, 0x06, 0xCE, 0x99, 0xCC, 0x94, - // Bytes 3d40 - 3d7f - 0xCC, 0x81, 0xCA, 0x06, 0xCE, 0x99, 0xCC, 0x94, - 0xCD, 0x82, 0xCA, 0x06, 0xCE, 0x9F, 0xCC, 0x93, - 0xCC, 0x80, 0xCA, 0x06, 0xCE, 0x9F, 0xCC, 0x93, - 0xCC, 0x81, 0xCA, 0x06, 0xCE, 0x9F, 0xCC, 0x94, - 0xCC, 0x80, 0xCA, 0x06, 0xCE, 0x9F, 0xCC, 0x94, - 0xCC, 0x81, 0xCA, 0x06, 0xCE, 0xA5, 0xCC, 0x94, - 0xCC, 0x80, 0xCA, 0x06, 0xCE, 0xA5, 0xCC, 0x94, - 0xCC, 0x81, 0xCA, 0x06, 0xCE, 0xA5, 0xCC, 0x94, - // Bytes 3d80 - 3dbf - 0xCD, 0x82, 0xCA, 0x06, 0xCE, 0xA9, 0xCC, 0x93, - 0xCD, 0x85, 0xDA, 0x06, 0xCE, 0xA9, 0xCC, 0x94, - 0xCD, 0x85, 0xDA, 0x06, 0xCE, 0xB1, 0xCC, 0x80, - 0xCD, 0x85, 0xDA, 0x06, 0xCE, 0xB1, 0xCC, 0x81, - 0xCD, 0x85, 0xDA, 0x06, 0xCE, 0xB1, 0xCC, 0x93, - 0xCD, 0x85, 0xDA, 0x06, 0xCE, 0xB1, 0xCC, 0x94, - 0xCD, 0x85, 0xDA, 0x06, 0xCE, 0xB1, 0xCD, 0x82, - 0xCD, 0x85, 0xDA, 0x06, 0xCE, 0xB5, 0xCC, 0x93, - // Bytes 3dc0 - 3dff - 0xCC, 0x80, 0xCA, 0x06, 0xCE, 0xB5, 0xCC, 0x93, - 0xCC, 0x81, 0xCA, 0x06, 0xCE, 0xB5, 0xCC, 0x94, - 0xCC, 0x80, 0xCA, 0x06, 0xCE, 0xB5, 0xCC, 0x94, - 0xCC, 0x81, 0xCA, 0x06, 0xCE, 0xB7, 0xCC, 0x80, - 0xCD, 0x85, 0xDA, 0x06, 0xCE, 0xB7, 0xCC, 0x81, - 0xCD, 0x85, 0xDA, 0x06, 0xCE, 0xB7, 0xCC, 0x93, - 0xCD, 0x85, 0xDA, 0x06, 0xCE, 0xB7, 0xCC, 0x94, - 0xCD, 0x85, 0xDA, 0x06, 0xCE, 0xB7, 0xCD, 0x82, - // Bytes 3e00 - 3e3f - 0xCD, 0x85, 0xDA, 0x06, 0xCE, 0xB9, 0xCC, 0x88, - 0xCC, 0x80, 0xCA, 0x06, 0xCE, 0xB9, 0xCC, 0x88, - 0xCC, 0x81, 0xCA, 0x06, 0xCE, 0xB9, 0xCC, 0x88, - 0xCD, 0x82, 0xCA, 0x06, 0xCE, 0xB9, 0xCC, 0x93, - 0xCC, 0x80, 0xCA, 0x06, 0xCE, 0xB9, 0xCC, 0x93, - 0xCC, 0x81, 0xCA, 0x06, 0xCE, 0xB9, 0xCC, 0x93, - 0xCD, 0x82, 0xCA, 0x06, 0xCE, 0xB9, 0xCC, 0x94, - 0xCC, 0x80, 0xCA, 0x06, 0xCE, 0xB9, 0xCC, 0x94, - // Bytes 3e40 - 3e7f - 0xCC, 0x81, 0xCA, 0x06, 0xCE, 0xB9, 0xCC, 0x94, - 0xCD, 0x82, 0xCA, 0x06, 0xCE, 0xBF, 0xCC, 0x93, - 0xCC, 0x80, 0xCA, 0x06, 0xCE, 0xBF, 0xCC, 0x93, - 0xCC, 0x81, 0xCA, 0x06, 0xCE, 0xBF, 0xCC, 0x94, - 0xCC, 0x80, 0xCA, 0x06, 0xCE, 0xBF, 0xCC, 0x94, - 0xCC, 0x81, 0xCA, 0x06, 0xCF, 0x85, 0xCC, 0x88, - 0xCC, 0x80, 0xCA, 0x06, 0xCF, 0x85, 0xCC, 0x88, - 0xCC, 0x81, 0xCA, 0x06, 0xCF, 0x85, 0xCC, 0x88, - // Bytes 3e80 - 3ebf - 0xCD, 0x82, 0xCA, 0x06, 0xCF, 0x85, 0xCC, 0x93, - 0xCC, 0x80, 0xCA, 0x06, 0xCF, 0x85, 0xCC, 0x93, - 0xCC, 0x81, 0xCA, 0x06, 0xCF, 0x85, 0xCC, 0x93, - 0xCD, 0x82, 0xCA, 0x06, 0xCF, 0x85, 0xCC, 0x94, - 0xCC, 0x80, 0xCA, 0x06, 0xCF, 0x85, 0xCC, 0x94, - 0xCC, 0x81, 0xCA, 0x06, 0xCF, 0x85, 0xCC, 0x94, - 0xCD, 0x82, 0xCA, 0x06, 0xCF, 0x89, 0xCC, 0x80, - 0xCD, 0x85, 0xDA, 0x06, 0xCF, 0x89, 0xCC, 0x81, - // Bytes 3ec0 - 3eff - 0xCD, 0x85, 0xDA, 0x06, 0xCF, 0x89, 0xCC, 0x93, - 0xCD, 0x85, 0xDA, 0x06, 0xCF, 0x89, 0xCC, 0x94, - 0xCD, 0x85, 0xDA, 0x06, 0xCF, 0x89, 0xCD, 0x82, - 0xCD, 0x85, 0xDA, 0x06, 0xE0, 0xA4, 0xA8, 0xE0, - 0xA4, 0xBC, 0x09, 0x06, 0xE0, 0xA4, 0xB0, 0xE0, - 0xA4, 0xBC, 0x09, 0x06, 0xE0, 0xA4, 0xB3, 0xE0, - 0xA4, 0xBC, 0x09, 0x06, 0xE0, 0xB1, 0x86, 0xE0, - 0xB1, 0x96, 0x85, 0x06, 0xE0, 0xB7, 0x99, 0xE0, - // Bytes 3f00 - 3f3f - 0xB7, 0x8A, 0x11, 0x06, 0xE3, 0x81, 0x86, 0xE3, - 0x82, 0x99, 0x0D, 0x06, 0xE3, 0x81, 0x8B, 0xE3, - 0x82, 0x99, 0x0D, 0x06, 0xE3, 0x81, 0x8D, 0xE3, - 0x82, 0x99, 0x0D, 0x06, 0xE3, 0x81, 0x8F, 0xE3, - 0x82, 0x99, 0x0D, 0x06, 0xE3, 0x81, 0x91, 0xE3, - 0x82, 0x99, 0x0D, 0x06, 0xE3, 0x81, 0x93, 0xE3, - 0x82, 0x99, 0x0D, 0x06, 0xE3, 0x81, 0x95, 0xE3, - 0x82, 0x99, 0x0D, 0x06, 0xE3, 0x81, 0x97, 0xE3, - // Bytes 3f40 - 3f7f - 0x82, 0x99, 0x0D, 0x06, 0xE3, 0x81, 0x99, 0xE3, - 0x82, 0x99, 0x0D, 0x06, 0xE3, 0x81, 0x9B, 0xE3, - 0x82, 0x99, 0x0D, 0x06, 0xE3, 0x81, 0x9D, 0xE3, - 0x82, 0x99, 0x0D, 0x06, 0xE3, 0x81, 0x9F, 0xE3, - 0x82, 0x99, 0x0D, 0x06, 0xE3, 0x81, 0xA1, 0xE3, - 0x82, 0x99, 0x0D, 0x06, 0xE3, 0x81, 0xA4, 0xE3, - 0x82, 0x99, 0x0D, 0x06, 0xE3, 0x81, 0xA6, 0xE3, - 0x82, 0x99, 0x0D, 0x06, 0xE3, 0x81, 0xA8, 0xE3, - // Bytes 3f80 - 3fbf - 0x82, 0x99, 0x0D, 0x06, 0xE3, 0x81, 0xAF, 0xE3, - 0x82, 0x99, 0x0D, 0x06, 0xE3, 0x81, 0xAF, 0xE3, - 0x82, 0x9A, 0x0D, 0x06, 0xE3, 0x81, 0xB2, 0xE3, - 0x82, 0x99, 0x0D, 0x06, 0xE3, 0x81, 0xB2, 0xE3, - 0x82, 0x9A, 0x0D, 0x06, 0xE3, 0x81, 0xB5, 0xE3, - 0x82, 0x99, 0x0D, 0x06, 0xE3, 0x81, 0xB5, 0xE3, - 0x82, 0x9A, 0x0D, 0x06, 0xE3, 0x81, 0xB8, 0xE3, - 0x82, 0x99, 0x0D, 0x06, 0xE3, 0x81, 0xB8, 0xE3, - // Bytes 3fc0 - 3fff - 0x82, 0x9A, 0x0D, 0x06, 0xE3, 0x81, 0xBB, 0xE3, - 0x82, 0x99, 0x0D, 0x06, 0xE3, 0x81, 0xBB, 0xE3, - 0x82, 0x9A, 0x0D, 0x06, 0xE3, 0x82, 0x9D, 0xE3, - 0x82, 0x99, 0x0D, 0x06, 0xE3, 0x82, 0xA6, 0xE3, - 0x82, 0x99, 0x0D, 0x06, 0xE3, 0x82, 0xAB, 0xE3, - 0x82, 0x99, 0x0D, 0x06, 0xE3, 0x82, 0xAD, 0xE3, - 0x82, 0x99, 0x0D, 0x06, 0xE3, 0x82, 0xAF, 0xE3, - 0x82, 0x99, 0x0D, 0x06, 0xE3, 0x82, 0xB1, 0xE3, - // Bytes 4000 - 403f - 0x82, 0x99, 0x0D, 0x06, 0xE3, 0x82, 0xB3, 0xE3, - 0x82, 0x99, 0x0D, 0x06, 0xE3, 0x82, 0xB5, 0xE3, - 0x82, 0x99, 0x0D, 0x06, 0xE3, 0x82, 0xB7, 0xE3, - 0x82, 0x99, 0x0D, 0x06, 0xE3, 0x82, 0xB9, 0xE3, - 0x82, 0x99, 0x0D, 0x06, 0xE3, 0x82, 0xBB, 0xE3, - 0x82, 0x99, 0x0D, 0x06, 0xE3, 0x82, 0xBD, 0xE3, - 0x82, 0x99, 0x0D, 0x06, 0xE3, 0x82, 0xBF, 0xE3, - 0x82, 0x99, 0x0D, 0x06, 0xE3, 0x83, 0x81, 0xE3, - // Bytes 4040 - 407f - 0x82, 0x99, 0x0D, 0x06, 0xE3, 0x83, 0x84, 0xE3, - 0x82, 0x99, 0x0D, 0x06, 0xE3, 0x83, 0x86, 0xE3, - 0x82, 0x99, 0x0D, 0x06, 0xE3, 0x83, 0x88, 0xE3, - 0x82, 0x99, 0x0D, 0x06, 0xE3, 0x83, 0x8F, 0xE3, - 0x82, 0x99, 0x0D, 0x06, 0xE3, 0x83, 0x8F, 0xE3, - 0x82, 0x9A, 0x0D, 0x06, 0xE3, 0x83, 0x92, 0xE3, - 0x82, 0x99, 0x0D, 0x06, 0xE3, 0x83, 0x92, 0xE3, - 0x82, 0x9A, 0x0D, 0x06, 0xE3, 0x83, 0x95, 0xE3, - // Bytes 4080 - 40bf - 0x82, 0x99, 0x0D, 0x06, 0xE3, 0x83, 0x95, 0xE3, - 0x82, 0x9A, 0x0D, 0x06, 0xE3, 0x83, 0x98, 0xE3, - 0x82, 0x99, 0x0D, 0x06, 0xE3, 0x83, 0x98, 0xE3, - 0x82, 0x9A, 0x0D, 0x06, 0xE3, 0x83, 0x9B, 0xE3, - 0x82, 0x99, 0x0D, 0x06, 0xE3, 0x83, 0x9B, 0xE3, - 0x82, 0x9A, 0x0D, 0x06, 0xE3, 0x83, 0xAF, 0xE3, - 0x82, 0x99, 0x0D, 0x06, 0xE3, 0x83, 0xB0, 0xE3, - 0x82, 0x99, 0x0D, 0x06, 0xE3, 0x83, 0xB1, 0xE3, - // Bytes 40c0 - 40ff - 0x82, 0x99, 0x0D, 0x06, 0xE3, 0x83, 0xB2, 0xE3, - 0x82, 0x99, 0x0D, 0x06, 0xE3, 0x83, 0xBD, 0xE3, - 0x82, 0x99, 0x0D, 0x08, 0xCE, 0x91, 0xCC, 0x93, - 0xCC, 0x80, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0x91, - 0xCC, 0x93, 0xCC, 0x81, 0xCD, 0x85, 0xDB, 0x08, - 0xCE, 0x91, 0xCC, 0x93, 0xCD, 0x82, 0xCD, 0x85, - 0xDB, 0x08, 0xCE, 0x91, 0xCC, 0x94, 0xCC, 0x80, - 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0x91, 0xCC, 0x94, - // Bytes 4100 - 413f - 0xCC, 0x81, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0x91, - 0xCC, 0x94, 0xCD, 0x82, 0xCD, 0x85, 0xDB, 0x08, - 0xCE, 0x97, 0xCC, 0x93, 0xCC, 0x80, 0xCD, 0x85, - 0xDB, 0x08, 0xCE, 0x97, 0xCC, 0x93, 0xCC, 0x81, - 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0x97, 0xCC, 0x93, - 0xCD, 0x82, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0x97, - 0xCC, 0x94, 0xCC, 0x80, 0xCD, 0x85, 0xDB, 0x08, - 0xCE, 0x97, 0xCC, 0x94, 0xCC, 0x81, 0xCD, 0x85, - // Bytes 4140 - 417f - 0xDB, 0x08, 0xCE, 0x97, 0xCC, 0x94, 0xCD, 0x82, - 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0xA9, 0xCC, 0x93, - 0xCC, 0x80, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0xA9, - 0xCC, 0x93, 0xCC, 0x81, 0xCD, 0x85, 0xDB, 0x08, - 0xCE, 0xA9, 0xCC, 0x93, 0xCD, 0x82, 0xCD, 0x85, - 0xDB, 0x08, 0xCE, 0xA9, 0xCC, 0x94, 0xCC, 0x80, - 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0xA9, 0xCC, 0x94, - 0xCC, 0x81, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0xA9, - // Bytes 4180 - 41bf - 0xCC, 0x94, 0xCD, 0x82, 0xCD, 0x85, 0xDB, 0x08, - 0xCE, 0xB1, 0xCC, 0x93, 0xCC, 0x80, 0xCD, 0x85, - 0xDB, 0x08, 0xCE, 0xB1, 0xCC, 0x93, 0xCC, 0x81, - 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0xB1, 0xCC, 0x93, - 0xCD, 0x82, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0xB1, - 0xCC, 0x94, 0xCC, 0x80, 0xCD, 0x85, 0xDB, 0x08, - 0xCE, 0xB1, 0xCC, 0x94, 0xCC, 0x81, 0xCD, 0x85, - 0xDB, 0x08, 0xCE, 0xB1, 0xCC, 0x94, 0xCD, 0x82, - // Bytes 41c0 - 41ff - 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0xB7, 0xCC, 0x93, - 0xCC, 0x80, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0xB7, - 0xCC, 0x93, 0xCC, 0x81, 0xCD, 0x85, 0xDB, 0x08, - 0xCE, 0xB7, 0xCC, 0x93, 0xCD, 0x82, 0xCD, 0x85, - 0xDB, 0x08, 0xCE, 0xB7, 0xCC, 0x94, 0xCC, 0x80, - 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0xB7, 0xCC, 0x94, - 0xCC, 0x81, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0xB7, - 0xCC, 0x94, 0xCD, 0x82, 0xCD, 0x85, 0xDB, 0x08, - // Bytes 4200 - 423f - 0xCF, 0x89, 0xCC, 0x93, 0xCC, 0x80, 0xCD, 0x85, - 0xDB, 0x08, 0xCF, 0x89, 0xCC, 0x93, 0xCC, 0x81, - 0xCD, 0x85, 0xDB, 0x08, 0xCF, 0x89, 0xCC, 0x93, - 0xCD, 0x82, 0xCD, 0x85, 0xDB, 0x08, 0xCF, 0x89, - 0xCC, 0x94, 0xCC, 0x80, 0xCD, 0x85, 0xDB, 0x08, - 0xCF, 0x89, 0xCC, 0x94, 0xCC, 0x81, 0xCD, 0x85, - 0xDB, 0x08, 0xCF, 0x89, 0xCC, 0x94, 0xCD, 0x82, - 0xCD, 0x85, 0xDB, 0x08, 0xF0, 0x91, 0x82, 0x99, - // Bytes 4240 - 427f - 0xF0, 0x91, 0x82, 0xBA, 0x09, 0x08, 0xF0, 0x91, - 0x82, 0x9B, 0xF0, 0x91, 0x82, 0xBA, 0x09, 0x08, - 0xF0, 0x91, 0x82, 0xA5, 0xF0, 0x91, 0x82, 0xBA, - 0x09, 0x42, 0xC2, 0xB4, 0x01, 0x43, 0x20, 0xCC, - 0x81, 0xC9, 0x43, 0x20, 0xCC, 0x83, 0xC9, 0x43, - 0x20, 0xCC, 0x84, 0xC9, 0x43, 0x20, 0xCC, 0x85, - 0xC9, 0x43, 0x20, 0xCC, 0x86, 0xC9, 0x43, 0x20, - 0xCC, 0x87, 0xC9, 0x43, 0x20, 0xCC, 0x88, 0xC9, - // Bytes 4280 - 42bf - 0x43, 0x20, 0xCC, 0x8A, 0xC9, 0x43, 0x20, 0xCC, - 0x8B, 0xC9, 0x43, 0x20, 0xCC, 0x93, 0xC9, 0x43, - 0x20, 0xCC, 0x94, 0xC9, 0x43, 0x20, 0xCC, 0xA7, - 0xA5, 0x43, 0x20, 0xCC, 0xA8, 0xA5, 0x43, 0x20, - 0xCC, 0xB3, 0xB5, 0x43, 0x20, 0xCD, 0x82, 0xC9, - 0x43, 0x20, 0xCD, 0x85, 0xD9, 0x43, 0x20, 0xD9, - 0x8B, 0x59, 0x43, 0x20, 0xD9, 0x8C, 0x5D, 0x43, - 0x20, 0xD9, 0x8D, 0x61, 0x43, 0x20, 0xD9, 0x8E, - // Bytes 42c0 - 42ff - 0x65, 0x43, 0x20, 0xD9, 0x8F, 0x69, 0x43, 0x20, - 0xD9, 0x90, 0x6D, 0x43, 0x20, 0xD9, 0x91, 0x71, - 0x43, 0x20, 0xD9, 0x92, 0x75, 0x43, 0x41, 0xCC, - 0x8A, 0xC9, 0x43, 0x73, 0xCC, 0x87, 0xC9, 0x44, - 0x20, 0xE3, 0x82, 0x99, 0x0D, 0x44, 0x20, 0xE3, - 0x82, 0x9A, 0x0D, 0x44, 0xC2, 0xA8, 0xCC, 0x81, - 0xCA, 0x44, 0xCE, 0x91, 0xCC, 0x81, 0xC9, 0x44, - 0xCE, 0x95, 0xCC, 0x81, 0xC9, 0x44, 0xCE, 0x97, - // Bytes 4300 - 433f - 0xCC, 0x81, 0xC9, 0x44, 0xCE, 0x99, 0xCC, 0x81, - 0xC9, 0x44, 0xCE, 0x9F, 0xCC, 0x81, 0xC9, 0x44, - 0xCE, 0xA5, 0xCC, 0x81, 0xC9, 0x44, 0xCE, 0xA5, - 0xCC, 0x88, 0xC9, 0x44, 0xCE, 0xA9, 0xCC, 0x81, - 0xC9, 0x44, 0xCE, 0xB1, 0xCC, 0x81, 0xC9, 0x44, - 0xCE, 0xB5, 0xCC, 0x81, 0xC9, 0x44, 0xCE, 0xB7, - 0xCC, 0x81, 0xC9, 0x44, 0xCE, 0xB9, 0xCC, 0x81, - 0xC9, 0x44, 0xCE, 0xBF, 0xCC, 0x81, 0xC9, 0x44, - // Bytes 4340 - 437f - 0xCF, 0x85, 0xCC, 0x81, 0xC9, 0x44, 0xCF, 0x89, - 0xCC, 0x81, 0xC9, 0x44, 0xD7, 0x90, 0xD6, 0xB7, - 0x31, 0x44, 0xD7, 0x90, 0xD6, 0xB8, 0x35, 0x44, - 0xD7, 0x90, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0x91, - 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0x91, 0xD6, 0xBF, - 0x49, 0x44, 0xD7, 0x92, 0xD6, 0xBC, 0x41, 0x44, - 0xD7, 0x93, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0x94, - 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0x95, 0xD6, 0xB9, - // Bytes 4380 - 43bf - 0x39, 0x44, 0xD7, 0x95, 0xD6, 0xBC, 0x41, 0x44, - 0xD7, 0x96, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0x98, - 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0x99, 0xD6, 0xB4, - 0x25, 0x44, 0xD7, 0x99, 0xD6, 0xBC, 0x41, 0x44, - 0xD7, 0x9A, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0x9B, - 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0x9B, 0xD6, 0xBF, - 0x49, 0x44, 0xD7, 0x9C, 0xD6, 0xBC, 0x41, 0x44, - 0xD7, 0x9E, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0xA0, - // Bytes 43c0 - 43ff - 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0xA1, 0xD6, 0xBC, - 0x41, 0x44, 0xD7, 0xA3, 0xD6, 0xBC, 0x41, 0x44, - 0xD7, 0xA4, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0xA4, - 0xD6, 0xBF, 0x49, 0x44, 0xD7, 0xA6, 0xD6, 0xBC, - 0x41, 0x44, 0xD7, 0xA7, 0xD6, 0xBC, 0x41, 0x44, - 0xD7, 0xA8, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0xA9, - 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0xA9, 0xD7, 0x81, - 0x4D, 0x44, 0xD7, 0xA9, 0xD7, 0x82, 0x51, 0x44, - // Bytes 4400 - 443f - 0xD7, 0xAA, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0xB2, - 0xD6, 0xB7, 0x31, 0x44, 0xD8, 0xA7, 0xD9, 0x8B, - 0x59, 0x44, 0xD8, 0xA7, 0xD9, 0x93, 0xC9, 0x44, - 0xD8, 0xA7, 0xD9, 0x94, 0xC9, 0x44, 0xD8, 0xA7, - 0xD9, 0x95, 0xB5, 0x44, 0xD8, 0xB0, 0xD9, 0xB0, - 0x79, 0x44, 0xD8, 0xB1, 0xD9, 0xB0, 0x79, 0x44, - 0xD9, 0x80, 0xD9, 0x8B, 0x59, 0x44, 0xD9, 0x80, - 0xD9, 0x8E, 0x65, 0x44, 0xD9, 0x80, 0xD9, 0x8F, - // Bytes 4440 - 447f - 0x69, 0x44, 0xD9, 0x80, 0xD9, 0x90, 0x6D, 0x44, - 0xD9, 0x80, 0xD9, 0x91, 0x71, 0x44, 0xD9, 0x80, - 0xD9, 0x92, 0x75, 0x44, 0xD9, 0x87, 0xD9, 0xB0, - 0x79, 0x44, 0xD9, 0x88, 0xD9, 0x94, 0xC9, 0x44, - 0xD9, 0x89, 0xD9, 0xB0, 0x79, 0x44, 0xD9, 0x8A, - 0xD9, 0x94, 0xC9, 0x44, 0xDB, 0x92, 0xD9, 0x94, - 0xC9, 0x44, 0xDB, 0x95, 0xD9, 0x94, 0xC9, 0x45, - 0x20, 0xCC, 0x88, 0xCC, 0x80, 0xCA, 0x45, 0x20, - // Bytes 4480 - 44bf - 0xCC, 0x88, 0xCC, 0x81, 0xCA, 0x45, 0x20, 0xCC, - 0x88, 0xCD, 0x82, 0xCA, 0x45, 0x20, 0xCC, 0x93, - 0xCC, 0x80, 0xCA, 0x45, 0x20, 0xCC, 0x93, 0xCC, - 0x81, 0xCA, 0x45, 0x20, 0xCC, 0x93, 0xCD, 0x82, - 0xCA, 0x45, 0x20, 0xCC, 0x94, 0xCC, 0x80, 0xCA, - 0x45, 0x20, 0xCC, 0x94, 0xCC, 0x81, 0xCA, 0x45, - 0x20, 0xCC, 0x94, 0xCD, 0x82, 0xCA, 0x45, 0x20, - 0xD9, 0x8C, 0xD9, 0x91, 0x72, 0x45, 0x20, 0xD9, - // Bytes 44c0 - 44ff - 0x8D, 0xD9, 0x91, 0x72, 0x45, 0x20, 0xD9, 0x8E, - 0xD9, 0x91, 0x72, 0x45, 0x20, 0xD9, 0x8F, 0xD9, - 0x91, 0x72, 0x45, 0x20, 0xD9, 0x90, 0xD9, 0x91, - 0x72, 0x45, 0x20, 0xD9, 0x91, 0xD9, 0xB0, 0x7A, - 0x45, 0xE2, 0xAB, 0x9D, 0xCC, 0xB8, 0x05, 0x46, - 0xCE, 0xB9, 0xCC, 0x88, 0xCC, 0x81, 0xCA, 0x46, - 0xCF, 0x85, 0xCC, 0x88, 0xCC, 0x81, 0xCA, 0x46, - 0xD7, 0xA9, 0xD6, 0xBC, 0xD7, 0x81, 0x4E, 0x46, - // Bytes 4500 - 453f - 0xD7, 0xA9, 0xD6, 0xBC, 0xD7, 0x82, 0x52, 0x46, - 0xD9, 0x80, 0xD9, 0x8E, 0xD9, 0x91, 0x72, 0x46, - 0xD9, 0x80, 0xD9, 0x8F, 0xD9, 0x91, 0x72, 0x46, - 0xD9, 0x80, 0xD9, 0x90, 0xD9, 0x91, 0x72, 0x46, - 0xE0, 0xA4, 0x95, 0xE0, 0xA4, 0xBC, 0x09, 0x46, - 0xE0, 0xA4, 0x96, 0xE0, 0xA4, 0xBC, 0x09, 0x46, - 0xE0, 0xA4, 0x97, 0xE0, 0xA4, 0xBC, 0x09, 0x46, - 0xE0, 0xA4, 0x9C, 0xE0, 0xA4, 0xBC, 0x09, 0x46, - // Bytes 4540 - 457f - 0xE0, 0xA4, 0xA1, 0xE0, 0xA4, 0xBC, 0x09, 0x46, - 0xE0, 0xA4, 0xA2, 0xE0, 0xA4, 0xBC, 0x09, 0x46, - 0xE0, 0xA4, 0xAB, 0xE0, 0xA4, 0xBC, 0x09, 0x46, - 0xE0, 0xA4, 0xAF, 0xE0, 0xA4, 0xBC, 0x09, 0x46, - 0xE0, 0xA6, 0xA1, 0xE0, 0xA6, 0xBC, 0x09, 0x46, - 0xE0, 0xA6, 0xA2, 0xE0, 0xA6, 0xBC, 0x09, 0x46, - 0xE0, 0xA6, 0xAF, 0xE0, 0xA6, 0xBC, 0x09, 0x46, - 0xE0, 0xA8, 0x96, 0xE0, 0xA8, 0xBC, 0x09, 0x46, - // Bytes 4580 - 45bf - 0xE0, 0xA8, 0x97, 0xE0, 0xA8, 0xBC, 0x09, 0x46, - 0xE0, 0xA8, 0x9C, 0xE0, 0xA8, 0xBC, 0x09, 0x46, - 0xE0, 0xA8, 0xAB, 0xE0, 0xA8, 0xBC, 0x09, 0x46, - 0xE0, 0xA8, 0xB2, 0xE0, 0xA8, 0xBC, 0x09, 0x46, - 0xE0, 0xA8, 0xB8, 0xE0, 0xA8, 0xBC, 0x09, 0x46, - 0xE0, 0xAC, 0xA1, 0xE0, 0xAC, 0xBC, 0x09, 0x46, - 0xE0, 0xAC, 0xA2, 0xE0, 0xAC, 0xBC, 0x09, 0x46, - 0xE0, 0xBE, 0xB2, 0xE0, 0xBE, 0x80, 0x9D, 0x46, - // Bytes 45c0 - 45ff - 0xE0, 0xBE, 0xB3, 0xE0, 0xBE, 0x80, 0x9D, 0x46, - 0xE3, 0x83, 0x86, 0xE3, 0x82, 0x99, 0x0D, 0x48, - 0xF0, 0x9D, 0x85, 0x97, 0xF0, 0x9D, 0x85, 0xA5, - 0xAD, 0x48, 0xF0, 0x9D, 0x85, 0x98, 0xF0, 0x9D, - 0x85, 0xA5, 0xAD, 0x48, 0xF0, 0x9D, 0x86, 0xB9, - 0xF0, 0x9D, 0x85, 0xA5, 0xAD, 0x48, 0xF0, 0x9D, - 0x86, 0xBA, 0xF0, 0x9D, 0x85, 0xA5, 0xAD, 0x49, - 0xE0, 0xBE, 0xB2, 0xE0, 0xBD, 0xB1, 0xE0, 0xBE, - // Bytes 4600 - 463f - 0x80, 0x9E, 0x49, 0xE0, 0xBE, 0xB3, 0xE0, 0xBD, - 0xB1, 0xE0, 0xBE, 0x80, 0x9E, 0x4C, 0xF0, 0x9D, - 0x85, 0x98, 0xF0, 0x9D, 0x85, 0xA5, 0xF0, 0x9D, - 0x85, 0xAE, 0xAE, 0x4C, 0xF0, 0x9D, 0x85, 0x98, - 0xF0, 0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85, 0xAF, - 0xAE, 0x4C, 0xF0, 0x9D, 0x85, 0x98, 0xF0, 0x9D, - 0x85, 0xA5, 0xF0, 0x9D, 0x85, 0xB0, 0xAE, 0x4C, - 0xF0, 0x9D, 0x85, 0x98, 0xF0, 0x9D, 0x85, 0xA5, - // Bytes 4640 - 467f - 0xF0, 0x9D, 0x85, 0xB1, 0xAE, 0x4C, 0xF0, 0x9D, - 0x85, 0x98, 0xF0, 0x9D, 0x85, 0xA5, 0xF0, 0x9D, - 0x85, 0xB2, 0xAE, 0x4C, 0xF0, 0x9D, 0x86, 0xB9, - 0xF0, 0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85, 0xAE, - 0xAE, 0x4C, 0xF0, 0x9D, 0x86, 0xB9, 0xF0, 0x9D, - 0x85, 0xA5, 0xF0, 0x9D, 0x85, 0xAF, 0xAE, 0x4C, - 0xF0, 0x9D, 0x86, 0xBA, 0xF0, 0x9D, 0x85, 0xA5, - 0xF0, 0x9D, 0x85, 0xAE, 0xAE, 0x4C, 0xF0, 0x9D, - // Bytes 4680 - 46bf - 0x86, 0xBA, 0xF0, 0x9D, 0x85, 0xA5, 0xF0, 0x9D, - 0x85, 0xAF, 0xAE, 0x83, 0x41, 0xCC, 0x82, 0xC9, - 0x83, 0x41, 0xCC, 0x86, 0xC9, 0x83, 0x41, 0xCC, - 0x87, 0xC9, 0x83, 0x41, 0xCC, 0x88, 0xC9, 0x83, - 0x41, 0xCC, 0x8A, 0xC9, 0x83, 0x41, 0xCC, 0xA3, - 0xB5, 0x83, 0x43, 0xCC, 0xA7, 0xA5, 0x83, 0x45, - 0xCC, 0x82, 0xC9, 0x83, 0x45, 0xCC, 0x84, 0xC9, - 0x83, 0x45, 0xCC, 0xA3, 0xB5, 0x83, 0x45, 0xCC, - // Bytes 46c0 - 46ff - 0xA7, 0xA5, 0x83, 0x49, 0xCC, 0x88, 0xC9, 0x83, - 0x4C, 0xCC, 0xA3, 0xB5, 0x83, 0x4F, 0xCC, 0x82, - 0xC9, 0x83, 0x4F, 0xCC, 0x83, 0xC9, 0x83, 0x4F, - 0xCC, 0x84, 0xC9, 0x83, 0x4F, 0xCC, 0x87, 0xC9, - 0x83, 0x4F, 0xCC, 0x88, 0xC9, 0x83, 0x4F, 0xCC, - 0x9B, 0xAD, 0x83, 0x4F, 0xCC, 0xA3, 0xB5, 0x83, - 0x4F, 0xCC, 0xA8, 0xA5, 0x83, 0x52, 0xCC, 0xA3, - 0xB5, 0x83, 0x53, 0xCC, 0x81, 0xC9, 0x83, 0x53, - // Bytes 4700 - 473f - 0xCC, 0x8C, 0xC9, 0x83, 0x53, 0xCC, 0xA3, 0xB5, - 0x83, 0x55, 0xCC, 0x83, 0xC9, 0x83, 0x55, 0xCC, - 0x84, 0xC9, 0x83, 0x55, 0xCC, 0x88, 0xC9, 0x83, - 0x55, 0xCC, 0x9B, 0xAD, 0x83, 0x61, 0xCC, 0x82, - 0xC9, 0x83, 0x61, 0xCC, 0x86, 0xC9, 0x83, 0x61, - 0xCC, 0x87, 0xC9, 0x83, 0x61, 0xCC, 0x88, 0xC9, - 0x83, 0x61, 0xCC, 0x8A, 0xC9, 0x83, 0x61, 0xCC, - 0xA3, 0xB5, 0x83, 0x63, 0xCC, 0xA7, 0xA5, 0x83, - // Bytes 4740 - 477f - 0x65, 0xCC, 0x82, 0xC9, 0x83, 0x65, 0xCC, 0x84, - 0xC9, 0x83, 0x65, 0xCC, 0xA3, 0xB5, 0x83, 0x65, - 0xCC, 0xA7, 0xA5, 0x83, 0x69, 0xCC, 0x88, 0xC9, - 0x83, 0x6C, 0xCC, 0xA3, 0xB5, 0x83, 0x6F, 0xCC, - 0x82, 0xC9, 0x83, 0x6F, 0xCC, 0x83, 0xC9, 0x83, - 0x6F, 0xCC, 0x84, 0xC9, 0x83, 0x6F, 0xCC, 0x87, - 0xC9, 0x83, 0x6F, 0xCC, 0x88, 0xC9, 0x83, 0x6F, - 0xCC, 0x9B, 0xAD, 0x83, 0x6F, 0xCC, 0xA3, 0xB5, - // Bytes 4780 - 47bf - 0x83, 0x6F, 0xCC, 0xA8, 0xA5, 0x83, 0x72, 0xCC, - 0xA3, 0xB5, 0x83, 0x73, 0xCC, 0x81, 0xC9, 0x83, - 0x73, 0xCC, 0x8C, 0xC9, 0x83, 0x73, 0xCC, 0xA3, - 0xB5, 0x83, 0x75, 0xCC, 0x83, 0xC9, 0x83, 0x75, - 0xCC, 0x84, 0xC9, 0x83, 0x75, 0xCC, 0x88, 0xC9, - 0x83, 0x75, 0xCC, 0x9B, 0xAD, 0x84, 0xCE, 0x91, - 0xCC, 0x93, 0xC9, 0x84, 0xCE, 0x91, 0xCC, 0x94, - 0xC9, 0x84, 0xCE, 0x95, 0xCC, 0x93, 0xC9, 0x84, - // Bytes 47c0 - 47ff - 0xCE, 0x95, 0xCC, 0x94, 0xC9, 0x84, 0xCE, 0x97, - 0xCC, 0x93, 0xC9, 0x84, 0xCE, 0x97, 0xCC, 0x94, - 0xC9, 0x84, 0xCE, 0x99, 0xCC, 0x93, 0xC9, 0x84, - 0xCE, 0x99, 0xCC, 0x94, 0xC9, 0x84, 0xCE, 0x9F, - 0xCC, 0x93, 0xC9, 0x84, 0xCE, 0x9F, 0xCC, 0x94, - 0xC9, 0x84, 0xCE, 0xA5, 0xCC, 0x94, 0xC9, 0x84, - 0xCE, 0xA9, 0xCC, 0x93, 0xC9, 0x84, 0xCE, 0xA9, - 0xCC, 0x94, 0xC9, 0x84, 0xCE, 0xB1, 0xCC, 0x80, - // Bytes 4800 - 483f - 0xC9, 0x84, 0xCE, 0xB1, 0xCC, 0x81, 0xC9, 0x84, - 0xCE, 0xB1, 0xCC, 0x93, 0xC9, 0x84, 0xCE, 0xB1, - 0xCC, 0x94, 0xC9, 0x84, 0xCE, 0xB1, 0xCD, 0x82, - 0xC9, 0x84, 0xCE, 0xB5, 0xCC, 0x93, 0xC9, 0x84, - 0xCE, 0xB5, 0xCC, 0x94, 0xC9, 0x84, 0xCE, 0xB7, - 0xCC, 0x80, 0xC9, 0x84, 0xCE, 0xB7, 0xCC, 0x81, - 0xC9, 0x84, 0xCE, 0xB7, 0xCC, 0x93, 0xC9, 0x84, - 0xCE, 0xB7, 0xCC, 0x94, 0xC9, 0x84, 0xCE, 0xB7, - // Bytes 4840 - 487f - 0xCD, 0x82, 0xC9, 0x84, 0xCE, 0xB9, 0xCC, 0x88, - 0xC9, 0x84, 0xCE, 0xB9, 0xCC, 0x93, 0xC9, 0x84, - 0xCE, 0xB9, 0xCC, 0x94, 0xC9, 0x84, 0xCE, 0xBF, - 0xCC, 0x93, 0xC9, 0x84, 0xCE, 0xBF, 0xCC, 0x94, - 0xC9, 0x84, 0xCF, 0x85, 0xCC, 0x88, 0xC9, 0x84, - 0xCF, 0x85, 0xCC, 0x93, 0xC9, 0x84, 0xCF, 0x85, - 0xCC, 0x94, 0xC9, 0x84, 0xCF, 0x89, 0xCC, 0x80, - 0xC9, 0x84, 0xCF, 0x89, 0xCC, 0x81, 0xC9, 0x84, - // Bytes 4880 - 48bf - 0xCF, 0x89, 0xCC, 0x93, 0xC9, 0x84, 0xCF, 0x89, - 0xCC, 0x94, 0xC9, 0x84, 0xCF, 0x89, 0xCD, 0x82, - 0xC9, 0x86, 0xCE, 0x91, 0xCC, 0x93, 0xCC, 0x80, - 0xCA, 0x86, 0xCE, 0x91, 0xCC, 0x93, 0xCC, 0x81, - 0xCA, 0x86, 0xCE, 0x91, 0xCC, 0x93, 0xCD, 0x82, - 0xCA, 0x86, 0xCE, 0x91, 0xCC, 0x94, 0xCC, 0x80, - 0xCA, 0x86, 0xCE, 0x91, 0xCC, 0x94, 0xCC, 0x81, - 0xCA, 0x86, 0xCE, 0x91, 0xCC, 0x94, 0xCD, 0x82, - // Bytes 48c0 - 48ff - 0xCA, 0x86, 0xCE, 0x97, 0xCC, 0x93, 0xCC, 0x80, - 0xCA, 0x86, 0xCE, 0x97, 0xCC, 0x93, 0xCC, 0x81, - 0xCA, 0x86, 0xCE, 0x97, 0xCC, 0x93, 0xCD, 0x82, - 0xCA, 0x86, 0xCE, 0x97, 0xCC, 0x94, 0xCC, 0x80, - 0xCA, 0x86, 0xCE, 0x97, 0xCC, 0x94, 0xCC, 0x81, - 0xCA, 0x86, 0xCE, 0x97, 0xCC, 0x94, 0xCD, 0x82, - 0xCA, 0x86, 0xCE, 0xA9, 0xCC, 0x93, 0xCC, 0x80, - 0xCA, 0x86, 0xCE, 0xA9, 0xCC, 0x93, 0xCC, 0x81, - // Bytes 4900 - 493f - 0xCA, 0x86, 0xCE, 0xA9, 0xCC, 0x93, 0xCD, 0x82, - 0xCA, 0x86, 0xCE, 0xA9, 0xCC, 0x94, 0xCC, 0x80, - 0xCA, 0x86, 0xCE, 0xA9, 0xCC, 0x94, 0xCC, 0x81, - 0xCA, 0x86, 0xCE, 0xA9, 0xCC, 0x94, 0xCD, 0x82, - 0xCA, 0x86, 0xCE, 0xB1, 0xCC, 0x93, 0xCC, 0x80, - 0xCA, 0x86, 0xCE, 0xB1, 0xCC, 0x93, 0xCC, 0x81, - 0xCA, 0x86, 0xCE, 0xB1, 0xCC, 0x93, 0xCD, 0x82, - 0xCA, 0x86, 0xCE, 0xB1, 0xCC, 0x94, 0xCC, 0x80, - // Bytes 4940 - 497f - 0xCA, 0x86, 0xCE, 0xB1, 0xCC, 0x94, 0xCC, 0x81, - 0xCA, 0x86, 0xCE, 0xB1, 0xCC, 0x94, 0xCD, 0x82, - 0xCA, 0x86, 0xCE, 0xB7, 0xCC, 0x93, 0xCC, 0x80, - 0xCA, 0x86, 0xCE, 0xB7, 0xCC, 0x93, 0xCC, 0x81, - 0xCA, 0x86, 0xCE, 0xB7, 0xCC, 0x93, 0xCD, 0x82, - 0xCA, 0x86, 0xCE, 0xB7, 0xCC, 0x94, 0xCC, 0x80, - 0xCA, 0x86, 0xCE, 0xB7, 0xCC, 0x94, 0xCC, 0x81, - 0xCA, 0x86, 0xCE, 0xB7, 0xCC, 0x94, 0xCD, 0x82, - // Bytes 4980 - 49bf - 0xCA, 0x86, 0xCF, 0x89, 0xCC, 0x93, 0xCC, 0x80, - 0xCA, 0x86, 0xCF, 0x89, 0xCC, 0x93, 0xCC, 0x81, - 0xCA, 0x86, 0xCF, 0x89, 0xCC, 0x93, 0xCD, 0x82, - 0xCA, 0x86, 0xCF, 0x89, 0xCC, 0x94, 0xCC, 0x80, - 0xCA, 0x86, 0xCF, 0x89, 0xCC, 0x94, 0xCC, 0x81, - 0xCA, 0x86, 0xCF, 0x89, 0xCC, 0x94, 0xCD, 0x82, - 0xCA, 0x42, 0xCC, 0x80, 0xC9, 0x32, 0x42, 0xCC, - 0x81, 0xC9, 0x32, 0x42, 0xCC, 0x93, 0xC9, 0x32, - // Bytes 49c0 - 49ff - 0x43, 0xE1, 0x85, 0xA1, 0x01, 0x00, 0x43, 0xE1, - 0x85, 0xA2, 0x01, 0x00, 0x43, 0xE1, 0x85, 0xA3, - 0x01, 0x00, 0x43, 0xE1, 0x85, 0xA4, 0x01, 0x00, - 0x43, 0xE1, 0x85, 0xA5, 0x01, 0x00, 0x43, 0xE1, - 0x85, 0xA6, 0x01, 0x00, 0x43, 0xE1, 0x85, 0xA7, - 0x01, 0x00, 0x43, 0xE1, 0x85, 0xA8, 0x01, 0x00, - 0x43, 0xE1, 0x85, 0xA9, 0x01, 0x00, 0x43, 0xE1, - 0x85, 0xAA, 0x01, 0x00, 0x43, 0xE1, 0x85, 0xAB, - // Bytes 4a00 - 4a3f - 0x01, 0x00, 0x43, 0xE1, 0x85, 0xAC, 0x01, 0x00, - 0x43, 0xE1, 0x85, 0xAD, 0x01, 0x00, 0x43, 0xE1, - 0x85, 0xAE, 0x01, 0x00, 0x43, 0xE1, 0x85, 0xAF, - 0x01, 0x00, 0x43, 0xE1, 0x85, 0xB0, 0x01, 0x00, - 0x43, 0xE1, 0x85, 0xB1, 0x01, 0x00, 0x43, 0xE1, - 0x85, 0xB2, 0x01, 0x00, 0x43, 0xE1, 0x85, 0xB3, - 0x01, 0x00, 0x43, 0xE1, 0x85, 0xB4, 0x01, 0x00, - 0x43, 0xE1, 0x85, 0xB5, 0x01, 0x00, 0x43, 0xE1, - // Bytes 4a40 - 4a7f - 0x86, 0xAA, 0x01, 0x00, 0x43, 0xE1, 0x86, 0xAC, - 0x01, 0x00, 0x43, 0xE1, 0x86, 0xAD, 0x01, 0x00, - 0x43, 0xE1, 0x86, 0xB0, 0x01, 0x00, 0x43, 0xE1, - 0x86, 0xB1, 0x01, 0x00, 0x43, 0xE1, 0x86, 0xB2, - 0x01, 0x00, 0x43, 0xE1, 0x86, 0xB3, 0x01, 0x00, - 0x43, 0xE1, 0x86, 0xB4, 0x01, 0x00, 0x43, 0xE1, - 0x86, 0xB5, 0x01, 0x00, 0x44, 0xCC, 0x88, 0xCC, - 0x81, 0xCA, 0x32, 0x43, 0xE3, 0x82, 0x99, 0x0D, - // Bytes 4a80 - 4abf - 0x03, 0x43, 0xE3, 0x82, 0x9A, 0x0D, 0x03, 0x46, - 0xE0, 0xBD, 0xB1, 0xE0, 0xBD, 0xB2, 0x9E, 0x26, - 0x46, 0xE0, 0xBD, 0xB1, 0xE0, 0xBD, 0xB4, 0xA2, - 0x26, 0x46, 0xE0, 0xBD, 0xB1, 0xE0, 0xBE, 0x80, - 0x9E, 0x26, 0x00, 0x01, -} - -// lookup returns the trie value for the first UTF-8 encoding in s and -// the width in bytes of this encoding. The size will be 0 if s does not -// hold enough bytes to complete the encoding. len(s) must be greater than 0. -func (t *nfcTrie) lookup(s []byte) (v uint16, sz int) { - c0 := s[0] - switch { - case c0 < 0x80: // is ASCII - return nfcValues[c0], 1 - case c0 < 0xC2: - return 0, 1 // Illegal UTF-8: not a starter, not ASCII. - case c0 < 0xE0: // 2-byte UTF-8 - if len(s) < 2 { - return 0, 0 - } - i := nfcIndex[c0] - c1 := s[1] - if c1 < 0x80 || 0xC0 <= c1 { - return 0, 1 // Illegal UTF-8: not a continuation byte. - } - return t.lookupValue(uint32(i), c1), 2 - case c0 < 0xF0: // 3-byte UTF-8 - if len(s) < 3 { - return 0, 0 - } - i := nfcIndex[c0] - c1 := s[1] - if c1 < 0x80 || 0xC0 <= c1 { - return 0, 1 // Illegal UTF-8: not a continuation byte. - } - o := uint32(i)<<6 + uint32(c1) - i = nfcIndex[o] - c2 := s[2] - if c2 < 0x80 || 0xC0 <= c2 { - return 0, 2 // Illegal UTF-8: not a continuation byte. - } - return t.lookupValue(uint32(i), c2), 3 - case c0 < 0xF8: // 4-byte UTF-8 - if len(s) < 4 { - return 0, 0 - } - i := nfcIndex[c0] - c1 := s[1] - if c1 < 0x80 || 0xC0 <= c1 { - return 0, 1 // Illegal UTF-8: not a continuation byte. - } - o := uint32(i)<<6 + uint32(c1) - i = nfcIndex[o] - c2 := s[2] - if c2 < 0x80 || 0xC0 <= c2 { - return 0, 2 // Illegal UTF-8: not a continuation byte. - } - o = uint32(i)<<6 + uint32(c2) - i = nfcIndex[o] - c3 := s[3] - if c3 < 0x80 || 0xC0 <= c3 { - return 0, 3 // Illegal UTF-8: not a continuation byte. - } - return t.lookupValue(uint32(i), c3), 4 - } - // Illegal rune - return 0, 1 -} - -// lookupUnsafe returns the trie value for the first UTF-8 encoding in s. -// s must start with a full and valid UTF-8 encoded rune. -func (t *nfcTrie) lookupUnsafe(s []byte) uint16 { - c0 := s[0] - if c0 < 0x80 { // is ASCII - return nfcValues[c0] - } - i := nfcIndex[c0] - if c0 < 0xE0 { // 2-byte UTF-8 - return t.lookupValue(uint32(i), s[1]) - } - i = nfcIndex[uint32(i)<<6+uint32(s[1])] - if c0 < 0xF0 { // 3-byte UTF-8 - return t.lookupValue(uint32(i), s[2]) - } - i = nfcIndex[uint32(i)<<6+uint32(s[2])] - if c0 < 0xF8 { // 4-byte UTF-8 - return t.lookupValue(uint32(i), s[3]) - } - return 0 -} - -// lookupString returns the trie value for the first UTF-8 encoding in s and -// the width in bytes of this encoding. The size will be 0 if s does not -// hold enough bytes to complete the encoding. len(s) must be greater than 0. -func (t *nfcTrie) lookupString(s string) (v uint16, sz int) { - c0 := s[0] - switch { - case c0 < 0x80: // is ASCII - return nfcValues[c0], 1 - case c0 < 0xC2: - return 0, 1 // Illegal UTF-8: not a starter, not ASCII. - case c0 < 0xE0: // 2-byte UTF-8 - if len(s) < 2 { - return 0, 0 - } - i := nfcIndex[c0] - c1 := s[1] - if c1 < 0x80 || 0xC0 <= c1 { - return 0, 1 // Illegal UTF-8: not a continuation byte. - } - return t.lookupValue(uint32(i), c1), 2 - case c0 < 0xF0: // 3-byte UTF-8 - if len(s) < 3 { - return 0, 0 - } - i := nfcIndex[c0] - c1 := s[1] - if c1 < 0x80 || 0xC0 <= c1 { - return 0, 1 // Illegal UTF-8: not a continuation byte. - } - o := uint32(i)<<6 + uint32(c1) - i = nfcIndex[o] - c2 := s[2] - if c2 < 0x80 || 0xC0 <= c2 { - return 0, 2 // Illegal UTF-8: not a continuation byte. - } - return t.lookupValue(uint32(i), c2), 3 - case c0 < 0xF8: // 4-byte UTF-8 - if len(s) < 4 { - return 0, 0 - } - i := nfcIndex[c0] - c1 := s[1] - if c1 < 0x80 || 0xC0 <= c1 { - return 0, 1 // Illegal UTF-8: not a continuation byte. - } - o := uint32(i)<<6 + uint32(c1) - i = nfcIndex[o] - c2 := s[2] - if c2 < 0x80 || 0xC0 <= c2 { - return 0, 2 // Illegal UTF-8: not a continuation byte. - } - o = uint32(i)<<6 + uint32(c2) - i = nfcIndex[o] - c3 := s[3] - if c3 < 0x80 || 0xC0 <= c3 { - return 0, 3 // Illegal UTF-8: not a continuation byte. - } - return t.lookupValue(uint32(i), c3), 4 - } - // Illegal rune - return 0, 1 -} - -// lookupStringUnsafe returns the trie value for the first UTF-8 encoding in s. -// s must start with a full and valid UTF-8 encoded rune. -func (t *nfcTrie) lookupStringUnsafe(s string) uint16 { - c0 := s[0] - if c0 < 0x80 { // is ASCII - return nfcValues[c0] - } - i := nfcIndex[c0] - if c0 < 0xE0 { // 2-byte UTF-8 - return t.lookupValue(uint32(i), s[1]) - } - i = nfcIndex[uint32(i)<<6+uint32(s[1])] - if c0 < 0xF0 { // 3-byte UTF-8 - return t.lookupValue(uint32(i), s[2]) - } - i = nfcIndex[uint32(i)<<6+uint32(s[2])] - if c0 < 0xF8 { // 4-byte UTF-8 - return t.lookupValue(uint32(i), s[3]) - } - return 0 -} - -// nfcTrie. Total size: 10610 bytes (10.36 KiB). Checksum: 95e8869a9f81e5e6. -type nfcTrie struct{} - -func newNfcTrie(i int) *nfcTrie { - return &nfcTrie{} -} - -// lookupValue determines the type of block n and looks up the value for b. -func (t *nfcTrie) lookupValue(n uint32, b byte) uint16 { - switch { - case n < 46: - return uint16(nfcValues[n<<6+uint32(b)]) - default: - n -= 46 - return uint16(nfcSparse.lookup(n, b)) - } -} - -// nfcValues: 48 blocks, 3072 entries, 6144 bytes -// The third block is the zero block. -var nfcValues = [3072]uint16{ - // Block 0x0, offset 0x0 - 0x3c: 0xa000, 0x3d: 0xa000, 0x3e: 0xa000, - // Block 0x1, offset 0x40 - 0x41: 0xa000, 0x42: 0xa000, 0x43: 0xa000, 0x44: 0xa000, 0x45: 0xa000, - 0x46: 0xa000, 0x47: 0xa000, 0x48: 0xa000, 0x49: 0xa000, 0x4a: 0xa000, 0x4b: 0xa000, - 0x4c: 0xa000, 0x4d: 0xa000, 0x4e: 0xa000, 0x4f: 0xa000, 0x50: 0xa000, - 0x52: 0xa000, 0x53: 0xa000, 0x54: 0xa000, 0x55: 0xa000, 0x56: 0xa000, 0x57: 0xa000, - 0x58: 0xa000, 0x59: 0xa000, 0x5a: 0xa000, - 0x61: 0xa000, 0x62: 0xa000, 0x63: 0xa000, - 0x64: 0xa000, 0x65: 0xa000, 0x66: 0xa000, 0x67: 0xa000, 0x68: 0xa000, 0x69: 0xa000, - 0x6a: 0xa000, 0x6b: 0xa000, 0x6c: 0xa000, 0x6d: 0xa000, 0x6e: 0xa000, 0x6f: 0xa000, - 0x70: 0xa000, 0x72: 0xa000, 0x73: 0xa000, 0x74: 0xa000, 0x75: 0xa000, - 0x76: 0xa000, 0x77: 0xa000, 0x78: 0xa000, 0x79: 0xa000, 0x7a: 0xa000, - // Block 0x2, offset 0x80 - // Block 0x3, offset 0xc0 - 0xc0: 0x2f72, 0xc1: 0x2f77, 0xc2: 0x468b, 0xc3: 0x2f7c, 0xc4: 0x469a, 0xc5: 0x469f, - 0xc6: 0xa000, 0xc7: 0x46a9, 0xc8: 0x2fe5, 0xc9: 0x2fea, 0xca: 0x46ae, 0xcb: 0x2ffe, - 0xcc: 0x3071, 0xcd: 0x3076, 0xce: 0x307b, 0xcf: 0x46c2, 0xd1: 0x3107, - 0xd2: 0x312a, 0xd3: 0x312f, 0xd4: 0x46cc, 0xd5: 0x46d1, 0xd6: 0x46e0, - 0xd8: 0xa000, 0xd9: 0x31b6, 0xda: 0x31bb, 0xdb: 0x31c0, 0xdc: 0x4712, 0xdd: 0x3238, - 0xe0: 0x327e, 0xe1: 0x3283, 0xe2: 0x471c, 0xe3: 0x3288, - 0xe4: 0x472b, 0xe5: 0x4730, 0xe6: 0xa000, 0xe7: 0x473a, 0xe8: 0x32f1, 0xe9: 0x32f6, - 0xea: 0x473f, 0xeb: 0x330a, 0xec: 0x3382, 0xed: 0x3387, 0xee: 0x338c, 0xef: 0x4753, - 0xf1: 0x3418, 0xf2: 0x343b, 0xf3: 0x3440, 0xf4: 0x475d, 0xf5: 0x4762, - 0xf6: 0x4771, 0xf8: 0xa000, 0xf9: 0x34cc, 0xfa: 0x34d1, 0xfb: 0x34d6, - 0xfc: 0x47a3, 0xfd: 0x3553, 0xff: 0x356c, - // Block 0x4, offset 0x100 - 0x100: 0x2f81, 0x101: 0x328d, 0x102: 0x4690, 0x103: 0x4721, 0x104: 0x2f9f, 0x105: 0x32ab, - 0x106: 0x2fb3, 0x107: 0x32bf, 0x108: 0x2fb8, 0x109: 0x32c4, 0x10a: 0x2fbd, 0x10b: 0x32c9, - 0x10c: 0x2fc2, 0x10d: 0x32ce, 0x10e: 0x2fcc, 0x10f: 0x32d8, - 0x112: 0x46b3, 0x113: 0x4744, 0x114: 0x2ff4, 0x115: 0x3300, 0x116: 0x2ff9, 0x117: 0x3305, - 0x118: 0x3017, 0x119: 0x3323, 0x11a: 0x3008, 0x11b: 0x3314, 0x11c: 0x3030, 0x11d: 0x333c, - 0x11e: 0x303a, 0x11f: 0x3346, 0x120: 0x303f, 0x121: 0x334b, 0x122: 0x3049, 0x123: 0x3355, - 0x124: 0x304e, 0x125: 0x335a, 0x128: 0x3080, 0x129: 0x3391, - 0x12a: 0x3085, 0x12b: 0x3396, 0x12c: 0x308a, 0x12d: 0x339b, 0x12e: 0x30ad, 0x12f: 0x33b9, - 0x130: 0x308f, 0x134: 0x30b7, 0x135: 0x33c3, - 0x136: 0x30cb, 0x137: 0x33dc, 0x139: 0x30d5, 0x13a: 0x33e6, 0x13b: 0x30df, - 0x13c: 0x33f0, 0x13d: 0x30da, 0x13e: 0x33eb, - // Block 0x5, offset 0x140 - 0x143: 0x3102, 0x144: 0x3413, 0x145: 0x311b, - 0x146: 0x342c, 0x147: 0x3111, 0x148: 0x3422, - 0x14c: 0x46d6, 0x14d: 0x4767, 0x14e: 0x3134, 0x14f: 0x3445, 0x150: 0x313e, 0x151: 0x344f, - 0x154: 0x315c, 0x155: 0x346d, 0x156: 0x3175, 0x157: 0x3486, - 0x158: 0x3166, 0x159: 0x3477, 0x15a: 0x46f9, 0x15b: 0x478a, 0x15c: 0x317f, 0x15d: 0x3490, - 0x15e: 0x318e, 0x15f: 0x349f, 0x160: 0x46fe, 0x161: 0x478f, 0x162: 0x31a7, 0x163: 0x34bd, - 0x164: 0x3198, 0x165: 0x34ae, 0x168: 0x4708, 0x169: 0x4799, - 0x16a: 0x470d, 0x16b: 0x479e, 0x16c: 0x31c5, 0x16d: 0x34db, 0x16e: 0x31cf, 0x16f: 0x34e5, - 0x170: 0x31d4, 0x171: 0x34ea, 0x172: 0x31f2, 0x173: 0x3508, 0x174: 0x3215, 0x175: 0x352b, - 0x176: 0x323d, 0x177: 0x3558, 0x178: 0x3251, 0x179: 0x3260, 0x17a: 0x3580, 0x17b: 0x326a, - 0x17c: 0x358a, 0x17d: 0x326f, 0x17e: 0x358f, 0x17f: 0xa000, - // Block 0x6, offset 0x180 - 0x184: 0x8100, 0x185: 0x8100, - 0x186: 0x8100, - 0x18d: 0x2f8b, 0x18e: 0x3297, 0x18f: 0x3099, 0x190: 0x33a5, 0x191: 0x3143, - 0x192: 0x3454, 0x193: 0x31d9, 0x194: 0x34ef, 0x195: 0x39d2, 0x196: 0x3b61, 0x197: 0x39cb, - 0x198: 0x3b5a, 0x199: 0x39d9, 0x19a: 0x3b68, 0x19b: 0x39c4, 0x19c: 0x3b53, - 0x19e: 0x38b3, 0x19f: 0x3a42, 0x1a0: 0x38ac, 0x1a1: 0x3a3b, 0x1a2: 0x35b6, 0x1a3: 0x35c8, - 0x1a6: 0x3044, 0x1a7: 0x3350, 0x1a8: 0x30c1, 0x1a9: 0x33d2, - 0x1aa: 0x46ef, 0x1ab: 0x4780, 0x1ac: 0x3993, 0x1ad: 0x3b22, 0x1ae: 0x35da, 0x1af: 0x35e0, - 0x1b0: 0x33c8, 0x1b4: 0x302b, 0x1b5: 0x3337, - 0x1b8: 0x30fd, 0x1b9: 0x340e, 0x1ba: 0x38ba, 0x1bb: 0x3a49, - 0x1bc: 0x35b0, 0x1bd: 0x35c2, 0x1be: 0x35bc, 0x1bf: 0x35ce, - // Block 0x7, offset 0x1c0 - 0x1c0: 0x2f90, 0x1c1: 0x329c, 0x1c2: 0x2f95, 0x1c3: 0x32a1, 0x1c4: 0x300d, 0x1c5: 0x3319, - 0x1c6: 0x3012, 0x1c7: 0x331e, 0x1c8: 0x309e, 0x1c9: 0x33aa, 0x1ca: 0x30a3, 0x1cb: 0x33af, - 0x1cc: 0x3148, 0x1cd: 0x3459, 0x1ce: 0x314d, 0x1cf: 0x345e, 0x1d0: 0x316b, 0x1d1: 0x347c, - 0x1d2: 0x3170, 0x1d3: 0x3481, 0x1d4: 0x31de, 0x1d5: 0x34f4, 0x1d6: 0x31e3, 0x1d7: 0x34f9, - 0x1d8: 0x3189, 0x1d9: 0x349a, 0x1da: 0x31a2, 0x1db: 0x34b8, - 0x1de: 0x305d, 0x1df: 0x3369, - 0x1e6: 0x4695, 0x1e7: 0x4726, 0x1e8: 0x46bd, 0x1e9: 0x474e, - 0x1ea: 0x3962, 0x1eb: 0x3af1, 0x1ec: 0x393f, 0x1ed: 0x3ace, 0x1ee: 0x46db, 0x1ef: 0x476c, - 0x1f0: 0x395b, 0x1f1: 0x3aea, 0x1f2: 0x3247, 0x1f3: 0x3562, - // Block 0x8, offset 0x200 - 0x200: 0x9932, 0x201: 0x9932, 0x202: 0x9932, 0x203: 0x9932, 0x204: 0x9932, 0x205: 0x8132, - 0x206: 0x9932, 0x207: 0x9932, 0x208: 0x9932, 0x209: 0x9932, 0x20a: 0x9932, 0x20b: 0x9932, - 0x20c: 0x9932, 0x20d: 0x8132, 0x20e: 0x8132, 0x20f: 0x9932, 0x210: 0x8132, 0x211: 0x9932, - 0x212: 0x8132, 0x213: 0x9932, 0x214: 0x9932, 0x215: 0x8133, 0x216: 0x812d, 0x217: 0x812d, - 0x218: 0x812d, 0x219: 0x812d, 0x21a: 0x8133, 0x21b: 0x992b, 0x21c: 0x812d, 0x21d: 0x812d, - 0x21e: 0x812d, 0x21f: 0x812d, 0x220: 0x812d, 0x221: 0x8129, 0x222: 0x8129, 0x223: 0x992d, - 0x224: 0x992d, 0x225: 0x992d, 0x226: 0x992d, 0x227: 0x9929, 0x228: 0x9929, 0x229: 0x812d, - 0x22a: 0x812d, 0x22b: 0x812d, 0x22c: 0x812d, 0x22d: 0x992d, 0x22e: 0x992d, 0x22f: 0x812d, - 0x230: 0x992d, 0x231: 0x992d, 0x232: 0x812d, 0x233: 0x812d, 0x234: 0x8101, 0x235: 0x8101, - 0x236: 0x8101, 0x237: 0x8101, 0x238: 0x9901, 0x239: 0x812d, 0x23a: 0x812d, 0x23b: 0x812d, - 0x23c: 0x812d, 0x23d: 0x8132, 0x23e: 0x8132, 0x23f: 0x8132, - // Block 0x9, offset 0x240 - 0x240: 0x49b1, 0x241: 0x49b6, 0x242: 0x9932, 0x243: 0x49bb, 0x244: 0x4a74, 0x245: 0x9936, - 0x246: 0x8132, 0x247: 0x812d, 0x248: 0x812d, 0x249: 0x812d, 0x24a: 0x8132, 0x24b: 0x8132, - 0x24c: 0x8132, 0x24d: 0x812d, 0x24e: 0x812d, 0x250: 0x8132, 0x251: 0x8132, - 0x252: 0x8132, 0x253: 0x812d, 0x254: 0x812d, 0x255: 0x812d, 0x256: 0x812d, 0x257: 0x8132, - 0x258: 0x8133, 0x259: 0x812d, 0x25a: 0x812d, 0x25b: 0x8132, 0x25c: 0x8134, 0x25d: 0x8135, - 0x25e: 0x8135, 0x25f: 0x8134, 0x260: 0x8135, 0x261: 0x8135, 0x262: 0x8134, 0x263: 0x8132, - 0x264: 0x8132, 0x265: 0x8132, 0x266: 0x8132, 0x267: 0x8132, 0x268: 0x8132, 0x269: 0x8132, - 0x26a: 0x8132, 0x26b: 0x8132, 0x26c: 0x8132, 0x26d: 0x8132, 0x26e: 0x8132, 0x26f: 0x8132, - 0x274: 0x0170, - 0x27a: 0x8100, - 0x27e: 0x0037, - // Block 0xa, offset 0x280 - 0x284: 0x8100, 0x285: 0x35a4, - 0x286: 0x35ec, 0x287: 0x00ce, 0x288: 0x360a, 0x289: 0x3616, 0x28a: 0x3628, - 0x28c: 0x3646, 0x28e: 0x3658, 0x28f: 0x3676, 0x290: 0x3e0b, 0x291: 0xa000, - 0x295: 0xa000, 0x297: 0xa000, - 0x299: 0xa000, - 0x29f: 0xa000, 0x2a1: 0xa000, - 0x2a5: 0xa000, 0x2a9: 0xa000, - 0x2aa: 0x363a, 0x2ab: 0x366a, 0x2ac: 0x4801, 0x2ad: 0x369a, 0x2ae: 0x482b, 0x2af: 0x36ac, - 0x2b0: 0x3e73, 0x2b1: 0xa000, 0x2b5: 0xa000, - 0x2b7: 0xa000, 0x2b9: 0xa000, - 0x2bf: 0xa000, - // Block 0xb, offset 0x2c0 - 0x2c0: 0x3724, 0x2c1: 0x3730, 0x2c3: 0x371e, - 0x2c6: 0xa000, 0x2c7: 0x370c, - 0x2cc: 0x3760, 0x2cd: 0x3748, 0x2ce: 0x3772, 0x2d0: 0xa000, - 0x2d3: 0xa000, 0x2d5: 0xa000, 0x2d6: 0xa000, 0x2d7: 0xa000, - 0x2d8: 0xa000, 0x2d9: 0x3754, 0x2da: 0xa000, - 0x2de: 0xa000, 0x2e3: 0xa000, - 0x2e7: 0xa000, - 0x2eb: 0xa000, 0x2ed: 0xa000, - 0x2f0: 0xa000, 0x2f3: 0xa000, 0x2f5: 0xa000, - 0x2f6: 0xa000, 0x2f7: 0xa000, 0x2f8: 0xa000, 0x2f9: 0x37d8, 0x2fa: 0xa000, - 0x2fe: 0xa000, - // Block 0xc, offset 0x300 - 0x301: 0x3736, 0x302: 0x37ba, - 0x310: 0x3712, 0x311: 0x3796, - 0x312: 0x3718, 0x313: 0x379c, 0x316: 0x372a, 0x317: 0x37ae, - 0x318: 0xa000, 0x319: 0xa000, 0x31a: 0x382c, 0x31b: 0x3832, 0x31c: 0x373c, 0x31d: 0x37c0, - 0x31e: 0x3742, 0x31f: 0x37c6, 0x322: 0x374e, 0x323: 0x37d2, - 0x324: 0x375a, 0x325: 0x37de, 0x326: 0x3766, 0x327: 0x37ea, 0x328: 0xa000, 0x329: 0xa000, - 0x32a: 0x3838, 0x32b: 0x383e, 0x32c: 0x3790, 0x32d: 0x3814, 0x32e: 0x376c, 0x32f: 0x37f0, - 0x330: 0x3778, 0x331: 0x37fc, 0x332: 0x377e, 0x333: 0x3802, 0x334: 0x3784, 0x335: 0x3808, - 0x338: 0x378a, 0x339: 0x380e, - // Block 0xd, offset 0x340 - 0x351: 0x812d, - 0x352: 0x8132, 0x353: 0x8132, 0x354: 0x8132, 0x355: 0x8132, 0x356: 0x812d, 0x357: 0x8132, - 0x358: 0x8132, 0x359: 0x8132, 0x35a: 0x812e, 0x35b: 0x812d, 0x35c: 0x8132, 0x35d: 0x8132, - 0x35e: 0x8132, 0x35f: 0x8132, 0x360: 0x8132, 0x361: 0x8132, 0x362: 0x812d, 0x363: 0x812d, - 0x364: 0x812d, 0x365: 0x812d, 0x366: 0x812d, 0x367: 0x812d, 0x368: 0x8132, 0x369: 0x8132, - 0x36a: 0x812d, 0x36b: 0x8132, 0x36c: 0x8132, 0x36d: 0x812e, 0x36e: 0x8131, 0x36f: 0x8132, - 0x370: 0x8105, 0x371: 0x8106, 0x372: 0x8107, 0x373: 0x8108, 0x374: 0x8109, 0x375: 0x810a, - 0x376: 0x810b, 0x377: 0x810c, 0x378: 0x810d, 0x379: 0x810e, 0x37a: 0x810e, 0x37b: 0x810f, - 0x37c: 0x8110, 0x37d: 0x8111, 0x37f: 0x8112, - // Block 0xe, offset 0x380 - 0x388: 0xa000, 0x38a: 0xa000, 0x38b: 0x8116, - 0x38c: 0x8117, 0x38d: 0x8118, 0x38e: 0x8119, 0x38f: 0x811a, 0x390: 0x811b, 0x391: 0x811c, - 0x392: 0x811d, 0x393: 0x9932, 0x394: 0x9932, 0x395: 0x992d, 0x396: 0x812d, 0x397: 0x8132, - 0x398: 0x8132, 0x399: 0x8132, 0x39a: 0x8132, 0x39b: 0x8132, 0x39c: 0x812d, 0x39d: 0x8132, - 0x39e: 0x8132, 0x39f: 0x812d, - 0x3b0: 0x811e, - // Block 0xf, offset 0x3c0 - 0x3d3: 0x812d, 0x3d4: 0x8132, 0x3d5: 0x8132, 0x3d6: 0x8132, 0x3d7: 0x8132, - 0x3d8: 0x8132, 0x3d9: 0x8132, 0x3da: 0x8132, 0x3db: 0x8132, 0x3dc: 0x8132, 0x3dd: 0x8132, - 0x3de: 0x8132, 0x3df: 0x8132, 0x3e0: 0x8132, 0x3e1: 0x8132, 0x3e3: 0x812d, - 0x3e4: 0x8132, 0x3e5: 0x8132, 0x3e6: 0x812d, 0x3e7: 0x8132, 0x3e8: 0x8132, 0x3e9: 0x812d, - 0x3ea: 0x8132, 0x3eb: 0x8132, 0x3ec: 0x8132, 0x3ed: 0x812d, 0x3ee: 0x812d, 0x3ef: 0x812d, - 0x3f0: 0x8116, 0x3f1: 0x8117, 0x3f2: 0x8118, 0x3f3: 0x8132, 0x3f4: 0x8132, 0x3f5: 0x8132, - 0x3f6: 0x812d, 0x3f7: 0x8132, 0x3f8: 0x8132, 0x3f9: 0x812d, 0x3fa: 0x812d, 0x3fb: 0x8132, - 0x3fc: 0x8132, 0x3fd: 0x8132, 0x3fe: 0x8132, 0x3ff: 0x8132, - // Block 0x10, offset 0x400 - 0x405: 0xa000, - 0x406: 0x2d29, 0x407: 0xa000, 0x408: 0x2d31, 0x409: 0xa000, 0x40a: 0x2d39, 0x40b: 0xa000, - 0x40c: 0x2d41, 0x40d: 0xa000, 0x40e: 0x2d49, 0x411: 0xa000, - 0x412: 0x2d51, - 0x434: 0x8102, 0x435: 0x9900, - 0x43a: 0xa000, 0x43b: 0x2d59, - 0x43c: 0xa000, 0x43d: 0x2d61, 0x43e: 0xa000, 0x43f: 0xa000, - // Block 0x11, offset 0x440 - 0x440: 0x8132, 0x441: 0x8132, 0x442: 0x812d, 0x443: 0x8132, 0x444: 0x8132, 0x445: 0x8132, - 0x446: 0x8132, 0x447: 0x8132, 0x448: 0x8132, 0x449: 0x8132, 0x44a: 0x812d, 0x44b: 0x8132, - 0x44c: 0x8132, 0x44d: 0x8135, 0x44e: 0x812a, 0x44f: 0x812d, 0x450: 0x8129, 0x451: 0x8132, - 0x452: 0x8132, 0x453: 0x8132, 0x454: 0x8132, 0x455: 0x8132, 0x456: 0x8132, 0x457: 0x8132, - 0x458: 0x8132, 0x459: 0x8132, 0x45a: 0x8132, 0x45b: 0x8132, 0x45c: 0x8132, 0x45d: 0x8132, - 0x45e: 0x8132, 0x45f: 0x8132, 0x460: 0x8132, 0x461: 0x8132, 0x462: 0x8132, 0x463: 0x8132, - 0x464: 0x8132, 0x465: 0x8132, 0x466: 0x8132, 0x467: 0x8132, 0x468: 0x8132, 0x469: 0x8132, - 0x46a: 0x8132, 0x46b: 0x8132, 0x46c: 0x8132, 0x46d: 0x8132, 0x46e: 0x8132, 0x46f: 0x8132, - 0x470: 0x8132, 0x471: 0x8132, 0x472: 0x8132, 0x473: 0x8132, 0x474: 0x8132, 0x475: 0x8132, - 0x476: 0x8133, 0x477: 0x8131, 0x478: 0x8131, 0x479: 0x812d, 0x47b: 0x8132, - 0x47c: 0x8134, 0x47d: 0x812d, 0x47e: 0x8132, 0x47f: 0x812d, - // Block 0x12, offset 0x480 - 0x480: 0x2f9a, 0x481: 0x32a6, 0x482: 0x2fa4, 0x483: 0x32b0, 0x484: 0x2fa9, 0x485: 0x32b5, - 0x486: 0x2fae, 0x487: 0x32ba, 0x488: 0x38cf, 0x489: 0x3a5e, 0x48a: 0x2fc7, 0x48b: 0x32d3, - 0x48c: 0x2fd1, 0x48d: 0x32dd, 0x48e: 0x2fe0, 0x48f: 0x32ec, 0x490: 0x2fd6, 0x491: 0x32e2, - 0x492: 0x2fdb, 0x493: 0x32e7, 0x494: 0x38f2, 0x495: 0x3a81, 0x496: 0x38f9, 0x497: 0x3a88, - 0x498: 0x301c, 0x499: 0x3328, 0x49a: 0x3021, 0x49b: 0x332d, 0x49c: 0x3907, 0x49d: 0x3a96, - 0x49e: 0x3026, 0x49f: 0x3332, 0x4a0: 0x3035, 0x4a1: 0x3341, 0x4a2: 0x3053, 0x4a3: 0x335f, - 0x4a4: 0x3062, 0x4a5: 0x336e, 0x4a6: 0x3058, 0x4a7: 0x3364, 0x4a8: 0x3067, 0x4a9: 0x3373, - 0x4aa: 0x306c, 0x4ab: 0x3378, 0x4ac: 0x30b2, 0x4ad: 0x33be, 0x4ae: 0x390e, 0x4af: 0x3a9d, - 0x4b0: 0x30bc, 0x4b1: 0x33cd, 0x4b2: 0x30c6, 0x4b3: 0x33d7, 0x4b4: 0x30d0, 0x4b5: 0x33e1, - 0x4b6: 0x46c7, 0x4b7: 0x4758, 0x4b8: 0x3915, 0x4b9: 0x3aa4, 0x4ba: 0x30e9, 0x4bb: 0x33fa, - 0x4bc: 0x30e4, 0x4bd: 0x33f5, 0x4be: 0x30ee, 0x4bf: 0x33ff, - // Block 0x13, offset 0x4c0 - 0x4c0: 0x30f3, 0x4c1: 0x3404, 0x4c2: 0x30f8, 0x4c3: 0x3409, 0x4c4: 0x310c, 0x4c5: 0x341d, - 0x4c6: 0x3116, 0x4c7: 0x3427, 0x4c8: 0x3125, 0x4c9: 0x3436, 0x4ca: 0x3120, 0x4cb: 0x3431, - 0x4cc: 0x3938, 0x4cd: 0x3ac7, 0x4ce: 0x3946, 0x4cf: 0x3ad5, 0x4d0: 0x394d, 0x4d1: 0x3adc, - 0x4d2: 0x3954, 0x4d3: 0x3ae3, 0x4d4: 0x3152, 0x4d5: 0x3463, 0x4d6: 0x3157, 0x4d7: 0x3468, - 0x4d8: 0x3161, 0x4d9: 0x3472, 0x4da: 0x46f4, 0x4db: 0x4785, 0x4dc: 0x399a, 0x4dd: 0x3b29, - 0x4de: 0x317a, 0x4df: 0x348b, 0x4e0: 0x3184, 0x4e1: 0x3495, 0x4e2: 0x4703, 0x4e3: 0x4794, - 0x4e4: 0x39a1, 0x4e5: 0x3b30, 0x4e6: 0x39a8, 0x4e7: 0x3b37, 0x4e8: 0x39af, 0x4e9: 0x3b3e, - 0x4ea: 0x3193, 0x4eb: 0x34a4, 0x4ec: 0x319d, 0x4ed: 0x34b3, 0x4ee: 0x31b1, 0x4ef: 0x34c7, - 0x4f0: 0x31ac, 0x4f1: 0x34c2, 0x4f2: 0x31ed, 0x4f3: 0x3503, 0x4f4: 0x31fc, 0x4f5: 0x3512, - 0x4f6: 0x31f7, 0x4f7: 0x350d, 0x4f8: 0x39b6, 0x4f9: 0x3b45, 0x4fa: 0x39bd, 0x4fb: 0x3b4c, - 0x4fc: 0x3201, 0x4fd: 0x3517, 0x4fe: 0x3206, 0x4ff: 0x351c, - // Block 0x14, offset 0x500 - 0x500: 0x320b, 0x501: 0x3521, 0x502: 0x3210, 0x503: 0x3526, 0x504: 0x321f, 0x505: 0x3535, - 0x506: 0x321a, 0x507: 0x3530, 0x508: 0x3224, 0x509: 0x353f, 0x50a: 0x3229, 0x50b: 0x3544, - 0x50c: 0x322e, 0x50d: 0x3549, 0x50e: 0x324c, 0x50f: 0x3567, 0x510: 0x3265, 0x511: 0x3585, - 0x512: 0x3274, 0x513: 0x3594, 0x514: 0x3279, 0x515: 0x3599, 0x516: 0x337d, 0x517: 0x34a9, - 0x518: 0x353a, 0x519: 0x3576, 0x51b: 0x35d4, - 0x520: 0x46a4, 0x521: 0x4735, 0x522: 0x2f86, 0x523: 0x3292, - 0x524: 0x387b, 0x525: 0x3a0a, 0x526: 0x3874, 0x527: 0x3a03, 0x528: 0x3889, 0x529: 0x3a18, - 0x52a: 0x3882, 0x52b: 0x3a11, 0x52c: 0x38c1, 0x52d: 0x3a50, 0x52e: 0x3897, 0x52f: 0x3a26, - 0x530: 0x3890, 0x531: 0x3a1f, 0x532: 0x38a5, 0x533: 0x3a34, 0x534: 0x389e, 0x535: 0x3a2d, - 0x536: 0x38c8, 0x537: 0x3a57, 0x538: 0x46b8, 0x539: 0x4749, 0x53a: 0x3003, 0x53b: 0x330f, - 0x53c: 0x2fef, 0x53d: 0x32fb, 0x53e: 0x38dd, 0x53f: 0x3a6c, - // Block 0x15, offset 0x540 - 0x540: 0x38d6, 0x541: 0x3a65, 0x542: 0x38eb, 0x543: 0x3a7a, 0x544: 0x38e4, 0x545: 0x3a73, - 0x546: 0x3900, 0x547: 0x3a8f, 0x548: 0x3094, 0x549: 0x33a0, 0x54a: 0x30a8, 0x54b: 0x33b4, - 0x54c: 0x46ea, 0x54d: 0x477b, 0x54e: 0x3139, 0x54f: 0x344a, 0x550: 0x3923, 0x551: 0x3ab2, - 0x552: 0x391c, 0x553: 0x3aab, 0x554: 0x3931, 0x555: 0x3ac0, 0x556: 0x392a, 0x557: 0x3ab9, - 0x558: 0x398c, 0x559: 0x3b1b, 0x55a: 0x3970, 0x55b: 0x3aff, 0x55c: 0x3969, 0x55d: 0x3af8, - 0x55e: 0x397e, 0x55f: 0x3b0d, 0x560: 0x3977, 0x561: 0x3b06, 0x562: 0x3985, 0x563: 0x3b14, - 0x564: 0x31e8, 0x565: 0x34fe, 0x566: 0x31ca, 0x567: 0x34e0, 0x568: 0x39e7, 0x569: 0x3b76, - 0x56a: 0x39e0, 0x56b: 0x3b6f, 0x56c: 0x39f5, 0x56d: 0x3b84, 0x56e: 0x39ee, 0x56f: 0x3b7d, - 0x570: 0x39fc, 0x571: 0x3b8b, 0x572: 0x3233, 0x573: 0x354e, 0x574: 0x325b, 0x575: 0x357b, - 0x576: 0x3256, 0x577: 0x3571, 0x578: 0x3242, 0x579: 0x355d, - // Block 0x16, offset 0x580 - 0x580: 0x4807, 0x581: 0x480d, 0x582: 0x4921, 0x583: 0x4939, 0x584: 0x4929, 0x585: 0x4941, - 0x586: 0x4931, 0x587: 0x4949, 0x588: 0x47ad, 0x589: 0x47b3, 0x58a: 0x4891, 0x58b: 0x48a9, - 0x58c: 0x4899, 0x58d: 0x48b1, 0x58e: 0x48a1, 0x58f: 0x48b9, 0x590: 0x4819, 0x591: 0x481f, - 0x592: 0x3dbb, 0x593: 0x3dcb, 0x594: 0x3dc3, 0x595: 0x3dd3, - 0x598: 0x47b9, 0x599: 0x47bf, 0x59a: 0x3ceb, 0x59b: 0x3cfb, 0x59c: 0x3cf3, 0x59d: 0x3d03, - 0x5a0: 0x4831, 0x5a1: 0x4837, 0x5a2: 0x4951, 0x5a3: 0x4969, - 0x5a4: 0x4959, 0x5a5: 0x4971, 0x5a6: 0x4961, 0x5a7: 0x4979, 0x5a8: 0x47c5, 0x5a9: 0x47cb, - 0x5aa: 0x48c1, 0x5ab: 0x48d9, 0x5ac: 0x48c9, 0x5ad: 0x48e1, 0x5ae: 0x48d1, 0x5af: 0x48e9, - 0x5b0: 0x4849, 0x5b1: 0x484f, 0x5b2: 0x3e1b, 0x5b3: 0x3e33, 0x5b4: 0x3e23, 0x5b5: 0x3e3b, - 0x5b6: 0x3e2b, 0x5b7: 0x3e43, 0x5b8: 0x47d1, 0x5b9: 0x47d7, 0x5ba: 0x3d1b, 0x5bb: 0x3d33, - 0x5bc: 0x3d23, 0x5bd: 0x3d3b, 0x5be: 0x3d2b, 0x5bf: 0x3d43, - // Block 0x17, offset 0x5c0 - 0x5c0: 0x4855, 0x5c1: 0x485b, 0x5c2: 0x3e4b, 0x5c3: 0x3e5b, 0x5c4: 0x3e53, 0x5c5: 0x3e63, - 0x5c8: 0x47dd, 0x5c9: 0x47e3, 0x5ca: 0x3d4b, 0x5cb: 0x3d5b, - 0x5cc: 0x3d53, 0x5cd: 0x3d63, 0x5d0: 0x4867, 0x5d1: 0x486d, - 0x5d2: 0x3e83, 0x5d3: 0x3e9b, 0x5d4: 0x3e8b, 0x5d5: 0x3ea3, 0x5d6: 0x3e93, 0x5d7: 0x3eab, - 0x5d9: 0x47e9, 0x5db: 0x3d6b, 0x5dd: 0x3d73, - 0x5df: 0x3d7b, 0x5e0: 0x487f, 0x5e1: 0x4885, 0x5e2: 0x4981, 0x5e3: 0x4999, - 0x5e4: 0x4989, 0x5e5: 0x49a1, 0x5e6: 0x4991, 0x5e7: 0x49a9, 0x5e8: 0x47ef, 0x5e9: 0x47f5, - 0x5ea: 0x48f1, 0x5eb: 0x4909, 0x5ec: 0x48f9, 0x5ed: 0x4911, 0x5ee: 0x4901, 0x5ef: 0x4919, - 0x5f0: 0x47fb, 0x5f1: 0x4321, 0x5f2: 0x3694, 0x5f3: 0x4327, 0x5f4: 0x4825, 0x5f5: 0x432d, - 0x5f6: 0x36a6, 0x5f7: 0x4333, 0x5f8: 0x36c4, 0x5f9: 0x4339, 0x5fa: 0x36dc, 0x5fb: 0x433f, - 0x5fc: 0x4873, 0x5fd: 0x4345, - // Block 0x18, offset 0x600 - 0x600: 0x3da3, 0x601: 0x3dab, 0x602: 0x4187, 0x603: 0x41a5, 0x604: 0x4191, 0x605: 0x41af, - 0x606: 0x419b, 0x607: 0x41b9, 0x608: 0x3cdb, 0x609: 0x3ce3, 0x60a: 0x40d3, 0x60b: 0x40f1, - 0x60c: 0x40dd, 0x60d: 0x40fb, 0x60e: 0x40e7, 0x60f: 0x4105, 0x610: 0x3deb, 0x611: 0x3df3, - 0x612: 0x41c3, 0x613: 0x41e1, 0x614: 0x41cd, 0x615: 0x41eb, 0x616: 0x41d7, 0x617: 0x41f5, - 0x618: 0x3d0b, 0x619: 0x3d13, 0x61a: 0x410f, 0x61b: 0x412d, 0x61c: 0x4119, 0x61d: 0x4137, - 0x61e: 0x4123, 0x61f: 0x4141, 0x620: 0x3ec3, 0x621: 0x3ecb, 0x622: 0x41ff, 0x623: 0x421d, - 0x624: 0x4209, 0x625: 0x4227, 0x626: 0x4213, 0x627: 0x4231, 0x628: 0x3d83, 0x629: 0x3d8b, - 0x62a: 0x414b, 0x62b: 0x4169, 0x62c: 0x4155, 0x62d: 0x4173, 0x62e: 0x415f, 0x62f: 0x417d, - 0x630: 0x3688, 0x631: 0x3682, 0x632: 0x3d93, 0x633: 0x368e, 0x634: 0x3d9b, - 0x636: 0x4813, 0x637: 0x3db3, 0x638: 0x35f8, 0x639: 0x35f2, 0x63a: 0x35e6, 0x63b: 0x42f1, - 0x63c: 0x35fe, 0x63d: 0x8100, 0x63e: 0x01d3, 0x63f: 0xa100, - // Block 0x19, offset 0x640 - 0x640: 0x8100, 0x641: 0x35aa, 0x642: 0x3ddb, 0x643: 0x36a0, 0x644: 0x3de3, - 0x646: 0x483d, 0x647: 0x3dfb, 0x648: 0x3604, 0x649: 0x42f7, 0x64a: 0x3610, 0x64b: 0x42fd, - 0x64c: 0x361c, 0x64d: 0x3b92, 0x64e: 0x3b99, 0x64f: 0x3ba0, 0x650: 0x36b8, 0x651: 0x36b2, - 0x652: 0x3e03, 0x653: 0x44e7, 0x656: 0x36be, 0x657: 0x3e13, - 0x658: 0x3634, 0x659: 0x362e, 0x65a: 0x3622, 0x65b: 0x4303, 0x65d: 0x3ba7, - 0x65e: 0x3bae, 0x65f: 0x3bb5, 0x660: 0x36ee, 0x661: 0x36e8, 0x662: 0x3e6b, 0x663: 0x44ef, - 0x664: 0x36d0, 0x665: 0x36d6, 0x666: 0x36f4, 0x667: 0x3e7b, 0x668: 0x3664, 0x669: 0x365e, - 0x66a: 0x3652, 0x66b: 0x430f, 0x66c: 0x364c, 0x66d: 0x359e, 0x66e: 0x42eb, 0x66f: 0x0081, - 0x672: 0x3eb3, 0x673: 0x36fa, 0x674: 0x3ebb, - 0x676: 0x488b, 0x677: 0x3ed3, 0x678: 0x3640, 0x679: 0x4309, 0x67a: 0x3670, 0x67b: 0x431b, - 0x67c: 0x367c, 0x67d: 0x4259, 0x67e: 0xa100, - // Block 0x1a, offset 0x680 - 0x681: 0x3c09, 0x683: 0xa000, 0x684: 0x3c10, 0x685: 0xa000, - 0x687: 0x3c17, 0x688: 0xa000, 0x689: 0x3c1e, - 0x68d: 0xa000, - 0x6a0: 0x2f68, 0x6a1: 0xa000, 0x6a2: 0x3c2c, - 0x6a4: 0xa000, 0x6a5: 0xa000, - 0x6ad: 0x3c25, 0x6ae: 0x2f63, 0x6af: 0x2f6d, - 0x6b0: 0x3c33, 0x6b1: 0x3c3a, 0x6b2: 0xa000, 0x6b3: 0xa000, 0x6b4: 0x3c41, 0x6b5: 0x3c48, - 0x6b6: 0xa000, 0x6b7: 0xa000, 0x6b8: 0x3c4f, 0x6b9: 0x3c56, 0x6ba: 0xa000, 0x6bb: 0xa000, - 0x6bc: 0xa000, 0x6bd: 0xa000, - // Block 0x1b, offset 0x6c0 - 0x6c0: 0x3c5d, 0x6c1: 0x3c64, 0x6c2: 0xa000, 0x6c3: 0xa000, 0x6c4: 0x3c79, 0x6c5: 0x3c80, - 0x6c6: 0xa000, 0x6c7: 0xa000, 0x6c8: 0x3c87, 0x6c9: 0x3c8e, - 0x6d1: 0xa000, - 0x6d2: 0xa000, - 0x6e2: 0xa000, - 0x6e8: 0xa000, 0x6e9: 0xa000, - 0x6eb: 0xa000, 0x6ec: 0x3ca3, 0x6ed: 0x3caa, 0x6ee: 0x3cb1, 0x6ef: 0x3cb8, - 0x6f2: 0xa000, 0x6f3: 0xa000, 0x6f4: 0xa000, 0x6f5: 0xa000, - // Block 0x1c, offset 0x700 - 0x706: 0xa000, 0x70b: 0xa000, - 0x70c: 0x3f0b, 0x70d: 0xa000, 0x70e: 0x3f13, 0x70f: 0xa000, 0x710: 0x3f1b, 0x711: 0xa000, - 0x712: 0x3f23, 0x713: 0xa000, 0x714: 0x3f2b, 0x715: 0xa000, 0x716: 0x3f33, 0x717: 0xa000, - 0x718: 0x3f3b, 0x719: 0xa000, 0x71a: 0x3f43, 0x71b: 0xa000, 0x71c: 0x3f4b, 0x71d: 0xa000, - 0x71e: 0x3f53, 0x71f: 0xa000, 0x720: 0x3f5b, 0x721: 0xa000, 0x722: 0x3f63, - 0x724: 0xa000, 0x725: 0x3f6b, 0x726: 0xa000, 0x727: 0x3f73, 0x728: 0xa000, 0x729: 0x3f7b, - 0x72f: 0xa000, - 0x730: 0x3f83, 0x731: 0x3f8b, 0x732: 0xa000, 0x733: 0x3f93, 0x734: 0x3f9b, 0x735: 0xa000, - 0x736: 0x3fa3, 0x737: 0x3fab, 0x738: 0xa000, 0x739: 0x3fb3, 0x73a: 0x3fbb, 0x73b: 0xa000, - 0x73c: 0x3fc3, 0x73d: 0x3fcb, - // Block 0x1d, offset 0x740 - 0x754: 0x3f03, - 0x759: 0x9903, 0x75a: 0x9903, 0x75b: 0x8100, 0x75c: 0x8100, 0x75d: 0xa000, - 0x75e: 0x3fd3, - 0x766: 0xa000, - 0x76b: 0xa000, 0x76c: 0x3fe3, 0x76d: 0xa000, 0x76e: 0x3feb, 0x76f: 0xa000, - 0x770: 0x3ff3, 0x771: 0xa000, 0x772: 0x3ffb, 0x773: 0xa000, 0x774: 0x4003, 0x775: 0xa000, - 0x776: 0x400b, 0x777: 0xa000, 0x778: 0x4013, 0x779: 0xa000, 0x77a: 0x401b, 0x77b: 0xa000, - 0x77c: 0x4023, 0x77d: 0xa000, 0x77e: 0x402b, 0x77f: 0xa000, - // Block 0x1e, offset 0x780 - 0x780: 0x4033, 0x781: 0xa000, 0x782: 0x403b, 0x784: 0xa000, 0x785: 0x4043, - 0x786: 0xa000, 0x787: 0x404b, 0x788: 0xa000, 0x789: 0x4053, - 0x78f: 0xa000, 0x790: 0x405b, 0x791: 0x4063, - 0x792: 0xa000, 0x793: 0x406b, 0x794: 0x4073, 0x795: 0xa000, 0x796: 0x407b, 0x797: 0x4083, - 0x798: 0xa000, 0x799: 0x408b, 0x79a: 0x4093, 0x79b: 0xa000, 0x79c: 0x409b, 0x79d: 0x40a3, - 0x7af: 0xa000, - 0x7b0: 0xa000, 0x7b1: 0xa000, 0x7b2: 0xa000, 0x7b4: 0x3fdb, - 0x7b7: 0x40ab, 0x7b8: 0x40b3, 0x7b9: 0x40bb, 0x7ba: 0x40c3, - 0x7bd: 0xa000, 0x7be: 0x40cb, - // Block 0x1f, offset 0x7c0 - 0x7c0: 0x1377, 0x7c1: 0x0cfb, 0x7c2: 0x13d3, 0x7c3: 0x139f, 0x7c4: 0x0e57, 0x7c5: 0x06eb, - 0x7c6: 0x08df, 0x7c7: 0x162b, 0x7c8: 0x162b, 0x7c9: 0x0a0b, 0x7ca: 0x145f, 0x7cb: 0x0943, - 0x7cc: 0x0a07, 0x7cd: 0x0bef, 0x7ce: 0x0fcf, 0x7cf: 0x115f, 0x7d0: 0x1297, 0x7d1: 0x12d3, - 0x7d2: 0x1307, 0x7d3: 0x141b, 0x7d4: 0x0d73, 0x7d5: 0x0dff, 0x7d6: 0x0eab, 0x7d7: 0x0f43, - 0x7d8: 0x125f, 0x7d9: 0x1447, 0x7da: 0x1573, 0x7db: 0x070f, 0x7dc: 0x08b3, 0x7dd: 0x0d87, - 0x7de: 0x0ecf, 0x7df: 0x1293, 0x7e0: 0x15c3, 0x7e1: 0x0ab3, 0x7e2: 0x0e77, 0x7e3: 0x1283, - 0x7e4: 0x1317, 0x7e5: 0x0c23, 0x7e6: 0x11bb, 0x7e7: 0x12df, 0x7e8: 0x0b1f, 0x7e9: 0x0d0f, - 0x7ea: 0x0e17, 0x7eb: 0x0f1b, 0x7ec: 0x1427, 0x7ed: 0x074f, 0x7ee: 0x07e7, 0x7ef: 0x0853, - 0x7f0: 0x0c8b, 0x7f1: 0x0d7f, 0x7f2: 0x0ecb, 0x7f3: 0x0fef, 0x7f4: 0x1177, 0x7f5: 0x128b, - 0x7f6: 0x12a3, 0x7f7: 0x13c7, 0x7f8: 0x14ef, 0x7f9: 0x15a3, 0x7fa: 0x15bf, 0x7fb: 0x102b, - 0x7fc: 0x106b, 0x7fd: 0x1123, 0x7fe: 0x1243, 0x7ff: 0x147b, - // Block 0x20, offset 0x800 - 0x800: 0x15cb, 0x801: 0x134b, 0x802: 0x09c7, 0x803: 0x0b3b, 0x804: 0x10db, 0x805: 0x119b, - 0x806: 0x0eff, 0x807: 0x1033, 0x808: 0x1397, 0x809: 0x14e7, 0x80a: 0x09c3, 0x80b: 0x0a8f, - 0x80c: 0x0d77, 0x80d: 0x0e2b, 0x80e: 0x0e5f, 0x80f: 0x1113, 0x810: 0x113b, 0x811: 0x14a7, - 0x812: 0x084f, 0x813: 0x11a7, 0x814: 0x07f3, 0x815: 0x07ef, 0x816: 0x1097, 0x817: 0x1127, - 0x818: 0x125b, 0x819: 0x14af, 0x81a: 0x1367, 0x81b: 0x0c27, 0x81c: 0x0d73, 0x81d: 0x1357, - 0x81e: 0x06f7, 0x81f: 0x0a63, 0x820: 0x0b93, 0x821: 0x0f2f, 0x822: 0x0faf, 0x823: 0x0873, - 0x824: 0x103b, 0x825: 0x075f, 0x826: 0x0b77, 0x827: 0x06d7, 0x828: 0x0deb, 0x829: 0x0ca3, - 0x82a: 0x110f, 0x82b: 0x08c7, 0x82c: 0x09b3, 0x82d: 0x0ffb, 0x82e: 0x1263, 0x82f: 0x133b, - 0x830: 0x0db7, 0x831: 0x13f7, 0x832: 0x0de3, 0x833: 0x0c37, 0x834: 0x121b, 0x835: 0x0c57, - 0x836: 0x0fab, 0x837: 0x072b, 0x838: 0x07a7, 0x839: 0x07eb, 0x83a: 0x0d53, 0x83b: 0x10fb, - 0x83c: 0x11f3, 0x83d: 0x1347, 0x83e: 0x145b, 0x83f: 0x085b, - // Block 0x21, offset 0x840 - 0x840: 0x090f, 0x841: 0x0a17, 0x842: 0x0b2f, 0x843: 0x0cbf, 0x844: 0x0e7b, 0x845: 0x103f, - 0x846: 0x1497, 0x847: 0x157b, 0x848: 0x15cf, 0x849: 0x15e7, 0x84a: 0x0837, 0x84b: 0x0cf3, - 0x84c: 0x0da3, 0x84d: 0x13eb, 0x84e: 0x0afb, 0x84f: 0x0bd7, 0x850: 0x0bf3, 0x851: 0x0c83, - 0x852: 0x0e6b, 0x853: 0x0eb7, 0x854: 0x0f67, 0x855: 0x108b, 0x856: 0x112f, 0x857: 0x1193, - 0x858: 0x13db, 0x859: 0x126b, 0x85a: 0x1403, 0x85b: 0x147f, 0x85c: 0x080f, 0x85d: 0x083b, - 0x85e: 0x0923, 0x85f: 0x0ea7, 0x860: 0x12f3, 0x861: 0x133b, 0x862: 0x0b1b, 0x863: 0x0b8b, - 0x864: 0x0c4f, 0x865: 0x0daf, 0x866: 0x10d7, 0x867: 0x0f23, 0x868: 0x073b, 0x869: 0x097f, - 0x86a: 0x0a63, 0x86b: 0x0ac7, 0x86c: 0x0b97, 0x86d: 0x0f3f, 0x86e: 0x0f5b, 0x86f: 0x116b, - 0x870: 0x118b, 0x871: 0x1463, 0x872: 0x14e3, 0x873: 0x14f3, 0x874: 0x152f, 0x875: 0x0753, - 0x876: 0x107f, 0x877: 0x144f, 0x878: 0x14cb, 0x879: 0x0baf, 0x87a: 0x0717, 0x87b: 0x0777, - 0x87c: 0x0a67, 0x87d: 0x0a87, 0x87e: 0x0caf, 0x87f: 0x0d73, - // Block 0x22, offset 0x880 - 0x880: 0x0ec3, 0x881: 0x0fcb, 0x882: 0x1277, 0x883: 0x1417, 0x884: 0x1623, 0x885: 0x0ce3, - 0x886: 0x14a3, 0x887: 0x0833, 0x888: 0x0d2f, 0x889: 0x0d3b, 0x88a: 0x0e0f, 0x88b: 0x0e47, - 0x88c: 0x0f4b, 0x88d: 0x0fa7, 0x88e: 0x1027, 0x88f: 0x110b, 0x890: 0x153b, 0x891: 0x07af, - 0x892: 0x0c03, 0x893: 0x14b3, 0x894: 0x0767, 0x895: 0x0aab, 0x896: 0x0e2f, 0x897: 0x13df, - 0x898: 0x0b67, 0x899: 0x0bb7, 0x89a: 0x0d43, 0x89b: 0x0f2f, 0x89c: 0x14bb, 0x89d: 0x0817, - 0x89e: 0x08ff, 0x89f: 0x0a97, 0x8a0: 0x0cd3, 0x8a1: 0x0d1f, 0x8a2: 0x0d5f, 0x8a3: 0x0df3, - 0x8a4: 0x0f47, 0x8a5: 0x0fbb, 0x8a6: 0x1157, 0x8a7: 0x12f7, 0x8a8: 0x1303, 0x8a9: 0x1457, - 0x8aa: 0x14d7, 0x8ab: 0x0883, 0x8ac: 0x0e4b, 0x8ad: 0x0903, 0x8ae: 0x0ec7, 0x8af: 0x0f6b, - 0x8b0: 0x1287, 0x8b1: 0x14bf, 0x8b2: 0x15ab, 0x8b3: 0x15d3, 0x8b4: 0x0d37, 0x8b5: 0x0e27, - 0x8b6: 0x11c3, 0x8b7: 0x10b7, 0x8b8: 0x10c3, 0x8b9: 0x10e7, 0x8ba: 0x0f17, 0x8bb: 0x0e9f, - 0x8bc: 0x1363, 0x8bd: 0x0733, 0x8be: 0x122b, 0x8bf: 0x081b, - // Block 0x23, offset 0x8c0 - 0x8c0: 0x080b, 0x8c1: 0x0b0b, 0x8c2: 0x0c2b, 0x8c3: 0x10f3, 0x8c4: 0x0a53, 0x8c5: 0x0e03, - 0x8c6: 0x0cef, 0x8c7: 0x13e7, 0x8c8: 0x12e7, 0x8c9: 0x14ab, 0x8ca: 0x1323, 0x8cb: 0x0b27, - 0x8cc: 0x0787, 0x8cd: 0x095b, 0x8d0: 0x09af, - 0x8d2: 0x0cdf, 0x8d5: 0x07f7, 0x8d6: 0x0f1f, 0x8d7: 0x0fe3, - 0x8d8: 0x1047, 0x8d9: 0x1063, 0x8da: 0x1067, 0x8db: 0x107b, 0x8dc: 0x14fb, 0x8dd: 0x10eb, - 0x8de: 0x116f, 0x8e0: 0x128f, 0x8e2: 0x1353, - 0x8e5: 0x1407, 0x8e6: 0x1433, - 0x8ea: 0x154f, 0x8eb: 0x1553, 0x8ec: 0x1557, 0x8ed: 0x15bb, 0x8ee: 0x142b, 0x8ef: 0x14c7, - 0x8f0: 0x0757, 0x8f1: 0x077b, 0x8f2: 0x078f, 0x8f3: 0x084b, 0x8f4: 0x0857, 0x8f5: 0x0897, - 0x8f6: 0x094b, 0x8f7: 0x0967, 0x8f8: 0x096f, 0x8f9: 0x09ab, 0x8fa: 0x09b7, 0x8fb: 0x0a93, - 0x8fc: 0x0a9b, 0x8fd: 0x0ba3, 0x8fe: 0x0bcb, 0x8ff: 0x0bd3, - // Block 0x24, offset 0x900 - 0x900: 0x0beb, 0x901: 0x0c97, 0x902: 0x0cc7, 0x903: 0x0ce7, 0x904: 0x0d57, 0x905: 0x0e1b, - 0x906: 0x0e37, 0x907: 0x0e67, 0x908: 0x0ebb, 0x909: 0x0edb, 0x90a: 0x0f4f, 0x90b: 0x102f, - 0x90c: 0x104b, 0x90d: 0x1053, 0x90e: 0x104f, 0x90f: 0x1057, 0x910: 0x105b, 0x911: 0x105f, - 0x912: 0x1073, 0x913: 0x1077, 0x914: 0x109b, 0x915: 0x10af, 0x916: 0x10cb, 0x917: 0x112f, - 0x918: 0x1137, 0x919: 0x113f, 0x91a: 0x1153, 0x91b: 0x117b, 0x91c: 0x11cb, 0x91d: 0x11ff, - 0x91e: 0x11ff, 0x91f: 0x1267, 0x920: 0x130f, 0x921: 0x1327, 0x922: 0x135b, 0x923: 0x135f, - 0x924: 0x13a3, 0x925: 0x13a7, 0x926: 0x13ff, 0x927: 0x1407, 0x928: 0x14db, 0x929: 0x151f, - 0x92a: 0x1537, 0x92b: 0x0b9b, 0x92c: 0x171e, 0x92d: 0x11e3, - 0x930: 0x06df, 0x931: 0x07e3, 0x932: 0x07a3, 0x933: 0x074b, 0x934: 0x078b, 0x935: 0x07b7, - 0x936: 0x0847, 0x937: 0x0863, 0x938: 0x094b, 0x939: 0x0937, 0x93a: 0x0947, 0x93b: 0x0963, - 0x93c: 0x09af, 0x93d: 0x09bf, 0x93e: 0x0a03, 0x93f: 0x0a0f, - // Block 0x25, offset 0x940 - 0x940: 0x0a2b, 0x941: 0x0a3b, 0x942: 0x0b23, 0x943: 0x0b2b, 0x944: 0x0b5b, 0x945: 0x0b7b, - 0x946: 0x0bab, 0x947: 0x0bc3, 0x948: 0x0bb3, 0x949: 0x0bd3, 0x94a: 0x0bc7, 0x94b: 0x0beb, - 0x94c: 0x0c07, 0x94d: 0x0c5f, 0x94e: 0x0c6b, 0x94f: 0x0c73, 0x950: 0x0c9b, 0x951: 0x0cdf, - 0x952: 0x0d0f, 0x953: 0x0d13, 0x954: 0x0d27, 0x955: 0x0da7, 0x956: 0x0db7, 0x957: 0x0e0f, - 0x958: 0x0e5b, 0x959: 0x0e53, 0x95a: 0x0e67, 0x95b: 0x0e83, 0x95c: 0x0ebb, 0x95d: 0x1013, - 0x95e: 0x0edf, 0x95f: 0x0f13, 0x960: 0x0f1f, 0x961: 0x0f5f, 0x962: 0x0f7b, 0x963: 0x0f9f, - 0x964: 0x0fc3, 0x965: 0x0fc7, 0x966: 0x0fe3, 0x967: 0x0fe7, 0x968: 0x0ff7, 0x969: 0x100b, - 0x96a: 0x1007, 0x96b: 0x1037, 0x96c: 0x10b3, 0x96d: 0x10cb, 0x96e: 0x10e3, 0x96f: 0x111b, - 0x970: 0x112f, 0x971: 0x114b, 0x972: 0x117b, 0x973: 0x122f, 0x974: 0x1257, 0x975: 0x12cb, - 0x976: 0x1313, 0x977: 0x131f, 0x978: 0x1327, 0x979: 0x133f, 0x97a: 0x1353, 0x97b: 0x1343, - 0x97c: 0x135b, 0x97d: 0x1357, 0x97e: 0x134f, 0x97f: 0x135f, - // Block 0x26, offset 0x980 - 0x980: 0x136b, 0x981: 0x13a7, 0x982: 0x13e3, 0x983: 0x1413, 0x984: 0x144b, 0x985: 0x146b, - 0x986: 0x14b7, 0x987: 0x14db, 0x988: 0x14fb, 0x989: 0x150f, 0x98a: 0x151f, 0x98b: 0x152b, - 0x98c: 0x1537, 0x98d: 0x158b, 0x98e: 0x162b, 0x98f: 0x16b5, 0x990: 0x16b0, 0x991: 0x16e2, - 0x992: 0x0607, 0x993: 0x062f, 0x994: 0x0633, 0x995: 0x1764, 0x996: 0x1791, 0x997: 0x1809, - 0x998: 0x1617, 0x999: 0x1627, - // Block 0x27, offset 0x9c0 - 0x9c0: 0x06fb, 0x9c1: 0x06f3, 0x9c2: 0x0703, 0x9c3: 0x1647, 0x9c4: 0x0747, 0x9c5: 0x0757, - 0x9c6: 0x075b, 0x9c7: 0x0763, 0x9c8: 0x076b, 0x9c9: 0x076f, 0x9ca: 0x077b, 0x9cb: 0x0773, - 0x9cc: 0x05b3, 0x9cd: 0x165b, 0x9ce: 0x078f, 0x9cf: 0x0793, 0x9d0: 0x0797, 0x9d1: 0x07b3, - 0x9d2: 0x164c, 0x9d3: 0x05b7, 0x9d4: 0x079f, 0x9d5: 0x07bf, 0x9d6: 0x1656, 0x9d7: 0x07cf, - 0x9d8: 0x07d7, 0x9d9: 0x0737, 0x9da: 0x07df, 0x9db: 0x07e3, 0x9dc: 0x1831, 0x9dd: 0x07ff, - 0x9de: 0x0807, 0x9df: 0x05bf, 0x9e0: 0x081f, 0x9e1: 0x0823, 0x9e2: 0x082b, 0x9e3: 0x082f, - 0x9e4: 0x05c3, 0x9e5: 0x0847, 0x9e6: 0x084b, 0x9e7: 0x0857, 0x9e8: 0x0863, 0x9e9: 0x0867, - 0x9ea: 0x086b, 0x9eb: 0x0873, 0x9ec: 0x0893, 0x9ed: 0x0897, 0x9ee: 0x089f, 0x9ef: 0x08af, - 0x9f0: 0x08b7, 0x9f1: 0x08bb, 0x9f2: 0x08bb, 0x9f3: 0x08bb, 0x9f4: 0x166a, 0x9f5: 0x0e93, - 0x9f6: 0x08cf, 0x9f7: 0x08d7, 0x9f8: 0x166f, 0x9f9: 0x08e3, 0x9fa: 0x08eb, 0x9fb: 0x08f3, - 0x9fc: 0x091b, 0x9fd: 0x0907, 0x9fe: 0x0913, 0x9ff: 0x0917, - // Block 0x28, offset 0xa00 - 0xa00: 0x091f, 0xa01: 0x0927, 0xa02: 0x092b, 0xa03: 0x0933, 0xa04: 0x093b, 0xa05: 0x093f, - 0xa06: 0x093f, 0xa07: 0x0947, 0xa08: 0x094f, 0xa09: 0x0953, 0xa0a: 0x095f, 0xa0b: 0x0983, - 0xa0c: 0x0967, 0xa0d: 0x0987, 0xa0e: 0x096b, 0xa0f: 0x0973, 0xa10: 0x080b, 0xa11: 0x09cf, - 0xa12: 0x0997, 0xa13: 0x099b, 0xa14: 0x099f, 0xa15: 0x0993, 0xa16: 0x09a7, 0xa17: 0x09a3, - 0xa18: 0x09bb, 0xa19: 0x1674, 0xa1a: 0x09d7, 0xa1b: 0x09db, 0xa1c: 0x09e3, 0xa1d: 0x09ef, - 0xa1e: 0x09f7, 0xa1f: 0x0a13, 0xa20: 0x1679, 0xa21: 0x167e, 0xa22: 0x0a1f, 0xa23: 0x0a23, - 0xa24: 0x0a27, 0xa25: 0x0a1b, 0xa26: 0x0a2f, 0xa27: 0x05c7, 0xa28: 0x05cb, 0xa29: 0x0a37, - 0xa2a: 0x0a3f, 0xa2b: 0x0a3f, 0xa2c: 0x1683, 0xa2d: 0x0a5b, 0xa2e: 0x0a5f, 0xa2f: 0x0a63, - 0xa30: 0x0a6b, 0xa31: 0x1688, 0xa32: 0x0a73, 0xa33: 0x0a77, 0xa34: 0x0b4f, 0xa35: 0x0a7f, - 0xa36: 0x05cf, 0xa37: 0x0a8b, 0xa38: 0x0a9b, 0xa39: 0x0aa7, 0xa3a: 0x0aa3, 0xa3b: 0x1692, - 0xa3c: 0x0aaf, 0xa3d: 0x1697, 0xa3e: 0x0abb, 0xa3f: 0x0ab7, - // Block 0x29, offset 0xa40 - 0xa40: 0x0abf, 0xa41: 0x0acf, 0xa42: 0x0ad3, 0xa43: 0x05d3, 0xa44: 0x0ae3, 0xa45: 0x0aeb, - 0xa46: 0x0aef, 0xa47: 0x0af3, 0xa48: 0x05d7, 0xa49: 0x169c, 0xa4a: 0x05db, 0xa4b: 0x0b0f, - 0xa4c: 0x0b13, 0xa4d: 0x0b17, 0xa4e: 0x0b1f, 0xa4f: 0x1863, 0xa50: 0x0b37, 0xa51: 0x16a6, - 0xa52: 0x16a6, 0xa53: 0x11d7, 0xa54: 0x0b47, 0xa55: 0x0b47, 0xa56: 0x05df, 0xa57: 0x16c9, - 0xa58: 0x179b, 0xa59: 0x0b57, 0xa5a: 0x0b5f, 0xa5b: 0x05e3, 0xa5c: 0x0b73, 0xa5d: 0x0b83, - 0xa5e: 0x0b87, 0xa5f: 0x0b8f, 0xa60: 0x0b9f, 0xa61: 0x05eb, 0xa62: 0x05e7, 0xa63: 0x0ba3, - 0xa64: 0x16ab, 0xa65: 0x0ba7, 0xa66: 0x0bbb, 0xa67: 0x0bbf, 0xa68: 0x0bc3, 0xa69: 0x0bbf, - 0xa6a: 0x0bcf, 0xa6b: 0x0bd3, 0xa6c: 0x0be3, 0xa6d: 0x0bdb, 0xa6e: 0x0bdf, 0xa6f: 0x0be7, - 0xa70: 0x0beb, 0xa71: 0x0bef, 0xa72: 0x0bfb, 0xa73: 0x0bff, 0xa74: 0x0c17, 0xa75: 0x0c1f, - 0xa76: 0x0c2f, 0xa77: 0x0c43, 0xa78: 0x16ba, 0xa79: 0x0c3f, 0xa7a: 0x0c33, 0xa7b: 0x0c4b, - 0xa7c: 0x0c53, 0xa7d: 0x0c67, 0xa7e: 0x16bf, 0xa7f: 0x0c6f, - // Block 0x2a, offset 0xa80 - 0xa80: 0x0c63, 0xa81: 0x0c5b, 0xa82: 0x05ef, 0xa83: 0x0c77, 0xa84: 0x0c7f, 0xa85: 0x0c87, - 0xa86: 0x0c7b, 0xa87: 0x05f3, 0xa88: 0x0c97, 0xa89: 0x0c9f, 0xa8a: 0x16c4, 0xa8b: 0x0ccb, - 0xa8c: 0x0cff, 0xa8d: 0x0cdb, 0xa8e: 0x05ff, 0xa8f: 0x0ce7, 0xa90: 0x05fb, 0xa91: 0x05f7, - 0xa92: 0x07c3, 0xa93: 0x07c7, 0xa94: 0x0d03, 0xa95: 0x0ceb, 0xa96: 0x11ab, 0xa97: 0x0663, - 0xa98: 0x0d0f, 0xa99: 0x0d13, 0xa9a: 0x0d17, 0xa9b: 0x0d2b, 0xa9c: 0x0d23, 0xa9d: 0x16dd, - 0xa9e: 0x0603, 0xa9f: 0x0d3f, 0xaa0: 0x0d33, 0xaa1: 0x0d4f, 0xaa2: 0x0d57, 0xaa3: 0x16e7, - 0xaa4: 0x0d5b, 0xaa5: 0x0d47, 0xaa6: 0x0d63, 0xaa7: 0x0607, 0xaa8: 0x0d67, 0xaa9: 0x0d6b, - 0xaaa: 0x0d6f, 0xaab: 0x0d7b, 0xaac: 0x16ec, 0xaad: 0x0d83, 0xaae: 0x060b, 0xaaf: 0x0d8f, - 0xab0: 0x16f1, 0xab1: 0x0d93, 0xab2: 0x060f, 0xab3: 0x0d9f, 0xab4: 0x0dab, 0xab5: 0x0db7, - 0xab6: 0x0dbb, 0xab7: 0x16f6, 0xab8: 0x168d, 0xab9: 0x16fb, 0xaba: 0x0ddb, 0xabb: 0x1700, - 0xabc: 0x0de7, 0xabd: 0x0def, 0xabe: 0x0ddf, 0xabf: 0x0dfb, - // Block 0x2b, offset 0xac0 - 0xac0: 0x0e0b, 0xac1: 0x0e1b, 0xac2: 0x0e0f, 0xac3: 0x0e13, 0xac4: 0x0e1f, 0xac5: 0x0e23, - 0xac6: 0x1705, 0xac7: 0x0e07, 0xac8: 0x0e3b, 0xac9: 0x0e3f, 0xaca: 0x0613, 0xacb: 0x0e53, - 0xacc: 0x0e4f, 0xacd: 0x170a, 0xace: 0x0e33, 0xacf: 0x0e6f, 0xad0: 0x170f, 0xad1: 0x1714, - 0xad2: 0x0e73, 0xad3: 0x0e87, 0xad4: 0x0e83, 0xad5: 0x0e7f, 0xad6: 0x0617, 0xad7: 0x0e8b, - 0xad8: 0x0e9b, 0xad9: 0x0e97, 0xada: 0x0ea3, 0xadb: 0x1651, 0xadc: 0x0eb3, 0xadd: 0x1719, - 0xade: 0x0ebf, 0xadf: 0x1723, 0xae0: 0x0ed3, 0xae1: 0x0edf, 0xae2: 0x0ef3, 0xae3: 0x1728, - 0xae4: 0x0f07, 0xae5: 0x0f0b, 0xae6: 0x172d, 0xae7: 0x1732, 0xae8: 0x0f27, 0xae9: 0x0f37, - 0xaea: 0x061b, 0xaeb: 0x0f3b, 0xaec: 0x061f, 0xaed: 0x061f, 0xaee: 0x0f53, 0xaef: 0x0f57, - 0xaf0: 0x0f5f, 0xaf1: 0x0f63, 0xaf2: 0x0f6f, 0xaf3: 0x0623, 0xaf4: 0x0f87, 0xaf5: 0x1737, - 0xaf6: 0x0fa3, 0xaf7: 0x173c, 0xaf8: 0x0faf, 0xaf9: 0x16a1, 0xafa: 0x0fbf, 0xafb: 0x1741, - 0xafc: 0x1746, 0xafd: 0x174b, 0xafe: 0x0627, 0xaff: 0x062b, - // Block 0x2c, offset 0xb00 - 0xb00: 0x0ff7, 0xb01: 0x1755, 0xb02: 0x1750, 0xb03: 0x175a, 0xb04: 0x175f, 0xb05: 0x0fff, - 0xb06: 0x1003, 0xb07: 0x1003, 0xb08: 0x100b, 0xb09: 0x0633, 0xb0a: 0x100f, 0xb0b: 0x0637, - 0xb0c: 0x063b, 0xb0d: 0x1769, 0xb0e: 0x1023, 0xb0f: 0x102b, 0xb10: 0x1037, 0xb11: 0x063f, - 0xb12: 0x176e, 0xb13: 0x105b, 0xb14: 0x1773, 0xb15: 0x1778, 0xb16: 0x107b, 0xb17: 0x1093, - 0xb18: 0x0643, 0xb19: 0x109b, 0xb1a: 0x109f, 0xb1b: 0x10a3, 0xb1c: 0x177d, 0xb1d: 0x1782, - 0xb1e: 0x1782, 0xb1f: 0x10bb, 0xb20: 0x0647, 0xb21: 0x1787, 0xb22: 0x10cf, 0xb23: 0x10d3, - 0xb24: 0x064b, 0xb25: 0x178c, 0xb26: 0x10ef, 0xb27: 0x064f, 0xb28: 0x10ff, 0xb29: 0x10f7, - 0xb2a: 0x1107, 0xb2b: 0x1796, 0xb2c: 0x111f, 0xb2d: 0x0653, 0xb2e: 0x112b, 0xb2f: 0x1133, - 0xb30: 0x1143, 0xb31: 0x0657, 0xb32: 0x17a0, 0xb33: 0x17a5, 0xb34: 0x065b, 0xb35: 0x17aa, - 0xb36: 0x115b, 0xb37: 0x17af, 0xb38: 0x1167, 0xb39: 0x1173, 0xb3a: 0x117b, 0xb3b: 0x17b4, - 0xb3c: 0x17b9, 0xb3d: 0x118f, 0xb3e: 0x17be, 0xb3f: 0x1197, - // Block 0x2d, offset 0xb40 - 0xb40: 0x16ce, 0xb41: 0x065f, 0xb42: 0x11af, 0xb43: 0x11b3, 0xb44: 0x0667, 0xb45: 0x11b7, - 0xb46: 0x0a33, 0xb47: 0x17c3, 0xb48: 0x17c8, 0xb49: 0x16d3, 0xb4a: 0x16d8, 0xb4b: 0x11d7, - 0xb4c: 0x11db, 0xb4d: 0x13f3, 0xb4e: 0x066b, 0xb4f: 0x1207, 0xb50: 0x1203, 0xb51: 0x120b, - 0xb52: 0x083f, 0xb53: 0x120f, 0xb54: 0x1213, 0xb55: 0x1217, 0xb56: 0x121f, 0xb57: 0x17cd, - 0xb58: 0x121b, 0xb59: 0x1223, 0xb5a: 0x1237, 0xb5b: 0x123b, 0xb5c: 0x1227, 0xb5d: 0x123f, - 0xb5e: 0x1253, 0xb5f: 0x1267, 0xb60: 0x1233, 0xb61: 0x1247, 0xb62: 0x124b, 0xb63: 0x124f, - 0xb64: 0x17d2, 0xb65: 0x17dc, 0xb66: 0x17d7, 0xb67: 0x066f, 0xb68: 0x126f, 0xb69: 0x1273, - 0xb6a: 0x127b, 0xb6b: 0x17f0, 0xb6c: 0x127f, 0xb6d: 0x17e1, 0xb6e: 0x0673, 0xb6f: 0x0677, - 0xb70: 0x17e6, 0xb71: 0x17eb, 0xb72: 0x067b, 0xb73: 0x129f, 0xb74: 0x12a3, 0xb75: 0x12a7, - 0xb76: 0x12ab, 0xb77: 0x12b7, 0xb78: 0x12b3, 0xb79: 0x12bf, 0xb7a: 0x12bb, 0xb7b: 0x12cb, - 0xb7c: 0x12c3, 0xb7d: 0x12c7, 0xb7e: 0x12cf, 0xb7f: 0x067f, - // Block 0x2e, offset 0xb80 - 0xb80: 0x12d7, 0xb81: 0x12db, 0xb82: 0x0683, 0xb83: 0x12eb, 0xb84: 0x12ef, 0xb85: 0x17f5, - 0xb86: 0x12fb, 0xb87: 0x12ff, 0xb88: 0x0687, 0xb89: 0x130b, 0xb8a: 0x05bb, 0xb8b: 0x17fa, - 0xb8c: 0x17ff, 0xb8d: 0x068b, 0xb8e: 0x068f, 0xb8f: 0x1337, 0xb90: 0x134f, 0xb91: 0x136b, - 0xb92: 0x137b, 0xb93: 0x1804, 0xb94: 0x138f, 0xb95: 0x1393, 0xb96: 0x13ab, 0xb97: 0x13b7, - 0xb98: 0x180e, 0xb99: 0x1660, 0xb9a: 0x13c3, 0xb9b: 0x13bf, 0xb9c: 0x13cb, 0xb9d: 0x1665, - 0xb9e: 0x13d7, 0xb9f: 0x13e3, 0xba0: 0x1813, 0xba1: 0x1818, 0xba2: 0x1423, 0xba3: 0x142f, - 0xba4: 0x1437, 0xba5: 0x181d, 0xba6: 0x143b, 0xba7: 0x1467, 0xba8: 0x1473, 0xba9: 0x1477, - 0xbaa: 0x146f, 0xbab: 0x1483, 0xbac: 0x1487, 0xbad: 0x1822, 0xbae: 0x1493, 0xbaf: 0x0693, - 0xbb0: 0x149b, 0xbb1: 0x1827, 0xbb2: 0x0697, 0xbb3: 0x14d3, 0xbb4: 0x0ac3, 0xbb5: 0x14eb, - 0xbb6: 0x182c, 0xbb7: 0x1836, 0xbb8: 0x069b, 0xbb9: 0x069f, 0xbba: 0x1513, 0xbbb: 0x183b, - 0xbbc: 0x06a3, 0xbbd: 0x1840, 0xbbe: 0x152b, 0xbbf: 0x152b, - // Block 0x2f, offset 0xbc0 - 0xbc0: 0x1533, 0xbc1: 0x1845, 0xbc2: 0x154b, 0xbc3: 0x06a7, 0xbc4: 0x155b, 0xbc5: 0x1567, - 0xbc6: 0x156f, 0xbc7: 0x1577, 0xbc8: 0x06ab, 0xbc9: 0x184a, 0xbca: 0x158b, 0xbcb: 0x15a7, - 0xbcc: 0x15b3, 0xbcd: 0x06af, 0xbce: 0x06b3, 0xbcf: 0x15b7, 0xbd0: 0x184f, 0xbd1: 0x06b7, - 0xbd2: 0x1854, 0xbd3: 0x1859, 0xbd4: 0x185e, 0xbd5: 0x15db, 0xbd6: 0x06bb, 0xbd7: 0x15ef, - 0xbd8: 0x15f7, 0xbd9: 0x15fb, 0xbda: 0x1603, 0xbdb: 0x160b, 0xbdc: 0x1613, 0xbdd: 0x1868, -} - -// nfcIndex: 22 blocks, 1408 entries, 1408 bytes -// Block 0 is the zero block. -var nfcIndex = [1408]uint8{ - // Block 0x0, offset 0x0 - // Block 0x1, offset 0x40 - // Block 0x2, offset 0x80 - // Block 0x3, offset 0xc0 - 0xc2: 0x2e, 0xc3: 0x01, 0xc4: 0x02, 0xc5: 0x03, 0xc6: 0x2f, 0xc7: 0x04, - 0xc8: 0x05, 0xca: 0x30, 0xcb: 0x31, 0xcc: 0x06, 0xcd: 0x07, 0xce: 0x08, 0xcf: 0x32, - 0xd0: 0x09, 0xd1: 0x33, 0xd2: 0x34, 0xd3: 0x0a, 0xd6: 0x0b, 0xd7: 0x35, - 0xd8: 0x36, 0xd9: 0x0c, 0xdb: 0x37, 0xdc: 0x38, 0xdd: 0x39, 0xdf: 0x3a, - 0xe0: 0x02, 0xe1: 0x03, 0xe2: 0x04, 0xe3: 0x05, - 0xea: 0x06, 0xeb: 0x07, 0xec: 0x08, 0xed: 0x09, 0xef: 0x0a, - 0xf0: 0x13, - // Block 0x4, offset 0x100 - 0x120: 0x3b, 0x121: 0x3c, 0x123: 0x0d, 0x124: 0x3d, 0x125: 0x3e, 0x126: 0x3f, 0x127: 0x40, - 0x128: 0x41, 0x129: 0x42, 0x12a: 0x43, 0x12b: 0x44, 0x12c: 0x3f, 0x12d: 0x45, 0x12e: 0x46, 0x12f: 0x47, - 0x131: 0x48, 0x132: 0x49, 0x133: 0x4a, 0x134: 0x4b, 0x135: 0x4c, 0x137: 0x4d, - 0x138: 0x4e, 0x139: 0x4f, 0x13a: 0x50, 0x13b: 0x51, 0x13c: 0x52, 0x13d: 0x53, 0x13e: 0x54, 0x13f: 0x55, - // Block 0x5, offset 0x140 - 0x140: 0x56, 0x142: 0x57, 0x144: 0x58, 0x145: 0x59, 0x146: 0x5a, 0x147: 0x5b, - 0x14d: 0x5c, - 0x15c: 0x5d, 0x15f: 0x5e, - 0x162: 0x5f, 0x164: 0x60, - 0x168: 0x61, 0x169: 0x62, 0x16a: 0x63, 0x16c: 0x0e, 0x16d: 0x64, 0x16e: 0x65, 0x16f: 0x66, - 0x170: 0x67, 0x173: 0x68, 0x177: 0x0f, - 0x178: 0x10, 0x179: 0x11, 0x17a: 0x12, 0x17b: 0x13, 0x17c: 0x14, 0x17d: 0x15, 0x17e: 0x16, 0x17f: 0x17, - // Block 0x6, offset 0x180 - 0x180: 0x69, 0x183: 0x6a, 0x184: 0x6b, 0x186: 0x6c, 0x187: 0x6d, - 0x188: 0x6e, 0x189: 0x18, 0x18a: 0x19, 0x18b: 0x6f, 0x18c: 0x70, - 0x1ab: 0x71, - 0x1b3: 0x72, 0x1b5: 0x73, 0x1b7: 0x74, - // Block 0x7, offset 0x1c0 - 0x1c0: 0x75, 0x1c1: 0x1a, 0x1c2: 0x1b, 0x1c3: 0x1c, 0x1c4: 0x76, 0x1c5: 0x77, - 0x1c9: 0x78, 0x1cc: 0x79, 0x1cd: 0x7a, - // Block 0x8, offset 0x200 - 0x219: 0x7b, 0x21a: 0x7c, 0x21b: 0x7d, - 0x220: 0x7e, 0x223: 0x7f, 0x224: 0x80, 0x225: 0x81, 0x226: 0x82, 0x227: 0x83, - 0x22a: 0x84, 0x22b: 0x85, 0x22f: 0x86, - 0x230: 0x87, 0x231: 0x88, 0x232: 0x89, 0x233: 0x8a, 0x234: 0x8b, 0x235: 0x8c, 0x236: 0x8d, 0x237: 0x87, - 0x238: 0x88, 0x239: 0x89, 0x23a: 0x8a, 0x23b: 0x8b, 0x23c: 0x8c, 0x23d: 0x8d, 0x23e: 0x87, 0x23f: 0x88, - // Block 0x9, offset 0x240 - 0x240: 0x89, 0x241: 0x8a, 0x242: 0x8b, 0x243: 0x8c, 0x244: 0x8d, 0x245: 0x87, 0x246: 0x88, 0x247: 0x89, - 0x248: 0x8a, 0x249: 0x8b, 0x24a: 0x8c, 0x24b: 0x8d, 0x24c: 0x87, 0x24d: 0x88, 0x24e: 0x89, 0x24f: 0x8a, - 0x250: 0x8b, 0x251: 0x8c, 0x252: 0x8d, 0x253: 0x87, 0x254: 0x88, 0x255: 0x89, 0x256: 0x8a, 0x257: 0x8b, - 0x258: 0x8c, 0x259: 0x8d, 0x25a: 0x87, 0x25b: 0x88, 0x25c: 0x89, 0x25d: 0x8a, 0x25e: 0x8b, 0x25f: 0x8c, - 0x260: 0x8d, 0x261: 0x87, 0x262: 0x88, 0x263: 0x89, 0x264: 0x8a, 0x265: 0x8b, 0x266: 0x8c, 0x267: 0x8d, - 0x268: 0x87, 0x269: 0x88, 0x26a: 0x89, 0x26b: 0x8a, 0x26c: 0x8b, 0x26d: 0x8c, 0x26e: 0x8d, 0x26f: 0x87, - 0x270: 0x88, 0x271: 0x89, 0x272: 0x8a, 0x273: 0x8b, 0x274: 0x8c, 0x275: 0x8d, 0x276: 0x87, 0x277: 0x88, - 0x278: 0x89, 0x279: 0x8a, 0x27a: 0x8b, 0x27b: 0x8c, 0x27c: 0x8d, 0x27d: 0x87, 0x27e: 0x88, 0x27f: 0x89, - // Block 0xa, offset 0x280 - 0x280: 0x8a, 0x281: 0x8b, 0x282: 0x8c, 0x283: 0x8d, 0x284: 0x87, 0x285: 0x88, 0x286: 0x89, 0x287: 0x8a, - 0x288: 0x8b, 0x289: 0x8c, 0x28a: 0x8d, 0x28b: 0x87, 0x28c: 0x88, 0x28d: 0x89, 0x28e: 0x8a, 0x28f: 0x8b, - 0x290: 0x8c, 0x291: 0x8d, 0x292: 0x87, 0x293: 0x88, 0x294: 0x89, 0x295: 0x8a, 0x296: 0x8b, 0x297: 0x8c, - 0x298: 0x8d, 0x299: 0x87, 0x29a: 0x88, 0x29b: 0x89, 0x29c: 0x8a, 0x29d: 0x8b, 0x29e: 0x8c, 0x29f: 0x8d, - 0x2a0: 0x87, 0x2a1: 0x88, 0x2a2: 0x89, 0x2a3: 0x8a, 0x2a4: 0x8b, 0x2a5: 0x8c, 0x2a6: 0x8d, 0x2a7: 0x87, - 0x2a8: 0x88, 0x2a9: 0x89, 0x2aa: 0x8a, 0x2ab: 0x8b, 0x2ac: 0x8c, 0x2ad: 0x8d, 0x2ae: 0x87, 0x2af: 0x88, - 0x2b0: 0x89, 0x2b1: 0x8a, 0x2b2: 0x8b, 0x2b3: 0x8c, 0x2b4: 0x8d, 0x2b5: 0x87, 0x2b6: 0x88, 0x2b7: 0x89, - 0x2b8: 0x8a, 0x2b9: 0x8b, 0x2ba: 0x8c, 0x2bb: 0x8d, 0x2bc: 0x87, 0x2bd: 0x88, 0x2be: 0x89, 0x2bf: 0x8a, - // Block 0xb, offset 0x2c0 - 0x2c0: 0x8b, 0x2c1: 0x8c, 0x2c2: 0x8d, 0x2c3: 0x87, 0x2c4: 0x88, 0x2c5: 0x89, 0x2c6: 0x8a, 0x2c7: 0x8b, - 0x2c8: 0x8c, 0x2c9: 0x8d, 0x2ca: 0x87, 0x2cb: 0x88, 0x2cc: 0x89, 0x2cd: 0x8a, 0x2ce: 0x8b, 0x2cf: 0x8c, - 0x2d0: 0x8d, 0x2d1: 0x87, 0x2d2: 0x88, 0x2d3: 0x89, 0x2d4: 0x8a, 0x2d5: 0x8b, 0x2d6: 0x8c, 0x2d7: 0x8d, - 0x2d8: 0x87, 0x2d9: 0x88, 0x2da: 0x89, 0x2db: 0x8a, 0x2dc: 0x8b, 0x2dd: 0x8c, 0x2de: 0x8e, - // Block 0xc, offset 0x300 - 0x324: 0x1d, 0x325: 0x1e, 0x326: 0x1f, 0x327: 0x20, - 0x328: 0x21, 0x329: 0x22, 0x32a: 0x23, 0x32b: 0x24, 0x32c: 0x8f, 0x32d: 0x90, 0x32e: 0x91, - 0x331: 0x92, 0x332: 0x93, 0x333: 0x94, 0x334: 0x95, - 0x338: 0x96, 0x339: 0x97, 0x33a: 0x98, 0x33b: 0x99, 0x33e: 0x9a, 0x33f: 0x9b, - // Block 0xd, offset 0x340 - 0x347: 0x9c, - 0x34b: 0x9d, 0x34d: 0x9e, - 0x368: 0x9f, 0x36b: 0xa0, - 0x374: 0xa1, - 0x37d: 0xa2, - // Block 0xe, offset 0x380 - 0x381: 0xa3, 0x382: 0xa4, 0x384: 0xa5, 0x385: 0x82, 0x387: 0xa6, - 0x388: 0xa7, 0x38b: 0xa8, 0x38c: 0xa9, 0x38d: 0xaa, - 0x391: 0xab, 0x392: 0xac, 0x393: 0xad, 0x396: 0xae, 0x397: 0xaf, - 0x398: 0x73, 0x39a: 0xb0, 0x39c: 0xb1, - 0x3a0: 0xb2, 0x3a7: 0xb3, - 0x3a8: 0xb4, 0x3a9: 0xb5, 0x3aa: 0xb6, - 0x3b0: 0x73, 0x3b5: 0xb7, 0x3b6: 0xb8, - // Block 0xf, offset 0x3c0 - 0x3eb: 0xb9, 0x3ec: 0xba, - // Block 0x10, offset 0x400 - 0x432: 0xbb, - // Block 0x11, offset 0x440 - 0x445: 0xbc, 0x446: 0xbd, 0x447: 0xbe, - 0x449: 0xbf, - // Block 0x12, offset 0x480 - 0x480: 0xc0, 0x484: 0xba, - 0x48b: 0xc1, - 0x4a3: 0xc2, 0x4a5: 0xc3, - // Block 0x13, offset 0x4c0 - 0x4c8: 0xc4, - // Block 0x14, offset 0x500 - 0x520: 0x25, 0x521: 0x26, 0x522: 0x27, 0x523: 0x28, 0x524: 0x29, 0x525: 0x2a, 0x526: 0x2b, 0x527: 0x2c, - 0x528: 0x2d, - // Block 0x15, offset 0x540 - 0x550: 0x0b, 0x551: 0x0c, 0x556: 0x0d, - 0x55b: 0x0e, 0x55d: 0x0f, 0x55e: 0x10, 0x55f: 0x11, - 0x56f: 0x12, -} - -// nfcSparseOffset: 151 entries, 302 bytes -var nfcSparseOffset = []uint16{0x0, 0x5, 0x9, 0xb, 0xd, 0x18, 0x28, 0x2a, 0x2f, 0x3a, 0x49, 0x56, 0x5e, 0x63, 0x68, 0x6a, 0x72, 0x79, 0x7c, 0x84, 0x88, 0x8c, 0x8e, 0x90, 0x99, 0x9d, 0xa4, 0xa9, 0xac, 0xb6, 0xb9, 0xc0, 0xc8, 0xcb, 0xcd, 0xd0, 0xd2, 0xd7, 0xe8, 0xf4, 0xf6, 0xfc, 0xfe, 0x100, 0x102, 0x104, 0x106, 0x108, 0x10b, 0x10e, 0x110, 0x113, 0x116, 0x11a, 0x11f, 0x128, 0x12a, 0x12d, 0x12f, 0x13a, 0x13e, 0x14c, 0x14f, 0x155, 0x15b, 0x166, 0x16a, 0x16c, 0x16e, 0x170, 0x172, 0x174, 0x17a, 0x17e, 0x180, 0x182, 0x18a, 0x18e, 0x191, 0x193, 0x195, 0x197, 0x19a, 0x19c, 0x19e, 0x1a0, 0x1a2, 0x1a8, 0x1ab, 0x1ad, 0x1b4, 0x1ba, 0x1c0, 0x1c8, 0x1ce, 0x1d4, 0x1da, 0x1de, 0x1ec, 0x1f5, 0x1f8, 0x1fb, 0x1fd, 0x200, 0x202, 0x206, 0x20b, 0x20d, 0x20f, 0x214, 0x21a, 0x21c, 0x21e, 0x220, 0x226, 0x229, 0x22b, 0x231, 0x234, 0x23c, 0x243, 0x246, 0x249, 0x24b, 0x24e, 0x256, 0x25a, 0x261, 0x264, 0x26a, 0x26c, 0x26f, 0x271, 0x274, 0x276, 0x278, 0x27a, 0x27c, 0x27f, 0x281, 0x283, 0x285, 0x287, 0x294, 0x29e, 0x2a0, 0x2a2, 0x2a8, 0x2aa, 0x2ac, 0x2af} - -// nfcSparseValues: 689 entries, 2756 bytes -var nfcSparseValues = [689]valueRange{ - // Block 0x0, offset 0x0 - {value: 0x0000, lo: 0x04}, - {value: 0xa100, lo: 0xa8, hi: 0xa8}, - {value: 0x8100, lo: 0xaf, hi: 0xaf}, - {value: 0x8100, lo: 0xb4, hi: 0xb4}, - {value: 0x8100, lo: 0xb8, hi: 0xb8}, - // Block 0x1, offset 0x5 - {value: 0x0091, lo: 0x03}, - {value: 0x46e5, lo: 0xa0, hi: 0xa1}, - {value: 0x4717, lo: 0xaf, hi: 0xb0}, - {value: 0xa000, lo: 0xb7, hi: 0xb7}, - // Block 0x2, offset 0x9 - {value: 0x0000, lo: 0x01}, - {value: 0xa000, lo: 0x92, hi: 0x92}, - // Block 0x3, offset 0xb - {value: 0x0000, lo: 0x01}, - {value: 0x8100, lo: 0x98, hi: 0x9d}, - // Block 0x4, offset 0xd - {value: 0x0006, lo: 0x0a}, - {value: 0xa000, lo: 0x81, hi: 0x81}, - {value: 0xa000, lo: 0x85, hi: 0x85}, - {value: 0xa000, lo: 0x89, hi: 0x89}, - {value: 0x4843, lo: 0x8a, hi: 0x8a}, - {value: 0x4861, lo: 0x8b, hi: 0x8b}, - {value: 0x36ca, lo: 0x8c, hi: 0x8c}, - {value: 0x36e2, lo: 0x8d, hi: 0x8d}, - {value: 0x4879, lo: 0x8e, hi: 0x8e}, - {value: 0xa000, lo: 0x92, hi: 0x92}, - {value: 0x3700, lo: 0x93, hi: 0x94}, - // Block 0x5, offset 0x18 - {value: 0x0000, lo: 0x0f}, - {value: 0xa000, lo: 0x83, hi: 0x83}, - {value: 0xa000, lo: 0x87, hi: 0x87}, - {value: 0xa000, lo: 0x8b, hi: 0x8b}, - {value: 0xa000, lo: 0x8d, hi: 0x8d}, - {value: 0x37a8, lo: 0x90, hi: 0x90}, - {value: 0x37b4, lo: 0x91, hi: 0x91}, - {value: 0x37a2, lo: 0x93, hi: 0x93}, - {value: 0xa000, lo: 0x96, hi: 0x96}, - {value: 0x381a, lo: 0x97, hi: 0x97}, - {value: 0x37e4, lo: 0x9c, hi: 0x9c}, - {value: 0x37cc, lo: 0x9d, hi: 0x9d}, - {value: 0x37f6, lo: 0x9e, hi: 0x9e}, - {value: 0xa000, lo: 0xb4, hi: 0xb5}, - {value: 0x3820, lo: 0xb6, hi: 0xb6}, - {value: 0x3826, lo: 0xb7, hi: 0xb7}, - // Block 0x6, offset 0x28 - {value: 0x0000, lo: 0x01}, - {value: 0x8132, lo: 0x83, hi: 0x87}, - // Block 0x7, offset 0x2a - {value: 0x0001, lo: 0x04}, - {value: 0x8113, lo: 0x81, hi: 0x82}, - {value: 0x8132, lo: 0x84, hi: 0x84}, - {value: 0x812d, lo: 0x85, hi: 0x85}, - {value: 0x810d, lo: 0x87, hi: 0x87}, - // Block 0x8, offset 0x2f - {value: 0x0000, lo: 0x0a}, - {value: 0x8132, lo: 0x90, hi: 0x97}, - {value: 0x8119, lo: 0x98, hi: 0x98}, - {value: 0x811a, lo: 0x99, hi: 0x99}, - {value: 0x811b, lo: 0x9a, hi: 0x9a}, - {value: 0x3844, lo: 0xa2, hi: 0xa2}, - {value: 0x384a, lo: 0xa3, hi: 0xa3}, - {value: 0x3856, lo: 0xa4, hi: 0xa4}, - {value: 0x3850, lo: 0xa5, hi: 0xa5}, - {value: 0x385c, lo: 0xa6, hi: 0xa6}, - {value: 0xa000, lo: 0xa7, hi: 0xa7}, - // Block 0x9, offset 0x3a - {value: 0x0000, lo: 0x0e}, - {value: 0x386e, lo: 0x80, hi: 0x80}, - {value: 0xa000, lo: 0x81, hi: 0x81}, - {value: 0x3862, lo: 0x82, hi: 0x82}, - {value: 0xa000, lo: 0x92, hi: 0x92}, - {value: 0x3868, lo: 0x93, hi: 0x93}, - {value: 0xa000, lo: 0x95, hi: 0x95}, - {value: 0x8132, lo: 0x96, hi: 0x9c}, - {value: 0x8132, lo: 0x9f, hi: 0xa2}, - {value: 0x812d, lo: 0xa3, hi: 0xa3}, - {value: 0x8132, lo: 0xa4, hi: 0xa4}, - {value: 0x8132, lo: 0xa7, hi: 0xa8}, - {value: 0x812d, lo: 0xaa, hi: 0xaa}, - {value: 0x8132, lo: 0xab, hi: 0xac}, - {value: 0x812d, lo: 0xad, hi: 0xad}, - // Block 0xa, offset 0x49 - {value: 0x0000, lo: 0x0c}, - {value: 0x811f, lo: 0x91, hi: 0x91}, - {value: 0x8132, lo: 0xb0, hi: 0xb0}, - {value: 0x812d, lo: 0xb1, hi: 0xb1}, - {value: 0x8132, lo: 0xb2, hi: 0xb3}, - {value: 0x812d, lo: 0xb4, hi: 0xb4}, - {value: 0x8132, lo: 0xb5, hi: 0xb6}, - {value: 0x812d, lo: 0xb7, hi: 0xb9}, - {value: 0x8132, lo: 0xba, hi: 0xba}, - {value: 0x812d, lo: 0xbb, hi: 0xbc}, - {value: 0x8132, lo: 0xbd, hi: 0xbd}, - {value: 0x812d, lo: 0xbe, hi: 0xbe}, - {value: 0x8132, lo: 0xbf, hi: 0xbf}, - // Block 0xb, offset 0x56 - {value: 0x0005, lo: 0x07}, - {value: 0x8132, lo: 0x80, hi: 0x80}, - {value: 0x8132, lo: 0x81, hi: 0x81}, - {value: 0x812d, lo: 0x82, hi: 0x83}, - {value: 0x812d, lo: 0x84, hi: 0x85}, - {value: 0x812d, lo: 0x86, hi: 0x87}, - {value: 0x812d, lo: 0x88, hi: 0x89}, - {value: 0x8132, lo: 0x8a, hi: 0x8a}, - // Block 0xc, offset 0x5e - {value: 0x0000, lo: 0x04}, - {value: 0x8132, lo: 0xab, hi: 0xb1}, - {value: 0x812d, lo: 0xb2, hi: 0xb2}, - {value: 0x8132, lo: 0xb3, hi: 0xb3}, - {value: 0x812d, lo: 0xbd, hi: 0xbd}, - // Block 0xd, offset 0x63 - {value: 0x0000, lo: 0x04}, - {value: 0x8132, lo: 0x96, hi: 0x99}, - {value: 0x8132, lo: 0x9b, hi: 0xa3}, - {value: 0x8132, lo: 0xa5, hi: 0xa7}, - {value: 0x8132, lo: 0xa9, hi: 0xad}, - // Block 0xe, offset 0x68 - {value: 0x0000, lo: 0x01}, - {value: 0x812d, lo: 0x99, hi: 0x9b}, - // Block 0xf, offset 0x6a - {value: 0x0000, lo: 0x07}, - {value: 0xa000, lo: 0xa8, hi: 0xa8}, - {value: 0x3edb, lo: 0xa9, hi: 0xa9}, - {value: 0xa000, lo: 0xb0, hi: 0xb0}, - {value: 0x3ee3, lo: 0xb1, hi: 0xb1}, - {value: 0xa000, lo: 0xb3, hi: 0xb3}, - {value: 0x3eeb, lo: 0xb4, hi: 0xb4}, - {value: 0x9902, lo: 0xbc, hi: 0xbc}, - // Block 0x10, offset 0x72 - {value: 0x0008, lo: 0x06}, - {value: 0x8104, lo: 0x8d, hi: 0x8d}, - {value: 0x8132, lo: 0x91, hi: 0x91}, - {value: 0x812d, lo: 0x92, hi: 0x92}, - {value: 0x8132, lo: 0x93, hi: 0x93}, - {value: 0x8132, lo: 0x94, hi: 0x94}, - {value: 0x451f, lo: 0x98, hi: 0x9f}, - // Block 0x11, offset 0x79 - {value: 0x0000, lo: 0x02}, - {value: 0x8102, lo: 0xbc, hi: 0xbc}, - {value: 0x9900, lo: 0xbe, hi: 0xbe}, - // Block 0x12, offset 0x7c - {value: 0x0008, lo: 0x07}, - {value: 0xa000, lo: 0x87, hi: 0x87}, - {value: 0x2ca1, lo: 0x8b, hi: 0x8c}, - {value: 0x8104, lo: 0x8d, hi: 0x8d}, - {value: 0x9900, lo: 0x97, hi: 0x97}, - {value: 0x455f, lo: 0x9c, hi: 0x9d}, - {value: 0x456f, lo: 0x9f, hi: 0x9f}, - {value: 0x8132, lo: 0xbe, hi: 0xbe}, - // Block 0x13, offset 0x84 - {value: 0x0000, lo: 0x03}, - {value: 0x4597, lo: 0xb3, hi: 0xb3}, - {value: 0x459f, lo: 0xb6, hi: 0xb6}, - {value: 0x8102, lo: 0xbc, hi: 0xbc}, - // Block 0x14, offset 0x88 - {value: 0x0008, lo: 0x03}, - {value: 0x8104, lo: 0x8d, hi: 0x8d}, - {value: 0x4577, lo: 0x99, hi: 0x9b}, - {value: 0x458f, lo: 0x9e, hi: 0x9e}, - // Block 0x15, offset 0x8c - {value: 0x0000, lo: 0x01}, - {value: 0x8102, lo: 0xbc, hi: 0xbc}, - // Block 0x16, offset 0x8e - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0x8d, hi: 0x8d}, - // Block 0x17, offset 0x90 - {value: 0x0000, lo: 0x08}, - {value: 0xa000, lo: 0x87, hi: 0x87}, - {value: 0x2cb9, lo: 0x88, hi: 0x88}, - {value: 0x2cb1, lo: 0x8b, hi: 0x8b}, - {value: 0x2cc1, lo: 0x8c, hi: 0x8c}, - {value: 0x8104, lo: 0x8d, hi: 0x8d}, - {value: 0x9900, lo: 0x96, hi: 0x97}, - {value: 0x45a7, lo: 0x9c, hi: 0x9c}, - {value: 0x45af, lo: 0x9d, hi: 0x9d}, - // Block 0x18, offset 0x99 - {value: 0x0000, lo: 0x03}, - {value: 0xa000, lo: 0x92, hi: 0x92}, - {value: 0x2cc9, lo: 0x94, hi: 0x94}, - {value: 0x9900, lo: 0xbe, hi: 0xbe}, - // Block 0x19, offset 0x9d - {value: 0x0000, lo: 0x06}, - {value: 0xa000, lo: 0x86, hi: 0x87}, - {value: 0x2cd1, lo: 0x8a, hi: 0x8a}, - {value: 0x2ce1, lo: 0x8b, hi: 0x8b}, - {value: 0x2cd9, lo: 0x8c, hi: 0x8c}, - {value: 0x8104, lo: 0x8d, hi: 0x8d}, - {value: 0x9900, lo: 0x97, hi: 0x97}, - // Block 0x1a, offset 0xa4 - {value: 0x1801, lo: 0x04}, - {value: 0xa000, lo: 0x86, hi: 0x86}, - {value: 0x3ef3, lo: 0x88, hi: 0x88}, - {value: 0x8104, lo: 0x8d, hi: 0x8d}, - {value: 0x8120, lo: 0x95, hi: 0x96}, - // Block 0x1b, offset 0xa9 - {value: 0x0000, lo: 0x02}, - {value: 0x8102, lo: 0xbc, hi: 0xbc}, - {value: 0xa000, lo: 0xbf, hi: 0xbf}, - // Block 0x1c, offset 0xac - {value: 0x0000, lo: 0x09}, - {value: 0x2ce9, lo: 0x80, hi: 0x80}, - {value: 0x9900, lo: 0x82, hi: 0x82}, - {value: 0xa000, lo: 0x86, hi: 0x86}, - {value: 0x2cf1, lo: 0x87, hi: 0x87}, - {value: 0x2cf9, lo: 0x88, hi: 0x88}, - {value: 0x2f53, lo: 0x8a, hi: 0x8a}, - {value: 0x2ddb, lo: 0x8b, hi: 0x8b}, - {value: 0x8104, lo: 0x8d, hi: 0x8d}, - {value: 0x9900, lo: 0x95, hi: 0x96}, - // Block 0x1d, offset 0xb6 - {value: 0x0000, lo: 0x02}, - {value: 0x8104, lo: 0xbb, hi: 0xbc}, - {value: 0x9900, lo: 0xbe, hi: 0xbe}, - // Block 0x1e, offset 0xb9 - {value: 0x0000, lo: 0x06}, - {value: 0xa000, lo: 0x86, hi: 0x87}, - {value: 0x2d01, lo: 0x8a, hi: 0x8a}, - {value: 0x2d11, lo: 0x8b, hi: 0x8b}, - {value: 0x2d09, lo: 0x8c, hi: 0x8c}, - {value: 0x8104, lo: 0x8d, hi: 0x8d}, - {value: 0x9900, lo: 0x97, hi: 0x97}, - // Block 0x1f, offset 0xc0 - {value: 0x6be7, lo: 0x07}, - {value: 0x9904, lo: 0x8a, hi: 0x8a}, - {value: 0x9900, lo: 0x8f, hi: 0x8f}, - {value: 0xa000, lo: 0x99, hi: 0x99}, - {value: 0x3efb, lo: 0x9a, hi: 0x9a}, - {value: 0x2f5b, lo: 0x9c, hi: 0x9c}, - {value: 0x2de6, lo: 0x9d, hi: 0x9d}, - {value: 0x2d19, lo: 0x9e, hi: 0x9f}, - // Block 0x20, offset 0xc8 - {value: 0x0000, lo: 0x02}, - {value: 0x8122, lo: 0xb8, hi: 0xb9}, - {value: 0x8104, lo: 0xba, hi: 0xba}, - // Block 0x21, offset 0xcb - {value: 0x0000, lo: 0x01}, - {value: 0x8123, lo: 0x88, hi: 0x8b}, - // Block 0x22, offset 0xcd - {value: 0x0000, lo: 0x02}, - {value: 0x8124, lo: 0xb8, hi: 0xb9}, - {value: 0x8104, lo: 0xba, hi: 0xba}, - // Block 0x23, offset 0xd0 - {value: 0x0000, lo: 0x01}, - {value: 0x8125, lo: 0x88, hi: 0x8b}, - // Block 0x24, offset 0xd2 - {value: 0x0000, lo: 0x04}, - {value: 0x812d, lo: 0x98, hi: 0x99}, - {value: 0x812d, lo: 0xb5, hi: 0xb5}, - {value: 0x812d, lo: 0xb7, hi: 0xb7}, - {value: 0x812b, lo: 0xb9, hi: 0xb9}, - // Block 0x25, offset 0xd7 - {value: 0x0000, lo: 0x10}, - {value: 0x2647, lo: 0x83, hi: 0x83}, - {value: 0x264e, lo: 0x8d, hi: 0x8d}, - {value: 0x2655, lo: 0x92, hi: 0x92}, - {value: 0x265c, lo: 0x97, hi: 0x97}, - {value: 0x2663, lo: 0x9c, hi: 0x9c}, - {value: 0x2640, lo: 0xa9, hi: 0xa9}, - {value: 0x8126, lo: 0xb1, hi: 0xb1}, - {value: 0x8127, lo: 0xb2, hi: 0xb2}, - {value: 0x4a87, lo: 0xb3, hi: 0xb3}, - {value: 0x8128, lo: 0xb4, hi: 0xb4}, - {value: 0x4a90, lo: 0xb5, hi: 0xb5}, - {value: 0x45b7, lo: 0xb6, hi: 0xb6}, - {value: 0x8200, lo: 0xb7, hi: 0xb7}, - {value: 0x45bf, lo: 0xb8, hi: 0xb8}, - {value: 0x8200, lo: 0xb9, hi: 0xb9}, - {value: 0x8127, lo: 0xba, hi: 0xbd}, - // Block 0x26, offset 0xe8 - {value: 0x0000, lo: 0x0b}, - {value: 0x8127, lo: 0x80, hi: 0x80}, - {value: 0x4a99, lo: 0x81, hi: 0x81}, - {value: 0x8132, lo: 0x82, hi: 0x83}, - {value: 0x8104, lo: 0x84, hi: 0x84}, - {value: 0x8132, lo: 0x86, hi: 0x87}, - {value: 0x2671, lo: 0x93, hi: 0x93}, - {value: 0x2678, lo: 0x9d, hi: 0x9d}, - {value: 0x267f, lo: 0xa2, hi: 0xa2}, - {value: 0x2686, lo: 0xa7, hi: 0xa7}, - {value: 0x268d, lo: 0xac, hi: 0xac}, - {value: 0x266a, lo: 0xb9, hi: 0xb9}, - // Block 0x27, offset 0xf4 - {value: 0x0000, lo: 0x01}, - {value: 0x812d, lo: 0x86, hi: 0x86}, - // Block 0x28, offset 0xf6 - {value: 0x0000, lo: 0x05}, - {value: 0xa000, lo: 0xa5, hi: 0xa5}, - {value: 0x2d21, lo: 0xa6, hi: 0xa6}, - {value: 0x9900, lo: 0xae, hi: 0xae}, - {value: 0x8102, lo: 0xb7, hi: 0xb7}, - {value: 0x8104, lo: 0xb9, hi: 0xba}, - // Block 0x29, offset 0xfc - {value: 0x0000, lo: 0x01}, - {value: 0x812d, lo: 0x8d, hi: 0x8d}, - // Block 0x2a, offset 0xfe - {value: 0x0000, lo: 0x01}, - {value: 0xa000, lo: 0x80, hi: 0x92}, - // Block 0x2b, offset 0x100 - {value: 0x0000, lo: 0x01}, - {value: 0xb900, lo: 0xa1, hi: 0xb5}, - // Block 0x2c, offset 0x102 - {value: 0x0000, lo: 0x01}, - {value: 0x9900, lo: 0xa8, hi: 0xbf}, - // Block 0x2d, offset 0x104 - {value: 0x0000, lo: 0x01}, - {value: 0x9900, lo: 0x80, hi: 0x82}, - // Block 0x2e, offset 0x106 - {value: 0x0000, lo: 0x01}, - {value: 0x8132, lo: 0x9d, hi: 0x9f}, - // Block 0x2f, offset 0x108 - {value: 0x0000, lo: 0x02}, - {value: 0x8104, lo: 0x94, hi: 0x94}, - {value: 0x8104, lo: 0xb4, hi: 0xb4}, - // Block 0x30, offset 0x10b - {value: 0x0000, lo: 0x02}, - {value: 0x8104, lo: 0x92, hi: 0x92}, - {value: 0x8132, lo: 0x9d, hi: 0x9d}, - // Block 0x31, offset 0x10e - {value: 0x0000, lo: 0x01}, - {value: 0x8131, lo: 0xa9, hi: 0xa9}, - // Block 0x32, offset 0x110 - {value: 0x0004, lo: 0x02}, - {value: 0x812e, lo: 0xb9, hi: 0xba}, - {value: 0x812d, lo: 0xbb, hi: 0xbb}, - // Block 0x33, offset 0x113 - {value: 0x0000, lo: 0x02}, - {value: 0x8132, lo: 0x97, hi: 0x97}, - {value: 0x812d, lo: 0x98, hi: 0x98}, - // Block 0x34, offset 0x116 - {value: 0x0000, lo: 0x03}, - {value: 0x8104, lo: 0xa0, hi: 0xa0}, - {value: 0x8132, lo: 0xb5, hi: 0xbc}, - {value: 0x812d, lo: 0xbf, hi: 0xbf}, - // Block 0x35, offset 0x11a - {value: 0x0000, lo: 0x04}, - {value: 0x8132, lo: 0xb0, hi: 0xb4}, - {value: 0x812d, lo: 0xb5, hi: 0xba}, - {value: 0x8132, lo: 0xbb, hi: 0xbc}, - {value: 0x812d, lo: 0xbd, hi: 0xbd}, - // Block 0x36, offset 0x11f - {value: 0x0000, lo: 0x08}, - {value: 0x2d69, lo: 0x80, hi: 0x80}, - {value: 0x2d71, lo: 0x81, hi: 0x81}, - {value: 0xa000, lo: 0x82, hi: 0x82}, - {value: 0x2d79, lo: 0x83, hi: 0x83}, - {value: 0x8104, lo: 0x84, hi: 0x84}, - {value: 0x8132, lo: 0xab, hi: 0xab}, - {value: 0x812d, lo: 0xac, hi: 0xac}, - {value: 0x8132, lo: 0xad, hi: 0xb3}, - // Block 0x37, offset 0x128 - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0xaa, hi: 0xab}, - // Block 0x38, offset 0x12a - {value: 0x0000, lo: 0x02}, - {value: 0x8102, lo: 0xa6, hi: 0xa6}, - {value: 0x8104, lo: 0xb2, hi: 0xb3}, - // Block 0x39, offset 0x12d - {value: 0x0000, lo: 0x01}, - {value: 0x8102, lo: 0xb7, hi: 0xb7}, - // Block 0x3a, offset 0x12f - {value: 0x0000, lo: 0x0a}, - {value: 0x8132, lo: 0x90, hi: 0x92}, - {value: 0x8101, lo: 0x94, hi: 0x94}, - {value: 0x812d, lo: 0x95, hi: 0x99}, - {value: 0x8132, lo: 0x9a, hi: 0x9b}, - {value: 0x812d, lo: 0x9c, hi: 0x9f}, - {value: 0x8132, lo: 0xa0, hi: 0xa0}, - {value: 0x8101, lo: 0xa2, hi: 0xa8}, - {value: 0x812d, lo: 0xad, hi: 0xad}, - {value: 0x8132, lo: 0xb4, hi: 0xb4}, - {value: 0x8132, lo: 0xb8, hi: 0xb9}, - // Block 0x3b, offset 0x13a - {value: 0x0004, lo: 0x03}, - {value: 0x0433, lo: 0x80, hi: 0x81}, - {value: 0x8100, lo: 0x97, hi: 0x97}, - {value: 0x8100, lo: 0xbe, hi: 0xbe}, - // Block 0x3c, offset 0x13e - {value: 0x0000, lo: 0x0d}, - {value: 0x8132, lo: 0x90, hi: 0x91}, - {value: 0x8101, lo: 0x92, hi: 0x93}, - {value: 0x8132, lo: 0x94, hi: 0x97}, - {value: 0x8101, lo: 0x98, hi: 0x9a}, - {value: 0x8132, lo: 0x9b, hi: 0x9c}, - {value: 0x8132, lo: 0xa1, hi: 0xa1}, - {value: 0x8101, lo: 0xa5, hi: 0xa6}, - {value: 0x8132, lo: 0xa7, hi: 0xa7}, - {value: 0x812d, lo: 0xa8, hi: 0xa8}, - {value: 0x8132, lo: 0xa9, hi: 0xa9}, - {value: 0x8101, lo: 0xaa, hi: 0xab}, - {value: 0x812d, lo: 0xac, hi: 0xaf}, - {value: 0x8132, lo: 0xb0, hi: 0xb0}, - // Block 0x3d, offset 0x14c - {value: 0x427e, lo: 0x02}, - {value: 0x01b8, lo: 0xa6, hi: 0xa6}, - {value: 0x0057, lo: 0xaa, hi: 0xab}, - // Block 0x3e, offset 0x14f - {value: 0x0007, lo: 0x05}, - {value: 0xa000, lo: 0x90, hi: 0x90}, - {value: 0xa000, lo: 0x92, hi: 0x92}, - {value: 0xa000, lo: 0x94, hi: 0x94}, - {value: 0x3bbc, lo: 0x9a, hi: 0x9b}, - {value: 0x3bca, lo: 0xae, hi: 0xae}, - // Block 0x3f, offset 0x155 - {value: 0x000e, lo: 0x05}, - {value: 0x3bd1, lo: 0x8d, hi: 0x8e}, - {value: 0x3bd8, lo: 0x8f, hi: 0x8f}, - {value: 0xa000, lo: 0x90, hi: 0x90}, - {value: 0xa000, lo: 0x92, hi: 0x92}, - {value: 0xa000, lo: 0x94, hi: 0x94}, - // Block 0x40, offset 0x15b - {value: 0x6405, lo: 0x0a}, - {value: 0xa000, lo: 0x83, hi: 0x83}, - {value: 0x3be6, lo: 0x84, hi: 0x84}, - {value: 0xa000, lo: 0x88, hi: 0x88}, - {value: 0x3bed, lo: 0x89, hi: 0x89}, - {value: 0xa000, lo: 0x8b, hi: 0x8b}, - {value: 0x3bf4, lo: 0x8c, hi: 0x8c}, - {value: 0xa000, lo: 0xa3, hi: 0xa3}, - {value: 0x3bfb, lo: 0xa4, hi: 0xa5}, - {value: 0x3c02, lo: 0xa6, hi: 0xa6}, - {value: 0xa000, lo: 0xbc, hi: 0xbc}, - // Block 0x41, offset 0x166 - {value: 0x0007, lo: 0x03}, - {value: 0x3c6b, lo: 0xa0, hi: 0xa1}, - {value: 0x3c95, lo: 0xa2, hi: 0xa3}, - {value: 0x3cbf, lo: 0xaa, hi: 0xad}, - // Block 0x42, offset 0x16a - {value: 0x0004, lo: 0x01}, - {value: 0x048b, lo: 0xa9, hi: 0xaa}, - // Block 0x43, offset 0x16c - {value: 0x0000, lo: 0x01}, - {value: 0x44e0, lo: 0x9c, hi: 0x9c}, - // Block 0x44, offset 0x16e - {value: 0x0000, lo: 0x01}, - {value: 0x8132, lo: 0xaf, hi: 0xb1}, - // Block 0x45, offset 0x170 - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0xbf, hi: 0xbf}, - // Block 0x46, offset 0x172 - {value: 0x0000, lo: 0x01}, - {value: 0x8132, lo: 0xa0, hi: 0xbf}, - // Block 0x47, offset 0x174 - {value: 0x0000, lo: 0x05}, - {value: 0x812c, lo: 0xaa, hi: 0xaa}, - {value: 0x8131, lo: 0xab, hi: 0xab}, - {value: 0x8133, lo: 0xac, hi: 0xac}, - {value: 0x812e, lo: 0xad, hi: 0xad}, - {value: 0x812f, lo: 0xae, hi: 0xaf}, - // Block 0x48, offset 0x17a - {value: 0x0000, lo: 0x03}, - {value: 0x4aa2, lo: 0xb3, hi: 0xb3}, - {value: 0x4aa2, lo: 0xb5, hi: 0xb6}, - {value: 0x4aa2, lo: 0xba, hi: 0xbf}, - // Block 0x49, offset 0x17e - {value: 0x0000, lo: 0x01}, - {value: 0x4aa2, lo: 0x8f, hi: 0xa3}, - // Block 0x4a, offset 0x180 - {value: 0x0000, lo: 0x01}, - {value: 0x8100, lo: 0xae, hi: 0xbe}, - // Block 0x4b, offset 0x182 - {value: 0x0000, lo: 0x07}, - {value: 0x8100, lo: 0x84, hi: 0x84}, - {value: 0x8100, lo: 0x87, hi: 0x87}, - {value: 0x8100, lo: 0x90, hi: 0x90}, - {value: 0x8100, lo: 0x9e, hi: 0x9e}, - {value: 0x8100, lo: 0xa1, hi: 0xa1}, - {value: 0x8100, lo: 0xb2, hi: 0xb2}, - {value: 0x8100, lo: 0xbb, hi: 0xbb}, - // Block 0x4c, offset 0x18a - {value: 0x0000, lo: 0x03}, - {value: 0x8100, lo: 0x80, hi: 0x80}, - {value: 0x8100, lo: 0x8b, hi: 0x8b}, - {value: 0x8100, lo: 0x8e, hi: 0x8e}, - // Block 0x4d, offset 0x18e - {value: 0x0000, lo: 0x02}, - {value: 0x8132, lo: 0xaf, hi: 0xaf}, - {value: 0x8132, lo: 0xb4, hi: 0xbd}, - // Block 0x4e, offset 0x191 - {value: 0x0000, lo: 0x01}, - {value: 0x8132, lo: 0x9e, hi: 0x9f}, - // Block 0x4f, offset 0x193 - {value: 0x0000, lo: 0x01}, - {value: 0x8132, lo: 0xb0, hi: 0xb1}, - // Block 0x50, offset 0x195 - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0x86, hi: 0x86}, - // Block 0x51, offset 0x197 - {value: 0x0000, lo: 0x02}, - {value: 0x8104, lo: 0x84, hi: 0x84}, - {value: 0x8132, lo: 0xa0, hi: 0xb1}, - // Block 0x52, offset 0x19a - {value: 0x0000, lo: 0x01}, - {value: 0x812d, lo: 0xab, hi: 0xad}, - // Block 0x53, offset 0x19c - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0x93, hi: 0x93}, - // Block 0x54, offset 0x19e - {value: 0x0000, lo: 0x01}, - {value: 0x8102, lo: 0xb3, hi: 0xb3}, - // Block 0x55, offset 0x1a0 - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0x80, hi: 0x80}, - // Block 0x56, offset 0x1a2 - {value: 0x0000, lo: 0x05}, - {value: 0x8132, lo: 0xb0, hi: 0xb0}, - {value: 0x8132, lo: 0xb2, hi: 0xb3}, - {value: 0x812d, lo: 0xb4, hi: 0xb4}, - {value: 0x8132, lo: 0xb7, hi: 0xb8}, - {value: 0x8132, lo: 0xbe, hi: 0xbf}, - // Block 0x57, offset 0x1a8 - {value: 0x0000, lo: 0x02}, - {value: 0x8132, lo: 0x81, hi: 0x81}, - {value: 0x8104, lo: 0xb6, hi: 0xb6}, - // Block 0x58, offset 0x1ab - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0xad, hi: 0xad}, - // Block 0x59, offset 0x1ad - {value: 0x0000, lo: 0x06}, - {value: 0xe500, lo: 0x80, hi: 0x80}, - {value: 0xc600, lo: 0x81, hi: 0x9b}, - {value: 0xe500, lo: 0x9c, hi: 0x9c}, - {value: 0xc600, lo: 0x9d, hi: 0xb7}, - {value: 0xe500, lo: 0xb8, hi: 0xb8}, - {value: 0xc600, lo: 0xb9, hi: 0xbf}, - // Block 0x5a, offset 0x1b4 - {value: 0x0000, lo: 0x05}, - {value: 0xc600, lo: 0x80, hi: 0x93}, - {value: 0xe500, lo: 0x94, hi: 0x94}, - {value: 0xc600, lo: 0x95, hi: 0xaf}, - {value: 0xe500, lo: 0xb0, hi: 0xb0}, - {value: 0xc600, lo: 0xb1, hi: 0xbf}, - // Block 0x5b, offset 0x1ba - {value: 0x0000, lo: 0x05}, - {value: 0xc600, lo: 0x80, hi: 0x8b}, - {value: 0xe500, lo: 0x8c, hi: 0x8c}, - {value: 0xc600, lo: 0x8d, hi: 0xa7}, - {value: 0xe500, lo: 0xa8, hi: 0xa8}, - {value: 0xc600, lo: 0xa9, hi: 0xbf}, - // Block 0x5c, offset 0x1c0 - {value: 0x0000, lo: 0x07}, - {value: 0xc600, lo: 0x80, hi: 0x83}, - {value: 0xe500, lo: 0x84, hi: 0x84}, - {value: 0xc600, lo: 0x85, hi: 0x9f}, - {value: 0xe500, lo: 0xa0, hi: 0xa0}, - {value: 0xc600, lo: 0xa1, hi: 0xbb}, - {value: 0xe500, lo: 0xbc, hi: 0xbc}, - {value: 0xc600, lo: 0xbd, hi: 0xbf}, - // Block 0x5d, offset 0x1c8 - {value: 0x0000, lo: 0x05}, - {value: 0xc600, lo: 0x80, hi: 0x97}, - {value: 0xe500, lo: 0x98, hi: 0x98}, - {value: 0xc600, lo: 0x99, hi: 0xb3}, - {value: 0xe500, lo: 0xb4, hi: 0xb4}, - {value: 0xc600, lo: 0xb5, hi: 0xbf}, - // Block 0x5e, offset 0x1ce - {value: 0x0000, lo: 0x05}, - {value: 0xc600, lo: 0x80, hi: 0x8f}, - {value: 0xe500, lo: 0x90, hi: 0x90}, - {value: 0xc600, lo: 0x91, hi: 0xab}, - {value: 0xe500, lo: 0xac, hi: 0xac}, - {value: 0xc600, lo: 0xad, hi: 0xbf}, - // Block 0x5f, offset 0x1d4 - {value: 0x0000, lo: 0x05}, - {value: 0xc600, lo: 0x80, hi: 0x87}, - {value: 0xe500, lo: 0x88, hi: 0x88}, - {value: 0xc600, lo: 0x89, hi: 0xa3}, - {value: 0xe500, lo: 0xa4, hi: 0xa4}, - {value: 0xc600, lo: 0xa5, hi: 0xbf}, - // Block 0x60, offset 0x1da - {value: 0x0000, lo: 0x03}, - {value: 0xc600, lo: 0x80, hi: 0x87}, - {value: 0xe500, lo: 0x88, hi: 0x88}, - {value: 0xc600, lo: 0x89, hi: 0xa3}, - // Block 0x61, offset 0x1de - {value: 0x0006, lo: 0x0d}, - {value: 0x4393, lo: 0x9d, hi: 0x9d}, - {value: 0x8115, lo: 0x9e, hi: 0x9e}, - {value: 0x4405, lo: 0x9f, hi: 0x9f}, - {value: 0x43f3, lo: 0xaa, hi: 0xab}, - {value: 0x44f7, lo: 0xac, hi: 0xac}, - {value: 0x44ff, lo: 0xad, hi: 0xad}, - {value: 0x434b, lo: 0xae, hi: 0xb1}, - {value: 0x4369, lo: 0xb2, hi: 0xb4}, - {value: 0x4381, lo: 0xb5, hi: 0xb6}, - {value: 0x438d, lo: 0xb8, hi: 0xb8}, - {value: 0x4399, lo: 0xb9, hi: 0xbb}, - {value: 0x43b1, lo: 0xbc, hi: 0xbc}, - {value: 0x43b7, lo: 0xbe, hi: 0xbe}, - // Block 0x62, offset 0x1ec - {value: 0x0006, lo: 0x08}, - {value: 0x43bd, lo: 0x80, hi: 0x81}, - {value: 0x43c9, lo: 0x83, hi: 0x84}, - {value: 0x43db, lo: 0x86, hi: 0x89}, - {value: 0x43ff, lo: 0x8a, hi: 0x8a}, - {value: 0x437b, lo: 0x8b, hi: 0x8b}, - {value: 0x4363, lo: 0x8c, hi: 0x8c}, - {value: 0x43ab, lo: 0x8d, hi: 0x8d}, - {value: 0x43d5, lo: 0x8e, hi: 0x8e}, - // Block 0x63, offset 0x1f5 - {value: 0x0000, lo: 0x02}, - {value: 0x8100, lo: 0xa4, hi: 0xa5}, - {value: 0x8100, lo: 0xb0, hi: 0xb1}, - // Block 0x64, offset 0x1f8 - {value: 0x0000, lo: 0x02}, - {value: 0x8100, lo: 0x9b, hi: 0x9d}, - {value: 0x8200, lo: 0x9e, hi: 0xa3}, - // Block 0x65, offset 0x1fb - {value: 0x0000, lo: 0x01}, - {value: 0x8100, lo: 0x90, hi: 0x90}, - // Block 0x66, offset 0x1fd - {value: 0x0000, lo: 0x02}, - {value: 0x8100, lo: 0x99, hi: 0x99}, - {value: 0x8200, lo: 0xb2, hi: 0xb4}, - // Block 0x67, offset 0x200 - {value: 0x0000, lo: 0x01}, - {value: 0x8100, lo: 0xbc, hi: 0xbd}, - // Block 0x68, offset 0x202 - {value: 0x0000, lo: 0x03}, - {value: 0x8132, lo: 0xa0, hi: 0xa6}, - {value: 0x812d, lo: 0xa7, hi: 0xad}, - {value: 0x8132, lo: 0xae, hi: 0xaf}, - // Block 0x69, offset 0x206 - {value: 0x0000, lo: 0x04}, - {value: 0x8100, lo: 0x89, hi: 0x8c}, - {value: 0x8100, lo: 0xb0, hi: 0xb2}, - {value: 0x8100, lo: 0xb4, hi: 0xb4}, - {value: 0x8100, lo: 0xb6, hi: 0xbf}, - // Block 0x6a, offset 0x20b - {value: 0x0000, lo: 0x01}, - {value: 0x8100, lo: 0x81, hi: 0x8c}, - // Block 0x6b, offset 0x20d - {value: 0x0000, lo: 0x01}, - {value: 0x8100, lo: 0xb5, hi: 0xba}, - // Block 0x6c, offset 0x20f - {value: 0x0000, lo: 0x04}, - {value: 0x4aa2, lo: 0x9e, hi: 0x9f}, - {value: 0x4aa2, lo: 0xa3, hi: 0xa3}, - {value: 0x4aa2, lo: 0xa5, hi: 0xa6}, - {value: 0x4aa2, lo: 0xaa, hi: 0xaf}, - // Block 0x6d, offset 0x214 - {value: 0x0000, lo: 0x05}, - {value: 0x4aa2, lo: 0x82, hi: 0x87}, - {value: 0x4aa2, lo: 0x8a, hi: 0x8f}, - {value: 0x4aa2, lo: 0x92, hi: 0x97}, - {value: 0x4aa2, lo: 0x9a, hi: 0x9c}, - {value: 0x8100, lo: 0xa3, hi: 0xa3}, - // Block 0x6e, offset 0x21a - {value: 0x0000, lo: 0x01}, - {value: 0x812d, lo: 0xbd, hi: 0xbd}, - // Block 0x6f, offset 0x21c - {value: 0x0000, lo: 0x01}, - {value: 0x812d, lo: 0xa0, hi: 0xa0}, - // Block 0x70, offset 0x21e - {value: 0x0000, lo: 0x01}, - {value: 0x8132, lo: 0xb6, hi: 0xba}, - // Block 0x71, offset 0x220 - {value: 0x002c, lo: 0x05}, - {value: 0x812d, lo: 0x8d, hi: 0x8d}, - {value: 0x8132, lo: 0x8f, hi: 0x8f}, - {value: 0x8132, lo: 0xb8, hi: 0xb8}, - {value: 0x8101, lo: 0xb9, hi: 0xba}, - {value: 0x8104, lo: 0xbf, hi: 0xbf}, - // Block 0x72, offset 0x226 - {value: 0x0000, lo: 0x02}, - {value: 0x8132, lo: 0xa5, hi: 0xa5}, - {value: 0x812d, lo: 0xa6, hi: 0xa6}, - // Block 0x73, offset 0x229 - {value: 0x0000, lo: 0x01}, - {value: 0x8132, lo: 0xa4, hi: 0xa7}, - // Block 0x74, offset 0x22b - {value: 0x0000, lo: 0x05}, - {value: 0x812d, lo: 0x86, hi: 0x87}, - {value: 0x8132, lo: 0x88, hi: 0x8a}, - {value: 0x812d, lo: 0x8b, hi: 0x8b}, - {value: 0x8132, lo: 0x8c, hi: 0x8c}, - {value: 0x812d, lo: 0x8d, hi: 0x90}, - // Block 0x75, offset 0x231 - {value: 0x0000, lo: 0x02}, - {value: 0x8104, lo: 0x86, hi: 0x86}, - {value: 0x8104, lo: 0xbf, hi: 0xbf}, - // Block 0x76, offset 0x234 - {value: 0x17fe, lo: 0x07}, - {value: 0xa000, lo: 0x99, hi: 0x99}, - {value: 0x423b, lo: 0x9a, hi: 0x9a}, - {value: 0xa000, lo: 0x9b, hi: 0x9b}, - {value: 0x4245, lo: 0x9c, hi: 0x9c}, - {value: 0xa000, lo: 0xa5, hi: 0xa5}, - {value: 0x424f, lo: 0xab, hi: 0xab}, - {value: 0x8104, lo: 0xb9, hi: 0xba}, - // Block 0x77, offset 0x23c - {value: 0x0000, lo: 0x06}, - {value: 0x8132, lo: 0x80, hi: 0x82}, - {value: 0x9900, lo: 0xa7, hi: 0xa7}, - {value: 0x2d81, lo: 0xae, hi: 0xae}, - {value: 0x2d8b, lo: 0xaf, hi: 0xaf}, - {value: 0xa000, lo: 0xb1, hi: 0xb2}, - {value: 0x8104, lo: 0xb3, hi: 0xb4}, - // Block 0x78, offset 0x243 - {value: 0x0000, lo: 0x02}, - {value: 0x8104, lo: 0x80, hi: 0x80}, - {value: 0x8102, lo: 0x8a, hi: 0x8a}, - // Block 0x79, offset 0x246 - {value: 0x0000, lo: 0x02}, - {value: 0x8104, lo: 0xb5, hi: 0xb5}, - {value: 0x8102, lo: 0xb6, hi: 0xb6}, - // Block 0x7a, offset 0x249 - {value: 0x0002, lo: 0x01}, - {value: 0x8102, lo: 0xa9, hi: 0xaa}, - // Block 0x7b, offset 0x24b - {value: 0x0000, lo: 0x02}, - {value: 0x8102, lo: 0xbb, hi: 0xbc}, - {value: 0x9900, lo: 0xbe, hi: 0xbe}, - // Block 0x7c, offset 0x24e - {value: 0x0000, lo: 0x07}, - {value: 0xa000, lo: 0x87, hi: 0x87}, - {value: 0x2d95, lo: 0x8b, hi: 0x8b}, - {value: 0x2d9f, lo: 0x8c, hi: 0x8c}, - {value: 0x8104, lo: 0x8d, hi: 0x8d}, - {value: 0x9900, lo: 0x97, hi: 0x97}, - {value: 0x8132, lo: 0xa6, hi: 0xac}, - {value: 0x8132, lo: 0xb0, hi: 0xb4}, - // Block 0x7d, offset 0x256 - {value: 0x0000, lo: 0x03}, - {value: 0x8104, lo: 0x82, hi: 0x82}, - {value: 0x8102, lo: 0x86, hi: 0x86}, - {value: 0x8132, lo: 0x9e, hi: 0x9e}, - // Block 0x7e, offset 0x25a - {value: 0x6b57, lo: 0x06}, - {value: 0x9900, lo: 0xb0, hi: 0xb0}, - {value: 0xa000, lo: 0xb9, hi: 0xb9}, - {value: 0x9900, lo: 0xba, hi: 0xba}, - {value: 0x2db3, lo: 0xbb, hi: 0xbb}, - {value: 0x2da9, lo: 0xbc, hi: 0xbd}, - {value: 0x2dbd, lo: 0xbe, hi: 0xbe}, - // Block 0x7f, offset 0x261 - {value: 0x0000, lo: 0x02}, - {value: 0x8104, lo: 0x82, hi: 0x82}, - {value: 0x8102, lo: 0x83, hi: 0x83}, - // Block 0x80, offset 0x264 - {value: 0x0000, lo: 0x05}, - {value: 0x9900, lo: 0xaf, hi: 0xaf}, - {value: 0xa000, lo: 0xb8, hi: 0xb9}, - {value: 0x2dc7, lo: 0xba, hi: 0xba}, - {value: 0x2dd1, lo: 0xbb, hi: 0xbb}, - {value: 0x8104, lo: 0xbf, hi: 0xbf}, - // Block 0x81, offset 0x26a - {value: 0x0000, lo: 0x01}, - {value: 0x8102, lo: 0x80, hi: 0x80}, - // Block 0x82, offset 0x26c - {value: 0x0000, lo: 0x02}, - {value: 0x8104, lo: 0xb6, hi: 0xb6}, - {value: 0x8102, lo: 0xb7, hi: 0xb7}, - // Block 0x83, offset 0x26f - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0xab, hi: 0xab}, - // Block 0x84, offset 0x271 - {value: 0x0000, lo: 0x02}, - {value: 0x8104, lo: 0xb9, hi: 0xb9}, - {value: 0x8102, lo: 0xba, hi: 0xba}, - // Block 0x85, offset 0x274 - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0xa0, hi: 0xa0}, - // Block 0x86, offset 0x276 - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0xb4, hi: 0xb4}, - // Block 0x87, offset 0x278 - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0x87, hi: 0x87}, - // Block 0x88, offset 0x27a - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0x99, hi: 0x99}, - // Block 0x89, offset 0x27c - {value: 0x0000, lo: 0x02}, - {value: 0x8102, lo: 0x82, hi: 0x82}, - {value: 0x8104, lo: 0x84, hi: 0x85}, - // Block 0x8a, offset 0x27f - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0x97, hi: 0x97}, - // Block 0x8b, offset 0x281 - {value: 0x0000, lo: 0x01}, - {value: 0x8101, lo: 0xb0, hi: 0xb4}, - // Block 0x8c, offset 0x283 - {value: 0x0000, lo: 0x01}, - {value: 0x8132, lo: 0xb0, hi: 0xb6}, - // Block 0x8d, offset 0x285 - {value: 0x0000, lo: 0x01}, - {value: 0x8101, lo: 0x9e, hi: 0x9e}, - // Block 0x8e, offset 0x287 - {value: 0x0000, lo: 0x0c}, - {value: 0x45cf, lo: 0x9e, hi: 0x9e}, - {value: 0x45d9, lo: 0x9f, hi: 0x9f}, - {value: 0x460d, lo: 0xa0, hi: 0xa0}, - {value: 0x461b, lo: 0xa1, hi: 0xa1}, - {value: 0x4629, lo: 0xa2, hi: 0xa2}, - {value: 0x4637, lo: 0xa3, hi: 0xa3}, - {value: 0x4645, lo: 0xa4, hi: 0xa4}, - {value: 0x812b, lo: 0xa5, hi: 0xa6}, - {value: 0x8101, lo: 0xa7, hi: 0xa9}, - {value: 0x8130, lo: 0xad, hi: 0xad}, - {value: 0x812b, lo: 0xae, hi: 0xb2}, - {value: 0x812d, lo: 0xbb, hi: 0xbf}, - // Block 0x8f, offset 0x294 - {value: 0x0000, lo: 0x09}, - {value: 0x812d, lo: 0x80, hi: 0x82}, - {value: 0x8132, lo: 0x85, hi: 0x89}, - {value: 0x812d, lo: 0x8a, hi: 0x8b}, - {value: 0x8132, lo: 0xaa, hi: 0xad}, - {value: 0x45e3, lo: 0xbb, hi: 0xbb}, - {value: 0x45ed, lo: 0xbc, hi: 0xbc}, - {value: 0x4653, lo: 0xbd, hi: 0xbd}, - {value: 0x466f, lo: 0xbe, hi: 0xbe}, - {value: 0x4661, lo: 0xbf, hi: 0xbf}, - // Block 0x90, offset 0x29e - {value: 0x0000, lo: 0x01}, - {value: 0x467d, lo: 0x80, hi: 0x80}, - // Block 0x91, offset 0x2a0 - {value: 0x0000, lo: 0x01}, - {value: 0x8132, lo: 0x82, hi: 0x84}, - // Block 0x92, offset 0x2a2 - {value: 0x0000, lo: 0x05}, - {value: 0x8132, lo: 0x80, hi: 0x86}, - {value: 0x8132, lo: 0x88, hi: 0x98}, - {value: 0x8132, lo: 0x9b, hi: 0xa1}, - {value: 0x8132, lo: 0xa3, hi: 0xa4}, - {value: 0x8132, lo: 0xa6, hi: 0xaa}, - // Block 0x93, offset 0x2a8 - {value: 0x0000, lo: 0x01}, - {value: 0x8132, lo: 0xac, hi: 0xaf}, - // Block 0x94, offset 0x2aa - {value: 0x0000, lo: 0x01}, - {value: 0x812d, lo: 0x90, hi: 0x96}, - // Block 0x95, offset 0x2ac - {value: 0x0000, lo: 0x02}, - {value: 0x8132, lo: 0x84, hi: 0x89}, - {value: 0x8102, lo: 0x8a, hi: 0x8a}, - // Block 0x96, offset 0x2af - {value: 0x0000, lo: 0x01}, - {value: 0x8100, lo: 0x93, hi: 0x93}, -} - -// lookup returns the trie value for the first UTF-8 encoding in s and -// the width in bytes of this encoding. The size will be 0 if s does not -// hold enough bytes to complete the encoding. len(s) must be greater than 0. -func (t *nfkcTrie) lookup(s []byte) (v uint16, sz int) { - c0 := s[0] - switch { - case c0 < 0x80: // is ASCII - return nfkcValues[c0], 1 - case c0 < 0xC2: - return 0, 1 // Illegal UTF-8: not a starter, not ASCII. - case c0 < 0xE0: // 2-byte UTF-8 - if len(s) < 2 { - return 0, 0 - } - i := nfkcIndex[c0] - c1 := s[1] - if c1 < 0x80 || 0xC0 <= c1 { - return 0, 1 // Illegal UTF-8: not a continuation byte. - } - return t.lookupValue(uint32(i), c1), 2 - case c0 < 0xF0: // 3-byte UTF-8 - if len(s) < 3 { - return 0, 0 - } - i := nfkcIndex[c0] - c1 := s[1] - if c1 < 0x80 || 0xC0 <= c1 { - return 0, 1 // Illegal UTF-8: not a continuation byte. - } - o := uint32(i)<<6 + uint32(c1) - i = nfkcIndex[o] - c2 := s[2] - if c2 < 0x80 || 0xC0 <= c2 { - return 0, 2 // Illegal UTF-8: not a continuation byte. - } - return t.lookupValue(uint32(i), c2), 3 - case c0 < 0xF8: // 4-byte UTF-8 - if len(s) < 4 { - return 0, 0 - } - i := nfkcIndex[c0] - c1 := s[1] - if c1 < 0x80 || 0xC0 <= c1 { - return 0, 1 // Illegal UTF-8: not a continuation byte. - } - o := uint32(i)<<6 + uint32(c1) - i = nfkcIndex[o] - c2 := s[2] - if c2 < 0x80 || 0xC0 <= c2 { - return 0, 2 // Illegal UTF-8: not a continuation byte. - } - o = uint32(i)<<6 + uint32(c2) - i = nfkcIndex[o] - c3 := s[3] - if c3 < 0x80 || 0xC0 <= c3 { - return 0, 3 // Illegal UTF-8: not a continuation byte. - } - return t.lookupValue(uint32(i), c3), 4 - } - // Illegal rune - return 0, 1 -} - -// lookupUnsafe returns the trie value for the first UTF-8 encoding in s. -// s must start with a full and valid UTF-8 encoded rune. -func (t *nfkcTrie) lookupUnsafe(s []byte) uint16 { - c0 := s[0] - if c0 < 0x80 { // is ASCII - return nfkcValues[c0] - } - i := nfkcIndex[c0] - if c0 < 0xE0 { // 2-byte UTF-8 - return t.lookupValue(uint32(i), s[1]) - } - i = nfkcIndex[uint32(i)<<6+uint32(s[1])] - if c0 < 0xF0 { // 3-byte UTF-8 - return t.lookupValue(uint32(i), s[2]) - } - i = nfkcIndex[uint32(i)<<6+uint32(s[2])] - if c0 < 0xF8 { // 4-byte UTF-8 - return t.lookupValue(uint32(i), s[3]) - } - return 0 -} - -// lookupString returns the trie value for the first UTF-8 encoding in s and -// the width in bytes of this encoding. The size will be 0 if s does not -// hold enough bytes to complete the encoding. len(s) must be greater than 0. -func (t *nfkcTrie) lookupString(s string) (v uint16, sz int) { - c0 := s[0] - switch { - case c0 < 0x80: // is ASCII - return nfkcValues[c0], 1 - case c0 < 0xC2: - return 0, 1 // Illegal UTF-8: not a starter, not ASCII. - case c0 < 0xE0: // 2-byte UTF-8 - if len(s) < 2 { - return 0, 0 - } - i := nfkcIndex[c0] - c1 := s[1] - if c1 < 0x80 || 0xC0 <= c1 { - return 0, 1 // Illegal UTF-8: not a continuation byte. - } - return t.lookupValue(uint32(i), c1), 2 - case c0 < 0xF0: // 3-byte UTF-8 - if len(s) < 3 { - return 0, 0 - } - i := nfkcIndex[c0] - c1 := s[1] - if c1 < 0x80 || 0xC0 <= c1 { - return 0, 1 // Illegal UTF-8: not a continuation byte. - } - o := uint32(i)<<6 + uint32(c1) - i = nfkcIndex[o] - c2 := s[2] - if c2 < 0x80 || 0xC0 <= c2 { - return 0, 2 // Illegal UTF-8: not a continuation byte. - } - return t.lookupValue(uint32(i), c2), 3 - case c0 < 0xF8: // 4-byte UTF-8 - if len(s) < 4 { - return 0, 0 - } - i := nfkcIndex[c0] - c1 := s[1] - if c1 < 0x80 || 0xC0 <= c1 { - return 0, 1 // Illegal UTF-8: not a continuation byte. - } - o := uint32(i)<<6 + uint32(c1) - i = nfkcIndex[o] - c2 := s[2] - if c2 < 0x80 || 0xC0 <= c2 { - return 0, 2 // Illegal UTF-8: not a continuation byte. - } - o = uint32(i)<<6 + uint32(c2) - i = nfkcIndex[o] - c3 := s[3] - if c3 < 0x80 || 0xC0 <= c3 { - return 0, 3 // Illegal UTF-8: not a continuation byte. - } - return t.lookupValue(uint32(i), c3), 4 - } - // Illegal rune - return 0, 1 -} - -// lookupStringUnsafe returns the trie value for the first UTF-8 encoding in s. -// s must start with a full and valid UTF-8 encoded rune. -func (t *nfkcTrie) lookupStringUnsafe(s string) uint16 { - c0 := s[0] - if c0 < 0x80 { // is ASCII - return nfkcValues[c0] - } - i := nfkcIndex[c0] - if c0 < 0xE0 { // 2-byte UTF-8 - return t.lookupValue(uint32(i), s[1]) - } - i = nfkcIndex[uint32(i)<<6+uint32(s[1])] - if c0 < 0xF0 { // 3-byte UTF-8 - return t.lookupValue(uint32(i), s[2]) - } - i = nfkcIndex[uint32(i)<<6+uint32(s[2])] - if c0 < 0xF8 { // 4-byte UTF-8 - return t.lookupValue(uint32(i), s[3]) - } - return 0 -} - -// nfkcTrie. Total size: 18684 bytes (18.25 KiB). Checksum: 113e23c477adfabd. -type nfkcTrie struct{} - -func newNfkcTrie(i int) *nfkcTrie { - return &nfkcTrie{} -} - -// lookupValue determines the type of block n and looks up the value for b. -func (t *nfkcTrie) lookupValue(n uint32, b byte) uint16 { - switch { - case n < 92: - return uint16(nfkcValues[n<<6+uint32(b)]) - default: - n -= 92 - return uint16(nfkcSparse.lookup(n, b)) - } -} - -// nfkcValues: 94 blocks, 6016 entries, 12032 bytes -// The third block is the zero block. -var nfkcValues = [6016]uint16{ - // Block 0x0, offset 0x0 - 0x3c: 0xa000, 0x3d: 0xa000, 0x3e: 0xa000, - // Block 0x1, offset 0x40 - 0x41: 0xa000, 0x42: 0xa000, 0x43: 0xa000, 0x44: 0xa000, 0x45: 0xa000, - 0x46: 0xa000, 0x47: 0xa000, 0x48: 0xa000, 0x49: 0xa000, 0x4a: 0xa000, 0x4b: 0xa000, - 0x4c: 0xa000, 0x4d: 0xa000, 0x4e: 0xa000, 0x4f: 0xa000, 0x50: 0xa000, - 0x52: 0xa000, 0x53: 0xa000, 0x54: 0xa000, 0x55: 0xa000, 0x56: 0xa000, 0x57: 0xa000, - 0x58: 0xa000, 0x59: 0xa000, 0x5a: 0xa000, - 0x61: 0xa000, 0x62: 0xa000, 0x63: 0xa000, - 0x64: 0xa000, 0x65: 0xa000, 0x66: 0xa000, 0x67: 0xa000, 0x68: 0xa000, 0x69: 0xa000, - 0x6a: 0xa000, 0x6b: 0xa000, 0x6c: 0xa000, 0x6d: 0xa000, 0x6e: 0xa000, 0x6f: 0xa000, - 0x70: 0xa000, 0x72: 0xa000, 0x73: 0xa000, 0x74: 0xa000, 0x75: 0xa000, - 0x76: 0xa000, 0x77: 0xa000, 0x78: 0xa000, 0x79: 0xa000, 0x7a: 0xa000, - // Block 0x2, offset 0x80 - // Block 0x3, offset 0xc0 - 0xc0: 0x2f72, 0xc1: 0x2f77, 0xc2: 0x468b, 0xc3: 0x2f7c, 0xc4: 0x469a, 0xc5: 0x469f, - 0xc6: 0xa000, 0xc7: 0x46a9, 0xc8: 0x2fe5, 0xc9: 0x2fea, 0xca: 0x46ae, 0xcb: 0x2ffe, - 0xcc: 0x3071, 0xcd: 0x3076, 0xce: 0x307b, 0xcf: 0x46c2, 0xd1: 0x3107, - 0xd2: 0x312a, 0xd3: 0x312f, 0xd4: 0x46cc, 0xd5: 0x46d1, 0xd6: 0x46e0, - 0xd8: 0xa000, 0xd9: 0x31b6, 0xda: 0x31bb, 0xdb: 0x31c0, 0xdc: 0x4712, 0xdd: 0x3238, - 0xe0: 0x327e, 0xe1: 0x3283, 0xe2: 0x471c, 0xe3: 0x3288, - 0xe4: 0x472b, 0xe5: 0x4730, 0xe6: 0xa000, 0xe7: 0x473a, 0xe8: 0x32f1, 0xe9: 0x32f6, - 0xea: 0x473f, 0xeb: 0x330a, 0xec: 0x3382, 0xed: 0x3387, 0xee: 0x338c, 0xef: 0x4753, - 0xf1: 0x3418, 0xf2: 0x343b, 0xf3: 0x3440, 0xf4: 0x475d, 0xf5: 0x4762, - 0xf6: 0x4771, 0xf8: 0xa000, 0xf9: 0x34cc, 0xfa: 0x34d1, 0xfb: 0x34d6, - 0xfc: 0x47a3, 0xfd: 0x3553, 0xff: 0x356c, - // Block 0x4, offset 0x100 - 0x100: 0x2f81, 0x101: 0x328d, 0x102: 0x4690, 0x103: 0x4721, 0x104: 0x2f9f, 0x105: 0x32ab, - 0x106: 0x2fb3, 0x107: 0x32bf, 0x108: 0x2fb8, 0x109: 0x32c4, 0x10a: 0x2fbd, 0x10b: 0x32c9, - 0x10c: 0x2fc2, 0x10d: 0x32ce, 0x10e: 0x2fcc, 0x10f: 0x32d8, - 0x112: 0x46b3, 0x113: 0x4744, 0x114: 0x2ff4, 0x115: 0x3300, 0x116: 0x2ff9, 0x117: 0x3305, - 0x118: 0x3017, 0x119: 0x3323, 0x11a: 0x3008, 0x11b: 0x3314, 0x11c: 0x3030, 0x11d: 0x333c, - 0x11e: 0x303a, 0x11f: 0x3346, 0x120: 0x303f, 0x121: 0x334b, 0x122: 0x3049, 0x123: 0x3355, - 0x124: 0x304e, 0x125: 0x335a, 0x128: 0x3080, 0x129: 0x3391, - 0x12a: 0x3085, 0x12b: 0x3396, 0x12c: 0x308a, 0x12d: 0x339b, 0x12e: 0x30ad, 0x12f: 0x33b9, - 0x130: 0x308f, 0x132: 0x195d, 0x133: 0x19ea, 0x134: 0x30b7, 0x135: 0x33c3, - 0x136: 0x30cb, 0x137: 0x33dc, 0x139: 0x30d5, 0x13a: 0x33e6, 0x13b: 0x30df, - 0x13c: 0x33f0, 0x13d: 0x30da, 0x13e: 0x33eb, 0x13f: 0x1baf, - // Block 0x5, offset 0x140 - 0x140: 0x1c37, 0x143: 0x3102, 0x144: 0x3413, 0x145: 0x311b, - 0x146: 0x342c, 0x147: 0x3111, 0x148: 0x3422, 0x149: 0x1c5f, - 0x14c: 0x46d6, 0x14d: 0x4767, 0x14e: 0x3134, 0x14f: 0x3445, 0x150: 0x313e, 0x151: 0x344f, - 0x154: 0x315c, 0x155: 0x346d, 0x156: 0x3175, 0x157: 0x3486, - 0x158: 0x3166, 0x159: 0x3477, 0x15a: 0x46f9, 0x15b: 0x478a, 0x15c: 0x317f, 0x15d: 0x3490, - 0x15e: 0x318e, 0x15f: 0x349f, 0x160: 0x46fe, 0x161: 0x478f, 0x162: 0x31a7, 0x163: 0x34bd, - 0x164: 0x3198, 0x165: 0x34ae, 0x168: 0x4708, 0x169: 0x4799, - 0x16a: 0x470d, 0x16b: 0x479e, 0x16c: 0x31c5, 0x16d: 0x34db, 0x16e: 0x31cf, 0x16f: 0x34e5, - 0x170: 0x31d4, 0x171: 0x34ea, 0x172: 0x31f2, 0x173: 0x3508, 0x174: 0x3215, 0x175: 0x352b, - 0x176: 0x323d, 0x177: 0x3558, 0x178: 0x3251, 0x179: 0x3260, 0x17a: 0x3580, 0x17b: 0x326a, - 0x17c: 0x358a, 0x17d: 0x326f, 0x17e: 0x358f, 0x17f: 0x00a7, - // Block 0x6, offset 0x180 - 0x184: 0x2df1, 0x185: 0x2df7, - 0x186: 0x2dfd, 0x187: 0x1972, 0x188: 0x1975, 0x189: 0x1a0b, 0x18a: 0x198a, 0x18b: 0x198d, - 0x18c: 0x1a41, 0x18d: 0x2f8b, 0x18e: 0x3297, 0x18f: 0x3099, 0x190: 0x33a5, 0x191: 0x3143, - 0x192: 0x3454, 0x193: 0x31d9, 0x194: 0x34ef, 0x195: 0x39d2, 0x196: 0x3b61, 0x197: 0x39cb, - 0x198: 0x3b5a, 0x199: 0x39d9, 0x19a: 0x3b68, 0x19b: 0x39c4, 0x19c: 0x3b53, - 0x19e: 0x38b3, 0x19f: 0x3a42, 0x1a0: 0x38ac, 0x1a1: 0x3a3b, 0x1a2: 0x35b6, 0x1a3: 0x35c8, - 0x1a6: 0x3044, 0x1a7: 0x3350, 0x1a8: 0x30c1, 0x1a9: 0x33d2, - 0x1aa: 0x46ef, 0x1ab: 0x4780, 0x1ac: 0x3993, 0x1ad: 0x3b22, 0x1ae: 0x35da, 0x1af: 0x35e0, - 0x1b0: 0x33c8, 0x1b1: 0x1942, 0x1b2: 0x1945, 0x1b3: 0x19d2, 0x1b4: 0x302b, 0x1b5: 0x3337, - 0x1b8: 0x30fd, 0x1b9: 0x340e, 0x1ba: 0x38ba, 0x1bb: 0x3a49, - 0x1bc: 0x35b0, 0x1bd: 0x35c2, 0x1be: 0x35bc, 0x1bf: 0x35ce, - // Block 0x7, offset 0x1c0 - 0x1c0: 0x2f90, 0x1c1: 0x329c, 0x1c2: 0x2f95, 0x1c3: 0x32a1, 0x1c4: 0x300d, 0x1c5: 0x3319, - 0x1c6: 0x3012, 0x1c7: 0x331e, 0x1c8: 0x309e, 0x1c9: 0x33aa, 0x1ca: 0x30a3, 0x1cb: 0x33af, - 0x1cc: 0x3148, 0x1cd: 0x3459, 0x1ce: 0x314d, 0x1cf: 0x345e, 0x1d0: 0x316b, 0x1d1: 0x347c, - 0x1d2: 0x3170, 0x1d3: 0x3481, 0x1d4: 0x31de, 0x1d5: 0x34f4, 0x1d6: 0x31e3, 0x1d7: 0x34f9, - 0x1d8: 0x3189, 0x1d9: 0x349a, 0x1da: 0x31a2, 0x1db: 0x34b8, - 0x1de: 0x305d, 0x1df: 0x3369, - 0x1e6: 0x4695, 0x1e7: 0x4726, 0x1e8: 0x46bd, 0x1e9: 0x474e, - 0x1ea: 0x3962, 0x1eb: 0x3af1, 0x1ec: 0x393f, 0x1ed: 0x3ace, 0x1ee: 0x46db, 0x1ef: 0x476c, - 0x1f0: 0x395b, 0x1f1: 0x3aea, 0x1f2: 0x3247, 0x1f3: 0x3562, - // Block 0x8, offset 0x200 - 0x200: 0x9932, 0x201: 0x9932, 0x202: 0x9932, 0x203: 0x9932, 0x204: 0x9932, 0x205: 0x8132, - 0x206: 0x9932, 0x207: 0x9932, 0x208: 0x9932, 0x209: 0x9932, 0x20a: 0x9932, 0x20b: 0x9932, - 0x20c: 0x9932, 0x20d: 0x8132, 0x20e: 0x8132, 0x20f: 0x9932, 0x210: 0x8132, 0x211: 0x9932, - 0x212: 0x8132, 0x213: 0x9932, 0x214: 0x9932, 0x215: 0x8133, 0x216: 0x812d, 0x217: 0x812d, - 0x218: 0x812d, 0x219: 0x812d, 0x21a: 0x8133, 0x21b: 0x992b, 0x21c: 0x812d, 0x21d: 0x812d, - 0x21e: 0x812d, 0x21f: 0x812d, 0x220: 0x812d, 0x221: 0x8129, 0x222: 0x8129, 0x223: 0x992d, - 0x224: 0x992d, 0x225: 0x992d, 0x226: 0x992d, 0x227: 0x9929, 0x228: 0x9929, 0x229: 0x812d, - 0x22a: 0x812d, 0x22b: 0x812d, 0x22c: 0x812d, 0x22d: 0x992d, 0x22e: 0x992d, 0x22f: 0x812d, - 0x230: 0x992d, 0x231: 0x992d, 0x232: 0x812d, 0x233: 0x812d, 0x234: 0x8101, 0x235: 0x8101, - 0x236: 0x8101, 0x237: 0x8101, 0x238: 0x9901, 0x239: 0x812d, 0x23a: 0x812d, 0x23b: 0x812d, - 0x23c: 0x812d, 0x23d: 0x8132, 0x23e: 0x8132, 0x23f: 0x8132, - // Block 0x9, offset 0x240 - 0x240: 0x49b1, 0x241: 0x49b6, 0x242: 0x9932, 0x243: 0x49bb, 0x244: 0x4a74, 0x245: 0x9936, - 0x246: 0x8132, 0x247: 0x812d, 0x248: 0x812d, 0x249: 0x812d, 0x24a: 0x8132, 0x24b: 0x8132, - 0x24c: 0x8132, 0x24d: 0x812d, 0x24e: 0x812d, 0x250: 0x8132, 0x251: 0x8132, - 0x252: 0x8132, 0x253: 0x812d, 0x254: 0x812d, 0x255: 0x812d, 0x256: 0x812d, 0x257: 0x8132, - 0x258: 0x8133, 0x259: 0x812d, 0x25a: 0x812d, 0x25b: 0x8132, 0x25c: 0x8134, 0x25d: 0x8135, - 0x25e: 0x8135, 0x25f: 0x8134, 0x260: 0x8135, 0x261: 0x8135, 0x262: 0x8134, 0x263: 0x8132, - 0x264: 0x8132, 0x265: 0x8132, 0x266: 0x8132, 0x267: 0x8132, 0x268: 0x8132, 0x269: 0x8132, - 0x26a: 0x8132, 0x26b: 0x8132, 0x26c: 0x8132, 0x26d: 0x8132, 0x26e: 0x8132, 0x26f: 0x8132, - 0x274: 0x0170, - 0x27a: 0x42a8, - 0x27e: 0x0037, - // Block 0xa, offset 0x280 - 0x284: 0x425d, 0x285: 0x447e, - 0x286: 0x35ec, 0x287: 0x00ce, 0x288: 0x360a, 0x289: 0x3616, 0x28a: 0x3628, - 0x28c: 0x3646, 0x28e: 0x3658, 0x28f: 0x3676, 0x290: 0x3e0b, 0x291: 0xa000, - 0x295: 0xa000, 0x297: 0xa000, - 0x299: 0xa000, - 0x29f: 0xa000, 0x2a1: 0xa000, - 0x2a5: 0xa000, 0x2a9: 0xa000, - 0x2aa: 0x363a, 0x2ab: 0x366a, 0x2ac: 0x4801, 0x2ad: 0x369a, 0x2ae: 0x482b, 0x2af: 0x36ac, - 0x2b0: 0x3e73, 0x2b1: 0xa000, 0x2b5: 0xa000, - 0x2b7: 0xa000, 0x2b9: 0xa000, - 0x2bf: 0xa000, - // Block 0xb, offset 0x2c0 - 0x2c1: 0xa000, 0x2c5: 0xa000, - 0x2c9: 0xa000, 0x2ca: 0x4843, 0x2cb: 0x4861, - 0x2cc: 0x36ca, 0x2cd: 0x36e2, 0x2ce: 0x4879, 0x2d0: 0x01be, 0x2d1: 0x01d0, - 0x2d2: 0x01ac, 0x2d3: 0x430f, 0x2d4: 0x4315, 0x2d5: 0x01fa, 0x2d6: 0x01e8, - 0x2f0: 0x01d6, 0x2f1: 0x01eb, 0x2f2: 0x01ee, 0x2f4: 0x0188, 0x2f5: 0x01c7, - 0x2f9: 0x01a6, - // Block 0xc, offset 0x300 - 0x300: 0x3724, 0x301: 0x3730, 0x303: 0x371e, - 0x306: 0xa000, 0x307: 0x370c, - 0x30c: 0x3760, 0x30d: 0x3748, 0x30e: 0x3772, 0x310: 0xa000, - 0x313: 0xa000, 0x315: 0xa000, 0x316: 0xa000, 0x317: 0xa000, - 0x318: 0xa000, 0x319: 0x3754, 0x31a: 0xa000, - 0x31e: 0xa000, 0x323: 0xa000, - 0x327: 0xa000, - 0x32b: 0xa000, 0x32d: 0xa000, - 0x330: 0xa000, 0x333: 0xa000, 0x335: 0xa000, - 0x336: 0xa000, 0x337: 0xa000, 0x338: 0xa000, 0x339: 0x37d8, 0x33a: 0xa000, - 0x33e: 0xa000, - // Block 0xd, offset 0x340 - 0x341: 0x3736, 0x342: 0x37ba, - 0x350: 0x3712, 0x351: 0x3796, - 0x352: 0x3718, 0x353: 0x379c, 0x356: 0x372a, 0x357: 0x37ae, - 0x358: 0xa000, 0x359: 0xa000, 0x35a: 0x382c, 0x35b: 0x3832, 0x35c: 0x373c, 0x35d: 0x37c0, - 0x35e: 0x3742, 0x35f: 0x37c6, 0x362: 0x374e, 0x363: 0x37d2, - 0x364: 0x375a, 0x365: 0x37de, 0x366: 0x3766, 0x367: 0x37ea, 0x368: 0xa000, 0x369: 0xa000, - 0x36a: 0x3838, 0x36b: 0x383e, 0x36c: 0x3790, 0x36d: 0x3814, 0x36e: 0x376c, 0x36f: 0x37f0, - 0x370: 0x3778, 0x371: 0x37fc, 0x372: 0x377e, 0x373: 0x3802, 0x374: 0x3784, 0x375: 0x3808, - 0x378: 0x378a, 0x379: 0x380e, - // Block 0xe, offset 0x380 - 0x387: 0x1d64, - 0x391: 0x812d, - 0x392: 0x8132, 0x393: 0x8132, 0x394: 0x8132, 0x395: 0x8132, 0x396: 0x812d, 0x397: 0x8132, - 0x398: 0x8132, 0x399: 0x8132, 0x39a: 0x812e, 0x39b: 0x812d, 0x39c: 0x8132, 0x39d: 0x8132, - 0x39e: 0x8132, 0x39f: 0x8132, 0x3a0: 0x8132, 0x3a1: 0x8132, 0x3a2: 0x812d, 0x3a3: 0x812d, - 0x3a4: 0x812d, 0x3a5: 0x812d, 0x3a6: 0x812d, 0x3a7: 0x812d, 0x3a8: 0x8132, 0x3a9: 0x8132, - 0x3aa: 0x812d, 0x3ab: 0x8132, 0x3ac: 0x8132, 0x3ad: 0x812e, 0x3ae: 0x8131, 0x3af: 0x8132, - 0x3b0: 0x8105, 0x3b1: 0x8106, 0x3b2: 0x8107, 0x3b3: 0x8108, 0x3b4: 0x8109, 0x3b5: 0x810a, - 0x3b6: 0x810b, 0x3b7: 0x810c, 0x3b8: 0x810d, 0x3b9: 0x810e, 0x3ba: 0x810e, 0x3bb: 0x810f, - 0x3bc: 0x8110, 0x3bd: 0x8111, 0x3bf: 0x8112, - // Block 0xf, offset 0x3c0 - 0x3c8: 0xa000, 0x3ca: 0xa000, 0x3cb: 0x8116, - 0x3cc: 0x8117, 0x3cd: 0x8118, 0x3ce: 0x8119, 0x3cf: 0x811a, 0x3d0: 0x811b, 0x3d1: 0x811c, - 0x3d2: 0x811d, 0x3d3: 0x9932, 0x3d4: 0x9932, 0x3d5: 0x992d, 0x3d6: 0x812d, 0x3d7: 0x8132, - 0x3d8: 0x8132, 0x3d9: 0x8132, 0x3da: 0x8132, 0x3db: 0x8132, 0x3dc: 0x812d, 0x3dd: 0x8132, - 0x3de: 0x8132, 0x3df: 0x812d, - 0x3f0: 0x811e, 0x3f5: 0x1d87, - 0x3f6: 0x2016, 0x3f7: 0x2052, 0x3f8: 0x204d, - // Block 0x10, offset 0x400 - 0x413: 0x812d, 0x414: 0x8132, 0x415: 0x8132, 0x416: 0x8132, 0x417: 0x8132, - 0x418: 0x8132, 0x419: 0x8132, 0x41a: 0x8132, 0x41b: 0x8132, 0x41c: 0x8132, 0x41d: 0x8132, - 0x41e: 0x8132, 0x41f: 0x8132, 0x420: 0x8132, 0x421: 0x8132, 0x423: 0x812d, - 0x424: 0x8132, 0x425: 0x8132, 0x426: 0x812d, 0x427: 0x8132, 0x428: 0x8132, 0x429: 0x812d, - 0x42a: 0x8132, 0x42b: 0x8132, 0x42c: 0x8132, 0x42d: 0x812d, 0x42e: 0x812d, 0x42f: 0x812d, - 0x430: 0x8116, 0x431: 0x8117, 0x432: 0x8118, 0x433: 0x8132, 0x434: 0x8132, 0x435: 0x8132, - 0x436: 0x812d, 0x437: 0x8132, 0x438: 0x8132, 0x439: 0x812d, 0x43a: 0x812d, 0x43b: 0x8132, - 0x43c: 0x8132, 0x43d: 0x8132, 0x43e: 0x8132, 0x43f: 0x8132, - // Block 0x11, offset 0x440 - 0x445: 0xa000, - 0x446: 0x2d29, 0x447: 0xa000, 0x448: 0x2d31, 0x449: 0xa000, 0x44a: 0x2d39, 0x44b: 0xa000, - 0x44c: 0x2d41, 0x44d: 0xa000, 0x44e: 0x2d49, 0x451: 0xa000, - 0x452: 0x2d51, - 0x474: 0x8102, 0x475: 0x9900, - 0x47a: 0xa000, 0x47b: 0x2d59, - 0x47c: 0xa000, 0x47d: 0x2d61, 0x47e: 0xa000, 0x47f: 0xa000, - // Block 0x12, offset 0x480 - 0x480: 0x0069, 0x481: 0x006b, 0x482: 0x006f, 0x483: 0x0083, 0x484: 0x00f5, 0x485: 0x00f8, - 0x486: 0x0413, 0x487: 0x0085, 0x488: 0x0089, 0x489: 0x008b, 0x48a: 0x0104, 0x48b: 0x0107, - 0x48c: 0x010a, 0x48d: 0x008f, 0x48f: 0x0097, 0x490: 0x009b, 0x491: 0x00e0, - 0x492: 0x009f, 0x493: 0x00fe, 0x494: 0x0417, 0x495: 0x041b, 0x496: 0x00a1, 0x497: 0x00a9, - 0x498: 0x00ab, 0x499: 0x0423, 0x49a: 0x012b, 0x49b: 0x00ad, 0x49c: 0x0427, 0x49d: 0x01be, - 0x49e: 0x01c1, 0x49f: 0x01c4, 0x4a0: 0x01fa, 0x4a1: 0x01fd, 0x4a2: 0x0093, 0x4a3: 0x00a5, - 0x4a4: 0x00ab, 0x4a5: 0x00ad, 0x4a6: 0x01be, 0x4a7: 0x01c1, 0x4a8: 0x01eb, 0x4a9: 0x01fa, - 0x4aa: 0x01fd, - 0x4b8: 0x020c, - // Block 0x13, offset 0x4c0 - 0x4db: 0x00fb, 0x4dc: 0x0087, 0x4dd: 0x0101, - 0x4de: 0x00d4, 0x4df: 0x010a, 0x4e0: 0x008d, 0x4e1: 0x010d, 0x4e2: 0x0110, 0x4e3: 0x0116, - 0x4e4: 0x011c, 0x4e5: 0x011f, 0x4e6: 0x0122, 0x4e7: 0x042b, 0x4e8: 0x016a, 0x4e9: 0x0128, - 0x4ea: 0x042f, 0x4eb: 0x016d, 0x4ec: 0x0131, 0x4ed: 0x012e, 0x4ee: 0x0134, 0x4ef: 0x0137, - 0x4f0: 0x013a, 0x4f1: 0x013d, 0x4f2: 0x0140, 0x4f3: 0x014c, 0x4f4: 0x014f, 0x4f5: 0x00ec, - 0x4f6: 0x0152, 0x4f7: 0x0155, 0x4f8: 0x041f, 0x4f9: 0x0158, 0x4fa: 0x015b, 0x4fb: 0x00b5, - 0x4fc: 0x015e, 0x4fd: 0x0161, 0x4fe: 0x0164, 0x4ff: 0x01d0, - // Block 0x14, offset 0x500 - 0x500: 0x8132, 0x501: 0x8132, 0x502: 0x812d, 0x503: 0x8132, 0x504: 0x8132, 0x505: 0x8132, - 0x506: 0x8132, 0x507: 0x8132, 0x508: 0x8132, 0x509: 0x8132, 0x50a: 0x812d, 0x50b: 0x8132, - 0x50c: 0x8132, 0x50d: 0x8135, 0x50e: 0x812a, 0x50f: 0x812d, 0x510: 0x8129, 0x511: 0x8132, - 0x512: 0x8132, 0x513: 0x8132, 0x514: 0x8132, 0x515: 0x8132, 0x516: 0x8132, 0x517: 0x8132, - 0x518: 0x8132, 0x519: 0x8132, 0x51a: 0x8132, 0x51b: 0x8132, 0x51c: 0x8132, 0x51d: 0x8132, - 0x51e: 0x8132, 0x51f: 0x8132, 0x520: 0x8132, 0x521: 0x8132, 0x522: 0x8132, 0x523: 0x8132, - 0x524: 0x8132, 0x525: 0x8132, 0x526: 0x8132, 0x527: 0x8132, 0x528: 0x8132, 0x529: 0x8132, - 0x52a: 0x8132, 0x52b: 0x8132, 0x52c: 0x8132, 0x52d: 0x8132, 0x52e: 0x8132, 0x52f: 0x8132, - 0x530: 0x8132, 0x531: 0x8132, 0x532: 0x8132, 0x533: 0x8132, 0x534: 0x8132, 0x535: 0x8132, - 0x536: 0x8133, 0x537: 0x8131, 0x538: 0x8131, 0x539: 0x812d, 0x53b: 0x8132, - 0x53c: 0x8134, 0x53d: 0x812d, 0x53e: 0x8132, 0x53f: 0x812d, - // Block 0x15, offset 0x540 - 0x540: 0x2f9a, 0x541: 0x32a6, 0x542: 0x2fa4, 0x543: 0x32b0, 0x544: 0x2fa9, 0x545: 0x32b5, - 0x546: 0x2fae, 0x547: 0x32ba, 0x548: 0x38cf, 0x549: 0x3a5e, 0x54a: 0x2fc7, 0x54b: 0x32d3, - 0x54c: 0x2fd1, 0x54d: 0x32dd, 0x54e: 0x2fe0, 0x54f: 0x32ec, 0x550: 0x2fd6, 0x551: 0x32e2, - 0x552: 0x2fdb, 0x553: 0x32e7, 0x554: 0x38f2, 0x555: 0x3a81, 0x556: 0x38f9, 0x557: 0x3a88, - 0x558: 0x301c, 0x559: 0x3328, 0x55a: 0x3021, 0x55b: 0x332d, 0x55c: 0x3907, 0x55d: 0x3a96, - 0x55e: 0x3026, 0x55f: 0x3332, 0x560: 0x3035, 0x561: 0x3341, 0x562: 0x3053, 0x563: 0x335f, - 0x564: 0x3062, 0x565: 0x336e, 0x566: 0x3058, 0x567: 0x3364, 0x568: 0x3067, 0x569: 0x3373, - 0x56a: 0x306c, 0x56b: 0x3378, 0x56c: 0x30b2, 0x56d: 0x33be, 0x56e: 0x390e, 0x56f: 0x3a9d, - 0x570: 0x30bc, 0x571: 0x33cd, 0x572: 0x30c6, 0x573: 0x33d7, 0x574: 0x30d0, 0x575: 0x33e1, - 0x576: 0x46c7, 0x577: 0x4758, 0x578: 0x3915, 0x579: 0x3aa4, 0x57a: 0x30e9, 0x57b: 0x33fa, - 0x57c: 0x30e4, 0x57d: 0x33f5, 0x57e: 0x30ee, 0x57f: 0x33ff, - // Block 0x16, offset 0x580 - 0x580: 0x30f3, 0x581: 0x3404, 0x582: 0x30f8, 0x583: 0x3409, 0x584: 0x310c, 0x585: 0x341d, - 0x586: 0x3116, 0x587: 0x3427, 0x588: 0x3125, 0x589: 0x3436, 0x58a: 0x3120, 0x58b: 0x3431, - 0x58c: 0x3938, 0x58d: 0x3ac7, 0x58e: 0x3946, 0x58f: 0x3ad5, 0x590: 0x394d, 0x591: 0x3adc, - 0x592: 0x3954, 0x593: 0x3ae3, 0x594: 0x3152, 0x595: 0x3463, 0x596: 0x3157, 0x597: 0x3468, - 0x598: 0x3161, 0x599: 0x3472, 0x59a: 0x46f4, 0x59b: 0x4785, 0x59c: 0x399a, 0x59d: 0x3b29, - 0x59e: 0x317a, 0x59f: 0x348b, 0x5a0: 0x3184, 0x5a1: 0x3495, 0x5a2: 0x4703, 0x5a3: 0x4794, - 0x5a4: 0x39a1, 0x5a5: 0x3b30, 0x5a6: 0x39a8, 0x5a7: 0x3b37, 0x5a8: 0x39af, 0x5a9: 0x3b3e, - 0x5aa: 0x3193, 0x5ab: 0x34a4, 0x5ac: 0x319d, 0x5ad: 0x34b3, 0x5ae: 0x31b1, 0x5af: 0x34c7, - 0x5b0: 0x31ac, 0x5b1: 0x34c2, 0x5b2: 0x31ed, 0x5b3: 0x3503, 0x5b4: 0x31fc, 0x5b5: 0x3512, - 0x5b6: 0x31f7, 0x5b7: 0x350d, 0x5b8: 0x39b6, 0x5b9: 0x3b45, 0x5ba: 0x39bd, 0x5bb: 0x3b4c, - 0x5bc: 0x3201, 0x5bd: 0x3517, 0x5be: 0x3206, 0x5bf: 0x351c, - // Block 0x17, offset 0x5c0 - 0x5c0: 0x320b, 0x5c1: 0x3521, 0x5c2: 0x3210, 0x5c3: 0x3526, 0x5c4: 0x321f, 0x5c5: 0x3535, - 0x5c6: 0x321a, 0x5c7: 0x3530, 0x5c8: 0x3224, 0x5c9: 0x353f, 0x5ca: 0x3229, 0x5cb: 0x3544, - 0x5cc: 0x322e, 0x5cd: 0x3549, 0x5ce: 0x324c, 0x5cf: 0x3567, 0x5d0: 0x3265, 0x5d1: 0x3585, - 0x5d2: 0x3274, 0x5d3: 0x3594, 0x5d4: 0x3279, 0x5d5: 0x3599, 0x5d6: 0x337d, 0x5d7: 0x34a9, - 0x5d8: 0x353a, 0x5d9: 0x3576, 0x5da: 0x1be3, 0x5db: 0x42da, - 0x5e0: 0x46a4, 0x5e1: 0x4735, 0x5e2: 0x2f86, 0x5e3: 0x3292, - 0x5e4: 0x387b, 0x5e5: 0x3a0a, 0x5e6: 0x3874, 0x5e7: 0x3a03, 0x5e8: 0x3889, 0x5e9: 0x3a18, - 0x5ea: 0x3882, 0x5eb: 0x3a11, 0x5ec: 0x38c1, 0x5ed: 0x3a50, 0x5ee: 0x3897, 0x5ef: 0x3a26, - 0x5f0: 0x3890, 0x5f1: 0x3a1f, 0x5f2: 0x38a5, 0x5f3: 0x3a34, 0x5f4: 0x389e, 0x5f5: 0x3a2d, - 0x5f6: 0x38c8, 0x5f7: 0x3a57, 0x5f8: 0x46b8, 0x5f9: 0x4749, 0x5fa: 0x3003, 0x5fb: 0x330f, - 0x5fc: 0x2fef, 0x5fd: 0x32fb, 0x5fe: 0x38dd, 0x5ff: 0x3a6c, - // Block 0x18, offset 0x600 - 0x600: 0x38d6, 0x601: 0x3a65, 0x602: 0x38eb, 0x603: 0x3a7a, 0x604: 0x38e4, 0x605: 0x3a73, - 0x606: 0x3900, 0x607: 0x3a8f, 0x608: 0x3094, 0x609: 0x33a0, 0x60a: 0x30a8, 0x60b: 0x33b4, - 0x60c: 0x46ea, 0x60d: 0x477b, 0x60e: 0x3139, 0x60f: 0x344a, 0x610: 0x3923, 0x611: 0x3ab2, - 0x612: 0x391c, 0x613: 0x3aab, 0x614: 0x3931, 0x615: 0x3ac0, 0x616: 0x392a, 0x617: 0x3ab9, - 0x618: 0x398c, 0x619: 0x3b1b, 0x61a: 0x3970, 0x61b: 0x3aff, 0x61c: 0x3969, 0x61d: 0x3af8, - 0x61e: 0x397e, 0x61f: 0x3b0d, 0x620: 0x3977, 0x621: 0x3b06, 0x622: 0x3985, 0x623: 0x3b14, - 0x624: 0x31e8, 0x625: 0x34fe, 0x626: 0x31ca, 0x627: 0x34e0, 0x628: 0x39e7, 0x629: 0x3b76, - 0x62a: 0x39e0, 0x62b: 0x3b6f, 0x62c: 0x39f5, 0x62d: 0x3b84, 0x62e: 0x39ee, 0x62f: 0x3b7d, - 0x630: 0x39fc, 0x631: 0x3b8b, 0x632: 0x3233, 0x633: 0x354e, 0x634: 0x325b, 0x635: 0x357b, - 0x636: 0x3256, 0x637: 0x3571, 0x638: 0x3242, 0x639: 0x355d, - // Block 0x19, offset 0x640 - 0x640: 0x4807, 0x641: 0x480d, 0x642: 0x4921, 0x643: 0x4939, 0x644: 0x4929, 0x645: 0x4941, - 0x646: 0x4931, 0x647: 0x4949, 0x648: 0x47ad, 0x649: 0x47b3, 0x64a: 0x4891, 0x64b: 0x48a9, - 0x64c: 0x4899, 0x64d: 0x48b1, 0x64e: 0x48a1, 0x64f: 0x48b9, 0x650: 0x4819, 0x651: 0x481f, - 0x652: 0x3dbb, 0x653: 0x3dcb, 0x654: 0x3dc3, 0x655: 0x3dd3, - 0x658: 0x47b9, 0x659: 0x47bf, 0x65a: 0x3ceb, 0x65b: 0x3cfb, 0x65c: 0x3cf3, 0x65d: 0x3d03, - 0x660: 0x4831, 0x661: 0x4837, 0x662: 0x4951, 0x663: 0x4969, - 0x664: 0x4959, 0x665: 0x4971, 0x666: 0x4961, 0x667: 0x4979, 0x668: 0x47c5, 0x669: 0x47cb, - 0x66a: 0x48c1, 0x66b: 0x48d9, 0x66c: 0x48c9, 0x66d: 0x48e1, 0x66e: 0x48d1, 0x66f: 0x48e9, - 0x670: 0x4849, 0x671: 0x484f, 0x672: 0x3e1b, 0x673: 0x3e33, 0x674: 0x3e23, 0x675: 0x3e3b, - 0x676: 0x3e2b, 0x677: 0x3e43, 0x678: 0x47d1, 0x679: 0x47d7, 0x67a: 0x3d1b, 0x67b: 0x3d33, - 0x67c: 0x3d23, 0x67d: 0x3d3b, 0x67e: 0x3d2b, 0x67f: 0x3d43, - // Block 0x1a, offset 0x680 - 0x680: 0x4855, 0x681: 0x485b, 0x682: 0x3e4b, 0x683: 0x3e5b, 0x684: 0x3e53, 0x685: 0x3e63, - 0x688: 0x47dd, 0x689: 0x47e3, 0x68a: 0x3d4b, 0x68b: 0x3d5b, - 0x68c: 0x3d53, 0x68d: 0x3d63, 0x690: 0x4867, 0x691: 0x486d, - 0x692: 0x3e83, 0x693: 0x3e9b, 0x694: 0x3e8b, 0x695: 0x3ea3, 0x696: 0x3e93, 0x697: 0x3eab, - 0x699: 0x47e9, 0x69b: 0x3d6b, 0x69d: 0x3d73, - 0x69f: 0x3d7b, 0x6a0: 0x487f, 0x6a1: 0x4885, 0x6a2: 0x4981, 0x6a3: 0x4999, - 0x6a4: 0x4989, 0x6a5: 0x49a1, 0x6a6: 0x4991, 0x6a7: 0x49a9, 0x6a8: 0x47ef, 0x6a9: 0x47f5, - 0x6aa: 0x48f1, 0x6ab: 0x4909, 0x6ac: 0x48f9, 0x6ad: 0x4911, 0x6ae: 0x4901, 0x6af: 0x4919, - 0x6b0: 0x47fb, 0x6b1: 0x4321, 0x6b2: 0x3694, 0x6b3: 0x4327, 0x6b4: 0x4825, 0x6b5: 0x432d, - 0x6b6: 0x36a6, 0x6b7: 0x4333, 0x6b8: 0x36c4, 0x6b9: 0x4339, 0x6ba: 0x36dc, 0x6bb: 0x433f, - 0x6bc: 0x4873, 0x6bd: 0x4345, - // Block 0x1b, offset 0x6c0 - 0x6c0: 0x3da3, 0x6c1: 0x3dab, 0x6c2: 0x4187, 0x6c3: 0x41a5, 0x6c4: 0x4191, 0x6c5: 0x41af, - 0x6c6: 0x419b, 0x6c7: 0x41b9, 0x6c8: 0x3cdb, 0x6c9: 0x3ce3, 0x6ca: 0x40d3, 0x6cb: 0x40f1, - 0x6cc: 0x40dd, 0x6cd: 0x40fb, 0x6ce: 0x40e7, 0x6cf: 0x4105, 0x6d0: 0x3deb, 0x6d1: 0x3df3, - 0x6d2: 0x41c3, 0x6d3: 0x41e1, 0x6d4: 0x41cd, 0x6d5: 0x41eb, 0x6d6: 0x41d7, 0x6d7: 0x41f5, - 0x6d8: 0x3d0b, 0x6d9: 0x3d13, 0x6da: 0x410f, 0x6db: 0x412d, 0x6dc: 0x4119, 0x6dd: 0x4137, - 0x6de: 0x4123, 0x6df: 0x4141, 0x6e0: 0x3ec3, 0x6e1: 0x3ecb, 0x6e2: 0x41ff, 0x6e3: 0x421d, - 0x6e4: 0x4209, 0x6e5: 0x4227, 0x6e6: 0x4213, 0x6e7: 0x4231, 0x6e8: 0x3d83, 0x6e9: 0x3d8b, - 0x6ea: 0x414b, 0x6eb: 0x4169, 0x6ec: 0x4155, 0x6ed: 0x4173, 0x6ee: 0x415f, 0x6ef: 0x417d, - 0x6f0: 0x3688, 0x6f1: 0x3682, 0x6f2: 0x3d93, 0x6f3: 0x368e, 0x6f4: 0x3d9b, - 0x6f6: 0x4813, 0x6f7: 0x3db3, 0x6f8: 0x35f8, 0x6f9: 0x35f2, 0x6fa: 0x35e6, 0x6fb: 0x42f1, - 0x6fc: 0x35fe, 0x6fd: 0x428a, 0x6fe: 0x01d3, 0x6ff: 0x428a, - // Block 0x1c, offset 0x700 - 0x700: 0x42a3, 0x701: 0x4485, 0x702: 0x3ddb, 0x703: 0x36a0, 0x704: 0x3de3, - 0x706: 0x483d, 0x707: 0x3dfb, 0x708: 0x3604, 0x709: 0x42f7, 0x70a: 0x3610, 0x70b: 0x42fd, - 0x70c: 0x361c, 0x70d: 0x448c, 0x70e: 0x4493, 0x70f: 0x449a, 0x710: 0x36b8, 0x711: 0x36b2, - 0x712: 0x3e03, 0x713: 0x44e7, 0x716: 0x36be, 0x717: 0x3e13, - 0x718: 0x3634, 0x719: 0x362e, 0x71a: 0x3622, 0x71b: 0x4303, 0x71d: 0x44a1, - 0x71e: 0x44a8, 0x71f: 0x44af, 0x720: 0x36ee, 0x721: 0x36e8, 0x722: 0x3e6b, 0x723: 0x44ef, - 0x724: 0x36d0, 0x725: 0x36d6, 0x726: 0x36f4, 0x727: 0x3e7b, 0x728: 0x3664, 0x729: 0x365e, - 0x72a: 0x3652, 0x72b: 0x430f, 0x72c: 0x364c, 0x72d: 0x4477, 0x72e: 0x447e, 0x72f: 0x0081, - 0x732: 0x3eb3, 0x733: 0x36fa, 0x734: 0x3ebb, - 0x736: 0x488b, 0x737: 0x3ed3, 0x738: 0x3640, 0x739: 0x4309, 0x73a: 0x3670, 0x73b: 0x431b, - 0x73c: 0x367c, 0x73d: 0x425d, 0x73e: 0x428f, - // Block 0x1d, offset 0x740 - 0x740: 0x1bdb, 0x741: 0x1bdf, 0x742: 0x0047, 0x743: 0x1c57, 0x745: 0x1beb, - 0x746: 0x1bef, 0x747: 0x00e9, 0x749: 0x1c5b, 0x74a: 0x008f, 0x74b: 0x0051, - 0x74c: 0x0051, 0x74d: 0x0051, 0x74e: 0x0091, 0x74f: 0x00da, 0x750: 0x0053, 0x751: 0x0053, - 0x752: 0x0059, 0x753: 0x0099, 0x755: 0x005d, 0x756: 0x1990, - 0x759: 0x0061, 0x75a: 0x0063, 0x75b: 0x0065, 0x75c: 0x0065, 0x75d: 0x0065, - 0x760: 0x19a2, 0x761: 0x1bcb, 0x762: 0x19ab, - 0x764: 0x0075, 0x766: 0x01b8, 0x768: 0x0075, - 0x76a: 0x0057, 0x76b: 0x42d5, 0x76c: 0x0045, 0x76d: 0x0047, 0x76f: 0x008b, - 0x770: 0x004b, 0x771: 0x004d, 0x773: 0x005b, 0x774: 0x009f, 0x775: 0x0215, - 0x776: 0x0218, 0x777: 0x021b, 0x778: 0x021e, 0x779: 0x0093, 0x77b: 0x1b9b, - 0x77c: 0x01e8, 0x77d: 0x01c1, 0x77e: 0x0179, 0x77f: 0x01a0, - // Block 0x1e, offset 0x780 - 0x780: 0x0463, 0x785: 0x0049, - 0x786: 0x0089, 0x787: 0x008b, 0x788: 0x0093, 0x789: 0x0095, - 0x790: 0x2231, 0x791: 0x223d, - 0x792: 0x22f1, 0x793: 0x2219, 0x794: 0x229d, 0x795: 0x2225, 0x796: 0x22a3, 0x797: 0x22bb, - 0x798: 0x22c7, 0x799: 0x222b, 0x79a: 0x22cd, 0x79b: 0x2237, 0x79c: 0x22c1, 0x79d: 0x22d3, - 0x79e: 0x22d9, 0x79f: 0x1cbf, 0x7a0: 0x0053, 0x7a1: 0x195a, 0x7a2: 0x1ba7, 0x7a3: 0x1963, - 0x7a4: 0x006d, 0x7a5: 0x19ae, 0x7a6: 0x1bd3, 0x7a7: 0x1d4b, 0x7a8: 0x1966, 0x7a9: 0x0071, - 0x7aa: 0x19ba, 0x7ab: 0x1bd7, 0x7ac: 0x0059, 0x7ad: 0x0047, 0x7ae: 0x0049, 0x7af: 0x005b, - 0x7b0: 0x0093, 0x7b1: 0x19e7, 0x7b2: 0x1c1b, 0x7b3: 0x19f0, 0x7b4: 0x00ad, 0x7b5: 0x1a65, - 0x7b6: 0x1c4f, 0x7b7: 0x1d5f, 0x7b8: 0x19f3, 0x7b9: 0x00b1, 0x7ba: 0x1a68, 0x7bb: 0x1c53, - 0x7bc: 0x0099, 0x7bd: 0x0087, 0x7be: 0x0089, 0x7bf: 0x009b, - // Block 0x1f, offset 0x7c0 - 0x7c1: 0x3c09, 0x7c3: 0xa000, 0x7c4: 0x3c10, 0x7c5: 0xa000, - 0x7c7: 0x3c17, 0x7c8: 0xa000, 0x7c9: 0x3c1e, - 0x7cd: 0xa000, - 0x7e0: 0x2f68, 0x7e1: 0xa000, 0x7e2: 0x3c2c, - 0x7e4: 0xa000, 0x7e5: 0xa000, - 0x7ed: 0x3c25, 0x7ee: 0x2f63, 0x7ef: 0x2f6d, - 0x7f0: 0x3c33, 0x7f1: 0x3c3a, 0x7f2: 0xa000, 0x7f3: 0xa000, 0x7f4: 0x3c41, 0x7f5: 0x3c48, - 0x7f6: 0xa000, 0x7f7: 0xa000, 0x7f8: 0x3c4f, 0x7f9: 0x3c56, 0x7fa: 0xa000, 0x7fb: 0xa000, - 0x7fc: 0xa000, 0x7fd: 0xa000, - // Block 0x20, offset 0x800 - 0x800: 0x3c5d, 0x801: 0x3c64, 0x802: 0xa000, 0x803: 0xa000, 0x804: 0x3c79, 0x805: 0x3c80, - 0x806: 0xa000, 0x807: 0xa000, 0x808: 0x3c87, 0x809: 0x3c8e, - 0x811: 0xa000, - 0x812: 0xa000, - 0x822: 0xa000, - 0x828: 0xa000, 0x829: 0xa000, - 0x82b: 0xa000, 0x82c: 0x3ca3, 0x82d: 0x3caa, 0x82e: 0x3cb1, 0x82f: 0x3cb8, - 0x832: 0xa000, 0x833: 0xa000, 0x834: 0xa000, 0x835: 0xa000, - // Block 0x21, offset 0x840 - 0x860: 0x0023, 0x861: 0x0025, 0x862: 0x0027, 0x863: 0x0029, - 0x864: 0x002b, 0x865: 0x002d, 0x866: 0x002f, 0x867: 0x0031, 0x868: 0x0033, 0x869: 0x1882, - 0x86a: 0x1885, 0x86b: 0x1888, 0x86c: 0x188b, 0x86d: 0x188e, 0x86e: 0x1891, 0x86f: 0x1894, - 0x870: 0x1897, 0x871: 0x189a, 0x872: 0x189d, 0x873: 0x18a6, 0x874: 0x1a6b, 0x875: 0x1a6f, - 0x876: 0x1a73, 0x877: 0x1a77, 0x878: 0x1a7b, 0x879: 0x1a7f, 0x87a: 0x1a83, 0x87b: 0x1a87, - 0x87c: 0x1a8b, 0x87d: 0x1c83, 0x87e: 0x1c88, 0x87f: 0x1c8d, - // Block 0x22, offset 0x880 - 0x880: 0x1c92, 0x881: 0x1c97, 0x882: 0x1c9c, 0x883: 0x1ca1, 0x884: 0x1ca6, 0x885: 0x1cab, - 0x886: 0x1cb0, 0x887: 0x1cb5, 0x888: 0x187f, 0x889: 0x18a3, 0x88a: 0x18c7, 0x88b: 0x18eb, - 0x88c: 0x190f, 0x88d: 0x1918, 0x88e: 0x191e, 0x88f: 0x1924, 0x890: 0x192a, 0x891: 0x1b63, - 0x892: 0x1b67, 0x893: 0x1b6b, 0x894: 0x1b6f, 0x895: 0x1b73, 0x896: 0x1b77, 0x897: 0x1b7b, - 0x898: 0x1b7f, 0x899: 0x1b83, 0x89a: 0x1b87, 0x89b: 0x1b8b, 0x89c: 0x1af7, 0x89d: 0x1afb, - 0x89e: 0x1aff, 0x89f: 0x1b03, 0x8a0: 0x1b07, 0x8a1: 0x1b0b, 0x8a2: 0x1b0f, 0x8a3: 0x1b13, - 0x8a4: 0x1b17, 0x8a5: 0x1b1b, 0x8a6: 0x1b1f, 0x8a7: 0x1b23, 0x8a8: 0x1b27, 0x8a9: 0x1b2b, - 0x8aa: 0x1b2f, 0x8ab: 0x1b33, 0x8ac: 0x1b37, 0x8ad: 0x1b3b, 0x8ae: 0x1b3f, 0x8af: 0x1b43, - 0x8b0: 0x1b47, 0x8b1: 0x1b4b, 0x8b2: 0x1b4f, 0x8b3: 0x1b53, 0x8b4: 0x1b57, 0x8b5: 0x1b5b, - 0x8b6: 0x0043, 0x8b7: 0x0045, 0x8b8: 0x0047, 0x8b9: 0x0049, 0x8ba: 0x004b, 0x8bb: 0x004d, - 0x8bc: 0x004f, 0x8bd: 0x0051, 0x8be: 0x0053, 0x8bf: 0x0055, - // Block 0x23, offset 0x8c0 - 0x8c0: 0x06bf, 0x8c1: 0x06e3, 0x8c2: 0x06ef, 0x8c3: 0x06ff, 0x8c4: 0x0707, 0x8c5: 0x0713, - 0x8c6: 0x071b, 0x8c7: 0x0723, 0x8c8: 0x072f, 0x8c9: 0x0783, 0x8ca: 0x079b, 0x8cb: 0x07ab, - 0x8cc: 0x07bb, 0x8cd: 0x07cb, 0x8ce: 0x07db, 0x8cf: 0x07fb, 0x8d0: 0x07ff, 0x8d1: 0x0803, - 0x8d2: 0x0837, 0x8d3: 0x085f, 0x8d4: 0x086f, 0x8d5: 0x0877, 0x8d6: 0x087b, 0x8d7: 0x0887, - 0x8d8: 0x08a3, 0x8d9: 0x08a7, 0x8da: 0x08bf, 0x8db: 0x08c3, 0x8dc: 0x08cb, 0x8dd: 0x08db, - 0x8de: 0x0977, 0x8df: 0x098b, 0x8e0: 0x09cb, 0x8e1: 0x09df, 0x8e2: 0x09e7, 0x8e3: 0x09eb, - 0x8e4: 0x09fb, 0x8e5: 0x0a17, 0x8e6: 0x0a43, 0x8e7: 0x0a4f, 0x8e8: 0x0a6f, 0x8e9: 0x0a7b, - 0x8ea: 0x0a7f, 0x8eb: 0x0a83, 0x8ec: 0x0a9b, 0x8ed: 0x0a9f, 0x8ee: 0x0acb, 0x8ef: 0x0ad7, - 0x8f0: 0x0adf, 0x8f1: 0x0ae7, 0x8f2: 0x0af7, 0x8f3: 0x0aff, 0x8f4: 0x0b07, 0x8f5: 0x0b33, - 0x8f6: 0x0b37, 0x8f7: 0x0b3f, 0x8f8: 0x0b43, 0x8f9: 0x0b4b, 0x8fa: 0x0b53, 0x8fb: 0x0b63, - 0x8fc: 0x0b7f, 0x8fd: 0x0bf7, 0x8fe: 0x0c0b, 0x8ff: 0x0c0f, - // Block 0x24, offset 0x900 - 0x900: 0x0c8f, 0x901: 0x0c93, 0x902: 0x0ca7, 0x903: 0x0cab, 0x904: 0x0cb3, 0x905: 0x0cbb, - 0x906: 0x0cc3, 0x907: 0x0ccf, 0x908: 0x0cf7, 0x909: 0x0d07, 0x90a: 0x0d1b, 0x90b: 0x0d8b, - 0x90c: 0x0d97, 0x90d: 0x0da7, 0x90e: 0x0db3, 0x90f: 0x0dbf, 0x910: 0x0dc7, 0x911: 0x0dcb, - 0x912: 0x0dcf, 0x913: 0x0dd3, 0x914: 0x0dd7, 0x915: 0x0e8f, 0x916: 0x0ed7, 0x917: 0x0ee3, - 0x918: 0x0ee7, 0x919: 0x0eeb, 0x91a: 0x0eef, 0x91b: 0x0ef7, 0x91c: 0x0efb, 0x91d: 0x0f0f, - 0x91e: 0x0f2b, 0x91f: 0x0f33, 0x920: 0x0f73, 0x921: 0x0f77, 0x922: 0x0f7f, 0x923: 0x0f83, - 0x924: 0x0f8b, 0x925: 0x0f8f, 0x926: 0x0fb3, 0x927: 0x0fb7, 0x928: 0x0fd3, 0x929: 0x0fd7, - 0x92a: 0x0fdb, 0x92b: 0x0fdf, 0x92c: 0x0ff3, 0x92d: 0x1017, 0x92e: 0x101b, 0x92f: 0x101f, - 0x930: 0x1043, 0x931: 0x1083, 0x932: 0x1087, 0x933: 0x10a7, 0x934: 0x10b7, 0x935: 0x10bf, - 0x936: 0x10df, 0x937: 0x1103, 0x938: 0x1147, 0x939: 0x114f, 0x93a: 0x1163, 0x93b: 0x116f, - 0x93c: 0x1177, 0x93d: 0x117f, 0x93e: 0x1183, 0x93f: 0x1187, - // Block 0x25, offset 0x940 - 0x940: 0x119f, 0x941: 0x11a3, 0x942: 0x11bf, 0x943: 0x11c7, 0x944: 0x11cf, 0x945: 0x11d3, - 0x946: 0x11df, 0x947: 0x11e7, 0x948: 0x11eb, 0x949: 0x11ef, 0x94a: 0x11f7, 0x94b: 0x11fb, - 0x94c: 0x129b, 0x94d: 0x12af, 0x94e: 0x12e3, 0x94f: 0x12e7, 0x950: 0x12ef, 0x951: 0x131b, - 0x952: 0x1323, 0x953: 0x132b, 0x954: 0x1333, 0x955: 0x136f, 0x956: 0x1373, 0x957: 0x137b, - 0x958: 0x137f, 0x959: 0x1383, 0x95a: 0x13af, 0x95b: 0x13b3, 0x95c: 0x13bb, 0x95d: 0x13cf, - 0x95e: 0x13d3, 0x95f: 0x13ef, 0x960: 0x13f7, 0x961: 0x13fb, 0x962: 0x141f, 0x963: 0x143f, - 0x964: 0x1453, 0x965: 0x1457, 0x966: 0x145f, 0x967: 0x148b, 0x968: 0x148f, 0x969: 0x149f, - 0x96a: 0x14c3, 0x96b: 0x14cf, 0x96c: 0x14df, 0x96d: 0x14f7, 0x96e: 0x14ff, 0x96f: 0x1503, - 0x970: 0x1507, 0x971: 0x150b, 0x972: 0x1517, 0x973: 0x151b, 0x974: 0x1523, 0x975: 0x153f, - 0x976: 0x1543, 0x977: 0x1547, 0x978: 0x155f, 0x979: 0x1563, 0x97a: 0x156b, 0x97b: 0x157f, - 0x97c: 0x1583, 0x97d: 0x1587, 0x97e: 0x158f, 0x97f: 0x1593, - // Block 0x26, offset 0x980 - 0x986: 0xa000, 0x98b: 0xa000, - 0x98c: 0x3f0b, 0x98d: 0xa000, 0x98e: 0x3f13, 0x98f: 0xa000, 0x990: 0x3f1b, 0x991: 0xa000, - 0x992: 0x3f23, 0x993: 0xa000, 0x994: 0x3f2b, 0x995: 0xa000, 0x996: 0x3f33, 0x997: 0xa000, - 0x998: 0x3f3b, 0x999: 0xa000, 0x99a: 0x3f43, 0x99b: 0xa000, 0x99c: 0x3f4b, 0x99d: 0xa000, - 0x99e: 0x3f53, 0x99f: 0xa000, 0x9a0: 0x3f5b, 0x9a1: 0xa000, 0x9a2: 0x3f63, - 0x9a4: 0xa000, 0x9a5: 0x3f6b, 0x9a6: 0xa000, 0x9a7: 0x3f73, 0x9a8: 0xa000, 0x9a9: 0x3f7b, - 0x9af: 0xa000, - 0x9b0: 0x3f83, 0x9b1: 0x3f8b, 0x9b2: 0xa000, 0x9b3: 0x3f93, 0x9b4: 0x3f9b, 0x9b5: 0xa000, - 0x9b6: 0x3fa3, 0x9b7: 0x3fab, 0x9b8: 0xa000, 0x9b9: 0x3fb3, 0x9ba: 0x3fbb, 0x9bb: 0xa000, - 0x9bc: 0x3fc3, 0x9bd: 0x3fcb, - // Block 0x27, offset 0x9c0 - 0x9d4: 0x3f03, - 0x9d9: 0x9903, 0x9da: 0x9903, 0x9db: 0x42df, 0x9dc: 0x42e5, 0x9dd: 0xa000, - 0x9de: 0x3fd3, 0x9df: 0x26b7, - 0x9e6: 0xa000, - 0x9eb: 0xa000, 0x9ec: 0x3fe3, 0x9ed: 0xa000, 0x9ee: 0x3feb, 0x9ef: 0xa000, - 0x9f0: 0x3ff3, 0x9f1: 0xa000, 0x9f2: 0x3ffb, 0x9f3: 0xa000, 0x9f4: 0x4003, 0x9f5: 0xa000, - 0x9f6: 0x400b, 0x9f7: 0xa000, 0x9f8: 0x4013, 0x9f9: 0xa000, 0x9fa: 0x401b, 0x9fb: 0xa000, - 0x9fc: 0x4023, 0x9fd: 0xa000, 0x9fe: 0x402b, 0x9ff: 0xa000, - // Block 0x28, offset 0xa00 - 0xa00: 0x4033, 0xa01: 0xa000, 0xa02: 0x403b, 0xa04: 0xa000, 0xa05: 0x4043, - 0xa06: 0xa000, 0xa07: 0x404b, 0xa08: 0xa000, 0xa09: 0x4053, - 0xa0f: 0xa000, 0xa10: 0x405b, 0xa11: 0x4063, - 0xa12: 0xa000, 0xa13: 0x406b, 0xa14: 0x4073, 0xa15: 0xa000, 0xa16: 0x407b, 0xa17: 0x4083, - 0xa18: 0xa000, 0xa19: 0x408b, 0xa1a: 0x4093, 0xa1b: 0xa000, 0xa1c: 0x409b, 0xa1d: 0x40a3, - 0xa2f: 0xa000, - 0xa30: 0xa000, 0xa31: 0xa000, 0xa32: 0xa000, 0xa34: 0x3fdb, - 0xa37: 0x40ab, 0xa38: 0x40b3, 0xa39: 0x40bb, 0xa3a: 0x40c3, - 0xa3d: 0xa000, 0xa3e: 0x40cb, 0xa3f: 0x26cc, - // Block 0x29, offset 0xa40 - 0xa40: 0x0367, 0xa41: 0x032b, 0xa42: 0x032f, 0xa43: 0x0333, 0xa44: 0x037b, 0xa45: 0x0337, - 0xa46: 0x033b, 0xa47: 0x033f, 0xa48: 0x0343, 0xa49: 0x0347, 0xa4a: 0x034b, 0xa4b: 0x034f, - 0xa4c: 0x0353, 0xa4d: 0x0357, 0xa4e: 0x035b, 0xa4f: 0x49c0, 0xa50: 0x49c6, 0xa51: 0x49cc, - 0xa52: 0x49d2, 0xa53: 0x49d8, 0xa54: 0x49de, 0xa55: 0x49e4, 0xa56: 0x49ea, 0xa57: 0x49f0, - 0xa58: 0x49f6, 0xa59: 0x49fc, 0xa5a: 0x4a02, 0xa5b: 0x4a08, 0xa5c: 0x4a0e, 0xa5d: 0x4a14, - 0xa5e: 0x4a1a, 0xa5f: 0x4a20, 0xa60: 0x4a26, 0xa61: 0x4a2c, 0xa62: 0x4a32, 0xa63: 0x4a38, - 0xa64: 0x03c3, 0xa65: 0x035f, 0xa66: 0x0363, 0xa67: 0x03e7, 0xa68: 0x03eb, 0xa69: 0x03ef, - 0xa6a: 0x03f3, 0xa6b: 0x03f7, 0xa6c: 0x03fb, 0xa6d: 0x03ff, 0xa6e: 0x036b, 0xa6f: 0x0403, - 0xa70: 0x0407, 0xa71: 0x036f, 0xa72: 0x0373, 0xa73: 0x0377, 0xa74: 0x037f, 0xa75: 0x0383, - 0xa76: 0x0387, 0xa77: 0x038b, 0xa78: 0x038f, 0xa79: 0x0393, 0xa7a: 0x0397, 0xa7b: 0x039b, - 0xa7c: 0x039f, 0xa7d: 0x03a3, 0xa7e: 0x03a7, 0xa7f: 0x03ab, - // Block 0x2a, offset 0xa80 - 0xa80: 0x03af, 0xa81: 0x03b3, 0xa82: 0x040b, 0xa83: 0x040f, 0xa84: 0x03b7, 0xa85: 0x03bb, - 0xa86: 0x03bf, 0xa87: 0x03c7, 0xa88: 0x03cb, 0xa89: 0x03cf, 0xa8a: 0x03d3, 0xa8b: 0x03d7, - 0xa8c: 0x03db, 0xa8d: 0x03df, 0xa8e: 0x03e3, - 0xa92: 0x06bf, 0xa93: 0x071b, 0xa94: 0x06cb, 0xa95: 0x097b, 0xa96: 0x06cf, 0xa97: 0x06e7, - 0xa98: 0x06d3, 0xa99: 0x0f93, 0xa9a: 0x0707, 0xa9b: 0x06db, 0xa9c: 0x06c3, 0xa9d: 0x09ff, - 0xa9e: 0x098f, 0xa9f: 0x072f, - // Block 0x2b, offset 0xac0 - 0xac0: 0x2057, 0xac1: 0x205d, 0xac2: 0x2063, 0xac3: 0x2069, 0xac4: 0x206f, 0xac5: 0x2075, - 0xac6: 0x207b, 0xac7: 0x2081, 0xac8: 0x2087, 0xac9: 0x208d, 0xaca: 0x2093, 0xacb: 0x2099, - 0xacc: 0x209f, 0xacd: 0x20a5, 0xace: 0x2729, 0xacf: 0x2732, 0xad0: 0x273b, 0xad1: 0x2744, - 0xad2: 0x274d, 0xad3: 0x2756, 0xad4: 0x275f, 0xad5: 0x2768, 0xad6: 0x2771, 0xad7: 0x2783, - 0xad8: 0x278c, 0xad9: 0x2795, 0xada: 0x279e, 0xadb: 0x27a7, 0xadc: 0x277a, 0xadd: 0x2baf, - 0xade: 0x2af0, 0xae0: 0x20ab, 0xae1: 0x20c3, 0xae2: 0x20b7, 0xae3: 0x210b, - 0xae4: 0x20c9, 0xae5: 0x20e7, 0xae6: 0x20b1, 0xae7: 0x20e1, 0xae8: 0x20bd, 0xae9: 0x20f3, - 0xaea: 0x2123, 0xaeb: 0x2141, 0xaec: 0x213b, 0xaed: 0x212f, 0xaee: 0x217d, 0xaef: 0x2111, - 0xaf0: 0x211d, 0xaf1: 0x2135, 0xaf2: 0x2129, 0xaf3: 0x2153, 0xaf4: 0x20ff, 0xaf5: 0x2147, - 0xaf6: 0x2171, 0xaf7: 0x2159, 0xaf8: 0x20ed, 0xaf9: 0x20cf, 0xafa: 0x2105, 0xafb: 0x2117, - 0xafc: 0x214d, 0xafd: 0x20d5, 0xafe: 0x2177, 0xaff: 0x20f9, - // Block 0x2c, offset 0xb00 - 0xb00: 0x215f, 0xb01: 0x20db, 0xb02: 0x2165, 0xb03: 0x216b, 0xb04: 0x092f, 0xb05: 0x0b03, - 0xb06: 0x0ca7, 0xb07: 0x10c7, - 0xb10: 0x1bc7, 0xb11: 0x18a9, - 0xb12: 0x18ac, 0xb13: 0x18af, 0xb14: 0x18b2, 0xb15: 0x18b5, 0xb16: 0x18b8, 0xb17: 0x18bb, - 0xb18: 0x18be, 0xb19: 0x18c1, 0xb1a: 0x18ca, 0xb1b: 0x18cd, 0xb1c: 0x18d0, 0xb1d: 0x18d3, - 0xb1e: 0x18d6, 0xb1f: 0x18d9, 0xb20: 0x0313, 0xb21: 0x031b, 0xb22: 0x031f, 0xb23: 0x0327, - 0xb24: 0x032b, 0xb25: 0x032f, 0xb26: 0x0337, 0xb27: 0x033f, 0xb28: 0x0343, 0xb29: 0x034b, - 0xb2a: 0x034f, 0xb2b: 0x0353, 0xb2c: 0x0357, 0xb2d: 0x035b, 0xb2e: 0x2e1b, 0xb2f: 0x2e23, - 0xb30: 0x2e2b, 0xb31: 0x2e33, 0xb32: 0x2e3b, 0xb33: 0x2e43, 0xb34: 0x2e4b, 0xb35: 0x2e53, - 0xb36: 0x2e63, 0xb37: 0x2e6b, 0xb38: 0x2e73, 0xb39: 0x2e7b, 0xb3a: 0x2e83, 0xb3b: 0x2e8b, - 0xb3c: 0x2ed6, 0xb3d: 0x2e9e, 0xb3e: 0x2e5b, - // Block 0x2d, offset 0xb40 - 0xb40: 0x06bf, 0xb41: 0x071b, 0xb42: 0x06cb, 0xb43: 0x097b, 0xb44: 0x071f, 0xb45: 0x07af, - 0xb46: 0x06c7, 0xb47: 0x07ab, 0xb48: 0x070b, 0xb49: 0x0887, 0xb4a: 0x0d07, 0xb4b: 0x0e8f, - 0xb4c: 0x0dd7, 0xb4d: 0x0d1b, 0xb4e: 0x145f, 0xb4f: 0x098b, 0xb50: 0x0ccf, 0xb51: 0x0d4b, - 0xb52: 0x0d0b, 0xb53: 0x104b, 0xb54: 0x08fb, 0xb55: 0x0f03, 0xb56: 0x1387, 0xb57: 0x105f, - 0xb58: 0x0843, 0xb59: 0x108f, 0xb5a: 0x0f9b, 0xb5b: 0x0a17, 0xb5c: 0x140f, 0xb5d: 0x077f, - 0xb5e: 0x08ab, 0xb5f: 0x0df7, 0xb60: 0x1527, 0xb61: 0x0743, 0xb62: 0x07d3, 0xb63: 0x0d9b, - 0xb64: 0x06cf, 0xb65: 0x06e7, 0xb66: 0x06d3, 0xb67: 0x0adb, 0xb68: 0x08ef, 0xb69: 0x087f, - 0xb6a: 0x0a57, 0xb6b: 0x0a4b, 0xb6c: 0x0feb, 0xb6d: 0x073f, 0xb6e: 0x139b, 0xb6f: 0x089b, - 0xb70: 0x09f3, 0xb71: 0x18dc, 0xb72: 0x18df, 0xb73: 0x18e2, 0xb74: 0x18e5, 0xb75: 0x18ee, - 0xb76: 0x18f1, 0xb77: 0x18f4, 0xb78: 0x18f7, 0xb79: 0x18fa, 0xb7a: 0x18fd, 0xb7b: 0x1900, - 0xb7c: 0x1903, 0xb7d: 0x1906, 0xb7e: 0x1909, 0xb7f: 0x1912, - // Block 0x2e, offset 0xb80 - 0xb80: 0x1cc9, 0xb81: 0x1cd8, 0xb82: 0x1ce7, 0xb83: 0x1cf6, 0xb84: 0x1d05, 0xb85: 0x1d14, - 0xb86: 0x1d23, 0xb87: 0x1d32, 0xb88: 0x1d41, 0xb89: 0x218f, 0xb8a: 0x21a1, 0xb8b: 0x21b3, - 0xb8c: 0x1954, 0xb8d: 0x1c07, 0xb8e: 0x19d5, 0xb8f: 0x1bab, 0xb90: 0x04cb, 0xb91: 0x04d3, - 0xb92: 0x04db, 0xb93: 0x04e3, 0xb94: 0x04eb, 0xb95: 0x04ef, 0xb96: 0x04f3, 0xb97: 0x04f7, - 0xb98: 0x04fb, 0xb99: 0x04ff, 0xb9a: 0x0503, 0xb9b: 0x0507, 0xb9c: 0x050b, 0xb9d: 0x050f, - 0xb9e: 0x0513, 0xb9f: 0x0517, 0xba0: 0x051b, 0xba1: 0x0523, 0xba2: 0x0527, 0xba3: 0x052b, - 0xba4: 0x052f, 0xba5: 0x0533, 0xba6: 0x0537, 0xba7: 0x053b, 0xba8: 0x053f, 0xba9: 0x0543, - 0xbaa: 0x0547, 0xbab: 0x054b, 0xbac: 0x054f, 0xbad: 0x0553, 0xbae: 0x0557, 0xbaf: 0x055b, - 0xbb0: 0x055f, 0xbb1: 0x0563, 0xbb2: 0x0567, 0xbb3: 0x056f, 0xbb4: 0x0577, 0xbb5: 0x057f, - 0xbb6: 0x0583, 0xbb7: 0x0587, 0xbb8: 0x058b, 0xbb9: 0x058f, 0xbba: 0x0593, 0xbbb: 0x0597, - 0xbbc: 0x059b, 0xbbd: 0x059f, 0xbbe: 0x05a3, - // Block 0x2f, offset 0xbc0 - 0xbc0: 0x2b0f, 0xbc1: 0x29ab, 0xbc2: 0x2b1f, 0xbc3: 0x2883, 0xbc4: 0x2ee7, 0xbc5: 0x288d, - 0xbc6: 0x2897, 0xbc7: 0x2f2b, 0xbc8: 0x29b8, 0xbc9: 0x28a1, 0xbca: 0x28ab, 0xbcb: 0x28b5, - 0xbcc: 0x29df, 0xbcd: 0x29ec, 0xbce: 0x29c5, 0xbcf: 0x29d2, 0xbd0: 0x2eac, 0xbd1: 0x29f9, - 0xbd2: 0x2a06, 0xbd3: 0x2bc1, 0xbd4: 0x26be, 0xbd5: 0x2bd4, 0xbd6: 0x2be7, 0xbd7: 0x2b2f, - 0xbd8: 0x2a13, 0xbd9: 0x2bfa, 0xbda: 0x2c0d, 0xbdb: 0x2a20, 0xbdc: 0x28bf, 0xbdd: 0x28c9, - 0xbde: 0x2eba, 0xbdf: 0x2a2d, 0xbe0: 0x2b3f, 0xbe1: 0x2ef8, 0xbe2: 0x28d3, 0xbe3: 0x28dd, - 0xbe4: 0x2a3a, 0xbe5: 0x28e7, 0xbe6: 0x28f1, 0xbe7: 0x26d3, 0xbe8: 0x26da, 0xbe9: 0x28fb, - 0xbea: 0x2905, 0xbeb: 0x2c20, 0xbec: 0x2a47, 0xbed: 0x2b4f, 0xbee: 0x2c33, 0xbef: 0x2a54, - 0xbf0: 0x2919, 0xbf1: 0x290f, 0xbf2: 0x2f3f, 0xbf3: 0x2a61, 0xbf4: 0x2c46, 0xbf5: 0x2923, - 0xbf6: 0x2b5f, 0xbf7: 0x292d, 0xbf8: 0x2a7b, 0xbf9: 0x2937, 0xbfa: 0x2a88, 0xbfb: 0x2f09, - 0xbfc: 0x2a6e, 0xbfd: 0x2b6f, 0xbfe: 0x2a95, 0xbff: 0x26e1, - // Block 0x30, offset 0xc00 - 0xc00: 0x2f1a, 0xc01: 0x2941, 0xc02: 0x294b, 0xc03: 0x2aa2, 0xc04: 0x2955, 0xc05: 0x295f, - 0xc06: 0x2969, 0xc07: 0x2b7f, 0xc08: 0x2aaf, 0xc09: 0x26e8, 0xc0a: 0x2c59, 0xc0b: 0x2e93, - 0xc0c: 0x2b8f, 0xc0d: 0x2abc, 0xc0e: 0x2ec8, 0xc0f: 0x2973, 0xc10: 0x297d, 0xc11: 0x2ac9, - 0xc12: 0x26ef, 0xc13: 0x2ad6, 0xc14: 0x2b9f, 0xc15: 0x26f6, 0xc16: 0x2c6c, 0xc17: 0x2987, - 0xc18: 0x1cba, 0xc19: 0x1cce, 0xc1a: 0x1cdd, 0xc1b: 0x1cec, 0xc1c: 0x1cfb, 0xc1d: 0x1d0a, - 0xc1e: 0x1d19, 0xc1f: 0x1d28, 0xc20: 0x1d37, 0xc21: 0x1d46, 0xc22: 0x2195, 0xc23: 0x21a7, - 0xc24: 0x21b9, 0xc25: 0x21c5, 0xc26: 0x21d1, 0xc27: 0x21dd, 0xc28: 0x21e9, 0xc29: 0x21f5, - 0xc2a: 0x2201, 0xc2b: 0x220d, 0xc2c: 0x2249, 0xc2d: 0x2255, 0xc2e: 0x2261, 0xc2f: 0x226d, - 0xc30: 0x2279, 0xc31: 0x1c17, 0xc32: 0x19c9, 0xc33: 0x1936, 0xc34: 0x1be7, 0xc35: 0x1a4a, - 0xc36: 0x1a59, 0xc37: 0x19cf, 0xc38: 0x1bff, 0xc39: 0x1c03, 0xc3a: 0x1960, 0xc3b: 0x2704, - 0xc3c: 0x2712, 0xc3d: 0x26fd, 0xc3e: 0x270b, 0xc3f: 0x2ae3, - // Block 0x31, offset 0xc40 - 0xc40: 0x1a4d, 0xc41: 0x1a35, 0xc42: 0x1c63, 0xc43: 0x1a1d, 0xc44: 0x19f6, 0xc45: 0x1969, - 0xc46: 0x1978, 0xc47: 0x1948, 0xc48: 0x1bf3, 0xc49: 0x1d55, 0xc4a: 0x1a50, 0xc4b: 0x1a38, - 0xc4c: 0x1c67, 0xc4d: 0x1c73, 0xc4e: 0x1a29, 0xc4f: 0x19ff, 0xc50: 0x1957, 0xc51: 0x1c1f, - 0xc52: 0x1bb3, 0xc53: 0x1b9f, 0xc54: 0x1bcf, 0xc55: 0x1c77, 0xc56: 0x1a2c, 0xc57: 0x19cc, - 0xc58: 0x1a02, 0xc59: 0x19e1, 0xc5a: 0x1a44, 0xc5b: 0x1c7b, 0xc5c: 0x1a2f, 0xc5d: 0x19c3, - 0xc5e: 0x1a05, 0xc5f: 0x1c3f, 0xc60: 0x1bf7, 0xc61: 0x1a17, 0xc62: 0x1c27, 0xc63: 0x1c43, - 0xc64: 0x1bfb, 0xc65: 0x1a1a, 0xc66: 0x1c2b, 0xc67: 0x22eb, 0xc68: 0x22ff, 0xc69: 0x1999, - 0xc6a: 0x1c23, 0xc6b: 0x1bb7, 0xc6c: 0x1ba3, 0xc6d: 0x1c4b, 0xc6e: 0x2719, 0xc6f: 0x27b0, - 0xc70: 0x1a5c, 0xc71: 0x1a47, 0xc72: 0x1c7f, 0xc73: 0x1a32, 0xc74: 0x1a53, 0xc75: 0x1a3b, - 0xc76: 0x1c6b, 0xc77: 0x1a20, 0xc78: 0x19f9, 0xc79: 0x1984, 0xc7a: 0x1a56, 0xc7b: 0x1a3e, - 0xc7c: 0x1c6f, 0xc7d: 0x1a23, 0xc7e: 0x19fc, 0xc7f: 0x1987, - // Block 0x32, offset 0xc80 - 0xc80: 0x1c2f, 0xc81: 0x1bbb, 0xc82: 0x1d50, 0xc83: 0x1939, 0xc84: 0x19bd, 0xc85: 0x19c0, - 0xc86: 0x22f8, 0xc87: 0x1b97, 0xc88: 0x19c6, 0xc89: 0x194b, 0xc8a: 0x19e4, 0xc8b: 0x194e, - 0xc8c: 0x19ed, 0xc8d: 0x196c, 0xc8e: 0x196f, 0xc8f: 0x1a08, 0xc90: 0x1a0e, 0xc91: 0x1a11, - 0xc92: 0x1c33, 0xc93: 0x1a14, 0xc94: 0x1a26, 0xc95: 0x1c3b, 0xc96: 0x1c47, 0xc97: 0x1993, - 0xc98: 0x1d5a, 0xc99: 0x1bbf, 0xc9a: 0x1996, 0xc9b: 0x1a5f, 0xc9c: 0x19a8, 0xc9d: 0x19b7, - 0xc9e: 0x22e5, 0xc9f: 0x22df, 0xca0: 0x1cc4, 0xca1: 0x1cd3, 0xca2: 0x1ce2, 0xca3: 0x1cf1, - 0xca4: 0x1d00, 0xca5: 0x1d0f, 0xca6: 0x1d1e, 0xca7: 0x1d2d, 0xca8: 0x1d3c, 0xca9: 0x2189, - 0xcaa: 0x219b, 0xcab: 0x21ad, 0xcac: 0x21bf, 0xcad: 0x21cb, 0xcae: 0x21d7, 0xcaf: 0x21e3, - 0xcb0: 0x21ef, 0xcb1: 0x21fb, 0xcb2: 0x2207, 0xcb3: 0x2243, 0xcb4: 0x224f, 0xcb5: 0x225b, - 0xcb6: 0x2267, 0xcb7: 0x2273, 0xcb8: 0x227f, 0xcb9: 0x2285, 0xcba: 0x228b, 0xcbb: 0x2291, - 0xcbc: 0x2297, 0xcbd: 0x22a9, 0xcbe: 0x22af, 0xcbf: 0x1c13, - // Block 0x33, offset 0xcc0 - 0xcc0: 0x1377, 0xcc1: 0x0cfb, 0xcc2: 0x13d3, 0xcc3: 0x139f, 0xcc4: 0x0e57, 0xcc5: 0x06eb, - 0xcc6: 0x08df, 0xcc7: 0x162b, 0xcc8: 0x162b, 0xcc9: 0x0a0b, 0xcca: 0x145f, 0xccb: 0x0943, - 0xccc: 0x0a07, 0xccd: 0x0bef, 0xcce: 0x0fcf, 0xccf: 0x115f, 0xcd0: 0x1297, 0xcd1: 0x12d3, - 0xcd2: 0x1307, 0xcd3: 0x141b, 0xcd4: 0x0d73, 0xcd5: 0x0dff, 0xcd6: 0x0eab, 0xcd7: 0x0f43, - 0xcd8: 0x125f, 0xcd9: 0x1447, 0xcda: 0x1573, 0xcdb: 0x070f, 0xcdc: 0x08b3, 0xcdd: 0x0d87, - 0xcde: 0x0ecf, 0xcdf: 0x1293, 0xce0: 0x15c3, 0xce1: 0x0ab3, 0xce2: 0x0e77, 0xce3: 0x1283, - 0xce4: 0x1317, 0xce5: 0x0c23, 0xce6: 0x11bb, 0xce7: 0x12df, 0xce8: 0x0b1f, 0xce9: 0x0d0f, - 0xcea: 0x0e17, 0xceb: 0x0f1b, 0xcec: 0x1427, 0xced: 0x074f, 0xcee: 0x07e7, 0xcef: 0x0853, - 0xcf0: 0x0c8b, 0xcf1: 0x0d7f, 0xcf2: 0x0ecb, 0xcf3: 0x0fef, 0xcf4: 0x1177, 0xcf5: 0x128b, - 0xcf6: 0x12a3, 0xcf7: 0x13c7, 0xcf8: 0x14ef, 0xcf9: 0x15a3, 0xcfa: 0x15bf, 0xcfb: 0x102b, - 0xcfc: 0x106b, 0xcfd: 0x1123, 0xcfe: 0x1243, 0xcff: 0x147b, - // Block 0x34, offset 0xd00 - 0xd00: 0x15cb, 0xd01: 0x134b, 0xd02: 0x09c7, 0xd03: 0x0b3b, 0xd04: 0x10db, 0xd05: 0x119b, - 0xd06: 0x0eff, 0xd07: 0x1033, 0xd08: 0x1397, 0xd09: 0x14e7, 0xd0a: 0x09c3, 0xd0b: 0x0a8f, - 0xd0c: 0x0d77, 0xd0d: 0x0e2b, 0xd0e: 0x0e5f, 0xd0f: 0x1113, 0xd10: 0x113b, 0xd11: 0x14a7, - 0xd12: 0x084f, 0xd13: 0x11a7, 0xd14: 0x07f3, 0xd15: 0x07ef, 0xd16: 0x1097, 0xd17: 0x1127, - 0xd18: 0x125b, 0xd19: 0x14af, 0xd1a: 0x1367, 0xd1b: 0x0c27, 0xd1c: 0x0d73, 0xd1d: 0x1357, - 0xd1e: 0x06f7, 0xd1f: 0x0a63, 0xd20: 0x0b93, 0xd21: 0x0f2f, 0xd22: 0x0faf, 0xd23: 0x0873, - 0xd24: 0x103b, 0xd25: 0x075f, 0xd26: 0x0b77, 0xd27: 0x06d7, 0xd28: 0x0deb, 0xd29: 0x0ca3, - 0xd2a: 0x110f, 0xd2b: 0x08c7, 0xd2c: 0x09b3, 0xd2d: 0x0ffb, 0xd2e: 0x1263, 0xd2f: 0x133b, - 0xd30: 0x0db7, 0xd31: 0x13f7, 0xd32: 0x0de3, 0xd33: 0x0c37, 0xd34: 0x121b, 0xd35: 0x0c57, - 0xd36: 0x0fab, 0xd37: 0x072b, 0xd38: 0x07a7, 0xd39: 0x07eb, 0xd3a: 0x0d53, 0xd3b: 0x10fb, - 0xd3c: 0x11f3, 0xd3d: 0x1347, 0xd3e: 0x145b, 0xd3f: 0x085b, - // Block 0x35, offset 0xd40 - 0xd40: 0x090f, 0xd41: 0x0a17, 0xd42: 0x0b2f, 0xd43: 0x0cbf, 0xd44: 0x0e7b, 0xd45: 0x103f, - 0xd46: 0x1497, 0xd47: 0x157b, 0xd48: 0x15cf, 0xd49: 0x15e7, 0xd4a: 0x0837, 0xd4b: 0x0cf3, - 0xd4c: 0x0da3, 0xd4d: 0x13eb, 0xd4e: 0x0afb, 0xd4f: 0x0bd7, 0xd50: 0x0bf3, 0xd51: 0x0c83, - 0xd52: 0x0e6b, 0xd53: 0x0eb7, 0xd54: 0x0f67, 0xd55: 0x108b, 0xd56: 0x112f, 0xd57: 0x1193, - 0xd58: 0x13db, 0xd59: 0x126b, 0xd5a: 0x1403, 0xd5b: 0x147f, 0xd5c: 0x080f, 0xd5d: 0x083b, - 0xd5e: 0x0923, 0xd5f: 0x0ea7, 0xd60: 0x12f3, 0xd61: 0x133b, 0xd62: 0x0b1b, 0xd63: 0x0b8b, - 0xd64: 0x0c4f, 0xd65: 0x0daf, 0xd66: 0x10d7, 0xd67: 0x0f23, 0xd68: 0x073b, 0xd69: 0x097f, - 0xd6a: 0x0a63, 0xd6b: 0x0ac7, 0xd6c: 0x0b97, 0xd6d: 0x0f3f, 0xd6e: 0x0f5b, 0xd6f: 0x116b, - 0xd70: 0x118b, 0xd71: 0x1463, 0xd72: 0x14e3, 0xd73: 0x14f3, 0xd74: 0x152f, 0xd75: 0x0753, - 0xd76: 0x107f, 0xd77: 0x144f, 0xd78: 0x14cb, 0xd79: 0x0baf, 0xd7a: 0x0717, 0xd7b: 0x0777, - 0xd7c: 0x0a67, 0xd7d: 0x0a87, 0xd7e: 0x0caf, 0xd7f: 0x0d73, - // Block 0x36, offset 0xd80 - 0xd80: 0x0ec3, 0xd81: 0x0fcb, 0xd82: 0x1277, 0xd83: 0x1417, 0xd84: 0x1623, 0xd85: 0x0ce3, - 0xd86: 0x14a3, 0xd87: 0x0833, 0xd88: 0x0d2f, 0xd89: 0x0d3b, 0xd8a: 0x0e0f, 0xd8b: 0x0e47, - 0xd8c: 0x0f4b, 0xd8d: 0x0fa7, 0xd8e: 0x1027, 0xd8f: 0x110b, 0xd90: 0x153b, 0xd91: 0x07af, - 0xd92: 0x0c03, 0xd93: 0x14b3, 0xd94: 0x0767, 0xd95: 0x0aab, 0xd96: 0x0e2f, 0xd97: 0x13df, - 0xd98: 0x0b67, 0xd99: 0x0bb7, 0xd9a: 0x0d43, 0xd9b: 0x0f2f, 0xd9c: 0x14bb, 0xd9d: 0x0817, - 0xd9e: 0x08ff, 0xd9f: 0x0a97, 0xda0: 0x0cd3, 0xda1: 0x0d1f, 0xda2: 0x0d5f, 0xda3: 0x0df3, - 0xda4: 0x0f47, 0xda5: 0x0fbb, 0xda6: 0x1157, 0xda7: 0x12f7, 0xda8: 0x1303, 0xda9: 0x1457, - 0xdaa: 0x14d7, 0xdab: 0x0883, 0xdac: 0x0e4b, 0xdad: 0x0903, 0xdae: 0x0ec7, 0xdaf: 0x0f6b, - 0xdb0: 0x1287, 0xdb1: 0x14bf, 0xdb2: 0x15ab, 0xdb3: 0x15d3, 0xdb4: 0x0d37, 0xdb5: 0x0e27, - 0xdb6: 0x11c3, 0xdb7: 0x10b7, 0xdb8: 0x10c3, 0xdb9: 0x10e7, 0xdba: 0x0f17, 0xdbb: 0x0e9f, - 0xdbc: 0x1363, 0xdbd: 0x0733, 0xdbe: 0x122b, 0xdbf: 0x081b, - // Block 0x37, offset 0xdc0 - 0xdc0: 0x080b, 0xdc1: 0x0b0b, 0xdc2: 0x0c2b, 0xdc3: 0x10f3, 0xdc4: 0x0a53, 0xdc5: 0x0e03, - 0xdc6: 0x0cef, 0xdc7: 0x13e7, 0xdc8: 0x12e7, 0xdc9: 0x14ab, 0xdca: 0x1323, 0xdcb: 0x0b27, - 0xdcc: 0x0787, 0xdcd: 0x095b, 0xdd0: 0x09af, - 0xdd2: 0x0cdf, 0xdd5: 0x07f7, 0xdd6: 0x0f1f, 0xdd7: 0x0fe3, - 0xdd8: 0x1047, 0xdd9: 0x1063, 0xdda: 0x1067, 0xddb: 0x107b, 0xddc: 0x14fb, 0xddd: 0x10eb, - 0xdde: 0x116f, 0xde0: 0x128f, 0xde2: 0x1353, - 0xde5: 0x1407, 0xde6: 0x1433, - 0xdea: 0x154f, 0xdeb: 0x1553, 0xdec: 0x1557, 0xded: 0x15bb, 0xdee: 0x142b, 0xdef: 0x14c7, - 0xdf0: 0x0757, 0xdf1: 0x077b, 0xdf2: 0x078f, 0xdf3: 0x084b, 0xdf4: 0x0857, 0xdf5: 0x0897, - 0xdf6: 0x094b, 0xdf7: 0x0967, 0xdf8: 0x096f, 0xdf9: 0x09ab, 0xdfa: 0x09b7, 0xdfb: 0x0a93, - 0xdfc: 0x0a9b, 0xdfd: 0x0ba3, 0xdfe: 0x0bcb, 0xdff: 0x0bd3, - // Block 0x38, offset 0xe00 - 0xe00: 0x0beb, 0xe01: 0x0c97, 0xe02: 0x0cc7, 0xe03: 0x0ce7, 0xe04: 0x0d57, 0xe05: 0x0e1b, - 0xe06: 0x0e37, 0xe07: 0x0e67, 0xe08: 0x0ebb, 0xe09: 0x0edb, 0xe0a: 0x0f4f, 0xe0b: 0x102f, - 0xe0c: 0x104b, 0xe0d: 0x1053, 0xe0e: 0x104f, 0xe0f: 0x1057, 0xe10: 0x105b, 0xe11: 0x105f, - 0xe12: 0x1073, 0xe13: 0x1077, 0xe14: 0x109b, 0xe15: 0x10af, 0xe16: 0x10cb, 0xe17: 0x112f, - 0xe18: 0x1137, 0xe19: 0x113f, 0xe1a: 0x1153, 0xe1b: 0x117b, 0xe1c: 0x11cb, 0xe1d: 0x11ff, - 0xe1e: 0x11ff, 0xe1f: 0x1267, 0xe20: 0x130f, 0xe21: 0x1327, 0xe22: 0x135b, 0xe23: 0x135f, - 0xe24: 0x13a3, 0xe25: 0x13a7, 0xe26: 0x13ff, 0xe27: 0x1407, 0xe28: 0x14db, 0xe29: 0x151f, - 0xe2a: 0x1537, 0xe2b: 0x0b9b, 0xe2c: 0x171e, 0xe2d: 0x11e3, - 0xe30: 0x06df, 0xe31: 0x07e3, 0xe32: 0x07a3, 0xe33: 0x074b, 0xe34: 0x078b, 0xe35: 0x07b7, - 0xe36: 0x0847, 0xe37: 0x0863, 0xe38: 0x094b, 0xe39: 0x0937, 0xe3a: 0x0947, 0xe3b: 0x0963, - 0xe3c: 0x09af, 0xe3d: 0x09bf, 0xe3e: 0x0a03, 0xe3f: 0x0a0f, - // Block 0x39, offset 0xe40 - 0xe40: 0x0a2b, 0xe41: 0x0a3b, 0xe42: 0x0b23, 0xe43: 0x0b2b, 0xe44: 0x0b5b, 0xe45: 0x0b7b, - 0xe46: 0x0bab, 0xe47: 0x0bc3, 0xe48: 0x0bb3, 0xe49: 0x0bd3, 0xe4a: 0x0bc7, 0xe4b: 0x0beb, - 0xe4c: 0x0c07, 0xe4d: 0x0c5f, 0xe4e: 0x0c6b, 0xe4f: 0x0c73, 0xe50: 0x0c9b, 0xe51: 0x0cdf, - 0xe52: 0x0d0f, 0xe53: 0x0d13, 0xe54: 0x0d27, 0xe55: 0x0da7, 0xe56: 0x0db7, 0xe57: 0x0e0f, - 0xe58: 0x0e5b, 0xe59: 0x0e53, 0xe5a: 0x0e67, 0xe5b: 0x0e83, 0xe5c: 0x0ebb, 0xe5d: 0x1013, - 0xe5e: 0x0edf, 0xe5f: 0x0f13, 0xe60: 0x0f1f, 0xe61: 0x0f5f, 0xe62: 0x0f7b, 0xe63: 0x0f9f, - 0xe64: 0x0fc3, 0xe65: 0x0fc7, 0xe66: 0x0fe3, 0xe67: 0x0fe7, 0xe68: 0x0ff7, 0xe69: 0x100b, - 0xe6a: 0x1007, 0xe6b: 0x1037, 0xe6c: 0x10b3, 0xe6d: 0x10cb, 0xe6e: 0x10e3, 0xe6f: 0x111b, - 0xe70: 0x112f, 0xe71: 0x114b, 0xe72: 0x117b, 0xe73: 0x122f, 0xe74: 0x1257, 0xe75: 0x12cb, - 0xe76: 0x1313, 0xe77: 0x131f, 0xe78: 0x1327, 0xe79: 0x133f, 0xe7a: 0x1353, 0xe7b: 0x1343, - 0xe7c: 0x135b, 0xe7d: 0x1357, 0xe7e: 0x134f, 0xe7f: 0x135f, - // Block 0x3a, offset 0xe80 - 0xe80: 0x136b, 0xe81: 0x13a7, 0xe82: 0x13e3, 0xe83: 0x1413, 0xe84: 0x144b, 0xe85: 0x146b, - 0xe86: 0x14b7, 0xe87: 0x14db, 0xe88: 0x14fb, 0xe89: 0x150f, 0xe8a: 0x151f, 0xe8b: 0x152b, - 0xe8c: 0x1537, 0xe8d: 0x158b, 0xe8e: 0x162b, 0xe8f: 0x16b5, 0xe90: 0x16b0, 0xe91: 0x16e2, - 0xe92: 0x0607, 0xe93: 0x062f, 0xe94: 0x0633, 0xe95: 0x1764, 0xe96: 0x1791, 0xe97: 0x1809, - 0xe98: 0x1617, 0xe99: 0x1627, - // Block 0x3b, offset 0xec0 - 0xec0: 0x19d8, 0xec1: 0x19db, 0xec2: 0x19de, 0xec3: 0x1c0b, 0xec4: 0x1c0f, 0xec5: 0x1a62, - 0xec6: 0x1a62, - 0xed3: 0x1d78, 0xed4: 0x1d69, 0xed5: 0x1d6e, 0xed6: 0x1d7d, 0xed7: 0x1d73, - 0xedd: 0x4393, - 0xede: 0x8115, 0xedf: 0x4405, 0xee0: 0x022d, 0xee1: 0x0215, 0xee2: 0x021e, 0xee3: 0x0221, - 0xee4: 0x0224, 0xee5: 0x0227, 0xee6: 0x022a, 0xee7: 0x0230, 0xee8: 0x0233, 0xee9: 0x0017, - 0xeea: 0x43f3, 0xeeb: 0x43f9, 0xeec: 0x44f7, 0xeed: 0x44ff, 0xeee: 0x434b, 0xeef: 0x4351, - 0xef0: 0x4357, 0xef1: 0x435d, 0xef2: 0x4369, 0xef3: 0x436f, 0xef4: 0x4375, 0xef5: 0x4381, - 0xef6: 0x4387, 0xef8: 0x438d, 0xef9: 0x4399, 0xefa: 0x439f, 0xefb: 0x43a5, - 0xefc: 0x43b1, 0xefe: 0x43b7, - // Block 0x3c, offset 0xf00 - 0xf00: 0x43bd, 0xf01: 0x43c3, 0xf03: 0x43c9, 0xf04: 0x43cf, - 0xf06: 0x43db, 0xf07: 0x43e1, 0xf08: 0x43e7, 0xf09: 0x43ed, 0xf0a: 0x43ff, 0xf0b: 0x437b, - 0xf0c: 0x4363, 0xf0d: 0x43ab, 0xf0e: 0x43d5, 0xf0f: 0x1d82, 0xf10: 0x0299, 0xf11: 0x0299, - 0xf12: 0x02a2, 0xf13: 0x02a2, 0xf14: 0x02a2, 0xf15: 0x02a2, 0xf16: 0x02a5, 0xf17: 0x02a5, - 0xf18: 0x02a5, 0xf19: 0x02a5, 0xf1a: 0x02ab, 0xf1b: 0x02ab, 0xf1c: 0x02ab, 0xf1d: 0x02ab, - 0xf1e: 0x029f, 0xf1f: 0x029f, 0xf20: 0x029f, 0xf21: 0x029f, 0xf22: 0x02a8, 0xf23: 0x02a8, - 0xf24: 0x02a8, 0xf25: 0x02a8, 0xf26: 0x029c, 0xf27: 0x029c, 0xf28: 0x029c, 0xf29: 0x029c, - 0xf2a: 0x02cf, 0xf2b: 0x02cf, 0xf2c: 0x02cf, 0xf2d: 0x02cf, 0xf2e: 0x02d2, 0xf2f: 0x02d2, - 0xf30: 0x02d2, 0xf31: 0x02d2, 0xf32: 0x02b1, 0xf33: 0x02b1, 0xf34: 0x02b1, 0xf35: 0x02b1, - 0xf36: 0x02ae, 0xf37: 0x02ae, 0xf38: 0x02ae, 0xf39: 0x02ae, 0xf3a: 0x02b4, 0xf3b: 0x02b4, - 0xf3c: 0x02b4, 0xf3d: 0x02b4, 0xf3e: 0x02b7, 0xf3f: 0x02b7, - // Block 0x3d, offset 0xf40 - 0xf40: 0x02b7, 0xf41: 0x02b7, 0xf42: 0x02c0, 0xf43: 0x02c0, 0xf44: 0x02bd, 0xf45: 0x02bd, - 0xf46: 0x02c3, 0xf47: 0x02c3, 0xf48: 0x02ba, 0xf49: 0x02ba, 0xf4a: 0x02c9, 0xf4b: 0x02c9, - 0xf4c: 0x02c6, 0xf4d: 0x02c6, 0xf4e: 0x02d5, 0xf4f: 0x02d5, 0xf50: 0x02d5, 0xf51: 0x02d5, - 0xf52: 0x02db, 0xf53: 0x02db, 0xf54: 0x02db, 0xf55: 0x02db, 0xf56: 0x02e1, 0xf57: 0x02e1, - 0xf58: 0x02e1, 0xf59: 0x02e1, 0xf5a: 0x02de, 0xf5b: 0x02de, 0xf5c: 0x02de, 0xf5d: 0x02de, - 0xf5e: 0x02e4, 0xf5f: 0x02e4, 0xf60: 0x02e7, 0xf61: 0x02e7, 0xf62: 0x02e7, 0xf63: 0x02e7, - 0xf64: 0x4471, 0xf65: 0x4471, 0xf66: 0x02ed, 0xf67: 0x02ed, 0xf68: 0x02ed, 0xf69: 0x02ed, - 0xf6a: 0x02ea, 0xf6b: 0x02ea, 0xf6c: 0x02ea, 0xf6d: 0x02ea, 0xf6e: 0x0308, 0xf6f: 0x0308, - 0xf70: 0x446b, 0xf71: 0x446b, - // Block 0x3e, offset 0xf80 - 0xf93: 0x02d8, 0xf94: 0x02d8, 0xf95: 0x02d8, 0xf96: 0x02d8, 0xf97: 0x02f6, - 0xf98: 0x02f6, 0xf99: 0x02f3, 0xf9a: 0x02f3, 0xf9b: 0x02f9, 0xf9c: 0x02f9, 0xf9d: 0x2052, - 0xf9e: 0x02ff, 0xf9f: 0x02ff, 0xfa0: 0x02f0, 0xfa1: 0x02f0, 0xfa2: 0x02fc, 0xfa3: 0x02fc, - 0xfa4: 0x0305, 0xfa5: 0x0305, 0xfa6: 0x0305, 0xfa7: 0x0305, 0xfa8: 0x028d, 0xfa9: 0x028d, - 0xfaa: 0x25ad, 0xfab: 0x25ad, 0xfac: 0x261d, 0xfad: 0x261d, 0xfae: 0x25ec, 0xfaf: 0x25ec, - 0xfb0: 0x2608, 0xfb1: 0x2608, 0xfb2: 0x2601, 0xfb3: 0x2601, 0xfb4: 0x260f, 0xfb5: 0x260f, - 0xfb6: 0x2616, 0xfb7: 0x2616, 0xfb8: 0x2616, 0xfb9: 0x25f3, 0xfba: 0x25f3, 0xfbb: 0x25f3, - 0xfbc: 0x0302, 0xfbd: 0x0302, 0xfbe: 0x0302, 0xfbf: 0x0302, - // Block 0x3f, offset 0xfc0 - 0xfc0: 0x25b4, 0xfc1: 0x25bb, 0xfc2: 0x25d7, 0xfc3: 0x25f3, 0xfc4: 0x25fa, 0xfc5: 0x1d8c, - 0xfc6: 0x1d91, 0xfc7: 0x1d96, 0xfc8: 0x1da5, 0xfc9: 0x1db4, 0xfca: 0x1db9, 0xfcb: 0x1dbe, - 0xfcc: 0x1dc3, 0xfcd: 0x1dc8, 0xfce: 0x1dd7, 0xfcf: 0x1de6, 0xfd0: 0x1deb, 0xfd1: 0x1df0, - 0xfd2: 0x1dff, 0xfd3: 0x1e0e, 0xfd4: 0x1e13, 0xfd5: 0x1e18, 0xfd6: 0x1e1d, 0xfd7: 0x1e2c, - 0xfd8: 0x1e31, 0xfd9: 0x1e40, 0xfda: 0x1e45, 0xfdb: 0x1e4a, 0xfdc: 0x1e59, 0xfdd: 0x1e5e, - 0xfde: 0x1e63, 0xfdf: 0x1e6d, 0xfe0: 0x1ea9, 0xfe1: 0x1eb8, 0xfe2: 0x1ec7, 0xfe3: 0x1ecc, - 0xfe4: 0x1ed1, 0xfe5: 0x1edb, 0xfe6: 0x1eea, 0xfe7: 0x1eef, 0xfe8: 0x1efe, 0xfe9: 0x1f03, - 0xfea: 0x1f08, 0xfeb: 0x1f17, 0xfec: 0x1f1c, 0xfed: 0x1f2b, 0xfee: 0x1f30, 0xfef: 0x1f35, - 0xff0: 0x1f3a, 0xff1: 0x1f3f, 0xff2: 0x1f44, 0xff3: 0x1f49, 0xff4: 0x1f4e, 0xff5: 0x1f53, - 0xff6: 0x1f58, 0xff7: 0x1f5d, 0xff8: 0x1f62, 0xff9: 0x1f67, 0xffa: 0x1f6c, 0xffb: 0x1f71, - 0xffc: 0x1f76, 0xffd: 0x1f7b, 0xffe: 0x1f80, 0xfff: 0x1f8a, - // Block 0x40, offset 0x1000 - 0x1000: 0x1f8f, 0x1001: 0x1f94, 0x1002: 0x1f99, 0x1003: 0x1fa3, 0x1004: 0x1fa8, 0x1005: 0x1fb2, - 0x1006: 0x1fb7, 0x1007: 0x1fbc, 0x1008: 0x1fc1, 0x1009: 0x1fc6, 0x100a: 0x1fcb, 0x100b: 0x1fd0, - 0x100c: 0x1fd5, 0x100d: 0x1fda, 0x100e: 0x1fe9, 0x100f: 0x1ff8, 0x1010: 0x1ffd, 0x1011: 0x2002, - 0x1012: 0x2007, 0x1013: 0x200c, 0x1014: 0x2011, 0x1015: 0x201b, 0x1016: 0x2020, 0x1017: 0x2025, - 0x1018: 0x2034, 0x1019: 0x2043, 0x101a: 0x2048, 0x101b: 0x4423, 0x101c: 0x4429, 0x101d: 0x445f, - 0x101e: 0x44b6, 0x101f: 0x44bd, 0x1020: 0x44c4, 0x1021: 0x44cb, 0x1022: 0x44d2, 0x1023: 0x44d9, - 0x1024: 0x25c9, 0x1025: 0x25d0, 0x1026: 0x25d7, 0x1027: 0x25de, 0x1028: 0x25f3, 0x1029: 0x25fa, - 0x102a: 0x1d9b, 0x102b: 0x1da0, 0x102c: 0x1da5, 0x102d: 0x1daa, 0x102e: 0x1db4, 0x102f: 0x1db9, - 0x1030: 0x1dcd, 0x1031: 0x1dd2, 0x1032: 0x1dd7, 0x1033: 0x1ddc, 0x1034: 0x1de6, 0x1035: 0x1deb, - 0x1036: 0x1df5, 0x1037: 0x1dfa, 0x1038: 0x1dff, 0x1039: 0x1e04, 0x103a: 0x1e0e, 0x103b: 0x1e13, - 0x103c: 0x1f3f, 0x103d: 0x1f44, 0x103e: 0x1f53, 0x103f: 0x1f58, - // Block 0x41, offset 0x1040 - 0x1040: 0x1f5d, 0x1041: 0x1f71, 0x1042: 0x1f76, 0x1043: 0x1f7b, 0x1044: 0x1f80, 0x1045: 0x1f99, - 0x1046: 0x1fa3, 0x1047: 0x1fa8, 0x1048: 0x1fad, 0x1049: 0x1fc1, 0x104a: 0x1fdf, 0x104b: 0x1fe4, - 0x104c: 0x1fe9, 0x104d: 0x1fee, 0x104e: 0x1ff8, 0x104f: 0x1ffd, 0x1050: 0x445f, 0x1051: 0x202a, - 0x1052: 0x202f, 0x1053: 0x2034, 0x1054: 0x2039, 0x1055: 0x2043, 0x1056: 0x2048, 0x1057: 0x25b4, - 0x1058: 0x25bb, 0x1059: 0x25c2, 0x105a: 0x25d7, 0x105b: 0x25e5, 0x105c: 0x1d8c, 0x105d: 0x1d91, - 0x105e: 0x1d96, 0x105f: 0x1da5, 0x1060: 0x1daf, 0x1061: 0x1dbe, 0x1062: 0x1dc3, 0x1063: 0x1dc8, - 0x1064: 0x1dd7, 0x1065: 0x1de1, 0x1066: 0x1dff, 0x1067: 0x1e18, 0x1068: 0x1e1d, 0x1069: 0x1e2c, - 0x106a: 0x1e31, 0x106b: 0x1e40, 0x106c: 0x1e4a, 0x106d: 0x1e59, 0x106e: 0x1e5e, 0x106f: 0x1e63, - 0x1070: 0x1e6d, 0x1071: 0x1ea9, 0x1072: 0x1eae, 0x1073: 0x1eb8, 0x1074: 0x1ec7, 0x1075: 0x1ecc, - 0x1076: 0x1ed1, 0x1077: 0x1edb, 0x1078: 0x1eea, 0x1079: 0x1efe, 0x107a: 0x1f03, 0x107b: 0x1f08, - 0x107c: 0x1f17, 0x107d: 0x1f1c, 0x107e: 0x1f2b, 0x107f: 0x1f30, - // Block 0x42, offset 0x1080 - 0x1080: 0x1f35, 0x1081: 0x1f3a, 0x1082: 0x1f49, 0x1083: 0x1f4e, 0x1084: 0x1f62, 0x1085: 0x1f67, - 0x1086: 0x1f6c, 0x1087: 0x1f71, 0x1088: 0x1f76, 0x1089: 0x1f8a, 0x108a: 0x1f8f, 0x108b: 0x1f94, - 0x108c: 0x1f99, 0x108d: 0x1f9e, 0x108e: 0x1fb2, 0x108f: 0x1fb7, 0x1090: 0x1fbc, 0x1091: 0x1fc1, - 0x1092: 0x1fd0, 0x1093: 0x1fd5, 0x1094: 0x1fda, 0x1095: 0x1fe9, 0x1096: 0x1ff3, 0x1097: 0x2002, - 0x1098: 0x2007, 0x1099: 0x4453, 0x109a: 0x201b, 0x109b: 0x2020, 0x109c: 0x2025, 0x109d: 0x2034, - 0x109e: 0x203e, 0x109f: 0x25d7, 0x10a0: 0x25e5, 0x10a1: 0x1da5, 0x10a2: 0x1daf, 0x10a3: 0x1dd7, - 0x10a4: 0x1de1, 0x10a5: 0x1dff, 0x10a6: 0x1e09, 0x10a7: 0x1e6d, 0x10a8: 0x1e72, 0x10a9: 0x1e95, - 0x10aa: 0x1e9a, 0x10ab: 0x1f71, 0x10ac: 0x1f76, 0x10ad: 0x1f99, 0x10ae: 0x1fe9, 0x10af: 0x1ff3, - 0x10b0: 0x2034, 0x10b1: 0x203e, 0x10b2: 0x4507, 0x10b3: 0x450f, 0x10b4: 0x4517, 0x10b5: 0x1ef4, - 0x10b6: 0x1ef9, 0x10b7: 0x1f0d, 0x10b8: 0x1f12, 0x10b9: 0x1f21, 0x10ba: 0x1f26, 0x10bb: 0x1e77, - 0x10bc: 0x1e7c, 0x10bd: 0x1e9f, 0x10be: 0x1ea4, 0x10bf: 0x1e36, - // Block 0x43, offset 0x10c0 - 0x10c0: 0x1e3b, 0x10c1: 0x1e22, 0x10c2: 0x1e27, 0x10c3: 0x1e4f, 0x10c4: 0x1e54, 0x10c5: 0x1ebd, - 0x10c6: 0x1ec2, 0x10c7: 0x1ee0, 0x10c8: 0x1ee5, 0x10c9: 0x1e81, 0x10ca: 0x1e86, 0x10cb: 0x1e8b, - 0x10cc: 0x1e95, 0x10cd: 0x1e90, 0x10ce: 0x1e68, 0x10cf: 0x1eb3, 0x10d0: 0x1ed6, 0x10d1: 0x1ef4, - 0x10d2: 0x1ef9, 0x10d3: 0x1f0d, 0x10d4: 0x1f12, 0x10d5: 0x1f21, 0x10d6: 0x1f26, 0x10d7: 0x1e77, - 0x10d8: 0x1e7c, 0x10d9: 0x1e9f, 0x10da: 0x1ea4, 0x10db: 0x1e36, 0x10dc: 0x1e3b, 0x10dd: 0x1e22, - 0x10de: 0x1e27, 0x10df: 0x1e4f, 0x10e0: 0x1e54, 0x10e1: 0x1ebd, 0x10e2: 0x1ec2, 0x10e3: 0x1ee0, - 0x10e4: 0x1ee5, 0x10e5: 0x1e81, 0x10e6: 0x1e86, 0x10e7: 0x1e8b, 0x10e8: 0x1e95, 0x10e9: 0x1e90, - 0x10ea: 0x1e68, 0x10eb: 0x1eb3, 0x10ec: 0x1ed6, 0x10ed: 0x1e81, 0x10ee: 0x1e86, 0x10ef: 0x1e8b, - 0x10f0: 0x1e95, 0x10f1: 0x1e72, 0x10f2: 0x1e9a, 0x10f3: 0x1eef, 0x10f4: 0x1e59, 0x10f5: 0x1e5e, - 0x10f6: 0x1e63, 0x10f7: 0x1e81, 0x10f8: 0x1e86, 0x10f9: 0x1e8b, 0x10fa: 0x1eef, 0x10fb: 0x1efe, - 0x10fc: 0x440b, 0x10fd: 0x440b, - // Block 0x44, offset 0x1100 - 0x1110: 0x2314, 0x1111: 0x2329, - 0x1112: 0x2329, 0x1113: 0x2330, 0x1114: 0x2337, 0x1115: 0x234c, 0x1116: 0x2353, 0x1117: 0x235a, - 0x1118: 0x237d, 0x1119: 0x237d, 0x111a: 0x23a0, 0x111b: 0x2399, 0x111c: 0x23b5, 0x111d: 0x23a7, - 0x111e: 0x23ae, 0x111f: 0x23d1, 0x1120: 0x23d1, 0x1121: 0x23ca, 0x1122: 0x23d8, 0x1123: 0x23d8, - 0x1124: 0x2402, 0x1125: 0x2402, 0x1126: 0x241e, 0x1127: 0x23e6, 0x1128: 0x23e6, 0x1129: 0x23df, - 0x112a: 0x23f4, 0x112b: 0x23f4, 0x112c: 0x23fb, 0x112d: 0x23fb, 0x112e: 0x2425, 0x112f: 0x2433, - 0x1130: 0x2433, 0x1131: 0x243a, 0x1132: 0x243a, 0x1133: 0x2441, 0x1134: 0x2448, 0x1135: 0x244f, - 0x1136: 0x2456, 0x1137: 0x2456, 0x1138: 0x245d, 0x1139: 0x246b, 0x113a: 0x2479, 0x113b: 0x2472, - 0x113c: 0x2480, 0x113d: 0x2480, 0x113e: 0x2495, 0x113f: 0x249c, - // Block 0x45, offset 0x1140 - 0x1140: 0x24cd, 0x1141: 0x24db, 0x1142: 0x24d4, 0x1143: 0x24b8, 0x1144: 0x24b8, 0x1145: 0x24e2, - 0x1146: 0x24e2, 0x1147: 0x24e9, 0x1148: 0x24e9, 0x1149: 0x2513, 0x114a: 0x251a, 0x114b: 0x2521, - 0x114c: 0x24f7, 0x114d: 0x2505, 0x114e: 0x2528, 0x114f: 0x252f, - 0x1152: 0x24fe, 0x1153: 0x2583, 0x1154: 0x258a, 0x1155: 0x2560, 0x1156: 0x2567, 0x1157: 0x254b, - 0x1158: 0x254b, 0x1159: 0x2552, 0x115a: 0x257c, 0x115b: 0x2575, 0x115c: 0x259f, 0x115d: 0x259f, - 0x115e: 0x230d, 0x115f: 0x2322, 0x1160: 0x231b, 0x1161: 0x2345, 0x1162: 0x233e, 0x1163: 0x2368, - 0x1164: 0x2361, 0x1165: 0x238b, 0x1166: 0x236f, 0x1167: 0x2384, 0x1168: 0x23bc, 0x1169: 0x2409, - 0x116a: 0x23ed, 0x116b: 0x242c, 0x116c: 0x24c6, 0x116d: 0x24f0, 0x116e: 0x2598, 0x116f: 0x2591, - 0x1170: 0x25a6, 0x1171: 0x253d, 0x1172: 0x24a3, 0x1173: 0x256e, 0x1174: 0x2495, 0x1175: 0x24cd, - 0x1176: 0x2464, 0x1177: 0x24b1, 0x1178: 0x2544, 0x1179: 0x2536, 0x117a: 0x24bf, 0x117b: 0x24aa, - 0x117c: 0x24bf, 0x117d: 0x2544, 0x117e: 0x2376, 0x117f: 0x2392, - // Block 0x46, offset 0x1180 - 0x1180: 0x250c, 0x1181: 0x2487, 0x1182: 0x2306, 0x1183: 0x24aa, 0x1184: 0x244f, 0x1185: 0x241e, - 0x1186: 0x23c3, 0x1187: 0x2559, - 0x11b0: 0x2417, 0x11b1: 0x248e, 0x11b2: 0x27c2, 0x11b3: 0x27b9, 0x11b4: 0x27ef, 0x11b5: 0x27dd, - 0x11b6: 0x27cb, 0x11b7: 0x27e6, 0x11b8: 0x27f8, 0x11b9: 0x2410, 0x11ba: 0x2c7f, 0x11bb: 0x2aff, - 0x11bc: 0x27d4, - // Block 0x47, offset 0x11c0 - 0x11d0: 0x0019, 0x11d1: 0x0483, - 0x11d2: 0x0487, 0x11d3: 0x0035, 0x11d4: 0x0037, 0x11d5: 0x0003, 0x11d6: 0x003f, 0x11d7: 0x04bf, - 0x11d8: 0x04c3, 0x11d9: 0x1b5f, - 0x11e0: 0x8132, 0x11e1: 0x8132, 0x11e2: 0x8132, 0x11e3: 0x8132, - 0x11e4: 0x8132, 0x11e5: 0x8132, 0x11e6: 0x8132, 0x11e7: 0x812d, 0x11e8: 0x812d, 0x11e9: 0x812d, - 0x11ea: 0x812d, 0x11eb: 0x812d, 0x11ec: 0x812d, 0x11ed: 0x812d, 0x11ee: 0x8132, 0x11ef: 0x8132, - 0x11f0: 0x1873, 0x11f1: 0x0443, 0x11f2: 0x043f, 0x11f3: 0x007f, 0x11f4: 0x007f, 0x11f5: 0x0011, - 0x11f6: 0x0013, 0x11f7: 0x00b7, 0x11f8: 0x00bb, 0x11f9: 0x04b7, 0x11fa: 0x04bb, 0x11fb: 0x04ab, - 0x11fc: 0x04af, 0x11fd: 0x0493, 0x11fe: 0x0497, 0x11ff: 0x048b, - // Block 0x48, offset 0x1200 - 0x1200: 0x048f, 0x1201: 0x049b, 0x1202: 0x049f, 0x1203: 0x04a3, 0x1204: 0x04a7, - 0x1207: 0x0077, 0x1208: 0x007b, 0x1209: 0x426c, 0x120a: 0x426c, 0x120b: 0x426c, - 0x120c: 0x426c, 0x120d: 0x007f, 0x120e: 0x007f, 0x120f: 0x007f, 0x1210: 0x0019, 0x1211: 0x0483, - 0x1212: 0x001d, 0x1214: 0x0037, 0x1215: 0x0035, 0x1216: 0x003f, 0x1217: 0x0003, - 0x1218: 0x0443, 0x1219: 0x0011, 0x121a: 0x0013, 0x121b: 0x00b7, 0x121c: 0x00bb, 0x121d: 0x04b7, - 0x121e: 0x04bb, 0x121f: 0x0007, 0x1220: 0x000d, 0x1221: 0x0015, 0x1222: 0x0017, 0x1223: 0x001b, - 0x1224: 0x0039, 0x1225: 0x003d, 0x1226: 0x003b, 0x1228: 0x0079, 0x1229: 0x0009, - 0x122a: 0x000b, 0x122b: 0x0041, - 0x1230: 0x42ad, 0x1231: 0x442f, 0x1232: 0x42b2, 0x1234: 0x42b7, - 0x1236: 0x42bc, 0x1237: 0x4435, 0x1238: 0x42c1, 0x1239: 0x443b, 0x123a: 0x42c6, 0x123b: 0x4441, - 0x123c: 0x42cb, 0x123d: 0x4447, 0x123e: 0x42d0, 0x123f: 0x444d, - // Block 0x49, offset 0x1240 - 0x1240: 0x0236, 0x1241: 0x4411, 0x1242: 0x4411, 0x1243: 0x4417, 0x1244: 0x4417, 0x1245: 0x4459, - 0x1246: 0x4459, 0x1247: 0x441d, 0x1248: 0x441d, 0x1249: 0x4465, 0x124a: 0x4465, 0x124b: 0x4465, - 0x124c: 0x4465, 0x124d: 0x0239, 0x124e: 0x0239, 0x124f: 0x023c, 0x1250: 0x023c, 0x1251: 0x023c, - 0x1252: 0x023c, 0x1253: 0x023f, 0x1254: 0x023f, 0x1255: 0x0242, 0x1256: 0x0242, 0x1257: 0x0242, - 0x1258: 0x0242, 0x1259: 0x0245, 0x125a: 0x0245, 0x125b: 0x0245, 0x125c: 0x0245, 0x125d: 0x0248, - 0x125e: 0x0248, 0x125f: 0x0248, 0x1260: 0x0248, 0x1261: 0x024b, 0x1262: 0x024b, 0x1263: 0x024b, - 0x1264: 0x024b, 0x1265: 0x024e, 0x1266: 0x024e, 0x1267: 0x024e, 0x1268: 0x024e, 0x1269: 0x0251, - 0x126a: 0x0251, 0x126b: 0x0254, 0x126c: 0x0254, 0x126d: 0x0257, 0x126e: 0x0257, 0x126f: 0x025a, - 0x1270: 0x025a, 0x1271: 0x025d, 0x1272: 0x025d, 0x1273: 0x025d, 0x1274: 0x025d, 0x1275: 0x0260, - 0x1276: 0x0260, 0x1277: 0x0260, 0x1278: 0x0260, 0x1279: 0x0263, 0x127a: 0x0263, 0x127b: 0x0263, - 0x127c: 0x0263, 0x127d: 0x0266, 0x127e: 0x0266, 0x127f: 0x0266, - // Block 0x4a, offset 0x1280 - 0x1280: 0x0266, 0x1281: 0x0269, 0x1282: 0x0269, 0x1283: 0x0269, 0x1284: 0x0269, 0x1285: 0x026c, - 0x1286: 0x026c, 0x1287: 0x026c, 0x1288: 0x026c, 0x1289: 0x026f, 0x128a: 0x026f, 0x128b: 0x026f, - 0x128c: 0x026f, 0x128d: 0x0272, 0x128e: 0x0272, 0x128f: 0x0272, 0x1290: 0x0272, 0x1291: 0x0275, - 0x1292: 0x0275, 0x1293: 0x0275, 0x1294: 0x0275, 0x1295: 0x0278, 0x1296: 0x0278, 0x1297: 0x0278, - 0x1298: 0x0278, 0x1299: 0x027b, 0x129a: 0x027b, 0x129b: 0x027b, 0x129c: 0x027b, 0x129d: 0x027e, - 0x129e: 0x027e, 0x129f: 0x027e, 0x12a0: 0x027e, 0x12a1: 0x0281, 0x12a2: 0x0281, 0x12a3: 0x0281, - 0x12a4: 0x0281, 0x12a5: 0x0284, 0x12a6: 0x0284, 0x12a7: 0x0284, 0x12a8: 0x0284, 0x12a9: 0x0287, - 0x12aa: 0x0287, 0x12ab: 0x0287, 0x12ac: 0x0287, 0x12ad: 0x028a, 0x12ae: 0x028a, 0x12af: 0x028d, - 0x12b0: 0x028d, 0x12b1: 0x0290, 0x12b2: 0x0290, 0x12b3: 0x0290, 0x12b4: 0x0290, 0x12b5: 0x2e03, - 0x12b6: 0x2e03, 0x12b7: 0x2e0b, 0x12b8: 0x2e0b, 0x12b9: 0x2e13, 0x12ba: 0x2e13, 0x12bb: 0x1f85, - 0x12bc: 0x1f85, - // Block 0x4b, offset 0x12c0 - 0x12c0: 0x0081, 0x12c1: 0x0083, 0x12c2: 0x0085, 0x12c3: 0x0087, 0x12c4: 0x0089, 0x12c5: 0x008b, - 0x12c6: 0x008d, 0x12c7: 0x008f, 0x12c8: 0x0091, 0x12c9: 0x0093, 0x12ca: 0x0095, 0x12cb: 0x0097, - 0x12cc: 0x0099, 0x12cd: 0x009b, 0x12ce: 0x009d, 0x12cf: 0x009f, 0x12d0: 0x00a1, 0x12d1: 0x00a3, - 0x12d2: 0x00a5, 0x12d3: 0x00a7, 0x12d4: 0x00a9, 0x12d5: 0x00ab, 0x12d6: 0x00ad, 0x12d7: 0x00af, - 0x12d8: 0x00b1, 0x12d9: 0x00b3, 0x12da: 0x00b5, 0x12db: 0x00b7, 0x12dc: 0x00b9, 0x12dd: 0x00bb, - 0x12de: 0x00bd, 0x12df: 0x0477, 0x12e0: 0x047b, 0x12e1: 0x0487, 0x12e2: 0x049b, 0x12e3: 0x049f, - 0x12e4: 0x0483, 0x12e5: 0x05ab, 0x12e6: 0x05a3, 0x12e7: 0x04c7, 0x12e8: 0x04cf, 0x12e9: 0x04d7, - 0x12ea: 0x04df, 0x12eb: 0x04e7, 0x12ec: 0x056b, 0x12ed: 0x0573, 0x12ee: 0x057b, 0x12ef: 0x051f, - 0x12f0: 0x05af, 0x12f1: 0x04cb, 0x12f2: 0x04d3, 0x12f3: 0x04db, 0x12f4: 0x04e3, 0x12f5: 0x04eb, - 0x12f6: 0x04ef, 0x12f7: 0x04f3, 0x12f8: 0x04f7, 0x12f9: 0x04fb, 0x12fa: 0x04ff, 0x12fb: 0x0503, - 0x12fc: 0x0507, 0x12fd: 0x050b, 0x12fe: 0x050f, 0x12ff: 0x0513, - // Block 0x4c, offset 0x1300 - 0x1300: 0x0517, 0x1301: 0x051b, 0x1302: 0x0523, 0x1303: 0x0527, 0x1304: 0x052b, 0x1305: 0x052f, - 0x1306: 0x0533, 0x1307: 0x0537, 0x1308: 0x053b, 0x1309: 0x053f, 0x130a: 0x0543, 0x130b: 0x0547, - 0x130c: 0x054b, 0x130d: 0x054f, 0x130e: 0x0553, 0x130f: 0x0557, 0x1310: 0x055b, 0x1311: 0x055f, - 0x1312: 0x0563, 0x1313: 0x0567, 0x1314: 0x056f, 0x1315: 0x0577, 0x1316: 0x057f, 0x1317: 0x0583, - 0x1318: 0x0587, 0x1319: 0x058b, 0x131a: 0x058f, 0x131b: 0x0593, 0x131c: 0x0597, 0x131d: 0x05a7, - 0x131e: 0x4a7b, 0x131f: 0x4a81, 0x1320: 0x03c3, 0x1321: 0x0313, 0x1322: 0x0317, 0x1323: 0x4a3e, - 0x1324: 0x031b, 0x1325: 0x4a44, 0x1326: 0x4a4a, 0x1327: 0x031f, 0x1328: 0x0323, 0x1329: 0x0327, - 0x132a: 0x4a50, 0x132b: 0x4a56, 0x132c: 0x4a5c, 0x132d: 0x4a62, 0x132e: 0x4a68, 0x132f: 0x4a6e, - 0x1330: 0x0367, 0x1331: 0x032b, 0x1332: 0x032f, 0x1333: 0x0333, 0x1334: 0x037b, 0x1335: 0x0337, - 0x1336: 0x033b, 0x1337: 0x033f, 0x1338: 0x0343, 0x1339: 0x0347, 0x133a: 0x034b, 0x133b: 0x034f, - 0x133c: 0x0353, 0x133d: 0x0357, 0x133e: 0x035b, - // Block 0x4d, offset 0x1340 - 0x1342: 0x49c0, 0x1343: 0x49c6, 0x1344: 0x49cc, 0x1345: 0x49d2, - 0x1346: 0x49d8, 0x1347: 0x49de, 0x134a: 0x49e4, 0x134b: 0x49ea, - 0x134c: 0x49f0, 0x134d: 0x49f6, 0x134e: 0x49fc, 0x134f: 0x4a02, - 0x1352: 0x4a08, 0x1353: 0x4a0e, 0x1354: 0x4a14, 0x1355: 0x4a1a, 0x1356: 0x4a20, 0x1357: 0x4a26, - 0x135a: 0x4a2c, 0x135b: 0x4a32, 0x135c: 0x4a38, - 0x1360: 0x00bf, 0x1361: 0x00c2, 0x1362: 0x00cb, 0x1363: 0x4267, - 0x1364: 0x00c8, 0x1365: 0x00c5, 0x1366: 0x0447, 0x1368: 0x046b, 0x1369: 0x044b, - 0x136a: 0x044f, 0x136b: 0x0453, 0x136c: 0x0457, 0x136d: 0x046f, 0x136e: 0x0473, - // Block 0x4e, offset 0x1380 - 0x1380: 0x0063, 0x1381: 0x0065, 0x1382: 0x0067, 0x1383: 0x0069, 0x1384: 0x006b, 0x1385: 0x006d, - 0x1386: 0x006f, 0x1387: 0x0071, 0x1388: 0x0073, 0x1389: 0x0075, 0x138a: 0x0083, 0x138b: 0x0085, - 0x138c: 0x0087, 0x138d: 0x0089, 0x138e: 0x008b, 0x138f: 0x008d, 0x1390: 0x008f, 0x1391: 0x0091, - 0x1392: 0x0093, 0x1393: 0x0095, 0x1394: 0x0097, 0x1395: 0x0099, 0x1396: 0x009b, 0x1397: 0x009d, - 0x1398: 0x009f, 0x1399: 0x00a1, 0x139a: 0x00a3, 0x139b: 0x00a5, 0x139c: 0x00a7, 0x139d: 0x00a9, - 0x139e: 0x00ab, 0x139f: 0x00ad, 0x13a0: 0x00af, 0x13a1: 0x00b1, 0x13a2: 0x00b3, 0x13a3: 0x00b5, - 0x13a4: 0x00dd, 0x13a5: 0x00f2, 0x13a8: 0x0173, 0x13a9: 0x0176, - 0x13aa: 0x0179, 0x13ab: 0x017c, 0x13ac: 0x017f, 0x13ad: 0x0182, 0x13ae: 0x0185, 0x13af: 0x0188, - 0x13b0: 0x018b, 0x13b1: 0x018e, 0x13b2: 0x0191, 0x13b3: 0x0194, 0x13b4: 0x0197, 0x13b5: 0x019a, - 0x13b6: 0x019d, 0x13b7: 0x01a0, 0x13b8: 0x01a3, 0x13b9: 0x0188, 0x13ba: 0x01a6, 0x13bb: 0x01a9, - 0x13bc: 0x01ac, 0x13bd: 0x01af, 0x13be: 0x01b2, 0x13bf: 0x01b5, - // Block 0x4f, offset 0x13c0 - 0x13c0: 0x01fd, 0x13c1: 0x0200, 0x13c2: 0x0203, 0x13c3: 0x045b, 0x13c4: 0x01c7, 0x13c5: 0x01d0, - 0x13c6: 0x01d6, 0x13c7: 0x01fa, 0x13c8: 0x01eb, 0x13c9: 0x01e8, 0x13ca: 0x0206, 0x13cb: 0x0209, - 0x13ce: 0x0021, 0x13cf: 0x0023, 0x13d0: 0x0025, 0x13d1: 0x0027, - 0x13d2: 0x0029, 0x13d3: 0x002b, 0x13d4: 0x002d, 0x13d5: 0x002f, 0x13d6: 0x0031, 0x13d7: 0x0033, - 0x13d8: 0x0021, 0x13d9: 0x0023, 0x13da: 0x0025, 0x13db: 0x0027, 0x13dc: 0x0029, 0x13dd: 0x002b, - 0x13de: 0x002d, 0x13df: 0x002f, 0x13e0: 0x0031, 0x13e1: 0x0033, 0x13e2: 0x0021, 0x13e3: 0x0023, - 0x13e4: 0x0025, 0x13e5: 0x0027, 0x13e6: 0x0029, 0x13e7: 0x002b, 0x13e8: 0x002d, 0x13e9: 0x002f, - 0x13ea: 0x0031, 0x13eb: 0x0033, 0x13ec: 0x0021, 0x13ed: 0x0023, 0x13ee: 0x0025, 0x13ef: 0x0027, - 0x13f0: 0x0029, 0x13f1: 0x002b, 0x13f2: 0x002d, 0x13f3: 0x002f, 0x13f4: 0x0031, 0x13f5: 0x0033, - 0x13f6: 0x0021, 0x13f7: 0x0023, 0x13f8: 0x0025, 0x13f9: 0x0027, 0x13fa: 0x0029, 0x13fb: 0x002b, - 0x13fc: 0x002d, 0x13fd: 0x002f, 0x13fe: 0x0031, 0x13ff: 0x0033, - // Block 0x50, offset 0x1400 - 0x1400: 0x0239, 0x1401: 0x023c, 0x1402: 0x0248, 0x1403: 0x0251, 0x1405: 0x028a, - 0x1406: 0x025a, 0x1407: 0x024b, 0x1408: 0x0269, 0x1409: 0x0290, 0x140a: 0x027b, 0x140b: 0x027e, - 0x140c: 0x0281, 0x140d: 0x0284, 0x140e: 0x025d, 0x140f: 0x026f, 0x1410: 0x0275, 0x1411: 0x0263, - 0x1412: 0x0278, 0x1413: 0x0257, 0x1414: 0x0260, 0x1415: 0x0242, 0x1416: 0x0245, 0x1417: 0x024e, - 0x1418: 0x0254, 0x1419: 0x0266, 0x141a: 0x026c, 0x141b: 0x0272, 0x141c: 0x0293, 0x141d: 0x02e4, - 0x141e: 0x02cc, 0x141f: 0x0296, 0x1421: 0x023c, 0x1422: 0x0248, - 0x1424: 0x0287, 0x1427: 0x024b, 0x1429: 0x0290, - 0x142a: 0x027b, 0x142b: 0x027e, 0x142c: 0x0281, 0x142d: 0x0284, 0x142e: 0x025d, 0x142f: 0x026f, - 0x1430: 0x0275, 0x1431: 0x0263, 0x1432: 0x0278, 0x1434: 0x0260, 0x1435: 0x0242, - 0x1436: 0x0245, 0x1437: 0x024e, 0x1439: 0x0266, 0x143b: 0x0272, - // Block 0x51, offset 0x1440 - 0x1442: 0x0248, - 0x1447: 0x024b, 0x1449: 0x0290, 0x144b: 0x027e, - 0x144d: 0x0284, 0x144e: 0x025d, 0x144f: 0x026f, 0x1451: 0x0263, - 0x1452: 0x0278, 0x1454: 0x0260, 0x1457: 0x024e, - 0x1459: 0x0266, 0x145b: 0x0272, 0x145d: 0x02e4, - 0x145f: 0x0296, 0x1461: 0x023c, 0x1462: 0x0248, - 0x1464: 0x0287, 0x1467: 0x024b, 0x1468: 0x0269, 0x1469: 0x0290, - 0x146a: 0x027b, 0x146c: 0x0281, 0x146d: 0x0284, 0x146e: 0x025d, 0x146f: 0x026f, - 0x1470: 0x0275, 0x1471: 0x0263, 0x1472: 0x0278, 0x1474: 0x0260, 0x1475: 0x0242, - 0x1476: 0x0245, 0x1477: 0x024e, 0x1479: 0x0266, 0x147a: 0x026c, 0x147b: 0x0272, - 0x147c: 0x0293, 0x147e: 0x02cc, - // Block 0x52, offset 0x1480 - 0x1480: 0x0239, 0x1481: 0x023c, 0x1482: 0x0248, 0x1483: 0x0251, 0x1484: 0x0287, 0x1485: 0x028a, - 0x1486: 0x025a, 0x1487: 0x024b, 0x1488: 0x0269, 0x1489: 0x0290, 0x148b: 0x027e, - 0x148c: 0x0281, 0x148d: 0x0284, 0x148e: 0x025d, 0x148f: 0x026f, 0x1490: 0x0275, 0x1491: 0x0263, - 0x1492: 0x0278, 0x1493: 0x0257, 0x1494: 0x0260, 0x1495: 0x0242, 0x1496: 0x0245, 0x1497: 0x024e, - 0x1498: 0x0254, 0x1499: 0x0266, 0x149a: 0x026c, 0x149b: 0x0272, - 0x14a1: 0x023c, 0x14a2: 0x0248, 0x14a3: 0x0251, - 0x14a5: 0x028a, 0x14a6: 0x025a, 0x14a7: 0x024b, 0x14a8: 0x0269, 0x14a9: 0x0290, - 0x14ab: 0x027e, 0x14ac: 0x0281, 0x14ad: 0x0284, 0x14ae: 0x025d, 0x14af: 0x026f, - 0x14b0: 0x0275, 0x14b1: 0x0263, 0x14b2: 0x0278, 0x14b3: 0x0257, 0x14b4: 0x0260, 0x14b5: 0x0242, - 0x14b6: 0x0245, 0x14b7: 0x024e, 0x14b8: 0x0254, 0x14b9: 0x0266, 0x14ba: 0x026c, 0x14bb: 0x0272, - // Block 0x53, offset 0x14c0 - 0x14c0: 0x1879, 0x14c1: 0x1876, 0x14c2: 0x187c, 0x14c3: 0x18a0, 0x14c4: 0x18c4, 0x14c5: 0x18e8, - 0x14c6: 0x190c, 0x14c7: 0x1915, 0x14c8: 0x191b, 0x14c9: 0x1921, 0x14ca: 0x1927, - 0x14d0: 0x1a8f, 0x14d1: 0x1a93, - 0x14d2: 0x1a97, 0x14d3: 0x1a9b, 0x14d4: 0x1a9f, 0x14d5: 0x1aa3, 0x14d6: 0x1aa7, 0x14d7: 0x1aab, - 0x14d8: 0x1aaf, 0x14d9: 0x1ab3, 0x14da: 0x1ab7, 0x14db: 0x1abb, 0x14dc: 0x1abf, 0x14dd: 0x1ac3, - 0x14de: 0x1ac7, 0x14df: 0x1acb, 0x14e0: 0x1acf, 0x14e1: 0x1ad3, 0x14e2: 0x1ad7, 0x14e3: 0x1adb, - 0x14e4: 0x1adf, 0x14e5: 0x1ae3, 0x14e6: 0x1ae7, 0x14e7: 0x1aeb, 0x14e8: 0x1aef, 0x14e9: 0x1af3, - 0x14ea: 0x2721, 0x14eb: 0x0047, 0x14ec: 0x0065, 0x14ed: 0x193c, 0x14ee: 0x19b4, - 0x14f0: 0x0043, 0x14f1: 0x0045, 0x14f2: 0x0047, 0x14f3: 0x0049, 0x14f4: 0x004b, 0x14f5: 0x004d, - 0x14f6: 0x004f, 0x14f7: 0x0051, 0x14f8: 0x0053, 0x14f9: 0x0055, 0x14fa: 0x0057, 0x14fb: 0x0059, - 0x14fc: 0x005b, 0x14fd: 0x005d, 0x14fe: 0x005f, 0x14ff: 0x0061, - // Block 0x54, offset 0x1500 - 0x1500: 0x26b0, 0x1501: 0x26c5, 0x1502: 0x0503, - 0x1510: 0x0c0f, 0x1511: 0x0a47, - 0x1512: 0x08d3, 0x1513: 0x45c7, 0x1514: 0x071b, 0x1515: 0x09ef, 0x1516: 0x132f, 0x1517: 0x09ff, - 0x1518: 0x0727, 0x1519: 0x0cd7, 0x151a: 0x0eaf, 0x151b: 0x0caf, 0x151c: 0x0827, 0x151d: 0x0b6b, - 0x151e: 0x07bf, 0x151f: 0x0cb7, 0x1520: 0x0813, 0x1521: 0x1117, 0x1522: 0x0f83, 0x1523: 0x138b, - 0x1524: 0x09d3, 0x1525: 0x090b, 0x1526: 0x0e63, 0x1527: 0x0c1b, 0x1528: 0x0c47, 0x1529: 0x06bf, - 0x152a: 0x06cb, 0x152b: 0x140b, 0x152c: 0x0adb, 0x152d: 0x06e7, 0x152e: 0x08ef, 0x152f: 0x0c3b, - 0x1530: 0x13b3, 0x1531: 0x0c13, 0x1532: 0x106f, 0x1533: 0x10ab, 0x1534: 0x08f7, 0x1535: 0x0e43, - 0x1536: 0x0d0b, 0x1537: 0x0d07, 0x1538: 0x0f97, 0x1539: 0x082b, 0x153a: 0x0957, 0x153b: 0x1443, - // Block 0x55, offset 0x1540 - 0x1540: 0x06fb, 0x1541: 0x06f3, 0x1542: 0x0703, 0x1543: 0x1647, 0x1544: 0x0747, 0x1545: 0x0757, - 0x1546: 0x075b, 0x1547: 0x0763, 0x1548: 0x076b, 0x1549: 0x076f, 0x154a: 0x077b, 0x154b: 0x0773, - 0x154c: 0x05b3, 0x154d: 0x165b, 0x154e: 0x078f, 0x154f: 0x0793, 0x1550: 0x0797, 0x1551: 0x07b3, - 0x1552: 0x164c, 0x1553: 0x05b7, 0x1554: 0x079f, 0x1555: 0x07bf, 0x1556: 0x1656, 0x1557: 0x07cf, - 0x1558: 0x07d7, 0x1559: 0x0737, 0x155a: 0x07df, 0x155b: 0x07e3, 0x155c: 0x1831, 0x155d: 0x07ff, - 0x155e: 0x0807, 0x155f: 0x05bf, 0x1560: 0x081f, 0x1561: 0x0823, 0x1562: 0x082b, 0x1563: 0x082f, - 0x1564: 0x05c3, 0x1565: 0x0847, 0x1566: 0x084b, 0x1567: 0x0857, 0x1568: 0x0863, 0x1569: 0x0867, - 0x156a: 0x086b, 0x156b: 0x0873, 0x156c: 0x0893, 0x156d: 0x0897, 0x156e: 0x089f, 0x156f: 0x08af, - 0x1570: 0x08b7, 0x1571: 0x08bb, 0x1572: 0x08bb, 0x1573: 0x08bb, 0x1574: 0x166a, 0x1575: 0x0e93, - 0x1576: 0x08cf, 0x1577: 0x08d7, 0x1578: 0x166f, 0x1579: 0x08e3, 0x157a: 0x08eb, 0x157b: 0x08f3, - 0x157c: 0x091b, 0x157d: 0x0907, 0x157e: 0x0913, 0x157f: 0x0917, - // Block 0x56, offset 0x1580 - 0x1580: 0x091f, 0x1581: 0x0927, 0x1582: 0x092b, 0x1583: 0x0933, 0x1584: 0x093b, 0x1585: 0x093f, - 0x1586: 0x093f, 0x1587: 0x0947, 0x1588: 0x094f, 0x1589: 0x0953, 0x158a: 0x095f, 0x158b: 0x0983, - 0x158c: 0x0967, 0x158d: 0x0987, 0x158e: 0x096b, 0x158f: 0x0973, 0x1590: 0x080b, 0x1591: 0x09cf, - 0x1592: 0x0997, 0x1593: 0x099b, 0x1594: 0x099f, 0x1595: 0x0993, 0x1596: 0x09a7, 0x1597: 0x09a3, - 0x1598: 0x09bb, 0x1599: 0x1674, 0x159a: 0x09d7, 0x159b: 0x09db, 0x159c: 0x09e3, 0x159d: 0x09ef, - 0x159e: 0x09f7, 0x159f: 0x0a13, 0x15a0: 0x1679, 0x15a1: 0x167e, 0x15a2: 0x0a1f, 0x15a3: 0x0a23, - 0x15a4: 0x0a27, 0x15a5: 0x0a1b, 0x15a6: 0x0a2f, 0x15a7: 0x05c7, 0x15a8: 0x05cb, 0x15a9: 0x0a37, - 0x15aa: 0x0a3f, 0x15ab: 0x0a3f, 0x15ac: 0x1683, 0x15ad: 0x0a5b, 0x15ae: 0x0a5f, 0x15af: 0x0a63, - 0x15b0: 0x0a6b, 0x15b1: 0x1688, 0x15b2: 0x0a73, 0x15b3: 0x0a77, 0x15b4: 0x0b4f, 0x15b5: 0x0a7f, - 0x15b6: 0x05cf, 0x15b7: 0x0a8b, 0x15b8: 0x0a9b, 0x15b9: 0x0aa7, 0x15ba: 0x0aa3, 0x15bb: 0x1692, - 0x15bc: 0x0aaf, 0x15bd: 0x1697, 0x15be: 0x0abb, 0x15bf: 0x0ab7, - // Block 0x57, offset 0x15c0 - 0x15c0: 0x0abf, 0x15c1: 0x0acf, 0x15c2: 0x0ad3, 0x15c3: 0x05d3, 0x15c4: 0x0ae3, 0x15c5: 0x0aeb, - 0x15c6: 0x0aef, 0x15c7: 0x0af3, 0x15c8: 0x05d7, 0x15c9: 0x169c, 0x15ca: 0x05db, 0x15cb: 0x0b0f, - 0x15cc: 0x0b13, 0x15cd: 0x0b17, 0x15ce: 0x0b1f, 0x15cf: 0x1863, 0x15d0: 0x0b37, 0x15d1: 0x16a6, - 0x15d2: 0x16a6, 0x15d3: 0x11d7, 0x15d4: 0x0b47, 0x15d5: 0x0b47, 0x15d6: 0x05df, 0x15d7: 0x16c9, - 0x15d8: 0x179b, 0x15d9: 0x0b57, 0x15da: 0x0b5f, 0x15db: 0x05e3, 0x15dc: 0x0b73, 0x15dd: 0x0b83, - 0x15de: 0x0b87, 0x15df: 0x0b8f, 0x15e0: 0x0b9f, 0x15e1: 0x05eb, 0x15e2: 0x05e7, 0x15e3: 0x0ba3, - 0x15e4: 0x16ab, 0x15e5: 0x0ba7, 0x15e6: 0x0bbb, 0x15e7: 0x0bbf, 0x15e8: 0x0bc3, 0x15e9: 0x0bbf, - 0x15ea: 0x0bcf, 0x15eb: 0x0bd3, 0x15ec: 0x0be3, 0x15ed: 0x0bdb, 0x15ee: 0x0bdf, 0x15ef: 0x0be7, - 0x15f0: 0x0beb, 0x15f1: 0x0bef, 0x15f2: 0x0bfb, 0x15f3: 0x0bff, 0x15f4: 0x0c17, 0x15f5: 0x0c1f, - 0x15f6: 0x0c2f, 0x15f7: 0x0c43, 0x15f8: 0x16ba, 0x15f9: 0x0c3f, 0x15fa: 0x0c33, 0x15fb: 0x0c4b, - 0x15fc: 0x0c53, 0x15fd: 0x0c67, 0x15fe: 0x16bf, 0x15ff: 0x0c6f, - // Block 0x58, offset 0x1600 - 0x1600: 0x0c63, 0x1601: 0x0c5b, 0x1602: 0x05ef, 0x1603: 0x0c77, 0x1604: 0x0c7f, 0x1605: 0x0c87, - 0x1606: 0x0c7b, 0x1607: 0x05f3, 0x1608: 0x0c97, 0x1609: 0x0c9f, 0x160a: 0x16c4, 0x160b: 0x0ccb, - 0x160c: 0x0cff, 0x160d: 0x0cdb, 0x160e: 0x05ff, 0x160f: 0x0ce7, 0x1610: 0x05fb, 0x1611: 0x05f7, - 0x1612: 0x07c3, 0x1613: 0x07c7, 0x1614: 0x0d03, 0x1615: 0x0ceb, 0x1616: 0x11ab, 0x1617: 0x0663, - 0x1618: 0x0d0f, 0x1619: 0x0d13, 0x161a: 0x0d17, 0x161b: 0x0d2b, 0x161c: 0x0d23, 0x161d: 0x16dd, - 0x161e: 0x0603, 0x161f: 0x0d3f, 0x1620: 0x0d33, 0x1621: 0x0d4f, 0x1622: 0x0d57, 0x1623: 0x16e7, - 0x1624: 0x0d5b, 0x1625: 0x0d47, 0x1626: 0x0d63, 0x1627: 0x0607, 0x1628: 0x0d67, 0x1629: 0x0d6b, - 0x162a: 0x0d6f, 0x162b: 0x0d7b, 0x162c: 0x16ec, 0x162d: 0x0d83, 0x162e: 0x060b, 0x162f: 0x0d8f, - 0x1630: 0x16f1, 0x1631: 0x0d93, 0x1632: 0x060f, 0x1633: 0x0d9f, 0x1634: 0x0dab, 0x1635: 0x0db7, - 0x1636: 0x0dbb, 0x1637: 0x16f6, 0x1638: 0x168d, 0x1639: 0x16fb, 0x163a: 0x0ddb, 0x163b: 0x1700, - 0x163c: 0x0de7, 0x163d: 0x0def, 0x163e: 0x0ddf, 0x163f: 0x0dfb, - // Block 0x59, offset 0x1640 - 0x1640: 0x0e0b, 0x1641: 0x0e1b, 0x1642: 0x0e0f, 0x1643: 0x0e13, 0x1644: 0x0e1f, 0x1645: 0x0e23, - 0x1646: 0x1705, 0x1647: 0x0e07, 0x1648: 0x0e3b, 0x1649: 0x0e3f, 0x164a: 0x0613, 0x164b: 0x0e53, - 0x164c: 0x0e4f, 0x164d: 0x170a, 0x164e: 0x0e33, 0x164f: 0x0e6f, 0x1650: 0x170f, 0x1651: 0x1714, - 0x1652: 0x0e73, 0x1653: 0x0e87, 0x1654: 0x0e83, 0x1655: 0x0e7f, 0x1656: 0x0617, 0x1657: 0x0e8b, - 0x1658: 0x0e9b, 0x1659: 0x0e97, 0x165a: 0x0ea3, 0x165b: 0x1651, 0x165c: 0x0eb3, 0x165d: 0x1719, - 0x165e: 0x0ebf, 0x165f: 0x1723, 0x1660: 0x0ed3, 0x1661: 0x0edf, 0x1662: 0x0ef3, 0x1663: 0x1728, - 0x1664: 0x0f07, 0x1665: 0x0f0b, 0x1666: 0x172d, 0x1667: 0x1732, 0x1668: 0x0f27, 0x1669: 0x0f37, - 0x166a: 0x061b, 0x166b: 0x0f3b, 0x166c: 0x061f, 0x166d: 0x061f, 0x166e: 0x0f53, 0x166f: 0x0f57, - 0x1670: 0x0f5f, 0x1671: 0x0f63, 0x1672: 0x0f6f, 0x1673: 0x0623, 0x1674: 0x0f87, 0x1675: 0x1737, - 0x1676: 0x0fa3, 0x1677: 0x173c, 0x1678: 0x0faf, 0x1679: 0x16a1, 0x167a: 0x0fbf, 0x167b: 0x1741, - 0x167c: 0x1746, 0x167d: 0x174b, 0x167e: 0x0627, 0x167f: 0x062b, - // Block 0x5a, offset 0x1680 - 0x1680: 0x0ff7, 0x1681: 0x1755, 0x1682: 0x1750, 0x1683: 0x175a, 0x1684: 0x175f, 0x1685: 0x0fff, - 0x1686: 0x1003, 0x1687: 0x1003, 0x1688: 0x100b, 0x1689: 0x0633, 0x168a: 0x100f, 0x168b: 0x0637, - 0x168c: 0x063b, 0x168d: 0x1769, 0x168e: 0x1023, 0x168f: 0x102b, 0x1690: 0x1037, 0x1691: 0x063f, - 0x1692: 0x176e, 0x1693: 0x105b, 0x1694: 0x1773, 0x1695: 0x1778, 0x1696: 0x107b, 0x1697: 0x1093, - 0x1698: 0x0643, 0x1699: 0x109b, 0x169a: 0x109f, 0x169b: 0x10a3, 0x169c: 0x177d, 0x169d: 0x1782, - 0x169e: 0x1782, 0x169f: 0x10bb, 0x16a0: 0x0647, 0x16a1: 0x1787, 0x16a2: 0x10cf, 0x16a3: 0x10d3, - 0x16a4: 0x064b, 0x16a5: 0x178c, 0x16a6: 0x10ef, 0x16a7: 0x064f, 0x16a8: 0x10ff, 0x16a9: 0x10f7, - 0x16aa: 0x1107, 0x16ab: 0x1796, 0x16ac: 0x111f, 0x16ad: 0x0653, 0x16ae: 0x112b, 0x16af: 0x1133, - 0x16b0: 0x1143, 0x16b1: 0x0657, 0x16b2: 0x17a0, 0x16b3: 0x17a5, 0x16b4: 0x065b, 0x16b5: 0x17aa, - 0x16b6: 0x115b, 0x16b7: 0x17af, 0x16b8: 0x1167, 0x16b9: 0x1173, 0x16ba: 0x117b, 0x16bb: 0x17b4, - 0x16bc: 0x17b9, 0x16bd: 0x118f, 0x16be: 0x17be, 0x16bf: 0x1197, - // Block 0x5b, offset 0x16c0 - 0x16c0: 0x16ce, 0x16c1: 0x065f, 0x16c2: 0x11af, 0x16c3: 0x11b3, 0x16c4: 0x0667, 0x16c5: 0x11b7, - 0x16c6: 0x0a33, 0x16c7: 0x17c3, 0x16c8: 0x17c8, 0x16c9: 0x16d3, 0x16ca: 0x16d8, 0x16cb: 0x11d7, - 0x16cc: 0x11db, 0x16cd: 0x13f3, 0x16ce: 0x066b, 0x16cf: 0x1207, 0x16d0: 0x1203, 0x16d1: 0x120b, - 0x16d2: 0x083f, 0x16d3: 0x120f, 0x16d4: 0x1213, 0x16d5: 0x1217, 0x16d6: 0x121f, 0x16d7: 0x17cd, - 0x16d8: 0x121b, 0x16d9: 0x1223, 0x16da: 0x1237, 0x16db: 0x123b, 0x16dc: 0x1227, 0x16dd: 0x123f, - 0x16de: 0x1253, 0x16df: 0x1267, 0x16e0: 0x1233, 0x16e1: 0x1247, 0x16e2: 0x124b, 0x16e3: 0x124f, - 0x16e4: 0x17d2, 0x16e5: 0x17dc, 0x16e6: 0x17d7, 0x16e7: 0x066f, 0x16e8: 0x126f, 0x16e9: 0x1273, - 0x16ea: 0x127b, 0x16eb: 0x17f0, 0x16ec: 0x127f, 0x16ed: 0x17e1, 0x16ee: 0x0673, 0x16ef: 0x0677, - 0x16f0: 0x17e6, 0x16f1: 0x17eb, 0x16f2: 0x067b, 0x16f3: 0x129f, 0x16f4: 0x12a3, 0x16f5: 0x12a7, - 0x16f6: 0x12ab, 0x16f7: 0x12b7, 0x16f8: 0x12b3, 0x16f9: 0x12bf, 0x16fa: 0x12bb, 0x16fb: 0x12cb, - 0x16fc: 0x12c3, 0x16fd: 0x12c7, 0x16fe: 0x12cf, 0x16ff: 0x067f, - // Block 0x5c, offset 0x1700 - 0x1700: 0x12d7, 0x1701: 0x12db, 0x1702: 0x0683, 0x1703: 0x12eb, 0x1704: 0x12ef, 0x1705: 0x17f5, - 0x1706: 0x12fb, 0x1707: 0x12ff, 0x1708: 0x0687, 0x1709: 0x130b, 0x170a: 0x05bb, 0x170b: 0x17fa, - 0x170c: 0x17ff, 0x170d: 0x068b, 0x170e: 0x068f, 0x170f: 0x1337, 0x1710: 0x134f, 0x1711: 0x136b, - 0x1712: 0x137b, 0x1713: 0x1804, 0x1714: 0x138f, 0x1715: 0x1393, 0x1716: 0x13ab, 0x1717: 0x13b7, - 0x1718: 0x180e, 0x1719: 0x1660, 0x171a: 0x13c3, 0x171b: 0x13bf, 0x171c: 0x13cb, 0x171d: 0x1665, - 0x171e: 0x13d7, 0x171f: 0x13e3, 0x1720: 0x1813, 0x1721: 0x1818, 0x1722: 0x1423, 0x1723: 0x142f, - 0x1724: 0x1437, 0x1725: 0x181d, 0x1726: 0x143b, 0x1727: 0x1467, 0x1728: 0x1473, 0x1729: 0x1477, - 0x172a: 0x146f, 0x172b: 0x1483, 0x172c: 0x1487, 0x172d: 0x1822, 0x172e: 0x1493, 0x172f: 0x0693, - 0x1730: 0x149b, 0x1731: 0x1827, 0x1732: 0x0697, 0x1733: 0x14d3, 0x1734: 0x0ac3, 0x1735: 0x14eb, - 0x1736: 0x182c, 0x1737: 0x1836, 0x1738: 0x069b, 0x1739: 0x069f, 0x173a: 0x1513, 0x173b: 0x183b, - 0x173c: 0x06a3, 0x173d: 0x1840, 0x173e: 0x152b, 0x173f: 0x152b, - // Block 0x5d, offset 0x1740 - 0x1740: 0x1533, 0x1741: 0x1845, 0x1742: 0x154b, 0x1743: 0x06a7, 0x1744: 0x155b, 0x1745: 0x1567, - 0x1746: 0x156f, 0x1747: 0x1577, 0x1748: 0x06ab, 0x1749: 0x184a, 0x174a: 0x158b, 0x174b: 0x15a7, - 0x174c: 0x15b3, 0x174d: 0x06af, 0x174e: 0x06b3, 0x174f: 0x15b7, 0x1750: 0x184f, 0x1751: 0x06b7, - 0x1752: 0x1854, 0x1753: 0x1859, 0x1754: 0x185e, 0x1755: 0x15db, 0x1756: 0x06bb, 0x1757: 0x15ef, - 0x1758: 0x15f7, 0x1759: 0x15fb, 0x175a: 0x1603, 0x175b: 0x160b, 0x175c: 0x1613, 0x175d: 0x1868, -} - -// nfkcIndex: 22 blocks, 1408 entries, 2816 bytes -// Block 0 is the zero block. -var nfkcIndex = [1408]uint16{ - // Block 0x0, offset 0x0 - // Block 0x1, offset 0x40 - // Block 0x2, offset 0x80 - // Block 0x3, offset 0xc0 - 0xc2: 0x5c, 0xc3: 0x01, 0xc4: 0x02, 0xc5: 0x03, 0xc6: 0x5d, 0xc7: 0x04, - 0xc8: 0x05, 0xca: 0x5e, 0xcb: 0x5f, 0xcc: 0x06, 0xcd: 0x07, 0xce: 0x08, 0xcf: 0x09, - 0xd0: 0x0a, 0xd1: 0x60, 0xd2: 0x61, 0xd3: 0x0b, 0xd6: 0x0c, 0xd7: 0x62, - 0xd8: 0x63, 0xd9: 0x0d, 0xdb: 0x64, 0xdc: 0x65, 0xdd: 0x66, 0xdf: 0x67, - 0xe0: 0x02, 0xe1: 0x03, 0xe2: 0x04, 0xe3: 0x05, - 0xea: 0x06, 0xeb: 0x07, 0xec: 0x08, 0xed: 0x09, 0xef: 0x0a, - 0xf0: 0x13, - // Block 0x4, offset 0x100 - 0x120: 0x68, 0x121: 0x69, 0x123: 0x0e, 0x124: 0x6a, 0x125: 0x6b, 0x126: 0x6c, 0x127: 0x6d, - 0x128: 0x6e, 0x129: 0x6f, 0x12a: 0x70, 0x12b: 0x71, 0x12c: 0x6c, 0x12d: 0x72, 0x12e: 0x73, 0x12f: 0x74, - 0x131: 0x75, 0x132: 0x76, 0x133: 0x77, 0x134: 0x78, 0x135: 0x79, 0x137: 0x7a, - 0x138: 0x7b, 0x139: 0x7c, 0x13a: 0x7d, 0x13b: 0x7e, 0x13c: 0x7f, 0x13d: 0x80, 0x13e: 0x81, 0x13f: 0x82, - // Block 0x5, offset 0x140 - 0x140: 0x83, 0x142: 0x84, 0x143: 0x85, 0x144: 0x86, 0x145: 0x87, 0x146: 0x88, 0x147: 0x89, - 0x14d: 0x8a, - 0x15c: 0x8b, 0x15f: 0x8c, - 0x162: 0x8d, 0x164: 0x8e, - 0x168: 0x8f, 0x169: 0x90, 0x16a: 0x91, 0x16c: 0x0f, 0x16d: 0x92, 0x16e: 0x93, 0x16f: 0x94, - 0x170: 0x95, 0x173: 0x96, 0x174: 0x97, 0x175: 0x10, 0x176: 0x11, 0x177: 0x12, - 0x178: 0x13, 0x179: 0x14, 0x17a: 0x15, 0x17b: 0x16, 0x17c: 0x17, 0x17d: 0x18, 0x17e: 0x19, 0x17f: 0x1a, - // Block 0x6, offset 0x180 - 0x180: 0x98, 0x181: 0x99, 0x182: 0x9a, 0x183: 0x9b, 0x184: 0x1b, 0x185: 0x1c, 0x186: 0x9c, 0x187: 0x9d, - 0x188: 0x9e, 0x189: 0x1d, 0x18a: 0x1e, 0x18b: 0x9f, 0x18c: 0xa0, - 0x191: 0x1f, 0x192: 0x20, 0x193: 0xa1, - 0x1a8: 0xa2, 0x1a9: 0xa3, 0x1ab: 0xa4, - 0x1b1: 0xa5, 0x1b3: 0xa6, 0x1b5: 0xa7, 0x1b7: 0xa8, - 0x1ba: 0xa9, 0x1bb: 0xaa, 0x1bc: 0x21, 0x1bd: 0x22, 0x1be: 0x23, 0x1bf: 0xab, - // Block 0x7, offset 0x1c0 - 0x1c0: 0xac, 0x1c1: 0x24, 0x1c2: 0x25, 0x1c3: 0x26, 0x1c4: 0xad, 0x1c5: 0x27, 0x1c6: 0x28, - 0x1c8: 0x29, 0x1c9: 0x2a, 0x1ca: 0x2b, 0x1cb: 0x2c, 0x1cc: 0x2d, 0x1cd: 0x2e, 0x1ce: 0x2f, 0x1cf: 0x30, - // Block 0x8, offset 0x200 - 0x219: 0xae, 0x21a: 0xaf, 0x21b: 0xb0, 0x21d: 0xb1, 0x21f: 0xb2, - 0x220: 0xb3, 0x223: 0xb4, 0x224: 0xb5, 0x225: 0xb6, 0x226: 0xb7, 0x227: 0xb8, - 0x22a: 0xb9, 0x22b: 0xba, 0x22d: 0xbb, 0x22f: 0xbc, - 0x230: 0xbd, 0x231: 0xbe, 0x232: 0xbf, 0x233: 0xc0, 0x234: 0xc1, 0x235: 0xc2, 0x236: 0xc3, 0x237: 0xbd, - 0x238: 0xbe, 0x239: 0xbf, 0x23a: 0xc0, 0x23b: 0xc1, 0x23c: 0xc2, 0x23d: 0xc3, 0x23e: 0xbd, 0x23f: 0xbe, - // Block 0x9, offset 0x240 - 0x240: 0xbf, 0x241: 0xc0, 0x242: 0xc1, 0x243: 0xc2, 0x244: 0xc3, 0x245: 0xbd, 0x246: 0xbe, 0x247: 0xbf, - 0x248: 0xc0, 0x249: 0xc1, 0x24a: 0xc2, 0x24b: 0xc3, 0x24c: 0xbd, 0x24d: 0xbe, 0x24e: 0xbf, 0x24f: 0xc0, - 0x250: 0xc1, 0x251: 0xc2, 0x252: 0xc3, 0x253: 0xbd, 0x254: 0xbe, 0x255: 0xbf, 0x256: 0xc0, 0x257: 0xc1, - 0x258: 0xc2, 0x259: 0xc3, 0x25a: 0xbd, 0x25b: 0xbe, 0x25c: 0xbf, 0x25d: 0xc0, 0x25e: 0xc1, 0x25f: 0xc2, - 0x260: 0xc3, 0x261: 0xbd, 0x262: 0xbe, 0x263: 0xbf, 0x264: 0xc0, 0x265: 0xc1, 0x266: 0xc2, 0x267: 0xc3, - 0x268: 0xbd, 0x269: 0xbe, 0x26a: 0xbf, 0x26b: 0xc0, 0x26c: 0xc1, 0x26d: 0xc2, 0x26e: 0xc3, 0x26f: 0xbd, - 0x270: 0xbe, 0x271: 0xbf, 0x272: 0xc0, 0x273: 0xc1, 0x274: 0xc2, 0x275: 0xc3, 0x276: 0xbd, 0x277: 0xbe, - 0x278: 0xbf, 0x279: 0xc0, 0x27a: 0xc1, 0x27b: 0xc2, 0x27c: 0xc3, 0x27d: 0xbd, 0x27e: 0xbe, 0x27f: 0xbf, - // Block 0xa, offset 0x280 - 0x280: 0xc0, 0x281: 0xc1, 0x282: 0xc2, 0x283: 0xc3, 0x284: 0xbd, 0x285: 0xbe, 0x286: 0xbf, 0x287: 0xc0, - 0x288: 0xc1, 0x289: 0xc2, 0x28a: 0xc3, 0x28b: 0xbd, 0x28c: 0xbe, 0x28d: 0xbf, 0x28e: 0xc0, 0x28f: 0xc1, - 0x290: 0xc2, 0x291: 0xc3, 0x292: 0xbd, 0x293: 0xbe, 0x294: 0xbf, 0x295: 0xc0, 0x296: 0xc1, 0x297: 0xc2, - 0x298: 0xc3, 0x299: 0xbd, 0x29a: 0xbe, 0x29b: 0xbf, 0x29c: 0xc0, 0x29d: 0xc1, 0x29e: 0xc2, 0x29f: 0xc3, - 0x2a0: 0xbd, 0x2a1: 0xbe, 0x2a2: 0xbf, 0x2a3: 0xc0, 0x2a4: 0xc1, 0x2a5: 0xc2, 0x2a6: 0xc3, 0x2a7: 0xbd, - 0x2a8: 0xbe, 0x2a9: 0xbf, 0x2aa: 0xc0, 0x2ab: 0xc1, 0x2ac: 0xc2, 0x2ad: 0xc3, 0x2ae: 0xbd, 0x2af: 0xbe, - 0x2b0: 0xbf, 0x2b1: 0xc0, 0x2b2: 0xc1, 0x2b3: 0xc2, 0x2b4: 0xc3, 0x2b5: 0xbd, 0x2b6: 0xbe, 0x2b7: 0xbf, - 0x2b8: 0xc0, 0x2b9: 0xc1, 0x2ba: 0xc2, 0x2bb: 0xc3, 0x2bc: 0xbd, 0x2bd: 0xbe, 0x2be: 0xbf, 0x2bf: 0xc0, - // Block 0xb, offset 0x2c0 - 0x2c0: 0xc1, 0x2c1: 0xc2, 0x2c2: 0xc3, 0x2c3: 0xbd, 0x2c4: 0xbe, 0x2c5: 0xbf, 0x2c6: 0xc0, 0x2c7: 0xc1, - 0x2c8: 0xc2, 0x2c9: 0xc3, 0x2ca: 0xbd, 0x2cb: 0xbe, 0x2cc: 0xbf, 0x2cd: 0xc0, 0x2ce: 0xc1, 0x2cf: 0xc2, - 0x2d0: 0xc3, 0x2d1: 0xbd, 0x2d2: 0xbe, 0x2d3: 0xbf, 0x2d4: 0xc0, 0x2d5: 0xc1, 0x2d6: 0xc2, 0x2d7: 0xc3, - 0x2d8: 0xbd, 0x2d9: 0xbe, 0x2da: 0xbf, 0x2db: 0xc0, 0x2dc: 0xc1, 0x2dd: 0xc2, 0x2de: 0xc4, - // Block 0xc, offset 0x300 - 0x324: 0x31, 0x325: 0x32, 0x326: 0x33, 0x327: 0x34, - 0x328: 0x35, 0x329: 0x36, 0x32a: 0x37, 0x32b: 0x38, 0x32c: 0x39, 0x32d: 0x3a, 0x32e: 0x3b, 0x32f: 0x3c, - 0x330: 0x3d, 0x331: 0x3e, 0x332: 0x3f, 0x333: 0x40, 0x334: 0x41, 0x335: 0x42, 0x336: 0x43, 0x337: 0x44, - 0x338: 0x45, 0x339: 0x46, 0x33a: 0x47, 0x33b: 0x48, 0x33c: 0xc5, 0x33d: 0x49, 0x33e: 0x4a, 0x33f: 0x4b, - // Block 0xd, offset 0x340 - 0x347: 0xc6, - 0x34b: 0xc7, 0x34d: 0xc8, - 0x368: 0xc9, 0x36b: 0xca, - 0x374: 0xcb, - 0x37d: 0xcc, - // Block 0xe, offset 0x380 - 0x381: 0xcd, 0x382: 0xce, 0x384: 0xcf, 0x385: 0xb7, 0x387: 0xd0, - 0x388: 0xd1, 0x38b: 0xd2, 0x38c: 0xd3, 0x38d: 0xd4, - 0x391: 0xd5, 0x392: 0xd6, 0x393: 0xd7, 0x396: 0xd8, 0x397: 0xd9, - 0x398: 0xda, 0x39a: 0xdb, 0x39c: 0xdc, - 0x3a0: 0xdd, 0x3a7: 0xde, - 0x3a8: 0xdf, 0x3a9: 0xe0, 0x3aa: 0xe1, - 0x3b0: 0xda, 0x3b5: 0xe2, 0x3b6: 0xe3, - // Block 0xf, offset 0x3c0 - 0x3eb: 0xe4, 0x3ec: 0xe5, - // Block 0x10, offset 0x400 - 0x432: 0xe6, - // Block 0x11, offset 0x440 - 0x445: 0xe7, 0x446: 0xe8, 0x447: 0xe9, - 0x449: 0xea, - 0x450: 0xeb, 0x451: 0xec, 0x452: 0xed, 0x453: 0xee, 0x454: 0xef, 0x455: 0xf0, 0x456: 0xf1, 0x457: 0xf2, - 0x458: 0xf3, 0x459: 0xf4, 0x45a: 0x4c, 0x45b: 0xf5, 0x45c: 0xf6, 0x45d: 0xf7, 0x45e: 0xf8, 0x45f: 0x4d, - // Block 0x12, offset 0x480 - 0x480: 0xf9, 0x484: 0xe5, - 0x48b: 0xfa, - 0x4a3: 0xfb, 0x4a5: 0xfc, - 0x4b8: 0x4e, 0x4b9: 0x4f, 0x4ba: 0x50, - // Block 0x13, offset 0x4c0 - 0x4c4: 0x51, 0x4c5: 0xfd, 0x4c6: 0xfe, - 0x4c8: 0x52, 0x4c9: 0xff, - // Block 0x14, offset 0x500 - 0x520: 0x53, 0x521: 0x54, 0x522: 0x55, 0x523: 0x56, 0x524: 0x57, 0x525: 0x58, 0x526: 0x59, 0x527: 0x5a, - 0x528: 0x5b, - // Block 0x15, offset 0x540 - 0x550: 0x0b, 0x551: 0x0c, 0x556: 0x0d, - 0x55b: 0x0e, 0x55d: 0x0f, 0x55e: 0x10, 0x55f: 0x11, - 0x56f: 0x12, -} - -// nfkcSparseOffset: 164 entries, 328 bytes -var nfkcSparseOffset = []uint16{0x0, 0xe, 0x12, 0x1b, 0x25, 0x35, 0x37, 0x3c, 0x47, 0x56, 0x63, 0x6b, 0x70, 0x75, 0x77, 0x7f, 0x86, 0x89, 0x91, 0x95, 0x99, 0x9b, 0x9d, 0xa6, 0xaa, 0xb1, 0xb6, 0xb9, 0xc3, 0xc6, 0xcd, 0xd5, 0xd9, 0xdb, 0xdf, 0xe3, 0xe9, 0xfa, 0x106, 0x108, 0x10e, 0x110, 0x112, 0x114, 0x116, 0x118, 0x11a, 0x11c, 0x11f, 0x122, 0x124, 0x127, 0x12a, 0x12e, 0x133, 0x13c, 0x13e, 0x141, 0x143, 0x14e, 0x159, 0x167, 0x175, 0x185, 0x193, 0x19a, 0x1a0, 0x1af, 0x1b3, 0x1b5, 0x1b9, 0x1bb, 0x1be, 0x1c0, 0x1c3, 0x1c5, 0x1c8, 0x1ca, 0x1cc, 0x1ce, 0x1da, 0x1e4, 0x1ee, 0x1f1, 0x1f5, 0x1f7, 0x1f9, 0x1fb, 0x1fd, 0x200, 0x202, 0x204, 0x206, 0x208, 0x20e, 0x211, 0x215, 0x217, 0x21e, 0x224, 0x22a, 0x232, 0x238, 0x23e, 0x244, 0x248, 0x24a, 0x24c, 0x24e, 0x250, 0x256, 0x259, 0x25b, 0x261, 0x264, 0x26c, 0x273, 0x276, 0x279, 0x27b, 0x27e, 0x286, 0x28a, 0x291, 0x294, 0x29a, 0x29c, 0x29e, 0x2a1, 0x2a3, 0x2a6, 0x2a8, 0x2aa, 0x2ac, 0x2ae, 0x2b1, 0x2b3, 0x2b5, 0x2b7, 0x2b9, 0x2c6, 0x2d0, 0x2d2, 0x2d4, 0x2d8, 0x2dd, 0x2e9, 0x2ee, 0x2f7, 0x2fd, 0x302, 0x306, 0x30b, 0x30f, 0x31f, 0x32d, 0x33b, 0x349, 0x34f, 0x351, 0x353, 0x356, 0x361, 0x363} - -// nfkcSparseValues: 877 entries, 3508 bytes -var nfkcSparseValues = [877]valueRange{ - // Block 0x0, offset 0x0 - {value: 0x0002, lo: 0x0d}, - {value: 0x0001, lo: 0xa0, hi: 0xa0}, - {value: 0x427b, lo: 0xa8, hi: 0xa8}, - {value: 0x0083, lo: 0xaa, hi: 0xaa}, - {value: 0x4267, lo: 0xaf, hi: 0xaf}, - {value: 0x0025, lo: 0xb2, hi: 0xb3}, - {value: 0x425d, lo: 0xb4, hi: 0xb4}, - {value: 0x01dc, lo: 0xb5, hi: 0xb5}, - {value: 0x4294, lo: 0xb8, hi: 0xb8}, - {value: 0x0023, lo: 0xb9, hi: 0xb9}, - {value: 0x009f, lo: 0xba, hi: 0xba}, - {value: 0x221f, lo: 0xbc, hi: 0xbc}, - {value: 0x2213, lo: 0xbd, hi: 0xbd}, - {value: 0x22b5, lo: 0xbe, hi: 0xbe}, - // Block 0x1, offset 0xe - {value: 0x0091, lo: 0x03}, - {value: 0x46e5, lo: 0xa0, hi: 0xa1}, - {value: 0x4717, lo: 0xaf, hi: 0xb0}, - {value: 0xa000, lo: 0xb7, hi: 0xb7}, - // Block 0x2, offset 0x12 - {value: 0x0003, lo: 0x08}, - {value: 0xa000, lo: 0x92, hi: 0x92}, - {value: 0x0091, lo: 0xb0, hi: 0xb0}, - {value: 0x0119, lo: 0xb1, hi: 0xb1}, - {value: 0x0095, lo: 0xb2, hi: 0xb2}, - {value: 0x00a5, lo: 0xb3, hi: 0xb3}, - {value: 0x0143, lo: 0xb4, hi: 0xb6}, - {value: 0x00af, lo: 0xb7, hi: 0xb7}, - {value: 0x00b3, lo: 0xb8, hi: 0xb8}, - // Block 0x3, offset 0x1b - {value: 0x000a, lo: 0x09}, - {value: 0x4271, lo: 0x98, hi: 0x98}, - {value: 0x4276, lo: 0x99, hi: 0x9a}, - {value: 0x4299, lo: 0x9b, hi: 0x9b}, - {value: 0x4262, lo: 0x9c, hi: 0x9c}, - {value: 0x4285, lo: 0x9d, hi: 0x9d}, - {value: 0x0113, lo: 0xa0, hi: 0xa0}, - {value: 0x0099, lo: 0xa1, hi: 0xa1}, - {value: 0x00a7, lo: 0xa2, hi: 0xa3}, - {value: 0x0167, lo: 0xa4, hi: 0xa4}, - // Block 0x4, offset 0x25 - {value: 0x0000, lo: 0x0f}, - {value: 0xa000, lo: 0x83, hi: 0x83}, - {value: 0xa000, lo: 0x87, hi: 0x87}, - {value: 0xa000, lo: 0x8b, hi: 0x8b}, - {value: 0xa000, lo: 0x8d, hi: 0x8d}, - {value: 0x37a8, lo: 0x90, hi: 0x90}, - {value: 0x37b4, lo: 0x91, hi: 0x91}, - {value: 0x37a2, lo: 0x93, hi: 0x93}, - {value: 0xa000, lo: 0x96, hi: 0x96}, - {value: 0x381a, lo: 0x97, hi: 0x97}, - {value: 0x37e4, lo: 0x9c, hi: 0x9c}, - {value: 0x37cc, lo: 0x9d, hi: 0x9d}, - {value: 0x37f6, lo: 0x9e, hi: 0x9e}, - {value: 0xa000, lo: 0xb4, hi: 0xb5}, - {value: 0x3820, lo: 0xb6, hi: 0xb6}, - {value: 0x3826, lo: 0xb7, hi: 0xb7}, - // Block 0x5, offset 0x35 - {value: 0x0000, lo: 0x01}, - {value: 0x8132, lo: 0x83, hi: 0x87}, - // Block 0x6, offset 0x37 - {value: 0x0001, lo: 0x04}, - {value: 0x8113, lo: 0x81, hi: 0x82}, - {value: 0x8132, lo: 0x84, hi: 0x84}, - {value: 0x812d, lo: 0x85, hi: 0x85}, - {value: 0x810d, lo: 0x87, hi: 0x87}, - // Block 0x7, offset 0x3c - {value: 0x0000, lo: 0x0a}, - {value: 0x8132, lo: 0x90, hi: 0x97}, - {value: 0x8119, lo: 0x98, hi: 0x98}, - {value: 0x811a, lo: 0x99, hi: 0x99}, - {value: 0x811b, lo: 0x9a, hi: 0x9a}, - {value: 0x3844, lo: 0xa2, hi: 0xa2}, - {value: 0x384a, lo: 0xa3, hi: 0xa3}, - {value: 0x3856, lo: 0xa4, hi: 0xa4}, - {value: 0x3850, lo: 0xa5, hi: 0xa5}, - {value: 0x385c, lo: 0xa6, hi: 0xa6}, - {value: 0xa000, lo: 0xa7, hi: 0xa7}, - // Block 0x8, offset 0x47 - {value: 0x0000, lo: 0x0e}, - {value: 0x386e, lo: 0x80, hi: 0x80}, - {value: 0xa000, lo: 0x81, hi: 0x81}, - {value: 0x3862, lo: 0x82, hi: 0x82}, - {value: 0xa000, lo: 0x92, hi: 0x92}, - {value: 0x3868, lo: 0x93, hi: 0x93}, - {value: 0xa000, lo: 0x95, hi: 0x95}, - {value: 0x8132, lo: 0x96, hi: 0x9c}, - {value: 0x8132, lo: 0x9f, hi: 0xa2}, - {value: 0x812d, lo: 0xa3, hi: 0xa3}, - {value: 0x8132, lo: 0xa4, hi: 0xa4}, - {value: 0x8132, lo: 0xa7, hi: 0xa8}, - {value: 0x812d, lo: 0xaa, hi: 0xaa}, - {value: 0x8132, lo: 0xab, hi: 0xac}, - {value: 0x812d, lo: 0xad, hi: 0xad}, - // Block 0x9, offset 0x56 - {value: 0x0000, lo: 0x0c}, - {value: 0x811f, lo: 0x91, hi: 0x91}, - {value: 0x8132, lo: 0xb0, hi: 0xb0}, - {value: 0x812d, lo: 0xb1, hi: 0xb1}, - {value: 0x8132, lo: 0xb2, hi: 0xb3}, - {value: 0x812d, lo: 0xb4, hi: 0xb4}, - {value: 0x8132, lo: 0xb5, hi: 0xb6}, - {value: 0x812d, lo: 0xb7, hi: 0xb9}, - {value: 0x8132, lo: 0xba, hi: 0xba}, - {value: 0x812d, lo: 0xbb, hi: 0xbc}, - {value: 0x8132, lo: 0xbd, hi: 0xbd}, - {value: 0x812d, lo: 0xbe, hi: 0xbe}, - {value: 0x8132, lo: 0xbf, hi: 0xbf}, - // Block 0xa, offset 0x63 - {value: 0x0005, lo: 0x07}, - {value: 0x8132, lo: 0x80, hi: 0x80}, - {value: 0x8132, lo: 0x81, hi: 0x81}, - {value: 0x812d, lo: 0x82, hi: 0x83}, - {value: 0x812d, lo: 0x84, hi: 0x85}, - {value: 0x812d, lo: 0x86, hi: 0x87}, - {value: 0x812d, lo: 0x88, hi: 0x89}, - {value: 0x8132, lo: 0x8a, hi: 0x8a}, - // Block 0xb, offset 0x6b - {value: 0x0000, lo: 0x04}, - {value: 0x8132, lo: 0xab, hi: 0xb1}, - {value: 0x812d, lo: 0xb2, hi: 0xb2}, - {value: 0x8132, lo: 0xb3, hi: 0xb3}, - {value: 0x812d, lo: 0xbd, hi: 0xbd}, - // Block 0xc, offset 0x70 - {value: 0x0000, lo: 0x04}, - {value: 0x8132, lo: 0x96, hi: 0x99}, - {value: 0x8132, lo: 0x9b, hi: 0xa3}, - {value: 0x8132, lo: 0xa5, hi: 0xa7}, - {value: 0x8132, lo: 0xa9, hi: 0xad}, - // Block 0xd, offset 0x75 - {value: 0x0000, lo: 0x01}, - {value: 0x812d, lo: 0x99, hi: 0x9b}, - // Block 0xe, offset 0x77 - {value: 0x0000, lo: 0x07}, - {value: 0xa000, lo: 0xa8, hi: 0xa8}, - {value: 0x3edb, lo: 0xa9, hi: 0xa9}, - {value: 0xa000, lo: 0xb0, hi: 0xb0}, - {value: 0x3ee3, lo: 0xb1, hi: 0xb1}, - {value: 0xa000, lo: 0xb3, hi: 0xb3}, - {value: 0x3eeb, lo: 0xb4, hi: 0xb4}, - {value: 0x9902, lo: 0xbc, hi: 0xbc}, - // Block 0xf, offset 0x7f - {value: 0x0008, lo: 0x06}, - {value: 0x8104, lo: 0x8d, hi: 0x8d}, - {value: 0x8132, lo: 0x91, hi: 0x91}, - {value: 0x812d, lo: 0x92, hi: 0x92}, - {value: 0x8132, lo: 0x93, hi: 0x93}, - {value: 0x8132, lo: 0x94, hi: 0x94}, - {value: 0x451f, lo: 0x98, hi: 0x9f}, - // Block 0x10, offset 0x86 - {value: 0x0000, lo: 0x02}, - {value: 0x8102, lo: 0xbc, hi: 0xbc}, - {value: 0x9900, lo: 0xbe, hi: 0xbe}, - // Block 0x11, offset 0x89 - {value: 0x0008, lo: 0x07}, - {value: 0xa000, lo: 0x87, hi: 0x87}, - {value: 0x2ca1, lo: 0x8b, hi: 0x8c}, - {value: 0x8104, lo: 0x8d, hi: 0x8d}, - {value: 0x9900, lo: 0x97, hi: 0x97}, - {value: 0x455f, lo: 0x9c, hi: 0x9d}, - {value: 0x456f, lo: 0x9f, hi: 0x9f}, - {value: 0x8132, lo: 0xbe, hi: 0xbe}, - // Block 0x12, offset 0x91 - {value: 0x0000, lo: 0x03}, - {value: 0x4597, lo: 0xb3, hi: 0xb3}, - {value: 0x459f, lo: 0xb6, hi: 0xb6}, - {value: 0x8102, lo: 0xbc, hi: 0xbc}, - // Block 0x13, offset 0x95 - {value: 0x0008, lo: 0x03}, - {value: 0x8104, lo: 0x8d, hi: 0x8d}, - {value: 0x4577, lo: 0x99, hi: 0x9b}, - {value: 0x458f, lo: 0x9e, hi: 0x9e}, - // Block 0x14, offset 0x99 - {value: 0x0000, lo: 0x01}, - {value: 0x8102, lo: 0xbc, hi: 0xbc}, - // Block 0x15, offset 0x9b - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0x8d, hi: 0x8d}, - // Block 0x16, offset 0x9d - {value: 0x0000, lo: 0x08}, - {value: 0xa000, lo: 0x87, hi: 0x87}, - {value: 0x2cb9, lo: 0x88, hi: 0x88}, - {value: 0x2cb1, lo: 0x8b, hi: 0x8b}, - {value: 0x2cc1, lo: 0x8c, hi: 0x8c}, - {value: 0x8104, lo: 0x8d, hi: 0x8d}, - {value: 0x9900, lo: 0x96, hi: 0x97}, - {value: 0x45a7, lo: 0x9c, hi: 0x9c}, - {value: 0x45af, lo: 0x9d, hi: 0x9d}, - // Block 0x17, offset 0xa6 - {value: 0x0000, lo: 0x03}, - {value: 0xa000, lo: 0x92, hi: 0x92}, - {value: 0x2cc9, lo: 0x94, hi: 0x94}, - {value: 0x9900, lo: 0xbe, hi: 0xbe}, - // Block 0x18, offset 0xaa - {value: 0x0000, lo: 0x06}, - {value: 0xa000, lo: 0x86, hi: 0x87}, - {value: 0x2cd1, lo: 0x8a, hi: 0x8a}, - {value: 0x2ce1, lo: 0x8b, hi: 0x8b}, - {value: 0x2cd9, lo: 0x8c, hi: 0x8c}, - {value: 0x8104, lo: 0x8d, hi: 0x8d}, - {value: 0x9900, lo: 0x97, hi: 0x97}, - // Block 0x19, offset 0xb1 - {value: 0x1801, lo: 0x04}, - {value: 0xa000, lo: 0x86, hi: 0x86}, - {value: 0x3ef3, lo: 0x88, hi: 0x88}, - {value: 0x8104, lo: 0x8d, hi: 0x8d}, - {value: 0x8120, lo: 0x95, hi: 0x96}, - // Block 0x1a, offset 0xb6 - {value: 0x0000, lo: 0x02}, - {value: 0x8102, lo: 0xbc, hi: 0xbc}, - {value: 0xa000, lo: 0xbf, hi: 0xbf}, - // Block 0x1b, offset 0xb9 - {value: 0x0000, lo: 0x09}, - {value: 0x2ce9, lo: 0x80, hi: 0x80}, - {value: 0x9900, lo: 0x82, hi: 0x82}, - {value: 0xa000, lo: 0x86, hi: 0x86}, - {value: 0x2cf1, lo: 0x87, hi: 0x87}, - {value: 0x2cf9, lo: 0x88, hi: 0x88}, - {value: 0x2f53, lo: 0x8a, hi: 0x8a}, - {value: 0x2ddb, lo: 0x8b, hi: 0x8b}, - {value: 0x8104, lo: 0x8d, hi: 0x8d}, - {value: 0x9900, lo: 0x95, hi: 0x96}, - // Block 0x1c, offset 0xc3 - {value: 0x0000, lo: 0x02}, - {value: 0x8104, lo: 0xbb, hi: 0xbc}, - {value: 0x9900, lo: 0xbe, hi: 0xbe}, - // Block 0x1d, offset 0xc6 - {value: 0x0000, lo: 0x06}, - {value: 0xa000, lo: 0x86, hi: 0x87}, - {value: 0x2d01, lo: 0x8a, hi: 0x8a}, - {value: 0x2d11, lo: 0x8b, hi: 0x8b}, - {value: 0x2d09, lo: 0x8c, hi: 0x8c}, - {value: 0x8104, lo: 0x8d, hi: 0x8d}, - {value: 0x9900, lo: 0x97, hi: 0x97}, - // Block 0x1e, offset 0xcd - {value: 0x6be7, lo: 0x07}, - {value: 0x9904, lo: 0x8a, hi: 0x8a}, - {value: 0x9900, lo: 0x8f, hi: 0x8f}, - {value: 0xa000, lo: 0x99, hi: 0x99}, - {value: 0x3efb, lo: 0x9a, hi: 0x9a}, - {value: 0x2f5b, lo: 0x9c, hi: 0x9c}, - {value: 0x2de6, lo: 0x9d, hi: 0x9d}, - {value: 0x2d19, lo: 0x9e, hi: 0x9f}, - // Block 0x1f, offset 0xd5 - {value: 0x0000, lo: 0x03}, - {value: 0x2624, lo: 0xb3, hi: 0xb3}, - {value: 0x8122, lo: 0xb8, hi: 0xb9}, - {value: 0x8104, lo: 0xba, hi: 0xba}, - // Block 0x20, offset 0xd9 - {value: 0x0000, lo: 0x01}, - {value: 0x8123, lo: 0x88, hi: 0x8b}, - // Block 0x21, offset 0xdb - {value: 0x0000, lo: 0x03}, - {value: 0x2639, lo: 0xb3, hi: 0xb3}, - {value: 0x8124, lo: 0xb8, hi: 0xb9}, - {value: 0x8104, lo: 0xba, hi: 0xba}, - // Block 0x22, offset 0xdf - {value: 0x0000, lo: 0x03}, - {value: 0x8125, lo: 0x88, hi: 0x8b}, - {value: 0x262b, lo: 0x9c, hi: 0x9c}, - {value: 0x2632, lo: 0x9d, hi: 0x9d}, - // Block 0x23, offset 0xe3 - {value: 0x0000, lo: 0x05}, - {value: 0x030b, lo: 0x8c, hi: 0x8c}, - {value: 0x812d, lo: 0x98, hi: 0x99}, - {value: 0x812d, lo: 0xb5, hi: 0xb5}, - {value: 0x812d, lo: 0xb7, hi: 0xb7}, - {value: 0x812b, lo: 0xb9, hi: 0xb9}, - // Block 0x24, offset 0xe9 - {value: 0x0000, lo: 0x10}, - {value: 0x2647, lo: 0x83, hi: 0x83}, - {value: 0x264e, lo: 0x8d, hi: 0x8d}, - {value: 0x2655, lo: 0x92, hi: 0x92}, - {value: 0x265c, lo: 0x97, hi: 0x97}, - {value: 0x2663, lo: 0x9c, hi: 0x9c}, - {value: 0x2640, lo: 0xa9, hi: 0xa9}, - {value: 0x8126, lo: 0xb1, hi: 0xb1}, - {value: 0x8127, lo: 0xb2, hi: 0xb2}, - {value: 0x4a87, lo: 0xb3, hi: 0xb3}, - {value: 0x8128, lo: 0xb4, hi: 0xb4}, - {value: 0x4a90, lo: 0xb5, hi: 0xb5}, - {value: 0x45b7, lo: 0xb6, hi: 0xb6}, - {value: 0x45f7, lo: 0xb7, hi: 0xb7}, - {value: 0x45bf, lo: 0xb8, hi: 0xb8}, - {value: 0x4602, lo: 0xb9, hi: 0xb9}, - {value: 0x8127, lo: 0xba, hi: 0xbd}, - // Block 0x25, offset 0xfa - {value: 0x0000, lo: 0x0b}, - {value: 0x8127, lo: 0x80, hi: 0x80}, - {value: 0x4a99, lo: 0x81, hi: 0x81}, - {value: 0x8132, lo: 0x82, hi: 0x83}, - {value: 0x8104, lo: 0x84, hi: 0x84}, - {value: 0x8132, lo: 0x86, hi: 0x87}, - {value: 0x2671, lo: 0x93, hi: 0x93}, - {value: 0x2678, lo: 0x9d, hi: 0x9d}, - {value: 0x267f, lo: 0xa2, hi: 0xa2}, - {value: 0x2686, lo: 0xa7, hi: 0xa7}, - {value: 0x268d, lo: 0xac, hi: 0xac}, - {value: 0x266a, lo: 0xb9, hi: 0xb9}, - // Block 0x26, offset 0x106 - {value: 0x0000, lo: 0x01}, - {value: 0x812d, lo: 0x86, hi: 0x86}, - // Block 0x27, offset 0x108 - {value: 0x0000, lo: 0x05}, - {value: 0xa000, lo: 0xa5, hi: 0xa5}, - {value: 0x2d21, lo: 0xa6, hi: 0xa6}, - {value: 0x9900, lo: 0xae, hi: 0xae}, - {value: 0x8102, lo: 0xb7, hi: 0xb7}, - {value: 0x8104, lo: 0xb9, hi: 0xba}, - // Block 0x28, offset 0x10e - {value: 0x0000, lo: 0x01}, - {value: 0x812d, lo: 0x8d, hi: 0x8d}, - // Block 0x29, offset 0x110 - {value: 0x0000, lo: 0x01}, - {value: 0x030f, lo: 0xbc, hi: 0xbc}, - // Block 0x2a, offset 0x112 - {value: 0x0000, lo: 0x01}, - {value: 0xa000, lo: 0x80, hi: 0x92}, - // Block 0x2b, offset 0x114 - {value: 0x0000, lo: 0x01}, - {value: 0xb900, lo: 0xa1, hi: 0xb5}, - // Block 0x2c, offset 0x116 - {value: 0x0000, lo: 0x01}, - {value: 0x9900, lo: 0xa8, hi: 0xbf}, - // Block 0x2d, offset 0x118 - {value: 0x0000, lo: 0x01}, - {value: 0x9900, lo: 0x80, hi: 0x82}, - // Block 0x2e, offset 0x11a - {value: 0x0000, lo: 0x01}, - {value: 0x8132, lo: 0x9d, hi: 0x9f}, - // Block 0x2f, offset 0x11c - {value: 0x0000, lo: 0x02}, - {value: 0x8104, lo: 0x94, hi: 0x94}, - {value: 0x8104, lo: 0xb4, hi: 0xb4}, - // Block 0x30, offset 0x11f - {value: 0x0000, lo: 0x02}, - {value: 0x8104, lo: 0x92, hi: 0x92}, - {value: 0x8132, lo: 0x9d, hi: 0x9d}, - // Block 0x31, offset 0x122 - {value: 0x0000, lo: 0x01}, - {value: 0x8131, lo: 0xa9, hi: 0xa9}, - // Block 0x32, offset 0x124 - {value: 0x0004, lo: 0x02}, - {value: 0x812e, lo: 0xb9, hi: 0xba}, - {value: 0x812d, lo: 0xbb, hi: 0xbb}, - // Block 0x33, offset 0x127 - {value: 0x0000, lo: 0x02}, - {value: 0x8132, lo: 0x97, hi: 0x97}, - {value: 0x812d, lo: 0x98, hi: 0x98}, - // Block 0x34, offset 0x12a - {value: 0x0000, lo: 0x03}, - {value: 0x8104, lo: 0xa0, hi: 0xa0}, - {value: 0x8132, lo: 0xb5, hi: 0xbc}, - {value: 0x812d, lo: 0xbf, hi: 0xbf}, - // Block 0x35, offset 0x12e - {value: 0x0000, lo: 0x04}, - {value: 0x8132, lo: 0xb0, hi: 0xb4}, - {value: 0x812d, lo: 0xb5, hi: 0xba}, - {value: 0x8132, lo: 0xbb, hi: 0xbc}, - {value: 0x812d, lo: 0xbd, hi: 0xbd}, - // Block 0x36, offset 0x133 - {value: 0x0000, lo: 0x08}, - {value: 0x2d69, lo: 0x80, hi: 0x80}, - {value: 0x2d71, lo: 0x81, hi: 0x81}, - {value: 0xa000, lo: 0x82, hi: 0x82}, - {value: 0x2d79, lo: 0x83, hi: 0x83}, - {value: 0x8104, lo: 0x84, hi: 0x84}, - {value: 0x8132, lo: 0xab, hi: 0xab}, - {value: 0x812d, lo: 0xac, hi: 0xac}, - {value: 0x8132, lo: 0xad, hi: 0xb3}, - // Block 0x37, offset 0x13c - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0xaa, hi: 0xab}, - // Block 0x38, offset 0x13e - {value: 0x0000, lo: 0x02}, - {value: 0x8102, lo: 0xa6, hi: 0xa6}, - {value: 0x8104, lo: 0xb2, hi: 0xb3}, - // Block 0x39, offset 0x141 - {value: 0x0000, lo: 0x01}, - {value: 0x8102, lo: 0xb7, hi: 0xb7}, - // Block 0x3a, offset 0x143 - {value: 0x0000, lo: 0x0a}, - {value: 0x8132, lo: 0x90, hi: 0x92}, - {value: 0x8101, lo: 0x94, hi: 0x94}, - {value: 0x812d, lo: 0x95, hi: 0x99}, - {value: 0x8132, lo: 0x9a, hi: 0x9b}, - {value: 0x812d, lo: 0x9c, hi: 0x9f}, - {value: 0x8132, lo: 0xa0, hi: 0xa0}, - {value: 0x8101, lo: 0xa2, hi: 0xa8}, - {value: 0x812d, lo: 0xad, hi: 0xad}, - {value: 0x8132, lo: 0xb4, hi: 0xb4}, - {value: 0x8132, lo: 0xb8, hi: 0xb9}, - // Block 0x3b, offset 0x14e - {value: 0x0002, lo: 0x0a}, - {value: 0x0043, lo: 0xac, hi: 0xac}, - {value: 0x00d1, lo: 0xad, hi: 0xad}, - {value: 0x0045, lo: 0xae, hi: 0xae}, - {value: 0x0049, lo: 0xb0, hi: 0xb1}, - {value: 0x00e6, lo: 0xb2, hi: 0xb2}, - {value: 0x004f, lo: 0xb3, hi: 0xba}, - {value: 0x005f, lo: 0xbc, hi: 0xbc}, - {value: 0x00ef, lo: 0xbd, hi: 0xbd}, - {value: 0x0061, lo: 0xbe, hi: 0xbe}, - {value: 0x0065, lo: 0xbf, hi: 0xbf}, - // Block 0x3c, offset 0x159 - {value: 0x0000, lo: 0x0d}, - {value: 0x0001, lo: 0x80, hi: 0x8a}, - {value: 0x043b, lo: 0x91, hi: 0x91}, - {value: 0x429e, lo: 0x97, hi: 0x97}, - {value: 0x001d, lo: 0xa4, hi: 0xa4}, - {value: 0x1873, lo: 0xa5, hi: 0xa5}, - {value: 0x1b5f, lo: 0xa6, hi: 0xa6}, - {value: 0x0001, lo: 0xaf, hi: 0xaf}, - {value: 0x2694, lo: 0xb3, hi: 0xb3}, - {value: 0x2801, lo: 0xb4, hi: 0xb4}, - {value: 0x269b, lo: 0xb6, hi: 0xb6}, - {value: 0x280b, lo: 0xb7, hi: 0xb7}, - {value: 0x186d, lo: 0xbc, hi: 0xbc}, - {value: 0x426c, lo: 0xbe, hi: 0xbe}, - // Block 0x3d, offset 0x167 - {value: 0x0002, lo: 0x0d}, - {value: 0x1933, lo: 0x87, hi: 0x87}, - {value: 0x1930, lo: 0x88, hi: 0x88}, - {value: 0x1870, lo: 0x89, hi: 0x89}, - {value: 0x2991, lo: 0x97, hi: 0x97}, - {value: 0x0001, lo: 0x9f, hi: 0x9f}, - {value: 0x0021, lo: 0xb0, hi: 0xb0}, - {value: 0x0093, lo: 0xb1, hi: 0xb1}, - {value: 0x0029, lo: 0xb4, hi: 0xb9}, - {value: 0x0017, lo: 0xba, hi: 0xba}, - {value: 0x0467, lo: 0xbb, hi: 0xbb}, - {value: 0x003b, lo: 0xbc, hi: 0xbc}, - {value: 0x0011, lo: 0xbd, hi: 0xbe}, - {value: 0x009d, lo: 0xbf, hi: 0xbf}, - // Block 0x3e, offset 0x175 - {value: 0x0002, lo: 0x0f}, - {value: 0x0021, lo: 0x80, hi: 0x89}, - {value: 0x0017, lo: 0x8a, hi: 0x8a}, - {value: 0x0467, lo: 0x8b, hi: 0x8b}, - {value: 0x003b, lo: 0x8c, hi: 0x8c}, - {value: 0x0011, lo: 0x8d, hi: 0x8e}, - {value: 0x0083, lo: 0x90, hi: 0x90}, - {value: 0x008b, lo: 0x91, hi: 0x91}, - {value: 0x009f, lo: 0x92, hi: 0x92}, - {value: 0x00b1, lo: 0x93, hi: 0x93}, - {value: 0x0104, lo: 0x94, hi: 0x94}, - {value: 0x0091, lo: 0x95, hi: 0x95}, - {value: 0x0097, lo: 0x96, hi: 0x99}, - {value: 0x00a1, lo: 0x9a, hi: 0x9a}, - {value: 0x00a7, lo: 0x9b, hi: 0x9c}, - {value: 0x199c, lo: 0xa8, hi: 0xa8}, - // Block 0x3f, offset 0x185 - {value: 0x0000, lo: 0x0d}, - {value: 0x8132, lo: 0x90, hi: 0x91}, - {value: 0x8101, lo: 0x92, hi: 0x93}, - {value: 0x8132, lo: 0x94, hi: 0x97}, - {value: 0x8101, lo: 0x98, hi: 0x9a}, - {value: 0x8132, lo: 0x9b, hi: 0x9c}, - {value: 0x8132, lo: 0xa1, hi: 0xa1}, - {value: 0x8101, lo: 0xa5, hi: 0xa6}, - {value: 0x8132, lo: 0xa7, hi: 0xa7}, - {value: 0x812d, lo: 0xa8, hi: 0xa8}, - {value: 0x8132, lo: 0xa9, hi: 0xa9}, - {value: 0x8101, lo: 0xaa, hi: 0xab}, - {value: 0x812d, lo: 0xac, hi: 0xaf}, - {value: 0x8132, lo: 0xb0, hi: 0xb0}, - // Block 0x40, offset 0x193 - {value: 0x0007, lo: 0x06}, - {value: 0x2183, lo: 0x89, hi: 0x89}, - {value: 0xa000, lo: 0x90, hi: 0x90}, - {value: 0xa000, lo: 0x92, hi: 0x92}, - {value: 0xa000, lo: 0x94, hi: 0x94}, - {value: 0x3bbc, lo: 0x9a, hi: 0x9b}, - {value: 0x3bca, lo: 0xae, hi: 0xae}, - // Block 0x41, offset 0x19a - {value: 0x000e, lo: 0x05}, - {value: 0x3bd1, lo: 0x8d, hi: 0x8e}, - {value: 0x3bd8, lo: 0x8f, hi: 0x8f}, - {value: 0xa000, lo: 0x90, hi: 0x90}, - {value: 0xa000, lo: 0x92, hi: 0x92}, - {value: 0xa000, lo: 0x94, hi: 0x94}, - // Block 0x42, offset 0x1a0 - {value: 0x0173, lo: 0x0e}, - {value: 0xa000, lo: 0x83, hi: 0x83}, - {value: 0x3be6, lo: 0x84, hi: 0x84}, - {value: 0xa000, lo: 0x88, hi: 0x88}, - {value: 0x3bed, lo: 0x89, hi: 0x89}, - {value: 0xa000, lo: 0x8b, hi: 0x8b}, - {value: 0x3bf4, lo: 0x8c, hi: 0x8c}, - {value: 0xa000, lo: 0xa3, hi: 0xa3}, - {value: 0x3bfb, lo: 0xa4, hi: 0xa4}, - {value: 0xa000, lo: 0xa5, hi: 0xa5}, - {value: 0x3c02, lo: 0xa6, hi: 0xa6}, - {value: 0x26a2, lo: 0xac, hi: 0xad}, - {value: 0x26a9, lo: 0xaf, hi: 0xaf}, - {value: 0x281f, lo: 0xb0, hi: 0xb0}, - {value: 0xa000, lo: 0xbc, hi: 0xbc}, - // Block 0x43, offset 0x1af - {value: 0x0007, lo: 0x03}, - {value: 0x3c6b, lo: 0xa0, hi: 0xa1}, - {value: 0x3c95, lo: 0xa2, hi: 0xa3}, - {value: 0x3cbf, lo: 0xaa, hi: 0xad}, - // Block 0x44, offset 0x1b3 - {value: 0x0004, lo: 0x01}, - {value: 0x048b, lo: 0xa9, hi: 0xaa}, - // Block 0x45, offset 0x1b5 - {value: 0x0002, lo: 0x03}, - {value: 0x0057, lo: 0x80, hi: 0x8f}, - {value: 0x0083, lo: 0x90, hi: 0xa9}, - {value: 0x0021, lo: 0xaa, hi: 0xaa}, - // Block 0x46, offset 0x1b9 - {value: 0x0000, lo: 0x01}, - {value: 0x299e, lo: 0x8c, hi: 0x8c}, - // Block 0x47, offset 0x1bb - {value: 0x0266, lo: 0x02}, - {value: 0x1b8f, lo: 0xb4, hi: 0xb4}, - {value: 0x192d, lo: 0xb5, hi: 0xb6}, - // Block 0x48, offset 0x1be - {value: 0x0000, lo: 0x01}, - {value: 0x44e0, lo: 0x9c, hi: 0x9c}, - // Block 0x49, offset 0x1c0 - {value: 0x0000, lo: 0x02}, - {value: 0x0095, lo: 0xbc, hi: 0xbc}, - {value: 0x006d, lo: 0xbd, hi: 0xbd}, - // Block 0x4a, offset 0x1c3 - {value: 0x0000, lo: 0x01}, - {value: 0x8132, lo: 0xaf, hi: 0xb1}, - // Block 0x4b, offset 0x1c5 - {value: 0x0000, lo: 0x02}, - {value: 0x047f, lo: 0xaf, hi: 0xaf}, - {value: 0x8104, lo: 0xbf, hi: 0xbf}, - // Block 0x4c, offset 0x1c8 - {value: 0x0000, lo: 0x01}, - {value: 0x8132, lo: 0xa0, hi: 0xbf}, - // Block 0x4d, offset 0x1ca - {value: 0x0000, lo: 0x01}, - {value: 0x0dc3, lo: 0x9f, hi: 0x9f}, - // Block 0x4e, offset 0x1cc - {value: 0x0000, lo: 0x01}, - {value: 0x162f, lo: 0xb3, hi: 0xb3}, - // Block 0x4f, offset 0x1ce - {value: 0x0004, lo: 0x0b}, - {value: 0x1597, lo: 0x80, hi: 0x82}, - {value: 0x15af, lo: 0x83, hi: 0x83}, - {value: 0x15c7, lo: 0x84, hi: 0x85}, - {value: 0x15d7, lo: 0x86, hi: 0x89}, - {value: 0x15eb, lo: 0x8a, hi: 0x8c}, - {value: 0x15ff, lo: 0x8d, hi: 0x8d}, - {value: 0x1607, lo: 0x8e, hi: 0x8e}, - {value: 0x160f, lo: 0x8f, hi: 0x90}, - {value: 0x161b, lo: 0x91, hi: 0x93}, - {value: 0x162b, lo: 0x94, hi: 0x94}, - {value: 0x1633, lo: 0x95, hi: 0x95}, - // Block 0x50, offset 0x1da - {value: 0x0004, lo: 0x09}, - {value: 0x0001, lo: 0x80, hi: 0x80}, - {value: 0x812c, lo: 0xaa, hi: 0xaa}, - {value: 0x8131, lo: 0xab, hi: 0xab}, - {value: 0x8133, lo: 0xac, hi: 0xac}, - {value: 0x812e, lo: 0xad, hi: 0xad}, - {value: 0x812f, lo: 0xae, hi: 0xae}, - {value: 0x812f, lo: 0xaf, hi: 0xaf}, - {value: 0x04b3, lo: 0xb6, hi: 0xb6}, - {value: 0x0887, lo: 0xb8, hi: 0xba}, - // Block 0x51, offset 0x1e4 - {value: 0x0006, lo: 0x09}, - {value: 0x0313, lo: 0xb1, hi: 0xb1}, - {value: 0x0317, lo: 0xb2, hi: 0xb2}, - {value: 0x4a3e, lo: 0xb3, hi: 0xb3}, - {value: 0x031b, lo: 0xb4, hi: 0xb4}, - {value: 0x4a44, lo: 0xb5, hi: 0xb6}, - {value: 0x031f, lo: 0xb7, hi: 0xb7}, - {value: 0x0323, lo: 0xb8, hi: 0xb8}, - {value: 0x0327, lo: 0xb9, hi: 0xb9}, - {value: 0x4a50, lo: 0xba, hi: 0xbf}, - // Block 0x52, offset 0x1ee - {value: 0x0000, lo: 0x02}, - {value: 0x8132, lo: 0xaf, hi: 0xaf}, - {value: 0x8132, lo: 0xb4, hi: 0xbd}, - // Block 0x53, offset 0x1f1 - {value: 0x0000, lo: 0x03}, - {value: 0x020f, lo: 0x9c, hi: 0x9c}, - {value: 0x0212, lo: 0x9d, hi: 0x9d}, - {value: 0x8132, lo: 0x9e, hi: 0x9f}, - // Block 0x54, offset 0x1f5 - {value: 0x0000, lo: 0x01}, - {value: 0x8132, lo: 0xb0, hi: 0xb1}, - // Block 0x55, offset 0x1f7 - {value: 0x0000, lo: 0x01}, - {value: 0x163b, lo: 0xb0, hi: 0xb0}, - // Block 0x56, offset 0x1f9 - {value: 0x000c, lo: 0x01}, - {value: 0x00d7, lo: 0xb8, hi: 0xb9}, - // Block 0x57, offset 0x1fb - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0x86, hi: 0x86}, - // Block 0x58, offset 0x1fd - {value: 0x0000, lo: 0x02}, - {value: 0x8104, lo: 0x84, hi: 0x84}, - {value: 0x8132, lo: 0xa0, hi: 0xb1}, - // Block 0x59, offset 0x200 - {value: 0x0000, lo: 0x01}, - {value: 0x812d, lo: 0xab, hi: 0xad}, - // Block 0x5a, offset 0x202 - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0x93, hi: 0x93}, - // Block 0x5b, offset 0x204 - {value: 0x0000, lo: 0x01}, - {value: 0x8102, lo: 0xb3, hi: 0xb3}, - // Block 0x5c, offset 0x206 - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0x80, hi: 0x80}, - // Block 0x5d, offset 0x208 - {value: 0x0000, lo: 0x05}, - {value: 0x8132, lo: 0xb0, hi: 0xb0}, - {value: 0x8132, lo: 0xb2, hi: 0xb3}, - {value: 0x812d, lo: 0xb4, hi: 0xb4}, - {value: 0x8132, lo: 0xb7, hi: 0xb8}, - {value: 0x8132, lo: 0xbe, hi: 0xbf}, - // Block 0x5e, offset 0x20e - {value: 0x0000, lo: 0x02}, - {value: 0x8132, lo: 0x81, hi: 0x81}, - {value: 0x8104, lo: 0xb6, hi: 0xb6}, - // Block 0x5f, offset 0x211 - {value: 0x0008, lo: 0x03}, - {value: 0x1637, lo: 0x9c, hi: 0x9d}, - {value: 0x0125, lo: 0x9e, hi: 0x9e}, - {value: 0x1643, lo: 0x9f, hi: 0x9f}, - // Block 0x60, offset 0x215 - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0xad, hi: 0xad}, - // Block 0x61, offset 0x217 - {value: 0x0000, lo: 0x06}, - {value: 0xe500, lo: 0x80, hi: 0x80}, - {value: 0xc600, lo: 0x81, hi: 0x9b}, - {value: 0xe500, lo: 0x9c, hi: 0x9c}, - {value: 0xc600, lo: 0x9d, hi: 0xb7}, - {value: 0xe500, lo: 0xb8, hi: 0xb8}, - {value: 0xc600, lo: 0xb9, hi: 0xbf}, - // Block 0x62, offset 0x21e - {value: 0x0000, lo: 0x05}, - {value: 0xc600, lo: 0x80, hi: 0x93}, - {value: 0xe500, lo: 0x94, hi: 0x94}, - {value: 0xc600, lo: 0x95, hi: 0xaf}, - {value: 0xe500, lo: 0xb0, hi: 0xb0}, - {value: 0xc600, lo: 0xb1, hi: 0xbf}, - // Block 0x63, offset 0x224 - {value: 0x0000, lo: 0x05}, - {value: 0xc600, lo: 0x80, hi: 0x8b}, - {value: 0xe500, lo: 0x8c, hi: 0x8c}, - {value: 0xc600, lo: 0x8d, hi: 0xa7}, - {value: 0xe500, lo: 0xa8, hi: 0xa8}, - {value: 0xc600, lo: 0xa9, hi: 0xbf}, - // Block 0x64, offset 0x22a - {value: 0x0000, lo: 0x07}, - {value: 0xc600, lo: 0x80, hi: 0x83}, - {value: 0xe500, lo: 0x84, hi: 0x84}, - {value: 0xc600, lo: 0x85, hi: 0x9f}, - {value: 0xe500, lo: 0xa0, hi: 0xa0}, - {value: 0xc600, lo: 0xa1, hi: 0xbb}, - {value: 0xe500, lo: 0xbc, hi: 0xbc}, - {value: 0xc600, lo: 0xbd, hi: 0xbf}, - // Block 0x65, offset 0x232 - {value: 0x0000, lo: 0x05}, - {value: 0xc600, lo: 0x80, hi: 0x97}, - {value: 0xe500, lo: 0x98, hi: 0x98}, - {value: 0xc600, lo: 0x99, hi: 0xb3}, - {value: 0xe500, lo: 0xb4, hi: 0xb4}, - {value: 0xc600, lo: 0xb5, hi: 0xbf}, - // Block 0x66, offset 0x238 - {value: 0x0000, lo: 0x05}, - {value: 0xc600, lo: 0x80, hi: 0x8f}, - {value: 0xe500, lo: 0x90, hi: 0x90}, - {value: 0xc600, lo: 0x91, hi: 0xab}, - {value: 0xe500, lo: 0xac, hi: 0xac}, - {value: 0xc600, lo: 0xad, hi: 0xbf}, - // Block 0x67, offset 0x23e - {value: 0x0000, lo: 0x05}, - {value: 0xc600, lo: 0x80, hi: 0x87}, - {value: 0xe500, lo: 0x88, hi: 0x88}, - {value: 0xc600, lo: 0x89, hi: 0xa3}, - {value: 0xe500, lo: 0xa4, hi: 0xa4}, - {value: 0xc600, lo: 0xa5, hi: 0xbf}, - // Block 0x68, offset 0x244 - {value: 0x0000, lo: 0x03}, - {value: 0xc600, lo: 0x80, hi: 0x87}, - {value: 0xe500, lo: 0x88, hi: 0x88}, - {value: 0xc600, lo: 0x89, hi: 0xa3}, - // Block 0x69, offset 0x248 - {value: 0x0002, lo: 0x01}, - {value: 0x0003, lo: 0x81, hi: 0xbf}, - // Block 0x6a, offset 0x24a - {value: 0x0000, lo: 0x01}, - {value: 0x812d, lo: 0xbd, hi: 0xbd}, - // Block 0x6b, offset 0x24c - {value: 0x0000, lo: 0x01}, - {value: 0x812d, lo: 0xa0, hi: 0xa0}, - // Block 0x6c, offset 0x24e - {value: 0x0000, lo: 0x01}, - {value: 0x8132, lo: 0xb6, hi: 0xba}, - // Block 0x6d, offset 0x250 - {value: 0x002c, lo: 0x05}, - {value: 0x812d, lo: 0x8d, hi: 0x8d}, - {value: 0x8132, lo: 0x8f, hi: 0x8f}, - {value: 0x8132, lo: 0xb8, hi: 0xb8}, - {value: 0x8101, lo: 0xb9, hi: 0xba}, - {value: 0x8104, lo: 0xbf, hi: 0xbf}, - // Block 0x6e, offset 0x256 - {value: 0x0000, lo: 0x02}, - {value: 0x8132, lo: 0xa5, hi: 0xa5}, - {value: 0x812d, lo: 0xa6, hi: 0xa6}, - // Block 0x6f, offset 0x259 - {value: 0x0000, lo: 0x01}, - {value: 0x8132, lo: 0xa4, hi: 0xa7}, - // Block 0x70, offset 0x25b - {value: 0x0000, lo: 0x05}, - {value: 0x812d, lo: 0x86, hi: 0x87}, - {value: 0x8132, lo: 0x88, hi: 0x8a}, - {value: 0x812d, lo: 0x8b, hi: 0x8b}, - {value: 0x8132, lo: 0x8c, hi: 0x8c}, - {value: 0x812d, lo: 0x8d, hi: 0x90}, - // Block 0x71, offset 0x261 - {value: 0x0000, lo: 0x02}, - {value: 0x8104, lo: 0x86, hi: 0x86}, - {value: 0x8104, lo: 0xbf, hi: 0xbf}, - // Block 0x72, offset 0x264 - {value: 0x17fe, lo: 0x07}, - {value: 0xa000, lo: 0x99, hi: 0x99}, - {value: 0x423b, lo: 0x9a, hi: 0x9a}, - {value: 0xa000, lo: 0x9b, hi: 0x9b}, - {value: 0x4245, lo: 0x9c, hi: 0x9c}, - {value: 0xa000, lo: 0xa5, hi: 0xa5}, - {value: 0x424f, lo: 0xab, hi: 0xab}, - {value: 0x8104, lo: 0xb9, hi: 0xba}, - // Block 0x73, offset 0x26c - {value: 0x0000, lo: 0x06}, - {value: 0x8132, lo: 0x80, hi: 0x82}, - {value: 0x9900, lo: 0xa7, hi: 0xa7}, - {value: 0x2d81, lo: 0xae, hi: 0xae}, - {value: 0x2d8b, lo: 0xaf, hi: 0xaf}, - {value: 0xa000, lo: 0xb1, hi: 0xb2}, - {value: 0x8104, lo: 0xb3, hi: 0xb4}, - // Block 0x74, offset 0x273 - {value: 0x0000, lo: 0x02}, - {value: 0x8104, lo: 0x80, hi: 0x80}, - {value: 0x8102, lo: 0x8a, hi: 0x8a}, - // Block 0x75, offset 0x276 - {value: 0x0000, lo: 0x02}, - {value: 0x8104, lo: 0xb5, hi: 0xb5}, - {value: 0x8102, lo: 0xb6, hi: 0xb6}, - // Block 0x76, offset 0x279 - {value: 0x0002, lo: 0x01}, - {value: 0x8102, lo: 0xa9, hi: 0xaa}, - // Block 0x77, offset 0x27b - {value: 0x0000, lo: 0x02}, - {value: 0x8102, lo: 0xbb, hi: 0xbc}, - {value: 0x9900, lo: 0xbe, hi: 0xbe}, - // Block 0x78, offset 0x27e - {value: 0x0000, lo: 0x07}, - {value: 0xa000, lo: 0x87, hi: 0x87}, - {value: 0x2d95, lo: 0x8b, hi: 0x8b}, - {value: 0x2d9f, lo: 0x8c, hi: 0x8c}, - {value: 0x8104, lo: 0x8d, hi: 0x8d}, - {value: 0x9900, lo: 0x97, hi: 0x97}, - {value: 0x8132, lo: 0xa6, hi: 0xac}, - {value: 0x8132, lo: 0xb0, hi: 0xb4}, - // Block 0x79, offset 0x286 - {value: 0x0000, lo: 0x03}, - {value: 0x8104, lo: 0x82, hi: 0x82}, - {value: 0x8102, lo: 0x86, hi: 0x86}, - {value: 0x8132, lo: 0x9e, hi: 0x9e}, - // Block 0x7a, offset 0x28a - {value: 0x6b57, lo: 0x06}, - {value: 0x9900, lo: 0xb0, hi: 0xb0}, - {value: 0xa000, lo: 0xb9, hi: 0xb9}, - {value: 0x9900, lo: 0xba, hi: 0xba}, - {value: 0x2db3, lo: 0xbb, hi: 0xbb}, - {value: 0x2da9, lo: 0xbc, hi: 0xbd}, - {value: 0x2dbd, lo: 0xbe, hi: 0xbe}, - // Block 0x7b, offset 0x291 - {value: 0x0000, lo: 0x02}, - {value: 0x8104, lo: 0x82, hi: 0x82}, - {value: 0x8102, lo: 0x83, hi: 0x83}, - // Block 0x7c, offset 0x294 - {value: 0x0000, lo: 0x05}, - {value: 0x9900, lo: 0xaf, hi: 0xaf}, - {value: 0xa000, lo: 0xb8, hi: 0xb9}, - {value: 0x2dc7, lo: 0xba, hi: 0xba}, - {value: 0x2dd1, lo: 0xbb, hi: 0xbb}, - {value: 0x8104, lo: 0xbf, hi: 0xbf}, - // Block 0x7d, offset 0x29a - {value: 0x0000, lo: 0x01}, - {value: 0x8102, lo: 0x80, hi: 0x80}, - // Block 0x7e, offset 0x29c - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0xbf, hi: 0xbf}, - // Block 0x7f, offset 0x29e - {value: 0x0000, lo: 0x02}, - {value: 0x8104, lo: 0xb6, hi: 0xb6}, - {value: 0x8102, lo: 0xb7, hi: 0xb7}, - // Block 0x80, offset 0x2a1 - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0xab, hi: 0xab}, - // Block 0x81, offset 0x2a3 - {value: 0x0000, lo: 0x02}, - {value: 0x8104, lo: 0xb9, hi: 0xb9}, - {value: 0x8102, lo: 0xba, hi: 0xba}, - // Block 0x82, offset 0x2a6 - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0xa0, hi: 0xa0}, - // Block 0x83, offset 0x2a8 - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0xb4, hi: 0xb4}, - // Block 0x84, offset 0x2aa - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0x87, hi: 0x87}, - // Block 0x85, offset 0x2ac - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0x99, hi: 0x99}, - // Block 0x86, offset 0x2ae - {value: 0x0000, lo: 0x02}, - {value: 0x8102, lo: 0x82, hi: 0x82}, - {value: 0x8104, lo: 0x84, hi: 0x85}, - // Block 0x87, offset 0x2b1 - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0x97, hi: 0x97}, - // Block 0x88, offset 0x2b3 - {value: 0x0000, lo: 0x01}, - {value: 0x8101, lo: 0xb0, hi: 0xb4}, - // Block 0x89, offset 0x2b5 - {value: 0x0000, lo: 0x01}, - {value: 0x8132, lo: 0xb0, hi: 0xb6}, - // Block 0x8a, offset 0x2b7 - {value: 0x0000, lo: 0x01}, - {value: 0x8101, lo: 0x9e, hi: 0x9e}, - // Block 0x8b, offset 0x2b9 - {value: 0x0000, lo: 0x0c}, - {value: 0x45cf, lo: 0x9e, hi: 0x9e}, - {value: 0x45d9, lo: 0x9f, hi: 0x9f}, - {value: 0x460d, lo: 0xa0, hi: 0xa0}, - {value: 0x461b, lo: 0xa1, hi: 0xa1}, - {value: 0x4629, lo: 0xa2, hi: 0xa2}, - {value: 0x4637, lo: 0xa3, hi: 0xa3}, - {value: 0x4645, lo: 0xa4, hi: 0xa4}, - {value: 0x812b, lo: 0xa5, hi: 0xa6}, - {value: 0x8101, lo: 0xa7, hi: 0xa9}, - {value: 0x8130, lo: 0xad, hi: 0xad}, - {value: 0x812b, lo: 0xae, hi: 0xb2}, - {value: 0x812d, lo: 0xbb, hi: 0xbf}, - // Block 0x8c, offset 0x2c6 - {value: 0x0000, lo: 0x09}, - {value: 0x812d, lo: 0x80, hi: 0x82}, - {value: 0x8132, lo: 0x85, hi: 0x89}, - {value: 0x812d, lo: 0x8a, hi: 0x8b}, - {value: 0x8132, lo: 0xaa, hi: 0xad}, - {value: 0x45e3, lo: 0xbb, hi: 0xbb}, - {value: 0x45ed, lo: 0xbc, hi: 0xbc}, - {value: 0x4653, lo: 0xbd, hi: 0xbd}, - {value: 0x466f, lo: 0xbe, hi: 0xbe}, - {value: 0x4661, lo: 0xbf, hi: 0xbf}, - // Block 0x8d, offset 0x2d0 - {value: 0x0000, lo: 0x01}, - {value: 0x467d, lo: 0x80, hi: 0x80}, - // Block 0x8e, offset 0x2d2 - {value: 0x0000, lo: 0x01}, - {value: 0x8132, lo: 0x82, hi: 0x84}, - // Block 0x8f, offset 0x2d4 - {value: 0x0002, lo: 0x03}, - {value: 0x0043, lo: 0x80, hi: 0x99}, - {value: 0x0083, lo: 0x9a, hi: 0xb3}, - {value: 0x0043, lo: 0xb4, hi: 0xbf}, - // Block 0x90, offset 0x2d8 - {value: 0x0002, lo: 0x04}, - {value: 0x005b, lo: 0x80, hi: 0x8d}, - {value: 0x0083, lo: 0x8e, hi: 0x94}, - {value: 0x0093, lo: 0x96, hi: 0xa7}, - {value: 0x0043, lo: 0xa8, hi: 0xbf}, - // Block 0x91, offset 0x2dd - {value: 0x0002, lo: 0x0b}, - {value: 0x0073, lo: 0x80, hi: 0x81}, - {value: 0x0083, lo: 0x82, hi: 0x9b}, - {value: 0x0043, lo: 0x9c, hi: 0x9c}, - {value: 0x0047, lo: 0x9e, hi: 0x9f}, - {value: 0x004f, lo: 0xa2, hi: 0xa2}, - {value: 0x0055, lo: 0xa5, hi: 0xa6}, - {value: 0x005d, lo: 0xa9, hi: 0xac}, - {value: 0x0067, lo: 0xae, hi: 0xb5}, - {value: 0x0083, lo: 0xb6, hi: 0xb9}, - {value: 0x008d, lo: 0xbb, hi: 0xbb}, - {value: 0x0091, lo: 0xbd, hi: 0xbf}, - // Block 0x92, offset 0x2e9 - {value: 0x0002, lo: 0x04}, - {value: 0x0097, lo: 0x80, hi: 0x83}, - {value: 0x00a1, lo: 0x85, hi: 0x8f}, - {value: 0x0043, lo: 0x90, hi: 0xa9}, - {value: 0x0083, lo: 0xaa, hi: 0xbf}, - // Block 0x93, offset 0x2ee - {value: 0x0002, lo: 0x08}, - {value: 0x00af, lo: 0x80, hi: 0x83}, - {value: 0x0043, lo: 0x84, hi: 0x85}, - {value: 0x0049, lo: 0x87, hi: 0x8a}, - {value: 0x0055, lo: 0x8d, hi: 0x94}, - {value: 0x0067, lo: 0x96, hi: 0x9c}, - {value: 0x0083, lo: 0x9e, hi: 0xb7}, - {value: 0x0043, lo: 0xb8, hi: 0xb9}, - {value: 0x0049, lo: 0xbb, hi: 0xbe}, - // Block 0x94, offset 0x2f7 - {value: 0x0002, lo: 0x05}, - {value: 0x0053, lo: 0x80, hi: 0x84}, - {value: 0x005f, lo: 0x86, hi: 0x86}, - {value: 0x0067, lo: 0x8a, hi: 0x90}, - {value: 0x0083, lo: 0x92, hi: 0xab}, - {value: 0x0043, lo: 0xac, hi: 0xbf}, - // Block 0x95, offset 0x2fd - {value: 0x0002, lo: 0x04}, - {value: 0x006b, lo: 0x80, hi: 0x85}, - {value: 0x0083, lo: 0x86, hi: 0x9f}, - {value: 0x0043, lo: 0xa0, hi: 0xb9}, - {value: 0x0083, lo: 0xba, hi: 0xbf}, - // Block 0x96, offset 0x302 - {value: 0x0002, lo: 0x03}, - {value: 0x008f, lo: 0x80, hi: 0x93}, - {value: 0x0043, lo: 0x94, hi: 0xad}, - {value: 0x0083, lo: 0xae, hi: 0xbf}, - // Block 0x97, offset 0x306 - {value: 0x0002, lo: 0x04}, - {value: 0x00a7, lo: 0x80, hi: 0x87}, - {value: 0x0043, lo: 0x88, hi: 0xa1}, - {value: 0x0083, lo: 0xa2, hi: 0xbb}, - {value: 0x0043, lo: 0xbc, hi: 0xbf}, - // Block 0x98, offset 0x30b - {value: 0x0002, lo: 0x03}, - {value: 0x004b, lo: 0x80, hi: 0x95}, - {value: 0x0083, lo: 0x96, hi: 0xaf}, - {value: 0x0043, lo: 0xb0, hi: 0xbf}, - // Block 0x99, offset 0x30f - {value: 0x0003, lo: 0x0f}, - {value: 0x01b8, lo: 0x80, hi: 0x80}, - {value: 0x045f, lo: 0x81, hi: 0x81}, - {value: 0x01bb, lo: 0x82, hi: 0x9a}, - {value: 0x045b, lo: 0x9b, hi: 0x9b}, - {value: 0x01c7, lo: 0x9c, hi: 0x9c}, - {value: 0x01d0, lo: 0x9d, hi: 0x9d}, - {value: 0x01d6, lo: 0x9e, hi: 0x9e}, - {value: 0x01fa, lo: 0x9f, hi: 0x9f}, - {value: 0x01eb, lo: 0xa0, hi: 0xa0}, - {value: 0x01e8, lo: 0xa1, hi: 0xa1}, - {value: 0x0173, lo: 0xa2, hi: 0xb2}, - {value: 0x0188, lo: 0xb3, hi: 0xb3}, - {value: 0x01a6, lo: 0xb4, hi: 0xba}, - {value: 0x045f, lo: 0xbb, hi: 0xbb}, - {value: 0x01bb, lo: 0xbc, hi: 0xbf}, - // Block 0x9a, offset 0x31f - {value: 0x0003, lo: 0x0d}, - {value: 0x01c7, lo: 0x80, hi: 0x94}, - {value: 0x045b, lo: 0x95, hi: 0x95}, - {value: 0x01c7, lo: 0x96, hi: 0x96}, - {value: 0x01d0, lo: 0x97, hi: 0x97}, - {value: 0x01d6, lo: 0x98, hi: 0x98}, - {value: 0x01fa, lo: 0x99, hi: 0x99}, - {value: 0x01eb, lo: 0x9a, hi: 0x9a}, - {value: 0x01e8, lo: 0x9b, hi: 0x9b}, - {value: 0x0173, lo: 0x9c, hi: 0xac}, - {value: 0x0188, lo: 0xad, hi: 0xad}, - {value: 0x01a6, lo: 0xae, hi: 0xb4}, - {value: 0x045f, lo: 0xb5, hi: 0xb5}, - {value: 0x01bb, lo: 0xb6, hi: 0xbf}, - // Block 0x9b, offset 0x32d - {value: 0x0003, lo: 0x0d}, - {value: 0x01d9, lo: 0x80, hi: 0x8e}, - {value: 0x045b, lo: 0x8f, hi: 0x8f}, - {value: 0x01c7, lo: 0x90, hi: 0x90}, - {value: 0x01d0, lo: 0x91, hi: 0x91}, - {value: 0x01d6, lo: 0x92, hi: 0x92}, - {value: 0x01fa, lo: 0x93, hi: 0x93}, - {value: 0x01eb, lo: 0x94, hi: 0x94}, - {value: 0x01e8, lo: 0x95, hi: 0x95}, - {value: 0x0173, lo: 0x96, hi: 0xa6}, - {value: 0x0188, lo: 0xa7, hi: 0xa7}, - {value: 0x01a6, lo: 0xa8, hi: 0xae}, - {value: 0x045f, lo: 0xaf, hi: 0xaf}, - {value: 0x01bb, lo: 0xb0, hi: 0xbf}, - // Block 0x9c, offset 0x33b - {value: 0x0003, lo: 0x0d}, - {value: 0x01eb, lo: 0x80, hi: 0x88}, - {value: 0x045b, lo: 0x89, hi: 0x89}, - {value: 0x01c7, lo: 0x8a, hi: 0x8a}, - {value: 0x01d0, lo: 0x8b, hi: 0x8b}, - {value: 0x01d6, lo: 0x8c, hi: 0x8c}, - {value: 0x01fa, lo: 0x8d, hi: 0x8d}, - {value: 0x01eb, lo: 0x8e, hi: 0x8e}, - {value: 0x01e8, lo: 0x8f, hi: 0x8f}, - {value: 0x0173, lo: 0x90, hi: 0xa0}, - {value: 0x0188, lo: 0xa1, hi: 0xa1}, - {value: 0x01a6, lo: 0xa2, hi: 0xa8}, - {value: 0x045f, lo: 0xa9, hi: 0xa9}, - {value: 0x01bb, lo: 0xaa, hi: 0xbf}, - // Block 0x9d, offset 0x349 - {value: 0x0000, lo: 0x05}, - {value: 0x8132, lo: 0x80, hi: 0x86}, - {value: 0x8132, lo: 0x88, hi: 0x98}, - {value: 0x8132, lo: 0x9b, hi: 0xa1}, - {value: 0x8132, lo: 0xa3, hi: 0xa4}, - {value: 0x8132, lo: 0xa6, hi: 0xaa}, - // Block 0x9e, offset 0x34f - {value: 0x0000, lo: 0x01}, - {value: 0x8132, lo: 0xac, hi: 0xaf}, - // Block 0x9f, offset 0x351 - {value: 0x0000, lo: 0x01}, - {value: 0x812d, lo: 0x90, hi: 0x96}, - // Block 0xa0, offset 0x353 - {value: 0x0000, lo: 0x02}, - {value: 0x8132, lo: 0x84, hi: 0x89}, - {value: 0x8102, lo: 0x8a, hi: 0x8a}, - // Block 0xa1, offset 0x356 - {value: 0x0002, lo: 0x0a}, - {value: 0x0063, lo: 0x80, hi: 0x89}, - {value: 0x1951, lo: 0x8a, hi: 0x8a}, - {value: 0x1984, lo: 0x8b, hi: 0x8b}, - {value: 0x199f, lo: 0x8c, hi: 0x8c}, - {value: 0x19a5, lo: 0x8d, hi: 0x8d}, - {value: 0x1bc3, lo: 0x8e, hi: 0x8e}, - {value: 0x19b1, lo: 0x8f, hi: 0x8f}, - {value: 0x197b, lo: 0xaa, hi: 0xaa}, - {value: 0x197e, lo: 0xab, hi: 0xab}, - {value: 0x1981, lo: 0xac, hi: 0xac}, - // Block 0xa2, offset 0x361 - {value: 0x0000, lo: 0x01}, - {value: 0x193f, lo: 0x90, hi: 0x90}, - // Block 0xa3, offset 0x363 - {value: 0x0028, lo: 0x09}, - {value: 0x2865, lo: 0x80, hi: 0x80}, - {value: 0x2829, lo: 0x81, hi: 0x81}, - {value: 0x2833, lo: 0x82, hi: 0x82}, - {value: 0x2847, lo: 0x83, hi: 0x84}, - {value: 0x2851, lo: 0x85, hi: 0x86}, - {value: 0x283d, lo: 0x87, hi: 0x87}, - {value: 0x285b, lo: 0x88, hi: 0x88}, - {value: 0x0b6f, lo: 0x90, hi: 0x90}, - {value: 0x08e7, lo: 0x91, hi: 0x91}, -} - -// recompMap: 7520 bytes (entries only) -var recompMap map[uint32]rune -var recompMapOnce sync.Once - -const recompMapPacked = "" + - "\x00A\x03\x00\x00\x00\x00\xc0" + // 0x00410300: 0x000000C0 - "\x00A\x03\x01\x00\x00\x00\xc1" + // 0x00410301: 0x000000C1 - "\x00A\x03\x02\x00\x00\x00\xc2" + // 0x00410302: 0x000000C2 - "\x00A\x03\x03\x00\x00\x00\xc3" + // 0x00410303: 0x000000C3 - "\x00A\x03\b\x00\x00\x00\xc4" + // 0x00410308: 0x000000C4 - "\x00A\x03\n\x00\x00\x00\xc5" + // 0x0041030A: 0x000000C5 - "\x00C\x03'\x00\x00\x00\xc7" + // 0x00430327: 0x000000C7 - "\x00E\x03\x00\x00\x00\x00\xc8" + // 0x00450300: 0x000000C8 - "\x00E\x03\x01\x00\x00\x00\xc9" + // 0x00450301: 0x000000C9 - "\x00E\x03\x02\x00\x00\x00\xca" + // 0x00450302: 0x000000CA - "\x00E\x03\b\x00\x00\x00\xcb" + // 0x00450308: 0x000000CB - "\x00I\x03\x00\x00\x00\x00\xcc" + // 0x00490300: 0x000000CC - "\x00I\x03\x01\x00\x00\x00\xcd" + // 0x00490301: 0x000000CD - "\x00I\x03\x02\x00\x00\x00\xce" + // 0x00490302: 0x000000CE - "\x00I\x03\b\x00\x00\x00\xcf" + // 0x00490308: 0x000000CF - "\x00N\x03\x03\x00\x00\x00\xd1" + // 0x004E0303: 0x000000D1 - "\x00O\x03\x00\x00\x00\x00\xd2" + // 0x004F0300: 0x000000D2 - "\x00O\x03\x01\x00\x00\x00\xd3" + // 0x004F0301: 0x000000D3 - "\x00O\x03\x02\x00\x00\x00\xd4" + // 0x004F0302: 0x000000D4 - "\x00O\x03\x03\x00\x00\x00\xd5" + // 0x004F0303: 0x000000D5 - "\x00O\x03\b\x00\x00\x00\xd6" + // 0x004F0308: 0x000000D6 - "\x00U\x03\x00\x00\x00\x00\xd9" + // 0x00550300: 0x000000D9 - "\x00U\x03\x01\x00\x00\x00\xda" + // 0x00550301: 0x000000DA - "\x00U\x03\x02\x00\x00\x00\xdb" + // 0x00550302: 0x000000DB - "\x00U\x03\b\x00\x00\x00\xdc" + // 0x00550308: 0x000000DC - "\x00Y\x03\x01\x00\x00\x00\xdd" + // 0x00590301: 0x000000DD - "\x00a\x03\x00\x00\x00\x00\xe0" + // 0x00610300: 0x000000E0 - "\x00a\x03\x01\x00\x00\x00\xe1" + // 0x00610301: 0x000000E1 - "\x00a\x03\x02\x00\x00\x00\xe2" + // 0x00610302: 0x000000E2 - "\x00a\x03\x03\x00\x00\x00\xe3" + // 0x00610303: 0x000000E3 - "\x00a\x03\b\x00\x00\x00\xe4" + // 0x00610308: 0x000000E4 - "\x00a\x03\n\x00\x00\x00\xe5" + // 0x0061030A: 0x000000E5 - "\x00c\x03'\x00\x00\x00\xe7" + // 0x00630327: 0x000000E7 - "\x00e\x03\x00\x00\x00\x00\xe8" + // 0x00650300: 0x000000E8 - "\x00e\x03\x01\x00\x00\x00\xe9" + // 0x00650301: 0x000000E9 - "\x00e\x03\x02\x00\x00\x00\xea" + // 0x00650302: 0x000000EA - "\x00e\x03\b\x00\x00\x00\xeb" + // 0x00650308: 0x000000EB - "\x00i\x03\x00\x00\x00\x00\xec" + // 0x00690300: 0x000000EC - "\x00i\x03\x01\x00\x00\x00\xed" + // 0x00690301: 0x000000ED - "\x00i\x03\x02\x00\x00\x00\xee" + // 0x00690302: 0x000000EE - "\x00i\x03\b\x00\x00\x00\xef" + // 0x00690308: 0x000000EF - "\x00n\x03\x03\x00\x00\x00\xf1" + // 0x006E0303: 0x000000F1 - "\x00o\x03\x00\x00\x00\x00\xf2" + // 0x006F0300: 0x000000F2 - "\x00o\x03\x01\x00\x00\x00\xf3" + // 0x006F0301: 0x000000F3 - "\x00o\x03\x02\x00\x00\x00\xf4" + // 0x006F0302: 0x000000F4 - "\x00o\x03\x03\x00\x00\x00\xf5" + // 0x006F0303: 0x000000F5 - "\x00o\x03\b\x00\x00\x00\xf6" + // 0x006F0308: 0x000000F6 - "\x00u\x03\x00\x00\x00\x00\xf9" + // 0x00750300: 0x000000F9 - "\x00u\x03\x01\x00\x00\x00\xfa" + // 0x00750301: 0x000000FA - "\x00u\x03\x02\x00\x00\x00\xfb" + // 0x00750302: 0x000000FB - "\x00u\x03\b\x00\x00\x00\xfc" + // 0x00750308: 0x000000FC - "\x00y\x03\x01\x00\x00\x00\xfd" + // 0x00790301: 0x000000FD - "\x00y\x03\b\x00\x00\x00\xff" + // 0x00790308: 0x000000FF - "\x00A\x03\x04\x00\x00\x01\x00" + // 0x00410304: 0x00000100 - "\x00a\x03\x04\x00\x00\x01\x01" + // 0x00610304: 0x00000101 - "\x00A\x03\x06\x00\x00\x01\x02" + // 0x00410306: 0x00000102 - "\x00a\x03\x06\x00\x00\x01\x03" + // 0x00610306: 0x00000103 - "\x00A\x03(\x00\x00\x01\x04" + // 0x00410328: 0x00000104 - "\x00a\x03(\x00\x00\x01\x05" + // 0x00610328: 0x00000105 - "\x00C\x03\x01\x00\x00\x01\x06" + // 0x00430301: 0x00000106 - "\x00c\x03\x01\x00\x00\x01\a" + // 0x00630301: 0x00000107 - "\x00C\x03\x02\x00\x00\x01\b" + // 0x00430302: 0x00000108 - "\x00c\x03\x02\x00\x00\x01\t" + // 0x00630302: 0x00000109 - "\x00C\x03\a\x00\x00\x01\n" + // 0x00430307: 0x0000010A - "\x00c\x03\a\x00\x00\x01\v" + // 0x00630307: 0x0000010B - "\x00C\x03\f\x00\x00\x01\f" + // 0x0043030C: 0x0000010C - "\x00c\x03\f\x00\x00\x01\r" + // 0x0063030C: 0x0000010D - "\x00D\x03\f\x00\x00\x01\x0e" + // 0x0044030C: 0x0000010E - "\x00d\x03\f\x00\x00\x01\x0f" + // 0x0064030C: 0x0000010F - "\x00E\x03\x04\x00\x00\x01\x12" + // 0x00450304: 0x00000112 - "\x00e\x03\x04\x00\x00\x01\x13" + // 0x00650304: 0x00000113 - "\x00E\x03\x06\x00\x00\x01\x14" + // 0x00450306: 0x00000114 - "\x00e\x03\x06\x00\x00\x01\x15" + // 0x00650306: 0x00000115 - "\x00E\x03\a\x00\x00\x01\x16" + // 0x00450307: 0x00000116 - "\x00e\x03\a\x00\x00\x01\x17" + // 0x00650307: 0x00000117 - "\x00E\x03(\x00\x00\x01\x18" + // 0x00450328: 0x00000118 - "\x00e\x03(\x00\x00\x01\x19" + // 0x00650328: 0x00000119 - "\x00E\x03\f\x00\x00\x01\x1a" + // 0x0045030C: 0x0000011A - "\x00e\x03\f\x00\x00\x01\x1b" + // 0x0065030C: 0x0000011B - "\x00G\x03\x02\x00\x00\x01\x1c" + // 0x00470302: 0x0000011C - "\x00g\x03\x02\x00\x00\x01\x1d" + // 0x00670302: 0x0000011D - "\x00G\x03\x06\x00\x00\x01\x1e" + // 0x00470306: 0x0000011E - "\x00g\x03\x06\x00\x00\x01\x1f" + // 0x00670306: 0x0000011F - "\x00G\x03\a\x00\x00\x01 " + // 0x00470307: 0x00000120 - "\x00g\x03\a\x00\x00\x01!" + // 0x00670307: 0x00000121 - "\x00G\x03'\x00\x00\x01\"" + // 0x00470327: 0x00000122 - "\x00g\x03'\x00\x00\x01#" + // 0x00670327: 0x00000123 - "\x00H\x03\x02\x00\x00\x01$" + // 0x00480302: 0x00000124 - "\x00h\x03\x02\x00\x00\x01%" + // 0x00680302: 0x00000125 - "\x00I\x03\x03\x00\x00\x01(" + // 0x00490303: 0x00000128 - "\x00i\x03\x03\x00\x00\x01)" + // 0x00690303: 0x00000129 - "\x00I\x03\x04\x00\x00\x01*" + // 0x00490304: 0x0000012A - "\x00i\x03\x04\x00\x00\x01+" + // 0x00690304: 0x0000012B - "\x00I\x03\x06\x00\x00\x01," + // 0x00490306: 0x0000012C - "\x00i\x03\x06\x00\x00\x01-" + // 0x00690306: 0x0000012D - "\x00I\x03(\x00\x00\x01." + // 0x00490328: 0x0000012E - "\x00i\x03(\x00\x00\x01/" + // 0x00690328: 0x0000012F - "\x00I\x03\a\x00\x00\x010" + // 0x00490307: 0x00000130 - "\x00J\x03\x02\x00\x00\x014" + // 0x004A0302: 0x00000134 - "\x00j\x03\x02\x00\x00\x015" + // 0x006A0302: 0x00000135 - "\x00K\x03'\x00\x00\x016" + // 0x004B0327: 0x00000136 - "\x00k\x03'\x00\x00\x017" + // 0x006B0327: 0x00000137 - "\x00L\x03\x01\x00\x00\x019" + // 0x004C0301: 0x00000139 - "\x00l\x03\x01\x00\x00\x01:" + // 0x006C0301: 0x0000013A - "\x00L\x03'\x00\x00\x01;" + // 0x004C0327: 0x0000013B - "\x00l\x03'\x00\x00\x01<" + // 0x006C0327: 0x0000013C - "\x00L\x03\f\x00\x00\x01=" + // 0x004C030C: 0x0000013D - "\x00l\x03\f\x00\x00\x01>" + // 0x006C030C: 0x0000013E - "\x00N\x03\x01\x00\x00\x01C" + // 0x004E0301: 0x00000143 - "\x00n\x03\x01\x00\x00\x01D" + // 0x006E0301: 0x00000144 - "\x00N\x03'\x00\x00\x01E" + // 0x004E0327: 0x00000145 - "\x00n\x03'\x00\x00\x01F" + // 0x006E0327: 0x00000146 - "\x00N\x03\f\x00\x00\x01G" + // 0x004E030C: 0x00000147 - "\x00n\x03\f\x00\x00\x01H" + // 0x006E030C: 0x00000148 - "\x00O\x03\x04\x00\x00\x01L" + // 0x004F0304: 0x0000014C - "\x00o\x03\x04\x00\x00\x01M" + // 0x006F0304: 0x0000014D - "\x00O\x03\x06\x00\x00\x01N" + // 0x004F0306: 0x0000014E - "\x00o\x03\x06\x00\x00\x01O" + // 0x006F0306: 0x0000014F - "\x00O\x03\v\x00\x00\x01P" + // 0x004F030B: 0x00000150 - "\x00o\x03\v\x00\x00\x01Q" + // 0x006F030B: 0x00000151 - "\x00R\x03\x01\x00\x00\x01T" + // 0x00520301: 0x00000154 - "\x00r\x03\x01\x00\x00\x01U" + // 0x00720301: 0x00000155 - "\x00R\x03'\x00\x00\x01V" + // 0x00520327: 0x00000156 - "\x00r\x03'\x00\x00\x01W" + // 0x00720327: 0x00000157 - "\x00R\x03\f\x00\x00\x01X" + // 0x0052030C: 0x00000158 - "\x00r\x03\f\x00\x00\x01Y" + // 0x0072030C: 0x00000159 - "\x00S\x03\x01\x00\x00\x01Z" + // 0x00530301: 0x0000015A - "\x00s\x03\x01\x00\x00\x01[" + // 0x00730301: 0x0000015B - "\x00S\x03\x02\x00\x00\x01\\" + // 0x00530302: 0x0000015C - "\x00s\x03\x02\x00\x00\x01]" + // 0x00730302: 0x0000015D - "\x00S\x03'\x00\x00\x01^" + // 0x00530327: 0x0000015E - "\x00s\x03'\x00\x00\x01_" + // 0x00730327: 0x0000015F - "\x00S\x03\f\x00\x00\x01`" + // 0x0053030C: 0x00000160 - "\x00s\x03\f\x00\x00\x01a" + // 0x0073030C: 0x00000161 - "\x00T\x03'\x00\x00\x01b" + // 0x00540327: 0x00000162 - "\x00t\x03'\x00\x00\x01c" + // 0x00740327: 0x00000163 - "\x00T\x03\f\x00\x00\x01d" + // 0x0054030C: 0x00000164 - "\x00t\x03\f\x00\x00\x01e" + // 0x0074030C: 0x00000165 - "\x00U\x03\x03\x00\x00\x01h" + // 0x00550303: 0x00000168 - "\x00u\x03\x03\x00\x00\x01i" + // 0x00750303: 0x00000169 - "\x00U\x03\x04\x00\x00\x01j" + // 0x00550304: 0x0000016A - "\x00u\x03\x04\x00\x00\x01k" + // 0x00750304: 0x0000016B - "\x00U\x03\x06\x00\x00\x01l" + // 0x00550306: 0x0000016C - "\x00u\x03\x06\x00\x00\x01m" + // 0x00750306: 0x0000016D - "\x00U\x03\n\x00\x00\x01n" + // 0x0055030A: 0x0000016E - "\x00u\x03\n\x00\x00\x01o" + // 0x0075030A: 0x0000016F - "\x00U\x03\v\x00\x00\x01p" + // 0x0055030B: 0x00000170 - "\x00u\x03\v\x00\x00\x01q" + // 0x0075030B: 0x00000171 - "\x00U\x03(\x00\x00\x01r" + // 0x00550328: 0x00000172 - "\x00u\x03(\x00\x00\x01s" + // 0x00750328: 0x00000173 - "\x00W\x03\x02\x00\x00\x01t" + // 0x00570302: 0x00000174 - "\x00w\x03\x02\x00\x00\x01u" + // 0x00770302: 0x00000175 - "\x00Y\x03\x02\x00\x00\x01v" + // 0x00590302: 0x00000176 - "\x00y\x03\x02\x00\x00\x01w" + // 0x00790302: 0x00000177 - "\x00Y\x03\b\x00\x00\x01x" + // 0x00590308: 0x00000178 - "\x00Z\x03\x01\x00\x00\x01y" + // 0x005A0301: 0x00000179 - "\x00z\x03\x01\x00\x00\x01z" + // 0x007A0301: 0x0000017A - "\x00Z\x03\a\x00\x00\x01{" + // 0x005A0307: 0x0000017B - "\x00z\x03\a\x00\x00\x01|" + // 0x007A0307: 0x0000017C - "\x00Z\x03\f\x00\x00\x01}" + // 0x005A030C: 0x0000017D - "\x00z\x03\f\x00\x00\x01~" + // 0x007A030C: 0x0000017E - "\x00O\x03\x1b\x00\x00\x01\xa0" + // 0x004F031B: 0x000001A0 - "\x00o\x03\x1b\x00\x00\x01\xa1" + // 0x006F031B: 0x000001A1 - "\x00U\x03\x1b\x00\x00\x01\xaf" + // 0x0055031B: 0x000001AF - "\x00u\x03\x1b\x00\x00\x01\xb0" + // 0x0075031B: 0x000001B0 - "\x00A\x03\f\x00\x00\x01\xcd" + // 0x0041030C: 0x000001CD - "\x00a\x03\f\x00\x00\x01\xce" + // 0x0061030C: 0x000001CE - "\x00I\x03\f\x00\x00\x01\xcf" + // 0x0049030C: 0x000001CF - "\x00i\x03\f\x00\x00\x01\xd0" + // 0x0069030C: 0x000001D0 - "\x00O\x03\f\x00\x00\x01\xd1" + // 0x004F030C: 0x000001D1 - "\x00o\x03\f\x00\x00\x01\xd2" + // 0x006F030C: 0x000001D2 - "\x00U\x03\f\x00\x00\x01\xd3" + // 0x0055030C: 0x000001D3 - "\x00u\x03\f\x00\x00\x01\xd4" + // 0x0075030C: 0x000001D4 - "\x00\xdc\x03\x04\x00\x00\x01\xd5" + // 0x00DC0304: 0x000001D5 - "\x00\xfc\x03\x04\x00\x00\x01\xd6" + // 0x00FC0304: 0x000001D6 - "\x00\xdc\x03\x01\x00\x00\x01\xd7" + // 0x00DC0301: 0x000001D7 - "\x00\xfc\x03\x01\x00\x00\x01\xd8" + // 0x00FC0301: 0x000001D8 - "\x00\xdc\x03\f\x00\x00\x01\xd9" + // 0x00DC030C: 0x000001D9 - "\x00\xfc\x03\f\x00\x00\x01\xda" + // 0x00FC030C: 0x000001DA - "\x00\xdc\x03\x00\x00\x00\x01\xdb" + // 0x00DC0300: 0x000001DB - "\x00\xfc\x03\x00\x00\x00\x01\xdc" + // 0x00FC0300: 0x000001DC - "\x00\xc4\x03\x04\x00\x00\x01\xde" + // 0x00C40304: 0x000001DE - "\x00\xe4\x03\x04\x00\x00\x01\xdf" + // 0x00E40304: 0x000001DF - "\x02&\x03\x04\x00\x00\x01\xe0" + // 0x02260304: 0x000001E0 - "\x02'\x03\x04\x00\x00\x01\xe1" + // 0x02270304: 0x000001E1 - "\x00\xc6\x03\x04\x00\x00\x01\xe2" + // 0x00C60304: 0x000001E2 - "\x00\xe6\x03\x04\x00\x00\x01\xe3" + // 0x00E60304: 0x000001E3 - "\x00G\x03\f\x00\x00\x01\xe6" + // 0x0047030C: 0x000001E6 - "\x00g\x03\f\x00\x00\x01\xe7" + // 0x0067030C: 0x000001E7 - "\x00K\x03\f\x00\x00\x01\xe8" + // 0x004B030C: 0x000001E8 - "\x00k\x03\f\x00\x00\x01\xe9" + // 0x006B030C: 0x000001E9 - "\x00O\x03(\x00\x00\x01\xea" + // 0x004F0328: 0x000001EA - "\x00o\x03(\x00\x00\x01\xeb" + // 0x006F0328: 0x000001EB - "\x01\xea\x03\x04\x00\x00\x01\xec" + // 0x01EA0304: 0x000001EC - "\x01\xeb\x03\x04\x00\x00\x01\xed" + // 0x01EB0304: 0x000001ED - "\x01\xb7\x03\f\x00\x00\x01\xee" + // 0x01B7030C: 0x000001EE - "\x02\x92\x03\f\x00\x00\x01\xef" + // 0x0292030C: 0x000001EF - "\x00j\x03\f\x00\x00\x01\xf0" + // 0x006A030C: 0x000001F0 - "\x00G\x03\x01\x00\x00\x01\xf4" + // 0x00470301: 0x000001F4 - "\x00g\x03\x01\x00\x00\x01\xf5" + // 0x00670301: 0x000001F5 - "\x00N\x03\x00\x00\x00\x01\xf8" + // 0x004E0300: 0x000001F8 - "\x00n\x03\x00\x00\x00\x01\xf9" + // 0x006E0300: 0x000001F9 - "\x00\xc5\x03\x01\x00\x00\x01\xfa" + // 0x00C50301: 0x000001FA - "\x00\xe5\x03\x01\x00\x00\x01\xfb" + // 0x00E50301: 0x000001FB - "\x00\xc6\x03\x01\x00\x00\x01\xfc" + // 0x00C60301: 0x000001FC - "\x00\xe6\x03\x01\x00\x00\x01\xfd" + // 0x00E60301: 0x000001FD - "\x00\xd8\x03\x01\x00\x00\x01\xfe" + // 0x00D80301: 0x000001FE - "\x00\xf8\x03\x01\x00\x00\x01\xff" + // 0x00F80301: 0x000001FF - "\x00A\x03\x0f\x00\x00\x02\x00" + // 0x0041030F: 0x00000200 - "\x00a\x03\x0f\x00\x00\x02\x01" + // 0x0061030F: 0x00000201 - "\x00A\x03\x11\x00\x00\x02\x02" + // 0x00410311: 0x00000202 - "\x00a\x03\x11\x00\x00\x02\x03" + // 0x00610311: 0x00000203 - "\x00E\x03\x0f\x00\x00\x02\x04" + // 0x0045030F: 0x00000204 - "\x00e\x03\x0f\x00\x00\x02\x05" + // 0x0065030F: 0x00000205 - "\x00E\x03\x11\x00\x00\x02\x06" + // 0x00450311: 0x00000206 - "\x00e\x03\x11\x00\x00\x02\a" + // 0x00650311: 0x00000207 - "\x00I\x03\x0f\x00\x00\x02\b" + // 0x0049030F: 0x00000208 - "\x00i\x03\x0f\x00\x00\x02\t" + // 0x0069030F: 0x00000209 - "\x00I\x03\x11\x00\x00\x02\n" + // 0x00490311: 0x0000020A - "\x00i\x03\x11\x00\x00\x02\v" + // 0x00690311: 0x0000020B - "\x00O\x03\x0f\x00\x00\x02\f" + // 0x004F030F: 0x0000020C - "\x00o\x03\x0f\x00\x00\x02\r" + // 0x006F030F: 0x0000020D - "\x00O\x03\x11\x00\x00\x02\x0e" + // 0x004F0311: 0x0000020E - "\x00o\x03\x11\x00\x00\x02\x0f" + // 0x006F0311: 0x0000020F - "\x00R\x03\x0f\x00\x00\x02\x10" + // 0x0052030F: 0x00000210 - "\x00r\x03\x0f\x00\x00\x02\x11" + // 0x0072030F: 0x00000211 - "\x00R\x03\x11\x00\x00\x02\x12" + // 0x00520311: 0x00000212 - "\x00r\x03\x11\x00\x00\x02\x13" + // 0x00720311: 0x00000213 - "\x00U\x03\x0f\x00\x00\x02\x14" + // 0x0055030F: 0x00000214 - "\x00u\x03\x0f\x00\x00\x02\x15" + // 0x0075030F: 0x00000215 - "\x00U\x03\x11\x00\x00\x02\x16" + // 0x00550311: 0x00000216 - "\x00u\x03\x11\x00\x00\x02\x17" + // 0x00750311: 0x00000217 - "\x00S\x03&\x00\x00\x02\x18" + // 0x00530326: 0x00000218 - "\x00s\x03&\x00\x00\x02\x19" + // 0x00730326: 0x00000219 - "\x00T\x03&\x00\x00\x02\x1a" + // 0x00540326: 0x0000021A - "\x00t\x03&\x00\x00\x02\x1b" + // 0x00740326: 0x0000021B - "\x00H\x03\f\x00\x00\x02\x1e" + // 0x0048030C: 0x0000021E - "\x00h\x03\f\x00\x00\x02\x1f" + // 0x0068030C: 0x0000021F - "\x00A\x03\a\x00\x00\x02&" + // 0x00410307: 0x00000226 - "\x00a\x03\a\x00\x00\x02'" + // 0x00610307: 0x00000227 - "\x00E\x03'\x00\x00\x02(" + // 0x00450327: 0x00000228 - "\x00e\x03'\x00\x00\x02)" + // 0x00650327: 0x00000229 - "\x00\xd6\x03\x04\x00\x00\x02*" + // 0x00D60304: 0x0000022A - "\x00\xf6\x03\x04\x00\x00\x02+" + // 0x00F60304: 0x0000022B - "\x00\xd5\x03\x04\x00\x00\x02," + // 0x00D50304: 0x0000022C - "\x00\xf5\x03\x04\x00\x00\x02-" + // 0x00F50304: 0x0000022D - "\x00O\x03\a\x00\x00\x02." + // 0x004F0307: 0x0000022E - "\x00o\x03\a\x00\x00\x02/" + // 0x006F0307: 0x0000022F - "\x02.\x03\x04\x00\x00\x020" + // 0x022E0304: 0x00000230 - "\x02/\x03\x04\x00\x00\x021" + // 0x022F0304: 0x00000231 - "\x00Y\x03\x04\x00\x00\x022" + // 0x00590304: 0x00000232 - "\x00y\x03\x04\x00\x00\x023" + // 0x00790304: 0x00000233 - "\x00\xa8\x03\x01\x00\x00\x03\x85" + // 0x00A80301: 0x00000385 - "\x03\x91\x03\x01\x00\x00\x03\x86" + // 0x03910301: 0x00000386 - "\x03\x95\x03\x01\x00\x00\x03\x88" + // 0x03950301: 0x00000388 - "\x03\x97\x03\x01\x00\x00\x03\x89" + // 0x03970301: 0x00000389 - "\x03\x99\x03\x01\x00\x00\x03\x8a" + // 0x03990301: 0x0000038A - "\x03\x9f\x03\x01\x00\x00\x03\x8c" + // 0x039F0301: 0x0000038C - "\x03\xa5\x03\x01\x00\x00\x03\x8e" + // 0x03A50301: 0x0000038E - "\x03\xa9\x03\x01\x00\x00\x03\x8f" + // 0x03A90301: 0x0000038F - "\x03\xca\x03\x01\x00\x00\x03\x90" + // 0x03CA0301: 0x00000390 - "\x03\x99\x03\b\x00\x00\x03\xaa" + // 0x03990308: 0x000003AA - "\x03\xa5\x03\b\x00\x00\x03\xab" + // 0x03A50308: 0x000003AB - "\x03\xb1\x03\x01\x00\x00\x03\xac" + // 0x03B10301: 0x000003AC - "\x03\xb5\x03\x01\x00\x00\x03\xad" + // 0x03B50301: 0x000003AD - "\x03\xb7\x03\x01\x00\x00\x03\xae" + // 0x03B70301: 0x000003AE - "\x03\xb9\x03\x01\x00\x00\x03\xaf" + // 0x03B90301: 0x000003AF - "\x03\xcb\x03\x01\x00\x00\x03\xb0" + // 0x03CB0301: 0x000003B0 - "\x03\xb9\x03\b\x00\x00\x03\xca" + // 0x03B90308: 0x000003CA - "\x03\xc5\x03\b\x00\x00\x03\xcb" + // 0x03C50308: 0x000003CB - "\x03\xbf\x03\x01\x00\x00\x03\xcc" + // 0x03BF0301: 0x000003CC - "\x03\xc5\x03\x01\x00\x00\x03\xcd" + // 0x03C50301: 0x000003CD - "\x03\xc9\x03\x01\x00\x00\x03\xce" + // 0x03C90301: 0x000003CE - "\x03\xd2\x03\x01\x00\x00\x03\xd3" + // 0x03D20301: 0x000003D3 - "\x03\xd2\x03\b\x00\x00\x03\xd4" + // 0x03D20308: 0x000003D4 - "\x04\x15\x03\x00\x00\x00\x04\x00" + // 0x04150300: 0x00000400 - "\x04\x15\x03\b\x00\x00\x04\x01" + // 0x04150308: 0x00000401 - "\x04\x13\x03\x01\x00\x00\x04\x03" + // 0x04130301: 0x00000403 - "\x04\x06\x03\b\x00\x00\x04\a" + // 0x04060308: 0x00000407 - "\x04\x1a\x03\x01\x00\x00\x04\f" + // 0x041A0301: 0x0000040C - "\x04\x18\x03\x00\x00\x00\x04\r" + // 0x04180300: 0x0000040D - "\x04#\x03\x06\x00\x00\x04\x0e" + // 0x04230306: 0x0000040E - "\x04\x18\x03\x06\x00\x00\x04\x19" + // 0x04180306: 0x00000419 - "\x048\x03\x06\x00\x00\x049" + // 0x04380306: 0x00000439 - "\x045\x03\x00\x00\x00\x04P" + // 0x04350300: 0x00000450 - "\x045\x03\b\x00\x00\x04Q" + // 0x04350308: 0x00000451 - "\x043\x03\x01\x00\x00\x04S" + // 0x04330301: 0x00000453 - "\x04V\x03\b\x00\x00\x04W" + // 0x04560308: 0x00000457 - "\x04:\x03\x01\x00\x00\x04\\" + // 0x043A0301: 0x0000045C - "\x048\x03\x00\x00\x00\x04]" + // 0x04380300: 0x0000045D - "\x04C\x03\x06\x00\x00\x04^" + // 0x04430306: 0x0000045E - "\x04t\x03\x0f\x00\x00\x04v" + // 0x0474030F: 0x00000476 - "\x04u\x03\x0f\x00\x00\x04w" + // 0x0475030F: 0x00000477 - "\x04\x16\x03\x06\x00\x00\x04\xc1" + // 0x04160306: 0x000004C1 - "\x046\x03\x06\x00\x00\x04\xc2" + // 0x04360306: 0x000004C2 - "\x04\x10\x03\x06\x00\x00\x04\xd0" + // 0x04100306: 0x000004D0 - "\x040\x03\x06\x00\x00\x04\xd1" + // 0x04300306: 0x000004D1 - "\x04\x10\x03\b\x00\x00\x04\xd2" + // 0x04100308: 0x000004D2 - "\x040\x03\b\x00\x00\x04\xd3" + // 0x04300308: 0x000004D3 - "\x04\x15\x03\x06\x00\x00\x04\xd6" + // 0x04150306: 0x000004D6 - "\x045\x03\x06\x00\x00\x04\xd7" + // 0x04350306: 0x000004D7 - "\x04\xd8\x03\b\x00\x00\x04\xda" + // 0x04D80308: 0x000004DA - "\x04\xd9\x03\b\x00\x00\x04\xdb" + // 0x04D90308: 0x000004DB - "\x04\x16\x03\b\x00\x00\x04\xdc" + // 0x04160308: 0x000004DC - "\x046\x03\b\x00\x00\x04\xdd" + // 0x04360308: 0x000004DD - "\x04\x17\x03\b\x00\x00\x04\xde" + // 0x04170308: 0x000004DE - "\x047\x03\b\x00\x00\x04\xdf" + // 0x04370308: 0x000004DF - "\x04\x18\x03\x04\x00\x00\x04\xe2" + // 0x04180304: 0x000004E2 - "\x048\x03\x04\x00\x00\x04\xe3" + // 0x04380304: 0x000004E3 - "\x04\x18\x03\b\x00\x00\x04\xe4" + // 0x04180308: 0x000004E4 - "\x048\x03\b\x00\x00\x04\xe5" + // 0x04380308: 0x000004E5 - "\x04\x1e\x03\b\x00\x00\x04\xe6" + // 0x041E0308: 0x000004E6 - "\x04>\x03\b\x00\x00\x04\xe7" + // 0x043E0308: 0x000004E7 - "\x04\xe8\x03\b\x00\x00\x04\xea" + // 0x04E80308: 0x000004EA - "\x04\xe9\x03\b\x00\x00\x04\xeb" + // 0x04E90308: 0x000004EB - "\x04-\x03\b\x00\x00\x04\xec" + // 0x042D0308: 0x000004EC - "\x04M\x03\b\x00\x00\x04\xed" + // 0x044D0308: 0x000004ED - "\x04#\x03\x04\x00\x00\x04\xee" + // 0x04230304: 0x000004EE - "\x04C\x03\x04\x00\x00\x04\xef" + // 0x04430304: 0x000004EF - "\x04#\x03\b\x00\x00\x04\xf0" + // 0x04230308: 0x000004F0 - "\x04C\x03\b\x00\x00\x04\xf1" + // 0x04430308: 0x000004F1 - "\x04#\x03\v\x00\x00\x04\xf2" + // 0x0423030B: 0x000004F2 - "\x04C\x03\v\x00\x00\x04\xf3" + // 0x0443030B: 0x000004F3 - "\x04'\x03\b\x00\x00\x04\xf4" + // 0x04270308: 0x000004F4 - "\x04G\x03\b\x00\x00\x04\xf5" + // 0x04470308: 0x000004F5 - "\x04+\x03\b\x00\x00\x04\xf8" + // 0x042B0308: 0x000004F8 - "\x04K\x03\b\x00\x00\x04\xf9" + // 0x044B0308: 0x000004F9 - "\x06'\x06S\x00\x00\x06\"" + // 0x06270653: 0x00000622 - "\x06'\x06T\x00\x00\x06#" + // 0x06270654: 0x00000623 - "\x06H\x06T\x00\x00\x06$" + // 0x06480654: 0x00000624 - "\x06'\x06U\x00\x00\x06%" + // 0x06270655: 0x00000625 - "\x06J\x06T\x00\x00\x06&" + // 0x064A0654: 0x00000626 - "\x06\xd5\x06T\x00\x00\x06\xc0" + // 0x06D50654: 0x000006C0 - "\x06\xc1\x06T\x00\x00\x06\xc2" + // 0x06C10654: 0x000006C2 - "\x06\xd2\x06T\x00\x00\x06\xd3" + // 0x06D20654: 0x000006D3 - "\t(\t<\x00\x00\t)" + // 0x0928093C: 0x00000929 - "\t0\t<\x00\x00\t1" + // 0x0930093C: 0x00000931 - "\t3\t<\x00\x00\t4" + // 0x0933093C: 0x00000934 - "\t\xc7\t\xbe\x00\x00\t\xcb" + // 0x09C709BE: 0x000009CB - "\t\xc7\t\xd7\x00\x00\t\xcc" + // 0x09C709D7: 0x000009CC - "\vG\vV\x00\x00\vH" + // 0x0B470B56: 0x00000B48 - "\vG\v>\x00\x00\vK" + // 0x0B470B3E: 0x00000B4B - "\vG\vW\x00\x00\vL" + // 0x0B470B57: 0x00000B4C - "\v\x92\v\xd7\x00\x00\v\x94" + // 0x0B920BD7: 0x00000B94 - "\v\xc6\v\xbe\x00\x00\v\xca" + // 0x0BC60BBE: 0x00000BCA - "\v\xc7\v\xbe\x00\x00\v\xcb" + // 0x0BC70BBE: 0x00000BCB - "\v\xc6\v\xd7\x00\x00\v\xcc" + // 0x0BC60BD7: 0x00000BCC - "\fF\fV\x00\x00\fH" + // 0x0C460C56: 0x00000C48 - "\f\xbf\f\xd5\x00\x00\f\xc0" + // 0x0CBF0CD5: 0x00000CC0 - "\f\xc6\f\xd5\x00\x00\f\xc7" + // 0x0CC60CD5: 0x00000CC7 - "\f\xc6\f\xd6\x00\x00\f\xc8" + // 0x0CC60CD6: 0x00000CC8 - "\f\xc6\f\xc2\x00\x00\f\xca" + // 0x0CC60CC2: 0x00000CCA - "\f\xca\f\xd5\x00\x00\f\xcb" + // 0x0CCA0CD5: 0x00000CCB - "\rF\r>\x00\x00\rJ" + // 0x0D460D3E: 0x00000D4A - "\rG\r>\x00\x00\rK" + // 0x0D470D3E: 0x00000D4B - "\rF\rW\x00\x00\rL" + // 0x0D460D57: 0x00000D4C - "\r\xd9\r\xca\x00\x00\r\xda" + // 0x0DD90DCA: 0x00000DDA - "\r\xd9\r\xcf\x00\x00\r\xdc" + // 0x0DD90DCF: 0x00000DDC - "\r\xdc\r\xca\x00\x00\r\xdd" + // 0x0DDC0DCA: 0x00000DDD - "\r\xd9\r\xdf\x00\x00\r\xde" + // 0x0DD90DDF: 0x00000DDE - "\x10%\x10.\x00\x00\x10&" + // 0x1025102E: 0x00001026 - "\x1b\x05\x1b5\x00\x00\x1b\x06" + // 0x1B051B35: 0x00001B06 - "\x1b\a\x1b5\x00\x00\x1b\b" + // 0x1B071B35: 0x00001B08 - "\x1b\t\x1b5\x00\x00\x1b\n" + // 0x1B091B35: 0x00001B0A - "\x1b\v\x1b5\x00\x00\x1b\f" + // 0x1B0B1B35: 0x00001B0C - "\x1b\r\x1b5\x00\x00\x1b\x0e" + // 0x1B0D1B35: 0x00001B0E - "\x1b\x11\x1b5\x00\x00\x1b\x12" + // 0x1B111B35: 0x00001B12 - "\x1b:\x1b5\x00\x00\x1b;" + // 0x1B3A1B35: 0x00001B3B - "\x1b<\x1b5\x00\x00\x1b=" + // 0x1B3C1B35: 0x00001B3D - "\x1b>\x1b5\x00\x00\x1b@" + // 0x1B3E1B35: 0x00001B40 - "\x1b?\x1b5\x00\x00\x1bA" + // 0x1B3F1B35: 0x00001B41 - "\x1bB\x1b5\x00\x00\x1bC" + // 0x1B421B35: 0x00001B43 - "\x00A\x03%\x00\x00\x1e\x00" + // 0x00410325: 0x00001E00 - "\x00a\x03%\x00\x00\x1e\x01" + // 0x00610325: 0x00001E01 - "\x00B\x03\a\x00\x00\x1e\x02" + // 0x00420307: 0x00001E02 - "\x00b\x03\a\x00\x00\x1e\x03" + // 0x00620307: 0x00001E03 - "\x00B\x03#\x00\x00\x1e\x04" + // 0x00420323: 0x00001E04 - "\x00b\x03#\x00\x00\x1e\x05" + // 0x00620323: 0x00001E05 - "\x00B\x031\x00\x00\x1e\x06" + // 0x00420331: 0x00001E06 - "\x00b\x031\x00\x00\x1e\a" + // 0x00620331: 0x00001E07 - "\x00\xc7\x03\x01\x00\x00\x1e\b" + // 0x00C70301: 0x00001E08 - "\x00\xe7\x03\x01\x00\x00\x1e\t" + // 0x00E70301: 0x00001E09 - "\x00D\x03\a\x00\x00\x1e\n" + // 0x00440307: 0x00001E0A - "\x00d\x03\a\x00\x00\x1e\v" + // 0x00640307: 0x00001E0B - "\x00D\x03#\x00\x00\x1e\f" + // 0x00440323: 0x00001E0C - "\x00d\x03#\x00\x00\x1e\r" + // 0x00640323: 0x00001E0D - "\x00D\x031\x00\x00\x1e\x0e" + // 0x00440331: 0x00001E0E - "\x00d\x031\x00\x00\x1e\x0f" + // 0x00640331: 0x00001E0F - "\x00D\x03'\x00\x00\x1e\x10" + // 0x00440327: 0x00001E10 - "\x00d\x03'\x00\x00\x1e\x11" + // 0x00640327: 0x00001E11 - "\x00D\x03-\x00\x00\x1e\x12" + // 0x0044032D: 0x00001E12 - "\x00d\x03-\x00\x00\x1e\x13" + // 0x0064032D: 0x00001E13 - "\x01\x12\x03\x00\x00\x00\x1e\x14" + // 0x01120300: 0x00001E14 - "\x01\x13\x03\x00\x00\x00\x1e\x15" + // 0x01130300: 0x00001E15 - "\x01\x12\x03\x01\x00\x00\x1e\x16" + // 0x01120301: 0x00001E16 - "\x01\x13\x03\x01\x00\x00\x1e\x17" + // 0x01130301: 0x00001E17 - "\x00E\x03-\x00\x00\x1e\x18" + // 0x0045032D: 0x00001E18 - "\x00e\x03-\x00\x00\x1e\x19" + // 0x0065032D: 0x00001E19 - "\x00E\x030\x00\x00\x1e\x1a" + // 0x00450330: 0x00001E1A - "\x00e\x030\x00\x00\x1e\x1b" + // 0x00650330: 0x00001E1B - "\x02(\x03\x06\x00\x00\x1e\x1c" + // 0x02280306: 0x00001E1C - "\x02)\x03\x06\x00\x00\x1e\x1d" + // 0x02290306: 0x00001E1D - "\x00F\x03\a\x00\x00\x1e\x1e" + // 0x00460307: 0x00001E1E - "\x00f\x03\a\x00\x00\x1e\x1f" + // 0x00660307: 0x00001E1F - "\x00G\x03\x04\x00\x00\x1e " + // 0x00470304: 0x00001E20 - "\x00g\x03\x04\x00\x00\x1e!" + // 0x00670304: 0x00001E21 - "\x00H\x03\a\x00\x00\x1e\"" + // 0x00480307: 0x00001E22 - "\x00h\x03\a\x00\x00\x1e#" + // 0x00680307: 0x00001E23 - "\x00H\x03#\x00\x00\x1e$" + // 0x00480323: 0x00001E24 - "\x00h\x03#\x00\x00\x1e%" + // 0x00680323: 0x00001E25 - "\x00H\x03\b\x00\x00\x1e&" + // 0x00480308: 0x00001E26 - "\x00h\x03\b\x00\x00\x1e'" + // 0x00680308: 0x00001E27 - "\x00H\x03'\x00\x00\x1e(" + // 0x00480327: 0x00001E28 - "\x00h\x03'\x00\x00\x1e)" + // 0x00680327: 0x00001E29 - "\x00H\x03.\x00\x00\x1e*" + // 0x0048032E: 0x00001E2A - "\x00h\x03.\x00\x00\x1e+" + // 0x0068032E: 0x00001E2B - "\x00I\x030\x00\x00\x1e," + // 0x00490330: 0x00001E2C - "\x00i\x030\x00\x00\x1e-" + // 0x00690330: 0x00001E2D - "\x00\xcf\x03\x01\x00\x00\x1e." + // 0x00CF0301: 0x00001E2E - "\x00\xef\x03\x01\x00\x00\x1e/" + // 0x00EF0301: 0x00001E2F - "\x00K\x03\x01\x00\x00\x1e0" + // 0x004B0301: 0x00001E30 - "\x00k\x03\x01\x00\x00\x1e1" + // 0x006B0301: 0x00001E31 - "\x00K\x03#\x00\x00\x1e2" + // 0x004B0323: 0x00001E32 - "\x00k\x03#\x00\x00\x1e3" + // 0x006B0323: 0x00001E33 - "\x00K\x031\x00\x00\x1e4" + // 0x004B0331: 0x00001E34 - "\x00k\x031\x00\x00\x1e5" + // 0x006B0331: 0x00001E35 - "\x00L\x03#\x00\x00\x1e6" + // 0x004C0323: 0x00001E36 - "\x00l\x03#\x00\x00\x1e7" + // 0x006C0323: 0x00001E37 - "\x1e6\x03\x04\x00\x00\x1e8" + // 0x1E360304: 0x00001E38 - "\x1e7\x03\x04\x00\x00\x1e9" + // 0x1E370304: 0x00001E39 - "\x00L\x031\x00\x00\x1e:" + // 0x004C0331: 0x00001E3A - "\x00l\x031\x00\x00\x1e;" + // 0x006C0331: 0x00001E3B - "\x00L\x03-\x00\x00\x1e<" + // 0x004C032D: 0x00001E3C - "\x00l\x03-\x00\x00\x1e=" + // 0x006C032D: 0x00001E3D - "\x00M\x03\x01\x00\x00\x1e>" + // 0x004D0301: 0x00001E3E - "\x00m\x03\x01\x00\x00\x1e?" + // 0x006D0301: 0x00001E3F - "\x00M\x03\a\x00\x00\x1e@" + // 0x004D0307: 0x00001E40 - "\x00m\x03\a\x00\x00\x1eA" + // 0x006D0307: 0x00001E41 - "\x00M\x03#\x00\x00\x1eB" + // 0x004D0323: 0x00001E42 - "\x00m\x03#\x00\x00\x1eC" + // 0x006D0323: 0x00001E43 - "\x00N\x03\a\x00\x00\x1eD" + // 0x004E0307: 0x00001E44 - "\x00n\x03\a\x00\x00\x1eE" + // 0x006E0307: 0x00001E45 - "\x00N\x03#\x00\x00\x1eF" + // 0x004E0323: 0x00001E46 - "\x00n\x03#\x00\x00\x1eG" + // 0x006E0323: 0x00001E47 - "\x00N\x031\x00\x00\x1eH" + // 0x004E0331: 0x00001E48 - "\x00n\x031\x00\x00\x1eI" + // 0x006E0331: 0x00001E49 - "\x00N\x03-\x00\x00\x1eJ" + // 0x004E032D: 0x00001E4A - "\x00n\x03-\x00\x00\x1eK" + // 0x006E032D: 0x00001E4B - "\x00\xd5\x03\x01\x00\x00\x1eL" + // 0x00D50301: 0x00001E4C - "\x00\xf5\x03\x01\x00\x00\x1eM" + // 0x00F50301: 0x00001E4D - "\x00\xd5\x03\b\x00\x00\x1eN" + // 0x00D50308: 0x00001E4E - "\x00\xf5\x03\b\x00\x00\x1eO" + // 0x00F50308: 0x00001E4F - "\x01L\x03\x00\x00\x00\x1eP" + // 0x014C0300: 0x00001E50 - "\x01M\x03\x00\x00\x00\x1eQ" + // 0x014D0300: 0x00001E51 - "\x01L\x03\x01\x00\x00\x1eR" + // 0x014C0301: 0x00001E52 - "\x01M\x03\x01\x00\x00\x1eS" + // 0x014D0301: 0x00001E53 - "\x00P\x03\x01\x00\x00\x1eT" + // 0x00500301: 0x00001E54 - "\x00p\x03\x01\x00\x00\x1eU" + // 0x00700301: 0x00001E55 - "\x00P\x03\a\x00\x00\x1eV" + // 0x00500307: 0x00001E56 - "\x00p\x03\a\x00\x00\x1eW" + // 0x00700307: 0x00001E57 - "\x00R\x03\a\x00\x00\x1eX" + // 0x00520307: 0x00001E58 - "\x00r\x03\a\x00\x00\x1eY" + // 0x00720307: 0x00001E59 - "\x00R\x03#\x00\x00\x1eZ" + // 0x00520323: 0x00001E5A - "\x00r\x03#\x00\x00\x1e[" + // 0x00720323: 0x00001E5B - "\x1eZ\x03\x04\x00\x00\x1e\\" + // 0x1E5A0304: 0x00001E5C - "\x1e[\x03\x04\x00\x00\x1e]" + // 0x1E5B0304: 0x00001E5D - "\x00R\x031\x00\x00\x1e^" + // 0x00520331: 0x00001E5E - "\x00r\x031\x00\x00\x1e_" + // 0x00720331: 0x00001E5F - "\x00S\x03\a\x00\x00\x1e`" + // 0x00530307: 0x00001E60 - "\x00s\x03\a\x00\x00\x1ea" + // 0x00730307: 0x00001E61 - "\x00S\x03#\x00\x00\x1eb" + // 0x00530323: 0x00001E62 - "\x00s\x03#\x00\x00\x1ec" + // 0x00730323: 0x00001E63 - "\x01Z\x03\a\x00\x00\x1ed" + // 0x015A0307: 0x00001E64 - "\x01[\x03\a\x00\x00\x1ee" + // 0x015B0307: 0x00001E65 - "\x01`\x03\a\x00\x00\x1ef" + // 0x01600307: 0x00001E66 - "\x01a\x03\a\x00\x00\x1eg" + // 0x01610307: 0x00001E67 - "\x1eb\x03\a\x00\x00\x1eh" + // 0x1E620307: 0x00001E68 - "\x1ec\x03\a\x00\x00\x1ei" + // 0x1E630307: 0x00001E69 - "\x00T\x03\a\x00\x00\x1ej" + // 0x00540307: 0x00001E6A - "\x00t\x03\a\x00\x00\x1ek" + // 0x00740307: 0x00001E6B - "\x00T\x03#\x00\x00\x1el" + // 0x00540323: 0x00001E6C - "\x00t\x03#\x00\x00\x1em" + // 0x00740323: 0x00001E6D - "\x00T\x031\x00\x00\x1en" + // 0x00540331: 0x00001E6E - "\x00t\x031\x00\x00\x1eo" + // 0x00740331: 0x00001E6F - "\x00T\x03-\x00\x00\x1ep" + // 0x0054032D: 0x00001E70 - "\x00t\x03-\x00\x00\x1eq" + // 0x0074032D: 0x00001E71 - "\x00U\x03$\x00\x00\x1er" + // 0x00550324: 0x00001E72 - "\x00u\x03$\x00\x00\x1es" + // 0x00750324: 0x00001E73 - "\x00U\x030\x00\x00\x1et" + // 0x00550330: 0x00001E74 - "\x00u\x030\x00\x00\x1eu" + // 0x00750330: 0x00001E75 - "\x00U\x03-\x00\x00\x1ev" + // 0x0055032D: 0x00001E76 - "\x00u\x03-\x00\x00\x1ew" + // 0x0075032D: 0x00001E77 - "\x01h\x03\x01\x00\x00\x1ex" + // 0x01680301: 0x00001E78 - "\x01i\x03\x01\x00\x00\x1ey" + // 0x01690301: 0x00001E79 - "\x01j\x03\b\x00\x00\x1ez" + // 0x016A0308: 0x00001E7A - "\x01k\x03\b\x00\x00\x1e{" + // 0x016B0308: 0x00001E7B - "\x00V\x03\x03\x00\x00\x1e|" + // 0x00560303: 0x00001E7C - "\x00v\x03\x03\x00\x00\x1e}" + // 0x00760303: 0x00001E7D - "\x00V\x03#\x00\x00\x1e~" + // 0x00560323: 0x00001E7E - "\x00v\x03#\x00\x00\x1e\u007f" + // 0x00760323: 0x00001E7F - "\x00W\x03\x00\x00\x00\x1e\x80" + // 0x00570300: 0x00001E80 - "\x00w\x03\x00\x00\x00\x1e\x81" + // 0x00770300: 0x00001E81 - "\x00W\x03\x01\x00\x00\x1e\x82" + // 0x00570301: 0x00001E82 - "\x00w\x03\x01\x00\x00\x1e\x83" + // 0x00770301: 0x00001E83 - "\x00W\x03\b\x00\x00\x1e\x84" + // 0x00570308: 0x00001E84 - "\x00w\x03\b\x00\x00\x1e\x85" + // 0x00770308: 0x00001E85 - "\x00W\x03\a\x00\x00\x1e\x86" + // 0x00570307: 0x00001E86 - "\x00w\x03\a\x00\x00\x1e\x87" + // 0x00770307: 0x00001E87 - "\x00W\x03#\x00\x00\x1e\x88" + // 0x00570323: 0x00001E88 - "\x00w\x03#\x00\x00\x1e\x89" + // 0x00770323: 0x00001E89 - "\x00X\x03\a\x00\x00\x1e\x8a" + // 0x00580307: 0x00001E8A - "\x00x\x03\a\x00\x00\x1e\x8b" + // 0x00780307: 0x00001E8B - "\x00X\x03\b\x00\x00\x1e\x8c" + // 0x00580308: 0x00001E8C - "\x00x\x03\b\x00\x00\x1e\x8d" + // 0x00780308: 0x00001E8D - "\x00Y\x03\a\x00\x00\x1e\x8e" + // 0x00590307: 0x00001E8E - "\x00y\x03\a\x00\x00\x1e\x8f" + // 0x00790307: 0x00001E8F - "\x00Z\x03\x02\x00\x00\x1e\x90" + // 0x005A0302: 0x00001E90 - "\x00z\x03\x02\x00\x00\x1e\x91" + // 0x007A0302: 0x00001E91 - "\x00Z\x03#\x00\x00\x1e\x92" + // 0x005A0323: 0x00001E92 - "\x00z\x03#\x00\x00\x1e\x93" + // 0x007A0323: 0x00001E93 - "\x00Z\x031\x00\x00\x1e\x94" + // 0x005A0331: 0x00001E94 - "\x00z\x031\x00\x00\x1e\x95" + // 0x007A0331: 0x00001E95 - "\x00h\x031\x00\x00\x1e\x96" + // 0x00680331: 0x00001E96 - "\x00t\x03\b\x00\x00\x1e\x97" + // 0x00740308: 0x00001E97 - "\x00w\x03\n\x00\x00\x1e\x98" + // 0x0077030A: 0x00001E98 - "\x00y\x03\n\x00\x00\x1e\x99" + // 0x0079030A: 0x00001E99 - "\x01\u007f\x03\a\x00\x00\x1e\x9b" + // 0x017F0307: 0x00001E9B - "\x00A\x03#\x00\x00\x1e\xa0" + // 0x00410323: 0x00001EA0 - "\x00a\x03#\x00\x00\x1e\xa1" + // 0x00610323: 0x00001EA1 - "\x00A\x03\t\x00\x00\x1e\xa2" + // 0x00410309: 0x00001EA2 - "\x00a\x03\t\x00\x00\x1e\xa3" + // 0x00610309: 0x00001EA3 - "\x00\xc2\x03\x01\x00\x00\x1e\xa4" + // 0x00C20301: 0x00001EA4 - "\x00\xe2\x03\x01\x00\x00\x1e\xa5" + // 0x00E20301: 0x00001EA5 - "\x00\xc2\x03\x00\x00\x00\x1e\xa6" + // 0x00C20300: 0x00001EA6 - "\x00\xe2\x03\x00\x00\x00\x1e\xa7" + // 0x00E20300: 0x00001EA7 - "\x00\xc2\x03\t\x00\x00\x1e\xa8" + // 0x00C20309: 0x00001EA8 - "\x00\xe2\x03\t\x00\x00\x1e\xa9" + // 0x00E20309: 0x00001EA9 - "\x00\xc2\x03\x03\x00\x00\x1e\xaa" + // 0x00C20303: 0x00001EAA - "\x00\xe2\x03\x03\x00\x00\x1e\xab" + // 0x00E20303: 0x00001EAB - "\x1e\xa0\x03\x02\x00\x00\x1e\xac" + // 0x1EA00302: 0x00001EAC - "\x1e\xa1\x03\x02\x00\x00\x1e\xad" + // 0x1EA10302: 0x00001EAD - "\x01\x02\x03\x01\x00\x00\x1e\xae" + // 0x01020301: 0x00001EAE - "\x01\x03\x03\x01\x00\x00\x1e\xaf" + // 0x01030301: 0x00001EAF - "\x01\x02\x03\x00\x00\x00\x1e\xb0" + // 0x01020300: 0x00001EB0 - "\x01\x03\x03\x00\x00\x00\x1e\xb1" + // 0x01030300: 0x00001EB1 - "\x01\x02\x03\t\x00\x00\x1e\xb2" + // 0x01020309: 0x00001EB2 - "\x01\x03\x03\t\x00\x00\x1e\xb3" + // 0x01030309: 0x00001EB3 - "\x01\x02\x03\x03\x00\x00\x1e\xb4" + // 0x01020303: 0x00001EB4 - "\x01\x03\x03\x03\x00\x00\x1e\xb5" + // 0x01030303: 0x00001EB5 - "\x1e\xa0\x03\x06\x00\x00\x1e\xb6" + // 0x1EA00306: 0x00001EB6 - "\x1e\xa1\x03\x06\x00\x00\x1e\xb7" + // 0x1EA10306: 0x00001EB7 - "\x00E\x03#\x00\x00\x1e\xb8" + // 0x00450323: 0x00001EB8 - "\x00e\x03#\x00\x00\x1e\xb9" + // 0x00650323: 0x00001EB9 - "\x00E\x03\t\x00\x00\x1e\xba" + // 0x00450309: 0x00001EBA - "\x00e\x03\t\x00\x00\x1e\xbb" + // 0x00650309: 0x00001EBB - "\x00E\x03\x03\x00\x00\x1e\xbc" + // 0x00450303: 0x00001EBC - "\x00e\x03\x03\x00\x00\x1e\xbd" + // 0x00650303: 0x00001EBD - "\x00\xca\x03\x01\x00\x00\x1e\xbe" + // 0x00CA0301: 0x00001EBE - "\x00\xea\x03\x01\x00\x00\x1e\xbf" + // 0x00EA0301: 0x00001EBF - "\x00\xca\x03\x00\x00\x00\x1e\xc0" + // 0x00CA0300: 0x00001EC0 - "\x00\xea\x03\x00\x00\x00\x1e\xc1" + // 0x00EA0300: 0x00001EC1 - "\x00\xca\x03\t\x00\x00\x1e\xc2" + // 0x00CA0309: 0x00001EC2 - "\x00\xea\x03\t\x00\x00\x1e\xc3" + // 0x00EA0309: 0x00001EC3 - "\x00\xca\x03\x03\x00\x00\x1e\xc4" + // 0x00CA0303: 0x00001EC4 - "\x00\xea\x03\x03\x00\x00\x1e\xc5" + // 0x00EA0303: 0x00001EC5 - "\x1e\xb8\x03\x02\x00\x00\x1e\xc6" + // 0x1EB80302: 0x00001EC6 - "\x1e\xb9\x03\x02\x00\x00\x1e\xc7" + // 0x1EB90302: 0x00001EC7 - "\x00I\x03\t\x00\x00\x1e\xc8" + // 0x00490309: 0x00001EC8 - "\x00i\x03\t\x00\x00\x1e\xc9" + // 0x00690309: 0x00001EC9 - "\x00I\x03#\x00\x00\x1e\xca" + // 0x00490323: 0x00001ECA - "\x00i\x03#\x00\x00\x1e\xcb" + // 0x00690323: 0x00001ECB - "\x00O\x03#\x00\x00\x1e\xcc" + // 0x004F0323: 0x00001ECC - "\x00o\x03#\x00\x00\x1e\xcd" + // 0x006F0323: 0x00001ECD - "\x00O\x03\t\x00\x00\x1e\xce" + // 0x004F0309: 0x00001ECE - "\x00o\x03\t\x00\x00\x1e\xcf" + // 0x006F0309: 0x00001ECF - "\x00\xd4\x03\x01\x00\x00\x1e\xd0" + // 0x00D40301: 0x00001ED0 - "\x00\xf4\x03\x01\x00\x00\x1e\xd1" + // 0x00F40301: 0x00001ED1 - "\x00\xd4\x03\x00\x00\x00\x1e\xd2" + // 0x00D40300: 0x00001ED2 - "\x00\xf4\x03\x00\x00\x00\x1e\xd3" + // 0x00F40300: 0x00001ED3 - "\x00\xd4\x03\t\x00\x00\x1e\xd4" + // 0x00D40309: 0x00001ED4 - "\x00\xf4\x03\t\x00\x00\x1e\xd5" + // 0x00F40309: 0x00001ED5 - "\x00\xd4\x03\x03\x00\x00\x1e\xd6" + // 0x00D40303: 0x00001ED6 - "\x00\xf4\x03\x03\x00\x00\x1e\xd7" + // 0x00F40303: 0x00001ED7 - "\x1e\xcc\x03\x02\x00\x00\x1e\xd8" + // 0x1ECC0302: 0x00001ED8 - "\x1e\xcd\x03\x02\x00\x00\x1e\xd9" + // 0x1ECD0302: 0x00001ED9 - "\x01\xa0\x03\x01\x00\x00\x1e\xda" + // 0x01A00301: 0x00001EDA - "\x01\xa1\x03\x01\x00\x00\x1e\xdb" + // 0x01A10301: 0x00001EDB - "\x01\xa0\x03\x00\x00\x00\x1e\xdc" + // 0x01A00300: 0x00001EDC - "\x01\xa1\x03\x00\x00\x00\x1e\xdd" + // 0x01A10300: 0x00001EDD - "\x01\xa0\x03\t\x00\x00\x1e\xde" + // 0x01A00309: 0x00001EDE - "\x01\xa1\x03\t\x00\x00\x1e\xdf" + // 0x01A10309: 0x00001EDF - "\x01\xa0\x03\x03\x00\x00\x1e\xe0" + // 0x01A00303: 0x00001EE0 - "\x01\xa1\x03\x03\x00\x00\x1e\xe1" + // 0x01A10303: 0x00001EE1 - "\x01\xa0\x03#\x00\x00\x1e\xe2" + // 0x01A00323: 0x00001EE2 - "\x01\xa1\x03#\x00\x00\x1e\xe3" + // 0x01A10323: 0x00001EE3 - "\x00U\x03#\x00\x00\x1e\xe4" + // 0x00550323: 0x00001EE4 - "\x00u\x03#\x00\x00\x1e\xe5" + // 0x00750323: 0x00001EE5 - "\x00U\x03\t\x00\x00\x1e\xe6" + // 0x00550309: 0x00001EE6 - "\x00u\x03\t\x00\x00\x1e\xe7" + // 0x00750309: 0x00001EE7 - "\x01\xaf\x03\x01\x00\x00\x1e\xe8" + // 0x01AF0301: 0x00001EE8 - "\x01\xb0\x03\x01\x00\x00\x1e\xe9" + // 0x01B00301: 0x00001EE9 - "\x01\xaf\x03\x00\x00\x00\x1e\xea" + // 0x01AF0300: 0x00001EEA - "\x01\xb0\x03\x00\x00\x00\x1e\xeb" + // 0x01B00300: 0x00001EEB - "\x01\xaf\x03\t\x00\x00\x1e\xec" + // 0x01AF0309: 0x00001EEC - "\x01\xb0\x03\t\x00\x00\x1e\xed" + // 0x01B00309: 0x00001EED - "\x01\xaf\x03\x03\x00\x00\x1e\xee" + // 0x01AF0303: 0x00001EEE - "\x01\xb0\x03\x03\x00\x00\x1e\xef" + // 0x01B00303: 0x00001EEF - "\x01\xaf\x03#\x00\x00\x1e\xf0" + // 0x01AF0323: 0x00001EF0 - "\x01\xb0\x03#\x00\x00\x1e\xf1" + // 0x01B00323: 0x00001EF1 - "\x00Y\x03\x00\x00\x00\x1e\xf2" + // 0x00590300: 0x00001EF2 - "\x00y\x03\x00\x00\x00\x1e\xf3" + // 0x00790300: 0x00001EF3 - "\x00Y\x03#\x00\x00\x1e\xf4" + // 0x00590323: 0x00001EF4 - "\x00y\x03#\x00\x00\x1e\xf5" + // 0x00790323: 0x00001EF5 - "\x00Y\x03\t\x00\x00\x1e\xf6" + // 0x00590309: 0x00001EF6 - "\x00y\x03\t\x00\x00\x1e\xf7" + // 0x00790309: 0x00001EF7 - "\x00Y\x03\x03\x00\x00\x1e\xf8" + // 0x00590303: 0x00001EF8 - "\x00y\x03\x03\x00\x00\x1e\xf9" + // 0x00790303: 0x00001EF9 - "\x03\xb1\x03\x13\x00\x00\x1f\x00" + // 0x03B10313: 0x00001F00 - "\x03\xb1\x03\x14\x00\x00\x1f\x01" + // 0x03B10314: 0x00001F01 - "\x1f\x00\x03\x00\x00\x00\x1f\x02" + // 0x1F000300: 0x00001F02 - "\x1f\x01\x03\x00\x00\x00\x1f\x03" + // 0x1F010300: 0x00001F03 - "\x1f\x00\x03\x01\x00\x00\x1f\x04" + // 0x1F000301: 0x00001F04 - "\x1f\x01\x03\x01\x00\x00\x1f\x05" + // 0x1F010301: 0x00001F05 - "\x1f\x00\x03B\x00\x00\x1f\x06" + // 0x1F000342: 0x00001F06 - "\x1f\x01\x03B\x00\x00\x1f\a" + // 0x1F010342: 0x00001F07 - "\x03\x91\x03\x13\x00\x00\x1f\b" + // 0x03910313: 0x00001F08 - "\x03\x91\x03\x14\x00\x00\x1f\t" + // 0x03910314: 0x00001F09 - "\x1f\b\x03\x00\x00\x00\x1f\n" + // 0x1F080300: 0x00001F0A - "\x1f\t\x03\x00\x00\x00\x1f\v" + // 0x1F090300: 0x00001F0B - "\x1f\b\x03\x01\x00\x00\x1f\f" + // 0x1F080301: 0x00001F0C - "\x1f\t\x03\x01\x00\x00\x1f\r" + // 0x1F090301: 0x00001F0D - "\x1f\b\x03B\x00\x00\x1f\x0e" + // 0x1F080342: 0x00001F0E - "\x1f\t\x03B\x00\x00\x1f\x0f" + // 0x1F090342: 0x00001F0F - "\x03\xb5\x03\x13\x00\x00\x1f\x10" + // 0x03B50313: 0x00001F10 - "\x03\xb5\x03\x14\x00\x00\x1f\x11" + // 0x03B50314: 0x00001F11 - "\x1f\x10\x03\x00\x00\x00\x1f\x12" + // 0x1F100300: 0x00001F12 - "\x1f\x11\x03\x00\x00\x00\x1f\x13" + // 0x1F110300: 0x00001F13 - "\x1f\x10\x03\x01\x00\x00\x1f\x14" + // 0x1F100301: 0x00001F14 - "\x1f\x11\x03\x01\x00\x00\x1f\x15" + // 0x1F110301: 0x00001F15 - "\x03\x95\x03\x13\x00\x00\x1f\x18" + // 0x03950313: 0x00001F18 - "\x03\x95\x03\x14\x00\x00\x1f\x19" + // 0x03950314: 0x00001F19 - "\x1f\x18\x03\x00\x00\x00\x1f\x1a" + // 0x1F180300: 0x00001F1A - "\x1f\x19\x03\x00\x00\x00\x1f\x1b" + // 0x1F190300: 0x00001F1B - "\x1f\x18\x03\x01\x00\x00\x1f\x1c" + // 0x1F180301: 0x00001F1C - "\x1f\x19\x03\x01\x00\x00\x1f\x1d" + // 0x1F190301: 0x00001F1D - "\x03\xb7\x03\x13\x00\x00\x1f " + // 0x03B70313: 0x00001F20 - "\x03\xb7\x03\x14\x00\x00\x1f!" + // 0x03B70314: 0x00001F21 - "\x1f \x03\x00\x00\x00\x1f\"" + // 0x1F200300: 0x00001F22 - "\x1f!\x03\x00\x00\x00\x1f#" + // 0x1F210300: 0x00001F23 - "\x1f \x03\x01\x00\x00\x1f$" + // 0x1F200301: 0x00001F24 - "\x1f!\x03\x01\x00\x00\x1f%" + // 0x1F210301: 0x00001F25 - "\x1f \x03B\x00\x00\x1f&" + // 0x1F200342: 0x00001F26 - "\x1f!\x03B\x00\x00\x1f'" + // 0x1F210342: 0x00001F27 - "\x03\x97\x03\x13\x00\x00\x1f(" + // 0x03970313: 0x00001F28 - "\x03\x97\x03\x14\x00\x00\x1f)" + // 0x03970314: 0x00001F29 - "\x1f(\x03\x00\x00\x00\x1f*" + // 0x1F280300: 0x00001F2A - "\x1f)\x03\x00\x00\x00\x1f+" + // 0x1F290300: 0x00001F2B - "\x1f(\x03\x01\x00\x00\x1f," + // 0x1F280301: 0x00001F2C - "\x1f)\x03\x01\x00\x00\x1f-" + // 0x1F290301: 0x00001F2D - "\x1f(\x03B\x00\x00\x1f." + // 0x1F280342: 0x00001F2E - "\x1f)\x03B\x00\x00\x1f/" + // 0x1F290342: 0x00001F2F - "\x03\xb9\x03\x13\x00\x00\x1f0" + // 0x03B90313: 0x00001F30 - "\x03\xb9\x03\x14\x00\x00\x1f1" + // 0x03B90314: 0x00001F31 - "\x1f0\x03\x00\x00\x00\x1f2" + // 0x1F300300: 0x00001F32 - "\x1f1\x03\x00\x00\x00\x1f3" + // 0x1F310300: 0x00001F33 - "\x1f0\x03\x01\x00\x00\x1f4" + // 0x1F300301: 0x00001F34 - "\x1f1\x03\x01\x00\x00\x1f5" + // 0x1F310301: 0x00001F35 - "\x1f0\x03B\x00\x00\x1f6" + // 0x1F300342: 0x00001F36 - "\x1f1\x03B\x00\x00\x1f7" + // 0x1F310342: 0x00001F37 - "\x03\x99\x03\x13\x00\x00\x1f8" + // 0x03990313: 0x00001F38 - "\x03\x99\x03\x14\x00\x00\x1f9" + // 0x03990314: 0x00001F39 - "\x1f8\x03\x00\x00\x00\x1f:" + // 0x1F380300: 0x00001F3A - "\x1f9\x03\x00\x00\x00\x1f;" + // 0x1F390300: 0x00001F3B - "\x1f8\x03\x01\x00\x00\x1f<" + // 0x1F380301: 0x00001F3C - "\x1f9\x03\x01\x00\x00\x1f=" + // 0x1F390301: 0x00001F3D - "\x1f8\x03B\x00\x00\x1f>" + // 0x1F380342: 0x00001F3E - "\x1f9\x03B\x00\x00\x1f?" + // 0x1F390342: 0x00001F3F - "\x03\xbf\x03\x13\x00\x00\x1f@" + // 0x03BF0313: 0x00001F40 - "\x03\xbf\x03\x14\x00\x00\x1fA" + // 0x03BF0314: 0x00001F41 - "\x1f@\x03\x00\x00\x00\x1fB" + // 0x1F400300: 0x00001F42 - "\x1fA\x03\x00\x00\x00\x1fC" + // 0x1F410300: 0x00001F43 - "\x1f@\x03\x01\x00\x00\x1fD" + // 0x1F400301: 0x00001F44 - "\x1fA\x03\x01\x00\x00\x1fE" + // 0x1F410301: 0x00001F45 - "\x03\x9f\x03\x13\x00\x00\x1fH" + // 0x039F0313: 0x00001F48 - "\x03\x9f\x03\x14\x00\x00\x1fI" + // 0x039F0314: 0x00001F49 - "\x1fH\x03\x00\x00\x00\x1fJ" + // 0x1F480300: 0x00001F4A - "\x1fI\x03\x00\x00\x00\x1fK" + // 0x1F490300: 0x00001F4B - "\x1fH\x03\x01\x00\x00\x1fL" + // 0x1F480301: 0x00001F4C - "\x1fI\x03\x01\x00\x00\x1fM" + // 0x1F490301: 0x00001F4D - "\x03\xc5\x03\x13\x00\x00\x1fP" + // 0x03C50313: 0x00001F50 - "\x03\xc5\x03\x14\x00\x00\x1fQ" + // 0x03C50314: 0x00001F51 - "\x1fP\x03\x00\x00\x00\x1fR" + // 0x1F500300: 0x00001F52 - "\x1fQ\x03\x00\x00\x00\x1fS" + // 0x1F510300: 0x00001F53 - "\x1fP\x03\x01\x00\x00\x1fT" + // 0x1F500301: 0x00001F54 - "\x1fQ\x03\x01\x00\x00\x1fU" + // 0x1F510301: 0x00001F55 - "\x1fP\x03B\x00\x00\x1fV" + // 0x1F500342: 0x00001F56 - "\x1fQ\x03B\x00\x00\x1fW" + // 0x1F510342: 0x00001F57 - "\x03\xa5\x03\x14\x00\x00\x1fY" + // 0x03A50314: 0x00001F59 - "\x1fY\x03\x00\x00\x00\x1f[" + // 0x1F590300: 0x00001F5B - "\x1fY\x03\x01\x00\x00\x1f]" + // 0x1F590301: 0x00001F5D - "\x1fY\x03B\x00\x00\x1f_" + // 0x1F590342: 0x00001F5F - "\x03\xc9\x03\x13\x00\x00\x1f`" + // 0x03C90313: 0x00001F60 - "\x03\xc9\x03\x14\x00\x00\x1fa" + // 0x03C90314: 0x00001F61 - "\x1f`\x03\x00\x00\x00\x1fb" + // 0x1F600300: 0x00001F62 - "\x1fa\x03\x00\x00\x00\x1fc" + // 0x1F610300: 0x00001F63 - "\x1f`\x03\x01\x00\x00\x1fd" + // 0x1F600301: 0x00001F64 - "\x1fa\x03\x01\x00\x00\x1fe" + // 0x1F610301: 0x00001F65 - "\x1f`\x03B\x00\x00\x1ff" + // 0x1F600342: 0x00001F66 - "\x1fa\x03B\x00\x00\x1fg" + // 0x1F610342: 0x00001F67 - "\x03\xa9\x03\x13\x00\x00\x1fh" + // 0x03A90313: 0x00001F68 - "\x03\xa9\x03\x14\x00\x00\x1fi" + // 0x03A90314: 0x00001F69 - "\x1fh\x03\x00\x00\x00\x1fj" + // 0x1F680300: 0x00001F6A - "\x1fi\x03\x00\x00\x00\x1fk" + // 0x1F690300: 0x00001F6B - "\x1fh\x03\x01\x00\x00\x1fl" + // 0x1F680301: 0x00001F6C - "\x1fi\x03\x01\x00\x00\x1fm" + // 0x1F690301: 0x00001F6D - "\x1fh\x03B\x00\x00\x1fn" + // 0x1F680342: 0x00001F6E - "\x1fi\x03B\x00\x00\x1fo" + // 0x1F690342: 0x00001F6F - "\x03\xb1\x03\x00\x00\x00\x1fp" + // 0x03B10300: 0x00001F70 - "\x03\xb5\x03\x00\x00\x00\x1fr" + // 0x03B50300: 0x00001F72 - "\x03\xb7\x03\x00\x00\x00\x1ft" + // 0x03B70300: 0x00001F74 - "\x03\xb9\x03\x00\x00\x00\x1fv" + // 0x03B90300: 0x00001F76 - "\x03\xbf\x03\x00\x00\x00\x1fx" + // 0x03BF0300: 0x00001F78 - "\x03\xc5\x03\x00\x00\x00\x1fz" + // 0x03C50300: 0x00001F7A - "\x03\xc9\x03\x00\x00\x00\x1f|" + // 0x03C90300: 0x00001F7C - "\x1f\x00\x03E\x00\x00\x1f\x80" + // 0x1F000345: 0x00001F80 - "\x1f\x01\x03E\x00\x00\x1f\x81" + // 0x1F010345: 0x00001F81 - "\x1f\x02\x03E\x00\x00\x1f\x82" + // 0x1F020345: 0x00001F82 - "\x1f\x03\x03E\x00\x00\x1f\x83" + // 0x1F030345: 0x00001F83 - "\x1f\x04\x03E\x00\x00\x1f\x84" + // 0x1F040345: 0x00001F84 - "\x1f\x05\x03E\x00\x00\x1f\x85" + // 0x1F050345: 0x00001F85 - "\x1f\x06\x03E\x00\x00\x1f\x86" + // 0x1F060345: 0x00001F86 - "\x1f\a\x03E\x00\x00\x1f\x87" + // 0x1F070345: 0x00001F87 - "\x1f\b\x03E\x00\x00\x1f\x88" + // 0x1F080345: 0x00001F88 - "\x1f\t\x03E\x00\x00\x1f\x89" + // 0x1F090345: 0x00001F89 - "\x1f\n\x03E\x00\x00\x1f\x8a" + // 0x1F0A0345: 0x00001F8A - "\x1f\v\x03E\x00\x00\x1f\x8b" + // 0x1F0B0345: 0x00001F8B - "\x1f\f\x03E\x00\x00\x1f\x8c" + // 0x1F0C0345: 0x00001F8C - "\x1f\r\x03E\x00\x00\x1f\x8d" + // 0x1F0D0345: 0x00001F8D - "\x1f\x0e\x03E\x00\x00\x1f\x8e" + // 0x1F0E0345: 0x00001F8E - "\x1f\x0f\x03E\x00\x00\x1f\x8f" + // 0x1F0F0345: 0x00001F8F - "\x1f \x03E\x00\x00\x1f\x90" + // 0x1F200345: 0x00001F90 - "\x1f!\x03E\x00\x00\x1f\x91" + // 0x1F210345: 0x00001F91 - "\x1f\"\x03E\x00\x00\x1f\x92" + // 0x1F220345: 0x00001F92 - "\x1f#\x03E\x00\x00\x1f\x93" + // 0x1F230345: 0x00001F93 - "\x1f$\x03E\x00\x00\x1f\x94" + // 0x1F240345: 0x00001F94 - "\x1f%\x03E\x00\x00\x1f\x95" + // 0x1F250345: 0x00001F95 - "\x1f&\x03E\x00\x00\x1f\x96" + // 0x1F260345: 0x00001F96 - "\x1f'\x03E\x00\x00\x1f\x97" + // 0x1F270345: 0x00001F97 - "\x1f(\x03E\x00\x00\x1f\x98" + // 0x1F280345: 0x00001F98 - "\x1f)\x03E\x00\x00\x1f\x99" + // 0x1F290345: 0x00001F99 - "\x1f*\x03E\x00\x00\x1f\x9a" + // 0x1F2A0345: 0x00001F9A - "\x1f+\x03E\x00\x00\x1f\x9b" + // 0x1F2B0345: 0x00001F9B - "\x1f,\x03E\x00\x00\x1f\x9c" + // 0x1F2C0345: 0x00001F9C - "\x1f-\x03E\x00\x00\x1f\x9d" + // 0x1F2D0345: 0x00001F9D - "\x1f.\x03E\x00\x00\x1f\x9e" + // 0x1F2E0345: 0x00001F9E - "\x1f/\x03E\x00\x00\x1f\x9f" + // 0x1F2F0345: 0x00001F9F - "\x1f`\x03E\x00\x00\x1f\xa0" + // 0x1F600345: 0x00001FA0 - "\x1fa\x03E\x00\x00\x1f\xa1" + // 0x1F610345: 0x00001FA1 - "\x1fb\x03E\x00\x00\x1f\xa2" + // 0x1F620345: 0x00001FA2 - "\x1fc\x03E\x00\x00\x1f\xa3" + // 0x1F630345: 0x00001FA3 - "\x1fd\x03E\x00\x00\x1f\xa4" + // 0x1F640345: 0x00001FA4 - "\x1fe\x03E\x00\x00\x1f\xa5" + // 0x1F650345: 0x00001FA5 - "\x1ff\x03E\x00\x00\x1f\xa6" + // 0x1F660345: 0x00001FA6 - "\x1fg\x03E\x00\x00\x1f\xa7" + // 0x1F670345: 0x00001FA7 - "\x1fh\x03E\x00\x00\x1f\xa8" + // 0x1F680345: 0x00001FA8 - "\x1fi\x03E\x00\x00\x1f\xa9" + // 0x1F690345: 0x00001FA9 - "\x1fj\x03E\x00\x00\x1f\xaa" + // 0x1F6A0345: 0x00001FAA - "\x1fk\x03E\x00\x00\x1f\xab" + // 0x1F6B0345: 0x00001FAB - "\x1fl\x03E\x00\x00\x1f\xac" + // 0x1F6C0345: 0x00001FAC - "\x1fm\x03E\x00\x00\x1f\xad" + // 0x1F6D0345: 0x00001FAD - "\x1fn\x03E\x00\x00\x1f\xae" + // 0x1F6E0345: 0x00001FAE - "\x1fo\x03E\x00\x00\x1f\xaf" + // 0x1F6F0345: 0x00001FAF - "\x03\xb1\x03\x06\x00\x00\x1f\xb0" + // 0x03B10306: 0x00001FB0 - "\x03\xb1\x03\x04\x00\x00\x1f\xb1" + // 0x03B10304: 0x00001FB1 - "\x1fp\x03E\x00\x00\x1f\xb2" + // 0x1F700345: 0x00001FB2 - "\x03\xb1\x03E\x00\x00\x1f\xb3" + // 0x03B10345: 0x00001FB3 - "\x03\xac\x03E\x00\x00\x1f\xb4" + // 0x03AC0345: 0x00001FB4 - "\x03\xb1\x03B\x00\x00\x1f\xb6" + // 0x03B10342: 0x00001FB6 - "\x1f\xb6\x03E\x00\x00\x1f\xb7" + // 0x1FB60345: 0x00001FB7 - "\x03\x91\x03\x06\x00\x00\x1f\xb8" + // 0x03910306: 0x00001FB8 - "\x03\x91\x03\x04\x00\x00\x1f\xb9" + // 0x03910304: 0x00001FB9 - "\x03\x91\x03\x00\x00\x00\x1f\xba" + // 0x03910300: 0x00001FBA - "\x03\x91\x03E\x00\x00\x1f\xbc" + // 0x03910345: 0x00001FBC - "\x00\xa8\x03B\x00\x00\x1f\xc1" + // 0x00A80342: 0x00001FC1 - "\x1ft\x03E\x00\x00\x1f\xc2" + // 0x1F740345: 0x00001FC2 - "\x03\xb7\x03E\x00\x00\x1f\xc3" + // 0x03B70345: 0x00001FC3 - "\x03\xae\x03E\x00\x00\x1f\xc4" + // 0x03AE0345: 0x00001FC4 - "\x03\xb7\x03B\x00\x00\x1f\xc6" + // 0x03B70342: 0x00001FC6 - "\x1f\xc6\x03E\x00\x00\x1f\xc7" + // 0x1FC60345: 0x00001FC7 - "\x03\x95\x03\x00\x00\x00\x1f\xc8" + // 0x03950300: 0x00001FC8 - "\x03\x97\x03\x00\x00\x00\x1f\xca" + // 0x03970300: 0x00001FCA - "\x03\x97\x03E\x00\x00\x1f\xcc" + // 0x03970345: 0x00001FCC - "\x1f\xbf\x03\x00\x00\x00\x1f\xcd" + // 0x1FBF0300: 0x00001FCD - "\x1f\xbf\x03\x01\x00\x00\x1f\xce" + // 0x1FBF0301: 0x00001FCE - "\x1f\xbf\x03B\x00\x00\x1f\xcf" + // 0x1FBF0342: 0x00001FCF - "\x03\xb9\x03\x06\x00\x00\x1f\xd0" + // 0x03B90306: 0x00001FD0 - "\x03\xb9\x03\x04\x00\x00\x1f\xd1" + // 0x03B90304: 0x00001FD1 - "\x03\xca\x03\x00\x00\x00\x1f\xd2" + // 0x03CA0300: 0x00001FD2 - "\x03\xb9\x03B\x00\x00\x1f\xd6" + // 0x03B90342: 0x00001FD6 - "\x03\xca\x03B\x00\x00\x1f\xd7" + // 0x03CA0342: 0x00001FD7 - "\x03\x99\x03\x06\x00\x00\x1f\xd8" + // 0x03990306: 0x00001FD8 - "\x03\x99\x03\x04\x00\x00\x1f\xd9" + // 0x03990304: 0x00001FD9 - "\x03\x99\x03\x00\x00\x00\x1f\xda" + // 0x03990300: 0x00001FDA - "\x1f\xfe\x03\x00\x00\x00\x1f\xdd" + // 0x1FFE0300: 0x00001FDD - "\x1f\xfe\x03\x01\x00\x00\x1f\xde" + // 0x1FFE0301: 0x00001FDE - "\x1f\xfe\x03B\x00\x00\x1f\xdf" + // 0x1FFE0342: 0x00001FDF - "\x03\xc5\x03\x06\x00\x00\x1f\xe0" + // 0x03C50306: 0x00001FE0 - "\x03\xc5\x03\x04\x00\x00\x1f\xe1" + // 0x03C50304: 0x00001FE1 - "\x03\xcb\x03\x00\x00\x00\x1f\xe2" + // 0x03CB0300: 0x00001FE2 - "\x03\xc1\x03\x13\x00\x00\x1f\xe4" + // 0x03C10313: 0x00001FE4 - "\x03\xc1\x03\x14\x00\x00\x1f\xe5" + // 0x03C10314: 0x00001FE5 - "\x03\xc5\x03B\x00\x00\x1f\xe6" + // 0x03C50342: 0x00001FE6 - "\x03\xcb\x03B\x00\x00\x1f\xe7" + // 0x03CB0342: 0x00001FE7 - "\x03\xa5\x03\x06\x00\x00\x1f\xe8" + // 0x03A50306: 0x00001FE8 - "\x03\xa5\x03\x04\x00\x00\x1f\xe9" + // 0x03A50304: 0x00001FE9 - "\x03\xa5\x03\x00\x00\x00\x1f\xea" + // 0x03A50300: 0x00001FEA - "\x03\xa1\x03\x14\x00\x00\x1f\xec" + // 0x03A10314: 0x00001FEC - "\x00\xa8\x03\x00\x00\x00\x1f\xed" + // 0x00A80300: 0x00001FED - "\x1f|\x03E\x00\x00\x1f\xf2" + // 0x1F7C0345: 0x00001FF2 - "\x03\xc9\x03E\x00\x00\x1f\xf3" + // 0x03C90345: 0x00001FF3 - "\x03\xce\x03E\x00\x00\x1f\xf4" + // 0x03CE0345: 0x00001FF4 - "\x03\xc9\x03B\x00\x00\x1f\xf6" + // 0x03C90342: 0x00001FF6 - "\x1f\xf6\x03E\x00\x00\x1f\xf7" + // 0x1FF60345: 0x00001FF7 - "\x03\x9f\x03\x00\x00\x00\x1f\xf8" + // 0x039F0300: 0x00001FF8 - "\x03\xa9\x03\x00\x00\x00\x1f\xfa" + // 0x03A90300: 0x00001FFA - "\x03\xa9\x03E\x00\x00\x1f\xfc" + // 0x03A90345: 0x00001FFC - "!\x90\x038\x00\x00!\x9a" + // 0x21900338: 0x0000219A - "!\x92\x038\x00\x00!\x9b" + // 0x21920338: 0x0000219B - "!\x94\x038\x00\x00!\xae" + // 0x21940338: 0x000021AE - "!\xd0\x038\x00\x00!\xcd" + // 0x21D00338: 0x000021CD - "!\xd4\x038\x00\x00!\xce" + // 0x21D40338: 0x000021CE - "!\xd2\x038\x00\x00!\xcf" + // 0x21D20338: 0x000021CF - "\"\x03\x038\x00\x00\"\x04" + // 0x22030338: 0x00002204 - "\"\b\x038\x00\x00\"\t" + // 0x22080338: 0x00002209 - "\"\v\x038\x00\x00\"\f" + // 0x220B0338: 0x0000220C - "\"#\x038\x00\x00\"$" + // 0x22230338: 0x00002224 - "\"%\x038\x00\x00\"&" + // 0x22250338: 0x00002226 - "\"<\x038\x00\x00\"A" + // 0x223C0338: 0x00002241 - "\"C\x038\x00\x00\"D" + // 0x22430338: 0x00002244 - "\"E\x038\x00\x00\"G" + // 0x22450338: 0x00002247 - "\"H\x038\x00\x00\"I" + // 0x22480338: 0x00002249 - "\x00=\x038\x00\x00\"`" + // 0x003D0338: 0x00002260 - "\"a\x038\x00\x00\"b" + // 0x22610338: 0x00002262 - "\"M\x038\x00\x00\"m" + // 0x224D0338: 0x0000226D - "\x00<\x038\x00\x00\"n" + // 0x003C0338: 0x0000226E - "\x00>\x038\x00\x00\"o" + // 0x003E0338: 0x0000226F - "\"d\x038\x00\x00\"p" + // 0x22640338: 0x00002270 - "\"e\x038\x00\x00\"q" + // 0x22650338: 0x00002271 - "\"r\x038\x00\x00\"t" + // 0x22720338: 0x00002274 - "\"s\x038\x00\x00\"u" + // 0x22730338: 0x00002275 - "\"v\x038\x00\x00\"x" + // 0x22760338: 0x00002278 - "\"w\x038\x00\x00\"y" + // 0x22770338: 0x00002279 - "\"z\x038\x00\x00\"\x80" + // 0x227A0338: 0x00002280 - "\"{\x038\x00\x00\"\x81" + // 0x227B0338: 0x00002281 - "\"\x82\x038\x00\x00\"\x84" + // 0x22820338: 0x00002284 - "\"\x83\x038\x00\x00\"\x85" + // 0x22830338: 0x00002285 - "\"\x86\x038\x00\x00\"\x88" + // 0x22860338: 0x00002288 - "\"\x87\x038\x00\x00\"\x89" + // 0x22870338: 0x00002289 - "\"\xa2\x038\x00\x00\"\xac" + // 0x22A20338: 0x000022AC - "\"\xa8\x038\x00\x00\"\xad" + // 0x22A80338: 0x000022AD - "\"\xa9\x038\x00\x00\"\xae" + // 0x22A90338: 0x000022AE - "\"\xab\x038\x00\x00\"\xaf" + // 0x22AB0338: 0x000022AF - "\"|\x038\x00\x00\"\xe0" + // 0x227C0338: 0x000022E0 - "\"}\x038\x00\x00\"\xe1" + // 0x227D0338: 0x000022E1 - "\"\x91\x038\x00\x00\"\xe2" + // 0x22910338: 0x000022E2 - "\"\x92\x038\x00\x00\"\xe3" + // 0x22920338: 0x000022E3 - "\"\xb2\x038\x00\x00\"\xea" + // 0x22B20338: 0x000022EA - "\"\xb3\x038\x00\x00\"\xeb" + // 0x22B30338: 0x000022EB - "\"\xb4\x038\x00\x00\"\xec" + // 0x22B40338: 0x000022EC - "\"\xb5\x038\x00\x00\"\xed" + // 0x22B50338: 0x000022ED - "0K0\x99\x00\x000L" + // 0x304B3099: 0x0000304C - "0M0\x99\x00\x000N" + // 0x304D3099: 0x0000304E - "0O0\x99\x00\x000P" + // 0x304F3099: 0x00003050 - "0Q0\x99\x00\x000R" + // 0x30513099: 0x00003052 - "0S0\x99\x00\x000T" + // 0x30533099: 0x00003054 - "0U0\x99\x00\x000V" + // 0x30553099: 0x00003056 - "0W0\x99\x00\x000X" + // 0x30573099: 0x00003058 - "0Y0\x99\x00\x000Z" + // 0x30593099: 0x0000305A - "0[0\x99\x00\x000\\" + // 0x305B3099: 0x0000305C - "0]0\x99\x00\x000^" + // 0x305D3099: 0x0000305E - "0_0\x99\x00\x000`" + // 0x305F3099: 0x00003060 - "0a0\x99\x00\x000b" + // 0x30613099: 0x00003062 - "0d0\x99\x00\x000e" + // 0x30643099: 0x00003065 - "0f0\x99\x00\x000g" + // 0x30663099: 0x00003067 - "0h0\x99\x00\x000i" + // 0x30683099: 0x00003069 - "0o0\x99\x00\x000p" + // 0x306F3099: 0x00003070 - "0o0\x9a\x00\x000q" + // 0x306F309A: 0x00003071 - "0r0\x99\x00\x000s" + // 0x30723099: 0x00003073 - "0r0\x9a\x00\x000t" + // 0x3072309A: 0x00003074 - "0u0\x99\x00\x000v" + // 0x30753099: 0x00003076 - "0u0\x9a\x00\x000w" + // 0x3075309A: 0x00003077 - "0x0\x99\x00\x000y" + // 0x30783099: 0x00003079 - "0x0\x9a\x00\x000z" + // 0x3078309A: 0x0000307A - "0{0\x99\x00\x000|" + // 0x307B3099: 0x0000307C - "0{0\x9a\x00\x000}" + // 0x307B309A: 0x0000307D - "0F0\x99\x00\x000\x94" + // 0x30463099: 0x00003094 - "0\x9d0\x99\x00\x000\x9e" + // 0x309D3099: 0x0000309E - "0\xab0\x99\x00\x000\xac" + // 0x30AB3099: 0x000030AC - "0\xad0\x99\x00\x000\xae" + // 0x30AD3099: 0x000030AE - "0\xaf0\x99\x00\x000\xb0" + // 0x30AF3099: 0x000030B0 - "0\xb10\x99\x00\x000\xb2" + // 0x30B13099: 0x000030B2 - "0\xb30\x99\x00\x000\xb4" + // 0x30B33099: 0x000030B4 - "0\xb50\x99\x00\x000\xb6" + // 0x30B53099: 0x000030B6 - "0\xb70\x99\x00\x000\xb8" + // 0x30B73099: 0x000030B8 - "0\xb90\x99\x00\x000\xba" + // 0x30B93099: 0x000030BA - "0\xbb0\x99\x00\x000\xbc" + // 0x30BB3099: 0x000030BC - "0\xbd0\x99\x00\x000\xbe" + // 0x30BD3099: 0x000030BE - "0\xbf0\x99\x00\x000\xc0" + // 0x30BF3099: 0x000030C0 - "0\xc10\x99\x00\x000\xc2" + // 0x30C13099: 0x000030C2 - "0\xc40\x99\x00\x000\xc5" + // 0x30C43099: 0x000030C5 - "0\xc60\x99\x00\x000\xc7" + // 0x30C63099: 0x000030C7 - "0\xc80\x99\x00\x000\xc9" + // 0x30C83099: 0x000030C9 - "0\xcf0\x99\x00\x000\xd0" + // 0x30CF3099: 0x000030D0 - "0\xcf0\x9a\x00\x000\xd1" + // 0x30CF309A: 0x000030D1 - "0\xd20\x99\x00\x000\xd3" + // 0x30D23099: 0x000030D3 - "0\xd20\x9a\x00\x000\xd4" + // 0x30D2309A: 0x000030D4 - "0\xd50\x99\x00\x000\xd6" + // 0x30D53099: 0x000030D6 - "0\xd50\x9a\x00\x000\xd7" + // 0x30D5309A: 0x000030D7 - "0\xd80\x99\x00\x000\xd9" + // 0x30D83099: 0x000030D9 - "0\xd80\x9a\x00\x000\xda" + // 0x30D8309A: 0x000030DA - "0\xdb0\x99\x00\x000\xdc" + // 0x30DB3099: 0x000030DC - "0\xdb0\x9a\x00\x000\xdd" + // 0x30DB309A: 0x000030DD - "0\xa60\x99\x00\x000\xf4" + // 0x30A63099: 0x000030F4 - "0\xef0\x99\x00\x000\xf7" + // 0x30EF3099: 0x000030F7 - "0\xf00\x99\x00\x000\xf8" + // 0x30F03099: 0x000030F8 - "0\xf10\x99\x00\x000\xf9" + // 0x30F13099: 0x000030F9 - "0\xf20\x99\x00\x000\xfa" + // 0x30F23099: 0x000030FA - "0\xfd0\x99\x00\x000\xfe" + // 0x30FD3099: 0x000030FE - "\x10\x99\x10\xba\x00\x01\x10\x9a" + // 0x109910BA: 0x0001109A - "\x10\x9b\x10\xba\x00\x01\x10\x9c" + // 0x109B10BA: 0x0001109C - "\x10\xa5\x10\xba\x00\x01\x10\xab" + // 0x10A510BA: 0x000110AB - "\x111\x11'\x00\x01\x11." + // 0x11311127: 0x0001112E - "\x112\x11'\x00\x01\x11/" + // 0x11321127: 0x0001112F - "\x13G\x13>\x00\x01\x13K" + // 0x1347133E: 0x0001134B - "\x13G\x13W\x00\x01\x13L" + // 0x13471357: 0x0001134C - "\x14\xb9\x14\xba\x00\x01\x14\xbb" + // 0x14B914BA: 0x000114BB - "\x14\xb9\x14\xb0\x00\x01\x14\xbc" + // 0x14B914B0: 0x000114BC - "\x14\xb9\x14\xbd\x00\x01\x14\xbe" + // 0x14B914BD: 0x000114BE - "\x15\xb8\x15\xaf\x00\x01\x15\xba" + // 0x15B815AF: 0x000115BA - "\x15\xb9\x15\xaf\x00\x01\x15\xbb" + // 0x15B915AF: 0x000115BB - "" - // Total size of tables: 55KB (55977 bytes) diff --git a/vendor/golang.org/x/text/unicode/norm/tables15.0.0.go b/vendor/golang.org/x/text/unicode/norm/tables15.0.0.go index b0819e42d0..d9623241ca 100644 --- a/vendor/golang.org/x/text/unicode/norm/tables15.0.0.go +++ b/vendor/golang.org/x/text/unicode/norm/tables15.0.0.go @@ -1,6 +1,6 @@ // Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. -//go:build go1.21 +//go:build !go1.27 package norm @@ -30,7 +30,7 @@ var ccc = [56]uint8{ const ( firstMulti = 0x199A firstCCC = 0x2DD5 - endMulti = 0x30A1 + endMulti = 0x2EBF firstLeadingCCC = 0x4AEF firstCCCZeroExcept = 0x4BB9 firstStarterWithNLead = 0x4BE0 @@ -1685,802 +1685,783 @@ var decomps = [...]byte{ 0x82, 0x99, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0xAB, 0x52, 0xE3, 0x83, 0xAC, 0xE3, 0x83, 0xB3, 0xE3, 0x83, 0x88, 0xE3, 0x82, 0xB1, 0xE3, 0x82, 0x99, - 0xE3, 0x83, 0xB3, 0x61, 0xD8, 0xB5, 0xD9, 0x84, + 0xE3, 0x83, 0xB3, 0x5F, 0xD8, 0xB5, 0xD9, 0x84, 0xD9, 0x89, 0x20, 0xD8, 0xA7, 0xD9, 0x84, 0xD9, // Bytes 2dc0 - 2dff 0x84, 0xD9, 0x87, 0x20, 0xD8, 0xB9, 0xD9, 0x84, 0xD9, 0x8A, 0xD9, 0x87, 0x20, 0xD9, 0x88, 0xD8, - 0xB3, 0xD9, 0x84, 0xD9, 0x85, 0x06, 0xE0, 0xA7, - 0x87, 0xE0, 0xA6, 0xBE, 0x01, 0x06, 0xE0, 0xA7, - 0x87, 0xE0, 0xA7, 0x97, 0x01, 0x06, 0xE0, 0xAD, - 0x87, 0xE0, 0xAC, 0xBE, 0x01, 0x06, 0xE0, 0xAD, - 0x87, 0xE0, 0xAD, 0x96, 0x01, 0x06, 0xE0, 0xAD, - 0x87, 0xE0, 0xAD, 0x97, 0x01, 0x06, 0xE0, 0xAE, + 0xB3, 0xD9, 0x84, 0xD9, 0x85, 0x44, 0x44, 0x5A, + 0xCC, 0x8C, 0xCD, 0x44, 0x44, 0x7A, 0xCC, 0x8C, + 0xCD, 0x44, 0x64, 0x7A, 0xCC, 0x8C, 0xCD, 0x46, + 0xD9, 0x84, 0xD8, 0xA7, 0xD9, 0x93, 0xCD, 0x46, + 0xD9, 0x84, 0xD8, 0xA7, 0xD9, 0x94, 0xCD, 0x46, + 0xD9, 0x84, 0xD8, 0xA7, 0xD9, 0x95, 0xB9, 0x49, // Bytes 2e00 - 2e3f - 0x92, 0xE0, 0xAF, 0x97, 0x01, 0x06, 0xE0, 0xAF, - 0x86, 0xE0, 0xAE, 0xBE, 0x01, 0x06, 0xE0, 0xAF, - 0x86, 0xE0, 0xAF, 0x97, 0x01, 0x06, 0xE0, 0xAF, - 0x87, 0xE0, 0xAE, 0xBE, 0x01, 0x06, 0xE0, 0xB2, - 0xBF, 0xE0, 0xB3, 0x95, 0x01, 0x06, 0xE0, 0xB3, - 0x86, 0xE0, 0xB3, 0x95, 0x01, 0x06, 0xE0, 0xB3, - 0x86, 0xE0, 0xB3, 0x96, 0x01, 0x06, 0xE0, 0xB5, - 0x86, 0xE0, 0xB4, 0xBE, 0x01, 0x06, 0xE0, 0xB5, + 0xE3, 0x83, 0xA1, 0xE3, 0x82, 0xAB, 0xE3, 0x82, + 0x99, 0x11, 0x4C, 0xE1, 0x84, 0x8C, 0xE1, 0x85, + 0xAE, 0xE1, 0x84, 0x8B, 0xE1, 0x85, 0xB4, 0x01, + 0x4C, 0xE3, 0x82, 0xAD, 0xE3, 0x82, 0x99, 0xE3, + 0x82, 0xAB, 0xE3, 0x82, 0x99, 0x11, 0x4C, 0xE3, + 0x82, 0xB3, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0x9B, + 0xE3, 0x82, 0x9A, 0x11, 0x4C, 0xE3, 0x83, 0xA4, + 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0x88, 0xE3, 0x82, // Bytes 2e40 - 2e7f - 0x86, 0xE0, 0xB5, 0x97, 0x01, 0x06, 0xE0, 0xB5, - 0x87, 0xE0, 0xB4, 0xBE, 0x01, 0x06, 0xE0, 0xB7, - 0x99, 0xE0, 0xB7, 0x9F, 0x01, 0x06, 0xE1, 0x80, - 0xA5, 0xE1, 0x80, 0xAE, 0x01, 0x06, 0xE1, 0xAC, - 0x85, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1, 0xAC, - 0x87, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1, 0xAC, - 0x89, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1, 0xAC, - 0x8B, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1, 0xAC, + 0x99, 0x11, 0x4F, 0xE1, 0x84, 0x8E, 0xE1, 0x85, + 0xA1, 0xE1, 0x86, 0xB7, 0xE1, 0x84, 0x80, 0xE1, + 0x85, 0xA9, 0x01, 0x4F, 0xE3, 0x82, 0xA4, 0xE3, + 0x83, 0x8B, 0xE3, 0x83, 0xB3, 0xE3, 0x82, 0xAF, + 0xE3, 0x82, 0x99, 0x11, 0x4F, 0xE3, 0x82, 0xB7, + 0xE3, 0x83, 0xAA, 0xE3, 0x83, 0xB3, 0xE3, 0x82, + 0xAF, 0xE3, 0x82, 0x99, 0x11, 0x4F, 0xE3, 0x83, + 0x98, 0xE3, 0x82, 0x9A, 0xE3, 0x83, 0xBC, 0xE3, // Bytes 2e80 - 2ebf - 0x8D, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1, 0xAC, - 0x91, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1, 0xAC, - 0xBA, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1, 0xAC, - 0xBC, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1, 0xAC, - 0xBE, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1, 0xAC, - 0xBF, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1, 0xAD, - 0x82, 0xE1, 0xAC, 0xB5, 0x01, 0x08, 0xF0, 0x91, - 0x84, 0xB1, 0xF0, 0x91, 0x84, 0xA7, 0x01, 0x08, + 0x82, 0xB7, 0xE3, 0x82, 0x99, 0x11, 0x4F, 0xE3, + 0x83, 0x9B, 0xE3, 0x82, 0x9A, 0xE3, 0x83, 0xB3, + 0xE3, 0x83, 0x88, 0xE3, 0x82, 0x99, 0x11, 0x52, + 0xE3, 0x82, 0xA8, 0xE3, 0x82, 0xB9, 0xE3, 0x82, + 0xAF, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0x88, 0xE3, + 0x82, 0x99, 0x11, 0x52, 0xE3, 0x83, 0x95, 0xE3, + 0x82, 0xA1, 0xE3, 0x83, 0xA9, 0xE3, 0x83, 0x83, + 0xE3, 0x83, 0x88, 0xE3, 0x82, 0x99, 0x11, 0x03, // Bytes 2ec0 - 2eff - 0xF0, 0x91, 0x84, 0xB2, 0xF0, 0x91, 0x84, 0xA7, - 0x01, 0x08, 0xF0, 0x91, 0x8D, 0x87, 0xF0, 0x91, - 0x8C, 0xBE, 0x01, 0x08, 0xF0, 0x91, 0x8D, 0x87, - 0xF0, 0x91, 0x8D, 0x97, 0x01, 0x08, 0xF0, 0x91, - 0x92, 0xB9, 0xF0, 0x91, 0x92, 0xB0, 0x01, 0x08, - 0xF0, 0x91, 0x92, 0xB9, 0xF0, 0x91, 0x92, 0xBA, - 0x01, 0x08, 0xF0, 0x91, 0x92, 0xB9, 0xF0, 0x91, - 0x92, 0xBD, 0x01, 0x08, 0xF0, 0x91, 0x96, 0xB8, + 0x3C, 0xCC, 0xB8, 0x05, 0x03, 0x3D, 0xCC, 0xB8, + 0x05, 0x03, 0x3E, 0xCC, 0xB8, 0x05, 0x03, 0x41, + 0xCC, 0x80, 0xCD, 0x03, 0x41, 0xCC, 0x81, 0xCD, + 0x03, 0x41, 0xCC, 0x83, 0xCD, 0x03, 0x41, 0xCC, + 0x84, 0xCD, 0x03, 0x41, 0xCC, 0x89, 0xCD, 0x03, + 0x41, 0xCC, 0x8C, 0xCD, 0x03, 0x41, 0xCC, 0x8F, + 0xCD, 0x03, 0x41, 0xCC, 0x91, 0xCD, 0x03, 0x41, + 0xCC, 0xA5, 0xB9, 0x03, 0x41, 0xCC, 0xA8, 0xA9, // Bytes 2f00 - 2f3f - 0xF0, 0x91, 0x96, 0xAF, 0x01, 0x08, 0xF0, 0x91, - 0x96, 0xB9, 0xF0, 0x91, 0x96, 0xAF, 0x01, 0x08, - 0xF0, 0x91, 0xA4, 0xB5, 0xF0, 0x91, 0xA4, 0xB0, - 0x01, 0x09, 0xE0, 0xB3, 0x86, 0xE0, 0xB3, 0x82, - 0xE0, 0xB3, 0x95, 0x02, 0x09, 0xE0, 0xB7, 0x99, - 0xE0, 0xB7, 0x8F, 0xE0, 0xB7, 0x8A, 0x16, 0x44, - 0x44, 0x5A, 0xCC, 0x8C, 0xCD, 0x44, 0x44, 0x7A, - 0xCC, 0x8C, 0xCD, 0x44, 0x64, 0x7A, 0xCC, 0x8C, + 0x03, 0x42, 0xCC, 0x87, 0xCD, 0x03, 0x42, 0xCC, + 0xA3, 0xB9, 0x03, 0x42, 0xCC, 0xB1, 0xB9, 0x03, + 0x43, 0xCC, 0x81, 0xCD, 0x03, 0x43, 0xCC, 0x82, + 0xCD, 0x03, 0x43, 0xCC, 0x87, 0xCD, 0x03, 0x43, + 0xCC, 0x8C, 0xCD, 0x03, 0x44, 0xCC, 0x87, 0xCD, + 0x03, 0x44, 0xCC, 0x8C, 0xCD, 0x03, 0x44, 0xCC, + 0xA3, 0xB9, 0x03, 0x44, 0xCC, 0xA7, 0xA9, 0x03, + 0x44, 0xCC, 0xAD, 0xB9, 0x03, 0x44, 0xCC, 0xB1, // Bytes 2f40 - 2f7f - 0xCD, 0x46, 0xD9, 0x84, 0xD8, 0xA7, 0xD9, 0x93, - 0xCD, 0x46, 0xD9, 0x84, 0xD8, 0xA7, 0xD9, 0x94, - 0xCD, 0x46, 0xD9, 0x84, 0xD8, 0xA7, 0xD9, 0x95, - 0xB9, 0x46, 0xE1, 0x84, 0x80, 0xE1, 0x85, 0xA1, - 0x01, 0x46, 0xE1, 0x84, 0x82, 0xE1, 0x85, 0xA1, - 0x01, 0x46, 0xE1, 0x84, 0x83, 0xE1, 0x85, 0xA1, - 0x01, 0x46, 0xE1, 0x84, 0x85, 0xE1, 0x85, 0xA1, - 0x01, 0x46, 0xE1, 0x84, 0x86, 0xE1, 0x85, 0xA1, + 0xB9, 0x03, 0x45, 0xCC, 0x80, 0xCD, 0x03, 0x45, + 0xCC, 0x81, 0xCD, 0x03, 0x45, 0xCC, 0x83, 0xCD, + 0x03, 0x45, 0xCC, 0x86, 0xCD, 0x03, 0x45, 0xCC, + 0x87, 0xCD, 0x03, 0x45, 0xCC, 0x88, 0xCD, 0x03, + 0x45, 0xCC, 0x89, 0xCD, 0x03, 0x45, 0xCC, 0x8C, + 0xCD, 0x03, 0x45, 0xCC, 0x8F, 0xCD, 0x03, 0x45, + 0xCC, 0x91, 0xCD, 0x03, 0x45, 0xCC, 0xA8, 0xA9, + 0x03, 0x45, 0xCC, 0xAD, 0xB9, 0x03, 0x45, 0xCC, // Bytes 2f80 - 2fbf - 0x01, 0x46, 0xE1, 0x84, 0x87, 0xE1, 0x85, 0xA1, - 0x01, 0x46, 0xE1, 0x84, 0x89, 0xE1, 0x85, 0xA1, - 0x01, 0x46, 0xE1, 0x84, 0x8B, 0xE1, 0x85, 0xA1, - 0x01, 0x46, 0xE1, 0x84, 0x8B, 0xE1, 0x85, 0xAE, - 0x01, 0x46, 0xE1, 0x84, 0x8C, 0xE1, 0x85, 0xA1, - 0x01, 0x46, 0xE1, 0x84, 0x8E, 0xE1, 0x85, 0xA1, - 0x01, 0x46, 0xE1, 0x84, 0x8F, 0xE1, 0x85, 0xA1, - 0x01, 0x46, 0xE1, 0x84, 0x90, 0xE1, 0x85, 0xA1, + 0xB0, 0xB9, 0x03, 0x46, 0xCC, 0x87, 0xCD, 0x03, + 0x47, 0xCC, 0x81, 0xCD, 0x03, 0x47, 0xCC, 0x82, + 0xCD, 0x03, 0x47, 0xCC, 0x84, 0xCD, 0x03, 0x47, + 0xCC, 0x86, 0xCD, 0x03, 0x47, 0xCC, 0x87, 0xCD, + 0x03, 0x47, 0xCC, 0x8C, 0xCD, 0x03, 0x47, 0xCC, + 0xA7, 0xA9, 0x03, 0x48, 0xCC, 0x82, 0xCD, 0x03, + 0x48, 0xCC, 0x87, 0xCD, 0x03, 0x48, 0xCC, 0x88, + 0xCD, 0x03, 0x48, 0xCC, 0x8C, 0xCD, 0x03, 0x48, // Bytes 2fc0 - 2fff - 0x01, 0x46, 0xE1, 0x84, 0x91, 0xE1, 0x85, 0xA1, - 0x01, 0x46, 0xE1, 0x84, 0x92, 0xE1, 0x85, 0xA1, - 0x01, 0x49, 0xE3, 0x83, 0xA1, 0xE3, 0x82, 0xAB, - 0xE3, 0x82, 0x99, 0x11, 0x4C, 0xE1, 0x84, 0x8C, - 0xE1, 0x85, 0xAE, 0xE1, 0x84, 0x8B, 0xE1, 0x85, - 0xB4, 0x01, 0x4C, 0xE3, 0x82, 0xAD, 0xE3, 0x82, - 0x99, 0xE3, 0x82, 0xAB, 0xE3, 0x82, 0x99, 0x11, - 0x4C, 0xE3, 0x82, 0xB3, 0xE3, 0x83, 0xBC, 0xE3, + 0xCC, 0xA3, 0xB9, 0x03, 0x48, 0xCC, 0xA7, 0xA9, + 0x03, 0x48, 0xCC, 0xAE, 0xB9, 0x03, 0x49, 0xCC, + 0x80, 0xCD, 0x03, 0x49, 0xCC, 0x81, 0xCD, 0x03, + 0x49, 0xCC, 0x82, 0xCD, 0x03, 0x49, 0xCC, 0x83, + 0xCD, 0x03, 0x49, 0xCC, 0x84, 0xCD, 0x03, 0x49, + 0xCC, 0x86, 0xCD, 0x03, 0x49, 0xCC, 0x87, 0xCD, + 0x03, 0x49, 0xCC, 0x89, 0xCD, 0x03, 0x49, 0xCC, + 0x8C, 0xCD, 0x03, 0x49, 0xCC, 0x8F, 0xCD, 0x03, // Bytes 3000 - 303f - 0x83, 0x9B, 0xE3, 0x82, 0x9A, 0x11, 0x4C, 0xE3, - 0x83, 0xA4, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0x88, - 0xE3, 0x82, 0x99, 0x11, 0x4F, 0xE1, 0x84, 0x8E, - 0xE1, 0x85, 0xA1, 0xE1, 0x86, 0xB7, 0xE1, 0x84, - 0x80, 0xE1, 0x85, 0xA9, 0x01, 0x4F, 0xE3, 0x82, - 0xA4, 0xE3, 0x83, 0x8B, 0xE3, 0x83, 0xB3, 0xE3, - 0x82, 0xAF, 0xE3, 0x82, 0x99, 0x11, 0x4F, 0xE3, - 0x82, 0xB7, 0xE3, 0x83, 0xAA, 0xE3, 0x83, 0xB3, + 0x49, 0xCC, 0x91, 0xCD, 0x03, 0x49, 0xCC, 0xA3, + 0xB9, 0x03, 0x49, 0xCC, 0xA8, 0xA9, 0x03, 0x49, + 0xCC, 0xB0, 0xB9, 0x03, 0x4A, 0xCC, 0x82, 0xCD, + 0x03, 0x4B, 0xCC, 0x81, 0xCD, 0x03, 0x4B, 0xCC, + 0x8C, 0xCD, 0x03, 0x4B, 0xCC, 0xA3, 0xB9, 0x03, + 0x4B, 0xCC, 0xA7, 0xA9, 0x03, 0x4B, 0xCC, 0xB1, + 0xB9, 0x03, 0x4C, 0xCC, 0x81, 0xCD, 0x03, 0x4C, + 0xCC, 0x8C, 0xCD, 0x03, 0x4C, 0xCC, 0xA7, 0xA9, // Bytes 3040 - 307f - 0xE3, 0x82, 0xAF, 0xE3, 0x82, 0x99, 0x11, 0x4F, - 0xE3, 0x83, 0x98, 0xE3, 0x82, 0x9A, 0xE3, 0x83, - 0xBC, 0xE3, 0x82, 0xB7, 0xE3, 0x82, 0x99, 0x11, - 0x4F, 0xE3, 0x83, 0x9B, 0xE3, 0x82, 0x9A, 0xE3, - 0x83, 0xB3, 0xE3, 0x83, 0x88, 0xE3, 0x82, 0x99, - 0x11, 0x52, 0xE3, 0x82, 0xA8, 0xE3, 0x82, 0xB9, - 0xE3, 0x82, 0xAF, 0xE3, 0x83, 0xBC, 0xE3, 0x83, - 0x88, 0xE3, 0x82, 0x99, 0x11, 0x52, 0xE3, 0x83, + 0x03, 0x4C, 0xCC, 0xAD, 0xB9, 0x03, 0x4C, 0xCC, + 0xB1, 0xB9, 0x03, 0x4D, 0xCC, 0x81, 0xCD, 0x03, + 0x4D, 0xCC, 0x87, 0xCD, 0x03, 0x4D, 0xCC, 0xA3, + 0xB9, 0x03, 0x4E, 0xCC, 0x80, 0xCD, 0x03, 0x4E, + 0xCC, 0x81, 0xCD, 0x03, 0x4E, 0xCC, 0x83, 0xCD, + 0x03, 0x4E, 0xCC, 0x87, 0xCD, 0x03, 0x4E, 0xCC, + 0x8C, 0xCD, 0x03, 0x4E, 0xCC, 0xA3, 0xB9, 0x03, + 0x4E, 0xCC, 0xA7, 0xA9, 0x03, 0x4E, 0xCC, 0xAD, // Bytes 3080 - 30bf - 0x95, 0xE3, 0x82, 0xA1, 0xE3, 0x83, 0xA9, 0xE3, - 0x83, 0x83, 0xE3, 0x83, 0x88, 0xE3, 0x82, 0x99, - 0x11, 0x86, 0xE0, 0xB3, 0x86, 0xE0, 0xB3, 0x82, - 0x01, 0x86, 0xE0, 0xB7, 0x99, 0xE0, 0xB7, 0x8F, - 0x01, 0x03, 0x3C, 0xCC, 0xB8, 0x05, 0x03, 0x3D, - 0xCC, 0xB8, 0x05, 0x03, 0x3E, 0xCC, 0xB8, 0x05, - 0x03, 0x41, 0xCC, 0x80, 0xCD, 0x03, 0x41, 0xCC, - 0x81, 0xCD, 0x03, 0x41, 0xCC, 0x83, 0xCD, 0x03, + 0xB9, 0x03, 0x4E, 0xCC, 0xB1, 0xB9, 0x03, 0x4F, + 0xCC, 0x80, 0xCD, 0x03, 0x4F, 0xCC, 0x81, 0xCD, + 0x03, 0x4F, 0xCC, 0x86, 0xCD, 0x03, 0x4F, 0xCC, + 0x89, 0xCD, 0x03, 0x4F, 0xCC, 0x8B, 0xCD, 0x03, + 0x4F, 0xCC, 0x8C, 0xCD, 0x03, 0x4F, 0xCC, 0x8F, + 0xCD, 0x03, 0x4F, 0xCC, 0x91, 0xCD, 0x03, 0x50, + 0xCC, 0x81, 0xCD, 0x03, 0x50, 0xCC, 0x87, 0xCD, + 0x03, 0x52, 0xCC, 0x81, 0xCD, 0x03, 0x52, 0xCC, // Bytes 30c0 - 30ff - 0x41, 0xCC, 0x84, 0xCD, 0x03, 0x41, 0xCC, 0x89, - 0xCD, 0x03, 0x41, 0xCC, 0x8C, 0xCD, 0x03, 0x41, - 0xCC, 0x8F, 0xCD, 0x03, 0x41, 0xCC, 0x91, 0xCD, - 0x03, 0x41, 0xCC, 0xA5, 0xB9, 0x03, 0x41, 0xCC, - 0xA8, 0xA9, 0x03, 0x42, 0xCC, 0x87, 0xCD, 0x03, - 0x42, 0xCC, 0xA3, 0xB9, 0x03, 0x42, 0xCC, 0xB1, - 0xB9, 0x03, 0x43, 0xCC, 0x81, 0xCD, 0x03, 0x43, - 0xCC, 0x82, 0xCD, 0x03, 0x43, 0xCC, 0x87, 0xCD, + 0x87, 0xCD, 0x03, 0x52, 0xCC, 0x8C, 0xCD, 0x03, + 0x52, 0xCC, 0x8F, 0xCD, 0x03, 0x52, 0xCC, 0x91, + 0xCD, 0x03, 0x52, 0xCC, 0xA7, 0xA9, 0x03, 0x52, + 0xCC, 0xB1, 0xB9, 0x03, 0x53, 0xCC, 0x82, 0xCD, + 0x03, 0x53, 0xCC, 0x87, 0xCD, 0x03, 0x53, 0xCC, + 0xA6, 0xB9, 0x03, 0x53, 0xCC, 0xA7, 0xA9, 0x03, + 0x54, 0xCC, 0x87, 0xCD, 0x03, 0x54, 0xCC, 0x8C, + 0xCD, 0x03, 0x54, 0xCC, 0xA3, 0xB9, 0x03, 0x54, // Bytes 3100 - 313f - 0x03, 0x43, 0xCC, 0x8C, 0xCD, 0x03, 0x44, 0xCC, - 0x87, 0xCD, 0x03, 0x44, 0xCC, 0x8C, 0xCD, 0x03, - 0x44, 0xCC, 0xA3, 0xB9, 0x03, 0x44, 0xCC, 0xA7, - 0xA9, 0x03, 0x44, 0xCC, 0xAD, 0xB9, 0x03, 0x44, - 0xCC, 0xB1, 0xB9, 0x03, 0x45, 0xCC, 0x80, 0xCD, - 0x03, 0x45, 0xCC, 0x81, 0xCD, 0x03, 0x45, 0xCC, - 0x83, 0xCD, 0x03, 0x45, 0xCC, 0x86, 0xCD, 0x03, - 0x45, 0xCC, 0x87, 0xCD, 0x03, 0x45, 0xCC, 0x88, + 0xCC, 0xA6, 0xB9, 0x03, 0x54, 0xCC, 0xA7, 0xA9, + 0x03, 0x54, 0xCC, 0xAD, 0xB9, 0x03, 0x54, 0xCC, + 0xB1, 0xB9, 0x03, 0x55, 0xCC, 0x80, 0xCD, 0x03, + 0x55, 0xCC, 0x81, 0xCD, 0x03, 0x55, 0xCC, 0x82, + 0xCD, 0x03, 0x55, 0xCC, 0x86, 0xCD, 0x03, 0x55, + 0xCC, 0x89, 0xCD, 0x03, 0x55, 0xCC, 0x8A, 0xCD, + 0x03, 0x55, 0xCC, 0x8B, 0xCD, 0x03, 0x55, 0xCC, + 0x8C, 0xCD, 0x03, 0x55, 0xCC, 0x8F, 0xCD, 0x03, // Bytes 3140 - 317f - 0xCD, 0x03, 0x45, 0xCC, 0x89, 0xCD, 0x03, 0x45, - 0xCC, 0x8C, 0xCD, 0x03, 0x45, 0xCC, 0x8F, 0xCD, - 0x03, 0x45, 0xCC, 0x91, 0xCD, 0x03, 0x45, 0xCC, - 0xA8, 0xA9, 0x03, 0x45, 0xCC, 0xAD, 0xB9, 0x03, - 0x45, 0xCC, 0xB0, 0xB9, 0x03, 0x46, 0xCC, 0x87, - 0xCD, 0x03, 0x47, 0xCC, 0x81, 0xCD, 0x03, 0x47, - 0xCC, 0x82, 0xCD, 0x03, 0x47, 0xCC, 0x84, 0xCD, - 0x03, 0x47, 0xCC, 0x86, 0xCD, 0x03, 0x47, 0xCC, + 0x55, 0xCC, 0x91, 0xCD, 0x03, 0x55, 0xCC, 0xA3, + 0xB9, 0x03, 0x55, 0xCC, 0xA4, 0xB9, 0x03, 0x55, + 0xCC, 0xA8, 0xA9, 0x03, 0x55, 0xCC, 0xAD, 0xB9, + 0x03, 0x55, 0xCC, 0xB0, 0xB9, 0x03, 0x56, 0xCC, + 0x83, 0xCD, 0x03, 0x56, 0xCC, 0xA3, 0xB9, 0x03, + 0x57, 0xCC, 0x80, 0xCD, 0x03, 0x57, 0xCC, 0x81, + 0xCD, 0x03, 0x57, 0xCC, 0x82, 0xCD, 0x03, 0x57, + 0xCC, 0x87, 0xCD, 0x03, 0x57, 0xCC, 0x88, 0xCD, // Bytes 3180 - 31bf - 0x87, 0xCD, 0x03, 0x47, 0xCC, 0x8C, 0xCD, 0x03, - 0x47, 0xCC, 0xA7, 0xA9, 0x03, 0x48, 0xCC, 0x82, - 0xCD, 0x03, 0x48, 0xCC, 0x87, 0xCD, 0x03, 0x48, - 0xCC, 0x88, 0xCD, 0x03, 0x48, 0xCC, 0x8C, 0xCD, - 0x03, 0x48, 0xCC, 0xA3, 0xB9, 0x03, 0x48, 0xCC, - 0xA7, 0xA9, 0x03, 0x48, 0xCC, 0xAE, 0xB9, 0x03, - 0x49, 0xCC, 0x80, 0xCD, 0x03, 0x49, 0xCC, 0x81, - 0xCD, 0x03, 0x49, 0xCC, 0x82, 0xCD, 0x03, 0x49, + 0x03, 0x57, 0xCC, 0xA3, 0xB9, 0x03, 0x58, 0xCC, + 0x87, 0xCD, 0x03, 0x58, 0xCC, 0x88, 0xCD, 0x03, + 0x59, 0xCC, 0x80, 0xCD, 0x03, 0x59, 0xCC, 0x81, + 0xCD, 0x03, 0x59, 0xCC, 0x82, 0xCD, 0x03, 0x59, + 0xCC, 0x83, 0xCD, 0x03, 0x59, 0xCC, 0x84, 0xCD, + 0x03, 0x59, 0xCC, 0x87, 0xCD, 0x03, 0x59, 0xCC, + 0x88, 0xCD, 0x03, 0x59, 0xCC, 0x89, 0xCD, 0x03, + 0x59, 0xCC, 0xA3, 0xB9, 0x03, 0x5A, 0xCC, 0x81, // Bytes 31c0 - 31ff - 0xCC, 0x83, 0xCD, 0x03, 0x49, 0xCC, 0x84, 0xCD, - 0x03, 0x49, 0xCC, 0x86, 0xCD, 0x03, 0x49, 0xCC, - 0x87, 0xCD, 0x03, 0x49, 0xCC, 0x89, 0xCD, 0x03, - 0x49, 0xCC, 0x8C, 0xCD, 0x03, 0x49, 0xCC, 0x8F, - 0xCD, 0x03, 0x49, 0xCC, 0x91, 0xCD, 0x03, 0x49, - 0xCC, 0xA3, 0xB9, 0x03, 0x49, 0xCC, 0xA8, 0xA9, - 0x03, 0x49, 0xCC, 0xB0, 0xB9, 0x03, 0x4A, 0xCC, - 0x82, 0xCD, 0x03, 0x4B, 0xCC, 0x81, 0xCD, 0x03, + 0xCD, 0x03, 0x5A, 0xCC, 0x82, 0xCD, 0x03, 0x5A, + 0xCC, 0x87, 0xCD, 0x03, 0x5A, 0xCC, 0x8C, 0xCD, + 0x03, 0x5A, 0xCC, 0xA3, 0xB9, 0x03, 0x5A, 0xCC, + 0xB1, 0xB9, 0x03, 0x61, 0xCC, 0x80, 0xCD, 0x03, + 0x61, 0xCC, 0x81, 0xCD, 0x03, 0x61, 0xCC, 0x83, + 0xCD, 0x03, 0x61, 0xCC, 0x84, 0xCD, 0x03, 0x61, + 0xCC, 0x89, 0xCD, 0x03, 0x61, 0xCC, 0x8C, 0xCD, + 0x03, 0x61, 0xCC, 0x8F, 0xCD, 0x03, 0x61, 0xCC, // Bytes 3200 - 323f - 0x4B, 0xCC, 0x8C, 0xCD, 0x03, 0x4B, 0xCC, 0xA3, - 0xB9, 0x03, 0x4B, 0xCC, 0xA7, 0xA9, 0x03, 0x4B, - 0xCC, 0xB1, 0xB9, 0x03, 0x4C, 0xCC, 0x81, 0xCD, - 0x03, 0x4C, 0xCC, 0x8C, 0xCD, 0x03, 0x4C, 0xCC, - 0xA7, 0xA9, 0x03, 0x4C, 0xCC, 0xAD, 0xB9, 0x03, - 0x4C, 0xCC, 0xB1, 0xB9, 0x03, 0x4D, 0xCC, 0x81, - 0xCD, 0x03, 0x4D, 0xCC, 0x87, 0xCD, 0x03, 0x4D, - 0xCC, 0xA3, 0xB9, 0x03, 0x4E, 0xCC, 0x80, 0xCD, + 0x91, 0xCD, 0x03, 0x61, 0xCC, 0xA5, 0xB9, 0x03, + 0x61, 0xCC, 0xA8, 0xA9, 0x03, 0x62, 0xCC, 0x87, + 0xCD, 0x03, 0x62, 0xCC, 0xA3, 0xB9, 0x03, 0x62, + 0xCC, 0xB1, 0xB9, 0x03, 0x63, 0xCC, 0x81, 0xCD, + 0x03, 0x63, 0xCC, 0x82, 0xCD, 0x03, 0x63, 0xCC, + 0x87, 0xCD, 0x03, 0x63, 0xCC, 0x8C, 0xCD, 0x03, + 0x64, 0xCC, 0x87, 0xCD, 0x03, 0x64, 0xCC, 0x8C, + 0xCD, 0x03, 0x64, 0xCC, 0xA3, 0xB9, 0x03, 0x64, // Bytes 3240 - 327f - 0x03, 0x4E, 0xCC, 0x81, 0xCD, 0x03, 0x4E, 0xCC, - 0x83, 0xCD, 0x03, 0x4E, 0xCC, 0x87, 0xCD, 0x03, - 0x4E, 0xCC, 0x8C, 0xCD, 0x03, 0x4E, 0xCC, 0xA3, - 0xB9, 0x03, 0x4E, 0xCC, 0xA7, 0xA9, 0x03, 0x4E, - 0xCC, 0xAD, 0xB9, 0x03, 0x4E, 0xCC, 0xB1, 0xB9, - 0x03, 0x4F, 0xCC, 0x80, 0xCD, 0x03, 0x4F, 0xCC, - 0x81, 0xCD, 0x03, 0x4F, 0xCC, 0x86, 0xCD, 0x03, - 0x4F, 0xCC, 0x89, 0xCD, 0x03, 0x4F, 0xCC, 0x8B, + 0xCC, 0xA7, 0xA9, 0x03, 0x64, 0xCC, 0xAD, 0xB9, + 0x03, 0x64, 0xCC, 0xB1, 0xB9, 0x03, 0x65, 0xCC, + 0x80, 0xCD, 0x03, 0x65, 0xCC, 0x81, 0xCD, 0x03, + 0x65, 0xCC, 0x83, 0xCD, 0x03, 0x65, 0xCC, 0x86, + 0xCD, 0x03, 0x65, 0xCC, 0x87, 0xCD, 0x03, 0x65, + 0xCC, 0x88, 0xCD, 0x03, 0x65, 0xCC, 0x89, 0xCD, + 0x03, 0x65, 0xCC, 0x8C, 0xCD, 0x03, 0x65, 0xCC, + 0x8F, 0xCD, 0x03, 0x65, 0xCC, 0x91, 0xCD, 0x03, // Bytes 3280 - 32bf - 0xCD, 0x03, 0x4F, 0xCC, 0x8C, 0xCD, 0x03, 0x4F, - 0xCC, 0x8F, 0xCD, 0x03, 0x4F, 0xCC, 0x91, 0xCD, - 0x03, 0x50, 0xCC, 0x81, 0xCD, 0x03, 0x50, 0xCC, - 0x87, 0xCD, 0x03, 0x52, 0xCC, 0x81, 0xCD, 0x03, - 0x52, 0xCC, 0x87, 0xCD, 0x03, 0x52, 0xCC, 0x8C, - 0xCD, 0x03, 0x52, 0xCC, 0x8F, 0xCD, 0x03, 0x52, - 0xCC, 0x91, 0xCD, 0x03, 0x52, 0xCC, 0xA7, 0xA9, - 0x03, 0x52, 0xCC, 0xB1, 0xB9, 0x03, 0x53, 0xCC, + 0x65, 0xCC, 0xA8, 0xA9, 0x03, 0x65, 0xCC, 0xAD, + 0xB9, 0x03, 0x65, 0xCC, 0xB0, 0xB9, 0x03, 0x66, + 0xCC, 0x87, 0xCD, 0x03, 0x67, 0xCC, 0x81, 0xCD, + 0x03, 0x67, 0xCC, 0x82, 0xCD, 0x03, 0x67, 0xCC, + 0x84, 0xCD, 0x03, 0x67, 0xCC, 0x86, 0xCD, 0x03, + 0x67, 0xCC, 0x87, 0xCD, 0x03, 0x67, 0xCC, 0x8C, + 0xCD, 0x03, 0x67, 0xCC, 0xA7, 0xA9, 0x03, 0x68, + 0xCC, 0x82, 0xCD, 0x03, 0x68, 0xCC, 0x87, 0xCD, // Bytes 32c0 - 32ff - 0x82, 0xCD, 0x03, 0x53, 0xCC, 0x87, 0xCD, 0x03, - 0x53, 0xCC, 0xA6, 0xB9, 0x03, 0x53, 0xCC, 0xA7, - 0xA9, 0x03, 0x54, 0xCC, 0x87, 0xCD, 0x03, 0x54, - 0xCC, 0x8C, 0xCD, 0x03, 0x54, 0xCC, 0xA3, 0xB9, - 0x03, 0x54, 0xCC, 0xA6, 0xB9, 0x03, 0x54, 0xCC, - 0xA7, 0xA9, 0x03, 0x54, 0xCC, 0xAD, 0xB9, 0x03, - 0x54, 0xCC, 0xB1, 0xB9, 0x03, 0x55, 0xCC, 0x80, - 0xCD, 0x03, 0x55, 0xCC, 0x81, 0xCD, 0x03, 0x55, + 0x03, 0x68, 0xCC, 0x88, 0xCD, 0x03, 0x68, 0xCC, + 0x8C, 0xCD, 0x03, 0x68, 0xCC, 0xA3, 0xB9, 0x03, + 0x68, 0xCC, 0xA7, 0xA9, 0x03, 0x68, 0xCC, 0xAE, + 0xB9, 0x03, 0x68, 0xCC, 0xB1, 0xB9, 0x03, 0x69, + 0xCC, 0x80, 0xCD, 0x03, 0x69, 0xCC, 0x81, 0xCD, + 0x03, 0x69, 0xCC, 0x82, 0xCD, 0x03, 0x69, 0xCC, + 0x83, 0xCD, 0x03, 0x69, 0xCC, 0x84, 0xCD, 0x03, + 0x69, 0xCC, 0x86, 0xCD, 0x03, 0x69, 0xCC, 0x89, // Bytes 3300 - 333f - 0xCC, 0x82, 0xCD, 0x03, 0x55, 0xCC, 0x86, 0xCD, - 0x03, 0x55, 0xCC, 0x89, 0xCD, 0x03, 0x55, 0xCC, - 0x8A, 0xCD, 0x03, 0x55, 0xCC, 0x8B, 0xCD, 0x03, - 0x55, 0xCC, 0x8C, 0xCD, 0x03, 0x55, 0xCC, 0x8F, - 0xCD, 0x03, 0x55, 0xCC, 0x91, 0xCD, 0x03, 0x55, - 0xCC, 0xA3, 0xB9, 0x03, 0x55, 0xCC, 0xA4, 0xB9, - 0x03, 0x55, 0xCC, 0xA8, 0xA9, 0x03, 0x55, 0xCC, - 0xAD, 0xB9, 0x03, 0x55, 0xCC, 0xB0, 0xB9, 0x03, + 0xCD, 0x03, 0x69, 0xCC, 0x8C, 0xCD, 0x03, 0x69, + 0xCC, 0x8F, 0xCD, 0x03, 0x69, 0xCC, 0x91, 0xCD, + 0x03, 0x69, 0xCC, 0xA3, 0xB9, 0x03, 0x69, 0xCC, + 0xA8, 0xA9, 0x03, 0x69, 0xCC, 0xB0, 0xB9, 0x03, + 0x6A, 0xCC, 0x82, 0xCD, 0x03, 0x6A, 0xCC, 0x8C, + 0xCD, 0x03, 0x6B, 0xCC, 0x81, 0xCD, 0x03, 0x6B, + 0xCC, 0x8C, 0xCD, 0x03, 0x6B, 0xCC, 0xA3, 0xB9, + 0x03, 0x6B, 0xCC, 0xA7, 0xA9, 0x03, 0x6B, 0xCC, // Bytes 3340 - 337f - 0x56, 0xCC, 0x83, 0xCD, 0x03, 0x56, 0xCC, 0xA3, - 0xB9, 0x03, 0x57, 0xCC, 0x80, 0xCD, 0x03, 0x57, - 0xCC, 0x81, 0xCD, 0x03, 0x57, 0xCC, 0x82, 0xCD, - 0x03, 0x57, 0xCC, 0x87, 0xCD, 0x03, 0x57, 0xCC, - 0x88, 0xCD, 0x03, 0x57, 0xCC, 0xA3, 0xB9, 0x03, - 0x58, 0xCC, 0x87, 0xCD, 0x03, 0x58, 0xCC, 0x88, - 0xCD, 0x03, 0x59, 0xCC, 0x80, 0xCD, 0x03, 0x59, - 0xCC, 0x81, 0xCD, 0x03, 0x59, 0xCC, 0x82, 0xCD, + 0xB1, 0xB9, 0x03, 0x6C, 0xCC, 0x81, 0xCD, 0x03, + 0x6C, 0xCC, 0x8C, 0xCD, 0x03, 0x6C, 0xCC, 0xA7, + 0xA9, 0x03, 0x6C, 0xCC, 0xAD, 0xB9, 0x03, 0x6C, + 0xCC, 0xB1, 0xB9, 0x03, 0x6D, 0xCC, 0x81, 0xCD, + 0x03, 0x6D, 0xCC, 0x87, 0xCD, 0x03, 0x6D, 0xCC, + 0xA3, 0xB9, 0x03, 0x6E, 0xCC, 0x80, 0xCD, 0x03, + 0x6E, 0xCC, 0x81, 0xCD, 0x03, 0x6E, 0xCC, 0x83, + 0xCD, 0x03, 0x6E, 0xCC, 0x87, 0xCD, 0x03, 0x6E, // Bytes 3380 - 33bf - 0x03, 0x59, 0xCC, 0x83, 0xCD, 0x03, 0x59, 0xCC, - 0x84, 0xCD, 0x03, 0x59, 0xCC, 0x87, 0xCD, 0x03, - 0x59, 0xCC, 0x88, 0xCD, 0x03, 0x59, 0xCC, 0x89, - 0xCD, 0x03, 0x59, 0xCC, 0xA3, 0xB9, 0x03, 0x5A, - 0xCC, 0x81, 0xCD, 0x03, 0x5A, 0xCC, 0x82, 0xCD, - 0x03, 0x5A, 0xCC, 0x87, 0xCD, 0x03, 0x5A, 0xCC, - 0x8C, 0xCD, 0x03, 0x5A, 0xCC, 0xA3, 0xB9, 0x03, - 0x5A, 0xCC, 0xB1, 0xB9, 0x03, 0x61, 0xCC, 0x80, + 0xCC, 0x8C, 0xCD, 0x03, 0x6E, 0xCC, 0xA3, 0xB9, + 0x03, 0x6E, 0xCC, 0xA7, 0xA9, 0x03, 0x6E, 0xCC, + 0xAD, 0xB9, 0x03, 0x6E, 0xCC, 0xB1, 0xB9, 0x03, + 0x6F, 0xCC, 0x80, 0xCD, 0x03, 0x6F, 0xCC, 0x81, + 0xCD, 0x03, 0x6F, 0xCC, 0x86, 0xCD, 0x03, 0x6F, + 0xCC, 0x89, 0xCD, 0x03, 0x6F, 0xCC, 0x8B, 0xCD, + 0x03, 0x6F, 0xCC, 0x8C, 0xCD, 0x03, 0x6F, 0xCC, + 0x8F, 0xCD, 0x03, 0x6F, 0xCC, 0x91, 0xCD, 0x03, // Bytes 33c0 - 33ff - 0xCD, 0x03, 0x61, 0xCC, 0x81, 0xCD, 0x03, 0x61, - 0xCC, 0x83, 0xCD, 0x03, 0x61, 0xCC, 0x84, 0xCD, - 0x03, 0x61, 0xCC, 0x89, 0xCD, 0x03, 0x61, 0xCC, - 0x8C, 0xCD, 0x03, 0x61, 0xCC, 0x8F, 0xCD, 0x03, - 0x61, 0xCC, 0x91, 0xCD, 0x03, 0x61, 0xCC, 0xA5, - 0xB9, 0x03, 0x61, 0xCC, 0xA8, 0xA9, 0x03, 0x62, - 0xCC, 0x87, 0xCD, 0x03, 0x62, 0xCC, 0xA3, 0xB9, - 0x03, 0x62, 0xCC, 0xB1, 0xB9, 0x03, 0x63, 0xCC, + 0x70, 0xCC, 0x81, 0xCD, 0x03, 0x70, 0xCC, 0x87, + 0xCD, 0x03, 0x72, 0xCC, 0x81, 0xCD, 0x03, 0x72, + 0xCC, 0x87, 0xCD, 0x03, 0x72, 0xCC, 0x8C, 0xCD, + 0x03, 0x72, 0xCC, 0x8F, 0xCD, 0x03, 0x72, 0xCC, + 0x91, 0xCD, 0x03, 0x72, 0xCC, 0xA7, 0xA9, 0x03, + 0x72, 0xCC, 0xB1, 0xB9, 0x03, 0x73, 0xCC, 0x82, + 0xCD, 0x03, 0x73, 0xCC, 0x87, 0xCD, 0x03, 0x73, + 0xCC, 0xA6, 0xB9, 0x03, 0x73, 0xCC, 0xA7, 0xA9, // Bytes 3400 - 343f - 0x81, 0xCD, 0x03, 0x63, 0xCC, 0x82, 0xCD, 0x03, - 0x63, 0xCC, 0x87, 0xCD, 0x03, 0x63, 0xCC, 0x8C, - 0xCD, 0x03, 0x64, 0xCC, 0x87, 0xCD, 0x03, 0x64, - 0xCC, 0x8C, 0xCD, 0x03, 0x64, 0xCC, 0xA3, 0xB9, - 0x03, 0x64, 0xCC, 0xA7, 0xA9, 0x03, 0x64, 0xCC, - 0xAD, 0xB9, 0x03, 0x64, 0xCC, 0xB1, 0xB9, 0x03, - 0x65, 0xCC, 0x80, 0xCD, 0x03, 0x65, 0xCC, 0x81, - 0xCD, 0x03, 0x65, 0xCC, 0x83, 0xCD, 0x03, 0x65, + 0x03, 0x74, 0xCC, 0x87, 0xCD, 0x03, 0x74, 0xCC, + 0x88, 0xCD, 0x03, 0x74, 0xCC, 0x8C, 0xCD, 0x03, + 0x74, 0xCC, 0xA3, 0xB9, 0x03, 0x74, 0xCC, 0xA6, + 0xB9, 0x03, 0x74, 0xCC, 0xA7, 0xA9, 0x03, 0x74, + 0xCC, 0xAD, 0xB9, 0x03, 0x74, 0xCC, 0xB1, 0xB9, + 0x03, 0x75, 0xCC, 0x80, 0xCD, 0x03, 0x75, 0xCC, + 0x81, 0xCD, 0x03, 0x75, 0xCC, 0x82, 0xCD, 0x03, + 0x75, 0xCC, 0x86, 0xCD, 0x03, 0x75, 0xCC, 0x89, // Bytes 3440 - 347f - 0xCC, 0x86, 0xCD, 0x03, 0x65, 0xCC, 0x87, 0xCD, - 0x03, 0x65, 0xCC, 0x88, 0xCD, 0x03, 0x65, 0xCC, - 0x89, 0xCD, 0x03, 0x65, 0xCC, 0x8C, 0xCD, 0x03, - 0x65, 0xCC, 0x8F, 0xCD, 0x03, 0x65, 0xCC, 0x91, - 0xCD, 0x03, 0x65, 0xCC, 0xA8, 0xA9, 0x03, 0x65, - 0xCC, 0xAD, 0xB9, 0x03, 0x65, 0xCC, 0xB0, 0xB9, - 0x03, 0x66, 0xCC, 0x87, 0xCD, 0x03, 0x67, 0xCC, - 0x81, 0xCD, 0x03, 0x67, 0xCC, 0x82, 0xCD, 0x03, + 0xCD, 0x03, 0x75, 0xCC, 0x8A, 0xCD, 0x03, 0x75, + 0xCC, 0x8B, 0xCD, 0x03, 0x75, 0xCC, 0x8C, 0xCD, + 0x03, 0x75, 0xCC, 0x8F, 0xCD, 0x03, 0x75, 0xCC, + 0x91, 0xCD, 0x03, 0x75, 0xCC, 0xA3, 0xB9, 0x03, + 0x75, 0xCC, 0xA4, 0xB9, 0x03, 0x75, 0xCC, 0xA8, + 0xA9, 0x03, 0x75, 0xCC, 0xAD, 0xB9, 0x03, 0x75, + 0xCC, 0xB0, 0xB9, 0x03, 0x76, 0xCC, 0x83, 0xCD, + 0x03, 0x76, 0xCC, 0xA3, 0xB9, 0x03, 0x77, 0xCC, // Bytes 3480 - 34bf - 0x67, 0xCC, 0x84, 0xCD, 0x03, 0x67, 0xCC, 0x86, - 0xCD, 0x03, 0x67, 0xCC, 0x87, 0xCD, 0x03, 0x67, - 0xCC, 0x8C, 0xCD, 0x03, 0x67, 0xCC, 0xA7, 0xA9, - 0x03, 0x68, 0xCC, 0x82, 0xCD, 0x03, 0x68, 0xCC, - 0x87, 0xCD, 0x03, 0x68, 0xCC, 0x88, 0xCD, 0x03, - 0x68, 0xCC, 0x8C, 0xCD, 0x03, 0x68, 0xCC, 0xA3, - 0xB9, 0x03, 0x68, 0xCC, 0xA7, 0xA9, 0x03, 0x68, - 0xCC, 0xAE, 0xB9, 0x03, 0x68, 0xCC, 0xB1, 0xB9, + 0x80, 0xCD, 0x03, 0x77, 0xCC, 0x81, 0xCD, 0x03, + 0x77, 0xCC, 0x82, 0xCD, 0x03, 0x77, 0xCC, 0x87, + 0xCD, 0x03, 0x77, 0xCC, 0x88, 0xCD, 0x03, 0x77, + 0xCC, 0x8A, 0xCD, 0x03, 0x77, 0xCC, 0xA3, 0xB9, + 0x03, 0x78, 0xCC, 0x87, 0xCD, 0x03, 0x78, 0xCC, + 0x88, 0xCD, 0x03, 0x79, 0xCC, 0x80, 0xCD, 0x03, + 0x79, 0xCC, 0x81, 0xCD, 0x03, 0x79, 0xCC, 0x82, + 0xCD, 0x03, 0x79, 0xCC, 0x83, 0xCD, 0x03, 0x79, // Bytes 34c0 - 34ff - 0x03, 0x69, 0xCC, 0x80, 0xCD, 0x03, 0x69, 0xCC, - 0x81, 0xCD, 0x03, 0x69, 0xCC, 0x82, 0xCD, 0x03, - 0x69, 0xCC, 0x83, 0xCD, 0x03, 0x69, 0xCC, 0x84, - 0xCD, 0x03, 0x69, 0xCC, 0x86, 0xCD, 0x03, 0x69, - 0xCC, 0x89, 0xCD, 0x03, 0x69, 0xCC, 0x8C, 0xCD, - 0x03, 0x69, 0xCC, 0x8F, 0xCD, 0x03, 0x69, 0xCC, - 0x91, 0xCD, 0x03, 0x69, 0xCC, 0xA3, 0xB9, 0x03, - 0x69, 0xCC, 0xA8, 0xA9, 0x03, 0x69, 0xCC, 0xB0, + 0xCC, 0x84, 0xCD, 0x03, 0x79, 0xCC, 0x87, 0xCD, + 0x03, 0x79, 0xCC, 0x88, 0xCD, 0x03, 0x79, 0xCC, + 0x89, 0xCD, 0x03, 0x79, 0xCC, 0x8A, 0xCD, 0x03, + 0x79, 0xCC, 0xA3, 0xB9, 0x03, 0x7A, 0xCC, 0x81, + 0xCD, 0x03, 0x7A, 0xCC, 0x82, 0xCD, 0x03, 0x7A, + 0xCC, 0x87, 0xCD, 0x03, 0x7A, 0xCC, 0x8C, 0xCD, + 0x03, 0x7A, 0xCC, 0xA3, 0xB9, 0x03, 0x7A, 0xCC, + 0xB1, 0xB9, 0x04, 0xC2, 0xA8, 0xCC, 0x80, 0xCE, // Bytes 3500 - 353f - 0xB9, 0x03, 0x6A, 0xCC, 0x82, 0xCD, 0x03, 0x6A, - 0xCC, 0x8C, 0xCD, 0x03, 0x6B, 0xCC, 0x81, 0xCD, - 0x03, 0x6B, 0xCC, 0x8C, 0xCD, 0x03, 0x6B, 0xCC, - 0xA3, 0xB9, 0x03, 0x6B, 0xCC, 0xA7, 0xA9, 0x03, - 0x6B, 0xCC, 0xB1, 0xB9, 0x03, 0x6C, 0xCC, 0x81, - 0xCD, 0x03, 0x6C, 0xCC, 0x8C, 0xCD, 0x03, 0x6C, - 0xCC, 0xA7, 0xA9, 0x03, 0x6C, 0xCC, 0xAD, 0xB9, - 0x03, 0x6C, 0xCC, 0xB1, 0xB9, 0x03, 0x6D, 0xCC, + 0x04, 0xC2, 0xA8, 0xCC, 0x81, 0xCE, 0x04, 0xC2, + 0xA8, 0xCD, 0x82, 0xCE, 0x04, 0xC3, 0x86, 0xCC, + 0x81, 0xCD, 0x04, 0xC3, 0x86, 0xCC, 0x84, 0xCD, + 0x04, 0xC3, 0x98, 0xCC, 0x81, 0xCD, 0x04, 0xC3, + 0xA6, 0xCC, 0x81, 0xCD, 0x04, 0xC3, 0xA6, 0xCC, + 0x84, 0xCD, 0x04, 0xC3, 0xB8, 0xCC, 0x81, 0xCD, + 0x04, 0xC5, 0xBF, 0xCC, 0x87, 0xCD, 0x04, 0xC6, + 0xB7, 0xCC, 0x8C, 0xCD, 0x04, 0xCA, 0x92, 0xCC, // Bytes 3540 - 357f - 0x81, 0xCD, 0x03, 0x6D, 0xCC, 0x87, 0xCD, 0x03, - 0x6D, 0xCC, 0xA3, 0xB9, 0x03, 0x6E, 0xCC, 0x80, - 0xCD, 0x03, 0x6E, 0xCC, 0x81, 0xCD, 0x03, 0x6E, - 0xCC, 0x83, 0xCD, 0x03, 0x6E, 0xCC, 0x87, 0xCD, - 0x03, 0x6E, 0xCC, 0x8C, 0xCD, 0x03, 0x6E, 0xCC, - 0xA3, 0xB9, 0x03, 0x6E, 0xCC, 0xA7, 0xA9, 0x03, - 0x6E, 0xCC, 0xAD, 0xB9, 0x03, 0x6E, 0xCC, 0xB1, - 0xB9, 0x03, 0x6F, 0xCC, 0x80, 0xCD, 0x03, 0x6F, + 0x8C, 0xCD, 0x04, 0xCE, 0x91, 0xCC, 0x80, 0xCD, + 0x04, 0xCE, 0x91, 0xCC, 0x81, 0xCD, 0x04, 0xCE, + 0x91, 0xCC, 0x84, 0xCD, 0x04, 0xCE, 0x91, 0xCC, + 0x86, 0xCD, 0x04, 0xCE, 0x91, 0xCD, 0x85, 0xDD, + 0x04, 0xCE, 0x95, 0xCC, 0x80, 0xCD, 0x04, 0xCE, + 0x95, 0xCC, 0x81, 0xCD, 0x04, 0xCE, 0x97, 0xCC, + 0x80, 0xCD, 0x04, 0xCE, 0x97, 0xCC, 0x81, 0xCD, + 0x04, 0xCE, 0x97, 0xCD, 0x85, 0xDD, 0x04, 0xCE, // Bytes 3580 - 35bf - 0xCC, 0x81, 0xCD, 0x03, 0x6F, 0xCC, 0x86, 0xCD, - 0x03, 0x6F, 0xCC, 0x89, 0xCD, 0x03, 0x6F, 0xCC, - 0x8B, 0xCD, 0x03, 0x6F, 0xCC, 0x8C, 0xCD, 0x03, - 0x6F, 0xCC, 0x8F, 0xCD, 0x03, 0x6F, 0xCC, 0x91, - 0xCD, 0x03, 0x70, 0xCC, 0x81, 0xCD, 0x03, 0x70, - 0xCC, 0x87, 0xCD, 0x03, 0x72, 0xCC, 0x81, 0xCD, - 0x03, 0x72, 0xCC, 0x87, 0xCD, 0x03, 0x72, 0xCC, - 0x8C, 0xCD, 0x03, 0x72, 0xCC, 0x8F, 0xCD, 0x03, + 0x99, 0xCC, 0x80, 0xCD, 0x04, 0xCE, 0x99, 0xCC, + 0x81, 0xCD, 0x04, 0xCE, 0x99, 0xCC, 0x84, 0xCD, + 0x04, 0xCE, 0x99, 0xCC, 0x86, 0xCD, 0x04, 0xCE, + 0x99, 0xCC, 0x88, 0xCD, 0x04, 0xCE, 0x9F, 0xCC, + 0x80, 0xCD, 0x04, 0xCE, 0x9F, 0xCC, 0x81, 0xCD, + 0x04, 0xCE, 0xA1, 0xCC, 0x94, 0xCD, 0x04, 0xCE, + 0xA5, 0xCC, 0x80, 0xCD, 0x04, 0xCE, 0xA5, 0xCC, + 0x81, 0xCD, 0x04, 0xCE, 0xA5, 0xCC, 0x84, 0xCD, // Bytes 35c0 - 35ff - 0x72, 0xCC, 0x91, 0xCD, 0x03, 0x72, 0xCC, 0xA7, - 0xA9, 0x03, 0x72, 0xCC, 0xB1, 0xB9, 0x03, 0x73, - 0xCC, 0x82, 0xCD, 0x03, 0x73, 0xCC, 0x87, 0xCD, - 0x03, 0x73, 0xCC, 0xA6, 0xB9, 0x03, 0x73, 0xCC, - 0xA7, 0xA9, 0x03, 0x74, 0xCC, 0x87, 0xCD, 0x03, - 0x74, 0xCC, 0x88, 0xCD, 0x03, 0x74, 0xCC, 0x8C, - 0xCD, 0x03, 0x74, 0xCC, 0xA3, 0xB9, 0x03, 0x74, - 0xCC, 0xA6, 0xB9, 0x03, 0x74, 0xCC, 0xA7, 0xA9, + 0x04, 0xCE, 0xA5, 0xCC, 0x86, 0xCD, 0x04, 0xCE, + 0xA5, 0xCC, 0x88, 0xCD, 0x04, 0xCE, 0xA9, 0xCC, + 0x80, 0xCD, 0x04, 0xCE, 0xA9, 0xCC, 0x81, 0xCD, + 0x04, 0xCE, 0xA9, 0xCD, 0x85, 0xDD, 0x04, 0xCE, + 0xB1, 0xCC, 0x84, 0xCD, 0x04, 0xCE, 0xB1, 0xCC, + 0x86, 0xCD, 0x04, 0xCE, 0xB1, 0xCD, 0x85, 0xDD, + 0x04, 0xCE, 0xB5, 0xCC, 0x80, 0xCD, 0x04, 0xCE, + 0xB5, 0xCC, 0x81, 0xCD, 0x04, 0xCE, 0xB7, 0xCD, // Bytes 3600 - 363f - 0x03, 0x74, 0xCC, 0xAD, 0xB9, 0x03, 0x74, 0xCC, - 0xB1, 0xB9, 0x03, 0x75, 0xCC, 0x80, 0xCD, 0x03, - 0x75, 0xCC, 0x81, 0xCD, 0x03, 0x75, 0xCC, 0x82, - 0xCD, 0x03, 0x75, 0xCC, 0x86, 0xCD, 0x03, 0x75, - 0xCC, 0x89, 0xCD, 0x03, 0x75, 0xCC, 0x8A, 0xCD, - 0x03, 0x75, 0xCC, 0x8B, 0xCD, 0x03, 0x75, 0xCC, - 0x8C, 0xCD, 0x03, 0x75, 0xCC, 0x8F, 0xCD, 0x03, - 0x75, 0xCC, 0x91, 0xCD, 0x03, 0x75, 0xCC, 0xA3, + 0x85, 0xDD, 0x04, 0xCE, 0xB9, 0xCC, 0x80, 0xCD, + 0x04, 0xCE, 0xB9, 0xCC, 0x81, 0xCD, 0x04, 0xCE, + 0xB9, 0xCC, 0x84, 0xCD, 0x04, 0xCE, 0xB9, 0xCC, + 0x86, 0xCD, 0x04, 0xCE, 0xB9, 0xCD, 0x82, 0xCD, + 0x04, 0xCE, 0xBF, 0xCC, 0x80, 0xCD, 0x04, 0xCE, + 0xBF, 0xCC, 0x81, 0xCD, 0x04, 0xCF, 0x81, 0xCC, + 0x93, 0xCD, 0x04, 0xCF, 0x81, 0xCC, 0x94, 0xCD, + 0x04, 0xCF, 0x85, 0xCC, 0x80, 0xCD, 0x04, 0xCF, // Bytes 3640 - 367f - 0xB9, 0x03, 0x75, 0xCC, 0xA4, 0xB9, 0x03, 0x75, - 0xCC, 0xA8, 0xA9, 0x03, 0x75, 0xCC, 0xAD, 0xB9, - 0x03, 0x75, 0xCC, 0xB0, 0xB9, 0x03, 0x76, 0xCC, - 0x83, 0xCD, 0x03, 0x76, 0xCC, 0xA3, 0xB9, 0x03, - 0x77, 0xCC, 0x80, 0xCD, 0x03, 0x77, 0xCC, 0x81, - 0xCD, 0x03, 0x77, 0xCC, 0x82, 0xCD, 0x03, 0x77, - 0xCC, 0x87, 0xCD, 0x03, 0x77, 0xCC, 0x88, 0xCD, - 0x03, 0x77, 0xCC, 0x8A, 0xCD, 0x03, 0x77, 0xCC, + 0x85, 0xCC, 0x81, 0xCD, 0x04, 0xCF, 0x85, 0xCC, + 0x84, 0xCD, 0x04, 0xCF, 0x85, 0xCC, 0x86, 0xCD, + 0x04, 0xCF, 0x85, 0xCD, 0x82, 0xCD, 0x04, 0xCF, + 0x89, 0xCD, 0x85, 0xDD, 0x04, 0xCF, 0x92, 0xCC, + 0x81, 0xCD, 0x04, 0xCF, 0x92, 0xCC, 0x88, 0xCD, + 0x04, 0xD0, 0x86, 0xCC, 0x88, 0xCD, 0x04, 0xD0, + 0x90, 0xCC, 0x86, 0xCD, 0x04, 0xD0, 0x90, 0xCC, + 0x88, 0xCD, 0x04, 0xD0, 0x93, 0xCC, 0x81, 0xCD, // Bytes 3680 - 36bf - 0xA3, 0xB9, 0x03, 0x78, 0xCC, 0x87, 0xCD, 0x03, - 0x78, 0xCC, 0x88, 0xCD, 0x03, 0x79, 0xCC, 0x80, - 0xCD, 0x03, 0x79, 0xCC, 0x81, 0xCD, 0x03, 0x79, - 0xCC, 0x82, 0xCD, 0x03, 0x79, 0xCC, 0x83, 0xCD, - 0x03, 0x79, 0xCC, 0x84, 0xCD, 0x03, 0x79, 0xCC, - 0x87, 0xCD, 0x03, 0x79, 0xCC, 0x88, 0xCD, 0x03, - 0x79, 0xCC, 0x89, 0xCD, 0x03, 0x79, 0xCC, 0x8A, - 0xCD, 0x03, 0x79, 0xCC, 0xA3, 0xB9, 0x03, 0x7A, + 0x04, 0xD0, 0x95, 0xCC, 0x80, 0xCD, 0x04, 0xD0, + 0x95, 0xCC, 0x86, 0xCD, 0x04, 0xD0, 0x95, 0xCC, + 0x88, 0xCD, 0x04, 0xD0, 0x96, 0xCC, 0x86, 0xCD, + 0x04, 0xD0, 0x96, 0xCC, 0x88, 0xCD, 0x04, 0xD0, + 0x97, 0xCC, 0x88, 0xCD, 0x04, 0xD0, 0x98, 0xCC, + 0x80, 0xCD, 0x04, 0xD0, 0x98, 0xCC, 0x84, 0xCD, + 0x04, 0xD0, 0x98, 0xCC, 0x86, 0xCD, 0x04, 0xD0, + 0x98, 0xCC, 0x88, 0xCD, 0x04, 0xD0, 0x9A, 0xCC, // Bytes 36c0 - 36ff - 0xCC, 0x81, 0xCD, 0x03, 0x7A, 0xCC, 0x82, 0xCD, - 0x03, 0x7A, 0xCC, 0x87, 0xCD, 0x03, 0x7A, 0xCC, - 0x8C, 0xCD, 0x03, 0x7A, 0xCC, 0xA3, 0xB9, 0x03, - 0x7A, 0xCC, 0xB1, 0xB9, 0x04, 0xC2, 0xA8, 0xCC, - 0x80, 0xCE, 0x04, 0xC2, 0xA8, 0xCC, 0x81, 0xCE, - 0x04, 0xC2, 0xA8, 0xCD, 0x82, 0xCE, 0x04, 0xC3, - 0x86, 0xCC, 0x81, 0xCD, 0x04, 0xC3, 0x86, 0xCC, - 0x84, 0xCD, 0x04, 0xC3, 0x98, 0xCC, 0x81, 0xCD, + 0x81, 0xCD, 0x04, 0xD0, 0x9E, 0xCC, 0x88, 0xCD, + 0x04, 0xD0, 0xA3, 0xCC, 0x84, 0xCD, 0x04, 0xD0, + 0xA3, 0xCC, 0x86, 0xCD, 0x04, 0xD0, 0xA3, 0xCC, + 0x88, 0xCD, 0x04, 0xD0, 0xA3, 0xCC, 0x8B, 0xCD, + 0x04, 0xD0, 0xA7, 0xCC, 0x88, 0xCD, 0x04, 0xD0, + 0xAB, 0xCC, 0x88, 0xCD, 0x04, 0xD0, 0xAD, 0xCC, + 0x88, 0xCD, 0x04, 0xD0, 0xB0, 0xCC, 0x86, 0xCD, + 0x04, 0xD0, 0xB0, 0xCC, 0x88, 0xCD, 0x04, 0xD0, // Bytes 3700 - 373f - 0x04, 0xC3, 0xA6, 0xCC, 0x81, 0xCD, 0x04, 0xC3, - 0xA6, 0xCC, 0x84, 0xCD, 0x04, 0xC3, 0xB8, 0xCC, - 0x81, 0xCD, 0x04, 0xC5, 0xBF, 0xCC, 0x87, 0xCD, - 0x04, 0xC6, 0xB7, 0xCC, 0x8C, 0xCD, 0x04, 0xCA, - 0x92, 0xCC, 0x8C, 0xCD, 0x04, 0xCE, 0x91, 0xCC, - 0x80, 0xCD, 0x04, 0xCE, 0x91, 0xCC, 0x81, 0xCD, - 0x04, 0xCE, 0x91, 0xCC, 0x84, 0xCD, 0x04, 0xCE, - 0x91, 0xCC, 0x86, 0xCD, 0x04, 0xCE, 0x91, 0xCD, + 0xB3, 0xCC, 0x81, 0xCD, 0x04, 0xD0, 0xB5, 0xCC, + 0x80, 0xCD, 0x04, 0xD0, 0xB5, 0xCC, 0x86, 0xCD, + 0x04, 0xD0, 0xB5, 0xCC, 0x88, 0xCD, 0x04, 0xD0, + 0xB6, 0xCC, 0x86, 0xCD, 0x04, 0xD0, 0xB6, 0xCC, + 0x88, 0xCD, 0x04, 0xD0, 0xB7, 0xCC, 0x88, 0xCD, + 0x04, 0xD0, 0xB8, 0xCC, 0x80, 0xCD, 0x04, 0xD0, + 0xB8, 0xCC, 0x84, 0xCD, 0x04, 0xD0, 0xB8, 0xCC, + 0x86, 0xCD, 0x04, 0xD0, 0xB8, 0xCC, 0x88, 0xCD, // Bytes 3740 - 377f - 0x85, 0xDD, 0x04, 0xCE, 0x95, 0xCC, 0x80, 0xCD, - 0x04, 0xCE, 0x95, 0xCC, 0x81, 0xCD, 0x04, 0xCE, - 0x97, 0xCC, 0x80, 0xCD, 0x04, 0xCE, 0x97, 0xCC, - 0x81, 0xCD, 0x04, 0xCE, 0x97, 0xCD, 0x85, 0xDD, - 0x04, 0xCE, 0x99, 0xCC, 0x80, 0xCD, 0x04, 0xCE, - 0x99, 0xCC, 0x81, 0xCD, 0x04, 0xCE, 0x99, 0xCC, - 0x84, 0xCD, 0x04, 0xCE, 0x99, 0xCC, 0x86, 0xCD, - 0x04, 0xCE, 0x99, 0xCC, 0x88, 0xCD, 0x04, 0xCE, + 0x04, 0xD0, 0xBA, 0xCC, 0x81, 0xCD, 0x04, 0xD0, + 0xBE, 0xCC, 0x88, 0xCD, 0x04, 0xD1, 0x83, 0xCC, + 0x84, 0xCD, 0x04, 0xD1, 0x83, 0xCC, 0x86, 0xCD, + 0x04, 0xD1, 0x83, 0xCC, 0x88, 0xCD, 0x04, 0xD1, + 0x83, 0xCC, 0x8B, 0xCD, 0x04, 0xD1, 0x87, 0xCC, + 0x88, 0xCD, 0x04, 0xD1, 0x8B, 0xCC, 0x88, 0xCD, + 0x04, 0xD1, 0x8D, 0xCC, 0x88, 0xCD, 0x04, 0xD1, + 0x96, 0xCC, 0x88, 0xCD, 0x04, 0xD1, 0xB4, 0xCC, // Bytes 3780 - 37bf - 0x9F, 0xCC, 0x80, 0xCD, 0x04, 0xCE, 0x9F, 0xCC, - 0x81, 0xCD, 0x04, 0xCE, 0xA1, 0xCC, 0x94, 0xCD, - 0x04, 0xCE, 0xA5, 0xCC, 0x80, 0xCD, 0x04, 0xCE, - 0xA5, 0xCC, 0x81, 0xCD, 0x04, 0xCE, 0xA5, 0xCC, - 0x84, 0xCD, 0x04, 0xCE, 0xA5, 0xCC, 0x86, 0xCD, - 0x04, 0xCE, 0xA5, 0xCC, 0x88, 0xCD, 0x04, 0xCE, - 0xA9, 0xCC, 0x80, 0xCD, 0x04, 0xCE, 0xA9, 0xCC, - 0x81, 0xCD, 0x04, 0xCE, 0xA9, 0xCD, 0x85, 0xDD, + 0x8F, 0xCD, 0x04, 0xD1, 0xB5, 0xCC, 0x8F, 0xCD, + 0x04, 0xD3, 0x98, 0xCC, 0x88, 0xCD, 0x04, 0xD3, + 0x99, 0xCC, 0x88, 0xCD, 0x04, 0xD3, 0xA8, 0xCC, + 0x88, 0xCD, 0x04, 0xD3, 0xA9, 0xCC, 0x88, 0xCD, + 0x04, 0xD8, 0xA7, 0xD9, 0x93, 0xCD, 0x04, 0xD8, + 0xA7, 0xD9, 0x94, 0xCD, 0x04, 0xD8, 0xA7, 0xD9, + 0x95, 0xB9, 0x04, 0xD9, 0x88, 0xD9, 0x94, 0xCD, + 0x04, 0xD9, 0x8A, 0xD9, 0x94, 0xCD, 0x04, 0xDB, // Bytes 37c0 - 37ff - 0x04, 0xCE, 0xB1, 0xCC, 0x84, 0xCD, 0x04, 0xCE, - 0xB1, 0xCC, 0x86, 0xCD, 0x04, 0xCE, 0xB1, 0xCD, - 0x85, 0xDD, 0x04, 0xCE, 0xB5, 0xCC, 0x80, 0xCD, - 0x04, 0xCE, 0xB5, 0xCC, 0x81, 0xCD, 0x04, 0xCE, - 0xB7, 0xCD, 0x85, 0xDD, 0x04, 0xCE, 0xB9, 0xCC, - 0x80, 0xCD, 0x04, 0xCE, 0xB9, 0xCC, 0x81, 0xCD, - 0x04, 0xCE, 0xB9, 0xCC, 0x84, 0xCD, 0x04, 0xCE, - 0xB9, 0xCC, 0x86, 0xCD, 0x04, 0xCE, 0xB9, 0xCD, + 0x81, 0xD9, 0x94, 0xCD, 0x04, 0xDB, 0x92, 0xD9, + 0x94, 0xCD, 0x04, 0xDB, 0x95, 0xD9, 0x94, 0xCD, + 0x05, 0x41, 0xCC, 0x82, 0xCC, 0x80, 0xCE, 0x05, + 0x41, 0xCC, 0x82, 0xCC, 0x81, 0xCE, 0x05, 0x41, + 0xCC, 0x82, 0xCC, 0x83, 0xCE, 0x05, 0x41, 0xCC, + 0x82, 0xCC, 0x89, 0xCE, 0x05, 0x41, 0xCC, 0x86, + 0xCC, 0x80, 0xCE, 0x05, 0x41, 0xCC, 0x86, 0xCC, + 0x81, 0xCE, 0x05, 0x41, 0xCC, 0x86, 0xCC, 0x83, // Bytes 3800 - 383f - 0x82, 0xCD, 0x04, 0xCE, 0xBF, 0xCC, 0x80, 0xCD, - 0x04, 0xCE, 0xBF, 0xCC, 0x81, 0xCD, 0x04, 0xCF, - 0x81, 0xCC, 0x93, 0xCD, 0x04, 0xCF, 0x81, 0xCC, - 0x94, 0xCD, 0x04, 0xCF, 0x85, 0xCC, 0x80, 0xCD, - 0x04, 0xCF, 0x85, 0xCC, 0x81, 0xCD, 0x04, 0xCF, - 0x85, 0xCC, 0x84, 0xCD, 0x04, 0xCF, 0x85, 0xCC, - 0x86, 0xCD, 0x04, 0xCF, 0x85, 0xCD, 0x82, 0xCD, - 0x04, 0xCF, 0x89, 0xCD, 0x85, 0xDD, 0x04, 0xCF, + 0xCE, 0x05, 0x41, 0xCC, 0x86, 0xCC, 0x89, 0xCE, + 0x05, 0x41, 0xCC, 0x87, 0xCC, 0x84, 0xCE, 0x05, + 0x41, 0xCC, 0x88, 0xCC, 0x84, 0xCE, 0x05, 0x41, + 0xCC, 0x8A, 0xCC, 0x81, 0xCE, 0x05, 0x41, 0xCC, + 0xA3, 0xCC, 0x82, 0xCE, 0x05, 0x41, 0xCC, 0xA3, + 0xCC, 0x86, 0xCE, 0x05, 0x43, 0xCC, 0xA7, 0xCC, + 0x81, 0xCE, 0x05, 0x45, 0xCC, 0x82, 0xCC, 0x80, + 0xCE, 0x05, 0x45, 0xCC, 0x82, 0xCC, 0x81, 0xCE, // Bytes 3840 - 387f - 0x92, 0xCC, 0x81, 0xCD, 0x04, 0xCF, 0x92, 0xCC, - 0x88, 0xCD, 0x04, 0xD0, 0x86, 0xCC, 0x88, 0xCD, - 0x04, 0xD0, 0x90, 0xCC, 0x86, 0xCD, 0x04, 0xD0, - 0x90, 0xCC, 0x88, 0xCD, 0x04, 0xD0, 0x93, 0xCC, - 0x81, 0xCD, 0x04, 0xD0, 0x95, 0xCC, 0x80, 0xCD, - 0x04, 0xD0, 0x95, 0xCC, 0x86, 0xCD, 0x04, 0xD0, - 0x95, 0xCC, 0x88, 0xCD, 0x04, 0xD0, 0x96, 0xCC, - 0x86, 0xCD, 0x04, 0xD0, 0x96, 0xCC, 0x88, 0xCD, + 0x05, 0x45, 0xCC, 0x82, 0xCC, 0x83, 0xCE, 0x05, + 0x45, 0xCC, 0x82, 0xCC, 0x89, 0xCE, 0x05, 0x45, + 0xCC, 0x84, 0xCC, 0x80, 0xCE, 0x05, 0x45, 0xCC, + 0x84, 0xCC, 0x81, 0xCE, 0x05, 0x45, 0xCC, 0xA3, + 0xCC, 0x82, 0xCE, 0x05, 0x45, 0xCC, 0xA7, 0xCC, + 0x86, 0xCE, 0x05, 0x49, 0xCC, 0x88, 0xCC, 0x81, + 0xCE, 0x05, 0x4C, 0xCC, 0xA3, 0xCC, 0x84, 0xCE, + 0x05, 0x4F, 0xCC, 0x82, 0xCC, 0x80, 0xCE, 0x05, // Bytes 3880 - 38bf - 0x04, 0xD0, 0x97, 0xCC, 0x88, 0xCD, 0x04, 0xD0, - 0x98, 0xCC, 0x80, 0xCD, 0x04, 0xD0, 0x98, 0xCC, - 0x84, 0xCD, 0x04, 0xD0, 0x98, 0xCC, 0x86, 0xCD, - 0x04, 0xD0, 0x98, 0xCC, 0x88, 0xCD, 0x04, 0xD0, - 0x9A, 0xCC, 0x81, 0xCD, 0x04, 0xD0, 0x9E, 0xCC, - 0x88, 0xCD, 0x04, 0xD0, 0xA3, 0xCC, 0x84, 0xCD, - 0x04, 0xD0, 0xA3, 0xCC, 0x86, 0xCD, 0x04, 0xD0, - 0xA3, 0xCC, 0x88, 0xCD, 0x04, 0xD0, 0xA3, 0xCC, + 0x4F, 0xCC, 0x82, 0xCC, 0x81, 0xCE, 0x05, 0x4F, + 0xCC, 0x82, 0xCC, 0x83, 0xCE, 0x05, 0x4F, 0xCC, + 0x82, 0xCC, 0x89, 0xCE, 0x05, 0x4F, 0xCC, 0x83, + 0xCC, 0x81, 0xCE, 0x05, 0x4F, 0xCC, 0x83, 0xCC, + 0x84, 0xCE, 0x05, 0x4F, 0xCC, 0x83, 0xCC, 0x88, + 0xCE, 0x05, 0x4F, 0xCC, 0x84, 0xCC, 0x80, 0xCE, + 0x05, 0x4F, 0xCC, 0x84, 0xCC, 0x81, 0xCE, 0x05, + 0x4F, 0xCC, 0x87, 0xCC, 0x84, 0xCE, 0x05, 0x4F, // Bytes 38c0 - 38ff - 0x8B, 0xCD, 0x04, 0xD0, 0xA7, 0xCC, 0x88, 0xCD, - 0x04, 0xD0, 0xAB, 0xCC, 0x88, 0xCD, 0x04, 0xD0, - 0xAD, 0xCC, 0x88, 0xCD, 0x04, 0xD0, 0xB0, 0xCC, - 0x86, 0xCD, 0x04, 0xD0, 0xB0, 0xCC, 0x88, 0xCD, - 0x04, 0xD0, 0xB3, 0xCC, 0x81, 0xCD, 0x04, 0xD0, - 0xB5, 0xCC, 0x80, 0xCD, 0x04, 0xD0, 0xB5, 0xCC, - 0x86, 0xCD, 0x04, 0xD0, 0xB5, 0xCC, 0x88, 0xCD, - 0x04, 0xD0, 0xB6, 0xCC, 0x86, 0xCD, 0x04, 0xD0, + 0xCC, 0x88, 0xCC, 0x84, 0xCE, 0x05, 0x4F, 0xCC, + 0x9B, 0xCC, 0x80, 0xCE, 0x05, 0x4F, 0xCC, 0x9B, + 0xCC, 0x81, 0xCE, 0x05, 0x4F, 0xCC, 0x9B, 0xCC, + 0x83, 0xCE, 0x05, 0x4F, 0xCC, 0x9B, 0xCC, 0x89, + 0xCE, 0x05, 0x4F, 0xCC, 0x9B, 0xCC, 0xA3, 0xBA, + 0x05, 0x4F, 0xCC, 0xA3, 0xCC, 0x82, 0xCE, 0x05, + 0x4F, 0xCC, 0xA8, 0xCC, 0x84, 0xCE, 0x05, 0x52, + 0xCC, 0xA3, 0xCC, 0x84, 0xCE, 0x05, 0x53, 0xCC, // Bytes 3900 - 393f - 0xB6, 0xCC, 0x88, 0xCD, 0x04, 0xD0, 0xB7, 0xCC, - 0x88, 0xCD, 0x04, 0xD0, 0xB8, 0xCC, 0x80, 0xCD, - 0x04, 0xD0, 0xB8, 0xCC, 0x84, 0xCD, 0x04, 0xD0, - 0xB8, 0xCC, 0x86, 0xCD, 0x04, 0xD0, 0xB8, 0xCC, - 0x88, 0xCD, 0x04, 0xD0, 0xBA, 0xCC, 0x81, 0xCD, - 0x04, 0xD0, 0xBE, 0xCC, 0x88, 0xCD, 0x04, 0xD1, - 0x83, 0xCC, 0x84, 0xCD, 0x04, 0xD1, 0x83, 0xCC, - 0x86, 0xCD, 0x04, 0xD1, 0x83, 0xCC, 0x88, 0xCD, + 0x81, 0xCC, 0x87, 0xCE, 0x05, 0x53, 0xCC, 0x8C, + 0xCC, 0x87, 0xCE, 0x05, 0x53, 0xCC, 0xA3, 0xCC, + 0x87, 0xCE, 0x05, 0x55, 0xCC, 0x83, 0xCC, 0x81, + 0xCE, 0x05, 0x55, 0xCC, 0x84, 0xCC, 0x88, 0xCE, + 0x05, 0x55, 0xCC, 0x88, 0xCC, 0x80, 0xCE, 0x05, + 0x55, 0xCC, 0x88, 0xCC, 0x81, 0xCE, 0x05, 0x55, + 0xCC, 0x88, 0xCC, 0x84, 0xCE, 0x05, 0x55, 0xCC, + 0x88, 0xCC, 0x8C, 0xCE, 0x05, 0x55, 0xCC, 0x9B, // Bytes 3940 - 397f - 0x04, 0xD1, 0x83, 0xCC, 0x8B, 0xCD, 0x04, 0xD1, - 0x87, 0xCC, 0x88, 0xCD, 0x04, 0xD1, 0x8B, 0xCC, - 0x88, 0xCD, 0x04, 0xD1, 0x8D, 0xCC, 0x88, 0xCD, - 0x04, 0xD1, 0x96, 0xCC, 0x88, 0xCD, 0x04, 0xD1, - 0xB4, 0xCC, 0x8F, 0xCD, 0x04, 0xD1, 0xB5, 0xCC, - 0x8F, 0xCD, 0x04, 0xD3, 0x98, 0xCC, 0x88, 0xCD, - 0x04, 0xD3, 0x99, 0xCC, 0x88, 0xCD, 0x04, 0xD3, - 0xA8, 0xCC, 0x88, 0xCD, 0x04, 0xD3, 0xA9, 0xCC, + 0xCC, 0x80, 0xCE, 0x05, 0x55, 0xCC, 0x9B, 0xCC, + 0x81, 0xCE, 0x05, 0x55, 0xCC, 0x9B, 0xCC, 0x83, + 0xCE, 0x05, 0x55, 0xCC, 0x9B, 0xCC, 0x89, 0xCE, + 0x05, 0x55, 0xCC, 0x9B, 0xCC, 0xA3, 0xBA, 0x05, + 0x61, 0xCC, 0x82, 0xCC, 0x80, 0xCE, 0x05, 0x61, + 0xCC, 0x82, 0xCC, 0x81, 0xCE, 0x05, 0x61, 0xCC, + 0x82, 0xCC, 0x83, 0xCE, 0x05, 0x61, 0xCC, 0x82, + 0xCC, 0x89, 0xCE, 0x05, 0x61, 0xCC, 0x86, 0xCC, // Bytes 3980 - 39bf - 0x88, 0xCD, 0x04, 0xD8, 0xA7, 0xD9, 0x93, 0xCD, - 0x04, 0xD8, 0xA7, 0xD9, 0x94, 0xCD, 0x04, 0xD8, - 0xA7, 0xD9, 0x95, 0xB9, 0x04, 0xD9, 0x88, 0xD9, - 0x94, 0xCD, 0x04, 0xD9, 0x8A, 0xD9, 0x94, 0xCD, - 0x04, 0xDB, 0x81, 0xD9, 0x94, 0xCD, 0x04, 0xDB, - 0x92, 0xD9, 0x94, 0xCD, 0x04, 0xDB, 0x95, 0xD9, - 0x94, 0xCD, 0x05, 0x41, 0xCC, 0x82, 0xCC, 0x80, - 0xCE, 0x05, 0x41, 0xCC, 0x82, 0xCC, 0x81, 0xCE, + 0x80, 0xCE, 0x05, 0x61, 0xCC, 0x86, 0xCC, 0x81, + 0xCE, 0x05, 0x61, 0xCC, 0x86, 0xCC, 0x83, 0xCE, + 0x05, 0x61, 0xCC, 0x86, 0xCC, 0x89, 0xCE, 0x05, + 0x61, 0xCC, 0x87, 0xCC, 0x84, 0xCE, 0x05, 0x61, + 0xCC, 0x88, 0xCC, 0x84, 0xCE, 0x05, 0x61, 0xCC, + 0x8A, 0xCC, 0x81, 0xCE, 0x05, 0x61, 0xCC, 0xA3, + 0xCC, 0x82, 0xCE, 0x05, 0x61, 0xCC, 0xA3, 0xCC, + 0x86, 0xCE, 0x05, 0x63, 0xCC, 0xA7, 0xCC, 0x81, // Bytes 39c0 - 39ff - 0x05, 0x41, 0xCC, 0x82, 0xCC, 0x83, 0xCE, 0x05, - 0x41, 0xCC, 0x82, 0xCC, 0x89, 0xCE, 0x05, 0x41, - 0xCC, 0x86, 0xCC, 0x80, 0xCE, 0x05, 0x41, 0xCC, - 0x86, 0xCC, 0x81, 0xCE, 0x05, 0x41, 0xCC, 0x86, - 0xCC, 0x83, 0xCE, 0x05, 0x41, 0xCC, 0x86, 0xCC, - 0x89, 0xCE, 0x05, 0x41, 0xCC, 0x87, 0xCC, 0x84, - 0xCE, 0x05, 0x41, 0xCC, 0x88, 0xCC, 0x84, 0xCE, - 0x05, 0x41, 0xCC, 0x8A, 0xCC, 0x81, 0xCE, 0x05, + 0xCE, 0x05, 0x65, 0xCC, 0x82, 0xCC, 0x80, 0xCE, + 0x05, 0x65, 0xCC, 0x82, 0xCC, 0x81, 0xCE, 0x05, + 0x65, 0xCC, 0x82, 0xCC, 0x83, 0xCE, 0x05, 0x65, + 0xCC, 0x82, 0xCC, 0x89, 0xCE, 0x05, 0x65, 0xCC, + 0x84, 0xCC, 0x80, 0xCE, 0x05, 0x65, 0xCC, 0x84, + 0xCC, 0x81, 0xCE, 0x05, 0x65, 0xCC, 0xA3, 0xCC, + 0x82, 0xCE, 0x05, 0x65, 0xCC, 0xA7, 0xCC, 0x86, + 0xCE, 0x05, 0x69, 0xCC, 0x88, 0xCC, 0x81, 0xCE, // Bytes 3a00 - 3a3f - 0x41, 0xCC, 0xA3, 0xCC, 0x82, 0xCE, 0x05, 0x41, - 0xCC, 0xA3, 0xCC, 0x86, 0xCE, 0x05, 0x43, 0xCC, - 0xA7, 0xCC, 0x81, 0xCE, 0x05, 0x45, 0xCC, 0x82, - 0xCC, 0x80, 0xCE, 0x05, 0x45, 0xCC, 0x82, 0xCC, - 0x81, 0xCE, 0x05, 0x45, 0xCC, 0x82, 0xCC, 0x83, - 0xCE, 0x05, 0x45, 0xCC, 0x82, 0xCC, 0x89, 0xCE, - 0x05, 0x45, 0xCC, 0x84, 0xCC, 0x80, 0xCE, 0x05, - 0x45, 0xCC, 0x84, 0xCC, 0x81, 0xCE, 0x05, 0x45, + 0x05, 0x6C, 0xCC, 0xA3, 0xCC, 0x84, 0xCE, 0x05, + 0x6F, 0xCC, 0x82, 0xCC, 0x80, 0xCE, 0x05, 0x6F, + 0xCC, 0x82, 0xCC, 0x81, 0xCE, 0x05, 0x6F, 0xCC, + 0x82, 0xCC, 0x83, 0xCE, 0x05, 0x6F, 0xCC, 0x82, + 0xCC, 0x89, 0xCE, 0x05, 0x6F, 0xCC, 0x83, 0xCC, + 0x81, 0xCE, 0x05, 0x6F, 0xCC, 0x83, 0xCC, 0x84, + 0xCE, 0x05, 0x6F, 0xCC, 0x83, 0xCC, 0x88, 0xCE, + 0x05, 0x6F, 0xCC, 0x84, 0xCC, 0x80, 0xCE, 0x05, // Bytes 3a40 - 3a7f - 0xCC, 0xA3, 0xCC, 0x82, 0xCE, 0x05, 0x45, 0xCC, - 0xA7, 0xCC, 0x86, 0xCE, 0x05, 0x49, 0xCC, 0x88, - 0xCC, 0x81, 0xCE, 0x05, 0x4C, 0xCC, 0xA3, 0xCC, - 0x84, 0xCE, 0x05, 0x4F, 0xCC, 0x82, 0xCC, 0x80, - 0xCE, 0x05, 0x4F, 0xCC, 0x82, 0xCC, 0x81, 0xCE, - 0x05, 0x4F, 0xCC, 0x82, 0xCC, 0x83, 0xCE, 0x05, - 0x4F, 0xCC, 0x82, 0xCC, 0x89, 0xCE, 0x05, 0x4F, - 0xCC, 0x83, 0xCC, 0x81, 0xCE, 0x05, 0x4F, 0xCC, + 0x6F, 0xCC, 0x84, 0xCC, 0x81, 0xCE, 0x05, 0x6F, + 0xCC, 0x87, 0xCC, 0x84, 0xCE, 0x05, 0x6F, 0xCC, + 0x88, 0xCC, 0x84, 0xCE, 0x05, 0x6F, 0xCC, 0x9B, + 0xCC, 0x80, 0xCE, 0x05, 0x6F, 0xCC, 0x9B, 0xCC, + 0x81, 0xCE, 0x05, 0x6F, 0xCC, 0x9B, 0xCC, 0x83, + 0xCE, 0x05, 0x6F, 0xCC, 0x9B, 0xCC, 0x89, 0xCE, + 0x05, 0x6F, 0xCC, 0x9B, 0xCC, 0xA3, 0xBA, 0x05, + 0x6F, 0xCC, 0xA3, 0xCC, 0x82, 0xCE, 0x05, 0x6F, // Bytes 3a80 - 3abf - 0x83, 0xCC, 0x84, 0xCE, 0x05, 0x4F, 0xCC, 0x83, - 0xCC, 0x88, 0xCE, 0x05, 0x4F, 0xCC, 0x84, 0xCC, - 0x80, 0xCE, 0x05, 0x4F, 0xCC, 0x84, 0xCC, 0x81, - 0xCE, 0x05, 0x4F, 0xCC, 0x87, 0xCC, 0x84, 0xCE, - 0x05, 0x4F, 0xCC, 0x88, 0xCC, 0x84, 0xCE, 0x05, - 0x4F, 0xCC, 0x9B, 0xCC, 0x80, 0xCE, 0x05, 0x4F, - 0xCC, 0x9B, 0xCC, 0x81, 0xCE, 0x05, 0x4F, 0xCC, - 0x9B, 0xCC, 0x83, 0xCE, 0x05, 0x4F, 0xCC, 0x9B, + 0xCC, 0xA8, 0xCC, 0x84, 0xCE, 0x05, 0x72, 0xCC, + 0xA3, 0xCC, 0x84, 0xCE, 0x05, 0x73, 0xCC, 0x81, + 0xCC, 0x87, 0xCE, 0x05, 0x73, 0xCC, 0x8C, 0xCC, + 0x87, 0xCE, 0x05, 0x73, 0xCC, 0xA3, 0xCC, 0x87, + 0xCE, 0x05, 0x75, 0xCC, 0x83, 0xCC, 0x81, 0xCE, + 0x05, 0x75, 0xCC, 0x84, 0xCC, 0x88, 0xCE, 0x05, + 0x75, 0xCC, 0x88, 0xCC, 0x80, 0xCE, 0x05, 0x75, + 0xCC, 0x88, 0xCC, 0x81, 0xCE, 0x05, 0x75, 0xCC, // Bytes 3ac0 - 3aff - 0xCC, 0x89, 0xCE, 0x05, 0x4F, 0xCC, 0x9B, 0xCC, - 0xA3, 0xBA, 0x05, 0x4F, 0xCC, 0xA3, 0xCC, 0x82, - 0xCE, 0x05, 0x4F, 0xCC, 0xA8, 0xCC, 0x84, 0xCE, - 0x05, 0x52, 0xCC, 0xA3, 0xCC, 0x84, 0xCE, 0x05, - 0x53, 0xCC, 0x81, 0xCC, 0x87, 0xCE, 0x05, 0x53, - 0xCC, 0x8C, 0xCC, 0x87, 0xCE, 0x05, 0x53, 0xCC, - 0xA3, 0xCC, 0x87, 0xCE, 0x05, 0x55, 0xCC, 0x83, - 0xCC, 0x81, 0xCE, 0x05, 0x55, 0xCC, 0x84, 0xCC, + 0x88, 0xCC, 0x84, 0xCE, 0x05, 0x75, 0xCC, 0x88, + 0xCC, 0x8C, 0xCE, 0x05, 0x75, 0xCC, 0x9B, 0xCC, + 0x80, 0xCE, 0x05, 0x75, 0xCC, 0x9B, 0xCC, 0x81, + 0xCE, 0x05, 0x75, 0xCC, 0x9B, 0xCC, 0x83, 0xCE, + 0x05, 0x75, 0xCC, 0x9B, 0xCC, 0x89, 0xCE, 0x05, + 0x75, 0xCC, 0x9B, 0xCC, 0xA3, 0xBA, 0x05, 0xE1, + 0xBE, 0xBF, 0xCC, 0x80, 0xCE, 0x05, 0xE1, 0xBE, + 0xBF, 0xCC, 0x81, 0xCE, 0x05, 0xE1, 0xBE, 0xBF, // Bytes 3b00 - 3b3f - 0x88, 0xCE, 0x05, 0x55, 0xCC, 0x88, 0xCC, 0x80, - 0xCE, 0x05, 0x55, 0xCC, 0x88, 0xCC, 0x81, 0xCE, - 0x05, 0x55, 0xCC, 0x88, 0xCC, 0x84, 0xCE, 0x05, - 0x55, 0xCC, 0x88, 0xCC, 0x8C, 0xCE, 0x05, 0x55, - 0xCC, 0x9B, 0xCC, 0x80, 0xCE, 0x05, 0x55, 0xCC, - 0x9B, 0xCC, 0x81, 0xCE, 0x05, 0x55, 0xCC, 0x9B, - 0xCC, 0x83, 0xCE, 0x05, 0x55, 0xCC, 0x9B, 0xCC, - 0x89, 0xCE, 0x05, 0x55, 0xCC, 0x9B, 0xCC, 0xA3, + 0xCD, 0x82, 0xCE, 0x05, 0xE1, 0xBF, 0xBE, 0xCC, + 0x80, 0xCE, 0x05, 0xE1, 0xBF, 0xBE, 0xCC, 0x81, + 0xCE, 0x05, 0xE1, 0xBF, 0xBE, 0xCD, 0x82, 0xCE, + 0x05, 0xE2, 0x86, 0x90, 0xCC, 0xB8, 0x05, 0x05, + 0xE2, 0x86, 0x92, 0xCC, 0xB8, 0x05, 0x05, 0xE2, + 0x86, 0x94, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x87, + 0x90, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x87, 0x92, + 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x87, 0x94, 0xCC, // Bytes 3b40 - 3b7f - 0xBA, 0x05, 0x61, 0xCC, 0x82, 0xCC, 0x80, 0xCE, - 0x05, 0x61, 0xCC, 0x82, 0xCC, 0x81, 0xCE, 0x05, - 0x61, 0xCC, 0x82, 0xCC, 0x83, 0xCE, 0x05, 0x61, - 0xCC, 0x82, 0xCC, 0x89, 0xCE, 0x05, 0x61, 0xCC, - 0x86, 0xCC, 0x80, 0xCE, 0x05, 0x61, 0xCC, 0x86, - 0xCC, 0x81, 0xCE, 0x05, 0x61, 0xCC, 0x86, 0xCC, - 0x83, 0xCE, 0x05, 0x61, 0xCC, 0x86, 0xCC, 0x89, - 0xCE, 0x05, 0x61, 0xCC, 0x87, 0xCC, 0x84, 0xCE, + 0xB8, 0x05, 0x05, 0xE2, 0x88, 0x83, 0xCC, 0xB8, + 0x05, 0x05, 0xE2, 0x88, 0x88, 0xCC, 0xB8, 0x05, + 0x05, 0xE2, 0x88, 0x8B, 0xCC, 0xB8, 0x05, 0x05, + 0xE2, 0x88, 0xA3, 0xCC, 0xB8, 0x05, 0x05, 0xE2, + 0x88, 0xA5, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x88, + 0xBC, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89, 0x83, + 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89, 0x85, 0xCC, + 0xB8, 0x05, 0x05, 0xE2, 0x89, 0x88, 0xCC, 0xB8, // Bytes 3b80 - 3bbf - 0x05, 0x61, 0xCC, 0x88, 0xCC, 0x84, 0xCE, 0x05, - 0x61, 0xCC, 0x8A, 0xCC, 0x81, 0xCE, 0x05, 0x61, - 0xCC, 0xA3, 0xCC, 0x82, 0xCE, 0x05, 0x61, 0xCC, - 0xA3, 0xCC, 0x86, 0xCE, 0x05, 0x63, 0xCC, 0xA7, - 0xCC, 0x81, 0xCE, 0x05, 0x65, 0xCC, 0x82, 0xCC, - 0x80, 0xCE, 0x05, 0x65, 0xCC, 0x82, 0xCC, 0x81, - 0xCE, 0x05, 0x65, 0xCC, 0x82, 0xCC, 0x83, 0xCE, - 0x05, 0x65, 0xCC, 0x82, 0xCC, 0x89, 0xCE, 0x05, + 0x05, 0x05, 0xE2, 0x89, 0x8D, 0xCC, 0xB8, 0x05, + 0x05, 0xE2, 0x89, 0xA1, 0xCC, 0xB8, 0x05, 0x05, + 0xE2, 0x89, 0xA4, 0xCC, 0xB8, 0x05, 0x05, 0xE2, + 0x89, 0xA5, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89, + 0xB2, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89, 0xB3, + 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89, 0xB6, 0xCC, + 0xB8, 0x05, 0x05, 0xE2, 0x89, 0xB7, 0xCC, 0xB8, + 0x05, 0x05, 0xE2, 0x89, 0xBA, 0xCC, 0xB8, 0x05, // Bytes 3bc0 - 3bff - 0x65, 0xCC, 0x84, 0xCC, 0x80, 0xCE, 0x05, 0x65, - 0xCC, 0x84, 0xCC, 0x81, 0xCE, 0x05, 0x65, 0xCC, - 0xA3, 0xCC, 0x82, 0xCE, 0x05, 0x65, 0xCC, 0xA7, - 0xCC, 0x86, 0xCE, 0x05, 0x69, 0xCC, 0x88, 0xCC, - 0x81, 0xCE, 0x05, 0x6C, 0xCC, 0xA3, 0xCC, 0x84, - 0xCE, 0x05, 0x6F, 0xCC, 0x82, 0xCC, 0x80, 0xCE, - 0x05, 0x6F, 0xCC, 0x82, 0xCC, 0x81, 0xCE, 0x05, - 0x6F, 0xCC, 0x82, 0xCC, 0x83, 0xCE, 0x05, 0x6F, + 0x05, 0xE2, 0x89, 0xBB, 0xCC, 0xB8, 0x05, 0x05, + 0xE2, 0x89, 0xBC, 0xCC, 0xB8, 0x05, 0x05, 0xE2, + 0x89, 0xBD, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A, + 0x82, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A, 0x83, + 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A, 0x86, 0xCC, + 0xB8, 0x05, 0x05, 0xE2, 0x8A, 0x87, 0xCC, 0xB8, + 0x05, 0x05, 0xE2, 0x8A, 0x91, 0xCC, 0xB8, 0x05, + 0x05, 0xE2, 0x8A, 0x92, 0xCC, 0xB8, 0x05, 0x05, // Bytes 3c00 - 3c3f - 0xCC, 0x82, 0xCC, 0x89, 0xCE, 0x05, 0x6F, 0xCC, - 0x83, 0xCC, 0x81, 0xCE, 0x05, 0x6F, 0xCC, 0x83, - 0xCC, 0x84, 0xCE, 0x05, 0x6F, 0xCC, 0x83, 0xCC, - 0x88, 0xCE, 0x05, 0x6F, 0xCC, 0x84, 0xCC, 0x80, - 0xCE, 0x05, 0x6F, 0xCC, 0x84, 0xCC, 0x81, 0xCE, - 0x05, 0x6F, 0xCC, 0x87, 0xCC, 0x84, 0xCE, 0x05, - 0x6F, 0xCC, 0x88, 0xCC, 0x84, 0xCE, 0x05, 0x6F, - 0xCC, 0x9B, 0xCC, 0x80, 0xCE, 0x05, 0x6F, 0xCC, + 0xE2, 0x8A, 0xA2, 0xCC, 0xB8, 0x05, 0x05, 0xE2, + 0x8A, 0xA8, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A, + 0xA9, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A, 0xAB, + 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A, 0xB2, 0xCC, + 0xB8, 0x05, 0x05, 0xE2, 0x8A, 0xB3, 0xCC, 0xB8, + 0x05, 0x05, 0xE2, 0x8A, 0xB4, 0xCC, 0xB8, 0x05, + 0x05, 0xE2, 0x8A, 0xB5, 0xCC, 0xB8, 0x05, 0x06, + 0xCE, 0x91, 0xCC, 0x93, 0xCD, 0x85, 0xDE, 0x06, // Bytes 3c40 - 3c7f - 0x9B, 0xCC, 0x81, 0xCE, 0x05, 0x6F, 0xCC, 0x9B, - 0xCC, 0x83, 0xCE, 0x05, 0x6F, 0xCC, 0x9B, 0xCC, - 0x89, 0xCE, 0x05, 0x6F, 0xCC, 0x9B, 0xCC, 0xA3, - 0xBA, 0x05, 0x6F, 0xCC, 0xA3, 0xCC, 0x82, 0xCE, - 0x05, 0x6F, 0xCC, 0xA8, 0xCC, 0x84, 0xCE, 0x05, - 0x72, 0xCC, 0xA3, 0xCC, 0x84, 0xCE, 0x05, 0x73, - 0xCC, 0x81, 0xCC, 0x87, 0xCE, 0x05, 0x73, 0xCC, - 0x8C, 0xCC, 0x87, 0xCE, 0x05, 0x73, 0xCC, 0xA3, + 0xCE, 0x91, 0xCC, 0x94, 0xCD, 0x85, 0xDE, 0x06, + 0xCE, 0x95, 0xCC, 0x93, 0xCC, 0x80, 0xCE, 0x06, + 0xCE, 0x95, 0xCC, 0x93, 0xCC, 0x81, 0xCE, 0x06, + 0xCE, 0x95, 0xCC, 0x94, 0xCC, 0x80, 0xCE, 0x06, + 0xCE, 0x95, 0xCC, 0x94, 0xCC, 0x81, 0xCE, 0x06, + 0xCE, 0x97, 0xCC, 0x93, 0xCD, 0x85, 0xDE, 0x06, + 0xCE, 0x97, 0xCC, 0x94, 0xCD, 0x85, 0xDE, 0x06, + 0xCE, 0x99, 0xCC, 0x93, 0xCC, 0x80, 0xCE, 0x06, // Bytes 3c80 - 3cbf - 0xCC, 0x87, 0xCE, 0x05, 0x75, 0xCC, 0x83, 0xCC, - 0x81, 0xCE, 0x05, 0x75, 0xCC, 0x84, 0xCC, 0x88, - 0xCE, 0x05, 0x75, 0xCC, 0x88, 0xCC, 0x80, 0xCE, - 0x05, 0x75, 0xCC, 0x88, 0xCC, 0x81, 0xCE, 0x05, - 0x75, 0xCC, 0x88, 0xCC, 0x84, 0xCE, 0x05, 0x75, - 0xCC, 0x88, 0xCC, 0x8C, 0xCE, 0x05, 0x75, 0xCC, - 0x9B, 0xCC, 0x80, 0xCE, 0x05, 0x75, 0xCC, 0x9B, - 0xCC, 0x81, 0xCE, 0x05, 0x75, 0xCC, 0x9B, 0xCC, + 0xCE, 0x99, 0xCC, 0x93, 0xCC, 0x81, 0xCE, 0x06, + 0xCE, 0x99, 0xCC, 0x93, 0xCD, 0x82, 0xCE, 0x06, + 0xCE, 0x99, 0xCC, 0x94, 0xCC, 0x80, 0xCE, 0x06, + 0xCE, 0x99, 0xCC, 0x94, 0xCC, 0x81, 0xCE, 0x06, + 0xCE, 0x99, 0xCC, 0x94, 0xCD, 0x82, 0xCE, 0x06, + 0xCE, 0x9F, 0xCC, 0x93, 0xCC, 0x80, 0xCE, 0x06, + 0xCE, 0x9F, 0xCC, 0x93, 0xCC, 0x81, 0xCE, 0x06, + 0xCE, 0x9F, 0xCC, 0x94, 0xCC, 0x80, 0xCE, 0x06, // Bytes 3cc0 - 3cff - 0x83, 0xCE, 0x05, 0x75, 0xCC, 0x9B, 0xCC, 0x89, - 0xCE, 0x05, 0x75, 0xCC, 0x9B, 0xCC, 0xA3, 0xBA, - 0x05, 0xE1, 0xBE, 0xBF, 0xCC, 0x80, 0xCE, 0x05, - 0xE1, 0xBE, 0xBF, 0xCC, 0x81, 0xCE, 0x05, 0xE1, - 0xBE, 0xBF, 0xCD, 0x82, 0xCE, 0x05, 0xE1, 0xBF, - 0xBE, 0xCC, 0x80, 0xCE, 0x05, 0xE1, 0xBF, 0xBE, - 0xCC, 0x81, 0xCE, 0x05, 0xE1, 0xBF, 0xBE, 0xCD, - 0x82, 0xCE, 0x05, 0xE2, 0x86, 0x90, 0xCC, 0xB8, + 0xCE, 0x9F, 0xCC, 0x94, 0xCC, 0x81, 0xCE, 0x06, + 0xCE, 0xA5, 0xCC, 0x94, 0xCC, 0x80, 0xCE, 0x06, + 0xCE, 0xA5, 0xCC, 0x94, 0xCC, 0x81, 0xCE, 0x06, + 0xCE, 0xA5, 0xCC, 0x94, 0xCD, 0x82, 0xCE, 0x06, + 0xCE, 0xA9, 0xCC, 0x93, 0xCD, 0x85, 0xDE, 0x06, + 0xCE, 0xA9, 0xCC, 0x94, 0xCD, 0x85, 0xDE, 0x06, + 0xCE, 0xB1, 0xCC, 0x80, 0xCD, 0x85, 0xDE, 0x06, + 0xCE, 0xB1, 0xCC, 0x81, 0xCD, 0x85, 0xDE, 0x06, // Bytes 3d00 - 3d3f - 0x05, 0x05, 0xE2, 0x86, 0x92, 0xCC, 0xB8, 0x05, - 0x05, 0xE2, 0x86, 0x94, 0xCC, 0xB8, 0x05, 0x05, - 0xE2, 0x87, 0x90, 0xCC, 0xB8, 0x05, 0x05, 0xE2, - 0x87, 0x92, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x87, - 0x94, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x88, 0x83, - 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x88, 0x88, 0xCC, - 0xB8, 0x05, 0x05, 0xE2, 0x88, 0x8B, 0xCC, 0xB8, - 0x05, 0x05, 0xE2, 0x88, 0xA3, 0xCC, 0xB8, 0x05, + 0xCE, 0xB1, 0xCC, 0x93, 0xCD, 0x85, 0xDE, 0x06, + 0xCE, 0xB1, 0xCC, 0x94, 0xCD, 0x85, 0xDE, 0x06, + 0xCE, 0xB1, 0xCD, 0x82, 0xCD, 0x85, 0xDE, 0x06, + 0xCE, 0xB5, 0xCC, 0x93, 0xCC, 0x80, 0xCE, 0x06, + 0xCE, 0xB5, 0xCC, 0x93, 0xCC, 0x81, 0xCE, 0x06, + 0xCE, 0xB5, 0xCC, 0x94, 0xCC, 0x80, 0xCE, 0x06, + 0xCE, 0xB5, 0xCC, 0x94, 0xCC, 0x81, 0xCE, 0x06, + 0xCE, 0xB7, 0xCC, 0x80, 0xCD, 0x85, 0xDE, 0x06, // Bytes 3d40 - 3d7f - 0x05, 0xE2, 0x88, 0xA5, 0xCC, 0xB8, 0x05, 0x05, - 0xE2, 0x88, 0xBC, 0xCC, 0xB8, 0x05, 0x05, 0xE2, - 0x89, 0x83, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89, - 0x85, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89, 0x88, - 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89, 0x8D, 0xCC, - 0xB8, 0x05, 0x05, 0xE2, 0x89, 0xA1, 0xCC, 0xB8, - 0x05, 0x05, 0xE2, 0x89, 0xA4, 0xCC, 0xB8, 0x05, - 0x05, 0xE2, 0x89, 0xA5, 0xCC, 0xB8, 0x05, 0x05, + 0xCE, 0xB7, 0xCC, 0x81, 0xCD, 0x85, 0xDE, 0x06, + 0xCE, 0xB7, 0xCC, 0x93, 0xCD, 0x85, 0xDE, 0x06, + 0xCE, 0xB7, 0xCC, 0x94, 0xCD, 0x85, 0xDE, 0x06, + 0xCE, 0xB7, 0xCD, 0x82, 0xCD, 0x85, 0xDE, 0x06, + 0xCE, 0xB9, 0xCC, 0x88, 0xCC, 0x80, 0xCE, 0x06, + 0xCE, 0xB9, 0xCC, 0x88, 0xCC, 0x81, 0xCE, 0x06, + 0xCE, 0xB9, 0xCC, 0x88, 0xCD, 0x82, 0xCE, 0x06, + 0xCE, 0xB9, 0xCC, 0x93, 0xCC, 0x80, 0xCE, 0x06, // Bytes 3d80 - 3dbf - 0xE2, 0x89, 0xB2, 0xCC, 0xB8, 0x05, 0x05, 0xE2, - 0x89, 0xB3, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89, - 0xB6, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89, 0xB7, - 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89, 0xBA, 0xCC, - 0xB8, 0x05, 0x05, 0xE2, 0x89, 0xBB, 0xCC, 0xB8, - 0x05, 0x05, 0xE2, 0x89, 0xBC, 0xCC, 0xB8, 0x05, - 0x05, 0xE2, 0x89, 0xBD, 0xCC, 0xB8, 0x05, 0x05, - 0xE2, 0x8A, 0x82, 0xCC, 0xB8, 0x05, 0x05, 0xE2, + 0xCE, 0xB9, 0xCC, 0x93, 0xCC, 0x81, 0xCE, 0x06, + 0xCE, 0xB9, 0xCC, 0x93, 0xCD, 0x82, 0xCE, 0x06, + 0xCE, 0xB9, 0xCC, 0x94, 0xCC, 0x80, 0xCE, 0x06, + 0xCE, 0xB9, 0xCC, 0x94, 0xCC, 0x81, 0xCE, 0x06, + 0xCE, 0xB9, 0xCC, 0x94, 0xCD, 0x82, 0xCE, 0x06, + 0xCE, 0xBF, 0xCC, 0x93, 0xCC, 0x80, 0xCE, 0x06, + 0xCE, 0xBF, 0xCC, 0x93, 0xCC, 0x81, 0xCE, 0x06, + 0xCE, 0xBF, 0xCC, 0x94, 0xCC, 0x80, 0xCE, 0x06, // Bytes 3dc0 - 3dff - 0x8A, 0x83, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A, - 0x86, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A, 0x87, - 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A, 0x91, 0xCC, - 0xB8, 0x05, 0x05, 0xE2, 0x8A, 0x92, 0xCC, 0xB8, - 0x05, 0x05, 0xE2, 0x8A, 0xA2, 0xCC, 0xB8, 0x05, - 0x05, 0xE2, 0x8A, 0xA8, 0xCC, 0xB8, 0x05, 0x05, - 0xE2, 0x8A, 0xA9, 0xCC, 0xB8, 0x05, 0x05, 0xE2, - 0x8A, 0xAB, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A, + 0xCE, 0xBF, 0xCC, 0x94, 0xCC, 0x81, 0xCE, 0x06, + 0xCF, 0x85, 0xCC, 0x88, 0xCC, 0x80, 0xCE, 0x06, + 0xCF, 0x85, 0xCC, 0x88, 0xCC, 0x81, 0xCE, 0x06, + 0xCF, 0x85, 0xCC, 0x88, 0xCD, 0x82, 0xCE, 0x06, + 0xCF, 0x85, 0xCC, 0x93, 0xCC, 0x80, 0xCE, 0x06, + 0xCF, 0x85, 0xCC, 0x93, 0xCC, 0x81, 0xCE, 0x06, + 0xCF, 0x85, 0xCC, 0x93, 0xCD, 0x82, 0xCE, 0x06, + 0xCF, 0x85, 0xCC, 0x94, 0xCC, 0x80, 0xCE, 0x06, // Bytes 3e00 - 3e3f - 0xB2, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A, 0xB3, - 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A, 0xB4, 0xCC, - 0xB8, 0x05, 0x05, 0xE2, 0x8A, 0xB5, 0xCC, 0xB8, - 0x05, 0x06, 0xCE, 0x91, 0xCC, 0x93, 0xCD, 0x85, - 0xDE, 0x06, 0xCE, 0x91, 0xCC, 0x94, 0xCD, 0x85, - 0xDE, 0x06, 0xCE, 0x95, 0xCC, 0x93, 0xCC, 0x80, - 0xCE, 0x06, 0xCE, 0x95, 0xCC, 0x93, 0xCC, 0x81, - 0xCE, 0x06, 0xCE, 0x95, 0xCC, 0x94, 0xCC, 0x80, + 0xCF, 0x85, 0xCC, 0x94, 0xCC, 0x81, 0xCE, 0x06, + 0xCF, 0x85, 0xCC, 0x94, 0xCD, 0x82, 0xCE, 0x06, + 0xCF, 0x89, 0xCC, 0x80, 0xCD, 0x85, 0xDE, 0x06, + 0xCF, 0x89, 0xCC, 0x81, 0xCD, 0x85, 0xDE, 0x06, + 0xCF, 0x89, 0xCC, 0x93, 0xCD, 0x85, 0xDE, 0x06, + 0xCF, 0x89, 0xCC, 0x94, 0xCD, 0x85, 0xDE, 0x06, + 0xCF, 0x89, 0xCD, 0x82, 0xCD, 0x85, 0xDE, 0x06, + 0xE0, 0xA4, 0xA8, 0xE0, 0xA4, 0xBC, 0x0D, 0x06, // Bytes 3e40 - 3e7f - 0xCE, 0x06, 0xCE, 0x95, 0xCC, 0x94, 0xCC, 0x81, - 0xCE, 0x06, 0xCE, 0x97, 0xCC, 0x93, 0xCD, 0x85, - 0xDE, 0x06, 0xCE, 0x97, 0xCC, 0x94, 0xCD, 0x85, - 0xDE, 0x06, 0xCE, 0x99, 0xCC, 0x93, 0xCC, 0x80, - 0xCE, 0x06, 0xCE, 0x99, 0xCC, 0x93, 0xCC, 0x81, - 0xCE, 0x06, 0xCE, 0x99, 0xCC, 0x93, 0xCD, 0x82, - 0xCE, 0x06, 0xCE, 0x99, 0xCC, 0x94, 0xCC, 0x80, - 0xCE, 0x06, 0xCE, 0x99, 0xCC, 0x94, 0xCC, 0x81, + 0xE0, 0xA4, 0xB0, 0xE0, 0xA4, 0xBC, 0x0D, 0x06, + 0xE0, 0xA4, 0xB3, 0xE0, 0xA4, 0xBC, 0x0D, 0x06, + 0xE0, 0xA7, 0x87, 0xE0, 0xA6, 0xBE, 0x01, 0x06, + 0xE0, 0xA7, 0x87, 0xE0, 0xA7, 0x97, 0x01, 0x06, + 0xE0, 0xAD, 0x87, 0xE0, 0xAC, 0xBE, 0x01, 0x06, + 0xE0, 0xAD, 0x87, 0xE0, 0xAD, 0x96, 0x01, 0x06, + 0xE0, 0xAD, 0x87, 0xE0, 0xAD, 0x97, 0x01, 0x06, + 0xE0, 0xAE, 0x92, 0xE0, 0xAF, 0x97, 0x01, 0x06, // Bytes 3e80 - 3ebf - 0xCE, 0x06, 0xCE, 0x99, 0xCC, 0x94, 0xCD, 0x82, - 0xCE, 0x06, 0xCE, 0x9F, 0xCC, 0x93, 0xCC, 0x80, - 0xCE, 0x06, 0xCE, 0x9F, 0xCC, 0x93, 0xCC, 0x81, - 0xCE, 0x06, 0xCE, 0x9F, 0xCC, 0x94, 0xCC, 0x80, - 0xCE, 0x06, 0xCE, 0x9F, 0xCC, 0x94, 0xCC, 0x81, - 0xCE, 0x06, 0xCE, 0xA5, 0xCC, 0x94, 0xCC, 0x80, - 0xCE, 0x06, 0xCE, 0xA5, 0xCC, 0x94, 0xCC, 0x81, - 0xCE, 0x06, 0xCE, 0xA5, 0xCC, 0x94, 0xCD, 0x82, + 0xE0, 0xAF, 0x86, 0xE0, 0xAE, 0xBE, 0x01, 0x06, + 0xE0, 0xAF, 0x86, 0xE0, 0xAF, 0x97, 0x01, 0x06, + 0xE0, 0xAF, 0x87, 0xE0, 0xAE, 0xBE, 0x01, 0x06, + 0xE0, 0xB1, 0x86, 0xE0, 0xB1, 0x96, 0x89, 0x06, + 0xE0, 0xB2, 0xBF, 0xE0, 0xB3, 0x95, 0x01, 0x06, + 0xE0, 0xB3, 0x86, 0xE0, 0xB3, 0x95, 0x01, 0x06, + 0xE0, 0xB3, 0x86, 0xE0, 0xB3, 0x96, 0x01, 0x06, + 0xE0, 0xB5, 0x86, 0xE0, 0xB4, 0xBE, 0x01, 0x06, // Bytes 3ec0 - 3eff - 0xCE, 0x06, 0xCE, 0xA9, 0xCC, 0x93, 0xCD, 0x85, - 0xDE, 0x06, 0xCE, 0xA9, 0xCC, 0x94, 0xCD, 0x85, - 0xDE, 0x06, 0xCE, 0xB1, 0xCC, 0x80, 0xCD, 0x85, - 0xDE, 0x06, 0xCE, 0xB1, 0xCC, 0x81, 0xCD, 0x85, - 0xDE, 0x06, 0xCE, 0xB1, 0xCC, 0x93, 0xCD, 0x85, - 0xDE, 0x06, 0xCE, 0xB1, 0xCC, 0x94, 0xCD, 0x85, - 0xDE, 0x06, 0xCE, 0xB1, 0xCD, 0x82, 0xCD, 0x85, - 0xDE, 0x06, 0xCE, 0xB5, 0xCC, 0x93, 0xCC, 0x80, + 0xE0, 0xB5, 0x86, 0xE0, 0xB5, 0x97, 0x01, 0x06, + 0xE0, 0xB5, 0x87, 0xE0, 0xB4, 0xBE, 0x01, 0x06, + 0xE0, 0xB7, 0x99, 0xE0, 0xB7, 0x8A, 0x15, 0x06, + 0xE0, 0xB7, 0x99, 0xE0, 0xB7, 0x9F, 0x01, 0x06, + 0xE1, 0x80, 0xA5, 0xE1, 0x80, 0xAE, 0x01, 0x06, + 0xE1, 0xAC, 0x85, 0xE1, 0xAC, 0xB5, 0x01, 0x06, + 0xE1, 0xAC, 0x87, 0xE1, 0xAC, 0xB5, 0x01, 0x06, + 0xE1, 0xAC, 0x89, 0xE1, 0xAC, 0xB5, 0x01, 0x06, // Bytes 3f00 - 3f3f - 0xCE, 0x06, 0xCE, 0xB5, 0xCC, 0x93, 0xCC, 0x81, - 0xCE, 0x06, 0xCE, 0xB5, 0xCC, 0x94, 0xCC, 0x80, - 0xCE, 0x06, 0xCE, 0xB5, 0xCC, 0x94, 0xCC, 0x81, - 0xCE, 0x06, 0xCE, 0xB7, 0xCC, 0x80, 0xCD, 0x85, - 0xDE, 0x06, 0xCE, 0xB7, 0xCC, 0x81, 0xCD, 0x85, - 0xDE, 0x06, 0xCE, 0xB7, 0xCC, 0x93, 0xCD, 0x85, - 0xDE, 0x06, 0xCE, 0xB7, 0xCC, 0x94, 0xCD, 0x85, - 0xDE, 0x06, 0xCE, 0xB7, 0xCD, 0x82, 0xCD, 0x85, + 0xE1, 0xAC, 0x8B, 0xE1, 0xAC, 0xB5, 0x01, 0x06, + 0xE1, 0xAC, 0x8D, 0xE1, 0xAC, 0xB5, 0x01, 0x06, + 0xE1, 0xAC, 0x91, 0xE1, 0xAC, 0xB5, 0x01, 0x06, + 0xE1, 0xAC, 0xBA, 0xE1, 0xAC, 0xB5, 0x01, 0x06, + 0xE1, 0xAC, 0xBC, 0xE1, 0xAC, 0xB5, 0x01, 0x06, + 0xE1, 0xAC, 0xBE, 0xE1, 0xAC, 0xB5, 0x01, 0x06, + 0xE1, 0xAC, 0xBF, 0xE1, 0xAC, 0xB5, 0x01, 0x06, + 0xE1, 0xAD, 0x82, 0xE1, 0xAC, 0xB5, 0x01, 0x06, // Bytes 3f40 - 3f7f - 0xDE, 0x06, 0xCE, 0xB9, 0xCC, 0x88, 0xCC, 0x80, - 0xCE, 0x06, 0xCE, 0xB9, 0xCC, 0x88, 0xCC, 0x81, - 0xCE, 0x06, 0xCE, 0xB9, 0xCC, 0x88, 0xCD, 0x82, - 0xCE, 0x06, 0xCE, 0xB9, 0xCC, 0x93, 0xCC, 0x80, - 0xCE, 0x06, 0xCE, 0xB9, 0xCC, 0x93, 0xCC, 0x81, - 0xCE, 0x06, 0xCE, 0xB9, 0xCC, 0x93, 0xCD, 0x82, - 0xCE, 0x06, 0xCE, 0xB9, 0xCC, 0x94, 0xCC, 0x80, - 0xCE, 0x06, 0xCE, 0xB9, 0xCC, 0x94, 0xCC, 0x81, + 0xE3, 0x81, 0x86, 0xE3, 0x82, 0x99, 0x11, 0x06, + 0xE3, 0x81, 0x8B, 0xE3, 0x82, 0x99, 0x11, 0x06, + 0xE3, 0x81, 0x8D, 0xE3, 0x82, 0x99, 0x11, 0x06, + 0xE3, 0x81, 0x8F, 0xE3, 0x82, 0x99, 0x11, 0x06, + 0xE3, 0x81, 0x91, 0xE3, 0x82, 0x99, 0x11, 0x06, + 0xE3, 0x81, 0x93, 0xE3, 0x82, 0x99, 0x11, 0x06, + 0xE3, 0x81, 0x95, 0xE3, 0x82, 0x99, 0x11, 0x06, + 0xE3, 0x81, 0x97, 0xE3, 0x82, 0x99, 0x11, 0x06, // Bytes 3f80 - 3fbf - 0xCE, 0x06, 0xCE, 0xB9, 0xCC, 0x94, 0xCD, 0x82, - 0xCE, 0x06, 0xCE, 0xBF, 0xCC, 0x93, 0xCC, 0x80, - 0xCE, 0x06, 0xCE, 0xBF, 0xCC, 0x93, 0xCC, 0x81, - 0xCE, 0x06, 0xCE, 0xBF, 0xCC, 0x94, 0xCC, 0x80, - 0xCE, 0x06, 0xCE, 0xBF, 0xCC, 0x94, 0xCC, 0x81, - 0xCE, 0x06, 0xCF, 0x85, 0xCC, 0x88, 0xCC, 0x80, - 0xCE, 0x06, 0xCF, 0x85, 0xCC, 0x88, 0xCC, 0x81, - 0xCE, 0x06, 0xCF, 0x85, 0xCC, 0x88, 0xCD, 0x82, + 0xE3, 0x81, 0x99, 0xE3, 0x82, 0x99, 0x11, 0x06, + 0xE3, 0x81, 0x9B, 0xE3, 0x82, 0x99, 0x11, 0x06, + 0xE3, 0x81, 0x9D, 0xE3, 0x82, 0x99, 0x11, 0x06, + 0xE3, 0x81, 0x9F, 0xE3, 0x82, 0x99, 0x11, 0x06, + 0xE3, 0x81, 0xA1, 0xE3, 0x82, 0x99, 0x11, 0x06, + 0xE3, 0x81, 0xA4, 0xE3, 0x82, 0x99, 0x11, 0x06, + 0xE3, 0x81, 0xA6, 0xE3, 0x82, 0x99, 0x11, 0x06, + 0xE3, 0x81, 0xA8, 0xE3, 0x82, 0x99, 0x11, 0x06, // Bytes 3fc0 - 3fff - 0xCE, 0x06, 0xCF, 0x85, 0xCC, 0x93, 0xCC, 0x80, - 0xCE, 0x06, 0xCF, 0x85, 0xCC, 0x93, 0xCC, 0x81, - 0xCE, 0x06, 0xCF, 0x85, 0xCC, 0x93, 0xCD, 0x82, - 0xCE, 0x06, 0xCF, 0x85, 0xCC, 0x94, 0xCC, 0x80, - 0xCE, 0x06, 0xCF, 0x85, 0xCC, 0x94, 0xCC, 0x81, - 0xCE, 0x06, 0xCF, 0x85, 0xCC, 0x94, 0xCD, 0x82, - 0xCE, 0x06, 0xCF, 0x89, 0xCC, 0x80, 0xCD, 0x85, - 0xDE, 0x06, 0xCF, 0x89, 0xCC, 0x81, 0xCD, 0x85, + 0xE3, 0x81, 0xAF, 0xE3, 0x82, 0x99, 0x11, 0x06, + 0xE3, 0x81, 0xAF, 0xE3, 0x82, 0x9A, 0x11, 0x06, + 0xE3, 0x81, 0xB2, 0xE3, 0x82, 0x99, 0x11, 0x06, + 0xE3, 0x81, 0xB2, 0xE3, 0x82, 0x9A, 0x11, 0x06, + 0xE3, 0x81, 0xB5, 0xE3, 0x82, 0x99, 0x11, 0x06, + 0xE3, 0x81, 0xB5, 0xE3, 0x82, 0x9A, 0x11, 0x06, + 0xE3, 0x81, 0xB8, 0xE3, 0x82, 0x99, 0x11, 0x06, + 0xE3, 0x81, 0xB8, 0xE3, 0x82, 0x9A, 0x11, 0x06, // Bytes 4000 - 403f - 0xDE, 0x06, 0xCF, 0x89, 0xCC, 0x93, 0xCD, 0x85, - 0xDE, 0x06, 0xCF, 0x89, 0xCC, 0x94, 0xCD, 0x85, - 0xDE, 0x06, 0xCF, 0x89, 0xCD, 0x82, 0xCD, 0x85, - 0xDE, 0x06, 0xE0, 0xA4, 0xA8, 0xE0, 0xA4, 0xBC, - 0x0D, 0x06, 0xE0, 0xA4, 0xB0, 0xE0, 0xA4, 0xBC, - 0x0D, 0x06, 0xE0, 0xA4, 0xB3, 0xE0, 0xA4, 0xBC, - 0x0D, 0x06, 0xE0, 0xB1, 0x86, 0xE0, 0xB1, 0x96, - 0x89, 0x06, 0xE0, 0xB7, 0x99, 0xE0, 0xB7, 0x8A, + 0xE3, 0x81, 0xBB, 0xE3, 0x82, 0x99, 0x11, 0x06, + 0xE3, 0x81, 0xBB, 0xE3, 0x82, 0x9A, 0x11, 0x06, + 0xE3, 0x82, 0x9D, 0xE3, 0x82, 0x99, 0x11, 0x06, + 0xE3, 0x82, 0xA6, 0xE3, 0x82, 0x99, 0x11, 0x06, + 0xE3, 0x82, 0xAB, 0xE3, 0x82, 0x99, 0x11, 0x06, + 0xE3, 0x82, 0xAD, 0xE3, 0x82, 0x99, 0x11, 0x06, + 0xE3, 0x82, 0xAF, 0xE3, 0x82, 0x99, 0x11, 0x06, + 0xE3, 0x82, 0xB1, 0xE3, 0x82, 0x99, 0x11, 0x06, // Bytes 4040 - 407f - 0x15, 0x06, 0xE3, 0x81, 0x86, 0xE3, 0x82, 0x99, - 0x11, 0x06, 0xE3, 0x81, 0x8B, 0xE3, 0x82, 0x99, - 0x11, 0x06, 0xE3, 0x81, 0x8D, 0xE3, 0x82, 0x99, - 0x11, 0x06, 0xE3, 0x81, 0x8F, 0xE3, 0x82, 0x99, - 0x11, 0x06, 0xE3, 0x81, 0x91, 0xE3, 0x82, 0x99, - 0x11, 0x06, 0xE3, 0x81, 0x93, 0xE3, 0x82, 0x99, - 0x11, 0x06, 0xE3, 0x81, 0x95, 0xE3, 0x82, 0x99, - 0x11, 0x06, 0xE3, 0x81, 0x97, 0xE3, 0x82, 0x99, + 0xE3, 0x82, 0xB3, 0xE3, 0x82, 0x99, 0x11, 0x06, + 0xE3, 0x82, 0xB5, 0xE3, 0x82, 0x99, 0x11, 0x06, + 0xE3, 0x82, 0xB7, 0xE3, 0x82, 0x99, 0x11, 0x06, + 0xE3, 0x82, 0xB9, 0xE3, 0x82, 0x99, 0x11, 0x06, + 0xE3, 0x82, 0xBB, 0xE3, 0x82, 0x99, 0x11, 0x06, + 0xE3, 0x82, 0xBD, 0xE3, 0x82, 0x99, 0x11, 0x06, + 0xE3, 0x82, 0xBF, 0xE3, 0x82, 0x99, 0x11, 0x06, + 0xE3, 0x83, 0x81, 0xE3, 0x82, 0x99, 0x11, 0x06, // Bytes 4080 - 40bf - 0x11, 0x06, 0xE3, 0x81, 0x99, 0xE3, 0x82, 0x99, - 0x11, 0x06, 0xE3, 0x81, 0x9B, 0xE3, 0x82, 0x99, - 0x11, 0x06, 0xE3, 0x81, 0x9D, 0xE3, 0x82, 0x99, - 0x11, 0x06, 0xE3, 0x81, 0x9F, 0xE3, 0x82, 0x99, - 0x11, 0x06, 0xE3, 0x81, 0xA1, 0xE3, 0x82, 0x99, - 0x11, 0x06, 0xE3, 0x81, 0xA4, 0xE3, 0x82, 0x99, - 0x11, 0x06, 0xE3, 0x81, 0xA6, 0xE3, 0x82, 0x99, - 0x11, 0x06, 0xE3, 0x81, 0xA8, 0xE3, 0x82, 0x99, + 0xE3, 0x83, 0x84, 0xE3, 0x82, 0x99, 0x11, 0x06, + 0xE3, 0x83, 0x86, 0xE3, 0x82, 0x99, 0x11, 0x06, + 0xE3, 0x83, 0x88, 0xE3, 0x82, 0x99, 0x11, 0x06, + 0xE3, 0x83, 0x8F, 0xE3, 0x82, 0x99, 0x11, 0x06, + 0xE3, 0x83, 0x8F, 0xE3, 0x82, 0x9A, 0x11, 0x06, + 0xE3, 0x83, 0x92, 0xE3, 0x82, 0x99, 0x11, 0x06, + 0xE3, 0x83, 0x92, 0xE3, 0x82, 0x9A, 0x11, 0x06, + 0xE3, 0x83, 0x95, 0xE3, 0x82, 0x99, 0x11, 0x06, // Bytes 40c0 - 40ff - 0x11, 0x06, 0xE3, 0x81, 0xAF, 0xE3, 0x82, 0x99, - 0x11, 0x06, 0xE3, 0x81, 0xAF, 0xE3, 0x82, 0x9A, - 0x11, 0x06, 0xE3, 0x81, 0xB2, 0xE3, 0x82, 0x99, - 0x11, 0x06, 0xE3, 0x81, 0xB2, 0xE3, 0x82, 0x9A, - 0x11, 0x06, 0xE3, 0x81, 0xB5, 0xE3, 0x82, 0x99, - 0x11, 0x06, 0xE3, 0x81, 0xB5, 0xE3, 0x82, 0x9A, - 0x11, 0x06, 0xE3, 0x81, 0xB8, 0xE3, 0x82, 0x99, - 0x11, 0x06, 0xE3, 0x81, 0xB8, 0xE3, 0x82, 0x9A, + 0xE3, 0x83, 0x95, 0xE3, 0x82, 0x9A, 0x11, 0x06, + 0xE3, 0x83, 0x98, 0xE3, 0x82, 0x99, 0x11, 0x06, + 0xE3, 0x83, 0x98, 0xE3, 0x82, 0x9A, 0x11, 0x06, + 0xE3, 0x83, 0x9B, 0xE3, 0x82, 0x99, 0x11, 0x06, + 0xE3, 0x83, 0x9B, 0xE3, 0x82, 0x9A, 0x11, 0x06, + 0xE3, 0x83, 0xAF, 0xE3, 0x82, 0x99, 0x11, 0x06, + 0xE3, 0x83, 0xB0, 0xE3, 0x82, 0x99, 0x11, 0x06, + 0xE3, 0x83, 0xB1, 0xE3, 0x82, 0x99, 0x11, 0x06, // Bytes 4100 - 413f - 0x11, 0x06, 0xE3, 0x81, 0xBB, 0xE3, 0x82, 0x99, - 0x11, 0x06, 0xE3, 0x81, 0xBB, 0xE3, 0x82, 0x9A, - 0x11, 0x06, 0xE3, 0x82, 0x9D, 0xE3, 0x82, 0x99, - 0x11, 0x06, 0xE3, 0x82, 0xA6, 0xE3, 0x82, 0x99, - 0x11, 0x06, 0xE3, 0x82, 0xAB, 0xE3, 0x82, 0x99, - 0x11, 0x06, 0xE3, 0x82, 0xAD, 0xE3, 0x82, 0x99, - 0x11, 0x06, 0xE3, 0x82, 0xAF, 0xE3, 0x82, 0x99, - 0x11, 0x06, 0xE3, 0x82, 0xB1, 0xE3, 0x82, 0x99, + 0xE3, 0x83, 0xB2, 0xE3, 0x82, 0x99, 0x11, 0x06, + 0xE3, 0x83, 0xBD, 0xE3, 0x82, 0x99, 0x11, 0x08, + 0xCE, 0x91, 0xCC, 0x93, 0xCC, 0x80, 0xCD, 0x85, + 0xDF, 0x08, 0xCE, 0x91, 0xCC, 0x93, 0xCC, 0x81, + 0xCD, 0x85, 0xDF, 0x08, 0xCE, 0x91, 0xCC, 0x93, + 0xCD, 0x82, 0xCD, 0x85, 0xDF, 0x08, 0xCE, 0x91, + 0xCC, 0x94, 0xCC, 0x80, 0xCD, 0x85, 0xDF, 0x08, + 0xCE, 0x91, 0xCC, 0x94, 0xCC, 0x81, 0xCD, 0x85, // Bytes 4140 - 417f - 0x11, 0x06, 0xE3, 0x82, 0xB3, 0xE3, 0x82, 0x99, - 0x11, 0x06, 0xE3, 0x82, 0xB5, 0xE3, 0x82, 0x99, - 0x11, 0x06, 0xE3, 0x82, 0xB7, 0xE3, 0x82, 0x99, - 0x11, 0x06, 0xE3, 0x82, 0xB9, 0xE3, 0x82, 0x99, - 0x11, 0x06, 0xE3, 0x82, 0xBB, 0xE3, 0x82, 0x99, - 0x11, 0x06, 0xE3, 0x82, 0xBD, 0xE3, 0x82, 0x99, - 0x11, 0x06, 0xE3, 0x82, 0xBF, 0xE3, 0x82, 0x99, - 0x11, 0x06, 0xE3, 0x83, 0x81, 0xE3, 0x82, 0x99, + 0xDF, 0x08, 0xCE, 0x91, 0xCC, 0x94, 0xCD, 0x82, + 0xCD, 0x85, 0xDF, 0x08, 0xCE, 0x97, 0xCC, 0x93, + 0xCC, 0x80, 0xCD, 0x85, 0xDF, 0x08, 0xCE, 0x97, + 0xCC, 0x93, 0xCC, 0x81, 0xCD, 0x85, 0xDF, 0x08, + 0xCE, 0x97, 0xCC, 0x93, 0xCD, 0x82, 0xCD, 0x85, + 0xDF, 0x08, 0xCE, 0x97, 0xCC, 0x94, 0xCC, 0x80, + 0xCD, 0x85, 0xDF, 0x08, 0xCE, 0x97, 0xCC, 0x94, + 0xCC, 0x81, 0xCD, 0x85, 0xDF, 0x08, 0xCE, 0x97, // Bytes 4180 - 41bf - 0x11, 0x06, 0xE3, 0x83, 0x84, 0xE3, 0x82, 0x99, - 0x11, 0x06, 0xE3, 0x83, 0x86, 0xE3, 0x82, 0x99, - 0x11, 0x06, 0xE3, 0x83, 0x88, 0xE3, 0x82, 0x99, - 0x11, 0x06, 0xE3, 0x83, 0x8F, 0xE3, 0x82, 0x99, - 0x11, 0x06, 0xE3, 0x83, 0x8F, 0xE3, 0x82, 0x9A, - 0x11, 0x06, 0xE3, 0x83, 0x92, 0xE3, 0x82, 0x99, - 0x11, 0x06, 0xE3, 0x83, 0x92, 0xE3, 0x82, 0x9A, - 0x11, 0x06, 0xE3, 0x83, 0x95, 0xE3, 0x82, 0x99, + 0xCC, 0x94, 0xCD, 0x82, 0xCD, 0x85, 0xDF, 0x08, + 0xCE, 0xA9, 0xCC, 0x93, 0xCC, 0x80, 0xCD, 0x85, + 0xDF, 0x08, 0xCE, 0xA9, 0xCC, 0x93, 0xCC, 0x81, + 0xCD, 0x85, 0xDF, 0x08, 0xCE, 0xA9, 0xCC, 0x93, + 0xCD, 0x82, 0xCD, 0x85, 0xDF, 0x08, 0xCE, 0xA9, + 0xCC, 0x94, 0xCC, 0x80, 0xCD, 0x85, 0xDF, 0x08, + 0xCE, 0xA9, 0xCC, 0x94, 0xCC, 0x81, 0xCD, 0x85, + 0xDF, 0x08, 0xCE, 0xA9, 0xCC, 0x94, 0xCD, 0x82, // Bytes 41c0 - 41ff - 0x11, 0x06, 0xE3, 0x83, 0x95, 0xE3, 0x82, 0x9A, - 0x11, 0x06, 0xE3, 0x83, 0x98, 0xE3, 0x82, 0x99, - 0x11, 0x06, 0xE3, 0x83, 0x98, 0xE3, 0x82, 0x9A, - 0x11, 0x06, 0xE3, 0x83, 0x9B, 0xE3, 0x82, 0x99, - 0x11, 0x06, 0xE3, 0x83, 0x9B, 0xE3, 0x82, 0x9A, - 0x11, 0x06, 0xE3, 0x83, 0xAF, 0xE3, 0x82, 0x99, - 0x11, 0x06, 0xE3, 0x83, 0xB0, 0xE3, 0x82, 0x99, - 0x11, 0x06, 0xE3, 0x83, 0xB1, 0xE3, 0x82, 0x99, + 0xCD, 0x85, 0xDF, 0x08, 0xCE, 0xB1, 0xCC, 0x93, + 0xCC, 0x80, 0xCD, 0x85, 0xDF, 0x08, 0xCE, 0xB1, + 0xCC, 0x93, 0xCC, 0x81, 0xCD, 0x85, 0xDF, 0x08, + 0xCE, 0xB1, 0xCC, 0x93, 0xCD, 0x82, 0xCD, 0x85, + 0xDF, 0x08, 0xCE, 0xB1, 0xCC, 0x94, 0xCC, 0x80, + 0xCD, 0x85, 0xDF, 0x08, 0xCE, 0xB1, 0xCC, 0x94, + 0xCC, 0x81, 0xCD, 0x85, 0xDF, 0x08, 0xCE, 0xB1, + 0xCC, 0x94, 0xCD, 0x82, 0xCD, 0x85, 0xDF, 0x08, // Bytes 4200 - 423f - 0x11, 0x06, 0xE3, 0x83, 0xB2, 0xE3, 0x82, 0x99, - 0x11, 0x06, 0xE3, 0x83, 0xBD, 0xE3, 0x82, 0x99, - 0x11, 0x08, 0xCE, 0x91, 0xCC, 0x93, 0xCC, 0x80, - 0xCD, 0x85, 0xDF, 0x08, 0xCE, 0x91, 0xCC, 0x93, - 0xCC, 0x81, 0xCD, 0x85, 0xDF, 0x08, 0xCE, 0x91, - 0xCC, 0x93, 0xCD, 0x82, 0xCD, 0x85, 0xDF, 0x08, - 0xCE, 0x91, 0xCC, 0x94, 0xCC, 0x80, 0xCD, 0x85, - 0xDF, 0x08, 0xCE, 0x91, 0xCC, 0x94, 0xCC, 0x81, + 0xCE, 0xB7, 0xCC, 0x93, 0xCC, 0x80, 0xCD, 0x85, + 0xDF, 0x08, 0xCE, 0xB7, 0xCC, 0x93, 0xCC, 0x81, + 0xCD, 0x85, 0xDF, 0x08, 0xCE, 0xB7, 0xCC, 0x93, + 0xCD, 0x82, 0xCD, 0x85, 0xDF, 0x08, 0xCE, 0xB7, + 0xCC, 0x94, 0xCC, 0x80, 0xCD, 0x85, 0xDF, 0x08, + 0xCE, 0xB7, 0xCC, 0x94, 0xCC, 0x81, 0xCD, 0x85, + 0xDF, 0x08, 0xCE, 0xB7, 0xCC, 0x94, 0xCD, 0x82, + 0xCD, 0x85, 0xDF, 0x08, 0xCF, 0x89, 0xCC, 0x93, // Bytes 4240 - 427f - 0xCD, 0x85, 0xDF, 0x08, 0xCE, 0x91, 0xCC, 0x94, - 0xCD, 0x82, 0xCD, 0x85, 0xDF, 0x08, 0xCE, 0x97, - 0xCC, 0x93, 0xCC, 0x80, 0xCD, 0x85, 0xDF, 0x08, - 0xCE, 0x97, 0xCC, 0x93, 0xCC, 0x81, 0xCD, 0x85, - 0xDF, 0x08, 0xCE, 0x97, 0xCC, 0x93, 0xCD, 0x82, - 0xCD, 0x85, 0xDF, 0x08, 0xCE, 0x97, 0xCC, 0x94, - 0xCC, 0x80, 0xCD, 0x85, 0xDF, 0x08, 0xCE, 0x97, - 0xCC, 0x94, 0xCC, 0x81, 0xCD, 0x85, 0xDF, 0x08, + 0xCC, 0x80, 0xCD, 0x85, 0xDF, 0x08, 0xCF, 0x89, + 0xCC, 0x93, 0xCC, 0x81, 0xCD, 0x85, 0xDF, 0x08, + 0xCF, 0x89, 0xCC, 0x93, 0xCD, 0x82, 0xCD, 0x85, + 0xDF, 0x08, 0xCF, 0x89, 0xCC, 0x94, 0xCC, 0x80, + 0xCD, 0x85, 0xDF, 0x08, 0xCF, 0x89, 0xCC, 0x94, + 0xCC, 0x81, 0xCD, 0x85, 0xDF, 0x08, 0xCF, 0x89, + 0xCC, 0x94, 0xCD, 0x82, 0xCD, 0x85, 0xDF, 0x08, + 0xF0, 0x91, 0x82, 0x99, 0xF0, 0x91, 0x82, 0xBA, // Bytes 4280 - 42bf - 0xCE, 0x97, 0xCC, 0x94, 0xCD, 0x82, 0xCD, 0x85, - 0xDF, 0x08, 0xCE, 0xA9, 0xCC, 0x93, 0xCC, 0x80, - 0xCD, 0x85, 0xDF, 0x08, 0xCE, 0xA9, 0xCC, 0x93, - 0xCC, 0x81, 0xCD, 0x85, 0xDF, 0x08, 0xCE, 0xA9, - 0xCC, 0x93, 0xCD, 0x82, 0xCD, 0x85, 0xDF, 0x08, - 0xCE, 0xA9, 0xCC, 0x94, 0xCC, 0x80, 0xCD, 0x85, - 0xDF, 0x08, 0xCE, 0xA9, 0xCC, 0x94, 0xCC, 0x81, - 0xCD, 0x85, 0xDF, 0x08, 0xCE, 0xA9, 0xCC, 0x94, + 0x0D, 0x08, 0xF0, 0x91, 0x82, 0x9B, 0xF0, 0x91, + 0x82, 0xBA, 0x0D, 0x08, 0xF0, 0x91, 0x82, 0xA5, + 0xF0, 0x91, 0x82, 0xBA, 0x0D, 0x08, 0xF0, 0x91, + 0x84, 0xB1, 0xF0, 0x91, 0x84, 0xA7, 0x01, 0x08, + 0xF0, 0x91, 0x84, 0xB2, 0xF0, 0x91, 0x84, 0xA7, + 0x01, 0x08, 0xF0, 0x91, 0x8D, 0x87, 0xF0, 0x91, + 0x8C, 0xBE, 0x01, 0x08, 0xF0, 0x91, 0x8D, 0x87, + 0xF0, 0x91, 0x8D, 0x97, 0x01, 0x08, 0xF0, 0x91, // Bytes 42c0 - 42ff - 0xCD, 0x82, 0xCD, 0x85, 0xDF, 0x08, 0xCE, 0xB1, - 0xCC, 0x93, 0xCC, 0x80, 0xCD, 0x85, 0xDF, 0x08, - 0xCE, 0xB1, 0xCC, 0x93, 0xCC, 0x81, 0xCD, 0x85, - 0xDF, 0x08, 0xCE, 0xB1, 0xCC, 0x93, 0xCD, 0x82, - 0xCD, 0x85, 0xDF, 0x08, 0xCE, 0xB1, 0xCC, 0x94, - 0xCC, 0x80, 0xCD, 0x85, 0xDF, 0x08, 0xCE, 0xB1, - 0xCC, 0x94, 0xCC, 0x81, 0xCD, 0x85, 0xDF, 0x08, - 0xCE, 0xB1, 0xCC, 0x94, 0xCD, 0x82, 0xCD, 0x85, + 0x92, 0xB9, 0xF0, 0x91, 0x92, 0xB0, 0x01, 0x08, + 0xF0, 0x91, 0x92, 0xB9, 0xF0, 0x91, 0x92, 0xBA, + 0x01, 0x08, 0xF0, 0x91, 0x92, 0xB9, 0xF0, 0x91, + 0x92, 0xBD, 0x01, 0x08, 0xF0, 0x91, 0x96, 0xB8, + 0xF0, 0x91, 0x96, 0xAF, 0x01, 0x08, 0xF0, 0x91, + 0x96, 0xB9, 0xF0, 0x91, 0x96, 0xAF, 0x01, 0x08, + 0xF0, 0x91, 0xA4, 0xB5, 0xF0, 0x91, 0xA4, 0xB0, + 0x01, 0x09, 0xE0, 0xB3, 0x86, 0xE0, 0xB3, 0x82, // Bytes 4300 - 433f - 0xDF, 0x08, 0xCE, 0xB7, 0xCC, 0x93, 0xCC, 0x80, - 0xCD, 0x85, 0xDF, 0x08, 0xCE, 0xB7, 0xCC, 0x93, - 0xCC, 0x81, 0xCD, 0x85, 0xDF, 0x08, 0xCE, 0xB7, - 0xCC, 0x93, 0xCD, 0x82, 0xCD, 0x85, 0xDF, 0x08, - 0xCE, 0xB7, 0xCC, 0x94, 0xCC, 0x80, 0xCD, 0x85, - 0xDF, 0x08, 0xCE, 0xB7, 0xCC, 0x94, 0xCC, 0x81, - 0xCD, 0x85, 0xDF, 0x08, 0xCE, 0xB7, 0xCC, 0x94, - 0xCD, 0x82, 0xCD, 0x85, 0xDF, 0x08, 0xCF, 0x89, - // Bytes 4340 - 437f - 0xCC, 0x93, 0xCC, 0x80, 0xCD, 0x85, 0xDF, 0x08, - 0xCF, 0x89, 0xCC, 0x93, 0xCC, 0x81, 0xCD, 0x85, - 0xDF, 0x08, 0xCF, 0x89, 0xCC, 0x93, 0xCD, 0x82, - 0xCD, 0x85, 0xDF, 0x08, 0xCF, 0x89, 0xCC, 0x94, - 0xCC, 0x80, 0xCD, 0x85, 0xDF, 0x08, 0xCF, 0x89, - 0xCC, 0x94, 0xCC, 0x81, 0xCD, 0x85, 0xDF, 0x08, - 0xCF, 0x89, 0xCC, 0x94, 0xCD, 0x82, 0xCD, 0x85, - 0xDF, 0x08, 0xF0, 0x91, 0x82, 0x99, 0xF0, 0x91, - // Bytes 4380 - 43bf - 0x82, 0xBA, 0x0D, 0x08, 0xF0, 0x91, 0x82, 0x9B, - 0xF0, 0x91, 0x82, 0xBA, 0x0D, 0x08, 0xF0, 0x91, - 0x82, 0xA5, 0xF0, 0x91, 0x82, 0xBA, 0x0D, 0x42, + 0xE0, 0xB3, 0x95, 0x02, 0x09, 0xE0, 0xB7, 0x99, + 0xE0, 0xB7, 0x8F, 0xE0, 0xB7, 0x8A, 0x16, 0x42, 0xC2, 0xB4, 0x01, 0x43, 0x20, 0xCC, 0x81, 0xCD, 0x43, 0x20, 0xCC, 0x83, 0xCD, 0x43, 0x20, 0xCC, 0x84, 0xCD, 0x43, 0x20, 0xCC, 0x85, 0xCD, 0x43, 0x20, 0xCC, 0x86, 0xCD, 0x43, 0x20, 0xCC, 0x87, 0xCD, 0x43, 0x20, 0xCC, 0x88, 0xCD, 0x43, 0x20, - // Bytes 43c0 - 43ff 0xCC, 0x8A, 0xCD, 0x43, 0x20, 0xCC, 0x8B, 0xCD, + // Bytes 4340 - 437f 0x43, 0x20, 0xCC, 0x93, 0xCD, 0x43, 0x20, 0xCC, 0x94, 0xCD, 0x43, 0x20, 0xCC, 0xA7, 0xA9, 0x43, 0x20, 0xCC, 0xA8, 0xA9, 0x43, 0x20, 0xCC, 0xB3, @@ -2488,8 +2469,8 @@ var decomps = [...]byte{ 0xCD, 0x85, 0xDD, 0x43, 0x20, 0xD9, 0x8B, 0x5D, 0x43, 0x20, 0xD9, 0x8C, 0x61, 0x43, 0x20, 0xD9, 0x8D, 0x65, 0x43, 0x20, 0xD9, 0x8E, 0x69, 0x43, - // Bytes 4400 - 443f 0x20, 0xD9, 0x8F, 0x6D, 0x43, 0x20, 0xD9, 0x90, + // Bytes 4380 - 43bf 0x71, 0x43, 0x20, 0xD9, 0x91, 0x75, 0x43, 0x20, 0xD9, 0x92, 0x79, 0x43, 0x41, 0xCC, 0x8A, 0xCD, 0x43, 0x73, 0xCC, 0x87, 0xCD, 0x44, 0x20, 0xE3, @@ -2497,8 +2478,8 @@ var decomps = [...]byte{ 0x11, 0x44, 0xC2, 0xA8, 0xCC, 0x81, 0xCE, 0x44, 0xCE, 0x91, 0xCC, 0x81, 0xCD, 0x44, 0xCE, 0x95, 0xCC, 0x81, 0xCD, 0x44, 0xCE, 0x97, 0xCC, 0x81, - // Bytes 4440 - 447f 0xCD, 0x44, 0xCE, 0x99, 0xCC, 0x81, 0xCD, 0x44, + // Bytes 43c0 - 43ff 0xCE, 0x9F, 0xCC, 0x81, 0xCD, 0x44, 0xCE, 0xA5, 0xCC, 0x81, 0xCD, 0x44, 0xCE, 0xA5, 0xCC, 0x88, 0xCD, 0x44, 0xCE, 0xA9, 0xCC, 0x81, 0xCD, 0x44, @@ -2506,8 +2487,8 @@ var decomps = [...]byte{ 0xCC, 0x81, 0xCD, 0x44, 0xCE, 0xB7, 0xCC, 0x81, 0xCD, 0x44, 0xCE, 0xB9, 0xCC, 0x81, 0xCD, 0x44, 0xCE, 0xBF, 0xCC, 0x81, 0xCD, 0x44, 0xCF, 0x85, - // Bytes 4480 - 44bf 0xCC, 0x81, 0xCD, 0x44, 0xCF, 0x89, 0xCC, 0x81, + // Bytes 4400 - 443f 0xCD, 0x44, 0xD7, 0x90, 0xD6, 0xB7, 0x35, 0x44, 0xD7, 0x90, 0xD6, 0xB8, 0x39, 0x44, 0xD7, 0x90, 0xD6, 0xBC, 0x45, 0x44, 0xD7, 0x91, 0xD6, 0xBC, @@ -2515,8 +2496,8 @@ var decomps = [...]byte{ 0xD7, 0x92, 0xD6, 0xBC, 0x45, 0x44, 0xD7, 0x93, 0xD6, 0xBC, 0x45, 0x44, 0xD7, 0x94, 0xD6, 0xBC, 0x45, 0x44, 0xD7, 0x95, 0xD6, 0xB9, 0x3D, 0x44, - // Bytes 44c0 - 44ff 0xD7, 0x95, 0xD6, 0xBC, 0x45, 0x44, 0xD7, 0x96, + // Bytes 4440 - 447f 0xD6, 0xBC, 0x45, 0x44, 0xD7, 0x98, 0xD6, 0xBC, 0x45, 0x44, 0xD7, 0x99, 0xD6, 0xB4, 0x29, 0x44, 0xD7, 0x99, 0xD6, 0xBC, 0x45, 0x44, 0xD7, 0x9A, @@ -2524,8 +2505,8 @@ var decomps = [...]byte{ 0x45, 0x44, 0xD7, 0x9B, 0xD6, 0xBF, 0x4D, 0x44, 0xD7, 0x9C, 0xD6, 0xBC, 0x45, 0x44, 0xD7, 0x9E, 0xD6, 0xBC, 0x45, 0x44, 0xD7, 0xA0, 0xD6, 0xBC, - // Bytes 4500 - 453f 0x45, 0x44, 0xD7, 0xA1, 0xD6, 0xBC, 0x45, 0x44, + // Bytes 4480 - 44bf 0xD7, 0xA3, 0xD6, 0xBC, 0x45, 0x44, 0xD7, 0xA4, 0xD6, 0xBC, 0x45, 0x44, 0xD7, 0xA4, 0xD6, 0xBF, 0x4D, 0x44, 0xD7, 0xA6, 0xD6, 0xBC, 0x45, 0x44, @@ -2533,8 +2514,8 @@ var decomps = [...]byte{ 0xD6, 0xBC, 0x45, 0x44, 0xD7, 0xA9, 0xD6, 0xBC, 0x45, 0x44, 0xD7, 0xA9, 0xD7, 0x81, 0x51, 0x44, 0xD7, 0xA9, 0xD7, 0x82, 0x55, 0x44, 0xD7, 0xAA, - // Bytes 4540 - 457f 0xD6, 0xBC, 0x45, 0x44, 0xD7, 0xB2, 0xD6, 0xB7, + // Bytes 44c0 - 44ff 0x35, 0x44, 0xD8, 0xA7, 0xD9, 0x8B, 0x5D, 0x44, 0xD8, 0xA7, 0xD9, 0x93, 0xCD, 0x44, 0xD8, 0xA7, 0xD9, 0x94, 0xCD, 0x44, 0xD8, 0xA7, 0xD9, 0x95, @@ -2542,8 +2523,8 @@ var decomps = [...]byte{ 0xD8, 0xB1, 0xD9, 0xB0, 0x7D, 0x44, 0xD9, 0x80, 0xD9, 0x8B, 0x5D, 0x44, 0xD9, 0x80, 0xD9, 0x8E, 0x69, 0x44, 0xD9, 0x80, 0xD9, 0x8F, 0x6D, 0x44, - // Bytes 4580 - 45bf 0xD9, 0x80, 0xD9, 0x90, 0x71, 0x44, 0xD9, 0x80, + // Bytes 4500 - 453f 0xD9, 0x91, 0x75, 0x44, 0xD9, 0x80, 0xD9, 0x92, 0x79, 0x44, 0xD9, 0x87, 0xD9, 0xB0, 0x7D, 0x44, 0xD9, 0x88, 0xD9, 0x94, 0xCD, 0x44, 0xD9, 0x89, @@ -2551,8 +2532,8 @@ var decomps = [...]byte{ 0xCD, 0x44, 0xDB, 0x92, 0xD9, 0x94, 0xCD, 0x44, 0xDB, 0x95, 0xD9, 0x94, 0xCD, 0x45, 0x20, 0xCC, 0x88, 0xCC, 0x80, 0xCE, 0x45, 0x20, 0xCC, 0x88, - // Bytes 45c0 - 45ff 0xCC, 0x81, 0xCE, 0x45, 0x20, 0xCC, 0x88, 0xCD, + // Bytes 4540 - 457f 0x82, 0xCE, 0x45, 0x20, 0xCC, 0x93, 0xCC, 0x80, 0xCE, 0x45, 0x20, 0xCC, 0x93, 0xCC, 0x81, 0xCE, 0x45, 0x20, 0xCC, 0x93, 0xCD, 0x82, 0xCE, 0x45, @@ -2560,8 +2541,8 @@ var decomps = [...]byte{ 0xCC, 0x94, 0xCC, 0x81, 0xCE, 0x45, 0x20, 0xCC, 0x94, 0xCD, 0x82, 0xCE, 0x45, 0x20, 0xD9, 0x8C, 0xD9, 0x91, 0x76, 0x45, 0x20, 0xD9, 0x8D, 0xD9, - // Bytes 4600 - 463f 0x91, 0x76, 0x45, 0x20, 0xD9, 0x8E, 0xD9, 0x91, + // Bytes 4580 - 45bf 0x76, 0x45, 0x20, 0xD9, 0x8F, 0xD9, 0x91, 0x76, 0x45, 0x20, 0xD9, 0x90, 0xD9, 0x91, 0x76, 0x45, 0x20, 0xD9, 0x91, 0xD9, 0xB0, 0x7E, 0x45, 0xE2, @@ -2569,8 +2550,8 @@ var decomps = [...]byte{ 0xCC, 0x88, 0xCC, 0x81, 0xCE, 0x46, 0xCF, 0x85, 0xCC, 0x88, 0xCC, 0x81, 0xCE, 0x46, 0xD7, 0xA9, 0xD6, 0xBC, 0xD7, 0x81, 0x52, 0x46, 0xD7, 0xA9, - // Bytes 4640 - 467f 0xD6, 0xBC, 0xD7, 0x82, 0x56, 0x46, 0xD9, 0x80, + // Bytes 45c0 - 45ff 0xD9, 0x8E, 0xD9, 0x91, 0x76, 0x46, 0xD9, 0x80, 0xD9, 0x8F, 0xD9, 0x91, 0x76, 0x46, 0xD9, 0x80, 0xD9, 0x90, 0xD9, 0x91, 0x76, 0x46, 0xE0, 0xA4, @@ -2578,8 +2559,8 @@ var decomps = [...]byte{ 0x96, 0xE0, 0xA4, 0xBC, 0x0D, 0x46, 0xE0, 0xA4, 0x97, 0xE0, 0xA4, 0xBC, 0x0D, 0x46, 0xE0, 0xA4, 0x9C, 0xE0, 0xA4, 0xBC, 0x0D, 0x46, 0xE0, 0xA4, - // Bytes 4680 - 46bf 0xA1, 0xE0, 0xA4, 0xBC, 0x0D, 0x46, 0xE0, 0xA4, + // Bytes 4600 - 463f 0xA2, 0xE0, 0xA4, 0xBC, 0x0D, 0x46, 0xE0, 0xA4, 0xAB, 0xE0, 0xA4, 0xBC, 0x0D, 0x46, 0xE0, 0xA4, 0xAF, 0xE0, 0xA4, 0xBC, 0x0D, 0x46, 0xE0, 0xA6, @@ -2587,8 +2568,8 @@ var decomps = [...]byte{ 0xA2, 0xE0, 0xA6, 0xBC, 0x0D, 0x46, 0xE0, 0xA6, 0xAF, 0xE0, 0xA6, 0xBC, 0x0D, 0x46, 0xE0, 0xA8, 0x96, 0xE0, 0xA8, 0xBC, 0x0D, 0x46, 0xE0, 0xA8, - // Bytes 46c0 - 46ff 0x97, 0xE0, 0xA8, 0xBC, 0x0D, 0x46, 0xE0, 0xA8, + // Bytes 4640 - 467f 0x9C, 0xE0, 0xA8, 0xBC, 0x0D, 0x46, 0xE0, 0xA8, 0xAB, 0xE0, 0xA8, 0xBC, 0x0D, 0x46, 0xE0, 0xA8, 0xB2, 0xE0, 0xA8, 0xBC, 0x0D, 0x46, 0xE0, 0xA8, @@ -2596,148 +2577,167 @@ var decomps = [...]byte{ 0xA1, 0xE0, 0xAC, 0xBC, 0x0D, 0x46, 0xE0, 0xAC, 0xA2, 0xE0, 0xAC, 0xBC, 0x0D, 0x46, 0xE0, 0xBE, 0xB2, 0xE0, 0xBE, 0x80, 0xA1, 0x46, 0xE0, 0xBE, - // Bytes 4700 - 473f - 0xB3, 0xE0, 0xBE, 0x80, 0xA1, 0x46, 0xE3, 0x83, + 0xB3, 0xE0, 0xBE, 0x80, 0xA1, 0x46, 0xE1, 0x84, + // Bytes 4680 - 46bf + 0x80, 0xE1, 0x85, 0xA1, 0x01, 0x46, 0xE1, 0x84, + 0x82, 0xE1, 0x85, 0xA1, 0x01, 0x46, 0xE1, 0x84, + 0x83, 0xE1, 0x85, 0xA1, 0x01, 0x46, 0xE1, 0x84, + 0x85, 0xE1, 0x85, 0xA1, 0x01, 0x46, 0xE1, 0x84, + 0x86, 0xE1, 0x85, 0xA1, 0x01, 0x46, 0xE1, 0x84, + 0x87, 0xE1, 0x85, 0xA1, 0x01, 0x46, 0xE1, 0x84, + 0x89, 0xE1, 0x85, 0xA1, 0x01, 0x46, 0xE1, 0x84, + 0x8B, 0xE1, 0x85, 0xA1, 0x01, 0x46, 0xE1, 0x84, + // Bytes 46c0 - 46ff + 0x8B, 0xE1, 0x85, 0xAE, 0x01, 0x46, 0xE1, 0x84, + 0x8C, 0xE1, 0x85, 0xA1, 0x01, 0x46, 0xE1, 0x84, + 0x8E, 0xE1, 0x85, 0xA1, 0x01, 0x46, 0xE1, 0x84, + 0x8F, 0xE1, 0x85, 0xA1, 0x01, 0x46, 0xE1, 0x84, + 0x90, 0xE1, 0x85, 0xA1, 0x01, 0x46, 0xE1, 0x84, + 0x91, 0xE1, 0x85, 0xA1, 0x01, 0x46, 0xE1, 0x84, + 0x92, 0xE1, 0x85, 0xA1, 0x01, 0x46, 0xE3, 0x83, 0x86, 0xE3, 0x82, 0x99, 0x11, 0x48, 0xF0, 0x9D, + // Bytes 4700 - 473f 0x85, 0x97, 0xF0, 0x9D, 0x85, 0xA5, 0xB1, 0x48, 0xF0, 0x9D, 0x85, 0x98, 0xF0, 0x9D, 0x85, 0xA5, 0xB1, 0x48, 0xF0, 0x9D, 0x86, 0xB9, 0xF0, 0x9D, 0x85, 0xA5, 0xB1, 0x48, 0xF0, 0x9D, 0x86, 0xBA, 0xF0, 0x9D, 0x85, 0xA5, 0xB1, 0x49, 0xE0, 0xBE, 0xB2, 0xE0, 0xBD, 0xB1, 0xE0, 0xBE, 0x80, 0xA2, - // Bytes 4740 - 477f 0x49, 0xE0, 0xBE, 0xB3, 0xE0, 0xBD, 0xB1, 0xE0, 0xBE, 0x80, 0xA2, 0x4C, 0xF0, 0x9D, 0x85, 0x98, + // Bytes 4740 - 477f 0xF0, 0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85, 0xAE, 0xB2, 0x4C, 0xF0, 0x9D, 0x85, 0x98, 0xF0, 0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85, 0xAF, 0xB2, 0x4C, 0xF0, 0x9D, 0x85, 0x98, 0xF0, 0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85, 0xB0, 0xB2, 0x4C, 0xF0, 0x9D, 0x85, 0x98, 0xF0, 0x9D, 0x85, 0xA5, 0xF0, 0x9D, - // Bytes 4780 - 47bf 0x85, 0xB1, 0xB2, 0x4C, 0xF0, 0x9D, 0x85, 0x98, 0xF0, 0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85, 0xB2, + // Bytes 4780 - 47bf 0xB2, 0x4C, 0xF0, 0x9D, 0x86, 0xB9, 0xF0, 0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85, 0xAE, 0xB2, 0x4C, 0xF0, 0x9D, 0x86, 0xB9, 0xF0, 0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85, 0xAF, 0xB2, 0x4C, 0xF0, 0x9D, 0x86, 0xBA, 0xF0, 0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85, 0xAE, 0xB2, 0x4C, 0xF0, 0x9D, 0x86, 0xBA, - // Bytes 47c0 - 47ff 0xF0, 0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85, 0xAF, 0xB2, 0x83, 0x41, 0xCC, 0x82, 0xCD, 0x83, 0x41, + // Bytes 47c0 - 47ff 0xCC, 0x86, 0xCD, 0x83, 0x41, 0xCC, 0x87, 0xCD, 0x83, 0x41, 0xCC, 0x88, 0xCD, 0x83, 0x41, 0xCC, 0x8A, 0xCD, 0x83, 0x41, 0xCC, 0xA3, 0xB9, 0x83, 0x43, 0xCC, 0xA7, 0xA9, 0x83, 0x45, 0xCC, 0x82, 0xCD, 0x83, 0x45, 0xCC, 0x84, 0xCD, 0x83, 0x45, 0xCC, 0xA3, 0xB9, 0x83, 0x45, 0xCC, 0xA7, 0xA9, - // Bytes 4800 - 483f 0x83, 0x49, 0xCC, 0x88, 0xCD, 0x83, 0x4C, 0xCC, 0xA3, 0xB9, 0x83, 0x4F, 0xCC, 0x82, 0xCD, 0x83, + // Bytes 4800 - 483f 0x4F, 0xCC, 0x83, 0xCD, 0x83, 0x4F, 0xCC, 0x84, 0xCD, 0x83, 0x4F, 0xCC, 0x87, 0xCD, 0x83, 0x4F, 0xCC, 0x88, 0xCD, 0x83, 0x4F, 0xCC, 0x9B, 0xB1, 0x83, 0x4F, 0xCC, 0xA3, 0xB9, 0x83, 0x4F, 0xCC, 0xA8, 0xA9, 0x83, 0x52, 0xCC, 0xA3, 0xB9, 0x83, 0x53, 0xCC, 0x81, 0xCD, 0x83, 0x53, 0xCC, 0x8C, - // Bytes 4840 - 487f 0xCD, 0x83, 0x53, 0xCC, 0xA3, 0xB9, 0x83, 0x55, 0xCC, 0x83, 0xCD, 0x83, 0x55, 0xCC, 0x84, 0xCD, + // Bytes 4840 - 487f 0x83, 0x55, 0xCC, 0x88, 0xCD, 0x83, 0x55, 0xCC, 0x9B, 0xB1, 0x83, 0x61, 0xCC, 0x82, 0xCD, 0x83, 0x61, 0xCC, 0x86, 0xCD, 0x83, 0x61, 0xCC, 0x87, 0xCD, 0x83, 0x61, 0xCC, 0x88, 0xCD, 0x83, 0x61, 0xCC, 0x8A, 0xCD, 0x83, 0x61, 0xCC, 0xA3, 0xB9, 0x83, 0x63, 0xCC, 0xA7, 0xA9, 0x83, 0x65, 0xCC, - // Bytes 4880 - 48bf 0x82, 0xCD, 0x83, 0x65, 0xCC, 0x84, 0xCD, 0x83, 0x65, 0xCC, 0xA3, 0xB9, 0x83, 0x65, 0xCC, 0xA7, + // Bytes 4880 - 48bf 0xA9, 0x83, 0x69, 0xCC, 0x88, 0xCD, 0x83, 0x6C, 0xCC, 0xA3, 0xB9, 0x83, 0x6F, 0xCC, 0x82, 0xCD, 0x83, 0x6F, 0xCC, 0x83, 0xCD, 0x83, 0x6F, 0xCC, 0x84, 0xCD, 0x83, 0x6F, 0xCC, 0x87, 0xCD, 0x83, 0x6F, 0xCC, 0x88, 0xCD, 0x83, 0x6F, 0xCC, 0x9B, 0xB1, 0x83, 0x6F, 0xCC, 0xA3, 0xB9, 0x83, 0x6F, - // Bytes 48c0 - 48ff 0xCC, 0xA8, 0xA9, 0x83, 0x72, 0xCC, 0xA3, 0xB9, 0x83, 0x73, 0xCC, 0x81, 0xCD, 0x83, 0x73, 0xCC, + // Bytes 48c0 - 48ff 0x8C, 0xCD, 0x83, 0x73, 0xCC, 0xA3, 0xB9, 0x83, 0x75, 0xCC, 0x83, 0xCD, 0x83, 0x75, 0xCC, 0x84, 0xCD, 0x83, 0x75, 0xCC, 0x88, 0xCD, 0x83, 0x75, 0xCC, 0x9B, 0xB1, 0x84, 0xCE, 0x91, 0xCC, 0x93, 0xCD, 0x84, 0xCE, 0x91, 0xCC, 0x94, 0xCD, 0x84, 0xCE, 0x95, 0xCC, 0x93, 0xCD, 0x84, 0xCE, 0x95, - // Bytes 4900 - 493f 0xCC, 0x94, 0xCD, 0x84, 0xCE, 0x97, 0xCC, 0x93, 0xCD, 0x84, 0xCE, 0x97, 0xCC, 0x94, 0xCD, 0x84, + // Bytes 4900 - 493f 0xCE, 0x99, 0xCC, 0x93, 0xCD, 0x84, 0xCE, 0x99, 0xCC, 0x94, 0xCD, 0x84, 0xCE, 0x9F, 0xCC, 0x93, 0xCD, 0x84, 0xCE, 0x9F, 0xCC, 0x94, 0xCD, 0x84, 0xCE, 0xA5, 0xCC, 0x94, 0xCD, 0x84, 0xCE, 0xA9, 0xCC, 0x93, 0xCD, 0x84, 0xCE, 0xA9, 0xCC, 0x94, 0xCD, 0x84, 0xCE, 0xB1, 0xCC, 0x80, 0xCD, 0x84, - // Bytes 4940 - 497f 0xCE, 0xB1, 0xCC, 0x81, 0xCD, 0x84, 0xCE, 0xB1, 0xCC, 0x93, 0xCD, 0x84, 0xCE, 0xB1, 0xCC, 0x94, + // Bytes 4940 - 497f 0xCD, 0x84, 0xCE, 0xB1, 0xCD, 0x82, 0xCD, 0x84, 0xCE, 0xB5, 0xCC, 0x93, 0xCD, 0x84, 0xCE, 0xB5, 0xCC, 0x94, 0xCD, 0x84, 0xCE, 0xB7, 0xCC, 0x80, 0xCD, 0x84, 0xCE, 0xB7, 0xCC, 0x81, 0xCD, 0x84, 0xCE, 0xB7, 0xCC, 0x93, 0xCD, 0x84, 0xCE, 0xB7, 0xCC, 0x94, 0xCD, 0x84, 0xCE, 0xB7, 0xCD, 0x82, - // Bytes 4980 - 49bf 0xCD, 0x84, 0xCE, 0xB9, 0xCC, 0x88, 0xCD, 0x84, 0xCE, 0xB9, 0xCC, 0x93, 0xCD, 0x84, 0xCE, 0xB9, + // Bytes 4980 - 49bf 0xCC, 0x94, 0xCD, 0x84, 0xCE, 0xBF, 0xCC, 0x93, 0xCD, 0x84, 0xCE, 0xBF, 0xCC, 0x94, 0xCD, 0x84, 0xCF, 0x85, 0xCC, 0x88, 0xCD, 0x84, 0xCF, 0x85, 0xCC, 0x93, 0xCD, 0x84, 0xCF, 0x85, 0xCC, 0x94, 0xCD, 0x84, 0xCF, 0x89, 0xCC, 0x80, 0xCD, 0x84, 0xCF, 0x89, 0xCC, 0x81, 0xCD, 0x84, 0xCF, 0x89, - // Bytes 49c0 - 49ff 0xCC, 0x93, 0xCD, 0x84, 0xCF, 0x89, 0xCC, 0x94, 0xCD, 0x84, 0xCF, 0x89, 0xCD, 0x82, 0xCD, 0x86, + // Bytes 49c0 - 49ff 0xCE, 0x91, 0xCC, 0x93, 0xCC, 0x80, 0xCE, 0x86, 0xCE, 0x91, 0xCC, 0x93, 0xCC, 0x81, 0xCE, 0x86, 0xCE, 0x91, 0xCC, 0x93, 0xCD, 0x82, 0xCE, 0x86, 0xCE, 0x91, 0xCC, 0x94, 0xCC, 0x80, 0xCE, 0x86, 0xCE, 0x91, 0xCC, 0x94, 0xCC, 0x81, 0xCE, 0x86, 0xCE, 0x91, 0xCC, 0x94, 0xCD, 0x82, 0xCE, 0x86, - // Bytes 4a00 - 4a3f 0xCE, 0x97, 0xCC, 0x93, 0xCC, 0x80, 0xCE, 0x86, 0xCE, 0x97, 0xCC, 0x93, 0xCC, 0x81, 0xCE, 0x86, + // Bytes 4a00 - 4a3f 0xCE, 0x97, 0xCC, 0x93, 0xCD, 0x82, 0xCE, 0x86, 0xCE, 0x97, 0xCC, 0x94, 0xCC, 0x80, 0xCE, 0x86, 0xCE, 0x97, 0xCC, 0x94, 0xCC, 0x81, 0xCE, 0x86, 0xCE, 0x97, 0xCC, 0x94, 0xCD, 0x82, 0xCE, 0x86, 0xCE, 0xA9, 0xCC, 0x93, 0xCC, 0x80, 0xCE, 0x86, 0xCE, 0xA9, 0xCC, 0x93, 0xCC, 0x81, 0xCE, 0x86, - // Bytes 4a40 - 4a7f 0xCE, 0xA9, 0xCC, 0x93, 0xCD, 0x82, 0xCE, 0x86, 0xCE, 0xA9, 0xCC, 0x94, 0xCC, 0x80, 0xCE, 0x86, + // Bytes 4a40 - 4a7f 0xCE, 0xA9, 0xCC, 0x94, 0xCC, 0x81, 0xCE, 0x86, 0xCE, 0xA9, 0xCC, 0x94, 0xCD, 0x82, 0xCE, 0x86, 0xCE, 0xB1, 0xCC, 0x93, 0xCC, 0x80, 0xCE, 0x86, 0xCE, 0xB1, 0xCC, 0x93, 0xCC, 0x81, 0xCE, 0x86, 0xCE, 0xB1, 0xCC, 0x93, 0xCD, 0x82, 0xCE, 0x86, 0xCE, 0xB1, 0xCC, 0x94, 0xCC, 0x80, 0xCE, 0x86, - // Bytes 4a80 - 4abf 0xCE, 0xB1, 0xCC, 0x94, 0xCC, 0x81, 0xCE, 0x86, 0xCE, 0xB1, 0xCC, 0x94, 0xCD, 0x82, 0xCE, 0x86, + // Bytes 4a80 - 4abf 0xCE, 0xB7, 0xCC, 0x93, 0xCC, 0x80, 0xCE, 0x86, 0xCE, 0xB7, 0xCC, 0x93, 0xCC, 0x81, 0xCE, 0x86, 0xCE, 0xB7, 0xCC, 0x93, 0xCD, 0x82, 0xCE, 0x86, 0xCE, 0xB7, 0xCC, 0x94, 0xCC, 0x80, 0xCE, 0x86, 0xCE, 0xB7, 0xCC, 0x94, 0xCC, 0x81, 0xCE, 0x86, 0xCE, 0xB7, 0xCC, 0x94, 0xCD, 0x82, 0xCE, 0x86, - // Bytes 4ac0 - 4aff 0xCF, 0x89, 0xCC, 0x93, 0xCC, 0x80, 0xCE, 0x86, 0xCF, 0x89, 0xCC, 0x93, 0xCC, 0x81, 0xCE, 0x86, + // Bytes 4ac0 - 4aff 0xCF, 0x89, 0xCC, 0x93, 0xCD, 0x82, 0xCE, 0x86, 0xCF, 0x89, 0xCC, 0x94, 0xCC, 0x80, 0xCE, 0x86, 0xCF, 0x89, 0xCC, 0x94, 0xCC, 0x81, 0xCE, 0x86, - 0xCF, 0x89, 0xCC, 0x94, 0xCD, 0x82, 0xCE, 0x42, + 0xCF, 0x89, 0xCC, 0x94, 0xCD, 0x82, 0xCE, 0x86, + 0xE0, 0xB3, 0x86, 0xE0, 0xB3, 0x82, 0x01, 0x86, + 0xE0, 0xB7, 0x99, 0xE0, 0xB7, 0x8F, 0x01, 0x42, 0xCC, 0x80, 0xCD, 0x33, 0x42, 0xCC, 0x81, 0xCD, 0x33, 0x42, 0xCC, 0x93, 0xCD, 0x33, 0x43, 0xE1, // Bytes 4b00 - 4b3f @@ -2945,7 +2945,7 @@ func (t *nfcTrie) lookupStringUnsafe(s string) uint16 { return 0 } -// nfcTrie. Total size: 10798 bytes (10.54 KiB). Checksum: b5981cc85e3bd14. +// nfcTrie. Total size: 10798 bytes (10.54 KiB). Checksum: 721e0f15a4524bda. type nfcTrie struct{} func newNfcTrie(i int) *nfcTrie { @@ -2981,63 +2981,63 @@ var nfcValues = [3072]uint16{ 0x76: 0xa000, 0x77: 0xa000, 0x78: 0xa000, 0x79: 0xa000, 0x7a: 0xa000, // Block 0x2, offset 0x80 // Block 0x3, offset 0xc0 - 0xc0: 0x30b0, 0xc1: 0x30b5, 0xc2: 0x47c9, 0xc3: 0x30ba, 0xc4: 0x47d8, 0xc5: 0x47dd, - 0xc6: 0xa000, 0xc7: 0x47e7, 0xc8: 0x3123, 0xc9: 0x3128, 0xca: 0x47ec, 0xcb: 0x313c, - 0xcc: 0x31af, 0xcd: 0x31b4, 0xce: 0x31b9, 0xcf: 0x4800, 0xd1: 0x3245, - 0xd2: 0x3268, 0xd3: 0x326d, 0xd4: 0x480a, 0xd5: 0x480f, 0xd6: 0x481e, - 0xd8: 0xa000, 0xd9: 0x32f4, 0xda: 0x32f9, 0xdb: 0x32fe, 0xdc: 0x4850, 0xdd: 0x3376, - 0xe0: 0x33bc, 0xe1: 0x33c1, 0xe2: 0x485a, 0xe3: 0x33c6, - 0xe4: 0x4869, 0xe5: 0x486e, 0xe6: 0xa000, 0xe7: 0x4878, 0xe8: 0x342f, 0xe9: 0x3434, - 0xea: 0x487d, 0xeb: 0x3448, 0xec: 0x34c0, 0xed: 0x34c5, 0xee: 0x34ca, 0xef: 0x4891, - 0xf1: 0x3556, 0xf2: 0x3579, 0xf3: 0x357e, 0xf4: 0x489b, 0xf5: 0x48a0, - 0xf6: 0x48af, 0xf8: 0xa000, 0xf9: 0x360a, 0xfa: 0x360f, 0xfb: 0x3614, - 0xfc: 0x48e1, 0xfd: 0x3691, 0xff: 0x36aa, + 0xc0: 0x2ece, 0xc1: 0x2ed3, 0xc2: 0x47b9, 0xc3: 0x2ed8, 0xc4: 0x47c8, 0xc5: 0x47cd, + 0xc6: 0xa000, 0xc7: 0x47d7, 0xc8: 0x2f41, 0xc9: 0x2f46, 0xca: 0x47dc, 0xcb: 0x2f5a, + 0xcc: 0x2fcd, 0xcd: 0x2fd2, 0xce: 0x2fd7, 0xcf: 0x47f0, 0xd1: 0x3063, + 0xd2: 0x3086, 0xd3: 0x308b, 0xd4: 0x47fa, 0xd5: 0x47ff, 0xd6: 0x480e, + 0xd8: 0xa000, 0xd9: 0x3112, 0xda: 0x3117, 0xdb: 0x311c, 0xdc: 0x4840, 0xdd: 0x3194, + 0xe0: 0x31da, 0xe1: 0x31df, 0xe2: 0x484a, 0xe3: 0x31e4, + 0xe4: 0x4859, 0xe5: 0x485e, 0xe6: 0xa000, 0xe7: 0x4868, 0xe8: 0x324d, 0xe9: 0x3252, + 0xea: 0x486d, 0xeb: 0x3266, 0xec: 0x32de, 0xed: 0x32e3, 0xee: 0x32e8, 0xef: 0x4881, + 0xf1: 0x3374, 0xf2: 0x3397, 0xf3: 0x339c, 0xf4: 0x488b, 0xf5: 0x4890, + 0xf6: 0x489f, 0xf8: 0xa000, 0xf9: 0x3428, 0xfa: 0x342d, 0xfb: 0x3432, + 0xfc: 0x48d1, 0xfd: 0x34af, 0xff: 0x34c8, // Block 0x4, offset 0x100 - 0x100: 0x30bf, 0x101: 0x33cb, 0x102: 0x47ce, 0x103: 0x485f, 0x104: 0x30dd, 0x105: 0x33e9, - 0x106: 0x30f1, 0x107: 0x33fd, 0x108: 0x30f6, 0x109: 0x3402, 0x10a: 0x30fb, 0x10b: 0x3407, - 0x10c: 0x3100, 0x10d: 0x340c, 0x10e: 0x310a, 0x10f: 0x3416, - 0x112: 0x47f1, 0x113: 0x4882, 0x114: 0x3132, 0x115: 0x343e, 0x116: 0x3137, 0x117: 0x3443, - 0x118: 0x3155, 0x119: 0x3461, 0x11a: 0x3146, 0x11b: 0x3452, 0x11c: 0x316e, 0x11d: 0x347a, - 0x11e: 0x3178, 0x11f: 0x3484, 0x120: 0x317d, 0x121: 0x3489, 0x122: 0x3187, 0x123: 0x3493, - 0x124: 0x318c, 0x125: 0x3498, 0x128: 0x31be, 0x129: 0x34cf, - 0x12a: 0x31c3, 0x12b: 0x34d4, 0x12c: 0x31c8, 0x12d: 0x34d9, 0x12e: 0x31eb, 0x12f: 0x34f7, - 0x130: 0x31cd, 0x134: 0x31f5, 0x135: 0x3501, - 0x136: 0x3209, 0x137: 0x351a, 0x139: 0x3213, 0x13a: 0x3524, 0x13b: 0x321d, - 0x13c: 0x352e, 0x13d: 0x3218, 0x13e: 0x3529, + 0x100: 0x2edd, 0x101: 0x31e9, 0x102: 0x47be, 0x103: 0x484f, 0x104: 0x2efb, 0x105: 0x3207, + 0x106: 0x2f0f, 0x107: 0x321b, 0x108: 0x2f14, 0x109: 0x3220, 0x10a: 0x2f19, 0x10b: 0x3225, + 0x10c: 0x2f1e, 0x10d: 0x322a, 0x10e: 0x2f28, 0x10f: 0x3234, + 0x112: 0x47e1, 0x113: 0x4872, 0x114: 0x2f50, 0x115: 0x325c, 0x116: 0x2f55, 0x117: 0x3261, + 0x118: 0x2f73, 0x119: 0x327f, 0x11a: 0x2f64, 0x11b: 0x3270, 0x11c: 0x2f8c, 0x11d: 0x3298, + 0x11e: 0x2f96, 0x11f: 0x32a2, 0x120: 0x2f9b, 0x121: 0x32a7, 0x122: 0x2fa5, 0x123: 0x32b1, + 0x124: 0x2faa, 0x125: 0x32b6, 0x128: 0x2fdc, 0x129: 0x32ed, + 0x12a: 0x2fe1, 0x12b: 0x32f2, 0x12c: 0x2fe6, 0x12d: 0x32f7, 0x12e: 0x3009, 0x12f: 0x3315, + 0x130: 0x2feb, 0x134: 0x3013, 0x135: 0x331f, + 0x136: 0x3027, 0x137: 0x3338, 0x139: 0x3031, 0x13a: 0x3342, 0x13b: 0x303b, + 0x13c: 0x334c, 0x13d: 0x3036, 0x13e: 0x3347, // Block 0x5, offset 0x140 - 0x143: 0x3240, 0x144: 0x3551, 0x145: 0x3259, - 0x146: 0x356a, 0x147: 0x324f, 0x148: 0x3560, - 0x14c: 0x4814, 0x14d: 0x48a5, 0x14e: 0x3272, 0x14f: 0x3583, 0x150: 0x327c, 0x151: 0x358d, - 0x154: 0x329a, 0x155: 0x35ab, 0x156: 0x32b3, 0x157: 0x35c4, - 0x158: 0x32a4, 0x159: 0x35b5, 0x15a: 0x4837, 0x15b: 0x48c8, 0x15c: 0x32bd, 0x15d: 0x35ce, - 0x15e: 0x32cc, 0x15f: 0x35dd, 0x160: 0x483c, 0x161: 0x48cd, 0x162: 0x32e5, 0x163: 0x35fb, - 0x164: 0x32d6, 0x165: 0x35ec, 0x168: 0x4846, 0x169: 0x48d7, - 0x16a: 0x484b, 0x16b: 0x48dc, 0x16c: 0x3303, 0x16d: 0x3619, 0x16e: 0x330d, 0x16f: 0x3623, - 0x170: 0x3312, 0x171: 0x3628, 0x172: 0x3330, 0x173: 0x3646, 0x174: 0x3353, 0x175: 0x3669, - 0x176: 0x337b, 0x177: 0x3696, 0x178: 0x338f, 0x179: 0x339e, 0x17a: 0x36be, 0x17b: 0x33a8, - 0x17c: 0x36c8, 0x17d: 0x33ad, 0x17e: 0x36cd, 0x17f: 0xa000, + 0x143: 0x305e, 0x144: 0x336f, 0x145: 0x3077, + 0x146: 0x3388, 0x147: 0x306d, 0x148: 0x337e, + 0x14c: 0x4804, 0x14d: 0x4895, 0x14e: 0x3090, 0x14f: 0x33a1, 0x150: 0x309a, 0x151: 0x33ab, + 0x154: 0x30b8, 0x155: 0x33c9, 0x156: 0x30d1, 0x157: 0x33e2, + 0x158: 0x30c2, 0x159: 0x33d3, 0x15a: 0x4827, 0x15b: 0x48b8, 0x15c: 0x30db, 0x15d: 0x33ec, + 0x15e: 0x30ea, 0x15f: 0x33fb, 0x160: 0x482c, 0x161: 0x48bd, 0x162: 0x3103, 0x163: 0x3419, + 0x164: 0x30f4, 0x165: 0x340a, 0x168: 0x4836, 0x169: 0x48c7, + 0x16a: 0x483b, 0x16b: 0x48cc, 0x16c: 0x3121, 0x16d: 0x3437, 0x16e: 0x312b, 0x16f: 0x3441, + 0x170: 0x3130, 0x171: 0x3446, 0x172: 0x314e, 0x173: 0x3464, 0x174: 0x3171, 0x175: 0x3487, + 0x176: 0x3199, 0x177: 0x34b4, 0x178: 0x31ad, 0x179: 0x31bc, 0x17a: 0x34dc, 0x17b: 0x31c6, + 0x17c: 0x34e6, 0x17d: 0x31cb, 0x17e: 0x34eb, 0x17f: 0xa000, // Block 0x6, offset 0x180 0x184: 0x8100, 0x185: 0x8100, 0x186: 0x8100, - 0x18d: 0x30c9, 0x18e: 0x33d5, 0x18f: 0x31d7, 0x190: 0x34e3, 0x191: 0x3281, - 0x192: 0x3592, 0x193: 0x3317, 0x194: 0x362d, 0x195: 0x3b10, 0x196: 0x3c9f, 0x197: 0x3b09, - 0x198: 0x3c98, 0x199: 0x3b17, 0x19a: 0x3ca6, 0x19b: 0x3b02, 0x19c: 0x3c91, - 0x19e: 0x39f1, 0x19f: 0x3b80, 0x1a0: 0x39ea, 0x1a1: 0x3b79, 0x1a2: 0x36f4, 0x1a3: 0x3706, - 0x1a6: 0x3182, 0x1a7: 0x348e, 0x1a8: 0x31ff, 0x1a9: 0x3510, - 0x1aa: 0x482d, 0x1ab: 0x48be, 0x1ac: 0x3ad1, 0x1ad: 0x3c60, 0x1ae: 0x3718, 0x1af: 0x371e, - 0x1b0: 0x3506, 0x1b4: 0x3169, 0x1b5: 0x3475, - 0x1b8: 0x323b, 0x1b9: 0x354c, 0x1ba: 0x39f8, 0x1bb: 0x3b87, - 0x1bc: 0x36ee, 0x1bd: 0x3700, 0x1be: 0x36fa, 0x1bf: 0x370c, + 0x18d: 0x2ee7, 0x18e: 0x31f3, 0x18f: 0x2ff5, 0x190: 0x3301, 0x191: 0x309f, + 0x192: 0x33b0, 0x193: 0x3135, 0x194: 0x344b, 0x195: 0x392e, 0x196: 0x3abd, 0x197: 0x3927, + 0x198: 0x3ab6, 0x199: 0x3935, 0x19a: 0x3ac4, 0x19b: 0x3920, 0x19c: 0x3aaf, + 0x19e: 0x380f, 0x19f: 0x399e, 0x1a0: 0x3808, 0x1a1: 0x3997, 0x1a2: 0x3512, 0x1a3: 0x3524, + 0x1a6: 0x2fa0, 0x1a7: 0x32ac, 0x1a8: 0x301d, 0x1a9: 0x332e, + 0x1aa: 0x481d, 0x1ab: 0x48ae, 0x1ac: 0x38ef, 0x1ad: 0x3a7e, 0x1ae: 0x3536, 0x1af: 0x353c, + 0x1b0: 0x3324, 0x1b4: 0x2f87, 0x1b5: 0x3293, + 0x1b8: 0x3059, 0x1b9: 0x336a, 0x1ba: 0x3816, 0x1bb: 0x39a5, + 0x1bc: 0x350c, 0x1bd: 0x351e, 0x1be: 0x3518, 0x1bf: 0x352a, // Block 0x7, offset 0x1c0 - 0x1c0: 0x30ce, 0x1c1: 0x33da, 0x1c2: 0x30d3, 0x1c3: 0x33df, 0x1c4: 0x314b, 0x1c5: 0x3457, - 0x1c6: 0x3150, 0x1c7: 0x345c, 0x1c8: 0x31dc, 0x1c9: 0x34e8, 0x1ca: 0x31e1, 0x1cb: 0x34ed, - 0x1cc: 0x3286, 0x1cd: 0x3597, 0x1ce: 0x328b, 0x1cf: 0x359c, 0x1d0: 0x32a9, 0x1d1: 0x35ba, - 0x1d2: 0x32ae, 0x1d3: 0x35bf, 0x1d4: 0x331c, 0x1d5: 0x3632, 0x1d6: 0x3321, 0x1d7: 0x3637, - 0x1d8: 0x32c7, 0x1d9: 0x35d8, 0x1da: 0x32e0, 0x1db: 0x35f6, - 0x1de: 0x319b, 0x1df: 0x34a7, - 0x1e6: 0x47d3, 0x1e7: 0x4864, 0x1e8: 0x47fb, 0x1e9: 0x488c, - 0x1ea: 0x3aa0, 0x1eb: 0x3c2f, 0x1ec: 0x3a7d, 0x1ed: 0x3c0c, 0x1ee: 0x4819, 0x1ef: 0x48aa, - 0x1f0: 0x3a99, 0x1f1: 0x3c28, 0x1f2: 0x3385, 0x1f3: 0x36a0, + 0x1c0: 0x2eec, 0x1c1: 0x31f8, 0x1c2: 0x2ef1, 0x1c3: 0x31fd, 0x1c4: 0x2f69, 0x1c5: 0x3275, + 0x1c6: 0x2f6e, 0x1c7: 0x327a, 0x1c8: 0x2ffa, 0x1c9: 0x3306, 0x1ca: 0x2fff, 0x1cb: 0x330b, + 0x1cc: 0x30a4, 0x1cd: 0x33b5, 0x1ce: 0x30a9, 0x1cf: 0x33ba, 0x1d0: 0x30c7, 0x1d1: 0x33d8, + 0x1d2: 0x30cc, 0x1d3: 0x33dd, 0x1d4: 0x313a, 0x1d5: 0x3450, 0x1d6: 0x313f, 0x1d7: 0x3455, + 0x1d8: 0x30e5, 0x1d9: 0x33f6, 0x1da: 0x30fe, 0x1db: 0x3414, + 0x1de: 0x2fb9, 0x1df: 0x32c5, + 0x1e6: 0x47c3, 0x1e7: 0x4854, 0x1e8: 0x47eb, 0x1e9: 0x487c, + 0x1ea: 0x38be, 0x1eb: 0x3a4d, 0x1ec: 0x389b, 0x1ed: 0x3a2a, 0x1ee: 0x4809, 0x1ef: 0x489a, + 0x1f0: 0x38b7, 0x1f1: 0x3a46, 0x1f2: 0x31a3, 0x1f3: 0x34be, // Block 0x8, offset 0x200 0x200: 0x9933, 0x201: 0x9933, 0x202: 0x9933, 0x203: 0x9933, 0x204: 0x9933, 0x205: 0x8133, 0x206: 0x9933, 0x207: 0x9933, 0x208: 0x9933, 0x209: 0x9933, 0x20a: 0x9933, 0x20b: 0x9933, @@ -3063,39 +3063,39 @@ var nfcValues = [3072]uint16{ 0x27a: 0x8100, 0x27e: 0x0037, // Block 0xa, offset 0x280 - 0x284: 0x8100, 0x285: 0x36e2, - 0x286: 0x372a, 0x287: 0x00ce, 0x288: 0x3748, 0x289: 0x3754, 0x28a: 0x3766, - 0x28c: 0x3784, 0x28e: 0x3796, 0x28f: 0x37b4, 0x290: 0x3f49, 0x291: 0xa000, + 0x284: 0x8100, 0x285: 0x3500, + 0x286: 0x3548, 0x287: 0x00ce, 0x288: 0x3566, 0x289: 0x3572, 0x28a: 0x3584, + 0x28c: 0x35a2, 0x28e: 0x35b4, 0x28f: 0x35d2, 0x290: 0x3d67, 0x291: 0xa000, 0x295: 0xa000, 0x297: 0xa000, 0x299: 0xa000, 0x29f: 0xa000, 0x2a1: 0xa000, 0x2a5: 0xa000, 0x2a9: 0xa000, - 0x2aa: 0x3778, 0x2ab: 0x37a8, 0x2ac: 0x493f, 0x2ad: 0x37d8, 0x2ae: 0x4969, 0x2af: 0x37ea, - 0x2b0: 0x3fb1, 0x2b1: 0xa000, 0x2b5: 0xa000, + 0x2aa: 0x3596, 0x2ab: 0x35c6, 0x2ac: 0x492f, 0x2ad: 0x35f6, 0x2ae: 0x4959, 0x2af: 0x3608, + 0x2b0: 0x3dcf, 0x2b1: 0xa000, 0x2b5: 0xa000, 0x2b7: 0xa000, 0x2b9: 0xa000, 0x2bf: 0xa000, // Block 0xb, offset 0x2c0 - 0x2c0: 0x3862, 0x2c1: 0x386e, 0x2c3: 0x385c, - 0x2c6: 0xa000, 0x2c7: 0x384a, - 0x2cc: 0x389e, 0x2cd: 0x3886, 0x2ce: 0x38b0, 0x2d0: 0xa000, + 0x2c0: 0x3680, 0x2c1: 0x368c, 0x2c3: 0x367a, + 0x2c6: 0xa000, 0x2c7: 0x3668, + 0x2cc: 0x36bc, 0x2cd: 0x36a4, 0x2ce: 0x36ce, 0x2d0: 0xa000, 0x2d3: 0xa000, 0x2d5: 0xa000, 0x2d6: 0xa000, 0x2d7: 0xa000, - 0x2d8: 0xa000, 0x2d9: 0x3892, 0x2da: 0xa000, + 0x2d8: 0xa000, 0x2d9: 0x36b0, 0x2da: 0xa000, 0x2de: 0xa000, 0x2e3: 0xa000, 0x2e7: 0xa000, 0x2eb: 0xa000, 0x2ed: 0xa000, 0x2f0: 0xa000, 0x2f3: 0xa000, 0x2f5: 0xa000, - 0x2f6: 0xa000, 0x2f7: 0xa000, 0x2f8: 0xa000, 0x2f9: 0x3916, 0x2fa: 0xa000, + 0x2f6: 0xa000, 0x2f7: 0xa000, 0x2f8: 0xa000, 0x2f9: 0x3734, 0x2fa: 0xa000, 0x2fe: 0xa000, // Block 0xc, offset 0x300 - 0x301: 0x3874, 0x302: 0x38f8, - 0x310: 0x3850, 0x311: 0x38d4, - 0x312: 0x3856, 0x313: 0x38da, 0x316: 0x3868, 0x317: 0x38ec, - 0x318: 0xa000, 0x319: 0xa000, 0x31a: 0x396a, 0x31b: 0x3970, 0x31c: 0x387a, 0x31d: 0x38fe, - 0x31e: 0x3880, 0x31f: 0x3904, 0x322: 0x388c, 0x323: 0x3910, - 0x324: 0x3898, 0x325: 0x391c, 0x326: 0x38a4, 0x327: 0x3928, 0x328: 0xa000, 0x329: 0xa000, - 0x32a: 0x3976, 0x32b: 0x397c, 0x32c: 0x38ce, 0x32d: 0x3952, 0x32e: 0x38aa, 0x32f: 0x392e, - 0x330: 0x38b6, 0x331: 0x393a, 0x332: 0x38bc, 0x333: 0x3940, 0x334: 0x38c2, 0x335: 0x3946, - 0x338: 0x38c8, 0x339: 0x394c, + 0x301: 0x3692, 0x302: 0x3716, + 0x310: 0x366e, 0x311: 0x36f2, + 0x312: 0x3674, 0x313: 0x36f8, 0x316: 0x3686, 0x317: 0x370a, + 0x318: 0xa000, 0x319: 0xa000, 0x31a: 0x3788, 0x31b: 0x378e, 0x31c: 0x3698, 0x31d: 0x371c, + 0x31e: 0x369e, 0x31f: 0x3722, 0x322: 0x36aa, 0x323: 0x372e, + 0x324: 0x36b6, 0x325: 0x373a, 0x326: 0x36c2, 0x327: 0x3746, 0x328: 0xa000, 0x329: 0xa000, + 0x32a: 0x3794, 0x32b: 0x379a, 0x32c: 0x36ec, 0x32d: 0x3770, 0x32e: 0x36c8, 0x32f: 0x374c, + 0x330: 0x36d4, 0x331: 0x3758, 0x332: 0x36da, 0x333: 0x375e, 0x334: 0x36e0, 0x335: 0x3764, + 0x338: 0x36e6, 0x339: 0x376a, // Block 0xd, offset 0x340 0x351: 0x812e, 0x352: 0x8133, 0x353: 0x8133, 0x354: 0x8133, 0x355: 0x8133, 0x356: 0x812e, 0x357: 0x8133, @@ -3126,12 +3126,12 @@ var nfcValues = [3072]uint16{ 0x3fc: 0x8133, 0x3fd: 0x8133, 0x3fe: 0x8133, 0x3ff: 0x8133, // Block 0x10, offset 0x400 0x405: 0xa000, - 0x406: 0x2e5d, 0x407: 0xa000, 0x408: 0x2e65, 0x409: 0xa000, 0x40a: 0x2e6d, 0x40b: 0xa000, - 0x40c: 0x2e75, 0x40d: 0xa000, 0x40e: 0x2e7d, 0x411: 0xa000, - 0x412: 0x2e85, + 0x406: 0x3ee7, 0x407: 0xa000, 0x408: 0x3eef, 0x409: 0xa000, 0x40a: 0x3ef7, 0x40b: 0xa000, + 0x40c: 0x3eff, 0x40d: 0xa000, 0x40e: 0x3f07, 0x411: 0xa000, + 0x412: 0x3f0f, 0x434: 0x8103, 0x435: 0x9900, - 0x43a: 0xa000, 0x43b: 0x2e8d, - 0x43c: 0xa000, 0x43d: 0x2e95, 0x43e: 0xa000, 0x43f: 0xa000, + 0x43a: 0xa000, 0x43b: 0x3f17, + 0x43c: 0xa000, 0x43d: 0x3f1f, 0x43e: 0xa000, 0x43f: 0xa000, // Block 0x11, offset 0x440 0x440: 0x8133, 0x441: 0x8133, 0x442: 0x812e, 0x443: 0x8133, 0x444: 0x8133, 0x445: 0x8133, 0x446: 0x8133, 0x447: 0x8133, 0x448: 0x8133, 0x449: 0x8133, 0x44a: 0x812e, 0x44b: 0x8133, @@ -3145,149 +3145,149 @@ var nfcValues = [3072]uint16{ 0x476: 0x8134, 0x477: 0x8132, 0x478: 0x8132, 0x479: 0x812e, 0x47a: 0x812d, 0x47b: 0x8133, 0x47c: 0x8135, 0x47d: 0x812e, 0x47e: 0x8133, 0x47f: 0x812e, // Block 0x12, offset 0x480 - 0x480: 0x30d8, 0x481: 0x33e4, 0x482: 0x30e2, 0x483: 0x33ee, 0x484: 0x30e7, 0x485: 0x33f3, - 0x486: 0x30ec, 0x487: 0x33f8, 0x488: 0x3a0d, 0x489: 0x3b9c, 0x48a: 0x3105, 0x48b: 0x3411, - 0x48c: 0x310f, 0x48d: 0x341b, 0x48e: 0x311e, 0x48f: 0x342a, 0x490: 0x3114, 0x491: 0x3420, - 0x492: 0x3119, 0x493: 0x3425, 0x494: 0x3a30, 0x495: 0x3bbf, 0x496: 0x3a37, 0x497: 0x3bc6, - 0x498: 0x315a, 0x499: 0x3466, 0x49a: 0x315f, 0x49b: 0x346b, 0x49c: 0x3a45, 0x49d: 0x3bd4, - 0x49e: 0x3164, 0x49f: 0x3470, 0x4a0: 0x3173, 0x4a1: 0x347f, 0x4a2: 0x3191, 0x4a3: 0x349d, - 0x4a4: 0x31a0, 0x4a5: 0x34ac, 0x4a6: 0x3196, 0x4a7: 0x34a2, 0x4a8: 0x31a5, 0x4a9: 0x34b1, - 0x4aa: 0x31aa, 0x4ab: 0x34b6, 0x4ac: 0x31f0, 0x4ad: 0x34fc, 0x4ae: 0x3a4c, 0x4af: 0x3bdb, - 0x4b0: 0x31fa, 0x4b1: 0x350b, 0x4b2: 0x3204, 0x4b3: 0x3515, 0x4b4: 0x320e, 0x4b5: 0x351f, - 0x4b6: 0x4805, 0x4b7: 0x4896, 0x4b8: 0x3a53, 0x4b9: 0x3be2, 0x4ba: 0x3227, 0x4bb: 0x3538, - 0x4bc: 0x3222, 0x4bd: 0x3533, 0x4be: 0x322c, 0x4bf: 0x353d, + 0x480: 0x2ef6, 0x481: 0x3202, 0x482: 0x2f00, 0x483: 0x320c, 0x484: 0x2f05, 0x485: 0x3211, + 0x486: 0x2f0a, 0x487: 0x3216, 0x488: 0x382b, 0x489: 0x39ba, 0x48a: 0x2f23, 0x48b: 0x322f, + 0x48c: 0x2f2d, 0x48d: 0x3239, 0x48e: 0x2f3c, 0x48f: 0x3248, 0x490: 0x2f32, 0x491: 0x323e, + 0x492: 0x2f37, 0x493: 0x3243, 0x494: 0x384e, 0x495: 0x39dd, 0x496: 0x3855, 0x497: 0x39e4, + 0x498: 0x2f78, 0x499: 0x3284, 0x49a: 0x2f7d, 0x49b: 0x3289, 0x49c: 0x3863, 0x49d: 0x39f2, + 0x49e: 0x2f82, 0x49f: 0x328e, 0x4a0: 0x2f91, 0x4a1: 0x329d, 0x4a2: 0x2faf, 0x4a3: 0x32bb, + 0x4a4: 0x2fbe, 0x4a5: 0x32ca, 0x4a6: 0x2fb4, 0x4a7: 0x32c0, 0x4a8: 0x2fc3, 0x4a9: 0x32cf, + 0x4aa: 0x2fc8, 0x4ab: 0x32d4, 0x4ac: 0x300e, 0x4ad: 0x331a, 0x4ae: 0x386a, 0x4af: 0x39f9, + 0x4b0: 0x3018, 0x4b1: 0x3329, 0x4b2: 0x3022, 0x4b3: 0x3333, 0x4b4: 0x302c, 0x4b5: 0x333d, + 0x4b6: 0x47f5, 0x4b7: 0x4886, 0x4b8: 0x3871, 0x4b9: 0x3a00, 0x4ba: 0x3045, 0x4bb: 0x3356, + 0x4bc: 0x3040, 0x4bd: 0x3351, 0x4be: 0x304a, 0x4bf: 0x335b, // Block 0x13, offset 0x4c0 - 0x4c0: 0x3231, 0x4c1: 0x3542, 0x4c2: 0x3236, 0x4c3: 0x3547, 0x4c4: 0x324a, 0x4c5: 0x355b, - 0x4c6: 0x3254, 0x4c7: 0x3565, 0x4c8: 0x3263, 0x4c9: 0x3574, 0x4ca: 0x325e, 0x4cb: 0x356f, - 0x4cc: 0x3a76, 0x4cd: 0x3c05, 0x4ce: 0x3a84, 0x4cf: 0x3c13, 0x4d0: 0x3a8b, 0x4d1: 0x3c1a, - 0x4d2: 0x3a92, 0x4d3: 0x3c21, 0x4d4: 0x3290, 0x4d5: 0x35a1, 0x4d6: 0x3295, 0x4d7: 0x35a6, - 0x4d8: 0x329f, 0x4d9: 0x35b0, 0x4da: 0x4832, 0x4db: 0x48c3, 0x4dc: 0x3ad8, 0x4dd: 0x3c67, - 0x4de: 0x32b8, 0x4df: 0x35c9, 0x4e0: 0x32c2, 0x4e1: 0x35d3, 0x4e2: 0x4841, 0x4e3: 0x48d2, - 0x4e4: 0x3adf, 0x4e5: 0x3c6e, 0x4e6: 0x3ae6, 0x4e7: 0x3c75, 0x4e8: 0x3aed, 0x4e9: 0x3c7c, - 0x4ea: 0x32d1, 0x4eb: 0x35e2, 0x4ec: 0x32db, 0x4ed: 0x35f1, 0x4ee: 0x32ef, 0x4ef: 0x3605, - 0x4f0: 0x32ea, 0x4f1: 0x3600, 0x4f2: 0x332b, 0x4f3: 0x3641, 0x4f4: 0x333a, 0x4f5: 0x3650, - 0x4f6: 0x3335, 0x4f7: 0x364b, 0x4f8: 0x3af4, 0x4f9: 0x3c83, 0x4fa: 0x3afb, 0x4fb: 0x3c8a, - 0x4fc: 0x333f, 0x4fd: 0x3655, 0x4fe: 0x3344, 0x4ff: 0x365a, + 0x4c0: 0x304f, 0x4c1: 0x3360, 0x4c2: 0x3054, 0x4c3: 0x3365, 0x4c4: 0x3068, 0x4c5: 0x3379, + 0x4c6: 0x3072, 0x4c7: 0x3383, 0x4c8: 0x3081, 0x4c9: 0x3392, 0x4ca: 0x307c, 0x4cb: 0x338d, + 0x4cc: 0x3894, 0x4cd: 0x3a23, 0x4ce: 0x38a2, 0x4cf: 0x3a31, 0x4d0: 0x38a9, 0x4d1: 0x3a38, + 0x4d2: 0x38b0, 0x4d3: 0x3a3f, 0x4d4: 0x30ae, 0x4d5: 0x33bf, 0x4d6: 0x30b3, 0x4d7: 0x33c4, + 0x4d8: 0x30bd, 0x4d9: 0x33ce, 0x4da: 0x4822, 0x4db: 0x48b3, 0x4dc: 0x38f6, 0x4dd: 0x3a85, + 0x4de: 0x30d6, 0x4df: 0x33e7, 0x4e0: 0x30e0, 0x4e1: 0x33f1, 0x4e2: 0x4831, 0x4e3: 0x48c2, + 0x4e4: 0x38fd, 0x4e5: 0x3a8c, 0x4e6: 0x3904, 0x4e7: 0x3a93, 0x4e8: 0x390b, 0x4e9: 0x3a9a, + 0x4ea: 0x30ef, 0x4eb: 0x3400, 0x4ec: 0x30f9, 0x4ed: 0x340f, 0x4ee: 0x310d, 0x4ef: 0x3423, + 0x4f0: 0x3108, 0x4f1: 0x341e, 0x4f2: 0x3149, 0x4f3: 0x345f, 0x4f4: 0x3158, 0x4f5: 0x346e, + 0x4f6: 0x3153, 0x4f7: 0x3469, 0x4f8: 0x3912, 0x4f9: 0x3aa1, 0x4fa: 0x3919, 0x4fb: 0x3aa8, + 0x4fc: 0x315d, 0x4fd: 0x3473, 0x4fe: 0x3162, 0x4ff: 0x3478, // Block 0x14, offset 0x500 - 0x500: 0x3349, 0x501: 0x365f, 0x502: 0x334e, 0x503: 0x3664, 0x504: 0x335d, 0x505: 0x3673, - 0x506: 0x3358, 0x507: 0x366e, 0x508: 0x3362, 0x509: 0x367d, 0x50a: 0x3367, 0x50b: 0x3682, - 0x50c: 0x336c, 0x50d: 0x3687, 0x50e: 0x338a, 0x50f: 0x36a5, 0x510: 0x33a3, 0x511: 0x36c3, - 0x512: 0x33b2, 0x513: 0x36d2, 0x514: 0x33b7, 0x515: 0x36d7, 0x516: 0x34bb, 0x517: 0x35e7, - 0x518: 0x3678, 0x519: 0x36b4, 0x51b: 0x3712, - 0x520: 0x47e2, 0x521: 0x4873, 0x522: 0x30c4, 0x523: 0x33d0, - 0x524: 0x39b9, 0x525: 0x3b48, 0x526: 0x39b2, 0x527: 0x3b41, 0x528: 0x39c7, 0x529: 0x3b56, - 0x52a: 0x39c0, 0x52b: 0x3b4f, 0x52c: 0x39ff, 0x52d: 0x3b8e, 0x52e: 0x39d5, 0x52f: 0x3b64, - 0x530: 0x39ce, 0x531: 0x3b5d, 0x532: 0x39e3, 0x533: 0x3b72, 0x534: 0x39dc, 0x535: 0x3b6b, - 0x536: 0x3a06, 0x537: 0x3b95, 0x538: 0x47f6, 0x539: 0x4887, 0x53a: 0x3141, 0x53b: 0x344d, - 0x53c: 0x312d, 0x53d: 0x3439, 0x53e: 0x3a1b, 0x53f: 0x3baa, + 0x500: 0x3167, 0x501: 0x347d, 0x502: 0x316c, 0x503: 0x3482, 0x504: 0x317b, 0x505: 0x3491, + 0x506: 0x3176, 0x507: 0x348c, 0x508: 0x3180, 0x509: 0x349b, 0x50a: 0x3185, 0x50b: 0x34a0, + 0x50c: 0x318a, 0x50d: 0x34a5, 0x50e: 0x31a8, 0x50f: 0x34c3, 0x510: 0x31c1, 0x511: 0x34e1, + 0x512: 0x31d0, 0x513: 0x34f0, 0x514: 0x31d5, 0x515: 0x34f5, 0x516: 0x32d9, 0x517: 0x3405, + 0x518: 0x3496, 0x519: 0x34d2, 0x51b: 0x3530, + 0x520: 0x47d2, 0x521: 0x4863, 0x522: 0x2ee2, 0x523: 0x31ee, + 0x524: 0x37d7, 0x525: 0x3966, 0x526: 0x37d0, 0x527: 0x395f, 0x528: 0x37e5, 0x529: 0x3974, + 0x52a: 0x37de, 0x52b: 0x396d, 0x52c: 0x381d, 0x52d: 0x39ac, 0x52e: 0x37f3, 0x52f: 0x3982, + 0x530: 0x37ec, 0x531: 0x397b, 0x532: 0x3801, 0x533: 0x3990, 0x534: 0x37fa, 0x535: 0x3989, + 0x536: 0x3824, 0x537: 0x39b3, 0x538: 0x47e6, 0x539: 0x4877, 0x53a: 0x2f5f, 0x53b: 0x326b, + 0x53c: 0x2f4b, 0x53d: 0x3257, 0x53e: 0x3839, 0x53f: 0x39c8, // Block 0x15, offset 0x540 - 0x540: 0x3a14, 0x541: 0x3ba3, 0x542: 0x3a29, 0x543: 0x3bb8, 0x544: 0x3a22, 0x545: 0x3bb1, - 0x546: 0x3a3e, 0x547: 0x3bcd, 0x548: 0x31d2, 0x549: 0x34de, 0x54a: 0x31e6, 0x54b: 0x34f2, - 0x54c: 0x4828, 0x54d: 0x48b9, 0x54e: 0x3277, 0x54f: 0x3588, 0x550: 0x3a61, 0x551: 0x3bf0, - 0x552: 0x3a5a, 0x553: 0x3be9, 0x554: 0x3a6f, 0x555: 0x3bfe, 0x556: 0x3a68, 0x557: 0x3bf7, - 0x558: 0x3aca, 0x559: 0x3c59, 0x55a: 0x3aae, 0x55b: 0x3c3d, 0x55c: 0x3aa7, 0x55d: 0x3c36, - 0x55e: 0x3abc, 0x55f: 0x3c4b, 0x560: 0x3ab5, 0x561: 0x3c44, 0x562: 0x3ac3, 0x563: 0x3c52, - 0x564: 0x3326, 0x565: 0x363c, 0x566: 0x3308, 0x567: 0x361e, 0x568: 0x3b25, 0x569: 0x3cb4, - 0x56a: 0x3b1e, 0x56b: 0x3cad, 0x56c: 0x3b33, 0x56d: 0x3cc2, 0x56e: 0x3b2c, 0x56f: 0x3cbb, - 0x570: 0x3b3a, 0x571: 0x3cc9, 0x572: 0x3371, 0x573: 0x368c, 0x574: 0x3399, 0x575: 0x36b9, - 0x576: 0x3394, 0x577: 0x36af, 0x578: 0x3380, 0x579: 0x369b, + 0x540: 0x3832, 0x541: 0x39c1, 0x542: 0x3847, 0x543: 0x39d6, 0x544: 0x3840, 0x545: 0x39cf, + 0x546: 0x385c, 0x547: 0x39eb, 0x548: 0x2ff0, 0x549: 0x32fc, 0x54a: 0x3004, 0x54b: 0x3310, + 0x54c: 0x4818, 0x54d: 0x48a9, 0x54e: 0x3095, 0x54f: 0x33a6, 0x550: 0x387f, 0x551: 0x3a0e, + 0x552: 0x3878, 0x553: 0x3a07, 0x554: 0x388d, 0x555: 0x3a1c, 0x556: 0x3886, 0x557: 0x3a15, + 0x558: 0x38e8, 0x559: 0x3a77, 0x55a: 0x38cc, 0x55b: 0x3a5b, 0x55c: 0x38c5, 0x55d: 0x3a54, + 0x55e: 0x38da, 0x55f: 0x3a69, 0x560: 0x38d3, 0x561: 0x3a62, 0x562: 0x38e1, 0x563: 0x3a70, + 0x564: 0x3144, 0x565: 0x345a, 0x566: 0x3126, 0x567: 0x343c, 0x568: 0x3943, 0x569: 0x3ad2, + 0x56a: 0x393c, 0x56b: 0x3acb, 0x56c: 0x3951, 0x56d: 0x3ae0, 0x56e: 0x394a, 0x56f: 0x3ad9, + 0x570: 0x3958, 0x571: 0x3ae7, 0x572: 0x318f, 0x573: 0x34aa, 0x574: 0x31b7, 0x575: 0x34d7, + 0x576: 0x31b2, 0x577: 0x34cd, 0x578: 0x319e, 0x579: 0x34b9, // Block 0x16, offset 0x580 - 0x580: 0x4945, 0x581: 0x494b, 0x582: 0x4a5f, 0x583: 0x4a77, 0x584: 0x4a67, 0x585: 0x4a7f, - 0x586: 0x4a6f, 0x587: 0x4a87, 0x588: 0x48eb, 0x589: 0x48f1, 0x58a: 0x49cf, 0x58b: 0x49e7, - 0x58c: 0x49d7, 0x58d: 0x49ef, 0x58e: 0x49df, 0x58f: 0x49f7, 0x590: 0x4957, 0x591: 0x495d, - 0x592: 0x3ef9, 0x593: 0x3f09, 0x594: 0x3f01, 0x595: 0x3f11, - 0x598: 0x48f7, 0x599: 0x48fd, 0x59a: 0x3e29, 0x59b: 0x3e39, 0x59c: 0x3e31, 0x59d: 0x3e41, - 0x5a0: 0x496f, 0x5a1: 0x4975, 0x5a2: 0x4a8f, 0x5a3: 0x4aa7, - 0x5a4: 0x4a97, 0x5a5: 0x4aaf, 0x5a6: 0x4a9f, 0x5a7: 0x4ab7, 0x5a8: 0x4903, 0x5a9: 0x4909, - 0x5aa: 0x49ff, 0x5ab: 0x4a17, 0x5ac: 0x4a07, 0x5ad: 0x4a1f, 0x5ae: 0x4a0f, 0x5af: 0x4a27, - 0x5b0: 0x4987, 0x5b1: 0x498d, 0x5b2: 0x3f59, 0x5b3: 0x3f71, 0x5b4: 0x3f61, 0x5b5: 0x3f79, - 0x5b6: 0x3f69, 0x5b7: 0x3f81, 0x5b8: 0x490f, 0x5b9: 0x4915, 0x5ba: 0x3e59, 0x5bb: 0x3e71, - 0x5bc: 0x3e61, 0x5bd: 0x3e79, 0x5be: 0x3e69, 0x5bf: 0x3e81, + 0x580: 0x4935, 0x581: 0x493b, 0x582: 0x4a4f, 0x583: 0x4a67, 0x584: 0x4a57, 0x585: 0x4a6f, + 0x586: 0x4a5f, 0x587: 0x4a77, 0x588: 0x48db, 0x589: 0x48e1, 0x58a: 0x49bf, 0x58b: 0x49d7, + 0x58c: 0x49c7, 0x58d: 0x49df, 0x58e: 0x49cf, 0x58f: 0x49e7, 0x590: 0x4947, 0x591: 0x494d, + 0x592: 0x3d17, 0x593: 0x3d27, 0x594: 0x3d1f, 0x595: 0x3d2f, + 0x598: 0x48e7, 0x599: 0x48ed, 0x59a: 0x3c47, 0x59b: 0x3c57, 0x59c: 0x3c4f, 0x59d: 0x3c5f, + 0x5a0: 0x495f, 0x5a1: 0x4965, 0x5a2: 0x4a7f, 0x5a3: 0x4a97, + 0x5a4: 0x4a87, 0x5a5: 0x4a9f, 0x5a6: 0x4a8f, 0x5a7: 0x4aa7, 0x5a8: 0x48f3, 0x5a9: 0x48f9, + 0x5aa: 0x49ef, 0x5ab: 0x4a07, 0x5ac: 0x49f7, 0x5ad: 0x4a0f, 0x5ae: 0x49ff, 0x5af: 0x4a17, + 0x5b0: 0x4977, 0x5b1: 0x497d, 0x5b2: 0x3d77, 0x5b3: 0x3d8f, 0x5b4: 0x3d7f, 0x5b5: 0x3d97, + 0x5b6: 0x3d87, 0x5b7: 0x3d9f, 0x5b8: 0x48ff, 0x5b9: 0x4905, 0x5ba: 0x3c77, 0x5bb: 0x3c8f, + 0x5bc: 0x3c7f, 0x5bd: 0x3c97, 0x5be: 0x3c87, 0x5bf: 0x3c9f, // Block 0x17, offset 0x5c0 - 0x5c0: 0x4993, 0x5c1: 0x4999, 0x5c2: 0x3f89, 0x5c3: 0x3f99, 0x5c4: 0x3f91, 0x5c5: 0x3fa1, - 0x5c8: 0x491b, 0x5c9: 0x4921, 0x5ca: 0x3e89, 0x5cb: 0x3e99, - 0x5cc: 0x3e91, 0x5cd: 0x3ea1, 0x5d0: 0x49a5, 0x5d1: 0x49ab, - 0x5d2: 0x3fc1, 0x5d3: 0x3fd9, 0x5d4: 0x3fc9, 0x5d5: 0x3fe1, 0x5d6: 0x3fd1, 0x5d7: 0x3fe9, - 0x5d9: 0x4927, 0x5db: 0x3ea9, 0x5dd: 0x3eb1, - 0x5df: 0x3eb9, 0x5e0: 0x49bd, 0x5e1: 0x49c3, 0x5e2: 0x4abf, 0x5e3: 0x4ad7, - 0x5e4: 0x4ac7, 0x5e5: 0x4adf, 0x5e6: 0x4acf, 0x5e7: 0x4ae7, 0x5e8: 0x492d, 0x5e9: 0x4933, - 0x5ea: 0x4a2f, 0x5eb: 0x4a47, 0x5ec: 0x4a37, 0x5ed: 0x4a4f, 0x5ee: 0x4a3f, 0x5ef: 0x4a57, - 0x5f0: 0x4939, 0x5f1: 0x445f, 0x5f2: 0x37d2, 0x5f3: 0x4465, 0x5f4: 0x4963, 0x5f5: 0x446b, - 0x5f6: 0x37e4, 0x5f7: 0x4471, 0x5f8: 0x3802, 0x5f9: 0x4477, 0x5fa: 0x381a, 0x5fb: 0x447d, - 0x5fc: 0x49b1, 0x5fd: 0x4483, + 0x5c0: 0x4983, 0x5c1: 0x4989, 0x5c2: 0x3da7, 0x5c3: 0x3db7, 0x5c4: 0x3daf, 0x5c5: 0x3dbf, + 0x5c8: 0x490b, 0x5c9: 0x4911, 0x5ca: 0x3ca7, 0x5cb: 0x3cb7, + 0x5cc: 0x3caf, 0x5cd: 0x3cbf, 0x5d0: 0x4995, 0x5d1: 0x499b, + 0x5d2: 0x3ddf, 0x5d3: 0x3df7, 0x5d4: 0x3de7, 0x5d5: 0x3dff, 0x5d6: 0x3def, 0x5d7: 0x3e07, + 0x5d9: 0x4917, 0x5db: 0x3cc7, 0x5dd: 0x3ccf, + 0x5df: 0x3cd7, 0x5e0: 0x49ad, 0x5e1: 0x49b3, 0x5e2: 0x4aaf, 0x5e3: 0x4ac7, + 0x5e4: 0x4ab7, 0x5e5: 0x4acf, 0x5e6: 0x4abf, 0x5e7: 0x4ad7, 0x5e8: 0x491d, 0x5e9: 0x4923, + 0x5ea: 0x4a1f, 0x5eb: 0x4a37, 0x5ec: 0x4a27, 0x5ed: 0x4a3f, 0x5ee: 0x4a2f, 0x5ef: 0x4a47, + 0x5f0: 0x4929, 0x5f1: 0x43d7, 0x5f2: 0x35f0, 0x5f3: 0x43dd, 0x5f4: 0x4953, 0x5f5: 0x43e3, + 0x5f6: 0x3602, 0x5f7: 0x43e9, 0x5f8: 0x3620, 0x5f9: 0x43ef, 0x5fa: 0x3638, 0x5fb: 0x43f5, + 0x5fc: 0x49a1, 0x5fd: 0x43fb, // Block 0x18, offset 0x600 - 0x600: 0x3ee1, 0x601: 0x3ee9, 0x602: 0x42c5, 0x603: 0x42e3, 0x604: 0x42cf, 0x605: 0x42ed, - 0x606: 0x42d9, 0x607: 0x42f7, 0x608: 0x3e19, 0x609: 0x3e21, 0x60a: 0x4211, 0x60b: 0x422f, - 0x60c: 0x421b, 0x60d: 0x4239, 0x60e: 0x4225, 0x60f: 0x4243, 0x610: 0x3f29, 0x611: 0x3f31, - 0x612: 0x4301, 0x613: 0x431f, 0x614: 0x430b, 0x615: 0x4329, 0x616: 0x4315, 0x617: 0x4333, - 0x618: 0x3e49, 0x619: 0x3e51, 0x61a: 0x424d, 0x61b: 0x426b, 0x61c: 0x4257, 0x61d: 0x4275, - 0x61e: 0x4261, 0x61f: 0x427f, 0x620: 0x4001, 0x621: 0x4009, 0x622: 0x433d, 0x623: 0x435b, - 0x624: 0x4347, 0x625: 0x4365, 0x626: 0x4351, 0x627: 0x436f, 0x628: 0x3ec1, 0x629: 0x3ec9, - 0x62a: 0x4289, 0x62b: 0x42a7, 0x62c: 0x4293, 0x62d: 0x42b1, 0x62e: 0x429d, 0x62f: 0x42bb, - 0x630: 0x37c6, 0x631: 0x37c0, 0x632: 0x3ed1, 0x633: 0x37cc, 0x634: 0x3ed9, - 0x636: 0x4951, 0x637: 0x3ef1, 0x638: 0x3736, 0x639: 0x3730, 0x63a: 0x3724, 0x63b: 0x442f, - 0x63c: 0x373c, 0x63d: 0x8100, 0x63e: 0x0257, 0x63f: 0xa100, + 0x600: 0x3cff, 0x601: 0x3d07, 0x602: 0x41c3, 0x603: 0x41e1, 0x604: 0x41cd, 0x605: 0x41eb, + 0x606: 0x41d7, 0x607: 0x41f5, 0x608: 0x3c37, 0x609: 0x3c3f, 0x60a: 0x410f, 0x60b: 0x412d, + 0x60c: 0x4119, 0x60d: 0x4137, 0x60e: 0x4123, 0x60f: 0x4141, 0x610: 0x3d47, 0x611: 0x3d4f, + 0x612: 0x41ff, 0x613: 0x421d, 0x614: 0x4209, 0x615: 0x4227, 0x616: 0x4213, 0x617: 0x4231, + 0x618: 0x3c67, 0x619: 0x3c6f, 0x61a: 0x414b, 0x61b: 0x4169, 0x61c: 0x4155, 0x61d: 0x4173, + 0x61e: 0x415f, 0x61f: 0x417d, 0x620: 0x3e1f, 0x621: 0x3e27, 0x622: 0x423b, 0x623: 0x4259, + 0x624: 0x4245, 0x625: 0x4263, 0x626: 0x424f, 0x627: 0x426d, 0x628: 0x3cdf, 0x629: 0x3ce7, + 0x62a: 0x4187, 0x62b: 0x41a5, 0x62c: 0x4191, 0x62d: 0x41af, 0x62e: 0x419b, 0x62f: 0x41b9, + 0x630: 0x35e4, 0x631: 0x35de, 0x632: 0x3cef, 0x633: 0x35ea, 0x634: 0x3cf7, + 0x636: 0x4941, 0x637: 0x3d0f, 0x638: 0x3554, 0x639: 0x354e, 0x63a: 0x3542, 0x63b: 0x43a7, + 0x63c: 0x355a, 0x63d: 0x8100, 0x63e: 0x0257, 0x63f: 0xa100, // Block 0x19, offset 0x640 - 0x640: 0x8100, 0x641: 0x36e8, 0x642: 0x3f19, 0x643: 0x37de, 0x644: 0x3f21, - 0x646: 0x497b, 0x647: 0x3f39, 0x648: 0x3742, 0x649: 0x4435, 0x64a: 0x374e, 0x64b: 0x443b, - 0x64c: 0x375a, 0x64d: 0x3cd0, 0x64e: 0x3cd7, 0x64f: 0x3cde, 0x650: 0x37f6, 0x651: 0x37f0, - 0x652: 0x3f41, 0x653: 0x4625, 0x656: 0x37fc, 0x657: 0x3f51, - 0x658: 0x3772, 0x659: 0x376c, 0x65a: 0x3760, 0x65b: 0x4441, 0x65d: 0x3ce5, - 0x65e: 0x3cec, 0x65f: 0x3cf3, 0x660: 0x382c, 0x661: 0x3826, 0x662: 0x3fa9, 0x663: 0x462d, - 0x664: 0x380e, 0x665: 0x3814, 0x666: 0x3832, 0x667: 0x3fb9, 0x668: 0x37a2, 0x669: 0x379c, - 0x66a: 0x3790, 0x66b: 0x444d, 0x66c: 0x378a, 0x66d: 0x36dc, 0x66e: 0x4429, 0x66f: 0x0081, - 0x672: 0x3ff1, 0x673: 0x3838, 0x674: 0x3ff9, - 0x676: 0x49c9, 0x677: 0x4011, 0x678: 0x377e, 0x679: 0x4447, 0x67a: 0x37ae, 0x67b: 0x4459, - 0x67c: 0x37ba, 0x67d: 0x4397, 0x67e: 0xa100, + 0x640: 0x8100, 0x641: 0x3506, 0x642: 0x3d37, 0x643: 0x35fc, 0x644: 0x3d3f, + 0x646: 0x496b, 0x647: 0x3d57, 0x648: 0x3560, 0x649: 0x43ad, 0x64a: 0x356c, 0x64b: 0x43b3, + 0x64c: 0x3578, 0x64d: 0x3aee, 0x64e: 0x3af5, 0x64f: 0x3afc, 0x650: 0x3614, 0x651: 0x360e, + 0x652: 0x3d5f, 0x653: 0x459d, 0x656: 0x361a, 0x657: 0x3d6f, + 0x658: 0x3590, 0x659: 0x358a, 0x65a: 0x357e, 0x65b: 0x43b9, 0x65d: 0x3b03, + 0x65e: 0x3b0a, 0x65f: 0x3b11, 0x660: 0x364a, 0x661: 0x3644, 0x662: 0x3dc7, 0x663: 0x45a5, + 0x664: 0x362c, 0x665: 0x3632, 0x666: 0x3650, 0x667: 0x3dd7, 0x668: 0x35c0, 0x669: 0x35ba, + 0x66a: 0x35ae, 0x66b: 0x43c5, 0x66c: 0x35a8, 0x66d: 0x34fa, 0x66e: 0x43a1, 0x66f: 0x0081, + 0x672: 0x3e0f, 0x673: 0x3656, 0x674: 0x3e17, + 0x676: 0x49b9, 0x677: 0x3e2f, 0x678: 0x359c, 0x679: 0x43bf, 0x67a: 0x35cc, 0x67b: 0x43d1, + 0x67c: 0x35d8, 0x67d: 0x430f, 0x67e: 0xa100, // Block 0x1a, offset 0x680 - 0x681: 0x3d47, 0x683: 0xa000, 0x684: 0x3d4e, 0x685: 0xa000, - 0x687: 0x3d55, 0x688: 0xa000, 0x689: 0x3d5c, + 0x681: 0x3b65, 0x683: 0xa000, 0x684: 0x3b6c, 0x685: 0xa000, + 0x687: 0x3b73, 0x688: 0xa000, 0x689: 0x3b7a, 0x68d: 0xa000, - 0x6a0: 0x30a6, 0x6a1: 0xa000, 0x6a2: 0x3d6a, + 0x6a0: 0x2ec4, 0x6a1: 0xa000, 0x6a2: 0x3b88, 0x6a4: 0xa000, 0x6a5: 0xa000, - 0x6ad: 0x3d63, 0x6ae: 0x30a1, 0x6af: 0x30ab, - 0x6b0: 0x3d71, 0x6b1: 0x3d78, 0x6b2: 0xa000, 0x6b3: 0xa000, 0x6b4: 0x3d7f, 0x6b5: 0x3d86, - 0x6b6: 0xa000, 0x6b7: 0xa000, 0x6b8: 0x3d8d, 0x6b9: 0x3d94, 0x6ba: 0xa000, 0x6bb: 0xa000, + 0x6ad: 0x3b81, 0x6ae: 0x2ebf, 0x6af: 0x2ec9, + 0x6b0: 0x3b8f, 0x6b1: 0x3b96, 0x6b2: 0xa000, 0x6b3: 0xa000, 0x6b4: 0x3b9d, 0x6b5: 0x3ba4, + 0x6b6: 0xa000, 0x6b7: 0xa000, 0x6b8: 0x3bab, 0x6b9: 0x3bb2, 0x6ba: 0xa000, 0x6bb: 0xa000, 0x6bc: 0xa000, 0x6bd: 0xa000, // Block 0x1b, offset 0x6c0 - 0x6c0: 0x3d9b, 0x6c1: 0x3da2, 0x6c2: 0xa000, 0x6c3: 0xa000, 0x6c4: 0x3db7, 0x6c5: 0x3dbe, - 0x6c6: 0xa000, 0x6c7: 0xa000, 0x6c8: 0x3dc5, 0x6c9: 0x3dcc, + 0x6c0: 0x3bb9, 0x6c1: 0x3bc0, 0x6c2: 0xa000, 0x6c3: 0xa000, 0x6c4: 0x3bd5, 0x6c5: 0x3bdc, + 0x6c6: 0xa000, 0x6c7: 0xa000, 0x6c8: 0x3be3, 0x6c9: 0x3bea, 0x6d1: 0xa000, 0x6d2: 0xa000, 0x6e2: 0xa000, 0x6e8: 0xa000, 0x6e9: 0xa000, - 0x6eb: 0xa000, 0x6ec: 0x3de1, 0x6ed: 0x3de8, 0x6ee: 0x3def, 0x6ef: 0x3df6, + 0x6eb: 0xa000, 0x6ec: 0x3bff, 0x6ed: 0x3c06, 0x6ee: 0x3c0d, 0x6ef: 0x3c14, 0x6f2: 0xa000, 0x6f3: 0xa000, 0x6f4: 0xa000, 0x6f5: 0xa000, // Block 0x1c, offset 0x700 0x706: 0xa000, 0x70b: 0xa000, - 0x70c: 0x4049, 0x70d: 0xa000, 0x70e: 0x4051, 0x70f: 0xa000, 0x710: 0x4059, 0x711: 0xa000, - 0x712: 0x4061, 0x713: 0xa000, 0x714: 0x4069, 0x715: 0xa000, 0x716: 0x4071, 0x717: 0xa000, - 0x718: 0x4079, 0x719: 0xa000, 0x71a: 0x4081, 0x71b: 0xa000, 0x71c: 0x4089, 0x71d: 0xa000, - 0x71e: 0x4091, 0x71f: 0xa000, 0x720: 0x4099, 0x721: 0xa000, 0x722: 0x40a1, - 0x724: 0xa000, 0x725: 0x40a9, 0x726: 0xa000, 0x727: 0x40b1, 0x728: 0xa000, 0x729: 0x40b9, + 0x70c: 0x3f47, 0x70d: 0xa000, 0x70e: 0x3f4f, 0x70f: 0xa000, 0x710: 0x3f57, 0x711: 0xa000, + 0x712: 0x3f5f, 0x713: 0xa000, 0x714: 0x3f67, 0x715: 0xa000, 0x716: 0x3f6f, 0x717: 0xa000, + 0x718: 0x3f77, 0x719: 0xa000, 0x71a: 0x3f7f, 0x71b: 0xa000, 0x71c: 0x3f87, 0x71d: 0xa000, + 0x71e: 0x3f8f, 0x71f: 0xa000, 0x720: 0x3f97, 0x721: 0xa000, 0x722: 0x3f9f, + 0x724: 0xa000, 0x725: 0x3fa7, 0x726: 0xa000, 0x727: 0x3faf, 0x728: 0xa000, 0x729: 0x3fb7, 0x72f: 0xa000, - 0x730: 0x40c1, 0x731: 0x40c9, 0x732: 0xa000, 0x733: 0x40d1, 0x734: 0x40d9, 0x735: 0xa000, - 0x736: 0x40e1, 0x737: 0x40e9, 0x738: 0xa000, 0x739: 0x40f1, 0x73a: 0x40f9, 0x73b: 0xa000, - 0x73c: 0x4101, 0x73d: 0x4109, + 0x730: 0x3fbf, 0x731: 0x3fc7, 0x732: 0xa000, 0x733: 0x3fcf, 0x734: 0x3fd7, 0x735: 0xa000, + 0x736: 0x3fdf, 0x737: 0x3fe7, 0x738: 0xa000, 0x739: 0x3fef, 0x73a: 0x3ff7, 0x73b: 0xa000, + 0x73c: 0x3fff, 0x73d: 0x4007, // Block 0x1d, offset 0x740 - 0x754: 0x4041, + 0x754: 0x3f3f, 0x759: 0x9904, 0x75a: 0x9904, 0x75b: 0x8100, 0x75c: 0x8100, 0x75d: 0xa000, - 0x75e: 0x4111, + 0x75e: 0x400f, 0x766: 0xa000, - 0x76b: 0xa000, 0x76c: 0x4121, 0x76d: 0xa000, 0x76e: 0x4129, 0x76f: 0xa000, - 0x770: 0x4131, 0x771: 0xa000, 0x772: 0x4139, 0x773: 0xa000, 0x774: 0x4141, 0x775: 0xa000, - 0x776: 0x4149, 0x777: 0xa000, 0x778: 0x4151, 0x779: 0xa000, 0x77a: 0x4159, 0x77b: 0xa000, - 0x77c: 0x4161, 0x77d: 0xa000, 0x77e: 0x4169, 0x77f: 0xa000, + 0x76b: 0xa000, 0x76c: 0x401f, 0x76d: 0xa000, 0x76e: 0x4027, 0x76f: 0xa000, + 0x770: 0x402f, 0x771: 0xa000, 0x772: 0x4037, 0x773: 0xa000, 0x774: 0x403f, 0x775: 0xa000, + 0x776: 0x4047, 0x777: 0xa000, 0x778: 0x404f, 0x779: 0xa000, 0x77a: 0x4057, 0x77b: 0xa000, + 0x77c: 0x405f, 0x77d: 0xa000, 0x77e: 0x4067, 0x77f: 0xa000, // Block 0x1e, offset 0x780 - 0x780: 0x4171, 0x781: 0xa000, 0x782: 0x4179, 0x784: 0xa000, 0x785: 0x4181, - 0x786: 0xa000, 0x787: 0x4189, 0x788: 0xa000, 0x789: 0x4191, - 0x78f: 0xa000, 0x790: 0x4199, 0x791: 0x41a1, - 0x792: 0xa000, 0x793: 0x41a9, 0x794: 0x41b1, 0x795: 0xa000, 0x796: 0x41b9, 0x797: 0x41c1, - 0x798: 0xa000, 0x799: 0x41c9, 0x79a: 0x41d1, 0x79b: 0xa000, 0x79c: 0x41d9, 0x79d: 0x41e1, + 0x780: 0x406f, 0x781: 0xa000, 0x782: 0x4077, 0x784: 0xa000, 0x785: 0x407f, + 0x786: 0xa000, 0x787: 0x4087, 0x788: 0xa000, 0x789: 0x408f, + 0x78f: 0xa000, 0x790: 0x4097, 0x791: 0x409f, + 0x792: 0xa000, 0x793: 0x40a7, 0x794: 0x40af, 0x795: 0xa000, 0x796: 0x40b7, 0x797: 0x40bf, + 0x798: 0xa000, 0x799: 0x40c7, 0x79a: 0x40cf, 0x79b: 0xa000, 0x79c: 0x40d7, 0x79d: 0x40df, 0x7af: 0xa000, - 0x7b0: 0xa000, 0x7b1: 0xa000, 0x7b2: 0xa000, 0x7b4: 0x4119, - 0x7b7: 0x41e9, 0x7b8: 0x41f1, 0x7b9: 0x41f9, 0x7ba: 0x4201, - 0x7bd: 0xa000, 0x7be: 0x4209, + 0x7b0: 0xa000, 0x7b1: 0xa000, 0x7b2: 0xa000, 0x7b4: 0x4017, + 0x7b7: 0x40e7, 0x7b8: 0x40ef, 0x7b9: 0x40f7, 0x7ba: 0x40ff, + 0x7bd: 0xa000, 0x7be: 0x4107, // Block 0x1f, offset 0x7c0 0x7c0: 0x1472, 0x7c1: 0x0df6, 0x7c2: 0x14ce, 0x7c3: 0x149a, 0x7c4: 0x0f52, 0x7c5: 0x07e6, 0x7c6: 0x09da, 0x7c7: 0x1726, 0x7c8: 0x1726, 0x7c9: 0x0b06, 0x7ca: 0x155a, 0x7cb: 0x0a3e, @@ -3603,8 +3603,8 @@ var nfcSparseValues = [730]valueRange{ {value: 0x8100, lo: 0xb8, hi: 0xb8}, // Block 0x1, offset 0x5 {value: 0x0091, lo: 0x03}, - {value: 0x4823, lo: 0xa0, hi: 0xa1}, - {value: 0x4855, lo: 0xaf, hi: 0xb0}, + {value: 0x4813, lo: 0xa0, hi: 0xa1}, + {value: 0x4845, lo: 0xaf, hi: 0xb0}, {value: 0xa000, lo: 0xb7, hi: 0xb7}, // Block 0x2, offset 0x9 {value: 0x0000, lo: 0x01}, @@ -3617,30 +3617,30 @@ var nfcSparseValues = [730]valueRange{ {value: 0xa000, lo: 0x81, hi: 0x81}, {value: 0xa000, lo: 0x85, hi: 0x85}, {value: 0xa000, lo: 0x89, hi: 0x89}, - {value: 0x4981, lo: 0x8a, hi: 0x8a}, - {value: 0x499f, lo: 0x8b, hi: 0x8b}, - {value: 0x3808, lo: 0x8c, hi: 0x8c}, - {value: 0x3820, lo: 0x8d, hi: 0x8d}, - {value: 0x49b7, lo: 0x8e, hi: 0x8e}, + {value: 0x4971, lo: 0x8a, hi: 0x8a}, + {value: 0x498f, lo: 0x8b, hi: 0x8b}, + {value: 0x3626, lo: 0x8c, hi: 0x8c}, + {value: 0x363e, lo: 0x8d, hi: 0x8d}, + {value: 0x49a7, lo: 0x8e, hi: 0x8e}, {value: 0xa000, lo: 0x92, hi: 0x92}, - {value: 0x383e, lo: 0x93, hi: 0x94}, + {value: 0x365c, lo: 0x93, hi: 0x94}, // Block 0x5, offset 0x18 {value: 0x0000, lo: 0x0f}, {value: 0xa000, lo: 0x83, hi: 0x83}, {value: 0xa000, lo: 0x87, hi: 0x87}, {value: 0xa000, lo: 0x8b, hi: 0x8b}, {value: 0xa000, lo: 0x8d, hi: 0x8d}, - {value: 0x38e6, lo: 0x90, hi: 0x90}, - {value: 0x38f2, lo: 0x91, hi: 0x91}, - {value: 0x38e0, lo: 0x93, hi: 0x93}, + {value: 0x3704, lo: 0x90, hi: 0x90}, + {value: 0x3710, lo: 0x91, hi: 0x91}, + {value: 0x36fe, lo: 0x93, hi: 0x93}, {value: 0xa000, lo: 0x96, hi: 0x96}, - {value: 0x3958, lo: 0x97, hi: 0x97}, - {value: 0x3922, lo: 0x9c, hi: 0x9c}, - {value: 0x390a, lo: 0x9d, hi: 0x9d}, - {value: 0x3934, lo: 0x9e, hi: 0x9e}, + {value: 0x3776, lo: 0x97, hi: 0x97}, + {value: 0x3740, lo: 0x9c, hi: 0x9c}, + {value: 0x3728, lo: 0x9d, hi: 0x9d}, + {value: 0x3752, lo: 0x9e, hi: 0x9e}, {value: 0xa000, lo: 0xb4, hi: 0xb5}, - {value: 0x395e, lo: 0xb6, hi: 0xb6}, - {value: 0x3964, lo: 0xb7, hi: 0xb7}, + {value: 0x377c, lo: 0xb6, hi: 0xb6}, + {value: 0x3782, lo: 0xb7, hi: 0xb7}, // Block 0x6, offset 0x28 {value: 0x0000, lo: 0x01}, {value: 0x8133, lo: 0x83, hi: 0x87}, @@ -3656,19 +3656,19 @@ var nfcSparseValues = [730]valueRange{ {value: 0x811a, lo: 0x98, hi: 0x98}, {value: 0x811b, lo: 0x99, hi: 0x99}, {value: 0x811c, lo: 0x9a, hi: 0x9a}, - {value: 0x3982, lo: 0xa2, hi: 0xa2}, - {value: 0x3988, lo: 0xa3, hi: 0xa3}, - {value: 0x3994, lo: 0xa4, hi: 0xa4}, - {value: 0x398e, lo: 0xa5, hi: 0xa5}, - {value: 0x399a, lo: 0xa6, hi: 0xa6}, + {value: 0x37a0, lo: 0xa2, hi: 0xa2}, + {value: 0x37a6, lo: 0xa3, hi: 0xa3}, + {value: 0x37b2, lo: 0xa4, hi: 0xa4}, + {value: 0x37ac, lo: 0xa5, hi: 0xa5}, + {value: 0x37b8, lo: 0xa6, hi: 0xa6}, {value: 0xa000, lo: 0xa7, hi: 0xa7}, // Block 0x9, offset 0x3a {value: 0x0000, lo: 0x0e}, - {value: 0x39ac, lo: 0x80, hi: 0x80}, + {value: 0x37ca, lo: 0x80, hi: 0x80}, {value: 0xa000, lo: 0x81, hi: 0x81}, - {value: 0x39a0, lo: 0x82, hi: 0x82}, + {value: 0x37be, lo: 0x82, hi: 0x82}, {value: 0xa000, lo: 0x92, hi: 0x92}, - {value: 0x39a6, lo: 0x93, hi: 0x93}, + {value: 0x37c4, lo: 0x93, hi: 0x93}, {value: 0xa000, lo: 0x95, hi: 0x95}, {value: 0x8133, lo: 0x96, hi: 0x9c}, {value: 0x8133, lo: 0x9f, hi: 0xa2}, @@ -3724,11 +3724,11 @@ var nfcSparseValues = [730]valueRange{ // Block 0x10, offset 0x6e {value: 0x0000, lo: 0x07}, {value: 0xa000, lo: 0xa8, hi: 0xa8}, - {value: 0x4019, lo: 0xa9, hi: 0xa9}, + {value: 0x3e37, lo: 0xa9, hi: 0xa9}, {value: 0xa000, lo: 0xb0, hi: 0xb0}, - {value: 0x4021, lo: 0xb1, hi: 0xb1}, + {value: 0x3e3f, lo: 0xb1, hi: 0xb1}, {value: 0xa000, lo: 0xb3, hi: 0xb3}, - {value: 0x4029, lo: 0xb4, hi: 0xb4}, + {value: 0x3e47, lo: 0xb4, hi: 0xb4}, {value: 0x9903, lo: 0xbc, hi: 0xbc}, // Block 0x11, offset 0x76 {value: 0x0008, lo: 0x06}, @@ -3737,7 +3737,7 @@ var nfcSparseValues = [730]valueRange{ {value: 0x812e, lo: 0x92, hi: 0x92}, {value: 0x8133, lo: 0x93, hi: 0x93}, {value: 0x8133, lo: 0x94, hi: 0x94}, - {value: 0x465d, lo: 0x98, hi: 0x9f}, + {value: 0x45d5, lo: 0x98, hi: 0x9f}, // Block 0x12, offset 0x7d {value: 0x0000, lo: 0x02}, {value: 0x8103, lo: 0xbc, hi: 0xbc}, @@ -3745,22 +3745,22 @@ var nfcSparseValues = [730]valueRange{ // Block 0x13, offset 0x80 {value: 0x0008, lo: 0x07}, {value: 0xa000, lo: 0x87, hi: 0x87}, - {value: 0x2dd5, lo: 0x8b, hi: 0x8c}, + {value: 0x3e4f, lo: 0x8b, hi: 0x8c}, {value: 0x8105, lo: 0x8d, hi: 0x8d}, {value: 0x9900, lo: 0x97, hi: 0x97}, - {value: 0x469d, lo: 0x9c, hi: 0x9d}, - {value: 0x46ad, lo: 0x9f, hi: 0x9f}, + {value: 0x4615, lo: 0x9c, hi: 0x9d}, + {value: 0x4625, lo: 0x9f, hi: 0x9f}, {value: 0x8133, lo: 0xbe, hi: 0xbe}, // Block 0x14, offset 0x88 {value: 0x0000, lo: 0x03}, - {value: 0x46d5, lo: 0xb3, hi: 0xb3}, - {value: 0x46dd, lo: 0xb6, hi: 0xb6}, + {value: 0x464d, lo: 0xb3, hi: 0xb3}, + {value: 0x4655, lo: 0xb6, hi: 0xb6}, {value: 0x8103, lo: 0xbc, hi: 0xbc}, // Block 0x15, offset 0x8c {value: 0x0008, lo: 0x03}, {value: 0x8105, lo: 0x8d, hi: 0x8d}, - {value: 0x46b5, lo: 0x99, hi: 0x9b}, - {value: 0x46cd, lo: 0x9e, hi: 0x9e}, + {value: 0x462d, lo: 0x99, hi: 0x9b}, + {value: 0x4645, lo: 0x9e, hi: 0x9e}, // Block 0x16, offset 0x90 {value: 0x0000, lo: 0x01}, {value: 0x8103, lo: 0xbc, hi: 0xbc}, @@ -3770,30 +3770,30 @@ var nfcSparseValues = [730]valueRange{ // Block 0x18, offset 0x94 {value: 0x0000, lo: 0x08}, {value: 0xa000, lo: 0x87, hi: 0x87}, - {value: 0x2ded, lo: 0x88, hi: 0x88}, - {value: 0x2de5, lo: 0x8b, hi: 0x8b}, - {value: 0x2df5, lo: 0x8c, hi: 0x8c}, + {value: 0x3e67, lo: 0x88, hi: 0x88}, + {value: 0x3e5f, lo: 0x8b, hi: 0x8b}, + {value: 0x3e6f, lo: 0x8c, hi: 0x8c}, {value: 0x8105, lo: 0x8d, hi: 0x8d}, {value: 0x9900, lo: 0x96, hi: 0x97}, - {value: 0x46e5, lo: 0x9c, hi: 0x9c}, - {value: 0x46ed, lo: 0x9d, hi: 0x9d}, + {value: 0x465d, lo: 0x9c, hi: 0x9c}, + {value: 0x4665, lo: 0x9d, hi: 0x9d}, // Block 0x19, offset 0x9d {value: 0x0000, lo: 0x03}, {value: 0xa000, lo: 0x92, hi: 0x92}, - {value: 0x2dfd, lo: 0x94, hi: 0x94}, + {value: 0x3e77, lo: 0x94, hi: 0x94}, {value: 0x9900, lo: 0xbe, hi: 0xbe}, // Block 0x1a, offset 0xa1 {value: 0x0000, lo: 0x06}, {value: 0xa000, lo: 0x86, hi: 0x87}, - {value: 0x2e05, lo: 0x8a, hi: 0x8a}, - {value: 0x2e15, lo: 0x8b, hi: 0x8b}, - {value: 0x2e0d, lo: 0x8c, hi: 0x8c}, + {value: 0x3e7f, lo: 0x8a, hi: 0x8a}, + {value: 0x3e8f, lo: 0x8b, hi: 0x8b}, + {value: 0x3e87, lo: 0x8c, hi: 0x8c}, {value: 0x8105, lo: 0x8d, hi: 0x8d}, {value: 0x9900, lo: 0x97, hi: 0x97}, // Block 0x1b, offset 0xa8 {value: 0x1801, lo: 0x04}, {value: 0xa000, lo: 0x86, hi: 0x86}, - {value: 0x4031, lo: 0x88, hi: 0x88}, + {value: 0x3e97, lo: 0x88, hi: 0x88}, {value: 0x8105, lo: 0x8d, hi: 0x8d}, {value: 0x8121, lo: 0x95, hi: 0x96}, // Block 0x1c, offset 0xad @@ -3802,13 +3802,13 @@ var nfcSparseValues = [730]valueRange{ {value: 0xa000, lo: 0xbf, hi: 0xbf}, // Block 0x1d, offset 0xb0 {value: 0x0000, lo: 0x09}, - {value: 0x2e1d, lo: 0x80, hi: 0x80}, + {value: 0x3e9f, lo: 0x80, hi: 0x80}, {value: 0x9900, lo: 0x82, hi: 0x82}, {value: 0xa000, lo: 0x86, hi: 0x86}, - {value: 0x2e25, lo: 0x87, hi: 0x87}, - {value: 0x2e2d, lo: 0x88, hi: 0x88}, - {value: 0x3091, lo: 0x8a, hi: 0x8a}, - {value: 0x2f19, lo: 0x8b, hi: 0x8b}, + {value: 0x3ea7, lo: 0x87, hi: 0x87}, + {value: 0x3eaf, lo: 0x88, hi: 0x88}, + {value: 0x4adf, lo: 0x8a, hi: 0x8a}, + {value: 0x42f9, lo: 0x8b, hi: 0x8b}, {value: 0x8105, lo: 0x8d, hi: 0x8d}, {value: 0x9900, lo: 0x95, hi: 0x96}, // Block 0x1e, offset 0xba @@ -3818,20 +3818,20 @@ var nfcSparseValues = [730]valueRange{ // Block 0x1f, offset 0xbd {value: 0x0000, lo: 0x06}, {value: 0xa000, lo: 0x86, hi: 0x87}, - {value: 0x2e35, lo: 0x8a, hi: 0x8a}, - {value: 0x2e45, lo: 0x8b, hi: 0x8b}, - {value: 0x2e3d, lo: 0x8c, hi: 0x8c}, + {value: 0x3eb7, lo: 0x8a, hi: 0x8a}, + {value: 0x3ec7, lo: 0x8b, hi: 0x8b}, + {value: 0x3ebf, lo: 0x8c, hi: 0x8c}, {value: 0x8105, lo: 0x8d, hi: 0x8d}, {value: 0x9900, lo: 0x97, hi: 0x97}, // Block 0x20, offset 0xc4 - {value: 0x6ab3, lo: 0x07}, + {value: 0x5a29, lo: 0x07}, {value: 0x9905, lo: 0x8a, hi: 0x8a}, {value: 0x9900, lo: 0x8f, hi: 0x8f}, {value: 0xa000, lo: 0x99, hi: 0x99}, - {value: 0x4039, lo: 0x9a, hi: 0x9a}, - {value: 0x3099, lo: 0x9c, hi: 0x9c}, - {value: 0x2f24, lo: 0x9d, hi: 0x9d}, - {value: 0x2e4d, lo: 0x9e, hi: 0x9f}, + {value: 0x3ecf, lo: 0x9a, hi: 0x9a}, + {value: 0x4ae7, lo: 0x9c, hi: 0x9c}, + {value: 0x4304, lo: 0x9d, hi: 0x9d}, + {value: 0x3ed7, lo: 0x9e, hi: 0x9f}, // Block 0x21, offset 0xcc {value: 0x0000, lo: 0x02}, {value: 0x8123, lo: 0xb8, hi: 0xb9}, @@ -3865,9 +3865,9 @@ var nfcSparseValues = [730]valueRange{ {value: 0x4bc5, lo: 0xb3, hi: 0xb3}, {value: 0x8129, lo: 0xb4, hi: 0xb4}, {value: 0x4bce, lo: 0xb5, hi: 0xb5}, - {value: 0x46f5, lo: 0xb6, hi: 0xb6}, + {value: 0x466d, lo: 0xb6, hi: 0xb6}, {value: 0x8200, lo: 0xb7, hi: 0xb7}, - {value: 0x46fd, lo: 0xb8, hi: 0xb8}, + {value: 0x4675, lo: 0xb8, hi: 0xb8}, {value: 0x8200, lo: 0xb9, hi: 0xb9}, {value: 0x8128, lo: 0xba, hi: 0xbd}, // Block 0x27, offset 0xec @@ -3889,7 +3889,7 @@ var nfcSparseValues = [730]valueRange{ // Block 0x29, offset 0xfa {value: 0x0000, lo: 0x05}, {value: 0xa000, lo: 0xa5, hi: 0xa5}, - {value: 0x2e55, lo: 0xa6, hi: 0xa6}, + {value: 0x3edf, lo: 0xa6, hi: 0xa6}, {value: 0x9900, lo: 0xae, hi: 0xae}, {value: 0x8103, lo: 0xb7, hi: 0xb7}, {value: 0x8105, lo: 0xb9, hi: 0xba}, @@ -3952,10 +3952,10 @@ var nfcSparseValues = [730]valueRange{ {value: 0x8133, lo: 0x8b, hi: 0x8e}, // Block 0x38, offset 0x12b {value: 0x0000, lo: 0x08}, - {value: 0x2e9d, lo: 0x80, hi: 0x80}, - {value: 0x2ea5, lo: 0x81, hi: 0x81}, + {value: 0x3f27, lo: 0x80, hi: 0x80}, + {value: 0x3f2f, lo: 0x81, hi: 0x81}, {value: 0xa000, lo: 0x82, hi: 0x82}, - {value: 0x2ead, lo: 0x83, hi: 0x83}, + {value: 0x3f37, lo: 0x83, hi: 0x83}, {value: 0x8105, lo: 0x84, hi: 0x84}, {value: 0x8133, lo: 0xab, hi: 0xab}, {value: 0x812e, lo: 0xac, hi: 0xac}, @@ -4003,7 +4003,7 @@ var nfcSparseValues = [730]valueRange{ {value: 0x812e, lo: 0xac, hi: 0xaf}, {value: 0x8133, lo: 0xb0, hi: 0xb0}, // Block 0x3f, offset 0x158 - {value: 0x43bc, lo: 0x02}, + {value: 0x4334, lo: 0x02}, {value: 0x023c, lo: 0xa6, hi: 0xa6}, {value: 0x0057, lo: 0xaa, hi: 0xab}, // Block 0x40, offset 0x15b @@ -4011,38 +4011,38 @@ var nfcSparseValues = [730]valueRange{ {value: 0xa000, lo: 0x90, hi: 0x90}, {value: 0xa000, lo: 0x92, hi: 0x92}, {value: 0xa000, lo: 0x94, hi: 0x94}, - {value: 0x3cfa, lo: 0x9a, hi: 0x9b}, - {value: 0x3d08, lo: 0xae, hi: 0xae}, + {value: 0x3b18, lo: 0x9a, hi: 0x9b}, + {value: 0x3b26, lo: 0xae, hi: 0xae}, // Block 0x41, offset 0x161 {value: 0x000e, lo: 0x05}, - {value: 0x3d0f, lo: 0x8d, hi: 0x8e}, - {value: 0x3d16, lo: 0x8f, hi: 0x8f}, + {value: 0x3b2d, lo: 0x8d, hi: 0x8e}, + {value: 0x3b34, lo: 0x8f, hi: 0x8f}, {value: 0xa000, lo: 0x90, hi: 0x90}, {value: 0xa000, lo: 0x92, hi: 0x92}, {value: 0xa000, lo: 0x94, hi: 0x94}, // Block 0x42, offset 0x167 - {value: 0x62c7, lo: 0x0a}, + {value: 0x64a9, lo: 0x0a}, {value: 0xa000, lo: 0x83, hi: 0x83}, - {value: 0x3d24, lo: 0x84, hi: 0x84}, + {value: 0x3b42, lo: 0x84, hi: 0x84}, {value: 0xa000, lo: 0x88, hi: 0x88}, - {value: 0x3d2b, lo: 0x89, hi: 0x89}, + {value: 0x3b49, lo: 0x89, hi: 0x89}, {value: 0xa000, lo: 0x8b, hi: 0x8b}, - {value: 0x3d32, lo: 0x8c, hi: 0x8c}, + {value: 0x3b50, lo: 0x8c, hi: 0x8c}, {value: 0xa000, lo: 0xa3, hi: 0xa3}, - {value: 0x3d39, lo: 0xa4, hi: 0xa5}, - {value: 0x3d40, lo: 0xa6, hi: 0xa6}, + {value: 0x3b57, lo: 0xa4, hi: 0xa5}, + {value: 0x3b5e, lo: 0xa6, hi: 0xa6}, {value: 0xa000, lo: 0xbc, hi: 0xbc}, // Block 0x43, offset 0x172 {value: 0x0007, lo: 0x03}, - {value: 0x3da9, lo: 0xa0, hi: 0xa1}, - {value: 0x3dd3, lo: 0xa2, hi: 0xa3}, - {value: 0x3dfd, lo: 0xaa, hi: 0xad}, + {value: 0x3bc7, lo: 0xa0, hi: 0xa1}, + {value: 0x3bf1, lo: 0xa2, hi: 0xa3}, + {value: 0x3c1b, lo: 0xaa, hi: 0xad}, // Block 0x44, offset 0x176 {value: 0x0004, lo: 0x01}, {value: 0x0586, lo: 0xa9, hi: 0xaa}, // Block 0x45, offset 0x178 {value: 0x0000, lo: 0x01}, - {value: 0x461e, lo: 0x9c, hi: 0x9c}, + {value: 0x4596, lo: 0x9c, hi: 0x9c}, // Block 0x46, offset 0x17a {value: 0x0000, lo: 0x01}, {value: 0x8133, lo: 0xaf, hi: 0xb1}, @@ -4187,29 +4187,29 @@ var nfcSparseValues = [730]valueRange{ {value: 0xc600, lo: 0x89, hi: 0xa3}, // Block 0x63, offset 0x1eb {value: 0x0006, lo: 0x0d}, - {value: 0x44d1, lo: 0x9d, hi: 0x9d}, + {value: 0x4449, lo: 0x9d, hi: 0x9d}, {value: 0x8116, lo: 0x9e, hi: 0x9e}, - {value: 0x4543, lo: 0x9f, hi: 0x9f}, - {value: 0x4531, lo: 0xaa, hi: 0xab}, - {value: 0x4635, lo: 0xac, hi: 0xac}, - {value: 0x463d, lo: 0xad, hi: 0xad}, - {value: 0x4489, lo: 0xae, hi: 0xb1}, - {value: 0x44a7, lo: 0xb2, hi: 0xb4}, - {value: 0x44bf, lo: 0xb5, hi: 0xb6}, - {value: 0x44cb, lo: 0xb8, hi: 0xb8}, - {value: 0x44d7, lo: 0xb9, hi: 0xbb}, - {value: 0x44ef, lo: 0xbc, hi: 0xbc}, - {value: 0x44f5, lo: 0xbe, hi: 0xbe}, + {value: 0x44bb, lo: 0x9f, hi: 0x9f}, + {value: 0x44a9, lo: 0xaa, hi: 0xab}, + {value: 0x45ad, lo: 0xac, hi: 0xac}, + {value: 0x45b5, lo: 0xad, hi: 0xad}, + {value: 0x4401, lo: 0xae, hi: 0xb1}, + {value: 0x441f, lo: 0xb2, hi: 0xb4}, + {value: 0x4437, lo: 0xb5, hi: 0xb6}, + {value: 0x4443, lo: 0xb8, hi: 0xb8}, + {value: 0x444f, lo: 0xb9, hi: 0xbb}, + {value: 0x4467, lo: 0xbc, hi: 0xbc}, + {value: 0x446d, lo: 0xbe, hi: 0xbe}, // Block 0x64, offset 0x1f9 {value: 0x0006, lo: 0x08}, - {value: 0x44fb, lo: 0x80, hi: 0x81}, - {value: 0x4507, lo: 0x83, hi: 0x84}, - {value: 0x4519, lo: 0x86, hi: 0x89}, - {value: 0x453d, lo: 0x8a, hi: 0x8a}, - {value: 0x44b9, lo: 0x8b, hi: 0x8b}, - {value: 0x44a1, lo: 0x8c, hi: 0x8c}, - {value: 0x44e9, lo: 0x8d, hi: 0x8d}, - {value: 0x4513, lo: 0x8e, hi: 0x8e}, + {value: 0x4473, lo: 0x80, hi: 0x81}, + {value: 0x447f, lo: 0x83, hi: 0x84}, + {value: 0x4491, lo: 0x86, hi: 0x89}, + {value: 0x44b5, lo: 0x8a, hi: 0x8a}, + {value: 0x4431, lo: 0x8b, hi: 0x8b}, + {value: 0x4419, lo: 0x8c, hi: 0x8c}, + {value: 0x4461, lo: 0x8d, hi: 0x8d}, + {value: 0x448b, lo: 0x8e, hi: 0x8e}, // Block 0x65, offset 0x202 {value: 0x0000, lo: 0x02}, {value: 0x8100, lo: 0xa4, hi: 0xa5}, @@ -4307,18 +4307,18 @@ var nfcSparseValues = [730]valueRange{ // Block 0x7b, offset 0x24a {value: 0x17fe, lo: 0x07}, {value: 0xa000, lo: 0x99, hi: 0x99}, - {value: 0x4379, lo: 0x9a, hi: 0x9a}, + {value: 0x4277, lo: 0x9a, hi: 0x9a}, {value: 0xa000, lo: 0x9b, hi: 0x9b}, - {value: 0x4383, lo: 0x9c, hi: 0x9c}, + {value: 0x4281, lo: 0x9c, hi: 0x9c}, {value: 0xa000, lo: 0xa5, hi: 0xa5}, - {value: 0x438d, lo: 0xab, hi: 0xab}, + {value: 0x428b, lo: 0xab, hi: 0xab}, {value: 0x8105, lo: 0xb9, hi: 0xba}, // Block 0x7c, offset 0x252 {value: 0x0000, lo: 0x06}, {value: 0x8133, lo: 0x80, hi: 0x82}, {value: 0x9900, lo: 0xa7, hi: 0xa7}, - {value: 0x2eb5, lo: 0xae, hi: 0xae}, - {value: 0x2ebf, lo: 0xaf, hi: 0xaf}, + {value: 0x4295, lo: 0xae, hi: 0xae}, + {value: 0x429f, lo: 0xaf, hi: 0xaf}, {value: 0xa000, lo: 0xb1, hi: 0xb2}, {value: 0x8105, lo: 0xb3, hi: 0xb4}, // Block 0x7d, offset 0x259 @@ -4339,8 +4339,8 @@ var nfcSparseValues = [730]valueRange{ // Block 0x81, offset 0x264 {value: 0x0000, lo: 0x07}, {value: 0xa000, lo: 0x87, hi: 0x87}, - {value: 0x2ec9, lo: 0x8b, hi: 0x8b}, - {value: 0x2ed3, lo: 0x8c, hi: 0x8c}, + {value: 0x42a9, lo: 0x8b, hi: 0x8b}, + {value: 0x42b3, lo: 0x8c, hi: 0x8c}, {value: 0x8105, lo: 0x8d, hi: 0x8d}, {value: 0x9900, lo: 0x97, hi: 0x97}, {value: 0x8133, lo: 0xa6, hi: 0xac}, @@ -4351,13 +4351,13 @@ var nfcSparseValues = [730]valueRange{ {value: 0x8103, lo: 0x86, hi: 0x86}, {value: 0x8133, lo: 0x9e, hi: 0x9e}, // Block 0x83, offset 0x270 - {value: 0x6a23, lo: 0x06}, + {value: 0x5643, lo: 0x06}, {value: 0x9900, lo: 0xb0, hi: 0xb0}, {value: 0xa000, lo: 0xb9, hi: 0xb9}, {value: 0x9900, lo: 0xba, hi: 0xba}, - {value: 0x2ee7, lo: 0xbb, hi: 0xbb}, - {value: 0x2edd, lo: 0xbc, hi: 0xbd}, - {value: 0x2ef1, lo: 0xbe, hi: 0xbe}, + {value: 0x42c7, lo: 0xbb, hi: 0xbb}, + {value: 0x42bd, lo: 0xbc, hi: 0xbd}, + {value: 0x42d1, lo: 0xbe, hi: 0xbe}, // Block 0x84, offset 0x277 {value: 0x0000, lo: 0x02}, {value: 0x8105, lo: 0x82, hi: 0x82}, @@ -4366,8 +4366,8 @@ var nfcSparseValues = [730]valueRange{ {value: 0x0000, lo: 0x05}, {value: 0x9900, lo: 0xaf, hi: 0xaf}, {value: 0xa000, lo: 0xb8, hi: 0xb9}, - {value: 0x2efb, lo: 0xba, hi: 0xba}, - {value: 0x2f05, lo: 0xbb, hi: 0xbb}, + {value: 0x42db, lo: 0xba, hi: 0xba}, + {value: 0x42e5, lo: 0xbb, hi: 0xbb}, {value: 0x8105, lo: 0xbf, hi: 0xbf}, // Block 0x86, offset 0x280 {value: 0x0000, lo: 0x01}, @@ -4387,7 +4387,7 @@ var nfcSparseValues = [730]valueRange{ {value: 0x0000, lo: 0x04}, {value: 0x9900, lo: 0xb0, hi: 0xb0}, {value: 0xa000, lo: 0xb5, hi: 0xb5}, - {value: 0x2f0f, lo: 0xb8, hi: 0xb8}, + {value: 0x42ef, lo: 0xb8, hi: 0xb8}, {value: 0x8105, lo: 0xbd, hi: 0xbe}, // Block 0x8b, offset 0x28f {value: 0x0000, lo: 0x01}, @@ -4428,13 +4428,13 @@ var nfcSparseValues = [730]valueRange{ {value: 0x8101, lo: 0x9e, hi: 0x9e}, // Block 0x97, offset 0x2a8 {value: 0x0000, lo: 0x0c}, - {value: 0x470d, lo: 0x9e, hi: 0x9e}, - {value: 0x4717, lo: 0x9f, hi: 0x9f}, - {value: 0x474b, lo: 0xa0, hi: 0xa0}, - {value: 0x4759, lo: 0xa1, hi: 0xa1}, - {value: 0x4767, lo: 0xa2, hi: 0xa2}, - {value: 0x4775, lo: 0xa3, hi: 0xa3}, - {value: 0x4783, lo: 0xa4, hi: 0xa4}, + {value: 0x46fd, lo: 0x9e, hi: 0x9e}, + {value: 0x4707, lo: 0x9f, hi: 0x9f}, + {value: 0x473b, lo: 0xa0, hi: 0xa0}, + {value: 0x4749, lo: 0xa1, hi: 0xa1}, + {value: 0x4757, lo: 0xa2, hi: 0xa2}, + {value: 0x4765, lo: 0xa3, hi: 0xa3}, + {value: 0x4773, lo: 0xa4, hi: 0xa4}, {value: 0x812c, lo: 0xa5, hi: 0xa6}, {value: 0x8101, lo: 0xa7, hi: 0xa9}, {value: 0x8131, lo: 0xad, hi: 0xad}, @@ -4446,14 +4446,14 @@ var nfcSparseValues = [730]valueRange{ {value: 0x8133, lo: 0x85, hi: 0x89}, {value: 0x812e, lo: 0x8a, hi: 0x8b}, {value: 0x8133, lo: 0xaa, hi: 0xad}, - {value: 0x4721, lo: 0xbb, hi: 0xbb}, - {value: 0x472b, lo: 0xbc, hi: 0xbc}, - {value: 0x4791, lo: 0xbd, hi: 0xbd}, - {value: 0x47ad, lo: 0xbe, hi: 0xbe}, - {value: 0x479f, lo: 0xbf, hi: 0xbf}, + {value: 0x4711, lo: 0xbb, hi: 0xbb}, + {value: 0x471b, lo: 0xbc, hi: 0xbc}, + {value: 0x4781, lo: 0xbd, hi: 0xbd}, + {value: 0x479d, lo: 0xbe, hi: 0xbe}, + {value: 0x478f, lo: 0xbf, hi: 0xbf}, // Block 0x99, offset 0x2bf {value: 0x0000, lo: 0x01}, - {value: 0x47bb, lo: 0x80, hi: 0x80}, + {value: 0x47ab, lo: 0x80, hi: 0x80}, // Block 0x9a, offset 0x2c1 {value: 0x0000, lo: 0x01}, {value: 0x8133, lo: 0x82, hi: 0x84}, @@ -4660,7 +4660,7 @@ func (t *nfkcTrie) lookupStringUnsafe(s string) uint16 { return 0 } -// nfkcTrie. Total size: 19260 bytes (18.81 KiB). Checksum: 1a0bbc4c8c24da49. +// nfkcTrie. Total size: 19260 bytes (18.81 KiB). Checksum: 4d294206c9ae0ba8. type nfkcTrie struct{} func newNfkcTrie(i int) *nfkcTrie { @@ -4696,63 +4696,63 @@ var nfkcValues = [6208]uint16{ 0x76: 0xa000, 0x77: 0xa000, 0x78: 0xa000, 0x79: 0xa000, 0x7a: 0xa000, // Block 0x2, offset 0x80 // Block 0x3, offset 0xc0 - 0xc0: 0x30b0, 0xc1: 0x30b5, 0xc2: 0x47c9, 0xc3: 0x30ba, 0xc4: 0x47d8, 0xc5: 0x47dd, - 0xc6: 0xa000, 0xc7: 0x47e7, 0xc8: 0x3123, 0xc9: 0x3128, 0xca: 0x47ec, 0xcb: 0x313c, - 0xcc: 0x31af, 0xcd: 0x31b4, 0xce: 0x31b9, 0xcf: 0x4800, 0xd1: 0x3245, - 0xd2: 0x3268, 0xd3: 0x326d, 0xd4: 0x480a, 0xd5: 0x480f, 0xd6: 0x481e, - 0xd8: 0xa000, 0xd9: 0x32f4, 0xda: 0x32f9, 0xdb: 0x32fe, 0xdc: 0x4850, 0xdd: 0x3376, - 0xe0: 0x33bc, 0xe1: 0x33c1, 0xe2: 0x485a, 0xe3: 0x33c6, - 0xe4: 0x4869, 0xe5: 0x486e, 0xe6: 0xa000, 0xe7: 0x4878, 0xe8: 0x342f, 0xe9: 0x3434, - 0xea: 0x487d, 0xeb: 0x3448, 0xec: 0x34c0, 0xed: 0x34c5, 0xee: 0x34ca, 0xef: 0x4891, - 0xf1: 0x3556, 0xf2: 0x3579, 0xf3: 0x357e, 0xf4: 0x489b, 0xf5: 0x48a0, - 0xf6: 0x48af, 0xf8: 0xa000, 0xf9: 0x360a, 0xfa: 0x360f, 0xfb: 0x3614, - 0xfc: 0x48e1, 0xfd: 0x3691, 0xff: 0x36aa, + 0xc0: 0x2ece, 0xc1: 0x2ed3, 0xc2: 0x47b9, 0xc3: 0x2ed8, 0xc4: 0x47c8, 0xc5: 0x47cd, + 0xc6: 0xa000, 0xc7: 0x47d7, 0xc8: 0x2f41, 0xc9: 0x2f46, 0xca: 0x47dc, 0xcb: 0x2f5a, + 0xcc: 0x2fcd, 0xcd: 0x2fd2, 0xce: 0x2fd7, 0xcf: 0x47f0, 0xd1: 0x3063, + 0xd2: 0x3086, 0xd3: 0x308b, 0xd4: 0x47fa, 0xd5: 0x47ff, 0xd6: 0x480e, + 0xd8: 0xa000, 0xd9: 0x3112, 0xda: 0x3117, 0xdb: 0x311c, 0xdc: 0x4840, 0xdd: 0x3194, + 0xe0: 0x31da, 0xe1: 0x31df, 0xe2: 0x484a, 0xe3: 0x31e4, + 0xe4: 0x4859, 0xe5: 0x485e, 0xe6: 0xa000, 0xe7: 0x4868, 0xe8: 0x324d, 0xe9: 0x3252, + 0xea: 0x486d, 0xeb: 0x3266, 0xec: 0x32de, 0xed: 0x32e3, 0xee: 0x32e8, 0xef: 0x4881, + 0xf1: 0x3374, 0xf2: 0x3397, 0xf3: 0x339c, 0xf4: 0x488b, 0xf5: 0x4890, + 0xf6: 0x489f, 0xf8: 0xa000, 0xf9: 0x3428, 0xfa: 0x342d, 0xfb: 0x3432, + 0xfc: 0x48d1, 0xfd: 0x34af, 0xff: 0x34c8, // Block 0x4, offset 0x100 - 0x100: 0x30bf, 0x101: 0x33cb, 0x102: 0x47ce, 0x103: 0x485f, 0x104: 0x30dd, 0x105: 0x33e9, - 0x106: 0x30f1, 0x107: 0x33fd, 0x108: 0x30f6, 0x109: 0x3402, 0x10a: 0x30fb, 0x10b: 0x3407, - 0x10c: 0x3100, 0x10d: 0x340c, 0x10e: 0x310a, 0x10f: 0x3416, - 0x112: 0x47f1, 0x113: 0x4882, 0x114: 0x3132, 0x115: 0x343e, 0x116: 0x3137, 0x117: 0x3443, - 0x118: 0x3155, 0x119: 0x3461, 0x11a: 0x3146, 0x11b: 0x3452, 0x11c: 0x316e, 0x11d: 0x347a, - 0x11e: 0x3178, 0x11f: 0x3484, 0x120: 0x317d, 0x121: 0x3489, 0x122: 0x3187, 0x123: 0x3493, - 0x124: 0x318c, 0x125: 0x3498, 0x128: 0x31be, 0x129: 0x34cf, - 0x12a: 0x31c3, 0x12b: 0x34d4, 0x12c: 0x31c8, 0x12d: 0x34d9, 0x12e: 0x31eb, 0x12f: 0x34f7, - 0x130: 0x31cd, 0x132: 0x1a8a, 0x133: 0x1b17, 0x134: 0x31f5, 0x135: 0x3501, - 0x136: 0x3209, 0x137: 0x351a, 0x139: 0x3213, 0x13a: 0x3524, 0x13b: 0x321d, - 0x13c: 0x352e, 0x13d: 0x3218, 0x13e: 0x3529, 0x13f: 0x1cdc, + 0x100: 0x2edd, 0x101: 0x31e9, 0x102: 0x47be, 0x103: 0x484f, 0x104: 0x2efb, 0x105: 0x3207, + 0x106: 0x2f0f, 0x107: 0x321b, 0x108: 0x2f14, 0x109: 0x3220, 0x10a: 0x2f19, 0x10b: 0x3225, + 0x10c: 0x2f1e, 0x10d: 0x322a, 0x10e: 0x2f28, 0x10f: 0x3234, + 0x112: 0x47e1, 0x113: 0x4872, 0x114: 0x2f50, 0x115: 0x325c, 0x116: 0x2f55, 0x117: 0x3261, + 0x118: 0x2f73, 0x119: 0x327f, 0x11a: 0x2f64, 0x11b: 0x3270, 0x11c: 0x2f8c, 0x11d: 0x3298, + 0x11e: 0x2f96, 0x11f: 0x32a2, 0x120: 0x2f9b, 0x121: 0x32a7, 0x122: 0x2fa5, 0x123: 0x32b1, + 0x124: 0x2faa, 0x125: 0x32b6, 0x128: 0x2fdc, 0x129: 0x32ed, + 0x12a: 0x2fe1, 0x12b: 0x32f2, 0x12c: 0x2fe6, 0x12d: 0x32f7, 0x12e: 0x3009, 0x12f: 0x3315, + 0x130: 0x2feb, 0x132: 0x1a8a, 0x133: 0x1b17, 0x134: 0x3013, 0x135: 0x331f, + 0x136: 0x3027, 0x137: 0x3338, 0x139: 0x3031, 0x13a: 0x3342, 0x13b: 0x303b, + 0x13c: 0x334c, 0x13d: 0x3036, 0x13e: 0x3347, 0x13f: 0x1cdc, // Block 0x5, offset 0x140 - 0x140: 0x1d64, 0x143: 0x3240, 0x144: 0x3551, 0x145: 0x3259, - 0x146: 0x356a, 0x147: 0x324f, 0x148: 0x3560, 0x149: 0x1d8c, - 0x14c: 0x4814, 0x14d: 0x48a5, 0x14e: 0x3272, 0x14f: 0x3583, 0x150: 0x327c, 0x151: 0x358d, - 0x154: 0x329a, 0x155: 0x35ab, 0x156: 0x32b3, 0x157: 0x35c4, - 0x158: 0x32a4, 0x159: 0x35b5, 0x15a: 0x4837, 0x15b: 0x48c8, 0x15c: 0x32bd, 0x15d: 0x35ce, - 0x15e: 0x32cc, 0x15f: 0x35dd, 0x160: 0x483c, 0x161: 0x48cd, 0x162: 0x32e5, 0x163: 0x35fb, - 0x164: 0x32d6, 0x165: 0x35ec, 0x168: 0x4846, 0x169: 0x48d7, - 0x16a: 0x484b, 0x16b: 0x48dc, 0x16c: 0x3303, 0x16d: 0x3619, 0x16e: 0x330d, 0x16f: 0x3623, - 0x170: 0x3312, 0x171: 0x3628, 0x172: 0x3330, 0x173: 0x3646, 0x174: 0x3353, 0x175: 0x3669, - 0x176: 0x337b, 0x177: 0x3696, 0x178: 0x338f, 0x179: 0x339e, 0x17a: 0x36be, 0x17b: 0x33a8, - 0x17c: 0x36c8, 0x17d: 0x33ad, 0x17e: 0x36cd, 0x17f: 0x00a7, + 0x140: 0x1d64, 0x143: 0x305e, 0x144: 0x336f, 0x145: 0x3077, + 0x146: 0x3388, 0x147: 0x306d, 0x148: 0x337e, 0x149: 0x1d8c, + 0x14c: 0x4804, 0x14d: 0x4895, 0x14e: 0x3090, 0x14f: 0x33a1, 0x150: 0x309a, 0x151: 0x33ab, + 0x154: 0x30b8, 0x155: 0x33c9, 0x156: 0x30d1, 0x157: 0x33e2, + 0x158: 0x30c2, 0x159: 0x33d3, 0x15a: 0x4827, 0x15b: 0x48b8, 0x15c: 0x30db, 0x15d: 0x33ec, + 0x15e: 0x30ea, 0x15f: 0x33fb, 0x160: 0x482c, 0x161: 0x48bd, 0x162: 0x3103, 0x163: 0x3419, + 0x164: 0x30f4, 0x165: 0x340a, 0x168: 0x4836, 0x169: 0x48c7, + 0x16a: 0x483b, 0x16b: 0x48cc, 0x16c: 0x3121, 0x16d: 0x3437, 0x16e: 0x312b, 0x16f: 0x3441, + 0x170: 0x3130, 0x171: 0x3446, 0x172: 0x314e, 0x173: 0x3464, 0x174: 0x3171, 0x175: 0x3487, + 0x176: 0x3199, 0x177: 0x34b4, 0x178: 0x31ad, 0x179: 0x31bc, 0x17a: 0x34dc, 0x17b: 0x31c6, + 0x17c: 0x34e6, 0x17d: 0x31cb, 0x17e: 0x34eb, 0x17f: 0x00a7, // Block 0x6, offset 0x180 - 0x184: 0x2f2f, 0x185: 0x2f35, - 0x186: 0x2f3b, 0x187: 0x1a9f, 0x188: 0x1aa2, 0x189: 0x1b38, 0x18a: 0x1ab7, 0x18b: 0x1aba, - 0x18c: 0x1b6e, 0x18d: 0x30c9, 0x18e: 0x33d5, 0x18f: 0x31d7, 0x190: 0x34e3, 0x191: 0x3281, - 0x192: 0x3592, 0x193: 0x3317, 0x194: 0x362d, 0x195: 0x3b10, 0x196: 0x3c9f, 0x197: 0x3b09, - 0x198: 0x3c98, 0x199: 0x3b17, 0x19a: 0x3ca6, 0x19b: 0x3b02, 0x19c: 0x3c91, - 0x19e: 0x39f1, 0x19f: 0x3b80, 0x1a0: 0x39ea, 0x1a1: 0x3b79, 0x1a2: 0x36f4, 0x1a3: 0x3706, - 0x1a6: 0x3182, 0x1a7: 0x348e, 0x1a8: 0x31ff, 0x1a9: 0x3510, - 0x1aa: 0x482d, 0x1ab: 0x48be, 0x1ac: 0x3ad1, 0x1ad: 0x3c60, 0x1ae: 0x3718, 0x1af: 0x371e, - 0x1b0: 0x3506, 0x1b1: 0x1a6f, 0x1b2: 0x1a72, 0x1b3: 0x1aff, 0x1b4: 0x3169, 0x1b5: 0x3475, - 0x1b8: 0x323b, 0x1b9: 0x354c, 0x1ba: 0x39f8, 0x1bb: 0x3b87, - 0x1bc: 0x36ee, 0x1bd: 0x3700, 0x1be: 0x36fa, 0x1bf: 0x370c, + 0x184: 0x2dd5, 0x185: 0x2ddb, + 0x186: 0x2de1, 0x187: 0x1a9f, 0x188: 0x1aa2, 0x189: 0x1b38, 0x18a: 0x1ab7, 0x18b: 0x1aba, + 0x18c: 0x1b6e, 0x18d: 0x2ee7, 0x18e: 0x31f3, 0x18f: 0x2ff5, 0x190: 0x3301, 0x191: 0x309f, + 0x192: 0x33b0, 0x193: 0x3135, 0x194: 0x344b, 0x195: 0x392e, 0x196: 0x3abd, 0x197: 0x3927, + 0x198: 0x3ab6, 0x199: 0x3935, 0x19a: 0x3ac4, 0x19b: 0x3920, 0x19c: 0x3aaf, + 0x19e: 0x380f, 0x19f: 0x399e, 0x1a0: 0x3808, 0x1a1: 0x3997, 0x1a2: 0x3512, 0x1a3: 0x3524, + 0x1a6: 0x2fa0, 0x1a7: 0x32ac, 0x1a8: 0x301d, 0x1a9: 0x332e, + 0x1aa: 0x481d, 0x1ab: 0x48ae, 0x1ac: 0x38ef, 0x1ad: 0x3a7e, 0x1ae: 0x3536, 0x1af: 0x353c, + 0x1b0: 0x3324, 0x1b1: 0x1a6f, 0x1b2: 0x1a72, 0x1b3: 0x1aff, 0x1b4: 0x2f87, 0x1b5: 0x3293, + 0x1b8: 0x3059, 0x1b9: 0x336a, 0x1ba: 0x3816, 0x1bb: 0x39a5, + 0x1bc: 0x350c, 0x1bd: 0x351e, 0x1be: 0x3518, 0x1bf: 0x352a, // Block 0x7, offset 0x1c0 - 0x1c0: 0x30ce, 0x1c1: 0x33da, 0x1c2: 0x30d3, 0x1c3: 0x33df, 0x1c4: 0x314b, 0x1c5: 0x3457, - 0x1c6: 0x3150, 0x1c7: 0x345c, 0x1c8: 0x31dc, 0x1c9: 0x34e8, 0x1ca: 0x31e1, 0x1cb: 0x34ed, - 0x1cc: 0x3286, 0x1cd: 0x3597, 0x1ce: 0x328b, 0x1cf: 0x359c, 0x1d0: 0x32a9, 0x1d1: 0x35ba, - 0x1d2: 0x32ae, 0x1d3: 0x35bf, 0x1d4: 0x331c, 0x1d5: 0x3632, 0x1d6: 0x3321, 0x1d7: 0x3637, - 0x1d8: 0x32c7, 0x1d9: 0x35d8, 0x1da: 0x32e0, 0x1db: 0x35f6, - 0x1de: 0x319b, 0x1df: 0x34a7, - 0x1e6: 0x47d3, 0x1e7: 0x4864, 0x1e8: 0x47fb, 0x1e9: 0x488c, - 0x1ea: 0x3aa0, 0x1eb: 0x3c2f, 0x1ec: 0x3a7d, 0x1ed: 0x3c0c, 0x1ee: 0x4819, 0x1ef: 0x48aa, - 0x1f0: 0x3a99, 0x1f1: 0x3c28, 0x1f2: 0x3385, 0x1f3: 0x36a0, + 0x1c0: 0x2eec, 0x1c1: 0x31f8, 0x1c2: 0x2ef1, 0x1c3: 0x31fd, 0x1c4: 0x2f69, 0x1c5: 0x3275, + 0x1c6: 0x2f6e, 0x1c7: 0x327a, 0x1c8: 0x2ffa, 0x1c9: 0x3306, 0x1ca: 0x2fff, 0x1cb: 0x330b, + 0x1cc: 0x30a4, 0x1cd: 0x33b5, 0x1ce: 0x30a9, 0x1cf: 0x33ba, 0x1d0: 0x30c7, 0x1d1: 0x33d8, + 0x1d2: 0x30cc, 0x1d3: 0x33dd, 0x1d4: 0x313a, 0x1d5: 0x3450, 0x1d6: 0x313f, 0x1d7: 0x3455, + 0x1d8: 0x30e5, 0x1d9: 0x33f6, 0x1da: 0x30fe, 0x1db: 0x3414, + 0x1de: 0x2fb9, 0x1df: 0x32c5, + 0x1e6: 0x47c3, 0x1e7: 0x4854, 0x1e8: 0x47eb, 0x1e9: 0x487c, + 0x1ea: 0x38be, 0x1eb: 0x3a4d, 0x1ec: 0x389b, 0x1ed: 0x3a2a, 0x1ee: 0x4809, 0x1ef: 0x489a, + 0x1f0: 0x38b7, 0x1f1: 0x3a46, 0x1f2: 0x31a3, 0x1f3: 0x34be, // Block 0x8, offset 0x200 0x200: 0x9933, 0x201: 0x9933, 0x202: 0x9933, 0x203: 0x9933, 0x204: 0x9933, 0x205: 0x8133, 0x206: 0x9933, 0x207: 0x9933, 0x208: 0x9933, 0x209: 0x9933, 0x20a: 0x9933, 0x20b: 0x9933, @@ -4775,49 +4775,49 @@ var nfkcValues = [6208]uint16{ 0x264: 0x8133, 0x265: 0x8133, 0x266: 0x8133, 0x267: 0x8133, 0x268: 0x8133, 0x269: 0x8133, 0x26a: 0x8133, 0x26b: 0x8133, 0x26c: 0x8133, 0x26d: 0x8133, 0x26e: 0x8133, 0x26f: 0x8133, 0x274: 0x01ee, - 0x27a: 0x43e6, + 0x27a: 0x435e, 0x27e: 0x0037, // Block 0xa, offset 0x280 - 0x284: 0x439b, 0x285: 0x45bc, - 0x286: 0x372a, 0x287: 0x00ce, 0x288: 0x3748, 0x289: 0x3754, 0x28a: 0x3766, - 0x28c: 0x3784, 0x28e: 0x3796, 0x28f: 0x37b4, 0x290: 0x3f49, 0x291: 0xa000, + 0x284: 0x4313, 0x285: 0x4534, + 0x286: 0x3548, 0x287: 0x00ce, 0x288: 0x3566, 0x289: 0x3572, 0x28a: 0x3584, + 0x28c: 0x35a2, 0x28e: 0x35b4, 0x28f: 0x35d2, 0x290: 0x3d67, 0x291: 0xa000, 0x295: 0xa000, 0x297: 0xa000, 0x299: 0xa000, 0x29f: 0xa000, 0x2a1: 0xa000, 0x2a5: 0xa000, 0x2a9: 0xa000, - 0x2aa: 0x3778, 0x2ab: 0x37a8, 0x2ac: 0x493f, 0x2ad: 0x37d8, 0x2ae: 0x4969, 0x2af: 0x37ea, - 0x2b0: 0x3fb1, 0x2b1: 0xa000, 0x2b5: 0xa000, + 0x2aa: 0x3596, 0x2ab: 0x35c6, 0x2ac: 0x492f, 0x2ad: 0x35f6, 0x2ae: 0x4959, 0x2af: 0x3608, + 0x2b0: 0x3dcf, 0x2b1: 0xa000, 0x2b5: 0xa000, 0x2b7: 0xa000, 0x2b9: 0xa000, 0x2bf: 0xa000, // Block 0xb, offset 0x2c0 0x2c1: 0xa000, 0x2c5: 0xa000, - 0x2c9: 0xa000, 0x2ca: 0x4981, 0x2cb: 0x499f, - 0x2cc: 0x3808, 0x2cd: 0x3820, 0x2ce: 0x49b7, 0x2d0: 0x0242, 0x2d1: 0x0254, - 0x2d2: 0x0230, 0x2d3: 0x444d, 0x2d4: 0x4453, 0x2d5: 0x027e, 0x2d6: 0x026c, + 0x2c9: 0xa000, 0x2ca: 0x4971, 0x2cb: 0x498f, + 0x2cc: 0x3626, 0x2cd: 0x363e, 0x2ce: 0x49a7, 0x2d0: 0x0242, 0x2d1: 0x0254, + 0x2d2: 0x0230, 0x2d3: 0x43c5, 0x2d4: 0x43cb, 0x2d5: 0x027e, 0x2d6: 0x026c, 0x2f0: 0x025a, 0x2f1: 0x026f, 0x2f2: 0x0272, 0x2f4: 0x020c, 0x2f5: 0x024b, 0x2f9: 0x022a, // Block 0xc, offset 0x300 - 0x300: 0x3862, 0x301: 0x386e, 0x303: 0x385c, - 0x306: 0xa000, 0x307: 0x384a, - 0x30c: 0x389e, 0x30d: 0x3886, 0x30e: 0x38b0, 0x310: 0xa000, + 0x300: 0x3680, 0x301: 0x368c, 0x303: 0x367a, + 0x306: 0xa000, 0x307: 0x3668, + 0x30c: 0x36bc, 0x30d: 0x36a4, 0x30e: 0x36ce, 0x310: 0xa000, 0x313: 0xa000, 0x315: 0xa000, 0x316: 0xa000, 0x317: 0xa000, - 0x318: 0xa000, 0x319: 0x3892, 0x31a: 0xa000, + 0x318: 0xa000, 0x319: 0x36b0, 0x31a: 0xa000, 0x31e: 0xa000, 0x323: 0xa000, 0x327: 0xa000, 0x32b: 0xa000, 0x32d: 0xa000, 0x330: 0xa000, 0x333: 0xa000, 0x335: 0xa000, - 0x336: 0xa000, 0x337: 0xa000, 0x338: 0xa000, 0x339: 0x3916, 0x33a: 0xa000, + 0x336: 0xa000, 0x337: 0xa000, 0x338: 0xa000, 0x339: 0x3734, 0x33a: 0xa000, 0x33e: 0xa000, // Block 0xd, offset 0x340 - 0x341: 0x3874, 0x342: 0x38f8, - 0x350: 0x3850, 0x351: 0x38d4, - 0x352: 0x3856, 0x353: 0x38da, 0x356: 0x3868, 0x357: 0x38ec, - 0x358: 0xa000, 0x359: 0xa000, 0x35a: 0x396a, 0x35b: 0x3970, 0x35c: 0x387a, 0x35d: 0x38fe, - 0x35e: 0x3880, 0x35f: 0x3904, 0x362: 0x388c, 0x363: 0x3910, - 0x364: 0x3898, 0x365: 0x391c, 0x366: 0x38a4, 0x367: 0x3928, 0x368: 0xa000, 0x369: 0xa000, - 0x36a: 0x3976, 0x36b: 0x397c, 0x36c: 0x38ce, 0x36d: 0x3952, 0x36e: 0x38aa, 0x36f: 0x392e, - 0x370: 0x38b6, 0x371: 0x393a, 0x372: 0x38bc, 0x373: 0x3940, 0x374: 0x38c2, 0x375: 0x3946, - 0x378: 0x38c8, 0x379: 0x394c, + 0x341: 0x3692, 0x342: 0x3716, + 0x350: 0x366e, 0x351: 0x36f2, + 0x352: 0x3674, 0x353: 0x36f8, 0x356: 0x3686, 0x357: 0x370a, + 0x358: 0xa000, 0x359: 0xa000, 0x35a: 0x3788, 0x35b: 0x378e, 0x35c: 0x3698, 0x35d: 0x371c, + 0x35e: 0x369e, 0x35f: 0x3722, 0x362: 0x36aa, 0x363: 0x372e, + 0x364: 0x36b6, 0x365: 0x373a, 0x366: 0x36c2, 0x367: 0x3746, 0x368: 0xa000, 0x369: 0xa000, + 0x36a: 0x3794, 0x36b: 0x379a, 0x36c: 0x36ec, 0x36d: 0x3770, 0x36e: 0x36c8, 0x36f: 0x374c, + 0x370: 0x36d4, 0x371: 0x3758, 0x372: 0x36da, 0x373: 0x375e, 0x374: 0x36e0, 0x375: 0x3764, + 0x378: 0x36e6, 0x379: 0x376a, // Block 0xe, offset 0x380 0x387: 0x1e91, 0x391: 0x812e, @@ -4850,12 +4850,12 @@ var nfkcValues = [6208]uint16{ 0x43c: 0x8133, 0x43d: 0x8133, 0x43e: 0x8133, 0x43f: 0x8133, // Block 0x11, offset 0x440 0x445: 0xa000, - 0x446: 0x2e5d, 0x447: 0xa000, 0x448: 0x2e65, 0x449: 0xa000, 0x44a: 0x2e6d, 0x44b: 0xa000, - 0x44c: 0x2e75, 0x44d: 0xa000, 0x44e: 0x2e7d, 0x451: 0xa000, - 0x452: 0x2e85, + 0x446: 0x3ee7, 0x447: 0xa000, 0x448: 0x3eef, 0x449: 0xa000, 0x44a: 0x3ef7, 0x44b: 0xa000, + 0x44c: 0x3eff, 0x44d: 0xa000, 0x44e: 0x3f07, 0x451: 0xa000, + 0x452: 0x3f0f, 0x474: 0x8103, 0x475: 0x9900, - 0x47a: 0xa000, 0x47b: 0x2e8d, - 0x47c: 0xa000, 0x47d: 0x2e95, 0x47e: 0xa000, 0x47f: 0xa000, + 0x47a: 0xa000, 0x47b: 0x3f17, + 0x47c: 0xa000, 0x47d: 0x3f1f, 0x47e: 0xa000, 0x47f: 0xa000, // Block 0x12, offset 0x480 0x480: 0x0069, 0x481: 0x006b, 0x482: 0x006f, 0x483: 0x0083, 0x484: 0x0104, 0x485: 0x0107, 0x486: 0x0506, 0x487: 0x0085, 0x488: 0x0089, 0x489: 0x008b, 0x48a: 0x011f, 0x48b: 0x0122, @@ -4887,100 +4887,100 @@ var nfkcValues = [6208]uint16{ 0x536: 0x8134, 0x537: 0x8132, 0x538: 0x8132, 0x539: 0x812e, 0x53a: 0x812d, 0x53b: 0x8133, 0x53c: 0x8135, 0x53d: 0x812e, 0x53e: 0x8133, 0x53f: 0x812e, // Block 0x15, offset 0x540 - 0x540: 0x30d8, 0x541: 0x33e4, 0x542: 0x30e2, 0x543: 0x33ee, 0x544: 0x30e7, 0x545: 0x33f3, - 0x546: 0x30ec, 0x547: 0x33f8, 0x548: 0x3a0d, 0x549: 0x3b9c, 0x54a: 0x3105, 0x54b: 0x3411, - 0x54c: 0x310f, 0x54d: 0x341b, 0x54e: 0x311e, 0x54f: 0x342a, 0x550: 0x3114, 0x551: 0x3420, - 0x552: 0x3119, 0x553: 0x3425, 0x554: 0x3a30, 0x555: 0x3bbf, 0x556: 0x3a37, 0x557: 0x3bc6, - 0x558: 0x315a, 0x559: 0x3466, 0x55a: 0x315f, 0x55b: 0x346b, 0x55c: 0x3a45, 0x55d: 0x3bd4, - 0x55e: 0x3164, 0x55f: 0x3470, 0x560: 0x3173, 0x561: 0x347f, 0x562: 0x3191, 0x563: 0x349d, - 0x564: 0x31a0, 0x565: 0x34ac, 0x566: 0x3196, 0x567: 0x34a2, 0x568: 0x31a5, 0x569: 0x34b1, - 0x56a: 0x31aa, 0x56b: 0x34b6, 0x56c: 0x31f0, 0x56d: 0x34fc, 0x56e: 0x3a4c, 0x56f: 0x3bdb, - 0x570: 0x31fa, 0x571: 0x350b, 0x572: 0x3204, 0x573: 0x3515, 0x574: 0x320e, 0x575: 0x351f, - 0x576: 0x4805, 0x577: 0x4896, 0x578: 0x3a53, 0x579: 0x3be2, 0x57a: 0x3227, 0x57b: 0x3538, - 0x57c: 0x3222, 0x57d: 0x3533, 0x57e: 0x322c, 0x57f: 0x353d, + 0x540: 0x2ef6, 0x541: 0x3202, 0x542: 0x2f00, 0x543: 0x320c, 0x544: 0x2f05, 0x545: 0x3211, + 0x546: 0x2f0a, 0x547: 0x3216, 0x548: 0x382b, 0x549: 0x39ba, 0x54a: 0x2f23, 0x54b: 0x322f, + 0x54c: 0x2f2d, 0x54d: 0x3239, 0x54e: 0x2f3c, 0x54f: 0x3248, 0x550: 0x2f32, 0x551: 0x323e, + 0x552: 0x2f37, 0x553: 0x3243, 0x554: 0x384e, 0x555: 0x39dd, 0x556: 0x3855, 0x557: 0x39e4, + 0x558: 0x2f78, 0x559: 0x3284, 0x55a: 0x2f7d, 0x55b: 0x3289, 0x55c: 0x3863, 0x55d: 0x39f2, + 0x55e: 0x2f82, 0x55f: 0x328e, 0x560: 0x2f91, 0x561: 0x329d, 0x562: 0x2faf, 0x563: 0x32bb, + 0x564: 0x2fbe, 0x565: 0x32ca, 0x566: 0x2fb4, 0x567: 0x32c0, 0x568: 0x2fc3, 0x569: 0x32cf, + 0x56a: 0x2fc8, 0x56b: 0x32d4, 0x56c: 0x300e, 0x56d: 0x331a, 0x56e: 0x386a, 0x56f: 0x39f9, + 0x570: 0x3018, 0x571: 0x3329, 0x572: 0x3022, 0x573: 0x3333, 0x574: 0x302c, 0x575: 0x333d, + 0x576: 0x47f5, 0x577: 0x4886, 0x578: 0x3871, 0x579: 0x3a00, 0x57a: 0x3045, 0x57b: 0x3356, + 0x57c: 0x3040, 0x57d: 0x3351, 0x57e: 0x304a, 0x57f: 0x335b, // Block 0x16, offset 0x580 - 0x580: 0x3231, 0x581: 0x3542, 0x582: 0x3236, 0x583: 0x3547, 0x584: 0x324a, 0x585: 0x355b, - 0x586: 0x3254, 0x587: 0x3565, 0x588: 0x3263, 0x589: 0x3574, 0x58a: 0x325e, 0x58b: 0x356f, - 0x58c: 0x3a76, 0x58d: 0x3c05, 0x58e: 0x3a84, 0x58f: 0x3c13, 0x590: 0x3a8b, 0x591: 0x3c1a, - 0x592: 0x3a92, 0x593: 0x3c21, 0x594: 0x3290, 0x595: 0x35a1, 0x596: 0x3295, 0x597: 0x35a6, - 0x598: 0x329f, 0x599: 0x35b0, 0x59a: 0x4832, 0x59b: 0x48c3, 0x59c: 0x3ad8, 0x59d: 0x3c67, - 0x59e: 0x32b8, 0x59f: 0x35c9, 0x5a0: 0x32c2, 0x5a1: 0x35d3, 0x5a2: 0x4841, 0x5a3: 0x48d2, - 0x5a4: 0x3adf, 0x5a5: 0x3c6e, 0x5a6: 0x3ae6, 0x5a7: 0x3c75, 0x5a8: 0x3aed, 0x5a9: 0x3c7c, - 0x5aa: 0x32d1, 0x5ab: 0x35e2, 0x5ac: 0x32db, 0x5ad: 0x35f1, 0x5ae: 0x32ef, 0x5af: 0x3605, - 0x5b0: 0x32ea, 0x5b1: 0x3600, 0x5b2: 0x332b, 0x5b3: 0x3641, 0x5b4: 0x333a, 0x5b5: 0x3650, - 0x5b6: 0x3335, 0x5b7: 0x364b, 0x5b8: 0x3af4, 0x5b9: 0x3c83, 0x5ba: 0x3afb, 0x5bb: 0x3c8a, - 0x5bc: 0x333f, 0x5bd: 0x3655, 0x5be: 0x3344, 0x5bf: 0x365a, + 0x580: 0x304f, 0x581: 0x3360, 0x582: 0x3054, 0x583: 0x3365, 0x584: 0x3068, 0x585: 0x3379, + 0x586: 0x3072, 0x587: 0x3383, 0x588: 0x3081, 0x589: 0x3392, 0x58a: 0x307c, 0x58b: 0x338d, + 0x58c: 0x3894, 0x58d: 0x3a23, 0x58e: 0x38a2, 0x58f: 0x3a31, 0x590: 0x38a9, 0x591: 0x3a38, + 0x592: 0x38b0, 0x593: 0x3a3f, 0x594: 0x30ae, 0x595: 0x33bf, 0x596: 0x30b3, 0x597: 0x33c4, + 0x598: 0x30bd, 0x599: 0x33ce, 0x59a: 0x4822, 0x59b: 0x48b3, 0x59c: 0x38f6, 0x59d: 0x3a85, + 0x59e: 0x30d6, 0x59f: 0x33e7, 0x5a0: 0x30e0, 0x5a1: 0x33f1, 0x5a2: 0x4831, 0x5a3: 0x48c2, + 0x5a4: 0x38fd, 0x5a5: 0x3a8c, 0x5a6: 0x3904, 0x5a7: 0x3a93, 0x5a8: 0x390b, 0x5a9: 0x3a9a, + 0x5aa: 0x30ef, 0x5ab: 0x3400, 0x5ac: 0x30f9, 0x5ad: 0x340f, 0x5ae: 0x310d, 0x5af: 0x3423, + 0x5b0: 0x3108, 0x5b1: 0x341e, 0x5b2: 0x3149, 0x5b3: 0x345f, 0x5b4: 0x3158, 0x5b5: 0x346e, + 0x5b6: 0x3153, 0x5b7: 0x3469, 0x5b8: 0x3912, 0x5b9: 0x3aa1, 0x5ba: 0x3919, 0x5bb: 0x3aa8, + 0x5bc: 0x315d, 0x5bd: 0x3473, 0x5be: 0x3162, 0x5bf: 0x3478, // Block 0x17, offset 0x5c0 - 0x5c0: 0x3349, 0x5c1: 0x365f, 0x5c2: 0x334e, 0x5c3: 0x3664, 0x5c4: 0x335d, 0x5c5: 0x3673, - 0x5c6: 0x3358, 0x5c7: 0x366e, 0x5c8: 0x3362, 0x5c9: 0x367d, 0x5ca: 0x3367, 0x5cb: 0x3682, - 0x5cc: 0x336c, 0x5cd: 0x3687, 0x5ce: 0x338a, 0x5cf: 0x36a5, 0x5d0: 0x33a3, 0x5d1: 0x36c3, - 0x5d2: 0x33b2, 0x5d3: 0x36d2, 0x5d4: 0x33b7, 0x5d5: 0x36d7, 0x5d6: 0x34bb, 0x5d7: 0x35e7, - 0x5d8: 0x3678, 0x5d9: 0x36b4, 0x5da: 0x1d10, 0x5db: 0x4418, - 0x5e0: 0x47e2, 0x5e1: 0x4873, 0x5e2: 0x30c4, 0x5e3: 0x33d0, - 0x5e4: 0x39b9, 0x5e5: 0x3b48, 0x5e6: 0x39b2, 0x5e7: 0x3b41, 0x5e8: 0x39c7, 0x5e9: 0x3b56, - 0x5ea: 0x39c0, 0x5eb: 0x3b4f, 0x5ec: 0x39ff, 0x5ed: 0x3b8e, 0x5ee: 0x39d5, 0x5ef: 0x3b64, - 0x5f0: 0x39ce, 0x5f1: 0x3b5d, 0x5f2: 0x39e3, 0x5f3: 0x3b72, 0x5f4: 0x39dc, 0x5f5: 0x3b6b, - 0x5f6: 0x3a06, 0x5f7: 0x3b95, 0x5f8: 0x47f6, 0x5f9: 0x4887, 0x5fa: 0x3141, 0x5fb: 0x344d, - 0x5fc: 0x312d, 0x5fd: 0x3439, 0x5fe: 0x3a1b, 0x5ff: 0x3baa, + 0x5c0: 0x3167, 0x5c1: 0x347d, 0x5c2: 0x316c, 0x5c3: 0x3482, 0x5c4: 0x317b, 0x5c5: 0x3491, + 0x5c6: 0x3176, 0x5c7: 0x348c, 0x5c8: 0x3180, 0x5c9: 0x349b, 0x5ca: 0x3185, 0x5cb: 0x34a0, + 0x5cc: 0x318a, 0x5cd: 0x34a5, 0x5ce: 0x31a8, 0x5cf: 0x34c3, 0x5d0: 0x31c1, 0x5d1: 0x34e1, + 0x5d2: 0x31d0, 0x5d3: 0x34f0, 0x5d4: 0x31d5, 0x5d5: 0x34f5, 0x5d6: 0x32d9, 0x5d7: 0x3405, + 0x5d8: 0x3496, 0x5d9: 0x34d2, 0x5da: 0x1d10, 0x5db: 0x4390, + 0x5e0: 0x47d2, 0x5e1: 0x4863, 0x5e2: 0x2ee2, 0x5e3: 0x31ee, + 0x5e4: 0x37d7, 0x5e5: 0x3966, 0x5e6: 0x37d0, 0x5e7: 0x395f, 0x5e8: 0x37e5, 0x5e9: 0x3974, + 0x5ea: 0x37de, 0x5eb: 0x396d, 0x5ec: 0x381d, 0x5ed: 0x39ac, 0x5ee: 0x37f3, 0x5ef: 0x3982, + 0x5f0: 0x37ec, 0x5f1: 0x397b, 0x5f2: 0x3801, 0x5f3: 0x3990, 0x5f4: 0x37fa, 0x5f5: 0x3989, + 0x5f6: 0x3824, 0x5f7: 0x39b3, 0x5f8: 0x47e6, 0x5f9: 0x4877, 0x5fa: 0x2f5f, 0x5fb: 0x326b, + 0x5fc: 0x2f4b, 0x5fd: 0x3257, 0x5fe: 0x3839, 0x5ff: 0x39c8, // Block 0x18, offset 0x600 - 0x600: 0x3a14, 0x601: 0x3ba3, 0x602: 0x3a29, 0x603: 0x3bb8, 0x604: 0x3a22, 0x605: 0x3bb1, - 0x606: 0x3a3e, 0x607: 0x3bcd, 0x608: 0x31d2, 0x609: 0x34de, 0x60a: 0x31e6, 0x60b: 0x34f2, - 0x60c: 0x4828, 0x60d: 0x48b9, 0x60e: 0x3277, 0x60f: 0x3588, 0x610: 0x3a61, 0x611: 0x3bf0, - 0x612: 0x3a5a, 0x613: 0x3be9, 0x614: 0x3a6f, 0x615: 0x3bfe, 0x616: 0x3a68, 0x617: 0x3bf7, - 0x618: 0x3aca, 0x619: 0x3c59, 0x61a: 0x3aae, 0x61b: 0x3c3d, 0x61c: 0x3aa7, 0x61d: 0x3c36, - 0x61e: 0x3abc, 0x61f: 0x3c4b, 0x620: 0x3ab5, 0x621: 0x3c44, 0x622: 0x3ac3, 0x623: 0x3c52, - 0x624: 0x3326, 0x625: 0x363c, 0x626: 0x3308, 0x627: 0x361e, 0x628: 0x3b25, 0x629: 0x3cb4, - 0x62a: 0x3b1e, 0x62b: 0x3cad, 0x62c: 0x3b33, 0x62d: 0x3cc2, 0x62e: 0x3b2c, 0x62f: 0x3cbb, - 0x630: 0x3b3a, 0x631: 0x3cc9, 0x632: 0x3371, 0x633: 0x368c, 0x634: 0x3399, 0x635: 0x36b9, - 0x636: 0x3394, 0x637: 0x36af, 0x638: 0x3380, 0x639: 0x369b, + 0x600: 0x3832, 0x601: 0x39c1, 0x602: 0x3847, 0x603: 0x39d6, 0x604: 0x3840, 0x605: 0x39cf, + 0x606: 0x385c, 0x607: 0x39eb, 0x608: 0x2ff0, 0x609: 0x32fc, 0x60a: 0x3004, 0x60b: 0x3310, + 0x60c: 0x4818, 0x60d: 0x48a9, 0x60e: 0x3095, 0x60f: 0x33a6, 0x610: 0x387f, 0x611: 0x3a0e, + 0x612: 0x3878, 0x613: 0x3a07, 0x614: 0x388d, 0x615: 0x3a1c, 0x616: 0x3886, 0x617: 0x3a15, + 0x618: 0x38e8, 0x619: 0x3a77, 0x61a: 0x38cc, 0x61b: 0x3a5b, 0x61c: 0x38c5, 0x61d: 0x3a54, + 0x61e: 0x38da, 0x61f: 0x3a69, 0x620: 0x38d3, 0x621: 0x3a62, 0x622: 0x38e1, 0x623: 0x3a70, + 0x624: 0x3144, 0x625: 0x345a, 0x626: 0x3126, 0x627: 0x343c, 0x628: 0x3943, 0x629: 0x3ad2, + 0x62a: 0x393c, 0x62b: 0x3acb, 0x62c: 0x3951, 0x62d: 0x3ae0, 0x62e: 0x394a, 0x62f: 0x3ad9, + 0x630: 0x3958, 0x631: 0x3ae7, 0x632: 0x318f, 0x633: 0x34aa, 0x634: 0x31b7, 0x635: 0x34d7, + 0x636: 0x31b2, 0x637: 0x34cd, 0x638: 0x319e, 0x639: 0x34b9, // Block 0x19, offset 0x640 - 0x640: 0x4945, 0x641: 0x494b, 0x642: 0x4a5f, 0x643: 0x4a77, 0x644: 0x4a67, 0x645: 0x4a7f, - 0x646: 0x4a6f, 0x647: 0x4a87, 0x648: 0x48eb, 0x649: 0x48f1, 0x64a: 0x49cf, 0x64b: 0x49e7, - 0x64c: 0x49d7, 0x64d: 0x49ef, 0x64e: 0x49df, 0x64f: 0x49f7, 0x650: 0x4957, 0x651: 0x495d, - 0x652: 0x3ef9, 0x653: 0x3f09, 0x654: 0x3f01, 0x655: 0x3f11, - 0x658: 0x48f7, 0x659: 0x48fd, 0x65a: 0x3e29, 0x65b: 0x3e39, 0x65c: 0x3e31, 0x65d: 0x3e41, - 0x660: 0x496f, 0x661: 0x4975, 0x662: 0x4a8f, 0x663: 0x4aa7, - 0x664: 0x4a97, 0x665: 0x4aaf, 0x666: 0x4a9f, 0x667: 0x4ab7, 0x668: 0x4903, 0x669: 0x4909, - 0x66a: 0x49ff, 0x66b: 0x4a17, 0x66c: 0x4a07, 0x66d: 0x4a1f, 0x66e: 0x4a0f, 0x66f: 0x4a27, - 0x670: 0x4987, 0x671: 0x498d, 0x672: 0x3f59, 0x673: 0x3f71, 0x674: 0x3f61, 0x675: 0x3f79, - 0x676: 0x3f69, 0x677: 0x3f81, 0x678: 0x490f, 0x679: 0x4915, 0x67a: 0x3e59, 0x67b: 0x3e71, - 0x67c: 0x3e61, 0x67d: 0x3e79, 0x67e: 0x3e69, 0x67f: 0x3e81, + 0x640: 0x4935, 0x641: 0x493b, 0x642: 0x4a4f, 0x643: 0x4a67, 0x644: 0x4a57, 0x645: 0x4a6f, + 0x646: 0x4a5f, 0x647: 0x4a77, 0x648: 0x48db, 0x649: 0x48e1, 0x64a: 0x49bf, 0x64b: 0x49d7, + 0x64c: 0x49c7, 0x64d: 0x49df, 0x64e: 0x49cf, 0x64f: 0x49e7, 0x650: 0x4947, 0x651: 0x494d, + 0x652: 0x3d17, 0x653: 0x3d27, 0x654: 0x3d1f, 0x655: 0x3d2f, + 0x658: 0x48e7, 0x659: 0x48ed, 0x65a: 0x3c47, 0x65b: 0x3c57, 0x65c: 0x3c4f, 0x65d: 0x3c5f, + 0x660: 0x495f, 0x661: 0x4965, 0x662: 0x4a7f, 0x663: 0x4a97, + 0x664: 0x4a87, 0x665: 0x4a9f, 0x666: 0x4a8f, 0x667: 0x4aa7, 0x668: 0x48f3, 0x669: 0x48f9, + 0x66a: 0x49ef, 0x66b: 0x4a07, 0x66c: 0x49f7, 0x66d: 0x4a0f, 0x66e: 0x49ff, 0x66f: 0x4a17, + 0x670: 0x4977, 0x671: 0x497d, 0x672: 0x3d77, 0x673: 0x3d8f, 0x674: 0x3d7f, 0x675: 0x3d97, + 0x676: 0x3d87, 0x677: 0x3d9f, 0x678: 0x48ff, 0x679: 0x4905, 0x67a: 0x3c77, 0x67b: 0x3c8f, + 0x67c: 0x3c7f, 0x67d: 0x3c97, 0x67e: 0x3c87, 0x67f: 0x3c9f, // Block 0x1a, offset 0x680 - 0x680: 0x4993, 0x681: 0x4999, 0x682: 0x3f89, 0x683: 0x3f99, 0x684: 0x3f91, 0x685: 0x3fa1, - 0x688: 0x491b, 0x689: 0x4921, 0x68a: 0x3e89, 0x68b: 0x3e99, - 0x68c: 0x3e91, 0x68d: 0x3ea1, 0x690: 0x49a5, 0x691: 0x49ab, - 0x692: 0x3fc1, 0x693: 0x3fd9, 0x694: 0x3fc9, 0x695: 0x3fe1, 0x696: 0x3fd1, 0x697: 0x3fe9, - 0x699: 0x4927, 0x69b: 0x3ea9, 0x69d: 0x3eb1, - 0x69f: 0x3eb9, 0x6a0: 0x49bd, 0x6a1: 0x49c3, 0x6a2: 0x4abf, 0x6a3: 0x4ad7, - 0x6a4: 0x4ac7, 0x6a5: 0x4adf, 0x6a6: 0x4acf, 0x6a7: 0x4ae7, 0x6a8: 0x492d, 0x6a9: 0x4933, - 0x6aa: 0x4a2f, 0x6ab: 0x4a47, 0x6ac: 0x4a37, 0x6ad: 0x4a4f, 0x6ae: 0x4a3f, 0x6af: 0x4a57, - 0x6b0: 0x4939, 0x6b1: 0x445f, 0x6b2: 0x37d2, 0x6b3: 0x4465, 0x6b4: 0x4963, 0x6b5: 0x446b, - 0x6b6: 0x37e4, 0x6b7: 0x4471, 0x6b8: 0x3802, 0x6b9: 0x4477, 0x6ba: 0x381a, 0x6bb: 0x447d, - 0x6bc: 0x49b1, 0x6bd: 0x4483, + 0x680: 0x4983, 0x681: 0x4989, 0x682: 0x3da7, 0x683: 0x3db7, 0x684: 0x3daf, 0x685: 0x3dbf, + 0x688: 0x490b, 0x689: 0x4911, 0x68a: 0x3ca7, 0x68b: 0x3cb7, + 0x68c: 0x3caf, 0x68d: 0x3cbf, 0x690: 0x4995, 0x691: 0x499b, + 0x692: 0x3ddf, 0x693: 0x3df7, 0x694: 0x3de7, 0x695: 0x3dff, 0x696: 0x3def, 0x697: 0x3e07, + 0x699: 0x4917, 0x69b: 0x3cc7, 0x69d: 0x3ccf, + 0x69f: 0x3cd7, 0x6a0: 0x49ad, 0x6a1: 0x49b3, 0x6a2: 0x4aaf, 0x6a3: 0x4ac7, + 0x6a4: 0x4ab7, 0x6a5: 0x4acf, 0x6a6: 0x4abf, 0x6a7: 0x4ad7, 0x6a8: 0x491d, 0x6a9: 0x4923, + 0x6aa: 0x4a1f, 0x6ab: 0x4a37, 0x6ac: 0x4a27, 0x6ad: 0x4a3f, 0x6ae: 0x4a2f, 0x6af: 0x4a47, + 0x6b0: 0x4929, 0x6b1: 0x43d7, 0x6b2: 0x35f0, 0x6b3: 0x43dd, 0x6b4: 0x4953, 0x6b5: 0x43e3, + 0x6b6: 0x3602, 0x6b7: 0x43e9, 0x6b8: 0x3620, 0x6b9: 0x43ef, 0x6ba: 0x3638, 0x6bb: 0x43f5, + 0x6bc: 0x49a1, 0x6bd: 0x43fb, // Block 0x1b, offset 0x6c0 - 0x6c0: 0x3ee1, 0x6c1: 0x3ee9, 0x6c2: 0x42c5, 0x6c3: 0x42e3, 0x6c4: 0x42cf, 0x6c5: 0x42ed, - 0x6c6: 0x42d9, 0x6c7: 0x42f7, 0x6c8: 0x3e19, 0x6c9: 0x3e21, 0x6ca: 0x4211, 0x6cb: 0x422f, - 0x6cc: 0x421b, 0x6cd: 0x4239, 0x6ce: 0x4225, 0x6cf: 0x4243, 0x6d0: 0x3f29, 0x6d1: 0x3f31, - 0x6d2: 0x4301, 0x6d3: 0x431f, 0x6d4: 0x430b, 0x6d5: 0x4329, 0x6d6: 0x4315, 0x6d7: 0x4333, - 0x6d8: 0x3e49, 0x6d9: 0x3e51, 0x6da: 0x424d, 0x6db: 0x426b, 0x6dc: 0x4257, 0x6dd: 0x4275, - 0x6de: 0x4261, 0x6df: 0x427f, 0x6e0: 0x4001, 0x6e1: 0x4009, 0x6e2: 0x433d, 0x6e3: 0x435b, - 0x6e4: 0x4347, 0x6e5: 0x4365, 0x6e6: 0x4351, 0x6e7: 0x436f, 0x6e8: 0x3ec1, 0x6e9: 0x3ec9, - 0x6ea: 0x4289, 0x6eb: 0x42a7, 0x6ec: 0x4293, 0x6ed: 0x42b1, 0x6ee: 0x429d, 0x6ef: 0x42bb, - 0x6f0: 0x37c6, 0x6f1: 0x37c0, 0x6f2: 0x3ed1, 0x6f3: 0x37cc, 0x6f4: 0x3ed9, - 0x6f6: 0x4951, 0x6f7: 0x3ef1, 0x6f8: 0x3736, 0x6f9: 0x3730, 0x6fa: 0x3724, 0x6fb: 0x442f, - 0x6fc: 0x373c, 0x6fd: 0x43c8, 0x6fe: 0x0257, 0x6ff: 0x43c8, + 0x6c0: 0x3cff, 0x6c1: 0x3d07, 0x6c2: 0x41c3, 0x6c3: 0x41e1, 0x6c4: 0x41cd, 0x6c5: 0x41eb, + 0x6c6: 0x41d7, 0x6c7: 0x41f5, 0x6c8: 0x3c37, 0x6c9: 0x3c3f, 0x6ca: 0x410f, 0x6cb: 0x412d, + 0x6cc: 0x4119, 0x6cd: 0x4137, 0x6ce: 0x4123, 0x6cf: 0x4141, 0x6d0: 0x3d47, 0x6d1: 0x3d4f, + 0x6d2: 0x41ff, 0x6d3: 0x421d, 0x6d4: 0x4209, 0x6d5: 0x4227, 0x6d6: 0x4213, 0x6d7: 0x4231, + 0x6d8: 0x3c67, 0x6d9: 0x3c6f, 0x6da: 0x414b, 0x6db: 0x4169, 0x6dc: 0x4155, 0x6dd: 0x4173, + 0x6de: 0x415f, 0x6df: 0x417d, 0x6e0: 0x3e1f, 0x6e1: 0x3e27, 0x6e2: 0x423b, 0x6e3: 0x4259, + 0x6e4: 0x4245, 0x6e5: 0x4263, 0x6e6: 0x424f, 0x6e7: 0x426d, 0x6e8: 0x3cdf, 0x6e9: 0x3ce7, + 0x6ea: 0x4187, 0x6eb: 0x41a5, 0x6ec: 0x4191, 0x6ed: 0x41af, 0x6ee: 0x419b, 0x6ef: 0x41b9, + 0x6f0: 0x35e4, 0x6f1: 0x35de, 0x6f2: 0x3cef, 0x6f3: 0x35ea, 0x6f4: 0x3cf7, + 0x6f6: 0x4941, 0x6f7: 0x3d0f, 0x6f8: 0x3554, 0x6f9: 0x354e, 0x6fa: 0x3542, 0x6fb: 0x43a7, + 0x6fc: 0x355a, 0x6fd: 0x4340, 0x6fe: 0x0257, 0x6ff: 0x4340, // Block 0x1c, offset 0x700 - 0x700: 0x43e1, 0x701: 0x45c3, 0x702: 0x3f19, 0x703: 0x37de, 0x704: 0x3f21, - 0x706: 0x497b, 0x707: 0x3f39, 0x708: 0x3742, 0x709: 0x4435, 0x70a: 0x374e, 0x70b: 0x443b, - 0x70c: 0x375a, 0x70d: 0x45ca, 0x70e: 0x45d1, 0x70f: 0x45d8, 0x710: 0x37f6, 0x711: 0x37f0, - 0x712: 0x3f41, 0x713: 0x4625, 0x716: 0x37fc, 0x717: 0x3f51, - 0x718: 0x3772, 0x719: 0x376c, 0x71a: 0x3760, 0x71b: 0x4441, 0x71d: 0x45df, - 0x71e: 0x45e6, 0x71f: 0x45ed, 0x720: 0x382c, 0x721: 0x3826, 0x722: 0x3fa9, 0x723: 0x462d, - 0x724: 0x380e, 0x725: 0x3814, 0x726: 0x3832, 0x727: 0x3fb9, 0x728: 0x37a2, 0x729: 0x379c, - 0x72a: 0x3790, 0x72b: 0x444d, 0x72c: 0x378a, 0x72d: 0x45b5, 0x72e: 0x45bc, 0x72f: 0x0081, - 0x732: 0x3ff1, 0x733: 0x3838, 0x734: 0x3ff9, - 0x736: 0x49c9, 0x737: 0x4011, 0x738: 0x377e, 0x739: 0x4447, 0x73a: 0x37ae, 0x73b: 0x4459, - 0x73c: 0x37ba, 0x73d: 0x439b, 0x73e: 0x43cd, + 0x700: 0x4359, 0x701: 0x453b, 0x702: 0x3d37, 0x703: 0x35fc, 0x704: 0x3d3f, + 0x706: 0x496b, 0x707: 0x3d57, 0x708: 0x3560, 0x709: 0x43ad, 0x70a: 0x356c, 0x70b: 0x43b3, + 0x70c: 0x3578, 0x70d: 0x4542, 0x70e: 0x4549, 0x70f: 0x4550, 0x710: 0x3614, 0x711: 0x360e, + 0x712: 0x3d5f, 0x713: 0x459d, 0x716: 0x361a, 0x717: 0x3d6f, + 0x718: 0x3590, 0x719: 0x358a, 0x71a: 0x357e, 0x71b: 0x43b9, 0x71d: 0x4557, + 0x71e: 0x455e, 0x71f: 0x4565, 0x720: 0x364a, 0x721: 0x3644, 0x722: 0x3dc7, 0x723: 0x45a5, + 0x724: 0x362c, 0x725: 0x3632, 0x726: 0x3650, 0x727: 0x3dd7, 0x728: 0x35c0, 0x729: 0x35ba, + 0x72a: 0x35ae, 0x72b: 0x43c5, 0x72c: 0x35a8, 0x72d: 0x452d, 0x72e: 0x4534, 0x72f: 0x0081, + 0x732: 0x3e0f, 0x733: 0x3656, 0x734: 0x3e17, + 0x736: 0x49b9, 0x737: 0x3e2f, 0x738: 0x359c, 0x739: 0x43bf, 0x73a: 0x35cc, 0x73b: 0x43d1, + 0x73c: 0x35d8, 0x73d: 0x4313, 0x73e: 0x4345, // Block 0x1d, offset 0x740 0x740: 0x1d08, 0x741: 0x1d0c, 0x742: 0x0047, 0x743: 0x1d84, 0x745: 0x1d18, 0x746: 0x1d1c, 0x747: 0x00ef, 0x749: 0x1d88, 0x74a: 0x008f, 0x74b: 0x0051, @@ -4989,7 +4989,7 @@ var nfkcValues = [6208]uint16{ 0x759: 0x0061, 0x75a: 0x0063, 0x75b: 0x0065, 0x75c: 0x0065, 0x75d: 0x0065, 0x760: 0x1acf, 0x761: 0x1cf8, 0x762: 0x1ad8, 0x764: 0x0075, 0x766: 0x023c, 0x768: 0x0075, - 0x76a: 0x0057, 0x76b: 0x4413, 0x76c: 0x0045, 0x76d: 0x0047, 0x76f: 0x008b, + 0x76a: 0x0057, 0x76b: 0x438b, 0x76c: 0x0045, 0x76d: 0x0047, 0x76f: 0x008b, 0x770: 0x004b, 0x771: 0x004d, 0x773: 0x005b, 0x774: 0x009f, 0x775: 0x0308, 0x776: 0x030b, 0x777: 0x030e, 0x778: 0x0311, 0x779: 0x0093, 0x77b: 0x1cc8, 0x77c: 0x026c, 0x77d: 0x0245, 0x77e: 0x01fd, 0x77f: 0x0224, @@ -5006,23 +5006,23 @@ var nfkcValues = [6208]uint16{ 0x7b6: 0x1d7c, 0x7b7: 0x1e8c, 0x7b8: 0x1b20, 0x7b9: 0x00b1, 0x7ba: 0x1b95, 0x7bb: 0x1d80, 0x7bc: 0x0099, 0x7bd: 0x0087, 0x7be: 0x0089, 0x7bf: 0x009b, // Block 0x1f, offset 0x7c0 - 0x7c1: 0x3d47, 0x7c3: 0xa000, 0x7c4: 0x3d4e, 0x7c5: 0xa000, - 0x7c7: 0x3d55, 0x7c8: 0xa000, 0x7c9: 0x3d5c, + 0x7c1: 0x3b65, 0x7c3: 0xa000, 0x7c4: 0x3b6c, 0x7c5: 0xa000, + 0x7c7: 0x3b73, 0x7c8: 0xa000, 0x7c9: 0x3b7a, 0x7cd: 0xa000, - 0x7e0: 0x30a6, 0x7e1: 0xa000, 0x7e2: 0x3d6a, + 0x7e0: 0x2ec4, 0x7e1: 0xa000, 0x7e2: 0x3b88, 0x7e4: 0xa000, 0x7e5: 0xa000, - 0x7ed: 0x3d63, 0x7ee: 0x30a1, 0x7ef: 0x30ab, - 0x7f0: 0x3d71, 0x7f1: 0x3d78, 0x7f2: 0xa000, 0x7f3: 0xa000, 0x7f4: 0x3d7f, 0x7f5: 0x3d86, - 0x7f6: 0xa000, 0x7f7: 0xa000, 0x7f8: 0x3d8d, 0x7f9: 0x3d94, 0x7fa: 0xa000, 0x7fb: 0xa000, + 0x7ed: 0x3b81, 0x7ee: 0x2ebf, 0x7ef: 0x2ec9, + 0x7f0: 0x3b8f, 0x7f1: 0x3b96, 0x7f2: 0xa000, 0x7f3: 0xa000, 0x7f4: 0x3b9d, 0x7f5: 0x3ba4, + 0x7f6: 0xa000, 0x7f7: 0xa000, 0x7f8: 0x3bab, 0x7f9: 0x3bb2, 0x7fa: 0xa000, 0x7fb: 0xa000, 0x7fc: 0xa000, 0x7fd: 0xa000, // Block 0x20, offset 0x800 - 0x800: 0x3d9b, 0x801: 0x3da2, 0x802: 0xa000, 0x803: 0xa000, 0x804: 0x3db7, 0x805: 0x3dbe, - 0x806: 0xa000, 0x807: 0xa000, 0x808: 0x3dc5, 0x809: 0x3dcc, + 0x800: 0x3bb9, 0x801: 0x3bc0, 0x802: 0xa000, 0x803: 0xa000, 0x804: 0x3bd5, 0x805: 0x3bdc, + 0x806: 0xa000, 0x807: 0xa000, 0x808: 0x3be3, 0x809: 0x3bea, 0x811: 0xa000, 0x812: 0xa000, 0x822: 0xa000, 0x828: 0xa000, 0x829: 0xa000, - 0x82b: 0xa000, 0x82c: 0x3de1, 0x82d: 0x3de8, 0x82e: 0x3def, 0x82f: 0x3df6, + 0x82b: 0xa000, 0x82c: 0x3bff, 0x82d: 0x3c06, 0x82e: 0x3c0d, 0x82f: 0x3c14, 0x832: 0xa000, 0x833: 0xa000, 0x834: 0xa000, 0x835: 0xa000, // Block 0x21, offset 0x840 0x860: 0x0023, 0x861: 0x0025, 0x862: 0x0027, 0x863: 0x0029, @@ -5081,34 +5081,34 @@ var nfkcValues = [6208]uint16{ 0x97c: 0x167e, 0x97d: 0x1682, 0x97e: 0x168a, 0x97f: 0x168e, // Block 0x26, offset 0x980 0x986: 0xa000, 0x98b: 0xa000, - 0x98c: 0x4049, 0x98d: 0xa000, 0x98e: 0x4051, 0x98f: 0xa000, 0x990: 0x4059, 0x991: 0xa000, - 0x992: 0x4061, 0x993: 0xa000, 0x994: 0x4069, 0x995: 0xa000, 0x996: 0x4071, 0x997: 0xa000, - 0x998: 0x4079, 0x999: 0xa000, 0x99a: 0x4081, 0x99b: 0xa000, 0x99c: 0x4089, 0x99d: 0xa000, - 0x99e: 0x4091, 0x99f: 0xa000, 0x9a0: 0x4099, 0x9a1: 0xa000, 0x9a2: 0x40a1, - 0x9a4: 0xa000, 0x9a5: 0x40a9, 0x9a6: 0xa000, 0x9a7: 0x40b1, 0x9a8: 0xa000, 0x9a9: 0x40b9, + 0x98c: 0x3f47, 0x98d: 0xa000, 0x98e: 0x3f4f, 0x98f: 0xa000, 0x990: 0x3f57, 0x991: 0xa000, + 0x992: 0x3f5f, 0x993: 0xa000, 0x994: 0x3f67, 0x995: 0xa000, 0x996: 0x3f6f, 0x997: 0xa000, + 0x998: 0x3f77, 0x999: 0xa000, 0x99a: 0x3f7f, 0x99b: 0xa000, 0x99c: 0x3f87, 0x99d: 0xa000, + 0x99e: 0x3f8f, 0x99f: 0xa000, 0x9a0: 0x3f97, 0x9a1: 0xa000, 0x9a2: 0x3f9f, + 0x9a4: 0xa000, 0x9a5: 0x3fa7, 0x9a6: 0xa000, 0x9a7: 0x3faf, 0x9a8: 0xa000, 0x9a9: 0x3fb7, 0x9af: 0xa000, - 0x9b0: 0x40c1, 0x9b1: 0x40c9, 0x9b2: 0xa000, 0x9b3: 0x40d1, 0x9b4: 0x40d9, 0x9b5: 0xa000, - 0x9b6: 0x40e1, 0x9b7: 0x40e9, 0x9b8: 0xa000, 0x9b9: 0x40f1, 0x9ba: 0x40f9, 0x9bb: 0xa000, - 0x9bc: 0x4101, 0x9bd: 0x4109, + 0x9b0: 0x3fbf, 0x9b1: 0x3fc7, 0x9b2: 0xa000, 0x9b3: 0x3fcf, 0x9b4: 0x3fd7, 0x9b5: 0xa000, + 0x9b6: 0x3fdf, 0x9b7: 0x3fe7, 0x9b8: 0xa000, 0x9b9: 0x3fef, 0x9ba: 0x3ff7, 0x9bb: 0xa000, + 0x9bc: 0x3fff, 0x9bd: 0x4007, // Block 0x27, offset 0x9c0 - 0x9d4: 0x4041, - 0x9d9: 0x9904, 0x9da: 0x9904, 0x9db: 0x441d, 0x9dc: 0x4423, 0x9dd: 0xa000, - 0x9de: 0x4111, 0x9df: 0x27e4, + 0x9d4: 0x3f3f, + 0x9d9: 0x9904, 0x9da: 0x9904, 0x9db: 0x4395, 0x9dc: 0x439b, 0x9dd: 0xa000, + 0x9de: 0x400f, 0x9df: 0x27e4, 0x9e6: 0xa000, - 0x9eb: 0xa000, 0x9ec: 0x4121, 0x9ed: 0xa000, 0x9ee: 0x4129, 0x9ef: 0xa000, - 0x9f0: 0x4131, 0x9f1: 0xa000, 0x9f2: 0x4139, 0x9f3: 0xa000, 0x9f4: 0x4141, 0x9f5: 0xa000, - 0x9f6: 0x4149, 0x9f7: 0xa000, 0x9f8: 0x4151, 0x9f9: 0xa000, 0x9fa: 0x4159, 0x9fb: 0xa000, - 0x9fc: 0x4161, 0x9fd: 0xa000, 0x9fe: 0x4169, 0x9ff: 0xa000, + 0x9eb: 0xa000, 0x9ec: 0x401f, 0x9ed: 0xa000, 0x9ee: 0x4027, 0x9ef: 0xa000, + 0x9f0: 0x402f, 0x9f1: 0xa000, 0x9f2: 0x4037, 0x9f3: 0xa000, 0x9f4: 0x403f, 0x9f5: 0xa000, + 0x9f6: 0x4047, 0x9f7: 0xa000, 0x9f8: 0x404f, 0x9f9: 0xa000, 0x9fa: 0x4057, 0x9fb: 0xa000, + 0x9fc: 0x405f, 0x9fd: 0xa000, 0x9fe: 0x4067, 0x9ff: 0xa000, // Block 0x28, offset 0xa00 - 0xa00: 0x4171, 0xa01: 0xa000, 0xa02: 0x4179, 0xa04: 0xa000, 0xa05: 0x4181, - 0xa06: 0xa000, 0xa07: 0x4189, 0xa08: 0xa000, 0xa09: 0x4191, - 0xa0f: 0xa000, 0xa10: 0x4199, 0xa11: 0x41a1, - 0xa12: 0xa000, 0xa13: 0x41a9, 0xa14: 0x41b1, 0xa15: 0xa000, 0xa16: 0x41b9, 0xa17: 0x41c1, - 0xa18: 0xa000, 0xa19: 0x41c9, 0xa1a: 0x41d1, 0xa1b: 0xa000, 0xa1c: 0x41d9, 0xa1d: 0x41e1, + 0xa00: 0x406f, 0xa01: 0xa000, 0xa02: 0x4077, 0xa04: 0xa000, 0xa05: 0x407f, + 0xa06: 0xa000, 0xa07: 0x4087, 0xa08: 0xa000, 0xa09: 0x408f, + 0xa0f: 0xa000, 0xa10: 0x4097, 0xa11: 0x409f, + 0xa12: 0xa000, 0xa13: 0x40a7, 0xa14: 0x40af, 0xa15: 0xa000, 0xa16: 0x40b7, 0xa17: 0x40bf, + 0xa18: 0xa000, 0xa19: 0x40c7, 0xa1a: 0x40cf, 0xa1b: 0xa000, 0xa1c: 0x40d7, 0xa1d: 0x40df, 0xa2f: 0xa000, - 0xa30: 0xa000, 0xa31: 0xa000, 0xa32: 0xa000, 0xa34: 0x4119, - 0xa37: 0x41e9, 0xa38: 0x41f1, 0xa39: 0x41f9, 0xa3a: 0x4201, - 0xa3d: 0xa000, 0xa3e: 0x4209, 0xa3f: 0x27f9, + 0xa30: 0xa000, 0xa31: 0xa000, 0xa32: 0xa000, 0xa34: 0x4017, + 0xa37: 0x40e7, 0xa38: 0x40ef, 0xa39: 0x40f7, 0xa3a: 0x40ff, + 0xa3d: 0xa000, 0xa3e: 0x4107, 0xa3f: 0x27f9, // Block 0x29, offset 0xa40 0xa40: 0x045a, 0xa41: 0x041e, 0xa42: 0x0422, 0xa43: 0x0426, 0xa44: 0x046e, 0xa45: 0x042a, 0xa46: 0x042e, 0xa47: 0x0432, 0xa48: 0x0436, 0xa49: 0x043a, 0xa4a: 0x043e, 0xa4b: 0x0442, @@ -5148,10 +5148,10 @@ var nfkcValues = [6208]uint16{ 0xb18: 0x19eb, 0xb19: 0x19ee, 0xb1a: 0x19f7, 0xb1b: 0x19fa, 0xb1c: 0x19fd, 0xb1d: 0x1a00, 0xb1e: 0x1a03, 0xb1f: 0x1a06, 0xb20: 0x0406, 0xb21: 0x040e, 0xb22: 0x0412, 0xb23: 0x041a, 0xb24: 0x041e, 0xb25: 0x0422, 0xb26: 0x042a, 0xb27: 0x0432, 0xb28: 0x0436, 0xb29: 0x043e, - 0xb2a: 0x0442, 0xb2b: 0x0446, 0xb2c: 0x044a, 0xb2d: 0x044e, 0xb2e: 0x2f59, 0xb2f: 0x2f61, - 0xb30: 0x2f69, 0xb31: 0x2f71, 0xb32: 0x2f79, 0xb33: 0x2f81, 0xb34: 0x2f89, 0xb35: 0x2f91, - 0xb36: 0x2fa1, 0xb37: 0x2fa9, 0xb38: 0x2fb1, 0xb39: 0x2fb9, 0xb3a: 0x2fc1, 0xb3b: 0x2fc9, - 0xb3c: 0x3014, 0xb3d: 0x2fdc, 0xb3e: 0x2f99, + 0xb2a: 0x0442, 0xb2b: 0x0446, 0xb2c: 0x044a, 0xb2d: 0x044e, 0xb2e: 0x467d, 0xb2f: 0x4685, + 0xb30: 0x468d, 0xb31: 0x4695, 0xb32: 0x469d, 0xb33: 0x46a5, 0xb34: 0x46ad, 0xb35: 0x46b5, + 0xb36: 0x46c5, 0xb37: 0x46cd, 0xb38: 0x46d5, 0xb39: 0x46dd, 0xb3a: 0x46e5, 0xb3b: 0x46ed, + 0xb3c: 0x2e42, 0xb3d: 0x2e0a, 0xb3e: 0x46bd, // Block 0x2d, offset 0xb40 0xb40: 0x07ba, 0xb41: 0x0816, 0xb42: 0x07c6, 0xb43: 0x0a76, 0xb44: 0x081a, 0xb45: 0x08aa, 0xb46: 0x07c2, 0xb47: 0x08a6, 0xb48: 0x0806, 0xb49: 0x0982, 0xb4a: 0x0e02, 0xb4b: 0x0f8a, @@ -5177,21 +5177,21 @@ var nfkcValues = [6208]uint16{ 0xbb6: 0x067e, 0xbb7: 0x0682, 0xbb8: 0x0686, 0xbb9: 0x068a, 0xbba: 0x068e, 0xbbb: 0x0692, 0xbbc: 0x0696, 0xbbd: 0x069a, 0xbbe: 0x069e, 0xbbf: 0x282a, // Block 0x2f, offset 0xbc0 - 0xbc0: 0x2c43, 0xbc1: 0x2adf, 0xbc2: 0x2c53, 0xbc3: 0x29b7, 0xbc4: 0x3025, 0xbc5: 0x29c1, - 0xbc6: 0x29cb, 0xbc7: 0x3069, 0xbc8: 0x2aec, 0xbc9: 0x29d5, 0xbca: 0x29df, 0xbcb: 0x29e9, - 0xbcc: 0x2b13, 0xbcd: 0x2b20, 0xbce: 0x2af9, 0xbcf: 0x2b06, 0xbd0: 0x2fea, 0xbd1: 0x2b2d, + 0xbc0: 0x2c43, 0xbc1: 0x2adf, 0xbc2: 0x2c53, 0xbc3: 0x29b7, 0xbc4: 0x2e53, 0xbc5: 0x29c1, + 0xbc6: 0x29cb, 0xbc7: 0x2e97, 0xbc8: 0x2aec, 0xbc9: 0x29d5, 0xbca: 0x29df, 0xbcb: 0x29e9, + 0xbcc: 0x2b13, 0xbcd: 0x2b20, 0xbce: 0x2af9, 0xbcf: 0x2b06, 0xbd0: 0x2e18, 0xbd1: 0x2b2d, 0xbd2: 0x2b3a, 0xbd3: 0x2cf5, 0xbd4: 0x27eb, 0xbd5: 0x2d08, 0xbd6: 0x2d1b, 0xbd7: 0x2c63, 0xbd8: 0x2b47, 0xbd9: 0x2d2e, 0xbda: 0x2d41, 0xbdb: 0x2b54, 0xbdc: 0x29f3, 0xbdd: 0x29fd, - 0xbde: 0x2ff8, 0xbdf: 0x2b61, 0xbe0: 0x2c73, 0xbe1: 0x3036, 0xbe2: 0x2a07, 0xbe3: 0x2a11, + 0xbde: 0x2e26, 0xbdf: 0x2b61, 0xbe0: 0x2c73, 0xbe1: 0x2e64, 0xbe2: 0x2a07, 0xbe3: 0x2a11, 0xbe4: 0x2b6e, 0xbe5: 0x2a1b, 0xbe6: 0x2a25, 0xbe7: 0x2800, 0xbe8: 0x2807, 0xbe9: 0x2a2f, 0xbea: 0x2a39, 0xbeb: 0x2d54, 0xbec: 0x2b7b, 0xbed: 0x2c83, 0xbee: 0x2d67, 0xbef: 0x2b88, - 0xbf0: 0x2a4d, 0xbf1: 0x2a43, 0xbf2: 0x307d, 0xbf3: 0x2b95, 0xbf4: 0x2d7a, 0xbf5: 0x2a57, - 0xbf6: 0x2c93, 0xbf7: 0x2a61, 0xbf8: 0x2baf, 0xbf9: 0x2a6b, 0xbfa: 0x2bbc, 0xbfb: 0x3047, + 0xbf0: 0x2a4d, 0xbf1: 0x2a43, 0xbf2: 0x2eab, 0xbf3: 0x2b95, 0xbf4: 0x2d7a, 0xbf5: 0x2a57, + 0xbf6: 0x2c93, 0xbf7: 0x2a61, 0xbf8: 0x2baf, 0xbf9: 0x2a6b, 0xbfa: 0x2bbc, 0xbfb: 0x2e75, 0xbfc: 0x2ba2, 0xbfd: 0x2ca3, 0xbfe: 0x2bc9, 0xbff: 0x280e, // Block 0x30, offset 0xc00 - 0xc00: 0x3058, 0xc01: 0x2a75, 0xc02: 0x2a7f, 0xc03: 0x2bd6, 0xc04: 0x2a89, 0xc05: 0x2a93, - 0xc06: 0x2a9d, 0xc07: 0x2cb3, 0xc08: 0x2be3, 0xc09: 0x2815, 0xc0a: 0x2d8d, 0xc0b: 0x2fd1, - 0xc0c: 0x2cc3, 0xc0d: 0x2bf0, 0xc0e: 0x3006, 0xc0f: 0x2aa7, 0xc10: 0x2ab1, 0xc11: 0x2bfd, + 0xc00: 0x2e86, 0xc01: 0x2a75, 0xc02: 0x2a7f, 0xc03: 0x2bd6, 0xc04: 0x2a89, 0xc05: 0x2a93, + 0xc06: 0x2a9d, 0xc07: 0x2cb3, 0xc08: 0x2be3, 0xc09: 0x2815, 0xc0a: 0x2d8d, 0xc0b: 0x2dff, + 0xc0c: 0x2cc3, 0xc0d: 0x2bf0, 0xc0e: 0x2e34, 0xc0f: 0x2aa7, 0xc10: 0x2ab1, 0xc11: 0x2bfd, 0xc12: 0x281c, 0xc13: 0x2c0a, 0xc14: 0x2cd3, 0xc15: 0x2823, 0xc16: 0x2da0, 0xc17: 0x2abb, 0xc18: 0x1de7, 0xc19: 0x1dfb, 0xc1a: 0x1e0a, 0xc1b: 0x1e19, 0xc1c: 0x1e28, 0xc1d: 0x1e37, 0xc1e: 0x1e46, 0xc1f: 0x1e55, 0xc20: 0x1e64, 0xc21: 0x1e73, 0xc22: 0x22c2, 0xc23: 0x22d4, @@ -5318,17 +5318,17 @@ var nfkcValues = [6208]uint16{ 0xec0: 0x1b05, 0xec1: 0x1b08, 0xec2: 0x1b0b, 0xec3: 0x1d38, 0xec4: 0x1d3c, 0xec5: 0x1b8f, 0xec6: 0x1b8f, 0xed3: 0x1ea5, 0xed4: 0x1e96, 0xed5: 0x1e9b, 0xed6: 0x1eaa, 0xed7: 0x1ea0, - 0xedd: 0x44d1, - 0xede: 0x8116, 0xedf: 0x4543, 0xee0: 0x0320, 0xee1: 0x0308, 0xee2: 0x0311, 0xee3: 0x0314, + 0xedd: 0x4449, + 0xede: 0x8116, 0xedf: 0x44bb, 0xee0: 0x0320, 0xee1: 0x0308, 0xee2: 0x0311, 0xee3: 0x0314, 0xee4: 0x0317, 0xee5: 0x031a, 0xee6: 0x031d, 0xee7: 0x0323, 0xee8: 0x0326, 0xee9: 0x0017, - 0xeea: 0x4531, 0xeeb: 0x4537, 0xeec: 0x4635, 0xeed: 0x463d, 0xeee: 0x4489, 0xeef: 0x448f, - 0xef0: 0x4495, 0xef1: 0x449b, 0xef2: 0x44a7, 0xef3: 0x44ad, 0xef4: 0x44b3, 0xef5: 0x44bf, - 0xef6: 0x44c5, 0xef8: 0x44cb, 0xef9: 0x44d7, 0xefa: 0x44dd, 0xefb: 0x44e3, - 0xefc: 0x44ef, 0xefe: 0x44f5, + 0xeea: 0x44a9, 0xeeb: 0x44af, 0xeec: 0x45ad, 0xeed: 0x45b5, 0xeee: 0x4401, 0xeef: 0x4407, + 0xef0: 0x440d, 0xef1: 0x4413, 0xef2: 0x441f, 0xef3: 0x4425, 0xef4: 0x442b, 0xef5: 0x4437, + 0xef6: 0x443d, 0xef8: 0x4443, 0xef9: 0x444f, 0xefa: 0x4455, 0xefb: 0x445b, + 0xefc: 0x4467, 0xefe: 0x446d, // Block 0x3c, offset 0xf00 - 0xf00: 0x44fb, 0xf01: 0x4501, 0xf03: 0x4507, 0xf04: 0x450d, - 0xf06: 0x4519, 0xf07: 0x451f, 0xf08: 0x4525, 0xf09: 0x452b, 0xf0a: 0x453d, 0xf0b: 0x44b9, - 0xf0c: 0x44a1, 0xf0d: 0x44e9, 0xf0e: 0x4513, 0xf0f: 0x1eaf, 0xf10: 0x038c, 0xf11: 0x038c, + 0xf00: 0x4473, 0xf01: 0x4479, 0xf03: 0x447f, 0xf04: 0x4485, + 0xf06: 0x4491, 0xf07: 0x4497, 0xf08: 0x449d, 0xf09: 0x44a3, 0xf0a: 0x44b5, 0xf0b: 0x4431, + 0xf0c: 0x4419, 0xf0d: 0x4461, 0xf0e: 0x448b, 0xf0f: 0x1eaf, 0xf10: 0x038c, 0xf11: 0x038c, 0xf12: 0x0395, 0xf13: 0x0395, 0xf14: 0x0395, 0xf15: 0x0395, 0xf16: 0x0398, 0xf17: 0x0398, 0xf18: 0x0398, 0xf19: 0x0398, 0xf1a: 0x039e, 0xf1b: 0x039e, 0xf1c: 0x039e, 0xf1d: 0x039e, 0xf1e: 0x0392, 0xf1f: 0x0392, 0xf20: 0x0392, 0xf21: 0x0392, 0xf22: 0x039b, 0xf23: 0x039b, @@ -5344,9 +5344,9 @@ var nfkcValues = [6208]uint16{ 0xf52: 0x03ce, 0xf53: 0x03ce, 0xf54: 0x03ce, 0xf55: 0x03ce, 0xf56: 0x03d4, 0xf57: 0x03d4, 0xf58: 0x03d4, 0xf59: 0x03d4, 0xf5a: 0x03d1, 0xf5b: 0x03d1, 0xf5c: 0x03d1, 0xf5d: 0x03d1, 0xf5e: 0x03d7, 0xf5f: 0x03d7, 0xf60: 0x03da, 0xf61: 0x03da, 0xf62: 0x03da, 0xf63: 0x03da, - 0xf64: 0x45af, 0xf65: 0x45af, 0xf66: 0x03e0, 0xf67: 0x03e0, 0xf68: 0x03e0, 0xf69: 0x03e0, + 0xf64: 0x4527, 0xf65: 0x4527, 0xf66: 0x03e0, 0xf67: 0x03e0, 0xf68: 0x03e0, 0xf69: 0x03e0, 0xf6a: 0x03dd, 0xf6b: 0x03dd, 0xf6c: 0x03dd, 0xf6d: 0x03dd, 0xf6e: 0x03fb, 0xf6f: 0x03fb, - 0xf70: 0x45a9, 0xf71: 0x45a9, + 0xf70: 0x4521, 0xf71: 0x4521, // Block 0x3e, offset 0xf80 0xf93: 0x03cb, 0xf94: 0x03cb, 0xf95: 0x03cb, 0xf96: 0x03cb, 0xf97: 0x03e9, 0xf98: 0x03e9, 0xf99: 0x03e6, 0xf9a: 0x03e6, 0xf9b: 0x03ec, 0xf9c: 0x03ec, 0xf9d: 0x217f, @@ -5373,8 +5373,8 @@ var nfkcValues = [6208]uint16{ 0x1006: 0x20e4, 0x1007: 0x20e9, 0x1008: 0x20ee, 0x1009: 0x20f3, 0x100a: 0x20f8, 0x100b: 0x20fd, 0x100c: 0x2102, 0x100d: 0x2107, 0x100e: 0x2116, 0x100f: 0x2125, 0x1010: 0x212a, 0x1011: 0x212f, 0x1012: 0x2134, 0x1013: 0x2139, 0x1014: 0x213e, 0x1015: 0x2148, 0x1016: 0x214d, 0x1017: 0x2152, - 0x1018: 0x2161, 0x1019: 0x2170, 0x101a: 0x2175, 0x101b: 0x4561, 0x101c: 0x4567, 0x101d: 0x459d, - 0x101e: 0x45f4, 0x101f: 0x45fb, 0x1020: 0x4602, 0x1021: 0x4609, 0x1022: 0x4610, 0x1023: 0x4617, + 0x1018: 0x2161, 0x1019: 0x2170, 0x101a: 0x2175, 0x101b: 0x44d9, 0x101c: 0x44df, 0x101d: 0x4515, + 0x101e: 0x456c, 0x101f: 0x4573, 0x1020: 0x457a, 0x1021: 0x4581, 0x1022: 0x4588, 0x1023: 0x458f, 0x1024: 0x26f6, 0x1025: 0x26fd, 0x1026: 0x2704, 0x1027: 0x270b, 0x1028: 0x2720, 0x1029: 0x2727, 0x102a: 0x1ec8, 0x102b: 0x1ecd, 0x102c: 0x1ed2, 0x102d: 0x1ed7, 0x102e: 0x1ee1, 0x102f: 0x1ee6, 0x1030: 0x1efa, 0x1031: 0x1eff, 0x1032: 0x1f04, 0x1033: 0x1f09, 0x1034: 0x1f13, 0x1035: 0x1f18, @@ -5383,7 +5383,7 @@ var nfkcValues = [6208]uint16{ // Block 0x41, offset 0x1040 0x1040: 0x208a, 0x1041: 0x209e, 0x1042: 0x20a3, 0x1043: 0x20a8, 0x1044: 0x20ad, 0x1045: 0x20c6, 0x1046: 0x20d0, 0x1047: 0x20d5, 0x1048: 0x20da, 0x1049: 0x20ee, 0x104a: 0x210c, 0x104b: 0x2111, - 0x104c: 0x2116, 0x104d: 0x211b, 0x104e: 0x2125, 0x104f: 0x212a, 0x1050: 0x459d, 0x1051: 0x2157, + 0x104c: 0x2116, 0x104d: 0x211b, 0x104e: 0x2125, 0x104f: 0x212a, 0x1050: 0x4515, 0x1051: 0x2157, 0x1052: 0x215c, 0x1053: 0x2161, 0x1054: 0x2166, 0x1055: 0x2170, 0x1056: 0x2175, 0x1057: 0x26e1, 0x1058: 0x26e8, 0x1059: 0x26ef, 0x105a: 0x2704, 0x105b: 0x2712, 0x105c: 0x1eb9, 0x105d: 0x1ebe, 0x105e: 0x1ec3, 0x105f: 0x1ed2, 0x1060: 0x1edc, 0x1061: 0x1eeb, 0x1062: 0x1ef0, 0x1063: 0x1ef5, @@ -5397,11 +5397,11 @@ var nfkcValues = [6208]uint16{ 0x1086: 0x2099, 0x1087: 0x209e, 0x1088: 0x20a3, 0x1089: 0x20b7, 0x108a: 0x20bc, 0x108b: 0x20c1, 0x108c: 0x20c6, 0x108d: 0x20cb, 0x108e: 0x20df, 0x108f: 0x20e4, 0x1090: 0x20e9, 0x1091: 0x20ee, 0x1092: 0x20fd, 0x1093: 0x2102, 0x1094: 0x2107, 0x1095: 0x2116, 0x1096: 0x2120, 0x1097: 0x212f, - 0x1098: 0x2134, 0x1099: 0x4591, 0x109a: 0x2148, 0x109b: 0x214d, 0x109c: 0x2152, 0x109d: 0x2161, + 0x1098: 0x2134, 0x1099: 0x4509, 0x109a: 0x2148, 0x109b: 0x214d, 0x109c: 0x2152, 0x109d: 0x2161, 0x109e: 0x216b, 0x109f: 0x2704, 0x10a0: 0x2712, 0x10a1: 0x1ed2, 0x10a2: 0x1edc, 0x10a3: 0x1f04, 0x10a4: 0x1f0e, 0x10a5: 0x1f2c, 0x10a6: 0x1f36, 0x10a7: 0x1f9a, 0x10a8: 0x1f9f, 0x10a9: 0x1fc2, 0x10aa: 0x1fc7, 0x10ab: 0x209e, 0x10ac: 0x20a3, 0x10ad: 0x20c6, 0x10ae: 0x2116, 0x10af: 0x2120, - 0x10b0: 0x2161, 0x10b1: 0x216b, 0x10b2: 0x4645, 0x10b3: 0x464d, 0x10b4: 0x4655, 0x10b5: 0x2021, + 0x10b0: 0x2161, 0x10b1: 0x216b, 0x10b2: 0x45bd, 0x10b3: 0x45c5, 0x10b4: 0x45cd, 0x10b5: 0x2021, 0x10b6: 0x2026, 0x10b7: 0x203a, 0x10b8: 0x203f, 0x10b9: 0x204e, 0x10ba: 0x2053, 0x10bb: 0x1fa4, 0x10bc: 0x1fa9, 0x10bd: 0x1fcc, 0x10be: 0x1fd1, 0x10bf: 0x1f63, // Block 0x43, offset 0x10c0 @@ -5415,7 +5415,7 @@ var nfkcValues = [6208]uint16{ 0x10ea: 0x1f95, 0x10eb: 0x1fe0, 0x10ec: 0x2003, 0x10ed: 0x1fae, 0x10ee: 0x1fb3, 0x10ef: 0x1fb8, 0x10f0: 0x1fc2, 0x10f1: 0x1f9f, 0x10f2: 0x1fc7, 0x10f3: 0x201c, 0x10f4: 0x1f86, 0x10f5: 0x1f8b, 0x10f6: 0x1f90, 0x10f7: 0x1fae, 0x10f8: 0x1fb3, 0x10f9: 0x1fb8, 0x10fa: 0x201c, 0x10fb: 0x202b, - 0x10fc: 0x4549, 0x10fd: 0x4549, + 0x10fc: 0x44c1, 0x10fd: 0x44c1, // Block 0x44, offset 0x1100 0x1110: 0x2441, 0x1111: 0x2456, 0x1112: 0x2456, 0x1113: 0x245d, 0x1114: 0x2464, 0x1115: 0x2479, 0x1116: 0x2480, 0x1117: 0x2487, @@ -5456,20 +5456,20 @@ var nfkcValues = [6208]uint16{ 0x11fc: 0x05aa, 0x11fd: 0x058e, 0x11fe: 0x0592, 0x11ff: 0x0586, // Block 0x48, offset 0x1200 0x1200: 0x058a, 0x1201: 0x0596, 0x1202: 0x059a, 0x1203: 0x059e, 0x1204: 0x05a2, - 0x1207: 0x0077, 0x1208: 0x007b, 0x1209: 0x43aa, 0x120a: 0x43aa, 0x120b: 0x43aa, - 0x120c: 0x43aa, 0x120d: 0x007f, 0x120e: 0x007f, 0x120f: 0x007f, 0x1210: 0x0019, 0x1211: 0x057e, + 0x1207: 0x0077, 0x1208: 0x007b, 0x1209: 0x4322, 0x120a: 0x4322, 0x120b: 0x4322, + 0x120c: 0x4322, 0x120d: 0x007f, 0x120e: 0x007f, 0x120f: 0x007f, 0x1210: 0x0019, 0x1211: 0x057e, 0x1212: 0x001d, 0x1214: 0x0037, 0x1215: 0x0035, 0x1216: 0x003f, 0x1217: 0x0003, 0x1218: 0x053a, 0x1219: 0x0011, 0x121a: 0x0013, 0x121b: 0x00b7, 0x121c: 0x00bb, 0x121d: 0x05b2, 0x121e: 0x05b6, 0x121f: 0x0007, 0x1220: 0x000d, 0x1221: 0x0015, 0x1222: 0x0017, 0x1223: 0x001b, 0x1224: 0x0039, 0x1225: 0x003d, 0x1226: 0x003b, 0x1228: 0x0079, 0x1229: 0x0009, 0x122a: 0x000b, 0x122b: 0x0041, - 0x1230: 0x43eb, 0x1231: 0x456d, 0x1232: 0x43f0, 0x1234: 0x43f5, - 0x1236: 0x43fa, 0x1237: 0x4573, 0x1238: 0x43ff, 0x1239: 0x4579, 0x123a: 0x4404, 0x123b: 0x457f, - 0x123c: 0x4409, 0x123d: 0x4585, 0x123e: 0x440e, 0x123f: 0x458b, + 0x1230: 0x4363, 0x1231: 0x44e5, 0x1232: 0x4368, 0x1234: 0x436d, + 0x1236: 0x4372, 0x1237: 0x44eb, 0x1238: 0x4377, 0x1239: 0x44f1, 0x123a: 0x437c, 0x123b: 0x44f7, + 0x123c: 0x4381, 0x123d: 0x44fd, 0x123e: 0x4386, 0x123f: 0x4503, // Block 0x49, offset 0x1240 - 0x1240: 0x0329, 0x1241: 0x454f, 0x1242: 0x454f, 0x1243: 0x4555, 0x1244: 0x4555, 0x1245: 0x4597, - 0x1246: 0x4597, 0x1247: 0x455b, 0x1248: 0x455b, 0x1249: 0x45a3, 0x124a: 0x45a3, 0x124b: 0x45a3, - 0x124c: 0x45a3, 0x124d: 0x032c, 0x124e: 0x032c, 0x124f: 0x032f, 0x1250: 0x032f, 0x1251: 0x032f, + 0x1240: 0x0329, 0x1241: 0x44c7, 0x1242: 0x44c7, 0x1243: 0x44cd, 0x1244: 0x44cd, 0x1245: 0x450f, + 0x1246: 0x450f, 0x1247: 0x44d3, 0x1248: 0x44d3, 0x1249: 0x451b, 0x124a: 0x451b, 0x124b: 0x451b, + 0x124c: 0x451b, 0x124d: 0x032c, 0x124e: 0x032c, 0x124f: 0x032f, 0x1250: 0x032f, 0x1251: 0x032f, 0x1252: 0x032f, 0x1253: 0x0332, 0x1254: 0x0332, 0x1255: 0x0335, 0x1256: 0x0335, 0x1257: 0x0335, 0x1258: 0x0335, 0x1259: 0x0338, 0x125a: 0x0338, 0x125b: 0x0338, 0x125c: 0x0338, 0x125d: 0x033b, 0x125e: 0x033b, 0x125f: 0x033b, 0x1260: 0x033b, 0x1261: 0x033e, 0x1262: 0x033e, 0x1263: 0x033e, @@ -5487,8 +5487,8 @@ var nfkcValues = [6208]uint16{ 0x129e: 0x0371, 0x129f: 0x0371, 0x12a0: 0x0371, 0x12a1: 0x0374, 0x12a2: 0x0374, 0x12a3: 0x0374, 0x12a4: 0x0374, 0x12a5: 0x0377, 0x12a6: 0x0377, 0x12a7: 0x0377, 0x12a8: 0x0377, 0x12a9: 0x037a, 0x12aa: 0x037a, 0x12ab: 0x037a, 0x12ac: 0x037a, 0x12ad: 0x037d, 0x12ae: 0x037d, 0x12af: 0x0380, - 0x12b0: 0x0380, 0x12b1: 0x0383, 0x12b2: 0x0383, 0x12b3: 0x0383, 0x12b4: 0x0383, 0x12b5: 0x2f41, - 0x12b6: 0x2f41, 0x12b7: 0x2f49, 0x12b8: 0x2f49, 0x12b9: 0x2f51, 0x12ba: 0x2f51, 0x12bb: 0x20b2, + 0x12b0: 0x0380, 0x12b1: 0x0383, 0x12b2: 0x0383, 0x12b3: 0x0383, 0x12b4: 0x0383, 0x12b5: 0x2de7, + 0x12b6: 0x2de7, 0x12b7: 0x2def, 0x12b8: 0x2def, 0x12b9: 0x2df7, 0x12ba: 0x2df7, 0x12bb: 0x20b2, 0x12bc: 0x20b2, // Block 0x4b, offset 0x12c0 0x12c0: 0x0081, 0x12c1: 0x0083, 0x12c2: 0x0085, 0x12c3: 0x0087, 0x12c4: 0x0089, 0x12c5: 0x008b, @@ -5520,7 +5520,7 @@ var nfkcValues = [6208]uint16{ 0x134c: 0x4b2e, 0x134d: 0x4b34, 0x134e: 0x4b3a, 0x134f: 0x4b40, 0x1352: 0x4b46, 0x1353: 0x4b4c, 0x1354: 0x4b52, 0x1355: 0x4b58, 0x1356: 0x4b5e, 0x1357: 0x4b64, 0x135a: 0x4b6a, 0x135b: 0x4b70, 0x135c: 0x4b76, - 0x1360: 0x00bf, 0x1361: 0x00c2, 0x1362: 0x00cb, 0x1363: 0x43a5, + 0x1360: 0x00bf, 0x1361: 0x00c2, 0x1362: 0x00cb, 0x1363: 0x431d, 0x1364: 0x00c8, 0x1365: 0x00c5, 0x1366: 0x053e, 0x1368: 0x0562, 0x1369: 0x0542, 0x136a: 0x0546, 0x136b: 0x054a, 0x136c: 0x054e, 0x136d: 0x0566, 0x136e: 0x056a, // Block 0x4e, offset 0x1380 @@ -5628,7 +5628,7 @@ var nfkcValues = [6208]uint16{ // Block 0x57, offset 0x15c0 0x15c0: 0x27dd, 0x15c1: 0x27f2, 0x15c2: 0x05fe, 0x15d0: 0x0d0a, 0x15d1: 0x0b42, - 0x15d2: 0x09ce, 0x15d3: 0x4705, 0x15d4: 0x0816, 0x15d5: 0x0aea, 0x15d6: 0x142a, 0x15d7: 0x0afa, + 0x15d2: 0x09ce, 0x15d3: 0x46f5, 0x15d4: 0x0816, 0x15d5: 0x0aea, 0x15d6: 0x142a, 0x15d7: 0x0afa, 0x15d8: 0x0822, 0x15d9: 0x0dd2, 0x15da: 0x0faa, 0x15db: 0x0daa, 0x15dc: 0x0922, 0x15dd: 0x0c66, 0x15de: 0x08ba, 0x15df: 0x0db2, 0x15e0: 0x090e, 0x15e1: 0x1212, 0x15e2: 0x107e, 0x15e3: 0x1486, 0x15e4: 0x0ace, 0x15e5: 0x0a06, 0x15e6: 0x0f5e, 0x15e7: 0x0d16, 0x15e8: 0x0d42, 0x15e9: 0x07ba, @@ -5863,13 +5863,13 @@ var nfkcSparseValues = [919]valueRange{ // Block 0x0, offset 0x0 {value: 0x0002, lo: 0x0d}, {value: 0x0001, lo: 0xa0, hi: 0xa0}, - {value: 0x43b9, lo: 0xa8, hi: 0xa8}, + {value: 0x4331, lo: 0xa8, hi: 0xa8}, {value: 0x0083, lo: 0xaa, hi: 0xaa}, - {value: 0x43a5, lo: 0xaf, hi: 0xaf}, + {value: 0x431d, lo: 0xaf, hi: 0xaf}, {value: 0x0025, lo: 0xb2, hi: 0xb3}, - {value: 0x439b, lo: 0xb4, hi: 0xb4}, + {value: 0x4313, lo: 0xb4, hi: 0xb4}, {value: 0x0260, lo: 0xb5, hi: 0xb5}, - {value: 0x43d2, lo: 0xb8, hi: 0xb8}, + {value: 0x434a, lo: 0xb8, hi: 0xb8}, {value: 0x0023, lo: 0xb9, hi: 0xb9}, {value: 0x009f, lo: 0xba, hi: 0xba}, {value: 0x234c, lo: 0xbc, hi: 0xbc}, @@ -5877,8 +5877,8 @@ var nfkcSparseValues = [919]valueRange{ {value: 0x23e2, lo: 0xbe, hi: 0xbe}, // Block 0x1, offset 0xe {value: 0x0091, lo: 0x03}, - {value: 0x4823, lo: 0xa0, hi: 0xa1}, - {value: 0x4855, lo: 0xaf, hi: 0xb0}, + {value: 0x4813, lo: 0xa0, hi: 0xa1}, + {value: 0x4845, lo: 0xaf, hi: 0xb0}, {value: 0xa000, lo: 0xb7, hi: 0xb7}, // Block 0x2, offset 0x12 {value: 0x0004, lo: 0x09}, @@ -5893,11 +5893,11 @@ var nfkcSparseValues = [919]valueRange{ {value: 0x00af, lo: 0xb7, hi: 0xb8}, // Block 0x3, offset 0x1c {value: 0x000a, lo: 0x09}, - {value: 0x43af, lo: 0x98, hi: 0x98}, - {value: 0x43b4, lo: 0x99, hi: 0x9a}, - {value: 0x43d7, lo: 0x9b, hi: 0x9b}, - {value: 0x43a0, lo: 0x9c, hi: 0x9c}, - {value: 0x43c3, lo: 0x9d, hi: 0x9d}, + {value: 0x4327, lo: 0x98, hi: 0x98}, + {value: 0x432c, lo: 0x99, hi: 0x9a}, + {value: 0x434f, lo: 0x9b, hi: 0x9b}, + {value: 0x4318, lo: 0x9c, hi: 0x9c}, + {value: 0x433b, lo: 0x9d, hi: 0x9d}, {value: 0x0137, lo: 0xa0, hi: 0xa0}, {value: 0x0099, lo: 0xa1, hi: 0xa1}, {value: 0x00a7, lo: 0xa2, hi: 0xa3}, @@ -5908,17 +5908,17 @@ var nfkcSparseValues = [919]valueRange{ {value: 0xa000, lo: 0x87, hi: 0x87}, {value: 0xa000, lo: 0x8b, hi: 0x8b}, {value: 0xa000, lo: 0x8d, hi: 0x8d}, - {value: 0x38e6, lo: 0x90, hi: 0x90}, - {value: 0x38f2, lo: 0x91, hi: 0x91}, - {value: 0x38e0, lo: 0x93, hi: 0x93}, + {value: 0x3704, lo: 0x90, hi: 0x90}, + {value: 0x3710, lo: 0x91, hi: 0x91}, + {value: 0x36fe, lo: 0x93, hi: 0x93}, {value: 0xa000, lo: 0x96, hi: 0x96}, - {value: 0x3958, lo: 0x97, hi: 0x97}, - {value: 0x3922, lo: 0x9c, hi: 0x9c}, - {value: 0x390a, lo: 0x9d, hi: 0x9d}, - {value: 0x3934, lo: 0x9e, hi: 0x9e}, + {value: 0x3776, lo: 0x97, hi: 0x97}, + {value: 0x3740, lo: 0x9c, hi: 0x9c}, + {value: 0x3728, lo: 0x9d, hi: 0x9d}, + {value: 0x3752, lo: 0x9e, hi: 0x9e}, {value: 0xa000, lo: 0xb4, hi: 0xb5}, - {value: 0x395e, lo: 0xb6, hi: 0xb6}, - {value: 0x3964, lo: 0xb7, hi: 0xb7}, + {value: 0x377c, lo: 0xb6, hi: 0xb6}, + {value: 0x3782, lo: 0xb7, hi: 0xb7}, // Block 0x5, offset 0x36 {value: 0x0000, lo: 0x01}, {value: 0x8133, lo: 0x83, hi: 0x87}, @@ -5934,19 +5934,19 @@ var nfkcSparseValues = [919]valueRange{ {value: 0x811a, lo: 0x98, hi: 0x98}, {value: 0x811b, lo: 0x99, hi: 0x99}, {value: 0x811c, lo: 0x9a, hi: 0x9a}, - {value: 0x3982, lo: 0xa2, hi: 0xa2}, - {value: 0x3988, lo: 0xa3, hi: 0xa3}, - {value: 0x3994, lo: 0xa4, hi: 0xa4}, - {value: 0x398e, lo: 0xa5, hi: 0xa5}, - {value: 0x399a, lo: 0xa6, hi: 0xa6}, + {value: 0x37a0, lo: 0xa2, hi: 0xa2}, + {value: 0x37a6, lo: 0xa3, hi: 0xa3}, + {value: 0x37b2, lo: 0xa4, hi: 0xa4}, + {value: 0x37ac, lo: 0xa5, hi: 0xa5}, + {value: 0x37b8, lo: 0xa6, hi: 0xa6}, {value: 0xa000, lo: 0xa7, hi: 0xa7}, // Block 0x8, offset 0x48 {value: 0x0000, lo: 0x0e}, - {value: 0x39ac, lo: 0x80, hi: 0x80}, + {value: 0x37ca, lo: 0x80, hi: 0x80}, {value: 0xa000, lo: 0x81, hi: 0x81}, - {value: 0x39a0, lo: 0x82, hi: 0x82}, + {value: 0x37be, lo: 0x82, hi: 0x82}, {value: 0xa000, lo: 0x92, hi: 0x92}, - {value: 0x39a6, lo: 0x93, hi: 0x93}, + {value: 0x37c4, lo: 0x93, hi: 0x93}, {value: 0xa000, lo: 0x95, hi: 0x95}, {value: 0x8133, lo: 0x96, hi: 0x9c}, {value: 0x8133, lo: 0x9f, hi: 0xa2}, @@ -6002,11 +6002,11 @@ var nfkcSparseValues = [919]valueRange{ // Block 0xf, offset 0x7c {value: 0x0000, lo: 0x07}, {value: 0xa000, lo: 0xa8, hi: 0xa8}, - {value: 0x4019, lo: 0xa9, hi: 0xa9}, + {value: 0x3e37, lo: 0xa9, hi: 0xa9}, {value: 0xa000, lo: 0xb0, hi: 0xb0}, - {value: 0x4021, lo: 0xb1, hi: 0xb1}, + {value: 0x3e3f, lo: 0xb1, hi: 0xb1}, {value: 0xa000, lo: 0xb3, hi: 0xb3}, - {value: 0x4029, lo: 0xb4, hi: 0xb4}, + {value: 0x3e47, lo: 0xb4, hi: 0xb4}, {value: 0x9903, lo: 0xbc, hi: 0xbc}, // Block 0x10, offset 0x84 {value: 0x0008, lo: 0x06}, @@ -6015,7 +6015,7 @@ var nfkcSparseValues = [919]valueRange{ {value: 0x812e, lo: 0x92, hi: 0x92}, {value: 0x8133, lo: 0x93, hi: 0x93}, {value: 0x8133, lo: 0x94, hi: 0x94}, - {value: 0x465d, lo: 0x98, hi: 0x9f}, + {value: 0x45d5, lo: 0x98, hi: 0x9f}, // Block 0x11, offset 0x8b {value: 0x0000, lo: 0x02}, {value: 0x8103, lo: 0xbc, hi: 0xbc}, @@ -6023,22 +6023,22 @@ var nfkcSparseValues = [919]valueRange{ // Block 0x12, offset 0x8e {value: 0x0008, lo: 0x07}, {value: 0xa000, lo: 0x87, hi: 0x87}, - {value: 0x2dd5, lo: 0x8b, hi: 0x8c}, + {value: 0x3e4f, lo: 0x8b, hi: 0x8c}, {value: 0x8105, lo: 0x8d, hi: 0x8d}, {value: 0x9900, lo: 0x97, hi: 0x97}, - {value: 0x469d, lo: 0x9c, hi: 0x9d}, - {value: 0x46ad, lo: 0x9f, hi: 0x9f}, + {value: 0x4615, lo: 0x9c, hi: 0x9d}, + {value: 0x4625, lo: 0x9f, hi: 0x9f}, {value: 0x8133, lo: 0xbe, hi: 0xbe}, // Block 0x13, offset 0x96 {value: 0x0000, lo: 0x03}, - {value: 0x46d5, lo: 0xb3, hi: 0xb3}, - {value: 0x46dd, lo: 0xb6, hi: 0xb6}, + {value: 0x464d, lo: 0xb3, hi: 0xb3}, + {value: 0x4655, lo: 0xb6, hi: 0xb6}, {value: 0x8103, lo: 0xbc, hi: 0xbc}, // Block 0x14, offset 0x9a {value: 0x0008, lo: 0x03}, {value: 0x8105, lo: 0x8d, hi: 0x8d}, - {value: 0x46b5, lo: 0x99, hi: 0x9b}, - {value: 0x46cd, lo: 0x9e, hi: 0x9e}, + {value: 0x462d, lo: 0x99, hi: 0x9b}, + {value: 0x4645, lo: 0x9e, hi: 0x9e}, // Block 0x15, offset 0x9e {value: 0x0000, lo: 0x01}, {value: 0x8103, lo: 0xbc, hi: 0xbc}, @@ -6048,30 +6048,30 @@ var nfkcSparseValues = [919]valueRange{ // Block 0x17, offset 0xa2 {value: 0x0000, lo: 0x08}, {value: 0xa000, lo: 0x87, hi: 0x87}, - {value: 0x2ded, lo: 0x88, hi: 0x88}, - {value: 0x2de5, lo: 0x8b, hi: 0x8b}, - {value: 0x2df5, lo: 0x8c, hi: 0x8c}, + {value: 0x3e67, lo: 0x88, hi: 0x88}, + {value: 0x3e5f, lo: 0x8b, hi: 0x8b}, + {value: 0x3e6f, lo: 0x8c, hi: 0x8c}, {value: 0x8105, lo: 0x8d, hi: 0x8d}, {value: 0x9900, lo: 0x96, hi: 0x97}, - {value: 0x46e5, lo: 0x9c, hi: 0x9c}, - {value: 0x46ed, lo: 0x9d, hi: 0x9d}, + {value: 0x465d, lo: 0x9c, hi: 0x9c}, + {value: 0x4665, lo: 0x9d, hi: 0x9d}, // Block 0x18, offset 0xab {value: 0x0000, lo: 0x03}, {value: 0xa000, lo: 0x92, hi: 0x92}, - {value: 0x2dfd, lo: 0x94, hi: 0x94}, + {value: 0x3e77, lo: 0x94, hi: 0x94}, {value: 0x9900, lo: 0xbe, hi: 0xbe}, // Block 0x19, offset 0xaf {value: 0x0000, lo: 0x06}, {value: 0xa000, lo: 0x86, hi: 0x87}, - {value: 0x2e05, lo: 0x8a, hi: 0x8a}, - {value: 0x2e15, lo: 0x8b, hi: 0x8b}, - {value: 0x2e0d, lo: 0x8c, hi: 0x8c}, + {value: 0x3e7f, lo: 0x8a, hi: 0x8a}, + {value: 0x3e8f, lo: 0x8b, hi: 0x8b}, + {value: 0x3e87, lo: 0x8c, hi: 0x8c}, {value: 0x8105, lo: 0x8d, hi: 0x8d}, {value: 0x9900, lo: 0x97, hi: 0x97}, // Block 0x1a, offset 0xb6 {value: 0x1801, lo: 0x04}, {value: 0xa000, lo: 0x86, hi: 0x86}, - {value: 0x4031, lo: 0x88, hi: 0x88}, + {value: 0x3e97, lo: 0x88, hi: 0x88}, {value: 0x8105, lo: 0x8d, hi: 0x8d}, {value: 0x8121, lo: 0x95, hi: 0x96}, // Block 0x1b, offset 0xbb @@ -6080,13 +6080,13 @@ var nfkcSparseValues = [919]valueRange{ {value: 0xa000, lo: 0xbf, hi: 0xbf}, // Block 0x1c, offset 0xbe {value: 0x0000, lo: 0x09}, - {value: 0x2e1d, lo: 0x80, hi: 0x80}, + {value: 0x3e9f, lo: 0x80, hi: 0x80}, {value: 0x9900, lo: 0x82, hi: 0x82}, {value: 0xa000, lo: 0x86, hi: 0x86}, - {value: 0x2e25, lo: 0x87, hi: 0x87}, - {value: 0x2e2d, lo: 0x88, hi: 0x88}, - {value: 0x3091, lo: 0x8a, hi: 0x8a}, - {value: 0x2f19, lo: 0x8b, hi: 0x8b}, + {value: 0x3ea7, lo: 0x87, hi: 0x87}, + {value: 0x3eaf, lo: 0x88, hi: 0x88}, + {value: 0x4adf, lo: 0x8a, hi: 0x8a}, + {value: 0x42f9, lo: 0x8b, hi: 0x8b}, {value: 0x8105, lo: 0x8d, hi: 0x8d}, {value: 0x9900, lo: 0x95, hi: 0x96}, // Block 0x1d, offset 0xc8 @@ -6096,20 +6096,20 @@ var nfkcSparseValues = [919]valueRange{ // Block 0x1e, offset 0xcb {value: 0x0000, lo: 0x06}, {value: 0xa000, lo: 0x86, hi: 0x87}, - {value: 0x2e35, lo: 0x8a, hi: 0x8a}, - {value: 0x2e45, lo: 0x8b, hi: 0x8b}, - {value: 0x2e3d, lo: 0x8c, hi: 0x8c}, + {value: 0x3eb7, lo: 0x8a, hi: 0x8a}, + {value: 0x3ec7, lo: 0x8b, hi: 0x8b}, + {value: 0x3ebf, lo: 0x8c, hi: 0x8c}, {value: 0x8105, lo: 0x8d, hi: 0x8d}, {value: 0x9900, lo: 0x97, hi: 0x97}, // Block 0x1f, offset 0xd2 - {value: 0x6ab3, lo: 0x07}, + {value: 0x5a29, lo: 0x07}, {value: 0x9905, lo: 0x8a, hi: 0x8a}, {value: 0x9900, lo: 0x8f, hi: 0x8f}, {value: 0xa000, lo: 0x99, hi: 0x99}, - {value: 0x4039, lo: 0x9a, hi: 0x9a}, - {value: 0x3099, lo: 0x9c, hi: 0x9c}, - {value: 0x2f24, lo: 0x9d, hi: 0x9d}, - {value: 0x2e4d, lo: 0x9e, hi: 0x9f}, + {value: 0x3ecf, lo: 0x9a, hi: 0x9a}, + {value: 0x4ae7, lo: 0x9c, hi: 0x9c}, + {value: 0x4304, lo: 0x9d, hi: 0x9d}, + {value: 0x3ed7, lo: 0x9e, hi: 0x9f}, // Block 0x20, offset 0xda {value: 0x0000, lo: 0x03}, {value: 0x2751, lo: 0xb3, hi: 0xb3}, @@ -6148,10 +6148,10 @@ var nfkcSparseValues = [919]valueRange{ {value: 0x4bc5, lo: 0xb3, hi: 0xb3}, {value: 0x8129, lo: 0xb4, hi: 0xb4}, {value: 0x4bce, lo: 0xb5, hi: 0xb5}, - {value: 0x46f5, lo: 0xb6, hi: 0xb6}, - {value: 0x4735, lo: 0xb7, hi: 0xb7}, - {value: 0x46fd, lo: 0xb8, hi: 0xb8}, - {value: 0x4740, lo: 0xb9, hi: 0xb9}, + {value: 0x466d, lo: 0xb6, hi: 0xb6}, + {value: 0x4725, lo: 0xb7, hi: 0xb7}, + {value: 0x4675, lo: 0xb8, hi: 0xb8}, + {value: 0x4730, lo: 0xb9, hi: 0xb9}, {value: 0x8128, lo: 0xba, hi: 0xbd}, // Block 0x26, offset 0xff {value: 0x0000, lo: 0x0b}, @@ -6172,7 +6172,7 @@ var nfkcSparseValues = [919]valueRange{ // Block 0x28, offset 0x10d {value: 0x0000, lo: 0x05}, {value: 0xa000, lo: 0xa5, hi: 0xa5}, - {value: 0x2e55, lo: 0xa6, hi: 0xa6}, + {value: 0x3edf, lo: 0xa6, hi: 0xa6}, {value: 0x9900, lo: 0xae, hi: 0xae}, {value: 0x8103, lo: 0xb7, hi: 0xb7}, {value: 0x8105, lo: 0xb9, hi: 0xba}, @@ -6238,10 +6238,10 @@ var nfkcSparseValues = [919]valueRange{ {value: 0x8133, lo: 0x8b, hi: 0x8e}, // Block 0x38, offset 0x140 {value: 0x0000, lo: 0x08}, - {value: 0x2e9d, lo: 0x80, hi: 0x80}, - {value: 0x2ea5, lo: 0x81, hi: 0x81}, + {value: 0x3f27, lo: 0x80, hi: 0x80}, + {value: 0x3f2f, lo: 0x81, hi: 0x81}, {value: 0xa000, lo: 0x82, hi: 0x82}, - {value: 0x2ead, lo: 0x83, hi: 0x83}, + {value: 0x3f37, lo: 0x83, hi: 0x83}, {value: 0x8105, lo: 0x84, hi: 0x84}, {value: 0x8133, lo: 0xab, hi: 0xab}, {value: 0x812e, lo: 0xac, hi: 0xac}, @@ -6284,7 +6284,7 @@ var nfkcSparseValues = [919]valueRange{ {value: 0x0000, lo: 0x0d}, {value: 0x0001, lo: 0x80, hi: 0x8a}, {value: 0x0532, lo: 0x91, hi: 0x91}, - {value: 0x43dc, lo: 0x97, hi: 0x97}, + {value: 0x4354, lo: 0x97, hi: 0x97}, {value: 0x001d, lo: 0xa4, hi: 0xa4}, {value: 0x19a0, lo: 0xa5, hi: 0xa5}, {value: 0x1c8c, lo: 0xa6, hi: 0xa6}, @@ -6294,7 +6294,7 @@ var nfkcSparseValues = [919]valueRange{ {value: 0x27c8, lo: 0xb6, hi: 0xb6}, {value: 0x293f, lo: 0xb7, hi: 0xb7}, {value: 0x199a, lo: 0xbc, hi: 0xbc}, - {value: 0x43aa, lo: 0xbe, hi: 0xbe}, + {value: 0x4322, lo: 0xbe, hi: 0xbe}, // Block 0x3f, offset 0x174 {value: 0x0002, lo: 0x0d}, {value: 0x1a60, lo: 0x87, hi: 0x87}, @@ -6348,36 +6348,36 @@ var nfkcSparseValues = [919]valueRange{ {value: 0xa000, lo: 0x90, hi: 0x90}, {value: 0xa000, lo: 0x92, hi: 0x92}, {value: 0xa000, lo: 0x94, hi: 0x94}, - {value: 0x3cfa, lo: 0x9a, hi: 0x9b}, - {value: 0x3d08, lo: 0xae, hi: 0xae}, + {value: 0x3b18, lo: 0x9a, hi: 0x9b}, + {value: 0x3b26, lo: 0xae, hi: 0xae}, // Block 0x43, offset 0x1a7 {value: 0x000e, lo: 0x05}, - {value: 0x3d0f, lo: 0x8d, hi: 0x8e}, - {value: 0x3d16, lo: 0x8f, hi: 0x8f}, + {value: 0x3b2d, lo: 0x8d, hi: 0x8e}, + {value: 0x3b34, lo: 0x8f, hi: 0x8f}, {value: 0xa000, lo: 0x90, hi: 0x90}, {value: 0xa000, lo: 0x92, hi: 0x92}, {value: 0xa000, lo: 0x94, hi: 0x94}, // Block 0x44, offset 0x1ad {value: 0x017a, lo: 0x0e}, {value: 0xa000, lo: 0x83, hi: 0x83}, - {value: 0x3d24, lo: 0x84, hi: 0x84}, + {value: 0x3b42, lo: 0x84, hi: 0x84}, {value: 0xa000, lo: 0x88, hi: 0x88}, - {value: 0x3d2b, lo: 0x89, hi: 0x89}, + {value: 0x3b49, lo: 0x89, hi: 0x89}, {value: 0xa000, lo: 0x8b, hi: 0x8b}, - {value: 0x3d32, lo: 0x8c, hi: 0x8c}, + {value: 0x3b50, lo: 0x8c, hi: 0x8c}, {value: 0xa000, lo: 0xa3, hi: 0xa3}, - {value: 0x3d39, lo: 0xa4, hi: 0xa4}, + {value: 0x3b57, lo: 0xa4, hi: 0xa4}, {value: 0xa000, lo: 0xa5, hi: 0xa5}, - {value: 0x3d40, lo: 0xa6, hi: 0xa6}, + {value: 0x3b5e, lo: 0xa6, hi: 0xa6}, {value: 0x27cf, lo: 0xac, hi: 0xad}, {value: 0x27d6, lo: 0xaf, hi: 0xaf}, {value: 0x2953, lo: 0xb0, hi: 0xb0}, {value: 0xa000, lo: 0xbc, hi: 0xbc}, // Block 0x45, offset 0x1bc {value: 0x0007, lo: 0x03}, - {value: 0x3da9, lo: 0xa0, hi: 0xa1}, - {value: 0x3dd3, lo: 0xa2, hi: 0xa3}, - {value: 0x3dfd, lo: 0xaa, hi: 0xad}, + {value: 0x3bc7, lo: 0xa0, hi: 0xa1}, + {value: 0x3bf1, lo: 0xa2, hi: 0xa3}, + {value: 0x3c1b, lo: 0xaa, hi: 0xad}, // Block 0x46, offset 0x1c0 {value: 0x0004, lo: 0x01}, {value: 0x0586, lo: 0xa9, hi: 0xaa}, @@ -6395,7 +6395,7 @@ var nfkcSparseValues = [919]valueRange{ {value: 0x1a5a, lo: 0xb5, hi: 0xb6}, // Block 0x4a, offset 0x1cb {value: 0x0000, lo: 0x01}, - {value: 0x461e, lo: 0x9c, hi: 0x9c}, + {value: 0x4596, lo: 0x9c, hi: 0x9c}, // Block 0x4b, offset 0x1cd {value: 0x0000, lo: 0x02}, {value: 0x0095, lo: 0xbc, hi: 0xbc}, @@ -6621,18 +6621,18 @@ var nfkcSparseValues = [919]valueRange{ // Block 0x77, offset 0x27f {value: 0x17fe, lo: 0x07}, {value: 0xa000, lo: 0x99, hi: 0x99}, - {value: 0x4379, lo: 0x9a, hi: 0x9a}, + {value: 0x4277, lo: 0x9a, hi: 0x9a}, {value: 0xa000, lo: 0x9b, hi: 0x9b}, - {value: 0x4383, lo: 0x9c, hi: 0x9c}, + {value: 0x4281, lo: 0x9c, hi: 0x9c}, {value: 0xa000, lo: 0xa5, hi: 0xa5}, - {value: 0x438d, lo: 0xab, hi: 0xab}, + {value: 0x428b, lo: 0xab, hi: 0xab}, {value: 0x8105, lo: 0xb9, hi: 0xba}, // Block 0x78, offset 0x287 {value: 0x0000, lo: 0x06}, {value: 0x8133, lo: 0x80, hi: 0x82}, {value: 0x9900, lo: 0xa7, hi: 0xa7}, - {value: 0x2eb5, lo: 0xae, hi: 0xae}, - {value: 0x2ebf, lo: 0xaf, hi: 0xaf}, + {value: 0x4295, lo: 0xae, hi: 0xae}, + {value: 0x429f, lo: 0xaf, hi: 0xaf}, {value: 0xa000, lo: 0xb1, hi: 0xb2}, {value: 0x8105, lo: 0xb3, hi: 0xb4}, // Block 0x79, offset 0x28e @@ -6653,8 +6653,8 @@ var nfkcSparseValues = [919]valueRange{ // Block 0x7d, offset 0x299 {value: 0x0000, lo: 0x07}, {value: 0xa000, lo: 0x87, hi: 0x87}, - {value: 0x2ec9, lo: 0x8b, hi: 0x8b}, - {value: 0x2ed3, lo: 0x8c, hi: 0x8c}, + {value: 0x42a9, lo: 0x8b, hi: 0x8b}, + {value: 0x42b3, lo: 0x8c, hi: 0x8c}, {value: 0x8105, lo: 0x8d, hi: 0x8d}, {value: 0x9900, lo: 0x97, hi: 0x97}, {value: 0x8133, lo: 0xa6, hi: 0xac}, @@ -6665,13 +6665,13 @@ var nfkcSparseValues = [919]valueRange{ {value: 0x8103, lo: 0x86, hi: 0x86}, {value: 0x8133, lo: 0x9e, hi: 0x9e}, // Block 0x7f, offset 0x2a5 - {value: 0x6a23, lo: 0x06}, + {value: 0x5643, lo: 0x06}, {value: 0x9900, lo: 0xb0, hi: 0xb0}, {value: 0xa000, lo: 0xb9, hi: 0xb9}, {value: 0x9900, lo: 0xba, hi: 0xba}, - {value: 0x2ee7, lo: 0xbb, hi: 0xbb}, - {value: 0x2edd, lo: 0xbc, hi: 0xbd}, - {value: 0x2ef1, lo: 0xbe, hi: 0xbe}, + {value: 0x42c7, lo: 0xbb, hi: 0xbb}, + {value: 0x42bd, lo: 0xbc, hi: 0xbd}, + {value: 0x42d1, lo: 0xbe, hi: 0xbe}, // Block 0x80, offset 0x2ac {value: 0x0000, lo: 0x02}, {value: 0x8105, lo: 0x82, hi: 0x82}, @@ -6680,8 +6680,8 @@ var nfkcSparseValues = [919]valueRange{ {value: 0x0000, lo: 0x05}, {value: 0x9900, lo: 0xaf, hi: 0xaf}, {value: 0xa000, lo: 0xb8, hi: 0xb9}, - {value: 0x2efb, lo: 0xba, hi: 0xba}, - {value: 0x2f05, lo: 0xbb, hi: 0xbb}, + {value: 0x42db, lo: 0xba, hi: 0xba}, + {value: 0x42e5, lo: 0xbb, hi: 0xbb}, {value: 0x8105, lo: 0xbf, hi: 0xbf}, // Block 0x82, offset 0x2b5 {value: 0x0000, lo: 0x01}, @@ -6704,7 +6704,7 @@ var nfkcSparseValues = [919]valueRange{ {value: 0x0000, lo: 0x04}, {value: 0x9900, lo: 0xb0, hi: 0xb0}, {value: 0xa000, lo: 0xb5, hi: 0xb5}, - {value: 0x2f0f, lo: 0xb8, hi: 0xb8}, + {value: 0x42ef, lo: 0xb8, hi: 0xb8}, {value: 0x8105, lo: 0xbd, hi: 0xbe}, // Block 0x88, offset 0x2c6 {value: 0x0000, lo: 0x01}, @@ -6745,13 +6745,13 @@ var nfkcSparseValues = [919]valueRange{ {value: 0x8101, lo: 0x9e, hi: 0x9e}, // Block 0x94, offset 0x2df {value: 0x0000, lo: 0x0c}, - {value: 0x470d, lo: 0x9e, hi: 0x9e}, - {value: 0x4717, lo: 0x9f, hi: 0x9f}, - {value: 0x474b, lo: 0xa0, hi: 0xa0}, - {value: 0x4759, lo: 0xa1, hi: 0xa1}, - {value: 0x4767, lo: 0xa2, hi: 0xa2}, - {value: 0x4775, lo: 0xa3, hi: 0xa3}, - {value: 0x4783, lo: 0xa4, hi: 0xa4}, + {value: 0x46fd, lo: 0x9e, hi: 0x9e}, + {value: 0x4707, lo: 0x9f, hi: 0x9f}, + {value: 0x473b, lo: 0xa0, hi: 0xa0}, + {value: 0x4749, lo: 0xa1, hi: 0xa1}, + {value: 0x4757, lo: 0xa2, hi: 0xa2}, + {value: 0x4765, lo: 0xa3, hi: 0xa3}, + {value: 0x4773, lo: 0xa4, hi: 0xa4}, {value: 0x812c, lo: 0xa5, hi: 0xa6}, {value: 0x8101, lo: 0xa7, hi: 0xa9}, {value: 0x8131, lo: 0xad, hi: 0xad}, @@ -6763,14 +6763,14 @@ var nfkcSparseValues = [919]valueRange{ {value: 0x8133, lo: 0x85, hi: 0x89}, {value: 0x812e, lo: 0x8a, hi: 0x8b}, {value: 0x8133, lo: 0xaa, hi: 0xad}, - {value: 0x4721, lo: 0xbb, hi: 0xbb}, - {value: 0x472b, lo: 0xbc, hi: 0xbc}, - {value: 0x4791, lo: 0xbd, hi: 0xbd}, - {value: 0x47ad, lo: 0xbe, hi: 0xbe}, - {value: 0x479f, lo: 0xbf, hi: 0xbf}, + {value: 0x4711, lo: 0xbb, hi: 0xbb}, + {value: 0x471b, lo: 0xbc, hi: 0xbc}, + {value: 0x4781, lo: 0xbd, hi: 0xbd}, + {value: 0x479d, lo: 0xbe, hi: 0xbe}, + {value: 0x478f, lo: 0xbf, hi: 0xbf}, // Block 0x96, offset 0x2f6 {value: 0x0000, lo: 0x01}, - {value: 0x47bb, lo: 0x80, hi: 0x80}, + {value: 0x47ab, lo: 0x80, hi: 0x80}, // Block 0x97, offset 0x2f8 {value: 0x0000, lo: 0x01}, {value: 0x8133, lo: 0x82, hi: 0x84}, diff --git a/vendor/golang.org/x/text/unicode/norm/tables13.0.0.go b/vendor/golang.org/x/text/unicode/norm/tables17.0.0.go similarity index 53% rename from vendor/golang.org/x/text/unicode/norm/tables13.0.0.go rename to vendor/golang.org/x/text/unicode/norm/tables17.0.0.go index 0cceffd731..dfd555fc1b 100644 --- a/vendor/golang.org/x/text/unicode/norm/tables13.0.0.go +++ b/vendor/golang.org/x/text/unicode/norm/tables17.0.0.go @@ -1,6 +1,6 @@ // Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. -//go:build go1.16 && !go1.21 +//go:build go1.27 package norm @@ -8,7 +8,7 @@ import "sync" const ( // Version is the Unicode edition from which the tables are derived. - Version = "13.0.0" + Version = "17.0.0" // MaxTransformChunkSize indicates the maximum number of bytes that Transform // may need to write atomically for any Form. Making a destination buffer at @@ -28,17 +28,17 @@ var ccc = [56]uint8{ } const ( - firstMulti = 0x1870 - firstCCC = 0x2CAB - endMulti = 0x2F77 - firstLeadingCCC = 0x49C5 - firstCCCZeroExcept = 0x4A8F - firstStarterWithNLead = 0x4AB6 - lastDecomp = 0x4AB8 + firstMulti = 0x199A + firstCCC = 0x2DD5 + endMulti = 0x2EBF + firstLeadingCCC = 0x4B3F + firstCCCZeroExcept = 0x4C99 + firstStarterWithNLead = 0x4CC0 + lastDecomp = 0x4CC2 maxDecomp = 0x8000 ) -// decomps: 19128 bytes +// decomps: 19650 bytes var decomps = [...]byte{ // Bytes 0 - 3f 0x00, 0x41, 0x20, 0x41, 0x21, 0x41, 0x22, 0x41, @@ -70,140 +70,175 @@ var decomps = [...]byte{ // Bytes c0 - ff 0xC2, 0xA2, 0x42, 0xC2, 0xA3, 0x42, 0xC2, 0xA5, 0x42, 0xC2, 0xA6, 0x42, 0xC2, 0xAC, 0x42, 0xC2, - 0xB7, 0x42, 0xC3, 0x86, 0x42, 0xC3, 0xB0, 0x42, - 0xC4, 0xA6, 0x42, 0xC4, 0xA7, 0x42, 0xC4, 0xB1, - 0x42, 0xC5, 0x8B, 0x42, 0xC5, 0x93, 0x42, 0xC6, - 0x8E, 0x42, 0xC6, 0x90, 0x42, 0xC6, 0xAB, 0x42, - 0xC8, 0xA2, 0x42, 0xC8, 0xB7, 0x42, 0xC9, 0x90, - 0x42, 0xC9, 0x91, 0x42, 0xC9, 0x92, 0x42, 0xC9, + 0xB7, 0x42, 0xC3, 0x86, 0x42, 0xC3, 0xA6, 0x42, + 0xC3, 0xB0, 0x42, 0xC3, 0xB8, 0x42, 0xC4, 0xA6, + 0x42, 0xC4, 0xA7, 0x42, 0xC4, 0xB1, 0x42, 0xC5, + 0x8B, 0x42, 0xC5, 0x93, 0x42, 0xC6, 0x8E, 0x42, + 0xC6, 0x90, 0x42, 0xC6, 0xAB, 0x42, 0xC7, 0x80, + 0x42, 0xC7, 0x81, 0x42, 0xC7, 0x82, 0x42, 0xC8, // Bytes 100 - 13f - 0x94, 0x42, 0xC9, 0x95, 0x42, 0xC9, 0x99, 0x42, - 0xC9, 0x9B, 0x42, 0xC9, 0x9C, 0x42, 0xC9, 0x9F, - 0x42, 0xC9, 0xA1, 0x42, 0xC9, 0xA3, 0x42, 0xC9, - 0xA5, 0x42, 0xC9, 0xA6, 0x42, 0xC9, 0xA8, 0x42, - 0xC9, 0xA9, 0x42, 0xC9, 0xAA, 0x42, 0xC9, 0xAB, - 0x42, 0xC9, 0xAD, 0x42, 0xC9, 0xAF, 0x42, 0xC9, + 0xA2, 0x42, 0xC8, 0xB7, 0x42, 0xC9, 0x90, 0x42, + 0xC9, 0x91, 0x42, 0xC9, 0x92, 0x42, 0xC9, 0x93, + 0x42, 0xC9, 0x94, 0x42, 0xC9, 0x95, 0x42, 0xC9, + 0x96, 0x42, 0xC9, 0x97, 0x42, 0xC9, 0x98, 0x42, + 0xC9, 0x99, 0x42, 0xC9, 0x9B, 0x42, 0xC9, 0x9C, + 0x42, 0xC9, 0x9E, 0x42, 0xC9, 0x9F, 0x42, 0xC9, + 0xA0, 0x42, 0xC9, 0xA1, 0x42, 0xC9, 0xA2, 0x42, + 0xC9, 0xA3, 0x42, 0xC9, 0xA4, 0x42, 0xC9, 0xA5, + // Bytes 140 - 17f + 0x42, 0xC9, 0xA6, 0x42, 0xC9, 0xA7, 0x42, 0xC9, + 0xA8, 0x42, 0xC9, 0xA9, 0x42, 0xC9, 0xAA, 0x42, + 0xC9, 0xAB, 0x42, 0xC9, 0xAC, 0x42, 0xC9, 0xAD, + 0x42, 0xC9, 0xAE, 0x42, 0xC9, 0xAF, 0x42, 0xC9, 0xB0, 0x42, 0xC9, 0xB1, 0x42, 0xC9, 0xB2, 0x42, 0xC9, 0xB3, 0x42, 0xC9, 0xB4, 0x42, 0xC9, 0xB5, - // Bytes 140 - 17f - 0x42, 0xC9, 0xB8, 0x42, 0xC9, 0xB9, 0x42, 0xC9, - 0xBB, 0x42, 0xCA, 0x81, 0x42, 0xCA, 0x82, 0x42, - 0xCA, 0x83, 0x42, 0xCA, 0x89, 0x42, 0xCA, 0x8A, - 0x42, 0xCA, 0x8B, 0x42, 0xCA, 0x8C, 0x42, 0xCA, - 0x8D, 0x42, 0xCA, 0x90, 0x42, 0xCA, 0x91, 0x42, - 0xCA, 0x92, 0x42, 0xCA, 0x95, 0x42, 0xCA, 0x9D, - 0x42, 0xCA, 0x9F, 0x42, 0xCA, 0xB9, 0x42, 0xCE, - 0x91, 0x42, 0xCE, 0x92, 0x42, 0xCE, 0x93, 0x42, + 0x42, 0xC9, 0xB6, 0x42, 0xC9, 0xB7, 0x42, 0xC9, + 0xB8, 0x42, 0xC9, 0xB9, 0x42, 0xC9, 0xBA, 0x42, // Bytes 180 - 1bf - 0xCE, 0x94, 0x42, 0xCE, 0x95, 0x42, 0xCE, 0x96, - 0x42, 0xCE, 0x97, 0x42, 0xCE, 0x98, 0x42, 0xCE, - 0x99, 0x42, 0xCE, 0x9A, 0x42, 0xCE, 0x9B, 0x42, - 0xCE, 0x9C, 0x42, 0xCE, 0x9D, 0x42, 0xCE, 0x9E, - 0x42, 0xCE, 0x9F, 0x42, 0xCE, 0xA0, 0x42, 0xCE, - 0xA1, 0x42, 0xCE, 0xA3, 0x42, 0xCE, 0xA4, 0x42, - 0xCE, 0xA5, 0x42, 0xCE, 0xA6, 0x42, 0xCE, 0xA7, - 0x42, 0xCE, 0xA8, 0x42, 0xCE, 0xA9, 0x42, 0xCE, + 0xC9, 0xBB, 0x42, 0xC9, 0xBD, 0x42, 0xC9, 0xBE, + 0x42, 0xCA, 0x80, 0x42, 0xCA, 0x81, 0x42, 0xCA, + 0x82, 0x42, 0xCA, 0x83, 0x42, 0xCA, 0x84, 0x42, + 0xCA, 0x88, 0x42, 0xCA, 0x89, 0x42, 0xCA, 0x8A, + 0x42, 0xCA, 0x8B, 0x42, 0xCA, 0x8C, 0x42, 0xCA, + 0x8D, 0x42, 0xCA, 0x8E, 0x42, 0xCA, 0x8F, 0x42, + 0xCA, 0x90, 0x42, 0xCA, 0x91, 0x42, 0xCA, 0x92, + 0x42, 0xCA, 0x95, 0x42, 0xCA, 0x98, 0x42, 0xCA, // Bytes 1c0 - 1ff - 0xB1, 0x42, 0xCE, 0xB2, 0x42, 0xCE, 0xB3, 0x42, - 0xCE, 0xB4, 0x42, 0xCE, 0xB5, 0x42, 0xCE, 0xB6, - 0x42, 0xCE, 0xB7, 0x42, 0xCE, 0xB8, 0x42, 0xCE, - 0xB9, 0x42, 0xCE, 0xBA, 0x42, 0xCE, 0xBB, 0x42, - 0xCE, 0xBC, 0x42, 0xCE, 0xBD, 0x42, 0xCE, 0xBE, - 0x42, 0xCE, 0xBF, 0x42, 0xCF, 0x80, 0x42, 0xCF, - 0x81, 0x42, 0xCF, 0x82, 0x42, 0xCF, 0x83, 0x42, - 0xCF, 0x84, 0x42, 0xCF, 0x85, 0x42, 0xCF, 0x86, + 0x99, 0x42, 0xCA, 0x9B, 0x42, 0xCA, 0x9C, 0x42, + 0xCA, 0x9D, 0x42, 0xCA, 0x9F, 0x42, 0xCA, 0xA1, + 0x42, 0xCA, 0xA2, 0x42, 0xCA, 0xA3, 0x42, 0xCA, + 0xA4, 0x42, 0xCA, 0xA5, 0x42, 0xCA, 0xA6, 0x42, + 0xCA, 0xA7, 0x42, 0xCA, 0xA8, 0x42, 0xCA, 0xA9, + 0x42, 0xCA, 0xAA, 0x42, 0xCA, 0xAB, 0x42, 0xCA, + 0xB9, 0x42, 0xCB, 0x90, 0x42, 0xCB, 0x91, 0x42, + 0xCE, 0x91, 0x42, 0xCE, 0x92, 0x42, 0xCE, 0x93, // Bytes 200 - 23f - 0x42, 0xCF, 0x87, 0x42, 0xCF, 0x88, 0x42, 0xCF, - 0x89, 0x42, 0xCF, 0x9C, 0x42, 0xCF, 0x9D, 0x42, - 0xD0, 0xBD, 0x42, 0xD1, 0x8A, 0x42, 0xD1, 0x8C, + 0x42, 0xCE, 0x94, 0x42, 0xCE, 0x95, 0x42, 0xCE, + 0x96, 0x42, 0xCE, 0x97, 0x42, 0xCE, 0x98, 0x42, + 0xCE, 0x99, 0x42, 0xCE, 0x9A, 0x42, 0xCE, 0x9B, + 0x42, 0xCE, 0x9C, 0x42, 0xCE, 0x9D, 0x42, 0xCE, + 0x9E, 0x42, 0xCE, 0x9F, 0x42, 0xCE, 0xA0, 0x42, + 0xCE, 0xA1, 0x42, 0xCE, 0xA3, 0x42, 0xCE, 0xA4, + 0x42, 0xCE, 0xA5, 0x42, 0xCE, 0xA6, 0x42, 0xCE, + 0xA7, 0x42, 0xCE, 0xA8, 0x42, 0xCE, 0xA9, 0x42, + // Bytes 240 - 27f + 0xCE, 0xB1, 0x42, 0xCE, 0xB2, 0x42, 0xCE, 0xB3, + 0x42, 0xCE, 0xB4, 0x42, 0xCE, 0xB5, 0x42, 0xCE, + 0xB6, 0x42, 0xCE, 0xB7, 0x42, 0xCE, 0xB8, 0x42, + 0xCE, 0xB9, 0x42, 0xCE, 0xBA, 0x42, 0xCE, 0xBB, + 0x42, 0xCE, 0xBC, 0x42, 0xCE, 0xBD, 0x42, 0xCE, + 0xBE, 0x42, 0xCE, 0xBF, 0x42, 0xCF, 0x80, 0x42, + 0xCF, 0x81, 0x42, 0xCF, 0x82, 0x42, 0xCF, 0x83, + 0x42, 0xCF, 0x84, 0x42, 0xCF, 0x85, 0x42, 0xCF, + // Bytes 280 - 2bf + 0x86, 0x42, 0xCF, 0x87, 0x42, 0xCF, 0x88, 0x42, + 0xCF, 0x89, 0x42, 0xCF, 0x9C, 0x42, 0xCF, 0x9D, + 0x42, 0xD0, 0xB0, 0x42, 0xD0, 0xB1, 0x42, 0xD0, + 0xB2, 0x42, 0xD0, 0xB3, 0x42, 0xD0, 0xB4, 0x42, + 0xD0, 0xB5, 0x42, 0xD0, 0xB6, 0x42, 0xD0, 0xB7, + 0x42, 0xD0, 0xB8, 0x42, 0xD0, 0xBA, 0x42, 0xD0, + 0xBB, 0x42, 0xD0, 0xBC, 0x42, 0xD0, 0xBD, 0x42, + 0xD0, 0xBE, 0x42, 0xD0, 0xBF, 0x42, 0xD1, 0x80, + // Bytes 2c0 - 2ff + 0x42, 0xD1, 0x81, 0x42, 0xD1, 0x82, 0x42, 0xD1, + 0x83, 0x42, 0xD1, 0x84, 0x42, 0xD1, 0x85, 0x42, + 0xD1, 0x86, 0x42, 0xD1, 0x87, 0x42, 0xD1, 0x88, + 0x42, 0xD1, 0x8A, 0x42, 0xD1, 0x8B, 0x42, 0xD1, + 0x8C, 0x42, 0xD1, 0x8D, 0x42, 0xD1, 0x8E, 0x42, + 0xD1, 0x95, 0x42, 0xD1, 0x96, 0x42, 0xD1, 0x98, + 0x42, 0xD1, 0x9F, 0x42, 0xD2, 0x91, 0x42, 0xD2, + 0xAB, 0x42, 0xD2, 0xAF, 0x42, 0xD2, 0xB1, 0x42, + // Bytes 300 - 33f + 0xD3, 0x8F, 0x42, 0xD3, 0x99, 0x42, 0xD3, 0xA9, 0x42, 0xD7, 0x90, 0x42, 0xD7, 0x91, 0x42, 0xD7, 0x92, 0x42, 0xD7, 0x93, 0x42, 0xD7, 0x94, 0x42, 0xD7, 0x9B, 0x42, 0xD7, 0x9C, 0x42, 0xD7, 0x9D, 0x42, 0xD7, 0xA2, 0x42, 0xD7, 0xA8, 0x42, 0xD7, 0xAA, 0x42, 0xD8, 0xA1, 0x42, 0xD8, 0xA7, 0x42, - // Bytes 240 - 27f 0xD8, 0xA8, 0x42, 0xD8, 0xA9, 0x42, 0xD8, 0xAA, 0x42, 0xD8, 0xAB, 0x42, 0xD8, 0xAC, 0x42, 0xD8, + // Bytes 340 - 37f 0xAD, 0x42, 0xD8, 0xAE, 0x42, 0xD8, 0xAF, 0x42, 0xD8, 0xB0, 0x42, 0xD8, 0xB1, 0x42, 0xD8, 0xB2, 0x42, 0xD8, 0xB3, 0x42, 0xD8, 0xB4, 0x42, 0xD8, 0xB5, 0x42, 0xD8, 0xB6, 0x42, 0xD8, 0xB7, 0x42, 0xD8, 0xB8, 0x42, 0xD8, 0xB9, 0x42, 0xD8, 0xBA, 0x42, 0xD9, 0x81, 0x42, 0xD9, 0x82, 0x42, 0xD9, - // Bytes 280 - 2bf 0x83, 0x42, 0xD9, 0x84, 0x42, 0xD9, 0x85, 0x42, 0xD9, 0x86, 0x42, 0xD9, 0x87, 0x42, 0xD9, 0x88, + // Bytes 380 - 3bf 0x42, 0xD9, 0x89, 0x42, 0xD9, 0x8A, 0x42, 0xD9, 0xAE, 0x42, 0xD9, 0xAF, 0x42, 0xD9, 0xB1, 0x42, 0xD9, 0xB9, 0x42, 0xD9, 0xBA, 0x42, 0xD9, 0xBB, 0x42, 0xD9, 0xBE, 0x42, 0xD9, 0xBF, 0x42, 0xDA, 0x80, 0x42, 0xDA, 0x83, 0x42, 0xDA, 0x84, 0x42, 0xDA, 0x86, 0x42, 0xDA, 0x87, 0x42, 0xDA, 0x88, - // Bytes 2c0 - 2ff 0x42, 0xDA, 0x8C, 0x42, 0xDA, 0x8D, 0x42, 0xDA, 0x8E, 0x42, 0xDA, 0x91, 0x42, 0xDA, 0x98, 0x42, + // Bytes 3c0 - 3ff 0xDA, 0xA1, 0x42, 0xDA, 0xA4, 0x42, 0xDA, 0xA6, 0x42, 0xDA, 0xA9, 0x42, 0xDA, 0xAD, 0x42, 0xDA, 0xAF, 0x42, 0xDA, 0xB1, 0x42, 0xDA, 0xB3, 0x42, 0xDA, 0xBA, 0x42, 0xDA, 0xBB, 0x42, 0xDA, 0xBE, 0x42, 0xDB, 0x81, 0x42, 0xDB, 0x85, 0x42, 0xDB, 0x86, 0x42, 0xDB, 0x87, 0x42, 0xDB, 0x88, 0x42, - // Bytes 300 - 33f 0xDB, 0x89, 0x42, 0xDB, 0x8B, 0x42, 0xDB, 0x8C, 0x42, 0xDB, 0x90, 0x42, 0xDB, 0x92, 0x43, 0xE0, + // Bytes 400 - 43f 0xBC, 0x8B, 0x43, 0xE1, 0x83, 0x9C, 0x43, 0xE1, 0x84, 0x80, 0x43, 0xE1, 0x84, 0x81, 0x43, 0xE1, 0x84, 0x82, 0x43, 0xE1, 0x84, 0x83, 0x43, 0xE1, 0x84, 0x84, 0x43, 0xE1, 0x84, 0x85, 0x43, 0xE1, 0x84, 0x86, 0x43, 0xE1, 0x84, 0x87, 0x43, 0xE1, 0x84, 0x88, 0x43, 0xE1, 0x84, 0x89, 0x43, 0xE1, - // Bytes 340 - 37f 0x84, 0x8A, 0x43, 0xE1, 0x84, 0x8B, 0x43, 0xE1, 0x84, 0x8C, 0x43, 0xE1, 0x84, 0x8D, 0x43, 0xE1, + // Bytes 440 - 47f 0x84, 0x8E, 0x43, 0xE1, 0x84, 0x8F, 0x43, 0xE1, 0x84, 0x90, 0x43, 0xE1, 0x84, 0x91, 0x43, 0xE1, 0x84, 0x92, 0x43, 0xE1, 0x84, 0x94, 0x43, 0xE1, 0x84, 0x95, 0x43, 0xE1, 0x84, 0x9A, 0x43, 0xE1, 0x84, 0x9C, 0x43, 0xE1, 0x84, 0x9D, 0x43, 0xE1, 0x84, 0x9E, 0x43, 0xE1, 0x84, 0xA0, 0x43, 0xE1, - // Bytes 380 - 3bf 0x84, 0xA1, 0x43, 0xE1, 0x84, 0xA2, 0x43, 0xE1, 0x84, 0xA3, 0x43, 0xE1, 0x84, 0xA7, 0x43, 0xE1, + // Bytes 480 - 4bf 0x84, 0xA9, 0x43, 0xE1, 0x84, 0xAB, 0x43, 0xE1, 0x84, 0xAC, 0x43, 0xE1, 0x84, 0xAD, 0x43, 0xE1, 0x84, 0xAE, 0x43, 0xE1, 0x84, 0xAF, 0x43, 0xE1, 0x84, 0xB2, 0x43, 0xE1, 0x84, 0xB6, 0x43, 0xE1, 0x85, 0x80, 0x43, 0xE1, 0x85, 0x87, 0x43, 0xE1, 0x85, 0x8C, 0x43, 0xE1, 0x85, 0x97, 0x43, 0xE1, - // Bytes 3c0 - 3ff 0x85, 0x98, 0x43, 0xE1, 0x85, 0x99, 0x43, 0xE1, 0x85, 0xA0, 0x43, 0xE1, 0x86, 0x84, 0x43, 0xE1, + // Bytes 4c0 - 4ff 0x86, 0x85, 0x43, 0xE1, 0x86, 0x88, 0x43, 0xE1, 0x86, 0x91, 0x43, 0xE1, 0x86, 0x92, 0x43, 0xE1, 0x86, 0x94, 0x43, 0xE1, 0x86, 0x9E, 0x43, 0xE1, 0x86, 0xA1, 0x43, 0xE1, 0x87, 0x87, 0x43, 0xE1, 0x87, 0x88, 0x43, 0xE1, 0x87, 0x8C, 0x43, 0xE1, 0x87, 0x8E, 0x43, 0xE1, 0x87, 0x93, 0x43, 0xE1, - // Bytes 400 - 43f 0x87, 0x97, 0x43, 0xE1, 0x87, 0x99, 0x43, 0xE1, 0x87, 0x9D, 0x43, 0xE1, 0x87, 0x9F, 0x43, 0xE1, + // Bytes 500 - 53f 0x87, 0xB1, 0x43, 0xE1, 0x87, 0xB2, 0x43, 0xE1, 0xB4, 0x82, 0x43, 0xE1, 0xB4, 0x96, 0x43, 0xE1, 0xB4, 0x97, 0x43, 0xE1, 0xB4, 0x9C, 0x43, 0xE1, 0xB4, 0x9D, 0x43, 0xE1, 0xB4, 0xA5, 0x43, 0xE1, - 0xB5, 0xBB, 0x43, 0xE1, 0xB6, 0x85, 0x43, 0xE2, - 0x80, 0x82, 0x43, 0xE2, 0x80, 0x83, 0x43, 0xE2, - // Bytes 440 - 47f - 0x80, 0x90, 0x43, 0xE2, 0x80, 0x93, 0x43, 0xE2, - 0x80, 0x94, 0x43, 0xE2, 0x82, 0xA9, 0x43, 0xE2, - 0x86, 0x90, 0x43, 0xE2, 0x86, 0x91, 0x43, 0xE2, - 0x86, 0x92, 0x43, 0xE2, 0x86, 0x93, 0x43, 0xE2, - 0x88, 0x82, 0x43, 0xE2, 0x88, 0x87, 0x43, 0xE2, - 0x88, 0x91, 0x43, 0xE2, 0x88, 0x92, 0x43, 0xE2, - 0x94, 0x82, 0x43, 0xE2, 0x96, 0xA0, 0x43, 0xE2, - 0x97, 0x8B, 0x43, 0xE2, 0xA6, 0x85, 0x43, 0xE2, - // Bytes 480 - 4bf - 0xA6, 0x86, 0x43, 0xE2, 0xB5, 0xA1, 0x43, 0xE3, + 0xB5, 0xBB, 0x43, 0xE1, 0xB6, 0x85, 0x43, 0xE1, + 0xB6, 0x91, 0x43, 0xE2, 0x80, 0x82, 0x43, 0xE2, + 0x80, 0x83, 0x43, 0xE2, 0x80, 0x90, 0x43, 0xE2, + 0x80, 0x93, 0x43, 0xE2, 0x80, 0x94, 0x43, 0xE2, + // Bytes 540 - 57f + 0x82, 0xA9, 0x43, 0xE2, 0x86, 0x90, 0x43, 0xE2, + 0x86, 0x91, 0x43, 0xE2, 0x86, 0x92, 0x43, 0xE2, + 0x86, 0x93, 0x43, 0xE2, 0x88, 0x82, 0x43, 0xE2, + 0x88, 0x87, 0x43, 0xE2, 0x88, 0x91, 0x43, 0xE2, + 0x88, 0x92, 0x43, 0xE2, 0x94, 0x82, 0x43, 0xE2, + 0x96, 0xA0, 0x43, 0xE2, 0x97, 0x8B, 0x43, 0xE2, + 0xA6, 0x85, 0x43, 0xE2, 0xA6, 0x86, 0x43, 0xE2, + 0xB1, 0xB1, 0x43, 0xE2, 0xB5, 0xA1, 0x43, 0xE3, + // Bytes 580 - 5bf 0x80, 0x81, 0x43, 0xE3, 0x80, 0x82, 0x43, 0xE3, 0x80, 0x88, 0x43, 0xE3, 0x80, 0x89, 0x43, 0xE3, 0x80, 0x8A, 0x43, 0xE3, 0x80, 0x8B, 0x43, 0xE3, @@ -211,8 +246,8 @@ var decomps = [...]byte{ 0x80, 0x8E, 0x43, 0xE3, 0x80, 0x8F, 0x43, 0xE3, 0x80, 0x90, 0x43, 0xE3, 0x80, 0x91, 0x43, 0xE3, 0x80, 0x92, 0x43, 0xE3, 0x80, 0x94, 0x43, 0xE3, - // Bytes 4c0 - 4ff 0x80, 0x95, 0x43, 0xE3, 0x80, 0x96, 0x43, 0xE3, + // Bytes 5c0 - 5ff 0x80, 0x97, 0x43, 0xE3, 0x82, 0xA1, 0x43, 0xE3, 0x82, 0xA2, 0x43, 0xE3, 0x82, 0xA3, 0x43, 0xE3, 0x82, 0xA4, 0x43, 0xE3, 0x82, 0xA5, 0x43, 0xE3, @@ -220,8 +255,8 @@ var decomps = [...]byte{ 0x82, 0xA8, 0x43, 0xE3, 0x82, 0xA9, 0x43, 0xE3, 0x82, 0xAA, 0x43, 0xE3, 0x82, 0xAB, 0x43, 0xE3, 0x82, 0xAD, 0x43, 0xE3, 0x82, 0xAF, 0x43, 0xE3, - // Bytes 500 - 53f 0x82, 0xB1, 0x43, 0xE3, 0x82, 0xB3, 0x43, 0xE3, + // Bytes 600 - 63f 0x82, 0xB5, 0x43, 0xE3, 0x82, 0xB7, 0x43, 0xE3, 0x82, 0xB9, 0x43, 0xE3, 0x82, 0xBB, 0x43, 0xE3, 0x82, 0xBD, 0x43, 0xE3, 0x82, 0xBF, 0x43, 0xE3, @@ -229,8 +264,8 @@ var decomps = [...]byte{ 0x83, 0x84, 0x43, 0xE3, 0x83, 0x86, 0x43, 0xE3, 0x83, 0x88, 0x43, 0xE3, 0x83, 0x8A, 0x43, 0xE3, 0x83, 0x8B, 0x43, 0xE3, 0x83, 0x8C, 0x43, 0xE3, - // Bytes 540 - 57f 0x83, 0x8D, 0x43, 0xE3, 0x83, 0x8E, 0x43, 0xE3, + // Bytes 640 - 67f 0x83, 0x8F, 0x43, 0xE3, 0x83, 0x92, 0x43, 0xE3, 0x83, 0x95, 0x43, 0xE3, 0x83, 0x98, 0x43, 0xE3, 0x83, 0x9B, 0x43, 0xE3, 0x83, 0x9E, 0x43, 0xE3, @@ -238,8 +273,8 @@ var decomps = [...]byte{ 0x83, 0xA1, 0x43, 0xE3, 0x83, 0xA2, 0x43, 0xE3, 0x83, 0xA3, 0x43, 0xE3, 0x83, 0xA4, 0x43, 0xE3, 0x83, 0xA5, 0x43, 0xE3, 0x83, 0xA6, 0x43, 0xE3, - // Bytes 580 - 5bf 0x83, 0xA7, 0x43, 0xE3, 0x83, 0xA8, 0x43, 0xE3, + // Bytes 680 - 6bf 0x83, 0xA9, 0x43, 0xE3, 0x83, 0xAA, 0x43, 0xE3, 0x83, 0xAB, 0x43, 0xE3, 0x83, 0xAC, 0x43, 0xE3, 0x83, 0xAD, 0x43, 0xE3, 0x83, 0xAF, 0x43, 0xE3, @@ -247,8 +282,8 @@ var decomps = [...]byte{ 0x83, 0xB2, 0x43, 0xE3, 0x83, 0xB3, 0x43, 0xE3, 0x83, 0xBB, 0x43, 0xE3, 0x83, 0xBC, 0x43, 0xE3, 0x92, 0x9E, 0x43, 0xE3, 0x92, 0xB9, 0x43, 0xE3, - // Bytes 5c0 - 5ff 0x92, 0xBB, 0x43, 0xE3, 0x93, 0x9F, 0x43, 0xE3, + // Bytes 6c0 - 6ff 0x94, 0x95, 0x43, 0xE3, 0x9B, 0xAE, 0x43, 0xE3, 0x9B, 0xBC, 0x43, 0xE3, 0x9E, 0x81, 0x43, 0xE3, 0xA0, 0xAF, 0x43, 0xE3, 0xA1, 0xA2, 0x43, 0xE3, @@ -256,8 +291,8 @@ var decomps = [...]byte{ 0xA3, 0xA3, 0x43, 0xE3, 0xA4, 0x9C, 0x43, 0xE3, 0xA4, 0xBA, 0x43, 0xE3, 0xA8, 0xAE, 0x43, 0xE3, 0xA9, 0xAC, 0x43, 0xE3, 0xAB, 0xA4, 0x43, 0xE3, - // Bytes 600 - 63f 0xAC, 0x88, 0x43, 0xE3, 0xAC, 0x99, 0x43, 0xE3, + // Bytes 700 - 73f 0xAD, 0x89, 0x43, 0xE3, 0xAE, 0x9D, 0x43, 0xE3, 0xB0, 0x98, 0x43, 0xE3, 0xB1, 0x8E, 0x43, 0xE3, 0xB4, 0xB3, 0x43, 0xE3, 0xB6, 0x96, 0x43, 0xE3, @@ -265,8 +300,8 @@ var decomps = [...]byte{ 0xBC, 0x9B, 0x43, 0xE3, 0xBF, 0xBC, 0x43, 0xE4, 0x80, 0x88, 0x43, 0xE4, 0x80, 0x98, 0x43, 0xE4, 0x80, 0xB9, 0x43, 0xE4, 0x81, 0x86, 0x43, 0xE4, - // Bytes 640 - 67f 0x82, 0x96, 0x43, 0xE4, 0x83, 0xA3, 0x43, 0xE4, + // Bytes 740 - 77f 0x84, 0xAF, 0x43, 0xE4, 0x88, 0x82, 0x43, 0xE4, 0x88, 0xA7, 0x43, 0xE4, 0x8A, 0xA0, 0x43, 0xE4, 0x8C, 0x81, 0x43, 0xE4, 0x8C, 0xB4, 0x43, 0xE4, @@ -274,8 +309,8 @@ var decomps = [...]byte{ 0x8F, 0x99, 0x43, 0xE4, 0x90, 0x8B, 0x43, 0xE4, 0x91, 0xAB, 0x43, 0xE4, 0x94, 0xAB, 0x43, 0xE4, 0x95, 0x9D, 0x43, 0xE4, 0x95, 0xA1, 0x43, 0xE4, - // Bytes 680 - 6bf 0x95, 0xAB, 0x43, 0xE4, 0x97, 0x97, 0x43, 0xE4, + // Bytes 780 - 7bf 0x97, 0xB9, 0x43, 0xE4, 0x98, 0xB5, 0x43, 0xE4, 0x9A, 0xBE, 0x43, 0xE4, 0x9B, 0x87, 0x43, 0xE4, 0xA6, 0x95, 0x43, 0xE4, 0xA7, 0xA6, 0x43, 0xE4, @@ -283,8 +318,8 @@ var decomps = [...]byte{ 0xAA, 0xB2, 0x43, 0xE4, 0xAC, 0xB3, 0x43, 0xE4, 0xAF, 0x8E, 0x43, 0xE4, 0xB3, 0x8E, 0x43, 0xE4, 0xB3, 0xAD, 0x43, 0xE4, 0xB3, 0xB8, 0x43, 0xE4, - // Bytes 6c0 - 6ff 0xB5, 0x96, 0x43, 0xE4, 0xB8, 0x80, 0x43, 0xE4, + // Bytes 7c0 - 7ff 0xB8, 0x81, 0x43, 0xE4, 0xB8, 0x83, 0x43, 0xE4, 0xB8, 0x89, 0x43, 0xE4, 0xB8, 0x8A, 0x43, 0xE4, 0xB8, 0x8B, 0x43, 0xE4, 0xB8, 0x8D, 0x43, 0xE4, @@ -292,8 +327,8 @@ var decomps = [...]byte{ 0xB8, 0xA8, 0x43, 0xE4, 0xB8, 0xAD, 0x43, 0xE4, 0xB8, 0xB2, 0x43, 0xE4, 0xB8, 0xB6, 0x43, 0xE4, 0xB8, 0xB8, 0x43, 0xE4, 0xB8, 0xB9, 0x43, 0xE4, - // Bytes 700 - 73f 0xB8, 0xBD, 0x43, 0xE4, 0xB8, 0xBF, 0x43, 0xE4, + // Bytes 800 - 83f 0xB9, 0x81, 0x43, 0xE4, 0xB9, 0x99, 0x43, 0xE4, 0xB9, 0x9D, 0x43, 0xE4, 0xBA, 0x82, 0x43, 0xE4, 0xBA, 0x85, 0x43, 0xE4, 0xBA, 0x86, 0x43, 0xE4, @@ -301,8 +336,8 @@ var decomps = [...]byte{ 0xBA, 0xA0, 0x43, 0xE4, 0xBA, 0xA4, 0x43, 0xE4, 0xBA, 0xAE, 0x43, 0xE4, 0xBA, 0xBA, 0x43, 0xE4, 0xBB, 0x80, 0x43, 0xE4, 0xBB, 0x8C, 0x43, 0xE4, - // Bytes 740 - 77f 0xBB, 0xA4, 0x43, 0xE4, 0xBC, 0x81, 0x43, 0xE4, + // Bytes 840 - 87f 0xBC, 0x91, 0x43, 0xE4, 0xBD, 0xA0, 0x43, 0xE4, 0xBE, 0x80, 0x43, 0xE4, 0xBE, 0x86, 0x43, 0xE4, 0xBE, 0x8B, 0x43, 0xE4, 0xBE, 0xAE, 0x43, 0xE4, @@ -310,8 +345,8 @@ var decomps = [...]byte{ 0x80, 0x82, 0x43, 0xE5, 0x80, 0xAB, 0x43, 0xE5, 0x81, 0xBA, 0x43, 0xE5, 0x82, 0x99, 0x43, 0xE5, 0x83, 0x8F, 0x43, 0xE5, 0x83, 0x9A, 0x43, 0xE5, - // Bytes 780 - 7bf 0x83, 0xA7, 0x43, 0xE5, 0x84, 0xAA, 0x43, 0xE5, + // Bytes 880 - 8bf 0x84, 0xBF, 0x43, 0xE5, 0x85, 0x80, 0x43, 0xE5, 0x85, 0x85, 0x43, 0xE5, 0x85, 0x8D, 0x43, 0xE5, 0x85, 0x94, 0x43, 0xE5, 0x85, 0xA4, 0x43, 0xE5, @@ -319,8 +354,8 @@ var decomps = [...]byte{ 0x85, 0xA8, 0x43, 0xE5, 0x85, 0xA9, 0x43, 0xE5, 0x85, 0xAB, 0x43, 0xE5, 0x85, 0xAD, 0x43, 0xE5, 0x85, 0xB7, 0x43, 0xE5, 0x86, 0x80, 0x43, 0xE5, - // Bytes 7c0 - 7ff 0x86, 0x82, 0x43, 0xE5, 0x86, 0x8D, 0x43, 0xE5, + // Bytes 8c0 - 8ff 0x86, 0x92, 0x43, 0xE5, 0x86, 0x95, 0x43, 0xE5, 0x86, 0x96, 0x43, 0xE5, 0x86, 0x97, 0x43, 0xE5, 0x86, 0x99, 0x43, 0xE5, 0x86, 0xA4, 0x43, 0xE5, @@ -328,8 +363,8 @@ var decomps = [...]byte{ 0x86, 0xB5, 0x43, 0xE5, 0x86, 0xB7, 0x43, 0xE5, 0x87, 0x89, 0x43, 0xE5, 0x87, 0x8C, 0x43, 0xE5, 0x87, 0x9C, 0x43, 0xE5, 0x87, 0x9E, 0x43, 0xE5, - // Bytes 800 - 83f 0x87, 0xA0, 0x43, 0xE5, 0x87, 0xB5, 0x43, 0xE5, + // Bytes 900 - 93f 0x88, 0x80, 0x43, 0xE5, 0x88, 0x83, 0x43, 0xE5, 0x88, 0x87, 0x43, 0xE5, 0x88, 0x97, 0x43, 0xE5, 0x88, 0x9D, 0x43, 0xE5, 0x88, 0xA9, 0x43, 0xE5, @@ -337,8 +372,8 @@ var decomps = [...]byte{ 0x89, 0x86, 0x43, 0xE5, 0x89, 0x8D, 0x43, 0xE5, 0x89, 0xB2, 0x43, 0xE5, 0x89, 0xB7, 0x43, 0xE5, 0x8A, 0x89, 0x43, 0xE5, 0x8A, 0x9B, 0x43, 0xE5, - // Bytes 840 - 87f 0x8A, 0xA3, 0x43, 0xE5, 0x8A, 0xB3, 0x43, 0xE5, + // Bytes 940 - 97f 0x8A, 0xB4, 0x43, 0xE5, 0x8B, 0x87, 0x43, 0xE5, 0x8B, 0x89, 0x43, 0xE5, 0x8B, 0x92, 0x43, 0xE5, 0x8B, 0x9E, 0x43, 0xE5, 0x8B, 0xA4, 0x43, 0xE5, @@ -346,8 +381,8 @@ var decomps = [...]byte{ 0x8B, 0xBA, 0x43, 0xE5, 0x8C, 0x85, 0x43, 0xE5, 0x8C, 0x86, 0x43, 0xE5, 0x8C, 0x95, 0x43, 0xE5, 0x8C, 0x97, 0x43, 0xE5, 0x8C, 0x9A, 0x43, 0xE5, - // Bytes 880 - 8bf 0x8C, 0xB8, 0x43, 0xE5, 0x8C, 0xBB, 0x43, 0xE5, + // Bytes 980 - 9bf 0x8C, 0xBF, 0x43, 0xE5, 0x8D, 0x81, 0x43, 0xE5, 0x8D, 0x84, 0x43, 0xE5, 0x8D, 0x85, 0x43, 0xE5, 0x8D, 0x89, 0x43, 0xE5, 0x8D, 0x91, 0x43, 0xE5, @@ -355,8 +390,8 @@ var decomps = [...]byte{ 0x8D, 0x9C, 0x43, 0xE5, 0x8D, 0xA9, 0x43, 0xE5, 0x8D, 0xB0, 0x43, 0xE5, 0x8D, 0xB3, 0x43, 0xE5, 0x8D, 0xB5, 0x43, 0xE5, 0x8D, 0xBD, 0x43, 0xE5, - // Bytes 8c0 - 8ff 0x8D, 0xBF, 0x43, 0xE5, 0x8E, 0x82, 0x43, 0xE5, + // Bytes 9c0 - 9ff 0x8E, 0xB6, 0x43, 0xE5, 0x8F, 0x83, 0x43, 0xE5, 0x8F, 0x88, 0x43, 0xE5, 0x8F, 0x8A, 0x43, 0xE5, 0x8F, 0x8C, 0x43, 0xE5, 0x8F, 0x9F, 0x43, 0xE5, @@ -364,8 +399,8 @@ var decomps = [...]byte{ 0x8F, 0xAB, 0x43, 0xE5, 0x8F, 0xAF, 0x43, 0xE5, 0x8F, 0xB1, 0x43, 0xE5, 0x8F, 0xB3, 0x43, 0xE5, 0x90, 0x86, 0x43, 0xE5, 0x90, 0x88, 0x43, 0xE5, - // Bytes 900 - 93f 0x90, 0x8D, 0x43, 0xE5, 0x90, 0x8F, 0x43, 0xE5, + // Bytes a00 - a3f 0x90, 0x9D, 0x43, 0xE5, 0x90, 0xB8, 0x43, 0xE5, 0x90, 0xB9, 0x43, 0xE5, 0x91, 0x82, 0x43, 0xE5, 0x91, 0x88, 0x43, 0xE5, 0x91, 0xA8, 0x43, 0xE5, @@ -373,8 +408,8 @@ var decomps = [...]byte{ 0x92, 0xBD, 0x43, 0xE5, 0x93, 0xB6, 0x43, 0xE5, 0x94, 0x90, 0x43, 0xE5, 0x95, 0x8F, 0x43, 0xE5, 0x95, 0x93, 0x43, 0xE5, 0x95, 0x95, 0x43, 0xE5, - // Bytes 940 - 97f 0x95, 0xA3, 0x43, 0xE5, 0x96, 0x84, 0x43, 0xE5, + // Bytes a40 - a7f 0x96, 0x87, 0x43, 0xE5, 0x96, 0x99, 0x43, 0xE5, 0x96, 0x9D, 0x43, 0xE5, 0x96, 0xAB, 0x43, 0xE5, 0x96, 0xB3, 0x43, 0xE5, 0x96, 0xB6, 0x43, 0xE5, @@ -382,8 +417,8 @@ var decomps = [...]byte{ 0x97, 0xA2, 0x43, 0xE5, 0x98, 0x86, 0x43, 0xE5, 0x99, 0x91, 0x43, 0xE5, 0x99, 0xA8, 0x43, 0xE5, 0x99, 0xB4, 0x43, 0xE5, 0x9B, 0x97, 0x43, 0xE5, - // Bytes 980 - 9bf 0x9B, 0x9B, 0x43, 0xE5, 0x9B, 0xB9, 0x43, 0xE5, + // Bytes a80 - abf 0x9C, 0x96, 0x43, 0xE5, 0x9C, 0x97, 0x43, 0xE5, 0x9C, 0x9F, 0x43, 0xE5, 0x9C, 0xB0, 0x43, 0xE5, 0x9E, 0x8B, 0x43, 0xE5, 0x9F, 0x8E, 0x43, 0xE5, @@ -391,8 +426,8 @@ var decomps = [...]byte{ 0xA0, 0xB1, 0x43, 0xE5, 0xA0, 0xB2, 0x43, 0xE5, 0xA1, 0x80, 0x43, 0xE5, 0xA1, 0x9A, 0x43, 0xE5, 0xA1, 0x9E, 0x43, 0xE5, 0xA2, 0xA8, 0x43, 0xE5, - // Bytes 9c0 - 9ff 0xA2, 0xAC, 0x43, 0xE5, 0xA2, 0xB3, 0x43, 0xE5, + // Bytes ac0 - aff 0xA3, 0x98, 0x43, 0xE5, 0xA3, 0x9F, 0x43, 0xE5, 0xA3, 0xAB, 0x43, 0xE5, 0xA3, 0xAE, 0x43, 0xE5, 0xA3, 0xB0, 0x43, 0xE5, 0xA3, 0xB2, 0x43, 0xE5, @@ -400,8 +435,8 @@ var decomps = [...]byte{ 0xA4, 0x86, 0x43, 0xE5, 0xA4, 0x8A, 0x43, 0xE5, 0xA4, 0x95, 0x43, 0xE5, 0xA4, 0x9A, 0x43, 0xE5, 0xA4, 0x9C, 0x43, 0xE5, 0xA4, 0xA2, 0x43, 0xE5, - // Bytes a00 - a3f 0xA4, 0xA7, 0x43, 0xE5, 0xA4, 0xA9, 0x43, 0xE5, + // Bytes b00 - b3f 0xA5, 0x84, 0x43, 0xE5, 0xA5, 0x88, 0x43, 0xE5, 0xA5, 0x91, 0x43, 0xE5, 0xA5, 0x94, 0x43, 0xE5, 0xA5, 0xA2, 0x43, 0xE5, 0xA5, 0xB3, 0x43, 0xE5, @@ -409,8 +444,8 @@ var decomps = [...]byte{ 0xA8, 0x9B, 0x43, 0xE5, 0xA8, 0xA7, 0x43, 0xE5, 0xA9, 0xA2, 0x43, 0xE5, 0xA9, 0xA6, 0x43, 0xE5, 0xAA, 0xB5, 0x43, 0xE5, 0xAC, 0x88, 0x43, 0xE5, - // Bytes a40 - a7f 0xAC, 0xA8, 0x43, 0xE5, 0xAC, 0xBE, 0x43, 0xE5, + // Bytes b40 - b7f 0xAD, 0x90, 0x43, 0xE5, 0xAD, 0x97, 0x43, 0xE5, 0xAD, 0xA6, 0x43, 0xE5, 0xAE, 0x80, 0x43, 0xE5, 0xAE, 0x85, 0x43, 0xE5, 0xAE, 0x97, 0x43, 0xE5, @@ -418,8 +453,8 @@ var decomps = [...]byte{ 0xAF, 0xA7, 0x43, 0xE5, 0xAF, 0xAE, 0x43, 0xE5, 0xAF, 0xB3, 0x43, 0xE5, 0xAF, 0xB8, 0x43, 0xE5, 0xAF, 0xBF, 0x43, 0xE5, 0xB0, 0x86, 0x43, 0xE5, - // Bytes a80 - abf 0xB0, 0x8F, 0x43, 0xE5, 0xB0, 0xA2, 0x43, 0xE5, + // Bytes b80 - bbf 0xB0, 0xB8, 0x43, 0xE5, 0xB0, 0xBF, 0x43, 0xE5, 0xB1, 0xA0, 0x43, 0xE5, 0xB1, 0xA2, 0x43, 0xE5, 0xB1, 0xA4, 0x43, 0xE5, 0xB1, 0xA5, 0x43, 0xE5, @@ -427,8 +462,8 @@ var decomps = [...]byte{ 0xB2, 0x8D, 0x43, 0xE5, 0xB3, 0x80, 0x43, 0xE5, 0xB4, 0x99, 0x43, 0xE5, 0xB5, 0x83, 0x43, 0xE5, 0xB5, 0x90, 0x43, 0xE5, 0xB5, 0xAB, 0x43, 0xE5, - // Bytes ac0 - aff 0xB5, 0xAE, 0x43, 0xE5, 0xB5, 0xBC, 0x43, 0xE5, + // Bytes bc0 - bff 0xB6, 0xB2, 0x43, 0xE5, 0xB6, 0xBA, 0x43, 0xE5, 0xB7, 0x9B, 0x43, 0xE5, 0xB7, 0xA1, 0x43, 0xE5, 0xB7, 0xA2, 0x43, 0xE5, 0xB7, 0xA5, 0x43, 0xE5, @@ -436,8 +471,8 @@ var decomps = [...]byte{ 0xB7, 0xBD, 0x43, 0xE5, 0xB7, 0xBE, 0x43, 0xE5, 0xB8, 0xA8, 0x43, 0xE5, 0xB8, 0xBD, 0x43, 0xE5, 0xB9, 0xA9, 0x43, 0xE5, 0xB9, 0xB2, 0x43, 0xE5, - // Bytes b00 - b3f 0xB9, 0xB4, 0x43, 0xE5, 0xB9, 0xBA, 0x43, 0xE5, + // Bytes c00 - c3f 0xB9, 0xBC, 0x43, 0xE5, 0xB9, 0xBF, 0x43, 0xE5, 0xBA, 0xA6, 0x43, 0xE5, 0xBA, 0xB0, 0x43, 0xE5, 0xBA, 0xB3, 0x43, 0xE5, 0xBA, 0xB6, 0x43, 0xE5, @@ -445,8 +480,8 @@ var decomps = [...]byte{ 0xBB, 0x92, 0x43, 0xE5, 0xBB, 0x93, 0x43, 0xE5, 0xBB, 0x99, 0x43, 0xE5, 0xBB, 0xAC, 0x43, 0xE5, 0xBB, 0xB4, 0x43, 0xE5, 0xBB, 0xBE, 0x43, 0xE5, - // Bytes b40 - b7f 0xBC, 0x84, 0x43, 0xE5, 0xBC, 0x8B, 0x43, 0xE5, + // Bytes c40 - c7f 0xBC, 0x93, 0x43, 0xE5, 0xBC, 0xA2, 0x43, 0xE5, 0xBD, 0x90, 0x43, 0xE5, 0xBD, 0x93, 0x43, 0xE5, 0xBD, 0xA1, 0x43, 0xE5, 0xBD, 0xA2, 0x43, 0xE5, @@ -454,8 +489,8 @@ var decomps = [...]byte{ 0xBD, 0xB3, 0x43, 0xE5, 0xBE, 0x8B, 0x43, 0xE5, 0xBE, 0x8C, 0x43, 0xE5, 0xBE, 0x97, 0x43, 0xE5, 0xBE, 0x9A, 0x43, 0xE5, 0xBE, 0xA9, 0x43, 0xE5, - // Bytes b80 - bbf 0xBE, 0xAD, 0x43, 0xE5, 0xBF, 0x83, 0x43, 0xE5, + // Bytes c80 - cbf 0xBF, 0x8D, 0x43, 0xE5, 0xBF, 0x97, 0x43, 0xE5, 0xBF, 0xB5, 0x43, 0xE5, 0xBF, 0xB9, 0x43, 0xE6, 0x80, 0x92, 0x43, 0xE6, 0x80, 0x9C, 0x43, 0xE6, @@ -463,8 +498,8 @@ var decomps = [...]byte{ 0x82, 0x94, 0x43, 0xE6, 0x83, 0x87, 0x43, 0xE6, 0x83, 0x98, 0x43, 0xE6, 0x83, 0xA1, 0x43, 0xE6, 0x84, 0x88, 0x43, 0xE6, 0x85, 0x84, 0x43, 0xE6, - // Bytes bc0 - bff 0x85, 0x88, 0x43, 0xE6, 0x85, 0x8C, 0x43, 0xE6, + // Bytes cc0 - cff 0x85, 0x8E, 0x43, 0xE6, 0x85, 0xA0, 0x43, 0xE6, 0x85, 0xA8, 0x43, 0xE6, 0x85, 0xBA, 0x43, 0xE6, 0x86, 0x8E, 0x43, 0xE6, 0x86, 0x90, 0x43, 0xE6, @@ -472,8 +507,8 @@ var decomps = [...]byte{ 0x86, 0xB2, 0x43, 0xE6, 0x87, 0x9E, 0x43, 0xE6, 0x87, 0xB2, 0x43, 0xE6, 0x87, 0xB6, 0x43, 0xE6, 0x88, 0x80, 0x43, 0xE6, 0x88, 0x88, 0x43, 0xE6, - // Bytes c00 - c3f 0x88, 0x90, 0x43, 0xE6, 0x88, 0x9B, 0x43, 0xE6, + // Bytes d00 - d3f 0x88, 0xAE, 0x43, 0xE6, 0x88, 0xB4, 0x43, 0xE6, 0x88, 0xB6, 0x43, 0xE6, 0x89, 0x8B, 0x43, 0xE6, 0x89, 0x93, 0x43, 0xE6, 0x89, 0x9D, 0x43, 0xE6, @@ -481,8 +516,8 @@ var decomps = [...]byte{ 0x8B, 0x89, 0x43, 0xE6, 0x8B, 0x8F, 0x43, 0xE6, 0x8B, 0x93, 0x43, 0xE6, 0x8B, 0x94, 0x43, 0xE6, 0x8B, 0xBC, 0x43, 0xE6, 0x8B, 0xBE, 0x43, 0xE6, - // Bytes c40 - c7f 0x8C, 0x87, 0x43, 0xE6, 0x8C, 0xBD, 0x43, 0xE6, + // Bytes d40 - d7f 0x8D, 0x90, 0x43, 0xE6, 0x8D, 0x95, 0x43, 0xE6, 0x8D, 0xA8, 0x43, 0xE6, 0x8D, 0xBB, 0x43, 0xE6, 0x8E, 0x83, 0x43, 0xE6, 0x8E, 0xA0, 0x43, 0xE6, @@ -490,8 +525,8 @@ var decomps = [...]byte{ 0x8F, 0x85, 0x43, 0xE6, 0x8F, 0xA4, 0x43, 0xE6, 0x90, 0x9C, 0x43, 0xE6, 0x90, 0xA2, 0x43, 0xE6, 0x91, 0x92, 0x43, 0xE6, 0x91, 0xA9, 0x43, 0xE6, - // Bytes c80 - cbf 0x91, 0xB7, 0x43, 0xE6, 0x91, 0xBE, 0x43, 0xE6, + // Bytes d80 - dbf 0x92, 0x9A, 0x43, 0xE6, 0x92, 0x9D, 0x43, 0xE6, 0x93, 0x84, 0x43, 0xE6, 0x94, 0xAF, 0x43, 0xE6, 0x94, 0xB4, 0x43, 0xE6, 0x95, 0x8F, 0x43, 0xE6, @@ -499,8 +534,8 @@ var decomps = [...]byte{ 0x95, 0xB8, 0x43, 0xE6, 0x96, 0x87, 0x43, 0xE6, 0x96, 0x97, 0x43, 0xE6, 0x96, 0x99, 0x43, 0xE6, 0x96, 0xA4, 0x43, 0xE6, 0x96, 0xB0, 0x43, 0xE6, - // Bytes cc0 - cff 0x96, 0xB9, 0x43, 0xE6, 0x97, 0x85, 0x43, 0xE6, + // Bytes dc0 - dff 0x97, 0xA0, 0x43, 0xE6, 0x97, 0xA2, 0x43, 0xE6, 0x97, 0xA3, 0x43, 0xE6, 0x97, 0xA5, 0x43, 0xE6, 0x98, 0x93, 0x43, 0xE6, 0x98, 0xA0, 0x43, 0xE6, @@ -508,8 +543,8 @@ var decomps = [...]byte{ 0x9A, 0x88, 0x43, 0xE6, 0x9A, 0x91, 0x43, 0xE6, 0x9A, 0x9C, 0x43, 0xE6, 0x9A, 0xB4, 0x43, 0xE6, 0x9B, 0x86, 0x43, 0xE6, 0x9B, 0xB0, 0x43, 0xE6, - // Bytes d00 - d3f 0x9B, 0xB4, 0x43, 0xE6, 0x9B, 0xB8, 0x43, 0xE6, + // Bytes e00 - e3f 0x9C, 0x80, 0x43, 0xE6, 0x9C, 0x88, 0x43, 0xE6, 0x9C, 0x89, 0x43, 0xE6, 0x9C, 0x97, 0x43, 0xE6, 0x9C, 0x9B, 0x43, 0xE6, 0x9C, 0xA1, 0x43, 0xE6, @@ -517,8 +552,8 @@ var decomps = [...]byte{ 0x9D, 0x93, 0x43, 0xE6, 0x9D, 0x96, 0x43, 0xE6, 0x9D, 0x9E, 0x43, 0xE6, 0x9D, 0xBB, 0x43, 0xE6, 0x9E, 0x85, 0x43, 0xE6, 0x9E, 0x97, 0x43, 0xE6, - // Bytes d40 - d7f 0x9F, 0xB3, 0x43, 0xE6, 0x9F, 0xBA, 0x43, 0xE6, + // Bytes e40 - e7f 0xA0, 0x97, 0x43, 0xE6, 0xA0, 0x9F, 0x43, 0xE6, 0xA0, 0xAA, 0x43, 0xE6, 0xA1, 0x92, 0x43, 0xE6, 0xA2, 0x81, 0x43, 0xE6, 0xA2, 0x85, 0x43, 0xE6, @@ -526,8 +561,8 @@ var decomps = [...]byte{ 0xA4, 0x94, 0x43, 0xE6, 0xA5, 0x82, 0x43, 0xE6, 0xA6, 0xA3, 0x43, 0xE6, 0xA7, 0xAA, 0x43, 0xE6, 0xA8, 0x82, 0x43, 0xE6, 0xA8, 0x93, 0x43, 0xE6, - // Bytes d80 - dbf 0xAA, 0xA8, 0x43, 0xE6, 0xAB, 0x93, 0x43, 0xE6, + // Bytes e80 - ebf 0xAB, 0x9B, 0x43, 0xE6, 0xAC, 0x84, 0x43, 0xE6, 0xAC, 0xA0, 0x43, 0xE6, 0xAC, 0xA1, 0x43, 0xE6, 0xAD, 0x94, 0x43, 0xE6, 0xAD, 0xA2, 0x43, 0xE6, @@ -535,8 +570,8 @@ var decomps = [...]byte{ 0xAD, 0xB7, 0x43, 0xE6, 0xAD, 0xB9, 0x43, 0xE6, 0xAE, 0x9F, 0x43, 0xE6, 0xAE, 0xAE, 0x43, 0xE6, 0xAE, 0xB3, 0x43, 0xE6, 0xAE, 0xBA, 0x43, 0xE6, - // Bytes dc0 - dff 0xAE, 0xBB, 0x43, 0xE6, 0xAF, 0x8B, 0x43, 0xE6, + // Bytes ec0 - eff 0xAF, 0x8D, 0x43, 0xE6, 0xAF, 0x94, 0x43, 0xE6, 0xAF, 0x9B, 0x43, 0xE6, 0xB0, 0x8F, 0x43, 0xE6, 0xB0, 0x94, 0x43, 0xE6, 0xB0, 0xB4, 0x43, 0xE6, @@ -544,8 +579,8 @@ var decomps = [...]byte{ 0xB2, 0x88, 0x43, 0xE6, 0xB2, 0xBF, 0x43, 0xE6, 0xB3, 0x8C, 0x43, 0xE6, 0xB3, 0x8D, 0x43, 0xE6, 0xB3, 0xA5, 0x43, 0xE6, 0xB3, 0xA8, 0x43, 0xE6, - // Bytes e00 - e3f 0xB4, 0x96, 0x43, 0xE6, 0xB4, 0x9B, 0x43, 0xE6, + // Bytes f00 - f3f 0xB4, 0x9E, 0x43, 0xE6, 0xB4, 0xB4, 0x43, 0xE6, 0xB4, 0xBE, 0x43, 0xE6, 0xB5, 0x81, 0x43, 0xE6, 0xB5, 0xA9, 0x43, 0xE6, 0xB5, 0xAA, 0x43, 0xE6, @@ -553,8 +588,8 @@ var decomps = [...]byte{ 0xB6, 0x85, 0x43, 0xE6, 0xB7, 0x8B, 0x43, 0xE6, 0xB7, 0x9A, 0x43, 0xE6, 0xB7, 0xAA, 0x43, 0xE6, 0xB7, 0xB9, 0x43, 0xE6, 0xB8, 0x9A, 0x43, 0xE6, - // Bytes e40 - e7f 0xB8, 0xAF, 0x43, 0xE6, 0xB9, 0xAE, 0x43, 0xE6, + // Bytes f40 - f7f 0xBA, 0x80, 0x43, 0xE6, 0xBA, 0x9C, 0x43, 0xE6, 0xBA, 0xBA, 0x43, 0xE6, 0xBB, 0x87, 0x43, 0xE6, 0xBB, 0x8B, 0x43, 0xE6, 0xBB, 0x91, 0x43, 0xE6, @@ -562,8 +597,8 @@ var decomps = [...]byte{ 0xBC, 0x94, 0x43, 0xE6, 0xBC, 0xA2, 0x43, 0xE6, 0xBC, 0xA3, 0x43, 0xE6, 0xBD, 0xAE, 0x43, 0xE6, 0xBF, 0x86, 0x43, 0xE6, 0xBF, 0xAB, 0x43, 0xE6, - // Bytes e80 - ebf 0xBF, 0xBE, 0x43, 0xE7, 0x80, 0x9B, 0x43, 0xE7, + // Bytes f80 - fbf 0x80, 0x9E, 0x43, 0xE7, 0x80, 0xB9, 0x43, 0xE7, 0x81, 0x8A, 0x43, 0xE7, 0x81, 0xAB, 0x43, 0xE7, 0x81, 0xB0, 0x43, 0xE7, 0x81, 0xB7, 0x43, 0xE7, @@ -571,8 +606,8 @@ var decomps = [...]byte{ 0x82, 0xAD, 0x43, 0xE7, 0x83, 0x88, 0x43, 0xE7, 0x83, 0x99, 0x43, 0xE7, 0x84, 0xA1, 0x43, 0xE7, 0x85, 0x85, 0x43, 0xE7, 0x85, 0x89, 0x43, 0xE7, - // Bytes ec0 - eff 0x85, 0xAE, 0x43, 0xE7, 0x86, 0x9C, 0x43, 0xE7, + // Bytes fc0 - fff 0x87, 0x8E, 0x43, 0xE7, 0x87, 0x90, 0x43, 0xE7, 0x88, 0x90, 0x43, 0xE7, 0x88, 0x9B, 0x43, 0xE7, 0x88, 0xA8, 0x43, 0xE7, 0x88, 0xAA, 0x43, 0xE7, @@ -580,8 +615,8 @@ var decomps = [...]byte{ 0x88, 0xB6, 0x43, 0xE7, 0x88, 0xBB, 0x43, 0xE7, 0x88, 0xBF, 0x43, 0xE7, 0x89, 0x87, 0x43, 0xE7, 0x89, 0x90, 0x43, 0xE7, 0x89, 0x99, 0x43, 0xE7, - // Bytes f00 - f3f 0x89, 0x9B, 0x43, 0xE7, 0x89, 0xA2, 0x43, 0xE7, + // Bytes 1000 - 103f 0x89, 0xB9, 0x43, 0xE7, 0x8A, 0x80, 0x43, 0xE7, 0x8A, 0x95, 0x43, 0xE7, 0x8A, 0xAC, 0x43, 0xE7, 0x8A, 0xAF, 0x43, 0xE7, 0x8B, 0x80, 0x43, 0xE7, @@ -589,8 +624,8 @@ var decomps = [...]byte{ 0x8D, 0xB5, 0x43, 0xE7, 0x8D, 0xBA, 0x43, 0xE7, 0x8E, 0x84, 0x43, 0xE7, 0x8E, 0x87, 0x43, 0xE7, 0x8E, 0x89, 0x43, 0xE7, 0x8E, 0x8B, 0x43, 0xE7, - // Bytes f40 - f7f 0x8E, 0xA5, 0x43, 0xE7, 0x8E, 0xB2, 0x43, 0xE7, + // Bytes 1040 - 107f 0x8F, 0x9E, 0x43, 0xE7, 0x90, 0x86, 0x43, 0xE7, 0x90, 0x89, 0x43, 0xE7, 0x90, 0xA2, 0x43, 0xE7, 0x91, 0x87, 0x43, 0xE7, 0x91, 0x9C, 0x43, 0xE7, @@ -598,8 +633,8 @@ var decomps = [...]byte{ 0x92, 0x85, 0x43, 0xE7, 0x92, 0x89, 0x43, 0xE7, 0x92, 0x98, 0x43, 0xE7, 0x93, 0x8A, 0x43, 0xE7, 0x93, 0x9C, 0x43, 0xE7, 0x93, 0xA6, 0x43, 0xE7, - // Bytes f80 - fbf 0x94, 0x86, 0x43, 0xE7, 0x94, 0x98, 0x43, 0xE7, + // Bytes 1080 - 10bf 0x94, 0x9F, 0x43, 0xE7, 0x94, 0xA4, 0x43, 0xE7, 0x94, 0xA8, 0x43, 0xE7, 0x94, 0xB0, 0x43, 0xE7, 0x94, 0xB2, 0x43, 0xE7, 0x94, 0xB3, 0x43, 0xE7, @@ -607,8 +642,8 @@ var decomps = [...]byte{ 0x94, 0xBE, 0x43, 0xE7, 0x95, 0x99, 0x43, 0xE7, 0x95, 0xA5, 0x43, 0xE7, 0x95, 0xB0, 0x43, 0xE7, 0x96, 0x8B, 0x43, 0xE7, 0x96, 0x92, 0x43, 0xE7, - // Bytes fc0 - fff 0x97, 0xA2, 0x43, 0xE7, 0x98, 0x90, 0x43, 0xE7, + // Bytes 10c0 - 10ff 0x98, 0x9D, 0x43, 0xE7, 0x98, 0x9F, 0x43, 0xE7, 0x99, 0x82, 0x43, 0xE7, 0x99, 0xA9, 0x43, 0xE7, 0x99, 0xB6, 0x43, 0xE7, 0x99, 0xBD, 0x43, 0xE7, @@ -616,8 +651,8 @@ var decomps = [...]byte{ 0x9B, 0x8A, 0x43, 0xE7, 0x9B, 0x9B, 0x43, 0xE7, 0x9B, 0xA3, 0x43, 0xE7, 0x9B, 0xA7, 0x43, 0xE7, 0x9B, 0xAE, 0x43, 0xE7, 0x9B, 0xB4, 0x43, 0xE7, - // Bytes 1000 - 103f 0x9C, 0x81, 0x43, 0xE7, 0x9C, 0x9E, 0x43, 0xE7, + // Bytes 1100 - 113f 0x9C, 0x9F, 0x43, 0xE7, 0x9D, 0x80, 0x43, 0xE7, 0x9D, 0x8A, 0x43, 0xE7, 0x9E, 0x8B, 0x43, 0xE7, 0x9E, 0xA7, 0x43, 0xE7, 0x9F, 0x9B, 0x43, 0xE7, @@ -625,8 +660,8 @@ var decomps = [...]byte{ 0xA1, 0x8E, 0x43, 0xE7, 0xA1, 0xAB, 0x43, 0xE7, 0xA2, 0x8C, 0x43, 0xE7, 0xA2, 0x91, 0x43, 0xE7, 0xA3, 0x8A, 0x43, 0xE7, 0xA3, 0x8C, 0x43, 0xE7, - // Bytes 1040 - 107f 0xA3, 0xBB, 0x43, 0xE7, 0xA4, 0xAA, 0x43, 0xE7, + // Bytes 1140 - 117f 0xA4, 0xBA, 0x43, 0xE7, 0xA4, 0xBC, 0x43, 0xE7, 0xA4, 0xBE, 0x43, 0xE7, 0xA5, 0x88, 0x43, 0xE7, 0xA5, 0x89, 0x43, 0xE7, 0xA5, 0x90, 0x43, 0xE7, @@ -634,8 +669,8 @@ var decomps = [...]byte{ 0xA5, 0x9E, 0x43, 0xE7, 0xA5, 0xA5, 0x43, 0xE7, 0xA5, 0xBF, 0x43, 0xE7, 0xA6, 0x81, 0x43, 0xE7, 0xA6, 0x8D, 0x43, 0xE7, 0xA6, 0x8E, 0x43, 0xE7, - // Bytes 1080 - 10bf 0xA6, 0x8F, 0x43, 0xE7, 0xA6, 0xAE, 0x43, 0xE7, + // Bytes 1180 - 11bf 0xA6, 0xB8, 0x43, 0xE7, 0xA6, 0xBE, 0x43, 0xE7, 0xA7, 0x8A, 0x43, 0xE7, 0xA7, 0x98, 0x43, 0xE7, 0xA7, 0xAB, 0x43, 0xE7, 0xA8, 0x9C, 0x43, 0xE7, @@ -643,8 +678,8 @@ var decomps = [...]byte{ 0xA9, 0x8F, 0x43, 0xE7, 0xA9, 0xB4, 0x43, 0xE7, 0xA9, 0xBA, 0x43, 0xE7, 0xAA, 0x81, 0x43, 0xE7, 0xAA, 0xB1, 0x43, 0xE7, 0xAB, 0x8B, 0x43, 0xE7, - // Bytes 10c0 - 10ff 0xAB, 0xAE, 0x43, 0xE7, 0xAB, 0xB9, 0x43, 0xE7, + // Bytes 11c0 - 11ff 0xAC, 0xA0, 0x43, 0xE7, 0xAE, 0x8F, 0x43, 0xE7, 0xAF, 0x80, 0x43, 0xE7, 0xAF, 0x86, 0x43, 0xE7, 0xAF, 0x89, 0x43, 0xE7, 0xB0, 0xBE, 0x43, 0xE7, @@ -652,8 +687,8 @@ var decomps = [...]byte{ 0xB1, 0xBB, 0x43, 0xE7, 0xB2, 0x92, 0x43, 0xE7, 0xB2, 0xBE, 0x43, 0xE7, 0xB3, 0x92, 0x43, 0xE7, 0xB3, 0x96, 0x43, 0xE7, 0xB3, 0xA3, 0x43, 0xE7, - // Bytes 1100 - 113f 0xB3, 0xA7, 0x43, 0xE7, 0xB3, 0xA8, 0x43, 0xE7, + // Bytes 1200 - 123f 0xB3, 0xB8, 0x43, 0xE7, 0xB4, 0x80, 0x43, 0xE7, 0xB4, 0x90, 0x43, 0xE7, 0xB4, 0xA2, 0x43, 0xE7, 0xB4, 0xAF, 0x43, 0xE7, 0xB5, 0x82, 0x43, 0xE7, @@ -661,8 +696,8 @@ var decomps = [...]byte{ 0xB6, 0xA0, 0x43, 0xE7, 0xB6, 0xBE, 0x43, 0xE7, 0xB7, 0x87, 0x43, 0xE7, 0xB7, 0xB4, 0x43, 0xE7, 0xB8, 0x82, 0x43, 0xE7, 0xB8, 0x89, 0x43, 0xE7, - // Bytes 1140 - 117f 0xB8, 0xB7, 0x43, 0xE7, 0xB9, 0x81, 0x43, 0xE7, + // Bytes 1240 - 127f 0xB9, 0x85, 0x43, 0xE7, 0xBC, 0xB6, 0x43, 0xE7, 0xBC, 0xBE, 0x43, 0xE7, 0xBD, 0x91, 0x43, 0xE7, 0xBD, 0xB2, 0x43, 0xE7, 0xBD, 0xB9, 0x43, 0xE7, @@ -670,8 +705,8 @@ var decomps = [...]byte{ 0xBE, 0x8A, 0x43, 0xE7, 0xBE, 0x95, 0x43, 0xE7, 0xBE, 0x9A, 0x43, 0xE7, 0xBE, 0xBD, 0x43, 0xE7, 0xBF, 0xBA, 0x43, 0xE8, 0x80, 0x81, 0x43, 0xE8, - // Bytes 1180 - 11bf 0x80, 0x85, 0x43, 0xE8, 0x80, 0x8C, 0x43, 0xE8, + // Bytes 1280 - 12bf 0x80, 0x92, 0x43, 0xE8, 0x80, 0xB3, 0x43, 0xE8, 0x81, 0x86, 0x43, 0xE8, 0x81, 0xA0, 0x43, 0xE8, 0x81, 0xAF, 0x43, 0xE8, 0x81, 0xB0, 0x43, 0xE8, @@ -679,8 +714,8 @@ var decomps = [...]byte{ 0x82, 0x89, 0x43, 0xE8, 0x82, 0x8B, 0x43, 0xE8, 0x82, 0xAD, 0x43, 0xE8, 0x82, 0xB2, 0x43, 0xE8, 0x84, 0x83, 0x43, 0xE8, 0x84, 0xBE, 0x43, 0xE8, - // Bytes 11c0 - 11ff 0x87, 0x98, 0x43, 0xE8, 0x87, 0xA3, 0x43, 0xE8, + // Bytes 12c0 - 12ff 0x87, 0xA8, 0x43, 0xE8, 0x87, 0xAA, 0x43, 0xE8, 0x87, 0xAD, 0x43, 0xE8, 0x87, 0xB3, 0x43, 0xE8, 0x87, 0xBC, 0x43, 0xE8, 0x88, 0x81, 0x43, 0xE8, @@ -688,8 +723,8 @@ var decomps = [...]byte{ 0x88, 0x98, 0x43, 0xE8, 0x88, 0x9B, 0x43, 0xE8, 0x88, 0x9F, 0x43, 0xE8, 0x89, 0xAE, 0x43, 0xE8, 0x89, 0xAF, 0x43, 0xE8, 0x89, 0xB2, 0x43, 0xE8, - // Bytes 1200 - 123f 0x89, 0xB8, 0x43, 0xE8, 0x89, 0xB9, 0x43, 0xE8, + // Bytes 1300 - 133f 0x8A, 0x8B, 0x43, 0xE8, 0x8A, 0x91, 0x43, 0xE8, 0x8A, 0x9D, 0x43, 0xE8, 0x8A, 0xB1, 0x43, 0xE8, 0x8A, 0xB3, 0x43, 0xE8, 0x8A, 0xBD, 0x43, 0xE8, @@ -697,8 +732,8 @@ var decomps = [...]byte{ 0x8C, 0x9D, 0x43, 0xE8, 0x8C, 0xA3, 0x43, 0xE8, 0x8C, 0xB6, 0x43, 0xE8, 0x8D, 0x92, 0x43, 0xE8, 0x8D, 0x93, 0x43, 0xE8, 0x8D, 0xA3, 0x43, 0xE8, - // Bytes 1240 - 127f 0x8E, 0xAD, 0x43, 0xE8, 0x8E, 0xBD, 0x43, 0xE8, + // Bytes 1340 - 137f 0x8F, 0x89, 0x43, 0xE8, 0x8F, 0x8A, 0x43, 0xE8, 0x8F, 0x8C, 0x43, 0xE8, 0x8F, 0x9C, 0x43, 0xE8, 0x8F, 0xA7, 0x43, 0xE8, 0x8F, 0xAF, 0x43, 0xE8, @@ -706,8 +741,8 @@ var decomps = [...]byte{ 0x91, 0x89, 0x43, 0xE8, 0x91, 0x97, 0x43, 0xE8, 0x93, 0xAE, 0x43, 0xE8, 0x93, 0xB1, 0x43, 0xE8, 0x93, 0xB3, 0x43, 0xE8, 0x93, 0xBC, 0x43, 0xE8, - // Bytes 1280 - 12bf 0x94, 0x96, 0x43, 0xE8, 0x95, 0xA4, 0x43, 0xE8, + // Bytes 1380 - 13bf 0x97, 0x8D, 0x43, 0xE8, 0x97, 0xBA, 0x43, 0xE8, 0x98, 0x86, 0x43, 0xE8, 0x98, 0x92, 0x43, 0xE8, 0x98, 0xAD, 0x43, 0xE8, 0x98, 0xBF, 0x43, 0xE8, @@ -715,8 +750,8 @@ var decomps = [...]byte{ 0x99, 0x9C, 0x43, 0xE8, 0x99, 0xA7, 0x43, 0xE8, 0x99, 0xA9, 0x43, 0xE8, 0x99, 0xAB, 0x43, 0xE8, 0x9A, 0x88, 0x43, 0xE8, 0x9A, 0xA9, 0x43, 0xE8, - // Bytes 12c0 - 12ff 0x9B, 0xA2, 0x43, 0xE8, 0x9C, 0x8E, 0x43, 0xE8, + // Bytes 13c0 - 13ff 0x9C, 0xA8, 0x43, 0xE8, 0x9D, 0xAB, 0x43, 0xE8, 0x9D, 0xB9, 0x43, 0xE8, 0x9E, 0x86, 0x43, 0xE8, 0x9E, 0xBA, 0x43, 0xE8, 0x9F, 0xA1, 0x43, 0xE8, @@ -724,8 +759,8 @@ var decomps = [...]byte{ 0xA1, 0x80, 0x43, 0xE8, 0xA1, 0x8C, 0x43, 0xE8, 0xA1, 0xA0, 0x43, 0xE8, 0xA1, 0xA3, 0x43, 0xE8, 0xA3, 0x82, 0x43, 0xE8, 0xA3, 0x8F, 0x43, 0xE8, - // Bytes 1300 - 133f 0xA3, 0x97, 0x43, 0xE8, 0xA3, 0x9E, 0x43, 0xE8, + // Bytes 1400 - 143f 0xA3, 0xA1, 0x43, 0xE8, 0xA3, 0xB8, 0x43, 0xE8, 0xA3, 0xBA, 0x43, 0xE8, 0xA4, 0x90, 0x43, 0xE8, 0xA5, 0x81, 0x43, 0xE8, 0xA5, 0xA4, 0x43, 0xE8, @@ -733,8 +768,8 @@ var decomps = [...]byte{ 0xA6, 0x8B, 0x43, 0xE8, 0xA6, 0x96, 0x43, 0xE8, 0xA7, 0x92, 0x43, 0xE8, 0xA7, 0xA3, 0x43, 0xE8, 0xA8, 0x80, 0x43, 0xE8, 0xAA, 0xA0, 0x43, 0xE8, - // Bytes 1340 - 137f 0xAA, 0xAA, 0x43, 0xE8, 0xAA, 0xBF, 0x43, 0xE8, + // Bytes 1440 - 147f 0xAB, 0x8B, 0x43, 0xE8, 0xAB, 0x92, 0x43, 0xE8, 0xAB, 0x96, 0x43, 0xE8, 0xAB, 0xAD, 0x43, 0xE8, 0xAB, 0xB8, 0x43, 0xE8, 0xAB, 0xBE, 0x43, 0xE8, @@ -742,8 +777,8 @@ var decomps = [...]byte{ 0xAD, 0x98, 0x43, 0xE8, 0xAE, 0x80, 0x43, 0xE8, 0xAE, 0x8A, 0x43, 0xE8, 0xB0, 0xB7, 0x43, 0xE8, 0xB1, 0x86, 0x43, 0xE8, 0xB1, 0x88, 0x43, 0xE8, - // Bytes 1380 - 13bf 0xB1, 0x95, 0x43, 0xE8, 0xB1, 0xB8, 0x43, 0xE8, + // Bytes 1480 - 14bf 0xB2, 0x9D, 0x43, 0xE8, 0xB2, 0xA1, 0x43, 0xE8, 0xB2, 0xA9, 0x43, 0xE8, 0xB2, 0xAB, 0x43, 0xE8, 0xB3, 0x81, 0x43, 0xE8, 0xB3, 0x82, 0x43, 0xE8, @@ -751,8 +786,8 @@ var decomps = [...]byte{ 0xB3, 0x93, 0x43, 0xE8, 0xB4, 0x88, 0x43, 0xE8, 0xB4, 0x9B, 0x43, 0xE8, 0xB5, 0xA4, 0x43, 0xE8, 0xB5, 0xB0, 0x43, 0xE8, 0xB5, 0xB7, 0x43, 0xE8, - // Bytes 13c0 - 13ff 0xB6, 0xB3, 0x43, 0xE8, 0xB6, 0xBC, 0x43, 0xE8, + // Bytes 14c0 - 14ff 0xB7, 0x8B, 0x43, 0xE8, 0xB7, 0xAF, 0x43, 0xE8, 0xB7, 0xB0, 0x43, 0xE8, 0xBA, 0xAB, 0x43, 0xE8, 0xBB, 0x8A, 0x43, 0xE8, 0xBB, 0x94, 0x43, 0xE8, @@ -760,8 +795,8 @@ var decomps = [...]byte{ 0xBC, 0xB8, 0x43, 0xE8, 0xBC, 0xBB, 0x43, 0xE8, 0xBD, 0xA2, 0x43, 0xE8, 0xBE, 0x9B, 0x43, 0xE8, 0xBE, 0x9E, 0x43, 0xE8, 0xBE, 0xB0, 0x43, 0xE8, - // Bytes 1400 - 143f 0xBE, 0xB5, 0x43, 0xE8, 0xBE, 0xB6, 0x43, 0xE9, + // Bytes 1500 - 153f 0x80, 0xA3, 0x43, 0xE9, 0x80, 0xB8, 0x43, 0xE9, 0x81, 0x8A, 0x43, 0xE9, 0x81, 0xA9, 0x43, 0xE9, 0x81, 0xB2, 0x43, 0xE9, 0x81, 0xBC, 0x43, 0xE9, @@ -769,8 +804,8 @@ var decomps = [...]byte{ 0x82, 0x94, 0x43, 0xE9, 0x83, 0x8E, 0x43, 0xE9, 0x83, 0x9E, 0x43, 0xE9, 0x83, 0xB1, 0x43, 0xE9, 0x83, 0xBD, 0x43, 0xE9, 0x84, 0x91, 0x43, 0xE9, - // Bytes 1440 - 147f 0x84, 0x9B, 0x43, 0xE9, 0x85, 0x89, 0x43, 0xE9, + // Bytes 1540 - 157f 0x85, 0x8D, 0x43, 0xE9, 0x85, 0xAA, 0x43, 0xE9, 0x86, 0x99, 0x43, 0xE9, 0x86, 0xB4, 0x43, 0xE9, 0x87, 0x86, 0x43, 0xE9, 0x87, 0x8C, 0x43, 0xE9, @@ -778,8 +813,8 @@ var decomps = [...]byte{ 0x88, 0xB4, 0x43, 0xE9, 0x88, 0xB8, 0x43, 0xE9, 0x89, 0xB6, 0x43, 0xE9, 0x89, 0xBC, 0x43, 0xE9, 0x8B, 0x97, 0x43, 0xE9, 0x8B, 0x98, 0x43, 0xE9, - // Bytes 1480 - 14bf 0x8C, 0x84, 0x43, 0xE9, 0x8D, 0x8A, 0x43, 0xE9, + // Bytes 1580 - 15bf 0x8F, 0xB9, 0x43, 0xE9, 0x90, 0x95, 0x43, 0xE9, 0x95, 0xB7, 0x43, 0xE9, 0x96, 0x80, 0x43, 0xE9, 0x96, 0x8B, 0x43, 0xE9, 0x96, 0xAD, 0x43, 0xE9, @@ -787,8 +822,8 @@ var decomps = [...]byte{ 0x98, 0xAE, 0x43, 0xE9, 0x99, 0x8B, 0x43, 0xE9, 0x99, 0x8D, 0x43, 0xE9, 0x99, 0xB5, 0x43, 0xE9, 0x99, 0xB8, 0x43, 0xE9, 0x99, 0xBC, 0x43, 0xE9, - // Bytes 14c0 - 14ff 0x9A, 0x86, 0x43, 0xE9, 0x9A, 0xA3, 0x43, 0xE9, + // Bytes 15c0 - 15ff 0x9A, 0xB6, 0x43, 0xE9, 0x9A, 0xB7, 0x43, 0xE9, 0x9A, 0xB8, 0x43, 0xE9, 0x9A, 0xB9, 0x43, 0xE9, 0x9B, 0x83, 0x43, 0xE9, 0x9B, 0xA2, 0x43, 0xE9, @@ -796,8 +831,8 @@ var decomps = [...]byte{ 0x9B, 0xB6, 0x43, 0xE9, 0x9B, 0xB7, 0x43, 0xE9, 0x9C, 0xA3, 0x43, 0xE9, 0x9C, 0xB2, 0x43, 0xE9, 0x9D, 0x88, 0x43, 0xE9, 0x9D, 0x91, 0x43, 0xE9, - // Bytes 1500 - 153f 0x9D, 0x96, 0x43, 0xE9, 0x9D, 0x9E, 0x43, 0xE9, + // Bytes 1600 - 163f 0x9D, 0xA2, 0x43, 0xE9, 0x9D, 0xA9, 0x43, 0xE9, 0x9F, 0x8B, 0x43, 0xE9, 0x9F, 0x9B, 0x43, 0xE9, 0x9F, 0xA0, 0x43, 0xE9, 0x9F, 0xAD, 0x43, 0xE9, @@ -805,8 +840,8 @@ var decomps = [...]byte{ 0xA0, 0x81, 0x43, 0xE9, 0xA0, 0x85, 0x43, 0xE9, 0xA0, 0x8B, 0x43, 0xE9, 0xA0, 0x98, 0x43, 0xE9, 0xA0, 0xA9, 0x43, 0xE9, 0xA0, 0xBB, 0x43, 0xE9, - // Bytes 1540 - 157f 0xA1, 0x9E, 0x43, 0xE9, 0xA2, 0xA8, 0x43, 0xE9, + // Bytes 1640 - 167f 0xA3, 0x9B, 0x43, 0xE9, 0xA3, 0x9F, 0x43, 0xE9, 0xA3, 0xA2, 0x43, 0xE9, 0xA3, 0xAF, 0x43, 0xE9, 0xA3, 0xBC, 0x43, 0xE9, 0xA4, 0xA8, 0x43, 0xE9, @@ -814,8 +849,8 @@ var decomps = [...]byte{ 0xA6, 0x99, 0x43, 0xE9, 0xA6, 0xA7, 0x43, 0xE9, 0xA6, 0xAC, 0x43, 0xE9, 0xA7, 0x82, 0x43, 0xE9, 0xA7, 0xB1, 0x43, 0xE9, 0xA7, 0xBE, 0x43, 0xE9, - // Bytes 1580 - 15bf 0xA9, 0xAA, 0x43, 0xE9, 0xAA, 0xA8, 0x43, 0xE9, + // Bytes 1680 - 16bf 0xAB, 0x98, 0x43, 0xE9, 0xAB, 0x9F, 0x43, 0xE9, 0xAC, 0x92, 0x43, 0xE9, 0xAC, 0xA5, 0x43, 0xE9, 0xAC, 0xAF, 0x43, 0xE9, 0xAC, 0xB2, 0x43, 0xE9, @@ -823,8 +858,8 @@ var decomps = [...]byte{ 0xAD, 0xAF, 0x43, 0xE9, 0xB1, 0x80, 0x43, 0xE9, 0xB1, 0x97, 0x43, 0xE9, 0xB3, 0xA5, 0x43, 0xE9, 0xB3, 0xBD, 0x43, 0xE9, 0xB5, 0xA7, 0x43, 0xE9, - // Bytes 15c0 - 15ff 0xB6, 0xB4, 0x43, 0xE9, 0xB7, 0xBA, 0x43, 0xE9, + // Bytes 16c0 - 16ff 0xB8, 0x9E, 0x43, 0xE9, 0xB9, 0xB5, 0x43, 0xE9, 0xB9, 0xBF, 0x43, 0xE9, 0xBA, 0x97, 0x43, 0xE9, 0xBA, 0x9F, 0x43, 0xE9, 0xBA, 0xA5, 0x43, 0xE9, @@ -832,925 +867,864 @@ var decomps = [...]byte{ 0xBB, 0x8D, 0x43, 0xE9, 0xBB, 0x8E, 0x43, 0xE9, 0xBB, 0x91, 0x43, 0xE9, 0xBB, 0xB9, 0x43, 0xE9, 0xBB, 0xBD, 0x43, 0xE9, 0xBB, 0xBE, 0x43, 0xE9, - // Bytes 1600 - 163f 0xBC, 0x85, 0x43, 0xE9, 0xBC, 0x8E, 0x43, 0xE9, + // Bytes 1700 - 173f 0xBC, 0x8F, 0x43, 0xE9, 0xBC, 0x93, 0x43, 0xE9, 0xBC, 0x96, 0x43, 0xE9, 0xBC, 0xA0, 0x43, 0xE9, 0xBC, 0xBB, 0x43, 0xE9, 0xBD, 0x83, 0x43, 0xE9, 0xBD, 0x8A, 0x43, 0xE9, 0xBD, 0x92, 0x43, 0xE9, 0xBE, 0x8D, 0x43, 0xE9, 0xBE, 0x8E, 0x43, 0xE9, 0xBE, 0x9C, 0x43, 0xE9, 0xBE, 0x9F, 0x43, 0xE9, - 0xBE, 0xA0, 0x43, 0xEA, 0x9C, 0xA7, 0x43, 0xEA, - // Bytes 1640 - 167f - 0x9D, 0xAF, 0x43, 0xEA, 0xAC, 0xB7, 0x43, 0xEA, - 0xAD, 0x92, 0x44, 0xF0, 0xA0, 0x84, 0xA2, 0x44, - 0xF0, 0xA0, 0x94, 0x9C, 0x44, 0xF0, 0xA0, 0x94, - 0xA5, 0x44, 0xF0, 0xA0, 0x95, 0x8B, 0x44, 0xF0, - 0xA0, 0x98, 0xBA, 0x44, 0xF0, 0xA0, 0xA0, 0x84, - 0x44, 0xF0, 0xA0, 0xA3, 0x9E, 0x44, 0xF0, 0xA0, - 0xA8, 0xAC, 0x44, 0xF0, 0xA0, 0xAD, 0xA3, 0x44, - 0xF0, 0xA1, 0x93, 0xA4, 0x44, 0xF0, 0xA1, 0x9A, - // Bytes 1680 - 16bf - 0xA8, 0x44, 0xF0, 0xA1, 0x9B, 0xAA, 0x44, 0xF0, - 0xA1, 0xA7, 0x88, 0x44, 0xF0, 0xA1, 0xAC, 0x98, - 0x44, 0xF0, 0xA1, 0xB4, 0x8B, 0x44, 0xF0, 0xA1, - 0xB7, 0xA4, 0x44, 0xF0, 0xA1, 0xB7, 0xA6, 0x44, - 0xF0, 0xA2, 0x86, 0x83, 0x44, 0xF0, 0xA2, 0x86, - 0x9F, 0x44, 0xF0, 0xA2, 0x8C, 0xB1, 0x44, 0xF0, - 0xA2, 0x9B, 0x94, 0x44, 0xF0, 0xA2, 0xA1, 0x84, - 0x44, 0xF0, 0xA2, 0xA1, 0x8A, 0x44, 0xF0, 0xA2, - // Bytes 16c0 - 16ff - 0xAC, 0x8C, 0x44, 0xF0, 0xA2, 0xAF, 0xB1, 0x44, - 0xF0, 0xA3, 0x80, 0x8A, 0x44, 0xF0, 0xA3, 0x8A, - 0xB8, 0x44, 0xF0, 0xA3, 0x8D, 0x9F, 0x44, 0xF0, - 0xA3, 0x8E, 0x93, 0x44, 0xF0, 0xA3, 0x8E, 0x9C, - 0x44, 0xF0, 0xA3, 0x8F, 0x83, 0x44, 0xF0, 0xA3, - 0x8F, 0x95, 0x44, 0xF0, 0xA3, 0x91, 0xAD, 0x44, - 0xF0, 0xA3, 0x9A, 0xA3, 0x44, 0xF0, 0xA3, 0xA2, - 0xA7, 0x44, 0xF0, 0xA3, 0xAA, 0x8D, 0x44, 0xF0, - // Bytes 1700 - 173f - 0xA3, 0xAB, 0xBA, 0x44, 0xF0, 0xA3, 0xB2, 0xBC, - 0x44, 0xF0, 0xA3, 0xB4, 0x9E, 0x44, 0xF0, 0xA3, - 0xBB, 0x91, 0x44, 0xF0, 0xA3, 0xBD, 0x9E, 0x44, - 0xF0, 0xA3, 0xBE, 0x8E, 0x44, 0xF0, 0xA4, 0x89, - 0xA3, 0x44, 0xF0, 0xA4, 0x8B, 0xAE, 0x44, 0xF0, - 0xA4, 0x8E, 0xAB, 0x44, 0xF0, 0xA4, 0x98, 0x88, - 0x44, 0xF0, 0xA4, 0x9C, 0xB5, 0x44, 0xF0, 0xA4, - 0xA0, 0x94, 0x44, 0xF0, 0xA4, 0xB0, 0xB6, 0x44, + 0xBE, 0xA0, 0x43, 0xEA, 0x99, 0x91, 0x43, 0xEA, + 0x9A, 0x89, 0x43, 0xEA, 0x9C, 0xA7, 0x43, 0xEA, // Bytes 1740 - 177f - 0xF0, 0xA4, 0xB2, 0x92, 0x44, 0xF0, 0xA4, 0xBE, - 0xA1, 0x44, 0xF0, 0xA4, 0xBE, 0xB8, 0x44, 0xF0, - 0xA5, 0x81, 0x84, 0x44, 0xF0, 0xA5, 0x83, 0xB2, - 0x44, 0xF0, 0xA5, 0x83, 0xB3, 0x44, 0xF0, 0xA5, - 0x84, 0x99, 0x44, 0xF0, 0xA5, 0x84, 0xB3, 0x44, - 0xF0, 0xA5, 0x89, 0x89, 0x44, 0xF0, 0xA5, 0x90, - 0x9D, 0x44, 0xF0, 0xA5, 0x98, 0xA6, 0x44, 0xF0, - 0xA5, 0x9A, 0x9A, 0x44, 0xF0, 0xA5, 0x9B, 0x85, + 0x9D, 0xAF, 0x43, 0xEA, 0x9E, 0x8E, 0x43, 0xEA, + 0xAC, 0xB7, 0x43, 0xEA, 0xAD, 0x92, 0x43, 0xEA, + 0xAD, 0xA6, 0x43, 0xEA, 0xAD, 0xA7, 0x44, 0xF0, + 0x9D, 0xBC, 0x84, 0x44, 0xF0, 0x9D, 0xBC, 0x85, + 0x44, 0xF0, 0x9D, 0xBC, 0x86, 0x44, 0xF0, 0x9D, + 0xBC, 0x88, 0x44, 0xF0, 0x9D, 0xBC, 0x8A, 0x44, + 0xF0, 0x9D, 0xBC, 0x9E, 0x44, 0xF0, 0xA0, 0x84, + 0xA2, 0x44, 0xF0, 0xA0, 0x94, 0x9C, 0x44, 0xF0, // Bytes 1780 - 17bf - 0x44, 0xF0, 0xA5, 0xA5, 0xBC, 0x44, 0xF0, 0xA5, - 0xAA, 0xA7, 0x44, 0xF0, 0xA5, 0xAE, 0xAB, 0x44, - 0xF0, 0xA5, 0xB2, 0x80, 0x44, 0xF0, 0xA5, 0xB3, - 0x90, 0x44, 0xF0, 0xA5, 0xBE, 0x86, 0x44, 0xF0, - 0xA6, 0x87, 0x9A, 0x44, 0xF0, 0xA6, 0x88, 0xA8, - 0x44, 0xF0, 0xA6, 0x89, 0x87, 0x44, 0xF0, 0xA6, - 0x8B, 0x99, 0x44, 0xF0, 0xA6, 0x8C, 0xBE, 0x44, - 0xF0, 0xA6, 0x93, 0x9A, 0x44, 0xF0, 0xA6, 0x94, + 0xA0, 0x94, 0xA5, 0x44, 0xF0, 0xA0, 0x95, 0x8B, + 0x44, 0xF0, 0xA0, 0x98, 0xBA, 0x44, 0xF0, 0xA0, + 0xA0, 0x84, 0x44, 0xF0, 0xA0, 0xA3, 0x9E, 0x44, + 0xF0, 0xA0, 0xA8, 0xAC, 0x44, 0xF0, 0xA0, 0xAD, + 0xA3, 0x44, 0xF0, 0xA1, 0x93, 0xA4, 0x44, 0xF0, + 0xA1, 0x9A, 0xA8, 0x44, 0xF0, 0xA1, 0x9B, 0xAA, + 0x44, 0xF0, 0xA1, 0xA7, 0x88, 0x44, 0xF0, 0xA1, + 0xAC, 0x98, 0x44, 0xF0, 0xA1, 0xB4, 0x8B, 0x44, // Bytes 17c0 - 17ff - 0xA3, 0x44, 0xF0, 0xA6, 0x96, 0xA8, 0x44, 0xF0, - 0xA6, 0x9E, 0xA7, 0x44, 0xF0, 0xA6, 0x9E, 0xB5, - 0x44, 0xF0, 0xA6, 0xAC, 0xBC, 0x44, 0xF0, 0xA6, - 0xB0, 0xB6, 0x44, 0xF0, 0xA6, 0xB3, 0x95, 0x44, - 0xF0, 0xA6, 0xB5, 0xAB, 0x44, 0xF0, 0xA6, 0xBC, - 0xAC, 0x44, 0xF0, 0xA6, 0xBE, 0xB1, 0x44, 0xF0, - 0xA7, 0x83, 0x92, 0x44, 0xF0, 0xA7, 0x8F, 0x8A, - 0x44, 0xF0, 0xA7, 0x99, 0xA7, 0x44, 0xF0, 0xA7, + 0xF0, 0xA1, 0xB7, 0xA4, 0x44, 0xF0, 0xA1, 0xB7, + 0xA6, 0x44, 0xF0, 0xA2, 0x86, 0x83, 0x44, 0xF0, + 0xA2, 0x86, 0x9F, 0x44, 0xF0, 0xA2, 0x8C, 0xB1, + 0x44, 0xF0, 0xA2, 0x9B, 0x94, 0x44, 0xF0, 0xA2, + 0xA1, 0x84, 0x44, 0xF0, 0xA2, 0xA1, 0x8A, 0x44, + 0xF0, 0xA2, 0xAC, 0x8C, 0x44, 0xF0, 0xA2, 0xAF, + 0xB1, 0x44, 0xF0, 0xA3, 0x80, 0x8A, 0x44, 0xF0, + 0xA3, 0x8A, 0xB8, 0x44, 0xF0, 0xA3, 0x8D, 0x9F, // Bytes 1800 - 183f - 0xA2, 0xAE, 0x44, 0xF0, 0xA7, 0xA5, 0xA6, 0x44, - 0xF0, 0xA7, 0xB2, 0xA8, 0x44, 0xF0, 0xA7, 0xBB, - 0x93, 0x44, 0xF0, 0xA7, 0xBC, 0xAF, 0x44, 0xF0, - 0xA8, 0x97, 0x92, 0x44, 0xF0, 0xA8, 0x97, 0xAD, - 0x44, 0xF0, 0xA8, 0x9C, 0xAE, 0x44, 0xF0, 0xA8, - 0xAF, 0xBA, 0x44, 0xF0, 0xA8, 0xB5, 0xB7, 0x44, - 0xF0, 0xA9, 0x85, 0x85, 0x44, 0xF0, 0xA9, 0x87, - 0x9F, 0x44, 0xF0, 0xA9, 0x88, 0x9A, 0x44, 0xF0, + 0x44, 0xF0, 0xA3, 0x8E, 0x93, 0x44, 0xF0, 0xA3, + 0x8E, 0x9C, 0x44, 0xF0, 0xA3, 0x8F, 0x83, 0x44, + 0xF0, 0xA3, 0x8F, 0x95, 0x44, 0xF0, 0xA3, 0x91, + 0xAD, 0x44, 0xF0, 0xA3, 0x9A, 0xA3, 0x44, 0xF0, + 0xA3, 0xA2, 0xA7, 0x44, 0xF0, 0xA3, 0xAA, 0x8D, + 0x44, 0xF0, 0xA3, 0xAB, 0xBA, 0x44, 0xF0, 0xA3, + 0xB2, 0xBC, 0x44, 0xF0, 0xA3, 0xB4, 0x9E, 0x44, + 0xF0, 0xA3, 0xBB, 0x91, 0x44, 0xF0, 0xA3, 0xBD, // Bytes 1840 - 187f - 0xA9, 0x90, 0x8A, 0x44, 0xF0, 0xA9, 0x92, 0x96, - 0x44, 0xF0, 0xA9, 0x96, 0xB6, 0x44, 0xF0, 0xA9, - 0xAC, 0xB0, 0x44, 0xF0, 0xAA, 0x83, 0x8E, 0x44, - 0xF0, 0xAA, 0x84, 0x85, 0x44, 0xF0, 0xAA, 0x88, - 0x8E, 0x44, 0xF0, 0xAA, 0x8A, 0x91, 0x44, 0xF0, - 0xAA, 0x8E, 0x92, 0x44, 0xF0, 0xAA, 0x98, 0x80, - 0x42, 0x21, 0x21, 0x42, 0x21, 0x3F, 0x42, 0x2E, - 0x2E, 0x42, 0x30, 0x2C, 0x42, 0x30, 0x2E, 0x42, + 0x9E, 0x44, 0xF0, 0xA3, 0xBE, 0x8E, 0x44, 0xF0, + 0xA4, 0x89, 0xA3, 0x44, 0xF0, 0xA4, 0x8B, 0xAE, + 0x44, 0xF0, 0xA4, 0x8E, 0xAB, 0x44, 0xF0, 0xA4, + 0x98, 0x88, 0x44, 0xF0, 0xA4, 0x9C, 0xB5, 0x44, + 0xF0, 0xA4, 0xA0, 0x94, 0x44, 0xF0, 0xA4, 0xB0, + 0xB6, 0x44, 0xF0, 0xA4, 0xB2, 0x92, 0x44, 0xF0, + 0xA4, 0xBE, 0xA1, 0x44, 0xF0, 0xA4, 0xBE, 0xB8, + 0x44, 0xF0, 0xA5, 0x81, 0x84, 0x44, 0xF0, 0xA5, // Bytes 1880 - 18bf - 0x31, 0x2C, 0x42, 0x31, 0x2E, 0x42, 0x31, 0x30, - 0x42, 0x31, 0x31, 0x42, 0x31, 0x32, 0x42, 0x31, - 0x33, 0x42, 0x31, 0x34, 0x42, 0x31, 0x35, 0x42, - 0x31, 0x36, 0x42, 0x31, 0x37, 0x42, 0x31, 0x38, - 0x42, 0x31, 0x39, 0x42, 0x32, 0x2C, 0x42, 0x32, - 0x2E, 0x42, 0x32, 0x30, 0x42, 0x32, 0x31, 0x42, - 0x32, 0x32, 0x42, 0x32, 0x33, 0x42, 0x32, 0x34, - 0x42, 0x32, 0x35, 0x42, 0x32, 0x36, 0x42, 0x32, + 0x83, 0xB2, 0x44, 0xF0, 0xA5, 0x83, 0xB3, 0x44, + 0xF0, 0xA5, 0x84, 0x99, 0x44, 0xF0, 0xA5, 0x84, + 0xB3, 0x44, 0xF0, 0xA5, 0x89, 0x89, 0x44, 0xF0, + 0xA5, 0x90, 0x9D, 0x44, 0xF0, 0xA5, 0x98, 0xA6, + 0x44, 0xF0, 0xA5, 0x9A, 0x9A, 0x44, 0xF0, 0xA5, + 0x9B, 0x85, 0x44, 0xF0, 0xA5, 0xA5, 0xBC, 0x44, + 0xF0, 0xA5, 0xAA, 0xA7, 0x44, 0xF0, 0xA5, 0xAE, + 0xAB, 0x44, 0xF0, 0xA5, 0xB2, 0x80, 0x44, 0xF0, // Bytes 18c0 - 18ff - 0x37, 0x42, 0x32, 0x38, 0x42, 0x32, 0x39, 0x42, - 0x33, 0x2C, 0x42, 0x33, 0x2E, 0x42, 0x33, 0x30, - 0x42, 0x33, 0x31, 0x42, 0x33, 0x32, 0x42, 0x33, - 0x33, 0x42, 0x33, 0x34, 0x42, 0x33, 0x35, 0x42, - 0x33, 0x36, 0x42, 0x33, 0x37, 0x42, 0x33, 0x38, - 0x42, 0x33, 0x39, 0x42, 0x34, 0x2C, 0x42, 0x34, - 0x2E, 0x42, 0x34, 0x30, 0x42, 0x34, 0x31, 0x42, - 0x34, 0x32, 0x42, 0x34, 0x33, 0x42, 0x34, 0x34, + 0xA5, 0xB3, 0x90, 0x44, 0xF0, 0xA5, 0xBE, 0x86, + 0x44, 0xF0, 0xA6, 0x87, 0x9A, 0x44, 0xF0, 0xA6, + 0x88, 0xA8, 0x44, 0xF0, 0xA6, 0x89, 0x87, 0x44, + 0xF0, 0xA6, 0x8B, 0x99, 0x44, 0xF0, 0xA6, 0x8C, + 0xBE, 0x44, 0xF0, 0xA6, 0x93, 0x9A, 0x44, 0xF0, + 0xA6, 0x94, 0xA3, 0x44, 0xF0, 0xA6, 0x96, 0xA8, + 0x44, 0xF0, 0xA6, 0x9E, 0xA7, 0x44, 0xF0, 0xA6, + 0x9E, 0xB5, 0x44, 0xF0, 0xA6, 0xAC, 0xBC, 0x44, // Bytes 1900 - 193f - 0x42, 0x34, 0x35, 0x42, 0x34, 0x36, 0x42, 0x34, - 0x37, 0x42, 0x34, 0x38, 0x42, 0x34, 0x39, 0x42, - 0x35, 0x2C, 0x42, 0x35, 0x2E, 0x42, 0x35, 0x30, - 0x42, 0x36, 0x2C, 0x42, 0x36, 0x2E, 0x42, 0x37, - 0x2C, 0x42, 0x37, 0x2E, 0x42, 0x38, 0x2C, 0x42, - 0x38, 0x2E, 0x42, 0x39, 0x2C, 0x42, 0x39, 0x2E, - 0x42, 0x3D, 0x3D, 0x42, 0x3F, 0x21, 0x42, 0x3F, - 0x3F, 0x42, 0x41, 0x55, 0x42, 0x42, 0x71, 0x42, + 0xF0, 0xA6, 0xB0, 0xB6, 0x44, 0xF0, 0xA6, 0xB3, + 0x95, 0x44, 0xF0, 0xA6, 0xB5, 0xAB, 0x44, 0xF0, + 0xA6, 0xBC, 0xAC, 0x44, 0xF0, 0xA6, 0xBE, 0xB1, + 0x44, 0xF0, 0xA7, 0x83, 0x92, 0x44, 0xF0, 0xA7, + 0x8F, 0x8A, 0x44, 0xF0, 0xA7, 0x99, 0xA7, 0x44, + 0xF0, 0xA7, 0xA2, 0xAE, 0x44, 0xF0, 0xA7, 0xA5, + 0xA6, 0x44, 0xF0, 0xA7, 0xB2, 0xA8, 0x44, 0xF0, + 0xA7, 0xBB, 0x93, 0x44, 0xF0, 0xA7, 0xBC, 0xAF, // Bytes 1940 - 197f - 0x43, 0x44, 0x42, 0x44, 0x4A, 0x42, 0x44, 0x5A, - 0x42, 0x44, 0x7A, 0x42, 0x47, 0x42, 0x42, 0x47, - 0x79, 0x42, 0x48, 0x50, 0x42, 0x48, 0x56, 0x42, - 0x48, 0x67, 0x42, 0x48, 0x7A, 0x42, 0x49, 0x49, - 0x42, 0x49, 0x4A, 0x42, 0x49, 0x55, 0x42, 0x49, - 0x56, 0x42, 0x49, 0x58, 0x42, 0x4B, 0x42, 0x42, - 0x4B, 0x4B, 0x42, 0x4B, 0x4D, 0x42, 0x4C, 0x4A, - 0x42, 0x4C, 0x6A, 0x42, 0x4D, 0x42, 0x42, 0x4D, + 0x44, 0xF0, 0xA8, 0x97, 0x92, 0x44, 0xF0, 0xA8, + 0x97, 0xAD, 0x44, 0xF0, 0xA8, 0x9C, 0xAE, 0x44, + 0xF0, 0xA8, 0xAF, 0xBA, 0x44, 0xF0, 0xA8, 0xB5, + 0xB7, 0x44, 0xF0, 0xA9, 0x85, 0x85, 0x44, 0xF0, + 0xA9, 0x87, 0x9F, 0x44, 0xF0, 0xA9, 0x88, 0x9A, + 0x44, 0xF0, 0xA9, 0x90, 0x8A, 0x44, 0xF0, 0xA9, + 0x92, 0x96, 0x44, 0xF0, 0xA9, 0x96, 0xB6, 0x44, + 0xF0, 0xA9, 0xAC, 0xB0, 0x44, 0xF0, 0xAA, 0x83, // Bytes 1980 - 19bf - 0x43, 0x42, 0x4D, 0x44, 0x42, 0x4D, 0x52, 0x42, - 0x4D, 0x56, 0x42, 0x4D, 0x57, 0x42, 0x4E, 0x4A, - 0x42, 0x4E, 0x6A, 0x42, 0x4E, 0x6F, 0x42, 0x50, - 0x48, 0x42, 0x50, 0x52, 0x42, 0x50, 0x61, 0x42, - 0x52, 0x73, 0x42, 0x53, 0x44, 0x42, 0x53, 0x4D, - 0x42, 0x53, 0x53, 0x42, 0x53, 0x76, 0x42, 0x54, - 0x4D, 0x42, 0x56, 0x49, 0x42, 0x57, 0x43, 0x42, - 0x57, 0x5A, 0x42, 0x57, 0x62, 0x42, 0x58, 0x49, + 0x8E, 0x44, 0xF0, 0xAA, 0x84, 0x85, 0x44, 0xF0, + 0xAA, 0x88, 0x8E, 0x44, 0xF0, 0xAA, 0x8A, 0x91, + 0x44, 0xF0, 0xAA, 0x8E, 0x92, 0x44, 0xF0, 0xAA, + 0x98, 0x80, 0x42, 0x21, 0x21, 0x42, 0x21, 0x3F, + 0x42, 0x2E, 0x2E, 0x42, 0x30, 0x2C, 0x42, 0x30, + 0x2E, 0x42, 0x31, 0x2C, 0x42, 0x31, 0x2E, 0x42, + 0x31, 0x30, 0x42, 0x31, 0x31, 0x42, 0x31, 0x32, + 0x42, 0x31, 0x33, 0x42, 0x31, 0x34, 0x42, 0x31, // Bytes 19c0 - 19ff - 0x42, 0x63, 0x63, 0x42, 0x63, 0x64, 0x42, 0x63, - 0x6D, 0x42, 0x64, 0x42, 0x42, 0x64, 0x61, 0x42, - 0x64, 0x6C, 0x42, 0x64, 0x6D, 0x42, 0x64, 0x7A, - 0x42, 0x65, 0x56, 0x42, 0x66, 0x66, 0x42, 0x66, - 0x69, 0x42, 0x66, 0x6C, 0x42, 0x66, 0x6D, 0x42, - 0x68, 0x61, 0x42, 0x69, 0x69, 0x42, 0x69, 0x6A, - 0x42, 0x69, 0x6E, 0x42, 0x69, 0x76, 0x42, 0x69, - 0x78, 0x42, 0x6B, 0x41, 0x42, 0x6B, 0x56, 0x42, + 0x35, 0x42, 0x31, 0x36, 0x42, 0x31, 0x37, 0x42, + 0x31, 0x38, 0x42, 0x31, 0x39, 0x42, 0x32, 0x2C, + 0x42, 0x32, 0x2E, 0x42, 0x32, 0x30, 0x42, 0x32, + 0x31, 0x42, 0x32, 0x32, 0x42, 0x32, 0x33, 0x42, + 0x32, 0x34, 0x42, 0x32, 0x35, 0x42, 0x32, 0x36, + 0x42, 0x32, 0x37, 0x42, 0x32, 0x38, 0x42, 0x32, + 0x39, 0x42, 0x33, 0x2C, 0x42, 0x33, 0x2E, 0x42, + 0x33, 0x30, 0x42, 0x33, 0x31, 0x42, 0x33, 0x32, // Bytes 1a00 - 1a3f - 0x6B, 0x57, 0x42, 0x6B, 0x67, 0x42, 0x6B, 0x6C, - 0x42, 0x6B, 0x6D, 0x42, 0x6B, 0x74, 0x42, 0x6C, - 0x6A, 0x42, 0x6C, 0x6D, 0x42, 0x6C, 0x6E, 0x42, - 0x6C, 0x78, 0x42, 0x6D, 0x32, 0x42, 0x6D, 0x33, - 0x42, 0x6D, 0x41, 0x42, 0x6D, 0x56, 0x42, 0x6D, - 0x57, 0x42, 0x6D, 0x62, 0x42, 0x6D, 0x67, 0x42, - 0x6D, 0x6C, 0x42, 0x6D, 0x6D, 0x42, 0x6D, 0x73, - 0x42, 0x6E, 0x41, 0x42, 0x6E, 0x46, 0x42, 0x6E, + 0x42, 0x33, 0x33, 0x42, 0x33, 0x34, 0x42, 0x33, + 0x35, 0x42, 0x33, 0x36, 0x42, 0x33, 0x37, 0x42, + 0x33, 0x38, 0x42, 0x33, 0x39, 0x42, 0x34, 0x2C, + 0x42, 0x34, 0x2E, 0x42, 0x34, 0x30, 0x42, 0x34, + 0x31, 0x42, 0x34, 0x32, 0x42, 0x34, 0x33, 0x42, + 0x34, 0x34, 0x42, 0x34, 0x35, 0x42, 0x34, 0x36, + 0x42, 0x34, 0x37, 0x42, 0x34, 0x38, 0x42, 0x34, + 0x39, 0x42, 0x35, 0x2C, 0x42, 0x35, 0x2E, 0x42, // Bytes 1a40 - 1a7f - 0x56, 0x42, 0x6E, 0x57, 0x42, 0x6E, 0x6A, 0x42, - 0x6E, 0x6D, 0x42, 0x6E, 0x73, 0x42, 0x6F, 0x56, - 0x42, 0x70, 0x41, 0x42, 0x70, 0x46, 0x42, 0x70, - 0x56, 0x42, 0x70, 0x57, 0x42, 0x70, 0x63, 0x42, - 0x70, 0x73, 0x42, 0x73, 0x72, 0x42, 0x73, 0x74, - 0x42, 0x76, 0x69, 0x42, 0x78, 0x69, 0x43, 0x28, - 0x31, 0x29, 0x43, 0x28, 0x32, 0x29, 0x43, 0x28, - 0x33, 0x29, 0x43, 0x28, 0x34, 0x29, 0x43, 0x28, + 0x35, 0x30, 0x42, 0x36, 0x2C, 0x42, 0x36, 0x2E, + 0x42, 0x37, 0x2C, 0x42, 0x37, 0x2E, 0x42, 0x38, + 0x2C, 0x42, 0x38, 0x2E, 0x42, 0x39, 0x2C, 0x42, + 0x39, 0x2E, 0x42, 0x3D, 0x3D, 0x42, 0x3F, 0x21, + 0x42, 0x3F, 0x3F, 0x42, 0x41, 0x55, 0x42, 0x42, + 0x71, 0x42, 0x43, 0x44, 0x42, 0x44, 0x4A, 0x42, + 0x44, 0x5A, 0x42, 0x44, 0x7A, 0x42, 0x47, 0x42, + 0x42, 0x47, 0x79, 0x42, 0x48, 0x50, 0x42, 0x48, // Bytes 1a80 - 1abf - 0x35, 0x29, 0x43, 0x28, 0x36, 0x29, 0x43, 0x28, - 0x37, 0x29, 0x43, 0x28, 0x38, 0x29, 0x43, 0x28, - 0x39, 0x29, 0x43, 0x28, 0x41, 0x29, 0x43, 0x28, - 0x42, 0x29, 0x43, 0x28, 0x43, 0x29, 0x43, 0x28, - 0x44, 0x29, 0x43, 0x28, 0x45, 0x29, 0x43, 0x28, - 0x46, 0x29, 0x43, 0x28, 0x47, 0x29, 0x43, 0x28, - 0x48, 0x29, 0x43, 0x28, 0x49, 0x29, 0x43, 0x28, - 0x4A, 0x29, 0x43, 0x28, 0x4B, 0x29, 0x43, 0x28, + 0x56, 0x42, 0x48, 0x67, 0x42, 0x48, 0x7A, 0x42, + 0x49, 0x49, 0x42, 0x49, 0x4A, 0x42, 0x49, 0x55, + 0x42, 0x49, 0x56, 0x42, 0x49, 0x58, 0x42, 0x4B, + 0x42, 0x42, 0x4B, 0x4B, 0x42, 0x4B, 0x4D, 0x42, + 0x4C, 0x4A, 0x42, 0x4C, 0x6A, 0x42, 0x4D, 0x42, + 0x42, 0x4D, 0x43, 0x42, 0x4D, 0x44, 0x42, 0x4D, + 0x52, 0x42, 0x4D, 0x56, 0x42, 0x4D, 0x57, 0x42, + 0x4E, 0x4A, 0x42, 0x4E, 0x6A, 0x42, 0x4E, 0x6F, // Bytes 1ac0 - 1aff - 0x4C, 0x29, 0x43, 0x28, 0x4D, 0x29, 0x43, 0x28, - 0x4E, 0x29, 0x43, 0x28, 0x4F, 0x29, 0x43, 0x28, - 0x50, 0x29, 0x43, 0x28, 0x51, 0x29, 0x43, 0x28, - 0x52, 0x29, 0x43, 0x28, 0x53, 0x29, 0x43, 0x28, - 0x54, 0x29, 0x43, 0x28, 0x55, 0x29, 0x43, 0x28, - 0x56, 0x29, 0x43, 0x28, 0x57, 0x29, 0x43, 0x28, - 0x58, 0x29, 0x43, 0x28, 0x59, 0x29, 0x43, 0x28, - 0x5A, 0x29, 0x43, 0x28, 0x61, 0x29, 0x43, 0x28, + 0x42, 0x50, 0x48, 0x42, 0x50, 0x52, 0x42, 0x50, + 0x61, 0x42, 0x52, 0x73, 0x42, 0x53, 0x44, 0x42, + 0x53, 0x4D, 0x42, 0x53, 0x53, 0x42, 0x53, 0x76, + 0x42, 0x54, 0x4D, 0x42, 0x56, 0x49, 0x42, 0x57, + 0x43, 0x42, 0x57, 0x5A, 0x42, 0x57, 0x62, 0x42, + 0x58, 0x49, 0x42, 0x63, 0x63, 0x42, 0x63, 0x64, + 0x42, 0x63, 0x6D, 0x42, 0x64, 0x42, 0x42, 0x64, + 0x61, 0x42, 0x64, 0x6C, 0x42, 0x64, 0x6D, 0x42, // Bytes 1b00 - 1b3f - 0x62, 0x29, 0x43, 0x28, 0x63, 0x29, 0x43, 0x28, - 0x64, 0x29, 0x43, 0x28, 0x65, 0x29, 0x43, 0x28, - 0x66, 0x29, 0x43, 0x28, 0x67, 0x29, 0x43, 0x28, - 0x68, 0x29, 0x43, 0x28, 0x69, 0x29, 0x43, 0x28, - 0x6A, 0x29, 0x43, 0x28, 0x6B, 0x29, 0x43, 0x28, - 0x6C, 0x29, 0x43, 0x28, 0x6D, 0x29, 0x43, 0x28, - 0x6E, 0x29, 0x43, 0x28, 0x6F, 0x29, 0x43, 0x28, - 0x70, 0x29, 0x43, 0x28, 0x71, 0x29, 0x43, 0x28, + 0x64, 0x7A, 0x42, 0x65, 0x56, 0x42, 0x66, 0x66, + 0x42, 0x66, 0x69, 0x42, 0x66, 0x6C, 0x42, 0x66, + 0x6D, 0x42, 0x68, 0x61, 0x42, 0x69, 0x69, 0x42, + 0x69, 0x6A, 0x42, 0x69, 0x6E, 0x42, 0x69, 0x76, + 0x42, 0x69, 0x78, 0x42, 0x6B, 0x41, 0x42, 0x6B, + 0x56, 0x42, 0x6B, 0x57, 0x42, 0x6B, 0x67, 0x42, + 0x6B, 0x6C, 0x42, 0x6B, 0x6D, 0x42, 0x6B, 0x74, + 0x42, 0x6C, 0x6A, 0x42, 0x6C, 0x6D, 0x42, 0x6C, // Bytes 1b40 - 1b7f - 0x72, 0x29, 0x43, 0x28, 0x73, 0x29, 0x43, 0x28, - 0x74, 0x29, 0x43, 0x28, 0x75, 0x29, 0x43, 0x28, - 0x76, 0x29, 0x43, 0x28, 0x77, 0x29, 0x43, 0x28, - 0x78, 0x29, 0x43, 0x28, 0x79, 0x29, 0x43, 0x28, - 0x7A, 0x29, 0x43, 0x2E, 0x2E, 0x2E, 0x43, 0x31, - 0x30, 0x2E, 0x43, 0x31, 0x31, 0x2E, 0x43, 0x31, - 0x32, 0x2E, 0x43, 0x31, 0x33, 0x2E, 0x43, 0x31, - 0x34, 0x2E, 0x43, 0x31, 0x35, 0x2E, 0x43, 0x31, + 0x6E, 0x42, 0x6C, 0x78, 0x42, 0x6D, 0x32, 0x42, + 0x6D, 0x33, 0x42, 0x6D, 0x41, 0x42, 0x6D, 0x56, + 0x42, 0x6D, 0x57, 0x42, 0x6D, 0x62, 0x42, 0x6D, + 0x67, 0x42, 0x6D, 0x6C, 0x42, 0x6D, 0x6D, 0x42, + 0x6D, 0x73, 0x42, 0x6E, 0x41, 0x42, 0x6E, 0x46, + 0x42, 0x6E, 0x56, 0x42, 0x6E, 0x57, 0x42, 0x6E, + 0x6A, 0x42, 0x6E, 0x6D, 0x42, 0x6E, 0x73, 0x42, + 0x6F, 0x56, 0x42, 0x70, 0x41, 0x42, 0x70, 0x46, // Bytes 1b80 - 1bbf - 0x36, 0x2E, 0x43, 0x31, 0x37, 0x2E, 0x43, 0x31, - 0x38, 0x2E, 0x43, 0x31, 0x39, 0x2E, 0x43, 0x32, - 0x30, 0x2E, 0x43, 0x3A, 0x3A, 0x3D, 0x43, 0x3D, - 0x3D, 0x3D, 0x43, 0x43, 0x6F, 0x2E, 0x43, 0x46, - 0x41, 0x58, 0x43, 0x47, 0x48, 0x7A, 0x43, 0x47, - 0x50, 0x61, 0x43, 0x49, 0x49, 0x49, 0x43, 0x4C, - 0x54, 0x44, 0x43, 0x4C, 0xC2, 0xB7, 0x43, 0x4D, - 0x48, 0x7A, 0x43, 0x4D, 0x50, 0x61, 0x43, 0x4D, + 0x42, 0x70, 0x56, 0x42, 0x70, 0x57, 0x42, 0x70, + 0x63, 0x42, 0x70, 0x73, 0x42, 0x73, 0x72, 0x42, + 0x73, 0x74, 0x42, 0x76, 0x69, 0x42, 0x78, 0x69, + 0x43, 0x28, 0x31, 0x29, 0x43, 0x28, 0x32, 0x29, + 0x43, 0x28, 0x33, 0x29, 0x43, 0x28, 0x34, 0x29, + 0x43, 0x28, 0x35, 0x29, 0x43, 0x28, 0x36, 0x29, + 0x43, 0x28, 0x37, 0x29, 0x43, 0x28, 0x38, 0x29, + 0x43, 0x28, 0x39, 0x29, 0x43, 0x28, 0x41, 0x29, // Bytes 1bc0 - 1bff - 0xCE, 0xA9, 0x43, 0x50, 0x50, 0x4D, 0x43, 0x50, - 0x50, 0x56, 0x43, 0x50, 0x54, 0x45, 0x43, 0x54, - 0x45, 0x4C, 0x43, 0x54, 0x48, 0x7A, 0x43, 0x56, - 0x49, 0x49, 0x43, 0x58, 0x49, 0x49, 0x43, 0x61, - 0x2F, 0x63, 0x43, 0x61, 0x2F, 0x73, 0x43, 0x61, - 0xCA, 0xBE, 0x43, 0x62, 0x61, 0x72, 0x43, 0x63, - 0x2F, 0x6F, 0x43, 0x63, 0x2F, 0x75, 0x43, 0x63, - 0x61, 0x6C, 0x43, 0x63, 0x6D, 0x32, 0x43, 0x63, + 0x43, 0x28, 0x42, 0x29, 0x43, 0x28, 0x43, 0x29, + 0x43, 0x28, 0x44, 0x29, 0x43, 0x28, 0x45, 0x29, + 0x43, 0x28, 0x46, 0x29, 0x43, 0x28, 0x47, 0x29, + 0x43, 0x28, 0x48, 0x29, 0x43, 0x28, 0x49, 0x29, + 0x43, 0x28, 0x4A, 0x29, 0x43, 0x28, 0x4B, 0x29, + 0x43, 0x28, 0x4C, 0x29, 0x43, 0x28, 0x4D, 0x29, + 0x43, 0x28, 0x4E, 0x29, 0x43, 0x28, 0x4F, 0x29, + 0x43, 0x28, 0x50, 0x29, 0x43, 0x28, 0x51, 0x29, // Bytes 1c00 - 1c3f - 0x6D, 0x33, 0x43, 0x64, 0x6D, 0x32, 0x43, 0x64, - 0x6D, 0x33, 0x43, 0x65, 0x72, 0x67, 0x43, 0x66, - 0x66, 0x69, 0x43, 0x66, 0x66, 0x6C, 0x43, 0x67, - 0x61, 0x6C, 0x43, 0x68, 0x50, 0x61, 0x43, 0x69, - 0x69, 0x69, 0x43, 0x6B, 0x48, 0x7A, 0x43, 0x6B, - 0x50, 0x61, 0x43, 0x6B, 0x6D, 0x32, 0x43, 0x6B, - 0x6D, 0x33, 0x43, 0x6B, 0xCE, 0xA9, 0x43, 0x6C, - 0x6F, 0x67, 0x43, 0x6C, 0xC2, 0xB7, 0x43, 0x6D, + 0x43, 0x28, 0x52, 0x29, 0x43, 0x28, 0x53, 0x29, + 0x43, 0x28, 0x54, 0x29, 0x43, 0x28, 0x55, 0x29, + 0x43, 0x28, 0x56, 0x29, 0x43, 0x28, 0x57, 0x29, + 0x43, 0x28, 0x58, 0x29, 0x43, 0x28, 0x59, 0x29, + 0x43, 0x28, 0x5A, 0x29, 0x43, 0x28, 0x61, 0x29, + 0x43, 0x28, 0x62, 0x29, 0x43, 0x28, 0x63, 0x29, + 0x43, 0x28, 0x64, 0x29, 0x43, 0x28, 0x65, 0x29, + 0x43, 0x28, 0x66, 0x29, 0x43, 0x28, 0x67, 0x29, // Bytes 1c40 - 1c7f - 0x69, 0x6C, 0x43, 0x6D, 0x6D, 0x32, 0x43, 0x6D, - 0x6D, 0x33, 0x43, 0x6D, 0x6F, 0x6C, 0x43, 0x72, - 0x61, 0x64, 0x43, 0x76, 0x69, 0x69, 0x43, 0x78, - 0x69, 0x69, 0x43, 0xC2, 0xB0, 0x43, 0x43, 0xC2, - 0xB0, 0x46, 0x43, 0xCA, 0xBC, 0x6E, 0x43, 0xCE, - 0xBC, 0x41, 0x43, 0xCE, 0xBC, 0x46, 0x43, 0xCE, - 0xBC, 0x56, 0x43, 0xCE, 0xBC, 0x57, 0x43, 0xCE, - 0xBC, 0x67, 0x43, 0xCE, 0xBC, 0x6C, 0x43, 0xCE, + 0x43, 0x28, 0x68, 0x29, 0x43, 0x28, 0x69, 0x29, + 0x43, 0x28, 0x6A, 0x29, 0x43, 0x28, 0x6B, 0x29, + 0x43, 0x28, 0x6C, 0x29, 0x43, 0x28, 0x6D, 0x29, + 0x43, 0x28, 0x6E, 0x29, 0x43, 0x28, 0x6F, 0x29, + 0x43, 0x28, 0x70, 0x29, 0x43, 0x28, 0x71, 0x29, + 0x43, 0x28, 0x72, 0x29, 0x43, 0x28, 0x73, 0x29, + 0x43, 0x28, 0x74, 0x29, 0x43, 0x28, 0x75, 0x29, + 0x43, 0x28, 0x76, 0x29, 0x43, 0x28, 0x77, 0x29, // Bytes 1c80 - 1cbf - 0xBC, 0x6D, 0x43, 0xCE, 0xBC, 0x73, 0x44, 0x28, - 0x31, 0x30, 0x29, 0x44, 0x28, 0x31, 0x31, 0x29, - 0x44, 0x28, 0x31, 0x32, 0x29, 0x44, 0x28, 0x31, - 0x33, 0x29, 0x44, 0x28, 0x31, 0x34, 0x29, 0x44, - 0x28, 0x31, 0x35, 0x29, 0x44, 0x28, 0x31, 0x36, - 0x29, 0x44, 0x28, 0x31, 0x37, 0x29, 0x44, 0x28, - 0x31, 0x38, 0x29, 0x44, 0x28, 0x31, 0x39, 0x29, - 0x44, 0x28, 0x32, 0x30, 0x29, 0x44, 0x30, 0xE7, + 0x43, 0x28, 0x78, 0x29, 0x43, 0x28, 0x79, 0x29, + 0x43, 0x28, 0x7A, 0x29, 0x43, 0x2E, 0x2E, 0x2E, + 0x43, 0x31, 0x30, 0x2E, 0x43, 0x31, 0x31, 0x2E, + 0x43, 0x31, 0x32, 0x2E, 0x43, 0x31, 0x33, 0x2E, + 0x43, 0x31, 0x34, 0x2E, 0x43, 0x31, 0x35, 0x2E, + 0x43, 0x31, 0x36, 0x2E, 0x43, 0x31, 0x37, 0x2E, + 0x43, 0x31, 0x38, 0x2E, 0x43, 0x31, 0x39, 0x2E, + 0x43, 0x32, 0x30, 0x2E, 0x43, 0x3A, 0x3A, 0x3D, // Bytes 1cc0 - 1cff - 0x82, 0xB9, 0x44, 0x31, 0xE2, 0x81, 0x84, 0x44, - 0x31, 0xE6, 0x97, 0xA5, 0x44, 0x31, 0xE6, 0x9C, - 0x88, 0x44, 0x31, 0xE7, 0x82, 0xB9, 0x44, 0x32, - 0xE6, 0x97, 0xA5, 0x44, 0x32, 0xE6, 0x9C, 0x88, - 0x44, 0x32, 0xE7, 0x82, 0xB9, 0x44, 0x33, 0xE6, - 0x97, 0xA5, 0x44, 0x33, 0xE6, 0x9C, 0x88, 0x44, - 0x33, 0xE7, 0x82, 0xB9, 0x44, 0x34, 0xE6, 0x97, - 0xA5, 0x44, 0x34, 0xE6, 0x9C, 0x88, 0x44, 0x34, + 0x43, 0x3D, 0x3D, 0x3D, 0x43, 0x43, 0x6F, 0x2E, + 0x43, 0x46, 0x41, 0x58, 0x43, 0x47, 0x48, 0x7A, + 0x43, 0x47, 0x50, 0x61, 0x43, 0x49, 0x49, 0x49, + 0x43, 0x4C, 0x54, 0x44, 0x43, 0x4C, 0xC2, 0xB7, + 0x43, 0x4D, 0x48, 0x7A, 0x43, 0x4D, 0x50, 0x61, + 0x43, 0x4D, 0xCE, 0xA9, 0x43, 0x50, 0x50, 0x4D, + 0x43, 0x50, 0x50, 0x56, 0x43, 0x50, 0x54, 0x45, + 0x43, 0x54, 0x45, 0x4C, 0x43, 0x54, 0x48, 0x7A, // Bytes 1d00 - 1d3f - 0xE7, 0x82, 0xB9, 0x44, 0x35, 0xE6, 0x97, 0xA5, - 0x44, 0x35, 0xE6, 0x9C, 0x88, 0x44, 0x35, 0xE7, - 0x82, 0xB9, 0x44, 0x36, 0xE6, 0x97, 0xA5, 0x44, - 0x36, 0xE6, 0x9C, 0x88, 0x44, 0x36, 0xE7, 0x82, - 0xB9, 0x44, 0x37, 0xE6, 0x97, 0xA5, 0x44, 0x37, - 0xE6, 0x9C, 0x88, 0x44, 0x37, 0xE7, 0x82, 0xB9, - 0x44, 0x38, 0xE6, 0x97, 0xA5, 0x44, 0x38, 0xE6, - 0x9C, 0x88, 0x44, 0x38, 0xE7, 0x82, 0xB9, 0x44, + 0x43, 0x56, 0x49, 0x49, 0x43, 0x58, 0x49, 0x49, + 0x43, 0x61, 0x2F, 0x63, 0x43, 0x61, 0x2F, 0x73, + 0x43, 0x61, 0xCA, 0xBE, 0x43, 0x62, 0x61, 0x72, + 0x43, 0x63, 0x2F, 0x6F, 0x43, 0x63, 0x2F, 0x75, + 0x43, 0x63, 0x61, 0x6C, 0x43, 0x63, 0x6D, 0x32, + 0x43, 0x63, 0x6D, 0x33, 0x43, 0x64, 0x6D, 0x32, + 0x43, 0x64, 0x6D, 0x33, 0x43, 0x65, 0x72, 0x67, + 0x43, 0x66, 0x66, 0x69, 0x43, 0x66, 0x66, 0x6C, // Bytes 1d40 - 1d7f - 0x39, 0xE6, 0x97, 0xA5, 0x44, 0x39, 0xE6, 0x9C, - 0x88, 0x44, 0x39, 0xE7, 0x82, 0xB9, 0x44, 0x56, - 0x49, 0x49, 0x49, 0x44, 0x61, 0x2E, 0x6D, 0x2E, - 0x44, 0x6B, 0x63, 0x61, 0x6C, 0x44, 0x70, 0x2E, - 0x6D, 0x2E, 0x44, 0x76, 0x69, 0x69, 0x69, 0x44, - 0xD5, 0xA5, 0xD6, 0x82, 0x44, 0xD5, 0xB4, 0xD5, - 0xA5, 0x44, 0xD5, 0xB4, 0xD5, 0xAB, 0x44, 0xD5, - 0xB4, 0xD5, 0xAD, 0x44, 0xD5, 0xB4, 0xD5, 0xB6, + 0x43, 0x67, 0x61, 0x6C, 0x43, 0x68, 0x50, 0x61, + 0x43, 0x69, 0x69, 0x69, 0x43, 0x6B, 0x48, 0x7A, + 0x43, 0x6B, 0x50, 0x61, 0x43, 0x6B, 0x6D, 0x32, + 0x43, 0x6B, 0x6D, 0x33, 0x43, 0x6B, 0xCE, 0xA9, + 0x43, 0x6C, 0x6F, 0x67, 0x43, 0x6C, 0xC2, 0xB7, + 0x43, 0x6D, 0x69, 0x6C, 0x43, 0x6D, 0x6D, 0x32, + 0x43, 0x6D, 0x6D, 0x33, 0x43, 0x6D, 0x6F, 0x6C, + 0x43, 0x72, 0x61, 0x64, 0x43, 0x76, 0x69, 0x69, // Bytes 1d80 - 1dbf - 0x44, 0xD5, 0xBE, 0xD5, 0xB6, 0x44, 0xD7, 0x90, - 0xD7, 0x9C, 0x44, 0xD8, 0xA7, 0xD9, 0xB4, 0x44, - 0xD8, 0xA8, 0xD8, 0xAC, 0x44, 0xD8, 0xA8, 0xD8, - 0xAD, 0x44, 0xD8, 0xA8, 0xD8, 0xAE, 0x44, 0xD8, - 0xA8, 0xD8, 0xB1, 0x44, 0xD8, 0xA8, 0xD8, 0xB2, - 0x44, 0xD8, 0xA8, 0xD9, 0x85, 0x44, 0xD8, 0xA8, - 0xD9, 0x86, 0x44, 0xD8, 0xA8, 0xD9, 0x87, 0x44, - 0xD8, 0xA8, 0xD9, 0x89, 0x44, 0xD8, 0xA8, 0xD9, + 0x43, 0x78, 0x69, 0x69, 0x43, 0xC2, 0xB0, 0x43, + 0x43, 0xC2, 0xB0, 0x46, 0x43, 0xCA, 0xBC, 0x6E, + 0x43, 0xCE, 0xBC, 0x41, 0x43, 0xCE, 0xBC, 0x46, + 0x43, 0xCE, 0xBC, 0x56, 0x43, 0xCE, 0xBC, 0x57, + 0x43, 0xCE, 0xBC, 0x67, 0x43, 0xCE, 0xBC, 0x6C, + 0x43, 0xCE, 0xBC, 0x6D, 0x43, 0xCE, 0xBC, 0x73, + 0x44, 0x28, 0x31, 0x30, 0x29, 0x44, 0x28, 0x31, + 0x31, 0x29, 0x44, 0x28, 0x31, 0x32, 0x29, 0x44, // Bytes 1dc0 - 1dff - 0x8A, 0x44, 0xD8, 0xAA, 0xD8, 0xAC, 0x44, 0xD8, - 0xAA, 0xD8, 0xAD, 0x44, 0xD8, 0xAA, 0xD8, 0xAE, - 0x44, 0xD8, 0xAA, 0xD8, 0xB1, 0x44, 0xD8, 0xAA, - 0xD8, 0xB2, 0x44, 0xD8, 0xAA, 0xD9, 0x85, 0x44, - 0xD8, 0xAA, 0xD9, 0x86, 0x44, 0xD8, 0xAA, 0xD9, - 0x87, 0x44, 0xD8, 0xAA, 0xD9, 0x89, 0x44, 0xD8, - 0xAA, 0xD9, 0x8A, 0x44, 0xD8, 0xAB, 0xD8, 0xAC, - 0x44, 0xD8, 0xAB, 0xD8, 0xB1, 0x44, 0xD8, 0xAB, + 0x28, 0x31, 0x33, 0x29, 0x44, 0x28, 0x31, 0x34, + 0x29, 0x44, 0x28, 0x31, 0x35, 0x29, 0x44, 0x28, + 0x31, 0x36, 0x29, 0x44, 0x28, 0x31, 0x37, 0x29, + 0x44, 0x28, 0x31, 0x38, 0x29, 0x44, 0x28, 0x31, + 0x39, 0x29, 0x44, 0x28, 0x32, 0x30, 0x29, 0x44, + 0x30, 0xE7, 0x82, 0xB9, 0x44, 0x31, 0xE2, 0x81, + 0x84, 0x44, 0x31, 0xE6, 0x97, 0xA5, 0x44, 0x31, + 0xE6, 0x9C, 0x88, 0x44, 0x31, 0xE7, 0x82, 0xB9, // Bytes 1e00 - 1e3f - 0xD8, 0xB2, 0x44, 0xD8, 0xAB, 0xD9, 0x85, 0x44, - 0xD8, 0xAB, 0xD9, 0x86, 0x44, 0xD8, 0xAB, 0xD9, - 0x87, 0x44, 0xD8, 0xAB, 0xD9, 0x89, 0x44, 0xD8, - 0xAB, 0xD9, 0x8A, 0x44, 0xD8, 0xAC, 0xD8, 0xAD, - 0x44, 0xD8, 0xAC, 0xD9, 0x85, 0x44, 0xD8, 0xAC, - 0xD9, 0x89, 0x44, 0xD8, 0xAC, 0xD9, 0x8A, 0x44, - 0xD8, 0xAD, 0xD8, 0xAC, 0x44, 0xD8, 0xAD, 0xD9, - 0x85, 0x44, 0xD8, 0xAD, 0xD9, 0x89, 0x44, 0xD8, + 0x44, 0x32, 0xE6, 0x97, 0xA5, 0x44, 0x32, 0xE6, + 0x9C, 0x88, 0x44, 0x32, 0xE7, 0x82, 0xB9, 0x44, + 0x33, 0xE6, 0x97, 0xA5, 0x44, 0x33, 0xE6, 0x9C, + 0x88, 0x44, 0x33, 0xE7, 0x82, 0xB9, 0x44, 0x34, + 0xE6, 0x97, 0xA5, 0x44, 0x34, 0xE6, 0x9C, 0x88, + 0x44, 0x34, 0xE7, 0x82, 0xB9, 0x44, 0x35, 0xE6, + 0x97, 0xA5, 0x44, 0x35, 0xE6, 0x9C, 0x88, 0x44, + 0x35, 0xE7, 0x82, 0xB9, 0x44, 0x36, 0xE6, 0x97, // Bytes 1e40 - 1e7f - 0xAD, 0xD9, 0x8A, 0x44, 0xD8, 0xAE, 0xD8, 0xAC, - 0x44, 0xD8, 0xAE, 0xD8, 0xAD, 0x44, 0xD8, 0xAE, - 0xD9, 0x85, 0x44, 0xD8, 0xAE, 0xD9, 0x89, 0x44, - 0xD8, 0xAE, 0xD9, 0x8A, 0x44, 0xD8, 0xB3, 0xD8, - 0xAC, 0x44, 0xD8, 0xB3, 0xD8, 0xAD, 0x44, 0xD8, - 0xB3, 0xD8, 0xAE, 0x44, 0xD8, 0xB3, 0xD8, 0xB1, - 0x44, 0xD8, 0xB3, 0xD9, 0x85, 0x44, 0xD8, 0xB3, - 0xD9, 0x87, 0x44, 0xD8, 0xB3, 0xD9, 0x89, 0x44, + 0xA5, 0x44, 0x36, 0xE6, 0x9C, 0x88, 0x44, 0x36, + 0xE7, 0x82, 0xB9, 0x44, 0x37, 0xE6, 0x97, 0xA5, + 0x44, 0x37, 0xE6, 0x9C, 0x88, 0x44, 0x37, 0xE7, + 0x82, 0xB9, 0x44, 0x38, 0xE6, 0x97, 0xA5, 0x44, + 0x38, 0xE6, 0x9C, 0x88, 0x44, 0x38, 0xE7, 0x82, + 0xB9, 0x44, 0x39, 0xE6, 0x97, 0xA5, 0x44, 0x39, + 0xE6, 0x9C, 0x88, 0x44, 0x39, 0xE7, 0x82, 0xB9, + 0x44, 0x56, 0x49, 0x49, 0x49, 0x44, 0x61, 0x2E, // Bytes 1e80 - 1ebf - 0xD8, 0xB3, 0xD9, 0x8A, 0x44, 0xD8, 0xB4, 0xD8, - 0xAC, 0x44, 0xD8, 0xB4, 0xD8, 0xAD, 0x44, 0xD8, - 0xB4, 0xD8, 0xAE, 0x44, 0xD8, 0xB4, 0xD8, 0xB1, - 0x44, 0xD8, 0xB4, 0xD9, 0x85, 0x44, 0xD8, 0xB4, - 0xD9, 0x87, 0x44, 0xD8, 0xB4, 0xD9, 0x89, 0x44, - 0xD8, 0xB4, 0xD9, 0x8A, 0x44, 0xD8, 0xB5, 0xD8, - 0xAD, 0x44, 0xD8, 0xB5, 0xD8, 0xAE, 0x44, 0xD8, - 0xB5, 0xD8, 0xB1, 0x44, 0xD8, 0xB5, 0xD9, 0x85, + 0x6D, 0x2E, 0x44, 0x6B, 0x63, 0x61, 0x6C, 0x44, + 0x70, 0x2E, 0x6D, 0x2E, 0x44, 0x76, 0x69, 0x69, + 0x69, 0x44, 0xD5, 0xA5, 0xD6, 0x82, 0x44, 0xD5, + 0xB4, 0xD5, 0xA5, 0x44, 0xD5, 0xB4, 0xD5, 0xAB, + 0x44, 0xD5, 0xB4, 0xD5, 0xAD, 0x44, 0xD5, 0xB4, + 0xD5, 0xB6, 0x44, 0xD5, 0xBE, 0xD5, 0xB6, 0x44, + 0xD7, 0x90, 0xD7, 0x9C, 0x44, 0xD8, 0xA7, 0xD9, + 0xB4, 0x44, 0xD8, 0xA8, 0xD8, 0xAC, 0x44, 0xD8, // Bytes 1ec0 - 1eff - 0x44, 0xD8, 0xB5, 0xD9, 0x89, 0x44, 0xD8, 0xB5, - 0xD9, 0x8A, 0x44, 0xD8, 0xB6, 0xD8, 0xAC, 0x44, - 0xD8, 0xB6, 0xD8, 0xAD, 0x44, 0xD8, 0xB6, 0xD8, - 0xAE, 0x44, 0xD8, 0xB6, 0xD8, 0xB1, 0x44, 0xD8, - 0xB6, 0xD9, 0x85, 0x44, 0xD8, 0xB6, 0xD9, 0x89, - 0x44, 0xD8, 0xB6, 0xD9, 0x8A, 0x44, 0xD8, 0xB7, - 0xD8, 0xAD, 0x44, 0xD8, 0xB7, 0xD9, 0x85, 0x44, - 0xD8, 0xB7, 0xD9, 0x89, 0x44, 0xD8, 0xB7, 0xD9, + 0xA8, 0xD8, 0xAD, 0x44, 0xD8, 0xA8, 0xD8, 0xAE, + 0x44, 0xD8, 0xA8, 0xD8, 0xB1, 0x44, 0xD8, 0xA8, + 0xD8, 0xB2, 0x44, 0xD8, 0xA8, 0xD9, 0x85, 0x44, + 0xD8, 0xA8, 0xD9, 0x86, 0x44, 0xD8, 0xA8, 0xD9, + 0x87, 0x44, 0xD8, 0xA8, 0xD9, 0x89, 0x44, 0xD8, + 0xA8, 0xD9, 0x8A, 0x44, 0xD8, 0xAA, 0xD8, 0xAC, + 0x44, 0xD8, 0xAA, 0xD8, 0xAD, 0x44, 0xD8, 0xAA, + 0xD8, 0xAE, 0x44, 0xD8, 0xAA, 0xD8, 0xB1, 0x44, // Bytes 1f00 - 1f3f - 0x8A, 0x44, 0xD8, 0xB8, 0xD9, 0x85, 0x44, 0xD8, - 0xB9, 0xD8, 0xAC, 0x44, 0xD8, 0xB9, 0xD9, 0x85, - 0x44, 0xD8, 0xB9, 0xD9, 0x89, 0x44, 0xD8, 0xB9, - 0xD9, 0x8A, 0x44, 0xD8, 0xBA, 0xD8, 0xAC, 0x44, - 0xD8, 0xBA, 0xD9, 0x85, 0x44, 0xD8, 0xBA, 0xD9, - 0x89, 0x44, 0xD8, 0xBA, 0xD9, 0x8A, 0x44, 0xD9, - 0x81, 0xD8, 0xAC, 0x44, 0xD9, 0x81, 0xD8, 0xAD, - 0x44, 0xD9, 0x81, 0xD8, 0xAE, 0x44, 0xD9, 0x81, + 0xD8, 0xAA, 0xD8, 0xB2, 0x44, 0xD8, 0xAA, 0xD9, + 0x85, 0x44, 0xD8, 0xAA, 0xD9, 0x86, 0x44, 0xD8, + 0xAA, 0xD9, 0x87, 0x44, 0xD8, 0xAA, 0xD9, 0x89, + 0x44, 0xD8, 0xAA, 0xD9, 0x8A, 0x44, 0xD8, 0xAB, + 0xD8, 0xAC, 0x44, 0xD8, 0xAB, 0xD8, 0xB1, 0x44, + 0xD8, 0xAB, 0xD8, 0xB2, 0x44, 0xD8, 0xAB, 0xD9, + 0x85, 0x44, 0xD8, 0xAB, 0xD9, 0x86, 0x44, 0xD8, + 0xAB, 0xD9, 0x87, 0x44, 0xD8, 0xAB, 0xD9, 0x89, // Bytes 1f40 - 1f7f - 0xD9, 0x85, 0x44, 0xD9, 0x81, 0xD9, 0x89, 0x44, - 0xD9, 0x81, 0xD9, 0x8A, 0x44, 0xD9, 0x82, 0xD8, - 0xAD, 0x44, 0xD9, 0x82, 0xD9, 0x85, 0x44, 0xD9, - 0x82, 0xD9, 0x89, 0x44, 0xD9, 0x82, 0xD9, 0x8A, - 0x44, 0xD9, 0x83, 0xD8, 0xA7, 0x44, 0xD9, 0x83, - 0xD8, 0xAC, 0x44, 0xD9, 0x83, 0xD8, 0xAD, 0x44, - 0xD9, 0x83, 0xD8, 0xAE, 0x44, 0xD9, 0x83, 0xD9, - 0x84, 0x44, 0xD9, 0x83, 0xD9, 0x85, 0x44, 0xD9, + 0x44, 0xD8, 0xAB, 0xD9, 0x8A, 0x44, 0xD8, 0xAC, + 0xD8, 0xAD, 0x44, 0xD8, 0xAC, 0xD9, 0x85, 0x44, + 0xD8, 0xAC, 0xD9, 0x89, 0x44, 0xD8, 0xAC, 0xD9, + 0x8A, 0x44, 0xD8, 0xAD, 0xD8, 0xAC, 0x44, 0xD8, + 0xAD, 0xD9, 0x85, 0x44, 0xD8, 0xAD, 0xD9, 0x89, + 0x44, 0xD8, 0xAD, 0xD9, 0x8A, 0x44, 0xD8, 0xAE, + 0xD8, 0xAC, 0x44, 0xD8, 0xAE, 0xD8, 0xAD, 0x44, + 0xD8, 0xAE, 0xD9, 0x85, 0x44, 0xD8, 0xAE, 0xD9, // Bytes 1f80 - 1fbf - 0x83, 0xD9, 0x89, 0x44, 0xD9, 0x83, 0xD9, 0x8A, - 0x44, 0xD9, 0x84, 0xD8, 0xA7, 0x44, 0xD9, 0x84, - 0xD8, 0xAC, 0x44, 0xD9, 0x84, 0xD8, 0xAD, 0x44, - 0xD9, 0x84, 0xD8, 0xAE, 0x44, 0xD9, 0x84, 0xD9, - 0x85, 0x44, 0xD9, 0x84, 0xD9, 0x87, 0x44, 0xD9, - 0x84, 0xD9, 0x89, 0x44, 0xD9, 0x84, 0xD9, 0x8A, - 0x44, 0xD9, 0x85, 0xD8, 0xA7, 0x44, 0xD9, 0x85, - 0xD8, 0xAC, 0x44, 0xD9, 0x85, 0xD8, 0xAD, 0x44, + 0x89, 0x44, 0xD8, 0xAE, 0xD9, 0x8A, 0x44, 0xD8, + 0xB3, 0xD8, 0xAC, 0x44, 0xD8, 0xB3, 0xD8, 0xAD, + 0x44, 0xD8, 0xB3, 0xD8, 0xAE, 0x44, 0xD8, 0xB3, + 0xD8, 0xB1, 0x44, 0xD8, 0xB3, 0xD9, 0x85, 0x44, + 0xD8, 0xB3, 0xD9, 0x87, 0x44, 0xD8, 0xB3, 0xD9, + 0x89, 0x44, 0xD8, 0xB3, 0xD9, 0x8A, 0x44, 0xD8, + 0xB4, 0xD8, 0xAC, 0x44, 0xD8, 0xB4, 0xD8, 0xAD, + 0x44, 0xD8, 0xB4, 0xD8, 0xAE, 0x44, 0xD8, 0xB4, // Bytes 1fc0 - 1fff - 0xD9, 0x85, 0xD8, 0xAE, 0x44, 0xD9, 0x85, 0xD9, - 0x85, 0x44, 0xD9, 0x85, 0xD9, 0x89, 0x44, 0xD9, - 0x85, 0xD9, 0x8A, 0x44, 0xD9, 0x86, 0xD8, 0xAC, - 0x44, 0xD9, 0x86, 0xD8, 0xAD, 0x44, 0xD9, 0x86, - 0xD8, 0xAE, 0x44, 0xD9, 0x86, 0xD8, 0xB1, 0x44, - 0xD9, 0x86, 0xD8, 0xB2, 0x44, 0xD9, 0x86, 0xD9, - 0x85, 0x44, 0xD9, 0x86, 0xD9, 0x86, 0x44, 0xD9, - 0x86, 0xD9, 0x87, 0x44, 0xD9, 0x86, 0xD9, 0x89, + 0xD8, 0xB1, 0x44, 0xD8, 0xB4, 0xD9, 0x85, 0x44, + 0xD8, 0xB4, 0xD9, 0x87, 0x44, 0xD8, 0xB4, 0xD9, + 0x89, 0x44, 0xD8, 0xB4, 0xD9, 0x8A, 0x44, 0xD8, + 0xB5, 0xD8, 0xAD, 0x44, 0xD8, 0xB5, 0xD8, 0xAE, + 0x44, 0xD8, 0xB5, 0xD8, 0xB1, 0x44, 0xD8, 0xB5, + 0xD9, 0x85, 0x44, 0xD8, 0xB5, 0xD9, 0x89, 0x44, + 0xD8, 0xB5, 0xD9, 0x8A, 0x44, 0xD8, 0xB6, 0xD8, + 0xAC, 0x44, 0xD8, 0xB6, 0xD8, 0xAD, 0x44, 0xD8, // Bytes 2000 - 203f - 0x44, 0xD9, 0x86, 0xD9, 0x8A, 0x44, 0xD9, 0x87, - 0xD8, 0xAC, 0x44, 0xD9, 0x87, 0xD9, 0x85, 0x44, - 0xD9, 0x87, 0xD9, 0x89, 0x44, 0xD9, 0x87, 0xD9, - 0x8A, 0x44, 0xD9, 0x88, 0xD9, 0xB4, 0x44, 0xD9, - 0x8A, 0xD8, 0xAC, 0x44, 0xD9, 0x8A, 0xD8, 0xAD, - 0x44, 0xD9, 0x8A, 0xD8, 0xAE, 0x44, 0xD9, 0x8A, - 0xD8, 0xB1, 0x44, 0xD9, 0x8A, 0xD8, 0xB2, 0x44, - 0xD9, 0x8A, 0xD9, 0x85, 0x44, 0xD9, 0x8A, 0xD9, + 0xB6, 0xD8, 0xAE, 0x44, 0xD8, 0xB6, 0xD8, 0xB1, + 0x44, 0xD8, 0xB6, 0xD9, 0x85, 0x44, 0xD8, 0xB6, + 0xD9, 0x89, 0x44, 0xD8, 0xB6, 0xD9, 0x8A, 0x44, + 0xD8, 0xB7, 0xD8, 0xAD, 0x44, 0xD8, 0xB7, 0xD9, + 0x85, 0x44, 0xD8, 0xB7, 0xD9, 0x89, 0x44, 0xD8, + 0xB7, 0xD9, 0x8A, 0x44, 0xD8, 0xB8, 0xD9, 0x85, + 0x44, 0xD8, 0xB9, 0xD8, 0xAC, 0x44, 0xD8, 0xB9, + 0xD9, 0x85, 0x44, 0xD8, 0xB9, 0xD9, 0x89, 0x44, // Bytes 2040 - 207f - 0x86, 0x44, 0xD9, 0x8A, 0xD9, 0x87, 0x44, 0xD9, - 0x8A, 0xD9, 0x89, 0x44, 0xD9, 0x8A, 0xD9, 0x8A, - 0x44, 0xD9, 0x8A, 0xD9, 0xB4, 0x44, 0xDB, 0x87, - 0xD9, 0xB4, 0x45, 0x28, 0xE1, 0x84, 0x80, 0x29, - 0x45, 0x28, 0xE1, 0x84, 0x82, 0x29, 0x45, 0x28, - 0xE1, 0x84, 0x83, 0x29, 0x45, 0x28, 0xE1, 0x84, - 0x85, 0x29, 0x45, 0x28, 0xE1, 0x84, 0x86, 0x29, - 0x45, 0x28, 0xE1, 0x84, 0x87, 0x29, 0x45, 0x28, + 0xD8, 0xB9, 0xD9, 0x8A, 0x44, 0xD8, 0xBA, 0xD8, + 0xAC, 0x44, 0xD8, 0xBA, 0xD9, 0x85, 0x44, 0xD8, + 0xBA, 0xD9, 0x89, 0x44, 0xD8, 0xBA, 0xD9, 0x8A, + 0x44, 0xD9, 0x81, 0xD8, 0xAC, 0x44, 0xD9, 0x81, + 0xD8, 0xAD, 0x44, 0xD9, 0x81, 0xD8, 0xAE, 0x44, + 0xD9, 0x81, 0xD9, 0x85, 0x44, 0xD9, 0x81, 0xD9, + 0x89, 0x44, 0xD9, 0x81, 0xD9, 0x8A, 0x44, 0xD9, + 0x82, 0xD8, 0xAD, 0x44, 0xD9, 0x82, 0xD9, 0x85, // Bytes 2080 - 20bf - 0xE1, 0x84, 0x89, 0x29, 0x45, 0x28, 0xE1, 0x84, - 0x8B, 0x29, 0x45, 0x28, 0xE1, 0x84, 0x8C, 0x29, - 0x45, 0x28, 0xE1, 0x84, 0x8E, 0x29, 0x45, 0x28, - 0xE1, 0x84, 0x8F, 0x29, 0x45, 0x28, 0xE1, 0x84, - 0x90, 0x29, 0x45, 0x28, 0xE1, 0x84, 0x91, 0x29, - 0x45, 0x28, 0xE1, 0x84, 0x92, 0x29, 0x45, 0x28, - 0xE4, 0xB8, 0x80, 0x29, 0x45, 0x28, 0xE4, 0xB8, - 0x83, 0x29, 0x45, 0x28, 0xE4, 0xB8, 0x89, 0x29, + 0x44, 0xD9, 0x82, 0xD9, 0x89, 0x44, 0xD9, 0x82, + 0xD9, 0x8A, 0x44, 0xD9, 0x83, 0xD8, 0xA7, 0x44, + 0xD9, 0x83, 0xD8, 0xAC, 0x44, 0xD9, 0x83, 0xD8, + 0xAD, 0x44, 0xD9, 0x83, 0xD8, 0xAE, 0x44, 0xD9, + 0x83, 0xD9, 0x84, 0x44, 0xD9, 0x83, 0xD9, 0x85, + 0x44, 0xD9, 0x83, 0xD9, 0x89, 0x44, 0xD9, 0x83, + 0xD9, 0x8A, 0x44, 0xD9, 0x84, 0xD8, 0xA7, 0x44, + 0xD9, 0x84, 0xD8, 0xAC, 0x44, 0xD9, 0x84, 0xD8, // Bytes 20c0 - 20ff - 0x45, 0x28, 0xE4, 0xB9, 0x9D, 0x29, 0x45, 0x28, - 0xE4, 0xBA, 0x8C, 0x29, 0x45, 0x28, 0xE4, 0xBA, - 0x94, 0x29, 0x45, 0x28, 0xE4, 0xBB, 0xA3, 0x29, - 0x45, 0x28, 0xE4, 0xBC, 0x81, 0x29, 0x45, 0x28, - 0xE4, 0xBC, 0x91, 0x29, 0x45, 0x28, 0xE5, 0x85, - 0xAB, 0x29, 0x45, 0x28, 0xE5, 0x85, 0xAD, 0x29, - 0x45, 0x28, 0xE5, 0x8A, 0xB4, 0x29, 0x45, 0x28, - 0xE5, 0x8D, 0x81, 0x29, 0x45, 0x28, 0xE5, 0x8D, + 0xAD, 0x44, 0xD9, 0x84, 0xD8, 0xAE, 0x44, 0xD9, + 0x84, 0xD9, 0x85, 0x44, 0xD9, 0x84, 0xD9, 0x87, + 0x44, 0xD9, 0x84, 0xD9, 0x89, 0x44, 0xD9, 0x84, + 0xD9, 0x8A, 0x44, 0xD9, 0x85, 0xD8, 0xA7, 0x44, + 0xD9, 0x85, 0xD8, 0xAC, 0x44, 0xD9, 0x85, 0xD8, + 0xAD, 0x44, 0xD9, 0x85, 0xD8, 0xAE, 0x44, 0xD9, + 0x85, 0xD9, 0x85, 0x44, 0xD9, 0x85, 0xD9, 0x89, + 0x44, 0xD9, 0x85, 0xD9, 0x8A, 0x44, 0xD9, 0x86, // Bytes 2100 - 213f - 0x94, 0x29, 0x45, 0x28, 0xE5, 0x90, 0x8D, 0x29, - 0x45, 0x28, 0xE5, 0x91, 0xBC, 0x29, 0x45, 0x28, - 0xE5, 0x9B, 0x9B, 0x29, 0x45, 0x28, 0xE5, 0x9C, - 0x9F, 0x29, 0x45, 0x28, 0xE5, 0xAD, 0xA6, 0x29, - 0x45, 0x28, 0xE6, 0x97, 0xA5, 0x29, 0x45, 0x28, - 0xE6, 0x9C, 0x88, 0x29, 0x45, 0x28, 0xE6, 0x9C, - 0x89, 0x29, 0x45, 0x28, 0xE6, 0x9C, 0xA8, 0x29, - 0x45, 0x28, 0xE6, 0xA0, 0xAA, 0x29, 0x45, 0x28, + 0xD8, 0xAC, 0x44, 0xD9, 0x86, 0xD8, 0xAD, 0x44, + 0xD9, 0x86, 0xD8, 0xAE, 0x44, 0xD9, 0x86, 0xD8, + 0xB1, 0x44, 0xD9, 0x86, 0xD8, 0xB2, 0x44, 0xD9, + 0x86, 0xD9, 0x85, 0x44, 0xD9, 0x86, 0xD9, 0x86, + 0x44, 0xD9, 0x86, 0xD9, 0x87, 0x44, 0xD9, 0x86, + 0xD9, 0x89, 0x44, 0xD9, 0x86, 0xD9, 0x8A, 0x44, + 0xD9, 0x87, 0xD8, 0xAC, 0x44, 0xD9, 0x87, 0xD9, + 0x85, 0x44, 0xD9, 0x87, 0xD9, 0x89, 0x44, 0xD9, // Bytes 2140 - 217f - 0xE6, 0xB0, 0xB4, 0x29, 0x45, 0x28, 0xE7, 0x81, - 0xAB, 0x29, 0x45, 0x28, 0xE7, 0x89, 0xB9, 0x29, - 0x45, 0x28, 0xE7, 0x9B, 0xA3, 0x29, 0x45, 0x28, - 0xE7, 0xA4, 0xBE, 0x29, 0x45, 0x28, 0xE7, 0xA5, - 0x9D, 0x29, 0x45, 0x28, 0xE7, 0xA5, 0xAD, 0x29, - 0x45, 0x28, 0xE8, 0x87, 0xAA, 0x29, 0x45, 0x28, - 0xE8, 0x87, 0xB3, 0x29, 0x45, 0x28, 0xE8, 0xB2, - 0xA1, 0x29, 0x45, 0x28, 0xE8, 0xB3, 0x87, 0x29, + 0x87, 0xD9, 0x8A, 0x44, 0xD9, 0x88, 0xD9, 0xB4, + 0x44, 0xD9, 0x8A, 0xD8, 0xAC, 0x44, 0xD9, 0x8A, + 0xD8, 0xAD, 0x44, 0xD9, 0x8A, 0xD8, 0xAE, 0x44, + 0xD9, 0x8A, 0xD8, 0xB1, 0x44, 0xD9, 0x8A, 0xD8, + 0xB2, 0x44, 0xD9, 0x8A, 0xD9, 0x85, 0x44, 0xD9, + 0x8A, 0xD9, 0x86, 0x44, 0xD9, 0x8A, 0xD9, 0x87, + 0x44, 0xD9, 0x8A, 0xD9, 0x89, 0x44, 0xD9, 0x8A, + 0xD9, 0x8A, 0x44, 0xD9, 0x8A, 0xD9, 0xB4, 0x44, // Bytes 2180 - 21bf - 0x45, 0x28, 0xE9, 0x87, 0x91, 0x29, 0x45, 0x30, - 0xE2, 0x81, 0x84, 0x33, 0x45, 0x31, 0x30, 0xE6, - 0x97, 0xA5, 0x45, 0x31, 0x30, 0xE6, 0x9C, 0x88, - 0x45, 0x31, 0x30, 0xE7, 0x82, 0xB9, 0x45, 0x31, - 0x31, 0xE6, 0x97, 0xA5, 0x45, 0x31, 0x31, 0xE6, - 0x9C, 0x88, 0x45, 0x31, 0x31, 0xE7, 0x82, 0xB9, - 0x45, 0x31, 0x32, 0xE6, 0x97, 0xA5, 0x45, 0x31, - 0x32, 0xE6, 0x9C, 0x88, 0x45, 0x31, 0x32, 0xE7, + 0xDB, 0x87, 0xD9, 0xB4, 0x45, 0x28, 0xE1, 0x84, + 0x80, 0x29, 0x45, 0x28, 0xE1, 0x84, 0x82, 0x29, + 0x45, 0x28, 0xE1, 0x84, 0x83, 0x29, 0x45, 0x28, + 0xE1, 0x84, 0x85, 0x29, 0x45, 0x28, 0xE1, 0x84, + 0x86, 0x29, 0x45, 0x28, 0xE1, 0x84, 0x87, 0x29, + 0x45, 0x28, 0xE1, 0x84, 0x89, 0x29, 0x45, 0x28, + 0xE1, 0x84, 0x8B, 0x29, 0x45, 0x28, 0xE1, 0x84, + 0x8C, 0x29, 0x45, 0x28, 0xE1, 0x84, 0x8E, 0x29, // Bytes 21c0 - 21ff - 0x82, 0xB9, 0x45, 0x31, 0x33, 0xE6, 0x97, 0xA5, - 0x45, 0x31, 0x33, 0xE7, 0x82, 0xB9, 0x45, 0x31, - 0x34, 0xE6, 0x97, 0xA5, 0x45, 0x31, 0x34, 0xE7, - 0x82, 0xB9, 0x45, 0x31, 0x35, 0xE6, 0x97, 0xA5, - 0x45, 0x31, 0x35, 0xE7, 0x82, 0xB9, 0x45, 0x31, - 0x36, 0xE6, 0x97, 0xA5, 0x45, 0x31, 0x36, 0xE7, - 0x82, 0xB9, 0x45, 0x31, 0x37, 0xE6, 0x97, 0xA5, - 0x45, 0x31, 0x37, 0xE7, 0x82, 0xB9, 0x45, 0x31, + 0x45, 0x28, 0xE1, 0x84, 0x8F, 0x29, 0x45, 0x28, + 0xE1, 0x84, 0x90, 0x29, 0x45, 0x28, 0xE1, 0x84, + 0x91, 0x29, 0x45, 0x28, 0xE1, 0x84, 0x92, 0x29, + 0x45, 0x28, 0xE4, 0xB8, 0x80, 0x29, 0x45, 0x28, + 0xE4, 0xB8, 0x83, 0x29, 0x45, 0x28, 0xE4, 0xB8, + 0x89, 0x29, 0x45, 0x28, 0xE4, 0xB9, 0x9D, 0x29, + 0x45, 0x28, 0xE4, 0xBA, 0x8C, 0x29, 0x45, 0x28, + 0xE4, 0xBA, 0x94, 0x29, 0x45, 0x28, 0xE4, 0xBB, // Bytes 2200 - 223f - 0x38, 0xE6, 0x97, 0xA5, 0x45, 0x31, 0x38, 0xE7, - 0x82, 0xB9, 0x45, 0x31, 0x39, 0xE6, 0x97, 0xA5, - 0x45, 0x31, 0x39, 0xE7, 0x82, 0xB9, 0x45, 0x31, - 0xE2, 0x81, 0x84, 0x32, 0x45, 0x31, 0xE2, 0x81, - 0x84, 0x33, 0x45, 0x31, 0xE2, 0x81, 0x84, 0x34, - 0x45, 0x31, 0xE2, 0x81, 0x84, 0x35, 0x45, 0x31, - 0xE2, 0x81, 0x84, 0x36, 0x45, 0x31, 0xE2, 0x81, - 0x84, 0x37, 0x45, 0x31, 0xE2, 0x81, 0x84, 0x38, + 0xA3, 0x29, 0x45, 0x28, 0xE4, 0xBC, 0x81, 0x29, + 0x45, 0x28, 0xE4, 0xBC, 0x91, 0x29, 0x45, 0x28, + 0xE5, 0x85, 0xAB, 0x29, 0x45, 0x28, 0xE5, 0x85, + 0xAD, 0x29, 0x45, 0x28, 0xE5, 0x8A, 0xB4, 0x29, + 0x45, 0x28, 0xE5, 0x8D, 0x81, 0x29, 0x45, 0x28, + 0xE5, 0x8D, 0x94, 0x29, 0x45, 0x28, 0xE5, 0x90, + 0x8D, 0x29, 0x45, 0x28, 0xE5, 0x91, 0xBC, 0x29, + 0x45, 0x28, 0xE5, 0x9B, 0x9B, 0x29, 0x45, 0x28, // Bytes 2240 - 227f - 0x45, 0x31, 0xE2, 0x81, 0x84, 0x39, 0x45, 0x32, - 0x30, 0xE6, 0x97, 0xA5, 0x45, 0x32, 0x30, 0xE7, - 0x82, 0xB9, 0x45, 0x32, 0x31, 0xE6, 0x97, 0xA5, - 0x45, 0x32, 0x31, 0xE7, 0x82, 0xB9, 0x45, 0x32, - 0x32, 0xE6, 0x97, 0xA5, 0x45, 0x32, 0x32, 0xE7, - 0x82, 0xB9, 0x45, 0x32, 0x33, 0xE6, 0x97, 0xA5, - 0x45, 0x32, 0x33, 0xE7, 0x82, 0xB9, 0x45, 0x32, - 0x34, 0xE6, 0x97, 0xA5, 0x45, 0x32, 0x34, 0xE7, + 0xE5, 0x9C, 0x9F, 0x29, 0x45, 0x28, 0xE5, 0xAD, + 0xA6, 0x29, 0x45, 0x28, 0xE6, 0x97, 0xA5, 0x29, + 0x45, 0x28, 0xE6, 0x9C, 0x88, 0x29, 0x45, 0x28, + 0xE6, 0x9C, 0x89, 0x29, 0x45, 0x28, 0xE6, 0x9C, + 0xA8, 0x29, 0x45, 0x28, 0xE6, 0xA0, 0xAA, 0x29, + 0x45, 0x28, 0xE6, 0xB0, 0xB4, 0x29, 0x45, 0x28, + 0xE7, 0x81, 0xAB, 0x29, 0x45, 0x28, 0xE7, 0x89, + 0xB9, 0x29, 0x45, 0x28, 0xE7, 0x9B, 0xA3, 0x29, // Bytes 2280 - 22bf - 0x82, 0xB9, 0x45, 0x32, 0x35, 0xE6, 0x97, 0xA5, - 0x45, 0x32, 0x36, 0xE6, 0x97, 0xA5, 0x45, 0x32, - 0x37, 0xE6, 0x97, 0xA5, 0x45, 0x32, 0x38, 0xE6, - 0x97, 0xA5, 0x45, 0x32, 0x39, 0xE6, 0x97, 0xA5, - 0x45, 0x32, 0xE2, 0x81, 0x84, 0x33, 0x45, 0x32, - 0xE2, 0x81, 0x84, 0x35, 0x45, 0x33, 0x30, 0xE6, - 0x97, 0xA5, 0x45, 0x33, 0x31, 0xE6, 0x97, 0xA5, - 0x45, 0x33, 0xE2, 0x81, 0x84, 0x34, 0x45, 0x33, + 0x45, 0x28, 0xE7, 0xA4, 0xBE, 0x29, 0x45, 0x28, + 0xE7, 0xA5, 0x9D, 0x29, 0x45, 0x28, 0xE7, 0xA5, + 0xAD, 0x29, 0x45, 0x28, 0xE8, 0x87, 0xAA, 0x29, + 0x45, 0x28, 0xE8, 0x87, 0xB3, 0x29, 0x45, 0x28, + 0xE8, 0xB2, 0xA1, 0x29, 0x45, 0x28, 0xE8, 0xB3, + 0x87, 0x29, 0x45, 0x28, 0xE9, 0x87, 0x91, 0x29, + 0x45, 0x30, 0xE2, 0x81, 0x84, 0x33, 0x45, 0x31, + 0x30, 0xE6, 0x97, 0xA5, 0x45, 0x31, 0x30, 0xE6, // Bytes 22c0 - 22ff - 0xE2, 0x81, 0x84, 0x35, 0x45, 0x33, 0xE2, 0x81, - 0x84, 0x38, 0x45, 0x34, 0xE2, 0x81, 0x84, 0x35, - 0x45, 0x35, 0xE2, 0x81, 0x84, 0x36, 0x45, 0x35, - 0xE2, 0x81, 0x84, 0x38, 0x45, 0x37, 0xE2, 0x81, - 0x84, 0x38, 0x45, 0x41, 0xE2, 0x88, 0x95, 0x6D, - 0x45, 0x56, 0xE2, 0x88, 0x95, 0x6D, 0x45, 0x6D, - 0xE2, 0x88, 0x95, 0x73, 0x46, 0x31, 0xE2, 0x81, - 0x84, 0x31, 0x30, 0x46, 0x43, 0xE2, 0x88, 0x95, + 0x9C, 0x88, 0x45, 0x31, 0x30, 0xE7, 0x82, 0xB9, + 0x45, 0x31, 0x31, 0xE6, 0x97, 0xA5, 0x45, 0x31, + 0x31, 0xE6, 0x9C, 0x88, 0x45, 0x31, 0x31, 0xE7, + 0x82, 0xB9, 0x45, 0x31, 0x32, 0xE6, 0x97, 0xA5, + 0x45, 0x31, 0x32, 0xE6, 0x9C, 0x88, 0x45, 0x31, + 0x32, 0xE7, 0x82, 0xB9, 0x45, 0x31, 0x33, 0xE6, + 0x97, 0xA5, 0x45, 0x31, 0x33, 0xE7, 0x82, 0xB9, + 0x45, 0x31, 0x34, 0xE6, 0x97, 0xA5, 0x45, 0x31, // Bytes 2300 - 233f - 0x6B, 0x67, 0x46, 0x6D, 0xE2, 0x88, 0x95, 0x73, - 0x32, 0x46, 0xD8, 0xA8, 0xD8, 0xAD, 0xD9, 0x8A, - 0x46, 0xD8, 0xA8, 0xD8, 0xAE, 0xD9, 0x8A, 0x46, - 0xD8, 0xAA, 0xD8, 0xAC, 0xD9, 0x85, 0x46, 0xD8, - 0xAA, 0xD8, 0xAC, 0xD9, 0x89, 0x46, 0xD8, 0xAA, - 0xD8, 0xAC, 0xD9, 0x8A, 0x46, 0xD8, 0xAA, 0xD8, - 0xAD, 0xD8, 0xAC, 0x46, 0xD8, 0xAA, 0xD8, 0xAD, - 0xD9, 0x85, 0x46, 0xD8, 0xAA, 0xD8, 0xAE, 0xD9, + 0x34, 0xE7, 0x82, 0xB9, 0x45, 0x31, 0x35, 0xE6, + 0x97, 0xA5, 0x45, 0x31, 0x35, 0xE7, 0x82, 0xB9, + 0x45, 0x31, 0x36, 0xE6, 0x97, 0xA5, 0x45, 0x31, + 0x36, 0xE7, 0x82, 0xB9, 0x45, 0x31, 0x37, 0xE6, + 0x97, 0xA5, 0x45, 0x31, 0x37, 0xE7, 0x82, 0xB9, + 0x45, 0x31, 0x38, 0xE6, 0x97, 0xA5, 0x45, 0x31, + 0x38, 0xE7, 0x82, 0xB9, 0x45, 0x31, 0x39, 0xE6, + 0x97, 0xA5, 0x45, 0x31, 0x39, 0xE7, 0x82, 0xB9, // Bytes 2340 - 237f - 0x85, 0x46, 0xD8, 0xAA, 0xD8, 0xAE, 0xD9, 0x89, - 0x46, 0xD8, 0xAA, 0xD8, 0xAE, 0xD9, 0x8A, 0x46, - 0xD8, 0xAA, 0xD9, 0x85, 0xD8, 0xAC, 0x46, 0xD8, - 0xAA, 0xD9, 0x85, 0xD8, 0xAD, 0x46, 0xD8, 0xAA, - 0xD9, 0x85, 0xD8, 0xAE, 0x46, 0xD8, 0xAA, 0xD9, - 0x85, 0xD9, 0x89, 0x46, 0xD8, 0xAA, 0xD9, 0x85, - 0xD9, 0x8A, 0x46, 0xD8, 0xAC, 0xD8, 0xAD, 0xD9, - 0x89, 0x46, 0xD8, 0xAC, 0xD8, 0xAD, 0xD9, 0x8A, + 0x45, 0x31, 0xE2, 0x81, 0x84, 0x32, 0x45, 0x31, + 0xE2, 0x81, 0x84, 0x33, 0x45, 0x31, 0xE2, 0x81, + 0x84, 0x34, 0x45, 0x31, 0xE2, 0x81, 0x84, 0x35, + 0x45, 0x31, 0xE2, 0x81, 0x84, 0x36, 0x45, 0x31, + 0xE2, 0x81, 0x84, 0x37, 0x45, 0x31, 0xE2, 0x81, + 0x84, 0x38, 0x45, 0x31, 0xE2, 0x81, 0x84, 0x39, + 0x45, 0x32, 0x30, 0xE6, 0x97, 0xA5, 0x45, 0x32, + 0x30, 0xE7, 0x82, 0xB9, 0x45, 0x32, 0x31, 0xE6, // Bytes 2380 - 23bf - 0x46, 0xD8, 0xAC, 0xD9, 0x85, 0xD8, 0xAD, 0x46, - 0xD8, 0xAC, 0xD9, 0x85, 0xD9, 0x89, 0x46, 0xD8, - 0xAC, 0xD9, 0x85, 0xD9, 0x8A, 0x46, 0xD8, 0xAD, - 0xD8, 0xAC, 0xD9, 0x8A, 0x46, 0xD8, 0xAD, 0xD9, - 0x85, 0xD9, 0x89, 0x46, 0xD8, 0xAD, 0xD9, 0x85, - 0xD9, 0x8A, 0x46, 0xD8, 0xB3, 0xD8, 0xAC, 0xD8, - 0xAD, 0x46, 0xD8, 0xB3, 0xD8, 0xAC, 0xD9, 0x89, - 0x46, 0xD8, 0xB3, 0xD8, 0xAD, 0xD8, 0xAC, 0x46, + 0x97, 0xA5, 0x45, 0x32, 0x31, 0xE7, 0x82, 0xB9, + 0x45, 0x32, 0x32, 0xE6, 0x97, 0xA5, 0x45, 0x32, + 0x32, 0xE7, 0x82, 0xB9, 0x45, 0x32, 0x33, 0xE6, + 0x97, 0xA5, 0x45, 0x32, 0x33, 0xE7, 0x82, 0xB9, + 0x45, 0x32, 0x34, 0xE6, 0x97, 0xA5, 0x45, 0x32, + 0x34, 0xE7, 0x82, 0xB9, 0x45, 0x32, 0x35, 0xE6, + 0x97, 0xA5, 0x45, 0x32, 0x36, 0xE6, 0x97, 0xA5, + 0x45, 0x32, 0x37, 0xE6, 0x97, 0xA5, 0x45, 0x32, // Bytes 23c0 - 23ff - 0xD8, 0xB3, 0xD8, 0xAE, 0xD9, 0x89, 0x46, 0xD8, - 0xB3, 0xD8, 0xAE, 0xD9, 0x8A, 0x46, 0xD8, 0xB3, - 0xD9, 0x85, 0xD8, 0xAC, 0x46, 0xD8, 0xB3, 0xD9, - 0x85, 0xD8, 0xAD, 0x46, 0xD8, 0xB3, 0xD9, 0x85, - 0xD9, 0x85, 0x46, 0xD8, 0xB4, 0xD8, 0xAC, 0xD9, - 0x8A, 0x46, 0xD8, 0xB4, 0xD8, 0xAD, 0xD9, 0x85, - 0x46, 0xD8, 0xB4, 0xD8, 0xAD, 0xD9, 0x8A, 0x46, - 0xD8, 0xB4, 0xD9, 0x85, 0xD8, 0xAE, 0x46, 0xD8, + 0x38, 0xE6, 0x97, 0xA5, 0x45, 0x32, 0x39, 0xE6, + 0x97, 0xA5, 0x45, 0x32, 0xE2, 0x81, 0x84, 0x33, + 0x45, 0x32, 0xE2, 0x81, 0x84, 0x35, 0x45, 0x33, + 0x30, 0xE6, 0x97, 0xA5, 0x45, 0x33, 0x31, 0xE6, + 0x97, 0xA5, 0x45, 0x33, 0xE2, 0x81, 0x84, 0x34, + 0x45, 0x33, 0xE2, 0x81, 0x84, 0x35, 0x45, 0x33, + 0xE2, 0x81, 0x84, 0x38, 0x45, 0x34, 0xE2, 0x81, + 0x84, 0x35, 0x45, 0x35, 0xE2, 0x81, 0x84, 0x36, // Bytes 2400 - 243f - 0xB4, 0xD9, 0x85, 0xD9, 0x85, 0x46, 0xD8, 0xB5, - 0xD8, 0xAD, 0xD8, 0xAD, 0x46, 0xD8, 0xB5, 0xD8, - 0xAD, 0xD9, 0x8A, 0x46, 0xD8, 0xB5, 0xD9, 0x84, - 0xD9, 0x89, 0x46, 0xD8, 0xB5, 0xD9, 0x84, 0xDB, - 0x92, 0x46, 0xD8, 0xB5, 0xD9, 0x85, 0xD9, 0x85, - 0x46, 0xD8, 0xB6, 0xD8, 0xAD, 0xD9, 0x89, 0x46, - 0xD8, 0xB6, 0xD8, 0xAD, 0xD9, 0x8A, 0x46, 0xD8, - 0xB6, 0xD8, 0xAE, 0xD9, 0x85, 0x46, 0xD8, 0xB7, + 0x45, 0x35, 0xE2, 0x81, 0x84, 0x38, 0x45, 0x37, + 0xE2, 0x81, 0x84, 0x38, 0x45, 0x41, 0xE2, 0x88, + 0x95, 0x6D, 0x45, 0x56, 0xE2, 0x88, 0x95, 0x6D, + 0x45, 0x6D, 0xE2, 0x88, 0x95, 0x73, 0x46, 0x31, + 0xE2, 0x81, 0x84, 0x31, 0x30, 0x46, 0x43, 0xE2, + 0x88, 0x95, 0x6B, 0x67, 0x46, 0x6D, 0xE2, 0x88, + 0x95, 0x73, 0x32, 0x46, 0xD8, 0xA8, 0xD8, 0xAD, + 0xD9, 0x8A, 0x46, 0xD8, 0xA8, 0xD8, 0xAE, 0xD9, // Bytes 2440 - 247f - 0xD9, 0x85, 0xD8, 0xAD, 0x46, 0xD8, 0xB7, 0xD9, - 0x85, 0xD9, 0x85, 0x46, 0xD8, 0xB7, 0xD9, 0x85, - 0xD9, 0x8A, 0x46, 0xD8, 0xB9, 0xD8, 0xAC, 0xD9, - 0x85, 0x46, 0xD8, 0xB9, 0xD9, 0x85, 0xD9, 0x85, - 0x46, 0xD8, 0xB9, 0xD9, 0x85, 0xD9, 0x89, 0x46, - 0xD8, 0xB9, 0xD9, 0x85, 0xD9, 0x8A, 0x46, 0xD8, - 0xBA, 0xD9, 0x85, 0xD9, 0x85, 0x46, 0xD8, 0xBA, - 0xD9, 0x85, 0xD9, 0x89, 0x46, 0xD8, 0xBA, 0xD9, + 0x8A, 0x46, 0xD8, 0xAA, 0xD8, 0xAC, 0xD9, 0x85, + 0x46, 0xD8, 0xAA, 0xD8, 0xAC, 0xD9, 0x89, 0x46, + 0xD8, 0xAA, 0xD8, 0xAC, 0xD9, 0x8A, 0x46, 0xD8, + 0xAA, 0xD8, 0xAD, 0xD8, 0xAC, 0x46, 0xD8, 0xAA, + 0xD8, 0xAD, 0xD9, 0x85, 0x46, 0xD8, 0xAA, 0xD8, + 0xAE, 0xD9, 0x85, 0x46, 0xD8, 0xAA, 0xD8, 0xAE, + 0xD9, 0x89, 0x46, 0xD8, 0xAA, 0xD8, 0xAE, 0xD9, + 0x8A, 0x46, 0xD8, 0xAA, 0xD9, 0x85, 0xD8, 0xAC, // Bytes 2480 - 24bf - 0x85, 0xD9, 0x8A, 0x46, 0xD9, 0x81, 0xD8, 0xAE, - 0xD9, 0x85, 0x46, 0xD9, 0x81, 0xD9, 0x85, 0xD9, - 0x8A, 0x46, 0xD9, 0x82, 0xD9, 0x84, 0xDB, 0x92, - 0x46, 0xD9, 0x82, 0xD9, 0x85, 0xD8, 0xAD, 0x46, - 0xD9, 0x82, 0xD9, 0x85, 0xD9, 0x85, 0x46, 0xD9, - 0x82, 0xD9, 0x85, 0xD9, 0x8A, 0x46, 0xD9, 0x83, - 0xD9, 0x85, 0xD9, 0x85, 0x46, 0xD9, 0x83, 0xD9, - 0x85, 0xD9, 0x8A, 0x46, 0xD9, 0x84, 0xD8, 0xAC, + 0x46, 0xD8, 0xAA, 0xD9, 0x85, 0xD8, 0xAD, 0x46, + 0xD8, 0xAA, 0xD9, 0x85, 0xD8, 0xAE, 0x46, 0xD8, + 0xAA, 0xD9, 0x85, 0xD9, 0x89, 0x46, 0xD8, 0xAA, + 0xD9, 0x85, 0xD9, 0x8A, 0x46, 0xD8, 0xAC, 0xD8, + 0xAD, 0xD9, 0x89, 0x46, 0xD8, 0xAC, 0xD8, 0xAD, + 0xD9, 0x8A, 0x46, 0xD8, 0xAC, 0xD9, 0x85, 0xD8, + 0xAD, 0x46, 0xD8, 0xAC, 0xD9, 0x85, 0xD9, 0x89, + 0x46, 0xD8, 0xAC, 0xD9, 0x85, 0xD9, 0x8A, 0x46, // Bytes 24c0 - 24ff - 0xD8, 0xAC, 0x46, 0xD9, 0x84, 0xD8, 0xAC, 0xD9, - 0x85, 0x46, 0xD9, 0x84, 0xD8, 0xAC, 0xD9, 0x8A, - 0x46, 0xD9, 0x84, 0xD8, 0xAD, 0xD9, 0x85, 0x46, - 0xD9, 0x84, 0xD8, 0xAD, 0xD9, 0x89, 0x46, 0xD9, - 0x84, 0xD8, 0xAD, 0xD9, 0x8A, 0x46, 0xD9, 0x84, - 0xD8, 0xAE, 0xD9, 0x85, 0x46, 0xD9, 0x84, 0xD9, - 0x85, 0xD8, 0xAD, 0x46, 0xD9, 0x84, 0xD9, 0x85, - 0xD9, 0x8A, 0x46, 0xD9, 0x85, 0xD8, 0xAC, 0xD8, + 0xD8, 0xAD, 0xD8, 0xAC, 0xD9, 0x8A, 0x46, 0xD8, + 0xAD, 0xD9, 0x85, 0xD9, 0x89, 0x46, 0xD8, 0xAD, + 0xD9, 0x85, 0xD9, 0x8A, 0x46, 0xD8, 0xB3, 0xD8, + 0xAC, 0xD8, 0xAD, 0x46, 0xD8, 0xB3, 0xD8, 0xAC, + 0xD9, 0x89, 0x46, 0xD8, 0xB3, 0xD8, 0xAD, 0xD8, + 0xAC, 0x46, 0xD8, 0xB3, 0xD8, 0xAE, 0xD9, 0x89, + 0x46, 0xD8, 0xB3, 0xD8, 0xAE, 0xD9, 0x8A, 0x46, + 0xD8, 0xB3, 0xD9, 0x85, 0xD8, 0xAC, 0x46, 0xD8, // Bytes 2500 - 253f - 0xAD, 0x46, 0xD9, 0x85, 0xD8, 0xAC, 0xD8, 0xAE, - 0x46, 0xD9, 0x85, 0xD8, 0xAC, 0xD9, 0x85, 0x46, - 0xD9, 0x85, 0xD8, 0xAC, 0xD9, 0x8A, 0x46, 0xD9, - 0x85, 0xD8, 0xAD, 0xD8, 0xAC, 0x46, 0xD9, 0x85, - 0xD8, 0xAD, 0xD9, 0x85, 0x46, 0xD9, 0x85, 0xD8, - 0xAD, 0xD9, 0x8A, 0x46, 0xD9, 0x85, 0xD8, 0xAE, - 0xD8, 0xAC, 0x46, 0xD9, 0x85, 0xD8, 0xAE, 0xD9, - 0x85, 0x46, 0xD9, 0x85, 0xD8, 0xAE, 0xD9, 0x8A, + 0xB3, 0xD9, 0x85, 0xD8, 0xAD, 0x46, 0xD8, 0xB3, + 0xD9, 0x85, 0xD9, 0x85, 0x46, 0xD8, 0xB4, 0xD8, + 0xAC, 0xD9, 0x8A, 0x46, 0xD8, 0xB4, 0xD8, 0xAD, + 0xD9, 0x85, 0x46, 0xD8, 0xB4, 0xD8, 0xAD, 0xD9, + 0x8A, 0x46, 0xD8, 0xB4, 0xD9, 0x85, 0xD8, 0xAE, + 0x46, 0xD8, 0xB4, 0xD9, 0x85, 0xD9, 0x85, 0x46, + 0xD8, 0xB5, 0xD8, 0xAD, 0xD8, 0xAD, 0x46, 0xD8, + 0xB5, 0xD8, 0xAD, 0xD9, 0x8A, 0x46, 0xD8, 0xB5, // Bytes 2540 - 257f - 0x46, 0xD9, 0x85, 0xD9, 0x85, 0xD9, 0x8A, 0x46, - 0xD9, 0x86, 0xD8, 0xAC, 0xD8, 0xAD, 0x46, 0xD9, - 0x86, 0xD8, 0xAC, 0xD9, 0x85, 0x46, 0xD9, 0x86, - 0xD8, 0xAC, 0xD9, 0x89, 0x46, 0xD9, 0x86, 0xD8, - 0xAC, 0xD9, 0x8A, 0x46, 0xD9, 0x86, 0xD8, 0xAD, - 0xD9, 0x85, 0x46, 0xD9, 0x86, 0xD8, 0xAD, 0xD9, - 0x89, 0x46, 0xD9, 0x86, 0xD8, 0xAD, 0xD9, 0x8A, - 0x46, 0xD9, 0x86, 0xD9, 0x85, 0xD9, 0x89, 0x46, + 0xD9, 0x84, 0xD9, 0x89, 0x46, 0xD8, 0xB5, 0xD9, + 0x84, 0xDB, 0x92, 0x46, 0xD8, 0xB5, 0xD9, 0x85, + 0xD9, 0x85, 0x46, 0xD8, 0xB6, 0xD8, 0xAD, 0xD9, + 0x89, 0x46, 0xD8, 0xB6, 0xD8, 0xAD, 0xD9, 0x8A, + 0x46, 0xD8, 0xB6, 0xD8, 0xAE, 0xD9, 0x85, 0x46, + 0xD8, 0xB7, 0xD9, 0x85, 0xD8, 0xAD, 0x46, 0xD8, + 0xB7, 0xD9, 0x85, 0xD9, 0x85, 0x46, 0xD8, 0xB7, + 0xD9, 0x85, 0xD9, 0x8A, 0x46, 0xD8, 0xB9, 0xD8, // Bytes 2580 - 25bf - 0xD9, 0x86, 0xD9, 0x85, 0xD9, 0x8A, 0x46, 0xD9, - 0x87, 0xD9, 0x85, 0xD8, 0xAC, 0x46, 0xD9, 0x87, - 0xD9, 0x85, 0xD9, 0x85, 0x46, 0xD9, 0x8A, 0xD8, - 0xAC, 0xD9, 0x8A, 0x46, 0xD9, 0x8A, 0xD8, 0xAD, - 0xD9, 0x8A, 0x46, 0xD9, 0x8A, 0xD9, 0x85, 0xD9, - 0x85, 0x46, 0xD9, 0x8A, 0xD9, 0x85, 0xD9, 0x8A, - 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xD8, 0xA7, 0x46, - 0xD9, 0x8A, 0xD9, 0x94, 0xD8, 0xAC, 0x46, 0xD9, + 0xAC, 0xD9, 0x85, 0x46, 0xD8, 0xB9, 0xD9, 0x85, + 0xD9, 0x85, 0x46, 0xD8, 0xB9, 0xD9, 0x85, 0xD9, + 0x89, 0x46, 0xD8, 0xB9, 0xD9, 0x85, 0xD9, 0x8A, + 0x46, 0xD8, 0xBA, 0xD9, 0x85, 0xD9, 0x85, 0x46, + 0xD8, 0xBA, 0xD9, 0x85, 0xD9, 0x89, 0x46, 0xD8, + 0xBA, 0xD9, 0x85, 0xD9, 0x8A, 0x46, 0xD9, 0x81, + 0xD8, 0xAE, 0xD9, 0x85, 0x46, 0xD9, 0x81, 0xD9, + 0x85, 0xD9, 0x8A, 0x46, 0xD9, 0x82, 0xD9, 0x84, // Bytes 25c0 - 25ff - 0x8A, 0xD9, 0x94, 0xD8, 0xAD, 0x46, 0xD9, 0x8A, - 0xD9, 0x94, 0xD8, 0xAE, 0x46, 0xD9, 0x8A, 0xD9, - 0x94, 0xD8, 0xB1, 0x46, 0xD9, 0x8A, 0xD9, 0x94, - 0xD8, 0xB2, 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xD9, - 0x85, 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xD9, 0x86, - 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xD9, 0x87, 0x46, - 0xD9, 0x8A, 0xD9, 0x94, 0xD9, 0x88, 0x46, 0xD9, - 0x8A, 0xD9, 0x94, 0xD9, 0x89, 0x46, 0xD9, 0x8A, + 0xDB, 0x92, 0x46, 0xD9, 0x82, 0xD9, 0x85, 0xD8, + 0xAD, 0x46, 0xD9, 0x82, 0xD9, 0x85, 0xD9, 0x85, + 0x46, 0xD9, 0x82, 0xD9, 0x85, 0xD9, 0x8A, 0x46, + 0xD9, 0x83, 0xD9, 0x85, 0xD9, 0x85, 0x46, 0xD9, + 0x83, 0xD9, 0x85, 0xD9, 0x8A, 0x46, 0xD9, 0x84, + 0xD8, 0xAC, 0xD8, 0xAC, 0x46, 0xD9, 0x84, 0xD8, + 0xAC, 0xD9, 0x85, 0x46, 0xD9, 0x84, 0xD8, 0xAC, + 0xD9, 0x8A, 0x46, 0xD9, 0x84, 0xD8, 0xAD, 0xD9, // Bytes 2600 - 263f - 0xD9, 0x94, 0xD9, 0x8A, 0x46, 0xD9, 0x8A, 0xD9, - 0x94, 0xDB, 0x86, 0x46, 0xD9, 0x8A, 0xD9, 0x94, - 0xDB, 0x87, 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xDB, - 0x88, 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xDB, 0x90, - 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xDB, 0x95, 0x46, - 0xE0, 0xB9, 0x8D, 0xE0, 0xB8, 0xB2, 0x46, 0xE0, - 0xBA, 0xAB, 0xE0, 0xBA, 0x99, 0x46, 0xE0, 0xBA, - 0xAB, 0xE0, 0xBA, 0xA1, 0x46, 0xE0, 0xBB, 0x8D, + 0x85, 0x46, 0xD9, 0x84, 0xD8, 0xAD, 0xD9, 0x89, + 0x46, 0xD9, 0x84, 0xD8, 0xAD, 0xD9, 0x8A, 0x46, + 0xD9, 0x84, 0xD8, 0xAE, 0xD9, 0x85, 0x46, 0xD9, + 0x84, 0xD9, 0x85, 0xD8, 0xAD, 0x46, 0xD9, 0x84, + 0xD9, 0x85, 0xD9, 0x8A, 0x46, 0xD9, 0x85, 0xD8, + 0xAC, 0xD8, 0xAD, 0x46, 0xD9, 0x85, 0xD8, 0xAC, + 0xD8, 0xAE, 0x46, 0xD9, 0x85, 0xD8, 0xAC, 0xD9, + 0x85, 0x46, 0xD9, 0x85, 0xD8, 0xAC, 0xD9, 0x8A, // Bytes 2640 - 267f - 0xE0, 0xBA, 0xB2, 0x46, 0xE0, 0xBD, 0x80, 0xE0, - 0xBE, 0xB5, 0x46, 0xE0, 0xBD, 0x82, 0xE0, 0xBE, - 0xB7, 0x46, 0xE0, 0xBD, 0x8C, 0xE0, 0xBE, 0xB7, - 0x46, 0xE0, 0xBD, 0x91, 0xE0, 0xBE, 0xB7, 0x46, - 0xE0, 0xBD, 0x96, 0xE0, 0xBE, 0xB7, 0x46, 0xE0, - 0xBD, 0x9B, 0xE0, 0xBE, 0xB7, 0x46, 0xE0, 0xBE, - 0x90, 0xE0, 0xBE, 0xB5, 0x46, 0xE0, 0xBE, 0x92, - 0xE0, 0xBE, 0xB7, 0x46, 0xE0, 0xBE, 0x9C, 0xE0, + 0x46, 0xD9, 0x85, 0xD8, 0xAD, 0xD8, 0xAC, 0x46, + 0xD9, 0x85, 0xD8, 0xAD, 0xD9, 0x85, 0x46, 0xD9, + 0x85, 0xD8, 0xAD, 0xD9, 0x8A, 0x46, 0xD9, 0x85, + 0xD8, 0xAE, 0xD8, 0xAC, 0x46, 0xD9, 0x85, 0xD8, + 0xAE, 0xD9, 0x85, 0x46, 0xD9, 0x85, 0xD8, 0xAE, + 0xD9, 0x8A, 0x46, 0xD9, 0x85, 0xD9, 0x85, 0xD9, + 0x8A, 0x46, 0xD9, 0x86, 0xD8, 0xAC, 0xD8, 0xAD, + 0x46, 0xD9, 0x86, 0xD8, 0xAC, 0xD9, 0x85, 0x46, // Bytes 2680 - 26bf - 0xBE, 0xB7, 0x46, 0xE0, 0xBE, 0xA1, 0xE0, 0xBE, - 0xB7, 0x46, 0xE0, 0xBE, 0xA6, 0xE0, 0xBE, 0xB7, - 0x46, 0xE0, 0xBE, 0xAB, 0xE0, 0xBE, 0xB7, 0x46, - 0xE2, 0x80, 0xB2, 0xE2, 0x80, 0xB2, 0x46, 0xE2, - 0x80, 0xB5, 0xE2, 0x80, 0xB5, 0x46, 0xE2, 0x88, - 0xAB, 0xE2, 0x88, 0xAB, 0x46, 0xE2, 0x88, 0xAE, - 0xE2, 0x88, 0xAE, 0x46, 0xE3, 0x81, 0xBB, 0xE3, - 0x81, 0x8B, 0x46, 0xE3, 0x82, 0x88, 0xE3, 0x82, + 0xD9, 0x86, 0xD8, 0xAC, 0xD9, 0x89, 0x46, 0xD9, + 0x86, 0xD8, 0xAC, 0xD9, 0x8A, 0x46, 0xD9, 0x86, + 0xD8, 0xAD, 0xD9, 0x85, 0x46, 0xD9, 0x86, 0xD8, + 0xAD, 0xD9, 0x89, 0x46, 0xD9, 0x86, 0xD8, 0xAD, + 0xD9, 0x8A, 0x46, 0xD9, 0x86, 0xD9, 0x85, 0xD9, + 0x89, 0x46, 0xD9, 0x86, 0xD9, 0x85, 0xD9, 0x8A, + 0x46, 0xD9, 0x87, 0xD9, 0x85, 0xD8, 0xAC, 0x46, + 0xD9, 0x87, 0xD9, 0x85, 0xD9, 0x85, 0x46, 0xD9, // Bytes 26c0 - 26ff - 0x8A, 0x46, 0xE3, 0x82, 0xAD, 0xE3, 0x83, 0xAD, - 0x46, 0xE3, 0x82, 0xB3, 0xE3, 0x82, 0xB3, 0x46, - 0xE3, 0x82, 0xB3, 0xE3, 0x83, 0x88, 0x46, 0xE3, - 0x83, 0x88, 0xE3, 0x83, 0xB3, 0x46, 0xE3, 0x83, - 0x8A, 0xE3, 0x83, 0x8E, 0x46, 0xE3, 0x83, 0x9B, - 0xE3, 0x83, 0xB3, 0x46, 0xE3, 0x83, 0x9F, 0xE3, - 0x83, 0xAA, 0x46, 0xE3, 0x83, 0xAA, 0xE3, 0x83, - 0xA9, 0x46, 0xE3, 0x83, 0xAC, 0xE3, 0x83, 0xA0, + 0x8A, 0xD8, 0xAC, 0xD9, 0x8A, 0x46, 0xD9, 0x8A, + 0xD8, 0xAD, 0xD9, 0x8A, 0x46, 0xD9, 0x8A, 0xD9, + 0x85, 0xD9, 0x85, 0x46, 0xD9, 0x8A, 0xD9, 0x85, + 0xD9, 0x8A, 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xD8, + 0xA7, 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xD8, 0xAC, + 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xD8, 0xAD, 0x46, + 0xD9, 0x8A, 0xD9, 0x94, 0xD8, 0xAE, 0x46, 0xD9, + 0x8A, 0xD9, 0x94, 0xD8, 0xB1, 0x46, 0xD9, 0x8A, // Bytes 2700 - 273f - 0x46, 0xE4, 0xBB, 0xA4, 0xE5, 0x92, 0x8C, 0x46, - 0xE5, 0xA4, 0xA7, 0xE6, 0xAD, 0xA3, 0x46, 0xE5, - 0xB9, 0xB3, 0xE6, 0x88, 0x90, 0x46, 0xE6, 0x98, - 0x8E, 0xE6, 0xB2, 0xBB, 0x46, 0xE6, 0x98, 0xAD, - 0xE5, 0x92, 0x8C, 0x47, 0x72, 0x61, 0x64, 0xE2, - 0x88, 0x95, 0x73, 0x47, 0xE3, 0x80, 0x94, 0x53, - 0xE3, 0x80, 0x95, 0x48, 0x28, 0xE1, 0x84, 0x80, - 0xE1, 0x85, 0xA1, 0x29, 0x48, 0x28, 0xE1, 0x84, + 0xD9, 0x94, 0xD8, 0xB2, 0x46, 0xD9, 0x8A, 0xD9, + 0x94, 0xD9, 0x85, 0x46, 0xD9, 0x8A, 0xD9, 0x94, + 0xD9, 0x86, 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xD9, + 0x87, 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xD9, 0x88, + 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xD9, 0x89, 0x46, + 0xD9, 0x8A, 0xD9, 0x94, 0xD9, 0x8A, 0x46, 0xD9, + 0x8A, 0xD9, 0x94, 0xDB, 0x86, 0x46, 0xD9, 0x8A, + 0xD9, 0x94, 0xDB, 0x87, 0x46, 0xD9, 0x8A, 0xD9, // Bytes 2740 - 277f - 0x82, 0xE1, 0x85, 0xA1, 0x29, 0x48, 0x28, 0xE1, - 0x84, 0x83, 0xE1, 0x85, 0xA1, 0x29, 0x48, 0x28, - 0xE1, 0x84, 0x85, 0xE1, 0x85, 0xA1, 0x29, 0x48, - 0x28, 0xE1, 0x84, 0x86, 0xE1, 0x85, 0xA1, 0x29, - 0x48, 0x28, 0xE1, 0x84, 0x87, 0xE1, 0x85, 0xA1, - 0x29, 0x48, 0x28, 0xE1, 0x84, 0x89, 0xE1, 0x85, - 0xA1, 0x29, 0x48, 0x28, 0xE1, 0x84, 0x8B, 0xE1, - 0x85, 0xA1, 0x29, 0x48, 0x28, 0xE1, 0x84, 0x8C, + 0x94, 0xDB, 0x88, 0x46, 0xD9, 0x8A, 0xD9, 0x94, + 0xDB, 0x90, 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xDB, + 0x95, 0x46, 0xE0, 0xB9, 0x8D, 0xE0, 0xB8, 0xB2, + 0x46, 0xE0, 0xBA, 0xAB, 0xE0, 0xBA, 0x99, 0x46, + 0xE0, 0xBA, 0xAB, 0xE0, 0xBA, 0xA1, 0x46, 0xE0, + 0xBB, 0x8D, 0xE0, 0xBA, 0xB2, 0x46, 0xE0, 0xBD, + 0x80, 0xE0, 0xBE, 0xB5, 0x46, 0xE0, 0xBD, 0x82, + 0xE0, 0xBE, 0xB7, 0x46, 0xE0, 0xBD, 0x8C, 0xE0, // Bytes 2780 - 27bf - 0xE1, 0x85, 0xA1, 0x29, 0x48, 0x28, 0xE1, 0x84, - 0x8C, 0xE1, 0x85, 0xAE, 0x29, 0x48, 0x28, 0xE1, - 0x84, 0x8E, 0xE1, 0x85, 0xA1, 0x29, 0x48, 0x28, - 0xE1, 0x84, 0x8F, 0xE1, 0x85, 0xA1, 0x29, 0x48, - 0x28, 0xE1, 0x84, 0x90, 0xE1, 0x85, 0xA1, 0x29, - 0x48, 0x28, 0xE1, 0x84, 0x91, 0xE1, 0x85, 0xA1, - 0x29, 0x48, 0x28, 0xE1, 0x84, 0x92, 0xE1, 0x85, - 0xA1, 0x29, 0x48, 0x72, 0x61, 0x64, 0xE2, 0x88, + 0xBE, 0xB7, 0x46, 0xE0, 0xBD, 0x91, 0xE0, 0xBE, + 0xB7, 0x46, 0xE0, 0xBD, 0x96, 0xE0, 0xBE, 0xB7, + 0x46, 0xE0, 0xBD, 0x9B, 0xE0, 0xBE, 0xB7, 0x46, + 0xE0, 0xBE, 0x90, 0xE0, 0xBE, 0xB5, 0x46, 0xE0, + 0xBE, 0x92, 0xE0, 0xBE, 0xB7, 0x46, 0xE0, 0xBE, + 0x9C, 0xE0, 0xBE, 0xB7, 0x46, 0xE0, 0xBE, 0xA1, + 0xE0, 0xBE, 0xB7, 0x46, 0xE0, 0xBE, 0xA6, 0xE0, + 0xBE, 0xB7, 0x46, 0xE0, 0xBE, 0xAB, 0xE0, 0xBE, // Bytes 27c0 - 27ff - 0x95, 0x73, 0x32, 0x48, 0xD8, 0xA7, 0xD9, 0x83, - 0xD8, 0xA8, 0xD8, 0xB1, 0x48, 0xD8, 0xA7, 0xD9, - 0x84, 0xD9, 0x84, 0xD9, 0x87, 0x48, 0xD8, 0xB1, - 0xD8, 0xB3, 0xD9, 0x88, 0xD9, 0x84, 0x48, 0xD8, - 0xB1, 0xDB, 0x8C, 0xD8, 0xA7, 0xD9, 0x84, 0x48, - 0xD8, 0xB5, 0xD9, 0x84, 0xD8, 0xB9, 0xD9, 0x85, - 0x48, 0xD8, 0xB9, 0xD9, 0x84, 0xD9, 0x8A, 0xD9, - 0x87, 0x48, 0xD9, 0x85, 0xD8, 0xAD, 0xD9, 0x85, + 0xB7, 0x46, 0xE2, 0x80, 0xB2, 0xE2, 0x80, 0xB2, + 0x46, 0xE2, 0x80, 0xB5, 0xE2, 0x80, 0xB5, 0x46, + 0xE2, 0x88, 0xAB, 0xE2, 0x88, 0xAB, 0x46, 0xE2, + 0x88, 0xAE, 0xE2, 0x88, 0xAE, 0x46, 0xE3, 0x81, + 0xBB, 0xE3, 0x81, 0x8B, 0x46, 0xE3, 0x82, 0x88, + 0xE3, 0x82, 0x8A, 0x46, 0xE3, 0x82, 0xAD, 0xE3, + 0x83, 0xAD, 0x46, 0xE3, 0x82, 0xB3, 0xE3, 0x82, + 0xB3, 0x46, 0xE3, 0x82, 0xB3, 0xE3, 0x83, 0x88, // Bytes 2800 - 283f - 0xD8, 0xAF, 0x48, 0xD9, 0x88, 0xD8, 0xB3, 0xD9, - 0x84, 0xD9, 0x85, 0x49, 0xE2, 0x80, 0xB2, 0xE2, - 0x80, 0xB2, 0xE2, 0x80, 0xB2, 0x49, 0xE2, 0x80, - 0xB5, 0xE2, 0x80, 0xB5, 0xE2, 0x80, 0xB5, 0x49, - 0xE2, 0x88, 0xAB, 0xE2, 0x88, 0xAB, 0xE2, 0x88, - 0xAB, 0x49, 0xE2, 0x88, 0xAE, 0xE2, 0x88, 0xAE, - 0xE2, 0x88, 0xAE, 0x49, 0xE3, 0x80, 0x94, 0xE4, - 0xB8, 0x89, 0xE3, 0x80, 0x95, 0x49, 0xE3, 0x80, + 0x46, 0xE3, 0x83, 0x88, 0xE3, 0x83, 0xB3, 0x46, + 0xE3, 0x83, 0x8A, 0xE3, 0x83, 0x8E, 0x46, 0xE3, + 0x83, 0x9B, 0xE3, 0x83, 0xB3, 0x46, 0xE3, 0x83, + 0x9F, 0xE3, 0x83, 0xAA, 0x46, 0xE3, 0x83, 0xAA, + 0xE3, 0x83, 0xA9, 0x46, 0xE3, 0x83, 0xAC, 0xE3, + 0x83, 0xA0, 0x46, 0xE4, 0xBB, 0xA4, 0xE5, 0x92, + 0x8C, 0x46, 0xE5, 0xA4, 0xA7, 0xE6, 0xAD, 0xA3, + 0x46, 0xE5, 0xB9, 0xB3, 0xE6, 0x88, 0x90, 0x46, // Bytes 2840 - 287f - 0x94, 0xE4, 0xBA, 0x8C, 0xE3, 0x80, 0x95, 0x49, - 0xE3, 0x80, 0x94, 0xE5, 0x8B, 0x9D, 0xE3, 0x80, - 0x95, 0x49, 0xE3, 0x80, 0x94, 0xE5, 0xAE, 0x89, - 0xE3, 0x80, 0x95, 0x49, 0xE3, 0x80, 0x94, 0xE6, - 0x89, 0x93, 0xE3, 0x80, 0x95, 0x49, 0xE3, 0x80, - 0x94, 0xE6, 0x95, 0x97, 0xE3, 0x80, 0x95, 0x49, - 0xE3, 0x80, 0x94, 0xE6, 0x9C, 0xAC, 0xE3, 0x80, - 0x95, 0x49, 0xE3, 0x80, 0x94, 0xE7, 0x82, 0xB9, + 0xE6, 0x98, 0x8E, 0xE6, 0xB2, 0xBB, 0x46, 0xE6, + 0x98, 0xAD, 0xE5, 0x92, 0x8C, 0x47, 0x72, 0x61, + 0x64, 0xE2, 0x88, 0x95, 0x73, 0x47, 0xE3, 0x80, + 0x94, 0x53, 0xE3, 0x80, 0x95, 0x48, 0x28, 0xE1, + 0x84, 0x80, 0xE1, 0x85, 0xA1, 0x29, 0x48, 0x28, + 0xE1, 0x84, 0x82, 0xE1, 0x85, 0xA1, 0x29, 0x48, + 0x28, 0xE1, 0x84, 0x83, 0xE1, 0x85, 0xA1, 0x29, + 0x48, 0x28, 0xE1, 0x84, 0x85, 0xE1, 0x85, 0xA1, // Bytes 2880 - 28bf - 0xE3, 0x80, 0x95, 0x49, 0xE3, 0x80, 0x94, 0xE7, - 0x9B, 0x97, 0xE3, 0x80, 0x95, 0x49, 0xE3, 0x82, - 0xA2, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0xAB, 0x49, - 0xE3, 0x82, 0xA4, 0xE3, 0x83, 0xB3, 0xE3, 0x83, - 0x81, 0x49, 0xE3, 0x82, 0xA6, 0xE3, 0x82, 0xA9, - 0xE3, 0x83, 0xB3, 0x49, 0xE3, 0x82, 0xAA, 0xE3, - 0x83, 0xB3, 0xE3, 0x82, 0xB9, 0x49, 0xE3, 0x82, - 0xAA, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0xA0, 0x49, + 0x29, 0x48, 0x28, 0xE1, 0x84, 0x86, 0xE1, 0x85, + 0xA1, 0x29, 0x48, 0x28, 0xE1, 0x84, 0x87, 0xE1, + 0x85, 0xA1, 0x29, 0x48, 0x28, 0xE1, 0x84, 0x89, + 0xE1, 0x85, 0xA1, 0x29, 0x48, 0x28, 0xE1, 0x84, + 0x8B, 0xE1, 0x85, 0xA1, 0x29, 0x48, 0x28, 0xE1, + 0x84, 0x8C, 0xE1, 0x85, 0xA1, 0x29, 0x48, 0x28, + 0xE1, 0x84, 0x8C, 0xE1, 0x85, 0xAE, 0x29, 0x48, + 0x28, 0xE1, 0x84, 0x8E, 0xE1, 0x85, 0xA1, 0x29, // Bytes 28c0 - 28ff - 0xE3, 0x82, 0xAB, 0xE3, 0x82, 0xA4, 0xE3, 0x83, - 0xAA, 0x49, 0xE3, 0x82, 0xB1, 0xE3, 0x83, 0xBC, - 0xE3, 0x82, 0xB9, 0x49, 0xE3, 0x82, 0xB3, 0xE3, - 0x83, 0xAB, 0xE3, 0x83, 0x8A, 0x49, 0xE3, 0x82, - 0xBB, 0xE3, 0x83, 0xB3, 0xE3, 0x83, 0x81, 0x49, - 0xE3, 0x82, 0xBB, 0xE3, 0x83, 0xB3, 0xE3, 0x83, - 0x88, 0x49, 0xE3, 0x83, 0x86, 0xE3, 0x82, 0x99, - 0xE3, 0x82, 0xB7, 0x49, 0xE3, 0x83, 0x88, 0xE3, + 0x48, 0x28, 0xE1, 0x84, 0x8F, 0xE1, 0x85, 0xA1, + 0x29, 0x48, 0x28, 0xE1, 0x84, 0x90, 0xE1, 0x85, + 0xA1, 0x29, 0x48, 0x28, 0xE1, 0x84, 0x91, 0xE1, + 0x85, 0xA1, 0x29, 0x48, 0x28, 0xE1, 0x84, 0x92, + 0xE1, 0x85, 0xA1, 0x29, 0x48, 0x72, 0x61, 0x64, + 0xE2, 0x88, 0x95, 0x73, 0x32, 0x48, 0xD8, 0xA7, + 0xD9, 0x83, 0xD8, 0xA8, 0xD8, 0xB1, 0x48, 0xD8, + 0xA7, 0xD9, 0x84, 0xD9, 0x84, 0xD9, 0x87, 0x48, // Bytes 2900 - 293f - 0x82, 0x99, 0xE3, 0x83, 0xAB, 0x49, 0xE3, 0x83, - 0x8E, 0xE3, 0x83, 0x83, 0xE3, 0x83, 0x88, 0x49, - 0xE3, 0x83, 0x8F, 0xE3, 0x82, 0xA4, 0xE3, 0x83, - 0x84, 0x49, 0xE3, 0x83, 0x92, 0xE3, 0x82, 0x99, - 0xE3, 0x83, 0xAB, 0x49, 0xE3, 0x83, 0x92, 0xE3, - 0x82, 0x9A, 0xE3, 0x82, 0xB3, 0x49, 0xE3, 0x83, - 0x95, 0xE3, 0x83, 0xA9, 0xE3, 0x83, 0xB3, 0x49, - 0xE3, 0x83, 0x98, 0xE3, 0x82, 0x9A, 0xE3, 0x82, + 0xD8, 0xB1, 0xD8, 0xB3, 0xD9, 0x88, 0xD9, 0x84, + 0x48, 0xD8, 0xB1, 0xDB, 0x8C, 0xD8, 0xA7, 0xD9, + 0x84, 0x48, 0xD8, 0xB5, 0xD9, 0x84, 0xD8, 0xB9, + 0xD9, 0x85, 0x48, 0xD8, 0xB9, 0xD9, 0x84, 0xD9, + 0x8A, 0xD9, 0x87, 0x48, 0xD9, 0x85, 0xD8, 0xAD, + 0xD9, 0x85, 0xD8, 0xAF, 0x48, 0xD9, 0x88, 0xD8, + 0xB3, 0xD9, 0x84, 0xD9, 0x85, 0x49, 0xE2, 0x80, + 0xB2, 0xE2, 0x80, 0xB2, 0xE2, 0x80, 0xB2, 0x49, // Bytes 2940 - 297f - 0xBD, 0x49, 0xE3, 0x83, 0x98, 0xE3, 0x83, 0xAB, - 0xE3, 0x83, 0x84, 0x49, 0xE3, 0x83, 0x9B, 0xE3, - 0x83, 0xBC, 0xE3, 0x83, 0xAB, 0x49, 0xE3, 0x83, - 0x9B, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0xB3, 0x49, - 0xE3, 0x83, 0x9E, 0xE3, 0x82, 0xA4, 0xE3, 0x83, - 0xAB, 0x49, 0xE3, 0x83, 0x9E, 0xE3, 0x83, 0x83, - 0xE3, 0x83, 0x8F, 0x49, 0xE3, 0x83, 0x9E, 0xE3, - 0x83, 0xAB, 0xE3, 0x82, 0xAF, 0x49, 0xE3, 0x83, + 0xE2, 0x80, 0xB5, 0xE2, 0x80, 0xB5, 0xE2, 0x80, + 0xB5, 0x49, 0xE2, 0x88, 0xAB, 0xE2, 0x88, 0xAB, + 0xE2, 0x88, 0xAB, 0x49, 0xE2, 0x88, 0xAE, 0xE2, + 0x88, 0xAE, 0xE2, 0x88, 0xAE, 0x49, 0xE3, 0x80, + 0x94, 0xE4, 0xB8, 0x89, 0xE3, 0x80, 0x95, 0x49, + 0xE3, 0x80, 0x94, 0xE4, 0xBA, 0x8C, 0xE3, 0x80, + 0x95, 0x49, 0xE3, 0x80, 0x94, 0xE5, 0x8B, 0x9D, + 0xE3, 0x80, 0x95, 0x49, 0xE3, 0x80, 0x94, 0xE5, // Bytes 2980 - 29bf - 0xA4, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0xAB, 0x49, - 0xE3, 0x83, 0xA6, 0xE3, 0x82, 0xA2, 0xE3, 0x83, - 0xB3, 0x49, 0xE3, 0x83, 0xAF, 0xE3, 0x83, 0x83, - 0xE3, 0x83, 0x88, 0x4C, 0xE2, 0x80, 0xB2, 0xE2, - 0x80, 0xB2, 0xE2, 0x80, 0xB2, 0xE2, 0x80, 0xB2, - 0x4C, 0xE2, 0x88, 0xAB, 0xE2, 0x88, 0xAB, 0xE2, - 0x88, 0xAB, 0xE2, 0x88, 0xAB, 0x4C, 0xE3, 0x82, - 0xA2, 0xE3, 0x83, 0xAB, 0xE3, 0x83, 0x95, 0xE3, + 0xAE, 0x89, 0xE3, 0x80, 0x95, 0x49, 0xE3, 0x80, + 0x94, 0xE6, 0x89, 0x93, 0xE3, 0x80, 0x95, 0x49, + 0xE3, 0x80, 0x94, 0xE6, 0x95, 0x97, 0xE3, 0x80, + 0x95, 0x49, 0xE3, 0x80, 0x94, 0xE6, 0x9C, 0xAC, + 0xE3, 0x80, 0x95, 0x49, 0xE3, 0x80, 0x94, 0xE7, + 0x82, 0xB9, 0xE3, 0x80, 0x95, 0x49, 0xE3, 0x80, + 0x94, 0xE7, 0x9B, 0x97, 0xE3, 0x80, 0x95, 0x49, + 0xE3, 0x82, 0xA2, 0xE3, 0x83, 0xBC, 0xE3, 0x83, // Bytes 29c0 - 29ff - 0x82, 0xA1, 0x4C, 0xE3, 0x82, 0xA8, 0xE3, 0x83, - 0xBC, 0xE3, 0x82, 0xAB, 0xE3, 0x83, 0xBC, 0x4C, - 0xE3, 0x82, 0xAB, 0xE3, 0x82, 0x99, 0xE3, 0x83, - 0xAD, 0xE3, 0x83, 0xB3, 0x4C, 0xE3, 0x82, 0xAB, - 0xE3, 0x82, 0x99, 0xE3, 0x83, 0xB3, 0xE3, 0x83, - 0x9E, 0x4C, 0xE3, 0x82, 0xAB, 0xE3, 0x83, 0xA9, - 0xE3, 0x83, 0x83, 0xE3, 0x83, 0x88, 0x4C, 0xE3, - 0x82, 0xAB, 0xE3, 0x83, 0xAD, 0xE3, 0x83, 0xAA, + 0xAB, 0x49, 0xE3, 0x82, 0xA4, 0xE3, 0x83, 0xB3, + 0xE3, 0x83, 0x81, 0x49, 0xE3, 0x82, 0xA6, 0xE3, + 0x82, 0xA9, 0xE3, 0x83, 0xB3, 0x49, 0xE3, 0x82, + 0xAA, 0xE3, 0x83, 0xB3, 0xE3, 0x82, 0xB9, 0x49, + 0xE3, 0x82, 0xAA, 0xE3, 0x83, 0xBC, 0xE3, 0x83, + 0xA0, 0x49, 0xE3, 0x82, 0xAB, 0xE3, 0x82, 0xA4, + 0xE3, 0x83, 0xAA, 0x49, 0xE3, 0x82, 0xB1, 0xE3, + 0x83, 0xBC, 0xE3, 0x82, 0xB9, 0x49, 0xE3, 0x82, // Bytes 2a00 - 2a3f - 0xE3, 0x83, 0xBC, 0x4C, 0xE3, 0x82, 0xAD, 0xE3, - 0x82, 0x99, 0xE3, 0x83, 0x8B, 0xE3, 0x83, 0xBC, - 0x4C, 0xE3, 0x82, 0xAD, 0xE3, 0x83, 0xA5, 0xE3, - 0x83, 0xAA, 0xE3, 0x83, 0xBC, 0x4C, 0xE3, 0x82, - 0xAF, 0xE3, 0x82, 0x99, 0xE3, 0x83, 0xA9, 0xE3, - 0x83, 0xA0, 0x4C, 0xE3, 0x82, 0xAF, 0xE3, 0x83, - 0xAD, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0x8D, 0x4C, - 0xE3, 0x82, 0xB5, 0xE3, 0x82, 0xA4, 0xE3, 0x82, + 0xB3, 0xE3, 0x83, 0xAB, 0xE3, 0x83, 0x8A, 0x49, + 0xE3, 0x82, 0xBB, 0xE3, 0x83, 0xB3, 0xE3, 0x83, + 0x81, 0x49, 0xE3, 0x82, 0xBB, 0xE3, 0x83, 0xB3, + 0xE3, 0x83, 0x88, 0x49, 0xE3, 0x83, 0x86, 0xE3, + 0x82, 0x99, 0xE3, 0x82, 0xB7, 0x49, 0xE3, 0x83, + 0x88, 0xE3, 0x82, 0x99, 0xE3, 0x83, 0xAB, 0x49, + 0xE3, 0x83, 0x8E, 0xE3, 0x83, 0x83, 0xE3, 0x83, + 0x88, 0x49, 0xE3, 0x83, 0x8F, 0xE3, 0x82, 0xA4, // Bytes 2a40 - 2a7f - 0xAF, 0xE3, 0x83, 0xAB, 0x4C, 0xE3, 0x82, 0xBF, - 0xE3, 0x82, 0x99, 0xE3, 0x83, 0xBC, 0xE3, 0x82, - 0xB9, 0x4C, 0xE3, 0x83, 0x8F, 0xE3, 0x82, 0x9A, - 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0x84, 0x4C, 0xE3, - 0x83, 0x92, 0xE3, 0x82, 0x9A, 0xE3, 0x82, 0xAF, - 0xE3, 0x83, 0xAB, 0x4C, 0xE3, 0x83, 0x95, 0xE3, - 0x82, 0xA3, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0x88, - 0x4C, 0xE3, 0x83, 0x98, 0xE3, 0x82, 0x99, 0xE3, + 0xE3, 0x83, 0x84, 0x49, 0xE3, 0x83, 0x92, 0xE3, + 0x82, 0x99, 0xE3, 0x83, 0xAB, 0x49, 0xE3, 0x83, + 0x92, 0xE3, 0x82, 0x9A, 0xE3, 0x82, 0xB3, 0x49, + 0xE3, 0x83, 0x95, 0xE3, 0x83, 0xA9, 0xE3, 0x83, + 0xB3, 0x49, 0xE3, 0x83, 0x98, 0xE3, 0x82, 0x9A, + 0xE3, 0x82, 0xBD, 0x49, 0xE3, 0x83, 0x98, 0xE3, + 0x83, 0xAB, 0xE3, 0x83, 0x84, 0x49, 0xE3, 0x83, + 0x9B, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0xAB, 0x49, // Bytes 2a80 - 2abf - 0x83, 0xBC, 0xE3, 0x82, 0xBF, 0x4C, 0xE3, 0x83, - 0x98, 0xE3, 0x82, 0x9A, 0xE3, 0x83, 0x8B, 0xE3, - 0x83, 0x92, 0x4C, 0xE3, 0x83, 0x98, 0xE3, 0x82, - 0x9A, 0xE3, 0x83, 0xB3, 0xE3, 0x82, 0xB9, 0x4C, - 0xE3, 0x83, 0x9B, 0xE3, 0x82, 0x99, 0xE3, 0x83, - 0xAB, 0xE3, 0x83, 0x88, 0x4C, 0xE3, 0x83, 0x9E, - 0xE3, 0x82, 0xA4, 0xE3, 0x82, 0xAF, 0xE3, 0x83, - 0xAD, 0x4C, 0xE3, 0x83, 0x9F, 0xE3, 0x82, 0xAF, + 0xE3, 0x83, 0x9B, 0xE3, 0x83, 0xBC, 0xE3, 0x83, + 0xB3, 0x49, 0xE3, 0x83, 0x9E, 0xE3, 0x82, 0xA4, + 0xE3, 0x83, 0xAB, 0x49, 0xE3, 0x83, 0x9E, 0xE3, + 0x83, 0x83, 0xE3, 0x83, 0x8F, 0x49, 0xE3, 0x83, + 0x9E, 0xE3, 0x83, 0xAB, 0xE3, 0x82, 0xAF, 0x49, + 0xE3, 0x83, 0xA4, 0xE3, 0x83, 0xBC, 0xE3, 0x83, + 0xAB, 0x49, 0xE3, 0x83, 0xA6, 0xE3, 0x82, 0xA2, + 0xE3, 0x83, 0xB3, 0x49, 0xE3, 0x83, 0xAF, 0xE3, // Bytes 2ac0 - 2aff - 0xE3, 0x83, 0xAD, 0xE3, 0x83, 0xB3, 0x4C, 0xE3, - 0x83, 0xA1, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0x88, - 0xE3, 0x83, 0xAB, 0x4C, 0xE3, 0x83, 0xAA, 0xE3, - 0x83, 0x83, 0xE3, 0x83, 0x88, 0xE3, 0x83, 0xAB, - 0x4C, 0xE3, 0x83, 0xAB, 0xE3, 0x83, 0x92, 0xE3, - 0x82, 0x9A, 0xE3, 0x83, 0xBC, 0x4C, 0xE6, 0xA0, - 0xAA, 0xE5, 0xBC, 0x8F, 0xE4, 0xBC, 0x9A, 0xE7, - 0xA4, 0xBE, 0x4E, 0x28, 0xE1, 0x84, 0x8B, 0xE1, + 0x83, 0x83, 0xE3, 0x83, 0x88, 0x4C, 0xE2, 0x80, + 0xB2, 0xE2, 0x80, 0xB2, 0xE2, 0x80, 0xB2, 0xE2, + 0x80, 0xB2, 0x4C, 0xE2, 0x88, 0xAB, 0xE2, 0x88, + 0xAB, 0xE2, 0x88, 0xAB, 0xE2, 0x88, 0xAB, 0x4C, + 0xE3, 0x82, 0xA2, 0xE3, 0x83, 0xAB, 0xE3, 0x83, + 0x95, 0xE3, 0x82, 0xA1, 0x4C, 0xE3, 0x82, 0xA8, + 0xE3, 0x83, 0xBC, 0xE3, 0x82, 0xAB, 0xE3, 0x83, + 0xBC, 0x4C, 0xE3, 0x82, 0xAB, 0xE3, 0x82, 0x99, // Bytes 2b00 - 2b3f - 0x85, 0xA9, 0xE1, 0x84, 0x92, 0xE1, 0x85, 0xAE, - 0x29, 0x4F, 0xD8, 0xAC, 0xD9, 0x84, 0x20, 0xD8, - 0xAC, 0xD9, 0x84, 0xD8, 0xA7, 0xD9, 0x84, 0xD9, - 0x87, 0x4F, 0xE3, 0x82, 0xA2, 0xE3, 0x83, 0x8F, - 0xE3, 0x82, 0x9A, 0xE3, 0x83, 0xBC, 0xE3, 0x83, - 0x88, 0x4F, 0xE3, 0x82, 0xA2, 0xE3, 0x83, 0xB3, - 0xE3, 0x83, 0x98, 0xE3, 0x82, 0x9A, 0xE3, 0x82, - 0xA2, 0x4F, 0xE3, 0x82, 0xAD, 0xE3, 0x83, 0xAD, + 0xE3, 0x83, 0xAD, 0xE3, 0x83, 0xB3, 0x4C, 0xE3, + 0x82, 0xAB, 0xE3, 0x82, 0x99, 0xE3, 0x83, 0xB3, + 0xE3, 0x83, 0x9E, 0x4C, 0xE3, 0x82, 0xAB, 0xE3, + 0x83, 0xA9, 0xE3, 0x83, 0x83, 0xE3, 0x83, 0x88, + 0x4C, 0xE3, 0x82, 0xAB, 0xE3, 0x83, 0xAD, 0xE3, + 0x83, 0xAA, 0xE3, 0x83, 0xBC, 0x4C, 0xE3, 0x82, + 0xAD, 0xE3, 0x82, 0x99, 0xE3, 0x83, 0x8B, 0xE3, + 0x83, 0xBC, 0x4C, 0xE3, 0x82, 0xAD, 0xE3, 0x83, // Bytes 2b40 - 2b7f - 0xE3, 0x83, 0xAF, 0xE3, 0x83, 0x83, 0xE3, 0x83, - 0x88, 0x4F, 0xE3, 0x82, 0xB5, 0xE3, 0x83, 0xB3, - 0xE3, 0x83, 0x81, 0xE3, 0x83, 0xBC, 0xE3, 0x83, - 0xA0, 0x4F, 0xE3, 0x83, 0x8F, 0xE3, 0x82, 0x99, - 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0xAC, 0xE3, 0x83, - 0xAB, 0x4F, 0xE3, 0x83, 0x98, 0xE3, 0x82, 0xAF, - 0xE3, 0x82, 0xBF, 0xE3, 0x83, 0xBC, 0xE3, 0x83, - 0xAB, 0x4F, 0xE3, 0x83, 0x9B, 0xE3, 0x82, 0x9A, + 0xA5, 0xE3, 0x83, 0xAA, 0xE3, 0x83, 0xBC, 0x4C, + 0xE3, 0x82, 0xAF, 0xE3, 0x82, 0x99, 0xE3, 0x83, + 0xA9, 0xE3, 0x83, 0xA0, 0x4C, 0xE3, 0x82, 0xAF, + 0xE3, 0x83, 0xAD, 0xE3, 0x83, 0xBC, 0xE3, 0x83, + 0x8D, 0x4C, 0xE3, 0x82, 0xB5, 0xE3, 0x82, 0xA4, + 0xE3, 0x82, 0xAF, 0xE3, 0x83, 0xAB, 0x4C, 0xE3, + 0x82, 0xBF, 0xE3, 0x82, 0x99, 0xE3, 0x83, 0xBC, + 0xE3, 0x82, 0xB9, 0x4C, 0xE3, 0x83, 0x8F, 0xE3, // Bytes 2b80 - 2bbf - 0xE3, 0x82, 0xA4, 0xE3, 0x83, 0xB3, 0xE3, 0x83, - 0x88, 0x4F, 0xE3, 0x83, 0x9E, 0xE3, 0x83, 0xB3, - 0xE3, 0x82, 0xB7, 0xE3, 0x83, 0xA7, 0xE3, 0x83, - 0xB3, 0x4F, 0xE3, 0x83, 0xA1, 0xE3, 0x82, 0xAB, - 0xE3, 0x82, 0x99, 0xE3, 0x83, 0x88, 0xE3, 0x83, - 0xB3, 0x4F, 0xE3, 0x83, 0xAB, 0xE3, 0x83, 0xBC, - 0xE3, 0x83, 0x95, 0xE3, 0x82, 0x99, 0xE3, 0x83, - 0xAB, 0x51, 0x28, 0xE1, 0x84, 0x8B, 0xE1, 0x85, + 0x82, 0x9A, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0x84, + 0x4C, 0xE3, 0x83, 0x92, 0xE3, 0x82, 0x9A, 0xE3, + 0x82, 0xAF, 0xE3, 0x83, 0xAB, 0x4C, 0xE3, 0x83, + 0x95, 0xE3, 0x82, 0xA3, 0xE3, 0x83, 0xBC, 0xE3, + 0x83, 0x88, 0x4C, 0xE3, 0x83, 0x98, 0xE3, 0x82, + 0x99, 0xE3, 0x83, 0xBC, 0xE3, 0x82, 0xBF, 0x4C, + 0xE3, 0x83, 0x98, 0xE3, 0x82, 0x9A, 0xE3, 0x83, + 0x8B, 0xE3, 0x83, 0x92, 0x4C, 0xE3, 0x83, 0x98, // Bytes 2bc0 - 2bff - 0xA9, 0xE1, 0x84, 0x8C, 0xE1, 0x85, 0xA5, 0xE1, - 0x86, 0xAB, 0x29, 0x52, 0xE3, 0x82, 0xAD, 0xE3, - 0x82, 0x99, 0xE3, 0x83, 0xAB, 0xE3, 0x82, 0xBF, - 0xE3, 0x82, 0x99, 0xE3, 0x83, 0xBC, 0x52, 0xE3, - 0x82, 0xAD, 0xE3, 0x83, 0xAD, 0xE3, 0x82, 0xAF, - 0xE3, 0x82, 0x99, 0xE3, 0x83, 0xA9, 0xE3, 0x83, - 0xA0, 0x52, 0xE3, 0x82, 0xAD, 0xE3, 0x83, 0xAD, - 0xE3, 0x83, 0xA1, 0xE3, 0x83, 0xBC, 0xE3, 0x83, + 0xE3, 0x82, 0x9A, 0xE3, 0x83, 0xB3, 0xE3, 0x82, + 0xB9, 0x4C, 0xE3, 0x83, 0x9B, 0xE3, 0x82, 0x99, + 0xE3, 0x83, 0xAB, 0xE3, 0x83, 0x88, 0x4C, 0xE3, + 0x83, 0x9E, 0xE3, 0x82, 0xA4, 0xE3, 0x82, 0xAF, + 0xE3, 0x83, 0xAD, 0x4C, 0xE3, 0x83, 0x9F, 0xE3, + 0x82, 0xAF, 0xE3, 0x83, 0xAD, 0xE3, 0x83, 0xB3, + 0x4C, 0xE3, 0x83, 0xA1, 0xE3, 0x83, 0xBC, 0xE3, + 0x83, 0x88, 0xE3, 0x83, 0xAB, 0x4C, 0xE3, 0x83, // Bytes 2c00 - 2c3f - 0x88, 0xE3, 0x83, 0xAB, 0x52, 0xE3, 0x82, 0xAF, - 0xE3, 0x82, 0x99, 0xE3, 0x83, 0xA9, 0xE3, 0x83, - 0xA0, 0xE3, 0x83, 0x88, 0xE3, 0x83, 0xB3, 0x52, - 0xE3, 0x82, 0xAF, 0xE3, 0x83, 0xAB, 0xE3, 0x82, - 0xBB, 0xE3, 0x82, 0x99, 0xE3, 0x82, 0xA4, 0xE3, - 0x83, 0xAD, 0x52, 0xE3, 0x83, 0x8F, 0xE3, 0x82, - 0x9A, 0xE3, 0x83, 0xBC, 0xE3, 0x82, 0xBB, 0xE3, - 0x83, 0xB3, 0xE3, 0x83, 0x88, 0x52, 0xE3, 0x83, + 0xAA, 0xE3, 0x83, 0x83, 0xE3, 0x83, 0x88, 0xE3, + 0x83, 0xAB, 0x4C, 0xE3, 0x83, 0xAB, 0xE3, 0x83, + 0x92, 0xE3, 0x82, 0x9A, 0xE3, 0x83, 0xBC, 0x4C, + 0xE6, 0xA0, 0xAA, 0xE5, 0xBC, 0x8F, 0xE4, 0xBC, + 0x9A, 0xE7, 0xA4, 0xBE, 0x4E, 0x28, 0xE1, 0x84, + 0x8B, 0xE1, 0x85, 0xA9, 0xE1, 0x84, 0x92, 0xE1, + 0x85, 0xAE, 0x29, 0x4F, 0xD8, 0xAC, 0xD9, 0x84, + 0x20, 0xD8, 0xAC, 0xD9, 0x84, 0xD8, 0xA7, 0xD9, // Bytes 2c40 - 2c7f - 0x92, 0xE3, 0x82, 0x9A, 0xE3, 0x82, 0xA2, 0xE3, - 0x82, 0xB9, 0xE3, 0x83, 0x88, 0xE3, 0x83, 0xAB, - 0x52, 0xE3, 0x83, 0x95, 0xE3, 0x82, 0x99, 0xE3, - 0x83, 0x83, 0xE3, 0x82, 0xB7, 0xE3, 0x82, 0xA7, - 0xE3, 0x83, 0xAB, 0x52, 0xE3, 0x83, 0x9F, 0xE3, - 0x83, 0xAA, 0xE3, 0x83, 0x8F, 0xE3, 0x82, 0x99, - 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0xAB, 0x52, 0xE3, - 0x83, 0xAC, 0xE3, 0x83, 0xB3, 0xE3, 0x83, 0x88, + 0x84, 0xD9, 0x87, 0x4F, 0xE3, 0x82, 0xA2, 0xE3, + 0x83, 0x8F, 0xE3, 0x82, 0x9A, 0xE3, 0x83, 0xBC, + 0xE3, 0x83, 0x88, 0x4F, 0xE3, 0x82, 0xA2, 0xE3, + 0x83, 0xB3, 0xE3, 0x83, 0x98, 0xE3, 0x82, 0x9A, + 0xE3, 0x82, 0xA2, 0x4F, 0xE3, 0x82, 0xAD, 0xE3, + 0x83, 0xAD, 0xE3, 0x83, 0xAF, 0xE3, 0x83, 0x83, + 0xE3, 0x83, 0x88, 0x4F, 0xE3, 0x82, 0xB5, 0xE3, + 0x83, 0xB3, 0xE3, 0x83, 0x81, 0xE3, 0x83, 0xBC, // Bytes 2c80 - 2cbf - 0xE3, 0x82, 0xB1, 0xE3, 0x82, 0x99, 0xE3, 0x83, - 0xB3, 0x61, 0xD8, 0xB5, 0xD9, 0x84, 0xD9, 0x89, - 0x20, 0xD8, 0xA7, 0xD9, 0x84, 0xD9, 0x84, 0xD9, - 0x87, 0x20, 0xD8, 0xB9, 0xD9, 0x84, 0xD9, 0x8A, - 0xD9, 0x87, 0x20, 0xD9, 0x88, 0xD8, 0xB3, 0xD9, - 0x84, 0xD9, 0x85, 0x06, 0xE0, 0xA7, 0x87, 0xE0, - 0xA6, 0xBE, 0x01, 0x06, 0xE0, 0xA7, 0x87, 0xE0, - 0xA7, 0x97, 0x01, 0x06, 0xE0, 0xAD, 0x87, 0xE0, + 0xE3, 0x83, 0xA0, 0x4F, 0xE3, 0x83, 0x8F, 0xE3, + 0x82, 0x99, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0xAC, + 0xE3, 0x83, 0xAB, 0x4F, 0xE3, 0x83, 0x98, 0xE3, + 0x82, 0xAF, 0xE3, 0x82, 0xBF, 0xE3, 0x83, 0xBC, + 0xE3, 0x83, 0xAB, 0x4F, 0xE3, 0x83, 0x9B, 0xE3, + 0x82, 0x9A, 0xE3, 0x82, 0xA4, 0xE3, 0x83, 0xB3, + 0xE3, 0x83, 0x88, 0x4F, 0xE3, 0x83, 0x9E, 0xE3, + 0x83, 0xB3, 0xE3, 0x82, 0xB7, 0xE3, 0x83, 0xA7, // Bytes 2cc0 - 2cff - 0xAC, 0xBE, 0x01, 0x06, 0xE0, 0xAD, 0x87, 0xE0, - 0xAD, 0x96, 0x01, 0x06, 0xE0, 0xAD, 0x87, 0xE0, - 0xAD, 0x97, 0x01, 0x06, 0xE0, 0xAE, 0x92, 0xE0, - 0xAF, 0x97, 0x01, 0x06, 0xE0, 0xAF, 0x86, 0xE0, - 0xAE, 0xBE, 0x01, 0x06, 0xE0, 0xAF, 0x86, 0xE0, - 0xAF, 0x97, 0x01, 0x06, 0xE0, 0xAF, 0x87, 0xE0, - 0xAE, 0xBE, 0x01, 0x06, 0xE0, 0xB2, 0xBF, 0xE0, - 0xB3, 0x95, 0x01, 0x06, 0xE0, 0xB3, 0x86, 0xE0, + 0xE3, 0x83, 0xB3, 0x4F, 0xE3, 0x83, 0xA1, 0xE3, + 0x82, 0xAB, 0xE3, 0x82, 0x99, 0xE3, 0x83, 0x88, + 0xE3, 0x83, 0xB3, 0x4F, 0xE3, 0x83, 0xAB, 0xE3, + 0x83, 0xBC, 0xE3, 0x83, 0x95, 0xE3, 0x82, 0x99, + 0xE3, 0x83, 0xAB, 0x51, 0x28, 0xE1, 0x84, 0x8B, + 0xE1, 0x85, 0xA9, 0xE1, 0x84, 0x8C, 0xE1, 0x85, + 0xA5, 0xE1, 0x86, 0xAB, 0x29, 0x52, 0xE3, 0x82, + 0xAD, 0xE3, 0x82, 0x99, 0xE3, 0x83, 0xAB, 0xE3, // Bytes 2d00 - 2d3f - 0xB3, 0x95, 0x01, 0x06, 0xE0, 0xB3, 0x86, 0xE0, - 0xB3, 0x96, 0x01, 0x06, 0xE0, 0xB5, 0x86, 0xE0, - 0xB4, 0xBE, 0x01, 0x06, 0xE0, 0xB5, 0x86, 0xE0, - 0xB5, 0x97, 0x01, 0x06, 0xE0, 0xB5, 0x87, 0xE0, - 0xB4, 0xBE, 0x01, 0x06, 0xE0, 0xB7, 0x99, 0xE0, - 0xB7, 0x9F, 0x01, 0x06, 0xE1, 0x80, 0xA5, 0xE1, - 0x80, 0xAE, 0x01, 0x06, 0xE1, 0xAC, 0x85, 0xE1, - 0xAC, 0xB5, 0x01, 0x06, 0xE1, 0xAC, 0x87, 0xE1, + 0x82, 0xBF, 0xE3, 0x82, 0x99, 0xE3, 0x83, 0xBC, + 0x52, 0xE3, 0x82, 0xAD, 0xE3, 0x83, 0xAD, 0xE3, + 0x82, 0xAF, 0xE3, 0x82, 0x99, 0xE3, 0x83, 0xA9, + 0xE3, 0x83, 0xA0, 0x52, 0xE3, 0x82, 0xAD, 0xE3, + 0x83, 0xAD, 0xE3, 0x83, 0xA1, 0xE3, 0x83, 0xBC, + 0xE3, 0x83, 0x88, 0xE3, 0x83, 0xAB, 0x52, 0xE3, + 0x82, 0xAF, 0xE3, 0x82, 0x99, 0xE3, 0x83, 0xA9, + 0xE3, 0x83, 0xA0, 0xE3, 0x83, 0x88, 0xE3, 0x83, // Bytes 2d40 - 2d7f - 0xAC, 0xB5, 0x01, 0x06, 0xE1, 0xAC, 0x89, 0xE1, - 0xAC, 0xB5, 0x01, 0x06, 0xE1, 0xAC, 0x8B, 0xE1, - 0xAC, 0xB5, 0x01, 0x06, 0xE1, 0xAC, 0x8D, 0xE1, - 0xAC, 0xB5, 0x01, 0x06, 0xE1, 0xAC, 0x91, 0xE1, - 0xAC, 0xB5, 0x01, 0x06, 0xE1, 0xAC, 0xBA, 0xE1, - 0xAC, 0xB5, 0x01, 0x06, 0xE1, 0xAC, 0xBC, 0xE1, - 0xAC, 0xB5, 0x01, 0x06, 0xE1, 0xAC, 0xBE, 0xE1, - 0xAC, 0xB5, 0x01, 0x06, 0xE1, 0xAC, 0xBF, 0xE1, + 0xB3, 0x52, 0xE3, 0x82, 0xAF, 0xE3, 0x83, 0xAB, + 0xE3, 0x82, 0xBB, 0xE3, 0x82, 0x99, 0xE3, 0x82, + 0xA4, 0xE3, 0x83, 0xAD, 0x52, 0xE3, 0x83, 0x8F, + 0xE3, 0x82, 0x9A, 0xE3, 0x83, 0xBC, 0xE3, 0x82, + 0xBB, 0xE3, 0x83, 0xB3, 0xE3, 0x83, 0x88, 0x52, + 0xE3, 0x83, 0x92, 0xE3, 0x82, 0x9A, 0xE3, 0x82, + 0xA2, 0xE3, 0x82, 0xB9, 0xE3, 0x83, 0x88, 0xE3, + 0x83, 0xAB, 0x52, 0xE3, 0x83, 0x95, 0xE3, 0x82, // Bytes 2d80 - 2dbf - 0xAC, 0xB5, 0x01, 0x06, 0xE1, 0xAD, 0x82, 0xE1, - 0xAC, 0xB5, 0x01, 0x08, 0xF0, 0x91, 0x84, 0xB1, - 0xF0, 0x91, 0x84, 0xA7, 0x01, 0x08, 0xF0, 0x91, - 0x84, 0xB2, 0xF0, 0x91, 0x84, 0xA7, 0x01, 0x08, - 0xF0, 0x91, 0x8D, 0x87, 0xF0, 0x91, 0x8C, 0xBE, - 0x01, 0x08, 0xF0, 0x91, 0x8D, 0x87, 0xF0, 0x91, - 0x8D, 0x97, 0x01, 0x08, 0xF0, 0x91, 0x92, 0xB9, - 0xF0, 0x91, 0x92, 0xB0, 0x01, 0x08, 0xF0, 0x91, + 0x99, 0xE3, 0x83, 0x83, 0xE3, 0x82, 0xB7, 0xE3, + 0x82, 0xA7, 0xE3, 0x83, 0xAB, 0x52, 0xE3, 0x83, + 0x9F, 0xE3, 0x83, 0xAA, 0xE3, 0x83, 0x8F, 0xE3, + 0x82, 0x99, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0xAB, + 0x52, 0xE3, 0x83, 0xAC, 0xE3, 0x83, 0xB3, 0xE3, + 0x83, 0x88, 0xE3, 0x82, 0xB1, 0xE3, 0x82, 0x99, + 0xE3, 0x83, 0xB3, 0x5F, 0xD8, 0xB5, 0xD9, 0x84, + 0xD9, 0x89, 0x20, 0xD8, 0xA7, 0xD9, 0x84, 0xD9, // Bytes 2dc0 - 2dff - 0x92, 0xB9, 0xF0, 0x91, 0x92, 0xBA, 0x01, 0x08, - 0xF0, 0x91, 0x92, 0xB9, 0xF0, 0x91, 0x92, 0xBD, - 0x01, 0x08, 0xF0, 0x91, 0x96, 0xB8, 0xF0, 0x91, - 0x96, 0xAF, 0x01, 0x08, 0xF0, 0x91, 0x96, 0xB9, - 0xF0, 0x91, 0x96, 0xAF, 0x01, 0x08, 0xF0, 0x91, - 0xA4, 0xB5, 0xF0, 0x91, 0xA4, 0xB0, 0x01, 0x09, - 0xE0, 0xB3, 0x86, 0xE0, 0xB3, 0x82, 0xE0, 0xB3, - 0x95, 0x02, 0x09, 0xE0, 0xB7, 0x99, 0xE0, 0xB7, - // Bytes 2e00 - 2e3f - 0x8F, 0xE0, 0xB7, 0x8A, 0x16, 0x44, 0x44, 0x5A, + 0x84, 0xD9, 0x87, 0x20, 0xD8, 0xB9, 0xD9, 0x84, + 0xD9, 0x8A, 0xD9, 0x87, 0x20, 0xD9, 0x88, 0xD8, + 0xB3, 0xD9, 0x84, 0xD9, 0x85, 0x44, 0x44, 0x5A, 0xCC, 0x8C, 0xCD, 0x44, 0x44, 0x7A, 0xCC, 0x8C, 0xCD, 0x44, 0x64, 0x7A, 0xCC, 0x8C, 0xCD, 0x46, 0xD9, 0x84, 0xD8, 0xA7, 0xD9, 0x93, 0xCD, 0x46, 0xD9, 0x84, 0xD8, 0xA7, 0xD9, 0x94, 0xCD, 0x46, - 0xD9, 0x84, 0xD8, 0xA7, 0xD9, 0x95, 0xB9, 0x46, - 0xE1, 0x84, 0x80, 0xE1, 0x85, 0xA1, 0x01, 0x46, - 0xE1, 0x84, 0x82, 0xE1, 0x85, 0xA1, 0x01, 0x46, - // Bytes 2e40 - 2e7f - 0xE1, 0x84, 0x83, 0xE1, 0x85, 0xA1, 0x01, 0x46, - 0xE1, 0x84, 0x85, 0xE1, 0x85, 0xA1, 0x01, 0x46, - 0xE1, 0x84, 0x86, 0xE1, 0x85, 0xA1, 0x01, 0x46, - 0xE1, 0x84, 0x87, 0xE1, 0x85, 0xA1, 0x01, 0x46, - 0xE1, 0x84, 0x89, 0xE1, 0x85, 0xA1, 0x01, 0x46, - 0xE1, 0x84, 0x8B, 0xE1, 0x85, 0xA1, 0x01, 0x46, - 0xE1, 0x84, 0x8B, 0xE1, 0x85, 0xAE, 0x01, 0x46, - 0xE1, 0x84, 0x8C, 0xE1, 0x85, 0xA1, 0x01, 0x46, - // Bytes 2e80 - 2ebf - 0xE1, 0x84, 0x8E, 0xE1, 0x85, 0xA1, 0x01, 0x46, - 0xE1, 0x84, 0x8F, 0xE1, 0x85, 0xA1, 0x01, 0x46, - 0xE1, 0x84, 0x90, 0xE1, 0x85, 0xA1, 0x01, 0x46, - 0xE1, 0x84, 0x91, 0xE1, 0x85, 0xA1, 0x01, 0x46, - 0xE1, 0x84, 0x92, 0xE1, 0x85, 0xA1, 0x01, 0x49, + 0xD9, 0x84, 0xD8, 0xA7, 0xD9, 0x95, 0xB9, 0x49, + // Bytes 2e00 - 2e3f 0xE3, 0x83, 0xA1, 0xE3, 0x82, 0xAB, 0xE3, 0x82, 0x99, 0x11, 0x4C, 0xE1, 0x84, 0x8C, 0xE1, 0x85, 0xAE, 0xE1, 0x84, 0x8B, 0xE1, 0x85, 0xB4, 0x01, - // Bytes 2ec0 - 2eff 0x4C, 0xE3, 0x82, 0xAD, 0xE3, 0x82, 0x99, 0xE3, 0x82, 0xAB, 0xE3, 0x82, 0x99, 0x11, 0x4C, 0xE3, 0x82, 0xB3, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0x9B, 0xE3, 0x82, 0x9A, 0x11, 0x4C, 0xE3, 0x83, 0xA4, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0x88, 0xE3, 0x82, + // Bytes 2e40 - 2e7f 0x99, 0x11, 0x4F, 0xE1, 0x84, 0x8E, 0xE1, 0x85, 0xA1, 0xE1, 0x86, 0xB7, 0xE1, 0x84, 0x80, 0xE1, 0x85, 0xA9, 0x01, 0x4F, 0xE3, 0x82, 0xA4, 0xE3, - // Bytes 2f00 - 2f3f 0x83, 0x8B, 0xE3, 0x83, 0xB3, 0xE3, 0x82, 0xAF, 0xE3, 0x82, 0x99, 0x11, 0x4F, 0xE3, 0x82, 0xB7, 0xE3, 0x83, 0xAA, 0xE3, 0x83, 0xB3, 0xE3, 0x82, 0xAF, 0xE3, 0x82, 0x99, 0x11, 0x4F, 0xE3, 0x83, 0x98, 0xE3, 0x82, 0x9A, 0xE3, 0x83, 0xBC, 0xE3, + // Bytes 2e80 - 2ebf 0x82, 0xB7, 0xE3, 0x82, 0x99, 0x11, 0x4F, 0xE3, 0x83, 0x9B, 0xE3, 0x82, 0x9A, 0xE3, 0x83, 0xB3, 0xE3, 0x83, 0x88, 0xE3, 0x82, 0x99, 0x11, 0x52, - // Bytes 2f40 - 2f7f 0xE3, 0x82, 0xA8, 0xE3, 0x82, 0xB9, 0xE3, 0x82, 0xAF, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0x88, 0xE3, 0x82, 0x99, 0x11, 0x52, 0xE3, 0x83, 0x95, 0xE3, 0x82, 0xA1, 0xE3, 0x83, 0xA9, 0xE3, 0x83, 0x83, - 0xE3, 0x83, 0x88, 0xE3, 0x82, 0x99, 0x11, 0x86, - 0xE0, 0xB3, 0x86, 0xE0, 0xB3, 0x82, 0x01, 0x86, - 0xE0, 0xB7, 0x99, 0xE0, 0xB7, 0x8F, 0x01, 0x03, + 0xE3, 0x83, 0x88, 0xE3, 0x82, 0x99, 0x11, 0x03, + // Bytes 2ec0 - 2eff 0x3C, 0xCC, 0xB8, 0x05, 0x03, 0x3D, 0xCC, 0xB8, - // Bytes 2f80 - 2fbf 0x05, 0x03, 0x3E, 0xCC, 0xB8, 0x05, 0x03, 0x41, 0xCC, 0x80, 0xCD, 0x03, 0x41, 0xCC, 0x81, 0xCD, 0x03, 0x41, 0xCC, 0x83, 0xCD, 0x03, 0x41, 0xCC, @@ -1758,8 +1732,8 @@ var decomps = [...]byte{ 0x41, 0xCC, 0x8C, 0xCD, 0x03, 0x41, 0xCC, 0x8F, 0xCD, 0x03, 0x41, 0xCC, 0x91, 0xCD, 0x03, 0x41, 0xCC, 0xA5, 0xB9, 0x03, 0x41, 0xCC, 0xA8, 0xA9, + // Bytes 2f00 - 2f3f 0x03, 0x42, 0xCC, 0x87, 0xCD, 0x03, 0x42, 0xCC, - // Bytes 2fc0 - 2fff 0xA3, 0xB9, 0x03, 0x42, 0xCC, 0xB1, 0xB9, 0x03, 0x43, 0xCC, 0x81, 0xCD, 0x03, 0x43, 0xCC, 0x82, 0xCD, 0x03, 0x43, 0xCC, 0x87, 0xCD, 0x03, 0x43, @@ -1767,8 +1741,8 @@ var decomps = [...]byte{ 0x03, 0x44, 0xCC, 0x8C, 0xCD, 0x03, 0x44, 0xCC, 0xA3, 0xB9, 0x03, 0x44, 0xCC, 0xA7, 0xA9, 0x03, 0x44, 0xCC, 0xAD, 0xB9, 0x03, 0x44, 0xCC, 0xB1, + // Bytes 2f40 - 2f7f 0xB9, 0x03, 0x45, 0xCC, 0x80, 0xCD, 0x03, 0x45, - // Bytes 3000 - 303f 0xCC, 0x81, 0xCD, 0x03, 0x45, 0xCC, 0x83, 0xCD, 0x03, 0x45, 0xCC, 0x86, 0xCD, 0x03, 0x45, 0xCC, 0x87, 0xCD, 0x03, 0x45, 0xCC, 0x88, 0xCD, 0x03, @@ -1776,8 +1750,8 @@ var decomps = [...]byte{ 0xCD, 0x03, 0x45, 0xCC, 0x8F, 0xCD, 0x03, 0x45, 0xCC, 0x91, 0xCD, 0x03, 0x45, 0xCC, 0xA8, 0xA9, 0x03, 0x45, 0xCC, 0xAD, 0xB9, 0x03, 0x45, 0xCC, + // Bytes 2f80 - 2fbf 0xB0, 0xB9, 0x03, 0x46, 0xCC, 0x87, 0xCD, 0x03, - // Bytes 3040 - 307f 0x47, 0xCC, 0x81, 0xCD, 0x03, 0x47, 0xCC, 0x82, 0xCD, 0x03, 0x47, 0xCC, 0x84, 0xCD, 0x03, 0x47, 0xCC, 0x86, 0xCD, 0x03, 0x47, 0xCC, 0x87, 0xCD, @@ -1785,8 +1759,8 @@ var decomps = [...]byte{ 0xA7, 0xA9, 0x03, 0x48, 0xCC, 0x82, 0xCD, 0x03, 0x48, 0xCC, 0x87, 0xCD, 0x03, 0x48, 0xCC, 0x88, 0xCD, 0x03, 0x48, 0xCC, 0x8C, 0xCD, 0x03, 0x48, + // Bytes 2fc0 - 2fff 0xCC, 0xA3, 0xB9, 0x03, 0x48, 0xCC, 0xA7, 0xA9, - // Bytes 3080 - 30bf 0x03, 0x48, 0xCC, 0xAE, 0xB9, 0x03, 0x49, 0xCC, 0x80, 0xCD, 0x03, 0x49, 0xCC, 0x81, 0xCD, 0x03, 0x49, 0xCC, 0x82, 0xCD, 0x03, 0x49, 0xCC, 0x83, @@ -1794,8 +1768,8 @@ var decomps = [...]byte{ 0xCC, 0x86, 0xCD, 0x03, 0x49, 0xCC, 0x87, 0xCD, 0x03, 0x49, 0xCC, 0x89, 0xCD, 0x03, 0x49, 0xCC, 0x8C, 0xCD, 0x03, 0x49, 0xCC, 0x8F, 0xCD, 0x03, + // Bytes 3000 - 303f 0x49, 0xCC, 0x91, 0xCD, 0x03, 0x49, 0xCC, 0xA3, - // Bytes 30c0 - 30ff 0xB9, 0x03, 0x49, 0xCC, 0xA8, 0xA9, 0x03, 0x49, 0xCC, 0xB0, 0xB9, 0x03, 0x4A, 0xCC, 0x82, 0xCD, 0x03, 0x4B, 0xCC, 0x81, 0xCD, 0x03, 0x4B, 0xCC, @@ -1803,8 +1777,8 @@ var decomps = [...]byte{ 0x4B, 0xCC, 0xA7, 0xA9, 0x03, 0x4B, 0xCC, 0xB1, 0xB9, 0x03, 0x4C, 0xCC, 0x81, 0xCD, 0x03, 0x4C, 0xCC, 0x8C, 0xCD, 0x03, 0x4C, 0xCC, 0xA7, 0xA9, + // Bytes 3040 - 307f 0x03, 0x4C, 0xCC, 0xAD, 0xB9, 0x03, 0x4C, 0xCC, - // Bytes 3100 - 313f 0xB1, 0xB9, 0x03, 0x4D, 0xCC, 0x81, 0xCD, 0x03, 0x4D, 0xCC, 0x87, 0xCD, 0x03, 0x4D, 0xCC, 0xA3, 0xB9, 0x03, 0x4E, 0xCC, 0x80, 0xCD, 0x03, 0x4E, @@ -1812,8 +1786,8 @@ var decomps = [...]byte{ 0x03, 0x4E, 0xCC, 0x87, 0xCD, 0x03, 0x4E, 0xCC, 0x8C, 0xCD, 0x03, 0x4E, 0xCC, 0xA3, 0xB9, 0x03, 0x4E, 0xCC, 0xA7, 0xA9, 0x03, 0x4E, 0xCC, 0xAD, + // Bytes 3080 - 30bf 0xB9, 0x03, 0x4E, 0xCC, 0xB1, 0xB9, 0x03, 0x4F, - // Bytes 3140 - 317f 0xCC, 0x80, 0xCD, 0x03, 0x4F, 0xCC, 0x81, 0xCD, 0x03, 0x4F, 0xCC, 0x86, 0xCD, 0x03, 0x4F, 0xCC, 0x89, 0xCD, 0x03, 0x4F, 0xCC, 0x8B, 0xCD, 0x03, @@ -1821,8 +1795,8 @@ var decomps = [...]byte{ 0xCD, 0x03, 0x4F, 0xCC, 0x91, 0xCD, 0x03, 0x50, 0xCC, 0x81, 0xCD, 0x03, 0x50, 0xCC, 0x87, 0xCD, 0x03, 0x52, 0xCC, 0x81, 0xCD, 0x03, 0x52, 0xCC, + // Bytes 30c0 - 30ff 0x87, 0xCD, 0x03, 0x52, 0xCC, 0x8C, 0xCD, 0x03, - // Bytes 3180 - 31bf 0x52, 0xCC, 0x8F, 0xCD, 0x03, 0x52, 0xCC, 0x91, 0xCD, 0x03, 0x52, 0xCC, 0xA7, 0xA9, 0x03, 0x52, 0xCC, 0xB1, 0xB9, 0x03, 0x53, 0xCC, 0x82, 0xCD, @@ -1830,8 +1804,8 @@ var decomps = [...]byte{ 0xA6, 0xB9, 0x03, 0x53, 0xCC, 0xA7, 0xA9, 0x03, 0x54, 0xCC, 0x87, 0xCD, 0x03, 0x54, 0xCC, 0x8C, 0xCD, 0x03, 0x54, 0xCC, 0xA3, 0xB9, 0x03, 0x54, + // Bytes 3100 - 313f 0xCC, 0xA6, 0xB9, 0x03, 0x54, 0xCC, 0xA7, 0xA9, - // Bytes 31c0 - 31ff 0x03, 0x54, 0xCC, 0xAD, 0xB9, 0x03, 0x54, 0xCC, 0xB1, 0xB9, 0x03, 0x55, 0xCC, 0x80, 0xCD, 0x03, 0x55, 0xCC, 0x81, 0xCD, 0x03, 0x55, 0xCC, 0x82, @@ -1839,8 +1813,8 @@ var decomps = [...]byte{ 0xCC, 0x89, 0xCD, 0x03, 0x55, 0xCC, 0x8A, 0xCD, 0x03, 0x55, 0xCC, 0x8B, 0xCD, 0x03, 0x55, 0xCC, 0x8C, 0xCD, 0x03, 0x55, 0xCC, 0x8F, 0xCD, 0x03, + // Bytes 3140 - 317f 0x55, 0xCC, 0x91, 0xCD, 0x03, 0x55, 0xCC, 0xA3, - // Bytes 3200 - 323f 0xB9, 0x03, 0x55, 0xCC, 0xA4, 0xB9, 0x03, 0x55, 0xCC, 0xA8, 0xA9, 0x03, 0x55, 0xCC, 0xAD, 0xB9, 0x03, 0x55, 0xCC, 0xB0, 0xB9, 0x03, 0x56, 0xCC, @@ -1848,8 +1822,8 @@ var decomps = [...]byte{ 0x57, 0xCC, 0x80, 0xCD, 0x03, 0x57, 0xCC, 0x81, 0xCD, 0x03, 0x57, 0xCC, 0x82, 0xCD, 0x03, 0x57, 0xCC, 0x87, 0xCD, 0x03, 0x57, 0xCC, 0x88, 0xCD, + // Bytes 3180 - 31bf 0x03, 0x57, 0xCC, 0xA3, 0xB9, 0x03, 0x58, 0xCC, - // Bytes 3240 - 327f 0x87, 0xCD, 0x03, 0x58, 0xCC, 0x88, 0xCD, 0x03, 0x59, 0xCC, 0x80, 0xCD, 0x03, 0x59, 0xCC, 0x81, 0xCD, 0x03, 0x59, 0xCC, 0x82, 0xCD, 0x03, 0x59, @@ -1857,8 +1831,8 @@ var decomps = [...]byte{ 0x03, 0x59, 0xCC, 0x87, 0xCD, 0x03, 0x59, 0xCC, 0x88, 0xCD, 0x03, 0x59, 0xCC, 0x89, 0xCD, 0x03, 0x59, 0xCC, 0xA3, 0xB9, 0x03, 0x5A, 0xCC, 0x81, + // Bytes 31c0 - 31ff 0xCD, 0x03, 0x5A, 0xCC, 0x82, 0xCD, 0x03, 0x5A, - // Bytes 3280 - 32bf 0xCC, 0x87, 0xCD, 0x03, 0x5A, 0xCC, 0x8C, 0xCD, 0x03, 0x5A, 0xCC, 0xA3, 0xB9, 0x03, 0x5A, 0xCC, 0xB1, 0xB9, 0x03, 0x61, 0xCC, 0x80, 0xCD, 0x03, @@ -1866,8 +1840,8 @@ var decomps = [...]byte{ 0xCD, 0x03, 0x61, 0xCC, 0x84, 0xCD, 0x03, 0x61, 0xCC, 0x89, 0xCD, 0x03, 0x61, 0xCC, 0x8C, 0xCD, 0x03, 0x61, 0xCC, 0x8F, 0xCD, 0x03, 0x61, 0xCC, + // Bytes 3200 - 323f 0x91, 0xCD, 0x03, 0x61, 0xCC, 0xA5, 0xB9, 0x03, - // Bytes 32c0 - 32ff 0x61, 0xCC, 0xA8, 0xA9, 0x03, 0x62, 0xCC, 0x87, 0xCD, 0x03, 0x62, 0xCC, 0xA3, 0xB9, 0x03, 0x62, 0xCC, 0xB1, 0xB9, 0x03, 0x63, 0xCC, 0x81, 0xCD, @@ -1875,8 +1849,8 @@ var decomps = [...]byte{ 0x87, 0xCD, 0x03, 0x63, 0xCC, 0x8C, 0xCD, 0x03, 0x64, 0xCC, 0x87, 0xCD, 0x03, 0x64, 0xCC, 0x8C, 0xCD, 0x03, 0x64, 0xCC, 0xA3, 0xB9, 0x03, 0x64, + // Bytes 3240 - 327f 0xCC, 0xA7, 0xA9, 0x03, 0x64, 0xCC, 0xAD, 0xB9, - // Bytes 3300 - 333f 0x03, 0x64, 0xCC, 0xB1, 0xB9, 0x03, 0x65, 0xCC, 0x80, 0xCD, 0x03, 0x65, 0xCC, 0x81, 0xCD, 0x03, 0x65, 0xCC, 0x83, 0xCD, 0x03, 0x65, 0xCC, 0x86, @@ -1884,8 +1858,8 @@ var decomps = [...]byte{ 0xCC, 0x88, 0xCD, 0x03, 0x65, 0xCC, 0x89, 0xCD, 0x03, 0x65, 0xCC, 0x8C, 0xCD, 0x03, 0x65, 0xCC, 0x8F, 0xCD, 0x03, 0x65, 0xCC, 0x91, 0xCD, 0x03, + // Bytes 3280 - 32bf 0x65, 0xCC, 0xA8, 0xA9, 0x03, 0x65, 0xCC, 0xAD, - // Bytes 3340 - 337f 0xB9, 0x03, 0x65, 0xCC, 0xB0, 0xB9, 0x03, 0x66, 0xCC, 0x87, 0xCD, 0x03, 0x67, 0xCC, 0x81, 0xCD, 0x03, 0x67, 0xCC, 0x82, 0xCD, 0x03, 0x67, 0xCC, @@ -1893,8 +1867,8 @@ var decomps = [...]byte{ 0x67, 0xCC, 0x87, 0xCD, 0x03, 0x67, 0xCC, 0x8C, 0xCD, 0x03, 0x67, 0xCC, 0xA7, 0xA9, 0x03, 0x68, 0xCC, 0x82, 0xCD, 0x03, 0x68, 0xCC, 0x87, 0xCD, + // Bytes 32c0 - 32ff 0x03, 0x68, 0xCC, 0x88, 0xCD, 0x03, 0x68, 0xCC, - // Bytes 3380 - 33bf 0x8C, 0xCD, 0x03, 0x68, 0xCC, 0xA3, 0xB9, 0x03, 0x68, 0xCC, 0xA7, 0xA9, 0x03, 0x68, 0xCC, 0xAE, 0xB9, 0x03, 0x68, 0xCC, 0xB1, 0xB9, 0x03, 0x69, @@ -1902,8 +1876,8 @@ var decomps = [...]byte{ 0x03, 0x69, 0xCC, 0x82, 0xCD, 0x03, 0x69, 0xCC, 0x83, 0xCD, 0x03, 0x69, 0xCC, 0x84, 0xCD, 0x03, 0x69, 0xCC, 0x86, 0xCD, 0x03, 0x69, 0xCC, 0x89, + // Bytes 3300 - 333f 0xCD, 0x03, 0x69, 0xCC, 0x8C, 0xCD, 0x03, 0x69, - // Bytes 33c0 - 33ff 0xCC, 0x8F, 0xCD, 0x03, 0x69, 0xCC, 0x91, 0xCD, 0x03, 0x69, 0xCC, 0xA3, 0xB9, 0x03, 0x69, 0xCC, 0xA8, 0xA9, 0x03, 0x69, 0xCC, 0xB0, 0xB9, 0x03, @@ -1911,8 +1885,8 @@ var decomps = [...]byte{ 0xCD, 0x03, 0x6B, 0xCC, 0x81, 0xCD, 0x03, 0x6B, 0xCC, 0x8C, 0xCD, 0x03, 0x6B, 0xCC, 0xA3, 0xB9, 0x03, 0x6B, 0xCC, 0xA7, 0xA9, 0x03, 0x6B, 0xCC, + // Bytes 3340 - 337f 0xB1, 0xB9, 0x03, 0x6C, 0xCC, 0x81, 0xCD, 0x03, - // Bytes 3400 - 343f 0x6C, 0xCC, 0x8C, 0xCD, 0x03, 0x6C, 0xCC, 0xA7, 0xA9, 0x03, 0x6C, 0xCC, 0xAD, 0xB9, 0x03, 0x6C, 0xCC, 0xB1, 0xB9, 0x03, 0x6D, 0xCC, 0x81, 0xCD, @@ -1920,8 +1894,8 @@ var decomps = [...]byte{ 0xA3, 0xB9, 0x03, 0x6E, 0xCC, 0x80, 0xCD, 0x03, 0x6E, 0xCC, 0x81, 0xCD, 0x03, 0x6E, 0xCC, 0x83, 0xCD, 0x03, 0x6E, 0xCC, 0x87, 0xCD, 0x03, 0x6E, + // Bytes 3380 - 33bf 0xCC, 0x8C, 0xCD, 0x03, 0x6E, 0xCC, 0xA3, 0xB9, - // Bytes 3440 - 347f 0x03, 0x6E, 0xCC, 0xA7, 0xA9, 0x03, 0x6E, 0xCC, 0xAD, 0xB9, 0x03, 0x6E, 0xCC, 0xB1, 0xB9, 0x03, 0x6F, 0xCC, 0x80, 0xCD, 0x03, 0x6F, 0xCC, 0x81, @@ -1929,8 +1903,8 @@ var decomps = [...]byte{ 0xCC, 0x89, 0xCD, 0x03, 0x6F, 0xCC, 0x8B, 0xCD, 0x03, 0x6F, 0xCC, 0x8C, 0xCD, 0x03, 0x6F, 0xCC, 0x8F, 0xCD, 0x03, 0x6F, 0xCC, 0x91, 0xCD, 0x03, + // Bytes 33c0 - 33ff 0x70, 0xCC, 0x81, 0xCD, 0x03, 0x70, 0xCC, 0x87, - // Bytes 3480 - 34bf 0xCD, 0x03, 0x72, 0xCC, 0x81, 0xCD, 0x03, 0x72, 0xCC, 0x87, 0xCD, 0x03, 0x72, 0xCC, 0x8C, 0xCD, 0x03, 0x72, 0xCC, 0x8F, 0xCD, 0x03, 0x72, 0xCC, @@ -1938,8 +1912,8 @@ var decomps = [...]byte{ 0x72, 0xCC, 0xB1, 0xB9, 0x03, 0x73, 0xCC, 0x82, 0xCD, 0x03, 0x73, 0xCC, 0x87, 0xCD, 0x03, 0x73, 0xCC, 0xA6, 0xB9, 0x03, 0x73, 0xCC, 0xA7, 0xA9, + // Bytes 3400 - 343f 0x03, 0x74, 0xCC, 0x87, 0xCD, 0x03, 0x74, 0xCC, - // Bytes 34c0 - 34ff 0x88, 0xCD, 0x03, 0x74, 0xCC, 0x8C, 0xCD, 0x03, 0x74, 0xCC, 0xA3, 0xB9, 0x03, 0x74, 0xCC, 0xA6, 0xB9, 0x03, 0x74, 0xCC, 0xA7, 0xA9, 0x03, 0x74, @@ -1947,8 +1921,8 @@ var decomps = [...]byte{ 0x03, 0x75, 0xCC, 0x80, 0xCD, 0x03, 0x75, 0xCC, 0x81, 0xCD, 0x03, 0x75, 0xCC, 0x82, 0xCD, 0x03, 0x75, 0xCC, 0x86, 0xCD, 0x03, 0x75, 0xCC, 0x89, + // Bytes 3440 - 347f 0xCD, 0x03, 0x75, 0xCC, 0x8A, 0xCD, 0x03, 0x75, - // Bytes 3500 - 353f 0xCC, 0x8B, 0xCD, 0x03, 0x75, 0xCC, 0x8C, 0xCD, 0x03, 0x75, 0xCC, 0x8F, 0xCD, 0x03, 0x75, 0xCC, 0x91, 0xCD, 0x03, 0x75, 0xCC, 0xA3, 0xB9, 0x03, @@ -1956,8 +1930,8 @@ var decomps = [...]byte{ 0xA9, 0x03, 0x75, 0xCC, 0xAD, 0xB9, 0x03, 0x75, 0xCC, 0xB0, 0xB9, 0x03, 0x76, 0xCC, 0x83, 0xCD, 0x03, 0x76, 0xCC, 0xA3, 0xB9, 0x03, 0x77, 0xCC, + // Bytes 3480 - 34bf 0x80, 0xCD, 0x03, 0x77, 0xCC, 0x81, 0xCD, 0x03, - // Bytes 3540 - 357f 0x77, 0xCC, 0x82, 0xCD, 0x03, 0x77, 0xCC, 0x87, 0xCD, 0x03, 0x77, 0xCC, 0x88, 0xCD, 0x03, 0x77, 0xCC, 0x8A, 0xCD, 0x03, 0x77, 0xCC, 0xA3, 0xB9, @@ -1965,8 +1939,8 @@ var decomps = [...]byte{ 0x88, 0xCD, 0x03, 0x79, 0xCC, 0x80, 0xCD, 0x03, 0x79, 0xCC, 0x81, 0xCD, 0x03, 0x79, 0xCC, 0x82, 0xCD, 0x03, 0x79, 0xCC, 0x83, 0xCD, 0x03, 0x79, + // Bytes 34c0 - 34ff 0xCC, 0x84, 0xCD, 0x03, 0x79, 0xCC, 0x87, 0xCD, - // Bytes 3580 - 35bf 0x03, 0x79, 0xCC, 0x88, 0xCD, 0x03, 0x79, 0xCC, 0x89, 0xCD, 0x03, 0x79, 0xCC, 0x8A, 0xCD, 0x03, 0x79, 0xCC, 0xA3, 0xB9, 0x03, 0x7A, 0xCC, 0x81, @@ -1974,8 +1948,8 @@ var decomps = [...]byte{ 0xCC, 0x87, 0xCD, 0x03, 0x7A, 0xCC, 0x8C, 0xCD, 0x03, 0x7A, 0xCC, 0xA3, 0xB9, 0x03, 0x7A, 0xCC, 0xB1, 0xB9, 0x04, 0xC2, 0xA8, 0xCC, 0x80, 0xCE, + // Bytes 3500 - 353f 0x04, 0xC2, 0xA8, 0xCC, 0x81, 0xCE, 0x04, 0xC2, - // Bytes 35c0 - 35ff 0xA8, 0xCD, 0x82, 0xCE, 0x04, 0xC3, 0x86, 0xCC, 0x81, 0xCD, 0x04, 0xC3, 0x86, 0xCC, 0x84, 0xCD, 0x04, 0xC3, 0x98, 0xCC, 0x81, 0xCD, 0x04, 0xC3, @@ -1983,8 +1957,8 @@ var decomps = [...]byte{ 0x84, 0xCD, 0x04, 0xC3, 0xB8, 0xCC, 0x81, 0xCD, 0x04, 0xC5, 0xBF, 0xCC, 0x87, 0xCD, 0x04, 0xC6, 0xB7, 0xCC, 0x8C, 0xCD, 0x04, 0xCA, 0x92, 0xCC, + // Bytes 3540 - 357f 0x8C, 0xCD, 0x04, 0xCE, 0x91, 0xCC, 0x80, 0xCD, - // Bytes 3600 - 363f 0x04, 0xCE, 0x91, 0xCC, 0x81, 0xCD, 0x04, 0xCE, 0x91, 0xCC, 0x84, 0xCD, 0x04, 0xCE, 0x91, 0xCC, 0x86, 0xCD, 0x04, 0xCE, 0x91, 0xCD, 0x85, 0xDD, @@ -1992,8 +1966,8 @@ var decomps = [...]byte{ 0x95, 0xCC, 0x81, 0xCD, 0x04, 0xCE, 0x97, 0xCC, 0x80, 0xCD, 0x04, 0xCE, 0x97, 0xCC, 0x81, 0xCD, 0x04, 0xCE, 0x97, 0xCD, 0x85, 0xDD, 0x04, 0xCE, + // Bytes 3580 - 35bf 0x99, 0xCC, 0x80, 0xCD, 0x04, 0xCE, 0x99, 0xCC, - // Bytes 3640 - 367f 0x81, 0xCD, 0x04, 0xCE, 0x99, 0xCC, 0x84, 0xCD, 0x04, 0xCE, 0x99, 0xCC, 0x86, 0xCD, 0x04, 0xCE, 0x99, 0xCC, 0x88, 0xCD, 0x04, 0xCE, 0x9F, 0xCC, @@ -2001,8 +1975,8 @@ var decomps = [...]byte{ 0x04, 0xCE, 0xA1, 0xCC, 0x94, 0xCD, 0x04, 0xCE, 0xA5, 0xCC, 0x80, 0xCD, 0x04, 0xCE, 0xA5, 0xCC, 0x81, 0xCD, 0x04, 0xCE, 0xA5, 0xCC, 0x84, 0xCD, + // Bytes 35c0 - 35ff 0x04, 0xCE, 0xA5, 0xCC, 0x86, 0xCD, 0x04, 0xCE, - // Bytes 3680 - 36bf 0xA5, 0xCC, 0x88, 0xCD, 0x04, 0xCE, 0xA9, 0xCC, 0x80, 0xCD, 0x04, 0xCE, 0xA9, 0xCC, 0x81, 0xCD, 0x04, 0xCE, 0xA9, 0xCD, 0x85, 0xDD, 0x04, 0xCE, @@ -2010,8 +1984,8 @@ var decomps = [...]byte{ 0x86, 0xCD, 0x04, 0xCE, 0xB1, 0xCD, 0x85, 0xDD, 0x04, 0xCE, 0xB5, 0xCC, 0x80, 0xCD, 0x04, 0xCE, 0xB5, 0xCC, 0x81, 0xCD, 0x04, 0xCE, 0xB7, 0xCD, + // Bytes 3600 - 363f 0x85, 0xDD, 0x04, 0xCE, 0xB9, 0xCC, 0x80, 0xCD, - // Bytes 36c0 - 36ff 0x04, 0xCE, 0xB9, 0xCC, 0x81, 0xCD, 0x04, 0xCE, 0xB9, 0xCC, 0x84, 0xCD, 0x04, 0xCE, 0xB9, 0xCC, 0x86, 0xCD, 0x04, 0xCE, 0xB9, 0xCD, 0x82, 0xCD, @@ -2019,8 +1993,8 @@ var decomps = [...]byte{ 0xBF, 0xCC, 0x81, 0xCD, 0x04, 0xCF, 0x81, 0xCC, 0x93, 0xCD, 0x04, 0xCF, 0x81, 0xCC, 0x94, 0xCD, 0x04, 0xCF, 0x85, 0xCC, 0x80, 0xCD, 0x04, 0xCF, + // Bytes 3640 - 367f 0x85, 0xCC, 0x81, 0xCD, 0x04, 0xCF, 0x85, 0xCC, - // Bytes 3700 - 373f 0x84, 0xCD, 0x04, 0xCF, 0x85, 0xCC, 0x86, 0xCD, 0x04, 0xCF, 0x85, 0xCD, 0x82, 0xCD, 0x04, 0xCF, 0x89, 0xCD, 0x85, 0xDD, 0x04, 0xCF, 0x92, 0xCC, @@ -2028,8 +2002,8 @@ var decomps = [...]byte{ 0x04, 0xD0, 0x86, 0xCC, 0x88, 0xCD, 0x04, 0xD0, 0x90, 0xCC, 0x86, 0xCD, 0x04, 0xD0, 0x90, 0xCC, 0x88, 0xCD, 0x04, 0xD0, 0x93, 0xCC, 0x81, 0xCD, + // Bytes 3680 - 36bf 0x04, 0xD0, 0x95, 0xCC, 0x80, 0xCD, 0x04, 0xD0, - // Bytes 3740 - 377f 0x95, 0xCC, 0x86, 0xCD, 0x04, 0xD0, 0x95, 0xCC, 0x88, 0xCD, 0x04, 0xD0, 0x96, 0xCC, 0x86, 0xCD, 0x04, 0xD0, 0x96, 0xCC, 0x88, 0xCD, 0x04, 0xD0, @@ -2037,8 +2011,8 @@ var decomps = [...]byte{ 0x80, 0xCD, 0x04, 0xD0, 0x98, 0xCC, 0x84, 0xCD, 0x04, 0xD0, 0x98, 0xCC, 0x86, 0xCD, 0x04, 0xD0, 0x98, 0xCC, 0x88, 0xCD, 0x04, 0xD0, 0x9A, 0xCC, + // Bytes 36c0 - 36ff 0x81, 0xCD, 0x04, 0xD0, 0x9E, 0xCC, 0x88, 0xCD, - // Bytes 3780 - 37bf 0x04, 0xD0, 0xA3, 0xCC, 0x84, 0xCD, 0x04, 0xD0, 0xA3, 0xCC, 0x86, 0xCD, 0x04, 0xD0, 0xA3, 0xCC, 0x88, 0xCD, 0x04, 0xD0, 0xA3, 0xCC, 0x8B, 0xCD, @@ -2046,8 +2020,8 @@ var decomps = [...]byte{ 0xAB, 0xCC, 0x88, 0xCD, 0x04, 0xD0, 0xAD, 0xCC, 0x88, 0xCD, 0x04, 0xD0, 0xB0, 0xCC, 0x86, 0xCD, 0x04, 0xD0, 0xB0, 0xCC, 0x88, 0xCD, 0x04, 0xD0, + // Bytes 3700 - 373f 0xB3, 0xCC, 0x81, 0xCD, 0x04, 0xD0, 0xB5, 0xCC, - // Bytes 37c0 - 37ff 0x80, 0xCD, 0x04, 0xD0, 0xB5, 0xCC, 0x86, 0xCD, 0x04, 0xD0, 0xB5, 0xCC, 0x88, 0xCD, 0x04, 0xD0, 0xB6, 0xCC, 0x86, 0xCD, 0x04, 0xD0, 0xB6, 0xCC, @@ -2055,8 +2029,8 @@ var decomps = [...]byte{ 0x04, 0xD0, 0xB8, 0xCC, 0x80, 0xCD, 0x04, 0xD0, 0xB8, 0xCC, 0x84, 0xCD, 0x04, 0xD0, 0xB8, 0xCC, 0x86, 0xCD, 0x04, 0xD0, 0xB8, 0xCC, 0x88, 0xCD, + // Bytes 3740 - 377f 0x04, 0xD0, 0xBA, 0xCC, 0x81, 0xCD, 0x04, 0xD0, - // Bytes 3800 - 383f 0xBE, 0xCC, 0x88, 0xCD, 0x04, 0xD1, 0x83, 0xCC, 0x84, 0xCD, 0x04, 0xD1, 0x83, 0xCC, 0x86, 0xCD, 0x04, 0xD1, 0x83, 0xCC, 0x88, 0xCD, 0x04, 0xD1, @@ -2064,8 +2038,8 @@ var decomps = [...]byte{ 0x88, 0xCD, 0x04, 0xD1, 0x8B, 0xCC, 0x88, 0xCD, 0x04, 0xD1, 0x8D, 0xCC, 0x88, 0xCD, 0x04, 0xD1, 0x96, 0xCC, 0x88, 0xCD, 0x04, 0xD1, 0xB4, 0xCC, + // Bytes 3780 - 37bf 0x8F, 0xCD, 0x04, 0xD1, 0xB5, 0xCC, 0x8F, 0xCD, - // Bytes 3840 - 387f 0x04, 0xD3, 0x98, 0xCC, 0x88, 0xCD, 0x04, 0xD3, 0x99, 0xCC, 0x88, 0xCD, 0x04, 0xD3, 0xA8, 0xCC, 0x88, 0xCD, 0x04, 0xD3, 0xA9, 0xCC, 0x88, 0xCD, @@ -2073,8 +2047,8 @@ var decomps = [...]byte{ 0xA7, 0xD9, 0x94, 0xCD, 0x04, 0xD8, 0xA7, 0xD9, 0x95, 0xB9, 0x04, 0xD9, 0x88, 0xD9, 0x94, 0xCD, 0x04, 0xD9, 0x8A, 0xD9, 0x94, 0xCD, 0x04, 0xDB, + // Bytes 37c0 - 37ff 0x81, 0xD9, 0x94, 0xCD, 0x04, 0xDB, 0x92, 0xD9, - // Bytes 3880 - 38bf 0x94, 0xCD, 0x04, 0xDB, 0x95, 0xD9, 0x94, 0xCD, 0x05, 0x41, 0xCC, 0x82, 0xCC, 0x80, 0xCE, 0x05, 0x41, 0xCC, 0x82, 0xCC, 0x81, 0xCE, 0x05, 0x41, @@ -2082,8 +2056,8 @@ var decomps = [...]byte{ 0x82, 0xCC, 0x89, 0xCE, 0x05, 0x41, 0xCC, 0x86, 0xCC, 0x80, 0xCE, 0x05, 0x41, 0xCC, 0x86, 0xCC, 0x81, 0xCE, 0x05, 0x41, 0xCC, 0x86, 0xCC, 0x83, + // Bytes 3800 - 383f 0xCE, 0x05, 0x41, 0xCC, 0x86, 0xCC, 0x89, 0xCE, - // Bytes 38c0 - 38ff 0x05, 0x41, 0xCC, 0x87, 0xCC, 0x84, 0xCE, 0x05, 0x41, 0xCC, 0x88, 0xCC, 0x84, 0xCE, 0x05, 0x41, 0xCC, 0x8A, 0xCC, 0x81, 0xCE, 0x05, 0x41, 0xCC, @@ -2091,8 +2065,8 @@ var decomps = [...]byte{ 0xCC, 0x86, 0xCE, 0x05, 0x43, 0xCC, 0xA7, 0xCC, 0x81, 0xCE, 0x05, 0x45, 0xCC, 0x82, 0xCC, 0x80, 0xCE, 0x05, 0x45, 0xCC, 0x82, 0xCC, 0x81, 0xCE, + // Bytes 3840 - 387f 0x05, 0x45, 0xCC, 0x82, 0xCC, 0x83, 0xCE, 0x05, - // Bytes 3900 - 393f 0x45, 0xCC, 0x82, 0xCC, 0x89, 0xCE, 0x05, 0x45, 0xCC, 0x84, 0xCC, 0x80, 0xCE, 0x05, 0x45, 0xCC, 0x84, 0xCC, 0x81, 0xCE, 0x05, 0x45, 0xCC, 0xA3, @@ -2100,8 +2074,8 @@ var decomps = [...]byte{ 0x86, 0xCE, 0x05, 0x49, 0xCC, 0x88, 0xCC, 0x81, 0xCE, 0x05, 0x4C, 0xCC, 0xA3, 0xCC, 0x84, 0xCE, 0x05, 0x4F, 0xCC, 0x82, 0xCC, 0x80, 0xCE, 0x05, + // Bytes 3880 - 38bf 0x4F, 0xCC, 0x82, 0xCC, 0x81, 0xCE, 0x05, 0x4F, - // Bytes 3940 - 397f 0xCC, 0x82, 0xCC, 0x83, 0xCE, 0x05, 0x4F, 0xCC, 0x82, 0xCC, 0x89, 0xCE, 0x05, 0x4F, 0xCC, 0x83, 0xCC, 0x81, 0xCE, 0x05, 0x4F, 0xCC, 0x83, 0xCC, @@ -2109,8 +2083,8 @@ var decomps = [...]byte{ 0xCE, 0x05, 0x4F, 0xCC, 0x84, 0xCC, 0x80, 0xCE, 0x05, 0x4F, 0xCC, 0x84, 0xCC, 0x81, 0xCE, 0x05, 0x4F, 0xCC, 0x87, 0xCC, 0x84, 0xCE, 0x05, 0x4F, + // Bytes 38c0 - 38ff 0xCC, 0x88, 0xCC, 0x84, 0xCE, 0x05, 0x4F, 0xCC, - // Bytes 3980 - 39bf 0x9B, 0xCC, 0x80, 0xCE, 0x05, 0x4F, 0xCC, 0x9B, 0xCC, 0x81, 0xCE, 0x05, 0x4F, 0xCC, 0x9B, 0xCC, 0x83, 0xCE, 0x05, 0x4F, 0xCC, 0x9B, 0xCC, 0x89, @@ -2118,8 +2092,8 @@ var decomps = [...]byte{ 0x05, 0x4F, 0xCC, 0xA3, 0xCC, 0x82, 0xCE, 0x05, 0x4F, 0xCC, 0xA8, 0xCC, 0x84, 0xCE, 0x05, 0x52, 0xCC, 0xA3, 0xCC, 0x84, 0xCE, 0x05, 0x53, 0xCC, + // Bytes 3900 - 393f 0x81, 0xCC, 0x87, 0xCE, 0x05, 0x53, 0xCC, 0x8C, - // Bytes 39c0 - 39ff 0xCC, 0x87, 0xCE, 0x05, 0x53, 0xCC, 0xA3, 0xCC, 0x87, 0xCE, 0x05, 0x55, 0xCC, 0x83, 0xCC, 0x81, 0xCE, 0x05, 0x55, 0xCC, 0x84, 0xCC, 0x88, 0xCE, @@ -2127,8 +2101,8 @@ var decomps = [...]byte{ 0x55, 0xCC, 0x88, 0xCC, 0x81, 0xCE, 0x05, 0x55, 0xCC, 0x88, 0xCC, 0x84, 0xCE, 0x05, 0x55, 0xCC, 0x88, 0xCC, 0x8C, 0xCE, 0x05, 0x55, 0xCC, 0x9B, + // Bytes 3940 - 397f 0xCC, 0x80, 0xCE, 0x05, 0x55, 0xCC, 0x9B, 0xCC, - // Bytes 3a00 - 3a3f 0x81, 0xCE, 0x05, 0x55, 0xCC, 0x9B, 0xCC, 0x83, 0xCE, 0x05, 0x55, 0xCC, 0x9B, 0xCC, 0x89, 0xCE, 0x05, 0x55, 0xCC, 0x9B, 0xCC, 0xA3, 0xBA, 0x05, @@ -2136,8 +2110,8 @@ var decomps = [...]byte{ 0xCC, 0x82, 0xCC, 0x81, 0xCE, 0x05, 0x61, 0xCC, 0x82, 0xCC, 0x83, 0xCE, 0x05, 0x61, 0xCC, 0x82, 0xCC, 0x89, 0xCE, 0x05, 0x61, 0xCC, 0x86, 0xCC, + // Bytes 3980 - 39bf 0x80, 0xCE, 0x05, 0x61, 0xCC, 0x86, 0xCC, 0x81, - // Bytes 3a40 - 3a7f 0xCE, 0x05, 0x61, 0xCC, 0x86, 0xCC, 0x83, 0xCE, 0x05, 0x61, 0xCC, 0x86, 0xCC, 0x89, 0xCE, 0x05, 0x61, 0xCC, 0x87, 0xCC, 0x84, 0xCE, 0x05, 0x61, @@ -2145,8 +2119,8 @@ var decomps = [...]byte{ 0x8A, 0xCC, 0x81, 0xCE, 0x05, 0x61, 0xCC, 0xA3, 0xCC, 0x82, 0xCE, 0x05, 0x61, 0xCC, 0xA3, 0xCC, 0x86, 0xCE, 0x05, 0x63, 0xCC, 0xA7, 0xCC, 0x81, + // Bytes 39c0 - 39ff 0xCE, 0x05, 0x65, 0xCC, 0x82, 0xCC, 0x80, 0xCE, - // Bytes 3a80 - 3abf 0x05, 0x65, 0xCC, 0x82, 0xCC, 0x81, 0xCE, 0x05, 0x65, 0xCC, 0x82, 0xCC, 0x83, 0xCE, 0x05, 0x65, 0xCC, 0x82, 0xCC, 0x89, 0xCE, 0x05, 0x65, 0xCC, @@ -2154,8 +2128,8 @@ var decomps = [...]byte{ 0xCC, 0x81, 0xCE, 0x05, 0x65, 0xCC, 0xA3, 0xCC, 0x82, 0xCE, 0x05, 0x65, 0xCC, 0xA7, 0xCC, 0x86, 0xCE, 0x05, 0x69, 0xCC, 0x88, 0xCC, 0x81, 0xCE, + // Bytes 3a00 - 3a3f 0x05, 0x6C, 0xCC, 0xA3, 0xCC, 0x84, 0xCE, 0x05, - // Bytes 3ac0 - 3aff 0x6F, 0xCC, 0x82, 0xCC, 0x80, 0xCE, 0x05, 0x6F, 0xCC, 0x82, 0xCC, 0x81, 0xCE, 0x05, 0x6F, 0xCC, 0x82, 0xCC, 0x83, 0xCE, 0x05, 0x6F, 0xCC, 0x82, @@ -2163,8 +2137,8 @@ var decomps = [...]byte{ 0x81, 0xCE, 0x05, 0x6F, 0xCC, 0x83, 0xCC, 0x84, 0xCE, 0x05, 0x6F, 0xCC, 0x83, 0xCC, 0x88, 0xCE, 0x05, 0x6F, 0xCC, 0x84, 0xCC, 0x80, 0xCE, 0x05, + // Bytes 3a40 - 3a7f 0x6F, 0xCC, 0x84, 0xCC, 0x81, 0xCE, 0x05, 0x6F, - // Bytes 3b00 - 3b3f 0xCC, 0x87, 0xCC, 0x84, 0xCE, 0x05, 0x6F, 0xCC, 0x88, 0xCC, 0x84, 0xCE, 0x05, 0x6F, 0xCC, 0x9B, 0xCC, 0x80, 0xCE, 0x05, 0x6F, 0xCC, 0x9B, 0xCC, @@ -2172,8 +2146,8 @@ var decomps = [...]byte{ 0xCE, 0x05, 0x6F, 0xCC, 0x9B, 0xCC, 0x89, 0xCE, 0x05, 0x6F, 0xCC, 0x9B, 0xCC, 0xA3, 0xBA, 0x05, 0x6F, 0xCC, 0xA3, 0xCC, 0x82, 0xCE, 0x05, 0x6F, + // Bytes 3a80 - 3abf 0xCC, 0xA8, 0xCC, 0x84, 0xCE, 0x05, 0x72, 0xCC, - // Bytes 3b40 - 3b7f 0xA3, 0xCC, 0x84, 0xCE, 0x05, 0x73, 0xCC, 0x81, 0xCC, 0x87, 0xCE, 0x05, 0x73, 0xCC, 0x8C, 0xCC, 0x87, 0xCE, 0x05, 0x73, 0xCC, 0xA3, 0xCC, 0x87, @@ -2181,8 +2155,8 @@ var decomps = [...]byte{ 0x05, 0x75, 0xCC, 0x84, 0xCC, 0x88, 0xCE, 0x05, 0x75, 0xCC, 0x88, 0xCC, 0x80, 0xCE, 0x05, 0x75, 0xCC, 0x88, 0xCC, 0x81, 0xCE, 0x05, 0x75, 0xCC, + // Bytes 3ac0 - 3aff 0x88, 0xCC, 0x84, 0xCE, 0x05, 0x75, 0xCC, 0x88, - // Bytes 3b80 - 3bbf 0xCC, 0x8C, 0xCE, 0x05, 0x75, 0xCC, 0x9B, 0xCC, 0x80, 0xCE, 0x05, 0x75, 0xCC, 0x9B, 0xCC, 0x81, 0xCE, 0x05, 0x75, 0xCC, 0x9B, 0xCC, 0x83, 0xCE, @@ -2190,8 +2164,8 @@ var decomps = [...]byte{ 0x75, 0xCC, 0x9B, 0xCC, 0xA3, 0xBA, 0x05, 0xE1, 0xBE, 0xBF, 0xCC, 0x80, 0xCE, 0x05, 0xE1, 0xBE, 0xBF, 0xCC, 0x81, 0xCE, 0x05, 0xE1, 0xBE, 0xBF, + // Bytes 3b00 - 3b3f 0xCD, 0x82, 0xCE, 0x05, 0xE1, 0xBF, 0xBE, 0xCC, - // Bytes 3bc0 - 3bff 0x80, 0xCE, 0x05, 0xE1, 0xBF, 0xBE, 0xCC, 0x81, 0xCE, 0x05, 0xE1, 0xBF, 0xBE, 0xCD, 0x82, 0xCE, 0x05, 0xE2, 0x86, 0x90, 0xCC, 0xB8, 0x05, 0x05, @@ -2199,8 +2173,8 @@ var decomps = [...]byte{ 0x86, 0x94, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x87, 0x90, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x87, 0x92, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x87, 0x94, 0xCC, + // Bytes 3b40 - 3b7f 0xB8, 0x05, 0x05, 0xE2, 0x88, 0x83, 0xCC, 0xB8, - // Bytes 3c00 - 3c3f 0x05, 0x05, 0xE2, 0x88, 0x88, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x88, 0x8B, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x88, 0xA3, 0xCC, 0xB8, 0x05, 0x05, 0xE2, @@ -2208,8 +2182,8 @@ var decomps = [...]byte{ 0xBC, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89, 0x83, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89, 0x85, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89, 0x88, 0xCC, 0xB8, + // Bytes 3b80 - 3bbf 0x05, 0x05, 0xE2, 0x89, 0x8D, 0xCC, 0xB8, 0x05, - // Bytes 3c40 - 3c7f 0x05, 0xE2, 0x89, 0xA1, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89, 0xA4, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89, 0xA5, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89, @@ -2217,8 +2191,8 @@ var decomps = [...]byte{ 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89, 0xB6, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89, 0xB7, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89, 0xBA, 0xCC, 0xB8, 0x05, + // Bytes 3bc0 - 3bff 0x05, 0xE2, 0x89, 0xBB, 0xCC, 0xB8, 0x05, 0x05, - // Bytes 3c80 - 3cbf 0xE2, 0x89, 0xBC, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89, 0xBD, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A, 0x82, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A, 0x83, @@ -2226,8 +2200,8 @@ var decomps = [...]byte{ 0xB8, 0x05, 0x05, 0xE2, 0x8A, 0x87, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A, 0x91, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A, 0x92, 0xCC, 0xB8, 0x05, 0x05, + // Bytes 3c00 - 3c3f 0xE2, 0x8A, 0xA2, 0xCC, 0xB8, 0x05, 0x05, 0xE2, - // Bytes 3cc0 - 3cff 0x8A, 0xA8, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A, 0xA9, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A, 0xAB, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A, 0xB2, 0xCC, @@ -2235,8 +2209,8 @@ var decomps = [...]byte{ 0x05, 0x05, 0xE2, 0x8A, 0xB4, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A, 0xB5, 0xCC, 0xB8, 0x05, 0x06, 0xCE, 0x91, 0xCC, 0x93, 0xCD, 0x85, 0xDE, 0x06, + // Bytes 3c40 - 3c7f 0xCE, 0x91, 0xCC, 0x94, 0xCD, 0x85, 0xDE, 0x06, - // Bytes 3d00 - 3d3f 0xCE, 0x95, 0xCC, 0x93, 0xCC, 0x80, 0xCE, 0x06, 0xCE, 0x95, 0xCC, 0x93, 0xCC, 0x81, 0xCE, 0x06, 0xCE, 0x95, 0xCC, 0x94, 0xCC, 0x80, 0xCE, 0x06, @@ -2244,8 +2218,8 @@ var decomps = [...]byte{ 0xCE, 0x97, 0xCC, 0x93, 0xCD, 0x85, 0xDE, 0x06, 0xCE, 0x97, 0xCC, 0x94, 0xCD, 0x85, 0xDE, 0x06, 0xCE, 0x99, 0xCC, 0x93, 0xCC, 0x80, 0xCE, 0x06, + // Bytes 3c80 - 3cbf 0xCE, 0x99, 0xCC, 0x93, 0xCC, 0x81, 0xCE, 0x06, - // Bytes 3d40 - 3d7f 0xCE, 0x99, 0xCC, 0x93, 0xCD, 0x82, 0xCE, 0x06, 0xCE, 0x99, 0xCC, 0x94, 0xCC, 0x80, 0xCE, 0x06, 0xCE, 0x99, 0xCC, 0x94, 0xCC, 0x81, 0xCE, 0x06, @@ -2253,8 +2227,8 @@ var decomps = [...]byte{ 0xCE, 0x9F, 0xCC, 0x93, 0xCC, 0x80, 0xCE, 0x06, 0xCE, 0x9F, 0xCC, 0x93, 0xCC, 0x81, 0xCE, 0x06, 0xCE, 0x9F, 0xCC, 0x94, 0xCC, 0x80, 0xCE, 0x06, + // Bytes 3cc0 - 3cff 0xCE, 0x9F, 0xCC, 0x94, 0xCC, 0x81, 0xCE, 0x06, - // Bytes 3d80 - 3dbf 0xCE, 0xA5, 0xCC, 0x94, 0xCC, 0x80, 0xCE, 0x06, 0xCE, 0xA5, 0xCC, 0x94, 0xCC, 0x81, 0xCE, 0x06, 0xCE, 0xA5, 0xCC, 0x94, 0xCD, 0x82, 0xCE, 0x06, @@ -2262,8 +2236,8 @@ var decomps = [...]byte{ 0xCE, 0xA9, 0xCC, 0x94, 0xCD, 0x85, 0xDE, 0x06, 0xCE, 0xB1, 0xCC, 0x80, 0xCD, 0x85, 0xDE, 0x06, 0xCE, 0xB1, 0xCC, 0x81, 0xCD, 0x85, 0xDE, 0x06, + // Bytes 3d00 - 3d3f 0xCE, 0xB1, 0xCC, 0x93, 0xCD, 0x85, 0xDE, 0x06, - // Bytes 3dc0 - 3dff 0xCE, 0xB1, 0xCC, 0x94, 0xCD, 0x85, 0xDE, 0x06, 0xCE, 0xB1, 0xCD, 0x82, 0xCD, 0x85, 0xDE, 0x06, 0xCE, 0xB5, 0xCC, 0x93, 0xCC, 0x80, 0xCE, 0x06, @@ -2271,8 +2245,8 @@ var decomps = [...]byte{ 0xCE, 0xB5, 0xCC, 0x94, 0xCC, 0x80, 0xCE, 0x06, 0xCE, 0xB5, 0xCC, 0x94, 0xCC, 0x81, 0xCE, 0x06, 0xCE, 0xB7, 0xCC, 0x80, 0xCD, 0x85, 0xDE, 0x06, + // Bytes 3d40 - 3d7f 0xCE, 0xB7, 0xCC, 0x81, 0xCD, 0x85, 0xDE, 0x06, - // Bytes 3e00 - 3e3f 0xCE, 0xB7, 0xCC, 0x93, 0xCD, 0x85, 0xDE, 0x06, 0xCE, 0xB7, 0xCC, 0x94, 0xCD, 0x85, 0xDE, 0x06, 0xCE, 0xB7, 0xCD, 0x82, 0xCD, 0x85, 0xDE, 0x06, @@ -2280,8 +2254,8 @@ var decomps = [...]byte{ 0xCE, 0xB9, 0xCC, 0x88, 0xCC, 0x81, 0xCE, 0x06, 0xCE, 0xB9, 0xCC, 0x88, 0xCD, 0x82, 0xCE, 0x06, 0xCE, 0xB9, 0xCC, 0x93, 0xCC, 0x80, 0xCE, 0x06, + // Bytes 3d80 - 3dbf 0xCE, 0xB9, 0xCC, 0x93, 0xCC, 0x81, 0xCE, 0x06, - // Bytes 3e40 - 3e7f 0xCE, 0xB9, 0xCC, 0x93, 0xCD, 0x82, 0xCE, 0x06, 0xCE, 0xB9, 0xCC, 0x94, 0xCC, 0x80, 0xCE, 0x06, 0xCE, 0xB9, 0xCC, 0x94, 0xCC, 0x81, 0xCE, 0x06, @@ -2289,8 +2263,8 @@ var decomps = [...]byte{ 0xCE, 0xBF, 0xCC, 0x93, 0xCC, 0x80, 0xCE, 0x06, 0xCE, 0xBF, 0xCC, 0x93, 0xCC, 0x81, 0xCE, 0x06, 0xCE, 0xBF, 0xCC, 0x94, 0xCC, 0x80, 0xCE, 0x06, + // Bytes 3dc0 - 3dff 0xCE, 0xBF, 0xCC, 0x94, 0xCC, 0x81, 0xCE, 0x06, - // Bytes 3e80 - 3ebf 0xCF, 0x85, 0xCC, 0x88, 0xCC, 0x80, 0xCE, 0x06, 0xCF, 0x85, 0xCC, 0x88, 0xCC, 0x81, 0xCE, 0x06, 0xCF, 0x85, 0xCC, 0x88, 0xCD, 0x82, 0xCE, 0x06, @@ -2298,8 +2272,8 @@ var decomps = [...]byte{ 0xCF, 0x85, 0xCC, 0x93, 0xCC, 0x81, 0xCE, 0x06, 0xCF, 0x85, 0xCC, 0x93, 0xCD, 0x82, 0xCE, 0x06, 0xCF, 0x85, 0xCC, 0x94, 0xCC, 0x80, 0xCE, 0x06, + // Bytes 3e00 - 3e3f 0xCF, 0x85, 0xCC, 0x94, 0xCC, 0x81, 0xCE, 0x06, - // Bytes 3ec0 - 3eff 0xCF, 0x85, 0xCC, 0x94, 0xCD, 0x82, 0xCE, 0x06, 0xCF, 0x89, 0xCC, 0x80, 0xCD, 0x85, 0xDE, 0x06, 0xCF, 0x89, 0xCC, 0x81, 0xCD, 0x85, 0xDE, 0x06, @@ -2307,81 +2281,115 @@ var decomps = [...]byte{ 0xCF, 0x89, 0xCC, 0x94, 0xCD, 0x85, 0xDE, 0x06, 0xCF, 0x89, 0xCD, 0x82, 0xCD, 0x85, 0xDE, 0x06, 0xE0, 0xA4, 0xA8, 0xE0, 0xA4, 0xBC, 0x0D, 0x06, + // Bytes 3e40 - 3e7f 0xE0, 0xA4, 0xB0, 0xE0, 0xA4, 0xBC, 0x0D, 0x06, - // Bytes 3f00 - 3f3f 0xE0, 0xA4, 0xB3, 0xE0, 0xA4, 0xBC, 0x0D, 0x06, + 0xE0, 0xA7, 0x87, 0xE0, 0xA6, 0xBE, 0x01, 0x06, + 0xE0, 0xA7, 0x87, 0xE0, 0xA7, 0x97, 0x01, 0x06, + 0xE0, 0xAD, 0x87, 0xE0, 0xAC, 0xBE, 0x01, 0x06, + 0xE0, 0xAD, 0x87, 0xE0, 0xAD, 0x96, 0x01, 0x06, + 0xE0, 0xAD, 0x87, 0xE0, 0xAD, 0x97, 0x01, 0x06, + 0xE0, 0xAE, 0x92, 0xE0, 0xAF, 0x97, 0x01, 0x06, + // Bytes 3e80 - 3ebf + 0xE0, 0xAF, 0x86, 0xE0, 0xAE, 0xBE, 0x01, 0x06, + 0xE0, 0xAF, 0x86, 0xE0, 0xAF, 0x97, 0x01, 0x06, + 0xE0, 0xAF, 0x87, 0xE0, 0xAE, 0xBE, 0x01, 0x06, 0xE0, 0xB1, 0x86, 0xE0, 0xB1, 0x96, 0x89, 0x06, + 0xE0, 0xB2, 0xBF, 0xE0, 0xB3, 0x95, 0x01, 0x06, + 0xE0, 0xB3, 0x86, 0xE0, 0xB3, 0x95, 0x01, 0x06, + 0xE0, 0xB3, 0x86, 0xE0, 0xB3, 0x96, 0x01, 0x06, + 0xE0, 0xB5, 0x86, 0xE0, 0xB4, 0xBE, 0x01, 0x06, + // Bytes 3ec0 - 3eff + 0xE0, 0xB5, 0x86, 0xE0, 0xB5, 0x97, 0x01, 0x06, + 0xE0, 0xB5, 0x87, 0xE0, 0xB4, 0xBE, 0x01, 0x06, 0xE0, 0xB7, 0x99, 0xE0, 0xB7, 0x8A, 0x15, 0x06, + 0xE0, 0xB7, 0x99, 0xE0, 0xB7, 0x9F, 0x01, 0x06, + 0xE1, 0x80, 0xA5, 0xE1, 0x80, 0xAE, 0x01, 0x06, + 0xE1, 0xAC, 0x85, 0xE1, 0xAC, 0xB5, 0x01, 0x06, + 0xE1, 0xAC, 0x87, 0xE1, 0xAC, 0xB5, 0x01, 0x06, + 0xE1, 0xAC, 0x89, 0xE1, 0xAC, 0xB5, 0x01, 0x06, + // Bytes 3f00 - 3f3f + 0xE1, 0xAC, 0x8B, 0xE1, 0xAC, 0xB5, 0x01, 0x06, + 0xE1, 0xAC, 0x8D, 0xE1, 0xAC, 0xB5, 0x01, 0x06, + 0xE1, 0xAC, 0x91, 0xE1, 0xAC, 0xB5, 0x01, 0x06, + 0xE1, 0xAC, 0xBA, 0xE1, 0xAC, 0xB5, 0x01, 0x06, + 0xE1, 0xAC, 0xBC, 0xE1, 0xAC, 0xB5, 0x01, 0x06, + 0xE1, 0xAC, 0xBE, 0xE1, 0xAC, 0xB5, 0x01, 0x06, + 0xE1, 0xAC, 0xBF, 0xE1, 0xAC, 0xB5, 0x01, 0x06, + 0xE1, 0xAD, 0x82, 0xE1, 0xAC, 0xB5, 0x01, 0x06, + // Bytes 3f40 - 3f7f 0xE3, 0x81, 0x86, 0xE3, 0x82, 0x99, 0x11, 0x06, 0xE3, 0x81, 0x8B, 0xE3, 0x82, 0x99, 0x11, 0x06, 0xE3, 0x81, 0x8D, 0xE3, 0x82, 0x99, 0x11, 0x06, 0xE3, 0x81, 0x8F, 0xE3, 0x82, 0x99, 0x11, 0x06, 0xE3, 0x81, 0x91, 0xE3, 0x82, 0x99, 0x11, 0x06, - // Bytes 3f40 - 3f7f 0xE3, 0x81, 0x93, 0xE3, 0x82, 0x99, 0x11, 0x06, 0xE3, 0x81, 0x95, 0xE3, 0x82, 0x99, 0x11, 0x06, 0xE3, 0x81, 0x97, 0xE3, 0x82, 0x99, 0x11, 0x06, + // Bytes 3f80 - 3fbf 0xE3, 0x81, 0x99, 0xE3, 0x82, 0x99, 0x11, 0x06, 0xE3, 0x81, 0x9B, 0xE3, 0x82, 0x99, 0x11, 0x06, 0xE3, 0x81, 0x9D, 0xE3, 0x82, 0x99, 0x11, 0x06, 0xE3, 0x81, 0x9F, 0xE3, 0x82, 0x99, 0x11, 0x06, 0xE3, 0x81, 0xA1, 0xE3, 0x82, 0x99, 0x11, 0x06, - // Bytes 3f80 - 3fbf 0xE3, 0x81, 0xA4, 0xE3, 0x82, 0x99, 0x11, 0x06, 0xE3, 0x81, 0xA6, 0xE3, 0x82, 0x99, 0x11, 0x06, 0xE3, 0x81, 0xA8, 0xE3, 0x82, 0x99, 0x11, 0x06, + // Bytes 3fc0 - 3fff 0xE3, 0x81, 0xAF, 0xE3, 0x82, 0x99, 0x11, 0x06, 0xE3, 0x81, 0xAF, 0xE3, 0x82, 0x9A, 0x11, 0x06, 0xE3, 0x81, 0xB2, 0xE3, 0x82, 0x99, 0x11, 0x06, 0xE3, 0x81, 0xB2, 0xE3, 0x82, 0x9A, 0x11, 0x06, 0xE3, 0x81, 0xB5, 0xE3, 0x82, 0x99, 0x11, 0x06, - // Bytes 3fc0 - 3fff 0xE3, 0x81, 0xB5, 0xE3, 0x82, 0x9A, 0x11, 0x06, 0xE3, 0x81, 0xB8, 0xE3, 0x82, 0x99, 0x11, 0x06, 0xE3, 0x81, 0xB8, 0xE3, 0x82, 0x9A, 0x11, 0x06, + // Bytes 4000 - 403f 0xE3, 0x81, 0xBB, 0xE3, 0x82, 0x99, 0x11, 0x06, 0xE3, 0x81, 0xBB, 0xE3, 0x82, 0x9A, 0x11, 0x06, 0xE3, 0x82, 0x9D, 0xE3, 0x82, 0x99, 0x11, 0x06, 0xE3, 0x82, 0xA6, 0xE3, 0x82, 0x99, 0x11, 0x06, 0xE3, 0x82, 0xAB, 0xE3, 0x82, 0x99, 0x11, 0x06, - // Bytes 4000 - 403f 0xE3, 0x82, 0xAD, 0xE3, 0x82, 0x99, 0x11, 0x06, 0xE3, 0x82, 0xAF, 0xE3, 0x82, 0x99, 0x11, 0x06, 0xE3, 0x82, 0xB1, 0xE3, 0x82, 0x99, 0x11, 0x06, + // Bytes 4040 - 407f 0xE3, 0x82, 0xB3, 0xE3, 0x82, 0x99, 0x11, 0x06, 0xE3, 0x82, 0xB5, 0xE3, 0x82, 0x99, 0x11, 0x06, 0xE3, 0x82, 0xB7, 0xE3, 0x82, 0x99, 0x11, 0x06, 0xE3, 0x82, 0xB9, 0xE3, 0x82, 0x99, 0x11, 0x06, 0xE3, 0x82, 0xBB, 0xE3, 0x82, 0x99, 0x11, 0x06, - // Bytes 4040 - 407f 0xE3, 0x82, 0xBD, 0xE3, 0x82, 0x99, 0x11, 0x06, 0xE3, 0x82, 0xBF, 0xE3, 0x82, 0x99, 0x11, 0x06, 0xE3, 0x83, 0x81, 0xE3, 0x82, 0x99, 0x11, 0x06, + // Bytes 4080 - 40bf 0xE3, 0x83, 0x84, 0xE3, 0x82, 0x99, 0x11, 0x06, 0xE3, 0x83, 0x86, 0xE3, 0x82, 0x99, 0x11, 0x06, 0xE3, 0x83, 0x88, 0xE3, 0x82, 0x99, 0x11, 0x06, 0xE3, 0x83, 0x8F, 0xE3, 0x82, 0x99, 0x11, 0x06, 0xE3, 0x83, 0x8F, 0xE3, 0x82, 0x9A, 0x11, 0x06, - // Bytes 4080 - 40bf 0xE3, 0x83, 0x92, 0xE3, 0x82, 0x99, 0x11, 0x06, 0xE3, 0x83, 0x92, 0xE3, 0x82, 0x9A, 0x11, 0x06, 0xE3, 0x83, 0x95, 0xE3, 0x82, 0x99, 0x11, 0x06, + // Bytes 40c0 - 40ff 0xE3, 0x83, 0x95, 0xE3, 0x82, 0x9A, 0x11, 0x06, 0xE3, 0x83, 0x98, 0xE3, 0x82, 0x99, 0x11, 0x06, 0xE3, 0x83, 0x98, 0xE3, 0x82, 0x9A, 0x11, 0x06, 0xE3, 0x83, 0x9B, 0xE3, 0x82, 0x99, 0x11, 0x06, 0xE3, 0x83, 0x9B, 0xE3, 0x82, 0x9A, 0x11, 0x06, - // Bytes 40c0 - 40ff 0xE3, 0x83, 0xAF, 0xE3, 0x82, 0x99, 0x11, 0x06, 0xE3, 0x83, 0xB0, 0xE3, 0x82, 0x99, 0x11, 0x06, 0xE3, 0x83, 0xB1, 0xE3, 0x82, 0x99, 0x11, 0x06, + // Bytes 4100 - 413f 0xE3, 0x83, 0xB2, 0xE3, 0x82, 0x99, 0x11, 0x06, - 0xE3, 0x83, 0xBD, 0xE3, 0x82, 0x99, 0x11, 0x08, + 0xE3, 0x83, 0xBD, 0xE3, 0x82, 0x99, 0x11, 0x06, + 0xF0, 0x90, 0x97, 0x92, 0xCC, 0x87, 0xCD, 0x06, + 0xF0, 0x90, 0x97, 0x9A, 0xCC, 0x87, 0xCD, 0x08, 0xCE, 0x91, 0xCC, 0x93, 0xCC, 0x80, 0xCD, 0x85, 0xDF, 0x08, 0xCE, 0x91, 0xCC, 0x93, 0xCC, 0x81, 0xCD, 0x85, 0xDF, 0x08, 0xCE, 0x91, 0xCC, 0x93, - // Bytes 4100 - 413f 0xCD, 0x82, 0xCD, 0x85, 0xDF, 0x08, 0xCE, 0x91, + // Bytes 4140 - 417f 0xCC, 0x94, 0xCC, 0x80, 0xCD, 0x85, 0xDF, 0x08, 0xCE, 0x91, 0xCC, 0x94, 0xCC, 0x81, 0xCD, 0x85, 0xDF, 0x08, 0xCE, 0x91, 0xCC, 0x94, 0xCD, 0x82, @@ -2389,8 +2397,8 @@ var decomps = [...]byte{ 0xCC, 0x80, 0xCD, 0x85, 0xDF, 0x08, 0xCE, 0x97, 0xCC, 0x93, 0xCC, 0x81, 0xCD, 0x85, 0xDF, 0x08, 0xCE, 0x97, 0xCC, 0x93, 0xCD, 0x82, 0xCD, 0x85, - // Bytes 4140 - 417f 0xDF, 0x08, 0xCE, 0x97, 0xCC, 0x94, 0xCC, 0x80, + // Bytes 4180 - 41bf 0xCD, 0x85, 0xDF, 0x08, 0xCE, 0x97, 0xCC, 0x94, 0xCC, 0x81, 0xCD, 0x85, 0xDF, 0x08, 0xCE, 0x97, 0xCC, 0x94, 0xCD, 0x82, 0xCD, 0x85, 0xDF, 0x08, @@ -2398,8 +2406,8 @@ var decomps = [...]byte{ 0xDF, 0x08, 0xCE, 0xA9, 0xCC, 0x93, 0xCC, 0x81, 0xCD, 0x85, 0xDF, 0x08, 0xCE, 0xA9, 0xCC, 0x93, 0xCD, 0x82, 0xCD, 0x85, 0xDF, 0x08, 0xCE, 0xA9, - // Bytes 4180 - 41bf 0xCC, 0x94, 0xCC, 0x80, 0xCD, 0x85, 0xDF, 0x08, + // Bytes 41c0 - 41ff 0xCE, 0xA9, 0xCC, 0x94, 0xCC, 0x81, 0xCD, 0x85, 0xDF, 0x08, 0xCE, 0xA9, 0xCC, 0x94, 0xCD, 0x82, 0xCD, 0x85, 0xDF, 0x08, 0xCE, 0xB1, 0xCC, 0x93, @@ -2407,8 +2415,8 @@ var decomps = [...]byte{ 0xCC, 0x93, 0xCC, 0x81, 0xCD, 0x85, 0xDF, 0x08, 0xCE, 0xB1, 0xCC, 0x93, 0xCD, 0x82, 0xCD, 0x85, 0xDF, 0x08, 0xCE, 0xB1, 0xCC, 0x94, 0xCC, 0x80, - // Bytes 41c0 - 41ff 0xCD, 0x85, 0xDF, 0x08, 0xCE, 0xB1, 0xCC, 0x94, + // Bytes 4200 - 423f 0xCC, 0x81, 0xCD, 0x85, 0xDF, 0x08, 0xCE, 0xB1, 0xCC, 0x94, 0xCD, 0x82, 0xCD, 0x85, 0xDF, 0x08, 0xCE, 0xB7, 0xCC, 0x93, 0xCC, 0x80, 0xCD, 0x85, @@ -2416,8 +2424,8 @@ var decomps = [...]byte{ 0xCD, 0x85, 0xDF, 0x08, 0xCE, 0xB7, 0xCC, 0x93, 0xCD, 0x82, 0xCD, 0x85, 0xDF, 0x08, 0xCE, 0xB7, 0xCC, 0x94, 0xCC, 0x80, 0xCD, 0x85, 0xDF, 0x08, - // Bytes 4200 - 423f 0xCE, 0xB7, 0xCC, 0x94, 0xCC, 0x81, 0xCD, 0x85, + // Bytes 4240 - 427f 0xDF, 0x08, 0xCE, 0xB7, 0xCC, 0x94, 0xCD, 0x82, 0xCD, 0x85, 0xDF, 0x08, 0xCF, 0x89, 0xCC, 0x93, 0xCC, 0x80, 0xCD, 0x85, 0xDF, 0x08, 0xCF, 0x89, @@ -2425,311 +2433,378 @@ var decomps = [...]byte{ 0xCF, 0x89, 0xCC, 0x93, 0xCD, 0x82, 0xCD, 0x85, 0xDF, 0x08, 0xCF, 0x89, 0xCC, 0x94, 0xCC, 0x80, 0xCD, 0x85, 0xDF, 0x08, 0xCF, 0x89, 0xCC, 0x94, - // Bytes 4240 - 427f 0xCC, 0x81, 0xCD, 0x85, 0xDF, 0x08, 0xCF, 0x89, + // Bytes 4280 - 42bf 0xCC, 0x94, 0xCD, 0x82, 0xCD, 0x85, 0xDF, 0x08, 0xF0, 0x91, 0x82, 0x99, 0xF0, 0x91, 0x82, 0xBA, 0x0D, 0x08, 0xF0, 0x91, 0x82, 0x9B, 0xF0, 0x91, 0x82, 0xBA, 0x0D, 0x08, 0xF0, 0x91, 0x82, 0xA5, - 0xF0, 0x91, 0x82, 0xBA, 0x0D, 0x42, 0xC2, 0xB4, + 0xF0, 0x91, 0x82, 0xBA, 0x0D, 0x08, 0xF0, 0x91, + 0x84, 0xB1, 0xF0, 0x91, 0x84, 0xA7, 0x01, 0x08, + 0xF0, 0x91, 0x84, 0xB2, 0xF0, 0x91, 0x84, 0xA7, + 0x01, 0x08, 0xF0, 0x91, 0x8D, 0x87, 0xF0, 0x91, + // Bytes 42c0 - 42ff + 0x8C, 0xBE, 0x01, 0x08, 0xF0, 0x91, 0x8D, 0x87, + 0xF0, 0x91, 0x8D, 0x97, 0x01, 0x08, 0xF0, 0x91, + 0x8E, 0x82, 0xF0, 0x91, 0x8F, 0x89, 0x01, 0x08, + 0xF0, 0x91, 0x8E, 0x84, 0xF0, 0x91, 0x8E, 0xBB, + 0x01, 0x08, 0xF0, 0x91, 0x8E, 0x8B, 0xF0, 0x91, + 0x8F, 0x82, 0x01, 0x08, 0xF0, 0x91, 0x8E, 0x90, + 0xF0, 0x91, 0x8F, 0x89, 0x01, 0x08, 0xF0, 0x91, + 0x92, 0xB9, 0xF0, 0x91, 0x92, 0xB0, 0x01, 0x08, + // Bytes 4300 - 433f + 0xF0, 0x91, 0x92, 0xB9, 0xF0, 0x91, 0x92, 0xBA, + 0x01, 0x08, 0xF0, 0x91, 0x92, 0xB9, 0xF0, 0x91, + 0x92, 0xBD, 0x01, 0x08, 0xF0, 0x91, 0x96, 0xB8, + 0xF0, 0x91, 0x96, 0xAF, 0x01, 0x08, 0xF0, 0x91, + 0x96, 0xB9, 0xF0, 0x91, 0x96, 0xAF, 0x01, 0x08, + 0xF0, 0x91, 0xA4, 0xB5, 0xF0, 0x91, 0xA4, 0xB0, + 0x01, 0x09, 0xE0, 0xB3, 0x86, 0xE0, 0xB3, 0x82, + 0xE0, 0xB3, 0x95, 0x02, 0x09, 0xE0, 0xB7, 0x99, + // Bytes 4340 - 437f + 0xE0, 0xB7, 0x8F, 0xE0, 0xB7, 0x8A, 0x16, 0x0C, + 0xF0, 0x96, 0xB5, 0xA3, 0xF0, 0x96, 0xB5, 0xA7, + 0xF0, 0x96, 0xB5, 0xA7, 0x02, 0x42, 0xC2, 0xB4, 0x01, 0x43, 0x20, 0xCC, 0x81, 0xCD, 0x43, 0x20, 0xCC, 0x83, 0xCD, 0x43, 0x20, 0xCC, 0x84, 0xCD, - // Bytes 4280 - 42bf 0x43, 0x20, 0xCC, 0x85, 0xCD, 0x43, 0x20, 0xCC, 0x86, 0xCD, 0x43, 0x20, 0xCC, 0x87, 0xCD, 0x43, 0x20, 0xCC, 0x88, 0xCD, 0x43, 0x20, 0xCC, 0x8A, + // Bytes 4380 - 43bf 0xCD, 0x43, 0x20, 0xCC, 0x8B, 0xCD, 0x43, 0x20, 0xCC, 0x93, 0xCD, 0x43, 0x20, 0xCC, 0x94, 0xCD, 0x43, 0x20, 0xCC, 0xA7, 0xA9, 0x43, 0x20, 0xCC, 0xA8, 0xA9, 0x43, 0x20, 0xCC, 0xB3, 0xB9, 0x43, 0x20, 0xCD, 0x82, 0xCD, 0x43, 0x20, 0xCD, 0x85, - // Bytes 42c0 - 42ff 0xDD, 0x43, 0x20, 0xD9, 0x8B, 0x5D, 0x43, 0x20, 0xD9, 0x8C, 0x61, 0x43, 0x20, 0xD9, 0x8D, 0x65, 0x43, 0x20, 0xD9, 0x8E, 0x69, 0x43, 0x20, 0xD9, + // Bytes 43c0 - 43ff 0x8F, 0x6D, 0x43, 0x20, 0xD9, 0x90, 0x71, 0x43, 0x20, 0xD9, 0x91, 0x75, 0x43, 0x20, 0xD9, 0x92, 0x79, 0x43, 0x41, 0xCC, 0x8A, 0xCD, 0x43, 0x73, 0xCC, 0x87, 0xCD, 0x44, 0x20, 0xE3, 0x82, 0x99, 0x11, 0x44, 0x20, 0xE3, 0x82, 0x9A, 0x11, 0x44, - // Bytes 4300 - 433f 0xC2, 0xA8, 0xCC, 0x81, 0xCE, 0x44, 0xCE, 0x91, 0xCC, 0x81, 0xCD, 0x44, 0xCE, 0x95, 0xCC, 0x81, 0xCD, 0x44, 0xCE, 0x97, 0xCC, 0x81, 0xCD, 0x44, + // Bytes 4400 - 443f 0xCE, 0x99, 0xCC, 0x81, 0xCD, 0x44, 0xCE, 0x9F, 0xCC, 0x81, 0xCD, 0x44, 0xCE, 0xA5, 0xCC, 0x81, 0xCD, 0x44, 0xCE, 0xA5, 0xCC, 0x88, 0xCD, 0x44, 0xCE, 0xA9, 0xCC, 0x81, 0xCD, 0x44, 0xCE, 0xB1, 0xCC, 0x81, 0xCD, 0x44, 0xCE, 0xB5, 0xCC, 0x81, - // Bytes 4340 - 437f 0xCD, 0x44, 0xCE, 0xB7, 0xCC, 0x81, 0xCD, 0x44, 0xCE, 0xB9, 0xCC, 0x81, 0xCD, 0x44, 0xCE, 0xBF, 0xCC, 0x81, 0xCD, 0x44, 0xCF, 0x85, 0xCC, 0x81, + // Bytes 4440 - 447f 0xCD, 0x44, 0xCF, 0x89, 0xCC, 0x81, 0xCD, 0x44, 0xD7, 0x90, 0xD6, 0xB7, 0x35, 0x44, 0xD7, 0x90, 0xD6, 0xB8, 0x39, 0x44, 0xD7, 0x90, 0xD6, 0xBC, 0x45, 0x44, 0xD7, 0x91, 0xD6, 0xBC, 0x45, 0x44, 0xD7, 0x91, 0xD6, 0xBF, 0x4D, 0x44, 0xD7, 0x92, - // Bytes 4380 - 43bf 0xD6, 0xBC, 0x45, 0x44, 0xD7, 0x93, 0xD6, 0xBC, 0x45, 0x44, 0xD7, 0x94, 0xD6, 0xBC, 0x45, 0x44, 0xD7, 0x95, 0xD6, 0xB9, 0x3D, 0x44, 0xD7, 0x95, + // Bytes 4480 - 44bf 0xD6, 0xBC, 0x45, 0x44, 0xD7, 0x96, 0xD6, 0xBC, 0x45, 0x44, 0xD7, 0x98, 0xD6, 0xBC, 0x45, 0x44, 0xD7, 0x99, 0xD6, 0xB4, 0x29, 0x44, 0xD7, 0x99, 0xD6, 0xBC, 0x45, 0x44, 0xD7, 0x9A, 0xD6, 0xBC, 0x45, 0x44, 0xD7, 0x9B, 0xD6, 0xBC, 0x45, 0x44, - // Bytes 43c0 - 43ff 0xD7, 0x9B, 0xD6, 0xBF, 0x4D, 0x44, 0xD7, 0x9C, 0xD6, 0xBC, 0x45, 0x44, 0xD7, 0x9E, 0xD6, 0xBC, 0x45, 0x44, 0xD7, 0xA0, 0xD6, 0xBC, 0x45, 0x44, + // Bytes 44c0 - 44ff 0xD7, 0xA1, 0xD6, 0xBC, 0x45, 0x44, 0xD7, 0xA3, 0xD6, 0xBC, 0x45, 0x44, 0xD7, 0xA4, 0xD6, 0xBC, 0x45, 0x44, 0xD7, 0xA4, 0xD6, 0xBF, 0x4D, 0x44, 0xD7, 0xA6, 0xD6, 0xBC, 0x45, 0x44, 0xD7, 0xA7, 0xD6, 0xBC, 0x45, 0x44, 0xD7, 0xA8, 0xD6, 0xBC, - // Bytes 4400 - 443f 0x45, 0x44, 0xD7, 0xA9, 0xD6, 0xBC, 0x45, 0x44, 0xD7, 0xA9, 0xD7, 0x81, 0x51, 0x44, 0xD7, 0xA9, 0xD7, 0x82, 0x55, 0x44, 0xD7, 0xAA, 0xD6, 0xBC, + // Bytes 4500 - 453f 0x45, 0x44, 0xD7, 0xB2, 0xD6, 0xB7, 0x35, 0x44, 0xD8, 0xA7, 0xD9, 0x8B, 0x5D, 0x44, 0xD8, 0xA7, 0xD9, 0x93, 0xCD, 0x44, 0xD8, 0xA7, 0xD9, 0x94, 0xCD, 0x44, 0xD8, 0xA7, 0xD9, 0x95, 0xB9, 0x44, 0xD8, 0xB0, 0xD9, 0xB0, 0x7D, 0x44, 0xD8, 0xB1, - // Bytes 4440 - 447f 0xD9, 0xB0, 0x7D, 0x44, 0xD9, 0x80, 0xD9, 0x8B, 0x5D, 0x44, 0xD9, 0x80, 0xD9, 0x8E, 0x69, 0x44, 0xD9, 0x80, 0xD9, 0x8F, 0x6D, 0x44, 0xD9, 0x80, + // Bytes 4540 - 457f 0xD9, 0x90, 0x71, 0x44, 0xD9, 0x80, 0xD9, 0x91, 0x75, 0x44, 0xD9, 0x80, 0xD9, 0x92, 0x79, 0x44, 0xD9, 0x87, 0xD9, 0xB0, 0x7D, 0x44, 0xD9, 0x88, 0xD9, 0x94, 0xCD, 0x44, 0xD9, 0x89, 0xD9, 0xB0, 0x7D, 0x44, 0xD9, 0x8A, 0xD9, 0x94, 0xCD, 0x44, - // Bytes 4480 - 44bf 0xDB, 0x92, 0xD9, 0x94, 0xCD, 0x44, 0xDB, 0x95, 0xD9, 0x94, 0xCD, 0x45, 0x20, 0xCC, 0x88, 0xCC, 0x80, 0xCE, 0x45, 0x20, 0xCC, 0x88, 0xCC, 0x81, + // Bytes 4580 - 45bf 0xCE, 0x45, 0x20, 0xCC, 0x88, 0xCD, 0x82, 0xCE, 0x45, 0x20, 0xCC, 0x93, 0xCC, 0x80, 0xCE, 0x45, 0x20, 0xCC, 0x93, 0xCC, 0x81, 0xCE, 0x45, 0x20, 0xCC, 0x93, 0xCD, 0x82, 0xCE, 0x45, 0x20, 0xCC, 0x94, 0xCC, 0x80, 0xCE, 0x45, 0x20, 0xCC, 0x94, - // Bytes 44c0 - 44ff 0xCC, 0x81, 0xCE, 0x45, 0x20, 0xCC, 0x94, 0xCD, 0x82, 0xCE, 0x45, 0x20, 0xD9, 0x8C, 0xD9, 0x91, 0x76, 0x45, 0x20, 0xD9, 0x8D, 0xD9, 0x91, 0x76, + // Bytes 45c0 - 45ff 0x45, 0x20, 0xD9, 0x8E, 0xD9, 0x91, 0x76, 0x45, 0x20, 0xD9, 0x8F, 0xD9, 0x91, 0x76, 0x45, 0x20, 0xD9, 0x90, 0xD9, 0x91, 0x76, 0x45, 0x20, 0xD9, 0x91, 0xD9, 0xB0, 0x7E, 0x45, 0xE2, 0xAB, 0x9D, 0xCC, 0xB8, 0x05, 0x46, 0xCE, 0xB9, 0xCC, 0x88, - // Bytes 4500 - 453f 0xCC, 0x81, 0xCE, 0x46, 0xCF, 0x85, 0xCC, 0x88, 0xCC, 0x81, 0xCE, 0x46, 0xD7, 0xA9, 0xD6, 0xBC, 0xD7, 0x81, 0x52, 0x46, 0xD7, 0xA9, 0xD6, 0xBC, + // Bytes 4600 - 463f 0xD7, 0x82, 0x56, 0x46, 0xD9, 0x80, 0xD9, 0x8E, 0xD9, 0x91, 0x76, 0x46, 0xD9, 0x80, 0xD9, 0x8F, 0xD9, 0x91, 0x76, 0x46, 0xD9, 0x80, 0xD9, 0x90, 0xD9, 0x91, 0x76, 0x46, 0xE0, 0xA4, 0x95, 0xE0, 0xA4, 0xBC, 0x0D, 0x46, 0xE0, 0xA4, 0x96, 0xE0, - // Bytes 4540 - 457f 0xA4, 0xBC, 0x0D, 0x46, 0xE0, 0xA4, 0x97, 0xE0, 0xA4, 0xBC, 0x0D, 0x46, 0xE0, 0xA4, 0x9C, 0xE0, 0xA4, 0xBC, 0x0D, 0x46, 0xE0, 0xA4, 0xA1, 0xE0, + // Bytes 4640 - 467f 0xA4, 0xBC, 0x0D, 0x46, 0xE0, 0xA4, 0xA2, 0xE0, 0xA4, 0xBC, 0x0D, 0x46, 0xE0, 0xA4, 0xAB, 0xE0, 0xA4, 0xBC, 0x0D, 0x46, 0xE0, 0xA4, 0xAF, 0xE0, 0xA4, 0xBC, 0x0D, 0x46, 0xE0, 0xA6, 0xA1, 0xE0, 0xA6, 0xBC, 0x0D, 0x46, 0xE0, 0xA6, 0xA2, 0xE0, - // Bytes 4580 - 45bf 0xA6, 0xBC, 0x0D, 0x46, 0xE0, 0xA6, 0xAF, 0xE0, 0xA6, 0xBC, 0x0D, 0x46, 0xE0, 0xA8, 0x96, 0xE0, 0xA8, 0xBC, 0x0D, 0x46, 0xE0, 0xA8, 0x97, 0xE0, + // Bytes 4680 - 46bf 0xA8, 0xBC, 0x0D, 0x46, 0xE0, 0xA8, 0x9C, 0xE0, 0xA8, 0xBC, 0x0D, 0x46, 0xE0, 0xA8, 0xAB, 0xE0, 0xA8, 0xBC, 0x0D, 0x46, 0xE0, 0xA8, 0xB2, 0xE0, 0xA8, 0xBC, 0x0D, 0x46, 0xE0, 0xA8, 0xB8, 0xE0, 0xA8, 0xBC, 0x0D, 0x46, 0xE0, 0xAC, 0xA1, 0xE0, - // Bytes 45c0 - 45ff 0xAC, 0xBC, 0x0D, 0x46, 0xE0, 0xAC, 0xA2, 0xE0, 0xAC, 0xBC, 0x0D, 0x46, 0xE0, 0xBE, 0xB2, 0xE0, 0xBE, 0x80, 0xA1, 0x46, 0xE0, 0xBE, 0xB3, 0xE0, - 0xBE, 0x80, 0xA1, 0x46, 0xE3, 0x83, 0x86, 0xE3, + // Bytes 46c0 - 46ff + 0xBE, 0x80, 0xA1, 0x46, 0xE1, 0x84, 0x80, 0xE1, + 0x85, 0xA1, 0x01, 0x46, 0xE1, 0x84, 0x82, 0xE1, + 0x85, 0xA1, 0x01, 0x46, 0xE1, 0x84, 0x83, 0xE1, + 0x85, 0xA1, 0x01, 0x46, 0xE1, 0x84, 0x85, 0xE1, + 0x85, 0xA1, 0x01, 0x46, 0xE1, 0x84, 0x86, 0xE1, + 0x85, 0xA1, 0x01, 0x46, 0xE1, 0x84, 0x87, 0xE1, + 0x85, 0xA1, 0x01, 0x46, 0xE1, 0x84, 0x89, 0xE1, + 0x85, 0xA1, 0x01, 0x46, 0xE1, 0x84, 0x8B, 0xE1, + // Bytes 4700 - 473f + 0x85, 0xA1, 0x01, 0x46, 0xE1, 0x84, 0x8B, 0xE1, + 0x85, 0xAE, 0x01, 0x46, 0xE1, 0x84, 0x8C, 0xE1, + 0x85, 0xA1, 0x01, 0x46, 0xE1, 0x84, 0x8E, 0xE1, + 0x85, 0xA1, 0x01, 0x46, 0xE1, 0x84, 0x8F, 0xE1, + 0x85, 0xA1, 0x01, 0x46, 0xE1, 0x84, 0x90, 0xE1, + 0x85, 0xA1, 0x01, 0x46, 0xE1, 0x84, 0x91, 0xE1, + 0x85, 0xA1, 0x01, 0x46, 0xE1, 0x84, 0x92, 0xE1, + 0x85, 0xA1, 0x01, 0x46, 0xE3, 0x83, 0x86, 0xE3, + // Bytes 4740 - 477f 0x82, 0x99, 0x11, 0x48, 0xF0, 0x9D, 0x85, 0x97, 0xF0, 0x9D, 0x85, 0xA5, 0xB1, 0x48, 0xF0, 0x9D, 0x85, 0x98, 0xF0, 0x9D, 0x85, 0xA5, 0xB1, 0x48, 0xF0, 0x9D, 0x86, 0xB9, 0xF0, 0x9D, 0x85, 0xA5, - // Bytes 4600 - 463f 0xB1, 0x48, 0xF0, 0x9D, 0x86, 0xBA, 0xF0, 0x9D, 0x85, 0xA5, 0xB1, 0x49, 0xE0, 0xBE, 0xB2, 0xE0, 0xBD, 0xB1, 0xE0, 0xBE, 0x80, 0xA2, 0x49, 0xE0, 0xBE, 0xB3, 0xE0, 0xBD, 0xB1, 0xE0, 0xBE, 0x80, + // Bytes 4780 - 47bf 0xA2, 0x4C, 0xF0, 0x9D, 0x85, 0x98, 0xF0, 0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85, 0xAE, 0xB2, 0x4C, 0xF0, 0x9D, 0x85, 0x98, 0xF0, 0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85, 0xAF, 0xB2, 0x4C, 0xF0, 0x9D, - // Bytes 4640 - 467f 0x85, 0x98, 0xF0, 0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85, 0xB0, 0xB2, 0x4C, 0xF0, 0x9D, 0x85, 0x98, 0xF0, 0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85, 0xB1, 0xB2, 0x4C, 0xF0, 0x9D, 0x85, 0x98, 0xF0, 0x9D, + // Bytes 47c0 - 47ff 0x85, 0xA5, 0xF0, 0x9D, 0x85, 0xB2, 0xB2, 0x4C, 0xF0, 0x9D, 0x86, 0xB9, 0xF0, 0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85, 0xAE, 0xB2, 0x4C, 0xF0, 0x9D, 0x86, 0xB9, 0xF0, 0x9D, 0x85, 0xA5, 0xF0, 0x9D, - // Bytes 4680 - 46bf 0x85, 0xAF, 0xB2, 0x4C, 0xF0, 0x9D, 0x86, 0xBA, 0xF0, 0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85, 0xAE, 0xB2, 0x4C, 0xF0, 0x9D, 0x86, 0xBA, 0xF0, 0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85, 0xAF, 0xB2, 0x83, + // Bytes 4800 - 483f 0x41, 0xCC, 0x82, 0xCD, 0x83, 0x41, 0xCC, 0x86, 0xCD, 0x83, 0x41, 0xCC, 0x87, 0xCD, 0x83, 0x41, 0xCC, 0x88, 0xCD, 0x83, 0x41, 0xCC, 0x8A, 0xCD, 0x83, 0x41, 0xCC, 0xA3, 0xB9, 0x83, 0x43, 0xCC, - // Bytes 46c0 - 46ff 0xA7, 0xA9, 0x83, 0x45, 0xCC, 0x82, 0xCD, 0x83, 0x45, 0xCC, 0x84, 0xCD, 0x83, 0x45, 0xCC, 0xA3, 0xB9, 0x83, 0x45, 0xCC, 0xA7, 0xA9, 0x83, 0x49, 0xCC, 0x88, 0xCD, 0x83, 0x4C, 0xCC, 0xA3, 0xB9, + // Bytes 4840 - 487f 0x83, 0x4F, 0xCC, 0x82, 0xCD, 0x83, 0x4F, 0xCC, 0x83, 0xCD, 0x83, 0x4F, 0xCC, 0x84, 0xCD, 0x83, 0x4F, 0xCC, 0x87, 0xCD, 0x83, 0x4F, 0xCC, 0x88, 0xCD, 0x83, 0x4F, 0xCC, 0x9B, 0xB1, 0x83, 0x4F, - // Bytes 4700 - 473f 0xCC, 0xA3, 0xB9, 0x83, 0x4F, 0xCC, 0xA8, 0xA9, 0x83, 0x52, 0xCC, 0xA3, 0xB9, 0x83, 0x53, 0xCC, 0x81, 0xCD, 0x83, 0x53, 0xCC, 0x8C, 0xCD, 0x83, 0x53, 0xCC, 0xA3, 0xB9, 0x83, 0x55, 0xCC, 0x83, + // Bytes 4880 - 48bf 0xCD, 0x83, 0x55, 0xCC, 0x84, 0xCD, 0x83, 0x55, 0xCC, 0x88, 0xCD, 0x83, 0x55, 0xCC, 0x9B, 0xB1, 0x83, 0x61, 0xCC, 0x82, 0xCD, 0x83, 0x61, 0xCC, 0x86, 0xCD, 0x83, 0x61, 0xCC, 0x87, 0xCD, 0x83, - // Bytes 4740 - 477f 0x61, 0xCC, 0x88, 0xCD, 0x83, 0x61, 0xCC, 0x8A, 0xCD, 0x83, 0x61, 0xCC, 0xA3, 0xB9, 0x83, 0x63, 0xCC, 0xA7, 0xA9, 0x83, 0x65, 0xCC, 0x82, 0xCD, 0x83, 0x65, 0xCC, 0x84, 0xCD, 0x83, 0x65, 0xCC, + // Bytes 48c0 - 48ff 0xA3, 0xB9, 0x83, 0x65, 0xCC, 0xA7, 0xA9, 0x83, 0x69, 0xCC, 0x88, 0xCD, 0x83, 0x6C, 0xCC, 0xA3, 0xB9, 0x83, 0x6F, 0xCC, 0x82, 0xCD, 0x83, 0x6F, 0xCC, 0x83, 0xCD, 0x83, 0x6F, 0xCC, 0x84, 0xCD, - // Bytes 4780 - 47bf 0x83, 0x6F, 0xCC, 0x87, 0xCD, 0x83, 0x6F, 0xCC, 0x88, 0xCD, 0x83, 0x6F, 0xCC, 0x9B, 0xB1, 0x83, 0x6F, 0xCC, 0xA3, 0xB9, 0x83, 0x6F, 0xCC, 0xA8, 0xA9, 0x83, 0x72, 0xCC, 0xA3, 0xB9, 0x83, 0x73, + // Bytes 4900 - 493f 0xCC, 0x81, 0xCD, 0x83, 0x73, 0xCC, 0x8C, 0xCD, 0x83, 0x73, 0xCC, 0xA3, 0xB9, 0x83, 0x75, 0xCC, 0x83, 0xCD, 0x83, 0x75, 0xCC, 0x84, 0xCD, 0x83, 0x75, 0xCC, 0x88, 0xCD, 0x83, 0x75, 0xCC, 0x9B, - // Bytes 47c0 - 47ff 0xB1, 0x84, 0xCE, 0x91, 0xCC, 0x93, 0xCD, 0x84, 0xCE, 0x91, 0xCC, 0x94, 0xCD, 0x84, 0xCE, 0x95, 0xCC, 0x93, 0xCD, 0x84, 0xCE, 0x95, 0xCC, 0x94, 0xCD, 0x84, 0xCE, 0x97, 0xCC, 0x93, 0xCD, 0x84, + // Bytes 4940 - 497f 0xCE, 0x97, 0xCC, 0x94, 0xCD, 0x84, 0xCE, 0x99, 0xCC, 0x93, 0xCD, 0x84, 0xCE, 0x99, 0xCC, 0x94, 0xCD, 0x84, 0xCE, 0x9F, 0xCC, 0x93, 0xCD, 0x84, 0xCE, 0x9F, 0xCC, 0x94, 0xCD, 0x84, 0xCE, 0xA5, - // Bytes 4800 - 483f 0xCC, 0x94, 0xCD, 0x84, 0xCE, 0xA9, 0xCC, 0x93, 0xCD, 0x84, 0xCE, 0xA9, 0xCC, 0x94, 0xCD, 0x84, 0xCE, 0xB1, 0xCC, 0x80, 0xCD, 0x84, 0xCE, 0xB1, 0xCC, 0x81, 0xCD, 0x84, 0xCE, 0xB1, 0xCC, 0x93, + // Bytes 4980 - 49bf 0xCD, 0x84, 0xCE, 0xB1, 0xCC, 0x94, 0xCD, 0x84, 0xCE, 0xB1, 0xCD, 0x82, 0xCD, 0x84, 0xCE, 0xB5, 0xCC, 0x93, 0xCD, 0x84, 0xCE, 0xB5, 0xCC, 0x94, 0xCD, 0x84, 0xCE, 0xB7, 0xCC, 0x80, 0xCD, 0x84, - // Bytes 4840 - 487f 0xCE, 0xB7, 0xCC, 0x81, 0xCD, 0x84, 0xCE, 0xB7, 0xCC, 0x93, 0xCD, 0x84, 0xCE, 0xB7, 0xCC, 0x94, 0xCD, 0x84, 0xCE, 0xB7, 0xCD, 0x82, 0xCD, 0x84, 0xCE, 0xB9, 0xCC, 0x88, 0xCD, 0x84, 0xCE, 0xB9, + // Bytes 49c0 - 49ff 0xCC, 0x93, 0xCD, 0x84, 0xCE, 0xB9, 0xCC, 0x94, 0xCD, 0x84, 0xCE, 0xBF, 0xCC, 0x93, 0xCD, 0x84, 0xCE, 0xBF, 0xCC, 0x94, 0xCD, 0x84, 0xCF, 0x85, 0xCC, 0x88, 0xCD, 0x84, 0xCF, 0x85, 0xCC, 0x93, - // Bytes 4880 - 48bf 0xCD, 0x84, 0xCF, 0x85, 0xCC, 0x94, 0xCD, 0x84, 0xCF, 0x89, 0xCC, 0x80, 0xCD, 0x84, 0xCF, 0x89, 0xCC, 0x81, 0xCD, 0x84, 0xCF, 0x89, 0xCC, 0x93, 0xCD, 0x84, 0xCF, 0x89, 0xCC, 0x94, 0xCD, 0x84, + // Bytes 4a00 - 4a3f 0xCF, 0x89, 0xCD, 0x82, 0xCD, 0x86, 0xCE, 0x91, 0xCC, 0x93, 0xCC, 0x80, 0xCE, 0x86, 0xCE, 0x91, 0xCC, 0x93, 0xCC, 0x81, 0xCE, 0x86, 0xCE, 0x91, 0xCC, 0x93, 0xCD, 0x82, 0xCE, 0x86, 0xCE, 0x91, - // Bytes 48c0 - 48ff 0xCC, 0x94, 0xCC, 0x80, 0xCE, 0x86, 0xCE, 0x91, 0xCC, 0x94, 0xCC, 0x81, 0xCE, 0x86, 0xCE, 0x91, 0xCC, 0x94, 0xCD, 0x82, 0xCE, 0x86, 0xCE, 0x97, 0xCC, 0x93, 0xCC, 0x80, 0xCE, 0x86, 0xCE, 0x97, + // Bytes 4a40 - 4a7f 0xCC, 0x93, 0xCC, 0x81, 0xCE, 0x86, 0xCE, 0x97, 0xCC, 0x93, 0xCD, 0x82, 0xCE, 0x86, 0xCE, 0x97, 0xCC, 0x94, 0xCC, 0x80, 0xCE, 0x86, 0xCE, 0x97, 0xCC, 0x94, 0xCC, 0x81, 0xCE, 0x86, 0xCE, 0x97, - // Bytes 4900 - 493f 0xCC, 0x94, 0xCD, 0x82, 0xCE, 0x86, 0xCE, 0xA9, 0xCC, 0x93, 0xCC, 0x80, 0xCE, 0x86, 0xCE, 0xA9, 0xCC, 0x93, 0xCC, 0x81, 0xCE, 0x86, 0xCE, 0xA9, 0xCC, 0x93, 0xCD, 0x82, 0xCE, 0x86, 0xCE, 0xA9, + // Bytes 4a80 - 4abf 0xCC, 0x94, 0xCC, 0x80, 0xCE, 0x86, 0xCE, 0xA9, 0xCC, 0x94, 0xCC, 0x81, 0xCE, 0x86, 0xCE, 0xA9, 0xCC, 0x94, 0xCD, 0x82, 0xCE, 0x86, 0xCE, 0xB1, 0xCC, 0x93, 0xCC, 0x80, 0xCE, 0x86, 0xCE, 0xB1, - // Bytes 4940 - 497f 0xCC, 0x93, 0xCC, 0x81, 0xCE, 0x86, 0xCE, 0xB1, 0xCC, 0x93, 0xCD, 0x82, 0xCE, 0x86, 0xCE, 0xB1, 0xCC, 0x94, 0xCC, 0x80, 0xCE, 0x86, 0xCE, 0xB1, 0xCC, 0x94, 0xCC, 0x81, 0xCE, 0x86, 0xCE, 0xB1, + // Bytes 4ac0 - 4aff 0xCC, 0x94, 0xCD, 0x82, 0xCE, 0x86, 0xCE, 0xB7, 0xCC, 0x93, 0xCC, 0x80, 0xCE, 0x86, 0xCE, 0xB7, 0xCC, 0x93, 0xCC, 0x81, 0xCE, 0x86, 0xCE, 0xB7, 0xCC, 0x93, 0xCD, 0x82, 0xCE, 0x86, 0xCE, 0xB7, - // Bytes 4980 - 49bf 0xCC, 0x94, 0xCC, 0x80, 0xCE, 0x86, 0xCE, 0xB7, 0xCC, 0x94, 0xCC, 0x81, 0xCE, 0x86, 0xCE, 0xB7, 0xCC, 0x94, 0xCD, 0x82, 0xCE, 0x86, 0xCF, 0x89, 0xCC, 0x93, 0xCC, 0x80, 0xCE, 0x86, 0xCF, 0x89, + // Bytes 4b00 - 4b3f 0xCC, 0x93, 0xCC, 0x81, 0xCE, 0x86, 0xCF, 0x89, 0xCC, 0x93, 0xCD, 0x82, 0xCE, 0x86, 0xCF, 0x89, 0xCC, 0x94, 0xCC, 0x80, 0xCE, 0x86, 0xCF, 0x89, 0xCC, 0x94, 0xCC, 0x81, 0xCE, 0x86, 0xCF, 0x89, - // Bytes 49c0 - 49ff - 0xCC, 0x94, 0xCD, 0x82, 0xCE, 0x42, 0xCC, 0x80, - 0xCD, 0x33, 0x42, 0xCC, 0x81, 0xCD, 0x33, 0x42, - 0xCC, 0x93, 0xCD, 0x33, 0x43, 0xE1, 0x85, 0xA1, - 0x01, 0x00, 0x43, 0xE1, 0x85, 0xA2, 0x01, 0x00, - 0x43, 0xE1, 0x85, 0xA3, 0x01, 0x00, 0x43, 0xE1, - 0x85, 0xA4, 0x01, 0x00, 0x43, 0xE1, 0x85, 0xA5, - 0x01, 0x00, 0x43, 0xE1, 0x85, 0xA6, 0x01, 0x00, - 0x43, 0xE1, 0x85, 0xA7, 0x01, 0x00, 0x43, 0xE1, - // Bytes 4a00 - 4a3f - 0x85, 0xA8, 0x01, 0x00, 0x43, 0xE1, 0x85, 0xA9, - 0x01, 0x00, 0x43, 0xE1, 0x85, 0xAA, 0x01, 0x00, - 0x43, 0xE1, 0x85, 0xAB, 0x01, 0x00, 0x43, 0xE1, - 0x85, 0xAC, 0x01, 0x00, 0x43, 0xE1, 0x85, 0xAD, - 0x01, 0x00, 0x43, 0xE1, 0x85, 0xAE, 0x01, 0x00, - 0x43, 0xE1, 0x85, 0xAF, 0x01, 0x00, 0x43, 0xE1, - 0x85, 0xB0, 0x01, 0x00, 0x43, 0xE1, 0x85, 0xB1, - 0x01, 0x00, 0x43, 0xE1, 0x85, 0xB2, 0x01, 0x00, - // Bytes 4a40 - 4a7f - 0x43, 0xE1, 0x85, 0xB3, 0x01, 0x00, 0x43, 0xE1, - 0x85, 0xB4, 0x01, 0x00, 0x43, 0xE1, 0x85, 0xB5, - 0x01, 0x00, 0x43, 0xE1, 0x86, 0xAA, 0x01, 0x00, - 0x43, 0xE1, 0x86, 0xAC, 0x01, 0x00, 0x43, 0xE1, - 0x86, 0xAD, 0x01, 0x00, 0x43, 0xE1, 0x86, 0xB0, - 0x01, 0x00, 0x43, 0xE1, 0x86, 0xB1, 0x01, 0x00, - 0x43, 0xE1, 0x86, 0xB2, 0x01, 0x00, 0x43, 0xE1, - 0x86, 0xB3, 0x01, 0x00, 0x43, 0xE1, 0x86, 0xB4, - // Bytes 4a80 - 4abf - 0x01, 0x00, 0x43, 0xE1, 0x86, 0xB5, 0x01, 0x00, - 0x44, 0xCC, 0x88, 0xCC, 0x81, 0xCE, 0x33, 0x43, - 0xE3, 0x82, 0x99, 0x11, 0x04, 0x43, 0xE3, 0x82, - 0x9A, 0x11, 0x04, 0x46, 0xE0, 0xBD, 0xB1, 0xE0, - 0xBD, 0xB2, 0xA2, 0x27, 0x46, 0xE0, 0xBD, 0xB1, - 0xE0, 0xBD, 0xB4, 0xA6, 0x27, 0x46, 0xE0, 0xBD, - 0xB1, 0xE0, 0xBE, 0x80, 0xA2, 0x27, 0x00, 0x01, + 0xCC, 0x94, 0xCD, 0x82, 0xCE, 0x86, 0xE0, 0xB3, + 0x86, 0xE0, 0xB3, 0x82, 0x01, 0x86, 0xE0, 0xB7, + 0x99, 0xE0, 0xB7, 0x8F, 0x01, 0x88, 0xF0, 0x96, + 0xB5, 0xA3, 0xF0, 0x96, 0xB5, 0xA7, 0x01, 0x42, + // Bytes 4b40 - 4b7f + 0xCC, 0x80, 0xCD, 0x33, 0x42, 0xCC, 0x81, 0xCD, + 0x33, 0x42, 0xCC, 0x93, 0xCD, 0x33, 0x43, 0xE1, + 0x85, 0xA1, 0x01, 0x00, 0x43, 0xE1, 0x85, 0xA2, + 0x01, 0x00, 0x43, 0xE1, 0x85, 0xA3, 0x01, 0x00, + 0x43, 0xE1, 0x85, 0xA4, 0x01, 0x00, 0x43, 0xE1, + 0x85, 0xA5, 0x01, 0x00, 0x43, 0xE1, 0x85, 0xA6, + 0x01, 0x00, 0x43, 0xE1, 0x85, 0xA7, 0x01, 0x00, + 0x43, 0xE1, 0x85, 0xA8, 0x01, 0x00, 0x43, 0xE1, + // Bytes 4b80 - 4bbf + 0x85, 0xA9, 0x01, 0x00, 0x43, 0xE1, 0x85, 0xAA, + 0x01, 0x00, 0x43, 0xE1, 0x85, 0xAB, 0x01, 0x00, + 0x43, 0xE1, 0x85, 0xAC, 0x01, 0x00, 0x43, 0xE1, + 0x85, 0xAD, 0x01, 0x00, 0x43, 0xE1, 0x85, 0xAE, + 0x01, 0x00, 0x43, 0xE1, 0x85, 0xAF, 0x01, 0x00, + 0x43, 0xE1, 0x85, 0xB0, 0x01, 0x00, 0x43, 0xE1, + 0x85, 0xB1, 0x01, 0x00, 0x43, 0xE1, 0x85, 0xB2, + 0x01, 0x00, 0x43, 0xE1, 0x85, 0xB3, 0x01, 0x00, + // Bytes 4bc0 - 4bff + 0x43, 0xE1, 0x85, 0xB4, 0x01, 0x00, 0x43, 0xE1, + 0x85, 0xB5, 0x01, 0x00, 0x43, 0xE1, 0x86, 0xAA, + 0x01, 0x00, 0x43, 0xE1, 0x86, 0xAC, 0x01, 0x00, + 0x43, 0xE1, 0x86, 0xAD, 0x01, 0x00, 0x43, 0xE1, + 0x86, 0xB0, 0x01, 0x00, 0x43, 0xE1, 0x86, 0xB1, + 0x01, 0x00, 0x43, 0xE1, 0x86, 0xB2, 0x01, 0x00, + 0x43, 0xE1, 0x86, 0xB3, 0x01, 0x00, 0x43, 0xE1, + 0x86, 0xB4, 0x01, 0x00, 0x43, 0xE1, 0x86, 0xB5, + // Bytes 4c00 - 4c3f + 0x01, 0x00, 0x44, 0xCC, 0x88, 0xCC, 0x81, 0xCE, + 0x33, 0x68, 0xF0, 0x91, 0x8F, 0x82, 0xF0, 0x91, + 0x8E, 0xB8, 0x02, 0x00, 0x68, 0xF0, 0x91, 0x8F, + 0x82, 0xF0, 0x91, 0x8F, 0x82, 0x02, 0x00, 0x68, + 0xF0, 0x91, 0x8F, 0x82, 0xF0, 0x91, 0x8F, 0x89, + 0x02, 0x00, 0x68, 0xF0, 0x96, 0x84, 0x9E, 0xF0, + 0x96, 0x84, 0x9F, 0x02, 0x00, 0x68, 0xF0, 0x96, + 0x84, 0x9E, 0xF0, 0x96, 0x84, 0xA0, 0x02, 0x00, + // Bytes 4c40 - 4c7f + 0x68, 0xF0, 0x96, 0x84, 0xA9, 0xF0, 0x96, 0x84, + 0x9F, 0x02, 0x00, 0x68, 0xF0, 0x96, 0xB5, 0xA7, + 0xF0, 0x96, 0xB5, 0xA7, 0x02, 0x00, 0x6C, 0xF0, + 0x96, 0x84, 0x9E, 0xF0, 0x96, 0x84, 0x9E, 0xF0, + 0x96, 0x84, 0x9F, 0x03, 0x00, 0x6C, 0xF0, 0x96, + 0x84, 0x9E, 0xF0, 0x96, 0x84, 0x9E, 0xF0, 0x96, + 0x84, 0xA0, 0x03, 0x00, 0x6C, 0xF0, 0x96, 0x84, + 0x9E, 0xF0, 0x96, 0x84, 0xA9, 0xF0, 0x96, 0x84, + // Bytes 4c80 - 4cbf + 0x9F, 0x03, 0x00, 0xE8, 0xF0, 0x96, 0x84, 0x9E, + 0xF0, 0x96, 0x84, 0x9E, 0x02, 0x00, 0xE8, 0xF0, + 0x96, 0x84, 0x9E, 0xF0, 0x96, 0x84, 0xA9, 0x02, + 0x00, 0x43, 0xE3, 0x82, 0x99, 0x11, 0x04, 0x43, + 0xE3, 0x82, 0x9A, 0x11, 0x04, 0x46, 0xE0, 0xBD, + 0xB1, 0xE0, 0xBD, 0xB2, 0xA2, 0x27, 0x46, 0xE0, + 0xBD, 0xB1, 0xE0, 0xBD, 0xB4, 0xA6, 0x27, 0x46, + 0xE0, 0xBD, 0xB1, 0xE0, 0xBE, 0x80, 0xA2, 0x27, + // Bytes 4cc0 - 4cff + 0x00, 0x01, } // lookup returns the trie value for the first UTF-8 encoding in s and @@ -2902,7 +2977,7 @@ func (t *nfcTrie) lookupStringUnsafe(s string) uint16 { return 0 } -// nfcTrie. Total size: 10680 bytes (10.43 KiB). Checksum: a555db76d4becdd2. +// nfcTrie. Total size: 11042 bytes (10.78 KiB). Checksum: cd75f956cd2316a9. type nfcTrie struct{} func newNfcTrie(i int) *nfcTrie { @@ -2938,63 +3013,63 @@ var nfcValues = [3072]uint16{ 0x76: 0xa000, 0x77: 0xa000, 0x78: 0xa000, 0x79: 0xa000, 0x7a: 0xa000, // Block 0x2, offset 0x80 // Block 0x3, offset 0xc0 - 0xc0: 0x2f86, 0xc1: 0x2f8b, 0xc2: 0x469f, 0xc3: 0x2f90, 0xc4: 0x46ae, 0xc5: 0x46b3, - 0xc6: 0xa000, 0xc7: 0x46bd, 0xc8: 0x2ff9, 0xc9: 0x2ffe, 0xca: 0x46c2, 0xcb: 0x3012, - 0xcc: 0x3085, 0xcd: 0x308a, 0xce: 0x308f, 0xcf: 0x46d6, 0xd1: 0x311b, - 0xd2: 0x313e, 0xd3: 0x3143, 0xd4: 0x46e0, 0xd5: 0x46e5, 0xd6: 0x46f4, - 0xd8: 0xa000, 0xd9: 0x31ca, 0xda: 0x31cf, 0xdb: 0x31d4, 0xdc: 0x4726, 0xdd: 0x324c, - 0xe0: 0x3292, 0xe1: 0x3297, 0xe2: 0x4730, 0xe3: 0x329c, - 0xe4: 0x473f, 0xe5: 0x4744, 0xe6: 0xa000, 0xe7: 0x474e, 0xe8: 0x3305, 0xe9: 0x330a, - 0xea: 0x4753, 0xeb: 0x331e, 0xec: 0x3396, 0xed: 0x339b, 0xee: 0x33a0, 0xef: 0x4767, - 0xf1: 0x342c, 0xf2: 0x344f, 0xf3: 0x3454, 0xf4: 0x4771, 0xf5: 0x4776, - 0xf6: 0x4785, 0xf8: 0xa000, 0xf9: 0x34e0, 0xfa: 0x34e5, 0xfb: 0x34ea, - 0xfc: 0x47b7, 0xfd: 0x3567, 0xff: 0x3580, + 0xc0: 0x2ece, 0xc1: 0x2ed3, 0xc2: 0x47ff, 0xc3: 0x2ed8, 0xc4: 0x480e, 0xc5: 0x4813, + 0xc6: 0xa000, 0xc7: 0x481d, 0xc8: 0x2f41, 0xc9: 0x2f46, 0xca: 0x4822, 0xcb: 0x2f5a, + 0xcc: 0x2fcd, 0xcd: 0x2fd2, 0xce: 0x2fd7, 0xcf: 0x4836, 0xd1: 0x3063, + 0xd2: 0x3086, 0xd3: 0x308b, 0xd4: 0x4840, 0xd5: 0x4845, 0xd6: 0x4854, + 0xd8: 0xa000, 0xd9: 0x3112, 0xda: 0x3117, 0xdb: 0x311c, 0xdc: 0x4886, 0xdd: 0x3194, + 0xe0: 0x31da, 0xe1: 0x31df, 0xe2: 0x4890, 0xe3: 0x31e4, + 0xe4: 0x489f, 0xe5: 0x48a4, 0xe6: 0xa000, 0xe7: 0x48ae, 0xe8: 0x324d, 0xe9: 0x3252, + 0xea: 0x48b3, 0xeb: 0x3266, 0xec: 0x32de, 0xed: 0x32e3, 0xee: 0x32e8, 0xef: 0x48c7, + 0xf1: 0x3374, 0xf2: 0x3397, 0xf3: 0x339c, 0xf4: 0x48d1, 0xf5: 0x48d6, + 0xf6: 0x48e5, 0xf8: 0xa000, 0xf9: 0x3428, 0xfa: 0x342d, 0xfb: 0x3432, + 0xfc: 0x4917, 0xfd: 0x34af, 0xff: 0x34c8, // Block 0x4, offset 0x100 - 0x100: 0x2f95, 0x101: 0x32a1, 0x102: 0x46a4, 0x103: 0x4735, 0x104: 0x2fb3, 0x105: 0x32bf, - 0x106: 0x2fc7, 0x107: 0x32d3, 0x108: 0x2fcc, 0x109: 0x32d8, 0x10a: 0x2fd1, 0x10b: 0x32dd, - 0x10c: 0x2fd6, 0x10d: 0x32e2, 0x10e: 0x2fe0, 0x10f: 0x32ec, - 0x112: 0x46c7, 0x113: 0x4758, 0x114: 0x3008, 0x115: 0x3314, 0x116: 0x300d, 0x117: 0x3319, - 0x118: 0x302b, 0x119: 0x3337, 0x11a: 0x301c, 0x11b: 0x3328, 0x11c: 0x3044, 0x11d: 0x3350, - 0x11e: 0x304e, 0x11f: 0x335a, 0x120: 0x3053, 0x121: 0x335f, 0x122: 0x305d, 0x123: 0x3369, - 0x124: 0x3062, 0x125: 0x336e, 0x128: 0x3094, 0x129: 0x33a5, - 0x12a: 0x3099, 0x12b: 0x33aa, 0x12c: 0x309e, 0x12d: 0x33af, 0x12e: 0x30c1, 0x12f: 0x33cd, - 0x130: 0x30a3, 0x134: 0x30cb, 0x135: 0x33d7, - 0x136: 0x30df, 0x137: 0x33f0, 0x139: 0x30e9, 0x13a: 0x33fa, 0x13b: 0x30f3, - 0x13c: 0x3404, 0x13d: 0x30ee, 0x13e: 0x33ff, + 0x100: 0x2edd, 0x101: 0x31e9, 0x102: 0x4804, 0x103: 0x4895, 0x104: 0x2efb, 0x105: 0x3207, + 0x106: 0x2f0f, 0x107: 0x321b, 0x108: 0x2f14, 0x109: 0x3220, 0x10a: 0x2f19, 0x10b: 0x3225, + 0x10c: 0x2f1e, 0x10d: 0x322a, 0x10e: 0x2f28, 0x10f: 0x3234, + 0x112: 0x4827, 0x113: 0x48b8, 0x114: 0x2f50, 0x115: 0x325c, 0x116: 0x2f55, 0x117: 0x3261, + 0x118: 0x2f73, 0x119: 0x327f, 0x11a: 0x2f64, 0x11b: 0x3270, 0x11c: 0x2f8c, 0x11d: 0x3298, + 0x11e: 0x2f96, 0x11f: 0x32a2, 0x120: 0x2f9b, 0x121: 0x32a7, 0x122: 0x2fa5, 0x123: 0x32b1, + 0x124: 0x2faa, 0x125: 0x32b6, 0x128: 0x2fdc, 0x129: 0x32ed, + 0x12a: 0x2fe1, 0x12b: 0x32f2, 0x12c: 0x2fe6, 0x12d: 0x32f7, 0x12e: 0x3009, 0x12f: 0x3315, + 0x130: 0x2feb, 0x134: 0x3013, 0x135: 0x331f, + 0x136: 0x3027, 0x137: 0x3338, 0x139: 0x3031, 0x13a: 0x3342, 0x13b: 0x303b, + 0x13c: 0x334c, 0x13d: 0x3036, 0x13e: 0x3347, // Block 0x5, offset 0x140 - 0x143: 0x3116, 0x144: 0x3427, 0x145: 0x312f, - 0x146: 0x3440, 0x147: 0x3125, 0x148: 0x3436, - 0x14c: 0x46ea, 0x14d: 0x477b, 0x14e: 0x3148, 0x14f: 0x3459, 0x150: 0x3152, 0x151: 0x3463, - 0x154: 0x3170, 0x155: 0x3481, 0x156: 0x3189, 0x157: 0x349a, - 0x158: 0x317a, 0x159: 0x348b, 0x15a: 0x470d, 0x15b: 0x479e, 0x15c: 0x3193, 0x15d: 0x34a4, - 0x15e: 0x31a2, 0x15f: 0x34b3, 0x160: 0x4712, 0x161: 0x47a3, 0x162: 0x31bb, 0x163: 0x34d1, - 0x164: 0x31ac, 0x165: 0x34c2, 0x168: 0x471c, 0x169: 0x47ad, - 0x16a: 0x4721, 0x16b: 0x47b2, 0x16c: 0x31d9, 0x16d: 0x34ef, 0x16e: 0x31e3, 0x16f: 0x34f9, - 0x170: 0x31e8, 0x171: 0x34fe, 0x172: 0x3206, 0x173: 0x351c, 0x174: 0x3229, 0x175: 0x353f, - 0x176: 0x3251, 0x177: 0x356c, 0x178: 0x3265, 0x179: 0x3274, 0x17a: 0x3594, 0x17b: 0x327e, - 0x17c: 0x359e, 0x17d: 0x3283, 0x17e: 0x35a3, 0x17f: 0xa000, + 0x143: 0x305e, 0x144: 0x336f, 0x145: 0x3077, + 0x146: 0x3388, 0x147: 0x306d, 0x148: 0x337e, + 0x14c: 0x484a, 0x14d: 0x48db, 0x14e: 0x3090, 0x14f: 0x33a1, 0x150: 0x309a, 0x151: 0x33ab, + 0x154: 0x30b8, 0x155: 0x33c9, 0x156: 0x30d1, 0x157: 0x33e2, + 0x158: 0x30c2, 0x159: 0x33d3, 0x15a: 0x486d, 0x15b: 0x48fe, 0x15c: 0x30db, 0x15d: 0x33ec, + 0x15e: 0x30ea, 0x15f: 0x33fb, 0x160: 0x4872, 0x161: 0x4903, 0x162: 0x3103, 0x163: 0x3419, + 0x164: 0x30f4, 0x165: 0x340a, 0x168: 0x487c, 0x169: 0x490d, + 0x16a: 0x4881, 0x16b: 0x4912, 0x16c: 0x3121, 0x16d: 0x3437, 0x16e: 0x312b, 0x16f: 0x3441, + 0x170: 0x3130, 0x171: 0x3446, 0x172: 0x314e, 0x173: 0x3464, 0x174: 0x3171, 0x175: 0x3487, + 0x176: 0x3199, 0x177: 0x34b4, 0x178: 0x31ad, 0x179: 0x31bc, 0x17a: 0x34dc, 0x17b: 0x31c6, + 0x17c: 0x34e6, 0x17d: 0x31cb, 0x17e: 0x34eb, 0x17f: 0xa000, // Block 0x6, offset 0x180 0x184: 0x8100, 0x185: 0x8100, 0x186: 0x8100, - 0x18d: 0x2f9f, 0x18e: 0x32ab, 0x18f: 0x30ad, 0x190: 0x33b9, 0x191: 0x3157, - 0x192: 0x3468, 0x193: 0x31ed, 0x194: 0x3503, 0x195: 0x39e6, 0x196: 0x3b75, 0x197: 0x39df, - 0x198: 0x3b6e, 0x199: 0x39ed, 0x19a: 0x3b7c, 0x19b: 0x39d8, 0x19c: 0x3b67, - 0x19e: 0x38c7, 0x19f: 0x3a56, 0x1a0: 0x38c0, 0x1a1: 0x3a4f, 0x1a2: 0x35ca, 0x1a3: 0x35dc, - 0x1a6: 0x3058, 0x1a7: 0x3364, 0x1a8: 0x30d5, 0x1a9: 0x33e6, - 0x1aa: 0x4703, 0x1ab: 0x4794, 0x1ac: 0x39a7, 0x1ad: 0x3b36, 0x1ae: 0x35ee, 0x1af: 0x35f4, - 0x1b0: 0x33dc, 0x1b4: 0x303f, 0x1b5: 0x334b, - 0x1b8: 0x3111, 0x1b9: 0x3422, 0x1ba: 0x38ce, 0x1bb: 0x3a5d, - 0x1bc: 0x35c4, 0x1bd: 0x35d6, 0x1be: 0x35d0, 0x1bf: 0x35e2, + 0x18d: 0x2ee7, 0x18e: 0x31f3, 0x18f: 0x2ff5, 0x190: 0x3301, 0x191: 0x309f, + 0x192: 0x33b0, 0x193: 0x3135, 0x194: 0x344b, 0x195: 0x392e, 0x196: 0x3abd, 0x197: 0x3927, + 0x198: 0x3ab6, 0x199: 0x3935, 0x19a: 0x3ac4, 0x19b: 0x3920, 0x19c: 0x3aaf, + 0x19e: 0x380f, 0x19f: 0x399e, 0x1a0: 0x3808, 0x1a1: 0x3997, 0x1a2: 0x3512, 0x1a3: 0x3524, + 0x1a6: 0x2fa0, 0x1a7: 0x32ac, 0x1a8: 0x301d, 0x1a9: 0x332e, + 0x1aa: 0x4863, 0x1ab: 0x48f4, 0x1ac: 0x38ef, 0x1ad: 0x3a7e, 0x1ae: 0x3536, 0x1af: 0x353c, + 0x1b0: 0x3324, 0x1b4: 0x2f87, 0x1b5: 0x3293, + 0x1b8: 0x3059, 0x1b9: 0x336a, 0x1ba: 0x3816, 0x1bb: 0x39a5, + 0x1bc: 0x350c, 0x1bd: 0x351e, 0x1be: 0x3518, 0x1bf: 0x352a, // Block 0x7, offset 0x1c0 - 0x1c0: 0x2fa4, 0x1c1: 0x32b0, 0x1c2: 0x2fa9, 0x1c3: 0x32b5, 0x1c4: 0x3021, 0x1c5: 0x332d, - 0x1c6: 0x3026, 0x1c7: 0x3332, 0x1c8: 0x30b2, 0x1c9: 0x33be, 0x1ca: 0x30b7, 0x1cb: 0x33c3, - 0x1cc: 0x315c, 0x1cd: 0x346d, 0x1ce: 0x3161, 0x1cf: 0x3472, 0x1d0: 0x317f, 0x1d1: 0x3490, - 0x1d2: 0x3184, 0x1d3: 0x3495, 0x1d4: 0x31f2, 0x1d5: 0x3508, 0x1d6: 0x31f7, 0x1d7: 0x350d, - 0x1d8: 0x319d, 0x1d9: 0x34ae, 0x1da: 0x31b6, 0x1db: 0x34cc, - 0x1de: 0x3071, 0x1df: 0x337d, - 0x1e6: 0x46a9, 0x1e7: 0x473a, 0x1e8: 0x46d1, 0x1e9: 0x4762, - 0x1ea: 0x3976, 0x1eb: 0x3b05, 0x1ec: 0x3953, 0x1ed: 0x3ae2, 0x1ee: 0x46ef, 0x1ef: 0x4780, - 0x1f0: 0x396f, 0x1f1: 0x3afe, 0x1f2: 0x325b, 0x1f3: 0x3576, + 0x1c0: 0x2eec, 0x1c1: 0x31f8, 0x1c2: 0x2ef1, 0x1c3: 0x31fd, 0x1c4: 0x2f69, 0x1c5: 0x3275, + 0x1c6: 0x2f6e, 0x1c7: 0x327a, 0x1c8: 0x2ffa, 0x1c9: 0x3306, 0x1ca: 0x2fff, 0x1cb: 0x330b, + 0x1cc: 0x30a4, 0x1cd: 0x33b5, 0x1ce: 0x30a9, 0x1cf: 0x33ba, 0x1d0: 0x30c7, 0x1d1: 0x33d8, + 0x1d2: 0x30cc, 0x1d3: 0x33dd, 0x1d4: 0x313a, 0x1d5: 0x3450, 0x1d6: 0x313f, 0x1d7: 0x3455, + 0x1d8: 0x30e5, 0x1d9: 0x33f6, 0x1da: 0x30fe, 0x1db: 0x3414, + 0x1de: 0x2fb9, 0x1df: 0x32c5, + 0x1e6: 0x4809, 0x1e7: 0x489a, 0x1e8: 0x4831, 0x1e9: 0x48c2, + 0x1ea: 0x38be, 0x1eb: 0x3a4d, 0x1ec: 0x389b, 0x1ed: 0x3a2a, 0x1ee: 0x484f, 0x1ef: 0x48e0, + 0x1f0: 0x38b7, 0x1f1: 0x3a46, 0x1f2: 0x31a3, 0x1f3: 0x34be, // Block 0x8, offset 0x200 0x200: 0x9933, 0x201: 0x9933, 0x202: 0x9933, 0x203: 0x9933, 0x204: 0x9933, 0x205: 0x8133, 0x206: 0x9933, 0x207: 0x9933, 0x208: 0x9933, 0x209: 0x9933, 0x20a: 0x9933, 0x20b: 0x9933, @@ -3008,7 +3083,7 @@ var nfcValues = [3072]uint16{ 0x236: 0x8101, 0x237: 0x8101, 0x238: 0x9901, 0x239: 0x812e, 0x23a: 0x812e, 0x23b: 0x812e, 0x23c: 0x812e, 0x23d: 0x8133, 0x23e: 0x8133, 0x23f: 0x8133, // Block 0x9, offset 0x240 - 0x240: 0x49c5, 0x241: 0x49ca, 0x242: 0x9933, 0x243: 0x49cf, 0x244: 0x4a88, 0x245: 0x9937, + 0x240: 0x4b3f, 0x241: 0x4b44, 0x242: 0x9933, 0x243: 0x4b49, 0x244: 0x4c02, 0x245: 0x9937, 0x246: 0x8133, 0x247: 0x812e, 0x248: 0x812e, 0x249: 0x812e, 0x24a: 0x8133, 0x24b: 0x8133, 0x24c: 0x8133, 0x24d: 0x812e, 0x24e: 0x812e, 0x250: 0x8133, 0x251: 0x8133, 0x252: 0x8133, 0x253: 0x812e, 0x254: 0x812e, 0x255: 0x812e, 0x256: 0x812e, 0x257: 0x8133, @@ -3016,43 +3091,43 @@ var nfcValues = [3072]uint16{ 0x25e: 0x8136, 0x25f: 0x8135, 0x260: 0x8136, 0x261: 0x8136, 0x262: 0x8135, 0x263: 0x8133, 0x264: 0x8133, 0x265: 0x8133, 0x266: 0x8133, 0x267: 0x8133, 0x268: 0x8133, 0x269: 0x8133, 0x26a: 0x8133, 0x26b: 0x8133, 0x26c: 0x8133, 0x26d: 0x8133, 0x26e: 0x8133, 0x26f: 0x8133, - 0x274: 0x0173, + 0x274: 0x01ee, 0x27a: 0x8100, 0x27e: 0x0037, // Block 0xa, offset 0x280 - 0x284: 0x8100, 0x285: 0x35b8, - 0x286: 0x3600, 0x287: 0x00ce, 0x288: 0x361e, 0x289: 0x362a, 0x28a: 0x363c, - 0x28c: 0x365a, 0x28e: 0x366c, 0x28f: 0x368a, 0x290: 0x3e1f, 0x291: 0xa000, + 0x284: 0x8100, 0x285: 0x3500, + 0x286: 0x3548, 0x287: 0x00ce, 0x288: 0x3566, 0x289: 0x3572, 0x28a: 0x3584, + 0x28c: 0x35a2, 0x28e: 0x35b4, 0x28f: 0x35d2, 0x290: 0x3d67, 0x291: 0xa000, 0x295: 0xa000, 0x297: 0xa000, 0x299: 0xa000, 0x29f: 0xa000, 0x2a1: 0xa000, 0x2a5: 0xa000, 0x2a9: 0xa000, - 0x2aa: 0x364e, 0x2ab: 0x367e, 0x2ac: 0x4815, 0x2ad: 0x36ae, 0x2ae: 0x483f, 0x2af: 0x36c0, - 0x2b0: 0x3e87, 0x2b1: 0xa000, 0x2b5: 0xa000, + 0x2aa: 0x3596, 0x2ab: 0x35c6, 0x2ac: 0x4975, 0x2ad: 0x35f6, 0x2ae: 0x499f, 0x2af: 0x3608, + 0x2b0: 0x3dcf, 0x2b1: 0xa000, 0x2b5: 0xa000, 0x2b7: 0xa000, 0x2b9: 0xa000, 0x2bf: 0xa000, // Block 0xb, offset 0x2c0 - 0x2c0: 0x3738, 0x2c1: 0x3744, 0x2c3: 0x3732, - 0x2c6: 0xa000, 0x2c7: 0x3720, - 0x2cc: 0x3774, 0x2cd: 0x375c, 0x2ce: 0x3786, 0x2d0: 0xa000, + 0x2c0: 0x3680, 0x2c1: 0x368c, 0x2c3: 0x367a, + 0x2c6: 0xa000, 0x2c7: 0x3668, + 0x2cc: 0x36bc, 0x2cd: 0x36a4, 0x2ce: 0x36ce, 0x2d0: 0xa000, 0x2d3: 0xa000, 0x2d5: 0xa000, 0x2d6: 0xa000, 0x2d7: 0xa000, - 0x2d8: 0xa000, 0x2d9: 0x3768, 0x2da: 0xa000, + 0x2d8: 0xa000, 0x2d9: 0x36b0, 0x2da: 0xa000, 0x2de: 0xa000, 0x2e3: 0xa000, 0x2e7: 0xa000, 0x2eb: 0xa000, 0x2ed: 0xa000, 0x2f0: 0xa000, 0x2f3: 0xa000, 0x2f5: 0xa000, - 0x2f6: 0xa000, 0x2f7: 0xa000, 0x2f8: 0xa000, 0x2f9: 0x37ec, 0x2fa: 0xa000, + 0x2f6: 0xa000, 0x2f7: 0xa000, 0x2f8: 0xa000, 0x2f9: 0x3734, 0x2fa: 0xa000, 0x2fe: 0xa000, // Block 0xc, offset 0x300 - 0x301: 0x374a, 0x302: 0x37ce, - 0x310: 0x3726, 0x311: 0x37aa, - 0x312: 0x372c, 0x313: 0x37b0, 0x316: 0x373e, 0x317: 0x37c2, - 0x318: 0xa000, 0x319: 0xa000, 0x31a: 0x3840, 0x31b: 0x3846, 0x31c: 0x3750, 0x31d: 0x37d4, - 0x31e: 0x3756, 0x31f: 0x37da, 0x322: 0x3762, 0x323: 0x37e6, - 0x324: 0x376e, 0x325: 0x37f2, 0x326: 0x377a, 0x327: 0x37fe, 0x328: 0xa000, 0x329: 0xa000, - 0x32a: 0x384c, 0x32b: 0x3852, 0x32c: 0x37a4, 0x32d: 0x3828, 0x32e: 0x3780, 0x32f: 0x3804, - 0x330: 0x378c, 0x331: 0x3810, 0x332: 0x3792, 0x333: 0x3816, 0x334: 0x3798, 0x335: 0x381c, - 0x338: 0x379e, 0x339: 0x3822, + 0x301: 0x3692, 0x302: 0x3716, + 0x310: 0x366e, 0x311: 0x36f2, + 0x312: 0x3674, 0x313: 0x36f8, 0x316: 0x3686, 0x317: 0x370a, + 0x318: 0xa000, 0x319: 0xa000, 0x31a: 0x3788, 0x31b: 0x378e, 0x31c: 0x3698, 0x31d: 0x371c, + 0x31e: 0x369e, 0x31f: 0x3722, 0x322: 0x36aa, 0x323: 0x372e, + 0x324: 0x36b6, 0x325: 0x373a, 0x326: 0x36c2, 0x327: 0x3746, 0x328: 0xa000, 0x329: 0xa000, + 0x32a: 0x3794, 0x32b: 0x379a, 0x32c: 0x36ec, 0x32d: 0x3770, 0x32e: 0x36c8, 0x32f: 0x374c, + 0x330: 0x36d4, 0x331: 0x3758, 0x332: 0x36da, 0x333: 0x375e, 0x334: 0x36e0, 0x335: 0x3764, + 0x338: 0x36e6, 0x339: 0x376a, // Block 0xd, offset 0x340 0x351: 0x812e, 0x352: 0x8133, 0x353: 0x8133, 0x354: 0x8133, 0x355: 0x8133, 0x356: 0x812e, 0x357: 0x8133, @@ -3071,7 +3146,9 @@ var nfcValues = [3072]uint16{ 0x39e: 0x8133, 0x39f: 0x812e, 0x3b0: 0x811f, // Block 0xf, offset 0x3c0 - 0x3d3: 0x812e, 0x3d4: 0x8133, 0x3d5: 0x8133, 0x3d6: 0x8133, 0x3d7: 0x8133, + 0x3ca: 0x8133, 0x3cb: 0x8133, + 0x3cc: 0x8133, 0x3cd: 0x8133, 0x3ce: 0x8133, 0x3cf: 0x812e, 0x3d0: 0x812e, 0x3d1: 0x812e, + 0x3d2: 0x812e, 0x3d3: 0x812e, 0x3d4: 0x8133, 0x3d5: 0x8133, 0x3d6: 0x8133, 0x3d7: 0x8133, 0x3d8: 0x8133, 0x3d9: 0x8133, 0x3da: 0x8133, 0x3db: 0x8133, 0x3dc: 0x8133, 0x3dd: 0x8133, 0x3de: 0x8133, 0x3df: 0x8133, 0x3e0: 0x8133, 0x3e1: 0x8133, 0x3e3: 0x812e, 0x3e4: 0x8133, 0x3e5: 0x8133, 0x3e6: 0x812e, 0x3e7: 0x8133, 0x3e8: 0x8133, 0x3e9: 0x812e, @@ -3081,12 +3158,12 @@ var nfcValues = [3072]uint16{ 0x3fc: 0x8133, 0x3fd: 0x8133, 0x3fe: 0x8133, 0x3ff: 0x8133, // Block 0x10, offset 0x400 0x405: 0xa000, - 0x406: 0x2d33, 0x407: 0xa000, 0x408: 0x2d3b, 0x409: 0xa000, 0x40a: 0x2d43, 0x40b: 0xa000, - 0x40c: 0x2d4b, 0x40d: 0xa000, 0x40e: 0x2d53, 0x411: 0xa000, - 0x412: 0x2d5b, + 0x406: 0x3ee7, 0x407: 0xa000, 0x408: 0x3eef, 0x409: 0xa000, 0x40a: 0x3ef7, 0x40b: 0xa000, + 0x40c: 0x3eff, 0x40d: 0xa000, 0x40e: 0x3f07, 0x411: 0xa000, + 0x412: 0x3f0f, 0x434: 0x8103, 0x435: 0x9900, - 0x43a: 0xa000, 0x43b: 0x2d63, - 0x43c: 0xa000, 0x43d: 0x2d6b, 0x43e: 0xa000, 0x43f: 0xa000, + 0x43a: 0xa000, 0x43b: 0x3f17, + 0x43c: 0xa000, 0x43d: 0x3f1f, 0x43e: 0xa000, 0x43f: 0xa000, // Block 0x11, offset 0x440 0x440: 0x8133, 0x441: 0x8133, 0x442: 0x812e, 0x443: 0x8133, 0x444: 0x8133, 0x445: 0x8133, 0x446: 0x8133, 0x447: 0x8133, 0x448: 0x8133, 0x449: 0x8133, 0x44a: 0x812e, 0x44b: 0x8133, @@ -3097,344 +3174,344 @@ var nfcValues = [3072]uint16{ 0x464: 0x8133, 0x465: 0x8133, 0x466: 0x8133, 0x467: 0x8133, 0x468: 0x8133, 0x469: 0x8133, 0x46a: 0x8133, 0x46b: 0x8133, 0x46c: 0x8133, 0x46d: 0x8133, 0x46e: 0x8133, 0x46f: 0x8133, 0x470: 0x8133, 0x471: 0x8133, 0x472: 0x8133, 0x473: 0x8133, 0x474: 0x8133, 0x475: 0x8133, - 0x476: 0x8134, 0x477: 0x8132, 0x478: 0x8132, 0x479: 0x812e, 0x47b: 0x8133, + 0x476: 0x8134, 0x477: 0x8132, 0x478: 0x8132, 0x479: 0x812e, 0x47a: 0x812d, 0x47b: 0x8133, 0x47c: 0x8135, 0x47d: 0x812e, 0x47e: 0x8133, 0x47f: 0x812e, // Block 0x12, offset 0x480 - 0x480: 0x2fae, 0x481: 0x32ba, 0x482: 0x2fb8, 0x483: 0x32c4, 0x484: 0x2fbd, 0x485: 0x32c9, - 0x486: 0x2fc2, 0x487: 0x32ce, 0x488: 0x38e3, 0x489: 0x3a72, 0x48a: 0x2fdb, 0x48b: 0x32e7, - 0x48c: 0x2fe5, 0x48d: 0x32f1, 0x48e: 0x2ff4, 0x48f: 0x3300, 0x490: 0x2fea, 0x491: 0x32f6, - 0x492: 0x2fef, 0x493: 0x32fb, 0x494: 0x3906, 0x495: 0x3a95, 0x496: 0x390d, 0x497: 0x3a9c, - 0x498: 0x3030, 0x499: 0x333c, 0x49a: 0x3035, 0x49b: 0x3341, 0x49c: 0x391b, 0x49d: 0x3aaa, - 0x49e: 0x303a, 0x49f: 0x3346, 0x4a0: 0x3049, 0x4a1: 0x3355, 0x4a2: 0x3067, 0x4a3: 0x3373, - 0x4a4: 0x3076, 0x4a5: 0x3382, 0x4a6: 0x306c, 0x4a7: 0x3378, 0x4a8: 0x307b, 0x4a9: 0x3387, - 0x4aa: 0x3080, 0x4ab: 0x338c, 0x4ac: 0x30c6, 0x4ad: 0x33d2, 0x4ae: 0x3922, 0x4af: 0x3ab1, - 0x4b0: 0x30d0, 0x4b1: 0x33e1, 0x4b2: 0x30da, 0x4b3: 0x33eb, 0x4b4: 0x30e4, 0x4b5: 0x33f5, - 0x4b6: 0x46db, 0x4b7: 0x476c, 0x4b8: 0x3929, 0x4b9: 0x3ab8, 0x4ba: 0x30fd, 0x4bb: 0x340e, - 0x4bc: 0x30f8, 0x4bd: 0x3409, 0x4be: 0x3102, 0x4bf: 0x3413, + 0x480: 0x2ef6, 0x481: 0x3202, 0x482: 0x2f00, 0x483: 0x320c, 0x484: 0x2f05, 0x485: 0x3211, + 0x486: 0x2f0a, 0x487: 0x3216, 0x488: 0x382b, 0x489: 0x39ba, 0x48a: 0x2f23, 0x48b: 0x322f, + 0x48c: 0x2f2d, 0x48d: 0x3239, 0x48e: 0x2f3c, 0x48f: 0x3248, 0x490: 0x2f32, 0x491: 0x323e, + 0x492: 0x2f37, 0x493: 0x3243, 0x494: 0x384e, 0x495: 0x39dd, 0x496: 0x3855, 0x497: 0x39e4, + 0x498: 0x2f78, 0x499: 0x3284, 0x49a: 0x2f7d, 0x49b: 0x3289, 0x49c: 0x3863, 0x49d: 0x39f2, + 0x49e: 0x2f82, 0x49f: 0x328e, 0x4a0: 0x2f91, 0x4a1: 0x329d, 0x4a2: 0x2faf, 0x4a3: 0x32bb, + 0x4a4: 0x2fbe, 0x4a5: 0x32ca, 0x4a6: 0x2fb4, 0x4a7: 0x32c0, 0x4a8: 0x2fc3, 0x4a9: 0x32cf, + 0x4aa: 0x2fc8, 0x4ab: 0x32d4, 0x4ac: 0x300e, 0x4ad: 0x331a, 0x4ae: 0x386a, 0x4af: 0x39f9, + 0x4b0: 0x3018, 0x4b1: 0x3329, 0x4b2: 0x3022, 0x4b3: 0x3333, 0x4b4: 0x302c, 0x4b5: 0x333d, + 0x4b6: 0x483b, 0x4b7: 0x48cc, 0x4b8: 0x3871, 0x4b9: 0x3a00, 0x4ba: 0x3045, 0x4bb: 0x3356, + 0x4bc: 0x3040, 0x4bd: 0x3351, 0x4be: 0x304a, 0x4bf: 0x335b, // Block 0x13, offset 0x4c0 - 0x4c0: 0x3107, 0x4c1: 0x3418, 0x4c2: 0x310c, 0x4c3: 0x341d, 0x4c4: 0x3120, 0x4c5: 0x3431, - 0x4c6: 0x312a, 0x4c7: 0x343b, 0x4c8: 0x3139, 0x4c9: 0x344a, 0x4ca: 0x3134, 0x4cb: 0x3445, - 0x4cc: 0x394c, 0x4cd: 0x3adb, 0x4ce: 0x395a, 0x4cf: 0x3ae9, 0x4d0: 0x3961, 0x4d1: 0x3af0, - 0x4d2: 0x3968, 0x4d3: 0x3af7, 0x4d4: 0x3166, 0x4d5: 0x3477, 0x4d6: 0x316b, 0x4d7: 0x347c, - 0x4d8: 0x3175, 0x4d9: 0x3486, 0x4da: 0x4708, 0x4db: 0x4799, 0x4dc: 0x39ae, 0x4dd: 0x3b3d, - 0x4de: 0x318e, 0x4df: 0x349f, 0x4e0: 0x3198, 0x4e1: 0x34a9, 0x4e2: 0x4717, 0x4e3: 0x47a8, - 0x4e4: 0x39b5, 0x4e5: 0x3b44, 0x4e6: 0x39bc, 0x4e7: 0x3b4b, 0x4e8: 0x39c3, 0x4e9: 0x3b52, - 0x4ea: 0x31a7, 0x4eb: 0x34b8, 0x4ec: 0x31b1, 0x4ed: 0x34c7, 0x4ee: 0x31c5, 0x4ef: 0x34db, - 0x4f0: 0x31c0, 0x4f1: 0x34d6, 0x4f2: 0x3201, 0x4f3: 0x3517, 0x4f4: 0x3210, 0x4f5: 0x3526, - 0x4f6: 0x320b, 0x4f7: 0x3521, 0x4f8: 0x39ca, 0x4f9: 0x3b59, 0x4fa: 0x39d1, 0x4fb: 0x3b60, - 0x4fc: 0x3215, 0x4fd: 0x352b, 0x4fe: 0x321a, 0x4ff: 0x3530, + 0x4c0: 0x304f, 0x4c1: 0x3360, 0x4c2: 0x3054, 0x4c3: 0x3365, 0x4c4: 0x3068, 0x4c5: 0x3379, + 0x4c6: 0x3072, 0x4c7: 0x3383, 0x4c8: 0x3081, 0x4c9: 0x3392, 0x4ca: 0x307c, 0x4cb: 0x338d, + 0x4cc: 0x3894, 0x4cd: 0x3a23, 0x4ce: 0x38a2, 0x4cf: 0x3a31, 0x4d0: 0x38a9, 0x4d1: 0x3a38, + 0x4d2: 0x38b0, 0x4d3: 0x3a3f, 0x4d4: 0x30ae, 0x4d5: 0x33bf, 0x4d6: 0x30b3, 0x4d7: 0x33c4, + 0x4d8: 0x30bd, 0x4d9: 0x33ce, 0x4da: 0x4868, 0x4db: 0x48f9, 0x4dc: 0x38f6, 0x4dd: 0x3a85, + 0x4de: 0x30d6, 0x4df: 0x33e7, 0x4e0: 0x30e0, 0x4e1: 0x33f1, 0x4e2: 0x4877, 0x4e3: 0x4908, + 0x4e4: 0x38fd, 0x4e5: 0x3a8c, 0x4e6: 0x3904, 0x4e7: 0x3a93, 0x4e8: 0x390b, 0x4e9: 0x3a9a, + 0x4ea: 0x30ef, 0x4eb: 0x3400, 0x4ec: 0x30f9, 0x4ed: 0x340f, 0x4ee: 0x310d, 0x4ef: 0x3423, + 0x4f0: 0x3108, 0x4f1: 0x341e, 0x4f2: 0x3149, 0x4f3: 0x345f, 0x4f4: 0x3158, 0x4f5: 0x346e, + 0x4f6: 0x3153, 0x4f7: 0x3469, 0x4f8: 0x3912, 0x4f9: 0x3aa1, 0x4fa: 0x3919, 0x4fb: 0x3aa8, + 0x4fc: 0x315d, 0x4fd: 0x3473, 0x4fe: 0x3162, 0x4ff: 0x3478, // Block 0x14, offset 0x500 - 0x500: 0x321f, 0x501: 0x3535, 0x502: 0x3224, 0x503: 0x353a, 0x504: 0x3233, 0x505: 0x3549, - 0x506: 0x322e, 0x507: 0x3544, 0x508: 0x3238, 0x509: 0x3553, 0x50a: 0x323d, 0x50b: 0x3558, - 0x50c: 0x3242, 0x50d: 0x355d, 0x50e: 0x3260, 0x50f: 0x357b, 0x510: 0x3279, 0x511: 0x3599, - 0x512: 0x3288, 0x513: 0x35a8, 0x514: 0x328d, 0x515: 0x35ad, 0x516: 0x3391, 0x517: 0x34bd, - 0x518: 0x354e, 0x519: 0x358a, 0x51b: 0x35e8, - 0x520: 0x46b8, 0x521: 0x4749, 0x522: 0x2f9a, 0x523: 0x32a6, - 0x524: 0x388f, 0x525: 0x3a1e, 0x526: 0x3888, 0x527: 0x3a17, 0x528: 0x389d, 0x529: 0x3a2c, - 0x52a: 0x3896, 0x52b: 0x3a25, 0x52c: 0x38d5, 0x52d: 0x3a64, 0x52e: 0x38ab, 0x52f: 0x3a3a, - 0x530: 0x38a4, 0x531: 0x3a33, 0x532: 0x38b9, 0x533: 0x3a48, 0x534: 0x38b2, 0x535: 0x3a41, - 0x536: 0x38dc, 0x537: 0x3a6b, 0x538: 0x46cc, 0x539: 0x475d, 0x53a: 0x3017, 0x53b: 0x3323, - 0x53c: 0x3003, 0x53d: 0x330f, 0x53e: 0x38f1, 0x53f: 0x3a80, + 0x500: 0x3167, 0x501: 0x347d, 0x502: 0x316c, 0x503: 0x3482, 0x504: 0x317b, 0x505: 0x3491, + 0x506: 0x3176, 0x507: 0x348c, 0x508: 0x3180, 0x509: 0x349b, 0x50a: 0x3185, 0x50b: 0x34a0, + 0x50c: 0x318a, 0x50d: 0x34a5, 0x50e: 0x31a8, 0x50f: 0x34c3, 0x510: 0x31c1, 0x511: 0x34e1, + 0x512: 0x31d0, 0x513: 0x34f0, 0x514: 0x31d5, 0x515: 0x34f5, 0x516: 0x32d9, 0x517: 0x3405, + 0x518: 0x3496, 0x519: 0x34d2, 0x51b: 0x3530, + 0x520: 0x4818, 0x521: 0x48a9, 0x522: 0x2ee2, 0x523: 0x31ee, + 0x524: 0x37d7, 0x525: 0x3966, 0x526: 0x37d0, 0x527: 0x395f, 0x528: 0x37e5, 0x529: 0x3974, + 0x52a: 0x37de, 0x52b: 0x396d, 0x52c: 0x381d, 0x52d: 0x39ac, 0x52e: 0x37f3, 0x52f: 0x3982, + 0x530: 0x37ec, 0x531: 0x397b, 0x532: 0x3801, 0x533: 0x3990, 0x534: 0x37fa, 0x535: 0x3989, + 0x536: 0x3824, 0x537: 0x39b3, 0x538: 0x482c, 0x539: 0x48bd, 0x53a: 0x2f5f, 0x53b: 0x326b, + 0x53c: 0x2f4b, 0x53d: 0x3257, 0x53e: 0x3839, 0x53f: 0x39c8, // Block 0x15, offset 0x540 - 0x540: 0x38ea, 0x541: 0x3a79, 0x542: 0x38ff, 0x543: 0x3a8e, 0x544: 0x38f8, 0x545: 0x3a87, - 0x546: 0x3914, 0x547: 0x3aa3, 0x548: 0x30a8, 0x549: 0x33b4, 0x54a: 0x30bc, 0x54b: 0x33c8, - 0x54c: 0x46fe, 0x54d: 0x478f, 0x54e: 0x314d, 0x54f: 0x345e, 0x550: 0x3937, 0x551: 0x3ac6, - 0x552: 0x3930, 0x553: 0x3abf, 0x554: 0x3945, 0x555: 0x3ad4, 0x556: 0x393e, 0x557: 0x3acd, - 0x558: 0x39a0, 0x559: 0x3b2f, 0x55a: 0x3984, 0x55b: 0x3b13, 0x55c: 0x397d, 0x55d: 0x3b0c, - 0x55e: 0x3992, 0x55f: 0x3b21, 0x560: 0x398b, 0x561: 0x3b1a, 0x562: 0x3999, 0x563: 0x3b28, - 0x564: 0x31fc, 0x565: 0x3512, 0x566: 0x31de, 0x567: 0x34f4, 0x568: 0x39fb, 0x569: 0x3b8a, - 0x56a: 0x39f4, 0x56b: 0x3b83, 0x56c: 0x3a09, 0x56d: 0x3b98, 0x56e: 0x3a02, 0x56f: 0x3b91, - 0x570: 0x3a10, 0x571: 0x3b9f, 0x572: 0x3247, 0x573: 0x3562, 0x574: 0x326f, 0x575: 0x358f, - 0x576: 0x326a, 0x577: 0x3585, 0x578: 0x3256, 0x579: 0x3571, + 0x540: 0x3832, 0x541: 0x39c1, 0x542: 0x3847, 0x543: 0x39d6, 0x544: 0x3840, 0x545: 0x39cf, + 0x546: 0x385c, 0x547: 0x39eb, 0x548: 0x2ff0, 0x549: 0x32fc, 0x54a: 0x3004, 0x54b: 0x3310, + 0x54c: 0x485e, 0x54d: 0x48ef, 0x54e: 0x3095, 0x54f: 0x33a6, 0x550: 0x387f, 0x551: 0x3a0e, + 0x552: 0x3878, 0x553: 0x3a07, 0x554: 0x388d, 0x555: 0x3a1c, 0x556: 0x3886, 0x557: 0x3a15, + 0x558: 0x38e8, 0x559: 0x3a77, 0x55a: 0x38cc, 0x55b: 0x3a5b, 0x55c: 0x38c5, 0x55d: 0x3a54, + 0x55e: 0x38da, 0x55f: 0x3a69, 0x560: 0x38d3, 0x561: 0x3a62, 0x562: 0x38e1, 0x563: 0x3a70, + 0x564: 0x3144, 0x565: 0x345a, 0x566: 0x3126, 0x567: 0x343c, 0x568: 0x3943, 0x569: 0x3ad2, + 0x56a: 0x393c, 0x56b: 0x3acb, 0x56c: 0x3951, 0x56d: 0x3ae0, 0x56e: 0x394a, 0x56f: 0x3ad9, + 0x570: 0x3958, 0x571: 0x3ae7, 0x572: 0x318f, 0x573: 0x34aa, 0x574: 0x31b7, 0x575: 0x34d7, + 0x576: 0x31b2, 0x577: 0x34cd, 0x578: 0x319e, 0x579: 0x34b9, // Block 0x16, offset 0x580 - 0x580: 0x481b, 0x581: 0x4821, 0x582: 0x4935, 0x583: 0x494d, 0x584: 0x493d, 0x585: 0x4955, - 0x586: 0x4945, 0x587: 0x495d, 0x588: 0x47c1, 0x589: 0x47c7, 0x58a: 0x48a5, 0x58b: 0x48bd, - 0x58c: 0x48ad, 0x58d: 0x48c5, 0x58e: 0x48b5, 0x58f: 0x48cd, 0x590: 0x482d, 0x591: 0x4833, - 0x592: 0x3dcf, 0x593: 0x3ddf, 0x594: 0x3dd7, 0x595: 0x3de7, - 0x598: 0x47cd, 0x599: 0x47d3, 0x59a: 0x3cff, 0x59b: 0x3d0f, 0x59c: 0x3d07, 0x59d: 0x3d17, - 0x5a0: 0x4845, 0x5a1: 0x484b, 0x5a2: 0x4965, 0x5a3: 0x497d, - 0x5a4: 0x496d, 0x5a5: 0x4985, 0x5a6: 0x4975, 0x5a7: 0x498d, 0x5a8: 0x47d9, 0x5a9: 0x47df, - 0x5aa: 0x48d5, 0x5ab: 0x48ed, 0x5ac: 0x48dd, 0x5ad: 0x48f5, 0x5ae: 0x48e5, 0x5af: 0x48fd, - 0x5b0: 0x485d, 0x5b1: 0x4863, 0x5b2: 0x3e2f, 0x5b3: 0x3e47, 0x5b4: 0x3e37, 0x5b5: 0x3e4f, - 0x5b6: 0x3e3f, 0x5b7: 0x3e57, 0x5b8: 0x47e5, 0x5b9: 0x47eb, 0x5ba: 0x3d2f, 0x5bb: 0x3d47, - 0x5bc: 0x3d37, 0x5bd: 0x3d4f, 0x5be: 0x3d3f, 0x5bf: 0x3d57, + 0x580: 0x497b, 0x581: 0x4981, 0x582: 0x4a95, 0x583: 0x4aad, 0x584: 0x4a9d, 0x585: 0x4ab5, + 0x586: 0x4aa5, 0x587: 0x4abd, 0x588: 0x4921, 0x589: 0x4927, 0x58a: 0x4a05, 0x58b: 0x4a1d, + 0x58c: 0x4a0d, 0x58d: 0x4a25, 0x58e: 0x4a15, 0x58f: 0x4a2d, 0x590: 0x498d, 0x591: 0x4993, + 0x592: 0x3d17, 0x593: 0x3d27, 0x594: 0x3d1f, 0x595: 0x3d2f, + 0x598: 0x492d, 0x599: 0x4933, 0x59a: 0x3c47, 0x59b: 0x3c57, 0x59c: 0x3c4f, 0x59d: 0x3c5f, + 0x5a0: 0x49a5, 0x5a1: 0x49ab, 0x5a2: 0x4ac5, 0x5a3: 0x4add, + 0x5a4: 0x4acd, 0x5a5: 0x4ae5, 0x5a6: 0x4ad5, 0x5a7: 0x4aed, 0x5a8: 0x4939, 0x5a9: 0x493f, + 0x5aa: 0x4a35, 0x5ab: 0x4a4d, 0x5ac: 0x4a3d, 0x5ad: 0x4a55, 0x5ae: 0x4a45, 0x5af: 0x4a5d, + 0x5b0: 0x49bd, 0x5b1: 0x49c3, 0x5b2: 0x3d77, 0x5b3: 0x3d8f, 0x5b4: 0x3d7f, 0x5b5: 0x3d97, + 0x5b6: 0x3d87, 0x5b7: 0x3d9f, 0x5b8: 0x4945, 0x5b9: 0x494b, 0x5ba: 0x3c77, 0x5bb: 0x3c8f, + 0x5bc: 0x3c7f, 0x5bd: 0x3c97, 0x5be: 0x3c87, 0x5bf: 0x3c9f, // Block 0x17, offset 0x5c0 - 0x5c0: 0x4869, 0x5c1: 0x486f, 0x5c2: 0x3e5f, 0x5c3: 0x3e6f, 0x5c4: 0x3e67, 0x5c5: 0x3e77, - 0x5c8: 0x47f1, 0x5c9: 0x47f7, 0x5ca: 0x3d5f, 0x5cb: 0x3d6f, - 0x5cc: 0x3d67, 0x5cd: 0x3d77, 0x5d0: 0x487b, 0x5d1: 0x4881, - 0x5d2: 0x3e97, 0x5d3: 0x3eaf, 0x5d4: 0x3e9f, 0x5d5: 0x3eb7, 0x5d6: 0x3ea7, 0x5d7: 0x3ebf, - 0x5d9: 0x47fd, 0x5db: 0x3d7f, 0x5dd: 0x3d87, - 0x5df: 0x3d8f, 0x5e0: 0x4893, 0x5e1: 0x4899, 0x5e2: 0x4995, 0x5e3: 0x49ad, - 0x5e4: 0x499d, 0x5e5: 0x49b5, 0x5e6: 0x49a5, 0x5e7: 0x49bd, 0x5e8: 0x4803, 0x5e9: 0x4809, - 0x5ea: 0x4905, 0x5eb: 0x491d, 0x5ec: 0x490d, 0x5ed: 0x4925, 0x5ee: 0x4915, 0x5ef: 0x492d, - 0x5f0: 0x480f, 0x5f1: 0x4335, 0x5f2: 0x36a8, 0x5f3: 0x433b, 0x5f4: 0x4839, 0x5f5: 0x4341, - 0x5f6: 0x36ba, 0x5f7: 0x4347, 0x5f8: 0x36d8, 0x5f9: 0x434d, 0x5fa: 0x36f0, 0x5fb: 0x4353, - 0x5fc: 0x4887, 0x5fd: 0x4359, + 0x5c0: 0x49c9, 0x5c1: 0x49cf, 0x5c2: 0x3da7, 0x5c3: 0x3db7, 0x5c4: 0x3daf, 0x5c5: 0x3dbf, + 0x5c8: 0x4951, 0x5c9: 0x4957, 0x5ca: 0x3ca7, 0x5cb: 0x3cb7, + 0x5cc: 0x3caf, 0x5cd: 0x3cbf, 0x5d0: 0x49db, 0x5d1: 0x49e1, + 0x5d2: 0x3ddf, 0x5d3: 0x3df7, 0x5d4: 0x3de7, 0x5d5: 0x3dff, 0x5d6: 0x3def, 0x5d7: 0x3e07, + 0x5d9: 0x495d, 0x5db: 0x3cc7, 0x5dd: 0x3ccf, + 0x5df: 0x3cd7, 0x5e0: 0x49f3, 0x5e1: 0x49f9, 0x5e2: 0x4af5, 0x5e3: 0x4b0d, + 0x5e4: 0x4afd, 0x5e5: 0x4b15, 0x5e6: 0x4b05, 0x5e7: 0x4b1d, 0x5e8: 0x4963, 0x5e9: 0x4969, + 0x5ea: 0x4a65, 0x5eb: 0x4a7d, 0x5ec: 0x4a6d, 0x5ed: 0x4a85, 0x5ee: 0x4a75, 0x5ef: 0x4a8d, + 0x5f0: 0x496f, 0x5f1: 0x441d, 0x5f2: 0x35f0, 0x5f3: 0x4423, 0x5f4: 0x4999, 0x5f5: 0x4429, + 0x5f6: 0x3602, 0x5f7: 0x442f, 0x5f8: 0x3620, 0x5f9: 0x4435, 0x5fa: 0x3638, 0x5fb: 0x443b, + 0x5fc: 0x49e7, 0x5fd: 0x4441, // Block 0x18, offset 0x600 - 0x600: 0x3db7, 0x601: 0x3dbf, 0x602: 0x419b, 0x603: 0x41b9, 0x604: 0x41a5, 0x605: 0x41c3, - 0x606: 0x41af, 0x607: 0x41cd, 0x608: 0x3cef, 0x609: 0x3cf7, 0x60a: 0x40e7, 0x60b: 0x4105, - 0x60c: 0x40f1, 0x60d: 0x410f, 0x60e: 0x40fb, 0x60f: 0x4119, 0x610: 0x3dff, 0x611: 0x3e07, - 0x612: 0x41d7, 0x613: 0x41f5, 0x614: 0x41e1, 0x615: 0x41ff, 0x616: 0x41eb, 0x617: 0x4209, - 0x618: 0x3d1f, 0x619: 0x3d27, 0x61a: 0x4123, 0x61b: 0x4141, 0x61c: 0x412d, 0x61d: 0x414b, - 0x61e: 0x4137, 0x61f: 0x4155, 0x620: 0x3ed7, 0x621: 0x3edf, 0x622: 0x4213, 0x623: 0x4231, - 0x624: 0x421d, 0x625: 0x423b, 0x626: 0x4227, 0x627: 0x4245, 0x628: 0x3d97, 0x629: 0x3d9f, - 0x62a: 0x415f, 0x62b: 0x417d, 0x62c: 0x4169, 0x62d: 0x4187, 0x62e: 0x4173, 0x62f: 0x4191, - 0x630: 0x369c, 0x631: 0x3696, 0x632: 0x3da7, 0x633: 0x36a2, 0x634: 0x3daf, - 0x636: 0x4827, 0x637: 0x3dc7, 0x638: 0x360c, 0x639: 0x3606, 0x63a: 0x35fa, 0x63b: 0x4305, - 0x63c: 0x3612, 0x63d: 0x8100, 0x63e: 0x01d6, 0x63f: 0xa100, + 0x600: 0x3cff, 0x601: 0x3d07, 0x602: 0x41d3, 0x603: 0x41f1, 0x604: 0x41dd, 0x605: 0x41fb, + 0x606: 0x41e7, 0x607: 0x4205, 0x608: 0x3c37, 0x609: 0x3c3f, 0x60a: 0x411f, 0x60b: 0x413d, + 0x60c: 0x4129, 0x60d: 0x4147, 0x60e: 0x4133, 0x60f: 0x4151, 0x610: 0x3d47, 0x611: 0x3d4f, + 0x612: 0x420f, 0x613: 0x422d, 0x614: 0x4219, 0x615: 0x4237, 0x616: 0x4223, 0x617: 0x4241, + 0x618: 0x3c67, 0x619: 0x3c6f, 0x61a: 0x415b, 0x61b: 0x4179, 0x61c: 0x4165, 0x61d: 0x4183, + 0x61e: 0x416f, 0x61f: 0x418d, 0x620: 0x3e1f, 0x621: 0x3e27, 0x622: 0x424b, 0x623: 0x4269, + 0x624: 0x4255, 0x625: 0x4273, 0x626: 0x425f, 0x627: 0x427d, 0x628: 0x3cdf, 0x629: 0x3ce7, + 0x62a: 0x4197, 0x62b: 0x41b5, 0x62c: 0x41a1, 0x62d: 0x41bf, 0x62e: 0x41ab, 0x62f: 0x41c9, + 0x630: 0x35e4, 0x631: 0x35de, 0x632: 0x3cef, 0x633: 0x35ea, 0x634: 0x3cf7, + 0x636: 0x4987, 0x637: 0x3d0f, 0x638: 0x3554, 0x639: 0x354e, 0x63a: 0x3542, 0x63b: 0x43ed, + 0x63c: 0x355a, 0x63d: 0x8100, 0x63e: 0x0257, 0x63f: 0xa100, // Block 0x19, offset 0x640 - 0x640: 0x8100, 0x641: 0x35be, 0x642: 0x3def, 0x643: 0x36b4, 0x644: 0x3df7, - 0x646: 0x4851, 0x647: 0x3e0f, 0x648: 0x3618, 0x649: 0x430b, 0x64a: 0x3624, 0x64b: 0x4311, - 0x64c: 0x3630, 0x64d: 0x3ba6, 0x64e: 0x3bad, 0x64f: 0x3bb4, 0x650: 0x36cc, 0x651: 0x36c6, - 0x652: 0x3e17, 0x653: 0x44fb, 0x656: 0x36d2, 0x657: 0x3e27, - 0x658: 0x3648, 0x659: 0x3642, 0x65a: 0x3636, 0x65b: 0x4317, 0x65d: 0x3bbb, - 0x65e: 0x3bc2, 0x65f: 0x3bc9, 0x660: 0x3702, 0x661: 0x36fc, 0x662: 0x3e7f, 0x663: 0x4503, - 0x664: 0x36e4, 0x665: 0x36ea, 0x666: 0x3708, 0x667: 0x3e8f, 0x668: 0x3678, 0x669: 0x3672, - 0x66a: 0x3666, 0x66b: 0x4323, 0x66c: 0x3660, 0x66d: 0x35b2, 0x66e: 0x42ff, 0x66f: 0x0081, - 0x672: 0x3ec7, 0x673: 0x370e, 0x674: 0x3ecf, - 0x676: 0x489f, 0x677: 0x3ee7, 0x678: 0x3654, 0x679: 0x431d, 0x67a: 0x3684, 0x67b: 0x432f, - 0x67c: 0x3690, 0x67d: 0x426d, 0x67e: 0xa100, + 0x640: 0x8100, 0x641: 0x3506, 0x642: 0x3d37, 0x643: 0x35fc, 0x644: 0x3d3f, + 0x646: 0x49b1, 0x647: 0x3d57, 0x648: 0x3560, 0x649: 0x43f3, 0x64a: 0x356c, 0x64b: 0x43f9, + 0x64c: 0x3578, 0x64d: 0x3aee, 0x64e: 0x3af5, 0x64f: 0x3afc, 0x650: 0x3614, 0x651: 0x360e, + 0x652: 0x3d5f, 0x653: 0x45e3, 0x656: 0x361a, 0x657: 0x3d6f, + 0x658: 0x3590, 0x659: 0x358a, 0x65a: 0x357e, 0x65b: 0x43ff, 0x65d: 0x3b03, + 0x65e: 0x3b0a, 0x65f: 0x3b11, 0x660: 0x364a, 0x661: 0x3644, 0x662: 0x3dc7, 0x663: 0x45eb, + 0x664: 0x362c, 0x665: 0x3632, 0x666: 0x3650, 0x667: 0x3dd7, 0x668: 0x35c0, 0x669: 0x35ba, + 0x66a: 0x35ae, 0x66b: 0x440b, 0x66c: 0x35a8, 0x66d: 0x34fa, 0x66e: 0x43e7, 0x66f: 0x0081, + 0x672: 0x3e0f, 0x673: 0x3656, 0x674: 0x3e17, + 0x676: 0x49ff, 0x677: 0x3e2f, 0x678: 0x359c, 0x679: 0x4405, 0x67a: 0x35cc, 0x67b: 0x4417, + 0x67c: 0x35d8, 0x67d: 0x4355, 0x67e: 0xa100, // Block 0x1a, offset 0x680 - 0x681: 0x3c1d, 0x683: 0xa000, 0x684: 0x3c24, 0x685: 0xa000, - 0x687: 0x3c2b, 0x688: 0xa000, 0x689: 0x3c32, + 0x681: 0x3b65, 0x683: 0xa000, 0x684: 0x3b6c, 0x685: 0xa000, + 0x687: 0x3b73, 0x688: 0xa000, 0x689: 0x3b7a, 0x68d: 0xa000, - 0x6a0: 0x2f7c, 0x6a1: 0xa000, 0x6a2: 0x3c40, + 0x6a0: 0x2ec4, 0x6a1: 0xa000, 0x6a2: 0x3b88, 0x6a4: 0xa000, 0x6a5: 0xa000, - 0x6ad: 0x3c39, 0x6ae: 0x2f77, 0x6af: 0x2f81, - 0x6b0: 0x3c47, 0x6b1: 0x3c4e, 0x6b2: 0xa000, 0x6b3: 0xa000, 0x6b4: 0x3c55, 0x6b5: 0x3c5c, - 0x6b6: 0xa000, 0x6b7: 0xa000, 0x6b8: 0x3c63, 0x6b9: 0x3c6a, 0x6ba: 0xa000, 0x6bb: 0xa000, + 0x6ad: 0x3b81, 0x6ae: 0x2ebf, 0x6af: 0x2ec9, + 0x6b0: 0x3b8f, 0x6b1: 0x3b96, 0x6b2: 0xa000, 0x6b3: 0xa000, 0x6b4: 0x3b9d, 0x6b5: 0x3ba4, + 0x6b6: 0xa000, 0x6b7: 0xa000, 0x6b8: 0x3bab, 0x6b9: 0x3bb2, 0x6ba: 0xa000, 0x6bb: 0xa000, 0x6bc: 0xa000, 0x6bd: 0xa000, // Block 0x1b, offset 0x6c0 - 0x6c0: 0x3c71, 0x6c1: 0x3c78, 0x6c2: 0xa000, 0x6c3: 0xa000, 0x6c4: 0x3c8d, 0x6c5: 0x3c94, - 0x6c6: 0xa000, 0x6c7: 0xa000, 0x6c8: 0x3c9b, 0x6c9: 0x3ca2, + 0x6c0: 0x3bb9, 0x6c1: 0x3bc0, 0x6c2: 0xa000, 0x6c3: 0xa000, 0x6c4: 0x3bd5, 0x6c5: 0x3bdc, + 0x6c6: 0xa000, 0x6c7: 0xa000, 0x6c8: 0x3be3, 0x6c9: 0x3bea, 0x6d1: 0xa000, 0x6d2: 0xa000, 0x6e2: 0xa000, 0x6e8: 0xa000, 0x6e9: 0xa000, - 0x6eb: 0xa000, 0x6ec: 0x3cb7, 0x6ed: 0x3cbe, 0x6ee: 0x3cc5, 0x6ef: 0x3ccc, + 0x6eb: 0xa000, 0x6ec: 0x3bff, 0x6ed: 0x3c06, 0x6ee: 0x3c0d, 0x6ef: 0x3c14, 0x6f2: 0xa000, 0x6f3: 0xa000, 0x6f4: 0xa000, 0x6f5: 0xa000, // Block 0x1c, offset 0x700 0x706: 0xa000, 0x70b: 0xa000, - 0x70c: 0x3f1f, 0x70d: 0xa000, 0x70e: 0x3f27, 0x70f: 0xa000, 0x710: 0x3f2f, 0x711: 0xa000, - 0x712: 0x3f37, 0x713: 0xa000, 0x714: 0x3f3f, 0x715: 0xa000, 0x716: 0x3f47, 0x717: 0xa000, - 0x718: 0x3f4f, 0x719: 0xa000, 0x71a: 0x3f57, 0x71b: 0xa000, 0x71c: 0x3f5f, 0x71d: 0xa000, - 0x71e: 0x3f67, 0x71f: 0xa000, 0x720: 0x3f6f, 0x721: 0xa000, 0x722: 0x3f77, - 0x724: 0xa000, 0x725: 0x3f7f, 0x726: 0xa000, 0x727: 0x3f87, 0x728: 0xa000, 0x729: 0x3f8f, + 0x70c: 0x3f47, 0x70d: 0xa000, 0x70e: 0x3f4f, 0x70f: 0xa000, 0x710: 0x3f57, 0x711: 0xa000, + 0x712: 0x3f5f, 0x713: 0xa000, 0x714: 0x3f67, 0x715: 0xa000, 0x716: 0x3f6f, 0x717: 0xa000, + 0x718: 0x3f77, 0x719: 0xa000, 0x71a: 0x3f7f, 0x71b: 0xa000, 0x71c: 0x3f87, 0x71d: 0xa000, + 0x71e: 0x3f8f, 0x71f: 0xa000, 0x720: 0x3f97, 0x721: 0xa000, 0x722: 0x3f9f, + 0x724: 0xa000, 0x725: 0x3fa7, 0x726: 0xa000, 0x727: 0x3faf, 0x728: 0xa000, 0x729: 0x3fb7, 0x72f: 0xa000, - 0x730: 0x3f97, 0x731: 0x3f9f, 0x732: 0xa000, 0x733: 0x3fa7, 0x734: 0x3faf, 0x735: 0xa000, - 0x736: 0x3fb7, 0x737: 0x3fbf, 0x738: 0xa000, 0x739: 0x3fc7, 0x73a: 0x3fcf, 0x73b: 0xa000, - 0x73c: 0x3fd7, 0x73d: 0x3fdf, + 0x730: 0x3fbf, 0x731: 0x3fc7, 0x732: 0xa000, 0x733: 0x3fcf, 0x734: 0x3fd7, 0x735: 0xa000, + 0x736: 0x3fdf, 0x737: 0x3fe7, 0x738: 0xa000, 0x739: 0x3fef, 0x73a: 0x3ff7, 0x73b: 0xa000, + 0x73c: 0x3fff, 0x73d: 0x4007, // Block 0x1d, offset 0x740 - 0x754: 0x3f17, + 0x754: 0x3f3f, 0x759: 0x9904, 0x75a: 0x9904, 0x75b: 0x8100, 0x75c: 0x8100, 0x75d: 0xa000, - 0x75e: 0x3fe7, + 0x75e: 0x400f, 0x766: 0xa000, - 0x76b: 0xa000, 0x76c: 0x3ff7, 0x76d: 0xa000, 0x76e: 0x3fff, 0x76f: 0xa000, - 0x770: 0x4007, 0x771: 0xa000, 0x772: 0x400f, 0x773: 0xa000, 0x774: 0x4017, 0x775: 0xa000, - 0x776: 0x401f, 0x777: 0xa000, 0x778: 0x4027, 0x779: 0xa000, 0x77a: 0x402f, 0x77b: 0xa000, - 0x77c: 0x4037, 0x77d: 0xa000, 0x77e: 0x403f, 0x77f: 0xa000, + 0x76b: 0xa000, 0x76c: 0x401f, 0x76d: 0xa000, 0x76e: 0x4027, 0x76f: 0xa000, + 0x770: 0x402f, 0x771: 0xa000, 0x772: 0x4037, 0x773: 0xa000, 0x774: 0x403f, 0x775: 0xa000, + 0x776: 0x4047, 0x777: 0xa000, 0x778: 0x404f, 0x779: 0xa000, 0x77a: 0x4057, 0x77b: 0xa000, + 0x77c: 0x405f, 0x77d: 0xa000, 0x77e: 0x4067, 0x77f: 0xa000, // Block 0x1e, offset 0x780 - 0x780: 0x4047, 0x781: 0xa000, 0x782: 0x404f, 0x784: 0xa000, 0x785: 0x4057, - 0x786: 0xa000, 0x787: 0x405f, 0x788: 0xa000, 0x789: 0x4067, - 0x78f: 0xa000, 0x790: 0x406f, 0x791: 0x4077, - 0x792: 0xa000, 0x793: 0x407f, 0x794: 0x4087, 0x795: 0xa000, 0x796: 0x408f, 0x797: 0x4097, - 0x798: 0xa000, 0x799: 0x409f, 0x79a: 0x40a7, 0x79b: 0xa000, 0x79c: 0x40af, 0x79d: 0x40b7, + 0x780: 0x406f, 0x781: 0xa000, 0x782: 0x4077, 0x784: 0xa000, 0x785: 0x407f, + 0x786: 0xa000, 0x787: 0x4087, 0x788: 0xa000, 0x789: 0x408f, + 0x78f: 0xa000, 0x790: 0x4097, 0x791: 0x409f, + 0x792: 0xa000, 0x793: 0x40a7, 0x794: 0x40af, 0x795: 0xa000, 0x796: 0x40b7, 0x797: 0x40bf, + 0x798: 0xa000, 0x799: 0x40c7, 0x79a: 0x40cf, 0x79b: 0xa000, 0x79c: 0x40d7, 0x79d: 0x40df, 0x7af: 0xa000, - 0x7b0: 0xa000, 0x7b1: 0xa000, 0x7b2: 0xa000, 0x7b4: 0x3fef, - 0x7b7: 0x40bf, 0x7b8: 0x40c7, 0x7b9: 0x40cf, 0x7ba: 0x40d7, - 0x7bd: 0xa000, 0x7be: 0x40df, + 0x7b0: 0xa000, 0x7b1: 0xa000, 0x7b2: 0xa000, 0x7b4: 0x4017, + 0x7b7: 0x40e7, 0x7b8: 0x40ef, 0x7b9: 0x40f7, 0x7ba: 0x40ff, + 0x7bd: 0xa000, 0x7be: 0x4107, // Block 0x1f, offset 0x7c0 - 0x7c0: 0x137a, 0x7c1: 0x0cfe, 0x7c2: 0x13d6, 0x7c3: 0x13a2, 0x7c4: 0x0e5a, 0x7c5: 0x06ee, - 0x7c6: 0x08e2, 0x7c7: 0x162e, 0x7c8: 0x162e, 0x7c9: 0x0a0e, 0x7ca: 0x1462, 0x7cb: 0x0946, - 0x7cc: 0x0a0a, 0x7cd: 0x0bf2, 0x7ce: 0x0fd2, 0x7cf: 0x1162, 0x7d0: 0x129a, 0x7d1: 0x12d6, - 0x7d2: 0x130a, 0x7d3: 0x141e, 0x7d4: 0x0d76, 0x7d5: 0x0e02, 0x7d6: 0x0eae, 0x7d7: 0x0f46, - 0x7d8: 0x1262, 0x7d9: 0x144a, 0x7da: 0x1576, 0x7db: 0x0712, 0x7dc: 0x08b6, 0x7dd: 0x0d8a, - 0x7de: 0x0ed2, 0x7df: 0x1296, 0x7e0: 0x15c6, 0x7e1: 0x0ab6, 0x7e2: 0x0e7a, 0x7e3: 0x1286, - 0x7e4: 0x131a, 0x7e5: 0x0c26, 0x7e6: 0x11be, 0x7e7: 0x12e2, 0x7e8: 0x0b22, 0x7e9: 0x0d12, - 0x7ea: 0x0e1a, 0x7eb: 0x0f1e, 0x7ec: 0x142a, 0x7ed: 0x0752, 0x7ee: 0x07ea, 0x7ef: 0x0856, - 0x7f0: 0x0c8e, 0x7f1: 0x0d82, 0x7f2: 0x0ece, 0x7f3: 0x0ff2, 0x7f4: 0x117a, 0x7f5: 0x128e, - 0x7f6: 0x12a6, 0x7f7: 0x13ca, 0x7f8: 0x14f2, 0x7f9: 0x15a6, 0x7fa: 0x15c2, 0x7fb: 0x102e, - 0x7fc: 0x106e, 0x7fd: 0x1126, 0x7fe: 0x1246, 0x7ff: 0x147e, + 0x7c0: 0x1472, 0x7c1: 0x0df6, 0x7c2: 0x14ce, 0x7c3: 0x149a, 0x7c4: 0x0f52, 0x7c5: 0x07e6, + 0x7c6: 0x09da, 0x7c7: 0x1726, 0x7c8: 0x1726, 0x7c9: 0x0b06, 0x7ca: 0x155a, 0x7cb: 0x0a3e, + 0x7cc: 0x0b02, 0x7cd: 0x0cea, 0x7ce: 0x10ca, 0x7cf: 0x125a, 0x7d0: 0x1392, 0x7d1: 0x13ce, + 0x7d2: 0x1402, 0x7d3: 0x1516, 0x7d4: 0x0e6e, 0x7d5: 0x0efa, 0x7d6: 0x0fa6, 0x7d7: 0x103e, + 0x7d8: 0x135a, 0x7d9: 0x1542, 0x7da: 0x166e, 0x7db: 0x080a, 0x7dc: 0x09ae, 0x7dd: 0x0e82, + 0x7de: 0x0fca, 0x7df: 0x138e, 0x7e0: 0x16be, 0x7e1: 0x0bae, 0x7e2: 0x0f72, 0x7e3: 0x137e, + 0x7e4: 0x1412, 0x7e5: 0x0d1e, 0x7e6: 0x12b6, 0x7e7: 0x13da, 0x7e8: 0x0c1a, 0x7e9: 0x0e0a, + 0x7ea: 0x0f12, 0x7eb: 0x1016, 0x7ec: 0x1522, 0x7ed: 0x084a, 0x7ee: 0x08e2, 0x7ef: 0x094e, + 0x7f0: 0x0d86, 0x7f1: 0x0e7a, 0x7f2: 0x0fc6, 0x7f3: 0x10ea, 0x7f4: 0x1272, 0x7f5: 0x1386, + 0x7f6: 0x139e, 0x7f7: 0x14c2, 0x7f8: 0x15ea, 0x7f9: 0x169e, 0x7fa: 0x16ba, 0x7fb: 0x1126, + 0x7fc: 0x1166, 0x7fd: 0x121e, 0x7fe: 0x133e, 0x7ff: 0x1576, // Block 0x20, offset 0x800 - 0x800: 0x15ce, 0x801: 0x134e, 0x802: 0x09ca, 0x803: 0x0b3e, 0x804: 0x10de, 0x805: 0x119e, - 0x806: 0x0f02, 0x807: 0x1036, 0x808: 0x139a, 0x809: 0x14ea, 0x80a: 0x09c6, 0x80b: 0x0a92, - 0x80c: 0x0d7a, 0x80d: 0x0e2e, 0x80e: 0x0e62, 0x80f: 0x1116, 0x810: 0x113e, 0x811: 0x14aa, - 0x812: 0x0852, 0x813: 0x11aa, 0x814: 0x07f6, 0x815: 0x07f2, 0x816: 0x109a, 0x817: 0x112a, - 0x818: 0x125e, 0x819: 0x14b2, 0x81a: 0x136a, 0x81b: 0x0c2a, 0x81c: 0x0d76, 0x81d: 0x135a, - 0x81e: 0x06fa, 0x81f: 0x0a66, 0x820: 0x0b96, 0x821: 0x0f32, 0x822: 0x0fb2, 0x823: 0x0876, - 0x824: 0x103e, 0x825: 0x0762, 0x826: 0x0b7a, 0x827: 0x06da, 0x828: 0x0dee, 0x829: 0x0ca6, - 0x82a: 0x1112, 0x82b: 0x08ca, 0x82c: 0x09b6, 0x82d: 0x0ffe, 0x82e: 0x1266, 0x82f: 0x133e, - 0x830: 0x0dba, 0x831: 0x13fa, 0x832: 0x0de6, 0x833: 0x0c3a, 0x834: 0x121e, 0x835: 0x0c5a, - 0x836: 0x0fae, 0x837: 0x072e, 0x838: 0x07aa, 0x839: 0x07ee, 0x83a: 0x0d56, 0x83b: 0x10fe, - 0x83c: 0x11f6, 0x83d: 0x134a, 0x83e: 0x145e, 0x83f: 0x085e, + 0x800: 0x16c6, 0x801: 0x1446, 0x802: 0x0ac2, 0x803: 0x0c36, 0x804: 0x11d6, 0x805: 0x1296, + 0x806: 0x0ffa, 0x807: 0x112e, 0x808: 0x1492, 0x809: 0x15e2, 0x80a: 0x0abe, 0x80b: 0x0b8a, + 0x80c: 0x0e72, 0x80d: 0x0f26, 0x80e: 0x0f5a, 0x80f: 0x120e, 0x810: 0x1236, 0x811: 0x15a2, + 0x812: 0x094a, 0x813: 0x12a2, 0x814: 0x08ee, 0x815: 0x08ea, 0x816: 0x1192, 0x817: 0x1222, + 0x818: 0x1356, 0x819: 0x15aa, 0x81a: 0x1462, 0x81b: 0x0d22, 0x81c: 0x0e6e, 0x81d: 0x1452, + 0x81e: 0x07f2, 0x81f: 0x0b5e, 0x820: 0x0c8e, 0x821: 0x102a, 0x822: 0x10aa, 0x823: 0x096e, + 0x824: 0x1136, 0x825: 0x085a, 0x826: 0x0c72, 0x827: 0x07d2, 0x828: 0x0ee6, 0x829: 0x0d9e, + 0x82a: 0x120a, 0x82b: 0x09c2, 0x82c: 0x0aae, 0x82d: 0x10f6, 0x82e: 0x135e, 0x82f: 0x1436, + 0x830: 0x0eb2, 0x831: 0x14f2, 0x832: 0x0ede, 0x833: 0x0d32, 0x834: 0x1316, 0x835: 0x0d52, + 0x836: 0x10a6, 0x837: 0x0826, 0x838: 0x08a2, 0x839: 0x08e6, 0x83a: 0x0e4e, 0x83b: 0x11f6, + 0x83c: 0x12ee, 0x83d: 0x1442, 0x83e: 0x1556, 0x83f: 0x0956, // Block 0x21, offset 0x840 - 0x840: 0x0912, 0x841: 0x0a1a, 0x842: 0x0b32, 0x843: 0x0cc2, 0x844: 0x0e7e, 0x845: 0x1042, - 0x846: 0x149a, 0x847: 0x157e, 0x848: 0x15d2, 0x849: 0x15ea, 0x84a: 0x083a, 0x84b: 0x0cf6, - 0x84c: 0x0da6, 0x84d: 0x13ee, 0x84e: 0x0afe, 0x84f: 0x0bda, 0x850: 0x0bf6, 0x851: 0x0c86, - 0x852: 0x0e6e, 0x853: 0x0eba, 0x854: 0x0f6a, 0x855: 0x108e, 0x856: 0x1132, 0x857: 0x1196, - 0x858: 0x13de, 0x859: 0x126e, 0x85a: 0x1406, 0x85b: 0x1482, 0x85c: 0x0812, 0x85d: 0x083e, - 0x85e: 0x0926, 0x85f: 0x0eaa, 0x860: 0x12f6, 0x861: 0x133e, 0x862: 0x0b1e, 0x863: 0x0b8e, - 0x864: 0x0c52, 0x865: 0x0db2, 0x866: 0x10da, 0x867: 0x0f26, 0x868: 0x073e, 0x869: 0x0982, - 0x86a: 0x0a66, 0x86b: 0x0aca, 0x86c: 0x0b9a, 0x86d: 0x0f42, 0x86e: 0x0f5e, 0x86f: 0x116e, - 0x870: 0x118e, 0x871: 0x1466, 0x872: 0x14e6, 0x873: 0x14f6, 0x874: 0x1532, 0x875: 0x0756, - 0x876: 0x1082, 0x877: 0x1452, 0x878: 0x14ce, 0x879: 0x0bb2, 0x87a: 0x071a, 0x87b: 0x077a, - 0x87c: 0x0a6a, 0x87d: 0x0a8a, 0x87e: 0x0cb2, 0x87f: 0x0d76, + 0x840: 0x0a0a, 0x841: 0x0b12, 0x842: 0x0c2a, 0x843: 0x0dba, 0x844: 0x0f76, 0x845: 0x113a, + 0x846: 0x1592, 0x847: 0x1676, 0x848: 0x16ca, 0x849: 0x16e2, 0x84a: 0x0932, 0x84b: 0x0dee, + 0x84c: 0x0e9e, 0x84d: 0x14e6, 0x84e: 0x0bf6, 0x84f: 0x0cd2, 0x850: 0x0cee, 0x851: 0x0d7e, + 0x852: 0x0f66, 0x853: 0x0fb2, 0x854: 0x1062, 0x855: 0x1186, 0x856: 0x122a, 0x857: 0x128e, + 0x858: 0x14d6, 0x859: 0x1366, 0x85a: 0x14fe, 0x85b: 0x157a, 0x85c: 0x090a, 0x85d: 0x0936, + 0x85e: 0x0a1e, 0x85f: 0x0fa2, 0x860: 0x13ee, 0x861: 0x1436, 0x862: 0x0c16, 0x863: 0x0c86, + 0x864: 0x0d4a, 0x865: 0x0eaa, 0x866: 0x11d2, 0x867: 0x101e, 0x868: 0x0836, 0x869: 0x0a7a, + 0x86a: 0x0b5e, 0x86b: 0x0bc2, 0x86c: 0x0c92, 0x86d: 0x103a, 0x86e: 0x1056, 0x86f: 0x1266, + 0x870: 0x1286, 0x871: 0x155e, 0x872: 0x15de, 0x873: 0x15ee, 0x874: 0x162a, 0x875: 0x084e, + 0x876: 0x117a, 0x877: 0x154a, 0x878: 0x15c6, 0x879: 0x0caa, 0x87a: 0x0812, 0x87b: 0x0872, + 0x87c: 0x0b62, 0x87d: 0x0b82, 0x87e: 0x0daa, 0x87f: 0x0e6e, // Block 0x22, offset 0x880 - 0x880: 0x0ec6, 0x881: 0x0fce, 0x882: 0x127a, 0x883: 0x141a, 0x884: 0x1626, 0x885: 0x0ce6, - 0x886: 0x14a6, 0x887: 0x0836, 0x888: 0x0d32, 0x889: 0x0d3e, 0x88a: 0x0e12, 0x88b: 0x0e4a, - 0x88c: 0x0f4e, 0x88d: 0x0faa, 0x88e: 0x102a, 0x88f: 0x110e, 0x890: 0x153e, 0x891: 0x07b2, - 0x892: 0x0c06, 0x893: 0x14b6, 0x894: 0x076a, 0x895: 0x0aae, 0x896: 0x0e32, 0x897: 0x13e2, - 0x898: 0x0b6a, 0x899: 0x0bba, 0x89a: 0x0d46, 0x89b: 0x0f32, 0x89c: 0x14be, 0x89d: 0x081a, - 0x89e: 0x0902, 0x89f: 0x0a9a, 0x8a0: 0x0cd6, 0x8a1: 0x0d22, 0x8a2: 0x0d62, 0x8a3: 0x0df6, - 0x8a4: 0x0f4a, 0x8a5: 0x0fbe, 0x8a6: 0x115a, 0x8a7: 0x12fa, 0x8a8: 0x1306, 0x8a9: 0x145a, - 0x8aa: 0x14da, 0x8ab: 0x0886, 0x8ac: 0x0e4e, 0x8ad: 0x0906, 0x8ae: 0x0eca, 0x8af: 0x0f6e, - 0x8b0: 0x128a, 0x8b1: 0x14c2, 0x8b2: 0x15ae, 0x8b3: 0x15d6, 0x8b4: 0x0d3a, 0x8b5: 0x0e2a, - 0x8b6: 0x11c6, 0x8b7: 0x10ba, 0x8b8: 0x10c6, 0x8b9: 0x10ea, 0x8ba: 0x0f1a, 0x8bb: 0x0ea2, - 0x8bc: 0x1366, 0x8bd: 0x0736, 0x8be: 0x122e, 0x8bf: 0x081e, + 0x880: 0x0fbe, 0x881: 0x10c6, 0x882: 0x1372, 0x883: 0x1512, 0x884: 0x171e, 0x885: 0x0dde, + 0x886: 0x159e, 0x887: 0x092e, 0x888: 0x0e2a, 0x889: 0x0e36, 0x88a: 0x0f0a, 0x88b: 0x0f42, + 0x88c: 0x1046, 0x88d: 0x10a2, 0x88e: 0x1122, 0x88f: 0x1206, 0x890: 0x1636, 0x891: 0x08aa, + 0x892: 0x0cfe, 0x893: 0x15ae, 0x894: 0x0862, 0x895: 0x0ba6, 0x896: 0x0f2a, 0x897: 0x14da, + 0x898: 0x0c62, 0x899: 0x0cb2, 0x89a: 0x0e3e, 0x89b: 0x102a, 0x89c: 0x15b6, 0x89d: 0x0912, + 0x89e: 0x09fa, 0x89f: 0x0b92, 0x8a0: 0x0dce, 0x8a1: 0x0e1a, 0x8a2: 0x0e5a, 0x8a3: 0x0eee, + 0x8a4: 0x1042, 0x8a5: 0x10b6, 0x8a6: 0x1252, 0x8a7: 0x13f2, 0x8a8: 0x13fe, 0x8a9: 0x1552, + 0x8aa: 0x15d2, 0x8ab: 0x097e, 0x8ac: 0x0f46, 0x8ad: 0x09fe, 0x8ae: 0x0fc2, 0x8af: 0x1066, + 0x8b0: 0x1382, 0x8b1: 0x15ba, 0x8b2: 0x16a6, 0x8b3: 0x16ce, 0x8b4: 0x0e32, 0x8b5: 0x0f22, + 0x8b6: 0x12be, 0x8b7: 0x11b2, 0x8b8: 0x11be, 0x8b9: 0x11e2, 0x8ba: 0x1012, 0x8bb: 0x0f9a, + 0x8bc: 0x145e, 0x8bd: 0x082e, 0x8be: 0x1326, 0x8bf: 0x0916, // Block 0x23, offset 0x8c0 - 0x8c0: 0x080e, 0x8c1: 0x0b0e, 0x8c2: 0x0c2e, 0x8c3: 0x10f6, 0x8c4: 0x0a56, 0x8c5: 0x0e06, - 0x8c6: 0x0cf2, 0x8c7: 0x13ea, 0x8c8: 0x12ea, 0x8c9: 0x14ae, 0x8ca: 0x1326, 0x8cb: 0x0b2a, - 0x8cc: 0x078a, 0x8cd: 0x095e, 0x8d0: 0x09b2, - 0x8d2: 0x0ce2, 0x8d5: 0x07fa, 0x8d6: 0x0f22, 0x8d7: 0x0fe6, - 0x8d8: 0x104a, 0x8d9: 0x1066, 0x8da: 0x106a, 0x8db: 0x107e, 0x8dc: 0x14fe, 0x8dd: 0x10ee, - 0x8de: 0x1172, 0x8e0: 0x1292, 0x8e2: 0x1356, - 0x8e5: 0x140a, 0x8e6: 0x1436, - 0x8ea: 0x1552, 0x8eb: 0x1556, 0x8ec: 0x155a, 0x8ed: 0x15be, 0x8ee: 0x142e, 0x8ef: 0x14ca, - 0x8f0: 0x075a, 0x8f1: 0x077e, 0x8f2: 0x0792, 0x8f3: 0x084e, 0x8f4: 0x085a, 0x8f5: 0x089a, - 0x8f6: 0x094e, 0x8f7: 0x096a, 0x8f8: 0x0972, 0x8f9: 0x09ae, 0x8fa: 0x09ba, 0x8fb: 0x0a96, - 0x8fc: 0x0a9e, 0x8fd: 0x0ba6, 0x8fe: 0x0bce, 0x8ff: 0x0bd6, + 0x8c0: 0x0906, 0x8c1: 0x0c06, 0x8c2: 0x0d26, 0x8c3: 0x11ee, 0x8c4: 0x0b4e, 0x8c5: 0x0efe, + 0x8c6: 0x0dea, 0x8c7: 0x14e2, 0x8c8: 0x13e2, 0x8c9: 0x15a6, 0x8ca: 0x141e, 0x8cb: 0x0c22, + 0x8cc: 0x0882, 0x8cd: 0x0a56, 0x8d0: 0x0aaa, + 0x8d2: 0x0dda, 0x8d5: 0x08f2, 0x8d6: 0x101a, 0x8d7: 0x10de, + 0x8d8: 0x1142, 0x8d9: 0x115e, 0x8da: 0x1162, 0x8db: 0x1176, 0x8dc: 0x15f6, 0x8dd: 0x11e6, + 0x8de: 0x126a, 0x8e0: 0x138a, 0x8e2: 0x144e, + 0x8e5: 0x1502, 0x8e6: 0x152e, + 0x8ea: 0x164a, 0x8eb: 0x164e, 0x8ec: 0x1652, 0x8ed: 0x16b6, 0x8ee: 0x1526, 0x8ef: 0x15c2, + 0x8f0: 0x0852, 0x8f1: 0x0876, 0x8f2: 0x088a, 0x8f3: 0x0946, 0x8f4: 0x0952, 0x8f5: 0x0992, + 0x8f6: 0x0a46, 0x8f7: 0x0a62, 0x8f8: 0x0a6a, 0x8f9: 0x0aa6, 0x8fa: 0x0ab2, 0x8fb: 0x0b8e, + 0x8fc: 0x0b96, 0x8fd: 0x0c9e, 0x8fe: 0x0cc6, 0x8ff: 0x0cce, // Block 0x24, offset 0x900 - 0x900: 0x0bee, 0x901: 0x0c9a, 0x902: 0x0cca, 0x903: 0x0cea, 0x904: 0x0d5a, 0x905: 0x0e1e, - 0x906: 0x0e3a, 0x907: 0x0e6a, 0x908: 0x0ebe, 0x909: 0x0ede, 0x90a: 0x0f52, 0x90b: 0x1032, - 0x90c: 0x104e, 0x90d: 0x1056, 0x90e: 0x1052, 0x90f: 0x105a, 0x910: 0x105e, 0x911: 0x1062, - 0x912: 0x1076, 0x913: 0x107a, 0x914: 0x109e, 0x915: 0x10b2, 0x916: 0x10ce, 0x917: 0x1132, - 0x918: 0x113a, 0x919: 0x1142, 0x91a: 0x1156, 0x91b: 0x117e, 0x91c: 0x11ce, 0x91d: 0x1202, - 0x91e: 0x1202, 0x91f: 0x126a, 0x920: 0x1312, 0x921: 0x132a, 0x922: 0x135e, 0x923: 0x1362, - 0x924: 0x13a6, 0x925: 0x13aa, 0x926: 0x1402, 0x927: 0x140a, 0x928: 0x14de, 0x929: 0x1522, - 0x92a: 0x153a, 0x92b: 0x0b9e, 0x92c: 0x1721, 0x92d: 0x11e6, - 0x930: 0x06e2, 0x931: 0x07e6, 0x932: 0x07a6, 0x933: 0x074e, 0x934: 0x078e, 0x935: 0x07ba, - 0x936: 0x084a, 0x937: 0x0866, 0x938: 0x094e, 0x939: 0x093a, 0x93a: 0x094a, 0x93b: 0x0966, - 0x93c: 0x09b2, 0x93d: 0x09c2, 0x93e: 0x0a06, 0x93f: 0x0a12, + 0x900: 0x0ce6, 0x901: 0x0d92, 0x902: 0x0dc2, 0x903: 0x0de2, 0x904: 0x0e52, 0x905: 0x0f16, + 0x906: 0x0f32, 0x907: 0x0f62, 0x908: 0x0fb6, 0x909: 0x0fd6, 0x90a: 0x104a, 0x90b: 0x112a, + 0x90c: 0x1146, 0x90d: 0x114e, 0x90e: 0x114a, 0x90f: 0x1152, 0x910: 0x1156, 0x911: 0x115a, + 0x912: 0x116e, 0x913: 0x1172, 0x914: 0x1196, 0x915: 0x11aa, 0x916: 0x11c6, 0x917: 0x122a, + 0x918: 0x1232, 0x919: 0x123a, 0x91a: 0x124e, 0x91b: 0x1276, 0x91c: 0x12c6, 0x91d: 0x12fa, + 0x91e: 0x12fa, 0x91f: 0x1362, 0x920: 0x140a, 0x921: 0x1422, 0x922: 0x1456, 0x923: 0x145a, + 0x924: 0x149e, 0x925: 0x14a2, 0x926: 0x14fa, 0x927: 0x1502, 0x928: 0x15d6, 0x929: 0x161a, + 0x92a: 0x1632, 0x92b: 0x0c96, 0x92c: 0x184b, 0x92d: 0x12de, + 0x930: 0x07da, 0x931: 0x08de, 0x932: 0x089e, 0x933: 0x0846, 0x934: 0x0886, 0x935: 0x08b2, + 0x936: 0x0942, 0x937: 0x095e, 0x938: 0x0a46, 0x939: 0x0a32, 0x93a: 0x0a42, 0x93b: 0x0a5e, + 0x93c: 0x0aaa, 0x93d: 0x0aba, 0x93e: 0x0afe, 0x93f: 0x0b0a, // Block 0x25, offset 0x940 - 0x940: 0x0a2e, 0x941: 0x0a3e, 0x942: 0x0b26, 0x943: 0x0b2e, 0x944: 0x0b5e, 0x945: 0x0b7e, - 0x946: 0x0bae, 0x947: 0x0bc6, 0x948: 0x0bb6, 0x949: 0x0bd6, 0x94a: 0x0bca, 0x94b: 0x0bee, - 0x94c: 0x0c0a, 0x94d: 0x0c62, 0x94e: 0x0c6e, 0x94f: 0x0c76, 0x950: 0x0c9e, 0x951: 0x0ce2, - 0x952: 0x0d12, 0x953: 0x0d16, 0x954: 0x0d2a, 0x955: 0x0daa, 0x956: 0x0dba, 0x957: 0x0e12, - 0x958: 0x0e5e, 0x959: 0x0e56, 0x95a: 0x0e6a, 0x95b: 0x0e86, 0x95c: 0x0ebe, 0x95d: 0x1016, - 0x95e: 0x0ee2, 0x95f: 0x0f16, 0x960: 0x0f22, 0x961: 0x0f62, 0x962: 0x0f7e, 0x963: 0x0fa2, - 0x964: 0x0fc6, 0x965: 0x0fca, 0x966: 0x0fe6, 0x967: 0x0fea, 0x968: 0x0ffa, 0x969: 0x100e, - 0x96a: 0x100a, 0x96b: 0x103a, 0x96c: 0x10b6, 0x96d: 0x10ce, 0x96e: 0x10e6, 0x96f: 0x111e, - 0x970: 0x1132, 0x971: 0x114e, 0x972: 0x117e, 0x973: 0x1232, 0x974: 0x125a, 0x975: 0x12ce, - 0x976: 0x1316, 0x977: 0x1322, 0x978: 0x132a, 0x979: 0x1342, 0x97a: 0x1356, 0x97b: 0x1346, - 0x97c: 0x135e, 0x97d: 0x135a, 0x97e: 0x1352, 0x97f: 0x1362, + 0x940: 0x0b26, 0x941: 0x0b36, 0x942: 0x0c1e, 0x943: 0x0c26, 0x944: 0x0c56, 0x945: 0x0c76, + 0x946: 0x0ca6, 0x947: 0x0cbe, 0x948: 0x0cae, 0x949: 0x0cce, 0x94a: 0x0cc2, 0x94b: 0x0ce6, + 0x94c: 0x0d02, 0x94d: 0x0d5a, 0x94e: 0x0d66, 0x94f: 0x0d6e, 0x950: 0x0d96, 0x951: 0x0dda, + 0x952: 0x0e0a, 0x953: 0x0e0e, 0x954: 0x0e22, 0x955: 0x0ea2, 0x956: 0x0eb2, 0x957: 0x0f0a, + 0x958: 0x0f56, 0x959: 0x0f4e, 0x95a: 0x0f62, 0x95b: 0x0f7e, 0x95c: 0x0fb6, 0x95d: 0x110e, + 0x95e: 0x0fda, 0x95f: 0x100e, 0x960: 0x101a, 0x961: 0x105a, 0x962: 0x1076, 0x963: 0x109a, + 0x964: 0x10be, 0x965: 0x10c2, 0x966: 0x10de, 0x967: 0x10e2, 0x968: 0x10f2, 0x969: 0x1106, + 0x96a: 0x1102, 0x96b: 0x1132, 0x96c: 0x11ae, 0x96d: 0x11c6, 0x96e: 0x11de, 0x96f: 0x1216, + 0x970: 0x122a, 0x971: 0x1246, 0x972: 0x1276, 0x973: 0x132a, 0x974: 0x1352, 0x975: 0x13c6, + 0x976: 0x140e, 0x977: 0x141a, 0x978: 0x1422, 0x979: 0x143a, 0x97a: 0x144e, 0x97b: 0x143e, + 0x97c: 0x1456, 0x97d: 0x1452, 0x97e: 0x144a, 0x97f: 0x145a, // Block 0x26, offset 0x980 - 0x980: 0x136e, 0x981: 0x13aa, 0x982: 0x13e6, 0x983: 0x1416, 0x984: 0x144e, 0x985: 0x146e, - 0x986: 0x14ba, 0x987: 0x14de, 0x988: 0x14fe, 0x989: 0x1512, 0x98a: 0x1522, 0x98b: 0x152e, - 0x98c: 0x153a, 0x98d: 0x158e, 0x98e: 0x162e, 0x98f: 0x16b8, 0x990: 0x16b3, 0x991: 0x16e5, - 0x992: 0x060a, 0x993: 0x0632, 0x994: 0x0636, 0x995: 0x1767, 0x996: 0x1794, 0x997: 0x180c, - 0x998: 0x161a, 0x999: 0x162a, + 0x980: 0x1466, 0x981: 0x14a2, 0x982: 0x14de, 0x983: 0x150e, 0x984: 0x1546, 0x985: 0x1566, + 0x986: 0x15b2, 0x987: 0x15d6, 0x988: 0x15f6, 0x989: 0x160a, 0x98a: 0x161a, 0x98b: 0x1626, + 0x98c: 0x1632, 0x98d: 0x1686, 0x98e: 0x1726, 0x98f: 0x17e2, 0x990: 0x17dd, 0x991: 0x180f, + 0x992: 0x0702, 0x993: 0x072a, 0x994: 0x072e, 0x995: 0x1891, 0x996: 0x18be, 0x997: 0x1936, + 0x998: 0x1712, 0x999: 0x1722, // Block 0x27, offset 0x9c0 - 0x9c0: 0x06fe, 0x9c1: 0x06f6, 0x9c2: 0x0706, 0x9c3: 0x164a, 0x9c4: 0x074a, 0x9c5: 0x075a, - 0x9c6: 0x075e, 0x9c7: 0x0766, 0x9c8: 0x076e, 0x9c9: 0x0772, 0x9ca: 0x077e, 0x9cb: 0x0776, - 0x9cc: 0x05b6, 0x9cd: 0x165e, 0x9ce: 0x0792, 0x9cf: 0x0796, 0x9d0: 0x079a, 0x9d1: 0x07b6, - 0x9d2: 0x164f, 0x9d3: 0x05ba, 0x9d4: 0x07a2, 0x9d5: 0x07c2, 0x9d6: 0x1659, 0x9d7: 0x07d2, - 0x9d8: 0x07da, 0x9d9: 0x073a, 0x9da: 0x07e2, 0x9db: 0x07e6, 0x9dc: 0x1834, 0x9dd: 0x0802, - 0x9de: 0x080a, 0x9df: 0x05c2, 0x9e0: 0x0822, 0x9e1: 0x0826, 0x9e2: 0x082e, 0x9e3: 0x0832, - 0x9e4: 0x05c6, 0x9e5: 0x084a, 0x9e6: 0x084e, 0x9e7: 0x085a, 0x9e8: 0x0866, 0x9e9: 0x086a, - 0x9ea: 0x086e, 0x9eb: 0x0876, 0x9ec: 0x0896, 0x9ed: 0x089a, 0x9ee: 0x08a2, 0x9ef: 0x08b2, - 0x9f0: 0x08ba, 0x9f1: 0x08be, 0x9f2: 0x08be, 0x9f3: 0x08be, 0x9f4: 0x166d, 0x9f5: 0x0e96, - 0x9f6: 0x08d2, 0x9f7: 0x08da, 0x9f8: 0x1672, 0x9f9: 0x08e6, 0x9fa: 0x08ee, 0x9fb: 0x08f6, - 0x9fc: 0x091e, 0x9fd: 0x090a, 0x9fe: 0x0916, 0x9ff: 0x091a, + 0x9c0: 0x07f6, 0x9c1: 0x07ee, 0x9c2: 0x07fe, 0x9c3: 0x1774, 0x9c4: 0x0842, 0x9c5: 0x0852, + 0x9c6: 0x0856, 0x9c7: 0x085e, 0x9c8: 0x0866, 0x9c9: 0x086a, 0x9ca: 0x0876, 0x9cb: 0x086e, + 0x9cc: 0x06ae, 0x9cd: 0x1788, 0x9ce: 0x088a, 0x9cf: 0x088e, 0x9d0: 0x0892, 0x9d1: 0x08ae, + 0x9d2: 0x1779, 0x9d3: 0x06b2, 0x9d4: 0x089a, 0x9d5: 0x08ba, 0x9d6: 0x1783, 0x9d7: 0x08ca, + 0x9d8: 0x08d2, 0x9d9: 0x0832, 0x9da: 0x08da, 0x9db: 0x08de, 0x9dc: 0x195e, 0x9dd: 0x08fa, + 0x9de: 0x0902, 0x9df: 0x06ba, 0x9e0: 0x091a, 0x9e1: 0x091e, 0x9e2: 0x0926, 0x9e3: 0x092a, + 0x9e4: 0x06be, 0x9e5: 0x0942, 0x9e6: 0x0946, 0x9e7: 0x0952, 0x9e8: 0x095e, 0x9e9: 0x0962, + 0x9ea: 0x0966, 0x9eb: 0x096e, 0x9ec: 0x098e, 0x9ed: 0x0992, 0x9ee: 0x099a, 0x9ef: 0x09aa, + 0x9f0: 0x09b2, 0x9f1: 0x09b6, 0x9f2: 0x09b6, 0x9f3: 0x09b6, 0x9f4: 0x1797, 0x9f5: 0x0f8e, + 0x9f6: 0x09ca, 0x9f7: 0x09d2, 0x9f8: 0x179c, 0x9f9: 0x09de, 0x9fa: 0x09e6, 0x9fb: 0x09ee, + 0x9fc: 0x0a16, 0x9fd: 0x0a02, 0x9fe: 0x0a0e, 0x9ff: 0x0a12, // Block 0x28, offset 0xa00 - 0xa00: 0x0922, 0xa01: 0x092a, 0xa02: 0x092e, 0xa03: 0x0936, 0xa04: 0x093e, 0xa05: 0x0942, - 0xa06: 0x0942, 0xa07: 0x094a, 0xa08: 0x0952, 0xa09: 0x0956, 0xa0a: 0x0962, 0xa0b: 0x0986, - 0xa0c: 0x096a, 0xa0d: 0x098a, 0xa0e: 0x096e, 0xa0f: 0x0976, 0xa10: 0x080e, 0xa11: 0x09d2, - 0xa12: 0x099a, 0xa13: 0x099e, 0xa14: 0x09a2, 0xa15: 0x0996, 0xa16: 0x09aa, 0xa17: 0x09a6, - 0xa18: 0x09be, 0xa19: 0x1677, 0xa1a: 0x09da, 0xa1b: 0x09de, 0xa1c: 0x09e6, 0xa1d: 0x09f2, - 0xa1e: 0x09fa, 0xa1f: 0x0a16, 0xa20: 0x167c, 0xa21: 0x1681, 0xa22: 0x0a22, 0xa23: 0x0a26, - 0xa24: 0x0a2a, 0xa25: 0x0a1e, 0xa26: 0x0a32, 0xa27: 0x05ca, 0xa28: 0x05ce, 0xa29: 0x0a3a, - 0xa2a: 0x0a42, 0xa2b: 0x0a42, 0xa2c: 0x1686, 0xa2d: 0x0a5e, 0xa2e: 0x0a62, 0xa2f: 0x0a66, - 0xa30: 0x0a6e, 0xa31: 0x168b, 0xa32: 0x0a76, 0xa33: 0x0a7a, 0xa34: 0x0b52, 0xa35: 0x0a82, - 0xa36: 0x05d2, 0xa37: 0x0a8e, 0xa38: 0x0a9e, 0xa39: 0x0aaa, 0xa3a: 0x0aa6, 0xa3b: 0x1695, - 0xa3c: 0x0ab2, 0xa3d: 0x169a, 0xa3e: 0x0abe, 0xa3f: 0x0aba, + 0xa00: 0x0a1a, 0xa01: 0x0a22, 0xa02: 0x0a26, 0xa03: 0x0a2e, 0xa04: 0x0a36, 0xa05: 0x0a3a, + 0xa06: 0x0a3a, 0xa07: 0x0a42, 0xa08: 0x0a4a, 0xa09: 0x0a4e, 0xa0a: 0x0a5a, 0xa0b: 0x0a7e, + 0xa0c: 0x0a62, 0xa0d: 0x0a82, 0xa0e: 0x0a66, 0xa0f: 0x0a6e, 0xa10: 0x0906, 0xa11: 0x0aca, + 0xa12: 0x0a92, 0xa13: 0x0a96, 0xa14: 0x0a9a, 0xa15: 0x0a8e, 0xa16: 0x0aa2, 0xa17: 0x0a9e, + 0xa18: 0x0ab6, 0xa19: 0x17a1, 0xa1a: 0x0ad2, 0xa1b: 0x0ad6, 0xa1c: 0x0ade, 0xa1d: 0x0aea, + 0xa1e: 0x0af2, 0xa1f: 0x0b0e, 0xa20: 0x17a6, 0xa21: 0x17ab, 0xa22: 0x0b1a, 0xa23: 0x0b1e, + 0xa24: 0x0b22, 0xa25: 0x0b16, 0xa26: 0x0b2a, 0xa27: 0x06c2, 0xa28: 0x06c6, 0xa29: 0x0b32, + 0xa2a: 0x0b3a, 0xa2b: 0x0b3a, 0xa2c: 0x17b0, 0xa2d: 0x0b56, 0xa2e: 0x0b5a, 0xa2f: 0x0b5e, + 0xa30: 0x0b66, 0xa31: 0x17b5, 0xa32: 0x0b6e, 0xa33: 0x0b72, 0xa34: 0x0c4a, 0xa35: 0x0b7a, + 0xa36: 0x06ca, 0xa37: 0x0b86, 0xa38: 0x0b96, 0xa39: 0x0ba2, 0xa3a: 0x0b9e, 0xa3b: 0x17bf, + 0xa3c: 0x0baa, 0xa3d: 0x17c4, 0xa3e: 0x0bb6, 0xa3f: 0x0bb2, // Block 0x29, offset 0xa40 - 0xa40: 0x0ac2, 0xa41: 0x0ad2, 0xa42: 0x0ad6, 0xa43: 0x05d6, 0xa44: 0x0ae6, 0xa45: 0x0aee, - 0xa46: 0x0af2, 0xa47: 0x0af6, 0xa48: 0x05da, 0xa49: 0x169f, 0xa4a: 0x05de, 0xa4b: 0x0b12, - 0xa4c: 0x0b16, 0xa4d: 0x0b1a, 0xa4e: 0x0b22, 0xa4f: 0x1866, 0xa50: 0x0b3a, 0xa51: 0x16a9, - 0xa52: 0x16a9, 0xa53: 0x11da, 0xa54: 0x0b4a, 0xa55: 0x0b4a, 0xa56: 0x05e2, 0xa57: 0x16cc, - 0xa58: 0x179e, 0xa59: 0x0b5a, 0xa5a: 0x0b62, 0xa5b: 0x05e6, 0xa5c: 0x0b76, 0xa5d: 0x0b86, - 0xa5e: 0x0b8a, 0xa5f: 0x0b92, 0xa60: 0x0ba2, 0xa61: 0x05ee, 0xa62: 0x05ea, 0xa63: 0x0ba6, - 0xa64: 0x16ae, 0xa65: 0x0baa, 0xa66: 0x0bbe, 0xa67: 0x0bc2, 0xa68: 0x0bc6, 0xa69: 0x0bc2, - 0xa6a: 0x0bd2, 0xa6b: 0x0bd6, 0xa6c: 0x0be6, 0xa6d: 0x0bde, 0xa6e: 0x0be2, 0xa6f: 0x0bea, - 0xa70: 0x0bee, 0xa71: 0x0bf2, 0xa72: 0x0bfe, 0xa73: 0x0c02, 0xa74: 0x0c1a, 0xa75: 0x0c22, - 0xa76: 0x0c32, 0xa77: 0x0c46, 0xa78: 0x16bd, 0xa79: 0x0c42, 0xa7a: 0x0c36, 0xa7b: 0x0c4e, - 0xa7c: 0x0c56, 0xa7d: 0x0c6a, 0xa7e: 0x16c2, 0xa7f: 0x0c72, + 0xa40: 0x0bba, 0xa41: 0x0bca, 0xa42: 0x0bce, 0xa43: 0x06ce, 0xa44: 0x0bde, 0xa45: 0x0be6, + 0xa46: 0x0bea, 0xa47: 0x0bee, 0xa48: 0x06d2, 0xa49: 0x17c9, 0xa4a: 0x06d6, 0xa4b: 0x0c0a, + 0xa4c: 0x0c0e, 0xa4d: 0x0c12, 0xa4e: 0x0c1a, 0xa4f: 0x1990, 0xa50: 0x0c32, 0xa51: 0x17d3, + 0xa52: 0x17d3, 0xa53: 0x12d2, 0xa54: 0x0c42, 0xa55: 0x0c42, 0xa56: 0x06da, 0xa57: 0x17f6, + 0xa58: 0x18c8, 0xa59: 0x0c52, 0xa5a: 0x0c5a, 0xa5b: 0x06de, 0xa5c: 0x0c6e, 0xa5d: 0x0c7e, + 0xa5e: 0x0c82, 0xa5f: 0x0c8a, 0xa60: 0x0c9a, 0xa61: 0x06e6, 0xa62: 0x06e2, 0xa63: 0x0c9e, + 0xa64: 0x17d8, 0xa65: 0x0ca2, 0xa66: 0x0cb6, 0xa67: 0x0cba, 0xa68: 0x0cbe, 0xa69: 0x0cba, + 0xa6a: 0x0cca, 0xa6b: 0x0cce, 0xa6c: 0x0cde, 0xa6d: 0x0cd6, 0xa6e: 0x0cda, 0xa6f: 0x0ce2, + 0xa70: 0x0ce6, 0xa71: 0x0cea, 0xa72: 0x0cf6, 0xa73: 0x0cfa, 0xa74: 0x0d12, 0xa75: 0x0d1a, + 0xa76: 0x0d2a, 0xa77: 0x0d3e, 0xa78: 0x17e7, 0xa79: 0x0d3a, 0xa7a: 0x0d2e, 0xa7b: 0x0d46, + 0xa7c: 0x0d4e, 0xa7d: 0x0d62, 0xa7e: 0x17ec, 0xa7f: 0x0d6a, // Block 0x2a, offset 0xa80 - 0xa80: 0x0c66, 0xa81: 0x0c5e, 0xa82: 0x05f2, 0xa83: 0x0c7a, 0xa84: 0x0c82, 0xa85: 0x0c8a, - 0xa86: 0x0c7e, 0xa87: 0x05f6, 0xa88: 0x0c9a, 0xa89: 0x0ca2, 0xa8a: 0x16c7, 0xa8b: 0x0cce, - 0xa8c: 0x0d02, 0xa8d: 0x0cde, 0xa8e: 0x0602, 0xa8f: 0x0cea, 0xa90: 0x05fe, 0xa91: 0x05fa, - 0xa92: 0x07c6, 0xa93: 0x07ca, 0xa94: 0x0d06, 0xa95: 0x0cee, 0xa96: 0x11ae, 0xa97: 0x0666, - 0xa98: 0x0d12, 0xa99: 0x0d16, 0xa9a: 0x0d1a, 0xa9b: 0x0d2e, 0xa9c: 0x0d26, 0xa9d: 0x16e0, - 0xa9e: 0x0606, 0xa9f: 0x0d42, 0xaa0: 0x0d36, 0xaa1: 0x0d52, 0xaa2: 0x0d5a, 0xaa3: 0x16ea, - 0xaa4: 0x0d5e, 0xaa5: 0x0d4a, 0xaa6: 0x0d66, 0xaa7: 0x060a, 0xaa8: 0x0d6a, 0xaa9: 0x0d6e, - 0xaaa: 0x0d72, 0xaab: 0x0d7e, 0xaac: 0x16ef, 0xaad: 0x0d86, 0xaae: 0x060e, 0xaaf: 0x0d92, - 0xab0: 0x16f4, 0xab1: 0x0d96, 0xab2: 0x0612, 0xab3: 0x0da2, 0xab4: 0x0dae, 0xab5: 0x0dba, - 0xab6: 0x0dbe, 0xab7: 0x16f9, 0xab8: 0x1690, 0xab9: 0x16fe, 0xaba: 0x0dde, 0xabb: 0x1703, - 0xabc: 0x0dea, 0xabd: 0x0df2, 0xabe: 0x0de2, 0xabf: 0x0dfe, + 0xa80: 0x0d5e, 0xa81: 0x0d56, 0xa82: 0x06ea, 0xa83: 0x0d72, 0xa84: 0x0d7a, 0xa85: 0x0d82, + 0xa86: 0x0d76, 0xa87: 0x06ee, 0xa88: 0x0d92, 0xa89: 0x0d9a, 0xa8a: 0x17f1, 0xa8b: 0x0dc6, + 0xa8c: 0x0dfa, 0xa8d: 0x0dd6, 0xa8e: 0x06fa, 0xa8f: 0x0de2, 0xa90: 0x06f6, 0xa91: 0x06f2, + 0xa92: 0x08be, 0xa93: 0x08c2, 0xa94: 0x0dfe, 0xa95: 0x0de6, 0xa96: 0x12a6, 0xa97: 0x075e, + 0xa98: 0x0e0a, 0xa99: 0x0e0e, 0xa9a: 0x0e12, 0xa9b: 0x0e26, 0xa9c: 0x0e1e, 0xa9d: 0x180a, + 0xa9e: 0x06fe, 0xa9f: 0x0e3a, 0xaa0: 0x0e2e, 0xaa1: 0x0e4a, 0xaa2: 0x0e52, 0xaa3: 0x1814, + 0xaa4: 0x0e56, 0xaa5: 0x0e42, 0xaa6: 0x0e5e, 0xaa7: 0x0702, 0xaa8: 0x0e62, 0xaa9: 0x0e66, + 0xaaa: 0x0e6a, 0xaab: 0x0e76, 0xaac: 0x1819, 0xaad: 0x0e7e, 0xaae: 0x0706, 0xaaf: 0x0e8a, + 0xab0: 0x181e, 0xab1: 0x0e8e, 0xab2: 0x070a, 0xab3: 0x0e9a, 0xab4: 0x0ea6, 0xab5: 0x0eb2, + 0xab6: 0x0eb6, 0xab7: 0x1823, 0xab8: 0x17ba, 0xab9: 0x1828, 0xaba: 0x0ed6, 0xabb: 0x182d, + 0xabc: 0x0ee2, 0xabd: 0x0eea, 0xabe: 0x0eda, 0xabf: 0x0ef6, // Block 0x2b, offset 0xac0 - 0xac0: 0x0e0e, 0xac1: 0x0e1e, 0xac2: 0x0e12, 0xac3: 0x0e16, 0xac4: 0x0e22, 0xac5: 0x0e26, - 0xac6: 0x1708, 0xac7: 0x0e0a, 0xac8: 0x0e3e, 0xac9: 0x0e42, 0xaca: 0x0616, 0xacb: 0x0e56, - 0xacc: 0x0e52, 0xacd: 0x170d, 0xace: 0x0e36, 0xacf: 0x0e72, 0xad0: 0x1712, 0xad1: 0x1717, - 0xad2: 0x0e76, 0xad3: 0x0e8a, 0xad4: 0x0e86, 0xad5: 0x0e82, 0xad6: 0x061a, 0xad7: 0x0e8e, - 0xad8: 0x0e9e, 0xad9: 0x0e9a, 0xada: 0x0ea6, 0xadb: 0x1654, 0xadc: 0x0eb6, 0xadd: 0x171c, - 0xade: 0x0ec2, 0xadf: 0x1726, 0xae0: 0x0ed6, 0xae1: 0x0ee2, 0xae2: 0x0ef6, 0xae3: 0x172b, - 0xae4: 0x0f0a, 0xae5: 0x0f0e, 0xae6: 0x1730, 0xae7: 0x1735, 0xae8: 0x0f2a, 0xae9: 0x0f3a, - 0xaea: 0x061e, 0xaeb: 0x0f3e, 0xaec: 0x0622, 0xaed: 0x0622, 0xaee: 0x0f56, 0xaef: 0x0f5a, - 0xaf0: 0x0f62, 0xaf1: 0x0f66, 0xaf2: 0x0f72, 0xaf3: 0x0626, 0xaf4: 0x0f8a, 0xaf5: 0x173a, - 0xaf6: 0x0fa6, 0xaf7: 0x173f, 0xaf8: 0x0fb2, 0xaf9: 0x16a4, 0xafa: 0x0fc2, 0xafb: 0x1744, - 0xafc: 0x1749, 0xafd: 0x174e, 0xafe: 0x062a, 0xaff: 0x062e, + 0xac0: 0x0f06, 0xac1: 0x0f16, 0xac2: 0x0f0a, 0xac3: 0x0f0e, 0xac4: 0x0f1a, 0xac5: 0x0f1e, + 0xac6: 0x1832, 0xac7: 0x0f02, 0xac8: 0x0f36, 0xac9: 0x0f3a, 0xaca: 0x070e, 0xacb: 0x0f4e, + 0xacc: 0x0f4a, 0xacd: 0x1837, 0xace: 0x0f2e, 0xacf: 0x0f6a, 0xad0: 0x183c, 0xad1: 0x1841, + 0xad2: 0x0f6e, 0xad3: 0x0f82, 0xad4: 0x0f7e, 0xad5: 0x0f7a, 0xad6: 0x0712, 0xad7: 0x0f86, + 0xad8: 0x0f96, 0xad9: 0x0f92, 0xada: 0x0f9e, 0xadb: 0x177e, 0xadc: 0x0fae, 0xadd: 0x1846, + 0xade: 0x0fba, 0xadf: 0x1850, 0xae0: 0x0fce, 0xae1: 0x0fda, 0xae2: 0x0fee, 0xae3: 0x1855, + 0xae4: 0x1002, 0xae5: 0x1006, 0xae6: 0x185a, 0xae7: 0x185f, 0xae8: 0x1022, 0xae9: 0x1032, + 0xaea: 0x0716, 0xaeb: 0x1036, 0xaec: 0x071a, 0xaed: 0x071a, 0xaee: 0x104e, 0xaef: 0x1052, + 0xaf0: 0x105a, 0xaf1: 0x105e, 0xaf2: 0x106a, 0xaf3: 0x071e, 0xaf4: 0x1082, 0xaf5: 0x1864, + 0xaf6: 0x109e, 0xaf7: 0x1869, 0xaf8: 0x10aa, 0xaf9: 0x17ce, 0xafa: 0x10ba, 0xafb: 0x186e, + 0xafc: 0x1873, 0xafd: 0x1878, 0xafe: 0x0722, 0xaff: 0x0726, // Block 0x2c, offset 0xb00 - 0xb00: 0x0ffa, 0xb01: 0x1758, 0xb02: 0x1753, 0xb03: 0x175d, 0xb04: 0x1762, 0xb05: 0x1002, - 0xb06: 0x1006, 0xb07: 0x1006, 0xb08: 0x100e, 0xb09: 0x0636, 0xb0a: 0x1012, 0xb0b: 0x063a, - 0xb0c: 0x063e, 0xb0d: 0x176c, 0xb0e: 0x1026, 0xb0f: 0x102e, 0xb10: 0x103a, 0xb11: 0x0642, - 0xb12: 0x1771, 0xb13: 0x105e, 0xb14: 0x1776, 0xb15: 0x177b, 0xb16: 0x107e, 0xb17: 0x1096, - 0xb18: 0x0646, 0xb19: 0x109e, 0xb1a: 0x10a2, 0xb1b: 0x10a6, 0xb1c: 0x1780, 0xb1d: 0x1785, - 0xb1e: 0x1785, 0xb1f: 0x10be, 0xb20: 0x064a, 0xb21: 0x178a, 0xb22: 0x10d2, 0xb23: 0x10d6, - 0xb24: 0x064e, 0xb25: 0x178f, 0xb26: 0x10f2, 0xb27: 0x0652, 0xb28: 0x1102, 0xb29: 0x10fa, - 0xb2a: 0x110a, 0xb2b: 0x1799, 0xb2c: 0x1122, 0xb2d: 0x0656, 0xb2e: 0x112e, 0xb2f: 0x1136, - 0xb30: 0x1146, 0xb31: 0x065a, 0xb32: 0x17a3, 0xb33: 0x17a8, 0xb34: 0x065e, 0xb35: 0x17ad, - 0xb36: 0x115e, 0xb37: 0x17b2, 0xb38: 0x116a, 0xb39: 0x1176, 0xb3a: 0x117e, 0xb3b: 0x17b7, - 0xb3c: 0x17bc, 0xb3d: 0x1192, 0xb3e: 0x17c1, 0xb3f: 0x119a, + 0xb00: 0x10f2, 0xb01: 0x1882, 0xb02: 0x187d, 0xb03: 0x1887, 0xb04: 0x188c, 0xb05: 0x10fa, + 0xb06: 0x10fe, 0xb07: 0x10fe, 0xb08: 0x1106, 0xb09: 0x072e, 0xb0a: 0x110a, 0xb0b: 0x0732, + 0xb0c: 0x0736, 0xb0d: 0x1896, 0xb0e: 0x111e, 0xb0f: 0x1126, 0xb10: 0x1132, 0xb11: 0x073a, + 0xb12: 0x189b, 0xb13: 0x1156, 0xb14: 0x18a0, 0xb15: 0x18a5, 0xb16: 0x1176, 0xb17: 0x118e, + 0xb18: 0x073e, 0xb19: 0x1196, 0xb1a: 0x119a, 0xb1b: 0x119e, 0xb1c: 0x18aa, 0xb1d: 0x18af, + 0xb1e: 0x18af, 0xb1f: 0x11b6, 0xb20: 0x0742, 0xb21: 0x18b4, 0xb22: 0x11ca, 0xb23: 0x11ce, + 0xb24: 0x0746, 0xb25: 0x18b9, 0xb26: 0x11ea, 0xb27: 0x074a, 0xb28: 0x11fa, 0xb29: 0x11f2, + 0xb2a: 0x1202, 0xb2b: 0x18c3, 0xb2c: 0x121a, 0xb2d: 0x074e, 0xb2e: 0x1226, 0xb2f: 0x122e, + 0xb30: 0x123e, 0xb31: 0x0752, 0xb32: 0x18cd, 0xb33: 0x18d2, 0xb34: 0x0756, 0xb35: 0x18d7, + 0xb36: 0x1256, 0xb37: 0x18dc, 0xb38: 0x1262, 0xb39: 0x126e, 0xb3a: 0x1276, 0xb3b: 0x18e1, + 0xb3c: 0x18e6, 0xb3d: 0x128a, 0xb3e: 0x18eb, 0xb3f: 0x1292, // Block 0x2d, offset 0xb40 - 0xb40: 0x16d1, 0xb41: 0x0662, 0xb42: 0x11b2, 0xb43: 0x11b6, 0xb44: 0x066a, 0xb45: 0x11ba, - 0xb46: 0x0a36, 0xb47: 0x17c6, 0xb48: 0x17cb, 0xb49: 0x16d6, 0xb4a: 0x16db, 0xb4b: 0x11da, - 0xb4c: 0x11de, 0xb4d: 0x13f6, 0xb4e: 0x066e, 0xb4f: 0x120a, 0xb50: 0x1206, 0xb51: 0x120e, - 0xb52: 0x0842, 0xb53: 0x1212, 0xb54: 0x1216, 0xb55: 0x121a, 0xb56: 0x1222, 0xb57: 0x17d0, - 0xb58: 0x121e, 0xb59: 0x1226, 0xb5a: 0x123a, 0xb5b: 0x123e, 0xb5c: 0x122a, 0xb5d: 0x1242, - 0xb5e: 0x1256, 0xb5f: 0x126a, 0xb60: 0x1236, 0xb61: 0x124a, 0xb62: 0x124e, 0xb63: 0x1252, - 0xb64: 0x17d5, 0xb65: 0x17df, 0xb66: 0x17da, 0xb67: 0x0672, 0xb68: 0x1272, 0xb69: 0x1276, - 0xb6a: 0x127e, 0xb6b: 0x17f3, 0xb6c: 0x1282, 0xb6d: 0x17e4, 0xb6e: 0x0676, 0xb6f: 0x067a, - 0xb70: 0x17e9, 0xb71: 0x17ee, 0xb72: 0x067e, 0xb73: 0x12a2, 0xb74: 0x12a6, 0xb75: 0x12aa, - 0xb76: 0x12ae, 0xb77: 0x12ba, 0xb78: 0x12b6, 0xb79: 0x12c2, 0xb7a: 0x12be, 0xb7b: 0x12ce, - 0xb7c: 0x12c6, 0xb7d: 0x12ca, 0xb7e: 0x12d2, 0xb7f: 0x0682, + 0xb40: 0x17fb, 0xb41: 0x075a, 0xb42: 0x12aa, 0xb43: 0x12ae, 0xb44: 0x0762, 0xb45: 0x12b2, + 0xb46: 0x0b2e, 0xb47: 0x18f0, 0xb48: 0x18f5, 0xb49: 0x1800, 0xb4a: 0x1805, 0xb4b: 0x12d2, + 0xb4c: 0x12d6, 0xb4d: 0x14ee, 0xb4e: 0x0766, 0xb4f: 0x1302, 0xb50: 0x12fe, 0xb51: 0x1306, + 0xb52: 0x093a, 0xb53: 0x130a, 0xb54: 0x130e, 0xb55: 0x1312, 0xb56: 0x131a, 0xb57: 0x18fa, + 0xb58: 0x1316, 0xb59: 0x131e, 0xb5a: 0x1332, 0xb5b: 0x1336, 0xb5c: 0x1322, 0xb5d: 0x133a, + 0xb5e: 0x134e, 0xb5f: 0x1362, 0xb60: 0x132e, 0xb61: 0x1342, 0xb62: 0x1346, 0xb63: 0x134a, + 0xb64: 0x18ff, 0xb65: 0x1909, 0xb66: 0x1904, 0xb67: 0x076a, 0xb68: 0x136a, 0xb69: 0x136e, + 0xb6a: 0x1376, 0xb6b: 0x191d, 0xb6c: 0x137a, 0xb6d: 0x190e, 0xb6e: 0x076e, 0xb6f: 0x0772, + 0xb70: 0x1913, 0xb71: 0x1918, 0xb72: 0x0776, 0xb73: 0x139a, 0xb74: 0x139e, 0xb75: 0x13a2, + 0xb76: 0x13a6, 0xb77: 0x13b2, 0xb78: 0x13ae, 0xb79: 0x13ba, 0xb7a: 0x13b6, 0xb7b: 0x13c6, + 0xb7c: 0x13be, 0xb7d: 0x13c2, 0xb7e: 0x13ca, 0xb7f: 0x077a, // Block 0x2e, offset 0xb80 - 0xb80: 0x12da, 0xb81: 0x12de, 0xb82: 0x0686, 0xb83: 0x12ee, 0xb84: 0x12f2, 0xb85: 0x17f8, - 0xb86: 0x12fe, 0xb87: 0x1302, 0xb88: 0x068a, 0xb89: 0x130e, 0xb8a: 0x05be, 0xb8b: 0x17fd, - 0xb8c: 0x1802, 0xb8d: 0x068e, 0xb8e: 0x0692, 0xb8f: 0x133a, 0xb90: 0x1352, 0xb91: 0x136e, - 0xb92: 0x137e, 0xb93: 0x1807, 0xb94: 0x1392, 0xb95: 0x1396, 0xb96: 0x13ae, 0xb97: 0x13ba, - 0xb98: 0x1811, 0xb99: 0x1663, 0xb9a: 0x13c6, 0xb9b: 0x13c2, 0xb9c: 0x13ce, 0xb9d: 0x1668, - 0xb9e: 0x13da, 0xb9f: 0x13e6, 0xba0: 0x1816, 0xba1: 0x181b, 0xba2: 0x1426, 0xba3: 0x1432, - 0xba4: 0x143a, 0xba5: 0x1820, 0xba6: 0x143e, 0xba7: 0x146a, 0xba8: 0x1476, 0xba9: 0x147a, - 0xbaa: 0x1472, 0xbab: 0x1486, 0xbac: 0x148a, 0xbad: 0x1825, 0xbae: 0x1496, 0xbaf: 0x0696, - 0xbb0: 0x149e, 0xbb1: 0x182a, 0xbb2: 0x069a, 0xbb3: 0x14d6, 0xbb4: 0x0ac6, 0xbb5: 0x14ee, - 0xbb6: 0x182f, 0xbb7: 0x1839, 0xbb8: 0x069e, 0xbb9: 0x06a2, 0xbba: 0x1516, 0xbbb: 0x183e, - 0xbbc: 0x06a6, 0xbbd: 0x1843, 0xbbe: 0x152e, 0xbbf: 0x152e, + 0xb80: 0x13d2, 0xb81: 0x13d6, 0xb82: 0x077e, 0xb83: 0x13e6, 0xb84: 0x13ea, 0xb85: 0x1922, + 0xb86: 0x13f6, 0xb87: 0x13fa, 0xb88: 0x0782, 0xb89: 0x1406, 0xb8a: 0x06b6, 0xb8b: 0x1927, + 0xb8c: 0x192c, 0xb8d: 0x0786, 0xb8e: 0x078a, 0xb8f: 0x1432, 0xb90: 0x144a, 0xb91: 0x1466, + 0xb92: 0x1476, 0xb93: 0x1931, 0xb94: 0x148a, 0xb95: 0x148e, 0xb96: 0x14a6, 0xb97: 0x14b2, + 0xb98: 0x193b, 0xb99: 0x178d, 0xb9a: 0x14be, 0xb9b: 0x14ba, 0xb9c: 0x14c6, 0xb9d: 0x1792, + 0xb9e: 0x14d2, 0xb9f: 0x14de, 0xba0: 0x1940, 0xba1: 0x1945, 0xba2: 0x151e, 0xba3: 0x152a, + 0xba4: 0x1532, 0xba5: 0x194a, 0xba6: 0x1536, 0xba7: 0x1562, 0xba8: 0x156e, 0xba9: 0x1572, + 0xbaa: 0x156a, 0xbab: 0x157e, 0xbac: 0x1582, 0xbad: 0x194f, 0xbae: 0x158e, 0xbaf: 0x078e, + 0xbb0: 0x1596, 0xbb1: 0x1954, 0xbb2: 0x0792, 0xbb3: 0x15ce, 0xbb4: 0x0bbe, 0xbb5: 0x15e6, + 0xbb6: 0x1959, 0xbb7: 0x1963, 0xbb8: 0x0796, 0xbb9: 0x079a, 0xbba: 0x160e, 0xbbb: 0x1968, + 0xbbc: 0x079e, 0xbbd: 0x196d, 0xbbe: 0x1626, 0xbbf: 0x1626, // Block 0x2f, offset 0xbc0 - 0xbc0: 0x1536, 0xbc1: 0x1848, 0xbc2: 0x154e, 0xbc3: 0x06aa, 0xbc4: 0x155e, 0xbc5: 0x156a, - 0xbc6: 0x1572, 0xbc7: 0x157a, 0xbc8: 0x06ae, 0xbc9: 0x184d, 0xbca: 0x158e, 0xbcb: 0x15aa, - 0xbcc: 0x15b6, 0xbcd: 0x06b2, 0xbce: 0x06b6, 0xbcf: 0x15ba, 0xbd0: 0x1852, 0xbd1: 0x06ba, - 0xbd2: 0x1857, 0xbd3: 0x185c, 0xbd4: 0x1861, 0xbd5: 0x15de, 0xbd6: 0x06be, 0xbd7: 0x15f2, - 0xbd8: 0x15fa, 0xbd9: 0x15fe, 0xbda: 0x1606, 0xbdb: 0x160e, 0xbdc: 0x1616, 0xbdd: 0x186b, + 0xbc0: 0x162e, 0xbc1: 0x1972, 0xbc2: 0x1646, 0xbc3: 0x07a2, 0xbc4: 0x1656, 0xbc5: 0x1662, + 0xbc6: 0x166a, 0xbc7: 0x1672, 0xbc8: 0x07a6, 0xbc9: 0x1977, 0xbca: 0x1686, 0xbcb: 0x16a2, + 0xbcc: 0x16ae, 0xbcd: 0x07aa, 0xbce: 0x07ae, 0xbcf: 0x16b2, 0xbd0: 0x197c, 0xbd1: 0x07b2, + 0xbd2: 0x1981, 0xbd3: 0x1986, 0xbd4: 0x198b, 0xbd5: 0x16d6, 0xbd6: 0x07b6, 0xbd7: 0x16ea, + 0xbd8: 0x16f2, 0xbd9: 0x16f6, 0xbda: 0x16fe, 0xbdb: 0x1706, 0xbdc: 0x170e, 0xbdd: 0x1995, } // nfcIndex: 22 blocks, 1408 entries, 1408 bytes @@ -3452,88 +3529,94 @@ var nfcIndex = [1408]uint8{ 0xea: 0x06, 0xeb: 0x07, 0xec: 0x08, 0xed: 0x09, 0xef: 0x0a, 0xf0: 0x13, // Block 0x4, offset 0x100 - 0x120: 0x3b, 0x121: 0x3c, 0x123: 0x0d, 0x124: 0x3d, 0x125: 0x3e, 0x126: 0x3f, 0x127: 0x40, - 0x128: 0x41, 0x129: 0x42, 0x12a: 0x43, 0x12b: 0x44, 0x12c: 0x3f, 0x12d: 0x45, 0x12e: 0x46, 0x12f: 0x47, - 0x131: 0x48, 0x132: 0x49, 0x133: 0x4a, 0x134: 0x4b, 0x135: 0x4c, 0x137: 0x4d, - 0x138: 0x4e, 0x139: 0x4f, 0x13a: 0x50, 0x13b: 0x51, 0x13c: 0x52, 0x13d: 0x53, 0x13e: 0x54, 0x13f: 0x55, + 0x120: 0x3b, 0x121: 0x3c, 0x122: 0x3d, 0x123: 0x0d, 0x124: 0x3e, 0x125: 0x3f, 0x126: 0x40, 0x127: 0x41, + 0x128: 0x42, 0x129: 0x43, 0x12a: 0x44, 0x12b: 0x45, 0x12c: 0x40, 0x12d: 0x46, 0x12e: 0x47, 0x12f: 0x48, + 0x130: 0x44, 0x131: 0x49, 0x132: 0x4a, 0x133: 0x4b, 0x134: 0x4c, 0x135: 0x4d, 0x137: 0x4e, + 0x138: 0x4f, 0x139: 0x50, 0x13a: 0x51, 0x13b: 0x52, 0x13c: 0x53, 0x13d: 0x54, 0x13e: 0x55, 0x13f: 0x56, // Block 0x5, offset 0x140 - 0x140: 0x56, 0x142: 0x57, 0x144: 0x58, 0x145: 0x59, 0x146: 0x5a, 0x147: 0x5b, - 0x14d: 0x5c, - 0x15c: 0x5d, 0x15f: 0x5e, - 0x162: 0x5f, 0x164: 0x60, - 0x168: 0x61, 0x169: 0x62, 0x16a: 0x63, 0x16b: 0x64, 0x16c: 0x0e, 0x16d: 0x65, 0x16e: 0x66, 0x16f: 0x67, - 0x170: 0x68, 0x173: 0x69, 0x177: 0x0f, + 0x140: 0x57, 0x142: 0x58, 0x144: 0x59, 0x145: 0x5a, 0x146: 0x5b, 0x147: 0x5c, + 0x14d: 0x5d, + 0x15c: 0x5e, 0x15f: 0x5f, + 0x162: 0x60, 0x164: 0x61, + 0x168: 0x62, 0x169: 0x63, 0x16a: 0x64, 0x16b: 0x65, 0x16c: 0x0e, 0x16d: 0x66, 0x16e: 0x67, 0x16f: 0x68, + 0x170: 0x69, 0x173: 0x6a, 0x177: 0x0f, 0x178: 0x10, 0x179: 0x11, 0x17a: 0x12, 0x17b: 0x13, 0x17c: 0x14, 0x17d: 0x15, 0x17e: 0x16, 0x17f: 0x17, // Block 0x6, offset 0x180 - 0x180: 0x6a, 0x183: 0x6b, 0x184: 0x6c, 0x186: 0x6d, 0x187: 0x6e, - 0x188: 0x6f, 0x189: 0x18, 0x18a: 0x19, 0x18b: 0x70, 0x18c: 0x71, - 0x1ab: 0x72, - 0x1b3: 0x73, 0x1b5: 0x74, 0x1b7: 0x75, + 0x180: 0x6b, 0x183: 0x6c, 0x184: 0x6d, 0x186: 0x6e, 0x187: 0x6f, + 0x188: 0x70, 0x189: 0x18, 0x18a: 0x19, 0x18b: 0x71, 0x18c: 0x72, + 0x1ab: 0x73, + 0x1b3: 0x74, 0x1b5: 0x75, 0x1b7: 0x76, // Block 0x7, offset 0x1c0 - 0x1c0: 0x76, 0x1c1: 0x1a, 0x1c2: 0x1b, 0x1c3: 0x1c, 0x1c4: 0x77, 0x1c5: 0x78, - 0x1c9: 0x79, 0x1cc: 0x7a, 0x1cd: 0x7b, + 0x1c0: 0x77, 0x1c1: 0x1a, 0x1c2: 0x1b, 0x1c3: 0x1c, 0x1c4: 0x78, 0x1c5: 0x79, + 0x1c9: 0x7a, 0x1cc: 0x7b, 0x1cd: 0x7c, // Block 0x8, offset 0x200 - 0x219: 0x7c, 0x21a: 0x7d, 0x21b: 0x7e, - 0x220: 0x7f, 0x223: 0x80, 0x224: 0x81, 0x225: 0x82, 0x226: 0x83, 0x227: 0x84, - 0x22a: 0x85, 0x22b: 0x86, 0x22f: 0x87, - 0x230: 0x88, 0x231: 0x89, 0x232: 0x8a, 0x233: 0x8b, 0x234: 0x8c, 0x235: 0x8d, 0x236: 0x8e, 0x237: 0x88, - 0x238: 0x89, 0x239: 0x8a, 0x23a: 0x8b, 0x23b: 0x8c, 0x23c: 0x8d, 0x23d: 0x8e, 0x23e: 0x88, 0x23f: 0x89, + 0x219: 0x7d, 0x21a: 0x7e, 0x21b: 0x7f, + 0x220: 0x80, 0x223: 0x81, 0x224: 0x82, 0x225: 0x83, 0x226: 0x84, 0x227: 0x85, + 0x22a: 0x86, 0x22b: 0x87, 0x22f: 0x88, + 0x230: 0x89, 0x231: 0x8a, 0x232: 0x8b, 0x233: 0x8c, 0x234: 0x8d, 0x235: 0x8e, 0x236: 0x8f, 0x237: 0x89, + 0x238: 0x8a, 0x239: 0x8b, 0x23a: 0x8c, 0x23b: 0x8d, 0x23c: 0x8e, 0x23d: 0x8f, 0x23e: 0x89, 0x23f: 0x8a, // Block 0x9, offset 0x240 - 0x240: 0x8a, 0x241: 0x8b, 0x242: 0x8c, 0x243: 0x8d, 0x244: 0x8e, 0x245: 0x88, 0x246: 0x89, 0x247: 0x8a, - 0x248: 0x8b, 0x249: 0x8c, 0x24a: 0x8d, 0x24b: 0x8e, 0x24c: 0x88, 0x24d: 0x89, 0x24e: 0x8a, 0x24f: 0x8b, - 0x250: 0x8c, 0x251: 0x8d, 0x252: 0x8e, 0x253: 0x88, 0x254: 0x89, 0x255: 0x8a, 0x256: 0x8b, 0x257: 0x8c, - 0x258: 0x8d, 0x259: 0x8e, 0x25a: 0x88, 0x25b: 0x89, 0x25c: 0x8a, 0x25d: 0x8b, 0x25e: 0x8c, 0x25f: 0x8d, - 0x260: 0x8e, 0x261: 0x88, 0x262: 0x89, 0x263: 0x8a, 0x264: 0x8b, 0x265: 0x8c, 0x266: 0x8d, 0x267: 0x8e, - 0x268: 0x88, 0x269: 0x89, 0x26a: 0x8a, 0x26b: 0x8b, 0x26c: 0x8c, 0x26d: 0x8d, 0x26e: 0x8e, 0x26f: 0x88, - 0x270: 0x89, 0x271: 0x8a, 0x272: 0x8b, 0x273: 0x8c, 0x274: 0x8d, 0x275: 0x8e, 0x276: 0x88, 0x277: 0x89, - 0x278: 0x8a, 0x279: 0x8b, 0x27a: 0x8c, 0x27b: 0x8d, 0x27c: 0x8e, 0x27d: 0x88, 0x27e: 0x89, 0x27f: 0x8a, + 0x240: 0x8b, 0x241: 0x8c, 0x242: 0x8d, 0x243: 0x8e, 0x244: 0x8f, 0x245: 0x89, 0x246: 0x8a, 0x247: 0x8b, + 0x248: 0x8c, 0x249: 0x8d, 0x24a: 0x8e, 0x24b: 0x8f, 0x24c: 0x89, 0x24d: 0x8a, 0x24e: 0x8b, 0x24f: 0x8c, + 0x250: 0x8d, 0x251: 0x8e, 0x252: 0x8f, 0x253: 0x89, 0x254: 0x8a, 0x255: 0x8b, 0x256: 0x8c, 0x257: 0x8d, + 0x258: 0x8e, 0x259: 0x8f, 0x25a: 0x89, 0x25b: 0x8a, 0x25c: 0x8b, 0x25d: 0x8c, 0x25e: 0x8d, 0x25f: 0x8e, + 0x260: 0x8f, 0x261: 0x89, 0x262: 0x8a, 0x263: 0x8b, 0x264: 0x8c, 0x265: 0x8d, 0x266: 0x8e, 0x267: 0x8f, + 0x268: 0x89, 0x269: 0x8a, 0x26a: 0x8b, 0x26b: 0x8c, 0x26c: 0x8d, 0x26d: 0x8e, 0x26e: 0x8f, 0x26f: 0x89, + 0x270: 0x8a, 0x271: 0x8b, 0x272: 0x8c, 0x273: 0x8d, 0x274: 0x8e, 0x275: 0x8f, 0x276: 0x89, 0x277: 0x8a, + 0x278: 0x8b, 0x279: 0x8c, 0x27a: 0x8d, 0x27b: 0x8e, 0x27c: 0x8f, 0x27d: 0x89, 0x27e: 0x8a, 0x27f: 0x8b, // Block 0xa, offset 0x280 - 0x280: 0x8b, 0x281: 0x8c, 0x282: 0x8d, 0x283: 0x8e, 0x284: 0x88, 0x285: 0x89, 0x286: 0x8a, 0x287: 0x8b, - 0x288: 0x8c, 0x289: 0x8d, 0x28a: 0x8e, 0x28b: 0x88, 0x28c: 0x89, 0x28d: 0x8a, 0x28e: 0x8b, 0x28f: 0x8c, - 0x290: 0x8d, 0x291: 0x8e, 0x292: 0x88, 0x293: 0x89, 0x294: 0x8a, 0x295: 0x8b, 0x296: 0x8c, 0x297: 0x8d, - 0x298: 0x8e, 0x299: 0x88, 0x29a: 0x89, 0x29b: 0x8a, 0x29c: 0x8b, 0x29d: 0x8c, 0x29e: 0x8d, 0x29f: 0x8e, - 0x2a0: 0x88, 0x2a1: 0x89, 0x2a2: 0x8a, 0x2a3: 0x8b, 0x2a4: 0x8c, 0x2a5: 0x8d, 0x2a6: 0x8e, 0x2a7: 0x88, - 0x2a8: 0x89, 0x2a9: 0x8a, 0x2aa: 0x8b, 0x2ab: 0x8c, 0x2ac: 0x8d, 0x2ad: 0x8e, 0x2ae: 0x88, 0x2af: 0x89, - 0x2b0: 0x8a, 0x2b1: 0x8b, 0x2b2: 0x8c, 0x2b3: 0x8d, 0x2b4: 0x8e, 0x2b5: 0x88, 0x2b6: 0x89, 0x2b7: 0x8a, - 0x2b8: 0x8b, 0x2b9: 0x8c, 0x2ba: 0x8d, 0x2bb: 0x8e, 0x2bc: 0x88, 0x2bd: 0x89, 0x2be: 0x8a, 0x2bf: 0x8b, + 0x280: 0x8c, 0x281: 0x8d, 0x282: 0x8e, 0x283: 0x8f, 0x284: 0x89, 0x285: 0x8a, 0x286: 0x8b, 0x287: 0x8c, + 0x288: 0x8d, 0x289: 0x8e, 0x28a: 0x8f, 0x28b: 0x89, 0x28c: 0x8a, 0x28d: 0x8b, 0x28e: 0x8c, 0x28f: 0x8d, + 0x290: 0x8e, 0x291: 0x8f, 0x292: 0x89, 0x293: 0x8a, 0x294: 0x8b, 0x295: 0x8c, 0x296: 0x8d, 0x297: 0x8e, + 0x298: 0x8f, 0x299: 0x89, 0x29a: 0x8a, 0x29b: 0x8b, 0x29c: 0x8c, 0x29d: 0x8d, 0x29e: 0x8e, 0x29f: 0x8f, + 0x2a0: 0x89, 0x2a1: 0x8a, 0x2a2: 0x8b, 0x2a3: 0x8c, 0x2a4: 0x8d, 0x2a5: 0x8e, 0x2a6: 0x8f, 0x2a7: 0x89, + 0x2a8: 0x8a, 0x2a9: 0x8b, 0x2aa: 0x8c, 0x2ab: 0x8d, 0x2ac: 0x8e, 0x2ad: 0x8f, 0x2ae: 0x89, 0x2af: 0x8a, + 0x2b0: 0x8b, 0x2b1: 0x8c, 0x2b2: 0x8d, 0x2b3: 0x8e, 0x2b4: 0x8f, 0x2b5: 0x89, 0x2b6: 0x8a, 0x2b7: 0x8b, + 0x2b8: 0x8c, 0x2b9: 0x8d, 0x2ba: 0x8e, 0x2bb: 0x8f, 0x2bc: 0x89, 0x2bd: 0x8a, 0x2be: 0x8b, 0x2bf: 0x8c, // Block 0xb, offset 0x2c0 - 0x2c0: 0x8c, 0x2c1: 0x8d, 0x2c2: 0x8e, 0x2c3: 0x88, 0x2c4: 0x89, 0x2c5: 0x8a, 0x2c6: 0x8b, 0x2c7: 0x8c, - 0x2c8: 0x8d, 0x2c9: 0x8e, 0x2ca: 0x88, 0x2cb: 0x89, 0x2cc: 0x8a, 0x2cd: 0x8b, 0x2ce: 0x8c, 0x2cf: 0x8d, - 0x2d0: 0x8e, 0x2d1: 0x88, 0x2d2: 0x89, 0x2d3: 0x8a, 0x2d4: 0x8b, 0x2d5: 0x8c, 0x2d6: 0x8d, 0x2d7: 0x8e, - 0x2d8: 0x88, 0x2d9: 0x89, 0x2da: 0x8a, 0x2db: 0x8b, 0x2dc: 0x8c, 0x2dd: 0x8d, 0x2de: 0x8f, + 0x2c0: 0x8d, 0x2c1: 0x8e, 0x2c2: 0x8f, 0x2c3: 0x89, 0x2c4: 0x8a, 0x2c5: 0x8b, 0x2c6: 0x8c, 0x2c7: 0x8d, + 0x2c8: 0x8e, 0x2c9: 0x8f, 0x2ca: 0x89, 0x2cb: 0x8a, 0x2cc: 0x8b, 0x2cd: 0x8c, 0x2ce: 0x8d, 0x2cf: 0x8e, + 0x2d0: 0x8f, 0x2d1: 0x89, 0x2d2: 0x8a, 0x2d3: 0x8b, 0x2d4: 0x8c, 0x2d5: 0x8d, 0x2d6: 0x8e, 0x2d7: 0x8f, + 0x2d8: 0x89, 0x2d9: 0x8a, 0x2da: 0x8b, 0x2db: 0x8c, 0x2dc: 0x8d, 0x2dd: 0x8e, 0x2de: 0x90, // Block 0xc, offset 0x300 0x324: 0x1d, 0x325: 0x1e, 0x326: 0x1f, 0x327: 0x20, - 0x328: 0x21, 0x329: 0x22, 0x32a: 0x23, 0x32b: 0x24, 0x32c: 0x90, 0x32d: 0x91, 0x32e: 0x92, - 0x331: 0x93, 0x332: 0x94, 0x333: 0x95, 0x334: 0x96, - 0x338: 0x97, 0x339: 0x98, 0x33a: 0x99, 0x33b: 0x9a, 0x33e: 0x9b, 0x33f: 0x9c, + 0x328: 0x21, 0x329: 0x22, 0x32a: 0x23, 0x32b: 0x24, 0x32c: 0x91, 0x32d: 0x92, 0x32e: 0x93, + 0x331: 0x94, 0x332: 0x95, 0x333: 0x96, 0x334: 0x97, + 0x338: 0x98, 0x339: 0x99, 0x33a: 0x9a, 0x33b: 0x9b, 0x33e: 0x9c, 0x33f: 0x9d, // Block 0xd, offset 0x340 - 0x347: 0x9d, - 0x34b: 0x9e, 0x34d: 0x9f, - 0x368: 0xa0, 0x36b: 0xa1, - 0x374: 0xa2, - 0x37a: 0xa3, 0x37d: 0xa4, + 0x347: 0x9e, + 0x34b: 0x9f, 0x34d: 0xa0, + 0x357: 0xa1, + 0x368: 0xa2, 0x36b: 0xa3, + 0x374: 0xa4, 0x375: 0xa5, + 0x37a: 0xa6, 0x37b: 0xa7, 0x37d: 0xa8, 0x37e: 0xa9, // Block 0xe, offset 0x380 - 0x381: 0xa5, 0x382: 0xa6, 0x384: 0xa7, 0x385: 0x83, 0x387: 0xa8, - 0x388: 0xa9, 0x38b: 0xaa, 0x38c: 0xab, 0x38d: 0xac, - 0x391: 0xad, 0x392: 0xae, 0x393: 0xaf, 0x396: 0xb0, 0x397: 0xb1, - 0x398: 0x74, 0x39a: 0xb2, 0x39c: 0xb3, - 0x3a0: 0xb4, 0x3a4: 0xb5, 0x3a5: 0xb6, 0x3a7: 0xb7, - 0x3a8: 0xb8, 0x3a9: 0xb9, 0x3aa: 0xba, - 0x3b0: 0x74, 0x3b5: 0xbb, 0x3b6: 0xbc, + 0x381: 0xaa, 0x382: 0xab, 0x384: 0xac, 0x385: 0x84, 0x387: 0xad, + 0x388: 0xae, 0x38b: 0xaf, 0x38c: 0xb0, 0x38d: 0xb1, 0x38e: 0xb2, 0x38f: 0xb3, + 0x391: 0xb4, 0x392: 0xb5, 0x393: 0xb6, 0x396: 0xb7, 0x397: 0xb8, + 0x398: 0x75, 0x39a: 0xb9, 0x39c: 0xba, + 0x3a0: 0xbb, 0x3a4: 0xbc, 0x3a5: 0xbd, 0x3a7: 0xbe, + 0x3a8: 0xbf, 0x3a9: 0xc0, 0x3aa: 0xc1, + 0x3b0: 0x75, 0x3b5: 0xc2, 0x3b6: 0xc3, + 0x3bd: 0xc4, // Block 0xf, offset 0x3c0 - 0x3eb: 0xbd, 0x3ec: 0xbe, - 0x3ff: 0xbf, + 0x3c4: 0xc5, + 0x3eb: 0xc6, 0x3ec: 0xc7, + 0x3f5: 0xc8, + 0x3ff: 0xc9, // Block 0x10, offset 0x400 - 0x432: 0xc0, + 0x432: 0xca, // Block 0x11, offset 0x440 - 0x445: 0xc1, 0x446: 0xc2, 0x447: 0xc3, - 0x449: 0xc4, + 0x445: 0xcb, 0x446: 0xcc, 0x447: 0xcd, + 0x449: 0xce, // Block 0x12, offset 0x480 - 0x480: 0xc5, 0x484: 0xbe, - 0x48b: 0xc6, - 0x4a3: 0xc7, 0x4a5: 0xc8, + 0x480: 0xcf, 0x482: 0xd0, 0x484: 0xc7, + 0x48a: 0xd1, 0x48b: 0xd2, + 0x493: 0xd3, 0x497: 0xd4, + 0x49b: 0xd5, + 0x4a3: 0xd6, 0x4a5: 0xd7, // Block 0x13, offset 0x4c0 - 0x4c8: 0xc9, + 0x4c8: 0xd8, // Block 0x14, offset 0x500 0x520: 0x25, 0x521: 0x26, 0x522: 0x27, 0x523: 0x28, 0x524: 0x29, 0x525: 0x2a, 0x526: 0x2b, 0x527: 0x2c, 0x528: 0x2d, @@ -3543,11 +3626,11 @@ var nfcIndex = [1408]uint8{ 0x56f: 0x12, } -// nfcSparseOffset: 156 entries, 312 bytes -var nfcSparseOffset = []uint16{0x0, 0x5, 0x9, 0xb, 0xd, 0x18, 0x28, 0x2a, 0x2f, 0x3a, 0x49, 0x56, 0x5e, 0x63, 0x68, 0x6a, 0x72, 0x79, 0x7c, 0x84, 0x88, 0x8c, 0x8e, 0x90, 0x99, 0x9d, 0xa4, 0xa9, 0xac, 0xb6, 0xb9, 0xc0, 0xc8, 0xcb, 0xcd, 0xd0, 0xd2, 0xd7, 0xe8, 0xf4, 0xf6, 0xfc, 0xfe, 0x100, 0x102, 0x104, 0x106, 0x108, 0x10b, 0x10e, 0x110, 0x113, 0x116, 0x11a, 0x120, 0x122, 0x12b, 0x12d, 0x130, 0x132, 0x13d, 0x141, 0x14f, 0x152, 0x158, 0x15e, 0x169, 0x16d, 0x16f, 0x171, 0x173, 0x175, 0x177, 0x17d, 0x181, 0x183, 0x185, 0x18d, 0x191, 0x194, 0x196, 0x198, 0x19b, 0x19e, 0x1a0, 0x1a2, 0x1a4, 0x1a6, 0x1ac, 0x1af, 0x1b1, 0x1b8, 0x1be, 0x1c4, 0x1cc, 0x1d2, 0x1d8, 0x1de, 0x1e2, 0x1f0, 0x1f9, 0x1fc, 0x1ff, 0x201, 0x204, 0x206, 0x20a, 0x20f, 0x211, 0x213, 0x218, 0x21e, 0x220, 0x222, 0x224, 0x22a, 0x22d, 0x22f, 0x231, 0x237, 0x23a, 0x242, 0x249, 0x24c, 0x24f, 0x251, 0x254, 0x25c, 0x260, 0x267, 0x26a, 0x270, 0x272, 0x275, 0x277, 0x27a, 0x27f, 0x281, 0x283, 0x285, 0x287, 0x289, 0x28c, 0x28e, 0x290, 0x292, 0x294, 0x296, 0x2a3, 0x2ad, 0x2af, 0x2b1, 0x2b7, 0x2b9, 0x2bb, 0x2be} +// nfcSparseOffset: 171 entries, 342 bytes +var nfcSparseOffset = []uint16{0x0, 0x5, 0x9, 0xb, 0xd, 0x18, 0x28, 0x2a, 0x2f, 0x3a, 0x49, 0x56, 0x5e, 0x63, 0x68, 0x6a, 0x6e, 0x76, 0x7d, 0x80, 0x88, 0x8c, 0x90, 0x92, 0x94, 0x9d, 0xa1, 0xa8, 0xad, 0xb0, 0xba, 0xbd, 0xc4, 0xcc, 0xcf, 0xd1, 0xd4, 0xd6, 0xdb, 0xec, 0xf8, 0xfa, 0x100, 0x102, 0x104, 0x106, 0x108, 0x10a, 0x10c, 0x10f, 0x112, 0x114, 0x117, 0x11a, 0x11e, 0x124, 0x130, 0x139, 0x13b, 0x13e, 0x140, 0x14b, 0x14f, 0x15d, 0x160, 0x166, 0x16c, 0x177, 0x17b, 0x17d, 0x17f, 0x181, 0x183, 0x185, 0x18b, 0x18f, 0x191, 0x193, 0x19b, 0x19f, 0x1a2, 0x1a4, 0x1a6, 0x1a9, 0x1ac, 0x1ae, 0x1b0, 0x1b2, 0x1b4, 0x1ba, 0x1bd, 0x1bf, 0x1c6, 0x1cc, 0x1d2, 0x1da, 0x1e0, 0x1e6, 0x1ec, 0x1f0, 0x1fe, 0x207, 0x20a, 0x20d, 0x20f, 0x212, 0x214, 0x218, 0x21d, 0x21f, 0x221, 0x226, 0x22c, 0x22e, 0x230, 0x232, 0x237, 0x23d, 0x240, 0x242, 0x244, 0x246, 0x249, 0x24f, 0x253, 0x257, 0x25f, 0x266, 0x269, 0x26c, 0x26e, 0x271, 0x279, 0x283, 0x28a, 0x28e, 0x295, 0x298, 0x29e, 0x2a0, 0x2a3, 0x2a5, 0x2a8, 0x2ad, 0x2af, 0x2b1, 0x2b3, 0x2b5, 0x2b7, 0x2ba, 0x2bc, 0x2be, 0x2cb, 0x2cd, 0x2cf, 0x2d5, 0x2d7, 0x2d9, 0x2e6, 0x2f0, 0x2f2, 0x2f4, 0x2fa, 0x2fc, 0x2fe, 0x300, 0x304, 0x307, 0x30c, 0x30e, 0x311} -// nfcSparseValues: 704 entries, 2816 bytes -var nfcSparseValues = [704]valueRange{ +// nfcSparseValues: 787 entries, 3148 bytes +var nfcSparseValues = [787]valueRange{ // Block 0x0, offset 0x0 {value: 0x0000, lo: 0x04}, {value: 0xa100, lo: 0xa8, hi: 0xa8}, @@ -3556,8 +3639,8 @@ var nfcSparseValues = [704]valueRange{ {value: 0x8100, lo: 0xb8, hi: 0xb8}, // Block 0x1, offset 0x5 {value: 0x0091, lo: 0x03}, - {value: 0x46f9, lo: 0xa0, hi: 0xa1}, - {value: 0x472b, lo: 0xaf, hi: 0xb0}, + {value: 0x4859, lo: 0xa0, hi: 0xa1}, + {value: 0x488b, lo: 0xaf, hi: 0xb0}, {value: 0xa000, lo: 0xb7, hi: 0xb7}, // Block 0x2, offset 0x9 {value: 0x0000, lo: 0x01}, @@ -3570,30 +3653,30 @@ var nfcSparseValues = [704]valueRange{ {value: 0xa000, lo: 0x81, hi: 0x81}, {value: 0xa000, lo: 0x85, hi: 0x85}, {value: 0xa000, lo: 0x89, hi: 0x89}, - {value: 0x4857, lo: 0x8a, hi: 0x8a}, - {value: 0x4875, lo: 0x8b, hi: 0x8b}, - {value: 0x36de, lo: 0x8c, hi: 0x8c}, - {value: 0x36f6, lo: 0x8d, hi: 0x8d}, - {value: 0x488d, lo: 0x8e, hi: 0x8e}, + {value: 0x49b7, lo: 0x8a, hi: 0x8a}, + {value: 0x49d5, lo: 0x8b, hi: 0x8b}, + {value: 0x3626, lo: 0x8c, hi: 0x8c}, + {value: 0x363e, lo: 0x8d, hi: 0x8d}, + {value: 0x49ed, lo: 0x8e, hi: 0x8e}, {value: 0xa000, lo: 0x92, hi: 0x92}, - {value: 0x3714, lo: 0x93, hi: 0x94}, + {value: 0x365c, lo: 0x93, hi: 0x94}, // Block 0x5, offset 0x18 {value: 0x0000, lo: 0x0f}, {value: 0xa000, lo: 0x83, hi: 0x83}, {value: 0xa000, lo: 0x87, hi: 0x87}, {value: 0xa000, lo: 0x8b, hi: 0x8b}, {value: 0xa000, lo: 0x8d, hi: 0x8d}, - {value: 0x37bc, lo: 0x90, hi: 0x90}, - {value: 0x37c8, lo: 0x91, hi: 0x91}, - {value: 0x37b6, lo: 0x93, hi: 0x93}, + {value: 0x3704, lo: 0x90, hi: 0x90}, + {value: 0x3710, lo: 0x91, hi: 0x91}, + {value: 0x36fe, lo: 0x93, hi: 0x93}, {value: 0xa000, lo: 0x96, hi: 0x96}, - {value: 0x382e, lo: 0x97, hi: 0x97}, - {value: 0x37f8, lo: 0x9c, hi: 0x9c}, - {value: 0x37e0, lo: 0x9d, hi: 0x9d}, - {value: 0x380a, lo: 0x9e, hi: 0x9e}, + {value: 0x3776, lo: 0x97, hi: 0x97}, + {value: 0x3740, lo: 0x9c, hi: 0x9c}, + {value: 0x3728, lo: 0x9d, hi: 0x9d}, + {value: 0x3752, lo: 0x9e, hi: 0x9e}, {value: 0xa000, lo: 0xb4, hi: 0xb5}, - {value: 0x3834, lo: 0xb6, hi: 0xb6}, - {value: 0x383a, lo: 0xb7, hi: 0xb7}, + {value: 0x377c, lo: 0xb6, hi: 0xb6}, + {value: 0x3782, lo: 0xb7, hi: 0xb7}, // Block 0x6, offset 0x28 {value: 0x0000, lo: 0x01}, {value: 0x8133, lo: 0x83, hi: 0x87}, @@ -3609,19 +3692,19 @@ var nfcSparseValues = [704]valueRange{ {value: 0x811a, lo: 0x98, hi: 0x98}, {value: 0x811b, lo: 0x99, hi: 0x99}, {value: 0x811c, lo: 0x9a, hi: 0x9a}, - {value: 0x3858, lo: 0xa2, hi: 0xa2}, - {value: 0x385e, lo: 0xa3, hi: 0xa3}, - {value: 0x386a, lo: 0xa4, hi: 0xa4}, - {value: 0x3864, lo: 0xa5, hi: 0xa5}, - {value: 0x3870, lo: 0xa6, hi: 0xa6}, + {value: 0x37a0, lo: 0xa2, hi: 0xa2}, + {value: 0x37a6, lo: 0xa3, hi: 0xa3}, + {value: 0x37b2, lo: 0xa4, hi: 0xa4}, + {value: 0x37ac, lo: 0xa5, hi: 0xa5}, + {value: 0x37b8, lo: 0xa6, hi: 0xa6}, {value: 0xa000, lo: 0xa7, hi: 0xa7}, // Block 0x9, offset 0x3a {value: 0x0000, lo: 0x0e}, - {value: 0x3882, lo: 0x80, hi: 0x80}, + {value: 0x37ca, lo: 0x80, hi: 0x80}, {value: 0xa000, lo: 0x81, hi: 0x81}, - {value: 0x3876, lo: 0x82, hi: 0x82}, + {value: 0x37be, lo: 0x82, hi: 0x82}, {value: 0xa000, lo: 0x92, hi: 0x92}, - {value: 0x387c, lo: 0x93, hi: 0x93}, + {value: 0x37c4, lo: 0x93, hi: 0x93}, {value: 0xa000, lo: 0x95, hi: 0x95}, {value: 0x8133, lo: 0x96, hi: 0x9c}, {value: 0x8133, lo: 0x9f, hi: 0xa2}, @@ -3670,250 +3753,265 @@ var nfcSparseValues = [704]valueRange{ {value: 0x0000, lo: 0x01}, {value: 0x812e, lo: 0x99, hi: 0x9b}, // Block 0xf, offset 0x6a + {value: 0x0000, lo: 0x03}, + {value: 0x8133, lo: 0x97, hi: 0x98}, + {value: 0x812e, lo: 0x99, hi: 0x9b}, + {value: 0x8133, lo: 0x9c, hi: 0x9f}, + // Block 0x10, offset 0x6e {value: 0x0000, lo: 0x07}, {value: 0xa000, lo: 0xa8, hi: 0xa8}, - {value: 0x3eef, lo: 0xa9, hi: 0xa9}, + {value: 0x3e37, lo: 0xa9, hi: 0xa9}, {value: 0xa000, lo: 0xb0, hi: 0xb0}, - {value: 0x3ef7, lo: 0xb1, hi: 0xb1}, + {value: 0x3e3f, lo: 0xb1, hi: 0xb1}, {value: 0xa000, lo: 0xb3, hi: 0xb3}, - {value: 0x3eff, lo: 0xb4, hi: 0xb4}, + {value: 0x3e47, lo: 0xb4, hi: 0xb4}, {value: 0x9903, lo: 0xbc, hi: 0xbc}, - // Block 0x10, offset 0x72 + // Block 0x11, offset 0x76 {value: 0x0008, lo: 0x06}, {value: 0x8105, lo: 0x8d, hi: 0x8d}, {value: 0x8133, lo: 0x91, hi: 0x91}, {value: 0x812e, lo: 0x92, hi: 0x92}, {value: 0x8133, lo: 0x93, hi: 0x93}, {value: 0x8133, lo: 0x94, hi: 0x94}, - {value: 0x4533, lo: 0x98, hi: 0x9f}, - // Block 0x11, offset 0x79 + {value: 0x461b, lo: 0x98, hi: 0x9f}, + // Block 0x12, offset 0x7d {value: 0x0000, lo: 0x02}, {value: 0x8103, lo: 0xbc, hi: 0xbc}, {value: 0x9900, lo: 0xbe, hi: 0xbe}, - // Block 0x12, offset 0x7c + // Block 0x13, offset 0x80 {value: 0x0008, lo: 0x07}, {value: 0xa000, lo: 0x87, hi: 0x87}, - {value: 0x2cab, lo: 0x8b, hi: 0x8c}, + {value: 0x3e4f, lo: 0x8b, hi: 0x8c}, {value: 0x8105, lo: 0x8d, hi: 0x8d}, {value: 0x9900, lo: 0x97, hi: 0x97}, - {value: 0x4573, lo: 0x9c, hi: 0x9d}, - {value: 0x4583, lo: 0x9f, hi: 0x9f}, + {value: 0x465b, lo: 0x9c, hi: 0x9d}, + {value: 0x466b, lo: 0x9f, hi: 0x9f}, {value: 0x8133, lo: 0xbe, hi: 0xbe}, - // Block 0x13, offset 0x84 + // Block 0x14, offset 0x88 {value: 0x0000, lo: 0x03}, - {value: 0x45ab, lo: 0xb3, hi: 0xb3}, - {value: 0x45b3, lo: 0xb6, hi: 0xb6}, + {value: 0x4693, lo: 0xb3, hi: 0xb3}, + {value: 0x469b, lo: 0xb6, hi: 0xb6}, {value: 0x8103, lo: 0xbc, hi: 0xbc}, - // Block 0x14, offset 0x88 + // Block 0x15, offset 0x8c {value: 0x0008, lo: 0x03}, {value: 0x8105, lo: 0x8d, hi: 0x8d}, - {value: 0x458b, lo: 0x99, hi: 0x9b}, - {value: 0x45a3, lo: 0x9e, hi: 0x9e}, - // Block 0x15, offset 0x8c + {value: 0x4673, lo: 0x99, hi: 0x9b}, + {value: 0x468b, lo: 0x9e, hi: 0x9e}, + // Block 0x16, offset 0x90 {value: 0x0000, lo: 0x01}, {value: 0x8103, lo: 0xbc, hi: 0xbc}, - // Block 0x16, offset 0x8e + // Block 0x17, offset 0x92 {value: 0x0000, lo: 0x01}, {value: 0x8105, lo: 0x8d, hi: 0x8d}, - // Block 0x17, offset 0x90 + // Block 0x18, offset 0x94 {value: 0x0000, lo: 0x08}, {value: 0xa000, lo: 0x87, hi: 0x87}, - {value: 0x2cc3, lo: 0x88, hi: 0x88}, - {value: 0x2cbb, lo: 0x8b, hi: 0x8b}, - {value: 0x2ccb, lo: 0x8c, hi: 0x8c}, + {value: 0x3e67, lo: 0x88, hi: 0x88}, + {value: 0x3e5f, lo: 0x8b, hi: 0x8b}, + {value: 0x3e6f, lo: 0x8c, hi: 0x8c}, {value: 0x8105, lo: 0x8d, hi: 0x8d}, {value: 0x9900, lo: 0x96, hi: 0x97}, - {value: 0x45bb, lo: 0x9c, hi: 0x9c}, - {value: 0x45c3, lo: 0x9d, hi: 0x9d}, - // Block 0x18, offset 0x99 + {value: 0x46a3, lo: 0x9c, hi: 0x9c}, + {value: 0x46ab, lo: 0x9d, hi: 0x9d}, + // Block 0x19, offset 0x9d {value: 0x0000, lo: 0x03}, {value: 0xa000, lo: 0x92, hi: 0x92}, - {value: 0x2cd3, lo: 0x94, hi: 0x94}, + {value: 0x3e77, lo: 0x94, hi: 0x94}, {value: 0x9900, lo: 0xbe, hi: 0xbe}, - // Block 0x19, offset 0x9d + // Block 0x1a, offset 0xa1 {value: 0x0000, lo: 0x06}, {value: 0xa000, lo: 0x86, hi: 0x87}, - {value: 0x2cdb, lo: 0x8a, hi: 0x8a}, - {value: 0x2ceb, lo: 0x8b, hi: 0x8b}, - {value: 0x2ce3, lo: 0x8c, hi: 0x8c}, + {value: 0x3e7f, lo: 0x8a, hi: 0x8a}, + {value: 0x3e8f, lo: 0x8b, hi: 0x8b}, + {value: 0x3e87, lo: 0x8c, hi: 0x8c}, {value: 0x8105, lo: 0x8d, hi: 0x8d}, {value: 0x9900, lo: 0x97, hi: 0x97}, - // Block 0x1a, offset 0xa4 + // Block 0x1b, offset 0xa8 {value: 0x1801, lo: 0x04}, {value: 0xa000, lo: 0x86, hi: 0x86}, - {value: 0x3f07, lo: 0x88, hi: 0x88}, + {value: 0x3e97, lo: 0x88, hi: 0x88}, {value: 0x8105, lo: 0x8d, hi: 0x8d}, {value: 0x8121, lo: 0x95, hi: 0x96}, - // Block 0x1b, offset 0xa9 + // Block 0x1c, offset 0xad {value: 0x0000, lo: 0x02}, {value: 0x8103, lo: 0xbc, hi: 0xbc}, {value: 0xa000, lo: 0xbf, hi: 0xbf}, - // Block 0x1c, offset 0xac + // Block 0x1d, offset 0xb0 {value: 0x0000, lo: 0x09}, - {value: 0x2cf3, lo: 0x80, hi: 0x80}, + {value: 0x3e9f, lo: 0x80, hi: 0x80}, {value: 0x9900, lo: 0x82, hi: 0x82}, {value: 0xa000, lo: 0x86, hi: 0x86}, - {value: 0x2cfb, lo: 0x87, hi: 0x87}, - {value: 0x2d03, lo: 0x88, hi: 0x88}, - {value: 0x2f67, lo: 0x8a, hi: 0x8a}, - {value: 0x2def, lo: 0x8b, hi: 0x8b}, + {value: 0x3ea7, lo: 0x87, hi: 0x87}, + {value: 0x3eaf, lo: 0x88, hi: 0x88}, + {value: 0x4b25, lo: 0x8a, hi: 0x8a}, + {value: 0x4331, lo: 0x8b, hi: 0x8b}, {value: 0x8105, lo: 0x8d, hi: 0x8d}, {value: 0x9900, lo: 0x95, hi: 0x96}, - // Block 0x1d, offset 0xb6 + // Block 0x1e, offset 0xba {value: 0x0000, lo: 0x02}, {value: 0x8105, lo: 0xbb, hi: 0xbc}, {value: 0x9900, lo: 0xbe, hi: 0xbe}, - // Block 0x1e, offset 0xb9 + // Block 0x1f, offset 0xbd {value: 0x0000, lo: 0x06}, {value: 0xa000, lo: 0x86, hi: 0x87}, - {value: 0x2d0b, lo: 0x8a, hi: 0x8a}, - {value: 0x2d1b, lo: 0x8b, hi: 0x8b}, - {value: 0x2d13, lo: 0x8c, hi: 0x8c}, + {value: 0x3eb7, lo: 0x8a, hi: 0x8a}, + {value: 0x3ec7, lo: 0x8b, hi: 0x8b}, + {value: 0x3ebf, lo: 0x8c, hi: 0x8c}, {value: 0x8105, lo: 0x8d, hi: 0x8d}, {value: 0x9900, lo: 0x97, hi: 0x97}, - // Block 0x1f, offset 0xc0 - {value: 0x6bdd, lo: 0x07}, + // Block 0x20, offset 0xc4 + {value: 0x5a29, lo: 0x07}, {value: 0x9905, lo: 0x8a, hi: 0x8a}, {value: 0x9900, lo: 0x8f, hi: 0x8f}, {value: 0xa000, lo: 0x99, hi: 0x99}, - {value: 0x3f0f, lo: 0x9a, hi: 0x9a}, - {value: 0x2f6f, lo: 0x9c, hi: 0x9c}, - {value: 0x2dfa, lo: 0x9d, hi: 0x9d}, - {value: 0x2d23, lo: 0x9e, hi: 0x9f}, - // Block 0x20, offset 0xc8 + {value: 0x3ecf, lo: 0x9a, hi: 0x9a}, + {value: 0x4b2d, lo: 0x9c, hi: 0x9c}, + {value: 0x433c, lo: 0x9d, hi: 0x9d}, + {value: 0x3ed7, lo: 0x9e, hi: 0x9f}, + // Block 0x21, offset 0xcc {value: 0x0000, lo: 0x02}, {value: 0x8123, lo: 0xb8, hi: 0xb9}, {value: 0x8105, lo: 0xba, hi: 0xba}, - // Block 0x21, offset 0xcb + // Block 0x22, offset 0xcf {value: 0x0000, lo: 0x01}, {value: 0x8124, lo: 0x88, hi: 0x8b}, - // Block 0x22, offset 0xcd + // Block 0x23, offset 0xd1 {value: 0x0000, lo: 0x02}, {value: 0x8125, lo: 0xb8, hi: 0xb9}, {value: 0x8105, lo: 0xba, hi: 0xba}, - // Block 0x23, offset 0xd0 + // Block 0x24, offset 0xd4 {value: 0x0000, lo: 0x01}, {value: 0x8126, lo: 0x88, hi: 0x8b}, - // Block 0x24, offset 0xd2 + // Block 0x25, offset 0xd6 {value: 0x0000, lo: 0x04}, {value: 0x812e, lo: 0x98, hi: 0x99}, {value: 0x812e, lo: 0xb5, hi: 0xb5}, {value: 0x812e, lo: 0xb7, hi: 0xb7}, {value: 0x812c, lo: 0xb9, hi: 0xb9}, - // Block 0x25, offset 0xd7 + // Block 0x26, offset 0xdb {value: 0x0000, lo: 0x10}, - {value: 0x264a, lo: 0x83, hi: 0x83}, - {value: 0x2651, lo: 0x8d, hi: 0x8d}, - {value: 0x2658, lo: 0x92, hi: 0x92}, - {value: 0x265f, lo: 0x97, hi: 0x97}, - {value: 0x2666, lo: 0x9c, hi: 0x9c}, - {value: 0x2643, lo: 0xa9, hi: 0xa9}, + {value: 0x2774, lo: 0x83, hi: 0x83}, + {value: 0x277b, lo: 0x8d, hi: 0x8d}, + {value: 0x2782, lo: 0x92, hi: 0x92}, + {value: 0x2789, lo: 0x97, hi: 0x97}, + {value: 0x2790, lo: 0x9c, hi: 0x9c}, + {value: 0x276d, lo: 0xa9, hi: 0xa9}, {value: 0x8127, lo: 0xb1, hi: 0xb1}, {value: 0x8128, lo: 0xb2, hi: 0xb2}, - {value: 0x4a9b, lo: 0xb3, hi: 0xb3}, + {value: 0x4ca5, lo: 0xb3, hi: 0xb3}, {value: 0x8129, lo: 0xb4, hi: 0xb4}, - {value: 0x4aa4, lo: 0xb5, hi: 0xb5}, - {value: 0x45cb, lo: 0xb6, hi: 0xb6}, + {value: 0x4cae, lo: 0xb5, hi: 0xb5}, + {value: 0x46b3, lo: 0xb6, hi: 0xb6}, {value: 0x8200, lo: 0xb7, hi: 0xb7}, - {value: 0x45d3, lo: 0xb8, hi: 0xb8}, + {value: 0x46bb, lo: 0xb8, hi: 0xb8}, {value: 0x8200, lo: 0xb9, hi: 0xb9}, {value: 0x8128, lo: 0xba, hi: 0xbd}, - // Block 0x26, offset 0xe8 + // Block 0x27, offset 0xec {value: 0x0000, lo: 0x0b}, {value: 0x8128, lo: 0x80, hi: 0x80}, - {value: 0x4aad, lo: 0x81, hi: 0x81}, + {value: 0x4cb7, lo: 0x81, hi: 0x81}, {value: 0x8133, lo: 0x82, hi: 0x83}, {value: 0x8105, lo: 0x84, hi: 0x84}, {value: 0x8133, lo: 0x86, hi: 0x87}, - {value: 0x2674, lo: 0x93, hi: 0x93}, - {value: 0x267b, lo: 0x9d, hi: 0x9d}, - {value: 0x2682, lo: 0xa2, hi: 0xa2}, - {value: 0x2689, lo: 0xa7, hi: 0xa7}, - {value: 0x2690, lo: 0xac, hi: 0xac}, - {value: 0x266d, lo: 0xb9, hi: 0xb9}, - // Block 0x27, offset 0xf4 + {value: 0x279e, lo: 0x93, hi: 0x93}, + {value: 0x27a5, lo: 0x9d, hi: 0x9d}, + {value: 0x27ac, lo: 0xa2, hi: 0xa2}, + {value: 0x27b3, lo: 0xa7, hi: 0xa7}, + {value: 0x27ba, lo: 0xac, hi: 0xac}, + {value: 0x2797, lo: 0xb9, hi: 0xb9}, + // Block 0x28, offset 0xf8 {value: 0x0000, lo: 0x01}, {value: 0x812e, lo: 0x86, hi: 0x86}, - // Block 0x28, offset 0xf6 + // Block 0x29, offset 0xfa {value: 0x0000, lo: 0x05}, {value: 0xa000, lo: 0xa5, hi: 0xa5}, - {value: 0x2d2b, lo: 0xa6, hi: 0xa6}, + {value: 0x3edf, lo: 0xa6, hi: 0xa6}, {value: 0x9900, lo: 0xae, hi: 0xae}, {value: 0x8103, lo: 0xb7, hi: 0xb7}, {value: 0x8105, lo: 0xb9, hi: 0xba}, - // Block 0x29, offset 0xfc + // Block 0x2a, offset 0x100 {value: 0x0000, lo: 0x01}, {value: 0x812e, lo: 0x8d, hi: 0x8d}, - // Block 0x2a, offset 0xfe + // Block 0x2b, offset 0x102 {value: 0x0000, lo: 0x01}, {value: 0xa000, lo: 0x80, hi: 0x92}, - // Block 0x2b, offset 0x100 + // Block 0x2c, offset 0x104 {value: 0x0000, lo: 0x01}, {value: 0xb900, lo: 0xa1, hi: 0xb5}, - // Block 0x2c, offset 0x102 + // Block 0x2d, offset 0x106 {value: 0x0000, lo: 0x01}, {value: 0x9900, lo: 0xa8, hi: 0xbf}, - // Block 0x2d, offset 0x104 + // Block 0x2e, offset 0x108 {value: 0x0000, lo: 0x01}, {value: 0x9900, lo: 0x80, hi: 0x82}, - // Block 0x2e, offset 0x106 + // Block 0x2f, offset 0x10a {value: 0x0000, lo: 0x01}, {value: 0x8133, lo: 0x9d, hi: 0x9f}, - // Block 0x2f, offset 0x108 + // Block 0x30, offset 0x10c {value: 0x0000, lo: 0x02}, - {value: 0x8105, lo: 0x94, hi: 0x94}, + {value: 0x8105, lo: 0x94, hi: 0x95}, {value: 0x8105, lo: 0xb4, hi: 0xb4}, - // Block 0x30, offset 0x10b + // Block 0x31, offset 0x10f {value: 0x0000, lo: 0x02}, {value: 0x8105, lo: 0x92, hi: 0x92}, {value: 0x8133, lo: 0x9d, hi: 0x9d}, - // Block 0x31, offset 0x10e + // Block 0x32, offset 0x112 {value: 0x0000, lo: 0x01}, {value: 0x8132, lo: 0xa9, hi: 0xa9}, - // Block 0x32, offset 0x110 + // Block 0x33, offset 0x114 {value: 0x0004, lo: 0x02}, {value: 0x812f, lo: 0xb9, hi: 0xba}, {value: 0x812e, lo: 0xbb, hi: 0xbb}, - // Block 0x33, offset 0x113 + // Block 0x34, offset 0x117 {value: 0x0000, lo: 0x02}, {value: 0x8133, lo: 0x97, hi: 0x97}, {value: 0x812e, lo: 0x98, hi: 0x98}, - // Block 0x34, offset 0x116 + // Block 0x35, offset 0x11a {value: 0x0000, lo: 0x03}, {value: 0x8105, lo: 0xa0, hi: 0xa0}, {value: 0x8133, lo: 0xb5, hi: 0xbc}, {value: 0x812e, lo: 0xbf, hi: 0xbf}, - // Block 0x35, offset 0x11a + // Block 0x36, offset 0x11e {value: 0x0000, lo: 0x05}, {value: 0x8133, lo: 0xb0, hi: 0xb4}, {value: 0x812e, lo: 0xb5, hi: 0xba}, {value: 0x8133, lo: 0xbb, hi: 0xbc}, {value: 0x812e, lo: 0xbd, hi: 0xbd}, {value: 0x812e, lo: 0xbf, hi: 0xbf}, - // Block 0x36, offset 0x120 - {value: 0x0000, lo: 0x01}, + // Block 0x37, offset 0x124 + {value: 0x0000, lo: 0x0b}, {value: 0x812e, lo: 0x80, hi: 0x80}, - // Block 0x37, offset 0x122 + {value: 0x8133, lo: 0x81, hi: 0x82}, + {value: 0x812e, lo: 0x83, hi: 0x84}, + {value: 0x8133, lo: 0x85, hi: 0x89}, + {value: 0x812e, lo: 0x8a, hi: 0x8a}, + {value: 0x8133, lo: 0x8b, hi: 0x9c}, + {value: 0x812e, lo: 0x9d, hi: 0x9d}, + {value: 0x8133, lo: 0xa0, hi: 0xa5}, + {value: 0x812e, lo: 0xa6, hi: 0xa6}, + {value: 0x8133, lo: 0xa7, hi: 0xaa}, + {value: 0x8136, lo: 0xab, hi: 0xab}, + // Block 0x38, offset 0x130 {value: 0x0000, lo: 0x08}, - {value: 0x2d73, lo: 0x80, hi: 0x80}, - {value: 0x2d7b, lo: 0x81, hi: 0x81}, + {value: 0x3f27, lo: 0x80, hi: 0x80}, + {value: 0x3f2f, lo: 0x81, hi: 0x81}, {value: 0xa000, lo: 0x82, hi: 0x82}, - {value: 0x2d83, lo: 0x83, hi: 0x83}, + {value: 0x3f37, lo: 0x83, hi: 0x83}, {value: 0x8105, lo: 0x84, hi: 0x84}, {value: 0x8133, lo: 0xab, hi: 0xab}, {value: 0x812e, lo: 0xac, hi: 0xac}, {value: 0x8133, lo: 0xad, hi: 0xb3}, - // Block 0x38, offset 0x12b + // Block 0x39, offset 0x139 {value: 0x0000, lo: 0x01}, {value: 0x8105, lo: 0xaa, hi: 0xab}, - // Block 0x39, offset 0x12d + // Block 0x3a, offset 0x13b {value: 0x0000, lo: 0x02}, {value: 0x8103, lo: 0xa6, hi: 0xa6}, {value: 0x8105, lo: 0xb2, hi: 0xb3}, - // Block 0x3a, offset 0x130 + // Block 0x3b, offset 0x13e {value: 0x0000, lo: 0x01}, {value: 0x8103, lo: 0xb7, hi: 0xb7}, - // Block 0x3b, offset 0x132 + // Block 0x3c, offset 0x140 {value: 0x0000, lo: 0x0a}, {value: 0x8133, lo: 0x90, hi: 0x92}, {value: 0x8101, lo: 0x94, hi: 0x94}, @@ -3925,12 +4023,12 @@ var nfcSparseValues = [704]valueRange{ {value: 0x812e, lo: 0xad, hi: 0xad}, {value: 0x8133, lo: 0xb4, hi: 0xb4}, {value: 0x8133, lo: 0xb8, hi: 0xb9}, - // Block 0x3c, offset 0x13d + // Block 0x3d, offset 0x14b {value: 0x0004, lo: 0x03}, - {value: 0x0436, lo: 0x80, hi: 0x81}, + {value: 0x052a, lo: 0x80, hi: 0x81}, {value: 0x8100, lo: 0x97, hi: 0x97}, {value: 0x8100, lo: 0xbe, hi: 0xbe}, - // Block 0x3d, offset 0x141 + // Block 0x3e, offset 0x14f {value: 0x0000, lo: 0x0d}, {value: 0x8133, lo: 0x90, hi: 0x91}, {value: 0x8101, lo: 0x92, hi: 0x93}, @@ -3945,75 +4043,75 @@ var nfcSparseValues = [704]valueRange{ {value: 0x8101, lo: 0xaa, hi: 0xab}, {value: 0x812e, lo: 0xac, hi: 0xaf}, {value: 0x8133, lo: 0xb0, hi: 0xb0}, - // Block 0x3e, offset 0x14f - {value: 0x4292, lo: 0x02}, - {value: 0x01bb, lo: 0xa6, hi: 0xa6}, + // Block 0x3f, offset 0x15d + {value: 0x437a, lo: 0x02}, + {value: 0x023c, lo: 0xa6, hi: 0xa6}, {value: 0x0057, lo: 0xaa, hi: 0xab}, - // Block 0x3f, offset 0x152 + // Block 0x40, offset 0x160 {value: 0x0007, lo: 0x05}, {value: 0xa000, lo: 0x90, hi: 0x90}, {value: 0xa000, lo: 0x92, hi: 0x92}, {value: 0xa000, lo: 0x94, hi: 0x94}, - {value: 0x3bd0, lo: 0x9a, hi: 0x9b}, - {value: 0x3bde, lo: 0xae, hi: 0xae}, - // Block 0x40, offset 0x158 + {value: 0x3b18, lo: 0x9a, hi: 0x9b}, + {value: 0x3b26, lo: 0xae, hi: 0xae}, + // Block 0x41, offset 0x166 {value: 0x000e, lo: 0x05}, - {value: 0x3be5, lo: 0x8d, hi: 0x8e}, - {value: 0x3bec, lo: 0x8f, hi: 0x8f}, + {value: 0x3b2d, lo: 0x8d, hi: 0x8e}, + {value: 0x3b34, lo: 0x8f, hi: 0x8f}, {value: 0xa000, lo: 0x90, hi: 0x90}, {value: 0xa000, lo: 0x92, hi: 0x92}, {value: 0xa000, lo: 0x94, hi: 0x94}, - // Block 0x41, offset 0x15e - {value: 0x63f1, lo: 0x0a}, + // Block 0x42, offset 0x16c + {value: 0x64a9, lo: 0x0a}, {value: 0xa000, lo: 0x83, hi: 0x83}, - {value: 0x3bfa, lo: 0x84, hi: 0x84}, + {value: 0x3b42, lo: 0x84, hi: 0x84}, {value: 0xa000, lo: 0x88, hi: 0x88}, - {value: 0x3c01, lo: 0x89, hi: 0x89}, + {value: 0x3b49, lo: 0x89, hi: 0x89}, {value: 0xa000, lo: 0x8b, hi: 0x8b}, - {value: 0x3c08, lo: 0x8c, hi: 0x8c}, + {value: 0x3b50, lo: 0x8c, hi: 0x8c}, {value: 0xa000, lo: 0xa3, hi: 0xa3}, - {value: 0x3c0f, lo: 0xa4, hi: 0xa5}, - {value: 0x3c16, lo: 0xa6, hi: 0xa6}, + {value: 0x3b57, lo: 0xa4, hi: 0xa5}, + {value: 0x3b5e, lo: 0xa6, hi: 0xa6}, {value: 0xa000, lo: 0xbc, hi: 0xbc}, - // Block 0x42, offset 0x169 + // Block 0x43, offset 0x177 {value: 0x0007, lo: 0x03}, - {value: 0x3c7f, lo: 0xa0, hi: 0xa1}, - {value: 0x3ca9, lo: 0xa2, hi: 0xa3}, - {value: 0x3cd3, lo: 0xaa, hi: 0xad}, - // Block 0x43, offset 0x16d + {value: 0x3bc7, lo: 0xa0, hi: 0xa1}, + {value: 0x3bf1, lo: 0xa2, hi: 0xa3}, + {value: 0x3c1b, lo: 0xaa, hi: 0xad}, + // Block 0x44, offset 0x17b {value: 0x0004, lo: 0x01}, - {value: 0x048e, lo: 0xa9, hi: 0xaa}, - // Block 0x44, offset 0x16f + {value: 0x0586, lo: 0xa9, hi: 0xaa}, + // Block 0x45, offset 0x17d {value: 0x0000, lo: 0x01}, - {value: 0x44f4, lo: 0x9c, hi: 0x9c}, - // Block 0x45, offset 0x171 + {value: 0x45dc, lo: 0x9c, hi: 0x9c}, + // Block 0x46, offset 0x17f {value: 0x0000, lo: 0x01}, {value: 0x8133, lo: 0xaf, hi: 0xb1}, - // Block 0x46, offset 0x173 + // Block 0x47, offset 0x181 {value: 0x0000, lo: 0x01}, {value: 0x8105, lo: 0xbf, hi: 0xbf}, - // Block 0x47, offset 0x175 + // Block 0x48, offset 0x183 {value: 0x0000, lo: 0x01}, {value: 0x8133, lo: 0xa0, hi: 0xbf}, - // Block 0x48, offset 0x177 + // Block 0x49, offset 0x185 {value: 0x0000, lo: 0x05}, {value: 0x812d, lo: 0xaa, hi: 0xaa}, {value: 0x8132, lo: 0xab, hi: 0xab}, {value: 0x8134, lo: 0xac, hi: 0xac}, {value: 0x812f, lo: 0xad, hi: 0xad}, {value: 0x8130, lo: 0xae, hi: 0xaf}, - // Block 0x49, offset 0x17d + // Block 0x4a, offset 0x18b {value: 0x0000, lo: 0x03}, - {value: 0x4ab6, lo: 0xb3, hi: 0xb3}, - {value: 0x4ab6, lo: 0xb5, hi: 0xb6}, - {value: 0x4ab6, lo: 0xba, hi: 0xbf}, - // Block 0x4a, offset 0x181 + {value: 0x4cc0, lo: 0xb3, hi: 0xb3}, + {value: 0x4cc0, lo: 0xb5, hi: 0xb6}, + {value: 0x4cc0, lo: 0xba, hi: 0xbf}, + // Block 0x4b, offset 0x18f {value: 0x0000, lo: 0x01}, - {value: 0x4ab6, lo: 0x8f, hi: 0xa3}, - // Block 0x4b, offset 0x183 + {value: 0x4cc0, lo: 0x8f, hi: 0xa3}, + // Block 0x4c, offset 0x191 {value: 0x0000, lo: 0x01}, {value: 0x8100, lo: 0xae, hi: 0xbe}, - // Block 0x4c, offset 0x185 + // Block 0x4d, offset 0x193 {value: 0x0000, lo: 0x07}, {value: 0x8100, lo: 0x84, hi: 0x84}, {value: 0x8100, lo: 0x87, hi: 0x87}, @@ -4022,56 +4120,56 @@ var nfcSparseValues = [704]valueRange{ {value: 0x8100, lo: 0xa1, hi: 0xa1}, {value: 0x8100, lo: 0xb2, hi: 0xb2}, {value: 0x8100, lo: 0xbb, hi: 0xbb}, - // Block 0x4d, offset 0x18d + // Block 0x4e, offset 0x19b {value: 0x0000, lo: 0x03}, {value: 0x8100, lo: 0x80, hi: 0x80}, {value: 0x8100, lo: 0x8b, hi: 0x8b}, {value: 0x8100, lo: 0x8e, hi: 0x8e}, - // Block 0x4e, offset 0x191 + // Block 0x4f, offset 0x19f {value: 0x0000, lo: 0x02}, {value: 0x8133, lo: 0xaf, hi: 0xaf}, {value: 0x8133, lo: 0xb4, hi: 0xbd}, - // Block 0x4f, offset 0x194 + // Block 0x50, offset 0x1a2 {value: 0x0000, lo: 0x01}, {value: 0x8133, lo: 0x9e, hi: 0x9f}, - // Block 0x50, offset 0x196 + // Block 0x51, offset 0x1a4 {value: 0x0000, lo: 0x01}, {value: 0x8133, lo: 0xb0, hi: 0xb1}, - // Block 0x51, offset 0x198 + // Block 0x52, offset 0x1a6 {value: 0x0000, lo: 0x02}, {value: 0x8105, lo: 0x86, hi: 0x86}, {value: 0x8105, lo: 0xac, hi: 0xac}, - // Block 0x52, offset 0x19b + // Block 0x53, offset 0x1a9 {value: 0x0000, lo: 0x02}, {value: 0x8105, lo: 0x84, hi: 0x84}, {value: 0x8133, lo: 0xa0, hi: 0xb1}, - // Block 0x53, offset 0x19e + // Block 0x54, offset 0x1ac {value: 0x0000, lo: 0x01}, {value: 0x812e, lo: 0xab, hi: 0xad}, - // Block 0x54, offset 0x1a0 + // Block 0x55, offset 0x1ae {value: 0x0000, lo: 0x01}, {value: 0x8105, lo: 0x93, hi: 0x93}, - // Block 0x55, offset 0x1a2 + // Block 0x56, offset 0x1b0 {value: 0x0000, lo: 0x01}, {value: 0x8103, lo: 0xb3, hi: 0xb3}, - // Block 0x56, offset 0x1a4 + // Block 0x57, offset 0x1b2 {value: 0x0000, lo: 0x01}, {value: 0x8105, lo: 0x80, hi: 0x80}, - // Block 0x57, offset 0x1a6 + // Block 0x58, offset 0x1b4 {value: 0x0000, lo: 0x05}, {value: 0x8133, lo: 0xb0, hi: 0xb0}, {value: 0x8133, lo: 0xb2, hi: 0xb3}, {value: 0x812e, lo: 0xb4, hi: 0xb4}, {value: 0x8133, lo: 0xb7, hi: 0xb8}, {value: 0x8133, lo: 0xbe, hi: 0xbf}, - // Block 0x58, offset 0x1ac + // Block 0x59, offset 0x1ba {value: 0x0000, lo: 0x02}, {value: 0x8133, lo: 0x81, hi: 0x81}, {value: 0x8105, lo: 0xb6, hi: 0xb6}, - // Block 0x59, offset 0x1af + // Block 0x5a, offset 0x1bd {value: 0x0000, lo: 0x01}, {value: 0x8105, lo: 0xad, hi: 0xad}, - // Block 0x5a, offset 0x1b1 + // Block 0x5b, offset 0x1bf {value: 0x0000, lo: 0x06}, {value: 0xe500, lo: 0x80, hi: 0x80}, {value: 0xc600, lo: 0x81, hi: 0x9b}, @@ -4079,21 +4177,21 @@ var nfcSparseValues = [704]valueRange{ {value: 0xc600, lo: 0x9d, hi: 0xb7}, {value: 0xe500, lo: 0xb8, hi: 0xb8}, {value: 0xc600, lo: 0xb9, hi: 0xbf}, - // Block 0x5b, offset 0x1b8 + // Block 0x5c, offset 0x1c6 {value: 0x0000, lo: 0x05}, {value: 0xc600, lo: 0x80, hi: 0x93}, {value: 0xe500, lo: 0x94, hi: 0x94}, {value: 0xc600, lo: 0x95, hi: 0xaf}, {value: 0xe500, lo: 0xb0, hi: 0xb0}, {value: 0xc600, lo: 0xb1, hi: 0xbf}, - // Block 0x5c, offset 0x1be + // Block 0x5d, offset 0x1cc {value: 0x0000, lo: 0x05}, {value: 0xc600, lo: 0x80, hi: 0x8b}, {value: 0xe500, lo: 0x8c, hi: 0x8c}, {value: 0xc600, lo: 0x8d, hi: 0xa7}, {value: 0xe500, lo: 0xa8, hi: 0xa8}, {value: 0xc600, lo: 0xa9, hi: 0xbf}, - // Block 0x5d, offset 0x1c4 + // Block 0x5e, offset 0x1d2 {value: 0x0000, lo: 0x07}, {value: 0xc600, lo: 0x80, hi: 0x83}, {value: 0xe500, lo: 0x84, hi: 0x84}, @@ -4102,310 +4200,393 @@ var nfcSparseValues = [704]valueRange{ {value: 0xc600, lo: 0xa1, hi: 0xbb}, {value: 0xe500, lo: 0xbc, hi: 0xbc}, {value: 0xc600, lo: 0xbd, hi: 0xbf}, - // Block 0x5e, offset 0x1cc + // Block 0x5f, offset 0x1da {value: 0x0000, lo: 0x05}, {value: 0xc600, lo: 0x80, hi: 0x97}, {value: 0xe500, lo: 0x98, hi: 0x98}, {value: 0xc600, lo: 0x99, hi: 0xb3}, {value: 0xe500, lo: 0xb4, hi: 0xb4}, {value: 0xc600, lo: 0xb5, hi: 0xbf}, - // Block 0x5f, offset 0x1d2 + // Block 0x60, offset 0x1e0 {value: 0x0000, lo: 0x05}, {value: 0xc600, lo: 0x80, hi: 0x8f}, {value: 0xe500, lo: 0x90, hi: 0x90}, {value: 0xc600, lo: 0x91, hi: 0xab}, {value: 0xe500, lo: 0xac, hi: 0xac}, {value: 0xc600, lo: 0xad, hi: 0xbf}, - // Block 0x60, offset 0x1d8 + // Block 0x61, offset 0x1e6 {value: 0x0000, lo: 0x05}, {value: 0xc600, lo: 0x80, hi: 0x87}, {value: 0xe500, lo: 0x88, hi: 0x88}, {value: 0xc600, lo: 0x89, hi: 0xa3}, {value: 0xe500, lo: 0xa4, hi: 0xa4}, {value: 0xc600, lo: 0xa5, hi: 0xbf}, - // Block 0x61, offset 0x1de + // Block 0x62, offset 0x1ec {value: 0x0000, lo: 0x03}, {value: 0xc600, lo: 0x80, hi: 0x87}, {value: 0xe500, lo: 0x88, hi: 0x88}, {value: 0xc600, lo: 0x89, hi: 0xa3}, - // Block 0x62, offset 0x1e2 + // Block 0x63, offset 0x1f0 {value: 0x0006, lo: 0x0d}, - {value: 0x43a7, lo: 0x9d, hi: 0x9d}, + {value: 0x448f, lo: 0x9d, hi: 0x9d}, {value: 0x8116, lo: 0x9e, hi: 0x9e}, - {value: 0x4419, lo: 0x9f, hi: 0x9f}, - {value: 0x4407, lo: 0xaa, hi: 0xab}, - {value: 0x450b, lo: 0xac, hi: 0xac}, - {value: 0x4513, lo: 0xad, hi: 0xad}, - {value: 0x435f, lo: 0xae, hi: 0xb1}, - {value: 0x437d, lo: 0xb2, hi: 0xb4}, - {value: 0x4395, lo: 0xb5, hi: 0xb6}, - {value: 0x43a1, lo: 0xb8, hi: 0xb8}, - {value: 0x43ad, lo: 0xb9, hi: 0xbb}, - {value: 0x43c5, lo: 0xbc, hi: 0xbc}, - {value: 0x43cb, lo: 0xbe, hi: 0xbe}, - // Block 0x63, offset 0x1f0 + {value: 0x4501, lo: 0x9f, hi: 0x9f}, + {value: 0x44ef, lo: 0xaa, hi: 0xab}, + {value: 0x45f3, lo: 0xac, hi: 0xac}, + {value: 0x45fb, lo: 0xad, hi: 0xad}, + {value: 0x4447, lo: 0xae, hi: 0xb1}, + {value: 0x4465, lo: 0xb2, hi: 0xb4}, + {value: 0x447d, lo: 0xb5, hi: 0xb6}, + {value: 0x4489, lo: 0xb8, hi: 0xb8}, + {value: 0x4495, lo: 0xb9, hi: 0xbb}, + {value: 0x44ad, lo: 0xbc, hi: 0xbc}, + {value: 0x44b3, lo: 0xbe, hi: 0xbe}, + // Block 0x64, offset 0x1fe {value: 0x0006, lo: 0x08}, - {value: 0x43d1, lo: 0x80, hi: 0x81}, - {value: 0x43dd, lo: 0x83, hi: 0x84}, - {value: 0x43ef, lo: 0x86, hi: 0x89}, - {value: 0x4413, lo: 0x8a, hi: 0x8a}, - {value: 0x438f, lo: 0x8b, hi: 0x8b}, - {value: 0x4377, lo: 0x8c, hi: 0x8c}, - {value: 0x43bf, lo: 0x8d, hi: 0x8d}, - {value: 0x43e9, lo: 0x8e, hi: 0x8e}, - // Block 0x64, offset 0x1f9 + {value: 0x44b9, lo: 0x80, hi: 0x81}, + {value: 0x44c5, lo: 0x83, hi: 0x84}, + {value: 0x44d7, lo: 0x86, hi: 0x89}, + {value: 0x44fb, lo: 0x8a, hi: 0x8a}, + {value: 0x4477, lo: 0x8b, hi: 0x8b}, + {value: 0x445f, lo: 0x8c, hi: 0x8c}, + {value: 0x44a7, lo: 0x8d, hi: 0x8d}, + {value: 0x44d1, lo: 0x8e, hi: 0x8e}, + // Block 0x65, offset 0x207 {value: 0x0000, lo: 0x02}, {value: 0x8100, lo: 0xa4, hi: 0xa5}, {value: 0x8100, lo: 0xb0, hi: 0xb1}, - // Block 0x65, offset 0x1fc + // Block 0x66, offset 0x20a {value: 0x0000, lo: 0x02}, {value: 0x8100, lo: 0x9b, hi: 0x9d}, {value: 0x8200, lo: 0x9e, hi: 0xa3}, - // Block 0x66, offset 0x1ff + // Block 0x67, offset 0x20d {value: 0x0000, lo: 0x01}, {value: 0x8100, lo: 0x90, hi: 0x90}, - // Block 0x67, offset 0x201 + // Block 0x68, offset 0x20f {value: 0x0000, lo: 0x02}, {value: 0x8100, lo: 0x99, hi: 0x99}, {value: 0x8200, lo: 0xb2, hi: 0xb4}, - // Block 0x68, offset 0x204 + // Block 0x69, offset 0x212 {value: 0x0000, lo: 0x01}, {value: 0x8100, lo: 0xbc, hi: 0xbd}, - // Block 0x69, offset 0x206 + // Block 0x6a, offset 0x214 {value: 0x0000, lo: 0x03}, {value: 0x8133, lo: 0xa0, hi: 0xa6}, {value: 0x812e, lo: 0xa7, hi: 0xad}, {value: 0x8133, lo: 0xae, hi: 0xaf}, - // Block 0x6a, offset 0x20a + // Block 0x6b, offset 0x218 {value: 0x0000, lo: 0x04}, {value: 0x8100, lo: 0x89, hi: 0x8c}, {value: 0x8100, lo: 0xb0, hi: 0xb2}, {value: 0x8100, lo: 0xb4, hi: 0xb4}, {value: 0x8100, lo: 0xb6, hi: 0xbf}, - // Block 0x6b, offset 0x20f + // Block 0x6c, offset 0x21d {value: 0x0000, lo: 0x01}, {value: 0x8100, lo: 0x81, hi: 0x8c}, - // Block 0x6c, offset 0x211 + // Block 0x6d, offset 0x21f {value: 0x0000, lo: 0x01}, {value: 0x8100, lo: 0xb5, hi: 0xba}, - // Block 0x6d, offset 0x213 + // Block 0x6e, offset 0x221 {value: 0x0000, lo: 0x04}, - {value: 0x4ab6, lo: 0x9e, hi: 0x9f}, - {value: 0x4ab6, lo: 0xa3, hi: 0xa3}, - {value: 0x4ab6, lo: 0xa5, hi: 0xa6}, - {value: 0x4ab6, lo: 0xaa, hi: 0xaf}, - // Block 0x6e, offset 0x218 + {value: 0x4cc0, lo: 0x9e, hi: 0x9f}, + {value: 0x4cc0, lo: 0xa3, hi: 0xa3}, + {value: 0x4cc0, lo: 0xa5, hi: 0xa6}, + {value: 0x4cc0, lo: 0xaa, hi: 0xaf}, + // Block 0x6f, offset 0x226 {value: 0x0000, lo: 0x05}, - {value: 0x4ab6, lo: 0x82, hi: 0x87}, - {value: 0x4ab6, lo: 0x8a, hi: 0x8f}, - {value: 0x4ab6, lo: 0x92, hi: 0x97}, - {value: 0x4ab6, lo: 0x9a, hi: 0x9c}, + {value: 0x4cc0, lo: 0x82, hi: 0x87}, + {value: 0x4cc0, lo: 0x8a, hi: 0x8f}, + {value: 0x4cc0, lo: 0x92, hi: 0x97}, + {value: 0x4cc0, lo: 0x9a, hi: 0x9c}, {value: 0x8100, lo: 0xa3, hi: 0xa3}, - // Block 0x6f, offset 0x21e + // Block 0x70, offset 0x22c {value: 0x0000, lo: 0x01}, {value: 0x812e, lo: 0xbd, hi: 0xbd}, - // Block 0x70, offset 0x220 + // Block 0x71, offset 0x22e {value: 0x0000, lo: 0x01}, {value: 0x812e, lo: 0xa0, hi: 0xa0}, - // Block 0x71, offset 0x222 + // Block 0x72, offset 0x230 {value: 0x0000, lo: 0x01}, {value: 0x8133, lo: 0xb6, hi: 0xba}, - // Block 0x72, offset 0x224 + // Block 0x73, offset 0x232 + {value: 0x0000, lo: 0x04}, + {value: 0x410f, lo: 0x89, hi: 0x89}, + {value: 0xa000, lo: 0x92, hi: 0x92}, + {value: 0xa000, lo: 0x9a, hi: 0x9a}, + {value: 0x4117, lo: 0xa4, hi: 0xa4}, + // Block 0x74, offset 0x237 {value: 0x002d, lo: 0x05}, {value: 0x812e, lo: 0x8d, hi: 0x8d}, {value: 0x8133, lo: 0x8f, hi: 0x8f}, {value: 0x8133, lo: 0xb8, hi: 0xb8}, {value: 0x8101, lo: 0xb9, hi: 0xba}, {value: 0x8105, lo: 0xbf, hi: 0xbf}, - // Block 0x73, offset 0x22a + // Block 0x75, offset 0x23d {value: 0x0000, lo: 0x02}, {value: 0x8133, lo: 0xa5, hi: 0xa5}, {value: 0x812e, lo: 0xa6, hi: 0xa6}, - // Block 0x74, offset 0x22d + // Block 0x76, offset 0x240 {value: 0x0000, lo: 0x01}, {value: 0x8133, lo: 0xa4, hi: 0xa7}, - // Block 0x75, offset 0x22f + // Block 0x77, offset 0x242 + {value: 0x0000, lo: 0x01}, + {value: 0x8133, lo: 0xa9, hi: 0xad}, + // Block 0x78, offset 0x244 {value: 0x0000, lo: 0x01}, {value: 0x8133, lo: 0xab, hi: 0xac}, - // Block 0x76, offset 0x231 + // Block 0x79, offset 0x246 + {value: 0x0000, lo: 0x02}, + {value: 0x812e, lo: 0xba, hi: 0xbb}, + {value: 0x812e, lo: 0xbd, hi: 0xbf}, + // Block 0x7a, offset 0x249 {value: 0x0000, lo: 0x05}, {value: 0x812e, lo: 0x86, hi: 0x87}, {value: 0x8133, lo: 0x88, hi: 0x8a}, {value: 0x812e, lo: 0x8b, hi: 0x8b}, {value: 0x8133, lo: 0x8c, hi: 0x8c}, {value: 0x812e, lo: 0x8d, hi: 0x90}, - // Block 0x77, offset 0x237 - {value: 0x0000, lo: 0x02}, + // Block 0x7b, offset 0x24f + {value: 0x0005, lo: 0x03}, + {value: 0x8133, lo: 0x82, hi: 0x82}, + {value: 0x812e, lo: 0x83, hi: 0x84}, + {value: 0x812e, lo: 0x85, hi: 0x85}, + // Block 0x7c, offset 0x253 + {value: 0x0000, lo: 0x03}, {value: 0x8105, lo: 0x86, hi: 0x86}, + {value: 0x8105, lo: 0xb0, hi: 0xb0}, {value: 0x8105, lo: 0xbf, hi: 0xbf}, - // Block 0x78, offset 0x23a + // Block 0x7d, offset 0x257 {value: 0x17fe, lo: 0x07}, {value: 0xa000, lo: 0x99, hi: 0x99}, - {value: 0x424f, lo: 0x9a, hi: 0x9a}, + {value: 0x4287, lo: 0x9a, hi: 0x9a}, {value: 0xa000, lo: 0x9b, hi: 0x9b}, - {value: 0x4259, lo: 0x9c, hi: 0x9c}, + {value: 0x4291, lo: 0x9c, hi: 0x9c}, {value: 0xa000, lo: 0xa5, hi: 0xa5}, - {value: 0x4263, lo: 0xab, hi: 0xab}, + {value: 0x429b, lo: 0xab, hi: 0xab}, {value: 0x8105, lo: 0xb9, hi: 0xba}, - // Block 0x79, offset 0x242 + // Block 0x7e, offset 0x25f {value: 0x0000, lo: 0x06}, {value: 0x8133, lo: 0x80, hi: 0x82}, {value: 0x9900, lo: 0xa7, hi: 0xa7}, - {value: 0x2d8b, lo: 0xae, hi: 0xae}, - {value: 0x2d95, lo: 0xaf, hi: 0xaf}, + {value: 0x42a5, lo: 0xae, hi: 0xae}, + {value: 0x42af, lo: 0xaf, hi: 0xaf}, {value: 0xa000, lo: 0xb1, hi: 0xb2}, {value: 0x8105, lo: 0xb3, hi: 0xb4}, - // Block 0x7a, offset 0x249 + // Block 0x7f, offset 0x266 {value: 0x0000, lo: 0x02}, {value: 0x8105, lo: 0x80, hi: 0x80}, {value: 0x8103, lo: 0x8a, hi: 0x8a}, - // Block 0x7b, offset 0x24c + // Block 0x80, offset 0x269 {value: 0x0000, lo: 0x02}, {value: 0x8105, lo: 0xb5, hi: 0xb5}, {value: 0x8103, lo: 0xb6, hi: 0xb6}, - // Block 0x7c, offset 0x24f + // Block 0x81, offset 0x26c {value: 0x0002, lo: 0x01}, {value: 0x8103, lo: 0xa9, hi: 0xaa}, - // Block 0x7d, offset 0x251 + // Block 0x82, offset 0x26e {value: 0x0000, lo: 0x02}, {value: 0x8103, lo: 0xbb, hi: 0xbc}, {value: 0x9900, lo: 0xbe, hi: 0xbe}, - // Block 0x7e, offset 0x254 + // Block 0x83, offset 0x271 {value: 0x0000, lo: 0x07}, {value: 0xa000, lo: 0x87, hi: 0x87}, - {value: 0x2d9f, lo: 0x8b, hi: 0x8b}, - {value: 0x2da9, lo: 0x8c, hi: 0x8c}, + {value: 0x42b9, lo: 0x8b, hi: 0x8b}, + {value: 0x42c3, lo: 0x8c, hi: 0x8c}, {value: 0x8105, lo: 0x8d, hi: 0x8d}, {value: 0x9900, lo: 0x97, hi: 0x97}, {value: 0x8133, lo: 0xa6, hi: 0xac}, {value: 0x8133, lo: 0xb0, hi: 0xb4}, - // Block 0x7f, offset 0x25c + // Block 0x84, offset 0x279 + {value: 0x5d33, lo: 0x09}, + {value: 0xa000, lo: 0x82, hi: 0x82}, + {value: 0x42cd, lo: 0x83, hi: 0x84}, + {value: 0x42d7, lo: 0x85, hi: 0x85}, + {value: 0xa000, lo: 0x8b, hi: 0x8b}, + {value: 0x42e1, lo: 0x8e, hi: 0x8e}, + {value: 0xa000, lo: 0x90, hi: 0x90}, + {value: 0x42eb, lo: 0x91, hi: 0x91}, + {value: 0x9900, lo: 0xb8, hi: 0xb8}, + {value: 0x9900, lo: 0xbb, hi: 0xbb}, + // Block 0x85, offset 0x283 + {value: 0x0000, lo: 0x06}, + {value: 0xb900, lo: 0x82, hi: 0x82}, + {value: 0x4c14, lo: 0x85, hi: 0x85}, + {value: 0x4c09, lo: 0x87, hi: 0x87}, + {value: 0x4c1f, lo: 0x88, hi: 0x88}, + {value: 0x9900, lo: 0x89, hi: 0x89}, + {value: 0x8105, lo: 0x8e, hi: 0x90}, + // Block 0x86, offset 0x28a {value: 0x0000, lo: 0x03}, {value: 0x8105, lo: 0x82, hi: 0x82}, {value: 0x8103, lo: 0x86, hi: 0x86}, {value: 0x8133, lo: 0x9e, hi: 0x9e}, - // Block 0x80, offset 0x260 - {value: 0x6b4d, lo: 0x06}, + // Block 0x87, offset 0x28e + {value: 0x560b, lo: 0x06}, {value: 0x9900, lo: 0xb0, hi: 0xb0}, {value: 0xa000, lo: 0xb9, hi: 0xb9}, {value: 0x9900, lo: 0xba, hi: 0xba}, - {value: 0x2dbd, lo: 0xbb, hi: 0xbb}, - {value: 0x2db3, lo: 0xbc, hi: 0xbd}, - {value: 0x2dc7, lo: 0xbe, hi: 0xbe}, - // Block 0x81, offset 0x267 + {value: 0x42ff, lo: 0xbb, hi: 0xbb}, + {value: 0x42f5, lo: 0xbc, hi: 0xbd}, + {value: 0x4309, lo: 0xbe, hi: 0xbe}, + // Block 0x88, offset 0x295 {value: 0x0000, lo: 0x02}, {value: 0x8105, lo: 0x82, hi: 0x82}, {value: 0x8103, lo: 0x83, hi: 0x83}, - // Block 0x82, offset 0x26a + // Block 0x89, offset 0x298 {value: 0x0000, lo: 0x05}, {value: 0x9900, lo: 0xaf, hi: 0xaf}, {value: 0xa000, lo: 0xb8, hi: 0xb9}, - {value: 0x2dd1, lo: 0xba, hi: 0xba}, - {value: 0x2ddb, lo: 0xbb, hi: 0xbb}, + {value: 0x4313, lo: 0xba, hi: 0xba}, + {value: 0x431d, lo: 0xbb, hi: 0xbb}, {value: 0x8105, lo: 0xbf, hi: 0xbf}, - // Block 0x83, offset 0x270 + // Block 0x8a, offset 0x29e {value: 0x0000, lo: 0x01}, {value: 0x8103, lo: 0x80, hi: 0x80}, - // Block 0x84, offset 0x272 + // Block 0x8b, offset 0x2a0 {value: 0x0000, lo: 0x02}, {value: 0x8105, lo: 0xb6, hi: 0xb6}, {value: 0x8103, lo: 0xb7, hi: 0xb7}, - // Block 0x85, offset 0x275 + // Block 0x8c, offset 0x2a3 {value: 0x0000, lo: 0x01}, {value: 0x8105, lo: 0xab, hi: 0xab}, - // Block 0x86, offset 0x277 + // Block 0x8d, offset 0x2a5 {value: 0x0000, lo: 0x02}, {value: 0x8105, lo: 0xb9, hi: 0xb9}, {value: 0x8103, lo: 0xba, hi: 0xba}, - // Block 0x87, offset 0x27a + // Block 0x8e, offset 0x2a8 {value: 0x0000, lo: 0x04}, {value: 0x9900, lo: 0xb0, hi: 0xb0}, {value: 0xa000, lo: 0xb5, hi: 0xb5}, - {value: 0x2de5, lo: 0xb8, hi: 0xb8}, + {value: 0x4327, lo: 0xb8, hi: 0xb8}, {value: 0x8105, lo: 0xbd, hi: 0xbe}, - // Block 0x88, offset 0x27f + // Block 0x8f, offset 0x2ad {value: 0x0000, lo: 0x01}, {value: 0x8103, lo: 0x83, hi: 0x83}, - // Block 0x89, offset 0x281 + // Block 0x90, offset 0x2af {value: 0x0000, lo: 0x01}, {value: 0x8105, lo: 0xa0, hi: 0xa0}, - // Block 0x8a, offset 0x283 + // Block 0x91, offset 0x2b1 {value: 0x0000, lo: 0x01}, {value: 0x8105, lo: 0xb4, hi: 0xb4}, - // Block 0x8b, offset 0x285 + // Block 0x92, offset 0x2b3 {value: 0x0000, lo: 0x01}, {value: 0x8105, lo: 0x87, hi: 0x87}, - // Block 0x8c, offset 0x287 + // Block 0x93, offset 0x2b5 {value: 0x0000, lo: 0x01}, {value: 0x8105, lo: 0x99, hi: 0x99}, - // Block 0x8d, offset 0x289 + // Block 0x94, offset 0x2b7 {value: 0x0000, lo: 0x02}, {value: 0x8103, lo: 0x82, hi: 0x82}, {value: 0x8105, lo: 0x84, hi: 0x85}, - // Block 0x8e, offset 0x28c + // Block 0x95, offset 0x2ba {value: 0x0000, lo: 0x01}, {value: 0x8105, lo: 0x97, hi: 0x97}, - // Block 0x8f, offset 0x28e + // Block 0x96, offset 0x2bc + {value: 0x0000, lo: 0x01}, + {value: 0x8105, lo: 0x81, hi: 0x82}, + // Block 0x97, offset 0x2be + {value: 0x0000, lo: 0x0c}, + {value: 0xb900, lo: 0x9e, hi: 0x9e}, + {value: 0x9900, lo: 0x9f, hi: 0xa0}, + {value: 0x4c83, lo: 0xa1, hi: 0xa1}, + {value: 0x4c8e, lo: 0xa2, hi: 0xa2}, + {value: 0x4c2a, lo: 0xa3, hi: 0xa3}, + {value: 0x4c40, lo: 0xa4, hi: 0xa4}, + {value: 0x4c35, lo: 0xa5, hi: 0xa5}, + {value: 0x4c56, lo: 0xa6, hi: 0xa6}, + {value: 0x4c74, lo: 0xa7, hi: 0xa7}, + {value: 0x4c65, lo: 0xa8, hi: 0xa8}, + {value: 0xb900, lo: 0xa9, hi: 0xa9}, + {value: 0x8105, lo: 0xaf, hi: 0xaf}, + // Block 0x98, offset 0x2cb {value: 0x0000, lo: 0x01}, {value: 0x8101, lo: 0xb0, hi: 0xb4}, - // Block 0x90, offset 0x290 + // Block 0x99, offset 0x2cd {value: 0x0000, lo: 0x01}, {value: 0x8133, lo: 0xb0, hi: 0xb6}, - // Block 0x91, offset 0x292 + // Block 0x9a, offset 0x2cf + {value: 0x0000, lo: 0x05}, + {value: 0xa000, lo: 0xa3, hi: 0xa3}, + {value: 0xb900, lo: 0xa7, hi: 0xa7}, + {value: 0x4c4b, lo: 0xa8, hi: 0xa8}, + {value: 0x4b35, lo: 0xa9, hi: 0xa9}, + {value: 0x4347, lo: 0xaa, hi: 0xaa}, + // Block 0x9b, offset 0x2d5 {value: 0x0000, lo: 0x01}, {value: 0x8102, lo: 0xb0, hi: 0xb1}, - // Block 0x92, offset 0x294 + // Block 0x9c, offset 0x2d7 {value: 0x0000, lo: 0x01}, {value: 0x8101, lo: 0x9e, hi: 0x9e}, - // Block 0x93, offset 0x296 + // Block 0x9d, offset 0x2d9 {value: 0x0000, lo: 0x0c}, - {value: 0x45e3, lo: 0x9e, hi: 0x9e}, - {value: 0x45ed, lo: 0x9f, hi: 0x9f}, - {value: 0x4621, lo: 0xa0, hi: 0xa0}, - {value: 0x462f, lo: 0xa1, hi: 0xa1}, - {value: 0x463d, lo: 0xa2, hi: 0xa2}, - {value: 0x464b, lo: 0xa3, hi: 0xa3}, - {value: 0x4659, lo: 0xa4, hi: 0xa4}, + {value: 0x4743, lo: 0x9e, hi: 0x9e}, + {value: 0x474d, lo: 0x9f, hi: 0x9f}, + {value: 0x4781, lo: 0xa0, hi: 0xa0}, + {value: 0x478f, lo: 0xa1, hi: 0xa1}, + {value: 0x479d, lo: 0xa2, hi: 0xa2}, + {value: 0x47ab, lo: 0xa3, hi: 0xa3}, + {value: 0x47b9, lo: 0xa4, hi: 0xa4}, {value: 0x812c, lo: 0xa5, hi: 0xa6}, {value: 0x8101, lo: 0xa7, hi: 0xa9}, {value: 0x8131, lo: 0xad, hi: 0xad}, {value: 0x812c, lo: 0xae, hi: 0xb2}, {value: 0x812e, lo: 0xbb, hi: 0xbf}, - // Block 0x94, offset 0x2a3 + // Block 0x9e, offset 0x2e6 {value: 0x0000, lo: 0x09}, {value: 0x812e, lo: 0x80, hi: 0x82}, {value: 0x8133, lo: 0x85, hi: 0x89}, {value: 0x812e, lo: 0x8a, hi: 0x8b}, {value: 0x8133, lo: 0xaa, hi: 0xad}, - {value: 0x45f7, lo: 0xbb, hi: 0xbb}, - {value: 0x4601, lo: 0xbc, hi: 0xbc}, - {value: 0x4667, lo: 0xbd, hi: 0xbd}, - {value: 0x4683, lo: 0xbe, hi: 0xbe}, - {value: 0x4675, lo: 0xbf, hi: 0xbf}, - // Block 0x95, offset 0x2ad + {value: 0x4757, lo: 0xbb, hi: 0xbb}, + {value: 0x4761, lo: 0xbc, hi: 0xbc}, + {value: 0x47c7, lo: 0xbd, hi: 0xbd}, + {value: 0x47e3, lo: 0xbe, hi: 0xbe}, + {value: 0x47d5, lo: 0xbf, hi: 0xbf}, + // Block 0x9f, offset 0x2f0 {value: 0x0000, lo: 0x01}, - {value: 0x4691, lo: 0x80, hi: 0x80}, - // Block 0x96, offset 0x2af + {value: 0x47f1, lo: 0x80, hi: 0x80}, + // Block 0xa0, offset 0x2f2 {value: 0x0000, lo: 0x01}, {value: 0x8133, lo: 0x82, hi: 0x84}, - // Block 0x97, offset 0x2b1 + // Block 0xa1, offset 0x2f4 {value: 0x0000, lo: 0x05}, {value: 0x8133, lo: 0x80, hi: 0x86}, {value: 0x8133, lo: 0x88, hi: 0x98}, {value: 0x8133, lo: 0x9b, hi: 0xa1}, {value: 0x8133, lo: 0xa3, hi: 0xa4}, {value: 0x8133, lo: 0xa6, hi: 0xaa}, - // Block 0x98, offset 0x2b7 + // Block 0xa2, offset 0x2fa + {value: 0x0000, lo: 0x01}, + {value: 0x8133, lo: 0x8f, hi: 0x8f}, + // Block 0xa3, offset 0x2fc + {value: 0x0000, lo: 0x01}, + {value: 0x8133, lo: 0xae, hi: 0xae}, + // Block 0xa4, offset 0x2fe {value: 0x0000, lo: 0x01}, {value: 0x8133, lo: 0xac, hi: 0xaf}, - // Block 0x99, offset 0x2b9 + // Block 0xa5, offset 0x300 + {value: 0x0000, lo: 0x03}, + {value: 0x8134, lo: 0xac, hi: 0xad}, + {value: 0x812e, lo: 0xae, hi: 0xae}, + {value: 0x8133, lo: 0xaf, hi: 0xaf}, + // Block 0xa6, offset 0x304 + {value: 0x0000, lo: 0x02}, + {value: 0x8133, lo: 0xae, hi: 0xae}, + {value: 0x812e, lo: 0xaf, hi: 0xaf}, + // Block 0xa7, offset 0x307 + {value: 0x0000, lo: 0x04}, + {value: 0x8133, lo: 0xa3, hi: 0xa3}, + {value: 0x8133, lo: 0xa6, hi: 0xa6}, + {value: 0x8133, lo: 0xae, hi: 0xaf}, + {value: 0x8133, lo: 0xb5, hi: 0xb5}, + // Block 0xa8, offset 0x30c {value: 0x0000, lo: 0x01}, {value: 0x812e, lo: 0x90, hi: 0x96}, - // Block 0x9a, offset 0x2bb + // Block 0xa9, offset 0x30e {value: 0x0000, lo: 0x02}, {value: 0x8133, lo: 0x84, hi: 0x89}, {value: 0x8103, lo: 0x8a, hi: 0x8a}, - // Block 0x9b, offset 0x2be + // Block 0xaa, offset 0x311 {value: 0x0000, lo: 0x01}, {value: 0x8100, lo: 0x93, hi: 0x93}, } @@ -4580,7 +4761,7 @@ func (t *nfkcTrie) lookupStringUnsafe(s string) uint16 { return 0 } -// nfkcTrie. Total size: 18768 bytes (18.33 KiB). Checksum: c51186dd2412943d. +// nfkcTrie. Total size: 19650 bytes (19.19 KiB). Checksum: 29892d851eed0531. type nfkcTrie struct{} func newNfkcTrie(i int) *nfkcTrie { @@ -4590,17 +4771,17 @@ func newNfkcTrie(i int) *nfkcTrie { // lookupValue determines the type of block n and looks up the value for b. func (t *nfkcTrie) lookupValue(n uint32, b byte) uint16 { switch { - case n < 92: + case n < 95: return uint16(nfkcValues[n<<6+uint32(b)]) default: - n -= 92 + n -= 95 return uint16(nfkcSparse.lookup(n, b)) } } -// nfkcValues: 94 blocks, 6016 entries, 12032 bytes +// nfkcValues: 97 blocks, 6208 entries, 12416 bytes // The third block is the zero block. -var nfkcValues = [6016]uint16{ +var nfkcValues = [6208]uint16{ // Block 0x0, offset 0x0 0x3c: 0xa000, 0x3d: 0xa000, 0x3e: 0xa000, // Block 0x1, offset 0x40 @@ -4616,63 +4797,63 @@ var nfkcValues = [6016]uint16{ 0x76: 0xa000, 0x77: 0xa000, 0x78: 0xa000, 0x79: 0xa000, 0x7a: 0xa000, // Block 0x2, offset 0x80 // Block 0x3, offset 0xc0 - 0xc0: 0x2f86, 0xc1: 0x2f8b, 0xc2: 0x469f, 0xc3: 0x2f90, 0xc4: 0x46ae, 0xc5: 0x46b3, - 0xc6: 0xa000, 0xc7: 0x46bd, 0xc8: 0x2ff9, 0xc9: 0x2ffe, 0xca: 0x46c2, 0xcb: 0x3012, - 0xcc: 0x3085, 0xcd: 0x308a, 0xce: 0x308f, 0xcf: 0x46d6, 0xd1: 0x311b, - 0xd2: 0x313e, 0xd3: 0x3143, 0xd4: 0x46e0, 0xd5: 0x46e5, 0xd6: 0x46f4, - 0xd8: 0xa000, 0xd9: 0x31ca, 0xda: 0x31cf, 0xdb: 0x31d4, 0xdc: 0x4726, 0xdd: 0x324c, - 0xe0: 0x3292, 0xe1: 0x3297, 0xe2: 0x4730, 0xe3: 0x329c, - 0xe4: 0x473f, 0xe5: 0x4744, 0xe6: 0xa000, 0xe7: 0x474e, 0xe8: 0x3305, 0xe9: 0x330a, - 0xea: 0x4753, 0xeb: 0x331e, 0xec: 0x3396, 0xed: 0x339b, 0xee: 0x33a0, 0xef: 0x4767, - 0xf1: 0x342c, 0xf2: 0x344f, 0xf3: 0x3454, 0xf4: 0x4771, 0xf5: 0x4776, - 0xf6: 0x4785, 0xf8: 0xa000, 0xf9: 0x34e0, 0xfa: 0x34e5, 0xfb: 0x34ea, - 0xfc: 0x47b7, 0xfd: 0x3567, 0xff: 0x3580, + 0xc0: 0x2ece, 0xc1: 0x2ed3, 0xc2: 0x47ff, 0xc3: 0x2ed8, 0xc4: 0x480e, 0xc5: 0x4813, + 0xc6: 0xa000, 0xc7: 0x481d, 0xc8: 0x2f41, 0xc9: 0x2f46, 0xca: 0x4822, 0xcb: 0x2f5a, + 0xcc: 0x2fcd, 0xcd: 0x2fd2, 0xce: 0x2fd7, 0xcf: 0x4836, 0xd1: 0x3063, + 0xd2: 0x3086, 0xd3: 0x308b, 0xd4: 0x4840, 0xd5: 0x4845, 0xd6: 0x4854, + 0xd8: 0xa000, 0xd9: 0x3112, 0xda: 0x3117, 0xdb: 0x311c, 0xdc: 0x4886, 0xdd: 0x3194, + 0xe0: 0x31da, 0xe1: 0x31df, 0xe2: 0x4890, 0xe3: 0x31e4, + 0xe4: 0x489f, 0xe5: 0x48a4, 0xe6: 0xa000, 0xe7: 0x48ae, 0xe8: 0x324d, 0xe9: 0x3252, + 0xea: 0x48b3, 0xeb: 0x3266, 0xec: 0x32de, 0xed: 0x32e3, 0xee: 0x32e8, 0xef: 0x48c7, + 0xf1: 0x3374, 0xf2: 0x3397, 0xf3: 0x339c, 0xf4: 0x48d1, 0xf5: 0x48d6, + 0xf6: 0x48e5, 0xf8: 0xa000, 0xf9: 0x3428, 0xfa: 0x342d, 0xfb: 0x3432, + 0xfc: 0x4917, 0xfd: 0x34af, 0xff: 0x34c8, // Block 0x4, offset 0x100 - 0x100: 0x2f95, 0x101: 0x32a1, 0x102: 0x46a4, 0x103: 0x4735, 0x104: 0x2fb3, 0x105: 0x32bf, - 0x106: 0x2fc7, 0x107: 0x32d3, 0x108: 0x2fcc, 0x109: 0x32d8, 0x10a: 0x2fd1, 0x10b: 0x32dd, - 0x10c: 0x2fd6, 0x10d: 0x32e2, 0x10e: 0x2fe0, 0x10f: 0x32ec, - 0x112: 0x46c7, 0x113: 0x4758, 0x114: 0x3008, 0x115: 0x3314, 0x116: 0x300d, 0x117: 0x3319, - 0x118: 0x302b, 0x119: 0x3337, 0x11a: 0x301c, 0x11b: 0x3328, 0x11c: 0x3044, 0x11d: 0x3350, - 0x11e: 0x304e, 0x11f: 0x335a, 0x120: 0x3053, 0x121: 0x335f, 0x122: 0x305d, 0x123: 0x3369, - 0x124: 0x3062, 0x125: 0x336e, 0x128: 0x3094, 0x129: 0x33a5, - 0x12a: 0x3099, 0x12b: 0x33aa, 0x12c: 0x309e, 0x12d: 0x33af, 0x12e: 0x30c1, 0x12f: 0x33cd, - 0x130: 0x30a3, 0x132: 0x1960, 0x133: 0x19ed, 0x134: 0x30cb, 0x135: 0x33d7, - 0x136: 0x30df, 0x137: 0x33f0, 0x139: 0x30e9, 0x13a: 0x33fa, 0x13b: 0x30f3, - 0x13c: 0x3404, 0x13d: 0x30ee, 0x13e: 0x33ff, 0x13f: 0x1bb2, + 0x100: 0x2edd, 0x101: 0x31e9, 0x102: 0x4804, 0x103: 0x4895, 0x104: 0x2efb, 0x105: 0x3207, + 0x106: 0x2f0f, 0x107: 0x321b, 0x108: 0x2f14, 0x109: 0x3220, 0x10a: 0x2f19, 0x10b: 0x3225, + 0x10c: 0x2f1e, 0x10d: 0x322a, 0x10e: 0x2f28, 0x10f: 0x3234, + 0x112: 0x4827, 0x113: 0x48b8, 0x114: 0x2f50, 0x115: 0x325c, 0x116: 0x2f55, 0x117: 0x3261, + 0x118: 0x2f73, 0x119: 0x327f, 0x11a: 0x2f64, 0x11b: 0x3270, 0x11c: 0x2f8c, 0x11d: 0x3298, + 0x11e: 0x2f96, 0x11f: 0x32a2, 0x120: 0x2f9b, 0x121: 0x32a7, 0x122: 0x2fa5, 0x123: 0x32b1, + 0x124: 0x2faa, 0x125: 0x32b6, 0x128: 0x2fdc, 0x129: 0x32ed, + 0x12a: 0x2fe1, 0x12b: 0x32f2, 0x12c: 0x2fe6, 0x12d: 0x32f7, 0x12e: 0x3009, 0x12f: 0x3315, + 0x130: 0x2feb, 0x132: 0x1a8a, 0x133: 0x1b17, 0x134: 0x3013, 0x135: 0x331f, + 0x136: 0x3027, 0x137: 0x3338, 0x139: 0x3031, 0x13a: 0x3342, 0x13b: 0x303b, + 0x13c: 0x334c, 0x13d: 0x3036, 0x13e: 0x3347, 0x13f: 0x1cdc, // Block 0x5, offset 0x140 - 0x140: 0x1c3a, 0x143: 0x3116, 0x144: 0x3427, 0x145: 0x312f, - 0x146: 0x3440, 0x147: 0x3125, 0x148: 0x3436, 0x149: 0x1c62, - 0x14c: 0x46ea, 0x14d: 0x477b, 0x14e: 0x3148, 0x14f: 0x3459, 0x150: 0x3152, 0x151: 0x3463, - 0x154: 0x3170, 0x155: 0x3481, 0x156: 0x3189, 0x157: 0x349a, - 0x158: 0x317a, 0x159: 0x348b, 0x15a: 0x470d, 0x15b: 0x479e, 0x15c: 0x3193, 0x15d: 0x34a4, - 0x15e: 0x31a2, 0x15f: 0x34b3, 0x160: 0x4712, 0x161: 0x47a3, 0x162: 0x31bb, 0x163: 0x34d1, - 0x164: 0x31ac, 0x165: 0x34c2, 0x168: 0x471c, 0x169: 0x47ad, - 0x16a: 0x4721, 0x16b: 0x47b2, 0x16c: 0x31d9, 0x16d: 0x34ef, 0x16e: 0x31e3, 0x16f: 0x34f9, - 0x170: 0x31e8, 0x171: 0x34fe, 0x172: 0x3206, 0x173: 0x351c, 0x174: 0x3229, 0x175: 0x353f, - 0x176: 0x3251, 0x177: 0x356c, 0x178: 0x3265, 0x179: 0x3274, 0x17a: 0x3594, 0x17b: 0x327e, - 0x17c: 0x359e, 0x17d: 0x3283, 0x17e: 0x35a3, 0x17f: 0x00a7, + 0x140: 0x1d64, 0x143: 0x305e, 0x144: 0x336f, 0x145: 0x3077, + 0x146: 0x3388, 0x147: 0x306d, 0x148: 0x337e, 0x149: 0x1d8c, + 0x14c: 0x484a, 0x14d: 0x48db, 0x14e: 0x3090, 0x14f: 0x33a1, 0x150: 0x309a, 0x151: 0x33ab, + 0x154: 0x30b8, 0x155: 0x33c9, 0x156: 0x30d1, 0x157: 0x33e2, + 0x158: 0x30c2, 0x159: 0x33d3, 0x15a: 0x486d, 0x15b: 0x48fe, 0x15c: 0x30db, 0x15d: 0x33ec, + 0x15e: 0x30ea, 0x15f: 0x33fb, 0x160: 0x4872, 0x161: 0x4903, 0x162: 0x3103, 0x163: 0x3419, + 0x164: 0x30f4, 0x165: 0x340a, 0x168: 0x487c, 0x169: 0x490d, + 0x16a: 0x4881, 0x16b: 0x4912, 0x16c: 0x3121, 0x16d: 0x3437, 0x16e: 0x312b, 0x16f: 0x3441, + 0x170: 0x3130, 0x171: 0x3446, 0x172: 0x314e, 0x173: 0x3464, 0x174: 0x3171, 0x175: 0x3487, + 0x176: 0x3199, 0x177: 0x34b4, 0x178: 0x31ad, 0x179: 0x31bc, 0x17a: 0x34dc, 0x17b: 0x31c6, + 0x17c: 0x34e6, 0x17d: 0x31cb, 0x17e: 0x34eb, 0x17f: 0x00a7, // Block 0x6, offset 0x180 - 0x184: 0x2e05, 0x185: 0x2e0b, - 0x186: 0x2e11, 0x187: 0x1975, 0x188: 0x1978, 0x189: 0x1a0e, 0x18a: 0x198d, 0x18b: 0x1990, - 0x18c: 0x1a44, 0x18d: 0x2f9f, 0x18e: 0x32ab, 0x18f: 0x30ad, 0x190: 0x33b9, 0x191: 0x3157, - 0x192: 0x3468, 0x193: 0x31ed, 0x194: 0x3503, 0x195: 0x39e6, 0x196: 0x3b75, 0x197: 0x39df, - 0x198: 0x3b6e, 0x199: 0x39ed, 0x19a: 0x3b7c, 0x19b: 0x39d8, 0x19c: 0x3b67, - 0x19e: 0x38c7, 0x19f: 0x3a56, 0x1a0: 0x38c0, 0x1a1: 0x3a4f, 0x1a2: 0x35ca, 0x1a3: 0x35dc, - 0x1a6: 0x3058, 0x1a7: 0x3364, 0x1a8: 0x30d5, 0x1a9: 0x33e6, - 0x1aa: 0x4703, 0x1ab: 0x4794, 0x1ac: 0x39a7, 0x1ad: 0x3b36, 0x1ae: 0x35ee, 0x1af: 0x35f4, - 0x1b0: 0x33dc, 0x1b1: 0x1945, 0x1b2: 0x1948, 0x1b3: 0x19d5, 0x1b4: 0x303f, 0x1b5: 0x334b, - 0x1b8: 0x3111, 0x1b9: 0x3422, 0x1ba: 0x38ce, 0x1bb: 0x3a5d, - 0x1bc: 0x35c4, 0x1bd: 0x35d6, 0x1be: 0x35d0, 0x1bf: 0x35e2, + 0x184: 0x2dd5, 0x185: 0x2ddb, + 0x186: 0x2de1, 0x187: 0x1a9f, 0x188: 0x1aa2, 0x189: 0x1b38, 0x18a: 0x1ab7, 0x18b: 0x1aba, + 0x18c: 0x1b6e, 0x18d: 0x2ee7, 0x18e: 0x31f3, 0x18f: 0x2ff5, 0x190: 0x3301, 0x191: 0x309f, + 0x192: 0x33b0, 0x193: 0x3135, 0x194: 0x344b, 0x195: 0x392e, 0x196: 0x3abd, 0x197: 0x3927, + 0x198: 0x3ab6, 0x199: 0x3935, 0x19a: 0x3ac4, 0x19b: 0x3920, 0x19c: 0x3aaf, + 0x19e: 0x380f, 0x19f: 0x399e, 0x1a0: 0x3808, 0x1a1: 0x3997, 0x1a2: 0x3512, 0x1a3: 0x3524, + 0x1a6: 0x2fa0, 0x1a7: 0x32ac, 0x1a8: 0x301d, 0x1a9: 0x332e, + 0x1aa: 0x4863, 0x1ab: 0x48f4, 0x1ac: 0x38ef, 0x1ad: 0x3a7e, 0x1ae: 0x3536, 0x1af: 0x353c, + 0x1b0: 0x3324, 0x1b1: 0x1a6f, 0x1b2: 0x1a72, 0x1b3: 0x1aff, 0x1b4: 0x2f87, 0x1b5: 0x3293, + 0x1b8: 0x3059, 0x1b9: 0x336a, 0x1ba: 0x3816, 0x1bb: 0x39a5, + 0x1bc: 0x350c, 0x1bd: 0x351e, 0x1be: 0x3518, 0x1bf: 0x352a, // Block 0x7, offset 0x1c0 - 0x1c0: 0x2fa4, 0x1c1: 0x32b0, 0x1c2: 0x2fa9, 0x1c3: 0x32b5, 0x1c4: 0x3021, 0x1c5: 0x332d, - 0x1c6: 0x3026, 0x1c7: 0x3332, 0x1c8: 0x30b2, 0x1c9: 0x33be, 0x1ca: 0x30b7, 0x1cb: 0x33c3, - 0x1cc: 0x315c, 0x1cd: 0x346d, 0x1ce: 0x3161, 0x1cf: 0x3472, 0x1d0: 0x317f, 0x1d1: 0x3490, - 0x1d2: 0x3184, 0x1d3: 0x3495, 0x1d4: 0x31f2, 0x1d5: 0x3508, 0x1d6: 0x31f7, 0x1d7: 0x350d, - 0x1d8: 0x319d, 0x1d9: 0x34ae, 0x1da: 0x31b6, 0x1db: 0x34cc, - 0x1de: 0x3071, 0x1df: 0x337d, - 0x1e6: 0x46a9, 0x1e7: 0x473a, 0x1e8: 0x46d1, 0x1e9: 0x4762, - 0x1ea: 0x3976, 0x1eb: 0x3b05, 0x1ec: 0x3953, 0x1ed: 0x3ae2, 0x1ee: 0x46ef, 0x1ef: 0x4780, - 0x1f0: 0x396f, 0x1f1: 0x3afe, 0x1f2: 0x325b, 0x1f3: 0x3576, + 0x1c0: 0x2eec, 0x1c1: 0x31f8, 0x1c2: 0x2ef1, 0x1c3: 0x31fd, 0x1c4: 0x2f69, 0x1c5: 0x3275, + 0x1c6: 0x2f6e, 0x1c7: 0x327a, 0x1c8: 0x2ffa, 0x1c9: 0x3306, 0x1ca: 0x2fff, 0x1cb: 0x330b, + 0x1cc: 0x30a4, 0x1cd: 0x33b5, 0x1ce: 0x30a9, 0x1cf: 0x33ba, 0x1d0: 0x30c7, 0x1d1: 0x33d8, + 0x1d2: 0x30cc, 0x1d3: 0x33dd, 0x1d4: 0x313a, 0x1d5: 0x3450, 0x1d6: 0x313f, 0x1d7: 0x3455, + 0x1d8: 0x30e5, 0x1d9: 0x33f6, 0x1da: 0x30fe, 0x1db: 0x3414, + 0x1de: 0x2fb9, 0x1df: 0x32c5, + 0x1e6: 0x4809, 0x1e7: 0x489a, 0x1e8: 0x4831, 0x1e9: 0x48c2, + 0x1ea: 0x38be, 0x1eb: 0x3a4d, 0x1ec: 0x389b, 0x1ed: 0x3a2a, 0x1ee: 0x484f, 0x1ef: 0x48e0, + 0x1f0: 0x38b7, 0x1f1: 0x3a46, 0x1f2: 0x31a3, 0x1f3: 0x34be, // Block 0x8, offset 0x200 0x200: 0x9933, 0x201: 0x9933, 0x202: 0x9933, 0x203: 0x9933, 0x204: 0x9933, 0x205: 0x8133, 0x206: 0x9933, 0x207: 0x9933, 0x208: 0x9933, 0x209: 0x9933, 0x20a: 0x9933, 0x20b: 0x9933, @@ -4686,7 +4867,7 @@ var nfkcValues = [6016]uint16{ 0x236: 0x8101, 0x237: 0x8101, 0x238: 0x9901, 0x239: 0x812e, 0x23a: 0x812e, 0x23b: 0x812e, 0x23c: 0x812e, 0x23d: 0x8133, 0x23e: 0x8133, 0x23f: 0x8133, // Block 0x9, offset 0x240 - 0x240: 0x49c5, 0x241: 0x49ca, 0x242: 0x9933, 0x243: 0x49cf, 0x244: 0x4a88, 0x245: 0x9937, + 0x240: 0x4b3f, 0x241: 0x4b44, 0x242: 0x9933, 0x243: 0x4b49, 0x244: 0x4c02, 0x245: 0x9937, 0x246: 0x8133, 0x247: 0x812e, 0x248: 0x812e, 0x249: 0x812e, 0x24a: 0x8133, 0x24b: 0x8133, 0x24c: 0x8133, 0x24d: 0x812e, 0x24e: 0x812e, 0x250: 0x8133, 0x251: 0x8133, 0x252: 0x8133, 0x253: 0x812e, 0x254: 0x812e, 0x255: 0x812e, 0x256: 0x812e, 0x257: 0x8133, @@ -4694,52 +4875,52 @@ var nfkcValues = [6016]uint16{ 0x25e: 0x8136, 0x25f: 0x8135, 0x260: 0x8136, 0x261: 0x8136, 0x262: 0x8135, 0x263: 0x8133, 0x264: 0x8133, 0x265: 0x8133, 0x266: 0x8133, 0x267: 0x8133, 0x268: 0x8133, 0x269: 0x8133, 0x26a: 0x8133, 0x26b: 0x8133, 0x26c: 0x8133, 0x26d: 0x8133, 0x26e: 0x8133, 0x26f: 0x8133, - 0x274: 0x0173, - 0x27a: 0x42bc, + 0x274: 0x01ee, + 0x27a: 0x43a4, 0x27e: 0x0037, // Block 0xa, offset 0x280 - 0x284: 0x4271, 0x285: 0x4492, - 0x286: 0x3600, 0x287: 0x00ce, 0x288: 0x361e, 0x289: 0x362a, 0x28a: 0x363c, - 0x28c: 0x365a, 0x28e: 0x366c, 0x28f: 0x368a, 0x290: 0x3e1f, 0x291: 0xa000, + 0x284: 0x4359, 0x285: 0x457a, + 0x286: 0x3548, 0x287: 0x00ce, 0x288: 0x3566, 0x289: 0x3572, 0x28a: 0x3584, + 0x28c: 0x35a2, 0x28e: 0x35b4, 0x28f: 0x35d2, 0x290: 0x3d67, 0x291: 0xa000, 0x295: 0xa000, 0x297: 0xa000, 0x299: 0xa000, 0x29f: 0xa000, 0x2a1: 0xa000, 0x2a5: 0xa000, 0x2a9: 0xa000, - 0x2aa: 0x364e, 0x2ab: 0x367e, 0x2ac: 0x4815, 0x2ad: 0x36ae, 0x2ae: 0x483f, 0x2af: 0x36c0, - 0x2b0: 0x3e87, 0x2b1: 0xa000, 0x2b5: 0xa000, + 0x2aa: 0x3596, 0x2ab: 0x35c6, 0x2ac: 0x4975, 0x2ad: 0x35f6, 0x2ae: 0x499f, 0x2af: 0x3608, + 0x2b0: 0x3dcf, 0x2b1: 0xa000, 0x2b5: 0xa000, 0x2b7: 0xa000, 0x2b9: 0xa000, 0x2bf: 0xa000, // Block 0xb, offset 0x2c0 0x2c1: 0xa000, 0x2c5: 0xa000, - 0x2c9: 0xa000, 0x2ca: 0x4857, 0x2cb: 0x4875, - 0x2cc: 0x36de, 0x2cd: 0x36f6, 0x2ce: 0x488d, 0x2d0: 0x01c1, 0x2d1: 0x01d3, - 0x2d2: 0x01af, 0x2d3: 0x4323, 0x2d4: 0x4329, 0x2d5: 0x01fd, 0x2d6: 0x01eb, - 0x2f0: 0x01d9, 0x2f1: 0x01ee, 0x2f2: 0x01f1, 0x2f4: 0x018b, 0x2f5: 0x01ca, - 0x2f9: 0x01a9, + 0x2c9: 0xa000, 0x2ca: 0x49b7, 0x2cb: 0x49d5, + 0x2cc: 0x3626, 0x2cd: 0x363e, 0x2ce: 0x49ed, 0x2d0: 0x0242, 0x2d1: 0x0254, + 0x2d2: 0x0230, 0x2d3: 0x440b, 0x2d4: 0x4411, 0x2d5: 0x027e, 0x2d6: 0x026c, + 0x2f0: 0x025a, 0x2f1: 0x026f, 0x2f2: 0x0272, 0x2f4: 0x020c, 0x2f5: 0x024b, + 0x2f9: 0x022a, // Block 0xc, offset 0x300 - 0x300: 0x3738, 0x301: 0x3744, 0x303: 0x3732, - 0x306: 0xa000, 0x307: 0x3720, - 0x30c: 0x3774, 0x30d: 0x375c, 0x30e: 0x3786, 0x310: 0xa000, + 0x300: 0x3680, 0x301: 0x368c, 0x303: 0x367a, + 0x306: 0xa000, 0x307: 0x3668, + 0x30c: 0x36bc, 0x30d: 0x36a4, 0x30e: 0x36ce, 0x310: 0xa000, 0x313: 0xa000, 0x315: 0xa000, 0x316: 0xa000, 0x317: 0xa000, - 0x318: 0xa000, 0x319: 0x3768, 0x31a: 0xa000, + 0x318: 0xa000, 0x319: 0x36b0, 0x31a: 0xa000, 0x31e: 0xa000, 0x323: 0xa000, 0x327: 0xa000, 0x32b: 0xa000, 0x32d: 0xa000, 0x330: 0xa000, 0x333: 0xa000, 0x335: 0xa000, - 0x336: 0xa000, 0x337: 0xa000, 0x338: 0xa000, 0x339: 0x37ec, 0x33a: 0xa000, + 0x336: 0xa000, 0x337: 0xa000, 0x338: 0xa000, 0x339: 0x3734, 0x33a: 0xa000, 0x33e: 0xa000, // Block 0xd, offset 0x340 - 0x341: 0x374a, 0x342: 0x37ce, - 0x350: 0x3726, 0x351: 0x37aa, - 0x352: 0x372c, 0x353: 0x37b0, 0x356: 0x373e, 0x357: 0x37c2, - 0x358: 0xa000, 0x359: 0xa000, 0x35a: 0x3840, 0x35b: 0x3846, 0x35c: 0x3750, 0x35d: 0x37d4, - 0x35e: 0x3756, 0x35f: 0x37da, 0x362: 0x3762, 0x363: 0x37e6, - 0x364: 0x376e, 0x365: 0x37f2, 0x366: 0x377a, 0x367: 0x37fe, 0x368: 0xa000, 0x369: 0xa000, - 0x36a: 0x384c, 0x36b: 0x3852, 0x36c: 0x37a4, 0x36d: 0x3828, 0x36e: 0x3780, 0x36f: 0x3804, - 0x370: 0x378c, 0x371: 0x3810, 0x372: 0x3792, 0x373: 0x3816, 0x374: 0x3798, 0x375: 0x381c, - 0x378: 0x379e, 0x379: 0x3822, + 0x341: 0x3692, 0x342: 0x3716, + 0x350: 0x366e, 0x351: 0x36f2, + 0x352: 0x3674, 0x353: 0x36f8, 0x356: 0x3686, 0x357: 0x370a, + 0x358: 0xa000, 0x359: 0xa000, 0x35a: 0x3788, 0x35b: 0x378e, 0x35c: 0x3698, 0x35d: 0x371c, + 0x35e: 0x369e, 0x35f: 0x3722, 0x362: 0x36aa, 0x363: 0x372e, + 0x364: 0x36b6, 0x365: 0x373a, 0x366: 0x36c2, 0x367: 0x3746, 0x368: 0xa000, 0x369: 0xa000, + 0x36a: 0x3794, 0x36b: 0x379a, 0x36c: 0x36ec, 0x36d: 0x3770, 0x36e: 0x36c8, 0x36f: 0x374c, + 0x370: 0x36d4, 0x371: 0x3758, 0x372: 0x36da, 0x373: 0x375e, 0x374: 0x36e0, 0x375: 0x3764, + 0x378: 0x36e6, 0x379: 0x376a, // Block 0xe, offset 0x380 - 0x387: 0x1d67, + 0x387: 0x1e91, 0x391: 0x812e, 0x392: 0x8133, 0x393: 0x8133, 0x394: 0x8133, 0x395: 0x8133, 0x396: 0x812e, 0x397: 0x8133, 0x398: 0x8133, 0x399: 0x8133, 0x39a: 0x812f, 0x39b: 0x812e, 0x39c: 0x8133, 0x39d: 0x8133, @@ -4755,10 +4936,12 @@ var nfkcValues = [6016]uint16{ 0x3d2: 0x811e, 0x3d3: 0x9933, 0x3d4: 0x9933, 0x3d5: 0x992e, 0x3d6: 0x812e, 0x3d7: 0x8133, 0x3d8: 0x8133, 0x3d9: 0x8133, 0x3da: 0x8133, 0x3db: 0x8133, 0x3dc: 0x812e, 0x3dd: 0x8133, 0x3de: 0x8133, 0x3df: 0x812e, - 0x3f0: 0x811f, 0x3f5: 0x1d8a, - 0x3f6: 0x2019, 0x3f7: 0x2055, 0x3f8: 0x2050, + 0x3f0: 0x811f, 0x3f5: 0x1eb4, + 0x3f6: 0x2143, 0x3f7: 0x217f, 0x3f8: 0x217a, // Block 0x10, offset 0x400 - 0x413: 0x812e, 0x414: 0x8133, 0x415: 0x8133, 0x416: 0x8133, 0x417: 0x8133, + 0x40a: 0x8133, 0x40b: 0x8133, + 0x40c: 0x8133, 0x40d: 0x8133, 0x40e: 0x8133, 0x40f: 0x812e, 0x410: 0x812e, 0x411: 0x812e, + 0x412: 0x812e, 0x413: 0x812e, 0x414: 0x8133, 0x415: 0x8133, 0x416: 0x8133, 0x417: 0x8133, 0x418: 0x8133, 0x419: 0x8133, 0x41a: 0x8133, 0x41b: 0x8133, 0x41c: 0x8133, 0x41d: 0x8133, 0x41e: 0x8133, 0x41f: 0x8133, 0x420: 0x8133, 0x421: 0x8133, 0x423: 0x812e, 0x424: 0x8133, 0x425: 0x8133, 0x426: 0x812e, 0x427: 0x8133, 0x428: 0x8133, 0x429: 0x812e, @@ -4768,30 +4951,30 @@ var nfkcValues = [6016]uint16{ 0x43c: 0x8133, 0x43d: 0x8133, 0x43e: 0x8133, 0x43f: 0x8133, // Block 0x11, offset 0x440 0x445: 0xa000, - 0x446: 0x2d33, 0x447: 0xa000, 0x448: 0x2d3b, 0x449: 0xa000, 0x44a: 0x2d43, 0x44b: 0xa000, - 0x44c: 0x2d4b, 0x44d: 0xa000, 0x44e: 0x2d53, 0x451: 0xa000, - 0x452: 0x2d5b, + 0x446: 0x3ee7, 0x447: 0xa000, 0x448: 0x3eef, 0x449: 0xa000, 0x44a: 0x3ef7, 0x44b: 0xa000, + 0x44c: 0x3eff, 0x44d: 0xa000, 0x44e: 0x3f07, 0x451: 0xa000, + 0x452: 0x3f0f, 0x474: 0x8103, 0x475: 0x9900, - 0x47a: 0xa000, 0x47b: 0x2d63, - 0x47c: 0xa000, 0x47d: 0x2d6b, 0x47e: 0xa000, 0x47f: 0xa000, + 0x47a: 0xa000, 0x47b: 0x3f17, + 0x47c: 0xa000, 0x47d: 0x3f1f, 0x47e: 0xa000, 0x47f: 0xa000, // Block 0x12, offset 0x480 - 0x480: 0x0069, 0x481: 0x006b, 0x482: 0x006f, 0x483: 0x0083, 0x484: 0x00f5, 0x485: 0x00f8, - 0x486: 0x0416, 0x487: 0x0085, 0x488: 0x0089, 0x489: 0x008b, 0x48a: 0x0104, 0x48b: 0x0107, - 0x48c: 0x010a, 0x48d: 0x008f, 0x48f: 0x0097, 0x490: 0x009b, 0x491: 0x00e0, - 0x492: 0x009f, 0x493: 0x00fe, 0x494: 0x041a, 0x495: 0x041e, 0x496: 0x00a1, 0x497: 0x00a9, - 0x498: 0x00ab, 0x499: 0x0426, 0x49a: 0x012b, 0x49b: 0x00ad, 0x49c: 0x042a, 0x49d: 0x01c1, - 0x49e: 0x01c4, 0x49f: 0x01c7, 0x4a0: 0x01fd, 0x4a1: 0x0200, 0x4a2: 0x0093, 0x4a3: 0x00a5, - 0x4a4: 0x00ab, 0x4a5: 0x00ad, 0x4a6: 0x01c1, 0x4a7: 0x01c4, 0x4a8: 0x01ee, 0x4a9: 0x01fd, - 0x4aa: 0x0200, - 0x4b8: 0x020f, + 0x480: 0x0069, 0x481: 0x006b, 0x482: 0x006f, 0x483: 0x0083, 0x484: 0x0104, 0x485: 0x0107, + 0x486: 0x0506, 0x487: 0x0085, 0x488: 0x0089, 0x489: 0x008b, 0x48a: 0x011f, 0x48b: 0x0122, + 0x48c: 0x0125, 0x48d: 0x008f, 0x48f: 0x0097, 0x490: 0x009b, 0x491: 0x00e6, + 0x492: 0x009f, 0x493: 0x0110, 0x494: 0x050a, 0x495: 0x050e, 0x496: 0x00a1, 0x497: 0x00a9, + 0x498: 0x00ab, 0x499: 0x0516, 0x49a: 0x015b, 0x49b: 0x00ad, 0x49c: 0x051a, 0x49d: 0x0242, + 0x49e: 0x0245, 0x49f: 0x0248, 0x4a0: 0x027e, 0x4a1: 0x0281, 0x4a2: 0x0093, 0x4a3: 0x00a5, + 0x4a4: 0x00ab, 0x4a5: 0x00ad, 0x4a6: 0x0242, 0x4a7: 0x0245, 0x4a8: 0x026f, 0x4a9: 0x027e, + 0x4aa: 0x0281, + 0x4b8: 0x02b4, // Block 0x13, offset 0x4c0 - 0x4db: 0x00fb, 0x4dc: 0x0087, 0x4dd: 0x0101, - 0x4de: 0x00d4, 0x4df: 0x010a, 0x4e0: 0x008d, 0x4e1: 0x010d, 0x4e2: 0x0110, 0x4e3: 0x0116, - 0x4e4: 0x011c, 0x4e5: 0x011f, 0x4e6: 0x0122, 0x4e7: 0x042e, 0x4e8: 0x016d, 0x4e9: 0x0128, - 0x4ea: 0x0432, 0x4eb: 0x0170, 0x4ec: 0x0131, 0x4ed: 0x012e, 0x4ee: 0x0134, 0x4ef: 0x0137, - 0x4f0: 0x013a, 0x4f1: 0x013d, 0x4f2: 0x0140, 0x4f3: 0x014c, 0x4f4: 0x014f, 0x4f5: 0x00ec, - 0x4f6: 0x0152, 0x4f7: 0x0155, 0x4f8: 0x0422, 0x4f9: 0x0158, 0x4fa: 0x015b, 0x4fb: 0x00b5, - 0x4fc: 0x0161, 0x4fd: 0x0164, 0x4fe: 0x0167, 0x4ff: 0x01d3, + 0x4db: 0x010a, 0x4dc: 0x0087, 0x4dd: 0x0113, + 0x4de: 0x00d7, 0x4df: 0x0125, 0x4e0: 0x008d, 0x4e1: 0x012b, 0x4e2: 0x0131, 0x4e3: 0x013d, + 0x4e4: 0x0146, 0x4e5: 0x0149, 0x4e6: 0x014c, 0x4e7: 0x051e, 0x4e8: 0x01c7, 0x4e9: 0x0155, + 0x4ea: 0x0522, 0x4eb: 0x01ca, 0x4ec: 0x0161, 0x4ed: 0x015e, 0x4ee: 0x0164, 0x4ef: 0x0167, + 0x4f0: 0x016a, 0x4f1: 0x016d, 0x4f2: 0x0176, 0x4f3: 0x018e, 0x4f4: 0x0191, 0x4f5: 0x00f2, + 0x4f6: 0x019a, 0x4f7: 0x019d, 0x4f8: 0x0512, 0x4f9: 0x01a0, 0x4fa: 0x01a3, 0x4fb: 0x00b5, + 0x4fc: 0x01af, 0x4fd: 0x01b2, 0x4fe: 0x01b5, 0x4ff: 0x0254, // Block 0x14, offset 0x500 0x500: 0x8133, 0x501: 0x8133, 0x502: 0x812e, 0x503: 0x8133, 0x504: 0x8133, 0x505: 0x8133, 0x506: 0x8133, 0x507: 0x8133, 0x508: 0x8133, 0x509: 0x8133, 0x50a: 0x812e, 0x50b: 0x8133, @@ -4802,1033 +4985,1075 @@ var nfkcValues = [6016]uint16{ 0x524: 0x8133, 0x525: 0x8133, 0x526: 0x8133, 0x527: 0x8133, 0x528: 0x8133, 0x529: 0x8133, 0x52a: 0x8133, 0x52b: 0x8133, 0x52c: 0x8133, 0x52d: 0x8133, 0x52e: 0x8133, 0x52f: 0x8133, 0x530: 0x8133, 0x531: 0x8133, 0x532: 0x8133, 0x533: 0x8133, 0x534: 0x8133, 0x535: 0x8133, - 0x536: 0x8134, 0x537: 0x8132, 0x538: 0x8132, 0x539: 0x812e, 0x53b: 0x8133, + 0x536: 0x8134, 0x537: 0x8132, 0x538: 0x8132, 0x539: 0x812e, 0x53a: 0x812d, 0x53b: 0x8133, 0x53c: 0x8135, 0x53d: 0x812e, 0x53e: 0x8133, 0x53f: 0x812e, // Block 0x15, offset 0x540 - 0x540: 0x2fae, 0x541: 0x32ba, 0x542: 0x2fb8, 0x543: 0x32c4, 0x544: 0x2fbd, 0x545: 0x32c9, - 0x546: 0x2fc2, 0x547: 0x32ce, 0x548: 0x38e3, 0x549: 0x3a72, 0x54a: 0x2fdb, 0x54b: 0x32e7, - 0x54c: 0x2fe5, 0x54d: 0x32f1, 0x54e: 0x2ff4, 0x54f: 0x3300, 0x550: 0x2fea, 0x551: 0x32f6, - 0x552: 0x2fef, 0x553: 0x32fb, 0x554: 0x3906, 0x555: 0x3a95, 0x556: 0x390d, 0x557: 0x3a9c, - 0x558: 0x3030, 0x559: 0x333c, 0x55a: 0x3035, 0x55b: 0x3341, 0x55c: 0x391b, 0x55d: 0x3aaa, - 0x55e: 0x303a, 0x55f: 0x3346, 0x560: 0x3049, 0x561: 0x3355, 0x562: 0x3067, 0x563: 0x3373, - 0x564: 0x3076, 0x565: 0x3382, 0x566: 0x306c, 0x567: 0x3378, 0x568: 0x307b, 0x569: 0x3387, - 0x56a: 0x3080, 0x56b: 0x338c, 0x56c: 0x30c6, 0x56d: 0x33d2, 0x56e: 0x3922, 0x56f: 0x3ab1, - 0x570: 0x30d0, 0x571: 0x33e1, 0x572: 0x30da, 0x573: 0x33eb, 0x574: 0x30e4, 0x575: 0x33f5, - 0x576: 0x46db, 0x577: 0x476c, 0x578: 0x3929, 0x579: 0x3ab8, 0x57a: 0x30fd, 0x57b: 0x340e, - 0x57c: 0x30f8, 0x57d: 0x3409, 0x57e: 0x3102, 0x57f: 0x3413, + 0x540: 0x2ef6, 0x541: 0x3202, 0x542: 0x2f00, 0x543: 0x320c, 0x544: 0x2f05, 0x545: 0x3211, + 0x546: 0x2f0a, 0x547: 0x3216, 0x548: 0x382b, 0x549: 0x39ba, 0x54a: 0x2f23, 0x54b: 0x322f, + 0x54c: 0x2f2d, 0x54d: 0x3239, 0x54e: 0x2f3c, 0x54f: 0x3248, 0x550: 0x2f32, 0x551: 0x323e, + 0x552: 0x2f37, 0x553: 0x3243, 0x554: 0x384e, 0x555: 0x39dd, 0x556: 0x3855, 0x557: 0x39e4, + 0x558: 0x2f78, 0x559: 0x3284, 0x55a: 0x2f7d, 0x55b: 0x3289, 0x55c: 0x3863, 0x55d: 0x39f2, + 0x55e: 0x2f82, 0x55f: 0x328e, 0x560: 0x2f91, 0x561: 0x329d, 0x562: 0x2faf, 0x563: 0x32bb, + 0x564: 0x2fbe, 0x565: 0x32ca, 0x566: 0x2fb4, 0x567: 0x32c0, 0x568: 0x2fc3, 0x569: 0x32cf, + 0x56a: 0x2fc8, 0x56b: 0x32d4, 0x56c: 0x300e, 0x56d: 0x331a, 0x56e: 0x386a, 0x56f: 0x39f9, + 0x570: 0x3018, 0x571: 0x3329, 0x572: 0x3022, 0x573: 0x3333, 0x574: 0x302c, 0x575: 0x333d, + 0x576: 0x483b, 0x577: 0x48cc, 0x578: 0x3871, 0x579: 0x3a00, 0x57a: 0x3045, 0x57b: 0x3356, + 0x57c: 0x3040, 0x57d: 0x3351, 0x57e: 0x304a, 0x57f: 0x335b, // Block 0x16, offset 0x580 - 0x580: 0x3107, 0x581: 0x3418, 0x582: 0x310c, 0x583: 0x341d, 0x584: 0x3120, 0x585: 0x3431, - 0x586: 0x312a, 0x587: 0x343b, 0x588: 0x3139, 0x589: 0x344a, 0x58a: 0x3134, 0x58b: 0x3445, - 0x58c: 0x394c, 0x58d: 0x3adb, 0x58e: 0x395a, 0x58f: 0x3ae9, 0x590: 0x3961, 0x591: 0x3af0, - 0x592: 0x3968, 0x593: 0x3af7, 0x594: 0x3166, 0x595: 0x3477, 0x596: 0x316b, 0x597: 0x347c, - 0x598: 0x3175, 0x599: 0x3486, 0x59a: 0x4708, 0x59b: 0x4799, 0x59c: 0x39ae, 0x59d: 0x3b3d, - 0x59e: 0x318e, 0x59f: 0x349f, 0x5a0: 0x3198, 0x5a1: 0x34a9, 0x5a2: 0x4717, 0x5a3: 0x47a8, - 0x5a4: 0x39b5, 0x5a5: 0x3b44, 0x5a6: 0x39bc, 0x5a7: 0x3b4b, 0x5a8: 0x39c3, 0x5a9: 0x3b52, - 0x5aa: 0x31a7, 0x5ab: 0x34b8, 0x5ac: 0x31b1, 0x5ad: 0x34c7, 0x5ae: 0x31c5, 0x5af: 0x34db, - 0x5b0: 0x31c0, 0x5b1: 0x34d6, 0x5b2: 0x3201, 0x5b3: 0x3517, 0x5b4: 0x3210, 0x5b5: 0x3526, - 0x5b6: 0x320b, 0x5b7: 0x3521, 0x5b8: 0x39ca, 0x5b9: 0x3b59, 0x5ba: 0x39d1, 0x5bb: 0x3b60, - 0x5bc: 0x3215, 0x5bd: 0x352b, 0x5be: 0x321a, 0x5bf: 0x3530, + 0x580: 0x304f, 0x581: 0x3360, 0x582: 0x3054, 0x583: 0x3365, 0x584: 0x3068, 0x585: 0x3379, + 0x586: 0x3072, 0x587: 0x3383, 0x588: 0x3081, 0x589: 0x3392, 0x58a: 0x307c, 0x58b: 0x338d, + 0x58c: 0x3894, 0x58d: 0x3a23, 0x58e: 0x38a2, 0x58f: 0x3a31, 0x590: 0x38a9, 0x591: 0x3a38, + 0x592: 0x38b0, 0x593: 0x3a3f, 0x594: 0x30ae, 0x595: 0x33bf, 0x596: 0x30b3, 0x597: 0x33c4, + 0x598: 0x30bd, 0x599: 0x33ce, 0x59a: 0x4868, 0x59b: 0x48f9, 0x59c: 0x38f6, 0x59d: 0x3a85, + 0x59e: 0x30d6, 0x59f: 0x33e7, 0x5a0: 0x30e0, 0x5a1: 0x33f1, 0x5a2: 0x4877, 0x5a3: 0x4908, + 0x5a4: 0x38fd, 0x5a5: 0x3a8c, 0x5a6: 0x3904, 0x5a7: 0x3a93, 0x5a8: 0x390b, 0x5a9: 0x3a9a, + 0x5aa: 0x30ef, 0x5ab: 0x3400, 0x5ac: 0x30f9, 0x5ad: 0x340f, 0x5ae: 0x310d, 0x5af: 0x3423, + 0x5b0: 0x3108, 0x5b1: 0x341e, 0x5b2: 0x3149, 0x5b3: 0x345f, 0x5b4: 0x3158, 0x5b5: 0x346e, + 0x5b6: 0x3153, 0x5b7: 0x3469, 0x5b8: 0x3912, 0x5b9: 0x3aa1, 0x5ba: 0x3919, 0x5bb: 0x3aa8, + 0x5bc: 0x315d, 0x5bd: 0x3473, 0x5be: 0x3162, 0x5bf: 0x3478, // Block 0x17, offset 0x5c0 - 0x5c0: 0x321f, 0x5c1: 0x3535, 0x5c2: 0x3224, 0x5c3: 0x353a, 0x5c4: 0x3233, 0x5c5: 0x3549, - 0x5c6: 0x322e, 0x5c7: 0x3544, 0x5c8: 0x3238, 0x5c9: 0x3553, 0x5ca: 0x323d, 0x5cb: 0x3558, - 0x5cc: 0x3242, 0x5cd: 0x355d, 0x5ce: 0x3260, 0x5cf: 0x357b, 0x5d0: 0x3279, 0x5d1: 0x3599, - 0x5d2: 0x3288, 0x5d3: 0x35a8, 0x5d4: 0x328d, 0x5d5: 0x35ad, 0x5d6: 0x3391, 0x5d7: 0x34bd, - 0x5d8: 0x354e, 0x5d9: 0x358a, 0x5da: 0x1be6, 0x5db: 0x42ee, - 0x5e0: 0x46b8, 0x5e1: 0x4749, 0x5e2: 0x2f9a, 0x5e3: 0x32a6, - 0x5e4: 0x388f, 0x5e5: 0x3a1e, 0x5e6: 0x3888, 0x5e7: 0x3a17, 0x5e8: 0x389d, 0x5e9: 0x3a2c, - 0x5ea: 0x3896, 0x5eb: 0x3a25, 0x5ec: 0x38d5, 0x5ed: 0x3a64, 0x5ee: 0x38ab, 0x5ef: 0x3a3a, - 0x5f0: 0x38a4, 0x5f1: 0x3a33, 0x5f2: 0x38b9, 0x5f3: 0x3a48, 0x5f4: 0x38b2, 0x5f5: 0x3a41, - 0x5f6: 0x38dc, 0x5f7: 0x3a6b, 0x5f8: 0x46cc, 0x5f9: 0x475d, 0x5fa: 0x3017, 0x5fb: 0x3323, - 0x5fc: 0x3003, 0x5fd: 0x330f, 0x5fe: 0x38f1, 0x5ff: 0x3a80, + 0x5c0: 0x3167, 0x5c1: 0x347d, 0x5c2: 0x316c, 0x5c3: 0x3482, 0x5c4: 0x317b, 0x5c5: 0x3491, + 0x5c6: 0x3176, 0x5c7: 0x348c, 0x5c8: 0x3180, 0x5c9: 0x349b, 0x5ca: 0x3185, 0x5cb: 0x34a0, + 0x5cc: 0x318a, 0x5cd: 0x34a5, 0x5ce: 0x31a8, 0x5cf: 0x34c3, 0x5d0: 0x31c1, 0x5d1: 0x34e1, + 0x5d2: 0x31d0, 0x5d3: 0x34f0, 0x5d4: 0x31d5, 0x5d5: 0x34f5, 0x5d6: 0x32d9, 0x5d7: 0x3405, + 0x5d8: 0x3496, 0x5d9: 0x34d2, 0x5da: 0x1d10, 0x5db: 0x43d6, + 0x5e0: 0x4818, 0x5e1: 0x48a9, 0x5e2: 0x2ee2, 0x5e3: 0x31ee, + 0x5e4: 0x37d7, 0x5e5: 0x3966, 0x5e6: 0x37d0, 0x5e7: 0x395f, 0x5e8: 0x37e5, 0x5e9: 0x3974, + 0x5ea: 0x37de, 0x5eb: 0x396d, 0x5ec: 0x381d, 0x5ed: 0x39ac, 0x5ee: 0x37f3, 0x5ef: 0x3982, + 0x5f0: 0x37ec, 0x5f1: 0x397b, 0x5f2: 0x3801, 0x5f3: 0x3990, 0x5f4: 0x37fa, 0x5f5: 0x3989, + 0x5f6: 0x3824, 0x5f7: 0x39b3, 0x5f8: 0x482c, 0x5f9: 0x48bd, 0x5fa: 0x2f5f, 0x5fb: 0x326b, + 0x5fc: 0x2f4b, 0x5fd: 0x3257, 0x5fe: 0x3839, 0x5ff: 0x39c8, // Block 0x18, offset 0x600 - 0x600: 0x38ea, 0x601: 0x3a79, 0x602: 0x38ff, 0x603: 0x3a8e, 0x604: 0x38f8, 0x605: 0x3a87, - 0x606: 0x3914, 0x607: 0x3aa3, 0x608: 0x30a8, 0x609: 0x33b4, 0x60a: 0x30bc, 0x60b: 0x33c8, - 0x60c: 0x46fe, 0x60d: 0x478f, 0x60e: 0x314d, 0x60f: 0x345e, 0x610: 0x3937, 0x611: 0x3ac6, - 0x612: 0x3930, 0x613: 0x3abf, 0x614: 0x3945, 0x615: 0x3ad4, 0x616: 0x393e, 0x617: 0x3acd, - 0x618: 0x39a0, 0x619: 0x3b2f, 0x61a: 0x3984, 0x61b: 0x3b13, 0x61c: 0x397d, 0x61d: 0x3b0c, - 0x61e: 0x3992, 0x61f: 0x3b21, 0x620: 0x398b, 0x621: 0x3b1a, 0x622: 0x3999, 0x623: 0x3b28, - 0x624: 0x31fc, 0x625: 0x3512, 0x626: 0x31de, 0x627: 0x34f4, 0x628: 0x39fb, 0x629: 0x3b8a, - 0x62a: 0x39f4, 0x62b: 0x3b83, 0x62c: 0x3a09, 0x62d: 0x3b98, 0x62e: 0x3a02, 0x62f: 0x3b91, - 0x630: 0x3a10, 0x631: 0x3b9f, 0x632: 0x3247, 0x633: 0x3562, 0x634: 0x326f, 0x635: 0x358f, - 0x636: 0x326a, 0x637: 0x3585, 0x638: 0x3256, 0x639: 0x3571, + 0x600: 0x3832, 0x601: 0x39c1, 0x602: 0x3847, 0x603: 0x39d6, 0x604: 0x3840, 0x605: 0x39cf, + 0x606: 0x385c, 0x607: 0x39eb, 0x608: 0x2ff0, 0x609: 0x32fc, 0x60a: 0x3004, 0x60b: 0x3310, + 0x60c: 0x485e, 0x60d: 0x48ef, 0x60e: 0x3095, 0x60f: 0x33a6, 0x610: 0x387f, 0x611: 0x3a0e, + 0x612: 0x3878, 0x613: 0x3a07, 0x614: 0x388d, 0x615: 0x3a1c, 0x616: 0x3886, 0x617: 0x3a15, + 0x618: 0x38e8, 0x619: 0x3a77, 0x61a: 0x38cc, 0x61b: 0x3a5b, 0x61c: 0x38c5, 0x61d: 0x3a54, + 0x61e: 0x38da, 0x61f: 0x3a69, 0x620: 0x38d3, 0x621: 0x3a62, 0x622: 0x38e1, 0x623: 0x3a70, + 0x624: 0x3144, 0x625: 0x345a, 0x626: 0x3126, 0x627: 0x343c, 0x628: 0x3943, 0x629: 0x3ad2, + 0x62a: 0x393c, 0x62b: 0x3acb, 0x62c: 0x3951, 0x62d: 0x3ae0, 0x62e: 0x394a, 0x62f: 0x3ad9, + 0x630: 0x3958, 0x631: 0x3ae7, 0x632: 0x318f, 0x633: 0x34aa, 0x634: 0x31b7, 0x635: 0x34d7, + 0x636: 0x31b2, 0x637: 0x34cd, 0x638: 0x319e, 0x639: 0x34b9, // Block 0x19, offset 0x640 - 0x640: 0x481b, 0x641: 0x4821, 0x642: 0x4935, 0x643: 0x494d, 0x644: 0x493d, 0x645: 0x4955, - 0x646: 0x4945, 0x647: 0x495d, 0x648: 0x47c1, 0x649: 0x47c7, 0x64a: 0x48a5, 0x64b: 0x48bd, - 0x64c: 0x48ad, 0x64d: 0x48c5, 0x64e: 0x48b5, 0x64f: 0x48cd, 0x650: 0x482d, 0x651: 0x4833, - 0x652: 0x3dcf, 0x653: 0x3ddf, 0x654: 0x3dd7, 0x655: 0x3de7, - 0x658: 0x47cd, 0x659: 0x47d3, 0x65a: 0x3cff, 0x65b: 0x3d0f, 0x65c: 0x3d07, 0x65d: 0x3d17, - 0x660: 0x4845, 0x661: 0x484b, 0x662: 0x4965, 0x663: 0x497d, - 0x664: 0x496d, 0x665: 0x4985, 0x666: 0x4975, 0x667: 0x498d, 0x668: 0x47d9, 0x669: 0x47df, - 0x66a: 0x48d5, 0x66b: 0x48ed, 0x66c: 0x48dd, 0x66d: 0x48f5, 0x66e: 0x48e5, 0x66f: 0x48fd, - 0x670: 0x485d, 0x671: 0x4863, 0x672: 0x3e2f, 0x673: 0x3e47, 0x674: 0x3e37, 0x675: 0x3e4f, - 0x676: 0x3e3f, 0x677: 0x3e57, 0x678: 0x47e5, 0x679: 0x47eb, 0x67a: 0x3d2f, 0x67b: 0x3d47, - 0x67c: 0x3d37, 0x67d: 0x3d4f, 0x67e: 0x3d3f, 0x67f: 0x3d57, + 0x640: 0x497b, 0x641: 0x4981, 0x642: 0x4a95, 0x643: 0x4aad, 0x644: 0x4a9d, 0x645: 0x4ab5, + 0x646: 0x4aa5, 0x647: 0x4abd, 0x648: 0x4921, 0x649: 0x4927, 0x64a: 0x4a05, 0x64b: 0x4a1d, + 0x64c: 0x4a0d, 0x64d: 0x4a25, 0x64e: 0x4a15, 0x64f: 0x4a2d, 0x650: 0x498d, 0x651: 0x4993, + 0x652: 0x3d17, 0x653: 0x3d27, 0x654: 0x3d1f, 0x655: 0x3d2f, + 0x658: 0x492d, 0x659: 0x4933, 0x65a: 0x3c47, 0x65b: 0x3c57, 0x65c: 0x3c4f, 0x65d: 0x3c5f, + 0x660: 0x49a5, 0x661: 0x49ab, 0x662: 0x4ac5, 0x663: 0x4add, + 0x664: 0x4acd, 0x665: 0x4ae5, 0x666: 0x4ad5, 0x667: 0x4aed, 0x668: 0x4939, 0x669: 0x493f, + 0x66a: 0x4a35, 0x66b: 0x4a4d, 0x66c: 0x4a3d, 0x66d: 0x4a55, 0x66e: 0x4a45, 0x66f: 0x4a5d, + 0x670: 0x49bd, 0x671: 0x49c3, 0x672: 0x3d77, 0x673: 0x3d8f, 0x674: 0x3d7f, 0x675: 0x3d97, + 0x676: 0x3d87, 0x677: 0x3d9f, 0x678: 0x4945, 0x679: 0x494b, 0x67a: 0x3c77, 0x67b: 0x3c8f, + 0x67c: 0x3c7f, 0x67d: 0x3c97, 0x67e: 0x3c87, 0x67f: 0x3c9f, // Block 0x1a, offset 0x680 - 0x680: 0x4869, 0x681: 0x486f, 0x682: 0x3e5f, 0x683: 0x3e6f, 0x684: 0x3e67, 0x685: 0x3e77, - 0x688: 0x47f1, 0x689: 0x47f7, 0x68a: 0x3d5f, 0x68b: 0x3d6f, - 0x68c: 0x3d67, 0x68d: 0x3d77, 0x690: 0x487b, 0x691: 0x4881, - 0x692: 0x3e97, 0x693: 0x3eaf, 0x694: 0x3e9f, 0x695: 0x3eb7, 0x696: 0x3ea7, 0x697: 0x3ebf, - 0x699: 0x47fd, 0x69b: 0x3d7f, 0x69d: 0x3d87, - 0x69f: 0x3d8f, 0x6a0: 0x4893, 0x6a1: 0x4899, 0x6a2: 0x4995, 0x6a3: 0x49ad, - 0x6a4: 0x499d, 0x6a5: 0x49b5, 0x6a6: 0x49a5, 0x6a7: 0x49bd, 0x6a8: 0x4803, 0x6a9: 0x4809, - 0x6aa: 0x4905, 0x6ab: 0x491d, 0x6ac: 0x490d, 0x6ad: 0x4925, 0x6ae: 0x4915, 0x6af: 0x492d, - 0x6b0: 0x480f, 0x6b1: 0x4335, 0x6b2: 0x36a8, 0x6b3: 0x433b, 0x6b4: 0x4839, 0x6b5: 0x4341, - 0x6b6: 0x36ba, 0x6b7: 0x4347, 0x6b8: 0x36d8, 0x6b9: 0x434d, 0x6ba: 0x36f0, 0x6bb: 0x4353, - 0x6bc: 0x4887, 0x6bd: 0x4359, + 0x680: 0x49c9, 0x681: 0x49cf, 0x682: 0x3da7, 0x683: 0x3db7, 0x684: 0x3daf, 0x685: 0x3dbf, + 0x688: 0x4951, 0x689: 0x4957, 0x68a: 0x3ca7, 0x68b: 0x3cb7, + 0x68c: 0x3caf, 0x68d: 0x3cbf, 0x690: 0x49db, 0x691: 0x49e1, + 0x692: 0x3ddf, 0x693: 0x3df7, 0x694: 0x3de7, 0x695: 0x3dff, 0x696: 0x3def, 0x697: 0x3e07, + 0x699: 0x495d, 0x69b: 0x3cc7, 0x69d: 0x3ccf, + 0x69f: 0x3cd7, 0x6a0: 0x49f3, 0x6a1: 0x49f9, 0x6a2: 0x4af5, 0x6a3: 0x4b0d, + 0x6a4: 0x4afd, 0x6a5: 0x4b15, 0x6a6: 0x4b05, 0x6a7: 0x4b1d, 0x6a8: 0x4963, 0x6a9: 0x4969, + 0x6aa: 0x4a65, 0x6ab: 0x4a7d, 0x6ac: 0x4a6d, 0x6ad: 0x4a85, 0x6ae: 0x4a75, 0x6af: 0x4a8d, + 0x6b0: 0x496f, 0x6b1: 0x441d, 0x6b2: 0x35f0, 0x6b3: 0x4423, 0x6b4: 0x4999, 0x6b5: 0x4429, + 0x6b6: 0x3602, 0x6b7: 0x442f, 0x6b8: 0x3620, 0x6b9: 0x4435, 0x6ba: 0x3638, 0x6bb: 0x443b, + 0x6bc: 0x49e7, 0x6bd: 0x4441, // Block 0x1b, offset 0x6c0 - 0x6c0: 0x3db7, 0x6c1: 0x3dbf, 0x6c2: 0x419b, 0x6c3: 0x41b9, 0x6c4: 0x41a5, 0x6c5: 0x41c3, - 0x6c6: 0x41af, 0x6c7: 0x41cd, 0x6c8: 0x3cef, 0x6c9: 0x3cf7, 0x6ca: 0x40e7, 0x6cb: 0x4105, - 0x6cc: 0x40f1, 0x6cd: 0x410f, 0x6ce: 0x40fb, 0x6cf: 0x4119, 0x6d0: 0x3dff, 0x6d1: 0x3e07, - 0x6d2: 0x41d7, 0x6d3: 0x41f5, 0x6d4: 0x41e1, 0x6d5: 0x41ff, 0x6d6: 0x41eb, 0x6d7: 0x4209, - 0x6d8: 0x3d1f, 0x6d9: 0x3d27, 0x6da: 0x4123, 0x6db: 0x4141, 0x6dc: 0x412d, 0x6dd: 0x414b, - 0x6de: 0x4137, 0x6df: 0x4155, 0x6e0: 0x3ed7, 0x6e1: 0x3edf, 0x6e2: 0x4213, 0x6e3: 0x4231, - 0x6e4: 0x421d, 0x6e5: 0x423b, 0x6e6: 0x4227, 0x6e7: 0x4245, 0x6e8: 0x3d97, 0x6e9: 0x3d9f, - 0x6ea: 0x415f, 0x6eb: 0x417d, 0x6ec: 0x4169, 0x6ed: 0x4187, 0x6ee: 0x4173, 0x6ef: 0x4191, - 0x6f0: 0x369c, 0x6f1: 0x3696, 0x6f2: 0x3da7, 0x6f3: 0x36a2, 0x6f4: 0x3daf, - 0x6f6: 0x4827, 0x6f7: 0x3dc7, 0x6f8: 0x360c, 0x6f9: 0x3606, 0x6fa: 0x35fa, 0x6fb: 0x4305, - 0x6fc: 0x3612, 0x6fd: 0x429e, 0x6fe: 0x01d6, 0x6ff: 0x429e, + 0x6c0: 0x3cff, 0x6c1: 0x3d07, 0x6c2: 0x41d3, 0x6c3: 0x41f1, 0x6c4: 0x41dd, 0x6c5: 0x41fb, + 0x6c6: 0x41e7, 0x6c7: 0x4205, 0x6c8: 0x3c37, 0x6c9: 0x3c3f, 0x6ca: 0x411f, 0x6cb: 0x413d, + 0x6cc: 0x4129, 0x6cd: 0x4147, 0x6ce: 0x4133, 0x6cf: 0x4151, 0x6d0: 0x3d47, 0x6d1: 0x3d4f, + 0x6d2: 0x420f, 0x6d3: 0x422d, 0x6d4: 0x4219, 0x6d5: 0x4237, 0x6d6: 0x4223, 0x6d7: 0x4241, + 0x6d8: 0x3c67, 0x6d9: 0x3c6f, 0x6da: 0x415b, 0x6db: 0x4179, 0x6dc: 0x4165, 0x6dd: 0x4183, + 0x6de: 0x416f, 0x6df: 0x418d, 0x6e0: 0x3e1f, 0x6e1: 0x3e27, 0x6e2: 0x424b, 0x6e3: 0x4269, + 0x6e4: 0x4255, 0x6e5: 0x4273, 0x6e6: 0x425f, 0x6e7: 0x427d, 0x6e8: 0x3cdf, 0x6e9: 0x3ce7, + 0x6ea: 0x4197, 0x6eb: 0x41b5, 0x6ec: 0x41a1, 0x6ed: 0x41bf, 0x6ee: 0x41ab, 0x6ef: 0x41c9, + 0x6f0: 0x35e4, 0x6f1: 0x35de, 0x6f2: 0x3cef, 0x6f3: 0x35ea, 0x6f4: 0x3cf7, + 0x6f6: 0x4987, 0x6f7: 0x3d0f, 0x6f8: 0x3554, 0x6f9: 0x354e, 0x6fa: 0x3542, 0x6fb: 0x43ed, + 0x6fc: 0x355a, 0x6fd: 0x4386, 0x6fe: 0x0257, 0x6ff: 0x4386, // Block 0x1c, offset 0x700 - 0x700: 0x42b7, 0x701: 0x4499, 0x702: 0x3def, 0x703: 0x36b4, 0x704: 0x3df7, - 0x706: 0x4851, 0x707: 0x3e0f, 0x708: 0x3618, 0x709: 0x430b, 0x70a: 0x3624, 0x70b: 0x4311, - 0x70c: 0x3630, 0x70d: 0x44a0, 0x70e: 0x44a7, 0x70f: 0x44ae, 0x710: 0x36cc, 0x711: 0x36c6, - 0x712: 0x3e17, 0x713: 0x44fb, 0x716: 0x36d2, 0x717: 0x3e27, - 0x718: 0x3648, 0x719: 0x3642, 0x71a: 0x3636, 0x71b: 0x4317, 0x71d: 0x44b5, - 0x71e: 0x44bc, 0x71f: 0x44c3, 0x720: 0x3702, 0x721: 0x36fc, 0x722: 0x3e7f, 0x723: 0x4503, - 0x724: 0x36e4, 0x725: 0x36ea, 0x726: 0x3708, 0x727: 0x3e8f, 0x728: 0x3678, 0x729: 0x3672, - 0x72a: 0x3666, 0x72b: 0x4323, 0x72c: 0x3660, 0x72d: 0x448b, 0x72e: 0x4492, 0x72f: 0x0081, - 0x732: 0x3ec7, 0x733: 0x370e, 0x734: 0x3ecf, - 0x736: 0x489f, 0x737: 0x3ee7, 0x738: 0x3654, 0x739: 0x431d, 0x73a: 0x3684, 0x73b: 0x432f, - 0x73c: 0x3690, 0x73d: 0x4271, 0x73e: 0x42a3, + 0x700: 0x439f, 0x701: 0x4581, 0x702: 0x3d37, 0x703: 0x35fc, 0x704: 0x3d3f, + 0x706: 0x49b1, 0x707: 0x3d57, 0x708: 0x3560, 0x709: 0x43f3, 0x70a: 0x356c, 0x70b: 0x43f9, + 0x70c: 0x3578, 0x70d: 0x4588, 0x70e: 0x458f, 0x70f: 0x4596, 0x710: 0x3614, 0x711: 0x360e, + 0x712: 0x3d5f, 0x713: 0x45e3, 0x716: 0x361a, 0x717: 0x3d6f, + 0x718: 0x3590, 0x719: 0x358a, 0x71a: 0x357e, 0x71b: 0x43ff, 0x71d: 0x459d, + 0x71e: 0x45a4, 0x71f: 0x45ab, 0x720: 0x364a, 0x721: 0x3644, 0x722: 0x3dc7, 0x723: 0x45eb, + 0x724: 0x362c, 0x725: 0x3632, 0x726: 0x3650, 0x727: 0x3dd7, 0x728: 0x35c0, 0x729: 0x35ba, + 0x72a: 0x35ae, 0x72b: 0x440b, 0x72c: 0x35a8, 0x72d: 0x4573, 0x72e: 0x457a, 0x72f: 0x0081, + 0x732: 0x3e0f, 0x733: 0x3656, 0x734: 0x3e17, + 0x736: 0x49ff, 0x737: 0x3e2f, 0x738: 0x359c, 0x739: 0x4405, 0x73a: 0x35cc, 0x73b: 0x4417, + 0x73c: 0x35d8, 0x73d: 0x4359, 0x73e: 0x438b, // Block 0x1d, offset 0x740 - 0x740: 0x1bde, 0x741: 0x1be2, 0x742: 0x0047, 0x743: 0x1c5a, 0x745: 0x1bee, - 0x746: 0x1bf2, 0x747: 0x00e9, 0x749: 0x1c5e, 0x74a: 0x008f, 0x74b: 0x0051, - 0x74c: 0x0051, 0x74d: 0x0051, 0x74e: 0x0091, 0x74f: 0x00da, 0x750: 0x0053, 0x751: 0x0053, - 0x752: 0x0059, 0x753: 0x0099, 0x755: 0x005d, 0x756: 0x1993, + 0x740: 0x1d08, 0x741: 0x1d0c, 0x742: 0x0047, 0x743: 0x1d84, 0x745: 0x1d18, + 0x746: 0x1d1c, 0x747: 0x00ef, 0x749: 0x1d88, 0x74a: 0x008f, 0x74b: 0x0051, + 0x74c: 0x0051, 0x74d: 0x0051, 0x74e: 0x0091, 0x74f: 0x00e0, 0x750: 0x0053, 0x751: 0x0053, + 0x752: 0x0059, 0x753: 0x0099, 0x755: 0x005d, 0x756: 0x1abd, 0x759: 0x0061, 0x75a: 0x0063, 0x75b: 0x0065, 0x75c: 0x0065, 0x75d: 0x0065, - 0x760: 0x19a5, 0x761: 0x1bce, 0x762: 0x19ae, - 0x764: 0x0075, 0x766: 0x01bb, 0x768: 0x0075, - 0x76a: 0x0057, 0x76b: 0x42e9, 0x76c: 0x0045, 0x76d: 0x0047, 0x76f: 0x008b, - 0x770: 0x004b, 0x771: 0x004d, 0x773: 0x005b, 0x774: 0x009f, 0x775: 0x0218, - 0x776: 0x021b, 0x777: 0x021e, 0x778: 0x0221, 0x779: 0x0093, 0x77b: 0x1b9e, - 0x77c: 0x01eb, 0x77d: 0x01c4, 0x77e: 0x017c, 0x77f: 0x01a3, + 0x760: 0x1acf, 0x761: 0x1cf8, 0x762: 0x1ad8, + 0x764: 0x0075, 0x766: 0x023c, 0x768: 0x0075, + 0x76a: 0x0057, 0x76b: 0x43d1, 0x76c: 0x0045, 0x76d: 0x0047, 0x76f: 0x008b, + 0x770: 0x004b, 0x771: 0x004d, 0x773: 0x005b, 0x774: 0x009f, 0x775: 0x0308, + 0x776: 0x030b, 0x777: 0x030e, 0x778: 0x0311, 0x779: 0x0093, 0x77b: 0x1cc8, + 0x77c: 0x026c, 0x77d: 0x0245, 0x77e: 0x01fd, 0x77f: 0x0224, // Block 0x1e, offset 0x780 - 0x780: 0x0466, 0x785: 0x0049, + 0x780: 0x055a, 0x785: 0x0049, 0x786: 0x0089, 0x787: 0x008b, 0x788: 0x0093, 0x789: 0x0095, - 0x790: 0x2234, 0x791: 0x2240, - 0x792: 0x22f4, 0x793: 0x221c, 0x794: 0x22a0, 0x795: 0x2228, 0x796: 0x22a6, 0x797: 0x22be, - 0x798: 0x22ca, 0x799: 0x222e, 0x79a: 0x22d0, 0x79b: 0x223a, 0x79c: 0x22c4, 0x79d: 0x22d6, - 0x79e: 0x22dc, 0x79f: 0x1cc2, 0x7a0: 0x0053, 0x7a1: 0x195d, 0x7a2: 0x1baa, 0x7a3: 0x1966, - 0x7a4: 0x006d, 0x7a5: 0x19b1, 0x7a6: 0x1bd6, 0x7a7: 0x1d4e, 0x7a8: 0x1969, 0x7a9: 0x0071, - 0x7aa: 0x19bd, 0x7ab: 0x1bda, 0x7ac: 0x0059, 0x7ad: 0x0047, 0x7ae: 0x0049, 0x7af: 0x005b, - 0x7b0: 0x0093, 0x7b1: 0x19ea, 0x7b2: 0x1c1e, 0x7b3: 0x19f3, 0x7b4: 0x00ad, 0x7b5: 0x1a68, - 0x7b6: 0x1c52, 0x7b7: 0x1d62, 0x7b8: 0x19f6, 0x7b9: 0x00b1, 0x7ba: 0x1a6b, 0x7bb: 0x1c56, + 0x790: 0x235e, 0x791: 0x236a, + 0x792: 0x241e, 0x793: 0x2346, 0x794: 0x23ca, 0x795: 0x2352, 0x796: 0x23d0, 0x797: 0x23e8, + 0x798: 0x23f4, 0x799: 0x2358, 0x79a: 0x23fa, 0x79b: 0x2364, 0x79c: 0x23ee, 0x79d: 0x2400, + 0x79e: 0x2406, 0x79f: 0x1dec, 0x7a0: 0x0053, 0x7a1: 0x1a87, 0x7a2: 0x1cd4, 0x7a3: 0x1a90, + 0x7a4: 0x006d, 0x7a5: 0x1adb, 0x7a6: 0x1d00, 0x7a7: 0x1e78, 0x7a8: 0x1a93, 0x7a9: 0x0071, + 0x7aa: 0x1ae7, 0x7ab: 0x1d04, 0x7ac: 0x0059, 0x7ad: 0x0047, 0x7ae: 0x0049, 0x7af: 0x005b, + 0x7b0: 0x0093, 0x7b1: 0x1b14, 0x7b2: 0x1d48, 0x7b3: 0x1b1d, 0x7b4: 0x00ad, 0x7b5: 0x1b92, + 0x7b6: 0x1d7c, 0x7b7: 0x1e8c, 0x7b8: 0x1b20, 0x7b9: 0x00b1, 0x7ba: 0x1b95, 0x7bb: 0x1d80, 0x7bc: 0x0099, 0x7bd: 0x0087, 0x7be: 0x0089, 0x7bf: 0x009b, // Block 0x1f, offset 0x7c0 - 0x7c1: 0x3c1d, 0x7c3: 0xa000, 0x7c4: 0x3c24, 0x7c5: 0xa000, - 0x7c7: 0x3c2b, 0x7c8: 0xa000, 0x7c9: 0x3c32, + 0x7c1: 0x3b65, 0x7c3: 0xa000, 0x7c4: 0x3b6c, 0x7c5: 0xa000, + 0x7c7: 0x3b73, 0x7c8: 0xa000, 0x7c9: 0x3b7a, 0x7cd: 0xa000, - 0x7e0: 0x2f7c, 0x7e1: 0xa000, 0x7e2: 0x3c40, + 0x7e0: 0x2ec4, 0x7e1: 0xa000, 0x7e2: 0x3b88, 0x7e4: 0xa000, 0x7e5: 0xa000, - 0x7ed: 0x3c39, 0x7ee: 0x2f77, 0x7ef: 0x2f81, - 0x7f0: 0x3c47, 0x7f1: 0x3c4e, 0x7f2: 0xa000, 0x7f3: 0xa000, 0x7f4: 0x3c55, 0x7f5: 0x3c5c, - 0x7f6: 0xa000, 0x7f7: 0xa000, 0x7f8: 0x3c63, 0x7f9: 0x3c6a, 0x7fa: 0xa000, 0x7fb: 0xa000, + 0x7ed: 0x3b81, 0x7ee: 0x2ebf, 0x7ef: 0x2ec9, + 0x7f0: 0x3b8f, 0x7f1: 0x3b96, 0x7f2: 0xa000, 0x7f3: 0xa000, 0x7f4: 0x3b9d, 0x7f5: 0x3ba4, + 0x7f6: 0xa000, 0x7f7: 0xa000, 0x7f8: 0x3bab, 0x7f9: 0x3bb2, 0x7fa: 0xa000, 0x7fb: 0xa000, 0x7fc: 0xa000, 0x7fd: 0xa000, // Block 0x20, offset 0x800 - 0x800: 0x3c71, 0x801: 0x3c78, 0x802: 0xa000, 0x803: 0xa000, 0x804: 0x3c8d, 0x805: 0x3c94, - 0x806: 0xa000, 0x807: 0xa000, 0x808: 0x3c9b, 0x809: 0x3ca2, + 0x800: 0x3bb9, 0x801: 0x3bc0, 0x802: 0xa000, 0x803: 0xa000, 0x804: 0x3bd5, 0x805: 0x3bdc, + 0x806: 0xa000, 0x807: 0xa000, 0x808: 0x3be3, 0x809: 0x3bea, 0x811: 0xa000, 0x812: 0xa000, 0x822: 0xa000, 0x828: 0xa000, 0x829: 0xa000, - 0x82b: 0xa000, 0x82c: 0x3cb7, 0x82d: 0x3cbe, 0x82e: 0x3cc5, 0x82f: 0x3ccc, + 0x82b: 0xa000, 0x82c: 0x3bff, 0x82d: 0x3c06, 0x82e: 0x3c0d, 0x82f: 0x3c14, 0x832: 0xa000, 0x833: 0xa000, 0x834: 0xa000, 0x835: 0xa000, // Block 0x21, offset 0x840 0x860: 0x0023, 0x861: 0x0025, 0x862: 0x0027, 0x863: 0x0029, - 0x864: 0x002b, 0x865: 0x002d, 0x866: 0x002f, 0x867: 0x0031, 0x868: 0x0033, 0x869: 0x1885, - 0x86a: 0x1888, 0x86b: 0x188b, 0x86c: 0x188e, 0x86d: 0x1891, 0x86e: 0x1894, 0x86f: 0x1897, - 0x870: 0x189a, 0x871: 0x189d, 0x872: 0x18a0, 0x873: 0x18a9, 0x874: 0x1a6e, 0x875: 0x1a72, - 0x876: 0x1a76, 0x877: 0x1a7a, 0x878: 0x1a7e, 0x879: 0x1a82, 0x87a: 0x1a86, 0x87b: 0x1a8a, - 0x87c: 0x1a8e, 0x87d: 0x1c86, 0x87e: 0x1c8b, 0x87f: 0x1c90, + 0x864: 0x002b, 0x865: 0x002d, 0x866: 0x002f, 0x867: 0x0031, 0x868: 0x0033, 0x869: 0x19af, + 0x86a: 0x19b2, 0x86b: 0x19b5, 0x86c: 0x19b8, 0x86d: 0x19bb, 0x86e: 0x19be, 0x86f: 0x19c1, + 0x870: 0x19c4, 0x871: 0x19c7, 0x872: 0x19ca, 0x873: 0x19d3, 0x874: 0x1b98, 0x875: 0x1b9c, + 0x876: 0x1ba0, 0x877: 0x1ba4, 0x878: 0x1ba8, 0x879: 0x1bac, 0x87a: 0x1bb0, 0x87b: 0x1bb4, + 0x87c: 0x1bb8, 0x87d: 0x1db0, 0x87e: 0x1db5, 0x87f: 0x1dba, // Block 0x22, offset 0x880 - 0x880: 0x1c95, 0x881: 0x1c9a, 0x882: 0x1c9f, 0x883: 0x1ca4, 0x884: 0x1ca9, 0x885: 0x1cae, - 0x886: 0x1cb3, 0x887: 0x1cb8, 0x888: 0x1882, 0x889: 0x18a6, 0x88a: 0x18ca, 0x88b: 0x18ee, - 0x88c: 0x1912, 0x88d: 0x191b, 0x88e: 0x1921, 0x88f: 0x1927, 0x890: 0x192d, 0x891: 0x1b66, - 0x892: 0x1b6a, 0x893: 0x1b6e, 0x894: 0x1b72, 0x895: 0x1b76, 0x896: 0x1b7a, 0x897: 0x1b7e, - 0x898: 0x1b82, 0x899: 0x1b86, 0x89a: 0x1b8a, 0x89b: 0x1b8e, 0x89c: 0x1afa, 0x89d: 0x1afe, - 0x89e: 0x1b02, 0x89f: 0x1b06, 0x8a0: 0x1b0a, 0x8a1: 0x1b0e, 0x8a2: 0x1b12, 0x8a3: 0x1b16, - 0x8a4: 0x1b1a, 0x8a5: 0x1b1e, 0x8a6: 0x1b22, 0x8a7: 0x1b26, 0x8a8: 0x1b2a, 0x8a9: 0x1b2e, - 0x8aa: 0x1b32, 0x8ab: 0x1b36, 0x8ac: 0x1b3a, 0x8ad: 0x1b3e, 0x8ae: 0x1b42, 0x8af: 0x1b46, - 0x8b0: 0x1b4a, 0x8b1: 0x1b4e, 0x8b2: 0x1b52, 0x8b3: 0x1b56, 0x8b4: 0x1b5a, 0x8b5: 0x1b5e, + 0x880: 0x1dbf, 0x881: 0x1dc4, 0x882: 0x1dc9, 0x883: 0x1dce, 0x884: 0x1dd3, 0x885: 0x1dd8, + 0x886: 0x1ddd, 0x887: 0x1de2, 0x888: 0x19ac, 0x889: 0x19d0, 0x88a: 0x19f4, 0x88b: 0x1a18, + 0x88c: 0x1a3c, 0x88d: 0x1a45, 0x88e: 0x1a4b, 0x88f: 0x1a51, 0x890: 0x1a57, 0x891: 0x1c90, + 0x892: 0x1c94, 0x893: 0x1c98, 0x894: 0x1c9c, 0x895: 0x1ca0, 0x896: 0x1ca4, 0x897: 0x1ca8, + 0x898: 0x1cac, 0x899: 0x1cb0, 0x89a: 0x1cb4, 0x89b: 0x1cb8, 0x89c: 0x1c24, 0x89d: 0x1c28, + 0x89e: 0x1c2c, 0x89f: 0x1c30, 0x8a0: 0x1c34, 0x8a1: 0x1c38, 0x8a2: 0x1c3c, 0x8a3: 0x1c40, + 0x8a4: 0x1c44, 0x8a5: 0x1c48, 0x8a6: 0x1c4c, 0x8a7: 0x1c50, 0x8a8: 0x1c54, 0x8a9: 0x1c58, + 0x8aa: 0x1c5c, 0x8ab: 0x1c60, 0x8ac: 0x1c64, 0x8ad: 0x1c68, 0x8ae: 0x1c6c, 0x8af: 0x1c70, + 0x8b0: 0x1c74, 0x8b1: 0x1c78, 0x8b2: 0x1c7c, 0x8b3: 0x1c80, 0x8b4: 0x1c84, 0x8b5: 0x1c88, 0x8b6: 0x0043, 0x8b7: 0x0045, 0x8b8: 0x0047, 0x8b9: 0x0049, 0x8ba: 0x004b, 0x8bb: 0x004d, 0x8bc: 0x004f, 0x8bd: 0x0051, 0x8be: 0x0053, 0x8bf: 0x0055, // Block 0x23, offset 0x8c0 - 0x8c0: 0x06c2, 0x8c1: 0x06e6, 0x8c2: 0x06f2, 0x8c3: 0x0702, 0x8c4: 0x070a, 0x8c5: 0x0716, - 0x8c6: 0x071e, 0x8c7: 0x0726, 0x8c8: 0x0732, 0x8c9: 0x0786, 0x8ca: 0x079e, 0x8cb: 0x07ae, - 0x8cc: 0x07be, 0x8cd: 0x07ce, 0x8ce: 0x07de, 0x8cf: 0x07fe, 0x8d0: 0x0802, 0x8d1: 0x0806, - 0x8d2: 0x083a, 0x8d3: 0x0862, 0x8d4: 0x0872, 0x8d5: 0x087a, 0x8d6: 0x087e, 0x8d7: 0x088a, - 0x8d8: 0x08a6, 0x8d9: 0x08aa, 0x8da: 0x08c2, 0x8db: 0x08c6, 0x8dc: 0x08ce, 0x8dd: 0x08de, - 0x8de: 0x097a, 0x8df: 0x098e, 0x8e0: 0x09ce, 0x8e1: 0x09e2, 0x8e2: 0x09ea, 0x8e3: 0x09ee, - 0x8e4: 0x09fe, 0x8e5: 0x0a1a, 0x8e6: 0x0a46, 0x8e7: 0x0a52, 0x8e8: 0x0a72, 0x8e9: 0x0a7e, - 0x8ea: 0x0a82, 0x8eb: 0x0a86, 0x8ec: 0x0a9e, 0x8ed: 0x0aa2, 0x8ee: 0x0ace, 0x8ef: 0x0ada, - 0x8f0: 0x0ae2, 0x8f1: 0x0aea, 0x8f2: 0x0afa, 0x8f3: 0x0b02, 0x8f4: 0x0b0a, 0x8f5: 0x0b36, - 0x8f6: 0x0b3a, 0x8f7: 0x0b42, 0x8f8: 0x0b46, 0x8f9: 0x0b4e, 0x8fa: 0x0b56, 0x8fb: 0x0b66, - 0x8fc: 0x0b82, 0x8fd: 0x0bfa, 0x8fe: 0x0c0e, 0x8ff: 0x0c12, + 0x8c0: 0x07ba, 0x8c1: 0x07de, 0x8c2: 0x07ea, 0x8c3: 0x07fa, 0x8c4: 0x0802, 0x8c5: 0x080e, + 0x8c6: 0x0816, 0x8c7: 0x081e, 0x8c8: 0x082a, 0x8c9: 0x087e, 0x8ca: 0x0896, 0x8cb: 0x08a6, + 0x8cc: 0x08b6, 0x8cd: 0x08c6, 0x8ce: 0x08d6, 0x8cf: 0x08f6, 0x8d0: 0x08fa, 0x8d1: 0x08fe, + 0x8d2: 0x0932, 0x8d3: 0x095a, 0x8d4: 0x096a, 0x8d5: 0x0972, 0x8d6: 0x0976, 0x8d7: 0x0982, + 0x8d8: 0x099e, 0x8d9: 0x09a2, 0x8da: 0x09ba, 0x8db: 0x09be, 0x8dc: 0x09c6, 0x8dd: 0x09d6, + 0x8de: 0x0a72, 0x8df: 0x0a86, 0x8e0: 0x0ac6, 0x8e1: 0x0ada, 0x8e2: 0x0ae2, 0x8e3: 0x0ae6, + 0x8e4: 0x0af6, 0x8e5: 0x0b12, 0x8e6: 0x0b3e, 0x8e7: 0x0b4a, 0x8e8: 0x0b6a, 0x8e9: 0x0b76, + 0x8ea: 0x0b7a, 0x8eb: 0x0b7e, 0x8ec: 0x0b96, 0x8ed: 0x0b9a, 0x8ee: 0x0bc6, 0x8ef: 0x0bd2, + 0x8f0: 0x0bda, 0x8f1: 0x0be2, 0x8f2: 0x0bf2, 0x8f3: 0x0bfa, 0x8f4: 0x0c02, 0x8f5: 0x0c2e, + 0x8f6: 0x0c32, 0x8f7: 0x0c3a, 0x8f8: 0x0c3e, 0x8f9: 0x0c46, 0x8fa: 0x0c4e, 0x8fb: 0x0c5e, + 0x8fc: 0x0c7a, 0x8fd: 0x0cf2, 0x8fe: 0x0d06, 0x8ff: 0x0d0a, // Block 0x24, offset 0x900 - 0x900: 0x0c92, 0x901: 0x0c96, 0x902: 0x0caa, 0x903: 0x0cae, 0x904: 0x0cb6, 0x905: 0x0cbe, - 0x906: 0x0cc6, 0x907: 0x0cd2, 0x908: 0x0cfa, 0x909: 0x0d0a, 0x90a: 0x0d1e, 0x90b: 0x0d8e, - 0x90c: 0x0d9a, 0x90d: 0x0daa, 0x90e: 0x0db6, 0x90f: 0x0dc2, 0x910: 0x0dca, 0x911: 0x0dce, - 0x912: 0x0dd2, 0x913: 0x0dd6, 0x914: 0x0dda, 0x915: 0x0e92, 0x916: 0x0eda, 0x917: 0x0ee6, - 0x918: 0x0eea, 0x919: 0x0eee, 0x91a: 0x0ef2, 0x91b: 0x0efa, 0x91c: 0x0efe, 0x91d: 0x0f12, - 0x91e: 0x0f2e, 0x91f: 0x0f36, 0x920: 0x0f76, 0x921: 0x0f7a, 0x922: 0x0f82, 0x923: 0x0f86, - 0x924: 0x0f8e, 0x925: 0x0f92, 0x926: 0x0fb6, 0x927: 0x0fba, 0x928: 0x0fd6, 0x929: 0x0fda, - 0x92a: 0x0fde, 0x92b: 0x0fe2, 0x92c: 0x0ff6, 0x92d: 0x101a, 0x92e: 0x101e, 0x92f: 0x1022, - 0x930: 0x1046, 0x931: 0x1086, 0x932: 0x108a, 0x933: 0x10aa, 0x934: 0x10ba, 0x935: 0x10c2, - 0x936: 0x10e2, 0x937: 0x1106, 0x938: 0x114a, 0x939: 0x1152, 0x93a: 0x1166, 0x93b: 0x1172, - 0x93c: 0x117a, 0x93d: 0x1182, 0x93e: 0x1186, 0x93f: 0x118a, + 0x900: 0x0d8a, 0x901: 0x0d8e, 0x902: 0x0da2, 0x903: 0x0da6, 0x904: 0x0dae, 0x905: 0x0db6, + 0x906: 0x0dbe, 0x907: 0x0dca, 0x908: 0x0df2, 0x909: 0x0e02, 0x90a: 0x0e16, 0x90b: 0x0e86, + 0x90c: 0x0e92, 0x90d: 0x0ea2, 0x90e: 0x0eae, 0x90f: 0x0eba, 0x910: 0x0ec2, 0x911: 0x0ec6, + 0x912: 0x0eca, 0x913: 0x0ece, 0x914: 0x0ed2, 0x915: 0x0f8a, 0x916: 0x0fd2, 0x917: 0x0fde, + 0x918: 0x0fe2, 0x919: 0x0fe6, 0x91a: 0x0fea, 0x91b: 0x0ff2, 0x91c: 0x0ff6, 0x91d: 0x100a, + 0x91e: 0x1026, 0x91f: 0x102e, 0x920: 0x106e, 0x921: 0x1072, 0x922: 0x107a, 0x923: 0x107e, + 0x924: 0x1086, 0x925: 0x108a, 0x926: 0x10ae, 0x927: 0x10b2, 0x928: 0x10ce, 0x929: 0x10d2, + 0x92a: 0x10d6, 0x92b: 0x10da, 0x92c: 0x10ee, 0x92d: 0x1112, 0x92e: 0x1116, 0x92f: 0x111a, + 0x930: 0x113e, 0x931: 0x117e, 0x932: 0x1182, 0x933: 0x11a2, 0x934: 0x11b2, 0x935: 0x11ba, + 0x936: 0x11da, 0x937: 0x11fe, 0x938: 0x1242, 0x939: 0x124a, 0x93a: 0x125e, 0x93b: 0x126a, + 0x93c: 0x1272, 0x93d: 0x127a, 0x93e: 0x127e, 0x93f: 0x1282, // Block 0x25, offset 0x940 - 0x940: 0x11a2, 0x941: 0x11a6, 0x942: 0x11c2, 0x943: 0x11ca, 0x944: 0x11d2, 0x945: 0x11d6, - 0x946: 0x11e2, 0x947: 0x11ea, 0x948: 0x11ee, 0x949: 0x11f2, 0x94a: 0x11fa, 0x94b: 0x11fe, - 0x94c: 0x129e, 0x94d: 0x12b2, 0x94e: 0x12e6, 0x94f: 0x12ea, 0x950: 0x12f2, 0x951: 0x131e, - 0x952: 0x1326, 0x953: 0x132e, 0x954: 0x1336, 0x955: 0x1372, 0x956: 0x1376, 0x957: 0x137e, - 0x958: 0x1382, 0x959: 0x1386, 0x95a: 0x13b2, 0x95b: 0x13b6, 0x95c: 0x13be, 0x95d: 0x13d2, - 0x95e: 0x13d6, 0x95f: 0x13f2, 0x960: 0x13fa, 0x961: 0x13fe, 0x962: 0x1422, 0x963: 0x1442, - 0x964: 0x1456, 0x965: 0x145a, 0x966: 0x1462, 0x967: 0x148e, 0x968: 0x1492, 0x969: 0x14a2, - 0x96a: 0x14c6, 0x96b: 0x14d2, 0x96c: 0x14e2, 0x96d: 0x14fa, 0x96e: 0x1502, 0x96f: 0x1506, - 0x970: 0x150a, 0x971: 0x150e, 0x972: 0x151a, 0x973: 0x151e, 0x974: 0x1526, 0x975: 0x1542, - 0x976: 0x1546, 0x977: 0x154a, 0x978: 0x1562, 0x979: 0x1566, 0x97a: 0x156e, 0x97b: 0x1582, - 0x97c: 0x1586, 0x97d: 0x158a, 0x97e: 0x1592, 0x97f: 0x1596, + 0x940: 0x129a, 0x941: 0x129e, 0x942: 0x12ba, 0x943: 0x12c2, 0x944: 0x12ca, 0x945: 0x12ce, + 0x946: 0x12da, 0x947: 0x12e2, 0x948: 0x12e6, 0x949: 0x12ea, 0x94a: 0x12f2, 0x94b: 0x12f6, + 0x94c: 0x1396, 0x94d: 0x13aa, 0x94e: 0x13de, 0x94f: 0x13e2, 0x950: 0x13ea, 0x951: 0x1416, + 0x952: 0x141e, 0x953: 0x1426, 0x954: 0x142e, 0x955: 0x146a, 0x956: 0x146e, 0x957: 0x1476, + 0x958: 0x147a, 0x959: 0x147e, 0x95a: 0x14aa, 0x95b: 0x14ae, 0x95c: 0x14b6, 0x95d: 0x14ca, + 0x95e: 0x14ce, 0x95f: 0x14ea, 0x960: 0x14f2, 0x961: 0x14f6, 0x962: 0x151a, 0x963: 0x153a, + 0x964: 0x154e, 0x965: 0x1552, 0x966: 0x155a, 0x967: 0x1586, 0x968: 0x158a, 0x969: 0x159a, + 0x96a: 0x15be, 0x96b: 0x15ca, 0x96c: 0x15da, 0x96d: 0x15f2, 0x96e: 0x15fa, 0x96f: 0x15fe, + 0x970: 0x1602, 0x971: 0x1606, 0x972: 0x1612, 0x973: 0x1616, 0x974: 0x161e, 0x975: 0x163a, + 0x976: 0x163e, 0x977: 0x1642, 0x978: 0x165a, 0x979: 0x165e, 0x97a: 0x1666, 0x97b: 0x167a, + 0x97c: 0x167e, 0x97d: 0x1682, 0x97e: 0x168a, 0x97f: 0x168e, // Block 0x26, offset 0x980 0x986: 0xa000, 0x98b: 0xa000, - 0x98c: 0x3f1f, 0x98d: 0xa000, 0x98e: 0x3f27, 0x98f: 0xa000, 0x990: 0x3f2f, 0x991: 0xa000, - 0x992: 0x3f37, 0x993: 0xa000, 0x994: 0x3f3f, 0x995: 0xa000, 0x996: 0x3f47, 0x997: 0xa000, - 0x998: 0x3f4f, 0x999: 0xa000, 0x99a: 0x3f57, 0x99b: 0xa000, 0x99c: 0x3f5f, 0x99d: 0xa000, - 0x99e: 0x3f67, 0x99f: 0xa000, 0x9a0: 0x3f6f, 0x9a1: 0xa000, 0x9a2: 0x3f77, - 0x9a4: 0xa000, 0x9a5: 0x3f7f, 0x9a6: 0xa000, 0x9a7: 0x3f87, 0x9a8: 0xa000, 0x9a9: 0x3f8f, + 0x98c: 0x3f47, 0x98d: 0xa000, 0x98e: 0x3f4f, 0x98f: 0xa000, 0x990: 0x3f57, 0x991: 0xa000, + 0x992: 0x3f5f, 0x993: 0xa000, 0x994: 0x3f67, 0x995: 0xa000, 0x996: 0x3f6f, 0x997: 0xa000, + 0x998: 0x3f77, 0x999: 0xa000, 0x99a: 0x3f7f, 0x99b: 0xa000, 0x99c: 0x3f87, 0x99d: 0xa000, + 0x99e: 0x3f8f, 0x99f: 0xa000, 0x9a0: 0x3f97, 0x9a1: 0xa000, 0x9a2: 0x3f9f, + 0x9a4: 0xa000, 0x9a5: 0x3fa7, 0x9a6: 0xa000, 0x9a7: 0x3faf, 0x9a8: 0xa000, 0x9a9: 0x3fb7, 0x9af: 0xa000, - 0x9b0: 0x3f97, 0x9b1: 0x3f9f, 0x9b2: 0xa000, 0x9b3: 0x3fa7, 0x9b4: 0x3faf, 0x9b5: 0xa000, - 0x9b6: 0x3fb7, 0x9b7: 0x3fbf, 0x9b8: 0xa000, 0x9b9: 0x3fc7, 0x9ba: 0x3fcf, 0x9bb: 0xa000, - 0x9bc: 0x3fd7, 0x9bd: 0x3fdf, + 0x9b0: 0x3fbf, 0x9b1: 0x3fc7, 0x9b2: 0xa000, 0x9b3: 0x3fcf, 0x9b4: 0x3fd7, 0x9b5: 0xa000, + 0x9b6: 0x3fdf, 0x9b7: 0x3fe7, 0x9b8: 0xa000, 0x9b9: 0x3fef, 0x9ba: 0x3ff7, 0x9bb: 0xa000, + 0x9bc: 0x3fff, 0x9bd: 0x4007, // Block 0x27, offset 0x9c0 - 0x9d4: 0x3f17, - 0x9d9: 0x9904, 0x9da: 0x9904, 0x9db: 0x42f3, 0x9dc: 0x42f9, 0x9dd: 0xa000, - 0x9de: 0x3fe7, 0x9df: 0x26ba, + 0x9d4: 0x3f3f, + 0x9d9: 0x9904, 0x9da: 0x9904, 0x9db: 0x43db, 0x9dc: 0x43e1, 0x9dd: 0xa000, + 0x9de: 0x400f, 0x9df: 0x27e4, 0x9e6: 0xa000, - 0x9eb: 0xa000, 0x9ec: 0x3ff7, 0x9ed: 0xa000, 0x9ee: 0x3fff, 0x9ef: 0xa000, - 0x9f0: 0x4007, 0x9f1: 0xa000, 0x9f2: 0x400f, 0x9f3: 0xa000, 0x9f4: 0x4017, 0x9f5: 0xa000, - 0x9f6: 0x401f, 0x9f7: 0xa000, 0x9f8: 0x4027, 0x9f9: 0xa000, 0x9fa: 0x402f, 0x9fb: 0xa000, - 0x9fc: 0x4037, 0x9fd: 0xa000, 0x9fe: 0x403f, 0x9ff: 0xa000, + 0x9eb: 0xa000, 0x9ec: 0x401f, 0x9ed: 0xa000, 0x9ee: 0x4027, 0x9ef: 0xa000, + 0x9f0: 0x402f, 0x9f1: 0xa000, 0x9f2: 0x4037, 0x9f3: 0xa000, 0x9f4: 0x403f, 0x9f5: 0xa000, + 0x9f6: 0x4047, 0x9f7: 0xa000, 0x9f8: 0x404f, 0x9f9: 0xa000, 0x9fa: 0x4057, 0x9fb: 0xa000, + 0x9fc: 0x405f, 0x9fd: 0xa000, 0x9fe: 0x4067, 0x9ff: 0xa000, // Block 0x28, offset 0xa00 - 0xa00: 0x4047, 0xa01: 0xa000, 0xa02: 0x404f, 0xa04: 0xa000, 0xa05: 0x4057, - 0xa06: 0xa000, 0xa07: 0x405f, 0xa08: 0xa000, 0xa09: 0x4067, - 0xa0f: 0xa000, 0xa10: 0x406f, 0xa11: 0x4077, - 0xa12: 0xa000, 0xa13: 0x407f, 0xa14: 0x4087, 0xa15: 0xa000, 0xa16: 0x408f, 0xa17: 0x4097, - 0xa18: 0xa000, 0xa19: 0x409f, 0xa1a: 0x40a7, 0xa1b: 0xa000, 0xa1c: 0x40af, 0xa1d: 0x40b7, + 0xa00: 0x406f, 0xa01: 0xa000, 0xa02: 0x4077, 0xa04: 0xa000, 0xa05: 0x407f, + 0xa06: 0xa000, 0xa07: 0x4087, 0xa08: 0xa000, 0xa09: 0x408f, + 0xa0f: 0xa000, 0xa10: 0x4097, 0xa11: 0x409f, + 0xa12: 0xa000, 0xa13: 0x40a7, 0xa14: 0x40af, 0xa15: 0xa000, 0xa16: 0x40b7, 0xa17: 0x40bf, + 0xa18: 0xa000, 0xa19: 0x40c7, 0xa1a: 0x40cf, 0xa1b: 0xa000, 0xa1c: 0x40d7, 0xa1d: 0x40df, 0xa2f: 0xa000, - 0xa30: 0xa000, 0xa31: 0xa000, 0xa32: 0xa000, 0xa34: 0x3fef, - 0xa37: 0x40bf, 0xa38: 0x40c7, 0xa39: 0x40cf, 0xa3a: 0x40d7, - 0xa3d: 0xa000, 0xa3e: 0x40df, 0xa3f: 0x26cf, + 0xa30: 0xa000, 0xa31: 0xa000, 0xa32: 0xa000, 0xa34: 0x4017, + 0xa37: 0x40e7, 0xa38: 0x40ef, 0xa39: 0x40f7, 0xa3a: 0x40ff, + 0xa3d: 0xa000, 0xa3e: 0x4107, 0xa3f: 0x27f9, // Block 0x29, offset 0xa40 - 0xa40: 0x036a, 0xa41: 0x032e, 0xa42: 0x0332, 0xa43: 0x0336, 0xa44: 0x037e, 0xa45: 0x033a, - 0xa46: 0x033e, 0xa47: 0x0342, 0xa48: 0x0346, 0xa49: 0x034a, 0xa4a: 0x034e, 0xa4b: 0x0352, - 0xa4c: 0x0356, 0xa4d: 0x035a, 0xa4e: 0x035e, 0xa4f: 0x49d4, 0xa50: 0x49da, 0xa51: 0x49e0, - 0xa52: 0x49e6, 0xa53: 0x49ec, 0xa54: 0x49f2, 0xa55: 0x49f8, 0xa56: 0x49fe, 0xa57: 0x4a04, - 0xa58: 0x4a0a, 0xa59: 0x4a10, 0xa5a: 0x4a16, 0xa5b: 0x4a1c, 0xa5c: 0x4a22, 0xa5d: 0x4a28, - 0xa5e: 0x4a2e, 0xa5f: 0x4a34, 0xa60: 0x4a3a, 0xa61: 0x4a40, 0xa62: 0x4a46, 0xa63: 0x4a4c, - 0xa64: 0x03c6, 0xa65: 0x0362, 0xa66: 0x0366, 0xa67: 0x03ea, 0xa68: 0x03ee, 0xa69: 0x03f2, - 0xa6a: 0x03f6, 0xa6b: 0x03fa, 0xa6c: 0x03fe, 0xa6d: 0x0402, 0xa6e: 0x036e, 0xa6f: 0x0406, - 0xa70: 0x040a, 0xa71: 0x0372, 0xa72: 0x0376, 0xa73: 0x037a, 0xa74: 0x0382, 0xa75: 0x0386, - 0xa76: 0x038a, 0xa77: 0x038e, 0xa78: 0x0392, 0xa79: 0x0396, 0xa7a: 0x039a, 0xa7b: 0x039e, - 0xa7c: 0x03a2, 0xa7d: 0x03a6, 0xa7e: 0x03aa, 0xa7f: 0x03ae, + 0xa40: 0x045a, 0xa41: 0x041e, 0xa42: 0x0422, 0xa43: 0x0426, 0xa44: 0x046e, 0xa45: 0x042a, + 0xa46: 0x042e, 0xa47: 0x0432, 0xa48: 0x0436, 0xa49: 0x043a, 0xa4a: 0x043e, 0xa4b: 0x0442, + 0xa4c: 0x0446, 0xa4d: 0x044a, 0xa4e: 0x044e, 0xa4f: 0x4b4e, 0xa50: 0x4b54, 0xa51: 0x4b5a, + 0xa52: 0x4b60, 0xa53: 0x4b66, 0xa54: 0x4b6c, 0xa55: 0x4b72, 0xa56: 0x4b78, 0xa57: 0x4b7e, + 0xa58: 0x4b84, 0xa59: 0x4b8a, 0xa5a: 0x4b90, 0xa5b: 0x4b96, 0xa5c: 0x4b9c, 0xa5d: 0x4ba2, + 0xa5e: 0x4ba8, 0xa5f: 0x4bae, 0xa60: 0x4bb4, 0xa61: 0x4bba, 0xa62: 0x4bc0, 0xa63: 0x4bc6, + 0xa64: 0x04b6, 0xa65: 0x0452, 0xa66: 0x0456, 0xa67: 0x04da, 0xa68: 0x04de, 0xa69: 0x04e2, + 0xa6a: 0x04e6, 0xa6b: 0x04ea, 0xa6c: 0x04ee, 0xa6d: 0x04f2, 0xa6e: 0x045e, 0xa6f: 0x04f6, + 0xa70: 0x04fa, 0xa71: 0x0462, 0xa72: 0x0466, 0xa73: 0x046a, 0xa74: 0x0472, 0xa75: 0x0476, + 0xa76: 0x047a, 0xa77: 0x047e, 0xa78: 0x0482, 0xa79: 0x0486, 0xa7a: 0x048a, 0xa7b: 0x048e, + 0xa7c: 0x0492, 0xa7d: 0x0496, 0xa7e: 0x049a, 0xa7f: 0x049e, // Block 0x2a, offset 0xa80 - 0xa80: 0x03b2, 0xa81: 0x03b6, 0xa82: 0x040e, 0xa83: 0x0412, 0xa84: 0x03ba, 0xa85: 0x03be, - 0xa86: 0x03c2, 0xa87: 0x03ca, 0xa88: 0x03ce, 0xa89: 0x03d2, 0xa8a: 0x03d6, 0xa8b: 0x03da, - 0xa8c: 0x03de, 0xa8d: 0x03e2, 0xa8e: 0x03e6, - 0xa92: 0x06c2, 0xa93: 0x071e, 0xa94: 0x06ce, 0xa95: 0x097e, 0xa96: 0x06d2, 0xa97: 0x06ea, - 0xa98: 0x06d6, 0xa99: 0x0f96, 0xa9a: 0x070a, 0xa9b: 0x06de, 0xa9c: 0x06c6, 0xa9d: 0x0a02, - 0xa9e: 0x0992, 0xa9f: 0x0732, + 0xa80: 0x04a2, 0xa81: 0x04a6, 0xa82: 0x04fe, 0xa83: 0x0502, 0xa84: 0x04aa, 0xa85: 0x04ae, + 0xa86: 0x04b2, 0xa87: 0x04ba, 0xa88: 0x04be, 0xa89: 0x04c2, 0xa8a: 0x04c6, 0xa8b: 0x04ca, + 0xa8c: 0x04ce, 0xa8d: 0x04d2, 0xa8e: 0x04d6, + 0xa92: 0x07ba, 0xa93: 0x0816, 0xa94: 0x07c6, 0xa95: 0x0a76, 0xa96: 0x07ca, 0xa97: 0x07e2, + 0xa98: 0x07ce, 0xa99: 0x108e, 0xa9a: 0x0802, 0xa9b: 0x07d6, 0xa9c: 0x07be, 0xa9d: 0x0afa, + 0xa9e: 0x0a8a, 0xa9f: 0x082a, // Block 0x2b, offset 0xac0 - 0xac0: 0x205a, 0xac1: 0x2060, 0xac2: 0x2066, 0xac3: 0x206c, 0xac4: 0x2072, 0xac5: 0x2078, - 0xac6: 0x207e, 0xac7: 0x2084, 0xac8: 0x208a, 0xac9: 0x2090, 0xaca: 0x2096, 0xacb: 0x209c, - 0xacc: 0x20a2, 0xacd: 0x20a8, 0xace: 0x2733, 0xacf: 0x273c, 0xad0: 0x2745, 0xad1: 0x274e, - 0xad2: 0x2757, 0xad3: 0x2760, 0xad4: 0x2769, 0xad5: 0x2772, 0xad6: 0x277b, 0xad7: 0x278d, - 0xad8: 0x2796, 0xad9: 0x279f, 0xada: 0x27a8, 0xadb: 0x27b1, 0xadc: 0x2784, 0xadd: 0x2bb9, - 0xade: 0x2afa, 0xae0: 0x20ae, 0xae1: 0x20c6, 0xae2: 0x20ba, 0xae3: 0x210e, - 0xae4: 0x20cc, 0xae5: 0x20ea, 0xae6: 0x20b4, 0xae7: 0x20e4, 0xae8: 0x20c0, 0xae9: 0x20f6, - 0xaea: 0x2126, 0xaeb: 0x2144, 0xaec: 0x213e, 0xaed: 0x2132, 0xaee: 0x2180, 0xaef: 0x2114, - 0xaf0: 0x2120, 0xaf1: 0x2138, 0xaf2: 0x212c, 0xaf3: 0x2156, 0xaf4: 0x2102, 0xaf5: 0x214a, - 0xaf6: 0x2174, 0xaf7: 0x215c, 0xaf8: 0x20f0, 0xaf9: 0x20d2, 0xafa: 0x2108, 0xafb: 0x211a, - 0xafc: 0x2150, 0xafd: 0x20d8, 0xafe: 0x217a, 0xaff: 0x20fc, + 0xac0: 0x2184, 0xac1: 0x218a, 0xac2: 0x2190, 0xac3: 0x2196, 0xac4: 0x219c, 0xac5: 0x21a2, + 0xac6: 0x21a8, 0xac7: 0x21ae, 0xac8: 0x21b4, 0xac9: 0x21ba, 0xaca: 0x21c0, 0xacb: 0x21c6, + 0xacc: 0x21cc, 0xacd: 0x21d2, 0xace: 0x285d, 0xacf: 0x2866, 0xad0: 0x286f, 0xad1: 0x2878, + 0xad2: 0x2881, 0xad3: 0x288a, 0xad4: 0x2893, 0xad5: 0x289c, 0xad6: 0x28a5, 0xad7: 0x28b7, + 0xad8: 0x28c0, 0xad9: 0x28c9, 0xada: 0x28d2, 0xadb: 0x28db, 0xadc: 0x28ae, 0xadd: 0x2ce3, + 0xade: 0x2c24, 0xae0: 0x21d8, 0xae1: 0x21f0, 0xae2: 0x21e4, 0xae3: 0x2238, + 0xae4: 0x21f6, 0xae5: 0x2214, 0xae6: 0x21de, 0xae7: 0x220e, 0xae8: 0x21ea, 0xae9: 0x2220, + 0xaea: 0x2250, 0xaeb: 0x226e, 0xaec: 0x2268, 0xaed: 0x225c, 0xaee: 0x22aa, 0xaef: 0x223e, + 0xaf0: 0x224a, 0xaf1: 0x2262, 0xaf2: 0x2256, 0xaf3: 0x2280, 0xaf4: 0x222c, 0xaf5: 0x2274, + 0xaf6: 0x229e, 0xaf7: 0x2286, 0xaf8: 0x221a, 0xaf9: 0x21fc, 0xafa: 0x2232, 0xafb: 0x2244, + 0xafc: 0x227a, 0xafd: 0x2202, 0xafe: 0x22a4, 0xaff: 0x2226, // Block 0x2c, offset 0xb00 - 0xb00: 0x2162, 0xb01: 0x20de, 0xb02: 0x2168, 0xb03: 0x216e, 0xb04: 0x0932, 0xb05: 0x0b06, - 0xb06: 0x0caa, 0xb07: 0x10ca, - 0xb10: 0x1bca, 0xb11: 0x18ac, - 0xb12: 0x18af, 0xb13: 0x18b2, 0xb14: 0x18b5, 0xb15: 0x18b8, 0xb16: 0x18bb, 0xb17: 0x18be, - 0xb18: 0x18c1, 0xb19: 0x18c4, 0xb1a: 0x18cd, 0xb1b: 0x18d0, 0xb1c: 0x18d3, 0xb1d: 0x18d6, - 0xb1e: 0x18d9, 0xb1f: 0x18dc, 0xb20: 0x0316, 0xb21: 0x031e, 0xb22: 0x0322, 0xb23: 0x032a, - 0xb24: 0x032e, 0xb25: 0x0332, 0xb26: 0x033a, 0xb27: 0x0342, 0xb28: 0x0346, 0xb29: 0x034e, - 0xb2a: 0x0352, 0xb2b: 0x0356, 0xb2c: 0x035a, 0xb2d: 0x035e, 0xb2e: 0x2e2f, 0xb2f: 0x2e37, - 0xb30: 0x2e3f, 0xb31: 0x2e47, 0xb32: 0x2e4f, 0xb33: 0x2e57, 0xb34: 0x2e5f, 0xb35: 0x2e67, - 0xb36: 0x2e77, 0xb37: 0x2e7f, 0xb38: 0x2e87, 0xb39: 0x2e8f, 0xb3a: 0x2e97, 0xb3b: 0x2e9f, - 0xb3c: 0x2eea, 0xb3d: 0x2eb2, 0xb3e: 0x2e6f, + 0xb00: 0x228c, 0xb01: 0x2208, 0xb02: 0x2292, 0xb03: 0x2298, 0xb04: 0x0a2a, 0xb05: 0x0bfe, + 0xb06: 0x0da2, 0xb07: 0x11c2, + 0xb10: 0x1cf4, 0xb11: 0x19d6, + 0xb12: 0x19d9, 0xb13: 0x19dc, 0xb14: 0x19df, 0xb15: 0x19e2, 0xb16: 0x19e5, 0xb17: 0x19e8, + 0xb18: 0x19eb, 0xb19: 0x19ee, 0xb1a: 0x19f7, 0xb1b: 0x19fa, 0xb1c: 0x19fd, 0xb1d: 0x1a00, + 0xb1e: 0x1a03, 0xb1f: 0x1a06, 0xb20: 0x0406, 0xb21: 0x040e, 0xb22: 0x0412, 0xb23: 0x041a, + 0xb24: 0x041e, 0xb25: 0x0422, 0xb26: 0x042a, 0xb27: 0x0432, 0xb28: 0x0436, 0xb29: 0x043e, + 0xb2a: 0x0442, 0xb2b: 0x0446, 0xb2c: 0x044a, 0xb2d: 0x044e, 0xb2e: 0x46c3, 0xb2f: 0x46cb, + 0xb30: 0x46d3, 0xb31: 0x46db, 0xb32: 0x46e3, 0xb33: 0x46eb, 0xb34: 0x46f3, 0xb35: 0x46fb, + 0xb36: 0x470b, 0xb37: 0x4713, 0xb38: 0x471b, 0xb39: 0x4723, 0xb3a: 0x472b, 0xb3b: 0x4733, + 0xb3c: 0x2e42, 0xb3d: 0x2e0a, 0xb3e: 0x4703, // Block 0x2d, offset 0xb40 - 0xb40: 0x06c2, 0xb41: 0x071e, 0xb42: 0x06ce, 0xb43: 0x097e, 0xb44: 0x0722, 0xb45: 0x07b2, - 0xb46: 0x06ca, 0xb47: 0x07ae, 0xb48: 0x070e, 0xb49: 0x088a, 0xb4a: 0x0d0a, 0xb4b: 0x0e92, - 0xb4c: 0x0dda, 0xb4d: 0x0d1e, 0xb4e: 0x1462, 0xb4f: 0x098e, 0xb50: 0x0cd2, 0xb51: 0x0d4e, - 0xb52: 0x0d0e, 0xb53: 0x104e, 0xb54: 0x08fe, 0xb55: 0x0f06, 0xb56: 0x138a, 0xb57: 0x1062, - 0xb58: 0x0846, 0xb59: 0x1092, 0xb5a: 0x0f9e, 0xb5b: 0x0a1a, 0xb5c: 0x1412, 0xb5d: 0x0782, - 0xb5e: 0x08ae, 0xb5f: 0x0dfa, 0xb60: 0x152a, 0xb61: 0x0746, 0xb62: 0x07d6, 0xb63: 0x0d9e, - 0xb64: 0x06d2, 0xb65: 0x06ea, 0xb66: 0x06d6, 0xb67: 0x0ade, 0xb68: 0x08f2, 0xb69: 0x0882, - 0xb6a: 0x0a5a, 0xb6b: 0x0a4e, 0xb6c: 0x0fee, 0xb6d: 0x0742, 0xb6e: 0x139e, 0xb6f: 0x089e, - 0xb70: 0x09f6, 0xb71: 0x18df, 0xb72: 0x18e2, 0xb73: 0x18e5, 0xb74: 0x18e8, 0xb75: 0x18f1, - 0xb76: 0x18f4, 0xb77: 0x18f7, 0xb78: 0x18fa, 0xb79: 0x18fd, 0xb7a: 0x1900, 0xb7b: 0x1903, - 0xb7c: 0x1906, 0xb7d: 0x1909, 0xb7e: 0x190c, 0xb7f: 0x1915, + 0xb40: 0x07ba, 0xb41: 0x0816, 0xb42: 0x07c6, 0xb43: 0x0a76, 0xb44: 0x081a, 0xb45: 0x08aa, + 0xb46: 0x07c2, 0xb47: 0x08a6, 0xb48: 0x0806, 0xb49: 0x0982, 0xb4a: 0x0e02, 0xb4b: 0x0f8a, + 0xb4c: 0x0ed2, 0xb4d: 0x0e16, 0xb4e: 0x155a, 0xb4f: 0x0a86, 0xb50: 0x0dca, 0xb51: 0x0e46, + 0xb52: 0x0e06, 0xb53: 0x1146, 0xb54: 0x09f6, 0xb55: 0x0ffe, 0xb56: 0x1482, 0xb57: 0x115a, + 0xb58: 0x093e, 0xb59: 0x118a, 0xb5a: 0x1096, 0xb5b: 0x0b12, 0xb5c: 0x150a, 0xb5d: 0x087a, + 0xb5e: 0x09a6, 0xb5f: 0x0ef2, 0xb60: 0x1622, 0xb61: 0x083e, 0xb62: 0x08ce, 0xb63: 0x0e96, + 0xb64: 0x07ca, 0xb65: 0x07e2, 0xb66: 0x07ce, 0xb67: 0x0bd6, 0xb68: 0x09ea, 0xb69: 0x097a, + 0xb6a: 0x0b52, 0xb6b: 0x0b46, 0xb6c: 0x10e6, 0xb6d: 0x083a, 0xb6e: 0x1496, 0xb6f: 0x0996, + 0xb70: 0x0aee, 0xb71: 0x1a09, 0xb72: 0x1a0c, 0xb73: 0x1a0f, 0xb74: 0x1a12, 0xb75: 0x1a1b, + 0xb76: 0x1a1e, 0xb77: 0x1a21, 0xb78: 0x1a24, 0xb79: 0x1a27, 0xb7a: 0x1a2a, 0xb7b: 0x1a2d, + 0xb7c: 0x1a30, 0xb7d: 0x1a33, 0xb7e: 0x1a36, 0xb7f: 0x1a3f, // Block 0x2e, offset 0xb80 - 0xb80: 0x1ccc, 0xb81: 0x1cdb, 0xb82: 0x1cea, 0xb83: 0x1cf9, 0xb84: 0x1d08, 0xb85: 0x1d17, - 0xb86: 0x1d26, 0xb87: 0x1d35, 0xb88: 0x1d44, 0xb89: 0x2192, 0xb8a: 0x21a4, 0xb8b: 0x21b6, - 0xb8c: 0x1957, 0xb8d: 0x1c0a, 0xb8e: 0x19d8, 0xb8f: 0x1bae, 0xb90: 0x04ce, 0xb91: 0x04d6, - 0xb92: 0x04de, 0xb93: 0x04e6, 0xb94: 0x04ee, 0xb95: 0x04f2, 0xb96: 0x04f6, 0xb97: 0x04fa, - 0xb98: 0x04fe, 0xb99: 0x0502, 0xb9a: 0x0506, 0xb9b: 0x050a, 0xb9c: 0x050e, 0xb9d: 0x0512, - 0xb9e: 0x0516, 0xb9f: 0x051a, 0xba0: 0x051e, 0xba1: 0x0526, 0xba2: 0x052a, 0xba3: 0x052e, - 0xba4: 0x0532, 0xba5: 0x0536, 0xba6: 0x053a, 0xba7: 0x053e, 0xba8: 0x0542, 0xba9: 0x0546, - 0xbaa: 0x054a, 0xbab: 0x054e, 0xbac: 0x0552, 0xbad: 0x0556, 0xbae: 0x055a, 0xbaf: 0x055e, - 0xbb0: 0x0562, 0xbb1: 0x0566, 0xbb2: 0x056a, 0xbb3: 0x0572, 0xbb4: 0x057a, 0xbb5: 0x0582, - 0xbb6: 0x0586, 0xbb7: 0x058a, 0xbb8: 0x058e, 0xbb9: 0x0592, 0xbba: 0x0596, 0xbbb: 0x059a, - 0xbbc: 0x059e, 0xbbd: 0x05a2, 0xbbe: 0x05a6, 0xbbf: 0x2700, + 0xb80: 0x1df6, 0xb81: 0x1e05, 0xb82: 0x1e14, 0xb83: 0x1e23, 0xb84: 0x1e32, 0xb85: 0x1e41, + 0xb86: 0x1e50, 0xb87: 0x1e5f, 0xb88: 0x1e6e, 0xb89: 0x22bc, 0xb8a: 0x22ce, 0xb8b: 0x22e0, + 0xb8c: 0x1a81, 0xb8d: 0x1d34, 0xb8e: 0x1b02, 0xb8f: 0x1cd8, 0xb90: 0x05c6, 0xb91: 0x05ce, + 0xb92: 0x05d6, 0xb93: 0x05de, 0xb94: 0x05e6, 0xb95: 0x05ea, 0xb96: 0x05ee, 0xb97: 0x05f2, + 0xb98: 0x05f6, 0xb99: 0x05fa, 0xb9a: 0x05fe, 0xb9b: 0x0602, 0xb9c: 0x0606, 0xb9d: 0x060a, + 0xb9e: 0x060e, 0xb9f: 0x0612, 0xba0: 0x0616, 0xba1: 0x061e, 0xba2: 0x0622, 0xba3: 0x0626, + 0xba4: 0x062a, 0xba5: 0x062e, 0xba6: 0x0632, 0xba7: 0x0636, 0xba8: 0x063a, 0xba9: 0x063e, + 0xbaa: 0x0642, 0xbab: 0x0646, 0xbac: 0x064a, 0xbad: 0x064e, 0xbae: 0x0652, 0xbaf: 0x0656, + 0xbb0: 0x065a, 0xbb1: 0x065e, 0xbb2: 0x0662, 0xbb3: 0x066a, 0xbb4: 0x0672, 0xbb5: 0x067a, + 0xbb6: 0x067e, 0xbb7: 0x0682, 0xbb8: 0x0686, 0xbb9: 0x068a, 0xbba: 0x068e, 0xbbb: 0x0692, + 0xbbc: 0x0696, 0xbbd: 0x069a, 0xbbe: 0x069e, 0xbbf: 0x282a, // Block 0x2f, offset 0xbc0 - 0xbc0: 0x2b19, 0xbc1: 0x29b5, 0xbc2: 0x2b29, 0xbc3: 0x288d, 0xbc4: 0x2efb, 0xbc5: 0x2897, - 0xbc6: 0x28a1, 0xbc7: 0x2f3f, 0xbc8: 0x29c2, 0xbc9: 0x28ab, 0xbca: 0x28b5, 0xbcb: 0x28bf, - 0xbcc: 0x29e9, 0xbcd: 0x29f6, 0xbce: 0x29cf, 0xbcf: 0x29dc, 0xbd0: 0x2ec0, 0xbd1: 0x2a03, - 0xbd2: 0x2a10, 0xbd3: 0x2bcb, 0xbd4: 0x26c1, 0xbd5: 0x2bde, 0xbd6: 0x2bf1, 0xbd7: 0x2b39, - 0xbd8: 0x2a1d, 0xbd9: 0x2c04, 0xbda: 0x2c17, 0xbdb: 0x2a2a, 0xbdc: 0x28c9, 0xbdd: 0x28d3, - 0xbde: 0x2ece, 0xbdf: 0x2a37, 0xbe0: 0x2b49, 0xbe1: 0x2f0c, 0xbe2: 0x28dd, 0xbe3: 0x28e7, - 0xbe4: 0x2a44, 0xbe5: 0x28f1, 0xbe6: 0x28fb, 0xbe7: 0x26d6, 0xbe8: 0x26dd, 0xbe9: 0x2905, - 0xbea: 0x290f, 0xbeb: 0x2c2a, 0xbec: 0x2a51, 0xbed: 0x2b59, 0xbee: 0x2c3d, 0xbef: 0x2a5e, - 0xbf0: 0x2923, 0xbf1: 0x2919, 0xbf2: 0x2f53, 0xbf3: 0x2a6b, 0xbf4: 0x2c50, 0xbf5: 0x292d, - 0xbf6: 0x2b69, 0xbf7: 0x2937, 0xbf8: 0x2a85, 0xbf9: 0x2941, 0xbfa: 0x2a92, 0xbfb: 0x2f1d, - 0xbfc: 0x2a78, 0xbfd: 0x2b79, 0xbfe: 0x2a9f, 0xbff: 0x26e4, + 0xbc0: 0x2c43, 0xbc1: 0x2adf, 0xbc2: 0x2c53, 0xbc3: 0x29b7, 0xbc4: 0x2e53, 0xbc5: 0x29c1, + 0xbc6: 0x29cb, 0xbc7: 0x2e97, 0xbc8: 0x2aec, 0xbc9: 0x29d5, 0xbca: 0x29df, 0xbcb: 0x29e9, + 0xbcc: 0x2b13, 0xbcd: 0x2b20, 0xbce: 0x2af9, 0xbcf: 0x2b06, 0xbd0: 0x2e18, 0xbd1: 0x2b2d, + 0xbd2: 0x2b3a, 0xbd3: 0x2cf5, 0xbd4: 0x27eb, 0xbd5: 0x2d08, 0xbd6: 0x2d1b, 0xbd7: 0x2c63, + 0xbd8: 0x2b47, 0xbd9: 0x2d2e, 0xbda: 0x2d41, 0xbdb: 0x2b54, 0xbdc: 0x29f3, 0xbdd: 0x29fd, + 0xbde: 0x2e26, 0xbdf: 0x2b61, 0xbe0: 0x2c73, 0xbe1: 0x2e64, 0xbe2: 0x2a07, 0xbe3: 0x2a11, + 0xbe4: 0x2b6e, 0xbe5: 0x2a1b, 0xbe6: 0x2a25, 0xbe7: 0x2800, 0xbe8: 0x2807, 0xbe9: 0x2a2f, + 0xbea: 0x2a39, 0xbeb: 0x2d54, 0xbec: 0x2b7b, 0xbed: 0x2c83, 0xbee: 0x2d67, 0xbef: 0x2b88, + 0xbf0: 0x2a4d, 0xbf1: 0x2a43, 0xbf2: 0x2eab, 0xbf3: 0x2b95, 0xbf4: 0x2d7a, 0xbf5: 0x2a57, + 0xbf6: 0x2c93, 0xbf7: 0x2a61, 0xbf8: 0x2baf, 0xbf9: 0x2a6b, 0xbfa: 0x2bbc, 0xbfb: 0x2e75, + 0xbfc: 0x2ba2, 0xbfd: 0x2ca3, 0xbfe: 0x2bc9, 0xbff: 0x280e, // Block 0x30, offset 0xc00 - 0xc00: 0x2f2e, 0xc01: 0x294b, 0xc02: 0x2955, 0xc03: 0x2aac, 0xc04: 0x295f, 0xc05: 0x2969, - 0xc06: 0x2973, 0xc07: 0x2b89, 0xc08: 0x2ab9, 0xc09: 0x26eb, 0xc0a: 0x2c63, 0xc0b: 0x2ea7, - 0xc0c: 0x2b99, 0xc0d: 0x2ac6, 0xc0e: 0x2edc, 0xc0f: 0x297d, 0xc10: 0x2987, 0xc11: 0x2ad3, - 0xc12: 0x26f2, 0xc13: 0x2ae0, 0xc14: 0x2ba9, 0xc15: 0x26f9, 0xc16: 0x2c76, 0xc17: 0x2991, - 0xc18: 0x1cbd, 0xc19: 0x1cd1, 0xc1a: 0x1ce0, 0xc1b: 0x1cef, 0xc1c: 0x1cfe, 0xc1d: 0x1d0d, - 0xc1e: 0x1d1c, 0xc1f: 0x1d2b, 0xc20: 0x1d3a, 0xc21: 0x1d49, 0xc22: 0x2198, 0xc23: 0x21aa, - 0xc24: 0x21bc, 0xc25: 0x21c8, 0xc26: 0x21d4, 0xc27: 0x21e0, 0xc28: 0x21ec, 0xc29: 0x21f8, - 0xc2a: 0x2204, 0xc2b: 0x2210, 0xc2c: 0x224c, 0xc2d: 0x2258, 0xc2e: 0x2264, 0xc2f: 0x2270, - 0xc30: 0x227c, 0xc31: 0x1c1a, 0xc32: 0x19cc, 0xc33: 0x1939, 0xc34: 0x1bea, 0xc35: 0x1a4d, - 0xc36: 0x1a5c, 0xc37: 0x19d2, 0xc38: 0x1c02, 0xc39: 0x1c06, 0xc3a: 0x1963, 0xc3b: 0x270e, - 0xc3c: 0x271c, 0xc3d: 0x2707, 0xc3e: 0x2715, 0xc3f: 0x2aed, + 0xc00: 0x2e86, 0xc01: 0x2a75, 0xc02: 0x2a7f, 0xc03: 0x2bd6, 0xc04: 0x2a89, 0xc05: 0x2a93, + 0xc06: 0x2a9d, 0xc07: 0x2cb3, 0xc08: 0x2be3, 0xc09: 0x2815, 0xc0a: 0x2d8d, 0xc0b: 0x2dff, + 0xc0c: 0x2cc3, 0xc0d: 0x2bf0, 0xc0e: 0x2e34, 0xc0f: 0x2aa7, 0xc10: 0x2ab1, 0xc11: 0x2bfd, + 0xc12: 0x281c, 0xc13: 0x2c0a, 0xc14: 0x2cd3, 0xc15: 0x2823, 0xc16: 0x2da0, 0xc17: 0x2abb, + 0xc18: 0x1de7, 0xc19: 0x1dfb, 0xc1a: 0x1e0a, 0xc1b: 0x1e19, 0xc1c: 0x1e28, 0xc1d: 0x1e37, + 0xc1e: 0x1e46, 0xc1f: 0x1e55, 0xc20: 0x1e64, 0xc21: 0x1e73, 0xc22: 0x22c2, 0xc23: 0x22d4, + 0xc24: 0x22e6, 0xc25: 0x22f2, 0xc26: 0x22fe, 0xc27: 0x230a, 0xc28: 0x2316, 0xc29: 0x2322, + 0xc2a: 0x232e, 0xc2b: 0x233a, 0xc2c: 0x2376, 0xc2d: 0x2382, 0xc2e: 0x238e, 0xc2f: 0x239a, + 0xc30: 0x23a6, 0xc31: 0x1d44, 0xc32: 0x1af6, 0xc33: 0x1a63, 0xc34: 0x1d14, 0xc35: 0x1b77, + 0xc36: 0x1b86, 0xc37: 0x1afc, 0xc38: 0x1d2c, 0xc39: 0x1d30, 0xc3a: 0x1a8d, 0xc3b: 0x2838, + 0xc3c: 0x2846, 0xc3d: 0x2831, 0xc3e: 0x283f, 0xc3f: 0x2c17, // Block 0x31, offset 0xc40 - 0xc40: 0x1a50, 0xc41: 0x1a38, 0xc42: 0x1c66, 0xc43: 0x1a20, 0xc44: 0x19f9, 0xc45: 0x196c, - 0xc46: 0x197b, 0xc47: 0x194b, 0xc48: 0x1bf6, 0xc49: 0x1d58, 0xc4a: 0x1a53, 0xc4b: 0x1a3b, - 0xc4c: 0x1c6a, 0xc4d: 0x1c76, 0xc4e: 0x1a2c, 0xc4f: 0x1a02, 0xc50: 0x195a, 0xc51: 0x1c22, - 0xc52: 0x1bb6, 0xc53: 0x1ba2, 0xc54: 0x1bd2, 0xc55: 0x1c7a, 0xc56: 0x1a2f, 0xc57: 0x19cf, - 0xc58: 0x1a05, 0xc59: 0x19e4, 0xc5a: 0x1a47, 0xc5b: 0x1c7e, 0xc5c: 0x1a32, 0xc5d: 0x19c6, - 0xc5e: 0x1a08, 0xc5f: 0x1c42, 0xc60: 0x1bfa, 0xc61: 0x1a1a, 0xc62: 0x1c2a, 0xc63: 0x1c46, - 0xc64: 0x1bfe, 0xc65: 0x1a1d, 0xc66: 0x1c2e, 0xc67: 0x22ee, 0xc68: 0x2302, 0xc69: 0x199c, - 0xc6a: 0x1c26, 0xc6b: 0x1bba, 0xc6c: 0x1ba6, 0xc6d: 0x1c4e, 0xc6e: 0x2723, 0xc6f: 0x27ba, - 0xc70: 0x1a5f, 0xc71: 0x1a4a, 0xc72: 0x1c82, 0xc73: 0x1a35, 0xc74: 0x1a56, 0xc75: 0x1a3e, - 0xc76: 0x1c6e, 0xc77: 0x1a23, 0xc78: 0x19fc, 0xc79: 0x1987, 0xc7a: 0x1a59, 0xc7b: 0x1a41, - 0xc7c: 0x1c72, 0xc7d: 0x1a26, 0xc7e: 0x19ff, 0xc7f: 0x198a, + 0xc40: 0x1b7a, 0xc41: 0x1b62, 0xc42: 0x1d90, 0xc43: 0x1b4a, 0xc44: 0x1b23, 0xc45: 0x1a96, + 0xc46: 0x1aa5, 0xc47: 0x1a75, 0xc48: 0x1d20, 0xc49: 0x1e82, 0xc4a: 0x1b7d, 0xc4b: 0x1b65, + 0xc4c: 0x1d94, 0xc4d: 0x1da0, 0xc4e: 0x1b56, 0xc4f: 0x1b2c, 0xc50: 0x1a84, 0xc51: 0x1d4c, + 0xc52: 0x1ce0, 0xc53: 0x1ccc, 0xc54: 0x1cfc, 0xc55: 0x1da4, 0xc56: 0x1b59, 0xc57: 0x1af9, + 0xc58: 0x1b2f, 0xc59: 0x1b0e, 0xc5a: 0x1b71, 0xc5b: 0x1da8, 0xc5c: 0x1b5c, 0xc5d: 0x1af0, + 0xc5e: 0x1b32, 0xc5f: 0x1d6c, 0xc60: 0x1d24, 0xc61: 0x1b44, 0xc62: 0x1d54, 0xc63: 0x1d70, + 0xc64: 0x1d28, 0xc65: 0x1b47, 0xc66: 0x1d58, 0xc67: 0x2418, 0xc68: 0x242c, 0xc69: 0x1ac6, + 0xc6a: 0x1d50, 0xc6b: 0x1ce4, 0xc6c: 0x1cd0, 0xc6d: 0x1d78, 0xc6e: 0x284d, 0xc6f: 0x28e4, + 0xc70: 0x1b89, 0xc71: 0x1b74, 0xc72: 0x1dac, 0xc73: 0x1b5f, 0xc74: 0x1b80, 0xc75: 0x1b68, + 0xc76: 0x1d98, 0xc77: 0x1b4d, 0xc78: 0x1b26, 0xc79: 0x1ab1, 0xc7a: 0x1b83, 0xc7b: 0x1b6b, + 0xc7c: 0x1d9c, 0xc7d: 0x1b50, 0xc7e: 0x1b29, 0xc7f: 0x1ab4, // Block 0x32, offset 0xc80 - 0xc80: 0x1c32, 0xc81: 0x1bbe, 0xc82: 0x1d53, 0xc83: 0x193c, 0xc84: 0x19c0, 0xc85: 0x19c3, - 0xc86: 0x22fb, 0xc87: 0x1b9a, 0xc88: 0x19c9, 0xc89: 0x194e, 0xc8a: 0x19e7, 0xc8b: 0x1951, - 0xc8c: 0x19f0, 0xc8d: 0x196f, 0xc8e: 0x1972, 0xc8f: 0x1a0b, 0xc90: 0x1a11, 0xc91: 0x1a14, - 0xc92: 0x1c36, 0xc93: 0x1a17, 0xc94: 0x1a29, 0xc95: 0x1c3e, 0xc96: 0x1c4a, 0xc97: 0x1996, - 0xc98: 0x1d5d, 0xc99: 0x1bc2, 0xc9a: 0x1999, 0xc9b: 0x1a62, 0xc9c: 0x19ab, 0xc9d: 0x19ba, - 0xc9e: 0x22e8, 0xc9f: 0x22e2, 0xca0: 0x1cc7, 0xca1: 0x1cd6, 0xca2: 0x1ce5, 0xca3: 0x1cf4, - 0xca4: 0x1d03, 0xca5: 0x1d12, 0xca6: 0x1d21, 0xca7: 0x1d30, 0xca8: 0x1d3f, 0xca9: 0x218c, - 0xcaa: 0x219e, 0xcab: 0x21b0, 0xcac: 0x21c2, 0xcad: 0x21ce, 0xcae: 0x21da, 0xcaf: 0x21e6, - 0xcb0: 0x21f2, 0xcb1: 0x21fe, 0xcb2: 0x220a, 0xcb3: 0x2246, 0xcb4: 0x2252, 0xcb5: 0x225e, - 0xcb6: 0x226a, 0xcb7: 0x2276, 0xcb8: 0x2282, 0xcb9: 0x2288, 0xcba: 0x228e, 0xcbb: 0x2294, - 0xcbc: 0x229a, 0xcbd: 0x22ac, 0xcbe: 0x22b2, 0xcbf: 0x1c16, + 0xc80: 0x1d5c, 0xc81: 0x1ce8, 0xc82: 0x1e7d, 0xc83: 0x1a66, 0xc84: 0x1aea, 0xc85: 0x1aed, + 0xc86: 0x2425, 0xc87: 0x1cc4, 0xc88: 0x1af3, 0xc89: 0x1a78, 0xc8a: 0x1b11, 0xc8b: 0x1a7b, + 0xc8c: 0x1b1a, 0xc8d: 0x1a99, 0xc8e: 0x1a9c, 0xc8f: 0x1b35, 0xc90: 0x1b3b, 0xc91: 0x1b3e, + 0xc92: 0x1d60, 0xc93: 0x1b41, 0xc94: 0x1b53, 0xc95: 0x1d68, 0xc96: 0x1d74, 0xc97: 0x1ac0, + 0xc98: 0x1e87, 0xc99: 0x1cec, 0xc9a: 0x1ac3, 0xc9b: 0x1b8c, 0xc9c: 0x1ad5, 0xc9d: 0x1ae4, + 0xc9e: 0x2412, 0xc9f: 0x240c, 0xca0: 0x1df1, 0xca1: 0x1e00, 0xca2: 0x1e0f, 0xca3: 0x1e1e, + 0xca4: 0x1e2d, 0xca5: 0x1e3c, 0xca6: 0x1e4b, 0xca7: 0x1e5a, 0xca8: 0x1e69, 0xca9: 0x22b6, + 0xcaa: 0x22c8, 0xcab: 0x22da, 0xcac: 0x22ec, 0xcad: 0x22f8, 0xcae: 0x2304, 0xcaf: 0x2310, + 0xcb0: 0x231c, 0xcb1: 0x2328, 0xcb2: 0x2334, 0xcb3: 0x2370, 0xcb4: 0x237c, 0xcb5: 0x2388, + 0xcb6: 0x2394, 0xcb7: 0x23a0, 0xcb8: 0x23ac, 0xcb9: 0x23b2, 0xcba: 0x23b8, 0xcbb: 0x23be, + 0xcbc: 0x23c4, 0xcbd: 0x23d6, 0xcbe: 0x23dc, 0xcbf: 0x1d40, // Block 0x33, offset 0xcc0 - 0xcc0: 0x137a, 0xcc1: 0x0cfe, 0xcc2: 0x13d6, 0xcc3: 0x13a2, 0xcc4: 0x0e5a, 0xcc5: 0x06ee, - 0xcc6: 0x08e2, 0xcc7: 0x162e, 0xcc8: 0x162e, 0xcc9: 0x0a0e, 0xcca: 0x1462, 0xccb: 0x0946, - 0xccc: 0x0a0a, 0xccd: 0x0bf2, 0xcce: 0x0fd2, 0xccf: 0x1162, 0xcd0: 0x129a, 0xcd1: 0x12d6, - 0xcd2: 0x130a, 0xcd3: 0x141e, 0xcd4: 0x0d76, 0xcd5: 0x0e02, 0xcd6: 0x0eae, 0xcd7: 0x0f46, - 0xcd8: 0x1262, 0xcd9: 0x144a, 0xcda: 0x1576, 0xcdb: 0x0712, 0xcdc: 0x08b6, 0xcdd: 0x0d8a, - 0xcde: 0x0ed2, 0xcdf: 0x1296, 0xce0: 0x15c6, 0xce1: 0x0ab6, 0xce2: 0x0e7a, 0xce3: 0x1286, - 0xce4: 0x131a, 0xce5: 0x0c26, 0xce6: 0x11be, 0xce7: 0x12e2, 0xce8: 0x0b22, 0xce9: 0x0d12, - 0xcea: 0x0e1a, 0xceb: 0x0f1e, 0xcec: 0x142a, 0xced: 0x0752, 0xcee: 0x07ea, 0xcef: 0x0856, - 0xcf0: 0x0c8e, 0xcf1: 0x0d82, 0xcf2: 0x0ece, 0xcf3: 0x0ff2, 0xcf4: 0x117a, 0xcf5: 0x128e, - 0xcf6: 0x12a6, 0xcf7: 0x13ca, 0xcf8: 0x14f2, 0xcf9: 0x15a6, 0xcfa: 0x15c2, 0xcfb: 0x102e, - 0xcfc: 0x106e, 0xcfd: 0x1126, 0xcfe: 0x1246, 0xcff: 0x147e, + 0xcc0: 0x1472, 0xcc1: 0x0df6, 0xcc2: 0x14ce, 0xcc3: 0x149a, 0xcc4: 0x0f52, 0xcc5: 0x07e6, + 0xcc6: 0x09da, 0xcc7: 0x1726, 0xcc8: 0x1726, 0xcc9: 0x0b06, 0xcca: 0x155a, 0xccb: 0x0a3e, + 0xccc: 0x0b02, 0xccd: 0x0cea, 0xcce: 0x10ca, 0xccf: 0x125a, 0xcd0: 0x1392, 0xcd1: 0x13ce, + 0xcd2: 0x1402, 0xcd3: 0x1516, 0xcd4: 0x0e6e, 0xcd5: 0x0efa, 0xcd6: 0x0fa6, 0xcd7: 0x103e, + 0xcd8: 0x135a, 0xcd9: 0x1542, 0xcda: 0x166e, 0xcdb: 0x080a, 0xcdc: 0x09ae, 0xcdd: 0x0e82, + 0xcde: 0x0fca, 0xcdf: 0x138e, 0xce0: 0x16be, 0xce1: 0x0bae, 0xce2: 0x0f72, 0xce3: 0x137e, + 0xce4: 0x1412, 0xce5: 0x0d1e, 0xce6: 0x12b6, 0xce7: 0x13da, 0xce8: 0x0c1a, 0xce9: 0x0e0a, + 0xcea: 0x0f12, 0xceb: 0x1016, 0xcec: 0x1522, 0xced: 0x084a, 0xcee: 0x08e2, 0xcef: 0x094e, + 0xcf0: 0x0d86, 0xcf1: 0x0e7a, 0xcf2: 0x0fc6, 0xcf3: 0x10ea, 0xcf4: 0x1272, 0xcf5: 0x1386, + 0xcf6: 0x139e, 0xcf7: 0x14c2, 0xcf8: 0x15ea, 0xcf9: 0x169e, 0xcfa: 0x16ba, 0xcfb: 0x1126, + 0xcfc: 0x1166, 0xcfd: 0x121e, 0xcfe: 0x133e, 0xcff: 0x1576, // Block 0x34, offset 0xd00 - 0xd00: 0x15ce, 0xd01: 0x134e, 0xd02: 0x09ca, 0xd03: 0x0b3e, 0xd04: 0x10de, 0xd05: 0x119e, - 0xd06: 0x0f02, 0xd07: 0x1036, 0xd08: 0x139a, 0xd09: 0x14ea, 0xd0a: 0x09c6, 0xd0b: 0x0a92, - 0xd0c: 0x0d7a, 0xd0d: 0x0e2e, 0xd0e: 0x0e62, 0xd0f: 0x1116, 0xd10: 0x113e, 0xd11: 0x14aa, - 0xd12: 0x0852, 0xd13: 0x11aa, 0xd14: 0x07f6, 0xd15: 0x07f2, 0xd16: 0x109a, 0xd17: 0x112a, - 0xd18: 0x125e, 0xd19: 0x14b2, 0xd1a: 0x136a, 0xd1b: 0x0c2a, 0xd1c: 0x0d76, 0xd1d: 0x135a, - 0xd1e: 0x06fa, 0xd1f: 0x0a66, 0xd20: 0x0b96, 0xd21: 0x0f32, 0xd22: 0x0fb2, 0xd23: 0x0876, - 0xd24: 0x103e, 0xd25: 0x0762, 0xd26: 0x0b7a, 0xd27: 0x06da, 0xd28: 0x0dee, 0xd29: 0x0ca6, - 0xd2a: 0x1112, 0xd2b: 0x08ca, 0xd2c: 0x09b6, 0xd2d: 0x0ffe, 0xd2e: 0x1266, 0xd2f: 0x133e, - 0xd30: 0x0dba, 0xd31: 0x13fa, 0xd32: 0x0de6, 0xd33: 0x0c3a, 0xd34: 0x121e, 0xd35: 0x0c5a, - 0xd36: 0x0fae, 0xd37: 0x072e, 0xd38: 0x07aa, 0xd39: 0x07ee, 0xd3a: 0x0d56, 0xd3b: 0x10fe, - 0xd3c: 0x11f6, 0xd3d: 0x134a, 0xd3e: 0x145e, 0xd3f: 0x085e, + 0xd00: 0x16c6, 0xd01: 0x1446, 0xd02: 0x0ac2, 0xd03: 0x0c36, 0xd04: 0x11d6, 0xd05: 0x1296, + 0xd06: 0x0ffa, 0xd07: 0x112e, 0xd08: 0x1492, 0xd09: 0x15e2, 0xd0a: 0x0abe, 0xd0b: 0x0b8a, + 0xd0c: 0x0e72, 0xd0d: 0x0f26, 0xd0e: 0x0f5a, 0xd0f: 0x120e, 0xd10: 0x1236, 0xd11: 0x15a2, + 0xd12: 0x094a, 0xd13: 0x12a2, 0xd14: 0x08ee, 0xd15: 0x08ea, 0xd16: 0x1192, 0xd17: 0x1222, + 0xd18: 0x1356, 0xd19: 0x15aa, 0xd1a: 0x1462, 0xd1b: 0x0d22, 0xd1c: 0x0e6e, 0xd1d: 0x1452, + 0xd1e: 0x07f2, 0xd1f: 0x0b5e, 0xd20: 0x0c8e, 0xd21: 0x102a, 0xd22: 0x10aa, 0xd23: 0x096e, + 0xd24: 0x1136, 0xd25: 0x085a, 0xd26: 0x0c72, 0xd27: 0x07d2, 0xd28: 0x0ee6, 0xd29: 0x0d9e, + 0xd2a: 0x120a, 0xd2b: 0x09c2, 0xd2c: 0x0aae, 0xd2d: 0x10f6, 0xd2e: 0x135e, 0xd2f: 0x1436, + 0xd30: 0x0eb2, 0xd31: 0x14f2, 0xd32: 0x0ede, 0xd33: 0x0d32, 0xd34: 0x1316, 0xd35: 0x0d52, + 0xd36: 0x10a6, 0xd37: 0x0826, 0xd38: 0x08a2, 0xd39: 0x08e6, 0xd3a: 0x0e4e, 0xd3b: 0x11f6, + 0xd3c: 0x12ee, 0xd3d: 0x1442, 0xd3e: 0x1556, 0xd3f: 0x0956, // Block 0x35, offset 0xd40 - 0xd40: 0x0912, 0xd41: 0x0a1a, 0xd42: 0x0b32, 0xd43: 0x0cc2, 0xd44: 0x0e7e, 0xd45: 0x1042, - 0xd46: 0x149a, 0xd47: 0x157e, 0xd48: 0x15d2, 0xd49: 0x15ea, 0xd4a: 0x083a, 0xd4b: 0x0cf6, - 0xd4c: 0x0da6, 0xd4d: 0x13ee, 0xd4e: 0x0afe, 0xd4f: 0x0bda, 0xd50: 0x0bf6, 0xd51: 0x0c86, - 0xd52: 0x0e6e, 0xd53: 0x0eba, 0xd54: 0x0f6a, 0xd55: 0x108e, 0xd56: 0x1132, 0xd57: 0x1196, - 0xd58: 0x13de, 0xd59: 0x126e, 0xd5a: 0x1406, 0xd5b: 0x1482, 0xd5c: 0x0812, 0xd5d: 0x083e, - 0xd5e: 0x0926, 0xd5f: 0x0eaa, 0xd60: 0x12f6, 0xd61: 0x133e, 0xd62: 0x0b1e, 0xd63: 0x0b8e, - 0xd64: 0x0c52, 0xd65: 0x0db2, 0xd66: 0x10da, 0xd67: 0x0f26, 0xd68: 0x073e, 0xd69: 0x0982, - 0xd6a: 0x0a66, 0xd6b: 0x0aca, 0xd6c: 0x0b9a, 0xd6d: 0x0f42, 0xd6e: 0x0f5e, 0xd6f: 0x116e, - 0xd70: 0x118e, 0xd71: 0x1466, 0xd72: 0x14e6, 0xd73: 0x14f6, 0xd74: 0x1532, 0xd75: 0x0756, - 0xd76: 0x1082, 0xd77: 0x1452, 0xd78: 0x14ce, 0xd79: 0x0bb2, 0xd7a: 0x071a, 0xd7b: 0x077a, - 0xd7c: 0x0a6a, 0xd7d: 0x0a8a, 0xd7e: 0x0cb2, 0xd7f: 0x0d76, + 0xd40: 0x0a0a, 0xd41: 0x0b12, 0xd42: 0x0c2a, 0xd43: 0x0dba, 0xd44: 0x0f76, 0xd45: 0x113a, + 0xd46: 0x1592, 0xd47: 0x1676, 0xd48: 0x16ca, 0xd49: 0x16e2, 0xd4a: 0x0932, 0xd4b: 0x0dee, + 0xd4c: 0x0e9e, 0xd4d: 0x14e6, 0xd4e: 0x0bf6, 0xd4f: 0x0cd2, 0xd50: 0x0cee, 0xd51: 0x0d7e, + 0xd52: 0x0f66, 0xd53: 0x0fb2, 0xd54: 0x1062, 0xd55: 0x1186, 0xd56: 0x122a, 0xd57: 0x128e, + 0xd58: 0x14d6, 0xd59: 0x1366, 0xd5a: 0x14fe, 0xd5b: 0x157a, 0xd5c: 0x090a, 0xd5d: 0x0936, + 0xd5e: 0x0a1e, 0xd5f: 0x0fa2, 0xd60: 0x13ee, 0xd61: 0x1436, 0xd62: 0x0c16, 0xd63: 0x0c86, + 0xd64: 0x0d4a, 0xd65: 0x0eaa, 0xd66: 0x11d2, 0xd67: 0x101e, 0xd68: 0x0836, 0xd69: 0x0a7a, + 0xd6a: 0x0b5e, 0xd6b: 0x0bc2, 0xd6c: 0x0c92, 0xd6d: 0x103a, 0xd6e: 0x1056, 0xd6f: 0x1266, + 0xd70: 0x1286, 0xd71: 0x155e, 0xd72: 0x15de, 0xd73: 0x15ee, 0xd74: 0x162a, 0xd75: 0x084e, + 0xd76: 0x117a, 0xd77: 0x154a, 0xd78: 0x15c6, 0xd79: 0x0caa, 0xd7a: 0x0812, 0xd7b: 0x0872, + 0xd7c: 0x0b62, 0xd7d: 0x0b82, 0xd7e: 0x0daa, 0xd7f: 0x0e6e, // Block 0x36, offset 0xd80 - 0xd80: 0x0ec6, 0xd81: 0x0fce, 0xd82: 0x127a, 0xd83: 0x141a, 0xd84: 0x1626, 0xd85: 0x0ce6, - 0xd86: 0x14a6, 0xd87: 0x0836, 0xd88: 0x0d32, 0xd89: 0x0d3e, 0xd8a: 0x0e12, 0xd8b: 0x0e4a, - 0xd8c: 0x0f4e, 0xd8d: 0x0faa, 0xd8e: 0x102a, 0xd8f: 0x110e, 0xd90: 0x153e, 0xd91: 0x07b2, - 0xd92: 0x0c06, 0xd93: 0x14b6, 0xd94: 0x076a, 0xd95: 0x0aae, 0xd96: 0x0e32, 0xd97: 0x13e2, - 0xd98: 0x0b6a, 0xd99: 0x0bba, 0xd9a: 0x0d46, 0xd9b: 0x0f32, 0xd9c: 0x14be, 0xd9d: 0x081a, - 0xd9e: 0x0902, 0xd9f: 0x0a9a, 0xda0: 0x0cd6, 0xda1: 0x0d22, 0xda2: 0x0d62, 0xda3: 0x0df6, - 0xda4: 0x0f4a, 0xda5: 0x0fbe, 0xda6: 0x115a, 0xda7: 0x12fa, 0xda8: 0x1306, 0xda9: 0x145a, - 0xdaa: 0x14da, 0xdab: 0x0886, 0xdac: 0x0e4e, 0xdad: 0x0906, 0xdae: 0x0eca, 0xdaf: 0x0f6e, - 0xdb0: 0x128a, 0xdb1: 0x14c2, 0xdb2: 0x15ae, 0xdb3: 0x15d6, 0xdb4: 0x0d3a, 0xdb5: 0x0e2a, - 0xdb6: 0x11c6, 0xdb7: 0x10ba, 0xdb8: 0x10c6, 0xdb9: 0x10ea, 0xdba: 0x0f1a, 0xdbb: 0x0ea2, - 0xdbc: 0x1366, 0xdbd: 0x0736, 0xdbe: 0x122e, 0xdbf: 0x081e, + 0xd80: 0x0fbe, 0xd81: 0x10c6, 0xd82: 0x1372, 0xd83: 0x1512, 0xd84: 0x171e, 0xd85: 0x0dde, + 0xd86: 0x159e, 0xd87: 0x092e, 0xd88: 0x0e2a, 0xd89: 0x0e36, 0xd8a: 0x0f0a, 0xd8b: 0x0f42, + 0xd8c: 0x1046, 0xd8d: 0x10a2, 0xd8e: 0x1122, 0xd8f: 0x1206, 0xd90: 0x1636, 0xd91: 0x08aa, + 0xd92: 0x0cfe, 0xd93: 0x15ae, 0xd94: 0x0862, 0xd95: 0x0ba6, 0xd96: 0x0f2a, 0xd97: 0x14da, + 0xd98: 0x0c62, 0xd99: 0x0cb2, 0xd9a: 0x0e3e, 0xd9b: 0x102a, 0xd9c: 0x15b6, 0xd9d: 0x0912, + 0xd9e: 0x09fa, 0xd9f: 0x0b92, 0xda0: 0x0dce, 0xda1: 0x0e1a, 0xda2: 0x0e5a, 0xda3: 0x0eee, + 0xda4: 0x1042, 0xda5: 0x10b6, 0xda6: 0x1252, 0xda7: 0x13f2, 0xda8: 0x13fe, 0xda9: 0x1552, + 0xdaa: 0x15d2, 0xdab: 0x097e, 0xdac: 0x0f46, 0xdad: 0x09fe, 0xdae: 0x0fc2, 0xdaf: 0x1066, + 0xdb0: 0x1382, 0xdb1: 0x15ba, 0xdb2: 0x16a6, 0xdb3: 0x16ce, 0xdb4: 0x0e32, 0xdb5: 0x0f22, + 0xdb6: 0x12be, 0xdb7: 0x11b2, 0xdb8: 0x11be, 0xdb9: 0x11e2, 0xdba: 0x1012, 0xdbb: 0x0f9a, + 0xdbc: 0x145e, 0xdbd: 0x082e, 0xdbe: 0x1326, 0xdbf: 0x0916, // Block 0x37, offset 0xdc0 - 0xdc0: 0x080e, 0xdc1: 0x0b0e, 0xdc2: 0x0c2e, 0xdc3: 0x10f6, 0xdc4: 0x0a56, 0xdc5: 0x0e06, - 0xdc6: 0x0cf2, 0xdc7: 0x13ea, 0xdc8: 0x12ea, 0xdc9: 0x14ae, 0xdca: 0x1326, 0xdcb: 0x0b2a, - 0xdcc: 0x078a, 0xdcd: 0x095e, 0xdd0: 0x09b2, - 0xdd2: 0x0ce2, 0xdd5: 0x07fa, 0xdd6: 0x0f22, 0xdd7: 0x0fe6, - 0xdd8: 0x104a, 0xdd9: 0x1066, 0xdda: 0x106a, 0xddb: 0x107e, 0xddc: 0x14fe, 0xddd: 0x10ee, - 0xdde: 0x1172, 0xde0: 0x1292, 0xde2: 0x1356, - 0xde5: 0x140a, 0xde6: 0x1436, - 0xdea: 0x1552, 0xdeb: 0x1556, 0xdec: 0x155a, 0xded: 0x15be, 0xdee: 0x142e, 0xdef: 0x14ca, - 0xdf0: 0x075a, 0xdf1: 0x077e, 0xdf2: 0x0792, 0xdf3: 0x084e, 0xdf4: 0x085a, 0xdf5: 0x089a, - 0xdf6: 0x094e, 0xdf7: 0x096a, 0xdf8: 0x0972, 0xdf9: 0x09ae, 0xdfa: 0x09ba, 0xdfb: 0x0a96, - 0xdfc: 0x0a9e, 0xdfd: 0x0ba6, 0xdfe: 0x0bce, 0xdff: 0x0bd6, + 0xdc0: 0x0906, 0xdc1: 0x0c06, 0xdc2: 0x0d26, 0xdc3: 0x11ee, 0xdc4: 0x0b4e, 0xdc5: 0x0efe, + 0xdc6: 0x0dea, 0xdc7: 0x14e2, 0xdc8: 0x13e2, 0xdc9: 0x15a6, 0xdca: 0x141e, 0xdcb: 0x0c22, + 0xdcc: 0x0882, 0xdcd: 0x0a56, 0xdd0: 0x0aaa, + 0xdd2: 0x0dda, 0xdd5: 0x08f2, 0xdd6: 0x101a, 0xdd7: 0x10de, + 0xdd8: 0x1142, 0xdd9: 0x115e, 0xdda: 0x1162, 0xddb: 0x1176, 0xddc: 0x15f6, 0xddd: 0x11e6, + 0xdde: 0x126a, 0xde0: 0x138a, 0xde2: 0x144e, + 0xde5: 0x1502, 0xde6: 0x152e, + 0xdea: 0x164a, 0xdeb: 0x164e, 0xdec: 0x1652, 0xded: 0x16b6, 0xdee: 0x1526, 0xdef: 0x15c2, + 0xdf0: 0x0852, 0xdf1: 0x0876, 0xdf2: 0x088a, 0xdf3: 0x0946, 0xdf4: 0x0952, 0xdf5: 0x0992, + 0xdf6: 0x0a46, 0xdf7: 0x0a62, 0xdf8: 0x0a6a, 0xdf9: 0x0aa6, 0xdfa: 0x0ab2, 0xdfb: 0x0b8e, + 0xdfc: 0x0b96, 0xdfd: 0x0c9e, 0xdfe: 0x0cc6, 0xdff: 0x0cce, // Block 0x38, offset 0xe00 - 0xe00: 0x0bee, 0xe01: 0x0c9a, 0xe02: 0x0cca, 0xe03: 0x0cea, 0xe04: 0x0d5a, 0xe05: 0x0e1e, - 0xe06: 0x0e3a, 0xe07: 0x0e6a, 0xe08: 0x0ebe, 0xe09: 0x0ede, 0xe0a: 0x0f52, 0xe0b: 0x1032, - 0xe0c: 0x104e, 0xe0d: 0x1056, 0xe0e: 0x1052, 0xe0f: 0x105a, 0xe10: 0x105e, 0xe11: 0x1062, - 0xe12: 0x1076, 0xe13: 0x107a, 0xe14: 0x109e, 0xe15: 0x10b2, 0xe16: 0x10ce, 0xe17: 0x1132, - 0xe18: 0x113a, 0xe19: 0x1142, 0xe1a: 0x1156, 0xe1b: 0x117e, 0xe1c: 0x11ce, 0xe1d: 0x1202, - 0xe1e: 0x1202, 0xe1f: 0x126a, 0xe20: 0x1312, 0xe21: 0x132a, 0xe22: 0x135e, 0xe23: 0x1362, - 0xe24: 0x13a6, 0xe25: 0x13aa, 0xe26: 0x1402, 0xe27: 0x140a, 0xe28: 0x14de, 0xe29: 0x1522, - 0xe2a: 0x153a, 0xe2b: 0x0b9e, 0xe2c: 0x1721, 0xe2d: 0x11e6, - 0xe30: 0x06e2, 0xe31: 0x07e6, 0xe32: 0x07a6, 0xe33: 0x074e, 0xe34: 0x078e, 0xe35: 0x07ba, - 0xe36: 0x084a, 0xe37: 0x0866, 0xe38: 0x094e, 0xe39: 0x093a, 0xe3a: 0x094a, 0xe3b: 0x0966, - 0xe3c: 0x09b2, 0xe3d: 0x09c2, 0xe3e: 0x0a06, 0xe3f: 0x0a12, + 0xe00: 0x0ce6, 0xe01: 0x0d92, 0xe02: 0x0dc2, 0xe03: 0x0de2, 0xe04: 0x0e52, 0xe05: 0x0f16, + 0xe06: 0x0f32, 0xe07: 0x0f62, 0xe08: 0x0fb6, 0xe09: 0x0fd6, 0xe0a: 0x104a, 0xe0b: 0x112a, + 0xe0c: 0x1146, 0xe0d: 0x114e, 0xe0e: 0x114a, 0xe0f: 0x1152, 0xe10: 0x1156, 0xe11: 0x115a, + 0xe12: 0x116e, 0xe13: 0x1172, 0xe14: 0x1196, 0xe15: 0x11aa, 0xe16: 0x11c6, 0xe17: 0x122a, + 0xe18: 0x1232, 0xe19: 0x123a, 0xe1a: 0x124e, 0xe1b: 0x1276, 0xe1c: 0x12c6, 0xe1d: 0x12fa, + 0xe1e: 0x12fa, 0xe1f: 0x1362, 0xe20: 0x140a, 0xe21: 0x1422, 0xe22: 0x1456, 0xe23: 0x145a, + 0xe24: 0x149e, 0xe25: 0x14a2, 0xe26: 0x14fa, 0xe27: 0x1502, 0xe28: 0x15d6, 0xe29: 0x161a, + 0xe2a: 0x1632, 0xe2b: 0x0c96, 0xe2c: 0x184b, 0xe2d: 0x12de, + 0xe30: 0x07da, 0xe31: 0x08de, 0xe32: 0x089e, 0xe33: 0x0846, 0xe34: 0x0886, 0xe35: 0x08b2, + 0xe36: 0x0942, 0xe37: 0x095e, 0xe38: 0x0a46, 0xe39: 0x0a32, 0xe3a: 0x0a42, 0xe3b: 0x0a5e, + 0xe3c: 0x0aaa, 0xe3d: 0x0aba, 0xe3e: 0x0afe, 0xe3f: 0x0b0a, // Block 0x39, offset 0xe40 - 0xe40: 0x0a2e, 0xe41: 0x0a3e, 0xe42: 0x0b26, 0xe43: 0x0b2e, 0xe44: 0x0b5e, 0xe45: 0x0b7e, - 0xe46: 0x0bae, 0xe47: 0x0bc6, 0xe48: 0x0bb6, 0xe49: 0x0bd6, 0xe4a: 0x0bca, 0xe4b: 0x0bee, - 0xe4c: 0x0c0a, 0xe4d: 0x0c62, 0xe4e: 0x0c6e, 0xe4f: 0x0c76, 0xe50: 0x0c9e, 0xe51: 0x0ce2, - 0xe52: 0x0d12, 0xe53: 0x0d16, 0xe54: 0x0d2a, 0xe55: 0x0daa, 0xe56: 0x0dba, 0xe57: 0x0e12, - 0xe58: 0x0e5e, 0xe59: 0x0e56, 0xe5a: 0x0e6a, 0xe5b: 0x0e86, 0xe5c: 0x0ebe, 0xe5d: 0x1016, - 0xe5e: 0x0ee2, 0xe5f: 0x0f16, 0xe60: 0x0f22, 0xe61: 0x0f62, 0xe62: 0x0f7e, 0xe63: 0x0fa2, - 0xe64: 0x0fc6, 0xe65: 0x0fca, 0xe66: 0x0fe6, 0xe67: 0x0fea, 0xe68: 0x0ffa, 0xe69: 0x100e, - 0xe6a: 0x100a, 0xe6b: 0x103a, 0xe6c: 0x10b6, 0xe6d: 0x10ce, 0xe6e: 0x10e6, 0xe6f: 0x111e, - 0xe70: 0x1132, 0xe71: 0x114e, 0xe72: 0x117e, 0xe73: 0x1232, 0xe74: 0x125a, 0xe75: 0x12ce, - 0xe76: 0x1316, 0xe77: 0x1322, 0xe78: 0x132a, 0xe79: 0x1342, 0xe7a: 0x1356, 0xe7b: 0x1346, - 0xe7c: 0x135e, 0xe7d: 0x135a, 0xe7e: 0x1352, 0xe7f: 0x1362, + 0xe40: 0x0b26, 0xe41: 0x0b36, 0xe42: 0x0c1e, 0xe43: 0x0c26, 0xe44: 0x0c56, 0xe45: 0x0c76, + 0xe46: 0x0ca6, 0xe47: 0x0cbe, 0xe48: 0x0cae, 0xe49: 0x0cce, 0xe4a: 0x0cc2, 0xe4b: 0x0ce6, + 0xe4c: 0x0d02, 0xe4d: 0x0d5a, 0xe4e: 0x0d66, 0xe4f: 0x0d6e, 0xe50: 0x0d96, 0xe51: 0x0dda, + 0xe52: 0x0e0a, 0xe53: 0x0e0e, 0xe54: 0x0e22, 0xe55: 0x0ea2, 0xe56: 0x0eb2, 0xe57: 0x0f0a, + 0xe58: 0x0f56, 0xe59: 0x0f4e, 0xe5a: 0x0f62, 0xe5b: 0x0f7e, 0xe5c: 0x0fb6, 0xe5d: 0x110e, + 0xe5e: 0x0fda, 0xe5f: 0x100e, 0xe60: 0x101a, 0xe61: 0x105a, 0xe62: 0x1076, 0xe63: 0x109a, + 0xe64: 0x10be, 0xe65: 0x10c2, 0xe66: 0x10de, 0xe67: 0x10e2, 0xe68: 0x10f2, 0xe69: 0x1106, + 0xe6a: 0x1102, 0xe6b: 0x1132, 0xe6c: 0x11ae, 0xe6d: 0x11c6, 0xe6e: 0x11de, 0xe6f: 0x1216, + 0xe70: 0x122a, 0xe71: 0x1246, 0xe72: 0x1276, 0xe73: 0x132a, 0xe74: 0x1352, 0xe75: 0x13c6, + 0xe76: 0x140e, 0xe77: 0x141a, 0xe78: 0x1422, 0xe79: 0x143a, 0xe7a: 0x144e, 0xe7b: 0x143e, + 0xe7c: 0x1456, 0xe7d: 0x1452, 0xe7e: 0x144a, 0xe7f: 0x145a, // Block 0x3a, offset 0xe80 - 0xe80: 0x136e, 0xe81: 0x13aa, 0xe82: 0x13e6, 0xe83: 0x1416, 0xe84: 0x144e, 0xe85: 0x146e, - 0xe86: 0x14ba, 0xe87: 0x14de, 0xe88: 0x14fe, 0xe89: 0x1512, 0xe8a: 0x1522, 0xe8b: 0x152e, - 0xe8c: 0x153a, 0xe8d: 0x158e, 0xe8e: 0x162e, 0xe8f: 0x16b8, 0xe90: 0x16b3, 0xe91: 0x16e5, - 0xe92: 0x060a, 0xe93: 0x0632, 0xe94: 0x0636, 0xe95: 0x1767, 0xe96: 0x1794, 0xe97: 0x180c, - 0xe98: 0x161a, 0xe99: 0x162a, + 0xe80: 0x1466, 0xe81: 0x14a2, 0xe82: 0x14de, 0xe83: 0x150e, 0xe84: 0x1546, 0xe85: 0x1566, + 0xe86: 0x15b2, 0xe87: 0x15d6, 0xe88: 0x15f6, 0xe89: 0x160a, 0xe8a: 0x161a, 0xe8b: 0x1626, + 0xe8c: 0x1632, 0xe8d: 0x1686, 0xe8e: 0x1726, 0xe8f: 0x17e2, 0xe90: 0x17dd, 0xe91: 0x180f, + 0xe92: 0x0702, 0xe93: 0x072a, 0xe94: 0x072e, 0xe95: 0x1891, 0xe96: 0x18be, 0xe97: 0x1936, + 0xe98: 0x1712, 0xe99: 0x1722, // Block 0x3b, offset 0xec0 - 0xec0: 0x19db, 0xec1: 0x19de, 0xec2: 0x19e1, 0xec3: 0x1c0e, 0xec4: 0x1c12, 0xec5: 0x1a65, - 0xec6: 0x1a65, - 0xed3: 0x1d7b, 0xed4: 0x1d6c, 0xed5: 0x1d71, 0xed6: 0x1d80, 0xed7: 0x1d76, - 0xedd: 0x43a7, - 0xede: 0x8116, 0xedf: 0x4419, 0xee0: 0x0230, 0xee1: 0x0218, 0xee2: 0x0221, 0xee3: 0x0224, - 0xee4: 0x0227, 0xee5: 0x022a, 0xee6: 0x022d, 0xee7: 0x0233, 0xee8: 0x0236, 0xee9: 0x0017, - 0xeea: 0x4407, 0xeeb: 0x440d, 0xeec: 0x450b, 0xeed: 0x4513, 0xeee: 0x435f, 0xeef: 0x4365, - 0xef0: 0x436b, 0xef1: 0x4371, 0xef2: 0x437d, 0xef3: 0x4383, 0xef4: 0x4389, 0xef5: 0x4395, - 0xef6: 0x439b, 0xef8: 0x43a1, 0xef9: 0x43ad, 0xefa: 0x43b3, 0xefb: 0x43b9, - 0xefc: 0x43c5, 0xefe: 0x43cb, + 0xec0: 0x1b05, 0xec1: 0x1b08, 0xec2: 0x1b0b, 0xec3: 0x1d38, 0xec4: 0x1d3c, 0xec5: 0x1b8f, + 0xec6: 0x1b8f, + 0xed3: 0x1ea5, 0xed4: 0x1e96, 0xed5: 0x1e9b, 0xed6: 0x1eaa, 0xed7: 0x1ea0, + 0xedd: 0x448f, + 0xede: 0x8116, 0xedf: 0x4501, 0xee0: 0x0320, 0xee1: 0x0308, 0xee2: 0x0311, 0xee3: 0x0314, + 0xee4: 0x0317, 0xee5: 0x031a, 0xee6: 0x031d, 0xee7: 0x0323, 0xee8: 0x0326, 0xee9: 0x0017, + 0xeea: 0x44ef, 0xeeb: 0x44f5, 0xeec: 0x45f3, 0xeed: 0x45fb, 0xeee: 0x4447, 0xeef: 0x444d, + 0xef0: 0x4453, 0xef1: 0x4459, 0xef2: 0x4465, 0xef3: 0x446b, 0xef4: 0x4471, 0xef5: 0x447d, + 0xef6: 0x4483, 0xef8: 0x4489, 0xef9: 0x4495, 0xefa: 0x449b, 0xefb: 0x44a1, + 0xefc: 0x44ad, 0xefe: 0x44b3, // Block 0x3c, offset 0xf00 - 0xf00: 0x43d1, 0xf01: 0x43d7, 0xf03: 0x43dd, 0xf04: 0x43e3, - 0xf06: 0x43ef, 0xf07: 0x43f5, 0xf08: 0x43fb, 0xf09: 0x4401, 0xf0a: 0x4413, 0xf0b: 0x438f, - 0xf0c: 0x4377, 0xf0d: 0x43bf, 0xf0e: 0x43e9, 0xf0f: 0x1d85, 0xf10: 0x029c, 0xf11: 0x029c, - 0xf12: 0x02a5, 0xf13: 0x02a5, 0xf14: 0x02a5, 0xf15: 0x02a5, 0xf16: 0x02a8, 0xf17: 0x02a8, - 0xf18: 0x02a8, 0xf19: 0x02a8, 0xf1a: 0x02ae, 0xf1b: 0x02ae, 0xf1c: 0x02ae, 0xf1d: 0x02ae, - 0xf1e: 0x02a2, 0xf1f: 0x02a2, 0xf20: 0x02a2, 0xf21: 0x02a2, 0xf22: 0x02ab, 0xf23: 0x02ab, - 0xf24: 0x02ab, 0xf25: 0x02ab, 0xf26: 0x029f, 0xf27: 0x029f, 0xf28: 0x029f, 0xf29: 0x029f, - 0xf2a: 0x02d2, 0xf2b: 0x02d2, 0xf2c: 0x02d2, 0xf2d: 0x02d2, 0xf2e: 0x02d5, 0xf2f: 0x02d5, - 0xf30: 0x02d5, 0xf31: 0x02d5, 0xf32: 0x02b4, 0xf33: 0x02b4, 0xf34: 0x02b4, 0xf35: 0x02b4, - 0xf36: 0x02b1, 0xf37: 0x02b1, 0xf38: 0x02b1, 0xf39: 0x02b1, 0xf3a: 0x02b7, 0xf3b: 0x02b7, - 0xf3c: 0x02b7, 0xf3d: 0x02b7, 0xf3e: 0x02ba, 0xf3f: 0x02ba, + 0xf00: 0x44b9, 0xf01: 0x44bf, 0xf03: 0x44c5, 0xf04: 0x44cb, + 0xf06: 0x44d7, 0xf07: 0x44dd, 0xf08: 0x44e3, 0xf09: 0x44e9, 0xf0a: 0x44fb, 0xf0b: 0x4477, + 0xf0c: 0x445f, 0xf0d: 0x44a7, 0xf0e: 0x44d1, 0xf0f: 0x1eaf, 0xf10: 0x038c, 0xf11: 0x038c, + 0xf12: 0x0395, 0xf13: 0x0395, 0xf14: 0x0395, 0xf15: 0x0395, 0xf16: 0x0398, 0xf17: 0x0398, + 0xf18: 0x0398, 0xf19: 0x0398, 0xf1a: 0x039e, 0xf1b: 0x039e, 0xf1c: 0x039e, 0xf1d: 0x039e, + 0xf1e: 0x0392, 0xf1f: 0x0392, 0xf20: 0x0392, 0xf21: 0x0392, 0xf22: 0x039b, 0xf23: 0x039b, + 0xf24: 0x039b, 0xf25: 0x039b, 0xf26: 0x038f, 0xf27: 0x038f, 0xf28: 0x038f, 0xf29: 0x038f, + 0xf2a: 0x03c2, 0xf2b: 0x03c2, 0xf2c: 0x03c2, 0xf2d: 0x03c2, 0xf2e: 0x03c5, 0xf2f: 0x03c5, + 0xf30: 0x03c5, 0xf31: 0x03c5, 0xf32: 0x03a4, 0xf33: 0x03a4, 0xf34: 0x03a4, 0xf35: 0x03a4, + 0xf36: 0x03a1, 0xf37: 0x03a1, 0xf38: 0x03a1, 0xf39: 0x03a1, 0xf3a: 0x03a7, 0xf3b: 0x03a7, + 0xf3c: 0x03a7, 0xf3d: 0x03a7, 0xf3e: 0x03aa, 0xf3f: 0x03aa, // Block 0x3d, offset 0xf40 - 0xf40: 0x02ba, 0xf41: 0x02ba, 0xf42: 0x02c3, 0xf43: 0x02c3, 0xf44: 0x02c0, 0xf45: 0x02c0, - 0xf46: 0x02c6, 0xf47: 0x02c6, 0xf48: 0x02bd, 0xf49: 0x02bd, 0xf4a: 0x02cc, 0xf4b: 0x02cc, - 0xf4c: 0x02c9, 0xf4d: 0x02c9, 0xf4e: 0x02d8, 0xf4f: 0x02d8, 0xf50: 0x02d8, 0xf51: 0x02d8, - 0xf52: 0x02de, 0xf53: 0x02de, 0xf54: 0x02de, 0xf55: 0x02de, 0xf56: 0x02e4, 0xf57: 0x02e4, - 0xf58: 0x02e4, 0xf59: 0x02e4, 0xf5a: 0x02e1, 0xf5b: 0x02e1, 0xf5c: 0x02e1, 0xf5d: 0x02e1, - 0xf5e: 0x02e7, 0xf5f: 0x02e7, 0xf60: 0x02ea, 0xf61: 0x02ea, 0xf62: 0x02ea, 0xf63: 0x02ea, - 0xf64: 0x4485, 0xf65: 0x4485, 0xf66: 0x02f0, 0xf67: 0x02f0, 0xf68: 0x02f0, 0xf69: 0x02f0, - 0xf6a: 0x02ed, 0xf6b: 0x02ed, 0xf6c: 0x02ed, 0xf6d: 0x02ed, 0xf6e: 0x030b, 0xf6f: 0x030b, - 0xf70: 0x447f, 0xf71: 0x447f, + 0xf40: 0x03aa, 0xf41: 0x03aa, 0xf42: 0x03b3, 0xf43: 0x03b3, 0xf44: 0x03b0, 0xf45: 0x03b0, + 0xf46: 0x03b6, 0xf47: 0x03b6, 0xf48: 0x03ad, 0xf49: 0x03ad, 0xf4a: 0x03bc, 0xf4b: 0x03bc, + 0xf4c: 0x03b9, 0xf4d: 0x03b9, 0xf4e: 0x03c8, 0xf4f: 0x03c8, 0xf50: 0x03c8, 0xf51: 0x03c8, + 0xf52: 0x03ce, 0xf53: 0x03ce, 0xf54: 0x03ce, 0xf55: 0x03ce, 0xf56: 0x03d4, 0xf57: 0x03d4, + 0xf58: 0x03d4, 0xf59: 0x03d4, 0xf5a: 0x03d1, 0xf5b: 0x03d1, 0xf5c: 0x03d1, 0xf5d: 0x03d1, + 0xf5e: 0x03d7, 0xf5f: 0x03d7, 0xf60: 0x03da, 0xf61: 0x03da, 0xf62: 0x03da, 0xf63: 0x03da, + 0xf64: 0x456d, 0xf65: 0x456d, 0xf66: 0x03e0, 0xf67: 0x03e0, 0xf68: 0x03e0, 0xf69: 0x03e0, + 0xf6a: 0x03dd, 0xf6b: 0x03dd, 0xf6c: 0x03dd, 0xf6d: 0x03dd, 0xf6e: 0x03fb, 0xf6f: 0x03fb, + 0xf70: 0x4567, 0xf71: 0x4567, // Block 0x3e, offset 0xf80 - 0xf93: 0x02db, 0xf94: 0x02db, 0xf95: 0x02db, 0xf96: 0x02db, 0xf97: 0x02f9, - 0xf98: 0x02f9, 0xf99: 0x02f6, 0xf9a: 0x02f6, 0xf9b: 0x02fc, 0xf9c: 0x02fc, 0xf9d: 0x2055, - 0xf9e: 0x0302, 0xf9f: 0x0302, 0xfa0: 0x02f3, 0xfa1: 0x02f3, 0xfa2: 0x02ff, 0xfa3: 0x02ff, - 0xfa4: 0x0308, 0xfa5: 0x0308, 0xfa6: 0x0308, 0xfa7: 0x0308, 0xfa8: 0x0290, 0xfa9: 0x0290, - 0xfaa: 0x25b0, 0xfab: 0x25b0, 0xfac: 0x2620, 0xfad: 0x2620, 0xfae: 0x25ef, 0xfaf: 0x25ef, - 0xfb0: 0x260b, 0xfb1: 0x260b, 0xfb2: 0x2604, 0xfb3: 0x2604, 0xfb4: 0x2612, 0xfb5: 0x2612, - 0xfb6: 0x2619, 0xfb7: 0x2619, 0xfb8: 0x2619, 0xfb9: 0x25f6, 0xfba: 0x25f6, 0xfbb: 0x25f6, - 0xfbc: 0x0305, 0xfbd: 0x0305, 0xfbe: 0x0305, 0xfbf: 0x0305, + 0xf93: 0x03cb, 0xf94: 0x03cb, 0xf95: 0x03cb, 0xf96: 0x03cb, 0xf97: 0x03e9, + 0xf98: 0x03e9, 0xf99: 0x03e6, 0xf9a: 0x03e6, 0xf9b: 0x03ec, 0xf9c: 0x03ec, 0xf9d: 0x217f, + 0xf9e: 0x03f2, 0xf9f: 0x03f2, 0xfa0: 0x03e3, 0xfa1: 0x03e3, 0xfa2: 0x03ef, 0xfa3: 0x03ef, + 0xfa4: 0x03f8, 0xfa5: 0x03f8, 0xfa6: 0x03f8, 0xfa7: 0x03f8, 0xfa8: 0x0380, 0xfa9: 0x0380, + 0xfaa: 0x26da, 0xfab: 0x26da, 0xfac: 0x274a, 0xfad: 0x274a, 0xfae: 0x2719, 0xfaf: 0x2719, + 0xfb0: 0x2735, 0xfb1: 0x2735, 0xfb2: 0x272e, 0xfb3: 0x272e, 0xfb4: 0x273c, 0xfb5: 0x273c, + 0xfb6: 0x2743, 0xfb7: 0x2743, 0xfb8: 0x2743, 0xfb9: 0x2720, 0xfba: 0x2720, 0xfbb: 0x2720, + 0xfbc: 0x03f5, 0xfbd: 0x03f5, 0xfbe: 0x03f5, 0xfbf: 0x03f5, // Block 0x3f, offset 0xfc0 - 0xfc0: 0x25b7, 0xfc1: 0x25be, 0xfc2: 0x25da, 0xfc3: 0x25f6, 0xfc4: 0x25fd, 0xfc5: 0x1d8f, - 0xfc6: 0x1d94, 0xfc7: 0x1d99, 0xfc8: 0x1da8, 0xfc9: 0x1db7, 0xfca: 0x1dbc, 0xfcb: 0x1dc1, - 0xfcc: 0x1dc6, 0xfcd: 0x1dcb, 0xfce: 0x1dda, 0xfcf: 0x1de9, 0xfd0: 0x1dee, 0xfd1: 0x1df3, - 0xfd2: 0x1e02, 0xfd3: 0x1e11, 0xfd4: 0x1e16, 0xfd5: 0x1e1b, 0xfd6: 0x1e20, 0xfd7: 0x1e2f, - 0xfd8: 0x1e34, 0xfd9: 0x1e43, 0xfda: 0x1e48, 0xfdb: 0x1e4d, 0xfdc: 0x1e5c, 0xfdd: 0x1e61, - 0xfde: 0x1e66, 0xfdf: 0x1e70, 0xfe0: 0x1eac, 0xfe1: 0x1ebb, 0xfe2: 0x1eca, 0xfe3: 0x1ecf, - 0xfe4: 0x1ed4, 0xfe5: 0x1ede, 0xfe6: 0x1eed, 0xfe7: 0x1ef2, 0xfe8: 0x1f01, 0xfe9: 0x1f06, - 0xfea: 0x1f0b, 0xfeb: 0x1f1a, 0xfec: 0x1f1f, 0xfed: 0x1f2e, 0xfee: 0x1f33, 0xfef: 0x1f38, - 0xff0: 0x1f3d, 0xff1: 0x1f42, 0xff2: 0x1f47, 0xff3: 0x1f4c, 0xff4: 0x1f51, 0xff5: 0x1f56, - 0xff6: 0x1f5b, 0xff7: 0x1f60, 0xff8: 0x1f65, 0xff9: 0x1f6a, 0xffa: 0x1f6f, 0xffb: 0x1f74, - 0xffc: 0x1f79, 0xffd: 0x1f7e, 0xffe: 0x1f83, 0xfff: 0x1f8d, + 0xfc0: 0x26e1, 0xfc1: 0x26e8, 0xfc2: 0x2704, 0xfc3: 0x2720, 0xfc4: 0x2727, 0xfc5: 0x1eb9, + 0xfc6: 0x1ebe, 0xfc7: 0x1ec3, 0xfc8: 0x1ed2, 0xfc9: 0x1ee1, 0xfca: 0x1ee6, 0xfcb: 0x1eeb, + 0xfcc: 0x1ef0, 0xfcd: 0x1ef5, 0xfce: 0x1f04, 0xfcf: 0x1f13, 0xfd0: 0x1f18, 0xfd1: 0x1f1d, + 0xfd2: 0x1f2c, 0xfd3: 0x1f3b, 0xfd4: 0x1f40, 0xfd5: 0x1f45, 0xfd6: 0x1f4a, 0xfd7: 0x1f59, + 0xfd8: 0x1f5e, 0xfd9: 0x1f6d, 0xfda: 0x1f72, 0xfdb: 0x1f77, 0xfdc: 0x1f86, 0xfdd: 0x1f8b, + 0xfde: 0x1f90, 0xfdf: 0x1f9a, 0xfe0: 0x1fd6, 0xfe1: 0x1fe5, 0xfe2: 0x1ff4, 0xfe3: 0x1ff9, + 0xfe4: 0x1ffe, 0xfe5: 0x2008, 0xfe6: 0x2017, 0xfe7: 0x201c, 0xfe8: 0x202b, 0xfe9: 0x2030, + 0xfea: 0x2035, 0xfeb: 0x2044, 0xfec: 0x2049, 0xfed: 0x2058, 0xfee: 0x205d, 0xfef: 0x2062, + 0xff0: 0x2067, 0xff1: 0x206c, 0xff2: 0x2071, 0xff3: 0x2076, 0xff4: 0x207b, 0xff5: 0x2080, + 0xff6: 0x2085, 0xff7: 0x208a, 0xff8: 0x208f, 0xff9: 0x2094, 0xffa: 0x2099, 0xffb: 0x209e, + 0xffc: 0x20a3, 0xffd: 0x20a8, 0xffe: 0x20ad, 0xfff: 0x20b7, // Block 0x40, offset 0x1000 - 0x1000: 0x1f92, 0x1001: 0x1f97, 0x1002: 0x1f9c, 0x1003: 0x1fa6, 0x1004: 0x1fab, 0x1005: 0x1fb5, - 0x1006: 0x1fba, 0x1007: 0x1fbf, 0x1008: 0x1fc4, 0x1009: 0x1fc9, 0x100a: 0x1fce, 0x100b: 0x1fd3, - 0x100c: 0x1fd8, 0x100d: 0x1fdd, 0x100e: 0x1fec, 0x100f: 0x1ffb, 0x1010: 0x2000, 0x1011: 0x2005, - 0x1012: 0x200a, 0x1013: 0x200f, 0x1014: 0x2014, 0x1015: 0x201e, 0x1016: 0x2023, 0x1017: 0x2028, - 0x1018: 0x2037, 0x1019: 0x2046, 0x101a: 0x204b, 0x101b: 0x4437, 0x101c: 0x443d, 0x101d: 0x4473, - 0x101e: 0x44ca, 0x101f: 0x44d1, 0x1020: 0x44d8, 0x1021: 0x44df, 0x1022: 0x44e6, 0x1023: 0x44ed, - 0x1024: 0x25cc, 0x1025: 0x25d3, 0x1026: 0x25da, 0x1027: 0x25e1, 0x1028: 0x25f6, 0x1029: 0x25fd, - 0x102a: 0x1d9e, 0x102b: 0x1da3, 0x102c: 0x1da8, 0x102d: 0x1dad, 0x102e: 0x1db7, 0x102f: 0x1dbc, - 0x1030: 0x1dd0, 0x1031: 0x1dd5, 0x1032: 0x1dda, 0x1033: 0x1ddf, 0x1034: 0x1de9, 0x1035: 0x1dee, - 0x1036: 0x1df8, 0x1037: 0x1dfd, 0x1038: 0x1e02, 0x1039: 0x1e07, 0x103a: 0x1e11, 0x103b: 0x1e16, - 0x103c: 0x1f42, 0x103d: 0x1f47, 0x103e: 0x1f56, 0x103f: 0x1f5b, + 0x1000: 0x20bc, 0x1001: 0x20c1, 0x1002: 0x20c6, 0x1003: 0x20d0, 0x1004: 0x20d5, 0x1005: 0x20df, + 0x1006: 0x20e4, 0x1007: 0x20e9, 0x1008: 0x20ee, 0x1009: 0x20f3, 0x100a: 0x20f8, 0x100b: 0x20fd, + 0x100c: 0x2102, 0x100d: 0x2107, 0x100e: 0x2116, 0x100f: 0x2125, 0x1010: 0x212a, 0x1011: 0x212f, + 0x1012: 0x2134, 0x1013: 0x2139, 0x1014: 0x213e, 0x1015: 0x2148, 0x1016: 0x214d, 0x1017: 0x2152, + 0x1018: 0x2161, 0x1019: 0x2170, 0x101a: 0x2175, 0x101b: 0x451f, 0x101c: 0x4525, 0x101d: 0x455b, + 0x101e: 0x45b2, 0x101f: 0x45b9, 0x1020: 0x45c0, 0x1021: 0x45c7, 0x1022: 0x45ce, 0x1023: 0x45d5, + 0x1024: 0x26f6, 0x1025: 0x26fd, 0x1026: 0x2704, 0x1027: 0x270b, 0x1028: 0x2720, 0x1029: 0x2727, + 0x102a: 0x1ec8, 0x102b: 0x1ecd, 0x102c: 0x1ed2, 0x102d: 0x1ed7, 0x102e: 0x1ee1, 0x102f: 0x1ee6, + 0x1030: 0x1efa, 0x1031: 0x1eff, 0x1032: 0x1f04, 0x1033: 0x1f09, 0x1034: 0x1f13, 0x1035: 0x1f18, + 0x1036: 0x1f22, 0x1037: 0x1f27, 0x1038: 0x1f2c, 0x1039: 0x1f31, 0x103a: 0x1f3b, 0x103b: 0x1f40, + 0x103c: 0x206c, 0x103d: 0x2071, 0x103e: 0x2080, 0x103f: 0x2085, // Block 0x41, offset 0x1040 - 0x1040: 0x1f60, 0x1041: 0x1f74, 0x1042: 0x1f79, 0x1043: 0x1f7e, 0x1044: 0x1f83, 0x1045: 0x1f9c, - 0x1046: 0x1fa6, 0x1047: 0x1fab, 0x1048: 0x1fb0, 0x1049: 0x1fc4, 0x104a: 0x1fe2, 0x104b: 0x1fe7, - 0x104c: 0x1fec, 0x104d: 0x1ff1, 0x104e: 0x1ffb, 0x104f: 0x2000, 0x1050: 0x4473, 0x1051: 0x202d, - 0x1052: 0x2032, 0x1053: 0x2037, 0x1054: 0x203c, 0x1055: 0x2046, 0x1056: 0x204b, 0x1057: 0x25b7, - 0x1058: 0x25be, 0x1059: 0x25c5, 0x105a: 0x25da, 0x105b: 0x25e8, 0x105c: 0x1d8f, 0x105d: 0x1d94, - 0x105e: 0x1d99, 0x105f: 0x1da8, 0x1060: 0x1db2, 0x1061: 0x1dc1, 0x1062: 0x1dc6, 0x1063: 0x1dcb, - 0x1064: 0x1dda, 0x1065: 0x1de4, 0x1066: 0x1e02, 0x1067: 0x1e1b, 0x1068: 0x1e20, 0x1069: 0x1e2f, - 0x106a: 0x1e34, 0x106b: 0x1e43, 0x106c: 0x1e4d, 0x106d: 0x1e5c, 0x106e: 0x1e61, 0x106f: 0x1e66, - 0x1070: 0x1e70, 0x1071: 0x1eac, 0x1072: 0x1eb1, 0x1073: 0x1ebb, 0x1074: 0x1eca, 0x1075: 0x1ecf, - 0x1076: 0x1ed4, 0x1077: 0x1ede, 0x1078: 0x1eed, 0x1079: 0x1f01, 0x107a: 0x1f06, 0x107b: 0x1f0b, - 0x107c: 0x1f1a, 0x107d: 0x1f1f, 0x107e: 0x1f2e, 0x107f: 0x1f33, + 0x1040: 0x208a, 0x1041: 0x209e, 0x1042: 0x20a3, 0x1043: 0x20a8, 0x1044: 0x20ad, 0x1045: 0x20c6, + 0x1046: 0x20d0, 0x1047: 0x20d5, 0x1048: 0x20da, 0x1049: 0x20ee, 0x104a: 0x210c, 0x104b: 0x2111, + 0x104c: 0x2116, 0x104d: 0x211b, 0x104e: 0x2125, 0x104f: 0x212a, 0x1050: 0x455b, 0x1051: 0x2157, + 0x1052: 0x215c, 0x1053: 0x2161, 0x1054: 0x2166, 0x1055: 0x2170, 0x1056: 0x2175, 0x1057: 0x26e1, + 0x1058: 0x26e8, 0x1059: 0x26ef, 0x105a: 0x2704, 0x105b: 0x2712, 0x105c: 0x1eb9, 0x105d: 0x1ebe, + 0x105e: 0x1ec3, 0x105f: 0x1ed2, 0x1060: 0x1edc, 0x1061: 0x1eeb, 0x1062: 0x1ef0, 0x1063: 0x1ef5, + 0x1064: 0x1f04, 0x1065: 0x1f0e, 0x1066: 0x1f2c, 0x1067: 0x1f45, 0x1068: 0x1f4a, 0x1069: 0x1f59, + 0x106a: 0x1f5e, 0x106b: 0x1f6d, 0x106c: 0x1f77, 0x106d: 0x1f86, 0x106e: 0x1f8b, 0x106f: 0x1f90, + 0x1070: 0x1f9a, 0x1071: 0x1fd6, 0x1072: 0x1fdb, 0x1073: 0x1fe5, 0x1074: 0x1ff4, 0x1075: 0x1ff9, + 0x1076: 0x1ffe, 0x1077: 0x2008, 0x1078: 0x2017, 0x1079: 0x202b, 0x107a: 0x2030, 0x107b: 0x2035, + 0x107c: 0x2044, 0x107d: 0x2049, 0x107e: 0x2058, 0x107f: 0x205d, // Block 0x42, offset 0x1080 - 0x1080: 0x1f38, 0x1081: 0x1f3d, 0x1082: 0x1f4c, 0x1083: 0x1f51, 0x1084: 0x1f65, 0x1085: 0x1f6a, - 0x1086: 0x1f6f, 0x1087: 0x1f74, 0x1088: 0x1f79, 0x1089: 0x1f8d, 0x108a: 0x1f92, 0x108b: 0x1f97, - 0x108c: 0x1f9c, 0x108d: 0x1fa1, 0x108e: 0x1fb5, 0x108f: 0x1fba, 0x1090: 0x1fbf, 0x1091: 0x1fc4, - 0x1092: 0x1fd3, 0x1093: 0x1fd8, 0x1094: 0x1fdd, 0x1095: 0x1fec, 0x1096: 0x1ff6, 0x1097: 0x2005, - 0x1098: 0x200a, 0x1099: 0x4467, 0x109a: 0x201e, 0x109b: 0x2023, 0x109c: 0x2028, 0x109d: 0x2037, - 0x109e: 0x2041, 0x109f: 0x25da, 0x10a0: 0x25e8, 0x10a1: 0x1da8, 0x10a2: 0x1db2, 0x10a3: 0x1dda, - 0x10a4: 0x1de4, 0x10a5: 0x1e02, 0x10a6: 0x1e0c, 0x10a7: 0x1e70, 0x10a8: 0x1e75, 0x10a9: 0x1e98, - 0x10aa: 0x1e9d, 0x10ab: 0x1f74, 0x10ac: 0x1f79, 0x10ad: 0x1f9c, 0x10ae: 0x1fec, 0x10af: 0x1ff6, - 0x10b0: 0x2037, 0x10b1: 0x2041, 0x10b2: 0x451b, 0x10b3: 0x4523, 0x10b4: 0x452b, 0x10b5: 0x1ef7, - 0x10b6: 0x1efc, 0x10b7: 0x1f10, 0x10b8: 0x1f15, 0x10b9: 0x1f24, 0x10ba: 0x1f29, 0x10bb: 0x1e7a, - 0x10bc: 0x1e7f, 0x10bd: 0x1ea2, 0x10be: 0x1ea7, 0x10bf: 0x1e39, + 0x1080: 0x2062, 0x1081: 0x2067, 0x1082: 0x2076, 0x1083: 0x207b, 0x1084: 0x208f, 0x1085: 0x2094, + 0x1086: 0x2099, 0x1087: 0x209e, 0x1088: 0x20a3, 0x1089: 0x20b7, 0x108a: 0x20bc, 0x108b: 0x20c1, + 0x108c: 0x20c6, 0x108d: 0x20cb, 0x108e: 0x20df, 0x108f: 0x20e4, 0x1090: 0x20e9, 0x1091: 0x20ee, + 0x1092: 0x20fd, 0x1093: 0x2102, 0x1094: 0x2107, 0x1095: 0x2116, 0x1096: 0x2120, 0x1097: 0x212f, + 0x1098: 0x2134, 0x1099: 0x454f, 0x109a: 0x2148, 0x109b: 0x214d, 0x109c: 0x2152, 0x109d: 0x2161, + 0x109e: 0x216b, 0x109f: 0x2704, 0x10a0: 0x2712, 0x10a1: 0x1ed2, 0x10a2: 0x1edc, 0x10a3: 0x1f04, + 0x10a4: 0x1f0e, 0x10a5: 0x1f2c, 0x10a6: 0x1f36, 0x10a7: 0x1f9a, 0x10a8: 0x1f9f, 0x10a9: 0x1fc2, + 0x10aa: 0x1fc7, 0x10ab: 0x209e, 0x10ac: 0x20a3, 0x10ad: 0x20c6, 0x10ae: 0x2116, 0x10af: 0x2120, + 0x10b0: 0x2161, 0x10b1: 0x216b, 0x10b2: 0x4603, 0x10b3: 0x460b, 0x10b4: 0x4613, 0x10b5: 0x2021, + 0x10b6: 0x2026, 0x10b7: 0x203a, 0x10b8: 0x203f, 0x10b9: 0x204e, 0x10ba: 0x2053, 0x10bb: 0x1fa4, + 0x10bc: 0x1fa9, 0x10bd: 0x1fcc, 0x10be: 0x1fd1, 0x10bf: 0x1f63, // Block 0x43, offset 0x10c0 - 0x10c0: 0x1e3e, 0x10c1: 0x1e25, 0x10c2: 0x1e2a, 0x10c3: 0x1e52, 0x10c4: 0x1e57, 0x10c5: 0x1ec0, - 0x10c6: 0x1ec5, 0x10c7: 0x1ee3, 0x10c8: 0x1ee8, 0x10c9: 0x1e84, 0x10ca: 0x1e89, 0x10cb: 0x1e8e, - 0x10cc: 0x1e98, 0x10cd: 0x1e93, 0x10ce: 0x1e6b, 0x10cf: 0x1eb6, 0x10d0: 0x1ed9, 0x10d1: 0x1ef7, - 0x10d2: 0x1efc, 0x10d3: 0x1f10, 0x10d4: 0x1f15, 0x10d5: 0x1f24, 0x10d6: 0x1f29, 0x10d7: 0x1e7a, - 0x10d8: 0x1e7f, 0x10d9: 0x1ea2, 0x10da: 0x1ea7, 0x10db: 0x1e39, 0x10dc: 0x1e3e, 0x10dd: 0x1e25, - 0x10de: 0x1e2a, 0x10df: 0x1e52, 0x10e0: 0x1e57, 0x10e1: 0x1ec0, 0x10e2: 0x1ec5, 0x10e3: 0x1ee3, - 0x10e4: 0x1ee8, 0x10e5: 0x1e84, 0x10e6: 0x1e89, 0x10e7: 0x1e8e, 0x10e8: 0x1e98, 0x10e9: 0x1e93, - 0x10ea: 0x1e6b, 0x10eb: 0x1eb6, 0x10ec: 0x1ed9, 0x10ed: 0x1e84, 0x10ee: 0x1e89, 0x10ef: 0x1e8e, - 0x10f0: 0x1e98, 0x10f1: 0x1e75, 0x10f2: 0x1e9d, 0x10f3: 0x1ef2, 0x10f4: 0x1e5c, 0x10f5: 0x1e61, - 0x10f6: 0x1e66, 0x10f7: 0x1e84, 0x10f8: 0x1e89, 0x10f9: 0x1e8e, 0x10fa: 0x1ef2, 0x10fb: 0x1f01, - 0x10fc: 0x441f, 0x10fd: 0x441f, + 0x10c0: 0x1f68, 0x10c1: 0x1f4f, 0x10c2: 0x1f54, 0x10c3: 0x1f7c, 0x10c4: 0x1f81, 0x10c5: 0x1fea, + 0x10c6: 0x1fef, 0x10c7: 0x200d, 0x10c8: 0x2012, 0x10c9: 0x1fae, 0x10ca: 0x1fb3, 0x10cb: 0x1fb8, + 0x10cc: 0x1fc2, 0x10cd: 0x1fbd, 0x10ce: 0x1f95, 0x10cf: 0x1fe0, 0x10d0: 0x2003, 0x10d1: 0x2021, + 0x10d2: 0x2026, 0x10d3: 0x203a, 0x10d4: 0x203f, 0x10d5: 0x204e, 0x10d6: 0x2053, 0x10d7: 0x1fa4, + 0x10d8: 0x1fa9, 0x10d9: 0x1fcc, 0x10da: 0x1fd1, 0x10db: 0x1f63, 0x10dc: 0x1f68, 0x10dd: 0x1f4f, + 0x10de: 0x1f54, 0x10df: 0x1f7c, 0x10e0: 0x1f81, 0x10e1: 0x1fea, 0x10e2: 0x1fef, 0x10e3: 0x200d, + 0x10e4: 0x2012, 0x10e5: 0x1fae, 0x10e6: 0x1fb3, 0x10e7: 0x1fb8, 0x10e8: 0x1fc2, 0x10e9: 0x1fbd, + 0x10ea: 0x1f95, 0x10eb: 0x1fe0, 0x10ec: 0x2003, 0x10ed: 0x1fae, 0x10ee: 0x1fb3, 0x10ef: 0x1fb8, + 0x10f0: 0x1fc2, 0x10f1: 0x1f9f, 0x10f2: 0x1fc7, 0x10f3: 0x201c, 0x10f4: 0x1f86, 0x10f5: 0x1f8b, + 0x10f6: 0x1f90, 0x10f7: 0x1fae, 0x10f8: 0x1fb3, 0x10f9: 0x1fb8, 0x10fa: 0x201c, 0x10fb: 0x202b, + 0x10fc: 0x4507, 0x10fd: 0x4507, // Block 0x44, offset 0x1100 - 0x1110: 0x2317, 0x1111: 0x232c, - 0x1112: 0x232c, 0x1113: 0x2333, 0x1114: 0x233a, 0x1115: 0x234f, 0x1116: 0x2356, 0x1117: 0x235d, - 0x1118: 0x2380, 0x1119: 0x2380, 0x111a: 0x23a3, 0x111b: 0x239c, 0x111c: 0x23b8, 0x111d: 0x23aa, - 0x111e: 0x23b1, 0x111f: 0x23d4, 0x1120: 0x23d4, 0x1121: 0x23cd, 0x1122: 0x23db, 0x1123: 0x23db, - 0x1124: 0x2405, 0x1125: 0x2405, 0x1126: 0x2421, 0x1127: 0x23e9, 0x1128: 0x23e9, 0x1129: 0x23e2, - 0x112a: 0x23f7, 0x112b: 0x23f7, 0x112c: 0x23fe, 0x112d: 0x23fe, 0x112e: 0x2428, 0x112f: 0x2436, - 0x1130: 0x2436, 0x1131: 0x243d, 0x1132: 0x243d, 0x1133: 0x2444, 0x1134: 0x244b, 0x1135: 0x2452, - 0x1136: 0x2459, 0x1137: 0x2459, 0x1138: 0x2460, 0x1139: 0x246e, 0x113a: 0x247c, 0x113b: 0x2475, - 0x113c: 0x2483, 0x113d: 0x2483, 0x113e: 0x2498, 0x113f: 0x249f, + 0x1110: 0x2441, 0x1111: 0x2456, + 0x1112: 0x2456, 0x1113: 0x245d, 0x1114: 0x2464, 0x1115: 0x2479, 0x1116: 0x2480, 0x1117: 0x2487, + 0x1118: 0x24aa, 0x1119: 0x24aa, 0x111a: 0x24cd, 0x111b: 0x24c6, 0x111c: 0x24e2, 0x111d: 0x24d4, + 0x111e: 0x24db, 0x111f: 0x24fe, 0x1120: 0x24fe, 0x1121: 0x24f7, 0x1122: 0x2505, 0x1123: 0x2505, + 0x1124: 0x252f, 0x1125: 0x252f, 0x1126: 0x254b, 0x1127: 0x2513, 0x1128: 0x2513, 0x1129: 0x250c, + 0x112a: 0x2521, 0x112b: 0x2521, 0x112c: 0x2528, 0x112d: 0x2528, 0x112e: 0x2552, 0x112f: 0x2560, + 0x1130: 0x2560, 0x1131: 0x2567, 0x1132: 0x2567, 0x1133: 0x256e, 0x1134: 0x2575, 0x1135: 0x257c, + 0x1136: 0x2583, 0x1137: 0x2583, 0x1138: 0x258a, 0x1139: 0x2598, 0x113a: 0x25a6, 0x113b: 0x259f, + 0x113c: 0x25ad, 0x113d: 0x25ad, 0x113e: 0x25c2, 0x113f: 0x25c9, // Block 0x45, offset 0x1140 - 0x1140: 0x24d0, 0x1141: 0x24de, 0x1142: 0x24d7, 0x1143: 0x24bb, 0x1144: 0x24bb, 0x1145: 0x24e5, - 0x1146: 0x24e5, 0x1147: 0x24ec, 0x1148: 0x24ec, 0x1149: 0x2516, 0x114a: 0x251d, 0x114b: 0x2524, - 0x114c: 0x24fa, 0x114d: 0x2508, 0x114e: 0x252b, 0x114f: 0x2532, - 0x1152: 0x2501, 0x1153: 0x2586, 0x1154: 0x258d, 0x1155: 0x2563, 0x1156: 0x256a, 0x1157: 0x254e, - 0x1158: 0x254e, 0x1159: 0x2555, 0x115a: 0x257f, 0x115b: 0x2578, 0x115c: 0x25a2, 0x115d: 0x25a2, - 0x115e: 0x2310, 0x115f: 0x2325, 0x1160: 0x231e, 0x1161: 0x2348, 0x1162: 0x2341, 0x1163: 0x236b, - 0x1164: 0x2364, 0x1165: 0x238e, 0x1166: 0x2372, 0x1167: 0x2387, 0x1168: 0x23bf, 0x1169: 0x240c, - 0x116a: 0x23f0, 0x116b: 0x242f, 0x116c: 0x24c9, 0x116d: 0x24f3, 0x116e: 0x259b, 0x116f: 0x2594, - 0x1170: 0x25a9, 0x1171: 0x2540, 0x1172: 0x24a6, 0x1173: 0x2571, 0x1174: 0x2498, 0x1175: 0x24d0, - 0x1176: 0x2467, 0x1177: 0x24b4, 0x1178: 0x2547, 0x1179: 0x2539, 0x117a: 0x24c2, 0x117b: 0x24ad, - 0x117c: 0x24c2, 0x117d: 0x2547, 0x117e: 0x2379, 0x117f: 0x2395, + 0x1140: 0x25fa, 0x1141: 0x2608, 0x1142: 0x2601, 0x1143: 0x25e5, 0x1144: 0x25e5, 0x1145: 0x260f, + 0x1146: 0x260f, 0x1147: 0x2616, 0x1148: 0x2616, 0x1149: 0x2640, 0x114a: 0x2647, 0x114b: 0x264e, + 0x114c: 0x2624, 0x114d: 0x2632, 0x114e: 0x2655, 0x114f: 0x265c, + 0x1152: 0x262b, 0x1153: 0x26b0, 0x1154: 0x26b7, 0x1155: 0x268d, 0x1156: 0x2694, 0x1157: 0x2678, + 0x1158: 0x2678, 0x1159: 0x267f, 0x115a: 0x26a9, 0x115b: 0x26a2, 0x115c: 0x26cc, 0x115d: 0x26cc, + 0x115e: 0x243a, 0x115f: 0x244f, 0x1160: 0x2448, 0x1161: 0x2472, 0x1162: 0x246b, 0x1163: 0x2495, + 0x1164: 0x248e, 0x1165: 0x24b8, 0x1166: 0x249c, 0x1167: 0x24b1, 0x1168: 0x24e9, 0x1169: 0x2536, + 0x116a: 0x251a, 0x116b: 0x2559, 0x116c: 0x25f3, 0x116d: 0x261d, 0x116e: 0x26c5, 0x116f: 0x26be, + 0x1170: 0x26d3, 0x1171: 0x266a, 0x1172: 0x25d0, 0x1173: 0x269b, 0x1174: 0x25c2, 0x1175: 0x25fa, + 0x1176: 0x2591, 0x1177: 0x25de, 0x1178: 0x2671, 0x1179: 0x2663, 0x117a: 0x25ec, 0x117b: 0x25d7, + 0x117c: 0x25ec, 0x117d: 0x2671, 0x117e: 0x24a3, 0x117f: 0x24bf, // Block 0x46, offset 0x1180 - 0x1180: 0x250f, 0x1181: 0x248a, 0x1182: 0x2309, 0x1183: 0x24ad, 0x1184: 0x2452, 0x1185: 0x2421, - 0x1186: 0x23c6, 0x1187: 0x255c, - 0x11b0: 0x241a, 0x11b1: 0x2491, 0x11b2: 0x27cc, 0x11b3: 0x27c3, 0x11b4: 0x27f9, 0x11b5: 0x27e7, - 0x11b6: 0x27d5, 0x11b7: 0x27f0, 0x11b8: 0x2802, 0x11b9: 0x2413, 0x11ba: 0x2c89, 0x11bb: 0x2b09, - 0x11bc: 0x27de, + 0x1180: 0x2639, 0x1181: 0x25b4, 0x1182: 0x2433, 0x1183: 0x25d7, 0x1184: 0x257c, 0x1185: 0x254b, + 0x1186: 0x24f0, 0x1187: 0x2686, + 0x11b0: 0x2544, 0x11b1: 0x25bb, 0x11b2: 0x28f6, 0x11b3: 0x28ed, 0x11b4: 0x2923, 0x11b5: 0x2911, + 0x11b6: 0x28ff, 0x11b7: 0x291a, 0x11b8: 0x292c, 0x11b9: 0x253d, 0x11ba: 0x2db3, 0x11bb: 0x2c33, + 0x11bc: 0x2908, // Block 0x47, offset 0x11c0 - 0x11d0: 0x0019, 0x11d1: 0x0486, - 0x11d2: 0x048a, 0x11d3: 0x0035, 0x11d4: 0x0037, 0x11d5: 0x0003, 0x11d6: 0x003f, 0x11d7: 0x04c2, - 0x11d8: 0x04c6, 0x11d9: 0x1b62, + 0x11d0: 0x0019, 0x11d1: 0x057e, + 0x11d2: 0x0582, 0x11d3: 0x0035, 0x11d4: 0x0037, 0x11d5: 0x0003, 0x11d6: 0x003f, 0x11d7: 0x05ba, + 0x11d8: 0x05be, 0x11d9: 0x1c8c, 0x11e0: 0x8133, 0x11e1: 0x8133, 0x11e2: 0x8133, 0x11e3: 0x8133, 0x11e4: 0x8133, 0x11e5: 0x8133, 0x11e6: 0x8133, 0x11e7: 0x812e, 0x11e8: 0x812e, 0x11e9: 0x812e, 0x11ea: 0x812e, 0x11eb: 0x812e, 0x11ec: 0x812e, 0x11ed: 0x812e, 0x11ee: 0x8133, 0x11ef: 0x8133, - 0x11f0: 0x1876, 0x11f1: 0x0446, 0x11f2: 0x0442, 0x11f3: 0x007f, 0x11f4: 0x007f, 0x11f5: 0x0011, - 0x11f6: 0x0013, 0x11f7: 0x00b7, 0x11f8: 0x00bb, 0x11f9: 0x04ba, 0x11fa: 0x04be, 0x11fb: 0x04ae, - 0x11fc: 0x04b2, 0x11fd: 0x0496, 0x11fe: 0x049a, 0x11ff: 0x048e, + 0x11f0: 0x19a0, 0x11f1: 0x053a, 0x11f2: 0x0536, 0x11f3: 0x007f, 0x11f4: 0x007f, 0x11f5: 0x0011, + 0x11f6: 0x0013, 0x11f7: 0x00b7, 0x11f8: 0x00bb, 0x11f9: 0x05b2, 0x11fa: 0x05b6, 0x11fb: 0x05a6, + 0x11fc: 0x05aa, 0x11fd: 0x058e, 0x11fe: 0x0592, 0x11ff: 0x0586, // Block 0x48, offset 0x1200 - 0x1200: 0x0492, 0x1201: 0x049e, 0x1202: 0x04a2, 0x1203: 0x04a6, 0x1204: 0x04aa, - 0x1207: 0x0077, 0x1208: 0x007b, 0x1209: 0x4280, 0x120a: 0x4280, 0x120b: 0x4280, - 0x120c: 0x4280, 0x120d: 0x007f, 0x120e: 0x007f, 0x120f: 0x007f, 0x1210: 0x0019, 0x1211: 0x0486, + 0x1200: 0x058a, 0x1201: 0x0596, 0x1202: 0x059a, 0x1203: 0x059e, 0x1204: 0x05a2, + 0x1207: 0x0077, 0x1208: 0x007b, 0x1209: 0x4368, 0x120a: 0x4368, 0x120b: 0x4368, + 0x120c: 0x4368, 0x120d: 0x007f, 0x120e: 0x007f, 0x120f: 0x007f, 0x1210: 0x0019, 0x1211: 0x057e, 0x1212: 0x001d, 0x1214: 0x0037, 0x1215: 0x0035, 0x1216: 0x003f, 0x1217: 0x0003, - 0x1218: 0x0446, 0x1219: 0x0011, 0x121a: 0x0013, 0x121b: 0x00b7, 0x121c: 0x00bb, 0x121d: 0x04ba, - 0x121e: 0x04be, 0x121f: 0x0007, 0x1220: 0x000d, 0x1221: 0x0015, 0x1222: 0x0017, 0x1223: 0x001b, + 0x1218: 0x053a, 0x1219: 0x0011, 0x121a: 0x0013, 0x121b: 0x00b7, 0x121c: 0x00bb, 0x121d: 0x05b2, + 0x121e: 0x05b6, 0x121f: 0x0007, 0x1220: 0x000d, 0x1221: 0x0015, 0x1222: 0x0017, 0x1223: 0x001b, 0x1224: 0x0039, 0x1225: 0x003d, 0x1226: 0x003b, 0x1228: 0x0079, 0x1229: 0x0009, 0x122a: 0x000b, 0x122b: 0x0041, - 0x1230: 0x42c1, 0x1231: 0x4443, 0x1232: 0x42c6, 0x1234: 0x42cb, - 0x1236: 0x42d0, 0x1237: 0x4449, 0x1238: 0x42d5, 0x1239: 0x444f, 0x123a: 0x42da, 0x123b: 0x4455, - 0x123c: 0x42df, 0x123d: 0x445b, 0x123e: 0x42e4, 0x123f: 0x4461, + 0x1230: 0x43a9, 0x1231: 0x452b, 0x1232: 0x43ae, 0x1234: 0x43b3, + 0x1236: 0x43b8, 0x1237: 0x4531, 0x1238: 0x43bd, 0x1239: 0x4537, 0x123a: 0x43c2, 0x123b: 0x453d, + 0x123c: 0x43c7, 0x123d: 0x4543, 0x123e: 0x43cc, 0x123f: 0x4549, // Block 0x49, offset 0x1240 - 0x1240: 0x0239, 0x1241: 0x4425, 0x1242: 0x4425, 0x1243: 0x442b, 0x1244: 0x442b, 0x1245: 0x446d, - 0x1246: 0x446d, 0x1247: 0x4431, 0x1248: 0x4431, 0x1249: 0x4479, 0x124a: 0x4479, 0x124b: 0x4479, - 0x124c: 0x4479, 0x124d: 0x023c, 0x124e: 0x023c, 0x124f: 0x023f, 0x1250: 0x023f, 0x1251: 0x023f, - 0x1252: 0x023f, 0x1253: 0x0242, 0x1254: 0x0242, 0x1255: 0x0245, 0x1256: 0x0245, 0x1257: 0x0245, - 0x1258: 0x0245, 0x1259: 0x0248, 0x125a: 0x0248, 0x125b: 0x0248, 0x125c: 0x0248, 0x125d: 0x024b, - 0x125e: 0x024b, 0x125f: 0x024b, 0x1260: 0x024b, 0x1261: 0x024e, 0x1262: 0x024e, 0x1263: 0x024e, - 0x1264: 0x024e, 0x1265: 0x0251, 0x1266: 0x0251, 0x1267: 0x0251, 0x1268: 0x0251, 0x1269: 0x0254, - 0x126a: 0x0254, 0x126b: 0x0257, 0x126c: 0x0257, 0x126d: 0x025a, 0x126e: 0x025a, 0x126f: 0x025d, - 0x1270: 0x025d, 0x1271: 0x0260, 0x1272: 0x0260, 0x1273: 0x0260, 0x1274: 0x0260, 0x1275: 0x0263, - 0x1276: 0x0263, 0x1277: 0x0263, 0x1278: 0x0263, 0x1279: 0x0266, 0x127a: 0x0266, 0x127b: 0x0266, - 0x127c: 0x0266, 0x127d: 0x0269, 0x127e: 0x0269, 0x127f: 0x0269, + 0x1240: 0x0329, 0x1241: 0x450d, 0x1242: 0x450d, 0x1243: 0x4513, 0x1244: 0x4513, 0x1245: 0x4555, + 0x1246: 0x4555, 0x1247: 0x4519, 0x1248: 0x4519, 0x1249: 0x4561, 0x124a: 0x4561, 0x124b: 0x4561, + 0x124c: 0x4561, 0x124d: 0x032c, 0x124e: 0x032c, 0x124f: 0x032f, 0x1250: 0x032f, 0x1251: 0x032f, + 0x1252: 0x032f, 0x1253: 0x0332, 0x1254: 0x0332, 0x1255: 0x0335, 0x1256: 0x0335, 0x1257: 0x0335, + 0x1258: 0x0335, 0x1259: 0x0338, 0x125a: 0x0338, 0x125b: 0x0338, 0x125c: 0x0338, 0x125d: 0x033b, + 0x125e: 0x033b, 0x125f: 0x033b, 0x1260: 0x033b, 0x1261: 0x033e, 0x1262: 0x033e, 0x1263: 0x033e, + 0x1264: 0x033e, 0x1265: 0x0341, 0x1266: 0x0341, 0x1267: 0x0341, 0x1268: 0x0341, 0x1269: 0x0344, + 0x126a: 0x0344, 0x126b: 0x0347, 0x126c: 0x0347, 0x126d: 0x034a, 0x126e: 0x034a, 0x126f: 0x034d, + 0x1270: 0x034d, 0x1271: 0x0350, 0x1272: 0x0350, 0x1273: 0x0350, 0x1274: 0x0350, 0x1275: 0x0353, + 0x1276: 0x0353, 0x1277: 0x0353, 0x1278: 0x0353, 0x1279: 0x0356, 0x127a: 0x0356, 0x127b: 0x0356, + 0x127c: 0x0356, 0x127d: 0x0359, 0x127e: 0x0359, 0x127f: 0x0359, // Block 0x4a, offset 0x1280 - 0x1280: 0x0269, 0x1281: 0x026c, 0x1282: 0x026c, 0x1283: 0x026c, 0x1284: 0x026c, 0x1285: 0x026f, - 0x1286: 0x026f, 0x1287: 0x026f, 0x1288: 0x026f, 0x1289: 0x0272, 0x128a: 0x0272, 0x128b: 0x0272, - 0x128c: 0x0272, 0x128d: 0x0275, 0x128e: 0x0275, 0x128f: 0x0275, 0x1290: 0x0275, 0x1291: 0x0278, - 0x1292: 0x0278, 0x1293: 0x0278, 0x1294: 0x0278, 0x1295: 0x027b, 0x1296: 0x027b, 0x1297: 0x027b, - 0x1298: 0x027b, 0x1299: 0x027e, 0x129a: 0x027e, 0x129b: 0x027e, 0x129c: 0x027e, 0x129d: 0x0281, - 0x129e: 0x0281, 0x129f: 0x0281, 0x12a0: 0x0281, 0x12a1: 0x0284, 0x12a2: 0x0284, 0x12a3: 0x0284, - 0x12a4: 0x0284, 0x12a5: 0x0287, 0x12a6: 0x0287, 0x12a7: 0x0287, 0x12a8: 0x0287, 0x12a9: 0x028a, - 0x12aa: 0x028a, 0x12ab: 0x028a, 0x12ac: 0x028a, 0x12ad: 0x028d, 0x12ae: 0x028d, 0x12af: 0x0290, - 0x12b0: 0x0290, 0x12b1: 0x0293, 0x12b2: 0x0293, 0x12b3: 0x0293, 0x12b4: 0x0293, 0x12b5: 0x2e17, - 0x12b6: 0x2e17, 0x12b7: 0x2e1f, 0x12b8: 0x2e1f, 0x12b9: 0x2e27, 0x12ba: 0x2e27, 0x12bb: 0x1f88, - 0x12bc: 0x1f88, + 0x1280: 0x0359, 0x1281: 0x035c, 0x1282: 0x035c, 0x1283: 0x035c, 0x1284: 0x035c, 0x1285: 0x035f, + 0x1286: 0x035f, 0x1287: 0x035f, 0x1288: 0x035f, 0x1289: 0x0362, 0x128a: 0x0362, 0x128b: 0x0362, + 0x128c: 0x0362, 0x128d: 0x0365, 0x128e: 0x0365, 0x128f: 0x0365, 0x1290: 0x0365, 0x1291: 0x0368, + 0x1292: 0x0368, 0x1293: 0x0368, 0x1294: 0x0368, 0x1295: 0x036b, 0x1296: 0x036b, 0x1297: 0x036b, + 0x1298: 0x036b, 0x1299: 0x036e, 0x129a: 0x036e, 0x129b: 0x036e, 0x129c: 0x036e, 0x129d: 0x0371, + 0x129e: 0x0371, 0x129f: 0x0371, 0x12a0: 0x0371, 0x12a1: 0x0374, 0x12a2: 0x0374, 0x12a3: 0x0374, + 0x12a4: 0x0374, 0x12a5: 0x0377, 0x12a6: 0x0377, 0x12a7: 0x0377, 0x12a8: 0x0377, 0x12a9: 0x037a, + 0x12aa: 0x037a, 0x12ab: 0x037a, 0x12ac: 0x037a, 0x12ad: 0x037d, 0x12ae: 0x037d, 0x12af: 0x0380, + 0x12b0: 0x0380, 0x12b1: 0x0383, 0x12b2: 0x0383, 0x12b3: 0x0383, 0x12b4: 0x0383, 0x12b5: 0x2de7, + 0x12b6: 0x2de7, 0x12b7: 0x2def, 0x12b8: 0x2def, 0x12b9: 0x2df7, 0x12ba: 0x2df7, 0x12bb: 0x20b2, + 0x12bc: 0x20b2, // Block 0x4b, offset 0x12c0 0x12c0: 0x0081, 0x12c1: 0x0083, 0x12c2: 0x0085, 0x12c3: 0x0087, 0x12c4: 0x0089, 0x12c5: 0x008b, 0x12c6: 0x008d, 0x12c7: 0x008f, 0x12c8: 0x0091, 0x12c9: 0x0093, 0x12ca: 0x0095, 0x12cb: 0x0097, 0x12cc: 0x0099, 0x12cd: 0x009b, 0x12ce: 0x009d, 0x12cf: 0x009f, 0x12d0: 0x00a1, 0x12d1: 0x00a3, 0x12d2: 0x00a5, 0x12d3: 0x00a7, 0x12d4: 0x00a9, 0x12d5: 0x00ab, 0x12d6: 0x00ad, 0x12d7: 0x00af, 0x12d8: 0x00b1, 0x12d9: 0x00b3, 0x12da: 0x00b5, 0x12db: 0x00b7, 0x12dc: 0x00b9, 0x12dd: 0x00bb, - 0x12de: 0x00bd, 0x12df: 0x047a, 0x12e0: 0x047e, 0x12e1: 0x048a, 0x12e2: 0x049e, 0x12e3: 0x04a2, - 0x12e4: 0x0486, 0x12e5: 0x05ae, 0x12e6: 0x05a6, 0x12e7: 0x04ca, 0x12e8: 0x04d2, 0x12e9: 0x04da, - 0x12ea: 0x04e2, 0x12eb: 0x04ea, 0x12ec: 0x056e, 0x12ed: 0x0576, 0x12ee: 0x057e, 0x12ef: 0x0522, - 0x12f0: 0x05b2, 0x12f1: 0x04ce, 0x12f2: 0x04d6, 0x12f3: 0x04de, 0x12f4: 0x04e6, 0x12f5: 0x04ee, - 0x12f6: 0x04f2, 0x12f7: 0x04f6, 0x12f8: 0x04fa, 0x12f9: 0x04fe, 0x12fa: 0x0502, 0x12fb: 0x0506, - 0x12fc: 0x050a, 0x12fd: 0x050e, 0x12fe: 0x0512, 0x12ff: 0x0516, + 0x12de: 0x00bd, 0x12df: 0x056e, 0x12e0: 0x0572, 0x12e1: 0x0582, 0x12e2: 0x0596, 0x12e3: 0x059a, + 0x12e4: 0x057e, 0x12e5: 0x06a6, 0x12e6: 0x069e, 0x12e7: 0x05c2, 0x12e8: 0x05ca, 0x12e9: 0x05d2, + 0x12ea: 0x05da, 0x12eb: 0x05e2, 0x12ec: 0x0666, 0x12ed: 0x066e, 0x12ee: 0x0676, 0x12ef: 0x061a, + 0x12f0: 0x06aa, 0x12f1: 0x05c6, 0x12f2: 0x05ce, 0x12f3: 0x05d6, 0x12f4: 0x05de, 0x12f5: 0x05e6, + 0x12f6: 0x05ea, 0x12f7: 0x05ee, 0x12f8: 0x05f2, 0x12f9: 0x05f6, 0x12fa: 0x05fa, 0x12fb: 0x05fe, + 0x12fc: 0x0602, 0x12fd: 0x0606, 0x12fe: 0x060a, 0x12ff: 0x060e, // Block 0x4c, offset 0x1300 - 0x1300: 0x051a, 0x1301: 0x051e, 0x1302: 0x0526, 0x1303: 0x052a, 0x1304: 0x052e, 0x1305: 0x0532, - 0x1306: 0x0536, 0x1307: 0x053a, 0x1308: 0x053e, 0x1309: 0x0542, 0x130a: 0x0546, 0x130b: 0x054a, - 0x130c: 0x054e, 0x130d: 0x0552, 0x130e: 0x0556, 0x130f: 0x055a, 0x1310: 0x055e, 0x1311: 0x0562, - 0x1312: 0x0566, 0x1313: 0x056a, 0x1314: 0x0572, 0x1315: 0x057a, 0x1316: 0x0582, 0x1317: 0x0586, - 0x1318: 0x058a, 0x1319: 0x058e, 0x131a: 0x0592, 0x131b: 0x0596, 0x131c: 0x059a, 0x131d: 0x05aa, - 0x131e: 0x4a8f, 0x131f: 0x4a95, 0x1320: 0x03c6, 0x1321: 0x0316, 0x1322: 0x031a, 0x1323: 0x4a52, - 0x1324: 0x031e, 0x1325: 0x4a58, 0x1326: 0x4a5e, 0x1327: 0x0322, 0x1328: 0x0326, 0x1329: 0x032a, - 0x132a: 0x4a64, 0x132b: 0x4a6a, 0x132c: 0x4a70, 0x132d: 0x4a76, 0x132e: 0x4a7c, 0x132f: 0x4a82, - 0x1330: 0x036a, 0x1331: 0x032e, 0x1332: 0x0332, 0x1333: 0x0336, 0x1334: 0x037e, 0x1335: 0x033a, - 0x1336: 0x033e, 0x1337: 0x0342, 0x1338: 0x0346, 0x1339: 0x034a, 0x133a: 0x034e, 0x133b: 0x0352, - 0x133c: 0x0356, 0x133d: 0x035a, 0x133e: 0x035e, + 0x1300: 0x0612, 0x1301: 0x0616, 0x1302: 0x061e, 0x1303: 0x0622, 0x1304: 0x0626, 0x1305: 0x062a, + 0x1306: 0x062e, 0x1307: 0x0632, 0x1308: 0x0636, 0x1309: 0x063a, 0x130a: 0x063e, 0x130b: 0x0642, + 0x130c: 0x0646, 0x130d: 0x064a, 0x130e: 0x064e, 0x130f: 0x0652, 0x1310: 0x0656, 0x1311: 0x065a, + 0x1312: 0x065e, 0x1313: 0x0662, 0x1314: 0x066a, 0x1315: 0x0672, 0x1316: 0x067a, 0x1317: 0x067e, + 0x1318: 0x0682, 0x1319: 0x0686, 0x131a: 0x068a, 0x131b: 0x068e, 0x131c: 0x0692, 0x131d: 0x06a2, + 0x131e: 0x4c99, 0x131f: 0x4c9f, 0x1320: 0x04b6, 0x1321: 0x0406, 0x1322: 0x040a, 0x1323: 0x4bcc, + 0x1324: 0x040e, 0x1325: 0x4bd2, 0x1326: 0x4bd8, 0x1327: 0x0412, 0x1328: 0x0416, 0x1329: 0x041a, + 0x132a: 0x4bde, 0x132b: 0x4be4, 0x132c: 0x4bea, 0x132d: 0x4bf0, 0x132e: 0x4bf6, 0x132f: 0x4bfc, + 0x1330: 0x045a, 0x1331: 0x041e, 0x1332: 0x0422, 0x1333: 0x0426, 0x1334: 0x046e, 0x1335: 0x042a, + 0x1336: 0x042e, 0x1337: 0x0432, 0x1338: 0x0436, 0x1339: 0x043a, 0x133a: 0x043e, 0x133b: 0x0442, + 0x133c: 0x0446, 0x133d: 0x044a, 0x133e: 0x044e, // Block 0x4d, offset 0x1340 - 0x1342: 0x49d4, 0x1343: 0x49da, 0x1344: 0x49e0, 0x1345: 0x49e6, - 0x1346: 0x49ec, 0x1347: 0x49f2, 0x134a: 0x49f8, 0x134b: 0x49fe, - 0x134c: 0x4a04, 0x134d: 0x4a0a, 0x134e: 0x4a10, 0x134f: 0x4a16, - 0x1352: 0x4a1c, 0x1353: 0x4a22, 0x1354: 0x4a28, 0x1355: 0x4a2e, 0x1356: 0x4a34, 0x1357: 0x4a3a, - 0x135a: 0x4a40, 0x135b: 0x4a46, 0x135c: 0x4a4c, - 0x1360: 0x00bf, 0x1361: 0x00c2, 0x1362: 0x00cb, 0x1363: 0x427b, - 0x1364: 0x00c8, 0x1365: 0x00c5, 0x1366: 0x044a, 0x1368: 0x046e, 0x1369: 0x044e, - 0x136a: 0x0452, 0x136b: 0x0456, 0x136c: 0x045a, 0x136d: 0x0472, 0x136e: 0x0476, + 0x1342: 0x4b4e, 0x1343: 0x4b54, 0x1344: 0x4b5a, 0x1345: 0x4b60, + 0x1346: 0x4b66, 0x1347: 0x4b6c, 0x134a: 0x4b72, 0x134b: 0x4b78, + 0x134c: 0x4b7e, 0x134d: 0x4b84, 0x134e: 0x4b8a, 0x134f: 0x4b90, + 0x1352: 0x4b96, 0x1353: 0x4b9c, 0x1354: 0x4ba2, 0x1355: 0x4ba8, 0x1356: 0x4bae, 0x1357: 0x4bb4, + 0x135a: 0x4bba, 0x135b: 0x4bc0, 0x135c: 0x4bc6, + 0x1360: 0x00bf, 0x1361: 0x00c2, 0x1362: 0x00cb, 0x1363: 0x4363, + 0x1364: 0x00c8, 0x1365: 0x00c5, 0x1366: 0x053e, 0x1368: 0x0562, 0x1369: 0x0542, + 0x136a: 0x0546, 0x136b: 0x054a, 0x136c: 0x054e, 0x136d: 0x0566, 0x136e: 0x056a, // Block 0x4e, offset 0x1380 - 0x1380: 0x0063, 0x1381: 0x0065, 0x1382: 0x0067, 0x1383: 0x0069, 0x1384: 0x006b, 0x1385: 0x006d, - 0x1386: 0x006f, 0x1387: 0x0071, 0x1388: 0x0073, 0x1389: 0x0075, 0x138a: 0x0083, 0x138b: 0x0085, - 0x138c: 0x0087, 0x138d: 0x0089, 0x138e: 0x008b, 0x138f: 0x008d, 0x1390: 0x008f, 0x1391: 0x0091, - 0x1392: 0x0093, 0x1393: 0x0095, 0x1394: 0x0097, 0x1395: 0x0099, 0x1396: 0x009b, 0x1397: 0x009d, - 0x1398: 0x009f, 0x1399: 0x00a1, 0x139a: 0x00a3, 0x139b: 0x00a5, 0x139c: 0x00a7, 0x139d: 0x00a9, - 0x139e: 0x00ab, 0x139f: 0x00ad, 0x13a0: 0x00af, 0x13a1: 0x00b1, 0x13a2: 0x00b3, 0x13a3: 0x00b5, - 0x13a4: 0x00dd, 0x13a5: 0x00f2, 0x13a8: 0x0176, 0x13a9: 0x0179, - 0x13aa: 0x017c, 0x13ab: 0x017f, 0x13ac: 0x0182, 0x13ad: 0x0185, 0x13ae: 0x0188, 0x13af: 0x018b, - 0x13b0: 0x018e, 0x13b1: 0x0191, 0x13b2: 0x0194, 0x13b3: 0x0197, 0x13b4: 0x019a, 0x13b5: 0x019d, - 0x13b6: 0x01a0, 0x13b7: 0x01a3, 0x13b8: 0x01a6, 0x13b9: 0x018b, 0x13ba: 0x01a9, 0x13bb: 0x01ac, - 0x13bc: 0x01af, 0x13bd: 0x01b2, 0x13be: 0x01b5, 0x13bf: 0x01b8, + 0x1381: 0x01f1, 0x1382: 0x01f4, 0x1383: 0x00d4, 0x1384: 0x01be, 0x1385: 0x010d, + 0x1387: 0x01d3, 0x1388: 0x174e, 0x1389: 0x01d9, 0x138a: 0x01d6, 0x138b: 0x0116, + 0x138c: 0x0119, 0x138d: 0x0526, 0x138e: 0x011c, 0x138f: 0x0128, 0x1390: 0x01e5, 0x1391: 0x013a, + 0x1392: 0x0134, 0x1393: 0x012e, 0x1394: 0x01c1, 0x1395: 0x00e0, 0x1396: 0x01c4, 0x1397: 0x0143, + 0x1398: 0x0194, 0x1399: 0x01e8, 0x139a: 0x01eb, 0x139b: 0x0152, 0x139c: 0x1756, 0x139d: 0x1742, + 0x139e: 0x0158, 0x139f: 0x175b, 0x13a0: 0x01a9, 0x13a1: 0x1760, 0x13a2: 0x00da, 0x13a3: 0x0170, + 0x13a4: 0x0173, 0x13a5: 0x00a3, 0x13a6: 0x017c, 0x13a7: 0x1765, 0x13a8: 0x0182, 0x13a9: 0x0185, + 0x13aa: 0x0188, 0x13ab: 0x01e2, 0x13ac: 0x01dc, 0x13ad: 0x1752, 0x13ae: 0x01df, 0x13af: 0x0197, + 0x13b0: 0x0576, 0x13b2: 0x01ac, 0x13b3: 0x01cd, 0x13b4: 0x01d0, 0x13b5: 0x01bb, + 0x13b6: 0x00f5, 0x13b7: 0x00f8, 0x13b8: 0x00fb, 0x13b9: 0x176a, 0x13ba: 0x176f, // Block 0x4f, offset 0x13c0 - 0x13c0: 0x0200, 0x13c1: 0x0203, 0x13c2: 0x0206, 0x13c3: 0x045e, 0x13c4: 0x01ca, 0x13c5: 0x01d3, - 0x13c6: 0x01d9, 0x13c7: 0x01fd, 0x13c8: 0x01ee, 0x13c9: 0x01eb, 0x13ca: 0x0209, 0x13cb: 0x020c, - 0x13ce: 0x0021, 0x13cf: 0x0023, 0x13d0: 0x0025, 0x13d1: 0x0027, - 0x13d2: 0x0029, 0x13d3: 0x002b, 0x13d4: 0x002d, 0x13d5: 0x002f, 0x13d6: 0x0031, 0x13d7: 0x0033, - 0x13d8: 0x0021, 0x13d9: 0x0023, 0x13da: 0x0025, 0x13db: 0x0027, 0x13dc: 0x0029, 0x13dd: 0x002b, - 0x13de: 0x002d, 0x13df: 0x002f, 0x13e0: 0x0031, 0x13e1: 0x0033, 0x13e2: 0x0021, 0x13e3: 0x0023, - 0x13e4: 0x0025, 0x13e5: 0x0027, 0x13e6: 0x0029, 0x13e7: 0x002b, 0x13e8: 0x002d, 0x13e9: 0x002f, - 0x13ea: 0x0031, 0x13eb: 0x0033, 0x13ec: 0x0021, 0x13ed: 0x0023, 0x13ee: 0x0025, 0x13ef: 0x0027, - 0x13f0: 0x0029, 0x13f1: 0x002b, 0x13f2: 0x002d, 0x13f3: 0x002f, 0x13f4: 0x0031, 0x13f5: 0x0033, - 0x13f6: 0x0021, 0x13f7: 0x0023, 0x13f8: 0x0025, 0x13f9: 0x0027, 0x13fa: 0x0029, 0x13fb: 0x002b, - 0x13fc: 0x002d, 0x13fd: 0x002f, 0x13fe: 0x0031, 0x13ff: 0x0033, + 0x13c0: 0x0063, 0x13c1: 0x0065, 0x13c2: 0x0067, 0x13c3: 0x0069, 0x13c4: 0x006b, 0x13c5: 0x006d, + 0x13c6: 0x006f, 0x13c7: 0x0071, 0x13c8: 0x0073, 0x13c9: 0x0075, 0x13ca: 0x0083, 0x13cb: 0x0085, + 0x13cc: 0x0087, 0x13cd: 0x0089, 0x13ce: 0x008b, 0x13cf: 0x008d, 0x13d0: 0x008f, 0x13d1: 0x0091, + 0x13d2: 0x0093, 0x13d3: 0x0095, 0x13d4: 0x0097, 0x13d5: 0x0099, 0x13d6: 0x009b, 0x13d7: 0x009d, + 0x13d8: 0x009f, 0x13d9: 0x00a1, 0x13da: 0x00a3, 0x13db: 0x00a5, 0x13dc: 0x00a7, 0x13dd: 0x00a9, + 0x13de: 0x00ab, 0x13df: 0x00ad, 0x13e0: 0x00af, 0x13e1: 0x00b1, 0x13e2: 0x00b3, 0x13e3: 0x00b5, + 0x13e4: 0x00e3, 0x13e5: 0x0101, 0x13e8: 0x01f7, 0x13e9: 0x01fa, + 0x13ea: 0x01fd, 0x13eb: 0x0200, 0x13ec: 0x0203, 0x13ed: 0x0206, 0x13ee: 0x0209, 0x13ef: 0x020c, + 0x13f0: 0x020f, 0x13f1: 0x0212, 0x13f2: 0x0215, 0x13f3: 0x0218, 0x13f4: 0x021b, 0x13f5: 0x021e, + 0x13f6: 0x0221, 0x13f7: 0x0224, 0x13f8: 0x0227, 0x13f9: 0x020c, 0x13fa: 0x022a, 0x13fb: 0x022d, + 0x13fc: 0x0230, 0x13fd: 0x0233, 0x13fe: 0x0236, 0x13ff: 0x0239, // Block 0x50, offset 0x1400 - 0x1400: 0x023c, 0x1401: 0x023f, 0x1402: 0x024b, 0x1403: 0x0254, 0x1405: 0x028d, - 0x1406: 0x025d, 0x1407: 0x024e, 0x1408: 0x026c, 0x1409: 0x0293, 0x140a: 0x027e, 0x140b: 0x0281, - 0x140c: 0x0284, 0x140d: 0x0287, 0x140e: 0x0260, 0x140f: 0x0272, 0x1410: 0x0278, 0x1411: 0x0266, - 0x1412: 0x027b, 0x1413: 0x025a, 0x1414: 0x0263, 0x1415: 0x0245, 0x1416: 0x0248, 0x1417: 0x0251, - 0x1418: 0x0257, 0x1419: 0x0269, 0x141a: 0x026f, 0x141b: 0x0275, 0x141c: 0x0296, 0x141d: 0x02e7, - 0x141e: 0x02cf, 0x141f: 0x0299, 0x1421: 0x023f, 0x1422: 0x024b, - 0x1424: 0x028a, 0x1427: 0x024e, 0x1429: 0x0293, - 0x142a: 0x027e, 0x142b: 0x0281, 0x142c: 0x0284, 0x142d: 0x0287, 0x142e: 0x0260, 0x142f: 0x0272, - 0x1430: 0x0278, 0x1431: 0x0266, 0x1432: 0x027b, 0x1434: 0x0263, 0x1435: 0x0245, - 0x1436: 0x0248, 0x1437: 0x0251, 0x1439: 0x0269, 0x143b: 0x0275, + 0x1400: 0x0281, 0x1401: 0x0284, 0x1402: 0x0287, 0x1403: 0x0552, 0x1404: 0x024b, 0x1405: 0x0254, + 0x1406: 0x025a, 0x1407: 0x027e, 0x1408: 0x026f, 0x1409: 0x026c, 0x140a: 0x028a, 0x140b: 0x028d, + 0x140e: 0x0021, 0x140f: 0x0023, 0x1410: 0x0025, 0x1411: 0x0027, + 0x1412: 0x0029, 0x1413: 0x002b, 0x1414: 0x002d, 0x1415: 0x002f, 0x1416: 0x0031, 0x1417: 0x0033, + 0x1418: 0x0021, 0x1419: 0x0023, 0x141a: 0x0025, 0x141b: 0x0027, 0x141c: 0x0029, 0x141d: 0x002b, + 0x141e: 0x002d, 0x141f: 0x002f, 0x1420: 0x0031, 0x1421: 0x0033, 0x1422: 0x0021, 0x1423: 0x0023, + 0x1424: 0x0025, 0x1425: 0x0027, 0x1426: 0x0029, 0x1427: 0x002b, 0x1428: 0x002d, 0x1429: 0x002f, + 0x142a: 0x0031, 0x142b: 0x0033, 0x142c: 0x0021, 0x142d: 0x0023, 0x142e: 0x0025, 0x142f: 0x0027, + 0x1430: 0x0029, 0x1431: 0x002b, 0x1432: 0x002d, 0x1433: 0x002f, 0x1434: 0x0031, 0x1435: 0x0033, + 0x1436: 0x0021, 0x1437: 0x0023, 0x1438: 0x0025, 0x1439: 0x0027, 0x143a: 0x0029, 0x143b: 0x002b, + 0x143c: 0x002d, 0x143d: 0x002f, 0x143e: 0x0031, 0x143f: 0x0033, // Block 0x51, offset 0x1440 - 0x1442: 0x024b, - 0x1447: 0x024e, 0x1449: 0x0293, 0x144b: 0x0281, - 0x144d: 0x0287, 0x144e: 0x0260, 0x144f: 0x0272, 0x1451: 0x0266, - 0x1452: 0x027b, 0x1454: 0x0263, 0x1457: 0x0251, - 0x1459: 0x0269, 0x145b: 0x0275, 0x145d: 0x02e7, - 0x145f: 0x0299, 0x1461: 0x023f, 0x1462: 0x024b, - 0x1464: 0x028a, 0x1467: 0x024e, 0x1468: 0x026c, 0x1469: 0x0293, - 0x146a: 0x027e, 0x146c: 0x0284, 0x146d: 0x0287, 0x146e: 0x0260, 0x146f: 0x0272, - 0x1470: 0x0278, 0x1471: 0x0266, 0x1472: 0x027b, 0x1474: 0x0263, 0x1475: 0x0245, - 0x1476: 0x0248, 0x1477: 0x0251, 0x1479: 0x0269, 0x147a: 0x026f, 0x147b: 0x0275, - 0x147c: 0x0296, 0x147e: 0x02cf, + 0x1440: 0x8133, 0x1441: 0x8133, 0x1442: 0x8133, 0x1443: 0x8133, 0x1444: 0x8133, 0x1445: 0x8133, + 0x1446: 0x8133, 0x1448: 0x8133, 0x1449: 0x8133, 0x144a: 0x8133, 0x144b: 0x8133, + 0x144c: 0x8133, 0x144d: 0x8133, 0x144e: 0x8133, 0x144f: 0x8133, 0x1450: 0x8133, 0x1451: 0x8133, + 0x1452: 0x8133, 0x1453: 0x8133, 0x1454: 0x8133, 0x1455: 0x8133, 0x1456: 0x8133, 0x1457: 0x8133, + 0x1458: 0x8133, 0x145b: 0x8133, 0x145c: 0x8133, 0x145d: 0x8133, + 0x145e: 0x8133, 0x145f: 0x8133, 0x1460: 0x8133, 0x1461: 0x8133, 0x1463: 0x8133, + 0x1464: 0x8133, 0x1466: 0x8133, 0x1467: 0x8133, 0x1468: 0x8133, 0x1469: 0x8133, + 0x146a: 0x8133, + 0x1470: 0x0290, 0x1471: 0x0293, 0x1472: 0x0296, 0x1473: 0x0299, 0x1474: 0x029c, 0x1475: 0x029f, + 0x1476: 0x02a2, 0x1477: 0x02a5, 0x1478: 0x02a8, 0x1479: 0x02ab, 0x147a: 0x02ae, 0x147b: 0x02b1, + 0x147c: 0x02b7, 0x147d: 0x02ba, 0x147e: 0x02bd, 0x147f: 0x02c0, // Block 0x52, offset 0x1480 - 0x1480: 0x023c, 0x1481: 0x023f, 0x1482: 0x024b, 0x1483: 0x0254, 0x1484: 0x028a, 0x1485: 0x028d, - 0x1486: 0x025d, 0x1487: 0x024e, 0x1488: 0x026c, 0x1489: 0x0293, 0x148b: 0x0281, - 0x148c: 0x0284, 0x148d: 0x0287, 0x148e: 0x0260, 0x148f: 0x0272, 0x1490: 0x0278, 0x1491: 0x0266, - 0x1492: 0x027b, 0x1493: 0x025a, 0x1494: 0x0263, 0x1495: 0x0245, 0x1496: 0x0248, 0x1497: 0x0251, - 0x1498: 0x0257, 0x1499: 0x0269, 0x149a: 0x026f, 0x149b: 0x0275, - 0x14a1: 0x023f, 0x14a2: 0x024b, 0x14a3: 0x0254, - 0x14a5: 0x028d, 0x14a6: 0x025d, 0x14a7: 0x024e, 0x14a8: 0x026c, 0x14a9: 0x0293, - 0x14ab: 0x0281, 0x14ac: 0x0284, 0x14ad: 0x0287, 0x14ae: 0x0260, 0x14af: 0x0272, - 0x14b0: 0x0278, 0x14b1: 0x0266, 0x14b2: 0x027b, 0x14b3: 0x025a, 0x14b4: 0x0263, 0x14b5: 0x0245, - 0x14b6: 0x0248, 0x14b7: 0x0251, 0x14b8: 0x0257, 0x14b9: 0x0269, 0x14ba: 0x026f, 0x14bb: 0x0275, + 0x1480: 0x02c3, 0x1481: 0x02c6, 0x1482: 0x02c9, 0x1483: 0x02cc, 0x1484: 0x02cf, 0x1485: 0x02d2, + 0x1486: 0x02d5, 0x1487: 0x02db, 0x1488: 0x02e1, 0x1489: 0x02e4, 0x148a: 0x1736, 0x148b: 0x0302, + 0x148c: 0x02ea, 0x148d: 0x02ed, 0x148e: 0x0305, 0x148f: 0x02f9, 0x1490: 0x02ff, 0x1491: 0x0290, + 0x1492: 0x0293, 0x1493: 0x0296, 0x1494: 0x0299, 0x1495: 0x029c, 0x1496: 0x029f, 0x1497: 0x02a2, + 0x1498: 0x02a5, 0x1499: 0x02a8, 0x149a: 0x02ab, 0x149b: 0x02ae, 0x149c: 0x02b7, 0x149d: 0x02ba, + 0x149e: 0x02c0, 0x149f: 0x02c6, 0x14a0: 0x02c9, 0x14a1: 0x02cc, 0x14a2: 0x02cf, 0x14a3: 0x02d2, + 0x14a4: 0x02d5, 0x14a5: 0x02d8, 0x14a6: 0x02db, 0x14a7: 0x02f3, 0x14a8: 0x02ea, 0x14a9: 0x02e7, + 0x14aa: 0x02f0, 0x14ab: 0x02f6, 0x14ac: 0x1732, 0x14ad: 0x02fc, // Block 0x53, offset 0x14c0 - 0x14c0: 0x187c, 0x14c1: 0x1879, 0x14c2: 0x187f, 0x14c3: 0x18a3, 0x14c4: 0x18c7, 0x14c5: 0x18eb, - 0x14c6: 0x190f, 0x14c7: 0x1918, 0x14c8: 0x191e, 0x14c9: 0x1924, 0x14ca: 0x192a, - 0x14d0: 0x1a92, 0x14d1: 0x1a96, - 0x14d2: 0x1a9a, 0x14d3: 0x1a9e, 0x14d4: 0x1aa2, 0x14d5: 0x1aa6, 0x14d6: 0x1aaa, 0x14d7: 0x1aae, - 0x14d8: 0x1ab2, 0x14d9: 0x1ab6, 0x14da: 0x1aba, 0x14db: 0x1abe, 0x14dc: 0x1ac2, 0x14dd: 0x1ac6, - 0x14de: 0x1aca, 0x14df: 0x1ace, 0x14e0: 0x1ad2, 0x14e1: 0x1ad6, 0x14e2: 0x1ada, 0x14e3: 0x1ade, - 0x14e4: 0x1ae2, 0x14e5: 0x1ae6, 0x14e6: 0x1aea, 0x14e7: 0x1aee, 0x14e8: 0x1af2, 0x14e9: 0x1af6, - 0x14ea: 0x272b, 0x14eb: 0x0047, 0x14ec: 0x0065, 0x14ed: 0x193f, 0x14ee: 0x19b7, - 0x14f0: 0x0043, 0x14f1: 0x0045, 0x14f2: 0x0047, 0x14f3: 0x0049, 0x14f4: 0x004b, 0x14f5: 0x004d, - 0x14f6: 0x004f, 0x14f7: 0x0051, 0x14f8: 0x0053, 0x14f9: 0x0055, 0x14fa: 0x0057, 0x14fb: 0x0059, - 0x14fc: 0x005b, 0x14fd: 0x005d, 0x14fe: 0x005f, 0x14ff: 0x0061, + 0x14c0: 0x032c, 0x14c1: 0x032f, 0x14c2: 0x033b, 0x14c3: 0x0344, 0x14c5: 0x037d, + 0x14c6: 0x034d, 0x14c7: 0x033e, 0x14c8: 0x035c, 0x14c9: 0x0383, 0x14ca: 0x036e, 0x14cb: 0x0371, + 0x14cc: 0x0374, 0x14cd: 0x0377, 0x14ce: 0x0350, 0x14cf: 0x0362, 0x14d0: 0x0368, 0x14d1: 0x0356, + 0x14d2: 0x036b, 0x14d3: 0x034a, 0x14d4: 0x0353, 0x14d5: 0x0335, 0x14d6: 0x0338, 0x14d7: 0x0341, + 0x14d8: 0x0347, 0x14d9: 0x0359, 0x14da: 0x035f, 0x14db: 0x0365, 0x14dc: 0x0386, 0x14dd: 0x03d7, + 0x14de: 0x03bf, 0x14df: 0x0389, 0x14e1: 0x032f, 0x14e2: 0x033b, + 0x14e4: 0x037a, 0x14e7: 0x033e, 0x14e9: 0x0383, + 0x14ea: 0x036e, 0x14eb: 0x0371, 0x14ec: 0x0374, 0x14ed: 0x0377, 0x14ee: 0x0350, 0x14ef: 0x0362, + 0x14f0: 0x0368, 0x14f1: 0x0356, 0x14f2: 0x036b, 0x14f4: 0x0353, 0x14f5: 0x0335, + 0x14f6: 0x0338, 0x14f7: 0x0341, 0x14f9: 0x0359, 0x14fb: 0x0365, // Block 0x54, offset 0x1500 - 0x1500: 0x26b3, 0x1501: 0x26c8, 0x1502: 0x0506, - 0x1510: 0x0c12, 0x1511: 0x0a4a, - 0x1512: 0x08d6, 0x1513: 0x45db, 0x1514: 0x071e, 0x1515: 0x09f2, 0x1516: 0x1332, 0x1517: 0x0a02, - 0x1518: 0x072a, 0x1519: 0x0cda, 0x151a: 0x0eb2, 0x151b: 0x0cb2, 0x151c: 0x082a, 0x151d: 0x0b6e, - 0x151e: 0x07c2, 0x151f: 0x0cba, 0x1520: 0x0816, 0x1521: 0x111a, 0x1522: 0x0f86, 0x1523: 0x138e, - 0x1524: 0x09d6, 0x1525: 0x090e, 0x1526: 0x0e66, 0x1527: 0x0c1e, 0x1528: 0x0c4a, 0x1529: 0x06c2, - 0x152a: 0x06ce, 0x152b: 0x140e, 0x152c: 0x0ade, 0x152d: 0x06ea, 0x152e: 0x08f2, 0x152f: 0x0c3e, - 0x1530: 0x13b6, 0x1531: 0x0c16, 0x1532: 0x1072, 0x1533: 0x10ae, 0x1534: 0x08fa, 0x1535: 0x0e46, - 0x1536: 0x0d0e, 0x1537: 0x0d0a, 0x1538: 0x0f9a, 0x1539: 0x082e, 0x153a: 0x095a, 0x153b: 0x1446, + 0x1502: 0x033b, + 0x1507: 0x033e, 0x1509: 0x0383, 0x150b: 0x0371, + 0x150d: 0x0377, 0x150e: 0x0350, 0x150f: 0x0362, 0x1511: 0x0356, + 0x1512: 0x036b, 0x1514: 0x0353, 0x1517: 0x0341, + 0x1519: 0x0359, 0x151b: 0x0365, 0x151d: 0x03d7, + 0x151f: 0x0389, 0x1521: 0x032f, 0x1522: 0x033b, + 0x1524: 0x037a, 0x1527: 0x033e, 0x1528: 0x035c, 0x1529: 0x0383, + 0x152a: 0x036e, 0x152c: 0x0374, 0x152d: 0x0377, 0x152e: 0x0350, 0x152f: 0x0362, + 0x1530: 0x0368, 0x1531: 0x0356, 0x1532: 0x036b, 0x1534: 0x0353, 0x1535: 0x0335, + 0x1536: 0x0338, 0x1537: 0x0341, 0x1539: 0x0359, 0x153a: 0x035f, 0x153b: 0x0365, + 0x153c: 0x0386, 0x153e: 0x03bf, // Block 0x55, offset 0x1540 - 0x1540: 0x06fe, 0x1541: 0x06f6, 0x1542: 0x0706, 0x1543: 0x164a, 0x1544: 0x074a, 0x1545: 0x075a, - 0x1546: 0x075e, 0x1547: 0x0766, 0x1548: 0x076e, 0x1549: 0x0772, 0x154a: 0x077e, 0x154b: 0x0776, - 0x154c: 0x05b6, 0x154d: 0x165e, 0x154e: 0x0792, 0x154f: 0x0796, 0x1550: 0x079a, 0x1551: 0x07b6, - 0x1552: 0x164f, 0x1553: 0x05ba, 0x1554: 0x07a2, 0x1555: 0x07c2, 0x1556: 0x1659, 0x1557: 0x07d2, - 0x1558: 0x07da, 0x1559: 0x073a, 0x155a: 0x07e2, 0x155b: 0x07e6, 0x155c: 0x1834, 0x155d: 0x0802, - 0x155e: 0x080a, 0x155f: 0x05c2, 0x1560: 0x0822, 0x1561: 0x0826, 0x1562: 0x082e, 0x1563: 0x0832, - 0x1564: 0x05c6, 0x1565: 0x084a, 0x1566: 0x084e, 0x1567: 0x085a, 0x1568: 0x0866, 0x1569: 0x086a, - 0x156a: 0x086e, 0x156b: 0x0876, 0x156c: 0x0896, 0x156d: 0x089a, 0x156e: 0x08a2, 0x156f: 0x08b2, - 0x1570: 0x08ba, 0x1571: 0x08be, 0x1572: 0x08be, 0x1573: 0x08be, 0x1574: 0x166d, 0x1575: 0x0e96, - 0x1576: 0x08d2, 0x1577: 0x08da, 0x1578: 0x1672, 0x1579: 0x08e6, 0x157a: 0x08ee, 0x157b: 0x08f6, - 0x157c: 0x091e, 0x157d: 0x090a, 0x157e: 0x0916, 0x157f: 0x091a, + 0x1540: 0x032c, 0x1541: 0x032f, 0x1542: 0x033b, 0x1543: 0x0344, 0x1544: 0x037a, 0x1545: 0x037d, + 0x1546: 0x034d, 0x1547: 0x033e, 0x1548: 0x035c, 0x1549: 0x0383, 0x154b: 0x0371, + 0x154c: 0x0374, 0x154d: 0x0377, 0x154e: 0x0350, 0x154f: 0x0362, 0x1550: 0x0368, 0x1551: 0x0356, + 0x1552: 0x036b, 0x1553: 0x034a, 0x1554: 0x0353, 0x1555: 0x0335, 0x1556: 0x0338, 0x1557: 0x0341, + 0x1558: 0x0347, 0x1559: 0x0359, 0x155a: 0x035f, 0x155b: 0x0365, + 0x1561: 0x032f, 0x1562: 0x033b, 0x1563: 0x0344, + 0x1565: 0x037d, 0x1566: 0x034d, 0x1567: 0x033e, 0x1568: 0x035c, 0x1569: 0x0383, + 0x156b: 0x0371, 0x156c: 0x0374, 0x156d: 0x0377, 0x156e: 0x0350, 0x156f: 0x0362, + 0x1570: 0x0368, 0x1571: 0x0356, 0x1572: 0x036b, 0x1573: 0x034a, 0x1574: 0x0353, 0x1575: 0x0335, + 0x1576: 0x0338, 0x1577: 0x0341, 0x1578: 0x0347, 0x1579: 0x0359, 0x157a: 0x035f, 0x157b: 0x0365, // Block 0x56, offset 0x1580 - 0x1580: 0x0922, 0x1581: 0x092a, 0x1582: 0x092e, 0x1583: 0x0936, 0x1584: 0x093e, 0x1585: 0x0942, - 0x1586: 0x0942, 0x1587: 0x094a, 0x1588: 0x0952, 0x1589: 0x0956, 0x158a: 0x0962, 0x158b: 0x0986, - 0x158c: 0x096a, 0x158d: 0x098a, 0x158e: 0x096e, 0x158f: 0x0976, 0x1590: 0x080e, 0x1591: 0x09d2, - 0x1592: 0x099a, 0x1593: 0x099e, 0x1594: 0x09a2, 0x1595: 0x0996, 0x1596: 0x09aa, 0x1597: 0x09a6, - 0x1598: 0x09be, 0x1599: 0x1677, 0x159a: 0x09da, 0x159b: 0x09de, 0x159c: 0x09e6, 0x159d: 0x09f2, - 0x159e: 0x09fa, 0x159f: 0x0a16, 0x15a0: 0x167c, 0x15a1: 0x1681, 0x15a2: 0x0a22, 0x15a3: 0x0a26, - 0x15a4: 0x0a2a, 0x15a5: 0x0a1e, 0x15a6: 0x0a32, 0x15a7: 0x05ca, 0x15a8: 0x05ce, 0x15a9: 0x0a3a, - 0x15aa: 0x0a42, 0x15ab: 0x0a42, 0x15ac: 0x1686, 0x15ad: 0x0a5e, 0x15ae: 0x0a62, 0x15af: 0x0a66, - 0x15b0: 0x0a6e, 0x15b1: 0x168b, 0x15b2: 0x0a76, 0x15b3: 0x0a7a, 0x15b4: 0x0b52, 0x15b5: 0x0a82, - 0x15b6: 0x05d2, 0x15b7: 0x0a8e, 0x15b8: 0x0a9e, 0x15b9: 0x0aaa, 0x15ba: 0x0aa6, 0x15bb: 0x1695, - 0x15bc: 0x0ab2, 0x15bd: 0x169a, 0x15be: 0x0abe, 0x15bf: 0x0aba, + 0x1580: 0x19a6, 0x1581: 0x19a3, 0x1582: 0x19a9, 0x1583: 0x19cd, 0x1584: 0x19f1, 0x1585: 0x1a15, + 0x1586: 0x1a39, 0x1587: 0x1a42, 0x1588: 0x1a48, 0x1589: 0x1a4e, 0x158a: 0x1a54, + 0x1590: 0x1bbc, 0x1591: 0x1bc0, + 0x1592: 0x1bc4, 0x1593: 0x1bc8, 0x1594: 0x1bcc, 0x1595: 0x1bd0, 0x1596: 0x1bd4, 0x1597: 0x1bd8, + 0x1598: 0x1bdc, 0x1599: 0x1be0, 0x159a: 0x1be4, 0x159b: 0x1be8, 0x159c: 0x1bec, 0x159d: 0x1bf0, + 0x159e: 0x1bf4, 0x159f: 0x1bf8, 0x15a0: 0x1bfc, 0x15a1: 0x1c00, 0x15a2: 0x1c04, 0x15a3: 0x1c08, + 0x15a4: 0x1c0c, 0x15a5: 0x1c10, 0x15a6: 0x1c14, 0x15a7: 0x1c18, 0x15a8: 0x1c1c, 0x15a9: 0x1c20, + 0x15aa: 0x2855, 0x15ab: 0x0047, 0x15ac: 0x0065, 0x15ad: 0x1a69, 0x15ae: 0x1ae1, + 0x15b0: 0x0043, 0x15b1: 0x0045, 0x15b2: 0x0047, 0x15b3: 0x0049, 0x15b4: 0x004b, 0x15b5: 0x004d, + 0x15b6: 0x004f, 0x15b7: 0x0051, 0x15b8: 0x0053, 0x15b9: 0x0055, 0x15ba: 0x0057, 0x15bb: 0x0059, + 0x15bc: 0x005b, 0x15bd: 0x005d, 0x15be: 0x005f, 0x15bf: 0x0061, // Block 0x57, offset 0x15c0 - 0x15c0: 0x0ac2, 0x15c1: 0x0ad2, 0x15c2: 0x0ad6, 0x15c3: 0x05d6, 0x15c4: 0x0ae6, 0x15c5: 0x0aee, - 0x15c6: 0x0af2, 0x15c7: 0x0af6, 0x15c8: 0x05da, 0x15c9: 0x169f, 0x15ca: 0x05de, 0x15cb: 0x0b12, - 0x15cc: 0x0b16, 0x15cd: 0x0b1a, 0x15ce: 0x0b22, 0x15cf: 0x1866, 0x15d0: 0x0b3a, 0x15d1: 0x16a9, - 0x15d2: 0x16a9, 0x15d3: 0x11da, 0x15d4: 0x0b4a, 0x15d5: 0x0b4a, 0x15d6: 0x05e2, 0x15d7: 0x16cc, - 0x15d8: 0x179e, 0x15d9: 0x0b5a, 0x15da: 0x0b62, 0x15db: 0x05e6, 0x15dc: 0x0b76, 0x15dd: 0x0b86, - 0x15de: 0x0b8a, 0x15df: 0x0b92, 0x15e0: 0x0ba2, 0x15e1: 0x05ee, 0x15e2: 0x05ea, 0x15e3: 0x0ba6, - 0x15e4: 0x16ae, 0x15e5: 0x0baa, 0x15e6: 0x0bbe, 0x15e7: 0x0bc2, 0x15e8: 0x0bc6, 0x15e9: 0x0bc2, - 0x15ea: 0x0bd2, 0x15eb: 0x0bd6, 0x15ec: 0x0be6, 0x15ed: 0x0bde, 0x15ee: 0x0be2, 0x15ef: 0x0bea, - 0x15f0: 0x0bee, 0x15f1: 0x0bf2, 0x15f2: 0x0bfe, 0x15f3: 0x0c02, 0x15f4: 0x0c1a, 0x15f5: 0x0c22, - 0x15f6: 0x0c32, 0x15f7: 0x0c46, 0x15f8: 0x16bd, 0x15f9: 0x0c42, 0x15fa: 0x0c36, 0x15fb: 0x0c4e, - 0x15fc: 0x0c56, 0x15fd: 0x0c6a, 0x15fe: 0x16c2, 0x15ff: 0x0c72, + 0x15c0: 0x27dd, 0x15c1: 0x27f2, 0x15c2: 0x05fe, + 0x15d0: 0x0d0a, 0x15d1: 0x0b42, + 0x15d2: 0x09ce, 0x15d3: 0x473b, 0x15d4: 0x0816, 0x15d5: 0x0aea, 0x15d6: 0x142a, 0x15d7: 0x0afa, + 0x15d8: 0x0822, 0x15d9: 0x0dd2, 0x15da: 0x0faa, 0x15db: 0x0daa, 0x15dc: 0x0922, 0x15dd: 0x0c66, + 0x15de: 0x08ba, 0x15df: 0x0db2, 0x15e0: 0x090e, 0x15e1: 0x1212, 0x15e2: 0x107e, 0x15e3: 0x1486, + 0x15e4: 0x0ace, 0x15e5: 0x0a06, 0x15e6: 0x0f5e, 0x15e7: 0x0d16, 0x15e8: 0x0d42, 0x15e9: 0x07ba, + 0x15ea: 0x07c6, 0x15eb: 0x1506, 0x15ec: 0x0bd6, 0x15ed: 0x07e2, 0x15ee: 0x09ea, 0x15ef: 0x0d36, + 0x15f0: 0x14ae, 0x15f1: 0x0d0e, 0x15f2: 0x116a, 0x15f3: 0x11a6, 0x15f4: 0x09f2, 0x15f5: 0x0f3e, + 0x15f6: 0x0e06, 0x15f7: 0x0e02, 0x15f8: 0x1092, 0x15f9: 0x0926, 0x15fa: 0x0a52, 0x15fb: 0x153e, // Block 0x58, offset 0x1600 - 0x1600: 0x0c66, 0x1601: 0x0c5e, 0x1602: 0x05f2, 0x1603: 0x0c7a, 0x1604: 0x0c82, 0x1605: 0x0c8a, - 0x1606: 0x0c7e, 0x1607: 0x05f6, 0x1608: 0x0c9a, 0x1609: 0x0ca2, 0x160a: 0x16c7, 0x160b: 0x0cce, - 0x160c: 0x0d02, 0x160d: 0x0cde, 0x160e: 0x0602, 0x160f: 0x0cea, 0x1610: 0x05fe, 0x1611: 0x05fa, - 0x1612: 0x07c6, 0x1613: 0x07ca, 0x1614: 0x0d06, 0x1615: 0x0cee, 0x1616: 0x11ae, 0x1617: 0x0666, - 0x1618: 0x0d12, 0x1619: 0x0d16, 0x161a: 0x0d1a, 0x161b: 0x0d2e, 0x161c: 0x0d26, 0x161d: 0x16e0, - 0x161e: 0x0606, 0x161f: 0x0d42, 0x1620: 0x0d36, 0x1621: 0x0d52, 0x1622: 0x0d5a, 0x1623: 0x16ea, - 0x1624: 0x0d5e, 0x1625: 0x0d4a, 0x1626: 0x0d66, 0x1627: 0x060a, 0x1628: 0x0d6a, 0x1629: 0x0d6e, - 0x162a: 0x0d72, 0x162b: 0x0d7e, 0x162c: 0x16ef, 0x162d: 0x0d86, 0x162e: 0x060e, 0x162f: 0x0d92, - 0x1630: 0x16f4, 0x1631: 0x0d96, 0x1632: 0x0612, 0x1633: 0x0da2, 0x1634: 0x0dae, 0x1635: 0x0dba, - 0x1636: 0x0dbe, 0x1637: 0x16f9, 0x1638: 0x1690, 0x1639: 0x16fe, 0x163a: 0x0dde, 0x163b: 0x1703, - 0x163c: 0x0dea, 0x163d: 0x0df2, 0x163e: 0x0de2, 0x163f: 0x0dfe, + 0x1600: 0x07f6, 0x1601: 0x07ee, 0x1602: 0x07fe, 0x1603: 0x1774, 0x1604: 0x0842, 0x1605: 0x0852, + 0x1606: 0x0856, 0x1607: 0x085e, 0x1608: 0x0866, 0x1609: 0x086a, 0x160a: 0x0876, 0x160b: 0x086e, + 0x160c: 0x06ae, 0x160d: 0x1788, 0x160e: 0x088a, 0x160f: 0x088e, 0x1610: 0x0892, 0x1611: 0x08ae, + 0x1612: 0x1779, 0x1613: 0x06b2, 0x1614: 0x089a, 0x1615: 0x08ba, 0x1616: 0x1783, 0x1617: 0x08ca, + 0x1618: 0x08d2, 0x1619: 0x0832, 0x161a: 0x08da, 0x161b: 0x08de, 0x161c: 0x195e, 0x161d: 0x08fa, + 0x161e: 0x0902, 0x161f: 0x06ba, 0x1620: 0x091a, 0x1621: 0x091e, 0x1622: 0x0926, 0x1623: 0x092a, + 0x1624: 0x06be, 0x1625: 0x0942, 0x1626: 0x0946, 0x1627: 0x0952, 0x1628: 0x095e, 0x1629: 0x0962, + 0x162a: 0x0966, 0x162b: 0x096e, 0x162c: 0x098e, 0x162d: 0x0992, 0x162e: 0x099a, 0x162f: 0x09aa, + 0x1630: 0x09b2, 0x1631: 0x09b6, 0x1632: 0x09b6, 0x1633: 0x09b6, 0x1634: 0x1797, 0x1635: 0x0f8e, + 0x1636: 0x09ca, 0x1637: 0x09d2, 0x1638: 0x179c, 0x1639: 0x09de, 0x163a: 0x09e6, 0x163b: 0x09ee, + 0x163c: 0x0a16, 0x163d: 0x0a02, 0x163e: 0x0a0e, 0x163f: 0x0a12, // Block 0x59, offset 0x1640 - 0x1640: 0x0e0e, 0x1641: 0x0e1e, 0x1642: 0x0e12, 0x1643: 0x0e16, 0x1644: 0x0e22, 0x1645: 0x0e26, - 0x1646: 0x1708, 0x1647: 0x0e0a, 0x1648: 0x0e3e, 0x1649: 0x0e42, 0x164a: 0x0616, 0x164b: 0x0e56, - 0x164c: 0x0e52, 0x164d: 0x170d, 0x164e: 0x0e36, 0x164f: 0x0e72, 0x1650: 0x1712, 0x1651: 0x1717, - 0x1652: 0x0e76, 0x1653: 0x0e8a, 0x1654: 0x0e86, 0x1655: 0x0e82, 0x1656: 0x061a, 0x1657: 0x0e8e, - 0x1658: 0x0e9e, 0x1659: 0x0e9a, 0x165a: 0x0ea6, 0x165b: 0x1654, 0x165c: 0x0eb6, 0x165d: 0x171c, - 0x165e: 0x0ec2, 0x165f: 0x1726, 0x1660: 0x0ed6, 0x1661: 0x0ee2, 0x1662: 0x0ef6, 0x1663: 0x172b, - 0x1664: 0x0f0a, 0x1665: 0x0f0e, 0x1666: 0x1730, 0x1667: 0x1735, 0x1668: 0x0f2a, 0x1669: 0x0f3a, - 0x166a: 0x061e, 0x166b: 0x0f3e, 0x166c: 0x0622, 0x166d: 0x0622, 0x166e: 0x0f56, 0x166f: 0x0f5a, - 0x1670: 0x0f62, 0x1671: 0x0f66, 0x1672: 0x0f72, 0x1673: 0x0626, 0x1674: 0x0f8a, 0x1675: 0x173a, - 0x1676: 0x0fa6, 0x1677: 0x173f, 0x1678: 0x0fb2, 0x1679: 0x16a4, 0x167a: 0x0fc2, 0x167b: 0x1744, - 0x167c: 0x1749, 0x167d: 0x174e, 0x167e: 0x062a, 0x167f: 0x062e, + 0x1640: 0x0a1a, 0x1641: 0x0a22, 0x1642: 0x0a26, 0x1643: 0x0a2e, 0x1644: 0x0a36, 0x1645: 0x0a3a, + 0x1646: 0x0a3a, 0x1647: 0x0a42, 0x1648: 0x0a4a, 0x1649: 0x0a4e, 0x164a: 0x0a5a, 0x164b: 0x0a7e, + 0x164c: 0x0a62, 0x164d: 0x0a82, 0x164e: 0x0a66, 0x164f: 0x0a6e, 0x1650: 0x0906, 0x1651: 0x0aca, + 0x1652: 0x0a92, 0x1653: 0x0a96, 0x1654: 0x0a9a, 0x1655: 0x0a8e, 0x1656: 0x0aa2, 0x1657: 0x0a9e, + 0x1658: 0x0ab6, 0x1659: 0x17a1, 0x165a: 0x0ad2, 0x165b: 0x0ad6, 0x165c: 0x0ade, 0x165d: 0x0aea, + 0x165e: 0x0af2, 0x165f: 0x0b0e, 0x1660: 0x17a6, 0x1661: 0x17ab, 0x1662: 0x0b1a, 0x1663: 0x0b1e, + 0x1664: 0x0b22, 0x1665: 0x0b16, 0x1666: 0x0b2a, 0x1667: 0x06c2, 0x1668: 0x06c6, 0x1669: 0x0b32, + 0x166a: 0x0b3a, 0x166b: 0x0b3a, 0x166c: 0x17b0, 0x166d: 0x0b56, 0x166e: 0x0b5a, 0x166f: 0x0b5e, + 0x1670: 0x0b66, 0x1671: 0x17b5, 0x1672: 0x0b6e, 0x1673: 0x0b72, 0x1674: 0x0c4a, 0x1675: 0x0b7a, + 0x1676: 0x06ca, 0x1677: 0x0b86, 0x1678: 0x0b96, 0x1679: 0x0ba2, 0x167a: 0x0b9e, 0x167b: 0x17bf, + 0x167c: 0x0baa, 0x167d: 0x17c4, 0x167e: 0x0bb6, 0x167f: 0x0bb2, // Block 0x5a, offset 0x1680 - 0x1680: 0x0ffa, 0x1681: 0x1758, 0x1682: 0x1753, 0x1683: 0x175d, 0x1684: 0x1762, 0x1685: 0x1002, - 0x1686: 0x1006, 0x1687: 0x1006, 0x1688: 0x100e, 0x1689: 0x0636, 0x168a: 0x1012, 0x168b: 0x063a, - 0x168c: 0x063e, 0x168d: 0x176c, 0x168e: 0x1026, 0x168f: 0x102e, 0x1690: 0x103a, 0x1691: 0x0642, - 0x1692: 0x1771, 0x1693: 0x105e, 0x1694: 0x1776, 0x1695: 0x177b, 0x1696: 0x107e, 0x1697: 0x1096, - 0x1698: 0x0646, 0x1699: 0x109e, 0x169a: 0x10a2, 0x169b: 0x10a6, 0x169c: 0x1780, 0x169d: 0x1785, - 0x169e: 0x1785, 0x169f: 0x10be, 0x16a0: 0x064a, 0x16a1: 0x178a, 0x16a2: 0x10d2, 0x16a3: 0x10d6, - 0x16a4: 0x064e, 0x16a5: 0x178f, 0x16a6: 0x10f2, 0x16a7: 0x0652, 0x16a8: 0x1102, 0x16a9: 0x10fa, - 0x16aa: 0x110a, 0x16ab: 0x1799, 0x16ac: 0x1122, 0x16ad: 0x0656, 0x16ae: 0x112e, 0x16af: 0x1136, - 0x16b0: 0x1146, 0x16b1: 0x065a, 0x16b2: 0x17a3, 0x16b3: 0x17a8, 0x16b4: 0x065e, 0x16b5: 0x17ad, - 0x16b6: 0x115e, 0x16b7: 0x17b2, 0x16b8: 0x116a, 0x16b9: 0x1176, 0x16ba: 0x117e, 0x16bb: 0x17b7, - 0x16bc: 0x17bc, 0x16bd: 0x1192, 0x16be: 0x17c1, 0x16bf: 0x119a, + 0x1680: 0x0bba, 0x1681: 0x0bca, 0x1682: 0x0bce, 0x1683: 0x06ce, 0x1684: 0x0bde, 0x1685: 0x0be6, + 0x1686: 0x0bea, 0x1687: 0x0bee, 0x1688: 0x06d2, 0x1689: 0x17c9, 0x168a: 0x06d6, 0x168b: 0x0c0a, + 0x168c: 0x0c0e, 0x168d: 0x0c12, 0x168e: 0x0c1a, 0x168f: 0x1990, 0x1690: 0x0c32, 0x1691: 0x17d3, + 0x1692: 0x17d3, 0x1693: 0x12d2, 0x1694: 0x0c42, 0x1695: 0x0c42, 0x1696: 0x06da, 0x1697: 0x17f6, + 0x1698: 0x18c8, 0x1699: 0x0c52, 0x169a: 0x0c5a, 0x169b: 0x06de, 0x169c: 0x0c6e, 0x169d: 0x0c7e, + 0x169e: 0x0c82, 0x169f: 0x0c8a, 0x16a0: 0x0c9a, 0x16a1: 0x06e6, 0x16a2: 0x06e2, 0x16a3: 0x0c9e, + 0x16a4: 0x17d8, 0x16a5: 0x0ca2, 0x16a6: 0x0cb6, 0x16a7: 0x0cba, 0x16a8: 0x0cbe, 0x16a9: 0x0cba, + 0x16aa: 0x0cca, 0x16ab: 0x0cce, 0x16ac: 0x0cde, 0x16ad: 0x0cd6, 0x16ae: 0x0cda, 0x16af: 0x0ce2, + 0x16b0: 0x0ce6, 0x16b1: 0x0cea, 0x16b2: 0x0cf6, 0x16b3: 0x0cfa, 0x16b4: 0x0d12, 0x16b5: 0x0d1a, + 0x16b6: 0x0d2a, 0x16b7: 0x0d3e, 0x16b8: 0x17e7, 0x16b9: 0x0d3a, 0x16ba: 0x0d2e, 0x16bb: 0x0d46, + 0x16bc: 0x0d4e, 0x16bd: 0x0d62, 0x16be: 0x17ec, 0x16bf: 0x0d6a, // Block 0x5b, offset 0x16c0 - 0x16c0: 0x16d1, 0x16c1: 0x0662, 0x16c2: 0x11b2, 0x16c3: 0x11b6, 0x16c4: 0x066a, 0x16c5: 0x11ba, - 0x16c6: 0x0a36, 0x16c7: 0x17c6, 0x16c8: 0x17cb, 0x16c9: 0x16d6, 0x16ca: 0x16db, 0x16cb: 0x11da, - 0x16cc: 0x11de, 0x16cd: 0x13f6, 0x16ce: 0x066e, 0x16cf: 0x120a, 0x16d0: 0x1206, 0x16d1: 0x120e, - 0x16d2: 0x0842, 0x16d3: 0x1212, 0x16d4: 0x1216, 0x16d5: 0x121a, 0x16d6: 0x1222, 0x16d7: 0x17d0, - 0x16d8: 0x121e, 0x16d9: 0x1226, 0x16da: 0x123a, 0x16db: 0x123e, 0x16dc: 0x122a, 0x16dd: 0x1242, - 0x16de: 0x1256, 0x16df: 0x126a, 0x16e0: 0x1236, 0x16e1: 0x124a, 0x16e2: 0x124e, 0x16e3: 0x1252, - 0x16e4: 0x17d5, 0x16e5: 0x17df, 0x16e6: 0x17da, 0x16e7: 0x0672, 0x16e8: 0x1272, 0x16e9: 0x1276, - 0x16ea: 0x127e, 0x16eb: 0x17f3, 0x16ec: 0x1282, 0x16ed: 0x17e4, 0x16ee: 0x0676, 0x16ef: 0x067a, - 0x16f0: 0x17e9, 0x16f1: 0x17ee, 0x16f2: 0x067e, 0x16f3: 0x12a2, 0x16f4: 0x12a6, 0x16f5: 0x12aa, - 0x16f6: 0x12ae, 0x16f7: 0x12ba, 0x16f8: 0x12b6, 0x16f9: 0x12c2, 0x16fa: 0x12be, 0x16fb: 0x12ce, - 0x16fc: 0x12c6, 0x16fd: 0x12ca, 0x16fe: 0x12d2, 0x16ff: 0x0682, + 0x16c0: 0x0d5e, 0x16c1: 0x0d56, 0x16c2: 0x06ea, 0x16c3: 0x0d72, 0x16c4: 0x0d7a, 0x16c5: 0x0d82, + 0x16c6: 0x0d76, 0x16c7: 0x06ee, 0x16c8: 0x0d92, 0x16c9: 0x0d9a, 0x16ca: 0x17f1, 0x16cb: 0x0dc6, + 0x16cc: 0x0dfa, 0x16cd: 0x0dd6, 0x16ce: 0x06fa, 0x16cf: 0x0de2, 0x16d0: 0x06f6, 0x16d1: 0x06f2, + 0x16d2: 0x08be, 0x16d3: 0x08c2, 0x16d4: 0x0dfe, 0x16d5: 0x0de6, 0x16d6: 0x12a6, 0x16d7: 0x075e, + 0x16d8: 0x0e0a, 0x16d9: 0x0e0e, 0x16da: 0x0e12, 0x16db: 0x0e26, 0x16dc: 0x0e1e, 0x16dd: 0x180a, + 0x16de: 0x06fe, 0x16df: 0x0e3a, 0x16e0: 0x0e2e, 0x16e1: 0x0e4a, 0x16e2: 0x0e52, 0x16e3: 0x1814, + 0x16e4: 0x0e56, 0x16e5: 0x0e42, 0x16e6: 0x0e5e, 0x16e7: 0x0702, 0x16e8: 0x0e62, 0x16e9: 0x0e66, + 0x16ea: 0x0e6a, 0x16eb: 0x0e76, 0x16ec: 0x1819, 0x16ed: 0x0e7e, 0x16ee: 0x0706, 0x16ef: 0x0e8a, + 0x16f0: 0x181e, 0x16f1: 0x0e8e, 0x16f2: 0x070a, 0x16f3: 0x0e9a, 0x16f4: 0x0ea6, 0x16f5: 0x0eb2, + 0x16f6: 0x0eb6, 0x16f7: 0x1823, 0x16f8: 0x17ba, 0x16f9: 0x1828, 0x16fa: 0x0ed6, 0x16fb: 0x182d, + 0x16fc: 0x0ee2, 0x16fd: 0x0eea, 0x16fe: 0x0eda, 0x16ff: 0x0ef6, // Block 0x5c, offset 0x1700 - 0x1700: 0x12da, 0x1701: 0x12de, 0x1702: 0x0686, 0x1703: 0x12ee, 0x1704: 0x12f2, 0x1705: 0x17f8, - 0x1706: 0x12fe, 0x1707: 0x1302, 0x1708: 0x068a, 0x1709: 0x130e, 0x170a: 0x05be, 0x170b: 0x17fd, - 0x170c: 0x1802, 0x170d: 0x068e, 0x170e: 0x0692, 0x170f: 0x133a, 0x1710: 0x1352, 0x1711: 0x136e, - 0x1712: 0x137e, 0x1713: 0x1807, 0x1714: 0x1392, 0x1715: 0x1396, 0x1716: 0x13ae, 0x1717: 0x13ba, - 0x1718: 0x1811, 0x1719: 0x1663, 0x171a: 0x13c6, 0x171b: 0x13c2, 0x171c: 0x13ce, 0x171d: 0x1668, - 0x171e: 0x13da, 0x171f: 0x13e6, 0x1720: 0x1816, 0x1721: 0x181b, 0x1722: 0x1426, 0x1723: 0x1432, - 0x1724: 0x143a, 0x1725: 0x1820, 0x1726: 0x143e, 0x1727: 0x146a, 0x1728: 0x1476, 0x1729: 0x147a, - 0x172a: 0x1472, 0x172b: 0x1486, 0x172c: 0x148a, 0x172d: 0x1825, 0x172e: 0x1496, 0x172f: 0x0696, - 0x1730: 0x149e, 0x1731: 0x182a, 0x1732: 0x069a, 0x1733: 0x14d6, 0x1734: 0x0ac6, 0x1735: 0x14ee, - 0x1736: 0x182f, 0x1737: 0x1839, 0x1738: 0x069e, 0x1739: 0x06a2, 0x173a: 0x1516, 0x173b: 0x183e, - 0x173c: 0x06a6, 0x173d: 0x1843, 0x173e: 0x152e, 0x173f: 0x152e, + 0x1700: 0x0f06, 0x1701: 0x0f16, 0x1702: 0x0f0a, 0x1703: 0x0f0e, 0x1704: 0x0f1a, 0x1705: 0x0f1e, + 0x1706: 0x1832, 0x1707: 0x0f02, 0x1708: 0x0f36, 0x1709: 0x0f3a, 0x170a: 0x070e, 0x170b: 0x0f4e, + 0x170c: 0x0f4a, 0x170d: 0x1837, 0x170e: 0x0f2e, 0x170f: 0x0f6a, 0x1710: 0x183c, 0x1711: 0x1841, + 0x1712: 0x0f6e, 0x1713: 0x0f82, 0x1714: 0x0f7e, 0x1715: 0x0f7a, 0x1716: 0x0712, 0x1717: 0x0f86, + 0x1718: 0x0f96, 0x1719: 0x0f92, 0x171a: 0x0f9e, 0x171b: 0x177e, 0x171c: 0x0fae, 0x171d: 0x1846, + 0x171e: 0x0fba, 0x171f: 0x1850, 0x1720: 0x0fce, 0x1721: 0x0fda, 0x1722: 0x0fee, 0x1723: 0x1855, + 0x1724: 0x1002, 0x1725: 0x1006, 0x1726: 0x185a, 0x1727: 0x185f, 0x1728: 0x1022, 0x1729: 0x1032, + 0x172a: 0x0716, 0x172b: 0x1036, 0x172c: 0x071a, 0x172d: 0x071a, 0x172e: 0x104e, 0x172f: 0x1052, + 0x1730: 0x105a, 0x1731: 0x105e, 0x1732: 0x106a, 0x1733: 0x071e, 0x1734: 0x1082, 0x1735: 0x1864, + 0x1736: 0x109e, 0x1737: 0x1869, 0x1738: 0x10aa, 0x1739: 0x17ce, 0x173a: 0x10ba, 0x173b: 0x186e, + 0x173c: 0x1873, 0x173d: 0x1878, 0x173e: 0x0722, 0x173f: 0x0726, // Block 0x5d, offset 0x1740 - 0x1740: 0x1536, 0x1741: 0x1848, 0x1742: 0x154e, 0x1743: 0x06aa, 0x1744: 0x155e, 0x1745: 0x156a, - 0x1746: 0x1572, 0x1747: 0x157a, 0x1748: 0x06ae, 0x1749: 0x184d, 0x174a: 0x158e, 0x174b: 0x15aa, - 0x174c: 0x15b6, 0x174d: 0x06b2, 0x174e: 0x06b6, 0x174f: 0x15ba, 0x1750: 0x1852, 0x1751: 0x06ba, - 0x1752: 0x1857, 0x1753: 0x185c, 0x1754: 0x1861, 0x1755: 0x15de, 0x1756: 0x06be, 0x1757: 0x15f2, - 0x1758: 0x15fa, 0x1759: 0x15fe, 0x175a: 0x1606, 0x175b: 0x160e, 0x175c: 0x1616, 0x175d: 0x186b, + 0x1740: 0x10f2, 0x1741: 0x1882, 0x1742: 0x187d, 0x1743: 0x1887, 0x1744: 0x188c, 0x1745: 0x10fa, + 0x1746: 0x10fe, 0x1747: 0x10fe, 0x1748: 0x1106, 0x1749: 0x072e, 0x174a: 0x110a, 0x174b: 0x0732, + 0x174c: 0x0736, 0x174d: 0x1896, 0x174e: 0x111e, 0x174f: 0x1126, 0x1750: 0x1132, 0x1751: 0x073a, + 0x1752: 0x189b, 0x1753: 0x1156, 0x1754: 0x18a0, 0x1755: 0x18a5, 0x1756: 0x1176, 0x1757: 0x118e, + 0x1758: 0x073e, 0x1759: 0x1196, 0x175a: 0x119a, 0x175b: 0x119e, 0x175c: 0x18aa, 0x175d: 0x18af, + 0x175e: 0x18af, 0x175f: 0x11b6, 0x1760: 0x0742, 0x1761: 0x18b4, 0x1762: 0x11ca, 0x1763: 0x11ce, + 0x1764: 0x0746, 0x1765: 0x18b9, 0x1766: 0x11ea, 0x1767: 0x074a, 0x1768: 0x11fa, 0x1769: 0x11f2, + 0x176a: 0x1202, 0x176b: 0x18c3, 0x176c: 0x121a, 0x176d: 0x074e, 0x176e: 0x1226, 0x176f: 0x122e, + 0x1770: 0x123e, 0x1771: 0x0752, 0x1772: 0x18cd, 0x1773: 0x18d2, 0x1774: 0x0756, 0x1775: 0x18d7, + 0x1776: 0x1256, 0x1777: 0x18dc, 0x1778: 0x1262, 0x1779: 0x126e, 0x177a: 0x1276, 0x177b: 0x18e1, + 0x177c: 0x18e6, 0x177d: 0x128a, 0x177e: 0x18eb, 0x177f: 0x1292, + // Block 0x5e, offset 0x1780 + 0x1780: 0x17fb, 0x1781: 0x075a, 0x1782: 0x12aa, 0x1783: 0x12ae, 0x1784: 0x0762, 0x1785: 0x12b2, + 0x1786: 0x0b2e, 0x1787: 0x18f0, 0x1788: 0x18f5, 0x1789: 0x1800, 0x178a: 0x1805, 0x178b: 0x12d2, + 0x178c: 0x12d6, 0x178d: 0x14ee, 0x178e: 0x0766, 0x178f: 0x1302, 0x1790: 0x12fe, 0x1791: 0x1306, + 0x1792: 0x093a, 0x1793: 0x130a, 0x1794: 0x130e, 0x1795: 0x1312, 0x1796: 0x131a, 0x1797: 0x18fa, + 0x1798: 0x1316, 0x1799: 0x131e, 0x179a: 0x1332, 0x179b: 0x1336, 0x179c: 0x1322, 0x179d: 0x133a, + 0x179e: 0x134e, 0x179f: 0x1362, 0x17a0: 0x132e, 0x17a1: 0x1342, 0x17a2: 0x1346, 0x17a3: 0x134a, + 0x17a4: 0x18ff, 0x17a5: 0x1909, 0x17a6: 0x1904, 0x17a7: 0x076a, 0x17a8: 0x136a, 0x17a9: 0x136e, + 0x17aa: 0x1376, 0x17ab: 0x191d, 0x17ac: 0x137a, 0x17ad: 0x190e, 0x17ae: 0x076e, 0x17af: 0x0772, + 0x17b0: 0x1913, 0x17b1: 0x1918, 0x17b2: 0x0776, 0x17b3: 0x139a, 0x17b4: 0x139e, 0x17b5: 0x13a2, + 0x17b6: 0x13a6, 0x17b7: 0x13b2, 0x17b8: 0x13ae, 0x17b9: 0x13ba, 0x17ba: 0x13b6, 0x17bb: 0x13c6, + 0x17bc: 0x13be, 0x17bd: 0x13c2, 0x17be: 0x13ca, 0x17bf: 0x077a, + // Block 0x5f, offset 0x17c0 + 0x17c0: 0x13d2, 0x17c1: 0x13d6, 0x17c2: 0x077e, 0x17c3: 0x13e6, 0x17c4: 0x13ea, 0x17c5: 0x1922, + 0x17c6: 0x13f6, 0x17c7: 0x13fa, 0x17c8: 0x0782, 0x17c9: 0x1406, 0x17ca: 0x06b6, 0x17cb: 0x1927, + 0x17cc: 0x192c, 0x17cd: 0x0786, 0x17ce: 0x078a, 0x17cf: 0x1432, 0x17d0: 0x144a, 0x17d1: 0x1466, + 0x17d2: 0x1476, 0x17d3: 0x1931, 0x17d4: 0x148a, 0x17d5: 0x148e, 0x17d6: 0x14a6, 0x17d7: 0x14b2, + 0x17d8: 0x193b, 0x17d9: 0x178d, 0x17da: 0x14be, 0x17db: 0x14ba, 0x17dc: 0x14c6, 0x17dd: 0x1792, + 0x17de: 0x14d2, 0x17df: 0x14de, 0x17e0: 0x1940, 0x17e1: 0x1945, 0x17e2: 0x151e, 0x17e3: 0x152a, + 0x17e4: 0x1532, 0x17e5: 0x194a, 0x17e6: 0x1536, 0x17e7: 0x1562, 0x17e8: 0x156e, 0x17e9: 0x1572, + 0x17ea: 0x156a, 0x17eb: 0x157e, 0x17ec: 0x1582, 0x17ed: 0x194f, 0x17ee: 0x158e, 0x17ef: 0x078e, + 0x17f0: 0x1596, 0x17f1: 0x1954, 0x17f2: 0x0792, 0x17f3: 0x15ce, 0x17f4: 0x0bbe, 0x17f5: 0x15e6, + 0x17f6: 0x1959, 0x17f7: 0x1963, 0x17f8: 0x0796, 0x17f9: 0x079a, 0x17fa: 0x160e, 0x17fb: 0x1968, + 0x17fc: 0x079e, 0x17fd: 0x196d, 0x17fe: 0x1626, 0x17ff: 0x1626, + // Block 0x60, offset 0x1800 + 0x1800: 0x162e, 0x1801: 0x1972, 0x1802: 0x1646, 0x1803: 0x07a2, 0x1804: 0x1656, 0x1805: 0x1662, + 0x1806: 0x166a, 0x1807: 0x1672, 0x1808: 0x07a6, 0x1809: 0x1977, 0x180a: 0x1686, 0x180b: 0x16a2, + 0x180c: 0x16ae, 0x180d: 0x07aa, 0x180e: 0x07ae, 0x180f: 0x16b2, 0x1810: 0x197c, 0x1811: 0x07b2, + 0x1812: 0x1981, 0x1813: 0x1986, 0x1814: 0x198b, 0x1815: 0x16d6, 0x1816: 0x07b6, 0x1817: 0x16ea, + 0x1818: 0x16f2, 0x1819: 0x16f6, 0x181a: 0x16fe, 0x181b: 0x1706, 0x181c: 0x170e, 0x181d: 0x1995, } -// nfkcIndex: 22 blocks, 1408 entries, 2816 bytes +// nfkcIndex: 23 blocks, 1472 entries, 2944 bytes // Block 0 is the zero block. -var nfkcIndex = [1408]uint16{ +var nfkcIndex = [1472]uint16{ // Block 0x0, offset 0x0 // Block 0x1, offset 0x40 // Block 0x2, offset 0x80 // Block 0x3, offset 0xc0 - 0xc2: 0x5c, 0xc3: 0x01, 0xc4: 0x02, 0xc5: 0x03, 0xc6: 0x5d, 0xc7: 0x04, - 0xc8: 0x05, 0xca: 0x5e, 0xcb: 0x5f, 0xcc: 0x06, 0xcd: 0x07, 0xce: 0x08, 0xcf: 0x09, - 0xd0: 0x0a, 0xd1: 0x60, 0xd2: 0x61, 0xd3: 0x0b, 0xd6: 0x0c, 0xd7: 0x62, - 0xd8: 0x63, 0xd9: 0x0d, 0xdb: 0x64, 0xdc: 0x65, 0xdd: 0x66, 0xdf: 0x67, + 0xc2: 0x5f, 0xc3: 0x01, 0xc4: 0x02, 0xc5: 0x03, 0xc6: 0x60, 0xc7: 0x04, + 0xc8: 0x05, 0xca: 0x61, 0xcb: 0x62, 0xcc: 0x06, 0xcd: 0x07, 0xce: 0x08, 0xcf: 0x09, + 0xd0: 0x0a, 0xd1: 0x63, 0xd2: 0x64, 0xd3: 0x0b, 0xd6: 0x0c, 0xd7: 0x65, + 0xd8: 0x66, 0xd9: 0x0d, 0xdb: 0x67, 0xdc: 0x68, 0xdd: 0x69, 0xdf: 0x6a, 0xe0: 0x02, 0xe1: 0x03, 0xe2: 0x04, 0xe3: 0x05, 0xea: 0x06, 0xeb: 0x07, 0xec: 0x08, 0xed: 0x09, 0xef: 0x0a, - 0xf0: 0x13, + 0xf0: 0x14, // Block 0x4, offset 0x100 - 0x120: 0x68, 0x121: 0x69, 0x123: 0x0e, 0x124: 0x6a, 0x125: 0x6b, 0x126: 0x6c, 0x127: 0x6d, - 0x128: 0x6e, 0x129: 0x6f, 0x12a: 0x70, 0x12b: 0x71, 0x12c: 0x6c, 0x12d: 0x72, 0x12e: 0x73, 0x12f: 0x74, - 0x131: 0x75, 0x132: 0x76, 0x133: 0x77, 0x134: 0x78, 0x135: 0x79, 0x137: 0x7a, - 0x138: 0x7b, 0x139: 0x7c, 0x13a: 0x7d, 0x13b: 0x7e, 0x13c: 0x7f, 0x13d: 0x80, 0x13e: 0x81, 0x13f: 0x82, + 0x120: 0x6b, 0x121: 0x6c, 0x122: 0x6d, 0x123: 0x0e, 0x124: 0x6e, 0x125: 0x6f, 0x126: 0x70, 0x127: 0x71, + 0x128: 0x72, 0x129: 0x73, 0x12a: 0x74, 0x12b: 0x75, 0x12c: 0x70, 0x12d: 0x76, 0x12e: 0x77, 0x12f: 0x78, + 0x130: 0x74, 0x131: 0x79, 0x132: 0x7a, 0x133: 0x7b, 0x134: 0x7c, 0x135: 0x7d, 0x137: 0x7e, + 0x138: 0x7f, 0x139: 0x80, 0x13a: 0x81, 0x13b: 0x82, 0x13c: 0x83, 0x13d: 0x84, 0x13e: 0x85, 0x13f: 0x86, // Block 0x5, offset 0x140 - 0x140: 0x83, 0x142: 0x84, 0x143: 0x85, 0x144: 0x86, 0x145: 0x87, 0x146: 0x88, 0x147: 0x89, - 0x14d: 0x8a, - 0x15c: 0x8b, 0x15f: 0x8c, - 0x162: 0x8d, 0x164: 0x8e, - 0x168: 0x8f, 0x169: 0x90, 0x16a: 0x91, 0x16b: 0x92, 0x16c: 0x0f, 0x16d: 0x93, 0x16e: 0x94, 0x16f: 0x95, - 0x170: 0x96, 0x173: 0x97, 0x174: 0x98, 0x175: 0x10, 0x176: 0x11, 0x177: 0x12, + 0x140: 0x87, 0x142: 0x88, 0x143: 0x89, 0x144: 0x8a, 0x145: 0x8b, 0x146: 0x8c, 0x147: 0x8d, + 0x14d: 0x8e, + 0x15c: 0x8f, 0x15f: 0x90, + 0x162: 0x91, 0x164: 0x92, + 0x168: 0x93, 0x169: 0x94, 0x16a: 0x95, 0x16b: 0x96, 0x16c: 0x0f, 0x16d: 0x97, 0x16e: 0x98, 0x16f: 0x99, + 0x170: 0x9a, 0x173: 0x9b, 0x174: 0x9c, 0x175: 0x10, 0x176: 0x11, 0x177: 0x12, 0x178: 0x13, 0x179: 0x14, 0x17a: 0x15, 0x17b: 0x16, 0x17c: 0x17, 0x17d: 0x18, 0x17e: 0x19, 0x17f: 0x1a, // Block 0x6, offset 0x180 - 0x180: 0x99, 0x181: 0x9a, 0x182: 0x9b, 0x183: 0x9c, 0x184: 0x1b, 0x185: 0x1c, 0x186: 0x9d, 0x187: 0x9e, - 0x188: 0x9f, 0x189: 0x1d, 0x18a: 0x1e, 0x18b: 0xa0, 0x18c: 0xa1, - 0x191: 0x1f, 0x192: 0x20, 0x193: 0xa2, - 0x1a8: 0xa3, 0x1a9: 0xa4, 0x1ab: 0xa5, - 0x1b1: 0xa6, 0x1b3: 0xa7, 0x1b5: 0xa8, 0x1b7: 0xa9, - 0x1ba: 0xaa, 0x1bb: 0xab, 0x1bc: 0x21, 0x1bd: 0x22, 0x1be: 0x23, 0x1bf: 0xac, + 0x180: 0x9d, 0x181: 0x9e, 0x182: 0x9f, 0x183: 0xa0, 0x184: 0x1b, 0x185: 0x1c, 0x186: 0xa1, 0x187: 0xa2, + 0x188: 0xa3, 0x189: 0x1d, 0x18a: 0x1e, 0x18b: 0xa4, 0x18c: 0xa5, + 0x191: 0x1f, 0x192: 0x20, 0x193: 0xa6, + 0x1a8: 0xa7, 0x1a9: 0xa8, 0x1ab: 0xa9, + 0x1b1: 0xaa, 0x1b3: 0xab, 0x1b5: 0xac, 0x1b7: 0xad, + 0x1ba: 0xae, 0x1bb: 0xaf, 0x1bc: 0x21, 0x1bd: 0x22, 0x1be: 0x23, 0x1bf: 0xb0, // Block 0x7, offset 0x1c0 - 0x1c0: 0xad, 0x1c1: 0x24, 0x1c2: 0x25, 0x1c3: 0x26, 0x1c4: 0xae, 0x1c5: 0x27, 0x1c6: 0x28, + 0x1c0: 0xb1, 0x1c1: 0x24, 0x1c2: 0x25, 0x1c3: 0x26, 0x1c4: 0xb2, 0x1c5: 0x27, 0x1c6: 0x28, 0x1c8: 0x29, 0x1c9: 0x2a, 0x1ca: 0x2b, 0x1cb: 0x2c, 0x1cc: 0x2d, 0x1cd: 0x2e, 0x1ce: 0x2f, 0x1cf: 0x30, // Block 0x8, offset 0x200 - 0x219: 0xaf, 0x21a: 0xb0, 0x21b: 0xb1, 0x21d: 0xb2, 0x21f: 0xb3, - 0x220: 0xb4, 0x223: 0xb5, 0x224: 0xb6, 0x225: 0xb7, 0x226: 0xb8, 0x227: 0xb9, - 0x22a: 0xba, 0x22b: 0xbb, 0x22d: 0xbc, 0x22f: 0xbd, - 0x230: 0xbe, 0x231: 0xbf, 0x232: 0xc0, 0x233: 0xc1, 0x234: 0xc2, 0x235: 0xc3, 0x236: 0xc4, 0x237: 0xbe, - 0x238: 0xbf, 0x239: 0xc0, 0x23a: 0xc1, 0x23b: 0xc2, 0x23c: 0xc3, 0x23d: 0xc4, 0x23e: 0xbe, 0x23f: 0xbf, + 0x219: 0xb3, 0x21a: 0xb4, 0x21b: 0xb5, 0x21d: 0xb6, 0x21f: 0xb7, + 0x220: 0xb8, 0x223: 0xb9, 0x224: 0xba, 0x225: 0xbb, 0x226: 0xbc, 0x227: 0xbd, + 0x22a: 0xbe, 0x22b: 0xbf, 0x22d: 0xc0, 0x22f: 0xc1, + 0x230: 0xc2, 0x231: 0xc3, 0x232: 0xc4, 0x233: 0xc5, 0x234: 0xc6, 0x235: 0xc7, 0x236: 0xc8, 0x237: 0xc2, + 0x238: 0xc3, 0x239: 0xc4, 0x23a: 0xc5, 0x23b: 0xc6, 0x23c: 0xc7, 0x23d: 0xc8, 0x23e: 0xc2, 0x23f: 0xc3, // Block 0x9, offset 0x240 - 0x240: 0xc0, 0x241: 0xc1, 0x242: 0xc2, 0x243: 0xc3, 0x244: 0xc4, 0x245: 0xbe, 0x246: 0xbf, 0x247: 0xc0, - 0x248: 0xc1, 0x249: 0xc2, 0x24a: 0xc3, 0x24b: 0xc4, 0x24c: 0xbe, 0x24d: 0xbf, 0x24e: 0xc0, 0x24f: 0xc1, - 0x250: 0xc2, 0x251: 0xc3, 0x252: 0xc4, 0x253: 0xbe, 0x254: 0xbf, 0x255: 0xc0, 0x256: 0xc1, 0x257: 0xc2, - 0x258: 0xc3, 0x259: 0xc4, 0x25a: 0xbe, 0x25b: 0xbf, 0x25c: 0xc0, 0x25d: 0xc1, 0x25e: 0xc2, 0x25f: 0xc3, - 0x260: 0xc4, 0x261: 0xbe, 0x262: 0xbf, 0x263: 0xc0, 0x264: 0xc1, 0x265: 0xc2, 0x266: 0xc3, 0x267: 0xc4, - 0x268: 0xbe, 0x269: 0xbf, 0x26a: 0xc0, 0x26b: 0xc1, 0x26c: 0xc2, 0x26d: 0xc3, 0x26e: 0xc4, 0x26f: 0xbe, - 0x270: 0xbf, 0x271: 0xc0, 0x272: 0xc1, 0x273: 0xc2, 0x274: 0xc3, 0x275: 0xc4, 0x276: 0xbe, 0x277: 0xbf, - 0x278: 0xc0, 0x279: 0xc1, 0x27a: 0xc2, 0x27b: 0xc3, 0x27c: 0xc4, 0x27d: 0xbe, 0x27e: 0xbf, 0x27f: 0xc0, + 0x240: 0xc4, 0x241: 0xc5, 0x242: 0xc6, 0x243: 0xc7, 0x244: 0xc8, 0x245: 0xc2, 0x246: 0xc3, 0x247: 0xc4, + 0x248: 0xc5, 0x249: 0xc6, 0x24a: 0xc7, 0x24b: 0xc8, 0x24c: 0xc2, 0x24d: 0xc3, 0x24e: 0xc4, 0x24f: 0xc5, + 0x250: 0xc6, 0x251: 0xc7, 0x252: 0xc8, 0x253: 0xc2, 0x254: 0xc3, 0x255: 0xc4, 0x256: 0xc5, 0x257: 0xc6, + 0x258: 0xc7, 0x259: 0xc8, 0x25a: 0xc2, 0x25b: 0xc3, 0x25c: 0xc4, 0x25d: 0xc5, 0x25e: 0xc6, 0x25f: 0xc7, + 0x260: 0xc8, 0x261: 0xc2, 0x262: 0xc3, 0x263: 0xc4, 0x264: 0xc5, 0x265: 0xc6, 0x266: 0xc7, 0x267: 0xc8, + 0x268: 0xc2, 0x269: 0xc3, 0x26a: 0xc4, 0x26b: 0xc5, 0x26c: 0xc6, 0x26d: 0xc7, 0x26e: 0xc8, 0x26f: 0xc2, + 0x270: 0xc3, 0x271: 0xc4, 0x272: 0xc5, 0x273: 0xc6, 0x274: 0xc7, 0x275: 0xc8, 0x276: 0xc2, 0x277: 0xc3, + 0x278: 0xc4, 0x279: 0xc5, 0x27a: 0xc6, 0x27b: 0xc7, 0x27c: 0xc8, 0x27d: 0xc2, 0x27e: 0xc3, 0x27f: 0xc4, // Block 0xa, offset 0x280 - 0x280: 0xc1, 0x281: 0xc2, 0x282: 0xc3, 0x283: 0xc4, 0x284: 0xbe, 0x285: 0xbf, 0x286: 0xc0, 0x287: 0xc1, - 0x288: 0xc2, 0x289: 0xc3, 0x28a: 0xc4, 0x28b: 0xbe, 0x28c: 0xbf, 0x28d: 0xc0, 0x28e: 0xc1, 0x28f: 0xc2, - 0x290: 0xc3, 0x291: 0xc4, 0x292: 0xbe, 0x293: 0xbf, 0x294: 0xc0, 0x295: 0xc1, 0x296: 0xc2, 0x297: 0xc3, - 0x298: 0xc4, 0x299: 0xbe, 0x29a: 0xbf, 0x29b: 0xc0, 0x29c: 0xc1, 0x29d: 0xc2, 0x29e: 0xc3, 0x29f: 0xc4, - 0x2a0: 0xbe, 0x2a1: 0xbf, 0x2a2: 0xc0, 0x2a3: 0xc1, 0x2a4: 0xc2, 0x2a5: 0xc3, 0x2a6: 0xc4, 0x2a7: 0xbe, - 0x2a8: 0xbf, 0x2a9: 0xc0, 0x2aa: 0xc1, 0x2ab: 0xc2, 0x2ac: 0xc3, 0x2ad: 0xc4, 0x2ae: 0xbe, 0x2af: 0xbf, - 0x2b0: 0xc0, 0x2b1: 0xc1, 0x2b2: 0xc2, 0x2b3: 0xc3, 0x2b4: 0xc4, 0x2b5: 0xbe, 0x2b6: 0xbf, 0x2b7: 0xc0, - 0x2b8: 0xc1, 0x2b9: 0xc2, 0x2ba: 0xc3, 0x2bb: 0xc4, 0x2bc: 0xbe, 0x2bd: 0xbf, 0x2be: 0xc0, 0x2bf: 0xc1, + 0x280: 0xc5, 0x281: 0xc6, 0x282: 0xc7, 0x283: 0xc8, 0x284: 0xc2, 0x285: 0xc3, 0x286: 0xc4, 0x287: 0xc5, + 0x288: 0xc6, 0x289: 0xc7, 0x28a: 0xc8, 0x28b: 0xc2, 0x28c: 0xc3, 0x28d: 0xc4, 0x28e: 0xc5, 0x28f: 0xc6, + 0x290: 0xc7, 0x291: 0xc8, 0x292: 0xc2, 0x293: 0xc3, 0x294: 0xc4, 0x295: 0xc5, 0x296: 0xc6, 0x297: 0xc7, + 0x298: 0xc8, 0x299: 0xc2, 0x29a: 0xc3, 0x29b: 0xc4, 0x29c: 0xc5, 0x29d: 0xc6, 0x29e: 0xc7, 0x29f: 0xc8, + 0x2a0: 0xc2, 0x2a1: 0xc3, 0x2a2: 0xc4, 0x2a3: 0xc5, 0x2a4: 0xc6, 0x2a5: 0xc7, 0x2a6: 0xc8, 0x2a7: 0xc2, + 0x2a8: 0xc3, 0x2a9: 0xc4, 0x2aa: 0xc5, 0x2ab: 0xc6, 0x2ac: 0xc7, 0x2ad: 0xc8, 0x2ae: 0xc2, 0x2af: 0xc3, + 0x2b0: 0xc4, 0x2b1: 0xc5, 0x2b2: 0xc6, 0x2b3: 0xc7, 0x2b4: 0xc8, 0x2b5: 0xc2, 0x2b6: 0xc3, 0x2b7: 0xc4, + 0x2b8: 0xc5, 0x2b9: 0xc6, 0x2ba: 0xc7, 0x2bb: 0xc8, 0x2bc: 0xc2, 0x2bd: 0xc3, 0x2be: 0xc4, 0x2bf: 0xc5, // Block 0xb, offset 0x2c0 - 0x2c0: 0xc2, 0x2c1: 0xc3, 0x2c2: 0xc4, 0x2c3: 0xbe, 0x2c4: 0xbf, 0x2c5: 0xc0, 0x2c6: 0xc1, 0x2c7: 0xc2, - 0x2c8: 0xc3, 0x2c9: 0xc4, 0x2ca: 0xbe, 0x2cb: 0xbf, 0x2cc: 0xc0, 0x2cd: 0xc1, 0x2ce: 0xc2, 0x2cf: 0xc3, - 0x2d0: 0xc4, 0x2d1: 0xbe, 0x2d2: 0xbf, 0x2d3: 0xc0, 0x2d4: 0xc1, 0x2d5: 0xc2, 0x2d6: 0xc3, 0x2d7: 0xc4, - 0x2d8: 0xbe, 0x2d9: 0xbf, 0x2da: 0xc0, 0x2db: 0xc1, 0x2dc: 0xc2, 0x2dd: 0xc3, 0x2de: 0xc5, + 0x2c0: 0xc6, 0x2c1: 0xc7, 0x2c2: 0xc8, 0x2c3: 0xc2, 0x2c4: 0xc3, 0x2c5: 0xc4, 0x2c6: 0xc5, 0x2c7: 0xc6, + 0x2c8: 0xc7, 0x2c9: 0xc8, 0x2ca: 0xc2, 0x2cb: 0xc3, 0x2cc: 0xc4, 0x2cd: 0xc5, 0x2ce: 0xc6, 0x2cf: 0xc7, + 0x2d0: 0xc8, 0x2d1: 0xc2, 0x2d2: 0xc3, 0x2d3: 0xc4, 0x2d4: 0xc5, 0x2d5: 0xc6, 0x2d6: 0xc7, 0x2d7: 0xc8, + 0x2d8: 0xc2, 0x2d9: 0xc3, 0x2da: 0xc4, 0x2db: 0xc5, 0x2dc: 0xc6, 0x2dd: 0xc7, 0x2de: 0xc9, // Block 0xc, offset 0x300 0x324: 0x31, 0x325: 0x32, 0x326: 0x33, 0x327: 0x34, 0x328: 0x35, 0x329: 0x36, 0x32a: 0x37, 0x32b: 0x38, 0x32c: 0x39, 0x32d: 0x3a, 0x32e: 0x3b, 0x32f: 0x3c, 0x330: 0x3d, 0x331: 0x3e, 0x332: 0x3f, 0x333: 0x40, 0x334: 0x41, 0x335: 0x42, 0x336: 0x43, 0x337: 0x44, - 0x338: 0x45, 0x339: 0x46, 0x33a: 0x47, 0x33b: 0x48, 0x33c: 0xc6, 0x33d: 0x49, 0x33e: 0x4a, 0x33f: 0x4b, + 0x338: 0x45, 0x339: 0x46, 0x33a: 0x47, 0x33b: 0x48, 0x33c: 0xca, 0x33d: 0x49, 0x33e: 0x4a, 0x33f: 0x4b, // Block 0xd, offset 0x340 - 0x347: 0xc7, - 0x34b: 0xc8, 0x34d: 0xc9, - 0x368: 0xca, 0x36b: 0xcb, - 0x374: 0xcc, - 0x37a: 0xcd, 0x37d: 0xce, + 0x347: 0xcb, + 0x34b: 0xcc, 0x34d: 0xcd, + 0x357: 0xce, + 0x35e: 0x4c, + 0x368: 0xcf, 0x36b: 0xd0, + 0x374: 0xd1, 0x375: 0xd2, + 0x37a: 0xd3, 0x37b: 0xd4, 0x37d: 0xd5, 0x37e: 0xd6, // Block 0xe, offset 0x380 - 0x381: 0xcf, 0x382: 0xd0, 0x384: 0xd1, 0x385: 0xb8, 0x387: 0xd2, - 0x388: 0xd3, 0x38b: 0xd4, 0x38c: 0xd5, 0x38d: 0xd6, - 0x391: 0xd7, 0x392: 0xd8, 0x393: 0xd9, 0x396: 0xda, 0x397: 0xdb, - 0x398: 0xdc, 0x39a: 0xdd, 0x39c: 0xde, - 0x3a0: 0xdf, 0x3a4: 0xe0, 0x3a5: 0xe1, 0x3a7: 0xe2, - 0x3a8: 0xe3, 0x3a9: 0xe4, 0x3aa: 0xe5, - 0x3b0: 0xdc, 0x3b5: 0xe6, 0x3b6: 0xe7, + 0x381: 0xd7, 0x382: 0xd8, 0x384: 0xd9, 0x385: 0xbc, 0x387: 0xda, + 0x388: 0xdb, 0x38b: 0xdc, 0x38c: 0xdd, 0x38d: 0xde, 0x38e: 0xdf, 0x38f: 0xe0, + 0x391: 0xe1, 0x392: 0xe2, 0x393: 0xe3, 0x396: 0xe4, 0x397: 0xe5, + 0x398: 0xe6, 0x39a: 0xe7, 0x39c: 0xe8, + 0x3a0: 0xe9, 0x3a4: 0xea, 0x3a5: 0xeb, 0x3a7: 0xec, + 0x3a8: 0xed, 0x3a9: 0xee, 0x3aa: 0xef, + 0x3b0: 0xe6, 0x3b5: 0xf0, 0x3b6: 0xf1, + 0x3bd: 0xf2, // Block 0xf, offset 0x3c0 - 0x3eb: 0xe8, 0x3ec: 0xe9, - 0x3ff: 0xea, + 0x3c4: 0xf3, + 0x3eb: 0xf4, 0x3ec: 0xf5, + 0x3f5: 0xf6, + 0x3ff: 0xf7, // Block 0x10, offset 0x400 - 0x432: 0xeb, + 0x432: 0xf8, // Block 0x11, offset 0x440 - 0x445: 0xec, 0x446: 0xed, 0x447: 0xee, - 0x449: 0xef, - 0x450: 0xf0, 0x451: 0xf1, 0x452: 0xf2, 0x453: 0xf3, 0x454: 0xf4, 0x455: 0xf5, 0x456: 0xf6, 0x457: 0xf7, - 0x458: 0xf8, 0x459: 0xf9, 0x45a: 0x4c, 0x45b: 0xfa, 0x45c: 0xfb, 0x45d: 0xfc, 0x45e: 0xfd, 0x45f: 0x4d, + 0x473: 0xf9, // Block 0x12, offset 0x480 - 0x480: 0xfe, 0x484: 0xe9, - 0x48b: 0xff, - 0x4a3: 0x100, 0x4a5: 0x101, - 0x4b8: 0x4e, 0x4b9: 0x4f, 0x4ba: 0x50, + 0x485: 0xfa, 0x486: 0xfb, 0x487: 0xfc, + 0x489: 0xfd, + 0x490: 0xfe, 0x491: 0xff, 0x492: 0x100, 0x493: 0x101, 0x494: 0x102, 0x495: 0x103, 0x496: 0x104, 0x497: 0x105, + 0x498: 0x106, 0x499: 0x107, 0x49a: 0x4d, 0x49b: 0x108, 0x49c: 0x109, 0x49d: 0x10a, 0x49e: 0x10b, 0x49f: 0x4e, // Block 0x13, offset 0x4c0 - 0x4c4: 0x51, 0x4c5: 0x102, 0x4c6: 0x103, - 0x4c8: 0x52, 0x4c9: 0x104, - 0x4ef: 0x105, + 0x4c0: 0x4f, 0x4c1: 0x50, 0x4c2: 0x10c, 0x4c4: 0xf5, + 0x4ca: 0x10d, 0x4cb: 0x10e, + 0x4d3: 0x10f, 0x4d7: 0x110, + 0x4db: 0x111, + 0x4e3: 0x112, 0x4e5: 0x113, + 0x4f8: 0x51, 0x4f9: 0x52, 0x4fa: 0x53, // Block 0x14, offset 0x500 - 0x520: 0x53, 0x521: 0x54, 0x522: 0x55, 0x523: 0x56, 0x524: 0x57, 0x525: 0x58, 0x526: 0x59, 0x527: 0x5a, - 0x528: 0x5b, + 0x504: 0x54, 0x505: 0x114, 0x506: 0x115, + 0x508: 0x55, 0x509: 0x116, + 0x52f: 0x117, // Block 0x15, offset 0x540 - 0x550: 0x0b, 0x551: 0x0c, 0x556: 0x0d, - 0x55b: 0x0e, 0x55d: 0x0f, 0x55e: 0x10, 0x55f: 0x11, - 0x56f: 0x12, + 0x560: 0x56, 0x561: 0x57, 0x562: 0x58, 0x563: 0x59, 0x564: 0x5a, 0x565: 0x5b, 0x566: 0x5c, 0x567: 0x5d, + 0x568: 0x5e, + // Block 0x16, offset 0x580 + 0x590: 0x0b, 0x591: 0x0c, 0x596: 0x0d, + 0x59b: 0x0e, 0x59c: 0x0f, 0x59d: 0x10, 0x59e: 0x11, 0x59f: 0x12, + 0x5af: 0x13, } -// nfkcSparseOffset: 170 entries, 340 bytes -var nfkcSparseOffset = []uint16{0x0, 0xe, 0x12, 0x1b, 0x25, 0x35, 0x37, 0x3c, 0x47, 0x56, 0x63, 0x6b, 0x70, 0x75, 0x77, 0x7f, 0x86, 0x89, 0x91, 0x95, 0x99, 0x9b, 0x9d, 0xa6, 0xaa, 0xb1, 0xb6, 0xb9, 0xc3, 0xc6, 0xcd, 0xd5, 0xd9, 0xdb, 0xdf, 0xe3, 0xe9, 0xfa, 0x106, 0x108, 0x10e, 0x110, 0x112, 0x114, 0x116, 0x118, 0x11a, 0x11c, 0x11f, 0x122, 0x124, 0x127, 0x12a, 0x12e, 0x134, 0x136, 0x13f, 0x141, 0x144, 0x146, 0x151, 0x15c, 0x16a, 0x178, 0x188, 0x196, 0x19d, 0x1a3, 0x1b2, 0x1b6, 0x1b8, 0x1bc, 0x1be, 0x1c1, 0x1c3, 0x1c6, 0x1c8, 0x1cb, 0x1cd, 0x1cf, 0x1d1, 0x1dd, 0x1e7, 0x1f1, 0x1f4, 0x1f8, 0x1fa, 0x1fc, 0x1fe, 0x201, 0x204, 0x206, 0x208, 0x20a, 0x20c, 0x212, 0x215, 0x21a, 0x21c, 0x223, 0x229, 0x22f, 0x237, 0x23d, 0x243, 0x249, 0x24d, 0x24f, 0x251, 0x253, 0x255, 0x25b, 0x25e, 0x260, 0x262, 0x268, 0x26b, 0x273, 0x27a, 0x27d, 0x280, 0x282, 0x285, 0x28d, 0x291, 0x298, 0x29b, 0x2a1, 0x2a3, 0x2a5, 0x2a8, 0x2aa, 0x2ad, 0x2b2, 0x2b4, 0x2b6, 0x2b8, 0x2ba, 0x2bc, 0x2bf, 0x2c1, 0x2c3, 0x2c5, 0x2c7, 0x2c9, 0x2d6, 0x2e0, 0x2e2, 0x2e4, 0x2e8, 0x2ed, 0x2f9, 0x2fe, 0x307, 0x30d, 0x312, 0x316, 0x31b, 0x31f, 0x32f, 0x33d, 0x34b, 0x359, 0x35f, 0x361, 0x363, 0x366, 0x371, 0x373, 0x37d} +// nfkcSparseOffset: 185 entries, 370 bytes +var nfkcSparseOffset = []uint16{0x0, 0xe, 0x12, 0x1c, 0x26, 0x36, 0x38, 0x3d, 0x48, 0x57, 0x64, 0x6c, 0x71, 0x76, 0x78, 0x7c, 0x84, 0x8b, 0x8e, 0x96, 0x9a, 0x9e, 0xa0, 0xa2, 0xab, 0xaf, 0xb6, 0xbb, 0xbe, 0xc8, 0xcb, 0xd2, 0xda, 0xde, 0xe0, 0xe4, 0xe8, 0xee, 0xff, 0x10b, 0x10d, 0x113, 0x115, 0x117, 0x119, 0x11b, 0x11d, 0x11f, 0x121, 0x124, 0x127, 0x129, 0x12c, 0x12f, 0x133, 0x139, 0x145, 0x14e, 0x150, 0x153, 0x155, 0x160, 0x16b, 0x179, 0x187, 0x197, 0x1a5, 0x1ac, 0x1b2, 0x1c1, 0x1c5, 0x1c7, 0x1cb, 0x1cd, 0x1d0, 0x1d2, 0x1d5, 0x1d7, 0x1da, 0x1dc, 0x1de, 0x1e0, 0x1ec, 0x1f6, 0x200, 0x203, 0x207, 0x209, 0x20b, 0x211, 0x214, 0x217, 0x219, 0x21b, 0x21d, 0x21f, 0x225, 0x228, 0x22d, 0x22f, 0x236, 0x23c, 0x242, 0x24a, 0x250, 0x256, 0x25c, 0x260, 0x262, 0x264, 0x266, 0x268, 0x26d, 0x273, 0x276, 0x278, 0x27a, 0x27c, 0x27f, 0x285, 0x289, 0x28d, 0x295, 0x29c, 0x29f, 0x2a2, 0x2a4, 0x2a7, 0x2af, 0x2b9, 0x2c0, 0x2c4, 0x2cb, 0x2ce, 0x2d4, 0x2d6, 0x2d8, 0x2db, 0x2dd, 0x2e0, 0x2e5, 0x2e7, 0x2e9, 0x2eb, 0x2ed, 0x2ef, 0x2f2, 0x2f4, 0x2f6, 0x303, 0x305, 0x307, 0x30d, 0x30f, 0x311, 0x314, 0x321, 0x32b, 0x32d, 0x32f, 0x333, 0x338, 0x344, 0x349, 0x352, 0x358, 0x35d, 0x361, 0x366, 0x36a, 0x37a, 0x388, 0x396, 0x3a4, 0x3a6, 0x3a8, 0x3aa, 0x3ae, 0x3b1, 0x3b6, 0x3b8, 0x3bb, 0x3c6, 0x3c8, 0x3d2} -// nfkcSparseValues: 895 entries, 3580 bytes -var nfkcSparseValues = [895]valueRange{ +// nfkcSparseValues: 980 entries, 3920 bytes +var nfkcSparseValues = [980]valueRange{ // Block 0x0, offset 0x0 {value: 0x0002, lo: 0x0d}, {value: 0x0001, lo: 0xa0, hi: 0xa0}, - {value: 0x428f, lo: 0xa8, hi: 0xa8}, + {value: 0x4377, lo: 0xa8, hi: 0xa8}, {value: 0x0083, lo: 0xaa, hi: 0xaa}, - {value: 0x427b, lo: 0xaf, hi: 0xaf}, + {value: 0x4363, lo: 0xaf, hi: 0xaf}, {value: 0x0025, lo: 0xb2, hi: 0xb3}, - {value: 0x4271, lo: 0xb4, hi: 0xb4}, - {value: 0x01df, lo: 0xb5, hi: 0xb5}, - {value: 0x42a8, lo: 0xb8, hi: 0xb8}, + {value: 0x4359, lo: 0xb4, hi: 0xb4}, + {value: 0x0260, lo: 0xb5, hi: 0xb5}, + {value: 0x4390, lo: 0xb8, hi: 0xb8}, {value: 0x0023, lo: 0xb9, hi: 0xb9}, {value: 0x009f, lo: 0xba, hi: 0xba}, - {value: 0x2222, lo: 0xbc, hi: 0xbc}, - {value: 0x2216, lo: 0xbd, hi: 0xbd}, - {value: 0x22b8, lo: 0xbe, hi: 0xbe}, + {value: 0x234c, lo: 0xbc, hi: 0xbc}, + {value: 0x2340, lo: 0xbd, hi: 0xbd}, + {value: 0x23e2, lo: 0xbe, hi: 0xbe}, // Block 0x1, offset 0xe {value: 0x0091, lo: 0x03}, - {value: 0x46f9, lo: 0xa0, hi: 0xa1}, - {value: 0x472b, lo: 0xaf, hi: 0xb0}, + {value: 0x4859, lo: 0xa0, hi: 0xa1}, + {value: 0x488b, lo: 0xaf, hi: 0xb0}, {value: 0xa000, lo: 0xb7, hi: 0xb7}, // Block 0x2, offset 0x12 - {value: 0x0003, lo: 0x08}, + {value: 0x0004, lo: 0x09}, {value: 0xa000, lo: 0x92, hi: 0x92}, {value: 0x0091, lo: 0xb0, hi: 0xb0}, - {value: 0x0119, lo: 0xb1, hi: 0xb1}, + {value: 0x0140, lo: 0xb1, hi: 0xb1}, {value: 0x0095, lo: 0xb2, hi: 0xb2}, {value: 0x00a5, lo: 0xb3, hi: 0xb3}, - {value: 0x0143, lo: 0xb4, hi: 0xb6}, - {value: 0x00af, lo: 0xb7, hi: 0xb7}, - {value: 0x00b3, lo: 0xb8, hi: 0xb8}, - // Block 0x3, offset 0x1b + {value: 0x0179, lo: 0xb4, hi: 0xb4}, + {value: 0x017f, lo: 0xb5, hi: 0xb5}, + {value: 0x018b, lo: 0xb6, hi: 0xb6}, + {value: 0x00af, lo: 0xb7, hi: 0xb8}, + // Block 0x3, offset 0x1c {value: 0x000a, lo: 0x09}, - {value: 0x4285, lo: 0x98, hi: 0x98}, - {value: 0x428a, lo: 0x99, hi: 0x9a}, - {value: 0x42ad, lo: 0x9b, hi: 0x9b}, - {value: 0x4276, lo: 0x9c, hi: 0x9c}, - {value: 0x4299, lo: 0x9d, hi: 0x9d}, - {value: 0x0113, lo: 0xa0, hi: 0xa0}, + {value: 0x436d, lo: 0x98, hi: 0x98}, + {value: 0x4372, lo: 0x99, hi: 0x9a}, + {value: 0x4395, lo: 0x9b, hi: 0x9b}, + {value: 0x435e, lo: 0x9c, hi: 0x9c}, + {value: 0x4381, lo: 0x9d, hi: 0x9d}, + {value: 0x0137, lo: 0xa0, hi: 0xa0}, {value: 0x0099, lo: 0xa1, hi: 0xa1}, {value: 0x00a7, lo: 0xa2, hi: 0xa3}, - {value: 0x016a, lo: 0xa4, hi: 0xa4}, - // Block 0x4, offset 0x25 + {value: 0x01b8, lo: 0xa4, hi: 0xa4}, + // Block 0x4, offset 0x26 {value: 0x0000, lo: 0x0f}, {value: 0xa000, lo: 0x83, hi: 0x83}, {value: 0xa000, lo: 0x87, hi: 0x87}, {value: 0xa000, lo: 0x8b, hi: 0x8b}, {value: 0xa000, lo: 0x8d, hi: 0x8d}, - {value: 0x37bc, lo: 0x90, hi: 0x90}, - {value: 0x37c8, lo: 0x91, hi: 0x91}, - {value: 0x37b6, lo: 0x93, hi: 0x93}, + {value: 0x3704, lo: 0x90, hi: 0x90}, + {value: 0x3710, lo: 0x91, hi: 0x91}, + {value: 0x36fe, lo: 0x93, hi: 0x93}, {value: 0xa000, lo: 0x96, hi: 0x96}, - {value: 0x382e, lo: 0x97, hi: 0x97}, - {value: 0x37f8, lo: 0x9c, hi: 0x9c}, - {value: 0x37e0, lo: 0x9d, hi: 0x9d}, - {value: 0x380a, lo: 0x9e, hi: 0x9e}, + {value: 0x3776, lo: 0x97, hi: 0x97}, + {value: 0x3740, lo: 0x9c, hi: 0x9c}, + {value: 0x3728, lo: 0x9d, hi: 0x9d}, + {value: 0x3752, lo: 0x9e, hi: 0x9e}, {value: 0xa000, lo: 0xb4, hi: 0xb5}, - {value: 0x3834, lo: 0xb6, hi: 0xb6}, - {value: 0x383a, lo: 0xb7, hi: 0xb7}, - // Block 0x5, offset 0x35 + {value: 0x377c, lo: 0xb6, hi: 0xb6}, + {value: 0x3782, lo: 0xb7, hi: 0xb7}, + // Block 0x5, offset 0x36 {value: 0x0000, lo: 0x01}, {value: 0x8133, lo: 0x83, hi: 0x87}, - // Block 0x6, offset 0x37 + // Block 0x6, offset 0x38 {value: 0x0001, lo: 0x04}, {value: 0x8114, lo: 0x81, hi: 0x82}, {value: 0x8133, lo: 0x84, hi: 0x84}, {value: 0x812e, lo: 0x85, hi: 0x85}, {value: 0x810e, lo: 0x87, hi: 0x87}, - // Block 0x7, offset 0x3c + // Block 0x7, offset 0x3d {value: 0x0000, lo: 0x0a}, {value: 0x8133, lo: 0x90, hi: 0x97}, {value: 0x811a, lo: 0x98, hi: 0x98}, {value: 0x811b, lo: 0x99, hi: 0x99}, {value: 0x811c, lo: 0x9a, hi: 0x9a}, - {value: 0x3858, lo: 0xa2, hi: 0xa2}, - {value: 0x385e, lo: 0xa3, hi: 0xa3}, - {value: 0x386a, lo: 0xa4, hi: 0xa4}, - {value: 0x3864, lo: 0xa5, hi: 0xa5}, - {value: 0x3870, lo: 0xa6, hi: 0xa6}, + {value: 0x37a0, lo: 0xa2, hi: 0xa2}, + {value: 0x37a6, lo: 0xa3, hi: 0xa3}, + {value: 0x37b2, lo: 0xa4, hi: 0xa4}, + {value: 0x37ac, lo: 0xa5, hi: 0xa5}, + {value: 0x37b8, lo: 0xa6, hi: 0xa6}, {value: 0xa000, lo: 0xa7, hi: 0xa7}, - // Block 0x8, offset 0x47 + // Block 0x8, offset 0x48 {value: 0x0000, lo: 0x0e}, - {value: 0x3882, lo: 0x80, hi: 0x80}, + {value: 0x37ca, lo: 0x80, hi: 0x80}, {value: 0xa000, lo: 0x81, hi: 0x81}, - {value: 0x3876, lo: 0x82, hi: 0x82}, + {value: 0x37be, lo: 0x82, hi: 0x82}, {value: 0xa000, lo: 0x92, hi: 0x92}, - {value: 0x387c, lo: 0x93, hi: 0x93}, + {value: 0x37c4, lo: 0x93, hi: 0x93}, {value: 0xa000, lo: 0x95, hi: 0x95}, {value: 0x8133, lo: 0x96, hi: 0x9c}, {value: 0x8133, lo: 0x9f, hi: 0xa2}, @@ -5838,7 +6063,7 @@ var nfkcSparseValues = [895]valueRange{ {value: 0x812e, lo: 0xaa, hi: 0xaa}, {value: 0x8133, lo: 0xab, hi: 0xac}, {value: 0x812e, lo: 0xad, hi: 0xad}, - // Block 0x9, offset 0x56 + // Block 0x9, offset 0x57 {value: 0x0000, lo: 0x0c}, {value: 0x8120, lo: 0x91, hi: 0x91}, {value: 0x8133, lo: 0xb0, hi: 0xb0}, @@ -5852,7 +6077,7 @@ var nfkcSparseValues = [895]valueRange{ {value: 0x8133, lo: 0xbd, hi: 0xbd}, {value: 0x812e, lo: 0xbe, hi: 0xbe}, {value: 0x8133, lo: 0xbf, hi: 0xbf}, - // Block 0xa, offset 0x63 + // Block 0xa, offset 0x64 {value: 0x0005, lo: 0x07}, {value: 0x8133, lo: 0x80, hi: 0x80}, {value: 0x8133, lo: 0x81, hi: 0x81}, @@ -5861,274 +6086,289 @@ var nfkcSparseValues = [895]valueRange{ {value: 0x812e, lo: 0x86, hi: 0x87}, {value: 0x812e, lo: 0x88, hi: 0x89}, {value: 0x8133, lo: 0x8a, hi: 0x8a}, - // Block 0xb, offset 0x6b + // Block 0xb, offset 0x6c {value: 0x0000, lo: 0x04}, {value: 0x8133, lo: 0xab, hi: 0xb1}, {value: 0x812e, lo: 0xb2, hi: 0xb2}, {value: 0x8133, lo: 0xb3, hi: 0xb3}, {value: 0x812e, lo: 0xbd, hi: 0xbd}, - // Block 0xc, offset 0x70 + // Block 0xc, offset 0x71 {value: 0x0000, lo: 0x04}, {value: 0x8133, lo: 0x96, hi: 0x99}, {value: 0x8133, lo: 0x9b, hi: 0xa3}, {value: 0x8133, lo: 0xa5, hi: 0xa7}, {value: 0x8133, lo: 0xa9, hi: 0xad}, - // Block 0xd, offset 0x75 + // Block 0xd, offset 0x76 {value: 0x0000, lo: 0x01}, {value: 0x812e, lo: 0x99, hi: 0x9b}, - // Block 0xe, offset 0x77 + // Block 0xe, offset 0x78 + {value: 0x0000, lo: 0x03}, + {value: 0x8133, lo: 0x97, hi: 0x98}, + {value: 0x812e, lo: 0x99, hi: 0x9b}, + {value: 0x8133, lo: 0x9c, hi: 0x9f}, + // Block 0xf, offset 0x7c {value: 0x0000, lo: 0x07}, {value: 0xa000, lo: 0xa8, hi: 0xa8}, - {value: 0x3eef, lo: 0xa9, hi: 0xa9}, + {value: 0x3e37, lo: 0xa9, hi: 0xa9}, {value: 0xa000, lo: 0xb0, hi: 0xb0}, - {value: 0x3ef7, lo: 0xb1, hi: 0xb1}, + {value: 0x3e3f, lo: 0xb1, hi: 0xb1}, {value: 0xa000, lo: 0xb3, hi: 0xb3}, - {value: 0x3eff, lo: 0xb4, hi: 0xb4}, + {value: 0x3e47, lo: 0xb4, hi: 0xb4}, {value: 0x9903, lo: 0xbc, hi: 0xbc}, - // Block 0xf, offset 0x7f + // Block 0x10, offset 0x84 {value: 0x0008, lo: 0x06}, {value: 0x8105, lo: 0x8d, hi: 0x8d}, {value: 0x8133, lo: 0x91, hi: 0x91}, {value: 0x812e, lo: 0x92, hi: 0x92}, {value: 0x8133, lo: 0x93, hi: 0x93}, {value: 0x8133, lo: 0x94, hi: 0x94}, - {value: 0x4533, lo: 0x98, hi: 0x9f}, - // Block 0x10, offset 0x86 + {value: 0x461b, lo: 0x98, hi: 0x9f}, + // Block 0x11, offset 0x8b {value: 0x0000, lo: 0x02}, {value: 0x8103, lo: 0xbc, hi: 0xbc}, {value: 0x9900, lo: 0xbe, hi: 0xbe}, - // Block 0x11, offset 0x89 + // Block 0x12, offset 0x8e {value: 0x0008, lo: 0x07}, {value: 0xa000, lo: 0x87, hi: 0x87}, - {value: 0x2cab, lo: 0x8b, hi: 0x8c}, + {value: 0x3e4f, lo: 0x8b, hi: 0x8c}, {value: 0x8105, lo: 0x8d, hi: 0x8d}, {value: 0x9900, lo: 0x97, hi: 0x97}, - {value: 0x4573, lo: 0x9c, hi: 0x9d}, - {value: 0x4583, lo: 0x9f, hi: 0x9f}, + {value: 0x465b, lo: 0x9c, hi: 0x9d}, + {value: 0x466b, lo: 0x9f, hi: 0x9f}, {value: 0x8133, lo: 0xbe, hi: 0xbe}, - // Block 0x12, offset 0x91 + // Block 0x13, offset 0x96 {value: 0x0000, lo: 0x03}, - {value: 0x45ab, lo: 0xb3, hi: 0xb3}, - {value: 0x45b3, lo: 0xb6, hi: 0xb6}, + {value: 0x4693, lo: 0xb3, hi: 0xb3}, + {value: 0x469b, lo: 0xb6, hi: 0xb6}, {value: 0x8103, lo: 0xbc, hi: 0xbc}, - // Block 0x13, offset 0x95 + // Block 0x14, offset 0x9a {value: 0x0008, lo: 0x03}, {value: 0x8105, lo: 0x8d, hi: 0x8d}, - {value: 0x458b, lo: 0x99, hi: 0x9b}, - {value: 0x45a3, lo: 0x9e, hi: 0x9e}, - // Block 0x14, offset 0x99 + {value: 0x4673, lo: 0x99, hi: 0x9b}, + {value: 0x468b, lo: 0x9e, hi: 0x9e}, + // Block 0x15, offset 0x9e {value: 0x0000, lo: 0x01}, {value: 0x8103, lo: 0xbc, hi: 0xbc}, - // Block 0x15, offset 0x9b + // Block 0x16, offset 0xa0 {value: 0x0000, lo: 0x01}, {value: 0x8105, lo: 0x8d, hi: 0x8d}, - // Block 0x16, offset 0x9d + // Block 0x17, offset 0xa2 {value: 0x0000, lo: 0x08}, {value: 0xa000, lo: 0x87, hi: 0x87}, - {value: 0x2cc3, lo: 0x88, hi: 0x88}, - {value: 0x2cbb, lo: 0x8b, hi: 0x8b}, - {value: 0x2ccb, lo: 0x8c, hi: 0x8c}, + {value: 0x3e67, lo: 0x88, hi: 0x88}, + {value: 0x3e5f, lo: 0x8b, hi: 0x8b}, + {value: 0x3e6f, lo: 0x8c, hi: 0x8c}, {value: 0x8105, lo: 0x8d, hi: 0x8d}, {value: 0x9900, lo: 0x96, hi: 0x97}, - {value: 0x45bb, lo: 0x9c, hi: 0x9c}, - {value: 0x45c3, lo: 0x9d, hi: 0x9d}, - // Block 0x17, offset 0xa6 + {value: 0x46a3, lo: 0x9c, hi: 0x9c}, + {value: 0x46ab, lo: 0x9d, hi: 0x9d}, + // Block 0x18, offset 0xab {value: 0x0000, lo: 0x03}, {value: 0xa000, lo: 0x92, hi: 0x92}, - {value: 0x2cd3, lo: 0x94, hi: 0x94}, + {value: 0x3e77, lo: 0x94, hi: 0x94}, {value: 0x9900, lo: 0xbe, hi: 0xbe}, - // Block 0x18, offset 0xaa + // Block 0x19, offset 0xaf {value: 0x0000, lo: 0x06}, {value: 0xa000, lo: 0x86, hi: 0x87}, - {value: 0x2cdb, lo: 0x8a, hi: 0x8a}, - {value: 0x2ceb, lo: 0x8b, hi: 0x8b}, - {value: 0x2ce3, lo: 0x8c, hi: 0x8c}, + {value: 0x3e7f, lo: 0x8a, hi: 0x8a}, + {value: 0x3e8f, lo: 0x8b, hi: 0x8b}, + {value: 0x3e87, lo: 0x8c, hi: 0x8c}, {value: 0x8105, lo: 0x8d, hi: 0x8d}, {value: 0x9900, lo: 0x97, hi: 0x97}, - // Block 0x19, offset 0xb1 + // Block 0x1a, offset 0xb6 {value: 0x1801, lo: 0x04}, {value: 0xa000, lo: 0x86, hi: 0x86}, - {value: 0x3f07, lo: 0x88, hi: 0x88}, + {value: 0x3e97, lo: 0x88, hi: 0x88}, {value: 0x8105, lo: 0x8d, hi: 0x8d}, {value: 0x8121, lo: 0x95, hi: 0x96}, - // Block 0x1a, offset 0xb6 + // Block 0x1b, offset 0xbb {value: 0x0000, lo: 0x02}, {value: 0x8103, lo: 0xbc, hi: 0xbc}, {value: 0xa000, lo: 0xbf, hi: 0xbf}, - // Block 0x1b, offset 0xb9 + // Block 0x1c, offset 0xbe {value: 0x0000, lo: 0x09}, - {value: 0x2cf3, lo: 0x80, hi: 0x80}, + {value: 0x3e9f, lo: 0x80, hi: 0x80}, {value: 0x9900, lo: 0x82, hi: 0x82}, {value: 0xa000, lo: 0x86, hi: 0x86}, - {value: 0x2cfb, lo: 0x87, hi: 0x87}, - {value: 0x2d03, lo: 0x88, hi: 0x88}, - {value: 0x2f67, lo: 0x8a, hi: 0x8a}, - {value: 0x2def, lo: 0x8b, hi: 0x8b}, + {value: 0x3ea7, lo: 0x87, hi: 0x87}, + {value: 0x3eaf, lo: 0x88, hi: 0x88}, + {value: 0x4b25, lo: 0x8a, hi: 0x8a}, + {value: 0x4331, lo: 0x8b, hi: 0x8b}, {value: 0x8105, lo: 0x8d, hi: 0x8d}, {value: 0x9900, lo: 0x95, hi: 0x96}, - // Block 0x1c, offset 0xc3 + // Block 0x1d, offset 0xc8 {value: 0x0000, lo: 0x02}, {value: 0x8105, lo: 0xbb, hi: 0xbc}, {value: 0x9900, lo: 0xbe, hi: 0xbe}, - // Block 0x1d, offset 0xc6 + // Block 0x1e, offset 0xcb {value: 0x0000, lo: 0x06}, {value: 0xa000, lo: 0x86, hi: 0x87}, - {value: 0x2d0b, lo: 0x8a, hi: 0x8a}, - {value: 0x2d1b, lo: 0x8b, hi: 0x8b}, - {value: 0x2d13, lo: 0x8c, hi: 0x8c}, + {value: 0x3eb7, lo: 0x8a, hi: 0x8a}, + {value: 0x3ec7, lo: 0x8b, hi: 0x8b}, + {value: 0x3ebf, lo: 0x8c, hi: 0x8c}, {value: 0x8105, lo: 0x8d, hi: 0x8d}, {value: 0x9900, lo: 0x97, hi: 0x97}, - // Block 0x1e, offset 0xcd - {value: 0x6bdd, lo: 0x07}, + // Block 0x1f, offset 0xd2 + {value: 0x5a29, lo: 0x07}, {value: 0x9905, lo: 0x8a, hi: 0x8a}, {value: 0x9900, lo: 0x8f, hi: 0x8f}, {value: 0xa000, lo: 0x99, hi: 0x99}, - {value: 0x3f0f, lo: 0x9a, hi: 0x9a}, - {value: 0x2f6f, lo: 0x9c, hi: 0x9c}, - {value: 0x2dfa, lo: 0x9d, hi: 0x9d}, - {value: 0x2d23, lo: 0x9e, hi: 0x9f}, - // Block 0x1f, offset 0xd5 + {value: 0x3ecf, lo: 0x9a, hi: 0x9a}, + {value: 0x4b2d, lo: 0x9c, hi: 0x9c}, + {value: 0x433c, lo: 0x9d, hi: 0x9d}, + {value: 0x3ed7, lo: 0x9e, hi: 0x9f}, + // Block 0x20, offset 0xda {value: 0x0000, lo: 0x03}, - {value: 0x2627, lo: 0xb3, hi: 0xb3}, + {value: 0x2751, lo: 0xb3, hi: 0xb3}, {value: 0x8123, lo: 0xb8, hi: 0xb9}, {value: 0x8105, lo: 0xba, hi: 0xba}, - // Block 0x20, offset 0xd9 + // Block 0x21, offset 0xde {value: 0x0000, lo: 0x01}, {value: 0x8124, lo: 0x88, hi: 0x8b}, - // Block 0x21, offset 0xdb + // Block 0x22, offset 0xe0 {value: 0x0000, lo: 0x03}, - {value: 0x263c, lo: 0xb3, hi: 0xb3}, + {value: 0x2766, lo: 0xb3, hi: 0xb3}, {value: 0x8125, lo: 0xb8, hi: 0xb9}, {value: 0x8105, lo: 0xba, hi: 0xba}, - // Block 0x22, offset 0xdf + // Block 0x23, offset 0xe4 {value: 0x0000, lo: 0x03}, {value: 0x8126, lo: 0x88, hi: 0x8b}, - {value: 0x262e, lo: 0x9c, hi: 0x9c}, - {value: 0x2635, lo: 0x9d, hi: 0x9d}, - // Block 0x23, offset 0xe3 + {value: 0x2758, lo: 0x9c, hi: 0x9c}, + {value: 0x275f, lo: 0x9d, hi: 0x9d}, + // Block 0x24, offset 0xe8 {value: 0x0000, lo: 0x05}, - {value: 0x030e, lo: 0x8c, hi: 0x8c}, + {value: 0x03fe, lo: 0x8c, hi: 0x8c}, {value: 0x812e, lo: 0x98, hi: 0x99}, {value: 0x812e, lo: 0xb5, hi: 0xb5}, {value: 0x812e, lo: 0xb7, hi: 0xb7}, {value: 0x812c, lo: 0xb9, hi: 0xb9}, - // Block 0x24, offset 0xe9 + // Block 0x25, offset 0xee {value: 0x0000, lo: 0x10}, - {value: 0x264a, lo: 0x83, hi: 0x83}, - {value: 0x2651, lo: 0x8d, hi: 0x8d}, - {value: 0x2658, lo: 0x92, hi: 0x92}, - {value: 0x265f, lo: 0x97, hi: 0x97}, - {value: 0x2666, lo: 0x9c, hi: 0x9c}, - {value: 0x2643, lo: 0xa9, hi: 0xa9}, + {value: 0x2774, lo: 0x83, hi: 0x83}, + {value: 0x277b, lo: 0x8d, hi: 0x8d}, + {value: 0x2782, lo: 0x92, hi: 0x92}, + {value: 0x2789, lo: 0x97, hi: 0x97}, + {value: 0x2790, lo: 0x9c, hi: 0x9c}, + {value: 0x276d, lo: 0xa9, hi: 0xa9}, {value: 0x8127, lo: 0xb1, hi: 0xb1}, {value: 0x8128, lo: 0xb2, hi: 0xb2}, - {value: 0x4a9b, lo: 0xb3, hi: 0xb3}, + {value: 0x4ca5, lo: 0xb3, hi: 0xb3}, {value: 0x8129, lo: 0xb4, hi: 0xb4}, - {value: 0x4aa4, lo: 0xb5, hi: 0xb5}, - {value: 0x45cb, lo: 0xb6, hi: 0xb6}, - {value: 0x460b, lo: 0xb7, hi: 0xb7}, - {value: 0x45d3, lo: 0xb8, hi: 0xb8}, - {value: 0x4616, lo: 0xb9, hi: 0xb9}, + {value: 0x4cae, lo: 0xb5, hi: 0xb5}, + {value: 0x46b3, lo: 0xb6, hi: 0xb6}, + {value: 0x476b, lo: 0xb7, hi: 0xb7}, + {value: 0x46bb, lo: 0xb8, hi: 0xb8}, + {value: 0x4776, lo: 0xb9, hi: 0xb9}, {value: 0x8128, lo: 0xba, hi: 0xbd}, - // Block 0x25, offset 0xfa + // Block 0x26, offset 0xff {value: 0x0000, lo: 0x0b}, {value: 0x8128, lo: 0x80, hi: 0x80}, - {value: 0x4aad, lo: 0x81, hi: 0x81}, + {value: 0x4cb7, lo: 0x81, hi: 0x81}, {value: 0x8133, lo: 0x82, hi: 0x83}, {value: 0x8105, lo: 0x84, hi: 0x84}, {value: 0x8133, lo: 0x86, hi: 0x87}, - {value: 0x2674, lo: 0x93, hi: 0x93}, - {value: 0x267b, lo: 0x9d, hi: 0x9d}, - {value: 0x2682, lo: 0xa2, hi: 0xa2}, - {value: 0x2689, lo: 0xa7, hi: 0xa7}, - {value: 0x2690, lo: 0xac, hi: 0xac}, - {value: 0x266d, lo: 0xb9, hi: 0xb9}, - // Block 0x26, offset 0x106 + {value: 0x279e, lo: 0x93, hi: 0x93}, + {value: 0x27a5, lo: 0x9d, hi: 0x9d}, + {value: 0x27ac, lo: 0xa2, hi: 0xa2}, + {value: 0x27b3, lo: 0xa7, hi: 0xa7}, + {value: 0x27ba, lo: 0xac, hi: 0xac}, + {value: 0x2797, lo: 0xb9, hi: 0xb9}, + // Block 0x27, offset 0x10b {value: 0x0000, lo: 0x01}, {value: 0x812e, lo: 0x86, hi: 0x86}, - // Block 0x27, offset 0x108 + // Block 0x28, offset 0x10d {value: 0x0000, lo: 0x05}, {value: 0xa000, lo: 0xa5, hi: 0xa5}, - {value: 0x2d2b, lo: 0xa6, hi: 0xa6}, + {value: 0x3edf, lo: 0xa6, hi: 0xa6}, {value: 0x9900, lo: 0xae, hi: 0xae}, {value: 0x8103, lo: 0xb7, hi: 0xb7}, {value: 0x8105, lo: 0xb9, hi: 0xba}, - // Block 0x28, offset 0x10e + // Block 0x29, offset 0x113 {value: 0x0000, lo: 0x01}, {value: 0x812e, lo: 0x8d, hi: 0x8d}, - // Block 0x29, offset 0x110 + // Block 0x2a, offset 0x115 {value: 0x0000, lo: 0x01}, - {value: 0x0312, lo: 0xbc, hi: 0xbc}, - // Block 0x2a, offset 0x112 + {value: 0x0402, lo: 0xbc, hi: 0xbc}, + // Block 0x2b, offset 0x117 {value: 0x0000, lo: 0x01}, {value: 0xa000, lo: 0x80, hi: 0x92}, - // Block 0x2b, offset 0x114 + // Block 0x2c, offset 0x119 {value: 0x0000, lo: 0x01}, {value: 0xb900, lo: 0xa1, hi: 0xb5}, - // Block 0x2c, offset 0x116 + // Block 0x2d, offset 0x11b {value: 0x0000, lo: 0x01}, {value: 0x9900, lo: 0xa8, hi: 0xbf}, - // Block 0x2d, offset 0x118 + // Block 0x2e, offset 0x11d {value: 0x0000, lo: 0x01}, {value: 0x9900, lo: 0x80, hi: 0x82}, - // Block 0x2e, offset 0x11a + // Block 0x2f, offset 0x11f {value: 0x0000, lo: 0x01}, {value: 0x8133, lo: 0x9d, hi: 0x9f}, - // Block 0x2f, offset 0x11c + // Block 0x30, offset 0x121 {value: 0x0000, lo: 0x02}, - {value: 0x8105, lo: 0x94, hi: 0x94}, + {value: 0x8105, lo: 0x94, hi: 0x95}, {value: 0x8105, lo: 0xb4, hi: 0xb4}, - // Block 0x30, offset 0x11f + // Block 0x31, offset 0x124 {value: 0x0000, lo: 0x02}, {value: 0x8105, lo: 0x92, hi: 0x92}, {value: 0x8133, lo: 0x9d, hi: 0x9d}, - // Block 0x31, offset 0x122 + // Block 0x32, offset 0x127 {value: 0x0000, lo: 0x01}, {value: 0x8132, lo: 0xa9, hi: 0xa9}, - // Block 0x32, offset 0x124 + // Block 0x33, offset 0x129 {value: 0x0004, lo: 0x02}, {value: 0x812f, lo: 0xb9, hi: 0xba}, {value: 0x812e, lo: 0xbb, hi: 0xbb}, - // Block 0x33, offset 0x127 + // Block 0x34, offset 0x12c {value: 0x0000, lo: 0x02}, {value: 0x8133, lo: 0x97, hi: 0x97}, {value: 0x812e, lo: 0x98, hi: 0x98}, - // Block 0x34, offset 0x12a + // Block 0x35, offset 0x12f {value: 0x0000, lo: 0x03}, {value: 0x8105, lo: 0xa0, hi: 0xa0}, {value: 0x8133, lo: 0xb5, hi: 0xbc}, {value: 0x812e, lo: 0xbf, hi: 0xbf}, - // Block 0x35, offset 0x12e + // Block 0x36, offset 0x133 {value: 0x0000, lo: 0x05}, {value: 0x8133, lo: 0xb0, hi: 0xb4}, {value: 0x812e, lo: 0xb5, hi: 0xba}, {value: 0x8133, lo: 0xbb, hi: 0xbc}, {value: 0x812e, lo: 0xbd, hi: 0xbd}, {value: 0x812e, lo: 0xbf, hi: 0xbf}, - // Block 0x36, offset 0x134 - {value: 0x0000, lo: 0x01}, + // Block 0x37, offset 0x139 + {value: 0x0000, lo: 0x0b}, {value: 0x812e, lo: 0x80, hi: 0x80}, - // Block 0x37, offset 0x136 + {value: 0x8133, lo: 0x81, hi: 0x82}, + {value: 0x812e, lo: 0x83, hi: 0x84}, + {value: 0x8133, lo: 0x85, hi: 0x89}, + {value: 0x812e, lo: 0x8a, hi: 0x8a}, + {value: 0x8133, lo: 0x8b, hi: 0x9c}, + {value: 0x812e, lo: 0x9d, hi: 0x9d}, + {value: 0x8133, lo: 0xa0, hi: 0xa5}, + {value: 0x812e, lo: 0xa6, hi: 0xa6}, + {value: 0x8133, lo: 0xa7, hi: 0xaa}, + {value: 0x8136, lo: 0xab, hi: 0xab}, + // Block 0x38, offset 0x145 {value: 0x0000, lo: 0x08}, - {value: 0x2d73, lo: 0x80, hi: 0x80}, - {value: 0x2d7b, lo: 0x81, hi: 0x81}, + {value: 0x3f27, lo: 0x80, hi: 0x80}, + {value: 0x3f2f, lo: 0x81, hi: 0x81}, {value: 0xa000, lo: 0x82, hi: 0x82}, - {value: 0x2d83, lo: 0x83, hi: 0x83}, + {value: 0x3f37, lo: 0x83, hi: 0x83}, {value: 0x8105, lo: 0x84, hi: 0x84}, {value: 0x8133, lo: 0xab, hi: 0xab}, {value: 0x812e, lo: 0xac, hi: 0xac}, {value: 0x8133, lo: 0xad, hi: 0xb3}, - // Block 0x38, offset 0x13f + // Block 0x39, offset 0x14e {value: 0x0000, lo: 0x01}, {value: 0x8105, lo: 0xaa, hi: 0xab}, - // Block 0x39, offset 0x141 + // Block 0x3a, offset 0x150 {value: 0x0000, lo: 0x02}, {value: 0x8103, lo: 0xa6, hi: 0xa6}, {value: 0x8105, lo: 0xb2, hi: 0xb3}, - // Block 0x3a, offset 0x144 + // Block 0x3b, offset 0x153 {value: 0x0000, lo: 0x01}, {value: 0x8103, lo: 0xb7, hi: 0xb7}, - // Block 0x3b, offset 0x146 + // Block 0x3c, offset 0x155 {value: 0x0000, lo: 0x0a}, {value: 0x8133, lo: 0x90, hi: 0x92}, {value: 0x8101, lo: 0x94, hi: 0x94}, @@ -6140,66 +6380,66 @@ var nfkcSparseValues = [895]valueRange{ {value: 0x812e, lo: 0xad, hi: 0xad}, {value: 0x8133, lo: 0xb4, hi: 0xb4}, {value: 0x8133, lo: 0xb8, hi: 0xb9}, - // Block 0x3c, offset 0x151 + // Block 0x3d, offset 0x160 {value: 0x0002, lo: 0x0a}, {value: 0x0043, lo: 0xac, hi: 0xac}, {value: 0x00d1, lo: 0xad, hi: 0xad}, {value: 0x0045, lo: 0xae, hi: 0xae}, {value: 0x0049, lo: 0xb0, hi: 0xb1}, - {value: 0x00e6, lo: 0xb2, hi: 0xb2}, + {value: 0x00ec, lo: 0xb2, hi: 0xb2}, {value: 0x004f, lo: 0xb3, hi: 0xba}, {value: 0x005f, lo: 0xbc, hi: 0xbc}, - {value: 0x00ef, lo: 0xbd, hi: 0xbd}, + {value: 0x00fe, lo: 0xbd, hi: 0xbd}, {value: 0x0061, lo: 0xbe, hi: 0xbe}, {value: 0x0065, lo: 0xbf, hi: 0xbf}, - // Block 0x3d, offset 0x15c + // Block 0x3e, offset 0x16b {value: 0x0000, lo: 0x0d}, {value: 0x0001, lo: 0x80, hi: 0x8a}, - {value: 0x043e, lo: 0x91, hi: 0x91}, - {value: 0x42b2, lo: 0x97, hi: 0x97}, + {value: 0x0532, lo: 0x91, hi: 0x91}, + {value: 0x439a, lo: 0x97, hi: 0x97}, {value: 0x001d, lo: 0xa4, hi: 0xa4}, - {value: 0x1876, lo: 0xa5, hi: 0xa5}, - {value: 0x1b62, lo: 0xa6, hi: 0xa6}, + {value: 0x19a0, lo: 0xa5, hi: 0xa5}, + {value: 0x1c8c, lo: 0xa6, hi: 0xa6}, {value: 0x0001, lo: 0xaf, hi: 0xaf}, - {value: 0x2697, lo: 0xb3, hi: 0xb3}, - {value: 0x280b, lo: 0xb4, hi: 0xb4}, - {value: 0x269e, lo: 0xb6, hi: 0xb6}, - {value: 0x2815, lo: 0xb7, hi: 0xb7}, - {value: 0x1870, lo: 0xbc, hi: 0xbc}, - {value: 0x4280, lo: 0xbe, hi: 0xbe}, - // Block 0x3e, offset 0x16a + {value: 0x27c1, lo: 0xb3, hi: 0xb3}, + {value: 0x2935, lo: 0xb4, hi: 0xb4}, + {value: 0x27c8, lo: 0xb6, hi: 0xb6}, + {value: 0x293f, lo: 0xb7, hi: 0xb7}, + {value: 0x199a, lo: 0xbc, hi: 0xbc}, + {value: 0x4368, lo: 0xbe, hi: 0xbe}, + // Block 0x3f, offset 0x179 {value: 0x0002, lo: 0x0d}, - {value: 0x1936, lo: 0x87, hi: 0x87}, - {value: 0x1933, lo: 0x88, hi: 0x88}, - {value: 0x1873, lo: 0x89, hi: 0x89}, - {value: 0x299b, lo: 0x97, hi: 0x97}, + {value: 0x1a60, lo: 0x87, hi: 0x87}, + {value: 0x1a5d, lo: 0x88, hi: 0x88}, + {value: 0x199d, lo: 0x89, hi: 0x89}, + {value: 0x2ac5, lo: 0x97, hi: 0x97}, {value: 0x0001, lo: 0x9f, hi: 0x9f}, {value: 0x0021, lo: 0xb0, hi: 0xb0}, {value: 0x0093, lo: 0xb1, hi: 0xb1}, {value: 0x0029, lo: 0xb4, hi: 0xb9}, {value: 0x0017, lo: 0xba, hi: 0xba}, - {value: 0x046a, lo: 0xbb, hi: 0xbb}, + {value: 0x055e, lo: 0xbb, hi: 0xbb}, {value: 0x003b, lo: 0xbc, hi: 0xbc}, {value: 0x0011, lo: 0xbd, hi: 0xbe}, {value: 0x009d, lo: 0xbf, hi: 0xbf}, - // Block 0x3f, offset 0x178 + // Block 0x40, offset 0x187 {value: 0x0002, lo: 0x0f}, {value: 0x0021, lo: 0x80, hi: 0x89}, {value: 0x0017, lo: 0x8a, hi: 0x8a}, - {value: 0x046a, lo: 0x8b, hi: 0x8b}, + {value: 0x055e, lo: 0x8b, hi: 0x8b}, {value: 0x003b, lo: 0x8c, hi: 0x8c}, {value: 0x0011, lo: 0x8d, hi: 0x8e}, {value: 0x0083, lo: 0x90, hi: 0x90}, {value: 0x008b, lo: 0x91, hi: 0x91}, {value: 0x009f, lo: 0x92, hi: 0x92}, {value: 0x00b1, lo: 0x93, hi: 0x93}, - {value: 0x0104, lo: 0x94, hi: 0x94}, + {value: 0x011f, lo: 0x94, hi: 0x94}, {value: 0x0091, lo: 0x95, hi: 0x95}, {value: 0x0097, lo: 0x96, hi: 0x99}, {value: 0x00a1, lo: 0x9a, hi: 0x9a}, {value: 0x00a7, lo: 0x9b, hi: 0x9c}, - {value: 0x199f, lo: 0xa8, hi: 0xa8}, - // Block 0x40, offset 0x188 + {value: 0x1ac9, lo: 0xa8, hi: 0xa8}, + // Block 0x41, offset 0x197 {value: 0x0000, lo: 0x0d}, {value: 0x8133, lo: 0x90, hi: 0x91}, {value: 0x8101, lo: 0x92, hi: 0x93}, @@ -6214,94 +6454,94 @@ var nfkcSparseValues = [895]valueRange{ {value: 0x8101, lo: 0xaa, hi: 0xab}, {value: 0x812e, lo: 0xac, hi: 0xaf}, {value: 0x8133, lo: 0xb0, hi: 0xb0}, - // Block 0x41, offset 0x196 + // Block 0x42, offset 0x1a5 {value: 0x0007, lo: 0x06}, - {value: 0x2186, lo: 0x89, hi: 0x89}, + {value: 0x22b0, lo: 0x89, hi: 0x89}, {value: 0xa000, lo: 0x90, hi: 0x90}, {value: 0xa000, lo: 0x92, hi: 0x92}, {value: 0xa000, lo: 0x94, hi: 0x94}, - {value: 0x3bd0, lo: 0x9a, hi: 0x9b}, - {value: 0x3bde, lo: 0xae, hi: 0xae}, - // Block 0x42, offset 0x19d + {value: 0x3b18, lo: 0x9a, hi: 0x9b}, + {value: 0x3b26, lo: 0xae, hi: 0xae}, + // Block 0x43, offset 0x1ac {value: 0x000e, lo: 0x05}, - {value: 0x3be5, lo: 0x8d, hi: 0x8e}, - {value: 0x3bec, lo: 0x8f, hi: 0x8f}, + {value: 0x3b2d, lo: 0x8d, hi: 0x8e}, + {value: 0x3b34, lo: 0x8f, hi: 0x8f}, {value: 0xa000, lo: 0x90, hi: 0x90}, {value: 0xa000, lo: 0x92, hi: 0x92}, {value: 0xa000, lo: 0x94, hi: 0x94}, - // Block 0x43, offset 0x1a3 + // Block 0x44, offset 0x1b2 {value: 0x017a, lo: 0x0e}, {value: 0xa000, lo: 0x83, hi: 0x83}, - {value: 0x3bfa, lo: 0x84, hi: 0x84}, + {value: 0x3b42, lo: 0x84, hi: 0x84}, {value: 0xa000, lo: 0x88, hi: 0x88}, - {value: 0x3c01, lo: 0x89, hi: 0x89}, + {value: 0x3b49, lo: 0x89, hi: 0x89}, {value: 0xa000, lo: 0x8b, hi: 0x8b}, - {value: 0x3c08, lo: 0x8c, hi: 0x8c}, + {value: 0x3b50, lo: 0x8c, hi: 0x8c}, {value: 0xa000, lo: 0xa3, hi: 0xa3}, - {value: 0x3c0f, lo: 0xa4, hi: 0xa4}, + {value: 0x3b57, lo: 0xa4, hi: 0xa4}, {value: 0xa000, lo: 0xa5, hi: 0xa5}, - {value: 0x3c16, lo: 0xa6, hi: 0xa6}, - {value: 0x26a5, lo: 0xac, hi: 0xad}, - {value: 0x26ac, lo: 0xaf, hi: 0xaf}, - {value: 0x2829, lo: 0xb0, hi: 0xb0}, + {value: 0x3b5e, lo: 0xa6, hi: 0xa6}, + {value: 0x27cf, lo: 0xac, hi: 0xad}, + {value: 0x27d6, lo: 0xaf, hi: 0xaf}, + {value: 0x2953, lo: 0xb0, hi: 0xb0}, {value: 0xa000, lo: 0xbc, hi: 0xbc}, - // Block 0x44, offset 0x1b2 + // Block 0x45, offset 0x1c1 {value: 0x0007, lo: 0x03}, - {value: 0x3c7f, lo: 0xa0, hi: 0xa1}, - {value: 0x3ca9, lo: 0xa2, hi: 0xa3}, - {value: 0x3cd3, lo: 0xaa, hi: 0xad}, - // Block 0x45, offset 0x1b6 + {value: 0x3bc7, lo: 0xa0, hi: 0xa1}, + {value: 0x3bf1, lo: 0xa2, hi: 0xa3}, + {value: 0x3c1b, lo: 0xaa, hi: 0xad}, + // Block 0x46, offset 0x1c5 {value: 0x0004, lo: 0x01}, - {value: 0x048e, lo: 0xa9, hi: 0xaa}, - // Block 0x46, offset 0x1b8 + {value: 0x0586, lo: 0xa9, hi: 0xaa}, + // Block 0x47, offset 0x1c7 {value: 0x0002, lo: 0x03}, {value: 0x0057, lo: 0x80, hi: 0x8f}, {value: 0x0083, lo: 0x90, hi: 0xa9}, {value: 0x0021, lo: 0xaa, hi: 0xaa}, - // Block 0x47, offset 0x1bc + // Block 0x48, offset 0x1cb {value: 0x0000, lo: 0x01}, - {value: 0x29a8, lo: 0x8c, hi: 0x8c}, - // Block 0x48, offset 0x1be + {value: 0x2ad2, lo: 0x8c, hi: 0x8c}, + // Block 0x49, offset 0x1cd {value: 0x0266, lo: 0x02}, - {value: 0x1b92, lo: 0xb4, hi: 0xb4}, - {value: 0x1930, lo: 0xb5, hi: 0xb6}, - // Block 0x49, offset 0x1c1 + {value: 0x1cbc, lo: 0xb4, hi: 0xb4}, + {value: 0x1a5a, lo: 0xb5, hi: 0xb6}, + // Block 0x4a, offset 0x1d0 {value: 0x0000, lo: 0x01}, - {value: 0x44f4, lo: 0x9c, hi: 0x9c}, - // Block 0x4a, offset 0x1c3 + {value: 0x45dc, lo: 0x9c, hi: 0x9c}, + // Block 0x4b, offset 0x1d2 {value: 0x0000, lo: 0x02}, {value: 0x0095, lo: 0xbc, hi: 0xbc}, {value: 0x006d, lo: 0xbd, hi: 0xbd}, - // Block 0x4b, offset 0x1c6 + // Block 0x4c, offset 0x1d5 {value: 0x0000, lo: 0x01}, {value: 0x8133, lo: 0xaf, hi: 0xb1}, - // Block 0x4c, offset 0x1c8 + // Block 0x4d, offset 0x1d7 {value: 0x0000, lo: 0x02}, - {value: 0x0482, lo: 0xaf, hi: 0xaf}, + {value: 0x057a, lo: 0xaf, hi: 0xaf}, {value: 0x8105, lo: 0xbf, hi: 0xbf}, - // Block 0x4d, offset 0x1cb + // Block 0x4e, offset 0x1da {value: 0x0000, lo: 0x01}, {value: 0x8133, lo: 0xa0, hi: 0xbf}, - // Block 0x4e, offset 0x1cd + // Block 0x4f, offset 0x1dc {value: 0x0000, lo: 0x01}, - {value: 0x0dc6, lo: 0x9f, hi: 0x9f}, - // Block 0x4f, offset 0x1cf + {value: 0x0ebe, lo: 0x9f, hi: 0x9f}, + // Block 0x50, offset 0x1de {value: 0x0000, lo: 0x01}, - {value: 0x1632, lo: 0xb3, hi: 0xb3}, - // Block 0x50, offset 0x1d1 + {value: 0x172a, lo: 0xb3, hi: 0xb3}, + // Block 0x51, offset 0x1e0 {value: 0x0004, lo: 0x0b}, - {value: 0x159a, lo: 0x80, hi: 0x82}, - {value: 0x15b2, lo: 0x83, hi: 0x83}, - {value: 0x15ca, lo: 0x84, hi: 0x85}, - {value: 0x15da, lo: 0x86, hi: 0x89}, - {value: 0x15ee, lo: 0x8a, hi: 0x8c}, - {value: 0x1602, lo: 0x8d, hi: 0x8d}, - {value: 0x160a, lo: 0x8e, hi: 0x8e}, - {value: 0x1612, lo: 0x8f, hi: 0x90}, - {value: 0x161e, lo: 0x91, hi: 0x93}, - {value: 0x162e, lo: 0x94, hi: 0x94}, - {value: 0x1636, lo: 0x95, hi: 0x95}, - // Block 0x51, offset 0x1dd + {value: 0x1692, lo: 0x80, hi: 0x82}, + {value: 0x16aa, lo: 0x83, hi: 0x83}, + {value: 0x16c2, lo: 0x84, hi: 0x85}, + {value: 0x16d2, lo: 0x86, hi: 0x89}, + {value: 0x16e6, lo: 0x8a, hi: 0x8c}, + {value: 0x16fa, lo: 0x8d, hi: 0x8d}, + {value: 0x1702, lo: 0x8e, hi: 0x8e}, + {value: 0x170a, lo: 0x8f, hi: 0x90}, + {value: 0x1716, lo: 0x91, hi: 0x93}, + {value: 0x1726, lo: 0x94, hi: 0x94}, + {value: 0x172e, lo: 0x95, hi: 0x95}, + // Block 0x52, offset 0x1ec {value: 0x0004, lo: 0x09}, {value: 0x0001, lo: 0x80, hi: 0x80}, {value: 0x812d, lo: 0xaa, hi: 0xaa}, @@ -6310,78 +6550,82 @@ var nfkcSparseValues = [895]valueRange{ {value: 0x812f, lo: 0xad, hi: 0xad}, {value: 0x8130, lo: 0xae, hi: 0xae}, {value: 0x8130, lo: 0xaf, hi: 0xaf}, - {value: 0x04b6, lo: 0xb6, hi: 0xb6}, - {value: 0x088a, lo: 0xb8, hi: 0xba}, - // Block 0x52, offset 0x1e7 + {value: 0x05ae, lo: 0xb6, hi: 0xb6}, + {value: 0x0982, lo: 0xb8, hi: 0xba}, + // Block 0x53, offset 0x1f6 {value: 0x0006, lo: 0x09}, - {value: 0x0316, lo: 0xb1, hi: 0xb1}, - {value: 0x031a, lo: 0xb2, hi: 0xb2}, - {value: 0x4a52, lo: 0xb3, hi: 0xb3}, - {value: 0x031e, lo: 0xb4, hi: 0xb4}, - {value: 0x4a58, lo: 0xb5, hi: 0xb6}, - {value: 0x0322, lo: 0xb7, hi: 0xb7}, - {value: 0x0326, lo: 0xb8, hi: 0xb8}, - {value: 0x032a, lo: 0xb9, hi: 0xb9}, - {value: 0x4a64, lo: 0xba, hi: 0xbf}, - // Block 0x53, offset 0x1f1 + {value: 0x0406, lo: 0xb1, hi: 0xb1}, + {value: 0x040a, lo: 0xb2, hi: 0xb2}, + {value: 0x4bcc, lo: 0xb3, hi: 0xb3}, + {value: 0x040e, lo: 0xb4, hi: 0xb4}, + {value: 0x4bd2, lo: 0xb5, hi: 0xb6}, + {value: 0x0412, lo: 0xb7, hi: 0xb7}, + {value: 0x0416, lo: 0xb8, hi: 0xb8}, + {value: 0x041a, lo: 0xb9, hi: 0xb9}, + {value: 0x4bde, lo: 0xba, hi: 0xbf}, + // Block 0x54, offset 0x200 {value: 0x0000, lo: 0x02}, {value: 0x8133, lo: 0xaf, hi: 0xaf}, {value: 0x8133, lo: 0xb4, hi: 0xbd}, - // Block 0x54, offset 0x1f4 + // Block 0x55, offset 0x203 {value: 0x0000, lo: 0x03}, - {value: 0x0212, lo: 0x9c, hi: 0x9c}, - {value: 0x0215, lo: 0x9d, hi: 0x9d}, + {value: 0x02d8, lo: 0x9c, hi: 0x9c}, + {value: 0x02de, lo: 0x9d, hi: 0x9d}, {value: 0x8133, lo: 0x9e, hi: 0x9f}, - // Block 0x55, offset 0x1f8 + // Block 0x56, offset 0x207 {value: 0x0000, lo: 0x01}, {value: 0x8133, lo: 0xb0, hi: 0xb1}, - // Block 0x56, offset 0x1fa + // Block 0x57, offset 0x209 {value: 0x0000, lo: 0x01}, - {value: 0x163e, lo: 0xb0, hi: 0xb0}, - // Block 0x57, offset 0x1fc - {value: 0x000c, lo: 0x01}, - {value: 0x00d7, lo: 0xb8, hi: 0xb9}, - // Block 0x58, offset 0x1fe + {value: 0x173e, lo: 0xb0, hi: 0xb0}, + // Block 0x58, offset 0x20b + {value: 0x0006, lo: 0x05}, + {value: 0x0067, lo: 0xb1, hi: 0xb1}, + {value: 0x0047, lo: 0xb2, hi: 0xb3}, + {value: 0x0063, lo: 0xb4, hi: 0xb4}, + {value: 0x00dd, lo: 0xb8, hi: 0xb8}, + {value: 0x00e9, lo: 0xb9, hi: 0xb9}, + // Block 0x59, offset 0x211 {value: 0x0000, lo: 0x02}, {value: 0x8105, lo: 0x86, hi: 0x86}, {value: 0x8105, lo: 0xac, hi: 0xac}, - // Block 0x59, offset 0x201 + // Block 0x5a, offset 0x214 {value: 0x0000, lo: 0x02}, {value: 0x8105, lo: 0x84, hi: 0x84}, {value: 0x8133, lo: 0xa0, hi: 0xb1}, - // Block 0x5a, offset 0x204 + // Block 0x5b, offset 0x217 {value: 0x0000, lo: 0x01}, {value: 0x812e, lo: 0xab, hi: 0xad}, - // Block 0x5b, offset 0x206 + // Block 0x5c, offset 0x219 {value: 0x0000, lo: 0x01}, {value: 0x8105, lo: 0x93, hi: 0x93}, - // Block 0x5c, offset 0x208 + // Block 0x5d, offset 0x21b {value: 0x0000, lo: 0x01}, {value: 0x8103, lo: 0xb3, hi: 0xb3}, - // Block 0x5d, offset 0x20a + // Block 0x5e, offset 0x21d {value: 0x0000, lo: 0x01}, {value: 0x8105, lo: 0x80, hi: 0x80}, - // Block 0x5e, offset 0x20c + // Block 0x5f, offset 0x21f {value: 0x0000, lo: 0x05}, {value: 0x8133, lo: 0xb0, hi: 0xb0}, {value: 0x8133, lo: 0xb2, hi: 0xb3}, {value: 0x812e, lo: 0xb4, hi: 0xb4}, {value: 0x8133, lo: 0xb7, hi: 0xb8}, {value: 0x8133, lo: 0xbe, hi: 0xbf}, - // Block 0x5f, offset 0x212 + // Block 0x60, offset 0x225 {value: 0x0000, lo: 0x02}, {value: 0x8133, lo: 0x81, hi: 0x81}, {value: 0x8105, lo: 0xb6, hi: 0xb6}, - // Block 0x60, offset 0x215 - {value: 0x0008, lo: 0x04}, - {value: 0x163a, lo: 0x9c, hi: 0x9d}, - {value: 0x0125, lo: 0x9e, hi: 0x9e}, - {value: 0x1646, lo: 0x9f, hi: 0x9f}, - {value: 0x015e, lo: 0xa9, hi: 0xa9}, - // Block 0x61, offset 0x21a + // Block 0x61, offset 0x228 + {value: 0x000c, lo: 0x04}, + {value: 0x173a, lo: 0x9c, hi: 0x9d}, + {value: 0x014f, lo: 0x9e, hi: 0x9e}, + {value: 0x174a, lo: 0x9f, hi: 0x9f}, + {value: 0x01a6, lo: 0xa9, hi: 0xa9}, + // Block 0x62, offset 0x22d {value: 0x0000, lo: 0x01}, {value: 0x8105, lo: 0xad, hi: 0xad}, - // Block 0x62, offset 0x21c + // Block 0x63, offset 0x22f {value: 0x0000, lo: 0x06}, {value: 0xe500, lo: 0x80, hi: 0x80}, {value: 0xc600, lo: 0x81, hi: 0x9b}, @@ -6389,21 +6633,21 @@ var nfkcSparseValues = [895]valueRange{ {value: 0xc600, lo: 0x9d, hi: 0xb7}, {value: 0xe500, lo: 0xb8, hi: 0xb8}, {value: 0xc600, lo: 0xb9, hi: 0xbf}, - // Block 0x63, offset 0x223 + // Block 0x64, offset 0x236 {value: 0x0000, lo: 0x05}, {value: 0xc600, lo: 0x80, hi: 0x93}, {value: 0xe500, lo: 0x94, hi: 0x94}, {value: 0xc600, lo: 0x95, hi: 0xaf}, {value: 0xe500, lo: 0xb0, hi: 0xb0}, {value: 0xc600, lo: 0xb1, hi: 0xbf}, - // Block 0x64, offset 0x229 + // Block 0x65, offset 0x23c {value: 0x0000, lo: 0x05}, {value: 0xc600, lo: 0x80, hi: 0x8b}, {value: 0xe500, lo: 0x8c, hi: 0x8c}, {value: 0xc600, lo: 0x8d, hi: 0xa7}, {value: 0xe500, lo: 0xa8, hi: 0xa8}, {value: 0xc600, lo: 0xa9, hi: 0xbf}, - // Block 0x65, offset 0x22f + // Block 0x66, offset 0x242 {value: 0x0000, lo: 0x07}, {value: 0xc600, lo: 0x80, hi: 0x83}, {value: 0xe500, lo: 0x84, hi: 0x84}, @@ -6412,237 +6656,303 @@ var nfkcSparseValues = [895]valueRange{ {value: 0xc600, lo: 0xa1, hi: 0xbb}, {value: 0xe500, lo: 0xbc, hi: 0xbc}, {value: 0xc600, lo: 0xbd, hi: 0xbf}, - // Block 0x66, offset 0x237 + // Block 0x67, offset 0x24a {value: 0x0000, lo: 0x05}, {value: 0xc600, lo: 0x80, hi: 0x97}, {value: 0xe500, lo: 0x98, hi: 0x98}, {value: 0xc600, lo: 0x99, hi: 0xb3}, {value: 0xe500, lo: 0xb4, hi: 0xb4}, {value: 0xc600, lo: 0xb5, hi: 0xbf}, - // Block 0x67, offset 0x23d + // Block 0x68, offset 0x250 {value: 0x0000, lo: 0x05}, {value: 0xc600, lo: 0x80, hi: 0x8f}, {value: 0xe500, lo: 0x90, hi: 0x90}, {value: 0xc600, lo: 0x91, hi: 0xab}, {value: 0xe500, lo: 0xac, hi: 0xac}, {value: 0xc600, lo: 0xad, hi: 0xbf}, - // Block 0x68, offset 0x243 + // Block 0x69, offset 0x256 {value: 0x0000, lo: 0x05}, {value: 0xc600, lo: 0x80, hi: 0x87}, {value: 0xe500, lo: 0x88, hi: 0x88}, {value: 0xc600, lo: 0x89, hi: 0xa3}, {value: 0xe500, lo: 0xa4, hi: 0xa4}, {value: 0xc600, lo: 0xa5, hi: 0xbf}, - // Block 0x69, offset 0x249 + // Block 0x6a, offset 0x25c {value: 0x0000, lo: 0x03}, {value: 0xc600, lo: 0x80, hi: 0x87}, {value: 0xe500, lo: 0x88, hi: 0x88}, {value: 0xc600, lo: 0x89, hi: 0xa3}, - // Block 0x6a, offset 0x24d + // Block 0x6b, offset 0x260 {value: 0x0002, lo: 0x01}, {value: 0x0003, lo: 0x81, hi: 0xbf}, - // Block 0x6b, offset 0x24f + // Block 0x6c, offset 0x262 {value: 0x0000, lo: 0x01}, {value: 0x812e, lo: 0xbd, hi: 0xbd}, - // Block 0x6c, offset 0x251 + // Block 0x6d, offset 0x264 {value: 0x0000, lo: 0x01}, {value: 0x812e, lo: 0xa0, hi: 0xa0}, - // Block 0x6d, offset 0x253 + // Block 0x6e, offset 0x266 {value: 0x0000, lo: 0x01}, {value: 0x8133, lo: 0xb6, hi: 0xba}, - // Block 0x6e, offset 0x255 + // Block 0x6f, offset 0x268 + {value: 0x0000, lo: 0x04}, + {value: 0x410f, lo: 0x89, hi: 0x89}, + {value: 0xa000, lo: 0x92, hi: 0x92}, + {value: 0xa000, lo: 0x9a, hi: 0x9a}, + {value: 0x4117, lo: 0xa4, hi: 0xa4}, + // Block 0x70, offset 0x26d {value: 0x002d, lo: 0x05}, {value: 0x812e, lo: 0x8d, hi: 0x8d}, {value: 0x8133, lo: 0x8f, hi: 0x8f}, {value: 0x8133, lo: 0xb8, hi: 0xb8}, {value: 0x8101, lo: 0xb9, hi: 0xba}, {value: 0x8105, lo: 0xbf, hi: 0xbf}, - // Block 0x6f, offset 0x25b + // Block 0x71, offset 0x273 {value: 0x0000, lo: 0x02}, {value: 0x8133, lo: 0xa5, hi: 0xa5}, {value: 0x812e, lo: 0xa6, hi: 0xa6}, - // Block 0x70, offset 0x25e + // Block 0x72, offset 0x276 {value: 0x0000, lo: 0x01}, {value: 0x8133, lo: 0xa4, hi: 0xa7}, - // Block 0x71, offset 0x260 + // Block 0x73, offset 0x278 + {value: 0x0000, lo: 0x01}, + {value: 0x8133, lo: 0xa9, hi: 0xad}, + // Block 0x74, offset 0x27a {value: 0x0000, lo: 0x01}, {value: 0x8133, lo: 0xab, hi: 0xac}, - // Block 0x72, offset 0x262 + // Block 0x75, offset 0x27c + {value: 0x0000, lo: 0x02}, + {value: 0x812e, lo: 0xba, hi: 0xbb}, + {value: 0x812e, lo: 0xbd, hi: 0xbf}, + // Block 0x76, offset 0x27f {value: 0x0000, lo: 0x05}, {value: 0x812e, lo: 0x86, hi: 0x87}, {value: 0x8133, lo: 0x88, hi: 0x8a}, {value: 0x812e, lo: 0x8b, hi: 0x8b}, {value: 0x8133, lo: 0x8c, hi: 0x8c}, {value: 0x812e, lo: 0x8d, hi: 0x90}, - // Block 0x73, offset 0x268 - {value: 0x0000, lo: 0x02}, + // Block 0x77, offset 0x285 + {value: 0x0005, lo: 0x03}, + {value: 0x8133, lo: 0x82, hi: 0x82}, + {value: 0x812e, lo: 0x83, hi: 0x84}, + {value: 0x812e, lo: 0x85, hi: 0x85}, + // Block 0x78, offset 0x289 + {value: 0x0000, lo: 0x03}, {value: 0x8105, lo: 0x86, hi: 0x86}, + {value: 0x8105, lo: 0xb0, hi: 0xb0}, {value: 0x8105, lo: 0xbf, hi: 0xbf}, - // Block 0x74, offset 0x26b + // Block 0x79, offset 0x28d {value: 0x17fe, lo: 0x07}, {value: 0xa000, lo: 0x99, hi: 0x99}, - {value: 0x424f, lo: 0x9a, hi: 0x9a}, + {value: 0x4287, lo: 0x9a, hi: 0x9a}, {value: 0xa000, lo: 0x9b, hi: 0x9b}, - {value: 0x4259, lo: 0x9c, hi: 0x9c}, + {value: 0x4291, lo: 0x9c, hi: 0x9c}, {value: 0xa000, lo: 0xa5, hi: 0xa5}, - {value: 0x4263, lo: 0xab, hi: 0xab}, + {value: 0x429b, lo: 0xab, hi: 0xab}, {value: 0x8105, lo: 0xb9, hi: 0xba}, - // Block 0x75, offset 0x273 + // Block 0x7a, offset 0x295 {value: 0x0000, lo: 0x06}, {value: 0x8133, lo: 0x80, hi: 0x82}, {value: 0x9900, lo: 0xa7, hi: 0xa7}, - {value: 0x2d8b, lo: 0xae, hi: 0xae}, - {value: 0x2d95, lo: 0xaf, hi: 0xaf}, + {value: 0x42a5, lo: 0xae, hi: 0xae}, + {value: 0x42af, lo: 0xaf, hi: 0xaf}, {value: 0xa000, lo: 0xb1, hi: 0xb2}, {value: 0x8105, lo: 0xb3, hi: 0xb4}, - // Block 0x76, offset 0x27a + // Block 0x7b, offset 0x29c {value: 0x0000, lo: 0x02}, {value: 0x8105, lo: 0x80, hi: 0x80}, {value: 0x8103, lo: 0x8a, hi: 0x8a}, - // Block 0x77, offset 0x27d + // Block 0x7c, offset 0x29f {value: 0x0000, lo: 0x02}, {value: 0x8105, lo: 0xb5, hi: 0xb5}, {value: 0x8103, lo: 0xb6, hi: 0xb6}, - // Block 0x78, offset 0x280 + // Block 0x7d, offset 0x2a2 {value: 0x0002, lo: 0x01}, {value: 0x8103, lo: 0xa9, hi: 0xaa}, - // Block 0x79, offset 0x282 + // Block 0x7e, offset 0x2a4 {value: 0x0000, lo: 0x02}, {value: 0x8103, lo: 0xbb, hi: 0xbc}, {value: 0x9900, lo: 0xbe, hi: 0xbe}, - // Block 0x7a, offset 0x285 + // Block 0x7f, offset 0x2a7 {value: 0x0000, lo: 0x07}, {value: 0xa000, lo: 0x87, hi: 0x87}, - {value: 0x2d9f, lo: 0x8b, hi: 0x8b}, - {value: 0x2da9, lo: 0x8c, hi: 0x8c}, + {value: 0x42b9, lo: 0x8b, hi: 0x8b}, + {value: 0x42c3, lo: 0x8c, hi: 0x8c}, {value: 0x8105, lo: 0x8d, hi: 0x8d}, {value: 0x9900, lo: 0x97, hi: 0x97}, {value: 0x8133, lo: 0xa6, hi: 0xac}, {value: 0x8133, lo: 0xb0, hi: 0xb4}, - // Block 0x7b, offset 0x28d + // Block 0x80, offset 0x2af + {value: 0x5d33, lo: 0x09}, + {value: 0xa000, lo: 0x82, hi: 0x82}, + {value: 0x42cd, lo: 0x83, hi: 0x84}, + {value: 0x42d7, lo: 0x85, hi: 0x85}, + {value: 0xa000, lo: 0x8b, hi: 0x8b}, + {value: 0x42e1, lo: 0x8e, hi: 0x8e}, + {value: 0xa000, lo: 0x90, hi: 0x90}, + {value: 0x42eb, lo: 0x91, hi: 0x91}, + {value: 0x9900, lo: 0xb8, hi: 0xb8}, + {value: 0x9900, lo: 0xbb, hi: 0xbb}, + // Block 0x81, offset 0x2b9 + {value: 0x0000, lo: 0x06}, + {value: 0xb900, lo: 0x82, hi: 0x82}, + {value: 0x4c14, lo: 0x85, hi: 0x85}, + {value: 0x4c09, lo: 0x87, hi: 0x87}, + {value: 0x4c1f, lo: 0x88, hi: 0x88}, + {value: 0x9900, lo: 0x89, hi: 0x89}, + {value: 0x8105, lo: 0x8e, hi: 0x90}, + // Block 0x82, offset 0x2c0 {value: 0x0000, lo: 0x03}, {value: 0x8105, lo: 0x82, hi: 0x82}, {value: 0x8103, lo: 0x86, hi: 0x86}, {value: 0x8133, lo: 0x9e, hi: 0x9e}, - // Block 0x7c, offset 0x291 - {value: 0x6b4d, lo: 0x06}, + // Block 0x83, offset 0x2c4 + {value: 0x560b, lo: 0x06}, {value: 0x9900, lo: 0xb0, hi: 0xb0}, {value: 0xa000, lo: 0xb9, hi: 0xb9}, {value: 0x9900, lo: 0xba, hi: 0xba}, - {value: 0x2dbd, lo: 0xbb, hi: 0xbb}, - {value: 0x2db3, lo: 0xbc, hi: 0xbd}, - {value: 0x2dc7, lo: 0xbe, hi: 0xbe}, - // Block 0x7d, offset 0x298 + {value: 0x42ff, lo: 0xbb, hi: 0xbb}, + {value: 0x42f5, lo: 0xbc, hi: 0xbd}, + {value: 0x4309, lo: 0xbe, hi: 0xbe}, + // Block 0x84, offset 0x2cb {value: 0x0000, lo: 0x02}, {value: 0x8105, lo: 0x82, hi: 0x82}, {value: 0x8103, lo: 0x83, hi: 0x83}, - // Block 0x7e, offset 0x29b + // Block 0x85, offset 0x2ce {value: 0x0000, lo: 0x05}, {value: 0x9900, lo: 0xaf, hi: 0xaf}, {value: 0xa000, lo: 0xb8, hi: 0xb9}, - {value: 0x2dd1, lo: 0xba, hi: 0xba}, - {value: 0x2ddb, lo: 0xbb, hi: 0xbb}, + {value: 0x4313, lo: 0xba, hi: 0xba}, + {value: 0x431d, lo: 0xbb, hi: 0xbb}, {value: 0x8105, lo: 0xbf, hi: 0xbf}, - // Block 0x7f, offset 0x2a1 + // Block 0x86, offset 0x2d4 {value: 0x0000, lo: 0x01}, {value: 0x8103, lo: 0x80, hi: 0x80}, - // Block 0x80, offset 0x2a3 + // Block 0x87, offset 0x2d6 {value: 0x0000, lo: 0x01}, {value: 0x8105, lo: 0xbf, hi: 0xbf}, - // Block 0x81, offset 0x2a5 + // Block 0x88, offset 0x2d8 {value: 0x0000, lo: 0x02}, {value: 0x8105, lo: 0xb6, hi: 0xb6}, {value: 0x8103, lo: 0xb7, hi: 0xb7}, - // Block 0x82, offset 0x2a8 + // Block 0x89, offset 0x2db {value: 0x0000, lo: 0x01}, {value: 0x8105, lo: 0xab, hi: 0xab}, - // Block 0x83, offset 0x2aa + // Block 0x8a, offset 0x2dd {value: 0x0000, lo: 0x02}, {value: 0x8105, lo: 0xb9, hi: 0xb9}, {value: 0x8103, lo: 0xba, hi: 0xba}, - // Block 0x84, offset 0x2ad + // Block 0x8b, offset 0x2e0 {value: 0x0000, lo: 0x04}, {value: 0x9900, lo: 0xb0, hi: 0xb0}, {value: 0xa000, lo: 0xb5, hi: 0xb5}, - {value: 0x2de5, lo: 0xb8, hi: 0xb8}, + {value: 0x4327, lo: 0xb8, hi: 0xb8}, {value: 0x8105, lo: 0xbd, hi: 0xbe}, - // Block 0x85, offset 0x2b2 + // Block 0x8c, offset 0x2e5 {value: 0x0000, lo: 0x01}, {value: 0x8103, lo: 0x83, hi: 0x83}, - // Block 0x86, offset 0x2b4 + // Block 0x8d, offset 0x2e7 {value: 0x0000, lo: 0x01}, {value: 0x8105, lo: 0xa0, hi: 0xa0}, - // Block 0x87, offset 0x2b6 + // Block 0x8e, offset 0x2e9 {value: 0x0000, lo: 0x01}, {value: 0x8105, lo: 0xb4, hi: 0xb4}, - // Block 0x88, offset 0x2b8 + // Block 0x8f, offset 0x2eb {value: 0x0000, lo: 0x01}, {value: 0x8105, lo: 0x87, hi: 0x87}, - // Block 0x89, offset 0x2ba + // Block 0x90, offset 0x2ed {value: 0x0000, lo: 0x01}, {value: 0x8105, lo: 0x99, hi: 0x99}, - // Block 0x8a, offset 0x2bc + // Block 0x91, offset 0x2ef {value: 0x0000, lo: 0x02}, {value: 0x8103, lo: 0x82, hi: 0x82}, {value: 0x8105, lo: 0x84, hi: 0x85}, - // Block 0x8b, offset 0x2bf + // Block 0x92, offset 0x2f2 {value: 0x0000, lo: 0x01}, {value: 0x8105, lo: 0x97, hi: 0x97}, - // Block 0x8c, offset 0x2c1 + // Block 0x93, offset 0x2f4 + {value: 0x0000, lo: 0x01}, + {value: 0x8105, lo: 0x81, hi: 0x82}, + // Block 0x94, offset 0x2f6 + {value: 0x0000, lo: 0x0c}, + {value: 0xb900, lo: 0x9e, hi: 0x9e}, + {value: 0x9900, lo: 0x9f, hi: 0xa0}, + {value: 0x4c83, lo: 0xa1, hi: 0xa1}, + {value: 0x4c8e, lo: 0xa2, hi: 0xa2}, + {value: 0x4c2a, lo: 0xa3, hi: 0xa3}, + {value: 0x4c40, lo: 0xa4, hi: 0xa4}, + {value: 0x4c35, lo: 0xa5, hi: 0xa5}, + {value: 0x4c56, lo: 0xa6, hi: 0xa6}, + {value: 0x4c74, lo: 0xa7, hi: 0xa7}, + {value: 0x4c65, lo: 0xa8, hi: 0xa8}, + {value: 0xb900, lo: 0xa9, hi: 0xa9}, + {value: 0x8105, lo: 0xaf, hi: 0xaf}, + // Block 0x95, offset 0x303 {value: 0x0000, lo: 0x01}, {value: 0x8101, lo: 0xb0, hi: 0xb4}, - // Block 0x8d, offset 0x2c3 + // Block 0x96, offset 0x305 {value: 0x0000, lo: 0x01}, {value: 0x8133, lo: 0xb0, hi: 0xb6}, - // Block 0x8e, offset 0x2c5 + // Block 0x97, offset 0x307 + {value: 0x0000, lo: 0x05}, + {value: 0xa000, lo: 0xa3, hi: 0xa3}, + {value: 0xb900, lo: 0xa7, hi: 0xa7}, + {value: 0x4c4b, lo: 0xa8, hi: 0xa8}, + {value: 0x4b35, lo: 0xa9, hi: 0xa9}, + {value: 0x4347, lo: 0xaa, hi: 0xaa}, + // Block 0x98, offset 0x30d {value: 0x0000, lo: 0x01}, {value: 0x8102, lo: 0xb0, hi: 0xb1}, - // Block 0x8f, offset 0x2c7 + // Block 0x99, offset 0x30f {value: 0x0000, lo: 0x01}, {value: 0x8101, lo: 0x9e, hi: 0x9e}, - // Block 0x90, offset 0x2c9 + // Block 0x9a, offset 0x311 + {value: 0x0002, lo: 0x02}, + {value: 0x0043, lo: 0x96, hi: 0xaf}, + {value: 0x0021, lo: 0xb0, hi: 0xb9}, + // Block 0x9b, offset 0x314 {value: 0x0000, lo: 0x0c}, - {value: 0x45e3, lo: 0x9e, hi: 0x9e}, - {value: 0x45ed, lo: 0x9f, hi: 0x9f}, - {value: 0x4621, lo: 0xa0, hi: 0xa0}, - {value: 0x462f, lo: 0xa1, hi: 0xa1}, - {value: 0x463d, lo: 0xa2, hi: 0xa2}, - {value: 0x464b, lo: 0xa3, hi: 0xa3}, - {value: 0x4659, lo: 0xa4, hi: 0xa4}, + {value: 0x4743, lo: 0x9e, hi: 0x9e}, + {value: 0x474d, lo: 0x9f, hi: 0x9f}, + {value: 0x4781, lo: 0xa0, hi: 0xa0}, + {value: 0x478f, lo: 0xa1, hi: 0xa1}, + {value: 0x479d, lo: 0xa2, hi: 0xa2}, + {value: 0x47ab, lo: 0xa3, hi: 0xa3}, + {value: 0x47b9, lo: 0xa4, hi: 0xa4}, {value: 0x812c, lo: 0xa5, hi: 0xa6}, {value: 0x8101, lo: 0xa7, hi: 0xa9}, {value: 0x8131, lo: 0xad, hi: 0xad}, {value: 0x812c, lo: 0xae, hi: 0xb2}, {value: 0x812e, lo: 0xbb, hi: 0xbf}, - // Block 0x91, offset 0x2d6 + // Block 0x9c, offset 0x321 {value: 0x0000, lo: 0x09}, {value: 0x812e, lo: 0x80, hi: 0x82}, {value: 0x8133, lo: 0x85, hi: 0x89}, {value: 0x812e, lo: 0x8a, hi: 0x8b}, {value: 0x8133, lo: 0xaa, hi: 0xad}, - {value: 0x45f7, lo: 0xbb, hi: 0xbb}, - {value: 0x4601, lo: 0xbc, hi: 0xbc}, - {value: 0x4667, lo: 0xbd, hi: 0xbd}, - {value: 0x4683, lo: 0xbe, hi: 0xbe}, - {value: 0x4675, lo: 0xbf, hi: 0xbf}, - // Block 0x92, offset 0x2e0 + {value: 0x4757, lo: 0xbb, hi: 0xbb}, + {value: 0x4761, lo: 0xbc, hi: 0xbc}, + {value: 0x47c7, lo: 0xbd, hi: 0xbd}, + {value: 0x47e3, lo: 0xbe, hi: 0xbe}, + {value: 0x47d5, lo: 0xbf, hi: 0xbf}, + // Block 0x9d, offset 0x32b {value: 0x0000, lo: 0x01}, - {value: 0x4691, lo: 0x80, hi: 0x80}, - // Block 0x93, offset 0x2e2 + {value: 0x47f1, lo: 0x80, hi: 0x80}, + // Block 0x9e, offset 0x32d {value: 0x0000, lo: 0x01}, {value: 0x8133, lo: 0x82, hi: 0x84}, - // Block 0x94, offset 0x2e4 + // Block 0x9f, offset 0x32f {value: 0x0002, lo: 0x03}, {value: 0x0043, lo: 0x80, hi: 0x99}, {value: 0x0083, lo: 0x9a, hi: 0xb3}, {value: 0x0043, lo: 0xb4, hi: 0xbf}, - // Block 0x95, offset 0x2e8 + // Block 0xa0, offset 0x333 {value: 0x0002, lo: 0x04}, {value: 0x005b, lo: 0x80, hi: 0x8d}, {value: 0x0083, lo: 0x8e, hi: 0x94}, {value: 0x0093, lo: 0x96, hi: 0xa7}, {value: 0x0043, lo: 0xa8, hi: 0xbf}, - // Block 0x96, offset 0x2ed + // Block 0xa1, offset 0x338 {value: 0x0002, lo: 0x0b}, {value: 0x0073, lo: 0x80, hi: 0x81}, {value: 0x0083, lo: 0x82, hi: 0x9b}, @@ -6655,13 +6965,13 @@ var nfkcSparseValues = [895]valueRange{ {value: 0x0083, lo: 0xb6, hi: 0xb9}, {value: 0x008d, lo: 0xbb, hi: 0xbb}, {value: 0x0091, lo: 0xbd, hi: 0xbf}, - // Block 0x97, offset 0x2f9 + // Block 0xa2, offset 0x344 {value: 0x0002, lo: 0x04}, {value: 0x0097, lo: 0x80, hi: 0x83}, {value: 0x00a1, lo: 0x85, hi: 0x8f}, {value: 0x0043, lo: 0x90, hi: 0xa9}, {value: 0x0083, lo: 0xaa, hi: 0xbf}, - // Block 0x98, offset 0x2fe + // Block 0xa3, offset 0x349 {value: 0x0002, lo: 0x08}, {value: 0x00af, lo: 0x80, hi: 0x83}, {value: 0x0043, lo: 0x84, hi: 0x85}, @@ -6671,146 +6981,160 @@ var nfkcSparseValues = [895]valueRange{ {value: 0x0083, lo: 0x9e, hi: 0xb7}, {value: 0x0043, lo: 0xb8, hi: 0xb9}, {value: 0x0049, lo: 0xbb, hi: 0xbe}, - // Block 0x99, offset 0x307 + // Block 0xa4, offset 0x352 {value: 0x0002, lo: 0x05}, {value: 0x0053, lo: 0x80, hi: 0x84}, {value: 0x005f, lo: 0x86, hi: 0x86}, {value: 0x0067, lo: 0x8a, hi: 0x90}, {value: 0x0083, lo: 0x92, hi: 0xab}, {value: 0x0043, lo: 0xac, hi: 0xbf}, - // Block 0x9a, offset 0x30d + // Block 0xa5, offset 0x358 {value: 0x0002, lo: 0x04}, {value: 0x006b, lo: 0x80, hi: 0x85}, {value: 0x0083, lo: 0x86, hi: 0x9f}, {value: 0x0043, lo: 0xa0, hi: 0xb9}, {value: 0x0083, lo: 0xba, hi: 0xbf}, - // Block 0x9b, offset 0x312 + // Block 0xa6, offset 0x35d {value: 0x0002, lo: 0x03}, {value: 0x008f, lo: 0x80, hi: 0x93}, {value: 0x0043, lo: 0x94, hi: 0xad}, {value: 0x0083, lo: 0xae, hi: 0xbf}, - // Block 0x9c, offset 0x316 + // Block 0xa7, offset 0x361 {value: 0x0002, lo: 0x04}, {value: 0x00a7, lo: 0x80, hi: 0x87}, {value: 0x0043, lo: 0x88, hi: 0xa1}, {value: 0x0083, lo: 0xa2, hi: 0xbb}, {value: 0x0043, lo: 0xbc, hi: 0xbf}, - // Block 0x9d, offset 0x31b + // Block 0xa8, offset 0x366 {value: 0x0002, lo: 0x03}, {value: 0x004b, lo: 0x80, hi: 0x95}, {value: 0x0083, lo: 0x96, hi: 0xaf}, {value: 0x0043, lo: 0xb0, hi: 0xbf}, - // Block 0x9e, offset 0x31f + // Block 0xa9, offset 0x36a {value: 0x0003, lo: 0x0f}, - {value: 0x01bb, lo: 0x80, hi: 0x80}, - {value: 0x0462, lo: 0x81, hi: 0x81}, - {value: 0x01be, lo: 0x82, hi: 0x9a}, - {value: 0x045e, lo: 0x9b, hi: 0x9b}, - {value: 0x01ca, lo: 0x9c, hi: 0x9c}, - {value: 0x01d3, lo: 0x9d, hi: 0x9d}, - {value: 0x01d9, lo: 0x9e, hi: 0x9e}, - {value: 0x01fd, lo: 0x9f, hi: 0x9f}, - {value: 0x01ee, lo: 0xa0, hi: 0xa0}, - {value: 0x01eb, lo: 0xa1, hi: 0xa1}, - {value: 0x0176, lo: 0xa2, hi: 0xb2}, - {value: 0x018b, lo: 0xb3, hi: 0xb3}, - {value: 0x01a9, lo: 0xb4, hi: 0xba}, - {value: 0x0462, lo: 0xbb, hi: 0xbb}, - {value: 0x01be, lo: 0xbc, hi: 0xbf}, - // Block 0x9f, offset 0x32f + {value: 0x023c, lo: 0x80, hi: 0x80}, + {value: 0x0556, lo: 0x81, hi: 0x81}, + {value: 0x023f, lo: 0x82, hi: 0x9a}, + {value: 0x0552, lo: 0x9b, hi: 0x9b}, + {value: 0x024b, lo: 0x9c, hi: 0x9c}, + {value: 0x0254, lo: 0x9d, hi: 0x9d}, + {value: 0x025a, lo: 0x9e, hi: 0x9e}, + {value: 0x027e, lo: 0x9f, hi: 0x9f}, + {value: 0x026f, lo: 0xa0, hi: 0xa0}, + {value: 0x026c, lo: 0xa1, hi: 0xa1}, + {value: 0x01f7, lo: 0xa2, hi: 0xb2}, + {value: 0x020c, lo: 0xb3, hi: 0xb3}, + {value: 0x022a, lo: 0xb4, hi: 0xba}, + {value: 0x0556, lo: 0xbb, hi: 0xbb}, + {value: 0x023f, lo: 0xbc, hi: 0xbf}, + // Block 0xaa, offset 0x37a {value: 0x0003, lo: 0x0d}, - {value: 0x01ca, lo: 0x80, hi: 0x94}, - {value: 0x045e, lo: 0x95, hi: 0x95}, - {value: 0x01ca, lo: 0x96, hi: 0x96}, - {value: 0x01d3, lo: 0x97, hi: 0x97}, - {value: 0x01d9, lo: 0x98, hi: 0x98}, - {value: 0x01fd, lo: 0x99, hi: 0x99}, - {value: 0x01ee, lo: 0x9a, hi: 0x9a}, - {value: 0x01eb, lo: 0x9b, hi: 0x9b}, - {value: 0x0176, lo: 0x9c, hi: 0xac}, - {value: 0x018b, lo: 0xad, hi: 0xad}, - {value: 0x01a9, lo: 0xae, hi: 0xb4}, - {value: 0x0462, lo: 0xb5, hi: 0xb5}, - {value: 0x01be, lo: 0xb6, hi: 0xbf}, - // Block 0xa0, offset 0x33d + {value: 0x024b, lo: 0x80, hi: 0x94}, + {value: 0x0552, lo: 0x95, hi: 0x95}, + {value: 0x024b, lo: 0x96, hi: 0x96}, + {value: 0x0254, lo: 0x97, hi: 0x97}, + {value: 0x025a, lo: 0x98, hi: 0x98}, + {value: 0x027e, lo: 0x99, hi: 0x99}, + {value: 0x026f, lo: 0x9a, hi: 0x9a}, + {value: 0x026c, lo: 0x9b, hi: 0x9b}, + {value: 0x01f7, lo: 0x9c, hi: 0xac}, + {value: 0x020c, lo: 0xad, hi: 0xad}, + {value: 0x022a, lo: 0xae, hi: 0xb4}, + {value: 0x0556, lo: 0xb5, hi: 0xb5}, + {value: 0x023f, lo: 0xb6, hi: 0xbf}, + // Block 0xab, offset 0x388 {value: 0x0003, lo: 0x0d}, - {value: 0x01dc, lo: 0x80, hi: 0x8e}, - {value: 0x045e, lo: 0x8f, hi: 0x8f}, - {value: 0x01ca, lo: 0x90, hi: 0x90}, - {value: 0x01d3, lo: 0x91, hi: 0x91}, - {value: 0x01d9, lo: 0x92, hi: 0x92}, - {value: 0x01fd, lo: 0x93, hi: 0x93}, - {value: 0x01ee, lo: 0x94, hi: 0x94}, - {value: 0x01eb, lo: 0x95, hi: 0x95}, - {value: 0x0176, lo: 0x96, hi: 0xa6}, - {value: 0x018b, lo: 0xa7, hi: 0xa7}, - {value: 0x01a9, lo: 0xa8, hi: 0xae}, - {value: 0x0462, lo: 0xaf, hi: 0xaf}, - {value: 0x01be, lo: 0xb0, hi: 0xbf}, - // Block 0xa1, offset 0x34b + {value: 0x025d, lo: 0x80, hi: 0x8e}, + {value: 0x0552, lo: 0x8f, hi: 0x8f}, + {value: 0x024b, lo: 0x90, hi: 0x90}, + {value: 0x0254, lo: 0x91, hi: 0x91}, + {value: 0x025a, lo: 0x92, hi: 0x92}, + {value: 0x027e, lo: 0x93, hi: 0x93}, + {value: 0x026f, lo: 0x94, hi: 0x94}, + {value: 0x026c, lo: 0x95, hi: 0x95}, + {value: 0x01f7, lo: 0x96, hi: 0xa6}, + {value: 0x020c, lo: 0xa7, hi: 0xa7}, + {value: 0x022a, lo: 0xa8, hi: 0xae}, + {value: 0x0556, lo: 0xaf, hi: 0xaf}, + {value: 0x023f, lo: 0xb0, hi: 0xbf}, + // Block 0xac, offset 0x396 {value: 0x0003, lo: 0x0d}, - {value: 0x01ee, lo: 0x80, hi: 0x88}, - {value: 0x045e, lo: 0x89, hi: 0x89}, - {value: 0x01ca, lo: 0x8a, hi: 0x8a}, - {value: 0x01d3, lo: 0x8b, hi: 0x8b}, - {value: 0x01d9, lo: 0x8c, hi: 0x8c}, - {value: 0x01fd, lo: 0x8d, hi: 0x8d}, - {value: 0x01ee, lo: 0x8e, hi: 0x8e}, - {value: 0x01eb, lo: 0x8f, hi: 0x8f}, - {value: 0x0176, lo: 0x90, hi: 0xa0}, - {value: 0x018b, lo: 0xa1, hi: 0xa1}, - {value: 0x01a9, lo: 0xa2, hi: 0xa8}, - {value: 0x0462, lo: 0xa9, hi: 0xa9}, - {value: 0x01be, lo: 0xaa, hi: 0xbf}, - // Block 0xa2, offset 0x359 - {value: 0x0000, lo: 0x05}, - {value: 0x8133, lo: 0x80, hi: 0x86}, - {value: 0x8133, lo: 0x88, hi: 0x98}, - {value: 0x8133, lo: 0x9b, hi: 0xa1}, - {value: 0x8133, lo: 0xa3, hi: 0xa4}, - {value: 0x8133, lo: 0xa6, hi: 0xaa}, - // Block 0xa3, offset 0x35f + {value: 0x026f, lo: 0x80, hi: 0x88}, + {value: 0x0552, lo: 0x89, hi: 0x89}, + {value: 0x024b, lo: 0x8a, hi: 0x8a}, + {value: 0x0254, lo: 0x8b, hi: 0x8b}, + {value: 0x025a, lo: 0x8c, hi: 0x8c}, + {value: 0x027e, lo: 0x8d, hi: 0x8d}, + {value: 0x026f, lo: 0x8e, hi: 0x8e}, + {value: 0x026c, lo: 0x8f, hi: 0x8f}, + {value: 0x01f7, lo: 0x90, hi: 0xa0}, + {value: 0x020c, lo: 0xa1, hi: 0xa1}, + {value: 0x022a, lo: 0xa2, hi: 0xa8}, + {value: 0x0556, lo: 0xa9, hi: 0xa9}, + {value: 0x023f, lo: 0xaa, hi: 0xbf}, + // Block 0xad, offset 0x3a4 + {value: 0x0000, lo: 0x01}, + {value: 0x8133, lo: 0x8f, hi: 0x8f}, + // Block 0xae, offset 0x3a6 + {value: 0x0000, lo: 0x01}, + {value: 0x8133, lo: 0xae, hi: 0xae}, + // Block 0xaf, offset 0x3a8 {value: 0x0000, lo: 0x01}, {value: 0x8133, lo: 0xac, hi: 0xaf}, - // Block 0xa4, offset 0x361 + // Block 0xb0, offset 0x3aa + {value: 0x0000, lo: 0x03}, + {value: 0x8134, lo: 0xac, hi: 0xad}, + {value: 0x812e, lo: 0xae, hi: 0xae}, + {value: 0x8133, lo: 0xaf, hi: 0xaf}, + // Block 0xb1, offset 0x3ae + {value: 0x0000, lo: 0x02}, + {value: 0x8133, lo: 0xae, hi: 0xae}, + {value: 0x812e, lo: 0xaf, hi: 0xaf}, + // Block 0xb2, offset 0x3b1 + {value: 0x0000, lo: 0x04}, + {value: 0x8133, lo: 0xa3, hi: 0xa3}, + {value: 0x8133, lo: 0xa6, hi: 0xa6}, + {value: 0x8133, lo: 0xae, hi: 0xaf}, + {value: 0x8133, lo: 0xb5, hi: 0xb5}, + // Block 0xb3, offset 0x3b6 {value: 0x0000, lo: 0x01}, {value: 0x812e, lo: 0x90, hi: 0x96}, - // Block 0xa5, offset 0x363 + // Block 0xb4, offset 0x3b8 {value: 0x0000, lo: 0x02}, {value: 0x8133, lo: 0x84, hi: 0x89}, {value: 0x8103, lo: 0x8a, hi: 0x8a}, - // Block 0xa6, offset 0x366 + // Block 0xb5, offset 0x3bb {value: 0x0002, lo: 0x0a}, {value: 0x0063, lo: 0x80, hi: 0x89}, - {value: 0x1954, lo: 0x8a, hi: 0x8a}, - {value: 0x1987, lo: 0x8b, hi: 0x8b}, - {value: 0x19a2, lo: 0x8c, hi: 0x8c}, - {value: 0x19a8, lo: 0x8d, hi: 0x8d}, - {value: 0x1bc6, lo: 0x8e, hi: 0x8e}, - {value: 0x19b4, lo: 0x8f, hi: 0x8f}, - {value: 0x197e, lo: 0xaa, hi: 0xaa}, - {value: 0x1981, lo: 0xab, hi: 0xab}, - {value: 0x1984, lo: 0xac, hi: 0xac}, - // Block 0xa7, offset 0x371 + {value: 0x1a7e, lo: 0x8a, hi: 0x8a}, + {value: 0x1ab1, lo: 0x8b, hi: 0x8b}, + {value: 0x1acc, lo: 0x8c, hi: 0x8c}, + {value: 0x1ad2, lo: 0x8d, hi: 0x8d}, + {value: 0x1cf0, lo: 0x8e, hi: 0x8e}, + {value: 0x1ade, lo: 0x8f, hi: 0x8f}, + {value: 0x1aa8, lo: 0xaa, hi: 0xaa}, + {value: 0x1aab, lo: 0xab, hi: 0xab}, + {value: 0x1aae, lo: 0xac, hi: 0xac}, + // Block 0xb6, offset 0x3c6 {value: 0x0000, lo: 0x01}, - {value: 0x1942, lo: 0x90, hi: 0x90}, - // Block 0xa8, offset 0x373 + {value: 0x1a6c, lo: 0x90, hi: 0x90}, + // Block 0xb7, offset 0x3c8 {value: 0x0028, lo: 0x09}, - {value: 0x286f, lo: 0x80, hi: 0x80}, - {value: 0x2833, lo: 0x81, hi: 0x81}, - {value: 0x283d, lo: 0x82, hi: 0x82}, - {value: 0x2851, lo: 0x83, hi: 0x84}, - {value: 0x285b, lo: 0x85, hi: 0x86}, - {value: 0x2847, lo: 0x87, hi: 0x87}, - {value: 0x2865, lo: 0x88, hi: 0x88}, - {value: 0x0b72, lo: 0x90, hi: 0x90}, - {value: 0x08ea, lo: 0x91, hi: 0x91}, - // Block 0xa9, offset 0x37d + {value: 0x2999, lo: 0x80, hi: 0x80}, + {value: 0x295d, lo: 0x81, hi: 0x81}, + {value: 0x2967, lo: 0x82, hi: 0x82}, + {value: 0x297b, lo: 0x83, hi: 0x84}, + {value: 0x2985, lo: 0x85, hi: 0x86}, + {value: 0x2971, lo: 0x87, hi: 0x87}, + {value: 0x298f, lo: 0x88, hi: 0x88}, + {value: 0x0c6a, lo: 0x90, hi: 0x90}, + {value: 0x09e2, lo: 0x91, hi: 0x91}, + // Block 0xb8, offset 0x3d2 {value: 0x0002, lo: 0x01}, {value: 0x0021, lo: 0xb0, hi: 0xb9}, } -// recompMap: 7528 bytes (entries only) +// recompMap: 7688 bytes (entries only) var recompMap map[uint32]rune var recompMapOnce sync.Once @@ -7743,6 +8067,8 @@ const recompMapPacked = "" + "0\xf10\x99\x00\x000\xf9" + // 0x30F13099: 0x000030F9 "0\xf20\x99\x00\x000\xfa" + // 0x30F23099: 0x000030FA "0\xfd0\x99\x00\x000\xfe" + // 0x30FD3099: 0x000030FE + "\x05\xd2\x03\a\x00\x01\x05\xc9" + // 0x05D20307: 0x000105C9 + "\x05\xda\x03\a\x00\x01\x05\xe4" + // 0x05DA0307: 0x000105E4 "\x10\x99\x10\xba\x00\x01\x10\x9a" + // 0x109910BA: 0x0001109A "\x10\x9b\x10\xba\x00\x01\x10\x9c" + // 0x109B10BA: 0x0001109C "\x10\xa5\x10\xba\x00\x01\x10\xab" + // 0x10A510BA: 0x000110AB @@ -7750,11 +8076,29 @@ const recompMapPacked = "" + "\x112\x11'\x00\x01\x11/" + // 0x11321127: 0x0001112F "\x13G\x13>\x00\x01\x13K" + // 0x1347133E: 0x0001134B "\x13G\x13W\x00\x01\x13L" + // 0x13471357: 0x0001134C + "\x13\x82\x13\xc9\x00\x01\x13\x83" + // 0x138213C9: 0x00011383 + "\x13\x84\x13\xbb\x00\x01\x13\x85" + // 0x138413BB: 0x00011385 + "\x13\x8b\x13\xc2\x00\x01\x13\x8e" + // 0x138B13C2: 0x0001138E + "\x13\x90\x13\xc9\x00\x01\x13\x91" + // 0x139013C9: 0x00011391 + "\x13\xc2\x13\xc2\x00\x01\x13\xc5" + // 0x13C213C2: 0x000113C5 + "\x13\xc2\x13\xb8\x00\x01\x13\xc7" + // 0x13C213B8: 0x000113C7 + "\x13\xc2\x13\xc9\x00\x01\x13\xc8" + // 0x13C213C9: 0x000113C8 "\x14\xb9\x14\xba\x00\x01\x14\xbb" + // 0x14B914BA: 0x000114BB "\x14\xb9\x14\xb0\x00\x01\x14\xbc" + // 0x14B914B0: 0x000114BC "\x14\xb9\x14\xbd\x00\x01\x14\xbe" + // 0x14B914BD: 0x000114BE "\x15\xb8\x15\xaf\x00\x01\x15\xba" + // 0x15B815AF: 0x000115BA "\x15\xb9\x15\xaf\x00\x01\x15\xbb" + // 0x15B915AF: 0x000115BB "\x195\x190\x00\x01\x198" + // 0x19351930: 0x00011938 + "a\x1ea\x1e\x00\x01a!" + // 0x611E611E: 0x00016121 + "a\x1ea)\x00\x01a\"" + // 0x611E6129: 0x00016122 + "a\x1ea\x1f\x00\x01a#" + // 0x611E611F: 0x00016123 + "a)a\x1f\x00\x01a$" + // 0x6129611F: 0x00016124 + "a\x1ea \x00\x01a%" + // 0x611E6120: 0x00016125 + "a!a\x1f\x00\x01a&" + // 0x6121611F: 0x00016126 + "a\"a\x1f\x00\x01a'" + // 0x6122611F: 0x00016127 + "a!a \x00\x01a(" + // 0x61216120: 0x00016128 + "mgmg\x00\x01mh" + // 0x6D676D67: 0x00016D68 + "mcmg\x00\x01mi" + // 0x6D636D67: 0x00016D69 + "mimg\x00\x01mj" + // 0x6D696D67: 0x00016D6A "" - // Total size of tables: 55KB (56160 bytes) + // Total size of tables: 57KB (58086 bytes) diff --git a/vendor/golang.org/x/text/unicode/norm/tables9.0.0.go b/vendor/golang.org/x/text/unicode/norm/tables9.0.0.go deleted file mode 100644 index bf65457d9b..0000000000 --- a/vendor/golang.org/x/text/unicode/norm/tables9.0.0.go +++ /dev/null @@ -1,7637 +0,0 @@ -// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. - -//go:build !go1.10 - -package norm - -import "sync" - -const ( - // Version is the Unicode edition from which the tables are derived. - Version = "9.0.0" - - // MaxTransformChunkSize indicates the maximum number of bytes that Transform - // may need to write atomically for any Form. Making a destination buffer at - // least this size ensures that Transform can always make progress and that - // the user does not need to grow the buffer on an ErrShortDst. - MaxTransformChunkSize = 35 + maxNonStarters*4 -) - -var ccc = [55]uint8{ - 0, 1, 7, 8, 9, 10, 11, 12, - 13, 14, 15, 16, 17, 18, 19, 20, - 21, 22, 23, 24, 25, 26, 27, 28, - 29, 30, 31, 32, 33, 34, 35, 36, - 84, 91, 103, 107, 118, 122, 129, 130, - 132, 202, 214, 216, 218, 220, 222, 224, - 226, 228, 230, 232, 233, 234, 240, -} - -const ( - firstMulti = 0x186D - firstCCC = 0x2C9E - endMulti = 0x2F60 - firstLeadingCCC = 0x49AE - firstCCCZeroExcept = 0x4A78 - firstStarterWithNLead = 0x4A9F - lastDecomp = 0x4AA1 - maxDecomp = 0x8000 -) - -// decomps: 19105 bytes -var decomps = [...]byte{ - // Bytes 0 - 3f - 0x00, 0x41, 0x20, 0x41, 0x21, 0x41, 0x22, 0x41, - 0x23, 0x41, 0x24, 0x41, 0x25, 0x41, 0x26, 0x41, - 0x27, 0x41, 0x28, 0x41, 0x29, 0x41, 0x2A, 0x41, - 0x2B, 0x41, 0x2C, 0x41, 0x2D, 0x41, 0x2E, 0x41, - 0x2F, 0x41, 0x30, 0x41, 0x31, 0x41, 0x32, 0x41, - 0x33, 0x41, 0x34, 0x41, 0x35, 0x41, 0x36, 0x41, - 0x37, 0x41, 0x38, 0x41, 0x39, 0x41, 0x3A, 0x41, - 0x3B, 0x41, 0x3C, 0x41, 0x3D, 0x41, 0x3E, 0x41, - // Bytes 40 - 7f - 0x3F, 0x41, 0x40, 0x41, 0x41, 0x41, 0x42, 0x41, - 0x43, 0x41, 0x44, 0x41, 0x45, 0x41, 0x46, 0x41, - 0x47, 0x41, 0x48, 0x41, 0x49, 0x41, 0x4A, 0x41, - 0x4B, 0x41, 0x4C, 0x41, 0x4D, 0x41, 0x4E, 0x41, - 0x4F, 0x41, 0x50, 0x41, 0x51, 0x41, 0x52, 0x41, - 0x53, 0x41, 0x54, 0x41, 0x55, 0x41, 0x56, 0x41, - 0x57, 0x41, 0x58, 0x41, 0x59, 0x41, 0x5A, 0x41, - 0x5B, 0x41, 0x5C, 0x41, 0x5D, 0x41, 0x5E, 0x41, - // Bytes 80 - bf - 0x5F, 0x41, 0x60, 0x41, 0x61, 0x41, 0x62, 0x41, - 0x63, 0x41, 0x64, 0x41, 0x65, 0x41, 0x66, 0x41, - 0x67, 0x41, 0x68, 0x41, 0x69, 0x41, 0x6A, 0x41, - 0x6B, 0x41, 0x6C, 0x41, 0x6D, 0x41, 0x6E, 0x41, - 0x6F, 0x41, 0x70, 0x41, 0x71, 0x41, 0x72, 0x41, - 0x73, 0x41, 0x74, 0x41, 0x75, 0x41, 0x76, 0x41, - 0x77, 0x41, 0x78, 0x41, 0x79, 0x41, 0x7A, 0x41, - 0x7B, 0x41, 0x7C, 0x41, 0x7D, 0x41, 0x7E, 0x42, - // Bytes c0 - ff - 0xC2, 0xA2, 0x42, 0xC2, 0xA3, 0x42, 0xC2, 0xA5, - 0x42, 0xC2, 0xA6, 0x42, 0xC2, 0xAC, 0x42, 0xC2, - 0xB7, 0x42, 0xC3, 0x86, 0x42, 0xC3, 0xB0, 0x42, - 0xC4, 0xA6, 0x42, 0xC4, 0xA7, 0x42, 0xC4, 0xB1, - 0x42, 0xC5, 0x8B, 0x42, 0xC5, 0x93, 0x42, 0xC6, - 0x8E, 0x42, 0xC6, 0x90, 0x42, 0xC6, 0xAB, 0x42, - 0xC8, 0xA2, 0x42, 0xC8, 0xB7, 0x42, 0xC9, 0x90, - 0x42, 0xC9, 0x91, 0x42, 0xC9, 0x92, 0x42, 0xC9, - // Bytes 100 - 13f - 0x94, 0x42, 0xC9, 0x95, 0x42, 0xC9, 0x99, 0x42, - 0xC9, 0x9B, 0x42, 0xC9, 0x9C, 0x42, 0xC9, 0x9F, - 0x42, 0xC9, 0xA1, 0x42, 0xC9, 0xA3, 0x42, 0xC9, - 0xA5, 0x42, 0xC9, 0xA6, 0x42, 0xC9, 0xA8, 0x42, - 0xC9, 0xA9, 0x42, 0xC9, 0xAA, 0x42, 0xC9, 0xAB, - 0x42, 0xC9, 0xAD, 0x42, 0xC9, 0xAF, 0x42, 0xC9, - 0xB0, 0x42, 0xC9, 0xB1, 0x42, 0xC9, 0xB2, 0x42, - 0xC9, 0xB3, 0x42, 0xC9, 0xB4, 0x42, 0xC9, 0xB5, - // Bytes 140 - 17f - 0x42, 0xC9, 0xB8, 0x42, 0xC9, 0xB9, 0x42, 0xC9, - 0xBB, 0x42, 0xCA, 0x81, 0x42, 0xCA, 0x82, 0x42, - 0xCA, 0x83, 0x42, 0xCA, 0x89, 0x42, 0xCA, 0x8A, - 0x42, 0xCA, 0x8B, 0x42, 0xCA, 0x8C, 0x42, 0xCA, - 0x90, 0x42, 0xCA, 0x91, 0x42, 0xCA, 0x92, 0x42, - 0xCA, 0x95, 0x42, 0xCA, 0x9D, 0x42, 0xCA, 0x9F, - 0x42, 0xCA, 0xB9, 0x42, 0xCE, 0x91, 0x42, 0xCE, - 0x92, 0x42, 0xCE, 0x93, 0x42, 0xCE, 0x94, 0x42, - // Bytes 180 - 1bf - 0xCE, 0x95, 0x42, 0xCE, 0x96, 0x42, 0xCE, 0x97, - 0x42, 0xCE, 0x98, 0x42, 0xCE, 0x99, 0x42, 0xCE, - 0x9A, 0x42, 0xCE, 0x9B, 0x42, 0xCE, 0x9C, 0x42, - 0xCE, 0x9D, 0x42, 0xCE, 0x9E, 0x42, 0xCE, 0x9F, - 0x42, 0xCE, 0xA0, 0x42, 0xCE, 0xA1, 0x42, 0xCE, - 0xA3, 0x42, 0xCE, 0xA4, 0x42, 0xCE, 0xA5, 0x42, - 0xCE, 0xA6, 0x42, 0xCE, 0xA7, 0x42, 0xCE, 0xA8, - 0x42, 0xCE, 0xA9, 0x42, 0xCE, 0xB1, 0x42, 0xCE, - // Bytes 1c0 - 1ff - 0xB2, 0x42, 0xCE, 0xB3, 0x42, 0xCE, 0xB4, 0x42, - 0xCE, 0xB5, 0x42, 0xCE, 0xB6, 0x42, 0xCE, 0xB7, - 0x42, 0xCE, 0xB8, 0x42, 0xCE, 0xB9, 0x42, 0xCE, - 0xBA, 0x42, 0xCE, 0xBB, 0x42, 0xCE, 0xBC, 0x42, - 0xCE, 0xBD, 0x42, 0xCE, 0xBE, 0x42, 0xCE, 0xBF, - 0x42, 0xCF, 0x80, 0x42, 0xCF, 0x81, 0x42, 0xCF, - 0x82, 0x42, 0xCF, 0x83, 0x42, 0xCF, 0x84, 0x42, - 0xCF, 0x85, 0x42, 0xCF, 0x86, 0x42, 0xCF, 0x87, - // Bytes 200 - 23f - 0x42, 0xCF, 0x88, 0x42, 0xCF, 0x89, 0x42, 0xCF, - 0x9C, 0x42, 0xCF, 0x9D, 0x42, 0xD0, 0xBD, 0x42, - 0xD1, 0x8A, 0x42, 0xD1, 0x8C, 0x42, 0xD7, 0x90, - 0x42, 0xD7, 0x91, 0x42, 0xD7, 0x92, 0x42, 0xD7, - 0x93, 0x42, 0xD7, 0x94, 0x42, 0xD7, 0x9B, 0x42, - 0xD7, 0x9C, 0x42, 0xD7, 0x9D, 0x42, 0xD7, 0xA2, - 0x42, 0xD7, 0xA8, 0x42, 0xD7, 0xAA, 0x42, 0xD8, - 0xA1, 0x42, 0xD8, 0xA7, 0x42, 0xD8, 0xA8, 0x42, - // Bytes 240 - 27f - 0xD8, 0xA9, 0x42, 0xD8, 0xAA, 0x42, 0xD8, 0xAB, - 0x42, 0xD8, 0xAC, 0x42, 0xD8, 0xAD, 0x42, 0xD8, - 0xAE, 0x42, 0xD8, 0xAF, 0x42, 0xD8, 0xB0, 0x42, - 0xD8, 0xB1, 0x42, 0xD8, 0xB2, 0x42, 0xD8, 0xB3, - 0x42, 0xD8, 0xB4, 0x42, 0xD8, 0xB5, 0x42, 0xD8, - 0xB6, 0x42, 0xD8, 0xB7, 0x42, 0xD8, 0xB8, 0x42, - 0xD8, 0xB9, 0x42, 0xD8, 0xBA, 0x42, 0xD9, 0x81, - 0x42, 0xD9, 0x82, 0x42, 0xD9, 0x83, 0x42, 0xD9, - // Bytes 280 - 2bf - 0x84, 0x42, 0xD9, 0x85, 0x42, 0xD9, 0x86, 0x42, - 0xD9, 0x87, 0x42, 0xD9, 0x88, 0x42, 0xD9, 0x89, - 0x42, 0xD9, 0x8A, 0x42, 0xD9, 0xAE, 0x42, 0xD9, - 0xAF, 0x42, 0xD9, 0xB1, 0x42, 0xD9, 0xB9, 0x42, - 0xD9, 0xBA, 0x42, 0xD9, 0xBB, 0x42, 0xD9, 0xBE, - 0x42, 0xD9, 0xBF, 0x42, 0xDA, 0x80, 0x42, 0xDA, - 0x83, 0x42, 0xDA, 0x84, 0x42, 0xDA, 0x86, 0x42, - 0xDA, 0x87, 0x42, 0xDA, 0x88, 0x42, 0xDA, 0x8C, - // Bytes 2c0 - 2ff - 0x42, 0xDA, 0x8D, 0x42, 0xDA, 0x8E, 0x42, 0xDA, - 0x91, 0x42, 0xDA, 0x98, 0x42, 0xDA, 0xA1, 0x42, - 0xDA, 0xA4, 0x42, 0xDA, 0xA6, 0x42, 0xDA, 0xA9, - 0x42, 0xDA, 0xAD, 0x42, 0xDA, 0xAF, 0x42, 0xDA, - 0xB1, 0x42, 0xDA, 0xB3, 0x42, 0xDA, 0xBA, 0x42, - 0xDA, 0xBB, 0x42, 0xDA, 0xBE, 0x42, 0xDB, 0x81, - 0x42, 0xDB, 0x85, 0x42, 0xDB, 0x86, 0x42, 0xDB, - 0x87, 0x42, 0xDB, 0x88, 0x42, 0xDB, 0x89, 0x42, - // Bytes 300 - 33f - 0xDB, 0x8B, 0x42, 0xDB, 0x8C, 0x42, 0xDB, 0x90, - 0x42, 0xDB, 0x92, 0x43, 0xE0, 0xBC, 0x8B, 0x43, - 0xE1, 0x83, 0x9C, 0x43, 0xE1, 0x84, 0x80, 0x43, - 0xE1, 0x84, 0x81, 0x43, 0xE1, 0x84, 0x82, 0x43, - 0xE1, 0x84, 0x83, 0x43, 0xE1, 0x84, 0x84, 0x43, - 0xE1, 0x84, 0x85, 0x43, 0xE1, 0x84, 0x86, 0x43, - 0xE1, 0x84, 0x87, 0x43, 0xE1, 0x84, 0x88, 0x43, - 0xE1, 0x84, 0x89, 0x43, 0xE1, 0x84, 0x8A, 0x43, - // Bytes 340 - 37f - 0xE1, 0x84, 0x8B, 0x43, 0xE1, 0x84, 0x8C, 0x43, - 0xE1, 0x84, 0x8D, 0x43, 0xE1, 0x84, 0x8E, 0x43, - 0xE1, 0x84, 0x8F, 0x43, 0xE1, 0x84, 0x90, 0x43, - 0xE1, 0x84, 0x91, 0x43, 0xE1, 0x84, 0x92, 0x43, - 0xE1, 0x84, 0x94, 0x43, 0xE1, 0x84, 0x95, 0x43, - 0xE1, 0x84, 0x9A, 0x43, 0xE1, 0x84, 0x9C, 0x43, - 0xE1, 0x84, 0x9D, 0x43, 0xE1, 0x84, 0x9E, 0x43, - 0xE1, 0x84, 0xA0, 0x43, 0xE1, 0x84, 0xA1, 0x43, - // Bytes 380 - 3bf - 0xE1, 0x84, 0xA2, 0x43, 0xE1, 0x84, 0xA3, 0x43, - 0xE1, 0x84, 0xA7, 0x43, 0xE1, 0x84, 0xA9, 0x43, - 0xE1, 0x84, 0xAB, 0x43, 0xE1, 0x84, 0xAC, 0x43, - 0xE1, 0x84, 0xAD, 0x43, 0xE1, 0x84, 0xAE, 0x43, - 0xE1, 0x84, 0xAF, 0x43, 0xE1, 0x84, 0xB2, 0x43, - 0xE1, 0x84, 0xB6, 0x43, 0xE1, 0x85, 0x80, 0x43, - 0xE1, 0x85, 0x87, 0x43, 0xE1, 0x85, 0x8C, 0x43, - 0xE1, 0x85, 0x97, 0x43, 0xE1, 0x85, 0x98, 0x43, - // Bytes 3c0 - 3ff - 0xE1, 0x85, 0x99, 0x43, 0xE1, 0x85, 0xA0, 0x43, - 0xE1, 0x86, 0x84, 0x43, 0xE1, 0x86, 0x85, 0x43, - 0xE1, 0x86, 0x88, 0x43, 0xE1, 0x86, 0x91, 0x43, - 0xE1, 0x86, 0x92, 0x43, 0xE1, 0x86, 0x94, 0x43, - 0xE1, 0x86, 0x9E, 0x43, 0xE1, 0x86, 0xA1, 0x43, - 0xE1, 0x87, 0x87, 0x43, 0xE1, 0x87, 0x88, 0x43, - 0xE1, 0x87, 0x8C, 0x43, 0xE1, 0x87, 0x8E, 0x43, - 0xE1, 0x87, 0x93, 0x43, 0xE1, 0x87, 0x97, 0x43, - // Bytes 400 - 43f - 0xE1, 0x87, 0x99, 0x43, 0xE1, 0x87, 0x9D, 0x43, - 0xE1, 0x87, 0x9F, 0x43, 0xE1, 0x87, 0xB1, 0x43, - 0xE1, 0x87, 0xB2, 0x43, 0xE1, 0xB4, 0x82, 0x43, - 0xE1, 0xB4, 0x96, 0x43, 0xE1, 0xB4, 0x97, 0x43, - 0xE1, 0xB4, 0x9C, 0x43, 0xE1, 0xB4, 0x9D, 0x43, - 0xE1, 0xB4, 0xA5, 0x43, 0xE1, 0xB5, 0xBB, 0x43, - 0xE1, 0xB6, 0x85, 0x43, 0xE2, 0x80, 0x82, 0x43, - 0xE2, 0x80, 0x83, 0x43, 0xE2, 0x80, 0x90, 0x43, - // Bytes 440 - 47f - 0xE2, 0x80, 0x93, 0x43, 0xE2, 0x80, 0x94, 0x43, - 0xE2, 0x82, 0xA9, 0x43, 0xE2, 0x86, 0x90, 0x43, - 0xE2, 0x86, 0x91, 0x43, 0xE2, 0x86, 0x92, 0x43, - 0xE2, 0x86, 0x93, 0x43, 0xE2, 0x88, 0x82, 0x43, - 0xE2, 0x88, 0x87, 0x43, 0xE2, 0x88, 0x91, 0x43, - 0xE2, 0x88, 0x92, 0x43, 0xE2, 0x94, 0x82, 0x43, - 0xE2, 0x96, 0xA0, 0x43, 0xE2, 0x97, 0x8B, 0x43, - 0xE2, 0xA6, 0x85, 0x43, 0xE2, 0xA6, 0x86, 0x43, - // Bytes 480 - 4bf - 0xE2, 0xB5, 0xA1, 0x43, 0xE3, 0x80, 0x81, 0x43, - 0xE3, 0x80, 0x82, 0x43, 0xE3, 0x80, 0x88, 0x43, - 0xE3, 0x80, 0x89, 0x43, 0xE3, 0x80, 0x8A, 0x43, - 0xE3, 0x80, 0x8B, 0x43, 0xE3, 0x80, 0x8C, 0x43, - 0xE3, 0x80, 0x8D, 0x43, 0xE3, 0x80, 0x8E, 0x43, - 0xE3, 0x80, 0x8F, 0x43, 0xE3, 0x80, 0x90, 0x43, - 0xE3, 0x80, 0x91, 0x43, 0xE3, 0x80, 0x92, 0x43, - 0xE3, 0x80, 0x94, 0x43, 0xE3, 0x80, 0x95, 0x43, - // Bytes 4c0 - 4ff - 0xE3, 0x80, 0x96, 0x43, 0xE3, 0x80, 0x97, 0x43, - 0xE3, 0x82, 0xA1, 0x43, 0xE3, 0x82, 0xA2, 0x43, - 0xE3, 0x82, 0xA3, 0x43, 0xE3, 0x82, 0xA4, 0x43, - 0xE3, 0x82, 0xA5, 0x43, 0xE3, 0x82, 0xA6, 0x43, - 0xE3, 0x82, 0xA7, 0x43, 0xE3, 0x82, 0xA8, 0x43, - 0xE3, 0x82, 0xA9, 0x43, 0xE3, 0x82, 0xAA, 0x43, - 0xE3, 0x82, 0xAB, 0x43, 0xE3, 0x82, 0xAD, 0x43, - 0xE3, 0x82, 0xAF, 0x43, 0xE3, 0x82, 0xB1, 0x43, - // Bytes 500 - 53f - 0xE3, 0x82, 0xB3, 0x43, 0xE3, 0x82, 0xB5, 0x43, - 0xE3, 0x82, 0xB7, 0x43, 0xE3, 0x82, 0xB9, 0x43, - 0xE3, 0x82, 0xBB, 0x43, 0xE3, 0x82, 0xBD, 0x43, - 0xE3, 0x82, 0xBF, 0x43, 0xE3, 0x83, 0x81, 0x43, - 0xE3, 0x83, 0x83, 0x43, 0xE3, 0x83, 0x84, 0x43, - 0xE3, 0x83, 0x86, 0x43, 0xE3, 0x83, 0x88, 0x43, - 0xE3, 0x83, 0x8A, 0x43, 0xE3, 0x83, 0x8B, 0x43, - 0xE3, 0x83, 0x8C, 0x43, 0xE3, 0x83, 0x8D, 0x43, - // Bytes 540 - 57f - 0xE3, 0x83, 0x8E, 0x43, 0xE3, 0x83, 0x8F, 0x43, - 0xE3, 0x83, 0x92, 0x43, 0xE3, 0x83, 0x95, 0x43, - 0xE3, 0x83, 0x98, 0x43, 0xE3, 0x83, 0x9B, 0x43, - 0xE3, 0x83, 0x9E, 0x43, 0xE3, 0x83, 0x9F, 0x43, - 0xE3, 0x83, 0xA0, 0x43, 0xE3, 0x83, 0xA1, 0x43, - 0xE3, 0x83, 0xA2, 0x43, 0xE3, 0x83, 0xA3, 0x43, - 0xE3, 0x83, 0xA4, 0x43, 0xE3, 0x83, 0xA5, 0x43, - 0xE3, 0x83, 0xA6, 0x43, 0xE3, 0x83, 0xA7, 0x43, - // Bytes 580 - 5bf - 0xE3, 0x83, 0xA8, 0x43, 0xE3, 0x83, 0xA9, 0x43, - 0xE3, 0x83, 0xAA, 0x43, 0xE3, 0x83, 0xAB, 0x43, - 0xE3, 0x83, 0xAC, 0x43, 0xE3, 0x83, 0xAD, 0x43, - 0xE3, 0x83, 0xAF, 0x43, 0xE3, 0x83, 0xB0, 0x43, - 0xE3, 0x83, 0xB1, 0x43, 0xE3, 0x83, 0xB2, 0x43, - 0xE3, 0x83, 0xB3, 0x43, 0xE3, 0x83, 0xBB, 0x43, - 0xE3, 0x83, 0xBC, 0x43, 0xE3, 0x92, 0x9E, 0x43, - 0xE3, 0x92, 0xB9, 0x43, 0xE3, 0x92, 0xBB, 0x43, - // Bytes 5c0 - 5ff - 0xE3, 0x93, 0x9F, 0x43, 0xE3, 0x94, 0x95, 0x43, - 0xE3, 0x9B, 0xAE, 0x43, 0xE3, 0x9B, 0xBC, 0x43, - 0xE3, 0x9E, 0x81, 0x43, 0xE3, 0xA0, 0xAF, 0x43, - 0xE3, 0xA1, 0xA2, 0x43, 0xE3, 0xA1, 0xBC, 0x43, - 0xE3, 0xA3, 0x87, 0x43, 0xE3, 0xA3, 0xA3, 0x43, - 0xE3, 0xA4, 0x9C, 0x43, 0xE3, 0xA4, 0xBA, 0x43, - 0xE3, 0xA8, 0xAE, 0x43, 0xE3, 0xA9, 0xAC, 0x43, - 0xE3, 0xAB, 0xA4, 0x43, 0xE3, 0xAC, 0x88, 0x43, - // Bytes 600 - 63f - 0xE3, 0xAC, 0x99, 0x43, 0xE3, 0xAD, 0x89, 0x43, - 0xE3, 0xAE, 0x9D, 0x43, 0xE3, 0xB0, 0x98, 0x43, - 0xE3, 0xB1, 0x8E, 0x43, 0xE3, 0xB4, 0xB3, 0x43, - 0xE3, 0xB6, 0x96, 0x43, 0xE3, 0xBA, 0xAC, 0x43, - 0xE3, 0xBA, 0xB8, 0x43, 0xE3, 0xBC, 0x9B, 0x43, - 0xE3, 0xBF, 0xBC, 0x43, 0xE4, 0x80, 0x88, 0x43, - 0xE4, 0x80, 0x98, 0x43, 0xE4, 0x80, 0xB9, 0x43, - 0xE4, 0x81, 0x86, 0x43, 0xE4, 0x82, 0x96, 0x43, - // Bytes 640 - 67f - 0xE4, 0x83, 0xA3, 0x43, 0xE4, 0x84, 0xAF, 0x43, - 0xE4, 0x88, 0x82, 0x43, 0xE4, 0x88, 0xA7, 0x43, - 0xE4, 0x8A, 0xA0, 0x43, 0xE4, 0x8C, 0x81, 0x43, - 0xE4, 0x8C, 0xB4, 0x43, 0xE4, 0x8D, 0x99, 0x43, - 0xE4, 0x8F, 0x95, 0x43, 0xE4, 0x8F, 0x99, 0x43, - 0xE4, 0x90, 0x8B, 0x43, 0xE4, 0x91, 0xAB, 0x43, - 0xE4, 0x94, 0xAB, 0x43, 0xE4, 0x95, 0x9D, 0x43, - 0xE4, 0x95, 0xA1, 0x43, 0xE4, 0x95, 0xAB, 0x43, - // Bytes 680 - 6bf - 0xE4, 0x97, 0x97, 0x43, 0xE4, 0x97, 0xB9, 0x43, - 0xE4, 0x98, 0xB5, 0x43, 0xE4, 0x9A, 0xBE, 0x43, - 0xE4, 0x9B, 0x87, 0x43, 0xE4, 0xA6, 0x95, 0x43, - 0xE4, 0xA7, 0xA6, 0x43, 0xE4, 0xA9, 0xAE, 0x43, - 0xE4, 0xA9, 0xB6, 0x43, 0xE4, 0xAA, 0xB2, 0x43, - 0xE4, 0xAC, 0xB3, 0x43, 0xE4, 0xAF, 0x8E, 0x43, - 0xE4, 0xB3, 0x8E, 0x43, 0xE4, 0xB3, 0xAD, 0x43, - 0xE4, 0xB3, 0xB8, 0x43, 0xE4, 0xB5, 0x96, 0x43, - // Bytes 6c0 - 6ff - 0xE4, 0xB8, 0x80, 0x43, 0xE4, 0xB8, 0x81, 0x43, - 0xE4, 0xB8, 0x83, 0x43, 0xE4, 0xB8, 0x89, 0x43, - 0xE4, 0xB8, 0x8A, 0x43, 0xE4, 0xB8, 0x8B, 0x43, - 0xE4, 0xB8, 0x8D, 0x43, 0xE4, 0xB8, 0x99, 0x43, - 0xE4, 0xB8, 0xA6, 0x43, 0xE4, 0xB8, 0xA8, 0x43, - 0xE4, 0xB8, 0xAD, 0x43, 0xE4, 0xB8, 0xB2, 0x43, - 0xE4, 0xB8, 0xB6, 0x43, 0xE4, 0xB8, 0xB8, 0x43, - 0xE4, 0xB8, 0xB9, 0x43, 0xE4, 0xB8, 0xBD, 0x43, - // Bytes 700 - 73f - 0xE4, 0xB8, 0xBF, 0x43, 0xE4, 0xB9, 0x81, 0x43, - 0xE4, 0xB9, 0x99, 0x43, 0xE4, 0xB9, 0x9D, 0x43, - 0xE4, 0xBA, 0x82, 0x43, 0xE4, 0xBA, 0x85, 0x43, - 0xE4, 0xBA, 0x86, 0x43, 0xE4, 0xBA, 0x8C, 0x43, - 0xE4, 0xBA, 0x94, 0x43, 0xE4, 0xBA, 0xA0, 0x43, - 0xE4, 0xBA, 0xA4, 0x43, 0xE4, 0xBA, 0xAE, 0x43, - 0xE4, 0xBA, 0xBA, 0x43, 0xE4, 0xBB, 0x80, 0x43, - 0xE4, 0xBB, 0x8C, 0x43, 0xE4, 0xBB, 0xA4, 0x43, - // Bytes 740 - 77f - 0xE4, 0xBC, 0x81, 0x43, 0xE4, 0xBC, 0x91, 0x43, - 0xE4, 0xBD, 0xA0, 0x43, 0xE4, 0xBE, 0x80, 0x43, - 0xE4, 0xBE, 0x86, 0x43, 0xE4, 0xBE, 0x8B, 0x43, - 0xE4, 0xBE, 0xAE, 0x43, 0xE4, 0xBE, 0xBB, 0x43, - 0xE4, 0xBE, 0xBF, 0x43, 0xE5, 0x80, 0x82, 0x43, - 0xE5, 0x80, 0xAB, 0x43, 0xE5, 0x81, 0xBA, 0x43, - 0xE5, 0x82, 0x99, 0x43, 0xE5, 0x83, 0x8F, 0x43, - 0xE5, 0x83, 0x9A, 0x43, 0xE5, 0x83, 0xA7, 0x43, - // Bytes 780 - 7bf - 0xE5, 0x84, 0xAA, 0x43, 0xE5, 0x84, 0xBF, 0x43, - 0xE5, 0x85, 0x80, 0x43, 0xE5, 0x85, 0x85, 0x43, - 0xE5, 0x85, 0x8D, 0x43, 0xE5, 0x85, 0x94, 0x43, - 0xE5, 0x85, 0xA4, 0x43, 0xE5, 0x85, 0xA5, 0x43, - 0xE5, 0x85, 0xA7, 0x43, 0xE5, 0x85, 0xA8, 0x43, - 0xE5, 0x85, 0xA9, 0x43, 0xE5, 0x85, 0xAB, 0x43, - 0xE5, 0x85, 0xAD, 0x43, 0xE5, 0x85, 0xB7, 0x43, - 0xE5, 0x86, 0x80, 0x43, 0xE5, 0x86, 0x82, 0x43, - // Bytes 7c0 - 7ff - 0xE5, 0x86, 0x8D, 0x43, 0xE5, 0x86, 0x92, 0x43, - 0xE5, 0x86, 0x95, 0x43, 0xE5, 0x86, 0x96, 0x43, - 0xE5, 0x86, 0x97, 0x43, 0xE5, 0x86, 0x99, 0x43, - 0xE5, 0x86, 0xA4, 0x43, 0xE5, 0x86, 0xAB, 0x43, - 0xE5, 0x86, 0xAC, 0x43, 0xE5, 0x86, 0xB5, 0x43, - 0xE5, 0x86, 0xB7, 0x43, 0xE5, 0x87, 0x89, 0x43, - 0xE5, 0x87, 0x8C, 0x43, 0xE5, 0x87, 0x9C, 0x43, - 0xE5, 0x87, 0x9E, 0x43, 0xE5, 0x87, 0xA0, 0x43, - // Bytes 800 - 83f - 0xE5, 0x87, 0xB5, 0x43, 0xE5, 0x88, 0x80, 0x43, - 0xE5, 0x88, 0x83, 0x43, 0xE5, 0x88, 0x87, 0x43, - 0xE5, 0x88, 0x97, 0x43, 0xE5, 0x88, 0x9D, 0x43, - 0xE5, 0x88, 0xA9, 0x43, 0xE5, 0x88, 0xBA, 0x43, - 0xE5, 0x88, 0xBB, 0x43, 0xE5, 0x89, 0x86, 0x43, - 0xE5, 0x89, 0x8D, 0x43, 0xE5, 0x89, 0xB2, 0x43, - 0xE5, 0x89, 0xB7, 0x43, 0xE5, 0x8A, 0x89, 0x43, - 0xE5, 0x8A, 0x9B, 0x43, 0xE5, 0x8A, 0xA3, 0x43, - // Bytes 840 - 87f - 0xE5, 0x8A, 0xB3, 0x43, 0xE5, 0x8A, 0xB4, 0x43, - 0xE5, 0x8B, 0x87, 0x43, 0xE5, 0x8B, 0x89, 0x43, - 0xE5, 0x8B, 0x92, 0x43, 0xE5, 0x8B, 0x9E, 0x43, - 0xE5, 0x8B, 0xA4, 0x43, 0xE5, 0x8B, 0xB5, 0x43, - 0xE5, 0x8B, 0xB9, 0x43, 0xE5, 0x8B, 0xBA, 0x43, - 0xE5, 0x8C, 0x85, 0x43, 0xE5, 0x8C, 0x86, 0x43, - 0xE5, 0x8C, 0x95, 0x43, 0xE5, 0x8C, 0x97, 0x43, - 0xE5, 0x8C, 0x9A, 0x43, 0xE5, 0x8C, 0xB8, 0x43, - // Bytes 880 - 8bf - 0xE5, 0x8C, 0xBB, 0x43, 0xE5, 0x8C, 0xBF, 0x43, - 0xE5, 0x8D, 0x81, 0x43, 0xE5, 0x8D, 0x84, 0x43, - 0xE5, 0x8D, 0x85, 0x43, 0xE5, 0x8D, 0x89, 0x43, - 0xE5, 0x8D, 0x91, 0x43, 0xE5, 0x8D, 0x94, 0x43, - 0xE5, 0x8D, 0x9A, 0x43, 0xE5, 0x8D, 0x9C, 0x43, - 0xE5, 0x8D, 0xA9, 0x43, 0xE5, 0x8D, 0xB0, 0x43, - 0xE5, 0x8D, 0xB3, 0x43, 0xE5, 0x8D, 0xB5, 0x43, - 0xE5, 0x8D, 0xBD, 0x43, 0xE5, 0x8D, 0xBF, 0x43, - // Bytes 8c0 - 8ff - 0xE5, 0x8E, 0x82, 0x43, 0xE5, 0x8E, 0xB6, 0x43, - 0xE5, 0x8F, 0x83, 0x43, 0xE5, 0x8F, 0x88, 0x43, - 0xE5, 0x8F, 0x8A, 0x43, 0xE5, 0x8F, 0x8C, 0x43, - 0xE5, 0x8F, 0x9F, 0x43, 0xE5, 0x8F, 0xA3, 0x43, - 0xE5, 0x8F, 0xA5, 0x43, 0xE5, 0x8F, 0xAB, 0x43, - 0xE5, 0x8F, 0xAF, 0x43, 0xE5, 0x8F, 0xB1, 0x43, - 0xE5, 0x8F, 0xB3, 0x43, 0xE5, 0x90, 0x86, 0x43, - 0xE5, 0x90, 0x88, 0x43, 0xE5, 0x90, 0x8D, 0x43, - // Bytes 900 - 93f - 0xE5, 0x90, 0x8F, 0x43, 0xE5, 0x90, 0x9D, 0x43, - 0xE5, 0x90, 0xB8, 0x43, 0xE5, 0x90, 0xB9, 0x43, - 0xE5, 0x91, 0x82, 0x43, 0xE5, 0x91, 0x88, 0x43, - 0xE5, 0x91, 0xA8, 0x43, 0xE5, 0x92, 0x9E, 0x43, - 0xE5, 0x92, 0xA2, 0x43, 0xE5, 0x92, 0xBD, 0x43, - 0xE5, 0x93, 0xB6, 0x43, 0xE5, 0x94, 0x90, 0x43, - 0xE5, 0x95, 0x8F, 0x43, 0xE5, 0x95, 0x93, 0x43, - 0xE5, 0x95, 0x95, 0x43, 0xE5, 0x95, 0xA3, 0x43, - // Bytes 940 - 97f - 0xE5, 0x96, 0x84, 0x43, 0xE5, 0x96, 0x87, 0x43, - 0xE5, 0x96, 0x99, 0x43, 0xE5, 0x96, 0x9D, 0x43, - 0xE5, 0x96, 0xAB, 0x43, 0xE5, 0x96, 0xB3, 0x43, - 0xE5, 0x96, 0xB6, 0x43, 0xE5, 0x97, 0x80, 0x43, - 0xE5, 0x97, 0x82, 0x43, 0xE5, 0x97, 0xA2, 0x43, - 0xE5, 0x98, 0x86, 0x43, 0xE5, 0x99, 0x91, 0x43, - 0xE5, 0x99, 0xA8, 0x43, 0xE5, 0x99, 0xB4, 0x43, - 0xE5, 0x9B, 0x97, 0x43, 0xE5, 0x9B, 0x9B, 0x43, - // Bytes 980 - 9bf - 0xE5, 0x9B, 0xB9, 0x43, 0xE5, 0x9C, 0x96, 0x43, - 0xE5, 0x9C, 0x97, 0x43, 0xE5, 0x9C, 0x9F, 0x43, - 0xE5, 0x9C, 0xB0, 0x43, 0xE5, 0x9E, 0x8B, 0x43, - 0xE5, 0x9F, 0x8E, 0x43, 0xE5, 0x9F, 0xB4, 0x43, - 0xE5, 0xA0, 0x8D, 0x43, 0xE5, 0xA0, 0xB1, 0x43, - 0xE5, 0xA0, 0xB2, 0x43, 0xE5, 0xA1, 0x80, 0x43, - 0xE5, 0xA1, 0x9A, 0x43, 0xE5, 0xA1, 0x9E, 0x43, - 0xE5, 0xA2, 0xA8, 0x43, 0xE5, 0xA2, 0xAC, 0x43, - // Bytes 9c0 - 9ff - 0xE5, 0xA2, 0xB3, 0x43, 0xE5, 0xA3, 0x98, 0x43, - 0xE5, 0xA3, 0x9F, 0x43, 0xE5, 0xA3, 0xAB, 0x43, - 0xE5, 0xA3, 0xAE, 0x43, 0xE5, 0xA3, 0xB0, 0x43, - 0xE5, 0xA3, 0xB2, 0x43, 0xE5, 0xA3, 0xB7, 0x43, - 0xE5, 0xA4, 0x82, 0x43, 0xE5, 0xA4, 0x86, 0x43, - 0xE5, 0xA4, 0x8A, 0x43, 0xE5, 0xA4, 0x95, 0x43, - 0xE5, 0xA4, 0x9A, 0x43, 0xE5, 0xA4, 0x9C, 0x43, - 0xE5, 0xA4, 0xA2, 0x43, 0xE5, 0xA4, 0xA7, 0x43, - // Bytes a00 - a3f - 0xE5, 0xA4, 0xA9, 0x43, 0xE5, 0xA5, 0x84, 0x43, - 0xE5, 0xA5, 0x88, 0x43, 0xE5, 0xA5, 0x91, 0x43, - 0xE5, 0xA5, 0x94, 0x43, 0xE5, 0xA5, 0xA2, 0x43, - 0xE5, 0xA5, 0xB3, 0x43, 0xE5, 0xA7, 0x98, 0x43, - 0xE5, 0xA7, 0xAC, 0x43, 0xE5, 0xA8, 0x9B, 0x43, - 0xE5, 0xA8, 0xA7, 0x43, 0xE5, 0xA9, 0xA2, 0x43, - 0xE5, 0xA9, 0xA6, 0x43, 0xE5, 0xAA, 0xB5, 0x43, - 0xE5, 0xAC, 0x88, 0x43, 0xE5, 0xAC, 0xA8, 0x43, - // Bytes a40 - a7f - 0xE5, 0xAC, 0xBE, 0x43, 0xE5, 0xAD, 0x90, 0x43, - 0xE5, 0xAD, 0x97, 0x43, 0xE5, 0xAD, 0xA6, 0x43, - 0xE5, 0xAE, 0x80, 0x43, 0xE5, 0xAE, 0x85, 0x43, - 0xE5, 0xAE, 0x97, 0x43, 0xE5, 0xAF, 0x83, 0x43, - 0xE5, 0xAF, 0x98, 0x43, 0xE5, 0xAF, 0xA7, 0x43, - 0xE5, 0xAF, 0xAE, 0x43, 0xE5, 0xAF, 0xB3, 0x43, - 0xE5, 0xAF, 0xB8, 0x43, 0xE5, 0xAF, 0xBF, 0x43, - 0xE5, 0xB0, 0x86, 0x43, 0xE5, 0xB0, 0x8F, 0x43, - // Bytes a80 - abf - 0xE5, 0xB0, 0xA2, 0x43, 0xE5, 0xB0, 0xB8, 0x43, - 0xE5, 0xB0, 0xBF, 0x43, 0xE5, 0xB1, 0xA0, 0x43, - 0xE5, 0xB1, 0xA2, 0x43, 0xE5, 0xB1, 0xA4, 0x43, - 0xE5, 0xB1, 0xA5, 0x43, 0xE5, 0xB1, 0xAE, 0x43, - 0xE5, 0xB1, 0xB1, 0x43, 0xE5, 0xB2, 0x8D, 0x43, - 0xE5, 0xB3, 0x80, 0x43, 0xE5, 0xB4, 0x99, 0x43, - 0xE5, 0xB5, 0x83, 0x43, 0xE5, 0xB5, 0x90, 0x43, - 0xE5, 0xB5, 0xAB, 0x43, 0xE5, 0xB5, 0xAE, 0x43, - // Bytes ac0 - aff - 0xE5, 0xB5, 0xBC, 0x43, 0xE5, 0xB6, 0xB2, 0x43, - 0xE5, 0xB6, 0xBA, 0x43, 0xE5, 0xB7, 0x9B, 0x43, - 0xE5, 0xB7, 0xA1, 0x43, 0xE5, 0xB7, 0xA2, 0x43, - 0xE5, 0xB7, 0xA5, 0x43, 0xE5, 0xB7, 0xA6, 0x43, - 0xE5, 0xB7, 0xB1, 0x43, 0xE5, 0xB7, 0xBD, 0x43, - 0xE5, 0xB7, 0xBE, 0x43, 0xE5, 0xB8, 0xA8, 0x43, - 0xE5, 0xB8, 0xBD, 0x43, 0xE5, 0xB9, 0xA9, 0x43, - 0xE5, 0xB9, 0xB2, 0x43, 0xE5, 0xB9, 0xB4, 0x43, - // Bytes b00 - b3f - 0xE5, 0xB9, 0xBA, 0x43, 0xE5, 0xB9, 0xBC, 0x43, - 0xE5, 0xB9, 0xBF, 0x43, 0xE5, 0xBA, 0xA6, 0x43, - 0xE5, 0xBA, 0xB0, 0x43, 0xE5, 0xBA, 0xB3, 0x43, - 0xE5, 0xBA, 0xB6, 0x43, 0xE5, 0xBB, 0x89, 0x43, - 0xE5, 0xBB, 0x8A, 0x43, 0xE5, 0xBB, 0x92, 0x43, - 0xE5, 0xBB, 0x93, 0x43, 0xE5, 0xBB, 0x99, 0x43, - 0xE5, 0xBB, 0xAC, 0x43, 0xE5, 0xBB, 0xB4, 0x43, - 0xE5, 0xBB, 0xBE, 0x43, 0xE5, 0xBC, 0x84, 0x43, - // Bytes b40 - b7f - 0xE5, 0xBC, 0x8B, 0x43, 0xE5, 0xBC, 0x93, 0x43, - 0xE5, 0xBC, 0xA2, 0x43, 0xE5, 0xBD, 0x90, 0x43, - 0xE5, 0xBD, 0x93, 0x43, 0xE5, 0xBD, 0xA1, 0x43, - 0xE5, 0xBD, 0xA2, 0x43, 0xE5, 0xBD, 0xA9, 0x43, - 0xE5, 0xBD, 0xAB, 0x43, 0xE5, 0xBD, 0xB3, 0x43, - 0xE5, 0xBE, 0x8B, 0x43, 0xE5, 0xBE, 0x8C, 0x43, - 0xE5, 0xBE, 0x97, 0x43, 0xE5, 0xBE, 0x9A, 0x43, - 0xE5, 0xBE, 0xA9, 0x43, 0xE5, 0xBE, 0xAD, 0x43, - // Bytes b80 - bbf - 0xE5, 0xBF, 0x83, 0x43, 0xE5, 0xBF, 0x8D, 0x43, - 0xE5, 0xBF, 0x97, 0x43, 0xE5, 0xBF, 0xB5, 0x43, - 0xE5, 0xBF, 0xB9, 0x43, 0xE6, 0x80, 0x92, 0x43, - 0xE6, 0x80, 0x9C, 0x43, 0xE6, 0x81, 0xB5, 0x43, - 0xE6, 0x82, 0x81, 0x43, 0xE6, 0x82, 0x94, 0x43, - 0xE6, 0x83, 0x87, 0x43, 0xE6, 0x83, 0x98, 0x43, - 0xE6, 0x83, 0xA1, 0x43, 0xE6, 0x84, 0x88, 0x43, - 0xE6, 0x85, 0x84, 0x43, 0xE6, 0x85, 0x88, 0x43, - // Bytes bc0 - bff - 0xE6, 0x85, 0x8C, 0x43, 0xE6, 0x85, 0x8E, 0x43, - 0xE6, 0x85, 0xA0, 0x43, 0xE6, 0x85, 0xA8, 0x43, - 0xE6, 0x85, 0xBA, 0x43, 0xE6, 0x86, 0x8E, 0x43, - 0xE6, 0x86, 0x90, 0x43, 0xE6, 0x86, 0xA4, 0x43, - 0xE6, 0x86, 0xAF, 0x43, 0xE6, 0x86, 0xB2, 0x43, - 0xE6, 0x87, 0x9E, 0x43, 0xE6, 0x87, 0xB2, 0x43, - 0xE6, 0x87, 0xB6, 0x43, 0xE6, 0x88, 0x80, 0x43, - 0xE6, 0x88, 0x88, 0x43, 0xE6, 0x88, 0x90, 0x43, - // Bytes c00 - c3f - 0xE6, 0x88, 0x9B, 0x43, 0xE6, 0x88, 0xAE, 0x43, - 0xE6, 0x88, 0xB4, 0x43, 0xE6, 0x88, 0xB6, 0x43, - 0xE6, 0x89, 0x8B, 0x43, 0xE6, 0x89, 0x93, 0x43, - 0xE6, 0x89, 0x9D, 0x43, 0xE6, 0x8A, 0x95, 0x43, - 0xE6, 0x8A, 0xB1, 0x43, 0xE6, 0x8B, 0x89, 0x43, - 0xE6, 0x8B, 0x8F, 0x43, 0xE6, 0x8B, 0x93, 0x43, - 0xE6, 0x8B, 0x94, 0x43, 0xE6, 0x8B, 0xBC, 0x43, - 0xE6, 0x8B, 0xBE, 0x43, 0xE6, 0x8C, 0x87, 0x43, - // Bytes c40 - c7f - 0xE6, 0x8C, 0xBD, 0x43, 0xE6, 0x8D, 0x90, 0x43, - 0xE6, 0x8D, 0x95, 0x43, 0xE6, 0x8D, 0xA8, 0x43, - 0xE6, 0x8D, 0xBB, 0x43, 0xE6, 0x8E, 0x83, 0x43, - 0xE6, 0x8E, 0xA0, 0x43, 0xE6, 0x8E, 0xA9, 0x43, - 0xE6, 0x8F, 0x84, 0x43, 0xE6, 0x8F, 0x85, 0x43, - 0xE6, 0x8F, 0xA4, 0x43, 0xE6, 0x90, 0x9C, 0x43, - 0xE6, 0x90, 0xA2, 0x43, 0xE6, 0x91, 0x92, 0x43, - 0xE6, 0x91, 0xA9, 0x43, 0xE6, 0x91, 0xB7, 0x43, - // Bytes c80 - cbf - 0xE6, 0x91, 0xBE, 0x43, 0xE6, 0x92, 0x9A, 0x43, - 0xE6, 0x92, 0x9D, 0x43, 0xE6, 0x93, 0x84, 0x43, - 0xE6, 0x94, 0xAF, 0x43, 0xE6, 0x94, 0xB4, 0x43, - 0xE6, 0x95, 0x8F, 0x43, 0xE6, 0x95, 0x96, 0x43, - 0xE6, 0x95, 0xAC, 0x43, 0xE6, 0x95, 0xB8, 0x43, - 0xE6, 0x96, 0x87, 0x43, 0xE6, 0x96, 0x97, 0x43, - 0xE6, 0x96, 0x99, 0x43, 0xE6, 0x96, 0xA4, 0x43, - 0xE6, 0x96, 0xB0, 0x43, 0xE6, 0x96, 0xB9, 0x43, - // Bytes cc0 - cff - 0xE6, 0x97, 0x85, 0x43, 0xE6, 0x97, 0xA0, 0x43, - 0xE6, 0x97, 0xA2, 0x43, 0xE6, 0x97, 0xA3, 0x43, - 0xE6, 0x97, 0xA5, 0x43, 0xE6, 0x98, 0x93, 0x43, - 0xE6, 0x98, 0xA0, 0x43, 0xE6, 0x99, 0x89, 0x43, - 0xE6, 0x99, 0xB4, 0x43, 0xE6, 0x9A, 0x88, 0x43, - 0xE6, 0x9A, 0x91, 0x43, 0xE6, 0x9A, 0x9C, 0x43, - 0xE6, 0x9A, 0xB4, 0x43, 0xE6, 0x9B, 0x86, 0x43, - 0xE6, 0x9B, 0xB0, 0x43, 0xE6, 0x9B, 0xB4, 0x43, - // Bytes d00 - d3f - 0xE6, 0x9B, 0xB8, 0x43, 0xE6, 0x9C, 0x80, 0x43, - 0xE6, 0x9C, 0x88, 0x43, 0xE6, 0x9C, 0x89, 0x43, - 0xE6, 0x9C, 0x97, 0x43, 0xE6, 0x9C, 0x9B, 0x43, - 0xE6, 0x9C, 0xA1, 0x43, 0xE6, 0x9C, 0xA8, 0x43, - 0xE6, 0x9D, 0x8E, 0x43, 0xE6, 0x9D, 0x93, 0x43, - 0xE6, 0x9D, 0x96, 0x43, 0xE6, 0x9D, 0x9E, 0x43, - 0xE6, 0x9D, 0xBB, 0x43, 0xE6, 0x9E, 0x85, 0x43, - 0xE6, 0x9E, 0x97, 0x43, 0xE6, 0x9F, 0xB3, 0x43, - // Bytes d40 - d7f - 0xE6, 0x9F, 0xBA, 0x43, 0xE6, 0xA0, 0x97, 0x43, - 0xE6, 0xA0, 0x9F, 0x43, 0xE6, 0xA0, 0xAA, 0x43, - 0xE6, 0xA1, 0x92, 0x43, 0xE6, 0xA2, 0x81, 0x43, - 0xE6, 0xA2, 0x85, 0x43, 0xE6, 0xA2, 0x8E, 0x43, - 0xE6, 0xA2, 0xA8, 0x43, 0xE6, 0xA4, 0x94, 0x43, - 0xE6, 0xA5, 0x82, 0x43, 0xE6, 0xA6, 0xA3, 0x43, - 0xE6, 0xA7, 0xAA, 0x43, 0xE6, 0xA8, 0x82, 0x43, - 0xE6, 0xA8, 0x93, 0x43, 0xE6, 0xAA, 0xA8, 0x43, - // Bytes d80 - dbf - 0xE6, 0xAB, 0x93, 0x43, 0xE6, 0xAB, 0x9B, 0x43, - 0xE6, 0xAC, 0x84, 0x43, 0xE6, 0xAC, 0xA0, 0x43, - 0xE6, 0xAC, 0xA1, 0x43, 0xE6, 0xAD, 0x94, 0x43, - 0xE6, 0xAD, 0xA2, 0x43, 0xE6, 0xAD, 0xA3, 0x43, - 0xE6, 0xAD, 0xB2, 0x43, 0xE6, 0xAD, 0xB7, 0x43, - 0xE6, 0xAD, 0xB9, 0x43, 0xE6, 0xAE, 0x9F, 0x43, - 0xE6, 0xAE, 0xAE, 0x43, 0xE6, 0xAE, 0xB3, 0x43, - 0xE6, 0xAE, 0xBA, 0x43, 0xE6, 0xAE, 0xBB, 0x43, - // Bytes dc0 - dff - 0xE6, 0xAF, 0x8B, 0x43, 0xE6, 0xAF, 0x8D, 0x43, - 0xE6, 0xAF, 0x94, 0x43, 0xE6, 0xAF, 0x9B, 0x43, - 0xE6, 0xB0, 0x8F, 0x43, 0xE6, 0xB0, 0x94, 0x43, - 0xE6, 0xB0, 0xB4, 0x43, 0xE6, 0xB1, 0x8E, 0x43, - 0xE6, 0xB1, 0xA7, 0x43, 0xE6, 0xB2, 0x88, 0x43, - 0xE6, 0xB2, 0xBF, 0x43, 0xE6, 0xB3, 0x8C, 0x43, - 0xE6, 0xB3, 0x8D, 0x43, 0xE6, 0xB3, 0xA5, 0x43, - 0xE6, 0xB3, 0xA8, 0x43, 0xE6, 0xB4, 0x96, 0x43, - // Bytes e00 - e3f - 0xE6, 0xB4, 0x9B, 0x43, 0xE6, 0xB4, 0x9E, 0x43, - 0xE6, 0xB4, 0xB4, 0x43, 0xE6, 0xB4, 0xBE, 0x43, - 0xE6, 0xB5, 0x81, 0x43, 0xE6, 0xB5, 0xA9, 0x43, - 0xE6, 0xB5, 0xAA, 0x43, 0xE6, 0xB5, 0xB7, 0x43, - 0xE6, 0xB5, 0xB8, 0x43, 0xE6, 0xB6, 0x85, 0x43, - 0xE6, 0xB7, 0x8B, 0x43, 0xE6, 0xB7, 0x9A, 0x43, - 0xE6, 0xB7, 0xAA, 0x43, 0xE6, 0xB7, 0xB9, 0x43, - 0xE6, 0xB8, 0x9A, 0x43, 0xE6, 0xB8, 0xAF, 0x43, - // Bytes e40 - e7f - 0xE6, 0xB9, 0xAE, 0x43, 0xE6, 0xBA, 0x80, 0x43, - 0xE6, 0xBA, 0x9C, 0x43, 0xE6, 0xBA, 0xBA, 0x43, - 0xE6, 0xBB, 0x87, 0x43, 0xE6, 0xBB, 0x8B, 0x43, - 0xE6, 0xBB, 0x91, 0x43, 0xE6, 0xBB, 0x9B, 0x43, - 0xE6, 0xBC, 0x8F, 0x43, 0xE6, 0xBC, 0x94, 0x43, - 0xE6, 0xBC, 0xA2, 0x43, 0xE6, 0xBC, 0xA3, 0x43, - 0xE6, 0xBD, 0xAE, 0x43, 0xE6, 0xBF, 0x86, 0x43, - 0xE6, 0xBF, 0xAB, 0x43, 0xE6, 0xBF, 0xBE, 0x43, - // Bytes e80 - ebf - 0xE7, 0x80, 0x9B, 0x43, 0xE7, 0x80, 0x9E, 0x43, - 0xE7, 0x80, 0xB9, 0x43, 0xE7, 0x81, 0x8A, 0x43, - 0xE7, 0x81, 0xAB, 0x43, 0xE7, 0x81, 0xB0, 0x43, - 0xE7, 0x81, 0xB7, 0x43, 0xE7, 0x81, 0xBD, 0x43, - 0xE7, 0x82, 0x99, 0x43, 0xE7, 0x82, 0xAD, 0x43, - 0xE7, 0x83, 0x88, 0x43, 0xE7, 0x83, 0x99, 0x43, - 0xE7, 0x84, 0xA1, 0x43, 0xE7, 0x85, 0x85, 0x43, - 0xE7, 0x85, 0x89, 0x43, 0xE7, 0x85, 0xAE, 0x43, - // Bytes ec0 - eff - 0xE7, 0x86, 0x9C, 0x43, 0xE7, 0x87, 0x8E, 0x43, - 0xE7, 0x87, 0x90, 0x43, 0xE7, 0x88, 0x90, 0x43, - 0xE7, 0x88, 0x9B, 0x43, 0xE7, 0x88, 0xA8, 0x43, - 0xE7, 0x88, 0xAA, 0x43, 0xE7, 0x88, 0xAB, 0x43, - 0xE7, 0x88, 0xB5, 0x43, 0xE7, 0x88, 0xB6, 0x43, - 0xE7, 0x88, 0xBB, 0x43, 0xE7, 0x88, 0xBF, 0x43, - 0xE7, 0x89, 0x87, 0x43, 0xE7, 0x89, 0x90, 0x43, - 0xE7, 0x89, 0x99, 0x43, 0xE7, 0x89, 0x9B, 0x43, - // Bytes f00 - f3f - 0xE7, 0x89, 0xA2, 0x43, 0xE7, 0x89, 0xB9, 0x43, - 0xE7, 0x8A, 0x80, 0x43, 0xE7, 0x8A, 0x95, 0x43, - 0xE7, 0x8A, 0xAC, 0x43, 0xE7, 0x8A, 0xAF, 0x43, - 0xE7, 0x8B, 0x80, 0x43, 0xE7, 0x8B, 0xBC, 0x43, - 0xE7, 0x8C, 0xAA, 0x43, 0xE7, 0x8D, 0xB5, 0x43, - 0xE7, 0x8D, 0xBA, 0x43, 0xE7, 0x8E, 0x84, 0x43, - 0xE7, 0x8E, 0x87, 0x43, 0xE7, 0x8E, 0x89, 0x43, - 0xE7, 0x8E, 0x8B, 0x43, 0xE7, 0x8E, 0xA5, 0x43, - // Bytes f40 - f7f - 0xE7, 0x8E, 0xB2, 0x43, 0xE7, 0x8F, 0x9E, 0x43, - 0xE7, 0x90, 0x86, 0x43, 0xE7, 0x90, 0x89, 0x43, - 0xE7, 0x90, 0xA2, 0x43, 0xE7, 0x91, 0x87, 0x43, - 0xE7, 0x91, 0x9C, 0x43, 0xE7, 0x91, 0xA9, 0x43, - 0xE7, 0x91, 0xB1, 0x43, 0xE7, 0x92, 0x85, 0x43, - 0xE7, 0x92, 0x89, 0x43, 0xE7, 0x92, 0x98, 0x43, - 0xE7, 0x93, 0x8A, 0x43, 0xE7, 0x93, 0x9C, 0x43, - 0xE7, 0x93, 0xA6, 0x43, 0xE7, 0x94, 0x86, 0x43, - // Bytes f80 - fbf - 0xE7, 0x94, 0x98, 0x43, 0xE7, 0x94, 0x9F, 0x43, - 0xE7, 0x94, 0xA4, 0x43, 0xE7, 0x94, 0xA8, 0x43, - 0xE7, 0x94, 0xB0, 0x43, 0xE7, 0x94, 0xB2, 0x43, - 0xE7, 0x94, 0xB3, 0x43, 0xE7, 0x94, 0xB7, 0x43, - 0xE7, 0x94, 0xBB, 0x43, 0xE7, 0x94, 0xBE, 0x43, - 0xE7, 0x95, 0x99, 0x43, 0xE7, 0x95, 0xA5, 0x43, - 0xE7, 0x95, 0xB0, 0x43, 0xE7, 0x96, 0x8B, 0x43, - 0xE7, 0x96, 0x92, 0x43, 0xE7, 0x97, 0xA2, 0x43, - // Bytes fc0 - fff - 0xE7, 0x98, 0x90, 0x43, 0xE7, 0x98, 0x9D, 0x43, - 0xE7, 0x98, 0x9F, 0x43, 0xE7, 0x99, 0x82, 0x43, - 0xE7, 0x99, 0xA9, 0x43, 0xE7, 0x99, 0xB6, 0x43, - 0xE7, 0x99, 0xBD, 0x43, 0xE7, 0x9A, 0xAE, 0x43, - 0xE7, 0x9A, 0xBF, 0x43, 0xE7, 0x9B, 0x8A, 0x43, - 0xE7, 0x9B, 0x9B, 0x43, 0xE7, 0x9B, 0xA3, 0x43, - 0xE7, 0x9B, 0xA7, 0x43, 0xE7, 0x9B, 0xAE, 0x43, - 0xE7, 0x9B, 0xB4, 0x43, 0xE7, 0x9C, 0x81, 0x43, - // Bytes 1000 - 103f - 0xE7, 0x9C, 0x9E, 0x43, 0xE7, 0x9C, 0x9F, 0x43, - 0xE7, 0x9D, 0x80, 0x43, 0xE7, 0x9D, 0x8A, 0x43, - 0xE7, 0x9E, 0x8B, 0x43, 0xE7, 0x9E, 0xA7, 0x43, - 0xE7, 0x9F, 0x9B, 0x43, 0xE7, 0x9F, 0xA2, 0x43, - 0xE7, 0x9F, 0xB3, 0x43, 0xE7, 0xA1, 0x8E, 0x43, - 0xE7, 0xA1, 0xAB, 0x43, 0xE7, 0xA2, 0x8C, 0x43, - 0xE7, 0xA2, 0x91, 0x43, 0xE7, 0xA3, 0x8A, 0x43, - 0xE7, 0xA3, 0x8C, 0x43, 0xE7, 0xA3, 0xBB, 0x43, - // Bytes 1040 - 107f - 0xE7, 0xA4, 0xAA, 0x43, 0xE7, 0xA4, 0xBA, 0x43, - 0xE7, 0xA4, 0xBC, 0x43, 0xE7, 0xA4, 0xBE, 0x43, - 0xE7, 0xA5, 0x88, 0x43, 0xE7, 0xA5, 0x89, 0x43, - 0xE7, 0xA5, 0x90, 0x43, 0xE7, 0xA5, 0x96, 0x43, - 0xE7, 0xA5, 0x9D, 0x43, 0xE7, 0xA5, 0x9E, 0x43, - 0xE7, 0xA5, 0xA5, 0x43, 0xE7, 0xA5, 0xBF, 0x43, - 0xE7, 0xA6, 0x81, 0x43, 0xE7, 0xA6, 0x8D, 0x43, - 0xE7, 0xA6, 0x8E, 0x43, 0xE7, 0xA6, 0x8F, 0x43, - // Bytes 1080 - 10bf - 0xE7, 0xA6, 0xAE, 0x43, 0xE7, 0xA6, 0xB8, 0x43, - 0xE7, 0xA6, 0xBE, 0x43, 0xE7, 0xA7, 0x8A, 0x43, - 0xE7, 0xA7, 0x98, 0x43, 0xE7, 0xA7, 0xAB, 0x43, - 0xE7, 0xA8, 0x9C, 0x43, 0xE7, 0xA9, 0x80, 0x43, - 0xE7, 0xA9, 0x8A, 0x43, 0xE7, 0xA9, 0x8F, 0x43, - 0xE7, 0xA9, 0xB4, 0x43, 0xE7, 0xA9, 0xBA, 0x43, - 0xE7, 0xAA, 0x81, 0x43, 0xE7, 0xAA, 0xB1, 0x43, - 0xE7, 0xAB, 0x8B, 0x43, 0xE7, 0xAB, 0xAE, 0x43, - // Bytes 10c0 - 10ff - 0xE7, 0xAB, 0xB9, 0x43, 0xE7, 0xAC, 0xA0, 0x43, - 0xE7, 0xAE, 0x8F, 0x43, 0xE7, 0xAF, 0x80, 0x43, - 0xE7, 0xAF, 0x86, 0x43, 0xE7, 0xAF, 0x89, 0x43, - 0xE7, 0xB0, 0xBE, 0x43, 0xE7, 0xB1, 0xA0, 0x43, - 0xE7, 0xB1, 0xB3, 0x43, 0xE7, 0xB1, 0xBB, 0x43, - 0xE7, 0xB2, 0x92, 0x43, 0xE7, 0xB2, 0xBE, 0x43, - 0xE7, 0xB3, 0x92, 0x43, 0xE7, 0xB3, 0x96, 0x43, - 0xE7, 0xB3, 0xA3, 0x43, 0xE7, 0xB3, 0xA7, 0x43, - // Bytes 1100 - 113f - 0xE7, 0xB3, 0xA8, 0x43, 0xE7, 0xB3, 0xB8, 0x43, - 0xE7, 0xB4, 0x80, 0x43, 0xE7, 0xB4, 0x90, 0x43, - 0xE7, 0xB4, 0xA2, 0x43, 0xE7, 0xB4, 0xAF, 0x43, - 0xE7, 0xB5, 0x82, 0x43, 0xE7, 0xB5, 0x9B, 0x43, - 0xE7, 0xB5, 0xA3, 0x43, 0xE7, 0xB6, 0xA0, 0x43, - 0xE7, 0xB6, 0xBE, 0x43, 0xE7, 0xB7, 0x87, 0x43, - 0xE7, 0xB7, 0xB4, 0x43, 0xE7, 0xB8, 0x82, 0x43, - 0xE7, 0xB8, 0x89, 0x43, 0xE7, 0xB8, 0xB7, 0x43, - // Bytes 1140 - 117f - 0xE7, 0xB9, 0x81, 0x43, 0xE7, 0xB9, 0x85, 0x43, - 0xE7, 0xBC, 0xB6, 0x43, 0xE7, 0xBC, 0xBE, 0x43, - 0xE7, 0xBD, 0x91, 0x43, 0xE7, 0xBD, 0xB2, 0x43, - 0xE7, 0xBD, 0xB9, 0x43, 0xE7, 0xBD, 0xBA, 0x43, - 0xE7, 0xBE, 0x85, 0x43, 0xE7, 0xBE, 0x8A, 0x43, - 0xE7, 0xBE, 0x95, 0x43, 0xE7, 0xBE, 0x9A, 0x43, - 0xE7, 0xBE, 0xBD, 0x43, 0xE7, 0xBF, 0xBA, 0x43, - 0xE8, 0x80, 0x81, 0x43, 0xE8, 0x80, 0x85, 0x43, - // Bytes 1180 - 11bf - 0xE8, 0x80, 0x8C, 0x43, 0xE8, 0x80, 0x92, 0x43, - 0xE8, 0x80, 0xB3, 0x43, 0xE8, 0x81, 0x86, 0x43, - 0xE8, 0x81, 0xA0, 0x43, 0xE8, 0x81, 0xAF, 0x43, - 0xE8, 0x81, 0xB0, 0x43, 0xE8, 0x81, 0xBE, 0x43, - 0xE8, 0x81, 0xBF, 0x43, 0xE8, 0x82, 0x89, 0x43, - 0xE8, 0x82, 0x8B, 0x43, 0xE8, 0x82, 0xAD, 0x43, - 0xE8, 0x82, 0xB2, 0x43, 0xE8, 0x84, 0x83, 0x43, - 0xE8, 0x84, 0xBE, 0x43, 0xE8, 0x87, 0x98, 0x43, - // Bytes 11c0 - 11ff - 0xE8, 0x87, 0xA3, 0x43, 0xE8, 0x87, 0xA8, 0x43, - 0xE8, 0x87, 0xAA, 0x43, 0xE8, 0x87, 0xAD, 0x43, - 0xE8, 0x87, 0xB3, 0x43, 0xE8, 0x87, 0xBC, 0x43, - 0xE8, 0x88, 0x81, 0x43, 0xE8, 0x88, 0x84, 0x43, - 0xE8, 0x88, 0x8C, 0x43, 0xE8, 0x88, 0x98, 0x43, - 0xE8, 0x88, 0x9B, 0x43, 0xE8, 0x88, 0x9F, 0x43, - 0xE8, 0x89, 0xAE, 0x43, 0xE8, 0x89, 0xAF, 0x43, - 0xE8, 0x89, 0xB2, 0x43, 0xE8, 0x89, 0xB8, 0x43, - // Bytes 1200 - 123f - 0xE8, 0x89, 0xB9, 0x43, 0xE8, 0x8A, 0x8B, 0x43, - 0xE8, 0x8A, 0x91, 0x43, 0xE8, 0x8A, 0x9D, 0x43, - 0xE8, 0x8A, 0xB1, 0x43, 0xE8, 0x8A, 0xB3, 0x43, - 0xE8, 0x8A, 0xBD, 0x43, 0xE8, 0x8B, 0xA5, 0x43, - 0xE8, 0x8B, 0xA6, 0x43, 0xE8, 0x8C, 0x9D, 0x43, - 0xE8, 0x8C, 0xA3, 0x43, 0xE8, 0x8C, 0xB6, 0x43, - 0xE8, 0x8D, 0x92, 0x43, 0xE8, 0x8D, 0x93, 0x43, - 0xE8, 0x8D, 0xA3, 0x43, 0xE8, 0x8E, 0xAD, 0x43, - // Bytes 1240 - 127f - 0xE8, 0x8E, 0xBD, 0x43, 0xE8, 0x8F, 0x89, 0x43, - 0xE8, 0x8F, 0x8A, 0x43, 0xE8, 0x8F, 0x8C, 0x43, - 0xE8, 0x8F, 0x9C, 0x43, 0xE8, 0x8F, 0xA7, 0x43, - 0xE8, 0x8F, 0xAF, 0x43, 0xE8, 0x8F, 0xB1, 0x43, - 0xE8, 0x90, 0xBD, 0x43, 0xE8, 0x91, 0x89, 0x43, - 0xE8, 0x91, 0x97, 0x43, 0xE8, 0x93, 0xAE, 0x43, - 0xE8, 0x93, 0xB1, 0x43, 0xE8, 0x93, 0xB3, 0x43, - 0xE8, 0x93, 0xBC, 0x43, 0xE8, 0x94, 0x96, 0x43, - // Bytes 1280 - 12bf - 0xE8, 0x95, 0xA4, 0x43, 0xE8, 0x97, 0x8D, 0x43, - 0xE8, 0x97, 0xBA, 0x43, 0xE8, 0x98, 0x86, 0x43, - 0xE8, 0x98, 0x92, 0x43, 0xE8, 0x98, 0xAD, 0x43, - 0xE8, 0x98, 0xBF, 0x43, 0xE8, 0x99, 0x8D, 0x43, - 0xE8, 0x99, 0x90, 0x43, 0xE8, 0x99, 0x9C, 0x43, - 0xE8, 0x99, 0xA7, 0x43, 0xE8, 0x99, 0xA9, 0x43, - 0xE8, 0x99, 0xAB, 0x43, 0xE8, 0x9A, 0x88, 0x43, - 0xE8, 0x9A, 0xA9, 0x43, 0xE8, 0x9B, 0xA2, 0x43, - // Bytes 12c0 - 12ff - 0xE8, 0x9C, 0x8E, 0x43, 0xE8, 0x9C, 0xA8, 0x43, - 0xE8, 0x9D, 0xAB, 0x43, 0xE8, 0x9D, 0xB9, 0x43, - 0xE8, 0x9E, 0x86, 0x43, 0xE8, 0x9E, 0xBA, 0x43, - 0xE8, 0x9F, 0xA1, 0x43, 0xE8, 0xA0, 0x81, 0x43, - 0xE8, 0xA0, 0x9F, 0x43, 0xE8, 0xA1, 0x80, 0x43, - 0xE8, 0xA1, 0x8C, 0x43, 0xE8, 0xA1, 0xA0, 0x43, - 0xE8, 0xA1, 0xA3, 0x43, 0xE8, 0xA3, 0x82, 0x43, - 0xE8, 0xA3, 0x8F, 0x43, 0xE8, 0xA3, 0x97, 0x43, - // Bytes 1300 - 133f - 0xE8, 0xA3, 0x9E, 0x43, 0xE8, 0xA3, 0xA1, 0x43, - 0xE8, 0xA3, 0xB8, 0x43, 0xE8, 0xA3, 0xBA, 0x43, - 0xE8, 0xA4, 0x90, 0x43, 0xE8, 0xA5, 0x81, 0x43, - 0xE8, 0xA5, 0xA4, 0x43, 0xE8, 0xA5, 0xBE, 0x43, - 0xE8, 0xA6, 0x86, 0x43, 0xE8, 0xA6, 0x8B, 0x43, - 0xE8, 0xA6, 0x96, 0x43, 0xE8, 0xA7, 0x92, 0x43, - 0xE8, 0xA7, 0xA3, 0x43, 0xE8, 0xA8, 0x80, 0x43, - 0xE8, 0xAA, 0xA0, 0x43, 0xE8, 0xAA, 0xAA, 0x43, - // Bytes 1340 - 137f - 0xE8, 0xAA, 0xBF, 0x43, 0xE8, 0xAB, 0x8B, 0x43, - 0xE8, 0xAB, 0x92, 0x43, 0xE8, 0xAB, 0x96, 0x43, - 0xE8, 0xAB, 0xAD, 0x43, 0xE8, 0xAB, 0xB8, 0x43, - 0xE8, 0xAB, 0xBE, 0x43, 0xE8, 0xAC, 0x81, 0x43, - 0xE8, 0xAC, 0xB9, 0x43, 0xE8, 0xAD, 0x98, 0x43, - 0xE8, 0xAE, 0x80, 0x43, 0xE8, 0xAE, 0x8A, 0x43, - 0xE8, 0xB0, 0xB7, 0x43, 0xE8, 0xB1, 0x86, 0x43, - 0xE8, 0xB1, 0x88, 0x43, 0xE8, 0xB1, 0x95, 0x43, - // Bytes 1380 - 13bf - 0xE8, 0xB1, 0xB8, 0x43, 0xE8, 0xB2, 0x9D, 0x43, - 0xE8, 0xB2, 0xA1, 0x43, 0xE8, 0xB2, 0xA9, 0x43, - 0xE8, 0xB2, 0xAB, 0x43, 0xE8, 0xB3, 0x81, 0x43, - 0xE8, 0xB3, 0x82, 0x43, 0xE8, 0xB3, 0x87, 0x43, - 0xE8, 0xB3, 0x88, 0x43, 0xE8, 0xB3, 0x93, 0x43, - 0xE8, 0xB4, 0x88, 0x43, 0xE8, 0xB4, 0x9B, 0x43, - 0xE8, 0xB5, 0xA4, 0x43, 0xE8, 0xB5, 0xB0, 0x43, - 0xE8, 0xB5, 0xB7, 0x43, 0xE8, 0xB6, 0xB3, 0x43, - // Bytes 13c0 - 13ff - 0xE8, 0xB6, 0xBC, 0x43, 0xE8, 0xB7, 0x8B, 0x43, - 0xE8, 0xB7, 0xAF, 0x43, 0xE8, 0xB7, 0xB0, 0x43, - 0xE8, 0xBA, 0xAB, 0x43, 0xE8, 0xBB, 0x8A, 0x43, - 0xE8, 0xBB, 0x94, 0x43, 0xE8, 0xBC, 0xA6, 0x43, - 0xE8, 0xBC, 0xAA, 0x43, 0xE8, 0xBC, 0xB8, 0x43, - 0xE8, 0xBC, 0xBB, 0x43, 0xE8, 0xBD, 0xA2, 0x43, - 0xE8, 0xBE, 0x9B, 0x43, 0xE8, 0xBE, 0x9E, 0x43, - 0xE8, 0xBE, 0xB0, 0x43, 0xE8, 0xBE, 0xB5, 0x43, - // Bytes 1400 - 143f - 0xE8, 0xBE, 0xB6, 0x43, 0xE9, 0x80, 0xA3, 0x43, - 0xE9, 0x80, 0xB8, 0x43, 0xE9, 0x81, 0x8A, 0x43, - 0xE9, 0x81, 0xA9, 0x43, 0xE9, 0x81, 0xB2, 0x43, - 0xE9, 0x81, 0xBC, 0x43, 0xE9, 0x82, 0x8F, 0x43, - 0xE9, 0x82, 0x91, 0x43, 0xE9, 0x82, 0x94, 0x43, - 0xE9, 0x83, 0x8E, 0x43, 0xE9, 0x83, 0x9E, 0x43, - 0xE9, 0x83, 0xB1, 0x43, 0xE9, 0x83, 0xBD, 0x43, - 0xE9, 0x84, 0x91, 0x43, 0xE9, 0x84, 0x9B, 0x43, - // Bytes 1440 - 147f - 0xE9, 0x85, 0x89, 0x43, 0xE9, 0x85, 0x8D, 0x43, - 0xE9, 0x85, 0xAA, 0x43, 0xE9, 0x86, 0x99, 0x43, - 0xE9, 0x86, 0xB4, 0x43, 0xE9, 0x87, 0x86, 0x43, - 0xE9, 0x87, 0x8C, 0x43, 0xE9, 0x87, 0x8F, 0x43, - 0xE9, 0x87, 0x91, 0x43, 0xE9, 0x88, 0xB4, 0x43, - 0xE9, 0x88, 0xB8, 0x43, 0xE9, 0x89, 0xB6, 0x43, - 0xE9, 0x89, 0xBC, 0x43, 0xE9, 0x8B, 0x97, 0x43, - 0xE9, 0x8B, 0x98, 0x43, 0xE9, 0x8C, 0x84, 0x43, - // Bytes 1480 - 14bf - 0xE9, 0x8D, 0x8A, 0x43, 0xE9, 0x8F, 0xB9, 0x43, - 0xE9, 0x90, 0x95, 0x43, 0xE9, 0x95, 0xB7, 0x43, - 0xE9, 0x96, 0x80, 0x43, 0xE9, 0x96, 0x8B, 0x43, - 0xE9, 0x96, 0xAD, 0x43, 0xE9, 0x96, 0xB7, 0x43, - 0xE9, 0x98, 0x9C, 0x43, 0xE9, 0x98, 0xAE, 0x43, - 0xE9, 0x99, 0x8B, 0x43, 0xE9, 0x99, 0x8D, 0x43, - 0xE9, 0x99, 0xB5, 0x43, 0xE9, 0x99, 0xB8, 0x43, - 0xE9, 0x99, 0xBC, 0x43, 0xE9, 0x9A, 0x86, 0x43, - // Bytes 14c0 - 14ff - 0xE9, 0x9A, 0xA3, 0x43, 0xE9, 0x9A, 0xB6, 0x43, - 0xE9, 0x9A, 0xB7, 0x43, 0xE9, 0x9A, 0xB8, 0x43, - 0xE9, 0x9A, 0xB9, 0x43, 0xE9, 0x9B, 0x83, 0x43, - 0xE9, 0x9B, 0xA2, 0x43, 0xE9, 0x9B, 0xA3, 0x43, - 0xE9, 0x9B, 0xA8, 0x43, 0xE9, 0x9B, 0xB6, 0x43, - 0xE9, 0x9B, 0xB7, 0x43, 0xE9, 0x9C, 0xA3, 0x43, - 0xE9, 0x9C, 0xB2, 0x43, 0xE9, 0x9D, 0x88, 0x43, - 0xE9, 0x9D, 0x91, 0x43, 0xE9, 0x9D, 0x96, 0x43, - // Bytes 1500 - 153f - 0xE9, 0x9D, 0x9E, 0x43, 0xE9, 0x9D, 0xA2, 0x43, - 0xE9, 0x9D, 0xA9, 0x43, 0xE9, 0x9F, 0x8B, 0x43, - 0xE9, 0x9F, 0x9B, 0x43, 0xE9, 0x9F, 0xA0, 0x43, - 0xE9, 0x9F, 0xAD, 0x43, 0xE9, 0x9F, 0xB3, 0x43, - 0xE9, 0x9F, 0xBF, 0x43, 0xE9, 0xA0, 0x81, 0x43, - 0xE9, 0xA0, 0x85, 0x43, 0xE9, 0xA0, 0x8B, 0x43, - 0xE9, 0xA0, 0x98, 0x43, 0xE9, 0xA0, 0xA9, 0x43, - 0xE9, 0xA0, 0xBB, 0x43, 0xE9, 0xA1, 0x9E, 0x43, - // Bytes 1540 - 157f - 0xE9, 0xA2, 0xA8, 0x43, 0xE9, 0xA3, 0x9B, 0x43, - 0xE9, 0xA3, 0x9F, 0x43, 0xE9, 0xA3, 0xA2, 0x43, - 0xE9, 0xA3, 0xAF, 0x43, 0xE9, 0xA3, 0xBC, 0x43, - 0xE9, 0xA4, 0xA8, 0x43, 0xE9, 0xA4, 0xA9, 0x43, - 0xE9, 0xA6, 0x96, 0x43, 0xE9, 0xA6, 0x99, 0x43, - 0xE9, 0xA6, 0xA7, 0x43, 0xE9, 0xA6, 0xAC, 0x43, - 0xE9, 0xA7, 0x82, 0x43, 0xE9, 0xA7, 0xB1, 0x43, - 0xE9, 0xA7, 0xBE, 0x43, 0xE9, 0xA9, 0xAA, 0x43, - // Bytes 1580 - 15bf - 0xE9, 0xAA, 0xA8, 0x43, 0xE9, 0xAB, 0x98, 0x43, - 0xE9, 0xAB, 0x9F, 0x43, 0xE9, 0xAC, 0x92, 0x43, - 0xE9, 0xAC, 0xA5, 0x43, 0xE9, 0xAC, 0xAF, 0x43, - 0xE9, 0xAC, 0xB2, 0x43, 0xE9, 0xAC, 0xBC, 0x43, - 0xE9, 0xAD, 0x9A, 0x43, 0xE9, 0xAD, 0xAF, 0x43, - 0xE9, 0xB1, 0x80, 0x43, 0xE9, 0xB1, 0x97, 0x43, - 0xE9, 0xB3, 0xA5, 0x43, 0xE9, 0xB3, 0xBD, 0x43, - 0xE9, 0xB5, 0xA7, 0x43, 0xE9, 0xB6, 0xB4, 0x43, - // Bytes 15c0 - 15ff - 0xE9, 0xB7, 0xBA, 0x43, 0xE9, 0xB8, 0x9E, 0x43, - 0xE9, 0xB9, 0xB5, 0x43, 0xE9, 0xB9, 0xBF, 0x43, - 0xE9, 0xBA, 0x97, 0x43, 0xE9, 0xBA, 0x9F, 0x43, - 0xE9, 0xBA, 0xA5, 0x43, 0xE9, 0xBA, 0xBB, 0x43, - 0xE9, 0xBB, 0x83, 0x43, 0xE9, 0xBB, 0x8D, 0x43, - 0xE9, 0xBB, 0x8E, 0x43, 0xE9, 0xBB, 0x91, 0x43, - 0xE9, 0xBB, 0xB9, 0x43, 0xE9, 0xBB, 0xBD, 0x43, - 0xE9, 0xBB, 0xBE, 0x43, 0xE9, 0xBC, 0x85, 0x43, - // Bytes 1600 - 163f - 0xE9, 0xBC, 0x8E, 0x43, 0xE9, 0xBC, 0x8F, 0x43, - 0xE9, 0xBC, 0x93, 0x43, 0xE9, 0xBC, 0x96, 0x43, - 0xE9, 0xBC, 0xA0, 0x43, 0xE9, 0xBC, 0xBB, 0x43, - 0xE9, 0xBD, 0x83, 0x43, 0xE9, 0xBD, 0x8A, 0x43, - 0xE9, 0xBD, 0x92, 0x43, 0xE9, 0xBE, 0x8D, 0x43, - 0xE9, 0xBE, 0x8E, 0x43, 0xE9, 0xBE, 0x9C, 0x43, - 0xE9, 0xBE, 0x9F, 0x43, 0xE9, 0xBE, 0xA0, 0x43, - 0xEA, 0x9C, 0xA7, 0x43, 0xEA, 0x9D, 0xAF, 0x43, - // Bytes 1640 - 167f - 0xEA, 0xAC, 0xB7, 0x43, 0xEA, 0xAD, 0x92, 0x44, - 0xF0, 0xA0, 0x84, 0xA2, 0x44, 0xF0, 0xA0, 0x94, - 0x9C, 0x44, 0xF0, 0xA0, 0x94, 0xA5, 0x44, 0xF0, - 0xA0, 0x95, 0x8B, 0x44, 0xF0, 0xA0, 0x98, 0xBA, - 0x44, 0xF0, 0xA0, 0xA0, 0x84, 0x44, 0xF0, 0xA0, - 0xA3, 0x9E, 0x44, 0xF0, 0xA0, 0xA8, 0xAC, 0x44, - 0xF0, 0xA0, 0xAD, 0xA3, 0x44, 0xF0, 0xA1, 0x93, - 0xA4, 0x44, 0xF0, 0xA1, 0x9A, 0xA8, 0x44, 0xF0, - // Bytes 1680 - 16bf - 0xA1, 0x9B, 0xAA, 0x44, 0xF0, 0xA1, 0xA7, 0x88, - 0x44, 0xF0, 0xA1, 0xAC, 0x98, 0x44, 0xF0, 0xA1, - 0xB4, 0x8B, 0x44, 0xF0, 0xA1, 0xB7, 0xA4, 0x44, - 0xF0, 0xA1, 0xB7, 0xA6, 0x44, 0xF0, 0xA2, 0x86, - 0x83, 0x44, 0xF0, 0xA2, 0x86, 0x9F, 0x44, 0xF0, - 0xA2, 0x8C, 0xB1, 0x44, 0xF0, 0xA2, 0x9B, 0x94, - 0x44, 0xF0, 0xA2, 0xA1, 0x84, 0x44, 0xF0, 0xA2, - 0xA1, 0x8A, 0x44, 0xF0, 0xA2, 0xAC, 0x8C, 0x44, - // Bytes 16c0 - 16ff - 0xF0, 0xA2, 0xAF, 0xB1, 0x44, 0xF0, 0xA3, 0x80, - 0x8A, 0x44, 0xF0, 0xA3, 0x8A, 0xB8, 0x44, 0xF0, - 0xA3, 0x8D, 0x9F, 0x44, 0xF0, 0xA3, 0x8E, 0x93, - 0x44, 0xF0, 0xA3, 0x8E, 0x9C, 0x44, 0xF0, 0xA3, - 0x8F, 0x83, 0x44, 0xF0, 0xA3, 0x8F, 0x95, 0x44, - 0xF0, 0xA3, 0x91, 0xAD, 0x44, 0xF0, 0xA3, 0x9A, - 0xA3, 0x44, 0xF0, 0xA3, 0xA2, 0xA7, 0x44, 0xF0, - 0xA3, 0xAA, 0x8D, 0x44, 0xF0, 0xA3, 0xAB, 0xBA, - // Bytes 1700 - 173f - 0x44, 0xF0, 0xA3, 0xB2, 0xBC, 0x44, 0xF0, 0xA3, - 0xB4, 0x9E, 0x44, 0xF0, 0xA3, 0xBB, 0x91, 0x44, - 0xF0, 0xA3, 0xBD, 0x9E, 0x44, 0xF0, 0xA3, 0xBE, - 0x8E, 0x44, 0xF0, 0xA4, 0x89, 0xA3, 0x44, 0xF0, - 0xA4, 0x8B, 0xAE, 0x44, 0xF0, 0xA4, 0x8E, 0xAB, - 0x44, 0xF0, 0xA4, 0x98, 0x88, 0x44, 0xF0, 0xA4, - 0x9C, 0xB5, 0x44, 0xF0, 0xA4, 0xA0, 0x94, 0x44, - 0xF0, 0xA4, 0xB0, 0xB6, 0x44, 0xF0, 0xA4, 0xB2, - // Bytes 1740 - 177f - 0x92, 0x44, 0xF0, 0xA4, 0xBE, 0xA1, 0x44, 0xF0, - 0xA4, 0xBE, 0xB8, 0x44, 0xF0, 0xA5, 0x81, 0x84, - 0x44, 0xF0, 0xA5, 0x83, 0xB2, 0x44, 0xF0, 0xA5, - 0x83, 0xB3, 0x44, 0xF0, 0xA5, 0x84, 0x99, 0x44, - 0xF0, 0xA5, 0x84, 0xB3, 0x44, 0xF0, 0xA5, 0x89, - 0x89, 0x44, 0xF0, 0xA5, 0x90, 0x9D, 0x44, 0xF0, - 0xA5, 0x98, 0xA6, 0x44, 0xF0, 0xA5, 0x9A, 0x9A, - 0x44, 0xF0, 0xA5, 0x9B, 0x85, 0x44, 0xF0, 0xA5, - // Bytes 1780 - 17bf - 0xA5, 0xBC, 0x44, 0xF0, 0xA5, 0xAA, 0xA7, 0x44, - 0xF0, 0xA5, 0xAE, 0xAB, 0x44, 0xF0, 0xA5, 0xB2, - 0x80, 0x44, 0xF0, 0xA5, 0xB3, 0x90, 0x44, 0xF0, - 0xA5, 0xBE, 0x86, 0x44, 0xF0, 0xA6, 0x87, 0x9A, - 0x44, 0xF0, 0xA6, 0x88, 0xA8, 0x44, 0xF0, 0xA6, - 0x89, 0x87, 0x44, 0xF0, 0xA6, 0x8B, 0x99, 0x44, - 0xF0, 0xA6, 0x8C, 0xBE, 0x44, 0xF0, 0xA6, 0x93, - 0x9A, 0x44, 0xF0, 0xA6, 0x94, 0xA3, 0x44, 0xF0, - // Bytes 17c0 - 17ff - 0xA6, 0x96, 0xA8, 0x44, 0xF0, 0xA6, 0x9E, 0xA7, - 0x44, 0xF0, 0xA6, 0x9E, 0xB5, 0x44, 0xF0, 0xA6, - 0xAC, 0xBC, 0x44, 0xF0, 0xA6, 0xB0, 0xB6, 0x44, - 0xF0, 0xA6, 0xB3, 0x95, 0x44, 0xF0, 0xA6, 0xB5, - 0xAB, 0x44, 0xF0, 0xA6, 0xBC, 0xAC, 0x44, 0xF0, - 0xA6, 0xBE, 0xB1, 0x44, 0xF0, 0xA7, 0x83, 0x92, - 0x44, 0xF0, 0xA7, 0x8F, 0x8A, 0x44, 0xF0, 0xA7, - 0x99, 0xA7, 0x44, 0xF0, 0xA7, 0xA2, 0xAE, 0x44, - // Bytes 1800 - 183f - 0xF0, 0xA7, 0xA5, 0xA6, 0x44, 0xF0, 0xA7, 0xB2, - 0xA8, 0x44, 0xF0, 0xA7, 0xBB, 0x93, 0x44, 0xF0, - 0xA7, 0xBC, 0xAF, 0x44, 0xF0, 0xA8, 0x97, 0x92, - 0x44, 0xF0, 0xA8, 0x97, 0xAD, 0x44, 0xF0, 0xA8, - 0x9C, 0xAE, 0x44, 0xF0, 0xA8, 0xAF, 0xBA, 0x44, - 0xF0, 0xA8, 0xB5, 0xB7, 0x44, 0xF0, 0xA9, 0x85, - 0x85, 0x44, 0xF0, 0xA9, 0x87, 0x9F, 0x44, 0xF0, - 0xA9, 0x88, 0x9A, 0x44, 0xF0, 0xA9, 0x90, 0x8A, - // Bytes 1840 - 187f - 0x44, 0xF0, 0xA9, 0x92, 0x96, 0x44, 0xF0, 0xA9, - 0x96, 0xB6, 0x44, 0xF0, 0xA9, 0xAC, 0xB0, 0x44, - 0xF0, 0xAA, 0x83, 0x8E, 0x44, 0xF0, 0xAA, 0x84, - 0x85, 0x44, 0xF0, 0xAA, 0x88, 0x8E, 0x44, 0xF0, - 0xAA, 0x8A, 0x91, 0x44, 0xF0, 0xAA, 0x8E, 0x92, - 0x44, 0xF0, 0xAA, 0x98, 0x80, 0x42, 0x21, 0x21, - 0x42, 0x21, 0x3F, 0x42, 0x2E, 0x2E, 0x42, 0x30, - 0x2C, 0x42, 0x30, 0x2E, 0x42, 0x31, 0x2C, 0x42, - // Bytes 1880 - 18bf - 0x31, 0x2E, 0x42, 0x31, 0x30, 0x42, 0x31, 0x31, - 0x42, 0x31, 0x32, 0x42, 0x31, 0x33, 0x42, 0x31, - 0x34, 0x42, 0x31, 0x35, 0x42, 0x31, 0x36, 0x42, - 0x31, 0x37, 0x42, 0x31, 0x38, 0x42, 0x31, 0x39, - 0x42, 0x32, 0x2C, 0x42, 0x32, 0x2E, 0x42, 0x32, - 0x30, 0x42, 0x32, 0x31, 0x42, 0x32, 0x32, 0x42, - 0x32, 0x33, 0x42, 0x32, 0x34, 0x42, 0x32, 0x35, - 0x42, 0x32, 0x36, 0x42, 0x32, 0x37, 0x42, 0x32, - // Bytes 18c0 - 18ff - 0x38, 0x42, 0x32, 0x39, 0x42, 0x33, 0x2C, 0x42, - 0x33, 0x2E, 0x42, 0x33, 0x30, 0x42, 0x33, 0x31, - 0x42, 0x33, 0x32, 0x42, 0x33, 0x33, 0x42, 0x33, - 0x34, 0x42, 0x33, 0x35, 0x42, 0x33, 0x36, 0x42, - 0x33, 0x37, 0x42, 0x33, 0x38, 0x42, 0x33, 0x39, - 0x42, 0x34, 0x2C, 0x42, 0x34, 0x2E, 0x42, 0x34, - 0x30, 0x42, 0x34, 0x31, 0x42, 0x34, 0x32, 0x42, - 0x34, 0x33, 0x42, 0x34, 0x34, 0x42, 0x34, 0x35, - // Bytes 1900 - 193f - 0x42, 0x34, 0x36, 0x42, 0x34, 0x37, 0x42, 0x34, - 0x38, 0x42, 0x34, 0x39, 0x42, 0x35, 0x2C, 0x42, - 0x35, 0x2E, 0x42, 0x35, 0x30, 0x42, 0x36, 0x2C, - 0x42, 0x36, 0x2E, 0x42, 0x37, 0x2C, 0x42, 0x37, - 0x2E, 0x42, 0x38, 0x2C, 0x42, 0x38, 0x2E, 0x42, - 0x39, 0x2C, 0x42, 0x39, 0x2E, 0x42, 0x3D, 0x3D, - 0x42, 0x3F, 0x21, 0x42, 0x3F, 0x3F, 0x42, 0x41, - 0x55, 0x42, 0x42, 0x71, 0x42, 0x43, 0x44, 0x42, - // Bytes 1940 - 197f - 0x44, 0x4A, 0x42, 0x44, 0x5A, 0x42, 0x44, 0x7A, - 0x42, 0x47, 0x42, 0x42, 0x47, 0x79, 0x42, 0x48, - 0x50, 0x42, 0x48, 0x56, 0x42, 0x48, 0x67, 0x42, - 0x48, 0x7A, 0x42, 0x49, 0x49, 0x42, 0x49, 0x4A, - 0x42, 0x49, 0x55, 0x42, 0x49, 0x56, 0x42, 0x49, - 0x58, 0x42, 0x4B, 0x42, 0x42, 0x4B, 0x4B, 0x42, - 0x4B, 0x4D, 0x42, 0x4C, 0x4A, 0x42, 0x4C, 0x6A, - 0x42, 0x4D, 0x42, 0x42, 0x4D, 0x43, 0x42, 0x4D, - // Bytes 1980 - 19bf - 0x44, 0x42, 0x4D, 0x56, 0x42, 0x4D, 0x57, 0x42, - 0x4E, 0x4A, 0x42, 0x4E, 0x6A, 0x42, 0x4E, 0x6F, - 0x42, 0x50, 0x48, 0x42, 0x50, 0x52, 0x42, 0x50, - 0x61, 0x42, 0x52, 0x73, 0x42, 0x53, 0x44, 0x42, - 0x53, 0x4D, 0x42, 0x53, 0x53, 0x42, 0x53, 0x76, - 0x42, 0x54, 0x4D, 0x42, 0x56, 0x49, 0x42, 0x57, - 0x43, 0x42, 0x57, 0x5A, 0x42, 0x57, 0x62, 0x42, - 0x58, 0x49, 0x42, 0x63, 0x63, 0x42, 0x63, 0x64, - // Bytes 19c0 - 19ff - 0x42, 0x63, 0x6D, 0x42, 0x64, 0x42, 0x42, 0x64, - 0x61, 0x42, 0x64, 0x6C, 0x42, 0x64, 0x6D, 0x42, - 0x64, 0x7A, 0x42, 0x65, 0x56, 0x42, 0x66, 0x66, - 0x42, 0x66, 0x69, 0x42, 0x66, 0x6C, 0x42, 0x66, - 0x6D, 0x42, 0x68, 0x61, 0x42, 0x69, 0x69, 0x42, - 0x69, 0x6A, 0x42, 0x69, 0x6E, 0x42, 0x69, 0x76, - 0x42, 0x69, 0x78, 0x42, 0x6B, 0x41, 0x42, 0x6B, - 0x56, 0x42, 0x6B, 0x57, 0x42, 0x6B, 0x67, 0x42, - // Bytes 1a00 - 1a3f - 0x6B, 0x6C, 0x42, 0x6B, 0x6D, 0x42, 0x6B, 0x74, - 0x42, 0x6C, 0x6A, 0x42, 0x6C, 0x6D, 0x42, 0x6C, - 0x6E, 0x42, 0x6C, 0x78, 0x42, 0x6D, 0x32, 0x42, - 0x6D, 0x33, 0x42, 0x6D, 0x41, 0x42, 0x6D, 0x56, - 0x42, 0x6D, 0x57, 0x42, 0x6D, 0x62, 0x42, 0x6D, - 0x67, 0x42, 0x6D, 0x6C, 0x42, 0x6D, 0x6D, 0x42, - 0x6D, 0x73, 0x42, 0x6E, 0x41, 0x42, 0x6E, 0x46, - 0x42, 0x6E, 0x56, 0x42, 0x6E, 0x57, 0x42, 0x6E, - // Bytes 1a40 - 1a7f - 0x6A, 0x42, 0x6E, 0x6D, 0x42, 0x6E, 0x73, 0x42, - 0x6F, 0x56, 0x42, 0x70, 0x41, 0x42, 0x70, 0x46, - 0x42, 0x70, 0x56, 0x42, 0x70, 0x57, 0x42, 0x70, - 0x63, 0x42, 0x70, 0x73, 0x42, 0x73, 0x72, 0x42, - 0x73, 0x74, 0x42, 0x76, 0x69, 0x42, 0x78, 0x69, - 0x43, 0x28, 0x31, 0x29, 0x43, 0x28, 0x32, 0x29, - 0x43, 0x28, 0x33, 0x29, 0x43, 0x28, 0x34, 0x29, - 0x43, 0x28, 0x35, 0x29, 0x43, 0x28, 0x36, 0x29, - // Bytes 1a80 - 1abf - 0x43, 0x28, 0x37, 0x29, 0x43, 0x28, 0x38, 0x29, - 0x43, 0x28, 0x39, 0x29, 0x43, 0x28, 0x41, 0x29, - 0x43, 0x28, 0x42, 0x29, 0x43, 0x28, 0x43, 0x29, - 0x43, 0x28, 0x44, 0x29, 0x43, 0x28, 0x45, 0x29, - 0x43, 0x28, 0x46, 0x29, 0x43, 0x28, 0x47, 0x29, - 0x43, 0x28, 0x48, 0x29, 0x43, 0x28, 0x49, 0x29, - 0x43, 0x28, 0x4A, 0x29, 0x43, 0x28, 0x4B, 0x29, - 0x43, 0x28, 0x4C, 0x29, 0x43, 0x28, 0x4D, 0x29, - // Bytes 1ac0 - 1aff - 0x43, 0x28, 0x4E, 0x29, 0x43, 0x28, 0x4F, 0x29, - 0x43, 0x28, 0x50, 0x29, 0x43, 0x28, 0x51, 0x29, - 0x43, 0x28, 0x52, 0x29, 0x43, 0x28, 0x53, 0x29, - 0x43, 0x28, 0x54, 0x29, 0x43, 0x28, 0x55, 0x29, - 0x43, 0x28, 0x56, 0x29, 0x43, 0x28, 0x57, 0x29, - 0x43, 0x28, 0x58, 0x29, 0x43, 0x28, 0x59, 0x29, - 0x43, 0x28, 0x5A, 0x29, 0x43, 0x28, 0x61, 0x29, - 0x43, 0x28, 0x62, 0x29, 0x43, 0x28, 0x63, 0x29, - // Bytes 1b00 - 1b3f - 0x43, 0x28, 0x64, 0x29, 0x43, 0x28, 0x65, 0x29, - 0x43, 0x28, 0x66, 0x29, 0x43, 0x28, 0x67, 0x29, - 0x43, 0x28, 0x68, 0x29, 0x43, 0x28, 0x69, 0x29, - 0x43, 0x28, 0x6A, 0x29, 0x43, 0x28, 0x6B, 0x29, - 0x43, 0x28, 0x6C, 0x29, 0x43, 0x28, 0x6D, 0x29, - 0x43, 0x28, 0x6E, 0x29, 0x43, 0x28, 0x6F, 0x29, - 0x43, 0x28, 0x70, 0x29, 0x43, 0x28, 0x71, 0x29, - 0x43, 0x28, 0x72, 0x29, 0x43, 0x28, 0x73, 0x29, - // Bytes 1b40 - 1b7f - 0x43, 0x28, 0x74, 0x29, 0x43, 0x28, 0x75, 0x29, - 0x43, 0x28, 0x76, 0x29, 0x43, 0x28, 0x77, 0x29, - 0x43, 0x28, 0x78, 0x29, 0x43, 0x28, 0x79, 0x29, - 0x43, 0x28, 0x7A, 0x29, 0x43, 0x2E, 0x2E, 0x2E, - 0x43, 0x31, 0x30, 0x2E, 0x43, 0x31, 0x31, 0x2E, - 0x43, 0x31, 0x32, 0x2E, 0x43, 0x31, 0x33, 0x2E, - 0x43, 0x31, 0x34, 0x2E, 0x43, 0x31, 0x35, 0x2E, - 0x43, 0x31, 0x36, 0x2E, 0x43, 0x31, 0x37, 0x2E, - // Bytes 1b80 - 1bbf - 0x43, 0x31, 0x38, 0x2E, 0x43, 0x31, 0x39, 0x2E, - 0x43, 0x32, 0x30, 0x2E, 0x43, 0x3A, 0x3A, 0x3D, - 0x43, 0x3D, 0x3D, 0x3D, 0x43, 0x43, 0x6F, 0x2E, - 0x43, 0x46, 0x41, 0x58, 0x43, 0x47, 0x48, 0x7A, - 0x43, 0x47, 0x50, 0x61, 0x43, 0x49, 0x49, 0x49, - 0x43, 0x4C, 0x54, 0x44, 0x43, 0x4C, 0xC2, 0xB7, - 0x43, 0x4D, 0x48, 0x7A, 0x43, 0x4D, 0x50, 0x61, - 0x43, 0x4D, 0xCE, 0xA9, 0x43, 0x50, 0x50, 0x4D, - // Bytes 1bc0 - 1bff - 0x43, 0x50, 0x50, 0x56, 0x43, 0x50, 0x54, 0x45, - 0x43, 0x54, 0x45, 0x4C, 0x43, 0x54, 0x48, 0x7A, - 0x43, 0x56, 0x49, 0x49, 0x43, 0x58, 0x49, 0x49, - 0x43, 0x61, 0x2F, 0x63, 0x43, 0x61, 0x2F, 0x73, - 0x43, 0x61, 0xCA, 0xBE, 0x43, 0x62, 0x61, 0x72, - 0x43, 0x63, 0x2F, 0x6F, 0x43, 0x63, 0x2F, 0x75, - 0x43, 0x63, 0x61, 0x6C, 0x43, 0x63, 0x6D, 0x32, - 0x43, 0x63, 0x6D, 0x33, 0x43, 0x64, 0x6D, 0x32, - // Bytes 1c00 - 1c3f - 0x43, 0x64, 0x6D, 0x33, 0x43, 0x65, 0x72, 0x67, - 0x43, 0x66, 0x66, 0x69, 0x43, 0x66, 0x66, 0x6C, - 0x43, 0x67, 0x61, 0x6C, 0x43, 0x68, 0x50, 0x61, - 0x43, 0x69, 0x69, 0x69, 0x43, 0x6B, 0x48, 0x7A, - 0x43, 0x6B, 0x50, 0x61, 0x43, 0x6B, 0x6D, 0x32, - 0x43, 0x6B, 0x6D, 0x33, 0x43, 0x6B, 0xCE, 0xA9, - 0x43, 0x6C, 0x6F, 0x67, 0x43, 0x6C, 0xC2, 0xB7, - 0x43, 0x6D, 0x69, 0x6C, 0x43, 0x6D, 0x6D, 0x32, - // Bytes 1c40 - 1c7f - 0x43, 0x6D, 0x6D, 0x33, 0x43, 0x6D, 0x6F, 0x6C, - 0x43, 0x72, 0x61, 0x64, 0x43, 0x76, 0x69, 0x69, - 0x43, 0x78, 0x69, 0x69, 0x43, 0xC2, 0xB0, 0x43, - 0x43, 0xC2, 0xB0, 0x46, 0x43, 0xCA, 0xBC, 0x6E, - 0x43, 0xCE, 0xBC, 0x41, 0x43, 0xCE, 0xBC, 0x46, - 0x43, 0xCE, 0xBC, 0x56, 0x43, 0xCE, 0xBC, 0x57, - 0x43, 0xCE, 0xBC, 0x67, 0x43, 0xCE, 0xBC, 0x6C, - 0x43, 0xCE, 0xBC, 0x6D, 0x43, 0xCE, 0xBC, 0x73, - // Bytes 1c80 - 1cbf - 0x44, 0x28, 0x31, 0x30, 0x29, 0x44, 0x28, 0x31, - 0x31, 0x29, 0x44, 0x28, 0x31, 0x32, 0x29, 0x44, - 0x28, 0x31, 0x33, 0x29, 0x44, 0x28, 0x31, 0x34, - 0x29, 0x44, 0x28, 0x31, 0x35, 0x29, 0x44, 0x28, - 0x31, 0x36, 0x29, 0x44, 0x28, 0x31, 0x37, 0x29, - 0x44, 0x28, 0x31, 0x38, 0x29, 0x44, 0x28, 0x31, - 0x39, 0x29, 0x44, 0x28, 0x32, 0x30, 0x29, 0x44, - 0x30, 0xE7, 0x82, 0xB9, 0x44, 0x31, 0xE2, 0x81, - // Bytes 1cc0 - 1cff - 0x84, 0x44, 0x31, 0xE6, 0x97, 0xA5, 0x44, 0x31, - 0xE6, 0x9C, 0x88, 0x44, 0x31, 0xE7, 0x82, 0xB9, - 0x44, 0x32, 0xE6, 0x97, 0xA5, 0x44, 0x32, 0xE6, - 0x9C, 0x88, 0x44, 0x32, 0xE7, 0x82, 0xB9, 0x44, - 0x33, 0xE6, 0x97, 0xA5, 0x44, 0x33, 0xE6, 0x9C, - 0x88, 0x44, 0x33, 0xE7, 0x82, 0xB9, 0x44, 0x34, - 0xE6, 0x97, 0xA5, 0x44, 0x34, 0xE6, 0x9C, 0x88, - 0x44, 0x34, 0xE7, 0x82, 0xB9, 0x44, 0x35, 0xE6, - // Bytes 1d00 - 1d3f - 0x97, 0xA5, 0x44, 0x35, 0xE6, 0x9C, 0x88, 0x44, - 0x35, 0xE7, 0x82, 0xB9, 0x44, 0x36, 0xE6, 0x97, - 0xA5, 0x44, 0x36, 0xE6, 0x9C, 0x88, 0x44, 0x36, - 0xE7, 0x82, 0xB9, 0x44, 0x37, 0xE6, 0x97, 0xA5, - 0x44, 0x37, 0xE6, 0x9C, 0x88, 0x44, 0x37, 0xE7, - 0x82, 0xB9, 0x44, 0x38, 0xE6, 0x97, 0xA5, 0x44, - 0x38, 0xE6, 0x9C, 0x88, 0x44, 0x38, 0xE7, 0x82, - 0xB9, 0x44, 0x39, 0xE6, 0x97, 0xA5, 0x44, 0x39, - // Bytes 1d40 - 1d7f - 0xE6, 0x9C, 0x88, 0x44, 0x39, 0xE7, 0x82, 0xB9, - 0x44, 0x56, 0x49, 0x49, 0x49, 0x44, 0x61, 0x2E, - 0x6D, 0x2E, 0x44, 0x6B, 0x63, 0x61, 0x6C, 0x44, - 0x70, 0x2E, 0x6D, 0x2E, 0x44, 0x76, 0x69, 0x69, - 0x69, 0x44, 0xD5, 0xA5, 0xD6, 0x82, 0x44, 0xD5, - 0xB4, 0xD5, 0xA5, 0x44, 0xD5, 0xB4, 0xD5, 0xAB, - 0x44, 0xD5, 0xB4, 0xD5, 0xAD, 0x44, 0xD5, 0xB4, - 0xD5, 0xB6, 0x44, 0xD5, 0xBE, 0xD5, 0xB6, 0x44, - // Bytes 1d80 - 1dbf - 0xD7, 0x90, 0xD7, 0x9C, 0x44, 0xD8, 0xA7, 0xD9, - 0xB4, 0x44, 0xD8, 0xA8, 0xD8, 0xAC, 0x44, 0xD8, - 0xA8, 0xD8, 0xAD, 0x44, 0xD8, 0xA8, 0xD8, 0xAE, - 0x44, 0xD8, 0xA8, 0xD8, 0xB1, 0x44, 0xD8, 0xA8, - 0xD8, 0xB2, 0x44, 0xD8, 0xA8, 0xD9, 0x85, 0x44, - 0xD8, 0xA8, 0xD9, 0x86, 0x44, 0xD8, 0xA8, 0xD9, - 0x87, 0x44, 0xD8, 0xA8, 0xD9, 0x89, 0x44, 0xD8, - 0xA8, 0xD9, 0x8A, 0x44, 0xD8, 0xAA, 0xD8, 0xAC, - // Bytes 1dc0 - 1dff - 0x44, 0xD8, 0xAA, 0xD8, 0xAD, 0x44, 0xD8, 0xAA, - 0xD8, 0xAE, 0x44, 0xD8, 0xAA, 0xD8, 0xB1, 0x44, - 0xD8, 0xAA, 0xD8, 0xB2, 0x44, 0xD8, 0xAA, 0xD9, - 0x85, 0x44, 0xD8, 0xAA, 0xD9, 0x86, 0x44, 0xD8, - 0xAA, 0xD9, 0x87, 0x44, 0xD8, 0xAA, 0xD9, 0x89, - 0x44, 0xD8, 0xAA, 0xD9, 0x8A, 0x44, 0xD8, 0xAB, - 0xD8, 0xAC, 0x44, 0xD8, 0xAB, 0xD8, 0xB1, 0x44, - 0xD8, 0xAB, 0xD8, 0xB2, 0x44, 0xD8, 0xAB, 0xD9, - // Bytes 1e00 - 1e3f - 0x85, 0x44, 0xD8, 0xAB, 0xD9, 0x86, 0x44, 0xD8, - 0xAB, 0xD9, 0x87, 0x44, 0xD8, 0xAB, 0xD9, 0x89, - 0x44, 0xD8, 0xAB, 0xD9, 0x8A, 0x44, 0xD8, 0xAC, - 0xD8, 0xAD, 0x44, 0xD8, 0xAC, 0xD9, 0x85, 0x44, - 0xD8, 0xAC, 0xD9, 0x89, 0x44, 0xD8, 0xAC, 0xD9, - 0x8A, 0x44, 0xD8, 0xAD, 0xD8, 0xAC, 0x44, 0xD8, - 0xAD, 0xD9, 0x85, 0x44, 0xD8, 0xAD, 0xD9, 0x89, - 0x44, 0xD8, 0xAD, 0xD9, 0x8A, 0x44, 0xD8, 0xAE, - // Bytes 1e40 - 1e7f - 0xD8, 0xAC, 0x44, 0xD8, 0xAE, 0xD8, 0xAD, 0x44, - 0xD8, 0xAE, 0xD9, 0x85, 0x44, 0xD8, 0xAE, 0xD9, - 0x89, 0x44, 0xD8, 0xAE, 0xD9, 0x8A, 0x44, 0xD8, - 0xB3, 0xD8, 0xAC, 0x44, 0xD8, 0xB3, 0xD8, 0xAD, - 0x44, 0xD8, 0xB3, 0xD8, 0xAE, 0x44, 0xD8, 0xB3, - 0xD8, 0xB1, 0x44, 0xD8, 0xB3, 0xD9, 0x85, 0x44, - 0xD8, 0xB3, 0xD9, 0x87, 0x44, 0xD8, 0xB3, 0xD9, - 0x89, 0x44, 0xD8, 0xB3, 0xD9, 0x8A, 0x44, 0xD8, - // Bytes 1e80 - 1ebf - 0xB4, 0xD8, 0xAC, 0x44, 0xD8, 0xB4, 0xD8, 0xAD, - 0x44, 0xD8, 0xB4, 0xD8, 0xAE, 0x44, 0xD8, 0xB4, - 0xD8, 0xB1, 0x44, 0xD8, 0xB4, 0xD9, 0x85, 0x44, - 0xD8, 0xB4, 0xD9, 0x87, 0x44, 0xD8, 0xB4, 0xD9, - 0x89, 0x44, 0xD8, 0xB4, 0xD9, 0x8A, 0x44, 0xD8, - 0xB5, 0xD8, 0xAD, 0x44, 0xD8, 0xB5, 0xD8, 0xAE, - 0x44, 0xD8, 0xB5, 0xD8, 0xB1, 0x44, 0xD8, 0xB5, - 0xD9, 0x85, 0x44, 0xD8, 0xB5, 0xD9, 0x89, 0x44, - // Bytes 1ec0 - 1eff - 0xD8, 0xB5, 0xD9, 0x8A, 0x44, 0xD8, 0xB6, 0xD8, - 0xAC, 0x44, 0xD8, 0xB6, 0xD8, 0xAD, 0x44, 0xD8, - 0xB6, 0xD8, 0xAE, 0x44, 0xD8, 0xB6, 0xD8, 0xB1, - 0x44, 0xD8, 0xB6, 0xD9, 0x85, 0x44, 0xD8, 0xB6, - 0xD9, 0x89, 0x44, 0xD8, 0xB6, 0xD9, 0x8A, 0x44, - 0xD8, 0xB7, 0xD8, 0xAD, 0x44, 0xD8, 0xB7, 0xD9, - 0x85, 0x44, 0xD8, 0xB7, 0xD9, 0x89, 0x44, 0xD8, - 0xB7, 0xD9, 0x8A, 0x44, 0xD8, 0xB8, 0xD9, 0x85, - // Bytes 1f00 - 1f3f - 0x44, 0xD8, 0xB9, 0xD8, 0xAC, 0x44, 0xD8, 0xB9, - 0xD9, 0x85, 0x44, 0xD8, 0xB9, 0xD9, 0x89, 0x44, - 0xD8, 0xB9, 0xD9, 0x8A, 0x44, 0xD8, 0xBA, 0xD8, - 0xAC, 0x44, 0xD8, 0xBA, 0xD9, 0x85, 0x44, 0xD8, - 0xBA, 0xD9, 0x89, 0x44, 0xD8, 0xBA, 0xD9, 0x8A, - 0x44, 0xD9, 0x81, 0xD8, 0xAC, 0x44, 0xD9, 0x81, - 0xD8, 0xAD, 0x44, 0xD9, 0x81, 0xD8, 0xAE, 0x44, - 0xD9, 0x81, 0xD9, 0x85, 0x44, 0xD9, 0x81, 0xD9, - // Bytes 1f40 - 1f7f - 0x89, 0x44, 0xD9, 0x81, 0xD9, 0x8A, 0x44, 0xD9, - 0x82, 0xD8, 0xAD, 0x44, 0xD9, 0x82, 0xD9, 0x85, - 0x44, 0xD9, 0x82, 0xD9, 0x89, 0x44, 0xD9, 0x82, - 0xD9, 0x8A, 0x44, 0xD9, 0x83, 0xD8, 0xA7, 0x44, - 0xD9, 0x83, 0xD8, 0xAC, 0x44, 0xD9, 0x83, 0xD8, - 0xAD, 0x44, 0xD9, 0x83, 0xD8, 0xAE, 0x44, 0xD9, - 0x83, 0xD9, 0x84, 0x44, 0xD9, 0x83, 0xD9, 0x85, - 0x44, 0xD9, 0x83, 0xD9, 0x89, 0x44, 0xD9, 0x83, - // Bytes 1f80 - 1fbf - 0xD9, 0x8A, 0x44, 0xD9, 0x84, 0xD8, 0xA7, 0x44, - 0xD9, 0x84, 0xD8, 0xAC, 0x44, 0xD9, 0x84, 0xD8, - 0xAD, 0x44, 0xD9, 0x84, 0xD8, 0xAE, 0x44, 0xD9, - 0x84, 0xD9, 0x85, 0x44, 0xD9, 0x84, 0xD9, 0x87, - 0x44, 0xD9, 0x84, 0xD9, 0x89, 0x44, 0xD9, 0x84, - 0xD9, 0x8A, 0x44, 0xD9, 0x85, 0xD8, 0xA7, 0x44, - 0xD9, 0x85, 0xD8, 0xAC, 0x44, 0xD9, 0x85, 0xD8, - 0xAD, 0x44, 0xD9, 0x85, 0xD8, 0xAE, 0x44, 0xD9, - // Bytes 1fc0 - 1fff - 0x85, 0xD9, 0x85, 0x44, 0xD9, 0x85, 0xD9, 0x89, - 0x44, 0xD9, 0x85, 0xD9, 0x8A, 0x44, 0xD9, 0x86, - 0xD8, 0xAC, 0x44, 0xD9, 0x86, 0xD8, 0xAD, 0x44, - 0xD9, 0x86, 0xD8, 0xAE, 0x44, 0xD9, 0x86, 0xD8, - 0xB1, 0x44, 0xD9, 0x86, 0xD8, 0xB2, 0x44, 0xD9, - 0x86, 0xD9, 0x85, 0x44, 0xD9, 0x86, 0xD9, 0x86, - 0x44, 0xD9, 0x86, 0xD9, 0x87, 0x44, 0xD9, 0x86, - 0xD9, 0x89, 0x44, 0xD9, 0x86, 0xD9, 0x8A, 0x44, - // Bytes 2000 - 203f - 0xD9, 0x87, 0xD8, 0xAC, 0x44, 0xD9, 0x87, 0xD9, - 0x85, 0x44, 0xD9, 0x87, 0xD9, 0x89, 0x44, 0xD9, - 0x87, 0xD9, 0x8A, 0x44, 0xD9, 0x88, 0xD9, 0xB4, - 0x44, 0xD9, 0x8A, 0xD8, 0xAC, 0x44, 0xD9, 0x8A, - 0xD8, 0xAD, 0x44, 0xD9, 0x8A, 0xD8, 0xAE, 0x44, - 0xD9, 0x8A, 0xD8, 0xB1, 0x44, 0xD9, 0x8A, 0xD8, - 0xB2, 0x44, 0xD9, 0x8A, 0xD9, 0x85, 0x44, 0xD9, - 0x8A, 0xD9, 0x86, 0x44, 0xD9, 0x8A, 0xD9, 0x87, - // Bytes 2040 - 207f - 0x44, 0xD9, 0x8A, 0xD9, 0x89, 0x44, 0xD9, 0x8A, - 0xD9, 0x8A, 0x44, 0xD9, 0x8A, 0xD9, 0xB4, 0x44, - 0xDB, 0x87, 0xD9, 0xB4, 0x45, 0x28, 0xE1, 0x84, - 0x80, 0x29, 0x45, 0x28, 0xE1, 0x84, 0x82, 0x29, - 0x45, 0x28, 0xE1, 0x84, 0x83, 0x29, 0x45, 0x28, - 0xE1, 0x84, 0x85, 0x29, 0x45, 0x28, 0xE1, 0x84, - 0x86, 0x29, 0x45, 0x28, 0xE1, 0x84, 0x87, 0x29, - 0x45, 0x28, 0xE1, 0x84, 0x89, 0x29, 0x45, 0x28, - // Bytes 2080 - 20bf - 0xE1, 0x84, 0x8B, 0x29, 0x45, 0x28, 0xE1, 0x84, - 0x8C, 0x29, 0x45, 0x28, 0xE1, 0x84, 0x8E, 0x29, - 0x45, 0x28, 0xE1, 0x84, 0x8F, 0x29, 0x45, 0x28, - 0xE1, 0x84, 0x90, 0x29, 0x45, 0x28, 0xE1, 0x84, - 0x91, 0x29, 0x45, 0x28, 0xE1, 0x84, 0x92, 0x29, - 0x45, 0x28, 0xE4, 0xB8, 0x80, 0x29, 0x45, 0x28, - 0xE4, 0xB8, 0x83, 0x29, 0x45, 0x28, 0xE4, 0xB8, - 0x89, 0x29, 0x45, 0x28, 0xE4, 0xB9, 0x9D, 0x29, - // Bytes 20c0 - 20ff - 0x45, 0x28, 0xE4, 0xBA, 0x8C, 0x29, 0x45, 0x28, - 0xE4, 0xBA, 0x94, 0x29, 0x45, 0x28, 0xE4, 0xBB, - 0xA3, 0x29, 0x45, 0x28, 0xE4, 0xBC, 0x81, 0x29, - 0x45, 0x28, 0xE4, 0xBC, 0x91, 0x29, 0x45, 0x28, - 0xE5, 0x85, 0xAB, 0x29, 0x45, 0x28, 0xE5, 0x85, - 0xAD, 0x29, 0x45, 0x28, 0xE5, 0x8A, 0xB4, 0x29, - 0x45, 0x28, 0xE5, 0x8D, 0x81, 0x29, 0x45, 0x28, - 0xE5, 0x8D, 0x94, 0x29, 0x45, 0x28, 0xE5, 0x90, - // Bytes 2100 - 213f - 0x8D, 0x29, 0x45, 0x28, 0xE5, 0x91, 0xBC, 0x29, - 0x45, 0x28, 0xE5, 0x9B, 0x9B, 0x29, 0x45, 0x28, - 0xE5, 0x9C, 0x9F, 0x29, 0x45, 0x28, 0xE5, 0xAD, - 0xA6, 0x29, 0x45, 0x28, 0xE6, 0x97, 0xA5, 0x29, - 0x45, 0x28, 0xE6, 0x9C, 0x88, 0x29, 0x45, 0x28, - 0xE6, 0x9C, 0x89, 0x29, 0x45, 0x28, 0xE6, 0x9C, - 0xA8, 0x29, 0x45, 0x28, 0xE6, 0xA0, 0xAA, 0x29, - 0x45, 0x28, 0xE6, 0xB0, 0xB4, 0x29, 0x45, 0x28, - // Bytes 2140 - 217f - 0xE7, 0x81, 0xAB, 0x29, 0x45, 0x28, 0xE7, 0x89, - 0xB9, 0x29, 0x45, 0x28, 0xE7, 0x9B, 0xA3, 0x29, - 0x45, 0x28, 0xE7, 0xA4, 0xBE, 0x29, 0x45, 0x28, - 0xE7, 0xA5, 0x9D, 0x29, 0x45, 0x28, 0xE7, 0xA5, - 0xAD, 0x29, 0x45, 0x28, 0xE8, 0x87, 0xAA, 0x29, - 0x45, 0x28, 0xE8, 0x87, 0xB3, 0x29, 0x45, 0x28, - 0xE8, 0xB2, 0xA1, 0x29, 0x45, 0x28, 0xE8, 0xB3, - 0x87, 0x29, 0x45, 0x28, 0xE9, 0x87, 0x91, 0x29, - // Bytes 2180 - 21bf - 0x45, 0x30, 0xE2, 0x81, 0x84, 0x33, 0x45, 0x31, - 0x30, 0xE6, 0x97, 0xA5, 0x45, 0x31, 0x30, 0xE6, - 0x9C, 0x88, 0x45, 0x31, 0x30, 0xE7, 0x82, 0xB9, - 0x45, 0x31, 0x31, 0xE6, 0x97, 0xA5, 0x45, 0x31, - 0x31, 0xE6, 0x9C, 0x88, 0x45, 0x31, 0x31, 0xE7, - 0x82, 0xB9, 0x45, 0x31, 0x32, 0xE6, 0x97, 0xA5, - 0x45, 0x31, 0x32, 0xE6, 0x9C, 0x88, 0x45, 0x31, - 0x32, 0xE7, 0x82, 0xB9, 0x45, 0x31, 0x33, 0xE6, - // Bytes 21c0 - 21ff - 0x97, 0xA5, 0x45, 0x31, 0x33, 0xE7, 0x82, 0xB9, - 0x45, 0x31, 0x34, 0xE6, 0x97, 0xA5, 0x45, 0x31, - 0x34, 0xE7, 0x82, 0xB9, 0x45, 0x31, 0x35, 0xE6, - 0x97, 0xA5, 0x45, 0x31, 0x35, 0xE7, 0x82, 0xB9, - 0x45, 0x31, 0x36, 0xE6, 0x97, 0xA5, 0x45, 0x31, - 0x36, 0xE7, 0x82, 0xB9, 0x45, 0x31, 0x37, 0xE6, - 0x97, 0xA5, 0x45, 0x31, 0x37, 0xE7, 0x82, 0xB9, - 0x45, 0x31, 0x38, 0xE6, 0x97, 0xA5, 0x45, 0x31, - // Bytes 2200 - 223f - 0x38, 0xE7, 0x82, 0xB9, 0x45, 0x31, 0x39, 0xE6, - 0x97, 0xA5, 0x45, 0x31, 0x39, 0xE7, 0x82, 0xB9, - 0x45, 0x31, 0xE2, 0x81, 0x84, 0x32, 0x45, 0x31, - 0xE2, 0x81, 0x84, 0x33, 0x45, 0x31, 0xE2, 0x81, - 0x84, 0x34, 0x45, 0x31, 0xE2, 0x81, 0x84, 0x35, - 0x45, 0x31, 0xE2, 0x81, 0x84, 0x36, 0x45, 0x31, - 0xE2, 0x81, 0x84, 0x37, 0x45, 0x31, 0xE2, 0x81, - 0x84, 0x38, 0x45, 0x31, 0xE2, 0x81, 0x84, 0x39, - // Bytes 2240 - 227f - 0x45, 0x32, 0x30, 0xE6, 0x97, 0xA5, 0x45, 0x32, - 0x30, 0xE7, 0x82, 0xB9, 0x45, 0x32, 0x31, 0xE6, - 0x97, 0xA5, 0x45, 0x32, 0x31, 0xE7, 0x82, 0xB9, - 0x45, 0x32, 0x32, 0xE6, 0x97, 0xA5, 0x45, 0x32, - 0x32, 0xE7, 0x82, 0xB9, 0x45, 0x32, 0x33, 0xE6, - 0x97, 0xA5, 0x45, 0x32, 0x33, 0xE7, 0x82, 0xB9, - 0x45, 0x32, 0x34, 0xE6, 0x97, 0xA5, 0x45, 0x32, - 0x34, 0xE7, 0x82, 0xB9, 0x45, 0x32, 0x35, 0xE6, - // Bytes 2280 - 22bf - 0x97, 0xA5, 0x45, 0x32, 0x36, 0xE6, 0x97, 0xA5, - 0x45, 0x32, 0x37, 0xE6, 0x97, 0xA5, 0x45, 0x32, - 0x38, 0xE6, 0x97, 0xA5, 0x45, 0x32, 0x39, 0xE6, - 0x97, 0xA5, 0x45, 0x32, 0xE2, 0x81, 0x84, 0x33, - 0x45, 0x32, 0xE2, 0x81, 0x84, 0x35, 0x45, 0x33, - 0x30, 0xE6, 0x97, 0xA5, 0x45, 0x33, 0x31, 0xE6, - 0x97, 0xA5, 0x45, 0x33, 0xE2, 0x81, 0x84, 0x34, - 0x45, 0x33, 0xE2, 0x81, 0x84, 0x35, 0x45, 0x33, - // Bytes 22c0 - 22ff - 0xE2, 0x81, 0x84, 0x38, 0x45, 0x34, 0xE2, 0x81, - 0x84, 0x35, 0x45, 0x35, 0xE2, 0x81, 0x84, 0x36, - 0x45, 0x35, 0xE2, 0x81, 0x84, 0x38, 0x45, 0x37, - 0xE2, 0x81, 0x84, 0x38, 0x45, 0x41, 0xE2, 0x88, - 0x95, 0x6D, 0x45, 0x56, 0xE2, 0x88, 0x95, 0x6D, - 0x45, 0x6D, 0xE2, 0x88, 0x95, 0x73, 0x46, 0x31, - 0xE2, 0x81, 0x84, 0x31, 0x30, 0x46, 0x43, 0xE2, - 0x88, 0x95, 0x6B, 0x67, 0x46, 0x6D, 0xE2, 0x88, - // Bytes 2300 - 233f - 0x95, 0x73, 0x32, 0x46, 0xD8, 0xA8, 0xD8, 0xAD, - 0xD9, 0x8A, 0x46, 0xD8, 0xA8, 0xD8, 0xAE, 0xD9, - 0x8A, 0x46, 0xD8, 0xAA, 0xD8, 0xAC, 0xD9, 0x85, - 0x46, 0xD8, 0xAA, 0xD8, 0xAC, 0xD9, 0x89, 0x46, - 0xD8, 0xAA, 0xD8, 0xAC, 0xD9, 0x8A, 0x46, 0xD8, - 0xAA, 0xD8, 0xAD, 0xD8, 0xAC, 0x46, 0xD8, 0xAA, - 0xD8, 0xAD, 0xD9, 0x85, 0x46, 0xD8, 0xAA, 0xD8, - 0xAE, 0xD9, 0x85, 0x46, 0xD8, 0xAA, 0xD8, 0xAE, - // Bytes 2340 - 237f - 0xD9, 0x89, 0x46, 0xD8, 0xAA, 0xD8, 0xAE, 0xD9, - 0x8A, 0x46, 0xD8, 0xAA, 0xD9, 0x85, 0xD8, 0xAC, - 0x46, 0xD8, 0xAA, 0xD9, 0x85, 0xD8, 0xAD, 0x46, - 0xD8, 0xAA, 0xD9, 0x85, 0xD8, 0xAE, 0x46, 0xD8, - 0xAA, 0xD9, 0x85, 0xD9, 0x89, 0x46, 0xD8, 0xAA, - 0xD9, 0x85, 0xD9, 0x8A, 0x46, 0xD8, 0xAC, 0xD8, - 0xAD, 0xD9, 0x89, 0x46, 0xD8, 0xAC, 0xD8, 0xAD, - 0xD9, 0x8A, 0x46, 0xD8, 0xAC, 0xD9, 0x85, 0xD8, - // Bytes 2380 - 23bf - 0xAD, 0x46, 0xD8, 0xAC, 0xD9, 0x85, 0xD9, 0x89, - 0x46, 0xD8, 0xAC, 0xD9, 0x85, 0xD9, 0x8A, 0x46, - 0xD8, 0xAD, 0xD8, 0xAC, 0xD9, 0x8A, 0x46, 0xD8, - 0xAD, 0xD9, 0x85, 0xD9, 0x89, 0x46, 0xD8, 0xAD, - 0xD9, 0x85, 0xD9, 0x8A, 0x46, 0xD8, 0xB3, 0xD8, - 0xAC, 0xD8, 0xAD, 0x46, 0xD8, 0xB3, 0xD8, 0xAC, - 0xD9, 0x89, 0x46, 0xD8, 0xB3, 0xD8, 0xAD, 0xD8, - 0xAC, 0x46, 0xD8, 0xB3, 0xD8, 0xAE, 0xD9, 0x89, - // Bytes 23c0 - 23ff - 0x46, 0xD8, 0xB3, 0xD8, 0xAE, 0xD9, 0x8A, 0x46, - 0xD8, 0xB3, 0xD9, 0x85, 0xD8, 0xAC, 0x46, 0xD8, - 0xB3, 0xD9, 0x85, 0xD8, 0xAD, 0x46, 0xD8, 0xB3, - 0xD9, 0x85, 0xD9, 0x85, 0x46, 0xD8, 0xB4, 0xD8, - 0xAC, 0xD9, 0x8A, 0x46, 0xD8, 0xB4, 0xD8, 0xAD, - 0xD9, 0x85, 0x46, 0xD8, 0xB4, 0xD8, 0xAD, 0xD9, - 0x8A, 0x46, 0xD8, 0xB4, 0xD9, 0x85, 0xD8, 0xAE, - 0x46, 0xD8, 0xB4, 0xD9, 0x85, 0xD9, 0x85, 0x46, - // Bytes 2400 - 243f - 0xD8, 0xB5, 0xD8, 0xAD, 0xD8, 0xAD, 0x46, 0xD8, - 0xB5, 0xD8, 0xAD, 0xD9, 0x8A, 0x46, 0xD8, 0xB5, - 0xD9, 0x84, 0xD9, 0x89, 0x46, 0xD8, 0xB5, 0xD9, - 0x84, 0xDB, 0x92, 0x46, 0xD8, 0xB5, 0xD9, 0x85, - 0xD9, 0x85, 0x46, 0xD8, 0xB6, 0xD8, 0xAD, 0xD9, - 0x89, 0x46, 0xD8, 0xB6, 0xD8, 0xAD, 0xD9, 0x8A, - 0x46, 0xD8, 0xB6, 0xD8, 0xAE, 0xD9, 0x85, 0x46, - 0xD8, 0xB7, 0xD9, 0x85, 0xD8, 0xAD, 0x46, 0xD8, - // Bytes 2440 - 247f - 0xB7, 0xD9, 0x85, 0xD9, 0x85, 0x46, 0xD8, 0xB7, - 0xD9, 0x85, 0xD9, 0x8A, 0x46, 0xD8, 0xB9, 0xD8, - 0xAC, 0xD9, 0x85, 0x46, 0xD8, 0xB9, 0xD9, 0x85, - 0xD9, 0x85, 0x46, 0xD8, 0xB9, 0xD9, 0x85, 0xD9, - 0x89, 0x46, 0xD8, 0xB9, 0xD9, 0x85, 0xD9, 0x8A, - 0x46, 0xD8, 0xBA, 0xD9, 0x85, 0xD9, 0x85, 0x46, - 0xD8, 0xBA, 0xD9, 0x85, 0xD9, 0x89, 0x46, 0xD8, - 0xBA, 0xD9, 0x85, 0xD9, 0x8A, 0x46, 0xD9, 0x81, - // Bytes 2480 - 24bf - 0xD8, 0xAE, 0xD9, 0x85, 0x46, 0xD9, 0x81, 0xD9, - 0x85, 0xD9, 0x8A, 0x46, 0xD9, 0x82, 0xD9, 0x84, - 0xDB, 0x92, 0x46, 0xD9, 0x82, 0xD9, 0x85, 0xD8, - 0xAD, 0x46, 0xD9, 0x82, 0xD9, 0x85, 0xD9, 0x85, - 0x46, 0xD9, 0x82, 0xD9, 0x85, 0xD9, 0x8A, 0x46, - 0xD9, 0x83, 0xD9, 0x85, 0xD9, 0x85, 0x46, 0xD9, - 0x83, 0xD9, 0x85, 0xD9, 0x8A, 0x46, 0xD9, 0x84, - 0xD8, 0xAC, 0xD8, 0xAC, 0x46, 0xD9, 0x84, 0xD8, - // Bytes 24c0 - 24ff - 0xAC, 0xD9, 0x85, 0x46, 0xD9, 0x84, 0xD8, 0xAC, - 0xD9, 0x8A, 0x46, 0xD9, 0x84, 0xD8, 0xAD, 0xD9, - 0x85, 0x46, 0xD9, 0x84, 0xD8, 0xAD, 0xD9, 0x89, - 0x46, 0xD9, 0x84, 0xD8, 0xAD, 0xD9, 0x8A, 0x46, - 0xD9, 0x84, 0xD8, 0xAE, 0xD9, 0x85, 0x46, 0xD9, - 0x84, 0xD9, 0x85, 0xD8, 0xAD, 0x46, 0xD9, 0x84, - 0xD9, 0x85, 0xD9, 0x8A, 0x46, 0xD9, 0x85, 0xD8, - 0xAC, 0xD8, 0xAD, 0x46, 0xD9, 0x85, 0xD8, 0xAC, - // Bytes 2500 - 253f - 0xD8, 0xAE, 0x46, 0xD9, 0x85, 0xD8, 0xAC, 0xD9, - 0x85, 0x46, 0xD9, 0x85, 0xD8, 0xAC, 0xD9, 0x8A, - 0x46, 0xD9, 0x85, 0xD8, 0xAD, 0xD8, 0xAC, 0x46, - 0xD9, 0x85, 0xD8, 0xAD, 0xD9, 0x85, 0x46, 0xD9, - 0x85, 0xD8, 0xAD, 0xD9, 0x8A, 0x46, 0xD9, 0x85, - 0xD8, 0xAE, 0xD8, 0xAC, 0x46, 0xD9, 0x85, 0xD8, - 0xAE, 0xD9, 0x85, 0x46, 0xD9, 0x85, 0xD8, 0xAE, - 0xD9, 0x8A, 0x46, 0xD9, 0x85, 0xD9, 0x85, 0xD9, - // Bytes 2540 - 257f - 0x8A, 0x46, 0xD9, 0x86, 0xD8, 0xAC, 0xD8, 0xAD, - 0x46, 0xD9, 0x86, 0xD8, 0xAC, 0xD9, 0x85, 0x46, - 0xD9, 0x86, 0xD8, 0xAC, 0xD9, 0x89, 0x46, 0xD9, - 0x86, 0xD8, 0xAC, 0xD9, 0x8A, 0x46, 0xD9, 0x86, - 0xD8, 0xAD, 0xD9, 0x85, 0x46, 0xD9, 0x86, 0xD8, - 0xAD, 0xD9, 0x89, 0x46, 0xD9, 0x86, 0xD8, 0xAD, - 0xD9, 0x8A, 0x46, 0xD9, 0x86, 0xD9, 0x85, 0xD9, - 0x89, 0x46, 0xD9, 0x86, 0xD9, 0x85, 0xD9, 0x8A, - // Bytes 2580 - 25bf - 0x46, 0xD9, 0x87, 0xD9, 0x85, 0xD8, 0xAC, 0x46, - 0xD9, 0x87, 0xD9, 0x85, 0xD9, 0x85, 0x46, 0xD9, - 0x8A, 0xD8, 0xAC, 0xD9, 0x8A, 0x46, 0xD9, 0x8A, - 0xD8, 0xAD, 0xD9, 0x8A, 0x46, 0xD9, 0x8A, 0xD9, - 0x85, 0xD9, 0x85, 0x46, 0xD9, 0x8A, 0xD9, 0x85, - 0xD9, 0x8A, 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xD8, - 0xA7, 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xD8, 0xAC, - 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xD8, 0xAD, 0x46, - // Bytes 25c0 - 25ff - 0xD9, 0x8A, 0xD9, 0x94, 0xD8, 0xAE, 0x46, 0xD9, - 0x8A, 0xD9, 0x94, 0xD8, 0xB1, 0x46, 0xD9, 0x8A, - 0xD9, 0x94, 0xD8, 0xB2, 0x46, 0xD9, 0x8A, 0xD9, - 0x94, 0xD9, 0x85, 0x46, 0xD9, 0x8A, 0xD9, 0x94, - 0xD9, 0x86, 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xD9, - 0x87, 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xD9, 0x88, - 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xD9, 0x89, 0x46, - 0xD9, 0x8A, 0xD9, 0x94, 0xD9, 0x8A, 0x46, 0xD9, - // Bytes 2600 - 263f - 0x8A, 0xD9, 0x94, 0xDB, 0x86, 0x46, 0xD9, 0x8A, - 0xD9, 0x94, 0xDB, 0x87, 0x46, 0xD9, 0x8A, 0xD9, - 0x94, 0xDB, 0x88, 0x46, 0xD9, 0x8A, 0xD9, 0x94, - 0xDB, 0x90, 0x46, 0xD9, 0x8A, 0xD9, 0x94, 0xDB, - 0x95, 0x46, 0xE0, 0xB9, 0x8D, 0xE0, 0xB8, 0xB2, - 0x46, 0xE0, 0xBA, 0xAB, 0xE0, 0xBA, 0x99, 0x46, - 0xE0, 0xBA, 0xAB, 0xE0, 0xBA, 0xA1, 0x46, 0xE0, - 0xBB, 0x8D, 0xE0, 0xBA, 0xB2, 0x46, 0xE0, 0xBD, - // Bytes 2640 - 267f - 0x80, 0xE0, 0xBE, 0xB5, 0x46, 0xE0, 0xBD, 0x82, - 0xE0, 0xBE, 0xB7, 0x46, 0xE0, 0xBD, 0x8C, 0xE0, - 0xBE, 0xB7, 0x46, 0xE0, 0xBD, 0x91, 0xE0, 0xBE, - 0xB7, 0x46, 0xE0, 0xBD, 0x96, 0xE0, 0xBE, 0xB7, - 0x46, 0xE0, 0xBD, 0x9B, 0xE0, 0xBE, 0xB7, 0x46, - 0xE0, 0xBE, 0x90, 0xE0, 0xBE, 0xB5, 0x46, 0xE0, - 0xBE, 0x92, 0xE0, 0xBE, 0xB7, 0x46, 0xE0, 0xBE, - 0x9C, 0xE0, 0xBE, 0xB7, 0x46, 0xE0, 0xBE, 0xA1, - // Bytes 2680 - 26bf - 0xE0, 0xBE, 0xB7, 0x46, 0xE0, 0xBE, 0xA6, 0xE0, - 0xBE, 0xB7, 0x46, 0xE0, 0xBE, 0xAB, 0xE0, 0xBE, - 0xB7, 0x46, 0xE2, 0x80, 0xB2, 0xE2, 0x80, 0xB2, - 0x46, 0xE2, 0x80, 0xB5, 0xE2, 0x80, 0xB5, 0x46, - 0xE2, 0x88, 0xAB, 0xE2, 0x88, 0xAB, 0x46, 0xE2, - 0x88, 0xAE, 0xE2, 0x88, 0xAE, 0x46, 0xE3, 0x81, - 0xBB, 0xE3, 0x81, 0x8B, 0x46, 0xE3, 0x82, 0x88, - 0xE3, 0x82, 0x8A, 0x46, 0xE3, 0x82, 0xAD, 0xE3, - // Bytes 26c0 - 26ff - 0x83, 0xAD, 0x46, 0xE3, 0x82, 0xB3, 0xE3, 0x82, - 0xB3, 0x46, 0xE3, 0x82, 0xB3, 0xE3, 0x83, 0x88, - 0x46, 0xE3, 0x83, 0x88, 0xE3, 0x83, 0xB3, 0x46, - 0xE3, 0x83, 0x8A, 0xE3, 0x83, 0x8E, 0x46, 0xE3, - 0x83, 0x9B, 0xE3, 0x83, 0xB3, 0x46, 0xE3, 0x83, - 0x9F, 0xE3, 0x83, 0xAA, 0x46, 0xE3, 0x83, 0xAA, - 0xE3, 0x83, 0xA9, 0x46, 0xE3, 0x83, 0xAC, 0xE3, - 0x83, 0xA0, 0x46, 0xE5, 0xA4, 0xA7, 0xE6, 0xAD, - // Bytes 2700 - 273f - 0xA3, 0x46, 0xE5, 0xB9, 0xB3, 0xE6, 0x88, 0x90, - 0x46, 0xE6, 0x98, 0x8E, 0xE6, 0xB2, 0xBB, 0x46, - 0xE6, 0x98, 0xAD, 0xE5, 0x92, 0x8C, 0x47, 0x72, - 0x61, 0x64, 0xE2, 0x88, 0x95, 0x73, 0x47, 0xE3, - 0x80, 0x94, 0x53, 0xE3, 0x80, 0x95, 0x48, 0x28, - 0xE1, 0x84, 0x80, 0xE1, 0x85, 0xA1, 0x29, 0x48, - 0x28, 0xE1, 0x84, 0x82, 0xE1, 0x85, 0xA1, 0x29, - 0x48, 0x28, 0xE1, 0x84, 0x83, 0xE1, 0x85, 0xA1, - // Bytes 2740 - 277f - 0x29, 0x48, 0x28, 0xE1, 0x84, 0x85, 0xE1, 0x85, - 0xA1, 0x29, 0x48, 0x28, 0xE1, 0x84, 0x86, 0xE1, - 0x85, 0xA1, 0x29, 0x48, 0x28, 0xE1, 0x84, 0x87, - 0xE1, 0x85, 0xA1, 0x29, 0x48, 0x28, 0xE1, 0x84, - 0x89, 0xE1, 0x85, 0xA1, 0x29, 0x48, 0x28, 0xE1, - 0x84, 0x8B, 0xE1, 0x85, 0xA1, 0x29, 0x48, 0x28, - 0xE1, 0x84, 0x8C, 0xE1, 0x85, 0xA1, 0x29, 0x48, - 0x28, 0xE1, 0x84, 0x8C, 0xE1, 0x85, 0xAE, 0x29, - // Bytes 2780 - 27bf - 0x48, 0x28, 0xE1, 0x84, 0x8E, 0xE1, 0x85, 0xA1, - 0x29, 0x48, 0x28, 0xE1, 0x84, 0x8F, 0xE1, 0x85, - 0xA1, 0x29, 0x48, 0x28, 0xE1, 0x84, 0x90, 0xE1, - 0x85, 0xA1, 0x29, 0x48, 0x28, 0xE1, 0x84, 0x91, - 0xE1, 0x85, 0xA1, 0x29, 0x48, 0x28, 0xE1, 0x84, - 0x92, 0xE1, 0x85, 0xA1, 0x29, 0x48, 0x72, 0x61, - 0x64, 0xE2, 0x88, 0x95, 0x73, 0x32, 0x48, 0xD8, - 0xA7, 0xD9, 0x83, 0xD8, 0xA8, 0xD8, 0xB1, 0x48, - // Bytes 27c0 - 27ff - 0xD8, 0xA7, 0xD9, 0x84, 0xD9, 0x84, 0xD9, 0x87, - 0x48, 0xD8, 0xB1, 0xD8, 0xB3, 0xD9, 0x88, 0xD9, - 0x84, 0x48, 0xD8, 0xB1, 0xDB, 0x8C, 0xD8, 0xA7, - 0xD9, 0x84, 0x48, 0xD8, 0xB5, 0xD9, 0x84, 0xD8, - 0xB9, 0xD9, 0x85, 0x48, 0xD8, 0xB9, 0xD9, 0x84, - 0xD9, 0x8A, 0xD9, 0x87, 0x48, 0xD9, 0x85, 0xD8, - 0xAD, 0xD9, 0x85, 0xD8, 0xAF, 0x48, 0xD9, 0x88, - 0xD8, 0xB3, 0xD9, 0x84, 0xD9, 0x85, 0x49, 0xE2, - // Bytes 2800 - 283f - 0x80, 0xB2, 0xE2, 0x80, 0xB2, 0xE2, 0x80, 0xB2, - 0x49, 0xE2, 0x80, 0xB5, 0xE2, 0x80, 0xB5, 0xE2, - 0x80, 0xB5, 0x49, 0xE2, 0x88, 0xAB, 0xE2, 0x88, - 0xAB, 0xE2, 0x88, 0xAB, 0x49, 0xE2, 0x88, 0xAE, - 0xE2, 0x88, 0xAE, 0xE2, 0x88, 0xAE, 0x49, 0xE3, - 0x80, 0x94, 0xE4, 0xB8, 0x89, 0xE3, 0x80, 0x95, - 0x49, 0xE3, 0x80, 0x94, 0xE4, 0xBA, 0x8C, 0xE3, - 0x80, 0x95, 0x49, 0xE3, 0x80, 0x94, 0xE5, 0x8B, - // Bytes 2840 - 287f - 0x9D, 0xE3, 0x80, 0x95, 0x49, 0xE3, 0x80, 0x94, - 0xE5, 0xAE, 0x89, 0xE3, 0x80, 0x95, 0x49, 0xE3, - 0x80, 0x94, 0xE6, 0x89, 0x93, 0xE3, 0x80, 0x95, - 0x49, 0xE3, 0x80, 0x94, 0xE6, 0x95, 0x97, 0xE3, - 0x80, 0x95, 0x49, 0xE3, 0x80, 0x94, 0xE6, 0x9C, - 0xAC, 0xE3, 0x80, 0x95, 0x49, 0xE3, 0x80, 0x94, - 0xE7, 0x82, 0xB9, 0xE3, 0x80, 0x95, 0x49, 0xE3, - 0x80, 0x94, 0xE7, 0x9B, 0x97, 0xE3, 0x80, 0x95, - // Bytes 2880 - 28bf - 0x49, 0xE3, 0x82, 0xA2, 0xE3, 0x83, 0xBC, 0xE3, - 0x83, 0xAB, 0x49, 0xE3, 0x82, 0xA4, 0xE3, 0x83, - 0xB3, 0xE3, 0x83, 0x81, 0x49, 0xE3, 0x82, 0xA6, - 0xE3, 0x82, 0xA9, 0xE3, 0x83, 0xB3, 0x49, 0xE3, - 0x82, 0xAA, 0xE3, 0x83, 0xB3, 0xE3, 0x82, 0xB9, - 0x49, 0xE3, 0x82, 0xAA, 0xE3, 0x83, 0xBC, 0xE3, - 0x83, 0xA0, 0x49, 0xE3, 0x82, 0xAB, 0xE3, 0x82, - 0xA4, 0xE3, 0x83, 0xAA, 0x49, 0xE3, 0x82, 0xB1, - // Bytes 28c0 - 28ff - 0xE3, 0x83, 0xBC, 0xE3, 0x82, 0xB9, 0x49, 0xE3, - 0x82, 0xB3, 0xE3, 0x83, 0xAB, 0xE3, 0x83, 0x8A, - 0x49, 0xE3, 0x82, 0xBB, 0xE3, 0x83, 0xB3, 0xE3, - 0x83, 0x81, 0x49, 0xE3, 0x82, 0xBB, 0xE3, 0x83, - 0xB3, 0xE3, 0x83, 0x88, 0x49, 0xE3, 0x83, 0x86, - 0xE3, 0x82, 0x99, 0xE3, 0x82, 0xB7, 0x49, 0xE3, - 0x83, 0x88, 0xE3, 0x82, 0x99, 0xE3, 0x83, 0xAB, - 0x49, 0xE3, 0x83, 0x8E, 0xE3, 0x83, 0x83, 0xE3, - // Bytes 2900 - 293f - 0x83, 0x88, 0x49, 0xE3, 0x83, 0x8F, 0xE3, 0x82, - 0xA4, 0xE3, 0x83, 0x84, 0x49, 0xE3, 0x83, 0x92, - 0xE3, 0x82, 0x99, 0xE3, 0x83, 0xAB, 0x49, 0xE3, - 0x83, 0x92, 0xE3, 0x82, 0x9A, 0xE3, 0x82, 0xB3, - 0x49, 0xE3, 0x83, 0x95, 0xE3, 0x83, 0xA9, 0xE3, - 0x83, 0xB3, 0x49, 0xE3, 0x83, 0x98, 0xE3, 0x82, - 0x9A, 0xE3, 0x82, 0xBD, 0x49, 0xE3, 0x83, 0x98, - 0xE3, 0x83, 0xAB, 0xE3, 0x83, 0x84, 0x49, 0xE3, - // Bytes 2940 - 297f - 0x83, 0x9B, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0xAB, - 0x49, 0xE3, 0x83, 0x9B, 0xE3, 0x83, 0xBC, 0xE3, - 0x83, 0xB3, 0x49, 0xE3, 0x83, 0x9E, 0xE3, 0x82, - 0xA4, 0xE3, 0x83, 0xAB, 0x49, 0xE3, 0x83, 0x9E, - 0xE3, 0x83, 0x83, 0xE3, 0x83, 0x8F, 0x49, 0xE3, - 0x83, 0x9E, 0xE3, 0x83, 0xAB, 0xE3, 0x82, 0xAF, - 0x49, 0xE3, 0x83, 0xA4, 0xE3, 0x83, 0xBC, 0xE3, - 0x83, 0xAB, 0x49, 0xE3, 0x83, 0xA6, 0xE3, 0x82, - // Bytes 2980 - 29bf - 0xA2, 0xE3, 0x83, 0xB3, 0x49, 0xE3, 0x83, 0xAF, - 0xE3, 0x83, 0x83, 0xE3, 0x83, 0x88, 0x4C, 0xE2, - 0x80, 0xB2, 0xE2, 0x80, 0xB2, 0xE2, 0x80, 0xB2, - 0xE2, 0x80, 0xB2, 0x4C, 0xE2, 0x88, 0xAB, 0xE2, - 0x88, 0xAB, 0xE2, 0x88, 0xAB, 0xE2, 0x88, 0xAB, - 0x4C, 0xE3, 0x82, 0xA2, 0xE3, 0x83, 0xAB, 0xE3, - 0x83, 0x95, 0xE3, 0x82, 0xA1, 0x4C, 0xE3, 0x82, - 0xA8, 0xE3, 0x83, 0xBC, 0xE3, 0x82, 0xAB, 0xE3, - // Bytes 29c0 - 29ff - 0x83, 0xBC, 0x4C, 0xE3, 0x82, 0xAB, 0xE3, 0x82, - 0x99, 0xE3, 0x83, 0xAD, 0xE3, 0x83, 0xB3, 0x4C, - 0xE3, 0x82, 0xAB, 0xE3, 0x82, 0x99, 0xE3, 0x83, - 0xB3, 0xE3, 0x83, 0x9E, 0x4C, 0xE3, 0x82, 0xAB, - 0xE3, 0x83, 0xA9, 0xE3, 0x83, 0x83, 0xE3, 0x83, - 0x88, 0x4C, 0xE3, 0x82, 0xAB, 0xE3, 0x83, 0xAD, - 0xE3, 0x83, 0xAA, 0xE3, 0x83, 0xBC, 0x4C, 0xE3, - 0x82, 0xAD, 0xE3, 0x82, 0x99, 0xE3, 0x83, 0x8B, - // Bytes 2a00 - 2a3f - 0xE3, 0x83, 0xBC, 0x4C, 0xE3, 0x82, 0xAD, 0xE3, - 0x83, 0xA5, 0xE3, 0x83, 0xAA, 0xE3, 0x83, 0xBC, - 0x4C, 0xE3, 0x82, 0xAF, 0xE3, 0x82, 0x99, 0xE3, - 0x83, 0xA9, 0xE3, 0x83, 0xA0, 0x4C, 0xE3, 0x82, - 0xAF, 0xE3, 0x83, 0xAD, 0xE3, 0x83, 0xBC, 0xE3, - 0x83, 0x8D, 0x4C, 0xE3, 0x82, 0xB5, 0xE3, 0x82, - 0xA4, 0xE3, 0x82, 0xAF, 0xE3, 0x83, 0xAB, 0x4C, - 0xE3, 0x82, 0xBF, 0xE3, 0x82, 0x99, 0xE3, 0x83, - // Bytes 2a40 - 2a7f - 0xBC, 0xE3, 0x82, 0xB9, 0x4C, 0xE3, 0x83, 0x8F, - 0xE3, 0x82, 0x9A, 0xE3, 0x83, 0xBC, 0xE3, 0x83, - 0x84, 0x4C, 0xE3, 0x83, 0x92, 0xE3, 0x82, 0x9A, - 0xE3, 0x82, 0xAF, 0xE3, 0x83, 0xAB, 0x4C, 0xE3, - 0x83, 0x95, 0xE3, 0x82, 0xA3, 0xE3, 0x83, 0xBC, - 0xE3, 0x83, 0x88, 0x4C, 0xE3, 0x83, 0x98, 0xE3, - 0x82, 0x99, 0xE3, 0x83, 0xBC, 0xE3, 0x82, 0xBF, - 0x4C, 0xE3, 0x83, 0x98, 0xE3, 0x82, 0x9A, 0xE3, - // Bytes 2a80 - 2abf - 0x83, 0x8B, 0xE3, 0x83, 0x92, 0x4C, 0xE3, 0x83, - 0x98, 0xE3, 0x82, 0x9A, 0xE3, 0x83, 0xB3, 0xE3, - 0x82, 0xB9, 0x4C, 0xE3, 0x83, 0x9B, 0xE3, 0x82, - 0x99, 0xE3, 0x83, 0xAB, 0xE3, 0x83, 0x88, 0x4C, - 0xE3, 0x83, 0x9E, 0xE3, 0x82, 0xA4, 0xE3, 0x82, - 0xAF, 0xE3, 0x83, 0xAD, 0x4C, 0xE3, 0x83, 0x9F, - 0xE3, 0x82, 0xAF, 0xE3, 0x83, 0xAD, 0xE3, 0x83, - 0xB3, 0x4C, 0xE3, 0x83, 0xA1, 0xE3, 0x83, 0xBC, - // Bytes 2ac0 - 2aff - 0xE3, 0x83, 0x88, 0xE3, 0x83, 0xAB, 0x4C, 0xE3, - 0x83, 0xAA, 0xE3, 0x83, 0x83, 0xE3, 0x83, 0x88, - 0xE3, 0x83, 0xAB, 0x4C, 0xE3, 0x83, 0xAB, 0xE3, - 0x83, 0x92, 0xE3, 0x82, 0x9A, 0xE3, 0x83, 0xBC, - 0x4C, 0xE6, 0xA0, 0xAA, 0xE5, 0xBC, 0x8F, 0xE4, - 0xBC, 0x9A, 0xE7, 0xA4, 0xBE, 0x4E, 0x28, 0xE1, - 0x84, 0x8B, 0xE1, 0x85, 0xA9, 0xE1, 0x84, 0x92, - 0xE1, 0x85, 0xAE, 0x29, 0x4F, 0xD8, 0xAC, 0xD9, - // Bytes 2b00 - 2b3f - 0x84, 0x20, 0xD8, 0xAC, 0xD9, 0x84, 0xD8, 0xA7, - 0xD9, 0x84, 0xD9, 0x87, 0x4F, 0xE3, 0x82, 0xA2, - 0xE3, 0x83, 0x8F, 0xE3, 0x82, 0x9A, 0xE3, 0x83, - 0xBC, 0xE3, 0x83, 0x88, 0x4F, 0xE3, 0x82, 0xA2, - 0xE3, 0x83, 0xB3, 0xE3, 0x83, 0x98, 0xE3, 0x82, - 0x9A, 0xE3, 0x82, 0xA2, 0x4F, 0xE3, 0x82, 0xAD, - 0xE3, 0x83, 0xAD, 0xE3, 0x83, 0xAF, 0xE3, 0x83, - 0x83, 0xE3, 0x83, 0x88, 0x4F, 0xE3, 0x82, 0xB5, - // Bytes 2b40 - 2b7f - 0xE3, 0x83, 0xB3, 0xE3, 0x83, 0x81, 0xE3, 0x83, - 0xBC, 0xE3, 0x83, 0xA0, 0x4F, 0xE3, 0x83, 0x8F, - 0xE3, 0x82, 0x99, 0xE3, 0x83, 0xBC, 0xE3, 0x83, - 0xAC, 0xE3, 0x83, 0xAB, 0x4F, 0xE3, 0x83, 0x98, - 0xE3, 0x82, 0xAF, 0xE3, 0x82, 0xBF, 0xE3, 0x83, - 0xBC, 0xE3, 0x83, 0xAB, 0x4F, 0xE3, 0x83, 0x9B, - 0xE3, 0x82, 0x9A, 0xE3, 0x82, 0xA4, 0xE3, 0x83, - 0xB3, 0xE3, 0x83, 0x88, 0x4F, 0xE3, 0x83, 0x9E, - // Bytes 2b80 - 2bbf - 0xE3, 0x83, 0xB3, 0xE3, 0x82, 0xB7, 0xE3, 0x83, - 0xA7, 0xE3, 0x83, 0xB3, 0x4F, 0xE3, 0x83, 0xA1, - 0xE3, 0x82, 0xAB, 0xE3, 0x82, 0x99, 0xE3, 0x83, - 0x88, 0xE3, 0x83, 0xB3, 0x4F, 0xE3, 0x83, 0xAB, - 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0x95, 0xE3, 0x82, - 0x99, 0xE3, 0x83, 0xAB, 0x51, 0x28, 0xE1, 0x84, - 0x8B, 0xE1, 0x85, 0xA9, 0xE1, 0x84, 0x8C, 0xE1, - 0x85, 0xA5, 0xE1, 0x86, 0xAB, 0x29, 0x52, 0xE3, - // Bytes 2bc0 - 2bff - 0x82, 0xAD, 0xE3, 0x82, 0x99, 0xE3, 0x83, 0xAB, - 0xE3, 0x82, 0xBF, 0xE3, 0x82, 0x99, 0xE3, 0x83, - 0xBC, 0x52, 0xE3, 0x82, 0xAD, 0xE3, 0x83, 0xAD, - 0xE3, 0x82, 0xAF, 0xE3, 0x82, 0x99, 0xE3, 0x83, - 0xA9, 0xE3, 0x83, 0xA0, 0x52, 0xE3, 0x82, 0xAD, - 0xE3, 0x83, 0xAD, 0xE3, 0x83, 0xA1, 0xE3, 0x83, - 0xBC, 0xE3, 0x83, 0x88, 0xE3, 0x83, 0xAB, 0x52, - 0xE3, 0x82, 0xAF, 0xE3, 0x82, 0x99, 0xE3, 0x83, - // Bytes 2c00 - 2c3f - 0xA9, 0xE3, 0x83, 0xA0, 0xE3, 0x83, 0x88, 0xE3, - 0x83, 0xB3, 0x52, 0xE3, 0x82, 0xAF, 0xE3, 0x83, - 0xAB, 0xE3, 0x82, 0xBB, 0xE3, 0x82, 0x99, 0xE3, - 0x82, 0xA4, 0xE3, 0x83, 0xAD, 0x52, 0xE3, 0x83, - 0x8F, 0xE3, 0x82, 0x9A, 0xE3, 0x83, 0xBC, 0xE3, - 0x82, 0xBB, 0xE3, 0x83, 0xB3, 0xE3, 0x83, 0x88, - 0x52, 0xE3, 0x83, 0x92, 0xE3, 0x82, 0x9A, 0xE3, - 0x82, 0xA2, 0xE3, 0x82, 0xB9, 0xE3, 0x83, 0x88, - // Bytes 2c40 - 2c7f - 0xE3, 0x83, 0xAB, 0x52, 0xE3, 0x83, 0x95, 0xE3, - 0x82, 0x99, 0xE3, 0x83, 0x83, 0xE3, 0x82, 0xB7, - 0xE3, 0x82, 0xA7, 0xE3, 0x83, 0xAB, 0x52, 0xE3, - 0x83, 0x9F, 0xE3, 0x83, 0xAA, 0xE3, 0x83, 0x8F, - 0xE3, 0x82, 0x99, 0xE3, 0x83, 0xBC, 0xE3, 0x83, - 0xAB, 0x52, 0xE3, 0x83, 0xAC, 0xE3, 0x83, 0xB3, - 0xE3, 0x83, 0x88, 0xE3, 0x82, 0xB1, 0xE3, 0x82, - 0x99, 0xE3, 0x83, 0xB3, 0x61, 0xD8, 0xB5, 0xD9, - // Bytes 2c80 - 2cbf - 0x84, 0xD9, 0x89, 0x20, 0xD8, 0xA7, 0xD9, 0x84, - 0xD9, 0x84, 0xD9, 0x87, 0x20, 0xD8, 0xB9, 0xD9, - 0x84, 0xD9, 0x8A, 0xD9, 0x87, 0x20, 0xD9, 0x88, - 0xD8, 0xB3, 0xD9, 0x84, 0xD9, 0x85, 0x06, 0xE0, - 0xA7, 0x87, 0xE0, 0xA6, 0xBE, 0x01, 0x06, 0xE0, - 0xA7, 0x87, 0xE0, 0xA7, 0x97, 0x01, 0x06, 0xE0, - 0xAD, 0x87, 0xE0, 0xAC, 0xBE, 0x01, 0x06, 0xE0, - 0xAD, 0x87, 0xE0, 0xAD, 0x96, 0x01, 0x06, 0xE0, - // Bytes 2cc0 - 2cff - 0xAD, 0x87, 0xE0, 0xAD, 0x97, 0x01, 0x06, 0xE0, - 0xAE, 0x92, 0xE0, 0xAF, 0x97, 0x01, 0x06, 0xE0, - 0xAF, 0x86, 0xE0, 0xAE, 0xBE, 0x01, 0x06, 0xE0, - 0xAF, 0x86, 0xE0, 0xAF, 0x97, 0x01, 0x06, 0xE0, - 0xAF, 0x87, 0xE0, 0xAE, 0xBE, 0x01, 0x06, 0xE0, - 0xB2, 0xBF, 0xE0, 0xB3, 0x95, 0x01, 0x06, 0xE0, - 0xB3, 0x86, 0xE0, 0xB3, 0x95, 0x01, 0x06, 0xE0, - 0xB3, 0x86, 0xE0, 0xB3, 0x96, 0x01, 0x06, 0xE0, - // Bytes 2d00 - 2d3f - 0xB5, 0x86, 0xE0, 0xB4, 0xBE, 0x01, 0x06, 0xE0, - 0xB5, 0x86, 0xE0, 0xB5, 0x97, 0x01, 0x06, 0xE0, - 0xB5, 0x87, 0xE0, 0xB4, 0xBE, 0x01, 0x06, 0xE0, - 0xB7, 0x99, 0xE0, 0xB7, 0x9F, 0x01, 0x06, 0xE1, - 0x80, 0xA5, 0xE1, 0x80, 0xAE, 0x01, 0x06, 0xE1, - 0xAC, 0x85, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1, - 0xAC, 0x87, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1, - 0xAC, 0x89, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1, - // Bytes 2d40 - 2d7f - 0xAC, 0x8B, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1, - 0xAC, 0x8D, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1, - 0xAC, 0x91, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1, - 0xAC, 0xBA, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1, - 0xAC, 0xBC, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1, - 0xAC, 0xBE, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1, - 0xAC, 0xBF, 0xE1, 0xAC, 0xB5, 0x01, 0x06, 0xE1, - 0xAD, 0x82, 0xE1, 0xAC, 0xB5, 0x01, 0x08, 0xF0, - // Bytes 2d80 - 2dbf - 0x91, 0x84, 0xB1, 0xF0, 0x91, 0x84, 0xA7, 0x01, - 0x08, 0xF0, 0x91, 0x84, 0xB2, 0xF0, 0x91, 0x84, - 0xA7, 0x01, 0x08, 0xF0, 0x91, 0x8D, 0x87, 0xF0, - 0x91, 0x8C, 0xBE, 0x01, 0x08, 0xF0, 0x91, 0x8D, - 0x87, 0xF0, 0x91, 0x8D, 0x97, 0x01, 0x08, 0xF0, - 0x91, 0x92, 0xB9, 0xF0, 0x91, 0x92, 0xB0, 0x01, - 0x08, 0xF0, 0x91, 0x92, 0xB9, 0xF0, 0x91, 0x92, - 0xBA, 0x01, 0x08, 0xF0, 0x91, 0x92, 0xB9, 0xF0, - // Bytes 2dc0 - 2dff - 0x91, 0x92, 0xBD, 0x01, 0x08, 0xF0, 0x91, 0x96, - 0xB8, 0xF0, 0x91, 0x96, 0xAF, 0x01, 0x08, 0xF0, - 0x91, 0x96, 0xB9, 0xF0, 0x91, 0x96, 0xAF, 0x01, - 0x09, 0xE0, 0xB3, 0x86, 0xE0, 0xB3, 0x82, 0xE0, - 0xB3, 0x95, 0x02, 0x09, 0xE0, 0xB7, 0x99, 0xE0, - 0xB7, 0x8F, 0xE0, 0xB7, 0x8A, 0x12, 0x44, 0x44, - 0x5A, 0xCC, 0x8C, 0xC9, 0x44, 0x44, 0x7A, 0xCC, - 0x8C, 0xC9, 0x44, 0x64, 0x7A, 0xCC, 0x8C, 0xC9, - // Bytes 2e00 - 2e3f - 0x46, 0xD9, 0x84, 0xD8, 0xA7, 0xD9, 0x93, 0xC9, - 0x46, 0xD9, 0x84, 0xD8, 0xA7, 0xD9, 0x94, 0xC9, - 0x46, 0xD9, 0x84, 0xD8, 0xA7, 0xD9, 0x95, 0xB5, - 0x46, 0xE1, 0x84, 0x80, 0xE1, 0x85, 0xA1, 0x01, - 0x46, 0xE1, 0x84, 0x82, 0xE1, 0x85, 0xA1, 0x01, - 0x46, 0xE1, 0x84, 0x83, 0xE1, 0x85, 0xA1, 0x01, - 0x46, 0xE1, 0x84, 0x85, 0xE1, 0x85, 0xA1, 0x01, - 0x46, 0xE1, 0x84, 0x86, 0xE1, 0x85, 0xA1, 0x01, - // Bytes 2e40 - 2e7f - 0x46, 0xE1, 0x84, 0x87, 0xE1, 0x85, 0xA1, 0x01, - 0x46, 0xE1, 0x84, 0x89, 0xE1, 0x85, 0xA1, 0x01, - 0x46, 0xE1, 0x84, 0x8B, 0xE1, 0x85, 0xA1, 0x01, - 0x46, 0xE1, 0x84, 0x8B, 0xE1, 0x85, 0xAE, 0x01, - 0x46, 0xE1, 0x84, 0x8C, 0xE1, 0x85, 0xA1, 0x01, - 0x46, 0xE1, 0x84, 0x8E, 0xE1, 0x85, 0xA1, 0x01, - 0x46, 0xE1, 0x84, 0x8F, 0xE1, 0x85, 0xA1, 0x01, - 0x46, 0xE1, 0x84, 0x90, 0xE1, 0x85, 0xA1, 0x01, - // Bytes 2e80 - 2ebf - 0x46, 0xE1, 0x84, 0x91, 0xE1, 0x85, 0xA1, 0x01, - 0x46, 0xE1, 0x84, 0x92, 0xE1, 0x85, 0xA1, 0x01, - 0x49, 0xE3, 0x83, 0xA1, 0xE3, 0x82, 0xAB, 0xE3, - 0x82, 0x99, 0x0D, 0x4C, 0xE1, 0x84, 0x8C, 0xE1, - 0x85, 0xAE, 0xE1, 0x84, 0x8B, 0xE1, 0x85, 0xB4, - 0x01, 0x4C, 0xE3, 0x82, 0xAD, 0xE3, 0x82, 0x99, - 0xE3, 0x82, 0xAB, 0xE3, 0x82, 0x99, 0x0D, 0x4C, - 0xE3, 0x82, 0xB3, 0xE3, 0x83, 0xBC, 0xE3, 0x83, - // Bytes 2ec0 - 2eff - 0x9B, 0xE3, 0x82, 0x9A, 0x0D, 0x4C, 0xE3, 0x83, - 0xA4, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0x88, 0xE3, - 0x82, 0x99, 0x0D, 0x4F, 0xE1, 0x84, 0x8E, 0xE1, - 0x85, 0xA1, 0xE1, 0x86, 0xB7, 0xE1, 0x84, 0x80, - 0xE1, 0x85, 0xA9, 0x01, 0x4F, 0xE3, 0x82, 0xA4, - 0xE3, 0x83, 0x8B, 0xE3, 0x83, 0xB3, 0xE3, 0x82, - 0xAF, 0xE3, 0x82, 0x99, 0x0D, 0x4F, 0xE3, 0x82, - 0xB7, 0xE3, 0x83, 0xAA, 0xE3, 0x83, 0xB3, 0xE3, - // Bytes 2f00 - 2f3f - 0x82, 0xAF, 0xE3, 0x82, 0x99, 0x0D, 0x4F, 0xE3, - 0x83, 0x98, 0xE3, 0x82, 0x9A, 0xE3, 0x83, 0xBC, - 0xE3, 0x82, 0xB7, 0xE3, 0x82, 0x99, 0x0D, 0x4F, - 0xE3, 0x83, 0x9B, 0xE3, 0x82, 0x9A, 0xE3, 0x83, - 0xB3, 0xE3, 0x83, 0x88, 0xE3, 0x82, 0x99, 0x0D, - 0x52, 0xE3, 0x82, 0xA8, 0xE3, 0x82, 0xB9, 0xE3, - 0x82, 0xAF, 0xE3, 0x83, 0xBC, 0xE3, 0x83, 0x88, - 0xE3, 0x82, 0x99, 0x0D, 0x52, 0xE3, 0x83, 0x95, - // Bytes 2f40 - 2f7f - 0xE3, 0x82, 0xA1, 0xE3, 0x83, 0xA9, 0xE3, 0x83, - 0x83, 0xE3, 0x83, 0x88, 0xE3, 0x82, 0x99, 0x0D, - 0x86, 0xE0, 0xB3, 0x86, 0xE0, 0xB3, 0x82, 0x01, - 0x86, 0xE0, 0xB7, 0x99, 0xE0, 0xB7, 0x8F, 0x01, - 0x03, 0x3C, 0xCC, 0xB8, 0x05, 0x03, 0x3D, 0xCC, - 0xB8, 0x05, 0x03, 0x3E, 0xCC, 0xB8, 0x05, 0x03, - 0x41, 0xCC, 0x80, 0xC9, 0x03, 0x41, 0xCC, 0x81, - 0xC9, 0x03, 0x41, 0xCC, 0x83, 0xC9, 0x03, 0x41, - // Bytes 2f80 - 2fbf - 0xCC, 0x84, 0xC9, 0x03, 0x41, 0xCC, 0x89, 0xC9, - 0x03, 0x41, 0xCC, 0x8C, 0xC9, 0x03, 0x41, 0xCC, - 0x8F, 0xC9, 0x03, 0x41, 0xCC, 0x91, 0xC9, 0x03, - 0x41, 0xCC, 0xA5, 0xB5, 0x03, 0x41, 0xCC, 0xA8, - 0xA5, 0x03, 0x42, 0xCC, 0x87, 0xC9, 0x03, 0x42, - 0xCC, 0xA3, 0xB5, 0x03, 0x42, 0xCC, 0xB1, 0xB5, - 0x03, 0x43, 0xCC, 0x81, 0xC9, 0x03, 0x43, 0xCC, - 0x82, 0xC9, 0x03, 0x43, 0xCC, 0x87, 0xC9, 0x03, - // Bytes 2fc0 - 2fff - 0x43, 0xCC, 0x8C, 0xC9, 0x03, 0x44, 0xCC, 0x87, - 0xC9, 0x03, 0x44, 0xCC, 0x8C, 0xC9, 0x03, 0x44, - 0xCC, 0xA3, 0xB5, 0x03, 0x44, 0xCC, 0xA7, 0xA5, - 0x03, 0x44, 0xCC, 0xAD, 0xB5, 0x03, 0x44, 0xCC, - 0xB1, 0xB5, 0x03, 0x45, 0xCC, 0x80, 0xC9, 0x03, - 0x45, 0xCC, 0x81, 0xC9, 0x03, 0x45, 0xCC, 0x83, - 0xC9, 0x03, 0x45, 0xCC, 0x86, 0xC9, 0x03, 0x45, - 0xCC, 0x87, 0xC9, 0x03, 0x45, 0xCC, 0x88, 0xC9, - // Bytes 3000 - 303f - 0x03, 0x45, 0xCC, 0x89, 0xC9, 0x03, 0x45, 0xCC, - 0x8C, 0xC9, 0x03, 0x45, 0xCC, 0x8F, 0xC9, 0x03, - 0x45, 0xCC, 0x91, 0xC9, 0x03, 0x45, 0xCC, 0xA8, - 0xA5, 0x03, 0x45, 0xCC, 0xAD, 0xB5, 0x03, 0x45, - 0xCC, 0xB0, 0xB5, 0x03, 0x46, 0xCC, 0x87, 0xC9, - 0x03, 0x47, 0xCC, 0x81, 0xC9, 0x03, 0x47, 0xCC, - 0x82, 0xC9, 0x03, 0x47, 0xCC, 0x84, 0xC9, 0x03, - 0x47, 0xCC, 0x86, 0xC9, 0x03, 0x47, 0xCC, 0x87, - // Bytes 3040 - 307f - 0xC9, 0x03, 0x47, 0xCC, 0x8C, 0xC9, 0x03, 0x47, - 0xCC, 0xA7, 0xA5, 0x03, 0x48, 0xCC, 0x82, 0xC9, - 0x03, 0x48, 0xCC, 0x87, 0xC9, 0x03, 0x48, 0xCC, - 0x88, 0xC9, 0x03, 0x48, 0xCC, 0x8C, 0xC9, 0x03, - 0x48, 0xCC, 0xA3, 0xB5, 0x03, 0x48, 0xCC, 0xA7, - 0xA5, 0x03, 0x48, 0xCC, 0xAE, 0xB5, 0x03, 0x49, - 0xCC, 0x80, 0xC9, 0x03, 0x49, 0xCC, 0x81, 0xC9, - 0x03, 0x49, 0xCC, 0x82, 0xC9, 0x03, 0x49, 0xCC, - // Bytes 3080 - 30bf - 0x83, 0xC9, 0x03, 0x49, 0xCC, 0x84, 0xC9, 0x03, - 0x49, 0xCC, 0x86, 0xC9, 0x03, 0x49, 0xCC, 0x87, - 0xC9, 0x03, 0x49, 0xCC, 0x89, 0xC9, 0x03, 0x49, - 0xCC, 0x8C, 0xC9, 0x03, 0x49, 0xCC, 0x8F, 0xC9, - 0x03, 0x49, 0xCC, 0x91, 0xC9, 0x03, 0x49, 0xCC, - 0xA3, 0xB5, 0x03, 0x49, 0xCC, 0xA8, 0xA5, 0x03, - 0x49, 0xCC, 0xB0, 0xB5, 0x03, 0x4A, 0xCC, 0x82, - 0xC9, 0x03, 0x4B, 0xCC, 0x81, 0xC9, 0x03, 0x4B, - // Bytes 30c0 - 30ff - 0xCC, 0x8C, 0xC9, 0x03, 0x4B, 0xCC, 0xA3, 0xB5, - 0x03, 0x4B, 0xCC, 0xA7, 0xA5, 0x03, 0x4B, 0xCC, - 0xB1, 0xB5, 0x03, 0x4C, 0xCC, 0x81, 0xC9, 0x03, - 0x4C, 0xCC, 0x8C, 0xC9, 0x03, 0x4C, 0xCC, 0xA7, - 0xA5, 0x03, 0x4C, 0xCC, 0xAD, 0xB5, 0x03, 0x4C, - 0xCC, 0xB1, 0xB5, 0x03, 0x4D, 0xCC, 0x81, 0xC9, - 0x03, 0x4D, 0xCC, 0x87, 0xC9, 0x03, 0x4D, 0xCC, - 0xA3, 0xB5, 0x03, 0x4E, 0xCC, 0x80, 0xC9, 0x03, - // Bytes 3100 - 313f - 0x4E, 0xCC, 0x81, 0xC9, 0x03, 0x4E, 0xCC, 0x83, - 0xC9, 0x03, 0x4E, 0xCC, 0x87, 0xC9, 0x03, 0x4E, - 0xCC, 0x8C, 0xC9, 0x03, 0x4E, 0xCC, 0xA3, 0xB5, - 0x03, 0x4E, 0xCC, 0xA7, 0xA5, 0x03, 0x4E, 0xCC, - 0xAD, 0xB5, 0x03, 0x4E, 0xCC, 0xB1, 0xB5, 0x03, - 0x4F, 0xCC, 0x80, 0xC9, 0x03, 0x4F, 0xCC, 0x81, - 0xC9, 0x03, 0x4F, 0xCC, 0x86, 0xC9, 0x03, 0x4F, - 0xCC, 0x89, 0xC9, 0x03, 0x4F, 0xCC, 0x8B, 0xC9, - // Bytes 3140 - 317f - 0x03, 0x4F, 0xCC, 0x8C, 0xC9, 0x03, 0x4F, 0xCC, - 0x8F, 0xC9, 0x03, 0x4F, 0xCC, 0x91, 0xC9, 0x03, - 0x50, 0xCC, 0x81, 0xC9, 0x03, 0x50, 0xCC, 0x87, - 0xC9, 0x03, 0x52, 0xCC, 0x81, 0xC9, 0x03, 0x52, - 0xCC, 0x87, 0xC9, 0x03, 0x52, 0xCC, 0x8C, 0xC9, - 0x03, 0x52, 0xCC, 0x8F, 0xC9, 0x03, 0x52, 0xCC, - 0x91, 0xC9, 0x03, 0x52, 0xCC, 0xA7, 0xA5, 0x03, - 0x52, 0xCC, 0xB1, 0xB5, 0x03, 0x53, 0xCC, 0x82, - // Bytes 3180 - 31bf - 0xC9, 0x03, 0x53, 0xCC, 0x87, 0xC9, 0x03, 0x53, - 0xCC, 0xA6, 0xB5, 0x03, 0x53, 0xCC, 0xA7, 0xA5, - 0x03, 0x54, 0xCC, 0x87, 0xC9, 0x03, 0x54, 0xCC, - 0x8C, 0xC9, 0x03, 0x54, 0xCC, 0xA3, 0xB5, 0x03, - 0x54, 0xCC, 0xA6, 0xB5, 0x03, 0x54, 0xCC, 0xA7, - 0xA5, 0x03, 0x54, 0xCC, 0xAD, 0xB5, 0x03, 0x54, - 0xCC, 0xB1, 0xB5, 0x03, 0x55, 0xCC, 0x80, 0xC9, - 0x03, 0x55, 0xCC, 0x81, 0xC9, 0x03, 0x55, 0xCC, - // Bytes 31c0 - 31ff - 0x82, 0xC9, 0x03, 0x55, 0xCC, 0x86, 0xC9, 0x03, - 0x55, 0xCC, 0x89, 0xC9, 0x03, 0x55, 0xCC, 0x8A, - 0xC9, 0x03, 0x55, 0xCC, 0x8B, 0xC9, 0x03, 0x55, - 0xCC, 0x8C, 0xC9, 0x03, 0x55, 0xCC, 0x8F, 0xC9, - 0x03, 0x55, 0xCC, 0x91, 0xC9, 0x03, 0x55, 0xCC, - 0xA3, 0xB5, 0x03, 0x55, 0xCC, 0xA4, 0xB5, 0x03, - 0x55, 0xCC, 0xA8, 0xA5, 0x03, 0x55, 0xCC, 0xAD, - 0xB5, 0x03, 0x55, 0xCC, 0xB0, 0xB5, 0x03, 0x56, - // Bytes 3200 - 323f - 0xCC, 0x83, 0xC9, 0x03, 0x56, 0xCC, 0xA3, 0xB5, - 0x03, 0x57, 0xCC, 0x80, 0xC9, 0x03, 0x57, 0xCC, - 0x81, 0xC9, 0x03, 0x57, 0xCC, 0x82, 0xC9, 0x03, - 0x57, 0xCC, 0x87, 0xC9, 0x03, 0x57, 0xCC, 0x88, - 0xC9, 0x03, 0x57, 0xCC, 0xA3, 0xB5, 0x03, 0x58, - 0xCC, 0x87, 0xC9, 0x03, 0x58, 0xCC, 0x88, 0xC9, - 0x03, 0x59, 0xCC, 0x80, 0xC9, 0x03, 0x59, 0xCC, - 0x81, 0xC9, 0x03, 0x59, 0xCC, 0x82, 0xC9, 0x03, - // Bytes 3240 - 327f - 0x59, 0xCC, 0x83, 0xC9, 0x03, 0x59, 0xCC, 0x84, - 0xC9, 0x03, 0x59, 0xCC, 0x87, 0xC9, 0x03, 0x59, - 0xCC, 0x88, 0xC9, 0x03, 0x59, 0xCC, 0x89, 0xC9, - 0x03, 0x59, 0xCC, 0xA3, 0xB5, 0x03, 0x5A, 0xCC, - 0x81, 0xC9, 0x03, 0x5A, 0xCC, 0x82, 0xC9, 0x03, - 0x5A, 0xCC, 0x87, 0xC9, 0x03, 0x5A, 0xCC, 0x8C, - 0xC9, 0x03, 0x5A, 0xCC, 0xA3, 0xB5, 0x03, 0x5A, - 0xCC, 0xB1, 0xB5, 0x03, 0x61, 0xCC, 0x80, 0xC9, - // Bytes 3280 - 32bf - 0x03, 0x61, 0xCC, 0x81, 0xC9, 0x03, 0x61, 0xCC, - 0x83, 0xC9, 0x03, 0x61, 0xCC, 0x84, 0xC9, 0x03, - 0x61, 0xCC, 0x89, 0xC9, 0x03, 0x61, 0xCC, 0x8C, - 0xC9, 0x03, 0x61, 0xCC, 0x8F, 0xC9, 0x03, 0x61, - 0xCC, 0x91, 0xC9, 0x03, 0x61, 0xCC, 0xA5, 0xB5, - 0x03, 0x61, 0xCC, 0xA8, 0xA5, 0x03, 0x62, 0xCC, - 0x87, 0xC9, 0x03, 0x62, 0xCC, 0xA3, 0xB5, 0x03, - 0x62, 0xCC, 0xB1, 0xB5, 0x03, 0x63, 0xCC, 0x81, - // Bytes 32c0 - 32ff - 0xC9, 0x03, 0x63, 0xCC, 0x82, 0xC9, 0x03, 0x63, - 0xCC, 0x87, 0xC9, 0x03, 0x63, 0xCC, 0x8C, 0xC9, - 0x03, 0x64, 0xCC, 0x87, 0xC9, 0x03, 0x64, 0xCC, - 0x8C, 0xC9, 0x03, 0x64, 0xCC, 0xA3, 0xB5, 0x03, - 0x64, 0xCC, 0xA7, 0xA5, 0x03, 0x64, 0xCC, 0xAD, - 0xB5, 0x03, 0x64, 0xCC, 0xB1, 0xB5, 0x03, 0x65, - 0xCC, 0x80, 0xC9, 0x03, 0x65, 0xCC, 0x81, 0xC9, - 0x03, 0x65, 0xCC, 0x83, 0xC9, 0x03, 0x65, 0xCC, - // Bytes 3300 - 333f - 0x86, 0xC9, 0x03, 0x65, 0xCC, 0x87, 0xC9, 0x03, - 0x65, 0xCC, 0x88, 0xC9, 0x03, 0x65, 0xCC, 0x89, - 0xC9, 0x03, 0x65, 0xCC, 0x8C, 0xC9, 0x03, 0x65, - 0xCC, 0x8F, 0xC9, 0x03, 0x65, 0xCC, 0x91, 0xC9, - 0x03, 0x65, 0xCC, 0xA8, 0xA5, 0x03, 0x65, 0xCC, - 0xAD, 0xB5, 0x03, 0x65, 0xCC, 0xB0, 0xB5, 0x03, - 0x66, 0xCC, 0x87, 0xC9, 0x03, 0x67, 0xCC, 0x81, - 0xC9, 0x03, 0x67, 0xCC, 0x82, 0xC9, 0x03, 0x67, - // Bytes 3340 - 337f - 0xCC, 0x84, 0xC9, 0x03, 0x67, 0xCC, 0x86, 0xC9, - 0x03, 0x67, 0xCC, 0x87, 0xC9, 0x03, 0x67, 0xCC, - 0x8C, 0xC9, 0x03, 0x67, 0xCC, 0xA7, 0xA5, 0x03, - 0x68, 0xCC, 0x82, 0xC9, 0x03, 0x68, 0xCC, 0x87, - 0xC9, 0x03, 0x68, 0xCC, 0x88, 0xC9, 0x03, 0x68, - 0xCC, 0x8C, 0xC9, 0x03, 0x68, 0xCC, 0xA3, 0xB5, - 0x03, 0x68, 0xCC, 0xA7, 0xA5, 0x03, 0x68, 0xCC, - 0xAE, 0xB5, 0x03, 0x68, 0xCC, 0xB1, 0xB5, 0x03, - // Bytes 3380 - 33bf - 0x69, 0xCC, 0x80, 0xC9, 0x03, 0x69, 0xCC, 0x81, - 0xC9, 0x03, 0x69, 0xCC, 0x82, 0xC9, 0x03, 0x69, - 0xCC, 0x83, 0xC9, 0x03, 0x69, 0xCC, 0x84, 0xC9, - 0x03, 0x69, 0xCC, 0x86, 0xC9, 0x03, 0x69, 0xCC, - 0x89, 0xC9, 0x03, 0x69, 0xCC, 0x8C, 0xC9, 0x03, - 0x69, 0xCC, 0x8F, 0xC9, 0x03, 0x69, 0xCC, 0x91, - 0xC9, 0x03, 0x69, 0xCC, 0xA3, 0xB5, 0x03, 0x69, - 0xCC, 0xA8, 0xA5, 0x03, 0x69, 0xCC, 0xB0, 0xB5, - // Bytes 33c0 - 33ff - 0x03, 0x6A, 0xCC, 0x82, 0xC9, 0x03, 0x6A, 0xCC, - 0x8C, 0xC9, 0x03, 0x6B, 0xCC, 0x81, 0xC9, 0x03, - 0x6B, 0xCC, 0x8C, 0xC9, 0x03, 0x6B, 0xCC, 0xA3, - 0xB5, 0x03, 0x6B, 0xCC, 0xA7, 0xA5, 0x03, 0x6B, - 0xCC, 0xB1, 0xB5, 0x03, 0x6C, 0xCC, 0x81, 0xC9, - 0x03, 0x6C, 0xCC, 0x8C, 0xC9, 0x03, 0x6C, 0xCC, - 0xA7, 0xA5, 0x03, 0x6C, 0xCC, 0xAD, 0xB5, 0x03, - 0x6C, 0xCC, 0xB1, 0xB5, 0x03, 0x6D, 0xCC, 0x81, - // Bytes 3400 - 343f - 0xC9, 0x03, 0x6D, 0xCC, 0x87, 0xC9, 0x03, 0x6D, - 0xCC, 0xA3, 0xB5, 0x03, 0x6E, 0xCC, 0x80, 0xC9, - 0x03, 0x6E, 0xCC, 0x81, 0xC9, 0x03, 0x6E, 0xCC, - 0x83, 0xC9, 0x03, 0x6E, 0xCC, 0x87, 0xC9, 0x03, - 0x6E, 0xCC, 0x8C, 0xC9, 0x03, 0x6E, 0xCC, 0xA3, - 0xB5, 0x03, 0x6E, 0xCC, 0xA7, 0xA5, 0x03, 0x6E, - 0xCC, 0xAD, 0xB5, 0x03, 0x6E, 0xCC, 0xB1, 0xB5, - 0x03, 0x6F, 0xCC, 0x80, 0xC9, 0x03, 0x6F, 0xCC, - // Bytes 3440 - 347f - 0x81, 0xC9, 0x03, 0x6F, 0xCC, 0x86, 0xC9, 0x03, - 0x6F, 0xCC, 0x89, 0xC9, 0x03, 0x6F, 0xCC, 0x8B, - 0xC9, 0x03, 0x6F, 0xCC, 0x8C, 0xC9, 0x03, 0x6F, - 0xCC, 0x8F, 0xC9, 0x03, 0x6F, 0xCC, 0x91, 0xC9, - 0x03, 0x70, 0xCC, 0x81, 0xC9, 0x03, 0x70, 0xCC, - 0x87, 0xC9, 0x03, 0x72, 0xCC, 0x81, 0xC9, 0x03, - 0x72, 0xCC, 0x87, 0xC9, 0x03, 0x72, 0xCC, 0x8C, - 0xC9, 0x03, 0x72, 0xCC, 0x8F, 0xC9, 0x03, 0x72, - // Bytes 3480 - 34bf - 0xCC, 0x91, 0xC9, 0x03, 0x72, 0xCC, 0xA7, 0xA5, - 0x03, 0x72, 0xCC, 0xB1, 0xB5, 0x03, 0x73, 0xCC, - 0x82, 0xC9, 0x03, 0x73, 0xCC, 0x87, 0xC9, 0x03, - 0x73, 0xCC, 0xA6, 0xB5, 0x03, 0x73, 0xCC, 0xA7, - 0xA5, 0x03, 0x74, 0xCC, 0x87, 0xC9, 0x03, 0x74, - 0xCC, 0x88, 0xC9, 0x03, 0x74, 0xCC, 0x8C, 0xC9, - 0x03, 0x74, 0xCC, 0xA3, 0xB5, 0x03, 0x74, 0xCC, - 0xA6, 0xB5, 0x03, 0x74, 0xCC, 0xA7, 0xA5, 0x03, - // Bytes 34c0 - 34ff - 0x74, 0xCC, 0xAD, 0xB5, 0x03, 0x74, 0xCC, 0xB1, - 0xB5, 0x03, 0x75, 0xCC, 0x80, 0xC9, 0x03, 0x75, - 0xCC, 0x81, 0xC9, 0x03, 0x75, 0xCC, 0x82, 0xC9, - 0x03, 0x75, 0xCC, 0x86, 0xC9, 0x03, 0x75, 0xCC, - 0x89, 0xC9, 0x03, 0x75, 0xCC, 0x8A, 0xC9, 0x03, - 0x75, 0xCC, 0x8B, 0xC9, 0x03, 0x75, 0xCC, 0x8C, - 0xC9, 0x03, 0x75, 0xCC, 0x8F, 0xC9, 0x03, 0x75, - 0xCC, 0x91, 0xC9, 0x03, 0x75, 0xCC, 0xA3, 0xB5, - // Bytes 3500 - 353f - 0x03, 0x75, 0xCC, 0xA4, 0xB5, 0x03, 0x75, 0xCC, - 0xA8, 0xA5, 0x03, 0x75, 0xCC, 0xAD, 0xB5, 0x03, - 0x75, 0xCC, 0xB0, 0xB5, 0x03, 0x76, 0xCC, 0x83, - 0xC9, 0x03, 0x76, 0xCC, 0xA3, 0xB5, 0x03, 0x77, - 0xCC, 0x80, 0xC9, 0x03, 0x77, 0xCC, 0x81, 0xC9, - 0x03, 0x77, 0xCC, 0x82, 0xC9, 0x03, 0x77, 0xCC, - 0x87, 0xC9, 0x03, 0x77, 0xCC, 0x88, 0xC9, 0x03, - 0x77, 0xCC, 0x8A, 0xC9, 0x03, 0x77, 0xCC, 0xA3, - // Bytes 3540 - 357f - 0xB5, 0x03, 0x78, 0xCC, 0x87, 0xC9, 0x03, 0x78, - 0xCC, 0x88, 0xC9, 0x03, 0x79, 0xCC, 0x80, 0xC9, - 0x03, 0x79, 0xCC, 0x81, 0xC9, 0x03, 0x79, 0xCC, - 0x82, 0xC9, 0x03, 0x79, 0xCC, 0x83, 0xC9, 0x03, - 0x79, 0xCC, 0x84, 0xC9, 0x03, 0x79, 0xCC, 0x87, - 0xC9, 0x03, 0x79, 0xCC, 0x88, 0xC9, 0x03, 0x79, - 0xCC, 0x89, 0xC9, 0x03, 0x79, 0xCC, 0x8A, 0xC9, - 0x03, 0x79, 0xCC, 0xA3, 0xB5, 0x03, 0x7A, 0xCC, - // Bytes 3580 - 35bf - 0x81, 0xC9, 0x03, 0x7A, 0xCC, 0x82, 0xC9, 0x03, - 0x7A, 0xCC, 0x87, 0xC9, 0x03, 0x7A, 0xCC, 0x8C, - 0xC9, 0x03, 0x7A, 0xCC, 0xA3, 0xB5, 0x03, 0x7A, - 0xCC, 0xB1, 0xB5, 0x04, 0xC2, 0xA8, 0xCC, 0x80, - 0xCA, 0x04, 0xC2, 0xA8, 0xCC, 0x81, 0xCA, 0x04, - 0xC2, 0xA8, 0xCD, 0x82, 0xCA, 0x04, 0xC3, 0x86, - 0xCC, 0x81, 0xC9, 0x04, 0xC3, 0x86, 0xCC, 0x84, - 0xC9, 0x04, 0xC3, 0x98, 0xCC, 0x81, 0xC9, 0x04, - // Bytes 35c0 - 35ff - 0xC3, 0xA6, 0xCC, 0x81, 0xC9, 0x04, 0xC3, 0xA6, - 0xCC, 0x84, 0xC9, 0x04, 0xC3, 0xB8, 0xCC, 0x81, - 0xC9, 0x04, 0xC5, 0xBF, 0xCC, 0x87, 0xC9, 0x04, - 0xC6, 0xB7, 0xCC, 0x8C, 0xC9, 0x04, 0xCA, 0x92, - 0xCC, 0x8C, 0xC9, 0x04, 0xCE, 0x91, 0xCC, 0x80, - 0xC9, 0x04, 0xCE, 0x91, 0xCC, 0x81, 0xC9, 0x04, - 0xCE, 0x91, 0xCC, 0x84, 0xC9, 0x04, 0xCE, 0x91, - 0xCC, 0x86, 0xC9, 0x04, 0xCE, 0x91, 0xCD, 0x85, - // Bytes 3600 - 363f - 0xD9, 0x04, 0xCE, 0x95, 0xCC, 0x80, 0xC9, 0x04, - 0xCE, 0x95, 0xCC, 0x81, 0xC9, 0x04, 0xCE, 0x97, - 0xCC, 0x80, 0xC9, 0x04, 0xCE, 0x97, 0xCC, 0x81, - 0xC9, 0x04, 0xCE, 0x97, 0xCD, 0x85, 0xD9, 0x04, - 0xCE, 0x99, 0xCC, 0x80, 0xC9, 0x04, 0xCE, 0x99, - 0xCC, 0x81, 0xC9, 0x04, 0xCE, 0x99, 0xCC, 0x84, - 0xC9, 0x04, 0xCE, 0x99, 0xCC, 0x86, 0xC9, 0x04, - 0xCE, 0x99, 0xCC, 0x88, 0xC9, 0x04, 0xCE, 0x9F, - // Bytes 3640 - 367f - 0xCC, 0x80, 0xC9, 0x04, 0xCE, 0x9F, 0xCC, 0x81, - 0xC9, 0x04, 0xCE, 0xA1, 0xCC, 0x94, 0xC9, 0x04, - 0xCE, 0xA5, 0xCC, 0x80, 0xC9, 0x04, 0xCE, 0xA5, - 0xCC, 0x81, 0xC9, 0x04, 0xCE, 0xA5, 0xCC, 0x84, - 0xC9, 0x04, 0xCE, 0xA5, 0xCC, 0x86, 0xC9, 0x04, - 0xCE, 0xA5, 0xCC, 0x88, 0xC9, 0x04, 0xCE, 0xA9, - 0xCC, 0x80, 0xC9, 0x04, 0xCE, 0xA9, 0xCC, 0x81, - 0xC9, 0x04, 0xCE, 0xA9, 0xCD, 0x85, 0xD9, 0x04, - // Bytes 3680 - 36bf - 0xCE, 0xB1, 0xCC, 0x84, 0xC9, 0x04, 0xCE, 0xB1, - 0xCC, 0x86, 0xC9, 0x04, 0xCE, 0xB1, 0xCD, 0x85, - 0xD9, 0x04, 0xCE, 0xB5, 0xCC, 0x80, 0xC9, 0x04, - 0xCE, 0xB5, 0xCC, 0x81, 0xC9, 0x04, 0xCE, 0xB7, - 0xCD, 0x85, 0xD9, 0x04, 0xCE, 0xB9, 0xCC, 0x80, - 0xC9, 0x04, 0xCE, 0xB9, 0xCC, 0x81, 0xC9, 0x04, - 0xCE, 0xB9, 0xCC, 0x84, 0xC9, 0x04, 0xCE, 0xB9, - 0xCC, 0x86, 0xC9, 0x04, 0xCE, 0xB9, 0xCD, 0x82, - // Bytes 36c0 - 36ff - 0xC9, 0x04, 0xCE, 0xBF, 0xCC, 0x80, 0xC9, 0x04, - 0xCE, 0xBF, 0xCC, 0x81, 0xC9, 0x04, 0xCF, 0x81, - 0xCC, 0x93, 0xC9, 0x04, 0xCF, 0x81, 0xCC, 0x94, - 0xC9, 0x04, 0xCF, 0x85, 0xCC, 0x80, 0xC9, 0x04, - 0xCF, 0x85, 0xCC, 0x81, 0xC9, 0x04, 0xCF, 0x85, - 0xCC, 0x84, 0xC9, 0x04, 0xCF, 0x85, 0xCC, 0x86, - 0xC9, 0x04, 0xCF, 0x85, 0xCD, 0x82, 0xC9, 0x04, - 0xCF, 0x89, 0xCD, 0x85, 0xD9, 0x04, 0xCF, 0x92, - // Bytes 3700 - 373f - 0xCC, 0x81, 0xC9, 0x04, 0xCF, 0x92, 0xCC, 0x88, - 0xC9, 0x04, 0xD0, 0x86, 0xCC, 0x88, 0xC9, 0x04, - 0xD0, 0x90, 0xCC, 0x86, 0xC9, 0x04, 0xD0, 0x90, - 0xCC, 0x88, 0xC9, 0x04, 0xD0, 0x93, 0xCC, 0x81, - 0xC9, 0x04, 0xD0, 0x95, 0xCC, 0x80, 0xC9, 0x04, - 0xD0, 0x95, 0xCC, 0x86, 0xC9, 0x04, 0xD0, 0x95, - 0xCC, 0x88, 0xC9, 0x04, 0xD0, 0x96, 0xCC, 0x86, - 0xC9, 0x04, 0xD0, 0x96, 0xCC, 0x88, 0xC9, 0x04, - // Bytes 3740 - 377f - 0xD0, 0x97, 0xCC, 0x88, 0xC9, 0x04, 0xD0, 0x98, - 0xCC, 0x80, 0xC9, 0x04, 0xD0, 0x98, 0xCC, 0x84, - 0xC9, 0x04, 0xD0, 0x98, 0xCC, 0x86, 0xC9, 0x04, - 0xD0, 0x98, 0xCC, 0x88, 0xC9, 0x04, 0xD0, 0x9A, - 0xCC, 0x81, 0xC9, 0x04, 0xD0, 0x9E, 0xCC, 0x88, - 0xC9, 0x04, 0xD0, 0xA3, 0xCC, 0x84, 0xC9, 0x04, - 0xD0, 0xA3, 0xCC, 0x86, 0xC9, 0x04, 0xD0, 0xA3, - 0xCC, 0x88, 0xC9, 0x04, 0xD0, 0xA3, 0xCC, 0x8B, - // Bytes 3780 - 37bf - 0xC9, 0x04, 0xD0, 0xA7, 0xCC, 0x88, 0xC9, 0x04, - 0xD0, 0xAB, 0xCC, 0x88, 0xC9, 0x04, 0xD0, 0xAD, - 0xCC, 0x88, 0xC9, 0x04, 0xD0, 0xB0, 0xCC, 0x86, - 0xC9, 0x04, 0xD0, 0xB0, 0xCC, 0x88, 0xC9, 0x04, - 0xD0, 0xB3, 0xCC, 0x81, 0xC9, 0x04, 0xD0, 0xB5, - 0xCC, 0x80, 0xC9, 0x04, 0xD0, 0xB5, 0xCC, 0x86, - 0xC9, 0x04, 0xD0, 0xB5, 0xCC, 0x88, 0xC9, 0x04, - 0xD0, 0xB6, 0xCC, 0x86, 0xC9, 0x04, 0xD0, 0xB6, - // Bytes 37c0 - 37ff - 0xCC, 0x88, 0xC9, 0x04, 0xD0, 0xB7, 0xCC, 0x88, - 0xC9, 0x04, 0xD0, 0xB8, 0xCC, 0x80, 0xC9, 0x04, - 0xD0, 0xB8, 0xCC, 0x84, 0xC9, 0x04, 0xD0, 0xB8, - 0xCC, 0x86, 0xC9, 0x04, 0xD0, 0xB8, 0xCC, 0x88, - 0xC9, 0x04, 0xD0, 0xBA, 0xCC, 0x81, 0xC9, 0x04, - 0xD0, 0xBE, 0xCC, 0x88, 0xC9, 0x04, 0xD1, 0x83, - 0xCC, 0x84, 0xC9, 0x04, 0xD1, 0x83, 0xCC, 0x86, - 0xC9, 0x04, 0xD1, 0x83, 0xCC, 0x88, 0xC9, 0x04, - // Bytes 3800 - 383f - 0xD1, 0x83, 0xCC, 0x8B, 0xC9, 0x04, 0xD1, 0x87, - 0xCC, 0x88, 0xC9, 0x04, 0xD1, 0x8B, 0xCC, 0x88, - 0xC9, 0x04, 0xD1, 0x8D, 0xCC, 0x88, 0xC9, 0x04, - 0xD1, 0x96, 0xCC, 0x88, 0xC9, 0x04, 0xD1, 0xB4, - 0xCC, 0x8F, 0xC9, 0x04, 0xD1, 0xB5, 0xCC, 0x8F, - 0xC9, 0x04, 0xD3, 0x98, 0xCC, 0x88, 0xC9, 0x04, - 0xD3, 0x99, 0xCC, 0x88, 0xC9, 0x04, 0xD3, 0xA8, - 0xCC, 0x88, 0xC9, 0x04, 0xD3, 0xA9, 0xCC, 0x88, - // Bytes 3840 - 387f - 0xC9, 0x04, 0xD8, 0xA7, 0xD9, 0x93, 0xC9, 0x04, - 0xD8, 0xA7, 0xD9, 0x94, 0xC9, 0x04, 0xD8, 0xA7, - 0xD9, 0x95, 0xB5, 0x04, 0xD9, 0x88, 0xD9, 0x94, - 0xC9, 0x04, 0xD9, 0x8A, 0xD9, 0x94, 0xC9, 0x04, - 0xDB, 0x81, 0xD9, 0x94, 0xC9, 0x04, 0xDB, 0x92, - 0xD9, 0x94, 0xC9, 0x04, 0xDB, 0x95, 0xD9, 0x94, - 0xC9, 0x05, 0x41, 0xCC, 0x82, 0xCC, 0x80, 0xCA, - 0x05, 0x41, 0xCC, 0x82, 0xCC, 0x81, 0xCA, 0x05, - // Bytes 3880 - 38bf - 0x41, 0xCC, 0x82, 0xCC, 0x83, 0xCA, 0x05, 0x41, - 0xCC, 0x82, 0xCC, 0x89, 0xCA, 0x05, 0x41, 0xCC, - 0x86, 0xCC, 0x80, 0xCA, 0x05, 0x41, 0xCC, 0x86, - 0xCC, 0x81, 0xCA, 0x05, 0x41, 0xCC, 0x86, 0xCC, - 0x83, 0xCA, 0x05, 0x41, 0xCC, 0x86, 0xCC, 0x89, - 0xCA, 0x05, 0x41, 0xCC, 0x87, 0xCC, 0x84, 0xCA, - 0x05, 0x41, 0xCC, 0x88, 0xCC, 0x84, 0xCA, 0x05, - 0x41, 0xCC, 0x8A, 0xCC, 0x81, 0xCA, 0x05, 0x41, - // Bytes 38c0 - 38ff - 0xCC, 0xA3, 0xCC, 0x82, 0xCA, 0x05, 0x41, 0xCC, - 0xA3, 0xCC, 0x86, 0xCA, 0x05, 0x43, 0xCC, 0xA7, - 0xCC, 0x81, 0xCA, 0x05, 0x45, 0xCC, 0x82, 0xCC, - 0x80, 0xCA, 0x05, 0x45, 0xCC, 0x82, 0xCC, 0x81, - 0xCA, 0x05, 0x45, 0xCC, 0x82, 0xCC, 0x83, 0xCA, - 0x05, 0x45, 0xCC, 0x82, 0xCC, 0x89, 0xCA, 0x05, - 0x45, 0xCC, 0x84, 0xCC, 0x80, 0xCA, 0x05, 0x45, - 0xCC, 0x84, 0xCC, 0x81, 0xCA, 0x05, 0x45, 0xCC, - // Bytes 3900 - 393f - 0xA3, 0xCC, 0x82, 0xCA, 0x05, 0x45, 0xCC, 0xA7, - 0xCC, 0x86, 0xCA, 0x05, 0x49, 0xCC, 0x88, 0xCC, - 0x81, 0xCA, 0x05, 0x4C, 0xCC, 0xA3, 0xCC, 0x84, - 0xCA, 0x05, 0x4F, 0xCC, 0x82, 0xCC, 0x80, 0xCA, - 0x05, 0x4F, 0xCC, 0x82, 0xCC, 0x81, 0xCA, 0x05, - 0x4F, 0xCC, 0x82, 0xCC, 0x83, 0xCA, 0x05, 0x4F, - 0xCC, 0x82, 0xCC, 0x89, 0xCA, 0x05, 0x4F, 0xCC, - 0x83, 0xCC, 0x81, 0xCA, 0x05, 0x4F, 0xCC, 0x83, - // Bytes 3940 - 397f - 0xCC, 0x84, 0xCA, 0x05, 0x4F, 0xCC, 0x83, 0xCC, - 0x88, 0xCA, 0x05, 0x4F, 0xCC, 0x84, 0xCC, 0x80, - 0xCA, 0x05, 0x4F, 0xCC, 0x84, 0xCC, 0x81, 0xCA, - 0x05, 0x4F, 0xCC, 0x87, 0xCC, 0x84, 0xCA, 0x05, - 0x4F, 0xCC, 0x88, 0xCC, 0x84, 0xCA, 0x05, 0x4F, - 0xCC, 0x9B, 0xCC, 0x80, 0xCA, 0x05, 0x4F, 0xCC, - 0x9B, 0xCC, 0x81, 0xCA, 0x05, 0x4F, 0xCC, 0x9B, - 0xCC, 0x83, 0xCA, 0x05, 0x4F, 0xCC, 0x9B, 0xCC, - // Bytes 3980 - 39bf - 0x89, 0xCA, 0x05, 0x4F, 0xCC, 0x9B, 0xCC, 0xA3, - 0xB6, 0x05, 0x4F, 0xCC, 0xA3, 0xCC, 0x82, 0xCA, - 0x05, 0x4F, 0xCC, 0xA8, 0xCC, 0x84, 0xCA, 0x05, - 0x52, 0xCC, 0xA3, 0xCC, 0x84, 0xCA, 0x05, 0x53, - 0xCC, 0x81, 0xCC, 0x87, 0xCA, 0x05, 0x53, 0xCC, - 0x8C, 0xCC, 0x87, 0xCA, 0x05, 0x53, 0xCC, 0xA3, - 0xCC, 0x87, 0xCA, 0x05, 0x55, 0xCC, 0x83, 0xCC, - 0x81, 0xCA, 0x05, 0x55, 0xCC, 0x84, 0xCC, 0x88, - // Bytes 39c0 - 39ff - 0xCA, 0x05, 0x55, 0xCC, 0x88, 0xCC, 0x80, 0xCA, - 0x05, 0x55, 0xCC, 0x88, 0xCC, 0x81, 0xCA, 0x05, - 0x55, 0xCC, 0x88, 0xCC, 0x84, 0xCA, 0x05, 0x55, - 0xCC, 0x88, 0xCC, 0x8C, 0xCA, 0x05, 0x55, 0xCC, - 0x9B, 0xCC, 0x80, 0xCA, 0x05, 0x55, 0xCC, 0x9B, - 0xCC, 0x81, 0xCA, 0x05, 0x55, 0xCC, 0x9B, 0xCC, - 0x83, 0xCA, 0x05, 0x55, 0xCC, 0x9B, 0xCC, 0x89, - 0xCA, 0x05, 0x55, 0xCC, 0x9B, 0xCC, 0xA3, 0xB6, - // Bytes 3a00 - 3a3f - 0x05, 0x61, 0xCC, 0x82, 0xCC, 0x80, 0xCA, 0x05, - 0x61, 0xCC, 0x82, 0xCC, 0x81, 0xCA, 0x05, 0x61, - 0xCC, 0x82, 0xCC, 0x83, 0xCA, 0x05, 0x61, 0xCC, - 0x82, 0xCC, 0x89, 0xCA, 0x05, 0x61, 0xCC, 0x86, - 0xCC, 0x80, 0xCA, 0x05, 0x61, 0xCC, 0x86, 0xCC, - 0x81, 0xCA, 0x05, 0x61, 0xCC, 0x86, 0xCC, 0x83, - 0xCA, 0x05, 0x61, 0xCC, 0x86, 0xCC, 0x89, 0xCA, - 0x05, 0x61, 0xCC, 0x87, 0xCC, 0x84, 0xCA, 0x05, - // Bytes 3a40 - 3a7f - 0x61, 0xCC, 0x88, 0xCC, 0x84, 0xCA, 0x05, 0x61, - 0xCC, 0x8A, 0xCC, 0x81, 0xCA, 0x05, 0x61, 0xCC, - 0xA3, 0xCC, 0x82, 0xCA, 0x05, 0x61, 0xCC, 0xA3, - 0xCC, 0x86, 0xCA, 0x05, 0x63, 0xCC, 0xA7, 0xCC, - 0x81, 0xCA, 0x05, 0x65, 0xCC, 0x82, 0xCC, 0x80, - 0xCA, 0x05, 0x65, 0xCC, 0x82, 0xCC, 0x81, 0xCA, - 0x05, 0x65, 0xCC, 0x82, 0xCC, 0x83, 0xCA, 0x05, - 0x65, 0xCC, 0x82, 0xCC, 0x89, 0xCA, 0x05, 0x65, - // Bytes 3a80 - 3abf - 0xCC, 0x84, 0xCC, 0x80, 0xCA, 0x05, 0x65, 0xCC, - 0x84, 0xCC, 0x81, 0xCA, 0x05, 0x65, 0xCC, 0xA3, - 0xCC, 0x82, 0xCA, 0x05, 0x65, 0xCC, 0xA7, 0xCC, - 0x86, 0xCA, 0x05, 0x69, 0xCC, 0x88, 0xCC, 0x81, - 0xCA, 0x05, 0x6C, 0xCC, 0xA3, 0xCC, 0x84, 0xCA, - 0x05, 0x6F, 0xCC, 0x82, 0xCC, 0x80, 0xCA, 0x05, - 0x6F, 0xCC, 0x82, 0xCC, 0x81, 0xCA, 0x05, 0x6F, - 0xCC, 0x82, 0xCC, 0x83, 0xCA, 0x05, 0x6F, 0xCC, - // Bytes 3ac0 - 3aff - 0x82, 0xCC, 0x89, 0xCA, 0x05, 0x6F, 0xCC, 0x83, - 0xCC, 0x81, 0xCA, 0x05, 0x6F, 0xCC, 0x83, 0xCC, - 0x84, 0xCA, 0x05, 0x6F, 0xCC, 0x83, 0xCC, 0x88, - 0xCA, 0x05, 0x6F, 0xCC, 0x84, 0xCC, 0x80, 0xCA, - 0x05, 0x6F, 0xCC, 0x84, 0xCC, 0x81, 0xCA, 0x05, - 0x6F, 0xCC, 0x87, 0xCC, 0x84, 0xCA, 0x05, 0x6F, - 0xCC, 0x88, 0xCC, 0x84, 0xCA, 0x05, 0x6F, 0xCC, - 0x9B, 0xCC, 0x80, 0xCA, 0x05, 0x6F, 0xCC, 0x9B, - // Bytes 3b00 - 3b3f - 0xCC, 0x81, 0xCA, 0x05, 0x6F, 0xCC, 0x9B, 0xCC, - 0x83, 0xCA, 0x05, 0x6F, 0xCC, 0x9B, 0xCC, 0x89, - 0xCA, 0x05, 0x6F, 0xCC, 0x9B, 0xCC, 0xA3, 0xB6, - 0x05, 0x6F, 0xCC, 0xA3, 0xCC, 0x82, 0xCA, 0x05, - 0x6F, 0xCC, 0xA8, 0xCC, 0x84, 0xCA, 0x05, 0x72, - 0xCC, 0xA3, 0xCC, 0x84, 0xCA, 0x05, 0x73, 0xCC, - 0x81, 0xCC, 0x87, 0xCA, 0x05, 0x73, 0xCC, 0x8C, - 0xCC, 0x87, 0xCA, 0x05, 0x73, 0xCC, 0xA3, 0xCC, - // Bytes 3b40 - 3b7f - 0x87, 0xCA, 0x05, 0x75, 0xCC, 0x83, 0xCC, 0x81, - 0xCA, 0x05, 0x75, 0xCC, 0x84, 0xCC, 0x88, 0xCA, - 0x05, 0x75, 0xCC, 0x88, 0xCC, 0x80, 0xCA, 0x05, - 0x75, 0xCC, 0x88, 0xCC, 0x81, 0xCA, 0x05, 0x75, - 0xCC, 0x88, 0xCC, 0x84, 0xCA, 0x05, 0x75, 0xCC, - 0x88, 0xCC, 0x8C, 0xCA, 0x05, 0x75, 0xCC, 0x9B, - 0xCC, 0x80, 0xCA, 0x05, 0x75, 0xCC, 0x9B, 0xCC, - 0x81, 0xCA, 0x05, 0x75, 0xCC, 0x9B, 0xCC, 0x83, - // Bytes 3b80 - 3bbf - 0xCA, 0x05, 0x75, 0xCC, 0x9B, 0xCC, 0x89, 0xCA, - 0x05, 0x75, 0xCC, 0x9B, 0xCC, 0xA3, 0xB6, 0x05, - 0xE1, 0xBE, 0xBF, 0xCC, 0x80, 0xCA, 0x05, 0xE1, - 0xBE, 0xBF, 0xCC, 0x81, 0xCA, 0x05, 0xE1, 0xBE, - 0xBF, 0xCD, 0x82, 0xCA, 0x05, 0xE1, 0xBF, 0xBE, - 0xCC, 0x80, 0xCA, 0x05, 0xE1, 0xBF, 0xBE, 0xCC, - 0x81, 0xCA, 0x05, 0xE1, 0xBF, 0xBE, 0xCD, 0x82, - 0xCA, 0x05, 0xE2, 0x86, 0x90, 0xCC, 0xB8, 0x05, - // Bytes 3bc0 - 3bff - 0x05, 0xE2, 0x86, 0x92, 0xCC, 0xB8, 0x05, 0x05, - 0xE2, 0x86, 0x94, 0xCC, 0xB8, 0x05, 0x05, 0xE2, - 0x87, 0x90, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x87, - 0x92, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x87, 0x94, - 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x88, 0x83, 0xCC, - 0xB8, 0x05, 0x05, 0xE2, 0x88, 0x88, 0xCC, 0xB8, - 0x05, 0x05, 0xE2, 0x88, 0x8B, 0xCC, 0xB8, 0x05, - 0x05, 0xE2, 0x88, 0xA3, 0xCC, 0xB8, 0x05, 0x05, - // Bytes 3c00 - 3c3f - 0xE2, 0x88, 0xA5, 0xCC, 0xB8, 0x05, 0x05, 0xE2, - 0x88, 0xBC, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89, - 0x83, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89, 0x85, - 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89, 0x88, 0xCC, - 0xB8, 0x05, 0x05, 0xE2, 0x89, 0x8D, 0xCC, 0xB8, - 0x05, 0x05, 0xE2, 0x89, 0xA1, 0xCC, 0xB8, 0x05, - 0x05, 0xE2, 0x89, 0xA4, 0xCC, 0xB8, 0x05, 0x05, - 0xE2, 0x89, 0xA5, 0xCC, 0xB8, 0x05, 0x05, 0xE2, - // Bytes 3c40 - 3c7f - 0x89, 0xB2, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89, - 0xB3, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89, 0xB6, - 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x89, 0xB7, 0xCC, - 0xB8, 0x05, 0x05, 0xE2, 0x89, 0xBA, 0xCC, 0xB8, - 0x05, 0x05, 0xE2, 0x89, 0xBB, 0xCC, 0xB8, 0x05, - 0x05, 0xE2, 0x89, 0xBC, 0xCC, 0xB8, 0x05, 0x05, - 0xE2, 0x89, 0xBD, 0xCC, 0xB8, 0x05, 0x05, 0xE2, - 0x8A, 0x82, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A, - // Bytes 3c80 - 3cbf - 0x83, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A, 0x86, - 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A, 0x87, 0xCC, - 0xB8, 0x05, 0x05, 0xE2, 0x8A, 0x91, 0xCC, 0xB8, - 0x05, 0x05, 0xE2, 0x8A, 0x92, 0xCC, 0xB8, 0x05, - 0x05, 0xE2, 0x8A, 0xA2, 0xCC, 0xB8, 0x05, 0x05, - 0xE2, 0x8A, 0xA8, 0xCC, 0xB8, 0x05, 0x05, 0xE2, - 0x8A, 0xA9, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A, - 0xAB, 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A, 0xB2, - // Bytes 3cc0 - 3cff - 0xCC, 0xB8, 0x05, 0x05, 0xE2, 0x8A, 0xB3, 0xCC, - 0xB8, 0x05, 0x05, 0xE2, 0x8A, 0xB4, 0xCC, 0xB8, - 0x05, 0x05, 0xE2, 0x8A, 0xB5, 0xCC, 0xB8, 0x05, - 0x06, 0xCE, 0x91, 0xCC, 0x93, 0xCD, 0x85, 0xDA, - 0x06, 0xCE, 0x91, 0xCC, 0x94, 0xCD, 0x85, 0xDA, - 0x06, 0xCE, 0x95, 0xCC, 0x93, 0xCC, 0x80, 0xCA, - 0x06, 0xCE, 0x95, 0xCC, 0x93, 0xCC, 0x81, 0xCA, - 0x06, 0xCE, 0x95, 0xCC, 0x94, 0xCC, 0x80, 0xCA, - // Bytes 3d00 - 3d3f - 0x06, 0xCE, 0x95, 0xCC, 0x94, 0xCC, 0x81, 0xCA, - 0x06, 0xCE, 0x97, 0xCC, 0x93, 0xCD, 0x85, 0xDA, - 0x06, 0xCE, 0x97, 0xCC, 0x94, 0xCD, 0x85, 0xDA, - 0x06, 0xCE, 0x99, 0xCC, 0x93, 0xCC, 0x80, 0xCA, - 0x06, 0xCE, 0x99, 0xCC, 0x93, 0xCC, 0x81, 0xCA, - 0x06, 0xCE, 0x99, 0xCC, 0x93, 0xCD, 0x82, 0xCA, - 0x06, 0xCE, 0x99, 0xCC, 0x94, 0xCC, 0x80, 0xCA, - 0x06, 0xCE, 0x99, 0xCC, 0x94, 0xCC, 0x81, 0xCA, - // Bytes 3d40 - 3d7f - 0x06, 0xCE, 0x99, 0xCC, 0x94, 0xCD, 0x82, 0xCA, - 0x06, 0xCE, 0x9F, 0xCC, 0x93, 0xCC, 0x80, 0xCA, - 0x06, 0xCE, 0x9F, 0xCC, 0x93, 0xCC, 0x81, 0xCA, - 0x06, 0xCE, 0x9F, 0xCC, 0x94, 0xCC, 0x80, 0xCA, - 0x06, 0xCE, 0x9F, 0xCC, 0x94, 0xCC, 0x81, 0xCA, - 0x06, 0xCE, 0xA5, 0xCC, 0x94, 0xCC, 0x80, 0xCA, - 0x06, 0xCE, 0xA5, 0xCC, 0x94, 0xCC, 0x81, 0xCA, - 0x06, 0xCE, 0xA5, 0xCC, 0x94, 0xCD, 0x82, 0xCA, - // Bytes 3d80 - 3dbf - 0x06, 0xCE, 0xA9, 0xCC, 0x93, 0xCD, 0x85, 0xDA, - 0x06, 0xCE, 0xA9, 0xCC, 0x94, 0xCD, 0x85, 0xDA, - 0x06, 0xCE, 0xB1, 0xCC, 0x80, 0xCD, 0x85, 0xDA, - 0x06, 0xCE, 0xB1, 0xCC, 0x81, 0xCD, 0x85, 0xDA, - 0x06, 0xCE, 0xB1, 0xCC, 0x93, 0xCD, 0x85, 0xDA, - 0x06, 0xCE, 0xB1, 0xCC, 0x94, 0xCD, 0x85, 0xDA, - 0x06, 0xCE, 0xB1, 0xCD, 0x82, 0xCD, 0x85, 0xDA, - 0x06, 0xCE, 0xB5, 0xCC, 0x93, 0xCC, 0x80, 0xCA, - // Bytes 3dc0 - 3dff - 0x06, 0xCE, 0xB5, 0xCC, 0x93, 0xCC, 0x81, 0xCA, - 0x06, 0xCE, 0xB5, 0xCC, 0x94, 0xCC, 0x80, 0xCA, - 0x06, 0xCE, 0xB5, 0xCC, 0x94, 0xCC, 0x81, 0xCA, - 0x06, 0xCE, 0xB7, 0xCC, 0x80, 0xCD, 0x85, 0xDA, - 0x06, 0xCE, 0xB7, 0xCC, 0x81, 0xCD, 0x85, 0xDA, - 0x06, 0xCE, 0xB7, 0xCC, 0x93, 0xCD, 0x85, 0xDA, - 0x06, 0xCE, 0xB7, 0xCC, 0x94, 0xCD, 0x85, 0xDA, - 0x06, 0xCE, 0xB7, 0xCD, 0x82, 0xCD, 0x85, 0xDA, - // Bytes 3e00 - 3e3f - 0x06, 0xCE, 0xB9, 0xCC, 0x88, 0xCC, 0x80, 0xCA, - 0x06, 0xCE, 0xB9, 0xCC, 0x88, 0xCC, 0x81, 0xCA, - 0x06, 0xCE, 0xB9, 0xCC, 0x88, 0xCD, 0x82, 0xCA, - 0x06, 0xCE, 0xB9, 0xCC, 0x93, 0xCC, 0x80, 0xCA, - 0x06, 0xCE, 0xB9, 0xCC, 0x93, 0xCC, 0x81, 0xCA, - 0x06, 0xCE, 0xB9, 0xCC, 0x93, 0xCD, 0x82, 0xCA, - 0x06, 0xCE, 0xB9, 0xCC, 0x94, 0xCC, 0x80, 0xCA, - 0x06, 0xCE, 0xB9, 0xCC, 0x94, 0xCC, 0x81, 0xCA, - // Bytes 3e40 - 3e7f - 0x06, 0xCE, 0xB9, 0xCC, 0x94, 0xCD, 0x82, 0xCA, - 0x06, 0xCE, 0xBF, 0xCC, 0x93, 0xCC, 0x80, 0xCA, - 0x06, 0xCE, 0xBF, 0xCC, 0x93, 0xCC, 0x81, 0xCA, - 0x06, 0xCE, 0xBF, 0xCC, 0x94, 0xCC, 0x80, 0xCA, - 0x06, 0xCE, 0xBF, 0xCC, 0x94, 0xCC, 0x81, 0xCA, - 0x06, 0xCF, 0x85, 0xCC, 0x88, 0xCC, 0x80, 0xCA, - 0x06, 0xCF, 0x85, 0xCC, 0x88, 0xCC, 0x81, 0xCA, - 0x06, 0xCF, 0x85, 0xCC, 0x88, 0xCD, 0x82, 0xCA, - // Bytes 3e80 - 3ebf - 0x06, 0xCF, 0x85, 0xCC, 0x93, 0xCC, 0x80, 0xCA, - 0x06, 0xCF, 0x85, 0xCC, 0x93, 0xCC, 0x81, 0xCA, - 0x06, 0xCF, 0x85, 0xCC, 0x93, 0xCD, 0x82, 0xCA, - 0x06, 0xCF, 0x85, 0xCC, 0x94, 0xCC, 0x80, 0xCA, - 0x06, 0xCF, 0x85, 0xCC, 0x94, 0xCC, 0x81, 0xCA, - 0x06, 0xCF, 0x85, 0xCC, 0x94, 0xCD, 0x82, 0xCA, - 0x06, 0xCF, 0x89, 0xCC, 0x80, 0xCD, 0x85, 0xDA, - 0x06, 0xCF, 0x89, 0xCC, 0x81, 0xCD, 0x85, 0xDA, - // Bytes 3ec0 - 3eff - 0x06, 0xCF, 0x89, 0xCC, 0x93, 0xCD, 0x85, 0xDA, - 0x06, 0xCF, 0x89, 0xCC, 0x94, 0xCD, 0x85, 0xDA, - 0x06, 0xCF, 0x89, 0xCD, 0x82, 0xCD, 0x85, 0xDA, - 0x06, 0xE0, 0xA4, 0xA8, 0xE0, 0xA4, 0xBC, 0x09, - 0x06, 0xE0, 0xA4, 0xB0, 0xE0, 0xA4, 0xBC, 0x09, - 0x06, 0xE0, 0xA4, 0xB3, 0xE0, 0xA4, 0xBC, 0x09, - 0x06, 0xE0, 0xB1, 0x86, 0xE0, 0xB1, 0x96, 0x85, - 0x06, 0xE0, 0xB7, 0x99, 0xE0, 0xB7, 0x8A, 0x11, - // Bytes 3f00 - 3f3f - 0x06, 0xE3, 0x81, 0x86, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x81, 0x8B, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x81, 0x8D, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x81, 0x8F, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x81, 0x91, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x81, 0x93, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x81, 0x95, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x81, 0x97, 0xE3, 0x82, 0x99, 0x0D, - // Bytes 3f40 - 3f7f - 0x06, 0xE3, 0x81, 0x99, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x81, 0x9B, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x81, 0x9D, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x81, 0x9F, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x81, 0xA1, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x81, 0xA4, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x81, 0xA6, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x81, 0xA8, 0xE3, 0x82, 0x99, 0x0D, - // Bytes 3f80 - 3fbf - 0x06, 0xE3, 0x81, 0xAF, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x81, 0xAF, 0xE3, 0x82, 0x9A, 0x0D, - 0x06, 0xE3, 0x81, 0xB2, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x81, 0xB2, 0xE3, 0x82, 0x9A, 0x0D, - 0x06, 0xE3, 0x81, 0xB5, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x81, 0xB5, 0xE3, 0x82, 0x9A, 0x0D, - 0x06, 0xE3, 0x81, 0xB8, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x81, 0xB8, 0xE3, 0x82, 0x9A, 0x0D, - // Bytes 3fc0 - 3fff - 0x06, 0xE3, 0x81, 0xBB, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x81, 0xBB, 0xE3, 0x82, 0x9A, 0x0D, - 0x06, 0xE3, 0x82, 0x9D, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x82, 0xA6, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x82, 0xAB, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x82, 0xAD, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x82, 0xAF, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x82, 0xB1, 0xE3, 0x82, 0x99, 0x0D, - // Bytes 4000 - 403f - 0x06, 0xE3, 0x82, 0xB3, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x82, 0xB5, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x82, 0xB7, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x82, 0xB9, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x82, 0xBB, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x82, 0xBD, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x82, 0xBF, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x83, 0x81, 0xE3, 0x82, 0x99, 0x0D, - // Bytes 4040 - 407f - 0x06, 0xE3, 0x83, 0x84, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x83, 0x86, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x83, 0x88, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x83, 0x8F, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x83, 0x8F, 0xE3, 0x82, 0x9A, 0x0D, - 0x06, 0xE3, 0x83, 0x92, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x83, 0x92, 0xE3, 0x82, 0x9A, 0x0D, - 0x06, 0xE3, 0x83, 0x95, 0xE3, 0x82, 0x99, 0x0D, - // Bytes 4080 - 40bf - 0x06, 0xE3, 0x83, 0x95, 0xE3, 0x82, 0x9A, 0x0D, - 0x06, 0xE3, 0x83, 0x98, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x83, 0x98, 0xE3, 0x82, 0x9A, 0x0D, - 0x06, 0xE3, 0x83, 0x9B, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x83, 0x9B, 0xE3, 0x82, 0x9A, 0x0D, - 0x06, 0xE3, 0x83, 0xAF, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x83, 0xB0, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x83, 0xB1, 0xE3, 0x82, 0x99, 0x0D, - // Bytes 40c0 - 40ff - 0x06, 0xE3, 0x83, 0xB2, 0xE3, 0x82, 0x99, 0x0D, - 0x06, 0xE3, 0x83, 0xBD, 0xE3, 0x82, 0x99, 0x0D, - 0x08, 0xCE, 0x91, 0xCC, 0x93, 0xCC, 0x80, 0xCD, - 0x85, 0xDB, 0x08, 0xCE, 0x91, 0xCC, 0x93, 0xCC, - 0x81, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0x91, 0xCC, - 0x93, 0xCD, 0x82, 0xCD, 0x85, 0xDB, 0x08, 0xCE, - 0x91, 0xCC, 0x94, 0xCC, 0x80, 0xCD, 0x85, 0xDB, - 0x08, 0xCE, 0x91, 0xCC, 0x94, 0xCC, 0x81, 0xCD, - // Bytes 4100 - 413f - 0x85, 0xDB, 0x08, 0xCE, 0x91, 0xCC, 0x94, 0xCD, - 0x82, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0x97, 0xCC, - 0x93, 0xCC, 0x80, 0xCD, 0x85, 0xDB, 0x08, 0xCE, - 0x97, 0xCC, 0x93, 0xCC, 0x81, 0xCD, 0x85, 0xDB, - 0x08, 0xCE, 0x97, 0xCC, 0x93, 0xCD, 0x82, 0xCD, - 0x85, 0xDB, 0x08, 0xCE, 0x97, 0xCC, 0x94, 0xCC, - 0x80, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0x97, 0xCC, - 0x94, 0xCC, 0x81, 0xCD, 0x85, 0xDB, 0x08, 0xCE, - // Bytes 4140 - 417f - 0x97, 0xCC, 0x94, 0xCD, 0x82, 0xCD, 0x85, 0xDB, - 0x08, 0xCE, 0xA9, 0xCC, 0x93, 0xCC, 0x80, 0xCD, - 0x85, 0xDB, 0x08, 0xCE, 0xA9, 0xCC, 0x93, 0xCC, - 0x81, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0xA9, 0xCC, - 0x93, 0xCD, 0x82, 0xCD, 0x85, 0xDB, 0x08, 0xCE, - 0xA9, 0xCC, 0x94, 0xCC, 0x80, 0xCD, 0x85, 0xDB, - 0x08, 0xCE, 0xA9, 0xCC, 0x94, 0xCC, 0x81, 0xCD, - 0x85, 0xDB, 0x08, 0xCE, 0xA9, 0xCC, 0x94, 0xCD, - // Bytes 4180 - 41bf - 0x82, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0xB1, 0xCC, - 0x93, 0xCC, 0x80, 0xCD, 0x85, 0xDB, 0x08, 0xCE, - 0xB1, 0xCC, 0x93, 0xCC, 0x81, 0xCD, 0x85, 0xDB, - 0x08, 0xCE, 0xB1, 0xCC, 0x93, 0xCD, 0x82, 0xCD, - 0x85, 0xDB, 0x08, 0xCE, 0xB1, 0xCC, 0x94, 0xCC, - 0x80, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0xB1, 0xCC, - 0x94, 0xCC, 0x81, 0xCD, 0x85, 0xDB, 0x08, 0xCE, - 0xB1, 0xCC, 0x94, 0xCD, 0x82, 0xCD, 0x85, 0xDB, - // Bytes 41c0 - 41ff - 0x08, 0xCE, 0xB7, 0xCC, 0x93, 0xCC, 0x80, 0xCD, - 0x85, 0xDB, 0x08, 0xCE, 0xB7, 0xCC, 0x93, 0xCC, - 0x81, 0xCD, 0x85, 0xDB, 0x08, 0xCE, 0xB7, 0xCC, - 0x93, 0xCD, 0x82, 0xCD, 0x85, 0xDB, 0x08, 0xCE, - 0xB7, 0xCC, 0x94, 0xCC, 0x80, 0xCD, 0x85, 0xDB, - 0x08, 0xCE, 0xB7, 0xCC, 0x94, 0xCC, 0x81, 0xCD, - 0x85, 0xDB, 0x08, 0xCE, 0xB7, 0xCC, 0x94, 0xCD, - 0x82, 0xCD, 0x85, 0xDB, 0x08, 0xCF, 0x89, 0xCC, - // Bytes 4200 - 423f - 0x93, 0xCC, 0x80, 0xCD, 0x85, 0xDB, 0x08, 0xCF, - 0x89, 0xCC, 0x93, 0xCC, 0x81, 0xCD, 0x85, 0xDB, - 0x08, 0xCF, 0x89, 0xCC, 0x93, 0xCD, 0x82, 0xCD, - 0x85, 0xDB, 0x08, 0xCF, 0x89, 0xCC, 0x94, 0xCC, - 0x80, 0xCD, 0x85, 0xDB, 0x08, 0xCF, 0x89, 0xCC, - 0x94, 0xCC, 0x81, 0xCD, 0x85, 0xDB, 0x08, 0xCF, - 0x89, 0xCC, 0x94, 0xCD, 0x82, 0xCD, 0x85, 0xDB, - 0x08, 0xF0, 0x91, 0x82, 0x99, 0xF0, 0x91, 0x82, - // Bytes 4240 - 427f - 0xBA, 0x09, 0x08, 0xF0, 0x91, 0x82, 0x9B, 0xF0, - 0x91, 0x82, 0xBA, 0x09, 0x08, 0xF0, 0x91, 0x82, - 0xA5, 0xF0, 0x91, 0x82, 0xBA, 0x09, 0x42, 0xC2, - 0xB4, 0x01, 0x43, 0x20, 0xCC, 0x81, 0xC9, 0x43, - 0x20, 0xCC, 0x83, 0xC9, 0x43, 0x20, 0xCC, 0x84, - 0xC9, 0x43, 0x20, 0xCC, 0x85, 0xC9, 0x43, 0x20, - 0xCC, 0x86, 0xC9, 0x43, 0x20, 0xCC, 0x87, 0xC9, - 0x43, 0x20, 0xCC, 0x88, 0xC9, 0x43, 0x20, 0xCC, - // Bytes 4280 - 42bf - 0x8A, 0xC9, 0x43, 0x20, 0xCC, 0x8B, 0xC9, 0x43, - 0x20, 0xCC, 0x93, 0xC9, 0x43, 0x20, 0xCC, 0x94, - 0xC9, 0x43, 0x20, 0xCC, 0xA7, 0xA5, 0x43, 0x20, - 0xCC, 0xA8, 0xA5, 0x43, 0x20, 0xCC, 0xB3, 0xB5, - 0x43, 0x20, 0xCD, 0x82, 0xC9, 0x43, 0x20, 0xCD, - 0x85, 0xD9, 0x43, 0x20, 0xD9, 0x8B, 0x59, 0x43, - 0x20, 0xD9, 0x8C, 0x5D, 0x43, 0x20, 0xD9, 0x8D, - 0x61, 0x43, 0x20, 0xD9, 0x8E, 0x65, 0x43, 0x20, - // Bytes 42c0 - 42ff - 0xD9, 0x8F, 0x69, 0x43, 0x20, 0xD9, 0x90, 0x6D, - 0x43, 0x20, 0xD9, 0x91, 0x71, 0x43, 0x20, 0xD9, - 0x92, 0x75, 0x43, 0x41, 0xCC, 0x8A, 0xC9, 0x43, - 0x73, 0xCC, 0x87, 0xC9, 0x44, 0x20, 0xE3, 0x82, - 0x99, 0x0D, 0x44, 0x20, 0xE3, 0x82, 0x9A, 0x0D, - 0x44, 0xC2, 0xA8, 0xCC, 0x81, 0xCA, 0x44, 0xCE, - 0x91, 0xCC, 0x81, 0xC9, 0x44, 0xCE, 0x95, 0xCC, - 0x81, 0xC9, 0x44, 0xCE, 0x97, 0xCC, 0x81, 0xC9, - // Bytes 4300 - 433f - 0x44, 0xCE, 0x99, 0xCC, 0x81, 0xC9, 0x44, 0xCE, - 0x9F, 0xCC, 0x81, 0xC9, 0x44, 0xCE, 0xA5, 0xCC, - 0x81, 0xC9, 0x44, 0xCE, 0xA5, 0xCC, 0x88, 0xC9, - 0x44, 0xCE, 0xA9, 0xCC, 0x81, 0xC9, 0x44, 0xCE, - 0xB1, 0xCC, 0x81, 0xC9, 0x44, 0xCE, 0xB5, 0xCC, - 0x81, 0xC9, 0x44, 0xCE, 0xB7, 0xCC, 0x81, 0xC9, - 0x44, 0xCE, 0xB9, 0xCC, 0x81, 0xC9, 0x44, 0xCE, - 0xBF, 0xCC, 0x81, 0xC9, 0x44, 0xCF, 0x85, 0xCC, - // Bytes 4340 - 437f - 0x81, 0xC9, 0x44, 0xCF, 0x89, 0xCC, 0x81, 0xC9, - 0x44, 0xD7, 0x90, 0xD6, 0xB7, 0x31, 0x44, 0xD7, - 0x90, 0xD6, 0xB8, 0x35, 0x44, 0xD7, 0x90, 0xD6, - 0xBC, 0x41, 0x44, 0xD7, 0x91, 0xD6, 0xBC, 0x41, - 0x44, 0xD7, 0x91, 0xD6, 0xBF, 0x49, 0x44, 0xD7, - 0x92, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0x93, 0xD6, - 0xBC, 0x41, 0x44, 0xD7, 0x94, 0xD6, 0xBC, 0x41, - 0x44, 0xD7, 0x95, 0xD6, 0xB9, 0x39, 0x44, 0xD7, - // Bytes 4380 - 43bf - 0x95, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0x96, 0xD6, - 0xBC, 0x41, 0x44, 0xD7, 0x98, 0xD6, 0xBC, 0x41, - 0x44, 0xD7, 0x99, 0xD6, 0xB4, 0x25, 0x44, 0xD7, - 0x99, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0x9A, 0xD6, - 0xBC, 0x41, 0x44, 0xD7, 0x9B, 0xD6, 0xBC, 0x41, - 0x44, 0xD7, 0x9B, 0xD6, 0xBF, 0x49, 0x44, 0xD7, - 0x9C, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0x9E, 0xD6, - 0xBC, 0x41, 0x44, 0xD7, 0xA0, 0xD6, 0xBC, 0x41, - // Bytes 43c0 - 43ff - 0x44, 0xD7, 0xA1, 0xD6, 0xBC, 0x41, 0x44, 0xD7, - 0xA3, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0xA4, 0xD6, - 0xBC, 0x41, 0x44, 0xD7, 0xA4, 0xD6, 0xBF, 0x49, - 0x44, 0xD7, 0xA6, 0xD6, 0xBC, 0x41, 0x44, 0xD7, - 0xA7, 0xD6, 0xBC, 0x41, 0x44, 0xD7, 0xA8, 0xD6, - 0xBC, 0x41, 0x44, 0xD7, 0xA9, 0xD6, 0xBC, 0x41, - 0x44, 0xD7, 0xA9, 0xD7, 0x81, 0x4D, 0x44, 0xD7, - 0xA9, 0xD7, 0x82, 0x51, 0x44, 0xD7, 0xAA, 0xD6, - // Bytes 4400 - 443f - 0xBC, 0x41, 0x44, 0xD7, 0xB2, 0xD6, 0xB7, 0x31, - 0x44, 0xD8, 0xA7, 0xD9, 0x8B, 0x59, 0x44, 0xD8, - 0xA7, 0xD9, 0x93, 0xC9, 0x44, 0xD8, 0xA7, 0xD9, - 0x94, 0xC9, 0x44, 0xD8, 0xA7, 0xD9, 0x95, 0xB5, - 0x44, 0xD8, 0xB0, 0xD9, 0xB0, 0x79, 0x44, 0xD8, - 0xB1, 0xD9, 0xB0, 0x79, 0x44, 0xD9, 0x80, 0xD9, - 0x8B, 0x59, 0x44, 0xD9, 0x80, 0xD9, 0x8E, 0x65, - 0x44, 0xD9, 0x80, 0xD9, 0x8F, 0x69, 0x44, 0xD9, - // Bytes 4440 - 447f - 0x80, 0xD9, 0x90, 0x6D, 0x44, 0xD9, 0x80, 0xD9, - 0x91, 0x71, 0x44, 0xD9, 0x80, 0xD9, 0x92, 0x75, - 0x44, 0xD9, 0x87, 0xD9, 0xB0, 0x79, 0x44, 0xD9, - 0x88, 0xD9, 0x94, 0xC9, 0x44, 0xD9, 0x89, 0xD9, - 0xB0, 0x79, 0x44, 0xD9, 0x8A, 0xD9, 0x94, 0xC9, - 0x44, 0xDB, 0x92, 0xD9, 0x94, 0xC9, 0x44, 0xDB, - 0x95, 0xD9, 0x94, 0xC9, 0x45, 0x20, 0xCC, 0x88, - 0xCC, 0x80, 0xCA, 0x45, 0x20, 0xCC, 0x88, 0xCC, - // Bytes 4480 - 44bf - 0x81, 0xCA, 0x45, 0x20, 0xCC, 0x88, 0xCD, 0x82, - 0xCA, 0x45, 0x20, 0xCC, 0x93, 0xCC, 0x80, 0xCA, - 0x45, 0x20, 0xCC, 0x93, 0xCC, 0x81, 0xCA, 0x45, - 0x20, 0xCC, 0x93, 0xCD, 0x82, 0xCA, 0x45, 0x20, - 0xCC, 0x94, 0xCC, 0x80, 0xCA, 0x45, 0x20, 0xCC, - 0x94, 0xCC, 0x81, 0xCA, 0x45, 0x20, 0xCC, 0x94, - 0xCD, 0x82, 0xCA, 0x45, 0x20, 0xD9, 0x8C, 0xD9, - 0x91, 0x72, 0x45, 0x20, 0xD9, 0x8D, 0xD9, 0x91, - // Bytes 44c0 - 44ff - 0x72, 0x45, 0x20, 0xD9, 0x8E, 0xD9, 0x91, 0x72, - 0x45, 0x20, 0xD9, 0x8F, 0xD9, 0x91, 0x72, 0x45, - 0x20, 0xD9, 0x90, 0xD9, 0x91, 0x72, 0x45, 0x20, - 0xD9, 0x91, 0xD9, 0xB0, 0x7A, 0x45, 0xE2, 0xAB, - 0x9D, 0xCC, 0xB8, 0x05, 0x46, 0xCE, 0xB9, 0xCC, - 0x88, 0xCC, 0x81, 0xCA, 0x46, 0xCF, 0x85, 0xCC, - 0x88, 0xCC, 0x81, 0xCA, 0x46, 0xD7, 0xA9, 0xD6, - 0xBC, 0xD7, 0x81, 0x4E, 0x46, 0xD7, 0xA9, 0xD6, - // Bytes 4500 - 453f - 0xBC, 0xD7, 0x82, 0x52, 0x46, 0xD9, 0x80, 0xD9, - 0x8E, 0xD9, 0x91, 0x72, 0x46, 0xD9, 0x80, 0xD9, - 0x8F, 0xD9, 0x91, 0x72, 0x46, 0xD9, 0x80, 0xD9, - 0x90, 0xD9, 0x91, 0x72, 0x46, 0xE0, 0xA4, 0x95, - 0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0x96, - 0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0x97, - 0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0x9C, - 0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0xA1, - // Bytes 4540 - 457f - 0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0xA2, - 0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0xAB, - 0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA4, 0xAF, - 0xE0, 0xA4, 0xBC, 0x09, 0x46, 0xE0, 0xA6, 0xA1, - 0xE0, 0xA6, 0xBC, 0x09, 0x46, 0xE0, 0xA6, 0xA2, - 0xE0, 0xA6, 0xBC, 0x09, 0x46, 0xE0, 0xA6, 0xAF, - 0xE0, 0xA6, 0xBC, 0x09, 0x46, 0xE0, 0xA8, 0x96, - 0xE0, 0xA8, 0xBC, 0x09, 0x46, 0xE0, 0xA8, 0x97, - // Bytes 4580 - 45bf - 0xE0, 0xA8, 0xBC, 0x09, 0x46, 0xE0, 0xA8, 0x9C, - 0xE0, 0xA8, 0xBC, 0x09, 0x46, 0xE0, 0xA8, 0xAB, - 0xE0, 0xA8, 0xBC, 0x09, 0x46, 0xE0, 0xA8, 0xB2, - 0xE0, 0xA8, 0xBC, 0x09, 0x46, 0xE0, 0xA8, 0xB8, - 0xE0, 0xA8, 0xBC, 0x09, 0x46, 0xE0, 0xAC, 0xA1, - 0xE0, 0xAC, 0xBC, 0x09, 0x46, 0xE0, 0xAC, 0xA2, - 0xE0, 0xAC, 0xBC, 0x09, 0x46, 0xE0, 0xBE, 0xB2, - 0xE0, 0xBE, 0x80, 0x9D, 0x46, 0xE0, 0xBE, 0xB3, - // Bytes 45c0 - 45ff - 0xE0, 0xBE, 0x80, 0x9D, 0x46, 0xE3, 0x83, 0x86, - 0xE3, 0x82, 0x99, 0x0D, 0x48, 0xF0, 0x9D, 0x85, - 0x97, 0xF0, 0x9D, 0x85, 0xA5, 0xAD, 0x48, 0xF0, - 0x9D, 0x85, 0x98, 0xF0, 0x9D, 0x85, 0xA5, 0xAD, - 0x48, 0xF0, 0x9D, 0x86, 0xB9, 0xF0, 0x9D, 0x85, - 0xA5, 0xAD, 0x48, 0xF0, 0x9D, 0x86, 0xBA, 0xF0, - 0x9D, 0x85, 0xA5, 0xAD, 0x49, 0xE0, 0xBE, 0xB2, - 0xE0, 0xBD, 0xB1, 0xE0, 0xBE, 0x80, 0x9E, 0x49, - // Bytes 4600 - 463f - 0xE0, 0xBE, 0xB3, 0xE0, 0xBD, 0xB1, 0xE0, 0xBE, - 0x80, 0x9E, 0x4C, 0xF0, 0x9D, 0x85, 0x98, 0xF0, - 0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85, 0xAE, 0xAE, - 0x4C, 0xF0, 0x9D, 0x85, 0x98, 0xF0, 0x9D, 0x85, - 0xA5, 0xF0, 0x9D, 0x85, 0xAF, 0xAE, 0x4C, 0xF0, - 0x9D, 0x85, 0x98, 0xF0, 0x9D, 0x85, 0xA5, 0xF0, - 0x9D, 0x85, 0xB0, 0xAE, 0x4C, 0xF0, 0x9D, 0x85, - 0x98, 0xF0, 0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85, - // Bytes 4640 - 467f - 0xB1, 0xAE, 0x4C, 0xF0, 0x9D, 0x85, 0x98, 0xF0, - 0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85, 0xB2, 0xAE, - 0x4C, 0xF0, 0x9D, 0x86, 0xB9, 0xF0, 0x9D, 0x85, - 0xA5, 0xF0, 0x9D, 0x85, 0xAE, 0xAE, 0x4C, 0xF0, - 0x9D, 0x86, 0xB9, 0xF0, 0x9D, 0x85, 0xA5, 0xF0, - 0x9D, 0x85, 0xAF, 0xAE, 0x4C, 0xF0, 0x9D, 0x86, - 0xBA, 0xF0, 0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85, - 0xAE, 0xAE, 0x4C, 0xF0, 0x9D, 0x86, 0xBA, 0xF0, - // Bytes 4680 - 46bf - 0x9D, 0x85, 0xA5, 0xF0, 0x9D, 0x85, 0xAF, 0xAE, - 0x83, 0x41, 0xCC, 0x82, 0xC9, 0x83, 0x41, 0xCC, - 0x86, 0xC9, 0x83, 0x41, 0xCC, 0x87, 0xC9, 0x83, - 0x41, 0xCC, 0x88, 0xC9, 0x83, 0x41, 0xCC, 0x8A, - 0xC9, 0x83, 0x41, 0xCC, 0xA3, 0xB5, 0x83, 0x43, - 0xCC, 0xA7, 0xA5, 0x83, 0x45, 0xCC, 0x82, 0xC9, - 0x83, 0x45, 0xCC, 0x84, 0xC9, 0x83, 0x45, 0xCC, - 0xA3, 0xB5, 0x83, 0x45, 0xCC, 0xA7, 0xA5, 0x83, - // Bytes 46c0 - 46ff - 0x49, 0xCC, 0x88, 0xC9, 0x83, 0x4C, 0xCC, 0xA3, - 0xB5, 0x83, 0x4F, 0xCC, 0x82, 0xC9, 0x83, 0x4F, - 0xCC, 0x83, 0xC9, 0x83, 0x4F, 0xCC, 0x84, 0xC9, - 0x83, 0x4F, 0xCC, 0x87, 0xC9, 0x83, 0x4F, 0xCC, - 0x88, 0xC9, 0x83, 0x4F, 0xCC, 0x9B, 0xAD, 0x83, - 0x4F, 0xCC, 0xA3, 0xB5, 0x83, 0x4F, 0xCC, 0xA8, - 0xA5, 0x83, 0x52, 0xCC, 0xA3, 0xB5, 0x83, 0x53, - 0xCC, 0x81, 0xC9, 0x83, 0x53, 0xCC, 0x8C, 0xC9, - // Bytes 4700 - 473f - 0x83, 0x53, 0xCC, 0xA3, 0xB5, 0x83, 0x55, 0xCC, - 0x83, 0xC9, 0x83, 0x55, 0xCC, 0x84, 0xC9, 0x83, - 0x55, 0xCC, 0x88, 0xC9, 0x83, 0x55, 0xCC, 0x9B, - 0xAD, 0x83, 0x61, 0xCC, 0x82, 0xC9, 0x83, 0x61, - 0xCC, 0x86, 0xC9, 0x83, 0x61, 0xCC, 0x87, 0xC9, - 0x83, 0x61, 0xCC, 0x88, 0xC9, 0x83, 0x61, 0xCC, - 0x8A, 0xC9, 0x83, 0x61, 0xCC, 0xA3, 0xB5, 0x83, - 0x63, 0xCC, 0xA7, 0xA5, 0x83, 0x65, 0xCC, 0x82, - // Bytes 4740 - 477f - 0xC9, 0x83, 0x65, 0xCC, 0x84, 0xC9, 0x83, 0x65, - 0xCC, 0xA3, 0xB5, 0x83, 0x65, 0xCC, 0xA7, 0xA5, - 0x83, 0x69, 0xCC, 0x88, 0xC9, 0x83, 0x6C, 0xCC, - 0xA3, 0xB5, 0x83, 0x6F, 0xCC, 0x82, 0xC9, 0x83, - 0x6F, 0xCC, 0x83, 0xC9, 0x83, 0x6F, 0xCC, 0x84, - 0xC9, 0x83, 0x6F, 0xCC, 0x87, 0xC9, 0x83, 0x6F, - 0xCC, 0x88, 0xC9, 0x83, 0x6F, 0xCC, 0x9B, 0xAD, - 0x83, 0x6F, 0xCC, 0xA3, 0xB5, 0x83, 0x6F, 0xCC, - // Bytes 4780 - 47bf - 0xA8, 0xA5, 0x83, 0x72, 0xCC, 0xA3, 0xB5, 0x83, - 0x73, 0xCC, 0x81, 0xC9, 0x83, 0x73, 0xCC, 0x8C, - 0xC9, 0x83, 0x73, 0xCC, 0xA3, 0xB5, 0x83, 0x75, - 0xCC, 0x83, 0xC9, 0x83, 0x75, 0xCC, 0x84, 0xC9, - 0x83, 0x75, 0xCC, 0x88, 0xC9, 0x83, 0x75, 0xCC, - 0x9B, 0xAD, 0x84, 0xCE, 0x91, 0xCC, 0x93, 0xC9, - 0x84, 0xCE, 0x91, 0xCC, 0x94, 0xC9, 0x84, 0xCE, - 0x95, 0xCC, 0x93, 0xC9, 0x84, 0xCE, 0x95, 0xCC, - // Bytes 47c0 - 47ff - 0x94, 0xC9, 0x84, 0xCE, 0x97, 0xCC, 0x93, 0xC9, - 0x84, 0xCE, 0x97, 0xCC, 0x94, 0xC9, 0x84, 0xCE, - 0x99, 0xCC, 0x93, 0xC9, 0x84, 0xCE, 0x99, 0xCC, - 0x94, 0xC9, 0x84, 0xCE, 0x9F, 0xCC, 0x93, 0xC9, - 0x84, 0xCE, 0x9F, 0xCC, 0x94, 0xC9, 0x84, 0xCE, - 0xA5, 0xCC, 0x94, 0xC9, 0x84, 0xCE, 0xA9, 0xCC, - 0x93, 0xC9, 0x84, 0xCE, 0xA9, 0xCC, 0x94, 0xC9, - 0x84, 0xCE, 0xB1, 0xCC, 0x80, 0xC9, 0x84, 0xCE, - // Bytes 4800 - 483f - 0xB1, 0xCC, 0x81, 0xC9, 0x84, 0xCE, 0xB1, 0xCC, - 0x93, 0xC9, 0x84, 0xCE, 0xB1, 0xCC, 0x94, 0xC9, - 0x84, 0xCE, 0xB1, 0xCD, 0x82, 0xC9, 0x84, 0xCE, - 0xB5, 0xCC, 0x93, 0xC9, 0x84, 0xCE, 0xB5, 0xCC, - 0x94, 0xC9, 0x84, 0xCE, 0xB7, 0xCC, 0x80, 0xC9, - 0x84, 0xCE, 0xB7, 0xCC, 0x81, 0xC9, 0x84, 0xCE, - 0xB7, 0xCC, 0x93, 0xC9, 0x84, 0xCE, 0xB7, 0xCC, - 0x94, 0xC9, 0x84, 0xCE, 0xB7, 0xCD, 0x82, 0xC9, - // Bytes 4840 - 487f - 0x84, 0xCE, 0xB9, 0xCC, 0x88, 0xC9, 0x84, 0xCE, - 0xB9, 0xCC, 0x93, 0xC9, 0x84, 0xCE, 0xB9, 0xCC, - 0x94, 0xC9, 0x84, 0xCE, 0xBF, 0xCC, 0x93, 0xC9, - 0x84, 0xCE, 0xBF, 0xCC, 0x94, 0xC9, 0x84, 0xCF, - 0x85, 0xCC, 0x88, 0xC9, 0x84, 0xCF, 0x85, 0xCC, - 0x93, 0xC9, 0x84, 0xCF, 0x85, 0xCC, 0x94, 0xC9, - 0x84, 0xCF, 0x89, 0xCC, 0x80, 0xC9, 0x84, 0xCF, - 0x89, 0xCC, 0x81, 0xC9, 0x84, 0xCF, 0x89, 0xCC, - // Bytes 4880 - 48bf - 0x93, 0xC9, 0x84, 0xCF, 0x89, 0xCC, 0x94, 0xC9, - 0x84, 0xCF, 0x89, 0xCD, 0x82, 0xC9, 0x86, 0xCE, - 0x91, 0xCC, 0x93, 0xCC, 0x80, 0xCA, 0x86, 0xCE, - 0x91, 0xCC, 0x93, 0xCC, 0x81, 0xCA, 0x86, 0xCE, - 0x91, 0xCC, 0x93, 0xCD, 0x82, 0xCA, 0x86, 0xCE, - 0x91, 0xCC, 0x94, 0xCC, 0x80, 0xCA, 0x86, 0xCE, - 0x91, 0xCC, 0x94, 0xCC, 0x81, 0xCA, 0x86, 0xCE, - 0x91, 0xCC, 0x94, 0xCD, 0x82, 0xCA, 0x86, 0xCE, - // Bytes 48c0 - 48ff - 0x97, 0xCC, 0x93, 0xCC, 0x80, 0xCA, 0x86, 0xCE, - 0x97, 0xCC, 0x93, 0xCC, 0x81, 0xCA, 0x86, 0xCE, - 0x97, 0xCC, 0x93, 0xCD, 0x82, 0xCA, 0x86, 0xCE, - 0x97, 0xCC, 0x94, 0xCC, 0x80, 0xCA, 0x86, 0xCE, - 0x97, 0xCC, 0x94, 0xCC, 0x81, 0xCA, 0x86, 0xCE, - 0x97, 0xCC, 0x94, 0xCD, 0x82, 0xCA, 0x86, 0xCE, - 0xA9, 0xCC, 0x93, 0xCC, 0x80, 0xCA, 0x86, 0xCE, - 0xA9, 0xCC, 0x93, 0xCC, 0x81, 0xCA, 0x86, 0xCE, - // Bytes 4900 - 493f - 0xA9, 0xCC, 0x93, 0xCD, 0x82, 0xCA, 0x86, 0xCE, - 0xA9, 0xCC, 0x94, 0xCC, 0x80, 0xCA, 0x86, 0xCE, - 0xA9, 0xCC, 0x94, 0xCC, 0x81, 0xCA, 0x86, 0xCE, - 0xA9, 0xCC, 0x94, 0xCD, 0x82, 0xCA, 0x86, 0xCE, - 0xB1, 0xCC, 0x93, 0xCC, 0x80, 0xCA, 0x86, 0xCE, - 0xB1, 0xCC, 0x93, 0xCC, 0x81, 0xCA, 0x86, 0xCE, - 0xB1, 0xCC, 0x93, 0xCD, 0x82, 0xCA, 0x86, 0xCE, - 0xB1, 0xCC, 0x94, 0xCC, 0x80, 0xCA, 0x86, 0xCE, - // Bytes 4940 - 497f - 0xB1, 0xCC, 0x94, 0xCC, 0x81, 0xCA, 0x86, 0xCE, - 0xB1, 0xCC, 0x94, 0xCD, 0x82, 0xCA, 0x86, 0xCE, - 0xB7, 0xCC, 0x93, 0xCC, 0x80, 0xCA, 0x86, 0xCE, - 0xB7, 0xCC, 0x93, 0xCC, 0x81, 0xCA, 0x86, 0xCE, - 0xB7, 0xCC, 0x93, 0xCD, 0x82, 0xCA, 0x86, 0xCE, - 0xB7, 0xCC, 0x94, 0xCC, 0x80, 0xCA, 0x86, 0xCE, - 0xB7, 0xCC, 0x94, 0xCC, 0x81, 0xCA, 0x86, 0xCE, - 0xB7, 0xCC, 0x94, 0xCD, 0x82, 0xCA, 0x86, 0xCF, - // Bytes 4980 - 49bf - 0x89, 0xCC, 0x93, 0xCC, 0x80, 0xCA, 0x86, 0xCF, - 0x89, 0xCC, 0x93, 0xCC, 0x81, 0xCA, 0x86, 0xCF, - 0x89, 0xCC, 0x93, 0xCD, 0x82, 0xCA, 0x86, 0xCF, - 0x89, 0xCC, 0x94, 0xCC, 0x80, 0xCA, 0x86, 0xCF, - 0x89, 0xCC, 0x94, 0xCC, 0x81, 0xCA, 0x86, 0xCF, - 0x89, 0xCC, 0x94, 0xCD, 0x82, 0xCA, 0x42, 0xCC, - 0x80, 0xC9, 0x32, 0x42, 0xCC, 0x81, 0xC9, 0x32, - 0x42, 0xCC, 0x93, 0xC9, 0x32, 0x43, 0xE1, 0x85, - // Bytes 49c0 - 49ff - 0xA1, 0x01, 0x00, 0x43, 0xE1, 0x85, 0xA2, 0x01, - 0x00, 0x43, 0xE1, 0x85, 0xA3, 0x01, 0x00, 0x43, - 0xE1, 0x85, 0xA4, 0x01, 0x00, 0x43, 0xE1, 0x85, - 0xA5, 0x01, 0x00, 0x43, 0xE1, 0x85, 0xA6, 0x01, - 0x00, 0x43, 0xE1, 0x85, 0xA7, 0x01, 0x00, 0x43, - 0xE1, 0x85, 0xA8, 0x01, 0x00, 0x43, 0xE1, 0x85, - 0xA9, 0x01, 0x00, 0x43, 0xE1, 0x85, 0xAA, 0x01, - 0x00, 0x43, 0xE1, 0x85, 0xAB, 0x01, 0x00, 0x43, - // Bytes 4a00 - 4a3f - 0xE1, 0x85, 0xAC, 0x01, 0x00, 0x43, 0xE1, 0x85, - 0xAD, 0x01, 0x00, 0x43, 0xE1, 0x85, 0xAE, 0x01, - 0x00, 0x43, 0xE1, 0x85, 0xAF, 0x01, 0x00, 0x43, - 0xE1, 0x85, 0xB0, 0x01, 0x00, 0x43, 0xE1, 0x85, - 0xB1, 0x01, 0x00, 0x43, 0xE1, 0x85, 0xB2, 0x01, - 0x00, 0x43, 0xE1, 0x85, 0xB3, 0x01, 0x00, 0x43, - 0xE1, 0x85, 0xB4, 0x01, 0x00, 0x43, 0xE1, 0x85, - 0xB5, 0x01, 0x00, 0x43, 0xE1, 0x86, 0xAA, 0x01, - // Bytes 4a40 - 4a7f - 0x00, 0x43, 0xE1, 0x86, 0xAC, 0x01, 0x00, 0x43, - 0xE1, 0x86, 0xAD, 0x01, 0x00, 0x43, 0xE1, 0x86, - 0xB0, 0x01, 0x00, 0x43, 0xE1, 0x86, 0xB1, 0x01, - 0x00, 0x43, 0xE1, 0x86, 0xB2, 0x01, 0x00, 0x43, - 0xE1, 0x86, 0xB3, 0x01, 0x00, 0x43, 0xE1, 0x86, - 0xB4, 0x01, 0x00, 0x43, 0xE1, 0x86, 0xB5, 0x01, - 0x00, 0x44, 0xCC, 0x88, 0xCC, 0x81, 0xCA, 0x32, - 0x43, 0xE3, 0x82, 0x99, 0x0D, 0x03, 0x43, 0xE3, - // Bytes 4a80 - 4abf - 0x82, 0x9A, 0x0D, 0x03, 0x46, 0xE0, 0xBD, 0xB1, - 0xE0, 0xBD, 0xB2, 0x9E, 0x26, 0x46, 0xE0, 0xBD, - 0xB1, 0xE0, 0xBD, 0xB4, 0xA2, 0x26, 0x46, 0xE0, - 0xBD, 0xB1, 0xE0, 0xBE, 0x80, 0x9E, 0x26, 0x00, - 0x01, -} - -// lookup returns the trie value for the first UTF-8 encoding in s and -// the width in bytes of this encoding. The size will be 0 if s does not -// hold enough bytes to complete the encoding. len(s) must be greater than 0. -func (t *nfcTrie) lookup(s []byte) (v uint16, sz int) { - c0 := s[0] - switch { - case c0 < 0x80: // is ASCII - return nfcValues[c0], 1 - case c0 < 0xC2: - return 0, 1 // Illegal UTF-8: not a starter, not ASCII. - case c0 < 0xE0: // 2-byte UTF-8 - if len(s) < 2 { - return 0, 0 - } - i := nfcIndex[c0] - c1 := s[1] - if c1 < 0x80 || 0xC0 <= c1 { - return 0, 1 // Illegal UTF-8: not a continuation byte. - } - return t.lookupValue(uint32(i), c1), 2 - case c0 < 0xF0: // 3-byte UTF-8 - if len(s) < 3 { - return 0, 0 - } - i := nfcIndex[c0] - c1 := s[1] - if c1 < 0x80 || 0xC0 <= c1 { - return 0, 1 // Illegal UTF-8: not a continuation byte. - } - o := uint32(i)<<6 + uint32(c1) - i = nfcIndex[o] - c2 := s[2] - if c2 < 0x80 || 0xC0 <= c2 { - return 0, 2 // Illegal UTF-8: not a continuation byte. - } - return t.lookupValue(uint32(i), c2), 3 - case c0 < 0xF8: // 4-byte UTF-8 - if len(s) < 4 { - return 0, 0 - } - i := nfcIndex[c0] - c1 := s[1] - if c1 < 0x80 || 0xC0 <= c1 { - return 0, 1 // Illegal UTF-8: not a continuation byte. - } - o := uint32(i)<<6 + uint32(c1) - i = nfcIndex[o] - c2 := s[2] - if c2 < 0x80 || 0xC0 <= c2 { - return 0, 2 // Illegal UTF-8: not a continuation byte. - } - o = uint32(i)<<6 + uint32(c2) - i = nfcIndex[o] - c3 := s[3] - if c3 < 0x80 || 0xC0 <= c3 { - return 0, 3 // Illegal UTF-8: not a continuation byte. - } - return t.lookupValue(uint32(i), c3), 4 - } - // Illegal rune - return 0, 1 -} - -// lookupUnsafe returns the trie value for the first UTF-8 encoding in s. -// s must start with a full and valid UTF-8 encoded rune. -func (t *nfcTrie) lookupUnsafe(s []byte) uint16 { - c0 := s[0] - if c0 < 0x80 { // is ASCII - return nfcValues[c0] - } - i := nfcIndex[c0] - if c0 < 0xE0 { // 2-byte UTF-8 - return t.lookupValue(uint32(i), s[1]) - } - i = nfcIndex[uint32(i)<<6+uint32(s[1])] - if c0 < 0xF0 { // 3-byte UTF-8 - return t.lookupValue(uint32(i), s[2]) - } - i = nfcIndex[uint32(i)<<6+uint32(s[2])] - if c0 < 0xF8 { // 4-byte UTF-8 - return t.lookupValue(uint32(i), s[3]) - } - return 0 -} - -// lookupString returns the trie value for the first UTF-8 encoding in s and -// the width in bytes of this encoding. The size will be 0 if s does not -// hold enough bytes to complete the encoding. len(s) must be greater than 0. -func (t *nfcTrie) lookupString(s string) (v uint16, sz int) { - c0 := s[0] - switch { - case c0 < 0x80: // is ASCII - return nfcValues[c0], 1 - case c0 < 0xC2: - return 0, 1 // Illegal UTF-8: not a starter, not ASCII. - case c0 < 0xE0: // 2-byte UTF-8 - if len(s) < 2 { - return 0, 0 - } - i := nfcIndex[c0] - c1 := s[1] - if c1 < 0x80 || 0xC0 <= c1 { - return 0, 1 // Illegal UTF-8: not a continuation byte. - } - return t.lookupValue(uint32(i), c1), 2 - case c0 < 0xF0: // 3-byte UTF-8 - if len(s) < 3 { - return 0, 0 - } - i := nfcIndex[c0] - c1 := s[1] - if c1 < 0x80 || 0xC0 <= c1 { - return 0, 1 // Illegal UTF-8: not a continuation byte. - } - o := uint32(i)<<6 + uint32(c1) - i = nfcIndex[o] - c2 := s[2] - if c2 < 0x80 || 0xC0 <= c2 { - return 0, 2 // Illegal UTF-8: not a continuation byte. - } - return t.lookupValue(uint32(i), c2), 3 - case c0 < 0xF8: // 4-byte UTF-8 - if len(s) < 4 { - return 0, 0 - } - i := nfcIndex[c0] - c1 := s[1] - if c1 < 0x80 || 0xC0 <= c1 { - return 0, 1 // Illegal UTF-8: not a continuation byte. - } - o := uint32(i)<<6 + uint32(c1) - i = nfcIndex[o] - c2 := s[2] - if c2 < 0x80 || 0xC0 <= c2 { - return 0, 2 // Illegal UTF-8: not a continuation byte. - } - o = uint32(i)<<6 + uint32(c2) - i = nfcIndex[o] - c3 := s[3] - if c3 < 0x80 || 0xC0 <= c3 { - return 0, 3 // Illegal UTF-8: not a continuation byte. - } - return t.lookupValue(uint32(i), c3), 4 - } - // Illegal rune - return 0, 1 -} - -// lookupStringUnsafe returns the trie value for the first UTF-8 encoding in s. -// s must start with a full and valid UTF-8 encoded rune. -func (t *nfcTrie) lookupStringUnsafe(s string) uint16 { - c0 := s[0] - if c0 < 0x80 { // is ASCII - return nfcValues[c0] - } - i := nfcIndex[c0] - if c0 < 0xE0 { // 2-byte UTF-8 - return t.lookupValue(uint32(i), s[1]) - } - i = nfcIndex[uint32(i)<<6+uint32(s[1])] - if c0 < 0xF0 { // 3-byte UTF-8 - return t.lookupValue(uint32(i), s[2]) - } - i = nfcIndex[uint32(i)<<6+uint32(s[2])] - if c0 < 0xF8 { // 4-byte UTF-8 - return t.lookupValue(uint32(i), s[3]) - } - return 0 -} - -// nfcTrie. Total size: 10332 bytes (10.09 KiB). Checksum: 51cc525b297fc970. -type nfcTrie struct{} - -func newNfcTrie(i int) *nfcTrie { - return &nfcTrie{} -} - -// lookupValue determines the type of block n and looks up the value for b. -func (t *nfcTrie) lookupValue(n uint32, b byte) uint16 { - switch { - case n < 44: - return uint16(nfcValues[n<<6+uint32(b)]) - default: - n -= 44 - return uint16(nfcSparse.lookup(n, b)) - } -} - -// nfcValues: 46 blocks, 2944 entries, 5888 bytes -// The third block is the zero block. -var nfcValues = [2944]uint16{ - // Block 0x0, offset 0x0 - 0x3c: 0xa000, 0x3d: 0xa000, 0x3e: 0xa000, - // Block 0x1, offset 0x40 - 0x41: 0xa000, 0x42: 0xa000, 0x43: 0xa000, 0x44: 0xa000, 0x45: 0xa000, - 0x46: 0xa000, 0x47: 0xa000, 0x48: 0xa000, 0x49: 0xa000, 0x4a: 0xa000, 0x4b: 0xa000, - 0x4c: 0xa000, 0x4d: 0xa000, 0x4e: 0xa000, 0x4f: 0xa000, 0x50: 0xa000, - 0x52: 0xa000, 0x53: 0xa000, 0x54: 0xa000, 0x55: 0xa000, 0x56: 0xa000, 0x57: 0xa000, - 0x58: 0xa000, 0x59: 0xa000, 0x5a: 0xa000, - 0x61: 0xa000, 0x62: 0xa000, 0x63: 0xa000, - 0x64: 0xa000, 0x65: 0xa000, 0x66: 0xa000, 0x67: 0xa000, 0x68: 0xa000, 0x69: 0xa000, - 0x6a: 0xa000, 0x6b: 0xa000, 0x6c: 0xa000, 0x6d: 0xa000, 0x6e: 0xa000, 0x6f: 0xa000, - 0x70: 0xa000, 0x72: 0xa000, 0x73: 0xa000, 0x74: 0xa000, 0x75: 0xa000, - 0x76: 0xa000, 0x77: 0xa000, 0x78: 0xa000, 0x79: 0xa000, 0x7a: 0xa000, - // Block 0x2, offset 0x80 - // Block 0x3, offset 0xc0 - 0xc0: 0x2f6f, 0xc1: 0x2f74, 0xc2: 0x4688, 0xc3: 0x2f79, 0xc4: 0x4697, 0xc5: 0x469c, - 0xc6: 0xa000, 0xc7: 0x46a6, 0xc8: 0x2fe2, 0xc9: 0x2fe7, 0xca: 0x46ab, 0xcb: 0x2ffb, - 0xcc: 0x306e, 0xcd: 0x3073, 0xce: 0x3078, 0xcf: 0x46bf, 0xd1: 0x3104, - 0xd2: 0x3127, 0xd3: 0x312c, 0xd4: 0x46c9, 0xd5: 0x46ce, 0xd6: 0x46dd, - 0xd8: 0xa000, 0xd9: 0x31b3, 0xda: 0x31b8, 0xdb: 0x31bd, 0xdc: 0x470f, 0xdd: 0x3235, - 0xe0: 0x327b, 0xe1: 0x3280, 0xe2: 0x4719, 0xe3: 0x3285, - 0xe4: 0x4728, 0xe5: 0x472d, 0xe6: 0xa000, 0xe7: 0x4737, 0xe8: 0x32ee, 0xe9: 0x32f3, - 0xea: 0x473c, 0xeb: 0x3307, 0xec: 0x337f, 0xed: 0x3384, 0xee: 0x3389, 0xef: 0x4750, - 0xf1: 0x3415, 0xf2: 0x3438, 0xf3: 0x343d, 0xf4: 0x475a, 0xf5: 0x475f, - 0xf6: 0x476e, 0xf8: 0xa000, 0xf9: 0x34c9, 0xfa: 0x34ce, 0xfb: 0x34d3, - 0xfc: 0x47a0, 0xfd: 0x3550, 0xff: 0x3569, - // Block 0x4, offset 0x100 - 0x100: 0x2f7e, 0x101: 0x328a, 0x102: 0x468d, 0x103: 0x471e, 0x104: 0x2f9c, 0x105: 0x32a8, - 0x106: 0x2fb0, 0x107: 0x32bc, 0x108: 0x2fb5, 0x109: 0x32c1, 0x10a: 0x2fba, 0x10b: 0x32c6, - 0x10c: 0x2fbf, 0x10d: 0x32cb, 0x10e: 0x2fc9, 0x10f: 0x32d5, - 0x112: 0x46b0, 0x113: 0x4741, 0x114: 0x2ff1, 0x115: 0x32fd, 0x116: 0x2ff6, 0x117: 0x3302, - 0x118: 0x3014, 0x119: 0x3320, 0x11a: 0x3005, 0x11b: 0x3311, 0x11c: 0x302d, 0x11d: 0x3339, - 0x11e: 0x3037, 0x11f: 0x3343, 0x120: 0x303c, 0x121: 0x3348, 0x122: 0x3046, 0x123: 0x3352, - 0x124: 0x304b, 0x125: 0x3357, 0x128: 0x307d, 0x129: 0x338e, - 0x12a: 0x3082, 0x12b: 0x3393, 0x12c: 0x3087, 0x12d: 0x3398, 0x12e: 0x30aa, 0x12f: 0x33b6, - 0x130: 0x308c, 0x134: 0x30b4, 0x135: 0x33c0, - 0x136: 0x30c8, 0x137: 0x33d9, 0x139: 0x30d2, 0x13a: 0x33e3, 0x13b: 0x30dc, - 0x13c: 0x33ed, 0x13d: 0x30d7, 0x13e: 0x33e8, - // Block 0x5, offset 0x140 - 0x143: 0x30ff, 0x144: 0x3410, 0x145: 0x3118, - 0x146: 0x3429, 0x147: 0x310e, 0x148: 0x341f, - 0x14c: 0x46d3, 0x14d: 0x4764, 0x14e: 0x3131, 0x14f: 0x3442, 0x150: 0x313b, 0x151: 0x344c, - 0x154: 0x3159, 0x155: 0x346a, 0x156: 0x3172, 0x157: 0x3483, - 0x158: 0x3163, 0x159: 0x3474, 0x15a: 0x46f6, 0x15b: 0x4787, 0x15c: 0x317c, 0x15d: 0x348d, - 0x15e: 0x318b, 0x15f: 0x349c, 0x160: 0x46fb, 0x161: 0x478c, 0x162: 0x31a4, 0x163: 0x34ba, - 0x164: 0x3195, 0x165: 0x34ab, 0x168: 0x4705, 0x169: 0x4796, - 0x16a: 0x470a, 0x16b: 0x479b, 0x16c: 0x31c2, 0x16d: 0x34d8, 0x16e: 0x31cc, 0x16f: 0x34e2, - 0x170: 0x31d1, 0x171: 0x34e7, 0x172: 0x31ef, 0x173: 0x3505, 0x174: 0x3212, 0x175: 0x3528, - 0x176: 0x323a, 0x177: 0x3555, 0x178: 0x324e, 0x179: 0x325d, 0x17a: 0x357d, 0x17b: 0x3267, - 0x17c: 0x3587, 0x17d: 0x326c, 0x17e: 0x358c, 0x17f: 0xa000, - // Block 0x6, offset 0x180 - 0x184: 0x8100, 0x185: 0x8100, - 0x186: 0x8100, - 0x18d: 0x2f88, 0x18e: 0x3294, 0x18f: 0x3096, 0x190: 0x33a2, 0x191: 0x3140, - 0x192: 0x3451, 0x193: 0x31d6, 0x194: 0x34ec, 0x195: 0x39cf, 0x196: 0x3b5e, 0x197: 0x39c8, - 0x198: 0x3b57, 0x199: 0x39d6, 0x19a: 0x3b65, 0x19b: 0x39c1, 0x19c: 0x3b50, - 0x19e: 0x38b0, 0x19f: 0x3a3f, 0x1a0: 0x38a9, 0x1a1: 0x3a38, 0x1a2: 0x35b3, 0x1a3: 0x35c5, - 0x1a6: 0x3041, 0x1a7: 0x334d, 0x1a8: 0x30be, 0x1a9: 0x33cf, - 0x1aa: 0x46ec, 0x1ab: 0x477d, 0x1ac: 0x3990, 0x1ad: 0x3b1f, 0x1ae: 0x35d7, 0x1af: 0x35dd, - 0x1b0: 0x33c5, 0x1b4: 0x3028, 0x1b5: 0x3334, - 0x1b8: 0x30fa, 0x1b9: 0x340b, 0x1ba: 0x38b7, 0x1bb: 0x3a46, - 0x1bc: 0x35ad, 0x1bd: 0x35bf, 0x1be: 0x35b9, 0x1bf: 0x35cb, - // Block 0x7, offset 0x1c0 - 0x1c0: 0x2f8d, 0x1c1: 0x3299, 0x1c2: 0x2f92, 0x1c3: 0x329e, 0x1c4: 0x300a, 0x1c5: 0x3316, - 0x1c6: 0x300f, 0x1c7: 0x331b, 0x1c8: 0x309b, 0x1c9: 0x33a7, 0x1ca: 0x30a0, 0x1cb: 0x33ac, - 0x1cc: 0x3145, 0x1cd: 0x3456, 0x1ce: 0x314a, 0x1cf: 0x345b, 0x1d0: 0x3168, 0x1d1: 0x3479, - 0x1d2: 0x316d, 0x1d3: 0x347e, 0x1d4: 0x31db, 0x1d5: 0x34f1, 0x1d6: 0x31e0, 0x1d7: 0x34f6, - 0x1d8: 0x3186, 0x1d9: 0x3497, 0x1da: 0x319f, 0x1db: 0x34b5, - 0x1de: 0x305a, 0x1df: 0x3366, - 0x1e6: 0x4692, 0x1e7: 0x4723, 0x1e8: 0x46ba, 0x1e9: 0x474b, - 0x1ea: 0x395f, 0x1eb: 0x3aee, 0x1ec: 0x393c, 0x1ed: 0x3acb, 0x1ee: 0x46d8, 0x1ef: 0x4769, - 0x1f0: 0x3958, 0x1f1: 0x3ae7, 0x1f2: 0x3244, 0x1f3: 0x355f, - // Block 0x8, offset 0x200 - 0x200: 0x9932, 0x201: 0x9932, 0x202: 0x9932, 0x203: 0x9932, 0x204: 0x9932, 0x205: 0x8132, - 0x206: 0x9932, 0x207: 0x9932, 0x208: 0x9932, 0x209: 0x9932, 0x20a: 0x9932, 0x20b: 0x9932, - 0x20c: 0x9932, 0x20d: 0x8132, 0x20e: 0x8132, 0x20f: 0x9932, 0x210: 0x8132, 0x211: 0x9932, - 0x212: 0x8132, 0x213: 0x9932, 0x214: 0x9932, 0x215: 0x8133, 0x216: 0x812d, 0x217: 0x812d, - 0x218: 0x812d, 0x219: 0x812d, 0x21a: 0x8133, 0x21b: 0x992b, 0x21c: 0x812d, 0x21d: 0x812d, - 0x21e: 0x812d, 0x21f: 0x812d, 0x220: 0x812d, 0x221: 0x8129, 0x222: 0x8129, 0x223: 0x992d, - 0x224: 0x992d, 0x225: 0x992d, 0x226: 0x992d, 0x227: 0x9929, 0x228: 0x9929, 0x229: 0x812d, - 0x22a: 0x812d, 0x22b: 0x812d, 0x22c: 0x812d, 0x22d: 0x992d, 0x22e: 0x992d, 0x22f: 0x812d, - 0x230: 0x992d, 0x231: 0x992d, 0x232: 0x812d, 0x233: 0x812d, 0x234: 0x8101, 0x235: 0x8101, - 0x236: 0x8101, 0x237: 0x8101, 0x238: 0x9901, 0x239: 0x812d, 0x23a: 0x812d, 0x23b: 0x812d, - 0x23c: 0x812d, 0x23d: 0x8132, 0x23e: 0x8132, 0x23f: 0x8132, - // Block 0x9, offset 0x240 - 0x240: 0x49ae, 0x241: 0x49b3, 0x242: 0x9932, 0x243: 0x49b8, 0x244: 0x4a71, 0x245: 0x9936, - 0x246: 0x8132, 0x247: 0x812d, 0x248: 0x812d, 0x249: 0x812d, 0x24a: 0x8132, 0x24b: 0x8132, - 0x24c: 0x8132, 0x24d: 0x812d, 0x24e: 0x812d, 0x250: 0x8132, 0x251: 0x8132, - 0x252: 0x8132, 0x253: 0x812d, 0x254: 0x812d, 0x255: 0x812d, 0x256: 0x812d, 0x257: 0x8132, - 0x258: 0x8133, 0x259: 0x812d, 0x25a: 0x812d, 0x25b: 0x8132, 0x25c: 0x8134, 0x25d: 0x8135, - 0x25e: 0x8135, 0x25f: 0x8134, 0x260: 0x8135, 0x261: 0x8135, 0x262: 0x8134, 0x263: 0x8132, - 0x264: 0x8132, 0x265: 0x8132, 0x266: 0x8132, 0x267: 0x8132, 0x268: 0x8132, 0x269: 0x8132, - 0x26a: 0x8132, 0x26b: 0x8132, 0x26c: 0x8132, 0x26d: 0x8132, 0x26e: 0x8132, 0x26f: 0x8132, - 0x274: 0x0170, - 0x27a: 0x8100, - 0x27e: 0x0037, - // Block 0xa, offset 0x280 - 0x284: 0x8100, 0x285: 0x35a1, - 0x286: 0x35e9, 0x287: 0x00ce, 0x288: 0x3607, 0x289: 0x3613, 0x28a: 0x3625, - 0x28c: 0x3643, 0x28e: 0x3655, 0x28f: 0x3673, 0x290: 0x3e08, 0x291: 0xa000, - 0x295: 0xa000, 0x297: 0xa000, - 0x299: 0xa000, - 0x29f: 0xa000, 0x2a1: 0xa000, - 0x2a5: 0xa000, 0x2a9: 0xa000, - 0x2aa: 0x3637, 0x2ab: 0x3667, 0x2ac: 0x47fe, 0x2ad: 0x3697, 0x2ae: 0x4828, 0x2af: 0x36a9, - 0x2b0: 0x3e70, 0x2b1: 0xa000, 0x2b5: 0xa000, - 0x2b7: 0xa000, 0x2b9: 0xa000, - 0x2bf: 0xa000, - // Block 0xb, offset 0x2c0 - 0x2c0: 0x3721, 0x2c1: 0x372d, 0x2c3: 0x371b, - 0x2c6: 0xa000, 0x2c7: 0x3709, - 0x2cc: 0x375d, 0x2cd: 0x3745, 0x2ce: 0x376f, 0x2d0: 0xa000, - 0x2d3: 0xa000, 0x2d5: 0xa000, 0x2d6: 0xa000, 0x2d7: 0xa000, - 0x2d8: 0xa000, 0x2d9: 0x3751, 0x2da: 0xa000, - 0x2de: 0xa000, 0x2e3: 0xa000, - 0x2e7: 0xa000, - 0x2eb: 0xa000, 0x2ed: 0xa000, - 0x2f0: 0xa000, 0x2f3: 0xa000, 0x2f5: 0xa000, - 0x2f6: 0xa000, 0x2f7: 0xa000, 0x2f8: 0xa000, 0x2f9: 0x37d5, 0x2fa: 0xa000, - 0x2fe: 0xa000, - // Block 0xc, offset 0x300 - 0x301: 0x3733, 0x302: 0x37b7, - 0x310: 0x370f, 0x311: 0x3793, - 0x312: 0x3715, 0x313: 0x3799, 0x316: 0x3727, 0x317: 0x37ab, - 0x318: 0xa000, 0x319: 0xa000, 0x31a: 0x3829, 0x31b: 0x382f, 0x31c: 0x3739, 0x31d: 0x37bd, - 0x31e: 0x373f, 0x31f: 0x37c3, 0x322: 0x374b, 0x323: 0x37cf, - 0x324: 0x3757, 0x325: 0x37db, 0x326: 0x3763, 0x327: 0x37e7, 0x328: 0xa000, 0x329: 0xa000, - 0x32a: 0x3835, 0x32b: 0x383b, 0x32c: 0x378d, 0x32d: 0x3811, 0x32e: 0x3769, 0x32f: 0x37ed, - 0x330: 0x3775, 0x331: 0x37f9, 0x332: 0x377b, 0x333: 0x37ff, 0x334: 0x3781, 0x335: 0x3805, - 0x338: 0x3787, 0x339: 0x380b, - // Block 0xd, offset 0x340 - 0x351: 0x812d, - 0x352: 0x8132, 0x353: 0x8132, 0x354: 0x8132, 0x355: 0x8132, 0x356: 0x812d, 0x357: 0x8132, - 0x358: 0x8132, 0x359: 0x8132, 0x35a: 0x812e, 0x35b: 0x812d, 0x35c: 0x8132, 0x35d: 0x8132, - 0x35e: 0x8132, 0x35f: 0x8132, 0x360: 0x8132, 0x361: 0x8132, 0x362: 0x812d, 0x363: 0x812d, - 0x364: 0x812d, 0x365: 0x812d, 0x366: 0x812d, 0x367: 0x812d, 0x368: 0x8132, 0x369: 0x8132, - 0x36a: 0x812d, 0x36b: 0x8132, 0x36c: 0x8132, 0x36d: 0x812e, 0x36e: 0x8131, 0x36f: 0x8132, - 0x370: 0x8105, 0x371: 0x8106, 0x372: 0x8107, 0x373: 0x8108, 0x374: 0x8109, 0x375: 0x810a, - 0x376: 0x810b, 0x377: 0x810c, 0x378: 0x810d, 0x379: 0x810e, 0x37a: 0x810e, 0x37b: 0x810f, - 0x37c: 0x8110, 0x37d: 0x8111, 0x37f: 0x8112, - // Block 0xe, offset 0x380 - 0x388: 0xa000, 0x38a: 0xa000, 0x38b: 0x8116, - 0x38c: 0x8117, 0x38d: 0x8118, 0x38e: 0x8119, 0x38f: 0x811a, 0x390: 0x811b, 0x391: 0x811c, - 0x392: 0x811d, 0x393: 0x9932, 0x394: 0x9932, 0x395: 0x992d, 0x396: 0x812d, 0x397: 0x8132, - 0x398: 0x8132, 0x399: 0x8132, 0x39a: 0x8132, 0x39b: 0x8132, 0x39c: 0x812d, 0x39d: 0x8132, - 0x39e: 0x8132, 0x39f: 0x812d, - 0x3b0: 0x811e, - // Block 0xf, offset 0x3c0 - 0x3c5: 0xa000, - 0x3c6: 0x2d26, 0x3c7: 0xa000, 0x3c8: 0x2d2e, 0x3c9: 0xa000, 0x3ca: 0x2d36, 0x3cb: 0xa000, - 0x3cc: 0x2d3e, 0x3cd: 0xa000, 0x3ce: 0x2d46, 0x3d1: 0xa000, - 0x3d2: 0x2d4e, - 0x3f4: 0x8102, 0x3f5: 0x9900, - 0x3fa: 0xa000, 0x3fb: 0x2d56, - 0x3fc: 0xa000, 0x3fd: 0x2d5e, 0x3fe: 0xa000, 0x3ff: 0xa000, - // Block 0x10, offset 0x400 - 0x400: 0x2f97, 0x401: 0x32a3, 0x402: 0x2fa1, 0x403: 0x32ad, 0x404: 0x2fa6, 0x405: 0x32b2, - 0x406: 0x2fab, 0x407: 0x32b7, 0x408: 0x38cc, 0x409: 0x3a5b, 0x40a: 0x2fc4, 0x40b: 0x32d0, - 0x40c: 0x2fce, 0x40d: 0x32da, 0x40e: 0x2fdd, 0x40f: 0x32e9, 0x410: 0x2fd3, 0x411: 0x32df, - 0x412: 0x2fd8, 0x413: 0x32e4, 0x414: 0x38ef, 0x415: 0x3a7e, 0x416: 0x38f6, 0x417: 0x3a85, - 0x418: 0x3019, 0x419: 0x3325, 0x41a: 0x301e, 0x41b: 0x332a, 0x41c: 0x3904, 0x41d: 0x3a93, - 0x41e: 0x3023, 0x41f: 0x332f, 0x420: 0x3032, 0x421: 0x333e, 0x422: 0x3050, 0x423: 0x335c, - 0x424: 0x305f, 0x425: 0x336b, 0x426: 0x3055, 0x427: 0x3361, 0x428: 0x3064, 0x429: 0x3370, - 0x42a: 0x3069, 0x42b: 0x3375, 0x42c: 0x30af, 0x42d: 0x33bb, 0x42e: 0x390b, 0x42f: 0x3a9a, - 0x430: 0x30b9, 0x431: 0x33ca, 0x432: 0x30c3, 0x433: 0x33d4, 0x434: 0x30cd, 0x435: 0x33de, - 0x436: 0x46c4, 0x437: 0x4755, 0x438: 0x3912, 0x439: 0x3aa1, 0x43a: 0x30e6, 0x43b: 0x33f7, - 0x43c: 0x30e1, 0x43d: 0x33f2, 0x43e: 0x30eb, 0x43f: 0x33fc, - // Block 0x11, offset 0x440 - 0x440: 0x30f0, 0x441: 0x3401, 0x442: 0x30f5, 0x443: 0x3406, 0x444: 0x3109, 0x445: 0x341a, - 0x446: 0x3113, 0x447: 0x3424, 0x448: 0x3122, 0x449: 0x3433, 0x44a: 0x311d, 0x44b: 0x342e, - 0x44c: 0x3935, 0x44d: 0x3ac4, 0x44e: 0x3943, 0x44f: 0x3ad2, 0x450: 0x394a, 0x451: 0x3ad9, - 0x452: 0x3951, 0x453: 0x3ae0, 0x454: 0x314f, 0x455: 0x3460, 0x456: 0x3154, 0x457: 0x3465, - 0x458: 0x315e, 0x459: 0x346f, 0x45a: 0x46f1, 0x45b: 0x4782, 0x45c: 0x3997, 0x45d: 0x3b26, - 0x45e: 0x3177, 0x45f: 0x3488, 0x460: 0x3181, 0x461: 0x3492, 0x462: 0x4700, 0x463: 0x4791, - 0x464: 0x399e, 0x465: 0x3b2d, 0x466: 0x39a5, 0x467: 0x3b34, 0x468: 0x39ac, 0x469: 0x3b3b, - 0x46a: 0x3190, 0x46b: 0x34a1, 0x46c: 0x319a, 0x46d: 0x34b0, 0x46e: 0x31ae, 0x46f: 0x34c4, - 0x470: 0x31a9, 0x471: 0x34bf, 0x472: 0x31ea, 0x473: 0x3500, 0x474: 0x31f9, 0x475: 0x350f, - 0x476: 0x31f4, 0x477: 0x350a, 0x478: 0x39b3, 0x479: 0x3b42, 0x47a: 0x39ba, 0x47b: 0x3b49, - 0x47c: 0x31fe, 0x47d: 0x3514, 0x47e: 0x3203, 0x47f: 0x3519, - // Block 0x12, offset 0x480 - 0x480: 0x3208, 0x481: 0x351e, 0x482: 0x320d, 0x483: 0x3523, 0x484: 0x321c, 0x485: 0x3532, - 0x486: 0x3217, 0x487: 0x352d, 0x488: 0x3221, 0x489: 0x353c, 0x48a: 0x3226, 0x48b: 0x3541, - 0x48c: 0x322b, 0x48d: 0x3546, 0x48e: 0x3249, 0x48f: 0x3564, 0x490: 0x3262, 0x491: 0x3582, - 0x492: 0x3271, 0x493: 0x3591, 0x494: 0x3276, 0x495: 0x3596, 0x496: 0x337a, 0x497: 0x34a6, - 0x498: 0x3537, 0x499: 0x3573, 0x49b: 0x35d1, - 0x4a0: 0x46a1, 0x4a1: 0x4732, 0x4a2: 0x2f83, 0x4a3: 0x328f, - 0x4a4: 0x3878, 0x4a5: 0x3a07, 0x4a6: 0x3871, 0x4a7: 0x3a00, 0x4a8: 0x3886, 0x4a9: 0x3a15, - 0x4aa: 0x387f, 0x4ab: 0x3a0e, 0x4ac: 0x38be, 0x4ad: 0x3a4d, 0x4ae: 0x3894, 0x4af: 0x3a23, - 0x4b0: 0x388d, 0x4b1: 0x3a1c, 0x4b2: 0x38a2, 0x4b3: 0x3a31, 0x4b4: 0x389b, 0x4b5: 0x3a2a, - 0x4b6: 0x38c5, 0x4b7: 0x3a54, 0x4b8: 0x46b5, 0x4b9: 0x4746, 0x4ba: 0x3000, 0x4bb: 0x330c, - 0x4bc: 0x2fec, 0x4bd: 0x32f8, 0x4be: 0x38da, 0x4bf: 0x3a69, - // Block 0x13, offset 0x4c0 - 0x4c0: 0x38d3, 0x4c1: 0x3a62, 0x4c2: 0x38e8, 0x4c3: 0x3a77, 0x4c4: 0x38e1, 0x4c5: 0x3a70, - 0x4c6: 0x38fd, 0x4c7: 0x3a8c, 0x4c8: 0x3091, 0x4c9: 0x339d, 0x4ca: 0x30a5, 0x4cb: 0x33b1, - 0x4cc: 0x46e7, 0x4cd: 0x4778, 0x4ce: 0x3136, 0x4cf: 0x3447, 0x4d0: 0x3920, 0x4d1: 0x3aaf, - 0x4d2: 0x3919, 0x4d3: 0x3aa8, 0x4d4: 0x392e, 0x4d5: 0x3abd, 0x4d6: 0x3927, 0x4d7: 0x3ab6, - 0x4d8: 0x3989, 0x4d9: 0x3b18, 0x4da: 0x396d, 0x4db: 0x3afc, 0x4dc: 0x3966, 0x4dd: 0x3af5, - 0x4de: 0x397b, 0x4df: 0x3b0a, 0x4e0: 0x3974, 0x4e1: 0x3b03, 0x4e2: 0x3982, 0x4e3: 0x3b11, - 0x4e4: 0x31e5, 0x4e5: 0x34fb, 0x4e6: 0x31c7, 0x4e7: 0x34dd, 0x4e8: 0x39e4, 0x4e9: 0x3b73, - 0x4ea: 0x39dd, 0x4eb: 0x3b6c, 0x4ec: 0x39f2, 0x4ed: 0x3b81, 0x4ee: 0x39eb, 0x4ef: 0x3b7a, - 0x4f0: 0x39f9, 0x4f1: 0x3b88, 0x4f2: 0x3230, 0x4f3: 0x354b, 0x4f4: 0x3258, 0x4f5: 0x3578, - 0x4f6: 0x3253, 0x4f7: 0x356e, 0x4f8: 0x323f, 0x4f9: 0x355a, - // Block 0x14, offset 0x500 - 0x500: 0x4804, 0x501: 0x480a, 0x502: 0x491e, 0x503: 0x4936, 0x504: 0x4926, 0x505: 0x493e, - 0x506: 0x492e, 0x507: 0x4946, 0x508: 0x47aa, 0x509: 0x47b0, 0x50a: 0x488e, 0x50b: 0x48a6, - 0x50c: 0x4896, 0x50d: 0x48ae, 0x50e: 0x489e, 0x50f: 0x48b6, 0x510: 0x4816, 0x511: 0x481c, - 0x512: 0x3db8, 0x513: 0x3dc8, 0x514: 0x3dc0, 0x515: 0x3dd0, - 0x518: 0x47b6, 0x519: 0x47bc, 0x51a: 0x3ce8, 0x51b: 0x3cf8, 0x51c: 0x3cf0, 0x51d: 0x3d00, - 0x520: 0x482e, 0x521: 0x4834, 0x522: 0x494e, 0x523: 0x4966, - 0x524: 0x4956, 0x525: 0x496e, 0x526: 0x495e, 0x527: 0x4976, 0x528: 0x47c2, 0x529: 0x47c8, - 0x52a: 0x48be, 0x52b: 0x48d6, 0x52c: 0x48c6, 0x52d: 0x48de, 0x52e: 0x48ce, 0x52f: 0x48e6, - 0x530: 0x4846, 0x531: 0x484c, 0x532: 0x3e18, 0x533: 0x3e30, 0x534: 0x3e20, 0x535: 0x3e38, - 0x536: 0x3e28, 0x537: 0x3e40, 0x538: 0x47ce, 0x539: 0x47d4, 0x53a: 0x3d18, 0x53b: 0x3d30, - 0x53c: 0x3d20, 0x53d: 0x3d38, 0x53e: 0x3d28, 0x53f: 0x3d40, - // Block 0x15, offset 0x540 - 0x540: 0x4852, 0x541: 0x4858, 0x542: 0x3e48, 0x543: 0x3e58, 0x544: 0x3e50, 0x545: 0x3e60, - 0x548: 0x47da, 0x549: 0x47e0, 0x54a: 0x3d48, 0x54b: 0x3d58, - 0x54c: 0x3d50, 0x54d: 0x3d60, 0x550: 0x4864, 0x551: 0x486a, - 0x552: 0x3e80, 0x553: 0x3e98, 0x554: 0x3e88, 0x555: 0x3ea0, 0x556: 0x3e90, 0x557: 0x3ea8, - 0x559: 0x47e6, 0x55b: 0x3d68, 0x55d: 0x3d70, - 0x55f: 0x3d78, 0x560: 0x487c, 0x561: 0x4882, 0x562: 0x497e, 0x563: 0x4996, - 0x564: 0x4986, 0x565: 0x499e, 0x566: 0x498e, 0x567: 0x49a6, 0x568: 0x47ec, 0x569: 0x47f2, - 0x56a: 0x48ee, 0x56b: 0x4906, 0x56c: 0x48f6, 0x56d: 0x490e, 0x56e: 0x48fe, 0x56f: 0x4916, - 0x570: 0x47f8, 0x571: 0x431e, 0x572: 0x3691, 0x573: 0x4324, 0x574: 0x4822, 0x575: 0x432a, - 0x576: 0x36a3, 0x577: 0x4330, 0x578: 0x36c1, 0x579: 0x4336, 0x57a: 0x36d9, 0x57b: 0x433c, - 0x57c: 0x4870, 0x57d: 0x4342, - // Block 0x16, offset 0x580 - 0x580: 0x3da0, 0x581: 0x3da8, 0x582: 0x4184, 0x583: 0x41a2, 0x584: 0x418e, 0x585: 0x41ac, - 0x586: 0x4198, 0x587: 0x41b6, 0x588: 0x3cd8, 0x589: 0x3ce0, 0x58a: 0x40d0, 0x58b: 0x40ee, - 0x58c: 0x40da, 0x58d: 0x40f8, 0x58e: 0x40e4, 0x58f: 0x4102, 0x590: 0x3de8, 0x591: 0x3df0, - 0x592: 0x41c0, 0x593: 0x41de, 0x594: 0x41ca, 0x595: 0x41e8, 0x596: 0x41d4, 0x597: 0x41f2, - 0x598: 0x3d08, 0x599: 0x3d10, 0x59a: 0x410c, 0x59b: 0x412a, 0x59c: 0x4116, 0x59d: 0x4134, - 0x59e: 0x4120, 0x59f: 0x413e, 0x5a0: 0x3ec0, 0x5a1: 0x3ec8, 0x5a2: 0x41fc, 0x5a3: 0x421a, - 0x5a4: 0x4206, 0x5a5: 0x4224, 0x5a6: 0x4210, 0x5a7: 0x422e, 0x5a8: 0x3d80, 0x5a9: 0x3d88, - 0x5aa: 0x4148, 0x5ab: 0x4166, 0x5ac: 0x4152, 0x5ad: 0x4170, 0x5ae: 0x415c, 0x5af: 0x417a, - 0x5b0: 0x3685, 0x5b1: 0x367f, 0x5b2: 0x3d90, 0x5b3: 0x368b, 0x5b4: 0x3d98, - 0x5b6: 0x4810, 0x5b7: 0x3db0, 0x5b8: 0x35f5, 0x5b9: 0x35ef, 0x5ba: 0x35e3, 0x5bb: 0x42ee, - 0x5bc: 0x35fb, 0x5bd: 0x8100, 0x5be: 0x01d3, 0x5bf: 0xa100, - // Block 0x17, offset 0x5c0 - 0x5c0: 0x8100, 0x5c1: 0x35a7, 0x5c2: 0x3dd8, 0x5c3: 0x369d, 0x5c4: 0x3de0, - 0x5c6: 0x483a, 0x5c7: 0x3df8, 0x5c8: 0x3601, 0x5c9: 0x42f4, 0x5ca: 0x360d, 0x5cb: 0x42fa, - 0x5cc: 0x3619, 0x5cd: 0x3b8f, 0x5ce: 0x3b96, 0x5cf: 0x3b9d, 0x5d0: 0x36b5, 0x5d1: 0x36af, - 0x5d2: 0x3e00, 0x5d3: 0x44e4, 0x5d6: 0x36bb, 0x5d7: 0x3e10, - 0x5d8: 0x3631, 0x5d9: 0x362b, 0x5da: 0x361f, 0x5db: 0x4300, 0x5dd: 0x3ba4, - 0x5de: 0x3bab, 0x5df: 0x3bb2, 0x5e0: 0x36eb, 0x5e1: 0x36e5, 0x5e2: 0x3e68, 0x5e3: 0x44ec, - 0x5e4: 0x36cd, 0x5e5: 0x36d3, 0x5e6: 0x36f1, 0x5e7: 0x3e78, 0x5e8: 0x3661, 0x5e9: 0x365b, - 0x5ea: 0x364f, 0x5eb: 0x430c, 0x5ec: 0x3649, 0x5ed: 0x359b, 0x5ee: 0x42e8, 0x5ef: 0x0081, - 0x5f2: 0x3eb0, 0x5f3: 0x36f7, 0x5f4: 0x3eb8, - 0x5f6: 0x4888, 0x5f7: 0x3ed0, 0x5f8: 0x363d, 0x5f9: 0x4306, 0x5fa: 0x366d, 0x5fb: 0x4318, - 0x5fc: 0x3679, 0x5fd: 0x4256, 0x5fe: 0xa100, - // Block 0x18, offset 0x600 - 0x601: 0x3c06, 0x603: 0xa000, 0x604: 0x3c0d, 0x605: 0xa000, - 0x607: 0x3c14, 0x608: 0xa000, 0x609: 0x3c1b, - 0x60d: 0xa000, - 0x620: 0x2f65, 0x621: 0xa000, 0x622: 0x3c29, - 0x624: 0xa000, 0x625: 0xa000, - 0x62d: 0x3c22, 0x62e: 0x2f60, 0x62f: 0x2f6a, - 0x630: 0x3c30, 0x631: 0x3c37, 0x632: 0xa000, 0x633: 0xa000, 0x634: 0x3c3e, 0x635: 0x3c45, - 0x636: 0xa000, 0x637: 0xa000, 0x638: 0x3c4c, 0x639: 0x3c53, 0x63a: 0xa000, 0x63b: 0xa000, - 0x63c: 0xa000, 0x63d: 0xa000, - // Block 0x19, offset 0x640 - 0x640: 0x3c5a, 0x641: 0x3c61, 0x642: 0xa000, 0x643: 0xa000, 0x644: 0x3c76, 0x645: 0x3c7d, - 0x646: 0xa000, 0x647: 0xa000, 0x648: 0x3c84, 0x649: 0x3c8b, - 0x651: 0xa000, - 0x652: 0xa000, - 0x662: 0xa000, - 0x668: 0xa000, 0x669: 0xa000, - 0x66b: 0xa000, 0x66c: 0x3ca0, 0x66d: 0x3ca7, 0x66e: 0x3cae, 0x66f: 0x3cb5, - 0x672: 0xa000, 0x673: 0xa000, 0x674: 0xa000, 0x675: 0xa000, - // Block 0x1a, offset 0x680 - 0x686: 0xa000, 0x68b: 0xa000, - 0x68c: 0x3f08, 0x68d: 0xa000, 0x68e: 0x3f10, 0x68f: 0xa000, 0x690: 0x3f18, 0x691: 0xa000, - 0x692: 0x3f20, 0x693: 0xa000, 0x694: 0x3f28, 0x695: 0xa000, 0x696: 0x3f30, 0x697: 0xa000, - 0x698: 0x3f38, 0x699: 0xa000, 0x69a: 0x3f40, 0x69b: 0xa000, 0x69c: 0x3f48, 0x69d: 0xa000, - 0x69e: 0x3f50, 0x69f: 0xa000, 0x6a0: 0x3f58, 0x6a1: 0xa000, 0x6a2: 0x3f60, - 0x6a4: 0xa000, 0x6a5: 0x3f68, 0x6a6: 0xa000, 0x6a7: 0x3f70, 0x6a8: 0xa000, 0x6a9: 0x3f78, - 0x6af: 0xa000, - 0x6b0: 0x3f80, 0x6b1: 0x3f88, 0x6b2: 0xa000, 0x6b3: 0x3f90, 0x6b4: 0x3f98, 0x6b5: 0xa000, - 0x6b6: 0x3fa0, 0x6b7: 0x3fa8, 0x6b8: 0xa000, 0x6b9: 0x3fb0, 0x6ba: 0x3fb8, 0x6bb: 0xa000, - 0x6bc: 0x3fc0, 0x6bd: 0x3fc8, - // Block 0x1b, offset 0x6c0 - 0x6d4: 0x3f00, - 0x6d9: 0x9903, 0x6da: 0x9903, 0x6db: 0x8100, 0x6dc: 0x8100, 0x6dd: 0xa000, - 0x6de: 0x3fd0, - 0x6e6: 0xa000, - 0x6eb: 0xa000, 0x6ec: 0x3fe0, 0x6ed: 0xa000, 0x6ee: 0x3fe8, 0x6ef: 0xa000, - 0x6f0: 0x3ff0, 0x6f1: 0xa000, 0x6f2: 0x3ff8, 0x6f3: 0xa000, 0x6f4: 0x4000, 0x6f5: 0xa000, - 0x6f6: 0x4008, 0x6f7: 0xa000, 0x6f8: 0x4010, 0x6f9: 0xa000, 0x6fa: 0x4018, 0x6fb: 0xa000, - 0x6fc: 0x4020, 0x6fd: 0xa000, 0x6fe: 0x4028, 0x6ff: 0xa000, - // Block 0x1c, offset 0x700 - 0x700: 0x4030, 0x701: 0xa000, 0x702: 0x4038, 0x704: 0xa000, 0x705: 0x4040, - 0x706: 0xa000, 0x707: 0x4048, 0x708: 0xa000, 0x709: 0x4050, - 0x70f: 0xa000, 0x710: 0x4058, 0x711: 0x4060, - 0x712: 0xa000, 0x713: 0x4068, 0x714: 0x4070, 0x715: 0xa000, 0x716: 0x4078, 0x717: 0x4080, - 0x718: 0xa000, 0x719: 0x4088, 0x71a: 0x4090, 0x71b: 0xa000, 0x71c: 0x4098, 0x71d: 0x40a0, - 0x72f: 0xa000, - 0x730: 0xa000, 0x731: 0xa000, 0x732: 0xa000, 0x734: 0x3fd8, - 0x737: 0x40a8, 0x738: 0x40b0, 0x739: 0x40b8, 0x73a: 0x40c0, - 0x73d: 0xa000, 0x73e: 0x40c8, - // Block 0x1d, offset 0x740 - 0x740: 0x1377, 0x741: 0x0cfb, 0x742: 0x13d3, 0x743: 0x139f, 0x744: 0x0e57, 0x745: 0x06eb, - 0x746: 0x08df, 0x747: 0x162b, 0x748: 0x162b, 0x749: 0x0a0b, 0x74a: 0x145f, 0x74b: 0x0943, - 0x74c: 0x0a07, 0x74d: 0x0bef, 0x74e: 0x0fcf, 0x74f: 0x115f, 0x750: 0x1297, 0x751: 0x12d3, - 0x752: 0x1307, 0x753: 0x141b, 0x754: 0x0d73, 0x755: 0x0dff, 0x756: 0x0eab, 0x757: 0x0f43, - 0x758: 0x125f, 0x759: 0x1447, 0x75a: 0x1573, 0x75b: 0x070f, 0x75c: 0x08b3, 0x75d: 0x0d87, - 0x75e: 0x0ecf, 0x75f: 0x1293, 0x760: 0x15c3, 0x761: 0x0ab3, 0x762: 0x0e77, 0x763: 0x1283, - 0x764: 0x1317, 0x765: 0x0c23, 0x766: 0x11bb, 0x767: 0x12df, 0x768: 0x0b1f, 0x769: 0x0d0f, - 0x76a: 0x0e17, 0x76b: 0x0f1b, 0x76c: 0x1427, 0x76d: 0x074f, 0x76e: 0x07e7, 0x76f: 0x0853, - 0x770: 0x0c8b, 0x771: 0x0d7f, 0x772: 0x0ecb, 0x773: 0x0fef, 0x774: 0x1177, 0x775: 0x128b, - 0x776: 0x12a3, 0x777: 0x13c7, 0x778: 0x14ef, 0x779: 0x15a3, 0x77a: 0x15bf, 0x77b: 0x102b, - 0x77c: 0x106b, 0x77d: 0x1123, 0x77e: 0x1243, 0x77f: 0x147b, - // Block 0x1e, offset 0x780 - 0x780: 0x15cb, 0x781: 0x134b, 0x782: 0x09c7, 0x783: 0x0b3b, 0x784: 0x10db, 0x785: 0x119b, - 0x786: 0x0eff, 0x787: 0x1033, 0x788: 0x1397, 0x789: 0x14e7, 0x78a: 0x09c3, 0x78b: 0x0a8f, - 0x78c: 0x0d77, 0x78d: 0x0e2b, 0x78e: 0x0e5f, 0x78f: 0x1113, 0x790: 0x113b, 0x791: 0x14a7, - 0x792: 0x084f, 0x793: 0x11a7, 0x794: 0x07f3, 0x795: 0x07ef, 0x796: 0x1097, 0x797: 0x1127, - 0x798: 0x125b, 0x799: 0x14af, 0x79a: 0x1367, 0x79b: 0x0c27, 0x79c: 0x0d73, 0x79d: 0x1357, - 0x79e: 0x06f7, 0x79f: 0x0a63, 0x7a0: 0x0b93, 0x7a1: 0x0f2f, 0x7a2: 0x0faf, 0x7a3: 0x0873, - 0x7a4: 0x103b, 0x7a5: 0x075f, 0x7a6: 0x0b77, 0x7a7: 0x06d7, 0x7a8: 0x0deb, 0x7a9: 0x0ca3, - 0x7aa: 0x110f, 0x7ab: 0x08c7, 0x7ac: 0x09b3, 0x7ad: 0x0ffb, 0x7ae: 0x1263, 0x7af: 0x133b, - 0x7b0: 0x0db7, 0x7b1: 0x13f7, 0x7b2: 0x0de3, 0x7b3: 0x0c37, 0x7b4: 0x121b, 0x7b5: 0x0c57, - 0x7b6: 0x0fab, 0x7b7: 0x072b, 0x7b8: 0x07a7, 0x7b9: 0x07eb, 0x7ba: 0x0d53, 0x7bb: 0x10fb, - 0x7bc: 0x11f3, 0x7bd: 0x1347, 0x7be: 0x145b, 0x7bf: 0x085b, - // Block 0x1f, offset 0x7c0 - 0x7c0: 0x090f, 0x7c1: 0x0a17, 0x7c2: 0x0b2f, 0x7c3: 0x0cbf, 0x7c4: 0x0e7b, 0x7c5: 0x103f, - 0x7c6: 0x1497, 0x7c7: 0x157b, 0x7c8: 0x15cf, 0x7c9: 0x15e7, 0x7ca: 0x0837, 0x7cb: 0x0cf3, - 0x7cc: 0x0da3, 0x7cd: 0x13eb, 0x7ce: 0x0afb, 0x7cf: 0x0bd7, 0x7d0: 0x0bf3, 0x7d1: 0x0c83, - 0x7d2: 0x0e6b, 0x7d3: 0x0eb7, 0x7d4: 0x0f67, 0x7d5: 0x108b, 0x7d6: 0x112f, 0x7d7: 0x1193, - 0x7d8: 0x13db, 0x7d9: 0x126b, 0x7da: 0x1403, 0x7db: 0x147f, 0x7dc: 0x080f, 0x7dd: 0x083b, - 0x7de: 0x0923, 0x7df: 0x0ea7, 0x7e0: 0x12f3, 0x7e1: 0x133b, 0x7e2: 0x0b1b, 0x7e3: 0x0b8b, - 0x7e4: 0x0c4f, 0x7e5: 0x0daf, 0x7e6: 0x10d7, 0x7e7: 0x0f23, 0x7e8: 0x073b, 0x7e9: 0x097f, - 0x7ea: 0x0a63, 0x7eb: 0x0ac7, 0x7ec: 0x0b97, 0x7ed: 0x0f3f, 0x7ee: 0x0f5b, 0x7ef: 0x116b, - 0x7f0: 0x118b, 0x7f1: 0x1463, 0x7f2: 0x14e3, 0x7f3: 0x14f3, 0x7f4: 0x152f, 0x7f5: 0x0753, - 0x7f6: 0x107f, 0x7f7: 0x144f, 0x7f8: 0x14cb, 0x7f9: 0x0baf, 0x7fa: 0x0717, 0x7fb: 0x0777, - 0x7fc: 0x0a67, 0x7fd: 0x0a87, 0x7fe: 0x0caf, 0x7ff: 0x0d73, - // Block 0x20, offset 0x800 - 0x800: 0x0ec3, 0x801: 0x0fcb, 0x802: 0x1277, 0x803: 0x1417, 0x804: 0x1623, 0x805: 0x0ce3, - 0x806: 0x14a3, 0x807: 0x0833, 0x808: 0x0d2f, 0x809: 0x0d3b, 0x80a: 0x0e0f, 0x80b: 0x0e47, - 0x80c: 0x0f4b, 0x80d: 0x0fa7, 0x80e: 0x1027, 0x80f: 0x110b, 0x810: 0x153b, 0x811: 0x07af, - 0x812: 0x0c03, 0x813: 0x14b3, 0x814: 0x0767, 0x815: 0x0aab, 0x816: 0x0e2f, 0x817: 0x13df, - 0x818: 0x0b67, 0x819: 0x0bb7, 0x81a: 0x0d43, 0x81b: 0x0f2f, 0x81c: 0x14bb, 0x81d: 0x0817, - 0x81e: 0x08ff, 0x81f: 0x0a97, 0x820: 0x0cd3, 0x821: 0x0d1f, 0x822: 0x0d5f, 0x823: 0x0df3, - 0x824: 0x0f47, 0x825: 0x0fbb, 0x826: 0x1157, 0x827: 0x12f7, 0x828: 0x1303, 0x829: 0x1457, - 0x82a: 0x14d7, 0x82b: 0x0883, 0x82c: 0x0e4b, 0x82d: 0x0903, 0x82e: 0x0ec7, 0x82f: 0x0f6b, - 0x830: 0x1287, 0x831: 0x14bf, 0x832: 0x15ab, 0x833: 0x15d3, 0x834: 0x0d37, 0x835: 0x0e27, - 0x836: 0x11c3, 0x837: 0x10b7, 0x838: 0x10c3, 0x839: 0x10e7, 0x83a: 0x0f17, 0x83b: 0x0e9f, - 0x83c: 0x1363, 0x83d: 0x0733, 0x83e: 0x122b, 0x83f: 0x081b, - // Block 0x21, offset 0x840 - 0x840: 0x080b, 0x841: 0x0b0b, 0x842: 0x0c2b, 0x843: 0x10f3, 0x844: 0x0a53, 0x845: 0x0e03, - 0x846: 0x0cef, 0x847: 0x13e7, 0x848: 0x12e7, 0x849: 0x14ab, 0x84a: 0x1323, 0x84b: 0x0b27, - 0x84c: 0x0787, 0x84d: 0x095b, 0x850: 0x09af, - 0x852: 0x0cdf, 0x855: 0x07f7, 0x856: 0x0f1f, 0x857: 0x0fe3, - 0x858: 0x1047, 0x859: 0x1063, 0x85a: 0x1067, 0x85b: 0x107b, 0x85c: 0x14fb, 0x85d: 0x10eb, - 0x85e: 0x116f, 0x860: 0x128f, 0x862: 0x1353, - 0x865: 0x1407, 0x866: 0x1433, - 0x86a: 0x154f, 0x86b: 0x1553, 0x86c: 0x1557, 0x86d: 0x15bb, 0x86e: 0x142b, 0x86f: 0x14c7, - 0x870: 0x0757, 0x871: 0x077b, 0x872: 0x078f, 0x873: 0x084b, 0x874: 0x0857, 0x875: 0x0897, - 0x876: 0x094b, 0x877: 0x0967, 0x878: 0x096f, 0x879: 0x09ab, 0x87a: 0x09b7, 0x87b: 0x0a93, - 0x87c: 0x0a9b, 0x87d: 0x0ba3, 0x87e: 0x0bcb, 0x87f: 0x0bd3, - // Block 0x22, offset 0x880 - 0x880: 0x0beb, 0x881: 0x0c97, 0x882: 0x0cc7, 0x883: 0x0ce7, 0x884: 0x0d57, 0x885: 0x0e1b, - 0x886: 0x0e37, 0x887: 0x0e67, 0x888: 0x0ebb, 0x889: 0x0edb, 0x88a: 0x0f4f, 0x88b: 0x102f, - 0x88c: 0x104b, 0x88d: 0x1053, 0x88e: 0x104f, 0x88f: 0x1057, 0x890: 0x105b, 0x891: 0x105f, - 0x892: 0x1073, 0x893: 0x1077, 0x894: 0x109b, 0x895: 0x10af, 0x896: 0x10cb, 0x897: 0x112f, - 0x898: 0x1137, 0x899: 0x113f, 0x89a: 0x1153, 0x89b: 0x117b, 0x89c: 0x11cb, 0x89d: 0x11ff, - 0x89e: 0x11ff, 0x89f: 0x1267, 0x8a0: 0x130f, 0x8a1: 0x1327, 0x8a2: 0x135b, 0x8a3: 0x135f, - 0x8a4: 0x13a3, 0x8a5: 0x13a7, 0x8a6: 0x13ff, 0x8a7: 0x1407, 0x8a8: 0x14db, 0x8a9: 0x151f, - 0x8aa: 0x1537, 0x8ab: 0x0b9b, 0x8ac: 0x171e, 0x8ad: 0x11e3, - 0x8b0: 0x06df, 0x8b1: 0x07e3, 0x8b2: 0x07a3, 0x8b3: 0x074b, 0x8b4: 0x078b, 0x8b5: 0x07b7, - 0x8b6: 0x0847, 0x8b7: 0x0863, 0x8b8: 0x094b, 0x8b9: 0x0937, 0x8ba: 0x0947, 0x8bb: 0x0963, - 0x8bc: 0x09af, 0x8bd: 0x09bf, 0x8be: 0x0a03, 0x8bf: 0x0a0f, - // Block 0x23, offset 0x8c0 - 0x8c0: 0x0a2b, 0x8c1: 0x0a3b, 0x8c2: 0x0b23, 0x8c3: 0x0b2b, 0x8c4: 0x0b5b, 0x8c5: 0x0b7b, - 0x8c6: 0x0bab, 0x8c7: 0x0bc3, 0x8c8: 0x0bb3, 0x8c9: 0x0bd3, 0x8ca: 0x0bc7, 0x8cb: 0x0beb, - 0x8cc: 0x0c07, 0x8cd: 0x0c5f, 0x8ce: 0x0c6b, 0x8cf: 0x0c73, 0x8d0: 0x0c9b, 0x8d1: 0x0cdf, - 0x8d2: 0x0d0f, 0x8d3: 0x0d13, 0x8d4: 0x0d27, 0x8d5: 0x0da7, 0x8d6: 0x0db7, 0x8d7: 0x0e0f, - 0x8d8: 0x0e5b, 0x8d9: 0x0e53, 0x8da: 0x0e67, 0x8db: 0x0e83, 0x8dc: 0x0ebb, 0x8dd: 0x1013, - 0x8de: 0x0edf, 0x8df: 0x0f13, 0x8e0: 0x0f1f, 0x8e1: 0x0f5f, 0x8e2: 0x0f7b, 0x8e3: 0x0f9f, - 0x8e4: 0x0fc3, 0x8e5: 0x0fc7, 0x8e6: 0x0fe3, 0x8e7: 0x0fe7, 0x8e8: 0x0ff7, 0x8e9: 0x100b, - 0x8ea: 0x1007, 0x8eb: 0x1037, 0x8ec: 0x10b3, 0x8ed: 0x10cb, 0x8ee: 0x10e3, 0x8ef: 0x111b, - 0x8f0: 0x112f, 0x8f1: 0x114b, 0x8f2: 0x117b, 0x8f3: 0x122f, 0x8f4: 0x1257, 0x8f5: 0x12cb, - 0x8f6: 0x1313, 0x8f7: 0x131f, 0x8f8: 0x1327, 0x8f9: 0x133f, 0x8fa: 0x1353, 0x8fb: 0x1343, - 0x8fc: 0x135b, 0x8fd: 0x1357, 0x8fe: 0x134f, 0x8ff: 0x135f, - // Block 0x24, offset 0x900 - 0x900: 0x136b, 0x901: 0x13a7, 0x902: 0x13e3, 0x903: 0x1413, 0x904: 0x144b, 0x905: 0x146b, - 0x906: 0x14b7, 0x907: 0x14db, 0x908: 0x14fb, 0x909: 0x150f, 0x90a: 0x151f, 0x90b: 0x152b, - 0x90c: 0x1537, 0x90d: 0x158b, 0x90e: 0x162b, 0x90f: 0x16b5, 0x910: 0x16b0, 0x911: 0x16e2, - 0x912: 0x0607, 0x913: 0x062f, 0x914: 0x0633, 0x915: 0x1764, 0x916: 0x1791, 0x917: 0x1809, - 0x918: 0x1617, 0x919: 0x1627, - // Block 0x25, offset 0x940 - 0x940: 0x06fb, 0x941: 0x06f3, 0x942: 0x0703, 0x943: 0x1647, 0x944: 0x0747, 0x945: 0x0757, - 0x946: 0x075b, 0x947: 0x0763, 0x948: 0x076b, 0x949: 0x076f, 0x94a: 0x077b, 0x94b: 0x0773, - 0x94c: 0x05b3, 0x94d: 0x165b, 0x94e: 0x078f, 0x94f: 0x0793, 0x950: 0x0797, 0x951: 0x07b3, - 0x952: 0x164c, 0x953: 0x05b7, 0x954: 0x079f, 0x955: 0x07bf, 0x956: 0x1656, 0x957: 0x07cf, - 0x958: 0x07d7, 0x959: 0x0737, 0x95a: 0x07df, 0x95b: 0x07e3, 0x95c: 0x1831, 0x95d: 0x07ff, - 0x95e: 0x0807, 0x95f: 0x05bf, 0x960: 0x081f, 0x961: 0x0823, 0x962: 0x082b, 0x963: 0x082f, - 0x964: 0x05c3, 0x965: 0x0847, 0x966: 0x084b, 0x967: 0x0857, 0x968: 0x0863, 0x969: 0x0867, - 0x96a: 0x086b, 0x96b: 0x0873, 0x96c: 0x0893, 0x96d: 0x0897, 0x96e: 0x089f, 0x96f: 0x08af, - 0x970: 0x08b7, 0x971: 0x08bb, 0x972: 0x08bb, 0x973: 0x08bb, 0x974: 0x166a, 0x975: 0x0e93, - 0x976: 0x08cf, 0x977: 0x08d7, 0x978: 0x166f, 0x979: 0x08e3, 0x97a: 0x08eb, 0x97b: 0x08f3, - 0x97c: 0x091b, 0x97d: 0x0907, 0x97e: 0x0913, 0x97f: 0x0917, - // Block 0x26, offset 0x980 - 0x980: 0x091f, 0x981: 0x0927, 0x982: 0x092b, 0x983: 0x0933, 0x984: 0x093b, 0x985: 0x093f, - 0x986: 0x093f, 0x987: 0x0947, 0x988: 0x094f, 0x989: 0x0953, 0x98a: 0x095f, 0x98b: 0x0983, - 0x98c: 0x0967, 0x98d: 0x0987, 0x98e: 0x096b, 0x98f: 0x0973, 0x990: 0x080b, 0x991: 0x09cf, - 0x992: 0x0997, 0x993: 0x099b, 0x994: 0x099f, 0x995: 0x0993, 0x996: 0x09a7, 0x997: 0x09a3, - 0x998: 0x09bb, 0x999: 0x1674, 0x99a: 0x09d7, 0x99b: 0x09db, 0x99c: 0x09e3, 0x99d: 0x09ef, - 0x99e: 0x09f7, 0x99f: 0x0a13, 0x9a0: 0x1679, 0x9a1: 0x167e, 0x9a2: 0x0a1f, 0x9a3: 0x0a23, - 0x9a4: 0x0a27, 0x9a5: 0x0a1b, 0x9a6: 0x0a2f, 0x9a7: 0x05c7, 0x9a8: 0x05cb, 0x9a9: 0x0a37, - 0x9aa: 0x0a3f, 0x9ab: 0x0a3f, 0x9ac: 0x1683, 0x9ad: 0x0a5b, 0x9ae: 0x0a5f, 0x9af: 0x0a63, - 0x9b0: 0x0a6b, 0x9b1: 0x1688, 0x9b2: 0x0a73, 0x9b3: 0x0a77, 0x9b4: 0x0b4f, 0x9b5: 0x0a7f, - 0x9b6: 0x05cf, 0x9b7: 0x0a8b, 0x9b8: 0x0a9b, 0x9b9: 0x0aa7, 0x9ba: 0x0aa3, 0x9bb: 0x1692, - 0x9bc: 0x0aaf, 0x9bd: 0x1697, 0x9be: 0x0abb, 0x9bf: 0x0ab7, - // Block 0x27, offset 0x9c0 - 0x9c0: 0x0abf, 0x9c1: 0x0acf, 0x9c2: 0x0ad3, 0x9c3: 0x05d3, 0x9c4: 0x0ae3, 0x9c5: 0x0aeb, - 0x9c6: 0x0aef, 0x9c7: 0x0af3, 0x9c8: 0x05d7, 0x9c9: 0x169c, 0x9ca: 0x05db, 0x9cb: 0x0b0f, - 0x9cc: 0x0b13, 0x9cd: 0x0b17, 0x9ce: 0x0b1f, 0x9cf: 0x1863, 0x9d0: 0x0b37, 0x9d1: 0x16a6, - 0x9d2: 0x16a6, 0x9d3: 0x11d7, 0x9d4: 0x0b47, 0x9d5: 0x0b47, 0x9d6: 0x05df, 0x9d7: 0x16c9, - 0x9d8: 0x179b, 0x9d9: 0x0b57, 0x9da: 0x0b5f, 0x9db: 0x05e3, 0x9dc: 0x0b73, 0x9dd: 0x0b83, - 0x9de: 0x0b87, 0x9df: 0x0b8f, 0x9e0: 0x0b9f, 0x9e1: 0x05eb, 0x9e2: 0x05e7, 0x9e3: 0x0ba3, - 0x9e4: 0x16ab, 0x9e5: 0x0ba7, 0x9e6: 0x0bbb, 0x9e7: 0x0bbf, 0x9e8: 0x0bc3, 0x9e9: 0x0bbf, - 0x9ea: 0x0bcf, 0x9eb: 0x0bd3, 0x9ec: 0x0be3, 0x9ed: 0x0bdb, 0x9ee: 0x0bdf, 0x9ef: 0x0be7, - 0x9f0: 0x0beb, 0x9f1: 0x0bef, 0x9f2: 0x0bfb, 0x9f3: 0x0bff, 0x9f4: 0x0c17, 0x9f5: 0x0c1f, - 0x9f6: 0x0c2f, 0x9f7: 0x0c43, 0x9f8: 0x16ba, 0x9f9: 0x0c3f, 0x9fa: 0x0c33, 0x9fb: 0x0c4b, - 0x9fc: 0x0c53, 0x9fd: 0x0c67, 0x9fe: 0x16bf, 0x9ff: 0x0c6f, - // Block 0x28, offset 0xa00 - 0xa00: 0x0c63, 0xa01: 0x0c5b, 0xa02: 0x05ef, 0xa03: 0x0c77, 0xa04: 0x0c7f, 0xa05: 0x0c87, - 0xa06: 0x0c7b, 0xa07: 0x05f3, 0xa08: 0x0c97, 0xa09: 0x0c9f, 0xa0a: 0x16c4, 0xa0b: 0x0ccb, - 0xa0c: 0x0cff, 0xa0d: 0x0cdb, 0xa0e: 0x05ff, 0xa0f: 0x0ce7, 0xa10: 0x05fb, 0xa11: 0x05f7, - 0xa12: 0x07c3, 0xa13: 0x07c7, 0xa14: 0x0d03, 0xa15: 0x0ceb, 0xa16: 0x11ab, 0xa17: 0x0663, - 0xa18: 0x0d0f, 0xa19: 0x0d13, 0xa1a: 0x0d17, 0xa1b: 0x0d2b, 0xa1c: 0x0d23, 0xa1d: 0x16dd, - 0xa1e: 0x0603, 0xa1f: 0x0d3f, 0xa20: 0x0d33, 0xa21: 0x0d4f, 0xa22: 0x0d57, 0xa23: 0x16e7, - 0xa24: 0x0d5b, 0xa25: 0x0d47, 0xa26: 0x0d63, 0xa27: 0x0607, 0xa28: 0x0d67, 0xa29: 0x0d6b, - 0xa2a: 0x0d6f, 0xa2b: 0x0d7b, 0xa2c: 0x16ec, 0xa2d: 0x0d83, 0xa2e: 0x060b, 0xa2f: 0x0d8f, - 0xa30: 0x16f1, 0xa31: 0x0d93, 0xa32: 0x060f, 0xa33: 0x0d9f, 0xa34: 0x0dab, 0xa35: 0x0db7, - 0xa36: 0x0dbb, 0xa37: 0x16f6, 0xa38: 0x168d, 0xa39: 0x16fb, 0xa3a: 0x0ddb, 0xa3b: 0x1700, - 0xa3c: 0x0de7, 0xa3d: 0x0def, 0xa3e: 0x0ddf, 0xa3f: 0x0dfb, - // Block 0x29, offset 0xa40 - 0xa40: 0x0e0b, 0xa41: 0x0e1b, 0xa42: 0x0e0f, 0xa43: 0x0e13, 0xa44: 0x0e1f, 0xa45: 0x0e23, - 0xa46: 0x1705, 0xa47: 0x0e07, 0xa48: 0x0e3b, 0xa49: 0x0e3f, 0xa4a: 0x0613, 0xa4b: 0x0e53, - 0xa4c: 0x0e4f, 0xa4d: 0x170a, 0xa4e: 0x0e33, 0xa4f: 0x0e6f, 0xa50: 0x170f, 0xa51: 0x1714, - 0xa52: 0x0e73, 0xa53: 0x0e87, 0xa54: 0x0e83, 0xa55: 0x0e7f, 0xa56: 0x0617, 0xa57: 0x0e8b, - 0xa58: 0x0e9b, 0xa59: 0x0e97, 0xa5a: 0x0ea3, 0xa5b: 0x1651, 0xa5c: 0x0eb3, 0xa5d: 0x1719, - 0xa5e: 0x0ebf, 0xa5f: 0x1723, 0xa60: 0x0ed3, 0xa61: 0x0edf, 0xa62: 0x0ef3, 0xa63: 0x1728, - 0xa64: 0x0f07, 0xa65: 0x0f0b, 0xa66: 0x172d, 0xa67: 0x1732, 0xa68: 0x0f27, 0xa69: 0x0f37, - 0xa6a: 0x061b, 0xa6b: 0x0f3b, 0xa6c: 0x061f, 0xa6d: 0x061f, 0xa6e: 0x0f53, 0xa6f: 0x0f57, - 0xa70: 0x0f5f, 0xa71: 0x0f63, 0xa72: 0x0f6f, 0xa73: 0x0623, 0xa74: 0x0f87, 0xa75: 0x1737, - 0xa76: 0x0fa3, 0xa77: 0x173c, 0xa78: 0x0faf, 0xa79: 0x16a1, 0xa7a: 0x0fbf, 0xa7b: 0x1741, - 0xa7c: 0x1746, 0xa7d: 0x174b, 0xa7e: 0x0627, 0xa7f: 0x062b, - // Block 0x2a, offset 0xa80 - 0xa80: 0x0ff7, 0xa81: 0x1755, 0xa82: 0x1750, 0xa83: 0x175a, 0xa84: 0x175f, 0xa85: 0x0fff, - 0xa86: 0x1003, 0xa87: 0x1003, 0xa88: 0x100b, 0xa89: 0x0633, 0xa8a: 0x100f, 0xa8b: 0x0637, - 0xa8c: 0x063b, 0xa8d: 0x1769, 0xa8e: 0x1023, 0xa8f: 0x102b, 0xa90: 0x1037, 0xa91: 0x063f, - 0xa92: 0x176e, 0xa93: 0x105b, 0xa94: 0x1773, 0xa95: 0x1778, 0xa96: 0x107b, 0xa97: 0x1093, - 0xa98: 0x0643, 0xa99: 0x109b, 0xa9a: 0x109f, 0xa9b: 0x10a3, 0xa9c: 0x177d, 0xa9d: 0x1782, - 0xa9e: 0x1782, 0xa9f: 0x10bb, 0xaa0: 0x0647, 0xaa1: 0x1787, 0xaa2: 0x10cf, 0xaa3: 0x10d3, - 0xaa4: 0x064b, 0xaa5: 0x178c, 0xaa6: 0x10ef, 0xaa7: 0x064f, 0xaa8: 0x10ff, 0xaa9: 0x10f7, - 0xaaa: 0x1107, 0xaab: 0x1796, 0xaac: 0x111f, 0xaad: 0x0653, 0xaae: 0x112b, 0xaaf: 0x1133, - 0xab0: 0x1143, 0xab1: 0x0657, 0xab2: 0x17a0, 0xab3: 0x17a5, 0xab4: 0x065b, 0xab5: 0x17aa, - 0xab6: 0x115b, 0xab7: 0x17af, 0xab8: 0x1167, 0xab9: 0x1173, 0xaba: 0x117b, 0xabb: 0x17b4, - 0xabc: 0x17b9, 0xabd: 0x118f, 0xabe: 0x17be, 0xabf: 0x1197, - // Block 0x2b, offset 0xac0 - 0xac0: 0x16ce, 0xac1: 0x065f, 0xac2: 0x11af, 0xac3: 0x11b3, 0xac4: 0x0667, 0xac5: 0x11b7, - 0xac6: 0x0a33, 0xac7: 0x17c3, 0xac8: 0x17c8, 0xac9: 0x16d3, 0xaca: 0x16d8, 0xacb: 0x11d7, - 0xacc: 0x11db, 0xacd: 0x13f3, 0xace: 0x066b, 0xacf: 0x1207, 0xad0: 0x1203, 0xad1: 0x120b, - 0xad2: 0x083f, 0xad3: 0x120f, 0xad4: 0x1213, 0xad5: 0x1217, 0xad6: 0x121f, 0xad7: 0x17cd, - 0xad8: 0x121b, 0xad9: 0x1223, 0xada: 0x1237, 0xadb: 0x123b, 0xadc: 0x1227, 0xadd: 0x123f, - 0xade: 0x1253, 0xadf: 0x1267, 0xae0: 0x1233, 0xae1: 0x1247, 0xae2: 0x124b, 0xae3: 0x124f, - 0xae4: 0x17d2, 0xae5: 0x17dc, 0xae6: 0x17d7, 0xae7: 0x066f, 0xae8: 0x126f, 0xae9: 0x1273, - 0xaea: 0x127b, 0xaeb: 0x17f0, 0xaec: 0x127f, 0xaed: 0x17e1, 0xaee: 0x0673, 0xaef: 0x0677, - 0xaf0: 0x17e6, 0xaf1: 0x17eb, 0xaf2: 0x067b, 0xaf3: 0x129f, 0xaf4: 0x12a3, 0xaf5: 0x12a7, - 0xaf6: 0x12ab, 0xaf7: 0x12b7, 0xaf8: 0x12b3, 0xaf9: 0x12bf, 0xafa: 0x12bb, 0xafb: 0x12cb, - 0xafc: 0x12c3, 0xafd: 0x12c7, 0xafe: 0x12cf, 0xaff: 0x067f, - // Block 0x2c, offset 0xb00 - 0xb00: 0x12d7, 0xb01: 0x12db, 0xb02: 0x0683, 0xb03: 0x12eb, 0xb04: 0x12ef, 0xb05: 0x17f5, - 0xb06: 0x12fb, 0xb07: 0x12ff, 0xb08: 0x0687, 0xb09: 0x130b, 0xb0a: 0x05bb, 0xb0b: 0x17fa, - 0xb0c: 0x17ff, 0xb0d: 0x068b, 0xb0e: 0x068f, 0xb0f: 0x1337, 0xb10: 0x134f, 0xb11: 0x136b, - 0xb12: 0x137b, 0xb13: 0x1804, 0xb14: 0x138f, 0xb15: 0x1393, 0xb16: 0x13ab, 0xb17: 0x13b7, - 0xb18: 0x180e, 0xb19: 0x1660, 0xb1a: 0x13c3, 0xb1b: 0x13bf, 0xb1c: 0x13cb, 0xb1d: 0x1665, - 0xb1e: 0x13d7, 0xb1f: 0x13e3, 0xb20: 0x1813, 0xb21: 0x1818, 0xb22: 0x1423, 0xb23: 0x142f, - 0xb24: 0x1437, 0xb25: 0x181d, 0xb26: 0x143b, 0xb27: 0x1467, 0xb28: 0x1473, 0xb29: 0x1477, - 0xb2a: 0x146f, 0xb2b: 0x1483, 0xb2c: 0x1487, 0xb2d: 0x1822, 0xb2e: 0x1493, 0xb2f: 0x0693, - 0xb30: 0x149b, 0xb31: 0x1827, 0xb32: 0x0697, 0xb33: 0x14d3, 0xb34: 0x0ac3, 0xb35: 0x14eb, - 0xb36: 0x182c, 0xb37: 0x1836, 0xb38: 0x069b, 0xb39: 0x069f, 0xb3a: 0x1513, 0xb3b: 0x183b, - 0xb3c: 0x06a3, 0xb3d: 0x1840, 0xb3e: 0x152b, 0xb3f: 0x152b, - // Block 0x2d, offset 0xb40 - 0xb40: 0x1533, 0xb41: 0x1845, 0xb42: 0x154b, 0xb43: 0x06a7, 0xb44: 0x155b, 0xb45: 0x1567, - 0xb46: 0x156f, 0xb47: 0x1577, 0xb48: 0x06ab, 0xb49: 0x184a, 0xb4a: 0x158b, 0xb4b: 0x15a7, - 0xb4c: 0x15b3, 0xb4d: 0x06af, 0xb4e: 0x06b3, 0xb4f: 0x15b7, 0xb50: 0x184f, 0xb51: 0x06b7, - 0xb52: 0x1854, 0xb53: 0x1859, 0xb54: 0x185e, 0xb55: 0x15db, 0xb56: 0x06bb, 0xb57: 0x15ef, - 0xb58: 0x15f7, 0xb59: 0x15fb, 0xb5a: 0x1603, 0xb5b: 0x160b, 0xb5c: 0x1613, 0xb5d: 0x1868, -} - -// nfcIndex: 22 blocks, 1408 entries, 1408 bytes -// Block 0 is the zero block. -var nfcIndex = [1408]uint8{ - // Block 0x0, offset 0x0 - // Block 0x1, offset 0x40 - // Block 0x2, offset 0x80 - // Block 0x3, offset 0xc0 - 0xc2: 0x2c, 0xc3: 0x01, 0xc4: 0x02, 0xc5: 0x03, 0xc6: 0x2d, 0xc7: 0x04, - 0xc8: 0x05, 0xca: 0x2e, 0xcb: 0x2f, 0xcc: 0x06, 0xcd: 0x07, 0xce: 0x08, 0xcf: 0x30, - 0xd0: 0x09, 0xd1: 0x31, 0xd2: 0x32, 0xd3: 0x0a, 0xd6: 0x0b, 0xd7: 0x33, - 0xd8: 0x34, 0xd9: 0x0c, 0xdb: 0x35, 0xdc: 0x36, 0xdd: 0x37, 0xdf: 0x38, - 0xe0: 0x02, 0xe1: 0x03, 0xe2: 0x04, 0xe3: 0x05, - 0xea: 0x06, 0xeb: 0x07, 0xec: 0x08, 0xed: 0x09, 0xef: 0x0a, - 0xf0: 0x13, - // Block 0x4, offset 0x100 - 0x120: 0x39, 0x121: 0x3a, 0x123: 0x3b, 0x124: 0x3c, 0x125: 0x3d, 0x126: 0x3e, 0x127: 0x3f, - 0x128: 0x40, 0x129: 0x41, 0x12a: 0x42, 0x12b: 0x43, 0x12c: 0x3e, 0x12d: 0x44, 0x12e: 0x45, 0x12f: 0x46, - 0x131: 0x47, 0x132: 0x48, 0x133: 0x49, 0x134: 0x4a, 0x135: 0x4b, 0x137: 0x4c, - 0x138: 0x4d, 0x139: 0x4e, 0x13a: 0x4f, 0x13b: 0x50, 0x13c: 0x51, 0x13d: 0x52, 0x13e: 0x53, 0x13f: 0x54, - // Block 0x5, offset 0x140 - 0x140: 0x55, 0x142: 0x56, 0x144: 0x57, 0x145: 0x58, 0x146: 0x59, 0x147: 0x5a, - 0x14d: 0x5b, - 0x15c: 0x5c, 0x15f: 0x5d, - 0x162: 0x5e, 0x164: 0x5f, - 0x168: 0x60, 0x169: 0x61, 0x16a: 0x62, 0x16c: 0x0d, 0x16d: 0x63, 0x16e: 0x64, 0x16f: 0x65, - 0x170: 0x66, 0x173: 0x67, 0x177: 0x68, - 0x178: 0x0e, 0x179: 0x0f, 0x17a: 0x10, 0x17b: 0x11, 0x17c: 0x12, 0x17d: 0x13, 0x17e: 0x14, 0x17f: 0x15, - // Block 0x6, offset 0x180 - 0x180: 0x69, 0x183: 0x6a, 0x184: 0x6b, 0x186: 0x6c, 0x187: 0x6d, - 0x188: 0x6e, 0x189: 0x16, 0x18a: 0x17, 0x18b: 0x6f, 0x18c: 0x70, - 0x1ab: 0x71, - 0x1b3: 0x72, 0x1b5: 0x73, 0x1b7: 0x74, - // Block 0x7, offset 0x1c0 - 0x1c0: 0x75, 0x1c1: 0x18, 0x1c2: 0x19, 0x1c3: 0x1a, 0x1c4: 0x76, 0x1c5: 0x77, - 0x1c9: 0x78, 0x1cc: 0x79, 0x1cd: 0x7a, - // Block 0x8, offset 0x200 - 0x219: 0x7b, 0x21a: 0x7c, 0x21b: 0x7d, - 0x220: 0x7e, 0x223: 0x7f, 0x224: 0x80, 0x225: 0x81, 0x226: 0x82, 0x227: 0x83, - 0x22a: 0x84, 0x22b: 0x85, 0x22f: 0x86, - 0x230: 0x87, 0x231: 0x88, 0x232: 0x89, 0x233: 0x8a, 0x234: 0x8b, 0x235: 0x8c, 0x236: 0x8d, 0x237: 0x87, - 0x238: 0x88, 0x239: 0x89, 0x23a: 0x8a, 0x23b: 0x8b, 0x23c: 0x8c, 0x23d: 0x8d, 0x23e: 0x87, 0x23f: 0x88, - // Block 0x9, offset 0x240 - 0x240: 0x89, 0x241: 0x8a, 0x242: 0x8b, 0x243: 0x8c, 0x244: 0x8d, 0x245: 0x87, 0x246: 0x88, 0x247: 0x89, - 0x248: 0x8a, 0x249: 0x8b, 0x24a: 0x8c, 0x24b: 0x8d, 0x24c: 0x87, 0x24d: 0x88, 0x24e: 0x89, 0x24f: 0x8a, - 0x250: 0x8b, 0x251: 0x8c, 0x252: 0x8d, 0x253: 0x87, 0x254: 0x88, 0x255: 0x89, 0x256: 0x8a, 0x257: 0x8b, - 0x258: 0x8c, 0x259: 0x8d, 0x25a: 0x87, 0x25b: 0x88, 0x25c: 0x89, 0x25d: 0x8a, 0x25e: 0x8b, 0x25f: 0x8c, - 0x260: 0x8d, 0x261: 0x87, 0x262: 0x88, 0x263: 0x89, 0x264: 0x8a, 0x265: 0x8b, 0x266: 0x8c, 0x267: 0x8d, - 0x268: 0x87, 0x269: 0x88, 0x26a: 0x89, 0x26b: 0x8a, 0x26c: 0x8b, 0x26d: 0x8c, 0x26e: 0x8d, 0x26f: 0x87, - 0x270: 0x88, 0x271: 0x89, 0x272: 0x8a, 0x273: 0x8b, 0x274: 0x8c, 0x275: 0x8d, 0x276: 0x87, 0x277: 0x88, - 0x278: 0x89, 0x279: 0x8a, 0x27a: 0x8b, 0x27b: 0x8c, 0x27c: 0x8d, 0x27d: 0x87, 0x27e: 0x88, 0x27f: 0x89, - // Block 0xa, offset 0x280 - 0x280: 0x8a, 0x281: 0x8b, 0x282: 0x8c, 0x283: 0x8d, 0x284: 0x87, 0x285: 0x88, 0x286: 0x89, 0x287: 0x8a, - 0x288: 0x8b, 0x289: 0x8c, 0x28a: 0x8d, 0x28b: 0x87, 0x28c: 0x88, 0x28d: 0x89, 0x28e: 0x8a, 0x28f: 0x8b, - 0x290: 0x8c, 0x291: 0x8d, 0x292: 0x87, 0x293: 0x88, 0x294: 0x89, 0x295: 0x8a, 0x296: 0x8b, 0x297: 0x8c, - 0x298: 0x8d, 0x299: 0x87, 0x29a: 0x88, 0x29b: 0x89, 0x29c: 0x8a, 0x29d: 0x8b, 0x29e: 0x8c, 0x29f: 0x8d, - 0x2a0: 0x87, 0x2a1: 0x88, 0x2a2: 0x89, 0x2a3: 0x8a, 0x2a4: 0x8b, 0x2a5: 0x8c, 0x2a6: 0x8d, 0x2a7: 0x87, - 0x2a8: 0x88, 0x2a9: 0x89, 0x2aa: 0x8a, 0x2ab: 0x8b, 0x2ac: 0x8c, 0x2ad: 0x8d, 0x2ae: 0x87, 0x2af: 0x88, - 0x2b0: 0x89, 0x2b1: 0x8a, 0x2b2: 0x8b, 0x2b3: 0x8c, 0x2b4: 0x8d, 0x2b5: 0x87, 0x2b6: 0x88, 0x2b7: 0x89, - 0x2b8: 0x8a, 0x2b9: 0x8b, 0x2ba: 0x8c, 0x2bb: 0x8d, 0x2bc: 0x87, 0x2bd: 0x88, 0x2be: 0x89, 0x2bf: 0x8a, - // Block 0xb, offset 0x2c0 - 0x2c0: 0x8b, 0x2c1: 0x8c, 0x2c2: 0x8d, 0x2c3: 0x87, 0x2c4: 0x88, 0x2c5: 0x89, 0x2c6: 0x8a, 0x2c7: 0x8b, - 0x2c8: 0x8c, 0x2c9: 0x8d, 0x2ca: 0x87, 0x2cb: 0x88, 0x2cc: 0x89, 0x2cd: 0x8a, 0x2ce: 0x8b, 0x2cf: 0x8c, - 0x2d0: 0x8d, 0x2d1: 0x87, 0x2d2: 0x88, 0x2d3: 0x89, 0x2d4: 0x8a, 0x2d5: 0x8b, 0x2d6: 0x8c, 0x2d7: 0x8d, - 0x2d8: 0x87, 0x2d9: 0x88, 0x2da: 0x89, 0x2db: 0x8a, 0x2dc: 0x8b, 0x2dd: 0x8c, 0x2de: 0x8e, - // Block 0xc, offset 0x300 - 0x324: 0x1b, 0x325: 0x1c, 0x326: 0x1d, 0x327: 0x1e, - 0x328: 0x1f, 0x329: 0x20, 0x32a: 0x21, 0x32b: 0x22, 0x32c: 0x8f, 0x32d: 0x90, 0x32e: 0x91, - 0x331: 0x92, 0x332: 0x93, 0x333: 0x94, 0x334: 0x95, - 0x338: 0x96, 0x339: 0x97, 0x33a: 0x98, 0x33b: 0x99, 0x33e: 0x9a, 0x33f: 0x9b, - // Block 0xd, offset 0x340 - 0x347: 0x9c, - 0x34b: 0x9d, 0x34d: 0x9e, - 0x368: 0x9f, 0x36b: 0xa0, - // Block 0xe, offset 0x380 - 0x381: 0xa1, 0x382: 0xa2, 0x384: 0xa3, 0x385: 0x82, 0x387: 0xa4, - 0x388: 0xa5, 0x38b: 0xa6, 0x38c: 0x3e, 0x38d: 0xa7, - 0x391: 0xa8, 0x392: 0xa9, 0x393: 0xaa, 0x396: 0xab, 0x397: 0xac, - 0x398: 0x73, 0x39a: 0xad, 0x39c: 0xae, - 0x3b0: 0x73, - // Block 0xf, offset 0x3c0 - 0x3eb: 0xaf, 0x3ec: 0xb0, - // Block 0x10, offset 0x400 - 0x432: 0xb1, - // Block 0x11, offset 0x440 - 0x445: 0xb2, 0x446: 0xb3, 0x447: 0xb4, - 0x449: 0xb5, - // Block 0x12, offset 0x480 - 0x480: 0xb6, - 0x4a3: 0xb7, 0x4a5: 0xb8, - // Block 0x13, offset 0x4c0 - 0x4c8: 0xb9, - // Block 0x14, offset 0x500 - 0x520: 0x23, 0x521: 0x24, 0x522: 0x25, 0x523: 0x26, 0x524: 0x27, 0x525: 0x28, 0x526: 0x29, 0x527: 0x2a, - 0x528: 0x2b, - // Block 0x15, offset 0x540 - 0x550: 0x0b, 0x551: 0x0c, 0x556: 0x0d, - 0x55b: 0x0e, 0x55d: 0x0f, 0x55e: 0x10, 0x55f: 0x11, - 0x56f: 0x12, -} - -// nfcSparseOffset: 142 entries, 284 bytes -var nfcSparseOffset = []uint16{0x0, 0x5, 0x9, 0xb, 0xd, 0x18, 0x28, 0x2a, 0x2f, 0x3a, 0x49, 0x56, 0x5e, 0x62, 0x67, 0x69, 0x7a, 0x82, 0x89, 0x8c, 0x93, 0x97, 0x9b, 0x9d, 0x9f, 0xa8, 0xac, 0xb3, 0xb8, 0xbb, 0xc5, 0xc7, 0xce, 0xd6, 0xd9, 0xdb, 0xdd, 0xdf, 0xe4, 0xf5, 0x101, 0x103, 0x109, 0x10b, 0x10d, 0x10f, 0x111, 0x113, 0x115, 0x118, 0x11b, 0x11d, 0x120, 0x123, 0x127, 0x12c, 0x135, 0x137, 0x13a, 0x13c, 0x147, 0x157, 0x15b, 0x169, 0x16c, 0x172, 0x178, 0x183, 0x187, 0x189, 0x18b, 0x18d, 0x18f, 0x191, 0x197, 0x19b, 0x19d, 0x19f, 0x1a7, 0x1ab, 0x1ae, 0x1b0, 0x1b2, 0x1b4, 0x1b7, 0x1b9, 0x1bb, 0x1bd, 0x1bf, 0x1c5, 0x1c8, 0x1ca, 0x1d1, 0x1d7, 0x1dd, 0x1e5, 0x1eb, 0x1f1, 0x1f7, 0x1fb, 0x209, 0x212, 0x215, 0x218, 0x21a, 0x21d, 0x21f, 0x223, 0x228, 0x22a, 0x22c, 0x231, 0x237, 0x239, 0x23b, 0x23d, 0x243, 0x246, 0x249, 0x251, 0x258, 0x25b, 0x25e, 0x260, 0x268, 0x26b, 0x272, 0x275, 0x27b, 0x27d, 0x280, 0x282, 0x284, 0x286, 0x288, 0x295, 0x29f, 0x2a1, 0x2a3, 0x2a9, 0x2ab, 0x2ae} - -// nfcSparseValues: 688 entries, 2752 bytes -var nfcSparseValues = [688]valueRange{ - // Block 0x0, offset 0x0 - {value: 0x0000, lo: 0x04}, - {value: 0xa100, lo: 0xa8, hi: 0xa8}, - {value: 0x8100, lo: 0xaf, hi: 0xaf}, - {value: 0x8100, lo: 0xb4, hi: 0xb4}, - {value: 0x8100, lo: 0xb8, hi: 0xb8}, - // Block 0x1, offset 0x5 - {value: 0x0091, lo: 0x03}, - {value: 0x46e2, lo: 0xa0, hi: 0xa1}, - {value: 0x4714, lo: 0xaf, hi: 0xb0}, - {value: 0xa000, lo: 0xb7, hi: 0xb7}, - // Block 0x2, offset 0x9 - {value: 0x0000, lo: 0x01}, - {value: 0xa000, lo: 0x92, hi: 0x92}, - // Block 0x3, offset 0xb - {value: 0x0000, lo: 0x01}, - {value: 0x8100, lo: 0x98, hi: 0x9d}, - // Block 0x4, offset 0xd - {value: 0x0006, lo: 0x0a}, - {value: 0xa000, lo: 0x81, hi: 0x81}, - {value: 0xa000, lo: 0x85, hi: 0x85}, - {value: 0xa000, lo: 0x89, hi: 0x89}, - {value: 0x4840, lo: 0x8a, hi: 0x8a}, - {value: 0x485e, lo: 0x8b, hi: 0x8b}, - {value: 0x36c7, lo: 0x8c, hi: 0x8c}, - {value: 0x36df, lo: 0x8d, hi: 0x8d}, - {value: 0x4876, lo: 0x8e, hi: 0x8e}, - {value: 0xa000, lo: 0x92, hi: 0x92}, - {value: 0x36fd, lo: 0x93, hi: 0x94}, - // Block 0x5, offset 0x18 - {value: 0x0000, lo: 0x0f}, - {value: 0xa000, lo: 0x83, hi: 0x83}, - {value: 0xa000, lo: 0x87, hi: 0x87}, - {value: 0xa000, lo: 0x8b, hi: 0x8b}, - {value: 0xa000, lo: 0x8d, hi: 0x8d}, - {value: 0x37a5, lo: 0x90, hi: 0x90}, - {value: 0x37b1, lo: 0x91, hi: 0x91}, - {value: 0x379f, lo: 0x93, hi: 0x93}, - {value: 0xa000, lo: 0x96, hi: 0x96}, - {value: 0x3817, lo: 0x97, hi: 0x97}, - {value: 0x37e1, lo: 0x9c, hi: 0x9c}, - {value: 0x37c9, lo: 0x9d, hi: 0x9d}, - {value: 0x37f3, lo: 0x9e, hi: 0x9e}, - {value: 0xa000, lo: 0xb4, hi: 0xb5}, - {value: 0x381d, lo: 0xb6, hi: 0xb6}, - {value: 0x3823, lo: 0xb7, hi: 0xb7}, - // Block 0x6, offset 0x28 - {value: 0x0000, lo: 0x01}, - {value: 0x8132, lo: 0x83, hi: 0x87}, - // Block 0x7, offset 0x2a - {value: 0x0001, lo: 0x04}, - {value: 0x8113, lo: 0x81, hi: 0x82}, - {value: 0x8132, lo: 0x84, hi: 0x84}, - {value: 0x812d, lo: 0x85, hi: 0x85}, - {value: 0x810d, lo: 0x87, hi: 0x87}, - // Block 0x8, offset 0x2f - {value: 0x0000, lo: 0x0a}, - {value: 0x8132, lo: 0x90, hi: 0x97}, - {value: 0x8119, lo: 0x98, hi: 0x98}, - {value: 0x811a, lo: 0x99, hi: 0x99}, - {value: 0x811b, lo: 0x9a, hi: 0x9a}, - {value: 0x3841, lo: 0xa2, hi: 0xa2}, - {value: 0x3847, lo: 0xa3, hi: 0xa3}, - {value: 0x3853, lo: 0xa4, hi: 0xa4}, - {value: 0x384d, lo: 0xa5, hi: 0xa5}, - {value: 0x3859, lo: 0xa6, hi: 0xa6}, - {value: 0xa000, lo: 0xa7, hi: 0xa7}, - // Block 0x9, offset 0x3a - {value: 0x0000, lo: 0x0e}, - {value: 0x386b, lo: 0x80, hi: 0x80}, - {value: 0xa000, lo: 0x81, hi: 0x81}, - {value: 0x385f, lo: 0x82, hi: 0x82}, - {value: 0xa000, lo: 0x92, hi: 0x92}, - {value: 0x3865, lo: 0x93, hi: 0x93}, - {value: 0xa000, lo: 0x95, hi: 0x95}, - {value: 0x8132, lo: 0x96, hi: 0x9c}, - {value: 0x8132, lo: 0x9f, hi: 0xa2}, - {value: 0x812d, lo: 0xa3, hi: 0xa3}, - {value: 0x8132, lo: 0xa4, hi: 0xa4}, - {value: 0x8132, lo: 0xa7, hi: 0xa8}, - {value: 0x812d, lo: 0xaa, hi: 0xaa}, - {value: 0x8132, lo: 0xab, hi: 0xac}, - {value: 0x812d, lo: 0xad, hi: 0xad}, - // Block 0xa, offset 0x49 - {value: 0x0000, lo: 0x0c}, - {value: 0x811f, lo: 0x91, hi: 0x91}, - {value: 0x8132, lo: 0xb0, hi: 0xb0}, - {value: 0x812d, lo: 0xb1, hi: 0xb1}, - {value: 0x8132, lo: 0xb2, hi: 0xb3}, - {value: 0x812d, lo: 0xb4, hi: 0xb4}, - {value: 0x8132, lo: 0xb5, hi: 0xb6}, - {value: 0x812d, lo: 0xb7, hi: 0xb9}, - {value: 0x8132, lo: 0xba, hi: 0xba}, - {value: 0x812d, lo: 0xbb, hi: 0xbc}, - {value: 0x8132, lo: 0xbd, hi: 0xbd}, - {value: 0x812d, lo: 0xbe, hi: 0xbe}, - {value: 0x8132, lo: 0xbf, hi: 0xbf}, - // Block 0xb, offset 0x56 - {value: 0x0005, lo: 0x07}, - {value: 0x8132, lo: 0x80, hi: 0x80}, - {value: 0x8132, lo: 0x81, hi: 0x81}, - {value: 0x812d, lo: 0x82, hi: 0x83}, - {value: 0x812d, lo: 0x84, hi: 0x85}, - {value: 0x812d, lo: 0x86, hi: 0x87}, - {value: 0x812d, lo: 0x88, hi: 0x89}, - {value: 0x8132, lo: 0x8a, hi: 0x8a}, - // Block 0xc, offset 0x5e - {value: 0x0000, lo: 0x03}, - {value: 0x8132, lo: 0xab, hi: 0xb1}, - {value: 0x812d, lo: 0xb2, hi: 0xb2}, - {value: 0x8132, lo: 0xb3, hi: 0xb3}, - // Block 0xd, offset 0x62 - {value: 0x0000, lo: 0x04}, - {value: 0x8132, lo: 0x96, hi: 0x99}, - {value: 0x8132, lo: 0x9b, hi: 0xa3}, - {value: 0x8132, lo: 0xa5, hi: 0xa7}, - {value: 0x8132, lo: 0xa9, hi: 0xad}, - // Block 0xe, offset 0x67 - {value: 0x0000, lo: 0x01}, - {value: 0x812d, lo: 0x99, hi: 0x9b}, - // Block 0xf, offset 0x69 - {value: 0x0000, lo: 0x10}, - {value: 0x8132, lo: 0x94, hi: 0xa1}, - {value: 0x812d, lo: 0xa3, hi: 0xa3}, - {value: 0x8132, lo: 0xa4, hi: 0xa5}, - {value: 0x812d, lo: 0xa6, hi: 0xa6}, - {value: 0x8132, lo: 0xa7, hi: 0xa8}, - {value: 0x812d, lo: 0xa9, hi: 0xa9}, - {value: 0x8132, lo: 0xaa, hi: 0xac}, - {value: 0x812d, lo: 0xad, hi: 0xaf}, - {value: 0x8116, lo: 0xb0, hi: 0xb0}, - {value: 0x8117, lo: 0xb1, hi: 0xb1}, - {value: 0x8118, lo: 0xb2, hi: 0xb2}, - {value: 0x8132, lo: 0xb3, hi: 0xb5}, - {value: 0x812d, lo: 0xb6, hi: 0xb6}, - {value: 0x8132, lo: 0xb7, hi: 0xb8}, - {value: 0x812d, lo: 0xb9, hi: 0xba}, - {value: 0x8132, lo: 0xbb, hi: 0xbf}, - // Block 0x10, offset 0x7a - {value: 0x0000, lo: 0x07}, - {value: 0xa000, lo: 0xa8, hi: 0xa8}, - {value: 0x3ed8, lo: 0xa9, hi: 0xa9}, - {value: 0xa000, lo: 0xb0, hi: 0xb0}, - {value: 0x3ee0, lo: 0xb1, hi: 0xb1}, - {value: 0xa000, lo: 0xb3, hi: 0xb3}, - {value: 0x3ee8, lo: 0xb4, hi: 0xb4}, - {value: 0x9902, lo: 0xbc, hi: 0xbc}, - // Block 0x11, offset 0x82 - {value: 0x0008, lo: 0x06}, - {value: 0x8104, lo: 0x8d, hi: 0x8d}, - {value: 0x8132, lo: 0x91, hi: 0x91}, - {value: 0x812d, lo: 0x92, hi: 0x92}, - {value: 0x8132, lo: 0x93, hi: 0x93}, - {value: 0x8132, lo: 0x94, hi: 0x94}, - {value: 0x451c, lo: 0x98, hi: 0x9f}, - // Block 0x12, offset 0x89 - {value: 0x0000, lo: 0x02}, - {value: 0x8102, lo: 0xbc, hi: 0xbc}, - {value: 0x9900, lo: 0xbe, hi: 0xbe}, - // Block 0x13, offset 0x8c - {value: 0x0008, lo: 0x06}, - {value: 0xa000, lo: 0x87, hi: 0x87}, - {value: 0x2c9e, lo: 0x8b, hi: 0x8c}, - {value: 0x8104, lo: 0x8d, hi: 0x8d}, - {value: 0x9900, lo: 0x97, hi: 0x97}, - {value: 0x455c, lo: 0x9c, hi: 0x9d}, - {value: 0x456c, lo: 0x9f, hi: 0x9f}, - // Block 0x14, offset 0x93 - {value: 0x0000, lo: 0x03}, - {value: 0x4594, lo: 0xb3, hi: 0xb3}, - {value: 0x459c, lo: 0xb6, hi: 0xb6}, - {value: 0x8102, lo: 0xbc, hi: 0xbc}, - // Block 0x15, offset 0x97 - {value: 0x0008, lo: 0x03}, - {value: 0x8104, lo: 0x8d, hi: 0x8d}, - {value: 0x4574, lo: 0x99, hi: 0x9b}, - {value: 0x458c, lo: 0x9e, hi: 0x9e}, - // Block 0x16, offset 0x9b - {value: 0x0000, lo: 0x01}, - {value: 0x8102, lo: 0xbc, hi: 0xbc}, - // Block 0x17, offset 0x9d - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0x8d, hi: 0x8d}, - // Block 0x18, offset 0x9f - {value: 0x0000, lo: 0x08}, - {value: 0xa000, lo: 0x87, hi: 0x87}, - {value: 0x2cb6, lo: 0x88, hi: 0x88}, - {value: 0x2cae, lo: 0x8b, hi: 0x8b}, - {value: 0x2cbe, lo: 0x8c, hi: 0x8c}, - {value: 0x8104, lo: 0x8d, hi: 0x8d}, - {value: 0x9900, lo: 0x96, hi: 0x97}, - {value: 0x45a4, lo: 0x9c, hi: 0x9c}, - {value: 0x45ac, lo: 0x9d, hi: 0x9d}, - // Block 0x19, offset 0xa8 - {value: 0x0000, lo: 0x03}, - {value: 0xa000, lo: 0x92, hi: 0x92}, - {value: 0x2cc6, lo: 0x94, hi: 0x94}, - {value: 0x9900, lo: 0xbe, hi: 0xbe}, - // Block 0x1a, offset 0xac - {value: 0x0000, lo: 0x06}, - {value: 0xa000, lo: 0x86, hi: 0x87}, - {value: 0x2cce, lo: 0x8a, hi: 0x8a}, - {value: 0x2cde, lo: 0x8b, hi: 0x8b}, - {value: 0x2cd6, lo: 0x8c, hi: 0x8c}, - {value: 0x8104, lo: 0x8d, hi: 0x8d}, - {value: 0x9900, lo: 0x97, hi: 0x97}, - // Block 0x1b, offset 0xb3 - {value: 0x1801, lo: 0x04}, - {value: 0xa000, lo: 0x86, hi: 0x86}, - {value: 0x3ef0, lo: 0x88, hi: 0x88}, - {value: 0x8104, lo: 0x8d, hi: 0x8d}, - {value: 0x8120, lo: 0x95, hi: 0x96}, - // Block 0x1c, offset 0xb8 - {value: 0x0000, lo: 0x02}, - {value: 0x8102, lo: 0xbc, hi: 0xbc}, - {value: 0xa000, lo: 0xbf, hi: 0xbf}, - // Block 0x1d, offset 0xbb - {value: 0x0000, lo: 0x09}, - {value: 0x2ce6, lo: 0x80, hi: 0x80}, - {value: 0x9900, lo: 0x82, hi: 0x82}, - {value: 0xa000, lo: 0x86, hi: 0x86}, - {value: 0x2cee, lo: 0x87, hi: 0x87}, - {value: 0x2cf6, lo: 0x88, hi: 0x88}, - {value: 0x2f50, lo: 0x8a, hi: 0x8a}, - {value: 0x2dd8, lo: 0x8b, hi: 0x8b}, - {value: 0x8104, lo: 0x8d, hi: 0x8d}, - {value: 0x9900, lo: 0x95, hi: 0x96}, - // Block 0x1e, offset 0xc5 - {value: 0x0000, lo: 0x01}, - {value: 0x9900, lo: 0xbe, hi: 0xbe}, - // Block 0x1f, offset 0xc7 - {value: 0x0000, lo: 0x06}, - {value: 0xa000, lo: 0x86, hi: 0x87}, - {value: 0x2cfe, lo: 0x8a, hi: 0x8a}, - {value: 0x2d0e, lo: 0x8b, hi: 0x8b}, - {value: 0x2d06, lo: 0x8c, hi: 0x8c}, - {value: 0x8104, lo: 0x8d, hi: 0x8d}, - {value: 0x9900, lo: 0x97, hi: 0x97}, - // Block 0x20, offset 0xce - {value: 0x6bea, lo: 0x07}, - {value: 0x9904, lo: 0x8a, hi: 0x8a}, - {value: 0x9900, lo: 0x8f, hi: 0x8f}, - {value: 0xa000, lo: 0x99, hi: 0x99}, - {value: 0x3ef8, lo: 0x9a, hi: 0x9a}, - {value: 0x2f58, lo: 0x9c, hi: 0x9c}, - {value: 0x2de3, lo: 0x9d, hi: 0x9d}, - {value: 0x2d16, lo: 0x9e, hi: 0x9f}, - // Block 0x21, offset 0xd6 - {value: 0x0000, lo: 0x02}, - {value: 0x8122, lo: 0xb8, hi: 0xb9}, - {value: 0x8104, lo: 0xba, hi: 0xba}, - // Block 0x22, offset 0xd9 - {value: 0x0000, lo: 0x01}, - {value: 0x8123, lo: 0x88, hi: 0x8b}, - // Block 0x23, offset 0xdb - {value: 0x0000, lo: 0x01}, - {value: 0x8124, lo: 0xb8, hi: 0xb9}, - // Block 0x24, offset 0xdd - {value: 0x0000, lo: 0x01}, - {value: 0x8125, lo: 0x88, hi: 0x8b}, - // Block 0x25, offset 0xdf - {value: 0x0000, lo: 0x04}, - {value: 0x812d, lo: 0x98, hi: 0x99}, - {value: 0x812d, lo: 0xb5, hi: 0xb5}, - {value: 0x812d, lo: 0xb7, hi: 0xb7}, - {value: 0x812b, lo: 0xb9, hi: 0xb9}, - // Block 0x26, offset 0xe4 - {value: 0x0000, lo: 0x10}, - {value: 0x2644, lo: 0x83, hi: 0x83}, - {value: 0x264b, lo: 0x8d, hi: 0x8d}, - {value: 0x2652, lo: 0x92, hi: 0x92}, - {value: 0x2659, lo: 0x97, hi: 0x97}, - {value: 0x2660, lo: 0x9c, hi: 0x9c}, - {value: 0x263d, lo: 0xa9, hi: 0xa9}, - {value: 0x8126, lo: 0xb1, hi: 0xb1}, - {value: 0x8127, lo: 0xb2, hi: 0xb2}, - {value: 0x4a84, lo: 0xb3, hi: 0xb3}, - {value: 0x8128, lo: 0xb4, hi: 0xb4}, - {value: 0x4a8d, lo: 0xb5, hi: 0xb5}, - {value: 0x45b4, lo: 0xb6, hi: 0xb6}, - {value: 0x8200, lo: 0xb7, hi: 0xb7}, - {value: 0x45bc, lo: 0xb8, hi: 0xb8}, - {value: 0x8200, lo: 0xb9, hi: 0xb9}, - {value: 0x8127, lo: 0xba, hi: 0xbd}, - // Block 0x27, offset 0xf5 - {value: 0x0000, lo: 0x0b}, - {value: 0x8127, lo: 0x80, hi: 0x80}, - {value: 0x4a96, lo: 0x81, hi: 0x81}, - {value: 0x8132, lo: 0x82, hi: 0x83}, - {value: 0x8104, lo: 0x84, hi: 0x84}, - {value: 0x8132, lo: 0x86, hi: 0x87}, - {value: 0x266e, lo: 0x93, hi: 0x93}, - {value: 0x2675, lo: 0x9d, hi: 0x9d}, - {value: 0x267c, lo: 0xa2, hi: 0xa2}, - {value: 0x2683, lo: 0xa7, hi: 0xa7}, - {value: 0x268a, lo: 0xac, hi: 0xac}, - {value: 0x2667, lo: 0xb9, hi: 0xb9}, - // Block 0x28, offset 0x101 - {value: 0x0000, lo: 0x01}, - {value: 0x812d, lo: 0x86, hi: 0x86}, - // Block 0x29, offset 0x103 - {value: 0x0000, lo: 0x05}, - {value: 0xa000, lo: 0xa5, hi: 0xa5}, - {value: 0x2d1e, lo: 0xa6, hi: 0xa6}, - {value: 0x9900, lo: 0xae, hi: 0xae}, - {value: 0x8102, lo: 0xb7, hi: 0xb7}, - {value: 0x8104, lo: 0xb9, hi: 0xba}, - // Block 0x2a, offset 0x109 - {value: 0x0000, lo: 0x01}, - {value: 0x812d, lo: 0x8d, hi: 0x8d}, - // Block 0x2b, offset 0x10b - {value: 0x0000, lo: 0x01}, - {value: 0xa000, lo: 0x80, hi: 0x92}, - // Block 0x2c, offset 0x10d - {value: 0x0000, lo: 0x01}, - {value: 0xb900, lo: 0xa1, hi: 0xb5}, - // Block 0x2d, offset 0x10f - {value: 0x0000, lo: 0x01}, - {value: 0x9900, lo: 0xa8, hi: 0xbf}, - // Block 0x2e, offset 0x111 - {value: 0x0000, lo: 0x01}, - {value: 0x9900, lo: 0x80, hi: 0x82}, - // Block 0x2f, offset 0x113 - {value: 0x0000, lo: 0x01}, - {value: 0x8132, lo: 0x9d, hi: 0x9f}, - // Block 0x30, offset 0x115 - {value: 0x0000, lo: 0x02}, - {value: 0x8104, lo: 0x94, hi: 0x94}, - {value: 0x8104, lo: 0xb4, hi: 0xb4}, - // Block 0x31, offset 0x118 - {value: 0x0000, lo: 0x02}, - {value: 0x8104, lo: 0x92, hi: 0x92}, - {value: 0x8132, lo: 0x9d, hi: 0x9d}, - // Block 0x32, offset 0x11b - {value: 0x0000, lo: 0x01}, - {value: 0x8131, lo: 0xa9, hi: 0xa9}, - // Block 0x33, offset 0x11d - {value: 0x0004, lo: 0x02}, - {value: 0x812e, lo: 0xb9, hi: 0xba}, - {value: 0x812d, lo: 0xbb, hi: 0xbb}, - // Block 0x34, offset 0x120 - {value: 0x0000, lo: 0x02}, - {value: 0x8132, lo: 0x97, hi: 0x97}, - {value: 0x812d, lo: 0x98, hi: 0x98}, - // Block 0x35, offset 0x123 - {value: 0x0000, lo: 0x03}, - {value: 0x8104, lo: 0xa0, hi: 0xa0}, - {value: 0x8132, lo: 0xb5, hi: 0xbc}, - {value: 0x812d, lo: 0xbf, hi: 0xbf}, - // Block 0x36, offset 0x127 - {value: 0x0000, lo: 0x04}, - {value: 0x8132, lo: 0xb0, hi: 0xb4}, - {value: 0x812d, lo: 0xb5, hi: 0xba}, - {value: 0x8132, lo: 0xbb, hi: 0xbc}, - {value: 0x812d, lo: 0xbd, hi: 0xbd}, - // Block 0x37, offset 0x12c - {value: 0x0000, lo: 0x08}, - {value: 0x2d66, lo: 0x80, hi: 0x80}, - {value: 0x2d6e, lo: 0x81, hi: 0x81}, - {value: 0xa000, lo: 0x82, hi: 0x82}, - {value: 0x2d76, lo: 0x83, hi: 0x83}, - {value: 0x8104, lo: 0x84, hi: 0x84}, - {value: 0x8132, lo: 0xab, hi: 0xab}, - {value: 0x812d, lo: 0xac, hi: 0xac}, - {value: 0x8132, lo: 0xad, hi: 0xb3}, - // Block 0x38, offset 0x135 - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0xaa, hi: 0xab}, - // Block 0x39, offset 0x137 - {value: 0x0000, lo: 0x02}, - {value: 0x8102, lo: 0xa6, hi: 0xa6}, - {value: 0x8104, lo: 0xb2, hi: 0xb3}, - // Block 0x3a, offset 0x13a - {value: 0x0000, lo: 0x01}, - {value: 0x8102, lo: 0xb7, hi: 0xb7}, - // Block 0x3b, offset 0x13c - {value: 0x0000, lo: 0x0a}, - {value: 0x8132, lo: 0x90, hi: 0x92}, - {value: 0x8101, lo: 0x94, hi: 0x94}, - {value: 0x812d, lo: 0x95, hi: 0x99}, - {value: 0x8132, lo: 0x9a, hi: 0x9b}, - {value: 0x812d, lo: 0x9c, hi: 0x9f}, - {value: 0x8132, lo: 0xa0, hi: 0xa0}, - {value: 0x8101, lo: 0xa2, hi: 0xa8}, - {value: 0x812d, lo: 0xad, hi: 0xad}, - {value: 0x8132, lo: 0xb4, hi: 0xb4}, - {value: 0x8132, lo: 0xb8, hi: 0xb9}, - // Block 0x3c, offset 0x147 - {value: 0x0000, lo: 0x0f}, - {value: 0x8132, lo: 0x80, hi: 0x81}, - {value: 0x812d, lo: 0x82, hi: 0x82}, - {value: 0x8132, lo: 0x83, hi: 0x89}, - {value: 0x812d, lo: 0x8a, hi: 0x8a}, - {value: 0x8132, lo: 0x8b, hi: 0x8c}, - {value: 0x8135, lo: 0x8d, hi: 0x8d}, - {value: 0x812a, lo: 0x8e, hi: 0x8e}, - {value: 0x812d, lo: 0x8f, hi: 0x8f}, - {value: 0x8129, lo: 0x90, hi: 0x90}, - {value: 0x8132, lo: 0x91, hi: 0xb5}, - {value: 0x8132, lo: 0xbb, hi: 0xbb}, - {value: 0x8134, lo: 0xbc, hi: 0xbc}, - {value: 0x812d, lo: 0xbd, hi: 0xbd}, - {value: 0x8132, lo: 0xbe, hi: 0xbe}, - {value: 0x812d, lo: 0xbf, hi: 0xbf}, - // Block 0x3d, offset 0x157 - {value: 0x0004, lo: 0x03}, - {value: 0x0433, lo: 0x80, hi: 0x81}, - {value: 0x8100, lo: 0x97, hi: 0x97}, - {value: 0x8100, lo: 0xbe, hi: 0xbe}, - // Block 0x3e, offset 0x15b - {value: 0x0000, lo: 0x0d}, - {value: 0x8132, lo: 0x90, hi: 0x91}, - {value: 0x8101, lo: 0x92, hi: 0x93}, - {value: 0x8132, lo: 0x94, hi: 0x97}, - {value: 0x8101, lo: 0x98, hi: 0x9a}, - {value: 0x8132, lo: 0x9b, hi: 0x9c}, - {value: 0x8132, lo: 0xa1, hi: 0xa1}, - {value: 0x8101, lo: 0xa5, hi: 0xa6}, - {value: 0x8132, lo: 0xa7, hi: 0xa7}, - {value: 0x812d, lo: 0xa8, hi: 0xa8}, - {value: 0x8132, lo: 0xa9, hi: 0xa9}, - {value: 0x8101, lo: 0xaa, hi: 0xab}, - {value: 0x812d, lo: 0xac, hi: 0xaf}, - {value: 0x8132, lo: 0xb0, hi: 0xb0}, - // Block 0x3f, offset 0x169 - {value: 0x427b, lo: 0x02}, - {value: 0x01b8, lo: 0xa6, hi: 0xa6}, - {value: 0x0057, lo: 0xaa, hi: 0xab}, - // Block 0x40, offset 0x16c - {value: 0x0007, lo: 0x05}, - {value: 0xa000, lo: 0x90, hi: 0x90}, - {value: 0xa000, lo: 0x92, hi: 0x92}, - {value: 0xa000, lo: 0x94, hi: 0x94}, - {value: 0x3bb9, lo: 0x9a, hi: 0x9b}, - {value: 0x3bc7, lo: 0xae, hi: 0xae}, - // Block 0x41, offset 0x172 - {value: 0x000e, lo: 0x05}, - {value: 0x3bce, lo: 0x8d, hi: 0x8e}, - {value: 0x3bd5, lo: 0x8f, hi: 0x8f}, - {value: 0xa000, lo: 0x90, hi: 0x90}, - {value: 0xa000, lo: 0x92, hi: 0x92}, - {value: 0xa000, lo: 0x94, hi: 0x94}, - // Block 0x42, offset 0x178 - {value: 0x6408, lo: 0x0a}, - {value: 0xa000, lo: 0x83, hi: 0x83}, - {value: 0x3be3, lo: 0x84, hi: 0x84}, - {value: 0xa000, lo: 0x88, hi: 0x88}, - {value: 0x3bea, lo: 0x89, hi: 0x89}, - {value: 0xa000, lo: 0x8b, hi: 0x8b}, - {value: 0x3bf1, lo: 0x8c, hi: 0x8c}, - {value: 0xa000, lo: 0xa3, hi: 0xa3}, - {value: 0x3bf8, lo: 0xa4, hi: 0xa5}, - {value: 0x3bff, lo: 0xa6, hi: 0xa6}, - {value: 0xa000, lo: 0xbc, hi: 0xbc}, - // Block 0x43, offset 0x183 - {value: 0x0007, lo: 0x03}, - {value: 0x3c68, lo: 0xa0, hi: 0xa1}, - {value: 0x3c92, lo: 0xa2, hi: 0xa3}, - {value: 0x3cbc, lo: 0xaa, hi: 0xad}, - // Block 0x44, offset 0x187 - {value: 0x0004, lo: 0x01}, - {value: 0x048b, lo: 0xa9, hi: 0xaa}, - // Block 0x45, offset 0x189 - {value: 0x0000, lo: 0x01}, - {value: 0x44dd, lo: 0x9c, hi: 0x9c}, - // Block 0x46, offset 0x18b - {value: 0x0000, lo: 0x01}, - {value: 0x8132, lo: 0xaf, hi: 0xb1}, - // Block 0x47, offset 0x18d - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0xbf, hi: 0xbf}, - // Block 0x48, offset 0x18f - {value: 0x0000, lo: 0x01}, - {value: 0x8132, lo: 0xa0, hi: 0xbf}, - // Block 0x49, offset 0x191 - {value: 0x0000, lo: 0x05}, - {value: 0x812c, lo: 0xaa, hi: 0xaa}, - {value: 0x8131, lo: 0xab, hi: 0xab}, - {value: 0x8133, lo: 0xac, hi: 0xac}, - {value: 0x812e, lo: 0xad, hi: 0xad}, - {value: 0x812f, lo: 0xae, hi: 0xaf}, - // Block 0x4a, offset 0x197 - {value: 0x0000, lo: 0x03}, - {value: 0x4a9f, lo: 0xb3, hi: 0xb3}, - {value: 0x4a9f, lo: 0xb5, hi: 0xb6}, - {value: 0x4a9f, lo: 0xba, hi: 0xbf}, - // Block 0x4b, offset 0x19b - {value: 0x0000, lo: 0x01}, - {value: 0x4a9f, lo: 0x8f, hi: 0xa3}, - // Block 0x4c, offset 0x19d - {value: 0x0000, lo: 0x01}, - {value: 0x8100, lo: 0xae, hi: 0xbe}, - // Block 0x4d, offset 0x19f - {value: 0x0000, lo: 0x07}, - {value: 0x8100, lo: 0x84, hi: 0x84}, - {value: 0x8100, lo: 0x87, hi: 0x87}, - {value: 0x8100, lo: 0x90, hi: 0x90}, - {value: 0x8100, lo: 0x9e, hi: 0x9e}, - {value: 0x8100, lo: 0xa1, hi: 0xa1}, - {value: 0x8100, lo: 0xb2, hi: 0xb2}, - {value: 0x8100, lo: 0xbb, hi: 0xbb}, - // Block 0x4e, offset 0x1a7 - {value: 0x0000, lo: 0x03}, - {value: 0x8100, lo: 0x80, hi: 0x80}, - {value: 0x8100, lo: 0x8b, hi: 0x8b}, - {value: 0x8100, lo: 0x8e, hi: 0x8e}, - // Block 0x4f, offset 0x1ab - {value: 0x0000, lo: 0x02}, - {value: 0x8132, lo: 0xaf, hi: 0xaf}, - {value: 0x8132, lo: 0xb4, hi: 0xbd}, - // Block 0x50, offset 0x1ae - {value: 0x0000, lo: 0x01}, - {value: 0x8132, lo: 0x9e, hi: 0x9f}, - // Block 0x51, offset 0x1b0 - {value: 0x0000, lo: 0x01}, - {value: 0x8132, lo: 0xb0, hi: 0xb1}, - // Block 0x52, offset 0x1b2 - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0x86, hi: 0x86}, - // Block 0x53, offset 0x1b4 - {value: 0x0000, lo: 0x02}, - {value: 0x8104, lo: 0x84, hi: 0x84}, - {value: 0x8132, lo: 0xa0, hi: 0xb1}, - // Block 0x54, offset 0x1b7 - {value: 0x0000, lo: 0x01}, - {value: 0x812d, lo: 0xab, hi: 0xad}, - // Block 0x55, offset 0x1b9 - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0x93, hi: 0x93}, - // Block 0x56, offset 0x1bb - {value: 0x0000, lo: 0x01}, - {value: 0x8102, lo: 0xb3, hi: 0xb3}, - // Block 0x57, offset 0x1bd - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0x80, hi: 0x80}, - // Block 0x58, offset 0x1bf - {value: 0x0000, lo: 0x05}, - {value: 0x8132, lo: 0xb0, hi: 0xb0}, - {value: 0x8132, lo: 0xb2, hi: 0xb3}, - {value: 0x812d, lo: 0xb4, hi: 0xb4}, - {value: 0x8132, lo: 0xb7, hi: 0xb8}, - {value: 0x8132, lo: 0xbe, hi: 0xbf}, - // Block 0x59, offset 0x1c5 - {value: 0x0000, lo: 0x02}, - {value: 0x8132, lo: 0x81, hi: 0x81}, - {value: 0x8104, lo: 0xb6, hi: 0xb6}, - // Block 0x5a, offset 0x1c8 - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0xad, hi: 0xad}, - // Block 0x5b, offset 0x1ca - {value: 0x0000, lo: 0x06}, - {value: 0xe500, lo: 0x80, hi: 0x80}, - {value: 0xc600, lo: 0x81, hi: 0x9b}, - {value: 0xe500, lo: 0x9c, hi: 0x9c}, - {value: 0xc600, lo: 0x9d, hi: 0xb7}, - {value: 0xe500, lo: 0xb8, hi: 0xb8}, - {value: 0xc600, lo: 0xb9, hi: 0xbf}, - // Block 0x5c, offset 0x1d1 - {value: 0x0000, lo: 0x05}, - {value: 0xc600, lo: 0x80, hi: 0x93}, - {value: 0xe500, lo: 0x94, hi: 0x94}, - {value: 0xc600, lo: 0x95, hi: 0xaf}, - {value: 0xe500, lo: 0xb0, hi: 0xb0}, - {value: 0xc600, lo: 0xb1, hi: 0xbf}, - // Block 0x5d, offset 0x1d7 - {value: 0x0000, lo: 0x05}, - {value: 0xc600, lo: 0x80, hi: 0x8b}, - {value: 0xe500, lo: 0x8c, hi: 0x8c}, - {value: 0xc600, lo: 0x8d, hi: 0xa7}, - {value: 0xe500, lo: 0xa8, hi: 0xa8}, - {value: 0xc600, lo: 0xa9, hi: 0xbf}, - // Block 0x5e, offset 0x1dd - {value: 0x0000, lo: 0x07}, - {value: 0xc600, lo: 0x80, hi: 0x83}, - {value: 0xe500, lo: 0x84, hi: 0x84}, - {value: 0xc600, lo: 0x85, hi: 0x9f}, - {value: 0xe500, lo: 0xa0, hi: 0xa0}, - {value: 0xc600, lo: 0xa1, hi: 0xbb}, - {value: 0xe500, lo: 0xbc, hi: 0xbc}, - {value: 0xc600, lo: 0xbd, hi: 0xbf}, - // Block 0x5f, offset 0x1e5 - {value: 0x0000, lo: 0x05}, - {value: 0xc600, lo: 0x80, hi: 0x97}, - {value: 0xe500, lo: 0x98, hi: 0x98}, - {value: 0xc600, lo: 0x99, hi: 0xb3}, - {value: 0xe500, lo: 0xb4, hi: 0xb4}, - {value: 0xc600, lo: 0xb5, hi: 0xbf}, - // Block 0x60, offset 0x1eb - {value: 0x0000, lo: 0x05}, - {value: 0xc600, lo: 0x80, hi: 0x8f}, - {value: 0xe500, lo: 0x90, hi: 0x90}, - {value: 0xc600, lo: 0x91, hi: 0xab}, - {value: 0xe500, lo: 0xac, hi: 0xac}, - {value: 0xc600, lo: 0xad, hi: 0xbf}, - // Block 0x61, offset 0x1f1 - {value: 0x0000, lo: 0x05}, - {value: 0xc600, lo: 0x80, hi: 0x87}, - {value: 0xe500, lo: 0x88, hi: 0x88}, - {value: 0xc600, lo: 0x89, hi: 0xa3}, - {value: 0xe500, lo: 0xa4, hi: 0xa4}, - {value: 0xc600, lo: 0xa5, hi: 0xbf}, - // Block 0x62, offset 0x1f7 - {value: 0x0000, lo: 0x03}, - {value: 0xc600, lo: 0x80, hi: 0x87}, - {value: 0xe500, lo: 0x88, hi: 0x88}, - {value: 0xc600, lo: 0x89, hi: 0xa3}, - // Block 0x63, offset 0x1fb - {value: 0x0006, lo: 0x0d}, - {value: 0x4390, lo: 0x9d, hi: 0x9d}, - {value: 0x8115, lo: 0x9e, hi: 0x9e}, - {value: 0x4402, lo: 0x9f, hi: 0x9f}, - {value: 0x43f0, lo: 0xaa, hi: 0xab}, - {value: 0x44f4, lo: 0xac, hi: 0xac}, - {value: 0x44fc, lo: 0xad, hi: 0xad}, - {value: 0x4348, lo: 0xae, hi: 0xb1}, - {value: 0x4366, lo: 0xb2, hi: 0xb4}, - {value: 0x437e, lo: 0xb5, hi: 0xb6}, - {value: 0x438a, lo: 0xb8, hi: 0xb8}, - {value: 0x4396, lo: 0xb9, hi: 0xbb}, - {value: 0x43ae, lo: 0xbc, hi: 0xbc}, - {value: 0x43b4, lo: 0xbe, hi: 0xbe}, - // Block 0x64, offset 0x209 - {value: 0x0006, lo: 0x08}, - {value: 0x43ba, lo: 0x80, hi: 0x81}, - {value: 0x43c6, lo: 0x83, hi: 0x84}, - {value: 0x43d8, lo: 0x86, hi: 0x89}, - {value: 0x43fc, lo: 0x8a, hi: 0x8a}, - {value: 0x4378, lo: 0x8b, hi: 0x8b}, - {value: 0x4360, lo: 0x8c, hi: 0x8c}, - {value: 0x43a8, lo: 0x8d, hi: 0x8d}, - {value: 0x43d2, lo: 0x8e, hi: 0x8e}, - // Block 0x65, offset 0x212 - {value: 0x0000, lo: 0x02}, - {value: 0x8100, lo: 0xa4, hi: 0xa5}, - {value: 0x8100, lo: 0xb0, hi: 0xb1}, - // Block 0x66, offset 0x215 - {value: 0x0000, lo: 0x02}, - {value: 0x8100, lo: 0x9b, hi: 0x9d}, - {value: 0x8200, lo: 0x9e, hi: 0xa3}, - // Block 0x67, offset 0x218 - {value: 0x0000, lo: 0x01}, - {value: 0x8100, lo: 0x90, hi: 0x90}, - // Block 0x68, offset 0x21a - {value: 0x0000, lo: 0x02}, - {value: 0x8100, lo: 0x99, hi: 0x99}, - {value: 0x8200, lo: 0xb2, hi: 0xb4}, - // Block 0x69, offset 0x21d - {value: 0x0000, lo: 0x01}, - {value: 0x8100, lo: 0xbc, hi: 0xbd}, - // Block 0x6a, offset 0x21f - {value: 0x0000, lo: 0x03}, - {value: 0x8132, lo: 0xa0, hi: 0xa6}, - {value: 0x812d, lo: 0xa7, hi: 0xad}, - {value: 0x8132, lo: 0xae, hi: 0xaf}, - // Block 0x6b, offset 0x223 - {value: 0x0000, lo: 0x04}, - {value: 0x8100, lo: 0x89, hi: 0x8c}, - {value: 0x8100, lo: 0xb0, hi: 0xb2}, - {value: 0x8100, lo: 0xb4, hi: 0xb4}, - {value: 0x8100, lo: 0xb6, hi: 0xbf}, - // Block 0x6c, offset 0x228 - {value: 0x0000, lo: 0x01}, - {value: 0x8100, lo: 0x81, hi: 0x8c}, - // Block 0x6d, offset 0x22a - {value: 0x0000, lo: 0x01}, - {value: 0x8100, lo: 0xb5, hi: 0xba}, - // Block 0x6e, offset 0x22c - {value: 0x0000, lo: 0x04}, - {value: 0x4a9f, lo: 0x9e, hi: 0x9f}, - {value: 0x4a9f, lo: 0xa3, hi: 0xa3}, - {value: 0x4a9f, lo: 0xa5, hi: 0xa6}, - {value: 0x4a9f, lo: 0xaa, hi: 0xaf}, - // Block 0x6f, offset 0x231 - {value: 0x0000, lo: 0x05}, - {value: 0x4a9f, lo: 0x82, hi: 0x87}, - {value: 0x4a9f, lo: 0x8a, hi: 0x8f}, - {value: 0x4a9f, lo: 0x92, hi: 0x97}, - {value: 0x4a9f, lo: 0x9a, hi: 0x9c}, - {value: 0x8100, lo: 0xa3, hi: 0xa3}, - // Block 0x70, offset 0x237 - {value: 0x0000, lo: 0x01}, - {value: 0x812d, lo: 0xbd, hi: 0xbd}, - // Block 0x71, offset 0x239 - {value: 0x0000, lo: 0x01}, - {value: 0x812d, lo: 0xa0, hi: 0xa0}, - // Block 0x72, offset 0x23b - {value: 0x0000, lo: 0x01}, - {value: 0x8132, lo: 0xb6, hi: 0xba}, - // Block 0x73, offset 0x23d - {value: 0x002c, lo: 0x05}, - {value: 0x812d, lo: 0x8d, hi: 0x8d}, - {value: 0x8132, lo: 0x8f, hi: 0x8f}, - {value: 0x8132, lo: 0xb8, hi: 0xb8}, - {value: 0x8101, lo: 0xb9, hi: 0xba}, - {value: 0x8104, lo: 0xbf, hi: 0xbf}, - // Block 0x74, offset 0x243 - {value: 0x0000, lo: 0x02}, - {value: 0x8132, lo: 0xa5, hi: 0xa5}, - {value: 0x812d, lo: 0xa6, hi: 0xa6}, - // Block 0x75, offset 0x246 - {value: 0x0000, lo: 0x02}, - {value: 0x8104, lo: 0x86, hi: 0x86}, - {value: 0x8104, lo: 0xbf, hi: 0xbf}, - // Block 0x76, offset 0x249 - {value: 0x17fe, lo: 0x07}, - {value: 0xa000, lo: 0x99, hi: 0x99}, - {value: 0x4238, lo: 0x9a, hi: 0x9a}, - {value: 0xa000, lo: 0x9b, hi: 0x9b}, - {value: 0x4242, lo: 0x9c, hi: 0x9c}, - {value: 0xa000, lo: 0xa5, hi: 0xa5}, - {value: 0x424c, lo: 0xab, hi: 0xab}, - {value: 0x8104, lo: 0xb9, hi: 0xba}, - // Block 0x77, offset 0x251 - {value: 0x0000, lo: 0x06}, - {value: 0x8132, lo: 0x80, hi: 0x82}, - {value: 0x9900, lo: 0xa7, hi: 0xa7}, - {value: 0x2d7e, lo: 0xae, hi: 0xae}, - {value: 0x2d88, lo: 0xaf, hi: 0xaf}, - {value: 0xa000, lo: 0xb1, hi: 0xb2}, - {value: 0x8104, lo: 0xb3, hi: 0xb4}, - // Block 0x78, offset 0x258 - {value: 0x0000, lo: 0x02}, - {value: 0x8104, lo: 0x80, hi: 0x80}, - {value: 0x8102, lo: 0x8a, hi: 0x8a}, - // Block 0x79, offset 0x25b - {value: 0x0000, lo: 0x02}, - {value: 0x8104, lo: 0xb5, hi: 0xb5}, - {value: 0x8102, lo: 0xb6, hi: 0xb6}, - // Block 0x7a, offset 0x25e - {value: 0x0002, lo: 0x01}, - {value: 0x8102, lo: 0xa9, hi: 0xaa}, - // Block 0x7b, offset 0x260 - {value: 0x0000, lo: 0x07}, - {value: 0xa000, lo: 0x87, hi: 0x87}, - {value: 0x2d92, lo: 0x8b, hi: 0x8b}, - {value: 0x2d9c, lo: 0x8c, hi: 0x8c}, - {value: 0x8104, lo: 0x8d, hi: 0x8d}, - {value: 0x9900, lo: 0x97, hi: 0x97}, - {value: 0x8132, lo: 0xa6, hi: 0xac}, - {value: 0x8132, lo: 0xb0, hi: 0xb4}, - // Block 0x7c, offset 0x268 - {value: 0x0000, lo: 0x02}, - {value: 0x8104, lo: 0x82, hi: 0x82}, - {value: 0x8102, lo: 0x86, hi: 0x86}, - // Block 0x7d, offset 0x26b - {value: 0x6b5a, lo: 0x06}, - {value: 0x9900, lo: 0xb0, hi: 0xb0}, - {value: 0xa000, lo: 0xb9, hi: 0xb9}, - {value: 0x9900, lo: 0xba, hi: 0xba}, - {value: 0x2db0, lo: 0xbb, hi: 0xbb}, - {value: 0x2da6, lo: 0xbc, hi: 0xbd}, - {value: 0x2dba, lo: 0xbe, hi: 0xbe}, - // Block 0x7e, offset 0x272 - {value: 0x0000, lo: 0x02}, - {value: 0x8104, lo: 0x82, hi: 0x82}, - {value: 0x8102, lo: 0x83, hi: 0x83}, - // Block 0x7f, offset 0x275 - {value: 0x0000, lo: 0x05}, - {value: 0x9900, lo: 0xaf, hi: 0xaf}, - {value: 0xa000, lo: 0xb8, hi: 0xb9}, - {value: 0x2dc4, lo: 0xba, hi: 0xba}, - {value: 0x2dce, lo: 0xbb, hi: 0xbb}, - {value: 0x8104, lo: 0xbf, hi: 0xbf}, - // Block 0x80, offset 0x27b - {value: 0x0000, lo: 0x01}, - {value: 0x8102, lo: 0x80, hi: 0x80}, - // Block 0x81, offset 0x27d - {value: 0x0000, lo: 0x02}, - {value: 0x8104, lo: 0xb6, hi: 0xb6}, - {value: 0x8102, lo: 0xb7, hi: 0xb7}, - // Block 0x82, offset 0x280 - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0xab, hi: 0xab}, - // Block 0x83, offset 0x282 - {value: 0x0000, lo: 0x01}, - {value: 0x8101, lo: 0xb0, hi: 0xb4}, - // Block 0x84, offset 0x284 - {value: 0x0000, lo: 0x01}, - {value: 0x8132, lo: 0xb0, hi: 0xb6}, - // Block 0x85, offset 0x286 - {value: 0x0000, lo: 0x01}, - {value: 0x8101, lo: 0x9e, hi: 0x9e}, - // Block 0x86, offset 0x288 - {value: 0x0000, lo: 0x0c}, - {value: 0x45cc, lo: 0x9e, hi: 0x9e}, - {value: 0x45d6, lo: 0x9f, hi: 0x9f}, - {value: 0x460a, lo: 0xa0, hi: 0xa0}, - {value: 0x4618, lo: 0xa1, hi: 0xa1}, - {value: 0x4626, lo: 0xa2, hi: 0xa2}, - {value: 0x4634, lo: 0xa3, hi: 0xa3}, - {value: 0x4642, lo: 0xa4, hi: 0xa4}, - {value: 0x812b, lo: 0xa5, hi: 0xa6}, - {value: 0x8101, lo: 0xa7, hi: 0xa9}, - {value: 0x8130, lo: 0xad, hi: 0xad}, - {value: 0x812b, lo: 0xae, hi: 0xb2}, - {value: 0x812d, lo: 0xbb, hi: 0xbf}, - // Block 0x87, offset 0x295 - {value: 0x0000, lo: 0x09}, - {value: 0x812d, lo: 0x80, hi: 0x82}, - {value: 0x8132, lo: 0x85, hi: 0x89}, - {value: 0x812d, lo: 0x8a, hi: 0x8b}, - {value: 0x8132, lo: 0xaa, hi: 0xad}, - {value: 0x45e0, lo: 0xbb, hi: 0xbb}, - {value: 0x45ea, lo: 0xbc, hi: 0xbc}, - {value: 0x4650, lo: 0xbd, hi: 0xbd}, - {value: 0x466c, lo: 0xbe, hi: 0xbe}, - {value: 0x465e, lo: 0xbf, hi: 0xbf}, - // Block 0x88, offset 0x29f - {value: 0x0000, lo: 0x01}, - {value: 0x467a, lo: 0x80, hi: 0x80}, - // Block 0x89, offset 0x2a1 - {value: 0x0000, lo: 0x01}, - {value: 0x8132, lo: 0x82, hi: 0x84}, - // Block 0x8a, offset 0x2a3 - {value: 0x0000, lo: 0x05}, - {value: 0x8132, lo: 0x80, hi: 0x86}, - {value: 0x8132, lo: 0x88, hi: 0x98}, - {value: 0x8132, lo: 0x9b, hi: 0xa1}, - {value: 0x8132, lo: 0xa3, hi: 0xa4}, - {value: 0x8132, lo: 0xa6, hi: 0xaa}, - // Block 0x8b, offset 0x2a9 - {value: 0x0000, lo: 0x01}, - {value: 0x812d, lo: 0x90, hi: 0x96}, - // Block 0x8c, offset 0x2ab - {value: 0x0000, lo: 0x02}, - {value: 0x8132, lo: 0x84, hi: 0x89}, - {value: 0x8102, lo: 0x8a, hi: 0x8a}, - // Block 0x8d, offset 0x2ae - {value: 0x0000, lo: 0x01}, - {value: 0x8100, lo: 0x93, hi: 0x93}, -} - -// lookup returns the trie value for the first UTF-8 encoding in s and -// the width in bytes of this encoding. The size will be 0 if s does not -// hold enough bytes to complete the encoding. len(s) must be greater than 0. -func (t *nfkcTrie) lookup(s []byte) (v uint16, sz int) { - c0 := s[0] - switch { - case c0 < 0x80: // is ASCII - return nfkcValues[c0], 1 - case c0 < 0xC2: - return 0, 1 // Illegal UTF-8: not a starter, not ASCII. - case c0 < 0xE0: // 2-byte UTF-8 - if len(s) < 2 { - return 0, 0 - } - i := nfkcIndex[c0] - c1 := s[1] - if c1 < 0x80 || 0xC0 <= c1 { - return 0, 1 // Illegal UTF-8: not a continuation byte. - } - return t.lookupValue(uint32(i), c1), 2 - case c0 < 0xF0: // 3-byte UTF-8 - if len(s) < 3 { - return 0, 0 - } - i := nfkcIndex[c0] - c1 := s[1] - if c1 < 0x80 || 0xC0 <= c1 { - return 0, 1 // Illegal UTF-8: not a continuation byte. - } - o := uint32(i)<<6 + uint32(c1) - i = nfkcIndex[o] - c2 := s[2] - if c2 < 0x80 || 0xC0 <= c2 { - return 0, 2 // Illegal UTF-8: not a continuation byte. - } - return t.lookupValue(uint32(i), c2), 3 - case c0 < 0xF8: // 4-byte UTF-8 - if len(s) < 4 { - return 0, 0 - } - i := nfkcIndex[c0] - c1 := s[1] - if c1 < 0x80 || 0xC0 <= c1 { - return 0, 1 // Illegal UTF-8: not a continuation byte. - } - o := uint32(i)<<6 + uint32(c1) - i = nfkcIndex[o] - c2 := s[2] - if c2 < 0x80 || 0xC0 <= c2 { - return 0, 2 // Illegal UTF-8: not a continuation byte. - } - o = uint32(i)<<6 + uint32(c2) - i = nfkcIndex[o] - c3 := s[3] - if c3 < 0x80 || 0xC0 <= c3 { - return 0, 3 // Illegal UTF-8: not a continuation byte. - } - return t.lookupValue(uint32(i), c3), 4 - } - // Illegal rune - return 0, 1 -} - -// lookupUnsafe returns the trie value for the first UTF-8 encoding in s. -// s must start with a full and valid UTF-8 encoded rune. -func (t *nfkcTrie) lookupUnsafe(s []byte) uint16 { - c0 := s[0] - if c0 < 0x80 { // is ASCII - return nfkcValues[c0] - } - i := nfkcIndex[c0] - if c0 < 0xE0 { // 2-byte UTF-8 - return t.lookupValue(uint32(i), s[1]) - } - i = nfkcIndex[uint32(i)<<6+uint32(s[1])] - if c0 < 0xF0 { // 3-byte UTF-8 - return t.lookupValue(uint32(i), s[2]) - } - i = nfkcIndex[uint32(i)<<6+uint32(s[2])] - if c0 < 0xF8 { // 4-byte UTF-8 - return t.lookupValue(uint32(i), s[3]) - } - return 0 -} - -// lookupString returns the trie value for the first UTF-8 encoding in s and -// the width in bytes of this encoding. The size will be 0 if s does not -// hold enough bytes to complete the encoding. len(s) must be greater than 0. -func (t *nfkcTrie) lookupString(s string) (v uint16, sz int) { - c0 := s[0] - switch { - case c0 < 0x80: // is ASCII - return nfkcValues[c0], 1 - case c0 < 0xC2: - return 0, 1 // Illegal UTF-8: not a starter, not ASCII. - case c0 < 0xE0: // 2-byte UTF-8 - if len(s) < 2 { - return 0, 0 - } - i := nfkcIndex[c0] - c1 := s[1] - if c1 < 0x80 || 0xC0 <= c1 { - return 0, 1 // Illegal UTF-8: not a continuation byte. - } - return t.lookupValue(uint32(i), c1), 2 - case c0 < 0xF0: // 3-byte UTF-8 - if len(s) < 3 { - return 0, 0 - } - i := nfkcIndex[c0] - c1 := s[1] - if c1 < 0x80 || 0xC0 <= c1 { - return 0, 1 // Illegal UTF-8: not a continuation byte. - } - o := uint32(i)<<6 + uint32(c1) - i = nfkcIndex[o] - c2 := s[2] - if c2 < 0x80 || 0xC0 <= c2 { - return 0, 2 // Illegal UTF-8: not a continuation byte. - } - return t.lookupValue(uint32(i), c2), 3 - case c0 < 0xF8: // 4-byte UTF-8 - if len(s) < 4 { - return 0, 0 - } - i := nfkcIndex[c0] - c1 := s[1] - if c1 < 0x80 || 0xC0 <= c1 { - return 0, 1 // Illegal UTF-8: not a continuation byte. - } - o := uint32(i)<<6 + uint32(c1) - i = nfkcIndex[o] - c2 := s[2] - if c2 < 0x80 || 0xC0 <= c2 { - return 0, 2 // Illegal UTF-8: not a continuation byte. - } - o = uint32(i)<<6 + uint32(c2) - i = nfkcIndex[o] - c3 := s[3] - if c3 < 0x80 || 0xC0 <= c3 { - return 0, 3 // Illegal UTF-8: not a continuation byte. - } - return t.lookupValue(uint32(i), c3), 4 - } - // Illegal rune - return 0, 1 -} - -// lookupStringUnsafe returns the trie value for the first UTF-8 encoding in s. -// s must start with a full and valid UTF-8 encoded rune. -func (t *nfkcTrie) lookupStringUnsafe(s string) uint16 { - c0 := s[0] - if c0 < 0x80 { // is ASCII - return nfkcValues[c0] - } - i := nfkcIndex[c0] - if c0 < 0xE0 { // 2-byte UTF-8 - return t.lookupValue(uint32(i), s[1]) - } - i = nfkcIndex[uint32(i)<<6+uint32(s[1])] - if c0 < 0xF0 { // 3-byte UTF-8 - return t.lookupValue(uint32(i), s[2]) - } - i = nfkcIndex[uint32(i)<<6+uint32(s[2])] - if c0 < 0xF8 { // 4-byte UTF-8 - return t.lookupValue(uint32(i), s[3]) - } - return 0 -} - -// nfkcTrie. Total size: 16994 bytes (16.60 KiB). Checksum: c3ed54ee046f3c46. -type nfkcTrie struct{} - -func newNfkcTrie(i int) *nfkcTrie { - return &nfkcTrie{} -} - -// lookupValue determines the type of block n and looks up the value for b. -func (t *nfkcTrie) lookupValue(n uint32, b byte) uint16 { - switch { - case n < 90: - return uint16(nfkcValues[n<<6+uint32(b)]) - default: - n -= 90 - return uint16(nfkcSparse.lookup(n, b)) - } -} - -// nfkcValues: 92 blocks, 5888 entries, 11776 bytes -// The third block is the zero block. -var nfkcValues = [5888]uint16{ - // Block 0x0, offset 0x0 - 0x3c: 0xa000, 0x3d: 0xa000, 0x3e: 0xa000, - // Block 0x1, offset 0x40 - 0x41: 0xa000, 0x42: 0xa000, 0x43: 0xa000, 0x44: 0xa000, 0x45: 0xa000, - 0x46: 0xa000, 0x47: 0xa000, 0x48: 0xa000, 0x49: 0xa000, 0x4a: 0xa000, 0x4b: 0xa000, - 0x4c: 0xa000, 0x4d: 0xa000, 0x4e: 0xa000, 0x4f: 0xa000, 0x50: 0xa000, - 0x52: 0xa000, 0x53: 0xa000, 0x54: 0xa000, 0x55: 0xa000, 0x56: 0xa000, 0x57: 0xa000, - 0x58: 0xa000, 0x59: 0xa000, 0x5a: 0xa000, - 0x61: 0xa000, 0x62: 0xa000, 0x63: 0xa000, - 0x64: 0xa000, 0x65: 0xa000, 0x66: 0xa000, 0x67: 0xa000, 0x68: 0xa000, 0x69: 0xa000, - 0x6a: 0xa000, 0x6b: 0xa000, 0x6c: 0xa000, 0x6d: 0xa000, 0x6e: 0xa000, 0x6f: 0xa000, - 0x70: 0xa000, 0x72: 0xa000, 0x73: 0xa000, 0x74: 0xa000, 0x75: 0xa000, - 0x76: 0xa000, 0x77: 0xa000, 0x78: 0xa000, 0x79: 0xa000, 0x7a: 0xa000, - // Block 0x2, offset 0x80 - // Block 0x3, offset 0xc0 - 0xc0: 0x2f6f, 0xc1: 0x2f74, 0xc2: 0x4688, 0xc3: 0x2f79, 0xc4: 0x4697, 0xc5: 0x469c, - 0xc6: 0xa000, 0xc7: 0x46a6, 0xc8: 0x2fe2, 0xc9: 0x2fe7, 0xca: 0x46ab, 0xcb: 0x2ffb, - 0xcc: 0x306e, 0xcd: 0x3073, 0xce: 0x3078, 0xcf: 0x46bf, 0xd1: 0x3104, - 0xd2: 0x3127, 0xd3: 0x312c, 0xd4: 0x46c9, 0xd5: 0x46ce, 0xd6: 0x46dd, - 0xd8: 0xa000, 0xd9: 0x31b3, 0xda: 0x31b8, 0xdb: 0x31bd, 0xdc: 0x470f, 0xdd: 0x3235, - 0xe0: 0x327b, 0xe1: 0x3280, 0xe2: 0x4719, 0xe3: 0x3285, - 0xe4: 0x4728, 0xe5: 0x472d, 0xe6: 0xa000, 0xe7: 0x4737, 0xe8: 0x32ee, 0xe9: 0x32f3, - 0xea: 0x473c, 0xeb: 0x3307, 0xec: 0x337f, 0xed: 0x3384, 0xee: 0x3389, 0xef: 0x4750, - 0xf1: 0x3415, 0xf2: 0x3438, 0xf3: 0x343d, 0xf4: 0x475a, 0xf5: 0x475f, - 0xf6: 0x476e, 0xf8: 0xa000, 0xf9: 0x34c9, 0xfa: 0x34ce, 0xfb: 0x34d3, - 0xfc: 0x47a0, 0xfd: 0x3550, 0xff: 0x3569, - // Block 0x4, offset 0x100 - 0x100: 0x2f7e, 0x101: 0x328a, 0x102: 0x468d, 0x103: 0x471e, 0x104: 0x2f9c, 0x105: 0x32a8, - 0x106: 0x2fb0, 0x107: 0x32bc, 0x108: 0x2fb5, 0x109: 0x32c1, 0x10a: 0x2fba, 0x10b: 0x32c6, - 0x10c: 0x2fbf, 0x10d: 0x32cb, 0x10e: 0x2fc9, 0x10f: 0x32d5, - 0x112: 0x46b0, 0x113: 0x4741, 0x114: 0x2ff1, 0x115: 0x32fd, 0x116: 0x2ff6, 0x117: 0x3302, - 0x118: 0x3014, 0x119: 0x3320, 0x11a: 0x3005, 0x11b: 0x3311, 0x11c: 0x302d, 0x11d: 0x3339, - 0x11e: 0x3037, 0x11f: 0x3343, 0x120: 0x303c, 0x121: 0x3348, 0x122: 0x3046, 0x123: 0x3352, - 0x124: 0x304b, 0x125: 0x3357, 0x128: 0x307d, 0x129: 0x338e, - 0x12a: 0x3082, 0x12b: 0x3393, 0x12c: 0x3087, 0x12d: 0x3398, 0x12e: 0x30aa, 0x12f: 0x33b6, - 0x130: 0x308c, 0x132: 0x195d, 0x133: 0x19e7, 0x134: 0x30b4, 0x135: 0x33c0, - 0x136: 0x30c8, 0x137: 0x33d9, 0x139: 0x30d2, 0x13a: 0x33e3, 0x13b: 0x30dc, - 0x13c: 0x33ed, 0x13d: 0x30d7, 0x13e: 0x33e8, 0x13f: 0x1bac, - // Block 0x5, offset 0x140 - 0x140: 0x1c34, 0x143: 0x30ff, 0x144: 0x3410, 0x145: 0x3118, - 0x146: 0x3429, 0x147: 0x310e, 0x148: 0x341f, 0x149: 0x1c5c, - 0x14c: 0x46d3, 0x14d: 0x4764, 0x14e: 0x3131, 0x14f: 0x3442, 0x150: 0x313b, 0x151: 0x344c, - 0x154: 0x3159, 0x155: 0x346a, 0x156: 0x3172, 0x157: 0x3483, - 0x158: 0x3163, 0x159: 0x3474, 0x15a: 0x46f6, 0x15b: 0x4787, 0x15c: 0x317c, 0x15d: 0x348d, - 0x15e: 0x318b, 0x15f: 0x349c, 0x160: 0x46fb, 0x161: 0x478c, 0x162: 0x31a4, 0x163: 0x34ba, - 0x164: 0x3195, 0x165: 0x34ab, 0x168: 0x4705, 0x169: 0x4796, - 0x16a: 0x470a, 0x16b: 0x479b, 0x16c: 0x31c2, 0x16d: 0x34d8, 0x16e: 0x31cc, 0x16f: 0x34e2, - 0x170: 0x31d1, 0x171: 0x34e7, 0x172: 0x31ef, 0x173: 0x3505, 0x174: 0x3212, 0x175: 0x3528, - 0x176: 0x323a, 0x177: 0x3555, 0x178: 0x324e, 0x179: 0x325d, 0x17a: 0x357d, 0x17b: 0x3267, - 0x17c: 0x3587, 0x17d: 0x326c, 0x17e: 0x358c, 0x17f: 0x00a7, - // Block 0x6, offset 0x180 - 0x184: 0x2dee, 0x185: 0x2df4, - 0x186: 0x2dfa, 0x187: 0x1972, 0x188: 0x1975, 0x189: 0x1a08, 0x18a: 0x1987, 0x18b: 0x198a, - 0x18c: 0x1a3e, 0x18d: 0x2f88, 0x18e: 0x3294, 0x18f: 0x3096, 0x190: 0x33a2, 0x191: 0x3140, - 0x192: 0x3451, 0x193: 0x31d6, 0x194: 0x34ec, 0x195: 0x39cf, 0x196: 0x3b5e, 0x197: 0x39c8, - 0x198: 0x3b57, 0x199: 0x39d6, 0x19a: 0x3b65, 0x19b: 0x39c1, 0x19c: 0x3b50, - 0x19e: 0x38b0, 0x19f: 0x3a3f, 0x1a0: 0x38a9, 0x1a1: 0x3a38, 0x1a2: 0x35b3, 0x1a3: 0x35c5, - 0x1a6: 0x3041, 0x1a7: 0x334d, 0x1a8: 0x30be, 0x1a9: 0x33cf, - 0x1aa: 0x46ec, 0x1ab: 0x477d, 0x1ac: 0x3990, 0x1ad: 0x3b1f, 0x1ae: 0x35d7, 0x1af: 0x35dd, - 0x1b0: 0x33c5, 0x1b1: 0x1942, 0x1b2: 0x1945, 0x1b3: 0x19cf, 0x1b4: 0x3028, 0x1b5: 0x3334, - 0x1b8: 0x30fa, 0x1b9: 0x340b, 0x1ba: 0x38b7, 0x1bb: 0x3a46, - 0x1bc: 0x35ad, 0x1bd: 0x35bf, 0x1be: 0x35b9, 0x1bf: 0x35cb, - // Block 0x7, offset 0x1c0 - 0x1c0: 0x2f8d, 0x1c1: 0x3299, 0x1c2: 0x2f92, 0x1c3: 0x329e, 0x1c4: 0x300a, 0x1c5: 0x3316, - 0x1c6: 0x300f, 0x1c7: 0x331b, 0x1c8: 0x309b, 0x1c9: 0x33a7, 0x1ca: 0x30a0, 0x1cb: 0x33ac, - 0x1cc: 0x3145, 0x1cd: 0x3456, 0x1ce: 0x314a, 0x1cf: 0x345b, 0x1d0: 0x3168, 0x1d1: 0x3479, - 0x1d2: 0x316d, 0x1d3: 0x347e, 0x1d4: 0x31db, 0x1d5: 0x34f1, 0x1d6: 0x31e0, 0x1d7: 0x34f6, - 0x1d8: 0x3186, 0x1d9: 0x3497, 0x1da: 0x319f, 0x1db: 0x34b5, - 0x1de: 0x305a, 0x1df: 0x3366, - 0x1e6: 0x4692, 0x1e7: 0x4723, 0x1e8: 0x46ba, 0x1e9: 0x474b, - 0x1ea: 0x395f, 0x1eb: 0x3aee, 0x1ec: 0x393c, 0x1ed: 0x3acb, 0x1ee: 0x46d8, 0x1ef: 0x4769, - 0x1f0: 0x3958, 0x1f1: 0x3ae7, 0x1f2: 0x3244, 0x1f3: 0x355f, - // Block 0x8, offset 0x200 - 0x200: 0x9932, 0x201: 0x9932, 0x202: 0x9932, 0x203: 0x9932, 0x204: 0x9932, 0x205: 0x8132, - 0x206: 0x9932, 0x207: 0x9932, 0x208: 0x9932, 0x209: 0x9932, 0x20a: 0x9932, 0x20b: 0x9932, - 0x20c: 0x9932, 0x20d: 0x8132, 0x20e: 0x8132, 0x20f: 0x9932, 0x210: 0x8132, 0x211: 0x9932, - 0x212: 0x8132, 0x213: 0x9932, 0x214: 0x9932, 0x215: 0x8133, 0x216: 0x812d, 0x217: 0x812d, - 0x218: 0x812d, 0x219: 0x812d, 0x21a: 0x8133, 0x21b: 0x992b, 0x21c: 0x812d, 0x21d: 0x812d, - 0x21e: 0x812d, 0x21f: 0x812d, 0x220: 0x812d, 0x221: 0x8129, 0x222: 0x8129, 0x223: 0x992d, - 0x224: 0x992d, 0x225: 0x992d, 0x226: 0x992d, 0x227: 0x9929, 0x228: 0x9929, 0x229: 0x812d, - 0x22a: 0x812d, 0x22b: 0x812d, 0x22c: 0x812d, 0x22d: 0x992d, 0x22e: 0x992d, 0x22f: 0x812d, - 0x230: 0x992d, 0x231: 0x992d, 0x232: 0x812d, 0x233: 0x812d, 0x234: 0x8101, 0x235: 0x8101, - 0x236: 0x8101, 0x237: 0x8101, 0x238: 0x9901, 0x239: 0x812d, 0x23a: 0x812d, 0x23b: 0x812d, - 0x23c: 0x812d, 0x23d: 0x8132, 0x23e: 0x8132, 0x23f: 0x8132, - // Block 0x9, offset 0x240 - 0x240: 0x49ae, 0x241: 0x49b3, 0x242: 0x9932, 0x243: 0x49b8, 0x244: 0x4a71, 0x245: 0x9936, - 0x246: 0x8132, 0x247: 0x812d, 0x248: 0x812d, 0x249: 0x812d, 0x24a: 0x8132, 0x24b: 0x8132, - 0x24c: 0x8132, 0x24d: 0x812d, 0x24e: 0x812d, 0x250: 0x8132, 0x251: 0x8132, - 0x252: 0x8132, 0x253: 0x812d, 0x254: 0x812d, 0x255: 0x812d, 0x256: 0x812d, 0x257: 0x8132, - 0x258: 0x8133, 0x259: 0x812d, 0x25a: 0x812d, 0x25b: 0x8132, 0x25c: 0x8134, 0x25d: 0x8135, - 0x25e: 0x8135, 0x25f: 0x8134, 0x260: 0x8135, 0x261: 0x8135, 0x262: 0x8134, 0x263: 0x8132, - 0x264: 0x8132, 0x265: 0x8132, 0x266: 0x8132, 0x267: 0x8132, 0x268: 0x8132, 0x269: 0x8132, - 0x26a: 0x8132, 0x26b: 0x8132, 0x26c: 0x8132, 0x26d: 0x8132, 0x26e: 0x8132, 0x26f: 0x8132, - 0x274: 0x0170, - 0x27a: 0x42a5, - 0x27e: 0x0037, - // Block 0xa, offset 0x280 - 0x284: 0x425a, 0x285: 0x447b, - 0x286: 0x35e9, 0x287: 0x00ce, 0x288: 0x3607, 0x289: 0x3613, 0x28a: 0x3625, - 0x28c: 0x3643, 0x28e: 0x3655, 0x28f: 0x3673, 0x290: 0x3e08, 0x291: 0xa000, - 0x295: 0xa000, 0x297: 0xa000, - 0x299: 0xa000, - 0x29f: 0xa000, 0x2a1: 0xa000, - 0x2a5: 0xa000, 0x2a9: 0xa000, - 0x2aa: 0x3637, 0x2ab: 0x3667, 0x2ac: 0x47fe, 0x2ad: 0x3697, 0x2ae: 0x4828, 0x2af: 0x36a9, - 0x2b0: 0x3e70, 0x2b1: 0xa000, 0x2b5: 0xa000, - 0x2b7: 0xa000, 0x2b9: 0xa000, - 0x2bf: 0xa000, - // Block 0xb, offset 0x2c0 - 0x2c1: 0xa000, 0x2c5: 0xa000, - 0x2c9: 0xa000, 0x2ca: 0x4840, 0x2cb: 0x485e, - 0x2cc: 0x36c7, 0x2cd: 0x36df, 0x2ce: 0x4876, 0x2d0: 0x01be, 0x2d1: 0x01d0, - 0x2d2: 0x01ac, 0x2d3: 0x430c, 0x2d4: 0x4312, 0x2d5: 0x01fa, 0x2d6: 0x01e8, - 0x2f0: 0x01d6, 0x2f1: 0x01eb, 0x2f2: 0x01ee, 0x2f4: 0x0188, 0x2f5: 0x01c7, - 0x2f9: 0x01a6, - // Block 0xc, offset 0x300 - 0x300: 0x3721, 0x301: 0x372d, 0x303: 0x371b, - 0x306: 0xa000, 0x307: 0x3709, - 0x30c: 0x375d, 0x30d: 0x3745, 0x30e: 0x376f, 0x310: 0xa000, - 0x313: 0xa000, 0x315: 0xa000, 0x316: 0xa000, 0x317: 0xa000, - 0x318: 0xa000, 0x319: 0x3751, 0x31a: 0xa000, - 0x31e: 0xa000, 0x323: 0xa000, - 0x327: 0xa000, - 0x32b: 0xa000, 0x32d: 0xa000, - 0x330: 0xa000, 0x333: 0xa000, 0x335: 0xa000, - 0x336: 0xa000, 0x337: 0xa000, 0x338: 0xa000, 0x339: 0x37d5, 0x33a: 0xa000, - 0x33e: 0xa000, - // Block 0xd, offset 0x340 - 0x341: 0x3733, 0x342: 0x37b7, - 0x350: 0x370f, 0x351: 0x3793, - 0x352: 0x3715, 0x353: 0x3799, 0x356: 0x3727, 0x357: 0x37ab, - 0x358: 0xa000, 0x359: 0xa000, 0x35a: 0x3829, 0x35b: 0x382f, 0x35c: 0x3739, 0x35d: 0x37bd, - 0x35e: 0x373f, 0x35f: 0x37c3, 0x362: 0x374b, 0x363: 0x37cf, - 0x364: 0x3757, 0x365: 0x37db, 0x366: 0x3763, 0x367: 0x37e7, 0x368: 0xa000, 0x369: 0xa000, - 0x36a: 0x3835, 0x36b: 0x383b, 0x36c: 0x378d, 0x36d: 0x3811, 0x36e: 0x3769, 0x36f: 0x37ed, - 0x370: 0x3775, 0x371: 0x37f9, 0x372: 0x377b, 0x373: 0x37ff, 0x374: 0x3781, 0x375: 0x3805, - 0x378: 0x3787, 0x379: 0x380b, - // Block 0xe, offset 0x380 - 0x387: 0x1d61, - 0x391: 0x812d, - 0x392: 0x8132, 0x393: 0x8132, 0x394: 0x8132, 0x395: 0x8132, 0x396: 0x812d, 0x397: 0x8132, - 0x398: 0x8132, 0x399: 0x8132, 0x39a: 0x812e, 0x39b: 0x812d, 0x39c: 0x8132, 0x39d: 0x8132, - 0x39e: 0x8132, 0x39f: 0x8132, 0x3a0: 0x8132, 0x3a1: 0x8132, 0x3a2: 0x812d, 0x3a3: 0x812d, - 0x3a4: 0x812d, 0x3a5: 0x812d, 0x3a6: 0x812d, 0x3a7: 0x812d, 0x3a8: 0x8132, 0x3a9: 0x8132, - 0x3aa: 0x812d, 0x3ab: 0x8132, 0x3ac: 0x8132, 0x3ad: 0x812e, 0x3ae: 0x8131, 0x3af: 0x8132, - 0x3b0: 0x8105, 0x3b1: 0x8106, 0x3b2: 0x8107, 0x3b3: 0x8108, 0x3b4: 0x8109, 0x3b5: 0x810a, - 0x3b6: 0x810b, 0x3b7: 0x810c, 0x3b8: 0x810d, 0x3b9: 0x810e, 0x3ba: 0x810e, 0x3bb: 0x810f, - 0x3bc: 0x8110, 0x3bd: 0x8111, 0x3bf: 0x8112, - // Block 0xf, offset 0x3c0 - 0x3c8: 0xa000, 0x3ca: 0xa000, 0x3cb: 0x8116, - 0x3cc: 0x8117, 0x3cd: 0x8118, 0x3ce: 0x8119, 0x3cf: 0x811a, 0x3d0: 0x811b, 0x3d1: 0x811c, - 0x3d2: 0x811d, 0x3d3: 0x9932, 0x3d4: 0x9932, 0x3d5: 0x992d, 0x3d6: 0x812d, 0x3d7: 0x8132, - 0x3d8: 0x8132, 0x3d9: 0x8132, 0x3da: 0x8132, 0x3db: 0x8132, 0x3dc: 0x812d, 0x3dd: 0x8132, - 0x3de: 0x8132, 0x3df: 0x812d, - 0x3f0: 0x811e, 0x3f5: 0x1d84, - 0x3f6: 0x2013, 0x3f7: 0x204f, 0x3f8: 0x204a, - // Block 0x10, offset 0x400 - 0x405: 0xa000, - 0x406: 0x2d26, 0x407: 0xa000, 0x408: 0x2d2e, 0x409: 0xa000, 0x40a: 0x2d36, 0x40b: 0xa000, - 0x40c: 0x2d3e, 0x40d: 0xa000, 0x40e: 0x2d46, 0x411: 0xa000, - 0x412: 0x2d4e, - 0x434: 0x8102, 0x435: 0x9900, - 0x43a: 0xa000, 0x43b: 0x2d56, - 0x43c: 0xa000, 0x43d: 0x2d5e, 0x43e: 0xa000, 0x43f: 0xa000, - // Block 0x11, offset 0x440 - 0x440: 0x0069, 0x441: 0x006b, 0x442: 0x006f, 0x443: 0x0083, 0x444: 0x00f5, 0x445: 0x00f8, - 0x446: 0x0413, 0x447: 0x0085, 0x448: 0x0089, 0x449: 0x008b, 0x44a: 0x0104, 0x44b: 0x0107, - 0x44c: 0x010a, 0x44d: 0x008f, 0x44f: 0x0097, 0x450: 0x009b, 0x451: 0x00e0, - 0x452: 0x009f, 0x453: 0x00fe, 0x454: 0x0417, 0x455: 0x041b, 0x456: 0x00a1, 0x457: 0x00a9, - 0x458: 0x00ab, 0x459: 0x0423, 0x45a: 0x012b, 0x45b: 0x00ad, 0x45c: 0x0427, 0x45d: 0x01be, - 0x45e: 0x01c1, 0x45f: 0x01c4, 0x460: 0x01fa, 0x461: 0x01fd, 0x462: 0x0093, 0x463: 0x00a5, - 0x464: 0x00ab, 0x465: 0x00ad, 0x466: 0x01be, 0x467: 0x01c1, 0x468: 0x01eb, 0x469: 0x01fa, - 0x46a: 0x01fd, - 0x478: 0x020c, - // Block 0x12, offset 0x480 - 0x49b: 0x00fb, 0x49c: 0x0087, 0x49d: 0x0101, - 0x49e: 0x00d4, 0x49f: 0x010a, 0x4a0: 0x008d, 0x4a1: 0x010d, 0x4a2: 0x0110, 0x4a3: 0x0116, - 0x4a4: 0x011c, 0x4a5: 0x011f, 0x4a6: 0x0122, 0x4a7: 0x042b, 0x4a8: 0x016a, 0x4a9: 0x0128, - 0x4aa: 0x042f, 0x4ab: 0x016d, 0x4ac: 0x0131, 0x4ad: 0x012e, 0x4ae: 0x0134, 0x4af: 0x0137, - 0x4b0: 0x013a, 0x4b1: 0x013d, 0x4b2: 0x0140, 0x4b3: 0x014c, 0x4b4: 0x014f, 0x4b5: 0x00ec, - 0x4b6: 0x0152, 0x4b7: 0x0155, 0x4b8: 0x041f, 0x4b9: 0x0158, 0x4ba: 0x015b, 0x4bb: 0x00b5, - 0x4bc: 0x015e, 0x4bd: 0x0161, 0x4be: 0x0164, 0x4bf: 0x01d0, - // Block 0x13, offset 0x4c0 - 0x4c0: 0x2f97, 0x4c1: 0x32a3, 0x4c2: 0x2fa1, 0x4c3: 0x32ad, 0x4c4: 0x2fa6, 0x4c5: 0x32b2, - 0x4c6: 0x2fab, 0x4c7: 0x32b7, 0x4c8: 0x38cc, 0x4c9: 0x3a5b, 0x4ca: 0x2fc4, 0x4cb: 0x32d0, - 0x4cc: 0x2fce, 0x4cd: 0x32da, 0x4ce: 0x2fdd, 0x4cf: 0x32e9, 0x4d0: 0x2fd3, 0x4d1: 0x32df, - 0x4d2: 0x2fd8, 0x4d3: 0x32e4, 0x4d4: 0x38ef, 0x4d5: 0x3a7e, 0x4d6: 0x38f6, 0x4d7: 0x3a85, - 0x4d8: 0x3019, 0x4d9: 0x3325, 0x4da: 0x301e, 0x4db: 0x332a, 0x4dc: 0x3904, 0x4dd: 0x3a93, - 0x4de: 0x3023, 0x4df: 0x332f, 0x4e0: 0x3032, 0x4e1: 0x333e, 0x4e2: 0x3050, 0x4e3: 0x335c, - 0x4e4: 0x305f, 0x4e5: 0x336b, 0x4e6: 0x3055, 0x4e7: 0x3361, 0x4e8: 0x3064, 0x4e9: 0x3370, - 0x4ea: 0x3069, 0x4eb: 0x3375, 0x4ec: 0x30af, 0x4ed: 0x33bb, 0x4ee: 0x390b, 0x4ef: 0x3a9a, - 0x4f0: 0x30b9, 0x4f1: 0x33ca, 0x4f2: 0x30c3, 0x4f3: 0x33d4, 0x4f4: 0x30cd, 0x4f5: 0x33de, - 0x4f6: 0x46c4, 0x4f7: 0x4755, 0x4f8: 0x3912, 0x4f9: 0x3aa1, 0x4fa: 0x30e6, 0x4fb: 0x33f7, - 0x4fc: 0x30e1, 0x4fd: 0x33f2, 0x4fe: 0x30eb, 0x4ff: 0x33fc, - // Block 0x14, offset 0x500 - 0x500: 0x30f0, 0x501: 0x3401, 0x502: 0x30f5, 0x503: 0x3406, 0x504: 0x3109, 0x505: 0x341a, - 0x506: 0x3113, 0x507: 0x3424, 0x508: 0x3122, 0x509: 0x3433, 0x50a: 0x311d, 0x50b: 0x342e, - 0x50c: 0x3935, 0x50d: 0x3ac4, 0x50e: 0x3943, 0x50f: 0x3ad2, 0x510: 0x394a, 0x511: 0x3ad9, - 0x512: 0x3951, 0x513: 0x3ae0, 0x514: 0x314f, 0x515: 0x3460, 0x516: 0x3154, 0x517: 0x3465, - 0x518: 0x315e, 0x519: 0x346f, 0x51a: 0x46f1, 0x51b: 0x4782, 0x51c: 0x3997, 0x51d: 0x3b26, - 0x51e: 0x3177, 0x51f: 0x3488, 0x520: 0x3181, 0x521: 0x3492, 0x522: 0x4700, 0x523: 0x4791, - 0x524: 0x399e, 0x525: 0x3b2d, 0x526: 0x39a5, 0x527: 0x3b34, 0x528: 0x39ac, 0x529: 0x3b3b, - 0x52a: 0x3190, 0x52b: 0x34a1, 0x52c: 0x319a, 0x52d: 0x34b0, 0x52e: 0x31ae, 0x52f: 0x34c4, - 0x530: 0x31a9, 0x531: 0x34bf, 0x532: 0x31ea, 0x533: 0x3500, 0x534: 0x31f9, 0x535: 0x350f, - 0x536: 0x31f4, 0x537: 0x350a, 0x538: 0x39b3, 0x539: 0x3b42, 0x53a: 0x39ba, 0x53b: 0x3b49, - 0x53c: 0x31fe, 0x53d: 0x3514, 0x53e: 0x3203, 0x53f: 0x3519, - // Block 0x15, offset 0x540 - 0x540: 0x3208, 0x541: 0x351e, 0x542: 0x320d, 0x543: 0x3523, 0x544: 0x321c, 0x545: 0x3532, - 0x546: 0x3217, 0x547: 0x352d, 0x548: 0x3221, 0x549: 0x353c, 0x54a: 0x3226, 0x54b: 0x3541, - 0x54c: 0x322b, 0x54d: 0x3546, 0x54e: 0x3249, 0x54f: 0x3564, 0x550: 0x3262, 0x551: 0x3582, - 0x552: 0x3271, 0x553: 0x3591, 0x554: 0x3276, 0x555: 0x3596, 0x556: 0x337a, 0x557: 0x34a6, - 0x558: 0x3537, 0x559: 0x3573, 0x55a: 0x1be0, 0x55b: 0x42d7, - 0x560: 0x46a1, 0x561: 0x4732, 0x562: 0x2f83, 0x563: 0x328f, - 0x564: 0x3878, 0x565: 0x3a07, 0x566: 0x3871, 0x567: 0x3a00, 0x568: 0x3886, 0x569: 0x3a15, - 0x56a: 0x387f, 0x56b: 0x3a0e, 0x56c: 0x38be, 0x56d: 0x3a4d, 0x56e: 0x3894, 0x56f: 0x3a23, - 0x570: 0x388d, 0x571: 0x3a1c, 0x572: 0x38a2, 0x573: 0x3a31, 0x574: 0x389b, 0x575: 0x3a2a, - 0x576: 0x38c5, 0x577: 0x3a54, 0x578: 0x46b5, 0x579: 0x4746, 0x57a: 0x3000, 0x57b: 0x330c, - 0x57c: 0x2fec, 0x57d: 0x32f8, 0x57e: 0x38da, 0x57f: 0x3a69, - // Block 0x16, offset 0x580 - 0x580: 0x38d3, 0x581: 0x3a62, 0x582: 0x38e8, 0x583: 0x3a77, 0x584: 0x38e1, 0x585: 0x3a70, - 0x586: 0x38fd, 0x587: 0x3a8c, 0x588: 0x3091, 0x589: 0x339d, 0x58a: 0x30a5, 0x58b: 0x33b1, - 0x58c: 0x46e7, 0x58d: 0x4778, 0x58e: 0x3136, 0x58f: 0x3447, 0x590: 0x3920, 0x591: 0x3aaf, - 0x592: 0x3919, 0x593: 0x3aa8, 0x594: 0x392e, 0x595: 0x3abd, 0x596: 0x3927, 0x597: 0x3ab6, - 0x598: 0x3989, 0x599: 0x3b18, 0x59a: 0x396d, 0x59b: 0x3afc, 0x59c: 0x3966, 0x59d: 0x3af5, - 0x59e: 0x397b, 0x59f: 0x3b0a, 0x5a0: 0x3974, 0x5a1: 0x3b03, 0x5a2: 0x3982, 0x5a3: 0x3b11, - 0x5a4: 0x31e5, 0x5a5: 0x34fb, 0x5a6: 0x31c7, 0x5a7: 0x34dd, 0x5a8: 0x39e4, 0x5a9: 0x3b73, - 0x5aa: 0x39dd, 0x5ab: 0x3b6c, 0x5ac: 0x39f2, 0x5ad: 0x3b81, 0x5ae: 0x39eb, 0x5af: 0x3b7a, - 0x5b0: 0x39f9, 0x5b1: 0x3b88, 0x5b2: 0x3230, 0x5b3: 0x354b, 0x5b4: 0x3258, 0x5b5: 0x3578, - 0x5b6: 0x3253, 0x5b7: 0x356e, 0x5b8: 0x323f, 0x5b9: 0x355a, - // Block 0x17, offset 0x5c0 - 0x5c0: 0x4804, 0x5c1: 0x480a, 0x5c2: 0x491e, 0x5c3: 0x4936, 0x5c4: 0x4926, 0x5c5: 0x493e, - 0x5c6: 0x492e, 0x5c7: 0x4946, 0x5c8: 0x47aa, 0x5c9: 0x47b0, 0x5ca: 0x488e, 0x5cb: 0x48a6, - 0x5cc: 0x4896, 0x5cd: 0x48ae, 0x5ce: 0x489e, 0x5cf: 0x48b6, 0x5d0: 0x4816, 0x5d1: 0x481c, - 0x5d2: 0x3db8, 0x5d3: 0x3dc8, 0x5d4: 0x3dc0, 0x5d5: 0x3dd0, - 0x5d8: 0x47b6, 0x5d9: 0x47bc, 0x5da: 0x3ce8, 0x5db: 0x3cf8, 0x5dc: 0x3cf0, 0x5dd: 0x3d00, - 0x5e0: 0x482e, 0x5e1: 0x4834, 0x5e2: 0x494e, 0x5e3: 0x4966, - 0x5e4: 0x4956, 0x5e5: 0x496e, 0x5e6: 0x495e, 0x5e7: 0x4976, 0x5e8: 0x47c2, 0x5e9: 0x47c8, - 0x5ea: 0x48be, 0x5eb: 0x48d6, 0x5ec: 0x48c6, 0x5ed: 0x48de, 0x5ee: 0x48ce, 0x5ef: 0x48e6, - 0x5f0: 0x4846, 0x5f1: 0x484c, 0x5f2: 0x3e18, 0x5f3: 0x3e30, 0x5f4: 0x3e20, 0x5f5: 0x3e38, - 0x5f6: 0x3e28, 0x5f7: 0x3e40, 0x5f8: 0x47ce, 0x5f9: 0x47d4, 0x5fa: 0x3d18, 0x5fb: 0x3d30, - 0x5fc: 0x3d20, 0x5fd: 0x3d38, 0x5fe: 0x3d28, 0x5ff: 0x3d40, - // Block 0x18, offset 0x600 - 0x600: 0x4852, 0x601: 0x4858, 0x602: 0x3e48, 0x603: 0x3e58, 0x604: 0x3e50, 0x605: 0x3e60, - 0x608: 0x47da, 0x609: 0x47e0, 0x60a: 0x3d48, 0x60b: 0x3d58, - 0x60c: 0x3d50, 0x60d: 0x3d60, 0x610: 0x4864, 0x611: 0x486a, - 0x612: 0x3e80, 0x613: 0x3e98, 0x614: 0x3e88, 0x615: 0x3ea0, 0x616: 0x3e90, 0x617: 0x3ea8, - 0x619: 0x47e6, 0x61b: 0x3d68, 0x61d: 0x3d70, - 0x61f: 0x3d78, 0x620: 0x487c, 0x621: 0x4882, 0x622: 0x497e, 0x623: 0x4996, - 0x624: 0x4986, 0x625: 0x499e, 0x626: 0x498e, 0x627: 0x49a6, 0x628: 0x47ec, 0x629: 0x47f2, - 0x62a: 0x48ee, 0x62b: 0x4906, 0x62c: 0x48f6, 0x62d: 0x490e, 0x62e: 0x48fe, 0x62f: 0x4916, - 0x630: 0x47f8, 0x631: 0x431e, 0x632: 0x3691, 0x633: 0x4324, 0x634: 0x4822, 0x635: 0x432a, - 0x636: 0x36a3, 0x637: 0x4330, 0x638: 0x36c1, 0x639: 0x4336, 0x63a: 0x36d9, 0x63b: 0x433c, - 0x63c: 0x4870, 0x63d: 0x4342, - // Block 0x19, offset 0x640 - 0x640: 0x3da0, 0x641: 0x3da8, 0x642: 0x4184, 0x643: 0x41a2, 0x644: 0x418e, 0x645: 0x41ac, - 0x646: 0x4198, 0x647: 0x41b6, 0x648: 0x3cd8, 0x649: 0x3ce0, 0x64a: 0x40d0, 0x64b: 0x40ee, - 0x64c: 0x40da, 0x64d: 0x40f8, 0x64e: 0x40e4, 0x64f: 0x4102, 0x650: 0x3de8, 0x651: 0x3df0, - 0x652: 0x41c0, 0x653: 0x41de, 0x654: 0x41ca, 0x655: 0x41e8, 0x656: 0x41d4, 0x657: 0x41f2, - 0x658: 0x3d08, 0x659: 0x3d10, 0x65a: 0x410c, 0x65b: 0x412a, 0x65c: 0x4116, 0x65d: 0x4134, - 0x65e: 0x4120, 0x65f: 0x413e, 0x660: 0x3ec0, 0x661: 0x3ec8, 0x662: 0x41fc, 0x663: 0x421a, - 0x664: 0x4206, 0x665: 0x4224, 0x666: 0x4210, 0x667: 0x422e, 0x668: 0x3d80, 0x669: 0x3d88, - 0x66a: 0x4148, 0x66b: 0x4166, 0x66c: 0x4152, 0x66d: 0x4170, 0x66e: 0x415c, 0x66f: 0x417a, - 0x670: 0x3685, 0x671: 0x367f, 0x672: 0x3d90, 0x673: 0x368b, 0x674: 0x3d98, - 0x676: 0x4810, 0x677: 0x3db0, 0x678: 0x35f5, 0x679: 0x35ef, 0x67a: 0x35e3, 0x67b: 0x42ee, - 0x67c: 0x35fb, 0x67d: 0x4287, 0x67e: 0x01d3, 0x67f: 0x4287, - // Block 0x1a, offset 0x680 - 0x680: 0x42a0, 0x681: 0x4482, 0x682: 0x3dd8, 0x683: 0x369d, 0x684: 0x3de0, - 0x686: 0x483a, 0x687: 0x3df8, 0x688: 0x3601, 0x689: 0x42f4, 0x68a: 0x360d, 0x68b: 0x42fa, - 0x68c: 0x3619, 0x68d: 0x4489, 0x68e: 0x4490, 0x68f: 0x4497, 0x690: 0x36b5, 0x691: 0x36af, - 0x692: 0x3e00, 0x693: 0x44e4, 0x696: 0x36bb, 0x697: 0x3e10, - 0x698: 0x3631, 0x699: 0x362b, 0x69a: 0x361f, 0x69b: 0x4300, 0x69d: 0x449e, - 0x69e: 0x44a5, 0x69f: 0x44ac, 0x6a0: 0x36eb, 0x6a1: 0x36e5, 0x6a2: 0x3e68, 0x6a3: 0x44ec, - 0x6a4: 0x36cd, 0x6a5: 0x36d3, 0x6a6: 0x36f1, 0x6a7: 0x3e78, 0x6a8: 0x3661, 0x6a9: 0x365b, - 0x6aa: 0x364f, 0x6ab: 0x430c, 0x6ac: 0x3649, 0x6ad: 0x4474, 0x6ae: 0x447b, 0x6af: 0x0081, - 0x6b2: 0x3eb0, 0x6b3: 0x36f7, 0x6b4: 0x3eb8, - 0x6b6: 0x4888, 0x6b7: 0x3ed0, 0x6b8: 0x363d, 0x6b9: 0x4306, 0x6ba: 0x366d, 0x6bb: 0x4318, - 0x6bc: 0x3679, 0x6bd: 0x425a, 0x6be: 0x428c, - // Block 0x1b, offset 0x6c0 - 0x6c0: 0x1bd8, 0x6c1: 0x1bdc, 0x6c2: 0x0047, 0x6c3: 0x1c54, 0x6c5: 0x1be8, - 0x6c6: 0x1bec, 0x6c7: 0x00e9, 0x6c9: 0x1c58, 0x6ca: 0x008f, 0x6cb: 0x0051, - 0x6cc: 0x0051, 0x6cd: 0x0051, 0x6ce: 0x0091, 0x6cf: 0x00da, 0x6d0: 0x0053, 0x6d1: 0x0053, - 0x6d2: 0x0059, 0x6d3: 0x0099, 0x6d5: 0x005d, 0x6d6: 0x198d, - 0x6d9: 0x0061, 0x6da: 0x0063, 0x6db: 0x0065, 0x6dc: 0x0065, 0x6dd: 0x0065, - 0x6e0: 0x199f, 0x6e1: 0x1bc8, 0x6e2: 0x19a8, - 0x6e4: 0x0075, 0x6e6: 0x01b8, 0x6e8: 0x0075, - 0x6ea: 0x0057, 0x6eb: 0x42d2, 0x6ec: 0x0045, 0x6ed: 0x0047, 0x6ef: 0x008b, - 0x6f0: 0x004b, 0x6f1: 0x004d, 0x6f3: 0x005b, 0x6f4: 0x009f, 0x6f5: 0x0215, - 0x6f6: 0x0218, 0x6f7: 0x021b, 0x6f8: 0x021e, 0x6f9: 0x0093, 0x6fb: 0x1b98, - 0x6fc: 0x01e8, 0x6fd: 0x01c1, 0x6fe: 0x0179, 0x6ff: 0x01a0, - // Block 0x1c, offset 0x700 - 0x700: 0x0463, 0x705: 0x0049, - 0x706: 0x0089, 0x707: 0x008b, 0x708: 0x0093, 0x709: 0x0095, - 0x710: 0x222e, 0x711: 0x223a, - 0x712: 0x22ee, 0x713: 0x2216, 0x714: 0x229a, 0x715: 0x2222, 0x716: 0x22a0, 0x717: 0x22b8, - 0x718: 0x22c4, 0x719: 0x2228, 0x71a: 0x22ca, 0x71b: 0x2234, 0x71c: 0x22be, 0x71d: 0x22d0, - 0x71e: 0x22d6, 0x71f: 0x1cbc, 0x720: 0x0053, 0x721: 0x195a, 0x722: 0x1ba4, 0x723: 0x1963, - 0x724: 0x006d, 0x725: 0x19ab, 0x726: 0x1bd0, 0x727: 0x1d48, 0x728: 0x1966, 0x729: 0x0071, - 0x72a: 0x19b7, 0x72b: 0x1bd4, 0x72c: 0x0059, 0x72d: 0x0047, 0x72e: 0x0049, 0x72f: 0x005b, - 0x730: 0x0093, 0x731: 0x19e4, 0x732: 0x1c18, 0x733: 0x19ed, 0x734: 0x00ad, 0x735: 0x1a62, - 0x736: 0x1c4c, 0x737: 0x1d5c, 0x738: 0x19f0, 0x739: 0x00b1, 0x73a: 0x1a65, 0x73b: 0x1c50, - 0x73c: 0x0099, 0x73d: 0x0087, 0x73e: 0x0089, 0x73f: 0x009b, - // Block 0x1d, offset 0x740 - 0x741: 0x3c06, 0x743: 0xa000, 0x744: 0x3c0d, 0x745: 0xa000, - 0x747: 0x3c14, 0x748: 0xa000, 0x749: 0x3c1b, - 0x74d: 0xa000, - 0x760: 0x2f65, 0x761: 0xa000, 0x762: 0x3c29, - 0x764: 0xa000, 0x765: 0xa000, - 0x76d: 0x3c22, 0x76e: 0x2f60, 0x76f: 0x2f6a, - 0x770: 0x3c30, 0x771: 0x3c37, 0x772: 0xa000, 0x773: 0xa000, 0x774: 0x3c3e, 0x775: 0x3c45, - 0x776: 0xa000, 0x777: 0xa000, 0x778: 0x3c4c, 0x779: 0x3c53, 0x77a: 0xa000, 0x77b: 0xa000, - 0x77c: 0xa000, 0x77d: 0xa000, - // Block 0x1e, offset 0x780 - 0x780: 0x3c5a, 0x781: 0x3c61, 0x782: 0xa000, 0x783: 0xa000, 0x784: 0x3c76, 0x785: 0x3c7d, - 0x786: 0xa000, 0x787: 0xa000, 0x788: 0x3c84, 0x789: 0x3c8b, - 0x791: 0xa000, - 0x792: 0xa000, - 0x7a2: 0xa000, - 0x7a8: 0xa000, 0x7a9: 0xa000, - 0x7ab: 0xa000, 0x7ac: 0x3ca0, 0x7ad: 0x3ca7, 0x7ae: 0x3cae, 0x7af: 0x3cb5, - 0x7b2: 0xa000, 0x7b3: 0xa000, 0x7b4: 0xa000, 0x7b5: 0xa000, - // Block 0x1f, offset 0x7c0 - 0x7e0: 0x0023, 0x7e1: 0x0025, 0x7e2: 0x0027, 0x7e3: 0x0029, - 0x7e4: 0x002b, 0x7e5: 0x002d, 0x7e6: 0x002f, 0x7e7: 0x0031, 0x7e8: 0x0033, 0x7e9: 0x1882, - 0x7ea: 0x1885, 0x7eb: 0x1888, 0x7ec: 0x188b, 0x7ed: 0x188e, 0x7ee: 0x1891, 0x7ef: 0x1894, - 0x7f0: 0x1897, 0x7f1: 0x189a, 0x7f2: 0x189d, 0x7f3: 0x18a6, 0x7f4: 0x1a68, 0x7f5: 0x1a6c, - 0x7f6: 0x1a70, 0x7f7: 0x1a74, 0x7f8: 0x1a78, 0x7f9: 0x1a7c, 0x7fa: 0x1a80, 0x7fb: 0x1a84, - 0x7fc: 0x1a88, 0x7fd: 0x1c80, 0x7fe: 0x1c85, 0x7ff: 0x1c8a, - // Block 0x20, offset 0x800 - 0x800: 0x1c8f, 0x801: 0x1c94, 0x802: 0x1c99, 0x803: 0x1c9e, 0x804: 0x1ca3, 0x805: 0x1ca8, - 0x806: 0x1cad, 0x807: 0x1cb2, 0x808: 0x187f, 0x809: 0x18a3, 0x80a: 0x18c7, 0x80b: 0x18eb, - 0x80c: 0x190f, 0x80d: 0x1918, 0x80e: 0x191e, 0x80f: 0x1924, 0x810: 0x192a, 0x811: 0x1b60, - 0x812: 0x1b64, 0x813: 0x1b68, 0x814: 0x1b6c, 0x815: 0x1b70, 0x816: 0x1b74, 0x817: 0x1b78, - 0x818: 0x1b7c, 0x819: 0x1b80, 0x81a: 0x1b84, 0x81b: 0x1b88, 0x81c: 0x1af4, 0x81d: 0x1af8, - 0x81e: 0x1afc, 0x81f: 0x1b00, 0x820: 0x1b04, 0x821: 0x1b08, 0x822: 0x1b0c, 0x823: 0x1b10, - 0x824: 0x1b14, 0x825: 0x1b18, 0x826: 0x1b1c, 0x827: 0x1b20, 0x828: 0x1b24, 0x829: 0x1b28, - 0x82a: 0x1b2c, 0x82b: 0x1b30, 0x82c: 0x1b34, 0x82d: 0x1b38, 0x82e: 0x1b3c, 0x82f: 0x1b40, - 0x830: 0x1b44, 0x831: 0x1b48, 0x832: 0x1b4c, 0x833: 0x1b50, 0x834: 0x1b54, 0x835: 0x1b58, - 0x836: 0x0043, 0x837: 0x0045, 0x838: 0x0047, 0x839: 0x0049, 0x83a: 0x004b, 0x83b: 0x004d, - 0x83c: 0x004f, 0x83d: 0x0051, 0x83e: 0x0053, 0x83f: 0x0055, - // Block 0x21, offset 0x840 - 0x840: 0x06bf, 0x841: 0x06e3, 0x842: 0x06ef, 0x843: 0x06ff, 0x844: 0x0707, 0x845: 0x0713, - 0x846: 0x071b, 0x847: 0x0723, 0x848: 0x072f, 0x849: 0x0783, 0x84a: 0x079b, 0x84b: 0x07ab, - 0x84c: 0x07bb, 0x84d: 0x07cb, 0x84e: 0x07db, 0x84f: 0x07fb, 0x850: 0x07ff, 0x851: 0x0803, - 0x852: 0x0837, 0x853: 0x085f, 0x854: 0x086f, 0x855: 0x0877, 0x856: 0x087b, 0x857: 0x0887, - 0x858: 0x08a3, 0x859: 0x08a7, 0x85a: 0x08bf, 0x85b: 0x08c3, 0x85c: 0x08cb, 0x85d: 0x08db, - 0x85e: 0x0977, 0x85f: 0x098b, 0x860: 0x09cb, 0x861: 0x09df, 0x862: 0x09e7, 0x863: 0x09eb, - 0x864: 0x09fb, 0x865: 0x0a17, 0x866: 0x0a43, 0x867: 0x0a4f, 0x868: 0x0a6f, 0x869: 0x0a7b, - 0x86a: 0x0a7f, 0x86b: 0x0a83, 0x86c: 0x0a9b, 0x86d: 0x0a9f, 0x86e: 0x0acb, 0x86f: 0x0ad7, - 0x870: 0x0adf, 0x871: 0x0ae7, 0x872: 0x0af7, 0x873: 0x0aff, 0x874: 0x0b07, 0x875: 0x0b33, - 0x876: 0x0b37, 0x877: 0x0b3f, 0x878: 0x0b43, 0x879: 0x0b4b, 0x87a: 0x0b53, 0x87b: 0x0b63, - 0x87c: 0x0b7f, 0x87d: 0x0bf7, 0x87e: 0x0c0b, 0x87f: 0x0c0f, - // Block 0x22, offset 0x880 - 0x880: 0x0c8f, 0x881: 0x0c93, 0x882: 0x0ca7, 0x883: 0x0cab, 0x884: 0x0cb3, 0x885: 0x0cbb, - 0x886: 0x0cc3, 0x887: 0x0ccf, 0x888: 0x0cf7, 0x889: 0x0d07, 0x88a: 0x0d1b, 0x88b: 0x0d8b, - 0x88c: 0x0d97, 0x88d: 0x0da7, 0x88e: 0x0db3, 0x88f: 0x0dbf, 0x890: 0x0dc7, 0x891: 0x0dcb, - 0x892: 0x0dcf, 0x893: 0x0dd3, 0x894: 0x0dd7, 0x895: 0x0e8f, 0x896: 0x0ed7, 0x897: 0x0ee3, - 0x898: 0x0ee7, 0x899: 0x0eeb, 0x89a: 0x0eef, 0x89b: 0x0ef7, 0x89c: 0x0efb, 0x89d: 0x0f0f, - 0x89e: 0x0f2b, 0x89f: 0x0f33, 0x8a0: 0x0f73, 0x8a1: 0x0f77, 0x8a2: 0x0f7f, 0x8a3: 0x0f83, - 0x8a4: 0x0f8b, 0x8a5: 0x0f8f, 0x8a6: 0x0fb3, 0x8a7: 0x0fb7, 0x8a8: 0x0fd3, 0x8a9: 0x0fd7, - 0x8aa: 0x0fdb, 0x8ab: 0x0fdf, 0x8ac: 0x0ff3, 0x8ad: 0x1017, 0x8ae: 0x101b, 0x8af: 0x101f, - 0x8b0: 0x1043, 0x8b1: 0x1083, 0x8b2: 0x1087, 0x8b3: 0x10a7, 0x8b4: 0x10b7, 0x8b5: 0x10bf, - 0x8b6: 0x10df, 0x8b7: 0x1103, 0x8b8: 0x1147, 0x8b9: 0x114f, 0x8ba: 0x1163, 0x8bb: 0x116f, - 0x8bc: 0x1177, 0x8bd: 0x117f, 0x8be: 0x1183, 0x8bf: 0x1187, - // Block 0x23, offset 0x8c0 - 0x8c0: 0x119f, 0x8c1: 0x11a3, 0x8c2: 0x11bf, 0x8c3: 0x11c7, 0x8c4: 0x11cf, 0x8c5: 0x11d3, - 0x8c6: 0x11df, 0x8c7: 0x11e7, 0x8c8: 0x11eb, 0x8c9: 0x11ef, 0x8ca: 0x11f7, 0x8cb: 0x11fb, - 0x8cc: 0x129b, 0x8cd: 0x12af, 0x8ce: 0x12e3, 0x8cf: 0x12e7, 0x8d0: 0x12ef, 0x8d1: 0x131b, - 0x8d2: 0x1323, 0x8d3: 0x132b, 0x8d4: 0x1333, 0x8d5: 0x136f, 0x8d6: 0x1373, 0x8d7: 0x137b, - 0x8d8: 0x137f, 0x8d9: 0x1383, 0x8da: 0x13af, 0x8db: 0x13b3, 0x8dc: 0x13bb, 0x8dd: 0x13cf, - 0x8de: 0x13d3, 0x8df: 0x13ef, 0x8e0: 0x13f7, 0x8e1: 0x13fb, 0x8e2: 0x141f, 0x8e3: 0x143f, - 0x8e4: 0x1453, 0x8e5: 0x1457, 0x8e6: 0x145f, 0x8e7: 0x148b, 0x8e8: 0x148f, 0x8e9: 0x149f, - 0x8ea: 0x14c3, 0x8eb: 0x14cf, 0x8ec: 0x14df, 0x8ed: 0x14f7, 0x8ee: 0x14ff, 0x8ef: 0x1503, - 0x8f0: 0x1507, 0x8f1: 0x150b, 0x8f2: 0x1517, 0x8f3: 0x151b, 0x8f4: 0x1523, 0x8f5: 0x153f, - 0x8f6: 0x1543, 0x8f7: 0x1547, 0x8f8: 0x155f, 0x8f9: 0x1563, 0x8fa: 0x156b, 0x8fb: 0x157f, - 0x8fc: 0x1583, 0x8fd: 0x1587, 0x8fe: 0x158f, 0x8ff: 0x1593, - // Block 0x24, offset 0x900 - 0x906: 0xa000, 0x90b: 0xa000, - 0x90c: 0x3f08, 0x90d: 0xa000, 0x90e: 0x3f10, 0x90f: 0xa000, 0x910: 0x3f18, 0x911: 0xa000, - 0x912: 0x3f20, 0x913: 0xa000, 0x914: 0x3f28, 0x915: 0xa000, 0x916: 0x3f30, 0x917: 0xa000, - 0x918: 0x3f38, 0x919: 0xa000, 0x91a: 0x3f40, 0x91b: 0xa000, 0x91c: 0x3f48, 0x91d: 0xa000, - 0x91e: 0x3f50, 0x91f: 0xa000, 0x920: 0x3f58, 0x921: 0xa000, 0x922: 0x3f60, - 0x924: 0xa000, 0x925: 0x3f68, 0x926: 0xa000, 0x927: 0x3f70, 0x928: 0xa000, 0x929: 0x3f78, - 0x92f: 0xa000, - 0x930: 0x3f80, 0x931: 0x3f88, 0x932: 0xa000, 0x933: 0x3f90, 0x934: 0x3f98, 0x935: 0xa000, - 0x936: 0x3fa0, 0x937: 0x3fa8, 0x938: 0xa000, 0x939: 0x3fb0, 0x93a: 0x3fb8, 0x93b: 0xa000, - 0x93c: 0x3fc0, 0x93d: 0x3fc8, - // Block 0x25, offset 0x940 - 0x954: 0x3f00, - 0x959: 0x9903, 0x95a: 0x9903, 0x95b: 0x42dc, 0x95c: 0x42e2, 0x95d: 0xa000, - 0x95e: 0x3fd0, 0x95f: 0x26b4, - 0x966: 0xa000, - 0x96b: 0xa000, 0x96c: 0x3fe0, 0x96d: 0xa000, 0x96e: 0x3fe8, 0x96f: 0xa000, - 0x970: 0x3ff0, 0x971: 0xa000, 0x972: 0x3ff8, 0x973: 0xa000, 0x974: 0x4000, 0x975: 0xa000, - 0x976: 0x4008, 0x977: 0xa000, 0x978: 0x4010, 0x979: 0xa000, 0x97a: 0x4018, 0x97b: 0xa000, - 0x97c: 0x4020, 0x97d: 0xa000, 0x97e: 0x4028, 0x97f: 0xa000, - // Block 0x26, offset 0x980 - 0x980: 0x4030, 0x981: 0xa000, 0x982: 0x4038, 0x984: 0xa000, 0x985: 0x4040, - 0x986: 0xa000, 0x987: 0x4048, 0x988: 0xa000, 0x989: 0x4050, - 0x98f: 0xa000, 0x990: 0x4058, 0x991: 0x4060, - 0x992: 0xa000, 0x993: 0x4068, 0x994: 0x4070, 0x995: 0xa000, 0x996: 0x4078, 0x997: 0x4080, - 0x998: 0xa000, 0x999: 0x4088, 0x99a: 0x4090, 0x99b: 0xa000, 0x99c: 0x4098, 0x99d: 0x40a0, - 0x9af: 0xa000, - 0x9b0: 0xa000, 0x9b1: 0xa000, 0x9b2: 0xa000, 0x9b4: 0x3fd8, - 0x9b7: 0x40a8, 0x9b8: 0x40b0, 0x9b9: 0x40b8, 0x9ba: 0x40c0, - 0x9bd: 0xa000, 0x9be: 0x40c8, 0x9bf: 0x26c9, - // Block 0x27, offset 0x9c0 - 0x9c0: 0x0367, 0x9c1: 0x032b, 0x9c2: 0x032f, 0x9c3: 0x0333, 0x9c4: 0x037b, 0x9c5: 0x0337, - 0x9c6: 0x033b, 0x9c7: 0x033f, 0x9c8: 0x0343, 0x9c9: 0x0347, 0x9ca: 0x034b, 0x9cb: 0x034f, - 0x9cc: 0x0353, 0x9cd: 0x0357, 0x9ce: 0x035b, 0x9cf: 0x49bd, 0x9d0: 0x49c3, 0x9d1: 0x49c9, - 0x9d2: 0x49cf, 0x9d3: 0x49d5, 0x9d4: 0x49db, 0x9d5: 0x49e1, 0x9d6: 0x49e7, 0x9d7: 0x49ed, - 0x9d8: 0x49f3, 0x9d9: 0x49f9, 0x9da: 0x49ff, 0x9db: 0x4a05, 0x9dc: 0x4a0b, 0x9dd: 0x4a11, - 0x9de: 0x4a17, 0x9df: 0x4a1d, 0x9e0: 0x4a23, 0x9e1: 0x4a29, 0x9e2: 0x4a2f, 0x9e3: 0x4a35, - 0x9e4: 0x03c3, 0x9e5: 0x035f, 0x9e6: 0x0363, 0x9e7: 0x03e7, 0x9e8: 0x03eb, 0x9e9: 0x03ef, - 0x9ea: 0x03f3, 0x9eb: 0x03f7, 0x9ec: 0x03fb, 0x9ed: 0x03ff, 0x9ee: 0x036b, 0x9ef: 0x0403, - 0x9f0: 0x0407, 0x9f1: 0x036f, 0x9f2: 0x0373, 0x9f3: 0x0377, 0x9f4: 0x037f, 0x9f5: 0x0383, - 0x9f6: 0x0387, 0x9f7: 0x038b, 0x9f8: 0x038f, 0x9f9: 0x0393, 0x9fa: 0x0397, 0x9fb: 0x039b, - 0x9fc: 0x039f, 0x9fd: 0x03a3, 0x9fe: 0x03a7, 0x9ff: 0x03ab, - // Block 0x28, offset 0xa00 - 0xa00: 0x03af, 0xa01: 0x03b3, 0xa02: 0x040b, 0xa03: 0x040f, 0xa04: 0x03b7, 0xa05: 0x03bb, - 0xa06: 0x03bf, 0xa07: 0x03c7, 0xa08: 0x03cb, 0xa09: 0x03cf, 0xa0a: 0x03d3, 0xa0b: 0x03d7, - 0xa0c: 0x03db, 0xa0d: 0x03df, 0xa0e: 0x03e3, - 0xa12: 0x06bf, 0xa13: 0x071b, 0xa14: 0x06cb, 0xa15: 0x097b, 0xa16: 0x06cf, 0xa17: 0x06e7, - 0xa18: 0x06d3, 0xa19: 0x0f93, 0xa1a: 0x0707, 0xa1b: 0x06db, 0xa1c: 0x06c3, 0xa1d: 0x09ff, - 0xa1e: 0x098f, 0xa1f: 0x072f, - // Block 0x29, offset 0xa40 - 0xa40: 0x2054, 0xa41: 0x205a, 0xa42: 0x2060, 0xa43: 0x2066, 0xa44: 0x206c, 0xa45: 0x2072, - 0xa46: 0x2078, 0xa47: 0x207e, 0xa48: 0x2084, 0xa49: 0x208a, 0xa4a: 0x2090, 0xa4b: 0x2096, - 0xa4c: 0x209c, 0xa4d: 0x20a2, 0xa4e: 0x2726, 0xa4f: 0x272f, 0xa50: 0x2738, 0xa51: 0x2741, - 0xa52: 0x274a, 0xa53: 0x2753, 0xa54: 0x275c, 0xa55: 0x2765, 0xa56: 0x276e, 0xa57: 0x2780, - 0xa58: 0x2789, 0xa59: 0x2792, 0xa5a: 0x279b, 0xa5b: 0x27a4, 0xa5c: 0x2777, 0xa5d: 0x2bac, - 0xa5e: 0x2aed, 0xa60: 0x20a8, 0xa61: 0x20c0, 0xa62: 0x20b4, 0xa63: 0x2108, - 0xa64: 0x20c6, 0xa65: 0x20e4, 0xa66: 0x20ae, 0xa67: 0x20de, 0xa68: 0x20ba, 0xa69: 0x20f0, - 0xa6a: 0x2120, 0xa6b: 0x213e, 0xa6c: 0x2138, 0xa6d: 0x212c, 0xa6e: 0x217a, 0xa6f: 0x210e, - 0xa70: 0x211a, 0xa71: 0x2132, 0xa72: 0x2126, 0xa73: 0x2150, 0xa74: 0x20fc, 0xa75: 0x2144, - 0xa76: 0x216e, 0xa77: 0x2156, 0xa78: 0x20ea, 0xa79: 0x20cc, 0xa7a: 0x2102, 0xa7b: 0x2114, - 0xa7c: 0x214a, 0xa7d: 0x20d2, 0xa7e: 0x2174, 0xa7f: 0x20f6, - // Block 0x2a, offset 0xa80 - 0xa80: 0x215c, 0xa81: 0x20d8, 0xa82: 0x2162, 0xa83: 0x2168, 0xa84: 0x092f, 0xa85: 0x0b03, - 0xa86: 0x0ca7, 0xa87: 0x10c7, - 0xa90: 0x1bc4, 0xa91: 0x18a9, - 0xa92: 0x18ac, 0xa93: 0x18af, 0xa94: 0x18b2, 0xa95: 0x18b5, 0xa96: 0x18b8, 0xa97: 0x18bb, - 0xa98: 0x18be, 0xa99: 0x18c1, 0xa9a: 0x18ca, 0xa9b: 0x18cd, 0xa9c: 0x18d0, 0xa9d: 0x18d3, - 0xa9e: 0x18d6, 0xa9f: 0x18d9, 0xaa0: 0x0313, 0xaa1: 0x031b, 0xaa2: 0x031f, 0xaa3: 0x0327, - 0xaa4: 0x032b, 0xaa5: 0x032f, 0xaa6: 0x0337, 0xaa7: 0x033f, 0xaa8: 0x0343, 0xaa9: 0x034b, - 0xaaa: 0x034f, 0xaab: 0x0353, 0xaac: 0x0357, 0xaad: 0x035b, 0xaae: 0x2e18, 0xaaf: 0x2e20, - 0xab0: 0x2e28, 0xab1: 0x2e30, 0xab2: 0x2e38, 0xab3: 0x2e40, 0xab4: 0x2e48, 0xab5: 0x2e50, - 0xab6: 0x2e60, 0xab7: 0x2e68, 0xab8: 0x2e70, 0xab9: 0x2e78, 0xaba: 0x2e80, 0xabb: 0x2e88, - 0xabc: 0x2ed3, 0xabd: 0x2e9b, 0xabe: 0x2e58, - // Block 0x2b, offset 0xac0 - 0xac0: 0x06bf, 0xac1: 0x071b, 0xac2: 0x06cb, 0xac3: 0x097b, 0xac4: 0x071f, 0xac5: 0x07af, - 0xac6: 0x06c7, 0xac7: 0x07ab, 0xac8: 0x070b, 0xac9: 0x0887, 0xaca: 0x0d07, 0xacb: 0x0e8f, - 0xacc: 0x0dd7, 0xacd: 0x0d1b, 0xace: 0x145f, 0xacf: 0x098b, 0xad0: 0x0ccf, 0xad1: 0x0d4b, - 0xad2: 0x0d0b, 0xad3: 0x104b, 0xad4: 0x08fb, 0xad5: 0x0f03, 0xad6: 0x1387, 0xad7: 0x105f, - 0xad8: 0x0843, 0xad9: 0x108f, 0xada: 0x0f9b, 0xadb: 0x0a17, 0xadc: 0x140f, 0xadd: 0x077f, - 0xade: 0x08ab, 0xadf: 0x0df7, 0xae0: 0x1527, 0xae1: 0x0743, 0xae2: 0x07d3, 0xae3: 0x0d9b, - 0xae4: 0x06cf, 0xae5: 0x06e7, 0xae6: 0x06d3, 0xae7: 0x0adb, 0xae8: 0x08ef, 0xae9: 0x087f, - 0xaea: 0x0a57, 0xaeb: 0x0a4b, 0xaec: 0x0feb, 0xaed: 0x073f, 0xaee: 0x139b, 0xaef: 0x089b, - 0xaf0: 0x09f3, 0xaf1: 0x18dc, 0xaf2: 0x18df, 0xaf3: 0x18e2, 0xaf4: 0x18e5, 0xaf5: 0x18ee, - 0xaf6: 0x18f1, 0xaf7: 0x18f4, 0xaf8: 0x18f7, 0xaf9: 0x18fa, 0xafa: 0x18fd, 0xafb: 0x1900, - 0xafc: 0x1903, 0xafd: 0x1906, 0xafe: 0x1909, 0xaff: 0x1912, - // Block 0x2c, offset 0xb00 - 0xb00: 0x1cc6, 0xb01: 0x1cd5, 0xb02: 0x1ce4, 0xb03: 0x1cf3, 0xb04: 0x1d02, 0xb05: 0x1d11, - 0xb06: 0x1d20, 0xb07: 0x1d2f, 0xb08: 0x1d3e, 0xb09: 0x218c, 0xb0a: 0x219e, 0xb0b: 0x21b0, - 0xb0c: 0x1954, 0xb0d: 0x1c04, 0xb0e: 0x19d2, 0xb0f: 0x1ba8, 0xb10: 0x04cb, 0xb11: 0x04d3, - 0xb12: 0x04db, 0xb13: 0x04e3, 0xb14: 0x04eb, 0xb15: 0x04ef, 0xb16: 0x04f3, 0xb17: 0x04f7, - 0xb18: 0x04fb, 0xb19: 0x04ff, 0xb1a: 0x0503, 0xb1b: 0x0507, 0xb1c: 0x050b, 0xb1d: 0x050f, - 0xb1e: 0x0513, 0xb1f: 0x0517, 0xb20: 0x051b, 0xb21: 0x0523, 0xb22: 0x0527, 0xb23: 0x052b, - 0xb24: 0x052f, 0xb25: 0x0533, 0xb26: 0x0537, 0xb27: 0x053b, 0xb28: 0x053f, 0xb29: 0x0543, - 0xb2a: 0x0547, 0xb2b: 0x054b, 0xb2c: 0x054f, 0xb2d: 0x0553, 0xb2e: 0x0557, 0xb2f: 0x055b, - 0xb30: 0x055f, 0xb31: 0x0563, 0xb32: 0x0567, 0xb33: 0x056f, 0xb34: 0x0577, 0xb35: 0x057f, - 0xb36: 0x0583, 0xb37: 0x0587, 0xb38: 0x058b, 0xb39: 0x058f, 0xb3a: 0x0593, 0xb3b: 0x0597, - 0xb3c: 0x059b, 0xb3d: 0x059f, 0xb3e: 0x05a3, - // Block 0x2d, offset 0xb40 - 0xb40: 0x2b0c, 0xb41: 0x29a8, 0xb42: 0x2b1c, 0xb43: 0x2880, 0xb44: 0x2ee4, 0xb45: 0x288a, - 0xb46: 0x2894, 0xb47: 0x2f28, 0xb48: 0x29b5, 0xb49: 0x289e, 0xb4a: 0x28a8, 0xb4b: 0x28b2, - 0xb4c: 0x29dc, 0xb4d: 0x29e9, 0xb4e: 0x29c2, 0xb4f: 0x29cf, 0xb50: 0x2ea9, 0xb51: 0x29f6, - 0xb52: 0x2a03, 0xb53: 0x2bbe, 0xb54: 0x26bb, 0xb55: 0x2bd1, 0xb56: 0x2be4, 0xb57: 0x2b2c, - 0xb58: 0x2a10, 0xb59: 0x2bf7, 0xb5a: 0x2c0a, 0xb5b: 0x2a1d, 0xb5c: 0x28bc, 0xb5d: 0x28c6, - 0xb5e: 0x2eb7, 0xb5f: 0x2a2a, 0xb60: 0x2b3c, 0xb61: 0x2ef5, 0xb62: 0x28d0, 0xb63: 0x28da, - 0xb64: 0x2a37, 0xb65: 0x28e4, 0xb66: 0x28ee, 0xb67: 0x26d0, 0xb68: 0x26d7, 0xb69: 0x28f8, - 0xb6a: 0x2902, 0xb6b: 0x2c1d, 0xb6c: 0x2a44, 0xb6d: 0x2b4c, 0xb6e: 0x2c30, 0xb6f: 0x2a51, - 0xb70: 0x2916, 0xb71: 0x290c, 0xb72: 0x2f3c, 0xb73: 0x2a5e, 0xb74: 0x2c43, 0xb75: 0x2920, - 0xb76: 0x2b5c, 0xb77: 0x292a, 0xb78: 0x2a78, 0xb79: 0x2934, 0xb7a: 0x2a85, 0xb7b: 0x2f06, - 0xb7c: 0x2a6b, 0xb7d: 0x2b6c, 0xb7e: 0x2a92, 0xb7f: 0x26de, - // Block 0x2e, offset 0xb80 - 0xb80: 0x2f17, 0xb81: 0x293e, 0xb82: 0x2948, 0xb83: 0x2a9f, 0xb84: 0x2952, 0xb85: 0x295c, - 0xb86: 0x2966, 0xb87: 0x2b7c, 0xb88: 0x2aac, 0xb89: 0x26e5, 0xb8a: 0x2c56, 0xb8b: 0x2e90, - 0xb8c: 0x2b8c, 0xb8d: 0x2ab9, 0xb8e: 0x2ec5, 0xb8f: 0x2970, 0xb90: 0x297a, 0xb91: 0x2ac6, - 0xb92: 0x26ec, 0xb93: 0x2ad3, 0xb94: 0x2b9c, 0xb95: 0x26f3, 0xb96: 0x2c69, 0xb97: 0x2984, - 0xb98: 0x1cb7, 0xb99: 0x1ccb, 0xb9a: 0x1cda, 0xb9b: 0x1ce9, 0xb9c: 0x1cf8, 0xb9d: 0x1d07, - 0xb9e: 0x1d16, 0xb9f: 0x1d25, 0xba0: 0x1d34, 0xba1: 0x1d43, 0xba2: 0x2192, 0xba3: 0x21a4, - 0xba4: 0x21b6, 0xba5: 0x21c2, 0xba6: 0x21ce, 0xba7: 0x21da, 0xba8: 0x21e6, 0xba9: 0x21f2, - 0xbaa: 0x21fe, 0xbab: 0x220a, 0xbac: 0x2246, 0xbad: 0x2252, 0xbae: 0x225e, 0xbaf: 0x226a, - 0xbb0: 0x2276, 0xbb1: 0x1c14, 0xbb2: 0x19c6, 0xbb3: 0x1936, 0xbb4: 0x1be4, 0xbb5: 0x1a47, - 0xbb6: 0x1a56, 0xbb7: 0x19cc, 0xbb8: 0x1bfc, 0xbb9: 0x1c00, 0xbba: 0x1960, 0xbbb: 0x2701, - 0xbbc: 0x270f, 0xbbd: 0x26fa, 0xbbe: 0x2708, 0xbbf: 0x2ae0, - // Block 0x2f, offset 0xbc0 - 0xbc0: 0x1a4a, 0xbc1: 0x1a32, 0xbc2: 0x1c60, 0xbc3: 0x1a1a, 0xbc4: 0x19f3, 0xbc5: 0x1969, - 0xbc6: 0x1978, 0xbc7: 0x1948, 0xbc8: 0x1bf0, 0xbc9: 0x1d52, 0xbca: 0x1a4d, 0xbcb: 0x1a35, - 0xbcc: 0x1c64, 0xbcd: 0x1c70, 0xbce: 0x1a26, 0xbcf: 0x19fc, 0xbd0: 0x1957, 0xbd1: 0x1c1c, - 0xbd2: 0x1bb0, 0xbd3: 0x1b9c, 0xbd4: 0x1bcc, 0xbd5: 0x1c74, 0xbd6: 0x1a29, 0xbd7: 0x19c9, - 0xbd8: 0x19ff, 0xbd9: 0x19de, 0xbda: 0x1a41, 0xbdb: 0x1c78, 0xbdc: 0x1a2c, 0xbdd: 0x19c0, - 0xbde: 0x1a02, 0xbdf: 0x1c3c, 0xbe0: 0x1bf4, 0xbe1: 0x1a14, 0xbe2: 0x1c24, 0xbe3: 0x1c40, - 0xbe4: 0x1bf8, 0xbe5: 0x1a17, 0xbe6: 0x1c28, 0xbe7: 0x22e8, 0xbe8: 0x22fc, 0xbe9: 0x1996, - 0xbea: 0x1c20, 0xbeb: 0x1bb4, 0xbec: 0x1ba0, 0xbed: 0x1c48, 0xbee: 0x2716, 0xbef: 0x27ad, - 0xbf0: 0x1a59, 0xbf1: 0x1a44, 0xbf2: 0x1c7c, 0xbf3: 0x1a2f, 0xbf4: 0x1a50, 0xbf5: 0x1a38, - 0xbf6: 0x1c68, 0xbf7: 0x1a1d, 0xbf8: 0x19f6, 0xbf9: 0x1981, 0xbfa: 0x1a53, 0xbfb: 0x1a3b, - 0xbfc: 0x1c6c, 0xbfd: 0x1a20, 0xbfe: 0x19f9, 0xbff: 0x1984, - // Block 0x30, offset 0xc00 - 0xc00: 0x1c2c, 0xc01: 0x1bb8, 0xc02: 0x1d4d, 0xc03: 0x1939, 0xc04: 0x19ba, 0xc05: 0x19bd, - 0xc06: 0x22f5, 0xc07: 0x1b94, 0xc08: 0x19c3, 0xc09: 0x194b, 0xc0a: 0x19e1, 0xc0b: 0x194e, - 0xc0c: 0x19ea, 0xc0d: 0x196c, 0xc0e: 0x196f, 0xc0f: 0x1a05, 0xc10: 0x1a0b, 0xc11: 0x1a0e, - 0xc12: 0x1c30, 0xc13: 0x1a11, 0xc14: 0x1a23, 0xc15: 0x1c38, 0xc16: 0x1c44, 0xc17: 0x1990, - 0xc18: 0x1d57, 0xc19: 0x1bbc, 0xc1a: 0x1993, 0xc1b: 0x1a5c, 0xc1c: 0x19a5, 0xc1d: 0x19b4, - 0xc1e: 0x22e2, 0xc1f: 0x22dc, 0xc20: 0x1cc1, 0xc21: 0x1cd0, 0xc22: 0x1cdf, 0xc23: 0x1cee, - 0xc24: 0x1cfd, 0xc25: 0x1d0c, 0xc26: 0x1d1b, 0xc27: 0x1d2a, 0xc28: 0x1d39, 0xc29: 0x2186, - 0xc2a: 0x2198, 0xc2b: 0x21aa, 0xc2c: 0x21bc, 0xc2d: 0x21c8, 0xc2e: 0x21d4, 0xc2f: 0x21e0, - 0xc30: 0x21ec, 0xc31: 0x21f8, 0xc32: 0x2204, 0xc33: 0x2240, 0xc34: 0x224c, 0xc35: 0x2258, - 0xc36: 0x2264, 0xc37: 0x2270, 0xc38: 0x227c, 0xc39: 0x2282, 0xc3a: 0x2288, 0xc3b: 0x228e, - 0xc3c: 0x2294, 0xc3d: 0x22a6, 0xc3e: 0x22ac, 0xc3f: 0x1c10, - // Block 0x31, offset 0xc40 - 0xc40: 0x1377, 0xc41: 0x0cfb, 0xc42: 0x13d3, 0xc43: 0x139f, 0xc44: 0x0e57, 0xc45: 0x06eb, - 0xc46: 0x08df, 0xc47: 0x162b, 0xc48: 0x162b, 0xc49: 0x0a0b, 0xc4a: 0x145f, 0xc4b: 0x0943, - 0xc4c: 0x0a07, 0xc4d: 0x0bef, 0xc4e: 0x0fcf, 0xc4f: 0x115f, 0xc50: 0x1297, 0xc51: 0x12d3, - 0xc52: 0x1307, 0xc53: 0x141b, 0xc54: 0x0d73, 0xc55: 0x0dff, 0xc56: 0x0eab, 0xc57: 0x0f43, - 0xc58: 0x125f, 0xc59: 0x1447, 0xc5a: 0x1573, 0xc5b: 0x070f, 0xc5c: 0x08b3, 0xc5d: 0x0d87, - 0xc5e: 0x0ecf, 0xc5f: 0x1293, 0xc60: 0x15c3, 0xc61: 0x0ab3, 0xc62: 0x0e77, 0xc63: 0x1283, - 0xc64: 0x1317, 0xc65: 0x0c23, 0xc66: 0x11bb, 0xc67: 0x12df, 0xc68: 0x0b1f, 0xc69: 0x0d0f, - 0xc6a: 0x0e17, 0xc6b: 0x0f1b, 0xc6c: 0x1427, 0xc6d: 0x074f, 0xc6e: 0x07e7, 0xc6f: 0x0853, - 0xc70: 0x0c8b, 0xc71: 0x0d7f, 0xc72: 0x0ecb, 0xc73: 0x0fef, 0xc74: 0x1177, 0xc75: 0x128b, - 0xc76: 0x12a3, 0xc77: 0x13c7, 0xc78: 0x14ef, 0xc79: 0x15a3, 0xc7a: 0x15bf, 0xc7b: 0x102b, - 0xc7c: 0x106b, 0xc7d: 0x1123, 0xc7e: 0x1243, 0xc7f: 0x147b, - // Block 0x32, offset 0xc80 - 0xc80: 0x15cb, 0xc81: 0x134b, 0xc82: 0x09c7, 0xc83: 0x0b3b, 0xc84: 0x10db, 0xc85: 0x119b, - 0xc86: 0x0eff, 0xc87: 0x1033, 0xc88: 0x1397, 0xc89: 0x14e7, 0xc8a: 0x09c3, 0xc8b: 0x0a8f, - 0xc8c: 0x0d77, 0xc8d: 0x0e2b, 0xc8e: 0x0e5f, 0xc8f: 0x1113, 0xc90: 0x113b, 0xc91: 0x14a7, - 0xc92: 0x084f, 0xc93: 0x11a7, 0xc94: 0x07f3, 0xc95: 0x07ef, 0xc96: 0x1097, 0xc97: 0x1127, - 0xc98: 0x125b, 0xc99: 0x14af, 0xc9a: 0x1367, 0xc9b: 0x0c27, 0xc9c: 0x0d73, 0xc9d: 0x1357, - 0xc9e: 0x06f7, 0xc9f: 0x0a63, 0xca0: 0x0b93, 0xca1: 0x0f2f, 0xca2: 0x0faf, 0xca3: 0x0873, - 0xca4: 0x103b, 0xca5: 0x075f, 0xca6: 0x0b77, 0xca7: 0x06d7, 0xca8: 0x0deb, 0xca9: 0x0ca3, - 0xcaa: 0x110f, 0xcab: 0x08c7, 0xcac: 0x09b3, 0xcad: 0x0ffb, 0xcae: 0x1263, 0xcaf: 0x133b, - 0xcb0: 0x0db7, 0xcb1: 0x13f7, 0xcb2: 0x0de3, 0xcb3: 0x0c37, 0xcb4: 0x121b, 0xcb5: 0x0c57, - 0xcb6: 0x0fab, 0xcb7: 0x072b, 0xcb8: 0x07a7, 0xcb9: 0x07eb, 0xcba: 0x0d53, 0xcbb: 0x10fb, - 0xcbc: 0x11f3, 0xcbd: 0x1347, 0xcbe: 0x145b, 0xcbf: 0x085b, - // Block 0x33, offset 0xcc0 - 0xcc0: 0x090f, 0xcc1: 0x0a17, 0xcc2: 0x0b2f, 0xcc3: 0x0cbf, 0xcc4: 0x0e7b, 0xcc5: 0x103f, - 0xcc6: 0x1497, 0xcc7: 0x157b, 0xcc8: 0x15cf, 0xcc9: 0x15e7, 0xcca: 0x0837, 0xccb: 0x0cf3, - 0xccc: 0x0da3, 0xccd: 0x13eb, 0xcce: 0x0afb, 0xccf: 0x0bd7, 0xcd0: 0x0bf3, 0xcd1: 0x0c83, - 0xcd2: 0x0e6b, 0xcd3: 0x0eb7, 0xcd4: 0x0f67, 0xcd5: 0x108b, 0xcd6: 0x112f, 0xcd7: 0x1193, - 0xcd8: 0x13db, 0xcd9: 0x126b, 0xcda: 0x1403, 0xcdb: 0x147f, 0xcdc: 0x080f, 0xcdd: 0x083b, - 0xcde: 0x0923, 0xcdf: 0x0ea7, 0xce0: 0x12f3, 0xce1: 0x133b, 0xce2: 0x0b1b, 0xce3: 0x0b8b, - 0xce4: 0x0c4f, 0xce5: 0x0daf, 0xce6: 0x10d7, 0xce7: 0x0f23, 0xce8: 0x073b, 0xce9: 0x097f, - 0xcea: 0x0a63, 0xceb: 0x0ac7, 0xcec: 0x0b97, 0xced: 0x0f3f, 0xcee: 0x0f5b, 0xcef: 0x116b, - 0xcf0: 0x118b, 0xcf1: 0x1463, 0xcf2: 0x14e3, 0xcf3: 0x14f3, 0xcf4: 0x152f, 0xcf5: 0x0753, - 0xcf6: 0x107f, 0xcf7: 0x144f, 0xcf8: 0x14cb, 0xcf9: 0x0baf, 0xcfa: 0x0717, 0xcfb: 0x0777, - 0xcfc: 0x0a67, 0xcfd: 0x0a87, 0xcfe: 0x0caf, 0xcff: 0x0d73, - // Block 0x34, offset 0xd00 - 0xd00: 0x0ec3, 0xd01: 0x0fcb, 0xd02: 0x1277, 0xd03: 0x1417, 0xd04: 0x1623, 0xd05: 0x0ce3, - 0xd06: 0x14a3, 0xd07: 0x0833, 0xd08: 0x0d2f, 0xd09: 0x0d3b, 0xd0a: 0x0e0f, 0xd0b: 0x0e47, - 0xd0c: 0x0f4b, 0xd0d: 0x0fa7, 0xd0e: 0x1027, 0xd0f: 0x110b, 0xd10: 0x153b, 0xd11: 0x07af, - 0xd12: 0x0c03, 0xd13: 0x14b3, 0xd14: 0x0767, 0xd15: 0x0aab, 0xd16: 0x0e2f, 0xd17: 0x13df, - 0xd18: 0x0b67, 0xd19: 0x0bb7, 0xd1a: 0x0d43, 0xd1b: 0x0f2f, 0xd1c: 0x14bb, 0xd1d: 0x0817, - 0xd1e: 0x08ff, 0xd1f: 0x0a97, 0xd20: 0x0cd3, 0xd21: 0x0d1f, 0xd22: 0x0d5f, 0xd23: 0x0df3, - 0xd24: 0x0f47, 0xd25: 0x0fbb, 0xd26: 0x1157, 0xd27: 0x12f7, 0xd28: 0x1303, 0xd29: 0x1457, - 0xd2a: 0x14d7, 0xd2b: 0x0883, 0xd2c: 0x0e4b, 0xd2d: 0x0903, 0xd2e: 0x0ec7, 0xd2f: 0x0f6b, - 0xd30: 0x1287, 0xd31: 0x14bf, 0xd32: 0x15ab, 0xd33: 0x15d3, 0xd34: 0x0d37, 0xd35: 0x0e27, - 0xd36: 0x11c3, 0xd37: 0x10b7, 0xd38: 0x10c3, 0xd39: 0x10e7, 0xd3a: 0x0f17, 0xd3b: 0x0e9f, - 0xd3c: 0x1363, 0xd3d: 0x0733, 0xd3e: 0x122b, 0xd3f: 0x081b, - // Block 0x35, offset 0xd40 - 0xd40: 0x080b, 0xd41: 0x0b0b, 0xd42: 0x0c2b, 0xd43: 0x10f3, 0xd44: 0x0a53, 0xd45: 0x0e03, - 0xd46: 0x0cef, 0xd47: 0x13e7, 0xd48: 0x12e7, 0xd49: 0x14ab, 0xd4a: 0x1323, 0xd4b: 0x0b27, - 0xd4c: 0x0787, 0xd4d: 0x095b, 0xd50: 0x09af, - 0xd52: 0x0cdf, 0xd55: 0x07f7, 0xd56: 0x0f1f, 0xd57: 0x0fe3, - 0xd58: 0x1047, 0xd59: 0x1063, 0xd5a: 0x1067, 0xd5b: 0x107b, 0xd5c: 0x14fb, 0xd5d: 0x10eb, - 0xd5e: 0x116f, 0xd60: 0x128f, 0xd62: 0x1353, - 0xd65: 0x1407, 0xd66: 0x1433, - 0xd6a: 0x154f, 0xd6b: 0x1553, 0xd6c: 0x1557, 0xd6d: 0x15bb, 0xd6e: 0x142b, 0xd6f: 0x14c7, - 0xd70: 0x0757, 0xd71: 0x077b, 0xd72: 0x078f, 0xd73: 0x084b, 0xd74: 0x0857, 0xd75: 0x0897, - 0xd76: 0x094b, 0xd77: 0x0967, 0xd78: 0x096f, 0xd79: 0x09ab, 0xd7a: 0x09b7, 0xd7b: 0x0a93, - 0xd7c: 0x0a9b, 0xd7d: 0x0ba3, 0xd7e: 0x0bcb, 0xd7f: 0x0bd3, - // Block 0x36, offset 0xd80 - 0xd80: 0x0beb, 0xd81: 0x0c97, 0xd82: 0x0cc7, 0xd83: 0x0ce7, 0xd84: 0x0d57, 0xd85: 0x0e1b, - 0xd86: 0x0e37, 0xd87: 0x0e67, 0xd88: 0x0ebb, 0xd89: 0x0edb, 0xd8a: 0x0f4f, 0xd8b: 0x102f, - 0xd8c: 0x104b, 0xd8d: 0x1053, 0xd8e: 0x104f, 0xd8f: 0x1057, 0xd90: 0x105b, 0xd91: 0x105f, - 0xd92: 0x1073, 0xd93: 0x1077, 0xd94: 0x109b, 0xd95: 0x10af, 0xd96: 0x10cb, 0xd97: 0x112f, - 0xd98: 0x1137, 0xd99: 0x113f, 0xd9a: 0x1153, 0xd9b: 0x117b, 0xd9c: 0x11cb, 0xd9d: 0x11ff, - 0xd9e: 0x11ff, 0xd9f: 0x1267, 0xda0: 0x130f, 0xda1: 0x1327, 0xda2: 0x135b, 0xda3: 0x135f, - 0xda4: 0x13a3, 0xda5: 0x13a7, 0xda6: 0x13ff, 0xda7: 0x1407, 0xda8: 0x14db, 0xda9: 0x151f, - 0xdaa: 0x1537, 0xdab: 0x0b9b, 0xdac: 0x171e, 0xdad: 0x11e3, - 0xdb0: 0x06df, 0xdb1: 0x07e3, 0xdb2: 0x07a3, 0xdb3: 0x074b, 0xdb4: 0x078b, 0xdb5: 0x07b7, - 0xdb6: 0x0847, 0xdb7: 0x0863, 0xdb8: 0x094b, 0xdb9: 0x0937, 0xdba: 0x0947, 0xdbb: 0x0963, - 0xdbc: 0x09af, 0xdbd: 0x09bf, 0xdbe: 0x0a03, 0xdbf: 0x0a0f, - // Block 0x37, offset 0xdc0 - 0xdc0: 0x0a2b, 0xdc1: 0x0a3b, 0xdc2: 0x0b23, 0xdc3: 0x0b2b, 0xdc4: 0x0b5b, 0xdc5: 0x0b7b, - 0xdc6: 0x0bab, 0xdc7: 0x0bc3, 0xdc8: 0x0bb3, 0xdc9: 0x0bd3, 0xdca: 0x0bc7, 0xdcb: 0x0beb, - 0xdcc: 0x0c07, 0xdcd: 0x0c5f, 0xdce: 0x0c6b, 0xdcf: 0x0c73, 0xdd0: 0x0c9b, 0xdd1: 0x0cdf, - 0xdd2: 0x0d0f, 0xdd3: 0x0d13, 0xdd4: 0x0d27, 0xdd5: 0x0da7, 0xdd6: 0x0db7, 0xdd7: 0x0e0f, - 0xdd8: 0x0e5b, 0xdd9: 0x0e53, 0xdda: 0x0e67, 0xddb: 0x0e83, 0xddc: 0x0ebb, 0xddd: 0x1013, - 0xdde: 0x0edf, 0xddf: 0x0f13, 0xde0: 0x0f1f, 0xde1: 0x0f5f, 0xde2: 0x0f7b, 0xde3: 0x0f9f, - 0xde4: 0x0fc3, 0xde5: 0x0fc7, 0xde6: 0x0fe3, 0xde7: 0x0fe7, 0xde8: 0x0ff7, 0xde9: 0x100b, - 0xdea: 0x1007, 0xdeb: 0x1037, 0xdec: 0x10b3, 0xded: 0x10cb, 0xdee: 0x10e3, 0xdef: 0x111b, - 0xdf0: 0x112f, 0xdf1: 0x114b, 0xdf2: 0x117b, 0xdf3: 0x122f, 0xdf4: 0x1257, 0xdf5: 0x12cb, - 0xdf6: 0x1313, 0xdf7: 0x131f, 0xdf8: 0x1327, 0xdf9: 0x133f, 0xdfa: 0x1353, 0xdfb: 0x1343, - 0xdfc: 0x135b, 0xdfd: 0x1357, 0xdfe: 0x134f, 0xdff: 0x135f, - // Block 0x38, offset 0xe00 - 0xe00: 0x136b, 0xe01: 0x13a7, 0xe02: 0x13e3, 0xe03: 0x1413, 0xe04: 0x144b, 0xe05: 0x146b, - 0xe06: 0x14b7, 0xe07: 0x14db, 0xe08: 0x14fb, 0xe09: 0x150f, 0xe0a: 0x151f, 0xe0b: 0x152b, - 0xe0c: 0x1537, 0xe0d: 0x158b, 0xe0e: 0x162b, 0xe0f: 0x16b5, 0xe10: 0x16b0, 0xe11: 0x16e2, - 0xe12: 0x0607, 0xe13: 0x062f, 0xe14: 0x0633, 0xe15: 0x1764, 0xe16: 0x1791, 0xe17: 0x1809, - 0xe18: 0x1617, 0xe19: 0x1627, - // Block 0x39, offset 0xe40 - 0xe40: 0x19d5, 0xe41: 0x19d8, 0xe42: 0x19db, 0xe43: 0x1c08, 0xe44: 0x1c0c, 0xe45: 0x1a5f, - 0xe46: 0x1a5f, - 0xe53: 0x1d75, 0xe54: 0x1d66, 0xe55: 0x1d6b, 0xe56: 0x1d7a, 0xe57: 0x1d70, - 0xe5d: 0x4390, - 0xe5e: 0x8115, 0xe5f: 0x4402, 0xe60: 0x022d, 0xe61: 0x0215, 0xe62: 0x021e, 0xe63: 0x0221, - 0xe64: 0x0224, 0xe65: 0x0227, 0xe66: 0x022a, 0xe67: 0x0230, 0xe68: 0x0233, 0xe69: 0x0017, - 0xe6a: 0x43f0, 0xe6b: 0x43f6, 0xe6c: 0x44f4, 0xe6d: 0x44fc, 0xe6e: 0x4348, 0xe6f: 0x434e, - 0xe70: 0x4354, 0xe71: 0x435a, 0xe72: 0x4366, 0xe73: 0x436c, 0xe74: 0x4372, 0xe75: 0x437e, - 0xe76: 0x4384, 0xe78: 0x438a, 0xe79: 0x4396, 0xe7a: 0x439c, 0xe7b: 0x43a2, - 0xe7c: 0x43ae, 0xe7e: 0x43b4, - // Block 0x3a, offset 0xe80 - 0xe80: 0x43ba, 0xe81: 0x43c0, 0xe83: 0x43c6, 0xe84: 0x43cc, - 0xe86: 0x43d8, 0xe87: 0x43de, 0xe88: 0x43e4, 0xe89: 0x43ea, 0xe8a: 0x43fc, 0xe8b: 0x4378, - 0xe8c: 0x4360, 0xe8d: 0x43a8, 0xe8e: 0x43d2, 0xe8f: 0x1d7f, 0xe90: 0x0299, 0xe91: 0x0299, - 0xe92: 0x02a2, 0xe93: 0x02a2, 0xe94: 0x02a2, 0xe95: 0x02a2, 0xe96: 0x02a5, 0xe97: 0x02a5, - 0xe98: 0x02a5, 0xe99: 0x02a5, 0xe9a: 0x02ab, 0xe9b: 0x02ab, 0xe9c: 0x02ab, 0xe9d: 0x02ab, - 0xe9e: 0x029f, 0xe9f: 0x029f, 0xea0: 0x029f, 0xea1: 0x029f, 0xea2: 0x02a8, 0xea3: 0x02a8, - 0xea4: 0x02a8, 0xea5: 0x02a8, 0xea6: 0x029c, 0xea7: 0x029c, 0xea8: 0x029c, 0xea9: 0x029c, - 0xeaa: 0x02cf, 0xeab: 0x02cf, 0xeac: 0x02cf, 0xead: 0x02cf, 0xeae: 0x02d2, 0xeaf: 0x02d2, - 0xeb0: 0x02d2, 0xeb1: 0x02d2, 0xeb2: 0x02b1, 0xeb3: 0x02b1, 0xeb4: 0x02b1, 0xeb5: 0x02b1, - 0xeb6: 0x02ae, 0xeb7: 0x02ae, 0xeb8: 0x02ae, 0xeb9: 0x02ae, 0xeba: 0x02b4, 0xebb: 0x02b4, - 0xebc: 0x02b4, 0xebd: 0x02b4, 0xebe: 0x02b7, 0xebf: 0x02b7, - // Block 0x3b, offset 0xec0 - 0xec0: 0x02b7, 0xec1: 0x02b7, 0xec2: 0x02c0, 0xec3: 0x02c0, 0xec4: 0x02bd, 0xec5: 0x02bd, - 0xec6: 0x02c3, 0xec7: 0x02c3, 0xec8: 0x02ba, 0xec9: 0x02ba, 0xeca: 0x02c9, 0xecb: 0x02c9, - 0xecc: 0x02c6, 0xecd: 0x02c6, 0xece: 0x02d5, 0xecf: 0x02d5, 0xed0: 0x02d5, 0xed1: 0x02d5, - 0xed2: 0x02db, 0xed3: 0x02db, 0xed4: 0x02db, 0xed5: 0x02db, 0xed6: 0x02e1, 0xed7: 0x02e1, - 0xed8: 0x02e1, 0xed9: 0x02e1, 0xeda: 0x02de, 0xedb: 0x02de, 0xedc: 0x02de, 0xedd: 0x02de, - 0xede: 0x02e4, 0xedf: 0x02e4, 0xee0: 0x02e7, 0xee1: 0x02e7, 0xee2: 0x02e7, 0xee3: 0x02e7, - 0xee4: 0x446e, 0xee5: 0x446e, 0xee6: 0x02ed, 0xee7: 0x02ed, 0xee8: 0x02ed, 0xee9: 0x02ed, - 0xeea: 0x02ea, 0xeeb: 0x02ea, 0xeec: 0x02ea, 0xeed: 0x02ea, 0xeee: 0x0308, 0xeef: 0x0308, - 0xef0: 0x4468, 0xef1: 0x4468, - // Block 0x3c, offset 0xf00 - 0xf13: 0x02d8, 0xf14: 0x02d8, 0xf15: 0x02d8, 0xf16: 0x02d8, 0xf17: 0x02f6, - 0xf18: 0x02f6, 0xf19: 0x02f3, 0xf1a: 0x02f3, 0xf1b: 0x02f9, 0xf1c: 0x02f9, 0xf1d: 0x204f, - 0xf1e: 0x02ff, 0xf1f: 0x02ff, 0xf20: 0x02f0, 0xf21: 0x02f0, 0xf22: 0x02fc, 0xf23: 0x02fc, - 0xf24: 0x0305, 0xf25: 0x0305, 0xf26: 0x0305, 0xf27: 0x0305, 0xf28: 0x028d, 0xf29: 0x028d, - 0xf2a: 0x25aa, 0xf2b: 0x25aa, 0xf2c: 0x261a, 0xf2d: 0x261a, 0xf2e: 0x25e9, 0xf2f: 0x25e9, - 0xf30: 0x2605, 0xf31: 0x2605, 0xf32: 0x25fe, 0xf33: 0x25fe, 0xf34: 0x260c, 0xf35: 0x260c, - 0xf36: 0x2613, 0xf37: 0x2613, 0xf38: 0x2613, 0xf39: 0x25f0, 0xf3a: 0x25f0, 0xf3b: 0x25f0, - 0xf3c: 0x0302, 0xf3d: 0x0302, 0xf3e: 0x0302, 0xf3f: 0x0302, - // Block 0x3d, offset 0xf40 - 0xf40: 0x25b1, 0xf41: 0x25b8, 0xf42: 0x25d4, 0xf43: 0x25f0, 0xf44: 0x25f7, 0xf45: 0x1d89, - 0xf46: 0x1d8e, 0xf47: 0x1d93, 0xf48: 0x1da2, 0xf49: 0x1db1, 0xf4a: 0x1db6, 0xf4b: 0x1dbb, - 0xf4c: 0x1dc0, 0xf4d: 0x1dc5, 0xf4e: 0x1dd4, 0xf4f: 0x1de3, 0xf50: 0x1de8, 0xf51: 0x1ded, - 0xf52: 0x1dfc, 0xf53: 0x1e0b, 0xf54: 0x1e10, 0xf55: 0x1e15, 0xf56: 0x1e1a, 0xf57: 0x1e29, - 0xf58: 0x1e2e, 0xf59: 0x1e3d, 0xf5a: 0x1e42, 0xf5b: 0x1e47, 0xf5c: 0x1e56, 0xf5d: 0x1e5b, - 0xf5e: 0x1e60, 0xf5f: 0x1e6a, 0xf60: 0x1ea6, 0xf61: 0x1eb5, 0xf62: 0x1ec4, 0xf63: 0x1ec9, - 0xf64: 0x1ece, 0xf65: 0x1ed8, 0xf66: 0x1ee7, 0xf67: 0x1eec, 0xf68: 0x1efb, 0xf69: 0x1f00, - 0xf6a: 0x1f05, 0xf6b: 0x1f14, 0xf6c: 0x1f19, 0xf6d: 0x1f28, 0xf6e: 0x1f2d, 0xf6f: 0x1f32, - 0xf70: 0x1f37, 0xf71: 0x1f3c, 0xf72: 0x1f41, 0xf73: 0x1f46, 0xf74: 0x1f4b, 0xf75: 0x1f50, - 0xf76: 0x1f55, 0xf77: 0x1f5a, 0xf78: 0x1f5f, 0xf79: 0x1f64, 0xf7a: 0x1f69, 0xf7b: 0x1f6e, - 0xf7c: 0x1f73, 0xf7d: 0x1f78, 0xf7e: 0x1f7d, 0xf7f: 0x1f87, - // Block 0x3e, offset 0xf80 - 0xf80: 0x1f8c, 0xf81: 0x1f91, 0xf82: 0x1f96, 0xf83: 0x1fa0, 0xf84: 0x1fa5, 0xf85: 0x1faf, - 0xf86: 0x1fb4, 0xf87: 0x1fb9, 0xf88: 0x1fbe, 0xf89: 0x1fc3, 0xf8a: 0x1fc8, 0xf8b: 0x1fcd, - 0xf8c: 0x1fd2, 0xf8d: 0x1fd7, 0xf8e: 0x1fe6, 0xf8f: 0x1ff5, 0xf90: 0x1ffa, 0xf91: 0x1fff, - 0xf92: 0x2004, 0xf93: 0x2009, 0xf94: 0x200e, 0xf95: 0x2018, 0xf96: 0x201d, 0xf97: 0x2022, - 0xf98: 0x2031, 0xf99: 0x2040, 0xf9a: 0x2045, 0xf9b: 0x4420, 0xf9c: 0x4426, 0xf9d: 0x445c, - 0xf9e: 0x44b3, 0xf9f: 0x44ba, 0xfa0: 0x44c1, 0xfa1: 0x44c8, 0xfa2: 0x44cf, 0xfa3: 0x44d6, - 0xfa4: 0x25c6, 0xfa5: 0x25cd, 0xfa6: 0x25d4, 0xfa7: 0x25db, 0xfa8: 0x25f0, 0xfa9: 0x25f7, - 0xfaa: 0x1d98, 0xfab: 0x1d9d, 0xfac: 0x1da2, 0xfad: 0x1da7, 0xfae: 0x1db1, 0xfaf: 0x1db6, - 0xfb0: 0x1dca, 0xfb1: 0x1dcf, 0xfb2: 0x1dd4, 0xfb3: 0x1dd9, 0xfb4: 0x1de3, 0xfb5: 0x1de8, - 0xfb6: 0x1df2, 0xfb7: 0x1df7, 0xfb8: 0x1dfc, 0xfb9: 0x1e01, 0xfba: 0x1e0b, 0xfbb: 0x1e10, - 0xfbc: 0x1f3c, 0xfbd: 0x1f41, 0xfbe: 0x1f50, 0xfbf: 0x1f55, - // Block 0x3f, offset 0xfc0 - 0xfc0: 0x1f5a, 0xfc1: 0x1f6e, 0xfc2: 0x1f73, 0xfc3: 0x1f78, 0xfc4: 0x1f7d, 0xfc5: 0x1f96, - 0xfc6: 0x1fa0, 0xfc7: 0x1fa5, 0xfc8: 0x1faa, 0xfc9: 0x1fbe, 0xfca: 0x1fdc, 0xfcb: 0x1fe1, - 0xfcc: 0x1fe6, 0xfcd: 0x1feb, 0xfce: 0x1ff5, 0xfcf: 0x1ffa, 0xfd0: 0x445c, 0xfd1: 0x2027, - 0xfd2: 0x202c, 0xfd3: 0x2031, 0xfd4: 0x2036, 0xfd5: 0x2040, 0xfd6: 0x2045, 0xfd7: 0x25b1, - 0xfd8: 0x25b8, 0xfd9: 0x25bf, 0xfda: 0x25d4, 0xfdb: 0x25e2, 0xfdc: 0x1d89, 0xfdd: 0x1d8e, - 0xfde: 0x1d93, 0xfdf: 0x1da2, 0xfe0: 0x1dac, 0xfe1: 0x1dbb, 0xfe2: 0x1dc0, 0xfe3: 0x1dc5, - 0xfe4: 0x1dd4, 0xfe5: 0x1dde, 0xfe6: 0x1dfc, 0xfe7: 0x1e15, 0xfe8: 0x1e1a, 0xfe9: 0x1e29, - 0xfea: 0x1e2e, 0xfeb: 0x1e3d, 0xfec: 0x1e47, 0xfed: 0x1e56, 0xfee: 0x1e5b, 0xfef: 0x1e60, - 0xff0: 0x1e6a, 0xff1: 0x1ea6, 0xff2: 0x1eab, 0xff3: 0x1eb5, 0xff4: 0x1ec4, 0xff5: 0x1ec9, - 0xff6: 0x1ece, 0xff7: 0x1ed8, 0xff8: 0x1ee7, 0xff9: 0x1efb, 0xffa: 0x1f00, 0xffb: 0x1f05, - 0xffc: 0x1f14, 0xffd: 0x1f19, 0xffe: 0x1f28, 0xfff: 0x1f2d, - // Block 0x40, offset 0x1000 - 0x1000: 0x1f32, 0x1001: 0x1f37, 0x1002: 0x1f46, 0x1003: 0x1f4b, 0x1004: 0x1f5f, 0x1005: 0x1f64, - 0x1006: 0x1f69, 0x1007: 0x1f6e, 0x1008: 0x1f73, 0x1009: 0x1f87, 0x100a: 0x1f8c, 0x100b: 0x1f91, - 0x100c: 0x1f96, 0x100d: 0x1f9b, 0x100e: 0x1faf, 0x100f: 0x1fb4, 0x1010: 0x1fb9, 0x1011: 0x1fbe, - 0x1012: 0x1fcd, 0x1013: 0x1fd2, 0x1014: 0x1fd7, 0x1015: 0x1fe6, 0x1016: 0x1ff0, 0x1017: 0x1fff, - 0x1018: 0x2004, 0x1019: 0x4450, 0x101a: 0x2018, 0x101b: 0x201d, 0x101c: 0x2022, 0x101d: 0x2031, - 0x101e: 0x203b, 0x101f: 0x25d4, 0x1020: 0x25e2, 0x1021: 0x1da2, 0x1022: 0x1dac, 0x1023: 0x1dd4, - 0x1024: 0x1dde, 0x1025: 0x1dfc, 0x1026: 0x1e06, 0x1027: 0x1e6a, 0x1028: 0x1e6f, 0x1029: 0x1e92, - 0x102a: 0x1e97, 0x102b: 0x1f6e, 0x102c: 0x1f73, 0x102d: 0x1f96, 0x102e: 0x1fe6, 0x102f: 0x1ff0, - 0x1030: 0x2031, 0x1031: 0x203b, 0x1032: 0x4504, 0x1033: 0x450c, 0x1034: 0x4514, 0x1035: 0x1ef1, - 0x1036: 0x1ef6, 0x1037: 0x1f0a, 0x1038: 0x1f0f, 0x1039: 0x1f1e, 0x103a: 0x1f23, 0x103b: 0x1e74, - 0x103c: 0x1e79, 0x103d: 0x1e9c, 0x103e: 0x1ea1, 0x103f: 0x1e33, - // Block 0x41, offset 0x1040 - 0x1040: 0x1e38, 0x1041: 0x1e1f, 0x1042: 0x1e24, 0x1043: 0x1e4c, 0x1044: 0x1e51, 0x1045: 0x1eba, - 0x1046: 0x1ebf, 0x1047: 0x1edd, 0x1048: 0x1ee2, 0x1049: 0x1e7e, 0x104a: 0x1e83, 0x104b: 0x1e88, - 0x104c: 0x1e92, 0x104d: 0x1e8d, 0x104e: 0x1e65, 0x104f: 0x1eb0, 0x1050: 0x1ed3, 0x1051: 0x1ef1, - 0x1052: 0x1ef6, 0x1053: 0x1f0a, 0x1054: 0x1f0f, 0x1055: 0x1f1e, 0x1056: 0x1f23, 0x1057: 0x1e74, - 0x1058: 0x1e79, 0x1059: 0x1e9c, 0x105a: 0x1ea1, 0x105b: 0x1e33, 0x105c: 0x1e38, 0x105d: 0x1e1f, - 0x105e: 0x1e24, 0x105f: 0x1e4c, 0x1060: 0x1e51, 0x1061: 0x1eba, 0x1062: 0x1ebf, 0x1063: 0x1edd, - 0x1064: 0x1ee2, 0x1065: 0x1e7e, 0x1066: 0x1e83, 0x1067: 0x1e88, 0x1068: 0x1e92, 0x1069: 0x1e8d, - 0x106a: 0x1e65, 0x106b: 0x1eb0, 0x106c: 0x1ed3, 0x106d: 0x1e7e, 0x106e: 0x1e83, 0x106f: 0x1e88, - 0x1070: 0x1e92, 0x1071: 0x1e6f, 0x1072: 0x1e97, 0x1073: 0x1eec, 0x1074: 0x1e56, 0x1075: 0x1e5b, - 0x1076: 0x1e60, 0x1077: 0x1e7e, 0x1078: 0x1e83, 0x1079: 0x1e88, 0x107a: 0x1eec, 0x107b: 0x1efb, - 0x107c: 0x4408, 0x107d: 0x4408, - // Block 0x42, offset 0x1080 - 0x1090: 0x2311, 0x1091: 0x2326, - 0x1092: 0x2326, 0x1093: 0x232d, 0x1094: 0x2334, 0x1095: 0x2349, 0x1096: 0x2350, 0x1097: 0x2357, - 0x1098: 0x237a, 0x1099: 0x237a, 0x109a: 0x239d, 0x109b: 0x2396, 0x109c: 0x23b2, 0x109d: 0x23a4, - 0x109e: 0x23ab, 0x109f: 0x23ce, 0x10a0: 0x23ce, 0x10a1: 0x23c7, 0x10a2: 0x23d5, 0x10a3: 0x23d5, - 0x10a4: 0x23ff, 0x10a5: 0x23ff, 0x10a6: 0x241b, 0x10a7: 0x23e3, 0x10a8: 0x23e3, 0x10a9: 0x23dc, - 0x10aa: 0x23f1, 0x10ab: 0x23f1, 0x10ac: 0x23f8, 0x10ad: 0x23f8, 0x10ae: 0x2422, 0x10af: 0x2430, - 0x10b0: 0x2430, 0x10b1: 0x2437, 0x10b2: 0x2437, 0x10b3: 0x243e, 0x10b4: 0x2445, 0x10b5: 0x244c, - 0x10b6: 0x2453, 0x10b7: 0x2453, 0x10b8: 0x245a, 0x10b9: 0x2468, 0x10ba: 0x2476, 0x10bb: 0x246f, - 0x10bc: 0x247d, 0x10bd: 0x247d, 0x10be: 0x2492, 0x10bf: 0x2499, - // Block 0x43, offset 0x10c0 - 0x10c0: 0x24ca, 0x10c1: 0x24d8, 0x10c2: 0x24d1, 0x10c3: 0x24b5, 0x10c4: 0x24b5, 0x10c5: 0x24df, - 0x10c6: 0x24df, 0x10c7: 0x24e6, 0x10c8: 0x24e6, 0x10c9: 0x2510, 0x10ca: 0x2517, 0x10cb: 0x251e, - 0x10cc: 0x24f4, 0x10cd: 0x2502, 0x10ce: 0x2525, 0x10cf: 0x252c, - 0x10d2: 0x24fb, 0x10d3: 0x2580, 0x10d4: 0x2587, 0x10d5: 0x255d, 0x10d6: 0x2564, 0x10d7: 0x2548, - 0x10d8: 0x2548, 0x10d9: 0x254f, 0x10da: 0x2579, 0x10db: 0x2572, 0x10dc: 0x259c, 0x10dd: 0x259c, - 0x10de: 0x230a, 0x10df: 0x231f, 0x10e0: 0x2318, 0x10e1: 0x2342, 0x10e2: 0x233b, 0x10e3: 0x2365, - 0x10e4: 0x235e, 0x10e5: 0x2388, 0x10e6: 0x236c, 0x10e7: 0x2381, 0x10e8: 0x23b9, 0x10e9: 0x2406, - 0x10ea: 0x23ea, 0x10eb: 0x2429, 0x10ec: 0x24c3, 0x10ed: 0x24ed, 0x10ee: 0x2595, 0x10ef: 0x258e, - 0x10f0: 0x25a3, 0x10f1: 0x253a, 0x10f2: 0x24a0, 0x10f3: 0x256b, 0x10f4: 0x2492, 0x10f5: 0x24ca, - 0x10f6: 0x2461, 0x10f7: 0x24ae, 0x10f8: 0x2541, 0x10f9: 0x2533, 0x10fa: 0x24bc, 0x10fb: 0x24a7, - 0x10fc: 0x24bc, 0x10fd: 0x2541, 0x10fe: 0x2373, 0x10ff: 0x238f, - // Block 0x44, offset 0x1100 - 0x1100: 0x2509, 0x1101: 0x2484, 0x1102: 0x2303, 0x1103: 0x24a7, 0x1104: 0x244c, 0x1105: 0x241b, - 0x1106: 0x23c0, 0x1107: 0x2556, - 0x1130: 0x2414, 0x1131: 0x248b, 0x1132: 0x27bf, 0x1133: 0x27b6, 0x1134: 0x27ec, 0x1135: 0x27da, - 0x1136: 0x27c8, 0x1137: 0x27e3, 0x1138: 0x27f5, 0x1139: 0x240d, 0x113a: 0x2c7c, 0x113b: 0x2afc, - 0x113c: 0x27d1, - // Block 0x45, offset 0x1140 - 0x1150: 0x0019, 0x1151: 0x0483, - 0x1152: 0x0487, 0x1153: 0x0035, 0x1154: 0x0037, 0x1155: 0x0003, 0x1156: 0x003f, 0x1157: 0x04bf, - 0x1158: 0x04c3, 0x1159: 0x1b5c, - 0x1160: 0x8132, 0x1161: 0x8132, 0x1162: 0x8132, 0x1163: 0x8132, - 0x1164: 0x8132, 0x1165: 0x8132, 0x1166: 0x8132, 0x1167: 0x812d, 0x1168: 0x812d, 0x1169: 0x812d, - 0x116a: 0x812d, 0x116b: 0x812d, 0x116c: 0x812d, 0x116d: 0x812d, 0x116e: 0x8132, 0x116f: 0x8132, - 0x1170: 0x1873, 0x1171: 0x0443, 0x1172: 0x043f, 0x1173: 0x007f, 0x1174: 0x007f, 0x1175: 0x0011, - 0x1176: 0x0013, 0x1177: 0x00b7, 0x1178: 0x00bb, 0x1179: 0x04b7, 0x117a: 0x04bb, 0x117b: 0x04ab, - 0x117c: 0x04af, 0x117d: 0x0493, 0x117e: 0x0497, 0x117f: 0x048b, - // Block 0x46, offset 0x1180 - 0x1180: 0x048f, 0x1181: 0x049b, 0x1182: 0x049f, 0x1183: 0x04a3, 0x1184: 0x04a7, - 0x1187: 0x0077, 0x1188: 0x007b, 0x1189: 0x4269, 0x118a: 0x4269, 0x118b: 0x4269, - 0x118c: 0x4269, 0x118d: 0x007f, 0x118e: 0x007f, 0x118f: 0x007f, 0x1190: 0x0019, 0x1191: 0x0483, - 0x1192: 0x001d, 0x1194: 0x0037, 0x1195: 0x0035, 0x1196: 0x003f, 0x1197: 0x0003, - 0x1198: 0x0443, 0x1199: 0x0011, 0x119a: 0x0013, 0x119b: 0x00b7, 0x119c: 0x00bb, 0x119d: 0x04b7, - 0x119e: 0x04bb, 0x119f: 0x0007, 0x11a0: 0x000d, 0x11a1: 0x0015, 0x11a2: 0x0017, 0x11a3: 0x001b, - 0x11a4: 0x0039, 0x11a5: 0x003d, 0x11a6: 0x003b, 0x11a8: 0x0079, 0x11a9: 0x0009, - 0x11aa: 0x000b, 0x11ab: 0x0041, - 0x11b0: 0x42aa, 0x11b1: 0x442c, 0x11b2: 0x42af, 0x11b4: 0x42b4, - 0x11b6: 0x42b9, 0x11b7: 0x4432, 0x11b8: 0x42be, 0x11b9: 0x4438, 0x11ba: 0x42c3, 0x11bb: 0x443e, - 0x11bc: 0x42c8, 0x11bd: 0x4444, 0x11be: 0x42cd, 0x11bf: 0x444a, - // Block 0x47, offset 0x11c0 - 0x11c0: 0x0236, 0x11c1: 0x440e, 0x11c2: 0x440e, 0x11c3: 0x4414, 0x11c4: 0x4414, 0x11c5: 0x4456, - 0x11c6: 0x4456, 0x11c7: 0x441a, 0x11c8: 0x441a, 0x11c9: 0x4462, 0x11ca: 0x4462, 0x11cb: 0x4462, - 0x11cc: 0x4462, 0x11cd: 0x0239, 0x11ce: 0x0239, 0x11cf: 0x023c, 0x11d0: 0x023c, 0x11d1: 0x023c, - 0x11d2: 0x023c, 0x11d3: 0x023f, 0x11d4: 0x023f, 0x11d5: 0x0242, 0x11d6: 0x0242, 0x11d7: 0x0242, - 0x11d8: 0x0242, 0x11d9: 0x0245, 0x11da: 0x0245, 0x11db: 0x0245, 0x11dc: 0x0245, 0x11dd: 0x0248, - 0x11de: 0x0248, 0x11df: 0x0248, 0x11e0: 0x0248, 0x11e1: 0x024b, 0x11e2: 0x024b, 0x11e3: 0x024b, - 0x11e4: 0x024b, 0x11e5: 0x024e, 0x11e6: 0x024e, 0x11e7: 0x024e, 0x11e8: 0x024e, 0x11e9: 0x0251, - 0x11ea: 0x0251, 0x11eb: 0x0254, 0x11ec: 0x0254, 0x11ed: 0x0257, 0x11ee: 0x0257, 0x11ef: 0x025a, - 0x11f0: 0x025a, 0x11f1: 0x025d, 0x11f2: 0x025d, 0x11f3: 0x025d, 0x11f4: 0x025d, 0x11f5: 0x0260, - 0x11f6: 0x0260, 0x11f7: 0x0260, 0x11f8: 0x0260, 0x11f9: 0x0263, 0x11fa: 0x0263, 0x11fb: 0x0263, - 0x11fc: 0x0263, 0x11fd: 0x0266, 0x11fe: 0x0266, 0x11ff: 0x0266, - // Block 0x48, offset 0x1200 - 0x1200: 0x0266, 0x1201: 0x0269, 0x1202: 0x0269, 0x1203: 0x0269, 0x1204: 0x0269, 0x1205: 0x026c, - 0x1206: 0x026c, 0x1207: 0x026c, 0x1208: 0x026c, 0x1209: 0x026f, 0x120a: 0x026f, 0x120b: 0x026f, - 0x120c: 0x026f, 0x120d: 0x0272, 0x120e: 0x0272, 0x120f: 0x0272, 0x1210: 0x0272, 0x1211: 0x0275, - 0x1212: 0x0275, 0x1213: 0x0275, 0x1214: 0x0275, 0x1215: 0x0278, 0x1216: 0x0278, 0x1217: 0x0278, - 0x1218: 0x0278, 0x1219: 0x027b, 0x121a: 0x027b, 0x121b: 0x027b, 0x121c: 0x027b, 0x121d: 0x027e, - 0x121e: 0x027e, 0x121f: 0x027e, 0x1220: 0x027e, 0x1221: 0x0281, 0x1222: 0x0281, 0x1223: 0x0281, - 0x1224: 0x0281, 0x1225: 0x0284, 0x1226: 0x0284, 0x1227: 0x0284, 0x1228: 0x0284, 0x1229: 0x0287, - 0x122a: 0x0287, 0x122b: 0x0287, 0x122c: 0x0287, 0x122d: 0x028a, 0x122e: 0x028a, 0x122f: 0x028d, - 0x1230: 0x028d, 0x1231: 0x0290, 0x1232: 0x0290, 0x1233: 0x0290, 0x1234: 0x0290, 0x1235: 0x2e00, - 0x1236: 0x2e00, 0x1237: 0x2e08, 0x1238: 0x2e08, 0x1239: 0x2e10, 0x123a: 0x2e10, 0x123b: 0x1f82, - 0x123c: 0x1f82, - // Block 0x49, offset 0x1240 - 0x1240: 0x0081, 0x1241: 0x0083, 0x1242: 0x0085, 0x1243: 0x0087, 0x1244: 0x0089, 0x1245: 0x008b, - 0x1246: 0x008d, 0x1247: 0x008f, 0x1248: 0x0091, 0x1249: 0x0093, 0x124a: 0x0095, 0x124b: 0x0097, - 0x124c: 0x0099, 0x124d: 0x009b, 0x124e: 0x009d, 0x124f: 0x009f, 0x1250: 0x00a1, 0x1251: 0x00a3, - 0x1252: 0x00a5, 0x1253: 0x00a7, 0x1254: 0x00a9, 0x1255: 0x00ab, 0x1256: 0x00ad, 0x1257: 0x00af, - 0x1258: 0x00b1, 0x1259: 0x00b3, 0x125a: 0x00b5, 0x125b: 0x00b7, 0x125c: 0x00b9, 0x125d: 0x00bb, - 0x125e: 0x00bd, 0x125f: 0x0477, 0x1260: 0x047b, 0x1261: 0x0487, 0x1262: 0x049b, 0x1263: 0x049f, - 0x1264: 0x0483, 0x1265: 0x05ab, 0x1266: 0x05a3, 0x1267: 0x04c7, 0x1268: 0x04cf, 0x1269: 0x04d7, - 0x126a: 0x04df, 0x126b: 0x04e7, 0x126c: 0x056b, 0x126d: 0x0573, 0x126e: 0x057b, 0x126f: 0x051f, - 0x1270: 0x05af, 0x1271: 0x04cb, 0x1272: 0x04d3, 0x1273: 0x04db, 0x1274: 0x04e3, 0x1275: 0x04eb, - 0x1276: 0x04ef, 0x1277: 0x04f3, 0x1278: 0x04f7, 0x1279: 0x04fb, 0x127a: 0x04ff, 0x127b: 0x0503, - 0x127c: 0x0507, 0x127d: 0x050b, 0x127e: 0x050f, 0x127f: 0x0513, - // Block 0x4a, offset 0x1280 - 0x1280: 0x0517, 0x1281: 0x051b, 0x1282: 0x0523, 0x1283: 0x0527, 0x1284: 0x052b, 0x1285: 0x052f, - 0x1286: 0x0533, 0x1287: 0x0537, 0x1288: 0x053b, 0x1289: 0x053f, 0x128a: 0x0543, 0x128b: 0x0547, - 0x128c: 0x054b, 0x128d: 0x054f, 0x128e: 0x0553, 0x128f: 0x0557, 0x1290: 0x055b, 0x1291: 0x055f, - 0x1292: 0x0563, 0x1293: 0x0567, 0x1294: 0x056f, 0x1295: 0x0577, 0x1296: 0x057f, 0x1297: 0x0583, - 0x1298: 0x0587, 0x1299: 0x058b, 0x129a: 0x058f, 0x129b: 0x0593, 0x129c: 0x0597, 0x129d: 0x05a7, - 0x129e: 0x4a78, 0x129f: 0x4a7e, 0x12a0: 0x03c3, 0x12a1: 0x0313, 0x12a2: 0x0317, 0x12a3: 0x4a3b, - 0x12a4: 0x031b, 0x12a5: 0x4a41, 0x12a6: 0x4a47, 0x12a7: 0x031f, 0x12a8: 0x0323, 0x12a9: 0x0327, - 0x12aa: 0x4a4d, 0x12ab: 0x4a53, 0x12ac: 0x4a59, 0x12ad: 0x4a5f, 0x12ae: 0x4a65, 0x12af: 0x4a6b, - 0x12b0: 0x0367, 0x12b1: 0x032b, 0x12b2: 0x032f, 0x12b3: 0x0333, 0x12b4: 0x037b, 0x12b5: 0x0337, - 0x12b6: 0x033b, 0x12b7: 0x033f, 0x12b8: 0x0343, 0x12b9: 0x0347, 0x12ba: 0x034b, 0x12bb: 0x034f, - 0x12bc: 0x0353, 0x12bd: 0x0357, 0x12be: 0x035b, - // Block 0x4b, offset 0x12c0 - 0x12c2: 0x49bd, 0x12c3: 0x49c3, 0x12c4: 0x49c9, 0x12c5: 0x49cf, - 0x12c6: 0x49d5, 0x12c7: 0x49db, 0x12ca: 0x49e1, 0x12cb: 0x49e7, - 0x12cc: 0x49ed, 0x12cd: 0x49f3, 0x12ce: 0x49f9, 0x12cf: 0x49ff, - 0x12d2: 0x4a05, 0x12d3: 0x4a0b, 0x12d4: 0x4a11, 0x12d5: 0x4a17, 0x12d6: 0x4a1d, 0x12d7: 0x4a23, - 0x12da: 0x4a29, 0x12db: 0x4a2f, 0x12dc: 0x4a35, - 0x12e0: 0x00bf, 0x12e1: 0x00c2, 0x12e2: 0x00cb, 0x12e3: 0x4264, - 0x12e4: 0x00c8, 0x12e5: 0x00c5, 0x12e6: 0x0447, 0x12e8: 0x046b, 0x12e9: 0x044b, - 0x12ea: 0x044f, 0x12eb: 0x0453, 0x12ec: 0x0457, 0x12ed: 0x046f, 0x12ee: 0x0473, - // Block 0x4c, offset 0x1300 - 0x1300: 0x0063, 0x1301: 0x0065, 0x1302: 0x0067, 0x1303: 0x0069, 0x1304: 0x006b, 0x1305: 0x006d, - 0x1306: 0x006f, 0x1307: 0x0071, 0x1308: 0x0073, 0x1309: 0x0075, 0x130a: 0x0083, 0x130b: 0x0085, - 0x130c: 0x0087, 0x130d: 0x0089, 0x130e: 0x008b, 0x130f: 0x008d, 0x1310: 0x008f, 0x1311: 0x0091, - 0x1312: 0x0093, 0x1313: 0x0095, 0x1314: 0x0097, 0x1315: 0x0099, 0x1316: 0x009b, 0x1317: 0x009d, - 0x1318: 0x009f, 0x1319: 0x00a1, 0x131a: 0x00a3, 0x131b: 0x00a5, 0x131c: 0x00a7, 0x131d: 0x00a9, - 0x131e: 0x00ab, 0x131f: 0x00ad, 0x1320: 0x00af, 0x1321: 0x00b1, 0x1322: 0x00b3, 0x1323: 0x00b5, - 0x1324: 0x00dd, 0x1325: 0x00f2, 0x1328: 0x0173, 0x1329: 0x0176, - 0x132a: 0x0179, 0x132b: 0x017c, 0x132c: 0x017f, 0x132d: 0x0182, 0x132e: 0x0185, 0x132f: 0x0188, - 0x1330: 0x018b, 0x1331: 0x018e, 0x1332: 0x0191, 0x1333: 0x0194, 0x1334: 0x0197, 0x1335: 0x019a, - 0x1336: 0x019d, 0x1337: 0x01a0, 0x1338: 0x01a3, 0x1339: 0x0188, 0x133a: 0x01a6, 0x133b: 0x01a9, - 0x133c: 0x01ac, 0x133d: 0x01af, 0x133e: 0x01b2, 0x133f: 0x01b5, - // Block 0x4d, offset 0x1340 - 0x1340: 0x01fd, 0x1341: 0x0200, 0x1342: 0x0203, 0x1343: 0x045b, 0x1344: 0x01c7, 0x1345: 0x01d0, - 0x1346: 0x01d6, 0x1347: 0x01fa, 0x1348: 0x01eb, 0x1349: 0x01e8, 0x134a: 0x0206, 0x134b: 0x0209, - 0x134e: 0x0021, 0x134f: 0x0023, 0x1350: 0x0025, 0x1351: 0x0027, - 0x1352: 0x0029, 0x1353: 0x002b, 0x1354: 0x002d, 0x1355: 0x002f, 0x1356: 0x0031, 0x1357: 0x0033, - 0x1358: 0x0021, 0x1359: 0x0023, 0x135a: 0x0025, 0x135b: 0x0027, 0x135c: 0x0029, 0x135d: 0x002b, - 0x135e: 0x002d, 0x135f: 0x002f, 0x1360: 0x0031, 0x1361: 0x0033, 0x1362: 0x0021, 0x1363: 0x0023, - 0x1364: 0x0025, 0x1365: 0x0027, 0x1366: 0x0029, 0x1367: 0x002b, 0x1368: 0x002d, 0x1369: 0x002f, - 0x136a: 0x0031, 0x136b: 0x0033, 0x136c: 0x0021, 0x136d: 0x0023, 0x136e: 0x0025, 0x136f: 0x0027, - 0x1370: 0x0029, 0x1371: 0x002b, 0x1372: 0x002d, 0x1373: 0x002f, 0x1374: 0x0031, 0x1375: 0x0033, - 0x1376: 0x0021, 0x1377: 0x0023, 0x1378: 0x0025, 0x1379: 0x0027, 0x137a: 0x0029, 0x137b: 0x002b, - 0x137c: 0x002d, 0x137d: 0x002f, 0x137e: 0x0031, 0x137f: 0x0033, - // Block 0x4e, offset 0x1380 - 0x1380: 0x0239, 0x1381: 0x023c, 0x1382: 0x0248, 0x1383: 0x0251, 0x1385: 0x028a, - 0x1386: 0x025a, 0x1387: 0x024b, 0x1388: 0x0269, 0x1389: 0x0290, 0x138a: 0x027b, 0x138b: 0x027e, - 0x138c: 0x0281, 0x138d: 0x0284, 0x138e: 0x025d, 0x138f: 0x026f, 0x1390: 0x0275, 0x1391: 0x0263, - 0x1392: 0x0278, 0x1393: 0x0257, 0x1394: 0x0260, 0x1395: 0x0242, 0x1396: 0x0245, 0x1397: 0x024e, - 0x1398: 0x0254, 0x1399: 0x0266, 0x139a: 0x026c, 0x139b: 0x0272, 0x139c: 0x0293, 0x139d: 0x02e4, - 0x139e: 0x02cc, 0x139f: 0x0296, 0x13a1: 0x023c, 0x13a2: 0x0248, - 0x13a4: 0x0287, 0x13a7: 0x024b, 0x13a9: 0x0290, - 0x13aa: 0x027b, 0x13ab: 0x027e, 0x13ac: 0x0281, 0x13ad: 0x0284, 0x13ae: 0x025d, 0x13af: 0x026f, - 0x13b0: 0x0275, 0x13b1: 0x0263, 0x13b2: 0x0278, 0x13b4: 0x0260, 0x13b5: 0x0242, - 0x13b6: 0x0245, 0x13b7: 0x024e, 0x13b9: 0x0266, 0x13bb: 0x0272, - // Block 0x4f, offset 0x13c0 - 0x13c2: 0x0248, - 0x13c7: 0x024b, 0x13c9: 0x0290, 0x13cb: 0x027e, - 0x13cd: 0x0284, 0x13ce: 0x025d, 0x13cf: 0x026f, 0x13d1: 0x0263, - 0x13d2: 0x0278, 0x13d4: 0x0260, 0x13d7: 0x024e, - 0x13d9: 0x0266, 0x13db: 0x0272, 0x13dd: 0x02e4, - 0x13df: 0x0296, 0x13e1: 0x023c, 0x13e2: 0x0248, - 0x13e4: 0x0287, 0x13e7: 0x024b, 0x13e8: 0x0269, 0x13e9: 0x0290, - 0x13ea: 0x027b, 0x13ec: 0x0281, 0x13ed: 0x0284, 0x13ee: 0x025d, 0x13ef: 0x026f, - 0x13f0: 0x0275, 0x13f1: 0x0263, 0x13f2: 0x0278, 0x13f4: 0x0260, 0x13f5: 0x0242, - 0x13f6: 0x0245, 0x13f7: 0x024e, 0x13f9: 0x0266, 0x13fa: 0x026c, 0x13fb: 0x0272, - 0x13fc: 0x0293, 0x13fe: 0x02cc, - // Block 0x50, offset 0x1400 - 0x1400: 0x0239, 0x1401: 0x023c, 0x1402: 0x0248, 0x1403: 0x0251, 0x1404: 0x0287, 0x1405: 0x028a, - 0x1406: 0x025a, 0x1407: 0x024b, 0x1408: 0x0269, 0x1409: 0x0290, 0x140b: 0x027e, - 0x140c: 0x0281, 0x140d: 0x0284, 0x140e: 0x025d, 0x140f: 0x026f, 0x1410: 0x0275, 0x1411: 0x0263, - 0x1412: 0x0278, 0x1413: 0x0257, 0x1414: 0x0260, 0x1415: 0x0242, 0x1416: 0x0245, 0x1417: 0x024e, - 0x1418: 0x0254, 0x1419: 0x0266, 0x141a: 0x026c, 0x141b: 0x0272, - 0x1421: 0x023c, 0x1422: 0x0248, 0x1423: 0x0251, - 0x1425: 0x028a, 0x1426: 0x025a, 0x1427: 0x024b, 0x1428: 0x0269, 0x1429: 0x0290, - 0x142b: 0x027e, 0x142c: 0x0281, 0x142d: 0x0284, 0x142e: 0x025d, 0x142f: 0x026f, - 0x1430: 0x0275, 0x1431: 0x0263, 0x1432: 0x0278, 0x1433: 0x0257, 0x1434: 0x0260, 0x1435: 0x0242, - 0x1436: 0x0245, 0x1437: 0x024e, 0x1438: 0x0254, 0x1439: 0x0266, 0x143a: 0x026c, 0x143b: 0x0272, - // Block 0x51, offset 0x1440 - 0x1440: 0x1879, 0x1441: 0x1876, 0x1442: 0x187c, 0x1443: 0x18a0, 0x1444: 0x18c4, 0x1445: 0x18e8, - 0x1446: 0x190c, 0x1447: 0x1915, 0x1448: 0x191b, 0x1449: 0x1921, 0x144a: 0x1927, - 0x1450: 0x1a8c, 0x1451: 0x1a90, - 0x1452: 0x1a94, 0x1453: 0x1a98, 0x1454: 0x1a9c, 0x1455: 0x1aa0, 0x1456: 0x1aa4, 0x1457: 0x1aa8, - 0x1458: 0x1aac, 0x1459: 0x1ab0, 0x145a: 0x1ab4, 0x145b: 0x1ab8, 0x145c: 0x1abc, 0x145d: 0x1ac0, - 0x145e: 0x1ac4, 0x145f: 0x1ac8, 0x1460: 0x1acc, 0x1461: 0x1ad0, 0x1462: 0x1ad4, 0x1463: 0x1ad8, - 0x1464: 0x1adc, 0x1465: 0x1ae0, 0x1466: 0x1ae4, 0x1467: 0x1ae8, 0x1468: 0x1aec, 0x1469: 0x1af0, - 0x146a: 0x271e, 0x146b: 0x0047, 0x146c: 0x0065, 0x146d: 0x193c, 0x146e: 0x19b1, - 0x1470: 0x0043, 0x1471: 0x0045, 0x1472: 0x0047, 0x1473: 0x0049, 0x1474: 0x004b, 0x1475: 0x004d, - 0x1476: 0x004f, 0x1477: 0x0051, 0x1478: 0x0053, 0x1479: 0x0055, 0x147a: 0x0057, 0x147b: 0x0059, - 0x147c: 0x005b, 0x147d: 0x005d, 0x147e: 0x005f, 0x147f: 0x0061, - // Block 0x52, offset 0x1480 - 0x1480: 0x26ad, 0x1481: 0x26c2, 0x1482: 0x0503, - 0x1490: 0x0c0f, 0x1491: 0x0a47, - 0x1492: 0x08d3, 0x1493: 0x45c4, 0x1494: 0x071b, 0x1495: 0x09ef, 0x1496: 0x132f, 0x1497: 0x09ff, - 0x1498: 0x0727, 0x1499: 0x0cd7, 0x149a: 0x0eaf, 0x149b: 0x0caf, 0x149c: 0x0827, 0x149d: 0x0b6b, - 0x149e: 0x07bf, 0x149f: 0x0cb7, 0x14a0: 0x0813, 0x14a1: 0x1117, 0x14a2: 0x0f83, 0x14a3: 0x138b, - 0x14a4: 0x09d3, 0x14a5: 0x090b, 0x14a6: 0x0e63, 0x14a7: 0x0c1b, 0x14a8: 0x0c47, 0x14a9: 0x06bf, - 0x14aa: 0x06cb, 0x14ab: 0x140b, 0x14ac: 0x0adb, 0x14ad: 0x06e7, 0x14ae: 0x08ef, 0x14af: 0x0c3b, - 0x14b0: 0x13b3, 0x14b1: 0x0c13, 0x14b2: 0x106f, 0x14b3: 0x10ab, 0x14b4: 0x08f7, 0x14b5: 0x0e43, - 0x14b6: 0x0d0b, 0x14b7: 0x0d07, 0x14b8: 0x0f97, 0x14b9: 0x082b, 0x14ba: 0x0957, 0x14bb: 0x1443, - // Block 0x53, offset 0x14c0 - 0x14c0: 0x06fb, 0x14c1: 0x06f3, 0x14c2: 0x0703, 0x14c3: 0x1647, 0x14c4: 0x0747, 0x14c5: 0x0757, - 0x14c6: 0x075b, 0x14c7: 0x0763, 0x14c8: 0x076b, 0x14c9: 0x076f, 0x14ca: 0x077b, 0x14cb: 0x0773, - 0x14cc: 0x05b3, 0x14cd: 0x165b, 0x14ce: 0x078f, 0x14cf: 0x0793, 0x14d0: 0x0797, 0x14d1: 0x07b3, - 0x14d2: 0x164c, 0x14d3: 0x05b7, 0x14d4: 0x079f, 0x14d5: 0x07bf, 0x14d6: 0x1656, 0x14d7: 0x07cf, - 0x14d8: 0x07d7, 0x14d9: 0x0737, 0x14da: 0x07df, 0x14db: 0x07e3, 0x14dc: 0x1831, 0x14dd: 0x07ff, - 0x14de: 0x0807, 0x14df: 0x05bf, 0x14e0: 0x081f, 0x14e1: 0x0823, 0x14e2: 0x082b, 0x14e3: 0x082f, - 0x14e4: 0x05c3, 0x14e5: 0x0847, 0x14e6: 0x084b, 0x14e7: 0x0857, 0x14e8: 0x0863, 0x14e9: 0x0867, - 0x14ea: 0x086b, 0x14eb: 0x0873, 0x14ec: 0x0893, 0x14ed: 0x0897, 0x14ee: 0x089f, 0x14ef: 0x08af, - 0x14f0: 0x08b7, 0x14f1: 0x08bb, 0x14f2: 0x08bb, 0x14f3: 0x08bb, 0x14f4: 0x166a, 0x14f5: 0x0e93, - 0x14f6: 0x08cf, 0x14f7: 0x08d7, 0x14f8: 0x166f, 0x14f9: 0x08e3, 0x14fa: 0x08eb, 0x14fb: 0x08f3, - 0x14fc: 0x091b, 0x14fd: 0x0907, 0x14fe: 0x0913, 0x14ff: 0x0917, - // Block 0x54, offset 0x1500 - 0x1500: 0x091f, 0x1501: 0x0927, 0x1502: 0x092b, 0x1503: 0x0933, 0x1504: 0x093b, 0x1505: 0x093f, - 0x1506: 0x093f, 0x1507: 0x0947, 0x1508: 0x094f, 0x1509: 0x0953, 0x150a: 0x095f, 0x150b: 0x0983, - 0x150c: 0x0967, 0x150d: 0x0987, 0x150e: 0x096b, 0x150f: 0x0973, 0x1510: 0x080b, 0x1511: 0x09cf, - 0x1512: 0x0997, 0x1513: 0x099b, 0x1514: 0x099f, 0x1515: 0x0993, 0x1516: 0x09a7, 0x1517: 0x09a3, - 0x1518: 0x09bb, 0x1519: 0x1674, 0x151a: 0x09d7, 0x151b: 0x09db, 0x151c: 0x09e3, 0x151d: 0x09ef, - 0x151e: 0x09f7, 0x151f: 0x0a13, 0x1520: 0x1679, 0x1521: 0x167e, 0x1522: 0x0a1f, 0x1523: 0x0a23, - 0x1524: 0x0a27, 0x1525: 0x0a1b, 0x1526: 0x0a2f, 0x1527: 0x05c7, 0x1528: 0x05cb, 0x1529: 0x0a37, - 0x152a: 0x0a3f, 0x152b: 0x0a3f, 0x152c: 0x1683, 0x152d: 0x0a5b, 0x152e: 0x0a5f, 0x152f: 0x0a63, - 0x1530: 0x0a6b, 0x1531: 0x1688, 0x1532: 0x0a73, 0x1533: 0x0a77, 0x1534: 0x0b4f, 0x1535: 0x0a7f, - 0x1536: 0x05cf, 0x1537: 0x0a8b, 0x1538: 0x0a9b, 0x1539: 0x0aa7, 0x153a: 0x0aa3, 0x153b: 0x1692, - 0x153c: 0x0aaf, 0x153d: 0x1697, 0x153e: 0x0abb, 0x153f: 0x0ab7, - // Block 0x55, offset 0x1540 - 0x1540: 0x0abf, 0x1541: 0x0acf, 0x1542: 0x0ad3, 0x1543: 0x05d3, 0x1544: 0x0ae3, 0x1545: 0x0aeb, - 0x1546: 0x0aef, 0x1547: 0x0af3, 0x1548: 0x05d7, 0x1549: 0x169c, 0x154a: 0x05db, 0x154b: 0x0b0f, - 0x154c: 0x0b13, 0x154d: 0x0b17, 0x154e: 0x0b1f, 0x154f: 0x1863, 0x1550: 0x0b37, 0x1551: 0x16a6, - 0x1552: 0x16a6, 0x1553: 0x11d7, 0x1554: 0x0b47, 0x1555: 0x0b47, 0x1556: 0x05df, 0x1557: 0x16c9, - 0x1558: 0x179b, 0x1559: 0x0b57, 0x155a: 0x0b5f, 0x155b: 0x05e3, 0x155c: 0x0b73, 0x155d: 0x0b83, - 0x155e: 0x0b87, 0x155f: 0x0b8f, 0x1560: 0x0b9f, 0x1561: 0x05eb, 0x1562: 0x05e7, 0x1563: 0x0ba3, - 0x1564: 0x16ab, 0x1565: 0x0ba7, 0x1566: 0x0bbb, 0x1567: 0x0bbf, 0x1568: 0x0bc3, 0x1569: 0x0bbf, - 0x156a: 0x0bcf, 0x156b: 0x0bd3, 0x156c: 0x0be3, 0x156d: 0x0bdb, 0x156e: 0x0bdf, 0x156f: 0x0be7, - 0x1570: 0x0beb, 0x1571: 0x0bef, 0x1572: 0x0bfb, 0x1573: 0x0bff, 0x1574: 0x0c17, 0x1575: 0x0c1f, - 0x1576: 0x0c2f, 0x1577: 0x0c43, 0x1578: 0x16ba, 0x1579: 0x0c3f, 0x157a: 0x0c33, 0x157b: 0x0c4b, - 0x157c: 0x0c53, 0x157d: 0x0c67, 0x157e: 0x16bf, 0x157f: 0x0c6f, - // Block 0x56, offset 0x1580 - 0x1580: 0x0c63, 0x1581: 0x0c5b, 0x1582: 0x05ef, 0x1583: 0x0c77, 0x1584: 0x0c7f, 0x1585: 0x0c87, - 0x1586: 0x0c7b, 0x1587: 0x05f3, 0x1588: 0x0c97, 0x1589: 0x0c9f, 0x158a: 0x16c4, 0x158b: 0x0ccb, - 0x158c: 0x0cff, 0x158d: 0x0cdb, 0x158e: 0x05ff, 0x158f: 0x0ce7, 0x1590: 0x05fb, 0x1591: 0x05f7, - 0x1592: 0x07c3, 0x1593: 0x07c7, 0x1594: 0x0d03, 0x1595: 0x0ceb, 0x1596: 0x11ab, 0x1597: 0x0663, - 0x1598: 0x0d0f, 0x1599: 0x0d13, 0x159a: 0x0d17, 0x159b: 0x0d2b, 0x159c: 0x0d23, 0x159d: 0x16dd, - 0x159e: 0x0603, 0x159f: 0x0d3f, 0x15a0: 0x0d33, 0x15a1: 0x0d4f, 0x15a2: 0x0d57, 0x15a3: 0x16e7, - 0x15a4: 0x0d5b, 0x15a5: 0x0d47, 0x15a6: 0x0d63, 0x15a7: 0x0607, 0x15a8: 0x0d67, 0x15a9: 0x0d6b, - 0x15aa: 0x0d6f, 0x15ab: 0x0d7b, 0x15ac: 0x16ec, 0x15ad: 0x0d83, 0x15ae: 0x060b, 0x15af: 0x0d8f, - 0x15b0: 0x16f1, 0x15b1: 0x0d93, 0x15b2: 0x060f, 0x15b3: 0x0d9f, 0x15b4: 0x0dab, 0x15b5: 0x0db7, - 0x15b6: 0x0dbb, 0x15b7: 0x16f6, 0x15b8: 0x168d, 0x15b9: 0x16fb, 0x15ba: 0x0ddb, 0x15bb: 0x1700, - 0x15bc: 0x0de7, 0x15bd: 0x0def, 0x15be: 0x0ddf, 0x15bf: 0x0dfb, - // Block 0x57, offset 0x15c0 - 0x15c0: 0x0e0b, 0x15c1: 0x0e1b, 0x15c2: 0x0e0f, 0x15c3: 0x0e13, 0x15c4: 0x0e1f, 0x15c5: 0x0e23, - 0x15c6: 0x1705, 0x15c7: 0x0e07, 0x15c8: 0x0e3b, 0x15c9: 0x0e3f, 0x15ca: 0x0613, 0x15cb: 0x0e53, - 0x15cc: 0x0e4f, 0x15cd: 0x170a, 0x15ce: 0x0e33, 0x15cf: 0x0e6f, 0x15d0: 0x170f, 0x15d1: 0x1714, - 0x15d2: 0x0e73, 0x15d3: 0x0e87, 0x15d4: 0x0e83, 0x15d5: 0x0e7f, 0x15d6: 0x0617, 0x15d7: 0x0e8b, - 0x15d8: 0x0e9b, 0x15d9: 0x0e97, 0x15da: 0x0ea3, 0x15db: 0x1651, 0x15dc: 0x0eb3, 0x15dd: 0x1719, - 0x15de: 0x0ebf, 0x15df: 0x1723, 0x15e0: 0x0ed3, 0x15e1: 0x0edf, 0x15e2: 0x0ef3, 0x15e3: 0x1728, - 0x15e4: 0x0f07, 0x15e5: 0x0f0b, 0x15e6: 0x172d, 0x15e7: 0x1732, 0x15e8: 0x0f27, 0x15e9: 0x0f37, - 0x15ea: 0x061b, 0x15eb: 0x0f3b, 0x15ec: 0x061f, 0x15ed: 0x061f, 0x15ee: 0x0f53, 0x15ef: 0x0f57, - 0x15f0: 0x0f5f, 0x15f1: 0x0f63, 0x15f2: 0x0f6f, 0x15f3: 0x0623, 0x15f4: 0x0f87, 0x15f5: 0x1737, - 0x15f6: 0x0fa3, 0x15f7: 0x173c, 0x15f8: 0x0faf, 0x15f9: 0x16a1, 0x15fa: 0x0fbf, 0x15fb: 0x1741, - 0x15fc: 0x1746, 0x15fd: 0x174b, 0x15fe: 0x0627, 0x15ff: 0x062b, - // Block 0x58, offset 0x1600 - 0x1600: 0x0ff7, 0x1601: 0x1755, 0x1602: 0x1750, 0x1603: 0x175a, 0x1604: 0x175f, 0x1605: 0x0fff, - 0x1606: 0x1003, 0x1607: 0x1003, 0x1608: 0x100b, 0x1609: 0x0633, 0x160a: 0x100f, 0x160b: 0x0637, - 0x160c: 0x063b, 0x160d: 0x1769, 0x160e: 0x1023, 0x160f: 0x102b, 0x1610: 0x1037, 0x1611: 0x063f, - 0x1612: 0x176e, 0x1613: 0x105b, 0x1614: 0x1773, 0x1615: 0x1778, 0x1616: 0x107b, 0x1617: 0x1093, - 0x1618: 0x0643, 0x1619: 0x109b, 0x161a: 0x109f, 0x161b: 0x10a3, 0x161c: 0x177d, 0x161d: 0x1782, - 0x161e: 0x1782, 0x161f: 0x10bb, 0x1620: 0x0647, 0x1621: 0x1787, 0x1622: 0x10cf, 0x1623: 0x10d3, - 0x1624: 0x064b, 0x1625: 0x178c, 0x1626: 0x10ef, 0x1627: 0x064f, 0x1628: 0x10ff, 0x1629: 0x10f7, - 0x162a: 0x1107, 0x162b: 0x1796, 0x162c: 0x111f, 0x162d: 0x0653, 0x162e: 0x112b, 0x162f: 0x1133, - 0x1630: 0x1143, 0x1631: 0x0657, 0x1632: 0x17a0, 0x1633: 0x17a5, 0x1634: 0x065b, 0x1635: 0x17aa, - 0x1636: 0x115b, 0x1637: 0x17af, 0x1638: 0x1167, 0x1639: 0x1173, 0x163a: 0x117b, 0x163b: 0x17b4, - 0x163c: 0x17b9, 0x163d: 0x118f, 0x163e: 0x17be, 0x163f: 0x1197, - // Block 0x59, offset 0x1640 - 0x1640: 0x16ce, 0x1641: 0x065f, 0x1642: 0x11af, 0x1643: 0x11b3, 0x1644: 0x0667, 0x1645: 0x11b7, - 0x1646: 0x0a33, 0x1647: 0x17c3, 0x1648: 0x17c8, 0x1649: 0x16d3, 0x164a: 0x16d8, 0x164b: 0x11d7, - 0x164c: 0x11db, 0x164d: 0x13f3, 0x164e: 0x066b, 0x164f: 0x1207, 0x1650: 0x1203, 0x1651: 0x120b, - 0x1652: 0x083f, 0x1653: 0x120f, 0x1654: 0x1213, 0x1655: 0x1217, 0x1656: 0x121f, 0x1657: 0x17cd, - 0x1658: 0x121b, 0x1659: 0x1223, 0x165a: 0x1237, 0x165b: 0x123b, 0x165c: 0x1227, 0x165d: 0x123f, - 0x165e: 0x1253, 0x165f: 0x1267, 0x1660: 0x1233, 0x1661: 0x1247, 0x1662: 0x124b, 0x1663: 0x124f, - 0x1664: 0x17d2, 0x1665: 0x17dc, 0x1666: 0x17d7, 0x1667: 0x066f, 0x1668: 0x126f, 0x1669: 0x1273, - 0x166a: 0x127b, 0x166b: 0x17f0, 0x166c: 0x127f, 0x166d: 0x17e1, 0x166e: 0x0673, 0x166f: 0x0677, - 0x1670: 0x17e6, 0x1671: 0x17eb, 0x1672: 0x067b, 0x1673: 0x129f, 0x1674: 0x12a3, 0x1675: 0x12a7, - 0x1676: 0x12ab, 0x1677: 0x12b7, 0x1678: 0x12b3, 0x1679: 0x12bf, 0x167a: 0x12bb, 0x167b: 0x12cb, - 0x167c: 0x12c3, 0x167d: 0x12c7, 0x167e: 0x12cf, 0x167f: 0x067f, - // Block 0x5a, offset 0x1680 - 0x1680: 0x12d7, 0x1681: 0x12db, 0x1682: 0x0683, 0x1683: 0x12eb, 0x1684: 0x12ef, 0x1685: 0x17f5, - 0x1686: 0x12fb, 0x1687: 0x12ff, 0x1688: 0x0687, 0x1689: 0x130b, 0x168a: 0x05bb, 0x168b: 0x17fa, - 0x168c: 0x17ff, 0x168d: 0x068b, 0x168e: 0x068f, 0x168f: 0x1337, 0x1690: 0x134f, 0x1691: 0x136b, - 0x1692: 0x137b, 0x1693: 0x1804, 0x1694: 0x138f, 0x1695: 0x1393, 0x1696: 0x13ab, 0x1697: 0x13b7, - 0x1698: 0x180e, 0x1699: 0x1660, 0x169a: 0x13c3, 0x169b: 0x13bf, 0x169c: 0x13cb, 0x169d: 0x1665, - 0x169e: 0x13d7, 0x169f: 0x13e3, 0x16a0: 0x1813, 0x16a1: 0x1818, 0x16a2: 0x1423, 0x16a3: 0x142f, - 0x16a4: 0x1437, 0x16a5: 0x181d, 0x16a6: 0x143b, 0x16a7: 0x1467, 0x16a8: 0x1473, 0x16a9: 0x1477, - 0x16aa: 0x146f, 0x16ab: 0x1483, 0x16ac: 0x1487, 0x16ad: 0x1822, 0x16ae: 0x1493, 0x16af: 0x0693, - 0x16b0: 0x149b, 0x16b1: 0x1827, 0x16b2: 0x0697, 0x16b3: 0x14d3, 0x16b4: 0x0ac3, 0x16b5: 0x14eb, - 0x16b6: 0x182c, 0x16b7: 0x1836, 0x16b8: 0x069b, 0x16b9: 0x069f, 0x16ba: 0x1513, 0x16bb: 0x183b, - 0x16bc: 0x06a3, 0x16bd: 0x1840, 0x16be: 0x152b, 0x16bf: 0x152b, - // Block 0x5b, offset 0x16c0 - 0x16c0: 0x1533, 0x16c1: 0x1845, 0x16c2: 0x154b, 0x16c3: 0x06a7, 0x16c4: 0x155b, 0x16c5: 0x1567, - 0x16c6: 0x156f, 0x16c7: 0x1577, 0x16c8: 0x06ab, 0x16c9: 0x184a, 0x16ca: 0x158b, 0x16cb: 0x15a7, - 0x16cc: 0x15b3, 0x16cd: 0x06af, 0x16ce: 0x06b3, 0x16cf: 0x15b7, 0x16d0: 0x184f, 0x16d1: 0x06b7, - 0x16d2: 0x1854, 0x16d3: 0x1859, 0x16d4: 0x185e, 0x16d5: 0x15db, 0x16d6: 0x06bb, 0x16d7: 0x15ef, - 0x16d8: 0x15f7, 0x16d9: 0x15fb, 0x16da: 0x1603, 0x16db: 0x160b, 0x16dc: 0x1613, 0x16dd: 0x1868, -} - -// nfkcIndex: 22 blocks, 1408 entries, 1408 bytes -// Block 0 is the zero block. -var nfkcIndex = [1408]uint8{ - // Block 0x0, offset 0x0 - // Block 0x1, offset 0x40 - // Block 0x2, offset 0x80 - // Block 0x3, offset 0xc0 - 0xc2: 0x5a, 0xc3: 0x01, 0xc4: 0x02, 0xc5: 0x03, 0xc6: 0x5b, 0xc7: 0x04, - 0xc8: 0x05, 0xca: 0x5c, 0xcb: 0x5d, 0xcc: 0x06, 0xcd: 0x07, 0xce: 0x08, 0xcf: 0x09, - 0xd0: 0x0a, 0xd1: 0x5e, 0xd2: 0x5f, 0xd3: 0x0b, 0xd6: 0x0c, 0xd7: 0x60, - 0xd8: 0x61, 0xd9: 0x0d, 0xdb: 0x62, 0xdc: 0x63, 0xdd: 0x64, 0xdf: 0x65, - 0xe0: 0x02, 0xe1: 0x03, 0xe2: 0x04, 0xe3: 0x05, - 0xea: 0x06, 0xeb: 0x07, 0xec: 0x08, 0xed: 0x09, 0xef: 0x0a, - 0xf0: 0x13, - // Block 0x4, offset 0x100 - 0x120: 0x66, 0x121: 0x67, 0x123: 0x68, 0x124: 0x69, 0x125: 0x6a, 0x126: 0x6b, 0x127: 0x6c, - 0x128: 0x6d, 0x129: 0x6e, 0x12a: 0x6f, 0x12b: 0x70, 0x12c: 0x6b, 0x12d: 0x71, 0x12e: 0x72, 0x12f: 0x73, - 0x131: 0x74, 0x132: 0x75, 0x133: 0x76, 0x134: 0x77, 0x135: 0x78, 0x137: 0x79, - 0x138: 0x7a, 0x139: 0x7b, 0x13a: 0x7c, 0x13b: 0x7d, 0x13c: 0x7e, 0x13d: 0x7f, 0x13e: 0x80, 0x13f: 0x81, - // Block 0x5, offset 0x140 - 0x140: 0x82, 0x142: 0x83, 0x143: 0x84, 0x144: 0x85, 0x145: 0x86, 0x146: 0x87, 0x147: 0x88, - 0x14d: 0x89, - 0x15c: 0x8a, 0x15f: 0x8b, - 0x162: 0x8c, 0x164: 0x8d, - 0x168: 0x8e, 0x169: 0x8f, 0x16a: 0x90, 0x16c: 0x0e, 0x16d: 0x91, 0x16e: 0x92, 0x16f: 0x93, - 0x170: 0x94, 0x173: 0x95, 0x174: 0x96, 0x175: 0x0f, 0x176: 0x10, 0x177: 0x97, - 0x178: 0x11, 0x179: 0x12, 0x17a: 0x13, 0x17b: 0x14, 0x17c: 0x15, 0x17d: 0x16, 0x17e: 0x17, 0x17f: 0x18, - // Block 0x6, offset 0x180 - 0x180: 0x98, 0x181: 0x99, 0x182: 0x9a, 0x183: 0x9b, 0x184: 0x19, 0x185: 0x1a, 0x186: 0x9c, 0x187: 0x9d, - 0x188: 0x9e, 0x189: 0x1b, 0x18a: 0x1c, 0x18b: 0x9f, 0x18c: 0xa0, - 0x191: 0x1d, 0x192: 0x1e, 0x193: 0xa1, - 0x1a8: 0xa2, 0x1a9: 0xa3, 0x1ab: 0xa4, - 0x1b1: 0xa5, 0x1b3: 0xa6, 0x1b5: 0xa7, 0x1b7: 0xa8, - 0x1ba: 0xa9, 0x1bb: 0xaa, 0x1bc: 0x1f, 0x1bd: 0x20, 0x1be: 0x21, 0x1bf: 0xab, - // Block 0x7, offset 0x1c0 - 0x1c0: 0xac, 0x1c1: 0x22, 0x1c2: 0x23, 0x1c3: 0x24, 0x1c4: 0xad, 0x1c5: 0x25, 0x1c6: 0x26, - 0x1c8: 0x27, 0x1c9: 0x28, 0x1ca: 0x29, 0x1cb: 0x2a, 0x1cc: 0x2b, 0x1cd: 0x2c, 0x1ce: 0x2d, 0x1cf: 0x2e, - // Block 0x8, offset 0x200 - 0x219: 0xae, 0x21a: 0xaf, 0x21b: 0xb0, 0x21d: 0xb1, 0x21f: 0xb2, - 0x220: 0xb3, 0x223: 0xb4, 0x224: 0xb5, 0x225: 0xb6, 0x226: 0xb7, 0x227: 0xb8, - 0x22a: 0xb9, 0x22b: 0xba, 0x22d: 0xbb, 0x22f: 0xbc, - 0x230: 0xbd, 0x231: 0xbe, 0x232: 0xbf, 0x233: 0xc0, 0x234: 0xc1, 0x235: 0xc2, 0x236: 0xc3, 0x237: 0xbd, - 0x238: 0xbe, 0x239: 0xbf, 0x23a: 0xc0, 0x23b: 0xc1, 0x23c: 0xc2, 0x23d: 0xc3, 0x23e: 0xbd, 0x23f: 0xbe, - // Block 0x9, offset 0x240 - 0x240: 0xbf, 0x241: 0xc0, 0x242: 0xc1, 0x243: 0xc2, 0x244: 0xc3, 0x245: 0xbd, 0x246: 0xbe, 0x247: 0xbf, - 0x248: 0xc0, 0x249: 0xc1, 0x24a: 0xc2, 0x24b: 0xc3, 0x24c: 0xbd, 0x24d: 0xbe, 0x24e: 0xbf, 0x24f: 0xc0, - 0x250: 0xc1, 0x251: 0xc2, 0x252: 0xc3, 0x253: 0xbd, 0x254: 0xbe, 0x255: 0xbf, 0x256: 0xc0, 0x257: 0xc1, - 0x258: 0xc2, 0x259: 0xc3, 0x25a: 0xbd, 0x25b: 0xbe, 0x25c: 0xbf, 0x25d: 0xc0, 0x25e: 0xc1, 0x25f: 0xc2, - 0x260: 0xc3, 0x261: 0xbd, 0x262: 0xbe, 0x263: 0xbf, 0x264: 0xc0, 0x265: 0xc1, 0x266: 0xc2, 0x267: 0xc3, - 0x268: 0xbd, 0x269: 0xbe, 0x26a: 0xbf, 0x26b: 0xc0, 0x26c: 0xc1, 0x26d: 0xc2, 0x26e: 0xc3, 0x26f: 0xbd, - 0x270: 0xbe, 0x271: 0xbf, 0x272: 0xc0, 0x273: 0xc1, 0x274: 0xc2, 0x275: 0xc3, 0x276: 0xbd, 0x277: 0xbe, - 0x278: 0xbf, 0x279: 0xc0, 0x27a: 0xc1, 0x27b: 0xc2, 0x27c: 0xc3, 0x27d: 0xbd, 0x27e: 0xbe, 0x27f: 0xbf, - // Block 0xa, offset 0x280 - 0x280: 0xc0, 0x281: 0xc1, 0x282: 0xc2, 0x283: 0xc3, 0x284: 0xbd, 0x285: 0xbe, 0x286: 0xbf, 0x287: 0xc0, - 0x288: 0xc1, 0x289: 0xc2, 0x28a: 0xc3, 0x28b: 0xbd, 0x28c: 0xbe, 0x28d: 0xbf, 0x28e: 0xc0, 0x28f: 0xc1, - 0x290: 0xc2, 0x291: 0xc3, 0x292: 0xbd, 0x293: 0xbe, 0x294: 0xbf, 0x295: 0xc0, 0x296: 0xc1, 0x297: 0xc2, - 0x298: 0xc3, 0x299: 0xbd, 0x29a: 0xbe, 0x29b: 0xbf, 0x29c: 0xc0, 0x29d: 0xc1, 0x29e: 0xc2, 0x29f: 0xc3, - 0x2a0: 0xbd, 0x2a1: 0xbe, 0x2a2: 0xbf, 0x2a3: 0xc0, 0x2a4: 0xc1, 0x2a5: 0xc2, 0x2a6: 0xc3, 0x2a7: 0xbd, - 0x2a8: 0xbe, 0x2a9: 0xbf, 0x2aa: 0xc0, 0x2ab: 0xc1, 0x2ac: 0xc2, 0x2ad: 0xc3, 0x2ae: 0xbd, 0x2af: 0xbe, - 0x2b0: 0xbf, 0x2b1: 0xc0, 0x2b2: 0xc1, 0x2b3: 0xc2, 0x2b4: 0xc3, 0x2b5: 0xbd, 0x2b6: 0xbe, 0x2b7: 0xbf, - 0x2b8: 0xc0, 0x2b9: 0xc1, 0x2ba: 0xc2, 0x2bb: 0xc3, 0x2bc: 0xbd, 0x2bd: 0xbe, 0x2be: 0xbf, 0x2bf: 0xc0, - // Block 0xb, offset 0x2c0 - 0x2c0: 0xc1, 0x2c1: 0xc2, 0x2c2: 0xc3, 0x2c3: 0xbd, 0x2c4: 0xbe, 0x2c5: 0xbf, 0x2c6: 0xc0, 0x2c7: 0xc1, - 0x2c8: 0xc2, 0x2c9: 0xc3, 0x2ca: 0xbd, 0x2cb: 0xbe, 0x2cc: 0xbf, 0x2cd: 0xc0, 0x2ce: 0xc1, 0x2cf: 0xc2, - 0x2d0: 0xc3, 0x2d1: 0xbd, 0x2d2: 0xbe, 0x2d3: 0xbf, 0x2d4: 0xc0, 0x2d5: 0xc1, 0x2d6: 0xc2, 0x2d7: 0xc3, - 0x2d8: 0xbd, 0x2d9: 0xbe, 0x2da: 0xbf, 0x2db: 0xc0, 0x2dc: 0xc1, 0x2dd: 0xc2, 0x2de: 0xc4, - // Block 0xc, offset 0x300 - 0x324: 0x2f, 0x325: 0x30, 0x326: 0x31, 0x327: 0x32, - 0x328: 0x33, 0x329: 0x34, 0x32a: 0x35, 0x32b: 0x36, 0x32c: 0x37, 0x32d: 0x38, 0x32e: 0x39, 0x32f: 0x3a, - 0x330: 0x3b, 0x331: 0x3c, 0x332: 0x3d, 0x333: 0x3e, 0x334: 0x3f, 0x335: 0x40, 0x336: 0x41, 0x337: 0x42, - 0x338: 0x43, 0x339: 0x44, 0x33a: 0x45, 0x33b: 0x46, 0x33c: 0xc5, 0x33d: 0x47, 0x33e: 0x48, 0x33f: 0x49, - // Block 0xd, offset 0x340 - 0x347: 0xc6, - 0x34b: 0xc7, 0x34d: 0xc8, - 0x368: 0xc9, 0x36b: 0xca, - // Block 0xe, offset 0x380 - 0x381: 0xcb, 0x382: 0xcc, 0x384: 0xcd, 0x385: 0xb7, 0x387: 0xce, - 0x388: 0xcf, 0x38b: 0xd0, 0x38c: 0x6b, 0x38d: 0xd1, - 0x391: 0xd2, 0x392: 0xd3, 0x393: 0xd4, 0x396: 0xd5, 0x397: 0xd6, - 0x398: 0xd7, 0x39a: 0xd8, 0x39c: 0xd9, - 0x3b0: 0xd7, - // Block 0xf, offset 0x3c0 - 0x3eb: 0xda, 0x3ec: 0xdb, - // Block 0x10, offset 0x400 - 0x432: 0xdc, - // Block 0x11, offset 0x440 - 0x445: 0xdd, 0x446: 0xde, 0x447: 0xdf, - 0x449: 0xe0, - 0x450: 0xe1, 0x451: 0xe2, 0x452: 0xe3, 0x453: 0xe4, 0x454: 0xe5, 0x455: 0xe6, 0x456: 0xe7, 0x457: 0xe8, - 0x458: 0xe9, 0x459: 0xea, 0x45a: 0x4a, 0x45b: 0xeb, 0x45c: 0xec, 0x45d: 0xed, 0x45e: 0xee, 0x45f: 0x4b, - // Block 0x12, offset 0x480 - 0x480: 0xef, - 0x4a3: 0xf0, 0x4a5: 0xf1, - 0x4b8: 0x4c, 0x4b9: 0x4d, 0x4ba: 0x4e, - // Block 0x13, offset 0x4c0 - 0x4c4: 0x4f, 0x4c5: 0xf2, 0x4c6: 0xf3, - 0x4c8: 0x50, 0x4c9: 0xf4, - // Block 0x14, offset 0x500 - 0x520: 0x51, 0x521: 0x52, 0x522: 0x53, 0x523: 0x54, 0x524: 0x55, 0x525: 0x56, 0x526: 0x57, 0x527: 0x58, - 0x528: 0x59, - // Block 0x15, offset 0x540 - 0x550: 0x0b, 0x551: 0x0c, 0x556: 0x0d, - 0x55b: 0x0e, 0x55d: 0x0f, 0x55e: 0x10, 0x55f: 0x11, - 0x56f: 0x12, -} - -// nfkcSparseOffset: 155 entries, 310 bytes -var nfkcSparseOffset = []uint16{0x0, 0xe, 0x12, 0x1b, 0x25, 0x35, 0x37, 0x3c, 0x47, 0x56, 0x63, 0x6b, 0x6f, 0x74, 0x76, 0x87, 0x8f, 0x96, 0x99, 0xa0, 0xa4, 0xa8, 0xaa, 0xac, 0xb5, 0xb9, 0xc0, 0xc5, 0xc8, 0xd2, 0xd4, 0xdb, 0xe3, 0xe7, 0xe9, 0xec, 0xf0, 0xf6, 0x107, 0x113, 0x115, 0x11b, 0x11d, 0x11f, 0x121, 0x123, 0x125, 0x127, 0x129, 0x12c, 0x12f, 0x131, 0x134, 0x137, 0x13b, 0x140, 0x149, 0x14b, 0x14e, 0x150, 0x15b, 0x166, 0x176, 0x184, 0x192, 0x1a2, 0x1b0, 0x1b7, 0x1bd, 0x1cc, 0x1d0, 0x1d2, 0x1d6, 0x1d8, 0x1db, 0x1dd, 0x1e0, 0x1e2, 0x1e5, 0x1e7, 0x1e9, 0x1eb, 0x1f7, 0x201, 0x20b, 0x20e, 0x212, 0x214, 0x216, 0x218, 0x21a, 0x21d, 0x21f, 0x221, 0x223, 0x225, 0x22b, 0x22e, 0x232, 0x234, 0x23b, 0x241, 0x247, 0x24f, 0x255, 0x25b, 0x261, 0x265, 0x267, 0x269, 0x26b, 0x26d, 0x273, 0x276, 0x279, 0x281, 0x288, 0x28b, 0x28e, 0x290, 0x298, 0x29b, 0x2a2, 0x2a5, 0x2ab, 0x2ad, 0x2af, 0x2b2, 0x2b4, 0x2b6, 0x2b8, 0x2ba, 0x2c7, 0x2d1, 0x2d3, 0x2d5, 0x2d9, 0x2de, 0x2ea, 0x2ef, 0x2f8, 0x2fe, 0x303, 0x307, 0x30c, 0x310, 0x320, 0x32e, 0x33c, 0x34a, 0x350, 0x352, 0x355, 0x35f, 0x361} - -// nfkcSparseValues: 875 entries, 3500 bytes -var nfkcSparseValues = [875]valueRange{ - // Block 0x0, offset 0x0 - {value: 0x0002, lo: 0x0d}, - {value: 0x0001, lo: 0xa0, hi: 0xa0}, - {value: 0x4278, lo: 0xa8, hi: 0xa8}, - {value: 0x0083, lo: 0xaa, hi: 0xaa}, - {value: 0x4264, lo: 0xaf, hi: 0xaf}, - {value: 0x0025, lo: 0xb2, hi: 0xb3}, - {value: 0x425a, lo: 0xb4, hi: 0xb4}, - {value: 0x01dc, lo: 0xb5, hi: 0xb5}, - {value: 0x4291, lo: 0xb8, hi: 0xb8}, - {value: 0x0023, lo: 0xb9, hi: 0xb9}, - {value: 0x009f, lo: 0xba, hi: 0xba}, - {value: 0x221c, lo: 0xbc, hi: 0xbc}, - {value: 0x2210, lo: 0xbd, hi: 0xbd}, - {value: 0x22b2, lo: 0xbe, hi: 0xbe}, - // Block 0x1, offset 0xe - {value: 0x0091, lo: 0x03}, - {value: 0x46e2, lo: 0xa0, hi: 0xa1}, - {value: 0x4714, lo: 0xaf, hi: 0xb0}, - {value: 0xa000, lo: 0xb7, hi: 0xb7}, - // Block 0x2, offset 0x12 - {value: 0x0003, lo: 0x08}, - {value: 0xa000, lo: 0x92, hi: 0x92}, - {value: 0x0091, lo: 0xb0, hi: 0xb0}, - {value: 0x0119, lo: 0xb1, hi: 0xb1}, - {value: 0x0095, lo: 0xb2, hi: 0xb2}, - {value: 0x00a5, lo: 0xb3, hi: 0xb3}, - {value: 0x0143, lo: 0xb4, hi: 0xb6}, - {value: 0x00af, lo: 0xb7, hi: 0xb7}, - {value: 0x00b3, lo: 0xb8, hi: 0xb8}, - // Block 0x3, offset 0x1b - {value: 0x000a, lo: 0x09}, - {value: 0x426e, lo: 0x98, hi: 0x98}, - {value: 0x4273, lo: 0x99, hi: 0x9a}, - {value: 0x4296, lo: 0x9b, hi: 0x9b}, - {value: 0x425f, lo: 0x9c, hi: 0x9c}, - {value: 0x4282, lo: 0x9d, hi: 0x9d}, - {value: 0x0113, lo: 0xa0, hi: 0xa0}, - {value: 0x0099, lo: 0xa1, hi: 0xa1}, - {value: 0x00a7, lo: 0xa2, hi: 0xa3}, - {value: 0x0167, lo: 0xa4, hi: 0xa4}, - // Block 0x4, offset 0x25 - {value: 0x0000, lo: 0x0f}, - {value: 0xa000, lo: 0x83, hi: 0x83}, - {value: 0xa000, lo: 0x87, hi: 0x87}, - {value: 0xa000, lo: 0x8b, hi: 0x8b}, - {value: 0xa000, lo: 0x8d, hi: 0x8d}, - {value: 0x37a5, lo: 0x90, hi: 0x90}, - {value: 0x37b1, lo: 0x91, hi: 0x91}, - {value: 0x379f, lo: 0x93, hi: 0x93}, - {value: 0xa000, lo: 0x96, hi: 0x96}, - {value: 0x3817, lo: 0x97, hi: 0x97}, - {value: 0x37e1, lo: 0x9c, hi: 0x9c}, - {value: 0x37c9, lo: 0x9d, hi: 0x9d}, - {value: 0x37f3, lo: 0x9e, hi: 0x9e}, - {value: 0xa000, lo: 0xb4, hi: 0xb5}, - {value: 0x381d, lo: 0xb6, hi: 0xb6}, - {value: 0x3823, lo: 0xb7, hi: 0xb7}, - // Block 0x5, offset 0x35 - {value: 0x0000, lo: 0x01}, - {value: 0x8132, lo: 0x83, hi: 0x87}, - // Block 0x6, offset 0x37 - {value: 0x0001, lo: 0x04}, - {value: 0x8113, lo: 0x81, hi: 0x82}, - {value: 0x8132, lo: 0x84, hi: 0x84}, - {value: 0x812d, lo: 0x85, hi: 0x85}, - {value: 0x810d, lo: 0x87, hi: 0x87}, - // Block 0x7, offset 0x3c - {value: 0x0000, lo: 0x0a}, - {value: 0x8132, lo: 0x90, hi: 0x97}, - {value: 0x8119, lo: 0x98, hi: 0x98}, - {value: 0x811a, lo: 0x99, hi: 0x99}, - {value: 0x811b, lo: 0x9a, hi: 0x9a}, - {value: 0x3841, lo: 0xa2, hi: 0xa2}, - {value: 0x3847, lo: 0xa3, hi: 0xa3}, - {value: 0x3853, lo: 0xa4, hi: 0xa4}, - {value: 0x384d, lo: 0xa5, hi: 0xa5}, - {value: 0x3859, lo: 0xa6, hi: 0xa6}, - {value: 0xa000, lo: 0xa7, hi: 0xa7}, - // Block 0x8, offset 0x47 - {value: 0x0000, lo: 0x0e}, - {value: 0x386b, lo: 0x80, hi: 0x80}, - {value: 0xa000, lo: 0x81, hi: 0x81}, - {value: 0x385f, lo: 0x82, hi: 0x82}, - {value: 0xa000, lo: 0x92, hi: 0x92}, - {value: 0x3865, lo: 0x93, hi: 0x93}, - {value: 0xa000, lo: 0x95, hi: 0x95}, - {value: 0x8132, lo: 0x96, hi: 0x9c}, - {value: 0x8132, lo: 0x9f, hi: 0xa2}, - {value: 0x812d, lo: 0xa3, hi: 0xa3}, - {value: 0x8132, lo: 0xa4, hi: 0xa4}, - {value: 0x8132, lo: 0xa7, hi: 0xa8}, - {value: 0x812d, lo: 0xaa, hi: 0xaa}, - {value: 0x8132, lo: 0xab, hi: 0xac}, - {value: 0x812d, lo: 0xad, hi: 0xad}, - // Block 0x9, offset 0x56 - {value: 0x0000, lo: 0x0c}, - {value: 0x811f, lo: 0x91, hi: 0x91}, - {value: 0x8132, lo: 0xb0, hi: 0xb0}, - {value: 0x812d, lo: 0xb1, hi: 0xb1}, - {value: 0x8132, lo: 0xb2, hi: 0xb3}, - {value: 0x812d, lo: 0xb4, hi: 0xb4}, - {value: 0x8132, lo: 0xb5, hi: 0xb6}, - {value: 0x812d, lo: 0xb7, hi: 0xb9}, - {value: 0x8132, lo: 0xba, hi: 0xba}, - {value: 0x812d, lo: 0xbb, hi: 0xbc}, - {value: 0x8132, lo: 0xbd, hi: 0xbd}, - {value: 0x812d, lo: 0xbe, hi: 0xbe}, - {value: 0x8132, lo: 0xbf, hi: 0xbf}, - // Block 0xa, offset 0x63 - {value: 0x0005, lo: 0x07}, - {value: 0x8132, lo: 0x80, hi: 0x80}, - {value: 0x8132, lo: 0x81, hi: 0x81}, - {value: 0x812d, lo: 0x82, hi: 0x83}, - {value: 0x812d, lo: 0x84, hi: 0x85}, - {value: 0x812d, lo: 0x86, hi: 0x87}, - {value: 0x812d, lo: 0x88, hi: 0x89}, - {value: 0x8132, lo: 0x8a, hi: 0x8a}, - // Block 0xb, offset 0x6b - {value: 0x0000, lo: 0x03}, - {value: 0x8132, lo: 0xab, hi: 0xb1}, - {value: 0x812d, lo: 0xb2, hi: 0xb2}, - {value: 0x8132, lo: 0xb3, hi: 0xb3}, - // Block 0xc, offset 0x6f - {value: 0x0000, lo: 0x04}, - {value: 0x8132, lo: 0x96, hi: 0x99}, - {value: 0x8132, lo: 0x9b, hi: 0xa3}, - {value: 0x8132, lo: 0xa5, hi: 0xa7}, - {value: 0x8132, lo: 0xa9, hi: 0xad}, - // Block 0xd, offset 0x74 - {value: 0x0000, lo: 0x01}, - {value: 0x812d, lo: 0x99, hi: 0x9b}, - // Block 0xe, offset 0x76 - {value: 0x0000, lo: 0x10}, - {value: 0x8132, lo: 0x94, hi: 0xa1}, - {value: 0x812d, lo: 0xa3, hi: 0xa3}, - {value: 0x8132, lo: 0xa4, hi: 0xa5}, - {value: 0x812d, lo: 0xa6, hi: 0xa6}, - {value: 0x8132, lo: 0xa7, hi: 0xa8}, - {value: 0x812d, lo: 0xa9, hi: 0xa9}, - {value: 0x8132, lo: 0xaa, hi: 0xac}, - {value: 0x812d, lo: 0xad, hi: 0xaf}, - {value: 0x8116, lo: 0xb0, hi: 0xb0}, - {value: 0x8117, lo: 0xb1, hi: 0xb1}, - {value: 0x8118, lo: 0xb2, hi: 0xb2}, - {value: 0x8132, lo: 0xb3, hi: 0xb5}, - {value: 0x812d, lo: 0xb6, hi: 0xb6}, - {value: 0x8132, lo: 0xb7, hi: 0xb8}, - {value: 0x812d, lo: 0xb9, hi: 0xba}, - {value: 0x8132, lo: 0xbb, hi: 0xbf}, - // Block 0xf, offset 0x87 - {value: 0x0000, lo: 0x07}, - {value: 0xa000, lo: 0xa8, hi: 0xa8}, - {value: 0x3ed8, lo: 0xa9, hi: 0xa9}, - {value: 0xa000, lo: 0xb0, hi: 0xb0}, - {value: 0x3ee0, lo: 0xb1, hi: 0xb1}, - {value: 0xa000, lo: 0xb3, hi: 0xb3}, - {value: 0x3ee8, lo: 0xb4, hi: 0xb4}, - {value: 0x9902, lo: 0xbc, hi: 0xbc}, - // Block 0x10, offset 0x8f - {value: 0x0008, lo: 0x06}, - {value: 0x8104, lo: 0x8d, hi: 0x8d}, - {value: 0x8132, lo: 0x91, hi: 0x91}, - {value: 0x812d, lo: 0x92, hi: 0x92}, - {value: 0x8132, lo: 0x93, hi: 0x93}, - {value: 0x8132, lo: 0x94, hi: 0x94}, - {value: 0x451c, lo: 0x98, hi: 0x9f}, - // Block 0x11, offset 0x96 - {value: 0x0000, lo: 0x02}, - {value: 0x8102, lo: 0xbc, hi: 0xbc}, - {value: 0x9900, lo: 0xbe, hi: 0xbe}, - // Block 0x12, offset 0x99 - {value: 0x0008, lo: 0x06}, - {value: 0xa000, lo: 0x87, hi: 0x87}, - {value: 0x2c9e, lo: 0x8b, hi: 0x8c}, - {value: 0x8104, lo: 0x8d, hi: 0x8d}, - {value: 0x9900, lo: 0x97, hi: 0x97}, - {value: 0x455c, lo: 0x9c, hi: 0x9d}, - {value: 0x456c, lo: 0x9f, hi: 0x9f}, - // Block 0x13, offset 0xa0 - {value: 0x0000, lo: 0x03}, - {value: 0x4594, lo: 0xb3, hi: 0xb3}, - {value: 0x459c, lo: 0xb6, hi: 0xb6}, - {value: 0x8102, lo: 0xbc, hi: 0xbc}, - // Block 0x14, offset 0xa4 - {value: 0x0008, lo: 0x03}, - {value: 0x8104, lo: 0x8d, hi: 0x8d}, - {value: 0x4574, lo: 0x99, hi: 0x9b}, - {value: 0x458c, lo: 0x9e, hi: 0x9e}, - // Block 0x15, offset 0xa8 - {value: 0x0000, lo: 0x01}, - {value: 0x8102, lo: 0xbc, hi: 0xbc}, - // Block 0x16, offset 0xaa - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0x8d, hi: 0x8d}, - // Block 0x17, offset 0xac - {value: 0x0000, lo: 0x08}, - {value: 0xa000, lo: 0x87, hi: 0x87}, - {value: 0x2cb6, lo: 0x88, hi: 0x88}, - {value: 0x2cae, lo: 0x8b, hi: 0x8b}, - {value: 0x2cbe, lo: 0x8c, hi: 0x8c}, - {value: 0x8104, lo: 0x8d, hi: 0x8d}, - {value: 0x9900, lo: 0x96, hi: 0x97}, - {value: 0x45a4, lo: 0x9c, hi: 0x9c}, - {value: 0x45ac, lo: 0x9d, hi: 0x9d}, - // Block 0x18, offset 0xb5 - {value: 0x0000, lo: 0x03}, - {value: 0xa000, lo: 0x92, hi: 0x92}, - {value: 0x2cc6, lo: 0x94, hi: 0x94}, - {value: 0x9900, lo: 0xbe, hi: 0xbe}, - // Block 0x19, offset 0xb9 - {value: 0x0000, lo: 0x06}, - {value: 0xa000, lo: 0x86, hi: 0x87}, - {value: 0x2cce, lo: 0x8a, hi: 0x8a}, - {value: 0x2cde, lo: 0x8b, hi: 0x8b}, - {value: 0x2cd6, lo: 0x8c, hi: 0x8c}, - {value: 0x8104, lo: 0x8d, hi: 0x8d}, - {value: 0x9900, lo: 0x97, hi: 0x97}, - // Block 0x1a, offset 0xc0 - {value: 0x1801, lo: 0x04}, - {value: 0xa000, lo: 0x86, hi: 0x86}, - {value: 0x3ef0, lo: 0x88, hi: 0x88}, - {value: 0x8104, lo: 0x8d, hi: 0x8d}, - {value: 0x8120, lo: 0x95, hi: 0x96}, - // Block 0x1b, offset 0xc5 - {value: 0x0000, lo: 0x02}, - {value: 0x8102, lo: 0xbc, hi: 0xbc}, - {value: 0xa000, lo: 0xbf, hi: 0xbf}, - // Block 0x1c, offset 0xc8 - {value: 0x0000, lo: 0x09}, - {value: 0x2ce6, lo: 0x80, hi: 0x80}, - {value: 0x9900, lo: 0x82, hi: 0x82}, - {value: 0xa000, lo: 0x86, hi: 0x86}, - {value: 0x2cee, lo: 0x87, hi: 0x87}, - {value: 0x2cf6, lo: 0x88, hi: 0x88}, - {value: 0x2f50, lo: 0x8a, hi: 0x8a}, - {value: 0x2dd8, lo: 0x8b, hi: 0x8b}, - {value: 0x8104, lo: 0x8d, hi: 0x8d}, - {value: 0x9900, lo: 0x95, hi: 0x96}, - // Block 0x1d, offset 0xd2 - {value: 0x0000, lo: 0x01}, - {value: 0x9900, lo: 0xbe, hi: 0xbe}, - // Block 0x1e, offset 0xd4 - {value: 0x0000, lo: 0x06}, - {value: 0xa000, lo: 0x86, hi: 0x87}, - {value: 0x2cfe, lo: 0x8a, hi: 0x8a}, - {value: 0x2d0e, lo: 0x8b, hi: 0x8b}, - {value: 0x2d06, lo: 0x8c, hi: 0x8c}, - {value: 0x8104, lo: 0x8d, hi: 0x8d}, - {value: 0x9900, lo: 0x97, hi: 0x97}, - // Block 0x1f, offset 0xdb - {value: 0x6bea, lo: 0x07}, - {value: 0x9904, lo: 0x8a, hi: 0x8a}, - {value: 0x9900, lo: 0x8f, hi: 0x8f}, - {value: 0xa000, lo: 0x99, hi: 0x99}, - {value: 0x3ef8, lo: 0x9a, hi: 0x9a}, - {value: 0x2f58, lo: 0x9c, hi: 0x9c}, - {value: 0x2de3, lo: 0x9d, hi: 0x9d}, - {value: 0x2d16, lo: 0x9e, hi: 0x9f}, - // Block 0x20, offset 0xe3 - {value: 0x0000, lo: 0x03}, - {value: 0x2621, lo: 0xb3, hi: 0xb3}, - {value: 0x8122, lo: 0xb8, hi: 0xb9}, - {value: 0x8104, lo: 0xba, hi: 0xba}, - // Block 0x21, offset 0xe7 - {value: 0x0000, lo: 0x01}, - {value: 0x8123, lo: 0x88, hi: 0x8b}, - // Block 0x22, offset 0xe9 - {value: 0x0000, lo: 0x02}, - {value: 0x2636, lo: 0xb3, hi: 0xb3}, - {value: 0x8124, lo: 0xb8, hi: 0xb9}, - // Block 0x23, offset 0xec - {value: 0x0000, lo: 0x03}, - {value: 0x8125, lo: 0x88, hi: 0x8b}, - {value: 0x2628, lo: 0x9c, hi: 0x9c}, - {value: 0x262f, lo: 0x9d, hi: 0x9d}, - // Block 0x24, offset 0xf0 - {value: 0x0000, lo: 0x05}, - {value: 0x030b, lo: 0x8c, hi: 0x8c}, - {value: 0x812d, lo: 0x98, hi: 0x99}, - {value: 0x812d, lo: 0xb5, hi: 0xb5}, - {value: 0x812d, lo: 0xb7, hi: 0xb7}, - {value: 0x812b, lo: 0xb9, hi: 0xb9}, - // Block 0x25, offset 0xf6 - {value: 0x0000, lo: 0x10}, - {value: 0x2644, lo: 0x83, hi: 0x83}, - {value: 0x264b, lo: 0x8d, hi: 0x8d}, - {value: 0x2652, lo: 0x92, hi: 0x92}, - {value: 0x2659, lo: 0x97, hi: 0x97}, - {value: 0x2660, lo: 0x9c, hi: 0x9c}, - {value: 0x263d, lo: 0xa9, hi: 0xa9}, - {value: 0x8126, lo: 0xb1, hi: 0xb1}, - {value: 0x8127, lo: 0xb2, hi: 0xb2}, - {value: 0x4a84, lo: 0xb3, hi: 0xb3}, - {value: 0x8128, lo: 0xb4, hi: 0xb4}, - {value: 0x4a8d, lo: 0xb5, hi: 0xb5}, - {value: 0x45b4, lo: 0xb6, hi: 0xb6}, - {value: 0x45f4, lo: 0xb7, hi: 0xb7}, - {value: 0x45bc, lo: 0xb8, hi: 0xb8}, - {value: 0x45ff, lo: 0xb9, hi: 0xb9}, - {value: 0x8127, lo: 0xba, hi: 0xbd}, - // Block 0x26, offset 0x107 - {value: 0x0000, lo: 0x0b}, - {value: 0x8127, lo: 0x80, hi: 0x80}, - {value: 0x4a96, lo: 0x81, hi: 0x81}, - {value: 0x8132, lo: 0x82, hi: 0x83}, - {value: 0x8104, lo: 0x84, hi: 0x84}, - {value: 0x8132, lo: 0x86, hi: 0x87}, - {value: 0x266e, lo: 0x93, hi: 0x93}, - {value: 0x2675, lo: 0x9d, hi: 0x9d}, - {value: 0x267c, lo: 0xa2, hi: 0xa2}, - {value: 0x2683, lo: 0xa7, hi: 0xa7}, - {value: 0x268a, lo: 0xac, hi: 0xac}, - {value: 0x2667, lo: 0xb9, hi: 0xb9}, - // Block 0x27, offset 0x113 - {value: 0x0000, lo: 0x01}, - {value: 0x812d, lo: 0x86, hi: 0x86}, - // Block 0x28, offset 0x115 - {value: 0x0000, lo: 0x05}, - {value: 0xa000, lo: 0xa5, hi: 0xa5}, - {value: 0x2d1e, lo: 0xa6, hi: 0xa6}, - {value: 0x9900, lo: 0xae, hi: 0xae}, - {value: 0x8102, lo: 0xb7, hi: 0xb7}, - {value: 0x8104, lo: 0xb9, hi: 0xba}, - // Block 0x29, offset 0x11b - {value: 0x0000, lo: 0x01}, - {value: 0x812d, lo: 0x8d, hi: 0x8d}, - // Block 0x2a, offset 0x11d - {value: 0x0000, lo: 0x01}, - {value: 0x030f, lo: 0xbc, hi: 0xbc}, - // Block 0x2b, offset 0x11f - {value: 0x0000, lo: 0x01}, - {value: 0xa000, lo: 0x80, hi: 0x92}, - // Block 0x2c, offset 0x121 - {value: 0x0000, lo: 0x01}, - {value: 0xb900, lo: 0xa1, hi: 0xb5}, - // Block 0x2d, offset 0x123 - {value: 0x0000, lo: 0x01}, - {value: 0x9900, lo: 0xa8, hi: 0xbf}, - // Block 0x2e, offset 0x125 - {value: 0x0000, lo: 0x01}, - {value: 0x9900, lo: 0x80, hi: 0x82}, - // Block 0x2f, offset 0x127 - {value: 0x0000, lo: 0x01}, - {value: 0x8132, lo: 0x9d, hi: 0x9f}, - // Block 0x30, offset 0x129 - {value: 0x0000, lo: 0x02}, - {value: 0x8104, lo: 0x94, hi: 0x94}, - {value: 0x8104, lo: 0xb4, hi: 0xb4}, - // Block 0x31, offset 0x12c - {value: 0x0000, lo: 0x02}, - {value: 0x8104, lo: 0x92, hi: 0x92}, - {value: 0x8132, lo: 0x9d, hi: 0x9d}, - // Block 0x32, offset 0x12f - {value: 0x0000, lo: 0x01}, - {value: 0x8131, lo: 0xa9, hi: 0xa9}, - // Block 0x33, offset 0x131 - {value: 0x0004, lo: 0x02}, - {value: 0x812e, lo: 0xb9, hi: 0xba}, - {value: 0x812d, lo: 0xbb, hi: 0xbb}, - // Block 0x34, offset 0x134 - {value: 0x0000, lo: 0x02}, - {value: 0x8132, lo: 0x97, hi: 0x97}, - {value: 0x812d, lo: 0x98, hi: 0x98}, - // Block 0x35, offset 0x137 - {value: 0x0000, lo: 0x03}, - {value: 0x8104, lo: 0xa0, hi: 0xa0}, - {value: 0x8132, lo: 0xb5, hi: 0xbc}, - {value: 0x812d, lo: 0xbf, hi: 0xbf}, - // Block 0x36, offset 0x13b - {value: 0x0000, lo: 0x04}, - {value: 0x8132, lo: 0xb0, hi: 0xb4}, - {value: 0x812d, lo: 0xb5, hi: 0xba}, - {value: 0x8132, lo: 0xbb, hi: 0xbc}, - {value: 0x812d, lo: 0xbd, hi: 0xbd}, - // Block 0x37, offset 0x140 - {value: 0x0000, lo: 0x08}, - {value: 0x2d66, lo: 0x80, hi: 0x80}, - {value: 0x2d6e, lo: 0x81, hi: 0x81}, - {value: 0xa000, lo: 0x82, hi: 0x82}, - {value: 0x2d76, lo: 0x83, hi: 0x83}, - {value: 0x8104, lo: 0x84, hi: 0x84}, - {value: 0x8132, lo: 0xab, hi: 0xab}, - {value: 0x812d, lo: 0xac, hi: 0xac}, - {value: 0x8132, lo: 0xad, hi: 0xb3}, - // Block 0x38, offset 0x149 - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0xaa, hi: 0xab}, - // Block 0x39, offset 0x14b - {value: 0x0000, lo: 0x02}, - {value: 0x8102, lo: 0xa6, hi: 0xa6}, - {value: 0x8104, lo: 0xb2, hi: 0xb3}, - // Block 0x3a, offset 0x14e - {value: 0x0000, lo: 0x01}, - {value: 0x8102, lo: 0xb7, hi: 0xb7}, - // Block 0x3b, offset 0x150 - {value: 0x0000, lo: 0x0a}, - {value: 0x8132, lo: 0x90, hi: 0x92}, - {value: 0x8101, lo: 0x94, hi: 0x94}, - {value: 0x812d, lo: 0x95, hi: 0x99}, - {value: 0x8132, lo: 0x9a, hi: 0x9b}, - {value: 0x812d, lo: 0x9c, hi: 0x9f}, - {value: 0x8132, lo: 0xa0, hi: 0xa0}, - {value: 0x8101, lo: 0xa2, hi: 0xa8}, - {value: 0x812d, lo: 0xad, hi: 0xad}, - {value: 0x8132, lo: 0xb4, hi: 0xb4}, - {value: 0x8132, lo: 0xb8, hi: 0xb9}, - // Block 0x3c, offset 0x15b - {value: 0x0002, lo: 0x0a}, - {value: 0x0043, lo: 0xac, hi: 0xac}, - {value: 0x00d1, lo: 0xad, hi: 0xad}, - {value: 0x0045, lo: 0xae, hi: 0xae}, - {value: 0x0049, lo: 0xb0, hi: 0xb1}, - {value: 0x00e6, lo: 0xb2, hi: 0xb2}, - {value: 0x004f, lo: 0xb3, hi: 0xba}, - {value: 0x005f, lo: 0xbc, hi: 0xbc}, - {value: 0x00ef, lo: 0xbd, hi: 0xbd}, - {value: 0x0061, lo: 0xbe, hi: 0xbe}, - {value: 0x0065, lo: 0xbf, hi: 0xbf}, - // Block 0x3d, offset 0x166 - {value: 0x0000, lo: 0x0f}, - {value: 0x8132, lo: 0x80, hi: 0x81}, - {value: 0x812d, lo: 0x82, hi: 0x82}, - {value: 0x8132, lo: 0x83, hi: 0x89}, - {value: 0x812d, lo: 0x8a, hi: 0x8a}, - {value: 0x8132, lo: 0x8b, hi: 0x8c}, - {value: 0x8135, lo: 0x8d, hi: 0x8d}, - {value: 0x812a, lo: 0x8e, hi: 0x8e}, - {value: 0x812d, lo: 0x8f, hi: 0x8f}, - {value: 0x8129, lo: 0x90, hi: 0x90}, - {value: 0x8132, lo: 0x91, hi: 0xb5}, - {value: 0x8132, lo: 0xbb, hi: 0xbb}, - {value: 0x8134, lo: 0xbc, hi: 0xbc}, - {value: 0x812d, lo: 0xbd, hi: 0xbd}, - {value: 0x8132, lo: 0xbe, hi: 0xbe}, - {value: 0x812d, lo: 0xbf, hi: 0xbf}, - // Block 0x3e, offset 0x176 - {value: 0x0000, lo: 0x0d}, - {value: 0x0001, lo: 0x80, hi: 0x8a}, - {value: 0x043b, lo: 0x91, hi: 0x91}, - {value: 0x429b, lo: 0x97, hi: 0x97}, - {value: 0x001d, lo: 0xa4, hi: 0xa4}, - {value: 0x1873, lo: 0xa5, hi: 0xa5}, - {value: 0x1b5c, lo: 0xa6, hi: 0xa6}, - {value: 0x0001, lo: 0xaf, hi: 0xaf}, - {value: 0x2691, lo: 0xb3, hi: 0xb3}, - {value: 0x27fe, lo: 0xb4, hi: 0xb4}, - {value: 0x2698, lo: 0xb6, hi: 0xb6}, - {value: 0x2808, lo: 0xb7, hi: 0xb7}, - {value: 0x186d, lo: 0xbc, hi: 0xbc}, - {value: 0x4269, lo: 0xbe, hi: 0xbe}, - // Block 0x3f, offset 0x184 - {value: 0x0002, lo: 0x0d}, - {value: 0x1933, lo: 0x87, hi: 0x87}, - {value: 0x1930, lo: 0x88, hi: 0x88}, - {value: 0x1870, lo: 0x89, hi: 0x89}, - {value: 0x298e, lo: 0x97, hi: 0x97}, - {value: 0x0001, lo: 0x9f, hi: 0x9f}, - {value: 0x0021, lo: 0xb0, hi: 0xb0}, - {value: 0x0093, lo: 0xb1, hi: 0xb1}, - {value: 0x0029, lo: 0xb4, hi: 0xb9}, - {value: 0x0017, lo: 0xba, hi: 0xba}, - {value: 0x0467, lo: 0xbb, hi: 0xbb}, - {value: 0x003b, lo: 0xbc, hi: 0xbc}, - {value: 0x0011, lo: 0xbd, hi: 0xbe}, - {value: 0x009d, lo: 0xbf, hi: 0xbf}, - // Block 0x40, offset 0x192 - {value: 0x0002, lo: 0x0f}, - {value: 0x0021, lo: 0x80, hi: 0x89}, - {value: 0x0017, lo: 0x8a, hi: 0x8a}, - {value: 0x0467, lo: 0x8b, hi: 0x8b}, - {value: 0x003b, lo: 0x8c, hi: 0x8c}, - {value: 0x0011, lo: 0x8d, hi: 0x8e}, - {value: 0x0083, lo: 0x90, hi: 0x90}, - {value: 0x008b, lo: 0x91, hi: 0x91}, - {value: 0x009f, lo: 0x92, hi: 0x92}, - {value: 0x00b1, lo: 0x93, hi: 0x93}, - {value: 0x0104, lo: 0x94, hi: 0x94}, - {value: 0x0091, lo: 0x95, hi: 0x95}, - {value: 0x0097, lo: 0x96, hi: 0x99}, - {value: 0x00a1, lo: 0x9a, hi: 0x9a}, - {value: 0x00a7, lo: 0x9b, hi: 0x9c}, - {value: 0x1999, lo: 0xa8, hi: 0xa8}, - // Block 0x41, offset 0x1a2 - {value: 0x0000, lo: 0x0d}, - {value: 0x8132, lo: 0x90, hi: 0x91}, - {value: 0x8101, lo: 0x92, hi: 0x93}, - {value: 0x8132, lo: 0x94, hi: 0x97}, - {value: 0x8101, lo: 0x98, hi: 0x9a}, - {value: 0x8132, lo: 0x9b, hi: 0x9c}, - {value: 0x8132, lo: 0xa1, hi: 0xa1}, - {value: 0x8101, lo: 0xa5, hi: 0xa6}, - {value: 0x8132, lo: 0xa7, hi: 0xa7}, - {value: 0x812d, lo: 0xa8, hi: 0xa8}, - {value: 0x8132, lo: 0xa9, hi: 0xa9}, - {value: 0x8101, lo: 0xaa, hi: 0xab}, - {value: 0x812d, lo: 0xac, hi: 0xaf}, - {value: 0x8132, lo: 0xb0, hi: 0xb0}, - // Block 0x42, offset 0x1b0 - {value: 0x0007, lo: 0x06}, - {value: 0x2180, lo: 0x89, hi: 0x89}, - {value: 0xa000, lo: 0x90, hi: 0x90}, - {value: 0xa000, lo: 0x92, hi: 0x92}, - {value: 0xa000, lo: 0x94, hi: 0x94}, - {value: 0x3bb9, lo: 0x9a, hi: 0x9b}, - {value: 0x3bc7, lo: 0xae, hi: 0xae}, - // Block 0x43, offset 0x1b7 - {value: 0x000e, lo: 0x05}, - {value: 0x3bce, lo: 0x8d, hi: 0x8e}, - {value: 0x3bd5, lo: 0x8f, hi: 0x8f}, - {value: 0xa000, lo: 0x90, hi: 0x90}, - {value: 0xa000, lo: 0x92, hi: 0x92}, - {value: 0xa000, lo: 0x94, hi: 0x94}, - // Block 0x44, offset 0x1bd - {value: 0x0173, lo: 0x0e}, - {value: 0xa000, lo: 0x83, hi: 0x83}, - {value: 0x3be3, lo: 0x84, hi: 0x84}, - {value: 0xa000, lo: 0x88, hi: 0x88}, - {value: 0x3bea, lo: 0x89, hi: 0x89}, - {value: 0xa000, lo: 0x8b, hi: 0x8b}, - {value: 0x3bf1, lo: 0x8c, hi: 0x8c}, - {value: 0xa000, lo: 0xa3, hi: 0xa3}, - {value: 0x3bf8, lo: 0xa4, hi: 0xa4}, - {value: 0xa000, lo: 0xa5, hi: 0xa5}, - {value: 0x3bff, lo: 0xa6, hi: 0xa6}, - {value: 0x269f, lo: 0xac, hi: 0xad}, - {value: 0x26a6, lo: 0xaf, hi: 0xaf}, - {value: 0x281c, lo: 0xb0, hi: 0xb0}, - {value: 0xa000, lo: 0xbc, hi: 0xbc}, - // Block 0x45, offset 0x1cc - {value: 0x0007, lo: 0x03}, - {value: 0x3c68, lo: 0xa0, hi: 0xa1}, - {value: 0x3c92, lo: 0xa2, hi: 0xa3}, - {value: 0x3cbc, lo: 0xaa, hi: 0xad}, - // Block 0x46, offset 0x1d0 - {value: 0x0004, lo: 0x01}, - {value: 0x048b, lo: 0xa9, hi: 0xaa}, - // Block 0x47, offset 0x1d2 - {value: 0x0002, lo: 0x03}, - {value: 0x0057, lo: 0x80, hi: 0x8f}, - {value: 0x0083, lo: 0x90, hi: 0xa9}, - {value: 0x0021, lo: 0xaa, hi: 0xaa}, - // Block 0x48, offset 0x1d6 - {value: 0x0000, lo: 0x01}, - {value: 0x299b, lo: 0x8c, hi: 0x8c}, - // Block 0x49, offset 0x1d8 - {value: 0x0263, lo: 0x02}, - {value: 0x1b8c, lo: 0xb4, hi: 0xb4}, - {value: 0x192d, lo: 0xb5, hi: 0xb6}, - // Block 0x4a, offset 0x1db - {value: 0x0000, lo: 0x01}, - {value: 0x44dd, lo: 0x9c, hi: 0x9c}, - // Block 0x4b, offset 0x1dd - {value: 0x0000, lo: 0x02}, - {value: 0x0095, lo: 0xbc, hi: 0xbc}, - {value: 0x006d, lo: 0xbd, hi: 0xbd}, - // Block 0x4c, offset 0x1e0 - {value: 0x0000, lo: 0x01}, - {value: 0x8132, lo: 0xaf, hi: 0xb1}, - // Block 0x4d, offset 0x1e2 - {value: 0x0000, lo: 0x02}, - {value: 0x047f, lo: 0xaf, hi: 0xaf}, - {value: 0x8104, lo: 0xbf, hi: 0xbf}, - // Block 0x4e, offset 0x1e5 - {value: 0x0000, lo: 0x01}, - {value: 0x8132, lo: 0xa0, hi: 0xbf}, - // Block 0x4f, offset 0x1e7 - {value: 0x0000, lo: 0x01}, - {value: 0x0dc3, lo: 0x9f, hi: 0x9f}, - // Block 0x50, offset 0x1e9 - {value: 0x0000, lo: 0x01}, - {value: 0x162f, lo: 0xb3, hi: 0xb3}, - // Block 0x51, offset 0x1eb - {value: 0x0004, lo: 0x0b}, - {value: 0x1597, lo: 0x80, hi: 0x82}, - {value: 0x15af, lo: 0x83, hi: 0x83}, - {value: 0x15c7, lo: 0x84, hi: 0x85}, - {value: 0x15d7, lo: 0x86, hi: 0x89}, - {value: 0x15eb, lo: 0x8a, hi: 0x8c}, - {value: 0x15ff, lo: 0x8d, hi: 0x8d}, - {value: 0x1607, lo: 0x8e, hi: 0x8e}, - {value: 0x160f, lo: 0x8f, hi: 0x90}, - {value: 0x161b, lo: 0x91, hi: 0x93}, - {value: 0x162b, lo: 0x94, hi: 0x94}, - {value: 0x1633, lo: 0x95, hi: 0x95}, - // Block 0x52, offset 0x1f7 - {value: 0x0004, lo: 0x09}, - {value: 0x0001, lo: 0x80, hi: 0x80}, - {value: 0x812c, lo: 0xaa, hi: 0xaa}, - {value: 0x8131, lo: 0xab, hi: 0xab}, - {value: 0x8133, lo: 0xac, hi: 0xac}, - {value: 0x812e, lo: 0xad, hi: 0xad}, - {value: 0x812f, lo: 0xae, hi: 0xae}, - {value: 0x812f, lo: 0xaf, hi: 0xaf}, - {value: 0x04b3, lo: 0xb6, hi: 0xb6}, - {value: 0x0887, lo: 0xb8, hi: 0xba}, - // Block 0x53, offset 0x201 - {value: 0x0006, lo: 0x09}, - {value: 0x0313, lo: 0xb1, hi: 0xb1}, - {value: 0x0317, lo: 0xb2, hi: 0xb2}, - {value: 0x4a3b, lo: 0xb3, hi: 0xb3}, - {value: 0x031b, lo: 0xb4, hi: 0xb4}, - {value: 0x4a41, lo: 0xb5, hi: 0xb6}, - {value: 0x031f, lo: 0xb7, hi: 0xb7}, - {value: 0x0323, lo: 0xb8, hi: 0xb8}, - {value: 0x0327, lo: 0xb9, hi: 0xb9}, - {value: 0x4a4d, lo: 0xba, hi: 0xbf}, - // Block 0x54, offset 0x20b - {value: 0x0000, lo: 0x02}, - {value: 0x8132, lo: 0xaf, hi: 0xaf}, - {value: 0x8132, lo: 0xb4, hi: 0xbd}, - // Block 0x55, offset 0x20e - {value: 0x0000, lo: 0x03}, - {value: 0x020f, lo: 0x9c, hi: 0x9c}, - {value: 0x0212, lo: 0x9d, hi: 0x9d}, - {value: 0x8132, lo: 0x9e, hi: 0x9f}, - // Block 0x56, offset 0x212 - {value: 0x0000, lo: 0x01}, - {value: 0x8132, lo: 0xb0, hi: 0xb1}, - // Block 0x57, offset 0x214 - {value: 0x0000, lo: 0x01}, - {value: 0x163b, lo: 0xb0, hi: 0xb0}, - // Block 0x58, offset 0x216 - {value: 0x000c, lo: 0x01}, - {value: 0x00d7, lo: 0xb8, hi: 0xb9}, - // Block 0x59, offset 0x218 - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0x86, hi: 0x86}, - // Block 0x5a, offset 0x21a - {value: 0x0000, lo: 0x02}, - {value: 0x8104, lo: 0x84, hi: 0x84}, - {value: 0x8132, lo: 0xa0, hi: 0xb1}, - // Block 0x5b, offset 0x21d - {value: 0x0000, lo: 0x01}, - {value: 0x812d, lo: 0xab, hi: 0xad}, - // Block 0x5c, offset 0x21f - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0x93, hi: 0x93}, - // Block 0x5d, offset 0x221 - {value: 0x0000, lo: 0x01}, - {value: 0x8102, lo: 0xb3, hi: 0xb3}, - // Block 0x5e, offset 0x223 - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0x80, hi: 0x80}, - // Block 0x5f, offset 0x225 - {value: 0x0000, lo: 0x05}, - {value: 0x8132, lo: 0xb0, hi: 0xb0}, - {value: 0x8132, lo: 0xb2, hi: 0xb3}, - {value: 0x812d, lo: 0xb4, hi: 0xb4}, - {value: 0x8132, lo: 0xb7, hi: 0xb8}, - {value: 0x8132, lo: 0xbe, hi: 0xbf}, - // Block 0x60, offset 0x22b - {value: 0x0000, lo: 0x02}, - {value: 0x8132, lo: 0x81, hi: 0x81}, - {value: 0x8104, lo: 0xb6, hi: 0xb6}, - // Block 0x61, offset 0x22e - {value: 0x0008, lo: 0x03}, - {value: 0x1637, lo: 0x9c, hi: 0x9d}, - {value: 0x0125, lo: 0x9e, hi: 0x9e}, - {value: 0x1643, lo: 0x9f, hi: 0x9f}, - // Block 0x62, offset 0x232 - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0xad, hi: 0xad}, - // Block 0x63, offset 0x234 - {value: 0x0000, lo: 0x06}, - {value: 0xe500, lo: 0x80, hi: 0x80}, - {value: 0xc600, lo: 0x81, hi: 0x9b}, - {value: 0xe500, lo: 0x9c, hi: 0x9c}, - {value: 0xc600, lo: 0x9d, hi: 0xb7}, - {value: 0xe500, lo: 0xb8, hi: 0xb8}, - {value: 0xc600, lo: 0xb9, hi: 0xbf}, - // Block 0x64, offset 0x23b - {value: 0x0000, lo: 0x05}, - {value: 0xc600, lo: 0x80, hi: 0x93}, - {value: 0xe500, lo: 0x94, hi: 0x94}, - {value: 0xc600, lo: 0x95, hi: 0xaf}, - {value: 0xe500, lo: 0xb0, hi: 0xb0}, - {value: 0xc600, lo: 0xb1, hi: 0xbf}, - // Block 0x65, offset 0x241 - {value: 0x0000, lo: 0x05}, - {value: 0xc600, lo: 0x80, hi: 0x8b}, - {value: 0xe500, lo: 0x8c, hi: 0x8c}, - {value: 0xc600, lo: 0x8d, hi: 0xa7}, - {value: 0xe500, lo: 0xa8, hi: 0xa8}, - {value: 0xc600, lo: 0xa9, hi: 0xbf}, - // Block 0x66, offset 0x247 - {value: 0x0000, lo: 0x07}, - {value: 0xc600, lo: 0x80, hi: 0x83}, - {value: 0xe500, lo: 0x84, hi: 0x84}, - {value: 0xc600, lo: 0x85, hi: 0x9f}, - {value: 0xe500, lo: 0xa0, hi: 0xa0}, - {value: 0xc600, lo: 0xa1, hi: 0xbb}, - {value: 0xe500, lo: 0xbc, hi: 0xbc}, - {value: 0xc600, lo: 0xbd, hi: 0xbf}, - // Block 0x67, offset 0x24f - {value: 0x0000, lo: 0x05}, - {value: 0xc600, lo: 0x80, hi: 0x97}, - {value: 0xe500, lo: 0x98, hi: 0x98}, - {value: 0xc600, lo: 0x99, hi: 0xb3}, - {value: 0xe500, lo: 0xb4, hi: 0xb4}, - {value: 0xc600, lo: 0xb5, hi: 0xbf}, - // Block 0x68, offset 0x255 - {value: 0x0000, lo: 0x05}, - {value: 0xc600, lo: 0x80, hi: 0x8f}, - {value: 0xe500, lo: 0x90, hi: 0x90}, - {value: 0xc600, lo: 0x91, hi: 0xab}, - {value: 0xe500, lo: 0xac, hi: 0xac}, - {value: 0xc600, lo: 0xad, hi: 0xbf}, - // Block 0x69, offset 0x25b - {value: 0x0000, lo: 0x05}, - {value: 0xc600, lo: 0x80, hi: 0x87}, - {value: 0xe500, lo: 0x88, hi: 0x88}, - {value: 0xc600, lo: 0x89, hi: 0xa3}, - {value: 0xe500, lo: 0xa4, hi: 0xa4}, - {value: 0xc600, lo: 0xa5, hi: 0xbf}, - // Block 0x6a, offset 0x261 - {value: 0x0000, lo: 0x03}, - {value: 0xc600, lo: 0x80, hi: 0x87}, - {value: 0xe500, lo: 0x88, hi: 0x88}, - {value: 0xc600, lo: 0x89, hi: 0xa3}, - // Block 0x6b, offset 0x265 - {value: 0x0002, lo: 0x01}, - {value: 0x0003, lo: 0x81, hi: 0xbf}, - // Block 0x6c, offset 0x267 - {value: 0x0000, lo: 0x01}, - {value: 0x812d, lo: 0xbd, hi: 0xbd}, - // Block 0x6d, offset 0x269 - {value: 0x0000, lo: 0x01}, - {value: 0x812d, lo: 0xa0, hi: 0xa0}, - // Block 0x6e, offset 0x26b - {value: 0x0000, lo: 0x01}, - {value: 0x8132, lo: 0xb6, hi: 0xba}, - // Block 0x6f, offset 0x26d - {value: 0x002c, lo: 0x05}, - {value: 0x812d, lo: 0x8d, hi: 0x8d}, - {value: 0x8132, lo: 0x8f, hi: 0x8f}, - {value: 0x8132, lo: 0xb8, hi: 0xb8}, - {value: 0x8101, lo: 0xb9, hi: 0xba}, - {value: 0x8104, lo: 0xbf, hi: 0xbf}, - // Block 0x70, offset 0x273 - {value: 0x0000, lo: 0x02}, - {value: 0x8132, lo: 0xa5, hi: 0xa5}, - {value: 0x812d, lo: 0xa6, hi: 0xa6}, - // Block 0x71, offset 0x276 - {value: 0x0000, lo: 0x02}, - {value: 0x8104, lo: 0x86, hi: 0x86}, - {value: 0x8104, lo: 0xbf, hi: 0xbf}, - // Block 0x72, offset 0x279 - {value: 0x17fe, lo: 0x07}, - {value: 0xa000, lo: 0x99, hi: 0x99}, - {value: 0x4238, lo: 0x9a, hi: 0x9a}, - {value: 0xa000, lo: 0x9b, hi: 0x9b}, - {value: 0x4242, lo: 0x9c, hi: 0x9c}, - {value: 0xa000, lo: 0xa5, hi: 0xa5}, - {value: 0x424c, lo: 0xab, hi: 0xab}, - {value: 0x8104, lo: 0xb9, hi: 0xba}, - // Block 0x73, offset 0x281 - {value: 0x0000, lo: 0x06}, - {value: 0x8132, lo: 0x80, hi: 0x82}, - {value: 0x9900, lo: 0xa7, hi: 0xa7}, - {value: 0x2d7e, lo: 0xae, hi: 0xae}, - {value: 0x2d88, lo: 0xaf, hi: 0xaf}, - {value: 0xa000, lo: 0xb1, hi: 0xb2}, - {value: 0x8104, lo: 0xb3, hi: 0xb4}, - // Block 0x74, offset 0x288 - {value: 0x0000, lo: 0x02}, - {value: 0x8104, lo: 0x80, hi: 0x80}, - {value: 0x8102, lo: 0x8a, hi: 0x8a}, - // Block 0x75, offset 0x28b - {value: 0x0000, lo: 0x02}, - {value: 0x8104, lo: 0xb5, hi: 0xb5}, - {value: 0x8102, lo: 0xb6, hi: 0xb6}, - // Block 0x76, offset 0x28e - {value: 0x0002, lo: 0x01}, - {value: 0x8102, lo: 0xa9, hi: 0xaa}, - // Block 0x77, offset 0x290 - {value: 0x0000, lo: 0x07}, - {value: 0xa000, lo: 0x87, hi: 0x87}, - {value: 0x2d92, lo: 0x8b, hi: 0x8b}, - {value: 0x2d9c, lo: 0x8c, hi: 0x8c}, - {value: 0x8104, lo: 0x8d, hi: 0x8d}, - {value: 0x9900, lo: 0x97, hi: 0x97}, - {value: 0x8132, lo: 0xa6, hi: 0xac}, - {value: 0x8132, lo: 0xb0, hi: 0xb4}, - // Block 0x78, offset 0x298 - {value: 0x0000, lo: 0x02}, - {value: 0x8104, lo: 0x82, hi: 0x82}, - {value: 0x8102, lo: 0x86, hi: 0x86}, - // Block 0x79, offset 0x29b - {value: 0x6b5a, lo: 0x06}, - {value: 0x9900, lo: 0xb0, hi: 0xb0}, - {value: 0xa000, lo: 0xb9, hi: 0xb9}, - {value: 0x9900, lo: 0xba, hi: 0xba}, - {value: 0x2db0, lo: 0xbb, hi: 0xbb}, - {value: 0x2da6, lo: 0xbc, hi: 0xbd}, - {value: 0x2dba, lo: 0xbe, hi: 0xbe}, - // Block 0x7a, offset 0x2a2 - {value: 0x0000, lo: 0x02}, - {value: 0x8104, lo: 0x82, hi: 0x82}, - {value: 0x8102, lo: 0x83, hi: 0x83}, - // Block 0x7b, offset 0x2a5 - {value: 0x0000, lo: 0x05}, - {value: 0x9900, lo: 0xaf, hi: 0xaf}, - {value: 0xa000, lo: 0xb8, hi: 0xb9}, - {value: 0x2dc4, lo: 0xba, hi: 0xba}, - {value: 0x2dce, lo: 0xbb, hi: 0xbb}, - {value: 0x8104, lo: 0xbf, hi: 0xbf}, - // Block 0x7c, offset 0x2ab - {value: 0x0000, lo: 0x01}, - {value: 0x8102, lo: 0x80, hi: 0x80}, - // Block 0x7d, offset 0x2ad - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0xbf, hi: 0xbf}, - // Block 0x7e, offset 0x2af - {value: 0x0000, lo: 0x02}, - {value: 0x8104, lo: 0xb6, hi: 0xb6}, - {value: 0x8102, lo: 0xb7, hi: 0xb7}, - // Block 0x7f, offset 0x2b2 - {value: 0x0000, lo: 0x01}, - {value: 0x8104, lo: 0xab, hi: 0xab}, - // Block 0x80, offset 0x2b4 - {value: 0x0000, lo: 0x01}, - {value: 0x8101, lo: 0xb0, hi: 0xb4}, - // Block 0x81, offset 0x2b6 - {value: 0x0000, lo: 0x01}, - {value: 0x8132, lo: 0xb0, hi: 0xb6}, - // Block 0x82, offset 0x2b8 - {value: 0x0000, lo: 0x01}, - {value: 0x8101, lo: 0x9e, hi: 0x9e}, - // Block 0x83, offset 0x2ba - {value: 0x0000, lo: 0x0c}, - {value: 0x45cc, lo: 0x9e, hi: 0x9e}, - {value: 0x45d6, lo: 0x9f, hi: 0x9f}, - {value: 0x460a, lo: 0xa0, hi: 0xa0}, - {value: 0x4618, lo: 0xa1, hi: 0xa1}, - {value: 0x4626, lo: 0xa2, hi: 0xa2}, - {value: 0x4634, lo: 0xa3, hi: 0xa3}, - {value: 0x4642, lo: 0xa4, hi: 0xa4}, - {value: 0x812b, lo: 0xa5, hi: 0xa6}, - {value: 0x8101, lo: 0xa7, hi: 0xa9}, - {value: 0x8130, lo: 0xad, hi: 0xad}, - {value: 0x812b, lo: 0xae, hi: 0xb2}, - {value: 0x812d, lo: 0xbb, hi: 0xbf}, - // Block 0x84, offset 0x2c7 - {value: 0x0000, lo: 0x09}, - {value: 0x812d, lo: 0x80, hi: 0x82}, - {value: 0x8132, lo: 0x85, hi: 0x89}, - {value: 0x812d, lo: 0x8a, hi: 0x8b}, - {value: 0x8132, lo: 0xaa, hi: 0xad}, - {value: 0x45e0, lo: 0xbb, hi: 0xbb}, - {value: 0x45ea, lo: 0xbc, hi: 0xbc}, - {value: 0x4650, lo: 0xbd, hi: 0xbd}, - {value: 0x466c, lo: 0xbe, hi: 0xbe}, - {value: 0x465e, lo: 0xbf, hi: 0xbf}, - // Block 0x85, offset 0x2d1 - {value: 0x0000, lo: 0x01}, - {value: 0x467a, lo: 0x80, hi: 0x80}, - // Block 0x86, offset 0x2d3 - {value: 0x0000, lo: 0x01}, - {value: 0x8132, lo: 0x82, hi: 0x84}, - // Block 0x87, offset 0x2d5 - {value: 0x0002, lo: 0x03}, - {value: 0x0043, lo: 0x80, hi: 0x99}, - {value: 0x0083, lo: 0x9a, hi: 0xb3}, - {value: 0x0043, lo: 0xb4, hi: 0xbf}, - // Block 0x88, offset 0x2d9 - {value: 0x0002, lo: 0x04}, - {value: 0x005b, lo: 0x80, hi: 0x8d}, - {value: 0x0083, lo: 0x8e, hi: 0x94}, - {value: 0x0093, lo: 0x96, hi: 0xa7}, - {value: 0x0043, lo: 0xa8, hi: 0xbf}, - // Block 0x89, offset 0x2de - {value: 0x0002, lo: 0x0b}, - {value: 0x0073, lo: 0x80, hi: 0x81}, - {value: 0x0083, lo: 0x82, hi: 0x9b}, - {value: 0x0043, lo: 0x9c, hi: 0x9c}, - {value: 0x0047, lo: 0x9e, hi: 0x9f}, - {value: 0x004f, lo: 0xa2, hi: 0xa2}, - {value: 0x0055, lo: 0xa5, hi: 0xa6}, - {value: 0x005d, lo: 0xa9, hi: 0xac}, - {value: 0x0067, lo: 0xae, hi: 0xb5}, - {value: 0x0083, lo: 0xb6, hi: 0xb9}, - {value: 0x008d, lo: 0xbb, hi: 0xbb}, - {value: 0x0091, lo: 0xbd, hi: 0xbf}, - // Block 0x8a, offset 0x2ea - {value: 0x0002, lo: 0x04}, - {value: 0x0097, lo: 0x80, hi: 0x83}, - {value: 0x00a1, lo: 0x85, hi: 0x8f}, - {value: 0x0043, lo: 0x90, hi: 0xa9}, - {value: 0x0083, lo: 0xaa, hi: 0xbf}, - // Block 0x8b, offset 0x2ef - {value: 0x0002, lo: 0x08}, - {value: 0x00af, lo: 0x80, hi: 0x83}, - {value: 0x0043, lo: 0x84, hi: 0x85}, - {value: 0x0049, lo: 0x87, hi: 0x8a}, - {value: 0x0055, lo: 0x8d, hi: 0x94}, - {value: 0x0067, lo: 0x96, hi: 0x9c}, - {value: 0x0083, lo: 0x9e, hi: 0xb7}, - {value: 0x0043, lo: 0xb8, hi: 0xb9}, - {value: 0x0049, lo: 0xbb, hi: 0xbe}, - // Block 0x8c, offset 0x2f8 - {value: 0x0002, lo: 0x05}, - {value: 0x0053, lo: 0x80, hi: 0x84}, - {value: 0x005f, lo: 0x86, hi: 0x86}, - {value: 0x0067, lo: 0x8a, hi: 0x90}, - {value: 0x0083, lo: 0x92, hi: 0xab}, - {value: 0x0043, lo: 0xac, hi: 0xbf}, - // Block 0x8d, offset 0x2fe - {value: 0x0002, lo: 0x04}, - {value: 0x006b, lo: 0x80, hi: 0x85}, - {value: 0x0083, lo: 0x86, hi: 0x9f}, - {value: 0x0043, lo: 0xa0, hi: 0xb9}, - {value: 0x0083, lo: 0xba, hi: 0xbf}, - // Block 0x8e, offset 0x303 - {value: 0x0002, lo: 0x03}, - {value: 0x008f, lo: 0x80, hi: 0x93}, - {value: 0x0043, lo: 0x94, hi: 0xad}, - {value: 0x0083, lo: 0xae, hi: 0xbf}, - // Block 0x8f, offset 0x307 - {value: 0x0002, lo: 0x04}, - {value: 0x00a7, lo: 0x80, hi: 0x87}, - {value: 0x0043, lo: 0x88, hi: 0xa1}, - {value: 0x0083, lo: 0xa2, hi: 0xbb}, - {value: 0x0043, lo: 0xbc, hi: 0xbf}, - // Block 0x90, offset 0x30c - {value: 0x0002, lo: 0x03}, - {value: 0x004b, lo: 0x80, hi: 0x95}, - {value: 0x0083, lo: 0x96, hi: 0xaf}, - {value: 0x0043, lo: 0xb0, hi: 0xbf}, - // Block 0x91, offset 0x310 - {value: 0x0003, lo: 0x0f}, - {value: 0x01b8, lo: 0x80, hi: 0x80}, - {value: 0x045f, lo: 0x81, hi: 0x81}, - {value: 0x01bb, lo: 0x82, hi: 0x9a}, - {value: 0x045b, lo: 0x9b, hi: 0x9b}, - {value: 0x01c7, lo: 0x9c, hi: 0x9c}, - {value: 0x01d0, lo: 0x9d, hi: 0x9d}, - {value: 0x01d6, lo: 0x9e, hi: 0x9e}, - {value: 0x01fa, lo: 0x9f, hi: 0x9f}, - {value: 0x01eb, lo: 0xa0, hi: 0xa0}, - {value: 0x01e8, lo: 0xa1, hi: 0xa1}, - {value: 0x0173, lo: 0xa2, hi: 0xb2}, - {value: 0x0188, lo: 0xb3, hi: 0xb3}, - {value: 0x01a6, lo: 0xb4, hi: 0xba}, - {value: 0x045f, lo: 0xbb, hi: 0xbb}, - {value: 0x01bb, lo: 0xbc, hi: 0xbf}, - // Block 0x92, offset 0x320 - {value: 0x0003, lo: 0x0d}, - {value: 0x01c7, lo: 0x80, hi: 0x94}, - {value: 0x045b, lo: 0x95, hi: 0x95}, - {value: 0x01c7, lo: 0x96, hi: 0x96}, - {value: 0x01d0, lo: 0x97, hi: 0x97}, - {value: 0x01d6, lo: 0x98, hi: 0x98}, - {value: 0x01fa, lo: 0x99, hi: 0x99}, - {value: 0x01eb, lo: 0x9a, hi: 0x9a}, - {value: 0x01e8, lo: 0x9b, hi: 0x9b}, - {value: 0x0173, lo: 0x9c, hi: 0xac}, - {value: 0x0188, lo: 0xad, hi: 0xad}, - {value: 0x01a6, lo: 0xae, hi: 0xb4}, - {value: 0x045f, lo: 0xb5, hi: 0xb5}, - {value: 0x01bb, lo: 0xb6, hi: 0xbf}, - // Block 0x93, offset 0x32e - {value: 0x0003, lo: 0x0d}, - {value: 0x01d9, lo: 0x80, hi: 0x8e}, - {value: 0x045b, lo: 0x8f, hi: 0x8f}, - {value: 0x01c7, lo: 0x90, hi: 0x90}, - {value: 0x01d0, lo: 0x91, hi: 0x91}, - {value: 0x01d6, lo: 0x92, hi: 0x92}, - {value: 0x01fa, lo: 0x93, hi: 0x93}, - {value: 0x01eb, lo: 0x94, hi: 0x94}, - {value: 0x01e8, lo: 0x95, hi: 0x95}, - {value: 0x0173, lo: 0x96, hi: 0xa6}, - {value: 0x0188, lo: 0xa7, hi: 0xa7}, - {value: 0x01a6, lo: 0xa8, hi: 0xae}, - {value: 0x045f, lo: 0xaf, hi: 0xaf}, - {value: 0x01bb, lo: 0xb0, hi: 0xbf}, - // Block 0x94, offset 0x33c - {value: 0x0003, lo: 0x0d}, - {value: 0x01eb, lo: 0x80, hi: 0x88}, - {value: 0x045b, lo: 0x89, hi: 0x89}, - {value: 0x01c7, lo: 0x8a, hi: 0x8a}, - {value: 0x01d0, lo: 0x8b, hi: 0x8b}, - {value: 0x01d6, lo: 0x8c, hi: 0x8c}, - {value: 0x01fa, lo: 0x8d, hi: 0x8d}, - {value: 0x01eb, lo: 0x8e, hi: 0x8e}, - {value: 0x01e8, lo: 0x8f, hi: 0x8f}, - {value: 0x0173, lo: 0x90, hi: 0xa0}, - {value: 0x0188, lo: 0xa1, hi: 0xa1}, - {value: 0x01a6, lo: 0xa2, hi: 0xa8}, - {value: 0x045f, lo: 0xa9, hi: 0xa9}, - {value: 0x01bb, lo: 0xaa, hi: 0xbf}, - // Block 0x95, offset 0x34a - {value: 0x0000, lo: 0x05}, - {value: 0x8132, lo: 0x80, hi: 0x86}, - {value: 0x8132, lo: 0x88, hi: 0x98}, - {value: 0x8132, lo: 0x9b, hi: 0xa1}, - {value: 0x8132, lo: 0xa3, hi: 0xa4}, - {value: 0x8132, lo: 0xa6, hi: 0xaa}, - // Block 0x96, offset 0x350 - {value: 0x0000, lo: 0x01}, - {value: 0x812d, lo: 0x90, hi: 0x96}, - // Block 0x97, offset 0x352 - {value: 0x0000, lo: 0x02}, - {value: 0x8132, lo: 0x84, hi: 0x89}, - {value: 0x8102, lo: 0x8a, hi: 0x8a}, - // Block 0x98, offset 0x355 - {value: 0x0002, lo: 0x09}, - {value: 0x0063, lo: 0x80, hi: 0x89}, - {value: 0x1951, lo: 0x8a, hi: 0x8a}, - {value: 0x1981, lo: 0x8b, hi: 0x8b}, - {value: 0x199c, lo: 0x8c, hi: 0x8c}, - {value: 0x19a2, lo: 0x8d, hi: 0x8d}, - {value: 0x1bc0, lo: 0x8e, hi: 0x8e}, - {value: 0x19ae, lo: 0x8f, hi: 0x8f}, - {value: 0x197b, lo: 0xaa, hi: 0xaa}, - {value: 0x197e, lo: 0xab, hi: 0xab}, - // Block 0x99, offset 0x35f - {value: 0x0000, lo: 0x01}, - {value: 0x193f, lo: 0x90, hi: 0x90}, - // Block 0x9a, offset 0x361 - {value: 0x0028, lo: 0x09}, - {value: 0x2862, lo: 0x80, hi: 0x80}, - {value: 0x2826, lo: 0x81, hi: 0x81}, - {value: 0x2830, lo: 0x82, hi: 0x82}, - {value: 0x2844, lo: 0x83, hi: 0x84}, - {value: 0x284e, lo: 0x85, hi: 0x86}, - {value: 0x283a, lo: 0x87, hi: 0x87}, - {value: 0x2858, lo: 0x88, hi: 0x88}, - {value: 0x0b6f, lo: 0x90, hi: 0x90}, - {value: 0x08e7, lo: 0x91, hi: 0x91}, -} - -// recompMap: 7520 bytes (entries only) -var recompMap map[uint32]rune -var recompMapOnce sync.Once - -const recompMapPacked = "" + - "\x00A\x03\x00\x00\x00\x00\xc0" + // 0x00410300: 0x000000C0 - "\x00A\x03\x01\x00\x00\x00\xc1" + // 0x00410301: 0x000000C1 - "\x00A\x03\x02\x00\x00\x00\xc2" + // 0x00410302: 0x000000C2 - "\x00A\x03\x03\x00\x00\x00\xc3" + // 0x00410303: 0x000000C3 - "\x00A\x03\b\x00\x00\x00\xc4" + // 0x00410308: 0x000000C4 - "\x00A\x03\n\x00\x00\x00\xc5" + // 0x0041030A: 0x000000C5 - "\x00C\x03'\x00\x00\x00\xc7" + // 0x00430327: 0x000000C7 - "\x00E\x03\x00\x00\x00\x00\xc8" + // 0x00450300: 0x000000C8 - "\x00E\x03\x01\x00\x00\x00\xc9" + // 0x00450301: 0x000000C9 - "\x00E\x03\x02\x00\x00\x00\xca" + // 0x00450302: 0x000000CA - "\x00E\x03\b\x00\x00\x00\xcb" + // 0x00450308: 0x000000CB - "\x00I\x03\x00\x00\x00\x00\xcc" + // 0x00490300: 0x000000CC - "\x00I\x03\x01\x00\x00\x00\xcd" + // 0x00490301: 0x000000CD - "\x00I\x03\x02\x00\x00\x00\xce" + // 0x00490302: 0x000000CE - "\x00I\x03\b\x00\x00\x00\xcf" + // 0x00490308: 0x000000CF - "\x00N\x03\x03\x00\x00\x00\xd1" + // 0x004E0303: 0x000000D1 - "\x00O\x03\x00\x00\x00\x00\xd2" + // 0x004F0300: 0x000000D2 - "\x00O\x03\x01\x00\x00\x00\xd3" + // 0x004F0301: 0x000000D3 - "\x00O\x03\x02\x00\x00\x00\xd4" + // 0x004F0302: 0x000000D4 - "\x00O\x03\x03\x00\x00\x00\xd5" + // 0x004F0303: 0x000000D5 - "\x00O\x03\b\x00\x00\x00\xd6" + // 0x004F0308: 0x000000D6 - "\x00U\x03\x00\x00\x00\x00\xd9" + // 0x00550300: 0x000000D9 - "\x00U\x03\x01\x00\x00\x00\xda" + // 0x00550301: 0x000000DA - "\x00U\x03\x02\x00\x00\x00\xdb" + // 0x00550302: 0x000000DB - "\x00U\x03\b\x00\x00\x00\xdc" + // 0x00550308: 0x000000DC - "\x00Y\x03\x01\x00\x00\x00\xdd" + // 0x00590301: 0x000000DD - "\x00a\x03\x00\x00\x00\x00\xe0" + // 0x00610300: 0x000000E0 - "\x00a\x03\x01\x00\x00\x00\xe1" + // 0x00610301: 0x000000E1 - "\x00a\x03\x02\x00\x00\x00\xe2" + // 0x00610302: 0x000000E2 - "\x00a\x03\x03\x00\x00\x00\xe3" + // 0x00610303: 0x000000E3 - "\x00a\x03\b\x00\x00\x00\xe4" + // 0x00610308: 0x000000E4 - "\x00a\x03\n\x00\x00\x00\xe5" + // 0x0061030A: 0x000000E5 - "\x00c\x03'\x00\x00\x00\xe7" + // 0x00630327: 0x000000E7 - "\x00e\x03\x00\x00\x00\x00\xe8" + // 0x00650300: 0x000000E8 - "\x00e\x03\x01\x00\x00\x00\xe9" + // 0x00650301: 0x000000E9 - "\x00e\x03\x02\x00\x00\x00\xea" + // 0x00650302: 0x000000EA - "\x00e\x03\b\x00\x00\x00\xeb" + // 0x00650308: 0x000000EB - "\x00i\x03\x00\x00\x00\x00\xec" + // 0x00690300: 0x000000EC - "\x00i\x03\x01\x00\x00\x00\xed" + // 0x00690301: 0x000000ED - "\x00i\x03\x02\x00\x00\x00\xee" + // 0x00690302: 0x000000EE - "\x00i\x03\b\x00\x00\x00\xef" + // 0x00690308: 0x000000EF - "\x00n\x03\x03\x00\x00\x00\xf1" + // 0x006E0303: 0x000000F1 - "\x00o\x03\x00\x00\x00\x00\xf2" + // 0x006F0300: 0x000000F2 - "\x00o\x03\x01\x00\x00\x00\xf3" + // 0x006F0301: 0x000000F3 - "\x00o\x03\x02\x00\x00\x00\xf4" + // 0x006F0302: 0x000000F4 - "\x00o\x03\x03\x00\x00\x00\xf5" + // 0x006F0303: 0x000000F5 - "\x00o\x03\b\x00\x00\x00\xf6" + // 0x006F0308: 0x000000F6 - "\x00u\x03\x00\x00\x00\x00\xf9" + // 0x00750300: 0x000000F9 - "\x00u\x03\x01\x00\x00\x00\xfa" + // 0x00750301: 0x000000FA - "\x00u\x03\x02\x00\x00\x00\xfb" + // 0x00750302: 0x000000FB - "\x00u\x03\b\x00\x00\x00\xfc" + // 0x00750308: 0x000000FC - "\x00y\x03\x01\x00\x00\x00\xfd" + // 0x00790301: 0x000000FD - "\x00y\x03\b\x00\x00\x00\xff" + // 0x00790308: 0x000000FF - "\x00A\x03\x04\x00\x00\x01\x00" + // 0x00410304: 0x00000100 - "\x00a\x03\x04\x00\x00\x01\x01" + // 0x00610304: 0x00000101 - "\x00A\x03\x06\x00\x00\x01\x02" + // 0x00410306: 0x00000102 - "\x00a\x03\x06\x00\x00\x01\x03" + // 0x00610306: 0x00000103 - "\x00A\x03(\x00\x00\x01\x04" + // 0x00410328: 0x00000104 - "\x00a\x03(\x00\x00\x01\x05" + // 0x00610328: 0x00000105 - "\x00C\x03\x01\x00\x00\x01\x06" + // 0x00430301: 0x00000106 - "\x00c\x03\x01\x00\x00\x01\a" + // 0x00630301: 0x00000107 - "\x00C\x03\x02\x00\x00\x01\b" + // 0x00430302: 0x00000108 - "\x00c\x03\x02\x00\x00\x01\t" + // 0x00630302: 0x00000109 - "\x00C\x03\a\x00\x00\x01\n" + // 0x00430307: 0x0000010A - "\x00c\x03\a\x00\x00\x01\v" + // 0x00630307: 0x0000010B - "\x00C\x03\f\x00\x00\x01\f" + // 0x0043030C: 0x0000010C - "\x00c\x03\f\x00\x00\x01\r" + // 0x0063030C: 0x0000010D - "\x00D\x03\f\x00\x00\x01\x0e" + // 0x0044030C: 0x0000010E - "\x00d\x03\f\x00\x00\x01\x0f" + // 0x0064030C: 0x0000010F - "\x00E\x03\x04\x00\x00\x01\x12" + // 0x00450304: 0x00000112 - "\x00e\x03\x04\x00\x00\x01\x13" + // 0x00650304: 0x00000113 - "\x00E\x03\x06\x00\x00\x01\x14" + // 0x00450306: 0x00000114 - "\x00e\x03\x06\x00\x00\x01\x15" + // 0x00650306: 0x00000115 - "\x00E\x03\a\x00\x00\x01\x16" + // 0x00450307: 0x00000116 - "\x00e\x03\a\x00\x00\x01\x17" + // 0x00650307: 0x00000117 - "\x00E\x03(\x00\x00\x01\x18" + // 0x00450328: 0x00000118 - "\x00e\x03(\x00\x00\x01\x19" + // 0x00650328: 0x00000119 - "\x00E\x03\f\x00\x00\x01\x1a" + // 0x0045030C: 0x0000011A - "\x00e\x03\f\x00\x00\x01\x1b" + // 0x0065030C: 0x0000011B - "\x00G\x03\x02\x00\x00\x01\x1c" + // 0x00470302: 0x0000011C - "\x00g\x03\x02\x00\x00\x01\x1d" + // 0x00670302: 0x0000011D - "\x00G\x03\x06\x00\x00\x01\x1e" + // 0x00470306: 0x0000011E - "\x00g\x03\x06\x00\x00\x01\x1f" + // 0x00670306: 0x0000011F - "\x00G\x03\a\x00\x00\x01 " + // 0x00470307: 0x00000120 - "\x00g\x03\a\x00\x00\x01!" + // 0x00670307: 0x00000121 - "\x00G\x03'\x00\x00\x01\"" + // 0x00470327: 0x00000122 - "\x00g\x03'\x00\x00\x01#" + // 0x00670327: 0x00000123 - "\x00H\x03\x02\x00\x00\x01$" + // 0x00480302: 0x00000124 - "\x00h\x03\x02\x00\x00\x01%" + // 0x00680302: 0x00000125 - "\x00I\x03\x03\x00\x00\x01(" + // 0x00490303: 0x00000128 - "\x00i\x03\x03\x00\x00\x01)" + // 0x00690303: 0x00000129 - "\x00I\x03\x04\x00\x00\x01*" + // 0x00490304: 0x0000012A - "\x00i\x03\x04\x00\x00\x01+" + // 0x00690304: 0x0000012B - "\x00I\x03\x06\x00\x00\x01," + // 0x00490306: 0x0000012C - "\x00i\x03\x06\x00\x00\x01-" + // 0x00690306: 0x0000012D - "\x00I\x03(\x00\x00\x01." + // 0x00490328: 0x0000012E - "\x00i\x03(\x00\x00\x01/" + // 0x00690328: 0x0000012F - "\x00I\x03\a\x00\x00\x010" + // 0x00490307: 0x00000130 - "\x00J\x03\x02\x00\x00\x014" + // 0x004A0302: 0x00000134 - "\x00j\x03\x02\x00\x00\x015" + // 0x006A0302: 0x00000135 - "\x00K\x03'\x00\x00\x016" + // 0x004B0327: 0x00000136 - "\x00k\x03'\x00\x00\x017" + // 0x006B0327: 0x00000137 - "\x00L\x03\x01\x00\x00\x019" + // 0x004C0301: 0x00000139 - "\x00l\x03\x01\x00\x00\x01:" + // 0x006C0301: 0x0000013A - "\x00L\x03'\x00\x00\x01;" + // 0x004C0327: 0x0000013B - "\x00l\x03'\x00\x00\x01<" + // 0x006C0327: 0x0000013C - "\x00L\x03\f\x00\x00\x01=" + // 0x004C030C: 0x0000013D - "\x00l\x03\f\x00\x00\x01>" + // 0x006C030C: 0x0000013E - "\x00N\x03\x01\x00\x00\x01C" + // 0x004E0301: 0x00000143 - "\x00n\x03\x01\x00\x00\x01D" + // 0x006E0301: 0x00000144 - "\x00N\x03'\x00\x00\x01E" + // 0x004E0327: 0x00000145 - "\x00n\x03'\x00\x00\x01F" + // 0x006E0327: 0x00000146 - "\x00N\x03\f\x00\x00\x01G" + // 0x004E030C: 0x00000147 - "\x00n\x03\f\x00\x00\x01H" + // 0x006E030C: 0x00000148 - "\x00O\x03\x04\x00\x00\x01L" + // 0x004F0304: 0x0000014C - "\x00o\x03\x04\x00\x00\x01M" + // 0x006F0304: 0x0000014D - "\x00O\x03\x06\x00\x00\x01N" + // 0x004F0306: 0x0000014E - "\x00o\x03\x06\x00\x00\x01O" + // 0x006F0306: 0x0000014F - "\x00O\x03\v\x00\x00\x01P" + // 0x004F030B: 0x00000150 - "\x00o\x03\v\x00\x00\x01Q" + // 0x006F030B: 0x00000151 - "\x00R\x03\x01\x00\x00\x01T" + // 0x00520301: 0x00000154 - "\x00r\x03\x01\x00\x00\x01U" + // 0x00720301: 0x00000155 - "\x00R\x03'\x00\x00\x01V" + // 0x00520327: 0x00000156 - "\x00r\x03'\x00\x00\x01W" + // 0x00720327: 0x00000157 - "\x00R\x03\f\x00\x00\x01X" + // 0x0052030C: 0x00000158 - "\x00r\x03\f\x00\x00\x01Y" + // 0x0072030C: 0x00000159 - "\x00S\x03\x01\x00\x00\x01Z" + // 0x00530301: 0x0000015A - "\x00s\x03\x01\x00\x00\x01[" + // 0x00730301: 0x0000015B - "\x00S\x03\x02\x00\x00\x01\\" + // 0x00530302: 0x0000015C - "\x00s\x03\x02\x00\x00\x01]" + // 0x00730302: 0x0000015D - "\x00S\x03'\x00\x00\x01^" + // 0x00530327: 0x0000015E - "\x00s\x03'\x00\x00\x01_" + // 0x00730327: 0x0000015F - "\x00S\x03\f\x00\x00\x01`" + // 0x0053030C: 0x00000160 - "\x00s\x03\f\x00\x00\x01a" + // 0x0073030C: 0x00000161 - "\x00T\x03'\x00\x00\x01b" + // 0x00540327: 0x00000162 - "\x00t\x03'\x00\x00\x01c" + // 0x00740327: 0x00000163 - "\x00T\x03\f\x00\x00\x01d" + // 0x0054030C: 0x00000164 - "\x00t\x03\f\x00\x00\x01e" + // 0x0074030C: 0x00000165 - "\x00U\x03\x03\x00\x00\x01h" + // 0x00550303: 0x00000168 - "\x00u\x03\x03\x00\x00\x01i" + // 0x00750303: 0x00000169 - "\x00U\x03\x04\x00\x00\x01j" + // 0x00550304: 0x0000016A - "\x00u\x03\x04\x00\x00\x01k" + // 0x00750304: 0x0000016B - "\x00U\x03\x06\x00\x00\x01l" + // 0x00550306: 0x0000016C - "\x00u\x03\x06\x00\x00\x01m" + // 0x00750306: 0x0000016D - "\x00U\x03\n\x00\x00\x01n" + // 0x0055030A: 0x0000016E - "\x00u\x03\n\x00\x00\x01o" + // 0x0075030A: 0x0000016F - "\x00U\x03\v\x00\x00\x01p" + // 0x0055030B: 0x00000170 - "\x00u\x03\v\x00\x00\x01q" + // 0x0075030B: 0x00000171 - "\x00U\x03(\x00\x00\x01r" + // 0x00550328: 0x00000172 - "\x00u\x03(\x00\x00\x01s" + // 0x00750328: 0x00000173 - "\x00W\x03\x02\x00\x00\x01t" + // 0x00570302: 0x00000174 - "\x00w\x03\x02\x00\x00\x01u" + // 0x00770302: 0x00000175 - "\x00Y\x03\x02\x00\x00\x01v" + // 0x00590302: 0x00000176 - "\x00y\x03\x02\x00\x00\x01w" + // 0x00790302: 0x00000177 - "\x00Y\x03\b\x00\x00\x01x" + // 0x00590308: 0x00000178 - "\x00Z\x03\x01\x00\x00\x01y" + // 0x005A0301: 0x00000179 - "\x00z\x03\x01\x00\x00\x01z" + // 0x007A0301: 0x0000017A - "\x00Z\x03\a\x00\x00\x01{" + // 0x005A0307: 0x0000017B - "\x00z\x03\a\x00\x00\x01|" + // 0x007A0307: 0x0000017C - "\x00Z\x03\f\x00\x00\x01}" + // 0x005A030C: 0x0000017D - "\x00z\x03\f\x00\x00\x01~" + // 0x007A030C: 0x0000017E - "\x00O\x03\x1b\x00\x00\x01\xa0" + // 0x004F031B: 0x000001A0 - "\x00o\x03\x1b\x00\x00\x01\xa1" + // 0x006F031B: 0x000001A1 - "\x00U\x03\x1b\x00\x00\x01\xaf" + // 0x0055031B: 0x000001AF - "\x00u\x03\x1b\x00\x00\x01\xb0" + // 0x0075031B: 0x000001B0 - "\x00A\x03\f\x00\x00\x01\xcd" + // 0x0041030C: 0x000001CD - "\x00a\x03\f\x00\x00\x01\xce" + // 0x0061030C: 0x000001CE - "\x00I\x03\f\x00\x00\x01\xcf" + // 0x0049030C: 0x000001CF - "\x00i\x03\f\x00\x00\x01\xd0" + // 0x0069030C: 0x000001D0 - "\x00O\x03\f\x00\x00\x01\xd1" + // 0x004F030C: 0x000001D1 - "\x00o\x03\f\x00\x00\x01\xd2" + // 0x006F030C: 0x000001D2 - "\x00U\x03\f\x00\x00\x01\xd3" + // 0x0055030C: 0x000001D3 - "\x00u\x03\f\x00\x00\x01\xd4" + // 0x0075030C: 0x000001D4 - "\x00\xdc\x03\x04\x00\x00\x01\xd5" + // 0x00DC0304: 0x000001D5 - "\x00\xfc\x03\x04\x00\x00\x01\xd6" + // 0x00FC0304: 0x000001D6 - "\x00\xdc\x03\x01\x00\x00\x01\xd7" + // 0x00DC0301: 0x000001D7 - "\x00\xfc\x03\x01\x00\x00\x01\xd8" + // 0x00FC0301: 0x000001D8 - "\x00\xdc\x03\f\x00\x00\x01\xd9" + // 0x00DC030C: 0x000001D9 - "\x00\xfc\x03\f\x00\x00\x01\xda" + // 0x00FC030C: 0x000001DA - "\x00\xdc\x03\x00\x00\x00\x01\xdb" + // 0x00DC0300: 0x000001DB - "\x00\xfc\x03\x00\x00\x00\x01\xdc" + // 0x00FC0300: 0x000001DC - "\x00\xc4\x03\x04\x00\x00\x01\xde" + // 0x00C40304: 0x000001DE - "\x00\xe4\x03\x04\x00\x00\x01\xdf" + // 0x00E40304: 0x000001DF - "\x02&\x03\x04\x00\x00\x01\xe0" + // 0x02260304: 0x000001E0 - "\x02'\x03\x04\x00\x00\x01\xe1" + // 0x02270304: 0x000001E1 - "\x00\xc6\x03\x04\x00\x00\x01\xe2" + // 0x00C60304: 0x000001E2 - "\x00\xe6\x03\x04\x00\x00\x01\xe3" + // 0x00E60304: 0x000001E3 - "\x00G\x03\f\x00\x00\x01\xe6" + // 0x0047030C: 0x000001E6 - "\x00g\x03\f\x00\x00\x01\xe7" + // 0x0067030C: 0x000001E7 - "\x00K\x03\f\x00\x00\x01\xe8" + // 0x004B030C: 0x000001E8 - "\x00k\x03\f\x00\x00\x01\xe9" + // 0x006B030C: 0x000001E9 - "\x00O\x03(\x00\x00\x01\xea" + // 0x004F0328: 0x000001EA - "\x00o\x03(\x00\x00\x01\xeb" + // 0x006F0328: 0x000001EB - "\x01\xea\x03\x04\x00\x00\x01\xec" + // 0x01EA0304: 0x000001EC - "\x01\xeb\x03\x04\x00\x00\x01\xed" + // 0x01EB0304: 0x000001ED - "\x01\xb7\x03\f\x00\x00\x01\xee" + // 0x01B7030C: 0x000001EE - "\x02\x92\x03\f\x00\x00\x01\xef" + // 0x0292030C: 0x000001EF - "\x00j\x03\f\x00\x00\x01\xf0" + // 0x006A030C: 0x000001F0 - "\x00G\x03\x01\x00\x00\x01\xf4" + // 0x00470301: 0x000001F4 - "\x00g\x03\x01\x00\x00\x01\xf5" + // 0x00670301: 0x000001F5 - "\x00N\x03\x00\x00\x00\x01\xf8" + // 0x004E0300: 0x000001F8 - "\x00n\x03\x00\x00\x00\x01\xf9" + // 0x006E0300: 0x000001F9 - "\x00\xc5\x03\x01\x00\x00\x01\xfa" + // 0x00C50301: 0x000001FA - "\x00\xe5\x03\x01\x00\x00\x01\xfb" + // 0x00E50301: 0x000001FB - "\x00\xc6\x03\x01\x00\x00\x01\xfc" + // 0x00C60301: 0x000001FC - "\x00\xe6\x03\x01\x00\x00\x01\xfd" + // 0x00E60301: 0x000001FD - "\x00\xd8\x03\x01\x00\x00\x01\xfe" + // 0x00D80301: 0x000001FE - "\x00\xf8\x03\x01\x00\x00\x01\xff" + // 0x00F80301: 0x000001FF - "\x00A\x03\x0f\x00\x00\x02\x00" + // 0x0041030F: 0x00000200 - "\x00a\x03\x0f\x00\x00\x02\x01" + // 0x0061030F: 0x00000201 - "\x00A\x03\x11\x00\x00\x02\x02" + // 0x00410311: 0x00000202 - "\x00a\x03\x11\x00\x00\x02\x03" + // 0x00610311: 0x00000203 - "\x00E\x03\x0f\x00\x00\x02\x04" + // 0x0045030F: 0x00000204 - "\x00e\x03\x0f\x00\x00\x02\x05" + // 0x0065030F: 0x00000205 - "\x00E\x03\x11\x00\x00\x02\x06" + // 0x00450311: 0x00000206 - "\x00e\x03\x11\x00\x00\x02\a" + // 0x00650311: 0x00000207 - "\x00I\x03\x0f\x00\x00\x02\b" + // 0x0049030F: 0x00000208 - "\x00i\x03\x0f\x00\x00\x02\t" + // 0x0069030F: 0x00000209 - "\x00I\x03\x11\x00\x00\x02\n" + // 0x00490311: 0x0000020A - "\x00i\x03\x11\x00\x00\x02\v" + // 0x00690311: 0x0000020B - "\x00O\x03\x0f\x00\x00\x02\f" + // 0x004F030F: 0x0000020C - "\x00o\x03\x0f\x00\x00\x02\r" + // 0x006F030F: 0x0000020D - "\x00O\x03\x11\x00\x00\x02\x0e" + // 0x004F0311: 0x0000020E - "\x00o\x03\x11\x00\x00\x02\x0f" + // 0x006F0311: 0x0000020F - "\x00R\x03\x0f\x00\x00\x02\x10" + // 0x0052030F: 0x00000210 - "\x00r\x03\x0f\x00\x00\x02\x11" + // 0x0072030F: 0x00000211 - "\x00R\x03\x11\x00\x00\x02\x12" + // 0x00520311: 0x00000212 - "\x00r\x03\x11\x00\x00\x02\x13" + // 0x00720311: 0x00000213 - "\x00U\x03\x0f\x00\x00\x02\x14" + // 0x0055030F: 0x00000214 - "\x00u\x03\x0f\x00\x00\x02\x15" + // 0x0075030F: 0x00000215 - "\x00U\x03\x11\x00\x00\x02\x16" + // 0x00550311: 0x00000216 - "\x00u\x03\x11\x00\x00\x02\x17" + // 0x00750311: 0x00000217 - "\x00S\x03&\x00\x00\x02\x18" + // 0x00530326: 0x00000218 - "\x00s\x03&\x00\x00\x02\x19" + // 0x00730326: 0x00000219 - "\x00T\x03&\x00\x00\x02\x1a" + // 0x00540326: 0x0000021A - "\x00t\x03&\x00\x00\x02\x1b" + // 0x00740326: 0x0000021B - "\x00H\x03\f\x00\x00\x02\x1e" + // 0x0048030C: 0x0000021E - "\x00h\x03\f\x00\x00\x02\x1f" + // 0x0068030C: 0x0000021F - "\x00A\x03\a\x00\x00\x02&" + // 0x00410307: 0x00000226 - "\x00a\x03\a\x00\x00\x02'" + // 0x00610307: 0x00000227 - "\x00E\x03'\x00\x00\x02(" + // 0x00450327: 0x00000228 - "\x00e\x03'\x00\x00\x02)" + // 0x00650327: 0x00000229 - "\x00\xd6\x03\x04\x00\x00\x02*" + // 0x00D60304: 0x0000022A - "\x00\xf6\x03\x04\x00\x00\x02+" + // 0x00F60304: 0x0000022B - "\x00\xd5\x03\x04\x00\x00\x02," + // 0x00D50304: 0x0000022C - "\x00\xf5\x03\x04\x00\x00\x02-" + // 0x00F50304: 0x0000022D - "\x00O\x03\a\x00\x00\x02." + // 0x004F0307: 0x0000022E - "\x00o\x03\a\x00\x00\x02/" + // 0x006F0307: 0x0000022F - "\x02.\x03\x04\x00\x00\x020" + // 0x022E0304: 0x00000230 - "\x02/\x03\x04\x00\x00\x021" + // 0x022F0304: 0x00000231 - "\x00Y\x03\x04\x00\x00\x022" + // 0x00590304: 0x00000232 - "\x00y\x03\x04\x00\x00\x023" + // 0x00790304: 0x00000233 - "\x00\xa8\x03\x01\x00\x00\x03\x85" + // 0x00A80301: 0x00000385 - "\x03\x91\x03\x01\x00\x00\x03\x86" + // 0x03910301: 0x00000386 - "\x03\x95\x03\x01\x00\x00\x03\x88" + // 0x03950301: 0x00000388 - "\x03\x97\x03\x01\x00\x00\x03\x89" + // 0x03970301: 0x00000389 - "\x03\x99\x03\x01\x00\x00\x03\x8a" + // 0x03990301: 0x0000038A - "\x03\x9f\x03\x01\x00\x00\x03\x8c" + // 0x039F0301: 0x0000038C - "\x03\xa5\x03\x01\x00\x00\x03\x8e" + // 0x03A50301: 0x0000038E - "\x03\xa9\x03\x01\x00\x00\x03\x8f" + // 0x03A90301: 0x0000038F - "\x03\xca\x03\x01\x00\x00\x03\x90" + // 0x03CA0301: 0x00000390 - "\x03\x99\x03\b\x00\x00\x03\xaa" + // 0x03990308: 0x000003AA - "\x03\xa5\x03\b\x00\x00\x03\xab" + // 0x03A50308: 0x000003AB - "\x03\xb1\x03\x01\x00\x00\x03\xac" + // 0x03B10301: 0x000003AC - "\x03\xb5\x03\x01\x00\x00\x03\xad" + // 0x03B50301: 0x000003AD - "\x03\xb7\x03\x01\x00\x00\x03\xae" + // 0x03B70301: 0x000003AE - "\x03\xb9\x03\x01\x00\x00\x03\xaf" + // 0x03B90301: 0x000003AF - "\x03\xcb\x03\x01\x00\x00\x03\xb0" + // 0x03CB0301: 0x000003B0 - "\x03\xb9\x03\b\x00\x00\x03\xca" + // 0x03B90308: 0x000003CA - "\x03\xc5\x03\b\x00\x00\x03\xcb" + // 0x03C50308: 0x000003CB - "\x03\xbf\x03\x01\x00\x00\x03\xcc" + // 0x03BF0301: 0x000003CC - "\x03\xc5\x03\x01\x00\x00\x03\xcd" + // 0x03C50301: 0x000003CD - "\x03\xc9\x03\x01\x00\x00\x03\xce" + // 0x03C90301: 0x000003CE - "\x03\xd2\x03\x01\x00\x00\x03\xd3" + // 0x03D20301: 0x000003D3 - "\x03\xd2\x03\b\x00\x00\x03\xd4" + // 0x03D20308: 0x000003D4 - "\x04\x15\x03\x00\x00\x00\x04\x00" + // 0x04150300: 0x00000400 - "\x04\x15\x03\b\x00\x00\x04\x01" + // 0x04150308: 0x00000401 - "\x04\x13\x03\x01\x00\x00\x04\x03" + // 0x04130301: 0x00000403 - "\x04\x06\x03\b\x00\x00\x04\a" + // 0x04060308: 0x00000407 - "\x04\x1a\x03\x01\x00\x00\x04\f" + // 0x041A0301: 0x0000040C - "\x04\x18\x03\x00\x00\x00\x04\r" + // 0x04180300: 0x0000040D - "\x04#\x03\x06\x00\x00\x04\x0e" + // 0x04230306: 0x0000040E - "\x04\x18\x03\x06\x00\x00\x04\x19" + // 0x04180306: 0x00000419 - "\x048\x03\x06\x00\x00\x049" + // 0x04380306: 0x00000439 - "\x045\x03\x00\x00\x00\x04P" + // 0x04350300: 0x00000450 - "\x045\x03\b\x00\x00\x04Q" + // 0x04350308: 0x00000451 - "\x043\x03\x01\x00\x00\x04S" + // 0x04330301: 0x00000453 - "\x04V\x03\b\x00\x00\x04W" + // 0x04560308: 0x00000457 - "\x04:\x03\x01\x00\x00\x04\\" + // 0x043A0301: 0x0000045C - "\x048\x03\x00\x00\x00\x04]" + // 0x04380300: 0x0000045D - "\x04C\x03\x06\x00\x00\x04^" + // 0x04430306: 0x0000045E - "\x04t\x03\x0f\x00\x00\x04v" + // 0x0474030F: 0x00000476 - "\x04u\x03\x0f\x00\x00\x04w" + // 0x0475030F: 0x00000477 - "\x04\x16\x03\x06\x00\x00\x04\xc1" + // 0x04160306: 0x000004C1 - "\x046\x03\x06\x00\x00\x04\xc2" + // 0x04360306: 0x000004C2 - "\x04\x10\x03\x06\x00\x00\x04\xd0" + // 0x04100306: 0x000004D0 - "\x040\x03\x06\x00\x00\x04\xd1" + // 0x04300306: 0x000004D1 - "\x04\x10\x03\b\x00\x00\x04\xd2" + // 0x04100308: 0x000004D2 - "\x040\x03\b\x00\x00\x04\xd3" + // 0x04300308: 0x000004D3 - "\x04\x15\x03\x06\x00\x00\x04\xd6" + // 0x04150306: 0x000004D6 - "\x045\x03\x06\x00\x00\x04\xd7" + // 0x04350306: 0x000004D7 - "\x04\xd8\x03\b\x00\x00\x04\xda" + // 0x04D80308: 0x000004DA - "\x04\xd9\x03\b\x00\x00\x04\xdb" + // 0x04D90308: 0x000004DB - "\x04\x16\x03\b\x00\x00\x04\xdc" + // 0x04160308: 0x000004DC - "\x046\x03\b\x00\x00\x04\xdd" + // 0x04360308: 0x000004DD - "\x04\x17\x03\b\x00\x00\x04\xde" + // 0x04170308: 0x000004DE - "\x047\x03\b\x00\x00\x04\xdf" + // 0x04370308: 0x000004DF - "\x04\x18\x03\x04\x00\x00\x04\xe2" + // 0x04180304: 0x000004E2 - "\x048\x03\x04\x00\x00\x04\xe3" + // 0x04380304: 0x000004E3 - "\x04\x18\x03\b\x00\x00\x04\xe4" + // 0x04180308: 0x000004E4 - "\x048\x03\b\x00\x00\x04\xe5" + // 0x04380308: 0x000004E5 - "\x04\x1e\x03\b\x00\x00\x04\xe6" + // 0x041E0308: 0x000004E6 - "\x04>\x03\b\x00\x00\x04\xe7" + // 0x043E0308: 0x000004E7 - "\x04\xe8\x03\b\x00\x00\x04\xea" + // 0x04E80308: 0x000004EA - "\x04\xe9\x03\b\x00\x00\x04\xeb" + // 0x04E90308: 0x000004EB - "\x04-\x03\b\x00\x00\x04\xec" + // 0x042D0308: 0x000004EC - "\x04M\x03\b\x00\x00\x04\xed" + // 0x044D0308: 0x000004ED - "\x04#\x03\x04\x00\x00\x04\xee" + // 0x04230304: 0x000004EE - "\x04C\x03\x04\x00\x00\x04\xef" + // 0x04430304: 0x000004EF - "\x04#\x03\b\x00\x00\x04\xf0" + // 0x04230308: 0x000004F0 - "\x04C\x03\b\x00\x00\x04\xf1" + // 0x04430308: 0x000004F1 - "\x04#\x03\v\x00\x00\x04\xf2" + // 0x0423030B: 0x000004F2 - "\x04C\x03\v\x00\x00\x04\xf3" + // 0x0443030B: 0x000004F3 - "\x04'\x03\b\x00\x00\x04\xf4" + // 0x04270308: 0x000004F4 - "\x04G\x03\b\x00\x00\x04\xf5" + // 0x04470308: 0x000004F5 - "\x04+\x03\b\x00\x00\x04\xf8" + // 0x042B0308: 0x000004F8 - "\x04K\x03\b\x00\x00\x04\xf9" + // 0x044B0308: 0x000004F9 - "\x06'\x06S\x00\x00\x06\"" + // 0x06270653: 0x00000622 - "\x06'\x06T\x00\x00\x06#" + // 0x06270654: 0x00000623 - "\x06H\x06T\x00\x00\x06$" + // 0x06480654: 0x00000624 - "\x06'\x06U\x00\x00\x06%" + // 0x06270655: 0x00000625 - "\x06J\x06T\x00\x00\x06&" + // 0x064A0654: 0x00000626 - "\x06\xd5\x06T\x00\x00\x06\xc0" + // 0x06D50654: 0x000006C0 - "\x06\xc1\x06T\x00\x00\x06\xc2" + // 0x06C10654: 0x000006C2 - "\x06\xd2\x06T\x00\x00\x06\xd3" + // 0x06D20654: 0x000006D3 - "\t(\t<\x00\x00\t)" + // 0x0928093C: 0x00000929 - "\t0\t<\x00\x00\t1" + // 0x0930093C: 0x00000931 - "\t3\t<\x00\x00\t4" + // 0x0933093C: 0x00000934 - "\t\xc7\t\xbe\x00\x00\t\xcb" + // 0x09C709BE: 0x000009CB - "\t\xc7\t\xd7\x00\x00\t\xcc" + // 0x09C709D7: 0x000009CC - "\vG\vV\x00\x00\vH" + // 0x0B470B56: 0x00000B48 - "\vG\v>\x00\x00\vK" + // 0x0B470B3E: 0x00000B4B - "\vG\vW\x00\x00\vL" + // 0x0B470B57: 0x00000B4C - "\v\x92\v\xd7\x00\x00\v\x94" + // 0x0B920BD7: 0x00000B94 - "\v\xc6\v\xbe\x00\x00\v\xca" + // 0x0BC60BBE: 0x00000BCA - "\v\xc7\v\xbe\x00\x00\v\xcb" + // 0x0BC70BBE: 0x00000BCB - "\v\xc6\v\xd7\x00\x00\v\xcc" + // 0x0BC60BD7: 0x00000BCC - "\fF\fV\x00\x00\fH" + // 0x0C460C56: 0x00000C48 - "\f\xbf\f\xd5\x00\x00\f\xc0" + // 0x0CBF0CD5: 0x00000CC0 - "\f\xc6\f\xd5\x00\x00\f\xc7" + // 0x0CC60CD5: 0x00000CC7 - "\f\xc6\f\xd6\x00\x00\f\xc8" + // 0x0CC60CD6: 0x00000CC8 - "\f\xc6\f\xc2\x00\x00\f\xca" + // 0x0CC60CC2: 0x00000CCA - "\f\xca\f\xd5\x00\x00\f\xcb" + // 0x0CCA0CD5: 0x00000CCB - "\rF\r>\x00\x00\rJ" + // 0x0D460D3E: 0x00000D4A - "\rG\r>\x00\x00\rK" + // 0x0D470D3E: 0x00000D4B - "\rF\rW\x00\x00\rL" + // 0x0D460D57: 0x00000D4C - "\r\xd9\r\xca\x00\x00\r\xda" + // 0x0DD90DCA: 0x00000DDA - "\r\xd9\r\xcf\x00\x00\r\xdc" + // 0x0DD90DCF: 0x00000DDC - "\r\xdc\r\xca\x00\x00\r\xdd" + // 0x0DDC0DCA: 0x00000DDD - "\r\xd9\r\xdf\x00\x00\r\xde" + // 0x0DD90DDF: 0x00000DDE - "\x10%\x10.\x00\x00\x10&" + // 0x1025102E: 0x00001026 - "\x1b\x05\x1b5\x00\x00\x1b\x06" + // 0x1B051B35: 0x00001B06 - "\x1b\a\x1b5\x00\x00\x1b\b" + // 0x1B071B35: 0x00001B08 - "\x1b\t\x1b5\x00\x00\x1b\n" + // 0x1B091B35: 0x00001B0A - "\x1b\v\x1b5\x00\x00\x1b\f" + // 0x1B0B1B35: 0x00001B0C - "\x1b\r\x1b5\x00\x00\x1b\x0e" + // 0x1B0D1B35: 0x00001B0E - "\x1b\x11\x1b5\x00\x00\x1b\x12" + // 0x1B111B35: 0x00001B12 - "\x1b:\x1b5\x00\x00\x1b;" + // 0x1B3A1B35: 0x00001B3B - "\x1b<\x1b5\x00\x00\x1b=" + // 0x1B3C1B35: 0x00001B3D - "\x1b>\x1b5\x00\x00\x1b@" + // 0x1B3E1B35: 0x00001B40 - "\x1b?\x1b5\x00\x00\x1bA" + // 0x1B3F1B35: 0x00001B41 - "\x1bB\x1b5\x00\x00\x1bC" + // 0x1B421B35: 0x00001B43 - "\x00A\x03%\x00\x00\x1e\x00" + // 0x00410325: 0x00001E00 - "\x00a\x03%\x00\x00\x1e\x01" + // 0x00610325: 0x00001E01 - "\x00B\x03\a\x00\x00\x1e\x02" + // 0x00420307: 0x00001E02 - "\x00b\x03\a\x00\x00\x1e\x03" + // 0x00620307: 0x00001E03 - "\x00B\x03#\x00\x00\x1e\x04" + // 0x00420323: 0x00001E04 - "\x00b\x03#\x00\x00\x1e\x05" + // 0x00620323: 0x00001E05 - "\x00B\x031\x00\x00\x1e\x06" + // 0x00420331: 0x00001E06 - "\x00b\x031\x00\x00\x1e\a" + // 0x00620331: 0x00001E07 - "\x00\xc7\x03\x01\x00\x00\x1e\b" + // 0x00C70301: 0x00001E08 - "\x00\xe7\x03\x01\x00\x00\x1e\t" + // 0x00E70301: 0x00001E09 - "\x00D\x03\a\x00\x00\x1e\n" + // 0x00440307: 0x00001E0A - "\x00d\x03\a\x00\x00\x1e\v" + // 0x00640307: 0x00001E0B - "\x00D\x03#\x00\x00\x1e\f" + // 0x00440323: 0x00001E0C - "\x00d\x03#\x00\x00\x1e\r" + // 0x00640323: 0x00001E0D - "\x00D\x031\x00\x00\x1e\x0e" + // 0x00440331: 0x00001E0E - "\x00d\x031\x00\x00\x1e\x0f" + // 0x00640331: 0x00001E0F - "\x00D\x03'\x00\x00\x1e\x10" + // 0x00440327: 0x00001E10 - "\x00d\x03'\x00\x00\x1e\x11" + // 0x00640327: 0x00001E11 - "\x00D\x03-\x00\x00\x1e\x12" + // 0x0044032D: 0x00001E12 - "\x00d\x03-\x00\x00\x1e\x13" + // 0x0064032D: 0x00001E13 - "\x01\x12\x03\x00\x00\x00\x1e\x14" + // 0x01120300: 0x00001E14 - "\x01\x13\x03\x00\x00\x00\x1e\x15" + // 0x01130300: 0x00001E15 - "\x01\x12\x03\x01\x00\x00\x1e\x16" + // 0x01120301: 0x00001E16 - "\x01\x13\x03\x01\x00\x00\x1e\x17" + // 0x01130301: 0x00001E17 - "\x00E\x03-\x00\x00\x1e\x18" + // 0x0045032D: 0x00001E18 - "\x00e\x03-\x00\x00\x1e\x19" + // 0x0065032D: 0x00001E19 - "\x00E\x030\x00\x00\x1e\x1a" + // 0x00450330: 0x00001E1A - "\x00e\x030\x00\x00\x1e\x1b" + // 0x00650330: 0x00001E1B - "\x02(\x03\x06\x00\x00\x1e\x1c" + // 0x02280306: 0x00001E1C - "\x02)\x03\x06\x00\x00\x1e\x1d" + // 0x02290306: 0x00001E1D - "\x00F\x03\a\x00\x00\x1e\x1e" + // 0x00460307: 0x00001E1E - "\x00f\x03\a\x00\x00\x1e\x1f" + // 0x00660307: 0x00001E1F - "\x00G\x03\x04\x00\x00\x1e " + // 0x00470304: 0x00001E20 - "\x00g\x03\x04\x00\x00\x1e!" + // 0x00670304: 0x00001E21 - "\x00H\x03\a\x00\x00\x1e\"" + // 0x00480307: 0x00001E22 - "\x00h\x03\a\x00\x00\x1e#" + // 0x00680307: 0x00001E23 - "\x00H\x03#\x00\x00\x1e$" + // 0x00480323: 0x00001E24 - "\x00h\x03#\x00\x00\x1e%" + // 0x00680323: 0x00001E25 - "\x00H\x03\b\x00\x00\x1e&" + // 0x00480308: 0x00001E26 - "\x00h\x03\b\x00\x00\x1e'" + // 0x00680308: 0x00001E27 - "\x00H\x03'\x00\x00\x1e(" + // 0x00480327: 0x00001E28 - "\x00h\x03'\x00\x00\x1e)" + // 0x00680327: 0x00001E29 - "\x00H\x03.\x00\x00\x1e*" + // 0x0048032E: 0x00001E2A - "\x00h\x03.\x00\x00\x1e+" + // 0x0068032E: 0x00001E2B - "\x00I\x030\x00\x00\x1e," + // 0x00490330: 0x00001E2C - "\x00i\x030\x00\x00\x1e-" + // 0x00690330: 0x00001E2D - "\x00\xcf\x03\x01\x00\x00\x1e." + // 0x00CF0301: 0x00001E2E - "\x00\xef\x03\x01\x00\x00\x1e/" + // 0x00EF0301: 0x00001E2F - "\x00K\x03\x01\x00\x00\x1e0" + // 0x004B0301: 0x00001E30 - "\x00k\x03\x01\x00\x00\x1e1" + // 0x006B0301: 0x00001E31 - "\x00K\x03#\x00\x00\x1e2" + // 0x004B0323: 0x00001E32 - "\x00k\x03#\x00\x00\x1e3" + // 0x006B0323: 0x00001E33 - "\x00K\x031\x00\x00\x1e4" + // 0x004B0331: 0x00001E34 - "\x00k\x031\x00\x00\x1e5" + // 0x006B0331: 0x00001E35 - "\x00L\x03#\x00\x00\x1e6" + // 0x004C0323: 0x00001E36 - "\x00l\x03#\x00\x00\x1e7" + // 0x006C0323: 0x00001E37 - "\x1e6\x03\x04\x00\x00\x1e8" + // 0x1E360304: 0x00001E38 - "\x1e7\x03\x04\x00\x00\x1e9" + // 0x1E370304: 0x00001E39 - "\x00L\x031\x00\x00\x1e:" + // 0x004C0331: 0x00001E3A - "\x00l\x031\x00\x00\x1e;" + // 0x006C0331: 0x00001E3B - "\x00L\x03-\x00\x00\x1e<" + // 0x004C032D: 0x00001E3C - "\x00l\x03-\x00\x00\x1e=" + // 0x006C032D: 0x00001E3D - "\x00M\x03\x01\x00\x00\x1e>" + // 0x004D0301: 0x00001E3E - "\x00m\x03\x01\x00\x00\x1e?" + // 0x006D0301: 0x00001E3F - "\x00M\x03\a\x00\x00\x1e@" + // 0x004D0307: 0x00001E40 - "\x00m\x03\a\x00\x00\x1eA" + // 0x006D0307: 0x00001E41 - "\x00M\x03#\x00\x00\x1eB" + // 0x004D0323: 0x00001E42 - "\x00m\x03#\x00\x00\x1eC" + // 0x006D0323: 0x00001E43 - "\x00N\x03\a\x00\x00\x1eD" + // 0x004E0307: 0x00001E44 - "\x00n\x03\a\x00\x00\x1eE" + // 0x006E0307: 0x00001E45 - "\x00N\x03#\x00\x00\x1eF" + // 0x004E0323: 0x00001E46 - "\x00n\x03#\x00\x00\x1eG" + // 0x006E0323: 0x00001E47 - "\x00N\x031\x00\x00\x1eH" + // 0x004E0331: 0x00001E48 - "\x00n\x031\x00\x00\x1eI" + // 0x006E0331: 0x00001E49 - "\x00N\x03-\x00\x00\x1eJ" + // 0x004E032D: 0x00001E4A - "\x00n\x03-\x00\x00\x1eK" + // 0x006E032D: 0x00001E4B - "\x00\xd5\x03\x01\x00\x00\x1eL" + // 0x00D50301: 0x00001E4C - "\x00\xf5\x03\x01\x00\x00\x1eM" + // 0x00F50301: 0x00001E4D - "\x00\xd5\x03\b\x00\x00\x1eN" + // 0x00D50308: 0x00001E4E - "\x00\xf5\x03\b\x00\x00\x1eO" + // 0x00F50308: 0x00001E4F - "\x01L\x03\x00\x00\x00\x1eP" + // 0x014C0300: 0x00001E50 - "\x01M\x03\x00\x00\x00\x1eQ" + // 0x014D0300: 0x00001E51 - "\x01L\x03\x01\x00\x00\x1eR" + // 0x014C0301: 0x00001E52 - "\x01M\x03\x01\x00\x00\x1eS" + // 0x014D0301: 0x00001E53 - "\x00P\x03\x01\x00\x00\x1eT" + // 0x00500301: 0x00001E54 - "\x00p\x03\x01\x00\x00\x1eU" + // 0x00700301: 0x00001E55 - "\x00P\x03\a\x00\x00\x1eV" + // 0x00500307: 0x00001E56 - "\x00p\x03\a\x00\x00\x1eW" + // 0x00700307: 0x00001E57 - "\x00R\x03\a\x00\x00\x1eX" + // 0x00520307: 0x00001E58 - "\x00r\x03\a\x00\x00\x1eY" + // 0x00720307: 0x00001E59 - "\x00R\x03#\x00\x00\x1eZ" + // 0x00520323: 0x00001E5A - "\x00r\x03#\x00\x00\x1e[" + // 0x00720323: 0x00001E5B - "\x1eZ\x03\x04\x00\x00\x1e\\" + // 0x1E5A0304: 0x00001E5C - "\x1e[\x03\x04\x00\x00\x1e]" + // 0x1E5B0304: 0x00001E5D - "\x00R\x031\x00\x00\x1e^" + // 0x00520331: 0x00001E5E - "\x00r\x031\x00\x00\x1e_" + // 0x00720331: 0x00001E5F - "\x00S\x03\a\x00\x00\x1e`" + // 0x00530307: 0x00001E60 - "\x00s\x03\a\x00\x00\x1ea" + // 0x00730307: 0x00001E61 - "\x00S\x03#\x00\x00\x1eb" + // 0x00530323: 0x00001E62 - "\x00s\x03#\x00\x00\x1ec" + // 0x00730323: 0x00001E63 - "\x01Z\x03\a\x00\x00\x1ed" + // 0x015A0307: 0x00001E64 - "\x01[\x03\a\x00\x00\x1ee" + // 0x015B0307: 0x00001E65 - "\x01`\x03\a\x00\x00\x1ef" + // 0x01600307: 0x00001E66 - "\x01a\x03\a\x00\x00\x1eg" + // 0x01610307: 0x00001E67 - "\x1eb\x03\a\x00\x00\x1eh" + // 0x1E620307: 0x00001E68 - "\x1ec\x03\a\x00\x00\x1ei" + // 0x1E630307: 0x00001E69 - "\x00T\x03\a\x00\x00\x1ej" + // 0x00540307: 0x00001E6A - "\x00t\x03\a\x00\x00\x1ek" + // 0x00740307: 0x00001E6B - "\x00T\x03#\x00\x00\x1el" + // 0x00540323: 0x00001E6C - "\x00t\x03#\x00\x00\x1em" + // 0x00740323: 0x00001E6D - "\x00T\x031\x00\x00\x1en" + // 0x00540331: 0x00001E6E - "\x00t\x031\x00\x00\x1eo" + // 0x00740331: 0x00001E6F - "\x00T\x03-\x00\x00\x1ep" + // 0x0054032D: 0x00001E70 - "\x00t\x03-\x00\x00\x1eq" + // 0x0074032D: 0x00001E71 - "\x00U\x03$\x00\x00\x1er" + // 0x00550324: 0x00001E72 - "\x00u\x03$\x00\x00\x1es" + // 0x00750324: 0x00001E73 - "\x00U\x030\x00\x00\x1et" + // 0x00550330: 0x00001E74 - "\x00u\x030\x00\x00\x1eu" + // 0x00750330: 0x00001E75 - "\x00U\x03-\x00\x00\x1ev" + // 0x0055032D: 0x00001E76 - "\x00u\x03-\x00\x00\x1ew" + // 0x0075032D: 0x00001E77 - "\x01h\x03\x01\x00\x00\x1ex" + // 0x01680301: 0x00001E78 - "\x01i\x03\x01\x00\x00\x1ey" + // 0x01690301: 0x00001E79 - "\x01j\x03\b\x00\x00\x1ez" + // 0x016A0308: 0x00001E7A - "\x01k\x03\b\x00\x00\x1e{" + // 0x016B0308: 0x00001E7B - "\x00V\x03\x03\x00\x00\x1e|" + // 0x00560303: 0x00001E7C - "\x00v\x03\x03\x00\x00\x1e}" + // 0x00760303: 0x00001E7D - "\x00V\x03#\x00\x00\x1e~" + // 0x00560323: 0x00001E7E - "\x00v\x03#\x00\x00\x1e\u007f" + // 0x00760323: 0x00001E7F - "\x00W\x03\x00\x00\x00\x1e\x80" + // 0x00570300: 0x00001E80 - "\x00w\x03\x00\x00\x00\x1e\x81" + // 0x00770300: 0x00001E81 - "\x00W\x03\x01\x00\x00\x1e\x82" + // 0x00570301: 0x00001E82 - "\x00w\x03\x01\x00\x00\x1e\x83" + // 0x00770301: 0x00001E83 - "\x00W\x03\b\x00\x00\x1e\x84" + // 0x00570308: 0x00001E84 - "\x00w\x03\b\x00\x00\x1e\x85" + // 0x00770308: 0x00001E85 - "\x00W\x03\a\x00\x00\x1e\x86" + // 0x00570307: 0x00001E86 - "\x00w\x03\a\x00\x00\x1e\x87" + // 0x00770307: 0x00001E87 - "\x00W\x03#\x00\x00\x1e\x88" + // 0x00570323: 0x00001E88 - "\x00w\x03#\x00\x00\x1e\x89" + // 0x00770323: 0x00001E89 - "\x00X\x03\a\x00\x00\x1e\x8a" + // 0x00580307: 0x00001E8A - "\x00x\x03\a\x00\x00\x1e\x8b" + // 0x00780307: 0x00001E8B - "\x00X\x03\b\x00\x00\x1e\x8c" + // 0x00580308: 0x00001E8C - "\x00x\x03\b\x00\x00\x1e\x8d" + // 0x00780308: 0x00001E8D - "\x00Y\x03\a\x00\x00\x1e\x8e" + // 0x00590307: 0x00001E8E - "\x00y\x03\a\x00\x00\x1e\x8f" + // 0x00790307: 0x00001E8F - "\x00Z\x03\x02\x00\x00\x1e\x90" + // 0x005A0302: 0x00001E90 - "\x00z\x03\x02\x00\x00\x1e\x91" + // 0x007A0302: 0x00001E91 - "\x00Z\x03#\x00\x00\x1e\x92" + // 0x005A0323: 0x00001E92 - "\x00z\x03#\x00\x00\x1e\x93" + // 0x007A0323: 0x00001E93 - "\x00Z\x031\x00\x00\x1e\x94" + // 0x005A0331: 0x00001E94 - "\x00z\x031\x00\x00\x1e\x95" + // 0x007A0331: 0x00001E95 - "\x00h\x031\x00\x00\x1e\x96" + // 0x00680331: 0x00001E96 - "\x00t\x03\b\x00\x00\x1e\x97" + // 0x00740308: 0x00001E97 - "\x00w\x03\n\x00\x00\x1e\x98" + // 0x0077030A: 0x00001E98 - "\x00y\x03\n\x00\x00\x1e\x99" + // 0x0079030A: 0x00001E99 - "\x01\u007f\x03\a\x00\x00\x1e\x9b" + // 0x017F0307: 0x00001E9B - "\x00A\x03#\x00\x00\x1e\xa0" + // 0x00410323: 0x00001EA0 - "\x00a\x03#\x00\x00\x1e\xa1" + // 0x00610323: 0x00001EA1 - "\x00A\x03\t\x00\x00\x1e\xa2" + // 0x00410309: 0x00001EA2 - "\x00a\x03\t\x00\x00\x1e\xa3" + // 0x00610309: 0x00001EA3 - "\x00\xc2\x03\x01\x00\x00\x1e\xa4" + // 0x00C20301: 0x00001EA4 - "\x00\xe2\x03\x01\x00\x00\x1e\xa5" + // 0x00E20301: 0x00001EA5 - "\x00\xc2\x03\x00\x00\x00\x1e\xa6" + // 0x00C20300: 0x00001EA6 - "\x00\xe2\x03\x00\x00\x00\x1e\xa7" + // 0x00E20300: 0x00001EA7 - "\x00\xc2\x03\t\x00\x00\x1e\xa8" + // 0x00C20309: 0x00001EA8 - "\x00\xe2\x03\t\x00\x00\x1e\xa9" + // 0x00E20309: 0x00001EA9 - "\x00\xc2\x03\x03\x00\x00\x1e\xaa" + // 0x00C20303: 0x00001EAA - "\x00\xe2\x03\x03\x00\x00\x1e\xab" + // 0x00E20303: 0x00001EAB - "\x1e\xa0\x03\x02\x00\x00\x1e\xac" + // 0x1EA00302: 0x00001EAC - "\x1e\xa1\x03\x02\x00\x00\x1e\xad" + // 0x1EA10302: 0x00001EAD - "\x01\x02\x03\x01\x00\x00\x1e\xae" + // 0x01020301: 0x00001EAE - "\x01\x03\x03\x01\x00\x00\x1e\xaf" + // 0x01030301: 0x00001EAF - "\x01\x02\x03\x00\x00\x00\x1e\xb0" + // 0x01020300: 0x00001EB0 - "\x01\x03\x03\x00\x00\x00\x1e\xb1" + // 0x01030300: 0x00001EB1 - "\x01\x02\x03\t\x00\x00\x1e\xb2" + // 0x01020309: 0x00001EB2 - "\x01\x03\x03\t\x00\x00\x1e\xb3" + // 0x01030309: 0x00001EB3 - "\x01\x02\x03\x03\x00\x00\x1e\xb4" + // 0x01020303: 0x00001EB4 - "\x01\x03\x03\x03\x00\x00\x1e\xb5" + // 0x01030303: 0x00001EB5 - "\x1e\xa0\x03\x06\x00\x00\x1e\xb6" + // 0x1EA00306: 0x00001EB6 - "\x1e\xa1\x03\x06\x00\x00\x1e\xb7" + // 0x1EA10306: 0x00001EB7 - "\x00E\x03#\x00\x00\x1e\xb8" + // 0x00450323: 0x00001EB8 - "\x00e\x03#\x00\x00\x1e\xb9" + // 0x00650323: 0x00001EB9 - "\x00E\x03\t\x00\x00\x1e\xba" + // 0x00450309: 0x00001EBA - "\x00e\x03\t\x00\x00\x1e\xbb" + // 0x00650309: 0x00001EBB - "\x00E\x03\x03\x00\x00\x1e\xbc" + // 0x00450303: 0x00001EBC - "\x00e\x03\x03\x00\x00\x1e\xbd" + // 0x00650303: 0x00001EBD - "\x00\xca\x03\x01\x00\x00\x1e\xbe" + // 0x00CA0301: 0x00001EBE - "\x00\xea\x03\x01\x00\x00\x1e\xbf" + // 0x00EA0301: 0x00001EBF - "\x00\xca\x03\x00\x00\x00\x1e\xc0" + // 0x00CA0300: 0x00001EC0 - "\x00\xea\x03\x00\x00\x00\x1e\xc1" + // 0x00EA0300: 0x00001EC1 - "\x00\xca\x03\t\x00\x00\x1e\xc2" + // 0x00CA0309: 0x00001EC2 - "\x00\xea\x03\t\x00\x00\x1e\xc3" + // 0x00EA0309: 0x00001EC3 - "\x00\xca\x03\x03\x00\x00\x1e\xc4" + // 0x00CA0303: 0x00001EC4 - "\x00\xea\x03\x03\x00\x00\x1e\xc5" + // 0x00EA0303: 0x00001EC5 - "\x1e\xb8\x03\x02\x00\x00\x1e\xc6" + // 0x1EB80302: 0x00001EC6 - "\x1e\xb9\x03\x02\x00\x00\x1e\xc7" + // 0x1EB90302: 0x00001EC7 - "\x00I\x03\t\x00\x00\x1e\xc8" + // 0x00490309: 0x00001EC8 - "\x00i\x03\t\x00\x00\x1e\xc9" + // 0x00690309: 0x00001EC9 - "\x00I\x03#\x00\x00\x1e\xca" + // 0x00490323: 0x00001ECA - "\x00i\x03#\x00\x00\x1e\xcb" + // 0x00690323: 0x00001ECB - "\x00O\x03#\x00\x00\x1e\xcc" + // 0x004F0323: 0x00001ECC - "\x00o\x03#\x00\x00\x1e\xcd" + // 0x006F0323: 0x00001ECD - "\x00O\x03\t\x00\x00\x1e\xce" + // 0x004F0309: 0x00001ECE - "\x00o\x03\t\x00\x00\x1e\xcf" + // 0x006F0309: 0x00001ECF - "\x00\xd4\x03\x01\x00\x00\x1e\xd0" + // 0x00D40301: 0x00001ED0 - "\x00\xf4\x03\x01\x00\x00\x1e\xd1" + // 0x00F40301: 0x00001ED1 - "\x00\xd4\x03\x00\x00\x00\x1e\xd2" + // 0x00D40300: 0x00001ED2 - "\x00\xf4\x03\x00\x00\x00\x1e\xd3" + // 0x00F40300: 0x00001ED3 - "\x00\xd4\x03\t\x00\x00\x1e\xd4" + // 0x00D40309: 0x00001ED4 - "\x00\xf4\x03\t\x00\x00\x1e\xd5" + // 0x00F40309: 0x00001ED5 - "\x00\xd4\x03\x03\x00\x00\x1e\xd6" + // 0x00D40303: 0x00001ED6 - "\x00\xf4\x03\x03\x00\x00\x1e\xd7" + // 0x00F40303: 0x00001ED7 - "\x1e\xcc\x03\x02\x00\x00\x1e\xd8" + // 0x1ECC0302: 0x00001ED8 - "\x1e\xcd\x03\x02\x00\x00\x1e\xd9" + // 0x1ECD0302: 0x00001ED9 - "\x01\xa0\x03\x01\x00\x00\x1e\xda" + // 0x01A00301: 0x00001EDA - "\x01\xa1\x03\x01\x00\x00\x1e\xdb" + // 0x01A10301: 0x00001EDB - "\x01\xa0\x03\x00\x00\x00\x1e\xdc" + // 0x01A00300: 0x00001EDC - "\x01\xa1\x03\x00\x00\x00\x1e\xdd" + // 0x01A10300: 0x00001EDD - "\x01\xa0\x03\t\x00\x00\x1e\xde" + // 0x01A00309: 0x00001EDE - "\x01\xa1\x03\t\x00\x00\x1e\xdf" + // 0x01A10309: 0x00001EDF - "\x01\xa0\x03\x03\x00\x00\x1e\xe0" + // 0x01A00303: 0x00001EE0 - "\x01\xa1\x03\x03\x00\x00\x1e\xe1" + // 0x01A10303: 0x00001EE1 - "\x01\xa0\x03#\x00\x00\x1e\xe2" + // 0x01A00323: 0x00001EE2 - "\x01\xa1\x03#\x00\x00\x1e\xe3" + // 0x01A10323: 0x00001EE3 - "\x00U\x03#\x00\x00\x1e\xe4" + // 0x00550323: 0x00001EE4 - "\x00u\x03#\x00\x00\x1e\xe5" + // 0x00750323: 0x00001EE5 - "\x00U\x03\t\x00\x00\x1e\xe6" + // 0x00550309: 0x00001EE6 - "\x00u\x03\t\x00\x00\x1e\xe7" + // 0x00750309: 0x00001EE7 - "\x01\xaf\x03\x01\x00\x00\x1e\xe8" + // 0x01AF0301: 0x00001EE8 - "\x01\xb0\x03\x01\x00\x00\x1e\xe9" + // 0x01B00301: 0x00001EE9 - "\x01\xaf\x03\x00\x00\x00\x1e\xea" + // 0x01AF0300: 0x00001EEA - "\x01\xb0\x03\x00\x00\x00\x1e\xeb" + // 0x01B00300: 0x00001EEB - "\x01\xaf\x03\t\x00\x00\x1e\xec" + // 0x01AF0309: 0x00001EEC - "\x01\xb0\x03\t\x00\x00\x1e\xed" + // 0x01B00309: 0x00001EED - "\x01\xaf\x03\x03\x00\x00\x1e\xee" + // 0x01AF0303: 0x00001EEE - "\x01\xb0\x03\x03\x00\x00\x1e\xef" + // 0x01B00303: 0x00001EEF - "\x01\xaf\x03#\x00\x00\x1e\xf0" + // 0x01AF0323: 0x00001EF0 - "\x01\xb0\x03#\x00\x00\x1e\xf1" + // 0x01B00323: 0x00001EF1 - "\x00Y\x03\x00\x00\x00\x1e\xf2" + // 0x00590300: 0x00001EF2 - "\x00y\x03\x00\x00\x00\x1e\xf3" + // 0x00790300: 0x00001EF3 - "\x00Y\x03#\x00\x00\x1e\xf4" + // 0x00590323: 0x00001EF4 - "\x00y\x03#\x00\x00\x1e\xf5" + // 0x00790323: 0x00001EF5 - "\x00Y\x03\t\x00\x00\x1e\xf6" + // 0x00590309: 0x00001EF6 - "\x00y\x03\t\x00\x00\x1e\xf7" + // 0x00790309: 0x00001EF7 - "\x00Y\x03\x03\x00\x00\x1e\xf8" + // 0x00590303: 0x00001EF8 - "\x00y\x03\x03\x00\x00\x1e\xf9" + // 0x00790303: 0x00001EF9 - "\x03\xb1\x03\x13\x00\x00\x1f\x00" + // 0x03B10313: 0x00001F00 - "\x03\xb1\x03\x14\x00\x00\x1f\x01" + // 0x03B10314: 0x00001F01 - "\x1f\x00\x03\x00\x00\x00\x1f\x02" + // 0x1F000300: 0x00001F02 - "\x1f\x01\x03\x00\x00\x00\x1f\x03" + // 0x1F010300: 0x00001F03 - "\x1f\x00\x03\x01\x00\x00\x1f\x04" + // 0x1F000301: 0x00001F04 - "\x1f\x01\x03\x01\x00\x00\x1f\x05" + // 0x1F010301: 0x00001F05 - "\x1f\x00\x03B\x00\x00\x1f\x06" + // 0x1F000342: 0x00001F06 - "\x1f\x01\x03B\x00\x00\x1f\a" + // 0x1F010342: 0x00001F07 - "\x03\x91\x03\x13\x00\x00\x1f\b" + // 0x03910313: 0x00001F08 - "\x03\x91\x03\x14\x00\x00\x1f\t" + // 0x03910314: 0x00001F09 - "\x1f\b\x03\x00\x00\x00\x1f\n" + // 0x1F080300: 0x00001F0A - "\x1f\t\x03\x00\x00\x00\x1f\v" + // 0x1F090300: 0x00001F0B - "\x1f\b\x03\x01\x00\x00\x1f\f" + // 0x1F080301: 0x00001F0C - "\x1f\t\x03\x01\x00\x00\x1f\r" + // 0x1F090301: 0x00001F0D - "\x1f\b\x03B\x00\x00\x1f\x0e" + // 0x1F080342: 0x00001F0E - "\x1f\t\x03B\x00\x00\x1f\x0f" + // 0x1F090342: 0x00001F0F - "\x03\xb5\x03\x13\x00\x00\x1f\x10" + // 0x03B50313: 0x00001F10 - "\x03\xb5\x03\x14\x00\x00\x1f\x11" + // 0x03B50314: 0x00001F11 - "\x1f\x10\x03\x00\x00\x00\x1f\x12" + // 0x1F100300: 0x00001F12 - "\x1f\x11\x03\x00\x00\x00\x1f\x13" + // 0x1F110300: 0x00001F13 - "\x1f\x10\x03\x01\x00\x00\x1f\x14" + // 0x1F100301: 0x00001F14 - "\x1f\x11\x03\x01\x00\x00\x1f\x15" + // 0x1F110301: 0x00001F15 - "\x03\x95\x03\x13\x00\x00\x1f\x18" + // 0x03950313: 0x00001F18 - "\x03\x95\x03\x14\x00\x00\x1f\x19" + // 0x03950314: 0x00001F19 - "\x1f\x18\x03\x00\x00\x00\x1f\x1a" + // 0x1F180300: 0x00001F1A - "\x1f\x19\x03\x00\x00\x00\x1f\x1b" + // 0x1F190300: 0x00001F1B - "\x1f\x18\x03\x01\x00\x00\x1f\x1c" + // 0x1F180301: 0x00001F1C - "\x1f\x19\x03\x01\x00\x00\x1f\x1d" + // 0x1F190301: 0x00001F1D - "\x03\xb7\x03\x13\x00\x00\x1f " + // 0x03B70313: 0x00001F20 - "\x03\xb7\x03\x14\x00\x00\x1f!" + // 0x03B70314: 0x00001F21 - "\x1f \x03\x00\x00\x00\x1f\"" + // 0x1F200300: 0x00001F22 - "\x1f!\x03\x00\x00\x00\x1f#" + // 0x1F210300: 0x00001F23 - "\x1f \x03\x01\x00\x00\x1f$" + // 0x1F200301: 0x00001F24 - "\x1f!\x03\x01\x00\x00\x1f%" + // 0x1F210301: 0x00001F25 - "\x1f \x03B\x00\x00\x1f&" + // 0x1F200342: 0x00001F26 - "\x1f!\x03B\x00\x00\x1f'" + // 0x1F210342: 0x00001F27 - "\x03\x97\x03\x13\x00\x00\x1f(" + // 0x03970313: 0x00001F28 - "\x03\x97\x03\x14\x00\x00\x1f)" + // 0x03970314: 0x00001F29 - "\x1f(\x03\x00\x00\x00\x1f*" + // 0x1F280300: 0x00001F2A - "\x1f)\x03\x00\x00\x00\x1f+" + // 0x1F290300: 0x00001F2B - "\x1f(\x03\x01\x00\x00\x1f," + // 0x1F280301: 0x00001F2C - "\x1f)\x03\x01\x00\x00\x1f-" + // 0x1F290301: 0x00001F2D - "\x1f(\x03B\x00\x00\x1f." + // 0x1F280342: 0x00001F2E - "\x1f)\x03B\x00\x00\x1f/" + // 0x1F290342: 0x00001F2F - "\x03\xb9\x03\x13\x00\x00\x1f0" + // 0x03B90313: 0x00001F30 - "\x03\xb9\x03\x14\x00\x00\x1f1" + // 0x03B90314: 0x00001F31 - "\x1f0\x03\x00\x00\x00\x1f2" + // 0x1F300300: 0x00001F32 - "\x1f1\x03\x00\x00\x00\x1f3" + // 0x1F310300: 0x00001F33 - "\x1f0\x03\x01\x00\x00\x1f4" + // 0x1F300301: 0x00001F34 - "\x1f1\x03\x01\x00\x00\x1f5" + // 0x1F310301: 0x00001F35 - "\x1f0\x03B\x00\x00\x1f6" + // 0x1F300342: 0x00001F36 - "\x1f1\x03B\x00\x00\x1f7" + // 0x1F310342: 0x00001F37 - "\x03\x99\x03\x13\x00\x00\x1f8" + // 0x03990313: 0x00001F38 - "\x03\x99\x03\x14\x00\x00\x1f9" + // 0x03990314: 0x00001F39 - "\x1f8\x03\x00\x00\x00\x1f:" + // 0x1F380300: 0x00001F3A - "\x1f9\x03\x00\x00\x00\x1f;" + // 0x1F390300: 0x00001F3B - "\x1f8\x03\x01\x00\x00\x1f<" + // 0x1F380301: 0x00001F3C - "\x1f9\x03\x01\x00\x00\x1f=" + // 0x1F390301: 0x00001F3D - "\x1f8\x03B\x00\x00\x1f>" + // 0x1F380342: 0x00001F3E - "\x1f9\x03B\x00\x00\x1f?" + // 0x1F390342: 0x00001F3F - "\x03\xbf\x03\x13\x00\x00\x1f@" + // 0x03BF0313: 0x00001F40 - "\x03\xbf\x03\x14\x00\x00\x1fA" + // 0x03BF0314: 0x00001F41 - "\x1f@\x03\x00\x00\x00\x1fB" + // 0x1F400300: 0x00001F42 - "\x1fA\x03\x00\x00\x00\x1fC" + // 0x1F410300: 0x00001F43 - "\x1f@\x03\x01\x00\x00\x1fD" + // 0x1F400301: 0x00001F44 - "\x1fA\x03\x01\x00\x00\x1fE" + // 0x1F410301: 0x00001F45 - "\x03\x9f\x03\x13\x00\x00\x1fH" + // 0x039F0313: 0x00001F48 - "\x03\x9f\x03\x14\x00\x00\x1fI" + // 0x039F0314: 0x00001F49 - "\x1fH\x03\x00\x00\x00\x1fJ" + // 0x1F480300: 0x00001F4A - "\x1fI\x03\x00\x00\x00\x1fK" + // 0x1F490300: 0x00001F4B - "\x1fH\x03\x01\x00\x00\x1fL" + // 0x1F480301: 0x00001F4C - "\x1fI\x03\x01\x00\x00\x1fM" + // 0x1F490301: 0x00001F4D - "\x03\xc5\x03\x13\x00\x00\x1fP" + // 0x03C50313: 0x00001F50 - "\x03\xc5\x03\x14\x00\x00\x1fQ" + // 0x03C50314: 0x00001F51 - "\x1fP\x03\x00\x00\x00\x1fR" + // 0x1F500300: 0x00001F52 - "\x1fQ\x03\x00\x00\x00\x1fS" + // 0x1F510300: 0x00001F53 - "\x1fP\x03\x01\x00\x00\x1fT" + // 0x1F500301: 0x00001F54 - "\x1fQ\x03\x01\x00\x00\x1fU" + // 0x1F510301: 0x00001F55 - "\x1fP\x03B\x00\x00\x1fV" + // 0x1F500342: 0x00001F56 - "\x1fQ\x03B\x00\x00\x1fW" + // 0x1F510342: 0x00001F57 - "\x03\xa5\x03\x14\x00\x00\x1fY" + // 0x03A50314: 0x00001F59 - "\x1fY\x03\x00\x00\x00\x1f[" + // 0x1F590300: 0x00001F5B - "\x1fY\x03\x01\x00\x00\x1f]" + // 0x1F590301: 0x00001F5D - "\x1fY\x03B\x00\x00\x1f_" + // 0x1F590342: 0x00001F5F - "\x03\xc9\x03\x13\x00\x00\x1f`" + // 0x03C90313: 0x00001F60 - "\x03\xc9\x03\x14\x00\x00\x1fa" + // 0x03C90314: 0x00001F61 - "\x1f`\x03\x00\x00\x00\x1fb" + // 0x1F600300: 0x00001F62 - "\x1fa\x03\x00\x00\x00\x1fc" + // 0x1F610300: 0x00001F63 - "\x1f`\x03\x01\x00\x00\x1fd" + // 0x1F600301: 0x00001F64 - "\x1fa\x03\x01\x00\x00\x1fe" + // 0x1F610301: 0x00001F65 - "\x1f`\x03B\x00\x00\x1ff" + // 0x1F600342: 0x00001F66 - "\x1fa\x03B\x00\x00\x1fg" + // 0x1F610342: 0x00001F67 - "\x03\xa9\x03\x13\x00\x00\x1fh" + // 0x03A90313: 0x00001F68 - "\x03\xa9\x03\x14\x00\x00\x1fi" + // 0x03A90314: 0x00001F69 - "\x1fh\x03\x00\x00\x00\x1fj" + // 0x1F680300: 0x00001F6A - "\x1fi\x03\x00\x00\x00\x1fk" + // 0x1F690300: 0x00001F6B - "\x1fh\x03\x01\x00\x00\x1fl" + // 0x1F680301: 0x00001F6C - "\x1fi\x03\x01\x00\x00\x1fm" + // 0x1F690301: 0x00001F6D - "\x1fh\x03B\x00\x00\x1fn" + // 0x1F680342: 0x00001F6E - "\x1fi\x03B\x00\x00\x1fo" + // 0x1F690342: 0x00001F6F - "\x03\xb1\x03\x00\x00\x00\x1fp" + // 0x03B10300: 0x00001F70 - "\x03\xb5\x03\x00\x00\x00\x1fr" + // 0x03B50300: 0x00001F72 - "\x03\xb7\x03\x00\x00\x00\x1ft" + // 0x03B70300: 0x00001F74 - "\x03\xb9\x03\x00\x00\x00\x1fv" + // 0x03B90300: 0x00001F76 - "\x03\xbf\x03\x00\x00\x00\x1fx" + // 0x03BF0300: 0x00001F78 - "\x03\xc5\x03\x00\x00\x00\x1fz" + // 0x03C50300: 0x00001F7A - "\x03\xc9\x03\x00\x00\x00\x1f|" + // 0x03C90300: 0x00001F7C - "\x1f\x00\x03E\x00\x00\x1f\x80" + // 0x1F000345: 0x00001F80 - "\x1f\x01\x03E\x00\x00\x1f\x81" + // 0x1F010345: 0x00001F81 - "\x1f\x02\x03E\x00\x00\x1f\x82" + // 0x1F020345: 0x00001F82 - "\x1f\x03\x03E\x00\x00\x1f\x83" + // 0x1F030345: 0x00001F83 - "\x1f\x04\x03E\x00\x00\x1f\x84" + // 0x1F040345: 0x00001F84 - "\x1f\x05\x03E\x00\x00\x1f\x85" + // 0x1F050345: 0x00001F85 - "\x1f\x06\x03E\x00\x00\x1f\x86" + // 0x1F060345: 0x00001F86 - "\x1f\a\x03E\x00\x00\x1f\x87" + // 0x1F070345: 0x00001F87 - "\x1f\b\x03E\x00\x00\x1f\x88" + // 0x1F080345: 0x00001F88 - "\x1f\t\x03E\x00\x00\x1f\x89" + // 0x1F090345: 0x00001F89 - "\x1f\n\x03E\x00\x00\x1f\x8a" + // 0x1F0A0345: 0x00001F8A - "\x1f\v\x03E\x00\x00\x1f\x8b" + // 0x1F0B0345: 0x00001F8B - "\x1f\f\x03E\x00\x00\x1f\x8c" + // 0x1F0C0345: 0x00001F8C - "\x1f\r\x03E\x00\x00\x1f\x8d" + // 0x1F0D0345: 0x00001F8D - "\x1f\x0e\x03E\x00\x00\x1f\x8e" + // 0x1F0E0345: 0x00001F8E - "\x1f\x0f\x03E\x00\x00\x1f\x8f" + // 0x1F0F0345: 0x00001F8F - "\x1f \x03E\x00\x00\x1f\x90" + // 0x1F200345: 0x00001F90 - "\x1f!\x03E\x00\x00\x1f\x91" + // 0x1F210345: 0x00001F91 - "\x1f\"\x03E\x00\x00\x1f\x92" + // 0x1F220345: 0x00001F92 - "\x1f#\x03E\x00\x00\x1f\x93" + // 0x1F230345: 0x00001F93 - "\x1f$\x03E\x00\x00\x1f\x94" + // 0x1F240345: 0x00001F94 - "\x1f%\x03E\x00\x00\x1f\x95" + // 0x1F250345: 0x00001F95 - "\x1f&\x03E\x00\x00\x1f\x96" + // 0x1F260345: 0x00001F96 - "\x1f'\x03E\x00\x00\x1f\x97" + // 0x1F270345: 0x00001F97 - "\x1f(\x03E\x00\x00\x1f\x98" + // 0x1F280345: 0x00001F98 - "\x1f)\x03E\x00\x00\x1f\x99" + // 0x1F290345: 0x00001F99 - "\x1f*\x03E\x00\x00\x1f\x9a" + // 0x1F2A0345: 0x00001F9A - "\x1f+\x03E\x00\x00\x1f\x9b" + // 0x1F2B0345: 0x00001F9B - "\x1f,\x03E\x00\x00\x1f\x9c" + // 0x1F2C0345: 0x00001F9C - "\x1f-\x03E\x00\x00\x1f\x9d" + // 0x1F2D0345: 0x00001F9D - "\x1f.\x03E\x00\x00\x1f\x9e" + // 0x1F2E0345: 0x00001F9E - "\x1f/\x03E\x00\x00\x1f\x9f" + // 0x1F2F0345: 0x00001F9F - "\x1f`\x03E\x00\x00\x1f\xa0" + // 0x1F600345: 0x00001FA0 - "\x1fa\x03E\x00\x00\x1f\xa1" + // 0x1F610345: 0x00001FA1 - "\x1fb\x03E\x00\x00\x1f\xa2" + // 0x1F620345: 0x00001FA2 - "\x1fc\x03E\x00\x00\x1f\xa3" + // 0x1F630345: 0x00001FA3 - "\x1fd\x03E\x00\x00\x1f\xa4" + // 0x1F640345: 0x00001FA4 - "\x1fe\x03E\x00\x00\x1f\xa5" + // 0x1F650345: 0x00001FA5 - "\x1ff\x03E\x00\x00\x1f\xa6" + // 0x1F660345: 0x00001FA6 - "\x1fg\x03E\x00\x00\x1f\xa7" + // 0x1F670345: 0x00001FA7 - "\x1fh\x03E\x00\x00\x1f\xa8" + // 0x1F680345: 0x00001FA8 - "\x1fi\x03E\x00\x00\x1f\xa9" + // 0x1F690345: 0x00001FA9 - "\x1fj\x03E\x00\x00\x1f\xaa" + // 0x1F6A0345: 0x00001FAA - "\x1fk\x03E\x00\x00\x1f\xab" + // 0x1F6B0345: 0x00001FAB - "\x1fl\x03E\x00\x00\x1f\xac" + // 0x1F6C0345: 0x00001FAC - "\x1fm\x03E\x00\x00\x1f\xad" + // 0x1F6D0345: 0x00001FAD - "\x1fn\x03E\x00\x00\x1f\xae" + // 0x1F6E0345: 0x00001FAE - "\x1fo\x03E\x00\x00\x1f\xaf" + // 0x1F6F0345: 0x00001FAF - "\x03\xb1\x03\x06\x00\x00\x1f\xb0" + // 0x03B10306: 0x00001FB0 - "\x03\xb1\x03\x04\x00\x00\x1f\xb1" + // 0x03B10304: 0x00001FB1 - "\x1fp\x03E\x00\x00\x1f\xb2" + // 0x1F700345: 0x00001FB2 - "\x03\xb1\x03E\x00\x00\x1f\xb3" + // 0x03B10345: 0x00001FB3 - "\x03\xac\x03E\x00\x00\x1f\xb4" + // 0x03AC0345: 0x00001FB4 - "\x03\xb1\x03B\x00\x00\x1f\xb6" + // 0x03B10342: 0x00001FB6 - "\x1f\xb6\x03E\x00\x00\x1f\xb7" + // 0x1FB60345: 0x00001FB7 - "\x03\x91\x03\x06\x00\x00\x1f\xb8" + // 0x03910306: 0x00001FB8 - "\x03\x91\x03\x04\x00\x00\x1f\xb9" + // 0x03910304: 0x00001FB9 - "\x03\x91\x03\x00\x00\x00\x1f\xba" + // 0x03910300: 0x00001FBA - "\x03\x91\x03E\x00\x00\x1f\xbc" + // 0x03910345: 0x00001FBC - "\x00\xa8\x03B\x00\x00\x1f\xc1" + // 0x00A80342: 0x00001FC1 - "\x1ft\x03E\x00\x00\x1f\xc2" + // 0x1F740345: 0x00001FC2 - "\x03\xb7\x03E\x00\x00\x1f\xc3" + // 0x03B70345: 0x00001FC3 - "\x03\xae\x03E\x00\x00\x1f\xc4" + // 0x03AE0345: 0x00001FC4 - "\x03\xb7\x03B\x00\x00\x1f\xc6" + // 0x03B70342: 0x00001FC6 - "\x1f\xc6\x03E\x00\x00\x1f\xc7" + // 0x1FC60345: 0x00001FC7 - "\x03\x95\x03\x00\x00\x00\x1f\xc8" + // 0x03950300: 0x00001FC8 - "\x03\x97\x03\x00\x00\x00\x1f\xca" + // 0x03970300: 0x00001FCA - "\x03\x97\x03E\x00\x00\x1f\xcc" + // 0x03970345: 0x00001FCC - "\x1f\xbf\x03\x00\x00\x00\x1f\xcd" + // 0x1FBF0300: 0x00001FCD - "\x1f\xbf\x03\x01\x00\x00\x1f\xce" + // 0x1FBF0301: 0x00001FCE - "\x1f\xbf\x03B\x00\x00\x1f\xcf" + // 0x1FBF0342: 0x00001FCF - "\x03\xb9\x03\x06\x00\x00\x1f\xd0" + // 0x03B90306: 0x00001FD0 - "\x03\xb9\x03\x04\x00\x00\x1f\xd1" + // 0x03B90304: 0x00001FD1 - "\x03\xca\x03\x00\x00\x00\x1f\xd2" + // 0x03CA0300: 0x00001FD2 - "\x03\xb9\x03B\x00\x00\x1f\xd6" + // 0x03B90342: 0x00001FD6 - "\x03\xca\x03B\x00\x00\x1f\xd7" + // 0x03CA0342: 0x00001FD7 - "\x03\x99\x03\x06\x00\x00\x1f\xd8" + // 0x03990306: 0x00001FD8 - "\x03\x99\x03\x04\x00\x00\x1f\xd9" + // 0x03990304: 0x00001FD9 - "\x03\x99\x03\x00\x00\x00\x1f\xda" + // 0x03990300: 0x00001FDA - "\x1f\xfe\x03\x00\x00\x00\x1f\xdd" + // 0x1FFE0300: 0x00001FDD - "\x1f\xfe\x03\x01\x00\x00\x1f\xde" + // 0x1FFE0301: 0x00001FDE - "\x1f\xfe\x03B\x00\x00\x1f\xdf" + // 0x1FFE0342: 0x00001FDF - "\x03\xc5\x03\x06\x00\x00\x1f\xe0" + // 0x03C50306: 0x00001FE0 - "\x03\xc5\x03\x04\x00\x00\x1f\xe1" + // 0x03C50304: 0x00001FE1 - "\x03\xcb\x03\x00\x00\x00\x1f\xe2" + // 0x03CB0300: 0x00001FE2 - "\x03\xc1\x03\x13\x00\x00\x1f\xe4" + // 0x03C10313: 0x00001FE4 - "\x03\xc1\x03\x14\x00\x00\x1f\xe5" + // 0x03C10314: 0x00001FE5 - "\x03\xc5\x03B\x00\x00\x1f\xe6" + // 0x03C50342: 0x00001FE6 - "\x03\xcb\x03B\x00\x00\x1f\xe7" + // 0x03CB0342: 0x00001FE7 - "\x03\xa5\x03\x06\x00\x00\x1f\xe8" + // 0x03A50306: 0x00001FE8 - "\x03\xa5\x03\x04\x00\x00\x1f\xe9" + // 0x03A50304: 0x00001FE9 - "\x03\xa5\x03\x00\x00\x00\x1f\xea" + // 0x03A50300: 0x00001FEA - "\x03\xa1\x03\x14\x00\x00\x1f\xec" + // 0x03A10314: 0x00001FEC - "\x00\xa8\x03\x00\x00\x00\x1f\xed" + // 0x00A80300: 0x00001FED - "\x1f|\x03E\x00\x00\x1f\xf2" + // 0x1F7C0345: 0x00001FF2 - "\x03\xc9\x03E\x00\x00\x1f\xf3" + // 0x03C90345: 0x00001FF3 - "\x03\xce\x03E\x00\x00\x1f\xf4" + // 0x03CE0345: 0x00001FF4 - "\x03\xc9\x03B\x00\x00\x1f\xf6" + // 0x03C90342: 0x00001FF6 - "\x1f\xf6\x03E\x00\x00\x1f\xf7" + // 0x1FF60345: 0x00001FF7 - "\x03\x9f\x03\x00\x00\x00\x1f\xf8" + // 0x039F0300: 0x00001FF8 - "\x03\xa9\x03\x00\x00\x00\x1f\xfa" + // 0x03A90300: 0x00001FFA - "\x03\xa9\x03E\x00\x00\x1f\xfc" + // 0x03A90345: 0x00001FFC - "!\x90\x038\x00\x00!\x9a" + // 0x21900338: 0x0000219A - "!\x92\x038\x00\x00!\x9b" + // 0x21920338: 0x0000219B - "!\x94\x038\x00\x00!\xae" + // 0x21940338: 0x000021AE - "!\xd0\x038\x00\x00!\xcd" + // 0x21D00338: 0x000021CD - "!\xd4\x038\x00\x00!\xce" + // 0x21D40338: 0x000021CE - "!\xd2\x038\x00\x00!\xcf" + // 0x21D20338: 0x000021CF - "\"\x03\x038\x00\x00\"\x04" + // 0x22030338: 0x00002204 - "\"\b\x038\x00\x00\"\t" + // 0x22080338: 0x00002209 - "\"\v\x038\x00\x00\"\f" + // 0x220B0338: 0x0000220C - "\"#\x038\x00\x00\"$" + // 0x22230338: 0x00002224 - "\"%\x038\x00\x00\"&" + // 0x22250338: 0x00002226 - "\"<\x038\x00\x00\"A" + // 0x223C0338: 0x00002241 - "\"C\x038\x00\x00\"D" + // 0x22430338: 0x00002244 - "\"E\x038\x00\x00\"G" + // 0x22450338: 0x00002247 - "\"H\x038\x00\x00\"I" + // 0x22480338: 0x00002249 - "\x00=\x038\x00\x00\"`" + // 0x003D0338: 0x00002260 - "\"a\x038\x00\x00\"b" + // 0x22610338: 0x00002262 - "\"M\x038\x00\x00\"m" + // 0x224D0338: 0x0000226D - "\x00<\x038\x00\x00\"n" + // 0x003C0338: 0x0000226E - "\x00>\x038\x00\x00\"o" + // 0x003E0338: 0x0000226F - "\"d\x038\x00\x00\"p" + // 0x22640338: 0x00002270 - "\"e\x038\x00\x00\"q" + // 0x22650338: 0x00002271 - "\"r\x038\x00\x00\"t" + // 0x22720338: 0x00002274 - "\"s\x038\x00\x00\"u" + // 0x22730338: 0x00002275 - "\"v\x038\x00\x00\"x" + // 0x22760338: 0x00002278 - "\"w\x038\x00\x00\"y" + // 0x22770338: 0x00002279 - "\"z\x038\x00\x00\"\x80" + // 0x227A0338: 0x00002280 - "\"{\x038\x00\x00\"\x81" + // 0x227B0338: 0x00002281 - "\"\x82\x038\x00\x00\"\x84" + // 0x22820338: 0x00002284 - "\"\x83\x038\x00\x00\"\x85" + // 0x22830338: 0x00002285 - "\"\x86\x038\x00\x00\"\x88" + // 0x22860338: 0x00002288 - "\"\x87\x038\x00\x00\"\x89" + // 0x22870338: 0x00002289 - "\"\xa2\x038\x00\x00\"\xac" + // 0x22A20338: 0x000022AC - "\"\xa8\x038\x00\x00\"\xad" + // 0x22A80338: 0x000022AD - "\"\xa9\x038\x00\x00\"\xae" + // 0x22A90338: 0x000022AE - "\"\xab\x038\x00\x00\"\xaf" + // 0x22AB0338: 0x000022AF - "\"|\x038\x00\x00\"\xe0" + // 0x227C0338: 0x000022E0 - "\"}\x038\x00\x00\"\xe1" + // 0x227D0338: 0x000022E1 - "\"\x91\x038\x00\x00\"\xe2" + // 0x22910338: 0x000022E2 - "\"\x92\x038\x00\x00\"\xe3" + // 0x22920338: 0x000022E3 - "\"\xb2\x038\x00\x00\"\xea" + // 0x22B20338: 0x000022EA - "\"\xb3\x038\x00\x00\"\xeb" + // 0x22B30338: 0x000022EB - "\"\xb4\x038\x00\x00\"\xec" + // 0x22B40338: 0x000022EC - "\"\xb5\x038\x00\x00\"\xed" + // 0x22B50338: 0x000022ED - "0K0\x99\x00\x000L" + // 0x304B3099: 0x0000304C - "0M0\x99\x00\x000N" + // 0x304D3099: 0x0000304E - "0O0\x99\x00\x000P" + // 0x304F3099: 0x00003050 - "0Q0\x99\x00\x000R" + // 0x30513099: 0x00003052 - "0S0\x99\x00\x000T" + // 0x30533099: 0x00003054 - "0U0\x99\x00\x000V" + // 0x30553099: 0x00003056 - "0W0\x99\x00\x000X" + // 0x30573099: 0x00003058 - "0Y0\x99\x00\x000Z" + // 0x30593099: 0x0000305A - "0[0\x99\x00\x000\\" + // 0x305B3099: 0x0000305C - "0]0\x99\x00\x000^" + // 0x305D3099: 0x0000305E - "0_0\x99\x00\x000`" + // 0x305F3099: 0x00003060 - "0a0\x99\x00\x000b" + // 0x30613099: 0x00003062 - "0d0\x99\x00\x000e" + // 0x30643099: 0x00003065 - "0f0\x99\x00\x000g" + // 0x30663099: 0x00003067 - "0h0\x99\x00\x000i" + // 0x30683099: 0x00003069 - "0o0\x99\x00\x000p" + // 0x306F3099: 0x00003070 - "0o0\x9a\x00\x000q" + // 0x306F309A: 0x00003071 - "0r0\x99\x00\x000s" + // 0x30723099: 0x00003073 - "0r0\x9a\x00\x000t" + // 0x3072309A: 0x00003074 - "0u0\x99\x00\x000v" + // 0x30753099: 0x00003076 - "0u0\x9a\x00\x000w" + // 0x3075309A: 0x00003077 - "0x0\x99\x00\x000y" + // 0x30783099: 0x00003079 - "0x0\x9a\x00\x000z" + // 0x3078309A: 0x0000307A - "0{0\x99\x00\x000|" + // 0x307B3099: 0x0000307C - "0{0\x9a\x00\x000}" + // 0x307B309A: 0x0000307D - "0F0\x99\x00\x000\x94" + // 0x30463099: 0x00003094 - "0\x9d0\x99\x00\x000\x9e" + // 0x309D3099: 0x0000309E - "0\xab0\x99\x00\x000\xac" + // 0x30AB3099: 0x000030AC - "0\xad0\x99\x00\x000\xae" + // 0x30AD3099: 0x000030AE - "0\xaf0\x99\x00\x000\xb0" + // 0x30AF3099: 0x000030B0 - "0\xb10\x99\x00\x000\xb2" + // 0x30B13099: 0x000030B2 - "0\xb30\x99\x00\x000\xb4" + // 0x30B33099: 0x000030B4 - "0\xb50\x99\x00\x000\xb6" + // 0x30B53099: 0x000030B6 - "0\xb70\x99\x00\x000\xb8" + // 0x30B73099: 0x000030B8 - "0\xb90\x99\x00\x000\xba" + // 0x30B93099: 0x000030BA - "0\xbb0\x99\x00\x000\xbc" + // 0x30BB3099: 0x000030BC - "0\xbd0\x99\x00\x000\xbe" + // 0x30BD3099: 0x000030BE - "0\xbf0\x99\x00\x000\xc0" + // 0x30BF3099: 0x000030C0 - "0\xc10\x99\x00\x000\xc2" + // 0x30C13099: 0x000030C2 - "0\xc40\x99\x00\x000\xc5" + // 0x30C43099: 0x000030C5 - "0\xc60\x99\x00\x000\xc7" + // 0x30C63099: 0x000030C7 - "0\xc80\x99\x00\x000\xc9" + // 0x30C83099: 0x000030C9 - "0\xcf0\x99\x00\x000\xd0" + // 0x30CF3099: 0x000030D0 - "0\xcf0\x9a\x00\x000\xd1" + // 0x30CF309A: 0x000030D1 - "0\xd20\x99\x00\x000\xd3" + // 0x30D23099: 0x000030D3 - "0\xd20\x9a\x00\x000\xd4" + // 0x30D2309A: 0x000030D4 - "0\xd50\x99\x00\x000\xd6" + // 0x30D53099: 0x000030D6 - "0\xd50\x9a\x00\x000\xd7" + // 0x30D5309A: 0x000030D7 - "0\xd80\x99\x00\x000\xd9" + // 0x30D83099: 0x000030D9 - "0\xd80\x9a\x00\x000\xda" + // 0x30D8309A: 0x000030DA - "0\xdb0\x99\x00\x000\xdc" + // 0x30DB3099: 0x000030DC - "0\xdb0\x9a\x00\x000\xdd" + // 0x30DB309A: 0x000030DD - "0\xa60\x99\x00\x000\xf4" + // 0x30A63099: 0x000030F4 - "0\xef0\x99\x00\x000\xf7" + // 0x30EF3099: 0x000030F7 - "0\xf00\x99\x00\x000\xf8" + // 0x30F03099: 0x000030F8 - "0\xf10\x99\x00\x000\xf9" + // 0x30F13099: 0x000030F9 - "0\xf20\x99\x00\x000\xfa" + // 0x30F23099: 0x000030FA - "0\xfd0\x99\x00\x000\xfe" + // 0x30FD3099: 0x000030FE - "\x10\x99\x10\xba\x00\x01\x10\x9a" + // 0x109910BA: 0x0001109A - "\x10\x9b\x10\xba\x00\x01\x10\x9c" + // 0x109B10BA: 0x0001109C - "\x10\xa5\x10\xba\x00\x01\x10\xab" + // 0x10A510BA: 0x000110AB - "\x111\x11'\x00\x01\x11." + // 0x11311127: 0x0001112E - "\x112\x11'\x00\x01\x11/" + // 0x11321127: 0x0001112F - "\x13G\x13>\x00\x01\x13K" + // 0x1347133E: 0x0001134B - "\x13G\x13W\x00\x01\x13L" + // 0x13471357: 0x0001134C - "\x14\xb9\x14\xba\x00\x01\x14\xbb" + // 0x14B914BA: 0x000114BB - "\x14\xb9\x14\xb0\x00\x01\x14\xbc" + // 0x14B914B0: 0x000114BC - "\x14\xb9\x14\xbd\x00\x01\x14\xbe" + // 0x14B914BD: 0x000114BE - "\x15\xb8\x15\xaf\x00\x01\x15\xba" + // 0x15B815AF: 0x000115BA - "\x15\xb9\x15\xaf\x00\x01\x15\xbb" + // 0x15B915AF: 0x000115BB - "" - // Total size of tables: 53KB (54006 bytes) diff --git a/vendor/golang.org/x/text/width/tables10.0.0.go b/vendor/golang.org/x/text/width/tables10.0.0.go deleted file mode 100644 index 07c1cb17af..0000000000 --- a/vendor/golang.org/x/text/width/tables10.0.0.go +++ /dev/null @@ -1,1328 +0,0 @@ -// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. - -//go:build go1.10 && !go1.13 - -package width - -// UnicodeVersion is the Unicode version from which the tables in this package are derived. -const UnicodeVersion = "10.0.0" - -// lookup returns the trie value for the first UTF-8 encoding in s and -// the width in bytes of this encoding. The size will be 0 if s does not -// hold enough bytes to complete the encoding. len(s) must be greater than 0. -func (t *widthTrie) lookup(s []byte) (v uint16, sz int) { - c0 := s[0] - switch { - case c0 < 0x80: // is ASCII - return widthValues[c0], 1 - case c0 < 0xC2: - return 0, 1 // Illegal UTF-8: not a starter, not ASCII. - case c0 < 0xE0: // 2-byte UTF-8 - if len(s) < 2 { - return 0, 0 - } - i := widthIndex[c0] - c1 := s[1] - if c1 < 0x80 || 0xC0 <= c1 { - return 0, 1 // Illegal UTF-8: not a continuation byte. - } - return t.lookupValue(uint32(i), c1), 2 - case c0 < 0xF0: // 3-byte UTF-8 - if len(s) < 3 { - return 0, 0 - } - i := widthIndex[c0] - c1 := s[1] - if c1 < 0x80 || 0xC0 <= c1 { - return 0, 1 // Illegal UTF-8: not a continuation byte. - } - o := uint32(i)<<6 + uint32(c1) - i = widthIndex[o] - c2 := s[2] - if c2 < 0x80 || 0xC0 <= c2 { - return 0, 2 // Illegal UTF-8: not a continuation byte. - } - return t.lookupValue(uint32(i), c2), 3 - case c0 < 0xF8: // 4-byte UTF-8 - if len(s) < 4 { - return 0, 0 - } - i := widthIndex[c0] - c1 := s[1] - if c1 < 0x80 || 0xC0 <= c1 { - return 0, 1 // Illegal UTF-8: not a continuation byte. - } - o := uint32(i)<<6 + uint32(c1) - i = widthIndex[o] - c2 := s[2] - if c2 < 0x80 || 0xC0 <= c2 { - return 0, 2 // Illegal UTF-8: not a continuation byte. - } - o = uint32(i)<<6 + uint32(c2) - i = widthIndex[o] - c3 := s[3] - if c3 < 0x80 || 0xC0 <= c3 { - return 0, 3 // Illegal UTF-8: not a continuation byte. - } - return t.lookupValue(uint32(i), c3), 4 - } - // Illegal rune - return 0, 1 -} - -// lookupUnsafe returns the trie value for the first UTF-8 encoding in s. -// s must start with a full and valid UTF-8 encoded rune. -func (t *widthTrie) lookupUnsafe(s []byte) uint16 { - c0 := s[0] - if c0 < 0x80 { // is ASCII - return widthValues[c0] - } - i := widthIndex[c0] - if c0 < 0xE0 { // 2-byte UTF-8 - return t.lookupValue(uint32(i), s[1]) - } - i = widthIndex[uint32(i)<<6+uint32(s[1])] - if c0 < 0xF0 { // 3-byte UTF-8 - return t.lookupValue(uint32(i), s[2]) - } - i = widthIndex[uint32(i)<<6+uint32(s[2])] - if c0 < 0xF8 { // 4-byte UTF-8 - return t.lookupValue(uint32(i), s[3]) - } - return 0 -} - -// lookupString returns the trie value for the first UTF-8 encoding in s and -// the width in bytes of this encoding. The size will be 0 if s does not -// hold enough bytes to complete the encoding. len(s) must be greater than 0. -func (t *widthTrie) lookupString(s string) (v uint16, sz int) { - c0 := s[0] - switch { - case c0 < 0x80: // is ASCII - return widthValues[c0], 1 - case c0 < 0xC2: - return 0, 1 // Illegal UTF-8: not a starter, not ASCII. - case c0 < 0xE0: // 2-byte UTF-8 - if len(s) < 2 { - return 0, 0 - } - i := widthIndex[c0] - c1 := s[1] - if c1 < 0x80 || 0xC0 <= c1 { - return 0, 1 // Illegal UTF-8: not a continuation byte. - } - return t.lookupValue(uint32(i), c1), 2 - case c0 < 0xF0: // 3-byte UTF-8 - if len(s) < 3 { - return 0, 0 - } - i := widthIndex[c0] - c1 := s[1] - if c1 < 0x80 || 0xC0 <= c1 { - return 0, 1 // Illegal UTF-8: not a continuation byte. - } - o := uint32(i)<<6 + uint32(c1) - i = widthIndex[o] - c2 := s[2] - if c2 < 0x80 || 0xC0 <= c2 { - return 0, 2 // Illegal UTF-8: not a continuation byte. - } - return t.lookupValue(uint32(i), c2), 3 - case c0 < 0xF8: // 4-byte UTF-8 - if len(s) < 4 { - return 0, 0 - } - i := widthIndex[c0] - c1 := s[1] - if c1 < 0x80 || 0xC0 <= c1 { - return 0, 1 // Illegal UTF-8: not a continuation byte. - } - o := uint32(i)<<6 + uint32(c1) - i = widthIndex[o] - c2 := s[2] - if c2 < 0x80 || 0xC0 <= c2 { - return 0, 2 // Illegal UTF-8: not a continuation byte. - } - o = uint32(i)<<6 + uint32(c2) - i = widthIndex[o] - c3 := s[3] - if c3 < 0x80 || 0xC0 <= c3 { - return 0, 3 // Illegal UTF-8: not a continuation byte. - } - return t.lookupValue(uint32(i), c3), 4 - } - // Illegal rune - return 0, 1 -} - -// lookupStringUnsafe returns the trie value for the first UTF-8 encoding in s. -// s must start with a full and valid UTF-8 encoded rune. -func (t *widthTrie) lookupStringUnsafe(s string) uint16 { - c0 := s[0] - if c0 < 0x80 { // is ASCII - return widthValues[c0] - } - i := widthIndex[c0] - if c0 < 0xE0 { // 2-byte UTF-8 - return t.lookupValue(uint32(i), s[1]) - } - i = widthIndex[uint32(i)<<6+uint32(s[1])] - if c0 < 0xF0 { // 3-byte UTF-8 - return t.lookupValue(uint32(i), s[2]) - } - i = widthIndex[uint32(i)<<6+uint32(s[2])] - if c0 < 0xF8 { // 4-byte UTF-8 - return t.lookupValue(uint32(i), s[3]) - } - return 0 -} - -// widthTrie. Total size: 14336 bytes (14.00 KiB). Checksum: c59df54630d3dc4a. -type widthTrie struct{} - -func newWidthTrie(i int) *widthTrie { - return &widthTrie{} -} - -// lookupValue determines the type of block n and looks up the value for b. -func (t *widthTrie) lookupValue(n uint32, b byte) uint16 { - switch { - default: - return uint16(widthValues[n<<6+uint32(b)]) - } -} - -// widthValues: 101 blocks, 6464 entries, 12928 bytes -// The third block is the zero block. -var widthValues = [6464]uint16{ - // Block 0x0, offset 0x0 - 0x20: 0x6001, 0x21: 0x6002, 0x22: 0x6002, 0x23: 0x6002, - 0x24: 0x6002, 0x25: 0x6002, 0x26: 0x6002, 0x27: 0x6002, 0x28: 0x6002, 0x29: 0x6002, - 0x2a: 0x6002, 0x2b: 0x6002, 0x2c: 0x6002, 0x2d: 0x6002, 0x2e: 0x6002, 0x2f: 0x6002, - 0x30: 0x6002, 0x31: 0x6002, 0x32: 0x6002, 0x33: 0x6002, 0x34: 0x6002, 0x35: 0x6002, - 0x36: 0x6002, 0x37: 0x6002, 0x38: 0x6002, 0x39: 0x6002, 0x3a: 0x6002, 0x3b: 0x6002, - 0x3c: 0x6002, 0x3d: 0x6002, 0x3e: 0x6002, 0x3f: 0x6002, - // Block 0x1, offset 0x40 - 0x40: 0x6003, 0x41: 0x6003, 0x42: 0x6003, 0x43: 0x6003, 0x44: 0x6003, 0x45: 0x6003, - 0x46: 0x6003, 0x47: 0x6003, 0x48: 0x6003, 0x49: 0x6003, 0x4a: 0x6003, 0x4b: 0x6003, - 0x4c: 0x6003, 0x4d: 0x6003, 0x4e: 0x6003, 0x4f: 0x6003, 0x50: 0x6003, 0x51: 0x6003, - 0x52: 0x6003, 0x53: 0x6003, 0x54: 0x6003, 0x55: 0x6003, 0x56: 0x6003, 0x57: 0x6003, - 0x58: 0x6003, 0x59: 0x6003, 0x5a: 0x6003, 0x5b: 0x6003, 0x5c: 0x6003, 0x5d: 0x6003, - 0x5e: 0x6003, 0x5f: 0x6003, 0x60: 0x6004, 0x61: 0x6004, 0x62: 0x6004, 0x63: 0x6004, - 0x64: 0x6004, 0x65: 0x6004, 0x66: 0x6004, 0x67: 0x6004, 0x68: 0x6004, 0x69: 0x6004, - 0x6a: 0x6004, 0x6b: 0x6004, 0x6c: 0x6004, 0x6d: 0x6004, 0x6e: 0x6004, 0x6f: 0x6004, - 0x70: 0x6004, 0x71: 0x6004, 0x72: 0x6004, 0x73: 0x6004, 0x74: 0x6004, 0x75: 0x6004, - 0x76: 0x6004, 0x77: 0x6004, 0x78: 0x6004, 0x79: 0x6004, 0x7a: 0x6004, 0x7b: 0x6004, - 0x7c: 0x6004, 0x7d: 0x6004, 0x7e: 0x6004, - // Block 0x2, offset 0x80 - // Block 0x3, offset 0xc0 - 0xe1: 0x2000, 0xe2: 0x6005, 0xe3: 0x6005, - 0xe4: 0x2000, 0xe5: 0x6006, 0xe6: 0x6005, 0xe7: 0x2000, 0xe8: 0x2000, - 0xea: 0x2000, 0xec: 0x6007, 0xed: 0x2000, 0xee: 0x2000, 0xef: 0x6008, - 0xf0: 0x2000, 0xf1: 0x2000, 0xf2: 0x2000, 0xf3: 0x2000, 0xf4: 0x2000, - 0xf6: 0x2000, 0xf7: 0x2000, 0xf8: 0x2000, 0xf9: 0x2000, 0xfa: 0x2000, - 0xfc: 0x2000, 0xfd: 0x2000, 0xfe: 0x2000, 0xff: 0x2000, - // Block 0x4, offset 0x100 - 0x106: 0x2000, - 0x110: 0x2000, - 0x117: 0x2000, - 0x118: 0x2000, - 0x11e: 0x2000, 0x11f: 0x2000, 0x120: 0x2000, 0x121: 0x2000, - 0x126: 0x2000, 0x128: 0x2000, 0x129: 0x2000, - 0x12a: 0x2000, 0x12c: 0x2000, 0x12d: 0x2000, - 0x130: 0x2000, 0x132: 0x2000, 0x133: 0x2000, - 0x137: 0x2000, 0x138: 0x2000, 0x139: 0x2000, 0x13a: 0x2000, - 0x13c: 0x2000, 0x13e: 0x2000, - // Block 0x5, offset 0x140 - 0x141: 0x2000, - 0x151: 0x2000, - 0x153: 0x2000, - 0x15b: 0x2000, - 0x166: 0x2000, 0x167: 0x2000, - 0x16b: 0x2000, - 0x171: 0x2000, 0x172: 0x2000, 0x173: 0x2000, - 0x178: 0x2000, - 0x17f: 0x2000, - // Block 0x6, offset 0x180 - 0x180: 0x2000, 0x181: 0x2000, 0x182: 0x2000, 0x184: 0x2000, - 0x188: 0x2000, 0x189: 0x2000, 0x18a: 0x2000, 0x18b: 0x2000, - 0x18d: 0x2000, - 0x192: 0x2000, 0x193: 0x2000, - 0x1a6: 0x2000, 0x1a7: 0x2000, - 0x1ab: 0x2000, - // Block 0x7, offset 0x1c0 - 0x1ce: 0x2000, 0x1d0: 0x2000, - 0x1d2: 0x2000, 0x1d4: 0x2000, 0x1d6: 0x2000, - 0x1d8: 0x2000, 0x1da: 0x2000, 0x1dc: 0x2000, - // Block 0x8, offset 0x200 - 0x211: 0x2000, - 0x221: 0x2000, - // Block 0x9, offset 0x240 - 0x244: 0x2000, - 0x247: 0x2000, 0x249: 0x2000, 0x24a: 0x2000, 0x24b: 0x2000, - 0x24d: 0x2000, 0x250: 0x2000, - 0x258: 0x2000, 0x259: 0x2000, 0x25a: 0x2000, 0x25b: 0x2000, 0x25d: 0x2000, - 0x25f: 0x2000, - // Block 0xa, offset 0x280 - 0x280: 0x2000, 0x281: 0x2000, 0x282: 0x2000, 0x283: 0x2000, 0x284: 0x2000, 0x285: 0x2000, - 0x286: 0x2000, 0x287: 0x2000, 0x288: 0x2000, 0x289: 0x2000, 0x28a: 0x2000, 0x28b: 0x2000, - 0x28c: 0x2000, 0x28d: 0x2000, 0x28e: 0x2000, 0x28f: 0x2000, 0x290: 0x2000, 0x291: 0x2000, - 0x292: 0x2000, 0x293: 0x2000, 0x294: 0x2000, 0x295: 0x2000, 0x296: 0x2000, 0x297: 0x2000, - 0x298: 0x2000, 0x299: 0x2000, 0x29a: 0x2000, 0x29b: 0x2000, 0x29c: 0x2000, 0x29d: 0x2000, - 0x29e: 0x2000, 0x29f: 0x2000, 0x2a0: 0x2000, 0x2a1: 0x2000, 0x2a2: 0x2000, 0x2a3: 0x2000, - 0x2a4: 0x2000, 0x2a5: 0x2000, 0x2a6: 0x2000, 0x2a7: 0x2000, 0x2a8: 0x2000, 0x2a9: 0x2000, - 0x2aa: 0x2000, 0x2ab: 0x2000, 0x2ac: 0x2000, 0x2ad: 0x2000, 0x2ae: 0x2000, 0x2af: 0x2000, - 0x2b0: 0x2000, 0x2b1: 0x2000, 0x2b2: 0x2000, 0x2b3: 0x2000, 0x2b4: 0x2000, 0x2b5: 0x2000, - 0x2b6: 0x2000, 0x2b7: 0x2000, 0x2b8: 0x2000, 0x2b9: 0x2000, 0x2ba: 0x2000, 0x2bb: 0x2000, - 0x2bc: 0x2000, 0x2bd: 0x2000, 0x2be: 0x2000, 0x2bf: 0x2000, - // Block 0xb, offset 0x2c0 - 0x2c0: 0x2000, 0x2c1: 0x2000, 0x2c2: 0x2000, 0x2c3: 0x2000, 0x2c4: 0x2000, 0x2c5: 0x2000, - 0x2c6: 0x2000, 0x2c7: 0x2000, 0x2c8: 0x2000, 0x2c9: 0x2000, 0x2ca: 0x2000, 0x2cb: 0x2000, - 0x2cc: 0x2000, 0x2cd: 0x2000, 0x2ce: 0x2000, 0x2cf: 0x2000, 0x2d0: 0x2000, 0x2d1: 0x2000, - 0x2d2: 0x2000, 0x2d3: 0x2000, 0x2d4: 0x2000, 0x2d5: 0x2000, 0x2d6: 0x2000, 0x2d7: 0x2000, - 0x2d8: 0x2000, 0x2d9: 0x2000, 0x2da: 0x2000, 0x2db: 0x2000, 0x2dc: 0x2000, 0x2dd: 0x2000, - 0x2de: 0x2000, 0x2df: 0x2000, 0x2e0: 0x2000, 0x2e1: 0x2000, 0x2e2: 0x2000, 0x2e3: 0x2000, - 0x2e4: 0x2000, 0x2e5: 0x2000, 0x2e6: 0x2000, 0x2e7: 0x2000, 0x2e8: 0x2000, 0x2e9: 0x2000, - 0x2ea: 0x2000, 0x2eb: 0x2000, 0x2ec: 0x2000, 0x2ed: 0x2000, 0x2ee: 0x2000, 0x2ef: 0x2000, - // Block 0xc, offset 0x300 - 0x311: 0x2000, - 0x312: 0x2000, 0x313: 0x2000, 0x314: 0x2000, 0x315: 0x2000, 0x316: 0x2000, 0x317: 0x2000, - 0x318: 0x2000, 0x319: 0x2000, 0x31a: 0x2000, 0x31b: 0x2000, 0x31c: 0x2000, 0x31d: 0x2000, - 0x31e: 0x2000, 0x31f: 0x2000, 0x320: 0x2000, 0x321: 0x2000, 0x323: 0x2000, - 0x324: 0x2000, 0x325: 0x2000, 0x326: 0x2000, 0x327: 0x2000, 0x328: 0x2000, 0x329: 0x2000, - 0x331: 0x2000, 0x332: 0x2000, 0x333: 0x2000, 0x334: 0x2000, 0x335: 0x2000, - 0x336: 0x2000, 0x337: 0x2000, 0x338: 0x2000, 0x339: 0x2000, 0x33a: 0x2000, 0x33b: 0x2000, - 0x33c: 0x2000, 0x33d: 0x2000, 0x33e: 0x2000, 0x33f: 0x2000, - // Block 0xd, offset 0x340 - 0x340: 0x2000, 0x341: 0x2000, 0x343: 0x2000, 0x344: 0x2000, 0x345: 0x2000, - 0x346: 0x2000, 0x347: 0x2000, 0x348: 0x2000, 0x349: 0x2000, - // Block 0xe, offset 0x380 - 0x381: 0x2000, - 0x390: 0x2000, 0x391: 0x2000, - 0x392: 0x2000, 0x393: 0x2000, 0x394: 0x2000, 0x395: 0x2000, 0x396: 0x2000, 0x397: 0x2000, - 0x398: 0x2000, 0x399: 0x2000, 0x39a: 0x2000, 0x39b: 0x2000, 0x39c: 0x2000, 0x39d: 0x2000, - 0x39e: 0x2000, 0x39f: 0x2000, 0x3a0: 0x2000, 0x3a1: 0x2000, 0x3a2: 0x2000, 0x3a3: 0x2000, - 0x3a4: 0x2000, 0x3a5: 0x2000, 0x3a6: 0x2000, 0x3a7: 0x2000, 0x3a8: 0x2000, 0x3a9: 0x2000, - 0x3aa: 0x2000, 0x3ab: 0x2000, 0x3ac: 0x2000, 0x3ad: 0x2000, 0x3ae: 0x2000, 0x3af: 0x2000, - 0x3b0: 0x2000, 0x3b1: 0x2000, 0x3b2: 0x2000, 0x3b3: 0x2000, 0x3b4: 0x2000, 0x3b5: 0x2000, - 0x3b6: 0x2000, 0x3b7: 0x2000, 0x3b8: 0x2000, 0x3b9: 0x2000, 0x3ba: 0x2000, 0x3bb: 0x2000, - 0x3bc: 0x2000, 0x3bd: 0x2000, 0x3be: 0x2000, 0x3bf: 0x2000, - // Block 0xf, offset 0x3c0 - 0x3c0: 0x2000, 0x3c1: 0x2000, 0x3c2: 0x2000, 0x3c3: 0x2000, 0x3c4: 0x2000, 0x3c5: 0x2000, - 0x3c6: 0x2000, 0x3c7: 0x2000, 0x3c8: 0x2000, 0x3c9: 0x2000, 0x3ca: 0x2000, 0x3cb: 0x2000, - 0x3cc: 0x2000, 0x3cd: 0x2000, 0x3ce: 0x2000, 0x3cf: 0x2000, 0x3d1: 0x2000, - // Block 0x10, offset 0x400 - 0x400: 0x4000, 0x401: 0x4000, 0x402: 0x4000, 0x403: 0x4000, 0x404: 0x4000, 0x405: 0x4000, - 0x406: 0x4000, 0x407: 0x4000, 0x408: 0x4000, 0x409: 0x4000, 0x40a: 0x4000, 0x40b: 0x4000, - 0x40c: 0x4000, 0x40d: 0x4000, 0x40e: 0x4000, 0x40f: 0x4000, 0x410: 0x4000, 0x411: 0x4000, - 0x412: 0x4000, 0x413: 0x4000, 0x414: 0x4000, 0x415: 0x4000, 0x416: 0x4000, 0x417: 0x4000, - 0x418: 0x4000, 0x419: 0x4000, 0x41a: 0x4000, 0x41b: 0x4000, 0x41c: 0x4000, 0x41d: 0x4000, - 0x41e: 0x4000, 0x41f: 0x4000, 0x420: 0x4000, 0x421: 0x4000, 0x422: 0x4000, 0x423: 0x4000, - 0x424: 0x4000, 0x425: 0x4000, 0x426: 0x4000, 0x427: 0x4000, 0x428: 0x4000, 0x429: 0x4000, - 0x42a: 0x4000, 0x42b: 0x4000, 0x42c: 0x4000, 0x42d: 0x4000, 0x42e: 0x4000, 0x42f: 0x4000, - 0x430: 0x4000, 0x431: 0x4000, 0x432: 0x4000, 0x433: 0x4000, 0x434: 0x4000, 0x435: 0x4000, - 0x436: 0x4000, 0x437: 0x4000, 0x438: 0x4000, 0x439: 0x4000, 0x43a: 0x4000, 0x43b: 0x4000, - 0x43c: 0x4000, 0x43d: 0x4000, 0x43e: 0x4000, 0x43f: 0x4000, - // Block 0x11, offset 0x440 - 0x440: 0x4000, 0x441: 0x4000, 0x442: 0x4000, 0x443: 0x4000, 0x444: 0x4000, 0x445: 0x4000, - 0x446: 0x4000, 0x447: 0x4000, 0x448: 0x4000, 0x449: 0x4000, 0x44a: 0x4000, 0x44b: 0x4000, - 0x44c: 0x4000, 0x44d: 0x4000, 0x44e: 0x4000, 0x44f: 0x4000, 0x450: 0x4000, 0x451: 0x4000, - 0x452: 0x4000, 0x453: 0x4000, 0x454: 0x4000, 0x455: 0x4000, 0x456: 0x4000, 0x457: 0x4000, - 0x458: 0x4000, 0x459: 0x4000, 0x45a: 0x4000, 0x45b: 0x4000, 0x45c: 0x4000, 0x45d: 0x4000, - 0x45e: 0x4000, 0x45f: 0x4000, - // Block 0x12, offset 0x480 - 0x490: 0x2000, - 0x493: 0x2000, 0x494: 0x2000, 0x495: 0x2000, 0x496: 0x2000, - 0x498: 0x2000, 0x499: 0x2000, 0x49c: 0x2000, 0x49d: 0x2000, - 0x4a0: 0x2000, 0x4a1: 0x2000, 0x4a2: 0x2000, - 0x4a4: 0x2000, 0x4a5: 0x2000, 0x4a6: 0x2000, 0x4a7: 0x2000, - 0x4b0: 0x2000, 0x4b2: 0x2000, 0x4b3: 0x2000, 0x4b5: 0x2000, - 0x4bb: 0x2000, - 0x4be: 0x2000, - // Block 0x13, offset 0x4c0 - 0x4f4: 0x2000, - 0x4ff: 0x2000, - // Block 0x14, offset 0x500 - 0x501: 0x2000, 0x502: 0x2000, 0x503: 0x2000, 0x504: 0x2000, - 0x529: 0xa009, - 0x52c: 0x2000, - // Block 0x15, offset 0x540 - 0x543: 0x2000, 0x545: 0x2000, - 0x549: 0x2000, - 0x553: 0x2000, 0x556: 0x2000, - 0x561: 0x2000, 0x562: 0x2000, - 0x566: 0x2000, - 0x56b: 0x2000, - // Block 0x16, offset 0x580 - 0x593: 0x2000, 0x594: 0x2000, - 0x59b: 0x2000, 0x59c: 0x2000, 0x59d: 0x2000, - 0x59e: 0x2000, 0x5a0: 0x2000, 0x5a1: 0x2000, 0x5a2: 0x2000, 0x5a3: 0x2000, - 0x5a4: 0x2000, 0x5a5: 0x2000, 0x5a6: 0x2000, 0x5a7: 0x2000, 0x5a8: 0x2000, 0x5a9: 0x2000, - 0x5aa: 0x2000, 0x5ab: 0x2000, - 0x5b0: 0x2000, 0x5b1: 0x2000, 0x5b2: 0x2000, 0x5b3: 0x2000, 0x5b4: 0x2000, 0x5b5: 0x2000, - 0x5b6: 0x2000, 0x5b7: 0x2000, 0x5b8: 0x2000, 0x5b9: 0x2000, - // Block 0x17, offset 0x5c0 - 0x5c9: 0x2000, - 0x5d0: 0x200a, 0x5d1: 0x200b, - 0x5d2: 0x200a, 0x5d3: 0x200c, 0x5d4: 0x2000, 0x5d5: 0x2000, 0x5d6: 0x2000, 0x5d7: 0x2000, - 0x5d8: 0x2000, 0x5d9: 0x2000, - 0x5f8: 0x2000, 0x5f9: 0x2000, - // Block 0x18, offset 0x600 - 0x612: 0x2000, 0x614: 0x2000, - 0x627: 0x2000, - // Block 0x19, offset 0x640 - 0x640: 0x2000, 0x642: 0x2000, 0x643: 0x2000, - 0x647: 0x2000, 0x648: 0x2000, 0x64b: 0x2000, - 0x64f: 0x2000, 0x651: 0x2000, - 0x655: 0x2000, - 0x65a: 0x2000, 0x65d: 0x2000, - 0x65e: 0x2000, 0x65f: 0x2000, 0x660: 0x2000, 0x663: 0x2000, - 0x665: 0x2000, 0x667: 0x2000, 0x668: 0x2000, 0x669: 0x2000, - 0x66a: 0x2000, 0x66b: 0x2000, 0x66c: 0x2000, 0x66e: 0x2000, - 0x674: 0x2000, 0x675: 0x2000, - 0x676: 0x2000, 0x677: 0x2000, - 0x67c: 0x2000, 0x67d: 0x2000, - // Block 0x1a, offset 0x680 - 0x688: 0x2000, - 0x68c: 0x2000, - 0x692: 0x2000, - 0x6a0: 0x2000, 0x6a1: 0x2000, - 0x6a4: 0x2000, 0x6a5: 0x2000, 0x6a6: 0x2000, 0x6a7: 0x2000, - 0x6aa: 0x2000, 0x6ab: 0x2000, 0x6ae: 0x2000, 0x6af: 0x2000, - // Block 0x1b, offset 0x6c0 - 0x6c2: 0x2000, 0x6c3: 0x2000, - 0x6c6: 0x2000, 0x6c7: 0x2000, - 0x6d5: 0x2000, - 0x6d9: 0x2000, - 0x6e5: 0x2000, - 0x6ff: 0x2000, - // Block 0x1c, offset 0x700 - 0x712: 0x2000, - 0x71a: 0x4000, 0x71b: 0x4000, - 0x729: 0x4000, - 0x72a: 0x4000, - // Block 0x1d, offset 0x740 - 0x769: 0x4000, - 0x76a: 0x4000, 0x76b: 0x4000, 0x76c: 0x4000, - 0x770: 0x4000, 0x773: 0x4000, - // Block 0x1e, offset 0x780 - 0x7a0: 0x2000, 0x7a1: 0x2000, 0x7a2: 0x2000, 0x7a3: 0x2000, - 0x7a4: 0x2000, 0x7a5: 0x2000, 0x7a6: 0x2000, 0x7a7: 0x2000, 0x7a8: 0x2000, 0x7a9: 0x2000, - 0x7aa: 0x2000, 0x7ab: 0x2000, 0x7ac: 0x2000, 0x7ad: 0x2000, 0x7ae: 0x2000, 0x7af: 0x2000, - 0x7b0: 0x2000, 0x7b1: 0x2000, 0x7b2: 0x2000, 0x7b3: 0x2000, 0x7b4: 0x2000, 0x7b5: 0x2000, - 0x7b6: 0x2000, 0x7b7: 0x2000, 0x7b8: 0x2000, 0x7b9: 0x2000, 0x7ba: 0x2000, 0x7bb: 0x2000, - 0x7bc: 0x2000, 0x7bd: 0x2000, 0x7be: 0x2000, 0x7bf: 0x2000, - // Block 0x1f, offset 0x7c0 - 0x7c0: 0x2000, 0x7c1: 0x2000, 0x7c2: 0x2000, 0x7c3: 0x2000, 0x7c4: 0x2000, 0x7c5: 0x2000, - 0x7c6: 0x2000, 0x7c7: 0x2000, 0x7c8: 0x2000, 0x7c9: 0x2000, 0x7ca: 0x2000, 0x7cb: 0x2000, - 0x7cc: 0x2000, 0x7cd: 0x2000, 0x7ce: 0x2000, 0x7cf: 0x2000, 0x7d0: 0x2000, 0x7d1: 0x2000, - 0x7d2: 0x2000, 0x7d3: 0x2000, 0x7d4: 0x2000, 0x7d5: 0x2000, 0x7d6: 0x2000, 0x7d7: 0x2000, - 0x7d8: 0x2000, 0x7d9: 0x2000, 0x7da: 0x2000, 0x7db: 0x2000, 0x7dc: 0x2000, 0x7dd: 0x2000, - 0x7de: 0x2000, 0x7df: 0x2000, 0x7e0: 0x2000, 0x7e1: 0x2000, 0x7e2: 0x2000, 0x7e3: 0x2000, - 0x7e4: 0x2000, 0x7e5: 0x2000, 0x7e6: 0x2000, 0x7e7: 0x2000, 0x7e8: 0x2000, 0x7e9: 0x2000, - 0x7eb: 0x2000, 0x7ec: 0x2000, 0x7ed: 0x2000, 0x7ee: 0x2000, 0x7ef: 0x2000, - 0x7f0: 0x2000, 0x7f1: 0x2000, 0x7f2: 0x2000, 0x7f3: 0x2000, 0x7f4: 0x2000, 0x7f5: 0x2000, - 0x7f6: 0x2000, 0x7f7: 0x2000, 0x7f8: 0x2000, 0x7f9: 0x2000, 0x7fa: 0x2000, 0x7fb: 0x2000, - 0x7fc: 0x2000, 0x7fd: 0x2000, 0x7fe: 0x2000, 0x7ff: 0x2000, - // Block 0x20, offset 0x800 - 0x800: 0x2000, 0x801: 0x2000, 0x802: 0x200d, 0x803: 0x2000, 0x804: 0x2000, 0x805: 0x2000, - 0x806: 0x2000, 0x807: 0x2000, 0x808: 0x2000, 0x809: 0x2000, 0x80a: 0x2000, 0x80b: 0x2000, - 0x80c: 0x2000, 0x80d: 0x2000, 0x80e: 0x2000, 0x80f: 0x2000, 0x810: 0x2000, 0x811: 0x2000, - 0x812: 0x2000, 0x813: 0x2000, 0x814: 0x2000, 0x815: 0x2000, 0x816: 0x2000, 0x817: 0x2000, - 0x818: 0x2000, 0x819: 0x2000, 0x81a: 0x2000, 0x81b: 0x2000, 0x81c: 0x2000, 0x81d: 0x2000, - 0x81e: 0x2000, 0x81f: 0x2000, 0x820: 0x2000, 0x821: 0x2000, 0x822: 0x2000, 0x823: 0x2000, - 0x824: 0x2000, 0x825: 0x2000, 0x826: 0x2000, 0x827: 0x2000, 0x828: 0x2000, 0x829: 0x2000, - 0x82a: 0x2000, 0x82b: 0x2000, 0x82c: 0x2000, 0x82d: 0x2000, 0x82e: 0x2000, 0x82f: 0x2000, - 0x830: 0x2000, 0x831: 0x2000, 0x832: 0x2000, 0x833: 0x2000, 0x834: 0x2000, 0x835: 0x2000, - 0x836: 0x2000, 0x837: 0x2000, 0x838: 0x2000, 0x839: 0x2000, 0x83a: 0x2000, 0x83b: 0x2000, - 0x83c: 0x2000, 0x83d: 0x2000, 0x83e: 0x2000, 0x83f: 0x2000, - // Block 0x21, offset 0x840 - 0x840: 0x2000, 0x841: 0x2000, 0x842: 0x2000, 0x843: 0x2000, 0x844: 0x2000, 0x845: 0x2000, - 0x846: 0x2000, 0x847: 0x2000, 0x848: 0x2000, 0x849: 0x2000, 0x84a: 0x2000, 0x84b: 0x2000, - 0x850: 0x2000, 0x851: 0x2000, - 0x852: 0x2000, 0x853: 0x2000, 0x854: 0x2000, 0x855: 0x2000, 0x856: 0x2000, 0x857: 0x2000, - 0x858: 0x2000, 0x859: 0x2000, 0x85a: 0x2000, 0x85b: 0x2000, 0x85c: 0x2000, 0x85d: 0x2000, - 0x85e: 0x2000, 0x85f: 0x2000, 0x860: 0x2000, 0x861: 0x2000, 0x862: 0x2000, 0x863: 0x2000, - 0x864: 0x2000, 0x865: 0x2000, 0x866: 0x2000, 0x867: 0x2000, 0x868: 0x2000, 0x869: 0x2000, - 0x86a: 0x2000, 0x86b: 0x2000, 0x86c: 0x2000, 0x86d: 0x2000, 0x86e: 0x2000, 0x86f: 0x2000, - 0x870: 0x2000, 0x871: 0x2000, 0x872: 0x2000, 0x873: 0x2000, - // Block 0x22, offset 0x880 - 0x880: 0x2000, 0x881: 0x2000, 0x882: 0x2000, 0x883: 0x2000, 0x884: 0x2000, 0x885: 0x2000, - 0x886: 0x2000, 0x887: 0x2000, 0x888: 0x2000, 0x889: 0x2000, 0x88a: 0x2000, 0x88b: 0x2000, - 0x88c: 0x2000, 0x88d: 0x2000, 0x88e: 0x2000, 0x88f: 0x2000, - 0x892: 0x2000, 0x893: 0x2000, 0x894: 0x2000, 0x895: 0x2000, - 0x8a0: 0x200e, 0x8a1: 0x2000, 0x8a3: 0x2000, - 0x8a4: 0x2000, 0x8a5: 0x2000, 0x8a6: 0x2000, 0x8a7: 0x2000, 0x8a8: 0x2000, 0x8a9: 0x2000, - 0x8b2: 0x2000, 0x8b3: 0x2000, - 0x8b6: 0x2000, 0x8b7: 0x2000, - 0x8bc: 0x2000, 0x8bd: 0x2000, - // Block 0x23, offset 0x8c0 - 0x8c0: 0x2000, 0x8c1: 0x2000, - 0x8c6: 0x2000, 0x8c7: 0x2000, 0x8c8: 0x2000, 0x8cb: 0x200f, - 0x8ce: 0x2000, 0x8cf: 0x2000, 0x8d0: 0x2000, 0x8d1: 0x2000, - 0x8e2: 0x2000, 0x8e3: 0x2000, - 0x8e4: 0x2000, 0x8e5: 0x2000, - 0x8ef: 0x2000, - 0x8fd: 0x4000, 0x8fe: 0x4000, - // Block 0x24, offset 0x900 - 0x905: 0x2000, - 0x906: 0x2000, 0x909: 0x2000, - 0x90e: 0x2000, 0x90f: 0x2000, - 0x914: 0x4000, 0x915: 0x4000, - 0x91c: 0x2000, - 0x91e: 0x2000, - // Block 0x25, offset 0x940 - 0x940: 0x2000, 0x942: 0x2000, - 0x948: 0x4000, 0x949: 0x4000, 0x94a: 0x4000, 0x94b: 0x4000, - 0x94c: 0x4000, 0x94d: 0x4000, 0x94e: 0x4000, 0x94f: 0x4000, 0x950: 0x4000, 0x951: 0x4000, - 0x952: 0x4000, 0x953: 0x4000, - 0x960: 0x2000, 0x961: 0x2000, 0x963: 0x2000, - 0x964: 0x2000, 0x965: 0x2000, 0x967: 0x2000, 0x968: 0x2000, 0x969: 0x2000, - 0x96a: 0x2000, 0x96c: 0x2000, 0x96d: 0x2000, 0x96f: 0x2000, - 0x97f: 0x4000, - // Block 0x26, offset 0x980 - 0x993: 0x4000, - 0x99e: 0x2000, 0x99f: 0x2000, 0x9a1: 0x4000, - 0x9aa: 0x4000, 0x9ab: 0x4000, - 0x9bd: 0x4000, 0x9be: 0x4000, 0x9bf: 0x2000, - // Block 0x27, offset 0x9c0 - 0x9c4: 0x4000, 0x9c5: 0x4000, - 0x9c6: 0x2000, 0x9c7: 0x2000, 0x9c8: 0x2000, 0x9c9: 0x2000, 0x9ca: 0x2000, 0x9cb: 0x2000, - 0x9cc: 0x2000, 0x9cd: 0x2000, 0x9ce: 0x4000, 0x9cf: 0x2000, 0x9d0: 0x2000, 0x9d1: 0x2000, - 0x9d2: 0x2000, 0x9d3: 0x2000, 0x9d4: 0x4000, 0x9d5: 0x2000, 0x9d6: 0x2000, 0x9d7: 0x2000, - 0x9d8: 0x2000, 0x9d9: 0x2000, 0x9da: 0x2000, 0x9db: 0x2000, 0x9dc: 0x2000, 0x9dd: 0x2000, - 0x9de: 0x2000, 0x9df: 0x2000, 0x9e0: 0x2000, 0x9e1: 0x2000, 0x9e3: 0x2000, - 0x9e8: 0x2000, 0x9e9: 0x2000, - 0x9ea: 0x4000, 0x9eb: 0x2000, 0x9ec: 0x2000, 0x9ed: 0x2000, 0x9ee: 0x2000, 0x9ef: 0x2000, - 0x9f0: 0x2000, 0x9f1: 0x2000, 0x9f2: 0x4000, 0x9f3: 0x4000, 0x9f4: 0x2000, 0x9f5: 0x4000, - 0x9f6: 0x2000, 0x9f7: 0x2000, 0x9f8: 0x2000, 0x9f9: 0x2000, 0x9fa: 0x4000, 0x9fb: 0x2000, - 0x9fc: 0x2000, 0x9fd: 0x4000, 0x9fe: 0x2000, 0x9ff: 0x2000, - // Block 0x28, offset 0xa00 - 0xa05: 0x4000, - 0xa0a: 0x4000, 0xa0b: 0x4000, - 0xa28: 0x4000, - 0xa3d: 0x2000, - // Block 0x29, offset 0xa40 - 0xa4c: 0x4000, 0xa4e: 0x4000, - 0xa53: 0x4000, 0xa54: 0x4000, 0xa55: 0x4000, 0xa57: 0x4000, - 0xa76: 0x2000, 0xa77: 0x2000, 0xa78: 0x2000, 0xa79: 0x2000, 0xa7a: 0x2000, 0xa7b: 0x2000, - 0xa7c: 0x2000, 0xa7d: 0x2000, 0xa7e: 0x2000, 0xa7f: 0x2000, - // Block 0x2a, offset 0xa80 - 0xa95: 0x4000, 0xa96: 0x4000, 0xa97: 0x4000, - 0xab0: 0x4000, - 0xabf: 0x4000, - // Block 0x2b, offset 0xac0 - 0xae6: 0x6000, 0xae7: 0x6000, 0xae8: 0x6000, 0xae9: 0x6000, - 0xaea: 0x6000, 0xaeb: 0x6000, 0xaec: 0x6000, 0xaed: 0x6000, - // Block 0x2c, offset 0xb00 - 0xb05: 0x6010, - 0xb06: 0x6011, - // Block 0x2d, offset 0xb40 - 0xb5b: 0x4000, 0xb5c: 0x4000, - // Block 0x2e, offset 0xb80 - 0xb90: 0x4000, - 0xb95: 0x4000, 0xb96: 0x2000, 0xb97: 0x2000, - 0xb98: 0x2000, 0xb99: 0x2000, - // Block 0x2f, offset 0xbc0 - 0xbc0: 0x4000, 0xbc1: 0x4000, 0xbc2: 0x4000, 0xbc3: 0x4000, 0xbc4: 0x4000, 0xbc5: 0x4000, - 0xbc6: 0x4000, 0xbc7: 0x4000, 0xbc8: 0x4000, 0xbc9: 0x4000, 0xbca: 0x4000, 0xbcb: 0x4000, - 0xbcc: 0x4000, 0xbcd: 0x4000, 0xbce: 0x4000, 0xbcf: 0x4000, 0xbd0: 0x4000, 0xbd1: 0x4000, - 0xbd2: 0x4000, 0xbd3: 0x4000, 0xbd4: 0x4000, 0xbd5: 0x4000, 0xbd6: 0x4000, 0xbd7: 0x4000, - 0xbd8: 0x4000, 0xbd9: 0x4000, 0xbdb: 0x4000, 0xbdc: 0x4000, 0xbdd: 0x4000, - 0xbde: 0x4000, 0xbdf: 0x4000, 0xbe0: 0x4000, 0xbe1: 0x4000, 0xbe2: 0x4000, 0xbe3: 0x4000, - 0xbe4: 0x4000, 0xbe5: 0x4000, 0xbe6: 0x4000, 0xbe7: 0x4000, 0xbe8: 0x4000, 0xbe9: 0x4000, - 0xbea: 0x4000, 0xbeb: 0x4000, 0xbec: 0x4000, 0xbed: 0x4000, 0xbee: 0x4000, 0xbef: 0x4000, - 0xbf0: 0x4000, 0xbf1: 0x4000, 0xbf2: 0x4000, 0xbf3: 0x4000, 0xbf4: 0x4000, 0xbf5: 0x4000, - 0xbf6: 0x4000, 0xbf7: 0x4000, 0xbf8: 0x4000, 0xbf9: 0x4000, 0xbfa: 0x4000, 0xbfb: 0x4000, - 0xbfc: 0x4000, 0xbfd: 0x4000, 0xbfe: 0x4000, 0xbff: 0x4000, - // Block 0x30, offset 0xc00 - 0xc00: 0x4000, 0xc01: 0x4000, 0xc02: 0x4000, 0xc03: 0x4000, 0xc04: 0x4000, 0xc05: 0x4000, - 0xc06: 0x4000, 0xc07: 0x4000, 0xc08: 0x4000, 0xc09: 0x4000, 0xc0a: 0x4000, 0xc0b: 0x4000, - 0xc0c: 0x4000, 0xc0d: 0x4000, 0xc0e: 0x4000, 0xc0f: 0x4000, 0xc10: 0x4000, 0xc11: 0x4000, - 0xc12: 0x4000, 0xc13: 0x4000, 0xc14: 0x4000, 0xc15: 0x4000, 0xc16: 0x4000, 0xc17: 0x4000, - 0xc18: 0x4000, 0xc19: 0x4000, 0xc1a: 0x4000, 0xc1b: 0x4000, 0xc1c: 0x4000, 0xc1d: 0x4000, - 0xc1e: 0x4000, 0xc1f: 0x4000, 0xc20: 0x4000, 0xc21: 0x4000, 0xc22: 0x4000, 0xc23: 0x4000, - 0xc24: 0x4000, 0xc25: 0x4000, 0xc26: 0x4000, 0xc27: 0x4000, 0xc28: 0x4000, 0xc29: 0x4000, - 0xc2a: 0x4000, 0xc2b: 0x4000, 0xc2c: 0x4000, 0xc2d: 0x4000, 0xc2e: 0x4000, 0xc2f: 0x4000, - 0xc30: 0x4000, 0xc31: 0x4000, 0xc32: 0x4000, 0xc33: 0x4000, - // Block 0x31, offset 0xc40 - 0xc40: 0x4000, 0xc41: 0x4000, 0xc42: 0x4000, 0xc43: 0x4000, 0xc44: 0x4000, 0xc45: 0x4000, - 0xc46: 0x4000, 0xc47: 0x4000, 0xc48: 0x4000, 0xc49: 0x4000, 0xc4a: 0x4000, 0xc4b: 0x4000, - 0xc4c: 0x4000, 0xc4d: 0x4000, 0xc4e: 0x4000, 0xc4f: 0x4000, 0xc50: 0x4000, 0xc51: 0x4000, - 0xc52: 0x4000, 0xc53: 0x4000, 0xc54: 0x4000, 0xc55: 0x4000, - 0xc70: 0x4000, 0xc71: 0x4000, 0xc72: 0x4000, 0xc73: 0x4000, 0xc74: 0x4000, 0xc75: 0x4000, - 0xc76: 0x4000, 0xc77: 0x4000, 0xc78: 0x4000, 0xc79: 0x4000, 0xc7a: 0x4000, 0xc7b: 0x4000, - // Block 0x32, offset 0xc80 - 0xc80: 0x9012, 0xc81: 0x4013, 0xc82: 0x4014, 0xc83: 0x4000, 0xc84: 0x4000, 0xc85: 0x4000, - 0xc86: 0x4000, 0xc87: 0x4000, 0xc88: 0x4000, 0xc89: 0x4000, 0xc8a: 0x4000, 0xc8b: 0x4000, - 0xc8c: 0x4015, 0xc8d: 0x4015, 0xc8e: 0x4000, 0xc8f: 0x4000, 0xc90: 0x4000, 0xc91: 0x4000, - 0xc92: 0x4000, 0xc93: 0x4000, 0xc94: 0x4000, 0xc95: 0x4000, 0xc96: 0x4000, 0xc97: 0x4000, - 0xc98: 0x4000, 0xc99: 0x4000, 0xc9a: 0x4000, 0xc9b: 0x4000, 0xc9c: 0x4000, 0xc9d: 0x4000, - 0xc9e: 0x4000, 0xc9f: 0x4000, 0xca0: 0x4000, 0xca1: 0x4000, 0xca2: 0x4000, 0xca3: 0x4000, - 0xca4: 0x4000, 0xca5: 0x4000, 0xca6: 0x4000, 0xca7: 0x4000, 0xca8: 0x4000, 0xca9: 0x4000, - 0xcaa: 0x4000, 0xcab: 0x4000, 0xcac: 0x4000, 0xcad: 0x4000, 0xcae: 0x4000, 0xcaf: 0x4000, - 0xcb0: 0x4000, 0xcb1: 0x4000, 0xcb2: 0x4000, 0xcb3: 0x4000, 0xcb4: 0x4000, 0xcb5: 0x4000, - 0xcb6: 0x4000, 0xcb7: 0x4000, 0xcb8: 0x4000, 0xcb9: 0x4000, 0xcba: 0x4000, 0xcbb: 0x4000, - 0xcbc: 0x4000, 0xcbd: 0x4000, 0xcbe: 0x4000, - // Block 0x33, offset 0xcc0 - 0xcc1: 0x4000, 0xcc2: 0x4000, 0xcc3: 0x4000, 0xcc4: 0x4000, 0xcc5: 0x4000, - 0xcc6: 0x4000, 0xcc7: 0x4000, 0xcc8: 0x4000, 0xcc9: 0x4000, 0xcca: 0x4000, 0xccb: 0x4000, - 0xccc: 0x4000, 0xccd: 0x4000, 0xcce: 0x4000, 0xccf: 0x4000, 0xcd0: 0x4000, 0xcd1: 0x4000, - 0xcd2: 0x4000, 0xcd3: 0x4000, 0xcd4: 0x4000, 0xcd5: 0x4000, 0xcd6: 0x4000, 0xcd7: 0x4000, - 0xcd8: 0x4000, 0xcd9: 0x4000, 0xcda: 0x4000, 0xcdb: 0x4000, 0xcdc: 0x4000, 0xcdd: 0x4000, - 0xcde: 0x4000, 0xcdf: 0x4000, 0xce0: 0x4000, 0xce1: 0x4000, 0xce2: 0x4000, 0xce3: 0x4000, - 0xce4: 0x4000, 0xce5: 0x4000, 0xce6: 0x4000, 0xce7: 0x4000, 0xce8: 0x4000, 0xce9: 0x4000, - 0xcea: 0x4000, 0xceb: 0x4000, 0xcec: 0x4000, 0xced: 0x4000, 0xcee: 0x4000, 0xcef: 0x4000, - 0xcf0: 0x4000, 0xcf1: 0x4000, 0xcf2: 0x4000, 0xcf3: 0x4000, 0xcf4: 0x4000, 0xcf5: 0x4000, - 0xcf6: 0x4000, 0xcf7: 0x4000, 0xcf8: 0x4000, 0xcf9: 0x4000, 0xcfa: 0x4000, 0xcfb: 0x4000, - 0xcfc: 0x4000, 0xcfd: 0x4000, 0xcfe: 0x4000, 0xcff: 0x4000, - // Block 0x34, offset 0xd00 - 0xd00: 0x4000, 0xd01: 0x4000, 0xd02: 0x4000, 0xd03: 0x4000, 0xd04: 0x4000, 0xd05: 0x4000, - 0xd06: 0x4000, 0xd07: 0x4000, 0xd08: 0x4000, 0xd09: 0x4000, 0xd0a: 0x4000, 0xd0b: 0x4000, - 0xd0c: 0x4000, 0xd0d: 0x4000, 0xd0e: 0x4000, 0xd0f: 0x4000, 0xd10: 0x4000, 0xd11: 0x4000, - 0xd12: 0x4000, 0xd13: 0x4000, 0xd14: 0x4000, 0xd15: 0x4000, 0xd16: 0x4000, - 0xd19: 0x4016, 0xd1a: 0x4017, 0xd1b: 0x4000, 0xd1c: 0x4000, 0xd1d: 0x4000, - 0xd1e: 0x4000, 0xd1f: 0x4000, 0xd20: 0x4000, 0xd21: 0x4018, 0xd22: 0x4019, 0xd23: 0x401a, - 0xd24: 0x401b, 0xd25: 0x401c, 0xd26: 0x401d, 0xd27: 0x401e, 0xd28: 0x401f, 0xd29: 0x4020, - 0xd2a: 0x4021, 0xd2b: 0x4022, 0xd2c: 0x4000, 0xd2d: 0x4010, 0xd2e: 0x4000, 0xd2f: 0x4023, - 0xd30: 0x4000, 0xd31: 0x4024, 0xd32: 0x4000, 0xd33: 0x4025, 0xd34: 0x4000, 0xd35: 0x4026, - 0xd36: 0x4000, 0xd37: 0x401a, 0xd38: 0x4000, 0xd39: 0x4027, 0xd3a: 0x4000, 0xd3b: 0x4028, - 0xd3c: 0x4000, 0xd3d: 0x4020, 0xd3e: 0x4000, 0xd3f: 0x4029, - // Block 0x35, offset 0xd40 - 0xd40: 0x4000, 0xd41: 0x402a, 0xd42: 0x4000, 0xd43: 0x402b, 0xd44: 0x402c, 0xd45: 0x4000, - 0xd46: 0x4017, 0xd47: 0x4000, 0xd48: 0x402d, 0xd49: 0x4000, 0xd4a: 0x402e, 0xd4b: 0x402f, - 0xd4c: 0x4030, 0xd4d: 0x4017, 0xd4e: 0x4016, 0xd4f: 0x4017, 0xd50: 0x4000, 0xd51: 0x4000, - 0xd52: 0x4031, 0xd53: 0x4000, 0xd54: 0x4000, 0xd55: 0x4031, 0xd56: 0x4000, 0xd57: 0x4000, - 0xd58: 0x4032, 0xd59: 0x4000, 0xd5a: 0x4000, 0xd5b: 0x4032, 0xd5c: 0x4000, 0xd5d: 0x4000, - 0xd5e: 0x4033, 0xd5f: 0x402e, 0xd60: 0x4034, 0xd61: 0x4035, 0xd62: 0x4034, 0xd63: 0x4036, - 0xd64: 0x4037, 0xd65: 0x4024, 0xd66: 0x4035, 0xd67: 0x4025, 0xd68: 0x4038, 0xd69: 0x4038, - 0xd6a: 0x4039, 0xd6b: 0x4039, 0xd6c: 0x403a, 0xd6d: 0x403a, 0xd6e: 0x4000, 0xd6f: 0x4035, - 0xd70: 0x4000, 0xd71: 0x4000, 0xd72: 0x403b, 0xd73: 0x403c, 0xd74: 0x4000, 0xd75: 0x4000, - 0xd76: 0x4000, 0xd77: 0x4000, 0xd78: 0x4000, 0xd79: 0x4000, 0xd7a: 0x4000, 0xd7b: 0x403d, - 0xd7c: 0x401c, 0xd7d: 0x4000, 0xd7e: 0x4000, 0xd7f: 0x4000, - // Block 0x36, offset 0xd80 - 0xd85: 0x4000, - 0xd86: 0x4000, 0xd87: 0x4000, 0xd88: 0x4000, 0xd89: 0x4000, 0xd8a: 0x4000, 0xd8b: 0x4000, - 0xd8c: 0x4000, 0xd8d: 0x4000, 0xd8e: 0x4000, 0xd8f: 0x4000, 0xd90: 0x4000, 0xd91: 0x4000, - 0xd92: 0x4000, 0xd93: 0x4000, 0xd94: 0x4000, 0xd95: 0x4000, 0xd96: 0x4000, 0xd97: 0x4000, - 0xd98: 0x4000, 0xd99: 0x4000, 0xd9a: 0x4000, 0xd9b: 0x4000, 0xd9c: 0x4000, 0xd9d: 0x4000, - 0xd9e: 0x4000, 0xd9f: 0x4000, 0xda0: 0x4000, 0xda1: 0x4000, 0xda2: 0x4000, 0xda3: 0x4000, - 0xda4: 0x4000, 0xda5: 0x4000, 0xda6: 0x4000, 0xda7: 0x4000, 0xda8: 0x4000, 0xda9: 0x4000, - 0xdaa: 0x4000, 0xdab: 0x4000, 0xdac: 0x4000, 0xdad: 0x4000, 0xdae: 0x4000, - 0xdb1: 0x403e, 0xdb2: 0x403e, 0xdb3: 0x403e, 0xdb4: 0x403e, 0xdb5: 0x403e, - 0xdb6: 0x403e, 0xdb7: 0x403e, 0xdb8: 0x403e, 0xdb9: 0x403e, 0xdba: 0x403e, 0xdbb: 0x403e, - 0xdbc: 0x403e, 0xdbd: 0x403e, 0xdbe: 0x403e, 0xdbf: 0x403e, - // Block 0x37, offset 0xdc0 - 0xdc0: 0x4037, 0xdc1: 0x4037, 0xdc2: 0x4037, 0xdc3: 0x4037, 0xdc4: 0x4037, 0xdc5: 0x4037, - 0xdc6: 0x4037, 0xdc7: 0x4037, 0xdc8: 0x4037, 0xdc9: 0x4037, 0xdca: 0x4037, 0xdcb: 0x4037, - 0xdcc: 0x4037, 0xdcd: 0x4037, 0xdce: 0x4037, 0xdcf: 0x400e, 0xdd0: 0x403f, 0xdd1: 0x4040, - 0xdd2: 0x4041, 0xdd3: 0x4040, 0xdd4: 0x403f, 0xdd5: 0x4042, 0xdd6: 0x4043, 0xdd7: 0x4044, - 0xdd8: 0x4040, 0xdd9: 0x4041, 0xdda: 0x4040, 0xddb: 0x4045, 0xddc: 0x4009, 0xddd: 0x4045, - 0xdde: 0x4046, 0xddf: 0x4045, 0xde0: 0x4047, 0xde1: 0x400b, 0xde2: 0x400a, 0xde3: 0x400c, - 0xde4: 0x4048, 0xde5: 0x4000, 0xde6: 0x4000, 0xde7: 0x4000, 0xde8: 0x4000, 0xde9: 0x4000, - 0xdea: 0x4000, 0xdeb: 0x4000, 0xdec: 0x4000, 0xded: 0x4000, 0xdee: 0x4000, 0xdef: 0x4000, - 0xdf0: 0x4000, 0xdf1: 0x4000, 0xdf2: 0x4000, 0xdf3: 0x4000, 0xdf4: 0x4000, 0xdf5: 0x4000, - 0xdf6: 0x4000, 0xdf7: 0x4000, 0xdf8: 0x4000, 0xdf9: 0x4000, 0xdfa: 0x4000, 0xdfb: 0x4000, - 0xdfc: 0x4000, 0xdfd: 0x4000, 0xdfe: 0x4000, 0xdff: 0x4000, - // Block 0x38, offset 0xe00 - 0xe00: 0x4000, 0xe01: 0x4000, 0xe02: 0x4000, 0xe03: 0x4000, 0xe04: 0x4000, 0xe05: 0x4000, - 0xe06: 0x4000, 0xe07: 0x4000, 0xe08: 0x4000, 0xe09: 0x4000, 0xe0a: 0x4000, 0xe0b: 0x4000, - 0xe0c: 0x4000, 0xe0d: 0x4000, 0xe0e: 0x4000, 0xe10: 0x4000, 0xe11: 0x4000, - 0xe12: 0x4000, 0xe13: 0x4000, 0xe14: 0x4000, 0xe15: 0x4000, 0xe16: 0x4000, 0xe17: 0x4000, - 0xe18: 0x4000, 0xe19: 0x4000, 0xe1a: 0x4000, 0xe1b: 0x4000, 0xe1c: 0x4000, 0xe1d: 0x4000, - 0xe1e: 0x4000, 0xe1f: 0x4000, 0xe20: 0x4000, 0xe21: 0x4000, 0xe22: 0x4000, 0xe23: 0x4000, - 0xe24: 0x4000, 0xe25: 0x4000, 0xe26: 0x4000, 0xe27: 0x4000, 0xe28: 0x4000, 0xe29: 0x4000, - 0xe2a: 0x4000, 0xe2b: 0x4000, 0xe2c: 0x4000, 0xe2d: 0x4000, 0xe2e: 0x4000, 0xe2f: 0x4000, - 0xe30: 0x4000, 0xe31: 0x4000, 0xe32: 0x4000, 0xe33: 0x4000, 0xe34: 0x4000, 0xe35: 0x4000, - 0xe36: 0x4000, 0xe37: 0x4000, 0xe38: 0x4000, 0xe39: 0x4000, 0xe3a: 0x4000, - // Block 0x39, offset 0xe40 - 0xe40: 0x4000, 0xe41: 0x4000, 0xe42: 0x4000, 0xe43: 0x4000, 0xe44: 0x4000, 0xe45: 0x4000, - 0xe46: 0x4000, 0xe47: 0x4000, 0xe48: 0x4000, 0xe49: 0x4000, 0xe4a: 0x4000, 0xe4b: 0x4000, - 0xe4c: 0x4000, 0xe4d: 0x4000, 0xe4e: 0x4000, 0xe4f: 0x4000, 0xe50: 0x4000, 0xe51: 0x4000, - 0xe52: 0x4000, 0xe53: 0x4000, 0xe54: 0x4000, 0xe55: 0x4000, 0xe56: 0x4000, 0xe57: 0x4000, - 0xe58: 0x4000, 0xe59: 0x4000, 0xe5a: 0x4000, 0xe5b: 0x4000, 0xe5c: 0x4000, 0xe5d: 0x4000, - 0xe5e: 0x4000, 0xe5f: 0x4000, 0xe60: 0x4000, 0xe61: 0x4000, 0xe62: 0x4000, 0xe63: 0x4000, - 0xe70: 0x4000, 0xe71: 0x4000, 0xe72: 0x4000, 0xe73: 0x4000, 0xe74: 0x4000, 0xe75: 0x4000, - 0xe76: 0x4000, 0xe77: 0x4000, 0xe78: 0x4000, 0xe79: 0x4000, 0xe7a: 0x4000, 0xe7b: 0x4000, - 0xe7c: 0x4000, 0xe7d: 0x4000, 0xe7e: 0x4000, 0xe7f: 0x4000, - // Block 0x3a, offset 0xe80 - 0xe80: 0x4000, 0xe81: 0x4000, 0xe82: 0x4000, 0xe83: 0x4000, 0xe84: 0x4000, 0xe85: 0x4000, - 0xe86: 0x4000, 0xe87: 0x4000, 0xe88: 0x4000, 0xe89: 0x4000, 0xe8a: 0x4000, 0xe8b: 0x4000, - 0xe8c: 0x4000, 0xe8d: 0x4000, 0xe8e: 0x4000, 0xe8f: 0x4000, 0xe90: 0x4000, 0xe91: 0x4000, - 0xe92: 0x4000, 0xe93: 0x4000, 0xe94: 0x4000, 0xe95: 0x4000, 0xe96: 0x4000, 0xe97: 0x4000, - 0xe98: 0x4000, 0xe99: 0x4000, 0xe9a: 0x4000, 0xe9b: 0x4000, 0xe9c: 0x4000, 0xe9d: 0x4000, - 0xe9e: 0x4000, 0xea0: 0x4000, 0xea1: 0x4000, 0xea2: 0x4000, 0xea3: 0x4000, - 0xea4: 0x4000, 0xea5: 0x4000, 0xea6: 0x4000, 0xea7: 0x4000, 0xea8: 0x4000, 0xea9: 0x4000, - 0xeaa: 0x4000, 0xeab: 0x4000, 0xeac: 0x4000, 0xead: 0x4000, 0xeae: 0x4000, 0xeaf: 0x4000, - 0xeb0: 0x4000, 0xeb1: 0x4000, 0xeb2: 0x4000, 0xeb3: 0x4000, 0xeb4: 0x4000, 0xeb5: 0x4000, - 0xeb6: 0x4000, 0xeb7: 0x4000, 0xeb8: 0x4000, 0xeb9: 0x4000, 0xeba: 0x4000, 0xebb: 0x4000, - 0xebc: 0x4000, 0xebd: 0x4000, 0xebe: 0x4000, 0xebf: 0x4000, - // Block 0x3b, offset 0xec0 - 0xec0: 0x4000, 0xec1: 0x4000, 0xec2: 0x4000, 0xec3: 0x4000, 0xec4: 0x4000, 0xec5: 0x4000, - 0xec6: 0x4000, 0xec7: 0x4000, 0xec8: 0x2000, 0xec9: 0x2000, 0xeca: 0x2000, 0xecb: 0x2000, - 0xecc: 0x2000, 0xecd: 0x2000, 0xece: 0x2000, 0xecf: 0x2000, 0xed0: 0x4000, 0xed1: 0x4000, - 0xed2: 0x4000, 0xed3: 0x4000, 0xed4: 0x4000, 0xed5: 0x4000, 0xed6: 0x4000, 0xed7: 0x4000, - 0xed8: 0x4000, 0xed9: 0x4000, 0xeda: 0x4000, 0xedb: 0x4000, 0xedc: 0x4000, 0xedd: 0x4000, - 0xede: 0x4000, 0xedf: 0x4000, 0xee0: 0x4000, 0xee1: 0x4000, 0xee2: 0x4000, 0xee3: 0x4000, - 0xee4: 0x4000, 0xee5: 0x4000, 0xee6: 0x4000, 0xee7: 0x4000, 0xee8: 0x4000, 0xee9: 0x4000, - 0xeea: 0x4000, 0xeeb: 0x4000, 0xeec: 0x4000, 0xeed: 0x4000, 0xeee: 0x4000, 0xeef: 0x4000, - 0xef0: 0x4000, 0xef1: 0x4000, 0xef2: 0x4000, 0xef3: 0x4000, 0xef4: 0x4000, 0xef5: 0x4000, - 0xef6: 0x4000, 0xef7: 0x4000, 0xef8: 0x4000, 0xef9: 0x4000, 0xefa: 0x4000, 0xefb: 0x4000, - 0xefc: 0x4000, 0xefd: 0x4000, 0xefe: 0x4000, 0xeff: 0x4000, - // Block 0x3c, offset 0xf00 - 0xf00: 0x4000, 0xf01: 0x4000, 0xf02: 0x4000, 0xf03: 0x4000, 0xf04: 0x4000, 0xf05: 0x4000, - 0xf06: 0x4000, 0xf07: 0x4000, 0xf08: 0x4000, 0xf09: 0x4000, 0xf0a: 0x4000, 0xf0b: 0x4000, - 0xf0c: 0x4000, 0xf0d: 0x4000, 0xf0e: 0x4000, 0xf0f: 0x4000, 0xf10: 0x4000, 0xf11: 0x4000, - 0xf12: 0x4000, 0xf13: 0x4000, 0xf14: 0x4000, 0xf15: 0x4000, 0xf16: 0x4000, 0xf17: 0x4000, - 0xf18: 0x4000, 0xf19: 0x4000, 0xf1a: 0x4000, 0xf1b: 0x4000, 0xf1c: 0x4000, 0xf1d: 0x4000, - 0xf1e: 0x4000, 0xf1f: 0x4000, 0xf20: 0x4000, 0xf21: 0x4000, 0xf22: 0x4000, 0xf23: 0x4000, - 0xf24: 0x4000, 0xf25: 0x4000, 0xf26: 0x4000, 0xf27: 0x4000, 0xf28: 0x4000, 0xf29: 0x4000, - 0xf2a: 0x4000, 0xf2b: 0x4000, 0xf2c: 0x4000, 0xf2d: 0x4000, 0xf2e: 0x4000, 0xf2f: 0x4000, - 0xf30: 0x4000, 0xf31: 0x4000, 0xf32: 0x4000, 0xf33: 0x4000, 0xf34: 0x4000, 0xf35: 0x4000, - 0xf36: 0x4000, 0xf37: 0x4000, 0xf38: 0x4000, 0xf39: 0x4000, 0xf3a: 0x4000, 0xf3b: 0x4000, - 0xf3c: 0x4000, 0xf3d: 0x4000, 0xf3e: 0x4000, - // Block 0x3d, offset 0xf40 - 0xf40: 0x4000, 0xf41: 0x4000, 0xf42: 0x4000, 0xf43: 0x4000, 0xf44: 0x4000, 0xf45: 0x4000, - 0xf46: 0x4000, 0xf47: 0x4000, 0xf48: 0x4000, 0xf49: 0x4000, 0xf4a: 0x4000, 0xf4b: 0x4000, - 0xf4c: 0x4000, 0xf50: 0x4000, 0xf51: 0x4000, - 0xf52: 0x4000, 0xf53: 0x4000, 0xf54: 0x4000, 0xf55: 0x4000, 0xf56: 0x4000, 0xf57: 0x4000, - 0xf58: 0x4000, 0xf59: 0x4000, 0xf5a: 0x4000, 0xf5b: 0x4000, 0xf5c: 0x4000, 0xf5d: 0x4000, - 0xf5e: 0x4000, 0xf5f: 0x4000, 0xf60: 0x4000, 0xf61: 0x4000, 0xf62: 0x4000, 0xf63: 0x4000, - 0xf64: 0x4000, 0xf65: 0x4000, 0xf66: 0x4000, 0xf67: 0x4000, 0xf68: 0x4000, 0xf69: 0x4000, - 0xf6a: 0x4000, 0xf6b: 0x4000, 0xf6c: 0x4000, 0xf6d: 0x4000, 0xf6e: 0x4000, 0xf6f: 0x4000, - 0xf70: 0x4000, 0xf71: 0x4000, 0xf72: 0x4000, 0xf73: 0x4000, 0xf74: 0x4000, 0xf75: 0x4000, - 0xf76: 0x4000, 0xf77: 0x4000, 0xf78: 0x4000, 0xf79: 0x4000, 0xf7a: 0x4000, 0xf7b: 0x4000, - 0xf7c: 0x4000, 0xf7d: 0x4000, 0xf7e: 0x4000, 0xf7f: 0x4000, - // Block 0x3e, offset 0xf80 - 0xf80: 0x4000, 0xf81: 0x4000, 0xf82: 0x4000, 0xf83: 0x4000, 0xf84: 0x4000, 0xf85: 0x4000, - 0xf86: 0x4000, - // Block 0x3f, offset 0xfc0 - 0xfe0: 0x4000, 0xfe1: 0x4000, 0xfe2: 0x4000, 0xfe3: 0x4000, - 0xfe4: 0x4000, 0xfe5: 0x4000, 0xfe6: 0x4000, 0xfe7: 0x4000, 0xfe8: 0x4000, 0xfe9: 0x4000, - 0xfea: 0x4000, 0xfeb: 0x4000, 0xfec: 0x4000, 0xfed: 0x4000, 0xfee: 0x4000, 0xfef: 0x4000, - 0xff0: 0x4000, 0xff1: 0x4000, 0xff2: 0x4000, 0xff3: 0x4000, 0xff4: 0x4000, 0xff5: 0x4000, - 0xff6: 0x4000, 0xff7: 0x4000, 0xff8: 0x4000, 0xff9: 0x4000, 0xffa: 0x4000, 0xffb: 0x4000, - 0xffc: 0x4000, - // Block 0x40, offset 0x1000 - 0x1000: 0x4000, 0x1001: 0x4000, 0x1002: 0x4000, 0x1003: 0x4000, 0x1004: 0x4000, 0x1005: 0x4000, - 0x1006: 0x4000, 0x1007: 0x4000, 0x1008: 0x4000, 0x1009: 0x4000, 0x100a: 0x4000, 0x100b: 0x4000, - 0x100c: 0x4000, 0x100d: 0x4000, 0x100e: 0x4000, 0x100f: 0x4000, 0x1010: 0x4000, 0x1011: 0x4000, - 0x1012: 0x4000, 0x1013: 0x4000, 0x1014: 0x4000, 0x1015: 0x4000, 0x1016: 0x4000, 0x1017: 0x4000, - 0x1018: 0x4000, 0x1019: 0x4000, 0x101a: 0x4000, 0x101b: 0x4000, 0x101c: 0x4000, 0x101d: 0x4000, - 0x101e: 0x4000, 0x101f: 0x4000, 0x1020: 0x4000, 0x1021: 0x4000, 0x1022: 0x4000, 0x1023: 0x4000, - // Block 0x41, offset 0x1040 - 0x1040: 0x2000, 0x1041: 0x2000, 0x1042: 0x2000, 0x1043: 0x2000, 0x1044: 0x2000, 0x1045: 0x2000, - 0x1046: 0x2000, 0x1047: 0x2000, 0x1048: 0x2000, 0x1049: 0x2000, 0x104a: 0x2000, 0x104b: 0x2000, - 0x104c: 0x2000, 0x104d: 0x2000, 0x104e: 0x2000, 0x104f: 0x2000, 0x1050: 0x4000, 0x1051: 0x4000, - 0x1052: 0x4000, 0x1053: 0x4000, 0x1054: 0x4000, 0x1055: 0x4000, 0x1056: 0x4000, 0x1057: 0x4000, - 0x1058: 0x4000, 0x1059: 0x4000, - 0x1070: 0x4000, 0x1071: 0x4000, 0x1072: 0x4000, 0x1073: 0x4000, 0x1074: 0x4000, 0x1075: 0x4000, - 0x1076: 0x4000, 0x1077: 0x4000, 0x1078: 0x4000, 0x1079: 0x4000, 0x107a: 0x4000, 0x107b: 0x4000, - 0x107c: 0x4000, 0x107d: 0x4000, 0x107e: 0x4000, 0x107f: 0x4000, - // Block 0x42, offset 0x1080 - 0x1080: 0x4000, 0x1081: 0x4000, 0x1082: 0x4000, 0x1083: 0x4000, 0x1084: 0x4000, 0x1085: 0x4000, - 0x1086: 0x4000, 0x1087: 0x4000, 0x1088: 0x4000, 0x1089: 0x4000, 0x108a: 0x4000, 0x108b: 0x4000, - 0x108c: 0x4000, 0x108d: 0x4000, 0x108e: 0x4000, 0x108f: 0x4000, 0x1090: 0x4000, 0x1091: 0x4000, - 0x1092: 0x4000, 0x1094: 0x4000, 0x1095: 0x4000, 0x1096: 0x4000, 0x1097: 0x4000, - 0x1098: 0x4000, 0x1099: 0x4000, 0x109a: 0x4000, 0x109b: 0x4000, 0x109c: 0x4000, 0x109d: 0x4000, - 0x109e: 0x4000, 0x109f: 0x4000, 0x10a0: 0x4000, 0x10a1: 0x4000, 0x10a2: 0x4000, 0x10a3: 0x4000, - 0x10a4: 0x4000, 0x10a5: 0x4000, 0x10a6: 0x4000, 0x10a8: 0x4000, 0x10a9: 0x4000, - 0x10aa: 0x4000, 0x10ab: 0x4000, - // Block 0x43, offset 0x10c0 - 0x10c1: 0x9012, 0x10c2: 0x9012, 0x10c3: 0x9012, 0x10c4: 0x9012, 0x10c5: 0x9012, - 0x10c6: 0x9012, 0x10c7: 0x9012, 0x10c8: 0x9012, 0x10c9: 0x9012, 0x10ca: 0x9012, 0x10cb: 0x9012, - 0x10cc: 0x9012, 0x10cd: 0x9012, 0x10ce: 0x9012, 0x10cf: 0x9012, 0x10d0: 0x9012, 0x10d1: 0x9012, - 0x10d2: 0x9012, 0x10d3: 0x9012, 0x10d4: 0x9012, 0x10d5: 0x9012, 0x10d6: 0x9012, 0x10d7: 0x9012, - 0x10d8: 0x9012, 0x10d9: 0x9012, 0x10da: 0x9012, 0x10db: 0x9012, 0x10dc: 0x9012, 0x10dd: 0x9012, - 0x10de: 0x9012, 0x10df: 0x9012, 0x10e0: 0x9049, 0x10e1: 0x9049, 0x10e2: 0x9049, 0x10e3: 0x9049, - 0x10e4: 0x9049, 0x10e5: 0x9049, 0x10e6: 0x9049, 0x10e7: 0x9049, 0x10e8: 0x9049, 0x10e9: 0x9049, - 0x10ea: 0x9049, 0x10eb: 0x9049, 0x10ec: 0x9049, 0x10ed: 0x9049, 0x10ee: 0x9049, 0x10ef: 0x9049, - 0x10f0: 0x9049, 0x10f1: 0x9049, 0x10f2: 0x9049, 0x10f3: 0x9049, 0x10f4: 0x9049, 0x10f5: 0x9049, - 0x10f6: 0x9049, 0x10f7: 0x9049, 0x10f8: 0x9049, 0x10f9: 0x9049, 0x10fa: 0x9049, 0x10fb: 0x9049, - 0x10fc: 0x9049, 0x10fd: 0x9049, 0x10fe: 0x9049, 0x10ff: 0x9049, - // Block 0x44, offset 0x1100 - 0x1100: 0x9049, 0x1101: 0x9049, 0x1102: 0x9049, 0x1103: 0x9049, 0x1104: 0x9049, 0x1105: 0x9049, - 0x1106: 0x9049, 0x1107: 0x9049, 0x1108: 0x9049, 0x1109: 0x9049, 0x110a: 0x9049, 0x110b: 0x9049, - 0x110c: 0x9049, 0x110d: 0x9049, 0x110e: 0x9049, 0x110f: 0x9049, 0x1110: 0x9049, 0x1111: 0x9049, - 0x1112: 0x9049, 0x1113: 0x9049, 0x1114: 0x9049, 0x1115: 0x9049, 0x1116: 0x9049, 0x1117: 0x9049, - 0x1118: 0x9049, 0x1119: 0x9049, 0x111a: 0x9049, 0x111b: 0x9049, 0x111c: 0x9049, 0x111d: 0x9049, - 0x111e: 0x9049, 0x111f: 0x904a, 0x1120: 0x904b, 0x1121: 0xb04c, 0x1122: 0xb04d, 0x1123: 0xb04d, - 0x1124: 0xb04e, 0x1125: 0xb04f, 0x1126: 0xb050, 0x1127: 0xb051, 0x1128: 0xb052, 0x1129: 0xb053, - 0x112a: 0xb054, 0x112b: 0xb055, 0x112c: 0xb056, 0x112d: 0xb057, 0x112e: 0xb058, 0x112f: 0xb059, - 0x1130: 0xb05a, 0x1131: 0xb05b, 0x1132: 0xb05c, 0x1133: 0xb05d, 0x1134: 0xb05e, 0x1135: 0xb05f, - 0x1136: 0xb060, 0x1137: 0xb061, 0x1138: 0xb062, 0x1139: 0xb063, 0x113a: 0xb064, 0x113b: 0xb065, - 0x113c: 0xb052, 0x113d: 0xb066, 0x113e: 0xb067, 0x113f: 0xb055, - // Block 0x45, offset 0x1140 - 0x1140: 0xb068, 0x1141: 0xb069, 0x1142: 0xb06a, 0x1143: 0xb06b, 0x1144: 0xb05a, 0x1145: 0xb056, - 0x1146: 0xb06c, 0x1147: 0xb06d, 0x1148: 0xb06b, 0x1149: 0xb06e, 0x114a: 0xb06b, 0x114b: 0xb06f, - 0x114c: 0xb06f, 0x114d: 0xb070, 0x114e: 0xb070, 0x114f: 0xb071, 0x1150: 0xb056, 0x1151: 0xb072, - 0x1152: 0xb073, 0x1153: 0xb072, 0x1154: 0xb074, 0x1155: 0xb073, 0x1156: 0xb075, 0x1157: 0xb075, - 0x1158: 0xb076, 0x1159: 0xb076, 0x115a: 0xb077, 0x115b: 0xb077, 0x115c: 0xb073, 0x115d: 0xb078, - 0x115e: 0xb079, 0x115f: 0xb067, 0x1160: 0xb07a, 0x1161: 0xb07b, 0x1162: 0xb07b, 0x1163: 0xb07b, - 0x1164: 0xb07b, 0x1165: 0xb07b, 0x1166: 0xb07b, 0x1167: 0xb07b, 0x1168: 0xb07b, 0x1169: 0xb07b, - 0x116a: 0xb07b, 0x116b: 0xb07b, 0x116c: 0xb07b, 0x116d: 0xb07b, 0x116e: 0xb07b, 0x116f: 0xb07b, - 0x1170: 0xb07c, 0x1171: 0xb07c, 0x1172: 0xb07c, 0x1173: 0xb07c, 0x1174: 0xb07c, 0x1175: 0xb07c, - 0x1176: 0xb07c, 0x1177: 0xb07c, 0x1178: 0xb07c, 0x1179: 0xb07c, 0x117a: 0xb07c, 0x117b: 0xb07c, - 0x117c: 0xb07c, 0x117d: 0xb07c, 0x117e: 0xb07c, - // Block 0x46, offset 0x1180 - 0x1182: 0xb07d, 0x1183: 0xb07e, 0x1184: 0xb07f, 0x1185: 0xb080, - 0x1186: 0xb07f, 0x1187: 0xb07e, 0x118a: 0xb081, 0x118b: 0xb082, - 0x118c: 0xb083, 0x118d: 0xb07f, 0x118e: 0xb080, 0x118f: 0xb07f, - 0x1192: 0xb084, 0x1193: 0xb085, 0x1194: 0xb084, 0x1195: 0xb086, 0x1196: 0xb084, 0x1197: 0xb087, - 0x119a: 0xb088, 0x119b: 0xb089, 0x119c: 0xb08a, - 0x11a0: 0x908b, 0x11a1: 0x908b, 0x11a2: 0x908c, 0x11a3: 0x908d, - 0x11a4: 0x908b, 0x11a5: 0x908e, 0x11a6: 0x908f, 0x11a8: 0xb090, 0x11a9: 0xb091, - 0x11aa: 0xb092, 0x11ab: 0xb091, 0x11ac: 0xb093, 0x11ad: 0xb094, 0x11ae: 0xb095, - 0x11bd: 0x2000, - // Block 0x47, offset 0x11c0 - 0x11e0: 0x4000, 0x11e1: 0x4000, - // Block 0x48, offset 0x1200 - 0x1200: 0x4000, 0x1201: 0x4000, 0x1202: 0x4000, 0x1203: 0x4000, 0x1204: 0x4000, 0x1205: 0x4000, - 0x1206: 0x4000, 0x1207: 0x4000, 0x1208: 0x4000, 0x1209: 0x4000, 0x120a: 0x4000, 0x120b: 0x4000, - 0x120c: 0x4000, 0x120d: 0x4000, 0x120e: 0x4000, 0x120f: 0x4000, 0x1210: 0x4000, 0x1211: 0x4000, - 0x1212: 0x4000, 0x1213: 0x4000, 0x1214: 0x4000, 0x1215: 0x4000, 0x1216: 0x4000, 0x1217: 0x4000, - 0x1218: 0x4000, 0x1219: 0x4000, 0x121a: 0x4000, 0x121b: 0x4000, 0x121c: 0x4000, 0x121d: 0x4000, - 0x121e: 0x4000, 0x121f: 0x4000, 0x1220: 0x4000, 0x1221: 0x4000, 0x1222: 0x4000, 0x1223: 0x4000, - 0x1224: 0x4000, 0x1225: 0x4000, 0x1226: 0x4000, 0x1227: 0x4000, 0x1228: 0x4000, 0x1229: 0x4000, - 0x122a: 0x4000, 0x122b: 0x4000, 0x122c: 0x4000, - // Block 0x49, offset 0x1240 - 0x1240: 0x4000, 0x1241: 0x4000, 0x1242: 0x4000, 0x1243: 0x4000, 0x1244: 0x4000, 0x1245: 0x4000, - 0x1246: 0x4000, 0x1247: 0x4000, 0x1248: 0x4000, 0x1249: 0x4000, 0x124a: 0x4000, 0x124b: 0x4000, - 0x124c: 0x4000, 0x124d: 0x4000, 0x124e: 0x4000, 0x124f: 0x4000, 0x1250: 0x4000, 0x1251: 0x4000, - 0x1252: 0x4000, 0x1253: 0x4000, 0x1254: 0x4000, 0x1255: 0x4000, 0x1256: 0x4000, 0x1257: 0x4000, - 0x1258: 0x4000, 0x1259: 0x4000, 0x125a: 0x4000, 0x125b: 0x4000, 0x125c: 0x4000, 0x125d: 0x4000, - 0x125e: 0x4000, 0x125f: 0x4000, 0x1260: 0x4000, 0x1261: 0x4000, 0x1262: 0x4000, 0x1263: 0x4000, - 0x1264: 0x4000, 0x1265: 0x4000, 0x1266: 0x4000, 0x1267: 0x4000, 0x1268: 0x4000, 0x1269: 0x4000, - 0x126a: 0x4000, 0x126b: 0x4000, 0x126c: 0x4000, 0x126d: 0x4000, 0x126e: 0x4000, 0x126f: 0x4000, - 0x1270: 0x4000, 0x1271: 0x4000, 0x1272: 0x4000, - // Block 0x4a, offset 0x1280 - 0x1280: 0x4000, 0x1281: 0x4000, 0x1282: 0x4000, 0x1283: 0x4000, 0x1284: 0x4000, 0x1285: 0x4000, - 0x1286: 0x4000, 0x1287: 0x4000, 0x1288: 0x4000, 0x1289: 0x4000, 0x128a: 0x4000, 0x128b: 0x4000, - 0x128c: 0x4000, 0x128d: 0x4000, 0x128e: 0x4000, 0x128f: 0x4000, 0x1290: 0x4000, 0x1291: 0x4000, - 0x1292: 0x4000, 0x1293: 0x4000, 0x1294: 0x4000, 0x1295: 0x4000, 0x1296: 0x4000, 0x1297: 0x4000, - 0x1298: 0x4000, 0x1299: 0x4000, 0x129a: 0x4000, 0x129b: 0x4000, 0x129c: 0x4000, 0x129d: 0x4000, - 0x129e: 0x4000, - // Block 0x4b, offset 0x12c0 - 0x12f0: 0x4000, 0x12f1: 0x4000, 0x12f2: 0x4000, 0x12f3: 0x4000, 0x12f4: 0x4000, 0x12f5: 0x4000, - 0x12f6: 0x4000, 0x12f7: 0x4000, 0x12f8: 0x4000, 0x12f9: 0x4000, 0x12fa: 0x4000, 0x12fb: 0x4000, - 0x12fc: 0x4000, 0x12fd: 0x4000, 0x12fe: 0x4000, 0x12ff: 0x4000, - // Block 0x4c, offset 0x1300 - 0x1300: 0x4000, 0x1301: 0x4000, 0x1302: 0x4000, 0x1303: 0x4000, 0x1304: 0x4000, 0x1305: 0x4000, - 0x1306: 0x4000, 0x1307: 0x4000, 0x1308: 0x4000, 0x1309: 0x4000, 0x130a: 0x4000, 0x130b: 0x4000, - 0x130c: 0x4000, 0x130d: 0x4000, 0x130e: 0x4000, 0x130f: 0x4000, 0x1310: 0x4000, 0x1311: 0x4000, - 0x1312: 0x4000, 0x1313: 0x4000, 0x1314: 0x4000, 0x1315: 0x4000, 0x1316: 0x4000, 0x1317: 0x4000, - 0x1318: 0x4000, 0x1319: 0x4000, 0x131a: 0x4000, 0x131b: 0x4000, 0x131c: 0x4000, 0x131d: 0x4000, - 0x131e: 0x4000, 0x131f: 0x4000, 0x1320: 0x4000, 0x1321: 0x4000, 0x1322: 0x4000, 0x1323: 0x4000, - 0x1324: 0x4000, 0x1325: 0x4000, 0x1326: 0x4000, 0x1327: 0x4000, 0x1328: 0x4000, 0x1329: 0x4000, - 0x132a: 0x4000, 0x132b: 0x4000, 0x132c: 0x4000, 0x132d: 0x4000, 0x132e: 0x4000, 0x132f: 0x4000, - 0x1330: 0x4000, 0x1331: 0x4000, 0x1332: 0x4000, 0x1333: 0x4000, 0x1334: 0x4000, 0x1335: 0x4000, - 0x1336: 0x4000, 0x1337: 0x4000, 0x1338: 0x4000, 0x1339: 0x4000, 0x133a: 0x4000, 0x133b: 0x4000, - // Block 0x4d, offset 0x1340 - 0x1344: 0x4000, - // Block 0x4e, offset 0x1380 - 0x138f: 0x4000, - // Block 0x4f, offset 0x13c0 - 0x13c0: 0x2000, 0x13c1: 0x2000, 0x13c2: 0x2000, 0x13c3: 0x2000, 0x13c4: 0x2000, 0x13c5: 0x2000, - 0x13c6: 0x2000, 0x13c7: 0x2000, 0x13c8: 0x2000, 0x13c9: 0x2000, 0x13ca: 0x2000, - 0x13d0: 0x2000, 0x13d1: 0x2000, - 0x13d2: 0x2000, 0x13d3: 0x2000, 0x13d4: 0x2000, 0x13d5: 0x2000, 0x13d6: 0x2000, 0x13d7: 0x2000, - 0x13d8: 0x2000, 0x13d9: 0x2000, 0x13da: 0x2000, 0x13db: 0x2000, 0x13dc: 0x2000, 0x13dd: 0x2000, - 0x13de: 0x2000, 0x13df: 0x2000, 0x13e0: 0x2000, 0x13e1: 0x2000, 0x13e2: 0x2000, 0x13e3: 0x2000, - 0x13e4: 0x2000, 0x13e5: 0x2000, 0x13e6: 0x2000, 0x13e7: 0x2000, 0x13e8: 0x2000, 0x13e9: 0x2000, - 0x13ea: 0x2000, 0x13eb: 0x2000, 0x13ec: 0x2000, 0x13ed: 0x2000, - 0x13f0: 0x2000, 0x13f1: 0x2000, 0x13f2: 0x2000, 0x13f3: 0x2000, 0x13f4: 0x2000, 0x13f5: 0x2000, - 0x13f6: 0x2000, 0x13f7: 0x2000, 0x13f8: 0x2000, 0x13f9: 0x2000, 0x13fa: 0x2000, 0x13fb: 0x2000, - 0x13fc: 0x2000, 0x13fd: 0x2000, 0x13fe: 0x2000, 0x13ff: 0x2000, - // Block 0x50, offset 0x1400 - 0x1400: 0x2000, 0x1401: 0x2000, 0x1402: 0x2000, 0x1403: 0x2000, 0x1404: 0x2000, 0x1405: 0x2000, - 0x1406: 0x2000, 0x1407: 0x2000, 0x1408: 0x2000, 0x1409: 0x2000, 0x140a: 0x2000, 0x140b: 0x2000, - 0x140c: 0x2000, 0x140d: 0x2000, 0x140e: 0x2000, 0x140f: 0x2000, 0x1410: 0x2000, 0x1411: 0x2000, - 0x1412: 0x2000, 0x1413: 0x2000, 0x1414: 0x2000, 0x1415: 0x2000, 0x1416: 0x2000, 0x1417: 0x2000, - 0x1418: 0x2000, 0x1419: 0x2000, 0x141a: 0x2000, 0x141b: 0x2000, 0x141c: 0x2000, 0x141d: 0x2000, - 0x141e: 0x2000, 0x141f: 0x2000, 0x1420: 0x2000, 0x1421: 0x2000, 0x1422: 0x2000, 0x1423: 0x2000, - 0x1424: 0x2000, 0x1425: 0x2000, 0x1426: 0x2000, 0x1427: 0x2000, 0x1428: 0x2000, 0x1429: 0x2000, - 0x1430: 0x2000, 0x1431: 0x2000, 0x1432: 0x2000, 0x1433: 0x2000, 0x1434: 0x2000, 0x1435: 0x2000, - 0x1436: 0x2000, 0x1437: 0x2000, 0x1438: 0x2000, 0x1439: 0x2000, 0x143a: 0x2000, 0x143b: 0x2000, - 0x143c: 0x2000, 0x143d: 0x2000, 0x143e: 0x2000, 0x143f: 0x2000, - // Block 0x51, offset 0x1440 - 0x1440: 0x2000, 0x1441: 0x2000, 0x1442: 0x2000, 0x1443: 0x2000, 0x1444: 0x2000, 0x1445: 0x2000, - 0x1446: 0x2000, 0x1447: 0x2000, 0x1448: 0x2000, 0x1449: 0x2000, 0x144a: 0x2000, 0x144b: 0x2000, - 0x144c: 0x2000, 0x144d: 0x2000, 0x144e: 0x4000, 0x144f: 0x2000, 0x1450: 0x2000, 0x1451: 0x4000, - 0x1452: 0x4000, 0x1453: 0x4000, 0x1454: 0x4000, 0x1455: 0x4000, 0x1456: 0x4000, 0x1457: 0x4000, - 0x1458: 0x4000, 0x1459: 0x4000, 0x145a: 0x4000, 0x145b: 0x2000, 0x145c: 0x2000, 0x145d: 0x2000, - 0x145e: 0x2000, 0x145f: 0x2000, 0x1460: 0x2000, 0x1461: 0x2000, 0x1462: 0x2000, 0x1463: 0x2000, - 0x1464: 0x2000, 0x1465: 0x2000, 0x1466: 0x2000, 0x1467: 0x2000, 0x1468: 0x2000, 0x1469: 0x2000, - 0x146a: 0x2000, 0x146b: 0x2000, 0x146c: 0x2000, - // Block 0x52, offset 0x1480 - 0x1480: 0x4000, 0x1481: 0x4000, 0x1482: 0x4000, - 0x1490: 0x4000, 0x1491: 0x4000, - 0x1492: 0x4000, 0x1493: 0x4000, 0x1494: 0x4000, 0x1495: 0x4000, 0x1496: 0x4000, 0x1497: 0x4000, - 0x1498: 0x4000, 0x1499: 0x4000, 0x149a: 0x4000, 0x149b: 0x4000, 0x149c: 0x4000, 0x149d: 0x4000, - 0x149e: 0x4000, 0x149f: 0x4000, 0x14a0: 0x4000, 0x14a1: 0x4000, 0x14a2: 0x4000, 0x14a3: 0x4000, - 0x14a4: 0x4000, 0x14a5: 0x4000, 0x14a6: 0x4000, 0x14a7: 0x4000, 0x14a8: 0x4000, 0x14a9: 0x4000, - 0x14aa: 0x4000, 0x14ab: 0x4000, 0x14ac: 0x4000, 0x14ad: 0x4000, 0x14ae: 0x4000, 0x14af: 0x4000, - 0x14b0: 0x4000, 0x14b1: 0x4000, 0x14b2: 0x4000, 0x14b3: 0x4000, 0x14b4: 0x4000, 0x14b5: 0x4000, - 0x14b6: 0x4000, 0x14b7: 0x4000, 0x14b8: 0x4000, 0x14b9: 0x4000, 0x14ba: 0x4000, 0x14bb: 0x4000, - // Block 0x53, offset 0x14c0 - 0x14c0: 0x4000, 0x14c1: 0x4000, 0x14c2: 0x4000, 0x14c3: 0x4000, 0x14c4: 0x4000, 0x14c5: 0x4000, - 0x14c6: 0x4000, 0x14c7: 0x4000, 0x14c8: 0x4000, - 0x14d0: 0x4000, 0x14d1: 0x4000, - 0x14e0: 0x4000, 0x14e1: 0x4000, 0x14e2: 0x4000, 0x14e3: 0x4000, - 0x14e4: 0x4000, 0x14e5: 0x4000, - // Block 0x54, offset 0x1500 - 0x1500: 0x4000, 0x1501: 0x4000, 0x1502: 0x4000, 0x1503: 0x4000, 0x1504: 0x4000, 0x1505: 0x4000, - 0x1506: 0x4000, 0x1507: 0x4000, 0x1508: 0x4000, 0x1509: 0x4000, 0x150a: 0x4000, 0x150b: 0x4000, - 0x150c: 0x4000, 0x150d: 0x4000, 0x150e: 0x4000, 0x150f: 0x4000, 0x1510: 0x4000, 0x1511: 0x4000, - 0x1512: 0x4000, 0x1513: 0x4000, 0x1514: 0x4000, 0x1515: 0x4000, 0x1516: 0x4000, 0x1517: 0x4000, - 0x1518: 0x4000, 0x1519: 0x4000, 0x151a: 0x4000, 0x151b: 0x4000, 0x151c: 0x4000, 0x151d: 0x4000, - 0x151e: 0x4000, 0x151f: 0x4000, 0x1520: 0x4000, - 0x152d: 0x4000, 0x152e: 0x4000, 0x152f: 0x4000, - 0x1530: 0x4000, 0x1531: 0x4000, 0x1532: 0x4000, 0x1533: 0x4000, 0x1534: 0x4000, 0x1535: 0x4000, - 0x1537: 0x4000, 0x1538: 0x4000, 0x1539: 0x4000, 0x153a: 0x4000, 0x153b: 0x4000, - 0x153c: 0x4000, 0x153d: 0x4000, 0x153e: 0x4000, 0x153f: 0x4000, - // Block 0x55, offset 0x1540 - 0x1540: 0x4000, 0x1541: 0x4000, 0x1542: 0x4000, 0x1543: 0x4000, 0x1544: 0x4000, 0x1545: 0x4000, - 0x1546: 0x4000, 0x1547: 0x4000, 0x1548: 0x4000, 0x1549: 0x4000, 0x154a: 0x4000, 0x154b: 0x4000, - 0x154c: 0x4000, 0x154d: 0x4000, 0x154e: 0x4000, 0x154f: 0x4000, 0x1550: 0x4000, 0x1551: 0x4000, - 0x1552: 0x4000, 0x1553: 0x4000, 0x1554: 0x4000, 0x1555: 0x4000, 0x1556: 0x4000, 0x1557: 0x4000, - 0x1558: 0x4000, 0x1559: 0x4000, 0x155a: 0x4000, 0x155b: 0x4000, 0x155c: 0x4000, 0x155d: 0x4000, - 0x155e: 0x4000, 0x155f: 0x4000, 0x1560: 0x4000, 0x1561: 0x4000, 0x1562: 0x4000, 0x1563: 0x4000, - 0x1564: 0x4000, 0x1565: 0x4000, 0x1566: 0x4000, 0x1567: 0x4000, 0x1568: 0x4000, 0x1569: 0x4000, - 0x156a: 0x4000, 0x156b: 0x4000, 0x156c: 0x4000, 0x156d: 0x4000, 0x156e: 0x4000, 0x156f: 0x4000, - 0x1570: 0x4000, 0x1571: 0x4000, 0x1572: 0x4000, 0x1573: 0x4000, 0x1574: 0x4000, 0x1575: 0x4000, - 0x1576: 0x4000, 0x1577: 0x4000, 0x1578: 0x4000, 0x1579: 0x4000, 0x157a: 0x4000, 0x157b: 0x4000, - 0x157c: 0x4000, 0x157e: 0x4000, 0x157f: 0x4000, - // Block 0x56, offset 0x1580 - 0x1580: 0x4000, 0x1581: 0x4000, 0x1582: 0x4000, 0x1583: 0x4000, 0x1584: 0x4000, 0x1585: 0x4000, - 0x1586: 0x4000, 0x1587: 0x4000, 0x1588: 0x4000, 0x1589: 0x4000, 0x158a: 0x4000, 0x158b: 0x4000, - 0x158c: 0x4000, 0x158d: 0x4000, 0x158e: 0x4000, 0x158f: 0x4000, 0x1590: 0x4000, 0x1591: 0x4000, - 0x1592: 0x4000, 0x1593: 0x4000, - 0x15a0: 0x4000, 0x15a1: 0x4000, 0x15a2: 0x4000, 0x15a3: 0x4000, - 0x15a4: 0x4000, 0x15a5: 0x4000, 0x15a6: 0x4000, 0x15a7: 0x4000, 0x15a8: 0x4000, 0x15a9: 0x4000, - 0x15aa: 0x4000, 0x15ab: 0x4000, 0x15ac: 0x4000, 0x15ad: 0x4000, 0x15ae: 0x4000, 0x15af: 0x4000, - 0x15b0: 0x4000, 0x15b1: 0x4000, 0x15b2: 0x4000, 0x15b3: 0x4000, 0x15b4: 0x4000, 0x15b5: 0x4000, - 0x15b6: 0x4000, 0x15b7: 0x4000, 0x15b8: 0x4000, 0x15b9: 0x4000, 0x15ba: 0x4000, 0x15bb: 0x4000, - 0x15bc: 0x4000, 0x15bd: 0x4000, 0x15be: 0x4000, 0x15bf: 0x4000, - // Block 0x57, offset 0x15c0 - 0x15c0: 0x4000, 0x15c1: 0x4000, 0x15c2: 0x4000, 0x15c3: 0x4000, 0x15c4: 0x4000, 0x15c5: 0x4000, - 0x15c6: 0x4000, 0x15c7: 0x4000, 0x15c8: 0x4000, 0x15c9: 0x4000, 0x15ca: 0x4000, - 0x15cf: 0x4000, 0x15d0: 0x4000, 0x15d1: 0x4000, - 0x15d2: 0x4000, 0x15d3: 0x4000, - 0x15e0: 0x4000, 0x15e1: 0x4000, 0x15e2: 0x4000, 0x15e3: 0x4000, - 0x15e4: 0x4000, 0x15e5: 0x4000, 0x15e6: 0x4000, 0x15e7: 0x4000, 0x15e8: 0x4000, 0x15e9: 0x4000, - 0x15ea: 0x4000, 0x15eb: 0x4000, 0x15ec: 0x4000, 0x15ed: 0x4000, 0x15ee: 0x4000, 0x15ef: 0x4000, - 0x15f0: 0x4000, 0x15f4: 0x4000, - 0x15f8: 0x4000, 0x15f9: 0x4000, 0x15fa: 0x4000, 0x15fb: 0x4000, - 0x15fc: 0x4000, 0x15fd: 0x4000, 0x15fe: 0x4000, 0x15ff: 0x4000, - // Block 0x58, offset 0x1600 - 0x1600: 0x4000, 0x1602: 0x4000, 0x1603: 0x4000, 0x1604: 0x4000, 0x1605: 0x4000, - 0x1606: 0x4000, 0x1607: 0x4000, 0x1608: 0x4000, 0x1609: 0x4000, 0x160a: 0x4000, 0x160b: 0x4000, - 0x160c: 0x4000, 0x160d: 0x4000, 0x160e: 0x4000, 0x160f: 0x4000, 0x1610: 0x4000, 0x1611: 0x4000, - 0x1612: 0x4000, 0x1613: 0x4000, 0x1614: 0x4000, 0x1615: 0x4000, 0x1616: 0x4000, 0x1617: 0x4000, - 0x1618: 0x4000, 0x1619: 0x4000, 0x161a: 0x4000, 0x161b: 0x4000, 0x161c: 0x4000, 0x161d: 0x4000, - 0x161e: 0x4000, 0x161f: 0x4000, 0x1620: 0x4000, 0x1621: 0x4000, 0x1622: 0x4000, 0x1623: 0x4000, - 0x1624: 0x4000, 0x1625: 0x4000, 0x1626: 0x4000, 0x1627: 0x4000, 0x1628: 0x4000, 0x1629: 0x4000, - 0x162a: 0x4000, 0x162b: 0x4000, 0x162c: 0x4000, 0x162d: 0x4000, 0x162e: 0x4000, 0x162f: 0x4000, - 0x1630: 0x4000, 0x1631: 0x4000, 0x1632: 0x4000, 0x1633: 0x4000, 0x1634: 0x4000, 0x1635: 0x4000, - 0x1636: 0x4000, 0x1637: 0x4000, 0x1638: 0x4000, 0x1639: 0x4000, 0x163a: 0x4000, 0x163b: 0x4000, - 0x163c: 0x4000, 0x163d: 0x4000, 0x163e: 0x4000, 0x163f: 0x4000, - // Block 0x59, offset 0x1640 - 0x1640: 0x4000, 0x1641: 0x4000, 0x1642: 0x4000, 0x1643: 0x4000, 0x1644: 0x4000, 0x1645: 0x4000, - 0x1646: 0x4000, 0x1647: 0x4000, 0x1648: 0x4000, 0x1649: 0x4000, 0x164a: 0x4000, 0x164b: 0x4000, - 0x164c: 0x4000, 0x164d: 0x4000, 0x164e: 0x4000, 0x164f: 0x4000, 0x1650: 0x4000, 0x1651: 0x4000, - 0x1652: 0x4000, 0x1653: 0x4000, 0x1654: 0x4000, 0x1655: 0x4000, 0x1656: 0x4000, 0x1657: 0x4000, - 0x1658: 0x4000, 0x1659: 0x4000, 0x165a: 0x4000, 0x165b: 0x4000, 0x165c: 0x4000, 0x165d: 0x4000, - 0x165e: 0x4000, 0x165f: 0x4000, 0x1660: 0x4000, 0x1661: 0x4000, 0x1662: 0x4000, 0x1663: 0x4000, - 0x1664: 0x4000, 0x1665: 0x4000, 0x1666: 0x4000, 0x1667: 0x4000, 0x1668: 0x4000, 0x1669: 0x4000, - 0x166a: 0x4000, 0x166b: 0x4000, 0x166c: 0x4000, 0x166d: 0x4000, 0x166e: 0x4000, 0x166f: 0x4000, - 0x1670: 0x4000, 0x1671: 0x4000, 0x1672: 0x4000, 0x1673: 0x4000, 0x1674: 0x4000, 0x1675: 0x4000, - 0x1676: 0x4000, 0x1677: 0x4000, 0x1678: 0x4000, 0x1679: 0x4000, 0x167a: 0x4000, 0x167b: 0x4000, - 0x167c: 0x4000, 0x167f: 0x4000, - // Block 0x5a, offset 0x1680 - 0x1680: 0x4000, 0x1681: 0x4000, 0x1682: 0x4000, 0x1683: 0x4000, 0x1684: 0x4000, 0x1685: 0x4000, - 0x1686: 0x4000, 0x1687: 0x4000, 0x1688: 0x4000, 0x1689: 0x4000, 0x168a: 0x4000, 0x168b: 0x4000, - 0x168c: 0x4000, 0x168d: 0x4000, 0x168e: 0x4000, 0x168f: 0x4000, 0x1690: 0x4000, 0x1691: 0x4000, - 0x1692: 0x4000, 0x1693: 0x4000, 0x1694: 0x4000, 0x1695: 0x4000, 0x1696: 0x4000, 0x1697: 0x4000, - 0x1698: 0x4000, 0x1699: 0x4000, 0x169a: 0x4000, 0x169b: 0x4000, 0x169c: 0x4000, 0x169d: 0x4000, - 0x169e: 0x4000, 0x169f: 0x4000, 0x16a0: 0x4000, 0x16a1: 0x4000, 0x16a2: 0x4000, 0x16a3: 0x4000, - 0x16a4: 0x4000, 0x16a5: 0x4000, 0x16a6: 0x4000, 0x16a7: 0x4000, 0x16a8: 0x4000, 0x16a9: 0x4000, - 0x16aa: 0x4000, 0x16ab: 0x4000, 0x16ac: 0x4000, 0x16ad: 0x4000, 0x16ae: 0x4000, 0x16af: 0x4000, - 0x16b0: 0x4000, 0x16b1: 0x4000, 0x16b2: 0x4000, 0x16b3: 0x4000, 0x16b4: 0x4000, 0x16b5: 0x4000, - 0x16b6: 0x4000, 0x16b7: 0x4000, 0x16b8: 0x4000, 0x16b9: 0x4000, 0x16ba: 0x4000, 0x16bb: 0x4000, - 0x16bc: 0x4000, 0x16bd: 0x4000, - // Block 0x5b, offset 0x16c0 - 0x16cb: 0x4000, - 0x16cc: 0x4000, 0x16cd: 0x4000, 0x16ce: 0x4000, 0x16d0: 0x4000, 0x16d1: 0x4000, - 0x16d2: 0x4000, 0x16d3: 0x4000, 0x16d4: 0x4000, 0x16d5: 0x4000, 0x16d6: 0x4000, 0x16d7: 0x4000, - 0x16d8: 0x4000, 0x16d9: 0x4000, 0x16da: 0x4000, 0x16db: 0x4000, 0x16dc: 0x4000, 0x16dd: 0x4000, - 0x16de: 0x4000, 0x16df: 0x4000, 0x16e0: 0x4000, 0x16e1: 0x4000, 0x16e2: 0x4000, 0x16e3: 0x4000, - 0x16e4: 0x4000, 0x16e5: 0x4000, 0x16e6: 0x4000, 0x16e7: 0x4000, - 0x16fa: 0x4000, - // Block 0x5c, offset 0x1700 - 0x1715: 0x4000, 0x1716: 0x4000, - 0x1724: 0x4000, - // Block 0x5d, offset 0x1740 - 0x177b: 0x4000, - 0x177c: 0x4000, 0x177d: 0x4000, 0x177e: 0x4000, 0x177f: 0x4000, - // Block 0x5e, offset 0x1780 - 0x1780: 0x4000, 0x1781: 0x4000, 0x1782: 0x4000, 0x1783: 0x4000, 0x1784: 0x4000, 0x1785: 0x4000, - 0x1786: 0x4000, 0x1787: 0x4000, 0x1788: 0x4000, 0x1789: 0x4000, 0x178a: 0x4000, 0x178b: 0x4000, - 0x178c: 0x4000, 0x178d: 0x4000, 0x178e: 0x4000, 0x178f: 0x4000, - // Block 0x5f, offset 0x17c0 - 0x17c0: 0x4000, 0x17c1: 0x4000, 0x17c2: 0x4000, 0x17c3: 0x4000, 0x17c4: 0x4000, 0x17c5: 0x4000, - 0x17cc: 0x4000, 0x17d0: 0x4000, 0x17d1: 0x4000, - 0x17d2: 0x4000, - 0x17eb: 0x4000, 0x17ec: 0x4000, - 0x17f4: 0x4000, 0x17f5: 0x4000, - 0x17f6: 0x4000, 0x17f7: 0x4000, 0x17f8: 0x4000, - // Block 0x60, offset 0x1800 - 0x1810: 0x4000, 0x1811: 0x4000, - 0x1812: 0x4000, 0x1813: 0x4000, 0x1814: 0x4000, 0x1815: 0x4000, 0x1816: 0x4000, 0x1817: 0x4000, - 0x1818: 0x4000, 0x1819: 0x4000, 0x181a: 0x4000, 0x181b: 0x4000, 0x181c: 0x4000, 0x181d: 0x4000, - 0x181e: 0x4000, 0x181f: 0x4000, 0x1820: 0x4000, 0x1821: 0x4000, 0x1822: 0x4000, 0x1823: 0x4000, - 0x1824: 0x4000, 0x1825: 0x4000, 0x1826: 0x4000, 0x1827: 0x4000, 0x1828: 0x4000, 0x1829: 0x4000, - 0x182a: 0x4000, 0x182b: 0x4000, 0x182c: 0x4000, 0x182d: 0x4000, 0x182e: 0x4000, 0x182f: 0x4000, - 0x1830: 0x4000, 0x1831: 0x4000, 0x1832: 0x4000, 0x1833: 0x4000, 0x1834: 0x4000, 0x1835: 0x4000, - 0x1836: 0x4000, 0x1837: 0x4000, 0x1838: 0x4000, 0x1839: 0x4000, 0x183a: 0x4000, 0x183b: 0x4000, - 0x183c: 0x4000, 0x183d: 0x4000, 0x183e: 0x4000, - // Block 0x61, offset 0x1840 - 0x1840: 0x4000, 0x1841: 0x4000, 0x1842: 0x4000, 0x1843: 0x4000, 0x1844: 0x4000, 0x1845: 0x4000, - 0x1846: 0x4000, 0x1847: 0x4000, 0x1848: 0x4000, 0x1849: 0x4000, 0x184a: 0x4000, 0x184b: 0x4000, - 0x184c: 0x4000, 0x1850: 0x4000, 0x1851: 0x4000, - 0x1852: 0x4000, 0x1853: 0x4000, 0x1854: 0x4000, 0x1855: 0x4000, 0x1856: 0x4000, 0x1857: 0x4000, - 0x1858: 0x4000, 0x1859: 0x4000, 0x185a: 0x4000, 0x185b: 0x4000, 0x185c: 0x4000, 0x185d: 0x4000, - 0x185e: 0x4000, 0x185f: 0x4000, 0x1860: 0x4000, 0x1861: 0x4000, 0x1862: 0x4000, 0x1863: 0x4000, - 0x1864: 0x4000, 0x1865: 0x4000, 0x1866: 0x4000, 0x1867: 0x4000, 0x1868: 0x4000, 0x1869: 0x4000, - 0x186a: 0x4000, 0x186b: 0x4000, - // Block 0x62, offset 0x1880 - 0x1880: 0x4000, 0x1881: 0x4000, 0x1882: 0x4000, 0x1883: 0x4000, 0x1884: 0x4000, 0x1885: 0x4000, - 0x1886: 0x4000, 0x1887: 0x4000, 0x1888: 0x4000, 0x1889: 0x4000, 0x188a: 0x4000, 0x188b: 0x4000, - 0x188c: 0x4000, 0x188d: 0x4000, 0x188e: 0x4000, 0x188f: 0x4000, 0x1890: 0x4000, 0x1891: 0x4000, - 0x1892: 0x4000, 0x1893: 0x4000, 0x1894: 0x4000, 0x1895: 0x4000, 0x1896: 0x4000, 0x1897: 0x4000, - // Block 0x63, offset 0x18c0 - 0x18c0: 0x4000, - 0x18d0: 0x4000, 0x18d1: 0x4000, - 0x18d2: 0x4000, 0x18d3: 0x4000, 0x18d4: 0x4000, 0x18d5: 0x4000, 0x18d6: 0x4000, 0x18d7: 0x4000, - 0x18d8: 0x4000, 0x18d9: 0x4000, 0x18da: 0x4000, 0x18db: 0x4000, 0x18dc: 0x4000, 0x18dd: 0x4000, - 0x18de: 0x4000, 0x18df: 0x4000, 0x18e0: 0x4000, 0x18e1: 0x4000, 0x18e2: 0x4000, 0x18e3: 0x4000, - 0x18e4: 0x4000, 0x18e5: 0x4000, 0x18e6: 0x4000, - // Block 0x64, offset 0x1900 - 0x1900: 0x2000, 0x1901: 0x2000, 0x1902: 0x2000, 0x1903: 0x2000, 0x1904: 0x2000, 0x1905: 0x2000, - 0x1906: 0x2000, 0x1907: 0x2000, 0x1908: 0x2000, 0x1909: 0x2000, 0x190a: 0x2000, 0x190b: 0x2000, - 0x190c: 0x2000, 0x190d: 0x2000, 0x190e: 0x2000, 0x190f: 0x2000, 0x1910: 0x2000, 0x1911: 0x2000, - 0x1912: 0x2000, 0x1913: 0x2000, 0x1914: 0x2000, 0x1915: 0x2000, 0x1916: 0x2000, 0x1917: 0x2000, - 0x1918: 0x2000, 0x1919: 0x2000, 0x191a: 0x2000, 0x191b: 0x2000, 0x191c: 0x2000, 0x191d: 0x2000, - 0x191e: 0x2000, 0x191f: 0x2000, 0x1920: 0x2000, 0x1921: 0x2000, 0x1922: 0x2000, 0x1923: 0x2000, - 0x1924: 0x2000, 0x1925: 0x2000, 0x1926: 0x2000, 0x1927: 0x2000, 0x1928: 0x2000, 0x1929: 0x2000, - 0x192a: 0x2000, 0x192b: 0x2000, 0x192c: 0x2000, 0x192d: 0x2000, 0x192e: 0x2000, 0x192f: 0x2000, - 0x1930: 0x2000, 0x1931: 0x2000, 0x1932: 0x2000, 0x1933: 0x2000, 0x1934: 0x2000, 0x1935: 0x2000, - 0x1936: 0x2000, 0x1937: 0x2000, 0x1938: 0x2000, 0x1939: 0x2000, 0x193a: 0x2000, 0x193b: 0x2000, - 0x193c: 0x2000, 0x193d: 0x2000, -} - -// widthIndex: 22 blocks, 1408 entries, 1408 bytes -// Block 0 is the zero block. -var widthIndex = [1408]uint8{ - // Block 0x0, offset 0x0 - // Block 0x1, offset 0x40 - // Block 0x2, offset 0x80 - // Block 0x3, offset 0xc0 - 0xc2: 0x01, 0xc3: 0x02, 0xc4: 0x03, 0xc5: 0x04, 0xc7: 0x05, - 0xc9: 0x06, 0xcb: 0x07, 0xcc: 0x08, 0xcd: 0x09, 0xce: 0x0a, 0xcf: 0x0b, - 0xd0: 0x0c, 0xd1: 0x0d, - 0xe1: 0x02, 0xe2: 0x03, 0xe3: 0x04, 0xe4: 0x05, 0xe5: 0x06, 0xe6: 0x06, 0xe7: 0x06, - 0xe8: 0x06, 0xe9: 0x06, 0xea: 0x07, 0xeb: 0x06, 0xec: 0x06, 0xed: 0x08, 0xee: 0x09, 0xef: 0x0a, - 0xf0: 0x0f, 0xf3: 0x12, 0xf4: 0x13, - // Block 0x4, offset 0x100 - 0x104: 0x0e, 0x105: 0x0f, - // Block 0x5, offset 0x140 - 0x140: 0x10, 0x141: 0x11, 0x142: 0x12, 0x144: 0x13, 0x145: 0x14, 0x146: 0x15, 0x147: 0x16, - 0x148: 0x17, 0x149: 0x18, 0x14a: 0x19, 0x14c: 0x1a, 0x14f: 0x1b, - 0x151: 0x1c, 0x152: 0x08, 0x153: 0x1d, 0x154: 0x1e, 0x155: 0x1f, 0x156: 0x20, 0x157: 0x21, - 0x158: 0x22, 0x159: 0x23, 0x15a: 0x24, 0x15b: 0x25, 0x15c: 0x26, 0x15d: 0x27, 0x15e: 0x28, 0x15f: 0x29, - 0x166: 0x2a, - 0x16c: 0x2b, 0x16d: 0x2c, - 0x17a: 0x2d, 0x17b: 0x2e, 0x17c: 0x0e, 0x17d: 0x0e, 0x17e: 0x0e, 0x17f: 0x2f, - // Block 0x6, offset 0x180 - 0x180: 0x30, 0x181: 0x31, 0x182: 0x32, 0x183: 0x33, 0x184: 0x34, 0x185: 0x35, 0x186: 0x36, 0x187: 0x37, - 0x188: 0x38, 0x189: 0x39, 0x18a: 0x0e, 0x18b: 0x3a, 0x18c: 0x0e, 0x18d: 0x0e, 0x18e: 0x0e, 0x18f: 0x0e, - 0x190: 0x0e, 0x191: 0x0e, 0x192: 0x0e, 0x193: 0x0e, 0x194: 0x0e, 0x195: 0x0e, 0x196: 0x0e, 0x197: 0x0e, - 0x198: 0x0e, 0x199: 0x0e, 0x19a: 0x0e, 0x19b: 0x0e, 0x19c: 0x0e, 0x19d: 0x0e, 0x19e: 0x0e, 0x19f: 0x0e, - 0x1a0: 0x0e, 0x1a1: 0x0e, 0x1a2: 0x0e, 0x1a3: 0x0e, 0x1a4: 0x0e, 0x1a5: 0x0e, 0x1a6: 0x0e, 0x1a7: 0x0e, - 0x1a8: 0x0e, 0x1a9: 0x0e, 0x1aa: 0x0e, 0x1ab: 0x0e, 0x1ac: 0x0e, 0x1ad: 0x0e, 0x1ae: 0x0e, 0x1af: 0x0e, - 0x1b0: 0x0e, 0x1b1: 0x0e, 0x1b2: 0x0e, 0x1b3: 0x0e, 0x1b4: 0x0e, 0x1b5: 0x0e, 0x1b6: 0x0e, 0x1b7: 0x0e, - 0x1b8: 0x0e, 0x1b9: 0x0e, 0x1ba: 0x0e, 0x1bb: 0x0e, 0x1bc: 0x0e, 0x1bd: 0x0e, 0x1be: 0x0e, 0x1bf: 0x0e, - // Block 0x7, offset 0x1c0 - 0x1c0: 0x0e, 0x1c1: 0x0e, 0x1c2: 0x0e, 0x1c3: 0x0e, 0x1c4: 0x0e, 0x1c5: 0x0e, 0x1c6: 0x0e, 0x1c7: 0x0e, - 0x1c8: 0x0e, 0x1c9: 0x0e, 0x1ca: 0x0e, 0x1cb: 0x0e, 0x1cc: 0x0e, 0x1cd: 0x0e, 0x1ce: 0x0e, 0x1cf: 0x0e, - 0x1d0: 0x0e, 0x1d1: 0x0e, 0x1d2: 0x0e, 0x1d3: 0x0e, 0x1d4: 0x0e, 0x1d5: 0x0e, 0x1d6: 0x0e, 0x1d7: 0x0e, - 0x1d8: 0x0e, 0x1d9: 0x0e, 0x1da: 0x0e, 0x1db: 0x0e, 0x1dc: 0x0e, 0x1dd: 0x0e, 0x1de: 0x0e, 0x1df: 0x0e, - 0x1e0: 0x0e, 0x1e1: 0x0e, 0x1e2: 0x0e, 0x1e3: 0x0e, 0x1e4: 0x0e, 0x1e5: 0x0e, 0x1e6: 0x0e, 0x1e7: 0x0e, - 0x1e8: 0x0e, 0x1e9: 0x0e, 0x1ea: 0x0e, 0x1eb: 0x0e, 0x1ec: 0x0e, 0x1ed: 0x0e, 0x1ee: 0x0e, 0x1ef: 0x0e, - 0x1f0: 0x0e, 0x1f1: 0x0e, 0x1f2: 0x0e, 0x1f3: 0x0e, 0x1f4: 0x0e, 0x1f5: 0x0e, 0x1f6: 0x0e, - 0x1f8: 0x0e, 0x1f9: 0x0e, 0x1fa: 0x0e, 0x1fb: 0x0e, 0x1fc: 0x0e, 0x1fd: 0x0e, 0x1fe: 0x0e, 0x1ff: 0x0e, - // Block 0x8, offset 0x200 - 0x200: 0x0e, 0x201: 0x0e, 0x202: 0x0e, 0x203: 0x0e, 0x204: 0x0e, 0x205: 0x0e, 0x206: 0x0e, 0x207: 0x0e, - 0x208: 0x0e, 0x209: 0x0e, 0x20a: 0x0e, 0x20b: 0x0e, 0x20c: 0x0e, 0x20d: 0x0e, 0x20e: 0x0e, 0x20f: 0x0e, - 0x210: 0x0e, 0x211: 0x0e, 0x212: 0x0e, 0x213: 0x0e, 0x214: 0x0e, 0x215: 0x0e, 0x216: 0x0e, 0x217: 0x0e, - 0x218: 0x0e, 0x219: 0x0e, 0x21a: 0x0e, 0x21b: 0x0e, 0x21c: 0x0e, 0x21d: 0x0e, 0x21e: 0x0e, 0x21f: 0x0e, - 0x220: 0x0e, 0x221: 0x0e, 0x222: 0x0e, 0x223: 0x0e, 0x224: 0x0e, 0x225: 0x0e, 0x226: 0x0e, 0x227: 0x0e, - 0x228: 0x0e, 0x229: 0x0e, 0x22a: 0x0e, 0x22b: 0x0e, 0x22c: 0x0e, 0x22d: 0x0e, 0x22e: 0x0e, 0x22f: 0x0e, - 0x230: 0x0e, 0x231: 0x0e, 0x232: 0x0e, 0x233: 0x0e, 0x234: 0x0e, 0x235: 0x0e, 0x236: 0x0e, 0x237: 0x0e, - 0x238: 0x0e, 0x239: 0x0e, 0x23a: 0x0e, 0x23b: 0x0e, 0x23c: 0x0e, 0x23d: 0x0e, 0x23e: 0x0e, 0x23f: 0x0e, - // Block 0x9, offset 0x240 - 0x240: 0x0e, 0x241: 0x0e, 0x242: 0x0e, 0x243: 0x0e, 0x244: 0x0e, 0x245: 0x0e, 0x246: 0x0e, 0x247: 0x0e, - 0x248: 0x0e, 0x249: 0x0e, 0x24a: 0x0e, 0x24b: 0x0e, 0x24c: 0x0e, 0x24d: 0x0e, 0x24e: 0x0e, 0x24f: 0x0e, - 0x250: 0x0e, 0x251: 0x0e, 0x252: 0x3b, 0x253: 0x3c, - 0x265: 0x3d, - 0x270: 0x0e, 0x271: 0x0e, 0x272: 0x0e, 0x273: 0x0e, 0x274: 0x0e, 0x275: 0x0e, 0x276: 0x0e, 0x277: 0x0e, - 0x278: 0x0e, 0x279: 0x0e, 0x27a: 0x0e, 0x27b: 0x0e, 0x27c: 0x0e, 0x27d: 0x0e, 0x27e: 0x0e, 0x27f: 0x0e, - // Block 0xa, offset 0x280 - 0x280: 0x0e, 0x281: 0x0e, 0x282: 0x0e, 0x283: 0x0e, 0x284: 0x0e, 0x285: 0x0e, 0x286: 0x0e, 0x287: 0x0e, - 0x288: 0x0e, 0x289: 0x0e, 0x28a: 0x0e, 0x28b: 0x0e, 0x28c: 0x0e, 0x28d: 0x0e, 0x28e: 0x0e, 0x28f: 0x0e, - 0x290: 0x0e, 0x291: 0x0e, 0x292: 0x0e, 0x293: 0x0e, 0x294: 0x0e, 0x295: 0x0e, 0x296: 0x0e, 0x297: 0x0e, - 0x298: 0x0e, 0x299: 0x0e, 0x29a: 0x0e, 0x29b: 0x0e, 0x29c: 0x0e, 0x29d: 0x0e, 0x29e: 0x3e, - // Block 0xb, offset 0x2c0 - 0x2c0: 0x08, 0x2c1: 0x08, 0x2c2: 0x08, 0x2c3: 0x08, 0x2c4: 0x08, 0x2c5: 0x08, 0x2c6: 0x08, 0x2c7: 0x08, - 0x2c8: 0x08, 0x2c9: 0x08, 0x2ca: 0x08, 0x2cb: 0x08, 0x2cc: 0x08, 0x2cd: 0x08, 0x2ce: 0x08, 0x2cf: 0x08, - 0x2d0: 0x08, 0x2d1: 0x08, 0x2d2: 0x08, 0x2d3: 0x08, 0x2d4: 0x08, 0x2d5: 0x08, 0x2d6: 0x08, 0x2d7: 0x08, - 0x2d8: 0x08, 0x2d9: 0x08, 0x2da: 0x08, 0x2db: 0x08, 0x2dc: 0x08, 0x2dd: 0x08, 0x2de: 0x08, 0x2df: 0x08, - 0x2e0: 0x08, 0x2e1: 0x08, 0x2e2: 0x08, 0x2e3: 0x08, 0x2e4: 0x08, 0x2e5: 0x08, 0x2e6: 0x08, 0x2e7: 0x08, - 0x2e8: 0x08, 0x2e9: 0x08, 0x2ea: 0x08, 0x2eb: 0x08, 0x2ec: 0x08, 0x2ed: 0x08, 0x2ee: 0x08, 0x2ef: 0x08, - 0x2f0: 0x08, 0x2f1: 0x08, 0x2f2: 0x08, 0x2f3: 0x08, 0x2f4: 0x08, 0x2f5: 0x08, 0x2f6: 0x08, 0x2f7: 0x08, - 0x2f8: 0x08, 0x2f9: 0x08, 0x2fa: 0x08, 0x2fb: 0x08, 0x2fc: 0x08, 0x2fd: 0x08, 0x2fe: 0x08, 0x2ff: 0x08, - // Block 0xc, offset 0x300 - 0x300: 0x08, 0x301: 0x08, 0x302: 0x08, 0x303: 0x08, 0x304: 0x08, 0x305: 0x08, 0x306: 0x08, 0x307: 0x08, - 0x308: 0x08, 0x309: 0x08, 0x30a: 0x08, 0x30b: 0x08, 0x30c: 0x08, 0x30d: 0x08, 0x30e: 0x08, 0x30f: 0x08, - 0x310: 0x08, 0x311: 0x08, 0x312: 0x08, 0x313: 0x08, 0x314: 0x08, 0x315: 0x08, 0x316: 0x08, 0x317: 0x08, - 0x318: 0x08, 0x319: 0x08, 0x31a: 0x08, 0x31b: 0x08, 0x31c: 0x08, 0x31d: 0x08, 0x31e: 0x08, 0x31f: 0x08, - 0x320: 0x08, 0x321: 0x08, 0x322: 0x08, 0x323: 0x08, 0x324: 0x0e, 0x325: 0x0e, 0x326: 0x0e, 0x327: 0x0e, - 0x328: 0x0e, 0x329: 0x0e, 0x32a: 0x0e, 0x32b: 0x0e, - 0x338: 0x3f, 0x339: 0x40, 0x33c: 0x41, 0x33d: 0x42, 0x33e: 0x43, 0x33f: 0x44, - // Block 0xd, offset 0x340 - 0x37f: 0x45, - // Block 0xe, offset 0x380 - 0x380: 0x0e, 0x381: 0x0e, 0x382: 0x0e, 0x383: 0x0e, 0x384: 0x0e, 0x385: 0x0e, 0x386: 0x0e, 0x387: 0x0e, - 0x388: 0x0e, 0x389: 0x0e, 0x38a: 0x0e, 0x38b: 0x0e, 0x38c: 0x0e, 0x38d: 0x0e, 0x38e: 0x0e, 0x38f: 0x0e, - 0x390: 0x0e, 0x391: 0x0e, 0x392: 0x0e, 0x393: 0x0e, 0x394: 0x0e, 0x395: 0x0e, 0x396: 0x0e, 0x397: 0x0e, - 0x398: 0x0e, 0x399: 0x0e, 0x39a: 0x0e, 0x39b: 0x0e, 0x39c: 0x0e, 0x39d: 0x0e, 0x39e: 0x0e, 0x39f: 0x46, - 0x3a0: 0x0e, 0x3a1: 0x0e, 0x3a2: 0x0e, 0x3a3: 0x0e, 0x3a4: 0x0e, 0x3a5: 0x0e, 0x3a6: 0x0e, 0x3a7: 0x0e, - 0x3a8: 0x0e, 0x3a9: 0x0e, 0x3aa: 0x0e, 0x3ab: 0x47, - // Block 0xf, offset 0x3c0 - 0x3c0: 0x0e, 0x3c1: 0x0e, 0x3c2: 0x0e, 0x3c3: 0x0e, 0x3c4: 0x48, 0x3c5: 0x49, 0x3c6: 0x0e, 0x3c7: 0x0e, - 0x3c8: 0x0e, 0x3c9: 0x0e, 0x3ca: 0x0e, 0x3cb: 0x4a, - // Block 0x10, offset 0x400 - 0x400: 0x4b, 0x403: 0x4c, 0x404: 0x4d, 0x405: 0x4e, 0x406: 0x4f, - 0x408: 0x50, 0x409: 0x51, 0x40c: 0x52, 0x40d: 0x53, 0x40e: 0x54, 0x40f: 0x55, - 0x410: 0x3a, 0x411: 0x56, 0x412: 0x0e, 0x413: 0x57, 0x414: 0x58, 0x415: 0x59, 0x416: 0x5a, 0x417: 0x5b, - 0x418: 0x0e, 0x419: 0x5c, 0x41a: 0x0e, 0x41b: 0x5d, - 0x424: 0x5e, 0x425: 0x5f, 0x426: 0x60, 0x427: 0x61, - // Block 0x11, offset 0x440 - 0x456: 0x0b, 0x457: 0x06, - 0x458: 0x0c, 0x45b: 0x0d, 0x45f: 0x0e, - 0x460: 0x06, 0x461: 0x06, 0x462: 0x06, 0x463: 0x06, 0x464: 0x06, 0x465: 0x06, 0x466: 0x06, 0x467: 0x06, - 0x468: 0x06, 0x469: 0x06, 0x46a: 0x06, 0x46b: 0x06, 0x46c: 0x06, 0x46d: 0x06, 0x46e: 0x06, 0x46f: 0x06, - 0x470: 0x06, 0x471: 0x06, 0x472: 0x06, 0x473: 0x06, 0x474: 0x06, 0x475: 0x06, 0x476: 0x06, 0x477: 0x06, - 0x478: 0x06, 0x479: 0x06, 0x47a: 0x06, 0x47b: 0x06, 0x47c: 0x06, 0x47d: 0x06, 0x47e: 0x06, 0x47f: 0x06, - // Block 0x12, offset 0x480 - 0x484: 0x08, 0x485: 0x08, 0x486: 0x08, 0x487: 0x09, - // Block 0x13, offset 0x4c0 - 0x4c0: 0x08, 0x4c1: 0x08, 0x4c2: 0x08, 0x4c3: 0x08, 0x4c4: 0x08, 0x4c5: 0x08, 0x4c6: 0x08, 0x4c7: 0x08, - 0x4c8: 0x08, 0x4c9: 0x08, 0x4ca: 0x08, 0x4cb: 0x08, 0x4cc: 0x08, 0x4cd: 0x08, 0x4ce: 0x08, 0x4cf: 0x08, - 0x4d0: 0x08, 0x4d1: 0x08, 0x4d2: 0x08, 0x4d3: 0x08, 0x4d4: 0x08, 0x4d5: 0x08, 0x4d6: 0x08, 0x4d7: 0x08, - 0x4d8: 0x08, 0x4d9: 0x08, 0x4da: 0x08, 0x4db: 0x08, 0x4dc: 0x08, 0x4dd: 0x08, 0x4de: 0x08, 0x4df: 0x08, - 0x4e0: 0x08, 0x4e1: 0x08, 0x4e2: 0x08, 0x4e3: 0x08, 0x4e4: 0x08, 0x4e5: 0x08, 0x4e6: 0x08, 0x4e7: 0x08, - 0x4e8: 0x08, 0x4e9: 0x08, 0x4ea: 0x08, 0x4eb: 0x08, 0x4ec: 0x08, 0x4ed: 0x08, 0x4ee: 0x08, 0x4ef: 0x08, - 0x4f0: 0x08, 0x4f1: 0x08, 0x4f2: 0x08, 0x4f3: 0x08, 0x4f4: 0x08, 0x4f5: 0x08, 0x4f6: 0x08, 0x4f7: 0x08, - 0x4f8: 0x08, 0x4f9: 0x08, 0x4fa: 0x08, 0x4fb: 0x08, 0x4fc: 0x08, 0x4fd: 0x08, 0x4fe: 0x08, 0x4ff: 0x62, - // Block 0x14, offset 0x500 - 0x520: 0x10, - 0x530: 0x09, 0x531: 0x09, 0x532: 0x09, 0x533: 0x09, 0x534: 0x09, 0x535: 0x09, 0x536: 0x09, 0x537: 0x09, - 0x538: 0x09, 0x539: 0x09, 0x53a: 0x09, 0x53b: 0x09, 0x53c: 0x09, 0x53d: 0x09, 0x53e: 0x09, 0x53f: 0x11, - // Block 0x15, offset 0x540 - 0x540: 0x09, 0x541: 0x09, 0x542: 0x09, 0x543: 0x09, 0x544: 0x09, 0x545: 0x09, 0x546: 0x09, 0x547: 0x09, - 0x548: 0x09, 0x549: 0x09, 0x54a: 0x09, 0x54b: 0x09, 0x54c: 0x09, 0x54d: 0x09, 0x54e: 0x09, 0x54f: 0x11, -} - -// inverseData contains 4-byte entries of the following format: -// -// <0 padding> -// -// The last byte of the UTF-8-encoded rune is xor-ed with the last byte of the -// UTF-8 encoding of the original rune. Mappings often have the following -// pattern: -// -// A -> A (U+FF21 -> U+0041) -// B -> B (U+FF22 -> U+0042) -// ... -// -// By xor-ing the last byte the same entry can be shared by many mappings. This -// reduces the total number of distinct entries by about two thirds. -// The resulting entry for the aforementioned mappings is -// -// { 0x01, 0xE0, 0x00, 0x00 } -// -// Using this entry to map U+FF21 (UTF-8 [EF BC A1]), we get -// -// E0 ^ A1 = 41. -// -// Similarly, for U+FF22 (UTF-8 [EF BC A2]), we get -// -// E0 ^ A2 = 42. -// -// Note that because of the xor-ing, the byte sequence stored in the entry is -// not valid UTF-8. -var inverseData = [150][4]byte{ - {0x00, 0x00, 0x00, 0x00}, - {0x03, 0xe3, 0x80, 0xa0}, - {0x03, 0xef, 0xbc, 0xa0}, - {0x03, 0xef, 0xbc, 0xe0}, - {0x03, 0xef, 0xbd, 0xe0}, - {0x03, 0xef, 0xbf, 0x02}, - {0x03, 0xef, 0xbf, 0x00}, - {0x03, 0xef, 0xbf, 0x0e}, - {0x03, 0xef, 0xbf, 0x0c}, - {0x03, 0xef, 0xbf, 0x0f}, - {0x03, 0xef, 0xbf, 0x39}, - {0x03, 0xef, 0xbf, 0x3b}, - {0x03, 0xef, 0xbf, 0x3f}, - {0x03, 0xef, 0xbf, 0x2a}, - {0x03, 0xef, 0xbf, 0x0d}, - {0x03, 0xef, 0xbf, 0x25}, - {0x03, 0xef, 0xbd, 0x1a}, - {0x03, 0xef, 0xbd, 0x26}, - {0x01, 0xa0, 0x00, 0x00}, - {0x03, 0xef, 0xbd, 0x25}, - {0x03, 0xef, 0xbd, 0x23}, - {0x03, 0xef, 0xbd, 0x2e}, - {0x03, 0xef, 0xbe, 0x07}, - {0x03, 0xef, 0xbe, 0x05}, - {0x03, 0xef, 0xbd, 0x06}, - {0x03, 0xef, 0xbd, 0x13}, - {0x03, 0xef, 0xbd, 0x0b}, - {0x03, 0xef, 0xbd, 0x16}, - {0x03, 0xef, 0xbd, 0x0c}, - {0x03, 0xef, 0xbd, 0x15}, - {0x03, 0xef, 0xbd, 0x0d}, - {0x03, 0xef, 0xbd, 0x1c}, - {0x03, 0xef, 0xbd, 0x02}, - {0x03, 0xef, 0xbd, 0x1f}, - {0x03, 0xef, 0xbd, 0x1d}, - {0x03, 0xef, 0xbd, 0x17}, - {0x03, 0xef, 0xbd, 0x08}, - {0x03, 0xef, 0xbd, 0x09}, - {0x03, 0xef, 0xbd, 0x0e}, - {0x03, 0xef, 0xbd, 0x04}, - {0x03, 0xef, 0xbd, 0x05}, - {0x03, 0xef, 0xbe, 0x3f}, - {0x03, 0xef, 0xbe, 0x00}, - {0x03, 0xef, 0xbd, 0x2c}, - {0x03, 0xef, 0xbe, 0x06}, - {0x03, 0xef, 0xbe, 0x0c}, - {0x03, 0xef, 0xbe, 0x0f}, - {0x03, 0xef, 0xbe, 0x0d}, - {0x03, 0xef, 0xbe, 0x0b}, - {0x03, 0xef, 0xbe, 0x19}, - {0x03, 0xef, 0xbe, 0x15}, - {0x03, 0xef, 0xbe, 0x11}, - {0x03, 0xef, 0xbe, 0x31}, - {0x03, 0xef, 0xbe, 0x33}, - {0x03, 0xef, 0xbd, 0x0f}, - {0x03, 0xef, 0xbe, 0x30}, - {0x03, 0xef, 0xbe, 0x3e}, - {0x03, 0xef, 0xbe, 0x32}, - {0x03, 0xef, 0xbe, 0x36}, - {0x03, 0xef, 0xbd, 0x14}, - {0x03, 0xef, 0xbe, 0x2e}, - {0x03, 0xef, 0xbd, 0x1e}, - {0x03, 0xef, 0xbe, 0x10}, - {0x03, 0xef, 0xbf, 0x13}, - {0x03, 0xef, 0xbf, 0x15}, - {0x03, 0xef, 0xbf, 0x17}, - {0x03, 0xef, 0xbf, 0x1f}, - {0x03, 0xef, 0xbf, 0x1d}, - {0x03, 0xef, 0xbf, 0x1b}, - {0x03, 0xef, 0xbf, 0x09}, - {0x03, 0xef, 0xbf, 0x0b}, - {0x03, 0xef, 0xbf, 0x37}, - {0x03, 0xef, 0xbe, 0x04}, - {0x01, 0xe0, 0x00, 0x00}, - {0x03, 0xe2, 0xa6, 0x1a}, - {0x03, 0xe2, 0xa6, 0x26}, - {0x03, 0xe3, 0x80, 0x23}, - {0x03, 0xe3, 0x80, 0x2e}, - {0x03, 0xe3, 0x80, 0x25}, - {0x03, 0xe3, 0x83, 0x1e}, - {0x03, 0xe3, 0x83, 0x14}, - {0x03, 0xe3, 0x82, 0x06}, - {0x03, 0xe3, 0x82, 0x0b}, - {0x03, 0xe3, 0x82, 0x0c}, - {0x03, 0xe3, 0x82, 0x0d}, - {0x03, 0xe3, 0x82, 0x02}, - {0x03, 0xe3, 0x83, 0x0f}, - {0x03, 0xe3, 0x83, 0x08}, - {0x03, 0xe3, 0x83, 0x09}, - {0x03, 0xe3, 0x83, 0x2c}, - {0x03, 0xe3, 0x83, 0x0c}, - {0x03, 0xe3, 0x82, 0x13}, - {0x03, 0xe3, 0x82, 0x16}, - {0x03, 0xe3, 0x82, 0x15}, - {0x03, 0xe3, 0x82, 0x1c}, - {0x03, 0xe3, 0x82, 0x1f}, - {0x03, 0xe3, 0x82, 0x1d}, - {0x03, 0xe3, 0x82, 0x1a}, - {0x03, 0xe3, 0x82, 0x17}, - {0x03, 0xe3, 0x82, 0x08}, - {0x03, 0xe3, 0x82, 0x09}, - {0x03, 0xe3, 0x82, 0x0e}, - {0x03, 0xe3, 0x82, 0x04}, - {0x03, 0xe3, 0x82, 0x05}, - {0x03, 0xe3, 0x82, 0x3f}, - {0x03, 0xe3, 0x83, 0x00}, - {0x03, 0xe3, 0x83, 0x06}, - {0x03, 0xe3, 0x83, 0x05}, - {0x03, 0xe3, 0x83, 0x0d}, - {0x03, 0xe3, 0x83, 0x0b}, - {0x03, 0xe3, 0x83, 0x07}, - {0x03, 0xe3, 0x83, 0x19}, - {0x03, 0xe3, 0x83, 0x15}, - {0x03, 0xe3, 0x83, 0x11}, - {0x03, 0xe3, 0x83, 0x31}, - {0x03, 0xe3, 0x83, 0x33}, - {0x03, 0xe3, 0x83, 0x30}, - {0x03, 0xe3, 0x83, 0x3e}, - {0x03, 0xe3, 0x83, 0x32}, - {0x03, 0xe3, 0x83, 0x36}, - {0x03, 0xe3, 0x83, 0x2e}, - {0x03, 0xe3, 0x82, 0x07}, - {0x03, 0xe3, 0x85, 0x04}, - {0x03, 0xe3, 0x84, 0x10}, - {0x03, 0xe3, 0x85, 0x30}, - {0x03, 0xe3, 0x85, 0x0d}, - {0x03, 0xe3, 0x85, 0x13}, - {0x03, 0xe3, 0x85, 0x15}, - {0x03, 0xe3, 0x85, 0x17}, - {0x03, 0xe3, 0x85, 0x1f}, - {0x03, 0xe3, 0x85, 0x1d}, - {0x03, 0xe3, 0x85, 0x1b}, - {0x03, 0xe3, 0x85, 0x09}, - {0x03, 0xe3, 0x85, 0x0f}, - {0x03, 0xe3, 0x85, 0x0b}, - {0x03, 0xe3, 0x85, 0x37}, - {0x03, 0xe3, 0x85, 0x3b}, - {0x03, 0xe3, 0x85, 0x39}, - {0x03, 0xe3, 0x85, 0x3f}, - {0x02, 0xc2, 0x02, 0x00}, - {0x02, 0xc2, 0x0e, 0x00}, - {0x02, 0xc2, 0x0c, 0x00}, - {0x02, 0xc2, 0x00, 0x00}, - {0x03, 0xe2, 0x82, 0x0f}, - {0x03, 0xe2, 0x94, 0x2a}, - {0x03, 0xe2, 0x86, 0x39}, - {0x03, 0xe2, 0x86, 0x3b}, - {0x03, 0xe2, 0x86, 0x3f}, - {0x03, 0xe2, 0x96, 0x0d}, - {0x03, 0xe2, 0x97, 0x25}, -} - -// Total table size 14936 bytes (14KiB) diff --git a/vendor/golang.org/x/text/width/tables11.0.0.go b/vendor/golang.org/x/text/width/tables11.0.0.go deleted file mode 100644 index 89288b3dae..0000000000 --- a/vendor/golang.org/x/text/width/tables11.0.0.go +++ /dev/null @@ -1,1340 +0,0 @@ -// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. - -//go:build go1.13 && !go1.14 - -package width - -// UnicodeVersion is the Unicode version from which the tables in this package are derived. -const UnicodeVersion = "11.0.0" - -// lookup returns the trie value for the first UTF-8 encoding in s and -// the width in bytes of this encoding. The size will be 0 if s does not -// hold enough bytes to complete the encoding. len(s) must be greater than 0. -func (t *widthTrie) lookup(s []byte) (v uint16, sz int) { - c0 := s[0] - switch { - case c0 < 0x80: // is ASCII - return widthValues[c0], 1 - case c0 < 0xC2: - return 0, 1 // Illegal UTF-8: not a starter, not ASCII. - case c0 < 0xE0: // 2-byte UTF-8 - if len(s) < 2 { - return 0, 0 - } - i := widthIndex[c0] - c1 := s[1] - if c1 < 0x80 || 0xC0 <= c1 { - return 0, 1 // Illegal UTF-8: not a continuation byte. - } - return t.lookupValue(uint32(i), c1), 2 - case c0 < 0xF0: // 3-byte UTF-8 - if len(s) < 3 { - return 0, 0 - } - i := widthIndex[c0] - c1 := s[1] - if c1 < 0x80 || 0xC0 <= c1 { - return 0, 1 // Illegal UTF-8: not a continuation byte. - } - o := uint32(i)<<6 + uint32(c1) - i = widthIndex[o] - c2 := s[2] - if c2 < 0x80 || 0xC0 <= c2 { - return 0, 2 // Illegal UTF-8: not a continuation byte. - } - return t.lookupValue(uint32(i), c2), 3 - case c0 < 0xF8: // 4-byte UTF-8 - if len(s) < 4 { - return 0, 0 - } - i := widthIndex[c0] - c1 := s[1] - if c1 < 0x80 || 0xC0 <= c1 { - return 0, 1 // Illegal UTF-8: not a continuation byte. - } - o := uint32(i)<<6 + uint32(c1) - i = widthIndex[o] - c2 := s[2] - if c2 < 0x80 || 0xC0 <= c2 { - return 0, 2 // Illegal UTF-8: not a continuation byte. - } - o = uint32(i)<<6 + uint32(c2) - i = widthIndex[o] - c3 := s[3] - if c3 < 0x80 || 0xC0 <= c3 { - return 0, 3 // Illegal UTF-8: not a continuation byte. - } - return t.lookupValue(uint32(i), c3), 4 - } - // Illegal rune - return 0, 1 -} - -// lookupUnsafe returns the trie value for the first UTF-8 encoding in s. -// s must start with a full and valid UTF-8 encoded rune. -func (t *widthTrie) lookupUnsafe(s []byte) uint16 { - c0 := s[0] - if c0 < 0x80 { // is ASCII - return widthValues[c0] - } - i := widthIndex[c0] - if c0 < 0xE0 { // 2-byte UTF-8 - return t.lookupValue(uint32(i), s[1]) - } - i = widthIndex[uint32(i)<<6+uint32(s[1])] - if c0 < 0xF0 { // 3-byte UTF-8 - return t.lookupValue(uint32(i), s[2]) - } - i = widthIndex[uint32(i)<<6+uint32(s[2])] - if c0 < 0xF8 { // 4-byte UTF-8 - return t.lookupValue(uint32(i), s[3]) - } - return 0 -} - -// lookupString returns the trie value for the first UTF-8 encoding in s and -// the width in bytes of this encoding. The size will be 0 if s does not -// hold enough bytes to complete the encoding. len(s) must be greater than 0. -func (t *widthTrie) lookupString(s string) (v uint16, sz int) { - c0 := s[0] - switch { - case c0 < 0x80: // is ASCII - return widthValues[c0], 1 - case c0 < 0xC2: - return 0, 1 // Illegal UTF-8: not a starter, not ASCII. - case c0 < 0xE0: // 2-byte UTF-8 - if len(s) < 2 { - return 0, 0 - } - i := widthIndex[c0] - c1 := s[1] - if c1 < 0x80 || 0xC0 <= c1 { - return 0, 1 // Illegal UTF-8: not a continuation byte. - } - return t.lookupValue(uint32(i), c1), 2 - case c0 < 0xF0: // 3-byte UTF-8 - if len(s) < 3 { - return 0, 0 - } - i := widthIndex[c0] - c1 := s[1] - if c1 < 0x80 || 0xC0 <= c1 { - return 0, 1 // Illegal UTF-8: not a continuation byte. - } - o := uint32(i)<<6 + uint32(c1) - i = widthIndex[o] - c2 := s[2] - if c2 < 0x80 || 0xC0 <= c2 { - return 0, 2 // Illegal UTF-8: not a continuation byte. - } - return t.lookupValue(uint32(i), c2), 3 - case c0 < 0xF8: // 4-byte UTF-8 - if len(s) < 4 { - return 0, 0 - } - i := widthIndex[c0] - c1 := s[1] - if c1 < 0x80 || 0xC0 <= c1 { - return 0, 1 // Illegal UTF-8: not a continuation byte. - } - o := uint32(i)<<6 + uint32(c1) - i = widthIndex[o] - c2 := s[2] - if c2 < 0x80 || 0xC0 <= c2 { - return 0, 2 // Illegal UTF-8: not a continuation byte. - } - o = uint32(i)<<6 + uint32(c2) - i = widthIndex[o] - c3 := s[3] - if c3 < 0x80 || 0xC0 <= c3 { - return 0, 3 // Illegal UTF-8: not a continuation byte. - } - return t.lookupValue(uint32(i), c3), 4 - } - // Illegal rune - return 0, 1 -} - -// lookupStringUnsafe returns the trie value for the first UTF-8 encoding in s. -// s must start with a full and valid UTF-8 encoded rune. -func (t *widthTrie) lookupStringUnsafe(s string) uint16 { - c0 := s[0] - if c0 < 0x80 { // is ASCII - return widthValues[c0] - } - i := widthIndex[c0] - if c0 < 0xE0 { // 2-byte UTF-8 - return t.lookupValue(uint32(i), s[1]) - } - i = widthIndex[uint32(i)<<6+uint32(s[1])] - if c0 < 0xF0 { // 3-byte UTF-8 - return t.lookupValue(uint32(i), s[2]) - } - i = widthIndex[uint32(i)<<6+uint32(s[2])] - if c0 < 0xF8 { // 4-byte UTF-8 - return t.lookupValue(uint32(i), s[3]) - } - return 0 -} - -// widthTrie. Total size: 14336 bytes (14.00 KiB). Checksum: c0f7712776e71cd4. -type widthTrie struct{} - -func newWidthTrie(i int) *widthTrie { - return &widthTrie{} -} - -// lookupValue determines the type of block n and looks up the value for b. -func (t *widthTrie) lookupValue(n uint32, b byte) uint16 { - switch { - default: - return uint16(widthValues[n<<6+uint32(b)]) - } -} - -// widthValues: 101 blocks, 6464 entries, 12928 bytes -// The third block is the zero block. -var widthValues = [6464]uint16{ - // Block 0x0, offset 0x0 - 0x20: 0x6001, 0x21: 0x6002, 0x22: 0x6002, 0x23: 0x6002, - 0x24: 0x6002, 0x25: 0x6002, 0x26: 0x6002, 0x27: 0x6002, 0x28: 0x6002, 0x29: 0x6002, - 0x2a: 0x6002, 0x2b: 0x6002, 0x2c: 0x6002, 0x2d: 0x6002, 0x2e: 0x6002, 0x2f: 0x6002, - 0x30: 0x6002, 0x31: 0x6002, 0x32: 0x6002, 0x33: 0x6002, 0x34: 0x6002, 0x35: 0x6002, - 0x36: 0x6002, 0x37: 0x6002, 0x38: 0x6002, 0x39: 0x6002, 0x3a: 0x6002, 0x3b: 0x6002, - 0x3c: 0x6002, 0x3d: 0x6002, 0x3e: 0x6002, 0x3f: 0x6002, - // Block 0x1, offset 0x40 - 0x40: 0x6003, 0x41: 0x6003, 0x42: 0x6003, 0x43: 0x6003, 0x44: 0x6003, 0x45: 0x6003, - 0x46: 0x6003, 0x47: 0x6003, 0x48: 0x6003, 0x49: 0x6003, 0x4a: 0x6003, 0x4b: 0x6003, - 0x4c: 0x6003, 0x4d: 0x6003, 0x4e: 0x6003, 0x4f: 0x6003, 0x50: 0x6003, 0x51: 0x6003, - 0x52: 0x6003, 0x53: 0x6003, 0x54: 0x6003, 0x55: 0x6003, 0x56: 0x6003, 0x57: 0x6003, - 0x58: 0x6003, 0x59: 0x6003, 0x5a: 0x6003, 0x5b: 0x6003, 0x5c: 0x6003, 0x5d: 0x6003, - 0x5e: 0x6003, 0x5f: 0x6003, 0x60: 0x6004, 0x61: 0x6004, 0x62: 0x6004, 0x63: 0x6004, - 0x64: 0x6004, 0x65: 0x6004, 0x66: 0x6004, 0x67: 0x6004, 0x68: 0x6004, 0x69: 0x6004, - 0x6a: 0x6004, 0x6b: 0x6004, 0x6c: 0x6004, 0x6d: 0x6004, 0x6e: 0x6004, 0x6f: 0x6004, - 0x70: 0x6004, 0x71: 0x6004, 0x72: 0x6004, 0x73: 0x6004, 0x74: 0x6004, 0x75: 0x6004, - 0x76: 0x6004, 0x77: 0x6004, 0x78: 0x6004, 0x79: 0x6004, 0x7a: 0x6004, 0x7b: 0x6004, - 0x7c: 0x6004, 0x7d: 0x6004, 0x7e: 0x6004, - // Block 0x2, offset 0x80 - // Block 0x3, offset 0xc0 - 0xe1: 0x2000, 0xe2: 0x6005, 0xe3: 0x6005, - 0xe4: 0x2000, 0xe5: 0x6006, 0xe6: 0x6005, 0xe7: 0x2000, 0xe8: 0x2000, - 0xea: 0x2000, 0xec: 0x6007, 0xed: 0x2000, 0xee: 0x2000, 0xef: 0x6008, - 0xf0: 0x2000, 0xf1: 0x2000, 0xf2: 0x2000, 0xf3: 0x2000, 0xf4: 0x2000, - 0xf6: 0x2000, 0xf7: 0x2000, 0xf8: 0x2000, 0xf9: 0x2000, 0xfa: 0x2000, - 0xfc: 0x2000, 0xfd: 0x2000, 0xfe: 0x2000, 0xff: 0x2000, - // Block 0x4, offset 0x100 - 0x106: 0x2000, - 0x110: 0x2000, - 0x117: 0x2000, - 0x118: 0x2000, - 0x11e: 0x2000, 0x11f: 0x2000, 0x120: 0x2000, 0x121: 0x2000, - 0x126: 0x2000, 0x128: 0x2000, 0x129: 0x2000, - 0x12a: 0x2000, 0x12c: 0x2000, 0x12d: 0x2000, - 0x130: 0x2000, 0x132: 0x2000, 0x133: 0x2000, - 0x137: 0x2000, 0x138: 0x2000, 0x139: 0x2000, 0x13a: 0x2000, - 0x13c: 0x2000, 0x13e: 0x2000, - // Block 0x5, offset 0x140 - 0x141: 0x2000, - 0x151: 0x2000, - 0x153: 0x2000, - 0x15b: 0x2000, - 0x166: 0x2000, 0x167: 0x2000, - 0x16b: 0x2000, - 0x171: 0x2000, 0x172: 0x2000, 0x173: 0x2000, - 0x178: 0x2000, - 0x17f: 0x2000, - // Block 0x6, offset 0x180 - 0x180: 0x2000, 0x181: 0x2000, 0x182: 0x2000, 0x184: 0x2000, - 0x188: 0x2000, 0x189: 0x2000, 0x18a: 0x2000, 0x18b: 0x2000, - 0x18d: 0x2000, - 0x192: 0x2000, 0x193: 0x2000, - 0x1a6: 0x2000, 0x1a7: 0x2000, - 0x1ab: 0x2000, - // Block 0x7, offset 0x1c0 - 0x1ce: 0x2000, 0x1d0: 0x2000, - 0x1d2: 0x2000, 0x1d4: 0x2000, 0x1d6: 0x2000, - 0x1d8: 0x2000, 0x1da: 0x2000, 0x1dc: 0x2000, - // Block 0x8, offset 0x200 - 0x211: 0x2000, - 0x221: 0x2000, - // Block 0x9, offset 0x240 - 0x244: 0x2000, - 0x247: 0x2000, 0x249: 0x2000, 0x24a: 0x2000, 0x24b: 0x2000, - 0x24d: 0x2000, 0x250: 0x2000, - 0x258: 0x2000, 0x259: 0x2000, 0x25a: 0x2000, 0x25b: 0x2000, 0x25d: 0x2000, - 0x25f: 0x2000, - // Block 0xa, offset 0x280 - 0x280: 0x2000, 0x281: 0x2000, 0x282: 0x2000, 0x283: 0x2000, 0x284: 0x2000, 0x285: 0x2000, - 0x286: 0x2000, 0x287: 0x2000, 0x288: 0x2000, 0x289: 0x2000, 0x28a: 0x2000, 0x28b: 0x2000, - 0x28c: 0x2000, 0x28d: 0x2000, 0x28e: 0x2000, 0x28f: 0x2000, 0x290: 0x2000, 0x291: 0x2000, - 0x292: 0x2000, 0x293: 0x2000, 0x294: 0x2000, 0x295: 0x2000, 0x296: 0x2000, 0x297: 0x2000, - 0x298: 0x2000, 0x299: 0x2000, 0x29a: 0x2000, 0x29b: 0x2000, 0x29c: 0x2000, 0x29d: 0x2000, - 0x29e: 0x2000, 0x29f: 0x2000, 0x2a0: 0x2000, 0x2a1: 0x2000, 0x2a2: 0x2000, 0x2a3: 0x2000, - 0x2a4: 0x2000, 0x2a5: 0x2000, 0x2a6: 0x2000, 0x2a7: 0x2000, 0x2a8: 0x2000, 0x2a9: 0x2000, - 0x2aa: 0x2000, 0x2ab: 0x2000, 0x2ac: 0x2000, 0x2ad: 0x2000, 0x2ae: 0x2000, 0x2af: 0x2000, - 0x2b0: 0x2000, 0x2b1: 0x2000, 0x2b2: 0x2000, 0x2b3: 0x2000, 0x2b4: 0x2000, 0x2b5: 0x2000, - 0x2b6: 0x2000, 0x2b7: 0x2000, 0x2b8: 0x2000, 0x2b9: 0x2000, 0x2ba: 0x2000, 0x2bb: 0x2000, - 0x2bc: 0x2000, 0x2bd: 0x2000, 0x2be: 0x2000, 0x2bf: 0x2000, - // Block 0xb, offset 0x2c0 - 0x2c0: 0x2000, 0x2c1: 0x2000, 0x2c2: 0x2000, 0x2c3: 0x2000, 0x2c4: 0x2000, 0x2c5: 0x2000, - 0x2c6: 0x2000, 0x2c7: 0x2000, 0x2c8: 0x2000, 0x2c9: 0x2000, 0x2ca: 0x2000, 0x2cb: 0x2000, - 0x2cc: 0x2000, 0x2cd: 0x2000, 0x2ce: 0x2000, 0x2cf: 0x2000, 0x2d0: 0x2000, 0x2d1: 0x2000, - 0x2d2: 0x2000, 0x2d3: 0x2000, 0x2d4: 0x2000, 0x2d5: 0x2000, 0x2d6: 0x2000, 0x2d7: 0x2000, - 0x2d8: 0x2000, 0x2d9: 0x2000, 0x2da: 0x2000, 0x2db: 0x2000, 0x2dc: 0x2000, 0x2dd: 0x2000, - 0x2de: 0x2000, 0x2df: 0x2000, 0x2e0: 0x2000, 0x2e1: 0x2000, 0x2e2: 0x2000, 0x2e3: 0x2000, - 0x2e4: 0x2000, 0x2e5: 0x2000, 0x2e6: 0x2000, 0x2e7: 0x2000, 0x2e8: 0x2000, 0x2e9: 0x2000, - 0x2ea: 0x2000, 0x2eb: 0x2000, 0x2ec: 0x2000, 0x2ed: 0x2000, 0x2ee: 0x2000, 0x2ef: 0x2000, - // Block 0xc, offset 0x300 - 0x311: 0x2000, - 0x312: 0x2000, 0x313: 0x2000, 0x314: 0x2000, 0x315: 0x2000, 0x316: 0x2000, 0x317: 0x2000, - 0x318: 0x2000, 0x319: 0x2000, 0x31a: 0x2000, 0x31b: 0x2000, 0x31c: 0x2000, 0x31d: 0x2000, - 0x31e: 0x2000, 0x31f: 0x2000, 0x320: 0x2000, 0x321: 0x2000, 0x323: 0x2000, - 0x324: 0x2000, 0x325: 0x2000, 0x326: 0x2000, 0x327: 0x2000, 0x328: 0x2000, 0x329: 0x2000, - 0x331: 0x2000, 0x332: 0x2000, 0x333: 0x2000, 0x334: 0x2000, 0x335: 0x2000, - 0x336: 0x2000, 0x337: 0x2000, 0x338: 0x2000, 0x339: 0x2000, 0x33a: 0x2000, 0x33b: 0x2000, - 0x33c: 0x2000, 0x33d: 0x2000, 0x33e: 0x2000, 0x33f: 0x2000, - // Block 0xd, offset 0x340 - 0x340: 0x2000, 0x341: 0x2000, 0x343: 0x2000, 0x344: 0x2000, 0x345: 0x2000, - 0x346: 0x2000, 0x347: 0x2000, 0x348: 0x2000, 0x349: 0x2000, - // Block 0xe, offset 0x380 - 0x381: 0x2000, - 0x390: 0x2000, 0x391: 0x2000, - 0x392: 0x2000, 0x393: 0x2000, 0x394: 0x2000, 0x395: 0x2000, 0x396: 0x2000, 0x397: 0x2000, - 0x398: 0x2000, 0x399: 0x2000, 0x39a: 0x2000, 0x39b: 0x2000, 0x39c: 0x2000, 0x39d: 0x2000, - 0x39e: 0x2000, 0x39f: 0x2000, 0x3a0: 0x2000, 0x3a1: 0x2000, 0x3a2: 0x2000, 0x3a3: 0x2000, - 0x3a4: 0x2000, 0x3a5: 0x2000, 0x3a6: 0x2000, 0x3a7: 0x2000, 0x3a8: 0x2000, 0x3a9: 0x2000, - 0x3aa: 0x2000, 0x3ab: 0x2000, 0x3ac: 0x2000, 0x3ad: 0x2000, 0x3ae: 0x2000, 0x3af: 0x2000, - 0x3b0: 0x2000, 0x3b1: 0x2000, 0x3b2: 0x2000, 0x3b3: 0x2000, 0x3b4: 0x2000, 0x3b5: 0x2000, - 0x3b6: 0x2000, 0x3b7: 0x2000, 0x3b8: 0x2000, 0x3b9: 0x2000, 0x3ba: 0x2000, 0x3bb: 0x2000, - 0x3bc: 0x2000, 0x3bd: 0x2000, 0x3be: 0x2000, 0x3bf: 0x2000, - // Block 0xf, offset 0x3c0 - 0x3c0: 0x2000, 0x3c1: 0x2000, 0x3c2: 0x2000, 0x3c3: 0x2000, 0x3c4: 0x2000, 0x3c5: 0x2000, - 0x3c6: 0x2000, 0x3c7: 0x2000, 0x3c8: 0x2000, 0x3c9: 0x2000, 0x3ca: 0x2000, 0x3cb: 0x2000, - 0x3cc: 0x2000, 0x3cd: 0x2000, 0x3ce: 0x2000, 0x3cf: 0x2000, 0x3d1: 0x2000, - // Block 0x10, offset 0x400 - 0x400: 0x4000, 0x401: 0x4000, 0x402: 0x4000, 0x403: 0x4000, 0x404: 0x4000, 0x405: 0x4000, - 0x406: 0x4000, 0x407: 0x4000, 0x408: 0x4000, 0x409: 0x4000, 0x40a: 0x4000, 0x40b: 0x4000, - 0x40c: 0x4000, 0x40d: 0x4000, 0x40e: 0x4000, 0x40f: 0x4000, 0x410: 0x4000, 0x411: 0x4000, - 0x412: 0x4000, 0x413: 0x4000, 0x414: 0x4000, 0x415: 0x4000, 0x416: 0x4000, 0x417: 0x4000, - 0x418: 0x4000, 0x419: 0x4000, 0x41a: 0x4000, 0x41b: 0x4000, 0x41c: 0x4000, 0x41d: 0x4000, - 0x41e: 0x4000, 0x41f: 0x4000, 0x420: 0x4000, 0x421: 0x4000, 0x422: 0x4000, 0x423: 0x4000, - 0x424: 0x4000, 0x425: 0x4000, 0x426: 0x4000, 0x427: 0x4000, 0x428: 0x4000, 0x429: 0x4000, - 0x42a: 0x4000, 0x42b: 0x4000, 0x42c: 0x4000, 0x42d: 0x4000, 0x42e: 0x4000, 0x42f: 0x4000, - 0x430: 0x4000, 0x431: 0x4000, 0x432: 0x4000, 0x433: 0x4000, 0x434: 0x4000, 0x435: 0x4000, - 0x436: 0x4000, 0x437: 0x4000, 0x438: 0x4000, 0x439: 0x4000, 0x43a: 0x4000, 0x43b: 0x4000, - 0x43c: 0x4000, 0x43d: 0x4000, 0x43e: 0x4000, 0x43f: 0x4000, - // Block 0x11, offset 0x440 - 0x440: 0x4000, 0x441: 0x4000, 0x442: 0x4000, 0x443: 0x4000, 0x444: 0x4000, 0x445: 0x4000, - 0x446: 0x4000, 0x447: 0x4000, 0x448: 0x4000, 0x449: 0x4000, 0x44a: 0x4000, 0x44b: 0x4000, - 0x44c: 0x4000, 0x44d: 0x4000, 0x44e: 0x4000, 0x44f: 0x4000, 0x450: 0x4000, 0x451: 0x4000, - 0x452: 0x4000, 0x453: 0x4000, 0x454: 0x4000, 0x455: 0x4000, 0x456: 0x4000, 0x457: 0x4000, - 0x458: 0x4000, 0x459: 0x4000, 0x45a: 0x4000, 0x45b: 0x4000, 0x45c: 0x4000, 0x45d: 0x4000, - 0x45e: 0x4000, 0x45f: 0x4000, - // Block 0x12, offset 0x480 - 0x490: 0x2000, - 0x493: 0x2000, 0x494: 0x2000, 0x495: 0x2000, 0x496: 0x2000, - 0x498: 0x2000, 0x499: 0x2000, 0x49c: 0x2000, 0x49d: 0x2000, - 0x4a0: 0x2000, 0x4a1: 0x2000, 0x4a2: 0x2000, - 0x4a4: 0x2000, 0x4a5: 0x2000, 0x4a6: 0x2000, 0x4a7: 0x2000, - 0x4b0: 0x2000, 0x4b2: 0x2000, 0x4b3: 0x2000, 0x4b5: 0x2000, - 0x4bb: 0x2000, - 0x4be: 0x2000, - // Block 0x13, offset 0x4c0 - 0x4f4: 0x2000, - 0x4ff: 0x2000, - // Block 0x14, offset 0x500 - 0x501: 0x2000, 0x502: 0x2000, 0x503: 0x2000, 0x504: 0x2000, - 0x529: 0xa009, - 0x52c: 0x2000, - // Block 0x15, offset 0x540 - 0x543: 0x2000, 0x545: 0x2000, - 0x549: 0x2000, - 0x553: 0x2000, 0x556: 0x2000, - 0x561: 0x2000, 0x562: 0x2000, - 0x566: 0x2000, - 0x56b: 0x2000, - // Block 0x16, offset 0x580 - 0x593: 0x2000, 0x594: 0x2000, - 0x59b: 0x2000, 0x59c: 0x2000, 0x59d: 0x2000, - 0x59e: 0x2000, 0x5a0: 0x2000, 0x5a1: 0x2000, 0x5a2: 0x2000, 0x5a3: 0x2000, - 0x5a4: 0x2000, 0x5a5: 0x2000, 0x5a6: 0x2000, 0x5a7: 0x2000, 0x5a8: 0x2000, 0x5a9: 0x2000, - 0x5aa: 0x2000, 0x5ab: 0x2000, - 0x5b0: 0x2000, 0x5b1: 0x2000, 0x5b2: 0x2000, 0x5b3: 0x2000, 0x5b4: 0x2000, 0x5b5: 0x2000, - 0x5b6: 0x2000, 0x5b7: 0x2000, 0x5b8: 0x2000, 0x5b9: 0x2000, - // Block 0x17, offset 0x5c0 - 0x5c9: 0x2000, - 0x5d0: 0x200a, 0x5d1: 0x200b, - 0x5d2: 0x200a, 0x5d3: 0x200c, 0x5d4: 0x2000, 0x5d5: 0x2000, 0x5d6: 0x2000, 0x5d7: 0x2000, - 0x5d8: 0x2000, 0x5d9: 0x2000, - 0x5f8: 0x2000, 0x5f9: 0x2000, - // Block 0x18, offset 0x600 - 0x612: 0x2000, 0x614: 0x2000, - 0x627: 0x2000, - // Block 0x19, offset 0x640 - 0x640: 0x2000, 0x642: 0x2000, 0x643: 0x2000, - 0x647: 0x2000, 0x648: 0x2000, 0x64b: 0x2000, - 0x64f: 0x2000, 0x651: 0x2000, - 0x655: 0x2000, - 0x65a: 0x2000, 0x65d: 0x2000, - 0x65e: 0x2000, 0x65f: 0x2000, 0x660: 0x2000, 0x663: 0x2000, - 0x665: 0x2000, 0x667: 0x2000, 0x668: 0x2000, 0x669: 0x2000, - 0x66a: 0x2000, 0x66b: 0x2000, 0x66c: 0x2000, 0x66e: 0x2000, - 0x674: 0x2000, 0x675: 0x2000, - 0x676: 0x2000, 0x677: 0x2000, - 0x67c: 0x2000, 0x67d: 0x2000, - // Block 0x1a, offset 0x680 - 0x688: 0x2000, - 0x68c: 0x2000, - 0x692: 0x2000, - 0x6a0: 0x2000, 0x6a1: 0x2000, - 0x6a4: 0x2000, 0x6a5: 0x2000, 0x6a6: 0x2000, 0x6a7: 0x2000, - 0x6aa: 0x2000, 0x6ab: 0x2000, 0x6ae: 0x2000, 0x6af: 0x2000, - // Block 0x1b, offset 0x6c0 - 0x6c2: 0x2000, 0x6c3: 0x2000, - 0x6c6: 0x2000, 0x6c7: 0x2000, - 0x6d5: 0x2000, - 0x6d9: 0x2000, - 0x6e5: 0x2000, - 0x6ff: 0x2000, - // Block 0x1c, offset 0x700 - 0x712: 0x2000, - 0x71a: 0x4000, 0x71b: 0x4000, - 0x729: 0x4000, - 0x72a: 0x4000, - // Block 0x1d, offset 0x740 - 0x769: 0x4000, - 0x76a: 0x4000, 0x76b: 0x4000, 0x76c: 0x4000, - 0x770: 0x4000, 0x773: 0x4000, - // Block 0x1e, offset 0x780 - 0x7a0: 0x2000, 0x7a1: 0x2000, 0x7a2: 0x2000, 0x7a3: 0x2000, - 0x7a4: 0x2000, 0x7a5: 0x2000, 0x7a6: 0x2000, 0x7a7: 0x2000, 0x7a8: 0x2000, 0x7a9: 0x2000, - 0x7aa: 0x2000, 0x7ab: 0x2000, 0x7ac: 0x2000, 0x7ad: 0x2000, 0x7ae: 0x2000, 0x7af: 0x2000, - 0x7b0: 0x2000, 0x7b1: 0x2000, 0x7b2: 0x2000, 0x7b3: 0x2000, 0x7b4: 0x2000, 0x7b5: 0x2000, - 0x7b6: 0x2000, 0x7b7: 0x2000, 0x7b8: 0x2000, 0x7b9: 0x2000, 0x7ba: 0x2000, 0x7bb: 0x2000, - 0x7bc: 0x2000, 0x7bd: 0x2000, 0x7be: 0x2000, 0x7bf: 0x2000, - // Block 0x1f, offset 0x7c0 - 0x7c0: 0x2000, 0x7c1: 0x2000, 0x7c2: 0x2000, 0x7c3: 0x2000, 0x7c4: 0x2000, 0x7c5: 0x2000, - 0x7c6: 0x2000, 0x7c7: 0x2000, 0x7c8: 0x2000, 0x7c9: 0x2000, 0x7ca: 0x2000, 0x7cb: 0x2000, - 0x7cc: 0x2000, 0x7cd: 0x2000, 0x7ce: 0x2000, 0x7cf: 0x2000, 0x7d0: 0x2000, 0x7d1: 0x2000, - 0x7d2: 0x2000, 0x7d3: 0x2000, 0x7d4: 0x2000, 0x7d5: 0x2000, 0x7d6: 0x2000, 0x7d7: 0x2000, - 0x7d8: 0x2000, 0x7d9: 0x2000, 0x7da: 0x2000, 0x7db: 0x2000, 0x7dc: 0x2000, 0x7dd: 0x2000, - 0x7de: 0x2000, 0x7df: 0x2000, 0x7e0: 0x2000, 0x7e1: 0x2000, 0x7e2: 0x2000, 0x7e3: 0x2000, - 0x7e4: 0x2000, 0x7e5: 0x2000, 0x7e6: 0x2000, 0x7e7: 0x2000, 0x7e8: 0x2000, 0x7e9: 0x2000, - 0x7eb: 0x2000, 0x7ec: 0x2000, 0x7ed: 0x2000, 0x7ee: 0x2000, 0x7ef: 0x2000, - 0x7f0: 0x2000, 0x7f1: 0x2000, 0x7f2: 0x2000, 0x7f3: 0x2000, 0x7f4: 0x2000, 0x7f5: 0x2000, - 0x7f6: 0x2000, 0x7f7: 0x2000, 0x7f8: 0x2000, 0x7f9: 0x2000, 0x7fa: 0x2000, 0x7fb: 0x2000, - 0x7fc: 0x2000, 0x7fd: 0x2000, 0x7fe: 0x2000, 0x7ff: 0x2000, - // Block 0x20, offset 0x800 - 0x800: 0x2000, 0x801: 0x2000, 0x802: 0x200d, 0x803: 0x2000, 0x804: 0x2000, 0x805: 0x2000, - 0x806: 0x2000, 0x807: 0x2000, 0x808: 0x2000, 0x809: 0x2000, 0x80a: 0x2000, 0x80b: 0x2000, - 0x80c: 0x2000, 0x80d: 0x2000, 0x80e: 0x2000, 0x80f: 0x2000, 0x810: 0x2000, 0x811: 0x2000, - 0x812: 0x2000, 0x813: 0x2000, 0x814: 0x2000, 0x815: 0x2000, 0x816: 0x2000, 0x817: 0x2000, - 0x818: 0x2000, 0x819: 0x2000, 0x81a: 0x2000, 0x81b: 0x2000, 0x81c: 0x2000, 0x81d: 0x2000, - 0x81e: 0x2000, 0x81f: 0x2000, 0x820: 0x2000, 0x821: 0x2000, 0x822: 0x2000, 0x823: 0x2000, - 0x824: 0x2000, 0x825: 0x2000, 0x826: 0x2000, 0x827: 0x2000, 0x828: 0x2000, 0x829: 0x2000, - 0x82a: 0x2000, 0x82b: 0x2000, 0x82c: 0x2000, 0x82d: 0x2000, 0x82e: 0x2000, 0x82f: 0x2000, - 0x830: 0x2000, 0x831: 0x2000, 0x832: 0x2000, 0x833: 0x2000, 0x834: 0x2000, 0x835: 0x2000, - 0x836: 0x2000, 0x837: 0x2000, 0x838: 0x2000, 0x839: 0x2000, 0x83a: 0x2000, 0x83b: 0x2000, - 0x83c: 0x2000, 0x83d: 0x2000, 0x83e: 0x2000, 0x83f: 0x2000, - // Block 0x21, offset 0x840 - 0x840: 0x2000, 0x841: 0x2000, 0x842: 0x2000, 0x843: 0x2000, 0x844: 0x2000, 0x845: 0x2000, - 0x846: 0x2000, 0x847: 0x2000, 0x848: 0x2000, 0x849: 0x2000, 0x84a: 0x2000, 0x84b: 0x2000, - 0x850: 0x2000, 0x851: 0x2000, - 0x852: 0x2000, 0x853: 0x2000, 0x854: 0x2000, 0x855: 0x2000, 0x856: 0x2000, 0x857: 0x2000, - 0x858: 0x2000, 0x859: 0x2000, 0x85a: 0x2000, 0x85b: 0x2000, 0x85c: 0x2000, 0x85d: 0x2000, - 0x85e: 0x2000, 0x85f: 0x2000, 0x860: 0x2000, 0x861: 0x2000, 0x862: 0x2000, 0x863: 0x2000, - 0x864: 0x2000, 0x865: 0x2000, 0x866: 0x2000, 0x867: 0x2000, 0x868: 0x2000, 0x869: 0x2000, - 0x86a: 0x2000, 0x86b: 0x2000, 0x86c: 0x2000, 0x86d: 0x2000, 0x86e: 0x2000, 0x86f: 0x2000, - 0x870: 0x2000, 0x871: 0x2000, 0x872: 0x2000, 0x873: 0x2000, - // Block 0x22, offset 0x880 - 0x880: 0x2000, 0x881: 0x2000, 0x882: 0x2000, 0x883: 0x2000, 0x884: 0x2000, 0x885: 0x2000, - 0x886: 0x2000, 0x887: 0x2000, 0x888: 0x2000, 0x889: 0x2000, 0x88a: 0x2000, 0x88b: 0x2000, - 0x88c: 0x2000, 0x88d: 0x2000, 0x88e: 0x2000, 0x88f: 0x2000, - 0x892: 0x2000, 0x893: 0x2000, 0x894: 0x2000, 0x895: 0x2000, - 0x8a0: 0x200e, 0x8a1: 0x2000, 0x8a3: 0x2000, - 0x8a4: 0x2000, 0x8a5: 0x2000, 0x8a6: 0x2000, 0x8a7: 0x2000, 0x8a8: 0x2000, 0x8a9: 0x2000, - 0x8b2: 0x2000, 0x8b3: 0x2000, - 0x8b6: 0x2000, 0x8b7: 0x2000, - 0x8bc: 0x2000, 0x8bd: 0x2000, - // Block 0x23, offset 0x8c0 - 0x8c0: 0x2000, 0x8c1: 0x2000, - 0x8c6: 0x2000, 0x8c7: 0x2000, 0x8c8: 0x2000, 0x8cb: 0x200f, - 0x8ce: 0x2000, 0x8cf: 0x2000, 0x8d0: 0x2000, 0x8d1: 0x2000, - 0x8e2: 0x2000, 0x8e3: 0x2000, - 0x8e4: 0x2000, 0x8e5: 0x2000, - 0x8ef: 0x2000, - 0x8fd: 0x4000, 0x8fe: 0x4000, - // Block 0x24, offset 0x900 - 0x905: 0x2000, - 0x906: 0x2000, 0x909: 0x2000, - 0x90e: 0x2000, 0x90f: 0x2000, - 0x914: 0x4000, 0x915: 0x4000, - 0x91c: 0x2000, - 0x91e: 0x2000, - // Block 0x25, offset 0x940 - 0x940: 0x2000, 0x942: 0x2000, - 0x948: 0x4000, 0x949: 0x4000, 0x94a: 0x4000, 0x94b: 0x4000, - 0x94c: 0x4000, 0x94d: 0x4000, 0x94e: 0x4000, 0x94f: 0x4000, 0x950: 0x4000, 0x951: 0x4000, - 0x952: 0x4000, 0x953: 0x4000, - 0x960: 0x2000, 0x961: 0x2000, 0x963: 0x2000, - 0x964: 0x2000, 0x965: 0x2000, 0x967: 0x2000, 0x968: 0x2000, 0x969: 0x2000, - 0x96a: 0x2000, 0x96c: 0x2000, 0x96d: 0x2000, 0x96f: 0x2000, - 0x97f: 0x4000, - // Block 0x26, offset 0x980 - 0x993: 0x4000, - 0x99e: 0x2000, 0x99f: 0x2000, 0x9a1: 0x4000, - 0x9aa: 0x4000, 0x9ab: 0x4000, - 0x9bd: 0x4000, 0x9be: 0x4000, 0x9bf: 0x2000, - // Block 0x27, offset 0x9c0 - 0x9c4: 0x4000, 0x9c5: 0x4000, - 0x9c6: 0x2000, 0x9c7: 0x2000, 0x9c8: 0x2000, 0x9c9: 0x2000, 0x9ca: 0x2000, 0x9cb: 0x2000, - 0x9cc: 0x2000, 0x9cd: 0x2000, 0x9ce: 0x4000, 0x9cf: 0x2000, 0x9d0: 0x2000, 0x9d1: 0x2000, - 0x9d2: 0x2000, 0x9d3: 0x2000, 0x9d4: 0x4000, 0x9d5: 0x2000, 0x9d6: 0x2000, 0x9d7: 0x2000, - 0x9d8: 0x2000, 0x9d9: 0x2000, 0x9da: 0x2000, 0x9db: 0x2000, 0x9dc: 0x2000, 0x9dd: 0x2000, - 0x9de: 0x2000, 0x9df: 0x2000, 0x9e0: 0x2000, 0x9e1: 0x2000, 0x9e3: 0x2000, - 0x9e8: 0x2000, 0x9e9: 0x2000, - 0x9ea: 0x4000, 0x9eb: 0x2000, 0x9ec: 0x2000, 0x9ed: 0x2000, 0x9ee: 0x2000, 0x9ef: 0x2000, - 0x9f0: 0x2000, 0x9f1: 0x2000, 0x9f2: 0x4000, 0x9f3: 0x4000, 0x9f4: 0x2000, 0x9f5: 0x4000, - 0x9f6: 0x2000, 0x9f7: 0x2000, 0x9f8: 0x2000, 0x9f9: 0x2000, 0x9fa: 0x4000, 0x9fb: 0x2000, - 0x9fc: 0x2000, 0x9fd: 0x4000, 0x9fe: 0x2000, 0x9ff: 0x2000, - // Block 0x28, offset 0xa00 - 0xa05: 0x4000, - 0xa0a: 0x4000, 0xa0b: 0x4000, - 0xa28: 0x4000, - 0xa3d: 0x2000, - // Block 0x29, offset 0xa40 - 0xa4c: 0x4000, 0xa4e: 0x4000, - 0xa53: 0x4000, 0xa54: 0x4000, 0xa55: 0x4000, 0xa57: 0x4000, - 0xa76: 0x2000, 0xa77: 0x2000, 0xa78: 0x2000, 0xa79: 0x2000, 0xa7a: 0x2000, 0xa7b: 0x2000, - 0xa7c: 0x2000, 0xa7d: 0x2000, 0xa7e: 0x2000, 0xa7f: 0x2000, - // Block 0x2a, offset 0xa80 - 0xa95: 0x4000, 0xa96: 0x4000, 0xa97: 0x4000, - 0xab0: 0x4000, - 0xabf: 0x4000, - // Block 0x2b, offset 0xac0 - 0xae6: 0x6000, 0xae7: 0x6000, 0xae8: 0x6000, 0xae9: 0x6000, - 0xaea: 0x6000, 0xaeb: 0x6000, 0xaec: 0x6000, 0xaed: 0x6000, - // Block 0x2c, offset 0xb00 - 0xb05: 0x6010, - 0xb06: 0x6011, - // Block 0x2d, offset 0xb40 - 0xb5b: 0x4000, 0xb5c: 0x4000, - // Block 0x2e, offset 0xb80 - 0xb90: 0x4000, - 0xb95: 0x4000, 0xb96: 0x2000, 0xb97: 0x2000, - 0xb98: 0x2000, 0xb99: 0x2000, - // Block 0x2f, offset 0xbc0 - 0xbc0: 0x4000, 0xbc1: 0x4000, 0xbc2: 0x4000, 0xbc3: 0x4000, 0xbc4: 0x4000, 0xbc5: 0x4000, - 0xbc6: 0x4000, 0xbc7: 0x4000, 0xbc8: 0x4000, 0xbc9: 0x4000, 0xbca: 0x4000, 0xbcb: 0x4000, - 0xbcc: 0x4000, 0xbcd: 0x4000, 0xbce: 0x4000, 0xbcf: 0x4000, 0xbd0: 0x4000, 0xbd1: 0x4000, - 0xbd2: 0x4000, 0xbd3: 0x4000, 0xbd4: 0x4000, 0xbd5: 0x4000, 0xbd6: 0x4000, 0xbd7: 0x4000, - 0xbd8: 0x4000, 0xbd9: 0x4000, 0xbdb: 0x4000, 0xbdc: 0x4000, 0xbdd: 0x4000, - 0xbde: 0x4000, 0xbdf: 0x4000, 0xbe0: 0x4000, 0xbe1: 0x4000, 0xbe2: 0x4000, 0xbe3: 0x4000, - 0xbe4: 0x4000, 0xbe5: 0x4000, 0xbe6: 0x4000, 0xbe7: 0x4000, 0xbe8: 0x4000, 0xbe9: 0x4000, - 0xbea: 0x4000, 0xbeb: 0x4000, 0xbec: 0x4000, 0xbed: 0x4000, 0xbee: 0x4000, 0xbef: 0x4000, - 0xbf0: 0x4000, 0xbf1: 0x4000, 0xbf2: 0x4000, 0xbf3: 0x4000, 0xbf4: 0x4000, 0xbf5: 0x4000, - 0xbf6: 0x4000, 0xbf7: 0x4000, 0xbf8: 0x4000, 0xbf9: 0x4000, 0xbfa: 0x4000, 0xbfb: 0x4000, - 0xbfc: 0x4000, 0xbfd: 0x4000, 0xbfe: 0x4000, 0xbff: 0x4000, - // Block 0x30, offset 0xc00 - 0xc00: 0x4000, 0xc01: 0x4000, 0xc02: 0x4000, 0xc03: 0x4000, 0xc04: 0x4000, 0xc05: 0x4000, - 0xc06: 0x4000, 0xc07: 0x4000, 0xc08: 0x4000, 0xc09: 0x4000, 0xc0a: 0x4000, 0xc0b: 0x4000, - 0xc0c: 0x4000, 0xc0d: 0x4000, 0xc0e: 0x4000, 0xc0f: 0x4000, 0xc10: 0x4000, 0xc11: 0x4000, - 0xc12: 0x4000, 0xc13: 0x4000, 0xc14: 0x4000, 0xc15: 0x4000, 0xc16: 0x4000, 0xc17: 0x4000, - 0xc18: 0x4000, 0xc19: 0x4000, 0xc1a: 0x4000, 0xc1b: 0x4000, 0xc1c: 0x4000, 0xc1d: 0x4000, - 0xc1e: 0x4000, 0xc1f: 0x4000, 0xc20: 0x4000, 0xc21: 0x4000, 0xc22: 0x4000, 0xc23: 0x4000, - 0xc24: 0x4000, 0xc25: 0x4000, 0xc26: 0x4000, 0xc27: 0x4000, 0xc28: 0x4000, 0xc29: 0x4000, - 0xc2a: 0x4000, 0xc2b: 0x4000, 0xc2c: 0x4000, 0xc2d: 0x4000, 0xc2e: 0x4000, 0xc2f: 0x4000, - 0xc30: 0x4000, 0xc31: 0x4000, 0xc32: 0x4000, 0xc33: 0x4000, - // Block 0x31, offset 0xc40 - 0xc40: 0x4000, 0xc41: 0x4000, 0xc42: 0x4000, 0xc43: 0x4000, 0xc44: 0x4000, 0xc45: 0x4000, - 0xc46: 0x4000, 0xc47: 0x4000, 0xc48: 0x4000, 0xc49: 0x4000, 0xc4a: 0x4000, 0xc4b: 0x4000, - 0xc4c: 0x4000, 0xc4d: 0x4000, 0xc4e: 0x4000, 0xc4f: 0x4000, 0xc50: 0x4000, 0xc51: 0x4000, - 0xc52: 0x4000, 0xc53: 0x4000, 0xc54: 0x4000, 0xc55: 0x4000, - 0xc70: 0x4000, 0xc71: 0x4000, 0xc72: 0x4000, 0xc73: 0x4000, 0xc74: 0x4000, 0xc75: 0x4000, - 0xc76: 0x4000, 0xc77: 0x4000, 0xc78: 0x4000, 0xc79: 0x4000, 0xc7a: 0x4000, 0xc7b: 0x4000, - // Block 0x32, offset 0xc80 - 0xc80: 0x9012, 0xc81: 0x4013, 0xc82: 0x4014, 0xc83: 0x4000, 0xc84: 0x4000, 0xc85: 0x4000, - 0xc86: 0x4000, 0xc87: 0x4000, 0xc88: 0x4000, 0xc89: 0x4000, 0xc8a: 0x4000, 0xc8b: 0x4000, - 0xc8c: 0x4015, 0xc8d: 0x4015, 0xc8e: 0x4000, 0xc8f: 0x4000, 0xc90: 0x4000, 0xc91: 0x4000, - 0xc92: 0x4000, 0xc93: 0x4000, 0xc94: 0x4000, 0xc95: 0x4000, 0xc96: 0x4000, 0xc97: 0x4000, - 0xc98: 0x4000, 0xc99: 0x4000, 0xc9a: 0x4000, 0xc9b: 0x4000, 0xc9c: 0x4000, 0xc9d: 0x4000, - 0xc9e: 0x4000, 0xc9f: 0x4000, 0xca0: 0x4000, 0xca1: 0x4000, 0xca2: 0x4000, 0xca3: 0x4000, - 0xca4: 0x4000, 0xca5: 0x4000, 0xca6: 0x4000, 0xca7: 0x4000, 0xca8: 0x4000, 0xca9: 0x4000, - 0xcaa: 0x4000, 0xcab: 0x4000, 0xcac: 0x4000, 0xcad: 0x4000, 0xcae: 0x4000, 0xcaf: 0x4000, - 0xcb0: 0x4000, 0xcb1: 0x4000, 0xcb2: 0x4000, 0xcb3: 0x4000, 0xcb4: 0x4000, 0xcb5: 0x4000, - 0xcb6: 0x4000, 0xcb7: 0x4000, 0xcb8: 0x4000, 0xcb9: 0x4000, 0xcba: 0x4000, 0xcbb: 0x4000, - 0xcbc: 0x4000, 0xcbd: 0x4000, 0xcbe: 0x4000, - // Block 0x33, offset 0xcc0 - 0xcc1: 0x4000, 0xcc2: 0x4000, 0xcc3: 0x4000, 0xcc4: 0x4000, 0xcc5: 0x4000, - 0xcc6: 0x4000, 0xcc7: 0x4000, 0xcc8: 0x4000, 0xcc9: 0x4000, 0xcca: 0x4000, 0xccb: 0x4000, - 0xccc: 0x4000, 0xccd: 0x4000, 0xcce: 0x4000, 0xccf: 0x4000, 0xcd0: 0x4000, 0xcd1: 0x4000, - 0xcd2: 0x4000, 0xcd3: 0x4000, 0xcd4: 0x4000, 0xcd5: 0x4000, 0xcd6: 0x4000, 0xcd7: 0x4000, - 0xcd8: 0x4000, 0xcd9: 0x4000, 0xcda: 0x4000, 0xcdb: 0x4000, 0xcdc: 0x4000, 0xcdd: 0x4000, - 0xcde: 0x4000, 0xcdf: 0x4000, 0xce0: 0x4000, 0xce1: 0x4000, 0xce2: 0x4000, 0xce3: 0x4000, - 0xce4: 0x4000, 0xce5: 0x4000, 0xce6: 0x4000, 0xce7: 0x4000, 0xce8: 0x4000, 0xce9: 0x4000, - 0xcea: 0x4000, 0xceb: 0x4000, 0xcec: 0x4000, 0xced: 0x4000, 0xcee: 0x4000, 0xcef: 0x4000, - 0xcf0: 0x4000, 0xcf1: 0x4000, 0xcf2: 0x4000, 0xcf3: 0x4000, 0xcf4: 0x4000, 0xcf5: 0x4000, - 0xcf6: 0x4000, 0xcf7: 0x4000, 0xcf8: 0x4000, 0xcf9: 0x4000, 0xcfa: 0x4000, 0xcfb: 0x4000, - 0xcfc: 0x4000, 0xcfd: 0x4000, 0xcfe: 0x4000, 0xcff: 0x4000, - // Block 0x34, offset 0xd00 - 0xd00: 0x4000, 0xd01: 0x4000, 0xd02: 0x4000, 0xd03: 0x4000, 0xd04: 0x4000, 0xd05: 0x4000, - 0xd06: 0x4000, 0xd07: 0x4000, 0xd08: 0x4000, 0xd09: 0x4000, 0xd0a: 0x4000, 0xd0b: 0x4000, - 0xd0c: 0x4000, 0xd0d: 0x4000, 0xd0e: 0x4000, 0xd0f: 0x4000, 0xd10: 0x4000, 0xd11: 0x4000, - 0xd12: 0x4000, 0xd13: 0x4000, 0xd14: 0x4000, 0xd15: 0x4000, 0xd16: 0x4000, - 0xd19: 0x4016, 0xd1a: 0x4017, 0xd1b: 0x4000, 0xd1c: 0x4000, 0xd1d: 0x4000, - 0xd1e: 0x4000, 0xd1f: 0x4000, 0xd20: 0x4000, 0xd21: 0x4018, 0xd22: 0x4019, 0xd23: 0x401a, - 0xd24: 0x401b, 0xd25: 0x401c, 0xd26: 0x401d, 0xd27: 0x401e, 0xd28: 0x401f, 0xd29: 0x4020, - 0xd2a: 0x4021, 0xd2b: 0x4022, 0xd2c: 0x4000, 0xd2d: 0x4010, 0xd2e: 0x4000, 0xd2f: 0x4023, - 0xd30: 0x4000, 0xd31: 0x4024, 0xd32: 0x4000, 0xd33: 0x4025, 0xd34: 0x4000, 0xd35: 0x4026, - 0xd36: 0x4000, 0xd37: 0x401a, 0xd38: 0x4000, 0xd39: 0x4027, 0xd3a: 0x4000, 0xd3b: 0x4028, - 0xd3c: 0x4000, 0xd3d: 0x4020, 0xd3e: 0x4000, 0xd3f: 0x4029, - // Block 0x35, offset 0xd40 - 0xd40: 0x4000, 0xd41: 0x402a, 0xd42: 0x4000, 0xd43: 0x402b, 0xd44: 0x402c, 0xd45: 0x4000, - 0xd46: 0x4017, 0xd47: 0x4000, 0xd48: 0x402d, 0xd49: 0x4000, 0xd4a: 0x402e, 0xd4b: 0x402f, - 0xd4c: 0x4030, 0xd4d: 0x4017, 0xd4e: 0x4016, 0xd4f: 0x4017, 0xd50: 0x4000, 0xd51: 0x4000, - 0xd52: 0x4031, 0xd53: 0x4000, 0xd54: 0x4000, 0xd55: 0x4031, 0xd56: 0x4000, 0xd57: 0x4000, - 0xd58: 0x4032, 0xd59: 0x4000, 0xd5a: 0x4000, 0xd5b: 0x4032, 0xd5c: 0x4000, 0xd5d: 0x4000, - 0xd5e: 0x4033, 0xd5f: 0x402e, 0xd60: 0x4034, 0xd61: 0x4035, 0xd62: 0x4034, 0xd63: 0x4036, - 0xd64: 0x4037, 0xd65: 0x4024, 0xd66: 0x4035, 0xd67: 0x4025, 0xd68: 0x4038, 0xd69: 0x4038, - 0xd6a: 0x4039, 0xd6b: 0x4039, 0xd6c: 0x403a, 0xd6d: 0x403a, 0xd6e: 0x4000, 0xd6f: 0x4035, - 0xd70: 0x4000, 0xd71: 0x4000, 0xd72: 0x403b, 0xd73: 0x403c, 0xd74: 0x4000, 0xd75: 0x4000, - 0xd76: 0x4000, 0xd77: 0x4000, 0xd78: 0x4000, 0xd79: 0x4000, 0xd7a: 0x4000, 0xd7b: 0x403d, - 0xd7c: 0x401c, 0xd7d: 0x4000, 0xd7e: 0x4000, 0xd7f: 0x4000, - // Block 0x36, offset 0xd80 - 0xd85: 0x4000, - 0xd86: 0x4000, 0xd87: 0x4000, 0xd88: 0x4000, 0xd89: 0x4000, 0xd8a: 0x4000, 0xd8b: 0x4000, - 0xd8c: 0x4000, 0xd8d: 0x4000, 0xd8e: 0x4000, 0xd8f: 0x4000, 0xd90: 0x4000, 0xd91: 0x4000, - 0xd92: 0x4000, 0xd93: 0x4000, 0xd94: 0x4000, 0xd95: 0x4000, 0xd96: 0x4000, 0xd97: 0x4000, - 0xd98: 0x4000, 0xd99: 0x4000, 0xd9a: 0x4000, 0xd9b: 0x4000, 0xd9c: 0x4000, 0xd9d: 0x4000, - 0xd9e: 0x4000, 0xd9f: 0x4000, 0xda0: 0x4000, 0xda1: 0x4000, 0xda2: 0x4000, 0xda3: 0x4000, - 0xda4: 0x4000, 0xda5: 0x4000, 0xda6: 0x4000, 0xda7: 0x4000, 0xda8: 0x4000, 0xda9: 0x4000, - 0xdaa: 0x4000, 0xdab: 0x4000, 0xdac: 0x4000, 0xdad: 0x4000, 0xdae: 0x4000, 0xdaf: 0x4000, - 0xdb1: 0x403e, 0xdb2: 0x403e, 0xdb3: 0x403e, 0xdb4: 0x403e, 0xdb5: 0x403e, - 0xdb6: 0x403e, 0xdb7: 0x403e, 0xdb8: 0x403e, 0xdb9: 0x403e, 0xdba: 0x403e, 0xdbb: 0x403e, - 0xdbc: 0x403e, 0xdbd: 0x403e, 0xdbe: 0x403e, 0xdbf: 0x403e, - // Block 0x37, offset 0xdc0 - 0xdc0: 0x4037, 0xdc1: 0x4037, 0xdc2: 0x4037, 0xdc3: 0x4037, 0xdc4: 0x4037, 0xdc5: 0x4037, - 0xdc6: 0x4037, 0xdc7: 0x4037, 0xdc8: 0x4037, 0xdc9: 0x4037, 0xdca: 0x4037, 0xdcb: 0x4037, - 0xdcc: 0x4037, 0xdcd: 0x4037, 0xdce: 0x4037, 0xdcf: 0x400e, 0xdd0: 0x403f, 0xdd1: 0x4040, - 0xdd2: 0x4041, 0xdd3: 0x4040, 0xdd4: 0x403f, 0xdd5: 0x4042, 0xdd6: 0x4043, 0xdd7: 0x4044, - 0xdd8: 0x4040, 0xdd9: 0x4041, 0xdda: 0x4040, 0xddb: 0x4045, 0xddc: 0x4009, 0xddd: 0x4045, - 0xdde: 0x4046, 0xddf: 0x4045, 0xde0: 0x4047, 0xde1: 0x400b, 0xde2: 0x400a, 0xde3: 0x400c, - 0xde4: 0x4048, 0xde5: 0x4000, 0xde6: 0x4000, 0xde7: 0x4000, 0xde8: 0x4000, 0xde9: 0x4000, - 0xdea: 0x4000, 0xdeb: 0x4000, 0xdec: 0x4000, 0xded: 0x4000, 0xdee: 0x4000, 0xdef: 0x4000, - 0xdf0: 0x4000, 0xdf1: 0x4000, 0xdf2: 0x4000, 0xdf3: 0x4000, 0xdf4: 0x4000, 0xdf5: 0x4000, - 0xdf6: 0x4000, 0xdf7: 0x4000, 0xdf8: 0x4000, 0xdf9: 0x4000, 0xdfa: 0x4000, 0xdfb: 0x4000, - 0xdfc: 0x4000, 0xdfd: 0x4000, 0xdfe: 0x4000, 0xdff: 0x4000, - // Block 0x38, offset 0xe00 - 0xe00: 0x4000, 0xe01: 0x4000, 0xe02: 0x4000, 0xe03: 0x4000, 0xe04: 0x4000, 0xe05: 0x4000, - 0xe06: 0x4000, 0xe07: 0x4000, 0xe08: 0x4000, 0xe09: 0x4000, 0xe0a: 0x4000, 0xe0b: 0x4000, - 0xe0c: 0x4000, 0xe0d: 0x4000, 0xe0e: 0x4000, 0xe10: 0x4000, 0xe11: 0x4000, - 0xe12: 0x4000, 0xe13: 0x4000, 0xe14: 0x4000, 0xe15: 0x4000, 0xe16: 0x4000, 0xe17: 0x4000, - 0xe18: 0x4000, 0xe19: 0x4000, 0xe1a: 0x4000, 0xe1b: 0x4000, 0xe1c: 0x4000, 0xe1d: 0x4000, - 0xe1e: 0x4000, 0xe1f: 0x4000, 0xe20: 0x4000, 0xe21: 0x4000, 0xe22: 0x4000, 0xe23: 0x4000, - 0xe24: 0x4000, 0xe25: 0x4000, 0xe26: 0x4000, 0xe27: 0x4000, 0xe28: 0x4000, 0xe29: 0x4000, - 0xe2a: 0x4000, 0xe2b: 0x4000, 0xe2c: 0x4000, 0xe2d: 0x4000, 0xe2e: 0x4000, 0xe2f: 0x4000, - 0xe30: 0x4000, 0xe31: 0x4000, 0xe32: 0x4000, 0xe33: 0x4000, 0xe34: 0x4000, 0xe35: 0x4000, - 0xe36: 0x4000, 0xe37: 0x4000, 0xe38: 0x4000, 0xe39: 0x4000, 0xe3a: 0x4000, - // Block 0x39, offset 0xe40 - 0xe40: 0x4000, 0xe41: 0x4000, 0xe42: 0x4000, 0xe43: 0x4000, 0xe44: 0x4000, 0xe45: 0x4000, - 0xe46: 0x4000, 0xe47: 0x4000, 0xe48: 0x4000, 0xe49: 0x4000, 0xe4a: 0x4000, 0xe4b: 0x4000, - 0xe4c: 0x4000, 0xe4d: 0x4000, 0xe4e: 0x4000, 0xe4f: 0x4000, 0xe50: 0x4000, 0xe51: 0x4000, - 0xe52: 0x4000, 0xe53: 0x4000, 0xe54: 0x4000, 0xe55: 0x4000, 0xe56: 0x4000, 0xe57: 0x4000, - 0xe58: 0x4000, 0xe59: 0x4000, 0xe5a: 0x4000, 0xe5b: 0x4000, 0xe5c: 0x4000, 0xe5d: 0x4000, - 0xe5e: 0x4000, 0xe5f: 0x4000, 0xe60: 0x4000, 0xe61: 0x4000, 0xe62: 0x4000, 0xe63: 0x4000, - 0xe70: 0x4000, 0xe71: 0x4000, 0xe72: 0x4000, 0xe73: 0x4000, 0xe74: 0x4000, 0xe75: 0x4000, - 0xe76: 0x4000, 0xe77: 0x4000, 0xe78: 0x4000, 0xe79: 0x4000, 0xe7a: 0x4000, 0xe7b: 0x4000, - 0xe7c: 0x4000, 0xe7d: 0x4000, 0xe7e: 0x4000, 0xe7f: 0x4000, - // Block 0x3a, offset 0xe80 - 0xe80: 0x4000, 0xe81: 0x4000, 0xe82: 0x4000, 0xe83: 0x4000, 0xe84: 0x4000, 0xe85: 0x4000, - 0xe86: 0x4000, 0xe87: 0x4000, 0xe88: 0x4000, 0xe89: 0x4000, 0xe8a: 0x4000, 0xe8b: 0x4000, - 0xe8c: 0x4000, 0xe8d: 0x4000, 0xe8e: 0x4000, 0xe8f: 0x4000, 0xe90: 0x4000, 0xe91: 0x4000, - 0xe92: 0x4000, 0xe93: 0x4000, 0xe94: 0x4000, 0xe95: 0x4000, 0xe96: 0x4000, 0xe97: 0x4000, - 0xe98: 0x4000, 0xe99: 0x4000, 0xe9a: 0x4000, 0xe9b: 0x4000, 0xe9c: 0x4000, 0xe9d: 0x4000, - 0xe9e: 0x4000, 0xea0: 0x4000, 0xea1: 0x4000, 0xea2: 0x4000, 0xea3: 0x4000, - 0xea4: 0x4000, 0xea5: 0x4000, 0xea6: 0x4000, 0xea7: 0x4000, 0xea8: 0x4000, 0xea9: 0x4000, - 0xeaa: 0x4000, 0xeab: 0x4000, 0xeac: 0x4000, 0xead: 0x4000, 0xeae: 0x4000, 0xeaf: 0x4000, - 0xeb0: 0x4000, 0xeb1: 0x4000, 0xeb2: 0x4000, 0xeb3: 0x4000, 0xeb4: 0x4000, 0xeb5: 0x4000, - 0xeb6: 0x4000, 0xeb7: 0x4000, 0xeb8: 0x4000, 0xeb9: 0x4000, 0xeba: 0x4000, 0xebb: 0x4000, - 0xebc: 0x4000, 0xebd: 0x4000, 0xebe: 0x4000, 0xebf: 0x4000, - // Block 0x3b, offset 0xec0 - 0xec0: 0x4000, 0xec1: 0x4000, 0xec2: 0x4000, 0xec3: 0x4000, 0xec4: 0x4000, 0xec5: 0x4000, - 0xec6: 0x4000, 0xec7: 0x4000, 0xec8: 0x2000, 0xec9: 0x2000, 0xeca: 0x2000, 0xecb: 0x2000, - 0xecc: 0x2000, 0xecd: 0x2000, 0xece: 0x2000, 0xecf: 0x2000, 0xed0: 0x4000, 0xed1: 0x4000, - 0xed2: 0x4000, 0xed3: 0x4000, 0xed4: 0x4000, 0xed5: 0x4000, 0xed6: 0x4000, 0xed7: 0x4000, - 0xed8: 0x4000, 0xed9: 0x4000, 0xeda: 0x4000, 0xedb: 0x4000, 0xedc: 0x4000, 0xedd: 0x4000, - 0xede: 0x4000, 0xedf: 0x4000, 0xee0: 0x4000, 0xee1: 0x4000, 0xee2: 0x4000, 0xee3: 0x4000, - 0xee4: 0x4000, 0xee5: 0x4000, 0xee6: 0x4000, 0xee7: 0x4000, 0xee8: 0x4000, 0xee9: 0x4000, - 0xeea: 0x4000, 0xeeb: 0x4000, 0xeec: 0x4000, 0xeed: 0x4000, 0xeee: 0x4000, 0xeef: 0x4000, - 0xef0: 0x4000, 0xef1: 0x4000, 0xef2: 0x4000, 0xef3: 0x4000, 0xef4: 0x4000, 0xef5: 0x4000, - 0xef6: 0x4000, 0xef7: 0x4000, 0xef8: 0x4000, 0xef9: 0x4000, 0xefa: 0x4000, 0xefb: 0x4000, - 0xefc: 0x4000, 0xefd: 0x4000, 0xefe: 0x4000, 0xeff: 0x4000, - // Block 0x3c, offset 0xf00 - 0xf00: 0x4000, 0xf01: 0x4000, 0xf02: 0x4000, 0xf03: 0x4000, 0xf04: 0x4000, 0xf05: 0x4000, - 0xf06: 0x4000, 0xf07: 0x4000, 0xf08: 0x4000, 0xf09: 0x4000, 0xf0a: 0x4000, 0xf0b: 0x4000, - 0xf0c: 0x4000, 0xf0d: 0x4000, 0xf0e: 0x4000, 0xf0f: 0x4000, 0xf10: 0x4000, 0xf11: 0x4000, - 0xf12: 0x4000, 0xf13: 0x4000, 0xf14: 0x4000, 0xf15: 0x4000, 0xf16: 0x4000, 0xf17: 0x4000, - 0xf18: 0x4000, 0xf19: 0x4000, 0xf1a: 0x4000, 0xf1b: 0x4000, 0xf1c: 0x4000, 0xf1d: 0x4000, - 0xf1e: 0x4000, 0xf1f: 0x4000, 0xf20: 0x4000, 0xf21: 0x4000, 0xf22: 0x4000, 0xf23: 0x4000, - 0xf24: 0x4000, 0xf25: 0x4000, 0xf26: 0x4000, 0xf27: 0x4000, 0xf28: 0x4000, 0xf29: 0x4000, - 0xf2a: 0x4000, 0xf2b: 0x4000, 0xf2c: 0x4000, 0xf2d: 0x4000, 0xf2e: 0x4000, 0xf2f: 0x4000, - 0xf30: 0x4000, 0xf31: 0x4000, 0xf32: 0x4000, 0xf33: 0x4000, 0xf34: 0x4000, 0xf35: 0x4000, - 0xf36: 0x4000, 0xf37: 0x4000, 0xf38: 0x4000, 0xf39: 0x4000, 0xf3a: 0x4000, 0xf3b: 0x4000, - 0xf3c: 0x4000, 0xf3d: 0x4000, 0xf3e: 0x4000, - // Block 0x3d, offset 0xf40 - 0xf40: 0x4000, 0xf41: 0x4000, 0xf42: 0x4000, 0xf43: 0x4000, 0xf44: 0x4000, 0xf45: 0x4000, - 0xf46: 0x4000, 0xf47: 0x4000, 0xf48: 0x4000, 0xf49: 0x4000, 0xf4a: 0x4000, 0xf4b: 0x4000, - 0xf4c: 0x4000, 0xf50: 0x4000, 0xf51: 0x4000, - 0xf52: 0x4000, 0xf53: 0x4000, 0xf54: 0x4000, 0xf55: 0x4000, 0xf56: 0x4000, 0xf57: 0x4000, - 0xf58: 0x4000, 0xf59: 0x4000, 0xf5a: 0x4000, 0xf5b: 0x4000, 0xf5c: 0x4000, 0xf5d: 0x4000, - 0xf5e: 0x4000, 0xf5f: 0x4000, 0xf60: 0x4000, 0xf61: 0x4000, 0xf62: 0x4000, 0xf63: 0x4000, - 0xf64: 0x4000, 0xf65: 0x4000, 0xf66: 0x4000, 0xf67: 0x4000, 0xf68: 0x4000, 0xf69: 0x4000, - 0xf6a: 0x4000, 0xf6b: 0x4000, 0xf6c: 0x4000, 0xf6d: 0x4000, 0xf6e: 0x4000, 0xf6f: 0x4000, - 0xf70: 0x4000, 0xf71: 0x4000, 0xf72: 0x4000, 0xf73: 0x4000, 0xf74: 0x4000, 0xf75: 0x4000, - 0xf76: 0x4000, 0xf77: 0x4000, 0xf78: 0x4000, 0xf79: 0x4000, 0xf7a: 0x4000, 0xf7b: 0x4000, - 0xf7c: 0x4000, 0xf7d: 0x4000, 0xf7e: 0x4000, 0xf7f: 0x4000, - // Block 0x3e, offset 0xf80 - 0xf80: 0x4000, 0xf81: 0x4000, 0xf82: 0x4000, 0xf83: 0x4000, 0xf84: 0x4000, 0xf85: 0x4000, - 0xf86: 0x4000, - // Block 0x3f, offset 0xfc0 - 0xfe0: 0x4000, 0xfe1: 0x4000, 0xfe2: 0x4000, 0xfe3: 0x4000, - 0xfe4: 0x4000, 0xfe5: 0x4000, 0xfe6: 0x4000, 0xfe7: 0x4000, 0xfe8: 0x4000, 0xfe9: 0x4000, - 0xfea: 0x4000, 0xfeb: 0x4000, 0xfec: 0x4000, 0xfed: 0x4000, 0xfee: 0x4000, 0xfef: 0x4000, - 0xff0: 0x4000, 0xff1: 0x4000, 0xff2: 0x4000, 0xff3: 0x4000, 0xff4: 0x4000, 0xff5: 0x4000, - 0xff6: 0x4000, 0xff7: 0x4000, 0xff8: 0x4000, 0xff9: 0x4000, 0xffa: 0x4000, 0xffb: 0x4000, - 0xffc: 0x4000, - // Block 0x40, offset 0x1000 - 0x1000: 0x4000, 0x1001: 0x4000, 0x1002: 0x4000, 0x1003: 0x4000, 0x1004: 0x4000, 0x1005: 0x4000, - 0x1006: 0x4000, 0x1007: 0x4000, 0x1008: 0x4000, 0x1009: 0x4000, 0x100a: 0x4000, 0x100b: 0x4000, - 0x100c: 0x4000, 0x100d: 0x4000, 0x100e: 0x4000, 0x100f: 0x4000, 0x1010: 0x4000, 0x1011: 0x4000, - 0x1012: 0x4000, 0x1013: 0x4000, 0x1014: 0x4000, 0x1015: 0x4000, 0x1016: 0x4000, 0x1017: 0x4000, - 0x1018: 0x4000, 0x1019: 0x4000, 0x101a: 0x4000, 0x101b: 0x4000, 0x101c: 0x4000, 0x101d: 0x4000, - 0x101e: 0x4000, 0x101f: 0x4000, 0x1020: 0x4000, 0x1021: 0x4000, 0x1022: 0x4000, 0x1023: 0x4000, - // Block 0x41, offset 0x1040 - 0x1040: 0x2000, 0x1041: 0x2000, 0x1042: 0x2000, 0x1043: 0x2000, 0x1044: 0x2000, 0x1045: 0x2000, - 0x1046: 0x2000, 0x1047: 0x2000, 0x1048: 0x2000, 0x1049: 0x2000, 0x104a: 0x2000, 0x104b: 0x2000, - 0x104c: 0x2000, 0x104d: 0x2000, 0x104e: 0x2000, 0x104f: 0x2000, 0x1050: 0x4000, 0x1051: 0x4000, - 0x1052: 0x4000, 0x1053: 0x4000, 0x1054: 0x4000, 0x1055: 0x4000, 0x1056: 0x4000, 0x1057: 0x4000, - 0x1058: 0x4000, 0x1059: 0x4000, - 0x1070: 0x4000, 0x1071: 0x4000, 0x1072: 0x4000, 0x1073: 0x4000, 0x1074: 0x4000, 0x1075: 0x4000, - 0x1076: 0x4000, 0x1077: 0x4000, 0x1078: 0x4000, 0x1079: 0x4000, 0x107a: 0x4000, 0x107b: 0x4000, - 0x107c: 0x4000, 0x107d: 0x4000, 0x107e: 0x4000, 0x107f: 0x4000, - // Block 0x42, offset 0x1080 - 0x1080: 0x4000, 0x1081: 0x4000, 0x1082: 0x4000, 0x1083: 0x4000, 0x1084: 0x4000, 0x1085: 0x4000, - 0x1086: 0x4000, 0x1087: 0x4000, 0x1088: 0x4000, 0x1089: 0x4000, 0x108a: 0x4000, 0x108b: 0x4000, - 0x108c: 0x4000, 0x108d: 0x4000, 0x108e: 0x4000, 0x108f: 0x4000, 0x1090: 0x4000, 0x1091: 0x4000, - 0x1092: 0x4000, 0x1094: 0x4000, 0x1095: 0x4000, 0x1096: 0x4000, 0x1097: 0x4000, - 0x1098: 0x4000, 0x1099: 0x4000, 0x109a: 0x4000, 0x109b: 0x4000, 0x109c: 0x4000, 0x109d: 0x4000, - 0x109e: 0x4000, 0x109f: 0x4000, 0x10a0: 0x4000, 0x10a1: 0x4000, 0x10a2: 0x4000, 0x10a3: 0x4000, - 0x10a4: 0x4000, 0x10a5: 0x4000, 0x10a6: 0x4000, 0x10a8: 0x4000, 0x10a9: 0x4000, - 0x10aa: 0x4000, 0x10ab: 0x4000, - // Block 0x43, offset 0x10c0 - 0x10c1: 0x9012, 0x10c2: 0x9012, 0x10c3: 0x9012, 0x10c4: 0x9012, 0x10c5: 0x9012, - 0x10c6: 0x9012, 0x10c7: 0x9012, 0x10c8: 0x9012, 0x10c9: 0x9012, 0x10ca: 0x9012, 0x10cb: 0x9012, - 0x10cc: 0x9012, 0x10cd: 0x9012, 0x10ce: 0x9012, 0x10cf: 0x9012, 0x10d0: 0x9012, 0x10d1: 0x9012, - 0x10d2: 0x9012, 0x10d3: 0x9012, 0x10d4: 0x9012, 0x10d5: 0x9012, 0x10d6: 0x9012, 0x10d7: 0x9012, - 0x10d8: 0x9012, 0x10d9: 0x9012, 0x10da: 0x9012, 0x10db: 0x9012, 0x10dc: 0x9012, 0x10dd: 0x9012, - 0x10de: 0x9012, 0x10df: 0x9012, 0x10e0: 0x9049, 0x10e1: 0x9049, 0x10e2: 0x9049, 0x10e3: 0x9049, - 0x10e4: 0x9049, 0x10e5: 0x9049, 0x10e6: 0x9049, 0x10e7: 0x9049, 0x10e8: 0x9049, 0x10e9: 0x9049, - 0x10ea: 0x9049, 0x10eb: 0x9049, 0x10ec: 0x9049, 0x10ed: 0x9049, 0x10ee: 0x9049, 0x10ef: 0x9049, - 0x10f0: 0x9049, 0x10f1: 0x9049, 0x10f2: 0x9049, 0x10f3: 0x9049, 0x10f4: 0x9049, 0x10f5: 0x9049, - 0x10f6: 0x9049, 0x10f7: 0x9049, 0x10f8: 0x9049, 0x10f9: 0x9049, 0x10fa: 0x9049, 0x10fb: 0x9049, - 0x10fc: 0x9049, 0x10fd: 0x9049, 0x10fe: 0x9049, 0x10ff: 0x9049, - // Block 0x44, offset 0x1100 - 0x1100: 0x9049, 0x1101: 0x9049, 0x1102: 0x9049, 0x1103: 0x9049, 0x1104: 0x9049, 0x1105: 0x9049, - 0x1106: 0x9049, 0x1107: 0x9049, 0x1108: 0x9049, 0x1109: 0x9049, 0x110a: 0x9049, 0x110b: 0x9049, - 0x110c: 0x9049, 0x110d: 0x9049, 0x110e: 0x9049, 0x110f: 0x9049, 0x1110: 0x9049, 0x1111: 0x9049, - 0x1112: 0x9049, 0x1113: 0x9049, 0x1114: 0x9049, 0x1115: 0x9049, 0x1116: 0x9049, 0x1117: 0x9049, - 0x1118: 0x9049, 0x1119: 0x9049, 0x111a: 0x9049, 0x111b: 0x9049, 0x111c: 0x9049, 0x111d: 0x9049, - 0x111e: 0x9049, 0x111f: 0x904a, 0x1120: 0x904b, 0x1121: 0xb04c, 0x1122: 0xb04d, 0x1123: 0xb04d, - 0x1124: 0xb04e, 0x1125: 0xb04f, 0x1126: 0xb050, 0x1127: 0xb051, 0x1128: 0xb052, 0x1129: 0xb053, - 0x112a: 0xb054, 0x112b: 0xb055, 0x112c: 0xb056, 0x112d: 0xb057, 0x112e: 0xb058, 0x112f: 0xb059, - 0x1130: 0xb05a, 0x1131: 0xb05b, 0x1132: 0xb05c, 0x1133: 0xb05d, 0x1134: 0xb05e, 0x1135: 0xb05f, - 0x1136: 0xb060, 0x1137: 0xb061, 0x1138: 0xb062, 0x1139: 0xb063, 0x113a: 0xb064, 0x113b: 0xb065, - 0x113c: 0xb052, 0x113d: 0xb066, 0x113e: 0xb067, 0x113f: 0xb055, - // Block 0x45, offset 0x1140 - 0x1140: 0xb068, 0x1141: 0xb069, 0x1142: 0xb06a, 0x1143: 0xb06b, 0x1144: 0xb05a, 0x1145: 0xb056, - 0x1146: 0xb06c, 0x1147: 0xb06d, 0x1148: 0xb06b, 0x1149: 0xb06e, 0x114a: 0xb06b, 0x114b: 0xb06f, - 0x114c: 0xb06f, 0x114d: 0xb070, 0x114e: 0xb070, 0x114f: 0xb071, 0x1150: 0xb056, 0x1151: 0xb072, - 0x1152: 0xb073, 0x1153: 0xb072, 0x1154: 0xb074, 0x1155: 0xb073, 0x1156: 0xb075, 0x1157: 0xb075, - 0x1158: 0xb076, 0x1159: 0xb076, 0x115a: 0xb077, 0x115b: 0xb077, 0x115c: 0xb073, 0x115d: 0xb078, - 0x115e: 0xb079, 0x115f: 0xb067, 0x1160: 0xb07a, 0x1161: 0xb07b, 0x1162: 0xb07b, 0x1163: 0xb07b, - 0x1164: 0xb07b, 0x1165: 0xb07b, 0x1166: 0xb07b, 0x1167: 0xb07b, 0x1168: 0xb07b, 0x1169: 0xb07b, - 0x116a: 0xb07b, 0x116b: 0xb07b, 0x116c: 0xb07b, 0x116d: 0xb07b, 0x116e: 0xb07b, 0x116f: 0xb07b, - 0x1170: 0xb07c, 0x1171: 0xb07c, 0x1172: 0xb07c, 0x1173: 0xb07c, 0x1174: 0xb07c, 0x1175: 0xb07c, - 0x1176: 0xb07c, 0x1177: 0xb07c, 0x1178: 0xb07c, 0x1179: 0xb07c, 0x117a: 0xb07c, 0x117b: 0xb07c, - 0x117c: 0xb07c, 0x117d: 0xb07c, 0x117e: 0xb07c, - // Block 0x46, offset 0x1180 - 0x1182: 0xb07d, 0x1183: 0xb07e, 0x1184: 0xb07f, 0x1185: 0xb080, - 0x1186: 0xb07f, 0x1187: 0xb07e, 0x118a: 0xb081, 0x118b: 0xb082, - 0x118c: 0xb083, 0x118d: 0xb07f, 0x118e: 0xb080, 0x118f: 0xb07f, - 0x1192: 0xb084, 0x1193: 0xb085, 0x1194: 0xb084, 0x1195: 0xb086, 0x1196: 0xb084, 0x1197: 0xb087, - 0x119a: 0xb088, 0x119b: 0xb089, 0x119c: 0xb08a, - 0x11a0: 0x908b, 0x11a1: 0x908b, 0x11a2: 0x908c, 0x11a3: 0x908d, - 0x11a4: 0x908b, 0x11a5: 0x908e, 0x11a6: 0x908f, 0x11a8: 0xb090, 0x11a9: 0xb091, - 0x11aa: 0xb092, 0x11ab: 0xb091, 0x11ac: 0xb093, 0x11ad: 0xb094, 0x11ae: 0xb095, - 0x11bd: 0x2000, - // Block 0x47, offset 0x11c0 - 0x11e0: 0x4000, 0x11e1: 0x4000, - // Block 0x48, offset 0x1200 - 0x1200: 0x4000, 0x1201: 0x4000, 0x1202: 0x4000, 0x1203: 0x4000, 0x1204: 0x4000, 0x1205: 0x4000, - 0x1206: 0x4000, 0x1207: 0x4000, 0x1208: 0x4000, 0x1209: 0x4000, 0x120a: 0x4000, 0x120b: 0x4000, - 0x120c: 0x4000, 0x120d: 0x4000, 0x120e: 0x4000, 0x120f: 0x4000, 0x1210: 0x4000, 0x1211: 0x4000, - 0x1212: 0x4000, 0x1213: 0x4000, 0x1214: 0x4000, 0x1215: 0x4000, 0x1216: 0x4000, 0x1217: 0x4000, - 0x1218: 0x4000, 0x1219: 0x4000, 0x121a: 0x4000, 0x121b: 0x4000, 0x121c: 0x4000, 0x121d: 0x4000, - 0x121e: 0x4000, 0x121f: 0x4000, 0x1220: 0x4000, 0x1221: 0x4000, 0x1222: 0x4000, 0x1223: 0x4000, - 0x1224: 0x4000, 0x1225: 0x4000, 0x1226: 0x4000, 0x1227: 0x4000, 0x1228: 0x4000, 0x1229: 0x4000, - 0x122a: 0x4000, 0x122b: 0x4000, 0x122c: 0x4000, 0x122d: 0x4000, 0x122e: 0x4000, 0x122f: 0x4000, - 0x1230: 0x4000, 0x1231: 0x4000, - // Block 0x49, offset 0x1240 - 0x1240: 0x4000, 0x1241: 0x4000, 0x1242: 0x4000, 0x1243: 0x4000, 0x1244: 0x4000, 0x1245: 0x4000, - 0x1246: 0x4000, 0x1247: 0x4000, 0x1248: 0x4000, 0x1249: 0x4000, 0x124a: 0x4000, 0x124b: 0x4000, - 0x124c: 0x4000, 0x124d: 0x4000, 0x124e: 0x4000, 0x124f: 0x4000, 0x1250: 0x4000, 0x1251: 0x4000, - 0x1252: 0x4000, 0x1253: 0x4000, 0x1254: 0x4000, 0x1255: 0x4000, 0x1256: 0x4000, 0x1257: 0x4000, - 0x1258: 0x4000, 0x1259: 0x4000, 0x125a: 0x4000, 0x125b: 0x4000, 0x125c: 0x4000, 0x125d: 0x4000, - 0x125e: 0x4000, 0x125f: 0x4000, 0x1260: 0x4000, 0x1261: 0x4000, 0x1262: 0x4000, 0x1263: 0x4000, - 0x1264: 0x4000, 0x1265: 0x4000, 0x1266: 0x4000, 0x1267: 0x4000, 0x1268: 0x4000, 0x1269: 0x4000, - 0x126a: 0x4000, 0x126b: 0x4000, 0x126c: 0x4000, 0x126d: 0x4000, 0x126e: 0x4000, 0x126f: 0x4000, - 0x1270: 0x4000, 0x1271: 0x4000, 0x1272: 0x4000, - // Block 0x4a, offset 0x1280 - 0x1280: 0x4000, 0x1281: 0x4000, 0x1282: 0x4000, 0x1283: 0x4000, 0x1284: 0x4000, 0x1285: 0x4000, - 0x1286: 0x4000, 0x1287: 0x4000, 0x1288: 0x4000, 0x1289: 0x4000, 0x128a: 0x4000, 0x128b: 0x4000, - 0x128c: 0x4000, 0x128d: 0x4000, 0x128e: 0x4000, 0x128f: 0x4000, 0x1290: 0x4000, 0x1291: 0x4000, - 0x1292: 0x4000, 0x1293: 0x4000, 0x1294: 0x4000, 0x1295: 0x4000, 0x1296: 0x4000, 0x1297: 0x4000, - 0x1298: 0x4000, 0x1299: 0x4000, 0x129a: 0x4000, 0x129b: 0x4000, 0x129c: 0x4000, 0x129d: 0x4000, - 0x129e: 0x4000, - // Block 0x4b, offset 0x12c0 - 0x12f0: 0x4000, 0x12f1: 0x4000, 0x12f2: 0x4000, 0x12f3: 0x4000, 0x12f4: 0x4000, 0x12f5: 0x4000, - 0x12f6: 0x4000, 0x12f7: 0x4000, 0x12f8: 0x4000, 0x12f9: 0x4000, 0x12fa: 0x4000, 0x12fb: 0x4000, - 0x12fc: 0x4000, 0x12fd: 0x4000, 0x12fe: 0x4000, 0x12ff: 0x4000, - // Block 0x4c, offset 0x1300 - 0x1300: 0x4000, 0x1301: 0x4000, 0x1302: 0x4000, 0x1303: 0x4000, 0x1304: 0x4000, 0x1305: 0x4000, - 0x1306: 0x4000, 0x1307: 0x4000, 0x1308: 0x4000, 0x1309: 0x4000, 0x130a: 0x4000, 0x130b: 0x4000, - 0x130c: 0x4000, 0x130d: 0x4000, 0x130e: 0x4000, 0x130f: 0x4000, 0x1310: 0x4000, 0x1311: 0x4000, - 0x1312: 0x4000, 0x1313: 0x4000, 0x1314: 0x4000, 0x1315: 0x4000, 0x1316: 0x4000, 0x1317: 0x4000, - 0x1318: 0x4000, 0x1319: 0x4000, 0x131a: 0x4000, 0x131b: 0x4000, 0x131c: 0x4000, 0x131d: 0x4000, - 0x131e: 0x4000, 0x131f: 0x4000, 0x1320: 0x4000, 0x1321: 0x4000, 0x1322: 0x4000, 0x1323: 0x4000, - 0x1324: 0x4000, 0x1325: 0x4000, 0x1326: 0x4000, 0x1327: 0x4000, 0x1328: 0x4000, 0x1329: 0x4000, - 0x132a: 0x4000, 0x132b: 0x4000, 0x132c: 0x4000, 0x132d: 0x4000, 0x132e: 0x4000, 0x132f: 0x4000, - 0x1330: 0x4000, 0x1331: 0x4000, 0x1332: 0x4000, 0x1333: 0x4000, 0x1334: 0x4000, 0x1335: 0x4000, - 0x1336: 0x4000, 0x1337: 0x4000, 0x1338: 0x4000, 0x1339: 0x4000, 0x133a: 0x4000, 0x133b: 0x4000, - // Block 0x4d, offset 0x1340 - 0x1344: 0x4000, - // Block 0x4e, offset 0x1380 - 0x138f: 0x4000, - // Block 0x4f, offset 0x13c0 - 0x13c0: 0x2000, 0x13c1: 0x2000, 0x13c2: 0x2000, 0x13c3: 0x2000, 0x13c4: 0x2000, 0x13c5: 0x2000, - 0x13c6: 0x2000, 0x13c7: 0x2000, 0x13c8: 0x2000, 0x13c9: 0x2000, 0x13ca: 0x2000, - 0x13d0: 0x2000, 0x13d1: 0x2000, - 0x13d2: 0x2000, 0x13d3: 0x2000, 0x13d4: 0x2000, 0x13d5: 0x2000, 0x13d6: 0x2000, 0x13d7: 0x2000, - 0x13d8: 0x2000, 0x13d9: 0x2000, 0x13da: 0x2000, 0x13db: 0x2000, 0x13dc: 0x2000, 0x13dd: 0x2000, - 0x13de: 0x2000, 0x13df: 0x2000, 0x13e0: 0x2000, 0x13e1: 0x2000, 0x13e2: 0x2000, 0x13e3: 0x2000, - 0x13e4: 0x2000, 0x13e5: 0x2000, 0x13e6: 0x2000, 0x13e7: 0x2000, 0x13e8: 0x2000, 0x13e9: 0x2000, - 0x13ea: 0x2000, 0x13eb: 0x2000, 0x13ec: 0x2000, 0x13ed: 0x2000, - 0x13f0: 0x2000, 0x13f1: 0x2000, 0x13f2: 0x2000, 0x13f3: 0x2000, 0x13f4: 0x2000, 0x13f5: 0x2000, - 0x13f6: 0x2000, 0x13f7: 0x2000, 0x13f8: 0x2000, 0x13f9: 0x2000, 0x13fa: 0x2000, 0x13fb: 0x2000, - 0x13fc: 0x2000, 0x13fd: 0x2000, 0x13fe: 0x2000, 0x13ff: 0x2000, - // Block 0x50, offset 0x1400 - 0x1400: 0x2000, 0x1401: 0x2000, 0x1402: 0x2000, 0x1403: 0x2000, 0x1404: 0x2000, 0x1405: 0x2000, - 0x1406: 0x2000, 0x1407: 0x2000, 0x1408: 0x2000, 0x1409: 0x2000, 0x140a: 0x2000, 0x140b: 0x2000, - 0x140c: 0x2000, 0x140d: 0x2000, 0x140e: 0x2000, 0x140f: 0x2000, 0x1410: 0x2000, 0x1411: 0x2000, - 0x1412: 0x2000, 0x1413: 0x2000, 0x1414: 0x2000, 0x1415: 0x2000, 0x1416: 0x2000, 0x1417: 0x2000, - 0x1418: 0x2000, 0x1419: 0x2000, 0x141a: 0x2000, 0x141b: 0x2000, 0x141c: 0x2000, 0x141d: 0x2000, - 0x141e: 0x2000, 0x141f: 0x2000, 0x1420: 0x2000, 0x1421: 0x2000, 0x1422: 0x2000, 0x1423: 0x2000, - 0x1424: 0x2000, 0x1425: 0x2000, 0x1426: 0x2000, 0x1427: 0x2000, 0x1428: 0x2000, 0x1429: 0x2000, - 0x1430: 0x2000, 0x1431: 0x2000, 0x1432: 0x2000, 0x1433: 0x2000, 0x1434: 0x2000, 0x1435: 0x2000, - 0x1436: 0x2000, 0x1437: 0x2000, 0x1438: 0x2000, 0x1439: 0x2000, 0x143a: 0x2000, 0x143b: 0x2000, - 0x143c: 0x2000, 0x143d: 0x2000, 0x143e: 0x2000, 0x143f: 0x2000, - // Block 0x51, offset 0x1440 - 0x1440: 0x2000, 0x1441: 0x2000, 0x1442: 0x2000, 0x1443: 0x2000, 0x1444: 0x2000, 0x1445: 0x2000, - 0x1446: 0x2000, 0x1447: 0x2000, 0x1448: 0x2000, 0x1449: 0x2000, 0x144a: 0x2000, 0x144b: 0x2000, - 0x144c: 0x2000, 0x144d: 0x2000, 0x144e: 0x4000, 0x144f: 0x2000, 0x1450: 0x2000, 0x1451: 0x4000, - 0x1452: 0x4000, 0x1453: 0x4000, 0x1454: 0x4000, 0x1455: 0x4000, 0x1456: 0x4000, 0x1457: 0x4000, - 0x1458: 0x4000, 0x1459: 0x4000, 0x145a: 0x4000, 0x145b: 0x2000, 0x145c: 0x2000, 0x145d: 0x2000, - 0x145e: 0x2000, 0x145f: 0x2000, 0x1460: 0x2000, 0x1461: 0x2000, 0x1462: 0x2000, 0x1463: 0x2000, - 0x1464: 0x2000, 0x1465: 0x2000, 0x1466: 0x2000, 0x1467: 0x2000, 0x1468: 0x2000, 0x1469: 0x2000, - 0x146a: 0x2000, 0x146b: 0x2000, 0x146c: 0x2000, - // Block 0x52, offset 0x1480 - 0x1480: 0x4000, 0x1481: 0x4000, 0x1482: 0x4000, - 0x1490: 0x4000, 0x1491: 0x4000, - 0x1492: 0x4000, 0x1493: 0x4000, 0x1494: 0x4000, 0x1495: 0x4000, 0x1496: 0x4000, 0x1497: 0x4000, - 0x1498: 0x4000, 0x1499: 0x4000, 0x149a: 0x4000, 0x149b: 0x4000, 0x149c: 0x4000, 0x149d: 0x4000, - 0x149e: 0x4000, 0x149f: 0x4000, 0x14a0: 0x4000, 0x14a1: 0x4000, 0x14a2: 0x4000, 0x14a3: 0x4000, - 0x14a4: 0x4000, 0x14a5: 0x4000, 0x14a6: 0x4000, 0x14a7: 0x4000, 0x14a8: 0x4000, 0x14a9: 0x4000, - 0x14aa: 0x4000, 0x14ab: 0x4000, 0x14ac: 0x4000, 0x14ad: 0x4000, 0x14ae: 0x4000, 0x14af: 0x4000, - 0x14b0: 0x4000, 0x14b1: 0x4000, 0x14b2: 0x4000, 0x14b3: 0x4000, 0x14b4: 0x4000, 0x14b5: 0x4000, - 0x14b6: 0x4000, 0x14b7: 0x4000, 0x14b8: 0x4000, 0x14b9: 0x4000, 0x14ba: 0x4000, 0x14bb: 0x4000, - // Block 0x53, offset 0x14c0 - 0x14c0: 0x4000, 0x14c1: 0x4000, 0x14c2: 0x4000, 0x14c3: 0x4000, 0x14c4: 0x4000, 0x14c5: 0x4000, - 0x14c6: 0x4000, 0x14c7: 0x4000, 0x14c8: 0x4000, - 0x14d0: 0x4000, 0x14d1: 0x4000, - 0x14e0: 0x4000, 0x14e1: 0x4000, 0x14e2: 0x4000, 0x14e3: 0x4000, - 0x14e4: 0x4000, 0x14e5: 0x4000, - // Block 0x54, offset 0x1500 - 0x1500: 0x4000, 0x1501: 0x4000, 0x1502: 0x4000, 0x1503: 0x4000, 0x1504: 0x4000, 0x1505: 0x4000, - 0x1506: 0x4000, 0x1507: 0x4000, 0x1508: 0x4000, 0x1509: 0x4000, 0x150a: 0x4000, 0x150b: 0x4000, - 0x150c: 0x4000, 0x150d: 0x4000, 0x150e: 0x4000, 0x150f: 0x4000, 0x1510: 0x4000, 0x1511: 0x4000, - 0x1512: 0x4000, 0x1513: 0x4000, 0x1514: 0x4000, 0x1515: 0x4000, 0x1516: 0x4000, 0x1517: 0x4000, - 0x1518: 0x4000, 0x1519: 0x4000, 0x151a: 0x4000, 0x151b: 0x4000, 0x151c: 0x4000, 0x151d: 0x4000, - 0x151e: 0x4000, 0x151f: 0x4000, 0x1520: 0x4000, - 0x152d: 0x4000, 0x152e: 0x4000, 0x152f: 0x4000, - 0x1530: 0x4000, 0x1531: 0x4000, 0x1532: 0x4000, 0x1533: 0x4000, 0x1534: 0x4000, 0x1535: 0x4000, - 0x1537: 0x4000, 0x1538: 0x4000, 0x1539: 0x4000, 0x153a: 0x4000, 0x153b: 0x4000, - 0x153c: 0x4000, 0x153d: 0x4000, 0x153e: 0x4000, 0x153f: 0x4000, - // Block 0x55, offset 0x1540 - 0x1540: 0x4000, 0x1541: 0x4000, 0x1542: 0x4000, 0x1543: 0x4000, 0x1544: 0x4000, 0x1545: 0x4000, - 0x1546: 0x4000, 0x1547: 0x4000, 0x1548: 0x4000, 0x1549: 0x4000, 0x154a: 0x4000, 0x154b: 0x4000, - 0x154c: 0x4000, 0x154d: 0x4000, 0x154e: 0x4000, 0x154f: 0x4000, 0x1550: 0x4000, 0x1551: 0x4000, - 0x1552: 0x4000, 0x1553: 0x4000, 0x1554: 0x4000, 0x1555: 0x4000, 0x1556: 0x4000, 0x1557: 0x4000, - 0x1558: 0x4000, 0x1559: 0x4000, 0x155a: 0x4000, 0x155b: 0x4000, 0x155c: 0x4000, 0x155d: 0x4000, - 0x155e: 0x4000, 0x155f: 0x4000, 0x1560: 0x4000, 0x1561: 0x4000, 0x1562: 0x4000, 0x1563: 0x4000, - 0x1564: 0x4000, 0x1565: 0x4000, 0x1566: 0x4000, 0x1567: 0x4000, 0x1568: 0x4000, 0x1569: 0x4000, - 0x156a: 0x4000, 0x156b: 0x4000, 0x156c: 0x4000, 0x156d: 0x4000, 0x156e: 0x4000, 0x156f: 0x4000, - 0x1570: 0x4000, 0x1571: 0x4000, 0x1572: 0x4000, 0x1573: 0x4000, 0x1574: 0x4000, 0x1575: 0x4000, - 0x1576: 0x4000, 0x1577: 0x4000, 0x1578: 0x4000, 0x1579: 0x4000, 0x157a: 0x4000, 0x157b: 0x4000, - 0x157c: 0x4000, 0x157e: 0x4000, 0x157f: 0x4000, - // Block 0x56, offset 0x1580 - 0x1580: 0x4000, 0x1581: 0x4000, 0x1582: 0x4000, 0x1583: 0x4000, 0x1584: 0x4000, 0x1585: 0x4000, - 0x1586: 0x4000, 0x1587: 0x4000, 0x1588: 0x4000, 0x1589: 0x4000, 0x158a: 0x4000, 0x158b: 0x4000, - 0x158c: 0x4000, 0x158d: 0x4000, 0x158e: 0x4000, 0x158f: 0x4000, 0x1590: 0x4000, 0x1591: 0x4000, - 0x1592: 0x4000, 0x1593: 0x4000, - 0x15a0: 0x4000, 0x15a1: 0x4000, 0x15a2: 0x4000, 0x15a3: 0x4000, - 0x15a4: 0x4000, 0x15a5: 0x4000, 0x15a6: 0x4000, 0x15a7: 0x4000, 0x15a8: 0x4000, 0x15a9: 0x4000, - 0x15aa: 0x4000, 0x15ab: 0x4000, 0x15ac: 0x4000, 0x15ad: 0x4000, 0x15ae: 0x4000, 0x15af: 0x4000, - 0x15b0: 0x4000, 0x15b1: 0x4000, 0x15b2: 0x4000, 0x15b3: 0x4000, 0x15b4: 0x4000, 0x15b5: 0x4000, - 0x15b6: 0x4000, 0x15b7: 0x4000, 0x15b8: 0x4000, 0x15b9: 0x4000, 0x15ba: 0x4000, 0x15bb: 0x4000, - 0x15bc: 0x4000, 0x15bd: 0x4000, 0x15be: 0x4000, 0x15bf: 0x4000, - // Block 0x57, offset 0x15c0 - 0x15c0: 0x4000, 0x15c1: 0x4000, 0x15c2: 0x4000, 0x15c3: 0x4000, 0x15c4: 0x4000, 0x15c5: 0x4000, - 0x15c6: 0x4000, 0x15c7: 0x4000, 0x15c8: 0x4000, 0x15c9: 0x4000, 0x15ca: 0x4000, - 0x15cf: 0x4000, 0x15d0: 0x4000, 0x15d1: 0x4000, - 0x15d2: 0x4000, 0x15d3: 0x4000, - 0x15e0: 0x4000, 0x15e1: 0x4000, 0x15e2: 0x4000, 0x15e3: 0x4000, - 0x15e4: 0x4000, 0x15e5: 0x4000, 0x15e6: 0x4000, 0x15e7: 0x4000, 0x15e8: 0x4000, 0x15e9: 0x4000, - 0x15ea: 0x4000, 0x15eb: 0x4000, 0x15ec: 0x4000, 0x15ed: 0x4000, 0x15ee: 0x4000, 0x15ef: 0x4000, - 0x15f0: 0x4000, 0x15f4: 0x4000, - 0x15f8: 0x4000, 0x15f9: 0x4000, 0x15fa: 0x4000, 0x15fb: 0x4000, - 0x15fc: 0x4000, 0x15fd: 0x4000, 0x15fe: 0x4000, 0x15ff: 0x4000, - // Block 0x58, offset 0x1600 - 0x1600: 0x4000, 0x1602: 0x4000, 0x1603: 0x4000, 0x1604: 0x4000, 0x1605: 0x4000, - 0x1606: 0x4000, 0x1607: 0x4000, 0x1608: 0x4000, 0x1609: 0x4000, 0x160a: 0x4000, 0x160b: 0x4000, - 0x160c: 0x4000, 0x160d: 0x4000, 0x160e: 0x4000, 0x160f: 0x4000, 0x1610: 0x4000, 0x1611: 0x4000, - 0x1612: 0x4000, 0x1613: 0x4000, 0x1614: 0x4000, 0x1615: 0x4000, 0x1616: 0x4000, 0x1617: 0x4000, - 0x1618: 0x4000, 0x1619: 0x4000, 0x161a: 0x4000, 0x161b: 0x4000, 0x161c: 0x4000, 0x161d: 0x4000, - 0x161e: 0x4000, 0x161f: 0x4000, 0x1620: 0x4000, 0x1621: 0x4000, 0x1622: 0x4000, 0x1623: 0x4000, - 0x1624: 0x4000, 0x1625: 0x4000, 0x1626: 0x4000, 0x1627: 0x4000, 0x1628: 0x4000, 0x1629: 0x4000, - 0x162a: 0x4000, 0x162b: 0x4000, 0x162c: 0x4000, 0x162d: 0x4000, 0x162e: 0x4000, 0x162f: 0x4000, - 0x1630: 0x4000, 0x1631: 0x4000, 0x1632: 0x4000, 0x1633: 0x4000, 0x1634: 0x4000, 0x1635: 0x4000, - 0x1636: 0x4000, 0x1637: 0x4000, 0x1638: 0x4000, 0x1639: 0x4000, 0x163a: 0x4000, 0x163b: 0x4000, - 0x163c: 0x4000, 0x163d: 0x4000, 0x163e: 0x4000, 0x163f: 0x4000, - // Block 0x59, offset 0x1640 - 0x1640: 0x4000, 0x1641: 0x4000, 0x1642: 0x4000, 0x1643: 0x4000, 0x1644: 0x4000, 0x1645: 0x4000, - 0x1646: 0x4000, 0x1647: 0x4000, 0x1648: 0x4000, 0x1649: 0x4000, 0x164a: 0x4000, 0x164b: 0x4000, - 0x164c: 0x4000, 0x164d: 0x4000, 0x164e: 0x4000, 0x164f: 0x4000, 0x1650: 0x4000, 0x1651: 0x4000, - 0x1652: 0x4000, 0x1653: 0x4000, 0x1654: 0x4000, 0x1655: 0x4000, 0x1656: 0x4000, 0x1657: 0x4000, - 0x1658: 0x4000, 0x1659: 0x4000, 0x165a: 0x4000, 0x165b: 0x4000, 0x165c: 0x4000, 0x165d: 0x4000, - 0x165e: 0x4000, 0x165f: 0x4000, 0x1660: 0x4000, 0x1661: 0x4000, 0x1662: 0x4000, 0x1663: 0x4000, - 0x1664: 0x4000, 0x1665: 0x4000, 0x1666: 0x4000, 0x1667: 0x4000, 0x1668: 0x4000, 0x1669: 0x4000, - 0x166a: 0x4000, 0x166b: 0x4000, 0x166c: 0x4000, 0x166d: 0x4000, 0x166e: 0x4000, 0x166f: 0x4000, - 0x1670: 0x4000, 0x1671: 0x4000, 0x1672: 0x4000, 0x1673: 0x4000, 0x1674: 0x4000, 0x1675: 0x4000, - 0x1676: 0x4000, 0x1677: 0x4000, 0x1678: 0x4000, 0x1679: 0x4000, 0x167a: 0x4000, 0x167b: 0x4000, - 0x167c: 0x4000, 0x167f: 0x4000, - // Block 0x5a, offset 0x1680 - 0x1680: 0x4000, 0x1681: 0x4000, 0x1682: 0x4000, 0x1683: 0x4000, 0x1684: 0x4000, 0x1685: 0x4000, - 0x1686: 0x4000, 0x1687: 0x4000, 0x1688: 0x4000, 0x1689: 0x4000, 0x168a: 0x4000, 0x168b: 0x4000, - 0x168c: 0x4000, 0x168d: 0x4000, 0x168e: 0x4000, 0x168f: 0x4000, 0x1690: 0x4000, 0x1691: 0x4000, - 0x1692: 0x4000, 0x1693: 0x4000, 0x1694: 0x4000, 0x1695: 0x4000, 0x1696: 0x4000, 0x1697: 0x4000, - 0x1698: 0x4000, 0x1699: 0x4000, 0x169a: 0x4000, 0x169b: 0x4000, 0x169c: 0x4000, 0x169d: 0x4000, - 0x169e: 0x4000, 0x169f: 0x4000, 0x16a0: 0x4000, 0x16a1: 0x4000, 0x16a2: 0x4000, 0x16a3: 0x4000, - 0x16a4: 0x4000, 0x16a5: 0x4000, 0x16a6: 0x4000, 0x16a7: 0x4000, 0x16a8: 0x4000, 0x16a9: 0x4000, - 0x16aa: 0x4000, 0x16ab: 0x4000, 0x16ac: 0x4000, 0x16ad: 0x4000, 0x16ae: 0x4000, 0x16af: 0x4000, - 0x16b0: 0x4000, 0x16b1: 0x4000, 0x16b2: 0x4000, 0x16b3: 0x4000, 0x16b4: 0x4000, 0x16b5: 0x4000, - 0x16b6: 0x4000, 0x16b7: 0x4000, 0x16b8: 0x4000, 0x16b9: 0x4000, 0x16ba: 0x4000, 0x16bb: 0x4000, - 0x16bc: 0x4000, 0x16bd: 0x4000, - // Block 0x5b, offset 0x16c0 - 0x16cb: 0x4000, - 0x16cc: 0x4000, 0x16cd: 0x4000, 0x16ce: 0x4000, 0x16d0: 0x4000, 0x16d1: 0x4000, - 0x16d2: 0x4000, 0x16d3: 0x4000, 0x16d4: 0x4000, 0x16d5: 0x4000, 0x16d6: 0x4000, 0x16d7: 0x4000, - 0x16d8: 0x4000, 0x16d9: 0x4000, 0x16da: 0x4000, 0x16db: 0x4000, 0x16dc: 0x4000, 0x16dd: 0x4000, - 0x16de: 0x4000, 0x16df: 0x4000, 0x16e0: 0x4000, 0x16e1: 0x4000, 0x16e2: 0x4000, 0x16e3: 0x4000, - 0x16e4: 0x4000, 0x16e5: 0x4000, 0x16e6: 0x4000, 0x16e7: 0x4000, - 0x16fa: 0x4000, - // Block 0x5c, offset 0x1700 - 0x1715: 0x4000, 0x1716: 0x4000, - 0x1724: 0x4000, - // Block 0x5d, offset 0x1740 - 0x177b: 0x4000, - 0x177c: 0x4000, 0x177d: 0x4000, 0x177e: 0x4000, 0x177f: 0x4000, - // Block 0x5e, offset 0x1780 - 0x1780: 0x4000, 0x1781: 0x4000, 0x1782: 0x4000, 0x1783: 0x4000, 0x1784: 0x4000, 0x1785: 0x4000, - 0x1786: 0x4000, 0x1787: 0x4000, 0x1788: 0x4000, 0x1789: 0x4000, 0x178a: 0x4000, 0x178b: 0x4000, - 0x178c: 0x4000, 0x178d: 0x4000, 0x178e: 0x4000, 0x178f: 0x4000, - // Block 0x5f, offset 0x17c0 - 0x17c0: 0x4000, 0x17c1: 0x4000, 0x17c2: 0x4000, 0x17c3: 0x4000, 0x17c4: 0x4000, 0x17c5: 0x4000, - 0x17cc: 0x4000, 0x17d0: 0x4000, 0x17d1: 0x4000, - 0x17d2: 0x4000, - 0x17eb: 0x4000, 0x17ec: 0x4000, - 0x17f4: 0x4000, 0x17f5: 0x4000, - 0x17f6: 0x4000, 0x17f7: 0x4000, 0x17f8: 0x4000, 0x17f9: 0x4000, - // Block 0x60, offset 0x1800 - 0x1810: 0x4000, 0x1811: 0x4000, - 0x1812: 0x4000, 0x1813: 0x4000, 0x1814: 0x4000, 0x1815: 0x4000, 0x1816: 0x4000, 0x1817: 0x4000, - 0x1818: 0x4000, 0x1819: 0x4000, 0x181a: 0x4000, 0x181b: 0x4000, 0x181c: 0x4000, 0x181d: 0x4000, - 0x181e: 0x4000, 0x181f: 0x4000, 0x1820: 0x4000, 0x1821: 0x4000, 0x1822: 0x4000, 0x1823: 0x4000, - 0x1824: 0x4000, 0x1825: 0x4000, 0x1826: 0x4000, 0x1827: 0x4000, 0x1828: 0x4000, 0x1829: 0x4000, - 0x182a: 0x4000, 0x182b: 0x4000, 0x182c: 0x4000, 0x182d: 0x4000, 0x182e: 0x4000, 0x182f: 0x4000, - 0x1830: 0x4000, 0x1831: 0x4000, 0x1832: 0x4000, 0x1833: 0x4000, 0x1834: 0x4000, 0x1835: 0x4000, - 0x1836: 0x4000, 0x1837: 0x4000, 0x1838: 0x4000, 0x1839: 0x4000, 0x183a: 0x4000, 0x183b: 0x4000, - 0x183c: 0x4000, 0x183d: 0x4000, 0x183e: 0x4000, - // Block 0x61, offset 0x1840 - 0x1840: 0x4000, 0x1841: 0x4000, 0x1842: 0x4000, 0x1843: 0x4000, 0x1844: 0x4000, 0x1845: 0x4000, - 0x1846: 0x4000, 0x1847: 0x4000, 0x1848: 0x4000, 0x1849: 0x4000, 0x184a: 0x4000, 0x184b: 0x4000, - 0x184c: 0x4000, 0x184d: 0x4000, 0x184e: 0x4000, 0x184f: 0x4000, 0x1850: 0x4000, 0x1851: 0x4000, - 0x1852: 0x4000, 0x1853: 0x4000, 0x1854: 0x4000, 0x1855: 0x4000, 0x1856: 0x4000, 0x1857: 0x4000, - 0x1858: 0x4000, 0x1859: 0x4000, 0x185a: 0x4000, 0x185b: 0x4000, 0x185c: 0x4000, 0x185d: 0x4000, - 0x185e: 0x4000, 0x185f: 0x4000, 0x1860: 0x4000, 0x1861: 0x4000, 0x1862: 0x4000, 0x1863: 0x4000, - 0x1864: 0x4000, 0x1865: 0x4000, 0x1866: 0x4000, 0x1867: 0x4000, 0x1868: 0x4000, 0x1869: 0x4000, - 0x186a: 0x4000, 0x186b: 0x4000, 0x186c: 0x4000, 0x186d: 0x4000, 0x186e: 0x4000, 0x186f: 0x4000, - 0x1870: 0x4000, 0x1873: 0x4000, 0x1874: 0x4000, 0x1875: 0x4000, - 0x1876: 0x4000, 0x187a: 0x4000, - 0x187c: 0x4000, 0x187d: 0x4000, 0x187e: 0x4000, 0x187f: 0x4000, - // Block 0x62, offset 0x1880 - 0x1880: 0x4000, 0x1881: 0x4000, 0x1882: 0x4000, 0x1883: 0x4000, 0x1884: 0x4000, 0x1885: 0x4000, - 0x1886: 0x4000, 0x1887: 0x4000, 0x1888: 0x4000, 0x1889: 0x4000, 0x188a: 0x4000, 0x188b: 0x4000, - 0x188c: 0x4000, 0x188d: 0x4000, 0x188e: 0x4000, 0x188f: 0x4000, 0x1890: 0x4000, 0x1891: 0x4000, - 0x1892: 0x4000, 0x1893: 0x4000, 0x1894: 0x4000, 0x1895: 0x4000, 0x1896: 0x4000, 0x1897: 0x4000, - 0x1898: 0x4000, 0x1899: 0x4000, 0x189a: 0x4000, 0x189b: 0x4000, 0x189c: 0x4000, 0x189d: 0x4000, - 0x189e: 0x4000, 0x189f: 0x4000, 0x18a0: 0x4000, 0x18a1: 0x4000, 0x18a2: 0x4000, - 0x18b0: 0x4000, 0x18b1: 0x4000, 0x18b2: 0x4000, 0x18b3: 0x4000, 0x18b4: 0x4000, 0x18b5: 0x4000, - 0x18b6: 0x4000, 0x18b7: 0x4000, 0x18b8: 0x4000, 0x18b9: 0x4000, - // Block 0x63, offset 0x18c0 - 0x18c0: 0x4000, 0x18c1: 0x4000, 0x18c2: 0x4000, - 0x18d0: 0x4000, 0x18d1: 0x4000, - 0x18d2: 0x4000, 0x18d3: 0x4000, 0x18d4: 0x4000, 0x18d5: 0x4000, 0x18d6: 0x4000, 0x18d7: 0x4000, - 0x18d8: 0x4000, 0x18d9: 0x4000, 0x18da: 0x4000, 0x18db: 0x4000, 0x18dc: 0x4000, 0x18dd: 0x4000, - 0x18de: 0x4000, 0x18df: 0x4000, 0x18e0: 0x4000, 0x18e1: 0x4000, 0x18e2: 0x4000, 0x18e3: 0x4000, - 0x18e4: 0x4000, 0x18e5: 0x4000, 0x18e6: 0x4000, 0x18e7: 0x4000, 0x18e8: 0x4000, 0x18e9: 0x4000, - 0x18ea: 0x4000, 0x18eb: 0x4000, 0x18ec: 0x4000, 0x18ed: 0x4000, 0x18ee: 0x4000, 0x18ef: 0x4000, - 0x18f0: 0x4000, 0x18f1: 0x4000, 0x18f2: 0x4000, 0x18f3: 0x4000, 0x18f4: 0x4000, 0x18f5: 0x4000, - 0x18f6: 0x4000, 0x18f7: 0x4000, 0x18f8: 0x4000, 0x18f9: 0x4000, 0x18fa: 0x4000, 0x18fb: 0x4000, - 0x18fc: 0x4000, 0x18fd: 0x4000, 0x18fe: 0x4000, 0x18ff: 0x4000, - // Block 0x64, offset 0x1900 - 0x1900: 0x2000, 0x1901: 0x2000, 0x1902: 0x2000, 0x1903: 0x2000, 0x1904: 0x2000, 0x1905: 0x2000, - 0x1906: 0x2000, 0x1907: 0x2000, 0x1908: 0x2000, 0x1909: 0x2000, 0x190a: 0x2000, 0x190b: 0x2000, - 0x190c: 0x2000, 0x190d: 0x2000, 0x190e: 0x2000, 0x190f: 0x2000, 0x1910: 0x2000, 0x1911: 0x2000, - 0x1912: 0x2000, 0x1913: 0x2000, 0x1914: 0x2000, 0x1915: 0x2000, 0x1916: 0x2000, 0x1917: 0x2000, - 0x1918: 0x2000, 0x1919: 0x2000, 0x191a: 0x2000, 0x191b: 0x2000, 0x191c: 0x2000, 0x191d: 0x2000, - 0x191e: 0x2000, 0x191f: 0x2000, 0x1920: 0x2000, 0x1921: 0x2000, 0x1922: 0x2000, 0x1923: 0x2000, - 0x1924: 0x2000, 0x1925: 0x2000, 0x1926: 0x2000, 0x1927: 0x2000, 0x1928: 0x2000, 0x1929: 0x2000, - 0x192a: 0x2000, 0x192b: 0x2000, 0x192c: 0x2000, 0x192d: 0x2000, 0x192e: 0x2000, 0x192f: 0x2000, - 0x1930: 0x2000, 0x1931: 0x2000, 0x1932: 0x2000, 0x1933: 0x2000, 0x1934: 0x2000, 0x1935: 0x2000, - 0x1936: 0x2000, 0x1937: 0x2000, 0x1938: 0x2000, 0x1939: 0x2000, 0x193a: 0x2000, 0x193b: 0x2000, - 0x193c: 0x2000, 0x193d: 0x2000, -} - -// widthIndex: 22 blocks, 1408 entries, 1408 bytes -// Block 0 is the zero block. -var widthIndex = [1408]uint8{ - // Block 0x0, offset 0x0 - // Block 0x1, offset 0x40 - // Block 0x2, offset 0x80 - // Block 0x3, offset 0xc0 - 0xc2: 0x01, 0xc3: 0x02, 0xc4: 0x03, 0xc5: 0x04, 0xc7: 0x05, - 0xc9: 0x06, 0xcb: 0x07, 0xcc: 0x08, 0xcd: 0x09, 0xce: 0x0a, 0xcf: 0x0b, - 0xd0: 0x0c, 0xd1: 0x0d, - 0xe1: 0x02, 0xe2: 0x03, 0xe3: 0x04, 0xe4: 0x05, 0xe5: 0x06, 0xe6: 0x06, 0xe7: 0x06, - 0xe8: 0x06, 0xe9: 0x06, 0xea: 0x07, 0xeb: 0x06, 0xec: 0x06, 0xed: 0x08, 0xee: 0x09, 0xef: 0x0a, - 0xf0: 0x0f, 0xf3: 0x12, 0xf4: 0x13, - // Block 0x4, offset 0x100 - 0x104: 0x0e, 0x105: 0x0f, - // Block 0x5, offset 0x140 - 0x140: 0x10, 0x141: 0x11, 0x142: 0x12, 0x144: 0x13, 0x145: 0x14, 0x146: 0x15, 0x147: 0x16, - 0x148: 0x17, 0x149: 0x18, 0x14a: 0x19, 0x14c: 0x1a, 0x14f: 0x1b, - 0x151: 0x1c, 0x152: 0x08, 0x153: 0x1d, 0x154: 0x1e, 0x155: 0x1f, 0x156: 0x20, 0x157: 0x21, - 0x158: 0x22, 0x159: 0x23, 0x15a: 0x24, 0x15b: 0x25, 0x15c: 0x26, 0x15d: 0x27, 0x15e: 0x28, 0x15f: 0x29, - 0x166: 0x2a, - 0x16c: 0x2b, 0x16d: 0x2c, - 0x17a: 0x2d, 0x17b: 0x2e, 0x17c: 0x0e, 0x17d: 0x0e, 0x17e: 0x0e, 0x17f: 0x2f, - // Block 0x6, offset 0x180 - 0x180: 0x30, 0x181: 0x31, 0x182: 0x32, 0x183: 0x33, 0x184: 0x34, 0x185: 0x35, 0x186: 0x36, 0x187: 0x37, - 0x188: 0x38, 0x189: 0x39, 0x18a: 0x0e, 0x18b: 0x3a, 0x18c: 0x0e, 0x18d: 0x0e, 0x18e: 0x0e, 0x18f: 0x0e, - 0x190: 0x0e, 0x191: 0x0e, 0x192: 0x0e, 0x193: 0x0e, 0x194: 0x0e, 0x195: 0x0e, 0x196: 0x0e, 0x197: 0x0e, - 0x198: 0x0e, 0x199: 0x0e, 0x19a: 0x0e, 0x19b: 0x0e, 0x19c: 0x0e, 0x19d: 0x0e, 0x19e: 0x0e, 0x19f: 0x0e, - 0x1a0: 0x0e, 0x1a1: 0x0e, 0x1a2: 0x0e, 0x1a3: 0x0e, 0x1a4: 0x0e, 0x1a5: 0x0e, 0x1a6: 0x0e, 0x1a7: 0x0e, - 0x1a8: 0x0e, 0x1a9: 0x0e, 0x1aa: 0x0e, 0x1ab: 0x0e, 0x1ac: 0x0e, 0x1ad: 0x0e, 0x1ae: 0x0e, 0x1af: 0x0e, - 0x1b0: 0x0e, 0x1b1: 0x0e, 0x1b2: 0x0e, 0x1b3: 0x0e, 0x1b4: 0x0e, 0x1b5: 0x0e, 0x1b6: 0x0e, 0x1b7: 0x0e, - 0x1b8: 0x0e, 0x1b9: 0x0e, 0x1ba: 0x0e, 0x1bb: 0x0e, 0x1bc: 0x0e, 0x1bd: 0x0e, 0x1be: 0x0e, 0x1bf: 0x0e, - // Block 0x7, offset 0x1c0 - 0x1c0: 0x0e, 0x1c1: 0x0e, 0x1c2: 0x0e, 0x1c3: 0x0e, 0x1c4: 0x0e, 0x1c5: 0x0e, 0x1c6: 0x0e, 0x1c7: 0x0e, - 0x1c8: 0x0e, 0x1c9: 0x0e, 0x1ca: 0x0e, 0x1cb: 0x0e, 0x1cc: 0x0e, 0x1cd: 0x0e, 0x1ce: 0x0e, 0x1cf: 0x0e, - 0x1d0: 0x0e, 0x1d1: 0x0e, 0x1d2: 0x0e, 0x1d3: 0x0e, 0x1d4: 0x0e, 0x1d5: 0x0e, 0x1d6: 0x0e, 0x1d7: 0x0e, - 0x1d8: 0x0e, 0x1d9: 0x0e, 0x1da: 0x0e, 0x1db: 0x0e, 0x1dc: 0x0e, 0x1dd: 0x0e, 0x1de: 0x0e, 0x1df: 0x0e, - 0x1e0: 0x0e, 0x1e1: 0x0e, 0x1e2: 0x0e, 0x1e3: 0x0e, 0x1e4: 0x0e, 0x1e5: 0x0e, 0x1e6: 0x0e, 0x1e7: 0x0e, - 0x1e8: 0x0e, 0x1e9: 0x0e, 0x1ea: 0x0e, 0x1eb: 0x0e, 0x1ec: 0x0e, 0x1ed: 0x0e, 0x1ee: 0x0e, 0x1ef: 0x0e, - 0x1f0: 0x0e, 0x1f1: 0x0e, 0x1f2: 0x0e, 0x1f3: 0x0e, 0x1f4: 0x0e, 0x1f5: 0x0e, 0x1f6: 0x0e, - 0x1f8: 0x0e, 0x1f9: 0x0e, 0x1fa: 0x0e, 0x1fb: 0x0e, 0x1fc: 0x0e, 0x1fd: 0x0e, 0x1fe: 0x0e, 0x1ff: 0x0e, - // Block 0x8, offset 0x200 - 0x200: 0x0e, 0x201: 0x0e, 0x202: 0x0e, 0x203: 0x0e, 0x204: 0x0e, 0x205: 0x0e, 0x206: 0x0e, 0x207: 0x0e, - 0x208: 0x0e, 0x209: 0x0e, 0x20a: 0x0e, 0x20b: 0x0e, 0x20c: 0x0e, 0x20d: 0x0e, 0x20e: 0x0e, 0x20f: 0x0e, - 0x210: 0x0e, 0x211: 0x0e, 0x212: 0x0e, 0x213: 0x0e, 0x214: 0x0e, 0x215: 0x0e, 0x216: 0x0e, 0x217: 0x0e, - 0x218: 0x0e, 0x219: 0x0e, 0x21a: 0x0e, 0x21b: 0x0e, 0x21c: 0x0e, 0x21d: 0x0e, 0x21e: 0x0e, 0x21f: 0x0e, - 0x220: 0x0e, 0x221: 0x0e, 0x222: 0x0e, 0x223: 0x0e, 0x224: 0x0e, 0x225: 0x0e, 0x226: 0x0e, 0x227: 0x0e, - 0x228: 0x0e, 0x229: 0x0e, 0x22a: 0x0e, 0x22b: 0x0e, 0x22c: 0x0e, 0x22d: 0x0e, 0x22e: 0x0e, 0x22f: 0x0e, - 0x230: 0x0e, 0x231: 0x0e, 0x232: 0x0e, 0x233: 0x0e, 0x234: 0x0e, 0x235: 0x0e, 0x236: 0x0e, 0x237: 0x0e, - 0x238: 0x0e, 0x239: 0x0e, 0x23a: 0x0e, 0x23b: 0x0e, 0x23c: 0x0e, 0x23d: 0x0e, 0x23e: 0x0e, 0x23f: 0x0e, - // Block 0x9, offset 0x240 - 0x240: 0x0e, 0x241: 0x0e, 0x242: 0x0e, 0x243: 0x0e, 0x244: 0x0e, 0x245: 0x0e, 0x246: 0x0e, 0x247: 0x0e, - 0x248: 0x0e, 0x249: 0x0e, 0x24a: 0x0e, 0x24b: 0x0e, 0x24c: 0x0e, 0x24d: 0x0e, 0x24e: 0x0e, 0x24f: 0x0e, - 0x250: 0x0e, 0x251: 0x0e, 0x252: 0x3b, 0x253: 0x3c, - 0x265: 0x3d, - 0x270: 0x0e, 0x271: 0x0e, 0x272: 0x0e, 0x273: 0x0e, 0x274: 0x0e, 0x275: 0x0e, 0x276: 0x0e, 0x277: 0x0e, - 0x278: 0x0e, 0x279: 0x0e, 0x27a: 0x0e, 0x27b: 0x0e, 0x27c: 0x0e, 0x27d: 0x0e, 0x27e: 0x0e, 0x27f: 0x0e, - // Block 0xa, offset 0x280 - 0x280: 0x0e, 0x281: 0x0e, 0x282: 0x0e, 0x283: 0x0e, 0x284: 0x0e, 0x285: 0x0e, 0x286: 0x0e, 0x287: 0x0e, - 0x288: 0x0e, 0x289: 0x0e, 0x28a: 0x0e, 0x28b: 0x0e, 0x28c: 0x0e, 0x28d: 0x0e, 0x28e: 0x0e, 0x28f: 0x0e, - 0x290: 0x0e, 0x291: 0x0e, 0x292: 0x0e, 0x293: 0x0e, 0x294: 0x0e, 0x295: 0x0e, 0x296: 0x0e, 0x297: 0x0e, - 0x298: 0x0e, 0x299: 0x0e, 0x29a: 0x0e, 0x29b: 0x0e, 0x29c: 0x0e, 0x29d: 0x0e, 0x29e: 0x3e, - // Block 0xb, offset 0x2c0 - 0x2c0: 0x08, 0x2c1: 0x08, 0x2c2: 0x08, 0x2c3: 0x08, 0x2c4: 0x08, 0x2c5: 0x08, 0x2c6: 0x08, 0x2c7: 0x08, - 0x2c8: 0x08, 0x2c9: 0x08, 0x2ca: 0x08, 0x2cb: 0x08, 0x2cc: 0x08, 0x2cd: 0x08, 0x2ce: 0x08, 0x2cf: 0x08, - 0x2d0: 0x08, 0x2d1: 0x08, 0x2d2: 0x08, 0x2d3: 0x08, 0x2d4: 0x08, 0x2d5: 0x08, 0x2d6: 0x08, 0x2d7: 0x08, - 0x2d8: 0x08, 0x2d9: 0x08, 0x2da: 0x08, 0x2db: 0x08, 0x2dc: 0x08, 0x2dd: 0x08, 0x2de: 0x08, 0x2df: 0x08, - 0x2e0: 0x08, 0x2e1: 0x08, 0x2e2: 0x08, 0x2e3: 0x08, 0x2e4: 0x08, 0x2e5: 0x08, 0x2e6: 0x08, 0x2e7: 0x08, - 0x2e8: 0x08, 0x2e9: 0x08, 0x2ea: 0x08, 0x2eb: 0x08, 0x2ec: 0x08, 0x2ed: 0x08, 0x2ee: 0x08, 0x2ef: 0x08, - 0x2f0: 0x08, 0x2f1: 0x08, 0x2f2: 0x08, 0x2f3: 0x08, 0x2f4: 0x08, 0x2f5: 0x08, 0x2f6: 0x08, 0x2f7: 0x08, - 0x2f8: 0x08, 0x2f9: 0x08, 0x2fa: 0x08, 0x2fb: 0x08, 0x2fc: 0x08, 0x2fd: 0x08, 0x2fe: 0x08, 0x2ff: 0x08, - // Block 0xc, offset 0x300 - 0x300: 0x08, 0x301: 0x08, 0x302: 0x08, 0x303: 0x08, 0x304: 0x08, 0x305: 0x08, 0x306: 0x08, 0x307: 0x08, - 0x308: 0x08, 0x309: 0x08, 0x30a: 0x08, 0x30b: 0x08, 0x30c: 0x08, 0x30d: 0x08, 0x30e: 0x08, 0x30f: 0x08, - 0x310: 0x08, 0x311: 0x08, 0x312: 0x08, 0x313: 0x08, 0x314: 0x08, 0x315: 0x08, 0x316: 0x08, 0x317: 0x08, - 0x318: 0x08, 0x319: 0x08, 0x31a: 0x08, 0x31b: 0x08, 0x31c: 0x08, 0x31d: 0x08, 0x31e: 0x08, 0x31f: 0x08, - 0x320: 0x08, 0x321: 0x08, 0x322: 0x08, 0x323: 0x08, 0x324: 0x0e, 0x325: 0x0e, 0x326: 0x0e, 0x327: 0x0e, - 0x328: 0x0e, 0x329: 0x0e, 0x32a: 0x0e, 0x32b: 0x0e, - 0x338: 0x3f, 0x339: 0x40, 0x33c: 0x41, 0x33d: 0x42, 0x33e: 0x43, 0x33f: 0x44, - // Block 0xd, offset 0x340 - 0x37f: 0x45, - // Block 0xe, offset 0x380 - 0x380: 0x0e, 0x381: 0x0e, 0x382: 0x0e, 0x383: 0x0e, 0x384: 0x0e, 0x385: 0x0e, 0x386: 0x0e, 0x387: 0x0e, - 0x388: 0x0e, 0x389: 0x0e, 0x38a: 0x0e, 0x38b: 0x0e, 0x38c: 0x0e, 0x38d: 0x0e, 0x38e: 0x0e, 0x38f: 0x0e, - 0x390: 0x0e, 0x391: 0x0e, 0x392: 0x0e, 0x393: 0x0e, 0x394: 0x0e, 0x395: 0x0e, 0x396: 0x0e, 0x397: 0x0e, - 0x398: 0x0e, 0x399: 0x0e, 0x39a: 0x0e, 0x39b: 0x0e, 0x39c: 0x0e, 0x39d: 0x0e, 0x39e: 0x0e, 0x39f: 0x46, - 0x3a0: 0x0e, 0x3a1: 0x0e, 0x3a2: 0x0e, 0x3a3: 0x0e, 0x3a4: 0x0e, 0x3a5: 0x0e, 0x3a6: 0x0e, 0x3a7: 0x0e, - 0x3a8: 0x0e, 0x3a9: 0x0e, 0x3aa: 0x0e, 0x3ab: 0x47, - // Block 0xf, offset 0x3c0 - 0x3c0: 0x0e, 0x3c1: 0x0e, 0x3c2: 0x0e, 0x3c3: 0x0e, 0x3c4: 0x48, 0x3c5: 0x49, 0x3c6: 0x0e, 0x3c7: 0x0e, - 0x3c8: 0x0e, 0x3c9: 0x0e, 0x3ca: 0x0e, 0x3cb: 0x4a, - // Block 0x10, offset 0x400 - 0x400: 0x4b, 0x403: 0x4c, 0x404: 0x4d, 0x405: 0x4e, 0x406: 0x4f, - 0x408: 0x50, 0x409: 0x51, 0x40c: 0x52, 0x40d: 0x53, 0x40e: 0x54, 0x40f: 0x55, - 0x410: 0x3a, 0x411: 0x56, 0x412: 0x0e, 0x413: 0x57, 0x414: 0x58, 0x415: 0x59, 0x416: 0x5a, 0x417: 0x5b, - 0x418: 0x0e, 0x419: 0x5c, 0x41a: 0x0e, 0x41b: 0x5d, - 0x424: 0x5e, 0x425: 0x5f, 0x426: 0x60, 0x427: 0x61, - // Block 0x11, offset 0x440 - 0x456: 0x0b, 0x457: 0x06, - 0x458: 0x0c, 0x45b: 0x0d, 0x45f: 0x0e, - 0x460: 0x06, 0x461: 0x06, 0x462: 0x06, 0x463: 0x06, 0x464: 0x06, 0x465: 0x06, 0x466: 0x06, 0x467: 0x06, - 0x468: 0x06, 0x469: 0x06, 0x46a: 0x06, 0x46b: 0x06, 0x46c: 0x06, 0x46d: 0x06, 0x46e: 0x06, 0x46f: 0x06, - 0x470: 0x06, 0x471: 0x06, 0x472: 0x06, 0x473: 0x06, 0x474: 0x06, 0x475: 0x06, 0x476: 0x06, 0x477: 0x06, - 0x478: 0x06, 0x479: 0x06, 0x47a: 0x06, 0x47b: 0x06, 0x47c: 0x06, 0x47d: 0x06, 0x47e: 0x06, 0x47f: 0x06, - // Block 0x12, offset 0x480 - 0x484: 0x08, 0x485: 0x08, 0x486: 0x08, 0x487: 0x09, - // Block 0x13, offset 0x4c0 - 0x4c0: 0x08, 0x4c1: 0x08, 0x4c2: 0x08, 0x4c3: 0x08, 0x4c4: 0x08, 0x4c5: 0x08, 0x4c6: 0x08, 0x4c7: 0x08, - 0x4c8: 0x08, 0x4c9: 0x08, 0x4ca: 0x08, 0x4cb: 0x08, 0x4cc: 0x08, 0x4cd: 0x08, 0x4ce: 0x08, 0x4cf: 0x08, - 0x4d0: 0x08, 0x4d1: 0x08, 0x4d2: 0x08, 0x4d3: 0x08, 0x4d4: 0x08, 0x4d5: 0x08, 0x4d6: 0x08, 0x4d7: 0x08, - 0x4d8: 0x08, 0x4d9: 0x08, 0x4da: 0x08, 0x4db: 0x08, 0x4dc: 0x08, 0x4dd: 0x08, 0x4de: 0x08, 0x4df: 0x08, - 0x4e0: 0x08, 0x4e1: 0x08, 0x4e2: 0x08, 0x4e3: 0x08, 0x4e4: 0x08, 0x4e5: 0x08, 0x4e6: 0x08, 0x4e7: 0x08, - 0x4e8: 0x08, 0x4e9: 0x08, 0x4ea: 0x08, 0x4eb: 0x08, 0x4ec: 0x08, 0x4ed: 0x08, 0x4ee: 0x08, 0x4ef: 0x08, - 0x4f0: 0x08, 0x4f1: 0x08, 0x4f2: 0x08, 0x4f3: 0x08, 0x4f4: 0x08, 0x4f5: 0x08, 0x4f6: 0x08, 0x4f7: 0x08, - 0x4f8: 0x08, 0x4f9: 0x08, 0x4fa: 0x08, 0x4fb: 0x08, 0x4fc: 0x08, 0x4fd: 0x08, 0x4fe: 0x08, 0x4ff: 0x62, - // Block 0x14, offset 0x500 - 0x520: 0x10, - 0x530: 0x09, 0x531: 0x09, 0x532: 0x09, 0x533: 0x09, 0x534: 0x09, 0x535: 0x09, 0x536: 0x09, 0x537: 0x09, - 0x538: 0x09, 0x539: 0x09, 0x53a: 0x09, 0x53b: 0x09, 0x53c: 0x09, 0x53d: 0x09, 0x53e: 0x09, 0x53f: 0x11, - // Block 0x15, offset 0x540 - 0x540: 0x09, 0x541: 0x09, 0x542: 0x09, 0x543: 0x09, 0x544: 0x09, 0x545: 0x09, 0x546: 0x09, 0x547: 0x09, - 0x548: 0x09, 0x549: 0x09, 0x54a: 0x09, 0x54b: 0x09, 0x54c: 0x09, 0x54d: 0x09, 0x54e: 0x09, 0x54f: 0x11, -} - -// inverseData contains 4-byte entries of the following format: -// -// <0 padding> -// -// The last byte of the UTF-8-encoded rune is xor-ed with the last byte of the -// UTF-8 encoding of the original rune. Mappings often have the following -// pattern: -// -// A -> A (U+FF21 -> U+0041) -// B -> B (U+FF22 -> U+0042) -// ... -// -// By xor-ing the last byte the same entry can be shared by many mappings. This -// reduces the total number of distinct entries by about two thirds. -// The resulting entry for the aforementioned mappings is -// -// { 0x01, 0xE0, 0x00, 0x00 } -// -// Using this entry to map U+FF21 (UTF-8 [EF BC A1]), we get -// -// E0 ^ A1 = 41. -// -// Similarly, for U+FF22 (UTF-8 [EF BC A2]), we get -// -// E0 ^ A2 = 42. -// -// Note that because of the xor-ing, the byte sequence stored in the entry is -// not valid UTF-8. -var inverseData = [150][4]byte{ - {0x00, 0x00, 0x00, 0x00}, - {0x03, 0xe3, 0x80, 0xa0}, - {0x03, 0xef, 0xbc, 0xa0}, - {0x03, 0xef, 0xbc, 0xe0}, - {0x03, 0xef, 0xbd, 0xe0}, - {0x03, 0xef, 0xbf, 0x02}, - {0x03, 0xef, 0xbf, 0x00}, - {0x03, 0xef, 0xbf, 0x0e}, - {0x03, 0xef, 0xbf, 0x0c}, - {0x03, 0xef, 0xbf, 0x0f}, - {0x03, 0xef, 0xbf, 0x39}, - {0x03, 0xef, 0xbf, 0x3b}, - {0x03, 0xef, 0xbf, 0x3f}, - {0x03, 0xef, 0xbf, 0x2a}, - {0x03, 0xef, 0xbf, 0x0d}, - {0x03, 0xef, 0xbf, 0x25}, - {0x03, 0xef, 0xbd, 0x1a}, - {0x03, 0xef, 0xbd, 0x26}, - {0x01, 0xa0, 0x00, 0x00}, - {0x03, 0xef, 0xbd, 0x25}, - {0x03, 0xef, 0xbd, 0x23}, - {0x03, 0xef, 0xbd, 0x2e}, - {0x03, 0xef, 0xbe, 0x07}, - {0x03, 0xef, 0xbe, 0x05}, - {0x03, 0xef, 0xbd, 0x06}, - {0x03, 0xef, 0xbd, 0x13}, - {0x03, 0xef, 0xbd, 0x0b}, - {0x03, 0xef, 0xbd, 0x16}, - {0x03, 0xef, 0xbd, 0x0c}, - {0x03, 0xef, 0xbd, 0x15}, - {0x03, 0xef, 0xbd, 0x0d}, - {0x03, 0xef, 0xbd, 0x1c}, - {0x03, 0xef, 0xbd, 0x02}, - {0x03, 0xef, 0xbd, 0x1f}, - {0x03, 0xef, 0xbd, 0x1d}, - {0x03, 0xef, 0xbd, 0x17}, - {0x03, 0xef, 0xbd, 0x08}, - {0x03, 0xef, 0xbd, 0x09}, - {0x03, 0xef, 0xbd, 0x0e}, - {0x03, 0xef, 0xbd, 0x04}, - {0x03, 0xef, 0xbd, 0x05}, - {0x03, 0xef, 0xbe, 0x3f}, - {0x03, 0xef, 0xbe, 0x00}, - {0x03, 0xef, 0xbd, 0x2c}, - {0x03, 0xef, 0xbe, 0x06}, - {0x03, 0xef, 0xbe, 0x0c}, - {0x03, 0xef, 0xbe, 0x0f}, - {0x03, 0xef, 0xbe, 0x0d}, - {0x03, 0xef, 0xbe, 0x0b}, - {0x03, 0xef, 0xbe, 0x19}, - {0x03, 0xef, 0xbe, 0x15}, - {0x03, 0xef, 0xbe, 0x11}, - {0x03, 0xef, 0xbe, 0x31}, - {0x03, 0xef, 0xbe, 0x33}, - {0x03, 0xef, 0xbd, 0x0f}, - {0x03, 0xef, 0xbe, 0x30}, - {0x03, 0xef, 0xbe, 0x3e}, - {0x03, 0xef, 0xbe, 0x32}, - {0x03, 0xef, 0xbe, 0x36}, - {0x03, 0xef, 0xbd, 0x14}, - {0x03, 0xef, 0xbe, 0x2e}, - {0x03, 0xef, 0xbd, 0x1e}, - {0x03, 0xef, 0xbe, 0x10}, - {0x03, 0xef, 0xbf, 0x13}, - {0x03, 0xef, 0xbf, 0x15}, - {0x03, 0xef, 0xbf, 0x17}, - {0x03, 0xef, 0xbf, 0x1f}, - {0x03, 0xef, 0xbf, 0x1d}, - {0x03, 0xef, 0xbf, 0x1b}, - {0x03, 0xef, 0xbf, 0x09}, - {0x03, 0xef, 0xbf, 0x0b}, - {0x03, 0xef, 0xbf, 0x37}, - {0x03, 0xef, 0xbe, 0x04}, - {0x01, 0xe0, 0x00, 0x00}, - {0x03, 0xe2, 0xa6, 0x1a}, - {0x03, 0xe2, 0xa6, 0x26}, - {0x03, 0xe3, 0x80, 0x23}, - {0x03, 0xe3, 0x80, 0x2e}, - {0x03, 0xe3, 0x80, 0x25}, - {0x03, 0xe3, 0x83, 0x1e}, - {0x03, 0xe3, 0x83, 0x14}, - {0x03, 0xe3, 0x82, 0x06}, - {0x03, 0xe3, 0x82, 0x0b}, - {0x03, 0xe3, 0x82, 0x0c}, - {0x03, 0xe3, 0x82, 0x0d}, - {0x03, 0xe3, 0x82, 0x02}, - {0x03, 0xe3, 0x83, 0x0f}, - {0x03, 0xe3, 0x83, 0x08}, - {0x03, 0xe3, 0x83, 0x09}, - {0x03, 0xe3, 0x83, 0x2c}, - {0x03, 0xe3, 0x83, 0x0c}, - {0x03, 0xe3, 0x82, 0x13}, - {0x03, 0xe3, 0x82, 0x16}, - {0x03, 0xe3, 0x82, 0x15}, - {0x03, 0xe3, 0x82, 0x1c}, - {0x03, 0xe3, 0x82, 0x1f}, - {0x03, 0xe3, 0x82, 0x1d}, - {0x03, 0xe3, 0x82, 0x1a}, - {0x03, 0xe3, 0x82, 0x17}, - {0x03, 0xe3, 0x82, 0x08}, - {0x03, 0xe3, 0x82, 0x09}, - {0x03, 0xe3, 0x82, 0x0e}, - {0x03, 0xe3, 0x82, 0x04}, - {0x03, 0xe3, 0x82, 0x05}, - {0x03, 0xe3, 0x82, 0x3f}, - {0x03, 0xe3, 0x83, 0x00}, - {0x03, 0xe3, 0x83, 0x06}, - {0x03, 0xe3, 0x83, 0x05}, - {0x03, 0xe3, 0x83, 0x0d}, - {0x03, 0xe3, 0x83, 0x0b}, - {0x03, 0xe3, 0x83, 0x07}, - {0x03, 0xe3, 0x83, 0x19}, - {0x03, 0xe3, 0x83, 0x15}, - {0x03, 0xe3, 0x83, 0x11}, - {0x03, 0xe3, 0x83, 0x31}, - {0x03, 0xe3, 0x83, 0x33}, - {0x03, 0xe3, 0x83, 0x30}, - {0x03, 0xe3, 0x83, 0x3e}, - {0x03, 0xe3, 0x83, 0x32}, - {0x03, 0xe3, 0x83, 0x36}, - {0x03, 0xe3, 0x83, 0x2e}, - {0x03, 0xe3, 0x82, 0x07}, - {0x03, 0xe3, 0x85, 0x04}, - {0x03, 0xe3, 0x84, 0x10}, - {0x03, 0xe3, 0x85, 0x30}, - {0x03, 0xe3, 0x85, 0x0d}, - {0x03, 0xe3, 0x85, 0x13}, - {0x03, 0xe3, 0x85, 0x15}, - {0x03, 0xe3, 0x85, 0x17}, - {0x03, 0xe3, 0x85, 0x1f}, - {0x03, 0xe3, 0x85, 0x1d}, - {0x03, 0xe3, 0x85, 0x1b}, - {0x03, 0xe3, 0x85, 0x09}, - {0x03, 0xe3, 0x85, 0x0f}, - {0x03, 0xe3, 0x85, 0x0b}, - {0x03, 0xe3, 0x85, 0x37}, - {0x03, 0xe3, 0x85, 0x3b}, - {0x03, 0xe3, 0x85, 0x39}, - {0x03, 0xe3, 0x85, 0x3f}, - {0x02, 0xc2, 0x02, 0x00}, - {0x02, 0xc2, 0x0e, 0x00}, - {0x02, 0xc2, 0x0c, 0x00}, - {0x02, 0xc2, 0x00, 0x00}, - {0x03, 0xe2, 0x82, 0x0f}, - {0x03, 0xe2, 0x94, 0x2a}, - {0x03, 0xe2, 0x86, 0x39}, - {0x03, 0xe2, 0x86, 0x3b}, - {0x03, 0xe2, 0x86, 0x3f}, - {0x03, 0xe2, 0x96, 0x0d}, - {0x03, 0xe2, 0x97, 0x25}, -} - -// Total table size 14936 bytes (14KiB) diff --git a/vendor/golang.org/x/text/width/tables12.0.0.go b/vendor/golang.org/x/text/width/tables12.0.0.go deleted file mode 100644 index 755ee91221..0000000000 --- a/vendor/golang.org/x/text/width/tables12.0.0.go +++ /dev/null @@ -1,1360 +0,0 @@ -// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. - -//go:build go1.14 && !go1.16 - -package width - -// UnicodeVersion is the Unicode version from which the tables in this package are derived. -const UnicodeVersion = "12.0.0" - -// lookup returns the trie value for the first UTF-8 encoding in s and -// the width in bytes of this encoding. The size will be 0 if s does not -// hold enough bytes to complete the encoding. len(s) must be greater than 0. -func (t *widthTrie) lookup(s []byte) (v uint16, sz int) { - c0 := s[0] - switch { - case c0 < 0x80: // is ASCII - return widthValues[c0], 1 - case c0 < 0xC2: - return 0, 1 // Illegal UTF-8: not a starter, not ASCII. - case c0 < 0xE0: // 2-byte UTF-8 - if len(s) < 2 { - return 0, 0 - } - i := widthIndex[c0] - c1 := s[1] - if c1 < 0x80 || 0xC0 <= c1 { - return 0, 1 // Illegal UTF-8: not a continuation byte. - } - return t.lookupValue(uint32(i), c1), 2 - case c0 < 0xF0: // 3-byte UTF-8 - if len(s) < 3 { - return 0, 0 - } - i := widthIndex[c0] - c1 := s[1] - if c1 < 0x80 || 0xC0 <= c1 { - return 0, 1 // Illegal UTF-8: not a continuation byte. - } - o := uint32(i)<<6 + uint32(c1) - i = widthIndex[o] - c2 := s[2] - if c2 < 0x80 || 0xC0 <= c2 { - return 0, 2 // Illegal UTF-8: not a continuation byte. - } - return t.lookupValue(uint32(i), c2), 3 - case c0 < 0xF8: // 4-byte UTF-8 - if len(s) < 4 { - return 0, 0 - } - i := widthIndex[c0] - c1 := s[1] - if c1 < 0x80 || 0xC0 <= c1 { - return 0, 1 // Illegal UTF-8: not a continuation byte. - } - o := uint32(i)<<6 + uint32(c1) - i = widthIndex[o] - c2 := s[2] - if c2 < 0x80 || 0xC0 <= c2 { - return 0, 2 // Illegal UTF-8: not a continuation byte. - } - o = uint32(i)<<6 + uint32(c2) - i = widthIndex[o] - c3 := s[3] - if c3 < 0x80 || 0xC0 <= c3 { - return 0, 3 // Illegal UTF-8: not a continuation byte. - } - return t.lookupValue(uint32(i), c3), 4 - } - // Illegal rune - return 0, 1 -} - -// lookupUnsafe returns the trie value for the first UTF-8 encoding in s. -// s must start with a full and valid UTF-8 encoded rune. -func (t *widthTrie) lookupUnsafe(s []byte) uint16 { - c0 := s[0] - if c0 < 0x80 { // is ASCII - return widthValues[c0] - } - i := widthIndex[c0] - if c0 < 0xE0 { // 2-byte UTF-8 - return t.lookupValue(uint32(i), s[1]) - } - i = widthIndex[uint32(i)<<6+uint32(s[1])] - if c0 < 0xF0 { // 3-byte UTF-8 - return t.lookupValue(uint32(i), s[2]) - } - i = widthIndex[uint32(i)<<6+uint32(s[2])] - if c0 < 0xF8 { // 4-byte UTF-8 - return t.lookupValue(uint32(i), s[3]) - } - return 0 -} - -// lookupString returns the trie value for the first UTF-8 encoding in s and -// the width in bytes of this encoding. The size will be 0 if s does not -// hold enough bytes to complete the encoding. len(s) must be greater than 0. -func (t *widthTrie) lookupString(s string) (v uint16, sz int) { - c0 := s[0] - switch { - case c0 < 0x80: // is ASCII - return widthValues[c0], 1 - case c0 < 0xC2: - return 0, 1 // Illegal UTF-8: not a starter, not ASCII. - case c0 < 0xE0: // 2-byte UTF-8 - if len(s) < 2 { - return 0, 0 - } - i := widthIndex[c0] - c1 := s[1] - if c1 < 0x80 || 0xC0 <= c1 { - return 0, 1 // Illegal UTF-8: not a continuation byte. - } - return t.lookupValue(uint32(i), c1), 2 - case c0 < 0xF0: // 3-byte UTF-8 - if len(s) < 3 { - return 0, 0 - } - i := widthIndex[c0] - c1 := s[1] - if c1 < 0x80 || 0xC0 <= c1 { - return 0, 1 // Illegal UTF-8: not a continuation byte. - } - o := uint32(i)<<6 + uint32(c1) - i = widthIndex[o] - c2 := s[2] - if c2 < 0x80 || 0xC0 <= c2 { - return 0, 2 // Illegal UTF-8: not a continuation byte. - } - return t.lookupValue(uint32(i), c2), 3 - case c0 < 0xF8: // 4-byte UTF-8 - if len(s) < 4 { - return 0, 0 - } - i := widthIndex[c0] - c1 := s[1] - if c1 < 0x80 || 0xC0 <= c1 { - return 0, 1 // Illegal UTF-8: not a continuation byte. - } - o := uint32(i)<<6 + uint32(c1) - i = widthIndex[o] - c2 := s[2] - if c2 < 0x80 || 0xC0 <= c2 { - return 0, 2 // Illegal UTF-8: not a continuation byte. - } - o = uint32(i)<<6 + uint32(c2) - i = widthIndex[o] - c3 := s[3] - if c3 < 0x80 || 0xC0 <= c3 { - return 0, 3 // Illegal UTF-8: not a continuation byte. - } - return t.lookupValue(uint32(i), c3), 4 - } - // Illegal rune - return 0, 1 -} - -// lookupStringUnsafe returns the trie value for the first UTF-8 encoding in s. -// s must start with a full and valid UTF-8 encoded rune. -func (t *widthTrie) lookupStringUnsafe(s string) uint16 { - c0 := s[0] - if c0 < 0x80 { // is ASCII - return widthValues[c0] - } - i := widthIndex[c0] - if c0 < 0xE0 { // 2-byte UTF-8 - return t.lookupValue(uint32(i), s[1]) - } - i = widthIndex[uint32(i)<<6+uint32(s[1])] - if c0 < 0xF0 { // 3-byte UTF-8 - return t.lookupValue(uint32(i), s[2]) - } - i = widthIndex[uint32(i)<<6+uint32(s[2])] - if c0 < 0xF8 { // 4-byte UTF-8 - return t.lookupValue(uint32(i), s[3]) - } - return 0 -} - -// widthTrie. Total size: 14720 bytes (14.38 KiB). Checksum: 3f4f2516ded5489b. -type widthTrie struct{} - -func newWidthTrie(i int) *widthTrie { - return &widthTrie{} -} - -// lookupValue determines the type of block n and looks up the value for b. -func (t *widthTrie) lookupValue(n uint32, b byte) uint16 { - switch { - default: - return uint16(widthValues[n<<6+uint32(b)]) - } -} - -// widthValues: 104 blocks, 6656 entries, 13312 bytes -// The third block is the zero block. -var widthValues = [6656]uint16{ - // Block 0x0, offset 0x0 - 0x20: 0x6001, 0x21: 0x6002, 0x22: 0x6002, 0x23: 0x6002, - 0x24: 0x6002, 0x25: 0x6002, 0x26: 0x6002, 0x27: 0x6002, 0x28: 0x6002, 0x29: 0x6002, - 0x2a: 0x6002, 0x2b: 0x6002, 0x2c: 0x6002, 0x2d: 0x6002, 0x2e: 0x6002, 0x2f: 0x6002, - 0x30: 0x6002, 0x31: 0x6002, 0x32: 0x6002, 0x33: 0x6002, 0x34: 0x6002, 0x35: 0x6002, - 0x36: 0x6002, 0x37: 0x6002, 0x38: 0x6002, 0x39: 0x6002, 0x3a: 0x6002, 0x3b: 0x6002, - 0x3c: 0x6002, 0x3d: 0x6002, 0x3e: 0x6002, 0x3f: 0x6002, - // Block 0x1, offset 0x40 - 0x40: 0x6003, 0x41: 0x6003, 0x42: 0x6003, 0x43: 0x6003, 0x44: 0x6003, 0x45: 0x6003, - 0x46: 0x6003, 0x47: 0x6003, 0x48: 0x6003, 0x49: 0x6003, 0x4a: 0x6003, 0x4b: 0x6003, - 0x4c: 0x6003, 0x4d: 0x6003, 0x4e: 0x6003, 0x4f: 0x6003, 0x50: 0x6003, 0x51: 0x6003, - 0x52: 0x6003, 0x53: 0x6003, 0x54: 0x6003, 0x55: 0x6003, 0x56: 0x6003, 0x57: 0x6003, - 0x58: 0x6003, 0x59: 0x6003, 0x5a: 0x6003, 0x5b: 0x6003, 0x5c: 0x6003, 0x5d: 0x6003, - 0x5e: 0x6003, 0x5f: 0x6003, 0x60: 0x6004, 0x61: 0x6004, 0x62: 0x6004, 0x63: 0x6004, - 0x64: 0x6004, 0x65: 0x6004, 0x66: 0x6004, 0x67: 0x6004, 0x68: 0x6004, 0x69: 0x6004, - 0x6a: 0x6004, 0x6b: 0x6004, 0x6c: 0x6004, 0x6d: 0x6004, 0x6e: 0x6004, 0x6f: 0x6004, - 0x70: 0x6004, 0x71: 0x6004, 0x72: 0x6004, 0x73: 0x6004, 0x74: 0x6004, 0x75: 0x6004, - 0x76: 0x6004, 0x77: 0x6004, 0x78: 0x6004, 0x79: 0x6004, 0x7a: 0x6004, 0x7b: 0x6004, - 0x7c: 0x6004, 0x7d: 0x6004, 0x7e: 0x6004, - // Block 0x2, offset 0x80 - // Block 0x3, offset 0xc0 - 0xe1: 0x2000, 0xe2: 0x6005, 0xe3: 0x6005, - 0xe4: 0x2000, 0xe5: 0x6006, 0xe6: 0x6005, 0xe7: 0x2000, 0xe8: 0x2000, - 0xea: 0x2000, 0xec: 0x6007, 0xed: 0x2000, 0xee: 0x2000, 0xef: 0x6008, - 0xf0: 0x2000, 0xf1: 0x2000, 0xf2: 0x2000, 0xf3: 0x2000, 0xf4: 0x2000, - 0xf6: 0x2000, 0xf7: 0x2000, 0xf8: 0x2000, 0xf9: 0x2000, 0xfa: 0x2000, - 0xfc: 0x2000, 0xfd: 0x2000, 0xfe: 0x2000, 0xff: 0x2000, - // Block 0x4, offset 0x100 - 0x106: 0x2000, - 0x110: 0x2000, - 0x117: 0x2000, - 0x118: 0x2000, - 0x11e: 0x2000, 0x11f: 0x2000, 0x120: 0x2000, 0x121: 0x2000, - 0x126: 0x2000, 0x128: 0x2000, 0x129: 0x2000, - 0x12a: 0x2000, 0x12c: 0x2000, 0x12d: 0x2000, - 0x130: 0x2000, 0x132: 0x2000, 0x133: 0x2000, - 0x137: 0x2000, 0x138: 0x2000, 0x139: 0x2000, 0x13a: 0x2000, - 0x13c: 0x2000, 0x13e: 0x2000, - // Block 0x5, offset 0x140 - 0x141: 0x2000, - 0x151: 0x2000, - 0x153: 0x2000, - 0x15b: 0x2000, - 0x166: 0x2000, 0x167: 0x2000, - 0x16b: 0x2000, - 0x171: 0x2000, 0x172: 0x2000, 0x173: 0x2000, - 0x178: 0x2000, - 0x17f: 0x2000, - // Block 0x6, offset 0x180 - 0x180: 0x2000, 0x181: 0x2000, 0x182: 0x2000, 0x184: 0x2000, - 0x188: 0x2000, 0x189: 0x2000, 0x18a: 0x2000, 0x18b: 0x2000, - 0x18d: 0x2000, - 0x192: 0x2000, 0x193: 0x2000, - 0x1a6: 0x2000, 0x1a7: 0x2000, - 0x1ab: 0x2000, - // Block 0x7, offset 0x1c0 - 0x1ce: 0x2000, 0x1d0: 0x2000, - 0x1d2: 0x2000, 0x1d4: 0x2000, 0x1d6: 0x2000, - 0x1d8: 0x2000, 0x1da: 0x2000, 0x1dc: 0x2000, - // Block 0x8, offset 0x200 - 0x211: 0x2000, - 0x221: 0x2000, - // Block 0x9, offset 0x240 - 0x244: 0x2000, - 0x247: 0x2000, 0x249: 0x2000, 0x24a: 0x2000, 0x24b: 0x2000, - 0x24d: 0x2000, 0x250: 0x2000, - 0x258: 0x2000, 0x259: 0x2000, 0x25a: 0x2000, 0x25b: 0x2000, 0x25d: 0x2000, - 0x25f: 0x2000, - // Block 0xa, offset 0x280 - 0x280: 0x2000, 0x281: 0x2000, 0x282: 0x2000, 0x283: 0x2000, 0x284: 0x2000, 0x285: 0x2000, - 0x286: 0x2000, 0x287: 0x2000, 0x288: 0x2000, 0x289: 0x2000, 0x28a: 0x2000, 0x28b: 0x2000, - 0x28c: 0x2000, 0x28d: 0x2000, 0x28e: 0x2000, 0x28f: 0x2000, 0x290: 0x2000, 0x291: 0x2000, - 0x292: 0x2000, 0x293: 0x2000, 0x294: 0x2000, 0x295: 0x2000, 0x296: 0x2000, 0x297: 0x2000, - 0x298: 0x2000, 0x299: 0x2000, 0x29a: 0x2000, 0x29b: 0x2000, 0x29c: 0x2000, 0x29d: 0x2000, - 0x29e: 0x2000, 0x29f: 0x2000, 0x2a0: 0x2000, 0x2a1: 0x2000, 0x2a2: 0x2000, 0x2a3: 0x2000, - 0x2a4: 0x2000, 0x2a5: 0x2000, 0x2a6: 0x2000, 0x2a7: 0x2000, 0x2a8: 0x2000, 0x2a9: 0x2000, - 0x2aa: 0x2000, 0x2ab: 0x2000, 0x2ac: 0x2000, 0x2ad: 0x2000, 0x2ae: 0x2000, 0x2af: 0x2000, - 0x2b0: 0x2000, 0x2b1: 0x2000, 0x2b2: 0x2000, 0x2b3: 0x2000, 0x2b4: 0x2000, 0x2b5: 0x2000, - 0x2b6: 0x2000, 0x2b7: 0x2000, 0x2b8: 0x2000, 0x2b9: 0x2000, 0x2ba: 0x2000, 0x2bb: 0x2000, - 0x2bc: 0x2000, 0x2bd: 0x2000, 0x2be: 0x2000, 0x2bf: 0x2000, - // Block 0xb, offset 0x2c0 - 0x2c0: 0x2000, 0x2c1: 0x2000, 0x2c2: 0x2000, 0x2c3: 0x2000, 0x2c4: 0x2000, 0x2c5: 0x2000, - 0x2c6: 0x2000, 0x2c7: 0x2000, 0x2c8: 0x2000, 0x2c9: 0x2000, 0x2ca: 0x2000, 0x2cb: 0x2000, - 0x2cc: 0x2000, 0x2cd: 0x2000, 0x2ce: 0x2000, 0x2cf: 0x2000, 0x2d0: 0x2000, 0x2d1: 0x2000, - 0x2d2: 0x2000, 0x2d3: 0x2000, 0x2d4: 0x2000, 0x2d5: 0x2000, 0x2d6: 0x2000, 0x2d7: 0x2000, - 0x2d8: 0x2000, 0x2d9: 0x2000, 0x2da: 0x2000, 0x2db: 0x2000, 0x2dc: 0x2000, 0x2dd: 0x2000, - 0x2de: 0x2000, 0x2df: 0x2000, 0x2e0: 0x2000, 0x2e1: 0x2000, 0x2e2: 0x2000, 0x2e3: 0x2000, - 0x2e4: 0x2000, 0x2e5: 0x2000, 0x2e6: 0x2000, 0x2e7: 0x2000, 0x2e8: 0x2000, 0x2e9: 0x2000, - 0x2ea: 0x2000, 0x2eb: 0x2000, 0x2ec: 0x2000, 0x2ed: 0x2000, 0x2ee: 0x2000, 0x2ef: 0x2000, - // Block 0xc, offset 0x300 - 0x311: 0x2000, - 0x312: 0x2000, 0x313: 0x2000, 0x314: 0x2000, 0x315: 0x2000, 0x316: 0x2000, 0x317: 0x2000, - 0x318: 0x2000, 0x319: 0x2000, 0x31a: 0x2000, 0x31b: 0x2000, 0x31c: 0x2000, 0x31d: 0x2000, - 0x31e: 0x2000, 0x31f: 0x2000, 0x320: 0x2000, 0x321: 0x2000, 0x323: 0x2000, - 0x324: 0x2000, 0x325: 0x2000, 0x326: 0x2000, 0x327: 0x2000, 0x328: 0x2000, 0x329: 0x2000, - 0x331: 0x2000, 0x332: 0x2000, 0x333: 0x2000, 0x334: 0x2000, 0x335: 0x2000, - 0x336: 0x2000, 0x337: 0x2000, 0x338: 0x2000, 0x339: 0x2000, 0x33a: 0x2000, 0x33b: 0x2000, - 0x33c: 0x2000, 0x33d: 0x2000, 0x33e: 0x2000, 0x33f: 0x2000, - // Block 0xd, offset 0x340 - 0x340: 0x2000, 0x341: 0x2000, 0x343: 0x2000, 0x344: 0x2000, 0x345: 0x2000, - 0x346: 0x2000, 0x347: 0x2000, 0x348: 0x2000, 0x349: 0x2000, - // Block 0xe, offset 0x380 - 0x381: 0x2000, - 0x390: 0x2000, 0x391: 0x2000, - 0x392: 0x2000, 0x393: 0x2000, 0x394: 0x2000, 0x395: 0x2000, 0x396: 0x2000, 0x397: 0x2000, - 0x398: 0x2000, 0x399: 0x2000, 0x39a: 0x2000, 0x39b: 0x2000, 0x39c: 0x2000, 0x39d: 0x2000, - 0x39e: 0x2000, 0x39f: 0x2000, 0x3a0: 0x2000, 0x3a1: 0x2000, 0x3a2: 0x2000, 0x3a3: 0x2000, - 0x3a4: 0x2000, 0x3a5: 0x2000, 0x3a6: 0x2000, 0x3a7: 0x2000, 0x3a8: 0x2000, 0x3a9: 0x2000, - 0x3aa: 0x2000, 0x3ab: 0x2000, 0x3ac: 0x2000, 0x3ad: 0x2000, 0x3ae: 0x2000, 0x3af: 0x2000, - 0x3b0: 0x2000, 0x3b1: 0x2000, 0x3b2: 0x2000, 0x3b3: 0x2000, 0x3b4: 0x2000, 0x3b5: 0x2000, - 0x3b6: 0x2000, 0x3b7: 0x2000, 0x3b8: 0x2000, 0x3b9: 0x2000, 0x3ba: 0x2000, 0x3bb: 0x2000, - 0x3bc: 0x2000, 0x3bd: 0x2000, 0x3be: 0x2000, 0x3bf: 0x2000, - // Block 0xf, offset 0x3c0 - 0x3c0: 0x2000, 0x3c1: 0x2000, 0x3c2: 0x2000, 0x3c3: 0x2000, 0x3c4: 0x2000, 0x3c5: 0x2000, - 0x3c6: 0x2000, 0x3c7: 0x2000, 0x3c8: 0x2000, 0x3c9: 0x2000, 0x3ca: 0x2000, 0x3cb: 0x2000, - 0x3cc: 0x2000, 0x3cd: 0x2000, 0x3ce: 0x2000, 0x3cf: 0x2000, 0x3d1: 0x2000, - // Block 0x10, offset 0x400 - 0x400: 0x4000, 0x401: 0x4000, 0x402: 0x4000, 0x403: 0x4000, 0x404: 0x4000, 0x405: 0x4000, - 0x406: 0x4000, 0x407: 0x4000, 0x408: 0x4000, 0x409: 0x4000, 0x40a: 0x4000, 0x40b: 0x4000, - 0x40c: 0x4000, 0x40d: 0x4000, 0x40e: 0x4000, 0x40f: 0x4000, 0x410: 0x4000, 0x411: 0x4000, - 0x412: 0x4000, 0x413: 0x4000, 0x414: 0x4000, 0x415: 0x4000, 0x416: 0x4000, 0x417: 0x4000, - 0x418: 0x4000, 0x419: 0x4000, 0x41a: 0x4000, 0x41b: 0x4000, 0x41c: 0x4000, 0x41d: 0x4000, - 0x41e: 0x4000, 0x41f: 0x4000, 0x420: 0x4000, 0x421: 0x4000, 0x422: 0x4000, 0x423: 0x4000, - 0x424: 0x4000, 0x425: 0x4000, 0x426: 0x4000, 0x427: 0x4000, 0x428: 0x4000, 0x429: 0x4000, - 0x42a: 0x4000, 0x42b: 0x4000, 0x42c: 0x4000, 0x42d: 0x4000, 0x42e: 0x4000, 0x42f: 0x4000, - 0x430: 0x4000, 0x431: 0x4000, 0x432: 0x4000, 0x433: 0x4000, 0x434: 0x4000, 0x435: 0x4000, - 0x436: 0x4000, 0x437: 0x4000, 0x438: 0x4000, 0x439: 0x4000, 0x43a: 0x4000, 0x43b: 0x4000, - 0x43c: 0x4000, 0x43d: 0x4000, 0x43e: 0x4000, 0x43f: 0x4000, - // Block 0x11, offset 0x440 - 0x440: 0x4000, 0x441: 0x4000, 0x442: 0x4000, 0x443: 0x4000, 0x444: 0x4000, 0x445: 0x4000, - 0x446: 0x4000, 0x447: 0x4000, 0x448: 0x4000, 0x449: 0x4000, 0x44a: 0x4000, 0x44b: 0x4000, - 0x44c: 0x4000, 0x44d: 0x4000, 0x44e: 0x4000, 0x44f: 0x4000, 0x450: 0x4000, 0x451: 0x4000, - 0x452: 0x4000, 0x453: 0x4000, 0x454: 0x4000, 0x455: 0x4000, 0x456: 0x4000, 0x457: 0x4000, - 0x458: 0x4000, 0x459: 0x4000, 0x45a: 0x4000, 0x45b: 0x4000, 0x45c: 0x4000, 0x45d: 0x4000, - 0x45e: 0x4000, 0x45f: 0x4000, - // Block 0x12, offset 0x480 - 0x490: 0x2000, - 0x493: 0x2000, 0x494: 0x2000, 0x495: 0x2000, 0x496: 0x2000, - 0x498: 0x2000, 0x499: 0x2000, 0x49c: 0x2000, 0x49d: 0x2000, - 0x4a0: 0x2000, 0x4a1: 0x2000, 0x4a2: 0x2000, - 0x4a4: 0x2000, 0x4a5: 0x2000, 0x4a6: 0x2000, 0x4a7: 0x2000, - 0x4b0: 0x2000, 0x4b2: 0x2000, 0x4b3: 0x2000, 0x4b5: 0x2000, - 0x4bb: 0x2000, - 0x4be: 0x2000, - // Block 0x13, offset 0x4c0 - 0x4f4: 0x2000, - 0x4ff: 0x2000, - // Block 0x14, offset 0x500 - 0x501: 0x2000, 0x502: 0x2000, 0x503: 0x2000, 0x504: 0x2000, - 0x529: 0xa009, - 0x52c: 0x2000, - // Block 0x15, offset 0x540 - 0x543: 0x2000, 0x545: 0x2000, - 0x549: 0x2000, - 0x553: 0x2000, 0x556: 0x2000, - 0x561: 0x2000, 0x562: 0x2000, - 0x566: 0x2000, - 0x56b: 0x2000, - // Block 0x16, offset 0x580 - 0x593: 0x2000, 0x594: 0x2000, - 0x59b: 0x2000, 0x59c: 0x2000, 0x59d: 0x2000, - 0x59e: 0x2000, 0x5a0: 0x2000, 0x5a1: 0x2000, 0x5a2: 0x2000, 0x5a3: 0x2000, - 0x5a4: 0x2000, 0x5a5: 0x2000, 0x5a6: 0x2000, 0x5a7: 0x2000, 0x5a8: 0x2000, 0x5a9: 0x2000, - 0x5aa: 0x2000, 0x5ab: 0x2000, - 0x5b0: 0x2000, 0x5b1: 0x2000, 0x5b2: 0x2000, 0x5b3: 0x2000, 0x5b4: 0x2000, 0x5b5: 0x2000, - 0x5b6: 0x2000, 0x5b7: 0x2000, 0x5b8: 0x2000, 0x5b9: 0x2000, - // Block 0x17, offset 0x5c0 - 0x5c9: 0x2000, - 0x5d0: 0x200a, 0x5d1: 0x200b, - 0x5d2: 0x200a, 0x5d3: 0x200c, 0x5d4: 0x2000, 0x5d5: 0x2000, 0x5d6: 0x2000, 0x5d7: 0x2000, - 0x5d8: 0x2000, 0x5d9: 0x2000, - 0x5f8: 0x2000, 0x5f9: 0x2000, - // Block 0x18, offset 0x600 - 0x612: 0x2000, 0x614: 0x2000, - 0x627: 0x2000, - // Block 0x19, offset 0x640 - 0x640: 0x2000, 0x642: 0x2000, 0x643: 0x2000, - 0x647: 0x2000, 0x648: 0x2000, 0x64b: 0x2000, - 0x64f: 0x2000, 0x651: 0x2000, - 0x655: 0x2000, - 0x65a: 0x2000, 0x65d: 0x2000, - 0x65e: 0x2000, 0x65f: 0x2000, 0x660: 0x2000, 0x663: 0x2000, - 0x665: 0x2000, 0x667: 0x2000, 0x668: 0x2000, 0x669: 0x2000, - 0x66a: 0x2000, 0x66b: 0x2000, 0x66c: 0x2000, 0x66e: 0x2000, - 0x674: 0x2000, 0x675: 0x2000, - 0x676: 0x2000, 0x677: 0x2000, - 0x67c: 0x2000, 0x67d: 0x2000, - // Block 0x1a, offset 0x680 - 0x688: 0x2000, - 0x68c: 0x2000, - 0x692: 0x2000, - 0x6a0: 0x2000, 0x6a1: 0x2000, - 0x6a4: 0x2000, 0x6a5: 0x2000, 0x6a6: 0x2000, 0x6a7: 0x2000, - 0x6aa: 0x2000, 0x6ab: 0x2000, 0x6ae: 0x2000, 0x6af: 0x2000, - // Block 0x1b, offset 0x6c0 - 0x6c2: 0x2000, 0x6c3: 0x2000, - 0x6c6: 0x2000, 0x6c7: 0x2000, - 0x6d5: 0x2000, - 0x6d9: 0x2000, - 0x6e5: 0x2000, - 0x6ff: 0x2000, - // Block 0x1c, offset 0x700 - 0x712: 0x2000, - 0x71a: 0x4000, 0x71b: 0x4000, - 0x729: 0x4000, - 0x72a: 0x4000, - // Block 0x1d, offset 0x740 - 0x769: 0x4000, - 0x76a: 0x4000, 0x76b: 0x4000, 0x76c: 0x4000, - 0x770: 0x4000, 0x773: 0x4000, - // Block 0x1e, offset 0x780 - 0x7a0: 0x2000, 0x7a1: 0x2000, 0x7a2: 0x2000, 0x7a3: 0x2000, - 0x7a4: 0x2000, 0x7a5: 0x2000, 0x7a6: 0x2000, 0x7a7: 0x2000, 0x7a8: 0x2000, 0x7a9: 0x2000, - 0x7aa: 0x2000, 0x7ab: 0x2000, 0x7ac: 0x2000, 0x7ad: 0x2000, 0x7ae: 0x2000, 0x7af: 0x2000, - 0x7b0: 0x2000, 0x7b1: 0x2000, 0x7b2: 0x2000, 0x7b3: 0x2000, 0x7b4: 0x2000, 0x7b5: 0x2000, - 0x7b6: 0x2000, 0x7b7: 0x2000, 0x7b8: 0x2000, 0x7b9: 0x2000, 0x7ba: 0x2000, 0x7bb: 0x2000, - 0x7bc: 0x2000, 0x7bd: 0x2000, 0x7be: 0x2000, 0x7bf: 0x2000, - // Block 0x1f, offset 0x7c0 - 0x7c0: 0x2000, 0x7c1: 0x2000, 0x7c2: 0x2000, 0x7c3: 0x2000, 0x7c4: 0x2000, 0x7c5: 0x2000, - 0x7c6: 0x2000, 0x7c7: 0x2000, 0x7c8: 0x2000, 0x7c9: 0x2000, 0x7ca: 0x2000, 0x7cb: 0x2000, - 0x7cc: 0x2000, 0x7cd: 0x2000, 0x7ce: 0x2000, 0x7cf: 0x2000, 0x7d0: 0x2000, 0x7d1: 0x2000, - 0x7d2: 0x2000, 0x7d3: 0x2000, 0x7d4: 0x2000, 0x7d5: 0x2000, 0x7d6: 0x2000, 0x7d7: 0x2000, - 0x7d8: 0x2000, 0x7d9: 0x2000, 0x7da: 0x2000, 0x7db: 0x2000, 0x7dc: 0x2000, 0x7dd: 0x2000, - 0x7de: 0x2000, 0x7df: 0x2000, 0x7e0: 0x2000, 0x7e1: 0x2000, 0x7e2: 0x2000, 0x7e3: 0x2000, - 0x7e4: 0x2000, 0x7e5: 0x2000, 0x7e6: 0x2000, 0x7e7: 0x2000, 0x7e8: 0x2000, 0x7e9: 0x2000, - 0x7eb: 0x2000, 0x7ec: 0x2000, 0x7ed: 0x2000, 0x7ee: 0x2000, 0x7ef: 0x2000, - 0x7f0: 0x2000, 0x7f1: 0x2000, 0x7f2: 0x2000, 0x7f3: 0x2000, 0x7f4: 0x2000, 0x7f5: 0x2000, - 0x7f6: 0x2000, 0x7f7: 0x2000, 0x7f8: 0x2000, 0x7f9: 0x2000, 0x7fa: 0x2000, 0x7fb: 0x2000, - 0x7fc: 0x2000, 0x7fd: 0x2000, 0x7fe: 0x2000, 0x7ff: 0x2000, - // Block 0x20, offset 0x800 - 0x800: 0x2000, 0x801: 0x2000, 0x802: 0x200d, 0x803: 0x2000, 0x804: 0x2000, 0x805: 0x2000, - 0x806: 0x2000, 0x807: 0x2000, 0x808: 0x2000, 0x809: 0x2000, 0x80a: 0x2000, 0x80b: 0x2000, - 0x80c: 0x2000, 0x80d: 0x2000, 0x80e: 0x2000, 0x80f: 0x2000, 0x810: 0x2000, 0x811: 0x2000, - 0x812: 0x2000, 0x813: 0x2000, 0x814: 0x2000, 0x815: 0x2000, 0x816: 0x2000, 0x817: 0x2000, - 0x818: 0x2000, 0x819: 0x2000, 0x81a: 0x2000, 0x81b: 0x2000, 0x81c: 0x2000, 0x81d: 0x2000, - 0x81e: 0x2000, 0x81f: 0x2000, 0x820: 0x2000, 0x821: 0x2000, 0x822: 0x2000, 0x823: 0x2000, - 0x824: 0x2000, 0x825: 0x2000, 0x826: 0x2000, 0x827: 0x2000, 0x828: 0x2000, 0x829: 0x2000, - 0x82a: 0x2000, 0x82b: 0x2000, 0x82c: 0x2000, 0x82d: 0x2000, 0x82e: 0x2000, 0x82f: 0x2000, - 0x830: 0x2000, 0x831: 0x2000, 0x832: 0x2000, 0x833: 0x2000, 0x834: 0x2000, 0x835: 0x2000, - 0x836: 0x2000, 0x837: 0x2000, 0x838: 0x2000, 0x839: 0x2000, 0x83a: 0x2000, 0x83b: 0x2000, - 0x83c: 0x2000, 0x83d: 0x2000, 0x83e: 0x2000, 0x83f: 0x2000, - // Block 0x21, offset 0x840 - 0x840: 0x2000, 0x841: 0x2000, 0x842: 0x2000, 0x843: 0x2000, 0x844: 0x2000, 0x845: 0x2000, - 0x846: 0x2000, 0x847: 0x2000, 0x848: 0x2000, 0x849: 0x2000, 0x84a: 0x2000, 0x84b: 0x2000, - 0x850: 0x2000, 0x851: 0x2000, - 0x852: 0x2000, 0x853: 0x2000, 0x854: 0x2000, 0x855: 0x2000, 0x856: 0x2000, 0x857: 0x2000, - 0x858: 0x2000, 0x859: 0x2000, 0x85a: 0x2000, 0x85b: 0x2000, 0x85c: 0x2000, 0x85d: 0x2000, - 0x85e: 0x2000, 0x85f: 0x2000, 0x860: 0x2000, 0x861: 0x2000, 0x862: 0x2000, 0x863: 0x2000, - 0x864: 0x2000, 0x865: 0x2000, 0x866: 0x2000, 0x867: 0x2000, 0x868: 0x2000, 0x869: 0x2000, - 0x86a: 0x2000, 0x86b: 0x2000, 0x86c: 0x2000, 0x86d: 0x2000, 0x86e: 0x2000, 0x86f: 0x2000, - 0x870: 0x2000, 0x871: 0x2000, 0x872: 0x2000, 0x873: 0x2000, - // Block 0x22, offset 0x880 - 0x880: 0x2000, 0x881: 0x2000, 0x882: 0x2000, 0x883: 0x2000, 0x884: 0x2000, 0x885: 0x2000, - 0x886: 0x2000, 0x887: 0x2000, 0x888: 0x2000, 0x889: 0x2000, 0x88a: 0x2000, 0x88b: 0x2000, - 0x88c: 0x2000, 0x88d: 0x2000, 0x88e: 0x2000, 0x88f: 0x2000, - 0x892: 0x2000, 0x893: 0x2000, 0x894: 0x2000, 0x895: 0x2000, - 0x8a0: 0x200e, 0x8a1: 0x2000, 0x8a3: 0x2000, - 0x8a4: 0x2000, 0x8a5: 0x2000, 0x8a6: 0x2000, 0x8a7: 0x2000, 0x8a8: 0x2000, 0x8a9: 0x2000, - 0x8b2: 0x2000, 0x8b3: 0x2000, - 0x8b6: 0x2000, 0x8b7: 0x2000, - 0x8bc: 0x2000, 0x8bd: 0x2000, - // Block 0x23, offset 0x8c0 - 0x8c0: 0x2000, 0x8c1: 0x2000, - 0x8c6: 0x2000, 0x8c7: 0x2000, 0x8c8: 0x2000, 0x8cb: 0x200f, - 0x8ce: 0x2000, 0x8cf: 0x2000, 0x8d0: 0x2000, 0x8d1: 0x2000, - 0x8e2: 0x2000, 0x8e3: 0x2000, - 0x8e4: 0x2000, 0x8e5: 0x2000, - 0x8ef: 0x2000, - 0x8fd: 0x4000, 0x8fe: 0x4000, - // Block 0x24, offset 0x900 - 0x905: 0x2000, - 0x906: 0x2000, 0x909: 0x2000, - 0x90e: 0x2000, 0x90f: 0x2000, - 0x914: 0x4000, 0x915: 0x4000, - 0x91c: 0x2000, - 0x91e: 0x2000, - // Block 0x25, offset 0x940 - 0x940: 0x2000, 0x942: 0x2000, - 0x948: 0x4000, 0x949: 0x4000, 0x94a: 0x4000, 0x94b: 0x4000, - 0x94c: 0x4000, 0x94d: 0x4000, 0x94e: 0x4000, 0x94f: 0x4000, 0x950: 0x4000, 0x951: 0x4000, - 0x952: 0x4000, 0x953: 0x4000, - 0x960: 0x2000, 0x961: 0x2000, 0x963: 0x2000, - 0x964: 0x2000, 0x965: 0x2000, 0x967: 0x2000, 0x968: 0x2000, 0x969: 0x2000, - 0x96a: 0x2000, 0x96c: 0x2000, 0x96d: 0x2000, 0x96f: 0x2000, - 0x97f: 0x4000, - // Block 0x26, offset 0x980 - 0x993: 0x4000, - 0x99e: 0x2000, 0x99f: 0x2000, 0x9a1: 0x4000, - 0x9aa: 0x4000, 0x9ab: 0x4000, - 0x9bd: 0x4000, 0x9be: 0x4000, 0x9bf: 0x2000, - // Block 0x27, offset 0x9c0 - 0x9c4: 0x4000, 0x9c5: 0x4000, - 0x9c6: 0x2000, 0x9c7: 0x2000, 0x9c8: 0x2000, 0x9c9: 0x2000, 0x9ca: 0x2000, 0x9cb: 0x2000, - 0x9cc: 0x2000, 0x9cd: 0x2000, 0x9ce: 0x4000, 0x9cf: 0x2000, 0x9d0: 0x2000, 0x9d1: 0x2000, - 0x9d2: 0x2000, 0x9d3: 0x2000, 0x9d4: 0x4000, 0x9d5: 0x2000, 0x9d6: 0x2000, 0x9d7: 0x2000, - 0x9d8: 0x2000, 0x9d9: 0x2000, 0x9da: 0x2000, 0x9db: 0x2000, 0x9dc: 0x2000, 0x9dd: 0x2000, - 0x9de: 0x2000, 0x9df: 0x2000, 0x9e0: 0x2000, 0x9e1: 0x2000, 0x9e3: 0x2000, - 0x9e8: 0x2000, 0x9e9: 0x2000, - 0x9ea: 0x4000, 0x9eb: 0x2000, 0x9ec: 0x2000, 0x9ed: 0x2000, 0x9ee: 0x2000, 0x9ef: 0x2000, - 0x9f0: 0x2000, 0x9f1: 0x2000, 0x9f2: 0x4000, 0x9f3: 0x4000, 0x9f4: 0x2000, 0x9f5: 0x4000, - 0x9f6: 0x2000, 0x9f7: 0x2000, 0x9f8: 0x2000, 0x9f9: 0x2000, 0x9fa: 0x4000, 0x9fb: 0x2000, - 0x9fc: 0x2000, 0x9fd: 0x4000, 0x9fe: 0x2000, 0x9ff: 0x2000, - // Block 0x28, offset 0xa00 - 0xa05: 0x4000, - 0xa0a: 0x4000, 0xa0b: 0x4000, - 0xa28: 0x4000, - 0xa3d: 0x2000, - // Block 0x29, offset 0xa40 - 0xa4c: 0x4000, 0xa4e: 0x4000, - 0xa53: 0x4000, 0xa54: 0x4000, 0xa55: 0x4000, 0xa57: 0x4000, - 0xa76: 0x2000, 0xa77: 0x2000, 0xa78: 0x2000, 0xa79: 0x2000, 0xa7a: 0x2000, 0xa7b: 0x2000, - 0xa7c: 0x2000, 0xa7d: 0x2000, 0xa7e: 0x2000, 0xa7f: 0x2000, - // Block 0x2a, offset 0xa80 - 0xa95: 0x4000, 0xa96: 0x4000, 0xa97: 0x4000, - 0xab0: 0x4000, - 0xabf: 0x4000, - // Block 0x2b, offset 0xac0 - 0xae6: 0x6000, 0xae7: 0x6000, 0xae8: 0x6000, 0xae9: 0x6000, - 0xaea: 0x6000, 0xaeb: 0x6000, 0xaec: 0x6000, 0xaed: 0x6000, - // Block 0x2c, offset 0xb00 - 0xb05: 0x6010, - 0xb06: 0x6011, - // Block 0x2d, offset 0xb40 - 0xb5b: 0x4000, 0xb5c: 0x4000, - // Block 0x2e, offset 0xb80 - 0xb90: 0x4000, - 0xb95: 0x4000, 0xb96: 0x2000, 0xb97: 0x2000, - 0xb98: 0x2000, 0xb99: 0x2000, - // Block 0x2f, offset 0xbc0 - 0xbc0: 0x4000, 0xbc1: 0x4000, 0xbc2: 0x4000, 0xbc3: 0x4000, 0xbc4: 0x4000, 0xbc5: 0x4000, - 0xbc6: 0x4000, 0xbc7: 0x4000, 0xbc8: 0x4000, 0xbc9: 0x4000, 0xbca: 0x4000, 0xbcb: 0x4000, - 0xbcc: 0x4000, 0xbcd: 0x4000, 0xbce: 0x4000, 0xbcf: 0x4000, 0xbd0: 0x4000, 0xbd1: 0x4000, - 0xbd2: 0x4000, 0xbd3: 0x4000, 0xbd4: 0x4000, 0xbd5: 0x4000, 0xbd6: 0x4000, 0xbd7: 0x4000, - 0xbd8: 0x4000, 0xbd9: 0x4000, 0xbdb: 0x4000, 0xbdc: 0x4000, 0xbdd: 0x4000, - 0xbde: 0x4000, 0xbdf: 0x4000, 0xbe0: 0x4000, 0xbe1: 0x4000, 0xbe2: 0x4000, 0xbe3: 0x4000, - 0xbe4: 0x4000, 0xbe5: 0x4000, 0xbe6: 0x4000, 0xbe7: 0x4000, 0xbe8: 0x4000, 0xbe9: 0x4000, - 0xbea: 0x4000, 0xbeb: 0x4000, 0xbec: 0x4000, 0xbed: 0x4000, 0xbee: 0x4000, 0xbef: 0x4000, - 0xbf0: 0x4000, 0xbf1: 0x4000, 0xbf2: 0x4000, 0xbf3: 0x4000, 0xbf4: 0x4000, 0xbf5: 0x4000, - 0xbf6: 0x4000, 0xbf7: 0x4000, 0xbf8: 0x4000, 0xbf9: 0x4000, 0xbfa: 0x4000, 0xbfb: 0x4000, - 0xbfc: 0x4000, 0xbfd: 0x4000, 0xbfe: 0x4000, 0xbff: 0x4000, - // Block 0x30, offset 0xc00 - 0xc00: 0x4000, 0xc01: 0x4000, 0xc02: 0x4000, 0xc03: 0x4000, 0xc04: 0x4000, 0xc05: 0x4000, - 0xc06: 0x4000, 0xc07: 0x4000, 0xc08: 0x4000, 0xc09: 0x4000, 0xc0a: 0x4000, 0xc0b: 0x4000, - 0xc0c: 0x4000, 0xc0d: 0x4000, 0xc0e: 0x4000, 0xc0f: 0x4000, 0xc10: 0x4000, 0xc11: 0x4000, - 0xc12: 0x4000, 0xc13: 0x4000, 0xc14: 0x4000, 0xc15: 0x4000, 0xc16: 0x4000, 0xc17: 0x4000, - 0xc18: 0x4000, 0xc19: 0x4000, 0xc1a: 0x4000, 0xc1b: 0x4000, 0xc1c: 0x4000, 0xc1d: 0x4000, - 0xc1e: 0x4000, 0xc1f: 0x4000, 0xc20: 0x4000, 0xc21: 0x4000, 0xc22: 0x4000, 0xc23: 0x4000, - 0xc24: 0x4000, 0xc25: 0x4000, 0xc26: 0x4000, 0xc27: 0x4000, 0xc28: 0x4000, 0xc29: 0x4000, - 0xc2a: 0x4000, 0xc2b: 0x4000, 0xc2c: 0x4000, 0xc2d: 0x4000, 0xc2e: 0x4000, 0xc2f: 0x4000, - 0xc30: 0x4000, 0xc31: 0x4000, 0xc32: 0x4000, 0xc33: 0x4000, - // Block 0x31, offset 0xc40 - 0xc40: 0x4000, 0xc41: 0x4000, 0xc42: 0x4000, 0xc43: 0x4000, 0xc44: 0x4000, 0xc45: 0x4000, - 0xc46: 0x4000, 0xc47: 0x4000, 0xc48: 0x4000, 0xc49: 0x4000, 0xc4a: 0x4000, 0xc4b: 0x4000, - 0xc4c: 0x4000, 0xc4d: 0x4000, 0xc4e: 0x4000, 0xc4f: 0x4000, 0xc50: 0x4000, 0xc51: 0x4000, - 0xc52: 0x4000, 0xc53: 0x4000, 0xc54: 0x4000, 0xc55: 0x4000, - 0xc70: 0x4000, 0xc71: 0x4000, 0xc72: 0x4000, 0xc73: 0x4000, 0xc74: 0x4000, 0xc75: 0x4000, - 0xc76: 0x4000, 0xc77: 0x4000, 0xc78: 0x4000, 0xc79: 0x4000, 0xc7a: 0x4000, 0xc7b: 0x4000, - // Block 0x32, offset 0xc80 - 0xc80: 0x9012, 0xc81: 0x4013, 0xc82: 0x4014, 0xc83: 0x4000, 0xc84: 0x4000, 0xc85: 0x4000, - 0xc86: 0x4000, 0xc87: 0x4000, 0xc88: 0x4000, 0xc89: 0x4000, 0xc8a: 0x4000, 0xc8b: 0x4000, - 0xc8c: 0x4015, 0xc8d: 0x4015, 0xc8e: 0x4000, 0xc8f: 0x4000, 0xc90: 0x4000, 0xc91: 0x4000, - 0xc92: 0x4000, 0xc93: 0x4000, 0xc94: 0x4000, 0xc95: 0x4000, 0xc96: 0x4000, 0xc97: 0x4000, - 0xc98: 0x4000, 0xc99: 0x4000, 0xc9a: 0x4000, 0xc9b: 0x4000, 0xc9c: 0x4000, 0xc9d: 0x4000, - 0xc9e: 0x4000, 0xc9f: 0x4000, 0xca0: 0x4000, 0xca1: 0x4000, 0xca2: 0x4000, 0xca3: 0x4000, - 0xca4: 0x4000, 0xca5: 0x4000, 0xca6: 0x4000, 0xca7: 0x4000, 0xca8: 0x4000, 0xca9: 0x4000, - 0xcaa: 0x4000, 0xcab: 0x4000, 0xcac: 0x4000, 0xcad: 0x4000, 0xcae: 0x4000, 0xcaf: 0x4000, - 0xcb0: 0x4000, 0xcb1: 0x4000, 0xcb2: 0x4000, 0xcb3: 0x4000, 0xcb4: 0x4000, 0xcb5: 0x4000, - 0xcb6: 0x4000, 0xcb7: 0x4000, 0xcb8: 0x4000, 0xcb9: 0x4000, 0xcba: 0x4000, 0xcbb: 0x4000, - 0xcbc: 0x4000, 0xcbd: 0x4000, 0xcbe: 0x4000, - // Block 0x33, offset 0xcc0 - 0xcc1: 0x4000, 0xcc2: 0x4000, 0xcc3: 0x4000, 0xcc4: 0x4000, 0xcc5: 0x4000, - 0xcc6: 0x4000, 0xcc7: 0x4000, 0xcc8: 0x4000, 0xcc9: 0x4000, 0xcca: 0x4000, 0xccb: 0x4000, - 0xccc: 0x4000, 0xccd: 0x4000, 0xcce: 0x4000, 0xccf: 0x4000, 0xcd0: 0x4000, 0xcd1: 0x4000, - 0xcd2: 0x4000, 0xcd3: 0x4000, 0xcd4: 0x4000, 0xcd5: 0x4000, 0xcd6: 0x4000, 0xcd7: 0x4000, - 0xcd8: 0x4000, 0xcd9: 0x4000, 0xcda: 0x4000, 0xcdb: 0x4000, 0xcdc: 0x4000, 0xcdd: 0x4000, - 0xcde: 0x4000, 0xcdf: 0x4000, 0xce0: 0x4000, 0xce1: 0x4000, 0xce2: 0x4000, 0xce3: 0x4000, - 0xce4: 0x4000, 0xce5: 0x4000, 0xce6: 0x4000, 0xce7: 0x4000, 0xce8: 0x4000, 0xce9: 0x4000, - 0xcea: 0x4000, 0xceb: 0x4000, 0xcec: 0x4000, 0xced: 0x4000, 0xcee: 0x4000, 0xcef: 0x4000, - 0xcf0: 0x4000, 0xcf1: 0x4000, 0xcf2: 0x4000, 0xcf3: 0x4000, 0xcf4: 0x4000, 0xcf5: 0x4000, - 0xcf6: 0x4000, 0xcf7: 0x4000, 0xcf8: 0x4000, 0xcf9: 0x4000, 0xcfa: 0x4000, 0xcfb: 0x4000, - 0xcfc: 0x4000, 0xcfd: 0x4000, 0xcfe: 0x4000, 0xcff: 0x4000, - // Block 0x34, offset 0xd00 - 0xd00: 0x4000, 0xd01: 0x4000, 0xd02: 0x4000, 0xd03: 0x4000, 0xd04: 0x4000, 0xd05: 0x4000, - 0xd06: 0x4000, 0xd07: 0x4000, 0xd08: 0x4000, 0xd09: 0x4000, 0xd0a: 0x4000, 0xd0b: 0x4000, - 0xd0c: 0x4000, 0xd0d: 0x4000, 0xd0e: 0x4000, 0xd0f: 0x4000, 0xd10: 0x4000, 0xd11: 0x4000, - 0xd12: 0x4000, 0xd13: 0x4000, 0xd14: 0x4000, 0xd15: 0x4000, 0xd16: 0x4000, - 0xd19: 0x4016, 0xd1a: 0x4017, 0xd1b: 0x4000, 0xd1c: 0x4000, 0xd1d: 0x4000, - 0xd1e: 0x4000, 0xd1f: 0x4000, 0xd20: 0x4000, 0xd21: 0x4018, 0xd22: 0x4019, 0xd23: 0x401a, - 0xd24: 0x401b, 0xd25: 0x401c, 0xd26: 0x401d, 0xd27: 0x401e, 0xd28: 0x401f, 0xd29: 0x4020, - 0xd2a: 0x4021, 0xd2b: 0x4022, 0xd2c: 0x4000, 0xd2d: 0x4010, 0xd2e: 0x4000, 0xd2f: 0x4023, - 0xd30: 0x4000, 0xd31: 0x4024, 0xd32: 0x4000, 0xd33: 0x4025, 0xd34: 0x4000, 0xd35: 0x4026, - 0xd36: 0x4000, 0xd37: 0x401a, 0xd38: 0x4000, 0xd39: 0x4027, 0xd3a: 0x4000, 0xd3b: 0x4028, - 0xd3c: 0x4000, 0xd3d: 0x4020, 0xd3e: 0x4000, 0xd3f: 0x4029, - // Block 0x35, offset 0xd40 - 0xd40: 0x4000, 0xd41: 0x402a, 0xd42: 0x4000, 0xd43: 0x402b, 0xd44: 0x402c, 0xd45: 0x4000, - 0xd46: 0x4017, 0xd47: 0x4000, 0xd48: 0x402d, 0xd49: 0x4000, 0xd4a: 0x402e, 0xd4b: 0x402f, - 0xd4c: 0x4030, 0xd4d: 0x4017, 0xd4e: 0x4016, 0xd4f: 0x4017, 0xd50: 0x4000, 0xd51: 0x4000, - 0xd52: 0x4031, 0xd53: 0x4000, 0xd54: 0x4000, 0xd55: 0x4031, 0xd56: 0x4000, 0xd57: 0x4000, - 0xd58: 0x4032, 0xd59: 0x4000, 0xd5a: 0x4000, 0xd5b: 0x4032, 0xd5c: 0x4000, 0xd5d: 0x4000, - 0xd5e: 0x4033, 0xd5f: 0x402e, 0xd60: 0x4034, 0xd61: 0x4035, 0xd62: 0x4034, 0xd63: 0x4036, - 0xd64: 0x4037, 0xd65: 0x4024, 0xd66: 0x4035, 0xd67: 0x4025, 0xd68: 0x4038, 0xd69: 0x4038, - 0xd6a: 0x4039, 0xd6b: 0x4039, 0xd6c: 0x403a, 0xd6d: 0x403a, 0xd6e: 0x4000, 0xd6f: 0x4035, - 0xd70: 0x4000, 0xd71: 0x4000, 0xd72: 0x403b, 0xd73: 0x403c, 0xd74: 0x4000, 0xd75: 0x4000, - 0xd76: 0x4000, 0xd77: 0x4000, 0xd78: 0x4000, 0xd79: 0x4000, 0xd7a: 0x4000, 0xd7b: 0x403d, - 0xd7c: 0x401c, 0xd7d: 0x4000, 0xd7e: 0x4000, 0xd7f: 0x4000, - // Block 0x36, offset 0xd80 - 0xd85: 0x4000, - 0xd86: 0x4000, 0xd87: 0x4000, 0xd88: 0x4000, 0xd89: 0x4000, 0xd8a: 0x4000, 0xd8b: 0x4000, - 0xd8c: 0x4000, 0xd8d: 0x4000, 0xd8e: 0x4000, 0xd8f: 0x4000, 0xd90: 0x4000, 0xd91: 0x4000, - 0xd92: 0x4000, 0xd93: 0x4000, 0xd94: 0x4000, 0xd95: 0x4000, 0xd96: 0x4000, 0xd97: 0x4000, - 0xd98: 0x4000, 0xd99: 0x4000, 0xd9a: 0x4000, 0xd9b: 0x4000, 0xd9c: 0x4000, 0xd9d: 0x4000, - 0xd9e: 0x4000, 0xd9f: 0x4000, 0xda0: 0x4000, 0xda1: 0x4000, 0xda2: 0x4000, 0xda3: 0x4000, - 0xda4: 0x4000, 0xda5: 0x4000, 0xda6: 0x4000, 0xda7: 0x4000, 0xda8: 0x4000, 0xda9: 0x4000, - 0xdaa: 0x4000, 0xdab: 0x4000, 0xdac: 0x4000, 0xdad: 0x4000, 0xdae: 0x4000, 0xdaf: 0x4000, - 0xdb1: 0x403e, 0xdb2: 0x403e, 0xdb3: 0x403e, 0xdb4: 0x403e, 0xdb5: 0x403e, - 0xdb6: 0x403e, 0xdb7: 0x403e, 0xdb8: 0x403e, 0xdb9: 0x403e, 0xdba: 0x403e, 0xdbb: 0x403e, - 0xdbc: 0x403e, 0xdbd: 0x403e, 0xdbe: 0x403e, 0xdbf: 0x403e, - // Block 0x37, offset 0xdc0 - 0xdc0: 0x4037, 0xdc1: 0x4037, 0xdc2: 0x4037, 0xdc3: 0x4037, 0xdc4: 0x4037, 0xdc5: 0x4037, - 0xdc6: 0x4037, 0xdc7: 0x4037, 0xdc8: 0x4037, 0xdc9: 0x4037, 0xdca: 0x4037, 0xdcb: 0x4037, - 0xdcc: 0x4037, 0xdcd: 0x4037, 0xdce: 0x4037, 0xdcf: 0x400e, 0xdd0: 0x403f, 0xdd1: 0x4040, - 0xdd2: 0x4041, 0xdd3: 0x4040, 0xdd4: 0x403f, 0xdd5: 0x4042, 0xdd6: 0x4043, 0xdd7: 0x4044, - 0xdd8: 0x4040, 0xdd9: 0x4041, 0xdda: 0x4040, 0xddb: 0x4045, 0xddc: 0x4009, 0xddd: 0x4045, - 0xdde: 0x4046, 0xddf: 0x4045, 0xde0: 0x4047, 0xde1: 0x400b, 0xde2: 0x400a, 0xde3: 0x400c, - 0xde4: 0x4048, 0xde5: 0x4000, 0xde6: 0x4000, 0xde7: 0x4000, 0xde8: 0x4000, 0xde9: 0x4000, - 0xdea: 0x4000, 0xdeb: 0x4000, 0xdec: 0x4000, 0xded: 0x4000, 0xdee: 0x4000, 0xdef: 0x4000, - 0xdf0: 0x4000, 0xdf1: 0x4000, 0xdf2: 0x4000, 0xdf3: 0x4000, 0xdf4: 0x4000, 0xdf5: 0x4000, - 0xdf6: 0x4000, 0xdf7: 0x4000, 0xdf8: 0x4000, 0xdf9: 0x4000, 0xdfa: 0x4000, 0xdfb: 0x4000, - 0xdfc: 0x4000, 0xdfd: 0x4000, 0xdfe: 0x4000, 0xdff: 0x4000, - // Block 0x38, offset 0xe00 - 0xe00: 0x4000, 0xe01: 0x4000, 0xe02: 0x4000, 0xe03: 0x4000, 0xe04: 0x4000, 0xe05: 0x4000, - 0xe06: 0x4000, 0xe07: 0x4000, 0xe08: 0x4000, 0xe09: 0x4000, 0xe0a: 0x4000, 0xe0b: 0x4000, - 0xe0c: 0x4000, 0xe0d: 0x4000, 0xe0e: 0x4000, 0xe10: 0x4000, 0xe11: 0x4000, - 0xe12: 0x4000, 0xe13: 0x4000, 0xe14: 0x4000, 0xe15: 0x4000, 0xe16: 0x4000, 0xe17: 0x4000, - 0xe18: 0x4000, 0xe19: 0x4000, 0xe1a: 0x4000, 0xe1b: 0x4000, 0xe1c: 0x4000, 0xe1d: 0x4000, - 0xe1e: 0x4000, 0xe1f: 0x4000, 0xe20: 0x4000, 0xe21: 0x4000, 0xe22: 0x4000, 0xe23: 0x4000, - 0xe24: 0x4000, 0xe25: 0x4000, 0xe26: 0x4000, 0xe27: 0x4000, 0xe28: 0x4000, 0xe29: 0x4000, - 0xe2a: 0x4000, 0xe2b: 0x4000, 0xe2c: 0x4000, 0xe2d: 0x4000, 0xe2e: 0x4000, 0xe2f: 0x4000, - 0xe30: 0x4000, 0xe31: 0x4000, 0xe32: 0x4000, 0xe33: 0x4000, 0xe34: 0x4000, 0xe35: 0x4000, - 0xe36: 0x4000, 0xe37: 0x4000, 0xe38: 0x4000, 0xe39: 0x4000, 0xe3a: 0x4000, - // Block 0x39, offset 0xe40 - 0xe40: 0x4000, 0xe41: 0x4000, 0xe42: 0x4000, 0xe43: 0x4000, 0xe44: 0x4000, 0xe45: 0x4000, - 0xe46: 0x4000, 0xe47: 0x4000, 0xe48: 0x4000, 0xe49: 0x4000, 0xe4a: 0x4000, 0xe4b: 0x4000, - 0xe4c: 0x4000, 0xe4d: 0x4000, 0xe4e: 0x4000, 0xe4f: 0x4000, 0xe50: 0x4000, 0xe51: 0x4000, - 0xe52: 0x4000, 0xe53: 0x4000, 0xe54: 0x4000, 0xe55: 0x4000, 0xe56: 0x4000, 0xe57: 0x4000, - 0xe58: 0x4000, 0xe59: 0x4000, 0xe5a: 0x4000, 0xe5b: 0x4000, 0xe5c: 0x4000, 0xe5d: 0x4000, - 0xe5e: 0x4000, 0xe5f: 0x4000, 0xe60: 0x4000, 0xe61: 0x4000, 0xe62: 0x4000, 0xe63: 0x4000, - 0xe70: 0x4000, 0xe71: 0x4000, 0xe72: 0x4000, 0xe73: 0x4000, 0xe74: 0x4000, 0xe75: 0x4000, - 0xe76: 0x4000, 0xe77: 0x4000, 0xe78: 0x4000, 0xe79: 0x4000, 0xe7a: 0x4000, 0xe7b: 0x4000, - 0xe7c: 0x4000, 0xe7d: 0x4000, 0xe7e: 0x4000, 0xe7f: 0x4000, - // Block 0x3a, offset 0xe80 - 0xe80: 0x4000, 0xe81: 0x4000, 0xe82: 0x4000, 0xe83: 0x4000, 0xe84: 0x4000, 0xe85: 0x4000, - 0xe86: 0x4000, 0xe87: 0x4000, 0xe88: 0x4000, 0xe89: 0x4000, 0xe8a: 0x4000, 0xe8b: 0x4000, - 0xe8c: 0x4000, 0xe8d: 0x4000, 0xe8e: 0x4000, 0xe8f: 0x4000, 0xe90: 0x4000, 0xe91: 0x4000, - 0xe92: 0x4000, 0xe93: 0x4000, 0xe94: 0x4000, 0xe95: 0x4000, 0xe96: 0x4000, 0xe97: 0x4000, - 0xe98: 0x4000, 0xe99: 0x4000, 0xe9a: 0x4000, 0xe9b: 0x4000, 0xe9c: 0x4000, 0xe9d: 0x4000, - 0xe9e: 0x4000, 0xea0: 0x4000, 0xea1: 0x4000, 0xea2: 0x4000, 0xea3: 0x4000, - 0xea4: 0x4000, 0xea5: 0x4000, 0xea6: 0x4000, 0xea7: 0x4000, 0xea8: 0x4000, 0xea9: 0x4000, - 0xeaa: 0x4000, 0xeab: 0x4000, 0xeac: 0x4000, 0xead: 0x4000, 0xeae: 0x4000, 0xeaf: 0x4000, - 0xeb0: 0x4000, 0xeb1: 0x4000, 0xeb2: 0x4000, 0xeb3: 0x4000, 0xeb4: 0x4000, 0xeb5: 0x4000, - 0xeb6: 0x4000, 0xeb7: 0x4000, 0xeb8: 0x4000, 0xeb9: 0x4000, 0xeba: 0x4000, 0xebb: 0x4000, - 0xebc: 0x4000, 0xebd: 0x4000, 0xebe: 0x4000, 0xebf: 0x4000, - // Block 0x3b, offset 0xec0 - 0xec0: 0x4000, 0xec1: 0x4000, 0xec2: 0x4000, 0xec3: 0x4000, 0xec4: 0x4000, 0xec5: 0x4000, - 0xec6: 0x4000, 0xec7: 0x4000, 0xec8: 0x2000, 0xec9: 0x2000, 0xeca: 0x2000, 0xecb: 0x2000, - 0xecc: 0x2000, 0xecd: 0x2000, 0xece: 0x2000, 0xecf: 0x2000, 0xed0: 0x4000, 0xed1: 0x4000, - 0xed2: 0x4000, 0xed3: 0x4000, 0xed4: 0x4000, 0xed5: 0x4000, 0xed6: 0x4000, 0xed7: 0x4000, - 0xed8: 0x4000, 0xed9: 0x4000, 0xeda: 0x4000, 0xedb: 0x4000, 0xedc: 0x4000, 0xedd: 0x4000, - 0xede: 0x4000, 0xedf: 0x4000, 0xee0: 0x4000, 0xee1: 0x4000, 0xee2: 0x4000, 0xee3: 0x4000, - 0xee4: 0x4000, 0xee5: 0x4000, 0xee6: 0x4000, 0xee7: 0x4000, 0xee8: 0x4000, 0xee9: 0x4000, - 0xeea: 0x4000, 0xeeb: 0x4000, 0xeec: 0x4000, 0xeed: 0x4000, 0xeee: 0x4000, 0xeef: 0x4000, - 0xef0: 0x4000, 0xef1: 0x4000, 0xef2: 0x4000, 0xef3: 0x4000, 0xef4: 0x4000, 0xef5: 0x4000, - 0xef6: 0x4000, 0xef7: 0x4000, 0xef8: 0x4000, 0xef9: 0x4000, 0xefa: 0x4000, 0xefb: 0x4000, - 0xefc: 0x4000, 0xefd: 0x4000, 0xefe: 0x4000, 0xeff: 0x4000, - // Block 0x3c, offset 0xf00 - 0xf00: 0x4000, 0xf01: 0x4000, 0xf02: 0x4000, 0xf03: 0x4000, 0xf04: 0x4000, 0xf05: 0x4000, - 0xf06: 0x4000, 0xf07: 0x4000, 0xf08: 0x4000, 0xf09: 0x4000, 0xf0a: 0x4000, 0xf0b: 0x4000, - 0xf0c: 0x4000, 0xf0d: 0x4000, 0xf0e: 0x4000, 0xf0f: 0x4000, 0xf10: 0x4000, 0xf11: 0x4000, - 0xf12: 0x4000, 0xf13: 0x4000, 0xf14: 0x4000, 0xf15: 0x4000, 0xf16: 0x4000, 0xf17: 0x4000, - 0xf18: 0x4000, 0xf19: 0x4000, 0xf1a: 0x4000, 0xf1b: 0x4000, 0xf1c: 0x4000, 0xf1d: 0x4000, - 0xf1e: 0x4000, 0xf1f: 0x4000, 0xf20: 0x4000, 0xf21: 0x4000, 0xf22: 0x4000, 0xf23: 0x4000, - 0xf24: 0x4000, 0xf25: 0x4000, 0xf26: 0x4000, 0xf27: 0x4000, 0xf28: 0x4000, 0xf29: 0x4000, - 0xf2a: 0x4000, 0xf2b: 0x4000, 0xf2c: 0x4000, 0xf2d: 0x4000, 0xf2e: 0x4000, 0xf2f: 0x4000, - 0xf30: 0x4000, 0xf31: 0x4000, 0xf32: 0x4000, 0xf33: 0x4000, 0xf34: 0x4000, 0xf35: 0x4000, - 0xf36: 0x4000, 0xf37: 0x4000, 0xf38: 0x4000, 0xf39: 0x4000, 0xf3a: 0x4000, 0xf3b: 0x4000, - 0xf3c: 0x4000, 0xf3d: 0x4000, 0xf3e: 0x4000, - // Block 0x3d, offset 0xf40 - 0xf40: 0x4000, 0xf41: 0x4000, 0xf42: 0x4000, 0xf43: 0x4000, 0xf44: 0x4000, 0xf45: 0x4000, - 0xf46: 0x4000, 0xf47: 0x4000, 0xf48: 0x4000, 0xf49: 0x4000, 0xf4a: 0x4000, 0xf4b: 0x4000, - 0xf4c: 0x4000, 0xf50: 0x4000, 0xf51: 0x4000, - 0xf52: 0x4000, 0xf53: 0x4000, 0xf54: 0x4000, 0xf55: 0x4000, 0xf56: 0x4000, 0xf57: 0x4000, - 0xf58: 0x4000, 0xf59: 0x4000, 0xf5a: 0x4000, 0xf5b: 0x4000, 0xf5c: 0x4000, 0xf5d: 0x4000, - 0xf5e: 0x4000, 0xf5f: 0x4000, 0xf60: 0x4000, 0xf61: 0x4000, 0xf62: 0x4000, 0xf63: 0x4000, - 0xf64: 0x4000, 0xf65: 0x4000, 0xf66: 0x4000, 0xf67: 0x4000, 0xf68: 0x4000, 0xf69: 0x4000, - 0xf6a: 0x4000, 0xf6b: 0x4000, 0xf6c: 0x4000, 0xf6d: 0x4000, 0xf6e: 0x4000, 0xf6f: 0x4000, - 0xf70: 0x4000, 0xf71: 0x4000, 0xf72: 0x4000, 0xf73: 0x4000, 0xf74: 0x4000, 0xf75: 0x4000, - 0xf76: 0x4000, 0xf77: 0x4000, 0xf78: 0x4000, 0xf79: 0x4000, 0xf7a: 0x4000, 0xf7b: 0x4000, - 0xf7c: 0x4000, 0xf7d: 0x4000, 0xf7e: 0x4000, 0xf7f: 0x4000, - // Block 0x3e, offset 0xf80 - 0xf80: 0x4000, 0xf81: 0x4000, 0xf82: 0x4000, 0xf83: 0x4000, 0xf84: 0x4000, 0xf85: 0x4000, - 0xf86: 0x4000, - // Block 0x3f, offset 0xfc0 - 0xfe0: 0x4000, 0xfe1: 0x4000, 0xfe2: 0x4000, 0xfe3: 0x4000, - 0xfe4: 0x4000, 0xfe5: 0x4000, 0xfe6: 0x4000, 0xfe7: 0x4000, 0xfe8: 0x4000, 0xfe9: 0x4000, - 0xfea: 0x4000, 0xfeb: 0x4000, 0xfec: 0x4000, 0xfed: 0x4000, 0xfee: 0x4000, 0xfef: 0x4000, - 0xff0: 0x4000, 0xff1: 0x4000, 0xff2: 0x4000, 0xff3: 0x4000, 0xff4: 0x4000, 0xff5: 0x4000, - 0xff6: 0x4000, 0xff7: 0x4000, 0xff8: 0x4000, 0xff9: 0x4000, 0xffa: 0x4000, 0xffb: 0x4000, - 0xffc: 0x4000, - // Block 0x40, offset 0x1000 - 0x1000: 0x4000, 0x1001: 0x4000, 0x1002: 0x4000, 0x1003: 0x4000, 0x1004: 0x4000, 0x1005: 0x4000, - 0x1006: 0x4000, 0x1007: 0x4000, 0x1008: 0x4000, 0x1009: 0x4000, 0x100a: 0x4000, 0x100b: 0x4000, - 0x100c: 0x4000, 0x100d: 0x4000, 0x100e: 0x4000, 0x100f: 0x4000, 0x1010: 0x4000, 0x1011: 0x4000, - 0x1012: 0x4000, 0x1013: 0x4000, 0x1014: 0x4000, 0x1015: 0x4000, 0x1016: 0x4000, 0x1017: 0x4000, - 0x1018: 0x4000, 0x1019: 0x4000, 0x101a: 0x4000, 0x101b: 0x4000, 0x101c: 0x4000, 0x101d: 0x4000, - 0x101e: 0x4000, 0x101f: 0x4000, 0x1020: 0x4000, 0x1021: 0x4000, 0x1022: 0x4000, 0x1023: 0x4000, - // Block 0x41, offset 0x1040 - 0x1040: 0x2000, 0x1041: 0x2000, 0x1042: 0x2000, 0x1043: 0x2000, 0x1044: 0x2000, 0x1045: 0x2000, - 0x1046: 0x2000, 0x1047: 0x2000, 0x1048: 0x2000, 0x1049: 0x2000, 0x104a: 0x2000, 0x104b: 0x2000, - 0x104c: 0x2000, 0x104d: 0x2000, 0x104e: 0x2000, 0x104f: 0x2000, 0x1050: 0x4000, 0x1051: 0x4000, - 0x1052: 0x4000, 0x1053: 0x4000, 0x1054: 0x4000, 0x1055: 0x4000, 0x1056: 0x4000, 0x1057: 0x4000, - 0x1058: 0x4000, 0x1059: 0x4000, - 0x1070: 0x4000, 0x1071: 0x4000, 0x1072: 0x4000, 0x1073: 0x4000, 0x1074: 0x4000, 0x1075: 0x4000, - 0x1076: 0x4000, 0x1077: 0x4000, 0x1078: 0x4000, 0x1079: 0x4000, 0x107a: 0x4000, 0x107b: 0x4000, - 0x107c: 0x4000, 0x107d: 0x4000, 0x107e: 0x4000, 0x107f: 0x4000, - // Block 0x42, offset 0x1080 - 0x1080: 0x4000, 0x1081: 0x4000, 0x1082: 0x4000, 0x1083: 0x4000, 0x1084: 0x4000, 0x1085: 0x4000, - 0x1086: 0x4000, 0x1087: 0x4000, 0x1088: 0x4000, 0x1089: 0x4000, 0x108a: 0x4000, 0x108b: 0x4000, - 0x108c: 0x4000, 0x108d: 0x4000, 0x108e: 0x4000, 0x108f: 0x4000, 0x1090: 0x4000, 0x1091: 0x4000, - 0x1092: 0x4000, 0x1094: 0x4000, 0x1095: 0x4000, 0x1096: 0x4000, 0x1097: 0x4000, - 0x1098: 0x4000, 0x1099: 0x4000, 0x109a: 0x4000, 0x109b: 0x4000, 0x109c: 0x4000, 0x109d: 0x4000, - 0x109e: 0x4000, 0x109f: 0x4000, 0x10a0: 0x4000, 0x10a1: 0x4000, 0x10a2: 0x4000, 0x10a3: 0x4000, - 0x10a4: 0x4000, 0x10a5: 0x4000, 0x10a6: 0x4000, 0x10a8: 0x4000, 0x10a9: 0x4000, - 0x10aa: 0x4000, 0x10ab: 0x4000, - // Block 0x43, offset 0x10c0 - 0x10c1: 0x9012, 0x10c2: 0x9012, 0x10c3: 0x9012, 0x10c4: 0x9012, 0x10c5: 0x9012, - 0x10c6: 0x9012, 0x10c7: 0x9012, 0x10c8: 0x9012, 0x10c9: 0x9012, 0x10ca: 0x9012, 0x10cb: 0x9012, - 0x10cc: 0x9012, 0x10cd: 0x9012, 0x10ce: 0x9012, 0x10cf: 0x9012, 0x10d0: 0x9012, 0x10d1: 0x9012, - 0x10d2: 0x9012, 0x10d3: 0x9012, 0x10d4: 0x9012, 0x10d5: 0x9012, 0x10d6: 0x9012, 0x10d7: 0x9012, - 0x10d8: 0x9012, 0x10d9: 0x9012, 0x10da: 0x9012, 0x10db: 0x9012, 0x10dc: 0x9012, 0x10dd: 0x9012, - 0x10de: 0x9012, 0x10df: 0x9012, 0x10e0: 0x9049, 0x10e1: 0x9049, 0x10e2: 0x9049, 0x10e3: 0x9049, - 0x10e4: 0x9049, 0x10e5: 0x9049, 0x10e6: 0x9049, 0x10e7: 0x9049, 0x10e8: 0x9049, 0x10e9: 0x9049, - 0x10ea: 0x9049, 0x10eb: 0x9049, 0x10ec: 0x9049, 0x10ed: 0x9049, 0x10ee: 0x9049, 0x10ef: 0x9049, - 0x10f0: 0x9049, 0x10f1: 0x9049, 0x10f2: 0x9049, 0x10f3: 0x9049, 0x10f4: 0x9049, 0x10f5: 0x9049, - 0x10f6: 0x9049, 0x10f7: 0x9049, 0x10f8: 0x9049, 0x10f9: 0x9049, 0x10fa: 0x9049, 0x10fb: 0x9049, - 0x10fc: 0x9049, 0x10fd: 0x9049, 0x10fe: 0x9049, 0x10ff: 0x9049, - // Block 0x44, offset 0x1100 - 0x1100: 0x9049, 0x1101: 0x9049, 0x1102: 0x9049, 0x1103: 0x9049, 0x1104: 0x9049, 0x1105: 0x9049, - 0x1106: 0x9049, 0x1107: 0x9049, 0x1108: 0x9049, 0x1109: 0x9049, 0x110a: 0x9049, 0x110b: 0x9049, - 0x110c: 0x9049, 0x110d: 0x9049, 0x110e: 0x9049, 0x110f: 0x9049, 0x1110: 0x9049, 0x1111: 0x9049, - 0x1112: 0x9049, 0x1113: 0x9049, 0x1114: 0x9049, 0x1115: 0x9049, 0x1116: 0x9049, 0x1117: 0x9049, - 0x1118: 0x9049, 0x1119: 0x9049, 0x111a: 0x9049, 0x111b: 0x9049, 0x111c: 0x9049, 0x111d: 0x9049, - 0x111e: 0x9049, 0x111f: 0x904a, 0x1120: 0x904b, 0x1121: 0xb04c, 0x1122: 0xb04d, 0x1123: 0xb04d, - 0x1124: 0xb04e, 0x1125: 0xb04f, 0x1126: 0xb050, 0x1127: 0xb051, 0x1128: 0xb052, 0x1129: 0xb053, - 0x112a: 0xb054, 0x112b: 0xb055, 0x112c: 0xb056, 0x112d: 0xb057, 0x112e: 0xb058, 0x112f: 0xb059, - 0x1130: 0xb05a, 0x1131: 0xb05b, 0x1132: 0xb05c, 0x1133: 0xb05d, 0x1134: 0xb05e, 0x1135: 0xb05f, - 0x1136: 0xb060, 0x1137: 0xb061, 0x1138: 0xb062, 0x1139: 0xb063, 0x113a: 0xb064, 0x113b: 0xb065, - 0x113c: 0xb052, 0x113d: 0xb066, 0x113e: 0xb067, 0x113f: 0xb055, - // Block 0x45, offset 0x1140 - 0x1140: 0xb068, 0x1141: 0xb069, 0x1142: 0xb06a, 0x1143: 0xb06b, 0x1144: 0xb05a, 0x1145: 0xb056, - 0x1146: 0xb06c, 0x1147: 0xb06d, 0x1148: 0xb06b, 0x1149: 0xb06e, 0x114a: 0xb06b, 0x114b: 0xb06f, - 0x114c: 0xb06f, 0x114d: 0xb070, 0x114e: 0xb070, 0x114f: 0xb071, 0x1150: 0xb056, 0x1151: 0xb072, - 0x1152: 0xb073, 0x1153: 0xb072, 0x1154: 0xb074, 0x1155: 0xb073, 0x1156: 0xb075, 0x1157: 0xb075, - 0x1158: 0xb076, 0x1159: 0xb076, 0x115a: 0xb077, 0x115b: 0xb077, 0x115c: 0xb073, 0x115d: 0xb078, - 0x115e: 0xb079, 0x115f: 0xb067, 0x1160: 0xb07a, 0x1161: 0xb07b, 0x1162: 0xb07b, 0x1163: 0xb07b, - 0x1164: 0xb07b, 0x1165: 0xb07b, 0x1166: 0xb07b, 0x1167: 0xb07b, 0x1168: 0xb07b, 0x1169: 0xb07b, - 0x116a: 0xb07b, 0x116b: 0xb07b, 0x116c: 0xb07b, 0x116d: 0xb07b, 0x116e: 0xb07b, 0x116f: 0xb07b, - 0x1170: 0xb07c, 0x1171: 0xb07c, 0x1172: 0xb07c, 0x1173: 0xb07c, 0x1174: 0xb07c, 0x1175: 0xb07c, - 0x1176: 0xb07c, 0x1177: 0xb07c, 0x1178: 0xb07c, 0x1179: 0xb07c, 0x117a: 0xb07c, 0x117b: 0xb07c, - 0x117c: 0xb07c, 0x117d: 0xb07c, 0x117e: 0xb07c, - // Block 0x46, offset 0x1180 - 0x1182: 0xb07d, 0x1183: 0xb07e, 0x1184: 0xb07f, 0x1185: 0xb080, - 0x1186: 0xb07f, 0x1187: 0xb07e, 0x118a: 0xb081, 0x118b: 0xb082, - 0x118c: 0xb083, 0x118d: 0xb07f, 0x118e: 0xb080, 0x118f: 0xb07f, - 0x1192: 0xb084, 0x1193: 0xb085, 0x1194: 0xb084, 0x1195: 0xb086, 0x1196: 0xb084, 0x1197: 0xb087, - 0x119a: 0xb088, 0x119b: 0xb089, 0x119c: 0xb08a, - 0x11a0: 0x908b, 0x11a1: 0x908b, 0x11a2: 0x908c, 0x11a3: 0x908d, - 0x11a4: 0x908b, 0x11a5: 0x908e, 0x11a6: 0x908f, 0x11a8: 0xb090, 0x11a9: 0xb091, - 0x11aa: 0xb092, 0x11ab: 0xb091, 0x11ac: 0xb093, 0x11ad: 0xb094, 0x11ae: 0xb095, - 0x11bd: 0x2000, - // Block 0x47, offset 0x11c0 - 0x11e0: 0x4000, 0x11e1: 0x4000, 0x11e2: 0x4000, 0x11e3: 0x4000, - // Block 0x48, offset 0x1200 - 0x1200: 0x4000, 0x1201: 0x4000, 0x1202: 0x4000, 0x1203: 0x4000, 0x1204: 0x4000, 0x1205: 0x4000, - 0x1206: 0x4000, 0x1207: 0x4000, 0x1208: 0x4000, 0x1209: 0x4000, 0x120a: 0x4000, 0x120b: 0x4000, - 0x120c: 0x4000, 0x120d: 0x4000, 0x120e: 0x4000, 0x120f: 0x4000, 0x1210: 0x4000, 0x1211: 0x4000, - 0x1212: 0x4000, 0x1213: 0x4000, 0x1214: 0x4000, 0x1215: 0x4000, 0x1216: 0x4000, 0x1217: 0x4000, - 0x1218: 0x4000, 0x1219: 0x4000, 0x121a: 0x4000, 0x121b: 0x4000, 0x121c: 0x4000, 0x121d: 0x4000, - 0x121e: 0x4000, 0x121f: 0x4000, 0x1220: 0x4000, 0x1221: 0x4000, 0x1222: 0x4000, 0x1223: 0x4000, - 0x1224: 0x4000, 0x1225: 0x4000, 0x1226: 0x4000, 0x1227: 0x4000, 0x1228: 0x4000, 0x1229: 0x4000, - 0x122a: 0x4000, 0x122b: 0x4000, 0x122c: 0x4000, 0x122d: 0x4000, 0x122e: 0x4000, 0x122f: 0x4000, - 0x1230: 0x4000, 0x1231: 0x4000, 0x1232: 0x4000, 0x1233: 0x4000, 0x1234: 0x4000, 0x1235: 0x4000, - 0x1236: 0x4000, 0x1237: 0x4000, - // Block 0x49, offset 0x1240 - 0x1240: 0x4000, 0x1241: 0x4000, 0x1242: 0x4000, 0x1243: 0x4000, 0x1244: 0x4000, 0x1245: 0x4000, - 0x1246: 0x4000, 0x1247: 0x4000, 0x1248: 0x4000, 0x1249: 0x4000, 0x124a: 0x4000, 0x124b: 0x4000, - 0x124c: 0x4000, 0x124d: 0x4000, 0x124e: 0x4000, 0x124f: 0x4000, 0x1250: 0x4000, 0x1251: 0x4000, - 0x1252: 0x4000, 0x1253: 0x4000, 0x1254: 0x4000, 0x1255: 0x4000, 0x1256: 0x4000, 0x1257: 0x4000, - 0x1258: 0x4000, 0x1259: 0x4000, 0x125a: 0x4000, 0x125b: 0x4000, 0x125c: 0x4000, 0x125d: 0x4000, - 0x125e: 0x4000, 0x125f: 0x4000, 0x1260: 0x4000, 0x1261: 0x4000, 0x1262: 0x4000, 0x1263: 0x4000, - 0x1264: 0x4000, 0x1265: 0x4000, 0x1266: 0x4000, 0x1267: 0x4000, 0x1268: 0x4000, 0x1269: 0x4000, - 0x126a: 0x4000, 0x126b: 0x4000, 0x126c: 0x4000, 0x126d: 0x4000, 0x126e: 0x4000, 0x126f: 0x4000, - 0x1270: 0x4000, 0x1271: 0x4000, 0x1272: 0x4000, - // Block 0x4a, offset 0x1280 - 0x1280: 0x4000, 0x1281: 0x4000, 0x1282: 0x4000, 0x1283: 0x4000, 0x1284: 0x4000, 0x1285: 0x4000, - 0x1286: 0x4000, 0x1287: 0x4000, 0x1288: 0x4000, 0x1289: 0x4000, 0x128a: 0x4000, 0x128b: 0x4000, - 0x128c: 0x4000, 0x128d: 0x4000, 0x128e: 0x4000, 0x128f: 0x4000, 0x1290: 0x4000, 0x1291: 0x4000, - 0x1292: 0x4000, 0x1293: 0x4000, 0x1294: 0x4000, 0x1295: 0x4000, 0x1296: 0x4000, 0x1297: 0x4000, - 0x1298: 0x4000, 0x1299: 0x4000, 0x129a: 0x4000, 0x129b: 0x4000, 0x129c: 0x4000, 0x129d: 0x4000, - 0x129e: 0x4000, - // Block 0x4b, offset 0x12c0 - 0x12d0: 0x4000, 0x12d1: 0x4000, - 0x12d2: 0x4000, - 0x12e4: 0x4000, 0x12e5: 0x4000, 0x12e6: 0x4000, 0x12e7: 0x4000, - 0x12f0: 0x4000, 0x12f1: 0x4000, 0x12f2: 0x4000, 0x12f3: 0x4000, 0x12f4: 0x4000, 0x12f5: 0x4000, - 0x12f6: 0x4000, 0x12f7: 0x4000, 0x12f8: 0x4000, 0x12f9: 0x4000, 0x12fa: 0x4000, 0x12fb: 0x4000, - 0x12fc: 0x4000, 0x12fd: 0x4000, 0x12fe: 0x4000, 0x12ff: 0x4000, - // Block 0x4c, offset 0x1300 - 0x1300: 0x4000, 0x1301: 0x4000, 0x1302: 0x4000, 0x1303: 0x4000, 0x1304: 0x4000, 0x1305: 0x4000, - 0x1306: 0x4000, 0x1307: 0x4000, 0x1308: 0x4000, 0x1309: 0x4000, 0x130a: 0x4000, 0x130b: 0x4000, - 0x130c: 0x4000, 0x130d: 0x4000, 0x130e: 0x4000, 0x130f: 0x4000, 0x1310: 0x4000, 0x1311: 0x4000, - 0x1312: 0x4000, 0x1313: 0x4000, 0x1314: 0x4000, 0x1315: 0x4000, 0x1316: 0x4000, 0x1317: 0x4000, - 0x1318: 0x4000, 0x1319: 0x4000, 0x131a: 0x4000, 0x131b: 0x4000, 0x131c: 0x4000, 0x131d: 0x4000, - 0x131e: 0x4000, 0x131f: 0x4000, 0x1320: 0x4000, 0x1321: 0x4000, 0x1322: 0x4000, 0x1323: 0x4000, - 0x1324: 0x4000, 0x1325: 0x4000, 0x1326: 0x4000, 0x1327: 0x4000, 0x1328: 0x4000, 0x1329: 0x4000, - 0x132a: 0x4000, 0x132b: 0x4000, 0x132c: 0x4000, 0x132d: 0x4000, 0x132e: 0x4000, 0x132f: 0x4000, - 0x1330: 0x4000, 0x1331: 0x4000, 0x1332: 0x4000, 0x1333: 0x4000, 0x1334: 0x4000, 0x1335: 0x4000, - 0x1336: 0x4000, 0x1337: 0x4000, 0x1338: 0x4000, 0x1339: 0x4000, 0x133a: 0x4000, 0x133b: 0x4000, - // Block 0x4d, offset 0x1340 - 0x1344: 0x4000, - // Block 0x4e, offset 0x1380 - 0x138f: 0x4000, - // Block 0x4f, offset 0x13c0 - 0x13c0: 0x2000, 0x13c1: 0x2000, 0x13c2: 0x2000, 0x13c3: 0x2000, 0x13c4: 0x2000, 0x13c5: 0x2000, - 0x13c6: 0x2000, 0x13c7: 0x2000, 0x13c8: 0x2000, 0x13c9: 0x2000, 0x13ca: 0x2000, - 0x13d0: 0x2000, 0x13d1: 0x2000, - 0x13d2: 0x2000, 0x13d3: 0x2000, 0x13d4: 0x2000, 0x13d5: 0x2000, 0x13d6: 0x2000, 0x13d7: 0x2000, - 0x13d8: 0x2000, 0x13d9: 0x2000, 0x13da: 0x2000, 0x13db: 0x2000, 0x13dc: 0x2000, 0x13dd: 0x2000, - 0x13de: 0x2000, 0x13df: 0x2000, 0x13e0: 0x2000, 0x13e1: 0x2000, 0x13e2: 0x2000, 0x13e3: 0x2000, - 0x13e4: 0x2000, 0x13e5: 0x2000, 0x13e6: 0x2000, 0x13e7: 0x2000, 0x13e8: 0x2000, 0x13e9: 0x2000, - 0x13ea: 0x2000, 0x13eb: 0x2000, 0x13ec: 0x2000, 0x13ed: 0x2000, - 0x13f0: 0x2000, 0x13f1: 0x2000, 0x13f2: 0x2000, 0x13f3: 0x2000, 0x13f4: 0x2000, 0x13f5: 0x2000, - 0x13f6: 0x2000, 0x13f7: 0x2000, 0x13f8: 0x2000, 0x13f9: 0x2000, 0x13fa: 0x2000, 0x13fb: 0x2000, - 0x13fc: 0x2000, 0x13fd: 0x2000, 0x13fe: 0x2000, 0x13ff: 0x2000, - // Block 0x50, offset 0x1400 - 0x1400: 0x2000, 0x1401: 0x2000, 0x1402: 0x2000, 0x1403: 0x2000, 0x1404: 0x2000, 0x1405: 0x2000, - 0x1406: 0x2000, 0x1407: 0x2000, 0x1408: 0x2000, 0x1409: 0x2000, 0x140a: 0x2000, 0x140b: 0x2000, - 0x140c: 0x2000, 0x140d: 0x2000, 0x140e: 0x2000, 0x140f: 0x2000, 0x1410: 0x2000, 0x1411: 0x2000, - 0x1412: 0x2000, 0x1413: 0x2000, 0x1414: 0x2000, 0x1415: 0x2000, 0x1416: 0x2000, 0x1417: 0x2000, - 0x1418: 0x2000, 0x1419: 0x2000, 0x141a: 0x2000, 0x141b: 0x2000, 0x141c: 0x2000, 0x141d: 0x2000, - 0x141e: 0x2000, 0x141f: 0x2000, 0x1420: 0x2000, 0x1421: 0x2000, 0x1422: 0x2000, 0x1423: 0x2000, - 0x1424: 0x2000, 0x1425: 0x2000, 0x1426: 0x2000, 0x1427: 0x2000, 0x1428: 0x2000, 0x1429: 0x2000, - 0x1430: 0x2000, 0x1431: 0x2000, 0x1432: 0x2000, 0x1433: 0x2000, 0x1434: 0x2000, 0x1435: 0x2000, - 0x1436: 0x2000, 0x1437: 0x2000, 0x1438: 0x2000, 0x1439: 0x2000, 0x143a: 0x2000, 0x143b: 0x2000, - 0x143c: 0x2000, 0x143d: 0x2000, 0x143e: 0x2000, 0x143f: 0x2000, - // Block 0x51, offset 0x1440 - 0x1440: 0x2000, 0x1441: 0x2000, 0x1442: 0x2000, 0x1443: 0x2000, 0x1444: 0x2000, 0x1445: 0x2000, - 0x1446: 0x2000, 0x1447: 0x2000, 0x1448: 0x2000, 0x1449: 0x2000, 0x144a: 0x2000, 0x144b: 0x2000, - 0x144c: 0x2000, 0x144d: 0x2000, 0x144e: 0x4000, 0x144f: 0x2000, 0x1450: 0x2000, 0x1451: 0x4000, - 0x1452: 0x4000, 0x1453: 0x4000, 0x1454: 0x4000, 0x1455: 0x4000, 0x1456: 0x4000, 0x1457: 0x4000, - 0x1458: 0x4000, 0x1459: 0x4000, 0x145a: 0x4000, 0x145b: 0x2000, 0x145c: 0x2000, 0x145d: 0x2000, - 0x145e: 0x2000, 0x145f: 0x2000, 0x1460: 0x2000, 0x1461: 0x2000, 0x1462: 0x2000, 0x1463: 0x2000, - 0x1464: 0x2000, 0x1465: 0x2000, 0x1466: 0x2000, 0x1467: 0x2000, 0x1468: 0x2000, 0x1469: 0x2000, - 0x146a: 0x2000, 0x146b: 0x2000, 0x146c: 0x2000, - // Block 0x52, offset 0x1480 - 0x1480: 0x4000, 0x1481: 0x4000, 0x1482: 0x4000, - 0x1490: 0x4000, 0x1491: 0x4000, - 0x1492: 0x4000, 0x1493: 0x4000, 0x1494: 0x4000, 0x1495: 0x4000, 0x1496: 0x4000, 0x1497: 0x4000, - 0x1498: 0x4000, 0x1499: 0x4000, 0x149a: 0x4000, 0x149b: 0x4000, 0x149c: 0x4000, 0x149d: 0x4000, - 0x149e: 0x4000, 0x149f: 0x4000, 0x14a0: 0x4000, 0x14a1: 0x4000, 0x14a2: 0x4000, 0x14a3: 0x4000, - 0x14a4: 0x4000, 0x14a5: 0x4000, 0x14a6: 0x4000, 0x14a7: 0x4000, 0x14a8: 0x4000, 0x14a9: 0x4000, - 0x14aa: 0x4000, 0x14ab: 0x4000, 0x14ac: 0x4000, 0x14ad: 0x4000, 0x14ae: 0x4000, 0x14af: 0x4000, - 0x14b0: 0x4000, 0x14b1: 0x4000, 0x14b2: 0x4000, 0x14b3: 0x4000, 0x14b4: 0x4000, 0x14b5: 0x4000, - 0x14b6: 0x4000, 0x14b7: 0x4000, 0x14b8: 0x4000, 0x14b9: 0x4000, 0x14ba: 0x4000, 0x14bb: 0x4000, - // Block 0x53, offset 0x14c0 - 0x14c0: 0x4000, 0x14c1: 0x4000, 0x14c2: 0x4000, 0x14c3: 0x4000, 0x14c4: 0x4000, 0x14c5: 0x4000, - 0x14c6: 0x4000, 0x14c7: 0x4000, 0x14c8: 0x4000, - 0x14d0: 0x4000, 0x14d1: 0x4000, - 0x14e0: 0x4000, 0x14e1: 0x4000, 0x14e2: 0x4000, 0x14e3: 0x4000, - 0x14e4: 0x4000, 0x14e5: 0x4000, - // Block 0x54, offset 0x1500 - 0x1500: 0x4000, 0x1501: 0x4000, 0x1502: 0x4000, 0x1503: 0x4000, 0x1504: 0x4000, 0x1505: 0x4000, - 0x1506: 0x4000, 0x1507: 0x4000, 0x1508: 0x4000, 0x1509: 0x4000, 0x150a: 0x4000, 0x150b: 0x4000, - 0x150c: 0x4000, 0x150d: 0x4000, 0x150e: 0x4000, 0x150f: 0x4000, 0x1510: 0x4000, 0x1511: 0x4000, - 0x1512: 0x4000, 0x1513: 0x4000, 0x1514: 0x4000, 0x1515: 0x4000, 0x1516: 0x4000, 0x1517: 0x4000, - 0x1518: 0x4000, 0x1519: 0x4000, 0x151a: 0x4000, 0x151b: 0x4000, 0x151c: 0x4000, 0x151d: 0x4000, - 0x151e: 0x4000, 0x151f: 0x4000, 0x1520: 0x4000, - 0x152d: 0x4000, 0x152e: 0x4000, 0x152f: 0x4000, - 0x1530: 0x4000, 0x1531: 0x4000, 0x1532: 0x4000, 0x1533: 0x4000, 0x1534: 0x4000, 0x1535: 0x4000, - 0x1537: 0x4000, 0x1538: 0x4000, 0x1539: 0x4000, 0x153a: 0x4000, 0x153b: 0x4000, - 0x153c: 0x4000, 0x153d: 0x4000, 0x153e: 0x4000, 0x153f: 0x4000, - // Block 0x55, offset 0x1540 - 0x1540: 0x4000, 0x1541: 0x4000, 0x1542: 0x4000, 0x1543: 0x4000, 0x1544: 0x4000, 0x1545: 0x4000, - 0x1546: 0x4000, 0x1547: 0x4000, 0x1548: 0x4000, 0x1549: 0x4000, 0x154a: 0x4000, 0x154b: 0x4000, - 0x154c: 0x4000, 0x154d: 0x4000, 0x154e: 0x4000, 0x154f: 0x4000, 0x1550: 0x4000, 0x1551: 0x4000, - 0x1552: 0x4000, 0x1553: 0x4000, 0x1554: 0x4000, 0x1555: 0x4000, 0x1556: 0x4000, 0x1557: 0x4000, - 0x1558: 0x4000, 0x1559: 0x4000, 0x155a: 0x4000, 0x155b: 0x4000, 0x155c: 0x4000, 0x155d: 0x4000, - 0x155e: 0x4000, 0x155f: 0x4000, 0x1560: 0x4000, 0x1561: 0x4000, 0x1562: 0x4000, 0x1563: 0x4000, - 0x1564: 0x4000, 0x1565: 0x4000, 0x1566: 0x4000, 0x1567: 0x4000, 0x1568: 0x4000, 0x1569: 0x4000, - 0x156a: 0x4000, 0x156b: 0x4000, 0x156c: 0x4000, 0x156d: 0x4000, 0x156e: 0x4000, 0x156f: 0x4000, - 0x1570: 0x4000, 0x1571: 0x4000, 0x1572: 0x4000, 0x1573: 0x4000, 0x1574: 0x4000, 0x1575: 0x4000, - 0x1576: 0x4000, 0x1577: 0x4000, 0x1578: 0x4000, 0x1579: 0x4000, 0x157a: 0x4000, 0x157b: 0x4000, - 0x157c: 0x4000, 0x157e: 0x4000, 0x157f: 0x4000, - // Block 0x56, offset 0x1580 - 0x1580: 0x4000, 0x1581: 0x4000, 0x1582: 0x4000, 0x1583: 0x4000, 0x1584: 0x4000, 0x1585: 0x4000, - 0x1586: 0x4000, 0x1587: 0x4000, 0x1588: 0x4000, 0x1589: 0x4000, 0x158a: 0x4000, 0x158b: 0x4000, - 0x158c: 0x4000, 0x158d: 0x4000, 0x158e: 0x4000, 0x158f: 0x4000, 0x1590: 0x4000, 0x1591: 0x4000, - 0x1592: 0x4000, 0x1593: 0x4000, - 0x15a0: 0x4000, 0x15a1: 0x4000, 0x15a2: 0x4000, 0x15a3: 0x4000, - 0x15a4: 0x4000, 0x15a5: 0x4000, 0x15a6: 0x4000, 0x15a7: 0x4000, 0x15a8: 0x4000, 0x15a9: 0x4000, - 0x15aa: 0x4000, 0x15ab: 0x4000, 0x15ac: 0x4000, 0x15ad: 0x4000, 0x15ae: 0x4000, 0x15af: 0x4000, - 0x15b0: 0x4000, 0x15b1: 0x4000, 0x15b2: 0x4000, 0x15b3: 0x4000, 0x15b4: 0x4000, 0x15b5: 0x4000, - 0x15b6: 0x4000, 0x15b7: 0x4000, 0x15b8: 0x4000, 0x15b9: 0x4000, 0x15ba: 0x4000, 0x15bb: 0x4000, - 0x15bc: 0x4000, 0x15bd: 0x4000, 0x15be: 0x4000, 0x15bf: 0x4000, - // Block 0x57, offset 0x15c0 - 0x15c0: 0x4000, 0x15c1: 0x4000, 0x15c2: 0x4000, 0x15c3: 0x4000, 0x15c4: 0x4000, 0x15c5: 0x4000, - 0x15c6: 0x4000, 0x15c7: 0x4000, 0x15c8: 0x4000, 0x15c9: 0x4000, 0x15ca: 0x4000, - 0x15cf: 0x4000, 0x15d0: 0x4000, 0x15d1: 0x4000, - 0x15d2: 0x4000, 0x15d3: 0x4000, - 0x15e0: 0x4000, 0x15e1: 0x4000, 0x15e2: 0x4000, 0x15e3: 0x4000, - 0x15e4: 0x4000, 0x15e5: 0x4000, 0x15e6: 0x4000, 0x15e7: 0x4000, 0x15e8: 0x4000, 0x15e9: 0x4000, - 0x15ea: 0x4000, 0x15eb: 0x4000, 0x15ec: 0x4000, 0x15ed: 0x4000, 0x15ee: 0x4000, 0x15ef: 0x4000, - 0x15f0: 0x4000, 0x15f4: 0x4000, - 0x15f8: 0x4000, 0x15f9: 0x4000, 0x15fa: 0x4000, 0x15fb: 0x4000, - 0x15fc: 0x4000, 0x15fd: 0x4000, 0x15fe: 0x4000, 0x15ff: 0x4000, - // Block 0x58, offset 0x1600 - 0x1600: 0x4000, 0x1602: 0x4000, 0x1603: 0x4000, 0x1604: 0x4000, 0x1605: 0x4000, - 0x1606: 0x4000, 0x1607: 0x4000, 0x1608: 0x4000, 0x1609: 0x4000, 0x160a: 0x4000, 0x160b: 0x4000, - 0x160c: 0x4000, 0x160d: 0x4000, 0x160e: 0x4000, 0x160f: 0x4000, 0x1610: 0x4000, 0x1611: 0x4000, - 0x1612: 0x4000, 0x1613: 0x4000, 0x1614: 0x4000, 0x1615: 0x4000, 0x1616: 0x4000, 0x1617: 0x4000, - 0x1618: 0x4000, 0x1619: 0x4000, 0x161a: 0x4000, 0x161b: 0x4000, 0x161c: 0x4000, 0x161d: 0x4000, - 0x161e: 0x4000, 0x161f: 0x4000, 0x1620: 0x4000, 0x1621: 0x4000, 0x1622: 0x4000, 0x1623: 0x4000, - 0x1624: 0x4000, 0x1625: 0x4000, 0x1626: 0x4000, 0x1627: 0x4000, 0x1628: 0x4000, 0x1629: 0x4000, - 0x162a: 0x4000, 0x162b: 0x4000, 0x162c: 0x4000, 0x162d: 0x4000, 0x162e: 0x4000, 0x162f: 0x4000, - 0x1630: 0x4000, 0x1631: 0x4000, 0x1632: 0x4000, 0x1633: 0x4000, 0x1634: 0x4000, 0x1635: 0x4000, - 0x1636: 0x4000, 0x1637: 0x4000, 0x1638: 0x4000, 0x1639: 0x4000, 0x163a: 0x4000, 0x163b: 0x4000, - 0x163c: 0x4000, 0x163d: 0x4000, 0x163e: 0x4000, 0x163f: 0x4000, - // Block 0x59, offset 0x1640 - 0x1640: 0x4000, 0x1641: 0x4000, 0x1642: 0x4000, 0x1643: 0x4000, 0x1644: 0x4000, 0x1645: 0x4000, - 0x1646: 0x4000, 0x1647: 0x4000, 0x1648: 0x4000, 0x1649: 0x4000, 0x164a: 0x4000, 0x164b: 0x4000, - 0x164c: 0x4000, 0x164d: 0x4000, 0x164e: 0x4000, 0x164f: 0x4000, 0x1650: 0x4000, 0x1651: 0x4000, - 0x1652: 0x4000, 0x1653: 0x4000, 0x1654: 0x4000, 0x1655: 0x4000, 0x1656: 0x4000, 0x1657: 0x4000, - 0x1658: 0x4000, 0x1659: 0x4000, 0x165a: 0x4000, 0x165b: 0x4000, 0x165c: 0x4000, 0x165d: 0x4000, - 0x165e: 0x4000, 0x165f: 0x4000, 0x1660: 0x4000, 0x1661: 0x4000, 0x1662: 0x4000, 0x1663: 0x4000, - 0x1664: 0x4000, 0x1665: 0x4000, 0x1666: 0x4000, 0x1667: 0x4000, 0x1668: 0x4000, 0x1669: 0x4000, - 0x166a: 0x4000, 0x166b: 0x4000, 0x166c: 0x4000, 0x166d: 0x4000, 0x166e: 0x4000, 0x166f: 0x4000, - 0x1670: 0x4000, 0x1671: 0x4000, 0x1672: 0x4000, 0x1673: 0x4000, 0x1674: 0x4000, 0x1675: 0x4000, - 0x1676: 0x4000, 0x1677: 0x4000, 0x1678: 0x4000, 0x1679: 0x4000, 0x167a: 0x4000, 0x167b: 0x4000, - 0x167c: 0x4000, 0x167f: 0x4000, - // Block 0x5a, offset 0x1680 - 0x1680: 0x4000, 0x1681: 0x4000, 0x1682: 0x4000, 0x1683: 0x4000, 0x1684: 0x4000, 0x1685: 0x4000, - 0x1686: 0x4000, 0x1687: 0x4000, 0x1688: 0x4000, 0x1689: 0x4000, 0x168a: 0x4000, 0x168b: 0x4000, - 0x168c: 0x4000, 0x168d: 0x4000, 0x168e: 0x4000, 0x168f: 0x4000, 0x1690: 0x4000, 0x1691: 0x4000, - 0x1692: 0x4000, 0x1693: 0x4000, 0x1694: 0x4000, 0x1695: 0x4000, 0x1696: 0x4000, 0x1697: 0x4000, - 0x1698: 0x4000, 0x1699: 0x4000, 0x169a: 0x4000, 0x169b: 0x4000, 0x169c: 0x4000, 0x169d: 0x4000, - 0x169e: 0x4000, 0x169f: 0x4000, 0x16a0: 0x4000, 0x16a1: 0x4000, 0x16a2: 0x4000, 0x16a3: 0x4000, - 0x16a4: 0x4000, 0x16a5: 0x4000, 0x16a6: 0x4000, 0x16a7: 0x4000, 0x16a8: 0x4000, 0x16a9: 0x4000, - 0x16aa: 0x4000, 0x16ab: 0x4000, 0x16ac: 0x4000, 0x16ad: 0x4000, 0x16ae: 0x4000, 0x16af: 0x4000, - 0x16b0: 0x4000, 0x16b1: 0x4000, 0x16b2: 0x4000, 0x16b3: 0x4000, 0x16b4: 0x4000, 0x16b5: 0x4000, - 0x16b6: 0x4000, 0x16b7: 0x4000, 0x16b8: 0x4000, 0x16b9: 0x4000, 0x16ba: 0x4000, 0x16bb: 0x4000, - 0x16bc: 0x4000, 0x16bd: 0x4000, - // Block 0x5b, offset 0x16c0 - 0x16cb: 0x4000, - 0x16cc: 0x4000, 0x16cd: 0x4000, 0x16ce: 0x4000, 0x16d0: 0x4000, 0x16d1: 0x4000, - 0x16d2: 0x4000, 0x16d3: 0x4000, 0x16d4: 0x4000, 0x16d5: 0x4000, 0x16d6: 0x4000, 0x16d7: 0x4000, - 0x16d8: 0x4000, 0x16d9: 0x4000, 0x16da: 0x4000, 0x16db: 0x4000, 0x16dc: 0x4000, 0x16dd: 0x4000, - 0x16de: 0x4000, 0x16df: 0x4000, 0x16e0: 0x4000, 0x16e1: 0x4000, 0x16e2: 0x4000, 0x16e3: 0x4000, - 0x16e4: 0x4000, 0x16e5: 0x4000, 0x16e6: 0x4000, 0x16e7: 0x4000, - 0x16fa: 0x4000, - // Block 0x5c, offset 0x1700 - 0x1715: 0x4000, 0x1716: 0x4000, - 0x1724: 0x4000, - // Block 0x5d, offset 0x1740 - 0x177b: 0x4000, - 0x177c: 0x4000, 0x177d: 0x4000, 0x177e: 0x4000, 0x177f: 0x4000, - // Block 0x5e, offset 0x1780 - 0x1780: 0x4000, 0x1781: 0x4000, 0x1782: 0x4000, 0x1783: 0x4000, 0x1784: 0x4000, 0x1785: 0x4000, - 0x1786: 0x4000, 0x1787: 0x4000, 0x1788: 0x4000, 0x1789: 0x4000, 0x178a: 0x4000, 0x178b: 0x4000, - 0x178c: 0x4000, 0x178d: 0x4000, 0x178e: 0x4000, 0x178f: 0x4000, - // Block 0x5f, offset 0x17c0 - 0x17c0: 0x4000, 0x17c1: 0x4000, 0x17c2: 0x4000, 0x17c3: 0x4000, 0x17c4: 0x4000, 0x17c5: 0x4000, - 0x17cc: 0x4000, 0x17d0: 0x4000, 0x17d1: 0x4000, - 0x17d2: 0x4000, 0x17d5: 0x4000, - 0x17eb: 0x4000, 0x17ec: 0x4000, - 0x17f4: 0x4000, 0x17f5: 0x4000, - 0x17f6: 0x4000, 0x17f7: 0x4000, 0x17f8: 0x4000, 0x17f9: 0x4000, 0x17fa: 0x4000, - // Block 0x60, offset 0x1800 - 0x1820: 0x4000, 0x1821: 0x4000, 0x1822: 0x4000, 0x1823: 0x4000, - 0x1824: 0x4000, 0x1825: 0x4000, 0x1826: 0x4000, 0x1827: 0x4000, 0x1828: 0x4000, 0x1829: 0x4000, - 0x182a: 0x4000, 0x182b: 0x4000, - // Block 0x61, offset 0x1840 - 0x184d: 0x4000, 0x184e: 0x4000, 0x184f: 0x4000, 0x1850: 0x4000, 0x1851: 0x4000, - 0x1852: 0x4000, 0x1853: 0x4000, 0x1854: 0x4000, 0x1855: 0x4000, 0x1856: 0x4000, 0x1857: 0x4000, - 0x1858: 0x4000, 0x1859: 0x4000, 0x185a: 0x4000, 0x185b: 0x4000, 0x185c: 0x4000, 0x185d: 0x4000, - 0x185e: 0x4000, 0x185f: 0x4000, 0x1860: 0x4000, 0x1861: 0x4000, 0x1862: 0x4000, 0x1863: 0x4000, - 0x1864: 0x4000, 0x1865: 0x4000, 0x1866: 0x4000, 0x1867: 0x4000, 0x1868: 0x4000, 0x1869: 0x4000, - 0x186a: 0x4000, 0x186b: 0x4000, 0x186c: 0x4000, 0x186d: 0x4000, 0x186e: 0x4000, 0x186f: 0x4000, - 0x1870: 0x4000, 0x1871: 0x4000, 0x1872: 0x4000, 0x1873: 0x4000, 0x1874: 0x4000, 0x1875: 0x4000, - 0x1876: 0x4000, 0x1877: 0x4000, 0x1878: 0x4000, 0x1879: 0x4000, 0x187a: 0x4000, 0x187b: 0x4000, - 0x187c: 0x4000, 0x187d: 0x4000, 0x187e: 0x4000, 0x187f: 0x4000, - // Block 0x62, offset 0x1880 - 0x1880: 0x4000, 0x1881: 0x4000, 0x1882: 0x4000, 0x1883: 0x4000, 0x1884: 0x4000, 0x1885: 0x4000, - 0x1886: 0x4000, 0x1887: 0x4000, 0x1888: 0x4000, 0x1889: 0x4000, 0x188a: 0x4000, 0x188b: 0x4000, - 0x188c: 0x4000, 0x188d: 0x4000, 0x188e: 0x4000, 0x188f: 0x4000, 0x1890: 0x4000, 0x1891: 0x4000, - 0x1892: 0x4000, 0x1893: 0x4000, 0x1894: 0x4000, 0x1895: 0x4000, 0x1896: 0x4000, 0x1897: 0x4000, - 0x1898: 0x4000, 0x1899: 0x4000, 0x189a: 0x4000, 0x189b: 0x4000, 0x189c: 0x4000, 0x189d: 0x4000, - 0x189e: 0x4000, 0x189f: 0x4000, 0x18a0: 0x4000, 0x18a1: 0x4000, 0x18a2: 0x4000, 0x18a3: 0x4000, - 0x18a4: 0x4000, 0x18a5: 0x4000, 0x18a6: 0x4000, 0x18a7: 0x4000, 0x18a8: 0x4000, 0x18a9: 0x4000, - 0x18aa: 0x4000, 0x18ab: 0x4000, 0x18ac: 0x4000, 0x18ad: 0x4000, 0x18ae: 0x4000, 0x18af: 0x4000, - 0x18b0: 0x4000, 0x18b1: 0x4000, 0x18b3: 0x4000, 0x18b4: 0x4000, 0x18b5: 0x4000, - 0x18b6: 0x4000, 0x18ba: 0x4000, 0x18bb: 0x4000, - 0x18bc: 0x4000, 0x18bd: 0x4000, 0x18be: 0x4000, 0x18bf: 0x4000, - // Block 0x63, offset 0x18c0 - 0x18c0: 0x4000, 0x18c1: 0x4000, 0x18c2: 0x4000, 0x18c3: 0x4000, 0x18c4: 0x4000, 0x18c5: 0x4000, - 0x18c6: 0x4000, 0x18c7: 0x4000, 0x18c8: 0x4000, 0x18c9: 0x4000, 0x18ca: 0x4000, 0x18cb: 0x4000, - 0x18cc: 0x4000, 0x18cd: 0x4000, 0x18ce: 0x4000, 0x18cf: 0x4000, 0x18d0: 0x4000, 0x18d1: 0x4000, - 0x18d2: 0x4000, 0x18d3: 0x4000, 0x18d4: 0x4000, 0x18d5: 0x4000, 0x18d6: 0x4000, 0x18d7: 0x4000, - 0x18d8: 0x4000, 0x18d9: 0x4000, 0x18da: 0x4000, 0x18db: 0x4000, 0x18dc: 0x4000, 0x18dd: 0x4000, - 0x18de: 0x4000, 0x18df: 0x4000, 0x18e0: 0x4000, 0x18e1: 0x4000, 0x18e2: 0x4000, - 0x18e5: 0x4000, 0x18e6: 0x4000, 0x18e7: 0x4000, 0x18e8: 0x4000, 0x18e9: 0x4000, - 0x18ea: 0x4000, 0x18ee: 0x4000, 0x18ef: 0x4000, - 0x18f0: 0x4000, 0x18f1: 0x4000, 0x18f2: 0x4000, 0x18f3: 0x4000, 0x18f4: 0x4000, 0x18f5: 0x4000, - 0x18f6: 0x4000, 0x18f7: 0x4000, 0x18f8: 0x4000, 0x18f9: 0x4000, 0x18fa: 0x4000, 0x18fb: 0x4000, - 0x18fc: 0x4000, 0x18fd: 0x4000, 0x18fe: 0x4000, 0x18ff: 0x4000, - // Block 0x64, offset 0x1900 - 0x1900: 0x4000, 0x1901: 0x4000, 0x1902: 0x4000, 0x1903: 0x4000, 0x1904: 0x4000, 0x1905: 0x4000, - 0x1906: 0x4000, 0x1907: 0x4000, 0x1908: 0x4000, 0x1909: 0x4000, 0x190a: 0x4000, - 0x190d: 0x4000, 0x190e: 0x4000, 0x190f: 0x4000, 0x1910: 0x4000, 0x1911: 0x4000, - 0x1912: 0x4000, 0x1913: 0x4000, 0x1914: 0x4000, 0x1915: 0x4000, 0x1916: 0x4000, 0x1917: 0x4000, - 0x1918: 0x4000, 0x1919: 0x4000, 0x191a: 0x4000, 0x191b: 0x4000, 0x191c: 0x4000, 0x191d: 0x4000, - 0x191e: 0x4000, 0x191f: 0x4000, 0x1920: 0x4000, 0x1921: 0x4000, 0x1922: 0x4000, 0x1923: 0x4000, - 0x1924: 0x4000, 0x1925: 0x4000, 0x1926: 0x4000, 0x1927: 0x4000, 0x1928: 0x4000, 0x1929: 0x4000, - 0x192a: 0x4000, 0x192b: 0x4000, 0x192c: 0x4000, 0x192d: 0x4000, 0x192e: 0x4000, 0x192f: 0x4000, - 0x1930: 0x4000, 0x1931: 0x4000, 0x1932: 0x4000, 0x1933: 0x4000, 0x1934: 0x4000, 0x1935: 0x4000, - 0x1936: 0x4000, 0x1937: 0x4000, 0x1938: 0x4000, 0x1939: 0x4000, 0x193a: 0x4000, 0x193b: 0x4000, - 0x193c: 0x4000, 0x193d: 0x4000, 0x193e: 0x4000, 0x193f: 0x4000, - // Block 0x65, offset 0x1940 - 0x1970: 0x4000, 0x1971: 0x4000, 0x1972: 0x4000, 0x1973: 0x4000, - 0x1978: 0x4000, 0x1979: 0x4000, 0x197a: 0x4000, - // Block 0x66, offset 0x1980 - 0x1980: 0x4000, 0x1981: 0x4000, 0x1982: 0x4000, - 0x1990: 0x4000, 0x1991: 0x4000, - 0x1992: 0x4000, 0x1993: 0x4000, 0x1994: 0x4000, 0x1995: 0x4000, - // Block 0x67, offset 0x19c0 - 0x19c0: 0x2000, 0x19c1: 0x2000, 0x19c2: 0x2000, 0x19c3: 0x2000, 0x19c4: 0x2000, 0x19c5: 0x2000, - 0x19c6: 0x2000, 0x19c7: 0x2000, 0x19c8: 0x2000, 0x19c9: 0x2000, 0x19ca: 0x2000, 0x19cb: 0x2000, - 0x19cc: 0x2000, 0x19cd: 0x2000, 0x19ce: 0x2000, 0x19cf: 0x2000, 0x19d0: 0x2000, 0x19d1: 0x2000, - 0x19d2: 0x2000, 0x19d3: 0x2000, 0x19d4: 0x2000, 0x19d5: 0x2000, 0x19d6: 0x2000, 0x19d7: 0x2000, - 0x19d8: 0x2000, 0x19d9: 0x2000, 0x19da: 0x2000, 0x19db: 0x2000, 0x19dc: 0x2000, 0x19dd: 0x2000, - 0x19de: 0x2000, 0x19df: 0x2000, 0x19e0: 0x2000, 0x19e1: 0x2000, 0x19e2: 0x2000, 0x19e3: 0x2000, - 0x19e4: 0x2000, 0x19e5: 0x2000, 0x19e6: 0x2000, 0x19e7: 0x2000, 0x19e8: 0x2000, 0x19e9: 0x2000, - 0x19ea: 0x2000, 0x19eb: 0x2000, 0x19ec: 0x2000, 0x19ed: 0x2000, 0x19ee: 0x2000, 0x19ef: 0x2000, - 0x19f0: 0x2000, 0x19f1: 0x2000, 0x19f2: 0x2000, 0x19f3: 0x2000, 0x19f4: 0x2000, 0x19f5: 0x2000, - 0x19f6: 0x2000, 0x19f7: 0x2000, 0x19f8: 0x2000, 0x19f9: 0x2000, 0x19fa: 0x2000, 0x19fb: 0x2000, - 0x19fc: 0x2000, 0x19fd: 0x2000, -} - -// widthIndex: 22 blocks, 1408 entries, 1408 bytes -// Block 0 is the zero block. -var widthIndex = [1408]uint8{ - // Block 0x0, offset 0x0 - // Block 0x1, offset 0x40 - // Block 0x2, offset 0x80 - // Block 0x3, offset 0xc0 - 0xc2: 0x01, 0xc3: 0x02, 0xc4: 0x03, 0xc5: 0x04, 0xc7: 0x05, - 0xc9: 0x06, 0xcb: 0x07, 0xcc: 0x08, 0xcd: 0x09, 0xce: 0x0a, 0xcf: 0x0b, - 0xd0: 0x0c, 0xd1: 0x0d, - 0xe1: 0x02, 0xe2: 0x03, 0xe3: 0x04, 0xe4: 0x05, 0xe5: 0x06, 0xe6: 0x06, 0xe7: 0x06, - 0xe8: 0x06, 0xe9: 0x06, 0xea: 0x07, 0xeb: 0x06, 0xec: 0x06, 0xed: 0x08, 0xee: 0x09, 0xef: 0x0a, - 0xf0: 0x0f, 0xf3: 0x12, 0xf4: 0x13, - // Block 0x4, offset 0x100 - 0x104: 0x0e, 0x105: 0x0f, - // Block 0x5, offset 0x140 - 0x140: 0x10, 0x141: 0x11, 0x142: 0x12, 0x144: 0x13, 0x145: 0x14, 0x146: 0x15, 0x147: 0x16, - 0x148: 0x17, 0x149: 0x18, 0x14a: 0x19, 0x14c: 0x1a, 0x14f: 0x1b, - 0x151: 0x1c, 0x152: 0x08, 0x153: 0x1d, 0x154: 0x1e, 0x155: 0x1f, 0x156: 0x20, 0x157: 0x21, - 0x158: 0x22, 0x159: 0x23, 0x15a: 0x24, 0x15b: 0x25, 0x15c: 0x26, 0x15d: 0x27, 0x15e: 0x28, 0x15f: 0x29, - 0x166: 0x2a, - 0x16c: 0x2b, 0x16d: 0x2c, - 0x17a: 0x2d, 0x17b: 0x2e, 0x17c: 0x0e, 0x17d: 0x0e, 0x17e: 0x0e, 0x17f: 0x2f, - // Block 0x6, offset 0x180 - 0x180: 0x30, 0x181: 0x31, 0x182: 0x32, 0x183: 0x33, 0x184: 0x34, 0x185: 0x35, 0x186: 0x36, 0x187: 0x37, - 0x188: 0x38, 0x189: 0x39, 0x18a: 0x0e, 0x18b: 0x3a, 0x18c: 0x0e, 0x18d: 0x0e, 0x18e: 0x0e, 0x18f: 0x0e, - 0x190: 0x0e, 0x191: 0x0e, 0x192: 0x0e, 0x193: 0x0e, 0x194: 0x0e, 0x195: 0x0e, 0x196: 0x0e, 0x197: 0x0e, - 0x198: 0x0e, 0x199: 0x0e, 0x19a: 0x0e, 0x19b: 0x0e, 0x19c: 0x0e, 0x19d: 0x0e, 0x19e: 0x0e, 0x19f: 0x0e, - 0x1a0: 0x0e, 0x1a1: 0x0e, 0x1a2: 0x0e, 0x1a3: 0x0e, 0x1a4: 0x0e, 0x1a5: 0x0e, 0x1a6: 0x0e, 0x1a7: 0x0e, - 0x1a8: 0x0e, 0x1a9: 0x0e, 0x1aa: 0x0e, 0x1ab: 0x0e, 0x1ac: 0x0e, 0x1ad: 0x0e, 0x1ae: 0x0e, 0x1af: 0x0e, - 0x1b0: 0x0e, 0x1b1: 0x0e, 0x1b2: 0x0e, 0x1b3: 0x0e, 0x1b4: 0x0e, 0x1b5: 0x0e, 0x1b6: 0x0e, 0x1b7: 0x0e, - 0x1b8: 0x0e, 0x1b9: 0x0e, 0x1ba: 0x0e, 0x1bb: 0x0e, 0x1bc: 0x0e, 0x1bd: 0x0e, 0x1be: 0x0e, 0x1bf: 0x0e, - // Block 0x7, offset 0x1c0 - 0x1c0: 0x0e, 0x1c1: 0x0e, 0x1c2: 0x0e, 0x1c3: 0x0e, 0x1c4: 0x0e, 0x1c5: 0x0e, 0x1c6: 0x0e, 0x1c7: 0x0e, - 0x1c8: 0x0e, 0x1c9: 0x0e, 0x1ca: 0x0e, 0x1cb: 0x0e, 0x1cc: 0x0e, 0x1cd: 0x0e, 0x1ce: 0x0e, 0x1cf: 0x0e, - 0x1d0: 0x0e, 0x1d1: 0x0e, 0x1d2: 0x0e, 0x1d3: 0x0e, 0x1d4: 0x0e, 0x1d5: 0x0e, 0x1d6: 0x0e, 0x1d7: 0x0e, - 0x1d8: 0x0e, 0x1d9: 0x0e, 0x1da: 0x0e, 0x1db: 0x0e, 0x1dc: 0x0e, 0x1dd: 0x0e, 0x1de: 0x0e, 0x1df: 0x0e, - 0x1e0: 0x0e, 0x1e1: 0x0e, 0x1e2: 0x0e, 0x1e3: 0x0e, 0x1e4: 0x0e, 0x1e5: 0x0e, 0x1e6: 0x0e, 0x1e7: 0x0e, - 0x1e8: 0x0e, 0x1e9: 0x0e, 0x1ea: 0x0e, 0x1eb: 0x0e, 0x1ec: 0x0e, 0x1ed: 0x0e, 0x1ee: 0x0e, 0x1ef: 0x0e, - 0x1f0: 0x0e, 0x1f1: 0x0e, 0x1f2: 0x0e, 0x1f3: 0x0e, 0x1f4: 0x0e, 0x1f5: 0x0e, 0x1f6: 0x0e, - 0x1f8: 0x0e, 0x1f9: 0x0e, 0x1fa: 0x0e, 0x1fb: 0x0e, 0x1fc: 0x0e, 0x1fd: 0x0e, 0x1fe: 0x0e, 0x1ff: 0x0e, - // Block 0x8, offset 0x200 - 0x200: 0x0e, 0x201: 0x0e, 0x202: 0x0e, 0x203: 0x0e, 0x204: 0x0e, 0x205: 0x0e, 0x206: 0x0e, 0x207: 0x0e, - 0x208: 0x0e, 0x209: 0x0e, 0x20a: 0x0e, 0x20b: 0x0e, 0x20c: 0x0e, 0x20d: 0x0e, 0x20e: 0x0e, 0x20f: 0x0e, - 0x210: 0x0e, 0x211: 0x0e, 0x212: 0x0e, 0x213: 0x0e, 0x214: 0x0e, 0x215: 0x0e, 0x216: 0x0e, 0x217: 0x0e, - 0x218: 0x0e, 0x219: 0x0e, 0x21a: 0x0e, 0x21b: 0x0e, 0x21c: 0x0e, 0x21d: 0x0e, 0x21e: 0x0e, 0x21f: 0x0e, - 0x220: 0x0e, 0x221: 0x0e, 0x222: 0x0e, 0x223: 0x0e, 0x224: 0x0e, 0x225: 0x0e, 0x226: 0x0e, 0x227: 0x0e, - 0x228: 0x0e, 0x229: 0x0e, 0x22a: 0x0e, 0x22b: 0x0e, 0x22c: 0x0e, 0x22d: 0x0e, 0x22e: 0x0e, 0x22f: 0x0e, - 0x230: 0x0e, 0x231: 0x0e, 0x232: 0x0e, 0x233: 0x0e, 0x234: 0x0e, 0x235: 0x0e, 0x236: 0x0e, 0x237: 0x0e, - 0x238: 0x0e, 0x239: 0x0e, 0x23a: 0x0e, 0x23b: 0x0e, 0x23c: 0x0e, 0x23d: 0x0e, 0x23e: 0x0e, 0x23f: 0x0e, - // Block 0x9, offset 0x240 - 0x240: 0x0e, 0x241: 0x0e, 0x242: 0x0e, 0x243: 0x0e, 0x244: 0x0e, 0x245: 0x0e, 0x246: 0x0e, 0x247: 0x0e, - 0x248: 0x0e, 0x249: 0x0e, 0x24a: 0x0e, 0x24b: 0x0e, 0x24c: 0x0e, 0x24d: 0x0e, 0x24e: 0x0e, 0x24f: 0x0e, - 0x250: 0x0e, 0x251: 0x0e, 0x252: 0x3b, 0x253: 0x3c, - 0x265: 0x3d, - 0x270: 0x0e, 0x271: 0x0e, 0x272: 0x0e, 0x273: 0x0e, 0x274: 0x0e, 0x275: 0x0e, 0x276: 0x0e, 0x277: 0x0e, - 0x278: 0x0e, 0x279: 0x0e, 0x27a: 0x0e, 0x27b: 0x0e, 0x27c: 0x0e, 0x27d: 0x0e, 0x27e: 0x0e, 0x27f: 0x0e, - // Block 0xa, offset 0x280 - 0x280: 0x0e, 0x281: 0x0e, 0x282: 0x0e, 0x283: 0x0e, 0x284: 0x0e, 0x285: 0x0e, 0x286: 0x0e, 0x287: 0x0e, - 0x288: 0x0e, 0x289: 0x0e, 0x28a: 0x0e, 0x28b: 0x0e, 0x28c: 0x0e, 0x28d: 0x0e, 0x28e: 0x0e, 0x28f: 0x0e, - 0x290: 0x0e, 0x291: 0x0e, 0x292: 0x0e, 0x293: 0x0e, 0x294: 0x0e, 0x295: 0x0e, 0x296: 0x0e, 0x297: 0x0e, - 0x298: 0x0e, 0x299: 0x0e, 0x29a: 0x0e, 0x29b: 0x0e, 0x29c: 0x0e, 0x29d: 0x0e, 0x29e: 0x3e, - // Block 0xb, offset 0x2c0 - 0x2c0: 0x08, 0x2c1: 0x08, 0x2c2: 0x08, 0x2c3: 0x08, 0x2c4: 0x08, 0x2c5: 0x08, 0x2c6: 0x08, 0x2c7: 0x08, - 0x2c8: 0x08, 0x2c9: 0x08, 0x2ca: 0x08, 0x2cb: 0x08, 0x2cc: 0x08, 0x2cd: 0x08, 0x2ce: 0x08, 0x2cf: 0x08, - 0x2d0: 0x08, 0x2d1: 0x08, 0x2d2: 0x08, 0x2d3: 0x08, 0x2d4: 0x08, 0x2d5: 0x08, 0x2d6: 0x08, 0x2d7: 0x08, - 0x2d8: 0x08, 0x2d9: 0x08, 0x2da: 0x08, 0x2db: 0x08, 0x2dc: 0x08, 0x2dd: 0x08, 0x2de: 0x08, 0x2df: 0x08, - 0x2e0: 0x08, 0x2e1: 0x08, 0x2e2: 0x08, 0x2e3: 0x08, 0x2e4: 0x08, 0x2e5: 0x08, 0x2e6: 0x08, 0x2e7: 0x08, - 0x2e8: 0x08, 0x2e9: 0x08, 0x2ea: 0x08, 0x2eb: 0x08, 0x2ec: 0x08, 0x2ed: 0x08, 0x2ee: 0x08, 0x2ef: 0x08, - 0x2f0: 0x08, 0x2f1: 0x08, 0x2f2: 0x08, 0x2f3: 0x08, 0x2f4: 0x08, 0x2f5: 0x08, 0x2f6: 0x08, 0x2f7: 0x08, - 0x2f8: 0x08, 0x2f9: 0x08, 0x2fa: 0x08, 0x2fb: 0x08, 0x2fc: 0x08, 0x2fd: 0x08, 0x2fe: 0x08, 0x2ff: 0x08, - // Block 0xc, offset 0x300 - 0x300: 0x08, 0x301: 0x08, 0x302: 0x08, 0x303: 0x08, 0x304: 0x08, 0x305: 0x08, 0x306: 0x08, 0x307: 0x08, - 0x308: 0x08, 0x309: 0x08, 0x30a: 0x08, 0x30b: 0x08, 0x30c: 0x08, 0x30d: 0x08, 0x30e: 0x08, 0x30f: 0x08, - 0x310: 0x08, 0x311: 0x08, 0x312: 0x08, 0x313: 0x08, 0x314: 0x08, 0x315: 0x08, 0x316: 0x08, 0x317: 0x08, - 0x318: 0x08, 0x319: 0x08, 0x31a: 0x08, 0x31b: 0x08, 0x31c: 0x08, 0x31d: 0x08, 0x31e: 0x08, 0x31f: 0x08, - 0x320: 0x08, 0x321: 0x08, 0x322: 0x08, 0x323: 0x08, 0x324: 0x0e, 0x325: 0x0e, 0x326: 0x0e, 0x327: 0x0e, - 0x328: 0x0e, 0x329: 0x0e, 0x32a: 0x0e, 0x32b: 0x0e, - 0x338: 0x3f, 0x339: 0x40, 0x33c: 0x41, 0x33d: 0x42, 0x33e: 0x43, 0x33f: 0x44, - // Block 0xd, offset 0x340 - 0x37f: 0x45, - // Block 0xe, offset 0x380 - 0x380: 0x0e, 0x381: 0x0e, 0x382: 0x0e, 0x383: 0x0e, 0x384: 0x0e, 0x385: 0x0e, 0x386: 0x0e, 0x387: 0x0e, - 0x388: 0x0e, 0x389: 0x0e, 0x38a: 0x0e, 0x38b: 0x0e, 0x38c: 0x0e, 0x38d: 0x0e, 0x38e: 0x0e, 0x38f: 0x0e, - 0x390: 0x0e, 0x391: 0x0e, 0x392: 0x0e, 0x393: 0x0e, 0x394: 0x0e, 0x395: 0x0e, 0x396: 0x0e, 0x397: 0x0e, - 0x398: 0x0e, 0x399: 0x0e, 0x39a: 0x0e, 0x39b: 0x0e, 0x39c: 0x0e, 0x39d: 0x0e, 0x39e: 0x0e, 0x39f: 0x46, - 0x3a0: 0x0e, 0x3a1: 0x0e, 0x3a2: 0x0e, 0x3a3: 0x0e, 0x3a4: 0x0e, 0x3a5: 0x0e, 0x3a6: 0x0e, 0x3a7: 0x0e, - 0x3a8: 0x0e, 0x3a9: 0x0e, 0x3aa: 0x0e, 0x3ab: 0x47, - // Block 0xf, offset 0x3c0 - 0x3c0: 0x0e, 0x3c1: 0x0e, 0x3c2: 0x0e, 0x3c3: 0x0e, 0x3c4: 0x48, 0x3c5: 0x49, 0x3c6: 0x0e, 0x3c7: 0x0e, - 0x3c8: 0x0e, 0x3c9: 0x0e, 0x3ca: 0x0e, 0x3cb: 0x4a, - // Block 0x10, offset 0x400 - 0x400: 0x4b, 0x403: 0x4c, 0x404: 0x4d, 0x405: 0x4e, 0x406: 0x4f, - 0x408: 0x50, 0x409: 0x51, 0x40c: 0x52, 0x40d: 0x53, 0x40e: 0x54, 0x40f: 0x55, - 0x410: 0x3a, 0x411: 0x56, 0x412: 0x0e, 0x413: 0x57, 0x414: 0x58, 0x415: 0x59, 0x416: 0x5a, 0x417: 0x5b, - 0x418: 0x0e, 0x419: 0x5c, 0x41a: 0x0e, 0x41b: 0x5d, 0x41f: 0x5e, - 0x424: 0x5f, 0x425: 0x60, 0x426: 0x61, 0x427: 0x62, - 0x429: 0x63, 0x42a: 0x64, - // Block 0x11, offset 0x440 - 0x456: 0x0b, 0x457: 0x06, - 0x458: 0x0c, 0x45b: 0x0d, 0x45f: 0x0e, - 0x460: 0x06, 0x461: 0x06, 0x462: 0x06, 0x463: 0x06, 0x464: 0x06, 0x465: 0x06, 0x466: 0x06, 0x467: 0x06, - 0x468: 0x06, 0x469: 0x06, 0x46a: 0x06, 0x46b: 0x06, 0x46c: 0x06, 0x46d: 0x06, 0x46e: 0x06, 0x46f: 0x06, - 0x470: 0x06, 0x471: 0x06, 0x472: 0x06, 0x473: 0x06, 0x474: 0x06, 0x475: 0x06, 0x476: 0x06, 0x477: 0x06, - 0x478: 0x06, 0x479: 0x06, 0x47a: 0x06, 0x47b: 0x06, 0x47c: 0x06, 0x47d: 0x06, 0x47e: 0x06, 0x47f: 0x06, - // Block 0x12, offset 0x480 - 0x484: 0x08, 0x485: 0x08, 0x486: 0x08, 0x487: 0x09, - // Block 0x13, offset 0x4c0 - 0x4c0: 0x08, 0x4c1: 0x08, 0x4c2: 0x08, 0x4c3: 0x08, 0x4c4: 0x08, 0x4c5: 0x08, 0x4c6: 0x08, 0x4c7: 0x08, - 0x4c8: 0x08, 0x4c9: 0x08, 0x4ca: 0x08, 0x4cb: 0x08, 0x4cc: 0x08, 0x4cd: 0x08, 0x4ce: 0x08, 0x4cf: 0x08, - 0x4d0: 0x08, 0x4d1: 0x08, 0x4d2: 0x08, 0x4d3: 0x08, 0x4d4: 0x08, 0x4d5: 0x08, 0x4d6: 0x08, 0x4d7: 0x08, - 0x4d8: 0x08, 0x4d9: 0x08, 0x4da: 0x08, 0x4db: 0x08, 0x4dc: 0x08, 0x4dd: 0x08, 0x4de: 0x08, 0x4df: 0x08, - 0x4e0: 0x08, 0x4e1: 0x08, 0x4e2: 0x08, 0x4e3: 0x08, 0x4e4: 0x08, 0x4e5: 0x08, 0x4e6: 0x08, 0x4e7: 0x08, - 0x4e8: 0x08, 0x4e9: 0x08, 0x4ea: 0x08, 0x4eb: 0x08, 0x4ec: 0x08, 0x4ed: 0x08, 0x4ee: 0x08, 0x4ef: 0x08, - 0x4f0: 0x08, 0x4f1: 0x08, 0x4f2: 0x08, 0x4f3: 0x08, 0x4f4: 0x08, 0x4f5: 0x08, 0x4f6: 0x08, 0x4f7: 0x08, - 0x4f8: 0x08, 0x4f9: 0x08, 0x4fa: 0x08, 0x4fb: 0x08, 0x4fc: 0x08, 0x4fd: 0x08, 0x4fe: 0x08, 0x4ff: 0x65, - // Block 0x14, offset 0x500 - 0x520: 0x10, - 0x530: 0x09, 0x531: 0x09, 0x532: 0x09, 0x533: 0x09, 0x534: 0x09, 0x535: 0x09, 0x536: 0x09, 0x537: 0x09, - 0x538: 0x09, 0x539: 0x09, 0x53a: 0x09, 0x53b: 0x09, 0x53c: 0x09, 0x53d: 0x09, 0x53e: 0x09, 0x53f: 0x11, - // Block 0x15, offset 0x540 - 0x540: 0x09, 0x541: 0x09, 0x542: 0x09, 0x543: 0x09, 0x544: 0x09, 0x545: 0x09, 0x546: 0x09, 0x547: 0x09, - 0x548: 0x09, 0x549: 0x09, 0x54a: 0x09, 0x54b: 0x09, 0x54c: 0x09, 0x54d: 0x09, 0x54e: 0x09, 0x54f: 0x11, -} - -// inverseData contains 4-byte entries of the following format: -// -// <0 padding> -// -// The last byte of the UTF-8-encoded rune is xor-ed with the last byte of the -// UTF-8 encoding of the original rune. Mappings often have the following -// pattern: -// -// A -> A (U+FF21 -> U+0041) -// B -> B (U+FF22 -> U+0042) -// ... -// -// By xor-ing the last byte the same entry can be shared by many mappings. This -// reduces the total number of distinct entries by about two thirds. -// The resulting entry for the aforementioned mappings is -// -// { 0x01, 0xE0, 0x00, 0x00 } -// -// Using this entry to map U+FF21 (UTF-8 [EF BC A1]), we get -// -// E0 ^ A1 = 41. -// -// Similarly, for U+FF22 (UTF-8 [EF BC A2]), we get -// -// E0 ^ A2 = 42. -// -// Note that because of the xor-ing, the byte sequence stored in the entry is -// not valid UTF-8. -var inverseData = [150][4]byte{ - {0x00, 0x00, 0x00, 0x00}, - {0x03, 0xe3, 0x80, 0xa0}, - {0x03, 0xef, 0xbc, 0xa0}, - {0x03, 0xef, 0xbc, 0xe0}, - {0x03, 0xef, 0xbd, 0xe0}, - {0x03, 0xef, 0xbf, 0x02}, - {0x03, 0xef, 0xbf, 0x00}, - {0x03, 0xef, 0xbf, 0x0e}, - {0x03, 0xef, 0xbf, 0x0c}, - {0x03, 0xef, 0xbf, 0x0f}, - {0x03, 0xef, 0xbf, 0x39}, - {0x03, 0xef, 0xbf, 0x3b}, - {0x03, 0xef, 0xbf, 0x3f}, - {0x03, 0xef, 0xbf, 0x2a}, - {0x03, 0xef, 0xbf, 0x0d}, - {0x03, 0xef, 0xbf, 0x25}, - {0x03, 0xef, 0xbd, 0x1a}, - {0x03, 0xef, 0xbd, 0x26}, - {0x01, 0xa0, 0x00, 0x00}, - {0x03, 0xef, 0xbd, 0x25}, - {0x03, 0xef, 0xbd, 0x23}, - {0x03, 0xef, 0xbd, 0x2e}, - {0x03, 0xef, 0xbe, 0x07}, - {0x03, 0xef, 0xbe, 0x05}, - {0x03, 0xef, 0xbd, 0x06}, - {0x03, 0xef, 0xbd, 0x13}, - {0x03, 0xef, 0xbd, 0x0b}, - {0x03, 0xef, 0xbd, 0x16}, - {0x03, 0xef, 0xbd, 0x0c}, - {0x03, 0xef, 0xbd, 0x15}, - {0x03, 0xef, 0xbd, 0x0d}, - {0x03, 0xef, 0xbd, 0x1c}, - {0x03, 0xef, 0xbd, 0x02}, - {0x03, 0xef, 0xbd, 0x1f}, - {0x03, 0xef, 0xbd, 0x1d}, - {0x03, 0xef, 0xbd, 0x17}, - {0x03, 0xef, 0xbd, 0x08}, - {0x03, 0xef, 0xbd, 0x09}, - {0x03, 0xef, 0xbd, 0x0e}, - {0x03, 0xef, 0xbd, 0x04}, - {0x03, 0xef, 0xbd, 0x05}, - {0x03, 0xef, 0xbe, 0x3f}, - {0x03, 0xef, 0xbe, 0x00}, - {0x03, 0xef, 0xbd, 0x2c}, - {0x03, 0xef, 0xbe, 0x06}, - {0x03, 0xef, 0xbe, 0x0c}, - {0x03, 0xef, 0xbe, 0x0f}, - {0x03, 0xef, 0xbe, 0x0d}, - {0x03, 0xef, 0xbe, 0x0b}, - {0x03, 0xef, 0xbe, 0x19}, - {0x03, 0xef, 0xbe, 0x15}, - {0x03, 0xef, 0xbe, 0x11}, - {0x03, 0xef, 0xbe, 0x31}, - {0x03, 0xef, 0xbe, 0x33}, - {0x03, 0xef, 0xbd, 0x0f}, - {0x03, 0xef, 0xbe, 0x30}, - {0x03, 0xef, 0xbe, 0x3e}, - {0x03, 0xef, 0xbe, 0x32}, - {0x03, 0xef, 0xbe, 0x36}, - {0x03, 0xef, 0xbd, 0x14}, - {0x03, 0xef, 0xbe, 0x2e}, - {0x03, 0xef, 0xbd, 0x1e}, - {0x03, 0xef, 0xbe, 0x10}, - {0x03, 0xef, 0xbf, 0x13}, - {0x03, 0xef, 0xbf, 0x15}, - {0x03, 0xef, 0xbf, 0x17}, - {0x03, 0xef, 0xbf, 0x1f}, - {0x03, 0xef, 0xbf, 0x1d}, - {0x03, 0xef, 0xbf, 0x1b}, - {0x03, 0xef, 0xbf, 0x09}, - {0x03, 0xef, 0xbf, 0x0b}, - {0x03, 0xef, 0xbf, 0x37}, - {0x03, 0xef, 0xbe, 0x04}, - {0x01, 0xe0, 0x00, 0x00}, - {0x03, 0xe2, 0xa6, 0x1a}, - {0x03, 0xe2, 0xa6, 0x26}, - {0x03, 0xe3, 0x80, 0x23}, - {0x03, 0xe3, 0x80, 0x2e}, - {0x03, 0xe3, 0x80, 0x25}, - {0x03, 0xe3, 0x83, 0x1e}, - {0x03, 0xe3, 0x83, 0x14}, - {0x03, 0xe3, 0x82, 0x06}, - {0x03, 0xe3, 0x82, 0x0b}, - {0x03, 0xe3, 0x82, 0x0c}, - {0x03, 0xe3, 0x82, 0x0d}, - {0x03, 0xe3, 0x82, 0x02}, - {0x03, 0xe3, 0x83, 0x0f}, - {0x03, 0xe3, 0x83, 0x08}, - {0x03, 0xe3, 0x83, 0x09}, - {0x03, 0xe3, 0x83, 0x2c}, - {0x03, 0xe3, 0x83, 0x0c}, - {0x03, 0xe3, 0x82, 0x13}, - {0x03, 0xe3, 0x82, 0x16}, - {0x03, 0xe3, 0x82, 0x15}, - {0x03, 0xe3, 0x82, 0x1c}, - {0x03, 0xe3, 0x82, 0x1f}, - {0x03, 0xe3, 0x82, 0x1d}, - {0x03, 0xe3, 0x82, 0x1a}, - {0x03, 0xe3, 0x82, 0x17}, - {0x03, 0xe3, 0x82, 0x08}, - {0x03, 0xe3, 0x82, 0x09}, - {0x03, 0xe3, 0x82, 0x0e}, - {0x03, 0xe3, 0x82, 0x04}, - {0x03, 0xe3, 0x82, 0x05}, - {0x03, 0xe3, 0x82, 0x3f}, - {0x03, 0xe3, 0x83, 0x00}, - {0x03, 0xe3, 0x83, 0x06}, - {0x03, 0xe3, 0x83, 0x05}, - {0x03, 0xe3, 0x83, 0x0d}, - {0x03, 0xe3, 0x83, 0x0b}, - {0x03, 0xe3, 0x83, 0x07}, - {0x03, 0xe3, 0x83, 0x19}, - {0x03, 0xe3, 0x83, 0x15}, - {0x03, 0xe3, 0x83, 0x11}, - {0x03, 0xe3, 0x83, 0x31}, - {0x03, 0xe3, 0x83, 0x33}, - {0x03, 0xe3, 0x83, 0x30}, - {0x03, 0xe3, 0x83, 0x3e}, - {0x03, 0xe3, 0x83, 0x32}, - {0x03, 0xe3, 0x83, 0x36}, - {0x03, 0xe3, 0x83, 0x2e}, - {0x03, 0xe3, 0x82, 0x07}, - {0x03, 0xe3, 0x85, 0x04}, - {0x03, 0xe3, 0x84, 0x10}, - {0x03, 0xe3, 0x85, 0x30}, - {0x03, 0xe3, 0x85, 0x0d}, - {0x03, 0xe3, 0x85, 0x13}, - {0x03, 0xe3, 0x85, 0x15}, - {0x03, 0xe3, 0x85, 0x17}, - {0x03, 0xe3, 0x85, 0x1f}, - {0x03, 0xe3, 0x85, 0x1d}, - {0x03, 0xe3, 0x85, 0x1b}, - {0x03, 0xe3, 0x85, 0x09}, - {0x03, 0xe3, 0x85, 0x0f}, - {0x03, 0xe3, 0x85, 0x0b}, - {0x03, 0xe3, 0x85, 0x37}, - {0x03, 0xe3, 0x85, 0x3b}, - {0x03, 0xe3, 0x85, 0x39}, - {0x03, 0xe3, 0x85, 0x3f}, - {0x02, 0xc2, 0x02, 0x00}, - {0x02, 0xc2, 0x0e, 0x00}, - {0x02, 0xc2, 0x0c, 0x00}, - {0x02, 0xc2, 0x00, 0x00}, - {0x03, 0xe2, 0x82, 0x0f}, - {0x03, 0xe2, 0x94, 0x2a}, - {0x03, 0xe2, 0x86, 0x39}, - {0x03, 0xe2, 0x86, 0x3b}, - {0x03, 0xe2, 0x86, 0x3f}, - {0x03, 0xe2, 0x96, 0x0d}, - {0x03, 0xe2, 0x97, 0x25}, -} - -// Total table size 15320 bytes (14KiB) diff --git a/vendor/golang.org/x/text/width/tables15.0.0.go b/vendor/golang.org/x/text/width/tables15.0.0.go index 2b85289675..9b2ae82aeb 100644 --- a/vendor/golang.org/x/text/width/tables15.0.0.go +++ b/vendor/golang.org/x/text/width/tables15.0.0.go @@ -1,6 +1,6 @@ // Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. -//go:build go1.21 +//go:build !go1.27 package width diff --git a/vendor/golang.org/x/text/width/tables13.0.0.go b/vendor/golang.org/x/text/width/tables17.0.0.go similarity index 74% rename from vendor/golang.org/x/text/width/tables13.0.0.go rename to vendor/golang.org/x/text/width/tables17.0.0.go index 40c169edf6..026e27f4b0 100644 --- a/vendor/golang.org/x/text/width/tables13.0.0.go +++ b/vendor/golang.org/x/text/width/tables17.0.0.go @@ -1,11 +1,11 @@ // Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. -//go:build go1.16 && !go1.21 +//go:build go1.27 package width // UnicodeVersion is the Unicode version from which the tables in this package are derived. -const UnicodeVersion = "13.0.0" +const UnicodeVersion = "17.0.0" // lookup returns the trie value for the first UTF-8 encoding in s and // the width in bytes of this encoding. The size will be 0 if s does not @@ -177,7 +177,7 @@ func (t *widthTrie) lookupStringUnsafe(s string) uint16 { return 0 } -// widthTrie. Total size: 14848 bytes (14.50 KiB). Checksum: 17e24343536472f6. +// widthTrie. Total size: 15040 bytes (14.69 KiB). Checksum: 1c37fc66dcf8f532. type widthTrie struct{} func newWidthTrie(i int) *widthTrie { @@ -192,9 +192,9 @@ func (t *widthTrie) lookupValue(n uint32, b byte) uint16 { } } -// widthValues: 105 blocks, 6720 entries, 13440 bytes +// widthValues: 106 blocks, 6784 entries, 13568 bytes // The third block is the zero block. -var widthValues = [6720]uint16{ +var widthValues = [6784]uint16{ // Block 0x0, offset 0x0 0x20: 0x6001, 0x21: 0x6002, 0x22: 0x6002, 0x23: 0x6002, 0x24: 0x6002, 0x25: 0x6002, 0x26: 0x6002, 0x27: 0x6002, 0x28: 0x6002, 0x29: 0x6002, @@ -471,6 +471,8 @@ var widthValues = [6720]uint16{ 0x914: 0x4000, 0x915: 0x4000, 0x91c: 0x2000, 0x91e: 0x2000, + 0x930: 0x4000, 0x931: 0x4000, 0x932: 0x4000, 0x933: 0x4000, 0x934: 0x4000, 0x935: 0x4000, + 0x936: 0x4000, 0x937: 0x4000, // Block 0x25, offset 0x940 0x940: 0x2000, 0x942: 0x2000, 0x948: 0x4000, 0x949: 0x4000, 0x94a: 0x4000, 0x94b: 0x4000, @@ -481,6 +483,8 @@ var widthValues = [6720]uint16{ 0x96a: 0x2000, 0x96c: 0x2000, 0x96d: 0x2000, 0x96f: 0x2000, 0x97f: 0x4000, // Block 0x26, offset 0x980 + 0x98a: 0x4000, 0x98b: 0x4000, + 0x98c: 0x4000, 0x98d: 0x4000, 0x98e: 0x4000, 0x98f: 0x4000, 0x993: 0x4000, 0x99e: 0x2000, 0x99f: 0x2000, 0x9a1: 0x4000, 0x9aa: 0x4000, 0x9ab: 0x4000, @@ -552,6 +556,7 @@ var widthValues = [6720]uint16{ 0xc52: 0x4000, 0xc53: 0x4000, 0xc54: 0x4000, 0xc55: 0x4000, 0xc70: 0x4000, 0xc71: 0x4000, 0xc72: 0x4000, 0xc73: 0x4000, 0xc74: 0x4000, 0xc75: 0x4000, 0xc76: 0x4000, 0xc77: 0x4000, 0xc78: 0x4000, 0xc79: 0x4000, 0xc7a: 0x4000, 0xc7b: 0x4000, + 0xc7c: 0x4000, 0xc7d: 0x4000, 0xc7e: 0x4000, 0xc7f: 0x4000, // Block 0x32, offset 0xc80 0xc80: 0x9012, 0xc81: 0x4013, 0xc82: 0x4014, 0xc83: 0x4000, 0xc84: 0x4000, 0xc85: 0x4000, 0xc86: 0x4000, 0xc87: 0x4000, 0xc88: 0x4000, 0xc89: 0x4000, 0xc8a: 0x4000, 0xc8b: 0x4000, @@ -643,6 +648,8 @@ var widthValues = [6720]uint16{ 0xe52: 0x4000, 0xe53: 0x4000, 0xe54: 0x4000, 0xe55: 0x4000, 0xe56: 0x4000, 0xe57: 0x4000, 0xe58: 0x4000, 0xe59: 0x4000, 0xe5a: 0x4000, 0xe5b: 0x4000, 0xe5c: 0x4000, 0xe5d: 0x4000, 0xe5e: 0x4000, 0xe5f: 0x4000, 0xe60: 0x4000, 0xe61: 0x4000, 0xe62: 0x4000, 0xe63: 0x4000, + 0xe64: 0x4000, 0xe65: 0x4000, + 0xe6f: 0x4000, 0xe70: 0x4000, 0xe71: 0x4000, 0xe72: 0x4000, 0xe73: 0x4000, 0xe74: 0x4000, 0xe75: 0x4000, 0xe76: 0x4000, 0xe77: 0x4000, 0xe78: 0x4000, 0xe79: 0x4000, 0xe7a: 0x4000, 0xe7b: 0x4000, 0xe7c: 0x4000, 0xe7d: 0x4000, 0xe7e: 0x4000, 0xe7f: 0x4000, @@ -766,171 +773,167 @@ var widthValues = [6720]uint16{ // Block 0x46, offset 0x1180 0x11a0: 0x4000, 0x11a1: 0x4000, 0x11a2: 0x4000, 0x11a3: 0x4000, 0x11a4: 0x4000, - 0x11b0: 0x4000, 0x11b1: 0x4000, + 0x11b0: 0x4000, 0x11b1: 0x4000, 0x11b2: 0x4000, 0x11b3: 0x4000, 0x11b4: 0x4000, 0x11b5: 0x4000, + 0x11b6: 0x4000, // Block 0x47, offset 0x11c0 0x11c0: 0x4000, 0x11c1: 0x4000, 0x11c2: 0x4000, 0x11c3: 0x4000, 0x11c4: 0x4000, 0x11c5: 0x4000, 0x11c6: 0x4000, 0x11c7: 0x4000, 0x11c8: 0x4000, 0x11c9: 0x4000, 0x11ca: 0x4000, 0x11cb: 0x4000, 0x11cc: 0x4000, 0x11cd: 0x4000, 0x11ce: 0x4000, 0x11cf: 0x4000, 0x11d0: 0x4000, 0x11d1: 0x4000, - 0x11d2: 0x4000, 0x11d3: 0x4000, 0x11d4: 0x4000, 0x11d5: 0x4000, 0x11d6: 0x4000, 0x11d7: 0x4000, - 0x11d8: 0x4000, 0x11d9: 0x4000, 0x11da: 0x4000, 0x11db: 0x4000, 0x11dc: 0x4000, 0x11dd: 0x4000, - 0x11de: 0x4000, 0x11df: 0x4000, 0x11e0: 0x4000, 0x11e1: 0x4000, 0x11e2: 0x4000, 0x11e3: 0x4000, - 0x11e4: 0x4000, 0x11e5: 0x4000, 0x11e6: 0x4000, 0x11e7: 0x4000, 0x11e8: 0x4000, 0x11e9: 0x4000, - 0x11ea: 0x4000, 0x11eb: 0x4000, 0x11ec: 0x4000, 0x11ed: 0x4000, 0x11ee: 0x4000, 0x11ef: 0x4000, - 0x11f0: 0x4000, 0x11f1: 0x4000, 0x11f2: 0x4000, 0x11f3: 0x4000, 0x11f4: 0x4000, 0x11f5: 0x4000, - 0x11f6: 0x4000, 0x11f7: 0x4000, + 0x11d2: 0x4000, 0x11d3: 0x4000, 0x11d4: 0x4000, 0x11d5: 0x4000, + 0x11ff: 0x4000, // Block 0x48, offset 0x1200 0x1200: 0x4000, 0x1201: 0x4000, 0x1202: 0x4000, 0x1203: 0x4000, 0x1204: 0x4000, 0x1205: 0x4000, 0x1206: 0x4000, 0x1207: 0x4000, 0x1208: 0x4000, 0x1209: 0x4000, 0x120a: 0x4000, 0x120b: 0x4000, 0x120c: 0x4000, 0x120d: 0x4000, 0x120e: 0x4000, 0x120f: 0x4000, 0x1210: 0x4000, 0x1211: 0x4000, - 0x1212: 0x4000, 0x1213: 0x4000, 0x1214: 0x4000, 0x1215: 0x4000, + 0x1212: 0x4000, 0x1213: 0x4000, 0x1214: 0x4000, 0x1215: 0x4000, 0x1216: 0x4000, 0x1217: 0x4000, + 0x1218: 0x4000, 0x1219: 0x4000, 0x121a: 0x4000, 0x121b: 0x4000, 0x121c: 0x4000, 0x121d: 0x4000, + 0x121e: 0x4000, // Block 0x49, offset 0x1240 0x1240: 0x4000, 0x1241: 0x4000, 0x1242: 0x4000, 0x1243: 0x4000, 0x1244: 0x4000, 0x1245: 0x4000, - 0x1246: 0x4000, 0x1247: 0x4000, 0x1248: 0x4000, + 0x1246: 0x4000, 0x1247: 0x4000, 0x1248: 0x4000, 0x1249: 0x4000, 0x124a: 0x4000, 0x124b: 0x4000, + 0x124c: 0x4000, 0x124d: 0x4000, 0x124e: 0x4000, 0x124f: 0x4000, 0x1250: 0x4000, 0x1251: 0x4000, + 0x1252: 0x4000, 0x1253: 0x4000, 0x1254: 0x4000, 0x1255: 0x4000, 0x1256: 0x4000, 0x1257: 0x4000, + 0x1258: 0x4000, 0x1259: 0x4000, 0x125a: 0x4000, 0x125b: 0x4000, 0x125c: 0x4000, 0x125d: 0x4000, + 0x125e: 0x4000, 0x125f: 0x4000, 0x1260: 0x4000, 0x1261: 0x4000, 0x1262: 0x4000, 0x1263: 0x4000, + 0x1264: 0x4000, 0x1265: 0x4000, 0x1266: 0x4000, 0x1267: 0x4000, 0x1268: 0x4000, 0x1269: 0x4000, + 0x126a: 0x4000, 0x126b: 0x4000, 0x126c: 0x4000, 0x126d: 0x4000, 0x126e: 0x4000, 0x126f: 0x4000, + 0x1270: 0x4000, 0x1271: 0x4000, 0x1272: 0x4000, // Block 0x4a, offset 0x1280 - 0x1280: 0x4000, 0x1281: 0x4000, 0x1282: 0x4000, 0x1283: 0x4000, 0x1284: 0x4000, 0x1285: 0x4000, - 0x1286: 0x4000, 0x1287: 0x4000, 0x1288: 0x4000, 0x1289: 0x4000, 0x128a: 0x4000, 0x128b: 0x4000, - 0x128c: 0x4000, 0x128d: 0x4000, 0x128e: 0x4000, 0x128f: 0x4000, 0x1290: 0x4000, 0x1291: 0x4000, - 0x1292: 0x4000, 0x1293: 0x4000, 0x1294: 0x4000, 0x1295: 0x4000, 0x1296: 0x4000, 0x1297: 0x4000, - 0x1298: 0x4000, 0x1299: 0x4000, 0x129a: 0x4000, 0x129b: 0x4000, 0x129c: 0x4000, 0x129d: 0x4000, - 0x129e: 0x4000, + 0x12b0: 0x4000, 0x12b1: 0x4000, 0x12b2: 0x4000, 0x12b3: 0x4000, 0x12b5: 0x4000, + 0x12b6: 0x4000, 0x12b7: 0x4000, 0x12b8: 0x4000, 0x12b9: 0x4000, 0x12ba: 0x4000, 0x12bb: 0x4000, + 0x12bd: 0x4000, 0x12be: 0x4000, // Block 0x4b, offset 0x12c0 - 0x12d0: 0x4000, 0x12d1: 0x4000, - 0x12d2: 0x4000, - 0x12e4: 0x4000, 0x12e5: 0x4000, 0x12e6: 0x4000, 0x12e7: 0x4000, - 0x12f0: 0x4000, 0x12f1: 0x4000, 0x12f2: 0x4000, 0x12f3: 0x4000, 0x12f4: 0x4000, 0x12f5: 0x4000, - 0x12f6: 0x4000, 0x12f7: 0x4000, 0x12f8: 0x4000, 0x12f9: 0x4000, 0x12fa: 0x4000, 0x12fb: 0x4000, - 0x12fc: 0x4000, 0x12fd: 0x4000, 0x12fe: 0x4000, 0x12ff: 0x4000, + 0x12c0: 0x4000, 0x12c1: 0x4000, 0x12c2: 0x4000, 0x12c3: 0x4000, 0x12c4: 0x4000, 0x12c5: 0x4000, + 0x12c6: 0x4000, 0x12c7: 0x4000, 0x12c8: 0x4000, 0x12c9: 0x4000, 0x12ca: 0x4000, 0x12cb: 0x4000, + 0x12cc: 0x4000, 0x12cd: 0x4000, 0x12ce: 0x4000, 0x12cf: 0x4000, 0x12d0: 0x4000, 0x12d1: 0x4000, + 0x12d2: 0x4000, 0x12d3: 0x4000, 0x12d4: 0x4000, 0x12d5: 0x4000, 0x12d6: 0x4000, 0x12d7: 0x4000, + 0x12d8: 0x4000, 0x12d9: 0x4000, 0x12da: 0x4000, 0x12db: 0x4000, 0x12dc: 0x4000, 0x12dd: 0x4000, + 0x12de: 0x4000, 0x12df: 0x4000, 0x12e0: 0x4000, 0x12e1: 0x4000, 0x12e2: 0x4000, + 0x12f2: 0x4000, // Block 0x4c, offset 0x1300 - 0x1300: 0x4000, 0x1301: 0x4000, 0x1302: 0x4000, 0x1303: 0x4000, 0x1304: 0x4000, 0x1305: 0x4000, - 0x1306: 0x4000, 0x1307: 0x4000, 0x1308: 0x4000, 0x1309: 0x4000, 0x130a: 0x4000, 0x130b: 0x4000, - 0x130c: 0x4000, 0x130d: 0x4000, 0x130e: 0x4000, 0x130f: 0x4000, 0x1310: 0x4000, 0x1311: 0x4000, - 0x1312: 0x4000, 0x1313: 0x4000, 0x1314: 0x4000, 0x1315: 0x4000, 0x1316: 0x4000, 0x1317: 0x4000, - 0x1318: 0x4000, 0x1319: 0x4000, 0x131a: 0x4000, 0x131b: 0x4000, 0x131c: 0x4000, 0x131d: 0x4000, - 0x131e: 0x4000, 0x131f: 0x4000, 0x1320: 0x4000, 0x1321: 0x4000, 0x1322: 0x4000, 0x1323: 0x4000, - 0x1324: 0x4000, 0x1325: 0x4000, 0x1326: 0x4000, 0x1327: 0x4000, 0x1328: 0x4000, 0x1329: 0x4000, - 0x132a: 0x4000, 0x132b: 0x4000, 0x132c: 0x4000, 0x132d: 0x4000, 0x132e: 0x4000, 0x132f: 0x4000, + 0x1310: 0x4000, 0x1311: 0x4000, + 0x1312: 0x4000, 0x1315: 0x4000, + 0x1324: 0x4000, 0x1325: 0x4000, 0x1326: 0x4000, 0x1327: 0x4000, 0x1330: 0x4000, 0x1331: 0x4000, 0x1332: 0x4000, 0x1333: 0x4000, 0x1334: 0x4000, 0x1335: 0x4000, 0x1336: 0x4000, 0x1337: 0x4000, 0x1338: 0x4000, 0x1339: 0x4000, 0x133a: 0x4000, 0x133b: 0x4000, + 0x133c: 0x4000, 0x133d: 0x4000, 0x133e: 0x4000, 0x133f: 0x4000, // Block 0x4d, offset 0x1340 - 0x1344: 0x4000, + 0x1340: 0x4000, 0x1341: 0x4000, 0x1342: 0x4000, 0x1343: 0x4000, 0x1344: 0x4000, 0x1345: 0x4000, + 0x1346: 0x4000, 0x1347: 0x4000, 0x1348: 0x4000, 0x1349: 0x4000, 0x134a: 0x4000, 0x134b: 0x4000, + 0x134c: 0x4000, 0x134d: 0x4000, 0x134e: 0x4000, 0x134f: 0x4000, 0x1350: 0x4000, 0x1351: 0x4000, + 0x1352: 0x4000, 0x1353: 0x4000, 0x1354: 0x4000, 0x1355: 0x4000, 0x1356: 0x4000, 0x1357: 0x4000, + 0x1358: 0x4000, 0x1359: 0x4000, 0x135a: 0x4000, 0x135b: 0x4000, 0x135c: 0x4000, 0x135d: 0x4000, + 0x135e: 0x4000, 0x135f: 0x4000, 0x1360: 0x4000, 0x1361: 0x4000, 0x1362: 0x4000, 0x1363: 0x4000, + 0x1364: 0x4000, 0x1365: 0x4000, 0x1366: 0x4000, 0x1367: 0x4000, 0x1368: 0x4000, 0x1369: 0x4000, + 0x136a: 0x4000, 0x136b: 0x4000, 0x136c: 0x4000, 0x136d: 0x4000, 0x136e: 0x4000, 0x136f: 0x4000, + 0x1370: 0x4000, 0x1371: 0x4000, 0x1372: 0x4000, 0x1373: 0x4000, 0x1374: 0x4000, 0x1375: 0x4000, + 0x1376: 0x4000, 0x1377: 0x4000, 0x1378: 0x4000, 0x1379: 0x4000, 0x137a: 0x4000, 0x137b: 0x4000, // Block 0x4e, offset 0x1380 - 0x138f: 0x4000, + 0x1380: 0x4000, 0x1381: 0x4000, 0x1382: 0x4000, 0x1383: 0x4000, 0x1384: 0x4000, 0x1385: 0x4000, + 0x1386: 0x4000, 0x1387: 0x4000, 0x1388: 0x4000, 0x1389: 0x4000, 0x138a: 0x4000, 0x138b: 0x4000, + 0x138c: 0x4000, 0x138d: 0x4000, 0x138e: 0x4000, 0x138f: 0x4000, 0x1390: 0x4000, 0x1391: 0x4000, + 0x1392: 0x4000, 0x1393: 0x4000, 0x1394: 0x4000, 0x1395: 0x4000, 0x1396: 0x4000, + 0x13a0: 0x4000, 0x13a1: 0x4000, 0x13a2: 0x4000, 0x13a3: 0x4000, + 0x13a4: 0x4000, 0x13a5: 0x4000, 0x13a6: 0x4000, 0x13a7: 0x4000, 0x13a8: 0x4000, 0x13a9: 0x4000, + 0x13aa: 0x4000, 0x13ab: 0x4000, 0x13ac: 0x4000, 0x13ad: 0x4000, 0x13ae: 0x4000, 0x13af: 0x4000, + 0x13b0: 0x4000, 0x13b1: 0x4000, 0x13b2: 0x4000, 0x13b3: 0x4000, 0x13b4: 0x4000, 0x13b5: 0x4000, + 0x13b6: 0x4000, // Block 0x4f, offset 0x13c0 - 0x13c0: 0x2000, 0x13c1: 0x2000, 0x13c2: 0x2000, 0x13c3: 0x2000, 0x13c4: 0x2000, 0x13c5: 0x2000, - 0x13c6: 0x2000, 0x13c7: 0x2000, 0x13c8: 0x2000, 0x13c9: 0x2000, 0x13ca: 0x2000, - 0x13d0: 0x2000, 0x13d1: 0x2000, - 0x13d2: 0x2000, 0x13d3: 0x2000, 0x13d4: 0x2000, 0x13d5: 0x2000, 0x13d6: 0x2000, 0x13d7: 0x2000, - 0x13d8: 0x2000, 0x13d9: 0x2000, 0x13da: 0x2000, 0x13db: 0x2000, 0x13dc: 0x2000, 0x13dd: 0x2000, - 0x13de: 0x2000, 0x13df: 0x2000, 0x13e0: 0x2000, 0x13e1: 0x2000, 0x13e2: 0x2000, 0x13e3: 0x2000, - 0x13e4: 0x2000, 0x13e5: 0x2000, 0x13e6: 0x2000, 0x13e7: 0x2000, 0x13e8: 0x2000, 0x13e9: 0x2000, - 0x13ea: 0x2000, 0x13eb: 0x2000, 0x13ec: 0x2000, 0x13ed: 0x2000, - 0x13f0: 0x2000, 0x13f1: 0x2000, 0x13f2: 0x2000, 0x13f3: 0x2000, 0x13f4: 0x2000, 0x13f5: 0x2000, - 0x13f6: 0x2000, 0x13f7: 0x2000, 0x13f8: 0x2000, 0x13f9: 0x2000, 0x13fa: 0x2000, 0x13fb: 0x2000, - 0x13fc: 0x2000, 0x13fd: 0x2000, 0x13fe: 0x2000, 0x13ff: 0x2000, + 0x13c4: 0x4000, // Block 0x50, offset 0x1400 - 0x1400: 0x2000, 0x1401: 0x2000, 0x1402: 0x2000, 0x1403: 0x2000, 0x1404: 0x2000, 0x1405: 0x2000, - 0x1406: 0x2000, 0x1407: 0x2000, 0x1408: 0x2000, 0x1409: 0x2000, 0x140a: 0x2000, 0x140b: 0x2000, - 0x140c: 0x2000, 0x140d: 0x2000, 0x140e: 0x2000, 0x140f: 0x2000, 0x1410: 0x2000, 0x1411: 0x2000, - 0x1412: 0x2000, 0x1413: 0x2000, 0x1414: 0x2000, 0x1415: 0x2000, 0x1416: 0x2000, 0x1417: 0x2000, - 0x1418: 0x2000, 0x1419: 0x2000, 0x141a: 0x2000, 0x141b: 0x2000, 0x141c: 0x2000, 0x141d: 0x2000, - 0x141e: 0x2000, 0x141f: 0x2000, 0x1420: 0x2000, 0x1421: 0x2000, 0x1422: 0x2000, 0x1423: 0x2000, - 0x1424: 0x2000, 0x1425: 0x2000, 0x1426: 0x2000, 0x1427: 0x2000, 0x1428: 0x2000, 0x1429: 0x2000, - 0x1430: 0x2000, 0x1431: 0x2000, 0x1432: 0x2000, 0x1433: 0x2000, 0x1434: 0x2000, 0x1435: 0x2000, - 0x1436: 0x2000, 0x1437: 0x2000, 0x1438: 0x2000, 0x1439: 0x2000, 0x143a: 0x2000, 0x143b: 0x2000, - 0x143c: 0x2000, 0x143d: 0x2000, 0x143e: 0x2000, 0x143f: 0x2000, + 0x140f: 0x4000, // Block 0x51, offset 0x1440 0x1440: 0x2000, 0x1441: 0x2000, 0x1442: 0x2000, 0x1443: 0x2000, 0x1444: 0x2000, 0x1445: 0x2000, - 0x1446: 0x2000, 0x1447: 0x2000, 0x1448: 0x2000, 0x1449: 0x2000, 0x144a: 0x2000, 0x144b: 0x2000, - 0x144c: 0x2000, 0x144d: 0x2000, 0x144e: 0x4000, 0x144f: 0x2000, 0x1450: 0x2000, 0x1451: 0x4000, - 0x1452: 0x4000, 0x1453: 0x4000, 0x1454: 0x4000, 0x1455: 0x4000, 0x1456: 0x4000, 0x1457: 0x4000, - 0x1458: 0x4000, 0x1459: 0x4000, 0x145a: 0x4000, 0x145b: 0x2000, 0x145c: 0x2000, 0x145d: 0x2000, + 0x1446: 0x2000, 0x1447: 0x2000, 0x1448: 0x2000, 0x1449: 0x2000, 0x144a: 0x2000, + 0x1450: 0x2000, 0x1451: 0x2000, + 0x1452: 0x2000, 0x1453: 0x2000, 0x1454: 0x2000, 0x1455: 0x2000, 0x1456: 0x2000, 0x1457: 0x2000, + 0x1458: 0x2000, 0x1459: 0x2000, 0x145a: 0x2000, 0x145b: 0x2000, 0x145c: 0x2000, 0x145d: 0x2000, 0x145e: 0x2000, 0x145f: 0x2000, 0x1460: 0x2000, 0x1461: 0x2000, 0x1462: 0x2000, 0x1463: 0x2000, 0x1464: 0x2000, 0x1465: 0x2000, 0x1466: 0x2000, 0x1467: 0x2000, 0x1468: 0x2000, 0x1469: 0x2000, - 0x146a: 0x2000, 0x146b: 0x2000, 0x146c: 0x2000, + 0x146a: 0x2000, 0x146b: 0x2000, 0x146c: 0x2000, 0x146d: 0x2000, + 0x1470: 0x2000, 0x1471: 0x2000, 0x1472: 0x2000, 0x1473: 0x2000, 0x1474: 0x2000, 0x1475: 0x2000, + 0x1476: 0x2000, 0x1477: 0x2000, 0x1478: 0x2000, 0x1479: 0x2000, 0x147a: 0x2000, 0x147b: 0x2000, + 0x147c: 0x2000, 0x147d: 0x2000, 0x147e: 0x2000, 0x147f: 0x2000, // Block 0x52, offset 0x1480 - 0x1480: 0x4000, 0x1481: 0x4000, 0x1482: 0x4000, - 0x1490: 0x4000, 0x1491: 0x4000, - 0x1492: 0x4000, 0x1493: 0x4000, 0x1494: 0x4000, 0x1495: 0x4000, 0x1496: 0x4000, 0x1497: 0x4000, - 0x1498: 0x4000, 0x1499: 0x4000, 0x149a: 0x4000, 0x149b: 0x4000, 0x149c: 0x4000, 0x149d: 0x4000, - 0x149e: 0x4000, 0x149f: 0x4000, 0x14a0: 0x4000, 0x14a1: 0x4000, 0x14a2: 0x4000, 0x14a3: 0x4000, - 0x14a4: 0x4000, 0x14a5: 0x4000, 0x14a6: 0x4000, 0x14a7: 0x4000, 0x14a8: 0x4000, 0x14a9: 0x4000, - 0x14aa: 0x4000, 0x14ab: 0x4000, 0x14ac: 0x4000, 0x14ad: 0x4000, 0x14ae: 0x4000, 0x14af: 0x4000, - 0x14b0: 0x4000, 0x14b1: 0x4000, 0x14b2: 0x4000, 0x14b3: 0x4000, 0x14b4: 0x4000, 0x14b5: 0x4000, - 0x14b6: 0x4000, 0x14b7: 0x4000, 0x14b8: 0x4000, 0x14b9: 0x4000, 0x14ba: 0x4000, 0x14bb: 0x4000, + 0x1480: 0x2000, 0x1481: 0x2000, 0x1482: 0x2000, 0x1483: 0x2000, 0x1484: 0x2000, 0x1485: 0x2000, + 0x1486: 0x2000, 0x1487: 0x2000, 0x1488: 0x2000, 0x1489: 0x2000, 0x148a: 0x2000, 0x148b: 0x2000, + 0x148c: 0x2000, 0x148d: 0x2000, 0x148e: 0x2000, 0x148f: 0x2000, 0x1490: 0x2000, 0x1491: 0x2000, + 0x1492: 0x2000, 0x1493: 0x2000, 0x1494: 0x2000, 0x1495: 0x2000, 0x1496: 0x2000, 0x1497: 0x2000, + 0x1498: 0x2000, 0x1499: 0x2000, 0x149a: 0x2000, 0x149b: 0x2000, 0x149c: 0x2000, 0x149d: 0x2000, + 0x149e: 0x2000, 0x149f: 0x2000, 0x14a0: 0x2000, 0x14a1: 0x2000, 0x14a2: 0x2000, 0x14a3: 0x2000, + 0x14a4: 0x2000, 0x14a5: 0x2000, 0x14a6: 0x2000, 0x14a7: 0x2000, 0x14a8: 0x2000, 0x14a9: 0x2000, + 0x14b0: 0x2000, 0x14b1: 0x2000, 0x14b2: 0x2000, 0x14b3: 0x2000, 0x14b4: 0x2000, 0x14b5: 0x2000, + 0x14b6: 0x2000, 0x14b7: 0x2000, 0x14b8: 0x2000, 0x14b9: 0x2000, 0x14ba: 0x2000, 0x14bb: 0x2000, + 0x14bc: 0x2000, 0x14bd: 0x2000, 0x14be: 0x2000, 0x14bf: 0x2000, // Block 0x53, offset 0x14c0 - 0x14c0: 0x4000, 0x14c1: 0x4000, 0x14c2: 0x4000, 0x14c3: 0x4000, 0x14c4: 0x4000, 0x14c5: 0x4000, - 0x14c6: 0x4000, 0x14c7: 0x4000, 0x14c8: 0x4000, - 0x14d0: 0x4000, 0x14d1: 0x4000, - 0x14e0: 0x4000, 0x14e1: 0x4000, 0x14e2: 0x4000, 0x14e3: 0x4000, - 0x14e4: 0x4000, 0x14e5: 0x4000, + 0x14c0: 0x2000, 0x14c1: 0x2000, 0x14c2: 0x2000, 0x14c3: 0x2000, 0x14c4: 0x2000, 0x14c5: 0x2000, + 0x14c6: 0x2000, 0x14c7: 0x2000, 0x14c8: 0x2000, 0x14c9: 0x2000, 0x14ca: 0x2000, 0x14cb: 0x2000, + 0x14cc: 0x2000, 0x14cd: 0x2000, 0x14ce: 0x4000, 0x14cf: 0x2000, 0x14d0: 0x2000, 0x14d1: 0x4000, + 0x14d2: 0x4000, 0x14d3: 0x4000, 0x14d4: 0x4000, 0x14d5: 0x4000, 0x14d6: 0x4000, 0x14d7: 0x4000, + 0x14d8: 0x4000, 0x14d9: 0x4000, 0x14da: 0x4000, 0x14db: 0x2000, 0x14dc: 0x2000, 0x14dd: 0x2000, + 0x14de: 0x2000, 0x14df: 0x2000, 0x14e0: 0x2000, 0x14e1: 0x2000, 0x14e2: 0x2000, 0x14e3: 0x2000, + 0x14e4: 0x2000, 0x14e5: 0x2000, 0x14e6: 0x2000, 0x14e7: 0x2000, 0x14e8: 0x2000, 0x14e9: 0x2000, + 0x14ea: 0x2000, 0x14eb: 0x2000, 0x14ec: 0x2000, // Block 0x54, offset 0x1500 - 0x1500: 0x4000, 0x1501: 0x4000, 0x1502: 0x4000, 0x1503: 0x4000, 0x1504: 0x4000, 0x1505: 0x4000, - 0x1506: 0x4000, 0x1507: 0x4000, 0x1508: 0x4000, 0x1509: 0x4000, 0x150a: 0x4000, 0x150b: 0x4000, - 0x150c: 0x4000, 0x150d: 0x4000, 0x150e: 0x4000, 0x150f: 0x4000, 0x1510: 0x4000, 0x1511: 0x4000, + 0x1500: 0x4000, 0x1501: 0x4000, 0x1502: 0x4000, + 0x1510: 0x4000, 0x1511: 0x4000, 0x1512: 0x4000, 0x1513: 0x4000, 0x1514: 0x4000, 0x1515: 0x4000, 0x1516: 0x4000, 0x1517: 0x4000, 0x1518: 0x4000, 0x1519: 0x4000, 0x151a: 0x4000, 0x151b: 0x4000, 0x151c: 0x4000, 0x151d: 0x4000, - 0x151e: 0x4000, 0x151f: 0x4000, 0x1520: 0x4000, - 0x152d: 0x4000, 0x152e: 0x4000, 0x152f: 0x4000, + 0x151e: 0x4000, 0x151f: 0x4000, 0x1520: 0x4000, 0x1521: 0x4000, 0x1522: 0x4000, 0x1523: 0x4000, + 0x1524: 0x4000, 0x1525: 0x4000, 0x1526: 0x4000, 0x1527: 0x4000, 0x1528: 0x4000, 0x1529: 0x4000, + 0x152a: 0x4000, 0x152b: 0x4000, 0x152c: 0x4000, 0x152d: 0x4000, 0x152e: 0x4000, 0x152f: 0x4000, 0x1530: 0x4000, 0x1531: 0x4000, 0x1532: 0x4000, 0x1533: 0x4000, 0x1534: 0x4000, 0x1535: 0x4000, - 0x1537: 0x4000, 0x1538: 0x4000, 0x1539: 0x4000, 0x153a: 0x4000, 0x153b: 0x4000, - 0x153c: 0x4000, 0x153d: 0x4000, 0x153e: 0x4000, 0x153f: 0x4000, + 0x1536: 0x4000, 0x1537: 0x4000, 0x1538: 0x4000, 0x1539: 0x4000, 0x153a: 0x4000, 0x153b: 0x4000, // Block 0x55, offset 0x1540 0x1540: 0x4000, 0x1541: 0x4000, 0x1542: 0x4000, 0x1543: 0x4000, 0x1544: 0x4000, 0x1545: 0x4000, - 0x1546: 0x4000, 0x1547: 0x4000, 0x1548: 0x4000, 0x1549: 0x4000, 0x154a: 0x4000, 0x154b: 0x4000, - 0x154c: 0x4000, 0x154d: 0x4000, 0x154e: 0x4000, 0x154f: 0x4000, 0x1550: 0x4000, 0x1551: 0x4000, - 0x1552: 0x4000, 0x1553: 0x4000, 0x1554: 0x4000, 0x1555: 0x4000, 0x1556: 0x4000, 0x1557: 0x4000, - 0x1558: 0x4000, 0x1559: 0x4000, 0x155a: 0x4000, 0x155b: 0x4000, 0x155c: 0x4000, 0x155d: 0x4000, - 0x155e: 0x4000, 0x155f: 0x4000, 0x1560: 0x4000, 0x1561: 0x4000, 0x1562: 0x4000, 0x1563: 0x4000, - 0x1564: 0x4000, 0x1565: 0x4000, 0x1566: 0x4000, 0x1567: 0x4000, 0x1568: 0x4000, 0x1569: 0x4000, - 0x156a: 0x4000, 0x156b: 0x4000, 0x156c: 0x4000, 0x156d: 0x4000, 0x156e: 0x4000, 0x156f: 0x4000, - 0x1570: 0x4000, 0x1571: 0x4000, 0x1572: 0x4000, 0x1573: 0x4000, 0x1574: 0x4000, 0x1575: 0x4000, - 0x1576: 0x4000, 0x1577: 0x4000, 0x1578: 0x4000, 0x1579: 0x4000, 0x157a: 0x4000, 0x157b: 0x4000, - 0x157c: 0x4000, 0x157e: 0x4000, 0x157f: 0x4000, + 0x1546: 0x4000, 0x1547: 0x4000, 0x1548: 0x4000, + 0x1550: 0x4000, 0x1551: 0x4000, + 0x1560: 0x4000, 0x1561: 0x4000, 0x1562: 0x4000, 0x1563: 0x4000, + 0x1564: 0x4000, 0x1565: 0x4000, // Block 0x56, offset 0x1580 0x1580: 0x4000, 0x1581: 0x4000, 0x1582: 0x4000, 0x1583: 0x4000, 0x1584: 0x4000, 0x1585: 0x4000, 0x1586: 0x4000, 0x1587: 0x4000, 0x1588: 0x4000, 0x1589: 0x4000, 0x158a: 0x4000, 0x158b: 0x4000, 0x158c: 0x4000, 0x158d: 0x4000, 0x158e: 0x4000, 0x158f: 0x4000, 0x1590: 0x4000, 0x1591: 0x4000, - 0x1592: 0x4000, 0x1593: 0x4000, - 0x15a0: 0x4000, 0x15a1: 0x4000, 0x15a2: 0x4000, 0x15a3: 0x4000, - 0x15a4: 0x4000, 0x15a5: 0x4000, 0x15a6: 0x4000, 0x15a7: 0x4000, 0x15a8: 0x4000, 0x15a9: 0x4000, - 0x15aa: 0x4000, 0x15ab: 0x4000, 0x15ac: 0x4000, 0x15ad: 0x4000, 0x15ae: 0x4000, 0x15af: 0x4000, + 0x1592: 0x4000, 0x1593: 0x4000, 0x1594: 0x4000, 0x1595: 0x4000, 0x1596: 0x4000, 0x1597: 0x4000, + 0x1598: 0x4000, 0x1599: 0x4000, 0x159a: 0x4000, 0x159b: 0x4000, 0x159c: 0x4000, 0x159d: 0x4000, + 0x159e: 0x4000, 0x159f: 0x4000, 0x15a0: 0x4000, + 0x15ad: 0x4000, 0x15ae: 0x4000, 0x15af: 0x4000, 0x15b0: 0x4000, 0x15b1: 0x4000, 0x15b2: 0x4000, 0x15b3: 0x4000, 0x15b4: 0x4000, 0x15b5: 0x4000, - 0x15b6: 0x4000, 0x15b7: 0x4000, 0x15b8: 0x4000, 0x15b9: 0x4000, 0x15ba: 0x4000, 0x15bb: 0x4000, + 0x15b7: 0x4000, 0x15b8: 0x4000, 0x15b9: 0x4000, 0x15ba: 0x4000, 0x15bb: 0x4000, 0x15bc: 0x4000, 0x15bd: 0x4000, 0x15be: 0x4000, 0x15bf: 0x4000, // Block 0x57, offset 0x15c0 0x15c0: 0x4000, 0x15c1: 0x4000, 0x15c2: 0x4000, 0x15c3: 0x4000, 0x15c4: 0x4000, 0x15c5: 0x4000, - 0x15c6: 0x4000, 0x15c7: 0x4000, 0x15c8: 0x4000, 0x15c9: 0x4000, 0x15ca: 0x4000, - 0x15cf: 0x4000, 0x15d0: 0x4000, 0x15d1: 0x4000, - 0x15d2: 0x4000, 0x15d3: 0x4000, - 0x15e0: 0x4000, 0x15e1: 0x4000, 0x15e2: 0x4000, 0x15e3: 0x4000, + 0x15c6: 0x4000, 0x15c7: 0x4000, 0x15c8: 0x4000, 0x15c9: 0x4000, 0x15ca: 0x4000, 0x15cb: 0x4000, + 0x15cc: 0x4000, 0x15cd: 0x4000, 0x15ce: 0x4000, 0x15cf: 0x4000, 0x15d0: 0x4000, 0x15d1: 0x4000, + 0x15d2: 0x4000, 0x15d3: 0x4000, 0x15d4: 0x4000, 0x15d5: 0x4000, 0x15d6: 0x4000, 0x15d7: 0x4000, + 0x15d8: 0x4000, 0x15d9: 0x4000, 0x15da: 0x4000, 0x15db: 0x4000, 0x15dc: 0x4000, 0x15dd: 0x4000, + 0x15de: 0x4000, 0x15df: 0x4000, 0x15e0: 0x4000, 0x15e1: 0x4000, 0x15e2: 0x4000, 0x15e3: 0x4000, 0x15e4: 0x4000, 0x15e5: 0x4000, 0x15e6: 0x4000, 0x15e7: 0x4000, 0x15e8: 0x4000, 0x15e9: 0x4000, 0x15ea: 0x4000, 0x15eb: 0x4000, 0x15ec: 0x4000, 0x15ed: 0x4000, 0x15ee: 0x4000, 0x15ef: 0x4000, - 0x15f0: 0x4000, 0x15f4: 0x4000, - 0x15f8: 0x4000, 0x15f9: 0x4000, 0x15fa: 0x4000, 0x15fb: 0x4000, - 0x15fc: 0x4000, 0x15fd: 0x4000, 0x15fe: 0x4000, 0x15ff: 0x4000, + 0x15f0: 0x4000, 0x15f1: 0x4000, 0x15f2: 0x4000, 0x15f3: 0x4000, 0x15f4: 0x4000, 0x15f5: 0x4000, + 0x15f6: 0x4000, 0x15f7: 0x4000, 0x15f8: 0x4000, 0x15f9: 0x4000, 0x15fa: 0x4000, 0x15fb: 0x4000, + 0x15fc: 0x4000, 0x15fe: 0x4000, 0x15ff: 0x4000, // Block 0x58, offset 0x1600 0x1600: 0x4000, 0x1601: 0x4000, 0x1602: 0x4000, 0x1603: 0x4000, 0x1604: 0x4000, 0x1605: 0x4000, 0x1606: 0x4000, 0x1607: 0x4000, 0x1608: 0x4000, 0x1609: 0x4000, 0x160a: 0x4000, 0x160b: 0x4000, 0x160c: 0x4000, 0x160d: 0x4000, 0x160e: 0x4000, 0x160f: 0x4000, 0x1610: 0x4000, 0x1611: 0x4000, - 0x1612: 0x4000, 0x1613: 0x4000, 0x1614: 0x4000, 0x1615: 0x4000, 0x1616: 0x4000, 0x1617: 0x4000, - 0x1618: 0x4000, 0x1619: 0x4000, 0x161a: 0x4000, 0x161b: 0x4000, 0x161c: 0x4000, 0x161d: 0x4000, - 0x161e: 0x4000, 0x161f: 0x4000, 0x1620: 0x4000, 0x1621: 0x4000, 0x1622: 0x4000, 0x1623: 0x4000, + 0x1612: 0x4000, 0x1613: 0x4000, + 0x1620: 0x4000, 0x1621: 0x4000, 0x1622: 0x4000, 0x1623: 0x4000, 0x1624: 0x4000, 0x1625: 0x4000, 0x1626: 0x4000, 0x1627: 0x4000, 0x1628: 0x4000, 0x1629: 0x4000, 0x162a: 0x4000, 0x162b: 0x4000, 0x162c: 0x4000, 0x162d: 0x4000, 0x162e: 0x4000, 0x162f: 0x4000, 0x1630: 0x4000, 0x1631: 0x4000, 0x1632: 0x4000, 0x1633: 0x4000, 0x1634: 0x4000, 0x1635: 0x4000, 0x1636: 0x4000, 0x1637: 0x4000, 0x1638: 0x4000, 0x1639: 0x4000, 0x163a: 0x4000, 0x163b: 0x4000, - 0x163c: 0x4000, 0x163d: 0x4000, 0x163e: 0x4000, + 0x163c: 0x4000, 0x163d: 0x4000, 0x163e: 0x4000, 0x163f: 0x4000, // Block 0x59, offset 0x1640 - 0x1640: 0x4000, 0x1642: 0x4000, 0x1643: 0x4000, 0x1644: 0x4000, 0x1645: 0x4000, - 0x1646: 0x4000, 0x1647: 0x4000, 0x1648: 0x4000, 0x1649: 0x4000, 0x164a: 0x4000, 0x164b: 0x4000, - 0x164c: 0x4000, 0x164d: 0x4000, 0x164e: 0x4000, 0x164f: 0x4000, 0x1650: 0x4000, 0x1651: 0x4000, - 0x1652: 0x4000, 0x1653: 0x4000, 0x1654: 0x4000, 0x1655: 0x4000, 0x1656: 0x4000, 0x1657: 0x4000, - 0x1658: 0x4000, 0x1659: 0x4000, 0x165a: 0x4000, 0x165b: 0x4000, 0x165c: 0x4000, 0x165d: 0x4000, - 0x165e: 0x4000, 0x165f: 0x4000, 0x1660: 0x4000, 0x1661: 0x4000, 0x1662: 0x4000, 0x1663: 0x4000, + 0x1640: 0x4000, 0x1641: 0x4000, 0x1642: 0x4000, 0x1643: 0x4000, 0x1644: 0x4000, 0x1645: 0x4000, + 0x1646: 0x4000, 0x1647: 0x4000, 0x1648: 0x4000, 0x1649: 0x4000, 0x164a: 0x4000, + 0x164f: 0x4000, 0x1650: 0x4000, 0x1651: 0x4000, + 0x1652: 0x4000, 0x1653: 0x4000, + 0x1660: 0x4000, 0x1661: 0x4000, 0x1662: 0x4000, 0x1663: 0x4000, 0x1664: 0x4000, 0x1665: 0x4000, 0x1666: 0x4000, 0x1667: 0x4000, 0x1668: 0x4000, 0x1669: 0x4000, 0x166a: 0x4000, 0x166b: 0x4000, 0x166c: 0x4000, 0x166d: 0x4000, 0x166e: 0x4000, 0x166f: 0x4000, - 0x1670: 0x4000, 0x1671: 0x4000, 0x1672: 0x4000, 0x1673: 0x4000, 0x1674: 0x4000, 0x1675: 0x4000, - 0x1676: 0x4000, 0x1677: 0x4000, 0x1678: 0x4000, 0x1679: 0x4000, 0x167a: 0x4000, 0x167b: 0x4000, + 0x1670: 0x4000, 0x1674: 0x4000, + 0x1678: 0x4000, 0x1679: 0x4000, 0x167a: 0x4000, 0x167b: 0x4000, 0x167c: 0x4000, 0x167d: 0x4000, 0x167e: 0x4000, 0x167f: 0x4000, // Block 0x5a, offset 0x1680 0x1680: 0x4000, 0x1681: 0x4000, 0x1682: 0x4000, 0x1683: 0x4000, 0x1684: 0x4000, 0x1685: 0x4000, @@ -943,9 +946,9 @@ var widthValues = [6720]uint16{ 0x16aa: 0x4000, 0x16ab: 0x4000, 0x16ac: 0x4000, 0x16ad: 0x4000, 0x16ae: 0x4000, 0x16af: 0x4000, 0x16b0: 0x4000, 0x16b1: 0x4000, 0x16b2: 0x4000, 0x16b3: 0x4000, 0x16b4: 0x4000, 0x16b5: 0x4000, 0x16b6: 0x4000, 0x16b7: 0x4000, 0x16b8: 0x4000, 0x16b9: 0x4000, 0x16ba: 0x4000, 0x16bb: 0x4000, - 0x16bc: 0x4000, 0x16bf: 0x4000, + 0x16bc: 0x4000, 0x16bd: 0x4000, 0x16be: 0x4000, // Block 0x5b, offset 0x16c0 - 0x16c0: 0x4000, 0x16c1: 0x4000, 0x16c2: 0x4000, 0x16c3: 0x4000, 0x16c4: 0x4000, 0x16c5: 0x4000, + 0x16c0: 0x4000, 0x16c2: 0x4000, 0x16c3: 0x4000, 0x16c4: 0x4000, 0x16c5: 0x4000, 0x16c6: 0x4000, 0x16c7: 0x4000, 0x16c8: 0x4000, 0x16c9: 0x4000, 0x16ca: 0x4000, 0x16cb: 0x4000, 0x16cc: 0x4000, 0x16cd: 0x4000, 0x16ce: 0x4000, 0x16cf: 0x4000, 0x16d0: 0x4000, 0x16d1: 0x4000, 0x16d2: 0x4000, 0x16d3: 0x4000, 0x16d4: 0x4000, 0x16d5: 0x4000, 0x16d6: 0x4000, 0x16d7: 0x4000, @@ -955,105 +958,130 @@ var widthValues = [6720]uint16{ 0x16ea: 0x4000, 0x16eb: 0x4000, 0x16ec: 0x4000, 0x16ed: 0x4000, 0x16ee: 0x4000, 0x16ef: 0x4000, 0x16f0: 0x4000, 0x16f1: 0x4000, 0x16f2: 0x4000, 0x16f3: 0x4000, 0x16f4: 0x4000, 0x16f5: 0x4000, 0x16f6: 0x4000, 0x16f7: 0x4000, 0x16f8: 0x4000, 0x16f9: 0x4000, 0x16fa: 0x4000, 0x16fb: 0x4000, - 0x16fc: 0x4000, 0x16fd: 0x4000, + 0x16fc: 0x4000, 0x16fd: 0x4000, 0x16fe: 0x4000, 0x16ff: 0x4000, // Block 0x5c, offset 0x1700 - 0x170b: 0x4000, - 0x170c: 0x4000, 0x170d: 0x4000, 0x170e: 0x4000, 0x1710: 0x4000, 0x1711: 0x4000, + 0x1700: 0x4000, 0x1701: 0x4000, 0x1702: 0x4000, 0x1703: 0x4000, 0x1704: 0x4000, 0x1705: 0x4000, + 0x1706: 0x4000, 0x1707: 0x4000, 0x1708: 0x4000, 0x1709: 0x4000, 0x170a: 0x4000, 0x170b: 0x4000, + 0x170c: 0x4000, 0x170d: 0x4000, 0x170e: 0x4000, 0x170f: 0x4000, 0x1710: 0x4000, 0x1711: 0x4000, 0x1712: 0x4000, 0x1713: 0x4000, 0x1714: 0x4000, 0x1715: 0x4000, 0x1716: 0x4000, 0x1717: 0x4000, 0x1718: 0x4000, 0x1719: 0x4000, 0x171a: 0x4000, 0x171b: 0x4000, 0x171c: 0x4000, 0x171d: 0x4000, 0x171e: 0x4000, 0x171f: 0x4000, 0x1720: 0x4000, 0x1721: 0x4000, 0x1722: 0x4000, 0x1723: 0x4000, - 0x1724: 0x4000, 0x1725: 0x4000, 0x1726: 0x4000, 0x1727: 0x4000, - 0x173a: 0x4000, + 0x1724: 0x4000, 0x1725: 0x4000, 0x1726: 0x4000, 0x1727: 0x4000, 0x1728: 0x4000, 0x1729: 0x4000, + 0x172a: 0x4000, 0x172b: 0x4000, 0x172c: 0x4000, 0x172d: 0x4000, 0x172e: 0x4000, 0x172f: 0x4000, + 0x1730: 0x4000, 0x1731: 0x4000, 0x1732: 0x4000, 0x1733: 0x4000, 0x1734: 0x4000, 0x1735: 0x4000, + 0x1736: 0x4000, 0x1737: 0x4000, 0x1738: 0x4000, 0x1739: 0x4000, 0x173a: 0x4000, 0x173b: 0x4000, + 0x173c: 0x4000, 0x173f: 0x4000, // Block 0x5d, offset 0x1740 - 0x1755: 0x4000, 0x1756: 0x4000, - 0x1764: 0x4000, + 0x1740: 0x4000, 0x1741: 0x4000, 0x1742: 0x4000, 0x1743: 0x4000, 0x1744: 0x4000, 0x1745: 0x4000, + 0x1746: 0x4000, 0x1747: 0x4000, 0x1748: 0x4000, 0x1749: 0x4000, 0x174a: 0x4000, 0x174b: 0x4000, + 0x174c: 0x4000, 0x174d: 0x4000, 0x174e: 0x4000, 0x174f: 0x4000, 0x1750: 0x4000, 0x1751: 0x4000, + 0x1752: 0x4000, 0x1753: 0x4000, 0x1754: 0x4000, 0x1755: 0x4000, 0x1756: 0x4000, 0x1757: 0x4000, + 0x1758: 0x4000, 0x1759: 0x4000, 0x175a: 0x4000, 0x175b: 0x4000, 0x175c: 0x4000, 0x175d: 0x4000, + 0x175e: 0x4000, 0x175f: 0x4000, 0x1760: 0x4000, 0x1761: 0x4000, 0x1762: 0x4000, 0x1763: 0x4000, + 0x1764: 0x4000, 0x1765: 0x4000, 0x1766: 0x4000, 0x1767: 0x4000, 0x1768: 0x4000, 0x1769: 0x4000, + 0x176a: 0x4000, 0x176b: 0x4000, 0x176c: 0x4000, 0x176d: 0x4000, 0x176e: 0x4000, 0x176f: 0x4000, + 0x1770: 0x4000, 0x1771: 0x4000, 0x1772: 0x4000, 0x1773: 0x4000, 0x1774: 0x4000, 0x1775: 0x4000, + 0x1776: 0x4000, 0x1777: 0x4000, 0x1778: 0x4000, 0x1779: 0x4000, 0x177a: 0x4000, 0x177b: 0x4000, + 0x177c: 0x4000, 0x177d: 0x4000, // Block 0x5e, offset 0x1780 - 0x17bb: 0x4000, - 0x17bc: 0x4000, 0x17bd: 0x4000, 0x17be: 0x4000, 0x17bf: 0x4000, + 0x178b: 0x4000, + 0x178c: 0x4000, 0x178d: 0x4000, 0x178e: 0x4000, 0x1790: 0x4000, 0x1791: 0x4000, + 0x1792: 0x4000, 0x1793: 0x4000, 0x1794: 0x4000, 0x1795: 0x4000, 0x1796: 0x4000, 0x1797: 0x4000, + 0x1798: 0x4000, 0x1799: 0x4000, 0x179a: 0x4000, 0x179b: 0x4000, 0x179c: 0x4000, 0x179d: 0x4000, + 0x179e: 0x4000, 0x179f: 0x4000, 0x17a0: 0x4000, 0x17a1: 0x4000, 0x17a2: 0x4000, 0x17a3: 0x4000, + 0x17a4: 0x4000, 0x17a5: 0x4000, 0x17a6: 0x4000, 0x17a7: 0x4000, + 0x17ba: 0x4000, // Block 0x5f, offset 0x17c0 - 0x17c0: 0x4000, 0x17c1: 0x4000, 0x17c2: 0x4000, 0x17c3: 0x4000, 0x17c4: 0x4000, 0x17c5: 0x4000, - 0x17c6: 0x4000, 0x17c7: 0x4000, 0x17c8: 0x4000, 0x17c9: 0x4000, 0x17ca: 0x4000, 0x17cb: 0x4000, - 0x17cc: 0x4000, 0x17cd: 0x4000, 0x17ce: 0x4000, 0x17cf: 0x4000, + 0x17d5: 0x4000, 0x17d6: 0x4000, + 0x17e4: 0x4000, // Block 0x60, offset 0x1800 - 0x1800: 0x4000, 0x1801: 0x4000, 0x1802: 0x4000, 0x1803: 0x4000, 0x1804: 0x4000, 0x1805: 0x4000, - 0x180c: 0x4000, 0x1810: 0x4000, 0x1811: 0x4000, - 0x1812: 0x4000, 0x1815: 0x4000, 0x1816: 0x4000, 0x1817: 0x4000, - 0x182b: 0x4000, 0x182c: 0x4000, - 0x1834: 0x4000, 0x1835: 0x4000, - 0x1836: 0x4000, 0x1837: 0x4000, 0x1838: 0x4000, 0x1839: 0x4000, 0x183a: 0x4000, 0x183b: 0x4000, - 0x183c: 0x4000, + 0x183b: 0x4000, + 0x183c: 0x4000, 0x183d: 0x4000, 0x183e: 0x4000, 0x183f: 0x4000, // Block 0x61, offset 0x1840 - 0x1860: 0x4000, 0x1861: 0x4000, 0x1862: 0x4000, 0x1863: 0x4000, - 0x1864: 0x4000, 0x1865: 0x4000, 0x1866: 0x4000, 0x1867: 0x4000, 0x1868: 0x4000, 0x1869: 0x4000, - 0x186a: 0x4000, 0x186b: 0x4000, + 0x1840: 0x4000, 0x1841: 0x4000, 0x1842: 0x4000, 0x1843: 0x4000, 0x1844: 0x4000, 0x1845: 0x4000, + 0x1846: 0x4000, 0x1847: 0x4000, 0x1848: 0x4000, 0x1849: 0x4000, 0x184a: 0x4000, 0x184b: 0x4000, + 0x184c: 0x4000, 0x184d: 0x4000, 0x184e: 0x4000, 0x184f: 0x4000, // Block 0x62, offset 0x1880 - 0x188c: 0x4000, 0x188d: 0x4000, 0x188e: 0x4000, 0x188f: 0x4000, 0x1890: 0x4000, 0x1891: 0x4000, - 0x1892: 0x4000, 0x1893: 0x4000, 0x1894: 0x4000, 0x1895: 0x4000, 0x1896: 0x4000, 0x1897: 0x4000, - 0x1898: 0x4000, 0x1899: 0x4000, 0x189a: 0x4000, 0x189b: 0x4000, 0x189c: 0x4000, 0x189d: 0x4000, - 0x189e: 0x4000, 0x189f: 0x4000, 0x18a0: 0x4000, 0x18a1: 0x4000, 0x18a2: 0x4000, 0x18a3: 0x4000, - 0x18a4: 0x4000, 0x18a5: 0x4000, 0x18a6: 0x4000, 0x18a7: 0x4000, 0x18a8: 0x4000, 0x18a9: 0x4000, - 0x18aa: 0x4000, 0x18ab: 0x4000, 0x18ac: 0x4000, 0x18ad: 0x4000, 0x18ae: 0x4000, 0x18af: 0x4000, - 0x18b0: 0x4000, 0x18b1: 0x4000, 0x18b2: 0x4000, 0x18b3: 0x4000, 0x18b4: 0x4000, 0x18b5: 0x4000, - 0x18b6: 0x4000, 0x18b7: 0x4000, 0x18b8: 0x4000, 0x18b9: 0x4000, 0x18ba: 0x4000, - 0x18bc: 0x4000, 0x18bd: 0x4000, 0x18be: 0x4000, 0x18bf: 0x4000, + 0x1880: 0x4000, 0x1881: 0x4000, 0x1882: 0x4000, 0x1883: 0x4000, 0x1884: 0x4000, 0x1885: 0x4000, + 0x188c: 0x4000, 0x1890: 0x4000, 0x1891: 0x4000, + 0x1892: 0x4000, 0x1895: 0x4000, 0x1896: 0x4000, 0x1897: 0x4000, + 0x1898: 0x4000, 0x189c: 0x4000, 0x189d: 0x4000, + 0x189e: 0x4000, 0x189f: 0x4000, + 0x18ab: 0x4000, 0x18ac: 0x4000, + 0x18b4: 0x4000, 0x18b5: 0x4000, + 0x18b6: 0x4000, 0x18b7: 0x4000, 0x18b8: 0x4000, 0x18b9: 0x4000, 0x18ba: 0x4000, 0x18bb: 0x4000, + 0x18bc: 0x4000, // Block 0x63, offset 0x18c0 - 0x18c0: 0x4000, 0x18c1: 0x4000, 0x18c2: 0x4000, 0x18c3: 0x4000, 0x18c4: 0x4000, 0x18c5: 0x4000, - 0x18c7: 0x4000, 0x18c8: 0x4000, 0x18c9: 0x4000, 0x18ca: 0x4000, 0x18cb: 0x4000, - 0x18cc: 0x4000, 0x18cd: 0x4000, 0x18ce: 0x4000, 0x18cf: 0x4000, 0x18d0: 0x4000, 0x18d1: 0x4000, - 0x18d2: 0x4000, 0x18d3: 0x4000, 0x18d4: 0x4000, 0x18d5: 0x4000, 0x18d6: 0x4000, 0x18d7: 0x4000, - 0x18d8: 0x4000, 0x18d9: 0x4000, 0x18da: 0x4000, 0x18db: 0x4000, 0x18dc: 0x4000, 0x18dd: 0x4000, - 0x18de: 0x4000, 0x18df: 0x4000, 0x18e0: 0x4000, 0x18e1: 0x4000, 0x18e2: 0x4000, 0x18e3: 0x4000, + 0x18e0: 0x4000, 0x18e1: 0x4000, 0x18e2: 0x4000, 0x18e3: 0x4000, 0x18e4: 0x4000, 0x18e5: 0x4000, 0x18e6: 0x4000, 0x18e7: 0x4000, 0x18e8: 0x4000, 0x18e9: 0x4000, - 0x18ea: 0x4000, 0x18eb: 0x4000, 0x18ec: 0x4000, 0x18ed: 0x4000, 0x18ee: 0x4000, 0x18ef: 0x4000, - 0x18f0: 0x4000, 0x18f1: 0x4000, 0x18f2: 0x4000, 0x18f3: 0x4000, 0x18f4: 0x4000, 0x18f5: 0x4000, - 0x18f6: 0x4000, 0x18f7: 0x4000, 0x18f8: 0x4000, 0x18fa: 0x4000, 0x18fb: 0x4000, - 0x18fc: 0x4000, 0x18fd: 0x4000, 0x18fe: 0x4000, 0x18ff: 0x4000, + 0x18ea: 0x4000, 0x18eb: 0x4000, + 0x18f0: 0x4000, // Block 0x64, offset 0x1900 - 0x1900: 0x4000, 0x1901: 0x4000, 0x1902: 0x4000, 0x1903: 0x4000, 0x1904: 0x4000, 0x1905: 0x4000, - 0x1906: 0x4000, 0x1907: 0x4000, 0x1908: 0x4000, 0x1909: 0x4000, 0x190a: 0x4000, 0x190b: 0x4000, - 0x190d: 0x4000, 0x190e: 0x4000, 0x190f: 0x4000, 0x1910: 0x4000, 0x1911: 0x4000, + 0x190c: 0x4000, 0x190d: 0x4000, 0x190e: 0x4000, 0x190f: 0x4000, 0x1910: 0x4000, 0x1911: 0x4000, 0x1912: 0x4000, 0x1913: 0x4000, 0x1914: 0x4000, 0x1915: 0x4000, 0x1916: 0x4000, 0x1917: 0x4000, 0x1918: 0x4000, 0x1919: 0x4000, 0x191a: 0x4000, 0x191b: 0x4000, 0x191c: 0x4000, 0x191d: 0x4000, 0x191e: 0x4000, 0x191f: 0x4000, 0x1920: 0x4000, 0x1921: 0x4000, 0x1922: 0x4000, 0x1923: 0x4000, 0x1924: 0x4000, 0x1925: 0x4000, 0x1926: 0x4000, 0x1927: 0x4000, 0x1928: 0x4000, 0x1929: 0x4000, 0x192a: 0x4000, 0x192b: 0x4000, 0x192c: 0x4000, 0x192d: 0x4000, 0x192e: 0x4000, 0x192f: 0x4000, 0x1930: 0x4000, 0x1931: 0x4000, 0x1932: 0x4000, 0x1933: 0x4000, 0x1934: 0x4000, 0x1935: 0x4000, - 0x1936: 0x4000, 0x1937: 0x4000, 0x1938: 0x4000, 0x1939: 0x4000, 0x193a: 0x4000, 0x193b: 0x4000, + 0x1936: 0x4000, 0x1937: 0x4000, 0x1938: 0x4000, 0x1939: 0x4000, 0x193a: 0x4000, 0x193c: 0x4000, 0x193d: 0x4000, 0x193e: 0x4000, 0x193f: 0x4000, // Block 0x65, offset 0x1940 - 0x1970: 0x4000, 0x1971: 0x4000, 0x1972: 0x4000, 0x1973: 0x4000, 0x1974: 0x4000, - 0x1978: 0x4000, 0x1979: 0x4000, 0x197a: 0x4000, + 0x1940: 0x4000, 0x1941: 0x4000, 0x1942: 0x4000, 0x1943: 0x4000, 0x1944: 0x4000, 0x1945: 0x4000, + 0x1947: 0x4000, 0x1948: 0x4000, 0x1949: 0x4000, 0x194a: 0x4000, 0x194b: 0x4000, + 0x194c: 0x4000, 0x194d: 0x4000, 0x194e: 0x4000, 0x194f: 0x4000, 0x1950: 0x4000, 0x1951: 0x4000, + 0x1952: 0x4000, 0x1953: 0x4000, 0x1954: 0x4000, 0x1955: 0x4000, 0x1956: 0x4000, 0x1957: 0x4000, + 0x1958: 0x4000, 0x1959: 0x4000, 0x195a: 0x4000, 0x195b: 0x4000, 0x195c: 0x4000, 0x195d: 0x4000, + 0x195e: 0x4000, 0x195f: 0x4000, 0x1960: 0x4000, 0x1961: 0x4000, 0x1962: 0x4000, 0x1963: 0x4000, + 0x1964: 0x4000, 0x1965: 0x4000, 0x1966: 0x4000, 0x1967: 0x4000, 0x1968: 0x4000, 0x1969: 0x4000, + 0x196a: 0x4000, 0x196b: 0x4000, 0x196c: 0x4000, 0x196d: 0x4000, 0x196e: 0x4000, 0x196f: 0x4000, + 0x1970: 0x4000, 0x1971: 0x4000, 0x1972: 0x4000, 0x1973: 0x4000, 0x1974: 0x4000, 0x1975: 0x4000, + 0x1976: 0x4000, 0x1977: 0x4000, 0x1978: 0x4000, 0x1979: 0x4000, 0x197a: 0x4000, 0x197b: 0x4000, + 0x197c: 0x4000, 0x197d: 0x4000, 0x197e: 0x4000, 0x197f: 0x4000, // Block 0x66, offset 0x1980 - 0x1980: 0x4000, 0x1981: 0x4000, 0x1982: 0x4000, 0x1983: 0x4000, 0x1984: 0x4000, 0x1985: 0x4000, - 0x1986: 0x4000, - 0x1990: 0x4000, 0x1991: 0x4000, - 0x1992: 0x4000, 0x1993: 0x4000, 0x1994: 0x4000, 0x1995: 0x4000, 0x1996: 0x4000, 0x1997: 0x4000, - 0x1998: 0x4000, 0x1999: 0x4000, 0x199a: 0x4000, 0x199b: 0x4000, 0x199c: 0x4000, 0x199d: 0x4000, - 0x199e: 0x4000, 0x199f: 0x4000, 0x19a0: 0x4000, 0x19a1: 0x4000, 0x19a2: 0x4000, 0x19a3: 0x4000, - 0x19a4: 0x4000, 0x19a5: 0x4000, 0x19a6: 0x4000, 0x19a7: 0x4000, 0x19a8: 0x4000, 0x19b0: 0x4000, 0x19b1: 0x4000, 0x19b2: 0x4000, 0x19b3: 0x4000, 0x19b4: 0x4000, 0x19b5: 0x4000, - 0x19b6: 0x4000, + 0x19b6: 0x4000, 0x19b7: 0x4000, 0x19b8: 0x4000, 0x19b9: 0x4000, 0x19ba: 0x4000, 0x19bb: 0x4000, + 0x19bc: 0x4000, // Block 0x67, offset 0x19c0 - 0x19c0: 0x4000, 0x19c1: 0x4000, 0x19c2: 0x4000, - 0x19d0: 0x4000, 0x19d1: 0x4000, - 0x19d2: 0x4000, 0x19d3: 0x4000, 0x19d4: 0x4000, 0x19d5: 0x4000, 0x19d6: 0x4000, + 0x19c0: 0x4000, 0x19c1: 0x4000, 0x19c2: 0x4000, 0x19c3: 0x4000, 0x19c4: 0x4000, 0x19c5: 0x4000, + 0x19c6: 0x4000, 0x19c7: 0x4000, 0x19c8: 0x4000, 0x19c9: 0x4000, 0x19ca: 0x4000, + 0x19ce: 0x4000, 0x19cf: 0x4000, 0x19d0: 0x4000, 0x19d1: 0x4000, + 0x19d2: 0x4000, 0x19d3: 0x4000, 0x19d4: 0x4000, 0x19d5: 0x4000, 0x19d6: 0x4000, 0x19d7: 0x4000, + 0x19d8: 0x4000, 0x19d9: 0x4000, 0x19da: 0x4000, 0x19db: 0x4000, 0x19dc: 0x4000, 0x19dd: 0x4000, + 0x19de: 0x4000, 0x19df: 0x4000, 0x19e0: 0x4000, 0x19e1: 0x4000, 0x19e2: 0x4000, 0x19e3: 0x4000, + 0x19e4: 0x4000, 0x19e5: 0x4000, 0x19e6: 0x4000, 0x19e7: 0x4000, 0x19e8: 0x4000, 0x19e9: 0x4000, + 0x19ea: 0x4000, 0x19eb: 0x4000, 0x19ec: 0x4000, 0x19ed: 0x4000, 0x19ee: 0x4000, 0x19ef: 0x4000, + 0x19f0: 0x4000, 0x19f1: 0x4000, 0x19f2: 0x4000, 0x19f3: 0x4000, 0x19f4: 0x4000, 0x19f5: 0x4000, + 0x19f6: 0x4000, 0x19f7: 0x4000, 0x19f8: 0x4000, 0x19f9: 0x4000, 0x19fa: 0x4000, 0x19fb: 0x4000, + 0x19fc: 0x4000, 0x19fd: 0x4000, 0x19fe: 0x4000, 0x19ff: 0x4000, // Block 0x68, offset 0x1a00 - 0x1a00: 0x2000, 0x1a01: 0x2000, 0x1a02: 0x2000, 0x1a03: 0x2000, 0x1a04: 0x2000, 0x1a05: 0x2000, - 0x1a06: 0x2000, 0x1a07: 0x2000, 0x1a08: 0x2000, 0x1a09: 0x2000, 0x1a0a: 0x2000, 0x1a0b: 0x2000, - 0x1a0c: 0x2000, 0x1a0d: 0x2000, 0x1a0e: 0x2000, 0x1a0f: 0x2000, 0x1a10: 0x2000, 0x1a11: 0x2000, - 0x1a12: 0x2000, 0x1a13: 0x2000, 0x1a14: 0x2000, 0x1a15: 0x2000, 0x1a16: 0x2000, 0x1a17: 0x2000, - 0x1a18: 0x2000, 0x1a19: 0x2000, 0x1a1a: 0x2000, 0x1a1b: 0x2000, 0x1a1c: 0x2000, 0x1a1d: 0x2000, - 0x1a1e: 0x2000, 0x1a1f: 0x2000, 0x1a20: 0x2000, 0x1a21: 0x2000, 0x1a22: 0x2000, 0x1a23: 0x2000, - 0x1a24: 0x2000, 0x1a25: 0x2000, 0x1a26: 0x2000, 0x1a27: 0x2000, 0x1a28: 0x2000, 0x1a29: 0x2000, - 0x1a2a: 0x2000, 0x1a2b: 0x2000, 0x1a2c: 0x2000, 0x1a2d: 0x2000, 0x1a2e: 0x2000, 0x1a2f: 0x2000, - 0x1a30: 0x2000, 0x1a31: 0x2000, 0x1a32: 0x2000, 0x1a33: 0x2000, 0x1a34: 0x2000, 0x1a35: 0x2000, - 0x1a36: 0x2000, 0x1a37: 0x2000, 0x1a38: 0x2000, 0x1a39: 0x2000, 0x1a3a: 0x2000, 0x1a3b: 0x2000, - 0x1a3c: 0x2000, 0x1a3d: 0x2000, + 0x1a00: 0x4000, 0x1a01: 0x4000, 0x1a02: 0x4000, 0x1a03: 0x4000, 0x1a04: 0x4000, 0x1a05: 0x4000, + 0x1a06: 0x4000, 0x1a08: 0x4000, + 0x1a0d: 0x4000, 0x1a0e: 0x4000, 0x1a0f: 0x4000, 0x1a10: 0x4000, 0x1a11: 0x4000, + 0x1a12: 0x4000, 0x1a13: 0x4000, 0x1a14: 0x4000, 0x1a15: 0x4000, 0x1a16: 0x4000, 0x1a17: 0x4000, + 0x1a18: 0x4000, 0x1a19: 0x4000, 0x1a1a: 0x4000, 0x1a1b: 0x4000, 0x1a1c: 0x4000, + 0x1a1f: 0x4000, 0x1a20: 0x4000, 0x1a21: 0x4000, 0x1a22: 0x4000, 0x1a23: 0x4000, + 0x1a24: 0x4000, 0x1a25: 0x4000, 0x1a26: 0x4000, 0x1a27: 0x4000, 0x1a28: 0x4000, 0x1a29: 0x4000, + 0x1a2a: 0x4000, 0x1a2f: 0x4000, + 0x1a30: 0x4000, 0x1a31: 0x4000, 0x1a32: 0x4000, 0x1a33: 0x4000, 0x1a34: 0x4000, 0x1a35: 0x4000, + 0x1a36: 0x4000, 0x1a37: 0x4000, 0x1a38: 0x4000, + // Block 0x69, offset 0x1a40 + 0x1a40: 0x2000, 0x1a41: 0x2000, 0x1a42: 0x2000, 0x1a43: 0x2000, 0x1a44: 0x2000, 0x1a45: 0x2000, + 0x1a46: 0x2000, 0x1a47: 0x2000, 0x1a48: 0x2000, 0x1a49: 0x2000, 0x1a4a: 0x2000, 0x1a4b: 0x2000, + 0x1a4c: 0x2000, 0x1a4d: 0x2000, 0x1a4e: 0x2000, 0x1a4f: 0x2000, 0x1a50: 0x2000, 0x1a51: 0x2000, + 0x1a52: 0x2000, 0x1a53: 0x2000, 0x1a54: 0x2000, 0x1a55: 0x2000, 0x1a56: 0x2000, 0x1a57: 0x2000, + 0x1a58: 0x2000, 0x1a59: 0x2000, 0x1a5a: 0x2000, 0x1a5b: 0x2000, 0x1a5c: 0x2000, 0x1a5d: 0x2000, + 0x1a5e: 0x2000, 0x1a5f: 0x2000, 0x1a60: 0x2000, 0x1a61: 0x2000, 0x1a62: 0x2000, 0x1a63: 0x2000, + 0x1a64: 0x2000, 0x1a65: 0x2000, 0x1a66: 0x2000, 0x1a67: 0x2000, 0x1a68: 0x2000, 0x1a69: 0x2000, + 0x1a6a: 0x2000, 0x1a6b: 0x2000, 0x1a6c: 0x2000, 0x1a6d: 0x2000, 0x1a6e: 0x2000, 0x1a6f: 0x2000, + 0x1a70: 0x2000, 0x1a71: 0x2000, 0x1a72: 0x2000, 0x1a73: 0x2000, 0x1a74: 0x2000, 0x1a75: 0x2000, + 0x1a76: 0x2000, 0x1a77: 0x2000, 0x1a78: 0x2000, 0x1a79: 0x2000, 0x1a7a: 0x2000, 0x1a7b: 0x2000, + 0x1a7c: 0x2000, 0x1a7d: 0x2000, } -// widthIndex: 22 blocks, 1408 entries, 1408 bytes +// widthIndex: 23 blocks, 1472 entries, 1472 bytes // Block 0 is the zero block. -var widthIndex = [1408]uint8{ +var widthIndex = [1472]uint8{ // Block 0x0, offset 0x0 // Block 0x1, offset 0x40 // Block 0x2, offset 0x80 @@ -1061,9 +1089,9 @@ var widthIndex = [1408]uint8{ 0xc2: 0x01, 0xc3: 0x02, 0xc4: 0x03, 0xc5: 0x04, 0xc7: 0x05, 0xc9: 0x06, 0xcb: 0x07, 0xcc: 0x08, 0xcd: 0x09, 0xce: 0x0a, 0xcf: 0x0b, 0xd0: 0x0c, 0xd1: 0x0d, - 0xe1: 0x02, 0xe2: 0x03, 0xe3: 0x04, 0xe4: 0x05, 0xe5: 0x06, 0xe6: 0x06, 0xe7: 0x06, - 0xe8: 0x06, 0xe9: 0x06, 0xea: 0x07, 0xeb: 0x06, 0xec: 0x06, 0xed: 0x08, 0xee: 0x09, 0xef: 0x0a, - 0xf0: 0x0f, 0xf3: 0x12, 0xf4: 0x13, + 0xe1: 0x02, 0xe2: 0x03, 0xe3: 0x04, 0xe4: 0x05, 0xe5: 0x05, 0xe6: 0x05, 0xe7: 0x05, + 0xe8: 0x05, 0xe9: 0x05, 0xea: 0x06, 0xeb: 0x05, 0xec: 0x05, 0xed: 0x07, 0xee: 0x08, 0xef: 0x09, + 0xf0: 0x10, 0xf3: 0x13, 0xf4: 0x14, // Block 0x4, offset 0x100 0x104: 0x0e, 0x105: 0x0f, // Block 0x5, offset 0x140 @@ -1090,91 +1118,86 @@ var widthIndex = [1408]uint8{ 0x1d8: 0x0e, 0x1d9: 0x0e, 0x1da: 0x0e, 0x1db: 0x0e, 0x1dc: 0x0e, 0x1dd: 0x0e, 0x1de: 0x0e, 0x1df: 0x0e, 0x1e0: 0x0e, 0x1e1: 0x0e, 0x1e2: 0x0e, 0x1e3: 0x0e, 0x1e4: 0x0e, 0x1e5: 0x0e, 0x1e6: 0x0e, 0x1e7: 0x0e, 0x1e8: 0x0e, 0x1e9: 0x0e, 0x1ea: 0x0e, 0x1eb: 0x0e, 0x1ec: 0x0e, 0x1ed: 0x0e, 0x1ee: 0x0e, 0x1ef: 0x0e, - 0x1f0: 0x0e, 0x1f1: 0x0e, 0x1f2: 0x0e, 0x1f3: 0x0e, 0x1f4: 0x0e, 0x1f5: 0x0e, 0x1f6: 0x0e, + 0x1f0: 0x0e, 0x1f1: 0x0e, 0x1f2: 0x0e, 0x1f3: 0x0e, 0x1f4: 0x0e, 0x1f5: 0x0e, 0x1f6: 0x0e, 0x1f7: 0x0e, 0x1f8: 0x0e, 0x1f9: 0x0e, 0x1fa: 0x0e, 0x1fb: 0x0e, 0x1fc: 0x0e, 0x1fd: 0x0e, 0x1fe: 0x0e, 0x1ff: 0x0e, // Block 0x8, offset 0x200 0x200: 0x0e, 0x201: 0x0e, 0x202: 0x0e, 0x203: 0x0e, 0x204: 0x0e, 0x205: 0x0e, 0x206: 0x0e, 0x207: 0x0e, 0x208: 0x0e, 0x209: 0x0e, 0x20a: 0x0e, 0x20b: 0x0e, 0x20c: 0x0e, 0x20d: 0x0e, 0x20e: 0x0e, 0x20f: 0x0e, - 0x210: 0x0e, 0x211: 0x0e, 0x212: 0x0e, 0x213: 0x0e, 0x214: 0x0e, 0x215: 0x0e, 0x216: 0x0e, 0x217: 0x0e, - 0x218: 0x0e, 0x219: 0x0e, 0x21a: 0x0e, 0x21b: 0x0e, 0x21c: 0x0e, 0x21d: 0x0e, 0x21e: 0x0e, 0x21f: 0x0e, - 0x220: 0x0e, 0x221: 0x0e, 0x222: 0x0e, 0x223: 0x0e, 0x224: 0x0e, 0x225: 0x0e, 0x226: 0x0e, 0x227: 0x0e, - 0x228: 0x0e, 0x229: 0x0e, 0x22a: 0x0e, 0x22b: 0x0e, 0x22c: 0x0e, 0x22d: 0x0e, 0x22e: 0x0e, 0x22f: 0x0e, + 0x210: 0x0e, 0x211: 0x0e, 0x212: 0x3a, 0x213: 0x3b, + 0x225: 0x3c, 0x230: 0x0e, 0x231: 0x0e, 0x232: 0x0e, 0x233: 0x0e, 0x234: 0x0e, 0x235: 0x0e, 0x236: 0x0e, 0x237: 0x0e, 0x238: 0x0e, 0x239: 0x0e, 0x23a: 0x0e, 0x23b: 0x0e, 0x23c: 0x0e, 0x23d: 0x0e, 0x23e: 0x0e, 0x23f: 0x0e, // Block 0x9, offset 0x240 0x240: 0x0e, 0x241: 0x0e, 0x242: 0x0e, 0x243: 0x0e, 0x244: 0x0e, 0x245: 0x0e, 0x246: 0x0e, 0x247: 0x0e, 0x248: 0x0e, 0x249: 0x0e, 0x24a: 0x0e, 0x24b: 0x0e, 0x24c: 0x0e, 0x24d: 0x0e, 0x24e: 0x0e, 0x24f: 0x0e, - 0x250: 0x0e, 0x251: 0x0e, 0x252: 0x3a, 0x253: 0x3b, - 0x265: 0x3c, - 0x270: 0x0e, 0x271: 0x0e, 0x272: 0x0e, 0x273: 0x0e, 0x274: 0x0e, 0x275: 0x0e, 0x276: 0x0e, 0x277: 0x0e, - 0x278: 0x0e, 0x279: 0x0e, 0x27a: 0x0e, 0x27b: 0x0e, 0x27c: 0x0e, 0x27d: 0x0e, 0x27e: 0x0e, 0x27f: 0x0e, + 0x250: 0x0e, 0x251: 0x0e, 0x252: 0x0e, 0x253: 0x0e, 0x254: 0x0e, 0x255: 0x0e, 0x256: 0x0e, 0x257: 0x0e, + 0x258: 0x0e, 0x259: 0x0e, 0x25a: 0x0e, 0x25b: 0x0e, 0x25c: 0x0e, 0x25d: 0x0e, 0x25e: 0x3d, // Block 0xa, offset 0x280 - 0x280: 0x0e, 0x281: 0x0e, 0x282: 0x0e, 0x283: 0x0e, 0x284: 0x0e, 0x285: 0x0e, 0x286: 0x0e, 0x287: 0x0e, - 0x288: 0x0e, 0x289: 0x0e, 0x28a: 0x0e, 0x28b: 0x0e, 0x28c: 0x0e, 0x28d: 0x0e, 0x28e: 0x0e, 0x28f: 0x0e, - 0x290: 0x0e, 0x291: 0x0e, 0x292: 0x0e, 0x293: 0x0e, 0x294: 0x0e, 0x295: 0x0e, 0x296: 0x0e, 0x297: 0x0e, - 0x298: 0x0e, 0x299: 0x0e, 0x29a: 0x0e, 0x29b: 0x0e, 0x29c: 0x0e, 0x29d: 0x0e, 0x29e: 0x3d, + 0x280: 0x08, 0x281: 0x08, 0x282: 0x08, 0x283: 0x08, 0x284: 0x08, 0x285: 0x08, 0x286: 0x08, 0x287: 0x08, + 0x288: 0x08, 0x289: 0x08, 0x28a: 0x08, 0x28b: 0x08, 0x28c: 0x08, 0x28d: 0x08, 0x28e: 0x08, 0x28f: 0x08, + 0x290: 0x08, 0x291: 0x08, 0x292: 0x08, 0x293: 0x08, 0x294: 0x08, 0x295: 0x08, 0x296: 0x08, 0x297: 0x08, + 0x298: 0x08, 0x299: 0x08, 0x29a: 0x08, 0x29b: 0x08, 0x29c: 0x08, 0x29d: 0x08, 0x29e: 0x08, 0x29f: 0x08, + 0x2a0: 0x08, 0x2a1: 0x08, 0x2a2: 0x08, 0x2a3: 0x08, 0x2a4: 0x08, 0x2a5: 0x08, 0x2a6: 0x08, 0x2a7: 0x08, + 0x2a8: 0x08, 0x2a9: 0x08, 0x2aa: 0x08, 0x2ab: 0x08, 0x2ac: 0x08, 0x2ad: 0x08, 0x2ae: 0x08, 0x2af: 0x08, + 0x2b0: 0x08, 0x2b1: 0x08, 0x2b2: 0x08, 0x2b3: 0x08, 0x2b4: 0x08, 0x2b5: 0x08, 0x2b6: 0x08, 0x2b7: 0x08, + 0x2b8: 0x08, 0x2b9: 0x08, 0x2ba: 0x08, 0x2bb: 0x08, 0x2bc: 0x08, 0x2bd: 0x08, 0x2be: 0x08, 0x2bf: 0x08, // Block 0xb, offset 0x2c0 0x2c0: 0x08, 0x2c1: 0x08, 0x2c2: 0x08, 0x2c3: 0x08, 0x2c4: 0x08, 0x2c5: 0x08, 0x2c6: 0x08, 0x2c7: 0x08, 0x2c8: 0x08, 0x2c9: 0x08, 0x2ca: 0x08, 0x2cb: 0x08, 0x2cc: 0x08, 0x2cd: 0x08, 0x2ce: 0x08, 0x2cf: 0x08, 0x2d0: 0x08, 0x2d1: 0x08, 0x2d2: 0x08, 0x2d3: 0x08, 0x2d4: 0x08, 0x2d5: 0x08, 0x2d6: 0x08, 0x2d7: 0x08, 0x2d8: 0x08, 0x2d9: 0x08, 0x2da: 0x08, 0x2db: 0x08, 0x2dc: 0x08, 0x2dd: 0x08, 0x2de: 0x08, 0x2df: 0x08, - 0x2e0: 0x08, 0x2e1: 0x08, 0x2e2: 0x08, 0x2e3: 0x08, 0x2e4: 0x08, 0x2e5: 0x08, 0x2e6: 0x08, 0x2e7: 0x08, - 0x2e8: 0x08, 0x2e9: 0x08, 0x2ea: 0x08, 0x2eb: 0x08, 0x2ec: 0x08, 0x2ed: 0x08, 0x2ee: 0x08, 0x2ef: 0x08, - 0x2f0: 0x08, 0x2f1: 0x08, 0x2f2: 0x08, 0x2f3: 0x08, 0x2f4: 0x08, 0x2f5: 0x08, 0x2f6: 0x08, 0x2f7: 0x08, - 0x2f8: 0x08, 0x2f9: 0x08, 0x2fa: 0x08, 0x2fb: 0x08, 0x2fc: 0x08, 0x2fd: 0x08, 0x2fe: 0x08, 0x2ff: 0x08, + 0x2e0: 0x08, 0x2e1: 0x08, 0x2e2: 0x08, 0x2e3: 0x08, 0x2e4: 0x0e, 0x2e5: 0x0e, 0x2e6: 0x0e, 0x2e7: 0x0e, + 0x2e8: 0x0e, 0x2e9: 0x0e, 0x2ea: 0x0e, 0x2eb: 0x0e, + 0x2f8: 0x3e, 0x2f9: 0x3f, 0x2fc: 0x40, 0x2fd: 0x41, 0x2fe: 0x42, 0x2ff: 0x43, // Block 0xc, offset 0x300 - 0x300: 0x08, 0x301: 0x08, 0x302: 0x08, 0x303: 0x08, 0x304: 0x08, 0x305: 0x08, 0x306: 0x08, 0x307: 0x08, - 0x308: 0x08, 0x309: 0x08, 0x30a: 0x08, 0x30b: 0x08, 0x30c: 0x08, 0x30d: 0x08, 0x30e: 0x08, 0x30f: 0x08, - 0x310: 0x08, 0x311: 0x08, 0x312: 0x08, 0x313: 0x08, 0x314: 0x08, 0x315: 0x08, 0x316: 0x08, 0x317: 0x08, - 0x318: 0x08, 0x319: 0x08, 0x31a: 0x08, 0x31b: 0x08, 0x31c: 0x08, 0x31d: 0x08, 0x31e: 0x08, 0x31f: 0x08, - 0x320: 0x08, 0x321: 0x08, 0x322: 0x08, 0x323: 0x08, 0x324: 0x0e, 0x325: 0x0e, 0x326: 0x0e, 0x327: 0x0e, - 0x328: 0x0e, 0x329: 0x0e, 0x32a: 0x0e, 0x32b: 0x0e, - 0x338: 0x3e, 0x339: 0x3f, 0x33c: 0x40, 0x33d: 0x41, 0x33e: 0x42, 0x33f: 0x43, + 0x33f: 0x44, // Block 0xd, offset 0x340 - 0x37f: 0x44, + 0x340: 0x0e, 0x341: 0x0e, 0x342: 0x0e, 0x343: 0x0e, 0x344: 0x0e, 0x345: 0x0e, 0x346: 0x0e, 0x347: 0x0e, + 0x348: 0x0e, 0x349: 0x0e, 0x34a: 0x0e, 0x34b: 0x0e, 0x34c: 0x0e, 0x34d: 0x0e, 0x34e: 0x0e, 0x34f: 0x0e, + 0x350: 0x0e, 0x351: 0x0e, 0x352: 0x0e, 0x353: 0x0e, 0x354: 0x0e, 0x355: 0x0e, 0x356: 0x0e, 0x357: 0x0e, + 0x358: 0x0e, 0x359: 0x0e, 0x35a: 0x0e, 0x35b: 0x0e, 0x35c: 0x0e, 0x35d: 0x0e, 0x35e: 0x0e, 0x35f: 0x0e, + 0x360: 0x0e, 0x361: 0x0e, 0x362: 0x0e, 0x363: 0x0e, 0x364: 0x0e, 0x365: 0x0e, 0x366: 0x0e, 0x367: 0x0e, + 0x368: 0x0e, 0x369: 0x0e, 0x36a: 0x0e, 0x36b: 0x0e, 0x36c: 0x0e, 0x36d: 0x0e, 0x36e: 0x0e, 0x36f: 0x0e, + 0x370: 0x0e, 0x371: 0x0e, 0x372: 0x0e, 0x373: 0x45, 0x374: 0x46, 0x376: 0x0e, 0x377: 0x47, // Block 0xe, offset 0x380 - 0x380: 0x0e, 0x381: 0x0e, 0x382: 0x0e, 0x383: 0x0e, 0x384: 0x0e, 0x385: 0x0e, 0x386: 0x0e, 0x387: 0x0e, - 0x388: 0x0e, 0x389: 0x0e, 0x38a: 0x0e, 0x38b: 0x0e, 0x38c: 0x0e, 0x38d: 0x0e, 0x38e: 0x0e, 0x38f: 0x0e, - 0x390: 0x0e, 0x391: 0x0e, 0x392: 0x0e, 0x393: 0x0e, 0x394: 0x0e, 0x395: 0x0e, 0x396: 0x0e, 0x397: 0x0e, - 0x398: 0x0e, 0x399: 0x0e, 0x39a: 0x0e, 0x39b: 0x0e, 0x39c: 0x0e, 0x39d: 0x0e, 0x39e: 0x0e, 0x39f: 0x45, - 0x3a0: 0x0e, 0x3a1: 0x0e, 0x3a2: 0x0e, 0x3a3: 0x0e, 0x3a4: 0x0e, 0x3a5: 0x0e, 0x3a6: 0x0e, 0x3a7: 0x0e, - 0x3a8: 0x0e, 0x3a9: 0x0e, 0x3aa: 0x0e, 0x3ab: 0x0e, 0x3ac: 0x0e, 0x3ad: 0x0e, 0x3ae: 0x0e, 0x3af: 0x0e, - 0x3b0: 0x0e, 0x3b1: 0x0e, 0x3b2: 0x0e, 0x3b3: 0x46, 0x3b4: 0x47, + 0x3bf: 0x48, // Block 0xf, offset 0x3c0 - 0x3c0: 0x0e, 0x3c1: 0x0e, 0x3c2: 0x0e, 0x3c3: 0x0e, 0x3c4: 0x48, 0x3c5: 0x49, 0x3c6: 0x0e, 0x3c7: 0x0e, - 0x3c8: 0x0e, 0x3c9: 0x0e, 0x3ca: 0x0e, 0x3cb: 0x4a, + 0x3c0: 0x0e, 0x3c1: 0x0e, 0x3c2: 0x0e, 0x3c3: 0x0e, 0x3c4: 0x49, 0x3c5: 0x4a, 0x3c6: 0x0e, 0x3c7: 0x0e, + 0x3c8: 0x0e, 0x3c9: 0x0e, 0x3ca: 0x0e, 0x3cb: 0x4b, // Block 0x10, offset 0x400 - 0x400: 0x4b, 0x403: 0x4c, 0x404: 0x4d, 0x405: 0x4e, 0x406: 0x4f, - 0x408: 0x50, 0x409: 0x51, 0x40c: 0x52, 0x40d: 0x53, 0x40e: 0x54, 0x40f: 0x55, - 0x410: 0x56, 0x411: 0x57, 0x412: 0x0e, 0x413: 0x58, 0x414: 0x59, 0x415: 0x5a, 0x416: 0x5b, 0x417: 0x5c, - 0x418: 0x0e, 0x419: 0x5d, 0x41a: 0x0e, 0x41b: 0x5e, 0x41f: 0x5f, - 0x424: 0x60, 0x425: 0x61, 0x426: 0x0e, 0x427: 0x62, - 0x429: 0x63, 0x42a: 0x64, 0x42b: 0x65, + 0x40c: 0x0e, 0x40d: 0x4c, // Block 0x11, offset 0x440 - 0x456: 0x0b, 0x457: 0x06, - 0x458: 0x0c, 0x45b: 0x0d, 0x45f: 0x0e, - 0x460: 0x06, 0x461: 0x06, 0x462: 0x06, 0x463: 0x06, 0x464: 0x06, 0x465: 0x06, 0x466: 0x06, 0x467: 0x06, - 0x468: 0x06, 0x469: 0x06, 0x46a: 0x06, 0x46b: 0x06, 0x46c: 0x06, 0x46d: 0x06, 0x46e: 0x06, 0x46f: 0x06, - 0x470: 0x06, 0x471: 0x06, 0x472: 0x06, 0x473: 0x06, 0x474: 0x06, 0x475: 0x06, 0x476: 0x06, 0x477: 0x06, - 0x478: 0x06, 0x479: 0x06, 0x47a: 0x06, 0x47b: 0x06, 0x47c: 0x06, 0x47d: 0x06, 0x47e: 0x06, 0x47f: 0x06, + 0x440: 0x4d, 0x443: 0x4e, 0x444: 0x4f, 0x445: 0x50, 0x446: 0x51, + 0x448: 0x52, 0x449: 0x53, 0x44c: 0x54, 0x44d: 0x55, 0x44e: 0x56, 0x44f: 0x57, + 0x450: 0x58, 0x451: 0x59, 0x452: 0x0e, 0x453: 0x5a, 0x454: 0x5b, 0x455: 0x5c, 0x456: 0x5d, 0x457: 0x5e, + 0x458: 0x0e, 0x459: 0x5f, 0x45a: 0x0e, 0x45b: 0x60, 0x45f: 0x61, + 0x464: 0x62, 0x465: 0x63, 0x466: 0x0e, 0x467: 0x0e, + 0x469: 0x64, 0x46a: 0x65, 0x46b: 0x66, // Block 0x12, offset 0x480 - 0x484: 0x08, 0x485: 0x08, 0x486: 0x08, 0x487: 0x09, + 0x496: 0x0a, 0x497: 0x05, + 0x498: 0x0b, 0x49a: 0x0c, 0x49b: 0x0d, 0x49d: 0x0e, 0x49f: 0x0f, + 0x4a0: 0x05, 0x4a1: 0x05, 0x4a2: 0x05, 0x4a3: 0x05, 0x4a4: 0x05, 0x4a5: 0x05, 0x4a6: 0x05, 0x4a7: 0x05, + 0x4a8: 0x05, 0x4a9: 0x05, 0x4aa: 0x05, 0x4ab: 0x05, 0x4ac: 0x05, 0x4ad: 0x05, 0x4ae: 0x05, 0x4af: 0x05, + 0x4b0: 0x05, 0x4b1: 0x05, 0x4b2: 0x05, 0x4b3: 0x05, 0x4b4: 0x05, 0x4b5: 0x05, 0x4b6: 0x05, 0x4b7: 0x05, + 0x4b8: 0x05, 0x4b9: 0x05, 0x4ba: 0x05, 0x4bb: 0x05, 0x4bc: 0x05, 0x4bd: 0x05, 0x4be: 0x05, 0x4bf: 0x05, // Block 0x13, offset 0x4c0 - 0x4c0: 0x08, 0x4c1: 0x08, 0x4c2: 0x08, 0x4c3: 0x08, 0x4c4: 0x08, 0x4c5: 0x08, 0x4c6: 0x08, 0x4c7: 0x08, - 0x4c8: 0x08, 0x4c9: 0x08, 0x4ca: 0x08, 0x4cb: 0x08, 0x4cc: 0x08, 0x4cd: 0x08, 0x4ce: 0x08, 0x4cf: 0x08, - 0x4d0: 0x08, 0x4d1: 0x08, 0x4d2: 0x08, 0x4d3: 0x08, 0x4d4: 0x08, 0x4d5: 0x08, 0x4d6: 0x08, 0x4d7: 0x08, - 0x4d8: 0x08, 0x4d9: 0x08, 0x4da: 0x08, 0x4db: 0x08, 0x4dc: 0x08, 0x4dd: 0x08, 0x4de: 0x08, 0x4df: 0x08, - 0x4e0: 0x08, 0x4e1: 0x08, 0x4e2: 0x08, 0x4e3: 0x08, 0x4e4: 0x08, 0x4e5: 0x08, 0x4e6: 0x08, 0x4e7: 0x08, - 0x4e8: 0x08, 0x4e9: 0x08, 0x4ea: 0x08, 0x4eb: 0x08, 0x4ec: 0x08, 0x4ed: 0x08, 0x4ee: 0x08, 0x4ef: 0x08, - 0x4f0: 0x08, 0x4f1: 0x08, 0x4f2: 0x08, 0x4f3: 0x08, 0x4f4: 0x08, 0x4f5: 0x08, 0x4f6: 0x08, 0x4f7: 0x08, - 0x4f8: 0x08, 0x4f9: 0x08, 0x4fa: 0x08, 0x4fb: 0x08, 0x4fc: 0x08, 0x4fd: 0x08, 0x4fe: 0x08, 0x4ff: 0x66, + 0x4c4: 0x08, 0x4c5: 0x08, 0x4c6: 0x08, 0x4c7: 0x09, // Block 0x14, offset 0x500 - 0x520: 0x10, - 0x530: 0x09, 0x531: 0x09, 0x532: 0x09, 0x533: 0x09, 0x534: 0x09, 0x535: 0x09, 0x536: 0x09, 0x537: 0x09, - 0x538: 0x09, 0x539: 0x09, 0x53a: 0x09, 0x53b: 0x09, 0x53c: 0x09, 0x53d: 0x09, 0x53e: 0x09, 0x53f: 0x11, + 0x500: 0x08, 0x501: 0x08, 0x502: 0x08, 0x503: 0x08, 0x504: 0x08, 0x505: 0x08, 0x506: 0x08, 0x507: 0x08, + 0x508: 0x08, 0x509: 0x08, 0x50a: 0x08, 0x50b: 0x08, 0x50c: 0x08, 0x50d: 0x08, 0x50e: 0x08, 0x50f: 0x08, + 0x510: 0x08, 0x511: 0x08, 0x512: 0x08, 0x513: 0x08, 0x514: 0x08, 0x515: 0x08, 0x516: 0x08, 0x517: 0x08, + 0x518: 0x08, 0x519: 0x08, 0x51a: 0x08, 0x51b: 0x08, 0x51c: 0x08, 0x51d: 0x08, 0x51e: 0x08, 0x51f: 0x08, + 0x520: 0x08, 0x521: 0x08, 0x522: 0x08, 0x523: 0x08, 0x524: 0x08, 0x525: 0x08, 0x526: 0x08, 0x527: 0x08, + 0x528: 0x08, 0x529: 0x08, 0x52a: 0x08, 0x52b: 0x08, 0x52c: 0x08, 0x52d: 0x08, 0x52e: 0x08, 0x52f: 0x08, + 0x530: 0x08, 0x531: 0x08, 0x532: 0x08, 0x533: 0x08, 0x534: 0x08, 0x535: 0x08, 0x536: 0x08, 0x537: 0x08, + 0x538: 0x08, 0x539: 0x08, 0x53a: 0x08, 0x53b: 0x08, 0x53c: 0x08, 0x53d: 0x08, 0x53e: 0x08, 0x53f: 0x67, // Block 0x15, offset 0x540 - 0x540: 0x09, 0x541: 0x09, 0x542: 0x09, 0x543: 0x09, 0x544: 0x09, 0x545: 0x09, 0x546: 0x09, 0x547: 0x09, - 0x548: 0x09, 0x549: 0x09, 0x54a: 0x09, 0x54b: 0x09, 0x54c: 0x09, 0x54d: 0x09, 0x54e: 0x09, 0x54f: 0x11, + 0x560: 0x11, + 0x570: 0x08, 0x571: 0x08, 0x572: 0x08, 0x573: 0x08, 0x574: 0x08, 0x575: 0x08, 0x576: 0x08, 0x577: 0x08, + 0x578: 0x08, 0x579: 0x08, 0x57a: 0x08, 0x57b: 0x08, 0x57c: 0x08, 0x57d: 0x08, 0x57e: 0x08, 0x57f: 0x12, + // Block 0x16, offset 0x580 + 0x580: 0x08, 0x581: 0x08, 0x582: 0x08, 0x583: 0x08, 0x584: 0x08, 0x585: 0x08, 0x586: 0x08, 0x587: 0x08, + 0x588: 0x08, 0x589: 0x08, 0x58a: 0x08, 0x58b: 0x08, 0x58c: 0x08, 0x58d: 0x08, 0x58e: 0x08, 0x58f: 0x12, } // inverseData contains 4-byte entries of the following format: @@ -1358,4 +1381,4 @@ var inverseData = [150][4]byte{ {0x03, 0xe2, 0x97, 0x25}, } -// Total table size 15448 bytes (15KiB) +// Total table size 15640 bytes (15KiB) diff --git a/vendor/golang.org/x/text/width/tables9.0.0.go b/vendor/golang.org/x/text/width/tables9.0.0.go deleted file mode 100644 index d981330a9f..0000000000 --- a/vendor/golang.org/x/text/width/tables9.0.0.go +++ /dev/null @@ -1,1296 +0,0 @@ -// Code generated by running "go generate" in golang.org/x/text. DO NOT EDIT. - -//go:build !go1.10 - -package width - -// UnicodeVersion is the Unicode version from which the tables in this package are derived. -const UnicodeVersion = "9.0.0" - -// lookup returns the trie value for the first UTF-8 encoding in s and -// the width in bytes of this encoding. The size will be 0 if s does not -// hold enough bytes to complete the encoding. len(s) must be greater than 0. -func (t *widthTrie) lookup(s []byte) (v uint16, sz int) { - c0 := s[0] - switch { - case c0 < 0x80: // is ASCII - return widthValues[c0], 1 - case c0 < 0xC2: - return 0, 1 // Illegal UTF-8: not a starter, not ASCII. - case c0 < 0xE0: // 2-byte UTF-8 - if len(s) < 2 { - return 0, 0 - } - i := widthIndex[c0] - c1 := s[1] - if c1 < 0x80 || 0xC0 <= c1 { - return 0, 1 // Illegal UTF-8: not a continuation byte. - } - return t.lookupValue(uint32(i), c1), 2 - case c0 < 0xF0: // 3-byte UTF-8 - if len(s) < 3 { - return 0, 0 - } - i := widthIndex[c0] - c1 := s[1] - if c1 < 0x80 || 0xC0 <= c1 { - return 0, 1 // Illegal UTF-8: not a continuation byte. - } - o := uint32(i)<<6 + uint32(c1) - i = widthIndex[o] - c2 := s[2] - if c2 < 0x80 || 0xC0 <= c2 { - return 0, 2 // Illegal UTF-8: not a continuation byte. - } - return t.lookupValue(uint32(i), c2), 3 - case c0 < 0xF8: // 4-byte UTF-8 - if len(s) < 4 { - return 0, 0 - } - i := widthIndex[c0] - c1 := s[1] - if c1 < 0x80 || 0xC0 <= c1 { - return 0, 1 // Illegal UTF-8: not a continuation byte. - } - o := uint32(i)<<6 + uint32(c1) - i = widthIndex[o] - c2 := s[2] - if c2 < 0x80 || 0xC0 <= c2 { - return 0, 2 // Illegal UTF-8: not a continuation byte. - } - o = uint32(i)<<6 + uint32(c2) - i = widthIndex[o] - c3 := s[3] - if c3 < 0x80 || 0xC0 <= c3 { - return 0, 3 // Illegal UTF-8: not a continuation byte. - } - return t.lookupValue(uint32(i), c3), 4 - } - // Illegal rune - return 0, 1 -} - -// lookupUnsafe returns the trie value for the first UTF-8 encoding in s. -// s must start with a full and valid UTF-8 encoded rune. -func (t *widthTrie) lookupUnsafe(s []byte) uint16 { - c0 := s[0] - if c0 < 0x80 { // is ASCII - return widthValues[c0] - } - i := widthIndex[c0] - if c0 < 0xE0 { // 2-byte UTF-8 - return t.lookupValue(uint32(i), s[1]) - } - i = widthIndex[uint32(i)<<6+uint32(s[1])] - if c0 < 0xF0 { // 3-byte UTF-8 - return t.lookupValue(uint32(i), s[2]) - } - i = widthIndex[uint32(i)<<6+uint32(s[2])] - if c0 < 0xF8 { // 4-byte UTF-8 - return t.lookupValue(uint32(i), s[3]) - } - return 0 -} - -// lookupString returns the trie value for the first UTF-8 encoding in s and -// the width in bytes of this encoding. The size will be 0 if s does not -// hold enough bytes to complete the encoding. len(s) must be greater than 0. -func (t *widthTrie) lookupString(s string) (v uint16, sz int) { - c0 := s[0] - switch { - case c0 < 0x80: // is ASCII - return widthValues[c0], 1 - case c0 < 0xC2: - return 0, 1 // Illegal UTF-8: not a starter, not ASCII. - case c0 < 0xE0: // 2-byte UTF-8 - if len(s) < 2 { - return 0, 0 - } - i := widthIndex[c0] - c1 := s[1] - if c1 < 0x80 || 0xC0 <= c1 { - return 0, 1 // Illegal UTF-8: not a continuation byte. - } - return t.lookupValue(uint32(i), c1), 2 - case c0 < 0xF0: // 3-byte UTF-8 - if len(s) < 3 { - return 0, 0 - } - i := widthIndex[c0] - c1 := s[1] - if c1 < 0x80 || 0xC0 <= c1 { - return 0, 1 // Illegal UTF-8: not a continuation byte. - } - o := uint32(i)<<6 + uint32(c1) - i = widthIndex[o] - c2 := s[2] - if c2 < 0x80 || 0xC0 <= c2 { - return 0, 2 // Illegal UTF-8: not a continuation byte. - } - return t.lookupValue(uint32(i), c2), 3 - case c0 < 0xF8: // 4-byte UTF-8 - if len(s) < 4 { - return 0, 0 - } - i := widthIndex[c0] - c1 := s[1] - if c1 < 0x80 || 0xC0 <= c1 { - return 0, 1 // Illegal UTF-8: not a continuation byte. - } - o := uint32(i)<<6 + uint32(c1) - i = widthIndex[o] - c2 := s[2] - if c2 < 0x80 || 0xC0 <= c2 { - return 0, 2 // Illegal UTF-8: not a continuation byte. - } - o = uint32(i)<<6 + uint32(c2) - i = widthIndex[o] - c3 := s[3] - if c3 < 0x80 || 0xC0 <= c3 { - return 0, 3 // Illegal UTF-8: not a continuation byte. - } - return t.lookupValue(uint32(i), c3), 4 - } - // Illegal rune - return 0, 1 -} - -// lookupStringUnsafe returns the trie value for the first UTF-8 encoding in s. -// s must start with a full and valid UTF-8 encoded rune. -func (t *widthTrie) lookupStringUnsafe(s string) uint16 { - c0 := s[0] - if c0 < 0x80 { // is ASCII - return widthValues[c0] - } - i := widthIndex[c0] - if c0 < 0xE0 { // 2-byte UTF-8 - return t.lookupValue(uint32(i), s[1]) - } - i = widthIndex[uint32(i)<<6+uint32(s[1])] - if c0 < 0xF0 { // 3-byte UTF-8 - return t.lookupValue(uint32(i), s[2]) - } - i = widthIndex[uint32(i)<<6+uint32(s[2])] - if c0 < 0xF8 { // 4-byte UTF-8 - return t.lookupValue(uint32(i), s[3]) - } - return 0 -} - -// widthTrie. Total size: 14080 bytes (13.75 KiB). Checksum: 3b8aeb3dc03667a3. -type widthTrie struct{} - -func newWidthTrie(i int) *widthTrie { - return &widthTrie{} -} - -// lookupValue determines the type of block n and looks up the value for b. -func (t *widthTrie) lookupValue(n uint32, b byte) uint16 { - switch { - default: - return uint16(widthValues[n<<6+uint32(b)]) - } -} - -// widthValues: 99 blocks, 6336 entries, 12672 bytes -// The third block is the zero block. -var widthValues = [6336]uint16{ - // Block 0x0, offset 0x0 - 0x20: 0x6001, 0x21: 0x6002, 0x22: 0x6002, 0x23: 0x6002, - 0x24: 0x6002, 0x25: 0x6002, 0x26: 0x6002, 0x27: 0x6002, 0x28: 0x6002, 0x29: 0x6002, - 0x2a: 0x6002, 0x2b: 0x6002, 0x2c: 0x6002, 0x2d: 0x6002, 0x2e: 0x6002, 0x2f: 0x6002, - 0x30: 0x6002, 0x31: 0x6002, 0x32: 0x6002, 0x33: 0x6002, 0x34: 0x6002, 0x35: 0x6002, - 0x36: 0x6002, 0x37: 0x6002, 0x38: 0x6002, 0x39: 0x6002, 0x3a: 0x6002, 0x3b: 0x6002, - 0x3c: 0x6002, 0x3d: 0x6002, 0x3e: 0x6002, 0x3f: 0x6002, - // Block 0x1, offset 0x40 - 0x40: 0x6003, 0x41: 0x6003, 0x42: 0x6003, 0x43: 0x6003, 0x44: 0x6003, 0x45: 0x6003, - 0x46: 0x6003, 0x47: 0x6003, 0x48: 0x6003, 0x49: 0x6003, 0x4a: 0x6003, 0x4b: 0x6003, - 0x4c: 0x6003, 0x4d: 0x6003, 0x4e: 0x6003, 0x4f: 0x6003, 0x50: 0x6003, 0x51: 0x6003, - 0x52: 0x6003, 0x53: 0x6003, 0x54: 0x6003, 0x55: 0x6003, 0x56: 0x6003, 0x57: 0x6003, - 0x58: 0x6003, 0x59: 0x6003, 0x5a: 0x6003, 0x5b: 0x6003, 0x5c: 0x6003, 0x5d: 0x6003, - 0x5e: 0x6003, 0x5f: 0x6003, 0x60: 0x6004, 0x61: 0x6004, 0x62: 0x6004, 0x63: 0x6004, - 0x64: 0x6004, 0x65: 0x6004, 0x66: 0x6004, 0x67: 0x6004, 0x68: 0x6004, 0x69: 0x6004, - 0x6a: 0x6004, 0x6b: 0x6004, 0x6c: 0x6004, 0x6d: 0x6004, 0x6e: 0x6004, 0x6f: 0x6004, - 0x70: 0x6004, 0x71: 0x6004, 0x72: 0x6004, 0x73: 0x6004, 0x74: 0x6004, 0x75: 0x6004, - 0x76: 0x6004, 0x77: 0x6004, 0x78: 0x6004, 0x79: 0x6004, 0x7a: 0x6004, 0x7b: 0x6004, - 0x7c: 0x6004, 0x7d: 0x6004, 0x7e: 0x6004, - // Block 0x2, offset 0x80 - // Block 0x3, offset 0xc0 - 0xe1: 0x2000, 0xe2: 0x6005, 0xe3: 0x6005, - 0xe4: 0x2000, 0xe5: 0x6006, 0xe6: 0x6005, 0xe7: 0x2000, 0xe8: 0x2000, - 0xea: 0x2000, 0xec: 0x6007, 0xed: 0x2000, 0xee: 0x2000, 0xef: 0x6008, - 0xf0: 0x2000, 0xf1: 0x2000, 0xf2: 0x2000, 0xf3: 0x2000, 0xf4: 0x2000, - 0xf6: 0x2000, 0xf7: 0x2000, 0xf8: 0x2000, 0xf9: 0x2000, 0xfa: 0x2000, - 0xfc: 0x2000, 0xfd: 0x2000, 0xfe: 0x2000, 0xff: 0x2000, - // Block 0x4, offset 0x100 - 0x106: 0x2000, - 0x110: 0x2000, - 0x117: 0x2000, - 0x118: 0x2000, - 0x11e: 0x2000, 0x11f: 0x2000, 0x120: 0x2000, 0x121: 0x2000, - 0x126: 0x2000, 0x128: 0x2000, 0x129: 0x2000, - 0x12a: 0x2000, 0x12c: 0x2000, 0x12d: 0x2000, - 0x130: 0x2000, 0x132: 0x2000, 0x133: 0x2000, - 0x137: 0x2000, 0x138: 0x2000, 0x139: 0x2000, 0x13a: 0x2000, - 0x13c: 0x2000, 0x13e: 0x2000, - // Block 0x5, offset 0x140 - 0x141: 0x2000, - 0x151: 0x2000, - 0x153: 0x2000, - 0x15b: 0x2000, - 0x166: 0x2000, 0x167: 0x2000, - 0x16b: 0x2000, - 0x171: 0x2000, 0x172: 0x2000, 0x173: 0x2000, - 0x178: 0x2000, - 0x17f: 0x2000, - // Block 0x6, offset 0x180 - 0x180: 0x2000, 0x181: 0x2000, 0x182: 0x2000, 0x184: 0x2000, - 0x188: 0x2000, 0x189: 0x2000, 0x18a: 0x2000, 0x18b: 0x2000, - 0x18d: 0x2000, - 0x192: 0x2000, 0x193: 0x2000, - 0x1a6: 0x2000, 0x1a7: 0x2000, - 0x1ab: 0x2000, - // Block 0x7, offset 0x1c0 - 0x1ce: 0x2000, 0x1d0: 0x2000, - 0x1d2: 0x2000, 0x1d4: 0x2000, 0x1d6: 0x2000, - 0x1d8: 0x2000, 0x1da: 0x2000, 0x1dc: 0x2000, - // Block 0x8, offset 0x200 - 0x211: 0x2000, - 0x221: 0x2000, - // Block 0x9, offset 0x240 - 0x244: 0x2000, - 0x247: 0x2000, 0x249: 0x2000, 0x24a: 0x2000, 0x24b: 0x2000, - 0x24d: 0x2000, 0x250: 0x2000, - 0x258: 0x2000, 0x259: 0x2000, 0x25a: 0x2000, 0x25b: 0x2000, 0x25d: 0x2000, - 0x25f: 0x2000, - // Block 0xa, offset 0x280 - 0x280: 0x2000, 0x281: 0x2000, 0x282: 0x2000, 0x283: 0x2000, 0x284: 0x2000, 0x285: 0x2000, - 0x286: 0x2000, 0x287: 0x2000, 0x288: 0x2000, 0x289: 0x2000, 0x28a: 0x2000, 0x28b: 0x2000, - 0x28c: 0x2000, 0x28d: 0x2000, 0x28e: 0x2000, 0x28f: 0x2000, 0x290: 0x2000, 0x291: 0x2000, - 0x292: 0x2000, 0x293: 0x2000, 0x294: 0x2000, 0x295: 0x2000, 0x296: 0x2000, 0x297: 0x2000, - 0x298: 0x2000, 0x299: 0x2000, 0x29a: 0x2000, 0x29b: 0x2000, 0x29c: 0x2000, 0x29d: 0x2000, - 0x29e: 0x2000, 0x29f: 0x2000, 0x2a0: 0x2000, 0x2a1: 0x2000, 0x2a2: 0x2000, 0x2a3: 0x2000, - 0x2a4: 0x2000, 0x2a5: 0x2000, 0x2a6: 0x2000, 0x2a7: 0x2000, 0x2a8: 0x2000, 0x2a9: 0x2000, - 0x2aa: 0x2000, 0x2ab: 0x2000, 0x2ac: 0x2000, 0x2ad: 0x2000, 0x2ae: 0x2000, 0x2af: 0x2000, - 0x2b0: 0x2000, 0x2b1: 0x2000, 0x2b2: 0x2000, 0x2b3: 0x2000, 0x2b4: 0x2000, 0x2b5: 0x2000, - 0x2b6: 0x2000, 0x2b7: 0x2000, 0x2b8: 0x2000, 0x2b9: 0x2000, 0x2ba: 0x2000, 0x2bb: 0x2000, - 0x2bc: 0x2000, 0x2bd: 0x2000, 0x2be: 0x2000, 0x2bf: 0x2000, - // Block 0xb, offset 0x2c0 - 0x2c0: 0x2000, 0x2c1: 0x2000, 0x2c2: 0x2000, 0x2c3: 0x2000, 0x2c4: 0x2000, 0x2c5: 0x2000, - 0x2c6: 0x2000, 0x2c7: 0x2000, 0x2c8: 0x2000, 0x2c9: 0x2000, 0x2ca: 0x2000, 0x2cb: 0x2000, - 0x2cc: 0x2000, 0x2cd: 0x2000, 0x2ce: 0x2000, 0x2cf: 0x2000, 0x2d0: 0x2000, 0x2d1: 0x2000, - 0x2d2: 0x2000, 0x2d3: 0x2000, 0x2d4: 0x2000, 0x2d5: 0x2000, 0x2d6: 0x2000, 0x2d7: 0x2000, - 0x2d8: 0x2000, 0x2d9: 0x2000, 0x2da: 0x2000, 0x2db: 0x2000, 0x2dc: 0x2000, 0x2dd: 0x2000, - 0x2de: 0x2000, 0x2df: 0x2000, 0x2e0: 0x2000, 0x2e1: 0x2000, 0x2e2: 0x2000, 0x2e3: 0x2000, - 0x2e4: 0x2000, 0x2e5: 0x2000, 0x2e6: 0x2000, 0x2e7: 0x2000, 0x2e8: 0x2000, 0x2e9: 0x2000, - 0x2ea: 0x2000, 0x2eb: 0x2000, 0x2ec: 0x2000, 0x2ed: 0x2000, 0x2ee: 0x2000, 0x2ef: 0x2000, - // Block 0xc, offset 0x300 - 0x311: 0x2000, - 0x312: 0x2000, 0x313: 0x2000, 0x314: 0x2000, 0x315: 0x2000, 0x316: 0x2000, 0x317: 0x2000, - 0x318: 0x2000, 0x319: 0x2000, 0x31a: 0x2000, 0x31b: 0x2000, 0x31c: 0x2000, 0x31d: 0x2000, - 0x31e: 0x2000, 0x31f: 0x2000, 0x320: 0x2000, 0x321: 0x2000, 0x323: 0x2000, - 0x324: 0x2000, 0x325: 0x2000, 0x326: 0x2000, 0x327: 0x2000, 0x328: 0x2000, 0x329: 0x2000, - 0x331: 0x2000, 0x332: 0x2000, 0x333: 0x2000, 0x334: 0x2000, 0x335: 0x2000, - 0x336: 0x2000, 0x337: 0x2000, 0x338: 0x2000, 0x339: 0x2000, 0x33a: 0x2000, 0x33b: 0x2000, - 0x33c: 0x2000, 0x33d: 0x2000, 0x33e: 0x2000, 0x33f: 0x2000, - // Block 0xd, offset 0x340 - 0x340: 0x2000, 0x341: 0x2000, 0x343: 0x2000, 0x344: 0x2000, 0x345: 0x2000, - 0x346: 0x2000, 0x347: 0x2000, 0x348: 0x2000, 0x349: 0x2000, - // Block 0xe, offset 0x380 - 0x381: 0x2000, - 0x390: 0x2000, 0x391: 0x2000, - 0x392: 0x2000, 0x393: 0x2000, 0x394: 0x2000, 0x395: 0x2000, 0x396: 0x2000, 0x397: 0x2000, - 0x398: 0x2000, 0x399: 0x2000, 0x39a: 0x2000, 0x39b: 0x2000, 0x39c: 0x2000, 0x39d: 0x2000, - 0x39e: 0x2000, 0x39f: 0x2000, 0x3a0: 0x2000, 0x3a1: 0x2000, 0x3a2: 0x2000, 0x3a3: 0x2000, - 0x3a4: 0x2000, 0x3a5: 0x2000, 0x3a6: 0x2000, 0x3a7: 0x2000, 0x3a8: 0x2000, 0x3a9: 0x2000, - 0x3aa: 0x2000, 0x3ab: 0x2000, 0x3ac: 0x2000, 0x3ad: 0x2000, 0x3ae: 0x2000, 0x3af: 0x2000, - 0x3b0: 0x2000, 0x3b1: 0x2000, 0x3b2: 0x2000, 0x3b3: 0x2000, 0x3b4: 0x2000, 0x3b5: 0x2000, - 0x3b6: 0x2000, 0x3b7: 0x2000, 0x3b8: 0x2000, 0x3b9: 0x2000, 0x3ba: 0x2000, 0x3bb: 0x2000, - 0x3bc: 0x2000, 0x3bd: 0x2000, 0x3be: 0x2000, 0x3bf: 0x2000, - // Block 0xf, offset 0x3c0 - 0x3c0: 0x2000, 0x3c1: 0x2000, 0x3c2: 0x2000, 0x3c3: 0x2000, 0x3c4: 0x2000, 0x3c5: 0x2000, - 0x3c6: 0x2000, 0x3c7: 0x2000, 0x3c8: 0x2000, 0x3c9: 0x2000, 0x3ca: 0x2000, 0x3cb: 0x2000, - 0x3cc: 0x2000, 0x3cd: 0x2000, 0x3ce: 0x2000, 0x3cf: 0x2000, 0x3d1: 0x2000, - // Block 0x10, offset 0x400 - 0x400: 0x4000, 0x401: 0x4000, 0x402: 0x4000, 0x403: 0x4000, 0x404: 0x4000, 0x405: 0x4000, - 0x406: 0x4000, 0x407: 0x4000, 0x408: 0x4000, 0x409: 0x4000, 0x40a: 0x4000, 0x40b: 0x4000, - 0x40c: 0x4000, 0x40d: 0x4000, 0x40e: 0x4000, 0x40f: 0x4000, 0x410: 0x4000, 0x411: 0x4000, - 0x412: 0x4000, 0x413: 0x4000, 0x414: 0x4000, 0x415: 0x4000, 0x416: 0x4000, 0x417: 0x4000, - 0x418: 0x4000, 0x419: 0x4000, 0x41a: 0x4000, 0x41b: 0x4000, 0x41c: 0x4000, 0x41d: 0x4000, - 0x41e: 0x4000, 0x41f: 0x4000, 0x420: 0x4000, 0x421: 0x4000, 0x422: 0x4000, 0x423: 0x4000, - 0x424: 0x4000, 0x425: 0x4000, 0x426: 0x4000, 0x427: 0x4000, 0x428: 0x4000, 0x429: 0x4000, - 0x42a: 0x4000, 0x42b: 0x4000, 0x42c: 0x4000, 0x42d: 0x4000, 0x42e: 0x4000, 0x42f: 0x4000, - 0x430: 0x4000, 0x431: 0x4000, 0x432: 0x4000, 0x433: 0x4000, 0x434: 0x4000, 0x435: 0x4000, - 0x436: 0x4000, 0x437: 0x4000, 0x438: 0x4000, 0x439: 0x4000, 0x43a: 0x4000, 0x43b: 0x4000, - 0x43c: 0x4000, 0x43d: 0x4000, 0x43e: 0x4000, 0x43f: 0x4000, - // Block 0x11, offset 0x440 - 0x440: 0x4000, 0x441: 0x4000, 0x442: 0x4000, 0x443: 0x4000, 0x444: 0x4000, 0x445: 0x4000, - 0x446: 0x4000, 0x447: 0x4000, 0x448: 0x4000, 0x449: 0x4000, 0x44a: 0x4000, 0x44b: 0x4000, - 0x44c: 0x4000, 0x44d: 0x4000, 0x44e: 0x4000, 0x44f: 0x4000, 0x450: 0x4000, 0x451: 0x4000, - 0x452: 0x4000, 0x453: 0x4000, 0x454: 0x4000, 0x455: 0x4000, 0x456: 0x4000, 0x457: 0x4000, - 0x458: 0x4000, 0x459: 0x4000, 0x45a: 0x4000, 0x45b: 0x4000, 0x45c: 0x4000, 0x45d: 0x4000, - 0x45e: 0x4000, 0x45f: 0x4000, - // Block 0x12, offset 0x480 - 0x490: 0x2000, - 0x493: 0x2000, 0x494: 0x2000, 0x495: 0x2000, 0x496: 0x2000, - 0x498: 0x2000, 0x499: 0x2000, 0x49c: 0x2000, 0x49d: 0x2000, - 0x4a0: 0x2000, 0x4a1: 0x2000, 0x4a2: 0x2000, - 0x4a4: 0x2000, 0x4a5: 0x2000, 0x4a6: 0x2000, 0x4a7: 0x2000, - 0x4b0: 0x2000, 0x4b2: 0x2000, 0x4b3: 0x2000, 0x4b5: 0x2000, - 0x4bb: 0x2000, - 0x4be: 0x2000, - // Block 0x13, offset 0x4c0 - 0x4f4: 0x2000, - 0x4ff: 0x2000, - // Block 0x14, offset 0x500 - 0x501: 0x2000, 0x502: 0x2000, 0x503: 0x2000, 0x504: 0x2000, - 0x529: 0xa009, - 0x52c: 0x2000, - // Block 0x15, offset 0x540 - 0x543: 0x2000, 0x545: 0x2000, - 0x549: 0x2000, - 0x553: 0x2000, 0x556: 0x2000, - 0x561: 0x2000, 0x562: 0x2000, - 0x566: 0x2000, - 0x56b: 0x2000, - // Block 0x16, offset 0x580 - 0x593: 0x2000, 0x594: 0x2000, - 0x59b: 0x2000, 0x59c: 0x2000, 0x59d: 0x2000, - 0x59e: 0x2000, 0x5a0: 0x2000, 0x5a1: 0x2000, 0x5a2: 0x2000, 0x5a3: 0x2000, - 0x5a4: 0x2000, 0x5a5: 0x2000, 0x5a6: 0x2000, 0x5a7: 0x2000, 0x5a8: 0x2000, 0x5a9: 0x2000, - 0x5aa: 0x2000, 0x5ab: 0x2000, - 0x5b0: 0x2000, 0x5b1: 0x2000, 0x5b2: 0x2000, 0x5b3: 0x2000, 0x5b4: 0x2000, 0x5b5: 0x2000, - 0x5b6: 0x2000, 0x5b7: 0x2000, 0x5b8: 0x2000, 0x5b9: 0x2000, - // Block 0x17, offset 0x5c0 - 0x5c9: 0x2000, - 0x5d0: 0x200a, 0x5d1: 0x200b, - 0x5d2: 0x200a, 0x5d3: 0x200c, 0x5d4: 0x2000, 0x5d5: 0x2000, 0x5d6: 0x2000, 0x5d7: 0x2000, - 0x5d8: 0x2000, 0x5d9: 0x2000, - 0x5f8: 0x2000, 0x5f9: 0x2000, - // Block 0x18, offset 0x600 - 0x612: 0x2000, 0x614: 0x2000, - 0x627: 0x2000, - // Block 0x19, offset 0x640 - 0x640: 0x2000, 0x642: 0x2000, 0x643: 0x2000, - 0x647: 0x2000, 0x648: 0x2000, 0x64b: 0x2000, - 0x64f: 0x2000, 0x651: 0x2000, - 0x655: 0x2000, - 0x65a: 0x2000, 0x65d: 0x2000, - 0x65e: 0x2000, 0x65f: 0x2000, 0x660: 0x2000, 0x663: 0x2000, - 0x665: 0x2000, 0x667: 0x2000, 0x668: 0x2000, 0x669: 0x2000, - 0x66a: 0x2000, 0x66b: 0x2000, 0x66c: 0x2000, 0x66e: 0x2000, - 0x674: 0x2000, 0x675: 0x2000, - 0x676: 0x2000, 0x677: 0x2000, - 0x67c: 0x2000, 0x67d: 0x2000, - // Block 0x1a, offset 0x680 - 0x688: 0x2000, - 0x68c: 0x2000, - 0x692: 0x2000, - 0x6a0: 0x2000, 0x6a1: 0x2000, - 0x6a4: 0x2000, 0x6a5: 0x2000, 0x6a6: 0x2000, 0x6a7: 0x2000, - 0x6aa: 0x2000, 0x6ab: 0x2000, 0x6ae: 0x2000, 0x6af: 0x2000, - // Block 0x1b, offset 0x6c0 - 0x6c2: 0x2000, 0x6c3: 0x2000, - 0x6c6: 0x2000, 0x6c7: 0x2000, - 0x6d5: 0x2000, - 0x6d9: 0x2000, - 0x6e5: 0x2000, - 0x6ff: 0x2000, - // Block 0x1c, offset 0x700 - 0x712: 0x2000, - 0x71a: 0x4000, 0x71b: 0x4000, - 0x729: 0x4000, - 0x72a: 0x4000, - // Block 0x1d, offset 0x740 - 0x769: 0x4000, - 0x76a: 0x4000, 0x76b: 0x4000, 0x76c: 0x4000, - 0x770: 0x4000, 0x773: 0x4000, - // Block 0x1e, offset 0x780 - 0x7a0: 0x2000, 0x7a1: 0x2000, 0x7a2: 0x2000, 0x7a3: 0x2000, - 0x7a4: 0x2000, 0x7a5: 0x2000, 0x7a6: 0x2000, 0x7a7: 0x2000, 0x7a8: 0x2000, 0x7a9: 0x2000, - 0x7aa: 0x2000, 0x7ab: 0x2000, 0x7ac: 0x2000, 0x7ad: 0x2000, 0x7ae: 0x2000, 0x7af: 0x2000, - 0x7b0: 0x2000, 0x7b1: 0x2000, 0x7b2: 0x2000, 0x7b3: 0x2000, 0x7b4: 0x2000, 0x7b5: 0x2000, - 0x7b6: 0x2000, 0x7b7: 0x2000, 0x7b8: 0x2000, 0x7b9: 0x2000, 0x7ba: 0x2000, 0x7bb: 0x2000, - 0x7bc: 0x2000, 0x7bd: 0x2000, 0x7be: 0x2000, 0x7bf: 0x2000, - // Block 0x1f, offset 0x7c0 - 0x7c0: 0x2000, 0x7c1: 0x2000, 0x7c2: 0x2000, 0x7c3: 0x2000, 0x7c4: 0x2000, 0x7c5: 0x2000, - 0x7c6: 0x2000, 0x7c7: 0x2000, 0x7c8: 0x2000, 0x7c9: 0x2000, 0x7ca: 0x2000, 0x7cb: 0x2000, - 0x7cc: 0x2000, 0x7cd: 0x2000, 0x7ce: 0x2000, 0x7cf: 0x2000, 0x7d0: 0x2000, 0x7d1: 0x2000, - 0x7d2: 0x2000, 0x7d3: 0x2000, 0x7d4: 0x2000, 0x7d5: 0x2000, 0x7d6: 0x2000, 0x7d7: 0x2000, - 0x7d8: 0x2000, 0x7d9: 0x2000, 0x7da: 0x2000, 0x7db: 0x2000, 0x7dc: 0x2000, 0x7dd: 0x2000, - 0x7de: 0x2000, 0x7df: 0x2000, 0x7e0: 0x2000, 0x7e1: 0x2000, 0x7e2: 0x2000, 0x7e3: 0x2000, - 0x7e4: 0x2000, 0x7e5: 0x2000, 0x7e6: 0x2000, 0x7e7: 0x2000, 0x7e8: 0x2000, 0x7e9: 0x2000, - 0x7eb: 0x2000, 0x7ec: 0x2000, 0x7ed: 0x2000, 0x7ee: 0x2000, 0x7ef: 0x2000, - 0x7f0: 0x2000, 0x7f1: 0x2000, 0x7f2: 0x2000, 0x7f3: 0x2000, 0x7f4: 0x2000, 0x7f5: 0x2000, - 0x7f6: 0x2000, 0x7f7: 0x2000, 0x7f8: 0x2000, 0x7f9: 0x2000, 0x7fa: 0x2000, 0x7fb: 0x2000, - 0x7fc: 0x2000, 0x7fd: 0x2000, 0x7fe: 0x2000, 0x7ff: 0x2000, - // Block 0x20, offset 0x800 - 0x800: 0x2000, 0x801: 0x2000, 0x802: 0x200d, 0x803: 0x2000, 0x804: 0x2000, 0x805: 0x2000, - 0x806: 0x2000, 0x807: 0x2000, 0x808: 0x2000, 0x809: 0x2000, 0x80a: 0x2000, 0x80b: 0x2000, - 0x80c: 0x2000, 0x80d: 0x2000, 0x80e: 0x2000, 0x80f: 0x2000, 0x810: 0x2000, 0x811: 0x2000, - 0x812: 0x2000, 0x813: 0x2000, 0x814: 0x2000, 0x815: 0x2000, 0x816: 0x2000, 0x817: 0x2000, - 0x818: 0x2000, 0x819: 0x2000, 0x81a: 0x2000, 0x81b: 0x2000, 0x81c: 0x2000, 0x81d: 0x2000, - 0x81e: 0x2000, 0x81f: 0x2000, 0x820: 0x2000, 0x821: 0x2000, 0x822: 0x2000, 0x823: 0x2000, - 0x824: 0x2000, 0x825: 0x2000, 0x826: 0x2000, 0x827: 0x2000, 0x828: 0x2000, 0x829: 0x2000, - 0x82a: 0x2000, 0x82b: 0x2000, 0x82c: 0x2000, 0x82d: 0x2000, 0x82e: 0x2000, 0x82f: 0x2000, - 0x830: 0x2000, 0x831: 0x2000, 0x832: 0x2000, 0x833: 0x2000, 0x834: 0x2000, 0x835: 0x2000, - 0x836: 0x2000, 0x837: 0x2000, 0x838: 0x2000, 0x839: 0x2000, 0x83a: 0x2000, 0x83b: 0x2000, - 0x83c: 0x2000, 0x83d: 0x2000, 0x83e: 0x2000, 0x83f: 0x2000, - // Block 0x21, offset 0x840 - 0x840: 0x2000, 0x841: 0x2000, 0x842: 0x2000, 0x843: 0x2000, 0x844: 0x2000, 0x845: 0x2000, - 0x846: 0x2000, 0x847: 0x2000, 0x848: 0x2000, 0x849: 0x2000, 0x84a: 0x2000, 0x84b: 0x2000, - 0x850: 0x2000, 0x851: 0x2000, - 0x852: 0x2000, 0x853: 0x2000, 0x854: 0x2000, 0x855: 0x2000, 0x856: 0x2000, 0x857: 0x2000, - 0x858: 0x2000, 0x859: 0x2000, 0x85a: 0x2000, 0x85b: 0x2000, 0x85c: 0x2000, 0x85d: 0x2000, - 0x85e: 0x2000, 0x85f: 0x2000, 0x860: 0x2000, 0x861: 0x2000, 0x862: 0x2000, 0x863: 0x2000, - 0x864: 0x2000, 0x865: 0x2000, 0x866: 0x2000, 0x867: 0x2000, 0x868: 0x2000, 0x869: 0x2000, - 0x86a: 0x2000, 0x86b: 0x2000, 0x86c: 0x2000, 0x86d: 0x2000, 0x86e: 0x2000, 0x86f: 0x2000, - 0x870: 0x2000, 0x871: 0x2000, 0x872: 0x2000, 0x873: 0x2000, - // Block 0x22, offset 0x880 - 0x880: 0x2000, 0x881: 0x2000, 0x882: 0x2000, 0x883: 0x2000, 0x884: 0x2000, 0x885: 0x2000, - 0x886: 0x2000, 0x887: 0x2000, 0x888: 0x2000, 0x889: 0x2000, 0x88a: 0x2000, 0x88b: 0x2000, - 0x88c: 0x2000, 0x88d: 0x2000, 0x88e: 0x2000, 0x88f: 0x2000, - 0x892: 0x2000, 0x893: 0x2000, 0x894: 0x2000, 0x895: 0x2000, - 0x8a0: 0x200e, 0x8a1: 0x2000, 0x8a3: 0x2000, - 0x8a4: 0x2000, 0x8a5: 0x2000, 0x8a6: 0x2000, 0x8a7: 0x2000, 0x8a8: 0x2000, 0x8a9: 0x2000, - 0x8b2: 0x2000, 0x8b3: 0x2000, - 0x8b6: 0x2000, 0x8b7: 0x2000, - 0x8bc: 0x2000, 0x8bd: 0x2000, - // Block 0x23, offset 0x8c0 - 0x8c0: 0x2000, 0x8c1: 0x2000, - 0x8c6: 0x2000, 0x8c7: 0x2000, 0x8c8: 0x2000, 0x8cb: 0x200f, - 0x8ce: 0x2000, 0x8cf: 0x2000, 0x8d0: 0x2000, 0x8d1: 0x2000, - 0x8e2: 0x2000, 0x8e3: 0x2000, - 0x8e4: 0x2000, 0x8e5: 0x2000, - 0x8ef: 0x2000, - 0x8fd: 0x4000, 0x8fe: 0x4000, - // Block 0x24, offset 0x900 - 0x905: 0x2000, - 0x906: 0x2000, 0x909: 0x2000, - 0x90e: 0x2000, 0x90f: 0x2000, - 0x914: 0x4000, 0x915: 0x4000, - 0x91c: 0x2000, - 0x91e: 0x2000, - // Block 0x25, offset 0x940 - 0x940: 0x2000, 0x942: 0x2000, - 0x948: 0x4000, 0x949: 0x4000, 0x94a: 0x4000, 0x94b: 0x4000, - 0x94c: 0x4000, 0x94d: 0x4000, 0x94e: 0x4000, 0x94f: 0x4000, 0x950: 0x4000, 0x951: 0x4000, - 0x952: 0x4000, 0x953: 0x4000, - 0x960: 0x2000, 0x961: 0x2000, 0x963: 0x2000, - 0x964: 0x2000, 0x965: 0x2000, 0x967: 0x2000, 0x968: 0x2000, 0x969: 0x2000, - 0x96a: 0x2000, 0x96c: 0x2000, 0x96d: 0x2000, 0x96f: 0x2000, - 0x97f: 0x4000, - // Block 0x26, offset 0x980 - 0x993: 0x4000, - 0x99e: 0x2000, 0x99f: 0x2000, 0x9a1: 0x4000, - 0x9aa: 0x4000, 0x9ab: 0x4000, - 0x9bd: 0x4000, 0x9be: 0x4000, 0x9bf: 0x2000, - // Block 0x27, offset 0x9c0 - 0x9c4: 0x4000, 0x9c5: 0x4000, - 0x9c6: 0x2000, 0x9c7: 0x2000, 0x9c8: 0x2000, 0x9c9: 0x2000, 0x9ca: 0x2000, 0x9cb: 0x2000, - 0x9cc: 0x2000, 0x9cd: 0x2000, 0x9ce: 0x4000, 0x9cf: 0x2000, 0x9d0: 0x2000, 0x9d1: 0x2000, - 0x9d2: 0x2000, 0x9d3: 0x2000, 0x9d4: 0x4000, 0x9d5: 0x2000, 0x9d6: 0x2000, 0x9d7: 0x2000, - 0x9d8: 0x2000, 0x9d9: 0x2000, 0x9da: 0x2000, 0x9db: 0x2000, 0x9dc: 0x2000, 0x9dd: 0x2000, - 0x9de: 0x2000, 0x9df: 0x2000, 0x9e0: 0x2000, 0x9e1: 0x2000, 0x9e3: 0x2000, - 0x9e8: 0x2000, 0x9e9: 0x2000, - 0x9ea: 0x4000, 0x9eb: 0x2000, 0x9ec: 0x2000, 0x9ed: 0x2000, 0x9ee: 0x2000, 0x9ef: 0x2000, - 0x9f0: 0x2000, 0x9f1: 0x2000, 0x9f2: 0x4000, 0x9f3: 0x4000, 0x9f4: 0x2000, 0x9f5: 0x4000, - 0x9f6: 0x2000, 0x9f7: 0x2000, 0x9f8: 0x2000, 0x9f9: 0x2000, 0x9fa: 0x4000, 0x9fb: 0x2000, - 0x9fc: 0x2000, 0x9fd: 0x4000, 0x9fe: 0x2000, 0x9ff: 0x2000, - // Block 0x28, offset 0xa00 - 0xa05: 0x4000, - 0xa0a: 0x4000, 0xa0b: 0x4000, - 0xa28: 0x4000, - 0xa3d: 0x2000, - // Block 0x29, offset 0xa40 - 0xa4c: 0x4000, 0xa4e: 0x4000, - 0xa53: 0x4000, 0xa54: 0x4000, 0xa55: 0x4000, 0xa57: 0x4000, - 0xa76: 0x2000, 0xa77: 0x2000, 0xa78: 0x2000, 0xa79: 0x2000, 0xa7a: 0x2000, 0xa7b: 0x2000, - 0xa7c: 0x2000, 0xa7d: 0x2000, 0xa7e: 0x2000, 0xa7f: 0x2000, - // Block 0x2a, offset 0xa80 - 0xa95: 0x4000, 0xa96: 0x4000, 0xa97: 0x4000, - 0xab0: 0x4000, - 0xabf: 0x4000, - // Block 0x2b, offset 0xac0 - 0xae6: 0x6000, 0xae7: 0x6000, 0xae8: 0x6000, 0xae9: 0x6000, - 0xaea: 0x6000, 0xaeb: 0x6000, 0xaec: 0x6000, 0xaed: 0x6000, - // Block 0x2c, offset 0xb00 - 0xb05: 0x6010, - 0xb06: 0x6011, - // Block 0x2d, offset 0xb40 - 0xb5b: 0x4000, 0xb5c: 0x4000, - // Block 0x2e, offset 0xb80 - 0xb90: 0x4000, - 0xb95: 0x4000, 0xb96: 0x2000, 0xb97: 0x2000, - 0xb98: 0x2000, 0xb99: 0x2000, - // Block 0x2f, offset 0xbc0 - 0xbc0: 0x4000, 0xbc1: 0x4000, 0xbc2: 0x4000, 0xbc3: 0x4000, 0xbc4: 0x4000, 0xbc5: 0x4000, - 0xbc6: 0x4000, 0xbc7: 0x4000, 0xbc8: 0x4000, 0xbc9: 0x4000, 0xbca: 0x4000, 0xbcb: 0x4000, - 0xbcc: 0x4000, 0xbcd: 0x4000, 0xbce: 0x4000, 0xbcf: 0x4000, 0xbd0: 0x4000, 0xbd1: 0x4000, - 0xbd2: 0x4000, 0xbd3: 0x4000, 0xbd4: 0x4000, 0xbd5: 0x4000, 0xbd6: 0x4000, 0xbd7: 0x4000, - 0xbd8: 0x4000, 0xbd9: 0x4000, 0xbdb: 0x4000, 0xbdc: 0x4000, 0xbdd: 0x4000, - 0xbde: 0x4000, 0xbdf: 0x4000, 0xbe0: 0x4000, 0xbe1: 0x4000, 0xbe2: 0x4000, 0xbe3: 0x4000, - 0xbe4: 0x4000, 0xbe5: 0x4000, 0xbe6: 0x4000, 0xbe7: 0x4000, 0xbe8: 0x4000, 0xbe9: 0x4000, - 0xbea: 0x4000, 0xbeb: 0x4000, 0xbec: 0x4000, 0xbed: 0x4000, 0xbee: 0x4000, 0xbef: 0x4000, - 0xbf0: 0x4000, 0xbf1: 0x4000, 0xbf2: 0x4000, 0xbf3: 0x4000, 0xbf4: 0x4000, 0xbf5: 0x4000, - 0xbf6: 0x4000, 0xbf7: 0x4000, 0xbf8: 0x4000, 0xbf9: 0x4000, 0xbfa: 0x4000, 0xbfb: 0x4000, - 0xbfc: 0x4000, 0xbfd: 0x4000, 0xbfe: 0x4000, 0xbff: 0x4000, - // Block 0x30, offset 0xc00 - 0xc00: 0x4000, 0xc01: 0x4000, 0xc02: 0x4000, 0xc03: 0x4000, 0xc04: 0x4000, 0xc05: 0x4000, - 0xc06: 0x4000, 0xc07: 0x4000, 0xc08: 0x4000, 0xc09: 0x4000, 0xc0a: 0x4000, 0xc0b: 0x4000, - 0xc0c: 0x4000, 0xc0d: 0x4000, 0xc0e: 0x4000, 0xc0f: 0x4000, 0xc10: 0x4000, 0xc11: 0x4000, - 0xc12: 0x4000, 0xc13: 0x4000, 0xc14: 0x4000, 0xc15: 0x4000, 0xc16: 0x4000, 0xc17: 0x4000, - 0xc18: 0x4000, 0xc19: 0x4000, 0xc1a: 0x4000, 0xc1b: 0x4000, 0xc1c: 0x4000, 0xc1d: 0x4000, - 0xc1e: 0x4000, 0xc1f: 0x4000, 0xc20: 0x4000, 0xc21: 0x4000, 0xc22: 0x4000, 0xc23: 0x4000, - 0xc24: 0x4000, 0xc25: 0x4000, 0xc26: 0x4000, 0xc27: 0x4000, 0xc28: 0x4000, 0xc29: 0x4000, - 0xc2a: 0x4000, 0xc2b: 0x4000, 0xc2c: 0x4000, 0xc2d: 0x4000, 0xc2e: 0x4000, 0xc2f: 0x4000, - 0xc30: 0x4000, 0xc31: 0x4000, 0xc32: 0x4000, 0xc33: 0x4000, - // Block 0x31, offset 0xc40 - 0xc40: 0x4000, 0xc41: 0x4000, 0xc42: 0x4000, 0xc43: 0x4000, 0xc44: 0x4000, 0xc45: 0x4000, - 0xc46: 0x4000, 0xc47: 0x4000, 0xc48: 0x4000, 0xc49: 0x4000, 0xc4a: 0x4000, 0xc4b: 0x4000, - 0xc4c: 0x4000, 0xc4d: 0x4000, 0xc4e: 0x4000, 0xc4f: 0x4000, 0xc50: 0x4000, 0xc51: 0x4000, - 0xc52: 0x4000, 0xc53: 0x4000, 0xc54: 0x4000, 0xc55: 0x4000, - 0xc70: 0x4000, 0xc71: 0x4000, 0xc72: 0x4000, 0xc73: 0x4000, 0xc74: 0x4000, 0xc75: 0x4000, - 0xc76: 0x4000, 0xc77: 0x4000, 0xc78: 0x4000, 0xc79: 0x4000, 0xc7a: 0x4000, 0xc7b: 0x4000, - // Block 0x32, offset 0xc80 - 0xc80: 0x9012, 0xc81: 0x4013, 0xc82: 0x4014, 0xc83: 0x4000, 0xc84: 0x4000, 0xc85: 0x4000, - 0xc86: 0x4000, 0xc87: 0x4000, 0xc88: 0x4000, 0xc89: 0x4000, 0xc8a: 0x4000, 0xc8b: 0x4000, - 0xc8c: 0x4015, 0xc8d: 0x4015, 0xc8e: 0x4000, 0xc8f: 0x4000, 0xc90: 0x4000, 0xc91: 0x4000, - 0xc92: 0x4000, 0xc93: 0x4000, 0xc94: 0x4000, 0xc95: 0x4000, 0xc96: 0x4000, 0xc97: 0x4000, - 0xc98: 0x4000, 0xc99: 0x4000, 0xc9a: 0x4000, 0xc9b: 0x4000, 0xc9c: 0x4000, 0xc9d: 0x4000, - 0xc9e: 0x4000, 0xc9f: 0x4000, 0xca0: 0x4000, 0xca1: 0x4000, 0xca2: 0x4000, 0xca3: 0x4000, - 0xca4: 0x4000, 0xca5: 0x4000, 0xca6: 0x4000, 0xca7: 0x4000, 0xca8: 0x4000, 0xca9: 0x4000, - 0xcaa: 0x4000, 0xcab: 0x4000, 0xcac: 0x4000, 0xcad: 0x4000, 0xcae: 0x4000, 0xcaf: 0x4000, - 0xcb0: 0x4000, 0xcb1: 0x4000, 0xcb2: 0x4000, 0xcb3: 0x4000, 0xcb4: 0x4000, 0xcb5: 0x4000, - 0xcb6: 0x4000, 0xcb7: 0x4000, 0xcb8: 0x4000, 0xcb9: 0x4000, 0xcba: 0x4000, 0xcbb: 0x4000, - 0xcbc: 0x4000, 0xcbd: 0x4000, 0xcbe: 0x4000, - // Block 0x33, offset 0xcc0 - 0xcc1: 0x4000, 0xcc2: 0x4000, 0xcc3: 0x4000, 0xcc4: 0x4000, 0xcc5: 0x4000, - 0xcc6: 0x4000, 0xcc7: 0x4000, 0xcc8: 0x4000, 0xcc9: 0x4000, 0xcca: 0x4000, 0xccb: 0x4000, - 0xccc: 0x4000, 0xccd: 0x4000, 0xcce: 0x4000, 0xccf: 0x4000, 0xcd0: 0x4000, 0xcd1: 0x4000, - 0xcd2: 0x4000, 0xcd3: 0x4000, 0xcd4: 0x4000, 0xcd5: 0x4000, 0xcd6: 0x4000, 0xcd7: 0x4000, - 0xcd8: 0x4000, 0xcd9: 0x4000, 0xcda: 0x4000, 0xcdb: 0x4000, 0xcdc: 0x4000, 0xcdd: 0x4000, - 0xcde: 0x4000, 0xcdf: 0x4000, 0xce0: 0x4000, 0xce1: 0x4000, 0xce2: 0x4000, 0xce3: 0x4000, - 0xce4: 0x4000, 0xce5: 0x4000, 0xce6: 0x4000, 0xce7: 0x4000, 0xce8: 0x4000, 0xce9: 0x4000, - 0xcea: 0x4000, 0xceb: 0x4000, 0xcec: 0x4000, 0xced: 0x4000, 0xcee: 0x4000, 0xcef: 0x4000, - 0xcf0: 0x4000, 0xcf1: 0x4000, 0xcf2: 0x4000, 0xcf3: 0x4000, 0xcf4: 0x4000, 0xcf5: 0x4000, - 0xcf6: 0x4000, 0xcf7: 0x4000, 0xcf8: 0x4000, 0xcf9: 0x4000, 0xcfa: 0x4000, 0xcfb: 0x4000, - 0xcfc: 0x4000, 0xcfd: 0x4000, 0xcfe: 0x4000, 0xcff: 0x4000, - // Block 0x34, offset 0xd00 - 0xd00: 0x4000, 0xd01: 0x4000, 0xd02: 0x4000, 0xd03: 0x4000, 0xd04: 0x4000, 0xd05: 0x4000, - 0xd06: 0x4000, 0xd07: 0x4000, 0xd08: 0x4000, 0xd09: 0x4000, 0xd0a: 0x4000, 0xd0b: 0x4000, - 0xd0c: 0x4000, 0xd0d: 0x4000, 0xd0e: 0x4000, 0xd0f: 0x4000, 0xd10: 0x4000, 0xd11: 0x4000, - 0xd12: 0x4000, 0xd13: 0x4000, 0xd14: 0x4000, 0xd15: 0x4000, 0xd16: 0x4000, - 0xd19: 0x4016, 0xd1a: 0x4017, 0xd1b: 0x4000, 0xd1c: 0x4000, 0xd1d: 0x4000, - 0xd1e: 0x4000, 0xd1f: 0x4000, 0xd20: 0x4000, 0xd21: 0x4018, 0xd22: 0x4019, 0xd23: 0x401a, - 0xd24: 0x401b, 0xd25: 0x401c, 0xd26: 0x401d, 0xd27: 0x401e, 0xd28: 0x401f, 0xd29: 0x4020, - 0xd2a: 0x4021, 0xd2b: 0x4022, 0xd2c: 0x4000, 0xd2d: 0x4010, 0xd2e: 0x4000, 0xd2f: 0x4023, - 0xd30: 0x4000, 0xd31: 0x4024, 0xd32: 0x4000, 0xd33: 0x4025, 0xd34: 0x4000, 0xd35: 0x4026, - 0xd36: 0x4000, 0xd37: 0x401a, 0xd38: 0x4000, 0xd39: 0x4027, 0xd3a: 0x4000, 0xd3b: 0x4028, - 0xd3c: 0x4000, 0xd3d: 0x4020, 0xd3e: 0x4000, 0xd3f: 0x4029, - // Block 0x35, offset 0xd40 - 0xd40: 0x4000, 0xd41: 0x402a, 0xd42: 0x4000, 0xd43: 0x402b, 0xd44: 0x402c, 0xd45: 0x4000, - 0xd46: 0x4017, 0xd47: 0x4000, 0xd48: 0x402d, 0xd49: 0x4000, 0xd4a: 0x402e, 0xd4b: 0x402f, - 0xd4c: 0x4030, 0xd4d: 0x4017, 0xd4e: 0x4016, 0xd4f: 0x4017, 0xd50: 0x4000, 0xd51: 0x4000, - 0xd52: 0x4031, 0xd53: 0x4000, 0xd54: 0x4000, 0xd55: 0x4031, 0xd56: 0x4000, 0xd57: 0x4000, - 0xd58: 0x4032, 0xd59: 0x4000, 0xd5a: 0x4000, 0xd5b: 0x4032, 0xd5c: 0x4000, 0xd5d: 0x4000, - 0xd5e: 0x4033, 0xd5f: 0x402e, 0xd60: 0x4034, 0xd61: 0x4035, 0xd62: 0x4034, 0xd63: 0x4036, - 0xd64: 0x4037, 0xd65: 0x4024, 0xd66: 0x4035, 0xd67: 0x4025, 0xd68: 0x4038, 0xd69: 0x4038, - 0xd6a: 0x4039, 0xd6b: 0x4039, 0xd6c: 0x403a, 0xd6d: 0x403a, 0xd6e: 0x4000, 0xd6f: 0x4035, - 0xd70: 0x4000, 0xd71: 0x4000, 0xd72: 0x403b, 0xd73: 0x403c, 0xd74: 0x4000, 0xd75: 0x4000, - 0xd76: 0x4000, 0xd77: 0x4000, 0xd78: 0x4000, 0xd79: 0x4000, 0xd7a: 0x4000, 0xd7b: 0x403d, - 0xd7c: 0x401c, 0xd7d: 0x4000, 0xd7e: 0x4000, 0xd7f: 0x4000, - // Block 0x36, offset 0xd80 - 0xd85: 0x4000, - 0xd86: 0x4000, 0xd87: 0x4000, 0xd88: 0x4000, 0xd89: 0x4000, 0xd8a: 0x4000, 0xd8b: 0x4000, - 0xd8c: 0x4000, 0xd8d: 0x4000, 0xd8e: 0x4000, 0xd8f: 0x4000, 0xd90: 0x4000, 0xd91: 0x4000, - 0xd92: 0x4000, 0xd93: 0x4000, 0xd94: 0x4000, 0xd95: 0x4000, 0xd96: 0x4000, 0xd97: 0x4000, - 0xd98: 0x4000, 0xd99: 0x4000, 0xd9a: 0x4000, 0xd9b: 0x4000, 0xd9c: 0x4000, 0xd9d: 0x4000, - 0xd9e: 0x4000, 0xd9f: 0x4000, 0xda0: 0x4000, 0xda1: 0x4000, 0xda2: 0x4000, 0xda3: 0x4000, - 0xda4: 0x4000, 0xda5: 0x4000, 0xda6: 0x4000, 0xda7: 0x4000, 0xda8: 0x4000, 0xda9: 0x4000, - 0xdaa: 0x4000, 0xdab: 0x4000, 0xdac: 0x4000, 0xdad: 0x4000, - 0xdb1: 0x403e, 0xdb2: 0x403e, 0xdb3: 0x403e, 0xdb4: 0x403e, 0xdb5: 0x403e, - 0xdb6: 0x403e, 0xdb7: 0x403e, 0xdb8: 0x403e, 0xdb9: 0x403e, 0xdba: 0x403e, 0xdbb: 0x403e, - 0xdbc: 0x403e, 0xdbd: 0x403e, 0xdbe: 0x403e, 0xdbf: 0x403e, - // Block 0x37, offset 0xdc0 - 0xdc0: 0x4037, 0xdc1: 0x4037, 0xdc2: 0x4037, 0xdc3: 0x4037, 0xdc4: 0x4037, 0xdc5: 0x4037, - 0xdc6: 0x4037, 0xdc7: 0x4037, 0xdc8: 0x4037, 0xdc9: 0x4037, 0xdca: 0x4037, 0xdcb: 0x4037, - 0xdcc: 0x4037, 0xdcd: 0x4037, 0xdce: 0x4037, 0xdcf: 0x400e, 0xdd0: 0x403f, 0xdd1: 0x4040, - 0xdd2: 0x4041, 0xdd3: 0x4040, 0xdd4: 0x403f, 0xdd5: 0x4042, 0xdd6: 0x4043, 0xdd7: 0x4044, - 0xdd8: 0x4040, 0xdd9: 0x4041, 0xdda: 0x4040, 0xddb: 0x4045, 0xddc: 0x4009, 0xddd: 0x4045, - 0xdde: 0x4046, 0xddf: 0x4045, 0xde0: 0x4047, 0xde1: 0x400b, 0xde2: 0x400a, 0xde3: 0x400c, - 0xde4: 0x4048, 0xde5: 0x4000, 0xde6: 0x4000, 0xde7: 0x4000, 0xde8: 0x4000, 0xde9: 0x4000, - 0xdea: 0x4000, 0xdeb: 0x4000, 0xdec: 0x4000, 0xded: 0x4000, 0xdee: 0x4000, 0xdef: 0x4000, - 0xdf0: 0x4000, 0xdf1: 0x4000, 0xdf2: 0x4000, 0xdf3: 0x4000, 0xdf4: 0x4000, 0xdf5: 0x4000, - 0xdf6: 0x4000, 0xdf7: 0x4000, 0xdf8: 0x4000, 0xdf9: 0x4000, 0xdfa: 0x4000, 0xdfb: 0x4000, - 0xdfc: 0x4000, 0xdfd: 0x4000, 0xdfe: 0x4000, 0xdff: 0x4000, - // Block 0x38, offset 0xe00 - 0xe00: 0x4000, 0xe01: 0x4000, 0xe02: 0x4000, 0xe03: 0x4000, 0xe04: 0x4000, 0xe05: 0x4000, - 0xe06: 0x4000, 0xe07: 0x4000, 0xe08: 0x4000, 0xe09: 0x4000, 0xe0a: 0x4000, 0xe0b: 0x4000, - 0xe0c: 0x4000, 0xe0d: 0x4000, 0xe0e: 0x4000, 0xe10: 0x4000, 0xe11: 0x4000, - 0xe12: 0x4000, 0xe13: 0x4000, 0xe14: 0x4000, 0xe15: 0x4000, 0xe16: 0x4000, 0xe17: 0x4000, - 0xe18: 0x4000, 0xe19: 0x4000, 0xe1a: 0x4000, 0xe1b: 0x4000, 0xe1c: 0x4000, 0xe1d: 0x4000, - 0xe1e: 0x4000, 0xe1f: 0x4000, 0xe20: 0x4000, 0xe21: 0x4000, 0xe22: 0x4000, 0xe23: 0x4000, - 0xe24: 0x4000, 0xe25: 0x4000, 0xe26: 0x4000, 0xe27: 0x4000, 0xe28: 0x4000, 0xe29: 0x4000, - 0xe2a: 0x4000, 0xe2b: 0x4000, 0xe2c: 0x4000, 0xe2d: 0x4000, 0xe2e: 0x4000, 0xe2f: 0x4000, - 0xe30: 0x4000, 0xe31: 0x4000, 0xe32: 0x4000, 0xe33: 0x4000, 0xe34: 0x4000, 0xe35: 0x4000, - 0xe36: 0x4000, 0xe37: 0x4000, 0xe38: 0x4000, 0xe39: 0x4000, 0xe3a: 0x4000, - // Block 0x39, offset 0xe40 - 0xe40: 0x4000, 0xe41: 0x4000, 0xe42: 0x4000, 0xe43: 0x4000, 0xe44: 0x4000, 0xe45: 0x4000, - 0xe46: 0x4000, 0xe47: 0x4000, 0xe48: 0x4000, 0xe49: 0x4000, 0xe4a: 0x4000, 0xe4b: 0x4000, - 0xe4c: 0x4000, 0xe4d: 0x4000, 0xe4e: 0x4000, 0xe4f: 0x4000, 0xe50: 0x4000, 0xe51: 0x4000, - 0xe52: 0x4000, 0xe53: 0x4000, 0xe54: 0x4000, 0xe55: 0x4000, 0xe56: 0x4000, 0xe57: 0x4000, - 0xe58: 0x4000, 0xe59: 0x4000, 0xe5a: 0x4000, 0xe5b: 0x4000, 0xe5c: 0x4000, 0xe5d: 0x4000, - 0xe5e: 0x4000, 0xe5f: 0x4000, 0xe60: 0x4000, 0xe61: 0x4000, 0xe62: 0x4000, 0xe63: 0x4000, - 0xe70: 0x4000, 0xe71: 0x4000, 0xe72: 0x4000, 0xe73: 0x4000, 0xe74: 0x4000, 0xe75: 0x4000, - 0xe76: 0x4000, 0xe77: 0x4000, 0xe78: 0x4000, 0xe79: 0x4000, 0xe7a: 0x4000, 0xe7b: 0x4000, - 0xe7c: 0x4000, 0xe7d: 0x4000, 0xe7e: 0x4000, 0xe7f: 0x4000, - // Block 0x3a, offset 0xe80 - 0xe80: 0x4000, 0xe81: 0x4000, 0xe82: 0x4000, 0xe83: 0x4000, 0xe84: 0x4000, 0xe85: 0x4000, - 0xe86: 0x4000, 0xe87: 0x4000, 0xe88: 0x4000, 0xe89: 0x4000, 0xe8a: 0x4000, 0xe8b: 0x4000, - 0xe8c: 0x4000, 0xe8d: 0x4000, 0xe8e: 0x4000, 0xe8f: 0x4000, 0xe90: 0x4000, 0xe91: 0x4000, - 0xe92: 0x4000, 0xe93: 0x4000, 0xe94: 0x4000, 0xe95: 0x4000, 0xe96: 0x4000, 0xe97: 0x4000, - 0xe98: 0x4000, 0xe99: 0x4000, 0xe9a: 0x4000, 0xe9b: 0x4000, 0xe9c: 0x4000, 0xe9d: 0x4000, - 0xe9e: 0x4000, 0xea0: 0x4000, 0xea1: 0x4000, 0xea2: 0x4000, 0xea3: 0x4000, - 0xea4: 0x4000, 0xea5: 0x4000, 0xea6: 0x4000, 0xea7: 0x4000, 0xea8: 0x4000, 0xea9: 0x4000, - 0xeaa: 0x4000, 0xeab: 0x4000, 0xeac: 0x4000, 0xead: 0x4000, 0xeae: 0x4000, 0xeaf: 0x4000, - 0xeb0: 0x4000, 0xeb1: 0x4000, 0xeb2: 0x4000, 0xeb3: 0x4000, 0xeb4: 0x4000, 0xeb5: 0x4000, - 0xeb6: 0x4000, 0xeb7: 0x4000, 0xeb8: 0x4000, 0xeb9: 0x4000, 0xeba: 0x4000, 0xebb: 0x4000, - 0xebc: 0x4000, 0xebd: 0x4000, 0xebe: 0x4000, 0xebf: 0x4000, - // Block 0x3b, offset 0xec0 - 0xec0: 0x4000, 0xec1: 0x4000, 0xec2: 0x4000, 0xec3: 0x4000, 0xec4: 0x4000, 0xec5: 0x4000, - 0xec6: 0x4000, 0xec7: 0x4000, 0xec8: 0x2000, 0xec9: 0x2000, 0xeca: 0x2000, 0xecb: 0x2000, - 0xecc: 0x2000, 0xecd: 0x2000, 0xece: 0x2000, 0xecf: 0x2000, 0xed0: 0x4000, 0xed1: 0x4000, - 0xed2: 0x4000, 0xed3: 0x4000, 0xed4: 0x4000, 0xed5: 0x4000, 0xed6: 0x4000, 0xed7: 0x4000, - 0xed8: 0x4000, 0xed9: 0x4000, 0xeda: 0x4000, 0xedb: 0x4000, 0xedc: 0x4000, 0xedd: 0x4000, - 0xede: 0x4000, 0xedf: 0x4000, 0xee0: 0x4000, 0xee1: 0x4000, 0xee2: 0x4000, 0xee3: 0x4000, - 0xee4: 0x4000, 0xee5: 0x4000, 0xee6: 0x4000, 0xee7: 0x4000, 0xee8: 0x4000, 0xee9: 0x4000, - 0xeea: 0x4000, 0xeeb: 0x4000, 0xeec: 0x4000, 0xeed: 0x4000, 0xeee: 0x4000, 0xeef: 0x4000, - 0xef0: 0x4000, 0xef1: 0x4000, 0xef2: 0x4000, 0xef3: 0x4000, 0xef4: 0x4000, 0xef5: 0x4000, - 0xef6: 0x4000, 0xef7: 0x4000, 0xef8: 0x4000, 0xef9: 0x4000, 0xefa: 0x4000, 0xefb: 0x4000, - 0xefc: 0x4000, 0xefd: 0x4000, 0xefe: 0x4000, 0xeff: 0x4000, - // Block 0x3c, offset 0xf00 - 0xf00: 0x4000, 0xf01: 0x4000, 0xf02: 0x4000, 0xf03: 0x4000, 0xf04: 0x4000, 0xf05: 0x4000, - 0xf06: 0x4000, 0xf07: 0x4000, 0xf08: 0x4000, 0xf09: 0x4000, 0xf0a: 0x4000, 0xf0b: 0x4000, - 0xf0c: 0x4000, 0xf0d: 0x4000, 0xf0e: 0x4000, 0xf0f: 0x4000, 0xf10: 0x4000, 0xf11: 0x4000, - 0xf12: 0x4000, 0xf13: 0x4000, 0xf14: 0x4000, 0xf15: 0x4000, 0xf16: 0x4000, 0xf17: 0x4000, - 0xf18: 0x4000, 0xf19: 0x4000, 0xf1a: 0x4000, 0xf1b: 0x4000, 0xf1c: 0x4000, 0xf1d: 0x4000, - 0xf1e: 0x4000, 0xf1f: 0x4000, 0xf20: 0x4000, 0xf21: 0x4000, 0xf22: 0x4000, 0xf23: 0x4000, - 0xf24: 0x4000, 0xf25: 0x4000, 0xf26: 0x4000, 0xf27: 0x4000, 0xf28: 0x4000, 0xf29: 0x4000, - 0xf2a: 0x4000, 0xf2b: 0x4000, 0xf2c: 0x4000, 0xf2d: 0x4000, 0xf2e: 0x4000, 0xf2f: 0x4000, - 0xf30: 0x4000, 0xf31: 0x4000, 0xf32: 0x4000, 0xf33: 0x4000, 0xf34: 0x4000, 0xf35: 0x4000, - 0xf36: 0x4000, 0xf37: 0x4000, 0xf38: 0x4000, 0xf39: 0x4000, 0xf3a: 0x4000, 0xf3b: 0x4000, - 0xf3c: 0x4000, 0xf3d: 0x4000, 0xf3e: 0x4000, - // Block 0x3d, offset 0xf40 - 0xf40: 0x4000, 0xf41: 0x4000, 0xf42: 0x4000, 0xf43: 0x4000, 0xf44: 0x4000, 0xf45: 0x4000, - 0xf46: 0x4000, 0xf47: 0x4000, 0xf48: 0x4000, 0xf49: 0x4000, 0xf4a: 0x4000, 0xf4b: 0x4000, - 0xf4c: 0x4000, 0xf50: 0x4000, 0xf51: 0x4000, - 0xf52: 0x4000, 0xf53: 0x4000, 0xf54: 0x4000, 0xf55: 0x4000, 0xf56: 0x4000, 0xf57: 0x4000, - 0xf58: 0x4000, 0xf59: 0x4000, 0xf5a: 0x4000, 0xf5b: 0x4000, 0xf5c: 0x4000, 0xf5d: 0x4000, - 0xf5e: 0x4000, 0xf5f: 0x4000, 0xf60: 0x4000, 0xf61: 0x4000, 0xf62: 0x4000, 0xf63: 0x4000, - 0xf64: 0x4000, 0xf65: 0x4000, 0xf66: 0x4000, 0xf67: 0x4000, 0xf68: 0x4000, 0xf69: 0x4000, - 0xf6a: 0x4000, 0xf6b: 0x4000, 0xf6c: 0x4000, 0xf6d: 0x4000, 0xf6e: 0x4000, 0xf6f: 0x4000, - 0xf70: 0x4000, 0xf71: 0x4000, 0xf72: 0x4000, 0xf73: 0x4000, 0xf74: 0x4000, 0xf75: 0x4000, - 0xf76: 0x4000, 0xf77: 0x4000, 0xf78: 0x4000, 0xf79: 0x4000, 0xf7a: 0x4000, 0xf7b: 0x4000, - 0xf7c: 0x4000, 0xf7d: 0x4000, 0xf7e: 0x4000, 0xf7f: 0x4000, - // Block 0x3e, offset 0xf80 - 0xf80: 0x4000, 0xf81: 0x4000, 0xf82: 0x4000, 0xf83: 0x4000, 0xf84: 0x4000, 0xf85: 0x4000, - 0xf86: 0x4000, - // Block 0x3f, offset 0xfc0 - 0xfe0: 0x4000, 0xfe1: 0x4000, 0xfe2: 0x4000, 0xfe3: 0x4000, - 0xfe4: 0x4000, 0xfe5: 0x4000, 0xfe6: 0x4000, 0xfe7: 0x4000, 0xfe8: 0x4000, 0xfe9: 0x4000, - 0xfea: 0x4000, 0xfeb: 0x4000, 0xfec: 0x4000, 0xfed: 0x4000, 0xfee: 0x4000, 0xfef: 0x4000, - 0xff0: 0x4000, 0xff1: 0x4000, 0xff2: 0x4000, 0xff3: 0x4000, 0xff4: 0x4000, 0xff5: 0x4000, - 0xff6: 0x4000, 0xff7: 0x4000, 0xff8: 0x4000, 0xff9: 0x4000, 0xffa: 0x4000, 0xffb: 0x4000, - 0xffc: 0x4000, - // Block 0x40, offset 0x1000 - 0x1000: 0x4000, 0x1001: 0x4000, 0x1002: 0x4000, 0x1003: 0x4000, 0x1004: 0x4000, 0x1005: 0x4000, - 0x1006: 0x4000, 0x1007: 0x4000, 0x1008: 0x4000, 0x1009: 0x4000, 0x100a: 0x4000, 0x100b: 0x4000, - 0x100c: 0x4000, 0x100d: 0x4000, 0x100e: 0x4000, 0x100f: 0x4000, 0x1010: 0x4000, 0x1011: 0x4000, - 0x1012: 0x4000, 0x1013: 0x4000, 0x1014: 0x4000, 0x1015: 0x4000, 0x1016: 0x4000, 0x1017: 0x4000, - 0x1018: 0x4000, 0x1019: 0x4000, 0x101a: 0x4000, 0x101b: 0x4000, 0x101c: 0x4000, 0x101d: 0x4000, - 0x101e: 0x4000, 0x101f: 0x4000, 0x1020: 0x4000, 0x1021: 0x4000, 0x1022: 0x4000, 0x1023: 0x4000, - // Block 0x41, offset 0x1040 - 0x1040: 0x2000, 0x1041: 0x2000, 0x1042: 0x2000, 0x1043: 0x2000, 0x1044: 0x2000, 0x1045: 0x2000, - 0x1046: 0x2000, 0x1047: 0x2000, 0x1048: 0x2000, 0x1049: 0x2000, 0x104a: 0x2000, 0x104b: 0x2000, - 0x104c: 0x2000, 0x104d: 0x2000, 0x104e: 0x2000, 0x104f: 0x2000, 0x1050: 0x4000, 0x1051: 0x4000, - 0x1052: 0x4000, 0x1053: 0x4000, 0x1054: 0x4000, 0x1055: 0x4000, 0x1056: 0x4000, 0x1057: 0x4000, - 0x1058: 0x4000, 0x1059: 0x4000, - 0x1070: 0x4000, 0x1071: 0x4000, 0x1072: 0x4000, 0x1073: 0x4000, 0x1074: 0x4000, 0x1075: 0x4000, - 0x1076: 0x4000, 0x1077: 0x4000, 0x1078: 0x4000, 0x1079: 0x4000, 0x107a: 0x4000, 0x107b: 0x4000, - 0x107c: 0x4000, 0x107d: 0x4000, 0x107e: 0x4000, 0x107f: 0x4000, - // Block 0x42, offset 0x1080 - 0x1080: 0x4000, 0x1081: 0x4000, 0x1082: 0x4000, 0x1083: 0x4000, 0x1084: 0x4000, 0x1085: 0x4000, - 0x1086: 0x4000, 0x1087: 0x4000, 0x1088: 0x4000, 0x1089: 0x4000, 0x108a: 0x4000, 0x108b: 0x4000, - 0x108c: 0x4000, 0x108d: 0x4000, 0x108e: 0x4000, 0x108f: 0x4000, 0x1090: 0x4000, 0x1091: 0x4000, - 0x1092: 0x4000, 0x1094: 0x4000, 0x1095: 0x4000, 0x1096: 0x4000, 0x1097: 0x4000, - 0x1098: 0x4000, 0x1099: 0x4000, 0x109a: 0x4000, 0x109b: 0x4000, 0x109c: 0x4000, 0x109d: 0x4000, - 0x109e: 0x4000, 0x109f: 0x4000, 0x10a0: 0x4000, 0x10a1: 0x4000, 0x10a2: 0x4000, 0x10a3: 0x4000, - 0x10a4: 0x4000, 0x10a5: 0x4000, 0x10a6: 0x4000, 0x10a8: 0x4000, 0x10a9: 0x4000, - 0x10aa: 0x4000, 0x10ab: 0x4000, - // Block 0x43, offset 0x10c0 - 0x10c1: 0x9012, 0x10c2: 0x9012, 0x10c3: 0x9012, 0x10c4: 0x9012, 0x10c5: 0x9012, - 0x10c6: 0x9012, 0x10c7: 0x9012, 0x10c8: 0x9012, 0x10c9: 0x9012, 0x10ca: 0x9012, 0x10cb: 0x9012, - 0x10cc: 0x9012, 0x10cd: 0x9012, 0x10ce: 0x9012, 0x10cf: 0x9012, 0x10d0: 0x9012, 0x10d1: 0x9012, - 0x10d2: 0x9012, 0x10d3: 0x9012, 0x10d4: 0x9012, 0x10d5: 0x9012, 0x10d6: 0x9012, 0x10d7: 0x9012, - 0x10d8: 0x9012, 0x10d9: 0x9012, 0x10da: 0x9012, 0x10db: 0x9012, 0x10dc: 0x9012, 0x10dd: 0x9012, - 0x10de: 0x9012, 0x10df: 0x9012, 0x10e0: 0x9049, 0x10e1: 0x9049, 0x10e2: 0x9049, 0x10e3: 0x9049, - 0x10e4: 0x9049, 0x10e5: 0x9049, 0x10e6: 0x9049, 0x10e7: 0x9049, 0x10e8: 0x9049, 0x10e9: 0x9049, - 0x10ea: 0x9049, 0x10eb: 0x9049, 0x10ec: 0x9049, 0x10ed: 0x9049, 0x10ee: 0x9049, 0x10ef: 0x9049, - 0x10f0: 0x9049, 0x10f1: 0x9049, 0x10f2: 0x9049, 0x10f3: 0x9049, 0x10f4: 0x9049, 0x10f5: 0x9049, - 0x10f6: 0x9049, 0x10f7: 0x9049, 0x10f8: 0x9049, 0x10f9: 0x9049, 0x10fa: 0x9049, 0x10fb: 0x9049, - 0x10fc: 0x9049, 0x10fd: 0x9049, 0x10fe: 0x9049, 0x10ff: 0x9049, - // Block 0x44, offset 0x1100 - 0x1100: 0x9049, 0x1101: 0x9049, 0x1102: 0x9049, 0x1103: 0x9049, 0x1104: 0x9049, 0x1105: 0x9049, - 0x1106: 0x9049, 0x1107: 0x9049, 0x1108: 0x9049, 0x1109: 0x9049, 0x110a: 0x9049, 0x110b: 0x9049, - 0x110c: 0x9049, 0x110d: 0x9049, 0x110e: 0x9049, 0x110f: 0x9049, 0x1110: 0x9049, 0x1111: 0x9049, - 0x1112: 0x9049, 0x1113: 0x9049, 0x1114: 0x9049, 0x1115: 0x9049, 0x1116: 0x9049, 0x1117: 0x9049, - 0x1118: 0x9049, 0x1119: 0x9049, 0x111a: 0x9049, 0x111b: 0x9049, 0x111c: 0x9049, 0x111d: 0x9049, - 0x111e: 0x9049, 0x111f: 0x904a, 0x1120: 0x904b, 0x1121: 0xb04c, 0x1122: 0xb04d, 0x1123: 0xb04d, - 0x1124: 0xb04e, 0x1125: 0xb04f, 0x1126: 0xb050, 0x1127: 0xb051, 0x1128: 0xb052, 0x1129: 0xb053, - 0x112a: 0xb054, 0x112b: 0xb055, 0x112c: 0xb056, 0x112d: 0xb057, 0x112e: 0xb058, 0x112f: 0xb059, - 0x1130: 0xb05a, 0x1131: 0xb05b, 0x1132: 0xb05c, 0x1133: 0xb05d, 0x1134: 0xb05e, 0x1135: 0xb05f, - 0x1136: 0xb060, 0x1137: 0xb061, 0x1138: 0xb062, 0x1139: 0xb063, 0x113a: 0xb064, 0x113b: 0xb065, - 0x113c: 0xb052, 0x113d: 0xb066, 0x113e: 0xb067, 0x113f: 0xb055, - // Block 0x45, offset 0x1140 - 0x1140: 0xb068, 0x1141: 0xb069, 0x1142: 0xb06a, 0x1143: 0xb06b, 0x1144: 0xb05a, 0x1145: 0xb056, - 0x1146: 0xb06c, 0x1147: 0xb06d, 0x1148: 0xb06b, 0x1149: 0xb06e, 0x114a: 0xb06b, 0x114b: 0xb06f, - 0x114c: 0xb06f, 0x114d: 0xb070, 0x114e: 0xb070, 0x114f: 0xb071, 0x1150: 0xb056, 0x1151: 0xb072, - 0x1152: 0xb073, 0x1153: 0xb072, 0x1154: 0xb074, 0x1155: 0xb073, 0x1156: 0xb075, 0x1157: 0xb075, - 0x1158: 0xb076, 0x1159: 0xb076, 0x115a: 0xb077, 0x115b: 0xb077, 0x115c: 0xb073, 0x115d: 0xb078, - 0x115e: 0xb079, 0x115f: 0xb067, 0x1160: 0xb07a, 0x1161: 0xb07b, 0x1162: 0xb07b, 0x1163: 0xb07b, - 0x1164: 0xb07b, 0x1165: 0xb07b, 0x1166: 0xb07b, 0x1167: 0xb07b, 0x1168: 0xb07b, 0x1169: 0xb07b, - 0x116a: 0xb07b, 0x116b: 0xb07b, 0x116c: 0xb07b, 0x116d: 0xb07b, 0x116e: 0xb07b, 0x116f: 0xb07b, - 0x1170: 0xb07c, 0x1171: 0xb07c, 0x1172: 0xb07c, 0x1173: 0xb07c, 0x1174: 0xb07c, 0x1175: 0xb07c, - 0x1176: 0xb07c, 0x1177: 0xb07c, 0x1178: 0xb07c, 0x1179: 0xb07c, 0x117a: 0xb07c, 0x117b: 0xb07c, - 0x117c: 0xb07c, 0x117d: 0xb07c, 0x117e: 0xb07c, - // Block 0x46, offset 0x1180 - 0x1182: 0xb07d, 0x1183: 0xb07e, 0x1184: 0xb07f, 0x1185: 0xb080, - 0x1186: 0xb07f, 0x1187: 0xb07e, 0x118a: 0xb081, 0x118b: 0xb082, - 0x118c: 0xb083, 0x118d: 0xb07f, 0x118e: 0xb080, 0x118f: 0xb07f, - 0x1192: 0xb084, 0x1193: 0xb085, 0x1194: 0xb084, 0x1195: 0xb086, 0x1196: 0xb084, 0x1197: 0xb087, - 0x119a: 0xb088, 0x119b: 0xb089, 0x119c: 0xb08a, - 0x11a0: 0x908b, 0x11a1: 0x908b, 0x11a2: 0x908c, 0x11a3: 0x908d, - 0x11a4: 0x908b, 0x11a5: 0x908e, 0x11a6: 0x908f, 0x11a8: 0xb090, 0x11a9: 0xb091, - 0x11aa: 0xb092, 0x11ab: 0xb091, 0x11ac: 0xb093, 0x11ad: 0xb094, 0x11ae: 0xb095, - 0x11bd: 0x2000, - // Block 0x47, offset 0x11c0 - 0x11e0: 0x4000, - // Block 0x48, offset 0x1200 - 0x1200: 0x4000, 0x1201: 0x4000, 0x1202: 0x4000, 0x1203: 0x4000, 0x1204: 0x4000, 0x1205: 0x4000, - 0x1206: 0x4000, 0x1207: 0x4000, 0x1208: 0x4000, 0x1209: 0x4000, 0x120a: 0x4000, 0x120b: 0x4000, - 0x120c: 0x4000, 0x120d: 0x4000, 0x120e: 0x4000, 0x120f: 0x4000, 0x1210: 0x4000, 0x1211: 0x4000, - 0x1212: 0x4000, 0x1213: 0x4000, 0x1214: 0x4000, 0x1215: 0x4000, 0x1216: 0x4000, 0x1217: 0x4000, - 0x1218: 0x4000, 0x1219: 0x4000, 0x121a: 0x4000, 0x121b: 0x4000, 0x121c: 0x4000, 0x121d: 0x4000, - 0x121e: 0x4000, 0x121f: 0x4000, 0x1220: 0x4000, 0x1221: 0x4000, 0x1222: 0x4000, 0x1223: 0x4000, - 0x1224: 0x4000, 0x1225: 0x4000, 0x1226: 0x4000, 0x1227: 0x4000, 0x1228: 0x4000, 0x1229: 0x4000, - 0x122a: 0x4000, 0x122b: 0x4000, 0x122c: 0x4000, - // Block 0x49, offset 0x1240 - 0x1240: 0x4000, 0x1241: 0x4000, 0x1242: 0x4000, 0x1243: 0x4000, 0x1244: 0x4000, 0x1245: 0x4000, - 0x1246: 0x4000, 0x1247: 0x4000, 0x1248: 0x4000, 0x1249: 0x4000, 0x124a: 0x4000, 0x124b: 0x4000, - 0x124c: 0x4000, 0x124d: 0x4000, 0x124e: 0x4000, 0x124f: 0x4000, 0x1250: 0x4000, 0x1251: 0x4000, - 0x1252: 0x4000, 0x1253: 0x4000, 0x1254: 0x4000, 0x1255: 0x4000, 0x1256: 0x4000, 0x1257: 0x4000, - 0x1258: 0x4000, 0x1259: 0x4000, 0x125a: 0x4000, 0x125b: 0x4000, 0x125c: 0x4000, 0x125d: 0x4000, - 0x125e: 0x4000, 0x125f: 0x4000, 0x1260: 0x4000, 0x1261: 0x4000, 0x1262: 0x4000, 0x1263: 0x4000, - 0x1264: 0x4000, 0x1265: 0x4000, 0x1266: 0x4000, 0x1267: 0x4000, 0x1268: 0x4000, 0x1269: 0x4000, - 0x126a: 0x4000, 0x126b: 0x4000, 0x126c: 0x4000, 0x126d: 0x4000, 0x126e: 0x4000, 0x126f: 0x4000, - 0x1270: 0x4000, 0x1271: 0x4000, 0x1272: 0x4000, - // Block 0x4a, offset 0x1280 - 0x1280: 0x4000, 0x1281: 0x4000, - // Block 0x4b, offset 0x12c0 - 0x12c4: 0x4000, - // Block 0x4c, offset 0x1300 - 0x130f: 0x4000, - // Block 0x4d, offset 0x1340 - 0x1340: 0x2000, 0x1341: 0x2000, 0x1342: 0x2000, 0x1343: 0x2000, 0x1344: 0x2000, 0x1345: 0x2000, - 0x1346: 0x2000, 0x1347: 0x2000, 0x1348: 0x2000, 0x1349: 0x2000, 0x134a: 0x2000, - 0x1350: 0x2000, 0x1351: 0x2000, - 0x1352: 0x2000, 0x1353: 0x2000, 0x1354: 0x2000, 0x1355: 0x2000, 0x1356: 0x2000, 0x1357: 0x2000, - 0x1358: 0x2000, 0x1359: 0x2000, 0x135a: 0x2000, 0x135b: 0x2000, 0x135c: 0x2000, 0x135d: 0x2000, - 0x135e: 0x2000, 0x135f: 0x2000, 0x1360: 0x2000, 0x1361: 0x2000, 0x1362: 0x2000, 0x1363: 0x2000, - 0x1364: 0x2000, 0x1365: 0x2000, 0x1366: 0x2000, 0x1367: 0x2000, 0x1368: 0x2000, 0x1369: 0x2000, - 0x136a: 0x2000, 0x136b: 0x2000, 0x136c: 0x2000, 0x136d: 0x2000, - 0x1370: 0x2000, 0x1371: 0x2000, 0x1372: 0x2000, 0x1373: 0x2000, 0x1374: 0x2000, 0x1375: 0x2000, - 0x1376: 0x2000, 0x1377: 0x2000, 0x1378: 0x2000, 0x1379: 0x2000, 0x137a: 0x2000, 0x137b: 0x2000, - 0x137c: 0x2000, 0x137d: 0x2000, 0x137e: 0x2000, 0x137f: 0x2000, - // Block 0x4e, offset 0x1380 - 0x1380: 0x2000, 0x1381: 0x2000, 0x1382: 0x2000, 0x1383: 0x2000, 0x1384: 0x2000, 0x1385: 0x2000, - 0x1386: 0x2000, 0x1387: 0x2000, 0x1388: 0x2000, 0x1389: 0x2000, 0x138a: 0x2000, 0x138b: 0x2000, - 0x138c: 0x2000, 0x138d: 0x2000, 0x138e: 0x2000, 0x138f: 0x2000, 0x1390: 0x2000, 0x1391: 0x2000, - 0x1392: 0x2000, 0x1393: 0x2000, 0x1394: 0x2000, 0x1395: 0x2000, 0x1396: 0x2000, 0x1397: 0x2000, - 0x1398: 0x2000, 0x1399: 0x2000, 0x139a: 0x2000, 0x139b: 0x2000, 0x139c: 0x2000, 0x139d: 0x2000, - 0x139e: 0x2000, 0x139f: 0x2000, 0x13a0: 0x2000, 0x13a1: 0x2000, 0x13a2: 0x2000, 0x13a3: 0x2000, - 0x13a4: 0x2000, 0x13a5: 0x2000, 0x13a6: 0x2000, 0x13a7: 0x2000, 0x13a8: 0x2000, 0x13a9: 0x2000, - 0x13b0: 0x2000, 0x13b1: 0x2000, 0x13b2: 0x2000, 0x13b3: 0x2000, 0x13b4: 0x2000, 0x13b5: 0x2000, - 0x13b6: 0x2000, 0x13b7: 0x2000, 0x13b8: 0x2000, 0x13b9: 0x2000, 0x13ba: 0x2000, 0x13bb: 0x2000, - 0x13bc: 0x2000, 0x13bd: 0x2000, 0x13be: 0x2000, 0x13bf: 0x2000, - // Block 0x4f, offset 0x13c0 - 0x13c0: 0x2000, 0x13c1: 0x2000, 0x13c2: 0x2000, 0x13c3: 0x2000, 0x13c4: 0x2000, 0x13c5: 0x2000, - 0x13c6: 0x2000, 0x13c7: 0x2000, 0x13c8: 0x2000, 0x13c9: 0x2000, 0x13ca: 0x2000, 0x13cb: 0x2000, - 0x13cc: 0x2000, 0x13cd: 0x2000, 0x13ce: 0x4000, 0x13cf: 0x2000, 0x13d0: 0x2000, 0x13d1: 0x4000, - 0x13d2: 0x4000, 0x13d3: 0x4000, 0x13d4: 0x4000, 0x13d5: 0x4000, 0x13d6: 0x4000, 0x13d7: 0x4000, - 0x13d8: 0x4000, 0x13d9: 0x4000, 0x13da: 0x4000, 0x13db: 0x2000, 0x13dc: 0x2000, 0x13dd: 0x2000, - 0x13de: 0x2000, 0x13df: 0x2000, 0x13e0: 0x2000, 0x13e1: 0x2000, 0x13e2: 0x2000, 0x13e3: 0x2000, - 0x13e4: 0x2000, 0x13e5: 0x2000, 0x13e6: 0x2000, 0x13e7: 0x2000, 0x13e8: 0x2000, 0x13e9: 0x2000, - 0x13ea: 0x2000, 0x13eb: 0x2000, 0x13ec: 0x2000, - // Block 0x50, offset 0x1400 - 0x1400: 0x4000, 0x1401: 0x4000, 0x1402: 0x4000, - 0x1410: 0x4000, 0x1411: 0x4000, - 0x1412: 0x4000, 0x1413: 0x4000, 0x1414: 0x4000, 0x1415: 0x4000, 0x1416: 0x4000, 0x1417: 0x4000, - 0x1418: 0x4000, 0x1419: 0x4000, 0x141a: 0x4000, 0x141b: 0x4000, 0x141c: 0x4000, 0x141d: 0x4000, - 0x141e: 0x4000, 0x141f: 0x4000, 0x1420: 0x4000, 0x1421: 0x4000, 0x1422: 0x4000, 0x1423: 0x4000, - 0x1424: 0x4000, 0x1425: 0x4000, 0x1426: 0x4000, 0x1427: 0x4000, 0x1428: 0x4000, 0x1429: 0x4000, - 0x142a: 0x4000, 0x142b: 0x4000, 0x142c: 0x4000, 0x142d: 0x4000, 0x142e: 0x4000, 0x142f: 0x4000, - 0x1430: 0x4000, 0x1431: 0x4000, 0x1432: 0x4000, 0x1433: 0x4000, 0x1434: 0x4000, 0x1435: 0x4000, - 0x1436: 0x4000, 0x1437: 0x4000, 0x1438: 0x4000, 0x1439: 0x4000, 0x143a: 0x4000, 0x143b: 0x4000, - // Block 0x51, offset 0x1440 - 0x1440: 0x4000, 0x1441: 0x4000, 0x1442: 0x4000, 0x1443: 0x4000, 0x1444: 0x4000, 0x1445: 0x4000, - 0x1446: 0x4000, 0x1447: 0x4000, 0x1448: 0x4000, - 0x1450: 0x4000, 0x1451: 0x4000, - // Block 0x52, offset 0x1480 - 0x1480: 0x4000, 0x1481: 0x4000, 0x1482: 0x4000, 0x1483: 0x4000, 0x1484: 0x4000, 0x1485: 0x4000, - 0x1486: 0x4000, 0x1487: 0x4000, 0x1488: 0x4000, 0x1489: 0x4000, 0x148a: 0x4000, 0x148b: 0x4000, - 0x148c: 0x4000, 0x148d: 0x4000, 0x148e: 0x4000, 0x148f: 0x4000, 0x1490: 0x4000, 0x1491: 0x4000, - 0x1492: 0x4000, 0x1493: 0x4000, 0x1494: 0x4000, 0x1495: 0x4000, 0x1496: 0x4000, 0x1497: 0x4000, - 0x1498: 0x4000, 0x1499: 0x4000, 0x149a: 0x4000, 0x149b: 0x4000, 0x149c: 0x4000, 0x149d: 0x4000, - 0x149e: 0x4000, 0x149f: 0x4000, 0x14a0: 0x4000, - 0x14ad: 0x4000, 0x14ae: 0x4000, 0x14af: 0x4000, - 0x14b0: 0x4000, 0x14b1: 0x4000, 0x14b2: 0x4000, 0x14b3: 0x4000, 0x14b4: 0x4000, 0x14b5: 0x4000, - 0x14b7: 0x4000, 0x14b8: 0x4000, 0x14b9: 0x4000, 0x14ba: 0x4000, 0x14bb: 0x4000, - 0x14bc: 0x4000, 0x14bd: 0x4000, 0x14be: 0x4000, 0x14bf: 0x4000, - // Block 0x53, offset 0x14c0 - 0x14c0: 0x4000, 0x14c1: 0x4000, 0x14c2: 0x4000, 0x14c3: 0x4000, 0x14c4: 0x4000, 0x14c5: 0x4000, - 0x14c6: 0x4000, 0x14c7: 0x4000, 0x14c8: 0x4000, 0x14c9: 0x4000, 0x14ca: 0x4000, 0x14cb: 0x4000, - 0x14cc: 0x4000, 0x14cd: 0x4000, 0x14ce: 0x4000, 0x14cf: 0x4000, 0x14d0: 0x4000, 0x14d1: 0x4000, - 0x14d2: 0x4000, 0x14d3: 0x4000, 0x14d4: 0x4000, 0x14d5: 0x4000, 0x14d6: 0x4000, 0x14d7: 0x4000, - 0x14d8: 0x4000, 0x14d9: 0x4000, 0x14da: 0x4000, 0x14db: 0x4000, 0x14dc: 0x4000, 0x14dd: 0x4000, - 0x14de: 0x4000, 0x14df: 0x4000, 0x14e0: 0x4000, 0x14e1: 0x4000, 0x14e2: 0x4000, 0x14e3: 0x4000, - 0x14e4: 0x4000, 0x14e5: 0x4000, 0x14e6: 0x4000, 0x14e7: 0x4000, 0x14e8: 0x4000, 0x14e9: 0x4000, - 0x14ea: 0x4000, 0x14eb: 0x4000, 0x14ec: 0x4000, 0x14ed: 0x4000, 0x14ee: 0x4000, 0x14ef: 0x4000, - 0x14f0: 0x4000, 0x14f1: 0x4000, 0x14f2: 0x4000, 0x14f3: 0x4000, 0x14f4: 0x4000, 0x14f5: 0x4000, - 0x14f6: 0x4000, 0x14f7: 0x4000, 0x14f8: 0x4000, 0x14f9: 0x4000, 0x14fa: 0x4000, 0x14fb: 0x4000, - 0x14fc: 0x4000, 0x14fe: 0x4000, 0x14ff: 0x4000, - // Block 0x54, offset 0x1500 - 0x1500: 0x4000, 0x1501: 0x4000, 0x1502: 0x4000, 0x1503: 0x4000, 0x1504: 0x4000, 0x1505: 0x4000, - 0x1506: 0x4000, 0x1507: 0x4000, 0x1508: 0x4000, 0x1509: 0x4000, 0x150a: 0x4000, 0x150b: 0x4000, - 0x150c: 0x4000, 0x150d: 0x4000, 0x150e: 0x4000, 0x150f: 0x4000, 0x1510: 0x4000, 0x1511: 0x4000, - 0x1512: 0x4000, 0x1513: 0x4000, - 0x1520: 0x4000, 0x1521: 0x4000, 0x1522: 0x4000, 0x1523: 0x4000, - 0x1524: 0x4000, 0x1525: 0x4000, 0x1526: 0x4000, 0x1527: 0x4000, 0x1528: 0x4000, 0x1529: 0x4000, - 0x152a: 0x4000, 0x152b: 0x4000, 0x152c: 0x4000, 0x152d: 0x4000, 0x152e: 0x4000, 0x152f: 0x4000, - 0x1530: 0x4000, 0x1531: 0x4000, 0x1532: 0x4000, 0x1533: 0x4000, 0x1534: 0x4000, 0x1535: 0x4000, - 0x1536: 0x4000, 0x1537: 0x4000, 0x1538: 0x4000, 0x1539: 0x4000, 0x153a: 0x4000, 0x153b: 0x4000, - 0x153c: 0x4000, 0x153d: 0x4000, 0x153e: 0x4000, 0x153f: 0x4000, - // Block 0x55, offset 0x1540 - 0x1540: 0x4000, 0x1541: 0x4000, 0x1542: 0x4000, 0x1543: 0x4000, 0x1544: 0x4000, 0x1545: 0x4000, - 0x1546: 0x4000, 0x1547: 0x4000, 0x1548: 0x4000, 0x1549: 0x4000, 0x154a: 0x4000, - 0x154f: 0x4000, 0x1550: 0x4000, 0x1551: 0x4000, - 0x1552: 0x4000, 0x1553: 0x4000, - 0x1560: 0x4000, 0x1561: 0x4000, 0x1562: 0x4000, 0x1563: 0x4000, - 0x1564: 0x4000, 0x1565: 0x4000, 0x1566: 0x4000, 0x1567: 0x4000, 0x1568: 0x4000, 0x1569: 0x4000, - 0x156a: 0x4000, 0x156b: 0x4000, 0x156c: 0x4000, 0x156d: 0x4000, 0x156e: 0x4000, 0x156f: 0x4000, - 0x1570: 0x4000, 0x1574: 0x4000, - 0x1578: 0x4000, 0x1579: 0x4000, 0x157a: 0x4000, 0x157b: 0x4000, - 0x157c: 0x4000, 0x157d: 0x4000, 0x157e: 0x4000, 0x157f: 0x4000, - // Block 0x56, offset 0x1580 - 0x1580: 0x4000, 0x1582: 0x4000, 0x1583: 0x4000, 0x1584: 0x4000, 0x1585: 0x4000, - 0x1586: 0x4000, 0x1587: 0x4000, 0x1588: 0x4000, 0x1589: 0x4000, 0x158a: 0x4000, 0x158b: 0x4000, - 0x158c: 0x4000, 0x158d: 0x4000, 0x158e: 0x4000, 0x158f: 0x4000, 0x1590: 0x4000, 0x1591: 0x4000, - 0x1592: 0x4000, 0x1593: 0x4000, 0x1594: 0x4000, 0x1595: 0x4000, 0x1596: 0x4000, 0x1597: 0x4000, - 0x1598: 0x4000, 0x1599: 0x4000, 0x159a: 0x4000, 0x159b: 0x4000, 0x159c: 0x4000, 0x159d: 0x4000, - 0x159e: 0x4000, 0x159f: 0x4000, 0x15a0: 0x4000, 0x15a1: 0x4000, 0x15a2: 0x4000, 0x15a3: 0x4000, - 0x15a4: 0x4000, 0x15a5: 0x4000, 0x15a6: 0x4000, 0x15a7: 0x4000, 0x15a8: 0x4000, 0x15a9: 0x4000, - 0x15aa: 0x4000, 0x15ab: 0x4000, 0x15ac: 0x4000, 0x15ad: 0x4000, 0x15ae: 0x4000, 0x15af: 0x4000, - 0x15b0: 0x4000, 0x15b1: 0x4000, 0x15b2: 0x4000, 0x15b3: 0x4000, 0x15b4: 0x4000, 0x15b5: 0x4000, - 0x15b6: 0x4000, 0x15b7: 0x4000, 0x15b8: 0x4000, 0x15b9: 0x4000, 0x15ba: 0x4000, 0x15bb: 0x4000, - 0x15bc: 0x4000, 0x15bd: 0x4000, 0x15be: 0x4000, 0x15bf: 0x4000, - // Block 0x57, offset 0x15c0 - 0x15c0: 0x4000, 0x15c1: 0x4000, 0x15c2: 0x4000, 0x15c3: 0x4000, 0x15c4: 0x4000, 0x15c5: 0x4000, - 0x15c6: 0x4000, 0x15c7: 0x4000, 0x15c8: 0x4000, 0x15c9: 0x4000, 0x15ca: 0x4000, 0x15cb: 0x4000, - 0x15cc: 0x4000, 0x15cd: 0x4000, 0x15ce: 0x4000, 0x15cf: 0x4000, 0x15d0: 0x4000, 0x15d1: 0x4000, - 0x15d2: 0x4000, 0x15d3: 0x4000, 0x15d4: 0x4000, 0x15d5: 0x4000, 0x15d6: 0x4000, 0x15d7: 0x4000, - 0x15d8: 0x4000, 0x15d9: 0x4000, 0x15da: 0x4000, 0x15db: 0x4000, 0x15dc: 0x4000, 0x15dd: 0x4000, - 0x15de: 0x4000, 0x15df: 0x4000, 0x15e0: 0x4000, 0x15e1: 0x4000, 0x15e2: 0x4000, 0x15e3: 0x4000, - 0x15e4: 0x4000, 0x15e5: 0x4000, 0x15e6: 0x4000, 0x15e7: 0x4000, 0x15e8: 0x4000, 0x15e9: 0x4000, - 0x15ea: 0x4000, 0x15eb: 0x4000, 0x15ec: 0x4000, 0x15ed: 0x4000, 0x15ee: 0x4000, 0x15ef: 0x4000, - 0x15f0: 0x4000, 0x15f1: 0x4000, 0x15f2: 0x4000, 0x15f3: 0x4000, 0x15f4: 0x4000, 0x15f5: 0x4000, - 0x15f6: 0x4000, 0x15f7: 0x4000, 0x15f8: 0x4000, 0x15f9: 0x4000, 0x15fa: 0x4000, 0x15fb: 0x4000, - 0x15fc: 0x4000, 0x15ff: 0x4000, - // Block 0x58, offset 0x1600 - 0x1600: 0x4000, 0x1601: 0x4000, 0x1602: 0x4000, 0x1603: 0x4000, 0x1604: 0x4000, 0x1605: 0x4000, - 0x1606: 0x4000, 0x1607: 0x4000, 0x1608: 0x4000, 0x1609: 0x4000, 0x160a: 0x4000, 0x160b: 0x4000, - 0x160c: 0x4000, 0x160d: 0x4000, 0x160e: 0x4000, 0x160f: 0x4000, 0x1610: 0x4000, 0x1611: 0x4000, - 0x1612: 0x4000, 0x1613: 0x4000, 0x1614: 0x4000, 0x1615: 0x4000, 0x1616: 0x4000, 0x1617: 0x4000, - 0x1618: 0x4000, 0x1619: 0x4000, 0x161a: 0x4000, 0x161b: 0x4000, 0x161c: 0x4000, 0x161d: 0x4000, - 0x161e: 0x4000, 0x161f: 0x4000, 0x1620: 0x4000, 0x1621: 0x4000, 0x1622: 0x4000, 0x1623: 0x4000, - 0x1624: 0x4000, 0x1625: 0x4000, 0x1626: 0x4000, 0x1627: 0x4000, 0x1628: 0x4000, 0x1629: 0x4000, - 0x162a: 0x4000, 0x162b: 0x4000, 0x162c: 0x4000, 0x162d: 0x4000, 0x162e: 0x4000, 0x162f: 0x4000, - 0x1630: 0x4000, 0x1631: 0x4000, 0x1632: 0x4000, 0x1633: 0x4000, 0x1634: 0x4000, 0x1635: 0x4000, - 0x1636: 0x4000, 0x1637: 0x4000, 0x1638: 0x4000, 0x1639: 0x4000, 0x163a: 0x4000, 0x163b: 0x4000, - 0x163c: 0x4000, 0x163d: 0x4000, - // Block 0x59, offset 0x1640 - 0x164b: 0x4000, - 0x164c: 0x4000, 0x164d: 0x4000, 0x164e: 0x4000, 0x1650: 0x4000, 0x1651: 0x4000, - 0x1652: 0x4000, 0x1653: 0x4000, 0x1654: 0x4000, 0x1655: 0x4000, 0x1656: 0x4000, 0x1657: 0x4000, - 0x1658: 0x4000, 0x1659: 0x4000, 0x165a: 0x4000, 0x165b: 0x4000, 0x165c: 0x4000, 0x165d: 0x4000, - 0x165e: 0x4000, 0x165f: 0x4000, 0x1660: 0x4000, 0x1661: 0x4000, 0x1662: 0x4000, 0x1663: 0x4000, - 0x1664: 0x4000, 0x1665: 0x4000, 0x1666: 0x4000, 0x1667: 0x4000, - 0x167a: 0x4000, - // Block 0x5a, offset 0x1680 - 0x1695: 0x4000, 0x1696: 0x4000, - 0x16a4: 0x4000, - // Block 0x5b, offset 0x16c0 - 0x16fb: 0x4000, - 0x16fc: 0x4000, 0x16fd: 0x4000, 0x16fe: 0x4000, 0x16ff: 0x4000, - // Block 0x5c, offset 0x1700 - 0x1700: 0x4000, 0x1701: 0x4000, 0x1702: 0x4000, 0x1703: 0x4000, 0x1704: 0x4000, 0x1705: 0x4000, - 0x1706: 0x4000, 0x1707: 0x4000, 0x1708: 0x4000, 0x1709: 0x4000, 0x170a: 0x4000, 0x170b: 0x4000, - 0x170c: 0x4000, 0x170d: 0x4000, 0x170e: 0x4000, 0x170f: 0x4000, - // Block 0x5d, offset 0x1740 - 0x1740: 0x4000, 0x1741: 0x4000, 0x1742: 0x4000, 0x1743: 0x4000, 0x1744: 0x4000, 0x1745: 0x4000, - 0x174c: 0x4000, 0x1750: 0x4000, 0x1751: 0x4000, - 0x1752: 0x4000, - 0x176b: 0x4000, 0x176c: 0x4000, - 0x1774: 0x4000, 0x1775: 0x4000, - 0x1776: 0x4000, - // Block 0x5e, offset 0x1780 - 0x1790: 0x4000, 0x1791: 0x4000, - 0x1792: 0x4000, 0x1793: 0x4000, 0x1794: 0x4000, 0x1795: 0x4000, 0x1796: 0x4000, 0x1797: 0x4000, - 0x1798: 0x4000, 0x1799: 0x4000, 0x179a: 0x4000, 0x179b: 0x4000, 0x179c: 0x4000, 0x179d: 0x4000, - 0x179e: 0x4000, 0x17a0: 0x4000, 0x17a1: 0x4000, 0x17a2: 0x4000, 0x17a3: 0x4000, - 0x17a4: 0x4000, 0x17a5: 0x4000, 0x17a6: 0x4000, 0x17a7: 0x4000, - 0x17b0: 0x4000, 0x17b3: 0x4000, 0x17b4: 0x4000, 0x17b5: 0x4000, - 0x17b6: 0x4000, 0x17b7: 0x4000, 0x17b8: 0x4000, 0x17b9: 0x4000, 0x17ba: 0x4000, 0x17bb: 0x4000, - 0x17bc: 0x4000, 0x17bd: 0x4000, 0x17be: 0x4000, - // Block 0x5f, offset 0x17c0 - 0x17c0: 0x4000, 0x17c1: 0x4000, 0x17c2: 0x4000, 0x17c3: 0x4000, 0x17c4: 0x4000, 0x17c5: 0x4000, - 0x17c6: 0x4000, 0x17c7: 0x4000, 0x17c8: 0x4000, 0x17c9: 0x4000, 0x17ca: 0x4000, 0x17cb: 0x4000, - 0x17d0: 0x4000, 0x17d1: 0x4000, - 0x17d2: 0x4000, 0x17d3: 0x4000, 0x17d4: 0x4000, 0x17d5: 0x4000, 0x17d6: 0x4000, 0x17d7: 0x4000, - 0x17d8: 0x4000, 0x17d9: 0x4000, 0x17da: 0x4000, 0x17db: 0x4000, 0x17dc: 0x4000, 0x17dd: 0x4000, - 0x17de: 0x4000, - // Block 0x60, offset 0x1800 - 0x1800: 0x4000, 0x1801: 0x4000, 0x1802: 0x4000, 0x1803: 0x4000, 0x1804: 0x4000, 0x1805: 0x4000, - 0x1806: 0x4000, 0x1807: 0x4000, 0x1808: 0x4000, 0x1809: 0x4000, 0x180a: 0x4000, 0x180b: 0x4000, - 0x180c: 0x4000, 0x180d: 0x4000, 0x180e: 0x4000, 0x180f: 0x4000, 0x1810: 0x4000, 0x1811: 0x4000, - // Block 0x61, offset 0x1840 - 0x1840: 0x4000, - // Block 0x62, offset 0x1880 - 0x1880: 0x2000, 0x1881: 0x2000, 0x1882: 0x2000, 0x1883: 0x2000, 0x1884: 0x2000, 0x1885: 0x2000, - 0x1886: 0x2000, 0x1887: 0x2000, 0x1888: 0x2000, 0x1889: 0x2000, 0x188a: 0x2000, 0x188b: 0x2000, - 0x188c: 0x2000, 0x188d: 0x2000, 0x188e: 0x2000, 0x188f: 0x2000, 0x1890: 0x2000, 0x1891: 0x2000, - 0x1892: 0x2000, 0x1893: 0x2000, 0x1894: 0x2000, 0x1895: 0x2000, 0x1896: 0x2000, 0x1897: 0x2000, - 0x1898: 0x2000, 0x1899: 0x2000, 0x189a: 0x2000, 0x189b: 0x2000, 0x189c: 0x2000, 0x189d: 0x2000, - 0x189e: 0x2000, 0x189f: 0x2000, 0x18a0: 0x2000, 0x18a1: 0x2000, 0x18a2: 0x2000, 0x18a3: 0x2000, - 0x18a4: 0x2000, 0x18a5: 0x2000, 0x18a6: 0x2000, 0x18a7: 0x2000, 0x18a8: 0x2000, 0x18a9: 0x2000, - 0x18aa: 0x2000, 0x18ab: 0x2000, 0x18ac: 0x2000, 0x18ad: 0x2000, 0x18ae: 0x2000, 0x18af: 0x2000, - 0x18b0: 0x2000, 0x18b1: 0x2000, 0x18b2: 0x2000, 0x18b3: 0x2000, 0x18b4: 0x2000, 0x18b5: 0x2000, - 0x18b6: 0x2000, 0x18b7: 0x2000, 0x18b8: 0x2000, 0x18b9: 0x2000, 0x18ba: 0x2000, 0x18bb: 0x2000, - 0x18bc: 0x2000, 0x18bd: 0x2000, -} - -// widthIndex: 22 blocks, 1408 entries, 1408 bytes -// Block 0 is the zero block. -var widthIndex = [1408]uint8{ - // Block 0x0, offset 0x0 - // Block 0x1, offset 0x40 - // Block 0x2, offset 0x80 - // Block 0x3, offset 0xc0 - 0xc2: 0x01, 0xc3: 0x02, 0xc4: 0x03, 0xc5: 0x04, 0xc7: 0x05, - 0xc9: 0x06, 0xcb: 0x07, 0xcc: 0x08, 0xcd: 0x09, 0xce: 0x0a, 0xcf: 0x0b, - 0xd0: 0x0c, 0xd1: 0x0d, - 0xe1: 0x02, 0xe2: 0x03, 0xe3: 0x04, 0xe4: 0x05, 0xe5: 0x06, 0xe6: 0x06, 0xe7: 0x06, - 0xe8: 0x06, 0xe9: 0x06, 0xea: 0x07, 0xeb: 0x06, 0xec: 0x06, 0xed: 0x08, 0xee: 0x09, 0xef: 0x0a, - 0xf0: 0x0f, 0xf3: 0x12, 0xf4: 0x13, - // Block 0x4, offset 0x100 - 0x104: 0x0e, 0x105: 0x0f, - // Block 0x5, offset 0x140 - 0x140: 0x10, 0x141: 0x11, 0x142: 0x12, 0x144: 0x13, 0x145: 0x14, 0x146: 0x15, 0x147: 0x16, - 0x148: 0x17, 0x149: 0x18, 0x14a: 0x19, 0x14c: 0x1a, 0x14f: 0x1b, - 0x151: 0x1c, 0x152: 0x08, 0x153: 0x1d, 0x154: 0x1e, 0x155: 0x1f, 0x156: 0x20, 0x157: 0x21, - 0x158: 0x22, 0x159: 0x23, 0x15a: 0x24, 0x15b: 0x25, 0x15c: 0x26, 0x15d: 0x27, 0x15e: 0x28, 0x15f: 0x29, - 0x166: 0x2a, - 0x16c: 0x2b, 0x16d: 0x2c, - 0x17a: 0x2d, 0x17b: 0x2e, 0x17c: 0x0e, 0x17d: 0x0e, 0x17e: 0x0e, 0x17f: 0x2f, - // Block 0x6, offset 0x180 - 0x180: 0x30, 0x181: 0x31, 0x182: 0x32, 0x183: 0x33, 0x184: 0x34, 0x185: 0x35, 0x186: 0x36, 0x187: 0x37, - 0x188: 0x38, 0x189: 0x39, 0x18a: 0x0e, 0x18b: 0x3a, 0x18c: 0x0e, 0x18d: 0x0e, 0x18e: 0x0e, 0x18f: 0x0e, - 0x190: 0x0e, 0x191: 0x0e, 0x192: 0x0e, 0x193: 0x0e, 0x194: 0x0e, 0x195: 0x0e, 0x196: 0x0e, 0x197: 0x0e, - 0x198: 0x0e, 0x199: 0x0e, 0x19a: 0x0e, 0x19b: 0x0e, 0x19c: 0x0e, 0x19d: 0x0e, 0x19e: 0x0e, 0x19f: 0x0e, - 0x1a0: 0x0e, 0x1a1: 0x0e, 0x1a2: 0x0e, 0x1a3: 0x0e, 0x1a4: 0x0e, 0x1a5: 0x0e, 0x1a6: 0x0e, 0x1a7: 0x0e, - 0x1a8: 0x0e, 0x1a9: 0x0e, 0x1aa: 0x0e, 0x1ab: 0x0e, 0x1ac: 0x0e, 0x1ad: 0x0e, 0x1ae: 0x0e, 0x1af: 0x0e, - 0x1b0: 0x0e, 0x1b1: 0x0e, 0x1b2: 0x0e, 0x1b3: 0x0e, 0x1b4: 0x0e, 0x1b5: 0x0e, 0x1b6: 0x0e, 0x1b7: 0x0e, - 0x1b8: 0x0e, 0x1b9: 0x0e, 0x1ba: 0x0e, 0x1bb: 0x0e, 0x1bc: 0x0e, 0x1bd: 0x0e, 0x1be: 0x0e, 0x1bf: 0x0e, - // Block 0x7, offset 0x1c0 - 0x1c0: 0x0e, 0x1c1: 0x0e, 0x1c2: 0x0e, 0x1c3: 0x0e, 0x1c4: 0x0e, 0x1c5: 0x0e, 0x1c6: 0x0e, 0x1c7: 0x0e, - 0x1c8: 0x0e, 0x1c9: 0x0e, 0x1ca: 0x0e, 0x1cb: 0x0e, 0x1cc: 0x0e, 0x1cd: 0x0e, 0x1ce: 0x0e, 0x1cf: 0x0e, - 0x1d0: 0x0e, 0x1d1: 0x0e, 0x1d2: 0x0e, 0x1d3: 0x0e, 0x1d4: 0x0e, 0x1d5: 0x0e, 0x1d6: 0x0e, 0x1d7: 0x0e, - 0x1d8: 0x0e, 0x1d9: 0x0e, 0x1da: 0x0e, 0x1db: 0x0e, 0x1dc: 0x0e, 0x1dd: 0x0e, 0x1de: 0x0e, 0x1df: 0x0e, - 0x1e0: 0x0e, 0x1e1: 0x0e, 0x1e2: 0x0e, 0x1e3: 0x0e, 0x1e4: 0x0e, 0x1e5: 0x0e, 0x1e6: 0x0e, 0x1e7: 0x0e, - 0x1e8: 0x0e, 0x1e9: 0x0e, 0x1ea: 0x0e, 0x1eb: 0x0e, 0x1ec: 0x0e, 0x1ed: 0x0e, 0x1ee: 0x0e, 0x1ef: 0x0e, - 0x1f0: 0x0e, 0x1f1: 0x0e, 0x1f2: 0x0e, 0x1f3: 0x0e, 0x1f4: 0x0e, 0x1f5: 0x0e, 0x1f6: 0x0e, - 0x1f8: 0x0e, 0x1f9: 0x0e, 0x1fa: 0x0e, 0x1fb: 0x0e, 0x1fc: 0x0e, 0x1fd: 0x0e, 0x1fe: 0x0e, 0x1ff: 0x0e, - // Block 0x8, offset 0x200 - 0x200: 0x0e, 0x201: 0x0e, 0x202: 0x0e, 0x203: 0x0e, 0x204: 0x0e, 0x205: 0x0e, 0x206: 0x0e, 0x207: 0x0e, - 0x208: 0x0e, 0x209: 0x0e, 0x20a: 0x0e, 0x20b: 0x0e, 0x20c: 0x0e, 0x20d: 0x0e, 0x20e: 0x0e, 0x20f: 0x0e, - 0x210: 0x0e, 0x211: 0x0e, 0x212: 0x0e, 0x213: 0x0e, 0x214: 0x0e, 0x215: 0x0e, 0x216: 0x0e, 0x217: 0x0e, - 0x218: 0x0e, 0x219: 0x0e, 0x21a: 0x0e, 0x21b: 0x0e, 0x21c: 0x0e, 0x21d: 0x0e, 0x21e: 0x0e, 0x21f: 0x0e, - 0x220: 0x0e, 0x221: 0x0e, 0x222: 0x0e, 0x223: 0x0e, 0x224: 0x0e, 0x225: 0x0e, 0x226: 0x0e, 0x227: 0x0e, - 0x228: 0x0e, 0x229: 0x0e, 0x22a: 0x0e, 0x22b: 0x0e, 0x22c: 0x0e, 0x22d: 0x0e, 0x22e: 0x0e, 0x22f: 0x0e, - 0x230: 0x0e, 0x231: 0x0e, 0x232: 0x0e, 0x233: 0x0e, 0x234: 0x0e, 0x235: 0x0e, 0x236: 0x0e, 0x237: 0x0e, - 0x238: 0x0e, 0x239: 0x0e, 0x23a: 0x0e, 0x23b: 0x0e, 0x23c: 0x0e, 0x23d: 0x0e, 0x23e: 0x0e, 0x23f: 0x0e, - // Block 0x9, offset 0x240 - 0x240: 0x0e, 0x241: 0x0e, 0x242: 0x0e, 0x243: 0x0e, 0x244: 0x0e, 0x245: 0x0e, 0x246: 0x0e, 0x247: 0x0e, - 0x248: 0x0e, 0x249: 0x0e, 0x24a: 0x0e, 0x24b: 0x0e, 0x24c: 0x0e, 0x24d: 0x0e, 0x24e: 0x0e, 0x24f: 0x0e, - 0x250: 0x0e, 0x251: 0x0e, 0x252: 0x3b, 0x253: 0x3c, - 0x265: 0x3d, - 0x270: 0x0e, 0x271: 0x0e, 0x272: 0x0e, 0x273: 0x0e, 0x274: 0x0e, 0x275: 0x0e, 0x276: 0x0e, 0x277: 0x0e, - 0x278: 0x0e, 0x279: 0x0e, 0x27a: 0x0e, 0x27b: 0x0e, 0x27c: 0x0e, 0x27d: 0x0e, 0x27e: 0x0e, 0x27f: 0x0e, - // Block 0xa, offset 0x280 - 0x280: 0x0e, 0x281: 0x0e, 0x282: 0x0e, 0x283: 0x0e, 0x284: 0x0e, 0x285: 0x0e, 0x286: 0x0e, 0x287: 0x0e, - 0x288: 0x0e, 0x289: 0x0e, 0x28a: 0x0e, 0x28b: 0x0e, 0x28c: 0x0e, 0x28d: 0x0e, 0x28e: 0x0e, 0x28f: 0x0e, - 0x290: 0x0e, 0x291: 0x0e, 0x292: 0x0e, 0x293: 0x0e, 0x294: 0x0e, 0x295: 0x0e, 0x296: 0x0e, 0x297: 0x0e, - 0x298: 0x0e, 0x299: 0x0e, 0x29a: 0x0e, 0x29b: 0x0e, 0x29c: 0x0e, 0x29d: 0x0e, 0x29e: 0x3e, - // Block 0xb, offset 0x2c0 - 0x2c0: 0x08, 0x2c1: 0x08, 0x2c2: 0x08, 0x2c3: 0x08, 0x2c4: 0x08, 0x2c5: 0x08, 0x2c6: 0x08, 0x2c7: 0x08, - 0x2c8: 0x08, 0x2c9: 0x08, 0x2ca: 0x08, 0x2cb: 0x08, 0x2cc: 0x08, 0x2cd: 0x08, 0x2ce: 0x08, 0x2cf: 0x08, - 0x2d0: 0x08, 0x2d1: 0x08, 0x2d2: 0x08, 0x2d3: 0x08, 0x2d4: 0x08, 0x2d5: 0x08, 0x2d6: 0x08, 0x2d7: 0x08, - 0x2d8: 0x08, 0x2d9: 0x08, 0x2da: 0x08, 0x2db: 0x08, 0x2dc: 0x08, 0x2dd: 0x08, 0x2de: 0x08, 0x2df: 0x08, - 0x2e0: 0x08, 0x2e1: 0x08, 0x2e2: 0x08, 0x2e3: 0x08, 0x2e4: 0x08, 0x2e5: 0x08, 0x2e6: 0x08, 0x2e7: 0x08, - 0x2e8: 0x08, 0x2e9: 0x08, 0x2ea: 0x08, 0x2eb: 0x08, 0x2ec: 0x08, 0x2ed: 0x08, 0x2ee: 0x08, 0x2ef: 0x08, - 0x2f0: 0x08, 0x2f1: 0x08, 0x2f2: 0x08, 0x2f3: 0x08, 0x2f4: 0x08, 0x2f5: 0x08, 0x2f6: 0x08, 0x2f7: 0x08, - 0x2f8: 0x08, 0x2f9: 0x08, 0x2fa: 0x08, 0x2fb: 0x08, 0x2fc: 0x08, 0x2fd: 0x08, 0x2fe: 0x08, 0x2ff: 0x08, - // Block 0xc, offset 0x300 - 0x300: 0x08, 0x301: 0x08, 0x302: 0x08, 0x303: 0x08, 0x304: 0x08, 0x305: 0x08, 0x306: 0x08, 0x307: 0x08, - 0x308: 0x08, 0x309: 0x08, 0x30a: 0x08, 0x30b: 0x08, 0x30c: 0x08, 0x30d: 0x08, 0x30e: 0x08, 0x30f: 0x08, - 0x310: 0x08, 0x311: 0x08, 0x312: 0x08, 0x313: 0x08, 0x314: 0x08, 0x315: 0x08, 0x316: 0x08, 0x317: 0x08, - 0x318: 0x08, 0x319: 0x08, 0x31a: 0x08, 0x31b: 0x08, 0x31c: 0x08, 0x31d: 0x08, 0x31e: 0x08, 0x31f: 0x08, - 0x320: 0x08, 0x321: 0x08, 0x322: 0x08, 0x323: 0x08, 0x324: 0x0e, 0x325: 0x0e, 0x326: 0x0e, 0x327: 0x0e, - 0x328: 0x0e, 0x329: 0x0e, 0x32a: 0x0e, 0x32b: 0x0e, - 0x338: 0x3f, 0x339: 0x40, 0x33c: 0x41, 0x33d: 0x42, 0x33e: 0x43, 0x33f: 0x44, - // Block 0xd, offset 0x340 - 0x37f: 0x45, - // Block 0xe, offset 0x380 - 0x380: 0x0e, 0x381: 0x0e, 0x382: 0x0e, 0x383: 0x0e, 0x384: 0x0e, 0x385: 0x0e, 0x386: 0x0e, 0x387: 0x0e, - 0x388: 0x0e, 0x389: 0x0e, 0x38a: 0x0e, 0x38b: 0x0e, 0x38c: 0x0e, 0x38d: 0x0e, 0x38e: 0x0e, 0x38f: 0x0e, - 0x390: 0x0e, 0x391: 0x0e, 0x392: 0x0e, 0x393: 0x0e, 0x394: 0x0e, 0x395: 0x0e, 0x396: 0x0e, 0x397: 0x0e, - 0x398: 0x0e, 0x399: 0x0e, 0x39a: 0x0e, 0x39b: 0x0e, 0x39c: 0x0e, 0x39d: 0x0e, 0x39e: 0x0e, 0x39f: 0x46, - 0x3a0: 0x0e, 0x3a1: 0x0e, 0x3a2: 0x0e, 0x3a3: 0x0e, 0x3a4: 0x0e, 0x3a5: 0x0e, 0x3a6: 0x0e, 0x3a7: 0x0e, - 0x3a8: 0x0e, 0x3a9: 0x0e, 0x3aa: 0x0e, 0x3ab: 0x47, - // Block 0xf, offset 0x3c0 - 0x3c0: 0x48, - // Block 0x10, offset 0x400 - 0x400: 0x49, 0x403: 0x4a, 0x404: 0x4b, 0x405: 0x4c, 0x406: 0x4d, - 0x408: 0x4e, 0x409: 0x4f, 0x40c: 0x50, 0x40d: 0x51, 0x40e: 0x52, 0x40f: 0x53, - 0x410: 0x3a, 0x411: 0x54, 0x412: 0x0e, 0x413: 0x55, 0x414: 0x56, 0x415: 0x57, 0x416: 0x58, 0x417: 0x59, - 0x418: 0x0e, 0x419: 0x5a, 0x41a: 0x0e, 0x41b: 0x5b, - 0x424: 0x5c, 0x425: 0x5d, 0x426: 0x5e, 0x427: 0x5f, - // Block 0x11, offset 0x440 - 0x456: 0x0b, 0x457: 0x06, - 0x458: 0x0c, 0x45b: 0x0d, 0x45f: 0x0e, - 0x460: 0x06, 0x461: 0x06, 0x462: 0x06, 0x463: 0x06, 0x464: 0x06, 0x465: 0x06, 0x466: 0x06, 0x467: 0x06, - 0x468: 0x06, 0x469: 0x06, 0x46a: 0x06, 0x46b: 0x06, 0x46c: 0x06, 0x46d: 0x06, 0x46e: 0x06, 0x46f: 0x06, - 0x470: 0x06, 0x471: 0x06, 0x472: 0x06, 0x473: 0x06, 0x474: 0x06, 0x475: 0x06, 0x476: 0x06, 0x477: 0x06, - 0x478: 0x06, 0x479: 0x06, 0x47a: 0x06, 0x47b: 0x06, 0x47c: 0x06, 0x47d: 0x06, 0x47e: 0x06, 0x47f: 0x06, - // Block 0x12, offset 0x480 - 0x484: 0x08, 0x485: 0x08, 0x486: 0x08, 0x487: 0x09, - // Block 0x13, offset 0x4c0 - 0x4c0: 0x08, 0x4c1: 0x08, 0x4c2: 0x08, 0x4c3: 0x08, 0x4c4: 0x08, 0x4c5: 0x08, 0x4c6: 0x08, 0x4c7: 0x08, - 0x4c8: 0x08, 0x4c9: 0x08, 0x4ca: 0x08, 0x4cb: 0x08, 0x4cc: 0x08, 0x4cd: 0x08, 0x4ce: 0x08, 0x4cf: 0x08, - 0x4d0: 0x08, 0x4d1: 0x08, 0x4d2: 0x08, 0x4d3: 0x08, 0x4d4: 0x08, 0x4d5: 0x08, 0x4d6: 0x08, 0x4d7: 0x08, - 0x4d8: 0x08, 0x4d9: 0x08, 0x4da: 0x08, 0x4db: 0x08, 0x4dc: 0x08, 0x4dd: 0x08, 0x4de: 0x08, 0x4df: 0x08, - 0x4e0: 0x08, 0x4e1: 0x08, 0x4e2: 0x08, 0x4e3: 0x08, 0x4e4: 0x08, 0x4e5: 0x08, 0x4e6: 0x08, 0x4e7: 0x08, - 0x4e8: 0x08, 0x4e9: 0x08, 0x4ea: 0x08, 0x4eb: 0x08, 0x4ec: 0x08, 0x4ed: 0x08, 0x4ee: 0x08, 0x4ef: 0x08, - 0x4f0: 0x08, 0x4f1: 0x08, 0x4f2: 0x08, 0x4f3: 0x08, 0x4f4: 0x08, 0x4f5: 0x08, 0x4f6: 0x08, 0x4f7: 0x08, - 0x4f8: 0x08, 0x4f9: 0x08, 0x4fa: 0x08, 0x4fb: 0x08, 0x4fc: 0x08, 0x4fd: 0x08, 0x4fe: 0x08, 0x4ff: 0x60, - // Block 0x14, offset 0x500 - 0x520: 0x10, - 0x530: 0x09, 0x531: 0x09, 0x532: 0x09, 0x533: 0x09, 0x534: 0x09, 0x535: 0x09, 0x536: 0x09, 0x537: 0x09, - 0x538: 0x09, 0x539: 0x09, 0x53a: 0x09, 0x53b: 0x09, 0x53c: 0x09, 0x53d: 0x09, 0x53e: 0x09, 0x53f: 0x11, - // Block 0x15, offset 0x540 - 0x540: 0x09, 0x541: 0x09, 0x542: 0x09, 0x543: 0x09, 0x544: 0x09, 0x545: 0x09, 0x546: 0x09, 0x547: 0x09, - 0x548: 0x09, 0x549: 0x09, 0x54a: 0x09, 0x54b: 0x09, 0x54c: 0x09, 0x54d: 0x09, 0x54e: 0x09, 0x54f: 0x11, -} - -// inverseData contains 4-byte entries of the following format: -// -// <0 padding> -// -// The last byte of the UTF-8-encoded rune is xor-ed with the last byte of the -// UTF-8 encoding of the original rune. Mappings often have the following -// pattern: -// -// A -> A (U+FF21 -> U+0041) -// B -> B (U+FF22 -> U+0042) -// ... -// -// By xor-ing the last byte the same entry can be shared by many mappings. This -// reduces the total number of distinct entries by about two thirds. -// The resulting entry for the aforementioned mappings is -// -// { 0x01, 0xE0, 0x00, 0x00 } -// -// Using this entry to map U+FF21 (UTF-8 [EF BC A1]), we get -// -// E0 ^ A1 = 41. -// -// Similarly, for U+FF22 (UTF-8 [EF BC A2]), we get -// -// E0 ^ A2 = 42. -// -// Note that because of the xor-ing, the byte sequence stored in the entry is -// not valid UTF-8. -var inverseData = [150][4]byte{ - {0x00, 0x00, 0x00, 0x00}, - {0x03, 0xe3, 0x80, 0xa0}, - {0x03, 0xef, 0xbc, 0xa0}, - {0x03, 0xef, 0xbc, 0xe0}, - {0x03, 0xef, 0xbd, 0xe0}, - {0x03, 0xef, 0xbf, 0x02}, - {0x03, 0xef, 0xbf, 0x00}, - {0x03, 0xef, 0xbf, 0x0e}, - {0x03, 0xef, 0xbf, 0x0c}, - {0x03, 0xef, 0xbf, 0x0f}, - {0x03, 0xef, 0xbf, 0x39}, - {0x03, 0xef, 0xbf, 0x3b}, - {0x03, 0xef, 0xbf, 0x3f}, - {0x03, 0xef, 0xbf, 0x2a}, - {0x03, 0xef, 0xbf, 0x0d}, - {0x03, 0xef, 0xbf, 0x25}, - {0x03, 0xef, 0xbd, 0x1a}, - {0x03, 0xef, 0xbd, 0x26}, - {0x01, 0xa0, 0x00, 0x00}, - {0x03, 0xef, 0xbd, 0x25}, - {0x03, 0xef, 0xbd, 0x23}, - {0x03, 0xef, 0xbd, 0x2e}, - {0x03, 0xef, 0xbe, 0x07}, - {0x03, 0xef, 0xbe, 0x05}, - {0x03, 0xef, 0xbd, 0x06}, - {0x03, 0xef, 0xbd, 0x13}, - {0x03, 0xef, 0xbd, 0x0b}, - {0x03, 0xef, 0xbd, 0x16}, - {0x03, 0xef, 0xbd, 0x0c}, - {0x03, 0xef, 0xbd, 0x15}, - {0x03, 0xef, 0xbd, 0x0d}, - {0x03, 0xef, 0xbd, 0x1c}, - {0x03, 0xef, 0xbd, 0x02}, - {0x03, 0xef, 0xbd, 0x1f}, - {0x03, 0xef, 0xbd, 0x1d}, - {0x03, 0xef, 0xbd, 0x17}, - {0x03, 0xef, 0xbd, 0x08}, - {0x03, 0xef, 0xbd, 0x09}, - {0x03, 0xef, 0xbd, 0x0e}, - {0x03, 0xef, 0xbd, 0x04}, - {0x03, 0xef, 0xbd, 0x05}, - {0x03, 0xef, 0xbe, 0x3f}, - {0x03, 0xef, 0xbe, 0x00}, - {0x03, 0xef, 0xbd, 0x2c}, - {0x03, 0xef, 0xbe, 0x06}, - {0x03, 0xef, 0xbe, 0x0c}, - {0x03, 0xef, 0xbe, 0x0f}, - {0x03, 0xef, 0xbe, 0x0d}, - {0x03, 0xef, 0xbe, 0x0b}, - {0x03, 0xef, 0xbe, 0x19}, - {0x03, 0xef, 0xbe, 0x15}, - {0x03, 0xef, 0xbe, 0x11}, - {0x03, 0xef, 0xbe, 0x31}, - {0x03, 0xef, 0xbe, 0x33}, - {0x03, 0xef, 0xbd, 0x0f}, - {0x03, 0xef, 0xbe, 0x30}, - {0x03, 0xef, 0xbe, 0x3e}, - {0x03, 0xef, 0xbe, 0x32}, - {0x03, 0xef, 0xbe, 0x36}, - {0x03, 0xef, 0xbd, 0x14}, - {0x03, 0xef, 0xbe, 0x2e}, - {0x03, 0xef, 0xbd, 0x1e}, - {0x03, 0xef, 0xbe, 0x10}, - {0x03, 0xef, 0xbf, 0x13}, - {0x03, 0xef, 0xbf, 0x15}, - {0x03, 0xef, 0xbf, 0x17}, - {0x03, 0xef, 0xbf, 0x1f}, - {0x03, 0xef, 0xbf, 0x1d}, - {0x03, 0xef, 0xbf, 0x1b}, - {0x03, 0xef, 0xbf, 0x09}, - {0x03, 0xef, 0xbf, 0x0b}, - {0x03, 0xef, 0xbf, 0x37}, - {0x03, 0xef, 0xbe, 0x04}, - {0x01, 0xe0, 0x00, 0x00}, - {0x03, 0xe2, 0xa6, 0x1a}, - {0x03, 0xe2, 0xa6, 0x26}, - {0x03, 0xe3, 0x80, 0x23}, - {0x03, 0xe3, 0x80, 0x2e}, - {0x03, 0xe3, 0x80, 0x25}, - {0x03, 0xe3, 0x83, 0x1e}, - {0x03, 0xe3, 0x83, 0x14}, - {0x03, 0xe3, 0x82, 0x06}, - {0x03, 0xe3, 0x82, 0x0b}, - {0x03, 0xe3, 0x82, 0x0c}, - {0x03, 0xe3, 0x82, 0x0d}, - {0x03, 0xe3, 0x82, 0x02}, - {0x03, 0xe3, 0x83, 0x0f}, - {0x03, 0xe3, 0x83, 0x08}, - {0x03, 0xe3, 0x83, 0x09}, - {0x03, 0xe3, 0x83, 0x2c}, - {0x03, 0xe3, 0x83, 0x0c}, - {0x03, 0xe3, 0x82, 0x13}, - {0x03, 0xe3, 0x82, 0x16}, - {0x03, 0xe3, 0x82, 0x15}, - {0x03, 0xe3, 0x82, 0x1c}, - {0x03, 0xe3, 0x82, 0x1f}, - {0x03, 0xe3, 0x82, 0x1d}, - {0x03, 0xe3, 0x82, 0x1a}, - {0x03, 0xe3, 0x82, 0x17}, - {0x03, 0xe3, 0x82, 0x08}, - {0x03, 0xe3, 0x82, 0x09}, - {0x03, 0xe3, 0x82, 0x0e}, - {0x03, 0xe3, 0x82, 0x04}, - {0x03, 0xe3, 0x82, 0x05}, - {0x03, 0xe3, 0x82, 0x3f}, - {0x03, 0xe3, 0x83, 0x00}, - {0x03, 0xe3, 0x83, 0x06}, - {0x03, 0xe3, 0x83, 0x05}, - {0x03, 0xe3, 0x83, 0x0d}, - {0x03, 0xe3, 0x83, 0x0b}, - {0x03, 0xe3, 0x83, 0x07}, - {0x03, 0xe3, 0x83, 0x19}, - {0x03, 0xe3, 0x83, 0x15}, - {0x03, 0xe3, 0x83, 0x11}, - {0x03, 0xe3, 0x83, 0x31}, - {0x03, 0xe3, 0x83, 0x33}, - {0x03, 0xe3, 0x83, 0x30}, - {0x03, 0xe3, 0x83, 0x3e}, - {0x03, 0xe3, 0x83, 0x32}, - {0x03, 0xe3, 0x83, 0x36}, - {0x03, 0xe3, 0x83, 0x2e}, - {0x03, 0xe3, 0x82, 0x07}, - {0x03, 0xe3, 0x85, 0x04}, - {0x03, 0xe3, 0x84, 0x10}, - {0x03, 0xe3, 0x85, 0x30}, - {0x03, 0xe3, 0x85, 0x0d}, - {0x03, 0xe3, 0x85, 0x13}, - {0x03, 0xe3, 0x85, 0x15}, - {0x03, 0xe3, 0x85, 0x17}, - {0x03, 0xe3, 0x85, 0x1f}, - {0x03, 0xe3, 0x85, 0x1d}, - {0x03, 0xe3, 0x85, 0x1b}, - {0x03, 0xe3, 0x85, 0x09}, - {0x03, 0xe3, 0x85, 0x0f}, - {0x03, 0xe3, 0x85, 0x0b}, - {0x03, 0xe3, 0x85, 0x37}, - {0x03, 0xe3, 0x85, 0x3b}, - {0x03, 0xe3, 0x85, 0x39}, - {0x03, 0xe3, 0x85, 0x3f}, - {0x02, 0xc2, 0x02, 0x00}, - {0x02, 0xc2, 0x0e, 0x00}, - {0x02, 0xc2, 0x0c, 0x00}, - {0x02, 0xc2, 0x00, 0x00}, - {0x03, 0xe2, 0x82, 0x0f}, - {0x03, 0xe2, 0x94, 0x2a}, - {0x03, 0xe2, 0x86, 0x39}, - {0x03, 0xe2, 0x86, 0x3b}, - {0x03, 0xe2, 0x86, 0x3f}, - {0x03, 0xe2, 0x96, 0x0d}, - {0x03, 0xe2, 0x97, 0x25}, -} - -// Total table size 14680 bytes (14KiB) diff --git a/vendor/google.golang.org/protobuf/encoding/protojson/decode.go b/vendor/google.golang.org/protobuf/encoding/protojson/decode.go index bb2966e3b4..737d6876d5 100644 --- a/vendor/google.golang.org/protobuf/encoding/protojson/decode.go +++ b/vendor/google.golang.org/protobuf/encoding/protojson/decode.go @@ -192,11 +192,6 @@ func (d decoder) unmarshalMessage(m protoreflect.Message, skipTypeURL bool) erro fd = fieldDescs.ByTextName(name) } } - if flags.ProtoLegacy { - if fd != nil && fd.IsWeak() && fd.Message().IsPlaceholder() { - fd = nil // reset since the weak reference is not linked in - } - } if fd == nil { // Field is unknown. @@ -351,7 +346,7 @@ func (d decoder) unmarshalScalar(fd protoreflect.FieldDescriptor) (protoreflect. panic(fmt.Sprintf("unmarshalScalar: invalid scalar kind %v", kind)) } - return protoreflect.Value{}, d.newError(tok.Pos(), "invalid value for %v type: %v", kind, tok.RawString()) + return protoreflect.Value{}, d.newError(tok.Pos(), "invalid value for %v field %v: %v", kind, fd.JSONName(), tok.RawString()) } func unmarshalInt(tok json.Token, bitSize int) (protoreflect.Value, bool) { diff --git a/vendor/google.golang.org/protobuf/encoding/protojson/encode.go b/vendor/google.golang.org/protobuf/encoding/protojson/encode.go index 29846df222..0e72d85378 100644 --- a/vendor/google.golang.org/protobuf/encoding/protojson/encode.go +++ b/vendor/google.golang.org/protobuf/encoding/protojson/encode.go @@ -216,9 +216,7 @@ func (m unpopulatedFieldRanger) Range(f func(protoreflect.FieldDescriptor, proto } v := m.Get(fd) - isProto2Scalar := fd.Syntax() == protoreflect.Proto2 && fd.Default().IsValid() - isSingularMessage := fd.Cardinality() != protoreflect.Repeated && fd.Message() != nil - if isProto2Scalar || isSingularMessage { + if fd.HasPresence() { if m.skipNull { continue } diff --git a/vendor/google.golang.org/protobuf/encoding/protojson/well_known_types.go b/vendor/google.golang.org/protobuf/encoding/protojson/well_known_types.go index 4b177c8206..e9fe103943 100644 --- a/vendor/google.golang.org/protobuf/encoding/protojson/well_known_types.go +++ b/vendor/google.golang.org/protobuf/encoding/protojson/well_known_types.go @@ -348,7 +348,11 @@ func (d decoder) unmarshalAnyValue(unmarshal unmarshalFunc, m protoreflect.Messa switch tok.Kind() { case json.ObjectClose: if !found { - return d.newError(tok.Pos(), `missing "value" field`) + // We tolerate an omitted `value` field with the google.protobuf.Empty Well-Known-Type, + // for compatibility with other proto runtimes that have interpreted the spec differently. + if m.Descriptor().FullName() != genid.Empty_message_fullname { + return d.newError(tok.Pos(), `missing "value" field`) + } } return nil diff --git a/vendor/google.golang.org/protobuf/encoding/prototext/decode.go b/vendor/google.golang.org/protobuf/encoding/prototext/decode.go index 24bc98ac42..b53805056a 100644 --- a/vendor/google.golang.org/protobuf/encoding/prototext/decode.go +++ b/vendor/google.golang.org/protobuf/encoding/prototext/decode.go @@ -185,11 +185,6 @@ func (d decoder) unmarshalMessage(m protoreflect.Message, checkDelims bool) erro } else if xtErr != nil && xtErr != protoregistry.NotFound { return d.newError(tok.Pos(), "unable to resolve [%s]: %v", tok.RawString(), xtErr) } - if flags.ProtoLegacy { - if fd != nil && fd.IsWeak() && fd.Message().IsPlaceholder() { - fd = nil // reset since the weak reference is not linked in - } - } // Handle unknown fields. if fd == nil { diff --git a/vendor/google.golang.org/protobuf/encoding/protowire/wire.go b/vendor/google.golang.org/protobuf/encoding/protowire/wire.go index e942bc983e..743bfb81d6 100644 --- a/vendor/google.golang.org/protobuf/encoding/protowire/wire.go +++ b/vendor/google.golang.org/protobuf/encoding/protowire/wire.go @@ -371,7 +371,31 @@ func ConsumeVarint(b []byte) (v uint64, n int) { func SizeVarint(v uint64) int { // This computes 1 + (bits.Len64(v)-1)/7. // 9/64 is a good enough approximation of 1/7 - return int(9*uint32(bits.Len64(v))+64) / 64 + // + // The Go compiler can translate the bits.LeadingZeros64 call into the LZCNT + // instruction, which is very fast on CPUs from the last few years. The + // specific way of expressing the calculation matches C++ Protobuf, see + // https://godbolt.org/z/4P3h53oM4 for the C++ code and how gcc/clang + // optimize that function for GOAMD64=v1 and GOAMD64=v3 (-march=haswell). + + // By OR'ing v with 1, we guarantee that v is never 0, without changing the + // result of SizeVarint. LZCNT is not defined for 0, meaning the compiler + // needs to add extra instructions to handle that case. + // + // The Go compiler currently (go1.24.4) does not make use of this knowledge. + // This opportunity (removing the XOR instruction, which handles the 0 case) + // results in a small (1%) performance win across CPU architectures. + // + // Independently of avoiding the 0 case, we need the v |= 1 line because + // it allows the Go compiler to eliminate an extra XCHGL barrier. + v |= 1 + + // It would be clearer to write log2value := 63 - uint32(...), but + // writing uint32(...) ^ 63 is much more efficient (-14% ARM, -20% Intel). + // Proof of identity for our value range [0..63]: + // https://go.dev/play/p/Pdn9hEWYakX + log2value := uint32(bits.LeadingZeros64(v)) ^ 63 + return int((log2value*9 + (64 + 9)) / 64) } // AppendFixed32 appends v to b as a little-endian uint32. diff --git a/vendor/google.golang.org/protobuf/internal/descopts/options.go b/vendor/google.golang.org/protobuf/internal/descopts/options.go index 8401be8c84..024ffebd3d 100644 --- a/vendor/google.golang.org/protobuf/internal/descopts/options.go +++ b/vendor/google.golang.org/protobuf/internal/descopts/options.go @@ -9,7 +9,7 @@ // dependency on the descriptor proto package). package descopts -import pref "google.golang.org/protobuf/reflect/protoreflect" +import "google.golang.org/protobuf/reflect/protoreflect" // These variables are set by the init function in descriptor.pb.go via logic // in internal/filetype. In other words, so long as the descriptor proto package @@ -17,13 +17,13 @@ import pref "google.golang.org/protobuf/reflect/protoreflect" // // Each variable is populated with a nil pointer to the options struct. var ( - File pref.ProtoMessage - Enum pref.ProtoMessage - EnumValue pref.ProtoMessage - Message pref.ProtoMessage - Field pref.ProtoMessage - Oneof pref.ProtoMessage - ExtensionRange pref.ProtoMessage - Service pref.ProtoMessage - Method pref.ProtoMessage + File protoreflect.ProtoMessage + Enum protoreflect.ProtoMessage + EnumValue protoreflect.ProtoMessage + Message protoreflect.ProtoMessage + Field protoreflect.ProtoMessage + Oneof protoreflect.ProtoMessage + ExtensionRange protoreflect.ProtoMessage + Service protoreflect.ProtoMessage + Method protoreflect.ProtoMessage ) diff --git a/vendor/google.golang.org/protobuf/internal/editiondefaults/editions_defaults.binpb b/vendor/google.golang.org/protobuf/internal/editiondefaults/editions_defaults.binpb index ff6a38360a..04696351ee 100644 Binary files a/vendor/google.golang.org/protobuf/internal/editiondefaults/editions_defaults.binpb and b/vendor/google.golang.org/protobuf/internal/editiondefaults/editions_defaults.binpb differ diff --git a/vendor/google.golang.org/protobuf/internal/editionssupport/editions.go b/vendor/google.golang.org/protobuf/internal/editionssupport/editions.go index 029a6a12d7..7b9f01afb0 100644 --- a/vendor/google.golang.org/protobuf/internal/editionssupport/editions.go +++ b/vendor/google.golang.org/protobuf/internal/editionssupport/editions.go @@ -5,9 +5,14 @@ // Package editionssupport defines constants for editions that are supported. package editionssupport -import descriptorpb "google.golang.org/protobuf/types/descriptorpb" +import "google.golang.org/protobuf/types/descriptorpb" const ( Minimum = descriptorpb.Edition_EDITION_PROTO2 - Maximum = descriptorpb.Edition_EDITION_2023 + Maximum = descriptorpb.Edition_EDITION_2024 + + // MaximumKnown is the maximum edition that is known to Go Protobuf, but not + // declared as supported. In other words: end users cannot use it, but + // testprotos inside Go Protobuf can. + MaximumKnown = descriptorpb.Edition_EDITION_2024 ) diff --git a/vendor/google.golang.org/protobuf/internal/encoding/tag/tag.go b/vendor/google.golang.org/protobuf/internal/encoding/tag/tag.go index 7e87c76044..c96e448346 100644 --- a/vendor/google.golang.org/protobuf/internal/encoding/tag/tag.go +++ b/vendor/google.golang.org/protobuf/internal/encoding/tag/tag.go @@ -26,13 +26,13 @@ var byteType = reflect.TypeOf(byte(0)) // The type is the underlying field type (e.g., a repeated field may be // represented by []T, but the Go type passed in is just T). // A list of enum value descriptors must be provided for enum fields. -// This does not populate the Enum or Message (except for weak message). +// This does not populate the Enum or Message. // // This function is a best effort attempt; parsing errors are ignored. func Unmarshal(tag string, goType reflect.Type, evs protoreflect.EnumValueDescriptors) protoreflect.FieldDescriptor { f := new(filedesc.Field) f.L0.ParentFile = filedesc.SurrogateProto2 - f.L1.EditionFeatures = f.L0.ParentFile.L1.EditionFeatures + packed := false for len(tag) > 0 { i := strings.IndexByte(tag, ',') if i < 0 { @@ -108,10 +108,7 @@ func Unmarshal(tag string, goType reflect.Type, evs protoreflect.EnumValueDescri f.L1.StringName.InitJSON(jsonName) } case s == "packed": - f.L1.EditionFeatures.IsPacked = true - case strings.HasPrefix(s, "weak="): - f.L1.IsWeak = true - f.L1.Message = filedesc.PlaceholderMessage(protoreflect.FullName(s[len("weak="):])) + packed = true case strings.HasPrefix(s, "def="): // The default tag is special in that everything afterwards is the // default regardless of the presence of commas. @@ -124,6 +121,13 @@ func Unmarshal(tag string, goType reflect.Type, evs protoreflect.EnumValueDescri tag = strings.TrimPrefix(tag[i:], ",") } + // Update EditionFeatures after the loop and after we know whether this is + // a proto2 or proto3 field. + f.L1.EditionFeatures = f.L0.ParentFile.L1.EditionFeatures + if packed { + f.L1.EditionFeatures.IsPacked = true + } + // The generator uses the group message name instead of the field name. // We obtain the real field name by lowercasing the group name. if f.L1.Kind == protoreflect.GroupKind { @@ -183,9 +187,6 @@ func Marshal(fd protoreflect.FieldDescriptor, enumName string) string { // the exact same semantics from the previous generator. tag = append(tag, "json="+jsonName) } - if fd.IsWeak() { - tag = append(tag, "weak="+string(fd.Message().FullName())) - } // The previous implementation does not tag extension fields as proto3, // even when the field is defined in a proto3 file. Match that behavior // for consistency. diff --git a/vendor/google.golang.org/protobuf/internal/encoding/text/decode.go b/vendor/google.golang.org/protobuf/internal/encoding/text/decode.go index 099b2bf451..9aa7a9bb77 100644 --- a/vendor/google.golang.org/protobuf/internal/encoding/text/decode.go +++ b/vendor/google.golang.org/protobuf/internal/encoding/text/decode.go @@ -424,27 +424,34 @@ func (d *Decoder) parseFieldName() (tok Token, err error) { return Token{}, d.newSyntaxError("invalid field name: %s", errId(d.in)) } -// parseTypeName parses Any type URL or extension field name. The name is -// enclosed in [ and ] characters. The C++ parser does not handle many legal URL -// strings. This implementation is more liberal and allows for the pattern -// ^[-_a-zA-Z0-9]+([./][-_a-zA-Z0-9]+)*`). Whitespaces and comments are allowed -// in between [ ], '.', '/' and the sub names. +// parseTypeName parses an Any type URL or an extension field name. The name is +// enclosed in [ and ] characters. We allow almost arbitrary type URL prefixes, +// closely following the text-format spec [1,2]. We implement "ExtensionName | +// AnyName" as follows (with some exceptions for backwards compatibility): +// +// char = [-_a-zA-Z0-9] +// url_char = char | [.~!$&'()*+,;=] | "%", hex, hex +// +// Ident = char, { char } +// TypeName = Ident, { ".", Ident } ; +// UrlPrefix = url_char, { url_char | "/" } ; +// ExtensionName = "[", TypeName, "]" ; +// AnyName = "[", UrlPrefix, "/", TypeName, "]" ; +// +// Additionally, we allow arbitrary whitespace and comments between [ and ]. +// +// [1] https://protobuf.dev/reference/protobuf/textformat-spec/#characters +// [2] https://protobuf.dev/reference/protobuf/textformat-spec/#field-names func (d *Decoder) parseTypeName() (Token, error) { - startPos := len(d.orig) - len(d.in) // Use alias s to advance first in order to use d.in for error handling. - // Caller already checks for [ as first character. + // Caller already checks for [ as first character (d.in[0] == '['). s := consume(d.in[1:], 0) if len(s) == 0 { return Token{}, ErrUnexpectedEOF } + // Collect everything between [ and ] in name. var name []byte - for len(s) > 0 && isTypeNameChar(s[0]) { - name = append(name, s[0]) - s = s[1:] - } - s = consume(s, 0) - var closed bool for len(s) > 0 && !closed { switch { @@ -452,23 +459,20 @@ func (d *Decoder) parseTypeName() (Token, error) { s = s[1:] closed = true - case s[0] == '/', s[0] == '.': - if len(name) > 0 && (name[len(name)-1] == '/' || name[len(name)-1] == '.') { - return Token{}, d.newSyntaxError("invalid type URL/extension field name: %s", - d.orig[startPos:len(d.orig)-len(s)+1]) - } + case s[0] == '/' || isTypeNameChar(s[0]) || isUrlExtraChar(s[0]): name = append(name, s[0]) - s = s[1:] - s = consume(s, 0) - for len(s) > 0 && isTypeNameChar(s[0]) { - name = append(name, s[0]) - s = s[1:] + s = consume(s[1:], 0) + + // URL percent-encoded chars + case s[0] == '%': + if len(s) < 3 || !isHexChar(s[1]) || !isHexChar(s[2]) { + return Token{}, d.parseTypeNameError(s, 3) } - s = consume(s, 0) + name = append(name, s[0], s[1], s[2]) + s = consume(s[3:], 0) default: - return Token{}, d.newSyntaxError( - "invalid type URL/extension field name: %s", d.orig[startPos:len(d.orig)-len(s)+1]) + return Token{}, d.parseTypeNameError(s, 1) } } @@ -476,15 +480,38 @@ func (d *Decoder) parseTypeName() (Token, error) { return Token{}, ErrUnexpectedEOF } - // First character cannot be '.'. Last character cannot be '.' or '/'. - size := len(name) - if size == 0 || name[0] == '.' || name[size-1] == '.' || name[size-1] == '/' { - return Token{}, d.newSyntaxError("invalid type URL/extension field name: %s", - d.orig[startPos:len(d.orig)-len(s)]) + // Split collected name on last '/' into urlPrefix and typeName (if '/' is + // present). + typeName := name + if i := bytes.LastIndexByte(name, '/'); i != -1 { + urlPrefix := name[:i] + typeName = name[i+1:] + + // urlPrefix may be empty (for backwards compatibility). + // If non-empty, it must not start with '/'. + if len(urlPrefix) > 0 && urlPrefix[0] == '/' { + return Token{}, d.parseTypeNameError(s, 0) + } } + // typeName must not be empty (note: "" splits to [""]) and all identifier + // parts must not be empty. + for _, ident := range bytes.Split(typeName, []byte{'.'}) { + if len(ident) == 0 { + return Token{}, d.parseTypeNameError(s, 0) + } + } + + // typeName must not contain any percent-encoded or special URL chars. + for _, b := range typeName { + if b == '%' || (b != '.' && isUrlExtraChar(b)) { + return Token{}, d.parseTypeNameError(s, 0) + } + } + + startPos := len(d.orig) - len(d.in) + endPos := len(d.orig) - len(s) d.in = s - endPos := len(d.orig) - len(d.in) d.consume(0) return Token{ @@ -496,16 +523,32 @@ func (d *Decoder) parseTypeName() (Token, error) { }, nil } +func (d *Decoder) parseTypeNameError(s []byte, numUnconsumedChars int) error { + return d.newSyntaxError( + "invalid type URL/extension field name: %s", + d.in[:len(d.in)-len(s)+min(numUnconsumedChars, len(s))], + ) +} + +func isHexChar(b byte) bool { + return ('0' <= b && b <= '9') || + ('a' <= b && b <= 'f') || + ('A' <= b && b <= 'F') +} + func isTypeNameChar(b byte) bool { - return (b == '-' || b == '_' || + return b == '-' || b == '_' || ('0' <= b && b <= '9') || ('a' <= b && b <= 'z') || - ('A' <= b && b <= 'Z')) + ('A' <= b && b <= 'Z') } -func isWhiteSpace(b byte) bool { +// isUrlExtraChar complements isTypeNameChar with extra characters that we allow +// in URLs but not in type names. Note that '/' is not included so that it can +// be treated specially. +func isUrlExtraChar(b byte) bool { switch b { - case ' ', '\n', '\r', '\t': + case '.', '~', '!', '$', '&', '(', ')', '*', '+', ',', ';', '=': return true default: return false diff --git a/vendor/google.golang.org/protobuf/internal/errors/is_go112.go b/vendor/google.golang.org/protobuf/internal/errors/is_go112.go deleted file mode 100644 index fbcd349207..0000000000 --- a/vendor/google.golang.org/protobuf/internal/errors/is_go112.go +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright 2020 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build !go1.13 -// +build !go1.13 - -package errors - -import "reflect" - -// Is is a copy of Go 1.13's errors.Is for use with older Go versions. -func Is(err, target error) bool { - if target == nil { - return err == target - } - - isComparable := reflect.TypeOf(target).Comparable() - for { - if isComparable && err == target { - return true - } - if x, ok := err.(interface{ Is(error) bool }); ok && x.Is(target) { - return true - } - if err = unwrap(err); err == nil { - return false - } - } -} - -func unwrap(err error) error { - u, ok := err.(interface { - Unwrap() error - }) - if !ok { - return nil - } - return u.Unwrap() -} diff --git a/vendor/google.golang.org/protobuf/internal/errors/is_go113.go b/vendor/google.golang.org/protobuf/internal/errors/is_go113.go deleted file mode 100644 index 5e72f1cde9..0000000000 --- a/vendor/google.golang.org/protobuf/internal/errors/is_go113.go +++ /dev/null @@ -1,13 +0,0 @@ -// Copyright 2020 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build go1.13 -// +build go1.13 - -package errors - -import "errors" - -// Is is errors.Is. -func Is(err, target error) bool { return errors.Is(err, target) } diff --git a/vendor/google.golang.org/protobuf/internal/filedesc/desc.go b/vendor/google.golang.org/protobuf/internal/filedesc/desc.go index df53ff40b2..c775e5832f 100644 --- a/vendor/google.golang.org/protobuf/internal/filedesc/desc.go +++ b/vendor/google.golang.org/protobuf/internal/filedesc/desc.go @@ -19,7 +19,6 @@ import ( "google.golang.org/protobuf/internal/pragma" "google.golang.org/protobuf/internal/strs" "google.golang.org/protobuf/reflect/protoreflect" - "google.golang.org/protobuf/reflect/protoregistry" ) // Edition is an Enum for proto2.Edition @@ -32,6 +31,8 @@ const ( EditionProto2 Edition = 998 EditionProto3 Edition = 999 Edition2023 Edition = 1000 + Edition2024 Edition = 1001 + EditionUnstable Edition = 9999 EditionUnsupported Edition = 100000 ) @@ -72,36 +73,54 @@ type ( EditionFeatures EditionFeatures } FileL2 struct { - Options func() protoreflect.ProtoMessage - Imports FileImports - Locations SourceLocations + Options func() protoreflect.ProtoMessage + Imports FileImports + OptionImports func() protoreflect.FileImports + Locations SourceLocations } + // EditionFeatures is a frequently-instantiated struct, so please take care + // to minimize padding when adding new fields to this struct (add them in + // the right place/order). EditionFeatures struct { + // StripEnumPrefix determines if the plugin generates enum value + // constants as-is, with their prefix stripped, or both variants. + StripEnumPrefix int + // IsFieldPresence is true if field_presence is EXPLICIT // https://protobuf.dev/editions/features/#field_presence IsFieldPresence bool + // IsFieldPresence is true if field_presence is LEGACY_REQUIRED // https://protobuf.dev/editions/features/#field_presence IsLegacyRequired bool + // IsOpenEnum is true if enum_type is OPEN // https://protobuf.dev/editions/features/#enum_type IsOpenEnum bool + // IsPacked is true if repeated_field_encoding is PACKED // https://protobuf.dev/editions/features/#repeated_field_encoding IsPacked bool + // IsUTF8Validated is true if utf_validation is VERIFY // https://protobuf.dev/editions/features/#utf8_validation IsUTF8Validated bool + // IsDelimitedEncoded is true if message_encoding is DELIMITED // https://protobuf.dev/editions/features/#message_encoding IsDelimitedEncoded bool + // IsJSONCompliant is true if json_format is ALLOW // https://protobuf.dev/editions/features/#json_format IsJSONCompliant bool + // GenerateLegacyUnmarshalJSON determines if the plugin generates the // UnmarshalJSON([]byte) error method for enums. GenerateLegacyUnmarshalJSON bool + // APILevel controls which API (Open, Hybrid or Opaque) should be used + // for generated code (.pb.go files). + APILevel int } ) @@ -109,12 +128,9 @@ func (fd *File) ParentFile() protoreflect.FileDescriptor { return fd } func (fd *File) Parent() protoreflect.Descriptor { return nil } func (fd *File) Index() int { return 0 } func (fd *File) Syntax() protoreflect.Syntax { return fd.L1.Syntax } - -// Not exported and just used to reconstruct the original FileDescriptor proto -func (fd *File) Edition() int32 { return int32(fd.L1.Edition) } -func (fd *File) Name() protoreflect.Name { return fd.L1.Package.Name() } -func (fd *File) FullName() protoreflect.FullName { return fd.L1.Package } -func (fd *File) IsPlaceholder() bool { return false } +func (fd *File) Name() protoreflect.Name { return fd.L1.Package.Name() } +func (fd *File) FullName() protoreflect.FullName { return fd.L1.Package } +func (fd *File) IsPlaceholder() bool { return false } func (fd *File) Options() protoreflect.ProtoMessage { if f := fd.lazyInit().Options; f != nil { return f() @@ -133,6 +149,16 @@ func (fd *File) Format(s fmt.State, r rune) { descfmt.FormatD func (fd *File) ProtoType(protoreflect.FileDescriptor) {} func (fd *File) ProtoInternal(pragma.DoNotImplement) {} +// The next two are not part of the FileDescriptor interface. They are just used to reconstruct +// the original FileDescriptor proto. +func (fd *File) Edition() int32 { return int32(fd.L1.Edition) } +func (fd *File) OptionImports() protoreflect.FileImports { + if f := fd.lazyInit().OptionImports; f != nil { + return f() + } + return emptyFiles +} + func (fd *File) lazyInit() *FileL2 { if atomic.LoadUint32(&fd.once) == 0 { fd.lazyInitOnce() @@ -165,9 +191,9 @@ type ( L2 *EnumL2 // protected by fileDesc.once } EnumL1 struct { - eagerValues bool // controls whether EnumL2.Values is already populated - EditionFeatures EditionFeatures + Visibility int32 + eagerValues bool // controls whether EnumL2.Values is already populated } EnumL2 struct { Options func() protoreflect.ProtoMessage @@ -202,6 +228,11 @@ func (ed *Enum) ReservedNames() protoreflect.Names { return &ed.lazyInit() func (ed *Enum) ReservedRanges() protoreflect.EnumRanges { return &ed.lazyInit().ReservedRanges } func (ed *Enum) Format(s fmt.State, r rune) { descfmt.FormatDesc(s, r, ed) } func (ed *Enum) ProtoType(protoreflect.EnumDescriptor) {} + +// This is not part of the EnumDescriptor interface. It is just used to reconstruct +// the original FileDescriptor proto. +func (ed *Enum) Visibility() int32 { return ed.L1.Visibility } + func (ed *Enum) lazyInit() *EnumL2 { ed.L0.ParentFile.lazyInit() // implicitly initializes L2 return ed.L2 @@ -227,13 +258,13 @@ type ( L2 *MessageL2 // protected by fileDesc.once } MessageL1 struct { - Enums Enums - Messages Messages - Extensions Extensions - IsMapEntry bool // promoted from google.protobuf.MessageOptions - IsMessageSet bool // promoted from google.protobuf.MessageOptions - + Enums Enums + Messages Messages + Extensions Extensions EditionFeatures EditionFeatures + Visibility int32 + IsMapEntry bool // promoted from google.protobuf.MessageOptions + IsMessageSet bool // promoted from google.protobuf.MessageOptions } MessageL2 struct { Options func() protoreflect.ProtoMessage @@ -257,7 +288,7 @@ type ( Kind protoreflect.Kind StringName stringName IsProto3Optional bool // promoted from google.protobuf.FieldDescriptorProto - IsWeak bool // promoted from google.protobuf.FieldOptions + IsLazy bool // promoted from google.protobuf.FieldOptions Default defaultValue ContainingOneof protoreflect.OneofDescriptor // must be consistent with Message.Oneofs.Fields Enum protoreflect.EnumDescriptor @@ -302,6 +333,11 @@ func (md *Message) Messages() protoreflect.MessageDescriptors { return &md.L func (md *Message) Extensions() protoreflect.ExtensionDescriptors { return &md.L1.Extensions } func (md *Message) ProtoType(protoreflect.MessageDescriptor) {} func (md *Message) Format(s fmt.State, r rune) { descfmt.FormatDesc(s, r, md) } + +// This is not part of the MessageDescriptor interface. It is just used to reconstruct +// the original FileDescriptor proto. +func (md *Message) Visibility() int32 { return md.L1.Visibility } + func (md *Message) lazyInit() *MessageL2 { md.L0.ParentFile.lazyInit() // implicitly initializes L2 return md.L2 @@ -350,7 +386,8 @@ func (fd *Field) IsPacked() bool { return fd.L1.EditionFeatures.IsPacked } func (fd *Field) IsExtension() bool { return false } -func (fd *Field) IsWeak() bool { return fd.L1.IsWeak } +func (fd *Field) IsWeak() bool { return false } +func (fd *Field) IsLazy() bool { return fd.L1.IsLazy } func (fd *Field) IsList() bool { return fd.Cardinality() == protoreflect.Repeated && !fd.IsMap() } func (fd *Field) IsMap() bool { return fd.Message() != nil && fd.Message().IsMapEntry() } func (fd *Field) MapKey() protoreflect.FieldDescriptor { @@ -376,11 +413,6 @@ func (fd *Field) Enum() protoreflect.EnumDescriptor { return fd.L1.Enum } func (fd *Field) Message() protoreflect.MessageDescriptor { - if fd.L1.IsWeak { - if d, _ := protoregistry.GlobalFiles.FindDescriptorByName(fd.L1.Message.FullName()); d != nil { - return d.(protoreflect.MessageDescriptor) - } - } return fd.L1.Message } func (fd *Field) IsMapEntry() bool { @@ -425,6 +457,7 @@ type ( Extendee protoreflect.MessageDescriptor Cardinality protoreflect.Cardinality Kind protoreflect.Kind + IsLazy bool EditionFeatures EditionFeatures } ExtensionL2 struct { @@ -465,6 +498,7 @@ func (xd *Extension) IsPacked() bool { } func (xd *Extension) IsExtension() bool { return true } func (xd *Extension) IsWeak() bool { return false } +func (xd *Extension) IsLazy() bool { return xd.L1.IsLazy } func (xd *Extension) IsList() bool { return xd.Cardinality() == protoreflect.Repeated } func (xd *Extension) IsMap() bool { return false } func (xd *Extension) MapKey() protoreflect.FieldDescriptor { return nil } diff --git a/vendor/google.golang.org/protobuf/internal/filedesc/desc_init.go b/vendor/google.golang.org/protobuf/internal/filedesc/desc_init.go index 8a57d60b08..e91860f5a2 100644 --- a/vendor/google.golang.org/protobuf/internal/filedesc/desc_init.go +++ b/vendor/google.golang.org/protobuf/internal/filedesc/desc_init.go @@ -284,6 +284,13 @@ func (ed *Enum) unmarshalSeed(b []byte, sb *strs.Builder, pf *File, pd protorefl case genid.EnumDescriptorProto_Value_field_number: numValues++ } + case protowire.VarintType: + v, m := protowire.ConsumeVarint(b) + b = b[m:] + switch num { + case genid.EnumDescriptorProto_Visibility_field_number: + ed.L1.Visibility = int32(v) + } default: m := protowire.ConsumeFieldValue(num, typ, b) b = b[m:] @@ -365,6 +372,13 @@ func (md *Message) unmarshalSeed(b []byte, sb *strs.Builder, pf *File, pd protor md.unmarshalSeedOptions(v) } prevField = num + case protowire.VarintType: + v, m := protowire.ConsumeVarint(b) + b = b[m:] + switch num { + case genid.DescriptorProto_Visibility_field_number: + md.L1.Visibility = int32(v) + } default: m := protowire.ConsumeFieldValue(num, typ, b) b = b[m:] @@ -495,6 +509,8 @@ func (xd *Extension) unmarshalOptions(b []byte) { switch num { case genid.FieldOptions_Packed_field_number: xd.L1.EditionFeatures.IsPacked = protowire.DecodeBool(v) + case genid.FieldOptions_Lazy_field_number: + xd.L1.IsLazy = protowire.DecodeBool(v) } case protowire.BytesType: v, m := protowire.ConsumeBytes(b) diff --git a/vendor/google.golang.org/protobuf/internal/filedesc/desc_lazy.go b/vendor/google.golang.org/protobuf/internal/filedesc/desc_lazy.go index e56c91a8db..78f02b1b49 100644 --- a/vendor/google.golang.org/protobuf/internal/filedesc/desc_lazy.go +++ b/vendor/google.golang.org/protobuf/internal/filedesc/desc_lazy.go @@ -32,11 +32,6 @@ func (file *File) resolveMessages() { for j := range md.L2.Fields.List { fd := &md.L2.Fields.List[j] - // Weak fields are resolved upon actual use. - if fd.L1.IsWeak { - continue - } - // Resolve message field dependency. switch fd.L1.Kind { case protoreflect.EnumKind: @@ -139,6 +134,7 @@ func (fd *File) unmarshalFull(b []byte) { var enumIdx, messageIdx, extensionIdx, serviceIdx int var rawOptions []byte + var optionImports []string fd.L2 = new(FileL2) for len(b) > 0 { num, typ, n := protowire.ConsumeTag(b) @@ -150,8 +146,6 @@ func (fd *File) unmarshalFull(b []byte) { switch num { case genid.FileDescriptorProto_PublicDependency_field_number: fd.L2.Imports[v].IsPublic = true - case genid.FileDescriptorProto_WeakDependency_field_number: - fd.L2.Imports[v].IsWeak = true } case protowire.BytesType: v, m := protowire.ConsumeBytes(b) @@ -164,6 +158,8 @@ func (fd *File) unmarshalFull(b []byte) { imp = PlaceholderFile(path) } fd.L2.Imports = append(fd.L2.Imports, protoreflect.FileImport{FileDescriptor: imp}) + case genid.FileDescriptorProto_OptionDependency_field_number: + optionImports = append(optionImports, sb.MakeString(v)) case genid.FileDescriptorProto_EnumType_field_number: fd.L1.Enums.List[enumIdx].unmarshalFull(v, sb) enumIdx++ @@ -185,6 +181,23 @@ func (fd *File) unmarshalFull(b []byte) { } } fd.L2.Options = fd.builder.optionsUnmarshaler(&descopts.File, rawOptions) + if len(optionImports) > 0 { + var imps FileImports + var once sync.Once + fd.L2.OptionImports = func() protoreflect.FileImports { + once.Do(func() { + imps = make(FileImports, len(optionImports)) + for i, path := range optionImports { + imp, _ := fd.builder.FileRegistry.FindFileByPath(path) + if imp == nil { + imp = PlaceholderFile(path) + } + imps[i] = protoreflect.FileImport{FileDescriptor: imp} + } + }) + return &imps + } + } } func (ed *Enum) unmarshalFull(b []byte, sb *strs.Builder) { @@ -317,7 +330,6 @@ func (md *Message) unmarshalFull(b []byte, sb *strs.Builder) { md.L1.Extensions.List[extensionIdx].unmarshalFull(v, sb) extensionIdx++ case genid.DescriptorProto_Options_field_number: - md.unmarshalOptions(v) rawOptions = appendOptions(rawOptions, v) } default: @@ -343,27 +355,6 @@ func (md *Message) unmarshalFull(b []byte, sb *strs.Builder) { md.L2.Options = md.L0.ParentFile.builder.optionsUnmarshaler(&descopts.Message, rawOptions) } -func (md *Message) unmarshalOptions(b []byte) { - for len(b) > 0 { - num, typ, n := protowire.ConsumeTag(b) - b = b[n:] - switch typ { - case protowire.VarintType: - v, m := protowire.ConsumeVarint(b) - b = b[m:] - switch num { - case genid.MessageOptions_MapEntry_field_number: - md.L1.IsMapEntry = protowire.DecodeBool(v) - case genid.MessageOptions_MessageSetWireFormat_field_number: - md.L1.IsMessageSet = protowire.DecodeBool(v) - } - default: - m := protowire.ConsumeFieldValue(num, typ, b) - b = b[m:] - } - } -} - func unmarshalMessageReservedRange(b []byte) (r [2]protoreflect.FieldNumber) { for len(b) > 0 { num, typ, n := protowire.ConsumeTag(b) @@ -502,8 +493,8 @@ func (fd *Field) unmarshalOptions(b []byte) { switch num { case genid.FieldOptions_Packed_field_number: fd.L1.EditionFeatures.IsPacked = protowire.DecodeBool(v) - case genid.FieldOptions_Weak_field_number: - fd.L1.IsWeak = protowire.DecodeBool(v) + case genid.FieldOptions_Lazy_field_number: + fd.L1.IsLazy = protowire.DecodeBool(v) case FieldOptions_EnforceUTF8: fd.L1.EditionFeatures.IsUTF8Validated = protowire.DecodeBool(v) } diff --git a/vendor/google.golang.org/protobuf/internal/filedesc/editions.go b/vendor/google.golang.org/protobuf/internal/filedesc/editions.go index 11f5f356b6..66ba906806 100644 --- a/vendor/google.golang.org/protobuf/internal/filedesc/editions.go +++ b/vendor/google.golang.org/protobuf/internal/filedesc/editions.go @@ -13,8 +13,10 @@ import ( "google.golang.org/protobuf/reflect/protoreflect" ) -var defaultsCache = make(map[Edition]EditionFeatures) -var defaultsKeys = []Edition{} +var ( + defaultsCache = make(map[Edition]EditionFeatures) + defaultsKeys = []Edition{} +) func init() { unmarshalEditionDefaults(editiondefaults.Defaults) @@ -32,8 +34,16 @@ func unmarshalGoFeature(b []byte, parent EditionFeatures) EditionFeatures { v, m := protowire.ConsumeVarint(b) b = b[m:] parent.GenerateLegacyUnmarshalJSON = protowire.DecodeBool(v) + case genid.GoFeatures_ApiLevel_field_number: + v, m := protowire.ConsumeVarint(b) + b = b[m:] + parent.APILevel = int(v) + case genid.GoFeatures_StripEnumPrefix_field_number: + v, m := protowire.ConsumeVarint(b) + b = b[m:] + parent.StripEnumPrefix = int(v) default: - panic(fmt.Sprintf("unkown field number %d while unmarshalling GoFeatures", num)) + panic(fmt.Sprintf("unknown field number %d while unmarshalling GoFeatures", num)) } } return parent @@ -61,14 +71,20 @@ func unmarshalFeatureSet(b []byte, parent EditionFeatures) EditionFeatures { parent.IsDelimitedEncoded = v == genid.FeatureSet_DELIMITED_enum_value case genid.FeatureSet_JsonFormat_field_number: parent.IsJSONCompliant = v == genid.FeatureSet_ALLOW_enum_value + case genid.FeatureSet_EnforceNamingStyle_field_number: + // EnforceNamingStyle is enforced in protoc, languages other than C++ + // are not supposed to do anything with this feature. + case genid.FeatureSet_DefaultSymbolVisibility_field_number: + // DefaultSymbolVisibility is enforced in protoc, runtimes should not + // inspect this value. default: - panic(fmt.Sprintf("unkown field number %d while unmarshalling FeatureSet", num)) + panic(fmt.Sprintf("unknown field number %d while unmarshalling FeatureSet", num)) } case protowire.BytesType: v, m := protowire.ConsumeBytes(b) b = b[m:] switch num { - case genid.GoFeatures_LegacyUnmarshalJsonEnum_field_number: + case genid.FeatureSet_Go_ext_number: parent = unmarshalGoFeature(v, parent) } } @@ -136,7 +152,7 @@ func unmarshalEditionDefaults(b []byte) { _, m := protowire.ConsumeVarint(b) b = b[m:] default: - panic(fmt.Sprintf("unkown field number %d while unmarshalling EditionDefault", num)) + panic(fmt.Sprintf("unknown field number %d while unmarshalling EditionDefault", num)) } } } diff --git a/vendor/google.golang.org/protobuf/internal/filedesc/presence.go b/vendor/google.golang.org/protobuf/internal/filedesc/presence.go new file mode 100644 index 0000000000..a12ec9791c --- /dev/null +++ b/vendor/google.golang.org/protobuf/internal/filedesc/presence.go @@ -0,0 +1,33 @@ +// Copyright 2025 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package filedesc + +import "google.golang.org/protobuf/reflect/protoreflect" + +// UsePresenceForField reports whether the presence bitmap should be used for +// the specified field. +func UsePresenceForField(fd protoreflect.FieldDescriptor) (usePresence, canBeLazy bool) { + switch { + case fd.ContainingOneof() != nil && !fd.ContainingOneof().IsSynthetic(): + // Oneof fields never use the presence bitmap. + // + // Synthetic oneofs are an exception: Those are used to implement proto3 + // optional fields and hence should follow non-oneof field semantics. + return false, false + + case fd.IsMap(): + // Map-typed fields never use the presence bitmap. + return false, false + + case fd.Kind() == protoreflect.MessageKind || fd.Kind() == protoreflect.GroupKind: + // Lazy fields always use the presence bitmap (only messages can be lazy). + isLazy := fd.(interface{ IsLazy() bool }).IsLazy() + return isLazy, isLazy + + default: + // If the field has presence, use the presence bitmap. + return fd.HasPresence(), false + } +} diff --git a/vendor/google.golang.org/protobuf/internal/filetype/build.go b/vendor/google.golang.org/protobuf/internal/filetype/build.go index ba83fea44c..e1b4130bd2 100644 --- a/vendor/google.golang.org/protobuf/internal/filetype/build.go +++ b/vendor/google.golang.org/protobuf/internal/filetype/build.go @@ -63,7 +63,7 @@ type Builder struct { // message declarations in "flattened ordering". // // Dependencies are Go types for enums or messages referenced by - // message fields (excluding weak fields), for parent extended messages of + // message fields, for parent extended messages of // extension fields, for enums or messages referenced by extension fields, // and for input and output messages referenced by service methods. // Dependencies must come after declarations, but the ordering of diff --git a/vendor/google.golang.org/protobuf/internal/flags/flags.go b/vendor/google.golang.org/protobuf/internal/flags/flags.go index 58372dd348..a06ccabc2f 100644 --- a/vendor/google.golang.org/protobuf/internal/flags/flags.go +++ b/vendor/google.golang.org/protobuf/internal/flags/flags.go @@ -6,7 +6,7 @@ package flags // ProtoLegacy specifies whether to enable support for legacy functionality -// such as MessageSets, weak fields, and various other obscure behavior +// such as MessageSets, and various other obscure behavior // that is necessary to maintain backwards compatibility with proto1 or // the pre-release variants of proto2 and proto3. // diff --git a/vendor/google.golang.org/protobuf/internal/genid/api_gen.go b/vendor/google.golang.org/protobuf/internal/genid/api_gen.go index df8f918501..3ceb6fa7f5 100644 --- a/vendor/google.golang.org/protobuf/internal/genid/api_gen.go +++ b/vendor/google.golang.org/protobuf/internal/genid/api_gen.go @@ -27,6 +27,7 @@ const ( Api_SourceContext_field_name protoreflect.Name = "source_context" Api_Mixins_field_name protoreflect.Name = "mixins" Api_Syntax_field_name protoreflect.Name = "syntax" + Api_Edition_field_name protoreflect.Name = "edition" Api_Name_field_fullname protoreflect.FullName = "google.protobuf.Api.name" Api_Methods_field_fullname protoreflect.FullName = "google.protobuf.Api.methods" @@ -35,6 +36,7 @@ const ( Api_SourceContext_field_fullname protoreflect.FullName = "google.protobuf.Api.source_context" Api_Mixins_field_fullname protoreflect.FullName = "google.protobuf.Api.mixins" Api_Syntax_field_fullname protoreflect.FullName = "google.protobuf.Api.syntax" + Api_Edition_field_fullname protoreflect.FullName = "google.protobuf.Api.edition" ) // Field numbers for google.protobuf.Api. @@ -46,6 +48,7 @@ const ( Api_SourceContext_field_number protoreflect.FieldNumber = 5 Api_Mixins_field_number protoreflect.FieldNumber = 6 Api_Syntax_field_number protoreflect.FieldNumber = 7 + Api_Edition_field_number protoreflect.FieldNumber = 8 ) // Names for google.protobuf.Method. @@ -63,6 +66,7 @@ const ( Method_ResponseStreaming_field_name protoreflect.Name = "response_streaming" Method_Options_field_name protoreflect.Name = "options" Method_Syntax_field_name protoreflect.Name = "syntax" + Method_Edition_field_name protoreflect.Name = "edition" Method_Name_field_fullname protoreflect.FullName = "google.protobuf.Method.name" Method_RequestTypeUrl_field_fullname protoreflect.FullName = "google.protobuf.Method.request_type_url" @@ -71,6 +75,7 @@ const ( Method_ResponseStreaming_field_fullname protoreflect.FullName = "google.protobuf.Method.response_streaming" Method_Options_field_fullname protoreflect.FullName = "google.protobuf.Method.options" Method_Syntax_field_fullname protoreflect.FullName = "google.protobuf.Method.syntax" + Method_Edition_field_fullname protoreflect.FullName = "google.protobuf.Method.edition" ) // Field numbers for google.protobuf.Method. @@ -82,6 +87,7 @@ const ( Method_ResponseStreaming_field_number protoreflect.FieldNumber = 5 Method_Options_field_number protoreflect.FieldNumber = 6 Method_Syntax_field_number protoreflect.FieldNumber = 7 + Method_Edition_field_number protoreflect.FieldNumber = 8 ) // Names for google.protobuf.Mixin. diff --git a/vendor/google.golang.org/protobuf/internal/genid/descriptor_gen.go b/vendor/google.golang.org/protobuf/internal/genid/descriptor_gen.go index f30ab6b586..65aaf4d210 100644 --- a/vendor/google.golang.org/protobuf/internal/genid/descriptor_gen.go +++ b/vendor/google.golang.org/protobuf/internal/genid/descriptor_gen.go @@ -26,6 +26,7 @@ const ( Edition_EDITION_PROTO3_enum_value = 999 Edition_EDITION_2023_enum_value = 1000 Edition_EDITION_2024_enum_value = 1001 + Edition_EDITION_UNSTABLE_enum_value = 9999 Edition_EDITION_1_TEST_ONLY_enum_value = 1 Edition_EDITION_2_TEST_ONLY_enum_value = 2 Edition_EDITION_99997_TEST_ONLY_enum_value = 99997 @@ -34,6 +35,19 @@ const ( Edition_EDITION_MAX_enum_value = 2147483647 ) +// Full and short names for google.protobuf.SymbolVisibility. +const ( + SymbolVisibility_enum_fullname = "google.protobuf.SymbolVisibility" + SymbolVisibility_enum_name = "SymbolVisibility" +) + +// Enum values for google.protobuf.SymbolVisibility. +const ( + SymbolVisibility_VISIBILITY_UNSET_enum_value = 0 + SymbolVisibility_VISIBILITY_LOCAL_enum_value = 1 + SymbolVisibility_VISIBILITY_EXPORT_enum_value = 2 +) + // Names for google.protobuf.FileDescriptorSet. const ( FileDescriptorSet_message_name protoreflect.Name = "FileDescriptorSet" @@ -65,6 +79,7 @@ const ( FileDescriptorProto_Dependency_field_name protoreflect.Name = "dependency" FileDescriptorProto_PublicDependency_field_name protoreflect.Name = "public_dependency" FileDescriptorProto_WeakDependency_field_name protoreflect.Name = "weak_dependency" + FileDescriptorProto_OptionDependency_field_name protoreflect.Name = "option_dependency" FileDescriptorProto_MessageType_field_name protoreflect.Name = "message_type" FileDescriptorProto_EnumType_field_name protoreflect.Name = "enum_type" FileDescriptorProto_Service_field_name protoreflect.Name = "service" @@ -79,6 +94,7 @@ const ( FileDescriptorProto_Dependency_field_fullname protoreflect.FullName = "google.protobuf.FileDescriptorProto.dependency" FileDescriptorProto_PublicDependency_field_fullname protoreflect.FullName = "google.protobuf.FileDescriptorProto.public_dependency" FileDescriptorProto_WeakDependency_field_fullname protoreflect.FullName = "google.protobuf.FileDescriptorProto.weak_dependency" + FileDescriptorProto_OptionDependency_field_fullname protoreflect.FullName = "google.protobuf.FileDescriptorProto.option_dependency" FileDescriptorProto_MessageType_field_fullname protoreflect.FullName = "google.protobuf.FileDescriptorProto.message_type" FileDescriptorProto_EnumType_field_fullname protoreflect.FullName = "google.protobuf.FileDescriptorProto.enum_type" FileDescriptorProto_Service_field_fullname protoreflect.FullName = "google.protobuf.FileDescriptorProto.service" @@ -96,6 +112,7 @@ const ( FileDescriptorProto_Dependency_field_number protoreflect.FieldNumber = 3 FileDescriptorProto_PublicDependency_field_number protoreflect.FieldNumber = 10 FileDescriptorProto_WeakDependency_field_number protoreflect.FieldNumber = 11 + FileDescriptorProto_OptionDependency_field_number protoreflect.FieldNumber = 15 FileDescriptorProto_MessageType_field_number protoreflect.FieldNumber = 4 FileDescriptorProto_EnumType_field_number protoreflect.FieldNumber = 5 FileDescriptorProto_Service_field_number protoreflect.FieldNumber = 6 @@ -124,6 +141,7 @@ const ( DescriptorProto_Options_field_name protoreflect.Name = "options" DescriptorProto_ReservedRange_field_name protoreflect.Name = "reserved_range" DescriptorProto_ReservedName_field_name protoreflect.Name = "reserved_name" + DescriptorProto_Visibility_field_name protoreflect.Name = "visibility" DescriptorProto_Name_field_fullname protoreflect.FullName = "google.protobuf.DescriptorProto.name" DescriptorProto_Field_field_fullname protoreflect.FullName = "google.protobuf.DescriptorProto.field" @@ -135,6 +153,7 @@ const ( DescriptorProto_Options_field_fullname protoreflect.FullName = "google.protobuf.DescriptorProto.options" DescriptorProto_ReservedRange_field_fullname protoreflect.FullName = "google.protobuf.DescriptorProto.reserved_range" DescriptorProto_ReservedName_field_fullname protoreflect.FullName = "google.protobuf.DescriptorProto.reserved_name" + DescriptorProto_Visibility_field_fullname protoreflect.FullName = "google.protobuf.DescriptorProto.visibility" ) // Field numbers for google.protobuf.DescriptorProto. @@ -149,6 +168,7 @@ const ( DescriptorProto_Options_field_number protoreflect.FieldNumber = 7 DescriptorProto_ReservedRange_field_number protoreflect.FieldNumber = 9 DescriptorProto_ReservedName_field_number protoreflect.FieldNumber = 10 + DescriptorProto_Visibility_field_number protoreflect.FieldNumber = 11 ) // Names for google.protobuf.DescriptorProto.ExtensionRange. @@ -388,12 +408,14 @@ const ( EnumDescriptorProto_Options_field_name protoreflect.Name = "options" EnumDescriptorProto_ReservedRange_field_name protoreflect.Name = "reserved_range" EnumDescriptorProto_ReservedName_field_name protoreflect.Name = "reserved_name" + EnumDescriptorProto_Visibility_field_name protoreflect.Name = "visibility" EnumDescriptorProto_Name_field_fullname protoreflect.FullName = "google.protobuf.EnumDescriptorProto.name" EnumDescriptorProto_Value_field_fullname protoreflect.FullName = "google.protobuf.EnumDescriptorProto.value" EnumDescriptorProto_Options_field_fullname protoreflect.FullName = "google.protobuf.EnumDescriptorProto.options" EnumDescriptorProto_ReservedRange_field_fullname protoreflect.FullName = "google.protobuf.EnumDescriptorProto.reserved_range" EnumDescriptorProto_ReservedName_field_fullname protoreflect.FullName = "google.protobuf.EnumDescriptorProto.reserved_name" + EnumDescriptorProto_Visibility_field_fullname protoreflect.FullName = "google.protobuf.EnumDescriptorProto.visibility" ) // Field numbers for google.protobuf.EnumDescriptorProto. @@ -403,6 +425,7 @@ const ( EnumDescriptorProto_Options_field_number protoreflect.FieldNumber = 3 EnumDescriptorProto_ReservedRange_field_number protoreflect.FieldNumber = 4 EnumDescriptorProto_ReservedName_field_number protoreflect.FieldNumber = 5 + EnumDescriptorProto_Visibility_field_number protoreflect.FieldNumber = 6 ) // Names for google.protobuf.EnumDescriptorProto.EnumReservedRange. @@ -1008,29 +1031,35 @@ const ( // Field names for google.protobuf.FeatureSet. const ( - FeatureSet_FieldPresence_field_name protoreflect.Name = "field_presence" - FeatureSet_EnumType_field_name protoreflect.Name = "enum_type" - FeatureSet_RepeatedFieldEncoding_field_name protoreflect.Name = "repeated_field_encoding" - FeatureSet_Utf8Validation_field_name protoreflect.Name = "utf8_validation" - FeatureSet_MessageEncoding_field_name protoreflect.Name = "message_encoding" - FeatureSet_JsonFormat_field_name protoreflect.Name = "json_format" - - FeatureSet_FieldPresence_field_fullname protoreflect.FullName = "google.protobuf.FeatureSet.field_presence" - FeatureSet_EnumType_field_fullname protoreflect.FullName = "google.protobuf.FeatureSet.enum_type" - FeatureSet_RepeatedFieldEncoding_field_fullname protoreflect.FullName = "google.protobuf.FeatureSet.repeated_field_encoding" - FeatureSet_Utf8Validation_field_fullname protoreflect.FullName = "google.protobuf.FeatureSet.utf8_validation" - FeatureSet_MessageEncoding_field_fullname protoreflect.FullName = "google.protobuf.FeatureSet.message_encoding" - FeatureSet_JsonFormat_field_fullname protoreflect.FullName = "google.protobuf.FeatureSet.json_format" + FeatureSet_FieldPresence_field_name protoreflect.Name = "field_presence" + FeatureSet_EnumType_field_name protoreflect.Name = "enum_type" + FeatureSet_RepeatedFieldEncoding_field_name protoreflect.Name = "repeated_field_encoding" + FeatureSet_Utf8Validation_field_name protoreflect.Name = "utf8_validation" + FeatureSet_MessageEncoding_field_name protoreflect.Name = "message_encoding" + FeatureSet_JsonFormat_field_name protoreflect.Name = "json_format" + FeatureSet_EnforceNamingStyle_field_name protoreflect.Name = "enforce_naming_style" + FeatureSet_DefaultSymbolVisibility_field_name protoreflect.Name = "default_symbol_visibility" + + FeatureSet_FieldPresence_field_fullname protoreflect.FullName = "google.protobuf.FeatureSet.field_presence" + FeatureSet_EnumType_field_fullname protoreflect.FullName = "google.protobuf.FeatureSet.enum_type" + FeatureSet_RepeatedFieldEncoding_field_fullname protoreflect.FullName = "google.protobuf.FeatureSet.repeated_field_encoding" + FeatureSet_Utf8Validation_field_fullname protoreflect.FullName = "google.protobuf.FeatureSet.utf8_validation" + FeatureSet_MessageEncoding_field_fullname protoreflect.FullName = "google.protobuf.FeatureSet.message_encoding" + FeatureSet_JsonFormat_field_fullname protoreflect.FullName = "google.protobuf.FeatureSet.json_format" + FeatureSet_EnforceNamingStyle_field_fullname protoreflect.FullName = "google.protobuf.FeatureSet.enforce_naming_style" + FeatureSet_DefaultSymbolVisibility_field_fullname protoreflect.FullName = "google.protobuf.FeatureSet.default_symbol_visibility" ) // Field numbers for google.protobuf.FeatureSet. const ( - FeatureSet_FieldPresence_field_number protoreflect.FieldNumber = 1 - FeatureSet_EnumType_field_number protoreflect.FieldNumber = 2 - FeatureSet_RepeatedFieldEncoding_field_number protoreflect.FieldNumber = 3 - FeatureSet_Utf8Validation_field_number protoreflect.FieldNumber = 4 - FeatureSet_MessageEncoding_field_number protoreflect.FieldNumber = 5 - FeatureSet_JsonFormat_field_number protoreflect.FieldNumber = 6 + FeatureSet_FieldPresence_field_number protoreflect.FieldNumber = 1 + FeatureSet_EnumType_field_number protoreflect.FieldNumber = 2 + FeatureSet_RepeatedFieldEncoding_field_number protoreflect.FieldNumber = 3 + FeatureSet_Utf8Validation_field_number protoreflect.FieldNumber = 4 + FeatureSet_MessageEncoding_field_number protoreflect.FieldNumber = 5 + FeatureSet_JsonFormat_field_number protoreflect.FieldNumber = 6 + FeatureSet_EnforceNamingStyle_field_number protoreflect.FieldNumber = 7 + FeatureSet_DefaultSymbolVisibility_field_number protoreflect.FieldNumber = 8 ) // Full and short names for google.protobuf.FeatureSet.FieldPresence. @@ -1112,6 +1141,40 @@ const ( FeatureSet_LEGACY_BEST_EFFORT_enum_value = 2 ) +// Full and short names for google.protobuf.FeatureSet.EnforceNamingStyle. +const ( + FeatureSet_EnforceNamingStyle_enum_fullname = "google.protobuf.FeatureSet.EnforceNamingStyle" + FeatureSet_EnforceNamingStyle_enum_name = "EnforceNamingStyle" +) + +// Enum values for google.protobuf.FeatureSet.EnforceNamingStyle. +const ( + FeatureSet_ENFORCE_NAMING_STYLE_UNKNOWN_enum_value = 0 + FeatureSet_STYLE2024_enum_value = 1 + FeatureSet_STYLE_LEGACY_enum_value = 2 +) + +// Names for google.protobuf.FeatureSet.VisibilityFeature. +const ( + FeatureSet_VisibilityFeature_message_name protoreflect.Name = "VisibilityFeature" + FeatureSet_VisibilityFeature_message_fullname protoreflect.FullName = "google.protobuf.FeatureSet.VisibilityFeature" +) + +// Full and short names for google.protobuf.FeatureSet.VisibilityFeature.DefaultSymbolVisibility. +const ( + FeatureSet_VisibilityFeature_DefaultSymbolVisibility_enum_fullname = "google.protobuf.FeatureSet.VisibilityFeature.DefaultSymbolVisibility" + FeatureSet_VisibilityFeature_DefaultSymbolVisibility_enum_name = "DefaultSymbolVisibility" +) + +// Enum values for google.protobuf.FeatureSet.VisibilityFeature.DefaultSymbolVisibility. +const ( + FeatureSet_VisibilityFeature_DEFAULT_SYMBOL_VISIBILITY_UNKNOWN_enum_value = 0 + FeatureSet_VisibilityFeature_EXPORT_ALL_enum_value = 1 + FeatureSet_VisibilityFeature_EXPORT_TOP_LEVEL_enum_value = 2 + FeatureSet_VisibilityFeature_LOCAL_ALL_enum_value = 3 + FeatureSet_VisibilityFeature_STRICT_enum_value = 4 +) + // Names for google.protobuf.FeatureSetDefaults. const ( FeatureSetDefaults_message_name protoreflect.Name = "FeatureSetDefaults" diff --git a/vendor/google.golang.org/protobuf/internal/genid/doc.go b/vendor/google.golang.org/protobuf/internal/genid/doc.go index 45ccd01211..d9b9d916a2 100644 --- a/vendor/google.golang.org/protobuf/internal/genid/doc.go +++ b/vendor/google.golang.org/protobuf/internal/genid/doc.go @@ -6,6 +6,6 @@ // and the well-known types. package genid -import protoreflect "google.golang.org/protobuf/reflect/protoreflect" +import "google.golang.org/protobuf/reflect/protoreflect" const GoogleProtobuf_package protoreflect.FullName = "google.protobuf" diff --git a/vendor/google.golang.org/protobuf/internal/genid/go_features_gen.go b/vendor/google.golang.org/protobuf/internal/genid/go_features_gen.go index 9a652a2b42..f5ee7f5c2b 100644 --- a/vendor/google.golang.org/protobuf/internal/genid/go_features_gen.go +++ b/vendor/google.golang.org/protobuf/internal/genid/go_features_gen.go @@ -12,20 +12,59 @@ import ( const File_google_protobuf_go_features_proto = "google/protobuf/go_features.proto" -// Names for google.protobuf.GoFeatures. +// Names for pb.GoFeatures. const ( GoFeatures_message_name protoreflect.Name = "GoFeatures" - GoFeatures_message_fullname protoreflect.FullName = "google.protobuf.GoFeatures" + GoFeatures_message_fullname protoreflect.FullName = "pb.GoFeatures" ) -// Field names for google.protobuf.GoFeatures. +// Field names for pb.GoFeatures. const ( GoFeatures_LegacyUnmarshalJsonEnum_field_name protoreflect.Name = "legacy_unmarshal_json_enum" + GoFeatures_ApiLevel_field_name protoreflect.Name = "api_level" + GoFeatures_StripEnumPrefix_field_name protoreflect.Name = "strip_enum_prefix" - GoFeatures_LegacyUnmarshalJsonEnum_field_fullname protoreflect.FullName = "google.protobuf.GoFeatures.legacy_unmarshal_json_enum" + GoFeatures_LegacyUnmarshalJsonEnum_field_fullname protoreflect.FullName = "pb.GoFeatures.legacy_unmarshal_json_enum" + GoFeatures_ApiLevel_field_fullname protoreflect.FullName = "pb.GoFeatures.api_level" + GoFeatures_StripEnumPrefix_field_fullname protoreflect.FullName = "pb.GoFeatures.strip_enum_prefix" ) -// Field numbers for google.protobuf.GoFeatures. +// Field numbers for pb.GoFeatures. const ( GoFeatures_LegacyUnmarshalJsonEnum_field_number protoreflect.FieldNumber = 1 + GoFeatures_ApiLevel_field_number protoreflect.FieldNumber = 2 + GoFeatures_StripEnumPrefix_field_number protoreflect.FieldNumber = 3 +) + +// Full and short names for pb.GoFeatures.APILevel. +const ( + GoFeatures_APILevel_enum_fullname = "pb.GoFeatures.APILevel" + GoFeatures_APILevel_enum_name = "APILevel" +) + +// Enum values for pb.GoFeatures.APILevel. +const ( + GoFeatures_API_LEVEL_UNSPECIFIED_enum_value = 0 + GoFeatures_API_OPEN_enum_value = 1 + GoFeatures_API_HYBRID_enum_value = 2 + GoFeatures_API_OPAQUE_enum_value = 3 +) + +// Full and short names for pb.GoFeatures.StripEnumPrefix. +const ( + GoFeatures_StripEnumPrefix_enum_fullname = "pb.GoFeatures.StripEnumPrefix" + GoFeatures_StripEnumPrefix_enum_name = "StripEnumPrefix" +) + +// Enum values for pb.GoFeatures.StripEnumPrefix. +const ( + GoFeatures_STRIP_ENUM_PREFIX_UNSPECIFIED_enum_value = 0 + GoFeatures_STRIP_ENUM_PREFIX_KEEP_enum_value = 1 + GoFeatures_STRIP_ENUM_PREFIX_GENERATE_BOTH_enum_value = 2 + GoFeatures_STRIP_ENUM_PREFIX_STRIP_enum_value = 3 +) + +// Extension numbers +const ( + FeatureSet_Go_ext_number protoreflect.FieldNumber = 1002 ) diff --git a/vendor/google.golang.org/protobuf/internal/genid/goname.go b/vendor/google.golang.org/protobuf/internal/genid/goname.go index 693d2e9e1f..99bb95bafd 100644 --- a/vendor/google.golang.org/protobuf/internal/genid/goname.go +++ b/vendor/google.golang.org/protobuf/internal/genid/goname.go @@ -11,15 +11,10 @@ const ( SizeCache_goname = "sizeCache" SizeCacheA_goname = "XXX_sizecache" - WeakFields_goname = "weakFields" - WeakFieldsA_goname = "XXX_weak" - UnknownFields_goname = "unknownFields" UnknownFieldsA_goname = "XXX_unrecognized" ExtensionFields_goname = "extensionFields" ExtensionFieldsA_goname = "XXX_InternalExtensions" ExtensionFieldsB_goname = "XXX_extensions" - - WeakFieldPrefix_goname = "XXX_weak_" ) diff --git a/vendor/google.golang.org/protobuf/internal/genid/map_entry.go b/vendor/google.golang.org/protobuf/internal/genid/map_entry.go index 8f9ea02ff2..bef5a25fbb 100644 --- a/vendor/google.golang.org/protobuf/internal/genid/map_entry.go +++ b/vendor/google.golang.org/protobuf/internal/genid/map_entry.go @@ -4,7 +4,7 @@ package genid -import protoreflect "google.golang.org/protobuf/reflect/protoreflect" +import "google.golang.org/protobuf/reflect/protoreflect" // Generic field names and numbers for synthetic map entry messages. const ( diff --git a/vendor/google.golang.org/protobuf/internal/genid/name.go b/vendor/google.golang.org/protobuf/internal/genid/name.go new file mode 100644 index 0000000000..224f339302 --- /dev/null +++ b/vendor/google.golang.org/protobuf/internal/genid/name.go @@ -0,0 +1,12 @@ +// Copyright 2024 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package genid + +const ( + NoUnkeyedLiteral_goname = "noUnkeyedLiteral" + NoUnkeyedLiteralA_goname = "XXX_NoUnkeyedLiteral" + + BuilderSuffix_goname = "_builder" +) diff --git a/vendor/google.golang.org/protobuf/internal/genid/wrappers.go b/vendor/google.golang.org/protobuf/internal/genid/wrappers.go index 429384b85b..9404270de0 100644 --- a/vendor/google.golang.org/protobuf/internal/genid/wrappers.go +++ b/vendor/google.golang.org/protobuf/internal/genid/wrappers.go @@ -4,7 +4,7 @@ package genid -import protoreflect "google.golang.org/protobuf/reflect/protoreflect" +import "google.golang.org/protobuf/reflect/protoreflect" // Generic field name and number for messages in wrappers.proto. const ( diff --git a/vendor/google.golang.org/protobuf/internal/impl/api_export_opaque.go b/vendor/google.golang.org/protobuf/internal/impl/api_export_opaque.go new file mode 100644 index 0000000000..6075d6f696 --- /dev/null +++ b/vendor/google.golang.org/protobuf/internal/impl/api_export_opaque.go @@ -0,0 +1,128 @@ +// Copyright 2024 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package impl + +import ( + "strconv" + "sync/atomic" + "unsafe" + + "google.golang.org/protobuf/reflect/protoreflect" +) + +func (Export) UnmarshalField(msg any, fieldNum int32) { + UnmarshalField(msg.(protoreflect.ProtoMessage).ProtoReflect(), protoreflect.FieldNumber(fieldNum)) +} + +// Present checks the presence set for a certain field number (zero +// based, ordered by appearance in original proto file). part is +// a pointer to the correct element in the bitmask array, num is the +// field number unaltered. Example (field number 70 -> part = +// &m.XXX_presence[1], num = 70) +func (Export) Present(part *uint32, num uint32) bool { + // This hook will read an unprotected shadow presence set if + // we're unning under the race detector + raceDetectHookPresent(part, num) + return atomic.LoadUint32(part)&(1<<(num%32)) > 0 +} + +// SetPresent adds a field to the presence set. part is a pointer to +// the relevant element in the array and num is the field number +// unaltered. size is the number of fields in the protocol +// buffer. +func (Export) SetPresent(part *uint32, num uint32, size uint32) { + // This hook will mutate an unprotected shadow presence set if + // we're running under the race detector + raceDetectHookSetPresent(part, num, presenceSize(size)) + for { + old := atomic.LoadUint32(part) + if atomic.CompareAndSwapUint32(part, old, old|(1<<(num%32))) { + return + } + } +} + +// SetPresentNonAtomic is like SetPresent, but operates non-atomically. +// It is meant for use by builder methods, where the message is known not +// to be accessible yet by other goroutines. +func (Export) SetPresentNonAtomic(part *uint32, num uint32, size uint32) { + // This hook will mutate an unprotected shadow presence set if + // we're running under the race detector + raceDetectHookSetPresent(part, num, presenceSize(size)) + *part |= 1 << (num % 32) +} + +// ClearPresence removes a field from the presence set. part is a +// pointer to the relevant element in the presence array and num is +// the field number unaltered. +func (Export) ClearPresent(part *uint32, num uint32) { + // This hook will mutate an unprotected shadow presence set if + // we're running under the race detector + raceDetectHookClearPresent(part, num) + for { + old := atomic.LoadUint32(part) + if atomic.CompareAndSwapUint32(part, old, old&^(1<<(num%32))) { + return + } + } +} + +// interfaceToPointer takes a pointer to an empty interface whose value is a +// pointer type, and converts it into a "pointer" that points to the same +// target +func interfaceToPointer(i *any) pointer { + return pointer{p: (*[2]unsafe.Pointer)(unsafe.Pointer(i))[1]} +} + +func (p pointer) atomicGetPointer() pointer { + return pointer{p: atomic.LoadPointer((*unsafe.Pointer)(p.p))} +} + +func (p pointer) atomicSetPointer(q pointer) { + atomic.StorePointer((*unsafe.Pointer)(p.p), q.p) +} + +// AtomicCheckPointerIsNil takes an interface (which is a pointer to a +// pointer) and returns true if the pointed-to pointer is nil (using an +// atomic load). This function is inlineable and, on x86, just becomes a +// simple load and compare. +func (Export) AtomicCheckPointerIsNil(ptr any) bool { + return interfaceToPointer(&ptr).atomicGetPointer().IsNil() +} + +// AtomicSetPointer takes two interfaces (first is a pointer to a pointer, +// second is a pointer) and atomically sets the second pointer into location +// referenced by first pointer. Unfortunately, atomicSetPointer() does not inline +// (even on x86), so this does not become a simple store on x86. +func (Export) AtomicSetPointer(dstPtr, valPtr any) { + interfaceToPointer(&dstPtr).atomicSetPointer(interfaceToPointer(&valPtr)) +} + +// AtomicLoadPointer loads the pointer at the location pointed at by src, +// and stores that pointer value into the location pointed at by dst. +func (Export) AtomicLoadPointer(ptr Pointer, dst Pointer) { + *(*unsafe.Pointer)(unsafe.Pointer(dst)) = atomic.LoadPointer((*unsafe.Pointer)(unsafe.Pointer(ptr))) +} + +// AtomicInitializePointer makes ptr and dst point to the same value. +// +// If *ptr is a nil pointer, it sets *ptr = *dst. +// +// If *ptr is a non-nil pointer, it sets *dst = *ptr. +func (Export) AtomicInitializePointer(ptr Pointer, dst Pointer) { + if !atomic.CompareAndSwapPointer((*unsafe.Pointer)(ptr), unsafe.Pointer(nil), *(*unsafe.Pointer)(dst)) { + *(*unsafe.Pointer)(unsafe.Pointer(dst)) = atomic.LoadPointer((*unsafe.Pointer)(unsafe.Pointer(ptr))) + } +} + +// MessageFieldStringOf returns the field formatted as a string, +// either as the field name if resolvable otherwise as a decimal string. +func (Export) MessageFieldStringOf(md protoreflect.MessageDescriptor, n protoreflect.FieldNumber) string { + fd := md.Fields().ByNumber(n) + if fd != nil { + return string(fd.Name()) + } + return strconv.Itoa(int(n)) +} diff --git a/vendor/google.golang.org/protobuf/internal/impl/bitmap.go b/vendor/google.golang.org/protobuf/internal/impl/bitmap.go new file mode 100644 index 0000000000..ea276547cd --- /dev/null +++ b/vendor/google.golang.org/protobuf/internal/impl/bitmap.go @@ -0,0 +1,34 @@ +// Copyright 2024 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build !race + +package impl + +// There is no additional data as we're not running under race detector. +type RaceDetectHookData struct{} + +// Empty stubs for when not using the race detector. Calls to these from index.go should be optimized away. +func (presence) raceDetectHookPresent(num uint32) {} +func (presence) raceDetectHookSetPresent(num uint32, size presenceSize) {} +func (presence) raceDetectHookClearPresent(num uint32) {} +func (presence) raceDetectHookAllocAndCopy(src presence) {} + +// raceDetectHookPresent is called by the generated file interface +// (*proto.internalFuncs) Present to optionally read an unprotected +// shadow bitmap when race detection is enabled. In regular code it is +// a noop. +func raceDetectHookPresent(field *uint32, num uint32) {} + +// raceDetectHookSetPresent is called by the generated file interface +// (*proto.internalFuncs) SetPresent to optionally write an unprotected +// shadow bitmap when race detection is enabled. In regular code it is +// a noop. +func raceDetectHookSetPresent(field *uint32, num uint32, size presenceSize) {} + +// raceDetectHookClearPresent is called by the generated file interface +// (*proto.internalFuncs) ClearPresent to optionally write an unprotected +// shadow bitmap when race detection is enabled. In regular code it is +// a noop. +func raceDetectHookClearPresent(field *uint32, num uint32) {} diff --git a/vendor/google.golang.org/protobuf/internal/impl/bitmap_race.go b/vendor/google.golang.org/protobuf/internal/impl/bitmap_race.go new file mode 100644 index 0000000000..e9a27583ae --- /dev/null +++ b/vendor/google.golang.org/protobuf/internal/impl/bitmap_race.go @@ -0,0 +1,126 @@ +// Copyright 2024 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +//go:build race + +package impl + +// When running under race detector, we add a presence map of bytes, that we can access +// in the hook functions so that we trigger the race detection whenever we have concurrent +// Read-Writes or Write-Writes. The race detector does not otherwise detect invalid concurrent +// access to lazy fields as all updates of bitmaps and pointers are done using atomic operations. +type RaceDetectHookData struct { + shadowPresence *[]byte +} + +// Hooks for presence bitmap operations that allocate, read and write the shadowPresence +// using non-atomic operations. +func (data *RaceDetectHookData) raceDetectHookAlloc(size presenceSize) { + sp := make([]byte, size) + atomicStoreShadowPresence(&data.shadowPresence, &sp) +} + +func (p presence) raceDetectHookPresent(num uint32) { + data := p.toRaceDetectData() + if data == nil { + return + } + sp := atomicLoadShadowPresence(&data.shadowPresence) + if sp != nil { + _ = (*sp)[num] + } +} + +func (p presence) raceDetectHookSetPresent(num uint32, size presenceSize) { + data := p.toRaceDetectData() + if data == nil { + return + } + sp := atomicLoadShadowPresence(&data.shadowPresence) + if sp == nil { + data.raceDetectHookAlloc(size) + sp = atomicLoadShadowPresence(&data.shadowPresence) + } + (*sp)[num] = 1 +} + +func (p presence) raceDetectHookClearPresent(num uint32) { + data := p.toRaceDetectData() + if data == nil { + return + } + sp := atomicLoadShadowPresence(&data.shadowPresence) + if sp != nil { + (*sp)[num] = 0 + + } +} + +// raceDetectHookAllocAndCopy allocates a new shadowPresence slice at lazy and copies +// shadowPresence bytes from src to lazy. +func (p presence) raceDetectHookAllocAndCopy(q presence) { + sData := q.toRaceDetectData() + dData := p.toRaceDetectData() + if sData == nil { + return + } + srcSp := atomicLoadShadowPresence(&sData.shadowPresence) + if srcSp == nil { + atomicStoreShadowPresence(&dData.shadowPresence, nil) + return + } + n := len(*srcSp) + dSlice := make([]byte, n) + atomicStoreShadowPresence(&dData.shadowPresence, &dSlice) + for i := 0; i < n; i++ { + dSlice[i] = (*srcSp)[i] + } +} + +// raceDetectHookPresent is called by the generated file interface +// (*proto.internalFuncs) Present to optionally read an unprotected +// shadow bitmap when race detection is enabled. In regular code it is +// a noop. +func raceDetectHookPresent(field *uint32, num uint32) { + data := findPointerToRaceDetectData(field, num) + if data == nil { + return + } + sp := atomicLoadShadowPresence(&data.shadowPresence) + if sp != nil { + _ = (*sp)[num] + } +} + +// raceDetectHookSetPresent is called by the generated file interface +// (*proto.internalFuncs) SetPresent to optionally write an unprotected +// shadow bitmap when race detection is enabled. In regular code it is +// a noop. +func raceDetectHookSetPresent(field *uint32, num uint32, size presenceSize) { + data := findPointerToRaceDetectData(field, num) + if data == nil { + return + } + sp := atomicLoadShadowPresence(&data.shadowPresence) + if sp == nil { + data.raceDetectHookAlloc(size) + sp = atomicLoadShadowPresence(&data.shadowPresence) + } + (*sp)[num] = 1 +} + +// raceDetectHookClearPresent is called by the generated file interface +// (*proto.internalFuncs) ClearPresent to optionally write an unprotected +// shadow bitmap when race detection is enabled. In regular code it is +// a noop. +func raceDetectHookClearPresent(field *uint32, num uint32) { + data := findPointerToRaceDetectData(field, num) + if data == nil { + return + } + sp := atomicLoadShadowPresence(&data.shadowPresence) + if sp != nil { + (*sp)[num] = 0 + } +} diff --git a/vendor/google.golang.org/protobuf/internal/impl/checkinit.go b/vendor/google.golang.org/protobuf/internal/impl/checkinit.go index f29e6a8fa8..fe2c719ce4 100644 --- a/vendor/google.golang.org/protobuf/internal/impl/checkinit.go +++ b/vendor/google.golang.org/protobuf/internal/impl/checkinit.go @@ -35,6 +35,12 @@ func (mi *MessageInfo) checkInitializedPointer(p pointer) error { } return nil } + + var presence presence + if mi.presenceOffset.IsValid() { + presence = p.Apply(mi.presenceOffset).PresenceInfo() + } + if mi.extensionOffset.IsValid() { e := p.Apply(mi.extensionOffset).Extensions() if err := mi.isInitExtensions(e); err != nil { @@ -45,6 +51,33 @@ func (mi *MessageInfo) checkInitializedPointer(p pointer) error { if !f.isRequired && f.funcs.isInit == nil { continue } + + if f.presenceIndex != noPresence { + if !presence.Present(f.presenceIndex) { + if f.isRequired { + return errors.RequiredNotSet(string(mi.Desc.Fields().ByNumber(f.num).FullName())) + } + continue + } + if f.funcs.isInit != nil { + f.mi.init() + if f.mi.needsInitCheck { + if f.isLazy && p.Apply(f.offset).AtomicGetPointer().IsNil() { + lazy := *p.Apply(mi.lazyOffset).LazyInfoPtr() + if !lazy.AllowedPartial() { + // Nothing to see here, it was checked on unmarshal + continue + } + mi.lazyUnmarshal(p, f.num) + } + if err := f.funcs.isInit(p.Apply(f.offset), f); err != nil { + return err + } + } + } + continue + } + fptr := p.Apply(f.offset) if f.isPointer && fptr.Elem().IsNil() { if f.isRequired { diff --git a/vendor/google.golang.org/protobuf/internal/impl/codec_extension.go b/vendor/google.golang.org/protobuf/internal/impl/codec_extension.go index 4bb0a7a20c..0d5b546e0e 100644 --- a/vendor/google.golang.org/protobuf/internal/impl/codec_extension.go +++ b/vendor/google.golang.org/protobuf/internal/impl/codec_extension.go @@ -67,7 +67,6 @@ type lazyExtensionValue struct { xi *extensionFieldInfo value protoreflect.Value b []byte - fn func() protoreflect.Value } type ExtensionField struct { @@ -158,10 +157,9 @@ func (f *ExtensionField) lazyInit() { } f.lazy.value = val } else { - f.lazy.value = f.lazy.fn() + panic("No support for lazy fns for ExtensionField") } f.lazy.xi = nil - f.lazy.fn = nil f.lazy.b = nil atomic.StoreUint32(&f.lazy.atomicOnce, 1) } @@ -174,13 +172,6 @@ func (f *ExtensionField) Set(t protoreflect.ExtensionType, v protoreflect.Value) f.lazy = nil } -// SetLazy sets the type and a value that is to be lazily evaluated upon first use. -// This must not be called concurrently. -func (f *ExtensionField) SetLazy(t protoreflect.ExtensionType, fn func() protoreflect.Value) { - f.typ = t - f.lazy = &lazyExtensionValue{fn: fn} -} - // Value returns the value of the extension field. // This may be called concurrently. func (f *ExtensionField) Value() protoreflect.Value { diff --git a/vendor/google.golang.org/protobuf/internal/impl/codec_field.go b/vendor/google.golang.org/protobuf/internal/impl/codec_field.go index 78ee47e44b..d14d7d93cc 100644 --- a/vendor/google.golang.org/protobuf/internal/impl/codec_field.go +++ b/vendor/google.golang.org/protobuf/internal/impl/codec_field.go @@ -5,15 +5,12 @@ package impl import ( - "fmt" "reflect" - "sync" "google.golang.org/protobuf/encoding/protowire" "google.golang.org/protobuf/internal/errors" "google.golang.org/protobuf/proto" "google.golang.org/protobuf/reflect/protoreflect" - "google.golang.org/protobuf/reflect/protoregistry" "google.golang.org/protobuf/runtime/protoiface" ) @@ -65,6 +62,9 @@ func (mi *MessageInfo) initOneofFieldCoders(od protoreflect.OneofDescriptor, si if err != nil { return out, err } + if cf.funcs.isInit == nil { + out.initialized = true + } vi.Set(vw) return out, nil } @@ -118,78 +118,6 @@ func (mi *MessageInfo) initOneofFieldCoders(od protoreflect.OneofDescriptor, si } } -func makeWeakMessageFieldCoder(fd protoreflect.FieldDescriptor) pointerCoderFuncs { - var once sync.Once - var messageType protoreflect.MessageType - lazyInit := func() { - once.Do(func() { - messageName := fd.Message().FullName() - messageType, _ = protoregistry.GlobalTypes.FindMessageByName(messageName) - }) - } - - return pointerCoderFuncs{ - size: func(p pointer, f *coderFieldInfo, opts marshalOptions) int { - m, ok := p.WeakFields().get(f.num) - if !ok { - return 0 - } - lazyInit() - if messageType == nil { - panic(fmt.Sprintf("weak message %v is not linked in", fd.Message().FullName())) - } - return sizeMessage(m, f.tagsize, opts) - }, - marshal: func(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { - m, ok := p.WeakFields().get(f.num) - if !ok { - return b, nil - } - lazyInit() - if messageType == nil { - panic(fmt.Sprintf("weak message %v is not linked in", fd.Message().FullName())) - } - return appendMessage(b, m, f.wiretag, opts) - }, - unmarshal: func(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (unmarshalOutput, error) { - fs := p.WeakFields() - m, ok := fs.get(f.num) - if !ok { - lazyInit() - if messageType == nil { - return unmarshalOutput{}, errUnknown - } - m = messageType.New().Interface() - fs.set(f.num, m) - } - return consumeMessage(b, m, wtyp, opts) - }, - isInit: func(p pointer, f *coderFieldInfo) error { - m, ok := p.WeakFields().get(f.num) - if !ok { - return nil - } - return proto.CheckInitialized(m) - }, - merge: func(dst, src pointer, f *coderFieldInfo, opts mergeOptions) { - sm, ok := src.WeakFields().get(f.num) - if !ok { - return - } - dm, ok := dst.WeakFields().get(f.num) - if !ok { - lazyInit() - if messageType == nil { - panic(fmt.Sprintf("weak message %v is not linked in", fd.Message().FullName())) - } - dm = messageType.New().Interface() - dst.WeakFields().set(f.num, dm) - } - opts.Merge(dm, sm) - }, - } -} - func makeMessageFieldCoder(fd protoreflect.FieldDescriptor, ft reflect.Type) pointerCoderFuncs { if mi := getMessageInfo(ft); mi != nil { funcs := pointerCoderFuncs{ diff --git a/vendor/google.golang.org/protobuf/internal/impl/codec_field_opaque.go b/vendor/google.golang.org/protobuf/internal/impl/codec_field_opaque.go new file mode 100644 index 0000000000..76818ea252 --- /dev/null +++ b/vendor/google.golang.org/protobuf/internal/impl/codec_field_opaque.go @@ -0,0 +1,264 @@ +// Copyright 2024 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package impl + +import ( + "fmt" + "reflect" + + "google.golang.org/protobuf/encoding/protowire" + "google.golang.org/protobuf/internal/errors" + "google.golang.org/protobuf/reflect/protoreflect" +) + +func makeOpaqueMessageFieldCoder(fd protoreflect.FieldDescriptor, ft reflect.Type) (*MessageInfo, pointerCoderFuncs) { + mi := getMessageInfo(ft) + if mi == nil { + panic(fmt.Sprintf("invalid field: %v: unsupported message type %v", fd.FullName(), ft)) + } + switch fd.Kind() { + case protoreflect.MessageKind: + return mi, pointerCoderFuncs{ + size: sizeOpaqueMessage, + marshal: appendOpaqueMessage, + unmarshal: consumeOpaqueMessage, + isInit: isInitOpaqueMessage, + merge: mergeOpaqueMessage, + } + case protoreflect.GroupKind: + return mi, pointerCoderFuncs{ + size: sizeOpaqueGroup, + marshal: appendOpaqueGroup, + unmarshal: consumeOpaqueGroup, + isInit: isInitOpaqueMessage, + merge: mergeOpaqueMessage, + } + } + panic("unexpected field kind") +} + +func sizeOpaqueMessage(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { + return protowire.SizeBytes(f.mi.sizePointer(p.AtomicGetPointer(), opts)) + f.tagsize +} + +func appendOpaqueMessage(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + mp := p.AtomicGetPointer() + calculatedSize := f.mi.sizePointer(mp, opts) + b = protowire.AppendVarint(b, f.wiretag) + b = protowire.AppendVarint(b, uint64(calculatedSize)) + before := len(b) + b, err := f.mi.marshalAppendPointer(b, mp, opts) + if measuredSize := len(b) - before; calculatedSize != measuredSize && err == nil { + return nil, errors.MismatchedSizeCalculation(calculatedSize, measuredSize) + } + return b, err +} + +func consumeOpaqueMessage(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { + if wtyp != protowire.BytesType { + return out, errUnknown + } + v, n := protowire.ConsumeBytes(b) + if n < 0 { + return out, errDecode + } + mp := p.AtomicGetPointer() + if mp.IsNil() { + mp = p.AtomicSetPointerIfNil(pointerOfValue(reflect.New(f.mi.GoReflectType.Elem()))) + } + o, err := f.mi.unmarshalPointer(v, mp, 0, opts) + if err != nil { + return out, err + } + out.n = n + out.initialized = o.initialized + return out, nil +} + +func isInitOpaqueMessage(p pointer, f *coderFieldInfo) error { + mp := p.AtomicGetPointer() + if mp.IsNil() { + return nil + } + return f.mi.checkInitializedPointer(mp) +} + +func mergeOpaqueMessage(dst, src pointer, f *coderFieldInfo, opts mergeOptions) { + dstmp := dst.AtomicGetPointer() + if dstmp.IsNil() { + dstmp = dst.AtomicSetPointerIfNil(pointerOfValue(reflect.New(f.mi.GoReflectType.Elem()))) + } + f.mi.mergePointer(dstmp, src.AtomicGetPointer(), opts) +} + +func sizeOpaqueGroup(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { + return 2*f.tagsize + f.mi.sizePointer(p.AtomicGetPointer(), opts) +} + +func appendOpaqueGroup(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + b = protowire.AppendVarint(b, f.wiretag) // start group + b, err := f.mi.marshalAppendPointer(b, p.AtomicGetPointer(), opts) + b = protowire.AppendVarint(b, f.wiretag+1) // end group + return b, err +} + +func consumeOpaqueGroup(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { + if wtyp != protowire.StartGroupType { + return out, errUnknown + } + mp := p.AtomicGetPointer() + if mp.IsNil() { + mp = p.AtomicSetPointerIfNil(pointerOfValue(reflect.New(f.mi.GoReflectType.Elem()))) + } + o, e := f.mi.unmarshalPointer(b, mp, f.num, opts) + return o, e +} + +func makeOpaqueRepeatedMessageFieldCoder(fd protoreflect.FieldDescriptor, ft reflect.Type) (*MessageInfo, pointerCoderFuncs) { + if ft.Kind() != reflect.Ptr || ft.Elem().Kind() != reflect.Slice { + panic(fmt.Sprintf("invalid field: %v: unsupported type for opaque repeated message: %v", fd.FullName(), ft)) + } + mt := ft.Elem().Elem() // *[]*T -> *T + mi := getMessageInfo(mt) + if mi == nil { + panic(fmt.Sprintf("invalid field: %v: unsupported message type %v", fd.FullName(), mt)) + } + switch fd.Kind() { + case protoreflect.MessageKind: + return mi, pointerCoderFuncs{ + size: sizeOpaqueMessageSlice, + marshal: appendOpaqueMessageSlice, + unmarshal: consumeOpaqueMessageSlice, + isInit: isInitOpaqueMessageSlice, + merge: mergeOpaqueMessageSlice, + } + case protoreflect.GroupKind: + return mi, pointerCoderFuncs{ + size: sizeOpaqueGroupSlice, + marshal: appendOpaqueGroupSlice, + unmarshal: consumeOpaqueGroupSlice, + isInit: isInitOpaqueMessageSlice, + merge: mergeOpaqueMessageSlice, + } + } + panic("unexpected field kind") +} + +func sizeOpaqueMessageSlice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { + s := p.AtomicGetPointer().PointerSlice() + n := 0 + for _, v := range s { + n += protowire.SizeBytes(f.mi.sizePointer(v, opts)) + f.tagsize + } + return n +} + +func appendOpaqueMessageSlice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + s := p.AtomicGetPointer().PointerSlice() + var err error + for _, v := range s { + b = protowire.AppendVarint(b, f.wiretag) + siz := f.mi.sizePointer(v, opts) + b = protowire.AppendVarint(b, uint64(siz)) + before := len(b) + b, err = f.mi.marshalAppendPointer(b, v, opts) + if err != nil { + return b, err + } + if measuredSize := len(b) - before; siz != measuredSize { + return nil, errors.MismatchedSizeCalculation(siz, measuredSize) + } + } + return b, nil +} + +func consumeOpaqueMessageSlice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { + if wtyp != protowire.BytesType { + return out, errUnknown + } + v, n := protowire.ConsumeBytes(b) + if n < 0 { + return out, errDecode + } + mp := pointerOfValue(reflect.New(f.mi.GoReflectType.Elem())) + o, err := f.mi.unmarshalPointer(v, mp, 0, opts) + if err != nil { + return out, err + } + sp := p.AtomicGetPointer() + if sp.IsNil() { + sp = p.AtomicSetPointerIfNil(pointerOfValue(reflect.New(f.ft.Elem()))) + } + sp.AppendPointerSlice(mp) + out.n = n + out.initialized = o.initialized + return out, nil +} + +func isInitOpaqueMessageSlice(p pointer, f *coderFieldInfo) error { + sp := p.AtomicGetPointer() + if sp.IsNil() { + return nil + } + s := sp.PointerSlice() + for _, v := range s { + if err := f.mi.checkInitializedPointer(v); err != nil { + return err + } + } + return nil +} + +func mergeOpaqueMessageSlice(dst, src pointer, f *coderFieldInfo, opts mergeOptions) { + ds := dst.AtomicGetPointer() + if ds.IsNil() { + ds = dst.AtomicSetPointerIfNil(pointerOfValue(reflect.New(f.ft.Elem()))) + } + for _, sp := range src.AtomicGetPointer().PointerSlice() { + dm := pointerOfValue(reflect.New(f.mi.GoReflectType.Elem())) + f.mi.mergePointer(dm, sp, opts) + ds.AppendPointerSlice(dm) + } +} + +func sizeOpaqueGroupSlice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { + s := p.AtomicGetPointer().PointerSlice() + n := 0 + for _, v := range s { + n += 2*f.tagsize + f.mi.sizePointer(v, opts) + } + return n +} + +func appendOpaqueGroupSlice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { + s := p.AtomicGetPointer().PointerSlice() + var err error + for _, v := range s { + b = protowire.AppendVarint(b, f.wiretag) // start group + b, err = f.mi.marshalAppendPointer(b, v, opts) + if err != nil { + return b, err + } + b = protowire.AppendVarint(b, f.wiretag+1) // end group + } + return b, nil +} + +func consumeOpaqueGroupSlice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { + if wtyp != protowire.StartGroupType { + return out, errUnknown + } + mp := pointerOfValue(reflect.New(f.mi.GoReflectType.Elem())) + out, err = f.mi.unmarshalPointer(b, mp, f.num, opts) + if err != nil { + return out, err + } + sp := p.AtomicGetPointer() + if sp.IsNil() { + sp = p.AtomicSetPointerIfNil(pointerOfValue(reflect.New(f.ft.Elem()))) + } + sp.AppendPointerSlice(mp) + return out, err +} diff --git a/vendor/google.golang.org/protobuf/internal/impl/codec_map.go b/vendor/google.golang.org/protobuf/internal/impl/codec_map.go index fb35f0bae9..4a3bf393ef 100644 --- a/vendor/google.golang.org/protobuf/internal/impl/codec_map.go +++ b/vendor/google.golang.org/protobuf/internal/impl/codec_map.go @@ -94,7 +94,7 @@ func sizeMap(mapv reflect.Value, mapi *mapInfo, f *coderFieldInfo, opts marshalO return 0 } n := 0 - iter := mapRange(mapv) + iter := mapv.MapRange() for iter.Next() { key := mapi.conv.keyConv.PBValueOf(iter.Key()).MapKey() keySize := mapi.keyFuncs.size(key.Value(), mapKeyTagSize, opts) @@ -113,6 +113,9 @@ func sizeMap(mapv reflect.Value, mapi *mapInfo, f *coderFieldInfo, opts marshalO } func consumeMap(b []byte, mapv reflect.Value, wtyp protowire.Type, mapi *mapInfo, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { + if opts.depth--; opts.depth < 0 { + return out, errRecursionDepth + } if wtyp != protowire.BytesType { return out, errUnknown } @@ -170,6 +173,9 @@ func consumeMap(b []byte, mapv reflect.Value, wtyp protowire.Type, mapi *mapInfo } func consumeMapOfMessage(b []byte, mapv reflect.Value, wtyp protowire.Type, mapi *mapInfo, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { + if opts.depth--; opts.depth < 0 { + return out, errRecursionDepth + } if wtyp != protowire.BytesType { return out, errUnknown } @@ -281,7 +287,7 @@ func appendMap(b []byte, mapv reflect.Value, mapi *mapInfo, f *coderFieldInfo, o if opts.Deterministic() { return appendMapDeterministic(b, mapv, mapi, f, opts) } - iter := mapRange(mapv) + iter := mapv.MapRange() for iter.Next() { var err error b = protowire.AppendVarint(b, f.wiretag) @@ -328,7 +334,7 @@ func isInitMap(mapv reflect.Value, mapi *mapInfo, f *coderFieldInfo) error { if !mi.needsInitCheck { return nil } - iter := mapRange(mapv) + iter := mapv.MapRange() for iter.Next() { val := pointerOfValue(iter.Value()) if err := mi.checkInitializedPointer(val); err != nil { @@ -336,7 +342,7 @@ func isInitMap(mapv reflect.Value, mapi *mapInfo, f *coderFieldInfo) error { } } } else { - iter := mapRange(mapv) + iter := mapv.MapRange() for iter.Next() { val := mapi.conv.valConv.PBValueOf(iter.Value()) if err := mapi.valFuncs.isInit(val); err != nil { @@ -356,7 +362,7 @@ func mergeMap(dst, src pointer, f *coderFieldInfo, opts mergeOptions) { if dstm.IsNil() { dstm.Set(reflect.MakeMap(f.ft)) } - iter := mapRange(srcm) + iter := srcm.MapRange() for iter.Next() { dstm.SetMapIndex(iter.Key(), iter.Value()) } @@ -371,7 +377,7 @@ func mergeMapOfBytes(dst, src pointer, f *coderFieldInfo, opts mergeOptions) { if dstm.IsNil() { dstm.Set(reflect.MakeMap(f.ft)) } - iter := mapRange(srcm) + iter := srcm.MapRange() for iter.Next() { dstm.SetMapIndex(iter.Key(), reflect.ValueOf(append(emptyBuf[:], iter.Value().Bytes()...))) } @@ -386,7 +392,7 @@ func mergeMapOfMessage(dst, src pointer, f *coderFieldInfo, opts mergeOptions) { if dstm.IsNil() { dstm.Set(reflect.MakeMap(f.ft)) } - iter := mapRange(srcm) + iter := srcm.MapRange() for iter.Next() { val := reflect.New(f.ft.Elem().Elem()) if f.mi != nil { diff --git a/vendor/google.golang.org/protobuf/internal/impl/codec_map_go111.go b/vendor/google.golang.org/protobuf/internal/impl/codec_map_go111.go deleted file mode 100644 index 4b15493f2f..0000000000 --- a/vendor/google.golang.org/protobuf/internal/impl/codec_map_go111.go +++ /dev/null @@ -1,38 +0,0 @@ -// Copyright 2019 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build !go1.12 -// +build !go1.12 - -package impl - -import "reflect" - -type mapIter struct { - v reflect.Value - keys []reflect.Value -} - -// mapRange provides a less-efficient equivalent to -// the Go 1.12 reflect.Value.MapRange method. -func mapRange(v reflect.Value) *mapIter { - return &mapIter{v: v} -} - -func (i *mapIter) Next() bool { - if i.keys == nil { - i.keys = i.v.MapKeys() - } else { - i.keys = i.keys[1:] - } - return len(i.keys) > 0 -} - -func (i *mapIter) Key() reflect.Value { - return i.keys[0] -} - -func (i *mapIter) Value() reflect.Value { - return i.v.MapIndex(i.keys[0]) -} diff --git a/vendor/google.golang.org/protobuf/internal/impl/codec_map_go112.go b/vendor/google.golang.org/protobuf/internal/impl/codec_map_go112.go deleted file mode 100644 index 0b31b66eaf..0000000000 --- a/vendor/google.golang.org/protobuf/internal/impl/codec_map_go112.go +++ /dev/null @@ -1,12 +0,0 @@ -// Copyright 2019 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build go1.12 -// +build go1.12 - -package impl - -import "reflect" - -func mapRange(v reflect.Value) *reflect.MapIter { return v.MapRange() } diff --git a/vendor/google.golang.org/protobuf/internal/impl/codec_message.go b/vendor/google.golang.org/protobuf/internal/impl/codec_message.go index 6b2fdbb739..f78b57b046 100644 --- a/vendor/google.golang.org/protobuf/internal/impl/codec_message.go +++ b/vendor/google.golang.org/protobuf/internal/impl/codec_message.go @@ -32,6 +32,10 @@ type coderMessageInfo struct { needsInitCheck bool isMessageSet bool numRequiredFields uint8 + + lazyOffset offset + presenceOffset offset + presenceSize presenceSize } type coderFieldInfo struct { @@ -45,12 +49,19 @@ type coderFieldInfo struct { tagsize int // size of the varint-encoded tag isPointer bool // true if IsNil may be called on the struct field isRequired bool // true if field is required + + isLazy bool + presenceIndex uint32 } +const noPresence = 0xffffffff + func (mi *MessageInfo) makeCoderMethods(t reflect.Type, si structInfo) { mi.sizecacheOffset = invalidOffset mi.unknownOffset = invalidOffset mi.extensionOffset = invalidOffset + mi.lazyOffset = invalidOffset + mi.presenceOffset = si.presenceOffset if si.sizecacheOffset.IsValid() && si.sizecacheType == sizecacheType { mi.sizecacheOffset = si.sizecacheOffset @@ -107,12 +118,9 @@ func (mi *MessageInfo) makeCoderMethods(t reflect.Type, si structInfo) { }, } case isOneof: - fieldOffset = offsetOf(fs, mi.Exporter) - case fd.IsWeak(): - fieldOffset = si.weakOffset - funcs = makeWeakMessageFieldCoder(fd) + fieldOffset = offsetOf(fs) default: - fieldOffset = offsetOf(fs, mi.Exporter) + fieldOffset = offsetOf(fs) childMessage, funcs = fieldCoder(fd, ft) } cf := &preallocFields[i] @@ -127,6 +135,8 @@ func (mi *MessageInfo) makeCoderMethods(t reflect.Type, si structInfo) { validation: newFieldValidationInfo(mi, si, fd, ft), isPointer: fd.Cardinality() == protoreflect.Repeated || fd.HasPresence(), isRequired: fd.Cardinality() == protoreflect.Required, + + presenceIndex: noPresence, } mi.orderedCoderFields = append(mi.orderedCoderFields, cf) mi.coderFields[cf.num] = cf @@ -189,6 +199,9 @@ func (mi *MessageInfo) makeCoderMethods(t reflect.Type, si structInfo) { if mi.methods.Merge == nil { mi.methods.Merge = mi.merge } + if mi.methods.Equal == nil { + mi.methods.Equal = equal + } } // getUnknownBytes returns a *[]byte for the unknown fields. diff --git a/vendor/google.golang.org/protobuf/internal/impl/codec_message_opaque.go b/vendor/google.golang.org/protobuf/internal/impl/codec_message_opaque.go new file mode 100644 index 0000000000..bdad12a9bb --- /dev/null +++ b/vendor/google.golang.org/protobuf/internal/impl/codec_message_opaque.go @@ -0,0 +1,154 @@ +// Copyright 2024 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package impl + +import ( + "fmt" + "reflect" + "sort" + + "google.golang.org/protobuf/encoding/protowire" + "google.golang.org/protobuf/internal/encoding/messageset" + "google.golang.org/protobuf/internal/filedesc" + "google.golang.org/protobuf/internal/order" + "google.golang.org/protobuf/reflect/protoreflect" + piface "google.golang.org/protobuf/runtime/protoiface" +) + +func (mi *MessageInfo) makeOpaqueCoderMethods(t reflect.Type, si opaqueStructInfo) { + mi.sizecacheOffset = si.sizecacheOffset + mi.unknownOffset = si.unknownOffset + mi.unknownPtrKind = si.unknownType.Kind() == reflect.Ptr + mi.extensionOffset = si.extensionOffset + mi.lazyOffset = si.lazyOffset + mi.presenceOffset = si.presenceOffset + + mi.coderFields = make(map[protowire.Number]*coderFieldInfo) + fields := mi.Desc.Fields() + for i := 0; i < fields.Len(); i++ { + fd := fields.Get(i) + + fs := si.fieldsByNumber[fd.Number()] + if fd.ContainingOneof() != nil && !fd.ContainingOneof().IsSynthetic() { + fs = si.oneofsByName[fd.ContainingOneof().Name()] + } + ft := fs.Type + var wiretag uint64 + if !fd.IsPacked() { + wiretag = protowire.EncodeTag(fd.Number(), wireTypes[fd.Kind()]) + } else { + wiretag = protowire.EncodeTag(fd.Number(), protowire.BytesType) + } + var fieldOffset offset + var funcs pointerCoderFuncs + var childMessage *MessageInfo + switch { + case fd.ContainingOneof() != nil && !fd.ContainingOneof().IsSynthetic(): + fieldOffset = offsetOf(fs) + case fd.Message() != nil && !fd.IsMap(): + fieldOffset = offsetOf(fs) + if fd.IsList() { + childMessage, funcs = makeOpaqueRepeatedMessageFieldCoder(fd, ft) + } else { + childMessage, funcs = makeOpaqueMessageFieldCoder(fd, ft) + } + default: + fieldOffset = offsetOf(fs) + childMessage, funcs = fieldCoder(fd, ft) + } + cf := &coderFieldInfo{ + num: fd.Number(), + offset: fieldOffset, + wiretag: wiretag, + ft: ft, + tagsize: protowire.SizeVarint(wiretag), + funcs: funcs, + mi: childMessage, + validation: newFieldValidationInfo(mi, si.structInfo, fd, ft), + isPointer: (fd.Cardinality() == protoreflect.Repeated || + fd.Kind() == protoreflect.MessageKind || + fd.Kind() == protoreflect.GroupKind), + isRequired: fd.Cardinality() == protoreflect.Required, + presenceIndex: noPresence, + } + + // TODO: Use presence for all fields. + // + // In some cases, such as maps, presence means only "might be set" rather + // than "is definitely set", but every field should have a presence bit to + // permit us to skip over definitely-unset fields at marshal time. + + var hasPresence bool + hasPresence, cf.isLazy = filedesc.UsePresenceForField(fd) + + if hasPresence { + cf.presenceIndex, mi.presenceSize = presenceIndex(mi.Desc, fd) + } + + mi.orderedCoderFields = append(mi.orderedCoderFields, cf) + mi.coderFields[cf.num] = cf + } + for i, oneofs := 0, mi.Desc.Oneofs(); i < oneofs.Len(); i++ { + if od := oneofs.Get(i); !od.IsSynthetic() { + mi.initOneofFieldCoders(od, si.structInfo) + } + } + if messageset.IsMessageSet(mi.Desc) { + if !mi.extensionOffset.IsValid() { + panic(fmt.Sprintf("%v: MessageSet with no extensions field", mi.Desc.FullName())) + } + if !mi.unknownOffset.IsValid() { + panic(fmt.Sprintf("%v: MessageSet with no unknown field", mi.Desc.FullName())) + } + mi.isMessageSet = true + } + sort.Slice(mi.orderedCoderFields, func(i, j int) bool { + return mi.orderedCoderFields[i].num < mi.orderedCoderFields[j].num + }) + + var maxDense protoreflect.FieldNumber + for _, cf := range mi.orderedCoderFields { + if cf.num >= 16 && cf.num >= 2*maxDense { + break + } + maxDense = cf.num + } + mi.denseCoderFields = make([]*coderFieldInfo, maxDense+1) + for _, cf := range mi.orderedCoderFields { + if int(cf.num) > len(mi.denseCoderFields) { + break + } + mi.denseCoderFields[cf.num] = cf + } + + // To preserve compatibility with historic wire output, marshal oneofs last. + if mi.Desc.Oneofs().Len() > 0 { + sort.Slice(mi.orderedCoderFields, func(i, j int) bool { + fi := fields.ByNumber(mi.orderedCoderFields[i].num) + fj := fields.ByNumber(mi.orderedCoderFields[j].num) + return order.LegacyFieldOrder(fi, fj) + }) + } + + mi.needsInitCheck = needsInitCheck(mi.Desc) + if mi.methods.Marshal == nil && mi.methods.Size == nil { + mi.methods.Flags |= piface.SupportMarshalDeterministic + mi.methods.Marshal = mi.marshal + mi.methods.Size = mi.size + } + if mi.methods.Unmarshal == nil { + mi.methods.Flags |= piface.SupportUnmarshalDiscardUnknown + mi.methods.Unmarshal = mi.unmarshal + } + if mi.methods.CheckInitialized == nil { + mi.methods.CheckInitialized = mi.checkInitialized + } + if mi.methods.Merge == nil { + mi.methods.Merge = mi.merge + } + if mi.methods.Equal == nil { + mi.methods.Equal = equal + } +} diff --git a/vendor/google.golang.org/protobuf/internal/impl/codec_reflect.go b/vendor/google.golang.org/protobuf/internal/impl/codec_reflect.go deleted file mode 100644 index 145c577bd6..0000000000 --- a/vendor/google.golang.org/protobuf/internal/impl/codec_reflect.go +++ /dev/null @@ -1,210 +0,0 @@ -// Copyright 2019 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build purego || appengine -// +build purego appengine - -package impl - -import ( - "reflect" - - "google.golang.org/protobuf/encoding/protowire" -) - -func sizeEnum(p pointer, f *coderFieldInfo, _ marshalOptions) (size int) { - v := p.v.Elem().Int() - return f.tagsize + protowire.SizeVarint(uint64(v)) -} - -func appendEnum(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { - v := p.v.Elem().Int() - b = protowire.AppendVarint(b, f.wiretag) - b = protowire.AppendVarint(b, uint64(v)) - return b, nil -} - -func consumeEnum(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, _ unmarshalOptions) (out unmarshalOutput, err error) { - if wtyp != protowire.VarintType { - return out, errUnknown - } - v, n := protowire.ConsumeVarint(b) - if n < 0 { - return out, errDecode - } - p.v.Elem().SetInt(int64(v)) - out.n = n - return out, nil -} - -func mergeEnum(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) { - dst.v.Elem().Set(src.v.Elem()) -} - -var coderEnum = pointerCoderFuncs{ - size: sizeEnum, - marshal: appendEnum, - unmarshal: consumeEnum, - merge: mergeEnum, -} - -func sizeEnumNoZero(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { - if p.v.Elem().Int() == 0 { - return 0 - } - return sizeEnum(p, f, opts) -} - -func appendEnumNoZero(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { - if p.v.Elem().Int() == 0 { - return b, nil - } - return appendEnum(b, p, f, opts) -} - -func mergeEnumNoZero(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) { - if src.v.Elem().Int() != 0 { - dst.v.Elem().Set(src.v.Elem()) - } -} - -var coderEnumNoZero = pointerCoderFuncs{ - size: sizeEnumNoZero, - marshal: appendEnumNoZero, - unmarshal: consumeEnum, - merge: mergeEnumNoZero, -} - -func sizeEnumPtr(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { - return sizeEnum(pointer{p.v.Elem()}, f, opts) -} - -func appendEnumPtr(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { - return appendEnum(b, pointer{p.v.Elem()}, f, opts) -} - -func consumeEnumPtr(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { - if wtyp != protowire.VarintType { - return out, errUnknown - } - if p.v.Elem().IsNil() { - p.v.Elem().Set(reflect.New(p.v.Elem().Type().Elem())) - } - return consumeEnum(b, pointer{p.v.Elem()}, wtyp, f, opts) -} - -func mergeEnumPtr(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) { - if !src.v.Elem().IsNil() { - v := reflect.New(dst.v.Type().Elem().Elem()) - v.Elem().Set(src.v.Elem().Elem()) - dst.v.Elem().Set(v) - } -} - -var coderEnumPtr = pointerCoderFuncs{ - size: sizeEnumPtr, - marshal: appendEnumPtr, - unmarshal: consumeEnumPtr, - merge: mergeEnumPtr, -} - -func sizeEnumSlice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { - s := p.v.Elem() - for i, llen := 0, s.Len(); i < llen; i++ { - size += protowire.SizeVarint(uint64(s.Index(i).Int())) + f.tagsize - } - return size -} - -func appendEnumSlice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { - s := p.v.Elem() - for i, llen := 0, s.Len(); i < llen; i++ { - b = protowire.AppendVarint(b, f.wiretag) - b = protowire.AppendVarint(b, uint64(s.Index(i).Int())) - } - return b, nil -} - -func consumeEnumSlice(b []byte, p pointer, wtyp protowire.Type, f *coderFieldInfo, opts unmarshalOptions) (out unmarshalOutput, err error) { - s := p.v.Elem() - if wtyp == protowire.BytesType { - b, n := protowire.ConsumeBytes(b) - if n < 0 { - return out, errDecode - } - for len(b) > 0 { - v, n := protowire.ConsumeVarint(b) - if n < 0 { - return out, errDecode - } - rv := reflect.New(s.Type().Elem()).Elem() - rv.SetInt(int64(v)) - s.Set(reflect.Append(s, rv)) - b = b[n:] - } - out.n = n - return out, nil - } - if wtyp != protowire.VarintType { - return out, errUnknown - } - v, n := protowire.ConsumeVarint(b) - if n < 0 { - return out, errDecode - } - rv := reflect.New(s.Type().Elem()).Elem() - rv.SetInt(int64(v)) - s.Set(reflect.Append(s, rv)) - out.n = n - return out, nil -} - -func mergeEnumSlice(dst, src pointer, _ *coderFieldInfo, _ mergeOptions) { - dst.v.Elem().Set(reflect.AppendSlice(dst.v.Elem(), src.v.Elem())) -} - -var coderEnumSlice = pointerCoderFuncs{ - size: sizeEnumSlice, - marshal: appendEnumSlice, - unmarshal: consumeEnumSlice, - merge: mergeEnumSlice, -} - -func sizeEnumPackedSlice(p pointer, f *coderFieldInfo, opts marshalOptions) (size int) { - s := p.v.Elem() - llen := s.Len() - if llen == 0 { - return 0 - } - n := 0 - for i := 0; i < llen; i++ { - n += protowire.SizeVarint(uint64(s.Index(i).Int())) - } - return f.tagsize + protowire.SizeBytes(n) -} - -func appendEnumPackedSlice(b []byte, p pointer, f *coderFieldInfo, opts marshalOptions) ([]byte, error) { - s := p.v.Elem() - llen := s.Len() - if llen == 0 { - return b, nil - } - b = protowire.AppendVarint(b, f.wiretag) - n := 0 - for i := 0; i < llen; i++ { - n += protowire.SizeVarint(uint64(s.Index(i).Int())) - } - b = protowire.AppendVarint(b, uint64(n)) - for i := 0; i < llen; i++ { - b = protowire.AppendVarint(b, uint64(s.Index(i).Int())) - } - return b, nil -} - -var coderEnumPackedSlice = pointerCoderFuncs{ - size: sizeEnumPackedSlice, - marshal: appendEnumPackedSlice, - unmarshal: consumeEnumSlice, - merge: mergeEnumSlice, -} diff --git a/vendor/google.golang.org/protobuf/internal/impl/codec_unsafe.go b/vendor/google.golang.org/protobuf/internal/impl/codec_unsafe.go index 757642e23c..077712c2c5 100644 --- a/vendor/google.golang.org/protobuf/internal/impl/codec_unsafe.go +++ b/vendor/google.golang.org/protobuf/internal/impl/codec_unsafe.go @@ -2,9 +2,6 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -//go:build !purego && !appengine -// +build !purego,!appengine - package impl // When using unsafe pointers, we can just treat enum values as int32s. diff --git a/vendor/google.golang.org/protobuf/internal/impl/convert.go b/vendor/google.golang.org/protobuf/internal/impl/convert.go index e06ece55a2..f72ddd882f 100644 --- a/vendor/google.golang.org/protobuf/internal/impl/convert.go +++ b/vendor/google.golang.org/protobuf/internal/impl/convert.go @@ -322,7 +322,7 @@ func (c *stringConverter) PBValueOf(v reflect.Value) protoreflect.Value { return protoreflect.ValueOfString(v.Convert(stringType).String()) } func (c *stringConverter) GoValueOf(v protoreflect.Value) reflect.Value { - // pref.Value.String never panics, so we go through an interface + // protoreflect.Value.String never panics, so we go through an interface // conversion here to check the type. s := v.Interface().(string) if c.goType.Kind() == reflect.Slice && s == "" { diff --git a/vendor/google.golang.org/protobuf/internal/impl/convert_map.go b/vendor/google.golang.org/protobuf/internal/impl/convert_map.go index 304244a651..e4580b3ac2 100644 --- a/vendor/google.golang.org/protobuf/internal/impl/convert_map.go +++ b/vendor/google.golang.org/protobuf/internal/impl/convert_map.go @@ -101,7 +101,7 @@ func (ms *mapReflect) Mutable(k protoreflect.MapKey) protoreflect.Value { return v } func (ms *mapReflect) Range(f func(protoreflect.MapKey, protoreflect.Value) bool) { - iter := mapRange(ms.v) + iter := ms.v.MapRange() for iter.Next() { k := ms.keyConv.PBValueOf(iter.Key()).MapKey() v := ms.valConv.PBValueOf(iter.Value()) diff --git a/vendor/google.golang.org/protobuf/internal/impl/decode.go b/vendor/google.golang.org/protobuf/internal/impl/decode.go index cda0520c27..1228b5c8c2 100644 --- a/vendor/google.golang.org/protobuf/internal/impl/decode.go +++ b/vendor/google.golang.org/protobuf/internal/impl/decode.go @@ -34,6 +34,8 @@ func (o unmarshalOptions) Options() proto.UnmarshalOptions { AllowPartial: true, DiscardUnknown: o.DiscardUnknown(), Resolver: o.resolver, + + NoLazyDecoding: o.NoLazyDecoding(), } } @@ -41,13 +43,26 @@ func (o unmarshalOptions) DiscardUnknown() bool { return o.flags&protoiface.UnmarshalDiscardUnknown != 0 } -func (o unmarshalOptions) IsDefault() bool { - return o.flags == 0 && o.resolver == protoregistry.GlobalTypes +func (o unmarshalOptions) AliasBuffer() bool { return o.flags&protoiface.UnmarshalAliasBuffer != 0 } +func (o unmarshalOptions) Validated() bool { return o.flags&protoiface.UnmarshalValidated != 0 } +func (o unmarshalOptions) NoLazyDecoding() bool { + return o.flags&protoiface.UnmarshalNoLazyDecoding != 0 +} + +func (o unmarshalOptions) CanBeLazy() bool { + if o.resolver != protoregistry.GlobalTypes { + return false + } + // We ignore the UnmarshalInvalidateSizeCache even though it's not in the default set + return (o.flags & ^(protoiface.UnmarshalAliasBuffer | protoiface.UnmarshalValidated | protoiface.UnmarshalCheckRequired)) == 0 } var lazyUnmarshalOptions = unmarshalOptions{ resolver: protoregistry.GlobalTypes, - depth: protowire.DefaultRecursionLimit, + + flags: protoiface.UnmarshalAliasBuffer | protoiface.UnmarshalValidated, + + depth: protowire.DefaultRecursionLimit, } type unmarshalOutput struct { @@ -87,16 +102,36 @@ var errUnknown = errors.New("unknown") func (mi *MessageInfo) unmarshalPointer(b []byte, p pointer, groupTag protowire.Number, opts unmarshalOptions) (out unmarshalOutput, err error) { mi.init() - opts.depth-- - if opts.depth < 0 { + if opts.depth--; opts.depth < 0 { return out, errRecursionDepth } if flags.ProtoLegacy && mi.isMessageSet { return unmarshalMessageSet(mi, b, p, opts) } + + lazyDecoding := LazyEnabled() // default + if opts.NoLazyDecoding() { + lazyDecoding = false // explicitly disabled + } + if mi.lazyOffset.IsValid() && lazyDecoding { + return mi.unmarshalPointerLazy(b, p, groupTag, opts) + } + return mi.unmarshalPointerEager(b, p, groupTag, opts) +} + +// unmarshalPointerEager is the message unmarshalling function for all messages that are not lazy. +// The corresponding function for Lazy is in google_lazy.go. +func (mi *MessageInfo) unmarshalPointerEager(b []byte, p pointer, groupTag protowire.Number, opts unmarshalOptions) (out unmarshalOutput, err error) { + initialized := true var requiredMask uint64 var exts *map[int32]ExtensionField + + var presence presence + if mi.presenceOffset.IsValid() { + presence = p.Apply(mi.presenceOffset).PresenceInfo() + } + start := len(b) for len(b) > 0 { // Parse the tag (field number and wire type). @@ -154,6 +189,11 @@ func (mi *MessageInfo) unmarshalPointer(b []byte, p pointer, groupTag protowire. if f.funcs.isInit != nil && !o.initialized { initialized = false } + + if f.presenceIndex != noPresence { + presence.SetPresentUnatomic(f.presenceIndex, mi.presenceSize) + } + default: // Possible extension. if exts == nil && mi.extensionOffset.IsValid() { @@ -222,7 +262,7 @@ func (mi *MessageInfo) unmarshalExtension(b []byte, num protowire.Number, wtyp p return out, errUnknown } if flags.LazyUnmarshalExtensions { - if opts.IsDefault() && x.canLazy(xt) { + if opts.CanBeLazy() && x.canLazy(xt) { out, valid := skipExtension(b, xi, num, wtyp, opts) switch valid { case ValidationValid: @@ -270,6 +310,13 @@ func skipExtension(b []byte, xi *extensionFieldInfo, num protowire.Number, wtyp if n < 0 { return out, ValidationUnknown } + + if opts.Validated() { + out.initialized = true + out.n = n + return out, ValidationValid + } + out, st := xi.validation.mi.validate(v, 0, opts) out.n = n return out, st diff --git a/vendor/google.golang.org/protobuf/internal/impl/encode.go b/vendor/google.golang.org/protobuf/internal/impl/encode.go index febd212247..b2e212291d 100644 --- a/vendor/google.golang.org/protobuf/internal/impl/encode.go +++ b/vendor/google.golang.org/protobuf/internal/impl/encode.go @@ -10,7 +10,8 @@ import ( "sync/atomic" "google.golang.org/protobuf/internal/flags" - proto "google.golang.org/protobuf/proto" + "google.golang.org/protobuf/internal/protolazy" + "google.golang.org/protobuf/proto" piface "google.golang.org/protobuf/runtime/protoiface" ) @@ -71,11 +72,39 @@ func (mi *MessageInfo) sizePointerSlow(p pointer, opts marshalOptions) (size int e := p.Apply(mi.extensionOffset).Extensions() size += mi.sizeExtensions(e, opts) } + + var lazy **protolazy.XXX_lazyUnmarshalInfo + var presence presence + if mi.presenceOffset.IsValid() { + presence = p.Apply(mi.presenceOffset).PresenceInfo() + if mi.lazyOffset.IsValid() { + lazy = p.Apply(mi.lazyOffset).LazyInfoPtr() + } + } + for _, f := range mi.orderedCoderFields { if f.funcs.size == nil { continue } fptr := p.Apply(f.offset) + + if f.presenceIndex != noPresence { + if !presence.Present(f.presenceIndex) { + continue + } + + if f.isLazy && fptr.AtomicGetPointer().IsNil() { + if lazyFields(opts) { + size += (*lazy).SizeField(uint32(f.num)) + continue + } else { + mi.lazyUnmarshal(p, f.num) + } + } + size += f.funcs.size(fptr, f, opts) + continue + } + if f.isPointer && fptr.Elem().IsNil() { continue } @@ -134,11 +163,52 @@ func (mi *MessageInfo) marshalAppendPointer(b []byte, p pointer, opts marshalOpt return b, err } } + + var lazy **protolazy.XXX_lazyUnmarshalInfo + var presence presence + if mi.presenceOffset.IsValid() { + presence = p.Apply(mi.presenceOffset).PresenceInfo() + if mi.lazyOffset.IsValid() { + lazy = p.Apply(mi.lazyOffset).LazyInfoPtr() + } + } + for _, f := range mi.orderedCoderFields { if f.funcs.marshal == nil { continue } fptr := p.Apply(f.offset) + + if f.presenceIndex != noPresence { + if !presence.Present(f.presenceIndex) { + continue + } + if f.isLazy { + // Be careful, this field needs to be read atomically, like for a get + if f.isPointer && fptr.AtomicGetPointer().IsNil() { + if lazyFields(opts) { + b, _ = (*lazy).AppendField(b, uint32(f.num)) + continue + } else { + mi.lazyUnmarshal(p, f.num) + } + } + + b, err = f.funcs.marshal(b, fptr, f, opts) + if err != nil { + return b, err + } + continue + } else if f.isPointer && fptr.Elem().IsNil() { + continue + } + b, err = f.funcs.marshal(b, fptr, f, opts) + if err != nil { + return b, err + } + continue + } + if f.isPointer && fptr.Elem().IsNil() { continue } @@ -163,6 +233,14 @@ func fullyLazyExtensions(opts marshalOptions) bool { return opts.flags&piface.MarshalDeterministic == 0 } +// lazyFields returns true if we should attempt to keep fields lazy over size and marshal. +func lazyFields(opts marshalOptions) bool { + // When deterministic marshaling is requested, force an unmarshal for lazy + // fields to produce a deterministic result, instead of passing through + // bytes lazily that may or may not match what Go Protobuf would produce. + return opts.flags&piface.MarshalDeterministic == 0 +} + func (mi *MessageInfo) sizeExtensions(ext *map[int32]ExtensionField, opts marshalOptions) (n int) { if ext == nil { return 0 diff --git a/vendor/google.golang.org/protobuf/internal/impl/equal.go b/vendor/google.golang.org/protobuf/internal/impl/equal.go new file mode 100644 index 0000000000..9f6c32a7d8 --- /dev/null +++ b/vendor/google.golang.org/protobuf/internal/impl/equal.go @@ -0,0 +1,224 @@ +// Copyright 2024 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package impl + +import ( + "bytes" + + "google.golang.org/protobuf/encoding/protowire" + "google.golang.org/protobuf/reflect/protoreflect" + "google.golang.org/protobuf/runtime/protoiface" +) + +func equal(in protoiface.EqualInput) protoiface.EqualOutput { + return protoiface.EqualOutput{Equal: equalMessage(in.MessageA, in.MessageB)} +} + +// equalMessage is a fast-path variant of protoreflect.equalMessage. +// It takes advantage of the internal messageState type to avoid +// unnecessary allocations, type assertions. +func equalMessage(mx, my protoreflect.Message) bool { + if mx == nil || my == nil { + return mx == my + } + if mx.Descriptor() != my.Descriptor() { + return false + } + + msx, ok := mx.(*messageState) + if !ok { + return protoreflect.ValueOfMessage(mx).Equal(protoreflect.ValueOfMessage(my)) + } + msy, ok := my.(*messageState) + if !ok { + return protoreflect.ValueOfMessage(mx).Equal(protoreflect.ValueOfMessage(my)) + } + + mi := msx.messageInfo() + miy := msy.messageInfo() + if mi != miy { + return protoreflect.ValueOfMessage(mx).Equal(protoreflect.ValueOfMessage(my)) + } + mi.init() + // Compares regular fields + // Modified Message.Range code that compares two messages of the same type + // while going over the fields. + for _, ri := range mi.rangeInfos { + var fd protoreflect.FieldDescriptor + var vx, vy protoreflect.Value + + switch ri := ri.(type) { + case *fieldInfo: + hx := ri.has(msx.pointer()) + hy := ri.has(msy.pointer()) + if hx != hy { + return false + } + if !hx { + continue + } + fd = ri.fieldDesc + vx = ri.get(msx.pointer()) + vy = ri.get(msy.pointer()) + case *oneofInfo: + fnx := ri.which(msx.pointer()) + fny := ri.which(msy.pointer()) + if fnx != fny { + return false + } + if fnx <= 0 { + continue + } + fi := mi.fields[fnx] + fd = fi.fieldDesc + vx = fi.get(msx.pointer()) + vy = fi.get(msy.pointer()) + } + + if !equalValue(fd, vx, vy) { + return false + } + } + + // Compare extensions. + // This is more complicated because mx or my could have empty/nil extension maps, + // however some populated extension map values are equal to nil extension maps. + emx := mi.extensionMap(msx.pointer()) + emy := mi.extensionMap(msy.pointer()) + if emx != nil { + for k, x := range *emx { + xd := x.Type().TypeDescriptor() + xv := x.Value() + var y ExtensionField + ok := false + if emy != nil { + y, ok = (*emy)[k] + } + // We need to treat empty lists as equal to nil values + if emy == nil || !ok { + if xd.IsList() && xv.List().Len() == 0 { + continue + } + return false + } + + if !equalValue(xd, xv, y.Value()) { + return false + } + } + } + if emy != nil { + // emy may have extensions emx does not have, need to check them as well + for k, y := range *emy { + if emx != nil { + // emx has the field, so we already checked it + if _, ok := (*emx)[k]; ok { + continue + } + } + // Empty lists are equal to nil + if y.Type().TypeDescriptor().IsList() && y.Value().List().Len() == 0 { + continue + } + + // Cant be equal if the extension is populated + return false + } + } + + return equalUnknown(mx.GetUnknown(), my.GetUnknown()) +} + +func equalValue(fd protoreflect.FieldDescriptor, vx, vy protoreflect.Value) bool { + // slow path + if fd.Kind() != protoreflect.MessageKind { + return vx.Equal(vy) + } + + // fast path special cases + if fd.IsMap() { + if fd.MapValue().Kind() == protoreflect.MessageKind { + return equalMessageMap(vx.Map(), vy.Map()) + } + return vx.Equal(vy) + } + + if fd.IsList() { + return equalMessageList(vx.List(), vy.List()) + } + + return equalMessage(vx.Message(), vy.Message()) +} + +// Mostly copied from protoreflect.equalMap. +// This variant only works for messages as map types. +// All other map types should be handled via Value.Equal. +func equalMessageMap(mx, my protoreflect.Map) bool { + if mx.Len() != my.Len() { + return false + } + equal := true + mx.Range(func(k protoreflect.MapKey, vx protoreflect.Value) bool { + if !my.Has(k) { + equal = false + return false + } + vy := my.Get(k) + equal = equalMessage(vx.Message(), vy.Message()) + return equal + }) + return equal +} + +// Mostly copied from protoreflect.equalList. +// The only change is the usage of equalImpl instead of protoreflect.equalValue. +func equalMessageList(lx, ly protoreflect.List) bool { + if lx.Len() != ly.Len() { + return false + } + for i := 0; i < lx.Len(); i++ { + // We only operate on messages here since equalImpl will not call us in any other case. + if !equalMessage(lx.Get(i).Message(), ly.Get(i).Message()) { + return false + } + } + return true +} + +// equalUnknown compares unknown fields by direct comparison on the raw bytes +// of each individual field number. +// Copied from protoreflect.equalUnknown. +func equalUnknown(x, y protoreflect.RawFields) bool { + if len(x) != len(y) { + return false + } + if bytes.Equal([]byte(x), []byte(y)) { + return true + } + + mx := make(map[protoreflect.FieldNumber]protoreflect.RawFields) + my := make(map[protoreflect.FieldNumber]protoreflect.RawFields) + for len(x) > 0 { + fnum, _, n := protowire.ConsumeField(x) + mx[fnum] = append(mx[fnum], x[:n]...) + x = x[n:] + } + for len(y) > 0 { + fnum, _, n := protowire.ConsumeField(y) + my[fnum] = append(my[fnum], y[:n]...) + y = y[n:] + } + if len(mx) != len(my) { + return false + } + + for k, v1 := range mx { + if v2, ok := my[k]; !ok || !bytes.Equal([]byte(v1), []byte(v2)) { + return false + } + } + + return true +} diff --git a/vendor/google.golang.org/protobuf/internal/impl/lazy.go b/vendor/google.golang.org/protobuf/internal/impl/lazy.go new file mode 100644 index 0000000000..c7de31e243 --- /dev/null +++ b/vendor/google.golang.org/protobuf/internal/impl/lazy.go @@ -0,0 +1,433 @@ +// Copyright 2024 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package impl + +import ( + "fmt" + "math/bits" + "os" + "reflect" + "sort" + "sync/atomic" + + "google.golang.org/protobuf/encoding/protowire" + "google.golang.org/protobuf/internal/errors" + "google.golang.org/protobuf/internal/protolazy" + "google.golang.org/protobuf/reflect/protoreflect" + preg "google.golang.org/protobuf/reflect/protoregistry" + piface "google.golang.org/protobuf/runtime/protoiface" +) + +var enableLazy int32 = func() int32 { + if os.Getenv("GOPROTODEBUG") == "nolazy" { + return 0 + } + return 1 +}() + +// EnableLazyUnmarshal enables lazy unmarshaling. +func EnableLazyUnmarshal(enable bool) { + if enable { + atomic.StoreInt32(&enableLazy, 1) + return + } + atomic.StoreInt32(&enableLazy, 0) +} + +// LazyEnabled reports whether lazy unmarshalling is currently enabled. +func LazyEnabled() bool { + return atomic.LoadInt32(&enableLazy) != 0 +} + +// UnmarshalField unmarshals a field in a message. +func UnmarshalField(m interface{}, num protowire.Number) { + switch m := m.(type) { + case *messageState: + m.messageInfo().lazyUnmarshal(m.pointer(), num) + case *messageReflectWrapper: + m.messageInfo().lazyUnmarshal(m.pointer(), num) + default: + panic(fmt.Sprintf("unsupported wrapper type %T", m)) + } +} + +func (mi *MessageInfo) lazyUnmarshal(p pointer, num protoreflect.FieldNumber) { + var f *coderFieldInfo + if int(num) < len(mi.denseCoderFields) { + f = mi.denseCoderFields[num] + } else { + f = mi.coderFields[num] + } + if f == nil { + panic(fmt.Sprintf("lazyUnmarshal: field info for %v.%v", mi.Desc.FullName(), num)) + } + lazy := *p.Apply(mi.lazyOffset).LazyInfoPtr() + start, end, found, _, multipleEntries := lazy.FindFieldInProto(uint32(num)) + if !found && multipleEntries == nil { + panic(fmt.Sprintf("lazyUnmarshal: can't find field data for %v.%v", mi.Desc.FullName(), num)) + } + // The actual pointer in the message can not be set until the whole struct is filled in, otherwise we will have races. + // Create another pointer and set it atomically, if we won the race and the pointer in the original message is still nil. + fp := pointerOfValue(reflect.New(f.ft)) + if multipleEntries != nil { + for _, entry := range multipleEntries { + mi.unmarshalField(lazy.Buffer()[entry.Start:entry.End], fp, f, lazy, lazy.UnmarshalFlags()) + } + } else { + mi.unmarshalField(lazy.Buffer()[start:end], fp, f, lazy, lazy.UnmarshalFlags()) + } + p.Apply(f.offset).AtomicSetPointerIfNil(fp.Elem()) +} + +func (mi *MessageInfo) unmarshalField(b []byte, p pointer, f *coderFieldInfo, lazyInfo *protolazy.XXX_lazyUnmarshalInfo, flags piface.UnmarshalInputFlags) error { + opts := lazyUnmarshalOptions + opts.flags |= flags + for len(b) > 0 { + // Parse the tag (field number and wire type). + var tag uint64 + if b[0] < 0x80 { + tag = uint64(b[0]) + b = b[1:] + } else if len(b) >= 2 && b[1] < 128 { + tag = uint64(b[0]&0x7f) + uint64(b[1])<<7 + b = b[2:] + } else { + var n int + tag, n = protowire.ConsumeVarint(b) + if n < 0 { + return errors.New("invalid wire data") + } + b = b[n:] + } + var num protowire.Number + if n := tag >> 3; n < uint64(protowire.MinValidNumber) || n > uint64(protowire.MaxValidNumber) { + return errors.New("invalid wire data") + } else { + num = protowire.Number(n) + } + wtyp := protowire.Type(tag & 7) + if num == f.num { + o, err := f.funcs.unmarshal(b, p, wtyp, f, opts) + if err == nil { + b = b[o.n:] + continue + } + if err != errUnknown { + return err + } + } + n := protowire.ConsumeFieldValue(num, wtyp, b) + if n < 0 { + return errors.New("invalid wire data") + } + b = b[n:] + } + return nil +} + +func (mi *MessageInfo) skipField(b []byte, f *coderFieldInfo, wtyp protowire.Type, opts unmarshalOptions) (out unmarshalOutput, _ ValidationStatus) { + fmi := f.validation.mi + if fmi == nil { + fd := mi.Desc.Fields().ByNumber(f.num) + if fd == nil { + return out, ValidationUnknown + } + messageName := fd.Message().FullName() + messageType, err := preg.GlobalTypes.FindMessageByName(messageName) + if err != nil { + return out, ValidationUnknown + } + var ok bool + fmi, ok = messageType.(*MessageInfo) + if !ok { + return out, ValidationUnknown + } + } + fmi.init() + switch f.validation.typ { + case validationTypeMessage: + if wtyp != protowire.BytesType { + return out, ValidationWrongWireType + } + v, n := protowire.ConsumeBytes(b) + if n < 0 { + return out, ValidationInvalid + } + out, st := fmi.validate(v, 0, opts) + out.n = n + return out, st + case validationTypeGroup: + if wtyp != protowire.StartGroupType { + return out, ValidationWrongWireType + } + out, st := fmi.validate(b, f.num, opts) + return out, st + default: + return out, ValidationUnknown + } +} + +// unmarshalPointerLazy is similar to unmarshalPointerEager, but it +// specifically handles lazy unmarshalling. it expects lazyOffset and +// presenceOffset to both be valid. +func (mi *MessageInfo) unmarshalPointerLazy(b []byte, p pointer, groupTag protowire.Number, opts unmarshalOptions) (out unmarshalOutput, err error) { + initialized := true + var requiredMask uint64 + var lazy **protolazy.XXX_lazyUnmarshalInfo + var presence presence + var lazyIndex []protolazy.IndexEntry + var lastNum protowire.Number + outOfOrder := false + lazyDecode := false + presence = p.Apply(mi.presenceOffset).PresenceInfo() + lazy = p.Apply(mi.lazyOffset).LazyInfoPtr() + if !presence.AnyPresent(mi.presenceSize) { + if opts.CanBeLazy() { + // If the message contains existing data, we need to merge into it. + // Lazy unmarshaling doesn't merge, so only enable it when the + // message is empty (has no presence bitmap). + lazyDecode = true + if *lazy == nil { + *lazy = &protolazy.XXX_lazyUnmarshalInfo{} + } + (*lazy).SetUnmarshalFlags(opts.flags) + if !opts.AliasBuffer() { + // Make a copy of the buffer for lazy unmarshaling. + // Set the AliasBuffer flag so recursive unmarshal + // operations reuse the copy. + b = append([]byte{}, b...) + opts.flags |= piface.UnmarshalAliasBuffer + } + (*lazy).SetBuffer(b) + } + } + // Track special handling of lazy fields. + // + // In the common case, all fields are lazyValidateOnly (and lazyFields remains nil). + // In the event that validation for a field fails, this map tracks handling of the field. + type lazyAction uint8 + const ( + lazyValidateOnly lazyAction = iota // validate the field only + lazyUnmarshalNow // eagerly unmarshal the field + lazyUnmarshalLater // unmarshal the field after the message is fully processed + ) + var lazyFields map[*coderFieldInfo]lazyAction + var exts *map[int32]ExtensionField + start := len(b) + pos := 0 + for len(b) > 0 { + // Parse the tag (field number and wire type). + var tag uint64 + if b[0] < 0x80 { + tag = uint64(b[0]) + b = b[1:] + } else if len(b) >= 2 && b[1] < 128 { + tag = uint64(b[0]&0x7f) + uint64(b[1])<<7 + b = b[2:] + } else { + var n int + tag, n = protowire.ConsumeVarint(b) + if n < 0 { + return out, errDecode + } + b = b[n:] + } + var num protowire.Number + if n := tag >> 3; n < uint64(protowire.MinValidNumber) || n > uint64(protowire.MaxValidNumber) { + return out, errors.New("invalid field number") + } else { + num = protowire.Number(n) + } + wtyp := protowire.Type(tag & 7) + + if wtyp == protowire.EndGroupType { + if num != groupTag { + return out, errors.New("mismatching end group marker") + } + groupTag = 0 + break + } + + var f *coderFieldInfo + if int(num) < len(mi.denseCoderFields) { + f = mi.denseCoderFields[num] + } else { + f = mi.coderFields[num] + } + var n int + err := errUnknown + discardUnknown := false + Field: + switch { + case f != nil: + if f.funcs.unmarshal == nil { + break + } + if f.isLazy && lazyDecode { + switch { + case lazyFields == nil || lazyFields[f] == lazyValidateOnly: + // Attempt to validate this field and leave it for later lazy unmarshaling. + o, valid := mi.skipField(b, f, wtyp, opts) + switch valid { + case ValidationValid: + // Skip over the valid field and continue. + err = nil + presence.SetPresentUnatomic(f.presenceIndex, mi.presenceSize) + requiredMask |= f.validation.requiredBit + if !o.initialized { + initialized = false + } + n = o.n + break Field + case ValidationInvalid: + return out, errors.New("invalid proto wire format") + case ValidationWrongWireType: + break Field + case ValidationUnknown: + if lazyFields == nil { + lazyFields = make(map[*coderFieldInfo]lazyAction) + } + if presence.Present(f.presenceIndex) { + // We were unable to determine if the field is valid or not, + // and we've already skipped over at least one instance of this + // field. Clear the presence bit (so if we stop decoding early, + // we don't leave a partially-initialized field around) and flag + // the field for unmarshaling before we return. + presence.ClearPresent(f.presenceIndex) + lazyFields[f] = lazyUnmarshalLater + discardUnknown = true + break Field + } else { + // We were unable to determine if the field is valid or not, + // but this is the first time we've seen it. Flag it as needing + // eager unmarshaling and fall through to the eager unmarshal case below. + lazyFields[f] = lazyUnmarshalNow + } + } + case lazyFields[f] == lazyUnmarshalLater: + // This field will be unmarshaled in a separate pass below. + // Skip over it here. + discardUnknown = true + break Field + default: + // Eagerly unmarshal the field. + } + } + if f.isLazy && !lazyDecode && presence.Present(f.presenceIndex) { + if p.Apply(f.offset).AtomicGetPointer().IsNil() { + mi.lazyUnmarshal(p, f.num) + } + } + var o unmarshalOutput + o, err = f.funcs.unmarshal(b, p.Apply(f.offset), wtyp, f, opts) + n = o.n + if err != nil { + break + } + requiredMask |= f.validation.requiredBit + if f.funcs.isInit != nil && !o.initialized { + initialized = false + } + if f.presenceIndex != noPresence { + presence.SetPresentUnatomic(f.presenceIndex, mi.presenceSize) + } + default: + // Possible extension. + if exts == nil && mi.extensionOffset.IsValid() { + exts = p.Apply(mi.extensionOffset).Extensions() + if *exts == nil { + *exts = make(map[int32]ExtensionField) + } + } + if exts == nil { + break + } + var o unmarshalOutput + o, err = mi.unmarshalExtension(b, num, wtyp, *exts, opts) + if err != nil { + break + } + n = o.n + if !o.initialized { + initialized = false + } + } + if err != nil { + if err != errUnknown { + return out, err + } + n = protowire.ConsumeFieldValue(num, wtyp, b) + if n < 0 { + return out, errDecode + } + if !discardUnknown && !opts.DiscardUnknown() && mi.unknownOffset.IsValid() { + u := mi.mutableUnknownBytes(p) + *u = protowire.AppendTag(*u, num, wtyp) + *u = append(*u, b[:n]...) + } + } + b = b[n:] + end := start - len(b) + if lazyDecode && f != nil && f.isLazy { + if num != lastNum { + lazyIndex = append(lazyIndex, protolazy.IndexEntry{ + FieldNum: uint32(num), + Start: uint32(pos), + End: uint32(end), + }) + } else { + i := len(lazyIndex) - 1 + lazyIndex[i].End = uint32(end) + lazyIndex[i].MultipleContiguous = true + } + } + if num < lastNum { + outOfOrder = true + } + pos = end + lastNum = num + } + if groupTag != 0 { + return out, errors.New("missing end group marker") + } + if lazyFields != nil { + // Some fields failed validation, and now need to be unmarshaled. + for f, action := range lazyFields { + if action != lazyUnmarshalLater { + continue + } + initialized = false + if *lazy == nil { + *lazy = &protolazy.XXX_lazyUnmarshalInfo{} + } + if err := mi.unmarshalField((*lazy).Buffer(), p.Apply(f.offset), f, *lazy, opts.flags); err != nil { + return out, err + } + presence.SetPresentUnatomic(f.presenceIndex, mi.presenceSize) + } + } + if lazyDecode { + if outOfOrder { + sort.Slice(lazyIndex, func(i, j int) bool { + return lazyIndex[i].FieldNum < lazyIndex[j].FieldNum || + (lazyIndex[i].FieldNum == lazyIndex[j].FieldNum && + lazyIndex[i].Start < lazyIndex[j].Start) + }) + } + if *lazy == nil { + *lazy = &protolazy.XXX_lazyUnmarshalInfo{} + } + + (*lazy).SetIndex(lazyIndex) + } + if mi.numRequiredFields > 0 && bits.OnesCount64(requiredMask) != int(mi.numRequiredFields) { + initialized = false + } + if initialized { + out.initialized = true + } + out.n = start - len(b) + return out, nil +} diff --git a/vendor/google.golang.org/protobuf/internal/impl/legacy_extension.go b/vendor/google.golang.org/protobuf/internal/impl/legacy_extension.go index 6e8677ee63..b6849d6692 100644 --- a/vendor/google.golang.org/protobuf/internal/impl/legacy_extension.go +++ b/vendor/google.golang.org/protobuf/internal/impl/legacy_extension.go @@ -160,6 +160,7 @@ func (x placeholderExtension) HasPresence() bool func (x placeholderExtension) HasOptionalKeyword() bool { return false } func (x placeholderExtension) IsExtension() bool { return true } func (x placeholderExtension) IsWeak() bool { return false } +func (x placeholderExtension) IsLazy() bool { return false } func (x placeholderExtension) IsPacked() bool { return false } func (x placeholderExtension) IsList() bool { return false } func (x placeholderExtension) IsMap() bool { return false } diff --git a/vendor/google.golang.org/protobuf/internal/impl/legacy_message.go b/vendor/google.golang.org/protobuf/internal/impl/legacy_message.go index bf0b6049b4..a51dffbe29 100644 --- a/vendor/google.golang.org/protobuf/internal/impl/legacy_message.go +++ b/vendor/google.golang.org/protobuf/internal/impl/legacy_message.go @@ -310,12 +310,9 @@ func aberrantAppendField(md *filedesc.Message, goType reflect.Type, tag, tagKey, fd.L0.Parent = md fd.L0.Index = n - if fd.L1.IsWeak || fd.L1.EditionFeatures.IsPacked { + if fd.L1.EditionFeatures.IsPacked { fd.L1.Options = func() protoreflect.ProtoMessage { opts := descopts.Field.ProtoReflect().New() - if fd.L1.IsWeak { - opts.Set(opts.Descriptor().Fields().ByName("weak"), protoreflect.ValueOfBool(true)) - } if fd.L1.EditionFeatures.IsPacked { opts.Set(opts.Descriptor().Fields().ByName("packed"), protoreflect.ValueOfBool(fd.L1.EditionFeatures.IsPacked)) } diff --git a/vendor/google.golang.org/protobuf/internal/impl/merge.go b/vendor/google.golang.org/protobuf/internal/impl/merge.go index 7e65f64f28..8ffdce67d3 100644 --- a/vendor/google.golang.org/protobuf/internal/impl/merge.go +++ b/vendor/google.golang.org/protobuf/internal/impl/merge.go @@ -41,11 +41,38 @@ func (mi *MessageInfo) mergePointer(dst, src pointer, opts mergeOptions) { if src.IsNil() { return } + + var presenceSrc presence + var presenceDst presence + if mi.presenceOffset.IsValid() { + presenceSrc = src.Apply(mi.presenceOffset).PresenceInfo() + presenceDst = dst.Apply(mi.presenceOffset).PresenceInfo() + } + for _, f := range mi.orderedCoderFields { if f.funcs.merge == nil { continue } sfptr := src.Apply(f.offset) + + if f.presenceIndex != noPresence { + if !presenceSrc.Present(f.presenceIndex) { + continue + } + dfptr := dst.Apply(f.offset) + if f.isLazy { + if sfptr.AtomicGetPointer().IsNil() { + mi.lazyUnmarshal(src, f.num) + } + if presenceDst.Present(f.presenceIndex) && dfptr.AtomicGetPointer().IsNil() { + mi.lazyUnmarshal(dst, f.num) + } + } + f.funcs.merge(dst.Apply(f.offset), sfptr, f, opts) + presenceDst.SetPresentUnatomic(f.presenceIndex, mi.presenceSize) + continue + } + if f.isPointer && sfptr.Elem().IsNil() { continue } diff --git a/vendor/google.golang.org/protobuf/internal/impl/message.go b/vendor/google.golang.org/protobuf/internal/impl/message.go index 019399d454..d50423dcb7 100644 --- a/vendor/google.golang.org/protobuf/internal/impl/message.go +++ b/vendor/google.golang.org/protobuf/internal/impl/message.go @@ -14,7 +14,6 @@ import ( "google.golang.org/protobuf/internal/genid" "google.golang.org/protobuf/reflect/protoreflect" - "google.golang.org/protobuf/reflect/protoregistry" ) // MessageInfo provides protobuf related functionality for a given Go type @@ -30,8 +29,8 @@ type MessageInfo struct { // Desc is the underlying message descriptor type and must be populated. Desc protoreflect.MessageDescriptor - // Exporter must be provided in a purego environment in order to provide - // access to unexported fields. + // Deprecated: Exporter will be removed the next time we bump + // protoimpl.GenVersion. See https://github.com/golang/protobuf/issues/1640 Exporter exporter // OneofWrappers is list of pointers to oneof wrapper struct types. @@ -79,6 +78,9 @@ func (mi *MessageInfo) initOnce() { if mi.initDone == 1 { return } + if opaqueInitHook(mi) { + return + } t := mi.GoReflectType if t.Kind() != reflect.Ptr && t.Elem().Kind() != reflect.Struct { @@ -117,7 +119,6 @@ type ( var ( sizecacheType = reflect.TypeOf(SizeCache(0)) - weakFieldsType = reflect.TypeOf(WeakFields(nil)) unknownFieldsAType = reflect.TypeOf(unknownFieldsA(nil)) unknownFieldsBType = reflect.TypeOf(unknownFieldsB(nil)) extensionFieldsType = reflect.TypeOf(ExtensionFields(nil)) @@ -126,13 +127,14 @@ var ( type structInfo struct { sizecacheOffset offset sizecacheType reflect.Type - weakOffset offset - weakType reflect.Type unknownOffset offset unknownType reflect.Type extensionOffset offset extensionType reflect.Type + lazyOffset offset + presenceOffset offset + fieldsByNumber map[protoreflect.FieldNumber]reflect.StructField oneofsByName map[protoreflect.Name]reflect.StructField oneofWrappersByType map[reflect.Type]protoreflect.FieldNumber @@ -142,9 +144,10 @@ type structInfo struct { func (mi *MessageInfo) makeStructInfo(t reflect.Type) structInfo { si := structInfo{ sizecacheOffset: invalidOffset, - weakOffset: invalidOffset, unknownOffset: invalidOffset, extensionOffset: invalidOffset, + lazyOffset: invalidOffset, + presenceOffset: invalidOffset, fieldsByNumber: map[protoreflect.FieldNumber]reflect.StructField{}, oneofsByName: map[protoreflect.Name]reflect.StructField{}, @@ -157,24 +160,23 @@ fieldLoop: switch f := t.Field(i); f.Name { case genid.SizeCache_goname, genid.SizeCacheA_goname: if f.Type == sizecacheType { - si.sizecacheOffset = offsetOf(f, mi.Exporter) + si.sizecacheOffset = offsetOf(f) si.sizecacheType = f.Type } - case genid.WeakFields_goname, genid.WeakFieldsA_goname: - if f.Type == weakFieldsType { - si.weakOffset = offsetOf(f, mi.Exporter) - si.weakType = f.Type - } case genid.UnknownFields_goname, genid.UnknownFieldsA_goname: if f.Type == unknownFieldsAType || f.Type == unknownFieldsBType { - si.unknownOffset = offsetOf(f, mi.Exporter) + si.unknownOffset = offsetOf(f) si.unknownType = f.Type } case genid.ExtensionFields_goname, genid.ExtensionFieldsA_goname, genid.ExtensionFieldsB_goname: if f.Type == extensionFieldsType { - si.extensionOffset = offsetOf(f, mi.Exporter) + si.extensionOffset = offsetOf(f) si.extensionType = f.Type } + case "lazyFields", "XXX_lazyUnmarshalInfo": + si.lazyOffset = offsetOf(f) + case "XXX_presence": + si.presenceOffset = offsetOf(f) default: for _, s := range strings.Split(f.Tag.Get("protobuf"), ",") { if len(s) > 0 && strings.Trim(s, "0123456789") == "" { @@ -244,9 +246,6 @@ func (mi *MessageInfo) Message(i int) protoreflect.MessageType { mi.init() fd := mi.Desc.Fields().Get(i) switch { - case fd.IsWeak(): - mt, _ := protoregistry.GlobalTypes.FindMessageByName(fd.Message().FullName()) - return mt case fd.IsMap(): return mapEntryType{fd.Message(), mi.fieldTypes[fd.Number()]} default: diff --git a/vendor/google.golang.org/protobuf/internal/impl/message_opaque.go b/vendor/google.golang.org/protobuf/internal/impl/message_opaque.go new file mode 100644 index 0000000000..5a439daacb --- /dev/null +++ b/vendor/google.golang.org/protobuf/internal/impl/message_opaque.go @@ -0,0 +1,598 @@ +// Copyright 2024 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package impl + +import ( + "fmt" + "math" + "reflect" + "strings" + "sync/atomic" + + "google.golang.org/protobuf/internal/filedesc" + "google.golang.org/protobuf/reflect/protoreflect" +) + +type opaqueStructInfo struct { + structInfo +} + +// isOpaque determines whether a protobuf message type is on the Opaque API. It +// checks whether the type is a Go struct that protoc-gen-go would generate. +// +// This function only detects newly generated messages from the v2 +// implementation of protoc-gen-go. It is unable to classify generated messages +// that are too old or those that are generated by a different generator +// such as protoc-gen-gogo. +func isOpaque(t reflect.Type) bool { + // The current detection mechanism is to simply check the first field + // for a struct tag with the "protogen" key. + if t.Kind() == reflect.Struct && t.NumField() > 0 { + pgt := t.Field(0).Tag.Get("protogen") + return strings.HasPrefix(pgt, "opaque.") + } + return false +} + +func opaqueInitHook(mi *MessageInfo) bool { + mt := mi.GoReflectType.Elem() + si := opaqueStructInfo{ + structInfo: mi.makeStructInfo(mt), + } + + if !isOpaque(mt) { + return false + } + + defer atomic.StoreUint32(&mi.initDone, 1) + + mi.fields = map[protoreflect.FieldNumber]*fieldInfo{} + fds := mi.Desc.Fields() + for i := 0; i < fds.Len(); i++ { + fd := fds.Get(i) + fs := si.fieldsByNumber[fd.Number()] + var fi fieldInfo + usePresence, _ := filedesc.UsePresenceForField(fd) + + switch { + case fd.ContainingOneof() != nil && !fd.ContainingOneof().IsSynthetic(): + // Oneofs are no different for opaque. + fi = fieldInfoForOneof(fd, si.oneofsByName[fd.ContainingOneof().Name()], mi.Exporter, si.oneofWrappersByNumber[fd.Number()]) + case fd.IsMap(): + fi = mi.fieldInfoForMapOpaque(si, fd, fs) + case fd.IsList() && fd.Message() == nil && usePresence: + fi = mi.fieldInfoForScalarListOpaque(si, fd, fs) + case fd.IsList() && fd.Message() == nil: + // Proto3 lists without presence can use same access methods as open + fi = fieldInfoForList(fd, fs, mi.Exporter) + case fd.IsList() && usePresence: + fi = mi.fieldInfoForMessageListOpaque(si, fd, fs) + case fd.IsList(): + // Proto3 opaque messages that does not need presence bitmap. + // Different representation than open struct, but same logic + fi = mi.fieldInfoForMessageListOpaqueNoPresence(si, fd, fs) + case fd.Message() != nil && usePresence: + fi = mi.fieldInfoForMessageOpaque(si, fd, fs) + case fd.Message() != nil: + // Proto3 messages without presence can use same access methods as open + fi = fieldInfoForMessage(fd, fs, mi.Exporter) + default: + fi = mi.fieldInfoForScalarOpaque(si, fd, fs) + } + mi.fields[fd.Number()] = &fi + } + mi.oneofs = map[protoreflect.Name]*oneofInfo{} + for i := 0; i < mi.Desc.Oneofs().Len(); i++ { + od := mi.Desc.Oneofs().Get(i) + mi.oneofs[od.Name()] = makeOneofInfoOpaque(mi, od, si.structInfo, mi.Exporter) + } + + mi.denseFields = make([]*fieldInfo, fds.Len()*2) + for i := 0; i < fds.Len(); i++ { + if fd := fds.Get(i); int(fd.Number()) < len(mi.denseFields) { + mi.denseFields[fd.Number()] = mi.fields[fd.Number()] + } + } + + for i := 0; i < fds.Len(); { + fd := fds.Get(i) + if od := fd.ContainingOneof(); od != nil && !fd.ContainingOneof().IsSynthetic() { + mi.rangeInfos = append(mi.rangeInfos, mi.oneofs[od.Name()]) + i += od.Fields().Len() + } else { + mi.rangeInfos = append(mi.rangeInfos, mi.fields[fd.Number()]) + i++ + } + } + + mi.makeExtensionFieldsFunc(mt, si.structInfo) + mi.makeUnknownFieldsFunc(mt, si.structInfo) + mi.makeOpaqueCoderMethods(mt, si) + mi.makeFieldTypes(si.structInfo) + + return true +} + +func makeOneofInfoOpaque(mi *MessageInfo, od protoreflect.OneofDescriptor, si structInfo, x exporter) *oneofInfo { + oi := &oneofInfo{oneofDesc: od} + if od.IsSynthetic() { + fd := od.Fields().Get(0) + index, _ := presenceIndex(mi.Desc, fd) + oi.which = func(p pointer) protoreflect.FieldNumber { + if p.IsNil() { + return 0 + } + if !mi.present(p, index) { + return 0 + } + return od.Fields().Get(0).Number() + } + return oi + } + // Dispatch to non-opaque oneof implementation for non-synthetic oneofs. + return makeOneofInfo(od, si, x) +} + +func (mi *MessageInfo) fieldInfoForMapOpaque(si opaqueStructInfo, fd protoreflect.FieldDescriptor, fs reflect.StructField) fieldInfo { + ft := fs.Type + if ft.Kind() != reflect.Map { + panic(fmt.Sprintf("invalid type: got %v, want map kind", ft)) + } + fieldOffset := offsetOf(fs) + conv := NewConverter(ft, fd) + return fieldInfo{ + fieldDesc: fd, + has: func(p pointer) bool { + if p.IsNil() { + return false + } + // Don't bother checking presence bits, since we need to + // look at the map length even if the presence bit is set. + rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem() + return rv.Len() > 0 + }, + clear: func(p pointer) { + rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem() + rv.Set(reflect.Zero(rv.Type())) + }, + get: func(p pointer) protoreflect.Value { + if p.IsNil() { + return conv.Zero() + } + rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem() + if rv.Len() == 0 { + return conv.Zero() + } + return conv.PBValueOf(rv) + }, + set: func(p pointer, v protoreflect.Value) { + pv := conv.GoValueOf(v) + if pv.IsNil() { + panic(fmt.Sprintf("invalid value: setting map field to read-only value")) + } + rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem() + rv.Set(pv) + }, + mutable: func(p pointer) protoreflect.Value { + v := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem() + if v.IsNil() { + v.Set(reflect.MakeMap(fs.Type)) + } + return conv.PBValueOf(v) + }, + newField: func() protoreflect.Value { + return conv.New() + }, + } +} + +func (mi *MessageInfo) fieldInfoForScalarListOpaque(si opaqueStructInfo, fd protoreflect.FieldDescriptor, fs reflect.StructField) fieldInfo { + ft := fs.Type + if ft.Kind() != reflect.Slice { + panic(fmt.Sprintf("invalid type: got %v, want slice kind", ft)) + } + conv := NewConverter(reflect.PtrTo(ft), fd) + fieldOffset := offsetOf(fs) + index, _ := presenceIndex(mi.Desc, fd) + return fieldInfo{ + fieldDesc: fd, + has: func(p pointer) bool { + if p.IsNil() { + return false + } + rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem() + return rv.Len() > 0 + }, + clear: func(p pointer) { + rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem() + rv.Set(reflect.Zero(rv.Type())) + }, + get: func(p pointer) protoreflect.Value { + if p.IsNil() { + return conv.Zero() + } + rv := p.Apply(fieldOffset).AsValueOf(fs.Type) + if rv.Elem().Len() == 0 { + return conv.Zero() + } + return conv.PBValueOf(rv) + }, + set: func(p pointer, v protoreflect.Value) { + pv := conv.GoValueOf(v) + if pv.IsNil() { + panic(fmt.Sprintf("invalid value: setting repeated field to read-only value")) + } + mi.setPresent(p, index) + rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem() + rv.Set(pv.Elem()) + }, + mutable: func(p pointer) protoreflect.Value { + mi.setPresent(p, index) + return conv.PBValueOf(p.Apply(fieldOffset).AsValueOf(fs.Type)) + }, + newField: func() protoreflect.Value { + return conv.New() + }, + } +} + +func (mi *MessageInfo) fieldInfoForMessageListOpaque(si opaqueStructInfo, fd protoreflect.FieldDescriptor, fs reflect.StructField) fieldInfo { + ft := fs.Type + if ft.Kind() != reflect.Ptr || ft.Elem().Kind() != reflect.Slice { + panic(fmt.Sprintf("invalid type: got %v, want slice kind", ft)) + } + conv := NewConverter(ft, fd) + fieldOffset := offsetOf(fs) + index, _ := presenceIndex(mi.Desc, fd) + fieldNumber := fd.Number() + return fieldInfo{ + fieldDesc: fd, + has: func(p pointer) bool { + if p.IsNil() { + return false + } + if !mi.present(p, index) { + return false + } + sp := p.Apply(fieldOffset).AtomicGetPointer() + if sp.IsNil() { + // Lazily unmarshal this field. + mi.lazyUnmarshal(p, fieldNumber) + sp = p.Apply(fieldOffset).AtomicGetPointer() + } + rv := sp.AsValueOf(fs.Type.Elem()) + return rv.Elem().Len() > 0 + }, + clear: func(p pointer) { + fp := p.Apply(fieldOffset) + sp := fp.AtomicGetPointer() + if sp.IsNil() { + sp = fp.AtomicSetPointerIfNil(pointerOfValue(reflect.New(fs.Type.Elem()))) + mi.setPresent(p, index) + } + rv := sp.AsValueOf(fs.Type.Elem()) + rv.Elem().Set(reflect.Zero(rv.Type().Elem())) + }, + get: func(p pointer) protoreflect.Value { + if p.IsNil() { + return conv.Zero() + } + if !mi.present(p, index) { + return conv.Zero() + } + sp := p.Apply(fieldOffset).AtomicGetPointer() + if sp.IsNil() { + // Lazily unmarshal this field. + mi.lazyUnmarshal(p, fieldNumber) + sp = p.Apply(fieldOffset).AtomicGetPointer() + } + rv := sp.AsValueOf(fs.Type.Elem()) + if rv.Elem().Len() == 0 { + return conv.Zero() + } + return conv.PBValueOf(rv) + }, + set: func(p pointer, v protoreflect.Value) { + fp := p.Apply(fieldOffset) + sp := fp.AtomicGetPointer() + if sp.IsNil() { + sp = fp.AtomicSetPointerIfNil(pointerOfValue(reflect.New(fs.Type.Elem()))) + mi.setPresent(p, index) + } + rv := sp.AsValueOf(fs.Type.Elem()) + val := conv.GoValueOf(v) + if val.IsNil() { + panic(fmt.Sprintf("invalid value: setting repeated field to read-only value")) + } else { + rv.Elem().Set(val.Elem()) + } + }, + mutable: func(p pointer) protoreflect.Value { + fp := p.Apply(fieldOffset) + sp := fp.AtomicGetPointer() + if sp.IsNil() { + if mi.present(p, index) { + // Lazily unmarshal this field. + mi.lazyUnmarshal(p, fieldNumber) + sp = p.Apply(fieldOffset).AtomicGetPointer() + } else { + sp = fp.AtomicSetPointerIfNil(pointerOfValue(reflect.New(fs.Type.Elem()))) + mi.setPresent(p, index) + } + } + rv := sp.AsValueOf(fs.Type.Elem()) + return conv.PBValueOf(rv) + }, + newField: func() protoreflect.Value { + return conv.New() + }, + } +} + +func (mi *MessageInfo) fieldInfoForMessageListOpaqueNoPresence(si opaqueStructInfo, fd protoreflect.FieldDescriptor, fs reflect.StructField) fieldInfo { + ft := fs.Type + if ft.Kind() != reflect.Ptr || ft.Elem().Kind() != reflect.Slice { + panic(fmt.Sprintf("invalid type: got %v, want slice kind", ft)) + } + conv := NewConverter(ft, fd) + fieldOffset := offsetOf(fs) + return fieldInfo{ + fieldDesc: fd, + has: func(p pointer) bool { + if p.IsNil() { + return false + } + rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem() + if rv.IsNil() { + return false + } + return rv.Elem().Len() > 0 + }, + clear: func(p pointer) { + rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem() + if !rv.IsNil() { + rv.Elem().Set(reflect.Zero(rv.Type().Elem())) + } + }, + get: func(p pointer) protoreflect.Value { + if p.IsNil() { + return conv.Zero() + } + rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem() + if rv.IsNil() { + return conv.Zero() + } + if rv.Elem().Len() == 0 { + return conv.Zero() + } + return conv.PBValueOf(rv) + }, + set: func(p pointer, v protoreflect.Value) { + rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem() + if rv.IsNil() { + rv.Set(reflect.New(fs.Type.Elem())) + } + val := conv.GoValueOf(v) + if val.IsNil() { + panic(fmt.Sprintf("invalid value: setting repeated field to read-only value")) + } else { + rv.Elem().Set(val.Elem()) + } + }, + mutable: func(p pointer) protoreflect.Value { + rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem() + if rv.IsNil() { + rv.Set(reflect.New(fs.Type.Elem())) + } + return conv.PBValueOf(rv) + }, + newField: func() protoreflect.Value { + return conv.New() + }, + } +} + +func (mi *MessageInfo) fieldInfoForScalarOpaque(si opaqueStructInfo, fd protoreflect.FieldDescriptor, fs reflect.StructField) fieldInfo { + ft := fs.Type + nullable := fd.HasPresence() + if oneof := fd.ContainingOneof(); oneof != nil && oneof.IsSynthetic() { + nullable = true + } + deref := false + if nullable && ft.Kind() == reflect.Ptr { + ft = ft.Elem() + deref = true + } + conv := NewConverter(ft, fd) + fieldOffset := offsetOf(fs) + index, _ := presenceIndex(mi.Desc, fd) + var getter func(p pointer) protoreflect.Value + if !nullable { + getter = getterForDirectScalar(fd, fs, conv, fieldOffset) + } else { + getter = getterForOpaqueNullableScalar(mi, index, fd, fs, conv, fieldOffset) + } + return fieldInfo{ + fieldDesc: fd, + has: func(p pointer) bool { + if p.IsNil() { + return false + } + if nullable { + return mi.present(p, index) + } + rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem() + switch rv.Kind() { + case reflect.Bool: + return rv.Bool() + case reflect.Int32, reflect.Int64: + return rv.Int() != 0 + case reflect.Uint32, reflect.Uint64: + return rv.Uint() != 0 + case reflect.Float32, reflect.Float64: + return rv.Float() != 0 || math.Signbit(rv.Float()) + case reflect.String, reflect.Slice: + return rv.Len() > 0 + default: + panic(fmt.Sprintf("invalid type: %v", rv.Type())) // should never happen + } + }, + clear: func(p pointer) { + if nullable { + mi.clearPresent(p, index) + } + // This is only valuable for bytes and strings, but we do it unconditionally. + rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem() + rv.Set(reflect.Zero(rv.Type())) + }, + get: getter, + // TODO: Implement unsafe fast path for set? + set: func(p pointer, v protoreflect.Value) { + rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem() + if deref { + if rv.IsNil() { + rv.Set(reflect.New(ft)) + } + rv = rv.Elem() + } + + rv.Set(conv.GoValueOf(v)) + if nullable && rv.Kind() == reflect.Slice && rv.IsNil() { + rv.Set(emptyBytes) + } + if nullable { + mi.setPresent(p, index) + } + }, + newField: func() protoreflect.Value { + return conv.New() + }, + } +} + +func (mi *MessageInfo) fieldInfoForMessageOpaque(si opaqueStructInfo, fd protoreflect.FieldDescriptor, fs reflect.StructField) fieldInfo { + ft := fs.Type + conv := NewConverter(ft, fd) + fieldOffset := offsetOf(fs) + index, _ := presenceIndex(mi.Desc, fd) + fieldNumber := fd.Number() + elemType := fs.Type.Elem() + return fieldInfo{ + fieldDesc: fd, + has: func(p pointer) bool { + if p.IsNil() { + return false + } + return mi.present(p, index) + }, + clear: func(p pointer) { + mi.clearPresent(p, index) + p.Apply(fieldOffset).AtomicSetNilPointer() + }, + get: func(p pointer) protoreflect.Value { + if p.IsNil() || !mi.present(p, index) { + return conv.Zero() + } + fp := p.Apply(fieldOffset) + mp := fp.AtomicGetPointer() + if mp.IsNil() { + // Lazily unmarshal this field. + mi.lazyUnmarshal(p, fieldNumber) + mp = fp.AtomicGetPointer() + } + rv := mp.AsValueOf(elemType) + return conv.PBValueOf(rv) + }, + set: func(p pointer, v protoreflect.Value) { + val := pointerOfValue(conv.GoValueOf(v)) + if val.IsNil() { + panic("invalid nil pointer") + } + p.Apply(fieldOffset).AtomicSetPointer(val) + mi.setPresent(p, index) + }, + mutable: func(p pointer) protoreflect.Value { + fp := p.Apply(fieldOffset) + mp := fp.AtomicGetPointer() + if mp.IsNil() { + if mi.present(p, index) { + // Lazily unmarshal this field. + mi.lazyUnmarshal(p, fieldNumber) + mp = fp.AtomicGetPointer() + } else { + mp = pointerOfValue(conv.GoValueOf(conv.New())) + fp.AtomicSetPointer(mp) + mi.setPresent(p, index) + } + } + return conv.PBValueOf(mp.AsValueOf(fs.Type.Elem())) + }, + newMessage: func() protoreflect.Message { + return conv.New().Message() + }, + newField: func() protoreflect.Value { + return conv.New() + }, + } +} + +// A presenceList wraps a List, updating presence bits as necessary when the +// list contents change. +type presenceList struct { + pvalueList + setPresence func(bool) +} +type pvalueList interface { + protoreflect.List + //Unwrapper +} + +func (list presenceList) Append(v protoreflect.Value) { + list.pvalueList.Append(v) + list.setPresence(true) +} +func (list presenceList) Truncate(i int) { + list.pvalueList.Truncate(i) + list.setPresence(i > 0) +} + +// presenceIndex returns the index to pass to presence functions. +// +// TODO: field.Desc.Index() would be simpler, and would give space to record the presence of oneof fields. +func presenceIndex(md protoreflect.MessageDescriptor, fd protoreflect.FieldDescriptor) (uint32, presenceSize) { + found := false + var index, numIndices uint32 + for i := 0; i < md.Fields().Len(); i++ { + f := md.Fields().Get(i) + if f == fd { + found = true + index = numIndices + } + if f.ContainingOneof() == nil || isLastOneofField(f) { + numIndices++ + } + } + if !found { + panic(fmt.Sprintf("BUG: %v not in %v", fd.Name(), md.FullName())) + } + return index, presenceSize(numIndices) +} + +func isLastOneofField(fd protoreflect.FieldDescriptor) bool { + fields := fd.ContainingOneof().Fields() + return fields.Get(fields.Len()-1) == fd +} + +func (mi *MessageInfo) setPresent(p pointer, index uint32) { + p.Apply(mi.presenceOffset).PresenceInfo().SetPresent(index, mi.presenceSize) +} + +func (mi *MessageInfo) clearPresent(p pointer, index uint32) { + p.Apply(mi.presenceOffset).PresenceInfo().ClearPresent(index) +} + +func (mi *MessageInfo) present(p pointer, index uint32) bool { + return p.Apply(mi.presenceOffset).PresenceInfo().Present(index) +} diff --git a/vendor/google.golang.org/protobuf/internal/impl/message_opaque_gen.go b/vendor/google.golang.org/protobuf/internal/impl/message_opaque_gen.go new file mode 100644 index 0000000000..a69825699a --- /dev/null +++ b/vendor/google.golang.org/protobuf/internal/impl/message_opaque_gen.go @@ -0,0 +1,132 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Code generated by generate-types. DO NOT EDIT. + +package impl + +import ( + "reflect" + + "google.golang.org/protobuf/reflect/protoreflect" +) + +func getterForOpaqueNullableScalar(mi *MessageInfo, index uint32, fd protoreflect.FieldDescriptor, fs reflect.StructField, conv Converter, fieldOffset offset) func(p pointer) protoreflect.Value { + ft := fs.Type + if ft.Kind() == reflect.Ptr { + ft = ft.Elem() + } + if fd.Kind() == protoreflect.EnumKind { + // Enums for nullable opaque types. + return func(p pointer) protoreflect.Value { + if p.IsNil() || !mi.present(p, index) { + return conv.Zero() + } + rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem() + return conv.PBValueOf(rv) + } + } + switch ft.Kind() { + case reflect.Bool: + return func(p pointer) protoreflect.Value { + if p.IsNil() || !mi.present(p, index) { + return conv.Zero() + } + x := p.Apply(fieldOffset).Bool() + return protoreflect.ValueOfBool(*x) + } + case reflect.Int32: + return func(p pointer) protoreflect.Value { + if p.IsNil() || !mi.present(p, index) { + return conv.Zero() + } + x := p.Apply(fieldOffset).Int32() + return protoreflect.ValueOfInt32(*x) + } + case reflect.Uint32: + return func(p pointer) protoreflect.Value { + if p.IsNil() || !mi.present(p, index) { + return conv.Zero() + } + x := p.Apply(fieldOffset).Uint32() + return protoreflect.ValueOfUint32(*x) + } + case reflect.Int64: + return func(p pointer) protoreflect.Value { + if p.IsNil() || !mi.present(p, index) { + return conv.Zero() + } + x := p.Apply(fieldOffset).Int64() + return protoreflect.ValueOfInt64(*x) + } + case reflect.Uint64: + return func(p pointer) protoreflect.Value { + if p.IsNil() || !mi.present(p, index) { + return conv.Zero() + } + x := p.Apply(fieldOffset).Uint64() + return protoreflect.ValueOfUint64(*x) + } + case reflect.Float32: + return func(p pointer) protoreflect.Value { + if p.IsNil() || !mi.present(p, index) { + return conv.Zero() + } + x := p.Apply(fieldOffset).Float32() + return protoreflect.ValueOfFloat32(*x) + } + case reflect.Float64: + return func(p pointer) protoreflect.Value { + if p.IsNil() || !mi.present(p, index) { + return conv.Zero() + } + x := p.Apply(fieldOffset).Float64() + return protoreflect.ValueOfFloat64(*x) + } + case reflect.String: + if fd.Kind() == protoreflect.BytesKind { + return func(p pointer) protoreflect.Value { + if p.IsNil() || !mi.present(p, index) { + return conv.Zero() + } + x := p.Apply(fieldOffset).StringPtr() + if *x == nil { + return conv.Zero() + } + if len(**x) == 0 { + return protoreflect.ValueOfBytes(nil) + } + return protoreflect.ValueOfBytes([]byte(**x)) + } + } + return func(p pointer) protoreflect.Value { + if p.IsNil() || !mi.present(p, index) { + return conv.Zero() + } + x := p.Apply(fieldOffset).StringPtr() + if *x == nil { + return conv.Zero() + } + return protoreflect.ValueOfString(**x) + } + case reflect.Slice: + if fd.Kind() == protoreflect.StringKind { + return func(p pointer) protoreflect.Value { + if p.IsNil() || !mi.present(p, index) { + return conv.Zero() + } + x := p.Apply(fieldOffset).Bytes() + return protoreflect.ValueOfString(string(*x)) + } + } + return func(p pointer) protoreflect.Value { + if p.IsNil() || !mi.present(p, index) { + return conv.Zero() + } + x := p.Apply(fieldOffset).Bytes() + return protoreflect.ValueOfBytes(*x) + } + } + panic("unexpected protobuf kind: " + ft.Kind().String()) +} diff --git a/vendor/google.golang.org/protobuf/internal/impl/message_reflect.go b/vendor/google.golang.org/protobuf/internal/impl/message_reflect.go index ecb4623d70..0d20132fa2 100644 --- a/vendor/google.golang.org/protobuf/internal/impl/message_reflect.go +++ b/vendor/google.golang.org/protobuf/internal/impl/message_reflect.go @@ -72,8 +72,6 @@ func (mi *MessageInfo) makeKnownFieldsFunc(si structInfo) { fi = fieldInfoForMap(fd, fs, mi.Exporter) case fd.IsList(): fi = fieldInfoForList(fd, fs, mi.Exporter) - case fd.IsWeak(): - fi = fieldInfoForWeakMessage(fd, si.weakOffset) case fd.Message() != nil: fi = fieldInfoForMessage(fd, fs, mi.Exporter) default: @@ -205,6 +203,11 @@ func (mi *MessageInfo) makeFieldTypes(si structInfo) { case fd.IsList(): if fd.Enum() != nil || fd.Message() != nil { ft = fs.Type.Elem() + + if ft.Kind() == reflect.Slice { + ft = ft.Elem() + } + } isMessage = fd.Message() != nil case fd.Enum() != nil: @@ -214,9 +217,6 @@ func (mi *MessageInfo) makeFieldTypes(si structInfo) { } case fd.Message() != nil: ft = fs.Type - if fd.IsWeak() { - ft = nil - } isMessage = true } if isMessage && ft != nil && ft.Kind() != reflect.Ptr { diff --git a/vendor/google.golang.org/protobuf/internal/impl/message_reflect_field.go b/vendor/google.golang.org/protobuf/internal/impl/message_reflect_field.go index 986322b195..68d4ae32ec 100644 --- a/vendor/google.golang.org/protobuf/internal/impl/message_reflect_field.go +++ b/vendor/google.golang.org/protobuf/internal/impl/message_reflect_field.go @@ -8,11 +8,8 @@ import ( "fmt" "math" "reflect" - "sync" - "google.golang.org/protobuf/internal/flags" "google.golang.org/protobuf/reflect/protoreflect" - "google.golang.org/protobuf/reflect/protoregistry" ) type fieldInfo struct { @@ -76,7 +73,7 @@ func fieldInfoForOneof(fd protoreflect.FieldDescriptor, fs reflect.StructField, isMessage := fd.Message() != nil // TODO: Implement unsafe fast path? - fieldOffset := offsetOf(fs, x) + fieldOffset := offsetOf(fs) return fieldInfo{ // NOTE: The logic below intentionally assumes that oneof fields are // well-formatted. That is, the oneof interface never contains a @@ -152,7 +149,7 @@ func fieldInfoForMap(fd protoreflect.FieldDescriptor, fs reflect.StructField, x conv := NewConverter(ft, fd) // TODO: Implement unsafe fast path? - fieldOffset := offsetOf(fs, x) + fieldOffset := offsetOf(fs) return fieldInfo{ fieldDesc: fd, has: func(p pointer) bool { @@ -205,7 +202,7 @@ func fieldInfoForList(fd protoreflect.FieldDescriptor, fs reflect.StructField, x conv := NewConverter(reflect.PtrTo(ft), fd) // TODO: Implement unsafe fast path? - fieldOffset := offsetOf(fs, x) + fieldOffset := offsetOf(fs) return fieldInfo{ fieldDesc: fd, has: func(p pointer) bool { @@ -256,6 +253,7 @@ func fieldInfoForScalar(fd protoreflect.FieldDescriptor, fs reflect.StructField, ft := fs.Type nullable := fd.HasPresence() isBytes := ft.Kind() == reflect.Slice && ft.Elem().Kind() == reflect.Uint8 + var getter func(p pointer) protoreflect.Value if nullable { if ft.Kind() != reflect.Ptr && ft.Kind() != reflect.Slice { // This never occurs for generated message types. @@ -268,19 +266,25 @@ func fieldInfoForScalar(fd protoreflect.FieldDescriptor, fs reflect.StructField, } } conv := NewConverter(ft, fd) + fieldOffset := offsetOf(fs) + + // Generate specialized getter functions to avoid going through reflect.Value + if nullable { + getter = getterForNullableScalar(fd, fs, conv, fieldOffset) + } else { + getter = getterForDirectScalar(fd, fs, conv, fieldOffset) + } - // TODO: Implement unsafe fast path? - fieldOffset := offsetOf(fs, x) return fieldInfo{ fieldDesc: fd, has: func(p pointer) bool { if p.IsNil() { return false } - rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem() if nullable { - return !rv.IsNil() + return !p.Apply(fieldOffset).Elem().IsNil() } + rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem() switch rv.Kind() { case reflect.Bool: return rv.Bool() @@ -300,21 +304,8 @@ func fieldInfoForScalar(fd protoreflect.FieldDescriptor, fs reflect.StructField, rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem() rv.Set(reflect.Zero(rv.Type())) }, - get: func(p pointer) protoreflect.Value { - if p.IsNil() { - return conv.Zero() - } - rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem() - if nullable { - if rv.IsNil() { - return conv.Zero() - } - if rv.Kind() == reflect.Ptr { - rv = rv.Elem() - } - } - return conv.PBValueOf(rv) - }, + get: getter, + // TODO: Implement unsafe fast path for set? set: func(p pointer, v protoreflect.Value) { rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem() if nullable && rv.Kind() == reflect.Ptr { @@ -338,85 +329,12 @@ func fieldInfoForScalar(fd protoreflect.FieldDescriptor, fs reflect.StructField, } } -func fieldInfoForWeakMessage(fd protoreflect.FieldDescriptor, weakOffset offset) fieldInfo { - if !flags.ProtoLegacy { - panic("no support for proto1 weak fields") - } - - var once sync.Once - var messageType protoreflect.MessageType - lazyInit := func() { - once.Do(func() { - messageName := fd.Message().FullName() - messageType, _ = protoregistry.GlobalTypes.FindMessageByName(messageName) - if messageType == nil { - panic(fmt.Sprintf("weak message %v for field %v is not linked in", messageName, fd.FullName())) - } - }) - } - - num := fd.Number() - return fieldInfo{ - fieldDesc: fd, - has: func(p pointer) bool { - if p.IsNil() { - return false - } - _, ok := p.Apply(weakOffset).WeakFields().get(num) - return ok - }, - clear: func(p pointer) { - p.Apply(weakOffset).WeakFields().clear(num) - }, - get: func(p pointer) protoreflect.Value { - lazyInit() - if p.IsNil() { - return protoreflect.ValueOfMessage(messageType.Zero()) - } - m, ok := p.Apply(weakOffset).WeakFields().get(num) - if !ok { - return protoreflect.ValueOfMessage(messageType.Zero()) - } - return protoreflect.ValueOfMessage(m.ProtoReflect()) - }, - set: func(p pointer, v protoreflect.Value) { - lazyInit() - m := v.Message() - if m.Descriptor() != messageType.Descriptor() { - if got, want := m.Descriptor().FullName(), messageType.Descriptor().FullName(); got != want { - panic(fmt.Sprintf("field %v has mismatching message descriptor: got %v, want %v", fd.FullName(), got, want)) - } - panic(fmt.Sprintf("field %v has mismatching message descriptor: %v", fd.FullName(), m.Descriptor().FullName())) - } - p.Apply(weakOffset).WeakFields().set(num, m.Interface()) - }, - mutable: func(p pointer) protoreflect.Value { - lazyInit() - fs := p.Apply(weakOffset).WeakFields() - m, ok := fs.get(num) - if !ok { - m = messageType.New().Interface() - fs.set(num, m) - } - return protoreflect.ValueOfMessage(m.ProtoReflect()) - }, - newMessage: func() protoreflect.Message { - lazyInit() - return messageType.New() - }, - newField: func() protoreflect.Value { - lazyInit() - return protoreflect.ValueOfMessage(messageType.New()) - }, - } -} - func fieldInfoForMessage(fd protoreflect.FieldDescriptor, fs reflect.StructField, x exporter) fieldInfo { ft := fs.Type conv := NewConverter(ft, fd) // TODO: Implement unsafe fast path? - fieldOffset := offsetOf(fs, x) + fieldOffset := offsetOf(fs) return fieldInfo{ fieldDesc: fd, has: func(p pointer) bool { @@ -425,7 +343,7 @@ func fieldInfoForMessage(fd protoreflect.FieldDescriptor, fs reflect.StructField } rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem() if fs.Type.Kind() != reflect.Ptr { - return !isZero(rv) + return !rv.IsZero() } return !rv.IsNil() }, @@ -472,7 +390,7 @@ func makeOneofInfo(od protoreflect.OneofDescriptor, si structInfo, x exporter) * oi := &oneofInfo{oneofDesc: od} if od.IsSynthetic() { fs := si.fieldsByNumber[od.Fields().Get(0).Number()] - fieldOffset := offsetOf(fs, x) + fieldOffset := offsetOf(fs) oi.which = func(p pointer) protoreflect.FieldNumber { if p.IsNil() { return 0 @@ -485,7 +403,7 @@ func makeOneofInfo(od protoreflect.OneofDescriptor, si structInfo, x exporter) * } } else { fs := si.oneofsByName[od.Name()] - fieldOffset := offsetOf(fs, x) + fieldOffset := offsetOf(fs) oi.which = func(p pointer) protoreflect.FieldNumber { if p.IsNil() { return 0 @@ -503,41 +421,3 @@ func makeOneofInfo(od protoreflect.OneofDescriptor, si structInfo, x exporter) * } return oi } - -// isZero is identical to reflect.Value.IsZero. -// TODO: Remove this when Go1.13 is the minimally supported Go version. -func isZero(v reflect.Value) bool { - switch v.Kind() { - case reflect.Bool: - return !v.Bool() - case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: - return v.Int() == 0 - case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: - return v.Uint() == 0 - case reflect.Float32, reflect.Float64: - return math.Float64bits(v.Float()) == 0 - case reflect.Complex64, reflect.Complex128: - c := v.Complex() - return math.Float64bits(real(c)) == 0 && math.Float64bits(imag(c)) == 0 - case reflect.Array: - for i := 0; i < v.Len(); i++ { - if !isZero(v.Index(i)) { - return false - } - } - return true - case reflect.Chan, reflect.Func, reflect.Interface, reflect.Map, reflect.Ptr, reflect.Slice, reflect.UnsafePointer: - return v.IsNil() - case reflect.String: - return v.Len() == 0 - case reflect.Struct: - for i := 0; i < v.NumField(); i++ { - if !isZero(v.Field(i)) { - return false - } - } - return true - default: - panic(&reflect.ValueError{Method: "reflect.Value.IsZero", Kind: v.Kind()}) - } -} diff --git a/vendor/google.golang.org/protobuf/internal/impl/message_reflect_field_gen.go b/vendor/google.golang.org/protobuf/internal/impl/message_reflect_field_gen.go new file mode 100644 index 0000000000..af5e063a1e --- /dev/null +++ b/vendor/google.golang.org/protobuf/internal/impl/message_reflect_field_gen.go @@ -0,0 +1,273 @@ +// Copyright 2018 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Code generated by generate-types. DO NOT EDIT. + +package impl + +import ( + "reflect" + + "google.golang.org/protobuf/reflect/protoreflect" +) + +func getterForNullableScalar(fd protoreflect.FieldDescriptor, fs reflect.StructField, conv Converter, fieldOffset offset) func(p pointer) protoreflect.Value { + ft := fs.Type + if ft.Kind() == reflect.Ptr { + ft = ft.Elem() + } + if fd.Kind() == protoreflect.EnumKind { + elemType := fs.Type.Elem() + // Enums for nullable types. + return func(p pointer) protoreflect.Value { + if p.IsNil() { + return conv.Zero() + } + rv := p.Apply(fieldOffset).Elem().AsValueOf(elemType) + if rv.IsNil() { + return conv.Zero() + } + return conv.PBValueOf(rv.Elem()) + } + } + switch ft.Kind() { + case reflect.Bool: + return func(p pointer) protoreflect.Value { + if p.IsNil() { + return conv.Zero() + } + x := p.Apply(fieldOffset).BoolPtr() + if *x == nil { + return conv.Zero() + } + return protoreflect.ValueOfBool(**x) + } + case reflect.Int32: + return func(p pointer) protoreflect.Value { + if p.IsNil() { + return conv.Zero() + } + x := p.Apply(fieldOffset).Int32Ptr() + if *x == nil { + return conv.Zero() + } + return protoreflect.ValueOfInt32(**x) + } + case reflect.Uint32: + return func(p pointer) protoreflect.Value { + if p.IsNil() { + return conv.Zero() + } + x := p.Apply(fieldOffset).Uint32Ptr() + if *x == nil { + return conv.Zero() + } + return protoreflect.ValueOfUint32(**x) + } + case reflect.Int64: + return func(p pointer) protoreflect.Value { + if p.IsNil() { + return conv.Zero() + } + x := p.Apply(fieldOffset).Int64Ptr() + if *x == nil { + return conv.Zero() + } + return protoreflect.ValueOfInt64(**x) + } + case reflect.Uint64: + return func(p pointer) protoreflect.Value { + if p.IsNil() { + return conv.Zero() + } + x := p.Apply(fieldOffset).Uint64Ptr() + if *x == nil { + return conv.Zero() + } + return protoreflect.ValueOfUint64(**x) + } + case reflect.Float32: + return func(p pointer) protoreflect.Value { + if p.IsNil() { + return conv.Zero() + } + x := p.Apply(fieldOffset).Float32Ptr() + if *x == nil { + return conv.Zero() + } + return protoreflect.ValueOfFloat32(**x) + } + case reflect.Float64: + return func(p pointer) protoreflect.Value { + if p.IsNil() { + return conv.Zero() + } + x := p.Apply(fieldOffset).Float64Ptr() + if *x == nil { + return conv.Zero() + } + return protoreflect.ValueOfFloat64(**x) + } + case reflect.String: + if fd.Kind() == protoreflect.BytesKind { + return func(p pointer) protoreflect.Value { + if p.IsNil() { + return conv.Zero() + } + x := p.Apply(fieldOffset).StringPtr() + if *x == nil { + return conv.Zero() + } + if len(**x) == 0 { + return protoreflect.ValueOfBytes(nil) + } + return protoreflect.ValueOfBytes([]byte(**x)) + } + } + return func(p pointer) protoreflect.Value { + if p.IsNil() { + return conv.Zero() + } + x := p.Apply(fieldOffset).StringPtr() + if *x == nil { + return conv.Zero() + } + return protoreflect.ValueOfString(**x) + } + case reflect.Slice: + if fd.Kind() == protoreflect.StringKind { + return func(p pointer) protoreflect.Value { + if p.IsNil() { + return conv.Zero() + } + x := p.Apply(fieldOffset).Bytes() + if len(*x) == 0 { + return conv.Zero() + } + return protoreflect.ValueOfString(string(*x)) + } + } + return func(p pointer) protoreflect.Value { + if p.IsNil() { + return conv.Zero() + } + x := p.Apply(fieldOffset).Bytes() + if *x == nil { + return conv.Zero() + } + return protoreflect.ValueOfBytes(*x) + } + } + panic("unexpected protobuf kind: " + ft.Kind().String()) +} + +func getterForDirectScalar(fd protoreflect.FieldDescriptor, fs reflect.StructField, conv Converter, fieldOffset offset) func(p pointer) protoreflect.Value { + ft := fs.Type + if fd.Kind() == protoreflect.EnumKind { + // Enums for non nullable types. + return func(p pointer) protoreflect.Value { + if p.IsNil() { + return conv.Zero() + } + rv := p.Apply(fieldOffset).AsValueOf(fs.Type).Elem() + return conv.PBValueOf(rv) + } + } + switch ft.Kind() { + case reflect.Bool: + return func(p pointer) protoreflect.Value { + if p.IsNil() { + return conv.Zero() + } + x := p.Apply(fieldOffset).Bool() + return protoreflect.ValueOfBool(*x) + } + case reflect.Int32: + return func(p pointer) protoreflect.Value { + if p.IsNil() { + return conv.Zero() + } + x := p.Apply(fieldOffset).Int32() + return protoreflect.ValueOfInt32(*x) + } + case reflect.Uint32: + return func(p pointer) protoreflect.Value { + if p.IsNil() { + return conv.Zero() + } + x := p.Apply(fieldOffset).Uint32() + return protoreflect.ValueOfUint32(*x) + } + case reflect.Int64: + return func(p pointer) protoreflect.Value { + if p.IsNil() { + return conv.Zero() + } + x := p.Apply(fieldOffset).Int64() + return protoreflect.ValueOfInt64(*x) + } + case reflect.Uint64: + return func(p pointer) protoreflect.Value { + if p.IsNil() { + return conv.Zero() + } + x := p.Apply(fieldOffset).Uint64() + return protoreflect.ValueOfUint64(*x) + } + case reflect.Float32: + return func(p pointer) protoreflect.Value { + if p.IsNil() { + return conv.Zero() + } + x := p.Apply(fieldOffset).Float32() + return protoreflect.ValueOfFloat32(*x) + } + case reflect.Float64: + return func(p pointer) protoreflect.Value { + if p.IsNil() { + return conv.Zero() + } + x := p.Apply(fieldOffset).Float64() + return protoreflect.ValueOfFloat64(*x) + } + case reflect.String: + if fd.Kind() == protoreflect.BytesKind { + return func(p pointer) protoreflect.Value { + if p.IsNil() { + return conv.Zero() + } + x := p.Apply(fieldOffset).String() + if len(*x) == 0 { + return protoreflect.ValueOfBytes(nil) + } + return protoreflect.ValueOfBytes([]byte(*x)) + } + } + return func(p pointer) protoreflect.Value { + if p.IsNil() { + return conv.Zero() + } + x := p.Apply(fieldOffset).String() + return protoreflect.ValueOfString(*x) + } + case reflect.Slice: + if fd.Kind() == protoreflect.StringKind { + return func(p pointer) protoreflect.Value { + if p.IsNil() { + return conv.Zero() + } + x := p.Apply(fieldOffset).Bytes() + return protoreflect.ValueOfString(string(*x)) + } + } + return func(p pointer) protoreflect.Value { + if p.IsNil() { + return conv.Zero() + } + x := p.Apply(fieldOffset).Bytes() + return protoreflect.ValueOfBytes(*x) + } + } + panic("unexpected protobuf kind: " + ft.Kind().String()) +} diff --git a/vendor/google.golang.org/protobuf/internal/impl/pointer_reflect.go b/vendor/google.golang.org/protobuf/internal/impl/pointer_reflect.go deleted file mode 100644 index da685e8a29..0000000000 --- a/vendor/google.golang.org/protobuf/internal/impl/pointer_reflect.go +++ /dev/null @@ -1,215 +0,0 @@ -// Copyright 2018 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build purego || appengine -// +build purego appengine - -package impl - -import ( - "fmt" - "reflect" - "sync" -) - -const UnsafeEnabled = false - -// Pointer is an opaque pointer type. -type Pointer any - -// offset represents the offset to a struct field, accessible from a pointer. -// The offset is the field index into a struct. -type offset struct { - index int - export exporter -} - -// offsetOf returns a field offset for the struct field. -func offsetOf(f reflect.StructField, x exporter) offset { - if len(f.Index) != 1 { - panic("embedded structs are not supported") - } - if f.PkgPath == "" { - return offset{index: f.Index[0]} // field is already exported - } - if x == nil { - panic("exporter must be provided for unexported field") - } - return offset{index: f.Index[0], export: x} -} - -// IsValid reports whether the offset is valid. -func (f offset) IsValid() bool { return f.index >= 0 } - -// invalidOffset is an invalid field offset. -var invalidOffset = offset{index: -1} - -// zeroOffset is a noop when calling pointer.Apply. -var zeroOffset = offset{index: 0} - -// pointer is an abstract representation of a pointer to a struct or field. -type pointer struct{ v reflect.Value } - -// pointerOf returns p as a pointer. -func pointerOf(p Pointer) pointer { - return pointerOfIface(p) -} - -// pointerOfValue returns v as a pointer. -func pointerOfValue(v reflect.Value) pointer { - return pointer{v: v} -} - -// pointerOfIface returns the pointer portion of an interface. -func pointerOfIface(v any) pointer { - return pointer{v: reflect.ValueOf(v)} -} - -// IsNil reports whether the pointer is nil. -func (p pointer) IsNil() bool { - return p.v.IsNil() -} - -// Apply adds an offset to the pointer to derive a new pointer -// to a specified field. The current pointer must be pointing at a struct. -func (p pointer) Apply(f offset) pointer { - if f.export != nil { - if v := reflect.ValueOf(f.export(p.v.Interface(), f.index)); v.IsValid() { - return pointer{v: v} - } - } - return pointer{v: p.v.Elem().Field(f.index).Addr()} -} - -// AsValueOf treats p as a pointer to an object of type t and returns the value. -// It is equivalent to reflect.ValueOf(p.AsIfaceOf(t)) -func (p pointer) AsValueOf(t reflect.Type) reflect.Value { - if got := p.v.Type().Elem(); got != t { - panic(fmt.Sprintf("invalid type: got %v, want %v", got, t)) - } - return p.v -} - -// AsIfaceOf treats p as a pointer to an object of type t and returns the value. -// It is equivalent to p.AsValueOf(t).Interface() -func (p pointer) AsIfaceOf(t reflect.Type) any { - return p.AsValueOf(t).Interface() -} - -func (p pointer) Bool() *bool { return p.v.Interface().(*bool) } -func (p pointer) BoolPtr() **bool { return p.v.Interface().(**bool) } -func (p pointer) BoolSlice() *[]bool { return p.v.Interface().(*[]bool) } -func (p pointer) Int32() *int32 { return p.v.Interface().(*int32) } -func (p pointer) Int32Ptr() **int32 { return p.v.Interface().(**int32) } -func (p pointer) Int32Slice() *[]int32 { return p.v.Interface().(*[]int32) } -func (p pointer) Int64() *int64 { return p.v.Interface().(*int64) } -func (p pointer) Int64Ptr() **int64 { return p.v.Interface().(**int64) } -func (p pointer) Int64Slice() *[]int64 { return p.v.Interface().(*[]int64) } -func (p pointer) Uint32() *uint32 { return p.v.Interface().(*uint32) } -func (p pointer) Uint32Ptr() **uint32 { return p.v.Interface().(**uint32) } -func (p pointer) Uint32Slice() *[]uint32 { return p.v.Interface().(*[]uint32) } -func (p pointer) Uint64() *uint64 { return p.v.Interface().(*uint64) } -func (p pointer) Uint64Ptr() **uint64 { return p.v.Interface().(**uint64) } -func (p pointer) Uint64Slice() *[]uint64 { return p.v.Interface().(*[]uint64) } -func (p pointer) Float32() *float32 { return p.v.Interface().(*float32) } -func (p pointer) Float32Ptr() **float32 { return p.v.Interface().(**float32) } -func (p pointer) Float32Slice() *[]float32 { return p.v.Interface().(*[]float32) } -func (p pointer) Float64() *float64 { return p.v.Interface().(*float64) } -func (p pointer) Float64Ptr() **float64 { return p.v.Interface().(**float64) } -func (p pointer) Float64Slice() *[]float64 { return p.v.Interface().(*[]float64) } -func (p pointer) String() *string { return p.v.Interface().(*string) } -func (p pointer) StringPtr() **string { return p.v.Interface().(**string) } -func (p pointer) StringSlice() *[]string { return p.v.Interface().(*[]string) } -func (p pointer) Bytes() *[]byte { return p.v.Interface().(*[]byte) } -func (p pointer) BytesPtr() **[]byte { return p.v.Interface().(**[]byte) } -func (p pointer) BytesSlice() *[][]byte { return p.v.Interface().(*[][]byte) } -func (p pointer) WeakFields() *weakFields { return (*weakFields)(p.v.Interface().(*WeakFields)) } -func (p pointer) Extensions() *map[int32]ExtensionField { - return p.v.Interface().(*map[int32]ExtensionField) -} - -func (p pointer) Elem() pointer { - return pointer{v: p.v.Elem()} -} - -// PointerSlice copies []*T from p as a new []pointer. -// This behavior differs from the implementation in pointer_unsafe.go. -func (p pointer) PointerSlice() []pointer { - // TODO: reconsider this - if p.v.IsNil() { - return nil - } - n := p.v.Elem().Len() - s := make([]pointer, n) - for i := 0; i < n; i++ { - s[i] = pointer{v: p.v.Elem().Index(i)} - } - return s -} - -// AppendPointerSlice appends v to p, which must be a []*T. -func (p pointer) AppendPointerSlice(v pointer) { - sp := p.v.Elem() - sp.Set(reflect.Append(sp, v.v)) -} - -// SetPointer sets *p to v. -func (p pointer) SetPointer(v pointer) { - p.v.Elem().Set(v.v) -} - -func growSlice(p pointer, addCap int) { - // TODO: Once we only support Go 1.20 and newer, use reflect.Grow. - in := p.v.Elem() - out := reflect.MakeSlice(in.Type(), in.Len(), in.Len()+addCap) - reflect.Copy(out, in) - p.v.Elem().Set(out) -} - -func (p pointer) growBoolSlice(addCap int) { - growSlice(p, addCap) -} - -func (p pointer) growInt32Slice(addCap int) { - growSlice(p, addCap) -} - -func (p pointer) growUint32Slice(addCap int) { - growSlice(p, addCap) -} - -func (p pointer) growInt64Slice(addCap int) { - growSlice(p, addCap) -} - -func (p pointer) growUint64Slice(addCap int) { - growSlice(p, addCap) -} - -func (p pointer) growFloat64Slice(addCap int) { - growSlice(p, addCap) -} - -func (p pointer) growFloat32Slice(addCap int) { - growSlice(p, addCap) -} - -func (Export) MessageStateOf(p Pointer) *messageState { panic("not supported") } -func (ms *messageState) pointer() pointer { panic("not supported") } -func (ms *messageState) messageInfo() *MessageInfo { panic("not supported") } -func (ms *messageState) LoadMessageInfo() *MessageInfo { panic("not supported") } -func (ms *messageState) StoreMessageInfo(mi *MessageInfo) { panic("not supported") } - -type atomicNilMessage struct { - once sync.Once - m messageReflectWrapper -} - -func (m *atomicNilMessage) Init(mi *MessageInfo) *messageReflectWrapper { - m.once.Do(func() { - m.m.p = pointerOfIface(reflect.Zero(mi.GoReflectType).Interface()) - m.m.mi = mi - }) - return &m.m -} diff --git a/vendor/google.golang.org/protobuf/internal/impl/pointer_unsafe.go b/vendor/google.golang.org/protobuf/internal/impl/pointer_unsafe.go index 5f20ca5d8a..62f8bf663e 100644 --- a/vendor/google.golang.org/protobuf/internal/impl/pointer_unsafe.go +++ b/vendor/google.golang.org/protobuf/internal/impl/pointer_unsafe.go @@ -2,15 +2,14 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -//go:build !purego && !appengine -// +build !purego,!appengine - package impl import ( "reflect" "sync/atomic" "unsafe" + + "google.golang.org/protobuf/internal/protolazy" ) const UnsafeEnabled = true @@ -23,7 +22,7 @@ type Pointer unsafe.Pointer type offset uintptr // offsetOf returns a field offset for the struct field. -func offsetOf(f reflect.StructField, x exporter) offset { +func offsetOf(f reflect.StructField) offset { return offset(f.Offset) } @@ -112,8 +111,14 @@ func (p pointer) StringSlice() *[]string { return (*[]string)(p.p func (p pointer) Bytes() *[]byte { return (*[]byte)(p.p) } func (p pointer) BytesPtr() **[]byte { return (**[]byte)(p.p) } func (p pointer) BytesSlice() *[][]byte { return (*[][]byte)(p.p) } -func (p pointer) WeakFields() *weakFields { return (*weakFields)(p.p) } func (p pointer) Extensions() *map[int32]ExtensionField { return (*map[int32]ExtensionField)(p.p) } +func (p pointer) LazyInfoPtr() **protolazy.XXX_lazyUnmarshalInfo { + return (**protolazy.XXX_lazyUnmarshalInfo)(p.p) +} + +func (p pointer) PresenceInfo() presence { + return presence{P: p.p} +} func (p pointer) Elem() pointer { return pointer{p: *(*unsafe.Pointer)(p.p)} diff --git a/vendor/google.golang.org/protobuf/internal/impl/pointer_unsafe_opaque.go b/vendor/google.golang.org/protobuf/internal/impl/pointer_unsafe_opaque.go new file mode 100644 index 0000000000..38aa7b7dcf --- /dev/null +++ b/vendor/google.golang.org/protobuf/internal/impl/pointer_unsafe_opaque.go @@ -0,0 +1,42 @@ +// Copyright 2024 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package impl + +import ( + "sync/atomic" + "unsafe" +) + +func (p pointer) AtomicGetPointer() pointer { + return pointer{p: atomic.LoadPointer((*unsafe.Pointer)(p.p))} +} + +func (p pointer) AtomicSetPointer(v pointer) { + atomic.StorePointer((*unsafe.Pointer)(p.p), v.p) +} + +func (p pointer) AtomicSetNilPointer() { + atomic.StorePointer((*unsafe.Pointer)(p.p), unsafe.Pointer(nil)) +} + +func (p pointer) AtomicSetPointerIfNil(v pointer) pointer { + if atomic.CompareAndSwapPointer((*unsafe.Pointer)(p.p), unsafe.Pointer(nil), v.p) { + return v + } + return pointer{p: atomic.LoadPointer((*unsafe.Pointer)(p.p))} +} + +type atomicV1MessageInfo struct{ p Pointer } + +func (mi *atomicV1MessageInfo) Get() Pointer { + return Pointer(atomic.LoadPointer((*unsafe.Pointer)(&mi.p))) +} + +func (mi *atomicV1MessageInfo) SetIfNil(p Pointer) Pointer { + if atomic.CompareAndSwapPointer((*unsafe.Pointer)(&mi.p), nil, unsafe.Pointer(p)) { + return p + } + return mi.Get() +} diff --git a/vendor/google.golang.org/protobuf/internal/impl/presence.go b/vendor/google.golang.org/protobuf/internal/impl/presence.go new file mode 100644 index 0000000000..443afe81cd --- /dev/null +++ b/vendor/google.golang.org/protobuf/internal/impl/presence.go @@ -0,0 +1,139 @@ +// Copyright 2024 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package impl + +import ( + "sync/atomic" + "unsafe" +) + +// presenceSize represents the size of a presence set, which should be the largest index of the set+1 +type presenceSize uint32 + +// presence is the internal representation of the bitmap array in a generated protobuf +type presence struct { + // This is a pointer to the beginning of an array of uint32 + P unsafe.Pointer +} + +func (p presence) toElem(num uint32) (ret *uint32) { + const ( + bitsPerByte = 8 + siz = unsafe.Sizeof(*ret) + ) + // p.P points to an array of uint32, num is the bit in this array that the + // caller wants to check/manipulate. Calculate the index in the array that + // contains this specific bit. E.g.: 76 / 32 = 2 (integer division). + offset := uintptr(num) / (siz * bitsPerByte) * siz + return (*uint32)(unsafe.Pointer(uintptr(p.P) + offset)) +} + +// Present checks for the presence of a specific field number in a presence set. +func (p presence) Present(num uint32) bool { + return Export{}.Present(p.toElem(num), num) +} + +// SetPresent adds presence for a specific field number in a presence set. +func (p presence) SetPresent(num uint32, size presenceSize) { + Export{}.SetPresent(p.toElem(num), num, uint32(size)) +} + +// SetPresentUnatomic adds presence for a specific field number in a presence set without using +// atomic operations. Only to be called during unmarshaling. +func (p presence) SetPresentUnatomic(num uint32, size presenceSize) { + Export{}.SetPresentNonAtomic(p.toElem(num), num, uint32(size)) +} + +// ClearPresent removes presence for a specific field number in a presence set. +func (p presence) ClearPresent(num uint32) { + Export{}.ClearPresent(p.toElem(num), num) +} + +// LoadPresenceCache (together with PresentInCache) allows for a +// cached version of checking for presence without re-reading the word +// for every field. It is optimized for efficiency and assumes no +// simltaneous mutation of the presence set (or at least does not have +// a problem with simultaneous mutation giving inconsistent results). +func (p presence) LoadPresenceCache() (current uint32) { + if p.P == nil { + return 0 + } + return atomic.LoadUint32((*uint32)(p.P)) +} + +// PresentInCache reads presence from a cached word in the presence +// bitmap. It caches up a new word if the bit is outside the +// word. This is for really fast iteration through bitmaps in cases +// where we either know that the bitmap will not be altered, or we +// don't care about inconsistencies caused by simultaneous writes. +func (p presence) PresentInCache(num uint32, cachedElement *uint32, current *uint32) bool { + if num/32 != *cachedElement { + o := uintptr(num/32) * unsafe.Sizeof(uint32(0)) + q := (*uint32)(unsafe.Pointer(uintptr(p.P) + o)) + *current = atomic.LoadUint32(q) + *cachedElement = num / 32 + } + return (*current & (1 << (num % 32))) > 0 +} + +// AnyPresent checks if any field is marked as present in the bitmap. +func (p presence) AnyPresent(size presenceSize) bool { + n := uintptr((size + 31) / 32) + for j := uintptr(0); j < n; j++ { + o := j * unsafe.Sizeof(uint32(0)) + q := (*uint32)(unsafe.Pointer(uintptr(p.P) + o)) + b := atomic.LoadUint32(q) + if b > 0 { + return true + } + } + return false +} + +// toRaceDetectData finds the preceding RaceDetectHookData in a +// message by using pointer arithmetic. As the type of the presence +// set (bitmap) varies with the number of fields in the protobuf, we +// can not have a struct type containing the array and the +// RaceDetectHookData. instead the RaceDetectHookData is placed +// immediately before the bitmap array, and we find it by walking +// backwards in the struct. +// +// This method is only called from the race-detect version of the code, +// so RaceDetectHookData is never an empty struct. +func (p presence) toRaceDetectData() *RaceDetectHookData { + var template struct { + d RaceDetectHookData + a [1]uint32 + } + o := (uintptr(unsafe.Pointer(&template.a)) - uintptr(unsafe.Pointer(&template.d))) + return (*RaceDetectHookData)(unsafe.Pointer(uintptr(p.P) - o)) +} + +func atomicLoadShadowPresence(p **[]byte) *[]byte { + return (*[]byte)(atomic.LoadPointer((*unsafe.Pointer)(unsafe.Pointer(p)))) +} +func atomicStoreShadowPresence(p **[]byte, v *[]byte) { + atomic.CompareAndSwapPointer((*unsafe.Pointer)(unsafe.Pointer(p)), nil, unsafe.Pointer(v)) +} + +// findPointerToRaceDetectData finds the preceding RaceDetectHookData +// in a message by using pointer arithmetic. For the methods called +// directy from generated code, we don't have a pointer to the +// beginning of the presence set, but a pointer inside the array. As +// we know the index of the bit we're manipulating (num), we can +// calculate which element of the array ptr is pointing to. With that +// information we find the preceding RaceDetectHookData and can +// manipulate the shadow bitmap. +// +// This method is only called from the race-detect version of the +// code, so RaceDetectHookData is never an empty struct. +func findPointerToRaceDetectData(ptr *uint32, num uint32) *RaceDetectHookData { + var template struct { + d RaceDetectHookData + a [1]uint32 + } + o := (uintptr(unsafe.Pointer(&template.a)) - uintptr(unsafe.Pointer(&template.d))) + uintptr(num/32)*unsafe.Sizeof(uint32(0)) + return (*RaceDetectHookData)(unsafe.Pointer(uintptr(unsafe.Pointer(ptr)) - o)) +} diff --git a/vendor/google.golang.org/protobuf/internal/impl/validate.go b/vendor/google.golang.org/protobuf/internal/impl/validate.go index a24e6bbd7a..99a1eb95f7 100644 --- a/vendor/google.golang.org/protobuf/internal/impl/validate.go +++ b/vendor/google.golang.org/protobuf/internal/impl/validate.go @@ -37,6 +37,10 @@ const ( // ValidationValid indicates that unmarshaling the message will succeed. ValidationValid + + // ValidationWrongWireType indicates that a validated field does not have + // the expected wire type. + ValidationWrongWireType ) func (v ValidationStatus) String() string { @@ -64,9 +68,13 @@ func Validate(mt protoreflect.MessageType, in protoiface.UnmarshalInput) (out pr if in.Resolver == nil { in.Resolver = protoregistry.GlobalTypes } + if in.Depth == 0 { + in.Depth = protowire.DefaultRecursionLimit + } o, st := mi.validate(in.Buf, 0, unmarshalOptions{ flags: in.Flags, resolver: in.Resolver, + depth: in.Depth, }) if o.initialized { out.Flags |= protoiface.UnmarshalInitialized @@ -149,11 +157,23 @@ func newValidationInfo(fd protoreflect.FieldDescriptor, ft reflect.Type) validat switch fd.Kind() { case protoreflect.MessageKind: vi.typ = validationTypeMessage + + if ft.Kind() == reflect.Ptr { + // Repeated opaque message fields are *[]*T. + ft = ft.Elem() + } + if ft.Kind() == reflect.Slice { vi.mi = getMessageInfo(ft.Elem()) } case protoreflect.GroupKind: vi.typ = validationTypeGroup + + if ft.Kind() == reflect.Ptr { + // Repeated opaque message fields are *[]*T. + ft = ft.Elem() + } + if ft.Kind() == reflect.Slice { vi.mi = getMessageInfo(ft.Elem()) } @@ -195,9 +215,7 @@ func newValidationInfo(fd protoreflect.FieldDescriptor, ft reflect.Type) validat switch fd.Kind() { case protoreflect.MessageKind: vi.typ = validationTypeMessage - if !fd.IsWeak() { - vi.mi = getMessageInfo(ft) - } + vi.mi = getMessageInfo(ft) case protoreflect.GroupKind: vi.typ = validationTypeGroup vi.mi = getMessageInfo(ft) @@ -243,6 +261,9 @@ func (mi *MessageInfo) validate(b []byte, groupTag protowire.Number, opts unmars states[0].typ = validationTypeGroup states[0].endGroup = groupTag } + if opts.depth--; opts.depth < 0 { + return out, ValidationInvalid + } initialized := true start := len(b) State: @@ -304,26 +325,6 @@ State: } if f != nil { vi = f.validation - if vi.typ == validationTypeMessage && vi.mi == nil { - // Probable weak field. - // - // TODO: Consider storing the results of this lookup somewhere - // rather than recomputing it on every validation. - fd := st.mi.Desc.Fields().ByNumber(num) - if fd == nil || !fd.IsWeak() { - break - } - messageName := fd.Message().FullName() - messageType, err := protoregistry.GlobalTypes.FindMessageByName(messageName) - switch err { - case nil: - vi.mi, _ = messageType.(*MessageInfo) - case protoregistry.NotFound: - vi.typ = validationTypeBytes - default: - return out, ValidationUnknown - } - } break } // Possible extension field. @@ -457,6 +458,13 @@ State: mi: vi.mi, tail: b, }) + if vi.typ == validationTypeMessage || + vi.typ == validationTypeGroup || + vi.typ == validationTypeMap { + if opts.depth--; opts.depth < 0 { + return out, ValidationInvalid + } + } b = v continue State case validationTypeRepeatedVarint: @@ -505,6 +513,9 @@ State: mi: vi.mi, endGroup: num, }) + if opts.depth--; opts.depth < 0 { + return out, ValidationInvalid + } continue State case flags.ProtoLegacy && vi.typ == validationTypeMessageSetItem: typeid, v, n, err := messageset.ConsumeFieldValue(b, false) @@ -527,6 +538,13 @@ State: mi: xvi.mi, tail: b[n:], }) + if xvi.typ == validationTypeMessage || + xvi.typ == validationTypeGroup || + xvi.typ == validationTypeMap { + if opts.depth--; opts.depth < 0 { + return out, ValidationInvalid + } + } b = v continue State } @@ -553,12 +571,14 @@ State: switch st.typ { case validationTypeMessage, validationTypeGroup: numRequiredFields = int(st.mi.numRequiredFields) + opts.depth++ case validationTypeMap: // If this is a map field with a message value that contains // required fields, require that the value be present. if st.mi != nil && st.mi.numRequiredFields > 0 { numRequiredFields = 1 } + opts.depth++ } // If there are more than 64 required fields, this check will // always fail and we will report that the message is potentially diff --git a/vendor/google.golang.org/protobuf/internal/impl/weak.go b/vendor/google.golang.org/protobuf/internal/impl/weak.go deleted file mode 100644 index eb79a7ba94..0000000000 --- a/vendor/google.golang.org/protobuf/internal/impl/weak.go +++ /dev/null @@ -1,74 +0,0 @@ -// Copyright 2019 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -package impl - -import ( - "fmt" - - "google.golang.org/protobuf/reflect/protoreflect" - "google.golang.org/protobuf/reflect/protoregistry" -) - -// weakFields adds methods to the exported WeakFields type for internal use. -// -// The exported type is an alias to an unnamed type, so methods can't be -// defined directly on it. -type weakFields WeakFields - -func (w weakFields) get(num protoreflect.FieldNumber) (protoreflect.ProtoMessage, bool) { - m, ok := w[int32(num)] - return m, ok -} - -func (w *weakFields) set(num protoreflect.FieldNumber, m protoreflect.ProtoMessage) { - if *w == nil { - *w = make(weakFields) - } - (*w)[int32(num)] = m -} - -func (w *weakFields) clear(num protoreflect.FieldNumber) { - delete(*w, int32(num)) -} - -func (Export) HasWeak(w WeakFields, num protoreflect.FieldNumber) bool { - _, ok := w[int32(num)] - return ok -} - -func (Export) ClearWeak(w *WeakFields, num protoreflect.FieldNumber) { - delete(*w, int32(num)) -} - -func (Export) GetWeak(w WeakFields, num protoreflect.FieldNumber, name protoreflect.FullName) protoreflect.ProtoMessage { - if m, ok := w[int32(num)]; ok { - return m - } - mt, _ := protoregistry.GlobalTypes.FindMessageByName(name) - if mt == nil { - panic(fmt.Sprintf("message %v for weak field is not linked in", name)) - } - return mt.Zero().Interface() -} - -func (Export) SetWeak(w *WeakFields, num protoreflect.FieldNumber, name protoreflect.FullName, m protoreflect.ProtoMessage) { - if m != nil { - mt, _ := protoregistry.GlobalTypes.FindMessageByName(name) - if mt == nil { - panic(fmt.Sprintf("message %v for weak field is not linked in", name)) - } - if mt != m.ProtoReflect().Type() { - panic(fmt.Sprintf("invalid message type for weak field: got %T, want %T", m, mt.Zero().Interface())) - } - } - if m == nil || !m.ProtoReflect().IsValid() { - delete(*w, int32(num)) - return - } - if *w == nil { - *w = make(weakFields) - } - (*w)[int32(num)] = m -} diff --git a/vendor/google.golang.org/protobuf/internal/protolazy/bufferreader.go b/vendor/google.golang.org/protobuf/internal/protolazy/bufferreader.go new file mode 100644 index 0000000000..82e5cab4aa --- /dev/null +++ b/vendor/google.golang.org/protobuf/internal/protolazy/bufferreader.go @@ -0,0 +1,364 @@ +// Copyright 2024 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Helper code for parsing a protocol buffer + +package protolazy + +import ( + "errors" + "fmt" + "io" + + "google.golang.org/protobuf/encoding/protowire" +) + +// BufferReader is a structure encapsulating a protobuf and a current position +type BufferReader struct { + Buf []byte + Pos int +} + +// NewBufferReader creates a new BufferRead from a protobuf +func NewBufferReader(buf []byte) BufferReader { + return BufferReader{Buf: buf, Pos: 0} +} + +var errOutOfBounds = errors.New("protobuf decoding: out of bounds") +var errOverflow = errors.New("proto: integer overflow") + +func (b *BufferReader) DecodeVarintSlow() (x uint64, err error) { + i := b.Pos + l := len(b.Buf) + + for shift := uint(0); shift < 64; shift += 7 { + if i >= l { + err = io.ErrUnexpectedEOF + return + } + v := b.Buf[i] + i++ + x |= (uint64(v) & 0x7F) << shift + if v < 0x80 { + b.Pos = i + return + } + } + + // The number is too large to represent in a 64-bit value. + err = errOverflow + return +} + +// decodeVarint decodes a varint at the current position +func (b *BufferReader) DecodeVarint() (x uint64, err error) { + i := b.Pos + buf := b.Buf + + if i >= len(buf) { + return 0, io.ErrUnexpectedEOF + } else if buf[i] < 0x80 { + b.Pos++ + return uint64(buf[i]), nil + } else if len(buf)-i < 10 { + return b.DecodeVarintSlow() + } + + var v uint64 + // we already checked the first byte + x = uint64(buf[i]) & 127 + i++ + + v = uint64(buf[i]) + i++ + x |= (v & 127) << 7 + if v < 128 { + goto done + } + + v = uint64(buf[i]) + i++ + x |= (v & 127) << 14 + if v < 128 { + goto done + } + + v = uint64(buf[i]) + i++ + x |= (v & 127) << 21 + if v < 128 { + goto done + } + + v = uint64(buf[i]) + i++ + x |= (v & 127) << 28 + if v < 128 { + goto done + } + + v = uint64(buf[i]) + i++ + x |= (v & 127) << 35 + if v < 128 { + goto done + } + + v = uint64(buf[i]) + i++ + x |= (v & 127) << 42 + if v < 128 { + goto done + } + + v = uint64(buf[i]) + i++ + x |= (v & 127) << 49 + if v < 128 { + goto done + } + + v = uint64(buf[i]) + i++ + x |= (v & 127) << 56 + if v < 128 { + goto done + } + + v = uint64(buf[i]) + i++ + x |= (v & 127) << 63 + if v < 128 { + goto done + } + + return 0, errOverflow + +done: + b.Pos = i + return +} + +// decodeVarint32 decodes a varint32 at the current position +func (b *BufferReader) DecodeVarint32() (x uint32, err error) { + i := b.Pos + buf := b.Buf + + if i >= len(buf) { + return 0, io.ErrUnexpectedEOF + } else if buf[i] < 0x80 { + b.Pos++ + return uint32(buf[i]), nil + } else if len(buf)-i < 5 { + v, err := b.DecodeVarintSlow() + return uint32(v), err + } + + var v uint32 + // we already checked the first byte + x = uint32(buf[i]) & 127 + i++ + + v = uint32(buf[i]) + i++ + x |= (v & 127) << 7 + if v < 128 { + goto done + } + + v = uint32(buf[i]) + i++ + x |= (v & 127) << 14 + if v < 128 { + goto done + } + + v = uint32(buf[i]) + i++ + x |= (v & 127) << 21 + if v < 128 { + goto done + } + + v = uint32(buf[i]) + i++ + x |= (v & 127) << 28 + if v < 128 { + goto done + } + + return 0, errOverflow + +done: + b.Pos = i + return +} + +// skipValue skips a value in the protobuf, based on the specified tag +func (b *BufferReader) SkipValue(tag uint32) (err error) { + wireType := tag & 0x7 + switch protowire.Type(wireType) { + case protowire.VarintType: + err = b.SkipVarint() + case protowire.Fixed64Type: + err = b.SkipFixed64() + case protowire.BytesType: + var n uint32 + n, err = b.DecodeVarint32() + if err == nil { + err = b.Skip(int(n)) + } + case protowire.StartGroupType: + err = b.SkipGroup(tag) + case protowire.Fixed32Type: + err = b.SkipFixed32() + default: + err = fmt.Errorf("Unexpected wire type (%d)", wireType) + } + return +} + +// skipGroup skips a group with the specified tag. It executes efficiently using a tag stack +func (b *BufferReader) SkipGroup(tag uint32) (err error) { + tagStack := make([]uint32, 0, 16) + tagStack = append(tagStack, tag) + var n uint32 + for len(tagStack) > 0 { + tag, err = b.DecodeVarint32() + if err != nil { + return err + } + switch protowire.Type(tag & 0x7) { + case protowire.VarintType: + err = b.SkipVarint() + case protowire.Fixed64Type: + err = b.Skip(8) + case protowire.BytesType: + n, err = b.DecodeVarint32() + if err == nil { + err = b.Skip(int(n)) + } + case protowire.StartGroupType: + tagStack = append(tagStack, tag) + case protowire.Fixed32Type: + err = b.SkipFixed32() + case protowire.EndGroupType: + if protoFieldNumber(tagStack[len(tagStack)-1]) == protoFieldNumber(tag) { + tagStack = tagStack[:len(tagStack)-1] + } else { + err = fmt.Errorf("end group tag %d does not match begin group tag %d at pos %d", + protoFieldNumber(tag), protoFieldNumber(tagStack[len(tagStack)-1]), b.Pos) + } + } + if err != nil { + return err + } + } + return nil +} + +// skipVarint effiently skips a varint +func (b *BufferReader) SkipVarint() (err error) { + i := b.Pos + + if len(b.Buf)-i < 10 { + // Use DecodeVarintSlow() to check for buffer overflow, but ignore result + if _, err := b.DecodeVarintSlow(); err != nil { + return err + } + return nil + } + + if b.Buf[i] < 0x80 { + goto out + } + i++ + + if b.Buf[i] < 0x80 { + goto out + } + i++ + + if b.Buf[i] < 0x80 { + goto out + } + i++ + + if b.Buf[i] < 0x80 { + goto out + } + i++ + + if b.Buf[i] < 0x80 { + goto out + } + i++ + + if b.Buf[i] < 0x80 { + goto out + } + i++ + + if b.Buf[i] < 0x80 { + goto out + } + i++ + + if b.Buf[i] < 0x80 { + goto out + } + i++ + + if b.Buf[i] < 0x80 { + goto out + } + i++ + + if b.Buf[i] < 0x80 { + goto out + } + return errOverflow + +out: + b.Pos = i + 1 + return nil +} + +// skip skips the specified number of bytes +func (b *BufferReader) Skip(n int) (err error) { + if len(b.Buf) < b.Pos+n { + return io.ErrUnexpectedEOF + } + b.Pos += n + return +} + +// skipFixed64 skips a fixed64 +func (b *BufferReader) SkipFixed64() (err error) { + return b.Skip(8) +} + +// skipFixed32 skips a fixed32 +func (b *BufferReader) SkipFixed32() (err error) { + return b.Skip(4) +} + +// skipBytes skips a set of bytes +func (b *BufferReader) SkipBytes() (err error) { + n, err := b.DecodeVarint32() + if err != nil { + return err + } + return b.Skip(int(n)) +} + +// Done returns whether we are at the end of the protobuf +func (b *BufferReader) Done() bool { + return b.Pos == len(b.Buf) +} + +// Remaining returns how many bytes remain +func (b *BufferReader) Remaining() int { + return len(b.Buf) - b.Pos +} diff --git a/vendor/google.golang.org/protobuf/internal/protolazy/lazy.go b/vendor/google.golang.org/protobuf/internal/protolazy/lazy.go new file mode 100644 index 0000000000..ff4d4834bb --- /dev/null +++ b/vendor/google.golang.org/protobuf/internal/protolazy/lazy.go @@ -0,0 +1,359 @@ +// Copyright 2024 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +// Package protolazy contains internal data structures for lazy message decoding. +package protolazy + +import ( + "fmt" + "sort" + + "google.golang.org/protobuf/encoding/protowire" + piface "google.golang.org/protobuf/runtime/protoiface" +) + +// IndexEntry is the structure for an index of the fields in a message of a +// proto (not descending to sub-messages) +type IndexEntry struct { + FieldNum uint32 + // first byte of this tag/field + Start uint32 + // first byte after a contiguous sequence of bytes for this tag/field, which could + // include a single encoding of the field, or multiple encodings for the field + End uint32 + // True if this protobuf segment includes multiple encodings of the field + MultipleContiguous bool +} + +// XXX_lazyUnmarshalInfo has information about a particular lazily decoded message +// +// Deprecated: Do not use. This will be deleted in the near future. +type XXX_lazyUnmarshalInfo struct { + // Index of fields and their positions in the protobuf for this + // message. Make index be a pointer to a slice so it can be updated + // atomically. The index pointer is only set once (lazily when/if + // the index is first needed), and must always be SET and LOADED + // ATOMICALLY. + index *[]IndexEntry + // The protobuf associated with this lazily decoded message. It is + // only set during proto.Unmarshal(). It doesn't need to be set and + // loaded atomically, since any simultaneous set (Unmarshal) and read + // (during a get) would already be a race in the app code. + Protobuf []byte + // The flags present when Unmarshal was originally called for this particular message + unmarshalFlags piface.UnmarshalInputFlags +} + +// The Buffer and SetBuffer methods let v2/internal/impl interact with +// XXX_lazyUnmarshalInfo via an interface, to avoid an import cycle. + +// Buffer returns the lazy unmarshal buffer. +// +// Deprecated: Do not use. This will be deleted in the near future. +func (lazy *XXX_lazyUnmarshalInfo) Buffer() []byte { + return lazy.Protobuf +} + +// SetBuffer sets the lazy unmarshal buffer. +// +// Deprecated: Do not use. This will be deleted in the near future. +func (lazy *XXX_lazyUnmarshalInfo) SetBuffer(b []byte) { + lazy.Protobuf = b +} + +// SetUnmarshalFlags is called to set a copy of the original unmarshalInputFlags. +// The flags should reflect how Unmarshal was called. +func (lazy *XXX_lazyUnmarshalInfo) SetUnmarshalFlags(f piface.UnmarshalInputFlags) { + lazy.unmarshalFlags = f +} + +// UnmarshalFlags returns the original unmarshalInputFlags. +func (lazy *XXX_lazyUnmarshalInfo) UnmarshalFlags() piface.UnmarshalInputFlags { + return lazy.unmarshalFlags +} + +// AllowedPartial returns true if the user originally unmarshalled this message with +// AllowPartial set to true +func (lazy *XXX_lazyUnmarshalInfo) AllowedPartial() bool { + return (lazy.unmarshalFlags & piface.UnmarshalCheckRequired) == 0 +} + +func protoFieldNumber(tag uint32) uint32 { + return tag >> 3 +} + +// buildIndex builds an index of the specified protobuf, return the index +// array and an error. +func buildIndex(buf []byte) ([]IndexEntry, error) { + index := make([]IndexEntry, 0, 16) + var lastProtoFieldNum uint32 + var outOfOrder bool + + var r BufferReader = NewBufferReader(buf) + + for !r.Done() { + var tag uint32 + var err error + var curPos = r.Pos + // INLINED: tag, err = r.DecodeVarint32() + { + i := r.Pos + buf := r.Buf + + if i >= len(buf) { + return nil, errOutOfBounds + } else if buf[i] < 0x80 { + r.Pos++ + tag = uint32(buf[i]) + } else if r.Remaining() < 5 { + var v uint64 + v, err = r.DecodeVarintSlow() + tag = uint32(v) + } else { + var v uint32 + // we already checked the first byte + tag = uint32(buf[i]) & 127 + i++ + + v = uint32(buf[i]) + i++ + tag |= (v & 127) << 7 + if v < 128 { + goto done + } + + v = uint32(buf[i]) + i++ + tag |= (v & 127) << 14 + if v < 128 { + goto done + } + + v = uint32(buf[i]) + i++ + tag |= (v & 127) << 21 + if v < 128 { + goto done + } + + v = uint32(buf[i]) + i++ + tag |= (v & 127) << 28 + if v < 128 { + goto done + } + + return nil, errOutOfBounds + + done: + r.Pos = i + } + } + // DONE: tag, err = r.DecodeVarint32() + + fieldNum := protoFieldNumber(tag) + if fieldNum < lastProtoFieldNum { + outOfOrder = true + } + + // Skip the current value -- will skip over an entire group as well. + // INLINED: err = r.SkipValue(tag) + wireType := tag & 0x7 + switch protowire.Type(wireType) { + case protowire.VarintType: + // INLINED: err = r.SkipVarint() + i := r.Pos + + if len(r.Buf)-i < 10 { + // Use DecodeVarintSlow() to skip while + // checking for buffer overflow, but ignore result + _, err = r.DecodeVarintSlow() + goto out2 + } + if r.Buf[i] < 0x80 { + goto out + } + i++ + + if r.Buf[i] < 0x80 { + goto out + } + i++ + + if r.Buf[i] < 0x80 { + goto out + } + i++ + + if r.Buf[i] < 0x80 { + goto out + } + i++ + + if r.Buf[i] < 0x80 { + goto out + } + i++ + + if r.Buf[i] < 0x80 { + goto out + } + i++ + + if r.Buf[i] < 0x80 { + goto out + } + i++ + + if r.Buf[i] < 0x80 { + goto out + } + i++ + + if r.Buf[i] < 0x80 { + goto out + } + i++ + + if r.Buf[i] < 0x80 { + goto out + } + return nil, errOverflow + out: + r.Pos = i + 1 + // DONE: err = r.SkipVarint() + case protowire.Fixed64Type: + err = r.SkipFixed64() + case protowire.BytesType: + var n uint32 + n, err = r.DecodeVarint32() + if err == nil { + err = r.Skip(int(n)) + } + case protowire.StartGroupType: + err = r.SkipGroup(tag) + case protowire.Fixed32Type: + err = r.SkipFixed32() + default: + err = fmt.Errorf("Unexpected wire type (%d)", wireType) + } + // DONE: err = r.SkipValue(tag) + + out2: + if err != nil { + return nil, err + } + if fieldNum != lastProtoFieldNum { + index = append(index, IndexEntry{FieldNum: fieldNum, + Start: uint32(curPos), + End: uint32(r.Pos)}, + ) + } else { + index[len(index)-1].End = uint32(r.Pos) + index[len(index)-1].MultipleContiguous = true + } + lastProtoFieldNum = fieldNum + } + if outOfOrder { + sort.Slice(index, func(i, j int) bool { + return index[i].FieldNum < index[j].FieldNum || + (index[i].FieldNum == index[j].FieldNum && + index[i].Start < index[j].Start) + }) + } + return index, nil +} + +func (lazy *XXX_lazyUnmarshalInfo) SizeField(num uint32) (size int) { + start, end, found, _, multipleEntries := lazy.FindFieldInProto(num) + if multipleEntries != nil { + for _, entry := range multipleEntries { + size += int(entry.End - entry.Start) + } + return size + } + if !found { + return 0 + } + return int(end - start) +} + +func (lazy *XXX_lazyUnmarshalInfo) AppendField(b []byte, num uint32) ([]byte, bool) { + start, end, found, _, multipleEntries := lazy.FindFieldInProto(num) + if multipleEntries != nil { + for _, entry := range multipleEntries { + b = append(b, lazy.Protobuf[entry.Start:entry.End]...) + } + return b, true + } + if !found { + return nil, false + } + b = append(b, lazy.Protobuf[start:end]...) + return b, true +} + +func (lazy *XXX_lazyUnmarshalInfo) SetIndex(index []IndexEntry) { + atomicStoreIndex(&lazy.index, &index) +} + +// FindFieldInProto looks for field fieldNum in lazyUnmarshalInfo information +// (including protobuf), returns startOffset/endOffset/found. +func (lazy *XXX_lazyUnmarshalInfo) FindFieldInProto(fieldNum uint32) (start, end uint32, found, multipleContiguous bool, multipleEntries []IndexEntry) { + if lazy.Protobuf == nil { + // There is no backing protobuf for this message -- it was made from a builder + return 0, 0, false, false, nil + } + index := atomicLoadIndex(&lazy.index) + if index == nil { + r, err := buildIndex(lazy.Protobuf) + if err != nil { + panic(fmt.Sprintf("findFieldInfo: error building index when looking for field %d: %v", fieldNum, err)) + } + // lazy.index is a pointer to the slice returned by BuildIndex + index = &r + atomicStoreIndex(&lazy.index, index) + } + return lookupField(index, fieldNum) +} + +// lookupField returns the offset at which the indicated field starts using +// the index, offset immediately after field ends (including all instances of +// a repeated field), and bools indicating if field was found and if there +// are multiple encodings of the field in the byte range. +// +// To hande the uncommon case where there are repeated encodings for the same +// field which are not consecutive in the protobuf (so we need to returns +// multiple start/end offsets), we also return a slice multipleEntries. If +// multipleEntries is non-nil, then multiple entries were found, and the +// values in the slice should be used, rather than start/end/found. +func lookupField(indexp *[]IndexEntry, fieldNum uint32) (start, end uint32, found bool, multipleContiguous bool, multipleEntries []IndexEntry) { + // The pointer indexp to the index was already loaded atomically. + // The slice is uniquely associated with the pointer, so it doesn't + // need to be loaded atomically. + index := *indexp + for i, entry := range index { + if fieldNum == entry.FieldNum { + if i < len(index)-1 && entry.FieldNum == index[i+1].FieldNum { + // Handle the uncommon case where there are + // repeated entries for the same field which + // are not contiguous in the protobuf. + multiple := make([]IndexEntry, 1, 2) + multiple[0] = IndexEntry{fieldNum, entry.Start, entry.End, entry.MultipleContiguous} + i++ + for i < len(index) && index[i].FieldNum == fieldNum { + multiple = append(multiple, IndexEntry{fieldNum, index[i].Start, index[i].End, index[i].MultipleContiguous}) + i++ + } + return 0, 0, false, false, multiple + + } + return entry.Start, entry.End, true, entry.MultipleContiguous, nil + } + if fieldNum < entry.FieldNum { + return 0, 0, false, false, nil + } + } + return 0, 0, false, false, nil +} diff --git a/vendor/google.golang.org/protobuf/internal/protolazy/pointer_unsafe.go b/vendor/google.golang.org/protobuf/internal/protolazy/pointer_unsafe.go new file mode 100644 index 0000000000..dc2a64ca64 --- /dev/null +++ b/vendor/google.golang.org/protobuf/internal/protolazy/pointer_unsafe.go @@ -0,0 +1,17 @@ +// Copyright 2024 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package protolazy + +import ( + "sync/atomic" + "unsafe" +) + +func atomicLoadIndex(p **[]IndexEntry) *[]IndexEntry { + return (*[]IndexEntry)(atomic.LoadPointer((*unsafe.Pointer)(unsafe.Pointer(p)))) +} +func atomicStoreIndex(p **[]IndexEntry, v *[]IndexEntry) { + atomic.StorePointer((*unsafe.Pointer)(unsafe.Pointer(p)), unsafe.Pointer(v)) +} diff --git a/vendor/google.golang.org/protobuf/internal/strs/strings_pure.go b/vendor/google.golang.org/protobuf/internal/strs/strings_pure.go deleted file mode 100644 index a1f6f33386..0000000000 --- a/vendor/google.golang.org/protobuf/internal/strs/strings_pure.go +++ /dev/null @@ -1,28 +0,0 @@ -// Copyright 2018 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build purego || appengine -// +build purego appengine - -package strs - -import pref "google.golang.org/protobuf/reflect/protoreflect" - -func UnsafeString(b []byte) string { - return string(b) -} - -func UnsafeBytes(s string) []byte { - return []byte(s) -} - -type Builder struct{} - -func (*Builder) AppendFullName(prefix pref.FullName, name pref.Name) pref.FullName { - return prefix.Append(name) -} - -func (*Builder) MakeString(b []byte) string { - return string(b) -} diff --git a/vendor/google.golang.org/protobuf/internal/strs/strings_unsafe_go121.go b/vendor/google.golang.org/protobuf/internal/strs/strings_unsafe.go similarity index 96% rename from vendor/google.golang.org/protobuf/internal/strs/strings_unsafe_go121.go rename to vendor/google.golang.org/protobuf/internal/strs/strings_unsafe.go index 60166f2ba3..42dd6f70c6 100644 --- a/vendor/google.golang.org/protobuf/internal/strs/strings_unsafe_go121.go +++ b/vendor/google.golang.org/protobuf/internal/strs/strings_unsafe.go @@ -2,9 +2,6 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -//go:build !purego && !appengine && go1.21 -// +build !purego,!appengine,go1.21 - package strs import ( diff --git a/vendor/google.golang.org/protobuf/internal/strs/strings_unsafe_go120.go b/vendor/google.golang.org/protobuf/internal/strs/strings_unsafe_go120.go deleted file mode 100644 index a008acd090..0000000000 --- a/vendor/google.golang.org/protobuf/internal/strs/strings_unsafe_go120.go +++ /dev/null @@ -1,95 +0,0 @@ -// Copyright 2018 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build !purego && !appengine && !go1.21 -// +build !purego,!appengine,!go1.21 - -package strs - -import ( - "unsafe" - - "google.golang.org/protobuf/reflect/protoreflect" -) - -type ( - stringHeader struct { - Data unsafe.Pointer - Len int - } - sliceHeader struct { - Data unsafe.Pointer - Len int - Cap int - } -) - -// UnsafeString returns an unsafe string reference of b. -// The caller must treat the input slice as immutable. -// -// WARNING: Use carefully. The returned result must not leak to the end user -// unless the input slice is provably immutable. -func UnsafeString(b []byte) (s string) { - src := (*sliceHeader)(unsafe.Pointer(&b)) - dst := (*stringHeader)(unsafe.Pointer(&s)) - dst.Data = src.Data - dst.Len = src.Len - return s -} - -// UnsafeBytes returns an unsafe bytes slice reference of s. -// The caller must treat returned slice as immutable. -// -// WARNING: Use carefully. The returned result must not leak to the end user. -func UnsafeBytes(s string) (b []byte) { - src := (*stringHeader)(unsafe.Pointer(&s)) - dst := (*sliceHeader)(unsafe.Pointer(&b)) - dst.Data = src.Data - dst.Len = src.Len - dst.Cap = src.Len - return b -} - -// Builder builds a set of strings with shared lifetime. -// This differs from strings.Builder, which is for building a single string. -type Builder struct { - buf []byte -} - -// AppendFullName is equivalent to protoreflect.FullName.Append, -// but optimized for large batches where each name has a shared lifetime. -func (sb *Builder) AppendFullName(prefix protoreflect.FullName, name protoreflect.Name) protoreflect.FullName { - n := len(prefix) + len(".") + len(name) - if len(prefix) == 0 { - n -= len(".") - } - sb.grow(n) - sb.buf = append(sb.buf, prefix...) - sb.buf = append(sb.buf, '.') - sb.buf = append(sb.buf, name...) - return protoreflect.FullName(sb.last(n)) -} - -// MakeString is equivalent to string(b), but optimized for large batches -// with a shared lifetime. -func (sb *Builder) MakeString(b []byte) string { - sb.grow(len(b)) - sb.buf = append(sb.buf, b...) - return sb.last(len(b)) -} - -func (sb *Builder) grow(n int) { - if cap(sb.buf)-len(sb.buf) >= n { - return - } - - // Unlike strings.Builder, we do not need to copy over the contents - // of the old buffer since our builder provides no API for - // retrieving previously created strings. - sb.buf = make([]byte, 0, 2*(cap(sb.buf)+n)) -} - -func (sb *Builder) last(n int) string { - return UnsafeString(sb.buf[len(sb.buf)-n:]) -} diff --git a/vendor/google.golang.org/protobuf/internal/version/version.go b/vendor/google.golang.org/protobuf/internal/version/version.go index dbbf1f6862..763fd82841 100644 --- a/vendor/google.golang.org/protobuf/internal/version/version.go +++ b/vendor/google.golang.org/protobuf/internal/version/version.go @@ -51,8 +51,8 @@ import ( // 10. Send out the CL for review and submit it. const ( Major = 1 - Minor = 34 - Patch = 2 + Minor = 36 + Patch = 11 PreRelease = "" ) diff --git a/vendor/google.golang.org/protobuf/proto/decode.go b/vendor/google.golang.org/protobuf/proto/decode.go index d75a6534c1..889d8511d2 100644 --- a/vendor/google.golang.org/protobuf/proto/decode.go +++ b/vendor/google.golang.org/protobuf/proto/decode.go @@ -8,7 +8,6 @@ import ( "google.golang.org/protobuf/encoding/protowire" "google.golang.org/protobuf/internal/encoding/messageset" "google.golang.org/protobuf/internal/errors" - "google.golang.org/protobuf/internal/flags" "google.golang.org/protobuf/internal/genid" "google.golang.org/protobuf/internal/pragma" "google.golang.org/protobuf/reflect/protoreflect" @@ -47,6 +46,12 @@ type UnmarshalOptions struct { // RecursionLimit limits how deeply messages may be nested. // If zero, a default limit is applied. RecursionLimit int + + // + // NoLazyDecoding turns off lazy decoding, which otherwise is enabled by + // default. Lazy decoding only affects submessages (annotated with [lazy = + // true] in the .proto file) within messages that use the Opaque API. + NoLazyDecoding bool } // Unmarshal parses the wire-format message in b and places the result in m. @@ -104,11 +109,20 @@ func (o UnmarshalOptions) unmarshal(b []byte, m protoreflect.Message) (out proto if o.DiscardUnknown { in.Flags |= protoiface.UnmarshalDiscardUnknown } + + if !allowPartial { + // This does not affect how current unmarshal functions work, it just allows them + // to record this for lazy the decoding case. + in.Flags |= protoiface.UnmarshalCheckRequired + } + if o.NoLazyDecoding { + in.Flags |= protoiface.UnmarshalNoLazyDecoding + } + out, err = methods.Unmarshal(in) } else { - o.RecursionLimit-- - if o.RecursionLimit < 0 { - return out, errors.New("exceeded max recursion depth") + if o.RecursionLimit--; o.RecursionLimit < 0 { + return out, errRecursionDepth } err = o.unmarshalMessageSlow(b, m) } @@ -156,10 +170,6 @@ func (o UnmarshalOptions) unmarshalMessageSlow(b []byte, m protoreflect.Message) var err error if fd == nil { err = errUnknown - } else if flags.ProtoLegacy { - if fd.IsWeak() && fd.Message().IsPlaceholder() { - err = errUnknown // weak referent is not linked in - } } // Parse the field value. @@ -209,6 +219,9 @@ func (o UnmarshalOptions) unmarshalSingular(b []byte, wtyp protowire.Type, m pro } func (o UnmarshalOptions) unmarshalMap(b []byte, wtyp protowire.Type, mapv protoreflect.Map, fd protoreflect.FieldDescriptor) (n int, err error) { + if o.RecursionLimit--; o.RecursionLimit < 0 { + return 0, errRecursionDepth + } if wtyp != protowire.BytesType { return 0, errUnknown } @@ -294,3 +307,5 @@ func (o UnmarshalOptions) unmarshalMap(b []byte, wtyp protowire.Type, mapv proto var errUnknown = errors.New("BUG: internal error (unknown)") var errDecode = errors.New("cannot parse invalid wire-format data") + +var errRecursionDepth = errors.New("exceeded maximum recursion depth") diff --git a/vendor/google.golang.org/protobuf/proto/encode.go b/vendor/google.golang.org/protobuf/proto/encode.go index 1f847bcc35..f0473c5869 100644 --- a/vendor/google.golang.org/protobuf/proto/encode.go +++ b/vendor/google.golang.org/protobuf/proto/encode.go @@ -63,7 +63,8 @@ type MarshalOptions struct { // options (except for UseCachedSize itself). // // 2. The message and all its submessages have not changed in any - // way since the Size call. + // way since the Size call. For lazily decoded messages, accessing + // a message results in decoding the message, which is a change. // // If either of these invariants is violated, // the results are undefined and may include panics or corrupted output. diff --git a/vendor/google.golang.org/protobuf/proto/equal.go b/vendor/google.golang.org/protobuf/proto/equal.go index 1a0be1b03c..c36d4a9cd7 100644 --- a/vendor/google.golang.org/protobuf/proto/equal.go +++ b/vendor/google.golang.org/protobuf/proto/equal.go @@ -8,6 +8,7 @@ import ( "reflect" "google.golang.org/protobuf/reflect/protoreflect" + "google.golang.org/protobuf/runtime/protoiface" ) // Equal reports whether two messages are equal, @@ -51,6 +52,14 @@ func Equal(x, y Message) bool { if mx.IsValid() != my.IsValid() { return false } + + // Only one of the messages needs to implement the fast-path for it to work. + pmx := protoMethods(mx) + pmy := protoMethods(my) + if pmx != nil && pmy != nil && pmx.Equal != nil && pmy.Equal != nil { + return pmx.Equal(protoiface.EqualInput{MessageA: mx, MessageB: my}).Equal + } + vx := protoreflect.ValueOfMessage(mx) vy := protoreflect.ValueOfMessage(my) return vx.Equal(vy) diff --git a/vendor/google.golang.org/protobuf/proto/extension.go b/vendor/google.golang.org/protobuf/proto/extension.go index d248f29284..78445d116f 100644 --- a/vendor/google.golang.org/protobuf/proto/extension.go +++ b/vendor/google.golang.org/protobuf/proto/extension.go @@ -39,6 +39,48 @@ func ClearExtension(m Message, xt protoreflect.ExtensionType) { // If the field is unpopulated, it returns the default value for // scalars and an immutable, empty value for lists or messages. // It panics if xt does not extend m. +// +// The type of the value is dependent on the field type of the extension. +// For extensions generated by protoc-gen-go, the Go type is as follows: +// +// ╔═══════════════════╤═════════════════════════╗ +// ║ Go type │ Protobuf kind ║ +// ╠═══════════════════╪═════════════════════════╣ +// ║ bool │ bool ║ +// ║ int32 │ int32, sint32, sfixed32 ║ +// ║ int64 │ int64, sint64, sfixed64 ║ +// ║ uint32 │ uint32, fixed32 ║ +// ║ uint64 │ uint64, fixed64 ║ +// ║ float32 │ float ║ +// ║ float64 │ double ║ +// ║ string │ string ║ +// ║ []byte │ bytes ║ +// ║ protoreflect.Enum │ enum ║ +// ║ proto.Message │ message, group ║ +// ╚═══════════════════╧═════════════════════════╝ +// +// The protoreflect.Enum and proto.Message types are the concrete Go type +// associated with the named enum or message. Repeated fields are represented +// using a Go slice of the base element type. +// +// If a generated extension descriptor variable is directly passed to +// GetExtension, then the call should be followed immediately by a +// type assertion to the expected output value. For example: +// +// mm := proto.GetExtension(m, foopb.E_MyExtension).(*foopb.MyMessage) +// +// This pattern enables static analysis tools to verify that the asserted type +// matches the Go type associated with the extension field and +// also enables a possible future migration to a type-safe extension API. +// +// Since singular messages are the most common extension type, the pattern of +// calling HasExtension followed by GetExtension may be simplified to: +// +// if mm := proto.GetExtension(m, foopb.E_MyExtension).(*foopb.MyMessage); mm != nil { +// ... // make use of mm +// } +// +// The mm variable is non-nil if and only if HasExtension reports true. func GetExtension(m Message, xt protoreflect.ExtensionType) any { // Treat nil message interface as an empty message; return the default. if m == nil { @@ -51,6 +93,35 @@ func GetExtension(m Message, xt protoreflect.ExtensionType) any { // SetExtension stores the value of an extension field. // It panics if m is invalid, xt does not extend m, or if type of v // is invalid for the specified extension field. +// +// The type of the value is dependent on the field type of the extension. +// For extensions generated by protoc-gen-go, the Go type is as follows: +// +// ╔═══════════════════╤═════════════════════════╗ +// ║ Go type │ Protobuf kind ║ +// ╠═══════════════════╪═════════════════════════╣ +// ║ bool │ bool ║ +// ║ int32 │ int32, sint32, sfixed32 ║ +// ║ int64 │ int64, sint64, sfixed64 ║ +// ║ uint32 │ uint32, fixed32 ║ +// ║ uint64 │ uint64, fixed64 ║ +// ║ float32 │ float ║ +// ║ float64 │ double ║ +// ║ string │ string ║ +// ║ []byte │ bytes ║ +// ║ protoreflect.Enum │ enum ║ +// ║ proto.Message │ message, group ║ +// ╚═══════════════════╧═════════════════════════╝ +// +// The protoreflect.Enum and proto.Message types are the concrete Go type +// associated with the named enum or message. Repeated fields are represented +// using a Go slice of the base element type. +// +// If a generated extension descriptor variable is directly passed to +// SetExtension (e.g., foopb.E_MyExtension), then the value should be a +// concrete type that matches the expected Go type for the extension descriptor +// so that static analysis tools can verify type correctness. +// This also enables a possible future migration to a type-safe extension API. func SetExtension(m Message, xt protoreflect.ExtensionType, v any) { xd := xt.TypeDescriptor() pv := xt.ValueOf(v) diff --git a/vendor/google.golang.org/protobuf/proto/merge.go b/vendor/google.golang.org/protobuf/proto/merge.go index 3c6fe57807..ef55b97dde 100644 --- a/vendor/google.golang.org/protobuf/proto/merge.go +++ b/vendor/google.golang.org/protobuf/proto/merge.go @@ -59,6 +59,12 @@ func Clone(m Message) Message { return dst.Interface() } +// CloneOf returns a deep copy of m. If the top-level message is invalid, +// it returns an invalid message as well. +func CloneOf[M Message](m M) M { + return Clone(m).(M) +} + // mergeOptions provides a namespace for merge functions, and can be // exported in the future if we add user-visible merge options. type mergeOptions struct{} diff --git a/vendor/google.golang.org/protobuf/proto/size.go b/vendor/google.golang.org/protobuf/proto/size.go index 052fb5ae31..c8675806c6 100644 --- a/vendor/google.golang.org/protobuf/proto/size.go +++ b/vendor/google.golang.org/protobuf/proto/size.go @@ -12,11 +12,19 @@ import ( ) // Size returns the size in bytes of the wire-format encoding of m. +// +// Note that Size might return more bytes than Marshal will write in the case of +// lazily decoded messages that arrive in non-minimal wire format: see +// https://protobuf.dev/reference/go/size/ for more details. func Size(m Message) int { return MarshalOptions{}.Size(m) } // Size returns the size in bytes of the wire-format encoding of m. +// +// Note that Size might return more bytes than Marshal will write in the case of +// lazily decoded messages that arrive in non-minimal wire format: see +// https://protobuf.dev/reference/go/size/ for more details. func (o MarshalOptions) Size(m Message) int { // Treat a nil message interface as an empty message; nothing to output. if m == nil { diff --git a/vendor/google.golang.org/protobuf/proto/wrapperopaque.go b/vendor/google.golang.org/protobuf/proto/wrapperopaque.go new file mode 100644 index 0000000000..267fd0f1f6 --- /dev/null +++ b/vendor/google.golang.org/protobuf/proto/wrapperopaque.go @@ -0,0 +1,80 @@ +// Copyright 2024 The Go Authors. All rights reserved. +// Use of this source code is governed by a BSD-style +// license that can be found in the LICENSE file. + +package proto + +// ValueOrNil returns nil if has is false, or a pointer to a new variable +// containing the value returned by the specified getter. +// +// This function is similar to the wrappers (proto.Int32(), proto.String(), +// etc.), but is generic (works for any field type) and works with the hasser +// and getter of a field, as opposed to a value. +// +// This is convenient when populating builder fields. +// +// Example: +// +// hop := attr.GetDirectHop() +// injectedRoute := ripb.InjectedRoute_builder{ +// Prefixes: route.GetPrefixes(), +// NextHop: proto.ValueOrNil(hop.HasAddress(), hop.GetAddress), +// } +func ValueOrNil[T any](has bool, getter func() T) *T { + if !has { + return nil + } + v := getter() + return &v +} + +// ValueOrDefault returns the protobuf message val if val is not nil, otherwise +// it returns a pointer to an empty val message. +// +// This function allows for translating code from the old Open Struct API to the +// new Opaque API. +// +// The old Open Struct API represented oneof fields with a wrapper struct: +// +// var signedImg *accountpb.SignedImage +// profile := &accountpb.Profile{ +// // The Avatar oneof will be set, with an empty SignedImage. +// Avatar: &accountpb.Profile_SignedImage{signedImg}, +// } +// +// The new Opaque API treats oneof fields like regular fields, there are no more +// wrapper structs: +// +// var signedImg *accountpb.SignedImage +// profile := &accountpb.Profile{} +// profile.SetSignedImage(signedImg) +// +// For convenience, the Opaque API also offers Builders, which allow for a +// direct translation of struct initialization. However, because Builders use +// nilness to represent field presence (but there is no non-nil wrapper struct +// anymore), Builders cannot distinguish between an unset oneof and a set oneof +// with nil message. The above code would need to be translated with help of the +// ValueOrDefault function to retain the same behavior: +// +// var signedImg *accountpb.SignedImage +// return &accountpb.Profile_builder{ +// SignedImage: proto.ValueOrDefault(signedImg), +// }.Build() +func ValueOrDefault[T interface { + *P + Message +}, P any](val T) T { + if val == nil { + return T(new(P)) + } + return val +} + +// ValueOrDefaultBytes is like ValueOrDefault but for working with fields of +// type []byte. +func ValueOrDefaultBytes(val []byte) []byte { + if val == nil { + return []byte{} + } + return val +} diff --git a/vendor/google.golang.org/protobuf/reflect/protodesc/desc.go b/vendor/google.golang.org/protobuf/reflect/protodesc/desc.go index 8fbecb4f58..40f17af4e3 100644 --- a/vendor/google.golang.org/protobuf/reflect/protodesc/desc.go +++ b/vendor/google.golang.org/protobuf/reflect/protodesc/desc.go @@ -13,6 +13,8 @@ package protodesc import ( + "strings" + "google.golang.org/protobuf/internal/editionssupport" "google.golang.org/protobuf/internal/errors" "google.golang.org/protobuf/internal/filedesc" @@ -102,13 +104,19 @@ func (o FileOptions) New(fd *descriptorpb.FileDescriptorProto, r Resolver) (prot default: return nil, errors.New("invalid syntax: %q", fd.GetSyntax()) } - if f.L1.Syntax == protoreflect.Editions && (fd.GetEdition() < editionssupport.Minimum || fd.GetEdition() > editionssupport.Maximum) { - return nil, errors.New("use of edition %v not yet supported by the Go Protobuf runtime", fd.GetEdition()) - } f.L1.Path = fd.GetName() if f.L1.Path == "" { return nil, errors.New("file path must be populated") } + if f.L1.Syntax == protoreflect.Editions && + (fd.GetEdition() < editionssupport.Minimum || fd.GetEdition() > editionssupport.Maximum) && + fd.GetEdition() != descriptorpb.Edition_EDITION_UNSTABLE { + // Allow cmd/protoc-gen-go/testdata to use any edition for easier + // testing of upcoming edition features. + if !strings.HasPrefix(fd.GetName(), "cmd/protoc-gen-go/testdata/") { + return nil, errors.New("use of edition %v not yet supported by the Go Protobuf runtime", fd.GetEdition()) + } + } f.L1.Package = protoreflect.FullName(fd.GetPackage()) if !f.L1.Package.IsValid() && f.L1.Package != "" { return nil, errors.New("invalid package: %q", f.L1.Package) @@ -126,17 +134,11 @@ func (o FileOptions) New(fd *descriptorpb.FileDescriptorProto, r Resolver) (prot } f.L2.Imports[i].IsPublic = true } - for _, i := range fd.GetWeakDependency() { - if !(0 <= i && int(i) < len(f.L2.Imports)) || f.L2.Imports[i].IsWeak { - return nil, errors.New("invalid or duplicate weak import index: %d", i) - } - f.L2.Imports[i].IsWeak = true - } imps := importSet{f.Path(): true} for i, path := range fd.GetDependency() { imp := &f.L2.Imports[i] f, err := r.FindFileByPath(path) - if err == protoregistry.NotFound && (o.AllowUnresolvable || imp.IsWeak) { + if err == protoregistry.NotFound && o.AllowUnresolvable { f = filedesc.PlaceholderFile(path) } else if err != nil { return nil, errors.New("could not resolve import %q: %v", path, err) @@ -152,6 +154,31 @@ func (o FileOptions) New(fd *descriptorpb.FileDescriptorProto, r Resolver) (prot imp := &f.L2.Imports[i] imps.importPublic(imp.Imports()) } + optionImps := importSet{f.Path(): true} + if len(fd.GetOptionDependency()) > 0 { + optionImports := make(filedesc.FileImports, len(fd.GetOptionDependency())) + for i, path := range fd.GetOptionDependency() { + imp := &optionImports[i] + f, err := r.FindFileByPath(path) + if err == protoregistry.NotFound { + // We always allow option imports to be unresolvable. + f = filedesc.PlaceholderFile(path) + } else if err != nil { + return nil, errors.New("could not resolve import %q: %v", path, err) + } + imp.FileDescriptor = f + + if imps[imp.Path()] || optionImps[imp.Path()] { + return nil, errors.New("already imported %q", path) + } + // This needs to be a separate map so that we don't recognize non-options + // symbols coming from option imports. + optionImps[imp.Path()] = true + } + f.L2.OptionImports = func() protoreflect.FileImports { + return &optionImports + } + } // Handle source locations. f.L2.Locations.File = f diff --git a/vendor/google.golang.org/protobuf/reflect/protodesc/desc_init.go b/vendor/google.golang.org/protobuf/reflect/protodesc/desc_init.go index 8561755427..c826ad0430 100644 --- a/vendor/google.golang.org/protobuf/reflect/protodesc/desc_init.go +++ b/vendor/google.golang.org/protobuf/reflect/protodesc/desc_init.go @@ -29,6 +29,7 @@ func (r descsByName) initEnumDeclarations(eds []*descriptorpb.EnumDescriptorProt e.L2.Options = func() protoreflect.ProtoMessage { return opts } } e.L1.EditionFeatures = mergeEditionFeatures(parent, ed.GetOptions().GetFeatures()) + e.L1.Visibility = int32(ed.GetVisibility()) for _, s := range ed.GetReservedName() { e.L2.ReservedNames.List = append(e.L2.ReservedNames.List, protoreflect.Name(s)) } @@ -70,6 +71,7 @@ func (r descsByName) initMessagesDeclarations(mds []*descriptorpb.DescriptorProt return nil, err } m.L1.EditionFeatures = mergeEditionFeatures(parent, md.GetOptions().GetFeatures()) + m.L1.Visibility = int32(md.GetVisibility()) if opts := md.GetOptions(); opts != nil { opts = proto.Clone(opts).(*descriptorpb.MessageOptions) m.L2.Options = func() protoreflect.ProtoMessage { return opts } @@ -149,7 +151,7 @@ func (r descsByName) initFieldsFromDescriptorProto(fds []*descriptorpb.FieldDesc if opts := fd.GetOptions(); opts != nil { opts = proto.Clone(opts).(*descriptorpb.FieldOptions) f.L1.Options = func() protoreflect.ProtoMessage { return opts } - f.L1.IsWeak = opts.GetWeak() + f.L1.IsLazy = opts.GetLazy() if opts.Packed != nil { f.L1.EditionFeatures.IsPacked = opts.GetPacked() } @@ -214,6 +216,9 @@ func (r descsByName) initExtensionDeclarations(xds []*descriptorpb.FieldDescript if xd.JsonName != nil { x.L2.StringName.InitJSON(xd.GetJsonName()) } + if x.L1.Kind == protoreflect.MessageKind && x.L1.EditionFeatures.IsDelimitedEncoded { + x.L1.Kind = protoreflect.GroupKind + } } return xs, nil } diff --git a/vendor/google.golang.org/protobuf/reflect/protodesc/desc_resolve.go b/vendor/google.golang.org/protobuf/reflect/protodesc/desc_resolve.go index f3cebab29c..ff692436e9 100644 --- a/vendor/google.golang.org/protobuf/reflect/protodesc/desc_resolve.go +++ b/vendor/google.golang.org/protobuf/reflect/protodesc/desc_resolve.go @@ -43,7 +43,7 @@ func (r *resolver) resolveMessageDependencies(ms []filedesc.Message, mds []*desc o.L1.Fields.List = append(o.L1.Fields.List, f) } - if f.L1.Kind, f.L1.Enum, f.L1.Message, err = r.findTarget(f.Kind(), f.Parent().FullName(), partialName(fd.GetTypeName()), f.IsWeak()); err != nil { + if f.L1.Kind, f.L1.Enum, f.L1.Message, err = r.findTarget(f.Kind(), f.Parent().FullName(), partialName(fd.GetTypeName())); err != nil { return errors.New("message field %q cannot resolve type: %v", f.FullName(), err) } if f.L1.Kind == protoreflect.GroupKind && (f.IsMap() || f.IsMapEntry()) { @@ -73,10 +73,10 @@ func (r *resolver) resolveMessageDependencies(ms []filedesc.Message, mds []*desc func (r *resolver) resolveExtensionDependencies(xs []filedesc.Extension, xds []*descriptorpb.FieldDescriptorProto) (err error) { for i, xd := range xds { x := &xs[i] - if x.L1.Extendee, err = r.findMessageDescriptor(x.Parent().FullName(), partialName(xd.GetExtendee()), false); err != nil { + if x.L1.Extendee, err = r.findMessageDescriptor(x.Parent().FullName(), partialName(xd.GetExtendee())); err != nil { return errors.New("extension field %q cannot resolve extendee: %v", x.FullName(), err) } - if x.L1.Kind, x.L2.Enum, x.L2.Message, err = r.findTarget(x.Kind(), x.Parent().FullName(), partialName(xd.GetTypeName()), false); err != nil { + if x.L1.Kind, x.L2.Enum, x.L2.Message, err = r.findTarget(x.Kind(), x.Parent().FullName(), partialName(xd.GetTypeName())); err != nil { return errors.New("extension field %q cannot resolve type: %v", x.FullName(), err) } if xd.DefaultValue != nil { @@ -95,11 +95,11 @@ func (r *resolver) resolveServiceDependencies(ss []filedesc.Service, sds []*desc s := &ss[i] for j, md := range sd.GetMethod() { m := &s.L2.Methods.List[j] - m.L1.Input, err = r.findMessageDescriptor(m.Parent().FullName(), partialName(md.GetInputType()), false) + m.L1.Input, err = r.findMessageDescriptor(m.Parent().FullName(), partialName(md.GetInputType())) if err != nil { return errors.New("service method %q cannot resolve input: %v", m.FullName(), err) } - m.L1.Output, err = r.findMessageDescriptor(s.FullName(), partialName(md.GetOutputType()), false) + m.L1.Output, err = r.findMessageDescriptor(s.FullName(), partialName(md.GetOutputType())) if err != nil { return errors.New("service method %q cannot resolve output: %v", m.FullName(), err) } @@ -111,16 +111,16 @@ func (r *resolver) resolveServiceDependencies(ss []filedesc.Service, sds []*desc // findTarget finds an enum or message descriptor if k is an enum, message, // group, or unknown. If unknown, and the name could be resolved, the kind // returned kind is set based on the type of the resolved descriptor. -func (r *resolver) findTarget(k protoreflect.Kind, scope protoreflect.FullName, ref partialName, isWeak bool) (protoreflect.Kind, protoreflect.EnumDescriptor, protoreflect.MessageDescriptor, error) { +func (r *resolver) findTarget(k protoreflect.Kind, scope protoreflect.FullName, ref partialName) (protoreflect.Kind, protoreflect.EnumDescriptor, protoreflect.MessageDescriptor, error) { switch k { case protoreflect.EnumKind: - ed, err := r.findEnumDescriptor(scope, ref, isWeak) + ed, err := r.findEnumDescriptor(scope, ref) if err != nil { return 0, nil, nil, err } return k, ed, nil, nil case protoreflect.MessageKind, protoreflect.GroupKind: - md, err := r.findMessageDescriptor(scope, ref, isWeak) + md, err := r.findMessageDescriptor(scope, ref) if err != nil { return 0, nil, nil, err } @@ -129,7 +129,7 @@ func (r *resolver) findTarget(k protoreflect.Kind, scope protoreflect.FullName, // Handle unspecified kinds (possible with parsers that operate // on a per-file basis without knowledge of dependencies). d, err := r.findDescriptor(scope, ref) - if err == protoregistry.NotFound && (r.allowUnresolvable || isWeak) { + if err == protoregistry.NotFound && r.allowUnresolvable { return k, filedesc.PlaceholderEnum(ref.FullName()), filedesc.PlaceholderMessage(ref.FullName()), nil } else if err == protoregistry.NotFound { return 0, nil, nil, errors.New("%q not found", ref.FullName()) @@ -206,9 +206,9 @@ func (r *resolver) findDescriptor(scope protoreflect.FullName, ref partialName) } } -func (r *resolver) findEnumDescriptor(scope protoreflect.FullName, ref partialName, isWeak bool) (protoreflect.EnumDescriptor, error) { +func (r *resolver) findEnumDescriptor(scope protoreflect.FullName, ref partialName) (protoreflect.EnumDescriptor, error) { d, err := r.findDescriptor(scope, ref) - if err == protoregistry.NotFound && (r.allowUnresolvable || isWeak) { + if err == protoregistry.NotFound && r.allowUnresolvable { return filedesc.PlaceholderEnum(ref.FullName()), nil } else if err == protoregistry.NotFound { return nil, errors.New("%q not found", ref.FullName()) @@ -222,9 +222,9 @@ func (r *resolver) findEnumDescriptor(scope protoreflect.FullName, ref partialNa return ed, nil } -func (r *resolver) findMessageDescriptor(scope protoreflect.FullName, ref partialName, isWeak bool) (protoreflect.MessageDescriptor, error) { +func (r *resolver) findMessageDescriptor(scope protoreflect.FullName, ref partialName) (protoreflect.MessageDescriptor, error) { d, err := r.findDescriptor(scope, ref) - if err == protoregistry.NotFound && (r.allowUnresolvable || isWeak) { + if err == protoregistry.NotFound && r.allowUnresolvable { return filedesc.PlaceholderMessage(ref.FullName()), nil } else if err == protoregistry.NotFound { return nil, errors.New("%q not found", ref.FullName()) diff --git a/vendor/google.golang.org/protobuf/reflect/protodesc/desc_validate.go b/vendor/google.golang.org/protobuf/reflect/protodesc/desc_validate.go index 6de31c2ebd..c343d9227b 100644 --- a/vendor/google.golang.org/protobuf/reflect/protodesc/desc_validate.go +++ b/vendor/google.golang.org/protobuf/reflect/protodesc/desc_validate.go @@ -149,12 +149,6 @@ func validateMessageDeclarations(file *filedesc.File, ms []filedesc.Message, mds return errors.New("message field %q under proto3 optional semantics must be within a single element oneof", f.FullName()) } } - if f.IsWeak() && !flags.ProtoLegacy { - return errors.New("message field %q is a weak field, which is a legacy proto1 feature that is no longer supported", f.FullName()) - } - if f.IsWeak() && (!f.HasPresence() || !isOptionalMessage(f) || f.ContainingOneof() != nil) { - return errors.New("message field %q may only be weak for an optional message", f.FullName()) - } if f.IsPacked() && !isPackable(f) { return errors.New("message field %q is not packable", f.FullName()) } @@ -199,9 +193,6 @@ func validateMessageDeclarations(file *filedesc.File, ms []filedesc.Message, mds if f.Cardinality() != protoreflect.Optional { return errors.New("message field %q belongs in a oneof and must be optional", f.FullName()) } - if f.IsWeak() { - return errors.New("message field %q belongs in a oneof and must not be a weak reference", f.FullName()) - } } } @@ -254,9 +245,6 @@ func validateExtensionDeclarations(f *filedesc.File, xs []filedesc.Extension, xd return errors.New("extension field %q has an invalid number: %d", x.FullName(), x.Number()) } } - if xd.GetOptions().GetWeak() { - return errors.New("extension field %q cannot be a weak reference", x.FullName()) - } if x.IsPacked() && !isPackable(x) { return errors.New("extension field %q is not packable", x.FullName()) } diff --git a/vendor/google.golang.org/protobuf/reflect/protodesc/editions.go b/vendor/google.golang.org/protobuf/reflect/protodesc/editions.go index 804830eda3..147b8c7398 100644 --- a/vendor/google.golang.org/protobuf/reflect/protodesc/editions.go +++ b/vendor/google.golang.org/protobuf/reflect/protodesc/editions.go @@ -11,10 +11,11 @@ import ( "google.golang.org/protobuf/internal/editiondefaults" "google.golang.org/protobuf/internal/filedesc" + "google.golang.org/protobuf/internal/genid" "google.golang.org/protobuf/proto" "google.golang.org/protobuf/reflect/protoreflect" "google.golang.org/protobuf/types/descriptorpb" - gofeaturespb "google.golang.org/protobuf/types/gofeaturespb" + "google.golang.org/protobuf/types/gofeaturespb" ) var defaults = &descriptorpb.FeatureSetDefaults{} @@ -43,6 +44,10 @@ func toEditionProto(ed filedesc.Edition) descriptorpb.Edition { return descriptorpb.Edition_EDITION_PROTO3 case filedesc.Edition2023: return descriptorpb.Edition_EDITION_2023 + case filedesc.Edition2024: + return descriptorpb.Edition_EDITION_2024 + case filedesc.EditionUnstable: + return descriptorpb.Edition_EDITION_UNSTABLE default: panic(fmt.Sprintf("unknown value for edition: %v", ed)) } @@ -55,7 +60,7 @@ func getFeatureSetFor(ed filedesc.Edition) *descriptorpb.FeatureSet { return def } edpb := toEditionProto(ed) - if defaults.GetMinimumEdition() > edpb || defaults.GetMaximumEdition() < edpb { + if (defaults.GetMinimumEdition() > edpb || defaults.GetMaximumEdition() < edpb) && edpb != descriptorpb.Edition_EDITION_UNSTABLE { // This should never happen protodesc.(FileOptions).New would fail when // initializing the file descriptor. // This most likely means the embedded defaults were not updated. @@ -123,10 +128,43 @@ func mergeEditionFeatures(parentDesc protoreflect.Descriptor, child *descriptorp parentFS.IsJSONCompliant = *jf == descriptorpb.FeatureSet_ALLOW } - if goFeatures, ok := proto.GetExtension(child, gofeaturespb.E_Go).(*gofeaturespb.GoFeatures); ok && goFeatures != nil { - if luje := goFeatures.LegacyUnmarshalJsonEnum; luje != nil { - parentFS.GenerateLegacyUnmarshalJSON = *luje - } + // We must not use proto.GetExtension(child, gofeaturespb.E_Go) + // because that only works for messages we generated, but not for + // dynamicpb messages. See golang/protobuf#1669. + // + // Further, we harden this code against adversarial inputs: a + // service which accepts descriptors from a possibly malicious + // source shouldn't crash. + goFeatures := child.ProtoReflect().Get(gofeaturespb.E_Go.TypeDescriptor()) + if !goFeatures.IsValid() { + return parentFS + } + gf, ok := goFeatures.Interface().(protoreflect.Message) + if !ok { + return parentFS + } + // gf.Interface() could be *dynamicpb.Message or *gofeaturespb.GoFeatures. + fields := gf.Descriptor().Fields() + + if fd := fields.ByNumber(genid.GoFeatures_LegacyUnmarshalJsonEnum_field_number); fd != nil && + !fd.IsList() && + fd.Kind() == protoreflect.BoolKind && + gf.Has(fd) { + parentFS.GenerateLegacyUnmarshalJSON = gf.Get(fd).Bool() + } + + if fd := fields.ByNumber(genid.GoFeatures_StripEnumPrefix_field_number); fd != nil && + !fd.IsList() && + fd.Kind() == protoreflect.EnumKind && + gf.Has(fd) { + parentFS.StripEnumPrefix = int(gf.Get(fd).Enum()) + } + + if fd := fields.ByNumber(genid.GoFeatures_ApiLevel_field_number); fd != nil && + !fd.IsList() && + fd.Kind() == protoreflect.EnumKind && + gf.Has(fd) { + parentFS.APILevel = int(gf.Get(fd).Enum()) } return parentFS diff --git a/vendor/google.golang.org/protobuf/reflect/protodesc/proto.go b/vendor/google.golang.org/protobuf/reflect/protodesc/proto.go index a5de8d4001..6f91074e36 100644 --- a/vendor/google.golang.org/protobuf/reflect/protodesc/proto.go +++ b/vendor/google.golang.org/protobuf/reflect/protodesc/proto.go @@ -32,9 +32,6 @@ func ToFileDescriptorProto(file protoreflect.FileDescriptor) *descriptorpb.FileD if imp.IsPublic { p.PublicDependency = append(p.PublicDependency, int32(i)) } - if imp.IsWeak { - p.WeakDependency = append(p.WeakDependency, int32(i)) - } } for i, locs := 0, file.SourceLocations(); i < locs.Len(); i++ { loc := locs.Get(i) @@ -73,16 +70,27 @@ func ToFileDescriptorProto(file protoreflect.FileDescriptor) *descriptorpb.FileD if syntax := file.Syntax(); syntax != protoreflect.Proto2 && syntax.IsValid() { p.Syntax = proto.String(file.Syntax().String()) } + desc := file + if fileImportDesc, ok := file.(protoreflect.FileImport); ok { + desc = fileImportDesc.FileDescriptor + } if file.Syntax() == protoreflect.Editions { - desc := file - if fileImportDesc, ok := file.(protoreflect.FileImport); ok { - desc = fileImportDesc.FileDescriptor - } - if editionsInterface, ok := desc.(interface{ Edition() int32 }); ok { p.Edition = descriptorpb.Edition(editionsInterface.Edition()).Enum() } } + type hasOptionImports interface { + OptionImports() protoreflect.FileImports + } + if opts, ok := desc.(hasOptionImports); ok { + if optionImports := opts.OptionImports(); optionImports.Len() > 0 { + optionDeps := make([]string, optionImports.Len()) + for i := range optionImports.Len() { + optionDeps[i] = optionImports.Get(i).Path() + } + p.OptionDependency = optionDeps + } + } return p } @@ -126,6 +134,14 @@ func ToDescriptorProto(message protoreflect.MessageDescriptor) *descriptorpb.Des for i, names := 0, message.ReservedNames(); i < names.Len(); i++ { p.ReservedName = append(p.ReservedName, string(names.Get(i))) } + type hasVisibility interface { + Visibility() int32 + } + if vis, ok := message.(hasVisibility); ok { + if visibility := vis.Visibility(); visibility > 0 { + p.Visibility = descriptorpb.SymbolVisibility(visibility).Enum() + } + } return p } @@ -219,6 +235,14 @@ func ToEnumDescriptorProto(enum protoreflect.EnumDescriptor) *descriptorpb.EnumD for i, names := 0, enum.ReservedNames(); i < names.Len(); i++ { p.ReservedName = append(p.ReservedName, string(names.Get(i))) } + type hasVisibility interface { + Visibility() int32 + } + if vis, ok := enum.(hasVisibility); ok { + if visibility := vis.Visibility(); visibility > 0 { + p.Visibility = descriptorpb.SymbolVisibility(visibility).Enum() + } + } return p } diff --git a/vendor/google.golang.org/protobuf/reflect/protoreflect/methods.go b/vendor/google.golang.org/protobuf/reflect/protoreflect/methods.go index d5d5af6ebe..742cb518c4 100644 --- a/vendor/google.golang.org/protobuf/reflect/protoreflect/methods.go +++ b/vendor/google.golang.org/protobuf/reflect/protoreflect/methods.go @@ -23,6 +23,7 @@ type ( Unmarshal func(unmarshalInput) (unmarshalOutput, error) Merge func(mergeInput) mergeOutput CheckInitialized func(checkInitializedInput) (checkInitializedOutput, error) + Equal func(equalInput) equalOutput } supportFlags = uint64 sizeInput = struct { @@ -75,4 +76,13 @@ type ( checkInitializedOutput = struct { pragma.NoUnkeyedLiterals } + equalInput = struct { + pragma.NoUnkeyedLiterals + MessageA Message + MessageB Message + } + equalOutput = struct { + pragma.NoUnkeyedLiterals + Equal bool + } ) diff --git a/vendor/google.golang.org/protobuf/reflect/protoreflect/source_gen.go b/vendor/google.golang.org/protobuf/reflect/protoreflect/source_gen.go index ea154eec44..730331e666 100644 --- a/vendor/google.golang.org/protobuf/reflect/protoreflect/source_gen.go +++ b/vendor/google.golang.org/protobuf/reflect/protoreflect/source_gen.go @@ -21,6 +21,8 @@ func (p *SourcePath) appendFileDescriptorProto(b []byte) []byte { b = p.appendRepeatedField(b, "public_dependency", nil) case 11: b = p.appendRepeatedField(b, "weak_dependency", nil) + case 15: + b = p.appendRepeatedField(b, "option_dependency", nil) case 4: b = p.appendRepeatedField(b, "message_type", (*SourcePath).appendDescriptorProto) case 5: @@ -66,6 +68,8 @@ func (p *SourcePath) appendDescriptorProto(b []byte) []byte { b = p.appendRepeatedField(b, "reserved_range", (*SourcePath).appendDescriptorProto_ReservedRange) case 10: b = p.appendRepeatedField(b, "reserved_name", nil) + case 11: + b = p.appendSingularField(b, "visibility", nil) } return b } @@ -85,6 +89,8 @@ func (p *SourcePath) appendEnumDescriptorProto(b []byte) []byte { b = p.appendRepeatedField(b, "reserved_range", (*SourcePath).appendEnumDescriptorProto_EnumReservedRange) case 5: b = p.appendRepeatedField(b, "reserved_name", nil) + case 6: + b = p.appendSingularField(b, "visibility", nil) } return b } @@ -398,6 +404,10 @@ func (p *SourcePath) appendFeatureSet(b []byte) []byte { b = p.appendSingularField(b, "message_encoding", nil) case 6: b = p.appendSingularField(b, "json_format", nil) + case 7: + b = p.appendSingularField(b, "enforce_naming_style", nil) + case 8: + b = p.appendSingularField(b, "default_symbol_visibility", nil) } return b } diff --git a/vendor/google.golang.org/protobuf/reflect/protoreflect/type.go b/vendor/google.golang.org/protobuf/reflect/protoreflect/type.go index cd8fadbaf8..cd7fbc87a4 100644 --- a/vendor/google.golang.org/protobuf/reflect/protoreflect/type.go +++ b/vendor/google.golang.org/protobuf/reflect/protoreflect/type.go @@ -68,7 +68,7 @@ type Descriptor interface { // dependency is not resolved, in which case only name information is known. // // Placeholder types may only be returned by the following accessors - // as a result of unresolved dependencies or weak imports: + // as a result of unresolved dependencies: // // ╔═══════════════════════════════════╤═════════════════════╗ // ║ Accessor │ Descriptor ║ @@ -168,11 +168,7 @@ type FileImport struct { // The current file and the imported file must be within proto package. IsPublic bool - // IsWeak reports whether this is a weak import, which does not impose - // a direct dependency on the target file. - // - // Weak imports are a legacy proto1 feature. Equivalent behavior is - // achieved using proto2 extension fields or proto3 Any messages. + // Deprecated: support for weak fields has been removed. IsWeak bool } @@ -325,9 +321,7 @@ type FieldDescriptor interface { // specified in the source .proto file. HasOptionalKeyword() bool - // IsWeak reports whether this is a weak field, which does not impose a - // direct dependency on the target type. - // If true, then Message returns a placeholder type. + // Deprecated: support for weak fields has been removed. IsWeak() bool // IsPacked reports whether repeated primitive numeric kinds should be diff --git a/vendor/google.golang.org/protobuf/reflect/protoreflect/value.go b/vendor/google.golang.org/protobuf/reflect/protoreflect/value.go index a7b0d06ff3..a4b78acef6 100644 --- a/vendor/google.golang.org/protobuf/reflect/protoreflect/value.go +++ b/vendor/google.golang.org/protobuf/reflect/protoreflect/value.go @@ -152,7 +152,7 @@ type Message interface { // This method may return nil. // // The returned methods type is identical to - // google.golang.org/protobuf/runtime/protoiface.Methods. + // [google.golang.org/protobuf/runtime/protoiface.Methods]. // Consult the protoiface package documentation for details. ProtoMethods() *methods } diff --git a/vendor/google.golang.org/protobuf/reflect/protoreflect/value_pure.go b/vendor/google.golang.org/protobuf/reflect/protoreflect/value_pure.go deleted file mode 100644 index 75f83a2af0..0000000000 --- a/vendor/google.golang.org/protobuf/reflect/protoreflect/value_pure.go +++ /dev/null @@ -1,60 +0,0 @@ -// Copyright 2018 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build purego || appengine -// +build purego appengine - -package protoreflect - -import "google.golang.org/protobuf/internal/pragma" - -type valueType int - -const ( - nilType valueType = iota - boolType - int32Type - int64Type - uint32Type - uint64Type - float32Type - float64Type - stringType - bytesType - enumType - ifaceType -) - -// value is a union where only one type can be represented at a time. -// This uses a distinct field for each type. This is type safe in Go, but -// occupies more memory than necessary (72B). -type value struct { - pragma.DoNotCompare // 0B - - typ valueType // 8B - num uint64 // 8B - str string // 16B - bin []byte // 24B - iface any // 16B -} - -func valueOfString(v string) Value { - return Value{typ: stringType, str: v} -} -func valueOfBytes(v []byte) Value { - return Value{typ: bytesType, bin: v} -} -func valueOfIface(v any) Value { - return Value{typ: ifaceType, iface: v} -} - -func (v Value) getString() string { - return v.str -} -func (v Value) getBytes() []byte { - return v.bin -} -func (v Value) getIface() any { - return v.iface -} diff --git a/vendor/google.golang.org/protobuf/reflect/protoreflect/value_unsafe_go121.go b/vendor/google.golang.org/protobuf/reflect/protoreflect/value_unsafe.go similarity index 96% rename from vendor/google.golang.org/protobuf/reflect/protoreflect/value_unsafe_go121.go rename to vendor/google.golang.org/protobuf/reflect/protoreflect/value_unsafe.go index f7d386990a..fe17f37220 100644 --- a/vendor/google.golang.org/protobuf/reflect/protoreflect/value_unsafe_go121.go +++ b/vendor/google.golang.org/protobuf/reflect/protoreflect/value_unsafe.go @@ -2,9 +2,6 @@ // Use of this source code is governed by a BSD-style // license that can be found in the LICENSE file. -//go:build !purego && !appengine && go1.21 -// +build !purego,!appengine,go1.21 - package protoreflect import ( diff --git a/vendor/google.golang.org/protobuf/reflect/protoreflect/value_unsafe_go120.go b/vendor/google.golang.org/protobuf/reflect/protoreflect/value_unsafe_go120.go deleted file mode 100644 index 7f3583ead8..0000000000 --- a/vendor/google.golang.org/protobuf/reflect/protoreflect/value_unsafe_go120.go +++ /dev/null @@ -1,99 +0,0 @@ -// Copyright 2018 The Go Authors. All rights reserved. -// Use of this source code is governed by a BSD-style -// license that can be found in the LICENSE file. - -//go:build !purego && !appengine && !go1.21 -// +build !purego,!appengine,!go1.21 - -package protoreflect - -import ( - "unsafe" - - "google.golang.org/protobuf/internal/pragma" -) - -type ( - stringHeader struct { - Data unsafe.Pointer - Len int - } - sliceHeader struct { - Data unsafe.Pointer - Len int - Cap int - } - ifaceHeader struct { - Type unsafe.Pointer - Data unsafe.Pointer - } -) - -var ( - nilType = typeOf(nil) - boolType = typeOf(*new(bool)) - int32Type = typeOf(*new(int32)) - int64Type = typeOf(*new(int64)) - uint32Type = typeOf(*new(uint32)) - uint64Type = typeOf(*new(uint64)) - float32Type = typeOf(*new(float32)) - float64Type = typeOf(*new(float64)) - stringType = typeOf(*new(string)) - bytesType = typeOf(*new([]byte)) - enumType = typeOf(*new(EnumNumber)) -) - -// typeOf returns a pointer to the Go type information. -// The pointer is comparable and equal if and only if the types are identical. -func typeOf(t any) unsafe.Pointer { - return (*ifaceHeader)(unsafe.Pointer(&t)).Type -} - -// value is a union where only one type can be represented at a time. -// The struct is 24B large on 64-bit systems and requires the minimum storage -// necessary to represent each possible type. -// -// The Go GC needs to be able to scan variables containing pointers. -// As such, pointers and non-pointers cannot be intermixed. -type value struct { - pragma.DoNotCompare // 0B - - // typ stores the type of the value as a pointer to the Go type. - typ unsafe.Pointer // 8B - - // ptr stores the data pointer for a String, Bytes, or interface value. - ptr unsafe.Pointer // 8B - - // num stores a Bool, Int32, Int64, Uint32, Uint64, Float32, Float64, or - // Enum value as a raw uint64. - // - // It is also used to store the length of a String or Bytes value; - // the capacity is ignored. - num uint64 // 8B -} - -func valueOfString(v string) Value { - p := (*stringHeader)(unsafe.Pointer(&v)) - return Value{typ: stringType, ptr: p.Data, num: uint64(len(v))} -} -func valueOfBytes(v []byte) Value { - p := (*sliceHeader)(unsafe.Pointer(&v)) - return Value{typ: bytesType, ptr: p.Data, num: uint64(len(v))} -} -func valueOfIface(v any) Value { - p := (*ifaceHeader)(unsafe.Pointer(&v)) - return Value{typ: p.Type, ptr: p.Data} -} - -func (v Value) getString() (x string) { - *(*stringHeader)(unsafe.Pointer(&x)) = stringHeader{Data: v.ptr, Len: int(v.num)} - return x -} -func (v Value) getBytes() (x []byte) { - *(*sliceHeader)(unsafe.Pointer(&x)) = sliceHeader{Data: v.ptr, Len: int(v.num), Cap: int(v.num)} - return x -} -func (v Value) getIface() (x any) { - *(*ifaceHeader)(unsafe.Pointer(&x)) = ifaceHeader{Type: v.typ, Data: v.ptr} - return x -} diff --git a/vendor/google.golang.org/protobuf/runtime/protoiface/methods.go b/vendor/google.golang.org/protobuf/runtime/protoiface/methods.go index 44cf467d88..28e9e9f039 100644 --- a/vendor/google.golang.org/protobuf/runtime/protoiface/methods.go +++ b/vendor/google.golang.org/protobuf/runtime/protoiface/methods.go @@ -39,6 +39,9 @@ type Methods = struct { // CheckInitialized returns an error if any required fields in the message are not set. CheckInitialized func(CheckInitializedInput) (CheckInitializedOutput, error) + + // Equal compares two messages and returns EqualOutput.Equal == true if they are equal. + Equal func(EqualInput) EqualOutput } // SupportFlags indicate support for optional features. @@ -119,6 +122,22 @@ type UnmarshalInputFlags = uint8 const ( UnmarshalDiscardUnknown UnmarshalInputFlags = 1 << iota + + // UnmarshalAliasBuffer permits unmarshal operations to alias the input buffer. + // The unmarshaller must not modify the contents of the buffer. + UnmarshalAliasBuffer + + // UnmarshalValidated indicates that validation has already been + // performed on the input buffer. + UnmarshalValidated + + // UnmarshalCheckRequired is set if this unmarshal operation ultimately will care if required fields are + // initialized. + UnmarshalCheckRequired + + // UnmarshalNoLazyDecoding is set if this unmarshal operation should not use + // lazy decoding, even when otherwise available. + UnmarshalNoLazyDecoding ) // UnmarshalOutputFlags are output from the Unmarshal method. @@ -166,3 +185,18 @@ type CheckInitializedInput = struct { type CheckInitializedOutput = struct { pragma.NoUnkeyedLiterals } + +// EqualInput is input to the Equal method. +type EqualInput = struct { + pragma.NoUnkeyedLiterals + + MessageA protoreflect.Message + MessageB protoreflect.Message +} + +// EqualOutput is output from the Equal method. +type EqualOutput = struct { + pragma.NoUnkeyedLiterals + + Equal bool +} diff --git a/vendor/google.golang.org/protobuf/runtime/protoimpl/impl.go b/vendor/google.golang.org/protobuf/runtime/protoimpl/impl.go index 4a1ab7fb3d..93df1b569b 100644 --- a/vendor/google.golang.org/protobuf/runtime/protoimpl/impl.go +++ b/vendor/google.golang.org/protobuf/runtime/protoimpl/impl.go @@ -15,6 +15,7 @@ import ( "google.golang.org/protobuf/internal/filedesc" "google.golang.org/protobuf/internal/filetype" "google.golang.org/protobuf/internal/impl" + "google.golang.org/protobuf/internal/protolazy" ) // UnsafeEnabled specifies whether package unsafe can be used. @@ -39,6 +40,9 @@ type ( ExtensionFieldV1 = impl.ExtensionField Pointer = impl.Pointer + + LazyUnmarshalInfo = *protolazy.XXX_lazyUnmarshalInfo + RaceDetectHookData = impl.RaceDetectHookData ) var X impl.Export diff --git a/vendor/google.golang.org/protobuf/types/descriptorpb/descriptor.pb.go b/vendor/google.golang.org/protobuf/types/descriptorpb/descriptor.pb.go index 9403eb0750..0b23faa957 100644 --- a/vendor/google.golang.org/protobuf/types/descriptorpb/descriptor.pb.go +++ b/vendor/google.golang.org/protobuf/types/descriptorpb/descriptor.pb.go @@ -46,6 +46,7 @@ import ( protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" sync "sync" + unsafe "unsafe" ) // The full set of known editions. @@ -68,8 +69,10 @@ const ( // comparison. Edition_EDITION_2023 Edition = 1000 Edition_EDITION_2024 Edition = 1001 + // A placeholder edition for developing and testing unscheduled features. + Edition_EDITION_UNSTABLE Edition = 9999 // Placeholder editions for testing feature resolution. These should not be - // used or relyed on outside of tests. + // used or relied on outside of tests. Edition_EDITION_1_TEST_ONLY Edition = 1 Edition_EDITION_2_TEST_ONLY Edition = 2 Edition_EDITION_99997_TEST_ONLY Edition = 99997 @@ -90,6 +93,7 @@ var ( 999: "EDITION_PROTO3", 1000: "EDITION_2023", 1001: "EDITION_2024", + 9999: "EDITION_UNSTABLE", 1: "EDITION_1_TEST_ONLY", 2: "EDITION_2_TEST_ONLY", 99997: "EDITION_99997_TEST_ONLY", @@ -104,6 +108,7 @@ var ( "EDITION_PROTO3": 999, "EDITION_2023": 1000, "EDITION_2024": 1001, + "EDITION_UNSTABLE": 9999, "EDITION_1_TEST_ONLY": 1, "EDITION_2_TEST_ONLY": 2, "EDITION_99997_TEST_ONLY": 99997, @@ -150,6 +155,70 @@ func (Edition) EnumDescriptor() ([]byte, []int) { return file_google_protobuf_descriptor_proto_rawDescGZIP(), []int{0} } +// Describes the 'visibility' of a symbol with respect to the proto import +// system. Symbols can only be imported when the visibility rules do not prevent +// it (ex: local symbols cannot be imported). Visibility modifiers can only set +// on `message` and `enum` as they are the only types available to be referenced +// from other files. +type SymbolVisibility int32 + +const ( + SymbolVisibility_VISIBILITY_UNSET SymbolVisibility = 0 + SymbolVisibility_VISIBILITY_LOCAL SymbolVisibility = 1 + SymbolVisibility_VISIBILITY_EXPORT SymbolVisibility = 2 +) + +// Enum value maps for SymbolVisibility. +var ( + SymbolVisibility_name = map[int32]string{ + 0: "VISIBILITY_UNSET", + 1: "VISIBILITY_LOCAL", + 2: "VISIBILITY_EXPORT", + } + SymbolVisibility_value = map[string]int32{ + "VISIBILITY_UNSET": 0, + "VISIBILITY_LOCAL": 1, + "VISIBILITY_EXPORT": 2, + } +) + +func (x SymbolVisibility) Enum() *SymbolVisibility { + p := new(SymbolVisibility) + *p = x + return p +} + +func (x SymbolVisibility) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (SymbolVisibility) Descriptor() protoreflect.EnumDescriptor { + return file_google_protobuf_descriptor_proto_enumTypes[1].Descriptor() +} + +func (SymbolVisibility) Type() protoreflect.EnumType { + return &file_google_protobuf_descriptor_proto_enumTypes[1] +} + +func (x SymbolVisibility) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *SymbolVisibility) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = SymbolVisibility(num) + return nil +} + +// Deprecated: Use SymbolVisibility.Descriptor instead. +func (SymbolVisibility) EnumDescriptor() ([]byte, []int) { + return file_google_protobuf_descriptor_proto_rawDescGZIP(), []int{1} +} + // The verification state of the extension range. type ExtensionRangeOptions_VerificationState int32 @@ -182,11 +251,11 @@ func (x ExtensionRangeOptions_VerificationState) String() string { } func (ExtensionRangeOptions_VerificationState) Descriptor() protoreflect.EnumDescriptor { - return file_google_protobuf_descriptor_proto_enumTypes[1].Descriptor() + return file_google_protobuf_descriptor_proto_enumTypes[2].Descriptor() } func (ExtensionRangeOptions_VerificationState) Type() protoreflect.EnumType { - return &file_google_protobuf_descriptor_proto_enumTypes[1] + return &file_google_protobuf_descriptor_proto_enumTypes[2] } func (x ExtensionRangeOptions_VerificationState) Number() protoreflect.EnumNumber { @@ -298,11 +367,11 @@ func (x FieldDescriptorProto_Type) String() string { } func (FieldDescriptorProto_Type) Descriptor() protoreflect.EnumDescriptor { - return file_google_protobuf_descriptor_proto_enumTypes[2].Descriptor() + return file_google_protobuf_descriptor_proto_enumTypes[3].Descriptor() } func (FieldDescriptorProto_Type) Type() protoreflect.EnumType { - return &file_google_protobuf_descriptor_proto_enumTypes[2] + return &file_google_protobuf_descriptor_proto_enumTypes[3] } func (x FieldDescriptorProto_Type) Number() protoreflect.EnumNumber { @@ -361,11 +430,11 @@ func (x FieldDescriptorProto_Label) String() string { } func (FieldDescriptorProto_Label) Descriptor() protoreflect.EnumDescriptor { - return file_google_protobuf_descriptor_proto_enumTypes[3].Descriptor() + return file_google_protobuf_descriptor_proto_enumTypes[4].Descriptor() } func (FieldDescriptorProto_Label) Type() protoreflect.EnumType { - return &file_google_protobuf_descriptor_proto_enumTypes[3] + return &file_google_protobuf_descriptor_proto_enumTypes[4] } func (x FieldDescriptorProto_Label) Number() protoreflect.EnumNumber { @@ -422,11 +491,11 @@ func (x FileOptions_OptimizeMode) String() string { } func (FileOptions_OptimizeMode) Descriptor() protoreflect.EnumDescriptor { - return file_google_protobuf_descriptor_proto_enumTypes[4].Descriptor() + return file_google_protobuf_descriptor_proto_enumTypes[5].Descriptor() } func (FileOptions_OptimizeMode) Type() protoreflect.EnumType { - return &file_google_protobuf_descriptor_proto_enumTypes[4] + return &file_google_protobuf_descriptor_proto_enumTypes[5] } func (x FileOptions_OptimizeMode) Number() protoreflect.EnumNumber { @@ -488,11 +557,11 @@ func (x FieldOptions_CType) String() string { } func (FieldOptions_CType) Descriptor() protoreflect.EnumDescriptor { - return file_google_protobuf_descriptor_proto_enumTypes[5].Descriptor() + return file_google_protobuf_descriptor_proto_enumTypes[6].Descriptor() } func (FieldOptions_CType) Type() protoreflect.EnumType { - return &file_google_protobuf_descriptor_proto_enumTypes[5] + return &file_google_protobuf_descriptor_proto_enumTypes[6] } func (x FieldOptions_CType) Number() protoreflect.EnumNumber { @@ -550,11 +619,11 @@ func (x FieldOptions_JSType) String() string { } func (FieldOptions_JSType) Descriptor() protoreflect.EnumDescriptor { - return file_google_protobuf_descriptor_proto_enumTypes[6].Descriptor() + return file_google_protobuf_descriptor_proto_enumTypes[7].Descriptor() } func (FieldOptions_JSType) Type() protoreflect.EnumType { - return &file_google_protobuf_descriptor_proto_enumTypes[6] + return &file_google_protobuf_descriptor_proto_enumTypes[7] } func (x FieldOptions_JSType) Number() protoreflect.EnumNumber { @@ -577,8 +646,6 @@ func (FieldOptions_JSType) EnumDescriptor() ([]byte, []int) { } // If set to RETENTION_SOURCE, the option will be omitted from the binary. -// Note: as of January 2023, support for this is in progress and does not yet -// have an effect (b/264593489). type FieldOptions_OptionRetention int32 const ( @@ -612,11 +679,11 @@ func (x FieldOptions_OptionRetention) String() string { } func (FieldOptions_OptionRetention) Descriptor() protoreflect.EnumDescriptor { - return file_google_protobuf_descriptor_proto_enumTypes[7].Descriptor() + return file_google_protobuf_descriptor_proto_enumTypes[8].Descriptor() } func (FieldOptions_OptionRetention) Type() protoreflect.EnumType { - return &file_google_protobuf_descriptor_proto_enumTypes[7] + return &file_google_protobuf_descriptor_proto_enumTypes[8] } func (x FieldOptions_OptionRetention) Number() protoreflect.EnumNumber { @@ -640,8 +707,7 @@ func (FieldOptions_OptionRetention) EnumDescriptor() ([]byte, []int) { // This indicates the types of entities that the field may apply to when used // as an option. If it is unset, then the field may be freely used as an -// option on any kind of entity. Note: as of January 2023, support for this is -// in progress and does not yet have an effect (b/264593489). +// option on any kind of entity. type FieldOptions_OptionTargetType int32 const ( @@ -696,11 +762,11 @@ func (x FieldOptions_OptionTargetType) String() string { } func (FieldOptions_OptionTargetType) Descriptor() protoreflect.EnumDescriptor { - return file_google_protobuf_descriptor_proto_enumTypes[8].Descriptor() + return file_google_protobuf_descriptor_proto_enumTypes[9].Descriptor() } func (FieldOptions_OptionTargetType) Type() protoreflect.EnumType { - return &file_google_protobuf_descriptor_proto_enumTypes[8] + return &file_google_protobuf_descriptor_proto_enumTypes[9] } func (x FieldOptions_OptionTargetType) Number() protoreflect.EnumNumber { @@ -758,11 +824,11 @@ func (x MethodOptions_IdempotencyLevel) String() string { } func (MethodOptions_IdempotencyLevel) Descriptor() protoreflect.EnumDescriptor { - return file_google_protobuf_descriptor_proto_enumTypes[9].Descriptor() + return file_google_protobuf_descriptor_proto_enumTypes[10].Descriptor() } func (MethodOptions_IdempotencyLevel) Type() protoreflect.EnumType { - return &file_google_protobuf_descriptor_proto_enumTypes[9] + return &file_google_protobuf_descriptor_proto_enumTypes[10] } func (x MethodOptions_IdempotencyLevel) Number() protoreflect.EnumNumber { @@ -820,11 +886,11 @@ func (x FeatureSet_FieldPresence) String() string { } func (FeatureSet_FieldPresence) Descriptor() protoreflect.EnumDescriptor { - return file_google_protobuf_descriptor_proto_enumTypes[10].Descriptor() + return file_google_protobuf_descriptor_proto_enumTypes[11].Descriptor() } func (FeatureSet_FieldPresence) Type() protoreflect.EnumType { - return &file_google_protobuf_descriptor_proto_enumTypes[10] + return &file_google_protobuf_descriptor_proto_enumTypes[11] } func (x FeatureSet_FieldPresence) Number() protoreflect.EnumNumber { @@ -879,11 +945,11 @@ func (x FeatureSet_EnumType) String() string { } func (FeatureSet_EnumType) Descriptor() protoreflect.EnumDescriptor { - return file_google_protobuf_descriptor_proto_enumTypes[11].Descriptor() + return file_google_protobuf_descriptor_proto_enumTypes[12].Descriptor() } func (FeatureSet_EnumType) Type() protoreflect.EnumType { - return &file_google_protobuf_descriptor_proto_enumTypes[11] + return &file_google_protobuf_descriptor_proto_enumTypes[12] } func (x FeatureSet_EnumType) Number() protoreflect.EnumNumber { @@ -938,11 +1004,11 @@ func (x FeatureSet_RepeatedFieldEncoding) String() string { } func (FeatureSet_RepeatedFieldEncoding) Descriptor() protoreflect.EnumDescriptor { - return file_google_protobuf_descriptor_proto_enumTypes[12].Descriptor() + return file_google_protobuf_descriptor_proto_enumTypes[13].Descriptor() } func (FeatureSet_RepeatedFieldEncoding) Type() protoreflect.EnumType { - return &file_google_protobuf_descriptor_proto_enumTypes[12] + return &file_google_protobuf_descriptor_proto_enumTypes[13] } func (x FeatureSet_RepeatedFieldEncoding) Number() protoreflect.EnumNumber { @@ -997,11 +1063,11 @@ func (x FeatureSet_Utf8Validation) String() string { } func (FeatureSet_Utf8Validation) Descriptor() protoreflect.EnumDescriptor { - return file_google_protobuf_descriptor_proto_enumTypes[13].Descriptor() + return file_google_protobuf_descriptor_proto_enumTypes[14].Descriptor() } func (FeatureSet_Utf8Validation) Type() protoreflect.EnumType { - return &file_google_protobuf_descriptor_proto_enumTypes[13] + return &file_google_protobuf_descriptor_proto_enumTypes[14] } func (x FeatureSet_Utf8Validation) Number() protoreflect.EnumNumber { @@ -1056,11 +1122,11 @@ func (x FeatureSet_MessageEncoding) String() string { } func (FeatureSet_MessageEncoding) Descriptor() protoreflect.EnumDescriptor { - return file_google_protobuf_descriptor_proto_enumTypes[14].Descriptor() + return file_google_protobuf_descriptor_proto_enumTypes[15].Descriptor() } func (FeatureSet_MessageEncoding) Type() protoreflect.EnumType { - return &file_google_protobuf_descriptor_proto_enumTypes[14] + return &file_google_protobuf_descriptor_proto_enumTypes[15] } func (x FeatureSet_MessageEncoding) Number() protoreflect.EnumNumber { @@ -1115,11 +1181,11 @@ func (x FeatureSet_JsonFormat) String() string { } func (FeatureSet_JsonFormat) Descriptor() protoreflect.EnumDescriptor { - return file_google_protobuf_descriptor_proto_enumTypes[15].Descriptor() + return file_google_protobuf_descriptor_proto_enumTypes[16].Descriptor() } func (FeatureSet_JsonFormat) Type() protoreflect.EnumType { - return &file_google_protobuf_descriptor_proto_enumTypes[15] + return &file_google_protobuf_descriptor_proto_enumTypes[16] } func (x FeatureSet_JsonFormat) Number() protoreflect.EnumNumber { @@ -1141,6 +1207,136 @@ func (FeatureSet_JsonFormat) EnumDescriptor() ([]byte, []int) { return file_google_protobuf_descriptor_proto_rawDescGZIP(), []int{19, 5} } +type FeatureSet_EnforceNamingStyle int32 + +const ( + FeatureSet_ENFORCE_NAMING_STYLE_UNKNOWN FeatureSet_EnforceNamingStyle = 0 + FeatureSet_STYLE2024 FeatureSet_EnforceNamingStyle = 1 + FeatureSet_STYLE_LEGACY FeatureSet_EnforceNamingStyle = 2 +) + +// Enum value maps for FeatureSet_EnforceNamingStyle. +var ( + FeatureSet_EnforceNamingStyle_name = map[int32]string{ + 0: "ENFORCE_NAMING_STYLE_UNKNOWN", + 1: "STYLE2024", + 2: "STYLE_LEGACY", + } + FeatureSet_EnforceNamingStyle_value = map[string]int32{ + "ENFORCE_NAMING_STYLE_UNKNOWN": 0, + "STYLE2024": 1, + "STYLE_LEGACY": 2, + } +) + +func (x FeatureSet_EnforceNamingStyle) Enum() *FeatureSet_EnforceNamingStyle { + p := new(FeatureSet_EnforceNamingStyle) + *p = x + return p +} + +func (x FeatureSet_EnforceNamingStyle) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (FeatureSet_EnforceNamingStyle) Descriptor() protoreflect.EnumDescriptor { + return file_google_protobuf_descriptor_proto_enumTypes[17].Descriptor() +} + +func (FeatureSet_EnforceNamingStyle) Type() protoreflect.EnumType { + return &file_google_protobuf_descriptor_proto_enumTypes[17] +} + +func (x FeatureSet_EnforceNamingStyle) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *FeatureSet_EnforceNamingStyle) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = FeatureSet_EnforceNamingStyle(num) + return nil +} + +// Deprecated: Use FeatureSet_EnforceNamingStyle.Descriptor instead. +func (FeatureSet_EnforceNamingStyle) EnumDescriptor() ([]byte, []int) { + return file_google_protobuf_descriptor_proto_rawDescGZIP(), []int{19, 6} +} + +type FeatureSet_VisibilityFeature_DefaultSymbolVisibility int32 + +const ( + FeatureSet_VisibilityFeature_DEFAULT_SYMBOL_VISIBILITY_UNKNOWN FeatureSet_VisibilityFeature_DefaultSymbolVisibility = 0 + // Default pre-EDITION_2024, all UNSET visibility are export. + FeatureSet_VisibilityFeature_EXPORT_ALL FeatureSet_VisibilityFeature_DefaultSymbolVisibility = 1 + // All top-level symbols default to export, nested default to local. + FeatureSet_VisibilityFeature_EXPORT_TOP_LEVEL FeatureSet_VisibilityFeature_DefaultSymbolVisibility = 2 + // All symbols default to local. + FeatureSet_VisibilityFeature_LOCAL_ALL FeatureSet_VisibilityFeature_DefaultSymbolVisibility = 3 + // All symbols local by default. Nested types cannot be exported. + // With special case caveat for message { enum {} reserved 1 to max; } + // This is the recommended setting for new protos. + FeatureSet_VisibilityFeature_STRICT FeatureSet_VisibilityFeature_DefaultSymbolVisibility = 4 +) + +// Enum value maps for FeatureSet_VisibilityFeature_DefaultSymbolVisibility. +var ( + FeatureSet_VisibilityFeature_DefaultSymbolVisibility_name = map[int32]string{ + 0: "DEFAULT_SYMBOL_VISIBILITY_UNKNOWN", + 1: "EXPORT_ALL", + 2: "EXPORT_TOP_LEVEL", + 3: "LOCAL_ALL", + 4: "STRICT", + } + FeatureSet_VisibilityFeature_DefaultSymbolVisibility_value = map[string]int32{ + "DEFAULT_SYMBOL_VISIBILITY_UNKNOWN": 0, + "EXPORT_ALL": 1, + "EXPORT_TOP_LEVEL": 2, + "LOCAL_ALL": 3, + "STRICT": 4, + } +) + +func (x FeatureSet_VisibilityFeature_DefaultSymbolVisibility) Enum() *FeatureSet_VisibilityFeature_DefaultSymbolVisibility { + p := new(FeatureSet_VisibilityFeature_DefaultSymbolVisibility) + *p = x + return p +} + +func (x FeatureSet_VisibilityFeature_DefaultSymbolVisibility) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (FeatureSet_VisibilityFeature_DefaultSymbolVisibility) Descriptor() protoreflect.EnumDescriptor { + return file_google_protobuf_descriptor_proto_enumTypes[18].Descriptor() +} + +func (FeatureSet_VisibilityFeature_DefaultSymbolVisibility) Type() protoreflect.EnumType { + return &file_google_protobuf_descriptor_proto_enumTypes[18] +} + +func (x FeatureSet_VisibilityFeature_DefaultSymbolVisibility) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *FeatureSet_VisibilityFeature_DefaultSymbolVisibility) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = FeatureSet_VisibilityFeature_DefaultSymbolVisibility(num) + return nil +} + +// Deprecated: Use FeatureSet_VisibilityFeature_DefaultSymbolVisibility.Descriptor instead. +func (FeatureSet_VisibilityFeature_DefaultSymbolVisibility) EnumDescriptor() ([]byte, []int) { + return file_google_protobuf_descriptor_proto_rawDescGZIP(), []int{19, 0, 0} +} + // Represents the identified object's effect on the element in the original // .proto file. type GeneratedCodeInfo_Annotation_Semantic int32 @@ -1179,11 +1375,11 @@ func (x GeneratedCodeInfo_Annotation_Semantic) String() string { } func (GeneratedCodeInfo_Annotation_Semantic) Descriptor() protoreflect.EnumDescriptor { - return file_google_protobuf_descriptor_proto_enumTypes[16].Descriptor() + return file_google_protobuf_descriptor_proto_enumTypes[19].Descriptor() } func (GeneratedCodeInfo_Annotation_Semantic) Type() protoreflect.EnumType { - return &file_google_protobuf_descriptor_proto_enumTypes[16] + return &file_google_protobuf_descriptor_proto_enumTypes[19] } func (x GeneratedCodeInfo_Annotation_Semantic) Number() protoreflect.EnumNumber { @@ -1208,20 +1404,18 @@ func (GeneratedCodeInfo_Annotation_Semantic) EnumDescriptor() ([]byte, []int) { // The protocol compiler can output a FileDescriptorSet containing the .proto // files it parses. type FileDescriptorSet struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - File []*FileDescriptorProto `protobuf:"bytes,1,rep,name=file" json:"file,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + File []*FileDescriptorProto `protobuf:"bytes,1,rep,name=file" json:"file,omitempty"` + extensionFields protoimpl.ExtensionFields + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *FileDescriptorSet) Reset() { *x = FileDescriptorSet{} - if protoimpl.UnsafeEnabled { - mi := &file_google_protobuf_descriptor_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_google_protobuf_descriptor_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *FileDescriptorSet) String() string { @@ -1232,7 +1426,7 @@ func (*FileDescriptorSet) ProtoMessage() {} func (x *FileDescriptorSet) ProtoReflect() protoreflect.Message { mi := &file_google_protobuf_descriptor_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1256,12 +1450,9 @@ func (x *FileDescriptorSet) GetFile() []*FileDescriptorProto { // Describes a complete .proto file. type FileDescriptorProto struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` // file name, relative to root of source tree - Package *string `protobuf:"bytes,2,opt,name=package" json:"package,omitempty"` // e.g. "foo", "foo.bar", etc. + state protoimpl.MessageState `protogen:"open.v1"` + Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` // file name, relative to root of source tree + Package *string `protobuf:"bytes,2,opt,name=package" json:"package,omitempty"` // e.g. "foo", "foo.bar", etc. // Names of files imported by this file. Dependency []string `protobuf:"bytes,3,rep,name=dependency" json:"dependency,omitempty"` // Indexes of the public imported files in the dependency list above. @@ -1269,6 +1460,9 @@ type FileDescriptorProto struct { // Indexes of the weak imported files in the dependency list. // For Google-internal migration only. Do not use. WeakDependency []int32 `protobuf:"varint,11,rep,name=weak_dependency,json=weakDependency" json:"weak_dependency,omitempty"` + // Names of files imported by this file purely for the purpose of providing + // option extensions. These are excluded from the dependency list above. + OptionDependency []string `protobuf:"bytes,15,rep,name=option_dependency,json=optionDependency" json:"option_dependency,omitempty"` // All top-level definitions in this file. MessageType []*DescriptorProto `protobuf:"bytes,4,rep,name=message_type,json=messageType" json:"message_type,omitempty"` EnumType []*EnumDescriptorProto `protobuf:"bytes,5,rep,name=enum_type,json=enumType" json:"enum_type,omitempty"` @@ -1284,18 +1478,24 @@ type FileDescriptorProto struct { // The supported values are "proto2", "proto3", and "editions". // // If `edition` is present, this value must be "editions". + // WARNING: This field should only be used by protobuf plugins or special + // cases like the proto compiler. Other uses are discouraged and + // developers should rely on the protoreflect APIs for their client language. Syntax *string `protobuf:"bytes,12,opt,name=syntax" json:"syntax,omitempty"` // The edition of the proto file. - Edition *Edition `protobuf:"varint,14,opt,name=edition,enum=google.protobuf.Edition" json:"edition,omitempty"` + // WARNING: This field should only be used by protobuf plugins or special + // cases like the proto compiler. Other uses are discouraged and + // developers should rely on the protoreflect APIs for their client language. + Edition *Edition `protobuf:"varint,14,opt,name=edition,enum=google.protobuf.Edition" json:"edition,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *FileDescriptorProto) Reset() { *x = FileDescriptorProto{} - if protoimpl.UnsafeEnabled { - mi := &file_google_protobuf_descriptor_proto_msgTypes[1] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_google_protobuf_descriptor_proto_msgTypes[1] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *FileDescriptorProto) String() string { @@ -1306,7 +1506,7 @@ func (*FileDescriptorProto) ProtoMessage() {} func (x *FileDescriptorProto) ProtoReflect() protoreflect.Message { mi := &file_google_protobuf_descriptor_proto_msgTypes[1] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1356,6 +1556,13 @@ func (x *FileDescriptorProto) GetWeakDependency() []int32 { return nil } +func (x *FileDescriptorProto) GetOptionDependency() []string { + if x != nil { + return x.OptionDependency + } + return nil +} + func (x *FileDescriptorProto) GetMessageType() []*DescriptorProto { if x != nil { return x.MessageType @@ -1414,10 +1621,7 @@ func (x *FileDescriptorProto) GetEdition() Edition { // Describes a message type. type DescriptorProto struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` Field []*FieldDescriptorProto `protobuf:"bytes,2,rep,name=field" json:"field,omitempty"` Extension []*FieldDescriptorProto `protobuf:"bytes,6,rep,name=extension" json:"extension,omitempty"` @@ -1430,15 +1634,17 @@ type DescriptorProto struct { // Reserved field names, which may not be used by fields in the same message. // A given name may only be reserved once. ReservedName []string `protobuf:"bytes,10,rep,name=reserved_name,json=reservedName" json:"reserved_name,omitempty"` + // Support for `export` and `local` keywords on enums. + Visibility *SymbolVisibility `protobuf:"varint,11,opt,name=visibility,enum=google.protobuf.SymbolVisibility" json:"visibility,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *DescriptorProto) Reset() { *x = DescriptorProto{} - if protoimpl.UnsafeEnabled { - mi := &file_google_protobuf_descriptor_proto_msgTypes[2] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_google_protobuf_descriptor_proto_msgTypes[2] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *DescriptorProto) String() string { @@ -1449,7 +1655,7 @@ func (*DescriptorProto) ProtoMessage() {} func (x *DescriptorProto) ProtoReflect() protoreflect.Message { mi := &file_google_protobuf_descriptor_proto_msgTypes[2] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1534,12 +1740,15 @@ func (x *DescriptorProto) GetReservedName() []string { return nil } -type ExtensionRangeOptions struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - extensionFields protoimpl.ExtensionFields +func (x *DescriptorProto) GetVisibility() SymbolVisibility { + if x != nil && x.Visibility != nil { + return *x.Visibility + } + return SymbolVisibility_VISIBILITY_UNSET +} +type ExtensionRangeOptions struct { + state protoimpl.MessageState `protogen:"open.v1"` // The parser stores options it doesn't recognize here. See above. UninterpretedOption []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"` // For external users: DO NOT USE. We are in the process of open sourcing @@ -1551,7 +1760,10 @@ type ExtensionRangeOptions struct { // The verification state of the range. // TODO: flip the default to DECLARATION once all empty ranges // are marked as UNVERIFIED. - Verification *ExtensionRangeOptions_VerificationState `protobuf:"varint,3,opt,name=verification,enum=google.protobuf.ExtensionRangeOptions_VerificationState,def=1" json:"verification,omitempty"` + Verification *ExtensionRangeOptions_VerificationState `protobuf:"varint,3,opt,name=verification,enum=google.protobuf.ExtensionRangeOptions_VerificationState,def=1" json:"verification,omitempty"` + extensionFields protoimpl.ExtensionFields + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } // Default values for ExtensionRangeOptions fields. @@ -1561,11 +1773,9 @@ const ( func (x *ExtensionRangeOptions) Reset() { *x = ExtensionRangeOptions{} - if protoimpl.UnsafeEnabled { - mi := &file_google_protobuf_descriptor_proto_msgTypes[3] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_google_protobuf_descriptor_proto_msgTypes[3] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ExtensionRangeOptions) String() string { @@ -1576,7 +1786,7 @@ func (*ExtensionRangeOptions) ProtoMessage() {} func (x *ExtensionRangeOptions) ProtoReflect() protoreflect.Message { mi := &file_google_protobuf_descriptor_proto_msgTypes[3] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1621,10 +1831,7 @@ func (x *ExtensionRangeOptions) GetVerification() ExtensionRangeOptions_Verifica // Describes a field within a message. type FieldDescriptorProto struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` Number *int32 `protobuf:"varint,3,opt,name=number" json:"number,omitempty"` Label *FieldDescriptorProto_Label `protobuf:"varint,4,opt,name=label,enum=google.protobuf.FieldDescriptorProto_Label" json:"label,omitempty"` @@ -1676,15 +1883,15 @@ type FieldDescriptorProto struct { // Proto2 optional fields do not set this flag, because they already indicate // optional with `LABEL_OPTIONAL`. Proto3Optional *bool `protobuf:"varint,17,opt,name=proto3_optional,json=proto3Optional" json:"proto3_optional,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *FieldDescriptorProto) Reset() { *x = FieldDescriptorProto{} - if protoimpl.UnsafeEnabled { - mi := &file_google_protobuf_descriptor_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_google_protobuf_descriptor_proto_msgTypes[4] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *FieldDescriptorProto) String() string { @@ -1695,7 +1902,7 @@ func (*FieldDescriptorProto) ProtoMessage() {} func (x *FieldDescriptorProto) ProtoReflect() protoreflect.Message { mi := &file_google_protobuf_descriptor_proto_msgTypes[4] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1789,21 +1996,18 @@ func (x *FieldDescriptorProto) GetProto3Optional() bool { // Describes a oneof. type OneofDescriptorProto struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + Options *OneofOptions `protobuf:"bytes,2,opt,name=options" json:"options,omitempty"` unknownFields protoimpl.UnknownFields - - Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` - Options *OneofOptions `protobuf:"bytes,2,opt,name=options" json:"options,omitempty"` + sizeCache protoimpl.SizeCache } func (x *OneofDescriptorProto) Reset() { *x = OneofDescriptorProto{} - if protoimpl.UnsafeEnabled { - mi := &file_google_protobuf_descriptor_proto_msgTypes[5] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_google_protobuf_descriptor_proto_msgTypes[5] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *OneofDescriptorProto) String() string { @@ -1814,7 +2018,7 @@ func (*OneofDescriptorProto) ProtoMessage() {} func (x *OneofDescriptorProto) ProtoReflect() protoreflect.Message { mi := &file_google_protobuf_descriptor_proto_msgTypes[5] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1845,10 +2049,7 @@ func (x *OneofDescriptorProto) GetOptions() *OneofOptions { // Describes an enum type. type EnumDescriptorProto struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` Value []*EnumValueDescriptorProto `protobuf:"bytes,2,rep,name=value" json:"value,omitempty"` Options *EnumOptions `protobuf:"bytes,3,opt,name=options" json:"options,omitempty"` @@ -1859,15 +2060,17 @@ type EnumDescriptorProto struct { // Reserved enum value names, which may not be reused. A given name may only // be reserved once. ReservedName []string `protobuf:"bytes,5,rep,name=reserved_name,json=reservedName" json:"reserved_name,omitempty"` + // Support for `export` and `local` keywords on enums. + Visibility *SymbolVisibility `protobuf:"varint,6,opt,name=visibility,enum=google.protobuf.SymbolVisibility" json:"visibility,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *EnumDescriptorProto) Reset() { *x = EnumDescriptorProto{} - if protoimpl.UnsafeEnabled { - mi := &file_google_protobuf_descriptor_proto_msgTypes[6] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_google_protobuf_descriptor_proto_msgTypes[6] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *EnumDescriptorProto) String() string { @@ -1878,7 +2081,7 @@ func (*EnumDescriptorProto) ProtoMessage() {} func (x *EnumDescriptorProto) ProtoReflect() protoreflect.Message { mi := &file_google_protobuf_descriptor_proto_msgTypes[6] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1928,24 +2131,28 @@ func (x *EnumDescriptorProto) GetReservedName() []string { return nil } +func (x *EnumDescriptorProto) GetVisibility() SymbolVisibility { + if x != nil && x.Visibility != nil { + return *x.Visibility + } + return SymbolVisibility_VISIBILITY_UNSET +} + // Describes a value within an enum. type EnumValueDescriptorProto struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + Number *int32 `protobuf:"varint,2,opt,name=number" json:"number,omitempty"` + Options *EnumValueOptions `protobuf:"bytes,3,opt,name=options" json:"options,omitempty"` unknownFields protoimpl.UnknownFields - - Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` - Number *int32 `protobuf:"varint,2,opt,name=number" json:"number,omitempty"` - Options *EnumValueOptions `protobuf:"bytes,3,opt,name=options" json:"options,omitempty"` + sizeCache protoimpl.SizeCache } func (x *EnumValueDescriptorProto) Reset() { *x = EnumValueDescriptorProto{} - if protoimpl.UnsafeEnabled { - mi := &file_google_protobuf_descriptor_proto_msgTypes[7] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_google_protobuf_descriptor_proto_msgTypes[7] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *EnumValueDescriptorProto) String() string { @@ -1956,7 +2163,7 @@ func (*EnumValueDescriptorProto) ProtoMessage() {} func (x *EnumValueDescriptorProto) ProtoReflect() protoreflect.Message { mi := &file_google_protobuf_descriptor_proto_msgTypes[7] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -1994,22 +2201,19 @@ func (x *EnumValueDescriptorProto) GetOptions() *EnumValueOptions { // Describes a service. type ServiceDescriptorProto struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + Method []*MethodDescriptorProto `protobuf:"bytes,2,rep,name=method" json:"method,omitempty"` + Options *ServiceOptions `protobuf:"bytes,3,opt,name=options" json:"options,omitempty"` unknownFields protoimpl.UnknownFields - - Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` - Method []*MethodDescriptorProto `protobuf:"bytes,2,rep,name=method" json:"method,omitempty"` - Options *ServiceOptions `protobuf:"bytes,3,opt,name=options" json:"options,omitempty"` + sizeCache protoimpl.SizeCache } func (x *ServiceDescriptorProto) Reset() { *x = ServiceDescriptorProto{} - if protoimpl.UnsafeEnabled { - mi := &file_google_protobuf_descriptor_proto_msgTypes[8] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_google_protobuf_descriptor_proto_msgTypes[8] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ServiceDescriptorProto) String() string { @@ -2020,7 +2224,7 @@ func (*ServiceDescriptorProto) ProtoMessage() {} func (x *ServiceDescriptorProto) ProtoReflect() protoreflect.Message { mi := &file_google_protobuf_descriptor_proto_msgTypes[8] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2058,11 +2262,8 @@ func (x *ServiceDescriptorProto) GetOptions() *ServiceOptions { // Describes a method of a service. type MethodDescriptorProto struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Name *string `protobuf:"bytes,1,opt,name=name" json:"name,omitempty"` // Input and output type names. These are resolved in the same way as // FieldDescriptorProto.type_name, but must refer to a message type. InputType *string `protobuf:"bytes,2,opt,name=input_type,json=inputType" json:"input_type,omitempty"` @@ -2072,6 +2273,8 @@ type MethodDescriptorProto struct { ClientStreaming *bool `protobuf:"varint,5,opt,name=client_streaming,json=clientStreaming,def=0" json:"client_streaming,omitempty"` // Identifies if server streams multiple server messages ServerStreaming *bool `protobuf:"varint,6,opt,name=server_streaming,json=serverStreaming,def=0" json:"server_streaming,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } // Default values for MethodDescriptorProto fields. @@ -2082,11 +2285,9 @@ const ( func (x *MethodDescriptorProto) Reset() { *x = MethodDescriptorProto{} - if protoimpl.UnsafeEnabled { - mi := &file_google_protobuf_descriptor_proto_msgTypes[9] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_google_protobuf_descriptor_proto_msgTypes[9] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *MethodDescriptorProto) String() string { @@ -2097,7 +2298,7 @@ func (*MethodDescriptorProto) ProtoMessage() {} func (x *MethodDescriptorProto) ProtoReflect() protoreflect.Message { mi := &file_google_protobuf_descriptor_proto_msgTypes[9] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2155,11 +2356,7 @@ func (x *MethodDescriptorProto) GetServerStreaming() bool { } type FileOptions struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - extensionFields protoimpl.ExtensionFields - + state protoimpl.MessageState `protogen:"open.v1"` // Sets the Java package where classes generated from this .proto will be // placed. By default, the proto package is used, but this is often // inappropriate because proto packages do not normally start with backwards @@ -2247,10 +2444,16 @@ type FileOptions struct { // determining the ruby package. RubyPackage *string `protobuf:"bytes,45,opt,name=ruby_package,json=rubyPackage" json:"ruby_package,omitempty"` // Any features defined in the specific edition. + // WARNING: This field should only be used by protobuf plugins or special + // cases like the proto compiler. Other uses are discouraged and + // developers should rely on the protoreflect APIs for their client language. Features *FeatureSet `protobuf:"bytes,50,opt,name=features" json:"features,omitempty"` // The parser stores options it doesn't recognize here. // See the documentation for the "Options" section above. UninterpretedOption []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"` + extensionFields protoimpl.ExtensionFields + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } // Default values for FileOptions fields. @@ -2267,11 +2470,9 @@ const ( func (x *FileOptions) Reset() { *x = FileOptions{} - if protoimpl.UnsafeEnabled { - mi := &file_google_protobuf_descriptor_proto_msgTypes[10] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_google_protobuf_descriptor_proto_msgTypes[10] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *FileOptions) String() string { @@ -2282,7 +2483,7 @@ func (*FileOptions) ProtoMessage() {} func (x *FileOptions) ProtoReflect() protoreflect.Message { mi := &file_google_protobuf_descriptor_proto_msgTypes[10] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2446,11 +2647,7 @@ func (x *FileOptions) GetUninterpretedOption() []*UninterpretedOption { } type MessageOptions struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - extensionFields protoimpl.ExtensionFields - + state protoimpl.MessageState `protogen:"open.v1"` // Set true to use the old proto1 MessageSet wire format for extensions. // This is provided for backwards-compatibility with the MessageSet wire // format. You should not use this for any other reason: It's less @@ -2520,9 +2717,15 @@ type MessageOptions struct { // Deprecated: Marked as deprecated in google/protobuf/descriptor.proto. DeprecatedLegacyJsonFieldConflicts *bool `protobuf:"varint,11,opt,name=deprecated_legacy_json_field_conflicts,json=deprecatedLegacyJsonFieldConflicts" json:"deprecated_legacy_json_field_conflicts,omitempty"` // Any features defined in the specific edition. + // WARNING: This field should only be used by protobuf plugins or special + // cases like the proto compiler. Other uses are discouraged and + // developers should rely on the protoreflect APIs for their client language. Features *FeatureSet `protobuf:"bytes,12,opt,name=features" json:"features,omitempty"` // The parser stores options it doesn't recognize here. See above. UninterpretedOption []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"` + extensionFields protoimpl.ExtensionFields + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } // Default values for MessageOptions fields. @@ -2534,11 +2737,9 @@ const ( func (x *MessageOptions) Reset() { *x = MessageOptions{} - if protoimpl.UnsafeEnabled { - mi := &file_google_protobuf_descriptor_proto_msgTypes[11] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_google_protobuf_descriptor_proto_msgTypes[11] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *MessageOptions) String() string { @@ -2549,7 +2750,7 @@ func (*MessageOptions) ProtoMessage() {} func (x *MessageOptions) ProtoReflect() protoreflect.Message { mi := &file_google_protobuf_descriptor_proto_msgTypes[11] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2615,17 +2816,14 @@ func (x *MessageOptions) GetUninterpretedOption() []*UninterpretedOption { } type FieldOptions struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - extensionFields protoimpl.ExtensionFields - + state protoimpl.MessageState `protogen:"open.v1"` + // NOTE: ctype is deprecated. Use `features.(pb.cpp).string_type` instead. // The ctype option instructs the C++ code generator to use a different // representation of the field than it normally would. See the specific // options below. This option is only implemented to support use of // [ctype=CORD] and [ctype=STRING] (the default) on non-repeated fields of - // type "bytes" in the open source release -- sorry, we'll try to include - // other types in a future version! + // type "bytes" in the open source release. + // TODO: make ctype actually deprecated. Ctype *FieldOptions_CType `protobuf:"varint,1,opt,name=ctype,enum=google.protobuf.FieldOptions_CType,def=0" json:"ctype,omitempty"` // The packed option can be enabled for repeated primitive fields to enable // a more efficient representation on the wire. Rather than repeatedly @@ -2679,7 +2877,10 @@ type FieldOptions struct { // for accessors, or it will be completely ignored; in the very least, this // is a formalization for deprecating fields. Deprecated *bool `protobuf:"varint,3,opt,name=deprecated,def=0" json:"deprecated,omitempty"` + // DEPRECATED. DO NOT USE! // For Google-internal migration only. Do not use. + // + // Deprecated: Marked as deprecated in google/protobuf/descriptor.proto. Weak *bool `protobuf:"varint,10,opt,name=weak,def=0" json:"weak,omitempty"` // Indicate that the field value should not be printed out when using debug // formats, e.g. when the field contains sensitive credentials. @@ -2688,10 +2889,16 @@ type FieldOptions struct { Targets []FieldOptions_OptionTargetType `protobuf:"varint,19,rep,name=targets,enum=google.protobuf.FieldOptions_OptionTargetType" json:"targets,omitempty"` EditionDefaults []*FieldOptions_EditionDefault `protobuf:"bytes,20,rep,name=edition_defaults,json=editionDefaults" json:"edition_defaults,omitempty"` // Any features defined in the specific edition. + // WARNING: This field should only be used by protobuf plugins or special + // cases like the proto compiler. Other uses are discouraged and + // developers should rely on the protoreflect APIs for their client language. Features *FeatureSet `protobuf:"bytes,21,opt,name=features" json:"features,omitempty"` FeatureSupport *FieldOptions_FeatureSupport `protobuf:"bytes,22,opt,name=feature_support,json=featureSupport" json:"feature_support,omitempty"` // The parser stores options it doesn't recognize here. See above. UninterpretedOption []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"` + extensionFields protoimpl.ExtensionFields + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } // Default values for FieldOptions fields. @@ -2707,11 +2914,9 @@ const ( func (x *FieldOptions) Reset() { *x = FieldOptions{} - if protoimpl.UnsafeEnabled { - mi := &file_google_protobuf_descriptor_proto_msgTypes[12] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_google_protobuf_descriptor_proto_msgTypes[12] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *FieldOptions) String() string { @@ -2722,7 +2927,7 @@ func (*FieldOptions) ProtoMessage() {} func (x *FieldOptions) ProtoReflect() protoreflect.Message { mi := &file_google_protobuf_descriptor_proto_msgTypes[12] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2779,6 +2984,7 @@ func (x *FieldOptions) GetDeprecated() bool { return Default_FieldOptions_Deprecated } +// Deprecated: Marked as deprecated in google/protobuf/descriptor.proto. func (x *FieldOptions) GetWeak() bool { if x != nil && x.Weak != nil { return *x.Weak @@ -2836,24 +3042,24 @@ func (x *FieldOptions) GetUninterpretedOption() []*UninterpretedOption { } type OneofOptions struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - extensionFields protoimpl.ExtensionFields - + state protoimpl.MessageState `protogen:"open.v1"` // Any features defined in the specific edition. + // WARNING: This field should only be used by protobuf plugins or special + // cases like the proto compiler. Other uses are discouraged and + // developers should rely on the protoreflect APIs for their client language. Features *FeatureSet `protobuf:"bytes,1,opt,name=features" json:"features,omitempty"` // The parser stores options it doesn't recognize here. See above. UninterpretedOption []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"` + extensionFields protoimpl.ExtensionFields + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *OneofOptions) Reset() { *x = OneofOptions{} - if protoimpl.UnsafeEnabled { - mi := &file_google_protobuf_descriptor_proto_msgTypes[13] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_google_protobuf_descriptor_proto_msgTypes[13] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *OneofOptions) String() string { @@ -2864,7 +3070,7 @@ func (*OneofOptions) ProtoMessage() {} func (x *OneofOptions) ProtoReflect() protoreflect.Message { mi := &file_google_protobuf_descriptor_proto_msgTypes[13] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2894,11 +3100,7 @@ func (x *OneofOptions) GetUninterpretedOption() []*UninterpretedOption { } type EnumOptions struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - extensionFields protoimpl.ExtensionFields - + state protoimpl.MessageState `protogen:"open.v1"` // Set this option to true to allow mapping different tag names to the same // value. AllowAlias *bool `protobuf:"varint,2,opt,name=allow_alias,json=allowAlias" json:"allow_alias,omitempty"` @@ -2917,9 +3119,15 @@ type EnumOptions struct { // Deprecated: Marked as deprecated in google/protobuf/descriptor.proto. DeprecatedLegacyJsonFieldConflicts *bool `protobuf:"varint,6,opt,name=deprecated_legacy_json_field_conflicts,json=deprecatedLegacyJsonFieldConflicts" json:"deprecated_legacy_json_field_conflicts,omitempty"` // Any features defined in the specific edition. + // WARNING: This field should only be used by protobuf plugins or special + // cases like the proto compiler. Other uses are discouraged and + // developers should rely on the protoreflect APIs for their client language. Features *FeatureSet `protobuf:"bytes,7,opt,name=features" json:"features,omitempty"` // The parser stores options it doesn't recognize here. See above. UninterpretedOption []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"` + extensionFields protoimpl.ExtensionFields + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } // Default values for EnumOptions fields. @@ -2929,11 +3137,9 @@ const ( func (x *EnumOptions) Reset() { *x = EnumOptions{} - if protoimpl.UnsafeEnabled { - mi := &file_google_protobuf_descriptor_proto_msgTypes[14] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_google_protobuf_descriptor_proto_msgTypes[14] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *EnumOptions) String() string { @@ -2944,7 +3150,7 @@ func (*EnumOptions) ProtoMessage() {} func (x *EnumOptions) ProtoReflect() protoreflect.Message { mi := &file_google_protobuf_descriptor_proto_msgTypes[14] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -2996,17 +3202,16 @@ func (x *EnumOptions) GetUninterpretedOption() []*UninterpretedOption { } type EnumValueOptions struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - extensionFields protoimpl.ExtensionFields - + state protoimpl.MessageState `protogen:"open.v1"` // Is this enum value deprecated? // Depending on the target platform, this can emit Deprecated annotations // for the enum value, or it will be completely ignored; in the very least, // this is a formalization for deprecating enum values. Deprecated *bool `protobuf:"varint,1,opt,name=deprecated,def=0" json:"deprecated,omitempty"` // Any features defined in the specific edition. + // WARNING: This field should only be used by protobuf plugins or special + // cases like the proto compiler. Other uses are discouraged and + // developers should rely on the protoreflect APIs for their client language. Features *FeatureSet `protobuf:"bytes,2,opt,name=features" json:"features,omitempty"` // Indicate that fields annotated with this enum value should not be printed // out when using debug formats, e.g. when the field contains sensitive @@ -3016,6 +3221,9 @@ type EnumValueOptions struct { FeatureSupport *FieldOptions_FeatureSupport `protobuf:"bytes,4,opt,name=feature_support,json=featureSupport" json:"feature_support,omitempty"` // The parser stores options it doesn't recognize here. See above. UninterpretedOption []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"` + extensionFields protoimpl.ExtensionFields + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } // Default values for EnumValueOptions fields. @@ -3026,11 +3234,9 @@ const ( func (x *EnumValueOptions) Reset() { *x = EnumValueOptions{} - if protoimpl.UnsafeEnabled { - mi := &file_google_protobuf_descriptor_proto_msgTypes[15] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_google_protobuf_descriptor_proto_msgTypes[15] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *EnumValueOptions) String() string { @@ -3041,7 +3247,7 @@ func (*EnumValueOptions) ProtoMessage() {} func (x *EnumValueOptions) ProtoReflect() protoreflect.Message { mi := &file_google_protobuf_descriptor_proto_msgTypes[15] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -3092,12 +3298,11 @@ func (x *EnumValueOptions) GetUninterpretedOption() []*UninterpretedOption { } type ServiceOptions struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - extensionFields protoimpl.ExtensionFields - + state protoimpl.MessageState `protogen:"open.v1"` // Any features defined in the specific edition. + // WARNING: This field should only be used by protobuf plugins or special + // cases like the proto compiler. Other uses are discouraged and + // developers should rely on the protoreflect APIs for their client language. Features *FeatureSet `protobuf:"bytes,34,opt,name=features" json:"features,omitempty"` // Is this service deprecated? // Depending on the target platform, this can emit Deprecated annotations @@ -3106,6 +3311,9 @@ type ServiceOptions struct { Deprecated *bool `protobuf:"varint,33,opt,name=deprecated,def=0" json:"deprecated,omitempty"` // The parser stores options it doesn't recognize here. See above. UninterpretedOption []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"` + extensionFields protoimpl.ExtensionFields + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } // Default values for ServiceOptions fields. @@ -3115,11 +3323,9 @@ const ( func (x *ServiceOptions) Reset() { *x = ServiceOptions{} - if protoimpl.UnsafeEnabled { - mi := &file_google_protobuf_descriptor_proto_msgTypes[16] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_google_protobuf_descriptor_proto_msgTypes[16] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ServiceOptions) String() string { @@ -3130,7 +3336,7 @@ func (*ServiceOptions) ProtoMessage() {} func (x *ServiceOptions) ProtoReflect() protoreflect.Message { mi := &file_google_protobuf_descriptor_proto_msgTypes[16] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -3167,11 +3373,7 @@ func (x *ServiceOptions) GetUninterpretedOption() []*UninterpretedOption { } type MethodOptions struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - extensionFields protoimpl.ExtensionFields - + state protoimpl.MessageState `protogen:"open.v1"` // Is this method deprecated? // Depending on the target platform, this can emit Deprecated annotations // for the method, or it will be completely ignored; in the very least, @@ -3179,9 +3381,15 @@ type MethodOptions struct { Deprecated *bool `protobuf:"varint,33,opt,name=deprecated,def=0" json:"deprecated,omitempty"` IdempotencyLevel *MethodOptions_IdempotencyLevel `protobuf:"varint,34,opt,name=idempotency_level,json=idempotencyLevel,enum=google.protobuf.MethodOptions_IdempotencyLevel,def=0" json:"idempotency_level,omitempty"` // Any features defined in the specific edition. + // WARNING: This field should only be used by protobuf plugins or special + // cases like the proto compiler. Other uses are discouraged and + // developers should rely on the protoreflect APIs for their client language. Features *FeatureSet `protobuf:"bytes,35,opt,name=features" json:"features,omitempty"` // The parser stores options it doesn't recognize here. See above. UninterpretedOption []*UninterpretedOption `protobuf:"bytes,999,rep,name=uninterpreted_option,json=uninterpretedOption" json:"uninterpreted_option,omitempty"` + extensionFields protoimpl.ExtensionFields + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } // Default values for MethodOptions fields. @@ -3192,11 +3400,9 @@ const ( func (x *MethodOptions) Reset() { *x = MethodOptions{} - if protoimpl.UnsafeEnabled { - mi := &file_google_protobuf_descriptor_proto_msgTypes[17] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_google_protobuf_descriptor_proto_msgTypes[17] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *MethodOptions) String() string { @@ -3207,7 +3413,7 @@ func (*MethodOptions) ProtoMessage() {} func (x *MethodOptions) ProtoReflect() protoreflect.Message { mi := &file_google_protobuf_descriptor_proto_msgTypes[17] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -3257,11 +3463,8 @@ func (x *MethodOptions) GetUninterpretedOption() []*UninterpretedOption { // or produced by Descriptor::CopyTo()) will never have UninterpretedOptions // in them. type UninterpretedOption struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Name []*UninterpretedOption_NamePart `protobuf:"bytes,2,rep,name=name" json:"name,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Name []*UninterpretedOption_NamePart `protobuf:"bytes,2,rep,name=name" json:"name,omitempty"` // The value of the uninterpreted option, in whatever type the tokenizer // identified it as during parsing. Exactly one of these should be set. IdentifierValue *string `protobuf:"bytes,3,opt,name=identifier_value,json=identifierValue" json:"identifier_value,omitempty"` @@ -3270,15 +3473,15 @@ type UninterpretedOption struct { DoubleValue *float64 `protobuf:"fixed64,6,opt,name=double_value,json=doubleValue" json:"double_value,omitempty"` StringValue []byte `protobuf:"bytes,7,opt,name=string_value,json=stringValue" json:"string_value,omitempty"` AggregateValue *string `protobuf:"bytes,8,opt,name=aggregate_value,json=aggregateValue" json:"aggregate_value,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *UninterpretedOption) Reset() { *x = UninterpretedOption{} - if protoimpl.UnsafeEnabled { - mi := &file_google_protobuf_descriptor_proto_msgTypes[18] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_google_protobuf_descriptor_proto_msgTypes[18] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *UninterpretedOption) String() string { @@ -3289,7 +3492,7 @@ func (*UninterpretedOption) ProtoMessage() {} func (x *UninterpretedOption) ProtoReflect() protoreflect.Message { mi := &file_google_protobuf_descriptor_proto_msgTypes[18] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -3360,26 +3563,25 @@ func (x *UninterpretedOption) GetAggregateValue() string { // be designed and implemented to handle this, hopefully before we ever hit a // conflict here. type FeatureSet struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - extensionFields protoimpl.ExtensionFields - - FieldPresence *FeatureSet_FieldPresence `protobuf:"varint,1,opt,name=field_presence,json=fieldPresence,enum=google.protobuf.FeatureSet_FieldPresence" json:"field_presence,omitempty"` - EnumType *FeatureSet_EnumType `protobuf:"varint,2,opt,name=enum_type,json=enumType,enum=google.protobuf.FeatureSet_EnumType" json:"enum_type,omitempty"` - RepeatedFieldEncoding *FeatureSet_RepeatedFieldEncoding `protobuf:"varint,3,opt,name=repeated_field_encoding,json=repeatedFieldEncoding,enum=google.protobuf.FeatureSet_RepeatedFieldEncoding" json:"repeated_field_encoding,omitempty"` - Utf8Validation *FeatureSet_Utf8Validation `protobuf:"varint,4,opt,name=utf8_validation,json=utf8Validation,enum=google.protobuf.FeatureSet_Utf8Validation" json:"utf8_validation,omitempty"` - MessageEncoding *FeatureSet_MessageEncoding `protobuf:"varint,5,opt,name=message_encoding,json=messageEncoding,enum=google.protobuf.FeatureSet_MessageEncoding" json:"message_encoding,omitempty"` - JsonFormat *FeatureSet_JsonFormat `protobuf:"varint,6,opt,name=json_format,json=jsonFormat,enum=google.protobuf.FeatureSet_JsonFormat" json:"json_format,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + FieldPresence *FeatureSet_FieldPresence `protobuf:"varint,1,opt,name=field_presence,json=fieldPresence,enum=google.protobuf.FeatureSet_FieldPresence" json:"field_presence,omitempty"` + EnumType *FeatureSet_EnumType `protobuf:"varint,2,opt,name=enum_type,json=enumType,enum=google.protobuf.FeatureSet_EnumType" json:"enum_type,omitempty"` + RepeatedFieldEncoding *FeatureSet_RepeatedFieldEncoding `protobuf:"varint,3,opt,name=repeated_field_encoding,json=repeatedFieldEncoding,enum=google.protobuf.FeatureSet_RepeatedFieldEncoding" json:"repeated_field_encoding,omitempty"` + Utf8Validation *FeatureSet_Utf8Validation `protobuf:"varint,4,opt,name=utf8_validation,json=utf8Validation,enum=google.protobuf.FeatureSet_Utf8Validation" json:"utf8_validation,omitempty"` + MessageEncoding *FeatureSet_MessageEncoding `protobuf:"varint,5,opt,name=message_encoding,json=messageEncoding,enum=google.protobuf.FeatureSet_MessageEncoding" json:"message_encoding,omitempty"` + JsonFormat *FeatureSet_JsonFormat `protobuf:"varint,6,opt,name=json_format,json=jsonFormat,enum=google.protobuf.FeatureSet_JsonFormat" json:"json_format,omitempty"` + EnforceNamingStyle *FeatureSet_EnforceNamingStyle `protobuf:"varint,7,opt,name=enforce_naming_style,json=enforceNamingStyle,enum=google.protobuf.FeatureSet_EnforceNamingStyle" json:"enforce_naming_style,omitempty"` + DefaultSymbolVisibility *FeatureSet_VisibilityFeature_DefaultSymbolVisibility `protobuf:"varint,8,opt,name=default_symbol_visibility,json=defaultSymbolVisibility,enum=google.protobuf.FeatureSet_VisibilityFeature_DefaultSymbolVisibility" json:"default_symbol_visibility,omitempty"` + extensionFields protoimpl.ExtensionFields + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *FeatureSet) Reset() { *x = FeatureSet{} - if protoimpl.UnsafeEnabled { - mi := &file_google_protobuf_descriptor_proto_msgTypes[19] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_google_protobuf_descriptor_proto_msgTypes[19] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *FeatureSet) String() string { @@ -3390,7 +3592,7 @@ func (*FeatureSet) ProtoMessage() {} func (x *FeatureSet) ProtoReflect() protoreflect.Message { mi := &file_google_protobuf_descriptor_proto_msgTypes[19] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -3447,15 +3649,26 @@ func (x *FeatureSet) GetJsonFormat() FeatureSet_JsonFormat { return FeatureSet_JSON_FORMAT_UNKNOWN } +func (x *FeatureSet) GetEnforceNamingStyle() FeatureSet_EnforceNamingStyle { + if x != nil && x.EnforceNamingStyle != nil { + return *x.EnforceNamingStyle + } + return FeatureSet_ENFORCE_NAMING_STYLE_UNKNOWN +} + +func (x *FeatureSet) GetDefaultSymbolVisibility() FeatureSet_VisibilityFeature_DefaultSymbolVisibility { + if x != nil && x.DefaultSymbolVisibility != nil { + return *x.DefaultSymbolVisibility + } + return FeatureSet_VisibilityFeature_DEFAULT_SYMBOL_VISIBILITY_UNKNOWN +} + // A compiled specification for the defaults of a set of features. These // messages are generated from FeatureSet extensions and can be used to seed // feature resolution. The resolution with this object becomes a simple search // for the closest matching edition, followed by proto merges. type FeatureSetDefaults struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` Defaults []*FeatureSetDefaults_FeatureSetEditionDefault `protobuf:"bytes,1,rep,name=defaults" json:"defaults,omitempty"` // The minimum supported edition (inclusive) when this was constructed. // Editions before this will not have defaults. @@ -3463,15 +3676,15 @@ type FeatureSetDefaults struct { // The maximum known edition (inclusive) when this was constructed. Editions // after this will not have reliable defaults. MaximumEdition *Edition `protobuf:"varint,5,opt,name=maximum_edition,json=maximumEdition,enum=google.protobuf.Edition" json:"maximum_edition,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *FeatureSetDefaults) Reset() { *x = FeatureSetDefaults{} - if protoimpl.UnsafeEnabled { - mi := &file_google_protobuf_descriptor_proto_msgTypes[20] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_google_protobuf_descriptor_proto_msgTypes[20] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *FeatureSetDefaults) String() string { @@ -3482,7 +3695,7 @@ func (*FeatureSetDefaults) ProtoMessage() {} func (x *FeatureSetDefaults) ProtoReflect() protoreflect.Message { mi := &file_google_protobuf_descriptor_proto_msgTypes[20] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -3521,10 +3734,7 @@ func (x *FeatureSetDefaults) GetMaximumEdition() Edition { // Encapsulates information about the original source file from which a // FileDescriptorProto was generated. type SourceCodeInfo struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` // A Location identifies a piece of source code in a .proto file which // corresponds to a particular definition. This information is intended // to be useful to IDEs, code indexers, documentation generators, and similar @@ -3573,16 +3783,17 @@ type SourceCodeInfo struct { // - Code which tries to interpret locations should probably be designed to // ignore those that it doesn't understand, as more types of locations could // be recorded in the future. - Location []*SourceCodeInfo_Location `protobuf:"bytes,1,rep,name=location" json:"location,omitempty"` + Location []*SourceCodeInfo_Location `protobuf:"bytes,1,rep,name=location" json:"location,omitempty"` + extensionFields protoimpl.ExtensionFields + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *SourceCodeInfo) Reset() { *x = SourceCodeInfo{} - if protoimpl.UnsafeEnabled { - mi := &file_google_protobuf_descriptor_proto_msgTypes[21] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_google_protobuf_descriptor_proto_msgTypes[21] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *SourceCodeInfo) String() string { @@ -3593,7 +3804,7 @@ func (*SourceCodeInfo) ProtoMessage() {} func (x *SourceCodeInfo) ProtoReflect() protoreflect.Message { mi := &file_google_protobuf_descriptor_proto_msgTypes[21] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -3619,22 +3830,19 @@ func (x *SourceCodeInfo) GetLocation() []*SourceCodeInfo_Location { // file. A GeneratedCodeInfo message is associated with only one generated // source file, but may contain references to different source .proto files. type GeneratedCodeInfo struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` // An Annotation connects some span of text in generated code to an element // of its generating .proto file. - Annotation []*GeneratedCodeInfo_Annotation `protobuf:"bytes,1,rep,name=annotation" json:"annotation,omitempty"` + Annotation []*GeneratedCodeInfo_Annotation `protobuf:"bytes,1,rep,name=annotation" json:"annotation,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *GeneratedCodeInfo) Reset() { *x = GeneratedCodeInfo{} - if protoimpl.UnsafeEnabled { - mi := &file_google_protobuf_descriptor_proto_msgTypes[22] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_google_protobuf_descriptor_proto_msgTypes[22] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GeneratedCodeInfo) String() string { @@ -3645,7 +3853,7 @@ func (*GeneratedCodeInfo) ProtoMessage() {} func (x *GeneratedCodeInfo) ProtoReflect() protoreflect.Message { mi := &file_google_protobuf_descriptor_proto_msgTypes[22] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -3668,22 +3876,19 @@ func (x *GeneratedCodeInfo) GetAnnotation() []*GeneratedCodeInfo_Annotation { } type DescriptorProto_ExtensionRange struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Start *int32 `protobuf:"varint,1,opt,name=start" json:"start,omitempty"` // Inclusive. + End *int32 `protobuf:"varint,2,opt,name=end" json:"end,omitempty"` // Exclusive. + Options *ExtensionRangeOptions `protobuf:"bytes,3,opt,name=options" json:"options,omitempty"` unknownFields protoimpl.UnknownFields - - Start *int32 `protobuf:"varint,1,opt,name=start" json:"start,omitempty"` // Inclusive. - End *int32 `protobuf:"varint,2,opt,name=end" json:"end,omitempty"` // Exclusive. - Options *ExtensionRangeOptions `protobuf:"bytes,3,opt,name=options" json:"options,omitempty"` + sizeCache protoimpl.SizeCache } func (x *DescriptorProto_ExtensionRange) Reset() { *x = DescriptorProto_ExtensionRange{} - if protoimpl.UnsafeEnabled { - mi := &file_google_protobuf_descriptor_proto_msgTypes[23] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_google_protobuf_descriptor_proto_msgTypes[23] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *DescriptorProto_ExtensionRange) String() string { @@ -3694,7 +3899,7 @@ func (*DescriptorProto_ExtensionRange) ProtoMessage() {} func (x *DescriptorProto_ExtensionRange) ProtoReflect() protoreflect.Message { mi := &file_google_protobuf_descriptor_proto_msgTypes[23] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -3734,21 +3939,18 @@ func (x *DescriptorProto_ExtensionRange) GetOptions() *ExtensionRangeOptions { // fields or extension ranges in the same message. Reserved ranges may // not overlap. type DescriptorProto_ReservedRange struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Start *int32 `protobuf:"varint,1,opt,name=start" json:"start,omitempty"` // Inclusive. + End *int32 `protobuf:"varint,2,opt,name=end" json:"end,omitempty"` // Exclusive. unknownFields protoimpl.UnknownFields - - Start *int32 `protobuf:"varint,1,opt,name=start" json:"start,omitempty"` // Inclusive. - End *int32 `protobuf:"varint,2,opt,name=end" json:"end,omitempty"` // Exclusive. + sizeCache protoimpl.SizeCache } func (x *DescriptorProto_ReservedRange) Reset() { *x = DescriptorProto_ReservedRange{} - if protoimpl.UnsafeEnabled { - mi := &file_google_protobuf_descriptor_proto_msgTypes[24] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_google_protobuf_descriptor_proto_msgTypes[24] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *DescriptorProto_ReservedRange) String() string { @@ -3759,7 +3961,7 @@ func (*DescriptorProto_ReservedRange) ProtoMessage() {} func (x *DescriptorProto_ReservedRange) ProtoReflect() protoreflect.Message { mi := &file_google_protobuf_descriptor_proto_msgTypes[24] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -3789,10 +3991,7 @@ func (x *DescriptorProto_ReservedRange) GetEnd() int32 { } type ExtensionRangeOptions_Declaration struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` // The extension number declared within the extension range. Number *int32 `protobuf:"varint,1,opt,name=number" json:"number,omitempty"` // The fully-qualified name of the extension field. There must be a leading @@ -3808,16 +4007,16 @@ type ExtensionRangeOptions_Declaration struct { Reserved *bool `protobuf:"varint,5,opt,name=reserved" json:"reserved,omitempty"` // If true, indicates that the extension must be defined as repeated. // Otherwise the extension must be defined as optional. - Repeated *bool `protobuf:"varint,6,opt,name=repeated" json:"repeated,omitempty"` + Repeated *bool `protobuf:"varint,6,opt,name=repeated" json:"repeated,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *ExtensionRangeOptions_Declaration) Reset() { *x = ExtensionRangeOptions_Declaration{} - if protoimpl.UnsafeEnabled { - mi := &file_google_protobuf_descriptor_proto_msgTypes[25] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_google_protobuf_descriptor_proto_msgTypes[25] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *ExtensionRangeOptions_Declaration) String() string { @@ -3828,7 +4027,7 @@ func (*ExtensionRangeOptions_Declaration) ProtoMessage() {} func (x *ExtensionRangeOptions_Declaration) ProtoReflect() protoreflect.Message { mi := &file_google_protobuf_descriptor_proto_msgTypes[25] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -3885,21 +4084,18 @@ func (x *ExtensionRangeOptions_Declaration) GetRepeated() bool { // is inclusive such that it can appropriately represent the entire int32 // domain. type EnumDescriptorProto_EnumReservedRange struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Start *int32 `protobuf:"varint,1,opt,name=start" json:"start,omitempty"` // Inclusive. + End *int32 `protobuf:"varint,2,opt,name=end" json:"end,omitempty"` // Inclusive. unknownFields protoimpl.UnknownFields - - Start *int32 `protobuf:"varint,1,opt,name=start" json:"start,omitempty"` // Inclusive. - End *int32 `protobuf:"varint,2,opt,name=end" json:"end,omitempty"` // Inclusive. + sizeCache protoimpl.SizeCache } func (x *EnumDescriptorProto_EnumReservedRange) Reset() { *x = EnumDescriptorProto_EnumReservedRange{} - if protoimpl.UnsafeEnabled { - mi := &file_google_protobuf_descriptor_proto_msgTypes[26] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_google_protobuf_descriptor_proto_msgTypes[26] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *EnumDescriptorProto_EnumReservedRange) String() string { @@ -3910,7 +4106,7 @@ func (*EnumDescriptorProto_EnumReservedRange) ProtoMessage() {} func (x *EnumDescriptorProto_EnumReservedRange) ProtoReflect() protoreflect.Message { mi := &file_google_protobuf_descriptor_proto_msgTypes[26] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -3940,21 +4136,18 @@ func (x *EnumDescriptorProto_EnumReservedRange) GetEnd() int32 { } type FieldOptions_EditionDefault struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + Edition *Edition `protobuf:"varint,3,opt,name=edition,enum=google.protobuf.Edition" json:"edition,omitempty"` + Value *string `protobuf:"bytes,2,opt,name=value" json:"value,omitempty"` // Textproto value. unknownFields protoimpl.UnknownFields - - Edition *Edition `protobuf:"varint,3,opt,name=edition,enum=google.protobuf.Edition" json:"edition,omitempty"` - Value *string `protobuf:"bytes,2,opt,name=value" json:"value,omitempty"` // Textproto value. + sizeCache protoimpl.SizeCache } func (x *FieldOptions_EditionDefault) Reset() { *x = FieldOptions_EditionDefault{} - if protoimpl.UnsafeEnabled { - mi := &file_google_protobuf_descriptor_proto_msgTypes[27] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_google_protobuf_descriptor_proto_msgTypes[27] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *FieldOptions_EditionDefault) String() string { @@ -3965,7 +4158,7 @@ func (*FieldOptions_EditionDefault) ProtoMessage() {} func (x *FieldOptions_EditionDefault) ProtoReflect() protoreflect.Message { mi := &file_google_protobuf_descriptor_proto_msgTypes[27] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -3996,10 +4189,7 @@ func (x *FieldOptions_EditionDefault) GetValue() string { // Information about the support window of a feature. type FieldOptions_FeatureSupport struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` // The edition that this feature was first available in. In editions // earlier than this one, the default assigned to EDITION_LEGACY will be // used, and proto files will not be able to override it. @@ -4014,15 +4204,15 @@ type FieldOptions_FeatureSupport struct { // this one, the last default assigned will be used, and proto files will // not be able to override it. EditionRemoved *Edition `protobuf:"varint,4,opt,name=edition_removed,json=editionRemoved,enum=google.protobuf.Edition" json:"edition_removed,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *FieldOptions_FeatureSupport) Reset() { *x = FieldOptions_FeatureSupport{} - if protoimpl.UnsafeEnabled { - mi := &file_google_protobuf_descriptor_proto_msgTypes[28] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_google_protobuf_descriptor_proto_msgTypes[28] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *FieldOptions_FeatureSupport) String() string { @@ -4033,7 +4223,7 @@ func (*FieldOptions_FeatureSupport) ProtoMessage() {} func (x *FieldOptions_FeatureSupport) ProtoReflect() protoreflect.Message { mi := &file_google_protobuf_descriptor_proto_msgTypes[28] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -4082,21 +4272,18 @@ func (x *FieldOptions_FeatureSupport) GetEditionRemoved() Edition { // E.g.,{ ["foo", false], ["bar.baz", true], ["moo", false] } represents // "foo.(bar.baz).moo". type UninterpretedOption_NamePart struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` + NamePart *string `protobuf:"bytes,1,req,name=name_part,json=namePart" json:"name_part,omitempty"` + IsExtension *bool `protobuf:"varint,2,req,name=is_extension,json=isExtension" json:"is_extension,omitempty"` unknownFields protoimpl.UnknownFields - - NamePart *string `protobuf:"bytes,1,req,name=name_part,json=namePart" json:"name_part,omitempty"` - IsExtension *bool `protobuf:"varint,2,req,name=is_extension,json=isExtension" json:"is_extension,omitempty"` + sizeCache protoimpl.SizeCache } func (x *UninterpretedOption_NamePart) Reset() { *x = UninterpretedOption_NamePart{} - if protoimpl.UnsafeEnabled { - mi := &file_google_protobuf_descriptor_proto_msgTypes[29] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_google_protobuf_descriptor_proto_msgTypes[29] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *UninterpretedOption_NamePart) String() string { @@ -4107,7 +4294,7 @@ func (*UninterpretedOption_NamePart) ProtoMessage() {} func (x *UninterpretedOption_NamePart) ProtoReflect() protoreflect.Message { mi := &file_google_protobuf_descriptor_proto_msgTypes[29] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -4136,29 +4323,62 @@ func (x *UninterpretedOption_NamePart) GetIsExtension() bool { return false } +type FeatureSet_VisibilityFeature struct { + state protoimpl.MessageState `protogen:"open.v1"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache +} + +func (x *FeatureSet_VisibilityFeature) Reset() { + *x = FeatureSet_VisibilityFeature{} + mi := &file_google_protobuf_descriptor_proto_msgTypes[30] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) +} + +func (x *FeatureSet_VisibilityFeature) String() string { + return protoimpl.X.MessageStringOf(x) +} + +func (*FeatureSet_VisibilityFeature) ProtoMessage() {} + +func (x *FeatureSet_VisibilityFeature) ProtoReflect() protoreflect.Message { + mi := &file_google_protobuf_descriptor_proto_msgTypes[30] + if x != nil { + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + if ms.LoadMessageInfo() == nil { + ms.StoreMessageInfo(mi) + } + return ms + } + return mi.MessageOf(x) +} + +// Deprecated: Use FeatureSet_VisibilityFeature.ProtoReflect.Descriptor instead. +func (*FeatureSet_VisibilityFeature) Descriptor() ([]byte, []int) { + return file_google_protobuf_descriptor_proto_rawDescGZIP(), []int{19, 0} +} + // A map from every known edition with a unique set of defaults to its // defaults. Not all editions may be contained here. For a given edition, // the defaults at the closest matching edition ordered at or before it should // be used. This field must be in strict ascending order by edition. type FeatureSetDefaults_FeatureSetEditionDefault struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - Edition *Edition `protobuf:"varint,3,opt,name=edition,enum=google.protobuf.Edition" json:"edition,omitempty"` + state protoimpl.MessageState `protogen:"open.v1"` + Edition *Edition `protobuf:"varint,3,opt,name=edition,enum=google.protobuf.Edition" json:"edition,omitempty"` // Defaults of features that can be overridden in this edition. OverridableFeatures *FeatureSet `protobuf:"bytes,4,opt,name=overridable_features,json=overridableFeatures" json:"overridable_features,omitempty"` // Defaults of features that can't be overridden in this edition. FixedFeatures *FeatureSet `protobuf:"bytes,5,opt,name=fixed_features,json=fixedFeatures" json:"fixed_features,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *FeatureSetDefaults_FeatureSetEditionDefault) Reset() { *x = FeatureSetDefaults_FeatureSetEditionDefault{} - if protoimpl.UnsafeEnabled { - mi := &file_google_protobuf_descriptor_proto_msgTypes[30] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_google_protobuf_descriptor_proto_msgTypes[31] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *FeatureSetDefaults_FeatureSetEditionDefault) String() string { @@ -4168,8 +4388,8 @@ func (x *FeatureSetDefaults_FeatureSetEditionDefault) String() string { func (*FeatureSetDefaults_FeatureSetEditionDefault) ProtoMessage() {} func (x *FeatureSetDefaults_FeatureSetEditionDefault) ProtoReflect() protoreflect.Message { - mi := &file_google_protobuf_descriptor_proto_msgTypes[30] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_google_protobuf_descriptor_proto_msgTypes[31] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -4206,10 +4426,7 @@ func (x *FeatureSetDefaults_FeatureSetEditionDefault) GetFixedFeatures() *Featur } type SourceCodeInfo_Location struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` // Identifies which part of the FileDescriptorProto was defined at this // location. // @@ -4301,15 +4518,15 @@ type SourceCodeInfo_Location struct { LeadingComments *string `protobuf:"bytes,3,opt,name=leading_comments,json=leadingComments" json:"leading_comments,omitempty"` TrailingComments *string `protobuf:"bytes,4,opt,name=trailing_comments,json=trailingComments" json:"trailing_comments,omitempty"` LeadingDetachedComments []string `protobuf:"bytes,6,rep,name=leading_detached_comments,json=leadingDetachedComments" json:"leading_detached_comments,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *SourceCodeInfo_Location) Reset() { *x = SourceCodeInfo_Location{} - if protoimpl.UnsafeEnabled { - mi := &file_google_protobuf_descriptor_proto_msgTypes[31] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_google_protobuf_descriptor_proto_msgTypes[32] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *SourceCodeInfo_Location) String() string { @@ -4319,8 +4536,8 @@ func (x *SourceCodeInfo_Location) String() string { func (*SourceCodeInfo_Location) ProtoMessage() {} func (x *SourceCodeInfo_Location) ProtoReflect() protoreflect.Message { - mi := &file_google_protobuf_descriptor_proto_msgTypes[31] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_google_protobuf_descriptor_proto_msgTypes[32] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -4371,10 +4588,7 @@ func (x *SourceCodeInfo_Location) GetLeadingDetachedComments() []string { } type GeneratedCodeInfo_Annotation struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` // Identifies the element in the original source .proto file. This field // is formatted the same as SourceCodeInfo.Location.path. Path []int32 `protobuf:"varint,1,rep,packed,name=path" json:"path,omitempty"` @@ -4386,17 +4600,17 @@ type GeneratedCodeInfo_Annotation struct { // Identifies the ending offset in bytes in the generated code that // relates to the identified object. The end offset should be one past // the last relevant byte (so the length of the text = end - begin). - End *int32 `protobuf:"varint,4,opt,name=end" json:"end,omitempty"` - Semantic *GeneratedCodeInfo_Annotation_Semantic `protobuf:"varint,5,opt,name=semantic,enum=google.protobuf.GeneratedCodeInfo_Annotation_Semantic" json:"semantic,omitempty"` + End *int32 `protobuf:"varint,4,opt,name=end" json:"end,omitempty"` + Semantic *GeneratedCodeInfo_Annotation_Semantic `protobuf:"varint,5,opt,name=semantic,enum=google.protobuf.GeneratedCodeInfo_Annotation_Semantic" json:"semantic,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *GeneratedCodeInfo_Annotation) Reset() { *x = GeneratedCodeInfo_Annotation{} - if protoimpl.UnsafeEnabled { - mi := &file_google_protobuf_descriptor_proto_msgTypes[32] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_google_protobuf_descriptor_proto_msgTypes[33] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GeneratedCodeInfo_Annotation) String() string { @@ -4406,8 +4620,8 @@ func (x *GeneratedCodeInfo_Annotation) String() string { func (*GeneratedCodeInfo_Annotation) ProtoMessage() {} func (x *GeneratedCodeInfo_Annotation) ProtoReflect() protoreflect.Message { - mi := &file_google_protobuf_descriptor_proto_msgTypes[32] - if protoimpl.UnsafeEnabled && x != nil { + mi := &file_google_protobuf_descriptor_proto_msgTypes[33] + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -4459,925 +4673,548 @@ func (x *GeneratedCodeInfo_Annotation) GetSemantic() GeneratedCodeInfo_Annotatio var File_google_protobuf_descriptor_proto protoreflect.FileDescriptor -var file_google_protobuf_descriptor_proto_rawDesc = []byte{ - 0x0a, 0x20, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x12, 0x0f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x22, 0x4d, 0x0a, 0x11, 0x46, 0x69, 0x6c, 0x65, 0x44, 0x65, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x6f, 0x72, 0x53, 0x65, 0x74, 0x12, 0x38, 0x0a, 0x04, 0x66, 0x69, 0x6c, 0x65, - 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x44, 0x65, 0x73, - 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x04, 0x66, 0x69, - 0x6c, 0x65, 0x22, 0x98, 0x05, 0x0a, 0x13, 0x46, 0x69, 0x6c, 0x65, 0x44, 0x65, 0x73, 0x63, 0x72, - 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, - 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x18, - 0x0a, 0x07, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x07, 0x70, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x12, 0x1e, 0x0a, 0x0a, 0x64, 0x65, 0x70, 0x65, - 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x03, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0a, 0x64, 0x65, - 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x79, 0x12, 0x2b, 0x0a, 0x11, 0x70, 0x75, 0x62, 0x6c, - 0x69, 0x63, 0x5f, 0x64, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x0a, 0x20, - 0x03, 0x28, 0x05, 0x52, 0x10, 0x70, 0x75, 0x62, 0x6c, 0x69, 0x63, 0x44, 0x65, 0x70, 0x65, 0x6e, - 0x64, 0x65, 0x6e, 0x63, 0x79, 0x12, 0x27, 0x0a, 0x0f, 0x77, 0x65, 0x61, 0x6b, 0x5f, 0x64, 0x65, - 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x79, 0x18, 0x0b, 0x20, 0x03, 0x28, 0x05, 0x52, 0x0e, - 0x77, 0x65, 0x61, 0x6b, 0x44, 0x65, 0x70, 0x65, 0x6e, 0x64, 0x65, 0x6e, 0x63, 0x79, 0x12, 0x43, - 0x0a, 0x0c, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, - 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x0b, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x54, - 0x79, 0x70, 0x65, 0x12, 0x41, 0x0a, 0x09, 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x74, 0x79, 0x70, 0x65, - 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x44, 0x65, 0x73, - 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x08, 0x65, 0x6e, - 0x75, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x12, 0x41, 0x0a, 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x18, 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x27, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, - 0x65, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, - 0x52, 0x07, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x12, 0x43, 0x0a, 0x09, 0x65, 0x78, 0x74, - 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, - 0x69, 0x65, 0x6c, 0x64, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, - 0x6f, 0x74, 0x6f, 0x52, 0x09, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x36, - 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07, 0x6f, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x49, 0x0a, 0x10, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x5f, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x69, 0x6e, 0x66, 0x6f, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, - 0x6f, 0x52, 0x0e, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, - 0x6f, 0x12, 0x16, 0x0a, 0x06, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x18, 0x0c, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x06, 0x73, 0x79, 0x6e, 0x74, 0x61, 0x78, 0x12, 0x32, 0x0a, 0x07, 0x65, 0x64, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x0e, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x18, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x64, 0x69, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0xb9, 0x06, - 0x0a, 0x0f, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, - 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3b, 0x0a, 0x05, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x18, 0x02, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x44, 0x65, 0x73, 0x63, - 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x05, 0x66, 0x69, 0x65, - 0x6c, 0x64, 0x12, 0x43, 0x0a, 0x09, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x18, - 0x06, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x44, 0x65, 0x73, - 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x09, 0x65, 0x78, - 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x12, 0x41, 0x0a, 0x0b, 0x6e, 0x65, 0x73, 0x74, 0x65, - 0x64, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x20, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, - 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x0a, - 0x6e, 0x65, 0x73, 0x74, 0x65, 0x64, 0x54, 0x79, 0x70, 0x65, 0x12, 0x41, 0x0a, 0x09, 0x65, 0x6e, - 0x75, 0x6d, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x45, 0x6e, 0x75, 0x6d, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, - 0x6f, 0x74, 0x6f, 0x52, 0x08, 0x65, 0x6e, 0x75, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x12, 0x58, 0x0a, - 0x0f, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x61, 0x6e, 0x67, 0x65, - 0x18, 0x05, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, - 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, - 0x6f, 0x6e, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x0e, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, - 0x6f, 0x6e, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x44, 0x0a, 0x0a, 0x6f, 0x6e, 0x65, 0x6f, 0x66, - 0x5f, 0x64, 0x65, 0x63, 0x6c, 0x18, 0x08, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x25, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4f, 0x6e, - 0x65, 0x6f, 0x66, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, - 0x74, 0x6f, 0x52, 0x09, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x44, 0x65, 0x63, 0x6c, 0x12, 0x39, 0x0a, - 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, - 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x55, 0x0a, 0x0e, 0x72, 0x65, 0x73, 0x65, - 0x72, 0x76, 0x65, 0x64, 0x5f, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x18, 0x09, 0x20, 0x03, 0x28, 0x0b, - 0x32, 0x2e, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, - 0x74, 0x6f, 0x2e, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x52, 0x61, 0x6e, 0x67, 0x65, - 0x52, 0x0d, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12, - 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x5f, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x0a, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, - 0x4e, 0x61, 0x6d, 0x65, 0x1a, 0x7a, 0x0a, 0x0e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, - 0x6e, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x10, 0x0a, 0x03, - 0x65, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x65, 0x6e, 0x64, 0x12, 0x40, - 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x26, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x61, 0x6e, 0x67, 0x65, - 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x1a, 0x37, 0x0a, 0x0d, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x52, 0x61, 0x6e, 0x67, - 0x65, 0x12, 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x65, 0x6e, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x05, 0x52, 0x03, 0x65, 0x6e, 0x64, 0x22, 0xcc, 0x04, 0x0a, 0x15, 0x45, 0x78, - 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x4f, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x12, 0x58, 0x0a, 0x14, 0x75, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, - 0x65, 0x74, 0x65, 0x64, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0xe7, 0x07, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, - 0x65, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x75, 0x6e, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x59, 0x0a, - 0x0b, 0x64, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x32, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x52, 0x61, - 0x6e, 0x67, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x44, 0x65, 0x63, 0x6c, 0x61, - 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x03, 0x88, 0x01, 0x02, 0x52, 0x0b, 0x64, 0x65, 0x63, - 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x37, 0x0a, 0x08, 0x66, 0x65, 0x61, 0x74, - 0x75, 0x72, 0x65, 0x73, 0x18, 0x32, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x65, 0x61, - 0x74, 0x75, 0x72, 0x65, 0x53, 0x65, 0x74, 0x52, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, - 0x73, 0x12, 0x6d, 0x0a, 0x0c, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, - 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x38, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, - 0x69, 0x6f, 0x6e, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, - 0x56, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, - 0x65, 0x3a, 0x0a, 0x55, 0x4e, 0x56, 0x45, 0x52, 0x49, 0x46, 0x49, 0x45, 0x44, 0x42, 0x03, 0x88, - 0x01, 0x02, 0x52, 0x0c, 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x1a, 0x94, 0x01, 0x0a, 0x0b, 0x44, 0x65, 0x63, 0x6c, 0x61, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x16, 0x0a, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, - 0x52, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x1b, 0x0a, 0x09, 0x66, 0x75, 0x6c, 0x6c, - 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x66, 0x75, 0x6c, - 0x6c, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x64, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x72, 0x65, 0x73, - 0x65, 0x72, 0x76, 0x65, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, - 0x64, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, - 0x64, 0x4a, 0x04, 0x08, 0x04, 0x10, 0x05, 0x22, 0x34, 0x0a, 0x11, 0x56, 0x65, 0x72, 0x69, 0x66, - 0x69, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x53, 0x74, 0x61, 0x74, 0x65, 0x12, 0x0f, 0x0a, 0x0b, - 0x44, 0x45, 0x43, 0x4c, 0x41, 0x52, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x10, 0x00, 0x12, 0x0e, 0x0a, - 0x0a, 0x55, 0x4e, 0x56, 0x45, 0x52, 0x49, 0x46, 0x49, 0x45, 0x44, 0x10, 0x01, 0x2a, 0x09, 0x08, - 0xe8, 0x07, 0x10, 0x80, 0x80, 0x80, 0x80, 0x02, 0x22, 0xc1, 0x06, 0x0a, 0x14, 0x46, 0x69, 0x65, - 0x6c, 0x64, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, - 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, 0x12, 0x41, 0x0a, - 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2b, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, - 0x69, 0x65, 0x6c, 0x64, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, - 0x6f, 0x74, 0x6f, 0x2e, 0x4c, 0x61, 0x62, 0x65, 0x6c, 0x52, 0x05, 0x6c, 0x61, 0x62, 0x65, 0x6c, - 0x12, 0x3e, 0x0a, 0x04, 0x74, 0x79, 0x70, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2a, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, - 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x54, 0x79, 0x70, 0x65, 0x52, 0x04, 0x74, 0x79, 0x70, 0x65, - 0x12, 0x1b, 0x0a, 0x09, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x06, 0x20, - 0x01, 0x28, 0x09, 0x52, 0x08, 0x74, 0x79, 0x70, 0x65, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x1a, 0x0a, - 0x08, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x65, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x08, 0x65, 0x78, 0x74, 0x65, 0x6e, 0x64, 0x65, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x64, 0x65, 0x66, - 0x61, 0x75, 0x6c, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0c, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x1f, - 0x0a, 0x0b, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x18, 0x09, 0x20, - 0x01, 0x28, 0x05, 0x52, 0x0a, 0x6f, 0x6e, 0x65, 0x6f, 0x66, 0x49, 0x6e, 0x64, 0x65, 0x78, 0x12, - 0x1b, 0x0a, 0x09, 0x6a, 0x73, 0x6f, 0x6e, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x0a, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x08, 0x6a, 0x73, 0x6f, 0x6e, 0x4e, 0x61, 0x6d, 0x65, 0x12, 0x37, 0x0a, 0x07, - 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x08, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07, 0x6f, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x27, 0x0a, 0x0f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x5f, - 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x18, 0x11, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x61, 0x6c, 0x22, 0xb6, - 0x02, 0x0a, 0x04, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0f, 0x0a, 0x0b, 0x54, 0x59, 0x50, 0x45, 0x5f, - 0x44, 0x4f, 0x55, 0x42, 0x4c, 0x45, 0x10, 0x01, 0x12, 0x0e, 0x0a, 0x0a, 0x54, 0x59, 0x50, 0x45, - 0x5f, 0x46, 0x4c, 0x4f, 0x41, 0x54, 0x10, 0x02, 0x12, 0x0e, 0x0a, 0x0a, 0x54, 0x59, 0x50, 0x45, - 0x5f, 0x49, 0x4e, 0x54, 0x36, 0x34, 0x10, 0x03, 0x12, 0x0f, 0x0a, 0x0b, 0x54, 0x59, 0x50, 0x45, - 0x5f, 0x55, 0x49, 0x4e, 0x54, 0x36, 0x34, 0x10, 0x04, 0x12, 0x0e, 0x0a, 0x0a, 0x54, 0x59, 0x50, - 0x45, 0x5f, 0x49, 0x4e, 0x54, 0x33, 0x32, 0x10, 0x05, 0x12, 0x10, 0x0a, 0x0c, 0x54, 0x59, 0x50, - 0x45, 0x5f, 0x46, 0x49, 0x58, 0x45, 0x44, 0x36, 0x34, 0x10, 0x06, 0x12, 0x10, 0x0a, 0x0c, 0x54, - 0x59, 0x50, 0x45, 0x5f, 0x46, 0x49, 0x58, 0x45, 0x44, 0x33, 0x32, 0x10, 0x07, 0x12, 0x0d, 0x0a, - 0x09, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x42, 0x4f, 0x4f, 0x4c, 0x10, 0x08, 0x12, 0x0f, 0x0a, 0x0b, - 0x54, 0x59, 0x50, 0x45, 0x5f, 0x53, 0x54, 0x52, 0x49, 0x4e, 0x47, 0x10, 0x09, 0x12, 0x0e, 0x0a, - 0x0a, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x47, 0x52, 0x4f, 0x55, 0x50, 0x10, 0x0a, 0x12, 0x10, 0x0a, - 0x0c, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4d, 0x45, 0x53, 0x53, 0x41, 0x47, 0x45, 0x10, 0x0b, 0x12, - 0x0e, 0x0a, 0x0a, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x42, 0x59, 0x54, 0x45, 0x53, 0x10, 0x0c, 0x12, - 0x0f, 0x0a, 0x0b, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x49, 0x4e, 0x54, 0x33, 0x32, 0x10, 0x0d, - 0x12, 0x0d, 0x0a, 0x09, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x10, 0x0e, 0x12, - 0x11, 0x0a, 0x0d, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x53, 0x46, 0x49, 0x58, 0x45, 0x44, 0x33, 0x32, - 0x10, 0x0f, 0x12, 0x11, 0x0a, 0x0d, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x53, 0x46, 0x49, 0x58, 0x45, - 0x44, 0x36, 0x34, 0x10, 0x10, 0x12, 0x0f, 0x0a, 0x0b, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x53, 0x49, - 0x4e, 0x54, 0x33, 0x32, 0x10, 0x11, 0x12, 0x0f, 0x0a, 0x0b, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x53, - 0x49, 0x4e, 0x54, 0x36, 0x34, 0x10, 0x12, 0x22, 0x43, 0x0a, 0x05, 0x4c, 0x61, 0x62, 0x65, 0x6c, - 0x12, 0x12, 0x0a, 0x0e, 0x4c, 0x41, 0x42, 0x45, 0x4c, 0x5f, 0x4f, 0x50, 0x54, 0x49, 0x4f, 0x4e, - 0x41, 0x4c, 0x10, 0x01, 0x12, 0x12, 0x0a, 0x0e, 0x4c, 0x41, 0x42, 0x45, 0x4c, 0x5f, 0x52, 0x45, - 0x50, 0x45, 0x41, 0x54, 0x45, 0x44, 0x10, 0x03, 0x12, 0x12, 0x0a, 0x0e, 0x4c, 0x41, 0x42, 0x45, - 0x4c, 0x5f, 0x52, 0x45, 0x51, 0x55, 0x49, 0x52, 0x45, 0x44, 0x10, 0x02, 0x22, 0x63, 0x0a, 0x14, - 0x4f, 0x6e, 0x65, 0x6f, 0x66, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, - 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x37, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4f, 0x6e, 0x65, 0x6f, - 0x66, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x73, 0x22, 0xe3, 0x02, 0x0a, 0x13, 0x45, 0x6e, 0x75, 0x6d, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, - 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3f, 0x0a, - 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x29, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, - 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, - 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x36, - 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, - 0x1c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07, 0x6f, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x5d, 0x0a, 0x0e, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, - 0x65, 0x64, 0x5f, 0x72, 0x61, 0x6e, 0x67, 0x65, 0x18, 0x04, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x36, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, - 0x72, 0x6f, 0x74, 0x6f, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x64, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x52, 0x0d, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, - 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12, 0x23, 0x0a, 0x0d, 0x72, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, - 0x64, 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x05, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0c, 0x72, 0x65, - 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x4e, 0x61, 0x6d, 0x65, 0x1a, 0x3b, 0x0a, 0x11, 0x45, 0x6e, - 0x75, 0x6d, 0x52, 0x65, 0x73, 0x65, 0x72, 0x76, 0x65, 0x64, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x12, - 0x14, 0x0a, 0x05, 0x73, 0x74, 0x61, 0x72, 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, - 0x73, 0x74, 0x61, 0x72, 0x74, 0x12, 0x10, 0x0a, 0x03, 0x65, 0x6e, 0x64, 0x18, 0x02, 0x20, 0x01, - 0x28, 0x05, 0x52, 0x03, 0x65, 0x6e, 0x64, 0x22, 0x83, 0x01, 0x0a, 0x18, 0x45, 0x6e, 0x75, 0x6d, - 0x56, 0x61, 0x6c, 0x75, 0x65, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, - 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x16, 0x0a, 0x06, 0x6e, 0x75, 0x6d, 0x62, - 0x65, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x06, 0x6e, 0x75, 0x6d, 0x62, 0x65, 0x72, - 0x12, 0x3b, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x0b, 0x32, 0x21, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x45, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4f, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0xa7, 0x01, - 0x0a, 0x16, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, - 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x3e, 0x0a, 0x06, - 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x18, 0x02, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x26, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4d, - 0x65, 0x74, 0x68, 0x6f, 0x64, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, - 0x72, 0x6f, 0x74, 0x6f, 0x52, 0x06, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x39, 0x0a, 0x07, - 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1f, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07, - 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x22, 0x89, 0x02, 0x0a, 0x15, 0x4d, 0x65, 0x74, 0x68, - 0x6f, 0x64, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, 0x72, 0x6f, 0x74, - 0x6f, 0x12, 0x12, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, - 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x1d, 0x0a, 0x0a, 0x69, 0x6e, 0x70, 0x75, 0x74, 0x5f, 0x74, - 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x69, 0x6e, 0x70, 0x75, 0x74, - 0x54, 0x79, 0x70, 0x65, 0x12, 0x1f, 0x0a, 0x0b, 0x6f, 0x75, 0x74, 0x70, 0x75, 0x74, 0x5f, 0x74, - 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0a, 0x6f, 0x75, 0x74, 0x70, 0x75, - 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x38, 0x0a, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, - 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1e, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x4f, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x52, 0x07, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, - 0x30, 0x0a, 0x10, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x5f, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, - 0x69, 0x6e, 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, - 0x52, 0x0f, 0x63, 0x6c, 0x69, 0x65, 0x6e, 0x74, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, 0x69, 0x6e, - 0x67, 0x12, 0x30, 0x0a, 0x10, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x5f, 0x73, 0x74, 0x72, 0x65, - 0x61, 0x6d, 0x69, 0x6e, 0x67, 0x18, 0x06, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, - 0x73, 0x65, 0x52, 0x0f, 0x73, 0x65, 0x72, 0x76, 0x65, 0x72, 0x53, 0x74, 0x72, 0x65, 0x61, 0x6d, - 0x69, 0x6e, 0x67, 0x22, 0xad, 0x09, 0x0a, 0x0b, 0x46, 0x69, 0x6c, 0x65, 0x4f, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x12, 0x21, 0x0a, 0x0c, 0x6a, 0x61, 0x76, 0x61, 0x5f, 0x70, 0x61, 0x63, 0x6b, - 0x61, 0x67, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x6a, 0x61, 0x76, 0x61, 0x50, - 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x12, 0x30, 0x0a, 0x14, 0x6a, 0x61, 0x76, 0x61, 0x5f, 0x6f, - 0x75, 0x74, 0x65, 0x72, 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x08, - 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, 0x6a, 0x61, 0x76, 0x61, 0x4f, 0x75, 0x74, 0x65, 0x72, 0x43, - 0x6c, 0x61, 0x73, 0x73, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x35, 0x0a, 0x13, 0x6a, 0x61, 0x76, 0x61, - 0x5f, 0x6d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x73, 0x18, - 0x0a, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x11, 0x6a, 0x61, - 0x76, 0x61, 0x4d, 0x75, 0x6c, 0x74, 0x69, 0x70, 0x6c, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x73, 0x12, - 0x44, 0x0a, 0x1d, 0x6a, 0x61, 0x76, 0x61, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, - 0x5f, 0x65, 0x71, 0x75, 0x61, 0x6c, 0x73, 0x5f, 0x61, 0x6e, 0x64, 0x5f, 0x68, 0x61, 0x73, 0x68, - 0x18, 0x14, 0x20, 0x01, 0x28, 0x08, 0x42, 0x02, 0x18, 0x01, 0x52, 0x19, 0x6a, 0x61, 0x76, 0x61, - 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x45, 0x71, 0x75, 0x61, 0x6c, 0x73, 0x41, 0x6e, - 0x64, 0x48, 0x61, 0x73, 0x68, 0x12, 0x3a, 0x0a, 0x16, 0x6a, 0x61, 0x76, 0x61, 0x5f, 0x73, 0x74, - 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x5f, 0x75, 0x74, 0x66, 0x38, 0x18, - 0x1b, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x13, 0x6a, 0x61, - 0x76, 0x61, 0x53, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x55, 0x74, 0x66, - 0x38, 0x12, 0x53, 0x0a, 0x0c, 0x6f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x65, 0x5f, 0x66, 0x6f, - 0x72, 0x18, 0x09, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x29, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x6c, 0x65, 0x4f, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4f, 0x70, 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x65, 0x4d, 0x6f, - 0x64, 0x65, 0x3a, 0x05, 0x53, 0x50, 0x45, 0x45, 0x44, 0x52, 0x0b, 0x6f, 0x70, 0x74, 0x69, 0x6d, - 0x69, 0x7a, 0x65, 0x46, 0x6f, 0x72, 0x12, 0x1d, 0x0a, 0x0a, 0x67, 0x6f, 0x5f, 0x70, 0x61, 0x63, - 0x6b, 0x61, 0x67, 0x65, 0x18, 0x0b, 0x20, 0x01, 0x28, 0x09, 0x52, 0x09, 0x67, 0x6f, 0x50, 0x61, - 0x63, 0x6b, 0x61, 0x67, 0x65, 0x12, 0x35, 0x0a, 0x13, 0x63, 0x63, 0x5f, 0x67, 0x65, 0x6e, 0x65, - 0x72, 0x69, 0x63, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x18, 0x10, 0x20, 0x01, - 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x11, 0x63, 0x63, 0x47, 0x65, 0x6e, - 0x65, 0x72, 0x69, 0x63, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0x39, 0x0a, 0x15, - 0x6a, 0x61, 0x76, 0x61, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x5f, 0x73, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x73, 0x18, 0x11, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, - 0x73, 0x65, 0x52, 0x13, 0x6a, 0x61, 0x76, 0x61, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x53, - 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0x35, 0x0a, 0x13, 0x70, 0x79, 0x5f, 0x67, 0x65, - 0x6e, 0x65, 0x72, 0x69, 0x63, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x18, 0x12, - 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x11, 0x70, 0x79, 0x47, - 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x73, 0x12, 0x25, - 0x0a, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x18, 0x17, 0x20, 0x01, - 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, - 0x63, 0x61, 0x74, 0x65, 0x64, 0x12, 0x2e, 0x0a, 0x10, 0x63, 0x63, 0x5f, 0x65, 0x6e, 0x61, 0x62, - 0x6c, 0x65, 0x5f, 0x61, 0x72, 0x65, 0x6e, 0x61, 0x73, 0x18, 0x1f, 0x20, 0x01, 0x28, 0x08, 0x3a, - 0x04, 0x74, 0x72, 0x75, 0x65, 0x52, 0x0e, 0x63, 0x63, 0x45, 0x6e, 0x61, 0x62, 0x6c, 0x65, 0x41, - 0x72, 0x65, 0x6e, 0x61, 0x73, 0x12, 0x2a, 0x0a, 0x11, 0x6f, 0x62, 0x6a, 0x63, 0x5f, 0x63, 0x6c, - 0x61, 0x73, 0x73, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x24, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0f, 0x6f, 0x62, 0x6a, 0x63, 0x43, 0x6c, 0x61, 0x73, 0x73, 0x50, 0x72, 0x65, 0x66, 0x69, - 0x78, 0x12, 0x29, 0x0a, 0x10, 0x63, 0x73, 0x68, 0x61, 0x72, 0x70, 0x5f, 0x6e, 0x61, 0x6d, 0x65, - 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x25, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x63, 0x73, 0x68, - 0x61, 0x72, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x21, 0x0a, 0x0c, - 0x73, 0x77, 0x69, 0x66, 0x74, 0x5f, 0x70, 0x72, 0x65, 0x66, 0x69, 0x78, 0x18, 0x27, 0x20, 0x01, - 0x28, 0x09, 0x52, 0x0b, 0x73, 0x77, 0x69, 0x66, 0x74, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x12, - 0x28, 0x0a, 0x10, 0x70, 0x68, 0x70, 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x5f, 0x70, 0x72, 0x65, - 0x66, 0x69, 0x78, 0x18, 0x28, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x70, 0x68, 0x70, 0x43, 0x6c, - 0x61, 0x73, 0x73, 0x50, 0x72, 0x65, 0x66, 0x69, 0x78, 0x12, 0x23, 0x0a, 0x0d, 0x70, 0x68, 0x70, - 0x5f, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x29, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0c, 0x70, 0x68, 0x70, 0x4e, 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x12, 0x34, - 0x0a, 0x16, 0x70, 0x68, 0x70, 0x5f, 0x6d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x5f, 0x6e, - 0x61, 0x6d, 0x65, 0x73, 0x70, 0x61, 0x63, 0x65, 0x18, 0x2c, 0x20, 0x01, 0x28, 0x09, 0x52, 0x14, - 0x70, 0x68, 0x70, 0x4d, 0x65, 0x74, 0x61, 0x64, 0x61, 0x74, 0x61, 0x4e, 0x61, 0x6d, 0x65, 0x73, - 0x70, 0x61, 0x63, 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x72, 0x75, 0x62, 0x79, 0x5f, 0x70, 0x61, 0x63, - 0x6b, 0x61, 0x67, 0x65, 0x18, 0x2d, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0b, 0x72, 0x75, 0x62, 0x79, - 0x50, 0x61, 0x63, 0x6b, 0x61, 0x67, 0x65, 0x12, 0x37, 0x0a, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, - 0x72, 0x65, 0x73, 0x18, 0x32, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x65, 0x61, 0x74, - 0x75, 0x72, 0x65, 0x53, 0x65, 0x74, 0x52, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, - 0x12, 0x58, 0x0a, 0x14, 0x75, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, - 0x64, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0xe7, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, - 0x24, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x55, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x4f, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x75, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, - 0x65, 0x74, 0x65, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, 0x3a, 0x0a, 0x0c, 0x4f, 0x70, - 0x74, 0x69, 0x6d, 0x69, 0x7a, 0x65, 0x4d, 0x6f, 0x64, 0x65, 0x12, 0x09, 0x0a, 0x05, 0x53, 0x50, - 0x45, 0x45, 0x44, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x43, 0x4f, 0x44, 0x45, 0x5f, 0x53, 0x49, - 0x5a, 0x45, 0x10, 0x02, 0x12, 0x10, 0x0a, 0x0c, 0x4c, 0x49, 0x54, 0x45, 0x5f, 0x52, 0x55, 0x4e, - 0x54, 0x49, 0x4d, 0x45, 0x10, 0x03, 0x2a, 0x09, 0x08, 0xe8, 0x07, 0x10, 0x80, 0x80, 0x80, 0x80, - 0x02, 0x4a, 0x04, 0x08, 0x2a, 0x10, 0x2b, 0x4a, 0x04, 0x08, 0x26, 0x10, 0x27, 0x52, 0x14, 0x70, - 0x68, 0x70, 0x5f, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x69, 0x63, 0x5f, 0x73, 0x65, 0x72, 0x76, 0x69, - 0x63, 0x65, 0x73, 0x22, 0xf4, 0x03, 0x0a, 0x0e, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x4f, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x3c, 0x0a, 0x17, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, - 0x65, 0x5f, 0x73, 0x65, 0x74, 0x5f, 0x77, 0x69, 0x72, 0x65, 0x5f, 0x66, 0x6f, 0x72, 0x6d, 0x61, - 0x74, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x14, - 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x53, 0x65, 0x74, 0x57, 0x69, 0x72, 0x65, 0x46, 0x6f, - 0x72, 0x6d, 0x61, 0x74, 0x12, 0x4c, 0x0a, 0x1f, 0x6e, 0x6f, 0x5f, 0x73, 0x74, 0x61, 0x6e, 0x64, - 0x61, 0x72, 0x64, 0x5f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x5f, 0x61, - 0x63, 0x63, 0x65, 0x73, 0x73, 0x6f, 0x72, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, - 0x61, 0x6c, 0x73, 0x65, 0x52, 0x1c, 0x6e, 0x6f, 0x53, 0x74, 0x61, 0x6e, 0x64, 0x61, 0x72, 0x64, - 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x41, 0x63, 0x63, 0x65, 0x73, 0x73, - 0x6f, 0x72, 0x12, 0x25, 0x0a, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, - 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x0a, 0x64, - 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x12, 0x1b, 0x0a, 0x09, 0x6d, 0x61, 0x70, - 0x5f, 0x65, 0x6e, 0x74, 0x72, 0x79, 0x18, 0x07, 0x20, 0x01, 0x28, 0x08, 0x52, 0x08, 0x6d, 0x61, - 0x70, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x12, 0x56, 0x0a, 0x26, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, - 0x61, 0x74, 0x65, 0x64, 0x5f, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x5f, 0x6a, 0x73, 0x6f, 0x6e, - 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x73, - 0x18, 0x0b, 0x20, 0x01, 0x28, 0x08, 0x42, 0x02, 0x18, 0x01, 0x52, 0x22, 0x64, 0x65, 0x70, 0x72, - 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x4a, 0x73, 0x6f, 0x6e, - 0x46, 0x69, 0x65, 0x6c, 0x64, 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x73, 0x12, 0x37, - 0x0a, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x0c, 0x20, 0x01, 0x28, 0x0b, - 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x53, 0x65, 0x74, 0x52, 0x08, 0x66, - 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x58, 0x0a, 0x14, 0x75, 0x6e, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, - 0xe7, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x75, 0x6e, - 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x2a, 0x09, 0x08, 0xe8, 0x07, 0x10, 0x80, 0x80, 0x80, 0x80, 0x02, 0x4a, 0x04, 0x08, 0x04, - 0x10, 0x05, 0x4a, 0x04, 0x08, 0x05, 0x10, 0x06, 0x4a, 0x04, 0x08, 0x06, 0x10, 0x07, 0x4a, 0x04, - 0x08, 0x08, 0x10, 0x09, 0x4a, 0x04, 0x08, 0x09, 0x10, 0x0a, 0x22, 0x9d, 0x0d, 0x0a, 0x0c, 0x46, - 0x69, 0x65, 0x6c, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x41, 0x0a, 0x05, 0x63, - 0x74, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x23, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, - 0x6c, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x43, 0x54, 0x79, 0x70, 0x65, 0x3a, - 0x06, 0x53, 0x54, 0x52, 0x49, 0x4e, 0x47, 0x52, 0x05, 0x63, 0x74, 0x79, 0x70, 0x65, 0x12, 0x16, - 0x0a, 0x06, 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x06, - 0x70, 0x61, 0x63, 0x6b, 0x65, 0x64, 0x12, 0x47, 0x0a, 0x06, 0x6a, 0x73, 0x74, 0x79, 0x70, 0x65, - 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x24, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4f, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4a, 0x53, 0x54, 0x79, 0x70, 0x65, 0x3a, 0x09, 0x4a, 0x53, - 0x5f, 0x4e, 0x4f, 0x52, 0x4d, 0x41, 0x4c, 0x52, 0x06, 0x6a, 0x73, 0x74, 0x79, 0x70, 0x65, 0x12, - 0x19, 0x0a, 0x04, 0x6c, 0x61, 0x7a, 0x79, 0x18, 0x05, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, - 0x61, 0x6c, 0x73, 0x65, 0x52, 0x04, 0x6c, 0x61, 0x7a, 0x79, 0x12, 0x2e, 0x0a, 0x0f, 0x75, 0x6e, - 0x76, 0x65, 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x5f, 0x6c, 0x61, 0x7a, 0x79, 0x18, 0x0f, 0x20, - 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x0e, 0x75, 0x6e, 0x76, 0x65, - 0x72, 0x69, 0x66, 0x69, 0x65, 0x64, 0x4c, 0x61, 0x7a, 0x79, 0x12, 0x25, 0x0a, 0x0a, 0x64, 0x65, - 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, - 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, - 0x64, 0x12, 0x19, 0x0a, 0x04, 0x77, 0x65, 0x61, 0x6b, 0x18, 0x0a, 0x20, 0x01, 0x28, 0x08, 0x3a, - 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x04, 0x77, 0x65, 0x61, 0x6b, 0x12, 0x28, 0x0a, 0x0c, - 0x64, 0x65, 0x62, 0x75, 0x67, 0x5f, 0x72, 0x65, 0x64, 0x61, 0x63, 0x74, 0x18, 0x10, 0x20, 0x01, - 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x0b, 0x64, 0x65, 0x62, 0x75, 0x67, - 0x52, 0x65, 0x64, 0x61, 0x63, 0x74, 0x12, 0x4b, 0x0a, 0x09, 0x72, 0x65, 0x74, 0x65, 0x6e, 0x74, - 0x69, 0x6f, 0x6e, 0x18, 0x11, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, - 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, - 0x65, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x09, 0x72, 0x65, 0x74, 0x65, 0x6e, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x48, 0x0a, 0x07, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x73, 0x18, 0x13, - 0x20, 0x03, 0x28, 0x0e, 0x32, 0x2e, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4f, 0x70, 0x74, 0x69, - 0x6f, 0x6e, 0x73, 0x2e, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, - 0x54, 0x79, 0x70, 0x65, 0x52, 0x07, 0x74, 0x61, 0x72, 0x67, 0x65, 0x74, 0x73, 0x12, 0x57, 0x0a, - 0x10, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, - 0x73, 0x18, 0x14, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, - 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4f, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x45, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, - 0x66, 0x61, 0x75, 0x6c, 0x74, 0x52, 0x0f, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, - 0x66, 0x61, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x37, 0x0a, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, - 0x65, 0x73, 0x18, 0x15, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x65, 0x61, 0x74, 0x75, - 0x72, 0x65, 0x53, 0x65, 0x74, 0x52, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, - 0x55, 0x0a, 0x0f, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x73, 0x75, 0x70, 0x70, 0x6f, - 0x72, 0x74, 0x18, 0x16, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, - 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x53, - 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x52, 0x0e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x53, - 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x12, 0x58, 0x0a, 0x14, 0x75, 0x6e, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0xe7, - 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, - 0x72, 0x65, 0x74, 0x65, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x75, 0x6e, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x1a, 0x5a, 0x0a, 0x0e, 0x45, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x66, 0x61, 0x75, - 0x6c, 0x74, 0x12, 0x32, 0x0a, 0x07, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x03, 0x20, - 0x01, 0x28, 0x0e, 0x32, 0x18, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x07, 0x65, - 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x14, 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, - 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x96, 0x02, 0x0a, - 0x0e, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x53, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x12, - 0x47, 0x0a, 0x12, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x69, 0x6e, 0x74, 0x72, 0x6f, - 0x64, 0x75, 0x63, 0x65, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x18, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x64, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x11, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, - 0x74, 0x72, 0x6f, 0x64, 0x75, 0x63, 0x65, 0x64, 0x12, 0x47, 0x0a, 0x12, 0x65, 0x64, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x5f, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x18, 0x02, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x18, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x11, - 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, - 0x64, 0x12, 0x2f, 0x0a, 0x13, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, - 0x5f, 0x77, 0x61, 0x72, 0x6e, 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x12, - 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x57, 0x61, 0x72, 0x6e, 0x69, - 0x6e, 0x67, 0x12, 0x41, 0x0a, 0x0f, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x72, 0x65, - 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x18, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x64, - 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0e, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, - 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x22, 0x2f, 0x0a, 0x05, 0x43, 0x54, 0x79, 0x70, 0x65, 0x12, 0x0a, - 0x0a, 0x06, 0x53, 0x54, 0x52, 0x49, 0x4e, 0x47, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x43, 0x4f, - 0x52, 0x44, 0x10, 0x01, 0x12, 0x10, 0x0a, 0x0c, 0x53, 0x54, 0x52, 0x49, 0x4e, 0x47, 0x5f, 0x50, - 0x49, 0x45, 0x43, 0x45, 0x10, 0x02, 0x22, 0x35, 0x0a, 0x06, 0x4a, 0x53, 0x54, 0x79, 0x70, 0x65, - 0x12, 0x0d, 0x0a, 0x09, 0x4a, 0x53, 0x5f, 0x4e, 0x4f, 0x52, 0x4d, 0x41, 0x4c, 0x10, 0x00, 0x12, - 0x0d, 0x0a, 0x09, 0x4a, 0x53, 0x5f, 0x53, 0x54, 0x52, 0x49, 0x4e, 0x47, 0x10, 0x01, 0x12, 0x0d, - 0x0a, 0x09, 0x4a, 0x53, 0x5f, 0x4e, 0x55, 0x4d, 0x42, 0x45, 0x52, 0x10, 0x02, 0x22, 0x55, 0x0a, - 0x0f, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x65, 0x74, 0x65, 0x6e, 0x74, 0x69, 0x6f, 0x6e, - 0x12, 0x15, 0x0a, 0x11, 0x52, 0x45, 0x54, 0x45, 0x4e, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, - 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x15, 0x0a, 0x11, 0x52, 0x45, 0x54, 0x45, 0x4e, - 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x52, 0x55, 0x4e, 0x54, 0x49, 0x4d, 0x45, 0x10, 0x01, 0x12, 0x14, - 0x0a, 0x10, 0x52, 0x45, 0x54, 0x45, 0x4e, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x53, 0x4f, 0x55, 0x52, - 0x43, 0x45, 0x10, 0x02, 0x22, 0x8c, 0x02, 0x0a, 0x10, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x54, - 0x61, 0x72, 0x67, 0x65, 0x74, 0x54, 0x79, 0x70, 0x65, 0x12, 0x17, 0x0a, 0x13, 0x54, 0x41, 0x52, - 0x47, 0x45, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, - 0x10, 0x00, 0x12, 0x14, 0x0a, 0x10, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x5f, 0x54, 0x59, 0x50, - 0x45, 0x5f, 0x46, 0x49, 0x4c, 0x45, 0x10, 0x01, 0x12, 0x1f, 0x0a, 0x1b, 0x54, 0x41, 0x52, 0x47, - 0x45, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x45, 0x58, 0x54, 0x45, 0x4e, 0x53, 0x49, 0x4f, - 0x4e, 0x5f, 0x52, 0x41, 0x4e, 0x47, 0x45, 0x10, 0x02, 0x12, 0x17, 0x0a, 0x13, 0x54, 0x41, 0x52, - 0x47, 0x45, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4d, 0x45, 0x53, 0x53, 0x41, 0x47, 0x45, - 0x10, 0x03, 0x12, 0x15, 0x0a, 0x11, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x5f, 0x54, 0x59, 0x50, - 0x45, 0x5f, 0x46, 0x49, 0x45, 0x4c, 0x44, 0x10, 0x04, 0x12, 0x15, 0x0a, 0x11, 0x54, 0x41, 0x52, - 0x47, 0x45, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4f, 0x4e, 0x45, 0x4f, 0x46, 0x10, 0x05, - 0x12, 0x14, 0x0a, 0x10, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, - 0x45, 0x4e, 0x55, 0x4d, 0x10, 0x06, 0x12, 0x1a, 0x0a, 0x16, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, - 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x59, - 0x10, 0x07, 0x12, 0x17, 0x0a, 0x13, 0x54, 0x41, 0x52, 0x47, 0x45, 0x54, 0x5f, 0x54, 0x59, 0x50, - 0x45, 0x5f, 0x53, 0x45, 0x52, 0x56, 0x49, 0x43, 0x45, 0x10, 0x08, 0x12, 0x16, 0x0a, 0x12, 0x54, - 0x41, 0x52, 0x47, 0x45, 0x54, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, - 0x44, 0x10, 0x09, 0x2a, 0x09, 0x08, 0xe8, 0x07, 0x10, 0x80, 0x80, 0x80, 0x80, 0x02, 0x4a, 0x04, - 0x08, 0x04, 0x10, 0x05, 0x4a, 0x04, 0x08, 0x12, 0x10, 0x13, 0x22, 0xac, 0x01, 0x0a, 0x0c, 0x4f, - 0x6e, 0x65, 0x6f, 0x66, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x37, 0x0a, 0x08, 0x66, - 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x53, 0x65, 0x74, 0x52, 0x08, 0x66, 0x65, 0x61, 0x74, - 0x75, 0x72, 0x65, 0x73, 0x12, 0x58, 0x0a, 0x14, 0x75, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, - 0x72, 0x65, 0x74, 0x65, 0x64, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0xe7, 0x07, 0x20, - 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, - 0x74, 0x65, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x75, 0x6e, 0x69, 0x6e, 0x74, - 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2a, 0x09, - 0x08, 0xe8, 0x07, 0x10, 0x80, 0x80, 0x80, 0x80, 0x02, 0x22, 0xd1, 0x02, 0x0a, 0x0b, 0x45, 0x6e, - 0x75, 0x6d, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x1f, 0x0a, 0x0b, 0x61, 0x6c, 0x6c, - 0x6f, 0x77, 0x5f, 0x61, 0x6c, 0x69, 0x61, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x08, 0x52, 0x0a, - 0x61, 0x6c, 0x6c, 0x6f, 0x77, 0x41, 0x6c, 0x69, 0x61, 0x73, 0x12, 0x25, 0x0a, 0x0a, 0x64, 0x65, - 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, - 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, - 0x64, 0x12, 0x56, 0x0a, 0x26, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x5f, - 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x5f, 0x6a, 0x73, 0x6f, 0x6e, 0x5f, 0x66, 0x69, 0x65, 0x6c, - 0x64, 0x5f, 0x63, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x73, 0x18, 0x06, 0x20, 0x01, 0x28, - 0x08, 0x42, 0x02, 0x18, 0x01, 0x52, 0x22, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, - 0x64, 0x4c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x4a, 0x73, 0x6f, 0x6e, 0x46, 0x69, 0x65, 0x6c, 0x64, - 0x43, 0x6f, 0x6e, 0x66, 0x6c, 0x69, 0x63, 0x74, 0x73, 0x12, 0x37, 0x0a, 0x08, 0x66, 0x65, 0x61, - 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x65, - 0x61, 0x74, 0x75, 0x72, 0x65, 0x53, 0x65, 0x74, 0x52, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, - 0x65, 0x73, 0x12, 0x58, 0x0a, 0x14, 0x75, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, - 0x74, 0x65, 0x64, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0xe7, 0x07, 0x20, 0x03, 0x28, - 0x0b, 0x32, 0x24, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x55, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, - 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x75, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2a, 0x09, 0x08, 0xe8, - 0x07, 0x10, 0x80, 0x80, 0x80, 0x80, 0x02, 0x4a, 0x04, 0x08, 0x05, 0x10, 0x06, 0x22, 0xd8, 0x02, - 0x0a, 0x10, 0x45, 0x6e, 0x75, 0x6d, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x12, 0x25, 0x0a, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, - 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x0a, 0x64, - 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x12, 0x37, 0x0a, 0x08, 0x66, 0x65, 0x61, - 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x65, - 0x61, 0x74, 0x75, 0x72, 0x65, 0x53, 0x65, 0x74, 0x52, 0x08, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, - 0x65, 0x73, 0x12, 0x28, 0x0a, 0x0c, 0x64, 0x65, 0x62, 0x75, 0x67, 0x5f, 0x72, 0x65, 0x64, 0x61, - 0x63, 0x74, 0x18, 0x03, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, - 0x0b, 0x64, 0x65, 0x62, 0x75, 0x67, 0x52, 0x65, 0x64, 0x61, 0x63, 0x74, 0x12, 0x55, 0x0a, 0x0f, - 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x5f, 0x73, 0x75, 0x70, 0x70, 0x6f, 0x72, 0x74, 0x18, - 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x2c, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x4f, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x53, 0x75, 0x70, 0x70, - 0x6f, 0x72, 0x74, 0x52, 0x0e, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x53, 0x75, 0x70, 0x70, - 0x6f, 0x72, 0x74, 0x12, 0x58, 0x0a, 0x14, 0x75, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, - 0x65, 0x74, 0x65, 0x64, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0xe7, 0x07, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, - 0x65, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x75, 0x6e, 0x69, 0x6e, 0x74, 0x65, - 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2a, 0x09, 0x08, - 0xe8, 0x07, 0x10, 0x80, 0x80, 0x80, 0x80, 0x02, 0x22, 0xd5, 0x01, 0x0a, 0x0e, 0x53, 0x65, 0x72, - 0x76, 0x69, 0x63, 0x65, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x12, 0x37, 0x0a, 0x08, 0x66, - 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x22, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x53, 0x65, 0x74, 0x52, 0x08, 0x66, 0x65, 0x61, 0x74, - 0x75, 0x72, 0x65, 0x73, 0x12, 0x25, 0x0a, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, - 0x65, 0x64, 0x18, 0x21, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, - 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x12, 0x58, 0x0a, 0x14, 0x75, - 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x5f, 0x6f, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x18, 0xe7, 0x07, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x6e, 0x69, - 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, - 0x52, 0x13, 0x75, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x4f, - 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2a, 0x09, 0x08, 0xe8, 0x07, 0x10, 0x80, 0x80, 0x80, 0x80, 0x02, - 0x22, 0x99, 0x03, 0x0a, 0x0d, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, - 0x6e, 0x73, 0x12, 0x25, 0x0a, 0x0a, 0x64, 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, - 0x18, 0x21, 0x20, 0x01, 0x28, 0x08, 0x3a, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x52, 0x0a, 0x64, - 0x65, 0x70, 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x12, 0x71, 0x0a, 0x11, 0x69, 0x64, 0x65, - 0x6d, 0x70, 0x6f, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x5f, 0x6c, 0x65, 0x76, 0x65, 0x6c, 0x18, 0x22, - 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2f, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x4f, 0x70, 0x74, - 0x69, 0x6f, 0x6e, 0x73, 0x2e, 0x49, 0x64, 0x65, 0x6d, 0x70, 0x6f, 0x74, 0x65, 0x6e, 0x63, 0x79, - 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x3a, 0x13, 0x49, 0x44, 0x45, 0x4d, 0x50, 0x4f, 0x54, 0x45, 0x4e, - 0x43, 0x59, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x52, 0x10, 0x69, 0x64, 0x65, 0x6d, - 0x70, 0x6f, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x4c, 0x65, 0x76, 0x65, 0x6c, 0x12, 0x37, 0x0a, 0x08, - 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x23, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x53, 0x65, 0x74, 0x52, 0x08, 0x66, 0x65, 0x61, - 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x58, 0x0a, 0x14, 0x75, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, - 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x5f, 0x6f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0xe7, 0x07, - 0x20, 0x03, 0x28, 0x0b, 0x32, 0x24, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, - 0x65, 0x74, 0x65, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x13, 0x75, 0x6e, 0x69, 0x6e, - 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x22, - 0x50, 0x0a, 0x10, 0x49, 0x64, 0x65, 0x6d, 0x70, 0x6f, 0x74, 0x65, 0x6e, 0x63, 0x79, 0x4c, 0x65, - 0x76, 0x65, 0x6c, 0x12, 0x17, 0x0a, 0x13, 0x49, 0x44, 0x45, 0x4d, 0x50, 0x4f, 0x54, 0x45, 0x4e, - 0x43, 0x59, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, - 0x4e, 0x4f, 0x5f, 0x53, 0x49, 0x44, 0x45, 0x5f, 0x45, 0x46, 0x46, 0x45, 0x43, 0x54, 0x53, 0x10, - 0x01, 0x12, 0x0e, 0x0a, 0x0a, 0x49, 0x44, 0x45, 0x4d, 0x50, 0x4f, 0x54, 0x45, 0x4e, 0x54, 0x10, - 0x02, 0x2a, 0x09, 0x08, 0xe8, 0x07, 0x10, 0x80, 0x80, 0x80, 0x80, 0x02, 0x22, 0x9a, 0x03, 0x0a, - 0x13, 0x55, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x64, 0x4f, 0x70, - 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x41, 0x0a, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x18, 0x02, 0x20, 0x03, - 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x55, 0x6e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, - 0x65, 0x64, 0x4f, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x4e, 0x61, 0x6d, 0x65, 0x50, 0x61, 0x72, - 0x74, 0x52, 0x04, 0x6e, 0x61, 0x6d, 0x65, 0x12, 0x29, 0x0a, 0x10, 0x69, 0x64, 0x65, 0x6e, 0x74, - 0x69, 0x66, 0x69, 0x65, 0x72, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x0f, 0x69, 0x64, 0x65, 0x6e, 0x74, 0x69, 0x66, 0x69, 0x65, 0x72, 0x56, 0x61, 0x6c, - 0x75, 0x65, 0x12, 0x2c, 0x0a, 0x12, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x69, - 0x6e, 0x74, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x04, 0x52, 0x10, - 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x49, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, - 0x12, 0x2c, 0x0a, 0x12, 0x6e, 0x65, 0x67, 0x61, 0x74, 0x69, 0x76, 0x65, 0x5f, 0x69, 0x6e, 0x74, - 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x05, 0x20, 0x01, 0x28, 0x03, 0x52, 0x10, 0x6e, 0x65, - 0x67, 0x61, 0x74, 0x69, 0x76, 0x65, 0x49, 0x6e, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x12, 0x21, - 0x0a, 0x0c, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x06, - 0x20, 0x01, 0x28, 0x01, 0x52, 0x0b, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x56, 0x61, 0x6c, 0x75, - 0x65, 0x12, 0x21, 0x0a, 0x0c, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x5f, 0x76, 0x61, 0x6c, 0x75, - 0x65, 0x18, 0x07, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x0b, 0x73, 0x74, 0x72, 0x69, 0x6e, 0x67, 0x56, - 0x61, 0x6c, 0x75, 0x65, 0x12, 0x27, 0x0a, 0x0f, 0x61, 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, - 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x08, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0e, 0x61, - 0x67, 0x67, 0x72, 0x65, 0x67, 0x61, 0x74, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x1a, 0x4a, 0x0a, - 0x08, 0x4e, 0x61, 0x6d, 0x65, 0x50, 0x61, 0x72, 0x74, 0x12, 0x1b, 0x0a, 0x09, 0x6e, 0x61, 0x6d, - 0x65, 0x5f, 0x70, 0x61, 0x72, 0x74, 0x18, 0x01, 0x20, 0x02, 0x28, 0x09, 0x52, 0x08, 0x6e, 0x61, - 0x6d, 0x65, 0x50, 0x61, 0x72, 0x74, 0x12, 0x21, 0x0a, 0x0c, 0x69, 0x73, 0x5f, 0x65, 0x78, 0x74, - 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x18, 0x02, 0x20, 0x02, 0x28, 0x08, 0x52, 0x0b, 0x69, 0x73, - 0x45, 0x78, 0x74, 0x65, 0x6e, 0x73, 0x69, 0x6f, 0x6e, 0x22, 0xa7, 0x0a, 0x0a, 0x0a, 0x46, 0x65, - 0x61, 0x74, 0x75, 0x72, 0x65, 0x53, 0x65, 0x74, 0x12, 0x91, 0x01, 0x0a, 0x0e, 0x66, 0x69, 0x65, - 0x6c, 0x64, 0x5f, 0x70, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, - 0x0e, 0x32, 0x29, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2e, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x53, 0x65, 0x74, 0x2e, 0x46, - 0x69, 0x65, 0x6c, 0x64, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x42, 0x3f, 0x88, 0x01, - 0x01, 0x98, 0x01, 0x04, 0x98, 0x01, 0x01, 0xa2, 0x01, 0x0d, 0x12, 0x08, 0x45, 0x58, 0x50, 0x4c, - 0x49, 0x43, 0x49, 0x54, 0x18, 0xe6, 0x07, 0xa2, 0x01, 0x0d, 0x12, 0x08, 0x49, 0x4d, 0x50, 0x4c, - 0x49, 0x43, 0x49, 0x54, 0x18, 0xe7, 0x07, 0xa2, 0x01, 0x0d, 0x12, 0x08, 0x45, 0x58, 0x50, 0x4c, - 0x49, 0x43, 0x49, 0x54, 0x18, 0xe8, 0x07, 0xb2, 0x01, 0x03, 0x08, 0xe8, 0x07, 0x52, 0x0d, 0x66, - 0x69, 0x65, 0x6c, 0x64, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x6c, 0x0a, 0x09, - 0x65, 0x6e, 0x75, 0x6d, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x24, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x53, 0x65, 0x74, 0x2e, 0x45, 0x6e, 0x75, - 0x6d, 0x54, 0x79, 0x70, 0x65, 0x42, 0x29, 0x88, 0x01, 0x01, 0x98, 0x01, 0x06, 0x98, 0x01, 0x01, - 0xa2, 0x01, 0x0b, 0x12, 0x06, 0x43, 0x4c, 0x4f, 0x53, 0x45, 0x44, 0x18, 0xe6, 0x07, 0xa2, 0x01, - 0x09, 0x12, 0x04, 0x4f, 0x50, 0x45, 0x4e, 0x18, 0xe7, 0x07, 0xb2, 0x01, 0x03, 0x08, 0xe8, 0x07, - 0x52, 0x08, 0x65, 0x6e, 0x75, 0x6d, 0x54, 0x79, 0x70, 0x65, 0x12, 0x98, 0x01, 0x0a, 0x17, 0x72, - 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x5f, 0x66, 0x69, 0x65, 0x6c, 0x64, 0x5f, 0x65, 0x6e, - 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x31, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, - 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x53, 0x65, 0x74, 0x2e, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, - 0x65, 0x64, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x42, - 0x2d, 0x88, 0x01, 0x01, 0x98, 0x01, 0x04, 0x98, 0x01, 0x01, 0xa2, 0x01, 0x0d, 0x12, 0x08, 0x45, - 0x58, 0x50, 0x41, 0x4e, 0x44, 0x45, 0x44, 0x18, 0xe6, 0x07, 0xa2, 0x01, 0x0b, 0x12, 0x06, 0x50, - 0x41, 0x43, 0x4b, 0x45, 0x44, 0x18, 0xe7, 0x07, 0xb2, 0x01, 0x03, 0x08, 0xe8, 0x07, 0x52, 0x15, - 0x72, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x46, 0x69, 0x65, 0x6c, 0x64, 0x45, 0x6e, 0x63, - 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x7e, 0x0a, 0x0f, 0x75, 0x74, 0x66, 0x38, 0x5f, 0x76, 0x61, - 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x2a, - 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, - 0x2e, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x53, 0x65, 0x74, 0x2e, 0x55, 0x74, 0x66, 0x38, - 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x42, 0x29, 0x88, 0x01, 0x01, 0x98, - 0x01, 0x04, 0x98, 0x01, 0x01, 0xa2, 0x01, 0x09, 0x12, 0x04, 0x4e, 0x4f, 0x4e, 0x45, 0x18, 0xe6, - 0x07, 0xa2, 0x01, 0x0b, 0x12, 0x06, 0x56, 0x45, 0x52, 0x49, 0x46, 0x59, 0x18, 0xe7, 0x07, 0xb2, - 0x01, 0x03, 0x08, 0xe8, 0x07, 0x52, 0x0e, 0x75, 0x74, 0x66, 0x38, 0x56, 0x61, 0x6c, 0x69, 0x64, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x7e, 0x0a, 0x10, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, - 0x5f, 0x65, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, - 0x2b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x53, 0x65, 0x74, 0x2e, 0x4d, 0x65, 0x73, - 0x73, 0x61, 0x67, 0x65, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x42, 0x26, 0x88, 0x01, - 0x01, 0x98, 0x01, 0x04, 0x98, 0x01, 0x01, 0xa2, 0x01, 0x14, 0x12, 0x0f, 0x4c, 0x45, 0x4e, 0x47, - 0x54, 0x48, 0x5f, 0x50, 0x52, 0x45, 0x46, 0x49, 0x58, 0x45, 0x44, 0x18, 0xe6, 0x07, 0xb2, 0x01, - 0x03, 0x08, 0xe8, 0x07, 0x52, 0x0f, 0x6d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x45, 0x6e, 0x63, - 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x82, 0x01, 0x0a, 0x0b, 0x6a, 0x73, 0x6f, 0x6e, 0x5f, 0x66, - 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x26, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x65, - 0x61, 0x74, 0x75, 0x72, 0x65, 0x53, 0x65, 0x74, 0x2e, 0x4a, 0x73, 0x6f, 0x6e, 0x46, 0x6f, 0x72, - 0x6d, 0x61, 0x74, 0x42, 0x39, 0x88, 0x01, 0x01, 0x98, 0x01, 0x03, 0x98, 0x01, 0x06, 0x98, 0x01, - 0x01, 0xa2, 0x01, 0x17, 0x12, 0x12, 0x4c, 0x45, 0x47, 0x41, 0x43, 0x59, 0x5f, 0x42, 0x45, 0x53, - 0x54, 0x5f, 0x45, 0x46, 0x46, 0x4f, 0x52, 0x54, 0x18, 0xe6, 0x07, 0xa2, 0x01, 0x0a, 0x12, 0x05, - 0x41, 0x4c, 0x4c, 0x4f, 0x57, 0x18, 0xe7, 0x07, 0xb2, 0x01, 0x03, 0x08, 0xe8, 0x07, 0x52, 0x0a, - 0x6a, 0x73, 0x6f, 0x6e, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x22, 0x5c, 0x0a, 0x0d, 0x46, 0x69, - 0x65, 0x6c, 0x64, 0x50, 0x72, 0x65, 0x73, 0x65, 0x6e, 0x63, 0x65, 0x12, 0x1a, 0x0a, 0x16, 0x46, - 0x49, 0x45, 0x4c, 0x44, 0x5f, 0x50, 0x52, 0x45, 0x53, 0x45, 0x4e, 0x43, 0x45, 0x5f, 0x55, 0x4e, - 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0c, 0x0a, 0x08, 0x45, 0x58, 0x50, 0x4c, 0x49, - 0x43, 0x49, 0x54, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x49, 0x4d, 0x50, 0x4c, 0x49, 0x43, 0x49, - 0x54, 0x10, 0x02, 0x12, 0x13, 0x0a, 0x0f, 0x4c, 0x45, 0x47, 0x41, 0x43, 0x59, 0x5f, 0x52, 0x45, - 0x51, 0x55, 0x49, 0x52, 0x45, 0x44, 0x10, 0x03, 0x22, 0x37, 0x0a, 0x08, 0x45, 0x6e, 0x75, 0x6d, - 0x54, 0x79, 0x70, 0x65, 0x12, 0x15, 0x0a, 0x11, 0x45, 0x4e, 0x55, 0x4d, 0x5f, 0x54, 0x59, 0x50, - 0x45, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x08, 0x0a, 0x04, 0x4f, - 0x50, 0x45, 0x4e, 0x10, 0x01, 0x12, 0x0a, 0x0a, 0x06, 0x43, 0x4c, 0x4f, 0x53, 0x45, 0x44, 0x10, - 0x02, 0x22, 0x56, 0x0a, 0x15, 0x52, 0x65, 0x70, 0x65, 0x61, 0x74, 0x65, 0x64, 0x46, 0x69, 0x65, - 0x6c, 0x64, 0x45, 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x23, 0x0a, 0x1f, 0x52, 0x45, - 0x50, 0x45, 0x41, 0x54, 0x45, 0x44, 0x5f, 0x46, 0x49, 0x45, 0x4c, 0x44, 0x5f, 0x45, 0x4e, 0x43, - 0x4f, 0x44, 0x49, 0x4e, 0x47, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, - 0x0a, 0x0a, 0x06, 0x50, 0x41, 0x43, 0x4b, 0x45, 0x44, 0x10, 0x01, 0x12, 0x0c, 0x0a, 0x08, 0x45, - 0x58, 0x50, 0x41, 0x4e, 0x44, 0x45, 0x44, 0x10, 0x02, 0x22, 0x49, 0x0a, 0x0e, 0x55, 0x74, 0x66, - 0x38, 0x56, 0x61, 0x6c, 0x69, 0x64, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x1b, 0x0a, 0x17, 0x55, - 0x54, 0x46, 0x38, 0x5f, 0x56, 0x41, 0x4c, 0x49, 0x44, 0x41, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x55, - 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x0a, 0x0a, 0x06, 0x56, 0x45, 0x52, 0x49, - 0x46, 0x59, 0x10, 0x02, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x03, 0x22, 0x04, - 0x08, 0x01, 0x10, 0x01, 0x22, 0x53, 0x0a, 0x0f, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x45, - 0x6e, 0x63, 0x6f, 0x64, 0x69, 0x6e, 0x67, 0x12, 0x1c, 0x0a, 0x18, 0x4d, 0x45, 0x53, 0x53, 0x41, - 0x47, 0x45, 0x5f, 0x45, 0x4e, 0x43, 0x4f, 0x44, 0x49, 0x4e, 0x47, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, - 0x4f, 0x57, 0x4e, 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0f, 0x4c, 0x45, 0x4e, 0x47, 0x54, 0x48, 0x5f, - 0x50, 0x52, 0x45, 0x46, 0x49, 0x58, 0x45, 0x44, 0x10, 0x01, 0x12, 0x0d, 0x0a, 0x09, 0x44, 0x45, - 0x4c, 0x49, 0x4d, 0x49, 0x54, 0x45, 0x44, 0x10, 0x02, 0x22, 0x48, 0x0a, 0x0a, 0x4a, 0x73, 0x6f, - 0x6e, 0x46, 0x6f, 0x72, 0x6d, 0x61, 0x74, 0x12, 0x17, 0x0a, 0x13, 0x4a, 0x53, 0x4f, 0x4e, 0x5f, - 0x46, 0x4f, 0x52, 0x4d, 0x41, 0x54, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, 0x4e, 0x10, 0x00, - 0x12, 0x09, 0x0a, 0x05, 0x41, 0x4c, 0x4c, 0x4f, 0x57, 0x10, 0x01, 0x12, 0x16, 0x0a, 0x12, 0x4c, - 0x45, 0x47, 0x41, 0x43, 0x59, 0x5f, 0x42, 0x45, 0x53, 0x54, 0x5f, 0x45, 0x46, 0x46, 0x4f, 0x52, - 0x54, 0x10, 0x02, 0x2a, 0x06, 0x08, 0xe8, 0x07, 0x10, 0x8b, 0x4e, 0x2a, 0x06, 0x08, 0x8b, 0x4e, - 0x10, 0x90, 0x4e, 0x2a, 0x06, 0x08, 0x90, 0x4e, 0x10, 0x91, 0x4e, 0x4a, 0x06, 0x08, 0xe7, 0x07, - 0x10, 0xe8, 0x07, 0x22, 0xef, 0x03, 0x0a, 0x12, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x53, - 0x65, 0x74, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x73, 0x12, 0x58, 0x0a, 0x08, 0x64, 0x65, - 0x66, 0x61, 0x75, 0x6c, 0x74, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x3c, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, - 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x53, 0x65, 0x74, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, - 0x73, 0x2e, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x53, 0x65, 0x74, 0x45, 0x64, 0x69, 0x74, - 0x69, 0x6f, 0x6e, 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x52, 0x08, 0x64, 0x65, 0x66, 0x61, - 0x75, 0x6c, 0x74, 0x73, 0x12, 0x41, 0x0a, 0x0f, 0x6d, 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, 0x5f, - 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x18, 0x2e, - 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, - 0x45, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0e, 0x6d, 0x69, 0x6e, 0x69, 0x6d, 0x75, 0x6d, - 0x45, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x41, 0x0a, 0x0f, 0x6d, 0x61, 0x78, 0x69, 0x6d, - 0x75, 0x6d, 0x5f, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, - 0x32, 0x18, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2e, 0x45, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0e, 0x6d, 0x61, 0x78, 0x69, - 0x6d, 0x75, 0x6d, 0x45, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0xf8, 0x01, 0x0a, 0x18, 0x46, - 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x53, 0x65, 0x74, 0x45, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, - 0x44, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x12, 0x32, 0x0a, 0x07, 0x65, 0x64, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x18, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x45, 0x64, 0x69, 0x74, 0x69, - 0x6f, 0x6e, 0x52, 0x07, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x4e, 0x0a, 0x14, 0x6f, - 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x66, 0x65, 0x61, 0x74, 0x75, - 0x72, 0x65, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x65, 0x61, 0x74, - 0x75, 0x72, 0x65, 0x53, 0x65, 0x74, 0x52, 0x13, 0x6f, 0x76, 0x65, 0x72, 0x72, 0x69, 0x64, 0x61, - 0x62, 0x6c, 0x65, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0x42, 0x0a, 0x0e, 0x66, - 0x69, 0x78, 0x65, 0x64, 0x5f, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x18, 0x05, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x53, 0x65, 0x74, - 0x52, 0x0d, 0x66, 0x69, 0x78, 0x65, 0x64, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x4a, - 0x04, 0x08, 0x01, 0x10, 0x02, 0x4a, 0x04, 0x08, 0x02, 0x10, 0x03, 0x52, 0x08, 0x66, 0x65, 0x61, - 0x74, 0x75, 0x72, 0x65, 0x73, 0x22, 0xa7, 0x02, 0x0a, 0x0e, 0x53, 0x6f, 0x75, 0x72, 0x63, 0x65, - 0x43, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x44, 0x0a, 0x08, 0x6c, 0x6f, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x28, 0x2e, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x53, 0x6f, 0x75, - 0x72, 0x63, 0x65, 0x43, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x4c, 0x6f, 0x63, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x08, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0xce, - 0x01, 0x0a, 0x08, 0x4c, 0x6f, 0x63, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x04, 0x70, - 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x03, 0x28, 0x05, 0x42, 0x02, 0x10, 0x01, 0x52, 0x04, 0x70, - 0x61, 0x74, 0x68, 0x12, 0x16, 0x0a, 0x04, 0x73, 0x70, 0x61, 0x6e, 0x18, 0x02, 0x20, 0x03, 0x28, - 0x05, 0x42, 0x02, 0x10, 0x01, 0x52, 0x04, 0x73, 0x70, 0x61, 0x6e, 0x12, 0x29, 0x0a, 0x10, 0x6c, - 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, - 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0f, 0x6c, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x43, 0x6f, - 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x12, 0x2b, 0x0a, 0x11, 0x74, 0x72, 0x61, 0x69, 0x6c, 0x69, - 0x6e, 0x67, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x18, 0x04, 0x20, 0x01, 0x28, - 0x09, 0x52, 0x10, 0x74, 0x72, 0x61, 0x69, 0x6c, 0x69, 0x6e, 0x67, 0x43, 0x6f, 0x6d, 0x6d, 0x65, - 0x6e, 0x74, 0x73, 0x12, 0x3a, 0x0a, 0x19, 0x6c, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x5f, 0x64, - 0x65, 0x74, 0x61, 0x63, 0x68, 0x65, 0x64, 0x5f, 0x63, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, - 0x18, 0x06, 0x20, 0x03, 0x28, 0x09, 0x52, 0x17, 0x6c, 0x65, 0x61, 0x64, 0x69, 0x6e, 0x67, 0x44, - 0x65, 0x74, 0x61, 0x63, 0x68, 0x65, 0x64, 0x43, 0x6f, 0x6d, 0x6d, 0x65, 0x6e, 0x74, 0x73, 0x22, - 0xd0, 0x02, 0x0a, 0x11, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x64, - 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x12, 0x4d, 0x0a, 0x0a, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x18, 0x01, 0x20, 0x03, 0x28, 0x0b, 0x32, 0x2d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x47, 0x65, 0x6e, 0x65, - 0x72, 0x61, 0x74, 0x65, 0x64, 0x43, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x41, 0x6e, - 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x52, 0x0a, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, - 0x74, 0x69, 0x6f, 0x6e, 0x1a, 0xeb, 0x01, 0x0a, 0x0a, 0x41, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, - 0x69, 0x6f, 0x6e, 0x12, 0x16, 0x0a, 0x04, 0x70, 0x61, 0x74, 0x68, 0x18, 0x01, 0x20, 0x03, 0x28, - 0x05, 0x42, 0x02, 0x10, 0x01, 0x52, 0x04, 0x70, 0x61, 0x74, 0x68, 0x12, 0x1f, 0x0a, 0x0b, 0x73, - 0x6f, 0x75, 0x72, 0x63, 0x65, 0x5f, 0x66, 0x69, 0x6c, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, - 0x52, 0x0a, 0x73, 0x6f, 0x75, 0x72, 0x63, 0x65, 0x46, 0x69, 0x6c, 0x65, 0x12, 0x14, 0x0a, 0x05, - 0x62, 0x65, 0x67, 0x69, 0x6e, 0x18, 0x03, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x62, 0x65, 0x67, - 0x69, 0x6e, 0x12, 0x10, 0x0a, 0x03, 0x65, 0x6e, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x05, 0x52, - 0x03, 0x65, 0x6e, 0x64, 0x12, 0x52, 0x0a, 0x08, 0x73, 0x65, 0x6d, 0x61, 0x6e, 0x74, 0x69, 0x63, - 0x18, 0x05, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x36, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, - 0x65, 0x64, 0x43, 0x6f, 0x64, 0x65, 0x49, 0x6e, 0x66, 0x6f, 0x2e, 0x41, 0x6e, 0x6e, 0x6f, 0x74, - 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x53, 0x65, 0x6d, 0x61, 0x6e, 0x74, 0x69, 0x63, 0x52, 0x08, - 0x73, 0x65, 0x6d, 0x61, 0x6e, 0x74, 0x69, 0x63, 0x22, 0x28, 0x0a, 0x08, 0x53, 0x65, 0x6d, 0x61, - 0x6e, 0x74, 0x69, 0x63, 0x12, 0x08, 0x0a, 0x04, 0x4e, 0x4f, 0x4e, 0x45, 0x10, 0x00, 0x12, 0x07, - 0x0a, 0x03, 0x53, 0x45, 0x54, 0x10, 0x01, 0x12, 0x09, 0x0a, 0x05, 0x41, 0x4c, 0x49, 0x41, 0x53, - 0x10, 0x02, 0x2a, 0xa7, 0x02, 0x0a, 0x07, 0x45, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x13, - 0x0a, 0x0f, 0x45, 0x44, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x55, 0x4e, 0x4b, 0x4e, 0x4f, 0x57, - 0x4e, 0x10, 0x00, 0x12, 0x13, 0x0a, 0x0e, 0x45, 0x44, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x4c, - 0x45, 0x47, 0x41, 0x43, 0x59, 0x10, 0x84, 0x07, 0x12, 0x13, 0x0a, 0x0e, 0x45, 0x44, 0x49, 0x54, - 0x49, 0x4f, 0x4e, 0x5f, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x32, 0x10, 0xe6, 0x07, 0x12, 0x13, 0x0a, - 0x0e, 0x45, 0x44, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x50, 0x52, 0x4f, 0x54, 0x4f, 0x33, 0x10, - 0xe7, 0x07, 0x12, 0x11, 0x0a, 0x0c, 0x45, 0x44, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x32, 0x30, - 0x32, 0x33, 0x10, 0xe8, 0x07, 0x12, 0x11, 0x0a, 0x0c, 0x45, 0x44, 0x49, 0x54, 0x49, 0x4f, 0x4e, - 0x5f, 0x32, 0x30, 0x32, 0x34, 0x10, 0xe9, 0x07, 0x12, 0x17, 0x0a, 0x13, 0x45, 0x44, 0x49, 0x54, - 0x49, 0x4f, 0x4e, 0x5f, 0x31, 0x5f, 0x54, 0x45, 0x53, 0x54, 0x5f, 0x4f, 0x4e, 0x4c, 0x59, 0x10, - 0x01, 0x12, 0x17, 0x0a, 0x13, 0x45, 0x44, 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x32, 0x5f, 0x54, - 0x45, 0x53, 0x54, 0x5f, 0x4f, 0x4e, 0x4c, 0x59, 0x10, 0x02, 0x12, 0x1d, 0x0a, 0x17, 0x45, 0x44, - 0x49, 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x39, 0x39, 0x39, 0x39, 0x37, 0x5f, 0x54, 0x45, 0x53, 0x54, - 0x5f, 0x4f, 0x4e, 0x4c, 0x59, 0x10, 0x9d, 0x8d, 0x06, 0x12, 0x1d, 0x0a, 0x17, 0x45, 0x44, 0x49, - 0x54, 0x49, 0x4f, 0x4e, 0x5f, 0x39, 0x39, 0x39, 0x39, 0x38, 0x5f, 0x54, 0x45, 0x53, 0x54, 0x5f, - 0x4f, 0x4e, 0x4c, 0x59, 0x10, 0x9e, 0x8d, 0x06, 0x12, 0x1d, 0x0a, 0x17, 0x45, 0x44, 0x49, 0x54, - 0x49, 0x4f, 0x4e, 0x5f, 0x39, 0x39, 0x39, 0x39, 0x39, 0x5f, 0x54, 0x45, 0x53, 0x54, 0x5f, 0x4f, - 0x4e, 0x4c, 0x59, 0x10, 0x9f, 0x8d, 0x06, 0x12, 0x13, 0x0a, 0x0b, 0x45, 0x44, 0x49, 0x54, 0x49, - 0x4f, 0x4e, 0x5f, 0x4d, 0x41, 0x58, 0x10, 0xff, 0xff, 0xff, 0xff, 0x07, 0x42, 0x7e, 0x0a, 0x13, - 0x63, 0x6f, 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x42, 0x10, 0x44, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74, 0x6f, 0x72, 0x50, - 0x72, 0x6f, 0x74, 0x6f, 0x73, 0x48, 0x01, 0x5a, 0x2d, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, - 0x70, 0x74, 0x6f, 0x72, 0x70, 0x62, 0xf8, 0x01, 0x01, 0xa2, 0x02, 0x03, 0x47, 0x50, 0x42, 0xaa, - 0x02, 0x1a, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x52, 0x65, 0x66, 0x6c, 0x65, 0x63, 0x74, 0x69, 0x6f, 0x6e, -} +const file_google_protobuf_descriptor_proto_rawDesc = "" + + "\n" + + " google/protobuf/descriptor.proto\x12\x0fgoogle.protobuf\"[\n" + + "\x11FileDescriptorSet\x128\n" + + "\x04file\x18\x01 \x03(\v2$.google.protobuf.FileDescriptorProtoR\x04file*\f\b\x80\xec\xca\xff\x01\x10\x81\xec\xca\xff\x01\"\xc5\x05\n" + + "\x13FileDescriptorProto\x12\x12\n" + + "\x04name\x18\x01 \x01(\tR\x04name\x12\x18\n" + + "\apackage\x18\x02 \x01(\tR\apackage\x12\x1e\n" + + "\n" + + "dependency\x18\x03 \x03(\tR\n" + + "dependency\x12+\n" + + "\x11public_dependency\x18\n" + + " \x03(\x05R\x10publicDependency\x12'\n" + + "\x0fweak_dependency\x18\v \x03(\x05R\x0eweakDependency\x12+\n" + + "\x11option_dependency\x18\x0f \x03(\tR\x10optionDependency\x12C\n" + + "\fmessage_type\x18\x04 \x03(\v2 .google.protobuf.DescriptorProtoR\vmessageType\x12A\n" + + "\tenum_type\x18\x05 \x03(\v2$.google.protobuf.EnumDescriptorProtoR\benumType\x12A\n" + + "\aservice\x18\x06 \x03(\v2'.google.protobuf.ServiceDescriptorProtoR\aservice\x12C\n" + + "\textension\x18\a \x03(\v2%.google.protobuf.FieldDescriptorProtoR\textension\x126\n" + + "\aoptions\x18\b \x01(\v2\x1c.google.protobuf.FileOptionsR\aoptions\x12I\n" + + "\x10source_code_info\x18\t \x01(\v2\x1f.google.protobuf.SourceCodeInfoR\x0esourceCodeInfo\x12\x16\n" + + "\x06syntax\x18\f \x01(\tR\x06syntax\x122\n" + + "\aedition\x18\x0e \x01(\x0e2\x18.google.protobuf.EditionR\aedition\"\xfc\x06\n" + + "\x0fDescriptorProto\x12\x12\n" + + "\x04name\x18\x01 \x01(\tR\x04name\x12;\n" + + "\x05field\x18\x02 \x03(\v2%.google.protobuf.FieldDescriptorProtoR\x05field\x12C\n" + + "\textension\x18\x06 \x03(\v2%.google.protobuf.FieldDescriptorProtoR\textension\x12A\n" + + "\vnested_type\x18\x03 \x03(\v2 .google.protobuf.DescriptorProtoR\n" + + "nestedType\x12A\n" + + "\tenum_type\x18\x04 \x03(\v2$.google.protobuf.EnumDescriptorProtoR\benumType\x12X\n" + + "\x0fextension_range\x18\x05 \x03(\v2/.google.protobuf.DescriptorProto.ExtensionRangeR\x0eextensionRange\x12D\n" + + "\n" + + "oneof_decl\x18\b \x03(\v2%.google.protobuf.OneofDescriptorProtoR\toneofDecl\x129\n" + + "\aoptions\x18\a \x01(\v2\x1f.google.protobuf.MessageOptionsR\aoptions\x12U\n" + + "\x0ereserved_range\x18\t \x03(\v2..google.protobuf.DescriptorProto.ReservedRangeR\rreservedRange\x12#\n" + + "\rreserved_name\x18\n" + + " \x03(\tR\freservedName\x12A\n" + + "\n" + + "visibility\x18\v \x01(\x0e2!.google.protobuf.SymbolVisibilityR\n" + + "visibility\x1az\n" + + "\x0eExtensionRange\x12\x14\n" + + "\x05start\x18\x01 \x01(\x05R\x05start\x12\x10\n" + + "\x03end\x18\x02 \x01(\x05R\x03end\x12@\n" + + "\aoptions\x18\x03 \x01(\v2&.google.protobuf.ExtensionRangeOptionsR\aoptions\x1a7\n" + + "\rReservedRange\x12\x14\n" + + "\x05start\x18\x01 \x01(\x05R\x05start\x12\x10\n" + + "\x03end\x18\x02 \x01(\x05R\x03end\"\xcc\x04\n" + + "\x15ExtensionRangeOptions\x12X\n" + + "\x14uninterpreted_option\x18\xe7\a \x03(\v2$.google.protobuf.UninterpretedOptionR\x13uninterpretedOption\x12Y\n" + + "\vdeclaration\x18\x02 \x03(\v22.google.protobuf.ExtensionRangeOptions.DeclarationB\x03\x88\x01\x02R\vdeclaration\x127\n" + + "\bfeatures\x182 \x01(\v2\x1b.google.protobuf.FeatureSetR\bfeatures\x12m\n" + + "\fverification\x18\x03 \x01(\x0e28.google.protobuf.ExtensionRangeOptions.VerificationState:\n" + + "UNVERIFIEDB\x03\x88\x01\x02R\fverification\x1a\x94\x01\n" + + "\vDeclaration\x12\x16\n" + + "\x06number\x18\x01 \x01(\x05R\x06number\x12\x1b\n" + + "\tfull_name\x18\x02 \x01(\tR\bfullName\x12\x12\n" + + "\x04type\x18\x03 \x01(\tR\x04type\x12\x1a\n" + + "\breserved\x18\x05 \x01(\bR\breserved\x12\x1a\n" + + "\brepeated\x18\x06 \x01(\bR\brepeatedJ\x04\b\x04\x10\x05\"4\n" + + "\x11VerificationState\x12\x0f\n" + + "\vDECLARATION\x10\x00\x12\x0e\n" + + "\n" + + "UNVERIFIED\x10\x01*\t\b\xe8\a\x10\x80\x80\x80\x80\x02\"\xc1\x06\n" + + "\x14FieldDescriptorProto\x12\x12\n" + + "\x04name\x18\x01 \x01(\tR\x04name\x12\x16\n" + + "\x06number\x18\x03 \x01(\x05R\x06number\x12A\n" + + "\x05label\x18\x04 \x01(\x0e2+.google.protobuf.FieldDescriptorProto.LabelR\x05label\x12>\n" + + "\x04type\x18\x05 \x01(\x0e2*.google.protobuf.FieldDescriptorProto.TypeR\x04type\x12\x1b\n" + + "\ttype_name\x18\x06 \x01(\tR\btypeName\x12\x1a\n" + + "\bextendee\x18\x02 \x01(\tR\bextendee\x12#\n" + + "\rdefault_value\x18\a \x01(\tR\fdefaultValue\x12\x1f\n" + + "\voneof_index\x18\t \x01(\x05R\n" + + "oneofIndex\x12\x1b\n" + + "\tjson_name\x18\n" + + " \x01(\tR\bjsonName\x127\n" + + "\aoptions\x18\b \x01(\v2\x1d.google.protobuf.FieldOptionsR\aoptions\x12'\n" + + "\x0fproto3_optional\x18\x11 \x01(\bR\x0eproto3Optional\"\xb6\x02\n" + + "\x04Type\x12\x0f\n" + + "\vTYPE_DOUBLE\x10\x01\x12\x0e\n" + + "\n" + + "TYPE_FLOAT\x10\x02\x12\x0e\n" + + "\n" + + "TYPE_INT64\x10\x03\x12\x0f\n" + + "\vTYPE_UINT64\x10\x04\x12\x0e\n" + + "\n" + + "TYPE_INT32\x10\x05\x12\x10\n" + + "\fTYPE_FIXED64\x10\x06\x12\x10\n" + + "\fTYPE_FIXED32\x10\a\x12\r\n" + + "\tTYPE_BOOL\x10\b\x12\x0f\n" + + "\vTYPE_STRING\x10\t\x12\x0e\n" + + "\n" + + "TYPE_GROUP\x10\n" + + "\x12\x10\n" + + "\fTYPE_MESSAGE\x10\v\x12\x0e\n" + + "\n" + + "TYPE_BYTES\x10\f\x12\x0f\n" + + "\vTYPE_UINT32\x10\r\x12\r\n" + + "\tTYPE_ENUM\x10\x0e\x12\x11\n" + + "\rTYPE_SFIXED32\x10\x0f\x12\x11\n" + + "\rTYPE_SFIXED64\x10\x10\x12\x0f\n" + + "\vTYPE_SINT32\x10\x11\x12\x0f\n" + + "\vTYPE_SINT64\x10\x12\"C\n" + + "\x05Label\x12\x12\n" + + "\x0eLABEL_OPTIONAL\x10\x01\x12\x12\n" + + "\x0eLABEL_REPEATED\x10\x03\x12\x12\n" + + "\x0eLABEL_REQUIRED\x10\x02\"c\n" + + "\x14OneofDescriptorProto\x12\x12\n" + + "\x04name\x18\x01 \x01(\tR\x04name\x127\n" + + "\aoptions\x18\x02 \x01(\v2\x1d.google.protobuf.OneofOptionsR\aoptions\"\xa6\x03\n" + + "\x13EnumDescriptorProto\x12\x12\n" + + "\x04name\x18\x01 \x01(\tR\x04name\x12?\n" + + "\x05value\x18\x02 \x03(\v2).google.protobuf.EnumValueDescriptorProtoR\x05value\x126\n" + + "\aoptions\x18\x03 \x01(\v2\x1c.google.protobuf.EnumOptionsR\aoptions\x12]\n" + + "\x0ereserved_range\x18\x04 \x03(\v26.google.protobuf.EnumDescriptorProto.EnumReservedRangeR\rreservedRange\x12#\n" + + "\rreserved_name\x18\x05 \x03(\tR\freservedName\x12A\n" + + "\n" + + "visibility\x18\x06 \x01(\x0e2!.google.protobuf.SymbolVisibilityR\n" + + "visibility\x1a;\n" + + "\x11EnumReservedRange\x12\x14\n" + + "\x05start\x18\x01 \x01(\x05R\x05start\x12\x10\n" + + "\x03end\x18\x02 \x01(\x05R\x03end\"\x83\x01\n" + + "\x18EnumValueDescriptorProto\x12\x12\n" + + "\x04name\x18\x01 \x01(\tR\x04name\x12\x16\n" + + "\x06number\x18\x02 \x01(\x05R\x06number\x12;\n" + + "\aoptions\x18\x03 \x01(\v2!.google.protobuf.EnumValueOptionsR\aoptions\"\xb5\x01\n" + + "\x16ServiceDescriptorProto\x12\x12\n" + + "\x04name\x18\x01 \x01(\tR\x04name\x12>\n" + + "\x06method\x18\x02 \x03(\v2&.google.protobuf.MethodDescriptorProtoR\x06method\x129\n" + + "\aoptions\x18\x03 \x01(\v2\x1f.google.protobuf.ServiceOptionsR\aoptionsJ\x04\b\x04\x10\x05R\x06stream\"\x89\x02\n" + + "\x15MethodDescriptorProto\x12\x12\n" + + "\x04name\x18\x01 \x01(\tR\x04name\x12\x1d\n" + + "\n" + + "input_type\x18\x02 \x01(\tR\tinputType\x12\x1f\n" + + "\voutput_type\x18\x03 \x01(\tR\n" + + "outputType\x128\n" + + "\aoptions\x18\x04 \x01(\v2\x1e.google.protobuf.MethodOptionsR\aoptions\x120\n" + + "\x10client_streaming\x18\x05 \x01(\b:\x05falseR\x0fclientStreaming\x120\n" + + "\x10server_streaming\x18\x06 \x01(\b:\x05falseR\x0fserverStreaming\"\xad\t\n" + + "\vFileOptions\x12!\n" + + "\fjava_package\x18\x01 \x01(\tR\vjavaPackage\x120\n" + + "\x14java_outer_classname\x18\b \x01(\tR\x12javaOuterClassname\x125\n" + + "\x13java_multiple_files\x18\n" + + " \x01(\b:\x05falseR\x11javaMultipleFiles\x12D\n" + + "\x1djava_generate_equals_and_hash\x18\x14 \x01(\bB\x02\x18\x01R\x19javaGenerateEqualsAndHash\x12:\n" + + "\x16java_string_check_utf8\x18\x1b \x01(\b:\x05falseR\x13javaStringCheckUtf8\x12S\n" + + "\foptimize_for\x18\t \x01(\x0e2).google.protobuf.FileOptions.OptimizeMode:\x05SPEEDR\voptimizeFor\x12\x1d\n" + + "\n" + + "go_package\x18\v \x01(\tR\tgoPackage\x125\n" + + "\x13cc_generic_services\x18\x10 \x01(\b:\x05falseR\x11ccGenericServices\x129\n" + + "\x15java_generic_services\x18\x11 \x01(\b:\x05falseR\x13javaGenericServices\x125\n" + + "\x13py_generic_services\x18\x12 \x01(\b:\x05falseR\x11pyGenericServices\x12%\n" + + "\n" + + "deprecated\x18\x17 \x01(\b:\x05falseR\n" + + "deprecated\x12.\n" + + "\x10cc_enable_arenas\x18\x1f \x01(\b:\x04trueR\x0eccEnableArenas\x12*\n" + + "\x11objc_class_prefix\x18$ \x01(\tR\x0fobjcClassPrefix\x12)\n" + + "\x10csharp_namespace\x18% \x01(\tR\x0fcsharpNamespace\x12!\n" + + "\fswift_prefix\x18' \x01(\tR\vswiftPrefix\x12(\n" + + "\x10php_class_prefix\x18( \x01(\tR\x0ephpClassPrefix\x12#\n" + + "\rphp_namespace\x18) \x01(\tR\fphpNamespace\x124\n" + + "\x16php_metadata_namespace\x18, \x01(\tR\x14phpMetadataNamespace\x12!\n" + + "\fruby_package\x18- \x01(\tR\vrubyPackage\x127\n" + + "\bfeatures\x182 \x01(\v2\x1b.google.protobuf.FeatureSetR\bfeatures\x12X\n" + + "\x14uninterpreted_option\x18\xe7\a \x03(\v2$.google.protobuf.UninterpretedOptionR\x13uninterpretedOption\":\n" + + "\fOptimizeMode\x12\t\n" + + "\x05SPEED\x10\x01\x12\r\n" + + "\tCODE_SIZE\x10\x02\x12\x10\n" + + "\fLITE_RUNTIME\x10\x03*\t\b\xe8\a\x10\x80\x80\x80\x80\x02J\x04\b*\x10+J\x04\b&\x10'R\x14php_generic_services\"\xf4\x03\n" + + "\x0eMessageOptions\x12<\n" + + "\x17message_set_wire_format\x18\x01 \x01(\b:\x05falseR\x14messageSetWireFormat\x12L\n" + + "\x1fno_standard_descriptor_accessor\x18\x02 \x01(\b:\x05falseR\x1cnoStandardDescriptorAccessor\x12%\n" + + "\n" + + "deprecated\x18\x03 \x01(\b:\x05falseR\n" + + "deprecated\x12\x1b\n" + + "\tmap_entry\x18\a \x01(\bR\bmapEntry\x12V\n" + + "&deprecated_legacy_json_field_conflicts\x18\v \x01(\bB\x02\x18\x01R\"deprecatedLegacyJsonFieldConflicts\x127\n" + + "\bfeatures\x18\f \x01(\v2\x1b.google.protobuf.FeatureSetR\bfeatures\x12X\n" + + "\x14uninterpreted_option\x18\xe7\a \x03(\v2$.google.protobuf.UninterpretedOptionR\x13uninterpretedOption*\t\b\xe8\a\x10\x80\x80\x80\x80\x02J\x04\b\x04\x10\x05J\x04\b\x05\x10\x06J\x04\b\x06\x10\aJ\x04\b\b\x10\tJ\x04\b\t\x10\n" + + "\"\xa1\r\n" + + "\fFieldOptions\x12A\n" + + "\x05ctype\x18\x01 \x01(\x0e2#.google.protobuf.FieldOptions.CType:\x06STRINGR\x05ctype\x12\x16\n" + + "\x06packed\x18\x02 \x01(\bR\x06packed\x12G\n" + + "\x06jstype\x18\x06 \x01(\x0e2$.google.protobuf.FieldOptions.JSType:\tJS_NORMALR\x06jstype\x12\x19\n" + + "\x04lazy\x18\x05 \x01(\b:\x05falseR\x04lazy\x12.\n" + + "\x0funverified_lazy\x18\x0f \x01(\b:\x05falseR\x0eunverifiedLazy\x12%\n" + + "\n" + + "deprecated\x18\x03 \x01(\b:\x05falseR\n" + + "deprecated\x12\x1d\n" + + "\x04weak\x18\n" + + " \x01(\b:\x05falseB\x02\x18\x01R\x04weak\x12(\n" + + "\fdebug_redact\x18\x10 \x01(\b:\x05falseR\vdebugRedact\x12K\n" + + "\tretention\x18\x11 \x01(\x0e2-.google.protobuf.FieldOptions.OptionRetentionR\tretention\x12H\n" + + "\atargets\x18\x13 \x03(\x0e2..google.protobuf.FieldOptions.OptionTargetTypeR\atargets\x12W\n" + + "\x10edition_defaults\x18\x14 \x03(\v2,.google.protobuf.FieldOptions.EditionDefaultR\x0feditionDefaults\x127\n" + + "\bfeatures\x18\x15 \x01(\v2\x1b.google.protobuf.FeatureSetR\bfeatures\x12U\n" + + "\x0ffeature_support\x18\x16 \x01(\v2,.google.protobuf.FieldOptions.FeatureSupportR\x0efeatureSupport\x12X\n" + + "\x14uninterpreted_option\x18\xe7\a \x03(\v2$.google.protobuf.UninterpretedOptionR\x13uninterpretedOption\x1aZ\n" + + "\x0eEditionDefault\x122\n" + + "\aedition\x18\x03 \x01(\x0e2\x18.google.protobuf.EditionR\aedition\x12\x14\n" + + "\x05value\x18\x02 \x01(\tR\x05value\x1a\x96\x02\n" + + "\x0eFeatureSupport\x12G\n" + + "\x12edition_introduced\x18\x01 \x01(\x0e2\x18.google.protobuf.EditionR\x11editionIntroduced\x12G\n" + + "\x12edition_deprecated\x18\x02 \x01(\x0e2\x18.google.protobuf.EditionR\x11editionDeprecated\x12/\n" + + "\x13deprecation_warning\x18\x03 \x01(\tR\x12deprecationWarning\x12A\n" + + "\x0fedition_removed\x18\x04 \x01(\x0e2\x18.google.protobuf.EditionR\x0eeditionRemoved\"/\n" + + "\x05CType\x12\n" + + "\n" + + "\x06STRING\x10\x00\x12\b\n" + + "\x04CORD\x10\x01\x12\x10\n" + + "\fSTRING_PIECE\x10\x02\"5\n" + + "\x06JSType\x12\r\n" + + "\tJS_NORMAL\x10\x00\x12\r\n" + + "\tJS_STRING\x10\x01\x12\r\n" + + "\tJS_NUMBER\x10\x02\"U\n" + + "\x0fOptionRetention\x12\x15\n" + + "\x11RETENTION_UNKNOWN\x10\x00\x12\x15\n" + + "\x11RETENTION_RUNTIME\x10\x01\x12\x14\n" + + "\x10RETENTION_SOURCE\x10\x02\"\x8c\x02\n" + + "\x10OptionTargetType\x12\x17\n" + + "\x13TARGET_TYPE_UNKNOWN\x10\x00\x12\x14\n" + + "\x10TARGET_TYPE_FILE\x10\x01\x12\x1f\n" + + "\x1bTARGET_TYPE_EXTENSION_RANGE\x10\x02\x12\x17\n" + + "\x13TARGET_TYPE_MESSAGE\x10\x03\x12\x15\n" + + "\x11TARGET_TYPE_FIELD\x10\x04\x12\x15\n" + + "\x11TARGET_TYPE_ONEOF\x10\x05\x12\x14\n" + + "\x10TARGET_TYPE_ENUM\x10\x06\x12\x1a\n" + + "\x16TARGET_TYPE_ENUM_ENTRY\x10\a\x12\x17\n" + + "\x13TARGET_TYPE_SERVICE\x10\b\x12\x16\n" + + "\x12TARGET_TYPE_METHOD\x10\t*\t\b\xe8\a\x10\x80\x80\x80\x80\x02J\x04\b\x04\x10\x05J\x04\b\x12\x10\x13\"\xac\x01\n" + + "\fOneofOptions\x127\n" + + "\bfeatures\x18\x01 \x01(\v2\x1b.google.protobuf.FeatureSetR\bfeatures\x12X\n" + + "\x14uninterpreted_option\x18\xe7\a \x03(\v2$.google.protobuf.UninterpretedOptionR\x13uninterpretedOption*\t\b\xe8\a\x10\x80\x80\x80\x80\x02\"\xd1\x02\n" + + "\vEnumOptions\x12\x1f\n" + + "\vallow_alias\x18\x02 \x01(\bR\n" + + "allowAlias\x12%\n" + + "\n" + + "deprecated\x18\x03 \x01(\b:\x05falseR\n" + + "deprecated\x12V\n" + + "&deprecated_legacy_json_field_conflicts\x18\x06 \x01(\bB\x02\x18\x01R\"deprecatedLegacyJsonFieldConflicts\x127\n" + + "\bfeatures\x18\a \x01(\v2\x1b.google.protobuf.FeatureSetR\bfeatures\x12X\n" + + "\x14uninterpreted_option\x18\xe7\a \x03(\v2$.google.protobuf.UninterpretedOptionR\x13uninterpretedOption*\t\b\xe8\a\x10\x80\x80\x80\x80\x02J\x04\b\x05\x10\x06\"\xd8\x02\n" + + "\x10EnumValueOptions\x12%\n" + + "\n" + + "deprecated\x18\x01 \x01(\b:\x05falseR\n" + + "deprecated\x127\n" + + "\bfeatures\x18\x02 \x01(\v2\x1b.google.protobuf.FeatureSetR\bfeatures\x12(\n" + + "\fdebug_redact\x18\x03 \x01(\b:\x05falseR\vdebugRedact\x12U\n" + + "\x0ffeature_support\x18\x04 \x01(\v2,.google.protobuf.FieldOptions.FeatureSupportR\x0efeatureSupport\x12X\n" + + "\x14uninterpreted_option\x18\xe7\a \x03(\v2$.google.protobuf.UninterpretedOptionR\x13uninterpretedOption*\t\b\xe8\a\x10\x80\x80\x80\x80\x02\"\xd5\x01\n" + + "\x0eServiceOptions\x127\n" + + "\bfeatures\x18\" \x01(\v2\x1b.google.protobuf.FeatureSetR\bfeatures\x12%\n" + + "\n" + + "deprecated\x18! \x01(\b:\x05falseR\n" + + "deprecated\x12X\n" + + "\x14uninterpreted_option\x18\xe7\a \x03(\v2$.google.protobuf.UninterpretedOptionR\x13uninterpretedOption*\t\b\xe8\a\x10\x80\x80\x80\x80\x02\"\x99\x03\n" + + "\rMethodOptions\x12%\n" + + "\n" + + "deprecated\x18! \x01(\b:\x05falseR\n" + + "deprecated\x12q\n" + + "\x11idempotency_level\x18\" \x01(\x0e2/.google.protobuf.MethodOptions.IdempotencyLevel:\x13IDEMPOTENCY_UNKNOWNR\x10idempotencyLevel\x127\n" + + "\bfeatures\x18# \x01(\v2\x1b.google.protobuf.FeatureSetR\bfeatures\x12X\n" + + "\x14uninterpreted_option\x18\xe7\a \x03(\v2$.google.protobuf.UninterpretedOptionR\x13uninterpretedOption\"P\n" + + "\x10IdempotencyLevel\x12\x17\n" + + "\x13IDEMPOTENCY_UNKNOWN\x10\x00\x12\x13\n" + + "\x0fNO_SIDE_EFFECTS\x10\x01\x12\x0e\n" + + "\n" + + "IDEMPOTENT\x10\x02*\t\b\xe8\a\x10\x80\x80\x80\x80\x02\"\x9a\x03\n" + + "\x13UninterpretedOption\x12A\n" + + "\x04name\x18\x02 \x03(\v2-.google.protobuf.UninterpretedOption.NamePartR\x04name\x12)\n" + + "\x10identifier_value\x18\x03 \x01(\tR\x0fidentifierValue\x12,\n" + + "\x12positive_int_value\x18\x04 \x01(\x04R\x10positiveIntValue\x12,\n" + + "\x12negative_int_value\x18\x05 \x01(\x03R\x10negativeIntValue\x12!\n" + + "\fdouble_value\x18\x06 \x01(\x01R\vdoubleValue\x12!\n" + + "\fstring_value\x18\a \x01(\fR\vstringValue\x12'\n" + + "\x0faggregate_value\x18\b \x01(\tR\x0eaggregateValue\x1aJ\n" + + "\bNamePart\x12\x1b\n" + + "\tname_part\x18\x01 \x02(\tR\bnamePart\x12!\n" + + "\fis_extension\x18\x02 \x02(\bR\visExtension\"\x8e\x0f\n" + + "\n" + + "FeatureSet\x12\x91\x01\n" + + "\x0efield_presence\x18\x01 \x01(\x0e2).google.protobuf.FeatureSet.FieldPresenceB?\x88\x01\x01\x98\x01\x04\x98\x01\x01\xa2\x01\r\x12\bEXPLICIT\x18\x84\a\xa2\x01\r\x12\bIMPLICIT\x18\xe7\a\xa2\x01\r\x12\bEXPLICIT\x18\xe8\a\xb2\x01\x03\b\xe8\aR\rfieldPresence\x12l\n" + + "\tenum_type\x18\x02 \x01(\x0e2$.google.protobuf.FeatureSet.EnumTypeB)\x88\x01\x01\x98\x01\x06\x98\x01\x01\xa2\x01\v\x12\x06CLOSED\x18\x84\a\xa2\x01\t\x12\x04OPEN\x18\xe7\a\xb2\x01\x03\b\xe8\aR\benumType\x12\x98\x01\n" + + "\x17repeated_field_encoding\x18\x03 \x01(\x0e21.google.protobuf.FeatureSet.RepeatedFieldEncodingB-\x88\x01\x01\x98\x01\x04\x98\x01\x01\xa2\x01\r\x12\bEXPANDED\x18\x84\a\xa2\x01\v\x12\x06PACKED\x18\xe7\a\xb2\x01\x03\b\xe8\aR\x15repeatedFieldEncoding\x12~\n" + + "\x0futf8_validation\x18\x04 \x01(\x0e2*.google.protobuf.FeatureSet.Utf8ValidationB)\x88\x01\x01\x98\x01\x04\x98\x01\x01\xa2\x01\t\x12\x04NONE\x18\x84\a\xa2\x01\v\x12\x06VERIFY\x18\xe7\a\xb2\x01\x03\b\xe8\aR\x0eutf8Validation\x12~\n" + + "\x10message_encoding\x18\x05 \x01(\x0e2+.google.protobuf.FeatureSet.MessageEncodingB&\x88\x01\x01\x98\x01\x04\x98\x01\x01\xa2\x01\x14\x12\x0fLENGTH_PREFIXED\x18\x84\a\xb2\x01\x03\b\xe8\aR\x0fmessageEncoding\x12\x82\x01\n" + + "\vjson_format\x18\x06 \x01(\x0e2&.google.protobuf.FeatureSet.JsonFormatB9\x88\x01\x01\x98\x01\x03\x98\x01\x06\x98\x01\x01\xa2\x01\x17\x12\x12LEGACY_BEST_EFFORT\x18\x84\a\xa2\x01\n" + + "\x12\x05ALLOW\x18\xe7\a\xb2\x01\x03\b\xe8\aR\n" + + "jsonFormat\x12\xab\x01\n" + + "\x14enforce_naming_style\x18\a \x01(\x0e2..google.protobuf.FeatureSet.EnforceNamingStyleBI\x88\x01\x02\x98\x01\x01\x98\x01\x02\x98\x01\x03\x98\x01\x04\x98\x01\x05\x98\x01\x06\x98\x01\a\x98\x01\b\x98\x01\t\xa2\x01\x11\x12\fSTYLE_LEGACY\x18\x84\a\xa2\x01\x0e\x12\tSTYLE2024\x18\xe9\a\xb2\x01\x03\b\xe9\aR\x12enforceNamingStyle\x12\xb9\x01\n" + + "\x19default_symbol_visibility\x18\b \x01(\x0e2E.google.protobuf.FeatureSet.VisibilityFeature.DefaultSymbolVisibilityB6\x88\x01\x02\x98\x01\x01\xa2\x01\x0f\x12\n" + + "EXPORT_ALL\x18\x84\a\xa2\x01\x15\x12\x10EXPORT_TOP_LEVEL\x18\xe9\a\xb2\x01\x03\b\xe9\aR\x17defaultSymbolVisibility\x1a\xa1\x01\n" + + "\x11VisibilityFeature\"\x81\x01\n" + + "\x17DefaultSymbolVisibility\x12%\n" + + "!DEFAULT_SYMBOL_VISIBILITY_UNKNOWN\x10\x00\x12\x0e\n" + + "\n" + + "EXPORT_ALL\x10\x01\x12\x14\n" + + "\x10EXPORT_TOP_LEVEL\x10\x02\x12\r\n" + + "\tLOCAL_ALL\x10\x03\x12\n" + + "\n" + + "\x06STRICT\x10\x04J\b\b\x01\x10\x80\x80\x80\x80\x02\"\\\n" + + "\rFieldPresence\x12\x1a\n" + + "\x16FIELD_PRESENCE_UNKNOWN\x10\x00\x12\f\n" + + "\bEXPLICIT\x10\x01\x12\f\n" + + "\bIMPLICIT\x10\x02\x12\x13\n" + + "\x0fLEGACY_REQUIRED\x10\x03\"7\n" + + "\bEnumType\x12\x15\n" + + "\x11ENUM_TYPE_UNKNOWN\x10\x00\x12\b\n" + + "\x04OPEN\x10\x01\x12\n" + + "\n" + + "\x06CLOSED\x10\x02\"V\n" + + "\x15RepeatedFieldEncoding\x12#\n" + + "\x1fREPEATED_FIELD_ENCODING_UNKNOWN\x10\x00\x12\n" + + "\n" + + "\x06PACKED\x10\x01\x12\f\n" + + "\bEXPANDED\x10\x02\"I\n" + + "\x0eUtf8Validation\x12\x1b\n" + + "\x17UTF8_VALIDATION_UNKNOWN\x10\x00\x12\n" + + "\n" + + "\x06VERIFY\x10\x02\x12\b\n" + + "\x04NONE\x10\x03\"\x04\b\x01\x10\x01\"S\n" + + "\x0fMessageEncoding\x12\x1c\n" + + "\x18MESSAGE_ENCODING_UNKNOWN\x10\x00\x12\x13\n" + + "\x0fLENGTH_PREFIXED\x10\x01\x12\r\n" + + "\tDELIMITED\x10\x02\"H\n" + + "\n" + + "JsonFormat\x12\x17\n" + + "\x13JSON_FORMAT_UNKNOWN\x10\x00\x12\t\n" + + "\x05ALLOW\x10\x01\x12\x16\n" + + "\x12LEGACY_BEST_EFFORT\x10\x02\"W\n" + + "\x12EnforceNamingStyle\x12 \n" + + "\x1cENFORCE_NAMING_STYLE_UNKNOWN\x10\x00\x12\r\n" + + "\tSTYLE2024\x10\x01\x12\x10\n" + + "\fSTYLE_LEGACY\x10\x02*\x06\b\xe8\a\x10\x8bN*\x06\b\x8bN\x10\x90N*\x06\b\x90N\x10\x91NJ\x06\b\xe7\a\x10\xe8\a\"\xef\x03\n" + + "\x12FeatureSetDefaults\x12X\n" + + "\bdefaults\x18\x01 \x03(\v2<.google.protobuf.FeatureSetDefaults.FeatureSetEditionDefaultR\bdefaults\x12A\n" + + "\x0fminimum_edition\x18\x04 \x01(\x0e2\x18.google.protobuf.EditionR\x0eminimumEdition\x12A\n" + + "\x0fmaximum_edition\x18\x05 \x01(\x0e2\x18.google.protobuf.EditionR\x0emaximumEdition\x1a\xf8\x01\n" + + "\x18FeatureSetEditionDefault\x122\n" + + "\aedition\x18\x03 \x01(\x0e2\x18.google.protobuf.EditionR\aedition\x12N\n" + + "\x14overridable_features\x18\x04 \x01(\v2\x1b.google.protobuf.FeatureSetR\x13overridableFeatures\x12B\n" + + "\x0efixed_features\x18\x05 \x01(\v2\x1b.google.protobuf.FeatureSetR\rfixedFeaturesJ\x04\b\x01\x10\x02J\x04\b\x02\x10\x03R\bfeatures\"\xb5\x02\n" + + "\x0eSourceCodeInfo\x12D\n" + + "\blocation\x18\x01 \x03(\v2(.google.protobuf.SourceCodeInfo.LocationR\blocation\x1a\xce\x01\n" + + "\bLocation\x12\x16\n" + + "\x04path\x18\x01 \x03(\x05B\x02\x10\x01R\x04path\x12\x16\n" + + "\x04span\x18\x02 \x03(\x05B\x02\x10\x01R\x04span\x12)\n" + + "\x10leading_comments\x18\x03 \x01(\tR\x0fleadingComments\x12+\n" + + "\x11trailing_comments\x18\x04 \x01(\tR\x10trailingComments\x12:\n" + + "\x19leading_detached_comments\x18\x06 \x03(\tR\x17leadingDetachedComments*\f\b\x80\xec\xca\xff\x01\x10\x81\xec\xca\xff\x01\"\xd0\x02\n" + + "\x11GeneratedCodeInfo\x12M\n" + + "\n" + + "annotation\x18\x01 \x03(\v2-.google.protobuf.GeneratedCodeInfo.AnnotationR\n" + + "annotation\x1a\xeb\x01\n" + + "\n" + + "Annotation\x12\x16\n" + + "\x04path\x18\x01 \x03(\x05B\x02\x10\x01R\x04path\x12\x1f\n" + + "\vsource_file\x18\x02 \x01(\tR\n" + + "sourceFile\x12\x14\n" + + "\x05begin\x18\x03 \x01(\x05R\x05begin\x12\x10\n" + + "\x03end\x18\x04 \x01(\x05R\x03end\x12R\n" + + "\bsemantic\x18\x05 \x01(\x0e26.google.protobuf.GeneratedCodeInfo.Annotation.SemanticR\bsemantic\"(\n" + + "\bSemantic\x12\b\n" + + "\x04NONE\x10\x00\x12\a\n" + + "\x03SET\x10\x01\x12\t\n" + + "\x05ALIAS\x10\x02*\xbe\x02\n" + + "\aEdition\x12\x13\n" + + "\x0fEDITION_UNKNOWN\x10\x00\x12\x13\n" + + "\x0eEDITION_LEGACY\x10\x84\a\x12\x13\n" + + "\x0eEDITION_PROTO2\x10\xe6\a\x12\x13\n" + + "\x0eEDITION_PROTO3\x10\xe7\a\x12\x11\n" + + "\fEDITION_2023\x10\xe8\a\x12\x11\n" + + "\fEDITION_2024\x10\xe9\a\x12\x15\n" + + "\x10EDITION_UNSTABLE\x10\x8fN\x12\x17\n" + + "\x13EDITION_1_TEST_ONLY\x10\x01\x12\x17\n" + + "\x13EDITION_2_TEST_ONLY\x10\x02\x12\x1d\n" + + "\x17EDITION_99997_TEST_ONLY\x10\x9d\x8d\x06\x12\x1d\n" + + "\x17EDITION_99998_TEST_ONLY\x10\x9e\x8d\x06\x12\x1d\n" + + "\x17EDITION_99999_TEST_ONLY\x10\x9f\x8d\x06\x12\x13\n" + + "\vEDITION_MAX\x10\xff\xff\xff\xff\a*U\n" + + "\x10SymbolVisibility\x12\x14\n" + + "\x10VISIBILITY_UNSET\x10\x00\x12\x14\n" + + "\x10VISIBILITY_LOCAL\x10\x01\x12\x15\n" + + "\x11VISIBILITY_EXPORT\x10\x02B~\n" + + "\x13com.google.protobufB\x10DescriptorProtosH\x01Z-google.golang.org/protobuf/types/descriptorpb\xf8\x01\x01\xa2\x02\x03GPB\xaa\x02\x1aGoogle.Protobuf.Reflection" var ( file_google_protobuf_descriptor_proto_rawDescOnce sync.Once - file_google_protobuf_descriptor_proto_rawDescData = file_google_protobuf_descriptor_proto_rawDesc + file_google_protobuf_descriptor_proto_rawDescData []byte ) func file_google_protobuf_descriptor_proto_rawDescGZIP() []byte { file_google_protobuf_descriptor_proto_rawDescOnce.Do(func() { - file_google_protobuf_descriptor_proto_rawDescData = protoimpl.X.CompressGZIP(file_google_protobuf_descriptor_proto_rawDescData) + file_google_protobuf_descriptor_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_google_protobuf_descriptor_proto_rawDesc), len(file_google_protobuf_descriptor_proto_rawDesc))) }) return file_google_protobuf_descriptor_proto_rawDescData } -var file_google_protobuf_descriptor_proto_enumTypes = make([]protoimpl.EnumInfo, 17) -var file_google_protobuf_descriptor_proto_msgTypes = make([]protoimpl.MessageInfo, 33) +var file_google_protobuf_descriptor_proto_enumTypes = make([]protoimpl.EnumInfo, 20) +var file_google_protobuf_descriptor_proto_msgTypes = make([]protoimpl.MessageInfo, 34) var file_google_protobuf_descriptor_proto_goTypes = []any{ - (Edition)(0), // 0: google.protobuf.Edition - (ExtensionRangeOptions_VerificationState)(0), // 1: google.protobuf.ExtensionRangeOptions.VerificationState - (FieldDescriptorProto_Type)(0), // 2: google.protobuf.FieldDescriptorProto.Type - (FieldDescriptorProto_Label)(0), // 3: google.protobuf.FieldDescriptorProto.Label - (FileOptions_OptimizeMode)(0), // 4: google.protobuf.FileOptions.OptimizeMode - (FieldOptions_CType)(0), // 5: google.protobuf.FieldOptions.CType - (FieldOptions_JSType)(0), // 6: google.protobuf.FieldOptions.JSType - (FieldOptions_OptionRetention)(0), // 7: google.protobuf.FieldOptions.OptionRetention - (FieldOptions_OptionTargetType)(0), // 8: google.protobuf.FieldOptions.OptionTargetType - (MethodOptions_IdempotencyLevel)(0), // 9: google.protobuf.MethodOptions.IdempotencyLevel - (FeatureSet_FieldPresence)(0), // 10: google.protobuf.FeatureSet.FieldPresence - (FeatureSet_EnumType)(0), // 11: google.protobuf.FeatureSet.EnumType - (FeatureSet_RepeatedFieldEncoding)(0), // 12: google.protobuf.FeatureSet.RepeatedFieldEncoding - (FeatureSet_Utf8Validation)(0), // 13: google.protobuf.FeatureSet.Utf8Validation - (FeatureSet_MessageEncoding)(0), // 14: google.protobuf.FeatureSet.MessageEncoding - (FeatureSet_JsonFormat)(0), // 15: google.protobuf.FeatureSet.JsonFormat - (GeneratedCodeInfo_Annotation_Semantic)(0), // 16: google.protobuf.GeneratedCodeInfo.Annotation.Semantic - (*FileDescriptorSet)(nil), // 17: google.protobuf.FileDescriptorSet - (*FileDescriptorProto)(nil), // 18: google.protobuf.FileDescriptorProto - (*DescriptorProto)(nil), // 19: google.protobuf.DescriptorProto - (*ExtensionRangeOptions)(nil), // 20: google.protobuf.ExtensionRangeOptions - (*FieldDescriptorProto)(nil), // 21: google.protobuf.FieldDescriptorProto - (*OneofDescriptorProto)(nil), // 22: google.protobuf.OneofDescriptorProto - (*EnumDescriptorProto)(nil), // 23: google.protobuf.EnumDescriptorProto - (*EnumValueDescriptorProto)(nil), // 24: google.protobuf.EnumValueDescriptorProto - (*ServiceDescriptorProto)(nil), // 25: google.protobuf.ServiceDescriptorProto - (*MethodDescriptorProto)(nil), // 26: google.protobuf.MethodDescriptorProto - (*FileOptions)(nil), // 27: google.protobuf.FileOptions - (*MessageOptions)(nil), // 28: google.protobuf.MessageOptions - (*FieldOptions)(nil), // 29: google.protobuf.FieldOptions - (*OneofOptions)(nil), // 30: google.protobuf.OneofOptions - (*EnumOptions)(nil), // 31: google.protobuf.EnumOptions - (*EnumValueOptions)(nil), // 32: google.protobuf.EnumValueOptions - (*ServiceOptions)(nil), // 33: google.protobuf.ServiceOptions - (*MethodOptions)(nil), // 34: google.protobuf.MethodOptions - (*UninterpretedOption)(nil), // 35: google.protobuf.UninterpretedOption - (*FeatureSet)(nil), // 36: google.protobuf.FeatureSet - (*FeatureSetDefaults)(nil), // 37: google.protobuf.FeatureSetDefaults - (*SourceCodeInfo)(nil), // 38: google.protobuf.SourceCodeInfo - (*GeneratedCodeInfo)(nil), // 39: google.protobuf.GeneratedCodeInfo - (*DescriptorProto_ExtensionRange)(nil), // 40: google.protobuf.DescriptorProto.ExtensionRange - (*DescriptorProto_ReservedRange)(nil), // 41: google.protobuf.DescriptorProto.ReservedRange - (*ExtensionRangeOptions_Declaration)(nil), // 42: google.protobuf.ExtensionRangeOptions.Declaration - (*EnumDescriptorProto_EnumReservedRange)(nil), // 43: google.protobuf.EnumDescriptorProto.EnumReservedRange - (*FieldOptions_EditionDefault)(nil), // 44: google.protobuf.FieldOptions.EditionDefault - (*FieldOptions_FeatureSupport)(nil), // 45: google.protobuf.FieldOptions.FeatureSupport - (*UninterpretedOption_NamePart)(nil), // 46: google.protobuf.UninterpretedOption.NamePart - (*FeatureSetDefaults_FeatureSetEditionDefault)(nil), // 47: google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault - (*SourceCodeInfo_Location)(nil), // 48: google.protobuf.SourceCodeInfo.Location - (*GeneratedCodeInfo_Annotation)(nil), // 49: google.protobuf.GeneratedCodeInfo.Annotation + (Edition)(0), // 0: google.protobuf.Edition + (SymbolVisibility)(0), // 1: google.protobuf.SymbolVisibility + (ExtensionRangeOptions_VerificationState)(0), // 2: google.protobuf.ExtensionRangeOptions.VerificationState + (FieldDescriptorProto_Type)(0), // 3: google.protobuf.FieldDescriptorProto.Type + (FieldDescriptorProto_Label)(0), // 4: google.protobuf.FieldDescriptorProto.Label + (FileOptions_OptimizeMode)(0), // 5: google.protobuf.FileOptions.OptimizeMode + (FieldOptions_CType)(0), // 6: google.protobuf.FieldOptions.CType + (FieldOptions_JSType)(0), // 7: google.protobuf.FieldOptions.JSType + (FieldOptions_OptionRetention)(0), // 8: google.protobuf.FieldOptions.OptionRetention + (FieldOptions_OptionTargetType)(0), // 9: google.protobuf.FieldOptions.OptionTargetType + (MethodOptions_IdempotencyLevel)(0), // 10: google.protobuf.MethodOptions.IdempotencyLevel + (FeatureSet_FieldPresence)(0), // 11: google.protobuf.FeatureSet.FieldPresence + (FeatureSet_EnumType)(0), // 12: google.protobuf.FeatureSet.EnumType + (FeatureSet_RepeatedFieldEncoding)(0), // 13: google.protobuf.FeatureSet.RepeatedFieldEncoding + (FeatureSet_Utf8Validation)(0), // 14: google.protobuf.FeatureSet.Utf8Validation + (FeatureSet_MessageEncoding)(0), // 15: google.protobuf.FeatureSet.MessageEncoding + (FeatureSet_JsonFormat)(0), // 16: google.protobuf.FeatureSet.JsonFormat + (FeatureSet_EnforceNamingStyle)(0), // 17: google.protobuf.FeatureSet.EnforceNamingStyle + (FeatureSet_VisibilityFeature_DefaultSymbolVisibility)(0), // 18: google.protobuf.FeatureSet.VisibilityFeature.DefaultSymbolVisibility + (GeneratedCodeInfo_Annotation_Semantic)(0), // 19: google.protobuf.GeneratedCodeInfo.Annotation.Semantic + (*FileDescriptorSet)(nil), // 20: google.protobuf.FileDescriptorSet + (*FileDescriptorProto)(nil), // 21: google.protobuf.FileDescriptorProto + (*DescriptorProto)(nil), // 22: google.protobuf.DescriptorProto + (*ExtensionRangeOptions)(nil), // 23: google.protobuf.ExtensionRangeOptions + (*FieldDescriptorProto)(nil), // 24: google.protobuf.FieldDescriptorProto + (*OneofDescriptorProto)(nil), // 25: google.protobuf.OneofDescriptorProto + (*EnumDescriptorProto)(nil), // 26: google.protobuf.EnumDescriptorProto + (*EnumValueDescriptorProto)(nil), // 27: google.protobuf.EnumValueDescriptorProto + (*ServiceDescriptorProto)(nil), // 28: google.protobuf.ServiceDescriptorProto + (*MethodDescriptorProto)(nil), // 29: google.protobuf.MethodDescriptorProto + (*FileOptions)(nil), // 30: google.protobuf.FileOptions + (*MessageOptions)(nil), // 31: google.protobuf.MessageOptions + (*FieldOptions)(nil), // 32: google.protobuf.FieldOptions + (*OneofOptions)(nil), // 33: google.protobuf.OneofOptions + (*EnumOptions)(nil), // 34: google.protobuf.EnumOptions + (*EnumValueOptions)(nil), // 35: google.protobuf.EnumValueOptions + (*ServiceOptions)(nil), // 36: google.protobuf.ServiceOptions + (*MethodOptions)(nil), // 37: google.protobuf.MethodOptions + (*UninterpretedOption)(nil), // 38: google.protobuf.UninterpretedOption + (*FeatureSet)(nil), // 39: google.protobuf.FeatureSet + (*FeatureSetDefaults)(nil), // 40: google.protobuf.FeatureSetDefaults + (*SourceCodeInfo)(nil), // 41: google.protobuf.SourceCodeInfo + (*GeneratedCodeInfo)(nil), // 42: google.protobuf.GeneratedCodeInfo + (*DescriptorProto_ExtensionRange)(nil), // 43: google.protobuf.DescriptorProto.ExtensionRange + (*DescriptorProto_ReservedRange)(nil), // 44: google.protobuf.DescriptorProto.ReservedRange + (*ExtensionRangeOptions_Declaration)(nil), // 45: google.protobuf.ExtensionRangeOptions.Declaration + (*EnumDescriptorProto_EnumReservedRange)(nil), // 46: google.protobuf.EnumDescriptorProto.EnumReservedRange + (*FieldOptions_EditionDefault)(nil), // 47: google.protobuf.FieldOptions.EditionDefault + (*FieldOptions_FeatureSupport)(nil), // 48: google.protobuf.FieldOptions.FeatureSupport + (*UninterpretedOption_NamePart)(nil), // 49: google.protobuf.UninterpretedOption.NamePart + (*FeatureSet_VisibilityFeature)(nil), // 50: google.protobuf.FeatureSet.VisibilityFeature + (*FeatureSetDefaults_FeatureSetEditionDefault)(nil), // 51: google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault + (*SourceCodeInfo_Location)(nil), // 52: google.protobuf.SourceCodeInfo.Location + (*GeneratedCodeInfo_Annotation)(nil), // 53: google.protobuf.GeneratedCodeInfo.Annotation } var file_google_protobuf_descriptor_proto_depIdxs = []int32{ - 18, // 0: google.protobuf.FileDescriptorSet.file:type_name -> google.protobuf.FileDescriptorProto - 19, // 1: google.protobuf.FileDescriptorProto.message_type:type_name -> google.protobuf.DescriptorProto - 23, // 2: google.protobuf.FileDescriptorProto.enum_type:type_name -> google.protobuf.EnumDescriptorProto - 25, // 3: google.protobuf.FileDescriptorProto.service:type_name -> google.protobuf.ServiceDescriptorProto - 21, // 4: google.protobuf.FileDescriptorProto.extension:type_name -> google.protobuf.FieldDescriptorProto - 27, // 5: google.protobuf.FileDescriptorProto.options:type_name -> google.protobuf.FileOptions - 38, // 6: google.protobuf.FileDescriptorProto.source_code_info:type_name -> google.protobuf.SourceCodeInfo + 21, // 0: google.protobuf.FileDescriptorSet.file:type_name -> google.protobuf.FileDescriptorProto + 22, // 1: google.protobuf.FileDescriptorProto.message_type:type_name -> google.protobuf.DescriptorProto + 26, // 2: google.protobuf.FileDescriptorProto.enum_type:type_name -> google.protobuf.EnumDescriptorProto + 28, // 3: google.protobuf.FileDescriptorProto.service:type_name -> google.protobuf.ServiceDescriptorProto + 24, // 4: google.protobuf.FileDescriptorProto.extension:type_name -> google.protobuf.FieldDescriptorProto + 30, // 5: google.protobuf.FileDescriptorProto.options:type_name -> google.protobuf.FileOptions + 41, // 6: google.protobuf.FileDescriptorProto.source_code_info:type_name -> google.protobuf.SourceCodeInfo 0, // 7: google.protobuf.FileDescriptorProto.edition:type_name -> google.protobuf.Edition - 21, // 8: google.protobuf.DescriptorProto.field:type_name -> google.protobuf.FieldDescriptorProto - 21, // 9: google.protobuf.DescriptorProto.extension:type_name -> google.protobuf.FieldDescriptorProto - 19, // 10: google.protobuf.DescriptorProto.nested_type:type_name -> google.protobuf.DescriptorProto - 23, // 11: google.protobuf.DescriptorProto.enum_type:type_name -> google.protobuf.EnumDescriptorProto - 40, // 12: google.protobuf.DescriptorProto.extension_range:type_name -> google.protobuf.DescriptorProto.ExtensionRange - 22, // 13: google.protobuf.DescriptorProto.oneof_decl:type_name -> google.protobuf.OneofDescriptorProto - 28, // 14: google.protobuf.DescriptorProto.options:type_name -> google.protobuf.MessageOptions - 41, // 15: google.protobuf.DescriptorProto.reserved_range:type_name -> google.protobuf.DescriptorProto.ReservedRange - 35, // 16: google.protobuf.ExtensionRangeOptions.uninterpreted_option:type_name -> google.protobuf.UninterpretedOption - 42, // 17: google.protobuf.ExtensionRangeOptions.declaration:type_name -> google.protobuf.ExtensionRangeOptions.Declaration - 36, // 18: google.protobuf.ExtensionRangeOptions.features:type_name -> google.protobuf.FeatureSet - 1, // 19: google.protobuf.ExtensionRangeOptions.verification:type_name -> google.protobuf.ExtensionRangeOptions.VerificationState - 3, // 20: google.protobuf.FieldDescriptorProto.label:type_name -> google.protobuf.FieldDescriptorProto.Label - 2, // 21: google.protobuf.FieldDescriptorProto.type:type_name -> google.protobuf.FieldDescriptorProto.Type - 29, // 22: google.protobuf.FieldDescriptorProto.options:type_name -> google.protobuf.FieldOptions - 30, // 23: google.protobuf.OneofDescriptorProto.options:type_name -> google.protobuf.OneofOptions - 24, // 24: google.protobuf.EnumDescriptorProto.value:type_name -> google.protobuf.EnumValueDescriptorProto - 31, // 25: google.protobuf.EnumDescriptorProto.options:type_name -> google.protobuf.EnumOptions - 43, // 26: google.protobuf.EnumDescriptorProto.reserved_range:type_name -> google.protobuf.EnumDescriptorProto.EnumReservedRange - 32, // 27: google.protobuf.EnumValueDescriptorProto.options:type_name -> google.protobuf.EnumValueOptions - 26, // 28: google.protobuf.ServiceDescriptorProto.method:type_name -> google.protobuf.MethodDescriptorProto - 33, // 29: google.protobuf.ServiceDescriptorProto.options:type_name -> google.protobuf.ServiceOptions - 34, // 30: google.protobuf.MethodDescriptorProto.options:type_name -> google.protobuf.MethodOptions - 4, // 31: google.protobuf.FileOptions.optimize_for:type_name -> google.protobuf.FileOptions.OptimizeMode - 36, // 32: google.protobuf.FileOptions.features:type_name -> google.protobuf.FeatureSet - 35, // 33: google.protobuf.FileOptions.uninterpreted_option:type_name -> google.protobuf.UninterpretedOption - 36, // 34: google.protobuf.MessageOptions.features:type_name -> google.protobuf.FeatureSet - 35, // 35: google.protobuf.MessageOptions.uninterpreted_option:type_name -> google.protobuf.UninterpretedOption - 5, // 36: google.protobuf.FieldOptions.ctype:type_name -> google.protobuf.FieldOptions.CType - 6, // 37: google.protobuf.FieldOptions.jstype:type_name -> google.protobuf.FieldOptions.JSType - 7, // 38: google.protobuf.FieldOptions.retention:type_name -> google.protobuf.FieldOptions.OptionRetention - 8, // 39: google.protobuf.FieldOptions.targets:type_name -> google.protobuf.FieldOptions.OptionTargetType - 44, // 40: google.protobuf.FieldOptions.edition_defaults:type_name -> google.protobuf.FieldOptions.EditionDefault - 36, // 41: google.protobuf.FieldOptions.features:type_name -> google.protobuf.FeatureSet - 45, // 42: google.protobuf.FieldOptions.feature_support:type_name -> google.protobuf.FieldOptions.FeatureSupport - 35, // 43: google.protobuf.FieldOptions.uninterpreted_option:type_name -> google.protobuf.UninterpretedOption - 36, // 44: google.protobuf.OneofOptions.features:type_name -> google.protobuf.FeatureSet - 35, // 45: google.protobuf.OneofOptions.uninterpreted_option:type_name -> google.protobuf.UninterpretedOption - 36, // 46: google.protobuf.EnumOptions.features:type_name -> google.protobuf.FeatureSet - 35, // 47: google.protobuf.EnumOptions.uninterpreted_option:type_name -> google.protobuf.UninterpretedOption - 36, // 48: google.protobuf.EnumValueOptions.features:type_name -> google.protobuf.FeatureSet - 45, // 49: google.protobuf.EnumValueOptions.feature_support:type_name -> google.protobuf.FieldOptions.FeatureSupport - 35, // 50: google.protobuf.EnumValueOptions.uninterpreted_option:type_name -> google.protobuf.UninterpretedOption - 36, // 51: google.protobuf.ServiceOptions.features:type_name -> google.protobuf.FeatureSet - 35, // 52: google.protobuf.ServiceOptions.uninterpreted_option:type_name -> google.protobuf.UninterpretedOption - 9, // 53: google.protobuf.MethodOptions.idempotency_level:type_name -> google.protobuf.MethodOptions.IdempotencyLevel - 36, // 54: google.protobuf.MethodOptions.features:type_name -> google.protobuf.FeatureSet - 35, // 55: google.protobuf.MethodOptions.uninterpreted_option:type_name -> google.protobuf.UninterpretedOption - 46, // 56: google.protobuf.UninterpretedOption.name:type_name -> google.protobuf.UninterpretedOption.NamePart - 10, // 57: google.protobuf.FeatureSet.field_presence:type_name -> google.protobuf.FeatureSet.FieldPresence - 11, // 58: google.protobuf.FeatureSet.enum_type:type_name -> google.protobuf.FeatureSet.EnumType - 12, // 59: google.protobuf.FeatureSet.repeated_field_encoding:type_name -> google.protobuf.FeatureSet.RepeatedFieldEncoding - 13, // 60: google.protobuf.FeatureSet.utf8_validation:type_name -> google.protobuf.FeatureSet.Utf8Validation - 14, // 61: google.protobuf.FeatureSet.message_encoding:type_name -> google.protobuf.FeatureSet.MessageEncoding - 15, // 62: google.protobuf.FeatureSet.json_format:type_name -> google.protobuf.FeatureSet.JsonFormat - 47, // 63: google.protobuf.FeatureSetDefaults.defaults:type_name -> google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault - 0, // 64: google.protobuf.FeatureSetDefaults.minimum_edition:type_name -> google.protobuf.Edition - 0, // 65: google.protobuf.FeatureSetDefaults.maximum_edition:type_name -> google.protobuf.Edition - 48, // 66: google.protobuf.SourceCodeInfo.location:type_name -> google.protobuf.SourceCodeInfo.Location - 49, // 67: google.protobuf.GeneratedCodeInfo.annotation:type_name -> google.protobuf.GeneratedCodeInfo.Annotation - 20, // 68: google.protobuf.DescriptorProto.ExtensionRange.options:type_name -> google.protobuf.ExtensionRangeOptions - 0, // 69: google.protobuf.FieldOptions.EditionDefault.edition:type_name -> google.protobuf.Edition - 0, // 70: google.protobuf.FieldOptions.FeatureSupport.edition_introduced:type_name -> google.protobuf.Edition - 0, // 71: google.protobuf.FieldOptions.FeatureSupport.edition_deprecated:type_name -> google.protobuf.Edition - 0, // 72: google.protobuf.FieldOptions.FeatureSupport.edition_removed:type_name -> google.protobuf.Edition - 0, // 73: google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault.edition:type_name -> google.protobuf.Edition - 36, // 74: google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault.overridable_features:type_name -> google.protobuf.FeatureSet - 36, // 75: google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault.fixed_features:type_name -> google.protobuf.FeatureSet - 16, // 76: google.protobuf.GeneratedCodeInfo.Annotation.semantic:type_name -> google.protobuf.GeneratedCodeInfo.Annotation.Semantic - 77, // [77:77] is the sub-list for method output_type - 77, // [77:77] is the sub-list for method input_type - 77, // [77:77] is the sub-list for extension type_name - 77, // [77:77] is the sub-list for extension extendee - 0, // [0:77] is the sub-list for field type_name + 24, // 8: google.protobuf.DescriptorProto.field:type_name -> google.protobuf.FieldDescriptorProto + 24, // 9: google.protobuf.DescriptorProto.extension:type_name -> google.protobuf.FieldDescriptorProto + 22, // 10: google.protobuf.DescriptorProto.nested_type:type_name -> google.protobuf.DescriptorProto + 26, // 11: google.protobuf.DescriptorProto.enum_type:type_name -> google.protobuf.EnumDescriptorProto + 43, // 12: google.protobuf.DescriptorProto.extension_range:type_name -> google.protobuf.DescriptorProto.ExtensionRange + 25, // 13: google.protobuf.DescriptorProto.oneof_decl:type_name -> google.protobuf.OneofDescriptorProto + 31, // 14: google.protobuf.DescriptorProto.options:type_name -> google.protobuf.MessageOptions + 44, // 15: google.protobuf.DescriptorProto.reserved_range:type_name -> google.protobuf.DescriptorProto.ReservedRange + 1, // 16: google.protobuf.DescriptorProto.visibility:type_name -> google.protobuf.SymbolVisibility + 38, // 17: google.protobuf.ExtensionRangeOptions.uninterpreted_option:type_name -> google.protobuf.UninterpretedOption + 45, // 18: google.protobuf.ExtensionRangeOptions.declaration:type_name -> google.protobuf.ExtensionRangeOptions.Declaration + 39, // 19: google.protobuf.ExtensionRangeOptions.features:type_name -> google.protobuf.FeatureSet + 2, // 20: google.protobuf.ExtensionRangeOptions.verification:type_name -> google.protobuf.ExtensionRangeOptions.VerificationState + 4, // 21: google.protobuf.FieldDescriptorProto.label:type_name -> google.protobuf.FieldDescriptorProto.Label + 3, // 22: google.protobuf.FieldDescriptorProto.type:type_name -> google.protobuf.FieldDescriptorProto.Type + 32, // 23: google.protobuf.FieldDescriptorProto.options:type_name -> google.protobuf.FieldOptions + 33, // 24: google.protobuf.OneofDescriptorProto.options:type_name -> google.protobuf.OneofOptions + 27, // 25: google.protobuf.EnumDescriptorProto.value:type_name -> google.protobuf.EnumValueDescriptorProto + 34, // 26: google.protobuf.EnumDescriptorProto.options:type_name -> google.protobuf.EnumOptions + 46, // 27: google.protobuf.EnumDescriptorProto.reserved_range:type_name -> google.protobuf.EnumDescriptorProto.EnumReservedRange + 1, // 28: google.protobuf.EnumDescriptorProto.visibility:type_name -> google.protobuf.SymbolVisibility + 35, // 29: google.protobuf.EnumValueDescriptorProto.options:type_name -> google.protobuf.EnumValueOptions + 29, // 30: google.protobuf.ServiceDescriptorProto.method:type_name -> google.protobuf.MethodDescriptorProto + 36, // 31: google.protobuf.ServiceDescriptorProto.options:type_name -> google.protobuf.ServiceOptions + 37, // 32: google.protobuf.MethodDescriptorProto.options:type_name -> google.protobuf.MethodOptions + 5, // 33: google.protobuf.FileOptions.optimize_for:type_name -> google.protobuf.FileOptions.OptimizeMode + 39, // 34: google.protobuf.FileOptions.features:type_name -> google.protobuf.FeatureSet + 38, // 35: google.protobuf.FileOptions.uninterpreted_option:type_name -> google.protobuf.UninterpretedOption + 39, // 36: google.protobuf.MessageOptions.features:type_name -> google.protobuf.FeatureSet + 38, // 37: google.protobuf.MessageOptions.uninterpreted_option:type_name -> google.protobuf.UninterpretedOption + 6, // 38: google.protobuf.FieldOptions.ctype:type_name -> google.protobuf.FieldOptions.CType + 7, // 39: google.protobuf.FieldOptions.jstype:type_name -> google.protobuf.FieldOptions.JSType + 8, // 40: google.protobuf.FieldOptions.retention:type_name -> google.protobuf.FieldOptions.OptionRetention + 9, // 41: google.protobuf.FieldOptions.targets:type_name -> google.protobuf.FieldOptions.OptionTargetType + 47, // 42: google.protobuf.FieldOptions.edition_defaults:type_name -> google.protobuf.FieldOptions.EditionDefault + 39, // 43: google.protobuf.FieldOptions.features:type_name -> google.protobuf.FeatureSet + 48, // 44: google.protobuf.FieldOptions.feature_support:type_name -> google.protobuf.FieldOptions.FeatureSupport + 38, // 45: google.protobuf.FieldOptions.uninterpreted_option:type_name -> google.protobuf.UninterpretedOption + 39, // 46: google.protobuf.OneofOptions.features:type_name -> google.protobuf.FeatureSet + 38, // 47: google.protobuf.OneofOptions.uninterpreted_option:type_name -> google.protobuf.UninterpretedOption + 39, // 48: google.protobuf.EnumOptions.features:type_name -> google.protobuf.FeatureSet + 38, // 49: google.protobuf.EnumOptions.uninterpreted_option:type_name -> google.protobuf.UninterpretedOption + 39, // 50: google.protobuf.EnumValueOptions.features:type_name -> google.protobuf.FeatureSet + 48, // 51: google.protobuf.EnumValueOptions.feature_support:type_name -> google.protobuf.FieldOptions.FeatureSupport + 38, // 52: google.protobuf.EnumValueOptions.uninterpreted_option:type_name -> google.protobuf.UninterpretedOption + 39, // 53: google.protobuf.ServiceOptions.features:type_name -> google.protobuf.FeatureSet + 38, // 54: google.protobuf.ServiceOptions.uninterpreted_option:type_name -> google.protobuf.UninterpretedOption + 10, // 55: google.protobuf.MethodOptions.idempotency_level:type_name -> google.protobuf.MethodOptions.IdempotencyLevel + 39, // 56: google.protobuf.MethodOptions.features:type_name -> google.protobuf.FeatureSet + 38, // 57: google.protobuf.MethodOptions.uninterpreted_option:type_name -> google.protobuf.UninterpretedOption + 49, // 58: google.protobuf.UninterpretedOption.name:type_name -> google.protobuf.UninterpretedOption.NamePart + 11, // 59: google.protobuf.FeatureSet.field_presence:type_name -> google.protobuf.FeatureSet.FieldPresence + 12, // 60: google.protobuf.FeatureSet.enum_type:type_name -> google.protobuf.FeatureSet.EnumType + 13, // 61: google.protobuf.FeatureSet.repeated_field_encoding:type_name -> google.protobuf.FeatureSet.RepeatedFieldEncoding + 14, // 62: google.protobuf.FeatureSet.utf8_validation:type_name -> google.protobuf.FeatureSet.Utf8Validation + 15, // 63: google.protobuf.FeatureSet.message_encoding:type_name -> google.protobuf.FeatureSet.MessageEncoding + 16, // 64: google.protobuf.FeatureSet.json_format:type_name -> google.protobuf.FeatureSet.JsonFormat + 17, // 65: google.protobuf.FeatureSet.enforce_naming_style:type_name -> google.protobuf.FeatureSet.EnforceNamingStyle + 18, // 66: google.protobuf.FeatureSet.default_symbol_visibility:type_name -> google.protobuf.FeatureSet.VisibilityFeature.DefaultSymbolVisibility + 51, // 67: google.protobuf.FeatureSetDefaults.defaults:type_name -> google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault + 0, // 68: google.protobuf.FeatureSetDefaults.minimum_edition:type_name -> google.protobuf.Edition + 0, // 69: google.protobuf.FeatureSetDefaults.maximum_edition:type_name -> google.protobuf.Edition + 52, // 70: google.protobuf.SourceCodeInfo.location:type_name -> google.protobuf.SourceCodeInfo.Location + 53, // 71: google.protobuf.GeneratedCodeInfo.annotation:type_name -> google.protobuf.GeneratedCodeInfo.Annotation + 23, // 72: google.protobuf.DescriptorProto.ExtensionRange.options:type_name -> google.protobuf.ExtensionRangeOptions + 0, // 73: google.protobuf.FieldOptions.EditionDefault.edition:type_name -> google.protobuf.Edition + 0, // 74: google.protobuf.FieldOptions.FeatureSupport.edition_introduced:type_name -> google.protobuf.Edition + 0, // 75: google.protobuf.FieldOptions.FeatureSupport.edition_deprecated:type_name -> google.protobuf.Edition + 0, // 76: google.protobuf.FieldOptions.FeatureSupport.edition_removed:type_name -> google.protobuf.Edition + 0, // 77: google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault.edition:type_name -> google.protobuf.Edition + 39, // 78: google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault.overridable_features:type_name -> google.protobuf.FeatureSet + 39, // 79: google.protobuf.FeatureSetDefaults.FeatureSetEditionDefault.fixed_features:type_name -> google.protobuf.FeatureSet + 19, // 80: google.protobuf.GeneratedCodeInfo.Annotation.semantic:type_name -> google.protobuf.GeneratedCodeInfo.Annotation.Semantic + 81, // [81:81] is the sub-list for method output_type + 81, // [81:81] is the sub-list for method input_type + 81, // [81:81] is the sub-list for extension type_name + 81, // [81:81] is the sub-list for extension extendee + 0, // [0:81] is the sub-list for field type_name } func init() { file_google_protobuf_descriptor_proto_init() } @@ -5385,431 +5222,13 @@ func file_google_protobuf_descriptor_proto_init() { if File_google_protobuf_descriptor_proto != nil { return } - if !protoimpl.UnsafeEnabled { - file_google_protobuf_descriptor_proto_msgTypes[0].Exporter = func(v any, i int) any { - switch v := v.(*FileDescriptorSet); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_google_protobuf_descriptor_proto_msgTypes[1].Exporter = func(v any, i int) any { - switch v := v.(*FileDescriptorProto); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_google_protobuf_descriptor_proto_msgTypes[2].Exporter = func(v any, i int) any { - switch v := v.(*DescriptorProto); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_google_protobuf_descriptor_proto_msgTypes[3].Exporter = func(v any, i int) any { - switch v := v.(*ExtensionRangeOptions); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - case 3: - return &v.extensionFields - default: - return nil - } - } - file_google_protobuf_descriptor_proto_msgTypes[4].Exporter = func(v any, i int) any { - switch v := v.(*FieldDescriptorProto); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_google_protobuf_descriptor_proto_msgTypes[5].Exporter = func(v any, i int) any { - switch v := v.(*OneofDescriptorProto); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_google_protobuf_descriptor_proto_msgTypes[6].Exporter = func(v any, i int) any { - switch v := v.(*EnumDescriptorProto); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_google_protobuf_descriptor_proto_msgTypes[7].Exporter = func(v any, i int) any { - switch v := v.(*EnumValueDescriptorProto); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_google_protobuf_descriptor_proto_msgTypes[8].Exporter = func(v any, i int) any { - switch v := v.(*ServiceDescriptorProto); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_google_protobuf_descriptor_proto_msgTypes[9].Exporter = func(v any, i int) any { - switch v := v.(*MethodDescriptorProto); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_google_protobuf_descriptor_proto_msgTypes[10].Exporter = func(v any, i int) any { - switch v := v.(*FileOptions); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - case 3: - return &v.extensionFields - default: - return nil - } - } - file_google_protobuf_descriptor_proto_msgTypes[11].Exporter = func(v any, i int) any { - switch v := v.(*MessageOptions); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - case 3: - return &v.extensionFields - default: - return nil - } - } - file_google_protobuf_descriptor_proto_msgTypes[12].Exporter = func(v any, i int) any { - switch v := v.(*FieldOptions); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - case 3: - return &v.extensionFields - default: - return nil - } - } - file_google_protobuf_descriptor_proto_msgTypes[13].Exporter = func(v any, i int) any { - switch v := v.(*OneofOptions); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - case 3: - return &v.extensionFields - default: - return nil - } - } - file_google_protobuf_descriptor_proto_msgTypes[14].Exporter = func(v any, i int) any { - switch v := v.(*EnumOptions); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - case 3: - return &v.extensionFields - default: - return nil - } - } - file_google_protobuf_descriptor_proto_msgTypes[15].Exporter = func(v any, i int) any { - switch v := v.(*EnumValueOptions); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - case 3: - return &v.extensionFields - default: - return nil - } - } - file_google_protobuf_descriptor_proto_msgTypes[16].Exporter = func(v any, i int) any { - switch v := v.(*ServiceOptions); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - case 3: - return &v.extensionFields - default: - return nil - } - } - file_google_protobuf_descriptor_proto_msgTypes[17].Exporter = func(v any, i int) any { - switch v := v.(*MethodOptions); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - case 3: - return &v.extensionFields - default: - return nil - } - } - file_google_protobuf_descriptor_proto_msgTypes[18].Exporter = func(v any, i int) any { - switch v := v.(*UninterpretedOption); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_google_protobuf_descriptor_proto_msgTypes[19].Exporter = func(v any, i int) any { - switch v := v.(*FeatureSet); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - case 3: - return &v.extensionFields - default: - return nil - } - } - file_google_protobuf_descriptor_proto_msgTypes[20].Exporter = func(v any, i int) any { - switch v := v.(*FeatureSetDefaults); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_google_protobuf_descriptor_proto_msgTypes[21].Exporter = func(v any, i int) any { - switch v := v.(*SourceCodeInfo); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_google_protobuf_descriptor_proto_msgTypes[22].Exporter = func(v any, i int) any { - switch v := v.(*GeneratedCodeInfo); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_google_protobuf_descriptor_proto_msgTypes[23].Exporter = func(v any, i int) any { - switch v := v.(*DescriptorProto_ExtensionRange); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_google_protobuf_descriptor_proto_msgTypes[24].Exporter = func(v any, i int) any { - switch v := v.(*DescriptorProto_ReservedRange); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_google_protobuf_descriptor_proto_msgTypes[25].Exporter = func(v any, i int) any { - switch v := v.(*ExtensionRangeOptions_Declaration); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_google_protobuf_descriptor_proto_msgTypes[26].Exporter = func(v any, i int) any { - switch v := v.(*EnumDescriptorProto_EnumReservedRange); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_google_protobuf_descriptor_proto_msgTypes[27].Exporter = func(v any, i int) any { - switch v := v.(*FieldOptions_EditionDefault); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_google_protobuf_descriptor_proto_msgTypes[28].Exporter = func(v any, i int) any { - switch v := v.(*FieldOptions_FeatureSupport); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_google_protobuf_descriptor_proto_msgTypes[29].Exporter = func(v any, i int) any { - switch v := v.(*UninterpretedOption_NamePart); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_google_protobuf_descriptor_proto_msgTypes[30].Exporter = func(v any, i int) any { - switch v := v.(*FeatureSetDefaults_FeatureSetEditionDefault); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_google_protobuf_descriptor_proto_msgTypes[31].Exporter = func(v any, i int) any { - switch v := v.(*SourceCodeInfo_Location); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - file_google_protobuf_descriptor_proto_msgTypes[32].Exporter = func(v any, i int) any { - switch v := v.(*GeneratedCodeInfo_Annotation); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_google_protobuf_descriptor_proto_rawDesc, - NumEnums: 17, - NumMessages: 33, + RawDescriptor: unsafe.Slice(unsafe.StringData(file_google_protobuf_descriptor_proto_rawDesc), len(file_google_protobuf_descriptor_proto_rawDesc)), + NumEnums: 20, + NumMessages: 34, NumExtensions: 0, NumServices: 0, }, @@ -5819,7 +5238,6 @@ func file_google_protobuf_descriptor_proto_init() { MessageInfos: file_google_protobuf_descriptor_proto_msgTypes, }.Build() File_google_protobuf_descriptor_proto = out.File - file_google_protobuf_descriptor_proto_rawDesc = nil file_google_protobuf_descriptor_proto_goTypes = nil file_google_protobuf_descriptor_proto_depIdxs = nil } diff --git a/vendor/google.golang.org/protobuf/types/gofeaturespb/go_features.pb.go b/vendor/google.golang.org/protobuf/types/gofeaturespb/go_features.pb.go index a2ca940c50..37e712b6b7 100644 --- a/vendor/google.golang.org/protobuf/types/gofeaturespb/go_features.pb.go +++ b/vendor/google.golang.org/protobuf/types/gofeaturespb/go_features.pb.go @@ -16,24 +16,153 @@ import ( descriptorpb "google.golang.org/protobuf/types/descriptorpb" reflect "reflect" sync "sync" + unsafe "unsafe" ) -type GoFeatures struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields +type GoFeatures_APILevel int32 + +const ( + // API_LEVEL_UNSPECIFIED results in selecting the OPEN API, + // but needs to be a separate value to distinguish between + // an explicitly set api level or a missing api level. + GoFeatures_API_LEVEL_UNSPECIFIED GoFeatures_APILevel = 0 + GoFeatures_API_OPEN GoFeatures_APILevel = 1 + GoFeatures_API_HYBRID GoFeatures_APILevel = 2 + GoFeatures_API_OPAQUE GoFeatures_APILevel = 3 +) + +// Enum value maps for GoFeatures_APILevel. +var ( + GoFeatures_APILevel_name = map[int32]string{ + 0: "API_LEVEL_UNSPECIFIED", + 1: "API_OPEN", + 2: "API_HYBRID", + 3: "API_OPAQUE", + } + GoFeatures_APILevel_value = map[string]int32{ + "API_LEVEL_UNSPECIFIED": 0, + "API_OPEN": 1, + "API_HYBRID": 2, + "API_OPAQUE": 3, + } +) + +func (x GoFeatures_APILevel) Enum() *GoFeatures_APILevel { + p := new(GoFeatures_APILevel) + *p = x + return p +} + +func (x GoFeatures_APILevel) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (GoFeatures_APILevel) Descriptor() protoreflect.EnumDescriptor { + return file_google_protobuf_go_features_proto_enumTypes[0].Descriptor() +} + +func (GoFeatures_APILevel) Type() protoreflect.EnumType { + return &file_google_protobuf_go_features_proto_enumTypes[0] +} + +func (x GoFeatures_APILevel) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *GoFeatures_APILevel) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = GoFeatures_APILevel(num) + return nil +} + +// Deprecated: Use GoFeatures_APILevel.Descriptor instead. +func (GoFeatures_APILevel) EnumDescriptor() ([]byte, []int) { + return file_google_protobuf_go_features_proto_rawDescGZIP(), []int{0, 0} +} +type GoFeatures_StripEnumPrefix int32 + +const ( + GoFeatures_STRIP_ENUM_PREFIX_UNSPECIFIED GoFeatures_StripEnumPrefix = 0 + GoFeatures_STRIP_ENUM_PREFIX_KEEP GoFeatures_StripEnumPrefix = 1 + GoFeatures_STRIP_ENUM_PREFIX_GENERATE_BOTH GoFeatures_StripEnumPrefix = 2 + GoFeatures_STRIP_ENUM_PREFIX_STRIP GoFeatures_StripEnumPrefix = 3 +) + +// Enum value maps for GoFeatures_StripEnumPrefix. +var ( + GoFeatures_StripEnumPrefix_name = map[int32]string{ + 0: "STRIP_ENUM_PREFIX_UNSPECIFIED", + 1: "STRIP_ENUM_PREFIX_KEEP", + 2: "STRIP_ENUM_PREFIX_GENERATE_BOTH", + 3: "STRIP_ENUM_PREFIX_STRIP", + } + GoFeatures_StripEnumPrefix_value = map[string]int32{ + "STRIP_ENUM_PREFIX_UNSPECIFIED": 0, + "STRIP_ENUM_PREFIX_KEEP": 1, + "STRIP_ENUM_PREFIX_GENERATE_BOTH": 2, + "STRIP_ENUM_PREFIX_STRIP": 3, + } +) + +func (x GoFeatures_StripEnumPrefix) Enum() *GoFeatures_StripEnumPrefix { + p := new(GoFeatures_StripEnumPrefix) + *p = x + return p +} + +func (x GoFeatures_StripEnumPrefix) String() string { + return protoimpl.X.EnumStringOf(x.Descriptor(), protoreflect.EnumNumber(x)) +} + +func (GoFeatures_StripEnumPrefix) Descriptor() protoreflect.EnumDescriptor { + return file_google_protobuf_go_features_proto_enumTypes[1].Descriptor() +} + +func (GoFeatures_StripEnumPrefix) Type() protoreflect.EnumType { + return &file_google_protobuf_go_features_proto_enumTypes[1] +} + +func (x GoFeatures_StripEnumPrefix) Number() protoreflect.EnumNumber { + return protoreflect.EnumNumber(x) +} + +// Deprecated: Do not use. +func (x *GoFeatures_StripEnumPrefix) UnmarshalJSON(b []byte) error { + num, err := protoimpl.X.UnmarshalJSONEnum(x.Descriptor(), b) + if err != nil { + return err + } + *x = GoFeatures_StripEnumPrefix(num) + return nil +} + +// Deprecated: Use GoFeatures_StripEnumPrefix.Descriptor instead. +func (GoFeatures_StripEnumPrefix) EnumDescriptor() ([]byte, []int) { + return file_google_protobuf_go_features_proto_rawDescGZIP(), []int{0, 1} +} + +type GoFeatures struct { + state protoimpl.MessageState `protogen:"open.v1"` // Whether or not to generate the deprecated UnmarshalJSON method for enums. + // Can only be true for proto using the Open Struct api. LegacyUnmarshalJsonEnum *bool `protobuf:"varint,1,opt,name=legacy_unmarshal_json_enum,json=legacyUnmarshalJsonEnum" json:"legacy_unmarshal_json_enum,omitempty"` + // One of OPEN, HYBRID or OPAQUE. + ApiLevel *GoFeatures_APILevel `protobuf:"varint,2,opt,name=api_level,json=apiLevel,enum=pb.GoFeatures_APILevel" json:"api_level,omitempty"` + StripEnumPrefix *GoFeatures_StripEnumPrefix `protobuf:"varint,3,opt,name=strip_enum_prefix,json=stripEnumPrefix,enum=pb.GoFeatures_StripEnumPrefix" json:"strip_enum_prefix,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *GoFeatures) Reset() { *x = GoFeatures{} - if protoimpl.UnsafeEnabled { - mi := &file_google_protobuf_go_features_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_google_protobuf_go_features_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *GoFeatures) String() string { @@ -44,7 +173,7 @@ func (*GoFeatures) ProtoMessage() {} func (x *GoFeatures) ProtoReflect() protoreflect.Message { mi := &file_google_protobuf_go_features_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -66,6 +195,20 @@ func (x *GoFeatures) GetLegacyUnmarshalJsonEnum() bool { return false } +func (x *GoFeatures) GetApiLevel() GoFeatures_APILevel { + if x != nil && x.ApiLevel != nil { + return *x.ApiLevel + } + return GoFeatures_API_LEVEL_UNSPECIFIED +} + +func (x *GoFeatures) GetStripEnumPrefix() GoFeatures_StripEnumPrefix { + if x != nil && x.StripEnumPrefix != nil { + return *x.StripEnumPrefix + } + return GoFeatures_STRIP_ENUM_PREFIX_UNSPECIFIED +} + var file_google_protobuf_go_features_proto_extTypes = []protoimpl.ExtensionInfo{ { ExtendedType: (*descriptorpb.FeatureSet)(nil), @@ -85,59 +228,60 @@ var ( var File_google_protobuf_go_features_proto protoreflect.FileDescriptor -var file_google_protobuf_go_features_proto_rawDesc = []byte{ - 0x0a, 0x21, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2f, 0x67, 0x6f, 0x5f, 0x66, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x2e, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x12, 0x02, 0x70, 0x62, 0x1a, 0x20, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x64, 0x65, 0x73, 0x63, 0x72, 0x69, 0x70, - 0x74, 0x6f, 0x72, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0xcd, 0x01, 0x0a, 0x0a, 0x47, 0x6f, - 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x12, 0xbe, 0x01, 0x0a, 0x1a, 0x6c, 0x65, 0x67, - 0x61, 0x63, 0x79, 0x5f, 0x75, 0x6e, 0x6d, 0x61, 0x72, 0x73, 0x68, 0x61, 0x6c, 0x5f, 0x6a, 0x73, - 0x6f, 0x6e, 0x5f, 0x65, 0x6e, 0x75, 0x6d, 0x18, 0x01, 0x20, 0x01, 0x28, 0x08, 0x42, 0x80, 0x01, - 0x88, 0x01, 0x01, 0x98, 0x01, 0x06, 0x98, 0x01, 0x01, 0xa2, 0x01, 0x09, 0x12, 0x04, 0x74, 0x72, - 0x75, 0x65, 0x18, 0x84, 0x07, 0xa2, 0x01, 0x0a, 0x12, 0x05, 0x66, 0x61, 0x6c, 0x73, 0x65, 0x18, - 0xe7, 0x07, 0xb2, 0x01, 0x5b, 0x08, 0xe8, 0x07, 0x10, 0xe8, 0x07, 0x1a, 0x53, 0x54, 0x68, 0x65, - 0x20, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x20, 0x55, 0x6e, 0x6d, 0x61, 0x72, 0x73, 0x68, 0x61, - 0x6c, 0x4a, 0x53, 0x4f, 0x4e, 0x20, 0x41, 0x50, 0x49, 0x20, 0x69, 0x73, 0x20, 0x64, 0x65, 0x70, - 0x72, 0x65, 0x63, 0x61, 0x74, 0x65, 0x64, 0x20, 0x61, 0x6e, 0x64, 0x20, 0x77, 0x69, 0x6c, 0x6c, - 0x20, 0x62, 0x65, 0x20, 0x72, 0x65, 0x6d, 0x6f, 0x76, 0x65, 0x64, 0x20, 0x69, 0x6e, 0x20, 0x61, - 0x20, 0x66, 0x75, 0x74, 0x75, 0x72, 0x65, 0x20, 0x65, 0x64, 0x69, 0x74, 0x69, 0x6f, 0x6e, 0x2e, - 0x52, 0x17, 0x6c, 0x65, 0x67, 0x61, 0x63, 0x79, 0x55, 0x6e, 0x6d, 0x61, 0x72, 0x73, 0x68, 0x61, - 0x6c, 0x4a, 0x73, 0x6f, 0x6e, 0x45, 0x6e, 0x75, 0x6d, 0x3a, 0x3c, 0x0a, 0x02, 0x67, 0x6f, 0x12, - 0x1b, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2e, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x53, 0x65, 0x74, 0x18, 0xea, 0x07, 0x20, - 0x01, 0x28, 0x0b, 0x32, 0x0e, 0x2e, 0x70, 0x62, 0x2e, 0x47, 0x6f, 0x46, 0x65, 0x61, 0x74, 0x75, - 0x72, 0x65, 0x73, 0x52, 0x02, 0x67, 0x6f, 0x42, 0x2f, 0x5a, 0x2d, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x67, 0x6f, 0x66, 0x65, - 0x61, 0x74, 0x75, 0x72, 0x65, 0x73, 0x70, 0x62, -} +const file_google_protobuf_go_features_proto_rawDesc = "" + + "\n" + + "!google/protobuf/go_features.proto\x12\x02pb\x1a google/protobuf/descriptor.proto\"\xab\x05\n" + + "\n" + + "GoFeatures\x12\xbe\x01\n" + + "\x1alegacy_unmarshal_json_enum\x18\x01 \x01(\bB\x80\x01\x88\x01\x01\x98\x01\x06\x98\x01\x01\xa2\x01\t\x12\x04true\x18\x84\a\xa2\x01\n" + + "\x12\x05false\x18\xe7\a\xb2\x01[\b\xe8\a\x10\xe8\a\x1aSThe legacy UnmarshalJSON API is deprecated and will be removed in a future edition.R\x17legacyUnmarshalJsonEnum\x12t\n" + + "\tapi_level\x18\x02 \x01(\x0e2\x17.pb.GoFeatures.APILevelB>\x88\x01\x01\x98\x01\x03\x98\x01\x01\xa2\x01\x1a\x12\x15API_LEVEL_UNSPECIFIED\x18\x84\a\xa2\x01\x0f\x12\n" + + "API_OPAQUE\x18\xe9\a\xb2\x01\x03\b\xe8\aR\bapiLevel\x12|\n" + + "\x11strip_enum_prefix\x18\x03 \x01(\x0e2\x1e.pb.GoFeatures.StripEnumPrefixB0\x88\x01\x01\x98\x01\x06\x98\x01\a\x98\x01\x01\xa2\x01\x1b\x12\x16STRIP_ENUM_PREFIX_KEEP\x18\x84\a\xb2\x01\x03\b\xe9\aR\x0fstripEnumPrefix\"S\n" + + "\bAPILevel\x12\x19\n" + + "\x15API_LEVEL_UNSPECIFIED\x10\x00\x12\f\n" + + "\bAPI_OPEN\x10\x01\x12\x0e\n" + + "\n" + + "API_HYBRID\x10\x02\x12\x0e\n" + + "\n" + + "API_OPAQUE\x10\x03\"\x92\x01\n" + + "\x0fStripEnumPrefix\x12!\n" + + "\x1dSTRIP_ENUM_PREFIX_UNSPECIFIED\x10\x00\x12\x1a\n" + + "\x16STRIP_ENUM_PREFIX_KEEP\x10\x01\x12#\n" + + "\x1fSTRIP_ENUM_PREFIX_GENERATE_BOTH\x10\x02\x12\x1b\n" + + "\x17STRIP_ENUM_PREFIX_STRIP\x10\x03:<\n" + + "\x02go\x12\x1b.google.protobuf.FeatureSet\x18\xea\a \x01(\v2\x0e.pb.GoFeaturesR\x02goB/Z-google.golang.org/protobuf/types/gofeaturespb" var ( file_google_protobuf_go_features_proto_rawDescOnce sync.Once - file_google_protobuf_go_features_proto_rawDescData = file_google_protobuf_go_features_proto_rawDesc + file_google_protobuf_go_features_proto_rawDescData []byte ) func file_google_protobuf_go_features_proto_rawDescGZIP() []byte { file_google_protobuf_go_features_proto_rawDescOnce.Do(func() { - file_google_protobuf_go_features_proto_rawDescData = protoimpl.X.CompressGZIP(file_google_protobuf_go_features_proto_rawDescData) + file_google_protobuf_go_features_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_google_protobuf_go_features_proto_rawDesc), len(file_google_protobuf_go_features_proto_rawDesc))) }) return file_google_protobuf_go_features_proto_rawDescData } +var file_google_protobuf_go_features_proto_enumTypes = make([]protoimpl.EnumInfo, 2) var file_google_protobuf_go_features_proto_msgTypes = make([]protoimpl.MessageInfo, 1) var file_google_protobuf_go_features_proto_goTypes = []any{ - (*GoFeatures)(nil), // 0: pb.GoFeatures - (*descriptorpb.FeatureSet)(nil), // 1: google.protobuf.FeatureSet + (GoFeatures_APILevel)(0), // 0: pb.GoFeatures.APILevel + (GoFeatures_StripEnumPrefix)(0), // 1: pb.GoFeatures.StripEnumPrefix + (*GoFeatures)(nil), // 2: pb.GoFeatures + (*descriptorpb.FeatureSet)(nil), // 3: google.protobuf.FeatureSet } var file_google_protobuf_go_features_proto_depIdxs = []int32{ - 1, // 0: pb.go:extendee -> google.protobuf.FeatureSet - 0, // 1: pb.go:type_name -> pb.GoFeatures - 2, // [2:2] is the sub-list for method output_type - 2, // [2:2] is the sub-list for method input_type - 1, // [1:2] is the sub-list for extension type_name - 0, // [0:1] is the sub-list for extension extendee - 0, // [0:0] is the sub-list for field type_name + 0, // 0: pb.GoFeatures.api_level:type_name -> pb.GoFeatures.APILevel + 1, // 1: pb.GoFeatures.strip_enum_prefix:type_name -> pb.GoFeatures.StripEnumPrefix + 3, // 2: pb.go:extendee -> google.protobuf.FeatureSet + 2, // 3: pb.go:type_name -> pb.GoFeatures + 4, // [4:4] is the sub-list for method output_type + 4, // [4:4] is the sub-list for method input_type + 3, // [3:4] is the sub-list for extension type_name + 2, // [2:3] is the sub-list for extension extendee + 0, // [0:2] is the sub-list for field type_name } func init() { file_google_protobuf_go_features_proto_init() } @@ -145,37 +289,23 @@ func file_google_protobuf_go_features_proto_init() { if File_google_protobuf_go_features_proto != nil { return } - if !protoimpl.UnsafeEnabled { - file_google_protobuf_go_features_proto_msgTypes[0].Exporter = func(v any, i int) any { - switch v := v.(*GoFeatures); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_google_protobuf_go_features_proto_rawDesc, - NumEnums: 0, + RawDescriptor: unsafe.Slice(unsafe.StringData(file_google_protobuf_go_features_proto_rawDesc), len(file_google_protobuf_go_features_proto_rawDesc)), + NumEnums: 2, NumMessages: 1, NumExtensions: 1, NumServices: 0, }, GoTypes: file_google_protobuf_go_features_proto_goTypes, DependencyIndexes: file_google_protobuf_go_features_proto_depIdxs, + EnumInfos: file_google_protobuf_go_features_proto_enumTypes, MessageInfos: file_google_protobuf_go_features_proto_msgTypes, ExtensionInfos: file_google_protobuf_go_features_proto_extTypes, }.Build() File_google_protobuf_go_features_proto = out.File - file_google_protobuf_go_features_proto_rawDesc = nil file_google_protobuf_go_features_proto_goTypes = nil file_google_protobuf_go_features_proto_depIdxs = nil } diff --git a/vendor/google.golang.org/protobuf/types/known/anypb/any.pb.go b/vendor/google.golang.org/protobuf/types/known/anypb/any.pb.go index 7172b43d38..1ff0d1494d 100644 --- a/vendor/google.golang.org/protobuf/types/known/anypb/any.pb.go +++ b/vendor/google.golang.org/protobuf/types/known/anypb/any.pb.go @@ -122,6 +122,7 @@ import ( reflect "reflect" strings "strings" sync "sync" + unsafe "unsafe" ) // `Any` contains an arbitrary serialized protocol buffer message along with a @@ -210,10 +211,7 @@ import ( // "value": "1.212s" // } type Any struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` // A URL/resource name that uniquely identifies the type of the serialized // protocol buffer message. This string must contain at least // one "/" character. The last segment of the URL's path must represent @@ -244,7 +242,9 @@ type Any struct { // used with implementation specific semantics. TypeUrl string `protobuf:"bytes,1,opt,name=type_url,json=typeUrl,proto3" json:"type_url,omitempty"` // Must be a valid serialized protocol buffer of the above specified type. - Value []byte `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` + Value []byte `protobuf:"bytes,2,opt,name=value,proto3" json:"value,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } // New marshals src into a new Any instance. @@ -368,11 +368,9 @@ func (x *Any) UnmarshalNew() (proto.Message, error) { func (x *Any) Reset() { *x = Any{} - if protoimpl.UnsafeEnabled { - mi := &file_google_protobuf_any_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_google_protobuf_any_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Any) String() string { @@ -383,7 +381,7 @@ func (*Any) ProtoMessage() {} func (x *Any) ProtoReflect() protoreflect.Message { mi := &file_google_protobuf_any_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -414,32 +412,22 @@ func (x *Any) GetValue() []byte { var File_google_protobuf_any_proto protoreflect.FileDescriptor -var file_google_protobuf_any_proto_rawDesc = []byte{ - 0x0a, 0x19, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2f, 0x61, 0x6e, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0f, 0x67, 0x6f, 0x6f, - 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x22, 0x36, 0x0a, 0x03, - 0x41, 0x6e, 0x79, 0x12, 0x19, 0x0a, 0x08, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x75, 0x72, 0x6c, 0x18, - 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x74, 0x79, 0x70, 0x65, 0x55, 0x72, 0x6c, 0x12, 0x14, - 0x0a, 0x05, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x0c, 0x52, 0x05, 0x76, - 0x61, 0x6c, 0x75, 0x65, 0x42, 0x76, 0x0a, 0x13, 0x63, 0x6f, 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, - 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x42, 0x08, 0x41, 0x6e, 0x79, - 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2c, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x62, 0x75, 0x66, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x2f, - 0x61, 0x6e, 0x79, 0x70, 0x62, 0xa2, 0x02, 0x03, 0x47, 0x50, 0x42, 0xaa, 0x02, 0x1e, 0x47, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x57, 0x65, - 0x6c, 0x6c, 0x4b, 0x6e, 0x6f, 0x77, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x73, 0x62, 0x06, 0x70, 0x72, - 0x6f, 0x74, 0x6f, 0x33, -} +const file_google_protobuf_any_proto_rawDesc = "" + + "\n" + + "\x19google/protobuf/any.proto\x12\x0fgoogle.protobuf\"6\n" + + "\x03Any\x12\x19\n" + + "\btype_url\x18\x01 \x01(\tR\atypeUrl\x12\x14\n" + + "\x05value\x18\x02 \x01(\fR\x05valueBv\n" + + "\x13com.google.protobufB\bAnyProtoP\x01Z,google.golang.org/protobuf/types/known/anypb\xa2\x02\x03GPB\xaa\x02\x1eGoogle.Protobuf.WellKnownTypesb\x06proto3" var ( file_google_protobuf_any_proto_rawDescOnce sync.Once - file_google_protobuf_any_proto_rawDescData = file_google_protobuf_any_proto_rawDesc + file_google_protobuf_any_proto_rawDescData []byte ) func file_google_protobuf_any_proto_rawDescGZIP() []byte { file_google_protobuf_any_proto_rawDescOnce.Do(func() { - file_google_protobuf_any_proto_rawDescData = protoimpl.X.CompressGZIP(file_google_protobuf_any_proto_rawDescData) + file_google_protobuf_any_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_google_protobuf_any_proto_rawDesc), len(file_google_protobuf_any_proto_rawDesc))) }) return file_google_protobuf_any_proto_rawDescData } @@ -461,25 +449,11 @@ func file_google_protobuf_any_proto_init() { if File_google_protobuf_any_proto != nil { return } - if !protoimpl.UnsafeEnabled { - file_google_protobuf_any_proto_msgTypes[0].Exporter = func(v any, i int) any { - switch v := v.(*Any); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_google_protobuf_any_proto_rawDesc, + RawDescriptor: unsafe.Slice(unsafe.StringData(file_google_protobuf_any_proto_rawDesc), len(file_google_protobuf_any_proto_rawDesc)), NumEnums: 0, NumMessages: 1, NumExtensions: 0, @@ -490,7 +464,6 @@ func file_google_protobuf_any_proto_init() { MessageInfos: file_google_protobuf_any_proto_msgTypes, }.Build() File_google_protobuf_any_proto = out.File - file_google_protobuf_any_proto_rawDesc = nil file_google_protobuf_any_proto_goTypes = nil file_google_protobuf_any_proto_depIdxs = nil } diff --git a/vendor/google.golang.org/protobuf/types/known/durationpb/duration.pb.go b/vendor/google.golang.org/protobuf/types/known/durationpb/duration.pb.go index 1b71bcd910..ca2e7b38f4 100644 --- a/vendor/google.golang.org/protobuf/types/known/durationpb/duration.pb.go +++ b/vendor/google.golang.org/protobuf/types/known/durationpb/duration.pb.go @@ -80,6 +80,7 @@ import ( reflect "reflect" sync "sync" time "time" + unsafe "unsafe" ) // A Duration represents a signed, fixed-length span of time represented @@ -141,10 +142,7 @@ import ( // be expressed in JSON format as "3.000000001s", and 3 seconds and 1 // microsecond should be expressed in JSON format as "3.000001s". type Duration struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - + state protoimpl.MessageState `protogen:"open.v1"` // Signed seconds of the span of time. Must be from -315,576,000,000 // to +315,576,000,000 inclusive. Note: these bounds are computed from: // 60 sec/min * 60 min/hr * 24 hr/day * 365.25 days/year * 10000 years @@ -155,7 +153,9 @@ type Duration struct { // of one second or more, a non-zero value for the `nanos` field must be // of the same sign as the `seconds` field. Must be from -999,999,999 // to +999,999,999 inclusive. - Nanos int32 `protobuf:"varint,2,opt,name=nanos,proto3" json:"nanos,omitempty"` + Nanos int32 `protobuf:"varint,2,opt,name=nanos,proto3" json:"nanos,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } // New constructs a new Duration from the provided time.Duration. @@ -245,11 +245,9 @@ func (x *Duration) check() uint { func (x *Duration) Reset() { *x = Duration{} - if protoimpl.UnsafeEnabled { - mi := &file_google_protobuf_duration_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_google_protobuf_duration_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Duration) String() string { @@ -260,7 +258,7 @@ func (*Duration) ProtoMessage() {} func (x *Duration) ProtoReflect() protoreflect.Message { mi := &file_google_protobuf_duration_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -291,33 +289,22 @@ func (x *Duration) GetNanos() int32 { var File_google_protobuf_duration_proto protoreflect.FileDescriptor -var file_google_protobuf_duration_proto_rawDesc = []byte{ - 0x0a, 0x1e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2f, 0x64, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, - 0x12, 0x0f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x22, 0x3a, 0x0a, 0x08, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x12, 0x18, 0x0a, - 0x07, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, 0x52, 0x07, - 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x6e, 0x61, 0x6e, 0x6f, 0x73, - 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x6e, 0x61, 0x6e, 0x6f, 0x73, 0x42, 0x83, 0x01, - 0x0a, 0x13, 0x63, 0x6f, 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x42, 0x0d, 0x44, 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x50, - 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x31, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x67, - 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x6b, 0x6e, 0x6f, 0x77, 0x6e, 0x2f, 0x64, - 0x75, 0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x70, 0x62, 0xf8, 0x01, 0x01, 0xa2, 0x02, 0x03, 0x47, - 0x50, 0x42, 0xaa, 0x02, 0x1e, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x50, 0x72, 0x6f, 0x74, - 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x57, 0x65, 0x6c, 0x6c, 0x4b, 0x6e, 0x6f, 0x77, 0x6e, 0x54, 0x79, - 0x70, 0x65, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} +const file_google_protobuf_duration_proto_rawDesc = "" + + "\n" + + "\x1egoogle/protobuf/duration.proto\x12\x0fgoogle.protobuf\":\n" + + "\bDuration\x12\x18\n" + + "\aseconds\x18\x01 \x01(\x03R\aseconds\x12\x14\n" + + "\x05nanos\x18\x02 \x01(\x05R\x05nanosB\x83\x01\n" + + "\x13com.google.protobufB\rDurationProtoP\x01Z1google.golang.org/protobuf/types/known/durationpb\xf8\x01\x01\xa2\x02\x03GPB\xaa\x02\x1eGoogle.Protobuf.WellKnownTypesb\x06proto3" var ( file_google_protobuf_duration_proto_rawDescOnce sync.Once - file_google_protobuf_duration_proto_rawDescData = file_google_protobuf_duration_proto_rawDesc + file_google_protobuf_duration_proto_rawDescData []byte ) func file_google_protobuf_duration_proto_rawDescGZIP() []byte { file_google_protobuf_duration_proto_rawDescOnce.Do(func() { - file_google_protobuf_duration_proto_rawDescData = protoimpl.X.CompressGZIP(file_google_protobuf_duration_proto_rawDescData) + file_google_protobuf_duration_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_google_protobuf_duration_proto_rawDesc), len(file_google_protobuf_duration_proto_rawDesc))) }) return file_google_protobuf_duration_proto_rawDescData } @@ -339,25 +326,11 @@ func file_google_protobuf_duration_proto_init() { if File_google_protobuf_duration_proto != nil { return } - if !protoimpl.UnsafeEnabled { - file_google_protobuf_duration_proto_msgTypes[0].Exporter = func(v any, i int) any { - switch v := v.(*Duration); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_google_protobuf_duration_proto_rawDesc, + RawDescriptor: unsafe.Slice(unsafe.StringData(file_google_protobuf_duration_proto_rawDesc), len(file_google_protobuf_duration_proto_rawDesc)), NumEnums: 0, NumMessages: 1, NumExtensions: 0, @@ -368,7 +341,6 @@ func file_google_protobuf_duration_proto_init() { MessageInfos: file_google_protobuf_duration_proto_msgTypes, }.Build() File_google_protobuf_duration_proto = out.File - file_google_protobuf_duration_proto_rawDesc = nil file_google_protobuf_duration_proto_goTypes = nil file_google_protobuf_duration_proto_depIdxs = nil } diff --git a/vendor/google.golang.org/protobuf/types/known/emptypb/empty.pb.go b/vendor/google.golang.org/protobuf/types/known/emptypb/empty.pb.go index d87b4fb828..1d7ee3b476 100644 --- a/vendor/google.golang.org/protobuf/types/known/emptypb/empty.pb.go +++ b/vendor/google.golang.org/protobuf/types/known/emptypb/empty.pb.go @@ -38,6 +38,7 @@ import ( protoimpl "google.golang.org/protobuf/runtime/protoimpl" reflect "reflect" sync "sync" + unsafe "unsafe" ) // A generic empty message that you can re-use to avoid defining duplicated @@ -48,18 +49,16 @@ import ( // rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); // } type Empty struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache + state protoimpl.MessageState `protogen:"open.v1"` unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } func (x *Empty) Reset() { *x = Empty{} - if protoimpl.UnsafeEnabled { - mi := &file_google_protobuf_empty_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_google_protobuf_empty_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Empty) String() string { @@ -70,7 +69,7 @@ func (*Empty) ProtoMessage() {} func (x *Empty) ProtoReflect() protoreflect.Message { mi := &file_google_protobuf_empty_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -87,29 +86,21 @@ func (*Empty) Descriptor() ([]byte, []int) { var File_google_protobuf_empty_proto protoreflect.FileDescriptor -var file_google_protobuf_empty_proto_rawDesc = []byte{ - 0x0a, 0x1b, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x12, 0x0f, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x22, 0x07, - 0x0a, 0x05, 0x45, 0x6d, 0x70, 0x74, 0x79, 0x42, 0x7d, 0x0a, 0x13, 0x63, 0x6f, 0x6d, 0x2e, 0x67, - 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x42, 0x0a, - 0x45, 0x6d, 0x70, 0x74, 0x79, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x2e, 0x67, 0x6f, - 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2e, 0x6f, 0x72, 0x67, 0x2f, - 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x6b, - 0x6e, 0x6f, 0x77, 0x6e, 0x2f, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x70, 0x62, 0xf8, 0x01, 0x01, 0xa2, - 0x02, 0x03, 0x47, 0x50, 0x42, 0xaa, 0x02, 0x1e, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x50, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x57, 0x65, 0x6c, 0x6c, 0x4b, 0x6e, 0x6f, 0x77, - 0x6e, 0x54, 0x79, 0x70, 0x65, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} +const file_google_protobuf_empty_proto_rawDesc = "" + + "\n" + + "\x1bgoogle/protobuf/empty.proto\x12\x0fgoogle.protobuf\"\a\n" + + "\x05EmptyB}\n" + + "\x13com.google.protobufB\n" + + "EmptyProtoP\x01Z.google.golang.org/protobuf/types/known/emptypb\xf8\x01\x01\xa2\x02\x03GPB\xaa\x02\x1eGoogle.Protobuf.WellKnownTypesb\x06proto3" var ( file_google_protobuf_empty_proto_rawDescOnce sync.Once - file_google_protobuf_empty_proto_rawDescData = file_google_protobuf_empty_proto_rawDesc + file_google_protobuf_empty_proto_rawDescData []byte ) func file_google_protobuf_empty_proto_rawDescGZIP() []byte { file_google_protobuf_empty_proto_rawDescOnce.Do(func() { - file_google_protobuf_empty_proto_rawDescData = protoimpl.X.CompressGZIP(file_google_protobuf_empty_proto_rawDescData) + file_google_protobuf_empty_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_google_protobuf_empty_proto_rawDesc), len(file_google_protobuf_empty_proto_rawDesc))) }) return file_google_protobuf_empty_proto_rawDescData } @@ -131,25 +122,11 @@ func file_google_protobuf_empty_proto_init() { if File_google_protobuf_empty_proto != nil { return } - if !protoimpl.UnsafeEnabled { - file_google_protobuf_empty_proto_msgTypes[0].Exporter = func(v any, i int) any { - switch v := v.(*Empty); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_google_protobuf_empty_proto_rawDesc, + RawDescriptor: unsafe.Slice(unsafe.StringData(file_google_protobuf_empty_proto_rawDesc), len(file_google_protobuf_empty_proto_rawDesc)), NumEnums: 0, NumMessages: 1, NumExtensions: 0, @@ -160,7 +137,6 @@ func file_google_protobuf_empty_proto_init() { MessageInfos: file_google_protobuf_empty_proto_msgTypes, }.Build() File_google_protobuf_empty_proto = out.File - file_google_protobuf_empty_proto_rawDesc = nil file_google_protobuf_empty_proto_goTypes = nil file_google_protobuf_empty_proto_depIdxs = nil } diff --git a/vendor/google.golang.org/protobuf/types/known/timestamppb/timestamp.pb.go b/vendor/google.golang.org/protobuf/types/known/timestamppb/timestamp.pb.go index 83a5a645b0..484c21fd53 100644 --- a/vendor/google.golang.org/protobuf/types/known/timestamppb/timestamp.pb.go +++ b/vendor/google.golang.org/protobuf/types/known/timestamppb/timestamp.pb.go @@ -78,6 +78,7 @@ import ( reflect "reflect" sync "sync" time "time" + unsafe "unsafe" ) // A Timestamp represents a point in time independent of any time zone or local @@ -170,19 +171,19 @@ import ( // http://joda-time.sourceforge.net/apidocs/org/joda/time/format/ISODateTimeFormat.html#dateTime() // ) to obtain a formatter capable of generating timestamps in this format. type Timestamp struct { - state protoimpl.MessageState - sizeCache protoimpl.SizeCache - unknownFields protoimpl.UnknownFields - - // Represents seconds of UTC time since Unix epoch - // 1970-01-01T00:00:00Z. Must be from 0001-01-01T00:00:00Z to - // 9999-12-31T23:59:59Z inclusive. + state protoimpl.MessageState `protogen:"open.v1"` + // Represents seconds of UTC time since Unix epoch 1970-01-01T00:00:00Z. Must + // be between -315576000000 and 315576000000 inclusive (which corresponds to + // 0001-01-01T00:00:00Z to 9999-12-31T23:59:59Z). Seconds int64 `protobuf:"varint,1,opt,name=seconds,proto3" json:"seconds,omitempty"` - // Non-negative fractions of a second at nanosecond resolution. Negative - // second values with fractions must still have non-negative nanos values - // that count forward in time. Must be from 0 to 999,999,999 + // Non-negative fractions of a second at nanosecond resolution. This field is + // the nanosecond portion of the duration, not an alternative to seconds. + // Negative second values with fractions must still have non-negative nanos + // values that count forward in time. Must be between 0 and 999,999,999 // inclusive. - Nanos int32 `protobuf:"varint,2,opt,name=nanos,proto3" json:"nanos,omitempty"` + Nanos int32 `protobuf:"varint,2,opt,name=nanos,proto3" json:"nanos,omitempty"` + unknownFields protoimpl.UnknownFields + sizeCache protoimpl.SizeCache } // Now constructs a new Timestamp from the current time. @@ -254,11 +255,9 @@ func (x *Timestamp) check() uint { func (x *Timestamp) Reset() { *x = Timestamp{} - if protoimpl.UnsafeEnabled { - mi := &file_google_protobuf_timestamp_proto_msgTypes[0] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) - } + mi := &file_google_protobuf_timestamp_proto_msgTypes[0] + ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) + ms.StoreMessageInfo(mi) } func (x *Timestamp) String() string { @@ -269,7 +268,7 @@ func (*Timestamp) ProtoMessage() {} func (x *Timestamp) ProtoReflect() protoreflect.Message { mi := &file_google_protobuf_timestamp_proto_msgTypes[0] - if protoimpl.UnsafeEnabled && x != nil { + if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { ms.StoreMessageInfo(mi) @@ -300,33 +299,22 @@ func (x *Timestamp) GetNanos() int32 { var File_google_protobuf_timestamp_proto protoreflect.FileDescriptor -var file_google_protobuf_timestamp_proto_rawDesc = []byte{ - 0x0a, 0x1f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, - 0x66, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x2e, 0x70, 0x72, 0x6f, 0x74, - 0x6f, 0x12, 0x0f, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, - 0x75, 0x66, 0x22, 0x3b, 0x0a, 0x09, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x12, - 0x18, 0x0a, 0x07, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x18, 0x01, 0x20, 0x01, 0x28, 0x03, - 0x52, 0x07, 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x73, 0x12, 0x14, 0x0a, 0x05, 0x6e, 0x61, 0x6e, - 0x6f, 0x73, 0x18, 0x02, 0x20, 0x01, 0x28, 0x05, 0x52, 0x05, 0x6e, 0x61, 0x6e, 0x6f, 0x73, 0x42, - 0x85, 0x01, 0x0a, 0x13, 0x63, 0x6f, 0x6d, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, - 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x42, 0x0e, 0x54, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, - 0x6d, 0x70, 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x50, 0x01, 0x5a, 0x32, 0x67, 0x6f, 0x6f, 0x67, 0x6c, - 0x65, 0x2e, 0x67, 0x6f, 0x6c, 0x61, 0x6e, 0x67, 0x2e, 0x6f, 0x72, 0x67, 0x2f, 0x70, 0x72, 0x6f, - 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x74, 0x79, 0x70, 0x65, 0x73, 0x2f, 0x6b, 0x6e, 0x6f, 0x77, - 0x6e, 0x2f, 0x74, 0x69, 0x6d, 0x65, 0x73, 0x74, 0x61, 0x6d, 0x70, 0x70, 0x62, 0xf8, 0x01, 0x01, - 0xa2, 0x02, 0x03, 0x47, 0x50, 0x42, 0xaa, 0x02, 0x1e, 0x47, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, - 0x50, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x57, 0x65, 0x6c, 0x6c, 0x4b, 0x6e, 0x6f, - 0x77, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x73, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33, -} +const file_google_protobuf_timestamp_proto_rawDesc = "" + + "\n" + + "\x1fgoogle/protobuf/timestamp.proto\x12\x0fgoogle.protobuf\";\n" + + "\tTimestamp\x12\x18\n" + + "\aseconds\x18\x01 \x01(\x03R\aseconds\x12\x14\n" + + "\x05nanos\x18\x02 \x01(\x05R\x05nanosB\x85\x01\n" + + "\x13com.google.protobufB\x0eTimestampProtoP\x01Z2google.golang.org/protobuf/types/known/timestamppb\xf8\x01\x01\xa2\x02\x03GPB\xaa\x02\x1eGoogle.Protobuf.WellKnownTypesb\x06proto3" var ( file_google_protobuf_timestamp_proto_rawDescOnce sync.Once - file_google_protobuf_timestamp_proto_rawDescData = file_google_protobuf_timestamp_proto_rawDesc + file_google_protobuf_timestamp_proto_rawDescData []byte ) func file_google_protobuf_timestamp_proto_rawDescGZIP() []byte { file_google_protobuf_timestamp_proto_rawDescOnce.Do(func() { - file_google_protobuf_timestamp_proto_rawDescData = protoimpl.X.CompressGZIP(file_google_protobuf_timestamp_proto_rawDescData) + file_google_protobuf_timestamp_proto_rawDescData = protoimpl.X.CompressGZIP(unsafe.Slice(unsafe.StringData(file_google_protobuf_timestamp_proto_rawDesc), len(file_google_protobuf_timestamp_proto_rawDesc))) }) return file_google_protobuf_timestamp_proto_rawDescData } @@ -348,25 +336,11 @@ func file_google_protobuf_timestamp_proto_init() { if File_google_protobuf_timestamp_proto != nil { return } - if !protoimpl.UnsafeEnabled { - file_google_protobuf_timestamp_proto_msgTypes[0].Exporter = func(v any, i int) any { - switch v := v.(*Timestamp); i { - case 0: - return &v.state - case 1: - return &v.sizeCache - case 2: - return &v.unknownFields - default: - return nil - } - } - } type x struct{} out := protoimpl.TypeBuilder{ File: protoimpl.DescBuilder{ GoPackagePath: reflect.TypeOf(x{}).PkgPath(), - RawDescriptor: file_google_protobuf_timestamp_proto_rawDesc, + RawDescriptor: unsafe.Slice(unsafe.StringData(file_google_protobuf_timestamp_proto_rawDesc), len(file_google_protobuf_timestamp_proto_rawDesc)), NumEnums: 0, NumMessages: 1, NumExtensions: 0, @@ -377,7 +351,6 @@ func file_google_protobuf_timestamp_proto_init() { MessageInfos: file_google_protobuf_timestamp_proto_msgTypes, }.Build() File_google_protobuf_timestamp_proto = out.File - file_google_protobuf_timestamp_proto_rawDesc = nil file_google_protobuf_timestamp_proto_goTypes = nil file_google_protobuf_timestamp_proto_depIdxs = nil } diff --git a/vendor/modules.txt b/vendor/modules.txt index 93aad2acd2..9f6551d39f 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -49,12 +49,31 @@ github.com/apex/log # github.com/av-elier/go-decimal-to-rational v0.0.0-20191127152832-89e6aad02ecf ## explicit github.com/av-elier/go-decimal-to-rational +# github.com/beeper/argo-go v1.1.2 +## explicit; go 1.23.0 +github.com/beeper/argo-go/block +github.com/beeper/argo-go/codec +github.com/beeper/argo-go/header +github.com/beeper/argo-go/internal/util +github.com/beeper/argo-go/label +github.com/beeper/argo-go/pkg/bitset +github.com/beeper/argo-go/pkg/buf +github.com/beeper/argo-go/pkg/varint +github.com/beeper/argo-go/wire +github.com/beeper/argo-go/wirecodec # github.com/blang/semver/v4 v4.0.0 ## explicit; go 1.14 github.com/blang/semver/v4 # github.com/bwmarrin/discordgo v0.28.1 ## explicit; go 1.13 github.com/bwmarrin/discordgo +# github.com/coder/websocket v1.8.14 +## explicit; go 1.23 +github.com/coder/websocket +github.com/coder/websocket/internal/bpool +github.com/coder/websocket/internal/errd +github.com/coder/websocket/internal/util +github.com/coder/websocket/internal/wsjs # github.com/d5/tengo/v2 v2.17.0 ## explicit; go 1.13 github.com/d5/tengo/v2 @@ -79,6 +98,9 @@ github.com/dyatlov/go-opengraph/opengraph/types/image github.com/dyatlov/go-opengraph/opengraph/types/music github.com/dyatlov/go-opengraph/opengraph/types/profile github.com/dyatlov/go-opengraph/opengraph/types/video +# github.com/elliotchance/orderedmap/v3 v3.1.0 +## explicit; go 1.23.0 +github.com/elliotchance/orderedmap/v3 # github.com/fatih/color v1.17.0 ## explicit; go 1.17 github.com/fatih/color @@ -257,8 +279,8 @@ github.com/mattermost/mattermost/server/public/shared/markdown github.com/mattermost/mattermost/server/public/shared/mlog github.com/mattermost/mattermost/server/public/shared/timezones github.com/mattermost/mattermost/server/public/utils -# github.com/mattn/go-colorable v0.1.13 -## explicit; go 1.15 +# github.com/mattn/go-colorable v0.1.14 +## explicit; go 1.18 github.com/mattn/go-colorable # github.com/mattn/go-isatty v0.0.20 ## explicit; go 1.15 @@ -315,6 +337,9 @@ github.com/pelletier/go-toml/v2/internal/characters github.com/pelletier/go-toml/v2/internal/danger github.com/pelletier/go-toml/v2/internal/tracker github.com/pelletier/go-toml/v2/unstable +# github.com/petermattis/goid v0.0.0-20260113132338-7c7de50cc741 +## explicit; go 1.17 +github.com/petermattis/goid # github.com/philhofer/fwd v1.1.3-0.20240612014219-fbbf4953d986 ## explicit; go 1.20 github.com/philhofer/fwd @@ -336,14 +361,15 @@ github.com/rickb777/plural # github.com/rivo/uniseg v0.4.7 ## explicit; go 1.18 github.com/rivo/uniseg -# github.com/rs/xid v1.5.0 -## explicit; go 1.12 +# github.com/rs/xid v1.6.0 +## explicit; go 1.16 github.com/rs/xid -# github.com/rs/zerolog v1.33.0 +# github.com/rs/zerolog v1.34.0 ## explicit; go 1.15 github.com/rs/zerolog github.com/rs/zerolog/internal/cbor github.com/rs/zerolog/internal/json +github.com/rs/zerolog/log # github.com/russross/blackfriday v1.6.0 ## explicit; go 1.13 github.com/russross/blackfriday @@ -411,9 +437,10 @@ github.com/spf13/viper/internal/encoding/json github.com/spf13/viper/internal/encoding/toml github.com/spf13/viper/internal/encoding/yaml github.com/spf13/viper/internal/features -# github.com/stretchr/testify v1.9.0 +# github.com/stretchr/testify v1.11.1 ## explicit; go 1.17 github.com/stretchr/testify/assert +github.com/stretchr/testify/assert/yaml github.com/stretchr/testify/require github.com/stretchr/testify/suite # github.com/subosito/gotenv v1.6.0 @@ -428,6 +455,9 @@ github.com/valyala/bytebufferpool # github.com/valyala/fasttemplate v1.2.2 ## explicit; go 1.12 github.com/valyala/fasttemplate +# github.com/vektah/gqlparser/v2 v2.5.27 +## explicit; go 1.22 +github.com/vektah/gqlparser/v2/ast # github.com/vincent-petithory/dataurl v1.0.0 ## explicit github.com/vincent-petithory/dataurl @@ -457,8 +487,8 @@ github.com/yaegashi/msgraph.go/msauth # github.com/zfjagann/golang-ring v0.0.0-20220330170733-19bcea1b6289 ## explicit github.com/zfjagann/golang-ring -# go.mau.fi/libsignal v0.1.1 -## explicit; go 1.18 +# go.mau.fi/libsignal v0.2.1 +## explicit; go 1.24.0 go.mau.fi/libsignal/cipher go.mau.fi/libsignal/ecc go.mau.fi/libsignal/groups @@ -485,24 +515,49 @@ go.mau.fi/libsignal/util/errorhelper go.mau.fi/libsignal/util/keyhelper go.mau.fi/libsignal/util/medium go.mau.fi/libsignal/util/optional -# go.mau.fi/util v0.6.0 -## explicit; go 1.21 +# go.mau.fi/util v0.9.6 +## explicit; go 1.25.0 +go.mau.fi/util/dbutil +go.mau.fi/util/exbytes +go.mau.fi/util/exerrors +go.mau.fi/util/exhttp +go.mau.fi/util/exmaps +go.mau.fi/util/exslices +go.mau.fi/util/exstrings +go.mau.fi/util/exsync +go.mau.fi/util/exzerolog +go.mau.fi/util/fallocate go.mau.fi/util/jsontime +go.mau.fi/util/ptr go.mau.fi/util/random go.mau.fi/util/retryafter -# go.mau.fi/whatsmeow v0.0.0-20240821142752-3d63c6fcc1a7 -## explicit; go 1.21 +# go.mau.fi/whatsmeow v0.0.0-20260218135554-9cbe80fb25a4 +## explicit; go 1.25.0 go.mau.fi/whatsmeow go.mau.fi/whatsmeow/appstate go.mau.fi/whatsmeow/appstate/lthash +go.mau.fi/whatsmeow/argo go.mau.fi/whatsmeow/binary go.mau.fi/whatsmeow/binary/proto go.mau.fi/whatsmeow/binary/token go.mau.fi/whatsmeow/proto go.mau.fi/whatsmeow/proto/armadilloutil +go.mau.fi/whatsmeow/proto/instamadilloAddMessage +go.mau.fi/whatsmeow/proto/instamadilloCoreTypeActionLog +go.mau.fi/whatsmeow/proto/instamadilloCoreTypeAdminMessage +go.mau.fi/whatsmeow/proto/instamadilloCoreTypeCollection +go.mau.fi/whatsmeow/proto/instamadilloCoreTypeLink +go.mau.fi/whatsmeow/proto/instamadilloCoreTypeMedia +go.mau.fi/whatsmeow/proto/instamadilloCoreTypeText +go.mau.fi/whatsmeow/proto/instamadilloDeleteMessage +go.mau.fi/whatsmeow/proto/instamadilloSupplementMessage +go.mau.fi/whatsmeow/proto/instamadilloTransportPayload +go.mau.fi/whatsmeow/proto/instamadilloXmaContentRef +go.mau.fi/whatsmeow/proto/waAICommon go.mau.fi/whatsmeow/proto/waAdv go.mau.fi/whatsmeow/proto/waArmadilloApplication go.mau.fi/whatsmeow/proto/waArmadilloXMA +go.mau.fi/whatsmeow/proto/waBotMetadata go.mau.fi/whatsmeow/proto/waCert go.mau.fi/whatsmeow/proto/waChatLockSettings go.mau.fi/whatsmeow/proto/waCommon @@ -512,6 +567,7 @@ go.mau.fi/whatsmeow/proto/waDeviceCapabilities go.mau.fi/whatsmeow/proto/waE2E go.mau.fi/whatsmeow/proto/waEphemeral go.mau.fi/whatsmeow/proto/waHistorySync +go.mau.fi/whatsmeow/proto/waLidMigrationSyncPayload go.mau.fi/whatsmeow/proto/waMediaTransport go.mau.fi/whatsmeow/proto/waMmsRetry go.mau.fi/whatsmeow/proto/waMsgApplication @@ -519,7 +575,9 @@ go.mau.fi/whatsmeow/proto/waMsgTransport go.mau.fi/whatsmeow/proto/waMultiDevice go.mau.fi/whatsmeow/proto/waQuickPromotionSurfaces go.mau.fi/whatsmeow/proto/waServerSync +go.mau.fi/whatsmeow/proto/waStatusAttributions go.mau.fi/whatsmeow/proto/waSyncAction +go.mau.fi/whatsmeow/proto/waSyncdSnapshotRecovery go.mau.fi/whatsmeow/proto/waUserPassword go.mau.fi/whatsmeow/proto/waVnameCert go.mau.fi/whatsmeow/proto/waWa6 @@ -527,6 +585,7 @@ go.mau.fi/whatsmeow/proto/waWeb go.mau.fi/whatsmeow/socket go.mau.fi/whatsmeow/store go.mau.fi/whatsmeow/store/sqlstore +go.mau.fi/whatsmeow/store/sqlstore/upgrades go.mau.fi/whatsmeow/types go.mau.fi/whatsmeow/types/events go.mau.fi/whatsmeow/util/cbcutil @@ -537,8 +596,8 @@ go.mau.fi/whatsmeow/util/log # go.uber.org/multierr v1.11.0 ## explicit; go 1.19 go.uber.org/multierr -# golang.org/x/crypto v0.25.0 -## explicit; go 1.20 +# golang.org/x/crypto v0.48.0 +## explicit; go 1.24.0 golang.org/x/crypto/acme golang.org/x/crypto/acme/autocert golang.org/x/crypto/bcrypt @@ -555,8 +614,8 @@ golang.org/x/crypto/scrypt golang.org/x/crypto/ssh golang.org/x/crypto/ssh/internal/bcrypt_pbkdf golang.org/x/crypto/ssh/terminal -# golang.org/x/exp v0.0.0-20240707233637-46b078467d37 -## explicit; go 1.20 +# golang.org/x/exp v0.0.0-20260212183809-81e46e3db34a +## explicit; go 1.25.0 golang.org/x/exp/constraints golang.org/x/exp/slices golang.org/x/exp/slog @@ -568,8 +627,8 @@ golang.org/x/image/riff golang.org/x/image/vp8 golang.org/x/image/vp8l golang.org/x/image/webp -# golang.org/x/net v0.27.0 -## explicit; go 1.18 +# golang.org/x/net v0.50.0 +## explicit; go 1.24.0 golang.org/x/net/html golang.org/x/net/html/atom golang.org/x/net/http/httpguts @@ -577,6 +636,8 @@ golang.org/x/net/http2 golang.org/x/net/http2/h2c golang.org/x/net/http2/hpack golang.org/x/net/idna +golang.org/x/net/internal/httpcommon +golang.org/x/net/internal/httpsfv golang.org/x/net/internal/socks golang.org/x/net/internal/timeseries golang.org/x/net/proxy @@ -588,17 +649,17 @@ golang.org/x/oauth2 golang.org/x/oauth2/clientcredentials golang.org/x/oauth2/internal golang.org/x/oauth2/microsoft -# golang.org/x/sys v0.22.0 -## explicit; go 1.18 +# golang.org/x/sys v0.41.0 +## explicit; go 1.24.0 golang.org/x/sys/cpu golang.org/x/sys/plan9 golang.org/x/sys/unix golang.org/x/sys/windows -# golang.org/x/term v0.22.0 -## explicit; go 1.18 +# golang.org/x/term v0.40.0 +## explicit; go 1.24.0 golang.org/x/term -# golang.org/x/text v0.17.0 -## explicit; go 1.18 +# golang.org/x/text v0.34.0 +## explicit; go 1.24.0 golang.org/x/text/encoding golang.org/x/text/encoding/charmap golang.org/x/text/encoding/internal @@ -690,8 +751,8 @@ google.golang.org/grpc/serviceconfig google.golang.org/grpc/stats google.golang.org/grpc/status google.golang.org/grpc/tap -# google.golang.org/protobuf v1.34.2 -## explicit; go 1.20 +# google.golang.org/protobuf v1.36.11 +## explicit; go 1.23 google.golang.org/protobuf/encoding/protojson google.golang.org/protobuf/encoding/prototext google.golang.org/protobuf/encoding/protowire @@ -713,6 +774,7 @@ google.golang.org/protobuf/internal/genid google.golang.org/protobuf/internal/impl google.golang.org/protobuf/internal/order google.golang.org/protobuf/internal/pragma +google.golang.org/protobuf/internal/protolazy google.golang.org/protobuf/internal/set google.golang.org/protobuf/internal/strs google.golang.org/protobuf/internal/version